diff --git a/CHANGELOG.md b/CHANGELOG.md index 49d72b300..58068d589 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,28 @@ # Change Log +## v2.4.0 + +- Introduce the `captureIp` configuration settting. + For browser settings, this determines how we attempt to capture IP addresses from the client + that submits items. For server settings, this determines how we capture IP addresses from requests. + + Possible values are: `true`, `false`, or `anonymize`. + + If `true` then we will attempt to capture and store the full IP address of the client. + If set to `anonymize` we will do a semi-anonymization on the captured IP address by masking out + the least significant bits. + If set to `false` we will not attempt to capture any IP address. + + Default: true + +- Introduce the `captureUsername` and `captureEmail` configuration settings. + In the server context, as described in the documentation, we attempt to gather information about + the current user. Prior to this release, we tried to gather the `id`, `username`, and `email`. + Starting with this release, by default we only attempt to capture the `id` for a user. + The boolean configuration options `captureEmail` and `captureUsername` can be used to change + this behaviour. + + ## v2.3.6 - Updates for React Native diff --git a/README.md b/README.md index 36711785b..bd73977ac 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Rollbar for JavaScript [![Build Status](https://api.travis-ci.org/rollbar/rollbar.js.png?branch=v2.3.9)](https://travis-ci.org/rollbar/rollbar.js) +# Rollbar for JavaScript [![Build Status](https://api.travis-ci.org/rollbar/rollbar.js.png?branch=v2.4.0)](https://travis-ci.org/rollbar/rollbar.js) @@ -22,7 +22,7 @@ var _rollbarConfig = { } }; // Rollbar Snippet -!function(r){function e(n){if(o[n])return o[n].exports;var t=o[n]={exports:{},id:n,loaded:!1};return r[n].call(t.exports,t,t.exports,e),t.loaded=!0,t.exports}var o={};return e.m=r,e.c=o,e.p="",e(0)}([function(r,e,o){"use strict";var n=o(1),t=o(4);_rollbarConfig=_rollbarConfig||{},_rollbarConfig.rollbarJsUrl=_rollbarConfig.rollbarJsUrl||"https://cdnjs.cloudflare.com/ajax/libs/rollbar.js/2.3.9/rollbar.min.js",_rollbarConfig.async=void 0===_rollbarConfig.async||_rollbarConfig.async;var a=n.setupShim(window,_rollbarConfig),l=t(_rollbarConfig);window.rollbar=n.Rollbar,a.loadFull(window,document,!_rollbarConfig.async,_rollbarConfig,l)},function(r,e,o){"use strict";function n(r){return function(){try{return r.apply(this,arguments)}catch(r){try{console.error("[Rollbar]: Internal error",r)}catch(r){}}}}function t(r,e){this.options=r,this._rollbarOldOnError=null;var o=s++;this.shimId=function(){return o},"undefined"!=typeof window&&window._rollbarShims&&(window._rollbarShims[o]={handler:e,messages:[]})}function a(r,e){if(r){var o=e.globalAlias||"Rollbar";if("object"==typeof r[o])return r[o];r._rollbarShims={},r._rollbarWrappedError=null;var t=new p(e);return n(function(){e.captureUncaught&&(t._rollbarOldOnError=r.onerror,i.captureUncaughtExceptions(r,t,!0),i.wrapGlobals(r,t,!0)),e.captureUnhandledRejections&&i.captureUnhandledRejections(r,t,!0);var n=e.autoInstrument;return e.enabled!==!1&&(void 0===n||n===!0||"object"==typeof n&&n.network)&&r.addEventListener&&(r.addEventListener("load",t.captureLoad.bind(t)),r.addEventListener("DOMContentLoaded",t.captureDomContentLoaded.bind(t))),r[o]=t,t})()}}function l(r){return n(function(){var e=this,o=Array.prototype.slice.call(arguments,0),n={shim:e,method:r,args:o,ts:new Date};window._rollbarShims[this.shimId()].messages.push(n)})}var i=o(2),s=0,d=o(3),c=function(r,e){return new t(r,e)},p=d.bind(null,c);t.prototype.loadFull=function(r,e,o,t,a){var l=function(){var e;if(void 0===r._rollbarDidLoad){e=new Error("rollbar.js did not load");for(var o,n,t,l,i=0;o=r._rollbarShims[i++];)for(o=o.messages||[];n=o.shift();)for(t=n.args||[],i=0;i ``` diff --git a/dist/rollbar.js b/dist/rollbar.js index 94b676c7c..de7b82423 100644 --- a/dist/rollbar.js +++ b/dist/rollbar.js @@ -93,7 +93,7 @@ var Instrumenter = __webpack_require__(25); function Rollbar(options, client) { - this.options = _.extend(true, defaultOptions, options); + this.options = _.extend({}, defaultOptions, options); var api = new API(this.options, transport, urllib); this.client = client || new Client(this.options, api, logger, 'browser'); @@ -148,7 +148,7 @@ if (payloadData) { payload = {payload: payloadData}; } - this.options = _.extend(true, {}, oldOptions, options, payload); + this.options = _.extend({}, oldOptions, options, payload); this.client.configure(options, payloadData); this.instrumenter.configure(options); return this; @@ -358,13 +358,15 @@ return f.apply(this, arguments); } catch(exc) { var e = exc; - if (_.isType(e, 'string')) { - e = new String(e); - } - e._rollbarContext = ctxFn() || {}; - e._rollbarContext._wrappedSource = f.toString(); + if (e) { + if (_.isType(e, 'string')) { + e = new String(e); + } + e._rollbarContext = ctxFn() || {}; + e._rollbarContext._wrappedSource = f.toString(); - window._rollbarWrappedError = e; + window._rollbarWrappedError = e; + } throw e; } }; @@ -470,7 +472,7 @@ /* global __DEFAULT_ENDPOINT__:false */ var defaultOptions = { - version: ("2.3.9"), + version: ("2.4.0"), scrubFields: (["pw","pass","passwd","password","secret","confirm_password","confirmPassword","password_confirmation","passwordConfirmation","access_token","accessToken","secret_key","secretKey","secretToken"]), logLevel: ("debug"), reportLevel: ("debug"), @@ -479,7 +481,8 @@ verbose: false, enabled: true, sendConfig: false, - includeItemsInTelemetry: true + includeItemsInTelemetry: true, + captureIp: true }; module.exports = Rollbar; @@ -1635,6 +1638,42 @@ return +new Date(); } + function filterIp(requestData, captureIp) { + if (!requestData || !requestData['user_ip'] || captureIp === true) { + return; + } + var newIp = requestData['user_ip']; + if (!captureIp) { + newIp = null; + } else { + try { + var parts; + if (newIp.indexOf('.') !== -1) { + parts = newIp.split('.'); + parts.pop(); + parts.push('0'); + newIp = parts.join('.'); + } else if (newIp.indexOf(':') !== -1) { + parts = newIp.split(':'); + if (parts.length > 2) { + var beginning = parts.slice(0, 3); + var slashIdx = beginning[2].indexOf('/'); + if (slashIdx !== -1) { + beginning[2] = beginning[2].substring(0, slashIdx); + } + var terminal = '0000:0000:0000:0000:0000'; + newIp = beginning.concat(terminal).join(':'); + } + } else { + newIp = null; + } + } catch (e) { + newIp = null; + } + } + requestData['user_ip'] = newIp; + } + module.exports = { isType: isType, typeName: typeName, @@ -1658,7 +1697,8 @@ set: set, scrub: scrub, formatArgsAsString: formatArgsAsString, - now: now + now: now, + filterIp: filterIp }; @@ -2555,7 +2595,7 @@ Notifier.prototype.configure = function(options) { this.queue && this.queue.configure(options); var oldOptions = this.options; - this.options = _.extend(true, {}, oldOptions, options); + this.options = _.extend({}, oldOptions, options); return this; }; @@ -3590,10 +3630,16 @@ if (!window || !window.location) { return callback(null, item); } + var remoteString = '$remote_ip'; + if (!options.captureIp) { + remoteString = null; + } else if (options.captureIp !== true) { + remoteString += '_anonymize'; + } _.set(item, 'data.request', { url: window.location.href, query_string: window.location.search, - user_ip: '$remote_ip' + user_ip: remoteString }); callback(null, item); }; diff --git a/dist/rollbar.js.map b/dist/rollbar.js.map index 4a233ff43..68d978c07 100644 --- a/dist/rollbar.js.map +++ b/dist/rollbar.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap 853decbf70a9fe564a4c","webpack:///./src/browser/bundles/rollbar.js","webpack:///./src/browser/rollbar.js","webpack:///./src/rollbar.js","webpack:///./src/rateLimiter.js","webpack:///./src/queue.js","webpack:///./src/utility.js","webpack:///./~/extend/index.js","webpack:///./vendor/JSON-js/json3.js","webpack:///./src/notifier.js","webpack:///./src/telemetry.js","webpack:///./src/api.js","webpack:///./src/apiUtility.js","webpack:///./src/browser/logger.js","webpack:///./~/console-polyfill/index.js","webpack:///./src/browser/detection.js","webpack:///./src/browser/globalSetup.js","webpack:///./src/browser/transport.js","webpack:///./src/browser/url.js","webpack:///./src/browser/transforms.js","webpack:///./src/browser/errorParser.js","webpack:///./~/error-stack-parser/error-stack-parser.js","webpack:///./~/error-stack-parser/~/stackframe/stackframe.js","webpack:///./src/transforms.js","webpack:///./src/browser/predicates.js","webpack:///./src/predicates.js","webpack:///./src/browser/telemetry.js","webpack:///./src/browser/domUtility.js"],"names":[],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;ACtCA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA,EAAC;AACD;AACA;AACA;;AAEA;;;;;;;ACvBA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA,mCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,2BAA0B,sBAAsB;AAChD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,qCAAoC,SAAS;AAC7C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACxZA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA,mCAAkC;AAClC;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACpIA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC7IA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAkC;AAClC;AACA;;AAEA;AACA;AACA;AACA,yDAAwD,WAAW;AACnE;AACA;AACA,gBAAe,WAAW;AAC1B,gBAAe,eAAe;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA2B,QAAQ;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,cAAa,8BAA8B;AAC3C;AACA;AACA;AACA;AACA,gDAA+C,SAAS;AACxD;AACA;AACA,eAAc;AACd;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAkD,SAAS;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAwB,+BAA+B;;AAEvD;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACnQA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAY;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,gBAAe,gBAAgB;AAC/B;AACA;AACA;;AAEA,0BAAyB;AACzB,cAAa,iBAAiB;AAC9B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,mCAAkC,OAAO;AACzC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAmD,SAAS;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,6BAA4B;AAC5B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAwC,SAAS,UAAU,YAAY,GAAG;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,SAAS;AAC/C;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,WAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB,qBAAqB;AACtC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAe,qBAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB,wBAAwB;AACzC;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,kBAAiB,wBAAwB;AACzC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iCAAgC,SAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACzmBA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAmB;;AAEnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA,QAAO,YAAY;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA,OAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAAyE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAoB;AACpB;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,0CAAyC,iBAAiB;AAC1D,+BAA8B,kBAAkB;;AAEhD,0CAAyC,iBAAiB;AAC1D,uCAAsC,6BAA6B;;AAEnE;AACA;AACA;AACA;AACA,cAAa;AACb;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,yBAAwB;AACxB,gDAA+C,EAAE;AACjD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;;AAGA;;AAEA;;AAEA,WAAU;AACV,WAAU;AACV,WAAU;AACV;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA,sBAAqB,YAAY;AACjC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,sBAAqB,YAAY;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,gBAAe;AACf;AACA,eAAc,wDAAwD;AACtE,eAAc,0BAA0B;AACxC;AACA;AACA;AACA;;AAEA;;AAEA;AACA,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAmB,WAAW;AAC9B;AACA;;AAEA;;AAEA,QAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,uBAAsB,UAAU;AAChC;AACA;;;AAGA;;AAEA;AACA;;AAEA;AACA;;AAEA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB,qBAAoB;AACpB,eAAc;AACd,iBAAgB;AAChB,sBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAoB;AACpB;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,qBAAoB;AACpB;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,WAAU;AACV;AACA,yBAAwB,YAAY;AACpC;AACA;AACA,YAAW;AACX;AACA,yBAAwB,gDAAgD;AACxE;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA;AACA,UAAS;AACT,WAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,yBAAwB,YAAY;AACpC;AACA;AACA,YAAW;AACX;AACA,yBAAwB,gDAAgD;AACxE;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,uCAAsC,EAAE;AACxC;AACA;AACA;AACA,UAAS;AACT;;AAEA;;AAEA;AACA;;AAEA;AACA,gDAA+C,yGAAyG,EAAE;;AAE1J;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA,cAAa;;AAEb;AACA;;AAEA;AACA;AACA,cAAa;;AAEb;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,UAAS;AACT;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE,UAAU;AACvB;AACA;AACA,MAAK;AACL;AACA;;AAEA;;;;;;;AC1vBA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAkC;AAClC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;;;;;;ACvHA;;AAEA;;AAEA;;AAEA;AACA;AACA,mCAAkC;AAClC;AACA;AACA;;AAEA;AACA;AACA,mCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sCAAqC,mBAAmB;AACxD;;AAEA;AACA,sCAAqC,4BAA4B;AACjE;AACA;AACA,+BAA8B,4BAA4B;AAC1D;AACA;AACA;AACA,sCAAqC,gBAAgB;AACrD;AACA;AACA,+BAA8B,gBAAgB;AAC9C;AACA;;AAEA;AACA,+BAA8B,aAAa;AAC3C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACrKA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;ACnEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACzFA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;;;AClBD;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;AC/BA;;AAEA;AACA,iBAAgB,QAAQ;AACxB;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAgB,QAAQ;;AAExB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAgB,QAAQ;AACxB;AACA;AACA;AACA,cAAa,oBAAoB;AACjC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;AC3HA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,kBAAkB;AAC/B;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;AC7MA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;AChFA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gCAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,OAAO;AAC7C;AACA,qBAAoB,6CAA6C;AACjE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qCAAoC;AACpC;;AAEA,6BAA4B,gBAAgB;AAC5C;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAe,kBAAkB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,sCAAqC;AACrC;AACA,+BAA8B,aAAa;AAC3C;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACtPA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;;AAEA;;AAEA,oBAAmB,wBAAwB;AAC3C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACtGA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA,EAAC;AACD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA,4BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA,4BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,0BAAyB;AACzB;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,cAAa;AACb;AACA,cAAa;AACb;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAa;AACb,UAAS;;AAET;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,cAAa;AACb,UAAS;;AAET;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,cAAa;AACb;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;;AAEA,gDAA+C,SAAS;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAS;;AAET;AACA;AACA;AACA;;AAEA,gDAA+C,SAAS;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,EAAC;;;;;;;;AC/LD;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;;AAET;AACA,4DAA2D,UAAU;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,EAAC;;;;;;;AC1GD;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,+BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAqC,UAAU,sBAAsB;AACrE;AACA;AACA;AACA;;AAEA;AACA;AACA,oCAAmC;AACnC;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACrFA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;ACbA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAe,iBAAiB;AAChC;AACA;;AAEA;AACA;AACA;;AAEA,kBAAiB,gBAAgB;AACjC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,kBAAiB,SAAS;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AChKA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,4CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,sCAAqC;AACrC;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,4CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAA+B,gBAAgB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB;AACnB,8BAA6B,0BAA0B;AACvD;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,SAAS;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf,8BAA6B,0BAA0B;AACvD;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAmC,SAAS;AAC5C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA,oBAAmB,yBAAyB;AAC5C;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACnjBA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB,qBAAqB;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,uBAAsB,6BAA6B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,6BAA4B,QAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB,4BAA4B;AAC7C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,uBAAuB;AACpC;AACA;AACA;AACA,4BAA2B,sBAAsB;AACjD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"rollbar.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 853decbf70a9fe564a4c","'use strict';\n\nvar rollbar = require('../rollbar');\n\nvar options = (typeof window !== 'undefined') && window._rollbarConfig;\nvar alias = options && options.globalAlias || 'Rollbar';\nvar shimRunning = (typeof window !== 'undefined') && window[alias] && typeof window[alias].shimId === 'function' && window[alias].shimId() !== undefined;\n\nif ((typeof window !== 'undefined') && !window._rollbarStartTime) {\n window._rollbarStartTime = (new Date()).getTime();\n}\n\nif (!shimRunning && options) {\n var Rollbar = new rollbar(options);\n window[alias] = Rollbar;\n} else if (typeof window !== 'undefined') {\n window.rollbar = rollbar;\n window._rollbarDidLoad = true;\n} else if (typeof self !== 'undefined') {\n self.rollbar = rollbar;\n self._rollbarDidLoad = true;\n}\n\nmodule.exports = rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/bundles/rollbar.js\n// module id = 0\n// module chunks = 0","'use strict';\n\nvar Client = require('../rollbar');\nvar _ = require('../utility');\nvar API = require('../api');\nvar logger = require('./logger');\nvar globals = require('./globalSetup');\n\nvar transport = require('./transport');\nvar urllib = require('./url');\n\nvar transforms = require('./transforms');\nvar sharedTransforms = require('../transforms');\nvar predicates = require('./predicates');\nvar sharedPredicates = require('../predicates');\nvar errorParser = require('./errorParser');\nvar Instrumenter = require('./telemetry');\n\nfunction Rollbar(options, client) {\n this.options = _.extend(true, defaultOptions, options);\n var api = new API(this.options, transport, urllib);\n this.client = client || new Client(this.options, api, logger, 'browser');\n\n var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n var gDocument = (typeof document != 'undefined') && document;\n addTransformsToNotifier(this.client.notifier);\n addPredicatesToQueue(this.client.queue);\n if (this.options.captureUncaught || this.options.handleUncaughtExceptions) {\n globals.captureUncaughtExceptions(gWindow, this);\n globals.wrapGlobals(gWindow, this);\n }\n if (this.options.captureUnhandledRejections || this.options.handleUnhandledRejections) {\n globals.captureUnhandledRejections(gWindow, this);\n }\n\n this.instrumenter = new Instrumenter(this.options, this.client.telemeter, this, gWindow, gDocument);\n this.instrumenter.instrument();\n}\n\nvar _instance = null;\nRollbar.init = function(options, client) {\n if (_instance) {\n return _instance.global(options).configure(options);\n }\n _instance = new Rollbar(options, client);\n return _instance;\n};\n\nfunction handleUninitialized(maybeCallback) {\n var message = 'Rollbar is not initialized';\n logger.error(message);\n if (maybeCallback) {\n maybeCallback(new Error(message));\n }\n}\n\nRollbar.prototype.global = function(options) {\n this.client.global(options);\n return this;\n};\nRollbar.global = function(options) {\n if (_instance) {\n return _instance.global(options);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.extend(true, {}, oldOptions, options, payload);\n this.client.configure(options, payloadData);\n this.instrumenter.configure(options);\n return this;\n};\nRollbar.configure = function(options, payloadData) {\n if (_instance) {\n return _instance.configure(options, payloadData);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.lastError = function() {\n return this.client.lastError;\n};\nRollbar.lastError = function() {\n if (_instance) {\n return _instance.lastError();\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.log = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.log(item);\n return {uuid: uuid};\n};\nRollbar.log = function() {\n if (_instance) {\n return _instance.log.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.debug = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.debug(item);\n return {uuid: uuid};\n};\nRollbar.debug = function() {\n if (_instance) {\n return _instance.debug.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.info = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.info(item);\n return {uuid: uuid};\n};\nRollbar.info = function() {\n if (_instance) {\n return _instance.info.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warn = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warn(item);\n return {uuid: uuid};\n};\nRollbar.warn = function() {\n if (_instance) {\n return _instance.warn.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warning = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warning(item);\n return {uuid: uuid};\n};\nRollbar.warning = function() {\n if (_instance) {\n return _instance.warning.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.error = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.error(item);\n return {uuid: uuid};\n};\nRollbar.error = function() {\n if (_instance) {\n return _instance.error.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.critical = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.critical(item);\n return {uuid: uuid};\n};\nRollbar.critical = function() {\n if (_instance) {\n return _instance.critical.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.handleUncaughtException = function(message, url, lineno, colno, error, context) {\n var item;\n var stackInfo = _.makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n 'onerror',\n 'uncaught exception',\n errorParser\n );\n if (_.isError(error)) {\n item = this._createItem([message, error, context]);\n item._unhandledStackInfo = stackInfo;\n } else if (_.isError(url)) {\n item = this._createItem([message, url, context]);\n item._unhandledStackInfo = stackInfo;\n } else {\n item = this._createItem([message, context]);\n item.stackInfo = stackInfo;\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n this.client.log(item);\n};\n\nRollbar.prototype.handleUnhandledRejection = function(reason, promise) {\n var message = 'unhandled rejection was null or undefined!';\n message = reason ? (reason.message || String(reason)) : message;\n var context = (reason && reason._rollbarContext) || (promise && promise._rollbarContext);\n\n var item;\n if (_.isError(reason)) {\n item = this._createItem([message, reason, context]);\n } else {\n item = this._createItem([message, reason, context]);\n item.stackInfo = _.makeUnhandledStackInfo(\n message,\n '',\n 0,\n 0,\n null,\n 'unhandledrejection',\n '',\n errorParser\n );\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n item._originalArgs = item._originalArgs || [];\n item._originalArgs.push(promise);\n this.client.log(item);\n};\n\nRollbar.prototype.wrap = function(f, context, _before) {\n try {\n var ctxFn;\n if(_.isFunction(context)) {\n ctxFn = context;\n } else {\n ctxFn = function() { return context || {}; };\n }\n\n if (!_.isFunction(f)) {\n return f;\n }\n\n if (f._isWrap) {\n return f;\n }\n\n if (!f._rollbar_wrapped) {\n f._rollbar_wrapped = function () {\n if (_before && _.isFunction(_before)) {\n _before.apply(this, arguments);\n }\n try {\n return f.apply(this, arguments);\n } catch(exc) {\n var e = exc;\n if (_.isType(e, 'string')) {\n e = new String(e);\n }\n e._rollbarContext = ctxFn() || {};\n e._rollbarContext._wrappedSource = f.toString();\n\n window._rollbarWrappedError = e;\n throw e;\n }\n };\n\n f._rollbar_wrapped._isWrap = true;\n\n if (f.hasOwnProperty) {\n for (var prop in f) {\n if (f.hasOwnProperty(prop)) {\n f._rollbar_wrapped[prop] = f[prop];\n }\n }\n }\n }\n\n return f._rollbar_wrapped;\n } catch (e) {\n // Return the original function if the wrap fails.\n return f;\n }\n};\nRollbar.wrap = function(f, context) {\n if (_instance) {\n return _instance.wrap(f, context);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.captureEvent = function(metadata, level) {\n return this.client.captureEvent(metadata, level);\n};\nRollbar.captureEvent = function(metadata, level) {\n if (_instance) {\n return _instance.captureEvent(metadata, level);\n } else {\n handleUninitialized();\n }\n};\n\n// The following two methods are used internally and are not meant for public use\nRollbar.prototype.captureDomContentLoaded = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureLoad(ts);\n};\n\n/* Internal */\n\nfunction addTransformsToNotifier(notifier) {\n notifier\n .addTransform(transforms.handleItemWithError)\n .addTransform(transforms.ensureItemHasSomethingToSay)\n .addTransform(transforms.addBaseInfo)\n .addTransform(transforms.addRequestInfo(window))\n .addTransform(transforms.addClientInfo(window))\n .addTransform(transforms.addPluginInfo(window))\n .addTransform(transforms.addBody)\n .addTransform(sharedTransforms.addMessageWithError)\n .addTransform(sharedTransforms.addTelemetryData)\n .addTransform(sharedTransforms.addConfigToPayload)\n .addTransform(transforms.scrubPayload)\n .addTransform(sharedTransforms.userTransform(logger))\n .addTransform(sharedTransforms.itemToPayload);\n}\n\nfunction addPredicatesToQueue(queue) {\n queue\n .addPredicate(sharedPredicates.checkLevel)\n .addPredicate(predicates.checkIgnore)\n .addPredicate(sharedPredicates.userCheckIgnore(logger))\n .addPredicate(sharedPredicates.urlIsNotBlacklisted(logger))\n .addPredicate(sharedPredicates.urlIsWhitelisted(logger))\n .addPredicate(sharedPredicates.messageIsIgnored(logger));\n}\n\nRollbar.prototype._createItem = function(args) {\n return _.createItem(args, logger, this);\n};\n\nfunction _getFirstFunction(args) {\n for (var i = 0, len = args.length; i < len; ++i) {\n if (_.isFunction(args[i])) {\n return args[i];\n }\n }\n return undefined;\n}\n\n/* global __NOTIFIER_VERSION__:false */\n/* global __DEFAULT_BROWSER_SCRUB_FIELDS__:false */\n/* global __DEFAULT_LOG_LEVEL__:false */\n/* global __DEFAULT_REPORT_LEVEL__:false */\n/* global __DEFAULT_UNCAUGHT_ERROR_LEVEL:false */\n/* global __DEFAULT_ENDPOINT__:false */\n\nvar defaultOptions = {\n version: __NOTIFIER_VERSION__,\n scrubFields: __DEFAULT_BROWSER_SCRUB_FIELDS__,\n logLevel: __DEFAULT_LOG_LEVEL__,\n reportLevel: __DEFAULT_REPORT_LEVEL__,\n uncaughtErrorLevel: __DEFAULT_UNCAUGHT_ERROR_LEVEL,\n endpoint: __DEFAULT_ENDPOINT__,\n verbose: false,\n enabled: true,\n sendConfig: false,\n includeItemsInTelemetry: true\n};\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/rollbar.js\n// module id = 1\n// module chunks = 0","'use strict';\n\nvar RateLimiter = require('./rateLimiter');\nvar Queue = require('./queue');\nvar Notifier = require('./notifier');\nvar Telemeter = require('./telemetry');\nvar _ = require('./utility');\n\n/*\n * Rollbar - the interface to Rollbar\n *\n * @param options\n * @param api\n * @param logger\n */\nfunction Rollbar(options, api, logger, platform) {\n this.options = _.extend(true, {}, options);\n this.logger = logger;\n Rollbar.rateLimiter.configureGlobal(this.options);\n Rollbar.rateLimiter.setPlatformOptions(platform, this.options);\n this.queue = new Queue(Rollbar.rateLimiter, api, logger, this.options);\n this.notifier = new Notifier(this.queue, this.options);\n this.telemeter = new Telemeter(this.options);\n this.lastError = null;\n}\n\nvar defaultOptions = {\n maxItems: 0,\n itemsPerMinute: 60\n};\n\nRollbar.rateLimiter = new RateLimiter(defaultOptions);\n\nRollbar.prototype.global = function(options) {\n Rollbar.rateLimiter.configureGlobal(options);\n return this;\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n this.notifier && this.notifier.configure(options);\n this.telemeter && this.telemeter.configure(options);\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.extend(true, {}, oldOptions, options, payload);\n this.global(this.options);\n return this;\n};\n\nRollbar.prototype.log = function(item) {\n var level = this._defaultLogLevel();\n return this._log(level, item);\n};\n\nRollbar.prototype.debug = function(item) {\n this._log('debug', item);\n};\n\nRollbar.prototype.info = function(item) {\n this._log('info', item);\n};\n\nRollbar.prototype.warn = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.warning = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.error = function(item) {\n this._log('error', item);\n};\n\nRollbar.prototype.critical = function(item) {\n this._log('critical', item);\n};\n\nRollbar.prototype.wait = function(callback) {\n this.queue.wait(callback);\n};\n\nRollbar.prototype.captureEvent = function(metadata, level) {\n return this.telemeter.captureEvent(metadata, level);\n};\n\nRollbar.prototype.captureDomContentLoaded = function(ts) {\n return this.telemeter.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(ts) {\n return this.telemeter.captureLoad(ts);\n};\n\n/* Internal */\n\nRollbar.prototype._log = function(defaultLevel, item) {\n if (this._sameAsLastError(item)) {\n if (item.callback) {\n item.callback();\n }\n return;\n }\n try {\n var callback = null;\n if (item.callback) {\n callback = item.callback;\n delete item.callback;\n }\n item.level = item.level || defaultLevel;\n this.telemeter._captureRollbarItem(item);\n item.telemetryEvents = this.telemeter.copyEvents();\n this.notifier.log(item, callback);\n } catch (e) {\n this.logger.error(e)\n }\n};\n\nRollbar.prototype._defaultLogLevel = function() {\n return this.options.logLevel || 'debug';\n};\n\nRollbar.prototype._sameAsLastError = function(item) {\n if (this.lastError && this.lastError === item.err) {\n return true;\n }\n this.lastError = item.err;\n return false;\n};\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rollbar.js\n// module id = 2\n// module chunks = 0","'use strict';\n\n/*\n * RateLimiter - an object that encapsulates the logic for counting items sent to Rollbar\n *\n * @param options - the same options that are accepted by configureGlobal offered as a convenience\n */\nfunction RateLimiter(options) {\n this.startTime = (new Date()).getTime();\n this.counter = 0;\n this.perMinCounter = 0;\n this.platform = null;\n this.platformOptions = {};\n this.configureGlobal(options);\n}\n\nRateLimiter.globalSettings = {\n startTime: (new Date()).getTime(),\n maxItems: undefined,\n itemsPerMinute: undefined\n};\n\n/*\n * configureGlobal - set the global rate limiter options\n *\n * @param options - Only the following values are recognized:\n * startTime: a timestamp of the form returned by (new Date()).getTime()\n * maxItems: the maximum items\n * itemsPerMinute: the max number of items to send in a given minute\n */\nRateLimiter.prototype.configureGlobal = function(options) {\n if (options.startTime !== undefined) {\n RateLimiter.globalSettings.startTime = options.startTime;\n }\n if (options.maxItems !== undefined) {\n RateLimiter.globalSettings.maxItems = options.maxItems;\n }\n if (options.itemsPerMinute !== undefined) {\n RateLimiter.globalSettings.itemsPerMinute = options.itemsPerMinute;\n }\n};\n\n/*\n * shouldSend - determine if we should send a given item based on rate limit settings\n *\n * @param item - the item we are about to send\n * @returns An object with the following structure:\n * error: (Error|null)\n * shouldSend: bool\n * payload: (Object|null)\n * If shouldSend is false, the item passed as a parameter should not be sent to Rollbar, and\n * exactly one of error or payload will be non-null. If error is non-null, the returned Error will\n * describe the situation, but it means that we were already over a rate limit (either globally or\n * per minute) when this item was checked. If error is null, and therefore payload is non-null, it\n * means this item put us over the global rate limit and the payload should be sent to Rollbar in\n * place of the passed in item.\n */\nRateLimiter.prototype.shouldSend = function(item, now) {\n now = now || (new Date()).getTime();\n if (now - this.startTime >= 60000) {\n this.startTime = now;\n this.perMinCounter = 0;\n }\n\n var globalRateLimit = RateLimiter.globalSettings.maxItems;\n var globalRateLimitPerMin = RateLimiter.globalSettings.itemsPerMinute;\n\n if (checkRate(item, globalRateLimit, this.counter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimit + ' max items reached', false);\n } else if (checkRate(item, globalRateLimitPerMin, this.perMinCounter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimitPerMin + ' items per minute reached', false);\n }\n this.counter++;\n this.perMinCounter++;\n\n var shouldSend = !checkRate(item, globalRateLimit, this.counter);\n var perMinute = shouldSend;\n shouldSend = shouldSend && !checkRate(item, globalRateLimitPerMin, this.perMinCounter);\n return shouldSendValue(this.platform, this.platformOptions, null, shouldSend, globalRateLimit, globalRateLimitPerMin, perMinute);\n};\n\nRateLimiter.prototype.setPlatformOptions = function(platform, options) {\n this.platform = platform;\n this.platformOptions = options;\n};\n\n/* Helpers */\n\nfunction checkRate(item, limit, counter) {\n return !item.ignoreRateLimit && limit >= 1 && counter > limit;\n}\n\nfunction shouldSendValue(platform, options, error, shouldSend, globalRateLimit, limitPerMin, perMinute) {\n var payload = null;\n if (error) {\n error = new Error(error);\n }\n if (!error && !shouldSend) {\n payload = rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute);\n }\n return {error: error, shouldSend: shouldSend, payload: payload};\n}\n\nfunction rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute) {\n var environment = options.environment || (options.payload && options.payload.environment);\n var msg;\n if (perMinute) {\n msg = 'item per minute limit reached, ignoring errors until timeout';\n } else {\n msg = 'maxItems has been hit, ignoring errors until reset.';\n }\n var item = {\n body: {\n message: {\n body: msg,\n extra: {\n maxItems: globalRateLimit,\n itemsPerMinute: limitPerMin\n }\n }\n },\n language: 'javascript',\n environment: environment,\n notifier: {\n version: (options.notifier && options.notifier.version) || options.version\n }\n };\n if (platform === 'browser') {\n item.platform = 'browser';\n item.framework = 'browser-js';\n item.notifier.name = 'rollbar-browser-js';\n } else if (platform === 'server') {\n item.framework = options.framework || 'node-js';\n item.notifier.name = options.notifier.name;\n } else if (platform === 'react-native') {\n item.framework = options.framework || 'react-native';\n item.notifier.name = options.notifier.name;\n }\n return item;\n}\n\nmodule.exports = RateLimiter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rateLimiter.js\n// module id = 3\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Queue - an object which handles which handles a queue of items to be sent to Rollbar.\n * This object handles rate limiting via a passed in rate limiter, retries based on connection\n * errors, and filtering of items based on a set of configurable predicates. The communication to\n * the backend is performed via a given API object.\n *\n * @param rateLimiter - An object which conforms to the interface\n * rateLimiter.shouldSend(item) -> bool\n * @param api - An object which conforms to the interface\n * api.postItem(payload, function(err, response))\n * @param logger - An object used to log verbose messages if desired\n * @param options - see Queue.prototype.configure\n */\nfunction Queue(rateLimiter, api, logger, options) {\n this.rateLimiter = rateLimiter;\n this.api = api;\n this.logger = logger;\n this.options = options;\n this.predicates = [];\n this.pendingItems = [];\n this.pendingRequests = [];\n this.retryQueue = [];\n this.retryHandle = null;\n this.waitCallback = null;\n this.waitIntervalID = null;\n}\n\n/*\n * configure - updates the options this queue uses\n *\n * @param options\n */\nQueue.prototype.configure = function(options) {\n this.api && this.api.configure(options);\n var oldOptions = this.options;\n this.options = _.extend(true, {}, oldOptions, options);\n return this;\n};\n\n/*\n * addPredicate - adds a predicate to the end of the list of predicates for this queue\n *\n * @param predicate - function(item, options) -> (bool|{err: Error})\n * Returning true means that this predicate passes and the item is okay to go on the queue\n * Returning false means do not add the item to the queue, but it is not an error\n * Returning {err: Error} means do not add the item to the queue, and the given error explains why\n * Returning {err: undefined} is equivalent to returning true but don't do that\n */\nQueue.prototype.addPredicate = function(predicate) {\n if (_.isFunction(predicate)) {\n this.predicates.push(predicate);\n }\n return this;\n};\n\nQueue.prototype.addPendingItem = function(item) {\n this.pendingItems.push(item);\n};\n\nQueue.prototype.removePendingItem = function(item) {\n var idx = this.pendingItems.indexOf(item);\n if (idx !== -1) {\n this.pendingItems.splice(idx, 1);\n }\n};\n\n/*\n * addItem - Send an item to the Rollbar API if all of the predicates are satisfied\n *\n * @param item - The payload to send to the backend\n * @param callback - function(error, repsonse) which will be called with the response from the API\n * in the case of a success, otherwise response will be null and error will have a value. If both\n * error and response are null then the item was stopped by a predicate which did not consider this\n * to be an error condition, but nonetheless did not send the item to the API.\n * @param originalError - The original error before any transformations that is to be logged if any\n */\nQueue.prototype.addItem = function(item, callback, originalError, originalItem) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() { return; };\n }\n var predicateResult = this._applyPredicates(item);\n if (predicateResult.stop) {\n this.removePendingItem(originalItem);\n callback(predicateResult.err);\n return;\n }\n this._maybeLog(item, originalError);\n this.removePendingItem(originalItem);\n this.pendingRequests.push(item);\n try {\n this._makeApiRequest(item, function(err, resp) {\n this._dequeuePendingRequest(item);\n callback(err, resp);\n }.bind(this));\n } catch (e) {\n this._dequeuePendingRequest(item);\n callback(e);\n }\n};\n\n/*\n * wait - Stop any further errors from being added to the queue, and get called back when all items\n * currently processing have finished sending to the backend.\n *\n * @param callback - function() called when all pending items have been sent\n */\nQueue.prototype.wait = function(callback) {\n if (!_.isFunction(callback)) {\n return;\n }\n this.waitCallback = callback;\n if (this._maybeCallWait()) {\n return;\n }\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitIntervalID = setInterval(function() {\n this._maybeCallWait();\n }.bind(this), 500);\n};\n\n/* _applyPredicates - Sequentially applies the predicates that have been added to the queue to the\n * given item with the currently configured options.\n *\n * @param item - An item in the queue\n * @returns {stop: bool, err: (Error|null)} - stop being true means do not add item to the queue,\n * the error value should be passed up to a callbak if we are stopping.\n */\nQueue.prototype._applyPredicates = function(item) {\n var p = null;\n for (var i = 0, len = this.predicates.length; i < len; i++) {\n p = this.predicates[i](item, this.options);\n if (!p || p.err !== undefined) {\n return {stop: true, err: p.err};\n }\n }\n return {stop: false, err: null};\n};\n\n/*\n * _makeApiRequest - Send an item to Rollbar, callback when done, if there is an error make an\n * effort to retry if we are configured to do so.\n *\n * @param item - an item ready to send to the backend\n * @param callback - function(err, response)\n */\nQueue.prototype._makeApiRequest = function(item, callback) {\n var rateLimitResponse = this.rateLimiter.shouldSend(item);\n if (rateLimitResponse.shouldSend) {\n this.api.postItem(item, function(err, resp) {\n if (err) {\n this._maybeRetry(err, item, callback);\n } else {\n callback(err, resp);\n }\n }.bind(this));\n } else if (rateLimitResponse.error) {\n callback(rateLimitResponse.error);\n } else {\n this.api.postItem(rateLimitResponse.payload, callback);\n }\n};\n\n// These are errors basically mean there is no internet connection\nvar RETRIABLE_ERRORS = ['ECONNRESET', 'ENOTFOUND', 'ESOCKETTIMEDOUT', 'ETIMEDOUT', 'ECONNREFUSED', 'EHOSTUNREACH', 'EPIPE', 'EAI_AGAIN'];\n\n/*\n * _maybeRetry - Given the error returned by the API, decide if we should retry or just callback\n * with the error.\n *\n * @param err - an error returned by the API transport\n * @param item - the item that was trying to be sent when this error occured\n * @param callback - function(err, response)\n */\nQueue.prototype._maybeRetry = function(err, item, callback) {\n var shouldRetry = false;\n if (this.options.retryInterval) {\n for (var i = 0, len = RETRIABLE_ERRORS.length; i < len; i++) {\n if (err.code === RETRIABLE_ERRORS[i]) {\n shouldRetry = true;\n break;\n }\n }\n }\n if (shouldRetry) {\n this._retryApiRequest(item, callback);\n } else {\n callback(err);\n }\n};\n\n/*\n * _retryApiRequest - Add an item and a callback to a queue and possibly start a timer to process\n * that queue based on the retryInterval in the options for this queue.\n *\n * @param item - an item that failed to send due to an error we deem retriable\n * @param callback - function(err, response)\n */\nQueue.prototype._retryApiRequest = function(item, callback) {\n this.retryQueue.push({item: item, callback: callback});\n\n if (!this.retryHandle) {\n this.retryHandle = setInterval(function() {\n while (this.retryQueue.length) {\n var retryObject = this.retryQueue.shift();\n this._makeApiRequest(retryObject.item, retryObject.callback);\n }\n }.bind(this), this.options.retryInterval);\n }\n};\n\n/*\n * _dequeuePendingRequest - Removes the item from the pending request queue, this queue is used to\n * enable to functionality of providing a callback that clients can pass to `wait` to be notified\n * when the pending request queue has been emptied. This must be called when the API finishes\n * processing this item. If a `wait` callback is configured, it is called by this function.\n *\n * @param item - the item previously added to the pending request queue\n */\nQueue.prototype._dequeuePendingRequest = function(item) {\n var idx = this.pendingRequests.indexOf(item);\n if (idx !== -1) {\n this.pendingRequests.splice(idx, 1);\n this._maybeCallWait();\n }\n};\n\nQueue.prototype._maybeLog = function(data, originalError) {\n if (this.logger && this.options.verbose) {\n var message = originalError;\n message = message || _.get(data, 'body.trace.exception.message');\n message = message || _.get(data, 'body.trace_chain.0.exception.message');\n if (message) {\n this.logger.error(message);\n return;\n }\n message = _.get(data, 'body.message.body');\n if (message) {\n this.logger.log(message);\n }\n }\n};\n\nQueue.prototype._maybeCallWait = function() {\n if (_.isFunction(this.waitCallback) && this.pendingItems.length === 0 && this.pendingRequests.length === 0) {\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitCallback();\n return true;\n }\n return false;\n};\n\nmodule.exports = Queue;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/queue.js\n// module id = 4\n// module chunks = 0","'use strict';\n\nvar extend = require('extend');\n\nvar RollbarJSON = {};\nvar __initRollbarJSON = false;\nfunction setupJSON() {\n if (__initRollbarJSON) {\n return;\n }\n __initRollbarJSON = true;\n\n if (isDefined(JSON)) {\n if (isNativeFunction(JSON.stringify)) {\n RollbarJSON.stringify = JSON.stringify;\n }\n if (isNativeFunction(JSON.parse)) {\n RollbarJSON.parse = JSON.parse;\n }\n }\n if (!isFunction(RollbarJSON.stringify) || !isFunction(RollbarJSON.parse)) {\n var setupCustomJSON = require('../vendor/JSON-js/json3.js');\n setupCustomJSON(RollbarJSON);\n }\n}\nsetupJSON();\n\n/*\n * isType - Given a Javascript value and a string, returns true if the type of the value matches the\n * given string.\n *\n * @param x - any value\n * @param t - a lowercase string containing one of the following type names:\n * - undefined\n * - null\n * - error\n * - number\n * - boolean\n * - string\n * - symbol\n * - function\n * - object\n * - array\n * @returns true if x is of type t, otherwise false\n */\nfunction isType(x, t) {\n return t === typeName(x);\n}\n\n/*\n * typeName - Given a Javascript value, returns the type of the object as a string\n */\nfunction typeName(x) {\n var name = typeof x;\n if (name !== 'object') {\n return name;\n }\n if (!x) {\n return 'null';\n }\n if (x instanceof Error) {\n return 'error';\n }\n return ({}).toString.call(x).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n}\n\n/* isFunction - a convenience function for checking if a value is a function\n *\n * @param f - any value\n * @returns true if f is a function, otherwise false\n */\nfunction isFunction(f) {\n return isType(f, 'function');\n}\n\n/* isNativeFunction - a convenience function for checking if a value is a native JS function\n *\n * @param f - any value\n * @returns true if f is a native JS function, otherwise false\n */\nfunction isNativeFunction(f) {\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n var funcMatchString = Function.prototype.toString.call(Object.prototype.hasOwnProperty)\n .replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?');\n var reIsNative = RegExp('^' + funcMatchString + '$');\n return isObject(f) && reIsNative.test(f);\n}\n\n/* isObject - Checks if the argument is an object\n *\n * @param value - any value\n * @returns true is value is an object function is an object)\n*/\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/*\n * isDefined - a convenience function for checking if a value is not equal to undefined\n *\n * @param u - any value\n * @returns true if u is anything other than undefined\n */\nfunction isDefined(u) {\n return !isType(u, 'undefined');\n}\n\n/*\n * isIterable - convenience function for checking if a value can be iterated, essentially\n * whether it is an object or an array.\n *\n * @param i - any value\n * @returns true if i is an object or an array as determined by `typeName`\n */\nfunction isIterable(i) {\n var type = typeName(i);\n return (type === 'object' || type === 'array');\n}\n\n/*\n * isError - convenience function for checking if a value is of an error type\n *\n * @param e - any value\n * @returns true if e is an error\n */\nfunction isError(e) {\n return isType(e, 'error');\n}\n\nfunction traverse(obj, func, seen) {\n var k, v, i;\n var isObj = isType(obj, 'object');\n var isArray = isType(obj, 'array');\n var keys = [];\n\n if (isObj && seen.indexOf(obj) !== -1) {\n return obj;\n }\n seen.push(obj);\n\n if (isObj) {\n for (k in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, k)) {\n keys.push(k);\n }\n }\n } else if (isArray) {\n for (i = 0; i < obj.length; ++i) {\n keys.push(i);\n }\n }\n\n var result = isObj ? {} : [];\n for (i = 0; i < keys.length; ++i) {\n k = keys[i];\n v = obj[k];\n result[k] = func(k, v, seen);\n }\n\n return (keys.length != 0) ? result : obj;\n}\n\nfunction redact() {\n return '********';\n}\n\n// from http://stackoverflow.com/a/8809472/1138191\nfunction uuid4() {\n var d = now();\n var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (d + Math.random() * 16) % 16 | 0;\n d = Math.floor(d / 16);\n return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16);\n });\n return uuid;\n}\n\nvar LEVELS = {\n debug: 0,\n info: 1,\n warning: 2,\n error: 3,\n critical: 4\n};\n\nfunction sanitizeUrl(url) {\n var baseUrlParts = parseUri(url);\n // remove a trailing # if there is no anchor\n if (baseUrlParts.anchor === '') {\n baseUrlParts.source = baseUrlParts.source.replace('#', '');\n }\n\n url = baseUrlParts.source.replace('?' + baseUrlParts.query, '');\n return url;\n}\n\nvar parseUriOptions = {\n strictMode: false,\n key: [\n 'source',\n 'protocol',\n 'authority',\n 'userInfo',\n 'user',\n 'password',\n 'host',\n 'port',\n 'relative',\n 'path',\n 'directory',\n 'file',\n 'query',\n 'anchor'\n ],\n q: {\n name: 'queryKey',\n parser: /(?:^|&)([^&=]*)=?([^&]*)/g\n },\n parser: {\n strict: /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,\n loose: /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/\n }\n};\n\nfunction parseUri(str) {\n if (!isType(str, 'string')) {\n throw new Error('received invalid input');\n }\n\n var o = parseUriOptions;\n var m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str);\n var uri = {};\n var i = o.key.length;\n\n while (i--) {\n uri[o.key[i]] = m[i] || '';\n }\n\n uri[o.q.name] = {};\n uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {\n if ($1) {\n uri[o.q.name][$1] = $2;\n }\n });\n\n return uri;\n}\n\nfunction addParamsAndAccessTokenToPath(accessToken, options, params) {\n params = params || {};\n params.access_token = accessToken;\n var paramsArray = [];\n var k;\n for (k in params) {\n if (Object.prototype.hasOwnProperty.call(params, k)) {\n paramsArray.push([k, params[k]].join('='));\n }\n }\n var query = '?' + paramsArray.sort().join('&');\n\n options = options || {};\n options.path = options.path || '';\n var qs = options.path.indexOf('?');\n var h = options.path.indexOf('#');\n var p;\n if (qs !== -1 && (h === -1 || h > qs)) {\n p = options.path;\n options.path = p.substring(0,qs) + query + '&' + p.substring(qs+1);\n } else {\n if (h !== -1) {\n p = options.path;\n options.path = p.substring(0,h) + query + p.substring(h);\n } else {\n options.path = options.path + query;\n }\n }\n}\n\nfunction formatUrl(u, protocol) {\n protocol = protocol || u.protocol;\n if (!protocol && u.port) {\n if (u.port === 80) {\n protocol = 'http:';\n } else if (u.port === 443) {\n protocol = 'https:';\n }\n }\n protocol = protocol || 'https:';\n\n if (!u.hostname) {\n return null;\n }\n var result = protocol + '//' + u.hostname;\n if (u.port) {\n result = result + ':' + u.port;\n }\n if (u.path) {\n result = result + u.path;\n }\n return result;\n}\n\nfunction stringify(obj, backup) {\n var value, error;\n try {\n value = RollbarJSON.stringify(obj);\n } catch (jsonError) {\n if (backup && isFunction(backup)) {\n try {\n value = backup(obj);\n } catch (backupError) {\n error = backupError;\n }\n } else {\n error = jsonError;\n }\n }\n return {error: error, value: value};\n}\n\nfunction jsonParse(s) {\n var value, error;\n try {\n value = RollbarJSON.parse(s);\n } catch (e) {\n error = e;\n }\n return {error: error, value: value};\n}\n\nfunction makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n mode,\n backupMessage,\n errorParser\n) {\n var location = {\n url: url || '',\n line: lineno,\n column: colno\n };\n location.func = errorParser.guessFunctionName(location.url, location.line);\n location.context = errorParser.gatherContext(location.url, location.line);\n var href = document && document.location && document.location.href;\n var useragent = window && window.navigator && window.navigator.userAgent;\n return {\n 'mode': mode,\n 'message': error ? String(error) : (message || backupMessage),\n 'url': href,\n 'stack': [location],\n 'useragent': useragent\n };\n}\n\nfunction wrapCallback(logger, f) {\n return function(err, resp) {\n try {\n f(err, resp);\n } catch (e) {\n logger.error(e);\n }\n };\n}\n\nfunction createItem(args, logger, notifier, requestKeys, lambdaContext) {\n var message, err, custom, callback, request;\n var arg;\n var extraArgs = [];\n\n for (var i = 0, l = args.length; i < l; ++i) {\n arg = args[i];\n\n var typ = typeName(arg);\n switch (typ) {\n case 'undefined':\n break;\n case 'string':\n message ? extraArgs.push(arg) : message = arg;\n break;\n case 'function':\n callback = wrapCallback(logger, arg);\n break;\n case 'date':\n extraArgs.push(arg);\n break;\n case 'error':\n case 'domexception':\n err ? extraArgs.push(arg) : err = arg;\n break;\n case 'object':\n case 'array':\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n if (requestKeys && typ === 'object' && !request) {\n for (var j = 0, len = requestKeys.length; j < len; ++j) {\n if (arg[requestKeys[j]] !== undefined) {\n request = arg;\n break;\n }\n }\n if (request) {\n break;\n }\n }\n custom ? extraArgs.push(arg) : custom = arg;\n break;\n default:\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n extraArgs.push(arg);\n }\n }\n\n if (extraArgs.length > 0) {\n // if custom is an array this turns it into an object with integer keys\n custom = extend(true, {}, custom);\n custom.extraArgs = extraArgs;\n }\n\n var item = {\n message: message,\n err: err,\n custom: custom,\n timestamp: now(),\n callback: callback,\n uuid: uuid4()\n };\n if (custom && custom.level !== undefined) {\n item.level = custom.level;\n delete custom.level;\n }\n if (requestKeys && request) {\n item.request = request;\n }\n if (lambdaContext) {\n item.lambdaContext = lambdaContext;\n }\n item._originalArgs = args;\n return item;\n}\n\n/*\n * get - given an obj/array and a keypath, return the value at that keypath or\n * undefined if not possible.\n *\n * @param obj - an object or array\n * @param path - a string of keys separated by '.' such as 'plugin.jquery.0.message'\n * which would correspond to 42 in `{plugin: {jquery: [{message: 42}]}}`\n */\nfunction get(obj, path) {\n if (!obj) {\n return undefined;\n }\n var keys = path.split('.');\n var result = obj;\n try {\n for (var i = 0, len = keys.length; i < len; ++i) {\n result = result[keys[i]];\n }\n } catch (e) {\n result = undefined;\n }\n return result;\n}\n\nfunction set(obj, path, value) {\n if (!obj) {\n return;\n }\n var keys = path.split('.');\n var len = keys.length;\n if (len < 1) {\n return;\n }\n if (len === 1) {\n obj[keys[0]] = value;\n return;\n }\n try {\n var temp = obj[keys[0]] || {};\n var replacement = temp;\n for (var i = 1; i < len-1; i++) {\n temp[keys[i]] = temp[keys[i]] || {};\n temp = temp[keys[i]];\n }\n temp[keys[len-1]] = value;\n obj[keys[0]] = replacement;\n } catch (e) {\n return;\n }\n}\n\nfunction scrub(data, scrubFields) {\n scrubFields = scrubFields || [];\n var paramRes = _getScrubFieldRegexs(scrubFields);\n var queryRes = _getScrubQueryParamRegexs(scrubFields);\n\n function redactQueryParam(dummy0, paramPart, dummy1, dummy2, dummy3, valPart) {\n return paramPart + redact(valPart);\n }\n\n function paramScrubber(v) {\n var i;\n if (isType(v, 'string')) {\n for (i = 0; i < queryRes.length; ++i) {\n v = v.replace(queryRes[i], redactQueryParam);\n }\n }\n return v;\n }\n\n function valScrubber(k, v) {\n var i;\n for (i = 0; i < paramRes.length; ++i) {\n if (paramRes[i].test(k)) {\n v = redact(v);\n break;\n }\n }\n return v;\n }\n\n function scrubber(k, v, seen) {\n var tmpV = valScrubber(k, v);\n if (tmpV === v) {\n if (isType(v, 'object') || isType(v, 'array')) {\n return traverse(v, scrubber, seen);\n }\n return paramScrubber(tmpV);\n } else {\n return tmpV;\n }\n }\n\n return traverse(data, scrubber, []);\n}\n\nfunction _getScrubFieldRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '^\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?$';\n ret.push(new RegExp(pat, 'i'));\n }\n return ret;\n}\n\n\nfunction _getScrubQueryParamRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?';\n ret.push(new RegExp('(' + pat + '=)([^&\\\\n]+)', 'igm'));\n }\n return ret;\n}\n\nfunction formatArgsAsString(args) {\n var i, len, arg;\n var result = [];\n for (i = 0, len = args.length; i < len; i++) {\n arg = args[i];\n if (typeof arg === 'object') {\n arg = stringify(arg);\n arg = arg.error || arg.value;\n if (arg.length > 500)\n arg = arg.substr(0,500)+'...';\n } else if (typeof arg === 'undefined') {\n arg = 'undefined';\n }\n result.push(arg);\n }\n return result.join(' ');\n}\n\nfunction now() {\n if (Date.now) {\n return +Date.now();\n }\n return +new Date();\n}\n\nmodule.exports = {\n isType: isType,\n typeName: typeName,\n isFunction: isFunction,\n isNativeFunction: isNativeFunction,\n isIterable: isIterable,\n isError: isError,\n extend: extend,\n traverse: traverse,\n redact: redact,\n uuid4: uuid4,\n LEVELS: LEVELS,\n sanitizeUrl: sanitizeUrl,\n addParamsAndAccessTokenToPath: addParamsAndAccessTokenToPath,\n formatUrl: formatUrl,\n stringify: stringify,\n jsonParse: jsonParse,\n makeUnhandledStackInfo: makeUnhandledStackInfo,\n createItem: createItem,\n get: get,\n set: set,\n scrub: scrub,\n formatArgsAsString: formatArgsAsString,\n now: now\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/utility.js\n// module id = 5\n// module chunks = 0","'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) {/**/}\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[0],\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t} else if ((typeof target !== 'object' && typeof target !== 'function') || target == null) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = target[name];\n\t\t\t\tcopy = options[name];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\ttarget[name] = extend(deep, clone, copy);\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/extend/index.js\n// module id = 6\n// module chunks = 0","// json3.js\n// 2017-02-21\n// Public Domain.\n// NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n// See http://www.JSON.org/js.html\n// This code should be minified before deployment.\n// See http://javascript.crockford.com/jsmin.html\n\n// USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n// NOT CONTROL.\n\n// This file creates a global JSON object containing two methods: stringify\n// and parse. This file provides the ES5 JSON capability to ES3 systems.\n// If a project might run on IE8 or earlier, then this file should be included.\n// This file does nothing on ES5 systems.\n\n// JSON.stringify(value, replacer, space)\n// value any JavaScript value, usually an object or array.\n// replacer an optional parameter that determines how object\n// values are stringified for objects. It can be a\n// function or an array of strings.\n// space an optional parameter that specifies the indentation\n// of nested structures. If it is omitted, the text will\n// be packed without extra whitespace. If it is a number,\n// it will specify the number of spaces to indent at each\n// level. If it is a string (such as \"\\t\" or \" \"),\n// it contains the characters used to indent at each level.\n// This method produces a JSON text from a JavaScript value.\n// When an object value is found, if the object contains a toJSON\n// method, its toJSON method will be called and the result will be\n// stringified. A toJSON method does not serialize: it returns the\n// value represented by the name/value pair that should be serialized,\n// or undefined if nothing should be serialized. The toJSON method\n// will be passed the key associated with the value, and this will be\n// bound to the value.\n\n// For example, this would serialize Dates as ISO strings.\n\n// Date.prototype.toJSON = function (key) {\n// function f(n) {\n// // Format integers to have at least two digits.\n// return (n < 10)\n// ? \"0\" + n\n// : n;\n// }\n// return this.getUTCFullYear() + \"-\" +\n// f(this.getUTCMonth() + 1) + \"-\" +\n// f(this.getUTCDate()) + \"T\" +\n// f(this.getUTCHours()) + \":\" +\n// f(this.getUTCMinutes()) + \":\" +\n// f(this.getUTCSeconds()) + \"Z\";\n// };\n\n// You can provide an optional replacer method. It will be passed the\n// key and value of each member, with this bound to the containing\n// object. The value that is returned from your method will be\n// serialized. If your method returns undefined, then the member will\n// be excluded from the serialization.\n\n// If the replacer parameter is an array of strings, then it will be\n// used to select the members to be serialized. It filters the results\n// such that only members with keys listed in the replacer array are\n// stringified.\n\n// Values that do not have JSON representations, such as undefined or\n// functions, will not be serialized. Such values in objects will be\n// dropped; in arrays they will be replaced with null. You can use\n// a replacer function to replace those with JSON values.\n\n// JSON.stringify(undefined) returns undefined.\n\n// The optional space parameter produces a stringification of the\n// value that is filled with line breaks and indentation to make it\n// easier to read.\n\n// If the space parameter is a non-empty string, then that string will\n// be used for indentation. If the space parameter is a number, then\n// the indentation will be that many spaces.\n\n// Example:\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}]);\n// // text is '[\"e\",{\"pluribus\":\"unum\"}]'\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}], null, \"\\t\");\n// // text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\n\n// text = JSON.stringify([new Date()], function (key, value) {\n// return this[key] instanceof Date\n// ? \"Date(\" + this[key] + \")\"\n// : value;\n// });\n// // text is '[\"Date(---current time---)\"]'\n\n// JSON.parse(text, reviver)\n// This method parses a JSON text to produce an object or array.\n// It can throw a SyntaxError exception.\n// This has been modified to use JSON-js/json_parse_state.js as the\n// parser instead of the one built around eval found in JSON-js/json2.js\n\n// The optional reviver parameter is a function that can filter and\n// transform the results. It receives each of the keys and values,\n// and its return value is used instead of the original value.\n// If it returns what it received, then the structure is not modified.\n// If it returns undefined then the member is deleted.\n\n// Example:\n\n// // Parse the text. Values that look like ISO date strings will\n// // be converted to Date objects.\n\n// myData = JSON.parse(text, function (key, value) {\n// var a;\n// if (typeof value === \"string\") {\n// a =\n// /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n// if (a) {\n// return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n// +a[5], +a[6]));\n// }\n// }\n// return value;\n// });\n\n// myData = JSON.parse('[\"Date(09/09/2001)\"]', function (key, value) {\n// var d;\n// if (typeof value === \"string\" &&\n// value.slice(0, 5) === \"Date(\" &&\n// value.slice(-1) === \")\") {\n// d = new Date(value.slice(5, -1));\n// if (d) {\n// return d;\n// }\n// }\n// return value;\n// });\n\n// This is a reference implementation. You are free to copy, modify, or\n// redistribute.\n\n/*jslint\n for, this\n */\n\n/*property\n JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\n getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\n lastIndex, length, parse, prototype, push, replace, slice, stringify,\n test, toJSON, toString, valueOf\n */\n\nvar setupCustomJSON = function(JSON) {\n\n var rx_one = /^[\\],:{}\\s]*$/;\n var rx_two = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g;\n var rx_three = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\n var rx_four = /(?:^|:|,)(?:\\s*\\[)+/g;\n var rx_escapable = /[\\\\\"\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n var rx_dangerous = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\n function f(n) {\n // Format integers to have at least two digits.\n return n < 10\n ? \"0\" + n\n : n;\n }\n\n function this_value() {\n return this.valueOf();\n }\n\n if (typeof Date.prototype.toJSON !== \"function\") {\n\n Date.prototype.toJSON = function () {\n\n return isFinite(this.valueOf())\n ? this.getUTCFullYear() + \"-\" +\n f(this.getUTCMonth() + 1) + \"-\" +\n f(this.getUTCDate()) + \"T\" +\n f(this.getUTCHours()) + \":\" +\n f(this.getUTCMinutes()) + \":\" +\n f(this.getUTCSeconds()) + \"Z\"\n : null;\n };\n\n Boolean.prototype.toJSON = this_value;\n Number.prototype.toJSON = this_value;\n String.prototype.toJSON = this_value;\n }\n\n var gap;\n var indent;\n var meta;\n var rep;\n\n\n function quote(string) {\n\n // If the string contains no control characters, no quote characters, and no\n // backslash characters, then we can safely slap some quotes around it.\n // Otherwise we must also replace the offending characters with safe escape\n // sequences.\n\n rx_escapable.lastIndex = 0;\n return rx_escapable.test(string)\n ? \"\\\"\" + string.replace(rx_escapable, function (a) {\n var c = meta[a];\n return typeof c === \"string\"\n ? c\n : \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n }) + \"\\\"\"\n : \"\\\"\" + string + \"\\\"\";\n }\n\n\n function str(key, holder) {\n\n // Produce a string from holder[key].\n\n var i; // The loop counter.\n var k; // The member key.\n var v; // The member value.\n var length;\n var mind = gap;\n var partial;\n var value = holder[key];\n\n // If the value has a toJSON method, call it to obtain a replacement value.\n\n if (value && typeof value === \"object\" &&\n typeof value.toJSON === \"function\") {\n value = value.toJSON(key);\n }\n\n // If we were called with a replacer function, then call the replacer to\n // obtain a replacement value.\n\n if (typeof rep === \"function\") {\n value = rep.call(holder, key, value);\n }\n\n // What happens next depends on the value's type.\n\n switch (typeof value) {\n case \"string\":\n return quote(value);\n\n case \"number\":\n\n // JSON numbers must be finite. Encode non-finite numbers as null.\n\n return isFinite(value)\n ? String(value)\n : \"null\";\n\n case \"boolean\":\n case \"null\":\n\n // If the value is a boolean or null, convert it to a string. Note:\n // typeof null does not produce \"null\". The case is included here in\n // the remote chance that this gets fixed someday.\n\n return String(value);\n\n // If the type is \"object\", we might be dealing with an object or an array or\n // null.\n\n case \"object\":\n\n // Due to a specification blunder in ECMAScript, typeof null is \"object\",\n // so watch out for that case.\n\n if (!value) {\n return \"null\";\n }\n\n // Make an array to hold the partial results of stringifying this object value.\n\n gap += indent;\n partial = [];\n\n // Is the value an array?\n\n if (Object.prototype.toString.apply(value) === \"[object Array]\") {\n\n // The value is an array. Stringify every element. Use null as a placeholder\n // for non-JSON values.\n\n length = value.length;\n for (i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || \"null\";\n }\n\n // Join all of the elements together, separated with commas, and wrap them in\n // brackets.\n\n v = partial.length === 0\n ? \"[]\"\n : gap\n ? \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\"\n : \"[\" + partial.join(\",\") + \"]\";\n gap = mind;\n return v;\n }\n\n // If the replacer is an array, use it to select the members to be stringified.\n\n if (rep && typeof rep === \"object\") {\n length = rep.length;\n for (i = 0; i < length; i += 1) {\n if (typeof rep[i] === \"string\") {\n k = rep[i];\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n } else {\n\n // Otherwise, iterate through all of the keys in the object.\n\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n }\n\n // Join all of the member texts together, separated with commas,\n // and wrap them in braces.\n\n v = partial.length === 0\n ? \"{}\"\n : gap\n ? \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\"\n : \"{\" + partial.join(\",\") + \"}\";\n gap = mind;\n return v;\n }\n }\n\n // If the JSON object does not yet have a stringify method, give it one.\n\n if (typeof JSON.stringify !== \"function\") {\n meta = { // table of character substitutions\n \"\\b\": \"\\\\b\",\n \"\\t\": \"\\\\t\",\n \"\\n\": \"\\\\n\",\n \"\\f\": \"\\\\f\",\n \"\\r\": \"\\\\r\",\n \"\\\"\": \"\\\\\\\"\",\n \"\\\\\": \"\\\\\\\\\"\n };\n JSON.stringify = function (value, replacer, space) {\n\n // The stringify method takes a value and an optional replacer, and an optional\n // space parameter, and returns a JSON text. The replacer can be a function\n // that can replace values, or an array of strings that will select the keys.\n // A default replacer method can be provided. Use of the space parameter can\n // produce text that is more easily readable.\n\n var i;\n gap = \"\";\n indent = \"\";\n\n // If the space parameter is a number, make an indent string containing that\n // many spaces.\n\n if (typeof space === \"number\") {\n for (i = 0; i < space; i += 1) {\n indent += \" \";\n }\n\n // If the space parameter is a string, it will be used as the indent string.\n\n } else if (typeof space === \"string\") {\n indent = space;\n }\n\n // If there is a replacer, it must be a function or an array.\n // Otherwise, throw an error.\n\n rep = replacer;\n if (replacer && typeof replacer !== \"function\" &&\n (typeof replacer !== \"object\" ||\n typeof replacer.length !== \"number\")) {\n throw new Error(\"JSON.stringify\");\n }\n\n // Make a fake root object containing our value under the key of \"\".\n // Return the result of stringifying the value.\n\n return str(\"\", {\"\": value});\n };\n }\n\n\n // If the JSON object does not yet have a parse method, give it one.\n\n if (typeof JSON.parse !== \"function\") {\n JSON.parse = (function () {\n\n // This function creates a JSON parse function that uses a state machine rather\n // than the dangerous eval function to parse a JSON text.\n\n var state; // The state of the parser, one of\n // 'go' The starting state\n // 'ok' The final, accepting state\n // 'firstokey' Ready for the first key of the object or\n // the closing of an empty object\n // 'okey' Ready for the next key of the object\n // 'colon' Ready for the colon\n // 'ovalue' Ready for the value half of a key/value pair\n // 'ocomma' Ready for a comma or closing }\n // 'firstavalue' Ready for the first value of an array or\n // an empty array\n // 'avalue' Ready for the next value of an array\n // 'acomma' Ready for a comma or closing ]\n var stack; // The stack, for controlling nesting.\n var container; // The current container object or array\n var key; // The current key\n var value; // The current value\n var escapes = { // Escapement translation table\n \"\\\\\": \"\\\\\",\n \"\\\"\": \"\\\"\",\n \"/\": \"/\",\n \"t\": \"\\t\",\n \"n\": \"\\n\",\n \"r\": \"\\r\",\n \"f\": \"\\f\",\n \"b\": \"\\b\"\n };\n var string = { // The actions for string tokens\n go: function () {\n state = \"ok\";\n },\n firstokey: function () {\n key = value;\n state = \"colon\";\n },\n okey: function () {\n key = value;\n state = \"colon\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var number = { // The actions for number tokens\n go: function () {\n state = \"ok\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var action = {\n\n // The action table describes the behavior of the machine. It contains an\n // object for each token. Each object contains a method that is called when\n // a token is matched in a state. An object will lack a method for illegal\n // states.\n\n \"{\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = {};\n state = \"firstokey\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = {};\n state = \"firstokey\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n }\n },\n \"}\": {\n firstokey: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n ocomma: function () {\n var pop = stack.pop();\n container[key] = value;\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \"[\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = [];\n state = \"firstavalue\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = [];\n state = \"firstavalue\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n }\n },\n \"]\": {\n firstavalue: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n acomma: function () {\n var pop = stack.pop();\n container.push(value);\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \":\": {\n colon: function () {\n if (Object.hasOwnProperty.call(container, key)) {\n throw new SyntaxError(\"Duplicate key '\" + key + \"\\\"\");\n }\n state = \"ovalue\";\n }\n },\n \",\": {\n ocomma: function () {\n container[key] = value;\n state = \"okey\";\n },\n acomma: function () {\n container.push(value);\n state = \"avalue\";\n }\n },\n \"true\": {\n go: function () {\n value = true;\n state = \"ok\";\n },\n ovalue: function () {\n value = true;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = true;\n state = \"acomma\";\n },\n avalue: function () {\n value = true;\n state = \"acomma\";\n }\n },\n \"false\": {\n go: function () {\n value = false;\n state = \"ok\";\n },\n ovalue: function () {\n value = false;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = false;\n state = \"acomma\";\n },\n avalue: function () {\n value = false;\n state = \"acomma\";\n }\n },\n \"null\": {\n go: function () {\n value = null;\n state = \"ok\";\n },\n ovalue: function () {\n value = null;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = null;\n state = \"acomma\";\n },\n avalue: function () {\n value = null;\n state = \"acomma\";\n }\n }\n };\n\n function debackslashify(text) {\n\n // Remove and replace any backslash escapement.\n\n return text.replace(/\\\\(?:u(.{4})|([^u]))/g, function (ignore, b, c) {\n return b\n ? String.fromCharCode(parseInt(b, 16))\n : escapes[c];\n });\n }\n\n return function (source, reviver) {\n\n // A regular expression is used to extract tokens from the JSON text.\n // The extraction process is cautious.\n\n var result;\n var tx = /^[\\u0020\\t\\n\\r]*(?:([,:\\[\\]{}]|true|false|null)|(-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)|\"((?:[^\\r\\n\\t\\\\\\\"]|\\\\(?:[\"\\\\\\/trnfb]|u[0-9a-fA-F]{4}))*)\")/;\n\n // Set the starting state.\n\n state = \"go\";\n\n // The stack records the container, key, and state for each object or array\n // that contains another object or array while processing nested structures.\n\n stack = [];\n\n // If any error occurs, we will catch it and ultimately throw a syntax error.\n\n try {\n\n // For each token...\n\n while (true) {\n result = tx.exec(source);\n if (!result) {\n break;\n }\n\n // result is the result array from matching the tokenizing regular expression.\n // result[0] contains everything that matched, including any initial whitespace.\n // result[1] contains any punctuation that was matched, or true, false, or null.\n // result[2] contains a matched number, still in string form.\n // result[3] contains a matched string, without quotes but with escapement.\n\n if (result[1]) {\n\n // Token: Execute the action for this state and token.\n\n action[result[1]][state]();\n\n } else if (result[2]) {\n\n // Number token: Convert the number string into a number value and execute\n // the action for this state and number.\n\n value = +result[2];\n number[state]();\n } else {\n\n // String token: Replace the escapement sequences and execute the action for\n // this state and string.\n\n value = debackslashify(result[3]);\n string[state]();\n }\n\n // Remove the token from the string. The loop will continue as long as there\n // are tokens. This is a slow process, but it allows the use of ^ matching,\n // which assures that no illegal tokens slip through.\n\n source = source.slice(result[0].length);\n }\n\n // If we find a state/token combination that is illegal, then the action will\n // cause an error. We handle the error by simply changing the state.\n\n } catch (e) {\n state = e;\n }\n\n // The parsing is finished. If we are not in the final \"ok\" state, or if the\n // remaining source contains anything except whitespace, then we did not have\n //a well-formed JSON text.\n\n if (state !== \"ok\" || (/[^\\u0020\\t\\n\\r]/.test(source))) {\n throw (state instanceof SyntaxError)\n ? state\n : new SyntaxError(\"JSON\");\n }\n\n // If there is a reviver function, we recursively walk the new structure,\n // passing each name/value pair to the reviver function for possible\n // transformation, starting with a temporary root object that holds the current\n // value in an empty key. If there is not a reviver function, we simply return\n // that value.\n\n return (typeof reviver === \"function\")\n ? (function walk(holder, key) {\n var k;\n var v;\n var val = holder[key];\n if (val && typeof val === \"object\") {\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(val, k)) {\n v = walk(val, k);\n if (v !== undefined) {\n val[k] = v;\n } else {\n delete val[k];\n }\n }\n }\n }\n return reviver.call(holder, key, val);\n }({\"\": value}, \"\"))\n : value;\n };\n }());\n }\n}\n\nmodule.exports = setupCustomJSON;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./vendor/JSON-js/json3.js\n// module id = 7\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Notifier - the internal object responsible for delegating between the client exposed API, the\n * chain of transforms necessary to turn an item into something that can be sent to Rollbar, and the\n * queue which handles the communcation with the Rollbar API servers.\n *\n * @param queue - an object that conforms to the interface: addItem(item, callback)\n * @param options - an object representing the options to be set for this notifier, this should have\n * any defaults already set by the caller\n */\nfunction Notifier(queue, options) {\n this.queue = queue;\n this.options = options;\n this.transforms = [];\n}\n\n/*\n * configure - updates the options for this notifier with the passed in object\n *\n * @param options - an object which gets merged with the current options set on this notifier\n * @returns this\n */\nNotifier.prototype.configure = function(options) {\n this.queue && this.queue.configure(options);\n var oldOptions = this.options;\n this.options = _.extend(true, {}, oldOptions, options);\n return this;\n};\n\n/*\n * addTransform - adds a transform onto the end of the queue of transforms for this notifier\n *\n * @param transform - a function which takes three arguments:\n * * item: An Object representing the data to eventually be sent to Rollbar\n * * options: The current value of the options for this notifier\n * * callback: function(err: (Null|Error), item: (Null|Object)) the transform must call this\n * callback with a null value for error if it wants the processing chain to continue, otherwise\n * with an error to terminate the processing. The item should be the updated item after this\n * transform is finished modifying it.\n */\nNotifier.prototype.addTransform = function(transform) {\n if (_.isFunction(transform)) {\n this.transforms.push(transform);\n }\n return this;\n};\n\n/*\n * log - the internal log function which applies the configured transforms and then pushes onto the\n * queue to be sent to the backend.\n *\n * @param item - An object with the following structure:\n * message [String] - An optional string to be sent to rollbar\n * error [Error] - An optional error\n *\n * @param callback - A function of type function(err, resp) which will be called with exactly one\n * null argument and one non-null argument. The callback will be called once, either during the\n * transform stage if an error occurs inside a transform, or in response to the communication with\n * the backend. The second argument will be the response from the backend in case of success.\n */\nNotifier.prototype.log = function(item, callback) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!this.options.enabled) {\n return callback(new Error('Rollbar is not enabled'));\n }\n\n this.queue.addPendingItem(item);\n var originalError = item.err;\n this._applyTransforms(item, function(err, i) {\n if (err) {\n this.queue.removePendingItem(item);\n return callback(err, null);\n }\n this.queue.addItem(i, callback, originalError, item);\n }.bind(this));\n};\n\n/* Internal */\n\n/*\n * _applyTransforms - Applies the transforms that have been added to this notifier sequentially. See\n * `addTransform` for more information.\n *\n * @param item - An item to be transformed\n * @param callback - A function of type function(err, item) which will be called with a non-null\n * error and a null item in the case of a transform failure, or a null error and non-null item after\n * all transforms have been applied.\n */\nNotifier.prototype._applyTransforms = function(item, callback) {\n var transformIndex = -1;\n var transformsLength = this.transforms.length;\n var transforms = this.transforms;\n var options = this.options;\n\n var cb = function(err, i) {\n if (err) {\n callback(err, null);\n return;\n }\n\n transformIndex++;\n\n if (transformIndex === transformsLength) {\n callback(null, i);\n return;\n }\n\n transforms[transformIndex](i, options, cb);\n };\n\n cb(null, item);\n};\n\nmodule.exports = Notifier;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/notifier.js\n// module id = 8\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nvar MAX_EVENTS = 100;\n\nfunction Telemeter(options) {\n this.queue = [];\n this.options = _.extend(true, {}, options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n this.maxQueueSize = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n}\n\nTelemeter.prototype.configure = function(options) {\n var oldOptions = this.options;\n this.options = _.extend(true, {}, oldOptions, options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n var newMaxEvents = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n var deleteCount = 0;\n if (this.maxQueueSize > newMaxEvents) {\n deleteCount = this.maxQueueSize - newMaxEvents;\n }\n this.maxQueueSize = newMaxEvents;\n this.queue.splice(0, deleteCount);\n};\n\nTelemeter.prototype.copyEvents = function() {\n return Array.prototype.slice.call(this.queue, 0);\n};\n\nTelemeter.prototype.capture = function(type, metadata, level, rollbarUUID, timestamp) {\n var e = {\n level: getLevel(type, level),\n type: type,\n timestamp_ms: timestamp || _.now(),\n body: metadata,\n source: 'client'\n };\n if (rollbarUUID) {\n e.uuid = rollbarUUID;\n }\n\n try {\n if (_.isFunction(this.options.filterTelemetry) && this.options.filterTelemetry(e)) {\n return false;\n }\n } catch (e) {\n this.options.filterTelemetry = null;\n }\n\n this.push(e);\n return e;\n};\n\nTelemeter.prototype.captureEvent = function(metadata, level, rollbarUUID) {\n return this.capture('manual', metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.captureError = function(err, level, rollbarUUID, timestamp) {\n var metadata = {\n message: err.message || String(err)\n };\n if (err.stack) {\n metadata.stack = err.stack;\n }\n return this.capture('error', metadata, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureLog = function(message, level, rollbarUUID, timestamp) {\n return this.capture('log', {\n message: message\n }, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureNetwork = function(metadata, subtype, rollbarUUID, requestData) {\n subtype = subtype || 'xhr';\n metadata.subtype = metadata.subtype || subtype;\n if (requestData) {\n metadata.request = requestData;\n }\n var level = this.levelFromStatus(metadata.status_code);\n return this.capture('network', metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.levelFromStatus = function(statusCode) {\n if (statusCode >= 200 && statusCode < 400) {\n return 'info';\n }\n if (statusCode === 0 || statusCode >= 400) {\n return 'error';\n }\n return 'info';\n};\n\nTelemeter.prototype.captureDom = function(subtype, element, value, checked, rollbarUUID) {\n var metadata = {\n subtype: subtype,\n element: element\n };\n if (value !== undefined) {\n metadata.value = value;\n }\n if (checked !== undefined) {\n metadata.checked = checked;\n }\n return this.capture('dom', metadata, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureNavigation = function(from, to, rollbarUUID) {\n return this.capture('navigation', {from: from, to: to}, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureDomContentLoaded = function(ts) {\n return this.capture('navigation', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n */\n};\nTelemeter.prototype.captureLoad = function(ts) {\n return this.capture('navigation', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n */\n};\n\nTelemeter.prototype.captureConnectivityChange = function(type, rollbarUUID) {\n return this.captureNetwork({change: type}, 'connectivity', rollbarUUID);\n};\n\n// Only intended to be used internally by the notifier\nTelemeter.prototype._captureRollbarItem = function(item) {\n if (!this.options.includeItemsInTelemetry) {\n return;\n }\n if (item.err) {\n return this.captureError(item.err, item.level, item.uuid, item.timestamp);\n }\n if (item.message) {\n return this.captureLog(item.message, item.level, item.uuid, item.timestamp);\n }\n if (item.custom) {\n return this.capture('log', item.custom, item.level, item.uuid, item.timestamp);\n }\n};\n\nTelemeter.prototype.push = function(e) {\n this.queue.push(e);\n if (this.queue.length > this.maxQueueSize) {\n this.queue.shift();\n }\n};\n\nfunction getLevel(type, level) {\n if (level) {\n return level;\n }\n var defaultLevel = {\n error: 'error',\n manual: 'info'\n };\n return defaultLevel[type] || 'info';\n}\n\nmodule.exports = Telemeter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/telemetry.js\n// module id = 9\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\nvar helpers = require('./apiUtility');\n\nvar defaultOptions = {\n hostname: 'api.rollbar.com',\n path: '/api/1/item/',\n search: null,\n version: '1',\n protocol: 'https:',\n port: 443\n};\n\n/**\n * Api is an object that encapsulates methods of communicating with\n * the Rollbar API. It is a standard interface with some parts implemented\n * differently for server or browser contexts. It is an object that should\n * be instantiated when used so it can contain non-global options that may\n * be different for another instance of RollbarApi.\n *\n * @param options {\n * accessToken: the accessToken to use for posting items to rollbar\n * endpoint: an alternative endpoint to send errors to\n * must be a valid, fully qualified URL.\n * The default is: https://api.rollbar.com/api/1/item\n * proxy: if you wish to proxy requests provide an object\n * with the following keys:\n * host or hostname (required): foo.example.com\n * port (optional): 123\n * protocol (optional): https\n * }\n */\nfunction Api(options, t, u, j) {\n this.options = options;\n this.transport = t;\n this.url = u;\n this.jsonBackup = j;\n this.accessToken = options.accessToken;\n this.transportOptions = _getTransport(options, u);\n}\n\n/**\n *\n * @param data\n * @param callback\n */\nApi.prototype.postItem = function(data, callback) {\n var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n this.transport.post(this.accessToken, transportOptions, payload, callback);\n};\n\nApi.prototype.configure = function(options) {\n var oldOptions = this.oldOptions;\n this.options = _.extend(true, {}, oldOptions, options);\n this.transportOptions = _getTransport(this.options, this.url);\n if (this.options.accessToken !== undefined) {\n this.accessToken = this.options.accessToken;\n }\n return this;\n};\n\nfunction _getTransport(options, url) {\n return helpers.getTransportFromOptions(options, defaultOptions, url);\n}\n\nmodule.exports = Api;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/api.js\n// module id = 10\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction buildPayload(accessToken, data, jsonBackup) {\n if (!_.isType(data.context, 'string')) {\n var contextResult = _.stringify(data.context, jsonBackup);\n if (contextResult.error) {\n data.context = 'Error: could not serialize \\'context\\'';\n } else {\n data.context = contextResult.value || '';\n }\n if (data.context.length > 255) {\n data.context = data.context.substr(0, 255);\n }\n }\n return {\n access_token: accessToken,\n data: data\n };\n}\n\nfunction getTransportFromOptions(options, defaults, url) {\n var hostname = defaults.hostname;\n var protocol = defaults.protocol;\n var port = defaults.port;\n var path = defaults.path;\n var search = defaults.search;\n\n var proxy = options.proxy;\n if (options.endpoint) {\n var opts = url.parse(options.endpoint);\n hostname = opts.hostname;\n protocol = opts.protocol;\n port = opts.port;\n path = opts.pathname;\n search = opts.search;\n }\n return {\n hostname: hostname,\n protocol: protocol,\n port: port,\n path: path,\n search: search,\n proxy: proxy\n };\n}\n\nfunction transportOptions(transport, method) {\n var protocol = transport.protocol || 'https:';\n var port = transport.port || (protocol === 'http:' ? 80 : protocol === 'https:' ? 443 : undefined);\n var hostname = transport.hostname;\n var path = transport.path;\n if (transport.search) {\n path = path + transport.search;\n }\n if (transport.proxy) {\n path = protocol + '//' + hostname + path;\n hostname = transport.proxy.host || transport.proxy.hostname;\n port = transport.proxy.port;\n protocol = transport.proxy.protocol || protocol;\n }\n return {\n protocol: protocol,\n hostname: hostname,\n path: path,\n port: port,\n method: method\n };\n}\n\nfunction appendPathToPath(base, path) {\n var baseTrailingSlash = /\\/$/.test(base);\n var pathBeginningSlash = /^\\//.test(path);\n\n if (baseTrailingSlash && pathBeginningSlash) {\n path = path.substring(1);\n } else if (!baseTrailingSlash && !pathBeginningSlash) {\n path = '/' + path;\n }\n\n return base + path;\n}\n\nmodule.exports = {\n buildPayload: buildPayload,\n getTransportFromOptions: getTransportFromOptions,\n transportOptions: transportOptions,\n appendPathToPath: appendPathToPath\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/apiUtility.js\n// module id = 11\n// module chunks = 0","'use strict';\n\n/* eslint-disable no-console */\nrequire('console-polyfill');\nvar detection = require('./detection');\nvar _ = require('../utility');\n\nfunction error() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.error(_.formatArgsAsString(args));\n } else {\n console.error.apply(console, args);\n }\n}\n\nfunction info() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.info(_.formatArgsAsString(args));\n } else {\n console.info.apply(console, args);\n }\n}\n\nfunction log() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.log(_.formatArgsAsString(args));\n } else {\n console.log.apply(console, args);\n }\n}\n\n/* eslint-enable no-console */\n\nmodule.exports = {\n error: error,\n info: info,\n log: log\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/logger.js\n// module id = 12\n// module chunks = 0","// Console-polyfill. MIT license.\n// https://github.com/paulmillr/console-polyfill\n// Make it safe to do console.log() always.\n(function(global) {\n 'use strict';\n if (!global.console) {\n global.console = {};\n }\n var con = global.console;\n var prop, method;\n var dummy = function() {};\n var properties = ['memory'];\n var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' +\n 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' +\n 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',');\n while (prop = properties.pop()) if (!con[prop]) con[prop] = {};\n while (method = methods.pop()) if (!con[method]) con[method] = dummy;\n // Using `this` for web workers & supports Browserify / Webpack.\n})(typeof window === 'undefined' ? this : window);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/console-polyfill/index.js\n// module id = 13\n// module chunks = 0","'use strict';\n\n// This detection.js module is used to encapsulate any ugly browser/feature\n// detection we may need to do.\n\n// Figure out which version of IE we're using, if any.\n// This is gleaned from http://stackoverflow.com/questions/5574842/best-way-to-check-for-ie-less-than-9-in-javascript-without-library\n// Will return an integer on IE (i.e. 8)\n// Will return undefined otherwise\nfunction getIEVersion() {\n\tvar undef;\n\tif (!document) {\n\t\treturn undef;\n\t}\n\n var v = 3,\n div = document.createElement('div'),\n all = div.getElementsByTagName('i');\n\n while (\n div.innerHTML = '',\n all[0]\n );\n\n return v > 4 ? v : undef;\n}\n\nvar Detection = {\n ieVersion: getIEVersion\n};\n\nmodule.exports = Detection;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/detection.js\n// module id = 14\n// module chunks = 0","'use strict';\n\nfunction captureUncaughtExceptions(window, handler, shim) {\n if (!window) { return; }\n var oldOnError;\n\n if (typeof handler._rollbarOldOnError === 'function') {\n oldOnError = handler._rollbarOldOnError;\n } else if (window.onerror && !window.onerror.belongsToShim) {\n oldOnError = window.onerror;\n handler._rollbarOldOnError = oldOnError;\n }\n\n var fn = function() {\n var args = Array.prototype.slice.call(arguments, 0);\n _rollbarWindowOnError(window, handler, oldOnError, args);\n };\n fn.belongsToShim = shim;\n window.onerror = fn;\n}\n\nfunction _rollbarWindowOnError(window, r, old, args) {\n if (window._rollbarWrappedError) {\n if (!args[4]) {\n args[4] = window._rollbarWrappedError;\n }\n if (!args[5]) {\n args[5] = window._rollbarWrappedError._rollbarContext;\n }\n window._rollbarWrappedError = null;\n }\n\n r.handleUncaughtException.apply(r, args);\n if (old) {\n old.apply(window, args);\n }\n}\n\nfunction captureUnhandledRejections(window, handler, shim) {\n if (!window) { return; }\n\n if (typeof window._rollbarURH === 'function' && window._rollbarURH.belongsToShim) {\n window.removeEventListener('unhandledrejection', window._rollbarURH);\n }\n\n var rejectionHandler = function (evt) {\n var reason, promise, detail;\n try {\n reason = evt.reason;\n } catch (e) {\n reason = undefined;\n }\n try {\n promise = evt.promise;\n } catch (e) {\n promise = '[unhandledrejection] error getting `promise` from event';\n }\n try {\n detail = evt.detail;\n if (!reason && detail) {\n reason = detail.reason;\n promise = detail.promise;\n }\n } catch (e) {\n detail = '[unhandledrejection] error getting `detail` from event';\n }\n if (!reason) {\n reason = '[unhandledrejection] error getting `reason` from event';\n }\n\n if (handler && handler.handleUnhandledRejection) {\n handler.handleUnhandledRejection(reason, promise);\n }\n };\n rejectionHandler.belongsToShim = shim;\n window._rollbarURH = rejectionHandler;\n window.addEventListener('unhandledrejection', rejectionHandler);\n}\n\nfunction wrapGlobals(window, handler, shim) {\n if (!window) { return; }\n // Adapted from https://github.com/bugsnag/bugsnag-js\n var globals = 'EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload'.split(',');\n var i, global;\n for (i = 0; i < globals.length; ++i) {\n global = globals[i];\n\n if (window[global] && window[global].prototype) {\n _extendListenerPrototype(handler, window[global].prototype, shim);\n }\n }\n}\n\nfunction _extendListenerPrototype(handler, prototype, shim) {\n if (prototype.hasOwnProperty && prototype.hasOwnProperty('addEventListener')) {\n var oldAddEventListener = prototype.addEventListener;\n while (oldAddEventListener._rollbarOldAdd && oldAddEventListener.belongsToShim) {\n oldAddEventListener = oldAddEventListener._rollbarOldAdd;\n }\n var addFn = function(event, callback, bubble) {\n oldAddEventListener.call(this, event, handler.wrap(callback), bubble);\n };\n addFn._rollbarOldAdd = oldAddEventListener;\n addFn.belongsToShim = shim;\n prototype.addEventListener = addFn;\n\n var oldRemoveEventListener = prototype.removeEventListener;\n while (oldRemoveEventListener._rollbarOldRemove && oldRemoveEventListener.belongsToShim) {\n oldRemoveEventListener = oldRemoveEventListener._rollbarOldRemove;\n }\n var removeFn = function(event, callback, bubble) {\n oldRemoveEventListener.call(this, event, callback && callback._rollbar_wrapped || callback, bubble);\n };\n removeFn._rollbarOldRemove = oldRemoveEventListener;\n removeFn.belongsToShim = shim;\n prototype.removeEventListener = removeFn;\n }\n}\n\nmodule.exports = {\n captureUncaughtExceptions: captureUncaughtExceptions,\n captureUnhandledRejections: captureUnhandledRejections,\n wrapGlobals: wrapGlobals\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/globalSetup.js\n// module id = 15\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar logger = require('./logger');\n\n/*\n * accessToken may be embedded in payload but that should not\n * be assumed\n *\n * options: {\n * hostname\n * protocol\n * path\n * port\n * method\n * }\n *\n * params is an object containing key/value pairs. These\n * will be appended to the path as 'key=value&key=value'\n *\n * payload is an unserialized object\n */\n\nfunction get(accessToken, options, params, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n _.addParamsAndAccessTokenToPath(accessToken, options, params);\n\n var method = 'GET';\n var url = _.formatUrl(options);\n _makeRequest(accessToken, url, method, null, callback, requestFactory);\n}\n\nfunction post(accessToken, options, payload, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!payload) {\n return callback(new Error('Cannot send empty request'));\n }\n\n var stringifyResult = _.stringify(payload);\n if (stringifyResult.error) {\n return callback(stringifyResult.error);\n }\n\n var writeData = stringifyResult.value;\n var method = 'POST';\n var url = _.formatUrl(options);\n _makeRequest(accessToken, url, method, writeData, callback, requestFactory);\n}\n\nfunction _makeRequest(accessToken, url, method, data, callback, requestFactory) {\n var request;\n if (requestFactory) {\n request = requestFactory();\n } else {\n request = _createXMLHTTPObject();\n }\n if (!request) {\n // Give up, no way to send requests\n return callback(new Error('No way to send a request'));\n }\n try {\n try {\n var onreadystatechange = function() {\n try {\n if (onreadystatechange && request.readyState === 4) {\n onreadystatechange = undefined;\n\n var parseResponse = _.jsonParse(request.responseText);\n if (_isSuccess(request)) {\n callback(parseResponse.error, parseResponse.value);\n return;\n } else if (_isNormalFailure(request)) {\n if (request.status === 403) {\n // likely caused by using a server access token\n var message = parseResponse.value && parseResponse.value.message;\n logger.error(message);\n }\n // return valid http status codes\n callback(new Error(String(request.status)));\n } else {\n // IE will return a status 12000+ on some sort of connection failure,\n // so we return a blank error\n // http://msdn.microsoft.com/en-us/library/aa383770%28VS.85%29.aspx\n var msg = 'XHR response had no status code (likely connection failure)';\n callback(_newRetriableError(msg));\n }\n }\n } catch (ex) {\n //jquery source mentions firefox may error out while accessing the\n //request members if there is a network error\n //https://github.com/jquery/jquery/blob/a938d7b1282fc0e5c52502c225ae8f0cef219f0a/src/ajax/xhr.js#L111\n var exc;\n if (ex && ex.stack) {\n exc = ex;\n } else {\n exc = new Error(ex);\n }\n callback(exc);\n }\n };\n\n request.open(method, url, true);\n if (request.setRequestHeader) {\n request.setRequestHeader('Content-Type', 'application/json');\n request.setRequestHeader('X-Rollbar-Access-Token', accessToken);\n }\n request.onreadystatechange = onreadystatechange;\n request.send(data);\n } catch (e1) {\n // Sending using the normal xmlhttprequest object didn't work, try XDomainRequest\n if (typeof XDomainRequest !== 'undefined') {\n\n // Assume we are in a really old browser which has a bunch of limitations:\n // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\n // Extreme paranoia: if we have XDomainRequest then we have a window, but just in case\n if (!window || !window.location) {\n return callback(new Error('No window available during request, unknown environment'));\n }\n\n // If the current page is http, try and send over http\n if (window.location.href.substring(0, 5) === 'http:' && url.substring(0, 5) === 'https') {\n url = 'http' + url.substring(5);\n }\n\n var xdomainrequest = new XDomainRequest();\n xdomainrequest.onprogress = function() {};\n xdomainrequest.ontimeout = function() {\n var msg = 'Request timed out';\n var code = 'ETIMEDOUT';\n callback(_newRetriableError(msg, code));\n };\n xdomainrequest.onerror = function() {\n callback(new Error('Error during request'));\n };\n xdomainrequest.onload = function() {\n var parseResponse = _.jsonParse(xdomainrequest.responseText);\n callback(parseResponse.error, parseResponse.value);\n };\n xdomainrequest.open(method, url, true);\n xdomainrequest.send(data);\n } else {\n callback(new Error('Cannot find a method to transport a request'));\n }\n }\n } catch (e2) {\n callback(e2);\n }\n}\n\nfunction _createXMLHTTPObject() {\n /* global ActiveXObject:false */\n\n var factories = [\n function () {\n return new XMLHttpRequest();\n },\n function () {\n return new ActiveXObject('Msxml2.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Msxml3.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Microsoft.XMLHTTP');\n }\n ];\n var xmlhttp;\n var i;\n var numFactories = factories.length;\n for (i = 0; i < numFactories; i++) {\n /* eslint-disable no-empty */\n try {\n xmlhttp = factories[i]();\n break;\n } catch (e) {\n // pass\n }\n /* eslint-enable no-empty */\n }\n return xmlhttp;\n}\n\nfunction _isSuccess(r) {\n return r && r.status && r.status === 200;\n}\n\nfunction _isNormalFailure(r) {\n return r && _.isType(r.status, 'number') && r.status >= 400 && r.status < 600;\n}\n\nfunction _newRetriableError(message, code) {\n var err = new Error(message);\n err.code = code || 'ENOTFOUND';\n return err;\n}\n\nmodule.exports = {\n get: get,\n post: post\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transport.js\n// module id = 16\n// module chunks = 0","'use strict';\n\n// See https://nodejs.org/docs/latest/api/url.html\nfunction parse(url) {\n var result = {\n protocol: null, auth: null, host: null, path: null,\n hash: null, href: url, hostname: null, port: null,\n pathname: null, search: null, query: null\n };\n\n var i, last;\n i = url.indexOf('//');\n if (i !== -1) {\n result.protocol = url.substring(0,i);\n last = i+2;\n } else {\n last = 0;\n }\n \n i = url.indexOf('@', last);\n if (i !== -1) {\n result.auth = url.substring(last, i);\n last = i+1;\n }\n\n i = url.indexOf('/', last);\n if (i === -1) {\n i = url.indexOf('?', last);\n if (i === -1) {\n i = url.indexOf('#', last);\n if (i === -1) {\n result.host = url.substring(last);\n } else {\n result.host = url.substring(last, i);\n result.hash = url.substring(i);\n }\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n return result;\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n\n i = url.indexOf('#', last);\n if (i === -1) {\n result.path = url.substring(last);\n } else {\n result.path = url.substring(last, i);\n result.hash = url.substring(i);\n }\n\n if (result.path) {\n var pathParts = result.path.split('?');\n result.pathname = pathParts[0];\n result.query = pathParts[1];\n result.search = result.query ? '?' + result.query : null;\n }\n return result;\n}\n\nmodule.exports = {\n parse: parse\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/url.js\n// module id = 17\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar errorParser = require('./errorParser');\nvar logger = require('./logger');\n\nfunction handleItemWithError(item, options, callback) {\n item.data = item.data || {};\n if (item.err) {\n try {\n item.stackInfo = item.err._savedStackTrace || errorParser.parse(item.err);\n } catch (e)\n /* istanbul ignore next */\n {\n logger.error('Error while parsing the error object.', e);\n item.message = item.err.message || item.err.description || item.message || String(item.err);\n delete item.err;\n }\n }\n callback(null, item);\n}\n\nfunction ensureItemHasSomethingToSay(item, options, callback) {\n if (!item.message && !item.stackInfo && !item.custom) {\n callback(new Error('No message, stack info, or custom data'), null);\n }\n callback(null, item);\n}\n\nfunction addBaseInfo(item, options, callback) {\n var environment = (options.payload && options.payload.environment) || options.environment;\n item.data = _.extend(true, {}, item.data, {\n environment: environment,\n level: item.level,\n endpoint: options.endpoint,\n platform: 'browser',\n framework: 'browser-js',\n language: 'javascript',\n server: {},\n uuid: item.uuid,\n notifier: {\n name: 'rollbar-browser-js',\n version: options.version\n }\n });\n callback(null, item);\n}\n\nfunction addRequestInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.location) {\n return callback(null, item);\n }\n _.set(item, 'data.request', {\n url: window.location.href,\n query_string: window.location.search,\n user_ip: '$remote_ip'\n });\n callback(null, item);\n };\n}\n\nfunction addClientInfo(window) {\n return function(item, options, callback) {\n if (!window) {\n return callback(null, item);\n }\n var nav = window.navigator || {};\n var scr = window.screen || {};\n _.set(item, 'data.client', {\n runtime_ms: item.timestamp - window._rollbarStartTime,\n timestamp: Math.round(item.timestamp / 1000),\n javascript: {\n browser: nav.userAgent,\n language: nav.language,\n cookie_enabled: nav.cookieEnabled,\n screen: {\n width: scr.width,\n height: scr.height\n }\n }\n });\n callback(null, item);\n };\n}\n\nfunction addPluginInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.navigator) {\n return callback(null, item);\n }\n var plugins = [];\n var navPlugins = window.navigator.plugins || [];\n var cur;\n for (var i=0, l=navPlugins.length; i < l; ++i) {\n cur = navPlugins[i];\n plugins.push({name: cur.name, description: cur.description});\n }\n _.set(item, 'data.client.javascript.plugins', plugins);\n callback(null, item);\n };\n}\n\nfunction addBody(item, options, callback) {\n if (item.stackInfo) {\n addBodyTrace(item, options, callback);\n } else {\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction addBodyMessage(item, options, callback) {\n var message = item.message;\n var custom = item.custom;\n\n if (!message) {\n if (custom) {\n var scrubFields = options.scrubFields;\n var messageResult = _.stringify(_.scrub(custom, scrubFields));\n message = messageResult.error || messageResult.value || '';\n } else {\n message = '';\n }\n }\n var result = {\n body: message\n };\n\n if (custom) {\n result.extra = _.extend(true, {}, custom);\n }\n\n _.set(item, 'data.body', {message: result});\n callback(null, item);\n}\n\n\nfunction addBodyTrace(item, options, callback) {\n var description = item.data.description;\n var stackInfo = item.stackInfo;\n var custom = item.custom;\n\n var guess = errorParser.guessErrorClass(stackInfo.message);\n var className = stackInfo.name || guess[0];\n var message = guess[1];\n var trace = {\n exception: {\n 'class': className,\n message: message\n }\n };\n\n if (description) {\n trace.exception.description = description;\n }\n\n // Transform a TraceKit stackInfo object into a Rollbar trace\n var stack = stackInfo.stack;\n if (stack && stack.length === 0 && item._unhandledStackInfo && item._unhandledStackInfo.stack) {\n stack = item._unhandledStackInfo.stack;\n }\n if (stack) {\n if (stack.length === 0) {\n trace.exception.stack = stackInfo.rawStack;\n trace.exception.raw = String(stackInfo.rawException);\n }\n var stackFrame;\n var frame;\n var code;\n var pre;\n var post;\n var contextLength;\n var i, mid;\n\n trace.frames = [];\n for (i = 0; i < stack.length; ++i) {\n stackFrame = stack[i];\n frame = {\n filename: stackFrame.url ? _.sanitizeUrl(stackFrame.url) : '(unknown)',\n lineno: stackFrame.line || null,\n method: (!stackFrame.func || stackFrame.func === '?') ? '[anonymous]' : stackFrame.func,\n colno: stackFrame.column\n };\n if (frame.method && frame.method.endsWith && frame.method.endsWith('_rollbar_wrapped')) {\n continue;\n }\n\n code = pre = post = null;\n contextLength = stackFrame.context ? stackFrame.context.length : 0;\n if (contextLength) {\n mid = Math.floor(contextLength / 2);\n pre = stackFrame.context.slice(0, mid);\n code = stackFrame.context[mid];\n post = stackFrame.context.slice(mid);\n }\n\n if (code) {\n frame.code = code;\n }\n\n if (pre || post) {\n frame.context = {};\n if (pre && pre.length) {\n frame.context.pre = pre;\n }\n if (post && post.length) {\n frame.context.post = post;\n }\n }\n\n if (stackFrame.args) {\n frame.args = stackFrame.args;\n }\n\n trace.frames.push(frame);\n }\n\n // NOTE(cory): reverse the frames since rollbar.com expects the most recent call last\n trace.frames.reverse();\n\n if (custom) {\n trace.extra = _.extend(true, {}, custom);\n }\n _.set(item, 'data.body', {trace: trace});\n callback(null, item);\n } else {\n item.message = className + ': ' + message;\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction scrubPayload(item, options, callback) {\n var scrubFields = options.scrubFields;\n item.data = _.scrub(item.data, scrubFields);\n callback(null, item);\n}\n\nmodule.exports = {\n handleItemWithError: handleItemWithError,\n ensureItemHasSomethingToSay: ensureItemHasSomethingToSay,\n addBaseInfo: addBaseInfo,\n addRequestInfo: addRequestInfo,\n addClientInfo: addClientInfo,\n addPluginInfo: addPluginInfo,\n addBody: addBody,\n scrubPayload: scrubPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transforms.js\n// module id = 18\n// module chunks = 0","'use strict';\n\nvar ErrorStackParser = require('error-stack-parser');\n\nvar UNKNOWN_FUNCTION = '?';\nvar ERR_CLASS_REGEXP = new RegExp('^(([a-zA-Z0-9-_$ ]*): *)?(Uncaught )?([a-zA-Z0-9-_$ ]*): ');\n\nfunction guessFunctionName() {\n return UNKNOWN_FUNCTION;\n}\n\n\nfunction gatherContext() {\n return null;\n}\n\n\nfunction Frame(stackFrame) {\n var data = {};\n\n data._stackFrame = stackFrame;\n\n data.url = stackFrame.fileName;\n data.line = stackFrame.lineNumber;\n data.func = stackFrame.functionName;\n data.column = stackFrame.columnNumber;\n data.args = stackFrame.args;\n\n data.context = gatherContext(data.url, data.line);\n\n return data;\n}\n\n\nfunction Stack(exception) {\n function getStack() {\n var parserStack = [];\n var exc;\n\n if (!exception.stack) {\n try {\n throw exception;\n } catch (e) {\n exc = e;\n }\n } else {\n exc = exception;\n }\n\n try {\n parserStack = ErrorStackParser.parse(exc);\n } catch(e) {\n parserStack = [];\n }\n\n var stack = [];\n\n for (var i = 0; i < parserStack.length; i++) {\n stack.push(new Frame(parserStack[i]));\n }\n\n return stack;\n }\n\n return {\n stack: getStack(),\n message: exception.message,\n name: exception.name,\n rawStack: exception.stack,\n rawException: exception\n };\n}\n\n\nfunction parse(e) {\n return new Stack(e);\n}\n\n\nfunction guessErrorClass(errMsg) {\n if (!errMsg || !errMsg.match) {\n return ['Unknown error. There was no error message to display.', ''];\n }\n var errClassMatch = errMsg.match(ERR_CLASS_REGEXP);\n var errClass = '(unknown)';\n\n if (errClassMatch) {\n errClass = errClassMatch[errClassMatch.length - 1];\n errMsg = errMsg.replace((errClassMatch[errClassMatch.length - 2] || '') + errClass + ':', '');\n errMsg = errMsg.replace(/(^[\\s]+|[\\s]+$)/g, '');\n }\n return [errClass, errMsg];\n}\n\n\nmodule.exports = {\n guessFunctionName: guessFunctionName,\n guessErrorClass: guessErrorClass,\n gatherContext: gatherContext,\n parse: parse,\n Stack: Stack,\n Frame: Frame\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/errorParser.js\n// module id = 19\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = locationParts[0] === 'eval' ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/error-stack-parser.js\n// module id = 20\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stackframe', [], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.StackFrame = factory();\n }\n}(this, function () {\n 'use strict';\n function _isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n function StackFrame(functionName, args, fileName, lineNumber, columnNumber, source) {\n if (functionName !== undefined) {\n this.setFunctionName(functionName);\n }\n if (args !== undefined) {\n this.setArgs(args);\n }\n if (fileName !== undefined) {\n this.setFileName(fileName);\n }\n if (lineNumber !== undefined) {\n this.setLineNumber(lineNumber);\n }\n if (columnNumber !== undefined) {\n this.setColumnNumber(columnNumber);\n }\n if (source !== undefined) {\n this.setSource(source);\n }\n }\n\n StackFrame.prototype = {\n getFunctionName: function () {\n return this.functionName;\n },\n setFunctionName: function (v) {\n this.functionName = String(v);\n },\n\n getArgs: function () {\n return this.args;\n },\n setArgs: function (v) {\n if (Object.prototype.toString.call(v) !== '[object Array]') {\n throw new TypeError('Args must be an Array');\n }\n this.args = v;\n },\n\n // NOTE: Property name may be misleading as it includes the path,\n // but it somewhat mirrors V8's JavaScriptStackTraceApi\n // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's\n // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14\n getFileName: function () {\n return this.fileName;\n },\n setFileName: function (v) {\n this.fileName = String(v);\n },\n\n getLineNumber: function () {\n return this.lineNumber;\n },\n setLineNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Line Number must be a Number');\n }\n this.lineNumber = Number(v);\n },\n\n getColumnNumber: function () {\n return this.columnNumber;\n },\n setColumnNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Column Number must be a Number');\n }\n this.columnNumber = Number(v);\n },\n\n getSource: function () {\n return this.source;\n },\n setSource: function (v) {\n this.source = String(v);\n },\n\n toString: function() {\n var functionName = this.getFunctionName() || '{anonymous}';\n var args = '(' + (this.getArgs() || []).join(',') + ')';\n var fileName = this.getFileName() ? ('@' + this.getFileName()) : '';\n var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : '';\n var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : '';\n return functionName + args + fileName + lineNumber + columnNumber;\n }\n };\n\n return StackFrame;\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/~/stackframe/stackframe.js\n// module id = 21\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction itemToPayload(item, options, callback) {\n var payloadOptions = options.payload || {};\n if (payloadOptions.body) {\n delete payloadOptions.body;\n }\n\n var data = _.extend(true, {}, item.data, payloadOptions);\n if (item._isUncaught) {\n data._isUncaught = true;\n }\n if (item._originalArgs) {\n data._originalArgs = item._originalArgs;\n }\n callback(null, data);\n}\n\nfunction addTelemetryData(item, options, callback) {\n if (item.telemetryEvents) {\n _.set(item, 'data.body.telemetry', item.telemetryEvents);\n }\n callback(null, item);\n}\n\nfunction addMessageWithError(item, options, callback) {\n if (!item.message) {\n callback(null, item);\n return;\n }\n var tracePath = 'data.body.trace_chain.0';\n var trace = _.get(item, tracePath);\n if (!trace) {\n tracePath = 'data.body.trace';\n trace = _.get(item, tracePath);\n }\n if (trace) {\n if (!(trace.exception && trace.exception.description)) {\n _.set(item, tracePath+'.exception.description', item.message);\n callback(null, item);\n return;\n }\n var extra = _.get(item, tracePath+'.extra') || {};\n var newExtra = _.extend(true, {}, extra, {message: item.message});\n _.set(item, tracePath+'.extra', newExtra);\n }\n callback(null, item);\n}\n\nfunction userTransform(logger) {\n return function(item, options, callback) {\n var newItem = _.extend(true, {}, item);\n try {\n if (_.isFunction(options.transform)) {\n options.transform(newItem.data);\n }\n } catch (e) {\n options.transform = null;\n logger.error('Error while calling custom transform() function. Removing custom transform().', e);\n callback(null, item);\n return;\n }\n callback(null, newItem);\n }\n}\n\nfunction addConfigToPayload(item, options, callback) {\n if (!options.sendConfig) {\n return callback(null, item);\n }\n var configKey = '_rollbarConfig';\n var custom = _.get(item, 'data.custom') || {};\n custom[configKey] = options;\n item.data.custom = custom;\n callback(null, item);\n}\n\nmodule.exports = {\n itemToPayload: itemToPayload,\n addTelemetryData: addTelemetryData,\n addMessageWithError: addMessageWithError,\n userTransform: userTransform,\n addConfigToPayload: addConfigToPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/transforms.js\n// module id = 22\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\n\nfunction checkIgnore(item, settings) {\n if (_.get(settings, 'plugins.jquery.ignoreAjaxErrors')) {\n return !_.get(item, 'body.message.extra.isAjax');\n }\n return true;\n}\n\nmodule.exports = {\n checkIgnore: checkIgnore\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/predicates.js\n// module id = 23\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction checkLevel(item, settings) {\n var level = item.level;\n var levelVal = _.LEVELS[level] || 0;\n var reportLevel = settings.reportLevel;\n var reportLevelVal = _.LEVELS[reportLevel] || 0;\n\n if (levelVal < reportLevelVal) {\n return false;\n }\n return true;\n}\n\nfunction userCheckIgnore(logger) {\n return function(item, settings) {\n var isUncaught = !!item._isUncaught;\n delete item._isUncaught;\n var args = item._originalArgs;\n delete item._originalArgs;\n try {\n if (_.isFunction(settings.onSendCallback)) {\n settings.onSendCallback(isUncaught, args, item);\n }\n } catch (e) {\n settings.onSendCallback = null;\n logger.error('Error while calling onSendCallback, removing', e);\n }\n try {\n if (_.isFunction(settings.checkIgnore) && settings.checkIgnore(isUncaught, args, item)) {\n return false;\n }\n } catch (e) {\n settings.checkIgnore = null;\n logger.error('Error while calling custom checkIgnore(), removing', e);\n }\n return true;\n }\n}\n\nfunction urlIsNotBlacklisted(logger) {\n return function(item, settings) {\n return !urlIsOnAList(item, settings, 'blacklist', logger);\n }\n}\n\nfunction urlIsWhitelisted(logger) {\n return function(item, settings) {\n return urlIsOnAList(item, settings, 'whitelist', logger);\n }\n}\n\nfunction urlIsOnAList(item, settings, whiteOrBlack, logger) {\n // whitelist is the default\n var black = false;\n if (whiteOrBlack === 'blacklist') {\n black = true;\n }\n var list, trace, frame, filename, frameLength, url, listLength, urlRegex;\n var i, j;\n\n try {\n list = black ? settings.hostBlackList : settings.hostWhiteList;\n listLength = list && list.length;\n trace = _.get(item, 'body.trace');\n\n // These two checks are important to come first as they are defaults\n // in case the list is missing or the trace is missing or not well-formed\n if (!list || listLength === 0) {\n return !black;\n }\n if (!trace || !trace.frames || trace.frames.length === 0) {\n return !black;\n }\n\n frameLength = trace.frames.length;\n for (i = 0; i < frameLength; i++) {\n frame = trace.frames[i];\n filename = frame.filename;\n\n if (!_.isType(filename, 'string')) {\n return !black;\n }\n\n for (j = 0; j < listLength; j++) {\n url = list[j];\n urlRegex = new RegExp(url);\n\n if (urlRegex.test(filename)) {\n return true;\n }\n }\n }\n } catch (e)\n /* istanbul ignore next */\n {\n if (black) {\n settings.hostBlackList = null;\n } else {\n settings.hostWhiteList = null;\n }\n var listName = black ? 'hostBlackList' : 'hostWhiteList';\n logger.error('Error while reading your configuration\\'s ' + listName + ' option. Removing custom ' + listName + '.', e);\n return !black;\n }\n return false;\n}\n\nfunction messageIsIgnored(logger) {\n return function(item, settings) {\n var exceptionMessage, i, ignoredMessages,\n len, messageIsIgnored, rIgnoredMessage,\n body, traceMessage, bodyMessage;\n\n try {\n messageIsIgnored = false;\n ignoredMessages = settings.ignoredMessages;\n\n if (!ignoredMessages || ignoredMessages.length === 0) {\n return true;\n }\n\n body = item.body;\n traceMessage = _.get(body, 'trace.exception.message');\n bodyMessage = _.get(body, 'message.body');\n\n exceptionMessage = traceMessage || bodyMessage;\n\n if (!exceptionMessage){\n return true;\n }\n\n len = ignoredMessages.length;\n for (i = 0; i < len; i++) {\n rIgnoredMessage = new RegExp(ignoredMessages[i], 'gi');\n messageIsIgnored = rIgnoredMessage.test(exceptionMessage);\n\n if (messageIsIgnored) {\n break;\n }\n }\n } catch(e)\n /* istanbul ignore next */\n {\n settings.ignoredMessages = null;\n logger.error('Error while reading your configuration\\'s ignoredMessages option. Removing custom ignoredMessages.');\n }\n\n return !messageIsIgnored;\n }\n}\n\nmodule.exports = {\n checkLevel: checkLevel,\n userCheckIgnore: userCheckIgnore,\n urlIsNotBlacklisted: urlIsNotBlacklisted,\n urlIsWhitelisted: urlIsWhitelisted,\n messageIsIgnored: messageIsIgnored\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/predicates.js\n// module id = 24\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar urlparser = require('./url');\nvar domUtil = require('./domUtility');\n\nvar defaults = {\n network: true,\n networkResponseHeaders: false,\n networkResponseBody: false,\n networkRequestBody: false,\n log: true,\n dom: true,\n navigation: true,\n connectivity: true\n};\n\nfunction replace(obj, name, replacement, replacements, type) {\n var orig = obj[name];\n obj[name] = replacement(orig);\n if (replacements) {\n replacements[type].push([obj, name, orig]);\n }\n}\n\nfunction restore(replacements, type) {\n var b;\n while (replacements[type].length) {\n b = replacements[type].shift();\n b[0][b[1]] = b[2];\n }\n}\n\nfunction Instrumenter(options, telemeter, rollbar, _window, _document) {\n var autoInstrument = options.autoInstrument;\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.extend(true, {}, defaults, autoInstrument);\n }\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n this.telemetryScrubber = options.telemetryScrubber;\n this.telemeter = telemeter;\n this.rollbar = rollbar;\n this._window = _window || {};\n this._document = _document || {};\n this.replacements = {\n network: [],\n log: [],\n navigation: [],\n connectivity: []\n };\n this.eventRemovers = {\n dom: [],\n connectivity: []\n };\n\n this._location = this._window.location;\n this._lastHref = this._location && this._location.href;\n}\n\nInstrumenter.prototype.configure = function(options) {\n var autoInstrument = options.autoInstrument;\n var oldSettings = _.extend(true, {}, this.autoInstrument);\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.extend(true, {}, defaults, autoInstrument);\n }\n this.instrument(oldSettings);\n if (options.scrubTelemetryInputs !== undefined) {\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n }\n if (options.telemetryScrubber !== undefined) {\n this.telemetryScrubber = options.telemetryScrubber;\n }\n};\n\nInstrumenter.prototype.instrument = function(oldSettings) {\n if (this.autoInstrument.network && !(oldSettings && oldSettings.network)) {\n this.instrumentNetwork();\n } else if (!this.autoInstrument.network && oldSettings && oldSettings.network) {\n this.deinstrumentNetwork();\n }\n\n if (this.autoInstrument.log && !(oldSettings && oldSettings.log)) {\n this.instrumentConsole();\n } else if (!this.autoInstrument.log && oldSettings && oldSettings.log) {\n this.deinstrumentConsole();\n }\n\n if (this.autoInstrument.dom && !(oldSettings && oldSettings.dom)) {\n this.instrumentDom();\n } else if (!this.autoInstrument.dom && oldSettings && oldSettings.dom) {\n this.deinstrumentDom();\n }\n\n if (this.autoInstrument.navigation && !(oldSettings && oldSettings.navigation)) {\n this.instrumentNavigation();\n } else if (!this.autoInstrument.navigation && oldSettings && oldSettings.navigation) {\n this.deinstrumentNavigation();\n }\n\n if (this.autoInstrument.connectivity && !(oldSettings && oldSettings.connectivity)) {\n this.instrumentConnectivity();\n } else if (!this.autoInstrument.connectivity && oldSettings && oldSettings.connectivity) {\n this.deinstrumentConnectivity();\n }\n};\n\nInstrumenter.prototype.deinstrumentNetwork = function() {\n restore(this.replacements, 'network');\n};\n\nInstrumenter.prototype.instrumentNetwork = function() {\n var self = this;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && _.isFunction(xhr[prop])) {\n replace(xhr, prop, function(orig) {\n return self.rollbar.wrap(orig);\n });\n }\n }\n\n if ('XMLHttpRequest' in this._window) {\n var xhrp = this._window.XMLHttpRequest.prototype;\n replace(xhrp, 'open', function(orig) {\n return function(method, url) {\n if (_.isType(url, 'string')) {\n this.__rollbar_xhr = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'network');\n\n replace(xhrp, 'send', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(data) {\n /* eslint-enable no-unused-vars */\n var xhr = this;\n\n function onreadystatechangeHandler() {\n if (xhr.__rollbar_xhr && (xhr.readyState === 1 || xhr.readyState === 4)) {\n if (xhr.__rollbar_xhr.status_code === null) {\n xhr.__rollbar_xhr.status_code = 0;\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n requestData = data;\n }\n xhr.__rollbar_event = self.telemeter.captureNetwork(xhr.__rollbar_xhr, 'xhr', undefined, requestData);\n }\n if (xhr.readyState === 1) {\n xhr.__rollbar_xhr.start_time_ms = _.now();\n } else {\n xhr.__rollbar_xhr.end_time_ms = _.now();\n\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n var header, i;\n if (headersConfig === true) {\n var allHeaders = xhr.getAllResponseHeaders();\n if (allHeaders) {\n var arr = allHeaders.trim().split(/[\\r\\n]+/);\n var parts, value;\n for (i=0; i < arr.length; i++) {\n parts = arr[i].split(': ');\n header = parts.shift();\n value = parts.join(': ');\n headers[header] = value;\n }\n }\n } else {\n for (i=0; i < headersConfig.length; i++) {\n header = headersConfig[i];\n headers[header] = xhr.getResponseHeader(header);\n }\n }\n } catch (e) {\n /* we ignore the errors here that could come from different\n * browser issues with the xhr methods */\n }\n }\n var body = null;\n if (self.autoInstrument.networkResponseBody) {\n try {\n body = xhr.responseText;\n } catch (e) {\n /* ignore errors from reading responseText */\n }\n }\n var response = null;\n if (body || headers) {\n response = {};\n if (body) {\n response.body = body;\n }\n if (headers) {\n response.headers = headers;\n }\n }\n if (response) {\n xhr.__rollbar_xhr.response = response;\n }\n }\n try {\n var code = xhr.status;\n code = code === 1223 ? 204 : code;\n xhr.__rollbar_xhr.status_code = code;\n xhr.__rollbar_event.level = self.telemeter.levelFromStatus(code);\n } catch (e) {\n /* ignore possible exception from xhr.status */\n }\n }\n }\n\n wrapProp('onload', xhr);\n wrapProp('onerror', xhr);\n wrapProp('onprogress', xhr);\n\n if ('onreadystatechange' in xhr && _.isFunction(xhr.onreadystatechange)) {\n replace(xhr, 'onreadystatechange', function(orig) {\n return self.rollbar.wrap(orig, undefined, onreadystatechangeHandler);\n });\n } else {\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n return orig.apply(this, arguments);\n }\n }, this.replacements, 'network');\n }\n\n if ('fetch' in this._window) {\n replace(this._window, 'fetch', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(fn, t) {\n /* eslint-enable no-unused-vars */\n var args = new Array(arguments.length);\n for (var i=0, len=args.length; i < len; i++) {\n args[i] = arguments[i];\n }\n var input = args[0];\n var method = 'GET';\n var url;\n if (_.isType(input, 'string')) {\n url = input;\n } else if (input) {\n url = input.url;\n if (input.method) {\n method = input.method;\n }\n }\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n var metadata = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n if (args[1] && args[1].body) {\n requestData = args[1].body;\n } else if (args[0] && !_.isType(args[0], 'string') && args[0].body) {\n requestData = args[0].body;\n }\n }\n self.telemeter.captureNetwork(metadata, 'fetch', undefined, requestData);\n return orig.apply(this, args).then(function (resp) {\n metadata.end_time_ms = _.now();\n metadata.status_code = resp.status;\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n if (headersConfig === true) {\n // This is unsupported in IE so we can't do it\n /*\n var allHeaders = resp.headers.entries();\n for (var pair of allHeaders) {\n headers[pair[0]] = pair[1];\n }\n */\n } else {\n for (var i=0; i < headersConfig.length; i++) {\n var header = headersConfig[i];\n headers[header] = resp.headers.get(header);\n }\n }\n } catch (e) {\n /* ignore probable IE errors */\n }\n }\n var response = null;\n if (headers) {\n response = {\n headers: headers\n };\n }\n if (response) {\n metadata.response = response;\n }\n return resp;\n });\n };\n }, this.replacements, 'network');\n }\n};\n\nInstrumenter.prototype.deinstrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n var b;\n while (this.replacements['log'].length) {\n b = this.replacements['log'].shift();\n this._window.console[b[0]] = b[1];\n }\n};\n\nInstrumenter.prototype.instrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n\n var self = this;\n var c = this._window.console;\n\n function wrapConsole(method) {\n var orig = c[method];\n var origConsole = c;\n var level = method === 'warn' ? 'warning' : method;\n c[method] = function() {\n var args = Array.prototype.slice.call(arguments);\n var message = _.formatArgsAsString(args);\n self.telemeter.captureLog(message, level);\n if (orig) {\n Function.prototype.apply.call(orig, origConsole, args);\n }\n };\n self.replacements['log'].push([method, orig]);\n }\n var methods = ['debug','info','warn','error','log'];\n for (var i=0, len=methods.length; i < len; i++) {\n wrapConsole(methods[i]);\n }\n};\n\nInstrumenter.prototype.deinstrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n this.removeListeners('dom');\n};\n\nInstrumenter.prototype.instrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n var clickHandler = this.handleClick.bind(this);\n var blurHandler = this.handleBlur.bind(this);\n this.addListener('dom', this._window, 'click', 'onclick', clickHandler, true);\n this.addListener('dom', this._window, 'blur', 'onfocusout', blurHandler, true);\n};\n\nInstrumenter.prototype.handleClick = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n var hasTag = e && e.tagName;\n var anchorOrButton = domUtil.isDescribedElement(e, 'a') || domUtil.isDescribedElement(e, 'button');\n if (hasTag && (anchorOrButton || domUtil.isDescribedElement(e, 'input', ['button', 'submit']))) {\n this.captureDomEvent('click', e);\n } else if (domUtil.isDescribedElement(e, 'input', ['checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value, e.checked);\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleBlur = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n if (e && e.tagName) {\n if (domUtil.isDescribedElement(e, 'textarea')) {\n this.captureDomEvent('input', e, e.value);\n } else if (domUtil.isDescribedElement(e, 'select') && e.options && e.options.length) {\n this.handleSelectInputChanged(e);\n } else if (domUtil.isDescribedElement(e, 'input') && !domUtil.isDescribedElement(e, 'input', ['button', 'submit', 'hidden', 'checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value);\n }\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleSelectInputChanged = function(elem) {\n if (elem.multiple) {\n for (var i = 0; i < elem.options.length; i++) {\n if (elem.options[i].selected) {\n this.captureDomEvent('input', elem, elem.options[i].value);\n }\n }\n } else if (elem.selectedIndex >= 0 && elem.options[elem.selectedIndex]) {\n this.captureDomEvent('input', elem, elem.options[elem.selectedIndex].value);\n }\n};\n\nInstrumenter.prototype.captureDomEvent = function(subtype, element, value, isChecked) {\n if (value !== undefined) {\n if (this.scrubTelemetryInputs || (domUtil.getElementType(element) === 'password')) {\n value = '[scrubbed]';\n } else if (this.telemetryScrubber) {\n var description = domUtil.describeElement(element);\n if (this.telemetryScrubber(description)) {\n value = '[scrubbed]';\n }\n }\n }\n var elementString = domUtil.elementArrayToString(domUtil.treeToArray(element));\n this.telemeter.captureDom(subtype, elementString, value, isChecked);\n};\n\nInstrumenter.prototype.deinstrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n restore(this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.instrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n var self = this;\n replace(this._window, 'onpopstate', function(orig) {\n return function() {\n var current = self._location.href;\n self.handleUrlChange(self._lastHref, current);\n if (orig) {\n orig.apply(this, arguments);\n }\n };\n }, this.replacements, 'navigation');\n\n replace(this._window.history, 'pushState', function(orig) {\n return function() {\n var url = arguments.length > 2 ? arguments[2] : undefined;\n if (url) {\n self.handleUrlChange(self._lastHref, url + '');\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.handleUrlChange = function(from, to) {\n var parsedHref = urlparser.parse(this._location.href);\n var parsedTo = urlparser.parse(to);\n var parsedFrom = urlparser.parse(from);\n this._lastHref = to;\n if (parsedHref.protocol === parsedTo.protocol && parsedHref.host === parsedTo.host) {\n to = parsedTo.path + (parsedTo.hash || '');\n }\n if (parsedHref.protocol === parsedFrom.protocol && parsedHref.host === parsedFrom.host) {\n from = parsedFrom.path + (parsedFrom.hash || '');\n }\n this.telemeter.captureNavigation(from, to);\n};\n\nInstrumenter.prototype.deinstrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.removeListeners('connectivity');\n } else {\n restore(this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.instrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.addListener('connectivity', this._window, 'online', undefined, function() {\n this.telemeter.captureConnectivityChange('online');\n }.bind(this), true);\n this.addListener('connectivity', this._window, 'offline', undefined, function() {\n this.telemeter.captureConnectivityChange('offline');\n }.bind(this), true);\n } else {\n var self = this;\n replace(this._document.body, 'ononline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('online');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n replace(this._document.body, 'onoffline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('offline');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.addListener = function(section, obj, type, altType, handler, capture) {\n if (obj.addEventListener) {\n obj.addEventListener(type, handler, capture);\n this.eventRemovers[section].push(function() {\n obj.removeEventListener(type, handler, capture);\n });\n } else if (altType) {\n obj.attachEvent(altType, handler);\n this.eventRemovers[section].push(function() {\n obj.detachEvent(altType, handler);\n });\n }\n};\n\nInstrumenter.prototype.removeListeners = function(section) {\n var r;\n while (this.eventRemovers[section].length) {\n r = this.eventRemovers[section].shift();\n r();\n }\n};\n\nmodule.exports = Instrumenter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/telemetry.js\n// module id = 25\n// module chunks = 0","'use strict';\n\nfunction getElementType(e) {\n return (e.getAttribute('type') || '').toLowerCase();\n}\n\nfunction isDescribedElement(element, type, subtypes) {\n if (element.tagName.toLowerCase() !== type.toLowerCase()) {\n return false;\n }\n if (!subtypes) {\n return true;\n }\n element = getElementType(element);\n for (var i = 0; i < subtypes.length; i++) {\n if (subtypes[i] === element) {\n return true;\n }\n }\n return false;\n}\n\nfunction getElementFromEvent(evt, doc) {\n if (evt.target) {\n return evt.target;\n }\n if (doc && doc.elementFromPoint) {\n return doc.elementFromPoint(evt.clientX, evt.clientY);\n }\n return undefined;\n}\n\nfunction treeToArray(elem) {\n var MAX_HEIGHT = 5;\n var out = [];\n var nextDescription;\n for (var height = 0; elem && height < MAX_HEIGHT; height++) {\n nextDescription = describeElement(elem);\n if (nextDescription.tagName === 'html') {\n break;\n }\n out.unshift(nextDescription);\n elem = elem.parentNode;\n }\n return out;\n}\n\nfunction elementArrayToString(a) {\n var MAX_LENGTH = 80;\n var separator = ' > ', separatorLength = separator.length;\n var out = [], len = 0, nextStr, totalLength;\n\n for (var i = a.length - 1; i >= 0; i--) {\n nextStr = descriptionToString(a[i]);\n totalLength = len + (out.length * separatorLength) + nextStr.length;\n if (i < a.length - 1 && totalLength >= MAX_LENGTH + 3) {\n out.unshift('...');\n break;\n }\n out.unshift(nextStr);\n len += nextStr.length;\n }\n return out.join(separator);\n}\n\nfunction descriptionToString(desc) {\n if (!desc || !desc.tagName) {\n return '';\n }\n var out = [desc.tagName];\n if (desc.id) {\n out.push('#' + desc.id);\n }\n if (desc.classes) {\n out.push('.' + desc.classes.join('.'));\n }\n for (var i = 0; i < desc.attributes.length; i++) {\n out.push('[' + desc.attributes[i].key + '=\"' + desc.attributes[i].value + '\"]');\n }\n\n return out.join('');\n}\n\n/**\n * Input: a dom element\n * Output: null if tagName is falsey or input is falsey, else\n * {\n * tagName: String,\n * id: String | undefined,\n * classes: [String] | undefined,\n * attributes: [\n * {\n * key: OneOf(type, name, title, alt),\n * value: String\n * }\n * ]\n * }\n */\nfunction describeElement(elem) {\n if (!elem || !elem.tagName) {\n return null;\n }\n var out = {}, className, key, attr, i;\n out.tagName = elem.tagName.toLowerCase();\n if (elem.id) {\n out.id = elem.id;\n }\n className = elem.className;\n if (className && (typeof className === 'string')) {\n out.classes = className.split(/\\s+/);\n }\n var attributes = ['type', 'name', 'title', 'alt'];\n out.attributes = [];\n for (i = 0; i < attributes.length; i++) {\n key = attributes[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.attributes.push({key: key, value: attr});\n }\n }\n return out;\n}\n\nmodule.exports = {\n describeElement: describeElement,\n descriptionToString: descriptionToString,\n elementArrayToString: elementArrayToString,\n treeToArray: treeToArray,\n getElementFromEvent: getElementFromEvent,\n isDescribedElement: isDescribedElement,\n getElementType: getElementType\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/domUtility.js\n// module id = 26\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/bootstrap d67c9483e22841801866","webpack:///./src/browser/bundles/rollbar.js","webpack:///./src/browser/rollbar.js","webpack:///./src/rollbar.js","webpack:///./src/rateLimiter.js","webpack:///./src/queue.js","webpack:///./src/utility.js","webpack:///./~/extend/index.js","webpack:///./vendor/JSON-js/json3.js","webpack:///./src/notifier.js","webpack:///./src/telemetry.js","webpack:///./src/api.js","webpack:///./src/apiUtility.js","webpack:///./src/browser/logger.js","webpack:///./~/console-polyfill/index.js","webpack:///./src/browser/detection.js","webpack:///./src/browser/globalSetup.js","webpack:///./src/browser/transport.js","webpack:///./src/browser/url.js","webpack:///./src/browser/transforms.js","webpack:///./src/browser/errorParser.js","webpack:///./~/error-stack-parser/error-stack-parser.js","webpack:///./~/error-stack-parser/~/stackframe/stackframe.js","webpack:///./src/transforms.js","webpack:///./src/browser/predicates.js","webpack:///./src/predicates.js","webpack:///./src/browser/telemetry.js","webpack:///./src/browser/domUtility.js"],"names":[],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;ACtCA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA,EAAC;AACD;AACA;AACA;;AAEA;;;;;;;ACvBA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,6BAA4B;AAC5B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA,6BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,2BAA0B,sBAAsB;AAChD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,qCAAoC,SAAS;AAC7C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC3ZA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA,mCAAkC;AAClC;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACpIA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC7IA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAkC;AAClC;AACA;;AAEA;AACA;AACA;AACA,yDAAwD,WAAW;AACnE;AACA;AACA,gBAAe,WAAW;AAC1B,gBAAe,eAAe;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA2B,QAAQ;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,cAAa,8BAA8B;AAC3C;AACA;AACA;AACA;AACA,gDAA+C,SAAS;AACxD;AACA;AACA,eAAc;AACd;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAkD,SAAS;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAwB,+BAA+B;;AAEvD;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACnQA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAY;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,gBAAe,gBAAgB;AAC/B;AACA;AACA;;AAEA,0BAAyB;AACzB,cAAa,iBAAiB;AAC9B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,mCAAkC,OAAO;AACzC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAmD,SAAS;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,6BAA4B;AAC5B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAwC,SAAS,UAAU,YAAY,GAAG;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,SAAS;AAC/C;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,WAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB,qBAAqB;AACtC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAe,qBAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB,wBAAwB;AACzC;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,kBAAiB,wBAAwB;AACzC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iCAAgC,SAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC9oBA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAmB;;AAEnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA,QAAO,YAAY;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA,OAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAAyE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAoB;AACpB;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,0CAAyC,iBAAiB;AAC1D,+BAA8B,kBAAkB;;AAEhD,0CAAyC,iBAAiB;AAC1D,uCAAsC,6BAA6B;;AAEnE;AACA;AACA;AACA;AACA,cAAa;AACb;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,yBAAwB;AACxB,gDAA+C,EAAE;AACjD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;;AAGA;;AAEA;;AAEA,WAAU;AACV,WAAU;AACV,WAAU;AACV;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA,sBAAqB,YAAY;AACjC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,sBAAqB,YAAY;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,gBAAe;AACf;AACA,eAAc,wDAAwD;AACtE,eAAc,0BAA0B;AACxC;AACA;AACA;AACA;;AAEA;;AAEA;AACA,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAmB,WAAW;AAC9B;AACA;;AAEA;;AAEA,QAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,uBAAsB,UAAU;AAChC;AACA;;;AAGA;;AAEA;AACA;;AAEA;AACA;;AAEA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB,qBAAoB;AACpB,eAAc;AACd,iBAAgB;AAChB,sBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAoB;AACpB;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,qBAAoB;AACpB;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,WAAU;AACV;AACA,yBAAwB,YAAY;AACpC;AACA;AACA,YAAW;AACX;AACA,yBAAwB,gDAAgD;AACxE;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA;AACA,UAAS;AACT,WAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,yBAAwB,YAAY;AACpC;AACA;AACA,YAAW;AACX;AACA,yBAAwB,gDAAgD;AACxE;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,uCAAsC,EAAE;AACxC;AACA;AACA;AACA,UAAS;AACT;;AAEA;;AAEA;AACA;;AAEA;AACA,gDAA+C,yGAAyG,EAAE;;AAE1J;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA,cAAa;;AAEb;AACA;;AAEA;AACA;AACA,cAAa;;AAEb;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,UAAS;AACT;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE,UAAU;AACvB;AACA;AACA,MAAK;AACL;AACA;;AAEA;;;;;;;AC1vBA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA4B;AAC5B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;;;;;;ACvHA;;AAEA;;AAEA;;AAEA;AACA;AACA,mCAAkC;AAClC;AACA;AACA;;AAEA;AACA;AACA,mCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sCAAqC,mBAAmB;AACxD;;AAEA;AACA,sCAAqC,4BAA4B;AACjE;AACA;AACA,+BAA8B,4BAA4B;AAC1D;AACA;AACA;AACA,sCAAqC,gBAAgB;AACrD;AACA;AACA,+BAA8B,gBAAgB;AAC9C;AACA;;AAEA;AACA,+BAA8B,aAAa;AAC3C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACrKA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;ACnEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACzFA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;;;AClBD;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;AC/BA;;AAEA;AACA,iBAAgB,QAAQ;AACxB;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAgB,QAAQ;;AAExB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAgB,QAAQ;AACxB;AACA;AACA;AACA,cAAa,oBAAoB;AACjC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;AC3HA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,kBAAkB;AAC/B;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;AC7MA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;AChFA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gCAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,OAAO;AAC7C;AACA,qBAAoB,6CAA6C;AACjE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qCAAoC;AACpC;;AAEA,6BAA4B,gBAAgB;AAC5C;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAe,kBAAkB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,sCAAqC;AACrC;AACA,+BAA8B,aAAa;AAC3C;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC5PA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;;AAEA;;AAEA,oBAAmB,wBAAwB;AAC3C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACtGA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA,EAAC;AACD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA,4BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA,4BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,0BAAyB;AACzB;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,cAAa;AACb;AACA,cAAa;AACb;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAa;AACb,UAAS;;AAET;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,cAAa;AACb,UAAS;;AAET;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,cAAa;AACb;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;;AAEA,gDAA+C,SAAS;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAS;;AAET;AACA;AACA;AACA;;AAEA,gDAA+C,SAAS;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,EAAC;;;;;;;;AC/LD;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;;AAET;AACA,4DAA2D,UAAU;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,EAAC;;;;;;;AC1GD;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,+BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAqC,UAAU,sBAAsB;AACrE;AACA;AACA;AACA;;AAEA;AACA;AACA,oCAAmC;AACnC;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACrFA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;ACbA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAe,iBAAiB;AAChC;AACA;;AAEA;AACA;AACA;;AAEA,kBAAiB,gBAAgB;AACjC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,kBAAiB,SAAS;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AChKA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,4CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,sCAAqC;AACrC;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,4CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAA+B,gBAAgB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB;AACnB,8BAA6B,0BAA0B;AACvD;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,SAAS;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf,8BAA6B,0BAA0B;AACvD;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAmC,SAAS;AAC5C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA,oBAAmB,yBAAyB;AAC5C;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACnjBA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB,qBAAqB;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,uBAAsB,6BAA6B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,6BAA4B,QAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB,4BAA4B;AAC7C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,uBAAuB;AACpC;AACA;AACA;AACA,4BAA2B,sBAAsB;AACjD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"rollbar.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap d67c9483e22841801866","'use strict';\n\nvar rollbar = require('../rollbar');\n\nvar options = (typeof window !== 'undefined') && window._rollbarConfig;\nvar alias = options && options.globalAlias || 'Rollbar';\nvar shimRunning = (typeof window !== 'undefined') && window[alias] && typeof window[alias].shimId === 'function' && window[alias].shimId() !== undefined;\n\nif ((typeof window !== 'undefined') && !window._rollbarStartTime) {\n window._rollbarStartTime = (new Date()).getTime();\n}\n\nif (!shimRunning && options) {\n var Rollbar = new rollbar(options);\n window[alias] = Rollbar;\n} else if (typeof window !== 'undefined') {\n window.rollbar = rollbar;\n window._rollbarDidLoad = true;\n} else if (typeof self !== 'undefined') {\n self.rollbar = rollbar;\n self._rollbarDidLoad = true;\n}\n\nmodule.exports = rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/bundles/rollbar.js\n// module id = 0\n// module chunks = 0","'use strict';\n\nvar Client = require('../rollbar');\nvar _ = require('../utility');\nvar API = require('../api');\nvar logger = require('./logger');\nvar globals = require('./globalSetup');\n\nvar transport = require('./transport');\nvar urllib = require('./url');\n\nvar transforms = require('./transforms');\nvar sharedTransforms = require('../transforms');\nvar predicates = require('./predicates');\nvar sharedPredicates = require('../predicates');\nvar errorParser = require('./errorParser');\nvar Instrumenter = require('./telemetry');\n\nfunction Rollbar(options, client) {\n this.options = _.extend({}, defaultOptions, options);\n var api = new API(this.options, transport, urllib);\n this.client = client || new Client(this.options, api, logger, 'browser');\n\n var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n var gDocument = (typeof document != 'undefined') && document;\n addTransformsToNotifier(this.client.notifier);\n addPredicatesToQueue(this.client.queue);\n if (this.options.captureUncaught || this.options.handleUncaughtExceptions) {\n globals.captureUncaughtExceptions(gWindow, this);\n globals.wrapGlobals(gWindow, this);\n }\n if (this.options.captureUnhandledRejections || this.options.handleUnhandledRejections) {\n globals.captureUnhandledRejections(gWindow, this);\n }\n\n this.instrumenter = new Instrumenter(this.options, this.client.telemeter, this, gWindow, gDocument);\n this.instrumenter.instrument();\n}\n\nvar _instance = null;\nRollbar.init = function(options, client) {\n if (_instance) {\n return _instance.global(options).configure(options);\n }\n _instance = new Rollbar(options, client);\n return _instance;\n};\n\nfunction handleUninitialized(maybeCallback) {\n var message = 'Rollbar is not initialized';\n logger.error(message);\n if (maybeCallback) {\n maybeCallback(new Error(message));\n }\n}\n\nRollbar.prototype.global = function(options) {\n this.client.global(options);\n return this;\n};\nRollbar.global = function(options) {\n if (_instance) {\n return _instance.global(options);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.extend({}, oldOptions, options, payload);\n this.client.configure(options, payloadData);\n this.instrumenter.configure(options);\n return this;\n};\nRollbar.configure = function(options, payloadData) {\n if (_instance) {\n return _instance.configure(options, payloadData);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.lastError = function() {\n return this.client.lastError;\n};\nRollbar.lastError = function() {\n if (_instance) {\n return _instance.lastError();\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.log = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.log(item);\n return {uuid: uuid};\n};\nRollbar.log = function() {\n if (_instance) {\n return _instance.log.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.debug = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.debug(item);\n return {uuid: uuid};\n};\nRollbar.debug = function() {\n if (_instance) {\n return _instance.debug.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.info = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.info(item);\n return {uuid: uuid};\n};\nRollbar.info = function() {\n if (_instance) {\n return _instance.info.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warn = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warn(item);\n return {uuid: uuid};\n};\nRollbar.warn = function() {\n if (_instance) {\n return _instance.warn.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warning = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warning(item);\n return {uuid: uuid};\n};\nRollbar.warning = function() {\n if (_instance) {\n return _instance.warning.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.error = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.error(item);\n return {uuid: uuid};\n};\nRollbar.error = function() {\n if (_instance) {\n return _instance.error.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.critical = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.critical(item);\n return {uuid: uuid};\n};\nRollbar.critical = function() {\n if (_instance) {\n return _instance.critical.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.handleUncaughtException = function(message, url, lineno, colno, error, context) {\n var item;\n var stackInfo = _.makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n 'onerror',\n 'uncaught exception',\n errorParser\n );\n if (_.isError(error)) {\n item = this._createItem([message, error, context]);\n item._unhandledStackInfo = stackInfo;\n } else if (_.isError(url)) {\n item = this._createItem([message, url, context]);\n item._unhandledStackInfo = stackInfo;\n } else {\n item = this._createItem([message, context]);\n item.stackInfo = stackInfo;\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n this.client.log(item);\n};\n\nRollbar.prototype.handleUnhandledRejection = function(reason, promise) {\n var message = 'unhandled rejection was null or undefined!';\n message = reason ? (reason.message || String(reason)) : message;\n var context = (reason && reason._rollbarContext) || (promise && promise._rollbarContext);\n\n var item;\n if (_.isError(reason)) {\n item = this._createItem([message, reason, context]);\n } else {\n item = this._createItem([message, reason, context]);\n item.stackInfo = _.makeUnhandledStackInfo(\n message,\n '',\n 0,\n 0,\n null,\n 'unhandledrejection',\n '',\n errorParser\n );\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n item._originalArgs = item._originalArgs || [];\n item._originalArgs.push(promise);\n this.client.log(item);\n};\n\nRollbar.prototype.wrap = function(f, context, _before) {\n try {\n var ctxFn;\n if(_.isFunction(context)) {\n ctxFn = context;\n } else {\n ctxFn = function() { return context || {}; };\n }\n\n if (!_.isFunction(f)) {\n return f;\n }\n\n if (f._isWrap) {\n return f;\n }\n\n if (!f._rollbar_wrapped) {\n f._rollbar_wrapped = function () {\n if (_before && _.isFunction(_before)) {\n _before.apply(this, arguments);\n }\n try {\n return f.apply(this, arguments);\n } catch(exc) {\n var e = exc;\n if (e) {\n if (_.isType(e, 'string')) {\n e = new String(e);\n }\n e._rollbarContext = ctxFn() || {};\n e._rollbarContext._wrappedSource = f.toString();\n\n window._rollbarWrappedError = e;\n }\n throw e;\n }\n };\n\n f._rollbar_wrapped._isWrap = true;\n\n if (f.hasOwnProperty) {\n for (var prop in f) {\n if (f.hasOwnProperty(prop)) {\n f._rollbar_wrapped[prop] = f[prop];\n }\n }\n }\n }\n\n return f._rollbar_wrapped;\n } catch (e) {\n // Return the original function if the wrap fails.\n return f;\n }\n};\nRollbar.wrap = function(f, context) {\n if (_instance) {\n return _instance.wrap(f, context);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.captureEvent = function(metadata, level) {\n return this.client.captureEvent(metadata, level);\n};\nRollbar.captureEvent = function(metadata, level) {\n if (_instance) {\n return _instance.captureEvent(metadata, level);\n } else {\n handleUninitialized();\n }\n};\n\n// The following two methods are used internally and are not meant for public use\nRollbar.prototype.captureDomContentLoaded = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureLoad(ts);\n};\n\n/* Internal */\n\nfunction addTransformsToNotifier(notifier) {\n notifier\n .addTransform(transforms.handleItemWithError)\n .addTransform(transforms.ensureItemHasSomethingToSay)\n .addTransform(transforms.addBaseInfo)\n .addTransform(transforms.addRequestInfo(window))\n .addTransform(transforms.addClientInfo(window))\n .addTransform(transforms.addPluginInfo(window))\n .addTransform(transforms.addBody)\n .addTransform(sharedTransforms.addMessageWithError)\n .addTransform(sharedTransforms.addTelemetryData)\n .addTransform(sharedTransforms.addConfigToPayload)\n .addTransform(transforms.scrubPayload)\n .addTransform(sharedTransforms.userTransform(logger))\n .addTransform(sharedTransforms.itemToPayload);\n}\n\nfunction addPredicatesToQueue(queue) {\n queue\n .addPredicate(sharedPredicates.checkLevel)\n .addPredicate(predicates.checkIgnore)\n .addPredicate(sharedPredicates.userCheckIgnore(logger))\n .addPredicate(sharedPredicates.urlIsNotBlacklisted(logger))\n .addPredicate(sharedPredicates.urlIsWhitelisted(logger))\n .addPredicate(sharedPredicates.messageIsIgnored(logger));\n}\n\nRollbar.prototype._createItem = function(args) {\n return _.createItem(args, logger, this);\n};\n\nfunction _getFirstFunction(args) {\n for (var i = 0, len = args.length; i < len; ++i) {\n if (_.isFunction(args[i])) {\n return args[i];\n }\n }\n return undefined;\n}\n\n/* global __NOTIFIER_VERSION__:false */\n/* global __DEFAULT_BROWSER_SCRUB_FIELDS__:false */\n/* global __DEFAULT_LOG_LEVEL__:false */\n/* global __DEFAULT_REPORT_LEVEL__:false */\n/* global __DEFAULT_UNCAUGHT_ERROR_LEVEL:false */\n/* global __DEFAULT_ENDPOINT__:false */\n\nvar defaultOptions = {\n version: __NOTIFIER_VERSION__,\n scrubFields: __DEFAULT_BROWSER_SCRUB_FIELDS__,\n logLevel: __DEFAULT_LOG_LEVEL__,\n reportLevel: __DEFAULT_REPORT_LEVEL__,\n uncaughtErrorLevel: __DEFAULT_UNCAUGHT_ERROR_LEVEL,\n endpoint: __DEFAULT_ENDPOINT__,\n verbose: false,\n enabled: true,\n sendConfig: false,\n includeItemsInTelemetry: true,\n captureIp: true\n};\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/rollbar.js\n// module id = 1\n// module chunks = 0","'use strict';\n\nvar RateLimiter = require('./rateLimiter');\nvar Queue = require('./queue');\nvar Notifier = require('./notifier');\nvar Telemeter = require('./telemetry');\nvar _ = require('./utility');\n\n/*\n * Rollbar - the interface to Rollbar\n *\n * @param options\n * @param api\n * @param logger\n */\nfunction Rollbar(options, api, logger, platform) {\n this.options = _.extend(true, {}, options);\n this.logger = logger;\n Rollbar.rateLimiter.configureGlobal(this.options);\n Rollbar.rateLimiter.setPlatformOptions(platform, this.options);\n this.queue = new Queue(Rollbar.rateLimiter, api, logger, this.options);\n this.notifier = new Notifier(this.queue, this.options);\n this.telemeter = new Telemeter(this.options);\n this.lastError = null;\n}\n\nvar defaultOptions = {\n maxItems: 0,\n itemsPerMinute: 60\n};\n\nRollbar.rateLimiter = new RateLimiter(defaultOptions);\n\nRollbar.prototype.global = function(options) {\n Rollbar.rateLimiter.configureGlobal(options);\n return this;\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n this.notifier && this.notifier.configure(options);\n this.telemeter && this.telemeter.configure(options);\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.extend(true, {}, oldOptions, options, payload);\n this.global(this.options);\n return this;\n};\n\nRollbar.prototype.log = function(item) {\n var level = this._defaultLogLevel();\n return this._log(level, item);\n};\n\nRollbar.prototype.debug = function(item) {\n this._log('debug', item);\n};\n\nRollbar.prototype.info = function(item) {\n this._log('info', item);\n};\n\nRollbar.prototype.warn = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.warning = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.error = function(item) {\n this._log('error', item);\n};\n\nRollbar.prototype.critical = function(item) {\n this._log('critical', item);\n};\n\nRollbar.prototype.wait = function(callback) {\n this.queue.wait(callback);\n};\n\nRollbar.prototype.captureEvent = function(metadata, level) {\n return this.telemeter.captureEvent(metadata, level);\n};\n\nRollbar.prototype.captureDomContentLoaded = function(ts) {\n return this.telemeter.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(ts) {\n return this.telemeter.captureLoad(ts);\n};\n\n/* Internal */\n\nRollbar.prototype._log = function(defaultLevel, item) {\n if (this._sameAsLastError(item)) {\n if (item.callback) {\n item.callback();\n }\n return;\n }\n try {\n var callback = null;\n if (item.callback) {\n callback = item.callback;\n delete item.callback;\n }\n item.level = item.level || defaultLevel;\n this.telemeter._captureRollbarItem(item);\n item.telemetryEvents = this.telemeter.copyEvents();\n this.notifier.log(item, callback);\n } catch (e) {\n this.logger.error(e)\n }\n};\n\nRollbar.prototype._defaultLogLevel = function() {\n return this.options.logLevel || 'debug';\n};\n\nRollbar.prototype._sameAsLastError = function(item) {\n if (this.lastError && this.lastError === item.err) {\n return true;\n }\n this.lastError = item.err;\n return false;\n};\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rollbar.js\n// module id = 2\n// module chunks = 0","'use strict';\n\n/*\n * RateLimiter - an object that encapsulates the logic for counting items sent to Rollbar\n *\n * @param options - the same options that are accepted by configureGlobal offered as a convenience\n */\nfunction RateLimiter(options) {\n this.startTime = (new Date()).getTime();\n this.counter = 0;\n this.perMinCounter = 0;\n this.platform = null;\n this.platformOptions = {};\n this.configureGlobal(options);\n}\n\nRateLimiter.globalSettings = {\n startTime: (new Date()).getTime(),\n maxItems: undefined,\n itemsPerMinute: undefined\n};\n\n/*\n * configureGlobal - set the global rate limiter options\n *\n * @param options - Only the following values are recognized:\n * startTime: a timestamp of the form returned by (new Date()).getTime()\n * maxItems: the maximum items\n * itemsPerMinute: the max number of items to send in a given minute\n */\nRateLimiter.prototype.configureGlobal = function(options) {\n if (options.startTime !== undefined) {\n RateLimiter.globalSettings.startTime = options.startTime;\n }\n if (options.maxItems !== undefined) {\n RateLimiter.globalSettings.maxItems = options.maxItems;\n }\n if (options.itemsPerMinute !== undefined) {\n RateLimiter.globalSettings.itemsPerMinute = options.itemsPerMinute;\n }\n};\n\n/*\n * shouldSend - determine if we should send a given item based on rate limit settings\n *\n * @param item - the item we are about to send\n * @returns An object with the following structure:\n * error: (Error|null)\n * shouldSend: bool\n * payload: (Object|null)\n * If shouldSend is false, the item passed as a parameter should not be sent to Rollbar, and\n * exactly one of error or payload will be non-null. If error is non-null, the returned Error will\n * describe the situation, but it means that we were already over a rate limit (either globally or\n * per minute) when this item was checked. If error is null, and therefore payload is non-null, it\n * means this item put us over the global rate limit and the payload should be sent to Rollbar in\n * place of the passed in item.\n */\nRateLimiter.prototype.shouldSend = function(item, now) {\n now = now || (new Date()).getTime();\n if (now - this.startTime >= 60000) {\n this.startTime = now;\n this.perMinCounter = 0;\n }\n\n var globalRateLimit = RateLimiter.globalSettings.maxItems;\n var globalRateLimitPerMin = RateLimiter.globalSettings.itemsPerMinute;\n\n if (checkRate(item, globalRateLimit, this.counter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimit + ' max items reached', false);\n } else if (checkRate(item, globalRateLimitPerMin, this.perMinCounter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimitPerMin + ' items per minute reached', false);\n }\n this.counter++;\n this.perMinCounter++;\n\n var shouldSend = !checkRate(item, globalRateLimit, this.counter);\n var perMinute = shouldSend;\n shouldSend = shouldSend && !checkRate(item, globalRateLimitPerMin, this.perMinCounter);\n return shouldSendValue(this.platform, this.platformOptions, null, shouldSend, globalRateLimit, globalRateLimitPerMin, perMinute);\n};\n\nRateLimiter.prototype.setPlatformOptions = function(platform, options) {\n this.platform = platform;\n this.platformOptions = options;\n};\n\n/* Helpers */\n\nfunction checkRate(item, limit, counter) {\n return !item.ignoreRateLimit && limit >= 1 && counter > limit;\n}\n\nfunction shouldSendValue(platform, options, error, shouldSend, globalRateLimit, limitPerMin, perMinute) {\n var payload = null;\n if (error) {\n error = new Error(error);\n }\n if (!error && !shouldSend) {\n payload = rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute);\n }\n return {error: error, shouldSend: shouldSend, payload: payload};\n}\n\nfunction rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute) {\n var environment = options.environment || (options.payload && options.payload.environment);\n var msg;\n if (perMinute) {\n msg = 'item per minute limit reached, ignoring errors until timeout';\n } else {\n msg = 'maxItems has been hit, ignoring errors until reset.';\n }\n var item = {\n body: {\n message: {\n body: msg,\n extra: {\n maxItems: globalRateLimit,\n itemsPerMinute: limitPerMin\n }\n }\n },\n language: 'javascript',\n environment: environment,\n notifier: {\n version: (options.notifier && options.notifier.version) || options.version\n }\n };\n if (platform === 'browser') {\n item.platform = 'browser';\n item.framework = 'browser-js';\n item.notifier.name = 'rollbar-browser-js';\n } else if (platform === 'server') {\n item.framework = options.framework || 'node-js';\n item.notifier.name = options.notifier.name;\n } else if (platform === 'react-native') {\n item.framework = options.framework || 'react-native';\n item.notifier.name = options.notifier.name;\n }\n return item;\n}\n\nmodule.exports = RateLimiter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rateLimiter.js\n// module id = 3\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Queue - an object which handles which handles a queue of items to be sent to Rollbar.\n * This object handles rate limiting via a passed in rate limiter, retries based on connection\n * errors, and filtering of items based on a set of configurable predicates. The communication to\n * the backend is performed via a given API object.\n *\n * @param rateLimiter - An object which conforms to the interface\n * rateLimiter.shouldSend(item) -> bool\n * @param api - An object which conforms to the interface\n * api.postItem(payload, function(err, response))\n * @param logger - An object used to log verbose messages if desired\n * @param options - see Queue.prototype.configure\n */\nfunction Queue(rateLimiter, api, logger, options) {\n this.rateLimiter = rateLimiter;\n this.api = api;\n this.logger = logger;\n this.options = options;\n this.predicates = [];\n this.pendingItems = [];\n this.pendingRequests = [];\n this.retryQueue = [];\n this.retryHandle = null;\n this.waitCallback = null;\n this.waitIntervalID = null;\n}\n\n/*\n * configure - updates the options this queue uses\n *\n * @param options\n */\nQueue.prototype.configure = function(options) {\n this.api && this.api.configure(options);\n var oldOptions = this.options;\n this.options = _.extend(true, {}, oldOptions, options);\n return this;\n};\n\n/*\n * addPredicate - adds a predicate to the end of the list of predicates for this queue\n *\n * @param predicate - function(item, options) -> (bool|{err: Error})\n * Returning true means that this predicate passes and the item is okay to go on the queue\n * Returning false means do not add the item to the queue, but it is not an error\n * Returning {err: Error} means do not add the item to the queue, and the given error explains why\n * Returning {err: undefined} is equivalent to returning true but don't do that\n */\nQueue.prototype.addPredicate = function(predicate) {\n if (_.isFunction(predicate)) {\n this.predicates.push(predicate);\n }\n return this;\n};\n\nQueue.prototype.addPendingItem = function(item) {\n this.pendingItems.push(item);\n};\n\nQueue.prototype.removePendingItem = function(item) {\n var idx = this.pendingItems.indexOf(item);\n if (idx !== -1) {\n this.pendingItems.splice(idx, 1);\n }\n};\n\n/*\n * addItem - Send an item to the Rollbar API if all of the predicates are satisfied\n *\n * @param item - The payload to send to the backend\n * @param callback - function(error, repsonse) which will be called with the response from the API\n * in the case of a success, otherwise response will be null and error will have a value. If both\n * error and response are null then the item was stopped by a predicate which did not consider this\n * to be an error condition, but nonetheless did not send the item to the API.\n * @param originalError - The original error before any transformations that is to be logged if any\n */\nQueue.prototype.addItem = function(item, callback, originalError, originalItem) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() { return; };\n }\n var predicateResult = this._applyPredicates(item);\n if (predicateResult.stop) {\n this.removePendingItem(originalItem);\n callback(predicateResult.err);\n return;\n }\n this._maybeLog(item, originalError);\n this.removePendingItem(originalItem);\n this.pendingRequests.push(item);\n try {\n this._makeApiRequest(item, function(err, resp) {\n this._dequeuePendingRequest(item);\n callback(err, resp);\n }.bind(this));\n } catch (e) {\n this._dequeuePendingRequest(item);\n callback(e);\n }\n};\n\n/*\n * wait - Stop any further errors from being added to the queue, and get called back when all items\n * currently processing have finished sending to the backend.\n *\n * @param callback - function() called when all pending items have been sent\n */\nQueue.prototype.wait = function(callback) {\n if (!_.isFunction(callback)) {\n return;\n }\n this.waitCallback = callback;\n if (this._maybeCallWait()) {\n return;\n }\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitIntervalID = setInterval(function() {\n this._maybeCallWait();\n }.bind(this), 500);\n};\n\n/* _applyPredicates - Sequentially applies the predicates that have been added to the queue to the\n * given item with the currently configured options.\n *\n * @param item - An item in the queue\n * @returns {stop: bool, err: (Error|null)} - stop being true means do not add item to the queue,\n * the error value should be passed up to a callbak if we are stopping.\n */\nQueue.prototype._applyPredicates = function(item) {\n var p = null;\n for (var i = 0, len = this.predicates.length; i < len; i++) {\n p = this.predicates[i](item, this.options);\n if (!p || p.err !== undefined) {\n return {stop: true, err: p.err};\n }\n }\n return {stop: false, err: null};\n};\n\n/*\n * _makeApiRequest - Send an item to Rollbar, callback when done, if there is an error make an\n * effort to retry if we are configured to do so.\n *\n * @param item - an item ready to send to the backend\n * @param callback - function(err, response)\n */\nQueue.prototype._makeApiRequest = function(item, callback) {\n var rateLimitResponse = this.rateLimiter.shouldSend(item);\n if (rateLimitResponse.shouldSend) {\n this.api.postItem(item, function(err, resp) {\n if (err) {\n this._maybeRetry(err, item, callback);\n } else {\n callback(err, resp);\n }\n }.bind(this));\n } else if (rateLimitResponse.error) {\n callback(rateLimitResponse.error);\n } else {\n this.api.postItem(rateLimitResponse.payload, callback);\n }\n};\n\n// These are errors basically mean there is no internet connection\nvar RETRIABLE_ERRORS = ['ECONNRESET', 'ENOTFOUND', 'ESOCKETTIMEDOUT', 'ETIMEDOUT', 'ECONNREFUSED', 'EHOSTUNREACH', 'EPIPE', 'EAI_AGAIN'];\n\n/*\n * _maybeRetry - Given the error returned by the API, decide if we should retry or just callback\n * with the error.\n *\n * @param err - an error returned by the API transport\n * @param item - the item that was trying to be sent when this error occured\n * @param callback - function(err, response)\n */\nQueue.prototype._maybeRetry = function(err, item, callback) {\n var shouldRetry = false;\n if (this.options.retryInterval) {\n for (var i = 0, len = RETRIABLE_ERRORS.length; i < len; i++) {\n if (err.code === RETRIABLE_ERRORS[i]) {\n shouldRetry = true;\n break;\n }\n }\n }\n if (shouldRetry) {\n this._retryApiRequest(item, callback);\n } else {\n callback(err);\n }\n};\n\n/*\n * _retryApiRequest - Add an item and a callback to a queue and possibly start a timer to process\n * that queue based on the retryInterval in the options for this queue.\n *\n * @param item - an item that failed to send due to an error we deem retriable\n * @param callback - function(err, response)\n */\nQueue.prototype._retryApiRequest = function(item, callback) {\n this.retryQueue.push({item: item, callback: callback});\n\n if (!this.retryHandle) {\n this.retryHandle = setInterval(function() {\n while (this.retryQueue.length) {\n var retryObject = this.retryQueue.shift();\n this._makeApiRequest(retryObject.item, retryObject.callback);\n }\n }.bind(this), this.options.retryInterval);\n }\n};\n\n/*\n * _dequeuePendingRequest - Removes the item from the pending request queue, this queue is used to\n * enable to functionality of providing a callback that clients can pass to `wait` to be notified\n * when the pending request queue has been emptied. This must be called when the API finishes\n * processing this item. If a `wait` callback is configured, it is called by this function.\n *\n * @param item - the item previously added to the pending request queue\n */\nQueue.prototype._dequeuePendingRequest = function(item) {\n var idx = this.pendingRequests.indexOf(item);\n if (idx !== -1) {\n this.pendingRequests.splice(idx, 1);\n this._maybeCallWait();\n }\n};\n\nQueue.prototype._maybeLog = function(data, originalError) {\n if (this.logger && this.options.verbose) {\n var message = originalError;\n message = message || _.get(data, 'body.trace.exception.message');\n message = message || _.get(data, 'body.trace_chain.0.exception.message');\n if (message) {\n this.logger.error(message);\n return;\n }\n message = _.get(data, 'body.message.body');\n if (message) {\n this.logger.log(message);\n }\n }\n};\n\nQueue.prototype._maybeCallWait = function() {\n if (_.isFunction(this.waitCallback) && this.pendingItems.length === 0 && this.pendingRequests.length === 0) {\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitCallback();\n return true;\n }\n return false;\n};\n\nmodule.exports = Queue;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/queue.js\n// module id = 4\n// module chunks = 0","'use strict';\n\nvar extend = require('extend');\n\nvar RollbarJSON = {};\nvar __initRollbarJSON = false;\nfunction setupJSON() {\n if (__initRollbarJSON) {\n return;\n }\n __initRollbarJSON = true;\n\n if (isDefined(JSON)) {\n if (isNativeFunction(JSON.stringify)) {\n RollbarJSON.stringify = JSON.stringify;\n }\n if (isNativeFunction(JSON.parse)) {\n RollbarJSON.parse = JSON.parse;\n }\n }\n if (!isFunction(RollbarJSON.stringify) || !isFunction(RollbarJSON.parse)) {\n var setupCustomJSON = require('../vendor/JSON-js/json3.js');\n setupCustomJSON(RollbarJSON);\n }\n}\nsetupJSON();\n\n/*\n * isType - Given a Javascript value and a string, returns true if the type of the value matches the\n * given string.\n *\n * @param x - any value\n * @param t - a lowercase string containing one of the following type names:\n * - undefined\n * - null\n * - error\n * - number\n * - boolean\n * - string\n * - symbol\n * - function\n * - object\n * - array\n * @returns true if x is of type t, otherwise false\n */\nfunction isType(x, t) {\n return t === typeName(x);\n}\n\n/*\n * typeName - Given a Javascript value, returns the type of the object as a string\n */\nfunction typeName(x) {\n var name = typeof x;\n if (name !== 'object') {\n return name;\n }\n if (!x) {\n return 'null';\n }\n if (x instanceof Error) {\n return 'error';\n }\n return ({}).toString.call(x).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n}\n\n/* isFunction - a convenience function for checking if a value is a function\n *\n * @param f - any value\n * @returns true if f is a function, otherwise false\n */\nfunction isFunction(f) {\n return isType(f, 'function');\n}\n\n/* isNativeFunction - a convenience function for checking if a value is a native JS function\n *\n * @param f - any value\n * @returns true if f is a native JS function, otherwise false\n */\nfunction isNativeFunction(f) {\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n var funcMatchString = Function.prototype.toString.call(Object.prototype.hasOwnProperty)\n .replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?');\n var reIsNative = RegExp('^' + funcMatchString + '$');\n return isObject(f) && reIsNative.test(f);\n}\n\n/* isObject - Checks if the argument is an object\n *\n * @param value - any value\n * @returns true is value is an object function is an object)\n*/\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/*\n * isDefined - a convenience function for checking if a value is not equal to undefined\n *\n * @param u - any value\n * @returns true if u is anything other than undefined\n */\nfunction isDefined(u) {\n return !isType(u, 'undefined');\n}\n\n/*\n * isIterable - convenience function for checking if a value can be iterated, essentially\n * whether it is an object or an array.\n *\n * @param i - any value\n * @returns true if i is an object or an array as determined by `typeName`\n */\nfunction isIterable(i) {\n var type = typeName(i);\n return (type === 'object' || type === 'array');\n}\n\n/*\n * isError - convenience function for checking if a value is of an error type\n *\n * @param e - any value\n * @returns true if e is an error\n */\nfunction isError(e) {\n return isType(e, 'error');\n}\n\nfunction traverse(obj, func, seen) {\n var k, v, i;\n var isObj = isType(obj, 'object');\n var isArray = isType(obj, 'array');\n var keys = [];\n\n if (isObj && seen.indexOf(obj) !== -1) {\n return obj;\n }\n seen.push(obj);\n\n if (isObj) {\n for (k in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, k)) {\n keys.push(k);\n }\n }\n } else if (isArray) {\n for (i = 0; i < obj.length; ++i) {\n keys.push(i);\n }\n }\n\n var result = isObj ? {} : [];\n for (i = 0; i < keys.length; ++i) {\n k = keys[i];\n v = obj[k];\n result[k] = func(k, v, seen);\n }\n\n return (keys.length != 0) ? result : obj;\n}\n\nfunction redact() {\n return '********';\n}\n\n// from http://stackoverflow.com/a/8809472/1138191\nfunction uuid4() {\n var d = now();\n var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (d + Math.random() * 16) % 16 | 0;\n d = Math.floor(d / 16);\n return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16);\n });\n return uuid;\n}\n\nvar LEVELS = {\n debug: 0,\n info: 1,\n warning: 2,\n error: 3,\n critical: 4\n};\n\nfunction sanitizeUrl(url) {\n var baseUrlParts = parseUri(url);\n // remove a trailing # if there is no anchor\n if (baseUrlParts.anchor === '') {\n baseUrlParts.source = baseUrlParts.source.replace('#', '');\n }\n\n url = baseUrlParts.source.replace('?' + baseUrlParts.query, '');\n return url;\n}\n\nvar parseUriOptions = {\n strictMode: false,\n key: [\n 'source',\n 'protocol',\n 'authority',\n 'userInfo',\n 'user',\n 'password',\n 'host',\n 'port',\n 'relative',\n 'path',\n 'directory',\n 'file',\n 'query',\n 'anchor'\n ],\n q: {\n name: 'queryKey',\n parser: /(?:^|&)([^&=]*)=?([^&]*)/g\n },\n parser: {\n strict: /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,\n loose: /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/\n }\n};\n\nfunction parseUri(str) {\n if (!isType(str, 'string')) {\n throw new Error('received invalid input');\n }\n\n var o = parseUriOptions;\n var m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str);\n var uri = {};\n var i = o.key.length;\n\n while (i--) {\n uri[o.key[i]] = m[i] || '';\n }\n\n uri[o.q.name] = {};\n uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {\n if ($1) {\n uri[o.q.name][$1] = $2;\n }\n });\n\n return uri;\n}\n\nfunction addParamsAndAccessTokenToPath(accessToken, options, params) {\n params = params || {};\n params.access_token = accessToken;\n var paramsArray = [];\n var k;\n for (k in params) {\n if (Object.prototype.hasOwnProperty.call(params, k)) {\n paramsArray.push([k, params[k]].join('='));\n }\n }\n var query = '?' + paramsArray.sort().join('&');\n\n options = options || {};\n options.path = options.path || '';\n var qs = options.path.indexOf('?');\n var h = options.path.indexOf('#');\n var p;\n if (qs !== -1 && (h === -1 || h > qs)) {\n p = options.path;\n options.path = p.substring(0,qs) + query + '&' + p.substring(qs+1);\n } else {\n if (h !== -1) {\n p = options.path;\n options.path = p.substring(0,h) + query + p.substring(h);\n } else {\n options.path = options.path + query;\n }\n }\n}\n\nfunction formatUrl(u, protocol) {\n protocol = protocol || u.protocol;\n if (!protocol && u.port) {\n if (u.port === 80) {\n protocol = 'http:';\n } else if (u.port === 443) {\n protocol = 'https:';\n }\n }\n protocol = protocol || 'https:';\n\n if (!u.hostname) {\n return null;\n }\n var result = protocol + '//' + u.hostname;\n if (u.port) {\n result = result + ':' + u.port;\n }\n if (u.path) {\n result = result + u.path;\n }\n return result;\n}\n\nfunction stringify(obj, backup) {\n var value, error;\n try {\n value = RollbarJSON.stringify(obj);\n } catch (jsonError) {\n if (backup && isFunction(backup)) {\n try {\n value = backup(obj);\n } catch (backupError) {\n error = backupError;\n }\n } else {\n error = jsonError;\n }\n }\n return {error: error, value: value};\n}\n\nfunction jsonParse(s) {\n var value, error;\n try {\n value = RollbarJSON.parse(s);\n } catch (e) {\n error = e;\n }\n return {error: error, value: value};\n}\n\nfunction makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n mode,\n backupMessage,\n errorParser\n) {\n var location = {\n url: url || '',\n line: lineno,\n column: colno\n };\n location.func = errorParser.guessFunctionName(location.url, location.line);\n location.context = errorParser.gatherContext(location.url, location.line);\n var href = document && document.location && document.location.href;\n var useragent = window && window.navigator && window.navigator.userAgent;\n return {\n 'mode': mode,\n 'message': error ? String(error) : (message || backupMessage),\n 'url': href,\n 'stack': [location],\n 'useragent': useragent\n };\n}\n\nfunction wrapCallback(logger, f) {\n return function(err, resp) {\n try {\n f(err, resp);\n } catch (e) {\n logger.error(e);\n }\n };\n}\n\nfunction createItem(args, logger, notifier, requestKeys, lambdaContext) {\n var message, err, custom, callback, request;\n var arg;\n var extraArgs = [];\n\n for (var i = 0, l = args.length; i < l; ++i) {\n arg = args[i];\n\n var typ = typeName(arg);\n switch (typ) {\n case 'undefined':\n break;\n case 'string':\n message ? extraArgs.push(arg) : message = arg;\n break;\n case 'function':\n callback = wrapCallback(logger, arg);\n break;\n case 'date':\n extraArgs.push(arg);\n break;\n case 'error':\n case 'domexception':\n err ? extraArgs.push(arg) : err = arg;\n break;\n case 'object':\n case 'array':\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n if (requestKeys && typ === 'object' && !request) {\n for (var j = 0, len = requestKeys.length; j < len; ++j) {\n if (arg[requestKeys[j]] !== undefined) {\n request = arg;\n break;\n }\n }\n if (request) {\n break;\n }\n }\n custom ? extraArgs.push(arg) : custom = arg;\n break;\n default:\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n extraArgs.push(arg);\n }\n }\n\n if (extraArgs.length > 0) {\n // if custom is an array this turns it into an object with integer keys\n custom = extend(true, {}, custom);\n custom.extraArgs = extraArgs;\n }\n\n var item = {\n message: message,\n err: err,\n custom: custom,\n timestamp: now(),\n callback: callback,\n uuid: uuid4()\n };\n if (custom && custom.level !== undefined) {\n item.level = custom.level;\n delete custom.level;\n }\n if (requestKeys && request) {\n item.request = request;\n }\n if (lambdaContext) {\n item.lambdaContext = lambdaContext;\n }\n item._originalArgs = args;\n return item;\n}\n\n/*\n * get - given an obj/array and a keypath, return the value at that keypath or\n * undefined if not possible.\n *\n * @param obj - an object or array\n * @param path - a string of keys separated by '.' such as 'plugin.jquery.0.message'\n * which would correspond to 42 in `{plugin: {jquery: [{message: 42}]}}`\n */\nfunction get(obj, path) {\n if (!obj) {\n return undefined;\n }\n var keys = path.split('.');\n var result = obj;\n try {\n for (var i = 0, len = keys.length; i < len; ++i) {\n result = result[keys[i]];\n }\n } catch (e) {\n result = undefined;\n }\n return result;\n}\n\nfunction set(obj, path, value) {\n if (!obj) {\n return;\n }\n var keys = path.split('.');\n var len = keys.length;\n if (len < 1) {\n return;\n }\n if (len === 1) {\n obj[keys[0]] = value;\n return;\n }\n try {\n var temp = obj[keys[0]] || {};\n var replacement = temp;\n for (var i = 1; i < len-1; i++) {\n temp[keys[i]] = temp[keys[i]] || {};\n temp = temp[keys[i]];\n }\n temp[keys[len-1]] = value;\n obj[keys[0]] = replacement;\n } catch (e) {\n return;\n }\n}\n\nfunction scrub(data, scrubFields) {\n scrubFields = scrubFields || [];\n var paramRes = _getScrubFieldRegexs(scrubFields);\n var queryRes = _getScrubQueryParamRegexs(scrubFields);\n\n function redactQueryParam(dummy0, paramPart, dummy1, dummy2, dummy3, valPart) {\n return paramPart + redact(valPart);\n }\n\n function paramScrubber(v) {\n var i;\n if (isType(v, 'string')) {\n for (i = 0; i < queryRes.length; ++i) {\n v = v.replace(queryRes[i], redactQueryParam);\n }\n }\n return v;\n }\n\n function valScrubber(k, v) {\n var i;\n for (i = 0; i < paramRes.length; ++i) {\n if (paramRes[i].test(k)) {\n v = redact(v);\n break;\n }\n }\n return v;\n }\n\n function scrubber(k, v, seen) {\n var tmpV = valScrubber(k, v);\n if (tmpV === v) {\n if (isType(v, 'object') || isType(v, 'array')) {\n return traverse(v, scrubber, seen);\n }\n return paramScrubber(tmpV);\n } else {\n return tmpV;\n }\n }\n\n return traverse(data, scrubber, []);\n}\n\nfunction _getScrubFieldRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '^\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?$';\n ret.push(new RegExp(pat, 'i'));\n }\n return ret;\n}\n\n\nfunction _getScrubQueryParamRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?';\n ret.push(new RegExp('(' + pat + '=)([^&\\\\n]+)', 'igm'));\n }\n return ret;\n}\n\nfunction formatArgsAsString(args) {\n var i, len, arg;\n var result = [];\n for (i = 0, len = args.length; i < len; i++) {\n arg = args[i];\n if (typeof arg === 'object') {\n arg = stringify(arg);\n arg = arg.error || arg.value;\n if (arg.length > 500)\n arg = arg.substr(0,500)+'...';\n } else if (typeof arg === 'undefined') {\n arg = 'undefined';\n }\n result.push(arg);\n }\n return result.join(' ');\n}\n\nfunction now() {\n if (Date.now) {\n return +Date.now();\n }\n return +new Date();\n}\n\nfunction filterIp(requestData, captureIp) {\n if (!requestData || !requestData['user_ip'] || captureIp === true) {\n return;\n }\n var newIp = requestData['user_ip'];\n if (!captureIp) {\n newIp = null;\n } else {\n try {\n var parts;\n if (newIp.indexOf('.') !== -1) {\n parts = newIp.split('.');\n parts.pop();\n parts.push('0');\n newIp = parts.join('.');\n } else if (newIp.indexOf(':') !== -1) {\n parts = newIp.split(':');\n if (parts.length > 2) {\n var beginning = parts.slice(0, 3);\n var slashIdx = beginning[2].indexOf('/');\n if (slashIdx !== -1) {\n beginning[2] = beginning[2].substring(0, slashIdx);\n }\n var terminal = '0000:0000:0000:0000:0000';\n newIp = beginning.concat(terminal).join(':');\n }\n } else {\n newIp = null;\n }\n } catch (e) {\n newIp = null;\n }\n }\n requestData['user_ip'] = newIp;\n}\n\nmodule.exports = {\n isType: isType,\n typeName: typeName,\n isFunction: isFunction,\n isNativeFunction: isNativeFunction,\n isIterable: isIterable,\n isError: isError,\n extend: extend,\n traverse: traverse,\n redact: redact,\n uuid4: uuid4,\n LEVELS: LEVELS,\n sanitizeUrl: sanitizeUrl,\n addParamsAndAccessTokenToPath: addParamsAndAccessTokenToPath,\n formatUrl: formatUrl,\n stringify: stringify,\n jsonParse: jsonParse,\n makeUnhandledStackInfo: makeUnhandledStackInfo,\n createItem: createItem,\n get: get,\n set: set,\n scrub: scrub,\n formatArgsAsString: formatArgsAsString,\n now: now,\n filterIp: filterIp\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/utility.js\n// module id = 5\n// module chunks = 0","'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) {/**/}\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[0],\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t} else if ((typeof target !== 'object' && typeof target !== 'function') || target == null) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = target[name];\n\t\t\t\tcopy = options[name];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\ttarget[name] = extend(deep, clone, copy);\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/extend/index.js\n// module id = 6\n// module chunks = 0","// json3.js\n// 2017-02-21\n// Public Domain.\n// NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n// See http://www.JSON.org/js.html\n// This code should be minified before deployment.\n// See http://javascript.crockford.com/jsmin.html\n\n// USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n// NOT CONTROL.\n\n// This file creates a global JSON object containing two methods: stringify\n// and parse. This file provides the ES5 JSON capability to ES3 systems.\n// If a project might run on IE8 or earlier, then this file should be included.\n// This file does nothing on ES5 systems.\n\n// JSON.stringify(value, replacer, space)\n// value any JavaScript value, usually an object or array.\n// replacer an optional parameter that determines how object\n// values are stringified for objects. It can be a\n// function or an array of strings.\n// space an optional parameter that specifies the indentation\n// of nested structures. If it is omitted, the text will\n// be packed without extra whitespace. If it is a number,\n// it will specify the number of spaces to indent at each\n// level. If it is a string (such as \"\\t\" or \" \"),\n// it contains the characters used to indent at each level.\n// This method produces a JSON text from a JavaScript value.\n// When an object value is found, if the object contains a toJSON\n// method, its toJSON method will be called and the result will be\n// stringified. A toJSON method does not serialize: it returns the\n// value represented by the name/value pair that should be serialized,\n// or undefined if nothing should be serialized. The toJSON method\n// will be passed the key associated with the value, and this will be\n// bound to the value.\n\n// For example, this would serialize Dates as ISO strings.\n\n// Date.prototype.toJSON = function (key) {\n// function f(n) {\n// // Format integers to have at least two digits.\n// return (n < 10)\n// ? \"0\" + n\n// : n;\n// }\n// return this.getUTCFullYear() + \"-\" +\n// f(this.getUTCMonth() + 1) + \"-\" +\n// f(this.getUTCDate()) + \"T\" +\n// f(this.getUTCHours()) + \":\" +\n// f(this.getUTCMinutes()) + \":\" +\n// f(this.getUTCSeconds()) + \"Z\";\n// };\n\n// You can provide an optional replacer method. It will be passed the\n// key and value of each member, with this bound to the containing\n// object. The value that is returned from your method will be\n// serialized. If your method returns undefined, then the member will\n// be excluded from the serialization.\n\n// If the replacer parameter is an array of strings, then it will be\n// used to select the members to be serialized. It filters the results\n// such that only members with keys listed in the replacer array are\n// stringified.\n\n// Values that do not have JSON representations, such as undefined or\n// functions, will not be serialized. Such values in objects will be\n// dropped; in arrays they will be replaced with null. You can use\n// a replacer function to replace those with JSON values.\n\n// JSON.stringify(undefined) returns undefined.\n\n// The optional space parameter produces a stringification of the\n// value that is filled with line breaks and indentation to make it\n// easier to read.\n\n// If the space parameter is a non-empty string, then that string will\n// be used for indentation. If the space parameter is a number, then\n// the indentation will be that many spaces.\n\n// Example:\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}]);\n// // text is '[\"e\",{\"pluribus\":\"unum\"}]'\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}], null, \"\\t\");\n// // text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\n\n// text = JSON.stringify([new Date()], function (key, value) {\n// return this[key] instanceof Date\n// ? \"Date(\" + this[key] + \")\"\n// : value;\n// });\n// // text is '[\"Date(---current time---)\"]'\n\n// JSON.parse(text, reviver)\n// This method parses a JSON text to produce an object or array.\n// It can throw a SyntaxError exception.\n// This has been modified to use JSON-js/json_parse_state.js as the\n// parser instead of the one built around eval found in JSON-js/json2.js\n\n// The optional reviver parameter is a function that can filter and\n// transform the results. It receives each of the keys and values,\n// and its return value is used instead of the original value.\n// If it returns what it received, then the structure is not modified.\n// If it returns undefined then the member is deleted.\n\n// Example:\n\n// // Parse the text. Values that look like ISO date strings will\n// // be converted to Date objects.\n\n// myData = JSON.parse(text, function (key, value) {\n// var a;\n// if (typeof value === \"string\") {\n// a =\n// /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n// if (a) {\n// return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n// +a[5], +a[6]));\n// }\n// }\n// return value;\n// });\n\n// myData = JSON.parse('[\"Date(09/09/2001)\"]', function (key, value) {\n// var d;\n// if (typeof value === \"string\" &&\n// value.slice(0, 5) === \"Date(\" &&\n// value.slice(-1) === \")\") {\n// d = new Date(value.slice(5, -1));\n// if (d) {\n// return d;\n// }\n// }\n// return value;\n// });\n\n// This is a reference implementation. You are free to copy, modify, or\n// redistribute.\n\n/*jslint\n for, this\n */\n\n/*property\n JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\n getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\n lastIndex, length, parse, prototype, push, replace, slice, stringify,\n test, toJSON, toString, valueOf\n */\n\nvar setupCustomJSON = function(JSON) {\n\n var rx_one = /^[\\],:{}\\s]*$/;\n var rx_two = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g;\n var rx_three = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\n var rx_four = /(?:^|:|,)(?:\\s*\\[)+/g;\n var rx_escapable = /[\\\\\"\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n var rx_dangerous = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\n function f(n) {\n // Format integers to have at least two digits.\n return n < 10\n ? \"0\" + n\n : n;\n }\n\n function this_value() {\n return this.valueOf();\n }\n\n if (typeof Date.prototype.toJSON !== \"function\") {\n\n Date.prototype.toJSON = function () {\n\n return isFinite(this.valueOf())\n ? this.getUTCFullYear() + \"-\" +\n f(this.getUTCMonth() + 1) + \"-\" +\n f(this.getUTCDate()) + \"T\" +\n f(this.getUTCHours()) + \":\" +\n f(this.getUTCMinutes()) + \":\" +\n f(this.getUTCSeconds()) + \"Z\"\n : null;\n };\n\n Boolean.prototype.toJSON = this_value;\n Number.prototype.toJSON = this_value;\n String.prototype.toJSON = this_value;\n }\n\n var gap;\n var indent;\n var meta;\n var rep;\n\n\n function quote(string) {\n\n // If the string contains no control characters, no quote characters, and no\n // backslash characters, then we can safely slap some quotes around it.\n // Otherwise we must also replace the offending characters with safe escape\n // sequences.\n\n rx_escapable.lastIndex = 0;\n return rx_escapable.test(string)\n ? \"\\\"\" + string.replace(rx_escapable, function (a) {\n var c = meta[a];\n return typeof c === \"string\"\n ? c\n : \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n }) + \"\\\"\"\n : \"\\\"\" + string + \"\\\"\";\n }\n\n\n function str(key, holder) {\n\n // Produce a string from holder[key].\n\n var i; // The loop counter.\n var k; // The member key.\n var v; // The member value.\n var length;\n var mind = gap;\n var partial;\n var value = holder[key];\n\n // If the value has a toJSON method, call it to obtain a replacement value.\n\n if (value && typeof value === \"object\" &&\n typeof value.toJSON === \"function\") {\n value = value.toJSON(key);\n }\n\n // If we were called with a replacer function, then call the replacer to\n // obtain a replacement value.\n\n if (typeof rep === \"function\") {\n value = rep.call(holder, key, value);\n }\n\n // What happens next depends on the value's type.\n\n switch (typeof value) {\n case \"string\":\n return quote(value);\n\n case \"number\":\n\n // JSON numbers must be finite. Encode non-finite numbers as null.\n\n return isFinite(value)\n ? String(value)\n : \"null\";\n\n case \"boolean\":\n case \"null\":\n\n // If the value is a boolean or null, convert it to a string. Note:\n // typeof null does not produce \"null\". The case is included here in\n // the remote chance that this gets fixed someday.\n\n return String(value);\n\n // If the type is \"object\", we might be dealing with an object or an array or\n // null.\n\n case \"object\":\n\n // Due to a specification blunder in ECMAScript, typeof null is \"object\",\n // so watch out for that case.\n\n if (!value) {\n return \"null\";\n }\n\n // Make an array to hold the partial results of stringifying this object value.\n\n gap += indent;\n partial = [];\n\n // Is the value an array?\n\n if (Object.prototype.toString.apply(value) === \"[object Array]\") {\n\n // The value is an array. Stringify every element. Use null as a placeholder\n // for non-JSON values.\n\n length = value.length;\n for (i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || \"null\";\n }\n\n // Join all of the elements together, separated with commas, and wrap them in\n // brackets.\n\n v = partial.length === 0\n ? \"[]\"\n : gap\n ? \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\"\n : \"[\" + partial.join(\",\") + \"]\";\n gap = mind;\n return v;\n }\n\n // If the replacer is an array, use it to select the members to be stringified.\n\n if (rep && typeof rep === \"object\") {\n length = rep.length;\n for (i = 0; i < length; i += 1) {\n if (typeof rep[i] === \"string\") {\n k = rep[i];\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n } else {\n\n // Otherwise, iterate through all of the keys in the object.\n\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n }\n\n // Join all of the member texts together, separated with commas,\n // and wrap them in braces.\n\n v = partial.length === 0\n ? \"{}\"\n : gap\n ? \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\"\n : \"{\" + partial.join(\",\") + \"}\";\n gap = mind;\n return v;\n }\n }\n\n // If the JSON object does not yet have a stringify method, give it one.\n\n if (typeof JSON.stringify !== \"function\") {\n meta = { // table of character substitutions\n \"\\b\": \"\\\\b\",\n \"\\t\": \"\\\\t\",\n \"\\n\": \"\\\\n\",\n \"\\f\": \"\\\\f\",\n \"\\r\": \"\\\\r\",\n \"\\\"\": \"\\\\\\\"\",\n \"\\\\\": \"\\\\\\\\\"\n };\n JSON.stringify = function (value, replacer, space) {\n\n // The stringify method takes a value and an optional replacer, and an optional\n // space parameter, and returns a JSON text. The replacer can be a function\n // that can replace values, or an array of strings that will select the keys.\n // A default replacer method can be provided. Use of the space parameter can\n // produce text that is more easily readable.\n\n var i;\n gap = \"\";\n indent = \"\";\n\n // If the space parameter is a number, make an indent string containing that\n // many spaces.\n\n if (typeof space === \"number\") {\n for (i = 0; i < space; i += 1) {\n indent += \" \";\n }\n\n // If the space parameter is a string, it will be used as the indent string.\n\n } else if (typeof space === \"string\") {\n indent = space;\n }\n\n // If there is a replacer, it must be a function or an array.\n // Otherwise, throw an error.\n\n rep = replacer;\n if (replacer && typeof replacer !== \"function\" &&\n (typeof replacer !== \"object\" ||\n typeof replacer.length !== \"number\")) {\n throw new Error(\"JSON.stringify\");\n }\n\n // Make a fake root object containing our value under the key of \"\".\n // Return the result of stringifying the value.\n\n return str(\"\", {\"\": value});\n };\n }\n\n\n // If the JSON object does not yet have a parse method, give it one.\n\n if (typeof JSON.parse !== \"function\") {\n JSON.parse = (function () {\n\n // This function creates a JSON parse function that uses a state machine rather\n // than the dangerous eval function to parse a JSON text.\n\n var state; // The state of the parser, one of\n // 'go' The starting state\n // 'ok' The final, accepting state\n // 'firstokey' Ready for the first key of the object or\n // the closing of an empty object\n // 'okey' Ready for the next key of the object\n // 'colon' Ready for the colon\n // 'ovalue' Ready for the value half of a key/value pair\n // 'ocomma' Ready for a comma or closing }\n // 'firstavalue' Ready for the first value of an array or\n // an empty array\n // 'avalue' Ready for the next value of an array\n // 'acomma' Ready for a comma or closing ]\n var stack; // The stack, for controlling nesting.\n var container; // The current container object or array\n var key; // The current key\n var value; // The current value\n var escapes = { // Escapement translation table\n \"\\\\\": \"\\\\\",\n \"\\\"\": \"\\\"\",\n \"/\": \"/\",\n \"t\": \"\\t\",\n \"n\": \"\\n\",\n \"r\": \"\\r\",\n \"f\": \"\\f\",\n \"b\": \"\\b\"\n };\n var string = { // The actions for string tokens\n go: function () {\n state = \"ok\";\n },\n firstokey: function () {\n key = value;\n state = \"colon\";\n },\n okey: function () {\n key = value;\n state = \"colon\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var number = { // The actions for number tokens\n go: function () {\n state = \"ok\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var action = {\n\n // The action table describes the behavior of the machine. It contains an\n // object for each token. Each object contains a method that is called when\n // a token is matched in a state. An object will lack a method for illegal\n // states.\n\n \"{\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = {};\n state = \"firstokey\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = {};\n state = \"firstokey\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n }\n },\n \"}\": {\n firstokey: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n ocomma: function () {\n var pop = stack.pop();\n container[key] = value;\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \"[\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = [];\n state = \"firstavalue\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = [];\n state = \"firstavalue\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n }\n },\n \"]\": {\n firstavalue: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n acomma: function () {\n var pop = stack.pop();\n container.push(value);\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \":\": {\n colon: function () {\n if (Object.hasOwnProperty.call(container, key)) {\n throw new SyntaxError(\"Duplicate key '\" + key + \"\\\"\");\n }\n state = \"ovalue\";\n }\n },\n \",\": {\n ocomma: function () {\n container[key] = value;\n state = \"okey\";\n },\n acomma: function () {\n container.push(value);\n state = \"avalue\";\n }\n },\n \"true\": {\n go: function () {\n value = true;\n state = \"ok\";\n },\n ovalue: function () {\n value = true;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = true;\n state = \"acomma\";\n },\n avalue: function () {\n value = true;\n state = \"acomma\";\n }\n },\n \"false\": {\n go: function () {\n value = false;\n state = \"ok\";\n },\n ovalue: function () {\n value = false;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = false;\n state = \"acomma\";\n },\n avalue: function () {\n value = false;\n state = \"acomma\";\n }\n },\n \"null\": {\n go: function () {\n value = null;\n state = \"ok\";\n },\n ovalue: function () {\n value = null;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = null;\n state = \"acomma\";\n },\n avalue: function () {\n value = null;\n state = \"acomma\";\n }\n }\n };\n\n function debackslashify(text) {\n\n // Remove and replace any backslash escapement.\n\n return text.replace(/\\\\(?:u(.{4})|([^u]))/g, function (ignore, b, c) {\n return b\n ? String.fromCharCode(parseInt(b, 16))\n : escapes[c];\n });\n }\n\n return function (source, reviver) {\n\n // A regular expression is used to extract tokens from the JSON text.\n // The extraction process is cautious.\n\n var result;\n var tx = /^[\\u0020\\t\\n\\r]*(?:([,:\\[\\]{}]|true|false|null)|(-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)|\"((?:[^\\r\\n\\t\\\\\\\"]|\\\\(?:[\"\\\\\\/trnfb]|u[0-9a-fA-F]{4}))*)\")/;\n\n // Set the starting state.\n\n state = \"go\";\n\n // The stack records the container, key, and state for each object or array\n // that contains another object or array while processing nested structures.\n\n stack = [];\n\n // If any error occurs, we will catch it and ultimately throw a syntax error.\n\n try {\n\n // For each token...\n\n while (true) {\n result = tx.exec(source);\n if (!result) {\n break;\n }\n\n // result is the result array from matching the tokenizing regular expression.\n // result[0] contains everything that matched, including any initial whitespace.\n // result[1] contains any punctuation that was matched, or true, false, or null.\n // result[2] contains a matched number, still in string form.\n // result[3] contains a matched string, without quotes but with escapement.\n\n if (result[1]) {\n\n // Token: Execute the action for this state and token.\n\n action[result[1]][state]();\n\n } else if (result[2]) {\n\n // Number token: Convert the number string into a number value and execute\n // the action for this state and number.\n\n value = +result[2];\n number[state]();\n } else {\n\n // String token: Replace the escapement sequences and execute the action for\n // this state and string.\n\n value = debackslashify(result[3]);\n string[state]();\n }\n\n // Remove the token from the string. The loop will continue as long as there\n // are tokens. This is a slow process, but it allows the use of ^ matching,\n // which assures that no illegal tokens slip through.\n\n source = source.slice(result[0].length);\n }\n\n // If we find a state/token combination that is illegal, then the action will\n // cause an error. We handle the error by simply changing the state.\n\n } catch (e) {\n state = e;\n }\n\n // The parsing is finished. If we are not in the final \"ok\" state, or if the\n // remaining source contains anything except whitespace, then we did not have\n //a well-formed JSON text.\n\n if (state !== \"ok\" || (/[^\\u0020\\t\\n\\r]/.test(source))) {\n throw (state instanceof SyntaxError)\n ? state\n : new SyntaxError(\"JSON\");\n }\n\n // If there is a reviver function, we recursively walk the new structure,\n // passing each name/value pair to the reviver function for possible\n // transformation, starting with a temporary root object that holds the current\n // value in an empty key. If there is not a reviver function, we simply return\n // that value.\n\n return (typeof reviver === \"function\")\n ? (function walk(holder, key) {\n var k;\n var v;\n var val = holder[key];\n if (val && typeof val === \"object\") {\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(val, k)) {\n v = walk(val, k);\n if (v !== undefined) {\n val[k] = v;\n } else {\n delete val[k];\n }\n }\n }\n }\n return reviver.call(holder, key, val);\n }({\"\": value}, \"\"))\n : value;\n };\n }());\n }\n}\n\nmodule.exports = setupCustomJSON;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./vendor/JSON-js/json3.js\n// module id = 7\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Notifier - the internal object responsible for delegating between the client exposed API, the\n * chain of transforms necessary to turn an item into something that can be sent to Rollbar, and the\n * queue which handles the communcation with the Rollbar API servers.\n *\n * @param queue - an object that conforms to the interface: addItem(item, callback)\n * @param options - an object representing the options to be set for this notifier, this should have\n * any defaults already set by the caller\n */\nfunction Notifier(queue, options) {\n this.queue = queue;\n this.options = options;\n this.transforms = [];\n}\n\n/*\n * configure - updates the options for this notifier with the passed in object\n *\n * @param options - an object which gets merged with the current options set on this notifier\n * @returns this\n */\nNotifier.prototype.configure = function(options) {\n this.queue && this.queue.configure(options);\n var oldOptions = this.options;\n this.options = _.extend({}, oldOptions, options);\n return this;\n};\n\n/*\n * addTransform - adds a transform onto the end of the queue of transforms for this notifier\n *\n * @param transform - a function which takes three arguments:\n * * item: An Object representing the data to eventually be sent to Rollbar\n * * options: The current value of the options for this notifier\n * * callback: function(err: (Null|Error), item: (Null|Object)) the transform must call this\n * callback with a null value for error if it wants the processing chain to continue, otherwise\n * with an error to terminate the processing. The item should be the updated item after this\n * transform is finished modifying it.\n */\nNotifier.prototype.addTransform = function(transform) {\n if (_.isFunction(transform)) {\n this.transforms.push(transform);\n }\n return this;\n};\n\n/*\n * log - the internal log function which applies the configured transforms and then pushes onto the\n * queue to be sent to the backend.\n *\n * @param item - An object with the following structure:\n * message [String] - An optional string to be sent to rollbar\n * error [Error] - An optional error\n *\n * @param callback - A function of type function(err, resp) which will be called with exactly one\n * null argument and one non-null argument. The callback will be called once, either during the\n * transform stage if an error occurs inside a transform, or in response to the communication with\n * the backend. The second argument will be the response from the backend in case of success.\n */\nNotifier.prototype.log = function(item, callback) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!this.options.enabled) {\n return callback(new Error('Rollbar is not enabled'));\n }\n\n this.queue.addPendingItem(item);\n var originalError = item.err;\n this._applyTransforms(item, function(err, i) {\n if (err) {\n this.queue.removePendingItem(item);\n return callback(err, null);\n }\n this.queue.addItem(i, callback, originalError, item);\n }.bind(this));\n};\n\n/* Internal */\n\n/*\n * _applyTransforms - Applies the transforms that have been added to this notifier sequentially. See\n * `addTransform` for more information.\n *\n * @param item - An item to be transformed\n * @param callback - A function of type function(err, item) which will be called with a non-null\n * error and a null item in the case of a transform failure, or a null error and non-null item after\n * all transforms have been applied.\n */\nNotifier.prototype._applyTransforms = function(item, callback) {\n var transformIndex = -1;\n var transformsLength = this.transforms.length;\n var transforms = this.transforms;\n var options = this.options;\n\n var cb = function(err, i) {\n if (err) {\n callback(err, null);\n return;\n }\n\n transformIndex++;\n\n if (transformIndex === transformsLength) {\n callback(null, i);\n return;\n }\n\n transforms[transformIndex](i, options, cb);\n };\n\n cb(null, item);\n};\n\nmodule.exports = Notifier;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/notifier.js\n// module id = 8\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nvar MAX_EVENTS = 100;\n\nfunction Telemeter(options) {\n this.queue = [];\n this.options = _.extend(true, {}, options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n this.maxQueueSize = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n}\n\nTelemeter.prototype.configure = function(options) {\n var oldOptions = this.options;\n this.options = _.extend(true, {}, oldOptions, options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n var newMaxEvents = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n var deleteCount = 0;\n if (this.maxQueueSize > newMaxEvents) {\n deleteCount = this.maxQueueSize - newMaxEvents;\n }\n this.maxQueueSize = newMaxEvents;\n this.queue.splice(0, deleteCount);\n};\n\nTelemeter.prototype.copyEvents = function() {\n return Array.prototype.slice.call(this.queue, 0);\n};\n\nTelemeter.prototype.capture = function(type, metadata, level, rollbarUUID, timestamp) {\n var e = {\n level: getLevel(type, level),\n type: type,\n timestamp_ms: timestamp || _.now(),\n body: metadata,\n source: 'client'\n };\n if (rollbarUUID) {\n e.uuid = rollbarUUID;\n }\n\n try {\n if (_.isFunction(this.options.filterTelemetry) && this.options.filterTelemetry(e)) {\n return false;\n }\n } catch (e) {\n this.options.filterTelemetry = null;\n }\n\n this.push(e);\n return e;\n};\n\nTelemeter.prototype.captureEvent = function(metadata, level, rollbarUUID) {\n return this.capture('manual', metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.captureError = function(err, level, rollbarUUID, timestamp) {\n var metadata = {\n message: err.message || String(err)\n };\n if (err.stack) {\n metadata.stack = err.stack;\n }\n return this.capture('error', metadata, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureLog = function(message, level, rollbarUUID, timestamp) {\n return this.capture('log', {\n message: message\n }, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureNetwork = function(metadata, subtype, rollbarUUID, requestData) {\n subtype = subtype || 'xhr';\n metadata.subtype = metadata.subtype || subtype;\n if (requestData) {\n metadata.request = requestData;\n }\n var level = this.levelFromStatus(metadata.status_code);\n return this.capture('network', metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.levelFromStatus = function(statusCode) {\n if (statusCode >= 200 && statusCode < 400) {\n return 'info';\n }\n if (statusCode === 0 || statusCode >= 400) {\n return 'error';\n }\n return 'info';\n};\n\nTelemeter.prototype.captureDom = function(subtype, element, value, checked, rollbarUUID) {\n var metadata = {\n subtype: subtype,\n element: element\n };\n if (value !== undefined) {\n metadata.value = value;\n }\n if (checked !== undefined) {\n metadata.checked = checked;\n }\n return this.capture('dom', metadata, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureNavigation = function(from, to, rollbarUUID) {\n return this.capture('navigation', {from: from, to: to}, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureDomContentLoaded = function(ts) {\n return this.capture('navigation', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n */\n};\nTelemeter.prototype.captureLoad = function(ts) {\n return this.capture('navigation', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n */\n};\n\nTelemeter.prototype.captureConnectivityChange = function(type, rollbarUUID) {\n return this.captureNetwork({change: type}, 'connectivity', rollbarUUID);\n};\n\n// Only intended to be used internally by the notifier\nTelemeter.prototype._captureRollbarItem = function(item) {\n if (!this.options.includeItemsInTelemetry) {\n return;\n }\n if (item.err) {\n return this.captureError(item.err, item.level, item.uuid, item.timestamp);\n }\n if (item.message) {\n return this.captureLog(item.message, item.level, item.uuid, item.timestamp);\n }\n if (item.custom) {\n return this.capture('log', item.custom, item.level, item.uuid, item.timestamp);\n }\n};\n\nTelemeter.prototype.push = function(e) {\n this.queue.push(e);\n if (this.queue.length > this.maxQueueSize) {\n this.queue.shift();\n }\n};\n\nfunction getLevel(type, level) {\n if (level) {\n return level;\n }\n var defaultLevel = {\n error: 'error',\n manual: 'info'\n };\n return defaultLevel[type] || 'info';\n}\n\nmodule.exports = Telemeter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/telemetry.js\n// module id = 9\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\nvar helpers = require('./apiUtility');\n\nvar defaultOptions = {\n hostname: 'api.rollbar.com',\n path: '/api/1/item/',\n search: null,\n version: '1',\n protocol: 'https:',\n port: 443\n};\n\n/**\n * Api is an object that encapsulates methods of communicating with\n * the Rollbar API. It is a standard interface with some parts implemented\n * differently for server or browser contexts. It is an object that should\n * be instantiated when used so it can contain non-global options that may\n * be different for another instance of RollbarApi.\n *\n * @param options {\n * accessToken: the accessToken to use for posting items to rollbar\n * endpoint: an alternative endpoint to send errors to\n * must be a valid, fully qualified URL.\n * The default is: https://api.rollbar.com/api/1/item\n * proxy: if you wish to proxy requests provide an object\n * with the following keys:\n * host or hostname (required): foo.example.com\n * port (optional): 123\n * protocol (optional): https\n * }\n */\nfunction Api(options, t, u, j) {\n this.options = options;\n this.transport = t;\n this.url = u;\n this.jsonBackup = j;\n this.accessToken = options.accessToken;\n this.transportOptions = _getTransport(options, u);\n}\n\n/**\n *\n * @param data\n * @param callback\n */\nApi.prototype.postItem = function(data, callback) {\n var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n this.transport.post(this.accessToken, transportOptions, payload, callback);\n};\n\nApi.prototype.configure = function(options) {\n var oldOptions = this.oldOptions;\n this.options = _.extend(true, {}, oldOptions, options);\n this.transportOptions = _getTransport(this.options, this.url);\n if (this.options.accessToken !== undefined) {\n this.accessToken = this.options.accessToken;\n }\n return this;\n};\n\nfunction _getTransport(options, url) {\n return helpers.getTransportFromOptions(options, defaultOptions, url);\n}\n\nmodule.exports = Api;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/api.js\n// module id = 10\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction buildPayload(accessToken, data, jsonBackup) {\n if (!_.isType(data.context, 'string')) {\n var contextResult = _.stringify(data.context, jsonBackup);\n if (contextResult.error) {\n data.context = 'Error: could not serialize \\'context\\'';\n } else {\n data.context = contextResult.value || '';\n }\n if (data.context.length > 255) {\n data.context = data.context.substr(0, 255);\n }\n }\n return {\n access_token: accessToken,\n data: data\n };\n}\n\nfunction getTransportFromOptions(options, defaults, url) {\n var hostname = defaults.hostname;\n var protocol = defaults.protocol;\n var port = defaults.port;\n var path = defaults.path;\n var search = defaults.search;\n\n var proxy = options.proxy;\n if (options.endpoint) {\n var opts = url.parse(options.endpoint);\n hostname = opts.hostname;\n protocol = opts.protocol;\n port = opts.port;\n path = opts.pathname;\n search = opts.search;\n }\n return {\n hostname: hostname,\n protocol: protocol,\n port: port,\n path: path,\n search: search,\n proxy: proxy\n };\n}\n\nfunction transportOptions(transport, method) {\n var protocol = transport.protocol || 'https:';\n var port = transport.port || (protocol === 'http:' ? 80 : protocol === 'https:' ? 443 : undefined);\n var hostname = transport.hostname;\n var path = transport.path;\n if (transport.search) {\n path = path + transport.search;\n }\n if (transport.proxy) {\n path = protocol + '//' + hostname + path;\n hostname = transport.proxy.host || transport.proxy.hostname;\n port = transport.proxy.port;\n protocol = transport.proxy.protocol || protocol;\n }\n return {\n protocol: protocol,\n hostname: hostname,\n path: path,\n port: port,\n method: method\n };\n}\n\nfunction appendPathToPath(base, path) {\n var baseTrailingSlash = /\\/$/.test(base);\n var pathBeginningSlash = /^\\//.test(path);\n\n if (baseTrailingSlash && pathBeginningSlash) {\n path = path.substring(1);\n } else if (!baseTrailingSlash && !pathBeginningSlash) {\n path = '/' + path;\n }\n\n return base + path;\n}\n\nmodule.exports = {\n buildPayload: buildPayload,\n getTransportFromOptions: getTransportFromOptions,\n transportOptions: transportOptions,\n appendPathToPath: appendPathToPath\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/apiUtility.js\n// module id = 11\n// module chunks = 0","'use strict';\n\n/* eslint-disable no-console */\nrequire('console-polyfill');\nvar detection = require('./detection');\nvar _ = require('../utility');\n\nfunction error() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.error(_.formatArgsAsString(args));\n } else {\n console.error.apply(console, args);\n }\n}\n\nfunction info() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.info(_.formatArgsAsString(args));\n } else {\n console.info.apply(console, args);\n }\n}\n\nfunction log() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.log(_.formatArgsAsString(args));\n } else {\n console.log.apply(console, args);\n }\n}\n\n/* eslint-enable no-console */\n\nmodule.exports = {\n error: error,\n info: info,\n log: log\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/logger.js\n// module id = 12\n// module chunks = 0","// Console-polyfill. MIT license.\n// https://github.com/paulmillr/console-polyfill\n// Make it safe to do console.log() always.\n(function(global) {\n 'use strict';\n if (!global.console) {\n global.console = {};\n }\n var con = global.console;\n var prop, method;\n var dummy = function() {};\n var properties = ['memory'];\n var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' +\n 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' +\n 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',');\n while (prop = properties.pop()) if (!con[prop]) con[prop] = {};\n while (method = methods.pop()) if (!con[method]) con[method] = dummy;\n // Using `this` for web workers & supports Browserify / Webpack.\n})(typeof window === 'undefined' ? this : window);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/console-polyfill/index.js\n// module id = 13\n// module chunks = 0","'use strict';\n\n// This detection.js module is used to encapsulate any ugly browser/feature\n// detection we may need to do.\n\n// Figure out which version of IE we're using, if any.\n// This is gleaned from http://stackoverflow.com/questions/5574842/best-way-to-check-for-ie-less-than-9-in-javascript-without-library\n// Will return an integer on IE (i.e. 8)\n// Will return undefined otherwise\nfunction getIEVersion() {\n\tvar undef;\n\tif (!document) {\n\t\treturn undef;\n\t}\n\n var v = 3,\n div = document.createElement('div'),\n all = div.getElementsByTagName('i');\n\n while (\n div.innerHTML = '',\n all[0]\n );\n\n return v > 4 ? v : undef;\n}\n\nvar Detection = {\n ieVersion: getIEVersion\n};\n\nmodule.exports = Detection;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/detection.js\n// module id = 14\n// module chunks = 0","'use strict';\n\nfunction captureUncaughtExceptions(window, handler, shim) {\n if (!window) { return; }\n var oldOnError;\n\n if (typeof handler._rollbarOldOnError === 'function') {\n oldOnError = handler._rollbarOldOnError;\n } else if (window.onerror && !window.onerror.belongsToShim) {\n oldOnError = window.onerror;\n handler._rollbarOldOnError = oldOnError;\n }\n\n var fn = function() {\n var args = Array.prototype.slice.call(arguments, 0);\n _rollbarWindowOnError(window, handler, oldOnError, args);\n };\n fn.belongsToShim = shim;\n window.onerror = fn;\n}\n\nfunction _rollbarWindowOnError(window, r, old, args) {\n if (window._rollbarWrappedError) {\n if (!args[4]) {\n args[4] = window._rollbarWrappedError;\n }\n if (!args[5]) {\n args[5] = window._rollbarWrappedError._rollbarContext;\n }\n window._rollbarWrappedError = null;\n }\n\n r.handleUncaughtException.apply(r, args);\n if (old) {\n old.apply(window, args);\n }\n}\n\nfunction captureUnhandledRejections(window, handler, shim) {\n if (!window) { return; }\n\n if (typeof window._rollbarURH === 'function' && window._rollbarURH.belongsToShim) {\n window.removeEventListener('unhandledrejection', window._rollbarURH);\n }\n\n var rejectionHandler = function (evt) {\n var reason, promise, detail;\n try {\n reason = evt.reason;\n } catch (e) {\n reason = undefined;\n }\n try {\n promise = evt.promise;\n } catch (e) {\n promise = '[unhandledrejection] error getting `promise` from event';\n }\n try {\n detail = evt.detail;\n if (!reason && detail) {\n reason = detail.reason;\n promise = detail.promise;\n }\n } catch (e) {\n detail = '[unhandledrejection] error getting `detail` from event';\n }\n if (!reason) {\n reason = '[unhandledrejection] error getting `reason` from event';\n }\n\n if (handler && handler.handleUnhandledRejection) {\n handler.handleUnhandledRejection(reason, promise);\n }\n };\n rejectionHandler.belongsToShim = shim;\n window._rollbarURH = rejectionHandler;\n window.addEventListener('unhandledrejection', rejectionHandler);\n}\n\nfunction wrapGlobals(window, handler, shim) {\n if (!window) { return; }\n // Adapted from https://github.com/bugsnag/bugsnag-js\n var globals = 'EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload'.split(',');\n var i, global;\n for (i = 0; i < globals.length; ++i) {\n global = globals[i];\n\n if (window[global] && window[global].prototype) {\n _extendListenerPrototype(handler, window[global].prototype, shim);\n }\n }\n}\n\nfunction _extendListenerPrototype(handler, prototype, shim) {\n if (prototype.hasOwnProperty && prototype.hasOwnProperty('addEventListener')) {\n var oldAddEventListener = prototype.addEventListener;\n while (oldAddEventListener._rollbarOldAdd && oldAddEventListener.belongsToShim) {\n oldAddEventListener = oldAddEventListener._rollbarOldAdd;\n }\n var addFn = function(event, callback, bubble) {\n oldAddEventListener.call(this, event, handler.wrap(callback), bubble);\n };\n addFn._rollbarOldAdd = oldAddEventListener;\n addFn.belongsToShim = shim;\n prototype.addEventListener = addFn;\n\n var oldRemoveEventListener = prototype.removeEventListener;\n while (oldRemoveEventListener._rollbarOldRemove && oldRemoveEventListener.belongsToShim) {\n oldRemoveEventListener = oldRemoveEventListener._rollbarOldRemove;\n }\n var removeFn = function(event, callback, bubble) {\n oldRemoveEventListener.call(this, event, callback && callback._rollbar_wrapped || callback, bubble);\n };\n removeFn._rollbarOldRemove = oldRemoveEventListener;\n removeFn.belongsToShim = shim;\n prototype.removeEventListener = removeFn;\n }\n}\n\nmodule.exports = {\n captureUncaughtExceptions: captureUncaughtExceptions,\n captureUnhandledRejections: captureUnhandledRejections,\n wrapGlobals: wrapGlobals\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/globalSetup.js\n// module id = 15\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar logger = require('./logger');\n\n/*\n * accessToken may be embedded in payload but that should not\n * be assumed\n *\n * options: {\n * hostname\n * protocol\n * path\n * port\n * method\n * }\n *\n * params is an object containing key/value pairs. These\n * will be appended to the path as 'key=value&key=value'\n *\n * payload is an unserialized object\n */\n\nfunction get(accessToken, options, params, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n _.addParamsAndAccessTokenToPath(accessToken, options, params);\n\n var method = 'GET';\n var url = _.formatUrl(options);\n _makeRequest(accessToken, url, method, null, callback, requestFactory);\n}\n\nfunction post(accessToken, options, payload, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!payload) {\n return callback(new Error('Cannot send empty request'));\n }\n\n var stringifyResult = _.stringify(payload);\n if (stringifyResult.error) {\n return callback(stringifyResult.error);\n }\n\n var writeData = stringifyResult.value;\n var method = 'POST';\n var url = _.formatUrl(options);\n _makeRequest(accessToken, url, method, writeData, callback, requestFactory);\n}\n\nfunction _makeRequest(accessToken, url, method, data, callback, requestFactory) {\n var request;\n if (requestFactory) {\n request = requestFactory();\n } else {\n request = _createXMLHTTPObject();\n }\n if (!request) {\n // Give up, no way to send requests\n return callback(new Error('No way to send a request'));\n }\n try {\n try {\n var onreadystatechange = function() {\n try {\n if (onreadystatechange && request.readyState === 4) {\n onreadystatechange = undefined;\n\n var parseResponse = _.jsonParse(request.responseText);\n if (_isSuccess(request)) {\n callback(parseResponse.error, parseResponse.value);\n return;\n } else if (_isNormalFailure(request)) {\n if (request.status === 403) {\n // likely caused by using a server access token\n var message = parseResponse.value && parseResponse.value.message;\n logger.error(message);\n }\n // return valid http status codes\n callback(new Error(String(request.status)));\n } else {\n // IE will return a status 12000+ on some sort of connection failure,\n // so we return a blank error\n // http://msdn.microsoft.com/en-us/library/aa383770%28VS.85%29.aspx\n var msg = 'XHR response had no status code (likely connection failure)';\n callback(_newRetriableError(msg));\n }\n }\n } catch (ex) {\n //jquery source mentions firefox may error out while accessing the\n //request members if there is a network error\n //https://github.com/jquery/jquery/blob/a938d7b1282fc0e5c52502c225ae8f0cef219f0a/src/ajax/xhr.js#L111\n var exc;\n if (ex && ex.stack) {\n exc = ex;\n } else {\n exc = new Error(ex);\n }\n callback(exc);\n }\n };\n\n request.open(method, url, true);\n if (request.setRequestHeader) {\n request.setRequestHeader('Content-Type', 'application/json');\n request.setRequestHeader('X-Rollbar-Access-Token', accessToken);\n }\n request.onreadystatechange = onreadystatechange;\n request.send(data);\n } catch (e1) {\n // Sending using the normal xmlhttprequest object didn't work, try XDomainRequest\n if (typeof XDomainRequest !== 'undefined') {\n\n // Assume we are in a really old browser which has a bunch of limitations:\n // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\n // Extreme paranoia: if we have XDomainRequest then we have a window, but just in case\n if (!window || !window.location) {\n return callback(new Error('No window available during request, unknown environment'));\n }\n\n // If the current page is http, try and send over http\n if (window.location.href.substring(0, 5) === 'http:' && url.substring(0, 5) === 'https') {\n url = 'http' + url.substring(5);\n }\n\n var xdomainrequest = new XDomainRequest();\n xdomainrequest.onprogress = function() {};\n xdomainrequest.ontimeout = function() {\n var msg = 'Request timed out';\n var code = 'ETIMEDOUT';\n callback(_newRetriableError(msg, code));\n };\n xdomainrequest.onerror = function() {\n callback(new Error('Error during request'));\n };\n xdomainrequest.onload = function() {\n var parseResponse = _.jsonParse(xdomainrequest.responseText);\n callback(parseResponse.error, parseResponse.value);\n };\n xdomainrequest.open(method, url, true);\n xdomainrequest.send(data);\n } else {\n callback(new Error('Cannot find a method to transport a request'));\n }\n }\n } catch (e2) {\n callback(e2);\n }\n}\n\nfunction _createXMLHTTPObject() {\n /* global ActiveXObject:false */\n\n var factories = [\n function () {\n return new XMLHttpRequest();\n },\n function () {\n return new ActiveXObject('Msxml2.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Msxml3.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Microsoft.XMLHTTP');\n }\n ];\n var xmlhttp;\n var i;\n var numFactories = factories.length;\n for (i = 0; i < numFactories; i++) {\n /* eslint-disable no-empty */\n try {\n xmlhttp = factories[i]();\n break;\n } catch (e) {\n // pass\n }\n /* eslint-enable no-empty */\n }\n return xmlhttp;\n}\n\nfunction _isSuccess(r) {\n return r && r.status && r.status === 200;\n}\n\nfunction _isNormalFailure(r) {\n return r && _.isType(r.status, 'number') && r.status >= 400 && r.status < 600;\n}\n\nfunction _newRetriableError(message, code) {\n var err = new Error(message);\n err.code = code || 'ENOTFOUND';\n return err;\n}\n\nmodule.exports = {\n get: get,\n post: post\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transport.js\n// module id = 16\n// module chunks = 0","'use strict';\n\n// See https://nodejs.org/docs/latest/api/url.html\nfunction parse(url) {\n var result = {\n protocol: null, auth: null, host: null, path: null,\n hash: null, href: url, hostname: null, port: null,\n pathname: null, search: null, query: null\n };\n\n var i, last;\n i = url.indexOf('//');\n if (i !== -1) {\n result.protocol = url.substring(0,i);\n last = i+2;\n } else {\n last = 0;\n }\n \n i = url.indexOf('@', last);\n if (i !== -1) {\n result.auth = url.substring(last, i);\n last = i+1;\n }\n\n i = url.indexOf('/', last);\n if (i === -1) {\n i = url.indexOf('?', last);\n if (i === -1) {\n i = url.indexOf('#', last);\n if (i === -1) {\n result.host = url.substring(last);\n } else {\n result.host = url.substring(last, i);\n result.hash = url.substring(i);\n }\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n return result;\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n\n i = url.indexOf('#', last);\n if (i === -1) {\n result.path = url.substring(last);\n } else {\n result.path = url.substring(last, i);\n result.hash = url.substring(i);\n }\n\n if (result.path) {\n var pathParts = result.path.split('?');\n result.pathname = pathParts[0];\n result.query = pathParts[1];\n result.search = result.query ? '?' + result.query : null;\n }\n return result;\n}\n\nmodule.exports = {\n parse: parse\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/url.js\n// module id = 17\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar errorParser = require('./errorParser');\nvar logger = require('./logger');\n\nfunction handleItemWithError(item, options, callback) {\n item.data = item.data || {};\n if (item.err) {\n try {\n item.stackInfo = item.err._savedStackTrace || errorParser.parse(item.err);\n } catch (e)\n /* istanbul ignore next */\n {\n logger.error('Error while parsing the error object.', e);\n item.message = item.err.message || item.err.description || item.message || String(item.err);\n delete item.err;\n }\n }\n callback(null, item);\n}\n\nfunction ensureItemHasSomethingToSay(item, options, callback) {\n if (!item.message && !item.stackInfo && !item.custom) {\n callback(new Error('No message, stack info, or custom data'), null);\n }\n callback(null, item);\n}\n\nfunction addBaseInfo(item, options, callback) {\n var environment = (options.payload && options.payload.environment) || options.environment;\n item.data = _.extend(true, {}, item.data, {\n environment: environment,\n level: item.level,\n endpoint: options.endpoint,\n platform: 'browser',\n framework: 'browser-js',\n language: 'javascript',\n server: {},\n uuid: item.uuid,\n notifier: {\n name: 'rollbar-browser-js',\n version: options.version\n }\n });\n callback(null, item);\n}\n\nfunction addRequestInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.location) {\n return callback(null, item);\n }\n var remoteString = '$remote_ip';\n if (!options.captureIp) {\n remoteString = null;\n } else if (options.captureIp !== true) {\n remoteString += '_anonymize';\n }\n _.set(item, 'data.request', {\n url: window.location.href,\n query_string: window.location.search,\n user_ip: remoteString\n });\n callback(null, item);\n };\n}\n\nfunction addClientInfo(window) {\n return function(item, options, callback) {\n if (!window) {\n return callback(null, item);\n }\n var nav = window.navigator || {};\n var scr = window.screen || {};\n _.set(item, 'data.client', {\n runtime_ms: item.timestamp - window._rollbarStartTime,\n timestamp: Math.round(item.timestamp / 1000),\n javascript: {\n browser: nav.userAgent,\n language: nav.language,\n cookie_enabled: nav.cookieEnabled,\n screen: {\n width: scr.width,\n height: scr.height\n }\n }\n });\n callback(null, item);\n };\n}\n\nfunction addPluginInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.navigator) {\n return callback(null, item);\n }\n var plugins = [];\n var navPlugins = window.navigator.plugins || [];\n var cur;\n for (var i=0, l=navPlugins.length; i < l; ++i) {\n cur = navPlugins[i];\n plugins.push({name: cur.name, description: cur.description});\n }\n _.set(item, 'data.client.javascript.plugins', plugins);\n callback(null, item);\n };\n}\n\nfunction addBody(item, options, callback) {\n if (item.stackInfo) {\n addBodyTrace(item, options, callback);\n } else {\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction addBodyMessage(item, options, callback) {\n var message = item.message;\n var custom = item.custom;\n\n if (!message) {\n if (custom) {\n var scrubFields = options.scrubFields;\n var messageResult = _.stringify(_.scrub(custom, scrubFields));\n message = messageResult.error || messageResult.value || '';\n } else {\n message = '';\n }\n }\n var result = {\n body: message\n };\n\n if (custom) {\n result.extra = _.extend(true, {}, custom);\n }\n\n _.set(item, 'data.body', {message: result});\n callback(null, item);\n}\n\n\nfunction addBodyTrace(item, options, callback) {\n var description = item.data.description;\n var stackInfo = item.stackInfo;\n var custom = item.custom;\n\n var guess = errorParser.guessErrorClass(stackInfo.message);\n var className = stackInfo.name || guess[0];\n var message = guess[1];\n var trace = {\n exception: {\n 'class': className,\n message: message\n }\n };\n\n if (description) {\n trace.exception.description = description;\n }\n\n // Transform a TraceKit stackInfo object into a Rollbar trace\n var stack = stackInfo.stack;\n if (stack && stack.length === 0 && item._unhandledStackInfo && item._unhandledStackInfo.stack) {\n stack = item._unhandledStackInfo.stack;\n }\n if (stack) {\n if (stack.length === 0) {\n trace.exception.stack = stackInfo.rawStack;\n trace.exception.raw = String(stackInfo.rawException);\n }\n var stackFrame;\n var frame;\n var code;\n var pre;\n var post;\n var contextLength;\n var i, mid;\n\n trace.frames = [];\n for (i = 0; i < stack.length; ++i) {\n stackFrame = stack[i];\n frame = {\n filename: stackFrame.url ? _.sanitizeUrl(stackFrame.url) : '(unknown)',\n lineno: stackFrame.line || null,\n method: (!stackFrame.func || stackFrame.func === '?') ? '[anonymous]' : stackFrame.func,\n colno: stackFrame.column\n };\n if (frame.method && frame.method.endsWith && frame.method.endsWith('_rollbar_wrapped')) {\n continue;\n }\n\n code = pre = post = null;\n contextLength = stackFrame.context ? stackFrame.context.length : 0;\n if (contextLength) {\n mid = Math.floor(contextLength / 2);\n pre = stackFrame.context.slice(0, mid);\n code = stackFrame.context[mid];\n post = stackFrame.context.slice(mid);\n }\n\n if (code) {\n frame.code = code;\n }\n\n if (pre || post) {\n frame.context = {};\n if (pre && pre.length) {\n frame.context.pre = pre;\n }\n if (post && post.length) {\n frame.context.post = post;\n }\n }\n\n if (stackFrame.args) {\n frame.args = stackFrame.args;\n }\n\n trace.frames.push(frame);\n }\n\n // NOTE(cory): reverse the frames since rollbar.com expects the most recent call last\n trace.frames.reverse();\n\n if (custom) {\n trace.extra = _.extend(true, {}, custom);\n }\n _.set(item, 'data.body', {trace: trace});\n callback(null, item);\n } else {\n item.message = className + ': ' + message;\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction scrubPayload(item, options, callback) {\n var scrubFields = options.scrubFields;\n item.data = _.scrub(item.data, scrubFields);\n callback(null, item);\n}\n\nmodule.exports = {\n handleItemWithError: handleItemWithError,\n ensureItemHasSomethingToSay: ensureItemHasSomethingToSay,\n addBaseInfo: addBaseInfo,\n addRequestInfo: addRequestInfo,\n addClientInfo: addClientInfo,\n addPluginInfo: addPluginInfo,\n addBody: addBody,\n scrubPayload: scrubPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transforms.js\n// module id = 18\n// module chunks = 0","'use strict';\n\nvar ErrorStackParser = require('error-stack-parser');\n\nvar UNKNOWN_FUNCTION = '?';\nvar ERR_CLASS_REGEXP = new RegExp('^(([a-zA-Z0-9-_$ ]*): *)?(Uncaught )?([a-zA-Z0-9-_$ ]*): ');\n\nfunction guessFunctionName() {\n return UNKNOWN_FUNCTION;\n}\n\n\nfunction gatherContext() {\n return null;\n}\n\n\nfunction Frame(stackFrame) {\n var data = {};\n\n data._stackFrame = stackFrame;\n\n data.url = stackFrame.fileName;\n data.line = stackFrame.lineNumber;\n data.func = stackFrame.functionName;\n data.column = stackFrame.columnNumber;\n data.args = stackFrame.args;\n\n data.context = gatherContext(data.url, data.line);\n\n return data;\n}\n\n\nfunction Stack(exception) {\n function getStack() {\n var parserStack = [];\n var exc;\n\n if (!exception.stack) {\n try {\n throw exception;\n } catch (e) {\n exc = e;\n }\n } else {\n exc = exception;\n }\n\n try {\n parserStack = ErrorStackParser.parse(exc);\n } catch(e) {\n parserStack = [];\n }\n\n var stack = [];\n\n for (var i = 0; i < parserStack.length; i++) {\n stack.push(new Frame(parserStack[i]));\n }\n\n return stack;\n }\n\n return {\n stack: getStack(),\n message: exception.message,\n name: exception.name,\n rawStack: exception.stack,\n rawException: exception\n };\n}\n\n\nfunction parse(e) {\n return new Stack(e);\n}\n\n\nfunction guessErrorClass(errMsg) {\n if (!errMsg || !errMsg.match) {\n return ['Unknown error. There was no error message to display.', ''];\n }\n var errClassMatch = errMsg.match(ERR_CLASS_REGEXP);\n var errClass = '(unknown)';\n\n if (errClassMatch) {\n errClass = errClassMatch[errClassMatch.length - 1];\n errMsg = errMsg.replace((errClassMatch[errClassMatch.length - 2] || '') + errClass + ':', '');\n errMsg = errMsg.replace(/(^[\\s]+|[\\s]+$)/g, '');\n }\n return [errClass, errMsg];\n}\n\n\nmodule.exports = {\n guessFunctionName: guessFunctionName,\n guessErrorClass: guessErrorClass,\n gatherContext: gatherContext,\n parse: parse,\n Stack: Stack,\n Frame: Frame\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/errorParser.js\n// module id = 19\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = locationParts[0] === 'eval' ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/error-stack-parser.js\n// module id = 20\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stackframe', [], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.StackFrame = factory();\n }\n}(this, function () {\n 'use strict';\n function _isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n function StackFrame(functionName, args, fileName, lineNumber, columnNumber, source) {\n if (functionName !== undefined) {\n this.setFunctionName(functionName);\n }\n if (args !== undefined) {\n this.setArgs(args);\n }\n if (fileName !== undefined) {\n this.setFileName(fileName);\n }\n if (lineNumber !== undefined) {\n this.setLineNumber(lineNumber);\n }\n if (columnNumber !== undefined) {\n this.setColumnNumber(columnNumber);\n }\n if (source !== undefined) {\n this.setSource(source);\n }\n }\n\n StackFrame.prototype = {\n getFunctionName: function () {\n return this.functionName;\n },\n setFunctionName: function (v) {\n this.functionName = String(v);\n },\n\n getArgs: function () {\n return this.args;\n },\n setArgs: function (v) {\n if (Object.prototype.toString.call(v) !== '[object Array]') {\n throw new TypeError('Args must be an Array');\n }\n this.args = v;\n },\n\n // NOTE: Property name may be misleading as it includes the path,\n // but it somewhat mirrors V8's JavaScriptStackTraceApi\n // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's\n // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14\n getFileName: function () {\n return this.fileName;\n },\n setFileName: function (v) {\n this.fileName = String(v);\n },\n\n getLineNumber: function () {\n return this.lineNumber;\n },\n setLineNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Line Number must be a Number');\n }\n this.lineNumber = Number(v);\n },\n\n getColumnNumber: function () {\n return this.columnNumber;\n },\n setColumnNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Column Number must be a Number');\n }\n this.columnNumber = Number(v);\n },\n\n getSource: function () {\n return this.source;\n },\n setSource: function (v) {\n this.source = String(v);\n },\n\n toString: function() {\n var functionName = this.getFunctionName() || '{anonymous}';\n var args = '(' + (this.getArgs() || []).join(',') + ')';\n var fileName = this.getFileName() ? ('@' + this.getFileName()) : '';\n var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : '';\n var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : '';\n return functionName + args + fileName + lineNumber + columnNumber;\n }\n };\n\n return StackFrame;\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/~/stackframe/stackframe.js\n// module id = 21\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction itemToPayload(item, options, callback) {\n var payloadOptions = options.payload || {};\n if (payloadOptions.body) {\n delete payloadOptions.body;\n }\n\n var data = _.extend(true, {}, item.data, payloadOptions);\n if (item._isUncaught) {\n data._isUncaught = true;\n }\n if (item._originalArgs) {\n data._originalArgs = item._originalArgs;\n }\n callback(null, data);\n}\n\nfunction addTelemetryData(item, options, callback) {\n if (item.telemetryEvents) {\n _.set(item, 'data.body.telemetry', item.telemetryEvents);\n }\n callback(null, item);\n}\n\nfunction addMessageWithError(item, options, callback) {\n if (!item.message) {\n callback(null, item);\n return;\n }\n var tracePath = 'data.body.trace_chain.0';\n var trace = _.get(item, tracePath);\n if (!trace) {\n tracePath = 'data.body.trace';\n trace = _.get(item, tracePath);\n }\n if (trace) {\n if (!(trace.exception && trace.exception.description)) {\n _.set(item, tracePath+'.exception.description', item.message);\n callback(null, item);\n return;\n }\n var extra = _.get(item, tracePath+'.extra') || {};\n var newExtra = _.extend(true, {}, extra, {message: item.message});\n _.set(item, tracePath+'.extra', newExtra);\n }\n callback(null, item);\n}\n\nfunction userTransform(logger) {\n return function(item, options, callback) {\n var newItem = _.extend(true, {}, item);\n try {\n if (_.isFunction(options.transform)) {\n options.transform(newItem.data);\n }\n } catch (e) {\n options.transform = null;\n logger.error('Error while calling custom transform() function. Removing custom transform().', e);\n callback(null, item);\n return;\n }\n callback(null, newItem);\n }\n}\n\nfunction addConfigToPayload(item, options, callback) {\n if (!options.sendConfig) {\n return callback(null, item);\n }\n var configKey = '_rollbarConfig';\n var custom = _.get(item, 'data.custom') || {};\n custom[configKey] = options;\n item.data.custom = custom;\n callback(null, item);\n}\n\nmodule.exports = {\n itemToPayload: itemToPayload,\n addTelemetryData: addTelemetryData,\n addMessageWithError: addMessageWithError,\n userTransform: userTransform,\n addConfigToPayload: addConfigToPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/transforms.js\n// module id = 22\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\n\nfunction checkIgnore(item, settings) {\n if (_.get(settings, 'plugins.jquery.ignoreAjaxErrors')) {\n return !_.get(item, 'body.message.extra.isAjax');\n }\n return true;\n}\n\nmodule.exports = {\n checkIgnore: checkIgnore\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/predicates.js\n// module id = 23\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction checkLevel(item, settings) {\n var level = item.level;\n var levelVal = _.LEVELS[level] || 0;\n var reportLevel = settings.reportLevel;\n var reportLevelVal = _.LEVELS[reportLevel] || 0;\n\n if (levelVal < reportLevelVal) {\n return false;\n }\n return true;\n}\n\nfunction userCheckIgnore(logger) {\n return function(item, settings) {\n var isUncaught = !!item._isUncaught;\n delete item._isUncaught;\n var args = item._originalArgs;\n delete item._originalArgs;\n try {\n if (_.isFunction(settings.onSendCallback)) {\n settings.onSendCallback(isUncaught, args, item);\n }\n } catch (e) {\n settings.onSendCallback = null;\n logger.error('Error while calling onSendCallback, removing', e);\n }\n try {\n if (_.isFunction(settings.checkIgnore) && settings.checkIgnore(isUncaught, args, item)) {\n return false;\n }\n } catch (e) {\n settings.checkIgnore = null;\n logger.error('Error while calling custom checkIgnore(), removing', e);\n }\n return true;\n }\n}\n\nfunction urlIsNotBlacklisted(logger) {\n return function(item, settings) {\n return !urlIsOnAList(item, settings, 'blacklist', logger);\n }\n}\n\nfunction urlIsWhitelisted(logger) {\n return function(item, settings) {\n return urlIsOnAList(item, settings, 'whitelist', logger);\n }\n}\n\nfunction urlIsOnAList(item, settings, whiteOrBlack, logger) {\n // whitelist is the default\n var black = false;\n if (whiteOrBlack === 'blacklist') {\n black = true;\n }\n var list, trace, frame, filename, frameLength, url, listLength, urlRegex;\n var i, j;\n\n try {\n list = black ? settings.hostBlackList : settings.hostWhiteList;\n listLength = list && list.length;\n trace = _.get(item, 'body.trace');\n\n // These two checks are important to come first as they are defaults\n // in case the list is missing or the trace is missing or not well-formed\n if (!list || listLength === 0) {\n return !black;\n }\n if (!trace || !trace.frames || trace.frames.length === 0) {\n return !black;\n }\n\n frameLength = trace.frames.length;\n for (i = 0; i < frameLength; i++) {\n frame = trace.frames[i];\n filename = frame.filename;\n\n if (!_.isType(filename, 'string')) {\n return !black;\n }\n\n for (j = 0; j < listLength; j++) {\n url = list[j];\n urlRegex = new RegExp(url);\n\n if (urlRegex.test(filename)) {\n return true;\n }\n }\n }\n } catch (e)\n /* istanbul ignore next */\n {\n if (black) {\n settings.hostBlackList = null;\n } else {\n settings.hostWhiteList = null;\n }\n var listName = black ? 'hostBlackList' : 'hostWhiteList';\n logger.error('Error while reading your configuration\\'s ' + listName + ' option. Removing custom ' + listName + '.', e);\n return !black;\n }\n return false;\n}\n\nfunction messageIsIgnored(logger) {\n return function(item, settings) {\n var exceptionMessage, i, ignoredMessages,\n len, messageIsIgnored, rIgnoredMessage,\n body, traceMessage, bodyMessage;\n\n try {\n messageIsIgnored = false;\n ignoredMessages = settings.ignoredMessages;\n\n if (!ignoredMessages || ignoredMessages.length === 0) {\n return true;\n }\n\n body = item.body;\n traceMessage = _.get(body, 'trace.exception.message');\n bodyMessage = _.get(body, 'message.body');\n\n exceptionMessage = traceMessage || bodyMessage;\n\n if (!exceptionMessage){\n return true;\n }\n\n len = ignoredMessages.length;\n for (i = 0; i < len; i++) {\n rIgnoredMessage = new RegExp(ignoredMessages[i], 'gi');\n messageIsIgnored = rIgnoredMessage.test(exceptionMessage);\n\n if (messageIsIgnored) {\n break;\n }\n }\n } catch(e)\n /* istanbul ignore next */\n {\n settings.ignoredMessages = null;\n logger.error('Error while reading your configuration\\'s ignoredMessages option. Removing custom ignoredMessages.');\n }\n\n return !messageIsIgnored;\n }\n}\n\nmodule.exports = {\n checkLevel: checkLevel,\n userCheckIgnore: userCheckIgnore,\n urlIsNotBlacklisted: urlIsNotBlacklisted,\n urlIsWhitelisted: urlIsWhitelisted,\n messageIsIgnored: messageIsIgnored\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/predicates.js\n// module id = 24\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar urlparser = require('./url');\nvar domUtil = require('./domUtility');\n\nvar defaults = {\n network: true,\n networkResponseHeaders: false,\n networkResponseBody: false,\n networkRequestBody: false,\n log: true,\n dom: true,\n navigation: true,\n connectivity: true\n};\n\nfunction replace(obj, name, replacement, replacements, type) {\n var orig = obj[name];\n obj[name] = replacement(orig);\n if (replacements) {\n replacements[type].push([obj, name, orig]);\n }\n}\n\nfunction restore(replacements, type) {\n var b;\n while (replacements[type].length) {\n b = replacements[type].shift();\n b[0][b[1]] = b[2];\n }\n}\n\nfunction Instrumenter(options, telemeter, rollbar, _window, _document) {\n var autoInstrument = options.autoInstrument;\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.extend(true, {}, defaults, autoInstrument);\n }\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n this.telemetryScrubber = options.telemetryScrubber;\n this.telemeter = telemeter;\n this.rollbar = rollbar;\n this._window = _window || {};\n this._document = _document || {};\n this.replacements = {\n network: [],\n log: [],\n navigation: [],\n connectivity: []\n };\n this.eventRemovers = {\n dom: [],\n connectivity: []\n };\n\n this._location = this._window.location;\n this._lastHref = this._location && this._location.href;\n}\n\nInstrumenter.prototype.configure = function(options) {\n var autoInstrument = options.autoInstrument;\n var oldSettings = _.extend(true, {}, this.autoInstrument);\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.extend(true, {}, defaults, autoInstrument);\n }\n this.instrument(oldSettings);\n if (options.scrubTelemetryInputs !== undefined) {\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n }\n if (options.telemetryScrubber !== undefined) {\n this.telemetryScrubber = options.telemetryScrubber;\n }\n};\n\nInstrumenter.prototype.instrument = function(oldSettings) {\n if (this.autoInstrument.network && !(oldSettings && oldSettings.network)) {\n this.instrumentNetwork();\n } else if (!this.autoInstrument.network && oldSettings && oldSettings.network) {\n this.deinstrumentNetwork();\n }\n\n if (this.autoInstrument.log && !(oldSettings && oldSettings.log)) {\n this.instrumentConsole();\n } else if (!this.autoInstrument.log && oldSettings && oldSettings.log) {\n this.deinstrumentConsole();\n }\n\n if (this.autoInstrument.dom && !(oldSettings && oldSettings.dom)) {\n this.instrumentDom();\n } else if (!this.autoInstrument.dom && oldSettings && oldSettings.dom) {\n this.deinstrumentDom();\n }\n\n if (this.autoInstrument.navigation && !(oldSettings && oldSettings.navigation)) {\n this.instrumentNavigation();\n } else if (!this.autoInstrument.navigation && oldSettings && oldSettings.navigation) {\n this.deinstrumentNavigation();\n }\n\n if (this.autoInstrument.connectivity && !(oldSettings && oldSettings.connectivity)) {\n this.instrumentConnectivity();\n } else if (!this.autoInstrument.connectivity && oldSettings && oldSettings.connectivity) {\n this.deinstrumentConnectivity();\n }\n};\n\nInstrumenter.prototype.deinstrumentNetwork = function() {\n restore(this.replacements, 'network');\n};\n\nInstrumenter.prototype.instrumentNetwork = function() {\n var self = this;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && _.isFunction(xhr[prop])) {\n replace(xhr, prop, function(orig) {\n return self.rollbar.wrap(orig);\n });\n }\n }\n\n if ('XMLHttpRequest' in this._window) {\n var xhrp = this._window.XMLHttpRequest.prototype;\n replace(xhrp, 'open', function(orig) {\n return function(method, url) {\n if (_.isType(url, 'string')) {\n this.__rollbar_xhr = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'network');\n\n replace(xhrp, 'send', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(data) {\n /* eslint-enable no-unused-vars */\n var xhr = this;\n\n function onreadystatechangeHandler() {\n if (xhr.__rollbar_xhr && (xhr.readyState === 1 || xhr.readyState === 4)) {\n if (xhr.__rollbar_xhr.status_code === null) {\n xhr.__rollbar_xhr.status_code = 0;\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n requestData = data;\n }\n xhr.__rollbar_event = self.telemeter.captureNetwork(xhr.__rollbar_xhr, 'xhr', undefined, requestData);\n }\n if (xhr.readyState === 1) {\n xhr.__rollbar_xhr.start_time_ms = _.now();\n } else {\n xhr.__rollbar_xhr.end_time_ms = _.now();\n\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n var header, i;\n if (headersConfig === true) {\n var allHeaders = xhr.getAllResponseHeaders();\n if (allHeaders) {\n var arr = allHeaders.trim().split(/[\\r\\n]+/);\n var parts, value;\n for (i=0; i < arr.length; i++) {\n parts = arr[i].split(': ');\n header = parts.shift();\n value = parts.join(': ');\n headers[header] = value;\n }\n }\n } else {\n for (i=0; i < headersConfig.length; i++) {\n header = headersConfig[i];\n headers[header] = xhr.getResponseHeader(header);\n }\n }\n } catch (e) {\n /* we ignore the errors here that could come from different\n * browser issues with the xhr methods */\n }\n }\n var body = null;\n if (self.autoInstrument.networkResponseBody) {\n try {\n body = xhr.responseText;\n } catch (e) {\n /* ignore errors from reading responseText */\n }\n }\n var response = null;\n if (body || headers) {\n response = {};\n if (body) {\n response.body = body;\n }\n if (headers) {\n response.headers = headers;\n }\n }\n if (response) {\n xhr.__rollbar_xhr.response = response;\n }\n }\n try {\n var code = xhr.status;\n code = code === 1223 ? 204 : code;\n xhr.__rollbar_xhr.status_code = code;\n xhr.__rollbar_event.level = self.telemeter.levelFromStatus(code);\n } catch (e) {\n /* ignore possible exception from xhr.status */\n }\n }\n }\n\n wrapProp('onload', xhr);\n wrapProp('onerror', xhr);\n wrapProp('onprogress', xhr);\n\n if ('onreadystatechange' in xhr && _.isFunction(xhr.onreadystatechange)) {\n replace(xhr, 'onreadystatechange', function(orig) {\n return self.rollbar.wrap(orig, undefined, onreadystatechangeHandler);\n });\n } else {\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n return orig.apply(this, arguments);\n }\n }, this.replacements, 'network');\n }\n\n if ('fetch' in this._window) {\n replace(this._window, 'fetch', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(fn, t) {\n /* eslint-enable no-unused-vars */\n var args = new Array(arguments.length);\n for (var i=0, len=args.length; i < len; i++) {\n args[i] = arguments[i];\n }\n var input = args[0];\n var method = 'GET';\n var url;\n if (_.isType(input, 'string')) {\n url = input;\n } else if (input) {\n url = input.url;\n if (input.method) {\n method = input.method;\n }\n }\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n var metadata = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n if (args[1] && args[1].body) {\n requestData = args[1].body;\n } else if (args[0] && !_.isType(args[0], 'string') && args[0].body) {\n requestData = args[0].body;\n }\n }\n self.telemeter.captureNetwork(metadata, 'fetch', undefined, requestData);\n return orig.apply(this, args).then(function (resp) {\n metadata.end_time_ms = _.now();\n metadata.status_code = resp.status;\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n if (headersConfig === true) {\n // This is unsupported in IE so we can't do it\n /*\n var allHeaders = resp.headers.entries();\n for (var pair of allHeaders) {\n headers[pair[0]] = pair[1];\n }\n */\n } else {\n for (var i=0; i < headersConfig.length; i++) {\n var header = headersConfig[i];\n headers[header] = resp.headers.get(header);\n }\n }\n } catch (e) {\n /* ignore probable IE errors */\n }\n }\n var response = null;\n if (headers) {\n response = {\n headers: headers\n };\n }\n if (response) {\n metadata.response = response;\n }\n return resp;\n });\n };\n }, this.replacements, 'network');\n }\n};\n\nInstrumenter.prototype.deinstrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n var b;\n while (this.replacements['log'].length) {\n b = this.replacements['log'].shift();\n this._window.console[b[0]] = b[1];\n }\n};\n\nInstrumenter.prototype.instrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n\n var self = this;\n var c = this._window.console;\n\n function wrapConsole(method) {\n var orig = c[method];\n var origConsole = c;\n var level = method === 'warn' ? 'warning' : method;\n c[method] = function() {\n var args = Array.prototype.slice.call(arguments);\n var message = _.formatArgsAsString(args);\n self.telemeter.captureLog(message, level);\n if (orig) {\n Function.prototype.apply.call(orig, origConsole, args);\n }\n };\n self.replacements['log'].push([method, orig]);\n }\n var methods = ['debug','info','warn','error','log'];\n for (var i=0, len=methods.length; i < len; i++) {\n wrapConsole(methods[i]);\n }\n};\n\nInstrumenter.prototype.deinstrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n this.removeListeners('dom');\n};\n\nInstrumenter.prototype.instrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n var clickHandler = this.handleClick.bind(this);\n var blurHandler = this.handleBlur.bind(this);\n this.addListener('dom', this._window, 'click', 'onclick', clickHandler, true);\n this.addListener('dom', this._window, 'blur', 'onfocusout', blurHandler, true);\n};\n\nInstrumenter.prototype.handleClick = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n var hasTag = e && e.tagName;\n var anchorOrButton = domUtil.isDescribedElement(e, 'a') || domUtil.isDescribedElement(e, 'button');\n if (hasTag && (anchorOrButton || domUtil.isDescribedElement(e, 'input', ['button', 'submit']))) {\n this.captureDomEvent('click', e);\n } else if (domUtil.isDescribedElement(e, 'input', ['checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value, e.checked);\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleBlur = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n if (e && e.tagName) {\n if (domUtil.isDescribedElement(e, 'textarea')) {\n this.captureDomEvent('input', e, e.value);\n } else if (domUtil.isDescribedElement(e, 'select') && e.options && e.options.length) {\n this.handleSelectInputChanged(e);\n } else if (domUtil.isDescribedElement(e, 'input') && !domUtil.isDescribedElement(e, 'input', ['button', 'submit', 'hidden', 'checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value);\n }\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleSelectInputChanged = function(elem) {\n if (elem.multiple) {\n for (var i = 0; i < elem.options.length; i++) {\n if (elem.options[i].selected) {\n this.captureDomEvent('input', elem, elem.options[i].value);\n }\n }\n } else if (elem.selectedIndex >= 0 && elem.options[elem.selectedIndex]) {\n this.captureDomEvent('input', elem, elem.options[elem.selectedIndex].value);\n }\n};\n\nInstrumenter.prototype.captureDomEvent = function(subtype, element, value, isChecked) {\n if (value !== undefined) {\n if (this.scrubTelemetryInputs || (domUtil.getElementType(element) === 'password')) {\n value = '[scrubbed]';\n } else if (this.telemetryScrubber) {\n var description = domUtil.describeElement(element);\n if (this.telemetryScrubber(description)) {\n value = '[scrubbed]';\n }\n }\n }\n var elementString = domUtil.elementArrayToString(domUtil.treeToArray(element));\n this.telemeter.captureDom(subtype, elementString, value, isChecked);\n};\n\nInstrumenter.prototype.deinstrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n restore(this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.instrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n var self = this;\n replace(this._window, 'onpopstate', function(orig) {\n return function() {\n var current = self._location.href;\n self.handleUrlChange(self._lastHref, current);\n if (orig) {\n orig.apply(this, arguments);\n }\n };\n }, this.replacements, 'navigation');\n\n replace(this._window.history, 'pushState', function(orig) {\n return function() {\n var url = arguments.length > 2 ? arguments[2] : undefined;\n if (url) {\n self.handleUrlChange(self._lastHref, url + '');\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.handleUrlChange = function(from, to) {\n var parsedHref = urlparser.parse(this._location.href);\n var parsedTo = urlparser.parse(to);\n var parsedFrom = urlparser.parse(from);\n this._lastHref = to;\n if (parsedHref.protocol === parsedTo.protocol && parsedHref.host === parsedTo.host) {\n to = parsedTo.path + (parsedTo.hash || '');\n }\n if (parsedHref.protocol === parsedFrom.protocol && parsedHref.host === parsedFrom.host) {\n from = parsedFrom.path + (parsedFrom.hash || '');\n }\n this.telemeter.captureNavigation(from, to);\n};\n\nInstrumenter.prototype.deinstrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.removeListeners('connectivity');\n } else {\n restore(this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.instrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.addListener('connectivity', this._window, 'online', undefined, function() {\n this.telemeter.captureConnectivityChange('online');\n }.bind(this), true);\n this.addListener('connectivity', this._window, 'offline', undefined, function() {\n this.telemeter.captureConnectivityChange('offline');\n }.bind(this), true);\n } else {\n var self = this;\n replace(this._document.body, 'ononline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('online');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n replace(this._document.body, 'onoffline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('offline');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.addListener = function(section, obj, type, altType, handler, capture) {\n if (obj.addEventListener) {\n obj.addEventListener(type, handler, capture);\n this.eventRemovers[section].push(function() {\n obj.removeEventListener(type, handler, capture);\n });\n } else if (altType) {\n obj.attachEvent(altType, handler);\n this.eventRemovers[section].push(function() {\n obj.detachEvent(altType, handler);\n });\n }\n};\n\nInstrumenter.prototype.removeListeners = function(section) {\n var r;\n while (this.eventRemovers[section].length) {\n r = this.eventRemovers[section].shift();\n r();\n }\n};\n\nmodule.exports = Instrumenter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/telemetry.js\n// module id = 25\n// module chunks = 0","'use strict';\n\nfunction getElementType(e) {\n return (e.getAttribute('type') || '').toLowerCase();\n}\n\nfunction isDescribedElement(element, type, subtypes) {\n if (element.tagName.toLowerCase() !== type.toLowerCase()) {\n return false;\n }\n if (!subtypes) {\n return true;\n }\n element = getElementType(element);\n for (var i = 0; i < subtypes.length; i++) {\n if (subtypes[i] === element) {\n return true;\n }\n }\n return false;\n}\n\nfunction getElementFromEvent(evt, doc) {\n if (evt.target) {\n return evt.target;\n }\n if (doc && doc.elementFromPoint) {\n return doc.elementFromPoint(evt.clientX, evt.clientY);\n }\n return undefined;\n}\n\nfunction treeToArray(elem) {\n var MAX_HEIGHT = 5;\n var out = [];\n var nextDescription;\n for (var height = 0; elem && height < MAX_HEIGHT; height++) {\n nextDescription = describeElement(elem);\n if (nextDescription.tagName === 'html') {\n break;\n }\n out.unshift(nextDescription);\n elem = elem.parentNode;\n }\n return out;\n}\n\nfunction elementArrayToString(a) {\n var MAX_LENGTH = 80;\n var separator = ' > ', separatorLength = separator.length;\n var out = [], len = 0, nextStr, totalLength;\n\n for (var i = a.length - 1; i >= 0; i--) {\n nextStr = descriptionToString(a[i]);\n totalLength = len + (out.length * separatorLength) + nextStr.length;\n if (i < a.length - 1 && totalLength >= MAX_LENGTH + 3) {\n out.unshift('...');\n break;\n }\n out.unshift(nextStr);\n len += nextStr.length;\n }\n return out.join(separator);\n}\n\nfunction descriptionToString(desc) {\n if (!desc || !desc.tagName) {\n return '';\n }\n var out = [desc.tagName];\n if (desc.id) {\n out.push('#' + desc.id);\n }\n if (desc.classes) {\n out.push('.' + desc.classes.join('.'));\n }\n for (var i = 0; i < desc.attributes.length; i++) {\n out.push('[' + desc.attributes[i].key + '=\"' + desc.attributes[i].value + '\"]');\n }\n\n return out.join('');\n}\n\n/**\n * Input: a dom element\n * Output: null if tagName is falsey or input is falsey, else\n * {\n * tagName: String,\n * id: String | undefined,\n * classes: [String] | undefined,\n * attributes: [\n * {\n * key: OneOf(type, name, title, alt),\n * value: String\n * }\n * ]\n * }\n */\nfunction describeElement(elem) {\n if (!elem || !elem.tagName) {\n return null;\n }\n var out = {}, className, key, attr, i;\n out.tagName = elem.tagName.toLowerCase();\n if (elem.id) {\n out.id = elem.id;\n }\n className = elem.className;\n if (className && (typeof className === 'string')) {\n out.classes = className.split(/\\s+/);\n }\n var attributes = ['type', 'name', 'title', 'alt'];\n out.attributes = [];\n for (i = 0; i < attributes.length; i++) {\n key = attributes[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.attributes.push({key: key, value: attr});\n }\n }\n return out;\n}\n\nmodule.exports = {\n describeElement: describeElement,\n descriptionToString: descriptionToString,\n elementArrayToString: elementArrayToString,\n treeToArray: treeToArray,\n getElementFromEvent: getElementFromEvent,\n isDescribedElement: isDescribedElement,\n getElementType: getElementType\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/domUtility.js\n// module id = 26\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/rollbar.min.js b/dist/rollbar.min.js index 8a452711c..5af06dc9d 100644 --- a/dist/rollbar.min.js +++ b/dist/rollbar.min.js @@ -1,2 +1,2 @@ -!function(t){function e(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return t[r].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}var n={};return e.m=t,e.c=n,e.p="",e(0)}([function(t,e,n){"use strict";var r=n(1),o="undefined"!=typeof window&&window._rollbarConfig,i=o&&o.globalAlias||"Rollbar",a="undefined"!=typeof window&&window[i]&&"function"==typeof window[i].shimId&&void 0!==window[i].shimId();if("undefined"==typeof window||window._rollbarStartTime||(window._rollbarStartTime=(new Date).getTime()),!a&&o){var s=new r(o);window[i]=s}else"undefined"!=typeof window?(window.rollbar=r,window._rollbarDidLoad=!0):"undefined"!=typeof self&&(self.rollbar=r,self._rollbarDidLoad=!0);t.exports=r},function(t,e,n){"use strict";function r(t,e){this.options=c.extend(!0,x,t);var n=new l(this.options,h,d);this.client=e||new u(this.options,n,p,"browser");var r="undefined"!=typeof window&&window||"undefined"!=typeof self&&self,o="undefined"!=typeof document&&document;i(this.client.notifier),a(this.client.queue),(this.options.captureUncaught||this.options.handleUncaughtExceptions)&&(f.captureUncaughtExceptions(r,this),f.wrapGlobals(r,this)),(this.options.captureUnhandledRejections||this.options.handleUnhandledRejections)&&f.captureUnhandledRejections(r,this),this.instrumenter=new w(this.options,this.client.telemeter,this,r,o),this.instrumenter.instrument()}function o(t){var e="Rollbar is not initialized";p.error(e),t&&t(new Error(e))}function i(t){t.addTransform(m.handleItemWithError).addTransform(m.ensureItemHasSomethingToSay).addTransform(m.addBaseInfo).addTransform(m.addRequestInfo(window)).addTransform(m.addClientInfo(window)).addTransform(m.addPluginInfo(window)).addTransform(m.addBody).addTransform(g.addMessageWithError).addTransform(g.addTelemetryData).addTransform(g.addConfigToPayload).addTransform(m.scrubPayload).addTransform(g.userTransform(p)).addTransform(g.itemToPayload)}function a(t){t.addPredicate(y.checkLevel).addPredicate(v.checkIgnore).addPredicate(y.userCheckIgnore(p)).addPredicate(y.urlIsNotBlacklisted(p)).addPredicate(y.urlIsWhitelisted(p)).addPredicate(y.messageIsIgnored(p))}function s(t){for(var e=0,n=t.length;e=1&&n>e}function o(t,e,n,r,o,a,s){var u=null;return n&&(n=new Error(n)),n||r||(u=i(t,e,o,a,s)),{error:n,shouldSend:r,payload:u}}function i(t,e,n,r,o){var i,a=e.environment||e.payload&&e.payload.environment;i=o?"item per minute limit reached, ignoring errors until timeout":"maxItems has been hit, ignoring errors until reset.";var s={body:{message:{body:i,extra:{maxItems:n,itemsPerMinute:r}}},language:"javascript",environment:a,notifier:{version:e.notifier&&e.notifier.version||e.version}};return"browser"===t?(s.platform="browser",s.framework="browser-js",s.notifier.name="rollbar-browser-js"):"server"===t?(s.framework=e.framework||"node-js",s.notifier.name=e.notifier.name):"react-native"===t&&(s.framework=e.framework||"react-native",s.notifier.name=e.notifier.name),s}n.globalSettings={startTime:(new Date).getTime(),maxItems:void 0,itemsPerMinute:void 0},n.prototype.configureGlobal=function(t){void 0!==t.startTime&&(n.globalSettings.startTime=t.startTime),void 0!==t.maxItems&&(n.globalSettings.maxItems=t.maxItems),void 0!==t.itemsPerMinute&&(n.globalSettings.itemsPerMinute=t.itemsPerMinute)},n.prototype.shouldSend=function(t,e){e=e||(new Date).getTime(),e-this.startTime>=6e4&&(this.startTime=e,this.perMinCounter=0);var i=n.globalSettings.maxItems,a=n.globalSettings.itemsPerMinute;if(r(t,i,this.counter))return o(this.platform,this.platformOptions,i+" max items reached",!1);if(r(t,a,this.perMinCounter))return o(this.platform,this.platformOptions,a+" items per minute reached",!1);this.counter++,this.perMinCounter++;var s=!r(t,i,this.counter),u=s;return s=s&&!r(t,a,this.perMinCounter),o(this.platform,this.platformOptions,null,s,i,a,u)},n.prototype.setPlatformOptions=function(t,e){this.platform=t,this.platformOptions=e},t.exports=n},function(t,e,n){"use strict";function r(t,e,n,r){this.rateLimiter=t,this.api=e,this.logger=n,this.options=r,this.predicates=[],this.pendingItems=[],this.pendingRequests=[],this.retryQueue=[],this.retryHandle=null,this.waitCallback=null,this.waitIntervalID=null}var o=n(5);r.prototype.configure=function(t){this.api&&this.api.configure(t);var e=this.options;return this.options=o.extend(!0,{},e,t),this},r.prototype.addPredicate=function(t){return o.isFunction(t)&&this.predicates.push(t),this},r.prototype.addPendingItem=function(t){this.pendingItems.push(t)},r.prototype.removePendingItem=function(t){var e=this.pendingItems.indexOf(t);e!==-1&&this.pendingItems.splice(e,1)},r.prototype.addItem=function(t,e,n,r){e&&o.isFunction(e)||(e=function(){});var i=this._applyPredicates(t);if(i.stop)return this.removePendingItem(r),void e(i.err);this._maybeLog(t,n),this.removePendingItem(r),this.pendingRequests.push(t);try{this._makeApiRequest(t,function(n,r){this._dequeuePendingRequest(t),e(n,r)}.bind(this))}catch(n){this._dequeuePendingRequest(t),e(n)}},r.prototype.wait=function(t){o.isFunction(t)&&(this.waitCallback=t,this._maybeCallWait()||(this.waitIntervalID&&(this.waitIntervalID=clearInterval(this.waitIntervalID)),this.waitIntervalID=setInterval(function(){this._maybeCallWait()}.bind(this),500)))},r.prototype._applyPredicates=function(t){for(var e=null,n=0,r=this.predicates.length;ns)?(a=e.path,e.path=a.substring(0,s)+i+"&"+a.substring(s+1)):u!==-1?(a=e.path,e.path=a.substring(0,u)+i+a.substring(u)):e.path=e.path+i}function y(t,e){if(e=e||t.protocol,!e&&t.port&&(80===t.port?e="http:":443===t.port&&(e="https:")),e=e||"https:",!t.hostname)return null;var n=e+"//"+t.hostname;return t.port&&(n=n+":"+t.port),t.path&&(n+=t.path),n}function b(t,e){var n,r;try{n=R.stringify(t)}catch(o){if(e&&a(e))try{n=e(t)}catch(t){r=t}else r=o}return{error:r,value:n}}function w(t){var e,n;try{e=R.parse(t)}catch(t){n=t}return{error:n,value:e}}function _(t,e,n,r,o,i,a,s){var u={url:e||"",line:n,column:r};u.func=s.guessFunctionName(u.url,u.line),u.context=s.gatherContext(u.url,u.line);var c=document&&document.location&&document.location.href,l=window&&window.navigator&&window.navigator.userAgent;return{mode:i,message:o?String(o):t||a,url:c,stack:[u],useragent:l}}function x(t,e){return function(n,r){try{e(n,r)}catch(e){t.error(e)}}}function k(t,e,n,r,o){for(var a,s,u,c,l,p,f=[],h=0,m=t.length;h0&&(u=C(!0,{},u),u.extraArgs=f);var b={message:a,err:s,custom:u,timestamp:N(),callback:c,uuid:d()};return u&&void 0!==u.level&&(b.level=u.level,delete u.level),r&&l&&(b.request=l),o&&(b.lambdaContext=o),b._originalArgs=t,b}function E(t,e){if(t){var n=e.split("."),r=t;try{for(var o=0,i=n.length;o500&&(r=r.substr(0,500)+"...")):"undefined"==typeof r&&(r="undefined"),o.push(r);return o.join(" ")}function N(){return Date.now?+Date.now():+new Date}var C=n(6),R={},A=!1;r();var j={debug:0,info:1,warning:2,error:3,critical:4},q={strictMode:!1,key:["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],q:{name:"queryKey",parser:/(?:^|&)([^&=]*)=?([^&]*)/g},parser:{strict:/^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,loose:/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/}};t.exports={isType:o,typeName:i,isFunction:a,isNativeFunction:s,isIterable:l,isError:p,extend:C,traverse:f,redact:h,uuid4:d,LEVELS:j,sanitizeUrl:m,addParamsAndAccessTokenToPath:v,formatUrl:y,stringify:b,jsonParse:w,makeUnhandledStackInfo:_,createItem:k,get:E,set:I,scrub:T,formatArgsAsString:L,now:N}},function(t,e){"use strict";var n=Object.prototype.hasOwnProperty,r=Object.prototype.toString,o=function(t){return"function"==typeof Array.isArray?Array.isArray(t):"[object Array]"===r.call(t)},i=function(t){if(!t||"[object Object]"!==r.call(t))return!1;var e=n.call(t,"constructor"),o=t.constructor&&t.constructor.prototype&&n.call(t.constructor.prototype,"isPrototypeOf");if(t.constructor&&!e&&!o)return!1;var i;for(i in t);return"undefined"==typeof i||n.call(t,i)};t.exports=function t(){var e,n,r,a,s,u,c=arguments[0],l=1,p=arguments.length,f=!1;for("boolean"==typeof c?(f=c,c=arguments[1]||{},l=2):("object"!=typeof c&&"function"!=typeof c||null==c)&&(c={});lr&&(o=this.maxQueueSize-r),this.maxQueueSize=r,this.queue.splice(0,o)},r.prototype.copyEvents=function(){return Array.prototype.slice.call(this.queue,0)},r.prototype.capture=function(t,e,n,r,a){var s={level:o(t,n),type:t,timestamp_ms:a||i.now(),body:e,source:"client"};r&&(s.uuid=r);try{if(i.isFunction(this.options.filterTelemetry)&&this.options.filterTelemetry(s))return!1}catch(t){this.options.filterTelemetry=null}return this.push(s),s},r.prototype.captureEvent=function(t,e,n){return this.capture("manual",t,e,n)},r.prototype.captureError=function(t,e,n,r){var o={message:t.message||String(t)};return t.stack&&(o.stack=t.stack),this.capture("error",o,e,n,r)},r.prototype.captureLog=function(t,e,n,r){return this.capture("log",{message:t},e,n,r)},r.prototype.captureNetwork=function(t,e,n,r){e=e||"xhr",t.subtype=t.subtype||e,r&&(t.request=r);var o=this.levelFromStatus(t.status_code);return this.capture("network",t,o,n)},r.prototype.levelFromStatus=function(t){return t>=200&&t<400?"info":0===t||t>=400?"error":"info"},r.prototype.captureDom=function(t,e,n,r,o){var i={subtype:t,element:e};return void 0!==n&&(i.value=n),void 0!==r&&(i.checked=r),this.capture("dom",i,"info",o)},r.prototype.captureNavigation=function(t,e,n){return this.capture("navigation",{from:t,to:e},"info",n)},r.prototype.captureDomContentLoaded=function(t){return this.capture("navigation",{subtype:"DOMContentLoaded"},"info",void 0,t&&t.getTime())},r.prototype.captureLoad=function(t){return this.capture("navigation",{subtype:"load"},"info",void 0,t&&t.getTime())},r.prototype.captureConnectivityChange=function(t,e){return this.captureNetwork({change:t},"connectivity",e)},r.prototype._captureRollbarItem=function(t){if(this.options.includeItemsInTelemetry)return t.err?this.captureError(t.err,t.level,t.uuid,t.timestamp):t.message?this.captureLog(t.message,t.level,t.uuid,t.timestamp):t.custom?this.capture("log",t.custom,t.level,t.uuid,t.timestamp):void 0},r.prototype.push=function(t){this.queue.push(t),this.queue.length>this.maxQueueSize&&this.queue.shift()},t.exports=r},function(t,e,n){"use strict";function r(t,e,n,r){this.options=t,this.transport=e,this.url=n,this.jsonBackup=r,this.accessToken=t.accessToken,this.transportOptions=o(t,n)}function o(t,e){return a.getTransportFromOptions(t,s,e)}var i=n(5),a=n(11),s={hostname:"api.rollbar.com",path:"/api/1/item/",search:null,version:"1",protocol:"https:",port:443};r.prototype.postItem=function(t,e){var n=a.transportOptions(this.transportOptions,"POST"),r=a.buildPayload(this.accessToken,t,this.jsonBackup);this.transport.post(this.accessToken,n,r,e)},r.prototype.configure=function(t){var e=this.oldOptions;return this.options=i.extend(!0,{},e,t),this.transportOptions=o(this.options,this.url),void 0!==this.options.accessToken&&(this.accessToken=this.options.accessToken),this},t.exports=r},function(t,e,n){"use strict";function r(t,e,n){if(!s.isType(e.context,"string")){var r=s.stringify(e.context,n);r.error?e.context="Error: could not serialize 'context'":e.context=r.value||"",e.context.length>255&&(e.context=e.context.substr(0,255))}return{access_token:t,data:e}}function o(t,e,n){var r=e.hostname,o=e.protocol,i=e.port,a=e.path,s=e.search,u=t.proxy;if(t.endpoint){var c=n.parse(t.endpoint);r=c.hostname,o=c.protocol,i=c.port,a=c.pathname,s=c.search}return{hostname:r,protocol:o,port:i,path:a,search:s,proxy:u}}function i(t,e){var n=t.protocol||"https:",r=t.port||("http:"===n?80:"https:"===n?443:void 0),o=t.hostname,i=t.path;return t.search&&(i+=t.search),t.proxy&&(i=n+"//"+o+i,o=t.proxy.host||t.proxy.hostname,r=t.proxy.port,n=t.proxy.protocol||n),{protocol:n,hostname:o,path:i,port:r,method:e}}function a(t,e){var n=/\/$/.test(t),r=/^\//.test(e);return n&&r?e=e.substring(1):n||r||(e="/"+e),t+e}var s=n(5);t.exports={buildPayload:r,getTransportFromOptions:o,transportOptions:i,appendPathToPath:a}},function(t,e,n){"use strict";function r(){var t=Array.prototype.slice.call(arguments,0);t.unshift("Rollbar:"),a.ieVersion()<=8?console.error(s.formatArgsAsString(t)):console.error.apply(console,t)}function o(){var t=Array.prototype.slice.call(arguments,0);t.unshift("Rollbar:"),a.ieVersion()<=8?console.info(s.formatArgsAsString(t)):console.info.apply(console,t)}function i(){var t=Array.prototype.slice.call(arguments,0);t.unshift("Rollbar:"),a.ieVersion()<=8?console.log(s.formatArgsAsString(t)):console.log.apply(console,t)}n(13);var a=n(14),s=n(5);t.exports={error:r,info:o,log:i}},function(t,e){!function(t){"use strict";t.console||(t.console={});for(var e,n,r=t.console,o=function(){},i=["memory"],a="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(",");e=i.pop();)r[e]||(r[e]={});for(;n=a.pop();)r[n]||(r[n]=o)}("undefined"==typeof window?this:window)},function(t,e){"use strict";function n(){var t;if(!document)return t;for(var e=3,n=document.createElement("div"),r=n.getElementsByTagName("i");n.innerHTML="",r[0];);return e>4?e:t}var r={ieVersion:n};t.exports=r},function(t,e){"use strict";function n(t,e,n){if(t){var o;"function"==typeof e._rollbarOldOnError?o=e._rollbarOldOnError:t.onerror&&!t.onerror.belongsToShim&&(o=t.onerror,e._rollbarOldOnError=o);var i=function(){var n=Array.prototype.slice.call(arguments,0);r(t,e,o,n)};i.belongsToShim=n,t.onerror=i}}function r(t,e,n,r){t._rollbarWrappedError&&(r[4]||(r[4]=t._rollbarWrappedError), -r[5]||(r[5]=t._rollbarWrappedError._rollbarContext),t._rollbarWrappedError=null),e.handleUncaughtException.apply(e,r),n&&n.apply(t,r)}function o(t,e,n){if(t){"function"==typeof t._rollbarURH&&t._rollbarURH.belongsToShim&&t.removeEventListener("unhandledrejection",t._rollbarURH);var r=function(t){var n,r,o;try{n=t.reason}catch(t){n=void 0}try{r=t.promise}catch(t){r="[unhandledrejection] error getting `promise` from event"}try{o=t.detail,!n&&o&&(n=o.reason,r=o.promise)}catch(t){o="[unhandledrejection] error getting `detail` from event"}n||(n="[unhandledrejection] error getting `reason` from event"),e&&e.handleUnhandledRejection&&e.handleUnhandledRejection(n,r)};r.belongsToShim=n,t._rollbarURH=r,t.addEventListener("unhandledrejection",r)}}function i(t,e,n){if(t){var r,o,i="EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload".split(",");for(r=0;r=400&&t.status<600}function c(t,e){var n=new Error(t);return n.code=e||"ENOTFOUND",n}var l=n(5),p=n(12);t.exports={get:r,post:o}},function(t,e){"use strict";function n(t){var e,n,r={protocol:null,auth:null,host:null,path:null,hash:null,href:t,hostname:null,port:null,pathname:null,search:null,query:null};if(e=t.indexOf("//"),e!==-1?(r.protocol=t.substring(0,e),n=e+2):n=0,e=t.indexOf("@",n),e!==-1&&(r.auth=t.substring(n,e),n=e+1),e=t.indexOf("/",n),e===-1){if(e=t.indexOf("?",n),e===-1)return e=t.indexOf("#",n),e===-1?r.host=t.substring(n):(r.host=t.substring(n,e),r.hash=t.substring(e)),r.hostname=r.host.split(":")[0],r.port=r.host.split(":")[1],r.port&&(r.port=parseInt(r.port,10)),r;r.host=t.substring(n,e),r.hostname=r.host.split(":")[0],r.port=r.host.split(":")[1],r.port&&(r.port=parseInt(r.port,10)),n=e}else r.host=t.substring(n,e),r.hostname=r.host.split(":")[0],r.port=r.host.split(":")[1],r.port&&(r.port=parseInt(r.port,10)),n=e;if(e=t.indexOf("#",n),e===-1?r.path=t.substring(n):(r.path=t.substring(n,e),r.hash=t.substring(e)),r.path){var o=r.path.split("?");r.pathname=o[0],r.query=o[1],r.search=r.query?"?"+r.query:null}return r}t.exports={parse:n}},function(t,e,n){"use strict";function r(t,e,n){if(t.data=t.data||{},t.err)try{t.stackInfo=t.err._savedStackTrace||d.parse(t.err)}catch(e){m.error("Error while parsing the error object.",e),t.message=t.err.message||t.err.description||t.message||String(t.err),delete t.err}n(null,t)}function o(t,e,n){t.message||t.stackInfo||t.custom||n(new Error("No message, stack info, or custom data"),null),n(null,t)}function i(t,e,n){var r=e.payload&&e.payload.environment||e.environment;t.data=h.extend(!0,{},t.data,{environment:r,level:t.level,endpoint:e.endpoint,platform:"browser",framework:"browser-js",language:"javascript",server:{},uuid:t.uuid,notifier:{name:"rollbar-browser-js",version:e.version}}),n(null,t)}function a(t){return function(e,n,r){return t&&t.location?(h.set(e,"data.request",{url:t.location.href,query_string:t.location.search,user_ip:"$remote_ip"}),void r(null,e)):r(null,e)}}function s(t){return function(e,n,r){if(!t)return r(null,e);var o=t.navigator||{},i=t.screen||{};h.set(e,"data.client",{runtime_ms:e.timestamp-t._rollbarStartTime,timestamp:Math.round(e.timestamp/1e3),javascript:{browser:o.userAgent,language:o.language,cookie_enabled:o.cookieEnabled,screen:{width:i.width,height:i.height}}}),r(null,e)}}function u(t){return function(e,n,r){if(!t||!t.navigator)return r(null,e);for(var o,i=[],a=t.navigator.plugins||[],s=0,u=a.length;s-1&&(e=e.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var n=e.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),r=this.extractLocation(n.pop()),o=n.join(" ")||void 0,i="eval"===r[0]?void 0:r[0];return new t(o,void 0,i,r[1],r[2],e)},this)},parseFFOrSafari:function(r){var o=n(r.stack.split("\n"),function(t){return!t.match(i)},this);return e(o,function(e){if(e.indexOf(" > eval")>-1&&(e=e.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),e.indexOf("@")===-1&&e.indexOf(":")===-1)return new t(e);var n=e.split("@"),r=this.extractLocation(n.pop()),o=n.shift()||void 0;return new t(o,void 0,r[0],r[1],r[2],e)},this)},parseOpera:function(t){return!t.stacktrace||t.message.indexOf("\n")>-1&&t.message.split("\n").length>t.stacktrace.split("\n").length?this.parseOpera9(t):t.stack?this.parseOpera11(t):this.parseOpera10(t)},parseOpera9:function(e){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=e.message.split("\n"),o=[],i=2,a=r.length;i/,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(n=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new t(a,s,o[0],o[1],o[2],e)},this)}}})},function(t,e,n){var r,o,i;!function(n,a){"use strict";o=[],r=a,i="function"==typeof r?r.apply(e,o):r,!(void 0!==i&&(t.exports=i))}(this,function(){"use strict";function t(t){return!isNaN(parseFloat(t))&&isFinite(t)}function e(t,e,n,r,o,i){void 0!==t&&this.setFunctionName(t),void 0!==e&&this.setArgs(e),void 0!==n&&this.setFileName(n),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return e.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(t){this.functionName=String(t)},getArgs:function(){return this.args},setArgs:function(t){if("[object Array]"!==Object.prototype.toString.call(t))throw new TypeError("Args must be an Array");this.args=t},getFileName:function(){return this.fileName},setFileName:function(t){this.fileName=String(t)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(e){if(!t(e))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(e)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(e){if(!t(e))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(e)},getSource:function(){return this.source},setSource:function(t){this.source=String(t)},toString:function(){var e=this.getFunctionName()||"{anonymous}",n="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=t(this.getLineNumber())?":"+this.getLineNumber():"",i=t(this.getColumnNumber())?":"+this.getColumnNumber():"";return e+n+r+o+i}},e})},function(t,e,n){"use strict";function r(t,e,n){var r=e.payload||{};r.body&&delete r.body;var o=u.extend(!0,{},t.data,r);t._isUncaught&&(o._isUncaught=!0),t._originalArgs&&(o._originalArgs=t._originalArgs),n(null,o)}function o(t,e,n){t.telemetryEvents&&u.set(t,"data.body.telemetry",t.telemetryEvents),n(null,t)}function i(t,e,n){if(!t.message)return void n(null,t);var r="data.body.trace_chain.0",o=u.get(t,r);if(o||(r="data.body.trace",o=u.get(t,r)),o){if(!o.exception||!o.exception.description)return u.set(t,r+".exception.description",t.message),void n(null,t);var i=u.get(t,r+".extra")||{},a=u.extend(!0,{},i,{message:t.message});u.set(t,r+".extra",a)}n(null,t)}function a(t){return function(e,n,r){var o=u.extend(!0,{},e);try{u.isFunction(n.transform)&&n.transform(o.data)}catch(o){return n.transform=null,t.error("Error while calling custom transform() function. Removing custom transform().",o),void r(null,e)}r(null,o)}}function s(t,e,n){if(!e.sendConfig)return n(null,t);var r="_rollbarConfig",o=u.get(t,"data.custom")||{};o[r]=e,t.data.custom=o,n(null,t)}var u=n(5);t.exports={itemToPayload:r,addTelemetryData:o,addMessageWithError:i,userTransform:a,addConfigToPayload:s}},function(t,e,n){"use strict";function r(t,e){return!o.get(e,"plugins.jquery.ignoreAjaxErrors")||!o.get(t,"body.message.extra.isAjax")}var o=n(5);t.exports={checkIgnore:r}},function(t,e,n){"use strict";function r(t,e){var n=t.level,r=c.LEVELS[n]||0,o=e.reportLevel,i=c.LEVELS[o]||0;return!(r=0&&t.options[t.selectedIndex]&&this.captureDomEvent("input",t,t.options[t.selectedIndex].value)},i.prototype.captureDomEvent=function(t,e,n,r){if(void 0!==n)if(this.scrubTelemetryInputs||"password"===u.getElementType(e))n="[scrubbed]";else if(this.telemetryScrubber){var o=u.describeElement(e);this.telemetryScrubber(o)&&(n="[scrubbed]")}var i=u.elementArrayToString(u.treeToArray(e));this.telemeter.captureDom(t,i,n,r)},i.prototype.deinstrumentNavigation=function(){var t=this._window.chrome,e=t&&t.app&&t.app.runtime,n=!e&&this._window.history&&this._window.history.pushState;n&&o(this.replacements,"navigation")},i.prototype.instrumentNavigation=function(){var t=this._window.chrome,e=t&&t.app&&t.app.runtime,n=!e&&this._window.history&&this._window.history.pushState;if(n){var o=this;r(this._window,"onpopstate",function(t){return function(){var e=o._location.href;o.handleUrlChange(o._lastHref,e),t&&t.apply(this,arguments)}},this.replacements,"navigation"),r(this._window.history,"pushState",function(t){return function(){var e=arguments.length>2?arguments[2]:void 0;return e&&o.handleUrlChange(o._lastHref,e+""),t.apply(this,arguments)}},this.replacements,"navigation")}},i.prototype.handleUrlChange=function(t,e){var n=s.parse(this._location.href),r=s.parse(e),o=s.parse(t);this._lastHref=e,n.protocol===r.protocol&&n.host===r.host&&(e=r.path+(r.hash||"")),n.protocol===o.protocol&&n.host===o.host&&(t=o.path+(o.hash||"")),this.telemeter.captureNavigation(t,e)},i.prototype.deinstrumentConnectivity=function(){("addEventListener"in this._window||"body"in this._document)&&(this._window.addEventListener?this.removeListeners("connectivity"):o(this.replacements,"connectivity"))},i.prototype.instrumentConnectivity=function(){if("addEventListener"in this._window||"body"in this._document)if(this._window.addEventListener)this.addListener("connectivity",this._window,"online",void 0,function(){this.telemeter.captureConnectivityChange("online")}.bind(this),!0),this.addListener("connectivity",this._window,"offline",void 0,function(){this.telemeter.captureConnectivityChange("offline")}.bind(this),!0);else{var t=this;r(this._document.body,"ononline",function(e){return function(){t.telemeter.captureConnectivityChange("online"),e&&e.apply(this,arguments)}},this.replacements,"connectivity"),r(this._document.body,"onoffline",function(e){return function(){t.telemeter.captureConnectivityChange("offline"),e&&e.apply(this,arguments)}},this.replacements,"connectivity")}},i.prototype.addListener=function(t,e,n,r,o,i){e.addEventListener?(e.addEventListener(n,o,i),this.eventRemovers[t].push(function(){e.removeEventListener(n,o,i)})):r&&(e.attachEvent(r,o),this.eventRemovers[t].push(function(){e.detachEvent(r,o)}))},i.prototype.removeListeners=function(t){for(var e;this.eventRemovers[t].length;)(e=this.eventRemovers[t].shift())()},t.exports=i},function(t,e){"use strict";function n(t){return(t.getAttribute("type")||"").toLowerCase()}function r(t,e,r){if(t.tagName.toLowerCase()!==e.toLowerCase())return!1;if(!r)return!0;t=n(t);for(var o=0;o ",i=o.length,a=[],u=0,c=t.length-1;c>=0;c--){if(e=s(t[c]),n=u+a.length*i+e.length,c=r+3){a.unshift("...");break}a.unshift(e),u+=e.length}return a.join(o)}function s(t){if(!t||!t.tagName)return"";var e=[t.tagName];t.id&&e.push("#"+t.id),t.classes&&e.push("."+t.classes.join("."));for(var n=0;n=1&&n>e}function o(t,e,n,r,o,a,s){var u=null;return n&&(n=new Error(n)),n||r||(u=i(t,e,o,a,s)),{error:n,shouldSend:r,payload:u}}function i(t,e,n,r,o){var i,a=e.environment||e.payload&&e.payload.environment;i=o?"item per minute limit reached, ignoring errors until timeout":"maxItems has been hit, ignoring errors until reset.";var s={body:{message:{body:i,extra:{maxItems:n,itemsPerMinute:r}}},language:"javascript",environment:a,notifier:{version:e.notifier&&e.notifier.version||e.version}};return"browser"===t?(s.platform="browser",s.framework="browser-js",s.notifier.name="rollbar-browser-js"):"server"===t?(s.framework=e.framework||"node-js",s.notifier.name=e.notifier.name):"react-native"===t&&(s.framework=e.framework||"react-native",s.notifier.name=e.notifier.name),s}n.globalSettings={startTime:(new Date).getTime(),maxItems:void 0,itemsPerMinute:void 0},n.prototype.configureGlobal=function(t){void 0!==t.startTime&&(n.globalSettings.startTime=t.startTime),void 0!==t.maxItems&&(n.globalSettings.maxItems=t.maxItems),void 0!==t.itemsPerMinute&&(n.globalSettings.itemsPerMinute=t.itemsPerMinute)},n.prototype.shouldSend=function(t,e){e=e||(new Date).getTime(),e-this.startTime>=6e4&&(this.startTime=e,this.perMinCounter=0);var i=n.globalSettings.maxItems,a=n.globalSettings.itemsPerMinute;if(r(t,i,this.counter))return o(this.platform,this.platformOptions,i+" max items reached",!1);if(r(t,a,this.perMinCounter))return o(this.platform,this.platformOptions,a+" items per minute reached",!1);this.counter++,this.perMinCounter++;var s=!r(t,i,this.counter),u=s;return s=s&&!r(t,a,this.perMinCounter),o(this.platform,this.platformOptions,null,s,i,a,u)},n.prototype.setPlatformOptions=function(t,e){this.platform=t,this.platformOptions=e},t.exports=n},function(t,e,n){"use strict";function r(t,e,n,r){this.rateLimiter=t,this.api=e,this.logger=n,this.options=r,this.predicates=[],this.pendingItems=[],this.pendingRequests=[],this.retryQueue=[],this.retryHandle=null,this.waitCallback=null,this.waitIntervalID=null}var o=n(5);r.prototype.configure=function(t){this.api&&this.api.configure(t);var e=this.options;return this.options=o.extend(!0,{},e,t),this},r.prototype.addPredicate=function(t){return o.isFunction(t)&&this.predicates.push(t),this},r.prototype.addPendingItem=function(t){this.pendingItems.push(t)},r.prototype.removePendingItem=function(t){var e=this.pendingItems.indexOf(t);e!==-1&&this.pendingItems.splice(e,1)},r.prototype.addItem=function(t,e,n,r){e&&o.isFunction(e)||(e=function(){});var i=this._applyPredicates(t);if(i.stop)return this.removePendingItem(r),void e(i.err);this._maybeLog(t,n),this.removePendingItem(r),this.pendingRequests.push(t);try{this._makeApiRequest(t,function(n,r){this._dequeuePendingRequest(t),e(n,r)}.bind(this))}catch(n){this._dequeuePendingRequest(t),e(n)}},r.prototype.wait=function(t){o.isFunction(t)&&(this.waitCallback=t,this._maybeCallWait()||(this.waitIntervalID&&(this.waitIntervalID=clearInterval(this.waitIntervalID)),this.waitIntervalID=setInterval(function(){this._maybeCallWait()}.bind(this),500)))},r.prototype._applyPredicates=function(t){for(var e=null,n=0,r=this.predicates.length;ns)?(a=e.path,e.path=a.substring(0,s)+i+"&"+a.substring(s+1)):u!==-1?(a=e.path,e.path=a.substring(0,u)+i+a.substring(u)):e.path=e.path+i}function y(t,e){if(e=e||t.protocol,!e&&t.port&&(80===t.port?e="http:":443===t.port&&(e="https:")),e=e||"https:",!t.hostname)return null;var n=e+"//"+t.hostname;return t.port&&(n=n+":"+t.port),t.path&&(n+=t.path),n}function b(t,e){var n,r;try{n=R.stringify(t)}catch(o){if(e&&a(e))try{n=e(t)}catch(t){r=t}else r=o}return{error:r,value:n}}function w(t){var e,n;try{e=R.parse(t)}catch(t){n=t}return{error:n,value:e}}function _(t,e,n,r,o,i,a,s){var u={url:e||"",line:n,column:r};u.func=s.guessFunctionName(u.url,u.line),u.context=s.gatherContext(u.url,u.line);var c=document&&document.location&&document.location.href,l=window&&window.navigator&&window.navigator.userAgent;return{mode:i,message:o?String(o):t||a,url:c,stack:[u],useragent:l}}function x(t,e){return function(n,r){try{e(n,r)}catch(e){t.error(e)}}}function k(t,e,n,r,o){for(var a,s,u,c,l,p,f=[],h=0,m=t.length;h0&&(u=j(!0,{},u),u.extraArgs=f);var b={message:a,err:s,custom:u,timestamp:N(),callback:c,uuid:d()};return u&&void 0!==u.level&&(b.level=u.level,delete u.level),r&&l&&(b.request=l),o&&(b.lambdaContext=o),b._originalArgs=t,b}function E(t,e){if(t){var n=e.split("."),r=t;try{for(var o=0,i=n.length;o500&&(r=r.substr(0,500)+"...")):"undefined"==typeof r&&(r="undefined"),o.push(r);return o.join(" ")}function N(){return Date.now?+Date.now():+new Date}function C(t,e){if(t&&t.user_ip&&e!==!0){var n=t.user_ip;if(e)try{var r;if(n.indexOf(".")!==-1)r=n.split("."),r.pop(),r.push("0"),n=r.join(".");else if(n.indexOf(":")!==-1){if(r=n.split(":"),r.length>2){var o=r.slice(0,3),i=o[2].indexOf("/");i!==-1&&(o[2]=o[2].substring(0,i));var a="0000:0000:0000:0000:0000";n=o.concat(a).join(":")}}else n=null}catch(t){n=null}else n=null;t.user_ip=n}}var j=n(6),R={},A=!1;r();var q={debug:0,info:1,warning:2,error:3,critical:4},D={strictMode:!1,key:["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],q:{name:"queryKey",parser:/(?:^|&)([^&=]*)=?([^&]*)/g},parser:{strict:/^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,loose:/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/}};t.exports={isType:o,typeName:i,isFunction:a,isNativeFunction:s,isIterable:l,isError:p,extend:j,traverse:f,redact:h,uuid4:d,LEVELS:q,sanitizeUrl:m,addParamsAndAccessTokenToPath:v,formatUrl:y,stringify:b,jsonParse:w,makeUnhandledStackInfo:_,createItem:k,get:E,set:I,scrub:T,formatArgsAsString:L,now:N,filterIp:C}},function(t,e){"use strict";var n=Object.prototype.hasOwnProperty,r=Object.prototype.toString,o=function(t){return"function"==typeof Array.isArray?Array.isArray(t):"[object Array]"===r.call(t)},i=function(t){if(!t||"[object Object]"!==r.call(t))return!1;var e=n.call(t,"constructor"),o=t.constructor&&t.constructor.prototype&&n.call(t.constructor.prototype,"isPrototypeOf");if(t.constructor&&!e&&!o)return!1;var i;for(i in t);return"undefined"==typeof i||n.call(t,i)};t.exports=function t(){var e,n,r,a,s,u,c=arguments[0],l=1,p=arguments.length,f=!1;for("boolean"==typeof c?(f=c,c=arguments[1]||{},l=2):("object"!=typeof c&&"function"!=typeof c||null==c)&&(c={});lr&&(o=this.maxQueueSize-r),this.maxQueueSize=r,this.queue.splice(0,o)},r.prototype.copyEvents=function(){return Array.prototype.slice.call(this.queue,0)},r.prototype.capture=function(t,e,n,r,a){var s={level:o(t,n),type:t,timestamp_ms:a||i.now(),body:e,source:"client"};r&&(s.uuid=r);try{if(i.isFunction(this.options.filterTelemetry)&&this.options.filterTelemetry(s))return!1}catch(t){this.options.filterTelemetry=null}return this.push(s),s},r.prototype.captureEvent=function(t,e,n){return this.capture("manual",t,e,n)},r.prototype.captureError=function(t,e,n,r){var o={message:t.message||String(t)};return t.stack&&(o.stack=t.stack),this.capture("error",o,e,n,r)},r.prototype.captureLog=function(t,e,n,r){return this.capture("log",{message:t},e,n,r)},r.prototype.captureNetwork=function(t,e,n,r){e=e||"xhr",t.subtype=t.subtype||e,r&&(t.request=r);var o=this.levelFromStatus(t.status_code);return this.capture("network",t,o,n)},r.prototype.levelFromStatus=function(t){return t>=200&&t<400?"info":0===t||t>=400?"error":"info"},r.prototype.captureDom=function(t,e,n,r,o){var i={subtype:t,element:e};return void 0!==n&&(i.value=n),void 0!==r&&(i.checked=r),this.capture("dom",i,"info",o)},r.prototype.captureNavigation=function(t,e,n){return this.capture("navigation",{from:t,to:e},"info",n)},r.prototype.captureDomContentLoaded=function(t){return this.capture("navigation",{subtype:"DOMContentLoaded"},"info",void 0,t&&t.getTime())},r.prototype.captureLoad=function(t){return this.capture("navigation",{subtype:"load"},"info",void 0,t&&t.getTime())},r.prototype.captureConnectivityChange=function(t,e){return this.captureNetwork({change:t},"connectivity",e)},r.prototype._captureRollbarItem=function(t){if(this.options.includeItemsInTelemetry)return t.err?this.captureError(t.err,t.level,t.uuid,t.timestamp):t.message?this.captureLog(t.message,t.level,t.uuid,t.timestamp):t.custom?this.capture("log",t.custom,t.level,t.uuid,t.timestamp):void 0},r.prototype.push=function(t){this.queue.push(t),this.queue.length>this.maxQueueSize&&this.queue.shift()},t.exports=r},function(t,e,n){"use strict";function r(t,e,n,r){this.options=t,this.transport=e,this.url=n,this.jsonBackup=r,this.accessToken=t.accessToken,this.transportOptions=o(t,n)}function o(t,e){return a.getTransportFromOptions(t,s,e)}var i=n(5),a=n(11),s={hostname:"api.rollbar.com",path:"/api/1/item/",search:null,version:"1",protocol:"https:",port:443};r.prototype.postItem=function(t,e){var n=a.transportOptions(this.transportOptions,"POST"),r=a.buildPayload(this.accessToken,t,this.jsonBackup);this.transport.post(this.accessToken,n,r,e)},r.prototype.configure=function(t){var e=this.oldOptions;return this.options=i.extend(!0,{},e,t),this.transportOptions=o(this.options,this.url),void 0!==this.options.accessToken&&(this.accessToken=this.options.accessToken),this},t.exports=r},function(t,e,n){"use strict";function r(t,e,n){if(!s.isType(e.context,"string")){var r=s.stringify(e.context,n);r.error?e.context="Error: could not serialize 'context'":e.context=r.value||"",e.context.length>255&&(e.context=e.context.substr(0,255))}return{access_token:t,data:e}}function o(t,e,n){var r=e.hostname,o=e.protocol,i=e.port,a=e.path,s=e.search,u=t.proxy;if(t.endpoint){var c=n.parse(t.endpoint);r=c.hostname,o=c.protocol,i=c.port,a=c.pathname,s=c.search}return{hostname:r,protocol:o,port:i,path:a,search:s,proxy:u}}function i(t,e){var n=t.protocol||"https:",r=t.port||("http:"===n?80:"https:"===n?443:void 0),o=t.hostname,i=t.path;return t.search&&(i+=t.search),t.proxy&&(i=n+"//"+o+i,o=t.proxy.host||t.proxy.hostname,r=t.proxy.port,n=t.proxy.protocol||n),{protocol:n,hostname:o,path:i,port:r,method:e}}function a(t,e){var n=/\/$/.test(t),r=/^\//.test(e);return n&&r?e=e.substring(1):n||r||(e="/"+e),t+e}var s=n(5);t.exports={buildPayload:r,getTransportFromOptions:o,transportOptions:i,appendPathToPath:a}},function(t,e,n){"use strict";function r(){var t=Array.prototype.slice.call(arguments,0);t.unshift("Rollbar:"),a.ieVersion()<=8?console.error(s.formatArgsAsString(t)):console.error.apply(console,t)}function o(){var t=Array.prototype.slice.call(arguments,0);t.unshift("Rollbar:"),a.ieVersion()<=8?console.info(s.formatArgsAsString(t)):console.info.apply(console,t)}function i(){var t=Array.prototype.slice.call(arguments,0);t.unshift("Rollbar:"),a.ieVersion()<=8?console.log(s.formatArgsAsString(t)):console.log.apply(console,t)}n(13);var a=n(14),s=n(5);t.exports={error:r,info:o,log:i}},function(t,e){!function(t){"use strict";t.console||(t.console={});for(var e,n,r=t.console,o=function(){},i=["memory"],a="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(",");e=i.pop();)r[e]||(r[e]={});for(;n=a.pop();)r[n]||(r[n]=o)}("undefined"==typeof window?this:window)},function(t,e){"use strict";function n(){var t;if(!document)return t;for(var e=3,n=document.createElement("div"),r=n.getElementsByTagName("i");n.innerHTML="",r[0];);return e>4?e:t}var r={ +ieVersion:n};t.exports=r},function(t,e){"use strict";function n(t,e,n){if(t){var o;"function"==typeof e._rollbarOldOnError?o=e._rollbarOldOnError:t.onerror&&!t.onerror.belongsToShim&&(o=t.onerror,e._rollbarOldOnError=o);var i=function(){var n=Array.prototype.slice.call(arguments,0);r(t,e,o,n)};i.belongsToShim=n,t.onerror=i}}function r(t,e,n,r){t._rollbarWrappedError&&(r[4]||(r[4]=t._rollbarWrappedError),r[5]||(r[5]=t._rollbarWrappedError._rollbarContext),t._rollbarWrappedError=null),e.handleUncaughtException.apply(e,r),n&&n.apply(t,r)}function o(t,e,n){if(t){"function"==typeof t._rollbarURH&&t._rollbarURH.belongsToShim&&t.removeEventListener("unhandledrejection",t._rollbarURH);var r=function(t){var n,r,o;try{n=t.reason}catch(t){n=void 0}try{r=t.promise}catch(t){r="[unhandledrejection] error getting `promise` from event"}try{o=t.detail,!n&&o&&(n=o.reason,r=o.promise)}catch(t){o="[unhandledrejection] error getting `detail` from event"}n||(n="[unhandledrejection] error getting `reason` from event"),e&&e.handleUnhandledRejection&&e.handleUnhandledRejection(n,r)};r.belongsToShim=n,t._rollbarURH=r,t.addEventListener("unhandledrejection",r)}}function i(t,e,n){if(t){var r,o,i="EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload".split(",");for(r=0;r=400&&t.status<600}function c(t,e){var n=new Error(t);return n.code=e||"ENOTFOUND",n}var l=n(5),p=n(12);t.exports={get:r,post:o}},function(t,e){"use strict";function n(t){var e,n,r={protocol:null,auth:null,host:null,path:null,hash:null,href:t,hostname:null,port:null,pathname:null,search:null,query:null};if(e=t.indexOf("//"),e!==-1?(r.protocol=t.substring(0,e),n=e+2):n=0,e=t.indexOf("@",n),e!==-1&&(r.auth=t.substring(n,e),n=e+1),e=t.indexOf("/",n),e===-1){if(e=t.indexOf("?",n),e===-1)return e=t.indexOf("#",n),e===-1?r.host=t.substring(n):(r.host=t.substring(n,e),r.hash=t.substring(e)),r.hostname=r.host.split(":")[0],r.port=r.host.split(":")[1],r.port&&(r.port=parseInt(r.port,10)),r;r.host=t.substring(n,e),r.hostname=r.host.split(":")[0],r.port=r.host.split(":")[1],r.port&&(r.port=parseInt(r.port,10)),n=e}else r.host=t.substring(n,e),r.hostname=r.host.split(":")[0],r.port=r.host.split(":")[1],r.port&&(r.port=parseInt(r.port,10)),n=e;if(e=t.indexOf("#",n),e===-1?r.path=t.substring(n):(r.path=t.substring(n,e),r.hash=t.substring(e)),r.path){var o=r.path.split("?");r.pathname=o[0],r.query=o[1],r.search=r.query?"?"+r.query:null}return r}t.exports={parse:n}},function(t,e,n){"use strict";function r(t,e,n){if(t.data=t.data||{},t.err)try{t.stackInfo=t.err._savedStackTrace||d.parse(t.err)}catch(e){m.error("Error while parsing the error object.",e),t.message=t.err.message||t.err.description||t.message||String(t.err),delete t.err}n(null,t)}function o(t,e,n){t.message||t.stackInfo||t.custom||n(new Error("No message, stack info, or custom data"),null),n(null,t)}function i(t,e,n){var r=e.payload&&e.payload.environment||e.environment;t.data=h.extend(!0,{},t.data,{environment:r,level:t.level,endpoint:e.endpoint,platform:"browser",framework:"browser-js",language:"javascript",server:{},uuid:t.uuid,notifier:{name:"rollbar-browser-js",version:e.version}}),n(null,t)}function a(t){return function(e,n,r){if(!t||!t.location)return r(null,e);var o="$remote_ip";n.captureIp?n.captureIp!==!0&&(o+="_anonymize"):o=null,h.set(e,"data.request",{url:t.location.href,query_string:t.location.search,user_ip:o}),r(null,e)}}function s(t){return function(e,n,r){if(!t)return r(null,e);var o=t.navigator||{},i=t.screen||{};h.set(e,"data.client",{runtime_ms:e.timestamp-t._rollbarStartTime,timestamp:Math.round(e.timestamp/1e3),javascript:{browser:o.userAgent,language:o.language,cookie_enabled:o.cookieEnabled,screen:{width:i.width,height:i.height}}}),r(null,e)}}function u(t){return function(e,n,r){if(!t||!t.navigator)return r(null,e);for(var o,i=[],a=t.navigator.plugins||[],s=0,u=a.length;s-1&&(e=e.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var n=e.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),r=this.extractLocation(n.pop()),o=n.join(" ")||void 0,i="eval"===r[0]?void 0:r[0];return new t(o,void 0,i,r[1],r[2],e)},this)},parseFFOrSafari:function(r){var o=n(r.stack.split("\n"),function(t){return!t.match(i)},this);return e(o,function(e){if(e.indexOf(" > eval")>-1&&(e=e.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),e.indexOf("@")===-1&&e.indexOf(":")===-1)return new t(e);var n=e.split("@"),r=this.extractLocation(n.pop()),o=n.shift()||void 0;return new t(o,void 0,r[0],r[1],r[2],e)},this)},parseOpera:function(t){return!t.stacktrace||t.message.indexOf("\n")>-1&&t.message.split("\n").length>t.stacktrace.split("\n").length?this.parseOpera9(t):t.stack?this.parseOpera11(t):this.parseOpera10(t)},parseOpera9:function(e){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=e.message.split("\n"),o=[],i=2,a=r.length;i/,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(n=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new t(a,s,o[0],o[1],o[2],e)},this)}}})},function(t,e,n){var r,o,i;!function(n,a){"use strict";o=[],r=a,i="function"==typeof r?r.apply(e,o):r,!(void 0!==i&&(t.exports=i))}(this,function(){"use strict";function t(t){return!isNaN(parseFloat(t))&&isFinite(t)}function e(t,e,n,r,o,i){void 0!==t&&this.setFunctionName(t),void 0!==e&&this.setArgs(e),void 0!==n&&this.setFileName(n),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return e.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(t){this.functionName=String(t)},getArgs:function(){return this.args},setArgs:function(t){if("[object Array]"!==Object.prototype.toString.call(t))throw new TypeError("Args must be an Array");this.args=t},getFileName:function(){return this.fileName},setFileName:function(t){this.fileName=String(t)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(e){if(!t(e))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(e)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(e){if(!t(e))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(e)},getSource:function(){return this.source},setSource:function(t){this.source=String(t)},toString:function(){var e=this.getFunctionName()||"{anonymous}",n="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=t(this.getLineNumber())?":"+this.getLineNumber():"",i=t(this.getColumnNumber())?":"+this.getColumnNumber():"";return e+n+r+o+i}},e})},function(t,e,n){"use strict";function r(t,e,n){var r=e.payload||{};r.body&&delete r.body;var o=u.extend(!0,{},t.data,r);t._isUncaught&&(o._isUncaught=!0),t._originalArgs&&(o._originalArgs=t._originalArgs),n(null,o)}function o(t,e,n){t.telemetryEvents&&u.set(t,"data.body.telemetry",t.telemetryEvents),n(null,t)}function i(t,e,n){if(!t.message)return void n(null,t);var r="data.body.trace_chain.0",o=u.get(t,r);if(o||(r="data.body.trace",o=u.get(t,r)),o){if(!o.exception||!o.exception.description)return u.set(t,r+".exception.description",t.message),void n(null,t);var i=u.get(t,r+".extra")||{},a=u.extend(!0,{},i,{message:t.message});u.set(t,r+".extra",a)}n(null,t)}function a(t){return function(e,n,r){var o=u.extend(!0,{},e);try{u.isFunction(n.transform)&&n.transform(o.data)}catch(o){return n.transform=null,t.error("Error while calling custom transform() function. Removing custom transform().",o),void r(null,e)}r(null,o)}}function s(t,e,n){if(!e.sendConfig)return n(null,t);var r="_rollbarConfig",o=u.get(t,"data.custom")||{};o[r]=e,t.data.custom=o,n(null,t)}var u=n(5);t.exports={itemToPayload:r,addTelemetryData:o,addMessageWithError:i,userTransform:a,addConfigToPayload:s}},function(t,e,n){"use strict";function r(t,e){return!o.get(e,"plugins.jquery.ignoreAjaxErrors")||!o.get(t,"body.message.extra.isAjax")}var o=n(5);t.exports={checkIgnore:r}},function(t,e,n){"use strict";function r(t,e){var n=t.level,r=c.LEVELS[n]||0,o=e.reportLevel,i=c.LEVELS[o]||0;return!(r=0&&t.options[t.selectedIndex]&&this.captureDomEvent("input",t,t.options[t.selectedIndex].value)},i.prototype.captureDomEvent=function(t,e,n,r){if(void 0!==n)if(this.scrubTelemetryInputs||"password"===u.getElementType(e))n="[scrubbed]";else if(this.telemetryScrubber){var o=u.describeElement(e);this.telemetryScrubber(o)&&(n="[scrubbed]")}var i=u.elementArrayToString(u.treeToArray(e));this.telemeter.captureDom(t,i,n,r)},i.prototype.deinstrumentNavigation=function(){var t=this._window.chrome,e=t&&t.app&&t.app.runtime,n=!e&&this._window.history&&this._window.history.pushState;n&&o(this.replacements,"navigation")},i.prototype.instrumentNavigation=function(){var t=this._window.chrome,e=t&&t.app&&t.app.runtime,n=!e&&this._window.history&&this._window.history.pushState;if(n){var o=this;r(this._window,"onpopstate",function(t){return function(){var e=o._location.href;o.handleUrlChange(o._lastHref,e),t&&t.apply(this,arguments)}},this.replacements,"navigation"),r(this._window.history,"pushState",function(t){return function(){var e=arguments.length>2?arguments[2]:void 0;return e&&o.handleUrlChange(o._lastHref,e+""),t.apply(this,arguments)}},this.replacements,"navigation")}},i.prototype.handleUrlChange=function(t,e){var n=s.parse(this._location.href),r=s.parse(e),o=s.parse(t);this._lastHref=e,n.protocol===r.protocol&&n.host===r.host&&(e=r.path+(r.hash||"")),n.protocol===o.protocol&&n.host===o.host&&(t=o.path+(o.hash||"")),this.telemeter.captureNavigation(t,e)},i.prototype.deinstrumentConnectivity=function(){("addEventListener"in this._window||"body"in this._document)&&(this._window.addEventListener?this.removeListeners("connectivity"):o(this.replacements,"connectivity"))},i.prototype.instrumentConnectivity=function(){if("addEventListener"in this._window||"body"in this._document)if(this._window.addEventListener)this.addListener("connectivity",this._window,"online",void 0,function(){this.telemeter.captureConnectivityChange("online")}.bind(this),!0),this.addListener("connectivity",this._window,"offline",void 0,function(){this.telemeter.captureConnectivityChange("offline")}.bind(this),!0);else{var t=this;r(this._document.body,"ononline",function(e){return function(){t.telemeter.captureConnectivityChange("online"),e&&e.apply(this,arguments)}},this.replacements,"connectivity"),r(this._document.body,"onoffline",function(e){return function(){t.telemeter.captureConnectivityChange("offline"),e&&e.apply(this,arguments)}},this.replacements,"connectivity")}},i.prototype.addListener=function(t,e,n,r,o,i){e.addEventListener?(e.addEventListener(n,o,i),this.eventRemovers[t].push(function(){e.removeEventListener(n,o,i)})):r&&(e.attachEvent(r,o),this.eventRemovers[t].push(function(){e.detachEvent(r,o)}))},i.prototype.removeListeners=function(t){for(var e;this.eventRemovers[t].length;)(e=this.eventRemovers[t].shift())()},t.exports=i},function(t,e){"use strict";function n(t){return(t.getAttribute("type")||"").toLowerCase()}function r(t,e,r){if(t.tagName.toLowerCase()!==e.toLowerCase())return!1;if(!r)return!0;t=n(t);for(var o=0;o ",i=o.length,a=[],u=0,c=t.length-1;c>=0;c--){if(e=s(t[c]),n=u+a.length*i+e.length,c=r+3){a.unshift("...");break}a.unshift(e),u+=e.length}return a.join(o)}function s(t){if(!t||!t.tagName)return"";var e=[t.tagName];t.id&&e.push("#"+t.id),t.classes&&e.push("."+t.classes.join("."));for(var n=0;n= 60000) {\n\t this.startTime = now;\n\t this.perMinCounter = 0;\n\t }\n\t\n\t var globalRateLimit = RateLimiter.globalSettings.maxItems;\n\t var globalRateLimitPerMin = RateLimiter.globalSettings.itemsPerMinute;\n\t\n\t if (checkRate(item, globalRateLimit, this.counter)) {\n\t return shouldSendValue(this.platform, this.platformOptions, globalRateLimit + ' max items reached', false);\n\t } else if (checkRate(item, globalRateLimitPerMin, this.perMinCounter)) {\n\t return shouldSendValue(this.platform, this.platformOptions, globalRateLimitPerMin + ' items per minute reached', false);\n\t }\n\t this.counter++;\n\t this.perMinCounter++;\n\t\n\t var shouldSend = !checkRate(item, globalRateLimit, this.counter);\n\t var perMinute = shouldSend;\n\t shouldSend = shouldSend && !checkRate(item, globalRateLimitPerMin, this.perMinCounter);\n\t return shouldSendValue(this.platform, this.platformOptions, null, shouldSend, globalRateLimit, globalRateLimitPerMin, perMinute);\n\t};\n\t\n\tRateLimiter.prototype.setPlatformOptions = function(platform, options) {\n\t this.platform = platform;\n\t this.platformOptions = options;\n\t};\n\t\n\t/* Helpers */\n\t\n\tfunction checkRate(item, limit, counter) {\n\t return !item.ignoreRateLimit && limit >= 1 && counter > limit;\n\t}\n\t\n\tfunction shouldSendValue(platform, options, error, shouldSend, globalRateLimit, limitPerMin, perMinute) {\n\t var payload = null;\n\t if (error) {\n\t error = new Error(error);\n\t }\n\t if (!error && !shouldSend) {\n\t payload = rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute);\n\t }\n\t return {error: error, shouldSend: shouldSend, payload: payload};\n\t}\n\t\n\tfunction rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute) {\n\t var environment = options.environment || (options.payload && options.payload.environment);\n\t var msg;\n\t if (perMinute) {\n\t msg = 'item per minute limit reached, ignoring errors until timeout';\n\t } else {\n\t msg = 'maxItems has been hit, ignoring errors until reset.';\n\t }\n\t var item = {\n\t body: {\n\t message: {\n\t body: msg,\n\t extra: {\n\t maxItems: globalRateLimit,\n\t itemsPerMinute: limitPerMin\n\t }\n\t }\n\t },\n\t language: 'javascript',\n\t environment: environment,\n\t notifier: {\n\t version: (options.notifier && options.notifier.version) || options.version\n\t }\n\t };\n\t if (platform === 'browser') {\n\t item.platform = 'browser';\n\t item.framework = 'browser-js';\n\t item.notifier.name = 'rollbar-browser-js';\n\t } else if (platform === 'server') {\n\t item.framework = options.framework || 'node-js';\n\t item.notifier.name = options.notifier.name;\n\t } else if (platform === 'react-native') {\n\t item.framework = options.framework || 'react-native';\n\t item.notifier.name = options.notifier.name;\n\t }\n\t return item;\n\t}\n\t\n\tmodule.exports = RateLimiter;\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\t/*\n\t * Queue - an object which handles which handles a queue of items to be sent to Rollbar.\n\t * This object handles rate limiting via a passed in rate limiter, retries based on connection\n\t * errors, and filtering of items based on a set of configurable predicates. The communication to\n\t * the backend is performed via a given API object.\n\t *\n\t * @param rateLimiter - An object which conforms to the interface\n\t * rateLimiter.shouldSend(item) -> bool\n\t * @param api - An object which conforms to the interface\n\t * api.postItem(payload, function(err, response))\n\t * @param logger - An object used to log verbose messages if desired\n\t * @param options - see Queue.prototype.configure\n\t */\n\tfunction Queue(rateLimiter, api, logger, options) {\n\t this.rateLimiter = rateLimiter;\n\t this.api = api;\n\t this.logger = logger;\n\t this.options = options;\n\t this.predicates = [];\n\t this.pendingItems = [];\n\t this.pendingRequests = [];\n\t this.retryQueue = [];\n\t this.retryHandle = null;\n\t this.waitCallback = null;\n\t this.waitIntervalID = null;\n\t}\n\t\n\t/*\n\t * configure - updates the options this queue uses\n\t *\n\t * @param options\n\t */\n\tQueue.prototype.configure = function(options) {\n\t this.api && this.api.configure(options);\n\t var oldOptions = this.options;\n\t this.options = _.extend(true, {}, oldOptions, options);\n\t return this;\n\t};\n\t\n\t/*\n\t * addPredicate - adds a predicate to the end of the list of predicates for this queue\n\t *\n\t * @param predicate - function(item, options) -> (bool|{err: Error})\n\t * Returning true means that this predicate passes and the item is okay to go on the queue\n\t * Returning false means do not add the item to the queue, but it is not an error\n\t * Returning {err: Error} means do not add the item to the queue, and the given error explains why\n\t * Returning {err: undefined} is equivalent to returning true but don't do that\n\t */\n\tQueue.prototype.addPredicate = function(predicate) {\n\t if (_.isFunction(predicate)) {\n\t this.predicates.push(predicate);\n\t }\n\t return this;\n\t};\n\t\n\tQueue.prototype.addPendingItem = function(item) {\n\t this.pendingItems.push(item);\n\t};\n\t\n\tQueue.prototype.removePendingItem = function(item) {\n\t var idx = this.pendingItems.indexOf(item);\n\t if (idx !== -1) {\n\t this.pendingItems.splice(idx, 1);\n\t }\n\t};\n\t\n\t/*\n\t * addItem - Send an item to the Rollbar API if all of the predicates are satisfied\n\t *\n\t * @param item - The payload to send to the backend\n\t * @param callback - function(error, repsonse) which will be called with the response from the API\n\t * in the case of a success, otherwise response will be null and error will have a value. If both\n\t * error and response are null then the item was stopped by a predicate which did not consider this\n\t * to be an error condition, but nonetheless did not send the item to the API.\n\t * @param originalError - The original error before any transformations that is to be logged if any\n\t */\n\tQueue.prototype.addItem = function(item, callback, originalError, originalItem) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() { return; };\n\t }\n\t var predicateResult = this._applyPredicates(item);\n\t if (predicateResult.stop) {\n\t this.removePendingItem(originalItem);\n\t callback(predicateResult.err);\n\t return;\n\t }\n\t this._maybeLog(item, originalError);\n\t this.removePendingItem(originalItem);\n\t this.pendingRequests.push(item);\n\t try {\n\t this._makeApiRequest(item, function(err, resp) {\n\t this._dequeuePendingRequest(item);\n\t callback(err, resp);\n\t }.bind(this));\n\t } catch (e) {\n\t this._dequeuePendingRequest(item);\n\t callback(e);\n\t }\n\t};\n\t\n\t/*\n\t * wait - Stop any further errors from being added to the queue, and get called back when all items\n\t * currently processing have finished sending to the backend.\n\t *\n\t * @param callback - function() called when all pending items have been sent\n\t */\n\tQueue.prototype.wait = function(callback) {\n\t if (!_.isFunction(callback)) {\n\t return;\n\t }\n\t this.waitCallback = callback;\n\t if (this._maybeCallWait()) {\n\t return;\n\t }\n\t if (this.waitIntervalID) {\n\t this.waitIntervalID = clearInterval(this.waitIntervalID);\n\t }\n\t this.waitIntervalID = setInterval(function() {\n\t this._maybeCallWait();\n\t }.bind(this), 500);\n\t};\n\t\n\t/* _applyPredicates - Sequentially applies the predicates that have been added to the queue to the\n\t * given item with the currently configured options.\n\t *\n\t * @param item - An item in the queue\n\t * @returns {stop: bool, err: (Error|null)} - stop being true means do not add item to the queue,\n\t * the error value should be passed up to a callbak if we are stopping.\n\t */\n\tQueue.prototype._applyPredicates = function(item) {\n\t var p = null;\n\t for (var i = 0, len = this.predicates.length; i < len; i++) {\n\t p = this.predicates[i](item, this.options);\n\t if (!p || p.err !== undefined) {\n\t return {stop: true, err: p.err};\n\t }\n\t }\n\t return {stop: false, err: null};\n\t};\n\t\n\t/*\n\t * _makeApiRequest - Send an item to Rollbar, callback when done, if there is an error make an\n\t * effort to retry if we are configured to do so.\n\t *\n\t * @param item - an item ready to send to the backend\n\t * @param callback - function(err, response)\n\t */\n\tQueue.prototype._makeApiRequest = function(item, callback) {\n\t var rateLimitResponse = this.rateLimiter.shouldSend(item);\n\t if (rateLimitResponse.shouldSend) {\n\t this.api.postItem(item, function(err, resp) {\n\t if (err) {\n\t this._maybeRetry(err, item, callback);\n\t } else {\n\t callback(err, resp);\n\t }\n\t }.bind(this));\n\t } else if (rateLimitResponse.error) {\n\t callback(rateLimitResponse.error);\n\t } else {\n\t this.api.postItem(rateLimitResponse.payload, callback);\n\t }\n\t};\n\t\n\t// These are errors basically mean there is no internet connection\n\tvar RETRIABLE_ERRORS = ['ECONNRESET', 'ENOTFOUND', 'ESOCKETTIMEDOUT', 'ETIMEDOUT', 'ECONNREFUSED', 'EHOSTUNREACH', 'EPIPE', 'EAI_AGAIN'];\n\t\n\t/*\n\t * _maybeRetry - Given the error returned by the API, decide if we should retry or just callback\n\t * with the error.\n\t *\n\t * @param err - an error returned by the API transport\n\t * @param item - the item that was trying to be sent when this error occured\n\t * @param callback - function(err, response)\n\t */\n\tQueue.prototype._maybeRetry = function(err, item, callback) {\n\t var shouldRetry = false;\n\t if (this.options.retryInterval) {\n\t for (var i = 0, len = RETRIABLE_ERRORS.length; i < len; i++) {\n\t if (err.code === RETRIABLE_ERRORS[i]) {\n\t shouldRetry = true;\n\t break;\n\t }\n\t }\n\t }\n\t if (shouldRetry) {\n\t this._retryApiRequest(item, callback);\n\t } else {\n\t callback(err);\n\t }\n\t};\n\t\n\t/*\n\t * _retryApiRequest - Add an item and a callback to a queue and possibly start a timer to process\n\t * that queue based on the retryInterval in the options for this queue.\n\t *\n\t * @param item - an item that failed to send due to an error we deem retriable\n\t * @param callback - function(err, response)\n\t */\n\tQueue.prototype._retryApiRequest = function(item, callback) {\n\t this.retryQueue.push({item: item, callback: callback});\n\t\n\t if (!this.retryHandle) {\n\t this.retryHandle = setInterval(function() {\n\t while (this.retryQueue.length) {\n\t var retryObject = this.retryQueue.shift();\n\t this._makeApiRequest(retryObject.item, retryObject.callback);\n\t }\n\t }.bind(this), this.options.retryInterval);\n\t }\n\t};\n\t\n\t/*\n\t * _dequeuePendingRequest - Removes the item from the pending request queue, this queue is used to\n\t * enable to functionality of providing a callback that clients can pass to `wait` to be notified\n\t * when the pending request queue has been emptied. This must be called when the API finishes\n\t * processing this item. If a `wait` callback is configured, it is called by this function.\n\t *\n\t * @param item - the item previously added to the pending request queue\n\t */\n\tQueue.prototype._dequeuePendingRequest = function(item) {\n\t var idx = this.pendingRequests.indexOf(item);\n\t if (idx !== -1) {\n\t this.pendingRequests.splice(idx, 1);\n\t this._maybeCallWait();\n\t }\n\t};\n\t\n\tQueue.prototype._maybeLog = function(data, originalError) {\n\t if (this.logger && this.options.verbose) {\n\t var message = originalError;\n\t message = message || _.get(data, 'body.trace.exception.message');\n\t message = message || _.get(data, 'body.trace_chain.0.exception.message');\n\t if (message) {\n\t this.logger.error(message);\n\t return;\n\t }\n\t message = _.get(data, 'body.message.body');\n\t if (message) {\n\t this.logger.log(message);\n\t }\n\t }\n\t};\n\t\n\tQueue.prototype._maybeCallWait = function() {\n\t if (_.isFunction(this.waitCallback) && this.pendingItems.length === 0 && this.pendingRequests.length === 0) {\n\t if (this.waitIntervalID) {\n\t this.waitIntervalID = clearInterval(this.waitIntervalID);\n\t }\n\t this.waitCallback();\n\t return true;\n\t }\n\t return false;\n\t};\n\t\n\tmodule.exports = Queue;\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar extend = __webpack_require__(6);\n\t\n\tvar RollbarJSON = {};\n\tvar __initRollbarJSON = false;\n\tfunction setupJSON() {\n\t if (__initRollbarJSON) {\n\t return;\n\t }\n\t __initRollbarJSON = true;\n\t\n\t if (isDefined(JSON)) {\n\t if (isNativeFunction(JSON.stringify)) {\n\t RollbarJSON.stringify = JSON.stringify;\n\t }\n\t if (isNativeFunction(JSON.parse)) {\n\t RollbarJSON.parse = JSON.parse;\n\t }\n\t }\n\t if (!isFunction(RollbarJSON.stringify) || !isFunction(RollbarJSON.parse)) {\n\t var setupCustomJSON = __webpack_require__(7);\n\t setupCustomJSON(RollbarJSON);\n\t }\n\t}\n\tsetupJSON();\n\t\n\t/*\n\t * isType - Given a Javascript value and a string, returns true if the type of the value matches the\n\t * given string.\n\t *\n\t * @param x - any value\n\t * @param t - a lowercase string containing one of the following type names:\n\t * - undefined\n\t * - null\n\t * - error\n\t * - number\n\t * - boolean\n\t * - string\n\t * - symbol\n\t * - function\n\t * - object\n\t * - array\n\t * @returns true if x is of type t, otherwise false\n\t */\n\tfunction isType(x, t) {\n\t return t === typeName(x);\n\t}\n\t\n\t/*\n\t * typeName - Given a Javascript value, returns the type of the object as a string\n\t */\n\tfunction typeName(x) {\n\t var name = typeof x;\n\t if (name !== 'object') {\n\t return name;\n\t }\n\t if (!x) {\n\t return 'null';\n\t }\n\t if (x instanceof Error) {\n\t return 'error';\n\t }\n\t return ({}).toString.call(x).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n\t}\n\t\n\t/* isFunction - a convenience function for checking if a value is a function\n\t *\n\t * @param f - any value\n\t * @returns true if f is a function, otherwise false\n\t */\n\tfunction isFunction(f) {\n\t return isType(f, 'function');\n\t}\n\t\n\t/* isNativeFunction - a convenience function for checking if a value is a native JS function\n\t *\n\t * @param f - any value\n\t * @returns true if f is a native JS function, otherwise false\n\t */\n\tfunction isNativeFunction(f) {\n\t var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\t var funcMatchString = Function.prototype.toString.call(Object.prototype.hasOwnProperty)\n\t .replace(reRegExpChar, '\\\\$&')\n\t .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?');\n\t var reIsNative = RegExp('^' + funcMatchString + '$');\n\t return isObject(f) && reIsNative.test(f);\n\t}\n\t\n\t/* isObject - Checks if the argument is an object\n\t *\n\t * @param value - any value\n\t * @returns true is value is an object function is an object)\n\t*/\n\tfunction isObject(value) {\n\t var type = typeof value;\n\t return value != null && (type == 'object' || type == 'function');\n\t}\n\t\n\t/*\n\t * isDefined - a convenience function for checking if a value is not equal to undefined\n\t *\n\t * @param u - any value\n\t * @returns true if u is anything other than undefined\n\t */\n\tfunction isDefined(u) {\n\t return !isType(u, 'undefined');\n\t}\n\t\n\t/*\n\t * isIterable - convenience function for checking if a value can be iterated, essentially\n\t * whether it is an object or an array.\n\t *\n\t * @param i - any value\n\t * @returns true if i is an object or an array as determined by `typeName`\n\t */\n\tfunction isIterable(i) {\n\t var type = typeName(i);\n\t return (type === 'object' || type === 'array');\n\t}\n\t\n\t/*\n\t * isError - convenience function for checking if a value is of an error type\n\t *\n\t * @param e - any value\n\t * @returns true if e is an error\n\t */\n\tfunction isError(e) {\n\t return isType(e, 'error');\n\t}\n\t\n\tfunction traverse(obj, func, seen) {\n\t var k, v, i;\n\t var isObj = isType(obj, 'object');\n\t var isArray = isType(obj, 'array');\n\t var keys = [];\n\t\n\t if (isObj && seen.indexOf(obj) !== -1) {\n\t return obj;\n\t }\n\t seen.push(obj);\n\t\n\t if (isObj) {\n\t for (k in obj) {\n\t if (Object.prototype.hasOwnProperty.call(obj, k)) {\n\t keys.push(k);\n\t }\n\t }\n\t } else if (isArray) {\n\t for (i = 0; i < obj.length; ++i) {\n\t keys.push(i);\n\t }\n\t }\n\t\n\t var result = isObj ? {} : [];\n\t for (i = 0; i < keys.length; ++i) {\n\t k = keys[i];\n\t v = obj[k];\n\t result[k] = func(k, v, seen);\n\t }\n\t\n\t return (keys.length != 0) ? result : obj;\n\t}\n\t\n\tfunction redact() {\n\t return '********';\n\t}\n\t\n\t// from http://stackoverflow.com/a/8809472/1138191\n\tfunction uuid4() {\n\t var d = now();\n\t var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n\t var r = (d + Math.random() * 16) % 16 | 0;\n\t d = Math.floor(d / 16);\n\t return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16);\n\t });\n\t return uuid;\n\t}\n\t\n\tvar LEVELS = {\n\t debug: 0,\n\t info: 1,\n\t warning: 2,\n\t error: 3,\n\t critical: 4\n\t};\n\t\n\tfunction sanitizeUrl(url) {\n\t var baseUrlParts = parseUri(url);\n\t // remove a trailing # if there is no anchor\n\t if (baseUrlParts.anchor === '') {\n\t baseUrlParts.source = baseUrlParts.source.replace('#', '');\n\t }\n\t\n\t url = baseUrlParts.source.replace('?' + baseUrlParts.query, '');\n\t return url;\n\t}\n\t\n\tvar parseUriOptions = {\n\t strictMode: false,\n\t key: [\n\t 'source',\n\t 'protocol',\n\t 'authority',\n\t 'userInfo',\n\t 'user',\n\t 'password',\n\t 'host',\n\t 'port',\n\t 'relative',\n\t 'path',\n\t 'directory',\n\t 'file',\n\t 'query',\n\t 'anchor'\n\t ],\n\t q: {\n\t name: 'queryKey',\n\t parser: /(?:^|&)([^&=]*)=?([^&]*)/g\n\t },\n\t parser: {\n\t strict: /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,\n\t loose: /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/\n\t }\n\t};\n\t\n\tfunction parseUri(str) {\n\t if (!isType(str, 'string')) {\n\t throw new Error('received invalid input');\n\t }\n\t\n\t var o = parseUriOptions;\n\t var m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str);\n\t var uri = {};\n\t var i = o.key.length;\n\t\n\t while (i--) {\n\t uri[o.key[i]] = m[i] || '';\n\t }\n\t\n\t uri[o.q.name] = {};\n\t uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {\n\t if ($1) {\n\t uri[o.q.name][$1] = $2;\n\t }\n\t });\n\t\n\t return uri;\n\t}\n\t\n\tfunction addParamsAndAccessTokenToPath(accessToken, options, params) {\n\t params = params || {};\n\t params.access_token = accessToken;\n\t var paramsArray = [];\n\t var k;\n\t for (k in params) {\n\t if (Object.prototype.hasOwnProperty.call(params, k)) {\n\t paramsArray.push([k, params[k]].join('='));\n\t }\n\t }\n\t var query = '?' + paramsArray.sort().join('&');\n\t\n\t options = options || {};\n\t options.path = options.path || '';\n\t var qs = options.path.indexOf('?');\n\t var h = options.path.indexOf('#');\n\t var p;\n\t if (qs !== -1 && (h === -1 || h > qs)) {\n\t p = options.path;\n\t options.path = p.substring(0,qs) + query + '&' + p.substring(qs+1);\n\t } else {\n\t if (h !== -1) {\n\t p = options.path;\n\t options.path = p.substring(0,h) + query + p.substring(h);\n\t } else {\n\t options.path = options.path + query;\n\t }\n\t }\n\t}\n\t\n\tfunction formatUrl(u, protocol) {\n\t protocol = protocol || u.protocol;\n\t if (!protocol && u.port) {\n\t if (u.port === 80) {\n\t protocol = 'http:';\n\t } else if (u.port === 443) {\n\t protocol = 'https:';\n\t }\n\t }\n\t protocol = protocol || 'https:';\n\t\n\t if (!u.hostname) {\n\t return null;\n\t }\n\t var result = protocol + '//' + u.hostname;\n\t if (u.port) {\n\t result = result + ':' + u.port;\n\t }\n\t if (u.path) {\n\t result = result + u.path;\n\t }\n\t return result;\n\t}\n\t\n\tfunction stringify(obj, backup) {\n\t var value, error;\n\t try {\n\t value = RollbarJSON.stringify(obj);\n\t } catch (jsonError) {\n\t if (backup && isFunction(backup)) {\n\t try {\n\t value = backup(obj);\n\t } catch (backupError) {\n\t error = backupError;\n\t }\n\t } else {\n\t error = jsonError;\n\t }\n\t }\n\t return {error: error, value: value};\n\t}\n\t\n\tfunction jsonParse(s) {\n\t var value, error;\n\t try {\n\t value = RollbarJSON.parse(s);\n\t } catch (e) {\n\t error = e;\n\t }\n\t return {error: error, value: value};\n\t}\n\t\n\tfunction makeUnhandledStackInfo(\n\t message,\n\t url,\n\t lineno,\n\t colno,\n\t error,\n\t mode,\n\t backupMessage,\n\t errorParser\n\t) {\n\t var location = {\n\t url: url || '',\n\t line: lineno,\n\t column: colno\n\t };\n\t location.func = errorParser.guessFunctionName(location.url, location.line);\n\t location.context = errorParser.gatherContext(location.url, location.line);\n\t var href = document && document.location && document.location.href;\n\t var useragent = window && window.navigator && window.navigator.userAgent;\n\t return {\n\t 'mode': mode,\n\t 'message': error ? String(error) : (message || backupMessage),\n\t 'url': href,\n\t 'stack': [location],\n\t 'useragent': useragent\n\t };\n\t}\n\t\n\tfunction wrapCallback(logger, f) {\n\t return function(err, resp) {\n\t try {\n\t f(err, resp);\n\t } catch (e) {\n\t logger.error(e);\n\t }\n\t };\n\t}\n\t\n\tfunction createItem(args, logger, notifier, requestKeys, lambdaContext) {\n\t var message, err, custom, callback, request;\n\t var arg;\n\t var extraArgs = [];\n\t\n\t for (var i = 0, l = args.length; i < l; ++i) {\n\t arg = args[i];\n\t\n\t var typ = typeName(arg);\n\t switch (typ) {\n\t case 'undefined':\n\t break;\n\t case 'string':\n\t message ? extraArgs.push(arg) : message = arg;\n\t break;\n\t case 'function':\n\t callback = wrapCallback(logger, arg);\n\t break;\n\t case 'date':\n\t extraArgs.push(arg);\n\t break;\n\t case 'error':\n\t case 'domexception':\n\t err ? extraArgs.push(arg) : err = arg;\n\t break;\n\t case 'object':\n\t case 'array':\n\t if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n\t err ? extraArgs.push(arg) : err = arg;\n\t break;\n\t }\n\t if (requestKeys && typ === 'object' && !request) {\n\t for (var j = 0, len = requestKeys.length; j < len; ++j) {\n\t if (arg[requestKeys[j]] !== undefined) {\n\t request = arg;\n\t break;\n\t }\n\t }\n\t if (request) {\n\t break;\n\t }\n\t }\n\t custom ? extraArgs.push(arg) : custom = arg;\n\t break;\n\t default:\n\t if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n\t err ? extraArgs.push(arg) : err = arg;\n\t break;\n\t }\n\t extraArgs.push(arg);\n\t }\n\t }\n\t\n\t if (extraArgs.length > 0) {\n\t // if custom is an array this turns it into an object with integer keys\n\t custom = extend(true, {}, custom);\n\t custom.extraArgs = extraArgs;\n\t }\n\t\n\t var item = {\n\t message: message,\n\t err: err,\n\t custom: custom,\n\t timestamp: now(),\n\t callback: callback,\n\t uuid: uuid4()\n\t };\n\t if (custom && custom.level !== undefined) {\n\t item.level = custom.level;\n\t delete custom.level;\n\t }\n\t if (requestKeys && request) {\n\t item.request = request;\n\t }\n\t if (lambdaContext) {\n\t item.lambdaContext = lambdaContext;\n\t }\n\t item._originalArgs = args;\n\t return item;\n\t}\n\t\n\t/*\n\t * get - given an obj/array and a keypath, return the value at that keypath or\n\t * undefined if not possible.\n\t *\n\t * @param obj - an object or array\n\t * @param path - a string of keys separated by '.' such as 'plugin.jquery.0.message'\n\t * which would correspond to 42 in `{plugin: {jquery: [{message: 42}]}}`\n\t */\n\tfunction get(obj, path) {\n\t if (!obj) {\n\t return undefined;\n\t }\n\t var keys = path.split('.');\n\t var result = obj;\n\t try {\n\t for (var i = 0, len = keys.length; i < len; ++i) {\n\t result = result[keys[i]];\n\t }\n\t } catch (e) {\n\t result = undefined;\n\t }\n\t return result;\n\t}\n\t\n\tfunction set(obj, path, value) {\n\t if (!obj) {\n\t return;\n\t }\n\t var keys = path.split('.');\n\t var len = keys.length;\n\t if (len < 1) {\n\t return;\n\t }\n\t if (len === 1) {\n\t obj[keys[0]] = value;\n\t return;\n\t }\n\t try {\n\t var temp = obj[keys[0]] || {};\n\t var replacement = temp;\n\t for (var i = 1; i < len-1; i++) {\n\t temp[keys[i]] = temp[keys[i]] || {};\n\t temp = temp[keys[i]];\n\t }\n\t temp[keys[len-1]] = value;\n\t obj[keys[0]] = replacement;\n\t } catch (e) {\n\t return;\n\t }\n\t}\n\t\n\tfunction scrub(data, scrubFields) {\n\t scrubFields = scrubFields || [];\n\t var paramRes = _getScrubFieldRegexs(scrubFields);\n\t var queryRes = _getScrubQueryParamRegexs(scrubFields);\n\t\n\t function redactQueryParam(dummy0, paramPart, dummy1, dummy2, dummy3, valPart) {\n\t return paramPart + redact(valPart);\n\t }\n\t\n\t function paramScrubber(v) {\n\t var i;\n\t if (isType(v, 'string')) {\n\t for (i = 0; i < queryRes.length; ++i) {\n\t v = v.replace(queryRes[i], redactQueryParam);\n\t }\n\t }\n\t return v;\n\t }\n\t\n\t function valScrubber(k, v) {\n\t var i;\n\t for (i = 0; i < paramRes.length; ++i) {\n\t if (paramRes[i].test(k)) {\n\t v = redact(v);\n\t break;\n\t }\n\t }\n\t return v;\n\t }\n\t\n\t function scrubber(k, v, seen) {\n\t var tmpV = valScrubber(k, v);\n\t if (tmpV === v) {\n\t if (isType(v, 'object') || isType(v, 'array')) {\n\t return traverse(v, scrubber, seen);\n\t }\n\t return paramScrubber(tmpV);\n\t } else {\n\t return tmpV;\n\t }\n\t }\n\t\n\t return traverse(data, scrubber, []);\n\t}\n\t\n\tfunction _getScrubFieldRegexs(scrubFields) {\n\t var ret = [];\n\t var pat;\n\t for (var i = 0; i < scrubFields.length; ++i) {\n\t pat = '^\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?$';\n\t ret.push(new RegExp(pat, 'i'));\n\t }\n\t return ret;\n\t}\n\t\n\t\n\tfunction _getScrubQueryParamRegexs(scrubFields) {\n\t var ret = [];\n\t var pat;\n\t for (var i = 0; i < scrubFields.length; ++i) {\n\t pat = '\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?';\n\t ret.push(new RegExp('(' + pat + '=)([^&\\\\n]+)', 'igm'));\n\t }\n\t return ret;\n\t}\n\t\n\tfunction formatArgsAsString(args) {\n\t var i, len, arg;\n\t var result = [];\n\t for (i = 0, len = args.length; i < len; i++) {\n\t arg = args[i];\n\t if (typeof arg === 'object') {\n\t arg = stringify(arg);\n\t arg = arg.error || arg.value;\n\t if (arg.length > 500)\n\t arg = arg.substr(0,500)+'...';\n\t } else if (typeof arg === 'undefined') {\n\t arg = 'undefined';\n\t }\n\t result.push(arg);\n\t }\n\t return result.join(' ');\n\t}\n\t\n\tfunction now() {\n\t if (Date.now) {\n\t return +Date.now();\n\t }\n\t return +new Date();\n\t}\n\t\n\tmodule.exports = {\n\t isType: isType,\n\t typeName: typeName,\n\t isFunction: isFunction,\n\t isNativeFunction: isNativeFunction,\n\t isIterable: isIterable,\n\t isError: isError,\n\t extend: extend,\n\t traverse: traverse,\n\t redact: redact,\n\t uuid4: uuid4,\n\t LEVELS: LEVELS,\n\t sanitizeUrl: sanitizeUrl,\n\t addParamsAndAccessTokenToPath: addParamsAndAccessTokenToPath,\n\t formatUrl: formatUrl,\n\t stringify: stringify,\n\t jsonParse: jsonParse,\n\t makeUnhandledStackInfo: makeUnhandledStackInfo,\n\t createItem: createItem,\n\t get: get,\n\t set: set,\n\t scrub: scrub,\n\t formatArgsAsString: formatArgsAsString,\n\t now: now\n\t};\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tvar hasOwn = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\t\n\tvar isArray = function isArray(arr) {\n\t\tif (typeof Array.isArray === 'function') {\n\t\t\treturn Array.isArray(arr);\n\t\t}\n\t\n\t\treturn toStr.call(arr) === '[object Array]';\n\t};\n\t\n\tvar isPlainObject = function isPlainObject(obj) {\n\t\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\t\treturn false;\n\t\t}\n\t\n\t\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\t\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t\t// Not own constructor property must be Object\n\t\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\t\treturn false;\n\t\t}\n\t\n\t\t// Own properties are enumerated firstly, so to speed up,\n\t\t// if last one is own, then all properties are own.\n\t\tvar key;\n\t\tfor (key in obj) {/**/}\n\t\n\t\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n\t};\n\t\n\tmodule.exports = function extend() {\n\t\tvar options, name, src, copy, copyIsArray, clone,\n\t\t\ttarget = arguments[0],\n\t\t\ti = 1,\n\t\t\tlength = arguments.length,\n\t\t\tdeep = false;\n\t\n\t\t// Handle a deep copy situation\n\t\tif (typeof target === 'boolean') {\n\t\t\tdeep = target;\n\t\t\ttarget = arguments[1] || {};\n\t\t\t// skip the boolean and the target\n\t\t\ti = 2;\n\t\t} else if ((typeof target !== 'object' && typeof target !== 'function') || target == null) {\n\t\t\ttarget = {};\n\t\t}\n\t\n\t\tfor (; i < length; ++i) {\n\t\t\toptions = arguments[i];\n\t\t\t// Only deal with non-null/undefined values\n\t\t\tif (options != null) {\n\t\t\t\t// Extend the base object\n\t\t\t\tfor (name in options) {\n\t\t\t\t\tsrc = target[name];\n\t\t\t\t\tcopy = options[name];\n\t\n\t\t\t\t\t// Prevent never-ending loop\n\t\t\t\t\tif (target !== copy) {\n\t\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\t\ttarget[name] = extend(deep, clone, copy);\n\t\n\t\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\t// Return the modified object\n\t\treturn target;\n\t};\n\t\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports) {\n\n\t// json3.js\n\t// 2017-02-21\n\t// Public Domain.\n\t// NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n\t// See http://www.JSON.org/js.html\n\t// This code should be minified before deployment.\n\t// See http://javascript.crockford.com/jsmin.html\n\t\n\t// USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n\t// NOT CONTROL.\n\t\n\t// This file creates a global JSON object containing two methods: stringify\n\t// and parse. This file provides the ES5 JSON capability to ES3 systems.\n\t// If a project might run on IE8 or earlier, then this file should be included.\n\t// This file does nothing on ES5 systems.\n\t\n\t// JSON.stringify(value, replacer, space)\n\t// value any JavaScript value, usually an object or array.\n\t// replacer an optional parameter that determines how object\n\t// values are stringified for objects. It can be a\n\t// function or an array of strings.\n\t// space an optional parameter that specifies the indentation\n\t// of nested structures. If it is omitted, the text will\n\t// be packed without extra whitespace. If it is a number,\n\t// it will specify the number of spaces to indent at each\n\t// level. If it is a string (such as \"\\t\" or \" \"),\n\t// it contains the characters used to indent at each level.\n\t// This method produces a JSON text from a JavaScript value.\n\t// When an object value is found, if the object contains a toJSON\n\t// method, its toJSON method will be called and the result will be\n\t// stringified. A toJSON method does not serialize: it returns the\n\t// value represented by the name/value pair that should be serialized,\n\t// or undefined if nothing should be serialized. The toJSON method\n\t// will be passed the key associated with the value, and this will be\n\t// bound to the value.\n\t\n\t// For example, this would serialize Dates as ISO strings.\n\t\n\t// Date.prototype.toJSON = function (key) {\n\t// function f(n) {\n\t// // Format integers to have at least two digits.\n\t// return (n < 10)\n\t// ? \"0\" + n\n\t// : n;\n\t// }\n\t// return this.getUTCFullYear() + \"-\" +\n\t// f(this.getUTCMonth() + 1) + \"-\" +\n\t// f(this.getUTCDate()) + \"T\" +\n\t// f(this.getUTCHours()) + \":\" +\n\t// f(this.getUTCMinutes()) + \":\" +\n\t// f(this.getUTCSeconds()) + \"Z\";\n\t// };\n\t\n\t// You can provide an optional replacer method. It will be passed the\n\t// key and value of each member, with this bound to the containing\n\t// object. The value that is returned from your method will be\n\t// serialized. If your method returns undefined, then the member will\n\t// be excluded from the serialization.\n\t\n\t// If the replacer parameter is an array of strings, then it will be\n\t// used to select the members to be serialized. It filters the results\n\t// such that only members with keys listed in the replacer array are\n\t// stringified.\n\t\n\t// Values that do not have JSON representations, such as undefined or\n\t// functions, will not be serialized. Such values in objects will be\n\t// dropped; in arrays they will be replaced with null. You can use\n\t// a replacer function to replace those with JSON values.\n\t\n\t// JSON.stringify(undefined) returns undefined.\n\t\n\t// The optional space parameter produces a stringification of the\n\t// value that is filled with line breaks and indentation to make it\n\t// easier to read.\n\t\n\t// If the space parameter is a non-empty string, then that string will\n\t// be used for indentation. If the space parameter is a number, then\n\t// the indentation will be that many spaces.\n\t\n\t// Example:\n\t\n\t// text = JSON.stringify([\"e\", {pluribus: \"unum\"}]);\n\t// // text is '[\"e\",{\"pluribus\":\"unum\"}]'\n\t\n\t// text = JSON.stringify([\"e\", {pluribus: \"unum\"}], null, \"\\t\");\n\t// // text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\n\t\n\t// text = JSON.stringify([new Date()], function (key, value) {\n\t// return this[key] instanceof Date\n\t// ? \"Date(\" + this[key] + \")\"\n\t// : value;\n\t// });\n\t// // text is '[\"Date(---current time---)\"]'\n\t\n\t// JSON.parse(text, reviver)\n\t// This method parses a JSON text to produce an object or array.\n\t// It can throw a SyntaxError exception.\n\t// This has been modified to use JSON-js/json_parse_state.js as the\n\t// parser instead of the one built around eval found in JSON-js/json2.js\n\t\n\t// The optional reviver parameter is a function that can filter and\n\t// transform the results. It receives each of the keys and values,\n\t// and its return value is used instead of the original value.\n\t// If it returns what it received, then the structure is not modified.\n\t// If it returns undefined then the member is deleted.\n\t\n\t// Example:\n\t\n\t// // Parse the text. Values that look like ISO date strings will\n\t// // be converted to Date objects.\n\t\n\t// myData = JSON.parse(text, function (key, value) {\n\t// var a;\n\t// if (typeof value === \"string\") {\n\t// a =\n\t// /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n\t// if (a) {\n\t// return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n\t// +a[5], +a[6]));\n\t// }\n\t// }\n\t// return value;\n\t// });\n\t\n\t// myData = JSON.parse('[\"Date(09/09/2001)\"]', function (key, value) {\n\t// var d;\n\t// if (typeof value === \"string\" &&\n\t// value.slice(0, 5) === \"Date(\" &&\n\t// value.slice(-1) === \")\") {\n\t// d = new Date(value.slice(5, -1));\n\t// if (d) {\n\t// return d;\n\t// }\n\t// }\n\t// return value;\n\t// });\n\t\n\t// This is a reference implementation. You are free to copy, modify, or\n\t// redistribute.\n\t\n\t/*jslint\n\t for, this\n\t */\n\t\n\t/*property\n\t JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\n\t getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\n\t lastIndex, length, parse, prototype, push, replace, slice, stringify,\n\t test, toJSON, toString, valueOf\n\t */\n\t\n\tvar setupCustomJSON = function(JSON) {\n\t\n\t var rx_one = /^[\\],:{}\\s]*$/;\n\t var rx_two = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g;\n\t var rx_three = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\n\t var rx_four = /(?:^|:|,)(?:\\s*\\[)+/g;\n\t var rx_escapable = /[\\\\\"\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\t var rx_dangerous = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\t\n\t function f(n) {\n\t // Format integers to have at least two digits.\n\t return n < 10\n\t ? \"0\" + n\n\t : n;\n\t }\n\t\n\t function this_value() {\n\t return this.valueOf();\n\t }\n\t\n\t if (typeof Date.prototype.toJSON !== \"function\") {\n\t\n\t Date.prototype.toJSON = function () {\n\t\n\t return isFinite(this.valueOf())\n\t ? this.getUTCFullYear() + \"-\" +\n\t f(this.getUTCMonth() + 1) + \"-\" +\n\t f(this.getUTCDate()) + \"T\" +\n\t f(this.getUTCHours()) + \":\" +\n\t f(this.getUTCMinutes()) + \":\" +\n\t f(this.getUTCSeconds()) + \"Z\"\n\t : null;\n\t };\n\t\n\t Boolean.prototype.toJSON = this_value;\n\t Number.prototype.toJSON = this_value;\n\t String.prototype.toJSON = this_value;\n\t }\n\t\n\t var gap;\n\t var indent;\n\t var meta;\n\t var rep;\n\t\n\t\n\t function quote(string) {\n\t\n\t // If the string contains no control characters, no quote characters, and no\n\t // backslash characters, then we can safely slap some quotes around it.\n\t // Otherwise we must also replace the offending characters with safe escape\n\t // sequences.\n\t\n\t rx_escapable.lastIndex = 0;\n\t return rx_escapable.test(string)\n\t ? \"\\\"\" + string.replace(rx_escapable, function (a) {\n\t var c = meta[a];\n\t return typeof c === \"string\"\n\t ? c\n\t : \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n\t }) + \"\\\"\"\n\t : \"\\\"\" + string + \"\\\"\";\n\t }\n\t\n\t\n\t function str(key, holder) {\n\t\n\t // Produce a string from holder[key].\n\t\n\t var i; // The loop counter.\n\t var k; // The member key.\n\t var v; // The member value.\n\t var length;\n\t var mind = gap;\n\t var partial;\n\t var value = holder[key];\n\t\n\t // If the value has a toJSON method, call it to obtain a replacement value.\n\t\n\t if (value && typeof value === \"object\" &&\n\t typeof value.toJSON === \"function\") {\n\t value = value.toJSON(key);\n\t }\n\t\n\t // If we were called with a replacer function, then call the replacer to\n\t // obtain a replacement value.\n\t\n\t if (typeof rep === \"function\") {\n\t value = rep.call(holder, key, value);\n\t }\n\t\n\t // What happens next depends on the value's type.\n\t\n\t switch (typeof value) {\n\t case \"string\":\n\t return quote(value);\n\t\n\t case \"number\":\n\t\n\t // JSON numbers must be finite. Encode non-finite numbers as null.\n\t\n\t return isFinite(value)\n\t ? String(value)\n\t : \"null\";\n\t\n\t case \"boolean\":\n\t case \"null\":\n\t\n\t // If the value is a boolean or null, convert it to a string. Note:\n\t // typeof null does not produce \"null\". The case is included here in\n\t // the remote chance that this gets fixed someday.\n\t\n\t return String(value);\n\t\n\t // If the type is \"object\", we might be dealing with an object or an array or\n\t // null.\n\t\n\t case \"object\":\n\t\n\t // Due to a specification blunder in ECMAScript, typeof null is \"object\",\n\t // so watch out for that case.\n\t\n\t if (!value) {\n\t return \"null\";\n\t }\n\t\n\t // Make an array to hold the partial results of stringifying this object value.\n\t\n\t gap += indent;\n\t partial = [];\n\t\n\t // Is the value an array?\n\t\n\t if (Object.prototype.toString.apply(value) === \"[object Array]\") {\n\t\n\t // The value is an array. Stringify every element. Use null as a placeholder\n\t // for non-JSON values.\n\t\n\t length = value.length;\n\t for (i = 0; i < length; i += 1) {\n\t partial[i] = str(i, value) || \"null\";\n\t }\n\t\n\t // Join all of the elements together, separated with commas, and wrap them in\n\t // brackets.\n\t\n\t v = partial.length === 0\n\t ? \"[]\"\n\t : gap\n\t ? \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\"\n\t : \"[\" + partial.join(\",\") + \"]\";\n\t gap = mind;\n\t return v;\n\t }\n\t\n\t // If the replacer is an array, use it to select the members to be stringified.\n\t\n\t if (rep && typeof rep === \"object\") {\n\t length = rep.length;\n\t for (i = 0; i < length; i += 1) {\n\t if (typeof rep[i] === \"string\") {\n\t k = rep[i];\n\t v = str(k, value);\n\t if (v) {\n\t partial.push(quote(k) + (\n\t gap\n\t ? \": \"\n\t : \":\"\n\t ) + v);\n\t }\n\t }\n\t }\n\t } else {\n\t\n\t // Otherwise, iterate through all of the keys in the object.\n\t\n\t for (k in value) {\n\t if (Object.prototype.hasOwnProperty.call(value, k)) {\n\t v = str(k, value);\n\t if (v) {\n\t partial.push(quote(k) + (\n\t gap\n\t ? \": \"\n\t : \":\"\n\t ) + v);\n\t }\n\t }\n\t }\n\t }\n\t\n\t // Join all of the member texts together, separated with commas,\n\t // and wrap them in braces.\n\t\n\t v = partial.length === 0\n\t ? \"{}\"\n\t : gap\n\t ? \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\"\n\t : \"{\" + partial.join(\",\") + \"}\";\n\t gap = mind;\n\t return v;\n\t }\n\t }\n\t\n\t // If the JSON object does not yet have a stringify method, give it one.\n\t\n\t if (typeof JSON.stringify !== \"function\") {\n\t meta = { // table of character substitutions\n\t \"\\b\": \"\\\\b\",\n\t \"\\t\": \"\\\\t\",\n\t \"\\n\": \"\\\\n\",\n\t \"\\f\": \"\\\\f\",\n\t \"\\r\": \"\\\\r\",\n\t \"\\\"\": \"\\\\\\\"\",\n\t \"\\\\\": \"\\\\\\\\\"\n\t };\n\t JSON.stringify = function (value, replacer, space) {\n\t\n\t // The stringify method takes a value and an optional replacer, and an optional\n\t // space parameter, and returns a JSON text. The replacer can be a function\n\t // that can replace values, or an array of strings that will select the keys.\n\t // A default replacer method can be provided. Use of the space parameter can\n\t // produce text that is more easily readable.\n\t\n\t var i;\n\t gap = \"\";\n\t indent = \"\";\n\t\n\t // If the space parameter is a number, make an indent string containing that\n\t // many spaces.\n\t\n\t if (typeof space === \"number\") {\n\t for (i = 0; i < space; i += 1) {\n\t indent += \" \";\n\t }\n\t\n\t // If the space parameter is a string, it will be used as the indent string.\n\t\n\t } else if (typeof space === \"string\") {\n\t indent = space;\n\t }\n\t\n\t // If there is a replacer, it must be a function or an array.\n\t // Otherwise, throw an error.\n\t\n\t rep = replacer;\n\t if (replacer && typeof replacer !== \"function\" &&\n\t (typeof replacer !== \"object\" ||\n\t typeof replacer.length !== \"number\")) {\n\t throw new Error(\"JSON.stringify\");\n\t }\n\t\n\t // Make a fake root object containing our value under the key of \"\".\n\t // Return the result of stringifying the value.\n\t\n\t return str(\"\", {\"\": value});\n\t };\n\t }\n\t\n\t\n\t // If the JSON object does not yet have a parse method, give it one.\n\t\n\t if (typeof JSON.parse !== \"function\") {\n\t JSON.parse = (function () {\n\t\n\t // This function creates a JSON parse function that uses a state machine rather\n\t // than the dangerous eval function to parse a JSON text.\n\t\n\t var state; // The state of the parser, one of\n\t // 'go' The starting state\n\t // 'ok' The final, accepting state\n\t // 'firstokey' Ready for the first key of the object or\n\t // the closing of an empty object\n\t // 'okey' Ready for the next key of the object\n\t // 'colon' Ready for the colon\n\t // 'ovalue' Ready for the value half of a key/value pair\n\t // 'ocomma' Ready for a comma or closing }\n\t // 'firstavalue' Ready for the first value of an array or\n\t // an empty array\n\t // 'avalue' Ready for the next value of an array\n\t // 'acomma' Ready for a comma or closing ]\n\t var stack; // The stack, for controlling nesting.\n\t var container; // The current container object or array\n\t var key; // The current key\n\t var value; // The current value\n\t var escapes = { // Escapement translation table\n\t \"\\\\\": \"\\\\\",\n\t \"\\\"\": \"\\\"\",\n\t \"/\": \"/\",\n\t \"t\": \"\\t\",\n\t \"n\": \"\\n\",\n\t \"r\": \"\\r\",\n\t \"f\": \"\\f\",\n\t \"b\": \"\\b\"\n\t };\n\t var string = { // The actions for string tokens\n\t go: function () {\n\t state = \"ok\";\n\t },\n\t firstokey: function () {\n\t key = value;\n\t state = \"colon\";\n\t },\n\t okey: function () {\n\t key = value;\n\t state = \"colon\";\n\t },\n\t ovalue: function () {\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t state = \"acomma\";\n\t }\n\t };\n\t var number = { // The actions for number tokens\n\t go: function () {\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t state = \"acomma\";\n\t }\n\t };\n\t var action = {\n\t\n\t // The action table describes the behavior of the machine. It contains an\n\t // object for each token. Each object contains a method that is called when\n\t // a token is matched in a state. An object will lack a method for illegal\n\t // states.\n\t\n\t \"{\": {\n\t go: function () {\n\t stack.push({state: \"ok\"});\n\t container = {};\n\t state = \"firstokey\";\n\t },\n\t ovalue: function () {\n\t stack.push({container: container, state: \"ocomma\", key: key});\n\t container = {};\n\t state = \"firstokey\";\n\t },\n\t firstavalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = {};\n\t state = \"firstokey\";\n\t },\n\t avalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = {};\n\t state = \"firstokey\";\n\t }\n\t },\n\t \"}\": {\n\t firstokey: function () {\n\t var pop = stack.pop();\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t },\n\t ocomma: function () {\n\t var pop = stack.pop();\n\t container[key] = value;\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t }\n\t },\n\t \"[\": {\n\t go: function () {\n\t stack.push({state: \"ok\"});\n\t container = [];\n\t state = \"firstavalue\";\n\t },\n\t ovalue: function () {\n\t stack.push({container: container, state: \"ocomma\", key: key});\n\t container = [];\n\t state = \"firstavalue\";\n\t },\n\t firstavalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = [];\n\t state = \"firstavalue\";\n\t },\n\t avalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = [];\n\t state = \"firstavalue\";\n\t }\n\t },\n\t \"]\": {\n\t firstavalue: function () {\n\t var pop = stack.pop();\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t },\n\t acomma: function () {\n\t var pop = stack.pop();\n\t container.push(value);\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t }\n\t },\n\t \":\": {\n\t colon: function () {\n\t if (Object.hasOwnProperty.call(container, key)) {\n\t throw new SyntaxError(\"Duplicate key '\" + key + \"\\\"\");\n\t }\n\t state = \"ovalue\";\n\t }\n\t },\n\t \",\": {\n\t ocomma: function () {\n\t container[key] = value;\n\t state = \"okey\";\n\t },\n\t acomma: function () {\n\t container.push(value);\n\t state = \"avalue\";\n\t }\n\t },\n\t \"true\": {\n\t go: function () {\n\t value = true;\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t value = true;\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t value = true;\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t value = true;\n\t state = \"acomma\";\n\t }\n\t },\n\t \"false\": {\n\t go: function () {\n\t value = false;\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t value = false;\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t value = false;\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t value = false;\n\t state = \"acomma\";\n\t }\n\t },\n\t \"null\": {\n\t go: function () {\n\t value = null;\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t value = null;\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t value = null;\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t value = null;\n\t state = \"acomma\";\n\t }\n\t }\n\t };\n\t\n\t function debackslashify(text) {\n\t\n\t // Remove and replace any backslash escapement.\n\t\n\t return text.replace(/\\\\(?:u(.{4})|([^u]))/g, function (ignore, b, c) {\n\t return b\n\t ? String.fromCharCode(parseInt(b, 16))\n\t : escapes[c];\n\t });\n\t }\n\t\n\t return function (source, reviver) {\n\t\n\t // A regular expression is used to extract tokens from the JSON text.\n\t // The extraction process is cautious.\n\t\n\t var result;\n\t var tx = /^[\\u0020\\t\\n\\r]*(?:([,:\\[\\]{}]|true|false|null)|(-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)|\"((?:[^\\r\\n\\t\\\\\\\"]|\\\\(?:[\"\\\\\\/trnfb]|u[0-9a-fA-F]{4}))*)\")/;\n\t\n\t // Set the starting state.\n\t\n\t state = \"go\";\n\t\n\t // The stack records the container, key, and state for each object or array\n\t // that contains another object or array while processing nested structures.\n\t\n\t stack = [];\n\t\n\t // If any error occurs, we will catch it and ultimately throw a syntax error.\n\t\n\t try {\n\t\n\t // For each token...\n\t\n\t while (true) {\n\t result = tx.exec(source);\n\t if (!result) {\n\t break;\n\t }\n\t\n\t // result is the result array from matching the tokenizing regular expression.\n\t // result[0] contains everything that matched, including any initial whitespace.\n\t // result[1] contains any punctuation that was matched, or true, false, or null.\n\t // result[2] contains a matched number, still in string form.\n\t // result[3] contains a matched string, without quotes but with escapement.\n\t\n\t if (result[1]) {\n\t\n\t // Token: Execute the action for this state and token.\n\t\n\t action[result[1]][state]();\n\t\n\t } else if (result[2]) {\n\t\n\t // Number token: Convert the number string into a number value and execute\n\t // the action for this state and number.\n\t\n\t value = +result[2];\n\t number[state]();\n\t } else {\n\t\n\t // String token: Replace the escapement sequences and execute the action for\n\t // this state and string.\n\t\n\t value = debackslashify(result[3]);\n\t string[state]();\n\t }\n\t\n\t // Remove the token from the string. The loop will continue as long as there\n\t // are tokens. This is a slow process, but it allows the use of ^ matching,\n\t // which assures that no illegal tokens slip through.\n\t\n\t source = source.slice(result[0].length);\n\t }\n\t\n\t // If we find a state/token combination that is illegal, then the action will\n\t // cause an error. We handle the error by simply changing the state.\n\t\n\t } catch (e) {\n\t state = e;\n\t }\n\t\n\t // The parsing is finished. If we are not in the final \"ok\" state, or if the\n\t // remaining source contains anything except whitespace, then we did not have\n\t //a well-formed JSON text.\n\t\n\t if (state !== \"ok\" || (/[^\\u0020\\t\\n\\r]/.test(source))) {\n\t throw (state instanceof SyntaxError)\n\t ? state\n\t : new SyntaxError(\"JSON\");\n\t }\n\t\n\t // If there is a reviver function, we recursively walk the new structure,\n\t // passing each name/value pair to the reviver function for possible\n\t // transformation, starting with a temporary root object that holds the current\n\t // value in an empty key. If there is not a reviver function, we simply return\n\t // that value.\n\t\n\t return (typeof reviver === \"function\")\n\t ? (function walk(holder, key) {\n\t var k;\n\t var v;\n\t var val = holder[key];\n\t if (val && typeof val === \"object\") {\n\t for (k in value) {\n\t if (Object.prototype.hasOwnProperty.call(val, k)) {\n\t v = walk(val, k);\n\t if (v !== undefined) {\n\t val[k] = v;\n\t } else {\n\t delete val[k];\n\t }\n\t }\n\t }\n\t }\n\t return reviver.call(holder, key, val);\n\t }({\"\": value}, \"\"))\n\t : value;\n\t };\n\t }());\n\t }\n\t}\n\t\n\tmodule.exports = setupCustomJSON;\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\t/*\n\t * Notifier - the internal object responsible for delegating between the client exposed API, the\n\t * chain of transforms necessary to turn an item into something that can be sent to Rollbar, and the\n\t * queue which handles the communcation with the Rollbar API servers.\n\t *\n\t * @param queue - an object that conforms to the interface: addItem(item, callback)\n\t * @param options - an object representing the options to be set for this notifier, this should have\n\t * any defaults already set by the caller\n\t */\n\tfunction Notifier(queue, options) {\n\t this.queue = queue;\n\t this.options = options;\n\t this.transforms = [];\n\t}\n\t\n\t/*\n\t * configure - updates the options for this notifier with the passed in object\n\t *\n\t * @param options - an object which gets merged with the current options set on this notifier\n\t * @returns this\n\t */\n\tNotifier.prototype.configure = function(options) {\n\t this.queue && this.queue.configure(options);\n\t var oldOptions = this.options;\n\t this.options = _.extend(true, {}, oldOptions, options);\n\t return this;\n\t};\n\t\n\t/*\n\t * addTransform - adds a transform onto the end of the queue of transforms for this notifier\n\t *\n\t * @param transform - a function which takes three arguments:\n\t * * item: An Object representing the data to eventually be sent to Rollbar\n\t * * options: The current value of the options for this notifier\n\t * * callback: function(err: (Null|Error), item: (Null|Object)) the transform must call this\n\t * callback with a null value for error if it wants the processing chain to continue, otherwise\n\t * with an error to terminate the processing. The item should be the updated item after this\n\t * transform is finished modifying it.\n\t */\n\tNotifier.prototype.addTransform = function(transform) {\n\t if (_.isFunction(transform)) {\n\t this.transforms.push(transform);\n\t }\n\t return this;\n\t};\n\t\n\t/*\n\t * log - the internal log function which applies the configured transforms and then pushes onto the\n\t * queue to be sent to the backend.\n\t *\n\t * @param item - An object with the following structure:\n\t * message [String] - An optional string to be sent to rollbar\n\t * error [Error] - An optional error\n\t *\n\t * @param callback - A function of type function(err, resp) which will be called with exactly one\n\t * null argument and one non-null argument. The callback will be called once, either during the\n\t * transform stage if an error occurs inside a transform, or in response to the communication with\n\t * the backend. The second argument will be the response from the backend in case of success.\n\t */\n\tNotifier.prototype.log = function(item, callback) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t\n\t if (!this.options.enabled) {\n\t return callback(new Error('Rollbar is not enabled'));\n\t }\n\t\n\t this.queue.addPendingItem(item);\n\t var originalError = item.err;\n\t this._applyTransforms(item, function(err, i) {\n\t if (err) {\n\t this.queue.removePendingItem(item);\n\t return callback(err, null);\n\t }\n\t this.queue.addItem(i, callback, originalError, item);\n\t }.bind(this));\n\t};\n\t\n\t/* Internal */\n\t\n\t/*\n\t * _applyTransforms - Applies the transforms that have been added to this notifier sequentially. See\n\t * `addTransform` for more information.\n\t *\n\t * @param item - An item to be transformed\n\t * @param callback - A function of type function(err, item) which will be called with a non-null\n\t * error and a null item in the case of a transform failure, or a null error and non-null item after\n\t * all transforms have been applied.\n\t */\n\tNotifier.prototype._applyTransforms = function(item, callback) {\n\t var transformIndex = -1;\n\t var transformsLength = this.transforms.length;\n\t var transforms = this.transforms;\n\t var options = this.options;\n\t\n\t var cb = function(err, i) {\n\t if (err) {\n\t callback(err, null);\n\t return;\n\t }\n\t\n\t transformIndex++;\n\t\n\t if (transformIndex === transformsLength) {\n\t callback(null, i);\n\t return;\n\t }\n\t\n\t transforms[transformIndex](i, options, cb);\n\t };\n\t\n\t cb(null, item);\n\t};\n\t\n\tmodule.exports = Notifier;\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\tvar MAX_EVENTS = 100;\n\t\n\tfunction Telemeter(options) {\n\t this.queue = [];\n\t this.options = _.extend(true, {}, options);\n\t var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n\t this.maxQueueSize = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n\t}\n\t\n\tTelemeter.prototype.configure = function(options) {\n\t var oldOptions = this.options;\n\t this.options = _.extend(true, {}, oldOptions, options);\n\t var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n\t var newMaxEvents = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n\t var deleteCount = 0;\n\t if (this.maxQueueSize > newMaxEvents) {\n\t deleteCount = this.maxQueueSize - newMaxEvents;\n\t }\n\t this.maxQueueSize = newMaxEvents;\n\t this.queue.splice(0, deleteCount);\n\t};\n\t\n\tTelemeter.prototype.copyEvents = function() {\n\t return Array.prototype.slice.call(this.queue, 0);\n\t};\n\t\n\tTelemeter.prototype.capture = function(type, metadata, level, rollbarUUID, timestamp) {\n\t var e = {\n\t level: getLevel(type, level),\n\t type: type,\n\t timestamp_ms: timestamp || _.now(),\n\t body: metadata,\n\t source: 'client'\n\t };\n\t if (rollbarUUID) {\n\t e.uuid = rollbarUUID;\n\t }\n\t\n\t try {\n\t if (_.isFunction(this.options.filterTelemetry) && this.options.filterTelemetry(e)) {\n\t return false;\n\t }\n\t } catch (e) {\n\t this.options.filterTelemetry = null;\n\t }\n\t\n\t this.push(e);\n\t return e;\n\t};\n\t\n\tTelemeter.prototype.captureEvent = function(metadata, level, rollbarUUID) {\n\t return this.capture('manual', metadata, level, rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.captureError = function(err, level, rollbarUUID, timestamp) {\n\t var metadata = {\n\t message: err.message || String(err)\n\t };\n\t if (err.stack) {\n\t metadata.stack = err.stack;\n\t }\n\t return this.capture('error', metadata, level, rollbarUUID, timestamp);\n\t};\n\t\n\tTelemeter.prototype.captureLog = function(message, level, rollbarUUID, timestamp) {\n\t return this.capture('log', {\n\t message: message\n\t }, level, rollbarUUID, timestamp);\n\t};\n\t\n\tTelemeter.prototype.captureNetwork = function(metadata, subtype, rollbarUUID, requestData) {\n\t subtype = subtype || 'xhr';\n\t metadata.subtype = metadata.subtype || subtype;\n\t if (requestData) {\n\t metadata.request = requestData;\n\t }\n\t var level = this.levelFromStatus(metadata.status_code);\n\t return this.capture('network', metadata, level, rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.levelFromStatus = function(statusCode) {\n\t if (statusCode >= 200 && statusCode < 400) {\n\t return 'info';\n\t }\n\t if (statusCode === 0 || statusCode >= 400) {\n\t return 'error';\n\t }\n\t return 'info';\n\t};\n\t\n\tTelemeter.prototype.captureDom = function(subtype, element, value, checked, rollbarUUID) {\n\t var metadata = {\n\t subtype: subtype,\n\t element: element\n\t };\n\t if (value !== undefined) {\n\t metadata.value = value;\n\t }\n\t if (checked !== undefined) {\n\t metadata.checked = checked;\n\t }\n\t return this.capture('dom', metadata, 'info', rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.captureNavigation = function(from, to, rollbarUUID) {\n\t return this.capture('navigation', {from: from, to: to}, 'info', rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.captureDomContentLoaded = function(ts) {\n\t return this.capture('navigation', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n\t /**\n\t * If we decide to make this a dom event instead, then use the line below:\n\t return this.capture('dom', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n\t */\n\t};\n\tTelemeter.prototype.captureLoad = function(ts) {\n\t return this.capture('navigation', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n\t /**\n\t * If we decide to make this a dom event instead, then use the line below:\n\t return this.capture('dom', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n\t */\n\t};\n\t\n\tTelemeter.prototype.captureConnectivityChange = function(type, rollbarUUID) {\n\t return this.captureNetwork({change: type}, 'connectivity', rollbarUUID);\n\t};\n\t\n\t// Only intended to be used internally by the notifier\n\tTelemeter.prototype._captureRollbarItem = function(item) {\n\t if (!this.options.includeItemsInTelemetry) {\n\t return;\n\t }\n\t if (item.err) {\n\t return this.captureError(item.err, item.level, item.uuid, item.timestamp);\n\t }\n\t if (item.message) {\n\t return this.captureLog(item.message, item.level, item.uuid, item.timestamp);\n\t }\n\t if (item.custom) {\n\t return this.capture('log', item.custom, item.level, item.uuid, item.timestamp);\n\t }\n\t};\n\t\n\tTelemeter.prototype.push = function(e) {\n\t this.queue.push(e);\n\t if (this.queue.length > this.maxQueueSize) {\n\t this.queue.shift();\n\t }\n\t};\n\t\n\tfunction getLevel(type, level) {\n\t if (level) {\n\t return level;\n\t }\n\t var defaultLevel = {\n\t error: 'error',\n\t manual: 'info'\n\t };\n\t return defaultLevel[type] || 'info';\n\t}\n\t\n\tmodule.exports = Telemeter;\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\tvar helpers = __webpack_require__(11);\n\t\n\tvar defaultOptions = {\n\t hostname: 'api.rollbar.com',\n\t path: '/api/1/item/',\n\t search: null,\n\t version: '1',\n\t protocol: 'https:',\n\t port: 443\n\t};\n\t\n\t/**\n\t * Api is an object that encapsulates methods of communicating with\n\t * the Rollbar API. It is a standard interface with some parts implemented\n\t * differently for server or browser contexts. It is an object that should\n\t * be instantiated when used so it can contain non-global options that may\n\t * be different for another instance of RollbarApi.\n\t *\n\t * @param options {\n\t * accessToken: the accessToken to use for posting items to rollbar\n\t * endpoint: an alternative endpoint to send errors to\n\t * must be a valid, fully qualified URL.\n\t * The default is: https://api.rollbar.com/api/1/item\n\t * proxy: if you wish to proxy requests provide an object\n\t * with the following keys:\n\t * host or hostname (required): foo.example.com\n\t * port (optional): 123\n\t * protocol (optional): https\n\t * }\n\t */\n\tfunction Api(options, t, u, j) {\n\t this.options = options;\n\t this.transport = t;\n\t this.url = u;\n\t this.jsonBackup = j;\n\t this.accessToken = options.accessToken;\n\t this.transportOptions = _getTransport(options, u);\n\t}\n\t\n\t/**\n\t *\n\t * @param data\n\t * @param callback\n\t */\n\tApi.prototype.postItem = function(data, callback) {\n\t var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n\t var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n\t this.transport.post(this.accessToken, transportOptions, payload, callback);\n\t};\n\t\n\tApi.prototype.configure = function(options) {\n\t var oldOptions = this.oldOptions;\n\t this.options = _.extend(true, {}, oldOptions, options);\n\t this.transportOptions = _getTransport(this.options, this.url);\n\t if (this.options.accessToken !== undefined) {\n\t this.accessToken = this.options.accessToken;\n\t }\n\t return this;\n\t};\n\t\n\tfunction _getTransport(options, url) {\n\t return helpers.getTransportFromOptions(options, defaultOptions, url);\n\t}\n\t\n\tmodule.exports = Api;\n\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\tfunction buildPayload(accessToken, data, jsonBackup) {\n\t if (!_.isType(data.context, 'string')) {\n\t var contextResult = _.stringify(data.context, jsonBackup);\n\t if (contextResult.error) {\n\t data.context = 'Error: could not serialize \\'context\\'';\n\t } else {\n\t data.context = contextResult.value || '';\n\t }\n\t if (data.context.length > 255) {\n\t data.context = data.context.substr(0, 255);\n\t }\n\t }\n\t return {\n\t access_token: accessToken,\n\t data: data\n\t };\n\t}\n\t\n\tfunction getTransportFromOptions(options, defaults, url) {\n\t var hostname = defaults.hostname;\n\t var protocol = defaults.protocol;\n\t var port = defaults.port;\n\t var path = defaults.path;\n\t var search = defaults.search;\n\t\n\t var proxy = options.proxy;\n\t if (options.endpoint) {\n\t var opts = url.parse(options.endpoint);\n\t hostname = opts.hostname;\n\t protocol = opts.protocol;\n\t port = opts.port;\n\t path = opts.pathname;\n\t search = opts.search;\n\t }\n\t return {\n\t hostname: hostname,\n\t protocol: protocol,\n\t port: port,\n\t path: path,\n\t search: search,\n\t proxy: proxy\n\t };\n\t}\n\t\n\tfunction transportOptions(transport, method) {\n\t var protocol = transport.protocol || 'https:';\n\t var port = transport.port || (protocol === 'http:' ? 80 : protocol === 'https:' ? 443 : undefined);\n\t var hostname = transport.hostname;\n\t var path = transport.path;\n\t if (transport.search) {\n\t path = path + transport.search;\n\t }\n\t if (transport.proxy) {\n\t path = protocol + '//' + hostname + path;\n\t hostname = transport.proxy.host || transport.proxy.hostname;\n\t port = transport.proxy.port;\n\t protocol = transport.proxy.protocol || protocol;\n\t }\n\t return {\n\t protocol: protocol,\n\t hostname: hostname,\n\t path: path,\n\t port: port,\n\t method: method\n\t };\n\t}\n\t\n\tfunction appendPathToPath(base, path) {\n\t var baseTrailingSlash = /\\/$/.test(base);\n\t var pathBeginningSlash = /^\\//.test(path);\n\t\n\t if (baseTrailingSlash && pathBeginningSlash) {\n\t path = path.substring(1);\n\t } else if (!baseTrailingSlash && !pathBeginningSlash) {\n\t path = '/' + path;\n\t }\n\t\n\t return base + path;\n\t}\n\t\n\tmodule.exports = {\n\t buildPayload: buildPayload,\n\t getTransportFromOptions: getTransportFromOptions,\n\t transportOptions: transportOptions,\n\t appendPathToPath: appendPathToPath\n\t};\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t/* eslint-disable no-console */\n\t__webpack_require__(13);\n\tvar detection = __webpack_require__(14);\n\tvar _ = __webpack_require__(5);\n\t\n\tfunction error() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t args.unshift('Rollbar:');\n\t if (detection.ieVersion() <= 8) {\n\t console.error(_.formatArgsAsString(args));\n\t } else {\n\t console.error.apply(console, args);\n\t }\n\t}\n\t\n\tfunction info() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t args.unshift('Rollbar:');\n\t if (detection.ieVersion() <= 8) {\n\t console.info(_.formatArgsAsString(args));\n\t } else {\n\t console.info.apply(console, args);\n\t }\n\t}\n\t\n\tfunction log() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t args.unshift('Rollbar:');\n\t if (detection.ieVersion() <= 8) {\n\t console.log(_.formatArgsAsString(args));\n\t } else {\n\t console.log.apply(console, args);\n\t }\n\t}\n\t\n\t/* eslint-enable no-console */\n\t\n\tmodule.exports = {\n\t error: error,\n\t info: info,\n\t log: log\n\t};\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports) {\n\n\t// Console-polyfill. MIT license.\n\t// https://github.com/paulmillr/console-polyfill\n\t// Make it safe to do console.log() always.\n\t(function(global) {\n\t 'use strict';\n\t if (!global.console) {\n\t global.console = {};\n\t }\n\t var con = global.console;\n\t var prop, method;\n\t var dummy = function() {};\n\t var properties = ['memory'];\n\t var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' +\n\t 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' +\n\t 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',');\n\t while (prop = properties.pop()) if (!con[prop]) con[prop] = {};\n\t while (method = methods.pop()) if (!con[method]) con[method] = dummy;\n\t // Using `this` for web workers & supports Browserify / Webpack.\n\t})(typeof window === 'undefined' ? this : window);\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\t// This detection.js module is used to encapsulate any ugly browser/feature\n\t// detection we may need to do.\n\t\n\t// Figure out which version of IE we're using, if any.\n\t// This is gleaned from http://stackoverflow.com/questions/5574842/best-way-to-check-for-ie-less-than-9-in-javascript-without-library\n\t// Will return an integer on IE (i.e. 8)\n\t// Will return undefined otherwise\n\tfunction getIEVersion() {\n\t\tvar undef;\n\t\tif (!document) {\n\t\t\treturn undef;\n\t\t}\n\t\n\t var v = 3,\n\t div = document.createElement('div'),\n\t all = div.getElementsByTagName('i');\n\t\n\t while (\n\t div.innerHTML = '',\n\t all[0]\n\t );\n\t\n\t return v > 4 ? v : undef;\n\t}\n\t\n\tvar Detection = {\n\t ieVersion: getIEVersion\n\t};\n\t\n\tmodule.exports = Detection;\n\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tfunction captureUncaughtExceptions(window, handler, shim) {\n\t if (!window) { return; }\n\t var oldOnError;\n\t\n\t if (typeof handler._rollbarOldOnError === 'function') {\n\t oldOnError = handler._rollbarOldOnError;\n\t } else if (window.onerror && !window.onerror.belongsToShim) {\n\t oldOnError = window.onerror;\n\t handler._rollbarOldOnError = oldOnError;\n\t }\n\t\n\t var fn = function() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t _rollbarWindowOnError(window, handler, oldOnError, args);\n\t };\n\t fn.belongsToShim = shim;\n\t window.onerror = fn;\n\t}\n\t\n\tfunction _rollbarWindowOnError(window, r, old, args) {\n\t if (window._rollbarWrappedError) {\n\t if (!args[4]) {\n\t args[4] = window._rollbarWrappedError;\n\t }\n\t if (!args[5]) {\n\t args[5] = window._rollbarWrappedError._rollbarContext;\n\t }\n\t window._rollbarWrappedError = null;\n\t }\n\t\n\t r.handleUncaughtException.apply(r, args);\n\t if (old) {\n\t old.apply(window, args);\n\t }\n\t}\n\t\n\tfunction captureUnhandledRejections(window, handler, shim) {\n\t if (!window) { return; }\n\t\n\t if (typeof window._rollbarURH === 'function' && window._rollbarURH.belongsToShim) {\n\t window.removeEventListener('unhandledrejection', window._rollbarURH);\n\t }\n\t\n\t var rejectionHandler = function (evt) {\n\t var reason, promise, detail;\n\t try {\n\t reason = evt.reason;\n\t } catch (e) {\n\t reason = undefined;\n\t }\n\t try {\n\t promise = evt.promise;\n\t } catch (e) {\n\t promise = '[unhandledrejection] error getting `promise` from event';\n\t }\n\t try {\n\t detail = evt.detail;\n\t if (!reason && detail) {\n\t reason = detail.reason;\n\t promise = detail.promise;\n\t }\n\t } catch (e) {\n\t detail = '[unhandledrejection] error getting `detail` from event';\n\t }\n\t if (!reason) {\n\t reason = '[unhandledrejection] error getting `reason` from event';\n\t }\n\t\n\t if (handler && handler.handleUnhandledRejection) {\n\t handler.handleUnhandledRejection(reason, promise);\n\t }\n\t };\n\t rejectionHandler.belongsToShim = shim;\n\t window._rollbarURH = rejectionHandler;\n\t window.addEventListener('unhandledrejection', rejectionHandler);\n\t}\n\t\n\tfunction wrapGlobals(window, handler, shim) {\n\t if (!window) { return; }\n\t // Adapted from https://github.com/bugsnag/bugsnag-js\n\t var globals = 'EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload'.split(',');\n\t var i, global;\n\t for (i = 0; i < globals.length; ++i) {\n\t global = globals[i];\n\t\n\t if (window[global] && window[global].prototype) {\n\t _extendListenerPrototype(handler, window[global].prototype, shim);\n\t }\n\t }\n\t}\n\t\n\tfunction _extendListenerPrototype(handler, prototype, shim) {\n\t if (prototype.hasOwnProperty && prototype.hasOwnProperty('addEventListener')) {\n\t var oldAddEventListener = prototype.addEventListener;\n\t while (oldAddEventListener._rollbarOldAdd && oldAddEventListener.belongsToShim) {\n\t oldAddEventListener = oldAddEventListener._rollbarOldAdd;\n\t }\n\t var addFn = function(event, callback, bubble) {\n\t oldAddEventListener.call(this, event, handler.wrap(callback), bubble);\n\t };\n\t addFn._rollbarOldAdd = oldAddEventListener;\n\t addFn.belongsToShim = shim;\n\t prototype.addEventListener = addFn;\n\t\n\t var oldRemoveEventListener = prototype.removeEventListener;\n\t while (oldRemoveEventListener._rollbarOldRemove && oldRemoveEventListener.belongsToShim) {\n\t oldRemoveEventListener = oldRemoveEventListener._rollbarOldRemove;\n\t }\n\t var removeFn = function(event, callback, bubble) {\n\t oldRemoveEventListener.call(this, event, callback && callback._rollbar_wrapped || callback, bubble);\n\t };\n\t removeFn._rollbarOldRemove = oldRemoveEventListener;\n\t removeFn.belongsToShim = shim;\n\t prototype.removeEventListener = removeFn;\n\t }\n\t}\n\t\n\tmodule.exports = {\n\t captureUncaughtExceptions: captureUncaughtExceptions,\n\t captureUnhandledRejections: captureUnhandledRejections,\n\t wrapGlobals: wrapGlobals\n\t};\n\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\tvar logger = __webpack_require__(12);\n\t\n\t/*\n\t * accessToken may be embedded in payload but that should not\n\t * be assumed\n\t *\n\t * options: {\n\t * hostname\n\t * protocol\n\t * path\n\t * port\n\t * method\n\t * }\n\t *\n\t * params is an object containing key/value pairs. These\n\t * will be appended to the path as 'key=value&key=value'\n\t *\n\t * payload is an unserialized object\n\t */\n\t\n\tfunction get(accessToken, options, params, callback, requestFactory) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t _.addParamsAndAccessTokenToPath(accessToken, options, params);\n\t\n\t var method = 'GET';\n\t var url = _.formatUrl(options);\n\t _makeRequest(accessToken, url, method, null, callback, requestFactory);\n\t}\n\t\n\tfunction post(accessToken, options, payload, callback, requestFactory) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t\n\t if (!payload) {\n\t return callback(new Error('Cannot send empty request'));\n\t }\n\t\n\t var stringifyResult = _.stringify(payload);\n\t if (stringifyResult.error) {\n\t return callback(stringifyResult.error);\n\t }\n\t\n\t var writeData = stringifyResult.value;\n\t var method = 'POST';\n\t var url = _.formatUrl(options);\n\t _makeRequest(accessToken, url, method, writeData, callback, requestFactory);\n\t}\n\t\n\tfunction _makeRequest(accessToken, url, method, data, callback, requestFactory) {\n\t var request;\n\t if (requestFactory) {\n\t request = requestFactory();\n\t } else {\n\t request = _createXMLHTTPObject();\n\t }\n\t if (!request) {\n\t // Give up, no way to send requests\n\t return callback(new Error('No way to send a request'));\n\t }\n\t try {\n\t try {\n\t var onreadystatechange = function() {\n\t try {\n\t if (onreadystatechange && request.readyState === 4) {\n\t onreadystatechange = undefined;\n\t\n\t var parseResponse = _.jsonParse(request.responseText);\n\t if (_isSuccess(request)) {\n\t callback(parseResponse.error, parseResponse.value);\n\t return;\n\t } else if (_isNormalFailure(request)) {\n\t if (request.status === 403) {\n\t // likely caused by using a server access token\n\t var message = parseResponse.value && parseResponse.value.message;\n\t logger.error(message);\n\t }\n\t // return valid http status codes\n\t callback(new Error(String(request.status)));\n\t } else {\n\t // IE will return a status 12000+ on some sort of connection failure,\n\t // so we return a blank error\n\t // http://msdn.microsoft.com/en-us/library/aa383770%28VS.85%29.aspx\n\t var msg = 'XHR response had no status code (likely connection failure)';\n\t callback(_newRetriableError(msg));\n\t }\n\t }\n\t } catch (ex) {\n\t //jquery source mentions firefox may error out while accessing the\n\t //request members if there is a network error\n\t //https://github.com/jquery/jquery/blob/a938d7b1282fc0e5c52502c225ae8f0cef219f0a/src/ajax/xhr.js#L111\n\t var exc;\n\t if (ex && ex.stack) {\n\t exc = ex;\n\t } else {\n\t exc = new Error(ex);\n\t }\n\t callback(exc);\n\t }\n\t };\n\t\n\t request.open(method, url, true);\n\t if (request.setRequestHeader) {\n\t request.setRequestHeader('Content-Type', 'application/json');\n\t request.setRequestHeader('X-Rollbar-Access-Token', accessToken);\n\t }\n\t request.onreadystatechange = onreadystatechange;\n\t request.send(data);\n\t } catch (e1) {\n\t // Sending using the normal xmlhttprequest object didn't work, try XDomainRequest\n\t if (typeof XDomainRequest !== 'undefined') {\n\t\n\t // Assume we are in a really old browser which has a bunch of limitations:\n\t // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\t\n\t // Extreme paranoia: if we have XDomainRequest then we have a window, but just in case\n\t if (!window || !window.location) {\n\t return callback(new Error('No window available during request, unknown environment'));\n\t }\n\t\n\t // If the current page is http, try and send over http\n\t if (window.location.href.substring(0, 5) === 'http:' && url.substring(0, 5) === 'https') {\n\t url = 'http' + url.substring(5);\n\t }\n\t\n\t var xdomainrequest = new XDomainRequest();\n\t xdomainrequest.onprogress = function() {};\n\t xdomainrequest.ontimeout = function() {\n\t var msg = 'Request timed out';\n\t var code = 'ETIMEDOUT';\n\t callback(_newRetriableError(msg, code));\n\t };\n\t xdomainrequest.onerror = function() {\n\t callback(new Error('Error during request'));\n\t };\n\t xdomainrequest.onload = function() {\n\t var parseResponse = _.jsonParse(xdomainrequest.responseText);\n\t callback(parseResponse.error, parseResponse.value);\n\t };\n\t xdomainrequest.open(method, url, true);\n\t xdomainrequest.send(data);\n\t } else {\n\t callback(new Error('Cannot find a method to transport a request'));\n\t }\n\t }\n\t } catch (e2) {\n\t callback(e2);\n\t }\n\t}\n\t\n\tfunction _createXMLHTTPObject() {\n\t /* global ActiveXObject:false */\n\t\n\t var factories = [\n\t function () {\n\t return new XMLHttpRequest();\n\t },\n\t function () {\n\t return new ActiveXObject('Msxml2.XMLHTTP');\n\t },\n\t function () {\n\t return new ActiveXObject('Msxml3.XMLHTTP');\n\t },\n\t function () {\n\t return new ActiveXObject('Microsoft.XMLHTTP');\n\t }\n\t ];\n\t var xmlhttp;\n\t var i;\n\t var numFactories = factories.length;\n\t for (i = 0; i < numFactories; i++) {\n\t /* eslint-disable no-empty */\n\t try {\n\t xmlhttp = factories[i]();\n\t break;\n\t } catch (e) {\n\t // pass\n\t }\n\t /* eslint-enable no-empty */\n\t }\n\t return xmlhttp;\n\t}\n\t\n\tfunction _isSuccess(r) {\n\t return r && r.status && r.status === 200;\n\t}\n\t\n\tfunction _isNormalFailure(r) {\n\t return r && _.isType(r.status, 'number') && r.status >= 400 && r.status < 600;\n\t}\n\t\n\tfunction _newRetriableError(message, code) {\n\t var err = new Error(message);\n\t err.code = code || 'ENOTFOUND';\n\t return err;\n\t}\n\t\n\tmodule.exports = {\n\t get: get,\n\t post: post\n\t};\n\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\t// See https://nodejs.org/docs/latest/api/url.html\n\tfunction parse(url) {\n\t var result = {\n\t protocol: null, auth: null, host: null, path: null,\n\t hash: null, href: url, hostname: null, port: null,\n\t pathname: null, search: null, query: null\n\t };\n\t\n\t var i, last;\n\t i = url.indexOf('//');\n\t if (i !== -1) {\n\t result.protocol = url.substring(0,i);\n\t last = i+2;\n\t } else {\n\t last = 0;\n\t }\n\t \n\t i = url.indexOf('@', last);\n\t if (i !== -1) {\n\t result.auth = url.substring(last, i);\n\t last = i+1;\n\t }\n\t\n\t i = url.indexOf('/', last);\n\t if (i === -1) {\n\t i = url.indexOf('?', last);\n\t if (i === -1) {\n\t i = url.indexOf('#', last);\n\t if (i === -1) {\n\t result.host = url.substring(last);\n\t } else {\n\t result.host = url.substring(last, i);\n\t result.hash = url.substring(i);\n\t }\n\t result.hostname = result.host.split(':')[0];\n\t result.port = result.host.split(':')[1];\n\t if (result.port) {\n\t result.port = parseInt(result.port, 10);\n\t }\n\t return result;\n\t } else {\n\t result.host = url.substring(last, i);\n\t result.hostname = result.host.split(':')[0];\n\t result.port = result.host.split(':')[1];\n\t if (result.port) {\n\t result.port = parseInt(result.port, 10);\n\t }\n\t last = i;\n\t }\n\t } else {\n\t result.host = url.substring(last, i);\n\t result.hostname = result.host.split(':')[0];\n\t result.port = result.host.split(':')[1];\n\t if (result.port) {\n\t result.port = parseInt(result.port, 10);\n\t }\n\t last = i;\n\t }\n\t\n\t i = url.indexOf('#', last);\n\t if (i === -1) {\n\t result.path = url.substring(last);\n\t } else {\n\t result.path = url.substring(last, i);\n\t result.hash = url.substring(i);\n\t }\n\t\n\t if (result.path) {\n\t var pathParts = result.path.split('?');\n\t result.pathname = pathParts[0];\n\t result.query = pathParts[1];\n\t result.search = result.query ? '?' + result.query : null;\n\t }\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t parse: parse\n\t};\n\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\tvar errorParser = __webpack_require__(19);\n\tvar logger = __webpack_require__(12);\n\t\n\tfunction handleItemWithError(item, options, callback) {\n\t item.data = item.data || {};\n\t if (item.err) {\n\t try {\n\t item.stackInfo = item.err._savedStackTrace || errorParser.parse(item.err);\n\t } catch (e)\n\t /* istanbul ignore next */\n\t {\n\t logger.error('Error while parsing the error object.', e);\n\t item.message = item.err.message || item.err.description || item.message || String(item.err);\n\t delete item.err;\n\t }\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction ensureItemHasSomethingToSay(item, options, callback) {\n\t if (!item.message && !item.stackInfo && !item.custom) {\n\t callback(new Error('No message, stack info, or custom data'), null);\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction addBaseInfo(item, options, callback) {\n\t var environment = (options.payload && options.payload.environment) || options.environment;\n\t item.data = _.extend(true, {}, item.data, {\n\t environment: environment,\n\t level: item.level,\n\t endpoint: options.endpoint,\n\t platform: 'browser',\n\t framework: 'browser-js',\n\t language: 'javascript',\n\t server: {},\n\t uuid: item.uuid,\n\t notifier: {\n\t name: 'rollbar-browser-js',\n\t version: options.version\n\t }\n\t });\n\t callback(null, item);\n\t}\n\t\n\tfunction addRequestInfo(window) {\n\t return function(item, options, callback) {\n\t if (!window || !window.location) {\n\t return callback(null, item);\n\t }\n\t _.set(item, 'data.request', {\n\t url: window.location.href,\n\t query_string: window.location.search,\n\t user_ip: '$remote_ip'\n\t });\n\t callback(null, item);\n\t };\n\t}\n\t\n\tfunction addClientInfo(window) {\n\t return function(item, options, callback) {\n\t if (!window) {\n\t return callback(null, item);\n\t }\n\t var nav = window.navigator || {};\n\t var scr = window.screen || {};\n\t _.set(item, 'data.client', {\n\t runtime_ms: item.timestamp - window._rollbarStartTime,\n\t timestamp: Math.round(item.timestamp / 1000),\n\t javascript: {\n\t browser: nav.userAgent,\n\t language: nav.language,\n\t cookie_enabled: nav.cookieEnabled,\n\t screen: {\n\t width: scr.width,\n\t height: scr.height\n\t }\n\t }\n\t });\n\t callback(null, item);\n\t };\n\t}\n\t\n\tfunction addPluginInfo(window) {\n\t return function(item, options, callback) {\n\t if (!window || !window.navigator) {\n\t return callback(null, item);\n\t }\n\t var plugins = [];\n\t var navPlugins = window.navigator.plugins || [];\n\t var cur;\n\t for (var i=0, l=navPlugins.length; i < l; ++i) {\n\t cur = navPlugins[i];\n\t plugins.push({name: cur.name, description: cur.description});\n\t }\n\t _.set(item, 'data.client.javascript.plugins', plugins);\n\t callback(null, item);\n\t };\n\t}\n\t\n\tfunction addBody(item, options, callback) {\n\t if (item.stackInfo) {\n\t addBodyTrace(item, options, callback);\n\t } else {\n\t addBodyMessage(item, options, callback);\n\t }\n\t}\n\t\n\tfunction addBodyMessage(item, options, callback) {\n\t var message = item.message;\n\t var custom = item.custom;\n\t\n\t if (!message) {\n\t if (custom) {\n\t var scrubFields = options.scrubFields;\n\t var messageResult = _.stringify(_.scrub(custom, scrubFields));\n\t message = messageResult.error || messageResult.value || '';\n\t } else {\n\t message = '';\n\t }\n\t }\n\t var result = {\n\t body: message\n\t };\n\t\n\t if (custom) {\n\t result.extra = _.extend(true, {}, custom);\n\t }\n\t\n\t _.set(item, 'data.body', {message: result});\n\t callback(null, item);\n\t}\n\t\n\t\n\tfunction addBodyTrace(item, options, callback) {\n\t var description = item.data.description;\n\t var stackInfo = item.stackInfo;\n\t var custom = item.custom;\n\t\n\t var guess = errorParser.guessErrorClass(stackInfo.message);\n\t var className = stackInfo.name || guess[0];\n\t var message = guess[1];\n\t var trace = {\n\t exception: {\n\t 'class': className,\n\t message: message\n\t }\n\t };\n\t\n\t if (description) {\n\t trace.exception.description = description;\n\t }\n\t\n\t // Transform a TraceKit stackInfo object into a Rollbar trace\n\t var stack = stackInfo.stack;\n\t if (stack && stack.length === 0 && item._unhandledStackInfo && item._unhandledStackInfo.stack) {\n\t stack = item._unhandledStackInfo.stack;\n\t }\n\t if (stack) {\n\t if (stack.length === 0) {\n\t trace.exception.stack = stackInfo.rawStack;\n\t trace.exception.raw = String(stackInfo.rawException);\n\t }\n\t var stackFrame;\n\t var frame;\n\t var code;\n\t var pre;\n\t var post;\n\t var contextLength;\n\t var i, mid;\n\t\n\t trace.frames = [];\n\t for (i = 0; i < stack.length; ++i) {\n\t stackFrame = stack[i];\n\t frame = {\n\t filename: stackFrame.url ? _.sanitizeUrl(stackFrame.url) : '(unknown)',\n\t lineno: stackFrame.line || null,\n\t method: (!stackFrame.func || stackFrame.func === '?') ? '[anonymous]' : stackFrame.func,\n\t colno: stackFrame.column\n\t };\n\t if (frame.method && frame.method.endsWith && frame.method.endsWith('_rollbar_wrapped')) {\n\t continue;\n\t }\n\t\n\t code = pre = post = null;\n\t contextLength = stackFrame.context ? stackFrame.context.length : 0;\n\t if (contextLength) {\n\t mid = Math.floor(contextLength / 2);\n\t pre = stackFrame.context.slice(0, mid);\n\t code = stackFrame.context[mid];\n\t post = stackFrame.context.slice(mid);\n\t }\n\t\n\t if (code) {\n\t frame.code = code;\n\t }\n\t\n\t if (pre || post) {\n\t frame.context = {};\n\t if (pre && pre.length) {\n\t frame.context.pre = pre;\n\t }\n\t if (post && post.length) {\n\t frame.context.post = post;\n\t }\n\t }\n\t\n\t if (stackFrame.args) {\n\t frame.args = stackFrame.args;\n\t }\n\t\n\t trace.frames.push(frame);\n\t }\n\t\n\t // NOTE(cory): reverse the frames since rollbar.com expects the most recent call last\n\t trace.frames.reverse();\n\t\n\t if (custom) {\n\t trace.extra = _.extend(true, {}, custom);\n\t }\n\t _.set(item, 'data.body', {trace: trace});\n\t callback(null, item);\n\t } else {\n\t item.message = className + ': ' + message;\n\t addBodyMessage(item, options, callback);\n\t }\n\t}\n\t\n\tfunction scrubPayload(item, options, callback) {\n\t var scrubFields = options.scrubFields;\n\t item.data = _.scrub(item.data, scrubFields);\n\t callback(null, item);\n\t}\n\t\n\tmodule.exports = {\n\t handleItemWithError: handleItemWithError,\n\t ensureItemHasSomethingToSay: ensureItemHasSomethingToSay,\n\t addBaseInfo: addBaseInfo,\n\t addRequestInfo: addRequestInfo,\n\t addClientInfo: addClientInfo,\n\t addPluginInfo: addPluginInfo,\n\t addBody: addBody,\n\t scrubPayload: scrubPayload\n\t};\n\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar ErrorStackParser = __webpack_require__(20);\n\t\n\tvar UNKNOWN_FUNCTION = '?';\n\tvar ERR_CLASS_REGEXP = new RegExp('^(([a-zA-Z0-9-_$ ]*): *)?(Uncaught )?([a-zA-Z0-9-_$ ]*): ');\n\t\n\tfunction guessFunctionName() {\n\t return UNKNOWN_FUNCTION;\n\t}\n\t\n\t\n\tfunction gatherContext() {\n\t return null;\n\t}\n\t\n\t\n\tfunction Frame(stackFrame) {\n\t var data = {};\n\t\n\t data._stackFrame = stackFrame;\n\t\n\t data.url = stackFrame.fileName;\n\t data.line = stackFrame.lineNumber;\n\t data.func = stackFrame.functionName;\n\t data.column = stackFrame.columnNumber;\n\t data.args = stackFrame.args;\n\t\n\t data.context = gatherContext(data.url, data.line);\n\t\n\t return data;\n\t}\n\t\n\t\n\tfunction Stack(exception) {\n\t function getStack() {\n\t var parserStack = [];\n\t var exc;\n\t\n\t if (!exception.stack) {\n\t try {\n\t throw exception;\n\t } catch (e) {\n\t exc = e;\n\t }\n\t } else {\n\t exc = exception;\n\t }\n\t\n\t try {\n\t parserStack = ErrorStackParser.parse(exc);\n\t } catch(e) {\n\t parserStack = [];\n\t }\n\t\n\t var stack = [];\n\t\n\t for (var i = 0; i < parserStack.length; i++) {\n\t stack.push(new Frame(parserStack[i]));\n\t }\n\t\n\t return stack;\n\t }\n\t\n\t return {\n\t stack: getStack(),\n\t message: exception.message,\n\t name: exception.name,\n\t rawStack: exception.stack,\n\t rawException: exception\n\t };\n\t}\n\t\n\t\n\tfunction parse(e) {\n\t return new Stack(e);\n\t}\n\t\n\t\n\tfunction guessErrorClass(errMsg) {\n\t if (!errMsg || !errMsg.match) {\n\t return ['Unknown error. There was no error message to display.', ''];\n\t }\n\t var errClassMatch = errMsg.match(ERR_CLASS_REGEXP);\n\t var errClass = '(unknown)';\n\t\n\t if (errClassMatch) {\n\t errClass = errClassMatch[errClassMatch.length - 1];\n\t errMsg = errMsg.replace((errClassMatch[errClassMatch.length - 2] || '') + errClass + ':', '');\n\t errMsg = errMsg.replace(/(^[\\s]+|[\\s]+$)/g, '');\n\t }\n\t return [errClass, errMsg];\n\t}\n\t\n\t\n\tmodule.exports = {\n\t guessFunctionName: guessFunctionName,\n\t guessErrorClass: guessErrorClass,\n\t gatherContext: gatherContext,\n\t parse: parse,\n\t Stack: Stack,\n\t Frame: Frame\n\t};\n\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (root, factory) {\n\t 'use strict';\n\t // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\t\n\t /* istanbul ignore next */\n\t if (true) {\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(21)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t } else if (typeof exports === 'object') {\n\t module.exports = factory(require('stackframe'));\n\t } else {\n\t root.ErrorStackParser = factory(root.StackFrame);\n\t }\n\t}(this, function ErrorStackParser(StackFrame) {\n\t 'use strict';\n\t\n\t var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n\t var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n\t var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\t\n\t function _map(array, fn, thisArg) {\n\t if (typeof Array.prototype.map === 'function') {\n\t return array.map(fn, thisArg);\n\t } else {\n\t var output = new Array(array.length);\n\t for (var i = 0; i < array.length; i++) {\n\t output[i] = fn.call(thisArg, array[i]);\n\t }\n\t return output;\n\t }\n\t }\n\t\n\t function _filter(array, fn, thisArg) {\n\t if (typeof Array.prototype.filter === 'function') {\n\t return array.filter(fn, thisArg);\n\t } else {\n\t var output = [];\n\t for (var i = 0; i < array.length; i++) {\n\t if (fn.call(thisArg, array[i])) {\n\t output.push(array[i]);\n\t }\n\t }\n\t return output;\n\t }\n\t }\n\t\n\t return {\n\t /**\n\t * Given an Error object, extract the most information from it.\n\t * @param error {Error}\n\t * @return Array[StackFrame]\n\t */\n\t parse: function ErrorStackParser$$parse(error) {\n\t if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n\t return this.parseOpera(error);\n\t } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n\t return this.parseV8OrIE(error);\n\t } else if (error.stack) {\n\t return this.parseFFOrSafari(error);\n\t } else {\n\t throw new Error('Cannot parse given Error object');\n\t }\n\t },\n\t\n\t /**\n\t * Separate line and column numbers from a URL-like string.\n\t * @param urlLike String\n\t * @return Array[String]\n\t */\n\t extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n\t // Fail-fast but return locations like \"(native)\"\n\t if (urlLike.indexOf(':') === -1) {\n\t return [urlLike];\n\t }\n\t\n\t var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n\t var lastNumber = locationParts.pop();\n\t var possibleNumber = locationParts[locationParts.length - 1];\n\t if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n\t var lineNumber = locationParts.pop();\n\t return [locationParts.join(':'), lineNumber, lastNumber];\n\t } else {\n\t return [locationParts.join(':'), lastNumber, undefined];\n\t }\n\t },\n\t\n\t parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n\t var filtered = _filter(error.stack.split('\\n'), function (line) {\n\t return !!line.match(CHROME_IE_STACK_REGEXP);\n\t }, this);\n\t\n\t return _map(filtered, function (line) {\n\t if (line.indexOf('(eval ') > -1) {\n\t // Throw away eval information until we implement stacktrace.js/stackframe#8\n\t line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n\t }\n\t var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n\t var locationParts = this.extractLocation(tokens.pop());\n\t var functionName = tokens.join(' ') || undefined;\n\t var fileName = locationParts[0] === 'eval' ? undefined : locationParts[0];\n\t\n\t return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n\t }, this);\n\t },\n\t\n\t parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n\t var filtered = _filter(error.stack.split('\\n'), function (line) {\n\t return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n\t }, this);\n\t\n\t return _map(filtered, function (line) {\n\t // Throw away eval information until we implement stacktrace.js/stackframe#8\n\t if (line.indexOf(' > eval') > -1) {\n\t line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n\t }\n\t\n\t if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n\t // Safari eval frames only have function names and nothing else\n\t return new StackFrame(line);\n\t } else {\n\t var tokens = line.split('@');\n\t var locationParts = this.extractLocation(tokens.pop());\n\t var functionName = tokens.shift() || undefined;\n\t return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n\t }\n\t }, this);\n\t },\n\t\n\t parseOpera: function ErrorStackParser$$parseOpera(e) {\n\t if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n\t e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n\t return this.parseOpera9(e);\n\t } else if (!e.stack) {\n\t return this.parseOpera10(e);\n\t } else {\n\t return this.parseOpera11(e);\n\t }\n\t },\n\t\n\t parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n\t var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n\t var lines = e.message.split('\\n');\n\t var result = [];\n\t\n\t for (var i = 2, len = lines.length; i < len; i += 2) {\n\t var match = lineRE.exec(lines[i]);\n\t if (match) {\n\t result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n\t }\n\t }\n\t\n\t return result;\n\t },\n\t\n\t parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n\t var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n\t var lines = e.stacktrace.split('\\n');\n\t var result = [];\n\t\n\t for (var i = 0, len = lines.length; i < len; i += 2) {\n\t var match = lineRE.exec(lines[i]);\n\t if (match) {\n\t result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n\t }\n\t }\n\t\n\t return result;\n\t },\n\t\n\t // Opera 10.65+ Error.stack very similar to FF/Safari\n\t parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n\t var filtered = _filter(error.stack.split('\\n'), function (line) {\n\t return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n\t !line.match(/^Error created at/);\n\t }, this);\n\t\n\t return _map(filtered, function (line) {\n\t var tokens = line.split('@');\n\t var locationParts = this.extractLocation(tokens.pop());\n\t var functionCall = (tokens.shift() || '');\n\t var functionName = functionCall\n\t .replace(//, '$2')\n\t .replace(/\\([^\\)]*\\)/g, '') || undefined;\n\t var argsRaw;\n\t if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n\t argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n\t }\n\t var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n\t return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n\t }, this);\n\t }\n\t };\n\t}));\n\t\n\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (root, factory) {\n\t 'use strict';\n\t // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\t\n\t /* istanbul ignore next */\n\t if (true) {\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t } else if (typeof exports === 'object') {\n\t module.exports = factory();\n\t } else {\n\t root.StackFrame = factory();\n\t }\n\t}(this, function () {\n\t 'use strict';\n\t function _isNumber(n) {\n\t return !isNaN(parseFloat(n)) && isFinite(n);\n\t }\n\t\n\t function StackFrame(functionName, args, fileName, lineNumber, columnNumber, source) {\n\t if (functionName !== undefined) {\n\t this.setFunctionName(functionName);\n\t }\n\t if (args !== undefined) {\n\t this.setArgs(args);\n\t }\n\t if (fileName !== undefined) {\n\t this.setFileName(fileName);\n\t }\n\t if (lineNumber !== undefined) {\n\t this.setLineNumber(lineNumber);\n\t }\n\t if (columnNumber !== undefined) {\n\t this.setColumnNumber(columnNumber);\n\t }\n\t if (source !== undefined) {\n\t this.setSource(source);\n\t }\n\t }\n\t\n\t StackFrame.prototype = {\n\t getFunctionName: function () {\n\t return this.functionName;\n\t },\n\t setFunctionName: function (v) {\n\t this.functionName = String(v);\n\t },\n\t\n\t getArgs: function () {\n\t return this.args;\n\t },\n\t setArgs: function (v) {\n\t if (Object.prototype.toString.call(v) !== '[object Array]') {\n\t throw new TypeError('Args must be an Array');\n\t }\n\t this.args = v;\n\t },\n\t\n\t // NOTE: Property name may be misleading as it includes the path,\n\t // but it somewhat mirrors V8's JavaScriptStackTraceApi\n\t // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's\n\t // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14\n\t getFileName: function () {\n\t return this.fileName;\n\t },\n\t setFileName: function (v) {\n\t this.fileName = String(v);\n\t },\n\t\n\t getLineNumber: function () {\n\t return this.lineNumber;\n\t },\n\t setLineNumber: function (v) {\n\t if (!_isNumber(v)) {\n\t throw new TypeError('Line Number must be a Number');\n\t }\n\t this.lineNumber = Number(v);\n\t },\n\t\n\t getColumnNumber: function () {\n\t return this.columnNumber;\n\t },\n\t setColumnNumber: function (v) {\n\t if (!_isNumber(v)) {\n\t throw new TypeError('Column Number must be a Number');\n\t }\n\t this.columnNumber = Number(v);\n\t },\n\t\n\t getSource: function () {\n\t return this.source;\n\t },\n\t setSource: function (v) {\n\t this.source = String(v);\n\t },\n\t\n\t toString: function() {\n\t var functionName = this.getFunctionName() || '{anonymous}';\n\t var args = '(' + (this.getArgs() || []).join(',') + ')';\n\t var fileName = this.getFileName() ? ('@' + this.getFileName()) : '';\n\t var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : '';\n\t var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : '';\n\t return functionName + args + fileName + lineNumber + columnNumber;\n\t }\n\t };\n\t\n\t return StackFrame;\n\t}));\n\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\tfunction itemToPayload(item, options, callback) {\n\t var payloadOptions = options.payload || {};\n\t if (payloadOptions.body) {\n\t delete payloadOptions.body;\n\t }\n\t\n\t var data = _.extend(true, {}, item.data, payloadOptions);\n\t if (item._isUncaught) {\n\t data._isUncaught = true;\n\t }\n\t if (item._originalArgs) {\n\t data._originalArgs = item._originalArgs;\n\t }\n\t callback(null, data);\n\t}\n\t\n\tfunction addTelemetryData(item, options, callback) {\n\t if (item.telemetryEvents) {\n\t _.set(item, 'data.body.telemetry', item.telemetryEvents);\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction addMessageWithError(item, options, callback) {\n\t if (!item.message) {\n\t callback(null, item);\n\t return;\n\t }\n\t var tracePath = 'data.body.trace_chain.0';\n\t var trace = _.get(item, tracePath);\n\t if (!trace) {\n\t tracePath = 'data.body.trace';\n\t trace = _.get(item, tracePath);\n\t }\n\t if (trace) {\n\t if (!(trace.exception && trace.exception.description)) {\n\t _.set(item, tracePath+'.exception.description', item.message);\n\t callback(null, item);\n\t return;\n\t }\n\t var extra = _.get(item, tracePath+'.extra') || {};\n\t var newExtra = _.extend(true, {}, extra, {message: item.message});\n\t _.set(item, tracePath+'.extra', newExtra);\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction userTransform(logger) {\n\t return function(item, options, callback) {\n\t var newItem = _.extend(true, {}, item);\n\t try {\n\t if (_.isFunction(options.transform)) {\n\t options.transform(newItem.data);\n\t }\n\t } catch (e) {\n\t options.transform = null;\n\t logger.error('Error while calling custom transform() function. Removing custom transform().', e);\n\t callback(null, item);\n\t return;\n\t }\n\t callback(null, newItem);\n\t }\n\t}\n\t\n\tfunction addConfigToPayload(item, options, callback) {\n\t if (!options.sendConfig) {\n\t return callback(null, item);\n\t }\n\t var configKey = '_rollbarConfig';\n\t var custom = _.get(item, 'data.custom') || {};\n\t custom[configKey] = options;\n\t item.data.custom = custom;\n\t callback(null, item);\n\t}\n\t\n\tmodule.exports = {\n\t itemToPayload: itemToPayload,\n\t addTelemetryData: addTelemetryData,\n\t addMessageWithError: addMessageWithError,\n\t userTransform: userTransform,\n\t addConfigToPayload: addConfigToPayload\n\t};\n\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\tfunction checkIgnore(item, settings) {\n\t if (_.get(settings, 'plugins.jquery.ignoreAjaxErrors')) {\n\t return !_.get(item, 'body.message.extra.isAjax');\n\t }\n\t return true;\n\t}\n\t\n\tmodule.exports = {\n\t checkIgnore: checkIgnore\n\t};\n\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\tfunction checkLevel(item, settings) {\n\t var level = item.level;\n\t var levelVal = _.LEVELS[level] || 0;\n\t var reportLevel = settings.reportLevel;\n\t var reportLevelVal = _.LEVELS[reportLevel] || 0;\n\t\n\t if (levelVal < reportLevelVal) {\n\t return false;\n\t }\n\t return true;\n\t}\n\t\n\tfunction userCheckIgnore(logger) {\n\t return function(item, settings) {\n\t var isUncaught = !!item._isUncaught;\n\t delete item._isUncaught;\n\t var args = item._originalArgs;\n\t delete item._originalArgs;\n\t try {\n\t if (_.isFunction(settings.onSendCallback)) {\n\t settings.onSendCallback(isUncaught, args, item);\n\t }\n\t } catch (e) {\n\t settings.onSendCallback = null;\n\t logger.error('Error while calling onSendCallback, removing', e);\n\t }\n\t try {\n\t if (_.isFunction(settings.checkIgnore) && settings.checkIgnore(isUncaught, args, item)) {\n\t return false;\n\t }\n\t } catch (e) {\n\t settings.checkIgnore = null;\n\t logger.error('Error while calling custom checkIgnore(), removing', e);\n\t }\n\t return true;\n\t }\n\t}\n\t\n\tfunction urlIsNotBlacklisted(logger) {\n\t return function(item, settings) {\n\t return !urlIsOnAList(item, settings, 'blacklist', logger);\n\t }\n\t}\n\t\n\tfunction urlIsWhitelisted(logger) {\n\t return function(item, settings) {\n\t return urlIsOnAList(item, settings, 'whitelist', logger);\n\t }\n\t}\n\t\n\tfunction urlIsOnAList(item, settings, whiteOrBlack, logger) {\n\t // whitelist is the default\n\t var black = false;\n\t if (whiteOrBlack === 'blacklist') {\n\t black = true;\n\t }\n\t var list, trace, frame, filename, frameLength, url, listLength, urlRegex;\n\t var i, j;\n\t\n\t try {\n\t list = black ? settings.hostBlackList : settings.hostWhiteList;\n\t listLength = list && list.length;\n\t trace = _.get(item, 'body.trace');\n\t\n\t // These two checks are important to come first as they are defaults\n\t // in case the list is missing or the trace is missing or not well-formed\n\t if (!list || listLength === 0) {\n\t return !black;\n\t }\n\t if (!trace || !trace.frames || trace.frames.length === 0) {\n\t return !black;\n\t }\n\t\n\t frameLength = trace.frames.length;\n\t for (i = 0; i < frameLength; i++) {\n\t frame = trace.frames[i];\n\t filename = frame.filename;\n\t\n\t if (!_.isType(filename, 'string')) {\n\t return !black;\n\t }\n\t\n\t for (j = 0; j < listLength; j++) {\n\t url = list[j];\n\t urlRegex = new RegExp(url);\n\t\n\t if (urlRegex.test(filename)) {\n\t return true;\n\t }\n\t }\n\t }\n\t } catch (e)\n\t /* istanbul ignore next */\n\t {\n\t if (black) {\n\t settings.hostBlackList = null;\n\t } else {\n\t settings.hostWhiteList = null;\n\t }\n\t var listName = black ? 'hostBlackList' : 'hostWhiteList';\n\t logger.error('Error while reading your configuration\\'s ' + listName + ' option. Removing custom ' + listName + '.', e);\n\t return !black;\n\t }\n\t return false;\n\t}\n\t\n\tfunction messageIsIgnored(logger) {\n\t return function(item, settings) {\n\t var exceptionMessage, i, ignoredMessages,\n\t len, messageIsIgnored, rIgnoredMessage,\n\t body, traceMessage, bodyMessage;\n\t\n\t try {\n\t messageIsIgnored = false;\n\t ignoredMessages = settings.ignoredMessages;\n\t\n\t if (!ignoredMessages || ignoredMessages.length === 0) {\n\t return true;\n\t }\n\t\n\t body = item.body;\n\t traceMessage = _.get(body, 'trace.exception.message');\n\t bodyMessage = _.get(body, 'message.body');\n\t\n\t exceptionMessage = traceMessage || bodyMessage;\n\t\n\t if (!exceptionMessage){\n\t return true;\n\t }\n\t\n\t len = ignoredMessages.length;\n\t for (i = 0; i < len; i++) {\n\t rIgnoredMessage = new RegExp(ignoredMessages[i], 'gi');\n\t messageIsIgnored = rIgnoredMessage.test(exceptionMessage);\n\t\n\t if (messageIsIgnored) {\n\t break;\n\t }\n\t }\n\t } catch(e)\n\t /* istanbul ignore next */\n\t {\n\t settings.ignoredMessages = null;\n\t logger.error('Error while reading your configuration\\'s ignoredMessages option. Removing custom ignoredMessages.');\n\t }\n\t\n\t return !messageIsIgnored;\n\t }\n\t}\n\t\n\tmodule.exports = {\n\t checkLevel: checkLevel,\n\t userCheckIgnore: userCheckIgnore,\n\t urlIsNotBlacklisted: urlIsNotBlacklisted,\n\t urlIsWhitelisted: urlIsWhitelisted,\n\t messageIsIgnored: messageIsIgnored\n\t};\n\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\tvar urlparser = __webpack_require__(17);\n\tvar domUtil = __webpack_require__(26);\n\t\n\tvar defaults = {\n\t network: true,\n\t networkResponseHeaders: false,\n\t networkResponseBody: false,\n\t networkRequestBody: false,\n\t log: true,\n\t dom: true,\n\t navigation: true,\n\t connectivity: true\n\t};\n\t\n\tfunction replace(obj, name, replacement, replacements, type) {\n\t var orig = obj[name];\n\t obj[name] = replacement(orig);\n\t if (replacements) {\n\t replacements[type].push([obj, name, orig]);\n\t }\n\t}\n\t\n\tfunction restore(replacements, type) {\n\t var b;\n\t while (replacements[type].length) {\n\t b = replacements[type].shift();\n\t b[0][b[1]] = b[2];\n\t }\n\t}\n\t\n\tfunction Instrumenter(options, telemeter, rollbar, _window, _document) {\n\t var autoInstrument = options.autoInstrument;\n\t if (options.enabled === false || autoInstrument === false) {\n\t this.autoInstrument = {};\n\t } else {\n\t if (!_.isType(autoInstrument, 'object')) {\n\t autoInstrument = defaults;\n\t }\n\t this.autoInstrument = _.extend(true, {}, defaults, autoInstrument);\n\t }\n\t this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n\t this.telemetryScrubber = options.telemetryScrubber;\n\t this.telemeter = telemeter;\n\t this.rollbar = rollbar;\n\t this._window = _window || {};\n\t this._document = _document || {};\n\t this.replacements = {\n\t network: [],\n\t log: [],\n\t navigation: [],\n\t connectivity: []\n\t };\n\t this.eventRemovers = {\n\t dom: [],\n\t connectivity: []\n\t };\n\t\n\t this._location = this._window.location;\n\t this._lastHref = this._location && this._location.href;\n\t}\n\t\n\tInstrumenter.prototype.configure = function(options) {\n\t var autoInstrument = options.autoInstrument;\n\t var oldSettings = _.extend(true, {}, this.autoInstrument);\n\t if (options.enabled === false || autoInstrument === false) {\n\t this.autoInstrument = {};\n\t } else {\n\t if (!_.isType(autoInstrument, 'object')) {\n\t autoInstrument = defaults;\n\t }\n\t this.autoInstrument = _.extend(true, {}, defaults, autoInstrument);\n\t }\n\t this.instrument(oldSettings);\n\t if (options.scrubTelemetryInputs !== undefined) {\n\t this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n\t }\n\t if (options.telemetryScrubber !== undefined) {\n\t this.telemetryScrubber = options.telemetryScrubber;\n\t }\n\t};\n\t\n\tInstrumenter.prototype.instrument = function(oldSettings) {\n\t if (this.autoInstrument.network && !(oldSettings && oldSettings.network)) {\n\t this.instrumentNetwork();\n\t } else if (!this.autoInstrument.network && oldSettings && oldSettings.network) {\n\t this.deinstrumentNetwork();\n\t }\n\t\n\t if (this.autoInstrument.log && !(oldSettings && oldSettings.log)) {\n\t this.instrumentConsole();\n\t } else if (!this.autoInstrument.log && oldSettings && oldSettings.log) {\n\t this.deinstrumentConsole();\n\t }\n\t\n\t if (this.autoInstrument.dom && !(oldSettings && oldSettings.dom)) {\n\t this.instrumentDom();\n\t } else if (!this.autoInstrument.dom && oldSettings && oldSettings.dom) {\n\t this.deinstrumentDom();\n\t }\n\t\n\t if (this.autoInstrument.navigation && !(oldSettings && oldSettings.navigation)) {\n\t this.instrumentNavigation();\n\t } else if (!this.autoInstrument.navigation && oldSettings && oldSettings.navigation) {\n\t this.deinstrumentNavigation();\n\t }\n\t\n\t if (this.autoInstrument.connectivity && !(oldSettings && oldSettings.connectivity)) {\n\t this.instrumentConnectivity();\n\t } else if (!this.autoInstrument.connectivity && oldSettings && oldSettings.connectivity) {\n\t this.deinstrumentConnectivity();\n\t }\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentNetwork = function() {\n\t restore(this.replacements, 'network');\n\t};\n\t\n\tInstrumenter.prototype.instrumentNetwork = function() {\n\t var self = this;\n\t\n\t function wrapProp(prop, xhr) {\n\t if (prop in xhr && _.isFunction(xhr[prop])) {\n\t replace(xhr, prop, function(orig) {\n\t return self.rollbar.wrap(orig);\n\t });\n\t }\n\t }\n\t\n\t if ('XMLHttpRequest' in this._window) {\n\t var xhrp = this._window.XMLHttpRequest.prototype;\n\t replace(xhrp, 'open', function(orig) {\n\t return function(method, url) {\n\t if (_.isType(url, 'string')) {\n\t this.__rollbar_xhr = {\n\t method: method,\n\t url: url,\n\t status_code: null,\n\t start_time_ms: _.now(),\n\t end_time_ms: null\n\t };\n\t }\n\t return orig.apply(this, arguments);\n\t };\n\t }, this.replacements, 'network');\n\t\n\t replace(xhrp, 'send', function(orig) {\n\t /* eslint-disable no-unused-vars */\n\t return function(data) {\n\t /* eslint-enable no-unused-vars */\n\t var xhr = this;\n\t\n\t function onreadystatechangeHandler() {\n\t if (xhr.__rollbar_xhr && (xhr.readyState === 1 || xhr.readyState === 4)) {\n\t if (xhr.__rollbar_xhr.status_code === null) {\n\t xhr.__rollbar_xhr.status_code = 0;\n\t var requestData = null;\n\t if (self.autoInstrument.networkRequestBody) {\n\t requestData = data;\n\t }\n\t xhr.__rollbar_event = self.telemeter.captureNetwork(xhr.__rollbar_xhr, 'xhr', undefined, requestData);\n\t }\n\t if (xhr.readyState === 1) {\n\t xhr.__rollbar_xhr.start_time_ms = _.now();\n\t } else {\n\t xhr.__rollbar_xhr.end_time_ms = _.now();\n\t\n\t var headers = null;\n\t if (self.autoInstrument.networkResponseHeaders) {\n\t var headersConfig = self.autoInstrument.networkResponseHeaders;\n\t headers = {};\n\t try {\n\t var header, i;\n\t if (headersConfig === true) {\n\t var allHeaders = xhr.getAllResponseHeaders();\n\t if (allHeaders) {\n\t var arr = allHeaders.trim().split(/[\\r\\n]+/);\n\t var parts, value;\n\t for (i=0; i < arr.length; i++) {\n\t parts = arr[i].split(': ');\n\t header = parts.shift();\n\t value = parts.join(': ');\n\t headers[header] = value;\n\t }\n\t }\n\t } else {\n\t for (i=0; i < headersConfig.length; i++) {\n\t header = headersConfig[i];\n\t headers[header] = xhr.getResponseHeader(header);\n\t }\n\t }\n\t } catch (e) {\n\t /* we ignore the errors here that could come from different\n\t * browser issues with the xhr methods */\n\t }\n\t }\n\t var body = null;\n\t if (self.autoInstrument.networkResponseBody) {\n\t try {\n\t body = xhr.responseText;\n\t } catch (e) {\n\t /* ignore errors from reading responseText */\n\t }\n\t }\n\t var response = null;\n\t if (body || headers) {\n\t response = {};\n\t if (body) {\n\t response.body = body;\n\t }\n\t if (headers) {\n\t response.headers = headers;\n\t }\n\t }\n\t if (response) {\n\t xhr.__rollbar_xhr.response = response;\n\t }\n\t }\n\t try {\n\t var code = xhr.status;\n\t code = code === 1223 ? 204 : code;\n\t xhr.__rollbar_xhr.status_code = code;\n\t xhr.__rollbar_event.level = self.telemeter.levelFromStatus(code);\n\t } catch (e) {\n\t /* ignore possible exception from xhr.status */\n\t }\n\t }\n\t }\n\t\n\t wrapProp('onload', xhr);\n\t wrapProp('onerror', xhr);\n\t wrapProp('onprogress', xhr);\n\t\n\t if ('onreadystatechange' in xhr && _.isFunction(xhr.onreadystatechange)) {\n\t replace(xhr, 'onreadystatechange', function(orig) {\n\t return self.rollbar.wrap(orig, undefined, onreadystatechangeHandler);\n\t });\n\t } else {\n\t xhr.onreadystatechange = onreadystatechangeHandler;\n\t }\n\t return orig.apply(this, arguments);\n\t }\n\t }, this.replacements, 'network');\n\t }\n\t\n\t if ('fetch' in this._window) {\n\t replace(this._window, 'fetch', function(orig) {\n\t /* eslint-disable no-unused-vars */\n\t return function(fn, t) {\n\t /* eslint-enable no-unused-vars */\n\t var args = new Array(arguments.length);\n\t for (var i=0, len=args.length; i < len; i++) {\n\t args[i] = arguments[i];\n\t }\n\t var input = args[0];\n\t var method = 'GET';\n\t var url;\n\t if (_.isType(input, 'string')) {\n\t url = input;\n\t } else if (input) {\n\t url = input.url;\n\t if (input.method) {\n\t method = input.method;\n\t }\n\t }\n\t if (args[1] && args[1].method) {\n\t method = args[1].method;\n\t }\n\t var metadata = {\n\t method: method,\n\t url: url,\n\t status_code: null,\n\t start_time_ms: _.now(),\n\t end_time_ms: null\n\t };\n\t var requestData = null;\n\t if (self.autoInstrument.networkRequestBody) {\n\t if (args[1] && args[1].body) {\n\t requestData = args[1].body;\n\t } else if (args[0] && !_.isType(args[0], 'string') && args[0].body) {\n\t requestData = args[0].body;\n\t }\n\t }\n\t self.telemeter.captureNetwork(metadata, 'fetch', undefined, requestData);\n\t return orig.apply(this, args).then(function (resp) {\n\t metadata.end_time_ms = _.now();\n\t metadata.status_code = resp.status;\n\t var headers = null;\n\t if (self.autoInstrument.networkResponseHeaders) {\n\t var headersConfig = self.autoInstrument.networkResponseHeaders;\n\t headers = {};\n\t try {\n\t if (headersConfig === true) {\n\t // This is unsupported in IE so we can't do it\n\t /*\n\t var allHeaders = resp.headers.entries();\n\t for (var pair of allHeaders) {\n\t headers[pair[0]] = pair[1];\n\t }\n\t */\n\t } else {\n\t for (var i=0; i < headersConfig.length; i++) {\n\t var header = headersConfig[i];\n\t headers[header] = resp.headers.get(header);\n\t }\n\t }\n\t } catch (e) {\n\t /* ignore probable IE errors */\n\t }\n\t }\n\t var response = null;\n\t if (headers) {\n\t response = {\n\t headers: headers\n\t };\n\t }\n\t if (response) {\n\t metadata.response = response;\n\t }\n\t return resp;\n\t });\n\t };\n\t }, this.replacements, 'network');\n\t }\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentConsole = function() {\n\t if (!('console' in this._window && this._window.console.log)) {\n\t return;\n\t }\n\t var b;\n\t while (this.replacements['log'].length) {\n\t b = this.replacements['log'].shift();\n\t this._window.console[b[0]] = b[1];\n\t }\n\t};\n\t\n\tInstrumenter.prototype.instrumentConsole = function() {\n\t if (!('console' in this._window && this._window.console.log)) {\n\t return;\n\t }\n\t\n\t var self = this;\n\t var c = this._window.console;\n\t\n\t function wrapConsole(method) {\n\t var orig = c[method];\n\t var origConsole = c;\n\t var level = method === 'warn' ? 'warning' : method;\n\t c[method] = function() {\n\t var args = Array.prototype.slice.call(arguments);\n\t var message = _.formatArgsAsString(args);\n\t self.telemeter.captureLog(message, level);\n\t if (orig) {\n\t Function.prototype.apply.call(orig, origConsole, args);\n\t }\n\t };\n\t self.replacements['log'].push([method, orig]);\n\t }\n\t var methods = ['debug','info','warn','error','log'];\n\t for (var i=0, len=methods.length; i < len; i++) {\n\t wrapConsole(methods[i]);\n\t }\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentDom = function() {\n\t if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n\t return;\n\t }\n\t this.removeListeners('dom');\n\t};\n\t\n\tInstrumenter.prototype.instrumentDom = function() {\n\t if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n\t return;\n\t }\n\t var clickHandler = this.handleClick.bind(this);\n\t var blurHandler = this.handleBlur.bind(this);\n\t this.addListener('dom', this._window, 'click', 'onclick', clickHandler, true);\n\t this.addListener('dom', this._window, 'blur', 'onfocusout', blurHandler, true);\n\t};\n\t\n\tInstrumenter.prototype.handleClick = function(evt) {\n\t try {\n\t var e = domUtil.getElementFromEvent(evt, this._document);\n\t var hasTag = e && e.tagName;\n\t var anchorOrButton = domUtil.isDescribedElement(e, 'a') || domUtil.isDescribedElement(e, 'button');\n\t if (hasTag && (anchorOrButton || domUtil.isDescribedElement(e, 'input', ['button', 'submit']))) {\n\t this.captureDomEvent('click', e);\n\t } else if (domUtil.isDescribedElement(e, 'input', ['checkbox', 'radio'])) {\n\t this.captureDomEvent('input', e, e.value, e.checked);\n\t }\n\t } catch (exc) {\n\t // TODO: Not sure what to do here\n\t }\n\t};\n\t\n\tInstrumenter.prototype.handleBlur = function(evt) {\n\t try {\n\t var e = domUtil.getElementFromEvent(evt, this._document);\n\t if (e && e.tagName) {\n\t if (domUtil.isDescribedElement(e, 'textarea')) {\n\t this.captureDomEvent('input', e, e.value);\n\t } else if (domUtil.isDescribedElement(e, 'select') && e.options && e.options.length) {\n\t this.handleSelectInputChanged(e);\n\t } else if (domUtil.isDescribedElement(e, 'input') && !domUtil.isDescribedElement(e, 'input', ['button', 'submit', 'hidden', 'checkbox', 'radio'])) {\n\t this.captureDomEvent('input', e, e.value);\n\t }\n\t }\n\t } catch (exc) {\n\t // TODO: Not sure what to do here\n\t }\n\t};\n\t\n\tInstrumenter.prototype.handleSelectInputChanged = function(elem) {\n\t if (elem.multiple) {\n\t for (var i = 0; i < elem.options.length; i++) {\n\t if (elem.options[i].selected) {\n\t this.captureDomEvent('input', elem, elem.options[i].value);\n\t }\n\t }\n\t } else if (elem.selectedIndex >= 0 && elem.options[elem.selectedIndex]) {\n\t this.captureDomEvent('input', elem, elem.options[elem.selectedIndex].value);\n\t }\n\t};\n\t\n\tInstrumenter.prototype.captureDomEvent = function(subtype, element, value, isChecked) {\n\t if (value !== undefined) {\n\t if (this.scrubTelemetryInputs || (domUtil.getElementType(element) === 'password')) {\n\t value = '[scrubbed]';\n\t } else if (this.telemetryScrubber) {\n\t var description = domUtil.describeElement(element);\n\t if (this.telemetryScrubber(description)) {\n\t value = '[scrubbed]';\n\t }\n\t }\n\t }\n\t var elementString = domUtil.elementArrayToString(domUtil.treeToArray(element));\n\t this.telemeter.captureDom(subtype, elementString, value, isChecked);\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentNavigation = function() {\n\t var chrome = this._window.chrome;\n\t var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n\t // See https://github.com/angular/angular.js/pull/13945/files\n\t var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n\t if (!hasPushState) {\n\t return;\n\t }\n\t restore(this.replacements, 'navigation');\n\t};\n\t\n\tInstrumenter.prototype.instrumentNavigation = function() {\n\t var chrome = this._window.chrome;\n\t var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n\t // See https://github.com/angular/angular.js/pull/13945/files\n\t var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n\t if (!hasPushState) {\n\t return;\n\t }\n\t var self = this;\n\t replace(this._window, 'onpopstate', function(orig) {\n\t return function() {\n\t var current = self._location.href;\n\t self.handleUrlChange(self._lastHref, current);\n\t if (orig) {\n\t orig.apply(this, arguments);\n\t }\n\t };\n\t }, this.replacements, 'navigation');\n\t\n\t replace(this._window.history, 'pushState', function(orig) {\n\t return function() {\n\t var url = arguments.length > 2 ? arguments[2] : undefined;\n\t if (url) {\n\t self.handleUrlChange(self._lastHref, url + '');\n\t }\n\t return orig.apply(this, arguments);\n\t };\n\t }, this.replacements, 'navigation');\n\t};\n\t\n\tInstrumenter.prototype.handleUrlChange = function(from, to) {\n\t var parsedHref = urlparser.parse(this._location.href);\n\t var parsedTo = urlparser.parse(to);\n\t var parsedFrom = urlparser.parse(from);\n\t this._lastHref = to;\n\t if (parsedHref.protocol === parsedTo.protocol && parsedHref.host === parsedTo.host) {\n\t to = parsedTo.path + (parsedTo.hash || '');\n\t }\n\t if (parsedHref.protocol === parsedFrom.protocol && parsedHref.host === parsedFrom.host) {\n\t from = parsedFrom.path + (parsedFrom.hash || '');\n\t }\n\t this.telemeter.captureNavigation(from, to);\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentConnectivity = function() {\n\t if (!('addEventListener' in this._window || 'body' in this._document)) {\n\t return;\n\t }\n\t if (this._window.addEventListener) {\n\t this.removeListeners('connectivity');\n\t } else {\n\t restore(this.replacements, 'connectivity');\n\t }\n\t};\n\t\n\tInstrumenter.prototype.instrumentConnectivity = function() {\n\t if (!('addEventListener' in this._window || 'body' in this._document)) {\n\t return;\n\t }\n\t if (this._window.addEventListener) {\n\t this.addListener('connectivity', this._window, 'online', undefined, function() {\n\t this.telemeter.captureConnectivityChange('online');\n\t }.bind(this), true);\n\t this.addListener('connectivity', this._window, 'offline', undefined, function() {\n\t this.telemeter.captureConnectivityChange('offline');\n\t }.bind(this), true);\n\t } else {\n\t var self = this;\n\t replace(this._document.body, 'ononline', function(orig) {\n\t return function() {\n\t self.telemeter.captureConnectivityChange('online');\n\t if (orig) {\n\t orig.apply(this, arguments);\n\t }\n\t }\n\t }, this.replacements, 'connectivity');\n\t replace(this._document.body, 'onoffline', function(orig) {\n\t return function() {\n\t self.telemeter.captureConnectivityChange('offline');\n\t if (orig) {\n\t orig.apply(this, arguments);\n\t }\n\t }\n\t }, this.replacements, 'connectivity');\n\t }\n\t};\n\t\n\tInstrumenter.prototype.addListener = function(section, obj, type, altType, handler, capture) {\n\t if (obj.addEventListener) {\n\t obj.addEventListener(type, handler, capture);\n\t this.eventRemovers[section].push(function() {\n\t obj.removeEventListener(type, handler, capture);\n\t });\n\t } else if (altType) {\n\t obj.attachEvent(altType, handler);\n\t this.eventRemovers[section].push(function() {\n\t obj.detachEvent(altType, handler);\n\t });\n\t }\n\t};\n\t\n\tInstrumenter.prototype.removeListeners = function(section) {\n\t var r;\n\t while (this.eventRemovers[section].length) {\n\t r = this.eventRemovers[section].shift();\n\t r();\n\t }\n\t};\n\t\n\tmodule.exports = Instrumenter;\n\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tfunction getElementType(e) {\n\t return (e.getAttribute('type') || '').toLowerCase();\n\t}\n\t\n\tfunction isDescribedElement(element, type, subtypes) {\n\t if (element.tagName.toLowerCase() !== type.toLowerCase()) {\n\t return false;\n\t }\n\t if (!subtypes) {\n\t return true;\n\t }\n\t element = getElementType(element);\n\t for (var i = 0; i < subtypes.length; i++) {\n\t if (subtypes[i] === element) {\n\t return true;\n\t }\n\t }\n\t return false;\n\t}\n\t\n\tfunction getElementFromEvent(evt, doc) {\n\t if (evt.target) {\n\t return evt.target;\n\t }\n\t if (doc && doc.elementFromPoint) {\n\t return doc.elementFromPoint(evt.clientX, evt.clientY);\n\t }\n\t return undefined;\n\t}\n\t\n\tfunction treeToArray(elem) {\n\t var MAX_HEIGHT = 5;\n\t var out = [];\n\t var nextDescription;\n\t for (var height = 0; elem && height < MAX_HEIGHT; height++) {\n\t nextDescription = describeElement(elem);\n\t if (nextDescription.tagName === 'html') {\n\t break;\n\t }\n\t out.unshift(nextDescription);\n\t elem = elem.parentNode;\n\t }\n\t return out;\n\t}\n\t\n\tfunction elementArrayToString(a) {\n\t var MAX_LENGTH = 80;\n\t var separator = ' > ', separatorLength = separator.length;\n\t var out = [], len = 0, nextStr, totalLength;\n\t\n\t for (var i = a.length - 1; i >= 0; i--) {\n\t nextStr = descriptionToString(a[i]);\n\t totalLength = len + (out.length * separatorLength) + nextStr.length;\n\t if (i < a.length - 1 && totalLength >= MAX_LENGTH + 3) {\n\t out.unshift('...');\n\t break;\n\t }\n\t out.unshift(nextStr);\n\t len += nextStr.length;\n\t }\n\t return out.join(separator);\n\t}\n\t\n\tfunction descriptionToString(desc) {\n\t if (!desc || !desc.tagName) {\n\t return '';\n\t }\n\t var out = [desc.tagName];\n\t if (desc.id) {\n\t out.push('#' + desc.id);\n\t }\n\t if (desc.classes) {\n\t out.push('.' + desc.classes.join('.'));\n\t }\n\t for (var i = 0; i < desc.attributes.length; i++) {\n\t out.push('[' + desc.attributes[i].key + '=\"' + desc.attributes[i].value + '\"]');\n\t }\n\t\n\t return out.join('');\n\t}\n\t\n\t/**\n\t * Input: a dom element\n\t * Output: null if tagName is falsey or input is falsey, else\n\t * {\n\t * tagName: String,\n\t * id: String | undefined,\n\t * classes: [String] | undefined,\n\t * attributes: [\n\t * {\n\t * key: OneOf(type, name, title, alt),\n\t * value: String\n\t * }\n\t * ]\n\t * }\n\t */\n\tfunction describeElement(elem) {\n\t if (!elem || !elem.tagName) {\n\t return null;\n\t }\n\t var out = {}, className, key, attr, i;\n\t out.tagName = elem.tagName.toLowerCase();\n\t if (elem.id) {\n\t out.id = elem.id;\n\t }\n\t className = elem.className;\n\t if (className && (typeof className === 'string')) {\n\t out.classes = className.split(/\\s+/);\n\t }\n\t var attributes = ['type', 'name', 'title', 'alt'];\n\t out.attributes = [];\n\t for (i = 0; i < attributes.length; i++) {\n\t key = attributes[i];\n\t attr = elem.getAttribute(key);\n\t if (attr) {\n\t out.attributes.push({key: key, value: attr});\n\t }\n\t }\n\t return out;\n\t}\n\t\n\tmodule.exports = {\n\t describeElement: describeElement,\n\t descriptionToString: descriptionToString,\n\t elementArrayToString: elementArrayToString,\n\t treeToArray: treeToArray,\n\t getElementFromEvent: getElementFromEvent,\n\t isDescribedElement: isDescribedElement,\n\t getElementType: getElementType\n\t};\n\n\n/***/ })\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// rollbar.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap fb6758deed6bc51b7d9c","'use strict';\n\nvar rollbar = require('../rollbar');\n\nvar options = (typeof window !== 'undefined') && window._rollbarConfig;\nvar alias = options && options.globalAlias || 'Rollbar';\nvar shimRunning = (typeof window !== 'undefined') && window[alias] && typeof window[alias].shimId === 'function' && window[alias].shimId() !== undefined;\n\nif ((typeof window !== 'undefined') && !window._rollbarStartTime) {\n window._rollbarStartTime = (new Date()).getTime();\n}\n\nif (!shimRunning && options) {\n var Rollbar = new rollbar(options);\n window[alias] = Rollbar;\n} else if (typeof window !== 'undefined') {\n window.rollbar = rollbar;\n window._rollbarDidLoad = true;\n} else if (typeof self !== 'undefined') {\n self.rollbar = rollbar;\n self._rollbarDidLoad = true;\n}\n\nmodule.exports = rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/bundles/rollbar.js\n// module id = 0\n// module chunks = 0","'use strict';\n\nvar Client = require('../rollbar');\nvar _ = require('../utility');\nvar API = require('../api');\nvar logger = require('./logger');\nvar globals = require('./globalSetup');\n\nvar transport = require('./transport');\nvar urllib = require('./url');\n\nvar transforms = require('./transforms');\nvar sharedTransforms = require('../transforms');\nvar predicates = require('./predicates');\nvar sharedPredicates = require('../predicates');\nvar errorParser = require('./errorParser');\nvar Instrumenter = require('./telemetry');\n\nfunction Rollbar(options, client) {\n this.options = _.extend(true, defaultOptions, options);\n var api = new API(this.options, transport, urllib);\n this.client = client || new Client(this.options, api, logger, 'browser');\n\n var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n var gDocument = (typeof document != 'undefined') && document;\n addTransformsToNotifier(this.client.notifier);\n addPredicatesToQueue(this.client.queue);\n if (this.options.captureUncaught || this.options.handleUncaughtExceptions) {\n globals.captureUncaughtExceptions(gWindow, this);\n globals.wrapGlobals(gWindow, this);\n }\n if (this.options.captureUnhandledRejections || this.options.handleUnhandledRejections) {\n globals.captureUnhandledRejections(gWindow, this);\n }\n\n this.instrumenter = new Instrumenter(this.options, this.client.telemeter, this, gWindow, gDocument);\n this.instrumenter.instrument();\n}\n\nvar _instance = null;\nRollbar.init = function(options, client) {\n if (_instance) {\n return _instance.global(options).configure(options);\n }\n _instance = new Rollbar(options, client);\n return _instance;\n};\n\nfunction handleUninitialized(maybeCallback) {\n var message = 'Rollbar is not initialized';\n logger.error(message);\n if (maybeCallback) {\n maybeCallback(new Error(message));\n }\n}\n\nRollbar.prototype.global = function(options) {\n this.client.global(options);\n return this;\n};\nRollbar.global = function(options) {\n if (_instance) {\n return _instance.global(options);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.extend(true, {}, oldOptions, options, payload);\n this.client.configure(options, payloadData);\n this.instrumenter.configure(options);\n return this;\n};\nRollbar.configure = function(options, payloadData) {\n if (_instance) {\n return _instance.configure(options, payloadData);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.lastError = function() {\n return this.client.lastError;\n};\nRollbar.lastError = function() {\n if (_instance) {\n return _instance.lastError();\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.log = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.log(item);\n return {uuid: uuid};\n};\nRollbar.log = function() {\n if (_instance) {\n return _instance.log.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.debug = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.debug(item);\n return {uuid: uuid};\n};\nRollbar.debug = function() {\n if (_instance) {\n return _instance.debug.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.info = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.info(item);\n return {uuid: uuid};\n};\nRollbar.info = function() {\n if (_instance) {\n return _instance.info.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warn = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warn(item);\n return {uuid: uuid};\n};\nRollbar.warn = function() {\n if (_instance) {\n return _instance.warn.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warning = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warning(item);\n return {uuid: uuid};\n};\nRollbar.warning = function() {\n if (_instance) {\n return _instance.warning.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.error = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.error(item);\n return {uuid: uuid};\n};\nRollbar.error = function() {\n if (_instance) {\n return _instance.error.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.critical = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.critical(item);\n return {uuid: uuid};\n};\nRollbar.critical = function() {\n if (_instance) {\n return _instance.critical.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.handleUncaughtException = function(message, url, lineno, colno, error, context) {\n var item;\n var stackInfo = _.makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n 'onerror',\n 'uncaught exception',\n errorParser\n );\n if (_.isError(error)) {\n item = this._createItem([message, error, context]);\n item._unhandledStackInfo = stackInfo;\n } else if (_.isError(url)) {\n item = this._createItem([message, url, context]);\n item._unhandledStackInfo = stackInfo;\n } else {\n item = this._createItem([message, context]);\n item.stackInfo = stackInfo;\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n this.client.log(item);\n};\n\nRollbar.prototype.handleUnhandledRejection = function(reason, promise) {\n var message = 'unhandled rejection was null or undefined!';\n message = reason ? (reason.message || String(reason)) : message;\n var context = (reason && reason._rollbarContext) || (promise && promise._rollbarContext);\n\n var item;\n if (_.isError(reason)) {\n item = this._createItem([message, reason, context]);\n } else {\n item = this._createItem([message, reason, context]);\n item.stackInfo = _.makeUnhandledStackInfo(\n message,\n '',\n 0,\n 0,\n null,\n 'unhandledrejection',\n '',\n errorParser\n );\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n item._originalArgs = item._originalArgs || [];\n item._originalArgs.push(promise);\n this.client.log(item);\n};\n\nRollbar.prototype.wrap = function(f, context, _before) {\n try {\n var ctxFn;\n if(_.isFunction(context)) {\n ctxFn = context;\n } else {\n ctxFn = function() { return context || {}; };\n }\n\n if (!_.isFunction(f)) {\n return f;\n }\n\n if (f._isWrap) {\n return f;\n }\n\n if (!f._rollbar_wrapped) {\n f._rollbar_wrapped = function () {\n if (_before && _.isFunction(_before)) {\n _before.apply(this, arguments);\n }\n try {\n return f.apply(this, arguments);\n } catch(exc) {\n var e = exc;\n if (_.isType(e, 'string')) {\n e = new String(e);\n }\n e._rollbarContext = ctxFn() || {};\n e._rollbarContext._wrappedSource = f.toString();\n\n window._rollbarWrappedError = e;\n throw e;\n }\n };\n\n f._rollbar_wrapped._isWrap = true;\n\n if (f.hasOwnProperty) {\n for (var prop in f) {\n if (f.hasOwnProperty(prop)) {\n f._rollbar_wrapped[prop] = f[prop];\n }\n }\n }\n }\n\n return f._rollbar_wrapped;\n } catch (e) {\n // Return the original function if the wrap fails.\n return f;\n }\n};\nRollbar.wrap = function(f, context) {\n if (_instance) {\n return _instance.wrap(f, context);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.captureEvent = function(metadata, level) {\n return this.client.captureEvent(metadata, level);\n};\nRollbar.captureEvent = function(metadata, level) {\n if (_instance) {\n return _instance.captureEvent(metadata, level);\n } else {\n handleUninitialized();\n }\n};\n\n// The following two methods are used internally and are not meant for public use\nRollbar.prototype.captureDomContentLoaded = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureLoad(ts);\n};\n\n/* Internal */\n\nfunction addTransformsToNotifier(notifier) {\n notifier\n .addTransform(transforms.handleItemWithError)\n .addTransform(transforms.ensureItemHasSomethingToSay)\n .addTransform(transforms.addBaseInfo)\n .addTransform(transforms.addRequestInfo(window))\n .addTransform(transforms.addClientInfo(window))\n .addTransform(transforms.addPluginInfo(window))\n .addTransform(transforms.addBody)\n .addTransform(sharedTransforms.addMessageWithError)\n .addTransform(sharedTransforms.addTelemetryData)\n .addTransform(sharedTransforms.addConfigToPayload)\n .addTransform(transforms.scrubPayload)\n .addTransform(sharedTransforms.userTransform(logger))\n .addTransform(sharedTransforms.itemToPayload);\n}\n\nfunction addPredicatesToQueue(queue) {\n queue\n .addPredicate(sharedPredicates.checkLevel)\n .addPredicate(predicates.checkIgnore)\n .addPredicate(sharedPredicates.userCheckIgnore(logger))\n .addPredicate(sharedPredicates.urlIsNotBlacklisted(logger))\n .addPredicate(sharedPredicates.urlIsWhitelisted(logger))\n .addPredicate(sharedPredicates.messageIsIgnored(logger));\n}\n\nRollbar.prototype._createItem = function(args) {\n return _.createItem(args, logger, this);\n};\n\nfunction _getFirstFunction(args) {\n for (var i = 0, len = args.length; i < len; ++i) {\n if (_.isFunction(args[i])) {\n return args[i];\n }\n }\n return undefined;\n}\n\n/* global __NOTIFIER_VERSION__:false */\n/* global __DEFAULT_BROWSER_SCRUB_FIELDS__:false */\n/* global __DEFAULT_LOG_LEVEL__:false */\n/* global __DEFAULT_REPORT_LEVEL__:false */\n/* global __DEFAULT_UNCAUGHT_ERROR_LEVEL:false */\n/* global __DEFAULT_ENDPOINT__:false */\n\nvar defaultOptions = {\n version: __NOTIFIER_VERSION__,\n scrubFields: __DEFAULT_BROWSER_SCRUB_FIELDS__,\n logLevel: __DEFAULT_LOG_LEVEL__,\n reportLevel: __DEFAULT_REPORT_LEVEL__,\n uncaughtErrorLevel: __DEFAULT_UNCAUGHT_ERROR_LEVEL,\n endpoint: __DEFAULT_ENDPOINT__,\n verbose: false,\n enabled: true,\n sendConfig: false,\n includeItemsInTelemetry: true\n};\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/rollbar.js\n// module id = 1\n// module chunks = 0","'use strict';\n\nvar RateLimiter = require('./rateLimiter');\nvar Queue = require('./queue');\nvar Notifier = require('./notifier');\nvar Telemeter = require('./telemetry');\nvar _ = require('./utility');\n\n/*\n * Rollbar - the interface to Rollbar\n *\n * @param options\n * @param api\n * @param logger\n */\nfunction Rollbar(options, api, logger, platform) {\n this.options = _.extend(true, {}, options);\n this.logger = logger;\n Rollbar.rateLimiter.configureGlobal(this.options);\n Rollbar.rateLimiter.setPlatformOptions(platform, this.options);\n this.queue = new Queue(Rollbar.rateLimiter, api, logger, this.options);\n this.notifier = new Notifier(this.queue, this.options);\n this.telemeter = new Telemeter(this.options);\n this.lastError = null;\n}\n\nvar defaultOptions = {\n maxItems: 0,\n itemsPerMinute: 60\n};\n\nRollbar.rateLimiter = new RateLimiter(defaultOptions);\n\nRollbar.prototype.global = function(options) {\n Rollbar.rateLimiter.configureGlobal(options);\n return this;\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n this.notifier && this.notifier.configure(options);\n this.telemeter && this.telemeter.configure(options);\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.extend(true, {}, oldOptions, options, payload);\n this.global(this.options);\n return this;\n};\n\nRollbar.prototype.log = function(item) {\n var level = this._defaultLogLevel();\n return this._log(level, item);\n};\n\nRollbar.prototype.debug = function(item) {\n this._log('debug', item);\n};\n\nRollbar.prototype.info = function(item) {\n this._log('info', item);\n};\n\nRollbar.prototype.warn = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.warning = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.error = function(item) {\n this._log('error', item);\n};\n\nRollbar.prototype.critical = function(item) {\n this._log('critical', item);\n};\n\nRollbar.prototype.wait = function(callback) {\n this.queue.wait(callback);\n};\n\nRollbar.prototype.captureEvent = function(metadata, level) {\n return this.telemeter.captureEvent(metadata, level);\n};\n\nRollbar.prototype.captureDomContentLoaded = function(ts) {\n return this.telemeter.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(ts) {\n return this.telemeter.captureLoad(ts);\n};\n\n/* Internal */\n\nRollbar.prototype._log = function(defaultLevel, item) {\n if (this._sameAsLastError(item)) {\n if (item.callback) {\n item.callback();\n }\n return;\n }\n try {\n var callback = null;\n if (item.callback) {\n callback = item.callback;\n delete item.callback;\n }\n item.level = item.level || defaultLevel;\n this.telemeter._captureRollbarItem(item);\n item.telemetryEvents = this.telemeter.copyEvents();\n this.notifier.log(item, callback);\n } catch (e) {\n this.logger.error(e)\n }\n};\n\nRollbar.prototype._defaultLogLevel = function() {\n return this.options.logLevel || 'debug';\n};\n\nRollbar.prototype._sameAsLastError = function(item) {\n if (this.lastError && this.lastError === item.err) {\n return true;\n }\n this.lastError = item.err;\n return false;\n};\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rollbar.js\n// module id = 2\n// module chunks = 0","'use strict';\n\n/*\n * RateLimiter - an object that encapsulates the logic for counting items sent to Rollbar\n *\n * @param options - the same options that are accepted by configureGlobal offered as a convenience\n */\nfunction RateLimiter(options) {\n this.startTime = (new Date()).getTime();\n this.counter = 0;\n this.perMinCounter = 0;\n this.platform = null;\n this.platformOptions = {};\n this.configureGlobal(options);\n}\n\nRateLimiter.globalSettings = {\n startTime: (new Date()).getTime(),\n maxItems: undefined,\n itemsPerMinute: undefined\n};\n\n/*\n * configureGlobal - set the global rate limiter options\n *\n * @param options - Only the following values are recognized:\n * startTime: a timestamp of the form returned by (new Date()).getTime()\n * maxItems: the maximum items\n * itemsPerMinute: the max number of items to send in a given minute\n */\nRateLimiter.prototype.configureGlobal = function(options) {\n if (options.startTime !== undefined) {\n RateLimiter.globalSettings.startTime = options.startTime;\n }\n if (options.maxItems !== undefined) {\n RateLimiter.globalSettings.maxItems = options.maxItems;\n }\n if (options.itemsPerMinute !== undefined) {\n RateLimiter.globalSettings.itemsPerMinute = options.itemsPerMinute;\n }\n};\n\n/*\n * shouldSend - determine if we should send a given item based on rate limit settings\n *\n * @param item - the item we are about to send\n * @returns An object with the following structure:\n * error: (Error|null)\n * shouldSend: bool\n * payload: (Object|null)\n * If shouldSend is false, the item passed as a parameter should not be sent to Rollbar, and\n * exactly one of error or payload will be non-null. If error is non-null, the returned Error will\n * describe the situation, but it means that we were already over a rate limit (either globally or\n * per minute) when this item was checked. If error is null, and therefore payload is non-null, it\n * means this item put us over the global rate limit and the payload should be sent to Rollbar in\n * place of the passed in item.\n */\nRateLimiter.prototype.shouldSend = function(item, now) {\n now = now || (new Date()).getTime();\n if (now - this.startTime >= 60000) {\n this.startTime = now;\n this.perMinCounter = 0;\n }\n\n var globalRateLimit = RateLimiter.globalSettings.maxItems;\n var globalRateLimitPerMin = RateLimiter.globalSettings.itemsPerMinute;\n\n if (checkRate(item, globalRateLimit, this.counter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimit + ' max items reached', false);\n } else if (checkRate(item, globalRateLimitPerMin, this.perMinCounter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimitPerMin + ' items per minute reached', false);\n }\n this.counter++;\n this.perMinCounter++;\n\n var shouldSend = !checkRate(item, globalRateLimit, this.counter);\n var perMinute = shouldSend;\n shouldSend = shouldSend && !checkRate(item, globalRateLimitPerMin, this.perMinCounter);\n return shouldSendValue(this.platform, this.platformOptions, null, shouldSend, globalRateLimit, globalRateLimitPerMin, perMinute);\n};\n\nRateLimiter.prototype.setPlatformOptions = function(platform, options) {\n this.platform = platform;\n this.platformOptions = options;\n};\n\n/* Helpers */\n\nfunction checkRate(item, limit, counter) {\n return !item.ignoreRateLimit && limit >= 1 && counter > limit;\n}\n\nfunction shouldSendValue(platform, options, error, shouldSend, globalRateLimit, limitPerMin, perMinute) {\n var payload = null;\n if (error) {\n error = new Error(error);\n }\n if (!error && !shouldSend) {\n payload = rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute);\n }\n return {error: error, shouldSend: shouldSend, payload: payload};\n}\n\nfunction rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute) {\n var environment = options.environment || (options.payload && options.payload.environment);\n var msg;\n if (perMinute) {\n msg = 'item per minute limit reached, ignoring errors until timeout';\n } else {\n msg = 'maxItems has been hit, ignoring errors until reset.';\n }\n var item = {\n body: {\n message: {\n body: msg,\n extra: {\n maxItems: globalRateLimit,\n itemsPerMinute: limitPerMin\n }\n }\n },\n language: 'javascript',\n environment: environment,\n notifier: {\n version: (options.notifier && options.notifier.version) || options.version\n }\n };\n if (platform === 'browser') {\n item.platform = 'browser';\n item.framework = 'browser-js';\n item.notifier.name = 'rollbar-browser-js';\n } else if (platform === 'server') {\n item.framework = options.framework || 'node-js';\n item.notifier.name = options.notifier.name;\n } else if (platform === 'react-native') {\n item.framework = options.framework || 'react-native';\n item.notifier.name = options.notifier.name;\n }\n return item;\n}\n\nmodule.exports = RateLimiter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rateLimiter.js\n// module id = 3\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Queue - an object which handles which handles a queue of items to be sent to Rollbar.\n * This object handles rate limiting via a passed in rate limiter, retries based on connection\n * errors, and filtering of items based on a set of configurable predicates. The communication to\n * the backend is performed via a given API object.\n *\n * @param rateLimiter - An object which conforms to the interface\n * rateLimiter.shouldSend(item) -> bool\n * @param api - An object which conforms to the interface\n * api.postItem(payload, function(err, response))\n * @param logger - An object used to log verbose messages if desired\n * @param options - see Queue.prototype.configure\n */\nfunction Queue(rateLimiter, api, logger, options) {\n this.rateLimiter = rateLimiter;\n this.api = api;\n this.logger = logger;\n this.options = options;\n this.predicates = [];\n this.pendingItems = [];\n this.pendingRequests = [];\n this.retryQueue = [];\n this.retryHandle = null;\n this.waitCallback = null;\n this.waitIntervalID = null;\n}\n\n/*\n * configure - updates the options this queue uses\n *\n * @param options\n */\nQueue.prototype.configure = function(options) {\n this.api && this.api.configure(options);\n var oldOptions = this.options;\n this.options = _.extend(true, {}, oldOptions, options);\n return this;\n};\n\n/*\n * addPredicate - adds a predicate to the end of the list of predicates for this queue\n *\n * @param predicate - function(item, options) -> (bool|{err: Error})\n * Returning true means that this predicate passes and the item is okay to go on the queue\n * Returning false means do not add the item to the queue, but it is not an error\n * Returning {err: Error} means do not add the item to the queue, and the given error explains why\n * Returning {err: undefined} is equivalent to returning true but don't do that\n */\nQueue.prototype.addPredicate = function(predicate) {\n if (_.isFunction(predicate)) {\n this.predicates.push(predicate);\n }\n return this;\n};\n\nQueue.prototype.addPendingItem = function(item) {\n this.pendingItems.push(item);\n};\n\nQueue.prototype.removePendingItem = function(item) {\n var idx = this.pendingItems.indexOf(item);\n if (idx !== -1) {\n this.pendingItems.splice(idx, 1);\n }\n};\n\n/*\n * addItem - Send an item to the Rollbar API if all of the predicates are satisfied\n *\n * @param item - The payload to send to the backend\n * @param callback - function(error, repsonse) which will be called with the response from the API\n * in the case of a success, otherwise response will be null and error will have a value. If both\n * error and response are null then the item was stopped by a predicate which did not consider this\n * to be an error condition, but nonetheless did not send the item to the API.\n * @param originalError - The original error before any transformations that is to be logged if any\n */\nQueue.prototype.addItem = function(item, callback, originalError, originalItem) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() { return; };\n }\n var predicateResult = this._applyPredicates(item);\n if (predicateResult.stop) {\n this.removePendingItem(originalItem);\n callback(predicateResult.err);\n return;\n }\n this._maybeLog(item, originalError);\n this.removePendingItem(originalItem);\n this.pendingRequests.push(item);\n try {\n this._makeApiRequest(item, function(err, resp) {\n this._dequeuePendingRequest(item);\n callback(err, resp);\n }.bind(this));\n } catch (e) {\n this._dequeuePendingRequest(item);\n callback(e);\n }\n};\n\n/*\n * wait - Stop any further errors from being added to the queue, and get called back when all items\n * currently processing have finished sending to the backend.\n *\n * @param callback - function() called when all pending items have been sent\n */\nQueue.prototype.wait = function(callback) {\n if (!_.isFunction(callback)) {\n return;\n }\n this.waitCallback = callback;\n if (this._maybeCallWait()) {\n return;\n }\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitIntervalID = setInterval(function() {\n this._maybeCallWait();\n }.bind(this), 500);\n};\n\n/* _applyPredicates - Sequentially applies the predicates that have been added to the queue to the\n * given item with the currently configured options.\n *\n * @param item - An item in the queue\n * @returns {stop: bool, err: (Error|null)} - stop being true means do not add item to the queue,\n * the error value should be passed up to a callbak if we are stopping.\n */\nQueue.prototype._applyPredicates = function(item) {\n var p = null;\n for (var i = 0, len = this.predicates.length; i < len; i++) {\n p = this.predicates[i](item, this.options);\n if (!p || p.err !== undefined) {\n return {stop: true, err: p.err};\n }\n }\n return {stop: false, err: null};\n};\n\n/*\n * _makeApiRequest - Send an item to Rollbar, callback when done, if there is an error make an\n * effort to retry if we are configured to do so.\n *\n * @param item - an item ready to send to the backend\n * @param callback - function(err, response)\n */\nQueue.prototype._makeApiRequest = function(item, callback) {\n var rateLimitResponse = this.rateLimiter.shouldSend(item);\n if (rateLimitResponse.shouldSend) {\n this.api.postItem(item, function(err, resp) {\n if (err) {\n this._maybeRetry(err, item, callback);\n } else {\n callback(err, resp);\n }\n }.bind(this));\n } else if (rateLimitResponse.error) {\n callback(rateLimitResponse.error);\n } else {\n this.api.postItem(rateLimitResponse.payload, callback);\n }\n};\n\n// These are errors basically mean there is no internet connection\nvar RETRIABLE_ERRORS = ['ECONNRESET', 'ENOTFOUND', 'ESOCKETTIMEDOUT', 'ETIMEDOUT', 'ECONNREFUSED', 'EHOSTUNREACH', 'EPIPE', 'EAI_AGAIN'];\n\n/*\n * _maybeRetry - Given the error returned by the API, decide if we should retry or just callback\n * with the error.\n *\n * @param err - an error returned by the API transport\n * @param item - the item that was trying to be sent when this error occured\n * @param callback - function(err, response)\n */\nQueue.prototype._maybeRetry = function(err, item, callback) {\n var shouldRetry = false;\n if (this.options.retryInterval) {\n for (var i = 0, len = RETRIABLE_ERRORS.length; i < len; i++) {\n if (err.code === RETRIABLE_ERRORS[i]) {\n shouldRetry = true;\n break;\n }\n }\n }\n if (shouldRetry) {\n this._retryApiRequest(item, callback);\n } else {\n callback(err);\n }\n};\n\n/*\n * _retryApiRequest - Add an item and a callback to a queue and possibly start a timer to process\n * that queue based on the retryInterval in the options for this queue.\n *\n * @param item - an item that failed to send due to an error we deem retriable\n * @param callback - function(err, response)\n */\nQueue.prototype._retryApiRequest = function(item, callback) {\n this.retryQueue.push({item: item, callback: callback});\n\n if (!this.retryHandle) {\n this.retryHandle = setInterval(function() {\n while (this.retryQueue.length) {\n var retryObject = this.retryQueue.shift();\n this._makeApiRequest(retryObject.item, retryObject.callback);\n }\n }.bind(this), this.options.retryInterval);\n }\n};\n\n/*\n * _dequeuePendingRequest - Removes the item from the pending request queue, this queue is used to\n * enable to functionality of providing a callback that clients can pass to `wait` to be notified\n * when the pending request queue has been emptied. This must be called when the API finishes\n * processing this item. If a `wait` callback is configured, it is called by this function.\n *\n * @param item - the item previously added to the pending request queue\n */\nQueue.prototype._dequeuePendingRequest = function(item) {\n var idx = this.pendingRequests.indexOf(item);\n if (idx !== -1) {\n this.pendingRequests.splice(idx, 1);\n this._maybeCallWait();\n }\n};\n\nQueue.prototype._maybeLog = function(data, originalError) {\n if (this.logger && this.options.verbose) {\n var message = originalError;\n message = message || _.get(data, 'body.trace.exception.message');\n message = message || _.get(data, 'body.trace_chain.0.exception.message');\n if (message) {\n this.logger.error(message);\n return;\n }\n message = _.get(data, 'body.message.body');\n if (message) {\n this.logger.log(message);\n }\n }\n};\n\nQueue.prototype._maybeCallWait = function() {\n if (_.isFunction(this.waitCallback) && this.pendingItems.length === 0 && this.pendingRequests.length === 0) {\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitCallback();\n return true;\n }\n return false;\n};\n\nmodule.exports = Queue;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/queue.js\n// module id = 4\n// module chunks = 0","'use strict';\n\nvar extend = require('extend');\n\nvar RollbarJSON = {};\nvar __initRollbarJSON = false;\nfunction setupJSON() {\n if (__initRollbarJSON) {\n return;\n }\n __initRollbarJSON = true;\n\n if (isDefined(JSON)) {\n if (isNativeFunction(JSON.stringify)) {\n RollbarJSON.stringify = JSON.stringify;\n }\n if (isNativeFunction(JSON.parse)) {\n RollbarJSON.parse = JSON.parse;\n }\n }\n if (!isFunction(RollbarJSON.stringify) || !isFunction(RollbarJSON.parse)) {\n var setupCustomJSON = require('../vendor/JSON-js/json3.js');\n setupCustomJSON(RollbarJSON);\n }\n}\nsetupJSON();\n\n/*\n * isType - Given a Javascript value and a string, returns true if the type of the value matches the\n * given string.\n *\n * @param x - any value\n * @param t - a lowercase string containing one of the following type names:\n * - undefined\n * - null\n * - error\n * - number\n * - boolean\n * - string\n * - symbol\n * - function\n * - object\n * - array\n * @returns true if x is of type t, otherwise false\n */\nfunction isType(x, t) {\n return t === typeName(x);\n}\n\n/*\n * typeName - Given a Javascript value, returns the type of the object as a string\n */\nfunction typeName(x) {\n var name = typeof x;\n if (name !== 'object') {\n return name;\n }\n if (!x) {\n return 'null';\n }\n if (x instanceof Error) {\n return 'error';\n }\n return ({}).toString.call(x).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n}\n\n/* isFunction - a convenience function for checking if a value is a function\n *\n * @param f - any value\n * @returns true if f is a function, otherwise false\n */\nfunction isFunction(f) {\n return isType(f, 'function');\n}\n\n/* isNativeFunction - a convenience function for checking if a value is a native JS function\n *\n * @param f - any value\n * @returns true if f is a native JS function, otherwise false\n */\nfunction isNativeFunction(f) {\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n var funcMatchString = Function.prototype.toString.call(Object.prototype.hasOwnProperty)\n .replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?');\n var reIsNative = RegExp('^' + funcMatchString + '$');\n return isObject(f) && reIsNative.test(f);\n}\n\n/* isObject - Checks if the argument is an object\n *\n * @param value - any value\n * @returns true is value is an object function is an object)\n*/\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/*\n * isDefined - a convenience function for checking if a value is not equal to undefined\n *\n * @param u - any value\n * @returns true if u is anything other than undefined\n */\nfunction isDefined(u) {\n return !isType(u, 'undefined');\n}\n\n/*\n * isIterable - convenience function for checking if a value can be iterated, essentially\n * whether it is an object or an array.\n *\n * @param i - any value\n * @returns true if i is an object or an array as determined by `typeName`\n */\nfunction isIterable(i) {\n var type = typeName(i);\n return (type === 'object' || type === 'array');\n}\n\n/*\n * isError - convenience function for checking if a value is of an error type\n *\n * @param e - any value\n * @returns true if e is an error\n */\nfunction isError(e) {\n return isType(e, 'error');\n}\n\nfunction traverse(obj, func, seen) {\n var k, v, i;\n var isObj = isType(obj, 'object');\n var isArray = isType(obj, 'array');\n var keys = [];\n\n if (isObj && seen.indexOf(obj) !== -1) {\n return obj;\n }\n seen.push(obj);\n\n if (isObj) {\n for (k in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, k)) {\n keys.push(k);\n }\n }\n } else if (isArray) {\n for (i = 0; i < obj.length; ++i) {\n keys.push(i);\n }\n }\n\n var result = isObj ? {} : [];\n for (i = 0; i < keys.length; ++i) {\n k = keys[i];\n v = obj[k];\n result[k] = func(k, v, seen);\n }\n\n return (keys.length != 0) ? result : obj;\n}\n\nfunction redact() {\n return '********';\n}\n\n// from http://stackoverflow.com/a/8809472/1138191\nfunction uuid4() {\n var d = now();\n var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (d + Math.random() * 16) % 16 | 0;\n d = Math.floor(d / 16);\n return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16);\n });\n return uuid;\n}\n\nvar LEVELS = {\n debug: 0,\n info: 1,\n warning: 2,\n error: 3,\n critical: 4\n};\n\nfunction sanitizeUrl(url) {\n var baseUrlParts = parseUri(url);\n // remove a trailing # if there is no anchor\n if (baseUrlParts.anchor === '') {\n baseUrlParts.source = baseUrlParts.source.replace('#', '');\n }\n\n url = baseUrlParts.source.replace('?' + baseUrlParts.query, '');\n return url;\n}\n\nvar parseUriOptions = {\n strictMode: false,\n key: [\n 'source',\n 'protocol',\n 'authority',\n 'userInfo',\n 'user',\n 'password',\n 'host',\n 'port',\n 'relative',\n 'path',\n 'directory',\n 'file',\n 'query',\n 'anchor'\n ],\n q: {\n name: 'queryKey',\n parser: /(?:^|&)([^&=]*)=?([^&]*)/g\n },\n parser: {\n strict: /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,\n loose: /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/\n }\n};\n\nfunction parseUri(str) {\n if (!isType(str, 'string')) {\n throw new Error('received invalid input');\n }\n\n var o = parseUriOptions;\n var m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str);\n var uri = {};\n var i = o.key.length;\n\n while (i--) {\n uri[o.key[i]] = m[i] || '';\n }\n\n uri[o.q.name] = {};\n uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {\n if ($1) {\n uri[o.q.name][$1] = $2;\n }\n });\n\n return uri;\n}\n\nfunction addParamsAndAccessTokenToPath(accessToken, options, params) {\n params = params || {};\n params.access_token = accessToken;\n var paramsArray = [];\n var k;\n for (k in params) {\n if (Object.prototype.hasOwnProperty.call(params, k)) {\n paramsArray.push([k, params[k]].join('='));\n }\n }\n var query = '?' + paramsArray.sort().join('&');\n\n options = options || {};\n options.path = options.path || '';\n var qs = options.path.indexOf('?');\n var h = options.path.indexOf('#');\n var p;\n if (qs !== -1 && (h === -1 || h > qs)) {\n p = options.path;\n options.path = p.substring(0,qs) + query + '&' + p.substring(qs+1);\n } else {\n if (h !== -1) {\n p = options.path;\n options.path = p.substring(0,h) + query + p.substring(h);\n } else {\n options.path = options.path + query;\n }\n }\n}\n\nfunction formatUrl(u, protocol) {\n protocol = protocol || u.protocol;\n if (!protocol && u.port) {\n if (u.port === 80) {\n protocol = 'http:';\n } else if (u.port === 443) {\n protocol = 'https:';\n }\n }\n protocol = protocol || 'https:';\n\n if (!u.hostname) {\n return null;\n }\n var result = protocol + '//' + u.hostname;\n if (u.port) {\n result = result + ':' + u.port;\n }\n if (u.path) {\n result = result + u.path;\n }\n return result;\n}\n\nfunction stringify(obj, backup) {\n var value, error;\n try {\n value = RollbarJSON.stringify(obj);\n } catch (jsonError) {\n if (backup && isFunction(backup)) {\n try {\n value = backup(obj);\n } catch (backupError) {\n error = backupError;\n }\n } else {\n error = jsonError;\n }\n }\n return {error: error, value: value};\n}\n\nfunction jsonParse(s) {\n var value, error;\n try {\n value = RollbarJSON.parse(s);\n } catch (e) {\n error = e;\n }\n return {error: error, value: value};\n}\n\nfunction makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n mode,\n backupMessage,\n errorParser\n) {\n var location = {\n url: url || '',\n line: lineno,\n column: colno\n };\n location.func = errorParser.guessFunctionName(location.url, location.line);\n location.context = errorParser.gatherContext(location.url, location.line);\n var href = document && document.location && document.location.href;\n var useragent = window && window.navigator && window.navigator.userAgent;\n return {\n 'mode': mode,\n 'message': error ? String(error) : (message || backupMessage),\n 'url': href,\n 'stack': [location],\n 'useragent': useragent\n };\n}\n\nfunction wrapCallback(logger, f) {\n return function(err, resp) {\n try {\n f(err, resp);\n } catch (e) {\n logger.error(e);\n }\n };\n}\n\nfunction createItem(args, logger, notifier, requestKeys, lambdaContext) {\n var message, err, custom, callback, request;\n var arg;\n var extraArgs = [];\n\n for (var i = 0, l = args.length; i < l; ++i) {\n arg = args[i];\n\n var typ = typeName(arg);\n switch (typ) {\n case 'undefined':\n break;\n case 'string':\n message ? extraArgs.push(arg) : message = arg;\n break;\n case 'function':\n callback = wrapCallback(logger, arg);\n break;\n case 'date':\n extraArgs.push(arg);\n break;\n case 'error':\n case 'domexception':\n err ? extraArgs.push(arg) : err = arg;\n break;\n case 'object':\n case 'array':\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n if (requestKeys && typ === 'object' && !request) {\n for (var j = 0, len = requestKeys.length; j < len; ++j) {\n if (arg[requestKeys[j]] !== undefined) {\n request = arg;\n break;\n }\n }\n if (request) {\n break;\n }\n }\n custom ? extraArgs.push(arg) : custom = arg;\n break;\n default:\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n extraArgs.push(arg);\n }\n }\n\n if (extraArgs.length > 0) {\n // if custom is an array this turns it into an object with integer keys\n custom = extend(true, {}, custom);\n custom.extraArgs = extraArgs;\n }\n\n var item = {\n message: message,\n err: err,\n custom: custom,\n timestamp: now(),\n callback: callback,\n uuid: uuid4()\n };\n if (custom && custom.level !== undefined) {\n item.level = custom.level;\n delete custom.level;\n }\n if (requestKeys && request) {\n item.request = request;\n }\n if (lambdaContext) {\n item.lambdaContext = lambdaContext;\n }\n item._originalArgs = args;\n return item;\n}\n\n/*\n * get - given an obj/array and a keypath, return the value at that keypath or\n * undefined if not possible.\n *\n * @param obj - an object or array\n * @param path - a string of keys separated by '.' such as 'plugin.jquery.0.message'\n * which would correspond to 42 in `{plugin: {jquery: [{message: 42}]}}`\n */\nfunction get(obj, path) {\n if (!obj) {\n return undefined;\n }\n var keys = path.split('.');\n var result = obj;\n try {\n for (var i = 0, len = keys.length; i < len; ++i) {\n result = result[keys[i]];\n }\n } catch (e) {\n result = undefined;\n }\n return result;\n}\n\nfunction set(obj, path, value) {\n if (!obj) {\n return;\n }\n var keys = path.split('.');\n var len = keys.length;\n if (len < 1) {\n return;\n }\n if (len === 1) {\n obj[keys[0]] = value;\n return;\n }\n try {\n var temp = obj[keys[0]] || {};\n var replacement = temp;\n for (var i = 1; i < len-1; i++) {\n temp[keys[i]] = temp[keys[i]] || {};\n temp = temp[keys[i]];\n }\n temp[keys[len-1]] = value;\n obj[keys[0]] = replacement;\n } catch (e) {\n return;\n }\n}\n\nfunction scrub(data, scrubFields) {\n scrubFields = scrubFields || [];\n var paramRes = _getScrubFieldRegexs(scrubFields);\n var queryRes = _getScrubQueryParamRegexs(scrubFields);\n\n function redactQueryParam(dummy0, paramPart, dummy1, dummy2, dummy3, valPart) {\n return paramPart + redact(valPart);\n }\n\n function paramScrubber(v) {\n var i;\n if (isType(v, 'string')) {\n for (i = 0; i < queryRes.length; ++i) {\n v = v.replace(queryRes[i], redactQueryParam);\n }\n }\n return v;\n }\n\n function valScrubber(k, v) {\n var i;\n for (i = 0; i < paramRes.length; ++i) {\n if (paramRes[i].test(k)) {\n v = redact(v);\n break;\n }\n }\n return v;\n }\n\n function scrubber(k, v, seen) {\n var tmpV = valScrubber(k, v);\n if (tmpV === v) {\n if (isType(v, 'object') || isType(v, 'array')) {\n return traverse(v, scrubber, seen);\n }\n return paramScrubber(tmpV);\n } else {\n return tmpV;\n }\n }\n\n return traverse(data, scrubber, []);\n}\n\nfunction _getScrubFieldRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '^\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?$';\n ret.push(new RegExp(pat, 'i'));\n }\n return ret;\n}\n\n\nfunction _getScrubQueryParamRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?';\n ret.push(new RegExp('(' + pat + '=)([^&\\\\n]+)', 'igm'));\n }\n return ret;\n}\n\nfunction formatArgsAsString(args) {\n var i, len, arg;\n var result = [];\n for (i = 0, len = args.length; i < len; i++) {\n arg = args[i];\n if (typeof arg === 'object') {\n arg = stringify(arg);\n arg = arg.error || arg.value;\n if (arg.length > 500)\n arg = arg.substr(0,500)+'...';\n } else if (typeof arg === 'undefined') {\n arg = 'undefined';\n }\n result.push(arg);\n }\n return result.join(' ');\n}\n\nfunction now() {\n if (Date.now) {\n return +Date.now();\n }\n return +new Date();\n}\n\nmodule.exports = {\n isType: isType,\n typeName: typeName,\n isFunction: isFunction,\n isNativeFunction: isNativeFunction,\n isIterable: isIterable,\n isError: isError,\n extend: extend,\n traverse: traverse,\n redact: redact,\n uuid4: uuid4,\n LEVELS: LEVELS,\n sanitizeUrl: sanitizeUrl,\n addParamsAndAccessTokenToPath: addParamsAndAccessTokenToPath,\n formatUrl: formatUrl,\n stringify: stringify,\n jsonParse: jsonParse,\n makeUnhandledStackInfo: makeUnhandledStackInfo,\n createItem: createItem,\n get: get,\n set: set,\n scrub: scrub,\n formatArgsAsString: formatArgsAsString,\n now: now\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/utility.js\n// module id = 5\n// module chunks = 0","'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) {/**/}\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[0],\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t} else if ((typeof target !== 'object' && typeof target !== 'function') || target == null) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = target[name];\n\t\t\t\tcopy = options[name];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\ttarget[name] = extend(deep, clone, copy);\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/extend/index.js\n// module id = 6\n// module chunks = 0","// json3.js\n// 2017-02-21\n// Public Domain.\n// NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n// See http://www.JSON.org/js.html\n// This code should be minified before deployment.\n// See http://javascript.crockford.com/jsmin.html\n\n// USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n// NOT CONTROL.\n\n// This file creates a global JSON object containing two methods: stringify\n// and parse. This file provides the ES5 JSON capability to ES3 systems.\n// If a project might run on IE8 or earlier, then this file should be included.\n// This file does nothing on ES5 systems.\n\n// JSON.stringify(value, replacer, space)\n// value any JavaScript value, usually an object or array.\n// replacer an optional parameter that determines how object\n// values are stringified for objects. It can be a\n// function or an array of strings.\n// space an optional parameter that specifies the indentation\n// of nested structures. If it is omitted, the text will\n// be packed without extra whitespace. If it is a number,\n// it will specify the number of spaces to indent at each\n// level. If it is a string (such as \"\\t\" or \" \"),\n// it contains the characters used to indent at each level.\n// This method produces a JSON text from a JavaScript value.\n// When an object value is found, if the object contains a toJSON\n// method, its toJSON method will be called and the result will be\n// stringified. A toJSON method does not serialize: it returns the\n// value represented by the name/value pair that should be serialized,\n// or undefined if nothing should be serialized. The toJSON method\n// will be passed the key associated with the value, and this will be\n// bound to the value.\n\n// For example, this would serialize Dates as ISO strings.\n\n// Date.prototype.toJSON = function (key) {\n// function f(n) {\n// // Format integers to have at least two digits.\n// return (n < 10)\n// ? \"0\" + n\n// : n;\n// }\n// return this.getUTCFullYear() + \"-\" +\n// f(this.getUTCMonth() + 1) + \"-\" +\n// f(this.getUTCDate()) + \"T\" +\n// f(this.getUTCHours()) + \":\" +\n// f(this.getUTCMinutes()) + \":\" +\n// f(this.getUTCSeconds()) + \"Z\";\n// };\n\n// You can provide an optional replacer method. It will be passed the\n// key and value of each member, with this bound to the containing\n// object. The value that is returned from your method will be\n// serialized. If your method returns undefined, then the member will\n// be excluded from the serialization.\n\n// If the replacer parameter is an array of strings, then it will be\n// used to select the members to be serialized. It filters the results\n// such that only members with keys listed in the replacer array are\n// stringified.\n\n// Values that do not have JSON representations, such as undefined or\n// functions, will not be serialized. Such values in objects will be\n// dropped; in arrays they will be replaced with null. You can use\n// a replacer function to replace those with JSON values.\n\n// JSON.stringify(undefined) returns undefined.\n\n// The optional space parameter produces a stringification of the\n// value that is filled with line breaks and indentation to make it\n// easier to read.\n\n// If the space parameter is a non-empty string, then that string will\n// be used for indentation. If the space parameter is a number, then\n// the indentation will be that many spaces.\n\n// Example:\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}]);\n// // text is '[\"e\",{\"pluribus\":\"unum\"}]'\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}], null, \"\\t\");\n// // text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\n\n// text = JSON.stringify([new Date()], function (key, value) {\n// return this[key] instanceof Date\n// ? \"Date(\" + this[key] + \")\"\n// : value;\n// });\n// // text is '[\"Date(---current time---)\"]'\n\n// JSON.parse(text, reviver)\n// This method parses a JSON text to produce an object or array.\n// It can throw a SyntaxError exception.\n// This has been modified to use JSON-js/json_parse_state.js as the\n// parser instead of the one built around eval found in JSON-js/json2.js\n\n// The optional reviver parameter is a function that can filter and\n// transform the results. It receives each of the keys and values,\n// and its return value is used instead of the original value.\n// If it returns what it received, then the structure is not modified.\n// If it returns undefined then the member is deleted.\n\n// Example:\n\n// // Parse the text. Values that look like ISO date strings will\n// // be converted to Date objects.\n\n// myData = JSON.parse(text, function (key, value) {\n// var a;\n// if (typeof value === \"string\") {\n// a =\n// /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n// if (a) {\n// return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n// +a[5], +a[6]));\n// }\n// }\n// return value;\n// });\n\n// myData = JSON.parse('[\"Date(09/09/2001)\"]', function (key, value) {\n// var d;\n// if (typeof value === \"string\" &&\n// value.slice(0, 5) === \"Date(\" &&\n// value.slice(-1) === \")\") {\n// d = new Date(value.slice(5, -1));\n// if (d) {\n// return d;\n// }\n// }\n// return value;\n// });\n\n// This is a reference implementation. You are free to copy, modify, or\n// redistribute.\n\n/*jslint\n for, this\n */\n\n/*property\n JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\n getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\n lastIndex, length, parse, prototype, push, replace, slice, stringify,\n test, toJSON, toString, valueOf\n */\n\nvar setupCustomJSON = function(JSON) {\n\n var rx_one = /^[\\],:{}\\s]*$/;\n var rx_two = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g;\n var rx_three = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\n var rx_four = /(?:^|:|,)(?:\\s*\\[)+/g;\n var rx_escapable = /[\\\\\"\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n var rx_dangerous = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\n function f(n) {\n // Format integers to have at least two digits.\n return n < 10\n ? \"0\" + n\n : n;\n }\n\n function this_value() {\n return this.valueOf();\n }\n\n if (typeof Date.prototype.toJSON !== \"function\") {\n\n Date.prototype.toJSON = function () {\n\n return isFinite(this.valueOf())\n ? this.getUTCFullYear() + \"-\" +\n f(this.getUTCMonth() + 1) + \"-\" +\n f(this.getUTCDate()) + \"T\" +\n f(this.getUTCHours()) + \":\" +\n f(this.getUTCMinutes()) + \":\" +\n f(this.getUTCSeconds()) + \"Z\"\n : null;\n };\n\n Boolean.prototype.toJSON = this_value;\n Number.prototype.toJSON = this_value;\n String.prototype.toJSON = this_value;\n }\n\n var gap;\n var indent;\n var meta;\n var rep;\n\n\n function quote(string) {\n\n // If the string contains no control characters, no quote characters, and no\n // backslash characters, then we can safely slap some quotes around it.\n // Otherwise we must also replace the offending characters with safe escape\n // sequences.\n\n rx_escapable.lastIndex = 0;\n return rx_escapable.test(string)\n ? \"\\\"\" + string.replace(rx_escapable, function (a) {\n var c = meta[a];\n return typeof c === \"string\"\n ? c\n : \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n }) + \"\\\"\"\n : \"\\\"\" + string + \"\\\"\";\n }\n\n\n function str(key, holder) {\n\n // Produce a string from holder[key].\n\n var i; // The loop counter.\n var k; // The member key.\n var v; // The member value.\n var length;\n var mind = gap;\n var partial;\n var value = holder[key];\n\n // If the value has a toJSON method, call it to obtain a replacement value.\n\n if (value && typeof value === \"object\" &&\n typeof value.toJSON === \"function\") {\n value = value.toJSON(key);\n }\n\n // If we were called with a replacer function, then call the replacer to\n // obtain a replacement value.\n\n if (typeof rep === \"function\") {\n value = rep.call(holder, key, value);\n }\n\n // What happens next depends on the value's type.\n\n switch (typeof value) {\n case \"string\":\n return quote(value);\n\n case \"number\":\n\n // JSON numbers must be finite. Encode non-finite numbers as null.\n\n return isFinite(value)\n ? String(value)\n : \"null\";\n\n case \"boolean\":\n case \"null\":\n\n // If the value is a boolean or null, convert it to a string. Note:\n // typeof null does not produce \"null\". The case is included here in\n // the remote chance that this gets fixed someday.\n\n return String(value);\n\n // If the type is \"object\", we might be dealing with an object or an array or\n // null.\n\n case \"object\":\n\n // Due to a specification blunder in ECMAScript, typeof null is \"object\",\n // so watch out for that case.\n\n if (!value) {\n return \"null\";\n }\n\n // Make an array to hold the partial results of stringifying this object value.\n\n gap += indent;\n partial = [];\n\n // Is the value an array?\n\n if (Object.prototype.toString.apply(value) === \"[object Array]\") {\n\n // The value is an array. Stringify every element. Use null as a placeholder\n // for non-JSON values.\n\n length = value.length;\n for (i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || \"null\";\n }\n\n // Join all of the elements together, separated with commas, and wrap them in\n // brackets.\n\n v = partial.length === 0\n ? \"[]\"\n : gap\n ? \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\"\n : \"[\" + partial.join(\",\") + \"]\";\n gap = mind;\n return v;\n }\n\n // If the replacer is an array, use it to select the members to be stringified.\n\n if (rep && typeof rep === \"object\") {\n length = rep.length;\n for (i = 0; i < length; i += 1) {\n if (typeof rep[i] === \"string\") {\n k = rep[i];\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n } else {\n\n // Otherwise, iterate through all of the keys in the object.\n\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n }\n\n // Join all of the member texts together, separated with commas,\n // and wrap them in braces.\n\n v = partial.length === 0\n ? \"{}\"\n : gap\n ? \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\"\n : \"{\" + partial.join(\",\") + \"}\";\n gap = mind;\n return v;\n }\n }\n\n // If the JSON object does not yet have a stringify method, give it one.\n\n if (typeof JSON.stringify !== \"function\") {\n meta = { // table of character substitutions\n \"\\b\": \"\\\\b\",\n \"\\t\": \"\\\\t\",\n \"\\n\": \"\\\\n\",\n \"\\f\": \"\\\\f\",\n \"\\r\": \"\\\\r\",\n \"\\\"\": \"\\\\\\\"\",\n \"\\\\\": \"\\\\\\\\\"\n };\n JSON.stringify = function (value, replacer, space) {\n\n // The stringify method takes a value and an optional replacer, and an optional\n // space parameter, and returns a JSON text. The replacer can be a function\n // that can replace values, or an array of strings that will select the keys.\n // A default replacer method can be provided. Use of the space parameter can\n // produce text that is more easily readable.\n\n var i;\n gap = \"\";\n indent = \"\";\n\n // If the space parameter is a number, make an indent string containing that\n // many spaces.\n\n if (typeof space === \"number\") {\n for (i = 0; i < space; i += 1) {\n indent += \" \";\n }\n\n // If the space parameter is a string, it will be used as the indent string.\n\n } else if (typeof space === \"string\") {\n indent = space;\n }\n\n // If there is a replacer, it must be a function or an array.\n // Otherwise, throw an error.\n\n rep = replacer;\n if (replacer && typeof replacer !== \"function\" &&\n (typeof replacer !== \"object\" ||\n typeof replacer.length !== \"number\")) {\n throw new Error(\"JSON.stringify\");\n }\n\n // Make a fake root object containing our value under the key of \"\".\n // Return the result of stringifying the value.\n\n return str(\"\", {\"\": value});\n };\n }\n\n\n // If the JSON object does not yet have a parse method, give it one.\n\n if (typeof JSON.parse !== \"function\") {\n JSON.parse = (function () {\n\n // This function creates a JSON parse function that uses a state machine rather\n // than the dangerous eval function to parse a JSON text.\n\n var state; // The state of the parser, one of\n // 'go' The starting state\n // 'ok' The final, accepting state\n // 'firstokey' Ready for the first key of the object or\n // the closing of an empty object\n // 'okey' Ready for the next key of the object\n // 'colon' Ready for the colon\n // 'ovalue' Ready for the value half of a key/value pair\n // 'ocomma' Ready for a comma or closing }\n // 'firstavalue' Ready for the first value of an array or\n // an empty array\n // 'avalue' Ready for the next value of an array\n // 'acomma' Ready for a comma or closing ]\n var stack; // The stack, for controlling nesting.\n var container; // The current container object or array\n var key; // The current key\n var value; // The current value\n var escapes = { // Escapement translation table\n \"\\\\\": \"\\\\\",\n \"\\\"\": \"\\\"\",\n \"/\": \"/\",\n \"t\": \"\\t\",\n \"n\": \"\\n\",\n \"r\": \"\\r\",\n \"f\": \"\\f\",\n \"b\": \"\\b\"\n };\n var string = { // The actions for string tokens\n go: function () {\n state = \"ok\";\n },\n firstokey: function () {\n key = value;\n state = \"colon\";\n },\n okey: function () {\n key = value;\n state = \"colon\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var number = { // The actions for number tokens\n go: function () {\n state = \"ok\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var action = {\n\n // The action table describes the behavior of the machine. It contains an\n // object for each token. Each object contains a method that is called when\n // a token is matched in a state. An object will lack a method for illegal\n // states.\n\n \"{\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = {};\n state = \"firstokey\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = {};\n state = \"firstokey\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n }\n },\n \"}\": {\n firstokey: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n ocomma: function () {\n var pop = stack.pop();\n container[key] = value;\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \"[\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = [];\n state = \"firstavalue\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = [];\n state = \"firstavalue\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n }\n },\n \"]\": {\n firstavalue: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n acomma: function () {\n var pop = stack.pop();\n container.push(value);\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \":\": {\n colon: function () {\n if (Object.hasOwnProperty.call(container, key)) {\n throw new SyntaxError(\"Duplicate key '\" + key + \"\\\"\");\n }\n state = \"ovalue\";\n }\n },\n \",\": {\n ocomma: function () {\n container[key] = value;\n state = \"okey\";\n },\n acomma: function () {\n container.push(value);\n state = \"avalue\";\n }\n },\n \"true\": {\n go: function () {\n value = true;\n state = \"ok\";\n },\n ovalue: function () {\n value = true;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = true;\n state = \"acomma\";\n },\n avalue: function () {\n value = true;\n state = \"acomma\";\n }\n },\n \"false\": {\n go: function () {\n value = false;\n state = \"ok\";\n },\n ovalue: function () {\n value = false;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = false;\n state = \"acomma\";\n },\n avalue: function () {\n value = false;\n state = \"acomma\";\n }\n },\n \"null\": {\n go: function () {\n value = null;\n state = \"ok\";\n },\n ovalue: function () {\n value = null;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = null;\n state = \"acomma\";\n },\n avalue: function () {\n value = null;\n state = \"acomma\";\n }\n }\n };\n\n function debackslashify(text) {\n\n // Remove and replace any backslash escapement.\n\n return text.replace(/\\\\(?:u(.{4})|([^u]))/g, function (ignore, b, c) {\n return b\n ? String.fromCharCode(parseInt(b, 16))\n : escapes[c];\n });\n }\n\n return function (source, reviver) {\n\n // A regular expression is used to extract tokens from the JSON text.\n // The extraction process is cautious.\n\n var result;\n var tx = /^[\\u0020\\t\\n\\r]*(?:([,:\\[\\]{}]|true|false|null)|(-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)|\"((?:[^\\r\\n\\t\\\\\\\"]|\\\\(?:[\"\\\\\\/trnfb]|u[0-9a-fA-F]{4}))*)\")/;\n\n // Set the starting state.\n\n state = \"go\";\n\n // The stack records the container, key, and state for each object or array\n // that contains another object or array while processing nested structures.\n\n stack = [];\n\n // If any error occurs, we will catch it and ultimately throw a syntax error.\n\n try {\n\n // For each token...\n\n while (true) {\n result = tx.exec(source);\n if (!result) {\n break;\n }\n\n // result is the result array from matching the tokenizing regular expression.\n // result[0] contains everything that matched, including any initial whitespace.\n // result[1] contains any punctuation that was matched, or true, false, or null.\n // result[2] contains a matched number, still in string form.\n // result[3] contains a matched string, without quotes but with escapement.\n\n if (result[1]) {\n\n // Token: Execute the action for this state and token.\n\n action[result[1]][state]();\n\n } else if (result[2]) {\n\n // Number token: Convert the number string into a number value and execute\n // the action for this state and number.\n\n value = +result[2];\n number[state]();\n } else {\n\n // String token: Replace the escapement sequences and execute the action for\n // this state and string.\n\n value = debackslashify(result[3]);\n string[state]();\n }\n\n // Remove the token from the string. The loop will continue as long as there\n // are tokens. This is a slow process, but it allows the use of ^ matching,\n // which assures that no illegal tokens slip through.\n\n source = source.slice(result[0].length);\n }\n\n // If we find a state/token combination that is illegal, then the action will\n // cause an error. We handle the error by simply changing the state.\n\n } catch (e) {\n state = e;\n }\n\n // The parsing is finished. If we are not in the final \"ok\" state, or if the\n // remaining source contains anything except whitespace, then we did not have\n //a well-formed JSON text.\n\n if (state !== \"ok\" || (/[^\\u0020\\t\\n\\r]/.test(source))) {\n throw (state instanceof SyntaxError)\n ? state\n : new SyntaxError(\"JSON\");\n }\n\n // If there is a reviver function, we recursively walk the new structure,\n // passing each name/value pair to the reviver function for possible\n // transformation, starting with a temporary root object that holds the current\n // value in an empty key. If there is not a reviver function, we simply return\n // that value.\n\n return (typeof reviver === \"function\")\n ? (function walk(holder, key) {\n var k;\n var v;\n var val = holder[key];\n if (val && typeof val === \"object\") {\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(val, k)) {\n v = walk(val, k);\n if (v !== undefined) {\n val[k] = v;\n } else {\n delete val[k];\n }\n }\n }\n }\n return reviver.call(holder, key, val);\n }({\"\": value}, \"\"))\n : value;\n };\n }());\n }\n}\n\nmodule.exports = setupCustomJSON;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./vendor/JSON-js/json3.js\n// module id = 7\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Notifier - the internal object responsible for delegating between the client exposed API, the\n * chain of transforms necessary to turn an item into something that can be sent to Rollbar, and the\n * queue which handles the communcation with the Rollbar API servers.\n *\n * @param queue - an object that conforms to the interface: addItem(item, callback)\n * @param options - an object representing the options to be set for this notifier, this should have\n * any defaults already set by the caller\n */\nfunction Notifier(queue, options) {\n this.queue = queue;\n this.options = options;\n this.transforms = [];\n}\n\n/*\n * configure - updates the options for this notifier with the passed in object\n *\n * @param options - an object which gets merged with the current options set on this notifier\n * @returns this\n */\nNotifier.prototype.configure = function(options) {\n this.queue && this.queue.configure(options);\n var oldOptions = this.options;\n this.options = _.extend(true, {}, oldOptions, options);\n return this;\n};\n\n/*\n * addTransform - adds a transform onto the end of the queue of transforms for this notifier\n *\n * @param transform - a function which takes three arguments:\n * * item: An Object representing the data to eventually be sent to Rollbar\n * * options: The current value of the options for this notifier\n * * callback: function(err: (Null|Error), item: (Null|Object)) the transform must call this\n * callback with a null value for error if it wants the processing chain to continue, otherwise\n * with an error to terminate the processing. The item should be the updated item after this\n * transform is finished modifying it.\n */\nNotifier.prototype.addTransform = function(transform) {\n if (_.isFunction(transform)) {\n this.transforms.push(transform);\n }\n return this;\n};\n\n/*\n * log - the internal log function which applies the configured transforms and then pushes onto the\n * queue to be sent to the backend.\n *\n * @param item - An object with the following structure:\n * message [String] - An optional string to be sent to rollbar\n * error [Error] - An optional error\n *\n * @param callback - A function of type function(err, resp) which will be called with exactly one\n * null argument and one non-null argument. The callback will be called once, either during the\n * transform stage if an error occurs inside a transform, or in response to the communication with\n * the backend. The second argument will be the response from the backend in case of success.\n */\nNotifier.prototype.log = function(item, callback) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!this.options.enabled) {\n return callback(new Error('Rollbar is not enabled'));\n }\n\n this.queue.addPendingItem(item);\n var originalError = item.err;\n this._applyTransforms(item, function(err, i) {\n if (err) {\n this.queue.removePendingItem(item);\n return callback(err, null);\n }\n this.queue.addItem(i, callback, originalError, item);\n }.bind(this));\n};\n\n/* Internal */\n\n/*\n * _applyTransforms - Applies the transforms that have been added to this notifier sequentially. See\n * `addTransform` for more information.\n *\n * @param item - An item to be transformed\n * @param callback - A function of type function(err, item) which will be called with a non-null\n * error and a null item in the case of a transform failure, or a null error and non-null item after\n * all transforms have been applied.\n */\nNotifier.prototype._applyTransforms = function(item, callback) {\n var transformIndex = -1;\n var transformsLength = this.transforms.length;\n var transforms = this.transforms;\n var options = this.options;\n\n var cb = function(err, i) {\n if (err) {\n callback(err, null);\n return;\n }\n\n transformIndex++;\n\n if (transformIndex === transformsLength) {\n callback(null, i);\n return;\n }\n\n transforms[transformIndex](i, options, cb);\n };\n\n cb(null, item);\n};\n\nmodule.exports = Notifier;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/notifier.js\n// module id = 8\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nvar MAX_EVENTS = 100;\n\nfunction Telemeter(options) {\n this.queue = [];\n this.options = _.extend(true, {}, options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n this.maxQueueSize = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n}\n\nTelemeter.prototype.configure = function(options) {\n var oldOptions = this.options;\n this.options = _.extend(true, {}, oldOptions, options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n var newMaxEvents = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n var deleteCount = 0;\n if (this.maxQueueSize > newMaxEvents) {\n deleteCount = this.maxQueueSize - newMaxEvents;\n }\n this.maxQueueSize = newMaxEvents;\n this.queue.splice(0, deleteCount);\n};\n\nTelemeter.prototype.copyEvents = function() {\n return Array.prototype.slice.call(this.queue, 0);\n};\n\nTelemeter.prototype.capture = function(type, metadata, level, rollbarUUID, timestamp) {\n var e = {\n level: getLevel(type, level),\n type: type,\n timestamp_ms: timestamp || _.now(),\n body: metadata,\n source: 'client'\n };\n if (rollbarUUID) {\n e.uuid = rollbarUUID;\n }\n\n try {\n if (_.isFunction(this.options.filterTelemetry) && this.options.filterTelemetry(e)) {\n return false;\n }\n } catch (e) {\n this.options.filterTelemetry = null;\n }\n\n this.push(e);\n return e;\n};\n\nTelemeter.prototype.captureEvent = function(metadata, level, rollbarUUID) {\n return this.capture('manual', metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.captureError = function(err, level, rollbarUUID, timestamp) {\n var metadata = {\n message: err.message || String(err)\n };\n if (err.stack) {\n metadata.stack = err.stack;\n }\n return this.capture('error', metadata, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureLog = function(message, level, rollbarUUID, timestamp) {\n return this.capture('log', {\n message: message\n }, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureNetwork = function(metadata, subtype, rollbarUUID, requestData) {\n subtype = subtype || 'xhr';\n metadata.subtype = metadata.subtype || subtype;\n if (requestData) {\n metadata.request = requestData;\n }\n var level = this.levelFromStatus(metadata.status_code);\n return this.capture('network', metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.levelFromStatus = function(statusCode) {\n if (statusCode >= 200 && statusCode < 400) {\n return 'info';\n }\n if (statusCode === 0 || statusCode >= 400) {\n return 'error';\n }\n return 'info';\n};\n\nTelemeter.prototype.captureDom = function(subtype, element, value, checked, rollbarUUID) {\n var metadata = {\n subtype: subtype,\n element: element\n };\n if (value !== undefined) {\n metadata.value = value;\n }\n if (checked !== undefined) {\n metadata.checked = checked;\n }\n return this.capture('dom', metadata, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureNavigation = function(from, to, rollbarUUID) {\n return this.capture('navigation', {from: from, to: to}, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureDomContentLoaded = function(ts) {\n return this.capture('navigation', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n */\n};\nTelemeter.prototype.captureLoad = function(ts) {\n return this.capture('navigation', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n */\n};\n\nTelemeter.prototype.captureConnectivityChange = function(type, rollbarUUID) {\n return this.captureNetwork({change: type}, 'connectivity', rollbarUUID);\n};\n\n// Only intended to be used internally by the notifier\nTelemeter.prototype._captureRollbarItem = function(item) {\n if (!this.options.includeItemsInTelemetry) {\n return;\n }\n if (item.err) {\n return this.captureError(item.err, item.level, item.uuid, item.timestamp);\n }\n if (item.message) {\n return this.captureLog(item.message, item.level, item.uuid, item.timestamp);\n }\n if (item.custom) {\n return this.capture('log', item.custom, item.level, item.uuid, item.timestamp);\n }\n};\n\nTelemeter.prototype.push = function(e) {\n this.queue.push(e);\n if (this.queue.length > this.maxQueueSize) {\n this.queue.shift();\n }\n};\n\nfunction getLevel(type, level) {\n if (level) {\n return level;\n }\n var defaultLevel = {\n error: 'error',\n manual: 'info'\n };\n return defaultLevel[type] || 'info';\n}\n\nmodule.exports = Telemeter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/telemetry.js\n// module id = 9\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\nvar helpers = require('./apiUtility');\n\nvar defaultOptions = {\n hostname: 'api.rollbar.com',\n path: '/api/1/item/',\n search: null,\n version: '1',\n protocol: 'https:',\n port: 443\n};\n\n/**\n * Api is an object that encapsulates methods of communicating with\n * the Rollbar API. It is a standard interface with some parts implemented\n * differently for server or browser contexts. It is an object that should\n * be instantiated when used so it can contain non-global options that may\n * be different for another instance of RollbarApi.\n *\n * @param options {\n * accessToken: the accessToken to use for posting items to rollbar\n * endpoint: an alternative endpoint to send errors to\n * must be a valid, fully qualified URL.\n * The default is: https://api.rollbar.com/api/1/item\n * proxy: if you wish to proxy requests provide an object\n * with the following keys:\n * host or hostname (required): foo.example.com\n * port (optional): 123\n * protocol (optional): https\n * }\n */\nfunction Api(options, t, u, j) {\n this.options = options;\n this.transport = t;\n this.url = u;\n this.jsonBackup = j;\n this.accessToken = options.accessToken;\n this.transportOptions = _getTransport(options, u);\n}\n\n/**\n *\n * @param data\n * @param callback\n */\nApi.prototype.postItem = function(data, callback) {\n var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n this.transport.post(this.accessToken, transportOptions, payload, callback);\n};\n\nApi.prototype.configure = function(options) {\n var oldOptions = this.oldOptions;\n this.options = _.extend(true, {}, oldOptions, options);\n this.transportOptions = _getTransport(this.options, this.url);\n if (this.options.accessToken !== undefined) {\n this.accessToken = this.options.accessToken;\n }\n return this;\n};\n\nfunction _getTransport(options, url) {\n return helpers.getTransportFromOptions(options, defaultOptions, url);\n}\n\nmodule.exports = Api;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/api.js\n// module id = 10\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction buildPayload(accessToken, data, jsonBackup) {\n if (!_.isType(data.context, 'string')) {\n var contextResult = _.stringify(data.context, jsonBackup);\n if (contextResult.error) {\n data.context = 'Error: could not serialize \\'context\\'';\n } else {\n data.context = contextResult.value || '';\n }\n if (data.context.length > 255) {\n data.context = data.context.substr(0, 255);\n }\n }\n return {\n access_token: accessToken,\n data: data\n };\n}\n\nfunction getTransportFromOptions(options, defaults, url) {\n var hostname = defaults.hostname;\n var protocol = defaults.protocol;\n var port = defaults.port;\n var path = defaults.path;\n var search = defaults.search;\n\n var proxy = options.proxy;\n if (options.endpoint) {\n var opts = url.parse(options.endpoint);\n hostname = opts.hostname;\n protocol = opts.protocol;\n port = opts.port;\n path = opts.pathname;\n search = opts.search;\n }\n return {\n hostname: hostname,\n protocol: protocol,\n port: port,\n path: path,\n search: search,\n proxy: proxy\n };\n}\n\nfunction transportOptions(transport, method) {\n var protocol = transport.protocol || 'https:';\n var port = transport.port || (protocol === 'http:' ? 80 : protocol === 'https:' ? 443 : undefined);\n var hostname = transport.hostname;\n var path = transport.path;\n if (transport.search) {\n path = path + transport.search;\n }\n if (transport.proxy) {\n path = protocol + '//' + hostname + path;\n hostname = transport.proxy.host || transport.proxy.hostname;\n port = transport.proxy.port;\n protocol = transport.proxy.protocol || protocol;\n }\n return {\n protocol: protocol,\n hostname: hostname,\n path: path,\n port: port,\n method: method\n };\n}\n\nfunction appendPathToPath(base, path) {\n var baseTrailingSlash = /\\/$/.test(base);\n var pathBeginningSlash = /^\\//.test(path);\n\n if (baseTrailingSlash && pathBeginningSlash) {\n path = path.substring(1);\n } else if (!baseTrailingSlash && !pathBeginningSlash) {\n path = '/' + path;\n }\n\n return base + path;\n}\n\nmodule.exports = {\n buildPayload: buildPayload,\n getTransportFromOptions: getTransportFromOptions,\n transportOptions: transportOptions,\n appendPathToPath: appendPathToPath\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/apiUtility.js\n// module id = 11\n// module chunks = 0","'use strict';\n\n/* eslint-disable no-console */\nrequire('console-polyfill');\nvar detection = require('./detection');\nvar _ = require('../utility');\n\nfunction error() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.error(_.formatArgsAsString(args));\n } else {\n console.error.apply(console, args);\n }\n}\n\nfunction info() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.info(_.formatArgsAsString(args));\n } else {\n console.info.apply(console, args);\n }\n}\n\nfunction log() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.log(_.formatArgsAsString(args));\n } else {\n console.log.apply(console, args);\n }\n}\n\n/* eslint-enable no-console */\n\nmodule.exports = {\n error: error,\n info: info,\n log: log\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/logger.js\n// module id = 12\n// module chunks = 0","// Console-polyfill. MIT license.\n// https://github.com/paulmillr/console-polyfill\n// Make it safe to do console.log() always.\n(function(global) {\n 'use strict';\n if (!global.console) {\n global.console = {};\n }\n var con = global.console;\n var prop, method;\n var dummy = function() {};\n var properties = ['memory'];\n var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' +\n 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' +\n 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',');\n while (prop = properties.pop()) if (!con[prop]) con[prop] = {};\n while (method = methods.pop()) if (!con[method]) con[method] = dummy;\n // Using `this` for web workers & supports Browserify / Webpack.\n})(typeof window === 'undefined' ? this : window);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/console-polyfill/index.js\n// module id = 13\n// module chunks = 0","'use strict';\n\n// This detection.js module is used to encapsulate any ugly browser/feature\n// detection we may need to do.\n\n// Figure out which version of IE we're using, if any.\n// This is gleaned from http://stackoverflow.com/questions/5574842/best-way-to-check-for-ie-less-than-9-in-javascript-without-library\n// Will return an integer on IE (i.e. 8)\n// Will return undefined otherwise\nfunction getIEVersion() {\n\tvar undef;\n\tif (!document) {\n\t\treturn undef;\n\t}\n\n var v = 3,\n div = document.createElement('div'),\n all = div.getElementsByTagName('i');\n\n while (\n div.innerHTML = '',\n all[0]\n );\n\n return v > 4 ? v : undef;\n}\n\nvar Detection = {\n ieVersion: getIEVersion\n};\n\nmodule.exports = Detection;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/detection.js\n// module id = 14\n// module chunks = 0","'use strict';\n\nfunction captureUncaughtExceptions(window, handler, shim) {\n if (!window) { return; }\n var oldOnError;\n\n if (typeof handler._rollbarOldOnError === 'function') {\n oldOnError = handler._rollbarOldOnError;\n } else if (window.onerror && !window.onerror.belongsToShim) {\n oldOnError = window.onerror;\n handler._rollbarOldOnError = oldOnError;\n }\n\n var fn = function() {\n var args = Array.prototype.slice.call(arguments, 0);\n _rollbarWindowOnError(window, handler, oldOnError, args);\n };\n fn.belongsToShim = shim;\n window.onerror = fn;\n}\n\nfunction _rollbarWindowOnError(window, r, old, args) {\n if (window._rollbarWrappedError) {\n if (!args[4]) {\n args[4] = window._rollbarWrappedError;\n }\n if (!args[5]) {\n args[5] = window._rollbarWrappedError._rollbarContext;\n }\n window._rollbarWrappedError = null;\n }\n\n r.handleUncaughtException.apply(r, args);\n if (old) {\n old.apply(window, args);\n }\n}\n\nfunction captureUnhandledRejections(window, handler, shim) {\n if (!window) { return; }\n\n if (typeof window._rollbarURH === 'function' && window._rollbarURH.belongsToShim) {\n window.removeEventListener('unhandledrejection', window._rollbarURH);\n }\n\n var rejectionHandler = function (evt) {\n var reason, promise, detail;\n try {\n reason = evt.reason;\n } catch (e) {\n reason = undefined;\n }\n try {\n promise = evt.promise;\n } catch (e) {\n promise = '[unhandledrejection] error getting `promise` from event';\n }\n try {\n detail = evt.detail;\n if (!reason && detail) {\n reason = detail.reason;\n promise = detail.promise;\n }\n } catch (e) {\n detail = '[unhandledrejection] error getting `detail` from event';\n }\n if (!reason) {\n reason = '[unhandledrejection] error getting `reason` from event';\n }\n\n if (handler && handler.handleUnhandledRejection) {\n handler.handleUnhandledRejection(reason, promise);\n }\n };\n rejectionHandler.belongsToShim = shim;\n window._rollbarURH = rejectionHandler;\n window.addEventListener('unhandledrejection', rejectionHandler);\n}\n\nfunction wrapGlobals(window, handler, shim) {\n if (!window) { return; }\n // Adapted from https://github.com/bugsnag/bugsnag-js\n var globals = 'EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload'.split(',');\n var i, global;\n for (i = 0; i < globals.length; ++i) {\n global = globals[i];\n\n if (window[global] && window[global].prototype) {\n _extendListenerPrototype(handler, window[global].prototype, shim);\n }\n }\n}\n\nfunction _extendListenerPrototype(handler, prototype, shim) {\n if (prototype.hasOwnProperty && prototype.hasOwnProperty('addEventListener')) {\n var oldAddEventListener = prototype.addEventListener;\n while (oldAddEventListener._rollbarOldAdd && oldAddEventListener.belongsToShim) {\n oldAddEventListener = oldAddEventListener._rollbarOldAdd;\n }\n var addFn = function(event, callback, bubble) {\n oldAddEventListener.call(this, event, handler.wrap(callback), bubble);\n };\n addFn._rollbarOldAdd = oldAddEventListener;\n addFn.belongsToShim = shim;\n prototype.addEventListener = addFn;\n\n var oldRemoveEventListener = prototype.removeEventListener;\n while (oldRemoveEventListener._rollbarOldRemove && oldRemoveEventListener.belongsToShim) {\n oldRemoveEventListener = oldRemoveEventListener._rollbarOldRemove;\n }\n var removeFn = function(event, callback, bubble) {\n oldRemoveEventListener.call(this, event, callback && callback._rollbar_wrapped || callback, bubble);\n };\n removeFn._rollbarOldRemove = oldRemoveEventListener;\n removeFn.belongsToShim = shim;\n prototype.removeEventListener = removeFn;\n }\n}\n\nmodule.exports = {\n captureUncaughtExceptions: captureUncaughtExceptions,\n captureUnhandledRejections: captureUnhandledRejections,\n wrapGlobals: wrapGlobals\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/globalSetup.js\n// module id = 15\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar logger = require('./logger');\n\n/*\n * accessToken may be embedded in payload but that should not\n * be assumed\n *\n * options: {\n * hostname\n * protocol\n * path\n * port\n * method\n * }\n *\n * params is an object containing key/value pairs. These\n * will be appended to the path as 'key=value&key=value'\n *\n * payload is an unserialized object\n */\n\nfunction get(accessToken, options, params, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n _.addParamsAndAccessTokenToPath(accessToken, options, params);\n\n var method = 'GET';\n var url = _.formatUrl(options);\n _makeRequest(accessToken, url, method, null, callback, requestFactory);\n}\n\nfunction post(accessToken, options, payload, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!payload) {\n return callback(new Error('Cannot send empty request'));\n }\n\n var stringifyResult = _.stringify(payload);\n if (stringifyResult.error) {\n return callback(stringifyResult.error);\n }\n\n var writeData = stringifyResult.value;\n var method = 'POST';\n var url = _.formatUrl(options);\n _makeRequest(accessToken, url, method, writeData, callback, requestFactory);\n}\n\nfunction _makeRequest(accessToken, url, method, data, callback, requestFactory) {\n var request;\n if (requestFactory) {\n request = requestFactory();\n } else {\n request = _createXMLHTTPObject();\n }\n if (!request) {\n // Give up, no way to send requests\n return callback(new Error('No way to send a request'));\n }\n try {\n try {\n var onreadystatechange = function() {\n try {\n if (onreadystatechange && request.readyState === 4) {\n onreadystatechange = undefined;\n\n var parseResponse = _.jsonParse(request.responseText);\n if (_isSuccess(request)) {\n callback(parseResponse.error, parseResponse.value);\n return;\n } else if (_isNormalFailure(request)) {\n if (request.status === 403) {\n // likely caused by using a server access token\n var message = parseResponse.value && parseResponse.value.message;\n logger.error(message);\n }\n // return valid http status codes\n callback(new Error(String(request.status)));\n } else {\n // IE will return a status 12000+ on some sort of connection failure,\n // so we return a blank error\n // http://msdn.microsoft.com/en-us/library/aa383770%28VS.85%29.aspx\n var msg = 'XHR response had no status code (likely connection failure)';\n callback(_newRetriableError(msg));\n }\n }\n } catch (ex) {\n //jquery source mentions firefox may error out while accessing the\n //request members if there is a network error\n //https://github.com/jquery/jquery/blob/a938d7b1282fc0e5c52502c225ae8f0cef219f0a/src/ajax/xhr.js#L111\n var exc;\n if (ex && ex.stack) {\n exc = ex;\n } else {\n exc = new Error(ex);\n }\n callback(exc);\n }\n };\n\n request.open(method, url, true);\n if (request.setRequestHeader) {\n request.setRequestHeader('Content-Type', 'application/json');\n request.setRequestHeader('X-Rollbar-Access-Token', accessToken);\n }\n request.onreadystatechange = onreadystatechange;\n request.send(data);\n } catch (e1) {\n // Sending using the normal xmlhttprequest object didn't work, try XDomainRequest\n if (typeof XDomainRequest !== 'undefined') {\n\n // Assume we are in a really old browser which has a bunch of limitations:\n // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\n // Extreme paranoia: if we have XDomainRequest then we have a window, but just in case\n if (!window || !window.location) {\n return callback(new Error('No window available during request, unknown environment'));\n }\n\n // If the current page is http, try and send over http\n if (window.location.href.substring(0, 5) === 'http:' && url.substring(0, 5) === 'https') {\n url = 'http' + url.substring(5);\n }\n\n var xdomainrequest = new XDomainRequest();\n xdomainrequest.onprogress = function() {};\n xdomainrequest.ontimeout = function() {\n var msg = 'Request timed out';\n var code = 'ETIMEDOUT';\n callback(_newRetriableError(msg, code));\n };\n xdomainrequest.onerror = function() {\n callback(new Error('Error during request'));\n };\n xdomainrequest.onload = function() {\n var parseResponse = _.jsonParse(xdomainrequest.responseText);\n callback(parseResponse.error, parseResponse.value);\n };\n xdomainrequest.open(method, url, true);\n xdomainrequest.send(data);\n } else {\n callback(new Error('Cannot find a method to transport a request'));\n }\n }\n } catch (e2) {\n callback(e2);\n }\n}\n\nfunction _createXMLHTTPObject() {\n /* global ActiveXObject:false */\n\n var factories = [\n function () {\n return new XMLHttpRequest();\n },\n function () {\n return new ActiveXObject('Msxml2.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Msxml3.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Microsoft.XMLHTTP');\n }\n ];\n var xmlhttp;\n var i;\n var numFactories = factories.length;\n for (i = 0; i < numFactories; i++) {\n /* eslint-disable no-empty */\n try {\n xmlhttp = factories[i]();\n break;\n } catch (e) {\n // pass\n }\n /* eslint-enable no-empty */\n }\n return xmlhttp;\n}\n\nfunction _isSuccess(r) {\n return r && r.status && r.status === 200;\n}\n\nfunction _isNormalFailure(r) {\n return r && _.isType(r.status, 'number') && r.status >= 400 && r.status < 600;\n}\n\nfunction _newRetriableError(message, code) {\n var err = new Error(message);\n err.code = code || 'ENOTFOUND';\n return err;\n}\n\nmodule.exports = {\n get: get,\n post: post\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transport.js\n// module id = 16\n// module chunks = 0","'use strict';\n\n// See https://nodejs.org/docs/latest/api/url.html\nfunction parse(url) {\n var result = {\n protocol: null, auth: null, host: null, path: null,\n hash: null, href: url, hostname: null, port: null,\n pathname: null, search: null, query: null\n };\n\n var i, last;\n i = url.indexOf('//');\n if (i !== -1) {\n result.protocol = url.substring(0,i);\n last = i+2;\n } else {\n last = 0;\n }\n \n i = url.indexOf('@', last);\n if (i !== -1) {\n result.auth = url.substring(last, i);\n last = i+1;\n }\n\n i = url.indexOf('/', last);\n if (i === -1) {\n i = url.indexOf('?', last);\n if (i === -1) {\n i = url.indexOf('#', last);\n if (i === -1) {\n result.host = url.substring(last);\n } else {\n result.host = url.substring(last, i);\n result.hash = url.substring(i);\n }\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n return result;\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n\n i = url.indexOf('#', last);\n if (i === -1) {\n result.path = url.substring(last);\n } else {\n result.path = url.substring(last, i);\n result.hash = url.substring(i);\n }\n\n if (result.path) {\n var pathParts = result.path.split('?');\n result.pathname = pathParts[0];\n result.query = pathParts[1];\n result.search = result.query ? '?' + result.query : null;\n }\n return result;\n}\n\nmodule.exports = {\n parse: parse\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/url.js\n// module id = 17\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar errorParser = require('./errorParser');\nvar logger = require('./logger');\n\nfunction handleItemWithError(item, options, callback) {\n item.data = item.data || {};\n if (item.err) {\n try {\n item.stackInfo = item.err._savedStackTrace || errorParser.parse(item.err);\n } catch (e)\n /* istanbul ignore next */\n {\n logger.error('Error while parsing the error object.', e);\n item.message = item.err.message || item.err.description || item.message || String(item.err);\n delete item.err;\n }\n }\n callback(null, item);\n}\n\nfunction ensureItemHasSomethingToSay(item, options, callback) {\n if (!item.message && !item.stackInfo && !item.custom) {\n callback(new Error('No message, stack info, or custom data'), null);\n }\n callback(null, item);\n}\n\nfunction addBaseInfo(item, options, callback) {\n var environment = (options.payload && options.payload.environment) || options.environment;\n item.data = _.extend(true, {}, item.data, {\n environment: environment,\n level: item.level,\n endpoint: options.endpoint,\n platform: 'browser',\n framework: 'browser-js',\n language: 'javascript',\n server: {},\n uuid: item.uuid,\n notifier: {\n name: 'rollbar-browser-js',\n version: options.version\n }\n });\n callback(null, item);\n}\n\nfunction addRequestInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.location) {\n return callback(null, item);\n }\n _.set(item, 'data.request', {\n url: window.location.href,\n query_string: window.location.search,\n user_ip: '$remote_ip'\n });\n callback(null, item);\n };\n}\n\nfunction addClientInfo(window) {\n return function(item, options, callback) {\n if (!window) {\n return callback(null, item);\n }\n var nav = window.navigator || {};\n var scr = window.screen || {};\n _.set(item, 'data.client', {\n runtime_ms: item.timestamp - window._rollbarStartTime,\n timestamp: Math.round(item.timestamp / 1000),\n javascript: {\n browser: nav.userAgent,\n language: nav.language,\n cookie_enabled: nav.cookieEnabled,\n screen: {\n width: scr.width,\n height: scr.height\n }\n }\n });\n callback(null, item);\n };\n}\n\nfunction addPluginInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.navigator) {\n return callback(null, item);\n }\n var plugins = [];\n var navPlugins = window.navigator.plugins || [];\n var cur;\n for (var i=0, l=navPlugins.length; i < l; ++i) {\n cur = navPlugins[i];\n plugins.push({name: cur.name, description: cur.description});\n }\n _.set(item, 'data.client.javascript.plugins', plugins);\n callback(null, item);\n };\n}\n\nfunction addBody(item, options, callback) {\n if (item.stackInfo) {\n addBodyTrace(item, options, callback);\n } else {\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction addBodyMessage(item, options, callback) {\n var message = item.message;\n var custom = item.custom;\n\n if (!message) {\n if (custom) {\n var scrubFields = options.scrubFields;\n var messageResult = _.stringify(_.scrub(custom, scrubFields));\n message = messageResult.error || messageResult.value || '';\n } else {\n message = '';\n }\n }\n var result = {\n body: message\n };\n\n if (custom) {\n result.extra = _.extend(true, {}, custom);\n }\n\n _.set(item, 'data.body', {message: result});\n callback(null, item);\n}\n\n\nfunction addBodyTrace(item, options, callback) {\n var description = item.data.description;\n var stackInfo = item.stackInfo;\n var custom = item.custom;\n\n var guess = errorParser.guessErrorClass(stackInfo.message);\n var className = stackInfo.name || guess[0];\n var message = guess[1];\n var trace = {\n exception: {\n 'class': className,\n message: message\n }\n };\n\n if (description) {\n trace.exception.description = description;\n }\n\n // Transform a TraceKit stackInfo object into a Rollbar trace\n var stack = stackInfo.stack;\n if (stack && stack.length === 0 && item._unhandledStackInfo && item._unhandledStackInfo.stack) {\n stack = item._unhandledStackInfo.stack;\n }\n if (stack) {\n if (stack.length === 0) {\n trace.exception.stack = stackInfo.rawStack;\n trace.exception.raw = String(stackInfo.rawException);\n }\n var stackFrame;\n var frame;\n var code;\n var pre;\n var post;\n var contextLength;\n var i, mid;\n\n trace.frames = [];\n for (i = 0; i < stack.length; ++i) {\n stackFrame = stack[i];\n frame = {\n filename: stackFrame.url ? _.sanitizeUrl(stackFrame.url) : '(unknown)',\n lineno: stackFrame.line || null,\n method: (!stackFrame.func || stackFrame.func === '?') ? '[anonymous]' : stackFrame.func,\n colno: stackFrame.column\n };\n if (frame.method && frame.method.endsWith && frame.method.endsWith('_rollbar_wrapped')) {\n continue;\n }\n\n code = pre = post = null;\n contextLength = stackFrame.context ? stackFrame.context.length : 0;\n if (contextLength) {\n mid = Math.floor(contextLength / 2);\n pre = stackFrame.context.slice(0, mid);\n code = stackFrame.context[mid];\n post = stackFrame.context.slice(mid);\n }\n\n if (code) {\n frame.code = code;\n }\n\n if (pre || post) {\n frame.context = {};\n if (pre && pre.length) {\n frame.context.pre = pre;\n }\n if (post && post.length) {\n frame.context.post = post;\n }\n }\n\n if (stackFrame.args) {\n frame.args = stackFrame.args;\n }\n\n trace.frames.push(frame);\n }\n\n // NOTE(cory): reverse the frames since rollbar.com expects the most recent call last\n trace.frames.reverse();\n\n if (custom) {\n trace.extra = _.extend(true, {}, custom);\n }\n _.set(item, 'data.body', {trace: trace});\n callback(null, item);\n } else {\n item.message = className + ': ' + message;\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction scrubPayload(item, options, callback) {\n var scrubFields = options.scrubFields;\n item.data = _.scrub(item.data, scrubFields);\n callback(null, item);\n}\n\nmodule.exports = {\n handleItemWithError: handleItemWithError,\n ensureItemHasSomethingToSay: ensureItemHasSomethingToSay,\n addBaseInfo: addBaseInfo,\n addRequestInfo: addRequestInfo,\n addClientInfo: addClientInfo,\n addPluginInfo: addPluginInfo,\n addBody: addBody,\n scrubPayload: scrubPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transforms.js\n// module id = 18\n// module chunks = 0","'use strict';\n\nvar ErrorStackParser = require('error-stack-parser');\n\nvar UNKNOWN_FUNCTION = '?';\nvar ERR_CLASS_REGEXP = new RegExp('^(([a-zA-Z0-9-_$ ]*): *)?(Uncaught )?([a-zA-Z0-9-_$ ]*): ');\n\nfunction guessFunctionName() {\n return UNKNOWN_FUNCTION;\n}\n\n\nfunction gatherContext() {\n return null;\n}\n\n\nfunction Frame(stackFrame) {\n var data = {};\n\n data._stackFrame = stackFrame;\n\n data.url = stackFrame.fileName;\n data.line = stackFrame.lineNumber;\n data.func = stackFrame.functionName;\n data.column = stackFrame.columnNumber;\n data.args = stackFrame.args;\n\n data.context = gatherContext(data.url, data.line);\n\n return data;\n}\n\n\nfunction Stack(exception) {\n function getStack() {\n var parserStack = [];\n var exc;\n\n if (!exception.stack) {\n try {\n throw exception;\n } catch (e) {\n exc = e;\n }\n } else {\n exc = exception;\n }\n\n try {\n parserStack = ErrorStackParser.parse(exc);\n } catch(e) {\n parserStack = [];\n }\n\n var stack = [];\n\n for (var i = 0; i < parserStack.length; i++) {\n stack.push(new Frame(parserStack[i]));\n }\n\n return stack;\n }\n\n return {\n stack: getStack(),\n message: exception.message,\n name: exception.name,\n rawStack: exception.stack,\n rawException: exception\n };\n}\n\n\nfunction parse(e) {\n return new Stack(e);\n}\n\n\nfunction guessErrorClass(errMsg) {\n if (!errMsg || !errMsg.match) {\n return ['Unknown error. There was no error message to display.', ''];\n }\n var errClassMatch = errMsg.match(ERR_CLASS_REGEXP);\n var errClass = '(unknown)';\n\n if (errClassMatch) {\n errClass = errClassMatch[errClassMatch.length - 1];\n errMsg = errMsg.replace((errClassMatch[errClassMatch.length - 2] || '') + errClass + ':', '');\n errMsg = errMsg.replace(/(^[\\s]+|[\\s]+$)/g, '');\n }\n return [errClass, errMsg];\n}\n\n\nmodule.exports = {\n guessFunctionName: guessFunctionName,\n guessErrorClass: guessErrorClass,\n gatherContext: gatherContext,\n parse: parse,\n Stack: Stack,\n Frame: Frame\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/errorParser.js\n// module id = 19\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = locationParts[0] === 'eval' ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/error-stack-parser.js\n// module id = 20\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stackframe', [], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.StackFrame = factory();\n }\n}(this, function () {\n 'use strict';\n function _isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n function StackFrame(functionName, args, fileName, lineNumber, columnNumber, source) {\n if (functionName !== undefined) {\n this.setFunctionName(functionName);\n }\n if (args !== undefined) {\n this.setArgs(args);\n }\n if (fileName !== undefined) {\n this.setFileName(fileName);\n }\n if (lineNumber !== undefined) {\n this.setLineNumber(lineNumber);\n }\n if (columnNumber !== undefined) {\n this.setColumnNumber(columnNumber);\n }\n if (source !== undefined) {\n this.setSource(source);\n }\n }\n\n StackFrame.prototype = {\n getFunctionName: function () {\n return this.functionName;\n },\n setFunctionName: function (v) {\n this.functionName = String(v);\n },\n\n getArgs: function () {\n return this.args;\n },\n setArgs: function (v) {\n if (Object.prototype.toString.call(v) !== '[object Array]') {\n throw new TypeError('Args must be an Array');\n }\n this.args = v;\n },\n\n // NOTE: Property name may be misleading as it includes the path,\n // but it somewhat mirrors V8's JavaScriptStackTraceApi\n // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's\n // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14\n getFileName: function () {\n return this.fileName;\n },\n setFileName: function (v) {\n this.fileName = String(v);\n },\n\n getLineNumber: function () {\n return this.lineNumber;\n },\n setLineNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Line Number must be a Number');\n }\n this.lineNumber = Number(v);\n },\n\n getColumnNumber: function () {\n return this.columnNumber;\n },\n setColumnNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Column Number must be a Number');\n }\n this.columnNumber = Number(v);\n },\n\n getSource: function () {\n return this.source;\n },\n setSource: function (v) {\n this.source = String(v);\n },\n\n toString: function() {\n var functionName = this.getFunctionName() || '{anonymous}';\n var args = '(' + (this.getArgs() || []).join(',') + ')';\n var fileName = this.getFileName() ? ('@' + this.getFileName()) : '';\n var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : '';\n var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : '';\n return functionName + args + fileName + lineNumber + columnNumber;\n }\n };\n\n return StackFrame;\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/~/stackframe/stackframe.js\n// module id = 21\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction itemToPayload(item, options, callback) {\n var payloadOptions = options.payload || {};\n if (payloadOptions.body) {\n delete payloadOptions.body;\n }\n\n var data = _.extend(true, {}, item.data, payloadOptions);\n if (item._isUncaught) {\n data._isUncaught = true;\n }\n if (item._originalArgs) {\n data._originalArgs = item._originalArgs;\n }\n callback(null, data);\n}\n\nfunction addTelemetryData(item, options, callback) {\n if (item.telemetryEvents) {\n _.set(item, 'data.body.telemetry', item.telemetryEvents);\n }\n callback(null, item);\n}\n\nfunction addMessageWithError(item, options, callback) {\n if (!item.message) {\n callback(null, item);\n return;\n }\n var tracePath = 'data.body.trace_chain.0';\n var trace = _.get(item, tracePath);\n if (!trace) {\n tracePath = 'data.body.trace';\n trace = _.get(item, tracePath);\n }\n if (trace) {\n if (!(trace.exception && trace.exception.description)) {\n _.set(item, tracePath+'.exception.description', item.message);\n callback(null, item);\n return;\n }\n var extra = _.get(item, tracePath+'.extra') || {};\n var newExtra = _.extend(true, {}, extra, {message: item.message});\n _.set(item, tracePath+'.extra', newExtra);\n }\n callback(null, item);\n}\n\nfunction userTransform(logger) {\n return function(item, options, callback) {\n var newItem = _.extend(true, {}, item);\n try {\n if (_.isFunction(options.transform)) {\n options.transform(newItem.data);\n }\n } catch (e) {\n options.transform = null;\n logger.error('Error while calling custom transform() function. Removing custom transform().', e);\n callback(null, item);\n return;\n }\n callback(null, newItem);\n }\n}\n\nfunction addConfigToPayload(item, options, callback) {\n if (!options.sendConfig) {\n return callback(null, item);\n }\n var configKey = '_rollbarConfig';\n var custom = _.get(item, 'data.custom') || {};\n custom[configKey] = options;\n item.data.custom = custom;\n callback(null, item);\n}\n\nmodule.exports = {\n itemToPayload: itemToPayload,\n addTelemetryData: addTelemetryData,\n addMessageWithError: addMessageWithError,\n userTransform: userTransform,\n addConfigToPayload: addConfigToPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/transforms.js\n// module id = 22\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\n\nfunction checkIgnore(item, settings) {\n if (_.get(settings, 'plugins.jquery.ignoreAjaxErrors')) {\n return !_.get(item, 'body.message.extra.isAjax');\n }\n return true;\n}\n\nmodule.exports = {\n checkIgnore: checkIgnore\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/predicates.js\n// module id = 23\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction checkLevel(item, settings) {\n var level = item.level;\n var levelVal = _.LEVELS[level] || 0;\n var reportLevel = settings.reportLevel;\n var reportLevelVal = _.LEVELS[reportLevel] || 0;\n\n if (levelVal < reportLevelVal) {\n return false;\n }\n return true;\n}\n\nfunction userCheckIgnore(logger) {\n return function(item, settings) {\n var isUncaught = !!item._isUncaught;\n delete item._isUncaught;\n var args = item._originalArgs;\n delete item._originalArgs;\n try {\n if (_.isFunction(settings.onSendCallback)) {\n settings.onSendCallback(isUncaught, args, item);\n }\n } catch (e) {\n settings.onSendCallback = null;\n logger.error('Error while calling onSendCallback, removing', e);\n }\n try {\n if (_.isFunction(settings.checkIgnore) && settings.checkIgnore(isUncaught, args, item)) {\n return false;\n }\n } catch (e) {\n settings.checkIgnore = null;\n logger.error('Error while calling custom checkIgnore(), removing', e);\n }\n return true;\n }\n}\n\nfunction urlIsNotBlacklisted(logger) {\n return function(item, settings) {\n return !urlIsOnAList(item, settings, 'blacklist', logger);\n }\n}\n\nfunction urlIsWhitelisted(logger) {\n return function(item, settings) {\n return urlIsOnAList(item, settings, 'whitelist', logger);\n }\n}\n\nfunction urlIsOnAList(item, settings, whiteOrBlack, logger) {\n // whitelist is the default\n var black = false;\n if (whiteOrBlack === 'blacklist') {\n black = true;\n }\n var list, trace, frame, filename, frameLength, url, listLength, urlRegex;\n var i, j;\n\n try {\n list = black ? settings.hostBlackList : settings.hostWhiteList;\n listLength = list && list.length;\n trace = _.get(item, 'body.trace');\n\n // These two checks are important to come first as they are defaults\n // in case the list is missing or the trace is missing or not well-formed\n if (!list || listLength === 0) {\n return !black;\n }\n if (!trace || !trace.frames || trace.frames.length === 0) {\n return !black;\n }\n\n frameLength = trace.frames.length;\n for (i = 0; i < frameLength; i++) {\n frame = trace.frames[i];\n filename = frame.filename;\n\n if (!_.isType(filename, 'string')) {\n return !black;\n }\n\n for (j = 0; j < listLength; j++) {\n url = list[j];\n urlRegex = new RegExp(url);\n\n if (urlRegex.test(filename)) {\n return true;\n }\n }\n }\n } catch (e)\n /* istanbul ignore next */\n {\n if (black) {\n settings.hostBlackList = null;\n } else {\n settings.hostWhiteList = null;\n }\n var listName = black ? 'hostBlackList' : 'hostWhiteList';\n logger.error('Error while reading your configuration\\'s ' + listName + ' option. Removing custom ' + listName + '.', e);\n return !black;\n }\n return false;\n}\n\nfunction messageIsIgnored(logger) {\n return function(item, settings) {\n var exceptionMessage, i, ignoredMessages,\n len, messageIsIgnored, rIgnoredMessage,\n body, traceMessage, bodyMessage;\n\n try {\n messageIsIgnored = false;\n ignoredMessages = settings.ignoredMessages;\n\n if (!ignoredMessages || ignoredMessages.length === 0) {\n return true;\n }\n\n body = item.body;\n traceMessage = _.get(body, 'trace.exception.message');\n bodyMessage = _.get(body, 'message.body');\n\n exceptionMessage = traceMessage || bodyMessage;\n\n if (!exceptionMessage){\n return true;\n }\n\n len = ignoredMessages.length;\n for (i = 0; i < len; i++) {\n rIgnoredMessage = new RegExp(ignoredMessages[i], 'gi');\n messageIsIgnored = rIgnoredMessage.test(exceptionMessage);\n\n if (messageIsIgnored) {\n break;\n }\n }\n } catch(e)\n /* istanbul ignore next */\n {\n settings.ignoredMessages = null;\n logger.error('Error while reading your configuration\\'s ignoredMessages option. Removing custom ignoredMessages.');\n }\n\n return !messageIsIgnored;\n }\n}\n\nmodule.exports = {\n checkLevel: checkLevel,\n userCheckIgnore: userCheckIgnore,\n urlIsNotBlacklisted: urlIsNotBlacklisted,\n urlIsWhitelisted: urlIsWhitelisted,\n messageIsIgnored: messageIsIgnored\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/predicates.js\n// module id = 24\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar urlparser = require('./url');\nvar domUtil = require('./domUtility');\n\nvar defaults = {\n network: true,\n networkResponseHeaders: false,\n networkResponseBody: false,\n networkRequestBody: false,\n log: true,\n dom: true,\n navigation: true,\n connectivity: true\n};\n\nfunction replace(obj, name, replacement, replacements, type) {\n var orig = obj[name];\n obj[name] = replacement(orig);\n if (replacements) {\n replacements[type].push([obj, name, orig]);\n }\n}\n\nfunction restore(replacements, type) {\n var b;\n while (replacements[type].length) {\n b = replacements[type].shift();\n b[0][b[1]] = b[2];\n }\n}\n\nfunction Instrumenter(options, telemeter, rollbar, _window, _document) {\n var autoInstrument = options.autoInstrument;\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.extend(true, {}, defaults, autoInstrument);\n }\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n this.telemetryScrubber = options.telemetryScrubber;\n this.telemeter = telemeter;\n this.rollbar = rollbar;\n this._window = _window || {};\n this._document = _document || {};\n this.replacements = {\n network: [],\n log: [],\n navigation: [],\n connectivity: []\n };\n this.eventRemovers = {\n dom: [],\n connectivity: []\n };\n\n this._location = this._window.location;\n this._lastHref = this._location && this._location.href;\n}\n\nInstrumenter.prototype.configure = function(options) {\n var autoInstrument = options.autoInstrument;\n var oldSettings = _.extend(true, {}, this.autoInstrument);\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.extend(true, {}, defaults, autoInstrument);\n }\n this.instrument(oldSettings);\n if (options.scrubTelemetryInputs !== undefined) {\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n }\n if (options.telemetryScrubber !== undefined) {\n this.telemetryScrubber = options.telemetryScrubber;\n }\n};\n\nInstrumenter.prototype.instrument = function(oldSettings) {\n if (this.autoInstrument.network && !(oldSettings && oldSettings.network)) {\n this.instrumentNetwork();\n } else if (!this.autoInstrument.network && oldSettings && oldSettings.network) {\n this.deinstrumentNetwork();\n }\n\n if (this.autoInstrument.log && !(oldSettings && oldSettings.log)) {\n this.instrumentConsole();\n } else if (!this.autoInstrument.log && oldSettings && oldSettings.log) {\n this.deinstrumentConsole();\n }\n\n if (this.autoInstrument.dom && !(oldSettings && oldSettings.dom)) {\n this.instrumentDom();\n } else if (!this.autoInstrument.dom && oldSettings && oldSettings.dom) {\n this.deinstrumentDom();\n }\n\n if (this.autoInstrument.navigation && !(oldSettings && oldSettings.navigation)) {\n this.instrumentNavigation();\n } else if (!this.autoInstrument.navigation && oldSettings && oldSettings.navigation) {\n this.deinstrumentNavigation();\n }\n\n if (this.autoInstrument.connectivity && !(oldSettings && oldSettings.connectivity)) {\n this.instrumentConnectivity();\n } else if (!this.autoInstrument.connectivity && oldSettings && oldSettings.connectivity) {\n this.deinstrumentConnectivity();\n }\n};\n\nInstrumenter.prototype.deinstrumentNetwork = function() {\n restore(this.replacements, 'network');\n};\n\nInstrumenter.prototype.instrumentNetwork = function() {\n var self = this;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && _.isFunction(xhr[prop])) {\n replace(xhr, prop, function(orig) {\n return self.rollbar.wrap(orig);\n });\n }\n }\n\n if ('XMLHttpRequest' in this._window) {\n var xhrp = this._window.XMLHttpRequest.prototype;\n replace(xhrp, 'open', function(orig) {\n return function(method, url) {\n if (_.isType(url, 'string')) {\n this.__rollbar_xhr = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'network');\n\n replace(xhrp, 'send', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(data) {\n /* eslint-enable no-unused-vars */\n var xhr = this;\n\n function onreadystatechangeHandler() {\n if (xhr.__rollbar_xhr && (xhr.readyState === 1 || xhr.readyState === 4)) {\n if (xhr.__rollbar_xhr.status_code === null) {\n xhr.__rollbar_xhr.status_code = 0;\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n requestData = data;\n }\n xhr.__rollbar_event = self.telemeter.captureNetwork(xhr.__rollbar_xhr, 'xhr', undefined, requestData);\n }\n if (xhr.readyState === 1) {\n xhr.__rollbar_xhr.start_time_ms = _.now();\n } else {\n xhr.__rollbar_xhr.end_time_ms = _.now();\n\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n var header, i;\n if (headersConfig === true) {\n var allHeaders = xhr.getAllResponseHeaders();\n if (allHeaders) {\n var arr = allHeaders.trim().split(/[\\r\\n]+/);\n var parts, value;\n for (i=0; i < arr.length; i++) {\n parts = arr[i].split(': ');\n header = parts.shift();\n value = parts.join(': ');\n headers[header] = value;\n }\n }\n } else {\n for (i=0; i < headersConfig.length; i++) {\n header = headersConfig[i];\n headers[header] = xhr.getResponseHeader(header);\n }\n }\n } catch (e) {\n /* we ignore the errors here that could come from different\n * browser issues with the xhr methods */\n }\n }\n var body = null;\n if (self.autoInstrument.networkResponseBody) {\n try {\n body = xhr.responseText;\n } catch (e) {\n /* ignore errors from reading responseText */\n }\n }\n var response = null;\n if (body || headers) {\n response = {};\n if (body) {\n response.body = body;\n }\n if (headers) {\n response.headers = headers;\n }\n }\n if (response) {\n xhr.__rollbar_xhr.response = response;\n }\n }\n try {\n var code = xhr.status;\n code = code === 1223 ? 204 : code;\n xhr.__rollbar_xhr.status_code = code;\n xhr.__rollbar_event.level = self.telemeter.levelFromStatus(code);\n } catch (e) {\n /* ignore possible exception from xhr.status */\n }\n }\n }\n\n wrapProp('onload', xhr);\n wrapProp('onerror', xhr);\n wrapProp('onprogress', xhr);\n\n if ('onreadystatechange' in xhr && _.isFunction(xhr.onreadystatechange)) {\n replace(xhr, 'onreadystatechange', function(orig) {\n return self.rollbar.wrap(orig, undefined, onreadystatechangeHandler);\n });\n } else {\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n return orig.apply(this, arguments);\n }\n }, this.replacements, 'network');\n }\n\n if ('fetch' in this._window) {\n replace(this._window, 'fetch', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(fn, t) {\n /* eslint-enable no-unused-vars */\n var args = new Array(arguments.length);\n for (var i=0, len=args.length; i < len; i++) {\n args[i] = arguments[i];\n }\n var input = args[0];\n var method = 'GET';\n var url;\n if (_.isType(input, 'string')) {\n url = input;\n } else if (input) {\n url = input.url;\n if (input.method) {\n method = input.method;\n }\n }\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n var metadata = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n if (args[1] && args[1].body) {\n requestData = args[1].body;\n } else if (args[0] && !_.isType(args[0], 'string') && args[0].body) {\n requestData = args[0].body;\n }\n }\n self.telemeter.captureNetwork(metadata, 'fetch', undefined, requestData);\n return orig.apply(this, args).then(function (resp) {\n metadata.end_time_ms = _.now();\n metadata.status_code = resp.status;\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n if (headersConfig === true) {\n // This is unsupported in IE so we can't do it\n /*\n var allHeaders = resp.headers.entries();\n for (var pair of allHeaders) {\n headers[pair[0]] = pair[1];\n }\n */\n } else {\n for (var i=0; i < headersConfig.length; i++) {\n var header = headersConfig[i];\n headers[header] = resp.headers.get(header);\n }\n }\n } catch (e) {\n /* ignore probable IE errors */\n }\n }\n var response = null;\n if (headers) {\n response = {\n headers: headers\n };\n }\n if (response) {\n metadata.response = response;\n }\n return resp;\n });\n };\n }, this.replacements, 'network');\n }\n};\n\nInstrumenter.prototype.deinstrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n var b;\n while (this.replacements['log'].length) {\n b = this.replacements['log'].shift();\n this._window.console[b[0]] = b[1];\n }\n};\n\nInstrumenter.prototype.instrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n\n var self = this;\n var c = this._window.console;\n\n function wrapConsole(method) {\n var orig = c[method];\n var origConsole = c;\n var level = method === 'warn' ? 'warning' : method;\n c[method] = function() {\n var args = Array.prototype.slice.call(arguments);\n var message = _.formatArgsAsString(args);\n self.telemeter.captureLog(message, level);\n if (orig) {\n Function.prototype.apply.call(orig, origConsole, args);\n }\n };\n self.replacements['log'].push([method, orig]);\n }\n var methods = ['debug','info','warn','error','log'];\n for (var i=0, len=methods.length; i < len; i++) {\n wrapConsole(methods[i]);\n }\n};\n\nInstrumenter.prototype.deinstrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n this.removeListeners('dom');\n};\n\nInstrumenter.prototype.instrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n var clickHandler = this.handleClick.bind(this);\n var blurHandler = this.handleBlur.bind(this);\n this.addListener('dom', this._window, 'click', 'onclick', clickHandler, true);\n this.addListener('dom', this._window, 'blur', 'onfocusout', blurHandler, true);\n};\n\nInstrumenter.prototype.handleClick = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n var hasTag = e && e.tagName;\n var anchorOrButton = domUtil.isDescribedElement(e, 'a') || domUtil.isDescribedElement(e, 'button');\n if (hasTag && (anchorOrButton || domUtil.isDescribedElement(e, 'input', ['button', 'submit']))) {\n this.captureDomEvent('click', e);\n } else if (domUtil.isDescribedElement(e, 'input', ['checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value, e.checked);\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleBlur = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n if (e && e.tagName) {\n if (domUtil.isDescribedElement(e, 'textarea')) {\n this.captureDomEvent('input', e, e.value);\n } else if (domUtil.isDescribedElement(e, 'select') && e.options && e.options.length) {\n this.handleSelectInputChanged(e);\n } else if (domUtil.isDescribedElement(e, 'input') && !domUtil.isDescribedElement(e, 'input', ['button', 'submit', 'hidden', 'checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value);\n }\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleSelectInputChanged = function(elem) {\n if (elem.multiple) {\n for (var i = 0; i < elem.options.length; i++) {\n if (elem.options[i].selected) {\n this.captureDomEvent('input', elem, elem.options[i].value);\n }\n }\n } else if (elem.selectedIndex >= 0 && elem.options[elem.selectedIndex]) {\n this.captureDomEvent('input', elem, elem.options[elem.selectedIndex].value);\n }\n};\n\nInstrumenter.prototype.captureDomEvent = function(subtype, element, value, isChecked) {\n if (value !== undefined) {\n if (this.scrubTelemetryInputs || (domUtil.getElementType(element) === 'password')) {\n value = '[scrubbed]';\n } else if (this.telemetryScrubber) {\n var description = domUtil.describeElement(element);\n if (this.telemetryScrubber(description)) {\n value = '[scrubbed]';\n }\n }\n }\n var elementString = domUtil.elementArrayToString(domUtil.treeToArray(element));\n this.telemeter.captureDom(subtype, elementString, value, isChecked);\n};\n\nInstrumenter.prototype.deinstrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n restore(this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.instrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n var self = this;\n replace(this._window, 'onpopstate', function(orig) {\n return function() {\n var current = self._location.href;\n self.handleUrlChange(self._lastHref, current);\n if (orig) {\n orig.apply(this, arguments);\n }\n };\n }, this.replacements, 'navigation');\n\n replace(this._window.history, 'pushState', function(orig) {\n return function() {\n var url = arguments.length > 2 ? arguments[2] : undefined;\n if (url) {\n self.handleUrlChange(self._lastHref, url + '');\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.handleUrlChange = function(from, to) {\n var parsedHref = urlparser.parse(this._location.href);\n var parsedTo = urlparser.parse(to);\n var parsedFrom = urlparser.parse(from);\n this._lastHref = to;\n if (parsedHref.protocol === parsedTo.protocol && parsedHref.host === parsedTo.host) {\n to = parsedTo.path + (parsedTo.hash || '');\n }\n if (parsedHref.protocol === parsedFrom.protocol && parsedHref.host === parsedFrom.host) {\n from = parsedFrom.path + (parsedFrom.hash || '');\n }\n this.telemeter.captureNavigation(from, to);\n};\n\nInstrumenter.prototype.deinstrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.removeListeners('connectivity');\n } else {\n restore(this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.instrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.addListener('connectivity', this._window, 'online', undefined, function() {\n this.telemeter.captureConnectivityChange('online');\n }.bind(this), true);\n this.addListener('connectivity', this._window, 'offline', undefined, function() {\n this.telemeter.captureConnectivityChange('offline');\n }.bind(this), true);\n } else {\n var self = this;\n replace(this._document.body, 'ononline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('online');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n replace(this._document.body, 'onoffline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('offline');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.addListener = function(section, obj, type, altType, handler, capture) {\n if (obj.addEventListener) {\n obj.addEventListener(type, handler, capture);\n this.eventRemovers[section].push(function() {\n obj.removeEventListener(type, handler, capture);\n });\n } else if (altType) {\n obj.attachEvent(altType, handler);\n this.eventRemovers[section].push(function() {\n obj.detachEvent(altType, handler);\n });\n }\n};\n\nInstrumenter.prototype.removeListeners = function(section) {\n var r;\n while (this.eventRemovers[section].length) {\n r = this.eventRemovers[section].shift();\n r();\n }\n};\n\nmodule.exports = Instrumenter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/telemetry.js\n// module id = 25\n// module chunks = 0","'use strict';\n\nfunction getElementType(e) {\n return (e.getAttribute('type') || '').toLowerCase();\n}\n\nfunction isDescribedElement(element, type, subtypes) {\n if (element.tagName.toLowerCase() !== type.toLowerCase()) {\n return false;\n }\n if (!subtypes) {\n return true;\n }\n element = getElementType(element);\n for (var i = 0; i < subtypes.length; i++) {\n if (subtypes[i] === element) {\n return true;\n }\n }\n return false;\n}\n\nfunction getElementFromEvent(evt, doc) {\n if (evt.target) {\n return evt.target;\n }\n if (doc && doc.elementFromPoint) {\n return doc.elementFromPoint(evt.clientX, evt.clientY);\n }\n return undefined;\n}\n\nfunction treeToArray(elem) {\n var MAX_HEIGHT = 5;\n var out = [];\n var nextDescription;\n for (var height = 0; elem && height < MAX_HEIGHT; height++) {\n nextDescription = describeElement(elem);\n if (nextDescription.tagName === 'html') {\n break;\n }\n out.unshift(nextDescription);\n elem = elem.parentNode;\n }\n return out;\n}\n\nfunction elementArrayToString(a) {\n var MAX_LENGTH = 80;\n var separator = ' > ', separatorLength = separator.length;\n var out = [], len = 0, nextStr, totalLength;\n\n for (var i = a.length - 1; i >= 0; i--) {\n nextStr = descriptionToString(a[i]);\n totalLength = len + (out.length * separatorLength) + nextStr.length;\n if (i < a.length - 1 && totalLength >= MAX_LENGTH + 3) {\n out.unshift('...');\n break;\n }\n out.unshift(nextStr);\n len += nextStr.length;\n }\n return out.join(separator);\n}\n\nfunction descriptionToString(desc) {\n if (!desc || !desc.tagName) {\n return '';\n }\n var out = [desc.tagName];\n if (desc.id) {\n out.push('#' + desc.id);\n }\n if (desc.classes) {\n out.push('.' + desc.classes.join('.'));\n }\n for (var i = 0; i < desc.attributes.length; i++) {\n out.push('[' + desc.attributes[i].key + '=\"' + desc.attributes[i].value + '\"]');\n }\n\n return out.join('');\n}\n\n/**\n * Input: a dom element\n * Output: null if tagName is falsey or input is falsey, else\n * {\n * tagName: String,\n * id: String | undefined,\n * classes: [String] | undefined,\n * attributes: [\n * {\n * key: OneOf(type, name, title, alt),\n * value: String\n * }\n * ]\n * }\n */\nfunction describeElement(elem) {\n if (!elem || !elem.tagName) {\n return null;\n }\n var out = {}, className, key, attr, i;\n out.tagName = elem.tagName.toLowerCase();\n if (elem.id) {\n out.id = elem.id;\n }\n className = elem.className;\n if (className && (typeof className === 'string')) {\n out.classes = className.split(/\\s+/);\n }\n var attributes = ['type', 'name', 'title', 'alt'];\n out.attributes = [];\n for (i = 0; i < attributes.length; i++) {\n key = attributes[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.attributes.push({key: key, value: attr});\n }\n }\n return out;\n}\n\nmodule.exports = {\n describeElement: describeElement,\n descriptionToString: descriptionToString,\n elementArrayToString: elementArrayToString,\n treeToArray: treeToArray,\n getElementFromEvent: getElementFromEvent,\n isDescribedElement: isDescribedElement,\n getElementType: getElementType\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/domUtility.js\n// module id = 26\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///rollbar.min.js","webpack:///webpack/bootstrap 993aca3a2713ef55ab6f","webpack:///./src/browser/bundles/rollbar.js","webpack:///./src/browser/rollbar.js","webpack:///./src/rollbar.js","webpack:///./src/rateLimiter.js","webpack:///./src/queue.js","webpack:///./src/utility.js","webpack:///./~/extend/index.js","webpack:///./vendor/JSON-js/json3.js","webpack:///./src/notifier.js","webpack:///./src/telemetry.js","webpack:///./src/api.js","webpack:///./src/apiUtility.js","webpack:///./src/browser/logger.js","webpack:///./~/console-polyfill/index.js","webpack:///./src/browser/detection.js","webpack:///./src/browser/globalSetup.js","webpack:///./src/browser/transport.js","webpack:///./src/browser/url.js","webpack:///./src/browser/transforms.js","webpack:///./src/browser/errorParser.js","webpack:///./~/error-stack-parser/error-stack-parser.js","webpack:///./~/error-stack-parser/~/stackframe/stackframe.js","webpack:///./src/transforms.js","webpack:///./src/browser/predicates.js","webpack:///./src/predicates.js","webpack:///./src/browser/telemetry.js","webpack:///./src/browser/domUtility.js"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","id","loaded","call","m","c","p","rollbar","options","window","_rollbarConfig","alias","globalAlias","shimRunning","shimId","undefined","_rollbarStartTime","Date","getTime","Rollbar","_rollbarDidLoad","self","client","this","_","extend","defaultOptions","api","API","transport","urllib","Client","logger","gWindow","gDocument","document","addTransformsToNotifier","notifier","addPredicatesToQueue","queue","captureUncaught","handleUncaughtExceptions","globals","captureUncaughtExceptions","wrapGlobals","captureUnhandledRejections","handleUnhandledRejections","instrumenter","Instrumenter","telemeter","instrument","handleUninitialized","maybeCallback","message","error","Error","addTransform","transforms","handleItemWithError","ensureItemHasSomethingToSay","addBaseInfo","addRequestInfo","addClientInfo","addPluginInfo","addBody","sharedTransforms","addMessageWithError","addTelemetryData","addConfigToPayload","scrubPayload","userTransform","itemToPayload","addPredicate","sharedPredicates","checkLevel","predicates","checkIgnore","userCheckIgnore","urlIsNotBlacklisted","urlIsWhitelisted","messageIsIgnored","_getFirstFunction","args","i","len","length","isFunction","errorParser","_instance","init","global","configure","prototype","payloadData","oldOptions","payload","lastError","log","item","_createItem","arguments","uuid","apply","debug","info","warn","warning","critical","handleUncaughtException","url","lineno","colno","context","stackInfo","makeUnhandledStackInfo","isError","_unhandledStackInfo","level","uncaughtErrorLevel","_isUncaught","handleUnhandledRejection","reason","promise","String","_rollbarContext","_originalArgs","push","wrap","f","_before","ctxFn","_isWrap","_rollbar_wrapped","exc","e","isType","_wrappedSource","toString","_rollbarWrappedError","hasOwnProperty","prop","captureEvent","metadata","captureDomContentLoaded","ts","captureLoad","createItem","version","scrubFields","logLevel","reportLevel","endpoint","verbose","enabled","sendConfig","includeItemsInTelemetry","captureIp","platform","rateLimiter","configureGlobal","setPlatformOptions","Queue","Notifier","Telemeter","RateLimiter","maxItems","itemsPerMinute","_defaultLogLevel","_log","wait","callback","defaultLevel","_sameAsLastError","_captureRollbarItem","telemetryEvents","copyEvents","err","startTime","counter","perMinCounter","platformOptions","checkRate","limit","ignoreRateLimit","shouldSendValue","shouldSend","globalRateLimit","limitPerMin","perMinute","rateLimitPayload","msg","environment","body","extra","language","framework","name","globalSettings","now","globalRateLimitPerMin","pendingItems","pendingRequests","retryQueue","retryHandle","waitCallback","waitIntervalID","predicate","addPendingItem","removePendingItem","idx","indexOf","splice","addItem","originalError","originalItem","predicateResult","_applyPredicates","stop","_maybeLog","_makeApiRequest","resp","_dequeuePendingRequest","bind","_maybeCallWait","clearInterval","setInterval","rateLimitResponse","postItem","_maybeRetry","RETRIABLE_ERRORS","shouldRetry","retryInterval","code","_retryApiRequest","retryObject","shift","data","get","setupJSON","__initRollbarJSON","isDefined","JSON","isNativeFunction","stringify","RollbarJSON","parse","setupCustomJSON","x","t","typeName","match","toLowerCase","reRegExpChar","funcMatchString","Function","Object","replace","reIsNative","RegExp","isObject","test","value","type","u","isIterable","traverse","obj","func","seen","k","v","isObj","isArray","keys","result","redact","uuid4","d","r","Math","random","floor","sanitizeUrl","baseUrlParts","parseUri","anchor","source","query","str","o","parseUriOptions","parser","strictMode","exec","uri","key","q","$0","$1","$2","addParamsAndAccessTokenToPath","accessToken","params","access_token","paramsArray","join","sort","path","qs","h","substring","formatUrl","protocol","port","hostname","backup","jsonError","backupError","jsonParse","s","mode","backupMessage","location","line","column","guessFunctionName","gatherContext","href","useragent","navigator","userAgent","stack","wrapCallback","requestKeys","lambdaContext","custom","request","arg","extraArgs","l","typ","DOMException","j","timestamp","split","set","temp","replacement","scrub","redactQueryParam","dummy0","paramPart","dummy1","dummy2","dummy3","valPart","paramScrubber","queryRes","valScrubber","paramRes","scrubber","tmpV","_getScrubFieldRegexs","_getScrubQueryParamRegexs","pat","ret","formatArgsAsString","substr","filterIp","requestData","newIp","parts","pop","beginning","slice","slashIdx","terminal","concat","LEVELS","strict","loose","hasOwn","toStr","arr","Array","isPlainObject","hasOwnConstructor","hasIsPrototypeOf","constructor","src","copy","copyIsArray","clone","target","deep","n","this_value","valueOf","quote","string","rx_escapable","lastIndex","a","meta","charCodeAt","holder","partial","mind","gap","toJSON","rep","isFinite","indent","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","Boolean","Number","\b","\t","\n","\f","\r","\"","\\","replacer","space","","debackslashify","text","ignore","b","fromCharCode","parseInt","escapes","state","container","/","go","firstokey","okey","ovalue","firstavalue","avalue","number","action","{","}","ocomma","[","]","acomma",":","colon","SyntaxError",",","true","false","null","reviver","tx","walk","val","transform","_applyTransforms","transformIndex","transformsLength","cb","maxTelemetryEvents","MAX_EVENTS","maxQueueSize","max","min","getLevel","manual","newMaxEvents","deleteCount","capture","rollbarUUID","timestamp_ms","filterTelemetry","captureError","captureLog","captureNetwork","subtype","levelFromStatus","status_code","statusCode","captureDom","element","checked","captureNavigation","from","to","captureConnectivityChange","change","Api","jsonBackup","transportOptions","_getTransport","helpers","getTransportFromOptions","search","buildPayload","post","contextResult","defaults","proxy","opts","pathname","method","host","appendPathToPath","base","baseTrailingSlash","pathBeginningSlash","unshift","detection","ieVersion","console","con","dummy","properties","methods","getIEVersion","undef","div","createElement","all","getElementsByTagName","innerHTML","Detection","handler","shim","oldOnError","_rollbarOldOnError","onerror","belongsToShim","fn","_rollbarWindowOnError","old","_rollbarURH","removeEventListener","rejectionHandler","evt","detail","addEventListener","_extendListenerPrototype","oldAddEventListener","_rollbarOldAdd","addFn","event","bubble","oldRemoveEventListener","_rollbarOldRemove","removeFn","requestFactory","_makeRequest","stringifyResult","writeData","_createXMLHTTPObject","onreadystatechange","readyState","parseResponse","responseText","_isSuccess","_isNormalFailure","status","_newRetriableError","ex","open","setRequestHeader","send","e1","XDomainRequest","xdomainrequest","onprogress","ontimeout","onload","e2","xmlhttp","factories","XMLHttpRequest","ActiveXObject","numFactories","last","auth","hash","pathParts","_savedStackTrace","description","server","remoteString","query_string","user_ip","nav","scr","screen","runtime_ms","round","javascript","browser","cookie_enabled","cookieEnabled","width","height","cur","plugins","navPlugins","addBodyTrace","addBodyMessage","messageResult","guess","guessErrorClass","className","trace","exception","class","rawStack","raw","rawException","stackFrame","frame","pre","contextLength","mid","frames","filename","endsWith","reverse","UNKNOWN_FUNCTION","Frame","_stackFrame","fileName","lineNumber","functionName","columnNumber","Stack","getStack","parserStack","ErrorStackParser","errMsg","errClassMatch","ERR_CLASS_REGEXP","errClass","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","root","factory","StackFrame","_map","array","thisArg","map","output","_filter","filter","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","possibleNumber","isNaN","parseFloat","filtered","tokens","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","argsRaw","functionCall","_isNumber","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","getFunctionName","getArgs","TypeError","getFileName","getLineNumber","getColumnNumber","getSource","payloadOptions","tracePath","newExtra","newItem","configKey","settings","levelVal","reportLevelVal","isUncaught","onSendCallback","urlIsOnAList","whiteOrBlack","black","list","frameLength","listLength","urlRegex","hostBlackList","hostWhiteList","listName","exceptionMessage","ignoredMessages","rIgnoredMessage","traceMessage","bodyMessage","replacements","orig","restore","_window","_document","autoInstrument","scrubTelemetryInputs","telemetryScrubber","network","navigation","connectivity","eventRemovers","dom","_location","_lastHref","urlparser","domUtil","networkResponseHeaders","networkResponseBody","networkRequestBody","oldSettings","deinstrumentNetwork","instrumentNetwork","deinstrumentConsole","instrumentConsole","deinstrumentDom","instrumentDom","deinstrumentNavigation","instrumentNavigation","deinstrumentConnectivity","instrumentConnectivity","wrapProp","xhr","xhrp","__rollbar_xhr","start_time_ms","end_time_ms","onreadystatechangeHandler","__rollbar_event","headers","headersConfig","header","allHeaders","getAllResponseHeaders","trim","getResponseHeader","response","input","then","wrapConsole","origConsole","removeListeners","clickHandler","handleClick","blurHandler","handleBlur","addListener","getElementFromEvent","hasTag","tagName","anchorOrButton","isDescribedElement","captureDomEvent","handleSelectInputChanged","elem","multiple","selected","selectedIndex","isChecked","getElementType","describeElement","elementString","elementArrayToString","treeToArray","chrome","chromePackagedApp","app","runtime","hasPushState","history","pushState","current","handleUrlChange","parsedHref","parsedTo","parsedFrom","section","altType","attachEvent","detachEvent","getAttribute","subtypes","doc","elementFromPoint","clientX","clientY","nextDescription","MAX_HEIGHT","out","parentNode","nextStr","totalLength","MAX_LENGTH","separator","separatorLength","descriptionToString","desc","classes","attributes","attr"],"mappings":"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","file":"rollbar.min.js","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar rollbar = __webpack_require__(1);\n\t\n\tvar options = (typeof window !== 'undefined') && window._rollbarConfig;\n\tvar alias = options && options.globalAlias || 'Rollbar';\n\tvar shimRunning = (typeof window !== 'undefined') && window[alias] && typeof window[alias].shimId === 'function' && window[alias].shimId() !== undefined;\n\t\n\tif ((typeof window !== 'undefined') && !window._rollbarStartTime) {\n\t window._rollbarStartTime = (new Date()).getTime();\n\t}\n\t\n\tif (!shimRunning && options) {\n\t var Rollbar = new rollbar(options);\n\t window[alias] = Rollbar;\n\t} else if (typeof window !== 'undefined') {\n\t window.rollbar = rollbar;\n\t window._rollbarDidLoad = true;\n\t} else if (typeof self !== 'undefined') {\n\t self.rollbar = rollbar;\n\t self._rollbarDidLoad = true;\n\t}\n\t\n\tmodule.exports = rollbar;\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar Client = __webpack_require__(2);\n\tvar _ = __webpack_require__(5);\n\tvar API = __webpack_require__(10);\n\tvar logger = __webpack_require__(12);\n\tvar globals = __webpack_require__(15);\n\t\n\tvar transport = __webpack_require__(16);\n\tvar urllib = __webpack_require__(17);\n\t\n\tvar transforms = __webpack_require__(18);\n\tvar sharedTransforms = __webpack_require__(22);\n\tvar predicates = __webpack_require__(23);\n\tvar sharedPredicates = __webpack_require__(24);\n\tvar errorParser = __webpack_require__(19);\n\tvar Instrumenter = __webpack_require__(25);\n\t\n\tfunction Rollbar(options, client) {\n\t this.options = _.extend({}, defaultOptions, options);\n\t var api = new API(this.options, transport, urllib);\n\t this.client = client || new Client(this.options, api, logger, 'browser');\n\t\n\t var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n\t var gDocument = (typeof document != 'undefined') && document;\n\t addTransformsToNotifier(this.client.notifier);\n\t addPredicatesToQueue(this.client.queue);\n\t if (this.options.captureUncaught || this.options.handleUncaughtExceptions) {\n\t globals.captureUncaughtExceptions(gWindow, this);\n\t globals.wrapGlobals(gWindow, this);\n\t }\n\t if (this.options.captureUnhandledRejections || this.options.handleUnhandledRejections) {\n\t globals.captureUnhandledRejections(gWindow, this);\n\t }\n\t\n\t this.instrumenter = new Instrumenter(this.options, this.client.telemeter, this, gWindow, gDocument);\n\t this.instrumenter.instrument();\n\t}\n\t\n\tvar _instance = null;\n\tRollbar.init = function(options, client) {\n\t if (_instance) {\n\t return _instance.global(options).configure(options);\n\t }\n\t _instance = new Rollbar(options, client);\n\t return _instance;\n\t};\n\t\n\tfunction handleUninitialized(maybeCallback) {\n\t var message = 'Rollbar is not initialized';\n\t logger.error(message);\n\t if (maybeCallback) {\n\t maybeCallback(new Error(message));\n\t }\n\t}\n\t\n\tRollbar.prototype.global = function(options) {\n\t this.client.global(options);\n\t return this;\n\t};\n\tRollbar.global = function(options) {\n\t if (_instance) {\n\t return _instance.global(options);\n\t } else {\n\t handleUninitialized();\n\t }\n\t};\n\t\n\tRollbar.prototype.configure = function(options, payloadData) {\n\t var oldOptions = this.options;\n\t var payload = {};\n\t if (payloadData) {\n\t payload = {payload: payloadData};\n\t }\n\t this.options = _.extend({}, oldOptions, options, payload);\n\t this.client.configure(options, payloadData);\n\t this.instrumenter.configure(options);\n\t return this;\n\t};\n\tRollbar.configure = function(options, payloadData) {\n\t if (_instance) {\n\t return _instance.configure(options, payloadData);\n\t } else {\n\t handleUninitialized();\n\t }\n\t};\n\t\n\tRollbar.prototype.lastError = function() {\n\t return this.client.lastError;\n\t};\n\tRollbar.lastError = function() {\n\t if (_instance) {\n\t return _instance.lastError();\n\t } else {\n\t handleUninitialized();\n\t }\n\t};\n\t\n\tRollbar.prototype.log = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.log(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.log = function() {\n\t if (_instance) {\n\t return _instance.log.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.debug = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.debug(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.debug = function() {\n\t if (_instance) {\n\t return _instance.debug.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.info = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.info(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.info = function() {\n\t if (_instance) {\n\t return _instance.info.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.warn = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.warn(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.warn = function() {\n\t if (_instance) {\n\t return _instance.warn.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.warning = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.warning(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.warning = function() {\n\t if (_instance) {\n\t return _instance.warning.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.error = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.error(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.error = function() {\n\t if (_instance) {\n\t return _instance.error.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.critical = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.critical(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.critical = function() {\n\t if (_instance) {\n\t return _instance.critical.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.handleUncaughtException = function(message, url, lineno, colno, error, context) {\n\t var item;\n\t var stackInfo = _.makeUnhandledStackInfo(\n\t message,\n\t url,\n\t lineno,\n\t colno,\n\t error,\n\t 'onerror',\n\t 'uncaught exception',\n\t errorParser\n\t );\n\t if (_.isError(error)) {\n\t item = this._createItem([message, error, context]);\n\t item._unhandledStackInfo = stackInfo;\n\t } else if (_.isError(url)) {\n\t item = this._createItem([message, url, context]);\n\t item._unhandledStackInfo = stackInfo;\n\t } else {\n\t item = this._createItem([message, context]);\n\t item.stackInfo = stackInfo;\n\t }\n\t item.level = this.options.uncaughtErrorLevel;\n\t item._isUncaught = true;\n\t this.client.log(item);\n\t};\n\t\n\tRollbar.prototype.handleUnhandledRejection = function(reason, promise) {\n\t var message = 'unhandled rejection was null or undefined!';\n\t message = reason ? (reason.message || String(reason)) : message;\n\t var context = (reason && reason._rollbarContext) || (promise && promise._rollbarContext);\n\t\n\t var item;\n\t if (_.isError(reason)) {\n\t item = this._createItem([message, reason, context]);\n\t } else {\n\t item = this._createItem([message, reason, context]);\n\t item.stackInfo = _.makeUnhandledStackInfo(\n\t message,\n\t '',\n\t 0,\n\t 0,\n\t null,\n\t 'unhandledrejection',\n\t '',\n\t errorParser\n\t );\n\t }\n\t item.level = this.options.uncaughtErrorLevel;\n\t item._isUncaught = true;\n\t item._originalArgs = item._originalArgs || [];\n\t item._originalArgs.push(promise);\n\t this.client.log(item);\n\t};\n\t\n\tRollbar.prototype.wrap = function(f, context, _before) {\n\t try {\n\t var ctxFn;\n\t if(_.isFunction(context)) {\n\t ctxFn = context;\n\t } else {\n\t ctxFn = function() { return context || {}; };\n\t }\n\t\n\t if (!_.isFunction(f)) {\n\t return f;\n\t }\n\t\n\t if (f._isWrap) {\n\t return f;\n\t }\n\t\n\t if (!f._rollbar_wrapped) {\n\t f._rollbar_wrapped = function () {\n\t if (_before && _.isFunction(_before)) {\n\t _before.apply(this, arguments);\n\t }\n\t try {\n\t return f.apply(this, arguments);\n\t } catch(exc) {\n\t var e = exc;\n\t if (e) {\n\t if (_.isType(e, 'string')) {\n\t e = new String(e);\n\t }\n\t e._rollbarContext = ctxFn() || {};\n\t e._rollbarContext._wrappedSource = f.toString();\n\t\n\t window._rollbarWrappedError = e;\n\t }\n\t throw e;\n\t }\n\t };\n\t\n\t f._rollbar_wrapped._isWrap = true;\n\t\n\t if (f.hasOwnProperty) {\n\t for (var prop in f) {\n\t if (f.hasOwnProperty(prop)) {\n\t f._rollbar_wrapped[prop] = f[prop];\n\t }\n\t }\n\t }\n\t }\n\t\n\t return f._rollbar_wrapped;\n\t } catch (e) {\n\t // Return the original function if the wrap fails.\n\t return f;\n\t }\n\t};\n\tRollbar.wrap = function(f, context) {\n\t if (_instance) {\n\t return _instance.wrap(f, context);\n\t } else {\n\t handleUninitialized();\n\t }\n\t};\n\t\n\tRollbar.prototype.captureEvent = function(metadata, level) {\n\t return this.client.captureEvent(metadata, level);\n\t};\n\tRollbar.captureEvent = function(metadata, level) {\n\t if (_instance) {\n\t return _instance.captureEvent(metadata, level);\n\t } else {\n\t handleUninitialized();\n\t }\n\t};\n\t\n\t// The following two methods are used internally and are not meant for public use\n\tRollbar.prototype.captureDomContentLoaded = function(e, ts) {\n\t if (!ts) {\n\t ts = new Date();\n\t }\n\t return this.client.captureDomContentLoaded(ts);\n\t};\n\t\n\tRollbar.prototype.captureLoad = function(e, ts) {\n\t if (!ts) {\n\t ts = new Date();\n\t }\n\t return this.client.captureLoad(ts);\n\t};\n\t\n\t/* Internal */\n\t\n\tfunction addTransformsToNotifier(notifier) {\n\t notifier\n\t .addTransform(transforms.handleItemWithError)\n\t .addTransform(transforms.ensureItemHasSomethingToSay)\n\t .addTransform(transforms.addBaseInfo)\n\t .addTransform(transforms.addRequestInfo(window))\n\t .addTransform(transforms.addClientInfo(window))\n\t .addTransform(transforms.addPluginInfo(window))\n\t .addTransform(transforms.addBody)\n\t .addTransform(sharedTransforms.addMessageWithError)\n\t .addTransform(sharedTransforms.addTelemetryData)\n\t .addTransform(sharedTransforms.addConfigToPayload)\n\t .addTransform(transforms.scrubPayload)\n\t .addTransform(sharedTransforms.userTransform(logger))\n\t .addTransform(sharedTransforms.itemToPayload);\n\t}\n\t\n\tfunction addPredicatesToQueue(queue) {\n\t queue\n\t .addPredicate(sharedPredicates.checkLevel)\n\t .addPredicate(predicates.checkIgnore)\n\t .addPredicate(sharedPredicates.userCheckIgnore(logger))\n\t .addPredicate(sharedPredicates.urlIsNotBlacklisted(logger))\n\t .addPredicate(sharedPredicates.urlIsWhitelisted(logger))\n\t .addPredicate(sharedPredicates.messageIsIgnored(logger));\n\t}\n\t\n\tRollbar.prototype._createItem = function(args) {\n\t return _.createItem(args, logger, this);\n\t};\n\t\n\tfunction _getFirstFunction(args) {\n\t for (var i = 0, len = args.length; i < len; ++i) {\n\t if (_.isFunction(args[i])) {\n\t return args[i];\n\t }\n\t }\n\t return undefined;\n\t}\n\t\n\t/* global __NOTIFIER_VERSION__:false */\n\t/* global __DEFAULT_BROWSER_SCRUB_FIELDS__:false */\n\t/* global __DEFAULT_LOG_LEVEL__:false */\n\t/* global __DEFAULT_REPORT_LEVEL__:false */\n\t/* global __DEFAULT_UNCAUGHT_ERROR_LEVEL:false */\n\t/* global __DEFAULT_ENDPOINT__:false */\n\t\n\tvar defaultOptions = {\n\t version: (\"2.4.0\"),\n\t scrubFields: ([\"pw\",\"pass\",\"passwd\",\"password\",\"secret\",\"confirm_password\",\"confirmPassword\",\"password_confirmation\",\"passwordConfirmation\",\"access_token\",\"accessToken\",\"secret_key\",\"secretKey\",\"secretToken\"]),\n\t logLevel: (\"debug\"),\n\t reportLevel: (\"debug\"),\n\t uncaughtErrorLevel: (\"error\"),\n\t endpoint: (\"api.rollbar.com/api/1/item/\"),\n\t verbose: false,\n\t enabled: true,\n\t sendConfig: false,\n\t includeItemsInTelemetry: true,\n\t captureIp: true\n\t};\n\t\n\tmodule.exports = Rollbar;\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar RateLimiter = __webpack_require__(3);\n\tvar Queue = __webpack_require__(4);\n\tvar Notifier = __webpack_require__(8);\n\tvar Telemeter = __webpack_require__(9);\n\tvar _ = __webpack_require__(5);\n\t\n\t/*\n\t * Rollbar - the interface to Rollbar\n\t *\n\t * @param options\n\t * @param api\n\t * @param logger\n\t */\n\tfunction Rollbar(options, api, logger, platform) {\n\t this.options = _.extend(true, {}, options);\n\t this.logger = logger;\n\t Rollbar.rateLimiter.configureGlobal(this.options);\n\t Rollbar.rateLimiter.setPlatformOptions(platform, this.options);\n\t this.queue = new Queue(Rollbar.rateLimiter, api, logger, this.options);\n\t this.notifier = new Notifier(this.queue, this.options);\n\t this.telemeter = new Telemeter(this.options);\n\t this.lastError = null;\n\t}\n\t\n\tvar defaultOptions = {\n\t maxItems: 0,\n\t itemsPerMinute: 60\n\t};\n\t\n\tRollbar.rateLimiter = new RateLimiter(defaultOptions);\n\t\n\tRollbar.prototype.global = function(options) {\n\t Rollbar.rateLimiter.configureGlobal(options);\n\t return this;\n\t};\n\t\n\tRollbar.prototype.configure = function(options, payloadData) {\n\t this.notifier && this.notifier.configure(options);\n\t this.telemeter && this.telemeter.configure(options);\n\t var oldOptions = this.options;\n\t var payload = {};\n\t if (payloadData) {\n\t payload = {payload: payloadData};\n\t }\n\t this.options = _.extend(true, {}, oldOptions, options, payload);\n\t this.global(this.options);\n\t return this;\n\t};\n\t\n\tRollbar.prototype.log = function(item) {\n\t var level = this._defaultLogLevel();\n\t return this._log(level, item);\n\t};\n\t\n\tRollbar.prototype.debug = function(item) {\n\t this._log('debug', item);\n\t};\n\t\n\tRollbar.prototype.info = function(item) {\n\t this._log('info', item);\n\t};\n\t\n\tRollbar.prototype.warn = function(item) {\n\t this._log('warning', item);\n\t};\n\t\n\tRollbar.prototype.warning = function(item) {\n\t this._log('warning', item);\n\t};\n\t\n\tRollbar.prototype.error = function(item) {\n\t this._log('error', item);\n\t};\n\t\n\tRollbar.prototype.critical = function(item) {\n\t this._log('critical', item);\n\t};\n\t\n\tRollbar.prototype.wait = function(callback) {\n\t this.queue.wait(callback);\n\t};\n\t\n\tRollbar.prototype.captureEvent = function(metadata, level) {\n\t return this.telemeter.captureEvent(metadata, level);\n\t};\n\t\n\tRollbar.prototype.captureDomContentLoaded = function(ts) {\n\t return this.telemeter.captureDomContentLoaded(ts);\n\t};\n\t\n\tRollbar.prototype.captureLoad = function(ts) {\n\t return this.telemeter.captureLoad(ts);\n\t};\n\t\n\t/* Internal */\n\t\n\tRollbar.prototype._log = function(defaultLevel, item) {\n\t if (this._sameAsLastError(item)) {\n\t if (item.callback) {\n\t item.callback();\n\t }\n\t return;\n\t }\n\t try {\n\t var callback = null;\n\t if (item.callback) {\n\t callback = item.callback;\n\t delete item.callback;\n\t }\n\t item.level = item.level || defaultLevel;\n\t this.telemeter._captureRollbarItem(item);\n\t item.telemetryEvents = this.telemeter.copyEvents();\n\t this.notifier.log(item, callback);\n\t } catch (e) {\n\t this.logger.error(e)\n\t }\n\t};\n\t\n\tRollbar.prototype._defaultLogLevel = function() {\n\t return this.options.logLevel || 'debug';\n\t};\n\t\n\tRollbar.prototype._sameAsLastError = function(item) {\n\t if (this.lastError && this.lastError === item.err) {\n\t return true;\n\t }\n\t this.lastError = item.err;\n\t return false;\n\t};\n\t\n\tmodule.exports = Rollbar;\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\t/*\n\t * RateLimiter - an object that encapsulates the logic for counting items sent to Rollbar\n\t *\n\t * @param options - the same options that are accepted by configureGlobal offered as a convenience\n\t */\n\tfunction RateLimiter(options) {\n\t this.startTime = (new Date()).getTime();\n\t this.counter = 0;\n\t this.perMinCounter = 0;\n\t this.platform = null;\n\t this.platformOptions = {};\n\t this.configureGlobal(options);\n\t}\n\t\n\tRateLimiter.globalSettings = {\n\t startTime: (new Date()).getTime(),\n\t maxItems: undefined,\n\t itemsPerMinute: undefined\n\t};\n\t\n\t/*\n\t * configureGlobal - set the global rate limiter options\n\t *\n\t * @param options - Only the following values are recognized:\n\t * startTime: a timestamp of the form returned by (new Date()).getTime()\n\t * maxItems: the maximum items\n\t * itemsPerMinute: the max number of items to send in a given minute\n\t */\n\tRateLimiter.prototype.configureGlobal = function(options) {\n\t if (options.startTime !== undefined) {\n\t RateLimiter.globalSettings.startTime = options.startTime;\n\t }\n\t if (options.maxItems !== undefined) {\n\t RateLimiter.globalSettings.maxItems = options.maxItems;\n\t }\n\t if (options.itemsPerMinute !== undefined) {\n\t RateLimiter.globalSettings.itemsPerMinute = options.itemsPerMinute;\n\t }\n\t};\n\t\n\t/*\n\t * shouldSend - determine if we should send a given item based on rate limit settings\n\t *\n\t * @param item - the item we are about to send\n\t * @returns An object with the following structure:\n\t * error: (Error|null)\n\t * shouldSend: bool\n\t * payload: (Object|null)\n\t * If shouldSend is false, the item passed as a parameter should not be sent to Rollbar, and\n\t * exactly one of error or payload will be non-null. If error is non-null, the returned Error will\n\t * describe the situation, but it means that we were already over a rate limit (either globally or\n\t * per minute) when this item was checked. If error is null, and therefore payload is non-null, it\n\t * means this item put us over the global rate limit and the payload should be sent to Rollbar in\n\t * place of the passed in item.\n\t */\n\tRateLimiter.prototype.shouldSend = function(item, now) {\n\t now = now || (new Date()).getTime();\n\t if (now - this.startTime >= 60000) {\n\t this.startTime = now;\n\t this.perMinCounter = 0;\n\t }\n\t\n\t var globalRateLimit = RateLimiter.globalSettings.maxItems;\n\t var globalRateLimitPerMin = RateLimiter.globalSettings.itemsPerMinute;\n\t\n\t if (checkRate(item, globalRateLimit, this.counter)) {\n\t return shouldSendValue(this.platform, this.platformOptions, globalRateLimit + ' max items reached', false);\n\t } else if (checkRate(item, globalRateLimitPerMin, this.perMinCounter)) {\n\t return shouldSendValue(this.platform, this.platformOptions, globalRateLimitPerMin + ' items per minute reached', false);\n\t }\n\t this.counter++;\n\t this.perMinCounter++;\n\t\n\t var shouldSend = !checkRate(item, globalRateLimit, this.counter);\n\t var perMinute = shouldSend;\n\t shouldSend = shouldSend && !checkRate(item, globalRateLimitPerMin, this.perMinCounter);\n\t return shouldSendValue(this.platform, this.platformOptions, null, shouldSend, globalRateLimit, globalRateLimitPerMin, perMinute);\n\t};\n\t\n\tRateLimiter.prototype.setPlatformOptions = function(platform, options) {\n\t this.platform = platform;\n\t this.platformOptions = options;\n\t};\n\t\n\t/* Helpers */\n\t\n\tfunction checkRate(item, limit, counter) {\n\t return !item.ignoreRateLimit && limit >= 1 && counter > limit;\n\t}\n\t\n\tfunction shouldSendValue(platform, options, error, shouldSend, globalRateLimit, limitPerMin, perMinute) {\n\t var payload = null;\n\t if (error) {\n\t error = new Error(error);\n\t }\n\t if (!error && !shouldSend) {\n\t payload = rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute);\n\t }\n\t return {error: error, shouldSend: shouldSend, payload: payload};\n\t}\n\t\n\tfunction rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute) {\n\t var environment = options.environment || (options.payload && options.payload.environment);\n\t var msg;\n\t if (perMinute) {\n\t msg = 'item per minute limit reached, ignoring errors until timeout';\n\t } else {\n\t msg = 'maxItems has been hit, ignoring errors until reset.';\n\t }\n\t var item = {\n\t body: {\n\t message: {\n\t body: msg,\n\t extra: {\n\t maxItems: globalRateLimit,\n\t itemsPerMinute: limitPerMin\n\t }\n\t }\n\t },\n\t language: 'javascript',\n\t environment: environment,\n\t notifier: {\n\t version: (options.notifier && options.notifier.version) || options.version\n\t }\n\t };\n\t if (platform === 'browser') {\n\t item.platform = 'browser';\n\t item.framework = 'browser-js';\n\t item.notifier.name = 'rollbar-browser-js';\n\t } else if (platform === 'server') {\n\t item.framework = options.framework || 'node-js';\n\t item.notifier.name = options.notifier.name;\n\t } else if (platform === 'react-native') {\n\t item.framework = options.framework || 'react-native';\n\t item.notifier.name = options.notifier.name;\n\t }\n\t return item;\n\t}\n\t\n\tmodule.exports = RateLimiter;\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\t/*\n\t * Queue - an object which handles which handles a queue of items to be sent to Rollbar.\n\t * This object handles rate limiting via a passed in rate limiter, retries based on connection\n\t * errors, and filtering of items based on a set of configurable predicates. The communication to\n\t * the backend is performed via a given API object.\n\t *\n\t * @param rateLimiter - An object which conforms to the interface\n\t * rateLimiter.shouldSend(item) -> bool\n\t * @param api - An object which conforms to the interface\n\t * api.postItem(payload, function(err, response))\n\t * @param logger - An object used to log verbose messages if desired\n\t * @param options - see Queue.prototype.configure\n\t */\n\tfunction Queue(rateLimiter, api, logger, options) {\n\t this.rateLimiter = rateLimiter;\n\t this.api = api;\n\t this.logger = logger;\n\t this.options = options;\n\t this.predicates = [];\n\t this.pendingItems = [];\n\t this.pendingRequests = [];\n\t this.retryQueue = [];\n\t this.retryHandle = null;\n\t this.waitCallback = null;\n\t this.waitIntervalID = null;\n\t}\n\t\n\t/*\n\t * configure - updates the options this queue uses\n\t *\n\t * @param options\n\t */\n\tQueue.prototype.configure = function(options) {\n\t this.api && this.api.configure(options);\n\t var oldOptions = this.options;\n\t this.options = _.extend(true, {}, oldOptions, options);\n\t return this;\n\t};\n\t\n\t/*\n\t * addPredicate - adds a predicate to the end of the list of predicates for this queue\n\t *\n\t * @param predicate - function(item, options) -> (bool|{err: Error})\n\t * Returning true means that this predicate passes and the item is okay to go on the queue\n\t * Returning false means do not add the item to the queue, but it is not an error\n\t * Returning {err: Error} means do not add the item to the queue, and the given error explains why\n\t * Returning {err: undefined} is equivalent to returning true but don't do that\n\t */\n\tQueue.prototype.addPredicate = function(predicate) {\n\t if (_.isFunction(predicate)) {\n\t this.predicates.push(predicate);\n\t }\n\t return this;\n\t};\n\t\n\tQueue.prototype.addPendingItem = function(item) {\n\t this.pendingItems.push(item);\n\t};\n\t\n\tQueue.prototype.removePendingItem = function(item) {\n\t var idx = this.pendingItems.indexOf(item);\n\t if (idx !== -1) {\n\t this.pendingItems.splice(idx, 1);\n\t }\n\t};\n\t\n\t/*\n\t * addItem - Send an item to the Rollbar API if all of the predicates are satisfied\n\t *\n\t * @param item - The payload to send to the backend\n\t * @param callback - function(error, repsonse) which will be called with the response from the API\n\t * in the case of a success, otherwise response will be null and error will have a value. If both\n\t * error and response are null then the item was stopped by a predicate which did not consider this\n\t * to be an error condition, but nonetheless did not send the item to the API.\n\t * @param originalError - The original error before any transformations that is to be logged if any\n\t */\n\tQueue.prototype.addItem = function(item, callback, originalError, originalItem) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() { return; };\n\t }\n\t var predicateResult = this._applyPredicates(item);\n\t if (predicateResult.stop) {\n\t this.removePendingItem(originalItem);\n\t callback(predicateResult.err);\n\t return;\n\t }\n\t this._maybeLog(item, originalError);\n\t this.removePendingItem(originalItem);\n\t this.pendingRequests.push(item);\n\t try {\n\t this._makeApiRequest(item, function(err, resp) {\n\t this._dequeuePendingRequest(item);\n\t callback(err, resp);\n\t }.bind(this));\n\t } catch (e) {\n\t this._dequeuePendingRequest(item);\n\t callback(e);\n\t }\n\t};\n\t\n\t/*\n\t * wait - Stop any further errors from being added to the queue, and get called back when all items\n\t * currently processing have finished sending to the backend.\n\t *\n\t * @param callback - function() called when all pending items have been sent\n\t */\n\tQueue.prototype.wait = function(callback) {\n\t if (!_.isFunction(callback)) {\n\t return;\n\t }\n\t this.waitCallback = callback;\n\t if (this._maybeCallWait()) {\n\t return;\n\t }\n\t if (this.waitIntervalID) {\n\t this.waitIntervalID = clearInterval(this.waitIntervalID);\n\t }\n\t this.waitIntervalID = setInterval(function() {\n\t this._maybeCallWait();\n\t }.bind(this), 500);\n\t};\n\t\n\t/* _applyPredicates - Sequentially applies the predicates that have been added to the queue to the\n\t * given item with the currently configured options.\n\t *\n\t * @param item - An item in the queue\n\t * @returns {stop: bool, err: (Error|null)} - stop being true means do not add item to the queue,\n\t * the error value should be passed up to a callbak if we are stopping.\n\t */\n\tQueue.prototype._applyPredicates = function(item) {\n\t var p = null;\n\t for (var i = 0, len = this.predicates.length; i < len; i++) {\n\t p = this.predicates[i](item, this.options);\n\t if (!p || p.err !== undefined) {\n\t return {stop: true, err: p.err};\n\t }\n\t }\n\t return {stop: false, err: null};\n\t};\n\t\n\t/*\n\t * _makeApiRequest - Send an item to Rollbar, callback when done, if there is an error make an\n\t * effort to retry if we are configured to do so.\n\t *\n\t * @param item - an item ready to send to the backend\n\t * @param callback - function(err, response)\n\t */\n\tQueue.prototype._makeApiRequest = function(item, callback) {\n\t var rateLimitResponse = this.rateLimiter.shouldSend(item);\n\t if (rateLimitResponse.shouldSend) {\n\t this.api.postItem(item, function(err, resp) {\n\t if (err) {\n\t this._maybeRetry(err, item, callback);\n\t } else {\n\t callback(err, resp);\n\t }\n\t }.bind(this));\n\t } else if (rateLimitResponse.error) {\n\t callback(rateLimitResponse.error);\n\t } else {\n\t this.api.postItem(rateLimitResponse.payload, callback);\n\t }\n\t};\n\t\n\t// These are errors basically mean there is no internet connection\n\tvar RETRIABLE_ERRORS = ['ECONNRESET', 'ENOTFOUND', 'ESOCKETTIMEDOUT', 'ETIMEDOUT', 'ECONNREFUSED', 'EHOSTUNREACH', 'EPIPE', 'EAI_AGAIN'];\n\t\n\t/*\n\t * _maybeRetry - Given the error returned by the API, decide if we should retry or just callback\n\t * with the error.\n\t *\n\t * @param err - an error returned by the API transport\n\t * @param item - the item that was trying to be sent when this error occured\n\t * @param callback - function(err, response)\n\t */\n\tQueue.prototype._maybeRetry = function(err, item, callback) {\n\t var shouldRetry = false;\n\t if (this.options.retryInterval) {\n\t for (var i = 0, len = RETRIABLE_ERRORS.length; i < len; i++) {\n\t if (err.code === RETRIABLE_ERRORS[i]) {\n\t shouldRetry = true;\n\t break;\n\t }\n\t }\n\t }\n\t if (shouldRetry) {\n\t this._retryApiRequest(item, callback);\n\t } else {\n\t callback(err);\n\t }\n\t};\n\t\n\t/*\n\t * _retryApiRequest - Add an item and a callback to a queue and possibly start a timer to process\n\t * that queue based on the retryInterval in the options for this queue.\n\t *\n\t * @param item - an item that failed to send due to an error we deem retriable\n\t * @param callback - function(err, response)\n\t */\n\tQueue.prototype._retryApiRequest = function(item, callback) {\n\t this.retryQueue.push({item: item, callback: callback});\n\t\n\t if (!this.retryHandle) {\n\t this.retryHandle = setInterval(function() {\n\t while (this.retryQueue.length) {\n\t var retryObject = this.retryQueue.shift();\n\t this._makeApiRequest(retryObject.item, retryObject.callback);\n\t }\n\t }.bind(this), this.options.retryInterval);\n\t }\n\t};\n\t\n\t/*\n\t * _dequeuePendingRequest - Removes the item from the pending request queue, this queue is used to\n\t * enable to functionality of providing a callback that clients can pass to `wait` to be notified\n\t * when the pending request queue has been emptied. This must be called when the API finishes\n\t * processing this item. If a `wait` callback is configured, it is called by this function.\n\t *\n\t * @param item - the item previously added to the pending request queue\n\t */\n\tQueue.prototype._dequeuePendingRequest = function(item) {\n\t var idx = this.pendingRequests.indexOf(item);\n\t if (idx !== -1) {\n\t this.pendingRequests.splice(idx, 1);\n\t this._maybeCallWait();\n\t }\n\t};\n\t\n\tQueue.prototype._maybeLog = function(data, originalError) {\n\t if (this.logger && this.options.verbose) {\n\t var message = originalError;\n\t message = message || _.get(data, 'body.trace.exception.message');\n\t message = message || _.get(data, 'body.trace_chain.0.exception.message');\n\t if (message) {\n\t this.logger.error(message);\n\t return;\n\t }\n\t message = _.get(data, 'body.message.body');\n\t if (message) {\n\t this.logger.log(message);\n\t }\n\t }\n\t};\n\t\n\tQueue.prototype._maybeCallWait = function() {\n\t if (_.isFunction(this.waitCallback) && this.pendingItems.length === 0 && this.pendingRequests.length === 0) {\n\t if (this.waitIntervalID) {\n\t this.waitIntervalID = clearInterval(this.waitIntervalID);\n\t }\n\t this.waitCallback();\n\t return true;\n\t }\n\t return false;\n\t};\n\t\n\tmodule.exports = Queue;\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar extend = __webpack_require__(6);\n\t\n\tvar RollbarJSON = {};\n\tvar __initRollbarJSON = false;\n\tfunction setupJSON() {\n\t if (__initRollbarJSON) {\n\t return;\n\t }\n\t __initRollbarJSON = true;\n\t\n\t if (isDefined(JSON)) {\n\t if (isNativeFunction(JSON.stringify)) {\n\t RollbarJSON.stringify = JSON.stringify;\n\t }\n\t if (isNativeFunction(JSON.parse)) {\n\t RollbarJSON.parse = JSON.parse;\n\t }\n\t }\n\t if (!isFunction(RollbarJSON.stringify) || !isFunction(RollbarJSON.parse)) {\n\t var setupCustomJSON = __webpack_require__(7);\n\t setupCustomJSON(RollbarJSON);\n\t }\n\t}\n\tsetupJSON();\n\t\n\t/*\n\t * isType - Given a Javascript value and a string, returns true if the type of the value matches the\n\t * given string.\n\t *\n\t * @param x - any value\n\t * @param t - a lowercase string containing one of the following type names:\n\t * - undefined\n\t * - null\n\t * - error\n\t * - number\n\t * - boolean\n\t * - string\n\t * - symbol\n\t * - function\n\t * - object\n\t * - array\n\t * @returns true if x is of type t, otherwise false\n\t */\n\tfunction isType(x, t) {\n\t return t === typeName(x);\n\t}\n\t\n\t/*\n\t * typeName - Given a Javascript value, returns the type of the object as a string\n\t */\n\tfunction typeName(x) {\n\t var name = typeof x;\n\t if (name !== 'object') {\n\t return name;\n\t }\n\t if (!x) {\n\t return 'null';\n\t }\n\t if (x instanceof Error) {\n\t return 'error';\n\t }\n\t return ({}).toString.call(x).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n\t}\n\t\n\t/* isFunction - a convenience function for checking if a value is a function\n\t *\n\t * @param f - any value\n\t * @returns true if f is a function, otherwise false\n\t */\n\tfunction isFunction(f) {\n\t return isType(f, 'function');\n\t}\n\t\n\t/* isNativeFunction - a convenience function for checking if a value is a native JS function\n\t *\n\t * @param f - any value\n\t * @returns true if f is a native JS function, otherwise false\n\t */\n\tfunction isNativeFunction(f) {\n\t var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\t var funcMatchString = Function.prototype.toString.call(Object.prototype.hasOwnProperty)\n\t .replace(reRegExpChar, '\\\\$&')\n\t .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?');\n\t var reIsNative = RegExp('^' + funcMatchString + '$');\n\t return isObject(f) && reIsNative.test(f);\n\t}\n\t\n\t/* isObject - Checks if the argument is an object\n\t *\n\t * @param value - any value\n\t * @returns true is value is an object function is an object)\n\t*/\n\tfunction isObject(value) {\n\t var type = typeof value;\n\t return value != null && (type == 'object' || type == 'function');\n\t}\n\t\n\t/*\n\t * isDefined - a convenience function for checking if a value is not equal to undefined\n\t *\n\t * @param u - any value\n\t * @returns true if u is anything other than undefined\n\t */\n\tfunction isDefined(u) {\n\t return !isType(u, 'undefined');\n\t}\n\t\n\t/*\n\t * isIterable - convenience function for checking if a value can be iterated, essentially\n\t * whether it is an object or an array.\n\t *\n\t * @param i - any value\n\t * @returns true if i is an object or an array as determined by `typeName`\n\t */\n\tfunction isIterable(i) {\n\t var type = typeName(i);\n\t return (type === 'object' || type === 'array');\n\t}\n\t\n\t/*\n\t * isError - convenience function for checking if a value is of an error type\n\t *\n\t * @param e - any value\n\t * @returns true if e is an error\n\t */\n\tfunction isError(e) {\n\t return isType(e, 'error');\n\t}\n\t\n\tfunction traverse(obj, func, seen) {\n\t var k, v, i;\n\t var isObj = isType(obj, 'object');\n\t var isArray = isType(obj, 'array');\n\t var keys = [];\n\t\n\t if (isObj && seen.indexOf(obj) !== -1) {\n\t return obj;\n\t }\n\t seen.push(obj);\n\t\n\t if (isObj) {\n\t for (k in obj) {\n\t if (Object.prototype.hasOwnProperty.call(obj, k)) {\n\t keys.push(k);\n\t }\n\t }\n\t } else if (isArray) {\n\t for (i = 0; i < obj.length; ++i) {\n\t keys.push(i);\n\t }\n\t }\n\t\n\t var result = isObj ? {} : [];\n\t for (i = 0; i < keys.length; ++i) {\n\t k = keys[i];\n\t v = obj[k];\n\t result[k] = func(k, v, seen);\n\t }\n\t\n\t return (keys.length != 0) ? result : obj;\n\t}\n\t\n\tfunction redact() {\n\t return '********';\n\t}\n\t\n\t// from http://stackoverflow.com/a/8809472/1138191\n\tfunction uuid4() {\n\t var d = now();\n\t var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n\t var r = (d + Math.random() * 16) % 16 | 0;\n\t d = Math.floor(d / 16);\n\t return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16);\n\t });\n\t return uuid;\n\t}\n\t\n\tvar LEVELS = {\n\t debug: 0,\n\t info: 1,\n\t warning: 2,\n\t error: 3,\n\t critical: 4\n\t};\n\t\n\tfunction sanitizeUrl(url) {\n\t var baseUrlParts = parseUri(url);\n\t // remove a trailing # if there is no anchor\n\t if (baseUrlParts.anchor === '') {\n\t baseUrlParts.source = baseUrlParts.source.replace('#', '');\n\t }\n\t\n\t url = baseUrlParts.source.replace('?' + baseUrlParts.query, '');\n\t return url;\n\t}\n\t\n\tvar parseUriOptions = {\n\t strictMode: false,\n\t key: [\n\t 'source',\n\t 'protocol',\n\t 'authority',\n\t 'userInfo',\n\t 'user',\n\t 'password',\n\t 'host',\n\t 'port',\n\t 'relative',\n\t 'path',\n\t 'directory',\n\t 'file',\n\t 'query',\n\t 'anchor'\n\t ],\n\t q: {\n\t name: 'queryKey',\n\t parser: /(?:^|&)([^&=]*)=?([^&]*)/g\n\t },\n\t parser: {\n\t strict: /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,\n\t loose: /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/\n\t }\n\t};\n\t\n\tfunction parseUri(str) {\n\t if (!isType(str, 'string')) {\n\t throw new Error('received invalid input');\n\t }\n\t\n\t var o = parseUriOptions;\n\t var m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str);\n\t var uri = {};\n\t var i = o.key.length;\n\t\n\t while (i--) {\n\t uri[o.key[i]] = m[i] || '';\n\t }\n\t\n\t uri[o.q.name] = {};\n\t uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {\n\t if ($1) {\n\t uri[o.q.name][$1] = $2;\n\t }\n\t });\n\t\n\t return uri;\n\t}\n\t\n\tfunction addParamsAndAccessTokenToPath(accessToken, options, params) {\n\t params = params || {};\n\t params.access_token = accessToken;\n\t var paramsArray = [];\n\t var k;\n\t for (k in params) {\n\t if (Object.prototype.hasOwnProperty.call(params, k)) {\n\t paramsArray.push([k, params[k]].join('='));\n\t }\n\t }\n\t var query = '?' + paramsArray.sort().join('&');\n\t\n\t options = options || {};\n\t options.path = options.path || '';\n\t var qs = options.path.indexOf('?');\n\t var h = options.path.indexOf('#');\n\t var p;\n\t if (qs !== -1 && (h === -1 || h > qs)) {\n\t p = options.path;\n\t options.path = p.substring(0,qs) + query + '&' + p.substring(qs+1);\n\t } else {\n\t if (h !== -1) {\n\t p = options.path;\n\t options.path = p.substring(0,h) + query + p.substring(h);\n\t } else {\n\t options.path = options.path + query;\n\t }\n\t }\n\t}\n\t\n\tfunction formatUrl(u, protocol) {\n\t protocol = protocol || u.protocol;\n\t if (!protocol && u.port) {\n\t if (u.port === 80) {\n\t protocol = 'http:';\n\t } else if (u.port === 443) {\n\t protocol = 'https:';\n\t }\n\t }\n\t protocol = protocol || 'https:';\n\t\n\t if (!u.hostname) {\n\t return null;\n\t }\n\t var result = protocol + '//' + u.hostname;\n\t if (u.port) {\n\t result = result + ':' + u.port;\n\t }\n\t if (u.path) {\n\t result = result + u.path;\n\t }\n\t return result;\n\t}\n\t\n\tfunction stringify(obj, backup) {\n\t var value, error;\n\t try {\n\t value = RollbarJSON.stringify(obj);\n\t } catch (jsonError) {\n\t if (backup && isFunction(backup)) {\n\t try {\n\t value = backup(obj);\n\t } catch (backupError) {\n\t error = backupError;\n\t }\n\t } else {\n\t error = jsonError;\n\t }\n\t }\n\t return {error: error, value: value};\n\t}\n\t\n\tfunction jsonParse(s) {\n\t var value, error;\n\t try {\n\t value = RollbarJSON.parse(s);\n\t } catch (e) {\n\t error = e;\n\t }\n\t return {error: error, value: value};\n\t}\n\t\n\tfunction makeUnhandledStackInfo(\n\t message,\n\t url,\n\t lineno,\n\t colno,\n\t error,\n\t mode,\n\t backupMessage,\n\t errorParser\n\t) {\n\t var location = {\n\t url: url || '',\n\t line: lineno,\n\t column: colno\n\t };\n\t location.func = errorParser.guessFunctionName(location.url, location.line);\n\t location.context = errorParser.gatherContext(location.url, location.line);\n\t var href = document && document.location && document.location.href;\n\t var useragent = window && window.navigator && window.navigator.userAgent;\n\t return {\n\t 'mode': mode,\n\t 'message': error ? String(error) : (message || backupMessage),\n\t 'url': href,\n\t 'stack': [location],\n\t 'useragent': useragent\n\t };\n\t}\n\t\n\tfunction wrapCallback(logger, f) {\n\t return function(err, resp) {\n\t try {\n\t f(err, resp);\n\t } catch (e) {\n\t logger.error(e);\n\t }\n\t };\n\t}\n\t\n\tfunction createItem(args, logger, notifier, requestKeys, lambdaContext) {\n\t var message, err, custom, callback, request;\n\t var arg;\n\t var extraArgs = [];\n\t\n\t for (var i = 0, l = args.length; i < l; ++i) {\n\t arg = args[i];\n\t\n\t var typ = typeName(arg);\n\t switch (typ) {\n\t case 'undefined':\n\t break;\n\t case 'string':\n\t message ? extraArgs.push(arg) : message = arg;\n\t break;\n\t case 'function':\n\t callback = wrapCallback(logger, arg);\n\t break;\n\t case 'date':\n\t extraArgs.push(arg);\n\t break;\n\t case 'error':\n\t case 'domexception':\n\t err ? extraArgs.push(arg) : err = arg;\n\t break;\n\t case 'object':\n\t case 'array':\n\t if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n\t err ? extraArgs.push(arg) : err = arg;\n\t break;\n\t }\n\t if (requestKeys && typ === 'object' && !request) {\n\t for (var j = 0, len = requestKeys.length; j < len; ++j) {\n\t if (arg[requestKeys[j]] !== undefined) {\n\t request = arg;\n\t break;\n\t }\n\t }\n\t if (request) {\n\t break;\n\t }\n\t }\n\t custom ? extraArgs.push(arg) : custom = arg;\n\t break;\n\t default:\n\t if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n\t err ? extraArgs.push(arg) : err = arg;\n\t break;\n\t }\n\t extraArgs.push(arg);\n\t }\n\t }\n\t\n\t if (extraArgs.length > 0) {\n\t // if custom is an array this turns it into an object with integer keys\n\t custom = extend(true, {}, custom);\n\t custom.extraArgs = extraArgs;\n\t }\n\t\n\t var item = {\n\t message: message,\n\t err: err,\n\t custom: custom,\n\t timestamp: now(),\n\t callback: callback,\n\t uuid: uuid4()\n\t };\n\t if (custom && custom.level !== undefined) {\n\t item.level = custom.level;\n\t delete custom.level;\n\t }\n\t if (requestKeys && request) {\n\t item.request = request;\n\t }\n\t if (lambdaContext) {\n\t item.lambdaContext = lambdaContext;\n\t }\n\t item._originalArgs = args;\n\t return item;\n\t}\n\t\n\t/*\n\t * get - given an obj/array and a keypath, return the value at that keypath or\n\t * undefined if not possible.\n\t *\n\t * @param obj - an object or array\n\t * @param path - a string of keys separated by '.' such as 'plugin.jquery.0.message'\n\t * which would correspond to 42 in `{plugin: {jquery: [{message: 42}]}}`\n\t */\n\tfunction get(obj, path) {\n\t if (!obj) {\n\t return undefined;\n\t }\n\t var keys = path.split('.');\n\t var result = obj;\n\t try {\n\t for (var i = 0, len = keys.length; i < len; ++i) {\n\t result = result[keys[i]];\n\t }\n\t } catch (e) {\n\t result = undefined;\n\t }\n\t return result;\n\t}\n\t\n\tfunction set(obj, path, value) {\n\t if (!obj) {\n\t return;\n\t }\n\t var keys = path.split('.');\n\t var len = keys.length;\n\t if (len < 1) {\n\t return;\n\t }\n\t if (len === 1) {\n\t obj[keys[0]] = value;\n\t return;\n\t }\n\t try {\n\t var temp = obj[keys[0]] || {};\n\t var replacement = temp;\n\t for (var i = 1; i < len-1; i++) {\n\t temp[keys[i]] = temp[keys[i]] || {};\n\t temp = temp[keys[i]];\n\t }\n\t temp[keys[len-1]] = value;\n\t obj[keys[0]] = replacement;\n\t } catch (e) {\n\t return;\n\t }\n\t}\n\t\n\tfunction scrub(data, scrubFields) {\n\t scrubFields = scrubFields || [];\n\t var paramRes = _getScrubFieldRegexs(scrubFields);\n\t var queryRes = _getScrubQueryParamRegexs(scrubFields);\n\t\n\t function redactQueryParam(dummy0, paramPart, dummy1, dummy2, dummy3, valPart) {\n\t return paramPart + redact(valPart);\n\t }\n\t\n\t function paramScrubber(v) {\n\t var i;\n\t if (isType(v, 'string')) {\n\t for (i = 0; i < queryRes.length; ++i) {\n\t v = v.replace(queryRes[i], redactQueryParam);\n\t }\n\t }\n\t return v;\n\t }\n\t\n\t function valScrubber(k, v) {\n\t var i;\n\t for (i = 0; i < paramRes.length; ++i) {\n\t if (paramRes[i].test(k)) {\n\t v = redact(v);\n\t break;\n\t }\n\t }\n\t return v;\n\t }\n\t\n\t function scrubber(k, v, seen) {\n\t var tmpV = valScrubber(k, v);\n\t if (tmpV === v) {\n\t if (isType(v, 'object') || isType(v, 'array')) {\n\t return traverse(v, scrubber, seen);\n\t }\n\t return paramScrubber(tmpV);\n\t } else {\n\t return tmpV;\n\t }\n\t }\n\t\n\t return traverse(data, scrubber, []);\n\t}\n\t\n\tfunction _getScrubFieldRegexs(scrubFields) {\n\t var ret = [];\n\t var pat;\n\t for (var i = 0; i < scrubFields.length; ++i) {\n\t pat = '^\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?$';\n\t ret.push(new RegExp(pat, 'i'));\n\t }\n\t return ret;\n\t}\n\t\n\t\n\tfunction _getScrubQueryParamRegexs(scrubFields) {\n\t var ret = [];\n\t var pat;\n\t for (var i = 0; i < scrubFields.length; ++i) {\n\t pat = '\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?';\n\t ret.push(new RegExp('(' + pat + '=)([^&\\\\n]+)', 'igm'));\n\t }\n\t return ret;\n\t}\n\t\n\tfunction formatArgsAsString(args) {\n\t var i, len, arg;\n\t var result = [];\n\t for (i = 0, len = args.length; i < len; i++) {\n\t arg = args[i];\n\t if (typeof arg === 'object') {\n\t arg = stringify(arg);\n\t arg = arg.error || arg.value;\n\t if (arg.length > 500)\n\t arg = arg.substr(0,500)+'...';\n\t } else if (typeof arg === 'undefined') {\n\t arg = 'undefined';\n\t }\n\t result.push(arg);\n\t }\n\t return result.join(' ');\n\t}\n\t\n\tfunction now() {\n\t if (Date.now) {\n\t return +Date.now();\n\t }\n\t return +new Date();\n\t}\n\t\n\tfunction filterIp(requestData, captureIp) {\n\t if (!requestData || !requestData['user_ip'] || captureIp === true) {\n\t return;\n\t }\n\t var newIp = requestData['user_ip'];\n\t if (!captureIp) {\n\t newIp = null;\n\t } else {\n\t try {\n\t var parts;\n\t if (newIp.indexOf('.') !== -1) {\n\t parts = newIp.split('.');\n\t parts.pop();\n\t parts.push('0');\n\t newIp = parts.join('.');\n\t } else if (newIp.indexOf(':') !== -1) {\n\t parts = newIp.split(':');\n\t if (parts.length > 2) {\n\t var beginning = parts.slice(0, 3);\n\t var slashIdx = beginning[2].indexOf('/');\n\t if (slashIdx !== -1) {\n\t beginning[2] = beginning[2].substring(0, slashIdx);\n\t }\n\t var terminal = '0000:0000:0000:0000:0000';\n\t newIp = beginning.concat(terminal).join(':');\n\t }\n\t } else {\n\t newIp = null;\n\t }\n\t } catch (e) {\n\t newIp = null;\n\t }\n\t }\n\t requestData['user_ip'] = newIp;\n\t}\n\t\n\tmodule.exports = {\n\t isType: isType,\n\t typeName: typeName,\n\t isFunction: isFunction,\n\t isNativeFunction: isNativeFunction,\n\t isIterable: isIterable,\n\t isError: isError,\n\t extend: extend,\n\t traverse: traverse,\n\t redact: redact,\n\t uuid4: uuid4,\n\t LEVELS: LEVELS,\n\t sanitizeUrl: sanitizeUrl,\n\t addParamsAndAccessTokenToPath: addParamsAndAccessTokenToPath,\n\t formatUrl: formatUrl,\n\t stringify: stringify,\n\t jsonParse: jsonParse,\n\t makeUnhandledStackInfo: makeUnhandledStackInfo,\n\t createItem: createItem,\n\t get: get,\n\t set: set,\n\t scrub: scrub,\n\t formatArgsAsString: formatArgsAsString,\n\t now: now,\n\t filterIp: filterIp\n\t};\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tvar hasOwn = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\t\n\tvar isArray = function isArray(arr) {\n\t\tif (typeof Array.isArray === 'function') {\n\t\t\treturn Array.isArray(arr);\n\t\t}\n\t\n\t\treturn toStr.call(arr) === '[object Array]';\n\t};\n\t\n\tvar isPlainObject = function isPlainObject(obj) {\n\t\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\t\treturn false;\n\t\t}\n\t\n\t\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\t\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t\t// Not own constructor property must be Object\n\t\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\t\treturn false;\n\t\t}\n\t\n\t\t// Own properties are enumerated firstly, so to speed up,\n\t\t// if last one is own, then all properties are own.\n\t\tvar key;\n\t\tfor (key in obj) {/**/}\n\t\n\t\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n\t};\n\t\n\tmodule.exports = function extend() {\n\t\tvar options, name, src, copy, copyIsArray, clone,\n\t\t\ttarget = arguments[0],\n\t\t\ti = 1,\n\t\t\tlength = arguments.length,\n\t\t\tdeep = false;\n\t\n\t\t// Handle a deep copy situation\n\t\tif (typeof target === 'boolean') {\n\t\t\tdeep = target;\n\t\t\ttarget = arguments[1] || {};\n\t\t\t// skip the boolean and the target\n\t\t\ti = 2;\n\t\t} else if ((typeof target !== 'object' && typeof target !== 'function') || target == null) {\n\t\t\ttarget = {};\n\t\t}\n\t\n\t\tfor (; i < length; ++i) {\n\t\t\toptions = arguments[i];\n\t\t\t// Only deal with non-null/undefined values\n\t\t\tif (options != null) {\n\t\t\t\t// Extend the base object\n\t\t\t\tfor (name in options) {\n\t\t\t\t\tsrc = target[name];\n\t\t\t\t\tcopy = options[name];\n\t\n\t\t\t\t\t// Prevent never-ending loop\n\t\t\t\t\tif (target !== copy) {\n\t\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\t\ttarget[name] = extend(deep, clone, copy);\n\t\n\t\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\t// Return the modified object\n\t\treturn target;\n\t};\n\t\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports) {\n\n\t// json3.js\n\t// 2017-02-21\n\t// Public Domain.\n\t// NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n\t// See http://www.JSON.org/js.html\n\t// This code should be minified before deployment.\n\t// See http://javascript.crockford.com/jsmin.html\n\t\n\t// USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n\t// NOT CONTROL.\n\t\n\t// This file creates a global JSON object containing two methods: stringify\n\t// and parse. This file provides the ES5 JSON capability to ES3 systems.\n\t// If a project might run on IE8 or earlier, then this file should be included.\n\t// This file does nothing on ES5 systems.\n\t\n\t// JSON.stringify(value, replacer, space)\n\t// value any JavaScript value, usually an object or array.\n\t// replacer an optional parameter that determines how object\n\t// values are stringified for objects. It can be a\n\t// function or an array of strings.\n\t// space an optional parameter that specifies the indentation\n\t// of nested structures. If it is omitted, the text will\n\t// be packed without extra whitespace. If it is a number,\n\t// it will specify the number of spaces to indent at each\n\t// level. If it is a string (such as \"\\t\" or \" \"),\n\t// it contains the characters used to indent at each level.\n\t// This method produces a JSON text from a JavaScript value.\n\t// When an object value is found, if the object contains a toJSON\n\t// method, its toJSON method will be called and the result will be\n\t// stringified. A toJSON method does not serialize: it returns the\n\t// value represented by the name/value pair that should be serialized,\n\t// or undefined if nothing should be serialized. The toJSON method\n\t// will be passed the key associated with the value, and this will be\n\t// bound to the value.\n\t\n\t// For example, this would serialize Dates as ISO strings.\n\t\n\t// Date.prototype.toJSON = function (key) {\n\t// function f(n) {\n\t// // Format integers to have at least two digits.\n\t// return (n < 10)\n\t// ? \"0\" + n\n\t// : n;\n\t// }\n\t// return this.getUTCFullYear() + \"-\" +\n\t// f(this.getUTCMonth() + 1) + \"-\" +\n\t// f(this.getUTCDate()) + \"T\" +\n\t// f(this.getUTCHours()) + \":\" +\n\t// f(this.getUTCMinutes()) + \":\" +\n\t// f(this.getUTCSeconds()) + \"Z\";\n\t// };\n\t\n\t// You can provide an optional replacer method. It will be passed the\n\t// key and value of each member, with this bound to the containing\n\t// object. The value that is returned from your method will be\n\t// serialized. If your method returns undefined, then the member will\n\t// be excluded from the serialization.\n\t\n\t// If the replacer parameter is an array of strings, then it will be\n\t// used to select the members to be serialized. It filters the results\n\t// such that only members with keys listed in the replacer array are\n\t// stringified.\n\t\n\t// Values that do not have JSON representations, such as undefined or\n\t// functions, will not be serialized. Such values in objects will be\n\t// dropped; in arrays they will be replaced with null. You can use\n\t// a replacer function to replace those with JSON values.\n\t\n\t// JSON.stringify(undefined) returns undefined.\n\t\n\t// The optional space parameter produces a stringification of the\n\t// value that is filled with line breaks and indentation to make it\n\t// easier to read.\n\t\n\t// If the space parameter is a non-empty string, then that string will\n\t// be used for indentation. If the space parameter is a number, then\n\t// the indentation will be that many spaces.\n\t\n\t// Example:\n\t\n\t// text = JSON.stringify([\"e\", {pluribus: \"unum\"}]);\n\t// // text is '[\"e\",{\"pluribus\":\"unum\"}]'\n\t\n\t// text = JSON.stringify([\"e\", {pluribus: \"unum\"}], null, \"\\t\");\n\t// // text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\n\t\n\t// text = JSON.stringify([new Date()], function (key, value) {\n\t// return this[key] instanceof Date\n\t// ? \"Date(\" + this[key] + \")\"\n\t// : value;\n\t// });\n\t// // text is '[\"Date(---current time---)\"]'\n\t\n\t// JSON.parse(text, reviver)\n\t// This method parses a JSON text to produce an object or array.\n\t// It can throw a SyntaxError exception.\n\t// This has been modified to use JSON-js/json_parse_state.js as the\n\t// parser instead of the one built around eval found in JSON-js/json2.js\n\t\n\t// The optional reviver parameter is a function that can filter and\n\t// transform the results. It receives each of the keys and values,\n\t// and its return value is used instead of the original value.\n\t// If it returns what it received, then the structure is not modified.\n\t// If it returns undefined then the member is deleted.\n\t\n\t// Example:\n\t\n\t// // Parse the text. Values that look like ISO date strings will\n\t// // be converted to Date objects.\n\t\n\t// myData = JSON.parse(text, function (key, value) {\n\t// var a;\n\t// if (typeof value === \"string\") {\n\t// a =\n\t// /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n\t// if (a) {\n\t// return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n\t// +a[5], +a[6]));\n\t// }\n\t// }\n\t// return value;\n\t// });\n\t\n\t// myData = JSON.parse('[\"Date(09/09/2001)\"]', function (key, value) {\n\t// var d;\n\t// if (typeof value === \"string\" &&\n\t// value.slice(0, 5) === \"Date(\" &&\n\t// value.slice(-1) === \")\") {\n\t// d = new Date(value.slice(5, -1));\n\t// if (d) {\n\t// return d;\n\t// }\n\t// }\n\t// return value;\n\t// });\n\t\n\t// This is a reference implementation. You are free to copy, modify, or\n\t// redistribute.\n\t\n\t/*jslint\n\t for, this\n\t */\n\t\n\t/*property\n\t JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\n\t getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\n\t lastIndex, length, parse, prototype, push, replace, slice, stringify,\n\t test, toJSON, toString, valueOf\n\t */\n\t\n\tvar setupCustomJSON = function(JSON) {\n\t\n\t var rx_one = /^[\\],:{}\\s]*$/;\n\t var rx_two = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g;\n\t var rx_three = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\n\t var rx_four = /(?:^|:|,)(?:\\s*\\[)+/g;\n\t var rx_escapable = /[\\\\\"\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\t var rx_dangerous = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\t\n\t function f(n) {\n\t // Format integers to have at least two digits.\n\t return n < 10\n\t ? \"0\" + n\n\t : n;\n\t }\n\t\n\t function this_value() {\n\t return this.valueOf();\n\t }\n\t\n\t if (typeof Date.prototype.toJSON !== \"function\") {\n\t\n\t Date.prototype.toJSON = function () {\n\t\n\t return isFinite(this.valueOf())\n\t ? this.getUTCFullYear() + \"-\" +\n\t f(this.getUTCMonth() + 1) + \"-\" +\n\t f(this.getUTCDate()) + \"T\" +\n\t f(this.getUTCHours()) + \":\" +\n\t f(this.getUTCMinutes()) + \":\" +\n\t f(this.getUTCSeconds()) + \"Z\"\n\t : null;\n\t };\n\t\n\t Boolean.prototype.toJSON = this_value;\n\t Number.prototype.toJSON = this_value;\n\t String.prototype.toJSON = this_value;\n\t }\n\t\n\t var gap;\n\t var indent;\n\t var meta;\n\t var rep;\n\t\n\t\n\t function quote(string) {\n\t\n\t // If the string contains no control characters, no quote characters, and no\n\t // backslash characters, then we can safely slap some quotes around it.\n\t // Otherwise we must also replace the offending characters with safe escape\n\t // sequences.\n\t\n\t rx_escapable.lastIndex = 0;\n\t return rx_escapable.test(string)\n\t ? \"\\\"\" + string.replace(rx_escapable, function (a) {\n\t var c = meta[a];\n\t return typeof c === \"string\"\n\t ? c\n\t : \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n\t }) + \"\\\"\"\n\t : \"\\\"\" + string + \"\\\"\";\n\t }\n\t\n\t\n\t function str(key, holder) {\n\t\n\t // Produce a string from holder[key].\n\t\n\t var i; // The loop counter.\n\t var k; // The member key.\n\t var v; // The member value.\n\t var length;\n\t var mind = gap;\n\t var partial;\n\t var value = holder[key];\n\t\n\t // If the value has a toJSON method, call it to obtain a replacement value.\n\t\n\t if (value && typeof value === \"object\" &&\n\t typeof value.toJSON === \"function\") {\n\t value = value.toJSON(key);\n\t }\n\t\n\t // If we were called with a replacer function, then call the replacer to\n\t // obtain a replacement value.\n\t\n\t if (typeof rep === \"function\") {\n\t value = rep.call(holder, key, value);\n\t }\n\t\n\t // What happens next depends on the value's type.\n\t\n\t switch (typeof value) {\n\t case \"string\":\n\t return quote(value);\n\t\n\t case \"number\":\n\t\n\t // JSON numbers must be finite. Encode non-finite numbers as null.\n\t\n\t return isFinite(value)\n\t ? String(value)\n\t : \"null\";\n\t\n\t case \"boolean\":\n\t case \"null\":\n\t\n\t // If the value is a boolean or null, convert it to a string. Note:\n\t // typeof null does not produce \"null\". The case is included here in\n\t // the remote chance that this gets fixed someday.\n\t\n\t return String(value);\n\t\n\t // If the type is \"object\", we might be dealing with an object or an array or\n\t // null.\n\t\n\t case \"object\":\n\t\n\t // Due to a specification blunder in ECMAScript, typeof null is \"object\",\n\t // so watch out for that case.\n\t\n\t if (!value) {\n\t return \"null\";\n\t }\n\t\n\t // Make an array to hold the partial results of stringifying this object value.\n\t\n\t gap += indent;\n\t partial = [];\n\t\n\t // Is the value an array?\n\t\n\t if (Object.prototype.toString.apply(value) === \"[object Array]\") {\n\t\n\t // The value is an array. Stringify every element. Use null as a placeholder\n\t // for non-JSON values.\n\t\n\t length = value.length;\n\t for (i = 0; i < length; i += 1) {\n\t partial[i] = str(i, value) || \"null\";\n\t }\n\t\n\t // Join all of the elements together, separated with commas, and wrap them in\n\t // brackets.\n\t\n\t v = partial.length === 0\n\t ? \"[]\"\n\t : gap\n\t ? \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\"\n\t : \"[\" + partial.join(\",\") + \"]\";\n\t gap = mind;\n\t return v;\n\t }\n\t\n\t // If the replacer is an array, use it to select the members to be stringified.\n\t\n\t if (rep && typeof rep === \"object\") {\n\t length = rep.length;\n\t for (i = 0; i < length; i += 1) {\n\t if (typeof rep[i] === \"string\") {\n\t k = rep[i];\n\t v = str(k, value);\n\t if (v) {\n\t partial.push(quote(k) + (\n\t gap\n\t ? \": \"\n\t : \":\"\n\t ) + v);\n\t }\n\t }\n\t }\n\t } else {\n\t\n\t // Otherwise, iterate through all of the keys in the object.\n\t\n\t for (k in value) {\n\t if (Object.prototype.hasOwnProperty.call(value, k)) {\n\t v = str(k, value);\n\t if (v) {\n\t partial.push(quote(k) + (\n\t gap\n\t ? \": \"\n\t : \":\"\n\t ) + v);\n\t }\n\t }\n\t }\n\t }\n\t\n\t // Join all of the member texts together, separated with commas,\n\t // and wrap them in braces.\n\t\n\t v = partial.length === 0\n\t ? \"{}\"\n\t : gap\n\t ? \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\"\n\t : \"{\" + partial.join(\",\") + \"}\";\n\t gap = mind;\n\t return v;\n\t }\n\t }\n\t\n\t // If the JSON object does not yet have a stringify method, give it one.\n\t\n\t if (typeof JSON.stringify !== \"function\") {\n\t meta = { // table of character substitutions\n\t \"\\b\": \"\\\\b\",\n\t \"\\t\": \"\\\\t\",\n\t \"\\n\": \"\\\\n\",\n\t \"\\f\": \"\\\\f\",\n\t \"\\r\": \"\\\\r\",\n\t \"\\\"\": \"\\\\\\\"\",\n\t \"\\\\\": \"\\\\\\\\\"\n\t };\n\t JSON.stringify = function (value, replacer, space) {\n\t\n\t // The stringify method takes a value and an optional replacer, and an optional\n\t // space parameter, and returns a JSON text. The replacer can be a function\n\t // that can replace values, or an array of strings that will select the keys.\n\t // A default replacer method can be provided. Use of the space parameter can\n\t // produce text that is more easily readable.\n\t\n\t var i;\n\t gap = \"\";\n\t indent = \"\";\n\t\n\t // If the space parameter is a number, make an indent string containing that\n\t // many spaces.\n\t\n\t if (typeof space === \"number\") {\n\t for (i = 0; i < space; i += 1) {\n\t indent += \" \";\n\t }\n\t\n\t // If the space parameter is a string, it will be used as the indent string.\n\t\n\t } else if (typeof space === \"string\") {\n\t indent = space;\n\t }\n\t\n\t // If there is a replacer, it must be a function or an array.\n\t // Otherwise, throw an error.\n\t\n\t rep = replacer;\n\t if (replacer && typeof replacer !== \"function\" &&\n\t (typeof replacer !== \"object\" ||\n\t typeof replacer.length !== \"number\")) {\n\t throw new Error(\"JSON.stringify\");\n\t }\n\t\n\t // Make a fake root object containing our value under the key of \"\".\n\t // Return the result of stringifying the value.\n\t\n\t return str(\"\", {\"\": value});\n\t };\n\t }\n\t\n\t\n\t // If the JSON object does not yet have a parse method, give it one.\n\t\n\t if (typeof JSON.parse !== \"function\") {\n\t JSON.parse = (function () {\n\t\n\t // This function creates a JSON parse function that uses a state machine rather\n\t // than the dangerous eval function to parse a JSON text.\n\t\n\t var state; // The state of the parser, one of\n\t // 'go' The starting state\n\t // 'ok' The final, accepting state\n\t // 'firstokey' Ready for the first key of the object or\n\t // the closing of an empty object\n\t // 'okey' Ready for the next key of the object\n\t // 'colon' Ready for the colon\n\t // 'ovalue' Ready for the value half of a key/value pair\n\t // 'ocomma' Ready for a comma or closing }\n\t // 'firstavalue' Ready for the first value of an array or\n\t // an empty array\n\t // 'avalue' Ready for the next value of an array\n\t // 'acomma' Ready for a comma or closing ]\n\t var stack; // The stack, for controlling nesting.\n\t var container; // The current container object or array\n\t var key; // The current key\n\t var value; // The current value\n\t var escapes = { // Escapement translation table\n\t \"\\\\\": \"\\\\\",\n\t \"\\\"\": \"\\\"\",\n\t \"/\": \"/\",\n\t \"t\": \"\\t\",\n\t \"n\": \"\\n\",\n\t \"r\": \"\\r\",\n\t \"f\": \"\\f\",\n\t \"b\": \"\\b\"\n\t };\n\t var string = { // The actions for string tokens\n\t go: function () {\n\t state = \"ok\";\n\t },\n\t firstokey: function () {\n\t key = value;\n\t state = \"colon\";\n\t },\n\t okey: function () {\n\t key = value;\n\t state = \"colon\";\n\t },\n\t ovalue: function () {\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t state = \"acomma\";\n\t }\n\t };\n\t var number = { // The actions for number tokens\n\t go: function () {\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t state = \"acomma\";\n\t }\n\t };\n\t var action = {\n\t\n\t // The action table describes the behavior of the machine. It contains an\n\t // object for each token. Each object contains a method that is called when\n\t // a token is matched in a state. An object will lack a method for illegal\n\t // states.\n\t\n\t \"{\": {\n\t go: function () {\n\t stack.push({state: \"ok\"});\n\t container = {};\n\t state = \"firstokey\";\n\t },\n\t ovalue: function () {\n\t stack.push({container: container, state: \"ocomma\", key: key});\n\t container = {};\n\t state = \"firstokey\";\n\t },\n\t firstavalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = {};\n\t state = \"firstokey\";\n\t },\n\t avalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = {};\n\t state = \"firstokey\";\n\t }\n\t },\n\t \"}\": {\n\t firstokey: function () {\n\t var pop = stack.pop();\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t },\n\t ocomma: function () {\n\t var pop = stack.pop();\n\t container[key] = value;\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t }\n\t },\n\t \"[\": {\n\t go: function () {\n\t stack.push({state: \"ok\"});\n\t container = [];\n\t state = \"firstavalue\";\n\t },\n\t ovalue: function () {\n\t stack.push({container: container, state: \"ocomma\", key: key});\n\t container = [];\n\t state = \"firstavalue\";\n\t },\n\t firstavalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = [];\n\t state = \"firstavalue\";\n\t },\n\t avalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = [];\n\t state = \"firstavalue\";\n\t }\n\t },\n\t \"]\": {\n\t firstavalue: function () {\n\t var pop = stack.pop();\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t },\n\t acomma: function () {\n\t var pop = stack.pop();\n\t container.push(value);\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t }\n\t },\n\t \":\": {\n\t colon: function () {\n\t if (Object.hasOwnProperty.call(container, key)) {\n\t throw new SyntaxError(\"Duplicate key '\" + key + \"\\\"\");\n\t }\n\t state = \"ovalue\";\n\t }\n\t },\n\t \",\": {\n\t ocomma: function () {\n\t container[key] = value;\n\t state = \"okey\";\n\t },\n\t acomma: function () {\n\t container.push(value);\n\t state = \"avalue\";\n\t }\n\t },\n\t \"true\": {\n\t go: function () {\n\t value = true;\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t value = true;\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t value = true;\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t value = true;\n\t state = \"acomma\";\n\t }\n\t },\n\t \"false\": {\n\t go: function () {\n\t value = false;\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t value = false;\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t value = false;\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t value = false;\n\t state = \"acomma\";\n\t }\n\t },\n\t \"null\": {\n\t go: function () {\n\t value = null;\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t value = null;\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t value = null;\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t value = null;\n\t state = \"acomma\";\n\t }\n\t }\n\t };\n\t\n\t function debackslashify(text) {\n\t\n\t // Remove and replace any backslash escapement.\n\t\n\t return text.replace(/\\\\(?:u(.{4})|([^u]))/g, function (ignore, b, c) {\n\t return b\n\t ? String.fromCharCode(parseInt(b, 16))\n\t : escapes[c];\n\t });\n\t }\n\t\n\t return function (source, reviver) {\n\t\n\t // A regular expression is used to extract tokens from the JSON text.\n\t // The extraction process is cautious.\n\t\n\t var result;\n\t var tx = /^[\\u0020\\t\\n\\r]*(?:([,:\\[\\]{}]|true|false|null)|(-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)|\"((?:[^\\r\\n\\t\\\\\\\"]|\\\\(?:[\"\\\\\\/trnfb]|u[0-9a-fA-F]{4}))*)\")/;\n\t\n\t // Set the starting state.\n\t\n\t state = \"go\";\n\t\n\t // The stack records the container, key, and state for each object or array\n\t // that contains another object or array while processing nested structures.\n\t\n\t stack = [];\n\t\n\t // If any error occurs, we will catch it and ultimately throw a syntax error.\n\t\n\t try {\n\t\n\t // For each token...\n\t\n\t while (true) {\n\t result = tx.exec(source);\n\t if (!result) {\n\t break;\n\t }\n\t\n\t // result is the result array from matching the tokenizing regular expression.\n\t // result[0] contains everything that matched, including any initial whitespace.\n\t // result[1] contains any punctuation that was matched, or true, false, or null.\n\t // result[2] contains a matched number, still in string form.\n\t // result[3] contains a matched string, without quotes but with escapement.\n\t\n\t if (result[1]) {\n\t\n\t // Token: Execute the action for this state and token.\n\t\n\t action[result[1]][state]();\n\t\n\t } else if (result[2]) {\n\t\n\t // Number token: Convert the number string into a number value and execute\n\t // the action for this state and number.\n\t\n\t value = +result[2];\n\t number[state]();\n\t } else {\n\t\n\t // String token: Replace the escapement sequences and execute the action for\n\t // this state and string.\n\t\n\t value = debackslashify(result[3]);\n\t string[state]();\n\t }\n\t\n\t // Remove the token from the string. The loop will continue as long as there\n\t // are tokens. This is a slow process, but it allows the use of ^ matching,\n\t // which assures that no illegal tokens slip through.\n\t\n\t source = source.slice(result[0].length);\n\t }\n\t\n\t // If we find a state/token combination that is illegal, then the action will\n\t // cause an error. We handle the error by simply changing the state.\n\t\n\t } catch (e) {\n\t state = e;\n\t }\n\t\n\t // The parsing is finished. If we are not in the final \"ok\" state, or if the\n\t // remaining source contains anything except whitespace, then we did not have\n\t //a well-formed JSON text.\n\t\n\t if (state !== \"ok\" || (/[^\\u0020\\t\\n\\r]/.test(source))) {\n\t throw (state instanceof SyntaxError)\n\t ? state\n\t : new SyntaxError(\"JSON\");\n\t }\n\t\n\t // If there is a reviver function, we recursively walk the new structure,\n\t // passing each name/value pair to the reviver function for possible\n\t // transformation, starting with a temporary root object that holds the current\n\t // value in an empty key. If there is not a reviver function, we simply return\n\t // that value.\n\t\n\t return (typeof reviver === \"function\")\n\t ? (function walk(holder, key) {\n\t var k;\n\t var v;\n\t var val = holder[key];\n\t if (val && typeof val === \"object\") {\n\t for (k in value) {\n\t if (Object.prototype.hasOwnProperty.call(val, k)) {\n\t v = walk(val, k);\n\t if (v !== undefined) {\n\t val[k] = v;\n\t } else {\n\t delete val[k];\n\t }\n\t }\n\t }\n\t }\n\t return reviver.call(holder, key, val);\n\t }({\"\": value}, \"\"))\n\t : value;\n\t };\n\t }());\n\t }\n\t}\n\t\n\tmodule.exports = setupCustomJSON;\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\t/*\n\t * Notifier - the internal object responsible for delegating between the client exposed API, the\n\t * chain of transforms necessary to turn an item into something that can be sent to Rollbar, and the\n\t * queue which handles the communcation with the Rollbar API servers.\n\t *\n\t * @param queue - an object that conforms to the interface: addItem(item, callback)\n\t * @param options - an object representing the options to be set for this notifier, this should have\n\t * any defaults already set by the caller\n\t */\n\tfunction Notifier(queue, options) {\n\t this.queue = queue;\n\t this.options = options;\n\t this.transforms = [];\n\t}\n\t\n\t/*\n\t * configure - updates the options for this notifier with the passed in object\n\t *\n\t * @param options - an object which gets merged with the current options set on this notifier\n\t * @returns this\n\t */\n\tNotifier.prototype.configure = function(options) {\n\t this.queue && this.queue.configure(options);\n\t var oldOptions = this.options;\n\t this.options = _.extend({}, oldOptions, options);\n\t return this;\n\t};\n\t\n\t/*\n\t * addTransform - adds a transform onto the end of the queue of transforms for this notifier\n\t *\n\t * @param transform - a function which takes three arguments:\n\t * * item: An Object representing the data to eventually be sent to Rollbar\n\t * * options: The current value of the options for this notifier\n\t * * callback: function(err: (Null|Error), item: (Null|Object)) the transform must call this\n\t * callback with a null value for error if it wants the processing chain to continue, otherwise\n\t * with an error to terminate the processing. The item should be the updated item after this\n\t * transform is finished modifying it.\n\t */\n\tNotifier.prototype.addTransform = function(transform) {\n\t if (_.isFunction(transform)) {\n\t this.transforms.push(transform);\n\t }\n\t return this;\n\t};\n\t\n\t/*\n\t * log - the internal log function which applies the configured transforms and then pushes onto the\n\t * queue to be sent to the backend.\n\t *\n\t * @param item - An object with the following structure:\n\t * message [String] - An optional string to be sent to rollbar\n\t * error [Error] - An optional error\n\t *\n\t * @param callback - A function of type function(err, resp) which will be called with exactly one\n\t * null argument and one non-null argument. The callback will be called once, either during the\n\t * transform stage if an error occurs inside a transform, or in response to the communication with\n\t * the backend. The second argument will be the response from the backend in case of success.\n\t */\n\tNotifier.prototype.log = function(item, callback) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t\n\t if (!this.options.enabled) {\n\t return callback(new Error('Rollbar is not enabled'));\n\t }\n\t\n\t this.queue.addPendingItem(item);\n\t var originalError = item.err;\n\t this._applyTransforms(item, function(err, i) {\n\t if (err) {\n\t this.queue.removePendingItem(item);\n\t return callback(err, null);\n\t }\n\t this.queue.addItem(i, callback, originalError, item);\n\t }.bind(this));\n\t};\n\t\n\t/* Internal */\n\t\n\t/*\n\t * _applyTransforms - Applies the transforms that have been added to this notifier sequentially. See\n\t * `addTransform` for more information.\n\t *\n\t * @param item - An item to be transformed\n\t * @param callback - A function of type function(err, item) which will be called with a non-null\n\t * error and a null item in the case of a transform failure, or a null error and non-null item after\n\t * all transforms have been applied.\n\t */\n\tNotifier.prototype._applyTransforms = function(item, callback) {\n\t var transformIndex = -1;\n\t var transformsLength = this.transforms.length;\n\t var transforms = this.transforms;\n\t var options = this.options;\n\t\n\t var cb = function(err, i) {\n\t if (err) {\n\t callback(err, null);\n\t return;\n\t }\n\t\n\t transformIndex++;\n\t\n\t if (transformIndex === transformsLength) {\n\t callback(null, i);\n\t return;\n\t }\n\t\n\t transforms[transformIndex](i, options, cb);\n\t };\n\t\n\t cb(null, item);\n\t};\n\t\n\tmodule.exports = Notifier;\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\tvar MAX_EVENTS = 100;\n\t\n\tfunction Telemeter(options) {\n\t this.queue = [];\n\t this.options = _.extend(true, {}, options);\n\t var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n\t this.maxQueueSize = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n\t}\n\t\n\tTelemeter.prototype.configure = function(options) {\n\t var oldOptions = this.options;\n\t this.options = _.extend(true, {}, oldOptions, options);\n\t var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n\t var newMaxEvents = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n\t var deleteCount = 0;\n\t if (this.maxQueueSize > newMaxEvents) {\n\t deleteCount = this.maxQueueSize - newMaxEvents;\n\t }\n\t this.maxQueueSize = newMaxEvents;\n\t this.queue.splice(0, deleteCount);\n\t};\n\t\n\tTelemeter.prototype.copyEvents = function() {\n\t return Array.prototype.slice.call(this.queue, 0);\n\t};\n\t\n\tTelemeter.prototype.capture = function(type, metadata, level, rollbarUUID, timestamp) {\n\t var e = {\n\t level: getLevel(type, level),\n\t type: type,\n\t timestamp_ms: timestamp || _.now(),\n\t body: metadata,\n\t source: 'client'\n\t };\n\t if (rollbarUUID) {\n\t e.uuid = rollbarUUID;\n\t }\n\t\n\t try {\n\t if (_.isFunction(this.options.filterTelemetry) && this.options.filterTelemetry(e)) {\n\t return false;\n\t }\n\t } catch (e) {\n\t this.options.filterTelemetry = null;\n\t }\n\t\n\t this.push(e);\n\t return e;\n\t};\n\t\n\tTelemeter.prototype.captureEvent = function(metadata, level, rollbarUUID) {\n\t return this.capture('manual', metadata, level, rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.captureError = function(err, level, rollbarUUID, timestamp) {\n\t var metadata = {\n\t message: err.message || String(err)\n\t };\n\t if (err.stack) {\n\t metadata.stack = err.stack;\n\t }\n\t return this.capture('error', metadata, level, rollbarUUID, timestamp);\n\t};\n\t\n\tTelemeter.prototype.captureLog = function(message, level, rollbarUUID, timestamp) {\n\t return this.capture('log', {\n\t message: message\n\t }, level, rollbarUUID, timestamp);\n\t};\n\t\n\tTelemeter.prototype.captureNetwork = function(metadata, subtype, rollbarUUID, requestData) {\n\t subtype = subtype || 'xhr';\n\t metadata.subtype = metadata.subtype || subtype;\n\t if (requestData) {\n\t metadata.request = requestData;\n\t }\n\t var level = this.levelFromStatus(metadata.status_code);\n\t return this.capture('network', metadata, level, rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.levelFromStatus = function(statusCode) {\n\t if (statusCode >= 200 && statusCode < 400) {\n\t return 'info';\n\t }\n\t if (statusCode === 0 || statusCode >= 400) {\n\t return 'error';\n\t }\n\t return 'info';\n\t};\n\t\n\tTelemeter.prototype.captureDom = function(subtype, element, value, checked, rollbarUUID) {\n\t var metadata = {\n\t subtype: subtype,\n\t element: element\n\t };\n\t if (value !== undefined) {\n\t metadata.value = value;\n\t }\n\t if (checked !== undefined) {\n\t metadata.checked = checked;\n\t }\n\t return this.capture('dom', metadata, 'info', rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.captureNavigation = function(from, to, rollbarUUID) {\n\t return this.capture('navigation', {from: from, to: to}, 'info', rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.captureDomContentLoaded = function(ts) {\n\t return this.capture('navigation', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n\t /**\n\t * If we decide to make this a dom event instead, then use the line below:\n\t return this.capture('dom', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n\t */\n\t};\n\tTelemeter.prototype.captureLoad = function(ts) {\n\t return this.capture('navigation', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n\t /**\n\t * If we decide to make this a dom event instead, then use the line below:\n\t return this.capture('dom', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n\t */\n\t};\n\t\n\tTelemeter.prototype.captureConnectivityChange = function(type, rollbarUUID) {\n\t return this.captureNetwork({change: type}, 'connectivity', rollbarUUID);\n\t};\n\t\n\t// Only intended to be used internally by the notifier\n\tTelemeter.prototype._captureRollbarItem = function(item) {\n\t if (!this.options.includeItemsInTelemetry) {\n\t return;\n\t }\n\t if (item.err) {\n\t return this.captureError(item.err, item.level, item.uuid, item.timestamp);\n\t }\n\t if (item.message) {\n\t return this.captureLog(item.message, item.level, item.uuid, item.timestamp);\n\t }\n\t if (item.custom) {\n\t return this.capture('log', item.custom, item.level, item.uuid, item.timestamp);\n\t }\n\t};\n\t\n\tTelemeter.prototype.push = function(e) {\n\t this.queue.push(e);\n\t if (this.queue.length > this.maxQueueSize) {\n\t this.queue.shift();\n\t }\n\t};\n\t\n\tfunction getLevel(type, level) {\n\t if (level) {\n\t return level;\n\t }\n\t var defaultLevel = {\n\t error: 'error',\n\t manual: 'info'\n\t };\n\t return defaultLevel[type] || 'info';\n\t}\n\t\n\tmodule.exports = Telemeter;\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\tvar helpers = __webpack_require__(11);\n\t\n\tvar defaultOptions = {\n\t hostname: 'api.rollbar.com',\n\t path: '/api/1/item/',\n\t search: null,\n\t version: '1',\n\t protocol: 'https:',\n\t port: 443\n\t};\n\t\n\t/**\n\t * Api is an object that encapsulates methods of communicating with\n\t * the Rollbar API. It is a standard interface with some parts implemented\n\t * differently for server or browser contexts. It is an object that should\n\t * be instantiated when used so it can contain non-global options that may\n\t * be different for another instance of RollbarApi.\n\t *\n\t * @param options {\n\t * accessToken: the accessToken to use for posting items to rollbar\n\t * endpoint: an alternative endpoint to send errors to\n\t * must be a valid, fully qualified URL.\n\t * The default is: https://api.rollbar.com/api/1/item\n\t * proxy: if you wish to proxy requests provide an object\n\t * with the following keys:\n\t * host or hostname (required): foo.example.com\n\t * port (optional): 123\n\t * protocol (optional): https\n\t * }\n\t */\n\tfunction Api(options, t, u, j) {\n\t this.options = options;\n\t this.transport = t;\n\t this.url = u;\n\t this.jsonBackup = j;\n\t this.accessToken = options.accessToken;\n\t this.transportOptions = _getTransport(options, u);\n\t}\n\t\n\t/**\n\t *\n\t * @param data\n\t * @param callback\n\t */\n\tApi.prototype.postItem = function(data, callback) {\n\t var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n\t var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n\t this.transport.post(this.accessToken, transportOptions, payload, callback);\n\t};\n\t\n\tApi.prototype.configure = function(options) {\n\t var oldOptions = this.oldOptions;\n\t this.options = _.extend(true, {}, oldOptions, options);\n\t this.transportOptions = _getTransport(this.options, this.url);\n\t if (this.options.accessToken !== undefined) {\n\t this.accessToken = this.options.accessToken;\n\t }\n\t return this;\n\t};\n\t\n\tfunction _getTransport(options, url) {\n\t return helpers.getTransportFromOptions(options, defaultOptions, url);\n\t}\n\t\n\tmodule.exports = Api;\n\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\tfunction buildPayload(accessToken, data, jsonBackup) {\n\t if (!_.isType(data.context, 'string')) {\n\t var contextResult = _.stringify(data.context, jsonBackup);\n\t if (contextResult.error) {\n\t data.context = 'Error: could not serialize \\'context\\'';\n\t } else {\n\t data.context = contextResult.value || '';\n\t }\n\t if (data.context.length > 255) {\n\t data.context = data.context.substr(0, 255);\n\t }\n\t }\n\t return {\n\t access_token: accessToken,\n\t data: data\n\t };\n\t}\n\t\n\tfunction getTransportFromOptions(options, defaults, url) {\n\t var hostname = defaults.hostname;\n\t var protocol = defaults.protocol;\n\t var port = defaults.port;\n\t var path = defaults.path;\n\t var search = defaults.search;\n\t\n\t var proxy = options.proxy;\n\t if (options.endpoint) {\n\t var opts = url.parse(options.endpoint);\n\t hostname = opts.hostname;\n\t protocol = opts.protocol;\n\t port = opts.port;\n\t path = opts.pathname;\n\t search = opts.search;\n\t }\n\t return {\n\t hostname: hostname,\n\t protocol: protocol,\n\t port: port,\n\t path: path,\n\t search: search,\n\t proxy: proxy\n\t };\n\t}\n\t\n\tfunction transportOptions(transport, method) {\n\t var protocol = transport.protocol || 'https:';\n\t var port = transport.port || (protocol === 'http:' ? 80 : protocol === 'https:' ? 443 : undefined);\n\t var hostname = transport.hostname;\n\t var path = transport.path;\n\t if (transport.search) {\n\t path = path + transport.search;\n\t }\n\t if (transport.proxy) {\n\t path = protocol + '//' + hostname + path;\n\t hostname = transport.proxy.host || transport.proxy.hostname;\n\t port = transport.proxy.port;\n\t protocol = transport.proxy.protocol || protocol;\n\t }\n\t return {\n\t protocol: protocol,\n\t hostname: hostname,\n\t path: path,\n\t port: port,\n\t method: method\n\t };\n\t}\n\t\n\tfunction appendPathToPath(base, path) {\n\t var baseTrailingSlash = /\\/$/.test(base);\n\t var pathBeginningSlash = /^\\//.test(path);\n\t\n\t if (baseTrailingSlash && pathBeginningSlash) {\n\t path = path.substring(1);\n\t } else if (!baseTrailingSlash && !pathBeginningSlash) {\n\t path = '/' + path;\n\t }\n\t\n\t return base + path;\n\t}\n\t\n\tmodule.exports = {\n\t buildPayload: buildPayload,\n\t getTransportFromOptions: getTransportFromOptions,\n\t transportOptions: transportOptions,\n\t appendPathToPath: appendPathToPath\n\t};\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t/* eslint-disable no-console */\n\t__webpack_require__(13);\n\tvar detection = __webpack_require__(14);\n\tvar _ = __webpack_require__(5);\n\t\n\tfunction error() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t args.unshift('Rollbar:');\n\t if (detection.ieVersion() <= 8) {\n\t console.error(_.formatArgsAsString(args));\n\t } else {\n\t console.error.apply(console, args);\n\t }\n\t}\n\t\n\tfunction info() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t args.unshift('Rollbar:');\n\t if (detection.ieVersion() <= 8) {\n\t console.info(_.formatArgsAsString(args));\n\t } else {\n\t console.info.apply(console, args);\n\t }\n\t}\n\t\n\tfunction log() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t args.unshift('Rollbar:');\n\t if (detection.ieVersion() <= 8) {\n\t console.log(_.formatArgsAsString(args));\n\t } else {\n\t console.log.apply(console, args);\n\t }\n\t}\n\t\n\t/* eslint-enable no-console */\n\t\n\tmodule.exports = {\n\t error: error,\n\t info: info,\n\t log: log\n\t};\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports) {\n\n\t// Console-polyfill. MIT license.\n\t// https://github.com/paulmillr/console-polyfill\n\t// Make it safe to do console.log() always.\n\t(function(global) {\n\t 'use strict';\n\t if (!global.console) {\n\t global.console = {};\n\t }\n\t var con = global.console;\n\t var prop, method;\n\t var dummy = function() {};\n\t var properties = ['memory'];\n\t var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' +\n\t 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' +\n\t 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',');\n\t while (prop = properties.pop()) if (!con[prop]) con[prop] = {};\n\t while (method = methods.pop()) if (!con[method]) con[method] = dummy;\n\t // Using `this` for web workers & supports Browserify / Webpack.\n\t})(typeof window === 'undefined' ? this : window);\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\t// This detection.js module is used to encapsulate any ugly browser/feature\n\t// detection we may need to do.\n\t\n\t// Figure out which version of IE we're using, if any.\n\t// This is gleaned from http://stackoverflow.com/questions/5574842/best-way-to-check-for-ie-less-than-9-in-javascript-without-library\n\t// Will return an integer on IE (i.e. 8)\n\t// Will return undefined otherwise\n\tfunction getIEVersion() {\n\t\tvar undef;\n\t\tif (!document) {\n\t\t\treturn undef;\n\t\t}\n\t\n\t var v = 3,\n\t div = document.createElement('div'),\n\t all = div.getElementsByTagName('i');\n\t\n\t while (\n\t div.innerHTML = '',\n\t all[0]\n\t );\n\t\n\t return v > 4 ? v : undef;\n\t}\n\t\n\tvar Detection = {\n\t ieVersion: getIEVersion\n\t};\n\t\n\tmodule.exports = Detection;\n\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tfunction captureUncaughtExceptions(window, handler, shim) {\n\t if (!window) { return; }\n\t var oldOnError;\n\t\n\t if (typeof handler._rollbarOldOnError === 'function') {\n\t oldOnError = handler._rollbarOldOnError;\n\t } else if (window.onerror && !window.onerror.belongsToShim) {\n\t oldOnError = window.onerror;\n\t handler._rollbarOldOnError = oldOnError;\n\t }\n\t\n\t var fn = function() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t _rollbarWindowOnError(window, handler, oldOnError, args);\n\t };\n\t fn.belongsToShim = shim;\n\t window.onerror = fn;\n\t}\n\t\n\tfunction _rollbarWindowOnError(window, r, old, args) {\n\t if (window._rollbarWrappedError) {\n\t if (!args[4]) {\n\t args[4] = window._rollbarWrappedError;\n\t }\n\t if (!args[5]) {\n\t args[5] = window._rollbarWrappedError._rollbarContext;\n\t }\n\t window._rollbarWrappedError = null;\n\t }\n\t\n\t r.handleUncaughtException.apply(r, args);\n\t if (old) {\n\t old.apply(window, args);\n\t }\n\t}\n\t\n\tfunction captureUnhandledRejections(window, handler, shim) {\n\t if (!window) { return; }\n\t\n\t if (typeof window._rollbarURH === 'function' && window._rollbarURH.belongsToShim) {\n\t window.removeEventListener('unhandledrejection', window._rollbarURH);\n\t }\n\t\n\t var rejectionHandler = function (evt) {\n\t var reason, promise, detail;\n\t try {\n\t reason = evt.reason;\n\t } catch (e) {\n\t reason = undefined;\n\t }\n\t try {\n\t promise = evt.promise;\n\t } catch (e) {\n\t promise = '[unhandledrejection] error getting `promise` from event';\n\t }\n\t try {\n\t detail = evt.detail;\n\t if (!reason && detail) {\n\t reason = detail.reason;\n\t promise = detail.promise;\n\t }\n\t } catch (e) {\n\t detail = '[unhandledrejection] error getting `detail` from event';\n\t }\n\t if (!reason) {\n\t reason = '[unhandledrejection] error getting `reason` from event';\n\t }\n\t\n\t if (handler && handler.handleUnhandledRejection) {\n\t handler.handleUnhandledRejection(reason, promise);\n\t }\n\t };\n\t rejectionHandler.belongsToShim = shim;\n\t window._rollbarURH = rejectionHandler;\n\t window.addEventListener('unhandledrejection', rejectionHandler);\n\t}\n\t\n\tfunction wrapGlobals(window, handler, shim) {\n\t if (!window) { return; }\n\t // Adapted from https://github.com/bugsnag/bugsnag-js\n\t var globals = 'EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload'.split(',');\n\t var i, global;\n\t for (i = 0; i < globals.length; ++i) {\n\t global = globals[i];\n\t\n\t if (window[global] && window[global].prototype) {\n\t _extendListenerPrototype(handler, window[global].prototype, shim);\n\t }\n\t }\n\t}\n\t\n\tfunction _extendListenerPrototype(handler, prototype, shim) {\n\t if (prototype.hasOwnProperty && prototype.hasOwnProperty('addEventListener')) {\n\t var oldAddEventListener = prototype.addEventListener;\n\t while (oldAddEventListener._rollbarOldAdd && oldAddEventListener.belongsToShim) {\n\t oldAddEventListener = oldAddEventListener._rollbarOldAdd;\n\t }\n\t var addFn = function(event, callback, bubble) {\n\t oldAddEventListener.call(this, event, handler.wrap(callback), bubble);\n\t };\n\t addFn._rollbarOldAdd = oldAddEventListener;\n\t addFn.belongsToShim = shim;\n\t prototype.addEventListener = addFn;\n\t\n\t var oldRemoveEventListener = prototype.removeEventListener;\n\t while (oldRemoveEventListener._rollbarOldRemove && oldRemoveEventListener.belongsToShim) {\n\t oldRemoveEventListener = oldRemoveEventListener._rollbarOldRemove;\n\t }\n\t var removeFn = function(event, callback, bubble) {\n\t oldRemoveEventListener.call(this, event, callback && callback._rollbar_wrapped || callback, bubble);\n\t };\n\t removeFn._rollbarOldRemove = oldRemoveEventListener;\n\t removeFn.belongsToShim = shim;\n\t prototype.removeEventListener = removeFn;\n\t }\n\t}\n\t\n\tmodule.exports = {\n\t captureUncaughtExceptions: captureUncaughtExceptions,\n\t captureUnhandledRejections: captureUnhandledRejections,\n\t wrapGlobals: wrapGlobals\n\t};\n\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\tvar logger = __webpack_require__(12);\n\t\n\t/*\n\t * accessToken may be embedded in payload but that should not\n\t * be assumed\n\t *\n\t * options: {\n\t * hostname\n\t * protocol\n\t * path\n\t * port\n\t * method\n\t * }\n\t *\n\t * params is an object containing key/value pairs. These\n\t * will be appended to the path as 'key=value&key=value'\n\t *\n\t * payload is an unserialized object\n\t */\n\t\n\tfunction get(accessToken, options, params, callback, requestFactory) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t _.addParamsAndAccessTokenToPath(accessToken, options, params);\n\t\n\t var method = 'GET';\n\t var url = _.formatUrl(options);\n\t _makeRequest(accessToken, url, method, null, callback, requestFactory);\n\t}\n\t\n\tfunction post(accessToken, options, payload, callback, requestFactory) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t\n\t if (!payload) {\n\t return callback(new Error('Cannot send empty request'));\n\t }\n\t\n\t var stringifyResult = _.stringify(payload);\n\t if (stringifyResult.error) {\n\t return callback(stringifyResult.error);\n\t }\n\t\n\t var writeData = stringifyResult.value;\n\t var method = 'POST';\n\t var url = _.formatUrl(options);\n\t _makeRequest(accessToken, url, method, writeData, callback, requestFactory);\n\t}\n\t\n\tfunction _makeRequest(accessToken, url, method, data, callback, requestFactory) {\n\t var request;\n\t if (requestFactory) {\n\t request = requestFactory();\n\t } else {\n\t request = _createXMLHTTPObject();\n\t }\n\t if (!request) {\n\t // Give up, no way to send requests\n\t return callback(new Error('No way to send a request'));\n\t }\n\t try {\n\t try {\n\t var onreadystatechange = function() {\n\t try {\n\t if (onreadystatechange && request.readyState === 4) {\n\t onreadystatechange = undefined;\n\t\n\t var parseResponse = _.jsonParse(request.responseText);\n\t if (_isSuccess(request)) {\n\t callback(parseResponse.error, parseResponse.value);\n\t return;\n\t } else if (_isNormalFailure(request)) {\n\t if (request.status === 403) {\n\t // likely caused by using a server access token\n\t var message = parseResponse.value && parseResponse.value.message;\n\t logger.error(message);\n\t }\n\t // return valid http status codes\n\t callback(new Error(String(request.status)));\n\t } else {\n\t // IE will return a status 12000+ on some sort of connection failure,\n\t // so we return a blank error\n\t // http://msdn.microsoft.com/en-us/library/aa383770%28VS.85%29.aspx\n\t var msg = 'XHR response had no status code (likely connection failure)';\n\t callback(_newRetriableError(msg));\n\t }\n\t }\n\t } catch (ex) {\n\t //jquery source mentions firefox may error out while accessing the\n\t //request members if there is a network error\n\t //https://github.com/jquery/jquery/blob/a938d7b1282fc0e5c52502c225ae8f0cef219f0a/src/ajax/xhr.js#L111\n\t var exc;\n\t if (ex && ex.stack) {\n\t exc = ex;\n\t } else {\n\t exc = new Error(ex);\n\t }\n\t callback(exc);\n\t }\n\t };\n\t\n\t request.open(method, url, true);\n\t if (request.setRequestHeader) {\n\t request.setRequestHeader('Content-Type', 'application/json');\n\t request.setRequestHeader('X-Rollbar-Access-Token', accessToken);\n\t }\n\t request.onreadystatechange = onreadystatechange;\n\t request.send(data);\n\t } catch (e1) {\n\t // Sending using the normal xmlhttprequest object didn't work, try XDomainRequest\n\t if (typeof XDomainRequest !== 'undefined') {\n\t\n\t // Assume we are in a really old browser which has a bunch of limitations:\n\t // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\t\n\t // Extreme paranoia: if we have XDomainRequest then we have a window, but just in case\n\t if (!window || !window.location) {\n\t return callback(new Error('No window available during request, unknown environment'));\n\t }\n\t\n\t // If the current page is http, try and send over http\n\t if (window.location.href.substring(0, 5) === 'http:' && url.substring(0, 5) === 'https') {\n\t url = 'http' + url.substring(5);\n\t }\n\t\n\t var xdomainrequest = new XDomainRequest();\n\t xdomainrequest.onprogress = function() {};\n\t xdomainrequest.ontimeout = function() {\n\t var msg = 'Request timed out';\n\t var code = 'ETIMEDOUT';\n\t callback(_newRetriableError(msg, code));\n\t };\n\t xdomainrequest.onerror = function() {\n\t callback(new Error('Error during request'));\n\t };\n\t xdomainrequest.onload = function() {\n\t var parseResponse = _.jsonParse(xdomainrequest.responseText);\n\t callback(parseResponse.error, parseResponse.value);\n\t };\n\t xdomainrequest.open(method, url, true);\n\t xdomainrequest.send(data);\n\t } else {\n\t callback(new Error('Cannot find a method to transport a request'));\n\t }\n\t }\n\t } catch (e2) {\n\t callback(e2);\n\t }\n\t}\n\t\n\tfunction _createXMLHTTPObject() {\n\t /* global ActiveXObject:false */\n\t\n\t var factories = [\n\t function () {\n\t return new XMLHttpRequest();\n\t },\n\t function () {\n\t return new ActiveXObject('Msxml2.XMLHTTP');\n\t },\n\t function () {\n\t return new ActiveXObject('Msxml3.XMLHTTP');\n\t },\n\t function () {\n\t return new ActiveXObject('Microsoft.XMLHTTP');\n\t }\n\t ];\n\t var xmlhttp;\n\t var i;\n\t var numFactories = factories.length;\n\t for (i = 0; i < numFactories; i++) {\n\t /* eslint-disable no-empty */\n\t try {\n\t xmlhttp = factories[i]();\n\t break;\n\t } catch (e) {\n\t // pass\n\t }\n\t /* eslint-enable no-empty */\n\t }\n\t return xmlhttp;\n\t}\n\t\n\tfunction _isSuccess(r) {\n\t return r && r.status && r.status === 200;\n\t}\n\t\n\tfunction _isNormalFailure(r) {\n\t return r && _.isType(r.status, 'number') && r.status >= 400 && r.status < 600;\n\t}\n\t\n\tfunction _newRetriableError(message, code) {\n\t var err = new Error(message);\n\t err.code = code || 'ENOTFOUND';\n\t return err;\n\t}\n\t\n\tmodule.exports = {\n\t get: get,\n\t post: post\n\t};\n\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\t// See https://nodejs.org/docs/latest/api/url.html\n\tfunction parse(url) {\n\t var result = {\n\t protocol: null, auth: null, host: null, path: null,\n\t hash: null, href: url, hostname: null, port: null,\n\t pathname: null, search: null, query: null\n\t };\n\t\n\t var i, last;\n\t i = url.indexOf('//');\n\t if (i !== -1) {\n\t result.protocol = url.substring(0,i);\n\t last = i+2;\n\t } else {\n\t last = 0;\n\t }\n\t \n\t i = url.indexOf('@', last);\n\t if (i !== -1) {\n\t result.auth = url.substring(last, i);\n\t last = i+1;\n\t }\n\t\n\t i = url.indexOf('/', last);\n\t if (i === -1) {\n\t i = url.indexOf('?', last);\n\t if (i === -1) {\n\t i = url.indexOf('#', last);\n\t if (i === -1) {\n\t result.host = url.substring(last);\n\t } else {\n\t result.host = url.substring(last, i);\n\t result.hash = url.substring(i);\n\t }\n\t result.hostname = result.host.split(':')[0];\n\t result.port = result.host.split(':')[1];\n\t if (result.port) {\n\t result.port = parseInt(result.port, 10);\n\t }\n\t return result;\n\t } else {\n\t result.host = url.substring(last, i);\n\t result.hostname = result.host.split(':')[0];\n\t result.port = result.host.split(':')[1];\n\t if (result.port) {\n\t result.port = parseInt(result.port, 10);\n\t }\n\t last = i;\n\t }\n\t } else {\n\t result.host = url.substring(last, i);\n\t result.hostname = result.host.split(':')[0];\n\t result.port = result.host.split(':')[1];\n\t if (result.port) {\n\t result.port = parseInt(result.port, 10);\n\t }\n\t last = i;\n\t }\n\t\n\t i = url.indexOf('#', last);\n\t if (i === -1) {\n\t result.path = url.substring(last);\n\t } else {\n\t result.path = url.substring(last, i);\n\t result.hash = url.substring(i);\n\t }\n\t\n\t if (result.path) {\n\t var pathParts = result.path.split('?');\n\t result.pathname = pathParts[0];\n\t result.query = pathParts[1];\n\t result.search = result.query ? '?' + result.query : null;\n\t }\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t parse: parse\n\t};\n\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\tvar errorParser = __webpack_require__(19);\n\tvar logger = __webpack_require__(12);\n\t\n\tfunction handleItemWithError(item, options, callback) {\n\t item.data = item.data || {};\n\t if (item.err) {\n\t try {\n\t item.stackInfo = item.err._savedStackTrace || errorParser.parse(item.err);\n\t } catch (e)\n\t /* istanbul ignore next */\n\t {\n\t logger.error('Error while parsing the error object.', e);\n\t item.message = item.err.message || item.err.description || item.message || String(item.err);\n\t delete item.err;\n\t }\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction ensureItemHasSomethingToSay(item, options, callback) {\n\t if (!item.message && !item.stackInfo && !item.custom) {\n\t callback(new Error('No message, stack info, or custom data'), null);\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction addBaseInfo(item, options, callback) {\n\t var environment = (options.payload && options.payload.environment) || options.environment;\n\t item.data = _.extend(true, {}, item.data, {\n\t environment: environment,\n\t level: item.level,\n\t endpoint: options.endpoint,\n\t platform: 'browser',\n\t framework: 'browser-js',\n\t language: 'javascript',\n\t server: {},\n\t uuid: item.uuid,\n\t notifier: {\n\t name: 'rollbar-browser-js',\n\t version: options.version\n\t }\n\t });\n\t callback(null, item);\n\t}\n\t\n\tfunction addRequestInfo(window) {\n\t return function(item, options, callback) {\n\t if (!window || !window.location) {\n\t return callback(null, item);\n\t }\n\t var remoteString = '$remote_ip';\n\t if (!options.captureIp) {\n\t remoteString = null;\n\t } else if (options.captureIp !== true) {\n\t remoteString += '_anonymize';\n\t }\n\t _.set(item, 'data.request', {\n\t url: window.location.href,\n\t query_string: window.location.search,\n\t user_ip: remoteString\n\t });\n\t callback(null, item);\n\t };\n\t}\n\t\n\tfunction addClientInfo(window) {\n\t return function(item, options, callback) {\n\t if (!window) {\n\t return callback(null, item);\n\t }\n\t var nav = window.navigator || {};\n\t var scr = window.screen || {};\n\t _.set(item, 'data.client', {\n\t runtime_ms: item.timestamp - window._rollbarStartTime,\n\t timestamp: Math.round(item.timestamp / 1000),\n\t javascript: {\n\t browser: nav.userAgent,\n\t language: nav.language,\n\t cookie_enabled: nav.cookieEnabled,\n\t screen: {\n\t width: scr.width,\n\t height: scr.height\n\t }\n\t }\n\t });\n\t callback(null, item);\n\t };\n\t}\n\t\n\tfunction addPluginInfo(window) {\n\t return function(item, options, callback) {\n\t if (!window || !window.navigator) {\n\t return callback(null, item);\n\t }\n\t var plugins = [];\n\t var navPlugins = window.navigator.plugins || [];\n\t var cur;\n\t for (var i=0, l=navPlugins.length; i < l; ++i) {\n\t cur = navPlugins[i];\n\t plugins.push({name: cur.name, description: cur.description});\n\t }\n\t _.set(item, 'data.client.javascript.plugins', plugins);\n\t callback(null, item);\n\t };\n\t}\n\t\n\tfunction addBody(item, options, callback) {\n\t if (item.stackInfo) {\n\t addBodyTrace(item, options, callback);\n\t } else {\n\t addBodyMessage(item, options, callback);\n\t }\n\t}\n\t\n\tfunction addBodyMessage(item, options, callback) {\n\t var message = item.message;\n\t var custom = item.custom;\n\t\n\t if (!message) {\n\t if (custom) {\n\t var scrubFields = options.scrubFields;\n\t var messageResult = _.stringify(_.scrub(custom, scrubFields));\n\t message = messageResult.error || messageResult.value || '';\n\t } else {\n\t message = '';\n\t }\n\t }\n\t var result = {\n\t body: message\n\t };\n\t\n\t if (custom) {\n\t result.extra = _.extend(true, {}, custom);\n\t }\n\t\n\t _.set(item, 'data.body', {message: result});\n\t callback(null, item);\n\t}\n\t\n\t\n\tfunction addBodyTrace(item, options, callback) {\n\t var description = item.data.description;\n\t var stackInfo = item.stackInfo;\n\t var custom = item.custom;\n\t\n\t var guess = errorParser.guessErrorClass(stackInfo.message);\n\t var className = stackInfo.name || guess[0];\n\t var message = guess[1];\n\t var trace = {\n\t exception: {\n\t 'class': className,\n\t message: message\n\t }\n\t };\n\t\n\t if (description) {\n\t trace.exception.description = description;\n\t }\n\t\n\t // Transform a TraceKit stackInfo object into a Rollbar trace\n\t var stack = stackInfo.stack;\n\t if (stack && stack.length === 0 && item._unhandledStackInfo && item._unhandledStackInfo.stack) {\n\t stack = item._unhandledStackInfo.stack;\n\t }\n\t if (stack) {\n\t if (stack.length === 0) {\n\t trace.exception.stack = stackInfo.rawStack;\n\t trace.exception.raw = String(stackInfo.rawException);\n\t }\n\t var stackFrame;\n\t var frame;\n\t var code;\n\t var pre;\n\t var post;\n\t var contextLength;\n\t var i, mid;\n\t\n\t trace.frames = [];\n\t for (i = 0; i < stack.length; ++i) {\n\t stackFrame = stack[i];\n\t frame = {\n\t filename: stackFrame.url ? _.sanitizeUrl(stackFrame.url) : '(unknown)',\n\t lineno: stackFrame.line || null,\n\t method: (!stackFrame.func || stackFrame.func === '?') ? '[anonymous]' : stackFrame.func,\n\t colno: stackFrame.column\n\t };\n\t if (frame.method && frame.method.endsWith && frame.method.endsWith('_rollbar_wrapped')) {\n\t continue;\n\t }\n\t\n\t code = pre = post = null;\n\t contextLength = stackFrame.context ? stackFrame.context.length : 0;\n\t if (contextLength) {\n\t mid = Math.floor(contextLength / 2);\n\t pre = stackFrame.context.slice(0, mid);\n\t code = stackFrame.context[mid];\n\t post = stackFrame.context.slice(mid);\n\t }\n\t\n\t if (code) {\n\t frame.code = code;\n\t }\n\t\n\t if (pre || post) {\n\t frame.context = {};\n\t if (pre && pre.length) {\n\t frame.context.pre = pre;\n\t }\n\t if (post && post.length) {\n\t frame.context.post = post;\n\t }\n\t }\n\t\n\t if (stackFrame.args) {\n\t frame.args = stackFrame.args;\n\t }\n\t\n\t trace.frames.push(frame);\n\t }\n\t\n\t // NOTE(cory): reverse the frames since rollbar.com expects the most recent call last\n\t trace.frames.reverse();\n\t\n\t if (custom) {\n\t trace.extra = _.extend(true, {}, custom);\n\t }\n\t _.set(item, 'data.body', {trace: trace});\n\t callback(null, item);\n\t } else {\n\t item.message = className + ': ' + message;\n\t addBodyMessage(item, options, callback);\n\t }\n\t}\n\t\n\tfunction scrubPayload(item, options, callback) {\n\t var scrubFields = options.scrubFields;\n\t item.data = _.scrub(item.data, scrubFields);\n\t callback(null, item);\n\t}\n\t\n\tmodule.exports = {\n\t handleItemWithError: handleItemWithError,\n\t ensureItemHasSomethingToSay: ensureItemHasSomethingToSay,\n\t addBaseInfo: addBaseInfo,\n\t addRequestInfo: addRequestInfo,\n\t addClientInfo: addClientInfo,\n\t addPluginInfo: addPluginInfo,\n\t addBody: addBody,\n\t scrubPayload: scrubPayload\n\t};\n\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar ErrorStackParser = __webpack_require__(20);\n\t\n\tvar UNKNOWN_FUNCTION = '?';\n\tvar ERR_CLASS_REGEXP = new RegExp('^(([a-zA-Z0-9-_$ ]*): *)?(Uncaught )?([a-zA-Z0-9-_$ ]*): ');\n\t\n\tfunction guessFunctionName() {\n\t return UNKNOWN_FUNCTION;\n\t}\n\t\n\t\n\tfunction gatherContext() {\n\t return null;\n\t}\n\t\n\t\n\tfunction Frame(stackFrame) {\n\t var data = {};\n\t\n\t data._stackFrame = stackFrame;\n\t\n\t data.url = stackFrame.fileName;\n\t data.line = stackFrame.lineNumber;\n\t data.func = stackFrame.functionName;\n\t data.column = stackFrame.columnNumber;\n\t data.args = stackFrame.args;\n\t\n\t data.context = gatherContext(data.url, data.line);\n\t\n\t return data;\n\t}\n\t\n\t\n\tfunction Stack(exception) {\n\t function getStack() {\n\t var parserStack = [];\n\t var exc;\n\t\n\t if (!exception.stack) {\n\t try {\n\t throw exception;\n\t } catch (e) {\n\t exc = e;\n\t }\n\t } else {\n\t exc = exception;\n\t }\n\t\n\t try {\n\t parserStack = ErrorStackParser.parse(exc);\n\t } catch(e) {\n\t parserStack = [];\n\t }\n\t\n\t var stack = [];\n\t\n\t for (var i = 0; i < parserStack.length; i++) {\n\t stack.push(new Frame(parserStack[i]));\n\t }\n\t\n\t return stack;\n\t }\n\t\n\t return {\n\t stack: getStack(),\n\t message: exception.message,\n\t name: exception.name,\n\t rawStack: exception.stack,\n\t rawException: exception\n\t };\n\t}\n\t\n\t\n\tfunction parse(e) {\n\t return new Stack(e);\n\t}\n\t\n\t\n\tfunction guessErrorClass(errMsg) {\n\t if (!errMsg || !errMsg.match) {\n\t return ['Unknown error. There was no error message to display.', ''];\n\t }\n\t var errClassMatch = errMsg.match(ERR_CLASS_REGEXP);\n\t var errClass = '(unknown)';\n\t\n\t if (errClassMatch) {\n\t errClass = errClassMatch[errClassMatch.length - 1];\n\t errMsg = errMsg.replace((errClassMatch[errClassMatch.length - 2] || '') + errClass + ':', '');\n\t errMsg = errMsg.replace(/(^[\\s]+|[\\s]+$)/g, '');\n\t }\n\t return [errClass, errMsg];\n\t}\n\t\n\t\n\tmodule.exports = {\n\t guessFunctionName: guessFunctionName,\n\t guessErrorClass: guessErrorClass,\n\t gatherContext: gatherContext,\n\t parse: parse,\n\t Stack: Stack,\n\t Frame: Frame\n\t};\n\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (root, factory) {\n\t 'use strict';\n\t // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\t\n\t /* istanbul ignore next */\n\t if (true) {\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(21)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t } else if (typeof exports === 'object') {\n\t module.exports = factory(require('stackframe'));\n\t } else {\n\t root.ErrorStackParser = factory(root.StackFrame);\n\t }\n\t}(this, function ErrorStackParser(StackFrame) {\n\t 'use strict';\n\t\n\t var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n\t var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n\t var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\t\n\t function _map(array, fn, thisArg) {\n\t if (typeof Array.prototype.map === 'function') {\n\t return array.map(fn, thisArg);\n\t } else {\n\t var output = new Array(array.length);\n\t for (var i = 0; i < array.length; i++) {\n\t output[i] = fn.call(thisArg, array[i]);\n\t }\n\t return output;\n\t }\n\t }\n\t\n\t function _filter(array, fn, thisArg) {\n\t if (typeof Array.prototype.filter === 'function') {\n\t return array.filter(fn, thisArg);\n\t } else {\n\t var output = [];\n\t for (var i = 0; i < array.length; i++) {\n\t if (fn.call(thisArg, array[i])) {\n\t output.push(array[i]);\n\t }\n\t }\n\t return output;\n\t }\n\t }\n\t\n\t return {\n\t /**\n\t * Given an Error object, extract the most information from it.\n\t * @param error {Error}\n\t * @return Array[StackFrame]\n\t */\n\t parse: function ErrorStackParser$$parse(error) {\n\t if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n\t return this.parseOpera(error);\n\t } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n\t return this.parseV8OrIE(error);\n\t } else if (error.stack) {\n\t return this.parseFFOrSafari(error);\n\t } else {\n\t throw new Error('Cannot parse given Error object');\n\t }\n\t },\n\t\n\t /**\n\t * Separate line and column numbers from a URL-like string.\n\t * @param urlLike String\n\t * @return Array[String]\n\t */\n\t extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n\t // Fail-fast but return locations like \"(native)\"\n\t if (urlLike.indexOf(':') === -1) {\n\t return [urlLike];\n\t }\n\t\n\t var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n\t var lastNumber = locationParts.pop();\n\t var possibleNumber = locationParts[locationParts.length - 1];\n\t if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n\t var lineNumber = locationParts.pop();\n\t return [locationParts.join(':'), lineNumber, lastNumber];\n\t } else {\n\t return [locationParts.join(':'), lastNumber, undefined];\n\t }\n\t },\n\t\n\t parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n\t var filtered = _filter(error.stack.split('\\n'), function (line) {\n\t return !!line.match(CHROME_IE_STACK_REGEXP);\n\t }, this);\n\t\n\t return _map(filtered, function (line) {\n\t if (line.indexOf('(eval ') > -1) {\n\t // Throw away eval information until we implement stacktrace.js/stackframe#8\n\t line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n\t }\n\t var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n\t var locationParts = this.extractLocation(tokens.pop());\n\t var functionName = tokens.join(' ') || undefined;\n\t var fileName = locationParts[0] === 'eval' ? undefined : locationParts[0];\n\t\n\t return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n\t }, this);\n\t },\n\t\n\t parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n\t var filtered = _filter(error.stack.split('\\n'), function (line) {\n\t return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n\t }, this);\n\t\n\t return _map(filtered, function (line) {\n\t // Throw away eval information until we implement stacktrace.js/stackframe#8\n\t if (line.indexOf(' > eval') > -1) {\n\t line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n\t }\n\t\n\t if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n\t // Safari eval frames only have function names and nothing else\n\t return new StackFrame(line);\n\t } else {\n\t var tokens = line.split('@');\n\t var locationParts = this.extractLocation(tokens.pop());\n\t var functionName = tokens.shift() || undefined;\n\t return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n\t }\n\t }, this);\n\t },\n\t\n\t parseOpera: function ErrorStackParser$$parseOpera(e) {\n\t if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n\t e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n\t return this.parseOpera9(e);\n\t } else if (!e.stack) {\n\t return this.parseOpera10(e);\n\t } else {\n\t return this.parseOpera11(e);\n\t }\n\t },\n\t\n\t parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n\t var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n\t var lines = e.message.split('\\n');\n\t var result = [];\n\t\n\t for (var i = 2, len = lines.length; i < len; i += 2) {\n\t var match = lineRE.exec(lines[i]);\n\t if (match) {\n\t result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n\t }\n\t }\n\t\n\t return result;\n\t },\n\t\n\t parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n\t var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n\t var lines = e.stacktrace.split('\\n');\n\t var result = [];\n\t\n\t for (var i = 0, len = lines.length; i < len; i += 2) {\n\t var match = lineRE.exec(lines[i]);\n\t if (match) {\n\t result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n\t }\n\t }\n\t\n\t return result;\n\t },\n\t\n\t // Opera 10.65+ Error.stack very similar to FF/Safari\n\t parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n\t var filtered = _filter(error.stack.split('\\n'), function (line) {\n\t return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n\t !line.match(/^Error created at/);\n\t }, this);\n\t\n\t return _map(filtered, function (line) {\n\t var tokens = line.split('@');\n\t var locationParts = this.extractLocation(tokens.pop());\n\t var functionCall = (tokens.shift() || '');\n\t var functionName = functionCall\n\t .replace(//, '$2')\n\t .replace(/\\([^\\)]*\\)/g, '') || undefined;\n\t var argsRaw;\n\t if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n\t argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n\t }\n\t var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n\t return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n\t }, this);\n\t }\n\t };\n\t}));\n\t\n\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (root, factory) {\n\t 'use strict';\n\t // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\t\n\t /* istanbul ignore next */\n\t if (true) {\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t } else if (typeof exports === 'object') {\n\t module.exports = factory();\n\t } else {\n\t root.StackFrame = factory();\n\t }\n\t}(this, function () {\n\t 'use strict';\n\t function _isNumber(n) {\n\t return !isNaN(parseFloat(n)) && isFinite(n);\n\t }\n\t\n\t function StackFrame(functionName, args, fileName, lineNumber, columnNumber, source) {\n\t if (functionName !== undefined) {\n\t this.setFunctionName(functionName);\n\t }\n\t if (args !== undefined) {\n\t this.setArgs(args);\n\t }\n\t if (fileName !== undefined) {\n\t this.setFileName(fileName);\n\t }\n\t if (lineNumber !== undefined) {\n\t this.setLineNumber(lineNumber);\n\t }\n\t if (columnNumber !== undefined) {\n\t this.setColumnNumber(columnNumber);\n\t }\n\t if (source !== undefined) {\n\t this.setSource(source);\n\t }\n\t }\n\t\n\t StackFrame.prototype = {\n\t getFunctionName: function () {\n\t return this.functionName;\n\t },\n\t setFunctionName: function (v) {\n\t this.functionName = String(v);\n\t },\n\t\n\t getArgs: function () {\n\t return this.args;\n\t },\n\t setArgs: function (v) {\n\t if (Object.prototype.toString.call(v) !== '[object Array]') {\n\t throw new TypeError('Args must be an Array');\n\t }\n\t this.args = v;\n\t },\n\t\n\t // NOTE: Property name may be misleading as it includes the path,\n\t // but it somewhat mirrors V8's JavaScriptStackTraceApi\n\t // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's\n\t // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14\n\t getFileName: function () {\n\t return this.fileName;\n\t },\n\t setFileName: function (v) {\n\t this.fileName = String(v);\n\t },\n\t\n\t getLineNumber: function () {\n\t return this.lineNumber;\n\t },\n\t setLineNumber: function (v) {\n\t if (!_isNumber(v)) {\n\t throw new TypeError('Line Number must be a Number');\n\t }\n\t this.lineNumber = Number(v);\n\t },\n\t\n\t getColumnNumber: function () {\n\t return this.columnNumber;\n\t },\n\t setColumnNumber: function (v) {\n\t if (!_isNumber(v)) {\n\t throw new TypeError('Column Number must be a Number');\n\t }\n\t this.columnNumber = Number(v);\n\t },\n\t\n\t getSource: function () {\n\t return this.source;\n\t },\n\t setSource: function (v) {\n\t this.source = String(v);\n\t },\n\t\n\t toString: function() {\n\t var functionName = this.getFunctionName() || '{anonymous}';\n\t var args = '(' + (this.getArgs() || []).join(',') + ')';\n\t var fileName = this.getFileName() ? ('@' + this.getFileName()) : '';\n\t var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : '';\n\t var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : '';\n\t return functionName + args + fileName + lineNumber + columnNumber;\n\t }\n\t };\n\t\n\t return StackFrame;\n\t}));\n\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\tfunction itemToPayload(item, options, callback) {\n\t var payloadOptions = options.payload || {};\n\t if (payloadOptions.body) {\n\t delete payloadOptions.body;\n\t }\n\t\n\t var data = _.extend(true, {}, item.data, payloadOptions);\n\t if (item._isUncaught) {\n\t data._isUncaught = true;\n\t }\n\t if (item._originalArgs) {\n\t data._originalArgs = item._originalArgs;\n\t }\n\t callback(null, data);\n\t}\n\t\n\tfunction addTelemetryData(item, options, callback) {\n\t if (item.telemetryEvents) {\n\t _.set(item, 'data.body.telemetry', item.telemetryEvents);\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction addMessageWithError(item, options, callback) {\n\t if (!item.message) {\n\t callback(null, item);\n\t return;\n\t }\n\t var tracePath = 'data.body.trace_chain.0';\n\t var trace = _.get(item, tracePath);\n\t if (!trace) {\n\t tracePath = 'data.body.trace';\n\t trace = _.get(item, tracePath);\n\t }\n\t if (trace) {\n\t if (!(trace.exception && trace.exception.description)) {\n\t _.set(item, tracePath+'.exception.description', item.message);\n\t callback(null, item);\n\t return;\n\t }\n\t var extra = _.get(item, tracePath+'.extra') || {};\n\t var newExtra = _.extend(true, {}, extra, {message: item.message});\n\t _.set(item, tracePath+'.extra', newExtra);\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction userTransform(logger) {\n\t return function(item, options, callback) {\n\t var newItem = _.extend(true, {}, item);\n\t try {\n\t if (_.isFunction(options.transform)) {\n\t options.transform(newItem.data);\n\t }\n\t } catch (e) {\n\t options.transform = null;\n\t logger.error('Error while calling custom transform() function. Removing custom transform().', e);\n\t callback(null, item);\n\t return;\n\t }\n\t callback(null, newItem);\n\t }\n\t}\n\t\n\tfunction addConfigToPayload(item, options, callback) {\n\t if (!options.sendConfig) {\n\t return callback(null, item);\n\t }\n\t var configKey = '_rollbarConfig';\n\t var custom = _.get(item, 'data.custom') || {};\n\t custom[configKey] = options;\n\t item.data.custom = custom;\n\t callback(null, item);\n\t}\n\t\n\tmodule.exports = {\n\t itemToPayload: itemToPayload,\n\t addTelemetryData: addTelemetryData,\n\t addMessageWithError: addMessageWithError,\n\t userTransform: userTransform,\n\t addConfigToPayload: addConfigToPayload\n\t};\n\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\tfunction checkIgnore(item, settings) {\n\t if (_.get(settings, 'plugins.jquery.ignoreAjaxErrors')) {\n\t return !_.get(item, 'body.message.extra.isAjax');\n\t }\n\t return true;\n\t}\n\t\n\tmodule.exports = {\n\t checkIgnore: checkIgnore\n\t};\n\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\tfunction checkLevel(item, settings) {\n\t var level = item.level;\n\t var levelVal = _.LEVELS[level] || 0;\n\t var reportLevel = settings.reportLevel;\n\t var reportLevelVal = _.LEVELS[reportLevel] || 0;\n\t\n\t if (levelVal < reportLevelVal) {\n\t return false;\n\t }\n\t return true;\n\t}\n\t\n\tfunction userCheckIgnore(logger) {\n\t return function(item, settings) {\n\t var isUncaught = !!item._isUncaught;\n\t delete item._isUncaught;\n\t var args = item._originalArgs;\n\t delete item._originalArgs;\n\t try {\n\t if (_.isFunction(settings.onSendCallback)) {\n\t settings.onSendCallback(isUncaught, args, item);\n\t }\n\t } catch (e) {\n\t settings.onSendCallback = null;\n\t logger.error('Error while calling onSendCallback, removing', e);\n\t }\n\t try {\n\t if (_.isFunction(settings.checkIgnore) && settings.checkIgnore(isUncaught, args, item)) {\n\t return false;\n\t }\n\t } catch (e) {\n\t settings.checkIgnore = null;\n\t logger.error('Error while calling custom checkIgnore(), removing', e);\n\t }\n\t return true;\n\t }\n\t}\n\t\n\tfunction urlIsNotBlacklisted(logger) {\n\t return function(item, settings) {\n\t return !urlIsOnAList(item, settings, 'blacklist', logger);\n\t }\n\t}\n\t\n\tfunction urlIsWhitelisted(logger) {\n\t return function(item, settings) {\n\t return urlIsOnAList(item, settings, 'whitelist', logger);\n\t }\n\t}\n\t\n\tfunction urlIsOnAList(item, settings, whiteOrBlack, logger) {\n\t // whitelist is the default\n\t var black = false;\n\t if (whiteOrBlack === 'blacklist') {\n\t black = true;\n\t }\n\t var list, trace, frame, filename, frameLength, url, listLength, urlRegex;\n\t var i, j;\n\t\n\t try {\n\t list = black ? settings.hostBlackList : settings.hostWhiteList;\n\t listLength = list && list.length;\n\t trace = _.get(item, 'body.trace');\n\t\n\t // These two checks are important to come first as they are defaults\n\t // in case the list is missing or the trace is missing or not well-formed\n\t if (!list || listLength === 0) {\n\t return !black;\n\t }\n\t if (!trace || !trace.frames || trace.frames.length === 0) {\n\t return !black;\n\t }\n\t\n\t frameLength = trace.frames.length;\n\t for (i = 0; i < frameLength; i++) {\n\t frame = trace.frames[i];\n\t filename = frame.filename;\n\t\n\t if (!_.isType(filename, 'string')) {\n\t return !black;\n\t }\n\t\n\t for (j = 0; j < listLength; j++) {\n\t url = list[j];\n\t urlRegex = new RegExp(url);\n\t\n\t if (urlRegex.test(filename)) {\n\t return true;\n\t }\n\t }\n\t }\n\t } catch (e)\n\t /* istanbul ignore next */\n\t {\n\t if (black) {\n\t settings.hostBlackList = null;\n\t } else {\n\t settings.hostWhiteList = null;\n\t }\n\t var listName = black ? 'hostBlackList' : 'hostWhiteList';\n\t logger.error('Error while reading your configuration\\'s ' + listName + ' option. Removing custom ' + listName + '.', e);\n\t return !black;\n\t }\n\t return false;\n\t}\n\t\n\tfunction messageIsIgnored(logger) {\n\t return function(item, settings) {\n\t var exceptionMessage, i, ignoredMessages,\n\t len, messageIsIgnored, rIgnoredMessage,\n\t body, traceMessage, bodyMessage;\n\t\n\t try {\n\t messageIsIgnored = false;\n\t ignoredMessages = settings.ignoredMessages;\n\t\n\t if (!ignoredMessages || ignoredMessages.length === 0) {\n\t return true;\n\t }\n\t\n\t body = item.body;\n\t traceMessage = _.get(body, 'trace.exception.message');\n\t bodyMessage = _.get(body, 'message.body');\n\t\n\t exceptionMessage = traceMessage || bodyMessage;\n\t\n\t if (!exceptionMessage){\n\t return true;\n\t }\n\t\n\t len = ignoredMessages.length;\n\t for (i = 0; i < len; i++) {\n\t rIgnoredMessage = new RegExp(ignoredMessages[i], 'gi');\n\t messageIsIgnored = rIgnoredMessage.test(exceptionMessage);\n\t\n\t if (messageIsIgnored) {\n\t break;\n\t }\n\t }\n\t } catch(e)\n\t /* istanbul ignore next */\n\t {\n\t settings.ignoredMessages = null;\n\t logger.error('Error while reading your configuration\\'s ignoredMessages option. Removing custom ignoredMessages.');\n\t }\n\t\n\t return !messageIsIgnored;\n\t }\n\t}\n\t\n\tmodule.exports = {\n\t checkLevel: checkLevel,\n\t userCheckIgnore: userCheckIgnore,\n\t urlIsNotBlacklisted: urlIsNotBlacklisted,\n\t urlIsWhitelisted: urlIsWhitelisted,\n\t messageIsIgnored: messageIsIgnored\n\t};\n\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\tvar urlparser = __webpack_require__(17);\n\tvar domUtil = __webpack_require__(26);\n\t\n\tvar defaults = {\n\t network: true,\n\t networkResponseHeaders: false,\n\t networkResponseBody: false,\n\t networkRequestBody: false,\n\t log: true,\n\t dom: true,\n\t navigation: true,\n\t connectivity: true\n\t};\n\t\n\tfunction replace(obj, name, replacement, replacements, type) {\n\t var orig = obj[name];\n\t obj[name] = replacement(orig);\n\t if (replacements) {\n\t replacements[type].push([obj, name, orig]);\n\t }\n\t}\n\t\n\tfunction restore(replacements, type) {\n\t var b;\n\t while (replacements[type].length) {\n\t b = replacements[type].shift();\n\t b[0][b[1]] = b[2];\n\t }\n\t}\n\t\n\tfunction Instrumenter(options, telemeter, rollbar, _window, _document) {\n\t var autoInstrument = options.autoInstrument;\n\t if (options.enabled === false || autoInstrument === false) {\n\t this.autoInstrument = {};\n\t } else {\n\t if (!_.isType(autoInstrument, 'object')) {\n\t autoInstrument = defaults;\n\t }\n\t this.autoInstrument = _.extend(true, {}, defaults, autoInstrument);\n\t }\n\t this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n\t this.telemetryScrubber = options.telemetryScrubber;\n\t this.telemeter = telemeter;\n\t this.rollbar = rollbar;\n\t this._window = _window || {};\n\t this._document = _document || {};\n\t this.replacements = {\n\t network: [],\n\t log: [],\n\t navigation: [],\n\t connectivity: []\n\t };\n\t this.eventRemovers = {\n\t dom: [],\n\t connectivity: []\n\t };\n\t\n\t this._location = this._window.location;\n\t this._lastHref = this._location && this._location.href;\n\t}\n\t\n\tInstrumenter.prototype.configure = function(options) {\n\t var autoInstrument = options.autoInstrument;\n\t var oldSettings = _.extend(true, {}, this.autoInstrument);\n\t if (options.enabled === false || autoInstrument === false) {\n\t this.autoInstrument = {};\n\t } else {\n\t if (!_.isType(autoInstrument, 'object')) {\n\t autoInstrument = defaults;\n\t }\n\t this.autoInstrument = _.extend(true, {}, defaults, autoInstrument);\n\t }\n\t this.instrument(oldSettings);\n\t if (options.scrubTelemetryInputs !== undefined) {\n\t this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n\t }\n\t if (options.telemetryScrubber !== undefined) {\n\t this.telemetryScrubber = options.telemetryScrubber;\n\t }\n\t};\n\t\n\tInstrumenter.prototype.instrument = function(oldSettings) {\n\t if (this.autoInstrument.network && !(oldSettings && oldSettings.network)) {\n\t this.instrumentNetwork();\n\t } else if (!this.autoInstrument.network && oldSettings && oldSettings.network) {\n\t this.deinstrumentNetwork();\n\t }\n\t\n\t if (this.autoInstrument.log && !(oldSettings && oldSettings.log)) {\n\t this.instrumentConsole();\n\t } else if (!this.autoInstrument.log && oldSettings && oldSettings.log) {\n\t this.deinstrumentConsole();\n\t }\n\t\n\t if (this.autoInstrument.dom && !(oldSettings && oldSettings.dom)) {\n\t this.instrumentDom();\n\t } else if (!this.autoInstrument.dom && oldSettings && oldSettings.dom) {\n\t this.deinstrumentDom();\n\t }\n\t\n\t if (this.autoInstrument.navigation && !(oldSettings && oldSettings.navigation)) {\n\t this.instrumentNavigation();\n\t } else if (!this.autoInstrument.navigation && oldSettings && oldSettings.navigation) {\n\t this.deinstrumentNavigation();\n\t }\n\t\n\t if (this.autoInstrument.connectivity && !(oldSettings && oldSettings.connectivity)) {\n\t this.instrumentConnectivity();\n\t } else if (!this.autoInstrument.connectivity && oldSettings && oldSettings.connectivity) {\n\t this.deinstrumentConnectivity();\n\t }\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentNetwork = function() {\n\t restore(this.replacements, 'network');\n\t};\n\t\n\tInstrumenter.prototype.instrumentNetwork = function() {\n\t var self = this;\n\t\n\t function wrapProp(prop, xhr) {\n\t if (prop in xhr && _.isFunction(xhr[prop])) {\n\t replace(xhr, prop, function(orig) {\n\t return self.rollbar.wrap(orig);\n\t });\n\t }\n\t }\n\t\n\t if ('XMLHttpRequest' in this._window) {\n\t var xhrp = this._window.XMLHttpRequest.prototype;\n\t replace(xhrp, 'open', function(orig) {\n\t return function(method, url) {\n\t if (_.isType(url, 'string')) {\n\t this.__rollbar_xhr = {\n\t method: method,\n\t url: url,\n\t status_code: null,\n\t start_time_ms: _.now(),\n\t end_time_ms: null\n\t };\n\t }\n\t return orig.apply(this, arguments);\n\t };\n\t }, this.replacements, 'network');\n\t\n\t replace(xhrp, 'send', function(orig) {\n\t /* eslint-disable no-unused-vars */\n\t return function(data) {\n\t /* eslint-enable no-unused-vars */\n\t var xhr = this;\n\t\n\t function onreadystatechangeHandler() {\n\t if (xhr.__rollbar_xhr && (xhr.readyState === 1 || xhr.readyState === 4)) {\n\t if (xhr.__rollbar_xhr.status_code === null) {\n\t xhr.__rollbar_xhr.status_code = 0;\n\t var requestData = null;\n\t if (self.autoInstrument.networkRequestBody) {\n\t requestData = data;\n\t }\n\t xhr.__rollbar_event = self.telemeter.captureNetwork(xhr.__rollbar_xhr, 'xhr', undefined, requestData);\n\t }\n\t if (xhr.readyState === 1) {\n\t xhr.__rollbar_xhr.start_time_ms = _.now();\n\t } else {\n\t xhr.__rollbar_xhr.end_time_ms = _.now();\n\t\n\t var headers = null;\n\t if (self.autoInstrument.networkResponseHeaders) {\n\t var headersConfig = self.autoInstrument.networkResponseHeaders;\n\t headers = {};\n\t try {\n\t var header, i;\n\t if (headersConfig === true) {\n\t var allHeaders = xhr.getAllResponseHeaders();\n\t if (allHeaders) {\n\t var arr = allHeaders.trim().split(/[\\r\\n]+/);\n\t var parts, value;\n\t for (i=0; i < arr.length; i++) {\n\t parts = arr[i].split(': ');\n\t header = parts.shift();\n\t value = parts.join(': ');\n\t headers[header] = value;\n\t }\n\t }\n\t } else {\n\t for (i=0; i < headersConfig.length; i++) {\n\t header = headersConfig[i];\n\t headers[header] = xhr.getResponseHeader(header);\n\t }\n\t }\n\t } catch (e) {\n\t /* we ignore the errors here that could come from different\n\t * browser issues with the xhr methods */\n\t }\n\t }\n\t var body = null;\n\t if (self.autoInstrument.networkResponseBody) {\n\t try {\n\t body = xhr.responseText;\n\t } catch (e) {\n\t /* ignore errors from reading responseText */\n\t }\n\t }\n\t var response = null;\n\t if (body || headers) {\n\t response = {};\n\t if (body) {\n\t response.body = body;\n\t }\n\t if (headers) {\n\t response.headers = headers;\n\t }\n\t }\n\t if (response) {\n\t xhr.__rollbar_xhr.response = response;\n\t }\n\t }\n\t try {\n\t var code = xhr.status;\n\t code = code === 1223 ? 204 : code;\n\t xhr.__rollbar_xhr.status_code = code;\n\t xhr.__rollbar_event.level = self.telemeter.levelFromStatus(code);\n\t } catch (e) {\n\t /* ignore possible exception from xhr.status */\n\t }\n\t }\n\t }\n\t\n\t wrapProp('onload', xhr);\n\t wrapProp('onerror', xhr);\n\t wrapProp('onprogress', xhr);\n\t\n\t if ('onreadystatechange' in xhr && _.isFunction(xhr.onreadystatechange)) {\n\t replace(xhr, 'onreadystatechange', function(orig) {\n\t return self.rollbar.wrap(orig, undefined, onreadystatechangeHandler);\n\t });\n\t } else {\n\t xhr.onreadystatechange = onreadystatechangeHandler;\n\t }\n\t return orig.apply(this, arguments);\n\t }\n\t }, this.replacements, 'network');\n\t }\n\t\n\t if ('fetch' in this._window) {\n\t replace(this._window, 'fetch', function(orig) {\n\t /* eslint-disable no-unused-vars */\n\t return function(fn, t) {\n\t /* eslint-enable no-unused-vars */\n\t var args = new Array(arguments.length);\n\t for (var i=0, len=args.length; i < len; i++) {\n\t args[i] = arguments[i];\n\t }\n\t var input = args[0];\n\t var method = 'GET';\n\t var url;\n\t if (_.isType(input, 'string')) {\n\t url = input;\n\t } else if (input) {\n\t url = input.url;\n\t if (input.method) {\n\t method = input.method;\n\t }\n\t }\n\t if (args[1] && args[1].method) {\n\t method = args[1].method;\n\t }\n\t var metadata = {\n\t method: method,\n\t url: url,\n\t status_code: null,\n\t start_time_ms: _.now(),\n\t end_time_ms: null\n\t };\n\t var requestData = null;\n\t if (self.autoInstrument.networkRequestBody) {\n\t if (args[1] && args[1].body) {\n\t requestData = args[1].body;\n\t } else if (args[0] && !_.isType(args[0], 'string') && args[0].body) {\n\t requestData = args[0].body;\n\t }\n\t }\n\t self.telemeter.captureNetwork(metadata, 'fetch', undefined, requestData);\n\t return orig.apply(this, args).then(function (resp) {\n\t metadata.end_time_ms = _.now();\n\t metadata.status_code = resp.status;\n\t var headers = null;\n\t if (self.autoInstrument.networkResponseHeaders) {\n\t var headersConfig = self.autoInstrument.networkResponseHeaders;\n\t headers = {};\n\t try {\n\t if (headersConfig === true) {\n\t // This is unsupported in IE so we can't do it\n\t /*\n\t var allHeaders = resp.headers.entries();\n\t for (var pair of allHeaders) {\n\t headers[pair[0]] = pair[1];\n\t }\n\t */\n\t } else {\n\t for (var i=0; i < headersConfig.length; i++) {\n\t var header = headersConfig[i];\n\t headers[header] = resp.headers.get(header);\n\t }\n\t }\n\t } catch (e) {\n\t /* ignore probable IE errors */\n\t }\n\t }\n\t var response = null;\n\t if (headers) {\n\t response = {\n\t headers: headers\n\t };\n\t }\n\t if (response) {\n\t metadata.response = response;\n\t }\n\t return resp;\n\t });\n\t };\n\t }, this.replacements, 'network');\n\t }\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentConsole = function() {\n\t if (!('console' in this._window && this._window.console.log)) {\n\t return;\n\t }\n\t var b;\n\t while (this.replacements['log'].length) {\n\t b = this.replacements['log'].shift();\n\t this._window.console[b[0]] = b[1];\n\t }\n\t};\n\t\n\tInstrumenter.prototype.instrumentConsole = function() {\n\t if (!('console' in this._window && this._window.console.log)) {\n\t return;\n\t }\n\t\n\t var self = this;\n\t var c = this._window.console;\n\t\n\t function wrapConsole(method) {\n\t var orig = c[method];\n\t var origConsole = c;\n\t var level = method === 'warn' ? 'warning' : method;\n\t c[method] = function() {\n\t var args = Array.prototype.slice.call(arguments);\n\t var message = _.formatArgsAsString(args);\n\t self.telemeter.captureLog(message, level);\n\t if (orig) {\n\t Function.prototype.apply.call(orig, origConsole, args);\n\t }\n\t };\n\t self.replacements['log'].push([method, orig]);\n\t }\n\t var methods = ['debug','info','warn','error','log'];\n\t for (var i=0, len=methods.length; i < len; i++) {\n\t wrapConsole(methods[i]);\n\t }\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentDom = function() {\n\t if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n\t return;\n\t }\n\t this.removeListeners('dom');\n\t};\n\t\n\tInstrumenter.prototype.instrumentDom = function() {\n\t if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n\t return;\n\t }\n\t var clickHandler = this.handleClick.bind(this);\n\t var blurHandler = this.handleBlur.bind(this);\n\t this.addListener('dom', this._window, 'click', 'onclick', clickHandler, true);\n\t this.addListener('dom', this._window, 'blur', 'onfocusout', blurHandler, true);\n\t};\n\t\n\tInstrumenter.prototype.handleClick = function(evt) {\n\t try {\n\t var e = domUtil.getElementFromEvent(evt, this._document);\n\t var hasTag = e && e.tagName;\n\t var anchorOrButton = domUtil.isDescribedElement(e, 'a') || domUtil.isDescribedElement(e, 'button');\n\t if (hasTag && (anchorOrButton || domUtil.isDescribedElement(e, 'input', ['button', 'submit']))) {\n\t this.captureDomEvent('click', e);\n\t } else if (domUtil.isDescribedElement(e, 'input', ['checkbox', 'radio'])) {\n\t this.captureDomEvent('input', e, e.value, e.checked);\n\t }\n\t } catch (exc) {\n\t // TODO: Not sure what to do here\n\t }\n\t};\n\t\n\tInstrumenter.prototype.handleBlur = function(evt) {\n\t try {\n\t var e = domUtil.getElementFromEvent(evt, this._document);\n\t if (e && e.tagName) {\n\t if (domUtil.isDescribedElement(e, 'textarea')) {\n\t this.captureDomEvent('input', e, e.value);\n\t } else if (domUtil.isDescribedElement(e, 'select') && e.options && e.options.length) {\n\t this.handleSelectInputChanged(e);\n\t } else if (domUtil.isDescribedElement(e, 'input') && !domUtil.isDescribedElement(e, 'input', ['button', 'submit', 'hidden', 'checkbox', 'radio'])) {\n\t this.captureDomEvent('input', e, e.value);\n\t }\n\t }\n\t } catch (exc) {\n\t // TODO: Not sure what to do here\n\t }\n\t};\n\t\n\tInstrumenter.prototype.handleSelectInputChanged = function(elem) {\n\t if (elem.multiple) {\n\t for (var i = 0; i < elem.options.length; i++) {\n\t if (elem.options[i].selected) {\n\t this.captureDomEvent('input', elem, elem.options[i].value);\n\t }\n\t }\n\t } else if (elem.selectedIndex >= 0 && elem.options[elem.selectedIndex]) {\n\t this.captureDomEvent('input', elem, elem.options[elem.selectedIndex].value);\n\t }\n\t};\n\t\n\tInstrumenter.prototype.captureDomEvent = function(subtype, element, value, isChecked) {\n\t if (value !== undefined) {\n\t if (this.scrubTelemetryInputs || (domUtil.getElementType(element) === 'password')) {\n\t value = '[scrubbed]';\n\t } else if (this.telemetryScrubber) {\n\t var description = domUtil.describeElement(element);\n\t if (this.telemetryScrubber(description)) {\n\t value = '[scrubbed]';\n\t }\n\t }\n\t }\n\t var elementString = domUtil.elementArrayToString(domUtil.treeToArray(element));\n\t this.telemeter.captureDom(subtype, elementString, value, isChecked);\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentNavigation = function() {\n\t var chrome = this._window.chrome;\n\t var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n\t // See https://github.com/angular/angular.js/pull/13945/files\n\t var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n\t if (!hasPushState) {\n\t return;\n\t }\n\t restore(this.replacements, 'navigation');\n\t};\n\t\n\tInstrumenter.prototype.instrumentNavigation = function() {\n\t var chrome = this._window.chrome;\n\t var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n\t // See https://github.com/angular/angular.js/pull/13945/files\n\t var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n\t if (!hasPushState) {\n\t return;\n\t }\n\t var self = this;\n\t replace(this._window, 'onpopstate', function(orig) {\n\t return function() {\n\t var current = self._location.href;\n\t self.handleUrlChange(self._lastHref, current);\n\t if (orig) {\n\t orig.apply(this, arguments);\n\t }\n\t };\n\t }, this.replacements, 'navigation');\n\t\n\t replace(this._window.history, 'pushState', function(orig) {\n\t return function() {\n\t var url = arguments.length > 2 ? arguments[2] : undefined;\n\t if (url) {\n\t self.handleUrlChange(self._lastHref, url + '');\n\t }\n\t return orig.apply(this, arguments);\n\t };\n\t }, this.replacements, 'navigation');\n\t};\n\t\n\tInstrumenter.prototype.handleUrlChange = function(from, to) {\n\t var parsedHref = urlparser.parse(this._location.href);\n\t var parsedTo = urlparser.parse(to);\n\t var parsedFrom = urlparser.parse(from);\n\t this._lastHref = to;\n\t if (parsedHref.protocol === parsedTo.protocol && parsedHref.host === parsedTo.host) {\n\t to = parsedTo.path + (parsedTo.hash || '');\n\t }\n\t if (parsedHref.protocol === parsedFrom.protocol && parsedHref.host === parsedFrom.host) {\n\t from = parsedFrom.path + (parsedFrom.hash || '');\n\t }\n\t this.telemeter.captureNavigation(from, to);\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentConnectivity = function() {\n\t if (!('addEventListener' in this._window || 'body' in this._document)) {\n\t return;\n\t }\n\t if (this._window.addEventListener) {\n\t this.removeListeners('connectivity');\n\t } else {\n\t restore(this.replacements, 'connectivity');\n\t }\n\t};\n\t\n\tInstrumenter.prototype.instrumentConnectivity = function() {\n\t if (!('addEventListener' in this._window || 'body' in this._document)) {\n\t return;\n\t }\n\t if (this._window.addEventListener) {\n\t this.addListener('connectivity', this._window, 'online', undefined, function() {\n\t this.telemeter.captureConnectivityChange('online');\n\t }.bind(this), true);\n\t this.addListener('connectivity', this._window, 'offline', undefined, function() {\n\t this.telemeter.captureConnectivityChange('offline');\n\t }.bind(this), true);\n\t } else {\n\t var self = this;\n\t replace(this._document.body, 'ononline', function(orig) {\n\t return function() {\n\t self.telemeter.captureConnectivityChange('online');\n\t if (orig) {\n\t orig.apply(this, arguments);\n\t }\n\t }\n\t }, this.replacements, 'connectivity');\n\t replace(this._document.body, 'onoffline', function(orig) {\n\t return function() {\n\t self.telemeter.captureConnectivityChange('offline');\n\t if (orig) {\n\t orig.apply(this, arguments);\n\t }\n\t }\n\t }, this.replacements, 'connectivity');\n\t }\n\t};\n\t\n\tInstrumenter.prototype.addListener = function(section, obj, type, altType, handler, capture) {\n\t if (obj.addEventListener) {\n\t obj.addEventListener(type, handler, capture);\n\t this.eventRemovers[section].push(function() {\n\t obj.removeEventListener(type, handler, capture);\n\t });\n\t } else if (altType) {\n\t obj.attachEvent(altType, handler);\n\t this.eventRemovers[section].push(function() {\n\t obj.detachEvent(altType, handler);\n\t });\n\t }\n\t};\n\t\n\tInstrumenter.prototype.removeListeners = function(section) {\n\t var r;\n\t while (this.eventRemovers[section].length) {\n\t r = this.eventRemovers[section].shift();\n\t r();\n\t }\n\t};\n\t\n\tmodule.exports = Instrumenter;\n\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tfunction getElementType(e) {\n\t return (e.getAttribute('type') || '').toLowerCase();\n\t}\n\t\n\tfunction isDescribedElement(element, type, subtypes) {\n\t if (element.tagName.toLowerCase() !== type.toLowerCase()) {\n\t return false;\n\t }\n\t if (!subtypes) {\n\t return true;\n\t }\n\t element = getElementType(element);\n\t for (var i = 0; i < subtypes.length; i++) {\n\t if (subtypes[i] === element) {\n\t return true;\n\t }\n\t }\n\t return false;\n\t}\n\t\n\tfunction getElementFromEvent(evt, doc) {\n\t if (evt.target) {\n\t return evt.target;\n\t }\n\t if (doc && doc.elementFromPoint) {\n\t return doc.elementFromPoint(evt.clientX, evt.clientY);\n\t }\n\t return undefined;\n\t}\n\t\n\tfunction treeToArray(elem) {\n\t var MAX_HEIGHT = 5;\n\t var out = [];\n\t var nextDescription;\n\t for (var height = 0; elem && height < MAX_HEIGHT; height++) {\n\t nextDescription = describeElement(elem);\n\t if (nextDescription.tagName === 'html') {\n\t break;\n\t }\n\t out.unshift(nextDescription);\n\t elem = elem.parentNode;\n\t }\n\t return out;\n\t}\n\t\n\tfunction elementArrayToString(a) {\n\t var MAX_LENGTH = 80;\n\t var separator = ' > ', separatorLength = separator.length;\n\t var out = [], len = 0, nextStr, totalLength;\n\t\n\t for (var i = a.length - 1; i >= 0; i--) {\n\t nextStr = descriptionToString(a[i]);\n\t totalLength = len + (out.length * separatorLength) + nextStr.length;\n\t if (i < a.length - 1 && totalLength >= MAX_LENGTH + 3) {\n\t out.unshift('...');\n\t break;\n\t }\n\t out.unshift(nextStr);\n\t len += nextStr.length;\n\t }\n\t return out.join(separator);\n\t}\n\t\n\tfunction descriptionToString(desc) {\n\t if (!desc || !desc.tagName) {\n\t return '';\n\t }\n\t var out = [desc.tagName];\n\t if (desc.id) {\n\t out.push('#' + desc.id);\n\t }\n\t if (desc.classes) {\n\t out.push('.' + desc.classes.join('.'));\n\t }\n\t for (var i = 0; i < desc.attributes.length; i++) {\n\t out.push('[' + desc.attributes[i].key + '=\"' + desc.attributes[i].value + '\"]');\n\t }\n\t\n\t return out.join('');\n\t}\n\t\n\t/**\n\t * Input: a dom element\n\t * Output: null if tagName is falsey or input is falsey, else\n\t * {\n\t * tagName: String,\n\t * id: String | undefined,\n\t * classes: [String] | undefined,\n\t * attributes: [\n\t * {\n\t * key: OneOf(type, name, title, alt),\n\t * value: String\n\t * }\n\t * ]\n\t * }\n\t */\n\tfunction describeElement(elem) {\n\t if (!elem || !elem.tagName) {\n\t return null;\n\t }\n\t var out = {}, className, key, attr, i;\n\t out.tagName = elem.tagName.toLowerCase();\n\t if (elem.id) {\n\t out.id = elem.id;\n\t }\n\t className = elem.className;\n\t if (className && (typeof className === 'string')) {\n\t out.classes = className.split(/\\s+/);\n\t }\n\t var attributes = ['type', 'name', 'title', 'alt'];\n\t out.attributes = [];\n\t for (i = 0; i < attributes.length; i++) {\n\t key = attributes[i];\n\t attr = elem.getAttribute(key);\n\t if (attr) {\n\t out.attributes.push({key: key, value: attr});\n\t }\n\t }\n\t return out;\n\t}\n\t\n\tmodule.exports = {\n\t describeElement: describeElement,\n\t descriptionToString: descriptionToString,\n\t elementArrayToString: elementArrayToString,\n\t treeToArray: treeToArray,\n\t getElementFromEvent: getElementFromEvent,\n\t isDescribedElement: isDescribedElement,\n\t getElementType: getElementType\n\t};\n\n\n/***/ })\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// rollbar.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 993aca3a2713ef55ab6f","'use strict';\n\nvar rollbar = require('../rollbar');\n\nvar options = (typeof window !== 'undefined') && window._rollbarConfig;\nvar alias = options && options.globalAlias || 'Rollbar';\nvar shimRunning = (typeof window !== 'undefined') && window[alias] && typeof window[alias].shimId === 'function' && window[alias].shimId() !== undefined;\n\nif ((typeof window !== 'undefined') && !window._rollbarStartTime) {\n window._rollbarStartTime = (new Date()).getTime();\n}\n\nif (!shimRunning && options) {\n var Rollbar = new rollbar(options);\n window[alias] = Rollbar;\n} else if (typeof window !== 'undefined') {\n window.rollbar = rollbar;\n window._rollbarDidLoad = true;\n} else if (typeof self !== 'undefined') {\n self.rollbar = rollbar;\n self._rollbarDidLoad = true;\n}\n\nmodule.exports = rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/bundles/rollbar.js\n// module id = 0\n// module chunks = 0","'use strict';\n\nvar Client = require('../rollbar');\nvar _ = require('../utility');\nvar API = require('../api');\nvar logger = require('./logger');\nvar globals = require('./globalSetup');\n\nvar transport = require('./transport');\nvar urllib = require('./url');\n\nvar transforms = require('./transforms');\nvar sharedTransforms = require('../transforms');\nvar predicates = require('./predicates');\nvar sharedPredicates = require('../predicates');\nvar errorParser = require('./errorParser');\nvar Instrumenter = require('./telemetry');\n\nfunction Rollbar(options, client) {\n this.options = _.extend({}, defaultOptions, options);\n var api = new API(this.options, transport, urllib);\n this.client = client || new Client(this.options, api, logger, 'browser');\n\n var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n var gDocument = (typeof document != 'undefined') && document;\n addTransformsToNotifier(this.client.notifier);\n addPredicatesToQueue(this.client.queue);\n if (this.options.captureUncaught || this.options.handleUncaughtExceptions) {\n globals.captureUncaughtExceptions(gWindow, this);\n globals.wrapGlobals(gWindow, this);\n }\n if (this.options.captureUnhandledRejections || this.options.handleUnhandledRejections) {\n globals.captureUnhandledRejections(gWindow, this);\n }\n\n this.instrumenter = new Instrumenter(this.options, this.client.telemeter, this, gWindow, gDocument);\n this.instrumenter.instrument();\n}\n\nvar _instance = null;\nRollbar.init = function(options, client) {\n if (_instance) {\n return _instance.global(options).configure(options);\n }\n _instance = new Rollbar(options, client);\n return _instance;\n};\n\nfunction handleUninitialized(maybeCallback) {\n var message = 'Rollbar is not initialized';\n logger.error(message);\n if (maybeCallback) {\n maybeCallback(new Error(message));\n }\n}\n\nRollbar.prototype.global = function(options) {\n this.client.global(options);\n return this;\n};\nRollbar.global = function(options) {\n if (_instance) {\n return _instance.global(options);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.extend({}, oldOptions, options, payload);\n this.client.configure(options, payloadData);\n this.instrumenter.configure(options);\n return this;\n};\nRollbar.configure = function(options, payloadData) {\n if (_instance) {\n return _instance.configure(options, payloadData);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.lastError = function() {\n return this.client.lastError;\n};\nRollbar.lastError = function() {\n if (_instance) {\n return _instance.lastError();\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.log = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.log(item);\n return {uuid: uuid};\n};\nRollbar.log = function() {\n if (_instance) {\n return _instance.log.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.debug = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.debug(item);\n return {uuid: uuid};\n};\nRollbar.debug = function() {\n if (_instance) {\n return _instance.debug.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.info = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.info(item);\n return {uuid: uuid};\n};\nRollbar.info = function() {\n if (_instance) {\n return _instance.info.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warn = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warn(item);\n return {uuid: uuid};\n};\nRollbar.warn = function() {\n if (_instance) {\n return _instance.warn.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warning = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warning(item);\n return {uuid: uuid};\n};\nRollbar.warning = function() {\n if (_instance) {\n return _instance.warning.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.error = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.error(item);\n return {uuid: uuid};\n};\nRollbar.error = function() {\n if (_instance) {\n return _instance.error.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.critical = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.critical(item);\n return {uuid: uuid};\n};\nRollbar.critical = function() {\n if (_instance) {\n return _instance.critical.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.handleUncaughtException = function(message, url, lineno, colno, error, context) {\n var item;\n var stackInfo = _.makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n 'onerror',\n 'uncaught exception',\n errorParser\n );\n if (_.isError(error)) {\n item = this._createItem([message, error, context]);\n item._unhandledStackInfo = stackInfo;\n } else if (_.isError(url)) {\n item = this._createItem([message, url, context]);\n item._unhandledStackInfo = stackInfo;\n } else {\n item = this._createItem([message, context]);\n item.stackInfo = stackInfo;\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n this.client.log(item);\n};\n\nRollbar.prototype.handleUnhandledRejection = function(reason, promise) {\n var message = 'unhandled rejection was null or undefined!';\n message = reason ? (reason.message || String(reason)) : message;\n var context = (reason && reason._rollbarContext) || (promise && promise._rollbarContext);\n\n var item;\n if (_.isError(reason)) {\n item = this._createItem([message, reason, context]);\n } else {\n item = this._createItem([message, reason, context]);\n item.stackInfo = _.makeUnhandledStackInfo(\n message,\n '',\n 0,\n 0,\n null,\n 'unhandledrejection',\n '',\n errorParser\n );\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n item._originalArgs = item._originalArgs || [];\n item._originalArgs.push(promise);\n this.client.log(item);\n};\n\nRollbar.prototype.wrap = function(f, context, _before) {\n try {\n var ctxFn;\n if(_.isFunction(context)) {\n ctxFn = context;\n } else {\n ctxFn = function() { return context || {}; };\n }\n\n if (!_.isFunction(f)) {\n return f;\n }\n\n if (f._isWrap) {\n return f;\n }\n\n if (!f._rollbar_wrapped) {\n f._rollbar_wrapped = function () {\n if (_before && _.isFunction(_before)) {\n _before.apply(this, arguments);\n }\n try {\n return f.apply(this, arguments);\n } catch(exc) {\n var e = exc;\n if (e) {\n if (_.isType(e, 'string')) {\n e = new String(e);\n }\n e._rollbarContext = ctxFn() || {};\n e._rollbarContext._wrappedSource = f.toString();\n\n window._rollbarWrappedError = e;\n }\n throw e;\n }\n };\n\n f._rollbar_wrapped._isWrap = true;\n\n if (f.hasOwnProperty) {\n for (var prop in f) {\n if (f.hasOwnProperty(prop)) {\n f._rollbar_wrapped[prop] = f[prop];\n }\n }\n }\n }\n\n return f._rollbar_wrapped;\n } catch (e) {\n // Return the original function if the wrap fails.\n return f;\n }\n};\nRollbar.wrap = function(f, context) {\n if (_instance) {\n return _instance.wrap(f, context);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.captureEvent = function(metadata, level) {\n return this.client.captureEvent(metadata, level);\n};\nRollbar.captureEvent = function(metadata, level) {\n if (_instance) {\n return _instance.captureEvent(metadata, level);\n } else {\n handleUninitialized();\n }\n};\n\n// The following two methods are used internally and are not meant for public use\nRollbar.prototype.captureDomContentLoaded = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureLoad(ts);\n};\n\n/* Internal */\n\nfunction addTransformsToNotifier(notifier) {\n notifier\n .addTransform(transforms.handleItemWithError)\n .addTransform(transforms.ensureItemHasSomethingToSay)\n .addTransform(transforms.addBaseInfo)\n .addTransform(transforms.addRequestInfo(window))\n .addTransform(transforms.addClientInfo(window))\n .addTransform(transforms.addPluginInfo(window))\n .addTransform(transforms.addBody)\n .addTransform(sharedTransforms.addMessageWithError)\n .addTransform(sharedTransforms.addTelemetryData)\n .addTransform(sharedTransforms.addConfigToPayload)\n .addTransform(transforms.scrubPayload)\n .addTransform(sharedTransforms.userTransform(logger))\n .addTransform(sharedTransforms.itemToPayload);\n}\n\nfunction addPredicatesToQueue(queue) {\n queue\n .addPredicate(sharedPredicates.checkLevel)\n .addPredicate(predicates.checkIgnore)\n .addPredicate(sharedPredicates.userCheckIgnore(logger))\n .addPredicate(sharedPredicates.urlIsNotBlacklisted(logger))\n .addPredicate(sharedPredicates.urlIsWhitelisted(logger))\n .addPredicate(sharedPredicates.messageIsIgnored(logger));\n}\n\nRollbar.prototype._createItem = function(args) {\n return _.createItem(args, logger, this);\n};\n\nfunction _getFirstFunction(args) {\n for (var i = 0, len = args.length; i < len; ++i) {\n if (_.isFunction(args[i])) {\n return args[i];\n }\n }\n return undefined;\n}\n\n/* global __NOTIFIER_VERSION__:false */\n/* global __DEFAULT_BROWSER_SCRUB_FIELDS__:false */\n/* global __DEFAULT_LOG_LEVEL__:false */\n/* global __DEFAULT_REPORT_LEVEL__:false */\n/* global __DEFAULT_UNCAUGHT_ERROR_LEVEL:false */\n/* global __DEFAULT_ENDPOINT__:false */\n\nvar defaultOptions = {\n version: __NOTIFIER_VERSION__,\n scrubFields: __DEFAULT_BROWSER_SCRUB_FIELDS__,\n logLevel: __DEFAULT_LOG_LEVEL__,\n reportLevel: __DEFAULT_REPORT_LEVEL__,\n uncaughtErrorLevel: __DEFAULT_UNCAUGHT_ERROR_LEVEL,\n endpoint: __DEFAULT_ENDPOINT__,\n verbose: false,\n enabled: true,\n sendConfig: false,\n includeItemsInTelemetry: true,\n captureIp: true\n};\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/rollbar.js\n// module id = 1\n// module chunks = 0","'use strict';\n\nvar RateLimiter = require('./rateLimiter');\nvar Queue = require('./queue');\nvar Notifier = require('./notifier');\nvar Telemeter = require('./telemetry');\nvar _ = require('./utility');\n\n/*\n * Rollbar - the interface to Rollbar\n *\n * @param options\n * @param api\n * @param logger\n */\nfunction Rollbar(options, api, logger, platform) {\n this.options = _.extend(true, {}, options);\n this.logger = logger;\n Rollbar.rateLimiter.configureGlobal(this.options);\n Rollbar.rateLimiter.setPlatformOptions(platform, this.options);\n this.queue = new Queue(Rollbar.rateLimiter, api, logger, this.options);\n this.notifier = new Notifier(this.queue, this.options);\n this.telemeter = new Telemeter(this.options);\n this.lastError = null;\n}\n\nvar defaultOptions = {\n maxItems: 0,\n itemsPerMinute: 60\n};\n\nRollbar.rateLimiter = new RateLimiter(defaultOptions);\n\nRollbar.prototype.global = function(options) {\n Rollbar.rateLimiter.configureGlobal(options);\n return this;\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n this.notifier && this.notifier.configure(options);\n this.telemeter && this.telemeter.configure(options);\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.extend(true, {}, oldOptions, options, payload);\n this.global(this.options);\n return this;\n};\n\nRollbar.prototype.log = function(item) {\n var level = this._defaultLogLevel();\n return this._log(level, item);\n};\n\nRollbar.prototype.debug = function(item) {\n this._log('debug', item);\n};\n\nRollbar.prototype.info = function(item) {\n this._log('info', item);\n};\n\nRollbar.prototype.warn = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.warning = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.error = function(item) {\n this._log('error', item);\n};\n\nRollbar.prototype.critical = function(item) {\n this._log('critical', item);\n};\n\nRollbar.prototype.wait = function(callback) {\n this.queue.wait(callback);\n};\n\nRollbar.prototype.captureEvent = function(metadata, level) {\n return this.telemeter.captureEvent(metadata, level);\n};\n\nRollbar.prototype.captureDomContentLoaded = function(ts) {\n return this.telemeter.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(ts) {\n return this.telemeter.captureLoad(ts);\n};\n\n/* Internal */\n\nRollbar.prototype._log = function(defaultLevel, item) {\n if (this._sameAsLastError(item)) {\n if (item.callback) {\n item.callback();\n }\n return;\n }\n try {\n var callback = null;\n if (item.callback) {\n callback = item.callback;\n delete item.callback;\n }\n item.level = item.level || defaultLevel;\n this.telemeter._captureRollbarItem(item);\n item.telemetryEvents = this.telemeter.copyEvents();\n this.notifier.log(item, callback);\n } catch (e) {\n this.logger.error(e)\n }\n};\n\nRollbar.prototype._defaultLogLevel = function() {\n return this.options.logLevel || 'debug';\n};\n\nRollbar.prototype._sameAsLastError = function(item) {\n if (this.lastError && this.lastError === item.err) {\n return true;\n }\n this.lastError = item.err;\n return false;\n};\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rollbar.js\n// module id = 2\n// module chunks = 0","'use strict';\n\n/*\n * RateLimiter - an object that encapsulates the logic for counting items sent to Rollbar\n *\n * @param options - the same options that are accepted by configureGlobal offered as a convenience\n */\nfunction RateLimiter(options) {\n this.startTime = (new Date()).getTime();\n this.counter = 0;\n this.perMinCounter = 0;\n this.platform = null;\n this.platformOptions = {};\n this.configureGlobal(options);\n}\n\nRateLimiter.globalSettings = {\n startTime: (new Date()).getTime(),\n maxItems: undefined,\n itemsPerMinute: undefined\n};\n\n/*\n * configureGlobal - set the global rate limiter options\n *\n * @param options - Only the following values are recognized:\n * startTime: a timestamp of the form returned by (new Date()).getTime()\n * maxItems: the maximum items\n * itemsPerMinute: the max number of items to send in a given minute\n */\nRateLimiter.prototype.configureGlobal = function(options) {\n if (options.startTime !== undefined) {\n RateLimiter.globalSettings.startTime = options.startTime;\n }\n if (options.maxItems !== undefined) {\n RateLimiter.globalSettings.maxItems = options.maxItems;\n }\n if (options.itemsPerMinute !== undefined) {\n RateLimiter.globalSettings.itemsPerMinute = options.itemsPerMinute;\n }\n};\n\n/*\n * shouldSend - determine if we should send a given item based on rate limit settings\n *\n * @param item - the item we are about to send\n * @returns An object with the following structure:\n * error: (Error|null)\n * shouldSend: bool\n * payload: (Object|null)\n * If shouldSend is false, the item passed as a parameter should not be sent to Rollbar, and\n * exactly one of error or payload will be non-null. If error is non-null, the returned Error will\n * describe the situation, but it means that we were already over a rate limit (either globally or\n * per minute) when this item was checked. If error is null, and therefore payload is non-null, it\n * means this item put us over the global rate limit and the payload should be sent to Rollbar in\n * place of the passed in item.\n */\nRateLimiter.prototype.shouldSend = function(item, now) {\n now = now || (new Date()).getTime();\n if (now - this.startTime >= 60000) {\n this.startTime = now;\n this.perMinCounter = 0;\n }\n\n var globalRateLimit = RateLimiter.globalSettings.maxItems;\n var globalRateLimitPerMin = RateLimiter.globalSettings.itemsPerMinute;\n\n if (checkRate(item, globalRateLimit, this.counter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimit + ' max items reached', false);\n } else if (checkRate(item, globalRateLimitPerMin, this.perMinCounter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimitPerMin + ' items per minute reached', false);\n }\n this.counter++;\n this.perMinCounter++;\n\n var shouldSend = !checkRate(item, globalRateLimit, this.counter);\n var perMinute = shouldSend;\n shouldSend = shouldSend && !checkRate(item, globalRateLimitPerMin, this.perMinCounter);\n return shouldSendValue(this.platform, this.platformOptions, null, shouldSend, globalRateLimit, globalRateLimitPerMin, perMinute);\n};\n\nRateLimiter.prototype.setPlatformOptions = function(platform, options) {\n this.platform = platform;\n this.platformOptions = options;\n};\n\n/* Helpers */\n\nfunction checkRate(item, limit, counter) {\n return !item.ignoreRateLimit && limit >= 1 && counter > limit;\n}\n\nfunction shouldSendValue(platform, options, error, shouldSend, globalRateLimit, limitPerMin, perMinute) {\n var payload = null;\n if (error) {\n error = new Error(error);\n }\n if (!error && !shouldSend) {\n payload = rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute);\n }\n return {error: error, shouldSend: shouldSend, payload: payload};\n}\n\nfunction rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute) {\n var environment = options.environment || (options.payload && options.payload.environment);\n var msg;\n if (perMinute) {\n msg = 'item per minute limit reached, ignoring errors until timeout';\n } else {\n msg = 'maxItems has been hit, ignoring errors until reset.';\n }\n var item = {\n body: {\n message: {\n body: msg,\n extra: {\n maxItems: globalRateLimit,\n itemsPerMinute: limitPerMin\n }\n }\n },\n language: 'javascript',\n environment: environment,\n notifier: {\n version: (options.notifier && options.notifier.version) || options.version\n }\n };\n if (platform === 'browser') {\n item.platform = 'browser';\n item.framework = 'browser-js';\n item.notifier.name = 'rollbar-browser-js';\n } else if (platform === 'server') {\n item.framework = options.framework || 'node-js';\n item.notifier.name = options.notifier.name;\n } else if (platform === 'react-native') {\n item.framework = options.framework || 'react-native';\n item.notifier.name = options.notifier.name;\n }\n return item;\n}\n\nmodule.exports = RateLimiter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rateLimiter.js\n// module id = 3\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Queue - an object which handles which handles a queue of items to be sent to Rollbar.\n * This object handles rate limiting via a passed in rate limiter, retries based on connection\n * errors, and filtering of items based on a set of configurable predicates. The communication to\n * the backend is performed via a given API object.\n *\n * @param rateLimiter - An object which conforms to the interface\n * rateLimiter.shouldSend(item) -> bool\n * @param api - An object which conforms to the interface\n * api.postItem(payload, function(err, response))\n * @param logger - An object used to log verbose messages if desired\n * @param options - see Queue.prototype.configure\n */\nfunction Queue(rateLimiter, api, logger, options) {\n this.rateLimiter = rateLimiter;\n this.api = api;\n this.logger = logger;\n this.options = options;\n this.predicates = [];\n this.pendingItems = [];\n this.pendingRequests = [];\n this.retryQueue = [];\n this.retryHandle = null;\n this.waitCallback = null;\n this.waitIntervalID = null;\n}\n\n/*\n * configure - updates the options this queue uses\n *\n * @param options\n */\nQueue.prototype.configure = function(options) {\n this.api && this.api.configure(options);\n var oldOptions = this.options;\n this.options = _.extend(true, {}, oldOptions, options);\n return this;\n};\n\n/*\n * addPredicate - adds a predicate to the end of the list of predicates for this queue\n *\n * @param predicate - function(item, options) -> (bool|{err: Error})\n * Returning true means that this predicate passes and the item is okay to go on the queue\n * Returning false means do not add the item to the queue, but it is not an error\n * Returning {err: Error} means do not add the item to the queue, and the given error explains why\n * Returning {err: undefined} is equivalent to returning true but don't do that\n */\nQueue.prototype.addPredicate = function(predicate) {\n if (_.isFunction(predicate)) {\n this.predicates.push(predicate);\n }\n return this;\n};\n\nQueue.prototype.addPendingItem = function(item) {\n this.pendingItems.push(item);\n};\n\nQueue.prototype.removePendingItem = function(item) {\n var idx = this.pendingItems.indexOf(item);\n if (idx !== -1) {\n this.pendingItems.splice(idx, 1);\n }\n};\n\n/*\n * addItem - Send an item to the Rollbar API if all of the predicates are satisfied\n *\n * @param item - The payload to send to the backend\n * @param callback - function(error, repsonse) which will be called with the response from the API\n * in the case of a success, otherwise response will be null and error will have a value. If both\n * error and response are null then the item was stopped by a predicate which did not consider this\n * to be an error condition, but nonetheless did not send the item to the API.\n * @param originalError - The original error before any transformations that is to be logged if any\n */\nQueue.prototype.addItem = function(item, callback, originalError, originalItem) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() { return; };\n }\n var predicateResult = this._applyPredicates(item);\n if (predicateResult.stop) {\n this.removePendingItem(originalItem);\n callback(predicateResult.err);\n return;\n }\n this._maybeLog(item, originalError);\n this.removePendingItem(originalItem);\n this.pendingRequests.push(item);\n try {\n this._makeApiRequest(item, function(err, resp) {\n this._dequeuePendingRequest(item);\n callback(err, resp);\n }.bind(this));\n } catch (e) {\n this._dequeuePendingRequest(item);\n callback(e);\n }\n};\n\n/*\n * wait - Stop any further errors from being added to the queue, and get called back when all items\n * currently processing have finished sending to the backend.\n *\n * @param callback - function() called when all pending items have been sent\n */\nQueue.prototype.wait = function(callback) {\n if (!_.isFunction(callback)) {\n return;\n }\n this.waitCallback = callback;\n if (this._maybeCallWait()) {\n return;\n }\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitIntervalID = setInterval(function() {\n this._maybeCallWait();\n }.bind(this), 500);\n};\n\n/* _applyPredicates - Sequentially applies the predicates that have been added to the queue to the\n * given item with the currently configured options.\n *\n * @param item - An item in the queue\n * @returns {stop: bool, err: (Error|null)} - stop being true means do not add item to the queue,\n * the error value should be passed up to a callbak if we are stopping.\n */\nQueue.prototype._applyPredicates = function(item) {\n var p = null;\n for (var i = 0, len = this.predicates.length; i < len; i++) {\n p = this.predicates[i](item, this.options);\n if (!p || p.err !== undefined) {\n return {stop: true, err: p.err};\n }\n }\n return {stop: false, err: null};\n};\n\n/*\n * _makeApiRequest - Send an item to Rollbar, callback when done, if there is an error make an\n * effort to retry if we are configured to do so.\n *\n * @param item - an item ready to send to the backend\n * @param callback - function(err, response)\n */\nQueue.prototype._makeApiRequest = function(item, callback) {\n var rateLimitResponse = this.rateLimiter.shouldSend(item);\n if (rateLimitResponse.shouldSend) {\n this.api.postItem(item, function(err, resp) {\n if (err) {\n this._maybeRetry(err, item, callback);\n } else {\n callback(err, resp);\n }\n }.bind(this));\n } else if (rateLimitResponse.error) {\n callback(rateLimitResponse.error);\n } else {\n this.api.postItem(rateLimitResponse.payload, callback);\n }\n};\n\n// These are errors basically mean there is no internet connection\nvar RETRIABLE_ERRORS = ['ECONNRESET', 'ENOTFOUND', 'ESOCKETTIMEDOUT', 'ETIMEDOUT', 'ECONNREFUSED', 'EHOSTUNREACH', 'EPIPE', 'EAI_AGAIN'];\n\n/*\n * _maybeRetry - Given the error returned by the API, decide if we should retry or just callback\n * with the error.\n *\n * @param err - an error returned by the API transport\n * @param item - the item that was trying to be sent when this error occured\n * @param callback - function(err, response)\n */\nQueue.prototype._maybeRetry = function(err, item, callback) {\n var shouldRetry = false;\n if (this.options.retryInterval) {\n for (var i = 0, len = RETRIABLE_ERRORS.length; i < len; i++) {\n if (err.code === RETRIABLE_ERRORS[i]) {\n shouldRetry = true;\n break;\n }\n }\n }\n if (shouldRetry) {\n this._retryApiRequest(item, callback);\n } else {\n callback(err);\n }\n};\n\n/*\n * _retryApiRequest - Add an item and a callback to a queue and possibly start a timer to process\n * that queue based on the retryInterval in the options for this queue.\n *\n * @param item - an item that failed to send due to an error we deem retriable\n * @param callback - function(err, response)\n */\nQueue.prototype._retryApiRequest = function(item, callback) {\n this.retryQueue.push({item: item, callback: callback});\n\n if (!this.retryHandle) {\n this.retryHandle = setInterval(function() {\n while (this.retryQueue.length) {\n var retryObject = this.retryQueue.shift();\n this._makeApiRequest(retryObject.item, retryObject.callback);\n }\n }.bind(this), this.options.retryInterval);\n }\n};\n\n/*\n * _dequeuePendingRequest - Removes the item from the pending request queue, this queue is used to\n * enable to functionality of providing a callback that clients can pass to `wait` to be notified\n * when the pending request queue has been emptied. This must be called when the API finishes\n * processing this item. If a `wait` callback is configured, it is called by this function.\n *\n * @param item - the item previously added to the pending request queue\n */\nQueue.prototype._dequeuePendingRequest = function(item) {\n var idx = this.pendingRequests.indexOf(item);\n if (idx !== -1) {\n this.pendingRequests.splice(idx, 1);\n this._maybeCallWait();\n }\n};\n\nQueue.prototype._maybeLog = function(data, originalError) {\n if (this.logger && this.options.verbose) {\n var message = originalError;\n message = message || _.get(data, 'body.trace.exception.message');\n message = message || _.get(data, 'body.trace_chain.0.exception.message');\n if (message) {\n this.logger.error(message);\n return;\n }\n message = _.get(data, 'body.message.body');\n if (message) {\n this.logger.log(message);\n }\n }\n};\n\nQueue.prototype._maybeCallWait = function() {\n if (_.isFunction(this.waitCallback) && this.pendingItems.length === 0 && this.pendingRequests.length === 0) {\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitCallback();\n return true;\n }\n return false;\n};\n\nmodule.exports = Queue;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/queue.js\n// module id = 4\n// module chunks = 0","'use strict';\n\nvar extend = require('extend');\n\nvar RollbarJSON = {};\nvar __initRollbarJSON = false;\nfunction setupJSON() {\n if (__initRollbarJSON) {\n return;\n }\n __initRollbarJSON = true;\n\n if (isDefined(JSON)) {\n if (isNativeFunction(JSON.stringify)) {\n RollbarJSON.stringify = JSON.stringify;\n }\n if (isNativeFunction(JSON.parse)) {\n RollbarJSON.parse = JSON.parse;\n }\n }\n if (!isFunction(RollbarJSON.stringify) || !isFunction(RollbarJSON.parse)) {\n var setupCustomJSON = require('../vendor/JSON-js/json3.js');\n setupCustomJSON(RollbarJSON);\n }\n}\nsetupJSON();\n\n/*\n * isType - Given a Javascript value and a string, returns true if the type of the value matches the\n * given string.\n *\n * @param x - any value\n * @param t - a lowercase string containing one of the following type names:\n * - undefined\n * - null\n * - error\n * - number\n * - boolean\n * - string\n * - symbol\n * - function\n * - object\n * - array\n * @returns true if x is of type t, otherwise false\n */\nfunction isType(x, t) {\n return t === typeName(x);\n}\n\n/*\n * typeName - Given a Javascript value, returns the type of the object as a string\n */\nfunction typeName(x) {\n var name = typeof x;\n if (name !== 'object') {\n return name;\n }\n if (!x) {\n return 'null';\n }\n if (x instanceof Error) {\n return 'error';\n }\n return ({}).toString.call(x).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n}\n\n/* isFunction - a convenience function for checking if a value is a function\n *\n * @param f - any value\n * @returns true if f is a function, otherwise false\n */\nfunction isFunction(f) {\n return isType(f, 'function');\n}\n\n/* isNativeFunction - a convenience function for checking if a value is a native JS function\n *\n * @param f - any value\n * @returns true if f is a native JS function, otherwise false\n */\nfunction isNativeFunction(f) {\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n var funcMatchString = Function.prototype.toString.call(Object.prototype.hasOwnProperty)\n .replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?');\n var reIsNative = RegExp('^' + funcMatchString + '$');\n return isObject(f) && reIsNative.test(f);\n}\n\n/* isObject - Checks if the argument is an object\n *\n * @param value - any value\n * @returns true is value is an object function is an object)\n*/\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/*\n * isDefined - a convenience function for checking if a value is not equal to undefined\n *\n * @param u - any value\n * @returns true if u is anything other than undefined\n */\nfunction isDefined(u) {\n return !isType(u, 'undefined');\n}\n\n/*\n * isIterable - convenience function for checking if a value can be iterated, essentially\n * whether it is an object or an array.\n *\n * @param i - any value\n * @returns true if i is an object or an array as determined by `typeName`\n */\nfunction isIterable(i) {\n var type = typeName(i);\n return (type === 'object' || type === 'array');\n}\n\n/*\n * isError - convenience function for checking if a value is of an error type\n *\n * @param e - any value\n * @returns true if e is an error\n */\nfunction isError(e) {\n return isType(e, 'error');\n}\n\nfunction traverse(obj, func, seen) {\n var k, v, i;\n var isObj = isType(obj, 'object');\n var isArray = isType(obj, 'array');\n var keys = [];\n\n if (isObj && seen.indexOf(obj) !== -1) {\n return obj;\n }\n seen.push(obj);\n\n if (isObj) {\n for (k in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, k)) {\n keys.push(k);\n }\n }\n } else if (isArray) {\n for (i = 0; i < obj.length; ++i) {\n keys.push(i);\n }\n }\n\n var result = isObj ? {} : [];\n for (i = 0; i < keys.length; ++i) {\n k = keys[i];\n v = obj[k];\n result[k] = func(k, v, seen);\n }\n\n return (keys.length != 0) ? result : obj;\n}\n\nfunction redact() {\n return '********';\n}\n\n// from http://stackoverflow.com/a/8809472/1138191\nfunction uuid4() {\n var d = now();\n var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (d + Math.random() * 16) % 16 | 0;\n d = Math.floor(d / 16);\n return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16);\n });\n return uuid;\n}\n\nvar LEVELS = {\n debug: 0,\n info: 1,\n warning: 2,\n error: 3,\n critical: 4\n};\n\nfunction sanitizeUrl(url) {\n var baseUrlParts = parseUri(url);\n // remove a trailing # if there is no anchor\n if (baseUrlParts.anchor === '') {\n baseUrlParts.source = baseUrlParts.source.replace('#', '');\n }\n\n url = baseUrlParts.source.replace('?' + baseUrlParts.query, '');\n return url;\n}\n\nvar parseUriOptions = {\n strictMode: false,\n key: [\n 'source',\n 'protocol',\n 'authority',\n 'userInfo',\n 'user',\n 'password',\n 'host',\n 'port',\n 'relative',\n 'path',\n 'directory',\n 'file',\n 'query',\n 'anchor'\n ],\n q: {\n name: 'queryKey',\n parser: /(?:^|&)([^&=]*)=?([^&]*)/g\n },\n parser: {\n strict: /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,\n loose: /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/\n }\n};\n\nfunction parseUri(str) {\n if (!isType(str, 'string')) {\n throw new Error('received invalid input');\n }\n\n var o = parseUriOptions;\n var m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str);\n var uri = {};\n var i = o.key.length;\n\n while (i--) {\n uri[o.key[i]] = m[i] || '';\n }\n\n uri[o.q.name] = {};\n uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {\n if ($1) {\n uri[o.q.name][$1] = $2;\n }\n });\n\n return uri;\n}\n\nfunction addParamsAndAccessTokenToPath(accessToken, options, params) {\n params = params || {};\n params.access_token = accessToken;\n var paramsArray = [];\n var k;\n for (k in params) {\n if (Object.prototype.hasOwnProperty.call(params, k)) {\n paramsArray.push([k, params[k]].join('='));\n }\n }\n var query = '?' + paramsArray.sort().join('&');\n\n options = options || {};\n options.path = options.path || '';\n var qs = options.path.indexOf('?');\n var h = options.path.indexOf('#');\n var p;\n if (qs !== -1 && (h === -1 || h > qs)) {\n p = options.path;\n options.path = p.substring(0,qs) + query + '&' + p.substring(qs+1);\n } else {\n if (h !== -1) {\n p = options.path;\n options.path = p.substring(0,h) + query + p.substring(h);\n } else {\n options.path = options.path + query;\n }\n }\n}\n\nfunction formatUrl(u, protocol) {\n protocol = protocol || u.protocol;\n if (!protocol && u.port) {\n if (u.port === 80) {\n protocol = 'http:';\n } else if (u.port === 443) {\n protocol = 'https:';\n }\n }\n protocol = protocol || 'https:';\n\n if (!u.hostname) {\n return null;\n }\n var result = protocol + '//' + u.hostname;\n if (u.port) {\n result = result + ':' + u.port;\n }\n if (u.path) {\n result = result + u.path;\n }\n return result;\n}\n\nfunction stringify(obj, backup) {\n var value, error;\n try {\n value = RollbarJSON.stringify(obj);\n } catch (jsonError) {\n if (backup && isFunction(backup)) {\n try {\n value = backup(obj);\n } catch (backupError) {\n error = backupError;\n }\n } else {\n error = jsonError;\n }\n }\n return {error: error, value: value};\n}\n\nfunction jsonParse(s) {\n var value, error;\n try {\n value = RollbarJSON.parse(s);\n } catch (e) {\n error = e;\n }\n return {error: error, value: value};\n}\n\nfunction makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n mode,\n backupMessage,\n errorParser\n) {\n var location = {\n url: url || '',\n line: lineno,\n column: colno\n };\n location.func = errorParser.guessFunctionName(location.url, location.line);\n location.context = errorParser.gatherContext(location.url, location.line);\n var href = document && document.location && document.location.href;\n var useragent = window && window.navigator && window.navigator.userAgent;\n return {\n 'mode': mode,\n 'message': error ? String(error) : (message || backupMessage),\n 'url': href,\n 'stack': [location],\n 'useragent': useragent\n };\n}\n\nfunction wrapCallback(logger, f) {\n return function(err, resp) {\n try {\n f(err, resp);\n } catch (e) {\n logger.error(e);\n }\n };\n}\n\nfunction createItem(args, logger, notifier, requestKeys, lambdaContext) {\n var message, err, custom, callback, request;\n var arg;\n var extraArgs = [];\n\n for (var i = 0, l = args.length; i < l; ++i) {\n arg = args[i];\n\n var typ = typeName(arg);\n switch (typ) {\n case 'undefined':\n break;\n case 'string':\n message ? extraArgs.push(arg) : message = arg;\n break;\n case 'function':\n callback = wrapCallback(logger, arg);\n break;\n case 'date':\n extraArgs.push(arg);\n break;\n case 'error':\n case 'domexception':\n err ? extraArgs.push(arg) : err = arg;\n break;\n case 'object':\n case 'array':\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n if (requestKeys && typ === 'object' && !request) {\n for (var j = 0, len = requestKeys.length; j < len; ++j) {\n if (arg[requestKeys[j]] !== undefined) {\n request = arg;\n break;\n }\n }\n if (request) {\n break;\n }\n }\n custom ? extraArgs.push(arg) : custom = arg;\n break;\n default:\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n extraArgs.push(arg);\n }\n }\n\n if (extraArgs.length > 0) {\n // if custom is an array this turns it into an object with integer keys\n custom = extend(true, {}, custom);\n custom.extraArgs = extraArgs;\n }\n\n var item = {\n message: message,\n err: err,\n custom: custom,\n timestamp: now(),\n callback: callback,\n uuid: uuid4()\n };\n if (custom && custom.level !== undefined) {\n item.level = custom.level;\n delete custom.level;\n }\n if (requestKeys && request) {\n item.request = request;\n }\n if (lambdaContext) {\n item.lambdaContext = lambdaContext;\n }\n item._originalArgs = args;\n return item;\n}\n\n/*\n * get - given an obj/array and a keypath, return the value at that keypath or\n * undefined if not possible.\n *\n * @param obj - an object or array\n * @param path - a string of keys separated by '.' such as 'plugin.jquery.0.message'\n * which would correspond to 42 in `{plugin: {jquery: [{message: 42}]}}`\n */\nfunction get(obj, path) {\n if (!obj) {\n return undefined;\n }\n var keys = path.split('.');\n var result = obj;\n try {\n for (var i = 0, len = keys.length; i < len; ++i) {\n result = result[keys[i]];\n }\n } catch (e) {\n result = undefined;\n }\n return result;\n}\n\nfunction set(obj, path, value) {\n if (!obj) {\n return;\n }\n var keys = path.split('.');\n var len = keys.length;\n if (len < 1) {\n return;\n }\n if (len === 1) {\n obj[keys[0]] = value;\n return;\n }\n try {\n var temp = obj[keys[0]] || {};\n var replacement = temp;\n for (var i = 1; i < len-1; i++) {\n temp[keys[i]] = temp[keys[i]] || {};\n temp = temp[keys[i]];\n }\n temp[keys[len-1]] = value;\n obj[keys[0]] = replacement;\n } catch (e) {\n return;\n }\n}\n\nfunction scrub(data, scrubFields) {\n scrubFields = scrubFields || [];\n var paramRes = _getScrubFieldRegexs(scrubFields);\n var queryRes = _getScrubQueryParamRegexs(scrubFields);\n\n function redactQueryParam(dummy0, paramPart, dummy1, dummy2, dummy3, valPart) {\n return paramPart + redact(valPart);\n }\n\n function paramScrubber(v) {\n var i;\n if (isType(v, 'string')) {\n for (i = 0; i < queryRes.length; ++i) {\n v = v.replace(queryRes[i], redactQueryParam);\n }\n }\n return v;\n }\n\n function valScrubber(k, v) {\n var i;\n for (i = 0; i < paramRes.length; ++i) {\n if (paramRes[i].test(k)) {\n v = redact(v);\n break;\n }\n }\n return v;\n }\n\n function scrubber(k, v, seen) {\n var tmpV = valScrubber(k, v);\n if (tmpV === v) {\n if (isType(v, 'object') || isType(v, 'array')) {\n return traverse(v, scrubber, seen);\n }\n return paramScrubber(tmpV);\n } else {\n return tmpV;\n }\n }\n\n return traverse(data, scrubber, []);\n}\n\nfunction _getScrubFieldRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '^\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?$';\n ret.push(new RegExp(pat, 'i'));\n }\n return ret;\n}\n\n\nfunction _getScrubQueryParamRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?';\n ret.push(new RegExp('(' + pat + '=)([^&\\\\n]+)', 'igm'));\n }\n return ret;\n}\n\nfunction formatArgsAsString(args) {\n var i, len, arg;\n var result = [];\n for (i = 0, len = args.length; i < len; i++) {\n arg = args[i];\n if (typeof arg === 'object') {\n arg = stringify(arg);\n arg = arg.error || arg.value;\n if (arg.length > 500)\n arg = arg.substr(0,500)+'...';\n } else if (typeof arg === 'undefined') {\n arg = 'undefined';\n }\n result.push(arg);\n }\n return result.join(' ');\n}\n\nfunction now() {\n if (Date.now) {\n return +Date.now();\n }\n return +new Date();\n}\n\nfunction filterIp(requestData, captureIp) {\n if (!requestData || !requestData['user_ip'] || captureIp === true) {\n return;\n }\n var newIp = requestData['user_ip'];\n if (!captureIp) {\n newIp = null;\n } else {\n try {\n var parts;\n if (newIp.indexOf('.') !== -1) {\n parts = newIp.split('.');\n parts.pop();\n parts.push('0');\n newIp = parts.join('.');\n } else if (newIp.indexOf(':') !== -1) {\n parts = newIp.split(':');\n if (parts.length > 2) {\n var beginning = parts.slice(0, 3);\n var slashIdx = beginning[2].indexOf('/');\n if (slashIdx !== -1) {\n beginning[2] = beginning[2].substring(0, slashIdx);\n }\n var terminal = '0000:0000:0000:0000:0000';\n newIp = beginning.concat(terminal).join(':');\n }\n } else {\n newIp = null;\n }\n } catch (e) {\n newIp = null;\n }\n }\n requestData['user_ip'] = newIp;\n}\n\nmodule.exports = {\n isType: isType,\n typeName: typeName,\n isFunction: isFunction,\n isNativeFunction: isNativeFunction,\n isIterable: isIterable,\n isError: isError,\n extend: extend,\n traverse: traverse,\n redact: redact,\n uuid4: uuid4,\n LEVELS: LEVELS,\n sanitizeUrl: sanitizeUrl,\n addParamsAndAccessTokenToPath: addParamsAndAccessTokenToPath,\n formatUrl: formatUrl,\n stringify: stringify,\n jsonParse: jsonParse,\n makeUnhandledStackInfo: makeUnhandledStackInfo,\n createItem: createItem,\n get: get,\n set: set,\n scrub: scrub,\n formatArgsAsString: formatArgsAsString,\n now: now,\n filterIp: filterIp\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/utility.js\n// module id = 5\n// module chunks = 0","'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) {/**/}\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[0],\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t} else if ((typeof target !== 'object' && typeof target !== 'function') || target == null) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = target[name];\n\t\t\t\tcopy = options[name];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\ttarget[name] = extend(deep, clone, copy);\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/extend/index.js\n// module id = 6\n// module chunks = 0","// json3.js\n// 2017-02-21\n// Public Domain.\n// NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n// See http://www.JSON.org/js.html\n// This code should be minified before deployment.\n// See http://javascript.crockford.com/jsmin.html\n\n// USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n// NOT CONTROL.\n\n// This file creates a global JSON object containing two methods: stringify\n// and parse. This file provides the ES5 JSON capability to ES3 systems.\n// If a project might run on IE8 or earlier, then this file should be included.\n// This file does nothing on ES5 systems.\n\n// JSON.stringify(value, replacer, space)\n// value any JavaScript value, usually an object or array.\n// replacer an optional parameter that determines how object\n// values are stringified for objects. It can be a\n// function or an array of strings.\n// space an optional parameter that specifies the indentation\n// of nested structures. If it is omitted, the text will\n// be packed without extra whitespace. If it is a number,\n// it will specify the number of spaces to indent at each\n// level. If it is a string (such as \"\\t\" or \" \"),\n// it contains the characters used to indent at each level.\n// This method produces a JSON text from a JavaScript value.\n// When an object value is found, if the object contains a toJSON\n// method, its toJSON method will be called and the result will be\n// stringified. A toJSON method does not serialize: it returns the\n// value represented by the name/value pair that should be serialized,\n// or undefined if nothing should be serialized. The toJSON method\n// will be passed the key associated with the value, and this will be\n// bound to the value.\n\n// For example, this would serialize Dates as ISO strings.\n\n// Date.prototype.toJSON = function (key) {\n// function f(n) {\n// // Format integers to have at least two digits.\n// return (n < 10)\n// ? \"0\" + n\n// : n;\n// }\n// return this.getUTCFullYear() + \"-\" +\n// f(this.getUTCMonth() + 1) + \"-\" +\n// f(this.getUTCDate()) + \"T\" +\n// f(this.getUTCHours()) + \":\" +\n// f(this.getUTCMinutes()) + \":\" +\n// f(this.getUTCSeconds()) + \"Z\";\n// };\n\n// You can provide an optional replacer method. It will be passed the\n// key and value of each member, with this bound to the containing\n// object. The value that is returned from your method will be\n// serialized. If your method returns undefined, then the member will\n// be excluded from the serialization.\n\n// If the replacer parameter is an array of strings, then it will be\n// used to select the members to be serialized. It filters the results\n// such that only members with keys listed in the replacer array are\n// stringified.\n\n// Values that do not have JSON representations, such as undefined or\n// functions, will not be serialized. Such values in objects will be\n// dropped; in arrays they will be replaced with null. You can use\n// a replacer function to replace those with JSON values.\n\n// JSON.stringify(undefined) returns undefined.\n\n// The optional space parameter produces a stringification of the\n// value that is filled with line breaks and indentation to make it\n// easier to read.\n\n// If the space parameter is a non-empty string, then that string will\n// be used for indentation. If the space parameter is a number, then\n// the indentation will be that many spaces.\n\n// Example:\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}]);\n// // text is '[\"e\",{\"pluribus\":\"unum\"}]'\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}], null, \"\\t\");\n// // text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\n\n// text = JSON.stringify([new Date()], function (key, value) {\n// return this[key] instanceof Date\n// ? \"Date(\" + this[key] + \")\"\n// : value;\n// });\n// // text is '[\"Date(---current time---)\"]'\n\n// JSON.parse(text, reviver)\n// This method parses a JSON text to produce an object or array.\n// It can throw a SyntaxError exception.\n// This has been modified to use JSON-js/json_parse_state.js as the\n// parser instead of the one built around eval found in JSON-js/json2.js\n\n// The optional reviver parameter is a function that can filter and\n// transform the results. It receives each of the keys and values,\n// and its return value is used instead of the original value.\n// If it returns what it received, then the structure is not modified.\n// If it returns undefined then the member is deleted.\n\n// Example:\n\n// // Parse the text. Values that look like ISO date strings will\n// // be converted to Date objects.\n\n// myData = JSON.parse(text, function (key, value) {\n// var a;\n// if (typeof value === \"string\") {\n// a =\n// /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n// if (a) {\n// return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n// +a[5], +a[6]));\n// }\n// }\n// return value;\n// });\n\n// myData = JSON.parse('[\"Date(09/09/2001)\"]', function (key, value) {\n// var d;\n// if (typeof value === \"string\" &&\n// value.slice(0, 5) === \"Date(\" &&\n// value.slice(-1) === \")\") {\n// d = new Date(value.slice(5, -1));\n// if (d) {\n// return d;\n// }\n// }\n// return value;\n// });\n\n// This is a reference implementation. You are free to copy, modify, or\n// redistribute.\n\n/*jslint\n for, this\n */\n\n/*property\n JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\n getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\n lastIndex, length, parse, prototype, push, replace, slice, stringify,\n test, toJSON, toString, valueOf\n */\n\nvar setupCustomJSON = function(JSON) {\n\n var rx_one = /^[\\],:{}\\s]*$/;\n var rx_two = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g;\n var rx_three = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\n var rx_four = /(?:^|:|,)(?:\\s*\\[)+/g;\n var rx_escapable = /[\\\\\"\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n var rx_dangerous = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\n function f(n) {\n // Format integers to have at least two digits.\n return n < 10\n ? \"0\" + n\n : n;\n }\n\n function this_value() {\n return this.valueOf();\n }\n\n if (typeof Date.prototype.toJSON !== \"function\") {\n\n Date.prototype.toJSON = function () {\n\n return isFinite(this.valueOf())\n ? this.getUTCFullYear() + \"-\" +\n f(this.getUTCMonth() + 1) + \"-\" +\n f(this.getUTCDate()) + \"T\" +\n f(this.getUTCHours()) + \":\" +\n f(this.getUTCMinutes()) + \":\" +\n f(this.getUTCSeconds()) + \"Z\"\n : null;\n };\n\n Boolean.prototype.toJSON = this_value;\n Number.prototype.toJSON = this_value;\n String.prototype.toJSON = this_value;\n }\n\n var gap;\n var indent;\n var meta;\n var rep;\n\n\n function quote(string) {\n\n // If the string contains no control characters, no quote characters, and no\n // backslash characters, then we can safely slap some quotes around it.\n // Otherwise we must also replace the offending characters with safe escape\n // sequences.\n\n rx_escapable.lastIndex = 0;\n return rx_escapable.test(string)\n ? \"\\\"\" + string.replace(rx_escapable, function (a) {\n var c = meta[a];\n return typeof c === \"string\"\n ? c\n : \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n }) + \"\\\"\"\n : \"\\\"\" + string + \"\\\"\";\n }\n\n\n function str(key, holder) {\n\n // Produce a string from holder[key].\n\n var i; // The loop counter.\n var k; // The member key.\n var v; // The member value.\n var length;\n var mind = gap;\n var partial;\n var value = holder[key];\n\n // If the value has a toJSON method, call it to obtain a replacement value.\n\n if (value && typeof value === \"object\" &&\n typeof value.toJSON === \"function\") {\n value = value.toJSON(key);\n }\n\n // If we were called with a replacer function, then call the replacer to\n // obtain a replacement value.\n\n if (typeof rep === \"function\") {\n value = rep.call(holder, key, value);\n }\n\n // What happens next depends on the value's type.\n\n switch (typeof value) {\n case \"string\":\n return quote(value);\n\n case \"number\":\n\n // JSON numbers must be finite. Encode non-finite numbers as null.\n\n return isFinite(value)\n ? String(value)\n : \"null\";\n\n case \"boolean\":\n case \"null\":\n\n // If the value is a boolean or null, convert it to a string. Note:\n // typeof null does not produce \"null\". The case is included here in\n // the remote chance that this gets fixed someday.\n\n return String(value);\n\n // If the type is \"object\", we might be dealing with an object or an array or\n // null.\n\n case \"object\":\n\n // Due to a specification blunder in ECMAScript, typeof null is \"object\",\n // so watch out for that case.\n\n if (!value) {\n return \"null\";\n }\n\n // Make an array to hold the partial results of stringifying this object value.\n\n gap += indent;\n partial = [];\n\n // Is the value an array?\n\n if (Object.prototype.toString.apply(value) === \"[object Array]\") {\n\n // The value is an array. Stringify every element. Use null as a placeholder\n // for non-JSON values.\n\n length = value.length;\n for (i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || \"null\";\n }\n\n // Join all of the elements together, separated with commas, and wrap them in\n // brackets.\n\n v = partial.length === 0\n ? \"[]\"\n : gap\n ? \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\"\n : \"[\" + partial.join(\",\") + \"]\";\n gap = mind;\n return v;\n }\n\n // If the replacer is an array, use it to select the members to be stringified.\n\n if (rep && typeof rep === \"object\") {\n length = rep.length;\n for (i = 0; i < length; i += 1) {\n if (typeof rep[i] === \"string\") {\n k = rep[i];\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n } else {\n\n // Otherwise, iterate through all of the keys in the object.\n\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n }\n\n // Join all of the member texts together, separated with commas,\n // and wrap them in braces.\n\n v = partial.length === 0\n ? \"{}\"\n : gap\n ? \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\"\n : \"{\" + partial.join(\",\") + \"}\";\n gap = mind;\n return v;\n }\n }\n\n // If the JSON object does not yet have a stringify method, give it one.\n\n if (typeof JSON.stringify !== \"function\") {\n meta = { // table of character substitutions\n \"\\b\": \"\\\\b\",\n \"\\t\": \"\\\\t\",\n \"\\n\": \"\\\\n\",\n \"\\f\": \"\\\\f\",\n \"\\r\": \"\\\\r\",\n \"\\\"\": \"\\\\\\\"\",\n \"\\\\\": \"\\\\\\\\\"\n };\n JSON.stringify = function (value, replacer, space) {\n\n // The stringify method takes a value and an optional replacer, and an optional\n // space parameter, and returns a JSON text. The replacer can be a function\n // that can replace values, or an array of strings that will select the keys.\n // A default replacer method can be provided. Use of the space parameter can\n // produce text that is more easily readable.\n\n var i;\n gap = \"\";\n indent = \"\";\n\n // If the space parameter is a number, make an indent string containing that\n // many spaces.\n\n if (typeof space === \"number\") {\n for (i = 0; i < space; i += 1) {\n indent += \" \";\n }\n\n // If the space parameter is a string, it will be used as the indent string.\n\n } else if (typeof space === \"string\") {\n indent = space;\n }\n\n // If there is a replacer, it must be a function or an array.\n // Otherwise, throw an error.\n\n rep = replacer;\n if (replacer && typeof replacer !== \"function\" &&\n (typeof replacer !== \"object\" ||\n typeof replacer.length !== \"number\")) {\n throw new Error(\"JSON.stringify\");\n }\n\n // Make a fake root object containing our value under the key of \"\".\n // Return the result of stringifying the value.\n\n return str(\"\", {\"\": value});\n };\n }\n\n\n // If the JSON object does not yet have a parse method, give it one.\n\n if (typeof JSON.parse !== \"function\") {\n JSON.parse = (function () {\n\n // This function creates a JSON parse function that uses a state machine rather\n // than the dangerous eval function to parse a JSON text.\n\n var state; // The state of the parser, one of\n // 'go' The starting state\n // 'ok' The final, accepting state\n // 'firstokey' Ready for the first key of the object or\n // the closing of an empty object\n // 'okey' Ready for the next key of the object\n // 'colon' Ready for the colon\n // 'ovalue' Ready for the value half of a key/value pair\n // 'ocomma' Ready for a comma or closing }\n // 'firstavalue' Ready for the first value of an array or\n // an empty array\n // 'avalue' Ready for the next value of an array\n // 'acomma' Ready for a comma or closing ]\n var stack; // The stack, for controlling nesting.\n var container; // The current container object or array\n var key; // The current key\n var value; // The current value\n var escapes = { // Escapement translation table\n \"\\\\\": \"\\\\\",\n \"\\\"\": \"\\\"\",\n \"/\": \"/\",\n \"t\": \"\\t\",\n \"n\": \"\\n\",\n \"r\": \"\\r\",\n \"f\": \"\\f\",\n \"b\": \"\\b\"\n };\n var string = { // The actions for string tokens\n go: function () {\n state = \"ok\";\n },\n firstokey: function () {\n key = value;\n state = \"colon\";\n },\n okey: function () {\n key = value;\n state = \"colon\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var number = { // The actions for number tokens\n go: function () {\n state = \"ok\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var action = {\n\n // The action table describes the behavior of the machine. It contains an\n // object for each token. Each object contains a method that is called when\n // a token is matched in a state. An object will lack a method for illegal\n // states.\n\n \"{\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = {};\n state = \"firstokey\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = {};\n state = \"firstokey\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n }\n },\n \"}\": {\n firstokey: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n ocomma: function () {\n var pop = stack.pop();\n container[key] = value;\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \"[\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = [];\n state = \"firstavalue\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = [];\n state = \"firstavalue\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n }\n },\n \"]\": {\n firstavalue: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n acomma: function () {\n var pop = stack.pop();\n container.push(value);\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \":\": {\n colon: function () {\n if (Object.hasOwnProperty.call(container, key)) {\n throw new SyntaxError(\"Duplicate key '\" + key + \"\\\"\");\n }\n state = \"ovalue\";\n }\n },\n \",\": {\n ocomma: function () {\n container[key] = value;\n state = \"okey\";\n },\n acomma: function () {\n container.push(value);\n state = \"avalue\";\n }\n },\n \"true\": {\n go: function () {\n value = true;\n state = \"ok\";\n },\n ovalue: function () {\n value = true;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = true;\n state = \"acomma\";\n },\n avalue: function () {\n value = true;\n state = \"acomma\";\n }\n },\n \"false\": {\n go: function () {\n value = false;\n state = \"ok\";\n },\n ovalue: function () {\n value = false;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = false;\n state = \"acomma\";\n },\n avalue: function () {\n value = false;\n state = \"acomma\";\n }\n },\n \"null\": {\n go: function () {\n value = null;\n state = \"ok\";\n },\n ovalue: function () {\n value = null;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = null;\n state = \"acomma\";\n },\n avalue: function () {\n value = null;\n state = \"acomma\";\n }\n }\n };\n\n function debackslashify(text) {\n\n // Remove and replace any backslash escapement.\n\n return text.replace(/\\\\(?:u(.{4})|([^u]))/g, function (ignore, b, c) {\n return b\n ? String.fromCharCode(parseInt(b, 16))\n : escapes[c];\n });\n }\n\n return function (source, reviver) {\n\n // A regular expression is used to extract tokens from the JSON text.\n // The extraction process is cautious.\n\n var result;\n var tx = /^[\\u0020\\t\\n\\r]*(?:([,:\\[\\]{}]|true|false|null)|(-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)|\"((?:[^\\r\\n\\t\\\\\\\"]|\\\\(?:[\"\\\\\\/trnfb]|u[0-9a-fA-F]{4}))*)\")/;\n\n // Set the starting state.\n\n state = \"go\";\n\n // The stack records the container, key, and state for each object or array\n // that contains another object or array while processing nested structures.\n\n stack = [];\n\n // If any error occurs, we will catch it and ultimately throw a syntax error.\n\n try {\n\n // For each token...\n\n while (true) {\n result = tx.exec(source);\n if (!result) {\n break;\n }\n\n // result is the result array from matching the tokenizing regular expression.\n // result[0] contains everything that matched, including any initial whitespace.\n // result[1] contains any punctuation that was matched, or true, false, or null.\n // result[2] contains a matched number, still in string form.\n // result[3] contains a matched string, without quotes but with escapement.\n\n if (result[1]) {\n\n // Token: Execute the action for this state and token.\n\n action[result[1]][state]();\n\n } else if (result[2]) {\n\n // Number token: Convert the number string into a number value and execute\n // the action for this state and number.\n\n value = +result[2];\n number[state]();\n } else {\n\n // String token: Replace the escapement sequences and execute the action for\n // this state and string.\n\n value = debackslashify(result[3]);\n string[state]();\n }\n\n // Remove the token from the string. The loop will continue as long as there\n // are tokens. This is a slow process, but it allows the use of ^ matching,\n // which assures that no illegal tokens slip through.\n\n source = source.slice(result[0].length);\n }\n\n // If we find a state/token combination that is illegal, then the action will\n // cause an error. We handle the error by simply changing the state.\n\n } catch (e) {\n state = e;\n }\n\n // The parsing is finished. If we are not in the final \"ok\" state, or if the\n // remaining source contains anything except whitespace, then we did not have\n //a well-formed JSON text.\n\n if (state !== \"ok\" || (/[^\\u0020\\t\\n\\r]/.test(source))) {\n throw (state instanceof SyntaxError)\n ? state\n : new SyntaxError(\"JSON\");\n }\n\n // If there is a reviver function, we recursively walk the new structure,\n // passing each name/value pair to the reviver function for possible\n // transformation, starting with a temporary root object that holds the current\n // value in an empty key. If there is not a reviver function, we simply return\n // that value.\n\n return (typeof reviver === \"function\")\n ? (function walk(holder, key) {\n var k;\n var v;\n var val = holder[key];\n if (val && typeof val === \"object\") {\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(val, k)) {\n v = walk(val, k);\n if (v !== undefined) {\n val[k] = v;\n } else {\n delete val[k];\n }\n }\n }\n }\n return reviver.call(holder, key, val);\n }({\"\": value}, \"\"))\n : value;\n };\n }());\n }\n}\n\nmodule.exports = setupCustomJSON;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./vendor/JSON-js/json3.js\n// module id = 7\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Notifier - the internal object responsible for delegating between the client exposed API, the\n * chain of transforms necessary to turn an item into something that can be sent to Rollbar, and the\n * queue which handles the communcation with the Rollbar API servers.\n *\n * @param queue - an object that conforms to the interface: addItem(item, callback)\n * @param options - an object representing the options to be set for this notifier, this should have\n * any defaults already set by the caller\n */\nfunction Notifier(queue, options) {\n this.queue = queue;\n this.options = options;\n this.transforms = [];\n}\n\n/*\n * configure - updates the options for this notifier with the passed in object\n *\n * @param options - an object which gets merged with the current options set on this notifier\n * @returns this\n */\nNotifier.prototype.configure = function(options) {\n this.queue && this.queue.configure(options);\n var oldOptions = this.options;\n this.options = _.extend({}, oldOptions, options);\n return this;\n};\n\n/*\n * addTransform - adds a transform onto the end of the queue of transforms for this notifier\n *\n * @param transform - a function which takes three arguments:\n * * item: An Object representing the data to eventually be sent to Rollbar\n * * options: The current value of the options for this notifier\n * * callback: function(err: (Null|Error), item: (Null|Object)) the transform must call this\n * callback with a null value for error if it wants the processing chain to continue, otherwise\n * with an error to terminate the processing. The item should be the updated item after this\n * transform is finished modifying it.\n */\nNotifier.prototype.addTransform = function(transform) {\n if (_.isFunction(transform)) {\n this.transforms.push(transform);\n }\n return this;\n};\n\n/*\n * log - the internal log function which applies the configured transforms and then pushes onto the\n * queue to be sent to the backend.\n *\n * @param item - An object with the following structure:\n * message [String] - An optional string to be sent to rollbar\n * error [Error] - An optional error\n *\n * @param callback - A function of type function(err, resp) which will be called with exactly one\n * null argument and one non-null argument. The callback will be called once, either during the\n * transform stage if an error occurs inside a transform, or in response to the communication with\n * the backend. The second argument will be the response from the backend in case of success.\n */\nNotifier.prototype.log = function(item, callback) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!this.options.enabled) {\n return callback(new Error('Rollbar is not enabled'));\n }\n\n this.queue.addPendingItem(item);\n var originalError = item.err;\n this._applyTransforms(item, function(err, i) {\n if (err) {\n this.queue.removePendingItem(item);\n return callback(err, null);\n }\n this.queue.addItem(i, callback, originalError, item);\n }.bind(this));\n};\n\n/* Internal */\n\n/*\n * _applyTransforms - Applies the transforms that have been added to this notifier sequentially. See\n * `addTransform` for more information.\n *\n * @param item - An item to be transformed\n * @param callback - A function of type function(err, item) which will be called with a non-null\n * error and a null item in the case of a transform failure, or a null error and non-null item after\n * all transforms have been applied.\n */\nNotifier.prototype._applyTransforms = function(item, callback) {\n var transformIndex = -1;\n var transformsLength = this.transforms.length;\n var transforms = this.transforms;\n var options = this.options;\n\n var cb = function(err, i) {\n if (err) {\n callback(err, null);\n return;\n }\n\n transformIndex++;\n\n if (transformIndex === transformsLength) {\n callback(null, i);\n return;\n }\n\n transforms[transformIndex](i, options, cb);\n };\n\n cb(null, item);\n};\n\nmodule.exports = Notifier;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/notifier.js\n// module id = 8\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nvar MAX_EVENTS = 100;\n\nfunction Telemeter(options) {\n this.queue = [];\n this.options = _.extend(true, {}, options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n this.maxQueueSize = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n}\n\nTelemeter.prototype.configure = function(options) {\n var oldOptions = this.options;\n this.options = _.extend(true, {}, oldOptions, options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n var newMaxEvents = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n var deleteCount = 0;\n if (this.maxQueueSize > newMaxEvents) {\n deleteCount = this.maxQueueSize - newMaxEvents;\n }\n this.maxQueueSize = newMaxEvents;\n this.queue.splice(0, deleteCount);\n};\n\nTelemeter.prototype.copyEvents = function() {\n return Array.prototype.slice.call(this.queue, 0);\n};\n\nTelemeter.prototype.capture = function(type, metadata, level, rollbarUUID, timestamp) {\n var e = {\n level: getLevel(type, level),\n type: type,\n timestamp_ms: timestamp || _.now(),\n body: metadata,\n source: 'client'\n };\n if (rollbarUUID) {\n e.uuid = rollbarUUID;\n }\n\n try {\n if (_.isFunction(this.options.filterTelemetry) && this.options.filterTelemetry(e)) {\n return false;\n }\n } catch (e) {\n this.options.filterTelemetry = null;\n }\n\n this.push(e);\n return e;\n};\n\nTelemeter.prototype.captureEvent = function(metadata, level, rollbarUUID) {\n return this.capture('manual', metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.captureError = function(err, level, rollbarUUID, timestamp) {\n var metadata = {\n message: err.message || String(err)\n };\n if (err.stack) {\n metadata.stack = err.stack;\n }\n return this.capture('error', metadata, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureLog = function(message, level, rollbarUUID, timestamp) {\n return this.capture('log', {\n message: message\n }, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureNetwork = function(metadata, subtype, rollbarUUID, requestData) {\n subtype = subtype || 'xhr';\n metadata.subtype = metadata.subtype || subtype;\n if (requestData) {\n metadata.request = requestData;\n }\n var level = this.levelFromStatus(metadata.status_code);\n return this.capture('network', metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.levelFromStatus = function(statusCode) {\n if (statusCode >= 200 && statusCode < 400) {\n return 'info';\n }\n if (statusCode === 0 || statusCode >= 400) {\n return 'error';\n }\n return 'info';\n};\n\nTelemeter.prototype.captureDom = function(subtype, element, value, checked, rollbarUUID) {\n var metadata = {\n subtype: subtype,\n element: element\n };\n if (value !== undefined) {\n metadata.value = value;\n }\n if (checked !== undefined) {\n metadata.checked = checked;\n }\n return this.capture('dom', metadata, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureNavigation = function(from, to, rollbarUUID) {\n return this.capture('navigation', {from: from, to: to}, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureDomContentLoaded = function(ts) {\n return this.capture('navigation', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n */\n};\nTelemeter.prototype.captureLoad = function(ts) {\n return this.capture('navigation', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n */\n};\n\nTelemeter.prototype.captureConnectivityChange = function(type, rollbarUUID) {\n return this.captureNetwork({change: type}, 'connectivity', rollbarUUID);\n};\n\n// Only intended to be used internally by the notifier\nTelemeter.prototype._captureRollbarItem = function(item) {\n if (!this.options.includeItemsInTelemetry) {\n return;\n }\n if (item.err) {\n return this.captureError(item.err, item.level, item.uuid, item.timestamp);\n }\n if (item.message) {\n return this.captureLog(item.message, item.level, item.uuid, item.timestamp);\n }\n if (item.custom) {\n return this.capture('log', item.custom, item.level, item.uuid, item.timestamp);\n }\n};\n\nTelemeter.prototype.push = function(e) {\n this.queue.push(e);\n if (this.queue.length > this.maxQueueSize) {\n this.queue.shift();\n }\n};\n\nfunction getLevel(type, level) {\n if (level) {\n return level;\n }\n var defaultLevel = {\n error: 'error',\n manual: 'info'\n };\n return defaultLevel[type] || 'info';\n}\n\nmodule.exports = Telemeter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/telemetry.js\n// module id = 9\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\nvar helpers = require('./apiUtility');\n\nvar defaultOptions = {\n hostname: 'api.rollbar.com',\n path: '/api/1/item/',\n search: null,\n version: '1',\n protocol: 'https:',\n port: 443\n};\n\n/**\n * Api is an object that encapsulates methods of communicating with\n * the Rollbar API. It is a standard interface with some parts implemented\n * differently for server or browser contexts. It is an object that should\n * be instantiated when used so it can contain non-global options that may\n * be different for another instance of RollbarApi.\n *\n * @param options {\n * accessToken: the accessToken to use for posting items to rollbar\n * endpoint: an alternative endpoint to send errors to\n * must be a valid, fully qualified URL.\n * The default is: https://api.rollbar.com/api/1/item\n * proxy: if you wish to proxy requests provide an object\n * with the following keys:\n * host or hostname (required): foo.example.com\n * port (optional): 123\n * protocol (optional): https\n * }\n */\nfunction Api(options, t, u, j) {\n this.options = options;\n this.transport = t;\n this.url = u;\n this.jsonBackup = j;\n this.accessToken = options.accessToken;\n this.transportOptions = _getTransport(options, u);\n}\n\n/**\n *\n * @param data\n * @param callback\n */\nApi.prototype.postItem = function(data, callback) {\n var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n this.transport.post(this.accessToken, transportOptions, payload, callback);\n};\n\nApi.prototype.configure = function(options) {\n var oldOptions = this.oldOptions;\n this.options = _.extend(true, {}, oldOptions, options);\n this.transportOptions = _getTransport(this.options, this.url);\n if (this.options.accessToken !== undefined) {\n this.accessToken = this.options.accessToken;\n }\n return this;\n};\n\nfunction _getTransport(options, url) {\n return helpers.getTransportFromOptions(options, defaultOptions, url);\n}\n\nmodule.exports = Api;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/api.js\n// module id = 10\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction buildPayload(accessToken, data, jsonBackup) {\n if (!_.isType(data.context, 'string')) {\n var contextResult = _.stringify(data.context, jsonBackup);\n if (contextResult.error) {\n data.context = 'Error: could not serialize \\'context\\'';\n } else {\n data.context = contextResult.value || '';\n }\n if (data.context.length > 255) {\n data.context = data.context.substr(0, 255);\n }\n }\n return {\n access_token: accessToken,\n data: data\n };\n}\n\nfunction getTransportFromOptions(options, defaults, url) {\n var hostname = defaults.hostname;\n var protocol = defaults.protocol;\n var port = defaults.port;\n var path = defaults.path;\n var search = defaults.search;\n\n var proxy = options.proxy;\n if (options.endpoint) {\n var opts = url.parse(options.endpoint);\n hostname = opts.hostname;\n protocol = opts.protocol;\n port = opts.port;\n path = opts.pathname;\n search = opts.search;\n }\n return {\n hostname: hostname,\n protocol: protocol,\n port: port,\n path: path,\n search: search,\n proxy: proxy\n };\n}\n\nfunction transportOptions(transport, method) {\n var protocol = transport.protocol || 'https:';\n var port = transport.port || (protocol === 'http:' ? 80 : protocol === 'https:' ? 443 : undefined);\n var hostname = transport.hostname;\n var path = transport.path;\n if (transport.search) {\n path = path + transport.search;\n }\n if (transport.proxy) {\n path = protocol + '//' + hostname + path;\n hostname = transport.proxy.host || transport.proxy.hostname;\n port = transport.proxy.port;\n protocol = transport.proxy.protocol || protocol;\n }\n return {\n protocol: protocol,\n hostname: hostname,\n path: path,\n port: port,\n method: method\n };\n}\n\nfunction appendPathToPath(base, path) {\n var baseTrailingSlash = /\\/$/.test(base);\n var pathBeginningSlash = /^\\//.test(path);\n\n if (baseTrailingSlash && pathBeginningSlash) {\n path = path.substring(1);\n } else if (!baseTrailingSlash && !pathBeginningSlash) {\n path = '/' + path;\n }\n\n return base + path;\n}\n\nmodule.exports = {\n buildPayload: buildPayload,\n getTransportFromOptions: getTransportFromOptions,\n transportOptions: transportOptions,\n appendPathToPath: appendPathToPath\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/apiUtility.js\n// module id = 11\n// module chunks = 0","'use strict';\n\n/* eslint-disable no-console */\nrequire('console-polyfill');\nvar detection = require('./detection');\nvar _ = require('../utility');\n\nfunction error() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.error(_.formatArgsAsString(args));\n } else {\n console.error.apply(console, args);\n }\n}\n\nfunction info() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.info(_.formatArgsAsString(args));\n } else {\n console.info.apply(console, args);\n }\n}\n\nfunction log() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.log(_.formatArgsAsString(args));\n } else {\n console.log.apply(console, args);\n }\n}\n\n/* eslint-enable no-console */\n\nmodule.exports = {\n error: error,\n info: info,\n log: log\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/logger.js\n// module id = 12\n// module chunks = 0","// Console-polyfill. MIT license.\n// https://github.com/paulmillr/console-polyfill\n// Make it safe to do console.log() always.\n(function(global) {\n 'use strict';\n if (!global.console) {\n global.console = {};\n }\n var con = global.console;\n var prop, method;\n var dummy = function() {};\n var properties = ['memory'];\n var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' +\n 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' +\n 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',');\n while (prop = properties.pop()) if (!con[prop]) con[prop] = {};\n while (method = methods.pop()) if (!con[method]) con[method] = dummy;\n // Using `this` for web workers & supports Browserify / Webpack.\n})(typeof window === 'undefined' ? this : window);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/console-polyfill/index.js\n// module id = 13\n// module chunks = 0","'use strict';\n\n// This detection.js module is used to encapsulate any ugly browser/feature\n// detection we may need to do.\n\n// Figure out which version of IE we're using, if any.\n// This is gleaned from http://stackoverflow.com/questions/5574842/best-way-to-check-for-ie-less-than-9-in-javascript-without-library\n// Will return an integer on IE (i.e. 8)\n// Will return undefined otherwise\nfunction getIEVersion() {\n\tvar undef;\n\tif (!document) {\n\t\treturn undef;\n\t}\n\n var v = 3,\n div = document.createElement('div'),\n all = div.getElementsByTagName('i');\n\n while (\n div.innerHTML = '',\n all[0]\n );\n\n return v > 4 ? v : undef;\n}\n\nvar Detection = {\n ieVersion: getIEVersion\n};\n\nmodule.exports = Detection;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/detection.js\n// module id = 14\n// module chunks = 0","'use strict';\n\nfunction captureUncaughtExceptions(window, handler, shim) {\n if (!window) { return; }\n var oldOnError;\n\n if (typeof handler._rollbarOldOnError === 'function') {\n oldOnError = handler._rollbarOldOnError;\n } else if (window.onerror && !window.onerror.belongsToShim) {\n oldOnError = window.onerror;\n handler._rollbarOldOnError = oldOnError;\n }\n\n var fn = function() {\n var args = Array.prototype.slice.call(arguments, 0);\n _rollbarWindowOnError(window, handler, oldOnError, args);\n };\n fn.belongsToShim = shim;\n window.onerror = fn;\n}\n\nfunction _rollbarWindowOnError(window, r, old, args) {\n if (window._rollbarWrappedError) {\n if (!args[4]) {\n args[4] = window._rollbarWrappedError;\n }\n if (!args[5]) {\n args[5] = window._rollbarWrappedError._rollbarContext;\n }\n window._rollbarWrappedError = null;\n }\n\n r.handleUncaughtException.apply(r, args);\n if (old) {\n old.apply(window, args);\n }\n}\n\nfunction captureUnhandledRejections(window, handler, shim) {\n if (!window) { return; }\n\n if (typeof window._rollbarURH === 'function' && window._rollbarURH.belongsToShim) {\n window.removeEventListener('unhandledrejection', window._rollbarURH);\n }\n\n var rejectionHandler = function (evt) {\n var reason, promise, detail;\n try {\n reason = evt.reason;\n } catch (e) {\n reason = undefined;\n }\n try {\n promise = evt.promise;\n } catch (e) {\n promise = '[unhandledrejection] error getting `promise` from event';\n }\n try {\n detail = evt.detail;\n if (!reason && detail) {\n reason = detail.reason;\n promise = detail.promise;\n }\n } catch (e) {\n detail = '[unhandledrejection] error getting `detail` from event';\n }\n if (!reason) {\n reason = '[unhandledrejection] error getting `reason` from event';\n }\n\n if (handler && handler.handleUnhandledRejection) {\n handler.handleUnhandledRejection(reason, promise);\n }\n };\n rejectionHandler.belongsToShim = shim;\n window._rollbarURH = rejectionHandler;\n window.addEventListener('unhandledrejection', rejectionHandler);\n}\n\nfunction wrapGlobals(window, handler, shim) {\n if (!window) { return; }\n // Adapted from https://github.com/bugsnag/bugsnag-js\n var globals = 'EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload'.split(',');\n var i, global;\n for (i = 0; i < globals.length; ++i) {\n global = globals[i];\n\n if (window[global] && window[global].prototype) {\n _extendListenerPrototype(handler, window[global].prototype, shim);\n }\n }\n}\n\nfunction _extendListenerPrototype(handler, prototype, shim) {\n if (prototype.hasOwnProperty && prototype.hasOwnProperty('addEventListener')) {\n var oldAddEventListener = prototype.addEventListener;\n while (oldAddEventListener._rollbarOldAdd && oldAddEventListener.belongsToShim) {\n oldAddEventListener = oldAddEventListener._rollbarOldAdd;\n }\n var addFn = function(event, callback, bubble) {\n oldAddEventListener.call(this, event, handler.wrap(callback), bubble);\n };\n addFn._rollbarOldAdd = oldAddEventListener;\n addFn.belongsToShim = shim;\n prototype.addEventListener = addFn;\n\n var oldRemoveEventListener = prototype.removeEventListener;\n while (oldRemoveEventListener._rollbarOldRemove && oldRemoveEventListener.belongsToShim) {\n oldRemoveEventListener = oldRemoveEventListener._rollbarOldRemove;\n }\n var removeFn = function(event, callback, bubble) {\n oldRemoveEventListener.call(this, event, callback && callback._rollbar_wrapped || callback, bubble);\n };\n removeFn._rollbarOldRemove = oldRemoveEventListener;\n removeFn.belongsToShim = shim;\n prototype.removeEventListener = removeFn;\n }\n}\n\nmodule.exports = {\n captureUncaughtExceptions: captureUncaughtExceptions,\n captureUnhandledRejections: captureUnhandledRejections,\n wrapGlobals: wrapGlobals\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/globalSetup.js\n// module id = 15\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar logger = require('./logger');\n\n/*\n * accessToken may be embedded in payload but that should not\n * be assumed\n *\n * options: {\n * hostname\n * protocol\n * path\n * port\n * method\n * }\n *\n * params is an object containing key/value pairs. These\n * will be appended to the path as 'key=value&key=value'\n *\n * payload is an unserialized object\n */\n\nfunction get(accessToken, options, params, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n _.addParamsAndAccessTokenToPath(accessToken, options, params);\n\n var method = 'GET';\n var url = _.formatUrl(options);\n _makeRequest(accessToken, url, method, null, callback, requestFactory);\n}\n\nfunction post(accessToken, options, payload, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!payload) {\n return callback(new Error('Cannot send empty request'));\n }\n\n var stringifyResult = _.stringify(payload);\n if (stringifyResult.error) {\n return callback(stringifyResult.error);\n }\n\n var writeData = stringifyResult.value;\n var method = 'POST';\n var url = _.formatUrl(options);\n _makeRequest(accessToken, url, method, writeData, callback, requestFactory);\n}\n\nfunction _makeRequest(accessToken, url, method, data, callback, requestFactory) {\n var request;\n if (requestFactory) {\n request = requestFactory();\n } else {\n request = _createXMLHTTPObject();\n }\n if (!request) {\n // Give up, no way to send requests\n return callback(new Error('No way to send a request'));\n }\n try {\n try {\n var onreadystatechange = function() {\n try {\n if (onreadystatechange && request.readyState === 4) {\n onreadystatechange = undefined;\n\n var parseResponse = _.jsonParse(request.responseText);\n if (_isSuccess(request)) {\n callback(parseResponse.error, parseResponse.value);\n return;\n } else if (_isNormalFailure(request)) {\n if (request.status === 403) {\n // likely caused by using a server access token\n var message = parseResponse.value && parseResponse.value.message;\n logger.error(message);\n }\n // return valid http status codes\n callback(new Error(String(request.status)));\n } else {\n // IE will return a status 12000+ on some sort of connection failure,\n // so we return a blank error\n // http://msdn.microsoft.com/en-us/library/aa383770%28VS.85%29.aspx\n var msg = 'XHR response had no status code (likely connection failure)';\n callback(_newRetriableError(msg));\n }\n }\n } catch (ex) {\n //jquery source mentions firefox may error out while accessing the\n //request members if there is a network error\n //https://github.com/jquery/jquery/blob/a938d7b1282fc0e5c52502c225ae8f0cef219f0a/src/ajax/xhr.js#L111\n var exc;\n if (ex && ex.stack) {\n exc = ex;\n } else {\n exc = new Error(ex);\n }\n callback(exc);\n }\n };\n\n request.open(method, url, true);\n if (request.setRequestHeader) {\n request.setRequestHeader('Content-Type', 'application/json');\n request.setRequestHeader('X-Rollbar-Access-Token', accessToken);\n }\n request.onreadystatechange = onreadystatechange;\n request.send(data);\n } catch (e1) {\n // Sending using the normal xmlhttprequest object didn't work, try XDomainRequest\n if (typeof XDomainRequest !== 'undefined') {\n\n // Assume we are in a really old browser which has a bunch of limitations:\n // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\n // Extreme paranoia: if we have XDomainRequest then we have a window, but just in case\n if (!window || !window.location) {\n return callback(new Error('No window available during request, unknown environment'));\n }\n\n // If the current page is http, try and send over http\n if (window.location.href.substring(0, 5) === 'http:' && url.substring(0, 5) === 'https') {\n url = 'http' + url.substring(5);\n }\n\n var xdomainrequest = new XDomainRequest();\n xdomainrequest.onprogress = function() {};\n xdomainrequest.ontimeout = function() {\n var msg = 'Request timed out';\n var code = 'ETIMEDOUT';\n callback(_newRetriableError(msg, code));\n };\n xdomainrequest.onerror = function() {\n callback(new Error('Error during request'));\n };\n xdomainrequest.onload = function() {\n var parseResponse = _.jsonParse(xdomainrequest.responseText);\n callback(parseResponse.error, parseResponse.value);\n };\n xdomainrequest.open(method, url, true);\n xdomainrequest.send(data);\n } else {\n callback(new Error('Cannot find a method to transport a request'));\n }\n }\n } catch (e2) {\n callback(e2);\n }\n}\n\nfunction _createXMLHTTPObject() {\n /* global ActiveXObject:false */\n\n var factories = [\n function () {\n return new XMLHttpRequest();\n },\n function () {\n return new ActiveXObject('Msxml2.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Msxml3.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Microsoft.XMLHTTP');\n }\n ];\n var xmlhttp;\n var i;\n var numFactories = factories.length;\n for (i = 0; i < numFactories; i++) {\n /* eslint-disable no-empty */\n try {\n xmlhttp = factories[i]();\n break;\n } catch (e) {\n // pass\n }\n /* eslint-enable no-empty */\n }\n return xmlhttp;\n}\n\nfunction _isSuccess(r) {\n return r && r.status && r.status === 200;\n}\n\nfunction _isNormalFailure(r) {\n return r && _.isType(r.status, 'number') && r.status >= 400 && r.status < 600;\n}\n\nfunction _newRetriableError(message, code) {\n var err = new Error(message);\n err.code = code || 'ENOTFOUND';\n return err;\n}\n\nmodule.exports = {\n get: get,\n post: post\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transport.js\n// module id = 16\n// module chunks = 0","'use strict';\n\n// See https://nodejs.org/docs/latest/api/url.html\nfunction parse(url) {\n var result = {\n protocol: null, auth: null, host: null, path: null,\n hash: null, href: url, hostname: null, port: null,\n pathname: null, search: null, query: null\n };\n\n var i, last;\n i = url.indexOf('//');\n if (i !== -1) {\n result.protocol = url.substring(0,i);\n last = i+2;\n } else {\n last = 0;\n }\n \n i = url.indexOf('@', last);\n if (i !== -1) {\n result.auth = url.substring(last, i);\n last = i+1;\n }\n\n i = url.indexOf('/', last);\n if (i === -1) {\n i = url.indexOf('?', last);\n if (i === -1) {\n i = url.indexOf('#', last);\n if (i === -1) {\n result.host = url.substring(last);\n } else {\n result.host = url.substring(last, i);\n result.hash = url.substring(i);\n }\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n return result;\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n\n i = url.indexOf('#', last);\n if (i === -1) {\n result.path = url.substring(last);\n } else {\n result.path = url.substring(last, i);\n result.hash = url.substring(i);\n }\n\n if (result.path) {\n var pathParts = result.path.split('?');\n result.pathname = pathParts[0];\n result.query = pathParts[1];\n result.search = result.query ? '?' + result.query : null;\n }\n return result;\n}\n\nmodule.exports = {\n parse: parse\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/url.js\n// module id = 17\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar errorParser = require('./errorParser');\nvar logger = require('./logger');\n\nfunction handleItemWithError(item, options, callback) {\n item.data = item.data || {};\n if (item.err) {\n try {\n item.stackInfo = item.err._savedStackTrace || errorParser.parse(item.err);\n } catch (e)\n /* istanbul ignore next */\n {\n logger.error('Error while parsing the error object.', e);\n item.message = item.err.message || item.err.description || item.message || String(item.err);\n delete item.err;\n }\n }\n callback(null, item);\n}\n\nfunction ensureItemHasSomethingToSay(item, options, callback) {\n if (!item.message && !item.stackInfo && !item.custom) {\n callback(new Error('No message, stack info, or custom data'), null);\n }\n callback(null, item);\n}\n\nfunction addBaseInfo(item, options, callback) {\n var environment = (options.payload && options.payload.environment) || options.environment;\n item.data = _.extend(true, {}, item.data, {\n environment: environment,\n level: item.level,\n endpoint: options.endpoint,\n platform: 'browser',\n framework: 'browser-js',\n language: 'javascript',\n server: {},\n uuid: item.uuid,\n notifier: {\n name: 'rollbar-browser-js',\n version: options.version\n }\n });\n callback(null, item);\n}\n\nfunction addRequestInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.location) {\n return callback(null, item);\n }\n var remoteString = '$remote_ip';\n if (!options.captureIp) {\n remoteString = null;\n } else if (options.captureIp !== true) {\n remoteString += '_anonymize';\n }\n _.set(item, 'data.request', {\n url: window.location.href,\n query_string: window.location.search,\n user_ip: remoteString\n });\n callback(null, item);\n };\n}\n\nfunction addClientInfo(window) {\n return function(item, options, callback) {\n if (!window) {\n return callback(null, item);\n }\n var nav = window.navigator || {};\n var scr = window.screen || {};\n _.set(item, 'data.client', {\n runtime_ms: item.timestamp - window._rollbarStartTime,\n timestamp: Math.round(item.timestamp / 1000),\n javascript: {\n browser: nav.userAgent,\n language: nav.language,\n cookie_enabled: nav.cookieEnabled,\n screen: {\n width: scr.width,\n height: scr.height\n }\n }\n });\n callback(null, item);\n };\n}\n\nfunction addPluginInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.navigator) {\n return callback(null, item);\n }\n var plugins = [];\n var navPlugins = window.navigator.plugins || [];\n var cur;\n for (var i=0, l=navPlugins.length; i < l; ++i) {\n cur = navPlugins[i];\n plugins.push({name: cur.name, description: cur.description});\n }\n _.set(item, 'data.client.javascript.plugins', plugins);\n callback(null, item);\n };\n}\n\nfunction addBody(item, options, callback) {\n if (item.stackInfo) {\n addBodyTrace(item, options, callback);\n } else {\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction addBodyMessage(item, options, callback) {\n var message = item.message;\n var custom = item.custom;\n\n if (!message) {\n if (custom) {\n var scrubFields = options.scrubFields;\n var messageResult = _.stringify(_.scrub(custom, scrubFields));\n message = messageResult.error || messageResult.value || '';\n } else {\n message = '';\n }\n }\n var result = {\n body: message\n };\n\n if (custom) {\n result.extra = _.extend(true, {}, custom);\n }\n\n _.set(item, 'data.body', {message: result});\n callback(null, item);\n}\n\n\nfunction addBodyTrace(item, options, callback) {\n var description = item.data.description;\n var stackInfo = item.stackInfo;\n var custom = item.custom;\n\n var guess = errorParser.guessErrorClass(stackInfo.message);\n var className = stackInfo.name || guess[0];\n var message = guess[1];\n var trace = {\n exception: {\n 'class': className,\n message: message\n }\n };\n\n if (description) {\n trace.exception.description = description;\n }\n\n // Transform a TraceKit stackInfo object into a Rollbar trace\n var stack = stackInfo.stack;\n if (stack && stack.length === 0 && item._unhandledStackInfo && item._unhandledStackInfo.stack) {\n stack = item._unhandledStackInfo.stack;\n }\n if (stack) {\n if (stack.length === 0) {\n trace.exception.stack = stackInfo.rawStack;\n trace.exception.raw = String(stackInfo.rawException);\n }\n var stackFrame;\n var frame;\n var code;\n var pre;\n var post;\n var contextLength;\n var i, mid;\n\n trace.frames = [];\n for (i = 0; i < stack.length; ++i) {\n stackFrame = stack[i];\n frame = {\n filename: stackFrame.url ? _.sanitizeUrl(stackFrame.url) : '(unknown)',\n lineno: stackFrame.line || null,\n method: (!stackFrame.func || stackFrame.func === '?') ? '[anonymous]' : stackFrame.func,\n colno: stackFrame.column\n };\n if (frame.method && frame.method.endsWith && frame.method.endsWith('_rollbar_wrapped')) {\n continue;\n }\n\n code = pre = post = null;\n contextLength = stackFrame.context ? stackFrame.context.length : 0;\n if (contextLength) {\n mid = Math.floor(contextLength / 2);\n pre = stackFrame.context.slice(0, mid);\n code = stackFrame.context[mid];\n post = stackFrame.context.slice(mid);\n }\n\n if (code) {\n frame.code = code;\n }\n\n if (pre || post) {\n frame.context = {};\n if (pre && pre.length) {\n frame.context.pre = pre;\n }\n if (post && post.length) {\n frame.context.post = post;\n }\n }\n\n if (stackFrame.args) {\n frame.args = stackFrame.args;\n }\n\n trace.frames.push(frame);\n }\n\n // NOTE(cory): reverse the frames since rollbar.com expects the most recent call last\n trace.frames.reverse();\n\n if (custom) {\n trace.extra = _.extend(true, {}, custom);\n }\n _.set(item, 'data.body', {trace: trace});\n callback(null, item);\n } else {\n item.message = className + ': ' + message;\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction scrubPayload(item, options, callback) {\n var scrubFields = options.scrubFields;\n item.data = _.scrub(item.data, scrubFields);\n callback(null, item);\n}\n\nmodule.exports = {\n handleItemWithError: handleItemWithError,\n ensureItemHasSomethingToSay: ensureItemHasSomethingToSay,\n addBaseInfo: addBaseInfo,\n addRequestInfo: addRequestInfo,\n addClientInfo: addClientInfo,\n addPluginInfo: addPluginInfo,\n addBody: addBody,\n scrubPayload: scrubPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transforms.js\n// module id = 18\n// module chunks = 0","'use strict';\n\nvar ErrorStackParser = require('error-stack-parser');\n\nvar UNKNOWN_FUNCTION = '?';\nvar ERR_CLASS_REGEXP = new RegExp('^(([a-zA-Z0-9-_$ ]*): *)?(Uncaught )?([a-zA-Z0-9-_$ ]*): ');\n\nfunction guessFunctionName() {\n return UNKNOWN_FUNCTION;\n}\n\n\nfunction gatherContext() {\n return null;\n}\n\n\nfunction Frame(stackFrame) {\n var data = {};\n\n data._stackFrame = stackFrame;\n\n data.url = stackFrame.fileName;\n data.line = stackFrame.lineNumber;\n data.func = stackFrame.functionName;\n data.column = stackFrame.columnNumber;\n data.args = stackFrame.args;\n\n data.context = gatherContext(data.url, data.line);\n\n return data;\n}\n\n\nfunction Stack(exception) {\n function getStack() {\n var parserStack = [];\n var exc;\n\n if (!exception.stack) {\n try {\n throw exception;\n } catch (e) {\n exc = e;\n }\n } else {\n exc = exception;\n }\n\n try {\n parserStack = ErrorStackParser.parse(exc);\n } catch(e) {\n parserStack = [];\n }\n\n var stack = [];\n\n for (var i = 0; i < parserStack.length; i++) {\n stack.push(new Frame(parserStack[i]));\n }\n\n return stack;\n }\n\n return {\n stack: getStack(),\n message: exception.message,\n name: exception.name,\n rawStack: exception.stack,\n rawException: exception\n };\n}\n\n\nfunction parse(e) {\n return new Stack(e);\n}\n\n\nfunction guessErrorClass(errMsg) {\n if (!errMsg || !errMsg.match) {\n return ['Unknown error. There was no error message to display.', ''];\n }\n var errClassMatch = errMsg.match(ERR_CLASS_REGEXP);\n var errClass = '(unknown)';\n\n if (errClassMatch) {\n errClass = errClassMatch[errClassMatch.length - 1];\n errMsg = errMsg.replace((errClassMatch[errClassMatch.length - 2] || '') + errClass + ':', '');\n errMsg = errMsg.replace(/(^[\\s]+|[\\s]+$)/g, '');\n }\n return [errClass, errMsg];\n}\n\n\nmodule.exports = {\n guessFunctionName: guessFunctionName,\n guessErrorClass: guessErrorClass,\n gatherContext: gatherContext,\n parse: parse,\n Stack: Stack,\n Frame: Frame\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/errorParser.js\n// module id = 19\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = locationParts[0] === 'eval' ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/error-stack-parser.js\n// module id = 20\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stackframe', [], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.StackFrame = factory();\n }\n}(this, function () {\n 'use strict';\n function _isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n function StackFrame(functionName, args, fileName, lineNumber, columnNumber, source) {\n if (functionName !== undefined) {\n this.setFunctionName(functionName);\n }\n if (args !== undefined) {\n this.setArgs(args);\n }\n if (fileName !== undefined) {\n this.setFileName(fileName);\n }\n if (lineNumber !== undefined) {\n this.setLineNumber(lineNumber);\n }\n if (columnNumber !== undefined) {\n this.setColumnNumber(columnNumber);\n }\n if (source !== undefined) {\n this.setSource(source);\n }\n }\n\n StackFrame.prototype = {\n getFunctionName: function () {\n return this.functionName;\n },\n setFunctionName: function (v) {\n this.functionName = String(v);\n },\n\n getArgs: function () {\n return this.args;\n },\n setArgs: function (v) {\n if (Object.prototype.toString.call(v) !== '[object Array]') {\n throw new TypeError('Args must be an Array');\n }\n this.args = v;\n },\n\n // NOTE: Property name may be misleading as it includes the path,\n // but it somewhat mirrors V8's JavaScriptStackTraceApi\n // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's\n // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14\n getFileName: function () {\n return this.fileName;\n },\n setFileName: function (v) {\n this.fileName = String(v);\n },\n\n getLineNumber: function () {\n return this.lineNumber;\n },\n setLineNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Line Number must be a Number');\n }\n this.lineNumber = Number(v);\n },\n\n getColumnNumber: function () {\n return this.columnNumber;\n },\n setColumnNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Column Number must be a Number');\n }\n this.columnNumber = Number(v);\n },\n\n getSource: function () {\n return this.source;\n },\n setSource: function (v) {\n this.source = String(v);\n },\n\n toString: function() {\n var functionName = this.getFunctionName() || '{anonymous}';\n var args = '(' + (this.getArgs() || []).join(',') + ')';\n var fileName = this.getFileName() ? ('@' + this.getFileName()) : '';\n var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : '';\n var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : '';\n return functionName + args + fileName + lineNumber + columnNumber;\n }\n };\n\n return StackFrame;\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/~/stackframe/stackframe.js\n// module id = 21\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction itemToPayload(item, options, callback) {\n var payloadOptions = options.payload || {};\n if (payloadOptions.body) {\n delete payloadOptions.body;\n }\n\n var data = _.extend(true, {}, item.data, payloadOptions);\n if (item._isUncaught) {\n data._isUncaught = true;\n }\n if (item._originalArgs) {\n data._originalArgs = item._originalArgs;\n }\n callback(null, data);\n}\n\nfunction addTelemetryData(item, options, callback) {\n if (item.telemetryEvents) {\n _.set(item, 'data.body.telemetry', item.telemetryEvents);\n }\n callback(null, item);\n}\n\nfunction addMessageWithError(item, options, callback) {\n if (!item.message) {\n callback(null, item);\n return;\n }\n var tracePath = 'data.body.trace_chain.0';\n var trace = _.get(item, tracePath);\n if (!trace) {\n tracePath = 'data.body.trace';\n trace = _.get(item, tracePath);\n }\n if (trace) {\n if (!(trace.exception && trace.exception.description)) {\n _.set(item, tracePath+'.exception.description', item.message);\n callback(null, item);\n return;\n }\n var extra = _.get(item, tracePath+'.extra') || {};\n var newExtra = _.extend(true, {}, extra, {message: item.message});\n _.set(item, tracePath+'.extra', newExtra);\n }\n callback(null, item);\n}\n\nfunction userTransform(logger) {\n return function(item, options, callback) {\n var newItem = _.extend(true, {}, item);\n try {\n if (_.isFunction(options.transform)) {\n options.transform(newItem.data);\n }\n } catch (e) {\n options.transform = null;\n logger.error('Error while calling custom transform() function. Removing custom transform().', e);\n callback(null, item);\n return;\n }\n callback(null, newItem);\n }\n}\n\nfunction addConfigToPayload(item, options, callback) {\n if (!options.sendConfig) {\n return callback(null, item);\n }\n var configKey = '_rollbarConfig';\n var custom = _.get(item, 'data.custom') || {};\n custom[configKey] = options;\n item.data.custom = custom;\n callback(null, item);\n}\n\nmodule.exports = {\n itemToPayload: itemToPayload,\n addTelemetryData: addTelemetryData,\n addMessageWithError: addMessageWithError,\n userTransform: userTransform,\n addConfigToPayload: addConfigToPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/transforms.js\n// module id = 22\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\n\nfunction checkIgnore(item, settings) {\n if (_.get(settings, 'plugins.jquery.ignoreAjaxErrors')) {\n return !_.get(item, 'body.message.extra.isAjax');\n }\n return true;\n}\n\nmodule.exports = {\n checkIgnore: checkIgnore\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/predicates.js\n// module id = 23\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction checkLevel(item, settings) {\n var level = item.level;\n var levelVal = _.LEVELS[level] || 0;\n var reportLevel = settings.reportLevel;\n var reportLevelVal = _.LEVELS[reportLevel] || 0;\n\n if (levelVal < reportLevelVal) {\n return false;\n }\n return true;\n}\n\nfunction userCheckIgnore(logger) {\n return function(item, settings) {\n var isUncaught = !!item._isUncaught;\n delete item._isUncaught;\n var args = item._originalArgs;\n delete item._originalArgs;\n try {\n if (_.isFunction(settings.onSendCallback)) {\n settings.onSendCallback(isUncaught, args, item);\n }\n } catch (e) {\n settings.onSendCallback = null;\n logger.error('Error while calling onSendCallback, removing', e);\n }\n try {\n if (_.isFunction(settings.checkIgnore) && settings.checkIgnore(isUncaught, args, item)) {\n return false;\n }\n } catch (e) {\n settings.checkIgnore = null;\n logger.error('Error while calling custom checkIgnore(), removing', e);\n }\n return true;\n }\n}\n\nfunction urlIsNotBlacklisted(logger) {\n return function(item, settings) {\n return !urlIsOnAList(item, settings, 'blacklist', logger);\n }\n}\n\nfunction urlIsWhitelisted(logger) {\n return function(item, settings) {\n return urlIsOnAList(item, settings, 'whitelist', logger);\n }\n}\n\nfunction urlIsOnAList(item, settings, whiteOrBlack, logger) {\n // whitelist is the default\n var black = false;\n if (whiteOrBlack === 'blacklist') {\n black = true;\n }\n var list, trace, frame, filename, frameLength, url, listLength, urlRegex;\n var i, j;\n\n try {\n list = black ? settings.hostBlackList : settings.hostWhiteList;\n listLength = list && list.length;\n trace = _.get(item, 'body.trace');\n\n // These two checks are important to come first as they are defaults\n // in case the list is missing or the trace is missing or not well-formed\n if (!list || listLength === 0) {\n return !black;\n }\n if (!trace || !trace.frames || trace.frames.length === 0) {\n return !black;\n }\n\n frameLength = trace.frames.length;\n for (i = 0; i < frameLength; i++) {\n frame = trace.frames[i];\n filename = frame.filename;\n\n if (!_.isType(filename, 'string')) {\n return !black;\n }\n\n for (j = 0; j < listLength; j++) {\n url = list[j];\n urlRegex = new RegExp(url);\n\n if (urlRegex.test(filename)) {\n return true;\n }\n }\n }\n } catch (e)\n /* istanbul ignore next */\n {\n if (black) {\n settings.hostBlackList = null;\n } else {\n settings.hostWhiteList = null;\n }\n var listName = black ? 'hostBlackList' : 'hostWhiteList';\n logger.error('Error while reading your configuration\\'s ' + listName + ' option. Removing custom ' + listName + '.', e);\n return !black;\n }\n return false;\n}\n\nfunction messageIsIgnored(logger) {\n return function(item, settings) {\n var exceptionMessage, i, ignoredMessages,\n len, messageIsIgnored, rIgnoredMessage,\n body, traceMessage, bodyMessage;\n\n try {\n messageIsIgnored = false;\n ignoredMessages = settings.ignoredMessages;\n\n if (!ignoredMessages || ignoredMessages.length === 0) {\n return true;\n }\n\n body = item.body;\n traceMessage = _.get(body, 'trace.exception.message');\n bodyMessage = _.get(body, 'message.body');\n\n exceptionMessage = traceMessage || bodyMessage;\n\n if (!exceptionMessage){\n return true;\n }\n\n len = ignoredMessages.length;\n for (i = 0; i < len; i++) {\n rIgnoredMessage = new RegExp(ignoredMessages[i], 'gi');\n messageIsIgnored = rIgnoredMessage.test(exceptionMessage);\n\n if (messageIsIgnored) {\n break;\n }\n }\n } catch(e)\n /* istanbul ignore next */\n {\n settings.ignoredMessages = null;\n logger.error('Error while reading your configuration\\'s ignoredMessages option. Removing custom ignoredMessages.');\n }\n\n return !messageIsIgnored;\n }\n}\n\nmodule.exports = {\n checkLevel: checkLevel,\n userCheckIgnore: userCheckIgnore,\n urlIsNotBlacklisted: urlIsNotBlacklisted,\n urlIsWhitelisted: urlIsWhitelisted,\n messageIsIgnored: messageIsIgnored\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/predicates.js\n// module id = 24\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar urlparser = require('./url');\nvar domUtil = require('./domUtility');\n\nvar defaults = {\n network: true,\n networkResponseHeaders: false,\n networkResponseBody: false,\n networkRequestBody: false,\n log: true,\n dom: true,\n navigation: true,\n connectivity: true\n};\n\nfunction replace(obj, name, replacement, replacements, type) {\n var orig = obj[name];\n obj[name] = replacement(orig);\n if (replacements) {\n replacements[type].push([obj, name, orig]);\n }\n}\n\nfunction restore(replacements, type) {\n var b;\n while (replacements[type].length) {\n b = replacements[type].shift();\n b[0][b[1]] = b[2];\n }\n}\n\nfunction Instrumenter(options, telemeter, rollbar, _window, _document) {\n var autoInstrument = options.autoInstrument;\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.extend(true, {}, defaults, autoInstrument);\n }\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n this.telemetryScrubber = options.telemetryScrubber;\n this.telemeter = telemeter;\n this.rollbar = rollbar;\n this._window = _window || {};\n this._document = _document || {};\n this.replacements = {\n network: [],\n log: [],\n navigation: [],\n connectivity: []\n };\n this.eventRemovers = {\n dom: [],\n connectivity: []\n };\n\n this._location = this._window.location;\n this._lastHref = this._location && this._location.href;\n}\n\nInstrumenter.prototype.configure = function(options) {\n var autoInstrument = options.autoInstrument;\n var oldSettings = _.extend(true, {}, this.autoInstrument);\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.extend(true, {}, defaults, autoInstrument);\n }\n this.instrument(oldSettings);\n if (options.scrubTelemetryInputs !== undefined) {\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n }\n if (options.telemetryScrubber !== undefined) {\n this.telemetryScrubber = options.telemetryScrubber;\n }\n};\n\nInstrumenter.prototype.instrument = function(oldSettings) {\n if (this.autoInstrument.network && !(oldSettings && oldSettings.network)) {\n this.instrumentNetwork();\n } else if (!this.autoInstrument.network && oldSettings && oldSettings.network) {\n this.deinstrumentNetwork();\n }\n\n if (this.autoInstrument.log && !(oldSettings && oldSettings.log)) {\n this.instrumentConsole();\n } else if (!this.autoInstrument.log && oldSettings && oldSettings.log) {\n this.deinstrumentConsole();\n }\n\n if (this.autoInstrument.dom && !(oldSettings && oldSettings.dom)) {\n this.instrumentDom();\n } else if (!this.autoInstrument.dom && oldSettings && oldSettings.dom) {\n this.deinstrumentDom();\n }\n\n if (this.autoInstrument.navigation && !(oldSettings && oldSettings.navigation)) {\n this.instrumentNavigation();\n } else if (!this.autoInstrument.navigation && oldSettings && oldSettings.navigation) {\n this.deinstrumentNavigation();\n }\n\n if (this.autoInstrument.connectivity && !(oldSettings && oldSettings.connectivity)) {\n this.instrumentConnectivity();\n } else if (!this.autoInstrument.connectivity && oldSettings && oldSettings.connectivity) {\n this.deinstrumentConnectivity();\n }\n};\n\nInstrumenter.prototype.deinstrumentNetwork = function() {\n restore(this.replacements, 'network');\n};\n\nInstrumenter.prototype.instrumentNetwork = function() {\n var self = this;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && _.isFunction(xhr[prop])) {\n replace(xhr, prop, function(orig) {\n return self.rollbar.wrap(orig);\n });\n }\n }\n\n if ('XMLHttpRequest' in this._window) {\n var xhrp = this._window.XMLHttpRequest.prototype;\n replace(xhrp, 'open', function(orig) {\n return function(method, url) {\n if (_.isType(url, 'string')) {\n this.__rollbar_xhr = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'network');\n\n replace(xhrp, 'send', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(data) {\n /* eslint-enable no-unused-vars */\n var xhr = this;\n\n function onreadystatechangeHandler() {\n if (xhr.__rollbar_xhr && (xhr.readyState === 1 || xhr.readyState === 4)) {\n if (xhr.__rollbar_xhr.status_code === null) {\n xhr.__rollbar_xhr.status_code = 0;\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n requestData = data;\n }\n xhr.__rollbar_event = self.telemeter.captureNetwork(xhr.__rollbar_xhr, 'xhr', undefined, requestData);\n }\n if (xhr.readyState === 1) {\n xhr.__rollbar_xhr.start_time_ms = _.now();\n } else {\n xhr.__rollbar_xhr.end_time_ms = _.now();\n\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n var header, i;\n if (headersConfig === true) {\n var allHeaders = xhr.getAllResponseHeaders();\n if (allHeaders) {\n var arr = allHeaders.trim().split(/[\\r\\n]+/);\n var parts, value;\n for (i=0; i < arr.length; i++) {\n parts = arr[i].split(': ');\n header = parts.shift();\n value = parts.join(': ');\n headers[header] = value;\n }\n }\n } else {\n for (i=0; i < headersConfig.length; i++) {\n header = headersConfig[i];\n headers[header] = xhr.getResponseHeader(header);\n }\n }\n } catch (e) {\n /* we ignore the errors here that could come from different\n * browser issues with the xhr methods */\n }\n }\n var body = null;\n if (self.autoInstrument.networkResponseBody) {\n try {\n body = xhr.responseText;\n } catch (e) {\n /* ignore errors from reading responseText */\n }\n }\n var response = null;\n if (body || headers) {\n response = {};\n if (body) {\n response.body = body;\n }\n if (headers) {\n response.headers = headers;\n }\n }\n if (response) {\n xhr.__rollbar_xhr.response = response;\n }\n }\n try {\n var code = xhr.status;\n code = code === 1223 ? 204 : code;\n xhr.__rollbar_xhr.status_code = code;\n xhr.__rollbar_event.level = self.telemeter.levelFromStatus(code);\n } catch (e) {\n /* ignore possible exception from xhr.status */\n }\n }\n }\n\n wrapProp('onload', xhr);\n wrapProp('onerror', xhr);\n wrapProp('onprogress', xhr);\n\n if ('onreadystatechange' in xhr && _.isFunction(xhr.onreadystatechange)) {\n replace(xhr, 'onreadystatechange', function(orig) {\n return self.rollbar.wrap(orig, undefined, onreadystatechangeHandler);\n });\n } else {\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n return orig.apply(this, arguments);\n }\n }, this.replacements, 'network');\n }\n\n if ('fetch' in this._window) {\n replace(this._window, 'fetch', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(fn, t) {\n /* eslint-enable no-unused-vars */\n var args = new Array(arguments.length);\n for (var i=0, len=args.length; i < len; i++) {\n args[i] = arguments[i];\n }\n var input = args[0];\n var method = 'GET';\n var url;\n if (_.isType(input, 'string')) {\n url = input;\n } else if (input) {\n url = input.url;\n if (input.method) {\n method = input.method;\n }\n }\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n var metadata = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n if (args[1] && args[1].body) {\n requestData = args[1].body;\n } else if (args[0] && !_.isType(args[0], 'string') && args[0].body) {\n requestData = args[0].body;\n }\n }\n self.telemeter.captureNetwork(metadata, 'fetch', undefined, requestData);\n return orig.apply(this, args).then(function (resp) {\n metadata.end_time_ms = _.now();\n metadata.status_code = resp.status;\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n if (headersConfig === true) {\n // This is unsupported in IE so we can't do it\n /*\n var allHeaders = resp.headers.entries();\n for (var pair of allHeaders) {\n headers[pair[0]] = pair[1];\n }\n */\n } else {\n for (var i=0; i < headersConfig.length; i++) {\n var header = headersConfig[i];\n headers[header] = resp.headers.get(header);\n }\n }\n } catch (e) {\n /* ignore probable IE errors */\n }\n }\n var response = null;\n if (headers) {\n response = {\n headers: headers\n };\n }\n if (response) {\n metadata.response = response;\n }\n return resp;\n });\n };\n }, this.replacements, 'network');\n }\n};\n\nInstrumenter.prototype.deinstrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n var b;\n while (this.replacements['log'].length) {\n b = this.replacements['log'].shift();\n this._window.console[b[0]] = b[1];\n }\n};\n\nInstrumenter.prototype.instrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n\n var self = this;\n var c = this._window.console;\n\n function wrapConsole(method) {\n var orig = c[method];\n var origConsole = c;\n var level = method === 'warn' ? 'warning' : method;\n c[method] = function() {\n var args = Array.prototype.slice.call(arguments);\n var message = _.formatArgsAsString(args);\n self.telemeter.captureLog(message, level);\n if (orig) {\n Function.prototype.apply.call(orig, origConsole, args);\n }\n };\n self.replacements['log'].push([method, orig]);\n }\n var methods = ['debug','info','warn','error','log'];\n for (var i=0, len=methods.length; i < len; i++) {\n wrapConsole(methods[i]);\n }\n};\n\nInstrumenter.prototype.deinstrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n this.removeListeners('dom');\n};\n\nInstrumenter.prototype.instrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n var clickHandler = this.handleClick.bind(this);\n var blurHandler = this.handleBlur.bind(this);\n this.addListener('dom', this._window, 'click', 'onclick', clickHandler, true);\n this.addListener('dom', this._window, 'blur', 'onfocusout', blurHandler, true);\n};\n\nInstrumenter.prototype.handleClick = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n var hasTag = e && e.tagName;\n var anchorOrButton = domUtil.isDescribedElement(e, 'a') || domUtil.isDescribedElement(e, 'button');\n if (hasTag && (anchorOrButton || domUtil.isDescribedElement(e, 'input', ['button', 'submit']))) {\n this.captureDomEvent('click', e);\n } else if (domUtil.isDescribedElement(e, 'input', ['checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value, e.checked);\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleBlur = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n if (e && e.tagName) {\n if (domUtil.isDescribedElement(e, 'textarea')) {\n this.captureDomEvent('input', e, e.value);\n } else if (domUtil.isDescribedElement(e, 'select') && e.options && e.options.length) {\n this.handleSelectInputChanged(e);\n } else if (domUtil.isDescribedElement(e, 'input') && !domUtil.isDescribedElement(e, 'input', ['button', 'submit', 'hidden', 'checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value);\n }\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleSelectInputChanged = function(elem) {\n if (elem.multiple) {\n for (var i = 0; i < elem.options.length; i++) {\n if (elem.options[i].selected) {\n this.captureDomEvent('input', elem, elem.options[i].value);\n }\n }\n } else if (elem.selectedIndex >= 0 && elem.options[elem.selectedIndex]) {\n this.captureDomEvent('input', elem, elem.options[elem.selectedIndex].value);\n }\n};\n\nInstrumenter.prototype.captureDomEvent = function(subtype, element, value, isChecked) {\n if (value !== undefined) {\n if (this.scrubTelemetryInputs || (domUtil.getElementType(element) === 'password')) {\n value = '[scrubbed]';\n } else if (this.telemetryScrubber) {\n var description = domUtil.describeElement(element);\n if (this.telemetryScrubber(description)) {\n value = '[scrubbed]';\n }\n }\n }\n var elementString = domUtil.elementArrayToString(domUtil.treeToArray(element));\n this.telemeter.captureDom(subtype, elementString, value, isChecked);\n};\n\nInstrumenter.prototype.deinstrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n restore(this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.instrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n var self = this;\n replace(this._window, 'onpopstate', function(orig) {\n return function() {\n var current = self._location.href;\n self.handleUrlChange(self._lastHref, current);\n if (orig) {\n orig.apply(this, arguments);\n }\n };\n }, this.replacements, 'navigation');\n\n replace(this._window.history, 'pushState', function(orig) {\n return function() {\n var url = arguments.length > 2 ? arguments[2] : undefined;\n if (url) {\n self.handleUrlChange(self._lastHref, url + '');\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.handleUrlChange = function(from, to) {\n var parsedHref = urlparser.parse(this._location.href);\n var parsedTo = urlparser.parse(to);\n var parsedFrom = urlparser.parse(from);\n this._lastHref = to;\n if (parsedHref.protocol === parsedTo.protocol && parsedHref.host === parsedTo.host) {\n to = parsedTo.path + (parsedTo.hash || '');\n }\n if (parsedHref.protocol === parsedFrom.protocol && parsedHref.host === parsedFrom.host) {\n from = parsedFrom.path + (parsedFrom.hash || '');\n }\n this.telemeter.captureNavigation(from, to);\n};\n\nInstrumenter.prototype.deinstrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.removeListeners('connectivity');\n } else {\n restore(this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.instrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.addListener('connectivity', this._window, 'online', undefined, function() {\n this.telemeter.captureConnectivityChange('online');\n }.bind(this), true);\n this.addListener('connectivity', this._window, 'offline', undefined, function() {\n this.telemeter.captureConnectivityChange('offline');\n }.bind(this), true);\n } else {\n var self = this;\n replace(this._document.body, 'ononline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('online');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n replace(this._document.body, 'onoffline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('offline');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.addListener = function(section, obj, type, altType, handler, capture) {\n if (obj.addEventListener) {\n obj.addEventListener(type, handler, capture);\n this.eventRemovers[section].push(function() {\n obj.removeEventListener(type, handler, capture);\n });\n } else if (altType) {\n obj.attachEvent(altType, handler);\n this.eventRemovers[section].push(function() {\n obj.detachEvent(altType, handler);\n });\n }\n};\n\nInstrumenter.prototype.removeListeners = function(section) {\n var r;\n while (this.eventRemovers[section].length) {\n r = this.eventRemovers[section].shift();\n r();\n }\n};\n\nmodule.exports = Instrumenter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/telemetry.js\n// module id = 25\n// module chunks = 0","'use strict';\n\nfunction getElementType(e) {\n return (e.getAttribute('type') || '').toLowerCase();\n}\n\nfunction isDescribedElement(element, type, subtypes) {\n if (element.tagName.toLowerCase() !== type.toLowerCase()) {\n return false;\n }\n if (!subtypes) {\n return true;\n }\n element = getElementType(element);\n for (var i = 0; i < subtypes.length; i++) {\n if (subtypes[i] === element) {\n return true;\n }\n }\n return false;\n}\n\nfunction getElementFromEvent(evt, doc) {\n if (evt.target) {\n return evt.target;\n }\n if (doc && doc.elementFromPoint) {\n return doc.elementFromPoint(evt.clientX, evt.clientY);\n }\n return undefined;\n}\n\nfunction treeToArray(elem) {\n var MAX_HEIGHT = 5;\n var out = [];\n var nextDescription;\n for (var height = 0; elem && height < MAX_HEIGHT; height++) {\n nextDescription = describeElement(elem);\n if (nextDescription.tagName === 'html') {\n break;\n }\n out.unshift(nextDescription);\n elem = elem.parentNode;\n }\n return out;\n}\n\nfunction elementArrayToString(a) {\n var MAX_LENGTH = 80;\n var separator = ' > ', separatorLength = separator.length;\n var out = [], len = 0, nextStr, totalLength;\n\n for (var i = a.length - 1; i >= 0; i--) {\n nextStr = descriptionToString(a[i]);\n totalLength = len + (out.length * separatorLength) + nextStr.length;\n if (i < a.length - 1 && totalLength >= MAX_LENGTH + 3) {\n out.unshift('...');\n break;\n }\n out.unshift(nextStr);\n len += nextStr.length;\n }\n return out.join(separator);\n}\n\nfunction descriptionToString(desc) {\n if (!desc || !desc.tagName) {\n return '';\n }\n var out = [desc.tagName];\n if (desc.id) {\n out.push('#' + desc.id);\n }\n if (desc.classes) {\n out.push('.' + desc.classes.join('.'));\n }\n for (var i = 0; i < desc.attributes.length; i++) {\n out.push('[' + desc.attributes[i].key + '=\"' + desc.attributes[i].value + '\"]');\n }\n\n return out.join('');\n}\n\n/**\n * Input: a dom element\n * Output: null if tagName is falsey or input is falsey, else\n * {\n * tagName: String,\n * id: String | undefined,\n * classes: [String] | undefined,\n * attributes: [\n * {\n * key: OneOf(type, name, title, alt),\n * value: String\n * }\n * ]\n * }\n */\nfunction describeElement(elem) {\n if (!elem || !elem.tagName) {\n return null;\n }\n var out = {}, className, key, attr, i;\n out.tagName = elem.tagName.toLowerCase();\n if (elem.id) {\n out.id = elem.id;\n }\n className = elem.className;\n if (className && (typeof className === 'string')) {\n out.classes = className.split(/\\s+/);\n }\n var attributes = ['type', 'name', 'title', 'alt'];\n out.attributes = [];\n for (i = 0; i < attributes.length; i++) {\n key = attributes[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.attributes.push({key: key, value: attr});\n }\n }\n return out;\n}\n\nmodule.exports = {\n describeElement: describeElement,\n descriptionToString: descriptionToString,\n elementArrayToString: elementArrayToString,\n treeToArray: treeToArray,\n getElementFromEvent: getElementFromEvent,\n isDescribedElement: isDescribedElement,\n getElementType: getElementType\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/domUtility.js\n// module id = 26\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/rollbar.named-amd.js b/dist/rollbar.named-amd.js index c249bc91b..7dc8946e3 100644 --- a/dist/rollbar.named-amd.js +++ b/dist/rollbar.named-amd.js @@ -100,7 +100,7 @@ define("rollbar", [], function() { return /******/ (function(modules) { // webpa var Instrumenter = __webpack_require__(26); function Rollbar(options, client) { - this.options = _.extend(true, defaultOptions, options); + this.options = _.extend({}, defaultOptions, options); var api = new API(this.options, transport, urllib); this.client = client || new Client(this.options, api, logger, 'browser'); @@ -155,7 +155,7 @@ define("rollbar", [], function() { return /******/ (function(modules) { // webpa if (payloadData) { payload = {payload: payloadData}; } - this.options = _.extend(true, {}, oldOptions, options, payload); + this.options = _.extend({}, oldOptions, options, payload); this.client.configure(options, payloadData); this.instrumenter.configure(options); return this; @@ -365,13 +365,15 @@ define("rollbar", [], function() { return /******/ (function(modules) { // webpa return f.apply(this, arguments); } catch(exc) { var e = exc; - if (_.isType(e, 'string')) { - e = new String(e); - } - e._rollbarContext = ctxFn() || {}; - e._rollbarContext._wrappedSource = f.toString(); + if (e) { + if (_.isType(e, 'string')) { + e = new String(e); + } + e._rollbarContext = ctxFn() || {}; + e._rollbarContext._wrappedSource = f.toString(); - window._rollbarWrappedError = e; + window._rollbarWrappedError = e; + } throw e; } }; @@ -477,7 +479,7 @@ define("rollbar", [], function() { return /******/ (function(modules) { // webpa /* global __DEFAULT_ENDPOINT__:false */ var defaultOptions = { - version: ("2.3.9"), + version: ("2.4.0"), scrubFields: (["pw","pass","passwd","password","secret","confirm_password","confirmPassword","password_confirmation","passwordConfirmation","access_token","accessToken","secret_key","secretKey","secretToken"]), logLevel: ("debug"), reportLevel: ("debug"), @@ -486,7 +488,8 @@ define("rollbar", [], function() { return /******/ (function(modules) { // webpa verbose: false, enabled: true, sendConfig: false, - includeItemsInTelemetry: true + includeItemsInTelemetry: true, + captureIp: true }; module.exports = Rollbar; @@ -1642,6 +1645,42 @@ define("rollbar", [], function() { return /******/ (function(modules) { // webpa return +new Date(); } + function filterIp(requestData, captureIp) { + if (!requestData || !requestData['user_ip'] || captureIp === true) { + return; + } + var newIp = requestData['user_ip']; + if (!captureIp) { + newIp = null; + } else { + try { + var parts; + if (newIp.indexOf('.') !== -1) { + parts = newIp.split('.'); + parts.pop(); + parts.push('0'); + newIp = parts.join('.'); + } else if (newIp.indexOf(':') !== -1) { + parts = newIp.split(':'); + if (parts.length > 2) { + var beginning = parts.slice(0, 3); + var slashIdx = beginning[2].indexOf('/'); + if (slashIdx !== -1) { + beginning[2] = beginning[2].substring(0, slashIdx); + } + var terminal = '0000:0000:0000:0000:0000'; + newIp = beginning.concat(terminal).join(':'); + } + } else { + newIp = null; + } + } catch (e) { + newIp = null; + } + } + requestData['user_ip'] = newIp; + } + module.exports = { isType: isType, typeName: typeName, @@ -1665,7 +1704,8 @@ define("rollbar", [], function() { return /******/ (function(modules) { // webpa set: set, scrub: scrub, formatArgsAsString: formatArgsAsString, - now: now + now: now, + filterIp: filterIp }; @@ -2562,7 +2602,7 @@ define("rollbar", [], function() { return /******/ (function(modules) { // webpa Notifier.prototype.configure = function(options) { this.queue && this.queue.configure(options); var oldOptions = this.options; - this.options = _.extend(true, {}, oldOptions, options); + this.options = _.extend({}, oldOptions, options); return this; }; @@ -3597,10 +3637,16 @@ define("rollbar", [], function() { return /******/ (function(modules) { // webpa if (!window || !window.location) { return callback(null, item); } + var remoteString = '$remote_ip'; + if (!options.captureIp) { + remoteString = null; + } else if (options.captureIp !== true) { + remoteString += '_anonymize'; + } _.set(item, 'data.request', { url: window.location.href, query_string: window.location.search, - user_ip: '$remote_ip' + user_ip: remoteString }); callback(null, item); }; diff --git a/dist/rollbar.named-amd.js.map b/dist/rollbar.named-amd.js.map index ce9b529ef..c89c5c8b6 100644 --- a/dist/rollbar.named-amd.js.map +++ b/dist/rollbar.named-amd.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap bd0dc61da8491cf3fd17","webpack:///./src/browser/bundles/rollbar.js","webpack:///./src/browser/rollbar.js","webpack:///./src/rollbar.js","webpack:///./src/rateLimiter.js","webpack:///./src/queue.js","webpack:///./src/utility.js","webpack:///./~/extend/index.js","webpack:///./vendor/JSON-js/json3.js","webpack:///./src/notifier.js","webpack:///./src/telemetry.js","webpack:///./src/api.js","webpack:///./src/apiUtility.js","webpack:///./src/browser/logger.js","webpack:///./~/console-polyfill/index.js","webpack:///./src/browser/detection.js","webpack:///./src/browser/globalSetup.js","webpack:///./src/browser/transport.js","webpack:///./src/browser/url.js","webpack:///./src/browser/transforms.js","webpack:///./src/browser/errorParser.js","webpack:///./~/error-stack-parser/error-stack-parser.js","webpack:///./~/error-stack-parser/~/stackframe/stackframe.js","webpack:///./src/transforms.js","webpack:///./src/browser/predicates.js","webpack:///./src/predicates.js","webpack:///./src/browser/telemetry.js","webpack:///./src/browser/domUtility.js"],"names":[],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;;;;;;;ACtCA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA,EAAC;AACD;AACA;AACA;;AAEA;;;;;;;ACvBA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA,mCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,2BAA0B,sBAAsB;AAChD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,qCAAoC,SAAS;AAC7C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACxZA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA,mCAAkC;AAClC;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACpIA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC7IA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAkC;AAClC;AACA;;AAEA;AACA;AACA;AACA,yDAAwD,WAAW;AACnE;AACA;AACA,gBAAe,WAAW;AAC1B,gBAAe,eAAe;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA2B,QAAQ;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,cAAa,8BAA8B;AAC3C;AACA;AACA;AACA;AACA,gDAA+C,SAAS;AACxD;AACA;AACA,eAAc;AACd;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAkD,SAAS;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAwB,+BAA+B;;AAEvD;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACnQA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAY;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,gBAAe,gBAAgB;AAC/B;AACA;AACA;;AAEA,0BAAyB;AACzB,cAAa,iBAAiB;AAC9B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,mCAAkC,OAAO;AACzC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAmD,SAAS;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,6BAA4B;AAC5B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAwC,SAAS,UAAU,YAAY,GAAG;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,SAAS;AAC/C;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,WAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB,qBAAqB;AACtC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAe,qBAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB,wBAAwB;AACzC;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,kBAAiB,wBAAwB;AACzC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iCAAgC,SAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACzmBA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAmB;;AAEnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA,QAAO,YAAY;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA,OAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAAyE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAoB;AACpB;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,0CAAyC,iBAAiB;AAC1D,+BAA8B,kBAAkB;;AAEhD,0CAAyC,iBAAiB;AAC1D,uCAAsC,6BAA6B;;AAEnE;AACA;AACA;AACA;AACA,cAAa;AACb;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,yBAAwB;AACxB,gDAA+C,EAAE;AACjD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;;AAGA;;AAEA;;AAEA,WAAU;AACV,WAAU;AACV,WAAU;AACV;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA,sBAAqB,YAAY;AACjC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,sBAAqB,YAAY;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,gBAAe;AACf;AACA,eAAc,wDAAwD;AACtE,eAAc,0BAA0B;AACxC;AACA;AACA;AACA;;AAEA;;AAEA;AACA,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAmB,WAAW;AAC9B;AACA;;AAEA;;AAEA,QAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,uBAAsB,UAAU;AAChC;AACA;;;AAGA;;AAEA;AACA;;AAEA;AACA;;AAEA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB,qBAAoB;AACpB,eAAc;AACd,iBAAgB;AAChB,sBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAoB;AACpB;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,qBAAoB;AACpB;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,WAAU;AACV;AACA,yBAAwB,YAAY;AACpC;AACA;AACA,YAAW;AACX;AACA,yBAAwB,gDAAgD;AACxE;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA;AACA,UAAS;AACT,WAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,yBAAwB,YAAY;AACpC;AACA;AACA,YAAW;AACX;AACA,yBAAwB,gDAAgD;AACxE;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,uCAAsC,EAAE;AACxC;AACA;AACA;AACA,UAAS;AACT;;AAEA;;AAEA;AACA;;AAEA;AACA,gDAA+C,yGAAyG,EAAE;;AAE1J;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA,cAAa;;AAEb;AACA;;AAEA;AACA;AACA,cAAa;;AAEb;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,UAAS;AACT;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE,UAAU;AACvB;AACA;AACA,MAAK;AACL;AACA;;AAEA;;;;;;;AC1vBA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAkC;AAClC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;;;;;;ACvHA;;AAEA;;AAEA;;AAEA;AACA;AACA,mCAAkC;AAClC;AACA;AACA;;AAEA;AACA;AACA,mCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sCAAqC,mBAAmB;AACxD;;AAEA;AACA,sCAAqC,4BAA4B;AACjE;AACA;AACA,+BAA8B,4BAA4B;AAC1D;AACA;AACA;AACA,sCAAqC,gBAAgB;AACrD;AACA;AACA,+BAA8B,gBAAgB;AAC9C;AACA;;AAEA;AACA,+BAA8B,aAAa;AAC3C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACrKA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;ACnEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACzFA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;;;AClBD;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;AC/BA;;AAEA;AACA,iBAAgB,QAAQ;AACxB;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAgB,QAAQ;;AAExB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAgB,QAAQ;AACxB;AACA;AACA;AACA,cAAa,oBAAoB;AACjC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;AC3HA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,kBAAkB;AAC/B;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;AC7MA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;AChFA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gCAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,OAAO;AAC7C;AACA,qBAAoB,6CAA6C;AACjE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qCAAoC;AACpC;;AAEA,6BAA4B,gBAAgB;AAC5C;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAe,kBAAkB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,sCAAqC;AACrC;AACA,+BAA8B,aAAa;AAC3C;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACtPA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;;AAEA;;AAEA,oBAAmB,wBAAwB;AAC3C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACtGA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA,EAAC;AACD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA,4BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA,4BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,0BAAyB;AACzB;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,cAAa;AACb;AACA,cAAa;AACb;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAa;AACb,UAAS;;AAET;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,cAAa;AACb,UAAS;;AAET;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,cAAa;AACb;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;;AAEA,gDAA+C,SAAS;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAS;;AAET;AACA;AACA;AACA;;AAEA,gDAA+C,SAAS;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,EAAC;;;;;;;;AC/LD;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;;AAET;AACA,4DAA2D,UAAU;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,EAAC;;;;;;;AC1GD;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,+BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAqC,UAAU,sBAAsB;AACrE;AACA;AACA;AACA;;AAEA;AACA;AACA,oCAAmC;AACnC;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACrFA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;ACbA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAe,iBAAiB;AAChC;AACA;;AAEA;AACA;AACA;;AAEA,kBAAiB,gBAAgB;AACjC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,kBAAiB,SAAS;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AChKA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,4CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,sCAAqC;AACrC;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,4CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAA+B,gBAAgB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB;AACnB,8BAA6B,0BAA0B;AACvD;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,SAAS;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf,8BAA6B,0BAA0B;AACvD;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAmC,SAAS;AAC5C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA,oBAAmB,yBAAyB;AAC5C;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACnjBA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB,qBAAqB;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,uBAAsB,6BAA6B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,6BAA4B,QAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB,4BAA4B;AAC7C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,uBAAuB;AACpC;AACA;AACA;AACA,4BAA2B,sBAAsB;AACjD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"rollbar.named-amd.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap bd0dc61da8491cf3fd17","'use strict';\n\nvar rollbar = require('../rollbar');\n\nvar options = (typeof window !== 'undefined') && window._rollbarConfig;\nvar alias = options && options.globalAlias || 'Rollbar';\nvar shimRunning = (typeof window !== 'undefined') && window[alias] && typeof window[alias].shimId === 'function' && window[alias].shimId() !== undefined;\n\nif ((typeof window !== 'undefined') && !window._rollbarStartTime) {\n window._rollbarStartTime = (new Date()).getTime();\n}\n\nif (!shimRunning && options) {\n var Rollbar = new rollbar(options);\n window[alias] = Rollbar;\n} else if (typeof window !== 'undefined') {\n window.rollbar = rollbar;\n window._rollbarDidLoad = true;\n} else if (typeof self !== 'undefined') {\n self.rollbar = rollbar;\n self._rollbarDidLoad = true;\n}\n\nmodule.exports = rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/bundles/rollbar.js\n// module id = 1\n// module chunks = 0","'use strict';\n\nvar Client = require('../rollbar');\nvar _ = require('../utility');\nvar API = require('../api');\nvar logger = require('./logger');\nvar globals = require('./globalSetup');\n\nvar transport = require('./transport');\nvar urllib = require('./url');\n\nvar transforms = require('./transforms');\nvar sharedTransforms = require('../transforms');\nvar predicates = require('./predicates');\nvar sharedPredicates = require('../predicates');\nvar errorParser = require('./errorParser');\nvar Instrumenter = require('./telemetry');\n\nfunction Rollbar(options, client) {\n this.options = _.extend(true, defaultOptions, options);\n var api = new API(this.options, transport, urllib);\n this.client = client || new Client(this.options, api, logger, 'browser');\n\n var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n var gDocument = (typeof document != 'undefined') && document;\n addTransformsToNotifier(this.client.notifier);\n addPredicatesToQueue(this.client.queue);\n if (this.options.captureUncaught || this.options.handleUncaughtExceptions) {\n globals.captureUncaughtExceptions(gWindow, this);\n globals.wrapGlobals(gWindow, this);\n }\n if (this.options.captureUnhandledRejections || this.options.handleUnhandledRejections) {\n globals.captureUnhandledRejections(gWindow, this);\n }\n\n this.instrumenter = new Instrumenter(this.options, this.client.telemeter, this, gWindow, gDocument);\n this.instrumenter.instrument();\n}\n\nvar _instance = null;\nRollbar.init = function(options, client) {\n if (_instance) {\n return _instance.global(options).configure(options);\n }\n _instance = new Rollbar(options, client);\n return _instance;\n};\n\nfunction handleUninitialized(maybeCallback) {\n var message = 'Rollbar is not initialized';\n logger.error(message);\n if (maybeCallback) {\n maybeCallback(new Error(message));\n }\n}\n\nRollbar.prototype.global = function(options) {\n this.client.global(options);\n return this;\n};\nRollbar.global = function(options) {\n if (_instance) {\n return _instance.global(options);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.extend(true, {}, oldOptions, options, payload);\n this.client.configure(options, payloadData);\n this.instrumenter.configure(options);\n return this;\n};\nRollbar.configure = function(options, payloadData) {\n if (_instance) {\n return _instance.configure(options, payloadData);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.lastError = function() {\n return this.client.lastError;\n};\nRollbar.lastError = function() {\n if (_instance) {\n return _instance.lastError();\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.log = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.log(item);\n return {uuid: uuid};\n};\nRollbar.log = function() {\n if (_instance) {\n return _instance.log.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.debug = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.debug(item);\n return {uuid: uuid};\n};\nRollbar.debug = function() {\n if (_instance) {\n return _instance.debug.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.info = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.info(item);\n return {uuid: uuid};\n};\nRollbar.info = function() {\n if (_instance) {\n return _instance.info.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warn = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warn(item);\n return {uuid: uuid};\n};\nRollbar.warn = function() {\n if (_instance) {\n return _instance.warn.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warning = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warning(item);\n return {uuid: uuid};\n};\nRollbar.warning = function() {\n if (_instance) {\n return _instance.warning.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.error = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.error(item);\n return {uuid: uuid};\n};\nRollbar.error = function() {\n if (_instance) {\n return _instance.error.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.critical = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.critical(item);\n return {uuid: uuid};\n};\nRollbar.critical = function() {\n if (_instance) {\n return _instance.critical.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.handleUncaughtException = function(message, url, lineno, colno, error, context) {\n var item;\n var stackInfo = _.makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n 'onerror',\n 'uncaught exception',\n errorParser\n );\n if (_.isError(error)) {\n item = this._createItem([message, error, context]);\n item._unhandledStackInfo = stackInfo;\n } else if (_.isError(url)) {\n item = this._createItem([message, url, context]);\n item._unhandledStackInfo = stackInfo;\n } else {\n item = this._createItem([message, context]);\n item.stackInfo = stackInfo;\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n this.client.log(item);\n};\n\nRollbar.prototype.handleUnhandledRejection = function(reason, promise) {\n var message = 'unhandled rejection was null or undefined!';\n message = reason ? (reason.message || String(reason)) : message;\n var context = (reason && reason._rollbarContext) || (promise && promise._rollbarContext);\n\n var item;\n if (_.isError(reason)) {\n item = this._createItem([message, reason, context]);\n } else {\n item = this._createItem([message, reason, context]);\n item.stackInfo = _.makeUnhandledStackInfo(\n message,\n '',\n 0,\n 0,\n null,\n 'unhandledrejection',\n '',\n errorParser\n );\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n item._originalArgs = item._originalArgs || [];\n item._originalArgs.push(promise);\n this.client.log(item);\n};\n\nRollbar.prototype.wrap = function(f, context, _before) {\n try {\n var ctxFn;\n if(_.isFunction(context)) {\n ctxFn = context;\n } else {\n ctxFn = function() { return context || {}; };\n }\n\n if (!_.isFunction(f)) {\n return f;\n }\n\n if (f._isWrap) {\n return f;\n }\n\n if (!f._rollbar_wrapped) {\n f._rollbar_wrapped = function () {\n if (_before && _.isFunction(_before)) {\n _before.apply(this, arguments);\n }\n try {\n return f.apply(this, arguments);\n } catch(exc) {\n var e = exc;\n if (_.isType(e, 'string')) {\n e = new String(e);\n }\n e._rollbarContext = ctxFn() || {};\n e._rollbarContext._wrappedSource = f.toString();\n\n window._rollbarWrappedError = e;\n throw e;\n }\n };\n\n f._rollbar_wrapped._isWrap = true;\n\n if (f.hasOwnProperty) {\n for (var prop in f) {\n if (f.hasOwnProperty(prop)) {\n f._rollbar_wrapped[prop] = f[prop];\n }\n }\n }\n }\n\n return f._rollbar_wrapped;\n } catch (e) {\n // Return the original function if the wrap fails.\n return f;\n }\n};\nRollbar.wrap = function(f, context) {\n if (_instance) {\n return _instance.wrap(f, context);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.captureEvent = function(metadata, level) {\n return this.client.captureEvent(metadata, level);\n};\nRollbar.captureEvent = function(metadata, level) {\n if (_instance) {\n return _instance.captureEvent(metadata, level);\n } else {\n handleUninitialized();\n }\n};\n\n// The following two methods are used internally and are not meant for public use\nRollbar.prototype.captureDomContentLoaded = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureLoad(ts);\n};\n\n/* Internal */\n\nfunction addTransformsToNotifier(notifier) {\n notifier\n .addTransform(transforms.handleItemWithError)\n .addTransform(transforms.ensureItemHasSomethingToSay)\n .addTransform(transforms.addBaseInfo)\n .addTransform(transforms.addRequestInfo(window))\n .addTransform(transforms.addClientInfo(window))\n .addTransform(transforms.addPluginInfo(window))\n .addTransform(transforms.addBody)\n .addTransform(sharedTransforms.addMessageWithError)\n .addTransform(sharedTransforms.addTelemetryData)\n .addTransform(sharedTransforms.addConfigToPayload)\n .addTransform(transforms.scrubPayload)\n .addTransform(sharedTransforms.userTransform(logger))\n .addTransform(sharedTransforms.itemToPayload);\n}\n\nfunction addPredicatesToQueue(queue) {\n queue\n .addPredicate(sharedPredicates.checkLevel)\n .addPredicate(predicates.checkIgnore)\n .addPredicate(sharedPredicates.userCheckIgnore(logger))\n .addPredicate(sharedPredicates.urlIsNotBlacklisted(logger))\n .addPredicate(sharedPredicates.urlIsWhitelisted(logger))\n .addPredicate(sharedPredicates.messageIsIgnored(logger));\n}\n\nRollbar.prototype._createItem = function(args) {\n return _.createItem(args, logger, this);\n};\n\nfunction _getFirstFunction(args) {\n for (var i = 0, len = args.length; i < len; ++i) {\n if (_.isFunction(args[i])) {\n return args[i];\n }\n }\n return undefined;\n}\n\n/* global __NOTIFIER_VERSION__:false */\n/* global __DEFAULT_BROWSER_SCRUB_FIELDS__:false */\n/* global __DEFAULT_LOG_LEVEL__:false */\n/* global __DEFAULT_REPORT_LEVEL__:false */\n/* global __DEFAULT_UNCAUGHT_ERROR_LEVEL:false */\n/* global __DEFAULT_ENDPOINT__:false */\n\nvar defaultOptions = {\n version: __NOTIFIER_VERSION__,\n scrubFields: __DEFAULT_BROWSER_SCRUB_FIELDS__,\n logLevel: __DEFAULT_LOG_LEVEL__,\n reportLevel: __DEFAULT_REPORT_LEVEL__,\n uncaughtErrorLevel: __DEFAULT_UNCAUGHT_ERROR_LEVEL,\n endpoint: __DEFAULT_ENDPOINT__,\n verbose: false,\n enabled: true,\n sendConfig: false,\n includeItemsInTelemetry: true\n};\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/rollbar.js\n// module id = 2\n// module chunks = 0","'use strict';\n\nvar RateLimiter = require('./rateLimiter');\nvar Queue = require('./queue');\nvar Notifier = require('./notifier');\nvar Telemeter = require('./telemetry');\nvar _ = require('./utility');\n\n/*\n * Rollbar - the interface to Rollbar\n *\n * @param options\n * @param api\n * @param logger\n */\nfunction Rollbar(options, api, logger, platform) {\n this.options = _.extend(true, {}, options);\n this.logger = logger;\n Rollbar.rateLimiter.configureGlobal(this.options);\n Rollbar.rateLimiter.setPlatformOptions(platform, this.options);\n this.queue = new Queue(Rollbar.rateLimiter, api, logger, this.options);\n this.notifier = new Notifier(this.queue, this.options);\n this.telemeter = new Telemeter(this.options);\n this.lastError = null;\n}\n\nvar defaultOptions = {\n maxItems: 0,\n itemsPerMinute: 60\n};\n\nRollbar.rateLimiter = new RateLimiter(defaultOptions);\n\nRollbar.prototype.global = function(options) {\n Rollbar.rateLimiter.configureGlobal(options);\n return this;\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n this.notifier && this.notifier.configure(options);\n this.telemeter && this.telemeter.configure(options);\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.extend(true, {}, oldOptions, options, payload);\n this.global(this.options);\n return this;\n};\n\nRollbar.prototype.log = function(item) {\n var level = this._defaultLogLevel();\n return this._log(level, item);\n};\n\nRollbar.prototype.debug = function(item) {\n this._log('debug', item);\n};\n\nRollbar.prototype.info = function(item) {\n this._log('info', item);\n};\n\nRollbar.prototype.warn = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.warning = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.error = function(item) {\n this._log('error', item);\n};\n\nRollbar.prototype.critical = function(item) {\n this._log('critical', item);\n};\n\nRollbar.prototype.wait = function(callback) {\n this.queue.wait(callback);\n};\n\nRollbar.prototype.captureEvent = function(metadata, level) {\n return this.telemeter.captureEvent(metadata, level);\n};\n\nRollbar.prototype.captureDomContentLoaded = function(ts) {\n return this.telemeter.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(ts) {\n return this.telemeter.captureLoad(ts);\n};\n\n/* Internal */\n\nRollbar.prototype._log = function(defaultLevel, item) {\n if (this._sameAsLastError(item)) {\n if (item.callback) {\n item.callback();\n }\n return;\n }\n try {\n var callback = null;\n if (item.callback) {\n callback = item.callback;\n delete item.callback;\n }\n item.level = item.level || defaultLevel;\n this.telemeter._captureRollbarItem(item);\n item.telemetryEvents = this.telemeter.copyEvents();\n this.notifier.log(item, callback);\n } catch (e) {\n this.logger.error(e)\n }\n};\n\nRollbar.prototype._defaultLogLevel = function() {\n return this.options.logLevel || 'debug';\n};\n\nRollbar.prototype._sameAsLastError = function(item) {\n if (this.lastError && this.lastError === item.err) {\n return true;\n }\n this.lastError = item.err;\n return false;\n};\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rollbar.js\n// module id = 3\n// module chunks = 0","'use strict';\n\n/*\n * RateLimiter - an object that encapsulates the logic for counting items sent to Rollbar\n *\n * @param options - the same options that are accepted by configureGlobal offered as a convenience\n */\nfunction RateLimiter(options) {\n this.startTime = (new Date()).getTime();\n this.counter = 0;\n this.perMinCounter = 0;\n this.platform = null;\n this.platformOptions = {};\n this.configureGlobal(options);\n}\n\nRateLimiter.globalSettings = {\n startTime: (new Date()).getTime(),\n maxItems: undefined,\n itemsPerMinute: undefined\n};\n\n/*\n * configureGlobal - set the global rate limiter options\n *\n * @param options - Only the following values are recognized:\n * startTime: a timestamp of the form returned by (new Date()).getTime()\n * maxItems: the maximum items\n * itemsPerMinute: the max number of items to send in a given minute\n */\nRateLimiter.prototype.configureGlobal = function(options) {\n if (options.startTime !== undefined) {\n RateLimiter.globalSettings.startTime = options.startTime;\n }\n if (options.maxItems !== undefined) {\n RateLimiter.globalSettings.maxItems = options.maxItems;\n }\n if (options.itemsPerMinute !== undefined) {\n RateLimiter.globalSettings.itemsPerMinute = options.itemsPerMinute;\n }\n};\n\n/*\n * shouldSend - determine if we should send a given item based on rate limit settings\n *\n * @param item - the item we are about to send\n * @returns An object with the following structure:\n * error: (Error|null)\n * shouldSend: bool\n * payload: (Object|null)\n * If shouldSend is false, the item passed as a parameter should not be sent to Rollbar, and\n * exactly one of error or payload will be non-null. If error is non-null, the returned Error will\n * describe the situation, but it means that we were already over a rate limit (either globally or\n * per minute) when this item was checked. If error is null, and therefore payload is non-null, it\n * means this item put us over the global rate limit and the payload should be sent to Rollbar in\n * place of the passed in item.\n */\nRateLimiter.prototype.shouldSend = function(item, now) {\n now = now || (new Date()).getTime();\n if (now - this.startTime >= 60000) {\n this.startTime = now;\n this.perMinCounter = 0;\n }\n\n var globalRateLimit = RateLimiter.globalSettings.maxItems;\n var globalRateLimitPerMin = RateLimiter.globalSettings.itemsPerMinute;\n\n if (checkRate(item, globalRateLimit, this.counter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimit + ' max items reached', false);\n } else if (checkRate(item, globalRateLimitPerMin, this.perMinCounter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimitPerMin + ' items per minute reached', false);\n }\n this.counter++;\n this.perMinCounter++;\n\n var shouldSend = !checkRate(item, globalRateLimit, this.counter);\n var perMinute = shouldSend;\n shouldSend = shouldSend && !checkRate(item, globalRateLimitPerMin, this.perMinCounter);\n return shouldSendValue(this.platform, this.platformOptions, null, shouldSend, globalRateLimit, globalRateLimitPerMin, perMinute);\n};\n\nRateLimiter.prototype.setPlatformOptions = function(platform, options) {\n this.platform = platform;\n this.platformOptions = options;\n};\n\n/* Helpers */\n\nfunction checkRate(item, limit, counter) {\n return !item.ignoreRateLimit && limit >= 1 && counter > limit;\n}\n\nfunction shouldSendValue(platform, options, error, shouldSend, globalRateLimit, limitPerMin, perMinute) {\n var payload = null;\n if (error) {\n error = new Error(error);\n }\n if (!error && !shouldSend) {\n payload = rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute);\n }\n return {error: error, shouldSend: shouldSend, payload: payload};\n}\n\nfunction rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute) {\n var environment = options.environment || (options.payload && options.payload.environment);\n var msg;\n if (perMinute) {\n msg = 'item per minute limit reached, ignoring errors until timeout';\n } else {\n msg = 'maxItems has been hit, ignoring errors until reset.';\n }\n var item = {\n body: {\n message: {\n body: msg,\n extra: {\n maxItems: globalRateLimit,\n itemsPerMinute: limitPerMin\n }\n }\n },\n language: 'javascript',\n environment: environment,\n notifier: {\n version: (options.notifier && options.notifier.version) || options.version\n }\n };\n if (platform === 'browser') {\n item.platform = 'browser';\n item.framework = 'browser-js';\n item.notifier.name = 'rollbar-browser-js';\n } else if (platform === 'server') {\n item.framework = options.framework || 'node-js';\n item.notifier.name = options.notifier.name;\n } else if (platform === 'react-native') {\n item.framework = options.framework || 'react-native';\n item.notifier.name = options.notifier.name;\n }\n return item;\n}\n\nmodule.exports = RateLimiter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rateLimiter.js\n// module id = 4\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Queue - an object which handles which handles a queue of items to be sent to Rollbar.\n * This object handles rate limiting via a passed in rate limiter, retries based on connection\n * errors, and filtering of items based on a set of configurable predicates. The communication to\n * the backend is performed via a given API object.\n *\n * @param rateLimiter - An object which conforms to the interface\n * rateLimiter.shouldSend(item) -> bool\n * @param api - An object which conforms to the interface\n * api.postItem(payload, function(err, response))\n * @param logger - An object used to log verbose messages if desired\n * @param options - see Queue.prototype.configure\n */\nfunction Queue(rateLimiter, api, logger, options) {\n this.rateLimiter = rateLimiter;\n this.api = api;\n this.logger = logger;\n this.options = options;\n this.predicates = [];\n this.pendingItems = [];\n this.pendingRequests = [];\n this.retryQueue = [];\n this.retryHandle = null;\n this.waitCallback = null;\n this.waitIntervalID = null;\n}\n\n/*\n * configure - updates the options this queue uses\n *\n * @param options\n */\nQueue.prototype.configure = function(options) {\n this.api && this.api.configure(options);\n var oldOptions = this.options;\n this.options = _.extend(true, {}, oldOptions, options);\n return this;\n};\n\n/*\n * addPredicate - adds a predicate to the end of the list of predicates for this queue\n *\n * @param predicate - function(item, options) -> (bool|{err: Error})\n * Returning true means that this predicate passes and the item is okay to go on the queue\n * Returning false means do not add the item to the queue, but it is not an error\n * Returning {err: Error} means do not add the item to the queue, and the given error explains why\n * Returning {err: undefined} is equivalent to returning true but don't do that\n */\nQueue.prototype.addPredicate = function(predicate) {\n if (_.isFunction(predicate)) {\n this.predicates.push(predicate);\n }\n return this;\n};\n\nQueue.prototype.addPendingItem = function(item) {\n this.pendingItems.push(item);\n};\n\nQueue.prototype.removePendingItem = function(item) {\n var idx = this.pendingItems.indexOf(item);\n if (idx !== -1) {\n this.pendingItems.splice(idx, 1);\n }\n};\n\n/*\n * addItem - Send an item to the Rollbar API if all of the predicates are satisfied\n *\n * @param item - The payload to send to the backend\n * @param callback - function(error, repsonse) which will be called with the response from the API\n * in the case of a success, otherwise response will be null and error will have a value. If both\n * error and response are null then the item was stopped by a predicate which did not consider this\n * to be an error condition, but nonetheless did not send the item to the API.\n * @param originalError - The original error before any transformations that is to be logged if any\n */\nQueue.prototype.addItem = function(item, callback, originalError, originalItem) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() { return; };\n }\n var predicateResult = this._applyPredicates(item);\n if (predicateResult.stop) {\n this.removePendingItem(originalItem);\n callback(predicateResult.err);\n return;\n }\n this._maybeLog(item, originalError);\n this.removePendingItem(originalItem);\n this.pendingRequests.push(item);\n try {\n this._makeApiRequest(item, function(err, resp) {\n this._dequeuePendingRequest(item);\n callback(err, resp);\n }.bind(this));\n } catch (e) {\n this._dequeuePendingRequest(item);\n callback(e);\n }\n};\n\n/*\n * wait - Stop any further errors from being added to the queue, and get called back when all items\n * currently processing have finished sending to the backend.\n *\n * @param callback - function() called when all pending items have been sent\n */\nQueue.prototype.wait = function(callback) {\n if (!_.isFunction(callback)) {\n return;\n }\n this.waitCallback = callback;\n if (this._maybeCallWait()) {\n return;\n }\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitIntervalID = setInterval(function() {\n this._maybeCallWait();\n }.bind(this), 500);\n};\n\n/* _applyPredicates - Sequentially applies the predicates that have been added to the queue to the\n * given item with the currently configured options.\n *\n * @param item - An item in the queue\n * @returns {stop: bool, err: (Error|null)} - stop being true means do not add item to the queue,\n * the error value should be passed up to a callbak if we are stopping.\n */\nQueue.prototype._applyPredicates = function(item) {\n var p = null;\n for (var i = 0, len = this.predicates.length; i < len; i++) {\n p = this.predicates[i](item, this.options);\n if (!p || p.err !== undefined) {\n return {stop: true, err: p.err};\n }\n }\n return {stop: false, err: null};\n};\n\n/*\n * _makeApiRequest - Send an item to Rollbar, callback when done, if there is an error make an\n * effort to retry if we are configured to do so.\n *\n * @param item - an item ready to send to the backend\n * @param callback - function(err, response)\n */\nQueue.prototype._makeApiRequest = function(item, callback) {\n var rateLimitResponse = this.rateLimiter.shouldSend(item);\n if (rateLimitResponse.shouldSend) {\n this.api.postItem(item, function(err, resp) {\n if (err) {\n this._maybeRetry(err, item, callback);\n } else {\n callback(err, resp);\n }\n }.bind(this));\n } else if (rateLimitResponse.error) {\n callback(rateLimitResponse.error);\n } else {\n this.api.postItem(rateLimitResponse.payload, callback);\n }\n};\n\n// These are errors basically mean there is no internet connection\nvar RETRIABLE_ERRORS = ['ECONNRESET', 'ENOTFOUND', 'ESOCKETTIMEDOUT', 'ETIMEDOUT', 'ECONNREFUSED', 'EHOSTUNREACH', 'EPIPE', 'EAI_AGAIN'];\n\n/*\n * _maybeRetry - Given the error returned by the API, decide if we should retry or just callback\n * with the error.\n *\n * @param err - an error returned by the API transport\n * @param item - the item that was trying to be sent when this error occured\n * @param callback - function(err, response)\n */\nQueue.prototype._maybeRetry = function(err, item, callback) {\n var shouldRetry = false;\n if (this.options.retryInterval) {\n for (var i = 0, len = RETRIABLE_ERRORS.length; i < len; i++) {\n if (err.code === RETRIABLE_ERRORS[i]) {\n shouldRetry = true;\n break;\n }\n }\n }\n if (shouldRetry) {\n this._retryApiRequest(item, callback);\n } else {\n callback(err);\n }\n};\n\n/*\n * _retryApiRequest - Add an item and a callback to a queue and possibly start a timer to process\n * that queue based on the retryInterval in the options for this queue.\n *\n * @param item - an item that failed to send due to an error we deem retriable\n * @param callback - function(err, response)\n */\nQueue.prototype._retryApiRequest = function(item, callback) {\n this.retryQueue.push({item: item, callback: callback});\n\n if (!this.retryHandle) {\n this.retryHandle = setInterval(function() {\n while (this.retryQueue.length) {\n var retryObject = this.retryQueue.shift();\n this._makeApiRequest(retryObject.item, retryObject.callback);\n }\n }.bind(this), this.options.retryInterval);\n }\n};\n\n/*\n * _dequeuePendingRequest - Removes the item from the pending request queue, this queue is used to\n * enable to functionality of providing a callback that clients can pass to `wait` to be notified\n * when the pending request queue has been emptied. This must be called when the API finishes\n * processing this item. If a `wait` callback is configured, it is called by this function.\n *\n * @param item - the item previously added to the pending request queue\n */\nQueue.prototype._dequeuePendingRequest = function(item) {\n var idx = this.pendingRequests.indexOf(item);\n if (idx !== -1) {\n this.pendingRequests.splice(idx, 1);\n this._maybeCallWait();\n }\n};\n\nQueue.prototype._maybeLog = function(data, originalError) {\n if (this.logger && this.options.verbose) {\n var message = originalError;\n message = message || _.get(data, 'body.trace.exception.message');\n message = message || _.get(data, 'body.trace_chain.0.exception.message');\n if (message) {\n this.logger.error(message);\n return;\n }\n message = _.get(data, 'body.message.body');\n if (message) {\n this.logger.log(message);\n }\n }\n};\n\nQueue.prototype._maybeCallWait = function() {\n if (_.isFunction(this.waitCallback) && this.pendingItems.length === 0 && this.pendingRequests.length === 0) {\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitCallback();\n return true;\n }\n return false;\n};\n\nmodule.exports = Queue;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/queue.js\n// module id = 5\n// module chunks = 0","'use strict';\n\nvar extend = require('extend');\n\nvar RollbarJSON = {};\nvar __initRollbarJSON = false;\nfunction setupJSON() {\n if (__initRollbarJSON) {\n return;\n }\n __initRollbarJSON = true;\n\n if (isDefined(JSON)) {\n if (isNativeFunction(JSON.stringify)) {\n RollbarJSON.stringify = JSON.stringify;\n }\n if (isNativeFunction(JSON.parse)) {\n RollbarJSON.parse = JSON.parse;\n }\n }\n if (!isFunction(RollbarJSON.stringify) || !isFunction(RollbarJSON.parse)) {\n var setupCustomJSON = require('../vendor/JSON-js/json3.js');\n setupCustomJSON(RollbarJSON);\n }\n}\nsetupJSON();\n\n/*\n * isType - Given a Javascript value and a string, returns true if the type of the value matches the\n * given string.\n *\n * @param x - any value\n * @param t - a lowercase string containing one of the following type names:\n * - undefined\n * - null\n * - error\n * - number\n * - boolean\n * - string\n * - symbol\n * - function\n * - object\n * - array\n * @returns true if x is of type t, otherwise false\n */\nfunction isType(x, t) {\n return t === typeName(x);\n}\n\n/*\n * typeName - Given a Javascript value, returns the type of the object as a string\n */\nfunction typeName(x) {\n var name = typeof x;\n if (name !== 'object') {\n return name;\n }\n if (!x) {\n return 'null';\n }\n if (x instanceof Error) {\n return 'error';\n }\n return ({}).toString.call(x).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n}\n\n/* isFunction - a convenience function for checking if a value is a function\n *\n * @param f - any value\n * @returns true if f is a function, otherwise false\n */\nfunction isFunction(f) {\n return isType(f, 'function');\n}\n\n/* isNativeFunction - a convenience function for checking if a value is a native JS function\n *\n * @param f - any value\n * @returns true if f is a native JS function, otherwise false\n */\nfunction isNativeFunction(f) {\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n var funcMatchString = Function.prototype.toString.call(Object.prototype.hasOwnProperty)\n .replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?');\n var reIsNative = RegExp('^' + funcMatchString + '$');\n return isObject(f) && reIsNative.test(f);\n}\n\n/* isObject - Checks if the argument is an object\n *\n * @param value - any value\n * @returns true is value is an object function is an object)\n*/\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/*\n * isDefined - a convenience function for checking if a value is not equal to undefined\n *\n * @param u - any value\n * @returns true if u is anything other than undefined\n */\nfunction isDefined(u) {\n return !isType(u, 'undefined');\n}\n\n/*\n * isIterable - convenience function for checking if a value can be iterated, essentially\n * whether it is an object or an array.\n *\n * @param i - any value\n * @returns true if i is an object or an array as determined by `typeName`\n */\nfunction isIterable(i) {\n var type = typeName(i);\n return (type === 'object' || type === 'array');\n}\n\n/*\n * isError - convenience function for checking if a value is of an error type\n *\n * @param e - any value\n * @returns true if e is an error\n */\nfunction isError(e) {\n return isType(e, 'error');\n}\n\nfunction traverse(obj, func, seen) {\n var k, v, i;\n var isObj = isType(obj, 'object');\n var isArray = isType(obj, 'array');\n var keys = [];\n\n if (isObj && seen.indexOf(obj) !== -1) {\n return obj;\n }\n seen.push(obj);\n\n if (isObj) {\n for (k in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, k)) {\n keys.push(k);\n }\n }\n } else if (isArray) {\n for (i = 0; i < obj.length; ++i) {\n keys.push(i);\n }\n }\n\n var result = isObj ? {} : [];\n for (i = 0; i < keys.length; ++i) {\n k = keys[i];\n v = obj[k];\n result[k] = func(k, v, seen);\n }\n\n return (keys.length != 0) ? result : obj;\n}\n\nfunction redact() {\n return '********';\n}\n\n// from http://stackoverflow.com/a/8809472/1138191\nfunction uuid4() {\n var d = now();\n var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (d + Math.random() * 16) % 16 | 0;\n d = Math.floor(d / 16);\n return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16);\n });\n return uuid;\n}\n\nvar LEVELS = {\n debug: 0,\n info: 1,\n warning: 2,\n error: 3,\n critical: 4\n};\n\nfunction sanitizeUrl(url) {\n var baseUrlParts = parseUri(url);\n // remove a trailing # if there is no anchor\n if (baseUrlParts.anchor === '') {\n baseUrlParts.source = baseUrlParts.source.replace('#', '');\n }\n\n url = baseUrlParts.source.replace('?' + baseUrlParts.query, '');\n return url;\n}\n\nvar parseUriOptions = {\n strictMode: false,\n key: [\n 'source',\n 'protocol',\n 'authority',\n 'userInfo',\n 'user',\n 'password',\n 'host',\n 'port',\n 'relative',\n 'path',\n 'directory',\n 'file',\n 'query',\n 'anchor'\n ],\n q: {\n name: 'queryKey',\n parser: /(?:^|&)([^&=]*)=?([^&]*)/g\n },\n parser: {\n strict: /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,\n loose: /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/\n }\n};\n\nfunction parseUri(str) {\n if (!isType(str, 'string')) {\n throw new Error('received invalid input');\n }\n\n var o = parseUriOptions;\n var m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str);\n var uri = {};\n var i = o.key.length;\n\n while (i--) {\n uri[o.key[i]] = m[i] || '';\n }\n\n uri[o.q.name] = {};\n uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {\n if ($1) {\n uri[o.q.name][$1] = $2;\n }\n });\n\n return uri;\n}\n\nfunction addParamsAndAccessTokenToPath(accessToken, options, params) {\n params = params || {};\n params.access_token = accessToken;\n var paramsArray = [];\n var k;\n for (k in params) {\n if (Object.prototype.hasOwnProperty.call(params, k)) {\n paramsArray.push([k, params[k]].join('='));\n }\n }\n var query = '?' + paramsArray.sort().join('&');\n\n options = options || {};\n options.path = options.path || '';\n var qs = options.path.indexOf('?');\n var h = options.path.indexOf('#');\n var p;\n if (qs !== -1 && (h === -1 || h > qs)) {\n p = options.path;\n options.path = p.substring(0,qs) + query + '&' + p.substring(qs+1);\n } else {\n if (h !== -1) {\n p = options.path;\n options.path = p.substring(0,h) + query + p.substring(h);\n } else {\n options.path = options.path + query;\n }\n }\n}\n\nfunction formatUrl(u, protocol) {\n protocol = protocol || u.protocol;\n if (!protocol && u.port) {\n if (u.port === 80) {\n protocol = 'http:';\n } else if (u.port === 443) {\n protocol = 'https:';\n }\n }\n protocol = protocol || 'https:';\n\n if (!u.hostname) {\n return null;\n }\n var result = protocol + '//' + u.hostname;\n if (u.port) {\n result = result + ':' + u.port;\n }\n if (u.path) {\n result = result + u.path;\n }\n return result;\n}\n\nfunction stringify(obj, backup) {\n var value, error;\n try {\n value = RollbarJSON.stringify(obj);\n } catch (jsonError) {\n if (backup && isFunction(backup)) {\n try {\n value = backup(obj);\n } catch (backupError) {\n error = backupError;\n }\n } else {\n error = jsonError;\n }\n }\n return {error: error, value: value};\n}\n\nfunction jsonParse(s) {\n var value, error;\n try {\n value = RollbarJSON.parse(s);\n } catch (e) {\n error = e;\n }\n return {error: error, value: value};\n}\n\nfunction makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n mode,\n backupMessage,\n errorParser\n) {\n var location = {\n url: url || '',\n line: lineno,\n column: colno\n };\n location.func = errorParser.guessFunctionName(location.url, location.line);\n location.context = errorParser.gatherContext(location.url, location.line);\n var href = document && document.location && document.location.href;\n var useragent = window && window.navigator && window.navigator.userAgent;\n return {\n 'mode': mode,\n 'message': error ? String(error) : (message || backupMessage),\n 'url': href,\n 'stack': [location],\n 'useragent': useragent\n };\n}\n\nfunction wrapCallback(logger, f) {\n return function(err, resp) {\n try {\n f(err, resp);\n } catch (e) {\n logger.error(e);\n }\n };\n}\n\nfunction createItem(args, logger, notifier, requestKeys, lambdaContext) {\n var message, err, custom, callback, request;\n var arg;\n var extraArgs = [];\n\n for (var i = 0, l = args.length; i < l; ++i) {\n arg = args[i];\n\n var typ = typeName(arg);\n switch (typ) {\n case 'undefined':\n break;\n case 'string':\n message ? extraArgs.push(arg) : message = arg;\n break;\n case 'function':\n callback = wrapCallback(logger, arg);\n break;\n case 'date':\n extraArgs.push(arg);\n break;\n case 'error':\n case 'domexception':\n err ? extraArgs.push(arg) : err = arg;\n break;\n case 'object':\n case 'array':\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n if (requestKeys && typ === 'object' && !request) {\n for (var j = 0, len = requestKeys.length; j < len; ++j) {\n if (arg[requestKeys[j]] !== undefined) {\n request = arg;\n break;\n }\n }\n if (request) {\n break;\n }\n }\n custom ? extraArgs.push(arg) : custom = arg;\n break;\n default:\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n extraArgs.push(arg);\n }\n }\n\n if (extraArgs.length > 0) {\n // if custom is an array this turns it into an object with integer keys\n custom = extend(true, {}, custom);\n custom.extraArgs = extraArgs;\n }\n\n var item = {\n message: message,\n err: err,\n custom: custom,\n timestamp: now(),\n callback: callback,\n uuid: uuid4()\n };\n if (custom && custom.level !== undefined) {\n item.level = custom.level;\n delete custom.level;\n }\n if (requestKeys && request) {\n item.request = request;\n }\n if (lambdaContext) {\n item.lambdaContext = lambdaContext;\n }\n item._originalArgs = args;\n return item;\n}\n\n/*\n * get - given an obj/array and a keypath, return the value at that keypath or\n * undefined if not possible.\n *\n * @param obj - an object or array\n * @param path - a string of keys separated by '.' such as 'plugin.jquery.0.message'\n * which would correspond to 42 in `{plugin: {jquery: [{message: 42}]}}`\n */\nfunction get(obj, path) {\n if (!obj) {\n return undefined;\n }\n var keys = path.split('.');\n var result = obj;\n try {\n for (var i = 0, len = keys.length; i < len; ++i) {\n result = result[keys[i]];\n }\n } catch (e) {\n result = undefined;\n }\n return result;\n}\n\nfunction set(obj, path, value) {\n if (!obj) {\n return;\n }\n var keys = path.split('.');\n var len = keys.length;\n if (len < 1) {\n return;\n }\n if (len === 1) {\n obj[keys[0]] = value;\n return;\n }\n try {\n var temp = obj[keys[0]] || {};\n var replacement = temp;\n for (var i = 1; i < len-1; i++) {\n temp[keys[i]] = temp[keys[i]] || {};\n temp = temp[keys[i]];\n }\n temp[keys[len-1]] = value;\n obj[keys[0]] = replacement;\n } catch (e) {\n return;\n }\n}\n\nfunction scrub(data, scrubFields) {\n scrubFields = scrubFields || [];\n var paramRes = _getScrubFieldRegexs(scrubFields);\n var queryRes = _getScrubQueryParamRegexs(scrubFields);\n\n function redactQueryParam(dummy0, paramPart, dummy1, dummy2, dummy3, valPart) {\n return paramPart + redact(valPart);\n }\n\n function paramScrubber(v) {\n var i;\n if (isType(v, 'string')) {\n for (i = 0; i < queryRes.length; ++i) {\n v = v.replace(queryRes[i], redactQueryParam);\n }\n }\n return v;\n }\n\n function valScrubber(k, v) {\n var i;\n for (i = 0; i < paramRes.length; ++i) {\n if (paramRes[i].test(k)) {\n v = redact(v);\n break;\n }\n }\n return v;\n }\n\n function scrubber(k, v, seen) {\n var tmpV = valScrubber(k, v);\n if (tmpV === v) {\n if (isType(v, 'object') || isType(v, 'array')) {\n return traverse(v, scrubber, seen);\n }\n return paramScrubber(tmpV);\n } else {\n return tmpV;\n }\n }\n\n return traverse(data, scrubber, []);\n}\n\nfunction _getScrubFieldRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '^\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?$';\n ret.push(new RegExp(pat, 'i'));\n }\n return ret;\n}\n\n\nfunction _getScrubQueryParamRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?';\n ret.push(new RegExp('(' + pat + '=)([^&\\\\n]+)', 'igm'));\n }\n return ret;\n}\n\nfunction formatArgsAsString(args) {\n var i, len, arg;\n var result = [];\n for (i = 0, len = args.length; i < len; i++) {\n arg = args[i];\n if (typeof arg === 'object') {\n arg = stringify(arg);\n arg = arg.error || arg.value;\n if (arg.length > 500)\n arg = arg.substr(0,500)+'...';\n } else if (typeof arg === 'undefined') {\n arg = 'undefined';\n }\n result.push(arg);\n }\n return result.join(' ');\n}\n\nfunction now() {\n if (Date.now) {\n return +Date.now();\n }\n return +new Date();\n}\n\nmodule.exports = {\n isType: isType,\n typeName: typeName,\n isFunction: isFunction,\n isNativeFunction: isNativeFunction,\n isIterable: isIterable,\n isError: isError,\n extend: extend,\n traverse: traverse,\n redact: redact,\n uuid4: uuid4,\n LEVELS: LEVELS,\n sanitizeUrl: sanitizeUrl,\n addParamsAndAccessTokenToPath: addParamsAndAccessTokenToPath,\n formatUrl: formatUrl,\n stringify: stringify,\n jsonParse: jsonParse,\n makeUnhandledStackInfo: makeUnhandledStackInfo,\n createItem: createItem,\n get: get,\n set: set,\n scrub: scrub,\n formatArgsAsString: formatArgsAsString,\n now: now\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/utility.js\n// module id = 6\n// module chunks = 0","'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) {/**/}\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[0],\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t} else if ((typeof target !== 'object' && typeof target !== 'function') || target == null) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = target[name];\n\t\t\t\tcopy = options[name];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\ttarget[name] = extend(deep, clone, copy);\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/extend/index.js\n// module id = 7\n// module chunks = 0","// json3.js\n// 2017-02-21\n// Public Domain.\n// NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n// See http://www.JSON.org/js.html\n// This code should be minified before deployment.\n// See http://javascript.crockford.com/jsmin.html\n\n// USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n// NOT CONTROL.\n\n// This file creates a global JSON object containing two methods: stringify\n// and parse. This file provides the ES5 JSON capability to ES3 systems.\n// If a project might run on IE8 or earlier, then this file should be included.\n// This file does nothing on ES5 systems.\n\n// JSON.stringify(value, replacer, space)\n// value any JavaScript value, usually an object or array.\n// replacer an optional parameter that determines how object\n// values are stringified for objects. It can be a\n// function or an array of strings.\n// space an optional parameter that specifies the indentation\n// of nested structures. If it is omitted, the text will\n// be packed without extra whitespace. If it is a number,\n// it will specify the number of spaces to indent at each\n// level. If it is a string (such as \"\\t\" or \" \"),\n// it contains the characters used to indent at each level.\n// This method produces a JSON text from a JavaScript value.\n// When an object value is found, if the object contains a toJSON\n// method, its toJSON method will be called and the result will be\n// stringified. A toJSON method does not serialize: it returns the\n// value represented by the name/value pair that should be serialized,\n// or undefined if nothing should be serialized. The toJSON method\n// will be passed the key associated with the value, and this will be\n// bound to the value.\n\n// For example, this would serialize Dates as ISO strings.\n\n// Date.prototype.toJSON = function (key) {\n// function f(n) {\n// // Format integers to have at least two digits.\n// return (n < 10)\n// ? \"0\" + n\n// : n;\n// }\n// return this.getUTCFullYear() + \"-\" +\n// f(this.getUTCMonth() + 1) + \"-\" +\n// f(this.getUTCDate()) + \"T\" +\n// f(this.getUTCHours()) + \":\" +\n// f(this.getUTCMinutes()) + \":\" +\n// f(this.getUTCSeconds()) + \"Z\";\n// };\n\n// You can provide an optional replacer method. It will be passed the\n// key and value of each member, with this bound to the containing\n// object. The value that is returned from your method will be\n// serialized. If your method returns undefined, then the member will\n// be excluded from the serialization.\n\n// If the replacer parameter is an array of strings, then it will be\n// used to select the members to be serialized. It filters the results\n// such that only members with keys listed in the replacer array are\n// stringified.\n\n// Values that do not have JSON representations, such as undefined or\n// functions, will not be serialized. Such values in objects will be\n// dropped; in arrays they will be replaced with null. You can use\n// a replacer function to replace those with JSON values.\n\n// JSON.stringify(undefined) returns undefined.\n\n// The optional space parameter produces a stringification of the\n// value that is filled with line breaks and indentation to make it\n// easier to read.\n\n// If the space parameter is a non-empty string, then that string will\n// be used for indentation. If the space parameter is a number, then\n// the indentation will be that many spaces.\n\n// Example:\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}]);\n// // text is '[\"e\",{\"pluribus\":\"unum\"}]'\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}], null, \"\\t\");\n// // text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\n\n// text = JSON.stringify([new Date()], function (key, value) {\n// return this[key] instanceof Date\n// ? \"Date(\" + this[key] + \")\"\n// : value;\n// });\n// // text is '[\"Date(---current time---)\"]'\n\n// JSON.parse(text, reviver)\n// This method parses a JSON text to produce an object or array.\n// It can throw a SyntaxError exception.\n// This has been modified to use JSON-js/json_parse_state.js as the\n// parser instead of the one built around eval found in JSON-js/json2.js\n\n// The optional reviver parameter is a function that can filter and\n// transform the results. It receives each of the keys and values,\n// and its return value is used instead of the original value.\n// If it returns what it received, then the structure is not modified.\n// If it returns undefined then the member is deleted.\n\n// Example:\n\n// // Parse the text. Values that look like ISO date strings will\n// // be converted to Date objects.\n\n// myData = JSON.parse(text, function (key, value) {\n// var a;\n// if (typeof value === \"string\") {\n// a =\n// /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n// if (a) {\n// return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n// +a[5], +a[6]));\n// }\n// }\n// return value;\n// });\n\n// myData = JSON.parse('[\"Date(09/09/2001)\"]', function (key, value) {\n// var d;\n// if (typeof value === \"string\" &&\n// value.slice(0, 5) === \"Date(\" &&\n// value.slice(-1) === \")\") {\n// d = new Date(value.slice(5, -1));\n// if (d) {\n// return d;\n// }\n// }\n// return value;\n// });\n\n// This is a reference implementation. You are free to copy, modify, or\n// redistribute.\n\n/*jslint\n for, this\n */\n\n/*property\n JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\n getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\n lastIndex, length, parse, prototype, push, replace, slice, stringify,\n test, toJSON, toString, valueOf\n */\n\nvar setupCustomJSON = function(JSON) {\n\n var rx_one = /^[\\],:{}\\s]*$/;\n var rx_two = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g;\n var rx_three = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\n var rx_four = /(?:^|:|,)(?:\\s*\\[)+/g;\n var rx_escapable = /[\\\\\"\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n var rx_dangerous = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\n function f(n) {\n // Format integers to have at least two digits.\n return n < 10\n ? \"0\" + n\n : n;\n }\n\n function this_value() {\n return this.valueOf();\n }\n\n if (typeof Date.prototype.toJSON !== \"function\") {\n\n Date.prototype.toJSON = function () {\n\n return isFinite(this.valueOf())\n ? this.getUTCFullYear() + \"-\" +\n f(this.getUTCMonth() + 1) + \"-\" +\n f(this.getUTCDate()) + \"T\" +\n f(this.getUTCHours()) + \":\" +\n f(this.getUTCMinutes()) + \":\" +\n f(this.getUTCSeconds()) + \"Z\"\n : null;\n };\n\n Boolean.prototype.toJSON = this_value;\n Number.prototype.toJSON = this_value;\n String.prototype.toJSON = this_value;\n }\n\n var gap;\n var indent;\n var meta;\n var rep;\n\n\n function quote(string) {\n\n // If the string contains no control characters, no quote characters, and no\n // backslash characters, then we can safely slap some quotes around it.\n // Otherwise we must also replace the offending characters with safe escape\n // sequences.\n\n rx_escapable.lastIndex = 0;\n return rx_escapable.test(string)\n ? \"\\\"\" + string.replace(rx_escapable, function (a) {\n var c = meta[a];\n return typeof c === \"string\"\n ? c\n : \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n }) + \"\\\"\"\n : \"\\\"\" + string + \"\\\"\";\n }\n\n\n function str(key, holder) {\n\n // Produce a string from holder[key].\n\n var i; // The loop counter.\n var k; // The member key.\n var v; // The member value.\n var length;\n var mind = gap;\n var partial;\n var value = holder[key];\n\n // If the value has a toJSON method, call it to obtain a replacement value.\n\n if (value && typeof value === \"object\" &&\n typeof value.toJSON === \"function\") {\n value = value.toJSON(key);\n }\n\n // If we were called with a replacer function, then call the replacer to\n // obtain a replacement value.\n\n if (typeof rep === \"function\") {\n value = rep.call(holder, key, value);\n }\n\n // What happens next depends on the value's type.\n\n switch (typeof value) {\n case \"string\":\n return quote(value);\n\n case \"number\":\n\n // JSON numbers must be finite. Encode non-finite numbers as null.\n\n return isFinite(value)\n ? String(value)\n : \"null\";\n\n case \"boolean\":\n case \"null\":\n\n // If the value is a boolean or null, convert it to a string. Note:\n // typeof null does not produce \"null\". The case is included here in\n // the remote chance that this gets fixed someday.\n\n return String(value);\n\n // If the type is \"object\", we might be dealing with an object or an array or\n // null.\n\n case \"object\":\n\n // Due to a specification blunder in ECMAScript, typeof null is \"object\",\n // so watch out for that case.\n\n if (!value) {\n return \"null\";\n }\n\n // Make an array to hold the partial results of stringifying this object value.\n\n gap += indent;\n partial = [];\n\n // Is the value an array?\n\n if (Object.prototype.toString.apply(value) === \"[object Array]\") {\n\n // The value is an array. Stringify every element. Use null as a placeholder\n // for non-JSON values.\n\n length = value.length;\n for (i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || \"null\";\n }\n\n // Join all of the elements together, separated with commas, and wrap them in\n // brackets.\n\n v = partial.length === 0\n ? \"[]\"\n : gap\n ? \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\"\n : \"[\" + partial.join(\",\") + \"]\";\n gap = mind;\n return v;\n }\n\n // If the replacer is an array, use it to select the members to be stringified.\n\n if (rep && typeof rep === \"object\") {\n length = rep.length;\n for (i = 0; i < length; i += 1) {\n if (typeof rep[i] === \"string\") {\n k = rep[i];\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n } else {\n\n // Otherwise, iterate through all of the keys in the object.\n\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n }\n\n // Join all of the member texts together, separated with commas,\n // and wrap them in braces.\n\n v = partial.length === 0\n ? \"{}\"\n : gap\n ? \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\"\n : \"{\" + partial.join(\",\") + \"}\";\n gap = mind;\n return v;\n }\n }\n\n // If the JSON object does not yet have a stringify method, give it one.\n\n if (typeof JSON.stringify !== \"function\") {\n meta = { // table of character substitutions\n \"\\b\": \"\\\\b\",\n \"\\t\": \"\\\\t\",\n \"\\n\": \"\\\\n\",\n \"\\f\": \"\\\\f\",\n \"\\r\": \"\\\\r\",\n \"\\\"\": \"\\\\\\\"\",\n \"\\\\\": \"\\\\\\\\\"\n };\n JSON.stringify = function (value, replacer, space) {\n\n // The stringify method takes a value and an optional replacer, and an optional\n // space parameter, and returns a JSON text. The replacer can be a function\n // that can replace values, or an array of strings that will select the keys.\n // A default replacer method can be provided. Use of the space parameter can\n // produce text that is more easily readable.\n\n var i;\n gap = \"\";\n indent = \"\";\n\n // If the space parameter is a number, make an indent string containing that\n // many spaces.\n\n if (typeof space === \"number\") {\n for (i = 0; i < space; i += 1) {\n indent += \" \";\n }\n\n // If the space parameter is a string, it will be used as the indent string.\n\n } else if (typeof space === \"string\") {\n indent = space;\n }\n\n // If there is a replacer, it must be a function or an array.\n // Otherwise, throw an error.\n\n rep = replacer;\n if (replacer && typeof replacer !== \"function\" &&\n (typeof replacer !== \"object\" ||\n typeof replacer.length !== \"number\")) {\n throw new Error(\"JSON.stringify\");\n }\n\n // Make a fake root object containing our value under the key of \"\".\n // Return the result of stringifying the value.\n\n return str(\"\", {\"\": value});\n };\n }\n\n\n // If the JSON object does not yet have a parse method, give it one.\n\n if (typeof JSON.parse !== \"function\") {\n JSON.parse = (function () {\n\n // This function creates a JSON parse function that uses a state machine rather\n // than the dangerous eval function to parse a JSON text.\n\n var state; // The state of the parser, one of\n // 'go' The starting state\n // 'ok' The final, accepting state\n // 'firstokey' Ready for the first key of the object or\n // the closing of an empty object\n // 'okey' Ready for the next key of the object\n // 'colon' Ready for the colon\n // 'ovalue' Ready for the value half of a key/value pair\n // 'ocomma' Ready for a comma or closing }\n // 'firstavalue' Ready for the first value of an array or\n // an empty array\n // 'avalue' Ready for the next value of an array\n // 'acomma' Ready for a comma or closing ]\n var stack; // The stack, for controlling nesting.\n var container; // The current container object or array\n var key; // The current key\n var value; // The current value\n var escapes = { // Escapement translation table\n \"\\\\\": \"\\\\\",\n \"\\\"\": \"\\\"\",\n \"/\": \"/\",\n \"t\": \"\\t\",\n \"n\": \"\\n\",\n \"r\": \"\\r\",\n \"f\": \"\\f\",\n \"b\": \"\\b\"\n };\n var string = { // The actions for string tokens\n go: function () {\n state = \"ok\";\n },\n firstokey: function () {\n key = value;\n state = \"colon\";\n },\n okey: function () {\n key = value;\n state = \"colon\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var number = { // The actions for number tokens\n go: function () {\n state = \"ok\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var action = {\n\n // The action table describes the behavior of the machine. It contains an\n // object for each token. Each object contains a method that is called when\n // a token is matched in a state. An object will lack a method for illegal\n // states.\n\n \"{\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = {};\n state = \"firstokey\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = {};\n state = \"firstokey\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n }\n },\n \"}\": {\n firstokey: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n ocomma: function () {\n var pop = stack.pop();\n container[key] = value;\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \"[\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = [];\n state = \"firstavalue\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = [];\n state = \"firstavalue\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n }\n },\n \"]\": {\n firstavalue: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n acomma: function () {\n var pop = stack.pop();\n container.push(value);\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \":\": {\n colon: function () {\n if (Object.hasOwnProperty.call(container, key)) {\n throw new SyntaxError(\"Duplicate key '\" + key + \"\\\"\");\n }\n state = \"ovalue\";\n }\n },\n \",\": {\n ocomma: function () {\n container[key] = value;\n state = \"okey\";\n },\n acomma: function () {\n container.push(value);\n state = \"avalue\";\n }\n },\n \"true\": {\n go: function () {\n value = true;\n state = \"ok\";\n },\n ovalue: function () {\n value = true;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = true;\n state = \"acomma\";\n },\n avalue: function () {\n value = true;\n state = \"acomma\";\n }\n },\n \"false\": {\n go: function () {\n value = false;\n state = \"ok\";\n },\n ovalue: function () {\n value = false;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = false;\n state = \"acomma\";\n },\n avalue: function () {\n value = false;\n state = \"acomma\";\n }\n },\n \"null\": {\n go: function () {\n value = null;\n state = \"ok\";\n },\n ovalue: function () {\n value = null;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = null;\n state = \"acomma\";\n },\n avalue: function () {\n value = null;\n state = \"acomma\";\n }\n }\n };\n\n function debackslashify(text) {\n\n // Remove and replace any backslash escapement.\n\n return text.replace(/\\\\(?:u(.{4})|([^u]))/g, function (ignore, b, c) {\n return b\n ? String.fromCharCode(parseInt(b, 16))\n : escapes[c];\n });\n }\n\n return function (source, reviver) {\n\n // A regular expression is used to extract tokens from the JSON text.\n // The extraction process is cautious.\n\n var result;\n var tx = /^[\\u0020\\t\\n\\r]*(?:([,:\\[\\]{}]|true|false|null)|(-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)|\"((?:[^\\r\\n\\t\\\\\\\"]|\\\\(?:[\"\\\\\\/trnfb]|u[0-9a-fA-F]{4}))*)\")/;\n\n // Set the starting state.\n\n state = \"go\";\n\n // The stack records the container, key, and state for each object or array\n // that contains another object or array while processing nested structures.\n\n stack = [];\n\n // If any error occurs, we will catch it and ultimately throw a syntax error.\n\n try {\n\n // For each token...\n\n while (true) {\n result = tx.exec(source);\n if (!result) {\n break;\n }\n\n // result is the result array from matching the tokenizing regular expression.\n // result[0] contains everything that matched, including any initial whitespace.\n // result[1] contains any punctuation that was matched, or true, false, or null.\n // result[2] contains a matched number, still in string form.\n // result[3] contains a matched string, without quotes but with escapement.\n\n if (result[1]) {\n\n // Token: Execute the action for this state and token.\n\n action[result[1]][state]();\n\n } else if (result[2]) {\n\n // Number token: Convert the number string into a number value and execute\n // the action for this state and number.\n\n value = +result[2];\n number[state]();\n } else {\n\n // String token: Replace the escapement sequences and execute the action for\n // this state and string.\n\n value = debackslashify(result[3]);\n string[state]();\n }\n\n // Remove the token from the string. The loop will continue as long as there\n // are tokens. This is a slow process, but it allows the use of ^ matching,\n // which assures that no illegal tokens slip through.\n\n source = source.slice(result[0].length);\n }\n\n // If we find a state/token combination that is illegal, then the action will\n // cause an error. We handle the error by simply changing the state.\n\n } catch (e) {\n state = e;\n }\n\n // The parsing is finished. If we are not in the final \"ok\" state, or if the\n // remaining source contains anything except whitespace, then we did not have\n //a well-formed JSON text.\n\n if (state !== \"ok\" || (/[^\\u0020\\t\\n\\r]/.test(source))) {\n throw (state instanceof SyntaxError)\n ? state\n : new SyntaxError(\"JSON\");\n }\n\n // If there is a reviver function, we recursively walk the new structure,\n // passing each name/value pair to the reviver function for possible\n // transformation, starting with a temporary root object that holds the current\n // value in an empty key. If there is not a reviver function, we simply return\n // that value.\n\n return (typeof reviver === \"function\")\n ? (function walk(holder, key) {\n var k;\n var v;\n var val = holder[key];\n if (val && typeof val === \"object\") {\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(val, k)) {\n v = walk(val, k);\n if (v !== undefined) {\n val[k] = v;\n } else {\n delete val[k];\n }\n }\n }\n }\n return reviver.call(holder, key, val);\n }({\"\": value}, \"\"))\n : value;\n };\n }());\n }\n}\n\nmodule.exports = setupCustomJSON;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./vendor/JSON-js/json3.js\n// module id = 8\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Notifier - the internal object responsible for delegating between the client exposed API, the\n * chain of transforms necessary to turn an item into something that can be sent to Rollbar, and the\n * queue which handles the communcation with the Rollbar API servers.\n *\n * @param queue - an object that conforms to the interface: addItem(item, callback)\n * @param options - an object representing the options to be set for this notifier, this should have\n * any defaults already set by the caller\n */\nfunction Notifier(queue, options) {\n this.queue = queue;\n this.options = options;\n this.transforms = [];\n}\n\n/*\n * configure - updates the options for this notifier with the passed in object\n *\n * @param options - an object which gets merged with the current options set on this notifier\n * @returns this\n */\nNotifier.prototype.configure = function(options) {\n this.queue && this.queue.configure(options);\n var oldOptions = this.options;\n this.options = _.extend(true, {}, oldOptions, options);\n return this;\n};\n\n/*\n * addTransform - adds a transform onto the end of the queue of transforms for this notifier\n *\n * @param transform - a function which takes three arguments:\n * * item: An Object representing the data to eventually be sent to Rollbar\n * * options: The current value of the options for this notifier\n * * callback: function(err: (Null|Error), item: (Null|Object)) the transform must call this\n * callback with a null value for error if it wants the processing chain to continue, otherwise\n * with an error to terminate the processing. The item should be the updated item after this\n * transform is finished modifying it.\n */\nNotifier.prototype.addTransform = function(transform) {\n if (_.isFunction(transform)) {\n this.transforms.push(transform);\n }\n return this;\n};\n\n/*\n * log - the internal log function which applies the configured transforms and then pushes onto the\n * queue to be sent to the backend.\n *\n * @param item - An object with the following structure:\n * message [String] - An optional string to be sent to rollbar\n * error [Error] - An optional error\n *\n * @param callback - A function of type function(err, resp) which will be called with exactly one\n * null argument and one non-null argument. The callback will be called once, either during the\n * transform stage if an error occurs inside a transform, or in response to the communication with\n * the backend. The second argument will be the response from the backend in case of success.\n */\nNotifier.prototype.log = function(item, callback) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!this.options.enabled) {\n return callback(new Error('Rollbar is not enabled'));\n }\n\n this.queue.addPendingItem(item);\n var originalError = item.err;\n this._applyTransforms(item, function(err, i) {\n if (err) {\n this.queue.removePendingItem(item);\n return callback(err, null);\n }\n this.queue.addItem(i, callback, originalError, item);\n }.bind(this));\n};\n\n/* Internal */\n\n/*\n * _applyTransforms - Applies the transforms that have been added to this notifier sequentially. See\n * `addTransform` for more information.\n *\n * @param item - An item to be transformed\n * @param callback - A function of type function(err, item) which will be called with a non-null\n * error and a null item in the case of a transform failure, or a null error and non-null item after\n * all transforms have been applied.\n */\nNotifier.prototype._applyTransforms = function(item, callback) {\n var transformIndex = -1;\n var transformsLength = this.transforms.length;\n var transforms = this.transforms;\n var options = this.options;\n\n var cb = function(err, i) {\n if (err) {\n callback(err, null);\n return;\n }\n\n transformIndex++;\n\n if (transformIndex === transformsLength) {\n callback(null, i);\n return;\n }\n\n transforms[transformIndex](i, options, cb);\n };\n\n cb(null, item);\n};\n\nmodule.exports = Notifier;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/notifier.js\n// module id = 9\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nvar MAX_EVENTS = 100;\n\nfunction Telemeter(options) {\n this.queue = [];\n this.options = _.extend(true, {}, options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n this.maxQueueSize = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n}\n\nTelemeter.prototype.configure = function(options) {\n var oldOptions = this.options;\n this.options = _.extend(true, {}, oldOptions, options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n var newMaxEvents = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n var deleteCount = 0;\n if (this.maxQueueSize > newMaxEvents) {\n deleteCount = this.maxQueueSize - newMaxEvents;\n }\n this.maxQueueSize = newMaxEvents;\n this.queue.splice(0, deleteCount);\n};\n\nTelemeter.prototype.copyEvents = function() {\n return Array.prototype.slice.call(this.queue, 0);\n};\n\nTelemeter.prototype.capture = function(type, metadata, level, rollbarUUID, timestamp) {\n var e = {\n level: getLevel(type, level),\n type: type,\n timestamp_ms: timestamp || _.now(),\n body: metadata,\n source: 'client'\n };\n if (rollbarUUID) {\n e.uuid = rollbarUUID;\n }\n\n try {\n if (_.isFunction(this.options.filterTelemetry) && this.options.filterTelemetry(e)) {\n return false;\n }\n } catch (e) {\n this.options.filterTelemetry = null;\n }\n\n this.push(e);\n return e;\n};\n\nTelemeter.prototype.captureEvent = function(metadata, level, rollbarUUID) {\n return this.capture('manual', metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.captureError = function(err, level, rollbarUUID, timestamp) {\n var metadata = {\n message: err.message || String(err)\n };\n if (err.stack) {\n metadata.stack = err.stack;\n }\n return this.capture('error', metadata, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureLog = function(message, level, rollbarUUID, timestamp) {\n return this.capture('log', {\n message: message\n }, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureNetwork = function(metadata, subtype, rollbarUUID, requestData) {\n subtype = subtype || 'xhr';\n metadata.subtype = metadata.subtype || subtype;\n if (requestData) {\n metadata.request = requestData;\n }\n var level = this.levelFromStatus(metadata.status_code);\n return this.capture('network', metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.levelFromStatus = function(statusCode) {\n if (statusCode >= 200 && statusCode < 400) {\n return 'info';\n }\n if (statusCode === 0 || statusCode >= 400) {\n return 'error';\n }\n return 'info';\n};\n\nTelemeter.prototype.captureDom = function(subtype, element, value, checked, rollbarUUID) {\n var metadata = {\n subtype: subtype,\n element: element\n };\n if (value !== undefined) {\n metadata.value = value;\n }\n if (checked !== undefined) {\n metadata.checked = checked;\n }\n return this.capture('dom', metadata, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureNavigation = function(from, to, rollbarUUID) {\n return this.capture('navigation', {from: from, to: to}, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureDomContentLoaded = function(ts) {\n return this.capture('navigation', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n */\n};\nTelemeter.prototype.captureLoad = function(ts) {\n return this.capture('navigation', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n */\n};\n\nTelemeter.prototype.captureConnectivityChange = function(type, rollbarUUID) {\n return this.captureNetwork({change: type}, 'connectivity', rollbarUUID);\n};\n\n// Only intended to be used internally by the notifier\nTelemeter.prototype._captureRollbarItem = function(item) {\n if (!this.options.includeItemsInTelemetry) {\n return;\n }\n if (item.err) {\n return this.captureError(item.err, item.level, item.uuid, item.timestamp);\n }\n if (item.message) {\n return this.captureLog(item.message, item.level, item.uuid, item.timestamp);\n }\n if (item.custom) {\n return this.capture('log', item.custom, item.level, item.uuid, item.timestamp);\n }\n};\n\nTelemeter.prototype.push = function(e) {\n this.queue.push(e);\n if (this.queue.length > this.maxQueueSize) {\n this.queue.shift();\n }\n};\n\nfunction getLevel(type, level) {\n if (level) {\n return level;\n }\n var defaultLevel = {\n error: 'error',\n manual: 'info'\n };\n return defaultLevel[type] || 'info';\n}\n\nmodule.exports = Telemeter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/telemetry.js\n// module id = 10\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\nvar helpers = require('./apiUtility');\n\nvar defaultOptions = {\n hostname: 'api.rollbar.com',\n path: '/api/1/item/',\n search: null,\n version: '1',\n protocol: 'https:',\n port: 443\n};\n\n/**\n * Api is an object that encapsulates methods of communicating with\n * the Rollbar API. It is a standard interface with some parts implemented\n * differently for server or browser contexts. It is an object that should\n * be instantiated when used so it can contain non-global options that may\n * be different for another instance of RollbarApi.\n *\n * @param options {\n * accessToken: the accessToken to use for posting items to rollbar\n * endpoint: an alternative endpoint to send errors to\n * must be a valid, fully qualified URL.\n * The default is: https://api.rollbar.com/api/1/item\n * proxy: if you wish to proxy requests provide an object\n * with the following keys:\n * host or hostname (required): foo.example.com\n * port (optional): 123\n * protocol (optional): https\n * }\n */\nfunction Api(options, t, u, j) {\n this.options = options;\n this.transport = t;\n this.url = u;\n this.jsonBackup = j;\n this.accessToken = options.accessToken;\n this.transportOptions = _getTransport(options, u);\n}\n\n/**\n *\n * @param data\n * @param callback\n */\nApi.prototype.postItem = function(data, callback) {\n var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n this.transport.post(this.accessToken, transportOptions, payload, callback);\n};\n\nApi.prototype.configure = function(options) {\n var oldOptions = this.oldOptions;\n this.options = _.extend(true, {}, oldOptions, options);\n this.transportOptions = _getTransport(this.options, this.url);\n if (this.options.accessToken !== undefined) {\n this.accessToken = this.options.accessToken;\n }\n return this;\n};\n\nfunction _getTransport(options, url) {\n return helpers.getTransportFromOptions(options, defaultOptions, url);\n}\n\nmodule.exports = Api;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/api.js\n// module id = 11\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction buildPayload(accessToken, data, jsonBackup) {\n if (!_.isType(data.context, 'string')) {\n var contextResult = _.stringify(data.context, jsonBackup);\n if (contextResult.error) {\n data.context = 'Error: could not serialize \\'context\\'';\n } else {\n data.context = contextResult.value || '';\n }\n if (data.context.length > 255) {\n data.context = data.context.substr(0, 255);\n }\n }\n return {\n access_token: accessToken,\n data: data\n };\n}\n\nfunction getTransportFromOptions(options, defaults, url) {\n var hostname = defaults.hostname;\n var protocol = defaults.protocol;\n var port = defaults.port;\n var path = defaults.path;\n var search = defaults.search;\n\n var proxy = options.proxy;\n if (options.endpoint) {\n var opts = url.parse(options.endpoint);\n hostname = opts.hostname;\n protocol = opts.protocol;\n port = opts.port;\n path = opts.pathname;\n search = opts.search;\n }\n return {\n hostname: hostname,\n protocol: protocol,\n port: port,\n path: path,\n search: search,\n proxy: proxy\n };\n}\n\nfunction transportOptions(transport, method) {\n var protocol = transport.protocol || 'https:';\n var port = transport.port || (protocol === 'http:' ? 80 : protocol === 'https:' ? 443 : undefined);\n var hostname = transport.hostname;\n var path = transport.path;\n if (transport.search) {\n path = path + transport.search;\n }\n if (transport.proxy) {\n path = protocol + '//' + hostname + path;\n hostname = transport.proxy.host || transport.proxy.hostname;\n port = transport.proxy.port;\n protocol = transport.proxy.protocol || protocol;\n }\n return {\n protocol: protocol,\n hostname: hostname,\n path: path,\n port: port,\n method: method\n };\n}\n\nfunction appendPathToPath(base, path) {\n var baseTrailingSlash = /\\/$/.test(base);\n var pathBeginningSlash = /^\\//.test(path);\n\n if (baseTrailingSlash && pathBeginningSlash) {\n path = path.substring(1);\n } else if (!baseTrailingSlash && !pathBeginningSlash) {\n path = '/' + path;\n }\n\n return base + path;\n}\n\nmodule.exports = {\n buildPayload: buildPayload,\n getTransportFromOptions: getTransportFromOptions,\n transportOptions: transportOptions,\n appendPathToPath: appendPathToPath\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/apiUtility.js\n// module id = 12\n// module chunks = 0","'use strict';\n\n/* eslint-disable no-console */\nrequire('console-polyfill');\nvar detection = require('./detection');\nvar _ = require('../utility');\n\nfunction error() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.error(_.formatArgsAsString(args));\n } else {\n console.error.apply(console, args);\n }\n}\n\nfunction info() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.info(_.formatArgsAsString(args));\n } else {\n console.info.apply(console, args);\n }\n}\n\nfunction log() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.log(_.formatArgsAsString(args));\n } else {\n console.log.apply(console, args);\n }\n}\n\n/* eslint-enable no-console */\n\nmodule.exports = {\n error: error,\n info: info,\n log: log\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/logger.js\n// module id = 13\n// module chunks = 0","// Console-polyfill. MIT license.\n// https://github.com/paulmillr/console-polyfill\n// Make it safe to do console.log() always.\n(function(global) {\n 'use strict';\n if (!global.console) {\n global.console = {};\n }\n var con = global.console;\n var prop, method;\n var dummy = function() {};\n var properties = ['memory'];\n var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' +\n 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' +\n 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',');\n while (prop = properties.pop()) if (!con[prop]) con[prop] = {};\n while (method = methods.pop()) if (!con[method]) con[method] = dummy;\n // Using `this` for web workers & supports Browserify / Webpack.\n})(typeof window === 'undefined' ? this : window);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/console-polyfill/index.js\n// module id = 14\n// module chunks = 0","'use strict';\n\n// This detection.js module is used to encapsulate any ugly browser/feature\n// detection we may need to do.\n\n// Figure out which version of IE we're using, if any.\n// This is gleaned from http://stackoverflow.com/questions/5574842/best-way-to-check-for-ie-less-than-9-in-javascript-without-library\n// Will return an integer on IE (i.e. 8)\n// Will return undefined otherwise\nfunction getIEVersion() {\n\tvar undef;\n\tif (!document) {\n\t\treturn undef;\n\t}\n\n var v = 3,\n div = document.createElement('div'),\n all = div.getElementsByTagName('i');\n\n while (\n div.innerHTML = '',\n all[0]\n );\n\n return v > 4 ? v : undef;\n}\n\nvar Detection = {\n ieVersion: getIEVersion\n};\n\nmodule.exports = Detection;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/detection.js\n// module id = 15\n// module chunks = 0","'use strict';\n\nfunction captureUncaughtExceptions(window, handler, shim) {\n if (!window) { return; }\n var oldOnError;\n\n if (typeof handler._rollbarOldOnError === 'function') {\n oldOnError = handler._rollbarOldOnError;\n } else if (window.onerror && !window.onerror.belongsToShim) {\n oldOnError = window.onerror;\n handler._rollbarOldOnError = oldOnError;\n }\n\n var fn = function() {\n var args = Array.prototype.slice.call(arguments, 0);\n _rollbarWindowOnError(window, handler, oldOnError, args);\n };\n fn.belongsToShim = shim;\n window.onerror = fn;\n}\n\nfunction _rollbarWindowOnError(window, r, old, args) {\n if (window._rollbarWrappedError) {\n if (!args[4]) {\n args[4] = window._rollbarWrappedError;\n }\n if (!args[5]) {\n args[5] = window._rollbarWrappedError._rollbarContext;\n }\n window._rollbarWrappedError = null;\n }\n\n r.handleUncaughtException.apply(r, args);\n if (old) {\n old.apply(window, args);\n }\n}\n\nfunction captureUnhandledRejections(window, handler, shim) {\n if (!window) { return; }\n\n if (typeof window._rollbarURH === 'function' && window._rollbarURH.belongsToShim) {\n window.removeEventListener('unhandledrejection', window._rollbarURH);\n }\n\n var rejectionHandler = function (evt) {\n var reason, promise, detail;\n try {\n reason = evt.reason;\n } catch (e) {\n reason = undefined;\n }\n try {\n promise = evt.promise;\n } catch (e) {\n promise = '[unhandledrejection] error getting `promise` from event';\n }\n try {\n detail = evt.detail;\n if (!reason && detail) {\n reason = detail.reason;\n promise = detail.promise;\n }\n } catch (e) {\n detail = '[unhandledrejection] error getting `detail` from event';\n }\n if (!reason) {\n reason = '[unhandledrejection] error getting `reason` from event';\n }\n\n if (handler && handler.handleUnhandledRejection) {\n handler.handleUnhandledRejection(reason, promise);\n }\n };\n rejectionHandler.belongsToShim = shim;\n window._rollbarURH = rejectionHandler;\n window.addEventListener('unhandledrejection', rejectionHandler);\n}\n\nfunction wrapGlobals(window, handler, shim) {\n if (!window) { return; }\n // Adapted from https://github.com/bugsnag/bugsnag-js\n var globals = 'EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload'.split(',');\n var i, global;\n for (i = 0; i < globals.length; ++i) {\n global = globals[i];\n\n if (window[global] && window[global].prototype) {\n _extendListenerPrototype(handler, window[global].prototype, shim);\n }\n }\n}\n\nfunction _extendListenerPrototype(handler, prototype, shim) {\n if (prototype.hasOwnProperty && prototype.hasOwnProperty('addEventListener')) {\n var oldAddEventListener = prototype.addEventListener;\n while (oldAddEventListener._rollbarOldAdd && oldAddEventListener.belongsToShim) {\n oldAddEventListener = oldAddEventListener._rollbarOldAdd;\n }\n var addFn = function(event, callback, bubble) {\n oldAddEventListener.call(this, event, handler.wrap(callback), bubble);\n };\n addFn._rollbarOldAdd = oldAddEventListener;\n addFn.belongsToShim = shim;\n prototype.addEventListener = addFn;\n\n var oldRemoveEventListener = prototype.removeEventListener;\n while (oldRemoveEventListener._rollbarOldRemove && oldRemoveEventListener.belongsToShim) {\n oldRemoveEventListener = oldRemoveEventListener._rollbarOldRemove;\n }\n var removeFn = function(event, callback, bubble) {\n oldRemoveEventListener.call(this, event, callback && callback._rollbar_wrapped || callback, bubble);\n };\n removeFn._rollbarOldRemove = oldRemoveEventListener;\n removeFn.belongsToShim = shim;\n prototype.removeEventListener = removeFn;\n }\n}\n\nmodule.exports = {\n captureUncaughtExceptions: captureUncaughtExceptions,\n captureUnhandledRejections: captureUnhandledRejections,\n wrapGlobals: wrapGlobals\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/globalSetup.js\n// module id = 16\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar logger = require('./logger');\n\n/*\n * accessToken may be embedded in payload but that should not\n * be assumed\n *\n * options: {\n * hostname\n * protocol\n * path\n * port\n * method\n * }\n *\n * params is an object containing key/value pairs. These\n * will be appended to the path as 'key=value&key=value'\n *\n * payload is an unserialized object\n */\n\nfunction get(accessToken, options, params, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n _.addParamsAndAccessTokenToPath(accessToken, options, params);\n\n var method = 'GET';\n var url = _.formatUrl(options);\n _makeRequest(accessToken, url, method, null, callback, requestFactory);\n}\n\nfunction post(accessToken, options, payload, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!payload) {\n return callback(new Error('Cannot send empty request'));\n }\n\n var stringifyResult = _.stringify(payload);\n if (stringifyResult.error) {\n return callback(stringifyResult.error);\n }\n\n var writeData = stringifyResult.value;\n var method = 'POST';\n var url = _.formatUrl(options);\n _makeRequest(accessToken, url, method, writeData, callback, requestFactory);\n}\n\nfunction _makeRequest(accessToken, url, method, data, callback, requestFactory) {\n var request;\n if (requestFactory) {\n request = requestFactory();\n } else {\n request = _createXMLHTTPObject();\n }\n if (!request) {\n // Give up, no way to send requests\n return callback(new Error('No way to send a request'));\n }\n try {\n try {\n var onreadystatechange = function() {\n try {\n if (onreadystatechange && request.readyState === 4) {\n onreadystatechange = undefined;\n\n var parseResponse = _.jsonParse(request.responseText);\n if (_isSuccess(request)) {\n callback(parseResponse.error, parseResponse.value);\n return;\n } else if (_isNormalFailure(request)) {\n if (request.status === 403) {\n // likely caused by using a server access token\n var message = parseResponse.value && parseResponse.value.message;\n logger.error(message);\n }\n // return valid http status codes\n callback(new Error(String(request.status)));\n } else {\n // IE will return a status 12000+ on some sort of connection failure,\n // so we return a blank error\n // http://msdn.microsoft.com/en-us/library/aa383770%28VS.85%29.aspx\n var msg = 'XHR response had no status code (likely connection failure)';\n callback(_newRetriableError(msg));\n }\n }\n } catch (ex) {\n //jquery source mentions firefox may error out while accessing the\n //request members if there is a network error\n //https://github.com/jquery/jquery/blob/a938d7b1282fc0e5c52502c225ae8f0cef219f0a/src/ajax/xhr.js#L111\n var exc;\n if (ex && ex.stack) {\n exc = ex;\n } else {\n exc = new Error(ex);\n }\n callback(exc);\n }\n };\n\n request.open(method, url, true);\n if (request.setRequestHeader) {\n request.setRequestHeader('Content-Type', 'application/json');\n request.setRequestHeader('X-Rollbar-Access-Token', accessToken);\n }\n request.onreadystatechange = onreadystatechange;\n request.send(data);\n } catch (e1) {\n // Sending using the normal xmlhttprequest object didn't work, try XDomainRequest\n if (typeof XDomainRequest !== 'undefined') {\n\n // Assume we are in a really old browser which has a bunch of limitations:\n // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\n // Extreme paranoia: if we have XDomainRequest then we have a window, but just in case\n if (!window || !window.location) {\n return callback(new Error('No window available during request, unknown environment'));\n }\n\n // If the current page is http, try and send over http\n if (window.location.href.substring(0, 5) === 'http:' && url.substring(0, 5) === 'https') {\n url = 'http' + url.substring(5);\n }\n\n var xdomainrequest = new XDomainRequest();\n xdomainrequest.onprogress = function() {};\n xdomainrequest.ontimeout = function() {\n var msg = 'Request timed out';\n var code = 'ETIMEDOUT';\n callback(_newRetriableError(msg, code));\n };\n xdomainrequest.onerror = function() {\n callback(new Error('Error during request'));\n };\n xdomainrequest.onload = function() {\n var parseResponse = _.jsonParse(xdomainrequest.responseText);\n callback(parseResponse.error, parseResponse.value);\n };\n xdomainrequest.open(method, url, true);\n xdomainrequest.send(data);\n } else {\n callback(new Error('Cannot find a method to transport a request'));\n }\n }\n } catch (e2) {\n callback(e2);\n }\n}\n\nfunction _createXMLHTTPObject() {\n /* global ActiveXObject:false */\n\n var factories = [\n function () {\n return new XMLHttpRequest();\n },\n function () {\n return new ActiveXObject('Msxml2.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Msxml3.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Microsoft.XMLHTTP');\n }\n ];\n var xmlhttp;\n var i;\n var numFactories = factories.length;\n for (i = 0; i < numFactories; i++) {\n /* eslint-disable no-empty */\n try {\n xmlhttp = factories[i]();\n break;\n } catch (e) {\n // pass\n }\n /* eslint-enable no-empty */\n }\n return xmlhttp;\n}\n\nfunction _isSuccess(r) {\n return r && r.status && r.status === 200;\n}\n\nfunction _isNormalFailure(r) {\n return r && _.isType(r.status, 'number') && r.status >= 400 && r.status < 600;\n}\n\nfunction _newRetriableError(message, code) {\n var err = new Error(message);\n err.code = code || 'ENOTFOUND';\n return err;\n}\n\nmodule.exports = {\n get: get,\n post: post\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transport.js\n// module id = 17\n// module chunks = 0","'use strict';\n\n// See https://nodejs.org/docs/latest/api/url.html\nfunction parse(url) {\n var result = {\n protocol: null, auth: null, host: null, path: null,\n hash: null, href: url, hostname: null, port: null,\n pathname: null, search: null, query: null\n };\n\n var i, last;\n i = url.indexOf('//');\n if (i !== -1) {\n result.protocol = url.substring(0,i);\n last = i+2;\n } else {\n last = 0;\n }\n \n i = url.indexOf('@', last);\n if (i !== -1) {\n result.auth = url.substring(last, i);\n last = i+1;\n }\n\n i = url.indexOf('/', last);\n if (i === -1) {\n i = url.indexOf('?', last);\n if (i === -1) {\n i = url.indexOf('#', last);\n if (i === -1) {\n result.host = url.substring(last);\n } else {\n result.host = url.substring(last, i);\n result.hash = url.substring(i);\n }\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n return result;\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n\n i = url.indexOf('#', last);\n if (i === -1) {\n result.path = url.substring(last);\n } else {\n result.path = url.substring(last, i);\n result.hash = url.substring(i);\n }\n\n if (result.path) {\n var pathParts = result.path.split('?');\n result.pathname = pathParts[0];\n result.query = pathParts[1];\n result.search = result.query ? '?' + result.query : null;\n }\n return result;\n}\n\nmodule.exports = {\n parse: parse\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/url.js\n// module id = 18\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar errorParser = require('./errorParser');\nvar logger = require('./logger');\n\nfunction handleItemWithError(item, options, callback) {\n item.data = item.data || {};\n if (item.err) {\n try {\n item.stackInfo = item.err._savedStackTrace || errorParser.parse(item.err);\n } catch (e)\n /* istanbul ignore next */\n {\n logger.error('Error while parsing the error object.', e);\n item.message = item.err.message || item.err.description || item.message || String(item.err);\n delete item.err;\n }\n }\n callback(null, item);\n}\n\nfunction ensureItemHasSomethingToSay(item, options, callback) {\n if (!item.message && !item.stackInfo && !item.custom) {\n callback(new Error('No message, stack info, or custom data'), null);\n }\n callback(null, item);\n}\n\nfunction addBaseInfo(item, options, callback) {\n var environment = (options.payload && options.payload.environment) || options.environment;\n item.data = _.extend(true, {}, item.data, {\n environment: environment,\n level: item.level,\n endpoint: options.endpoint,\n platform: 'browser',\n framework: 'browser-js',\n language: 'javascript',\n server: {},\n uuid: item.uuid,\n notifier: {\n name: 'rollbar-browser-js',\n version: options.version\n }\n });\n callback(null, item);\n}\n\nfunction addRequestInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.location) {\n return callback(null, item);\n }\n _.set(item, 'data.request', {\n url: window.location.href,\n query_string: window.location.search,\n user_ip: '$remote_ip'\n });\n callback(null, item);\n };\n}\n\nfunction addClientInfo(window) {\n return function(item, options, callback) {\n if (!window) {\n return callback(null, item);\n }\n var nav = window.navigator || {};\n var scr = window.screen || {};\n _.set(item, 'data.client', {\n runtime_ms: item.timestamp - window._rollbarStartTime,\n timestamp: Math.round(item.timestamp / 1000),\n javascript: {\n browser: nav.userAgent,\n language: nav.language,\n cookie_enabled: nav.cookieEnabled,\n screen: {\n width: scr.width,\n height: scr.height\n }\n }\n });\n callback(null, item);\n };\n}\n\nfunction addPluginInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.navigator) {\n return callback(null, item);\n }\n var plugins = [];\n var navPlugins = window.navigator.plugins || [];\n var cur;\n for (var i=0, l=navPlugins.length; i < l; ++i) {\n cur = navPlugins[i];\n plugins.push({name: cur.name, description: cur.description});\n }\n _.set(item, 'data.client.javascript.plugins', plugins);\n callback(null, item);\n };\n}\n\nfunction addBody(item, options, callback) {\n if (item.stackInfo) {\n addBodyTrace(item, options, callback);\n } else {\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction addBodyMessage(item, options, callback) {\n var message = item.message;\n var custom = item.custom;\n\n if (!message) {\n if (custom) {\n var scrubFields = options.scrubFields;\n var messageResult = _.stringify(_.scrub(custom, scrubFields));\n message = messageResult.error || messageResult.value || '';\n } else {\n message = '';\n }\n }\n var result = {\n body: message\n };\n\n if (custom) {\n result.extra = _.extend(true, {}, custom);\n }\n\n _.set(item, 'data.body', {message: result});\n callback(null, item);\n}\n\n\nfunction addBodyTrace(item, options, callback) {\n var description = item.data.description;\n var stackInfo = item.stackInfo;\n var custom = item.custom;\n\n var guess = errorParser.guessErrorClass(stackInfo.message);\n var className = stackInfo.name || guess[0];\n var message = guess[1];\n var trace = {\n exception: {\n 'class': className,\n message: message\n }\n };\n\n if (description) {\n trace.exception.description = description;\n }\n\n // Transform a TraceKit stackInfo object into a Rollbar trace\n var stack = stackInfo.stack;\n if (stack && stack.length === 0 && item._unhandledStackInfo && item._unhandledStackInfo.stack) {\n stack = item._unhandledStackInfo.stack;\n }\n if (stack) {\n if (stack.length === 0) {\n trace.exception.stack = stackInfo.rawStack;\n trace.exception.raw = String(stackInfo.rawException);\n }\n var stackFrame;\n var frame;\n var code;\n var pre;\n var post;\n var contextLength;\n var i, mid;\n\n trace.frames = [];\n for (i = 0; i < stack.length; ++i) {\n stackFrame = stack[i];\n frame = {\n filename: stackFrame.url ? _.sanitizeUrl(stackFrame.url) : '(unknown)',\n lineno: stackFrame.line || null,\n method: (!stackFrame.func || stackFrame.func === '?') ? '[anonymous]' : stackFrame.func,\n colno: stackFrame.column\n };\n if (frame.method && frame.method.endsWith && frame.method.endsWith('_rollbar_wrapped')) {\n continue;\n }\n\n code = pre = post = null;\n contextLength = stackFrame.context ? stackFrame.context.length : 0;\n if (contextLength) {\n mid = Math.floor(contextLength / 2);\n pre = stackFrame.context.slice(0, mid);\n code = stackFrame.context[mid];\n post = stackFrame.context.slice(mid);\n }\n\n if (code) {\n frame.code = code;\n }\n\n if (pre || post) {\n frame.context = {};\n if (pre && pre.length) {\n frame.context.pre = pre;\n }\n if (post && post.length) {\n frame.context.post = post;\n }\n }\n\n if (stackFrame.args) {\n frame.args = stackFrame.args;\n }\n\n trace.frames.push(frame);\n }\n\n // NOTE(cory): reverse the frames since rollbar.com expects the most recent call last\n trace.frames.reverse();\n\n if (custom) {\n trace.extra = _.extend(true, {}, custom);\n }\n _.set(item, 'data.body', {trace: trace});\n callback(null, item);\n } else {\n item.message = className + ': ' + message;\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction scrubPayload(item, options, callback) {\n var scrubFields = options.scrubFields;\n item.data = _.scrub(item.data, scrubFields);\n callback(null, item);\n}\n\nmodule.exports = {\n handleItemWithError: handleItemWithError,\n ensureItemHasSomethingToSay: ensureItemHasSomethingToSay,\n addBaseInfo: addBaseInfo,\n addRequestInfo: addRequestInfo,\n addClientInfo: addClientInfo,\n addPluginInfo: addPluginInfo,\n addBody: addBody,\n scrubPayload: scrubPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transforms.js\n// module id = 19\n// module chunks = 0","'use strict';\n\nvar ErrorStackParser = require('error-stack-parser');\n\nvar UNKNOWN_FUNCTION = '?';\nvar ERR_CLASS_REGEXP = new RegExp('^(([a-zA-Z0-9-_$ ]*): *)?(Uncaught )?([a-zA-Z0-9-_$ ]*): ');\n\nfunction guessFunctionName() {\n return UNKNOWN_FUNCTION;\n}\n\n\nfunction gatherContext() {\n return null;\n}\n\n\nfunction Frame(stackFrame) {\n var data = {};\n\n data._stackFrame = stackFrame;\n\n data.url = stackFrame.fileName;\n data.line = stackFrame.lineNumber;\n data.func = stackFrame.functionName;\n data.column = stackFrame.columnNumber;\n data.args = stackFrame.args;\n\n data.context = gatherContext(data.url, data.line);\n\n return data;\n}\n\n\nfunction Stack(exception) {\n function getStack() {\n var parserStack = [];\n var exc;\n\n if (!exception.stack) {\n try {\n throw exception;\n } catch (e) {\n exc = e;\n }\n } else {\n exc = exception;\n }\n\n try {\n parserStack = ErrorStackParser.parse(exc);\n } catch(e) {\n parserStack = [];\n }\n\n var stack = [];\n\n for (var i = 0; i < parserStack.length; i++) {\n stack.push(new Frame(parserStack[i]));\n }\n\n return stack;\n }\n\n return {\n stack: getStack(),\n message: exception.message,\n name: exception.name,\n rawStack: exception.stack,\n rawException: exception\n };\n}\n\n\nfunction parse(e) {\n return new Stack(e);\n}\n\n\nfunction guessErrorClass(errMsg) {\n if (!errMsg || !errMsg.match) {\n return ['Unknown error. There was no error message to display.', ''];\n }\n var errClassMatch = errMsg.match(ERR_CLASS_REGEXP);\n var errClass = '(unknown)';\n\n if (errClassMatch) {\n errClass = errClassMatch[errClassMatch.length - 1];\n errMsg = errMsg.replace((errClassMatch[errClassMatch.length - 2] || '') + errClass + ':', '');\n errMsg = errMsg.replace(/(^[\\s]+|[\\s]+$)/g, '');\n }\n return [errClass, errMsg];\n}\n\n\nmodule.exports = {\n guessFunctionName: guessFunctionName,\n guessErrorClass: guessErrorClass,\n gatherContext: gatherContext,\n parse: parse,\n Stack: Stack,\n Frame: Frame\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/errorParser.js\n// module id = 20\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = locationParts[0] === 'eval' ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/error-stack-parser.js\n// module id = 21\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stackframe', [], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.StackFrame = factory();\n }\n}(this, function () {\n 'use strict';\n function _isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n function StackFrame(functionName, args, fileName, lineNumber, columnNumber, source) {\n if (functionName !== undefined) {\n this.setFunctionName(functionName);\n }\n if (args !== undefined) {\n this.setArgs(args);\n }\n if (fileName !== undefined) {\n this.setFileName(fileName);\n }\n if (lineNumber !== undefined) {\n this.setLineNumber(lineNumber);\n }\n if (columnNumber !== undefined) {\n this.setColumnNumber(columnNumber);\n }\n if (source !== undefined) {\n this.setSource(source);\n }\n }\n\n StackFrame.prototype = {\n getFunctionName: function () {\n return this.functionName;\n },\n setFunctionName: function (v) {\n this.functionName = String(v);\n },\n\n getArgs: function () {\n return this.args;\n },\n setArgs: function (v) {\n if (Object.prototype.toString.call(v) !== '[object Array]') {\n throw new TypeError('Args must be an Array');\n }\n this.args = v;\n },\n\n // NOTE: Property name may be misleading as it includes the path,\n // but it somewhat mirrors V8's JavaScriptStackTraceApi\n // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's\n // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14\n getFileName: function () {\n return this.fileName;\n },\n setFileName: function (v) {\n this.fileName = String(v);\n },\n\n getLineNumber: function () {\n return this.lineNumber;\n },\n setLineNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Line Number must be a Number');\n }\n this.lineNumber = Number(v);\n },\n\n getColumnNumber: function () {\n return this.columnNumber;\n },\n setColumnNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Column Number must be a Number');\n }\n this.columnNumber = Number(v);\n },\n\n getSource: function () {\n return this.source;\n },\n setSource: function (v) {\n this.source = String(v);\n },\n\n toString: function() {\n var functionName = this.getFunctionName() || '{anonymous}';\n var args = '(' + (this.getArgs() || []).join(',') + ')';\n var fileName = this.getFileName() ? ('@' + this.getFileName()) : '';\n var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : '';\n var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : '';\n return functionName + args + fileName + lineNumber + columnNumber;\n }\n };\n\n return StackFrame;\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/~/stackframe/stackframe.js\n// module id = 22\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction itemToPayload(item, options, callback) {\n var payloadOptions = options.payload || {};\n if (payloadOptions.body) {\n delete payloadOptions.body;\n }\n\n var data = _.extend(true, {}, item.data, payloadOptions);\n if (item._isUncaught) {\n data._isUncaught = true;\n }\n if (item._originalArgs) {\n data._originalArgs = item._originalArgs;\n }\n callback(null, data);\n}\n\nfunction addTelemetryData(item, options, callback) {\n if (item.telemetryEvents) {\n _.set(item, 'data.body.telemetry', item.telemetryEvents);\n }\n callback(null, item);\n}\n\nfunction addMessageWithError(item, options, callback) {\n if (!item.message) {\n callback(null, item);\n return;\n }\n var tracePath = 'data.body.trace_chain.0';\n var trace = _.get(item, tracePath);\n if (!trace) {\n tracePath = 'data.body.trace';\n trace = _.get(item, tracePath);\n }\n if (trace) {\n if (!(trace.exception && trace.exception.description)) {\n _.set(item, tracePath+'.exception.description', item.message);\n callback(null, item);\n return;\n }\n var extra = _.get(item, tracePath+'.extra') || {};\n var newExtra = _.extend(true, {}, extra, {message: item.message});\n _.set(item, tracePath+'.extra', newExtra);\n }\n callback(null, item);\n}\n\nfunction userTransform(logger) {\n return function(item, options, callback) {\n var newItem = _.extend(true, {}, item);\n try {\n if (_.isFunction(options.transform)) {\n options.transform(newItem.data);\n }\n } catch (e) {\n options.transform = null;\n logger.error('Error while calling custom transform() function. Removing custom transform().', e);\n callback(null, item);\n return;\n }\n callback(null, newItem);\n }\n}\n\nfunction addConfigToPayload(item, options, callback) {\n if (!options.sendConfig) {\n return callback(null, item);\n }\n var configKey = '_rollbarConfig';\n var custom = _.get(item, 'data.custom') || {};\n custom[configKey] = options;\n item.data.custom = custom;\n callback(null, item);\n}\n\nmodule.exports = {\n itemToPayload: itemToPayload,\n addTelemetryData: addTelemetryData,\n addMessageWithError: addMessageWithError,\n userTransform: userTransform,\n addConfigToPayload: addConfigToPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/transforms.js\n// module id = 23\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\n\nfunction checkIgnore(item, settings) {\n if (_.get(settings, 'plugins.jquery.ignoreAjaxErrors')) {\n return !_.get(item, 'body.message.extra.isAjax');\n }\n return true;\n}\n\nmodule.exports = {\n checkIgnore: checkIgnore\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/predicates.js\n// module id = 24\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction checkLevel(item, settings) {\n var level = item.level;\n var levelVal = _.LEVELS[level] || 0;\n var reportLevel = settings.reportLevel;\n var reportLevelVal = _.LEVELS[reportLevel] || 0;\n\n if (levelVal < reportLevelVal) {\n return false;\n }\n return true;\n}\n\nfunction userCheckIgnore(logger) {\n return function(item, settings) {\n var isUncaught = !!item._isUncaught;\n delete item._isUncaught;\n var args = item._originalArgs;\n delete item._originalArgs;\n try {\n if (_.isFunction(settings.onSendCallback)) {\n settings.onSendCallback(isUncaught, args, item);\n }\n } catch (e) {\n settings.onSendCallback = null;\n logger.error('Error while calling onSendCallback, removing', e);\n }\n try {\n if (_.isFunction(settings.checkIgnore) && settings.checkIgnore(isUncaught, args, item)) {\n return false;\n }\n } catch (e) {\n settings.checkIgnore = null;\n logger.error('Error while calling custom checkIgnore(), removing', e);\n }\n return true;\n }\n}\n\nfunction urlIsNotBlacklisted(logger) {\n return function(item, settings) {\n return !urlIsOnAList(item, settings, 'blacklist', logger);\n }\n}\n\nfunction urlIsWhitelisted(logger) {\n return function(item, settings) {\n return urlIsOnAList(item, settings, 'whitelist', logger);\n }\n}\n\nfunction urlIsOnAList(item, settings, whiteOrBlack, logger) {\n // whitelist is the default\n var black = false;\n if (whiteOrBlack === 'blacklist') {\n black = true;\n }\n var list, trace, frame, filename, frameLength, url, listLength, urlRegex;\n var i, j;\n\n try {\n list = black ? settings.hostBlackList : settings.hostWhiteList;\n listLength = list && list.length;\n trace = _.get(item, 'body.trace');\n\n // These two checks are important to come first as they are defaults\n // in case the list is missing or the trace is missing or not well-formed\n if (!list || listLength === 0) {\n return !black;\n }\n if (!trace || !trace.frames || trace.frames.length === 0) {\n return !black;\n }\n\n frameLength = trace.frames.length;\n for (i = 0; i < frameLength; i++) {\n frame = trace.frames[i];\n filename = frame.filename;\n\n if (!_.isType(filename, 'string')) {\n return !black;\n }\n\n for (j = 0; j < listLength; j++) {\n url = list[j];\n urlRegex = new RegExp(url);\n\n if (urlRegex.test(filename)) {\n return true;\n }\n }\n }\n } catch (e)\n /* istanbul ignore next */\n {\n if (black) {\n settings.hostBlackList = null;\n } else {\n settings.hostWhiteList = null;\n }\n var listName = black ? 'hostBlackList' : 'hostWhiteList';\n logger.error('Error while reading your configuration\\'s ' + listName + ' option. Removing custom ' + listName + '.', e);\n return !black;\n }\n return false;\n}\n\nfunction messageIsIgnored(logger) {\n return function(item, settings) {\n var exceptionMessage, i, ignoredMessages,\n len, messageIsIgnored, rIgnoredMessage,\n body, traceMessage, bodyMessage;\n\n try {\n messageIsIgnored = false;\n ignoredMessages = settings.ignoredMessages;\n\n if (!ignoredMessages || ignoredMessages.length === 0) {\n return true;\n }\n\n body = item.body;\n traceMessage = _.get(body, 'trace.exception.message');\n bodyMessage = _.get(body, 'message.body');\n\n exceptionMessage = traceMessage || bodyMessage;\n\n if (!exceptionMessage){\n return true;\n }\n\n len = ignoredMessages.length;\n for (i = 0; i < len; i++) {\n rIgnoredMessage = new RegExp(ignoredMessages[i], 'gi');\n messageIsIgnored = rIgnoredMessage.test(exceptionMessage);\n\n if (messageIsIgnored) {\n break;\n }\n }\n } catch(e)\n /* istanbul ignore next */\n {\n settings.ignoredMessages = null;\n logger.error('Error while reading your configuration\\'s ignoredMessages option. Removing custom ignoredMessages.');\n }\n\n return !messageIsIgnored;\n }\n}\n\nmodule.exports = {\n checkLevel: checkLevel,\n userCheckIgnore: userCheckIgnore,\n urlIsNotBlacklisted: urlIsNotBlacklisted,\n urlIsWhitelisted: urlIsWhitelisted,\n messageIsIgnored: messageIsIgnored\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/predicates.js\n// module id = 25\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar urlparser = require('./url');\nvar domUtil = require('./domUtility');\n\nvar defaults = {\n network: true,\n networkResponseHeaders: false,\n networkResponseBody: false,\n networkRequestBody: false,\n log: true,\n dom: true,\n navigation: true,\n connectivity: true\n};\n\nfunction replace(obj, name, replacement, replacements, type) {\n var orig = obj[name];\n obj[name] = replacement(orig);\n if (replacements) {\n replacements[type].push([obj, name, orig]);\n }\n}\n\nfunction restore(replacements, type) {\n var b;\n while (replacements[type].length) {\n b = replacements[type].shift();\n b[0][b[1]] = b[2];\n }\n}\n\nfunction Instrumenter(options, telemeter, rollbar, _window, _document) {\n var autoInstrument = options.autoInstrument;\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.extend(true, {}, defaults, autoInstrument);\n }\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n this.telemetryScrubber = options.telemetryScrubber;\n this.telemeter = telemeter;\n this.rollbar = rollbar;\n this._window = _window || {};\n this._document = _document || {};\n this.replacements = {\n network: [],\n log: [],\n navigation: [],\n connectivity: []\n };\n this.eventRemovers = {\n dom: [],\n connectivity: []\n };\n\n this._location = this._window.location;\n this._lastHref = this._location && this._location.href;\n}\n\nInstrumenter.prototype.configure = function(options) {\n var autoInstrument = options.autoInstrument;\n var oldSettings = _.extend(true, {}, this.autoInstrument);\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.extend(true, {}, defaults, autoInstrument);\n }\n this.instrument(oldSettings);\n if (options.scrubTelemetryInputs !== undefined) {\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n }\n if (options.telemetryScrubber !== undefined) {\n this.telemetryScrubber = options.telemetryScrubber;\n }\n};\n\nInstrumenter.prototype.instrument = function(oldSettings) {\n if (this.autoInstrument.network && !(oldSettings && oldSettings.network)) {\n this.instrumentNetwork();\n } else if (!this.autoInstrument.network && oldSettings && oldSettings.network) {\n this.deinstrumentNetwork();\n }\n\n if (this.autoInstrument.log && !(oldSettings && oldSettings.log)) {\n this.instrumentConsole();\n } else if (!this.autoInstrument.log && oldSettings && oldSettings.log) {\n this.deinstrumentConsole();\n }\n\n if (this.autoInstrument.dom && !(oldSettings && oldSettings.dom)) {\n this.instrumentDom();\n } else if (!this.autoInstrument.dom && oldSettings && oldSettings.dom) {\n this.deinstrumentDom();\n }\n\n if (this.autoInstrument.navigation && !(oldSettings && oldSettings.navigation)) {\n this.instrumentNavigation();\n } else if (!this.autoInstrument.navigation && oldSettings && oldSettings.navigation) {\n this.deinstrumentNavigation();\n }\n\n if (this.autoInstrument.connectivity && !(oldSettings && oldSettings.connectivity)) {\n this.instrumentConnectivity();\n } else if (!this.autoInstrument.connectivity && oldSettings && oldSettings.connectivity) {\n this.deinstrumentConnectivity();\n }\n};\n\nInstrumenter.prototype.deinstrumentNetwork = function() {\n restore(this.replacements, 'network');\n};\n\nInstrumenter.prototype.instrumentNetwork = function() {\n var self = this;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && _.isFunction(xhr[prop])) {\n replace(xhr, prop, function(orig) {\n return self.rollbar.wrap(orig);\n });\n }\n }\n\n if ('XMLHttpRequest' in this._window) {\n var xhrp = this._window.XMLHttpRequest.prototype;\n replace(xhrp, 'open', function(orig) {\n return function(method, url) {\n if (_.isType(url, 'string')) {\n this.__rollbar_xhr = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'network');\n\n replace(xhrp, 'send', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(data) {\n /* eslint-enable no-unused-vars */\n var xhr = this;\n\n function onreadystatechangeHandler() {\n if (xhr.__rollbar_xhr && (xhr.readyState === 1 || xhr.readyState === 4)) {\n if (xhr.__rollbar_xhr.status_code === null) {\n xhr.__rollbar_xhr.status_code = 0;\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n requestData = data;\n }\n xhr.__rollbar_event = self.telemeter.captureNetwork(xhr.__rollbar_xhr, 'xhr', undefined, requestData);\n }\n if (xhr.readyState === 1) {\n xhr.__rollbar_xhr.start_time_ms = _.now();\n } else {\n xhr.__rollbar_xhr.end_time_ms = _.now();\n\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n var header, i;\n if (headersConfig === true) {\n var allHeaders = xhr.getAllResponseHeaders();\n if (allHeaders) {\n var arr = allHeaders.trim().split(/[\\r\\n]+/);\n var parts, value;\n for (i=0; i < arr.length; i++) {\n parts = arr[i].split(': ');\n header = parts.shift();\n value = parts.join(': ');\n headers[header] = value;\n }\n }\n } else {\n for (i=0; i < headersConfig.length; i++) {\n header = headersConfig[i];\n headers[header] = xhr.getResponseHeader(header);\n }\n }\n } catch (e) {\n /* we ignore the errors here that could come from different\n * browser issues with the xhr methods */\n }\n }\n var body = null;\n if (self.autoInstrument.networkResponseBody) {\n try {\n body = xhr.responseText;\n } catch (e) {\n /* ignore errors from reading responseText */\n }\n }\n var response = null;\n if (body || headers) {\n response = {};\n if (body) {\n response.body = body;\n }\n if (headers) {\n response.headers = headers;\n }\n }\n if (response) {\n xhr.__rollbar_xhr.response = response;\n }\n }\n try {\n var code = xhr.status;\n code = code === 1223 ? 204 : code;\n xhr.__rollbar_xhr.status_code = code;\n xhr.__rollbar_event.level = self.telemeter.levelFromStatus(code);\n } catch (e) {\n /* ignore possible exception from xhr.status */\n }\n }\n }\n\n wrapProp('onload', xhr);\n wrapProp('onerror', xhr);\n wrapProp('onprogress', xhr);\n\n if ('onreadystatechange' in xhr && _.isFunction(xhr.onreadystatechange)) {\n replace(xhr, 'onreadystatechange', function(orig) {\n return self.rollbar.wrap(orig, undefined, onreadystatechangeHandler);\n });\n } else {\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n return orig.apply(this, arguments);\n }\n }, this.replacements, 'network');\n }\n\n if ('fetch' in this._window) {\n replace(this._window, 'fetch', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(fn, t) {\n /* eslint-enable no-unused-vars */\n var args = new Array(arguments.length);\n for (var i=0, len=args.length; i < len; i++) {\n args[i] = arguments[i];\n }\n var input = args[0];\n var method = 'GET';\n var url;\n if (_.isType(input, 'string')) {\n url = input;\n } else if (input) {\n url = input.url;\n if (input.method) {\n method = input.method;\n }\n }\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n var metadata = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n if (args[1] && args[1].body) {\n requestData = args[1].body;\n } else if (args[0] && !_.isType(args[0], 'string') && args[0].body) {\n requestData = args[0].body;\n }\n }\n self.telemeter.captureNetwork(metadata, 'fetch', undefined, requestData);\n return orig.apply(this, args).then(function (resp) {\n metadata.end_time_ms = _.now();\n metadata.status_code = resp.status;\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n if (headersConfig === true) {\n // This is unsupported in IE so we can't do it\n /*\n var allHeaders = resp.headers.entries();\n for (var pair of allHeaders) {\n headers[pair[0]] = pair[1];\n }\n */\n } else {\n for (var i=0; i < headersConfig.length; i++) {\n var header = headersConfig[i];\n headers[header] = resp.headers.get(header);\n }\n }\n } catch (e) {\n /* ignore probable IE errors */\n }\n }\n var response = null;\n if (headers) {\n response = {\n headers: headers\n };\n }\n if (response) {\n metadata.response = response;\n }\n return resp;\n });\n };\n }, this.replacements, 'network');\n }\n};\n\nInstrumenter.prototype.deinstrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n var b;\n while (this.replacements['log'].length) {\n b = this.replacements['log'].shift();\n this._window.console[b[0]] = b[1];\n }\n};\n\nInstrumenter.prototype.instrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n\n var self = this;\n var c = this._window.console;\n\n function wrapConsole(method) {\n var orig = c[method];\n var origConsole = c;\n var level = method === 'warn' ? 'warning' : method;\n c[method] = function() {\n var args = Array.prototype.slice.call(arguments);\n var message = _.formatArgsAsString(args);\n self.telemeter.captureLog(message, level);\n if (orig) {\n Function.prototype.apply.call(orig, origConsole, args);\n }\n };\n self.replacements['log'].push([method, orig]);\n }\n var methods = ['debug','info','warn','error','log'];\n for (var i=0, len=methods.length; i < len; i++) {\n wrapConsole(methods[i]);\n }\n};\n\nInstrumenter.prototype.deinstrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n this.removeListeners('dom');\n};\n\nInstrumenter.prototype.instrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n var clickHandler = this.handleClick.bind(this);\n var blurHandler = this.handleBlur.bind(this);\n this.addListener('dom', this._window, 'click', 'onclick', clickHandler, true);\n this.addListener('dom', this._window, 'blur', 'onfocusout', blurHandler, true);\n};\n\nInstrumenter.prototype.handleClick = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n var hasTag = e && e.tagName;\n var anchorOrButton = domUtil.isDescribedElement(e, 'a') || domUtil.isDescribedElement(e, 'button');\n if (hasTag && (anchorOrButton || domUtil.isDescribedElement(e, 'input', ['button', 'submit']))) {\n this.captureDomEvent('click', e);\n } else if (domUtil.isDescribedElement(e, 'input', ['checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value, e.checked);\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleBlur = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n if (e && e.tagName) {\n if (domUtil.isDescribedElement(e, 'textarea')) {\n this.captureDomEvent('input', e, e.value);\n } else if (domUtil.isDescribedElement(e, 'select') && e.options && e.options.length) {\n this.handleSelectInputChanged(e);\n } else if (domUtil.isDescribedElement(e, 'input') && !domUtil.isDescribedElement(e, 'input', ['button', 'submit', 'hidden', 'checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value);\n }\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleSelectInputChanged = function(elem) {\n if (elem.multiple) {\n for (var i = 0; i < elem.options.length; i++) {\n if (elem.options[i].selected) {\n this.captureDomEvent('input', elem, elem.options[i].value);\n }\n }\n } else if (elem.selectedIndex >= 0 && elem.options[elem.selectedIndex]) {\n this.captureDomEvent('input', elem, elem.options[elem.selectedIndex].value);\n }\n};\n\nInstrumenter.prototype.captureDomEvent = function(subtype, element, value, isChecked) {\n if (value !== undefined) {\n if (this.scrubTelemetryInputs || (domUtil.getElementType(element) === 'password')) {\n value = '[scrubbed]';\n } else if (this.telemetryScrubber) {\n var description = domUtil.describeElement(element);\n if (this.telemetryScrubber(description)) {\n value = '[scrubbed]';\n }\n }\n }\n var elementString = domUtil.elementArrayToString(domUtil.treeToArray(element));\n this.telemeter.captureDom(subtype, elementString, value, isChecked);\n};\n\nInstrumenter.prototype.deinstrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n restore(this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.instrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n var self = this;\n replace(this._window, 'onpopstate', function(orig) {\n return function() {\n var current = self._location.href;\n self.handleUrlChange(self._lastHref, current);\n if (orig) {\n orig.apply(this, arguments);\n }\n };\n }, this.replacements, 'navigation');\n\n replace(this._window.history, 'pushState', function(orig) {\n return function() {\n var url = arguments.length > 2 ? arguments[2] : undefined;\n if (url) {\n self.handleUrlChange(self._lastHref, url + '');\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.handleUrlChange = function(from, to) {\n var parsedHref = urlparser.parse(this._location.href);\n var parsedTo = urlparser.parse(to);\n var parsedFrom = urlparser.parse(from);\n this._lastHref = to;\n if (parsedHref.protocol === parsedTo.protocol && parsedHref.host === parsedTo.host) {\n to = parsedTo.path + (parsedTo.hash || '');\n }\n if (parsedHref.protocol === parsedFrom.protocol && parsedHref.host === parsedFrom.host) {\n from = parsedFrom.path + (parsedFrom.hash || '');\n }\n this.telemeter.captureNavigation(from, to);\n};\n\nInstrumenter.prototype.deinstrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.removeListeners('connectivity');\n } else {\n restore(this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.instrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.addListener('connectivity', this._window, 'online', undefined, function() {\n this.telemeter.captureConnectivityChange('online');\n }.bind(this), true);\n this.addListener('connectivity', this._window, 'offline', undefined, function() {\n this.telemeter.captureConnectivityChange('offline');\n }.bind(this), true);\n } else {\n var self = this;\n replace(this._document.body, 'ononline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('online');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n replace(this._document.body, 'onoffline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('offline');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.addListener = function(section, obj, type, altType, handler, capture) {\n if (obj.addEventListener) {\n obj.addEventListener(type, handler, capture);\n this.eventRemovers[section].push(function() {\n obj.removeEventListener(type, handler, capture);\n });\n } else if (altType) {\n obj.attachEvent(altType, handler);\n this.eventRemovers[section].push(function() {\n obj.detachEvent(altType, handler);\n });\n }\n};\n\nInstrumenter.prototype.removeListeners = function(section) {\n var r;\n while (this.eventRemovers[section].length) {\n r = this.eventRemovers[section].shift();\n r();\n }\n};\n\nmodule.exports = Instrumenter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/telemetry.js\n// module id = 26\n// module chunks = 0","'use strict';\n\nfunction getElementType(e) {\n return (e.getAttribute('type') || '').toLowerCase();\n}\n\nfunction isDescribedElement(element, type, subtypes) {\n if (element.tagName.toLowerCase() !== type.toLowerCase()) {\n return false;\n }\n if (!subtypes) {\n return true;\n }\n element = getElementType(element);\n for (var i = 0; i < subtypes.length; i++) {\n if (subtypes[i] === element) {\n return true;\n }\n }\n return false;\n}\n\nfunction getElementFromEvent(evt, doc) {\n if (evt.target) {\n return evt.target;\n }\n if (doc && doc.elementFromPoint) {\n return doc.elementFromPoint(evt.clientX, evt.clientY);\n }\n return undefined;\n}\n\nfunction treeToArray(elem) {\n var MAX_HEIGHT = 5;\n var out = [];\n var nextDescription;\n for (var height = 0; elem && height < MAX_HEIGHT; height++) {\n nextDescription = describeElement(elem);\n if (nextDescription.tagName === 'html') {\n break;\n }\n out.unshift(nextDescription);\n elem = elem.parentNode;\n }\n return out;\n}\n\nfunction elementArrayToString(a) {\n var MAX_LENGTH = 80;\n var separator = ' > ', separatorLength = separator.length;\n var out = [], len = 0, nextStr, totalLength;\n\n for (var i = a.length - 1; i >= 0; i--) {\n nextStr = descriptionToString(a[i]);\n totalLength = len + (out.length * separatorLength) + nextStr.length;\n if (i < a.length - 1 && totalLength >= MAX_LENGTH + 3) {\n out.unshift('...');\n break;\n }\n out.unshift(nextStr);\n len += nextStr.length;\n }\n return out.join(separator);\n}\n\nfunction descriptionToString(desc) {\n if (!desc || !desc.tagName) {\n return '';\n }\n var out = [desc.tagName];\n if (desc.id) {\n out.push('#' + desc.id);\n }\n if (desc.classes) {\n out.push('.' + desc.classes.join('.'));\n }\n for (var i = 0; i < desc.attributes.length; i++) {\n out.push('[' + desc.attributes[i].key + '=\"' + desc.attributes[i].value + '\"]');\n }\n\n return out.join('');\n}\n\n/**\n * Input: a dom element\n * Output: null if tagName is falsey or input is falsey, else\n * {\n * tagName: String,\n * id: String | undefined,\n * classes: [String] | undefined,\n * attributes: [\n * {\n * key: OneOf(type, name, title, alt),\n * value: String\n * }\n * ]\n * }\n */\nfunction describeElement(elem) {\n if (!elem || !elem.tagName) {\n return null;\n }\n var out = {}, className, key, attr, i;\n out.tagName = elem.tagName.toLowerCase();\n if (elem.id) {\n out.id = elem.id;\n }\n className = elem.className;\n if (className && (typeof className === 'string')) {\n out.classes = className.split(/\\s+/);\n }\n var attributes = ['type', 'name', 'title', 'alt'];\n out.attributes = [];\n for (i = 0; i < attributes.length; i++) {\n key = attributes[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.attributes.push({key: key, value: attr});\n }\n }\n return out;\n}\n\nmodule.exports = {\n describeElement: describeElement,\n descriptionToString: descriptionToString,\n elementArrayToString: elementArrayToString,\n treeToArray: treeToArray,\n getElementFromEvent: getElementFromEvent,\n isDescribedElement: isDescribedElement,\n getElementType: getElementType\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/domUtility.js\n// module id = 27\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/bootstrap 4f6440bc8e5c64fdca1c","webpack:///./src/browser/bundles/rollbar.js","webpack:///./src/browser/rollbar.js","webpack:///./src/rollbar.js","webpack:///./src/rateLimiter.js","webpack:///./src/queue.js","webpack:///./src/utility.js","webpack:///./~/extend/index.js","webpack:///./vendor/JSON-js/json3.js","webpack:///./src/notifier.js","webpack:///./src/telemetry.js","webpack:///./src/api.js","webpack:///./src/apiUtility.js","webpack:///./src/browser/logger.js","webpack:///./~/console-polyfill/index.js","webpack:///./src/browser/detection.js","webpack:///./src/browser/globalSetup.js","webpack:///./src/browser/transport.js","webpack:///./src/browser/url.js","webpack:///./src/browser/transforms.js","webpack:///./src/browser/errorParser.js","webpack:///./~/error-stack-parser/error-stack-parser.js","webpack:///./~/error-stack-parser/~/stackframe/stackframe.js","webpack:///./src/transforms.js","webpack:///./src/browser/predicates.js","webpack:///./src/predicates.js","webpack:///./src/browser/telemetry.js","webpack:///./src/browser/domUtility.js"],"names":[],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;;;;;;;ACtCA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA,EAAC;AACD;AACA;AACA;;AAEA;;;;;;;ACvBA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,6BAA4B;AAC5B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA,6BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,2BAA0B,sBAAsB;AAChD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,qCAAoC,SAAS;AAC7C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC3ZA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA,mCAAkC;AAClC;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACpIA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC7IA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAkC;AAClC;AACA;;AAEA;AACA;AACA;AACA,yDAAwD,WAAW;AACnE;AACA;AACA,gBAAe,WAAW;AAC1B,gBAAe,eAAe;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA2B,QAAQ;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,cAAa,8BAA8B;AAC3C;AACA;AACA;AACA;AACA,gDAA+C,SAAS;AACxD;AACA;AACA,eAAc;AACd;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAkD,SAAS;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAwB,+BAA+B;;AAEvD;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACnQA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAY;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,gBAAe,gBAAgB;AAC/B;AACA;AACA;;AAEA,0BAAyB;AACzB,cAAa,iBAAiB;AAC9B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,mCAAkC,OAAO;AACzC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAmD,SAAS;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,6BAA4B;AAC5B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAwC,SAAS,UAAU,YAAY,GAAG;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,SAAS;AAC/C;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,WAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB,qBAAqB;AACtC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAe,qBAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB,wBAAwB;AACzC;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,kBAAiB,wBAAwB;AACzC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iCAAgC,SAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC9oBA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAmB;;AAEnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA,QAAO,YAAY;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA,OAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAAyE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAoB;AACpB;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,0CAAyC,iBAAiB;AAC1D,+BAA8B,kBAAkB;;AAEhD,0CAAyC,iBAAiB;AAC1D,uCAAsC,6BAA6B;;AAEnE;AACA;AACA;AACA;AACA,cAAa;AACb;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,yBAAwB;AACxB,gDAA+C,EAAE;AACjD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;;AAGA;;AAEA;;AAEA,WAAU;AACV,WAAU;AACV,WAAU;AACV;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA,sBAAqB,YAAY;AACjC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,sBAAqB,YAAY;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,gBAAe;AACf;AACA,eAAc,wDAAwD;AACtE,eAAc,0BAA0B;AACxC;AACA;AACA;AACA;;AAEA;;AAEA;AACA,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAmB,WAAW;AAC9B;AACA;;AAEA;;AAEA,QAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,uBAAsB,UAAU;AAChC;AACA;;;AAGA;;AAEA;AACA;;AAEA;AACA;;AAEA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB,qBAAoB;AACpB,eAAc;AACd,iBAAgB;AAChB,sBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAoB;AACpB;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,qBAAoB;AACpB;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,WAAU;AACV;AACA,yBAAwB,YAAY;AACpC;AACA;AACA,YAAW;AACX;AACA,yBAAwB,gDAAgD;AACxE;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA;AACA,UAAS;AACT,WAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,yBAAwB,YAAY;AACpC;AACA;AACA,YAAW;AACX;AACA,yBAAwB,gDAAgD;AACxE;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,uCAAsC,EAAE;AACxC;AACA;AACA;AACA,UAAS;AACT;;AAEA;;AAEA;AACA;;AAEA;AACA,gDAA+C,yGAAyG,EAAE;;AAE1J;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA,cAAa;;AAEb;AACA;;AAEA;AACA;AACA,cAAa;;AAEb;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,UAAS;AACT;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE,UAAU;AACvB;AACA;AACA,MAAK;AACL;AACA;;AAEA;;;;;;;AC1vBA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA4B;AAC5B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;;;;;;ACvHA;;AAEA;;AAEA;;AAEA;AACA;AACA,mCAAkC;AAClC;AACA;AACA;;AAEA;AACA;AACA,mCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sCAAqC,mBAAmB;AACxD;;AAEA;AACA,sCAAqC,4BAA4B;AACjE;AACA;AACA,+BAA8B,4BAA4B;AAC1D;AACA;AACA;AACA,sCAAqC,gBAAgB;AACrD;AACA;AACA,+BAA8B,gBAAgB;AAC9C;AACA;;AAEA;AACA,+BAA8B,aAAa;AAC3C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACrKA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;ACnEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACzFA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;;;AClBD;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;AC/BA;;AAEA;AACA,iBAAgB,QAAQ;AACxB;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAgB,QAAQ;;AAExB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAgB,QAAQ;AACxB;AACA;AACA;AACA,cAAa,oBAAoB;AACjC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;AC3HA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,kBAAkB;AAC/B;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;AC7MA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;AChFA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gCAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,OAAO;AAC7C;AACA,qBAAoB,6CAA6C;AACjE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qCAAoC;AACpC;;AAEA,6BAA4B,gBAAgB;AAC5C;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAe,kBAAkB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,sCAAqC;AACrC;AACA,+BAA8B,aAAa;AAC3C;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC5PA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;;AAEA;;AAEA,oBAAmB,wBAAwB;AAC3C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACtGA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA,EAAC;AACD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA,4BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA,4BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,0BAAyB;AACzB;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,cAAa;AACb;AACA,cAAa;AACb;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAa;AACb,UAAS;;AAET;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,cAAa;AACb,UAAS;;AAET;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,cAAa;AACb;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;;AAEA,gDAA+C,SAAS;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAS;;AAET;AACA;AACA;AACA;;AAEA,gDAA+C,SAAS;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,EAAC;;;;;;;;AC/LD;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;;AAET;AACA,4DAA2D,UAAU;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,EAAC;;;;;;;AC1GD;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,+BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAqC,UAAU,sBAAsB;AACrE;AACA;AACA;AACA;;AAEA;AACA;AACA,oCAAmC;AACnC;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACrFA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;ACbA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAe,iBAAiB;AAChC;AACA;;AAEA;AACA;AACA;;AAEA,kBAAiB,gBAAgB;AACjC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,kBAAiB,SAAS;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AChKA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,4CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,sCAAqC;AACrC;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,4CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAA+B,gBAAgB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB;AACnB,8BAA6B,0BAA0B;AACvD;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,SAAS;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf,8BAA6B,0BAA0B;AACvD;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAmC,SAAS;AAC5C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA,oBAAmB,yBAAyB;AAC5C;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACnjBA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB,qBAAqB;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,uBAAsB,6BAA6B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,6BAA4B,QAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB,4BAA4B;AAC7C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,uBAAuB;AACpC;AACA;AACA;AACA,4BAA2B,sBAAsB;AACjD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"rollbar.named-amd.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 4f6440bc8e5c64fdca1c","'use strict';\n\nvar rollbar = require('../rollbar');\n\nvar options = (typeof window !== 'undefined') && window._rollbarConfig;\nvar alias = options && options.globalAlias || 'Rollbar';\nvar shimRunning = (typeof window !== 'undefined') && window[alias] && typeof window[alias].shimId === 'function' && window[alias].shimId() !== undefined;\n\nif ((typeof window !== 'undefined') && !window._rollbarStartTime) {\n window._rollbarStartTime = (new Date()).getTime();\n}\n\nif (!shimRunning && options) {\n var Rollbar = new rollbar(options);\n window[alias] = Rollbar;\n} else if (typeof window !== 'undefined') {\n window.rollbar = rollbar;\n window._rollbarDidLoad = true;\n} else if (typeof self !== 'undefined') {\n self.rollbar = rollbar;\n self._rollbarDidLoad = true;\n}\n\nmodule.exports = rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/bundles/rollbar.js\n// module id = 1\n// module chunks = 0","'use strict';\n\nvar Client = require('../rollbar');\nvar _ = require('../utility');\nvar API = require('../api');\nvar logger = require('./logger');\nvar globals = require('./globalSetup');\n\nvar transport = require('./transport');\nvar urllib = require('./url');\n\nvar transforms = require('./transforms');\nvar sharedTransforms = require('../transforms');\nvar predicates = require('./predicates');\nvar sharedPredicates = require('../predicates');\nvar errorParser = require('./errorParser');\nvar Instrumenter = require('./telemetry');\n\nfunction Rollbar(options, client) {\n this.options = _.extend({}, defaultOptions, options);\n var api = new API(this.options, transport, urllib);\n this.client = client || new Client(this.options, api, logger, 'browser');\n\n var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n var gDocument = (typeof document != 'undefined') && document;\n addTransformsToNotifier(this.client.notifier);\n addPredicatesToQueue(this.client.queue);\n if (this.options.captureUncaught || this.options.handleUncaughtExceptions) {\n globals.captureUncaughtExceptions(gWindow, this);\n globals.wrapGlobals(gWindow, this);\n }\n if (this.options.captureUnhandledRejections || this.options.handleUnhandledRejections) {\n globals.captureUnhandledRejections(gWindow, this);\n }\n\n this.instrumenter = new Instrumenter(this.options, this.client.telemeter, this, gWindow, gDocument);\n this.instrumenter.instrument();\n}\n\nvar _instance = null;\nRollbar.init = function(options, client) {\n if (_instance) {\n return _instance.global(options).configure(options);\n }\n _instance = new Rollbar(options, client);\n return _instance;\n};\n\nfunction handleUninitialized(maybeCallback) {\n var message = 'Rollbar is not initialized';\n logger.error(message);\n if (maybeCallback) {\n maybeCallback(new Error(message));\n }\n}\n\nRollbar.prototype.global = function(options) {\n this.client.global(options);\n return this;\n};\nRollbar.global = function(options) {\n if (_instance) {\n return _instance.global(options);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.extend({}, oldOptions, options, payload);\n this.client.configure(options, payloadData);\n this.instrumenter.configure(options);\n return this;\n};\nRollbar.configure = function(options, payloadData) {\n if (_instance) {\n return _instance.configure(options, payloadData);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.lastError = function() {\n return this.client.lastError;\n};\nRollbar.lastError = function() {\n if (_instance) {\n return _instance.lastError();\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.log = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.log(item);\n return {uuid: uuid};\n};\nRollbar.log = function() {\n if (_instance) {\n return _instance.log.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.debug = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.debug(item);\n return {uuid: uuid};\n};\nRollbar.debug = function() {\n if (_instance) {\n return _instance.debug.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.info = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.info(item);\n return {uuid: uuid};\n};\nRollbar.info = function() {\n if (_instance) {\n return _instance.info.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warn = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warn(item);\n return {uuid: uuid};\n};\nRollbar.warn = function() {\n if (_instance) {\n return _instance.warn.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warning = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warning(item);\n return {uuid: uuid};\n};\nRollbar.warning = function() {\n if (_instance) {\n return _instance.warning.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.error = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.error(item);\n return {uuid: uuid};\n};\nRollbar.error = function() {\n if (_instance) {\n return _instance.error.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.critical = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.critical(item);\n return {uuid: uuid};\n};\nRollbar.critical = function() {\n if (_instance) {\n return _instance.critical.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.handleUncaughtException = function(message, url, lineno, colno, error, context) {\n var item;\n var stackInfo = _.makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n 'onerror',\n 'uncaught exception',\n errorParser\n );\n if (_.isError(error)) {\n item = this._createItem([message, error, context]);\n item._unhandledStackInfo = stackInfo;\n } else if (_.isError(url)) {\n item = this._createItem([message, url, context]);\n item._unhandledStackInfo = stackInfo;\n } else {\n item = this._createItem([message, context]);\n item.stackInfo = stackInfo;\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n this.client.log(item);\n};\n\nRollbar.prototype.handleUnhandledRejection = function(reason, promise) {\n var message = 'unhandled rejection was null or undefined!';\n message = reason ? (reason.message || String(reason)) : message;\n var context = (reason && reason._rollbarContext) || (promise && promise._rollbarContext);\n\n var item;\n if (_.isError(reason)) {\n item = this._createItem([message, reason, context]);\n } else {\n item = this._createItem([message, reason, context]);\n item.stackInfo = _.makeUnhandledStackInfo(\n message,\n '',\n 0,\n 0,\n null,\n 'unhandledrejection',\n '',\n errorParser\n );\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n item._originalArgs = item._originalArgs || [];\n item._originalArgs.push(promise);\n this.client.log(item);\n};\n\nRollbar.prototype.wrap = function(f, context, _before) {\n try {\n var ctxFn;\n if(_.isFunction(context)) {\n ctxFn = context;\n } else {\n ctxFn = function() { return context || {}; };\n }\n\n if (!_.isFunction(f)) {\n return f;\n }\n\n if (f._isWrap) {\n return f;\n }\n\n if (!f._rollbar_wrapped) {\n f._rollbar_wrapped = function () {\n if (_before && _.isFunction(_before)) {\n _before.apply(this, arguments);\n }\n try {\n return f.apply(this, arguments);\n } catch(exc) {\n var e = exc;\n if (e) {\n if (_.isType(e, 'string')) {\n e = new String(e);\n }\n e._rollbarContext = ctxFn() || {};\n e._rollbarContext._wrappedSource = f.toString();\n\n window._rollbarWrappedError = e;\n }\n throw e;\n }\n };\n\n f._rollbar_wrapped._isWrap = true;\n\n if (f.hasOwnProperty) {\n for (var prop in f) {\n if (f.hasOwnProperty(prop)) {\n f._rollbar_wrapped[prop] = f[prop];\n }\n }\n }\n }\n\n return f._rollbar_wrapped;\n } catch (e) {\n // Return the original function if the wrap fails.\n return f;\n }\n};\nRollbar.wrap = function(f, context) {\n if (_instance) {\n return _instance.wrap(f, context);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.captureEvent = function(metadata, level) {\n return this.client.captureEvent(metadata, level);\n};\nRollbar.captureEvent = function(metadata, level) {\n if (_instance) {\n return _instance.captureEvent(metadata, level);\n } else {\n handleUninitialized();\n }\n};\n\n// The following two methods are used internally and are not meant for public use\nRollbar.prototype.captureDomContentLoaded = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureLoad(ts);\n};\n\n/* Internal */\n\nfunction addTransformsToNotifier(notifier) {\n notifier\n .addTransform(transforms.handleItemWithError)\n .addTransform(transforms.ensureItemHasSomethingToSay)\n .addTransform(transforms.addBaseInfo)\n .addTransform(transforms.addRequestInfo(window))\n .addTransform(transforms.addClientInfo(window))\n .addTransform(transforms.addPluginInfo(window))\n .addTransform(transforms.addBody)\n .addTransform(sharedTransforms.addMessageWithError)\n .addTransform(sharedTransforms.addTelemetryData)\n .addTransform(sharedTransforms.addConfigToPayload)\n .addTransform(transforms.scrubPayload)\n .addTransform(sharedTransforms.userTransform(logger))\n .addTransform(sharedTransforms.itemToPayload);\n}\n\nfunction addPredicatesToQueue(queue) {\n queue\n .addPredicate(sharedPredicates.checkLevel)\n .addPredicate(predicates.checkIgnore)\n .addPredicate(sharedPredicates.userCheckIgnore(logger))\n .addPredicate(sharedPredicates.urlIsNotBlacklisted(logger))\n .addPredicate(sharedPredicates.urlIsWhitelisted(logger))\n .addPredicate(sharedPredicates.messageIsIgnored(logger));\n}\n\nRollbar.prototype._createItem = function(args) {\n return _.createItem(args, logger, this);\n};\n\nfunction _getFirstFunction(args) {\n for (var i = 0, len = args.length; i < len; ++i) {\n if (_.isFunction(args[i])) {\n return args[i];\n }\n }\n return undefined;\n}\n\n/* global __NOTIFIER_VERSION__:false */\n/* global __DEFAULT_BROWSER_SCRUB_FIELDS__:false */\n/* global __DEFAULT_LOG_LEVEL__:false */\n/* global __DEFAULT_REPORT_LEVEL__:false */\n/* global __DEFAULT_UNCAUGHT_ERROR_LEVEL:false */\n/* global __DEFAULT_ENDPOINT__:false */\n\nvar defaultOptions = {\n version: __NOTIFIER_VERSION__,\n scrubFields: __DEFAULT_BROWSER_SCRUB_FIELDS__,\n logLevel: __DEFAULT_LOG_LEVEL__,\n reportLevel: __DEFAULT_REPORT_LEVEL__,\n uncaughtErrorLevel: __DEFAULT_UNCAUGHT_ERROR_LEVEL,\n endpoint: __DEFAULT_ENDPOINT__,\n verbose: false,\n enabled: true,\n sendConfig: false,\n includeItemsInTelemetry: true,\n captureIp: true\n};\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/rollbar.js\n// module id = 2\n// module chunks = 0","'use strict';\n\nvar RateLimiter = require('./rateLimiter');\nvar Queue = require('./queue');\nvar Notifier = require('./notifier');\nvar Telemeter = require('./telemetry');\nvar _ = require('./utility');\n\n/*\n * Rollbar - the interface to Rollbar\n *\n * @param options\n * @param api\n * @param logger\n */\nfunction Rollbar(options, api, logger, platform) {\n this.options = _.extend(true, {}, options);\n this.logger = logger;\n Rollbar.rateLimiter.configureGlobal(this.options);\n Rollbar.rateLimiter.setPlatformOptions(platform, this.options);\n this.queue = new Queue(Rollbar.rateLimiter, api, logger, this.options);\n this.notifier = new Notifier(this.queue, this.options);\n this.telemeter = new Telemeter(this.options);\n this.lastError = null;\n}\n\nvar defaultOptions = {\n maxItems: 0,\n itemsPerMinute: 60\n};\n\nRollbar.rateLimiter = new RateLimiter(defaultOptions);\n\nRollbar.prototype.global = function(options) {\n Rollbar.rateLimiter.configureGlobal(options);\n return this;\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n this.notifier && this.notifier.configure(options);\n this.telemeter && this.telemeter.configure(options);\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.extend(true, {}, oldOptions, options, payload);\n this.global(this.options);\n return this;\n};\n\nRollbar.prototype.log = function(item) {\n var level = this._defaultLogLevel();\n return this._log(level, item);\n};\n\nRollbar.prototype.debug = function(item) {\n this._log('debug', item);\n};\n\nRollbar.prototype.info = function(item) {\n this._log('info', item);\n};\n\nRollbar.prototype.warn = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.warning = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.error = function(item) {\n this._log('error', item);\n};\n\nRollbar.prototype.critical = function(item) {\n this._log('critical', item);\n};\n\nRollbar.prototype.wait = function(callback) {\n this.queue.wait(callback);\n};\n\nRollbar.prototype.captureEvent = function(metadata, level) {\n return this.telemeter.captureEvent(metadata, level);\n};\n\nRollbar.prototype.captureDomContentLoaded = function(ts) {\n return this.telemeter.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(ts) {\n return this.telemeter.captureLoad(ts);\n};\n\n/* Internal */\n\nRollbar.prototype._log = function(defaultLevel, item) {\n if (this._sameAsLastError(item)) {\n if (item.callback) {\n item.callback();\n }\n return;\n }\n try {\n var callback = null;\n if (item.callback) {\n callback = item.callback;\n delete item.callback;\n }\n item.level = item.level || defaultLevel;\n this.telemeter._captureRollbarItem(item);\n item.telemetryEvents = this.telemeter.copyEvents();\n this.notifier.log(item, callback);\n } catch (e) {\n this.logger.error(e)\n }\n};\n\nRollbar.prototype._defaultLogLevel = function() {\n return this.options.logLevel || 'debug';\n};\n\nRollbar.prototype._sameAsLastError = function(item) {\n if (this.lastError && this.lastError === item.err) {\n return true;\n }\n this.lastError = item.err;\n return false;\n};\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rollbar.js\n// module id = 3\n// module chunks = 0","'use strict';\n\n/*\n * RateLimiter - an object that encapsulates the logic for counting items sent to Rollbar\n *\n * @param options - the same options that are accepted by configureGlobal offered as a convenience\n */\nfunction RateLimiter(options) {\n this.startTime = (new Date()).getTime();\n this.counter = 0;\n this.perMinCounter = 0;\n this.platform = null;\n this.platformOptions = {};\n this.configureGlobal(options);\n}\n\nRateLimiter.globalSettings = {\n startTime: (new Date()).getTime(),\n maxItems: undefined,\n itemsPerMinute: undefined\n};\n\n/*\n * configureGlobal - set the global rate limiter options\n *\n * @param options - Only the following values are recognized:\n * startTime: a timestamp of the form returned by (new Date()).getTime()\n * maxItems: the maximum items\n * itemsPerMinute: the max number of items to send in a given minute\n */\nRateLimiter.prototype.configureGlobal = function(options) {\n if (options.startTime !== undefined) {\n RateLimiter.globalSettings.startTime = options.startTime;\n }\n if (options.maxItems !== undefined) {\n RateLimiter.globalSettings.maxItems = options.maxItems;\n }\n if (options.itemsPerMinute !== undefined) {\n RateLimiter.globalSettings.itemsPerMinute = options.itemsPerMinute;\n }\n};\n\n/*\n * shouldSend - determine if we should send a given item based on rate limit settings\n *\n * @param item - the item we are about to send\n * @returns An object with the following structure:\n * error: (Error|null)\n * shouldSend: bool\n * payload: (Object|null)\n * If shouldSend is false, the item passed as a parameter should not be sent to Rollbar, and\n * exactly one of error or payload will be non-null. If error is non-null, the returned Error will\n * describe the situation, but it means that we were already over a rate limit (either globally or\n * per minute) when this item was checked. If error is null, and therefore payload is non-null, it\n * means this item put us over the global rate limit and the payload should be sent to Rollbar in\n * place of the passed in item.\n */\nRateLimiter.prototype.shouldSend = function(item, now) {\n now = now || (new Date()).getTime();\n if (now - this.startTime >= 60000) {\n this.startTime = now;\n this.perMinCounter = 0;\n }\n\n var globalRateLimit = RateLimiter.globalSettings.maxItems;\n var globalRateLimitPerMin = RateLimiter.globalSettings.itemsPerMinute;\n\n if (checkRate(item, globalRateLimit, this.counter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimit + ' max items reached', false);\n } else if (checkRate(item, globalRateLimitPerMin, this.perMinCounter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimitPerMin + ' items per minute reached', false);\n }\n this.counter++;\n this.perMinCounter++;\n\n var shouldSend = !checkRate(item, globalRateLimit, this.counter);\n var perMinute = shouldSend;\n shouldSend = shouldSend && !checkRate(item, globalRateLimitPerMin, this.perMinCounter);\n return shouldSendValue(this.platform, this.platformOptions, null, shouldSend, globalRateLimit, globalRateLimitPerMin, perMinute);\n};\n\nRateLimiter.prototype.setPlatformOptions = function(platform, options) {\n this.platform = platform;\n this.platformOptions = options;\n};\n\n/* Helpers */\n\nfunction checkRate(item, limit, counter) {\n return !item.ignoreRateLimit && limit >= 1 && counter > limit;\n}\n\nfunction shouldSendValue(platform, options, error, shouldSend, globalRateLimit, limitPerMin, perMinute) {\n var payload = null;\n if (error) {\n error = new Error(error);\n }\n if (!error && !shouldSend) {\n payload = rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute);\n }\n return {error: error, shouldSend: shouldSend, payload: payload};\n}\n\nfunction rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute) {\n var environment = options.environment || (options.payload && options.payload.environment);\n var msg;\n if (perMinute) {\n msg = 'item per minute limit reached, ignoring errors until timeout';\n } else {\n msg = 'maxItems has been hit, ignoring errors until reset.';\n }\n var item = {\n body: {\n message: {\n body: msg,\n extra: {\n maxItems: globalRateLimit,\n itemsPerMinute: limitPerMin\n }\n }\n },\n language: 'javascript',\n environment: environment,\n notifier: {\n version: (options.notifier && options.notifier.version) || options.version\n }\n };\n if (platform === 'browser') {\n item.platform = 'browser';\n item.framework = 'browser-js';\n item.notifier.name = 'rollbar-browser-js';\n } else if (platform === 'server') {\n item.framework = options.framework || 'node-js';\n item.notifier.name = options.notifier.name;\n } else if (platform === 'react-native') {\n item.framework = options.framework || 'react-native';\n item.notifier.name = options.notifier.name;\n }\n return item;\n}\n\nmodule.exports = RateLimiter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rateLimiter.js\n// module id = 4\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Queue - an object which handles which handles a queue of items to be sent to Rollbar.\n * This object handles rate limiting via a passed in rate limiter, retries based on connection\n * errors, and filtering of items based on a set of configurable predicates. The communication to\n * the backend is performed via a given API object.\n *\n * @param rateLimiter - An object which conforms to the interface\n * rateLimiter.shouldSend(item) -> bool\n * @param api - An object which conforms to the interface\n * api.postItem(payload, function(err, response))\n * @param logger - An object used to log verbose messages if desired\n * @param options - see Queue.prototype.configure\n */\nfunction Queue(rateLimiter, api, logger, options) {\n this.rateLimiter = rateLimiter;\n this.api = api;\n this.logger = logger;\n this.options = options;\n this.predicates = [];\n this.pendingItems = [];\n this.pendingRequests = [];\n this.retryQueue = [];\n this.retryHandle = null;\n this.waitCallback = null;\n this.waitIntervalID = null;\n}\n\n/*\n * configure - updates the options this queue uses\n *\n * @param options\n */\nQueue.prototype.configure = function(options) {\n this.api && this.api.configure(options);\n var oldOptions = this.options;\n this.options = _.extend(true, {}, oldOptions, options);\n return this;\n};\n\n/*\n * addPredicate - adds a predicate to the end of the list of predicates for this queue\n *\n * @param predicate - function(item, options) -> (bool|{err: Error})\n * Returning true means that this predicate passes and the item is okay to go on the queue\n * Returning false means do not add the item to the queue, but it is not an error\n * Returning {err: Error} means do not add the item to the queue, and the given error explains why\n * Returning {err: undefined} is equivalent to returning true but don't do that\n */\nQueue.prototype.addPredicate = function(predicate) {\n if (_.isFunction(predicate)) {\n this.predicates.push(predicate);\n }\n return this;\n};\n\nQueue.prototype.addPendingItem = function(item) {\n this.pendingItems.push(item);\n};\n\nQueue.prototype.removePendingItem = function(item) {\n var idx = this.pendingItems.indexOf(item);\n if (idx !== -1) {\n this.pendingItems.splice(idx, 1);\n }\n};\n\n/*\n * addItem - Send an item to the Rollbar API if all of the predicates are satisfied\n *\n * @param item - The payload to send to the backend\n * @param callback - function(error, repsonse) which will be called with the response from the API\n * in the case of a success, otherwise response will be null and error will have a value. If both\n * error and response are null then the item was stopped by a predicate which did not consider this\n * to be an error condition, but nonetheless did not send the item to the API.\n * @param originalError - The original error before any transformations that is to be logged if any\n */\nQueue.prototype.addItem = function(item, callback, originalError, originalItem) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() { return; };\n }\n var predicateResult = this._applyPredicates(item);\n if (predicateResult.stop) {\n this.removePendingItem(originalItem);\n callback(predicateResult.err);\n return;\n }\n this._maybeLog(item, originalError);\n this.removePendingItem(originalItem);\n this.pendingRequests.push(item);\n try {\n this._makeApiRequest(item, function(err, resp) {\n this._dequeuePendingRequest(item);\n callback(err, resp);\n }.bind(this));\n } catch (e) {\n this._dequeuePendingRequest(item);\n callback(e);\n }\n};\n\n/*\n * wait - Stop any further errors from being added to the queue, and get called back when all items\n * currently processing have finished sending to the backend.\n *\n * @param callback - function() called when all pending items have been sent\n */\nQueue.prototype.wait = function(callback) {\n if (!_.isFunction(callback)) {\n return;\n }\n this.waitCallback = callback;\n if (this._maybeCallWait()) {\n return;\n }\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitIntervalID = setInterval(function() {\n this._maybeCallWait();\n }.bind(this), 500);\n};\n\n/* _applyPredicates - Sequentially applies the predicates that have been added to the queue to the\n * given item with the currently configured options.\n *\n * @param item - An item in the queue\n * @returns {stop: bool, err: (Error|null)} - stop being true means do not add item to the queue,\n * the error value should be passed up to a callbak if we are stopping.\n */\nQueue.prototype._applyPredicates = function(item) {\n var p = null;\n for (var i = 0, len = this.predicates.length; i < len; i++) {\n p = this.predicates[i](item, this.options);\n if (!p || p.err !== undefined) {\n return {stop: true, err: p.err};\n }\n }\n return {stop: false, err: null};\n};\n\n/*\n * _makeApiRequest - Send an item to Rollbar, callback when done, if there is an error make an\n * effort to retry if we are configured to do so.\n *\n * @param item - an item ready to send to the backend\n * @param callback - function(err, response)\n */\nQueue.prototype._makeApiRequest = function(item, callback) {\n var rateLimitResponse = this.rateLimiter.shouldSend(item);\n if (rateLimitResponse.shouldSend) {\n this.api.postItem(item, function(err, resp) {\n if (err) {\n this._maybeRetry(err, item, callback);\n } else {\n callback(err, resp);\n }\n }.bind(this));\n } else if (rateLimitResponse.error) {\n callback(rateLimitResponse.error);\n } else {\n this.api.postItem(rateLimitResponse.payload, callback);\n }\n};\n\n// These are errors basically mean there is no internet connection\nvar RETRIABLE_ERRORS = ['ECONNRESET', 'ENOTFOUND', 'ESOCKETTIMEDOUT', 'ETIMEDOUT', 'ECONNREFUSED', 'EHOSTUNREACH', 'EPIPE', 'EAI_AGAIN'];\n\n/*\n * _maybeRetry - Given the error returned by the API, decide if we should retry or just callback\n * with the error.\n *\n * @param err - an error returned by the API transport\n * @param item - the item that was trying to be sent when this error occured\n * @param callback - function(err, response)\n */\nQueue.prototype._maybeRetry = function(err, item, callback) {\n var shouldRetry = false;\n if (this.options.retryInterval) {\n for (var i = 0, len = RETRIABLE_ERRORS.length; i < len; i++) {\n if (err.code === RETRIABLE_ERRORS[i]) {\n shouldRetry = true;\n break;\n }\n }\n }\n if (shouldRetry) {\n this._retryApiRequest(item, callback);\n } else {\n callback(err);\n }\n};\n\n/*\n * _retryApiRequest - Add an item and a callback to a queue and possibly start a timer to process\n * that queue based on the retryInterval in the options for this queue.\n *\n * @param item - an item that failed to send due to an error we deem retriable\n * @param callback - function(err, response)\n */\nQueue.prototype._retryApiRequest = function(item, callback) {\n this.retryQueue.push({item: item, callback: callback});\n\n if (!this.retryHandle) {\n this.retryHandle = setInterval(function() {\n while (this.retryQueue.length) {\n var retryObject = this.retryQueue.shift();\n this._makeApiRequest(retryObject.item, retryObject.callback);\n }\n }.bind(this), this.options.retryInterval);\n }\n};\n\n/*\n * _dequeuePendingRequest - Removes the item from the pending request queue, this queue is used to\n * enable to functionality of providing a callback that clients can pass to `wait` to be notified\n * when the pending request queue has been emptied. This must be called when the API finishes\n * processing this item. If a `wait` callback is configured, it is called by this function.\n *\n * @param item - the item previously added to the pending request queue\n */\nQueue.prototype._dequeuePendingRequest = function(item) {\n var idx = this.pendingRequests.indexOf(item);\n if (idx !== -1) {\n this.pendingRequests.splice(idx, 1);\n this._maybeCallWait();\n }\n};\n\nQueue.prototype._maybeLog = function(data, originalError) {\n if (this.logger && this.options.verbose) {\n var message = originalError;\n message = message || _.get(data, 'body.trace.exception.message');\n message = message || _.get(data, 'body.trace_chain.0.exception.message');\n if (message) {\n this.logger.error(message);\n return;\n }\n message = _.get(data, 'body.message.body');\n if (message) {\n this.logger.log(message);\n }\n }\n};\n\nQueue.prototype._maybeCallWait = function() {\n if (_.isFunction(this.waitCallback) && this.pendingItems.length === 0 && this.pendingRequests.length === 0) {\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitCallback();\n return true;\n }\n return false;\n};\n\nmodule.exports = Queue;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/queue.js\n// module id = 5\n// module chunks = 0","'use strict';\n\nvar extend = require('extend');\n\nvar RollbarJSON = {};\nvar __initRollbarJSON = false;\nfunction setupJSON() {\n if (__initRollbarJSON) {\n return;\n }\n __initRollbarJSON = true;\n\n if (isDefined(JSON)) {\n if (isNativeFunction(JSON.stringify)) {\n RollbarJSON.stringify = JSON.stringify;\n }\n if (isNativeFunction(JSON.parse)) {\n RollbarJSON.parse = JSON.parse;\n }\n }\n if (!isFunction(RollbarJSON.stringify) || !isFunction(RollbarJSON.parse)) {\n var setupCustomJSON = require('../vendor/JSON-js/json3.js');\n setupCustomJSON(RollbarJSON);\n }\n}\nsetupJSON();\n\n/*\n * isType - Given a Javascript value and a string, returns true if the type of the value matches the\n * given string.\n *\n * @param x - any value\n * @param t - a lowercase string containing one of the following type names:\n * - undefined\n * - null\n * - error\n * - number\n * - boolean\n * - string\n * - symbol\n * - function\n * - object\n * - array\n * @returns true if x is of type t, otherwise false\n */\nfunction isType(x, t) {\n return t === typeName(x);\n}\n\n/*\n * typeName - Given a Javascript value, returns the type of the object as a string\n */\nfunction typeName(x) {\n var name = typeof x;\n if (name !== 'object') {\n return name;\n }\n if (!x) {\n return 'null';\n }\n if (x instanceof Error) {\n return 'error';\n }\n return ({}).toString.call(x).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n}\n\n/* isFunction - a convenience function for checking if a value is a function\n *\n * @param f - any value\n * @returns true if f is a function, otherwise false\n */\nfunction isFunction(f) {\n return isType(f, 'function');\n}\n\n/* isNativeFunction - a convenience function for checking if a value is a native JS function\n *\n * @param f - any value\n * @returns true if f is a native JS function, otherwise false\n */\nfunction isNativeFunction(f) {\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n var funcMatchString = Function.prototype.toString.call(Object.prototype.hasOwnProperty)\n .replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?');\n var reIsNative = RegExp('^' + funcMatchString + '$');\n return isObject(f) && reIsNative.test(f);\n}\n\n/* isObject - Checks if the argument is an object\n *\n * @param value - any value\n * @returns true is value is an object function is an object)\n*/\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/*\n * isDefined - a convenience function for checking if a value is not equal to undefined\n *\n * @param u - any value\n * @returns true if u is anything other than undefined\n */\nfunction isDefined(u) {\n return !isType(u, 'undefined');\n}\n\n/*\n * isIterable - convenience function for checking if a value can be iterated, essentially\n * whether it is an object or an array.\n *\n * @param i - any value\n * @returns true if i is an object or an array as determined by `typeName`\n */\nfunction isIterable(i) {\n var type = typeName(i);\n return (type === 'object' || type === 'array');\n}\n\n/*\n * isError - convenience function for checking if a value is of an error type\n *\n * @param e - any value\n * @returns true if e is an error\n */\nfunction isError(e) {\n return isType(e, 'error');\n}\n\nfunction traverse(obj, func, seen) {\n var k, v, i;\n var isObj = isType(obj, 'object');\n var isArray = isType(obj, 'array');\n var keys = [];\n\n if (isObj && seen.indexOf(obj) !== -1) {\n return obj;\n }\n seen.push(obj);\n\n if (isObj) {\n for (k in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, k)) {\n keys.push(k);\n }\n }\n } else if (isArray) {\n for (i = 0; i < obj.length; ++i) {\n keys.push(i);\n }\n }\n\n var result = isObj ? {} : [];\n for (i = 0; i < keys.length; ++i) {\n k = keys[i];\n v = obj[k];\n result[k] = func(k, v, seen);\n }\n\n return (keys.length != 0) ? result : obj;\n}\n\nfunction redact() {\n return '********';\n}\n\n// from http://stackoverflow.com/a/8809472/1138191\nfunction uuid4() {\n var d = now();\n var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (d + Math.random() * 16) % 16 | 0;\n d = Math.floor(d / 16);\n return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16);\n });\n return uuid;\n}\n\nvar LEVELS = {\n debug: 0,\n info: 1,\n warning: 2,\n error: 3,\n critical: 4\n};\n\nfunction sanitizeUrl(url) {\n var baseUrlParts = parseUri(url);\n // remove a trailing # if there is no anchor\n if (baseUrlParts.anchor === '') {\n baseUrlParts.source = baseUrlParts.source.replace('#', '');\n }\n\n url = baseUrlParts.source.replace('?' + baseUrlParts.query, '');\n return url;\n}\n\nvar parseUriOptions = {\n strictMode: false,\n key: [\n 'source',\n 'protocol',\n 'authority',\n 'userInfo',\n 'user',\n 'password',\n 'host',\n 'port',\n 'relative',\n 'path',\n 'directory',\n 'file',\n 'query',\n 'anchor'\n ],\n q: {\n name: 'queryKey',\n parser: /(?:^|&)([^&=]*)=?([^&]*)/g\n },\n parser: {\n strict: /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,\n loose: /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/\n }\n};\n\nfunction parseUri(str) {\n if (!isType(str, 'string')) {\n throw new Error('received invalid input');\n }\n\n var o = parseUriOptions;\n var m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str);\n var uri = {};\n var i = o.key.length;\n\n while (i--) {\n uri[o.key[i]] = m[i] || '';\n }\n\n uri[o.q.name] = {};\n uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {\n if ($1) {\n uri[o.q.name][$1] = $2;\n }\n });\n\n return uri;\n}\n\nfunction addParamsAndAccessTokenToPath(accessToken, options, params) {\n params = params || {};\n params.access_token = accessToken;\n var paramsArray = [];\n var k;\n for (k in params) {\n if (Object.prototype.hasOwnProperty.call(params, k)) {\n paramsArray.push([k, params[k]].join('='));\n }\n }\n var query = '?' + paramsArray.sort().join('&');\n\n options = options || {};\n options.path = options.path || '';\n var qs = options.path.indexOf('?');\n var h = options.path.indexOf('#');\n var p;\n if (qs !== -1 && (h === -1 || h > qs)) {\n p = options.path;\n options.path = p.substring(0,qs) + query + '&' + p.substring(qs+1);\n } else {\n if (h !== -1) {\n p = options.path;\n options.path = p.substring(0,h) + query + p.substring(h);\n } else {\n options.path = options.path + query;\n }\n }\n}\n\nfunction formatUrl(u, protocol) {\n protocol = protocol || u.protocol;\n if (!protocol && u.port) {\n if (u.port === 80) {\n protocol = 'http:';\n } else if (u.port === 443) {\n protocol = 'https:';\n }\n }\n protocol = protocol || 'https:';\n\n if (!u.hostname) {\n return null;\n }\n var result = protocol + '//' + u.hostname;\n if (u.port) {\n result = result + ':' + u.port;\n }\n if (u.path) {\n result = result + u.path;\n }\n return result;\n}\n\nfunction stringify(obj, backup) {\n var value, error;\n try {\n value = RollbarJSON.stringify(obj);\n } catch (jsonError) {\n if (backup && isFunction(backup)) {\n try {\n value = backup(obj);\n } catch (backupError) {\n error = backupError;\n }\n } else {\n error = jsonError;\n }\n }\n return {error: error, value: value};\n}\n\nfunction jsonParse(s) {\n var value, error;\n try {\n value = RollbarJSON.parse(s);\n } catch (e) {\n error = e;\n }\n return {error: error, value: value};\n}\n\nfunction makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n mode,\n backupMessage,\n errorParser\n) {\n var location = {\n url: url || '',\n line: lineno,\n column: colno\n };\n location.func = errorParser.guessFunctionName(location.url, location.line);\n location.context = errorParser.gatherContext(location.url, location.line);\n var href = document && document.location && document.location.href;\n var useragent = window && window.navigator && window.navigator.userAgent;\n return {\n 'mode': mode,\n 'message': error ? String(error) : (message || backupMessage),\n 'url': href,\n 'stack': [location],\n 'useragent': useragent\n };\n}\n\nfunction wrapCallback(logger, f) {\n return function(err, resp) {\n try {\n f(err, resp);\n } catch (e) {\n logger.error(e);\n }\n };\n}\n\nfunction createItem(args, logger, notifier, requestKeys, lambdaContext) {\n var message, err, custom, callback, request;\n var arg;\n var extraArgs = [];\n\n for (var i = 0, l = args.length; i < l; ++i) {\n arg = args[i];\n\n var typ = typeName(arg);\n switch (typ) {\n case 'undefined':\n break;\n case 'string':\n message ? extraArgs.push(arg) : message = arg;\n break;\n case 'function':\n callback = wrapCallback(logger, arg);\n break;\n case 'date':\n extraArgs.push(arg);\n break;\n case 'error':\n case 'domexception':\n err ? extraArgs.push(arg) : err = arg;\n break;\n case 'object':\n case 'array':\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n if (requestKeys && typ === 'object' && !request) {\n for (var j = 0, len = requestKeys.length; j < len; ++j) {\n if (arg[requestKeys[j]] !== undefined) {\n request = arg;\n break;\n }\n }\n if (request) {\n break;\n }\n }\n custom ? extraArgs.push(arg) : custom = arg;\n break;\n default:\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n extraArgs.push(arg);\n }\n }\n\n if (extraArgs.length > 0) {\n // if custom is an array this turns it into an object with integer keys\n custom = extend(true, {}, custom);\n custom.extraArgs = extraArgs;\n }\n\n var item = {\n message: message,\n err: err,\n custom: custom,\n timestamp: now(),\n callback: callback,\n uuid: uuid4()\n };\n if (custom && custom.level !== undefined) {\n item.level = custom.level;\n delete custom.level;\n }\n if (requestKeys && request) {\n item.request = request;\n }\n if (lambdaContext) {\n item.lambdaContext = lambdaContext;\n }\n item._originalArgs = args;\n return item;\n}\n\n/*\n * get - given an obj/array and a keypath, return the value at that keypath or\n * undefined if not possible.\n *\n * @param obj - an object or array\n * @param path - a string of keys separated by '.' such as 'plugin.jquery.0.message'\n * which would correspond to 42 in `{plugin: {jquery: [{message: 42}]}}`\n */\nfunction get(obj, path) {\n if (!obj) {\n return undefined;\n }\n var keys = path.split('.');\n var result = obj;\n try {\n for (var i = 0, len = keys.length; i < len; ++i) {\n result = result[keys[i]];\n }\n } catch (e) {\n result = undefined;\n }\n return result;\n}\n\nfunction set(obj, path, value) {\n if (!obj) {\n return;\n }\n var keys = path.split('.');\n var len = keys.length;\n if (len < 1) {\n return;\n }\n if (len === 1) {\n obj[keys[0]] = value;\n return;\n }\n try {\n var temp = obj[keys[0]] || {};\n var replacement = temp;\n for (var i = 1; i < len-1; i++) {\n temp[keys[i]] = temp[keys[i]] || {};\n temp = temp[keys[i]];\n }\n temp[keys[len-1]] = value;\n obj[keys[0]] = replacement;\n } catch (e) {\n return;\n }\n}\n\nfunction scrub(data, scrubFields) {\n scrubFields = scrubFields || [];\n var paramRes = _getScrubFieldRegexs(scrubFields);\n var queryRes = _getScrubQueryParamRegexs(scrubFields);\n\n function redactQueryParam(dummy0, paramPart, dummy1, dummy2, dummy3, valPart) {\n return paramPart + redact(valPart);\n }\n\n function paramScrubber(v) {\n var i;\n if (isType(v, 'string')) {\n for (i = 0; i < queryRes.length; ++i) {\n v = v.replace(queryRes[i], redactQueryParam);\n }\n }\n return v;\n }\n\n function valScrubber(k, v) {\n var i;\n for (i = 0; i < paramRes.length; ++i) {\n if (paramRes[i].test(k)) {\n v = redact(v);\n break;\n }\n }\n return v;\n }\n\n function scrubber(k, v, seen) {\n var tmpV = valScrubber(k, v);\n if (tmpV === v) {\n if (isType(v, 'object') || isType(v, 'array')) {\n return traverse(v, scrubber, seen);\n }\n return paramScrubber(tmpV);\n } else {\n return tmpV;\n }\n }\n\n return traverse(data, scrubber, []);\n}\n\nfunction _getScrubFieldRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '^\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?$';\n ret.push(new RegExp(pat, 'i'));\n }\n return ret;\n}\n\n\nfunction _getScrubQueryParamRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?';\n ret.push(new RegExp('(' + pat + '=)([^&\\\\n]+)', 'igm'));\n }\n return ret;\n}\n\nfunction formatArgsAsString(args) {\n var i, len, arg;\n var result = [];\n for (i = 0, len = args.length; i < len; i++) {\n arg = args[i];\n if (typeof arg === 'object') {\n arg = stringify(arg);\n arg = arg.error || arg.value;\n if (arg.length > 500)\n arg = arg.substr(0,500)+'...';\n } else if (typeof arg === 'undefined') {\n arg = 'undefined';\n }\n result.push(arg);\n }\n return result.join(' ');\n}\n\nfunction now() {\n if (Date.now) {\n return +Date.now();\n }\n return +new Date();\n}\n\nfunction filterIp(requestData, captureIp) {\n if (!requestData || !requestData['user_ip'] || captureIp === true) {\n return;\n }\n var newIp = requestData['user_ip'];\n if (!captureIp) {\n newIp = null;\n } else {\n try {\n var parts;\n if (newIp.indexOf('.') !== -1) {\n parts = newIp.split('.');\n parts.pop();\n parts.push('0');\n newIp = parts.join('.');\n } else if (newIp.indexOf(':') !== -1) {\n parts = newIp.split(':');\n if (parts.length > 2) {\n var beginning = parts.slice(0, 3);\n var slashIdx = beginning[2].indexOf('/');\n if (slashIdx !== -1) {\n beginning[2] = beginning[2].substring(0, slashIdx);\n }\n var terminal = '0000:0000:0000:0000:0000';\n newIp = beginning.concat(terminal).join(':');\n }\n } else {\n newIp = null;\n }\n } catch (e) {\n newIp = null;\n }\n }\n requestData['user_ip'] = newIp;\n}\n\nmodule.exports = {\n isType: isType,\n typeName: typeName,\n isFunction: isFunction,\n isNativeFunction: isNativeFunction,\n isIterable: isIterable,\n isError: isError,\n extend: extend,\n traverse: traverse,\n redact: redact,\n uuid4: uuid4,\n LEVELS: LEVELS,\n sanitizeUrl: sanitizeUrl,\n addParamsAndAccessTokenToPath: addParamsAndAccessTokenToPath,\n formatUrl: formatUrl,\n stringify: stringify,\n jsonParse: jsonParse,\n makeUnhandledStackInfo: makeUnhandledStackInfo,\n createItem: createItem,\n get: get,\n set: set,\n scrub: scrub,\n formatArgsAsString: formatArgsAsString,\n now: now,\n filterIp: filterIp\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/utility.js\n// module id = 6\n// module chunks = 0","'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) {/**/}\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[0],\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t} else if ((typeof target !== 'object' && typeof target !== 'function') || target == null) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = target[name];\n\t\t\t\tcopy = options[name];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\ttarget[name] = extend(deep, clone, copy);\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/extend/index.js\n// module id = 7\n// module chunks = 0","// json3.js\n// 2017-02-21\n// Public Domain.\n// NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n// See http://www.JSON.org/js.html\n// This code should be minified before deployment.\n// See http://javascript.crockford.com/jsmin.html\n\n// USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n// NOT CONTROL.\n\n// This file creates a global JSON object containing two methods: stringify\n// and parse. This file provides the ES5 JSON capability to ES3 systems.\n// If a project might run on IE8 or earlier, then this file should be included.\n// This file does nothing on ES5 systems.\n\n// JSON.stringify(value, replacer, space)\n// value any JavaScript value, usually an object or array.\n// replacer an optional parameter that determines how object\n// values are stringified for objects. It can be a\n// function or an array of strings.\n// space an optional parameter that specifies the indentation\n// of nested structures. If it is omitted, the text will\n// be packed without extra whitespace. If it is a number,\n// it will specify the number of spaces to indent at each\n// level. If it is a string (such as \"\\t\" or \" \"),\n// it contains the characters used to indent at each level.\n// This method produces a JSON text from a JavaScript value.\n// When an object value is found, if the object contains a toJSON\n// method, its toJSON method will be called and the result will be\n// stringified. A toJSON method does not serialize: it returns the\n// value represented by the name/value pair that should be serialized,\n// or undefined if nothing should be serialized. The toJSON method\n// will be passed the key associated with the value, and this will be\n// bound to the value.\n\n// For example, this would serialize Dates as ISO strings.\n\n// Date.prototype.toJSON = function (key) {\n// function f(n) {\n// // Format integers to have at least two digits.\n// return (n < 10)\n// ? \"0\" + n\n// : n;\n// }\n// return this.getUTCFullYear() + \"-\" +\n// f(this.getUTCMonth() + 1) + \"-\" +\n// f(this.getUTCDate()) + \"T\" +\n// f(this.getUTCHours()) + \":\" +\n// f(this.getUTCMinutes()) + \":\" +\n// f(this.getUTCSeconds()) + \"Z\";\n// };\n\n// You can provide an optional replacer method. It will be passed the\n// key and value of each member, with this bound to the containing\n// object. The value that is returned from your method will be\n// serialized. If your method returns undefined, then the member will\n// be excluded from the serialization.\n\n// If the replacer parameter is an array of strings, then it will be\n// used to select the members to be serialized. It filters the results\n// such that only members with keys listed in the replacer array are\n// stringified.\n\n// Values that do not have JSON representations, such as undefined or\n// functions, will not be serialized. Such values in objects will be\n// dropped; in arrays they will be replaced with null. You can use\n// a replacer function to replace those with JSON values.\n\n// JSON.stringify(undefined) returns undefined.\n\n// The optional space parameter produces a stringification of the\n// value that is filled with line breaks and indentation to make it\n// easier to read.\n\n// If the space parameter is a non-empty string, then that string will\n// be used for indentation. If the space parameter is a number, then\n// the indentation will be that many spaces.\n\n// Example:\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}]);\n// // text is '[\"e\",{\"pluribus\":\"unum\"}]'\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}], null, \"\\t\");\n// // text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\n\n// text = JSON.stringify([new Date()], function (key, value) {\n// return this[key] instanceof Date\n// ? \"Date(\" + this[key] + \")\"\n// : value;\n// });\n// // text is '[\"Date(---current time---)\"]'\n\n// JSON.parse(text, reviver)\n// This method parses a JSON text to produce an object or array.\n// It can throw a SyntaxError exception.\n// This has been modified to use JSON-js/json_parse_state.js as the\n// parser instead of the one built around eval found in JSON-js/json2.js\n\n// The optional reviver parameter is a function that can filter and\n// transform the results. It receives each of the keys and values,\n// and its return value is used instead of the original value.\n// If it returns what it received, then the structure is not modified.\n// If it returns undefined then the member is deleted.\n\n// Example:\n\n// // Parse the text. Values that look like ISO date strings will\n// // be converted to Date objects.\n\n// myData = JSON.parse(text, function (key, value) {\n// var a;\n// if (typeof value === \"string\") {\n// a =\n// /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n// if (a) {\n// return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n// +a[5], +a[6]));\n// }\n// }\n// return value;\n// });\n\n// myData = JSON.parse('[\"Date(09/09/2001)\"]', function (key, value) {\n// var d;\n// if (typeof value === \"string\" &&\n// value.slice(0, 5) === \"Date(\" &&\n// value.slice(-1) === \")\") {\n// d = new Date(value.slice(5, -1));\n// if (d) {\n// return d;\n// }\n// }\n// return value;\n// });\n\n// This is a reference implementation. You are free to copy, modify, or\n// redistribute.\n\n/*jslint\n for, this\n */\n\n/*property\n JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\n getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\n lastIndex, length, parse, prototype, push, replace, slice, stringify,\n test, toJSON, toString, valueOf\n */\n\nvar setupCustomJSON = function(JSON) {\n\n var rx_one = /^[\\],:{}\\s]*$/;\n var rx_two = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g;\n var rx_three = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\n var rx_four = /(?:^|:|,)(?:\\s*\\[)+/g;\n var rx_escapable = /[\\\\\"\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n var rx_dangerous = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\n function f(n) {\n // Format integers to have at least two digits.\n return n < 10\n ? \"0\" + n\n : n;\n }\n\n function this_value() {\n return this.valueOf();\n }\n\n if (typeof Date.prototype.toJSON !== \"function\") {\n\n Date.prototype.toJSON = function () {\n\n return isFinite(this.valueOf())\n ? this.getUTCFullYear() + \"-\" +\n f(this.getUTCMonth() + 1) + \"-\" +\n f(this.getUTCDate()) + \"T\" +\n f(this.getUTCHours()) + \":\" +\n f(this.getUTCMinutes()) + \":\" +\n f(this.getUTCSeconds()) + \"Z\"\n : null;\n };\n\n Boolean.prototype.toJSON = this_value;\n Number.prototype.toJSON = this_value;\n String.prototype.toJSON = this_value;\n }\n\n var gap;\n var indent;\n var meta;\n var rep;\n\n\n function quote(string) {\n\n // If the string contains no control characters, no quote characters, and no\n // backslash characters, then we can safely slap some quotes around it.\n // Otherwise we must also replace the offending characters with safe escape\n // sequences.\n\n rx_escapable.lastIndex = 0;\n return rx_escapable.test(string)\n ? \"\\\"\" + string.replace(rx_escapable, function (a) {\n var c = meta[a];\n return typeof c === \"string\"\n ? c\n : \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n }) + \"\\\"\"\n : \"\\\"\" + string + \"\\\"\";\n }\n\n\n function str(key, holder) {\n\n // Produce a string from holder[key].\n\n var i; // The loop counter.\n var k; // The member key.\n var v; // The member value.\n var length;\n var mind = gap;\n var partial;\n var value = holder[key];\n\n // If the value has a toJSON method, call it to obtain a replacement value.\n\n if (value && typeof value === \"object\" &&\n typeof value.toJSON === \"function\") {\n value = value.toJSON(key);\n }\n\n // If we were called with a replacer function, then call the replacer to\n // obtain a replacement value.\n\n if (typeof rep === \"function\") {\n value = rep.call(holder, key, value);\n }\n\n // What happens next depends on the value's type.\n\n switch (typeof value) {\n case \"string\":\n return quote(value);\n\n case \"number\":\n\n // JSON numbers must be finite. Encode non-finite numbers as null.\n\n return isFinite(value)\n ? String(value)\n : \"null\";\n\n case \"boolean\":\n case \"null\":\n\n // If the value is a boolean or null, convert it to a string. Note:\n // typeof null does not produce \"null\". The case is included here in\n // the remote chance that this gets fixed someday.\n\n return String(value);\n\n // If the type is \"object\", we might be dealing with an object or an array or\n // null.\n\n case \"object\":\n\n // Due to a specification blunder in ECMAScript, typeof null is \"object\",\n // so watch out for that case.\n\n if (!value) {\n return \"null\";\n }\n\n // Make an array to hold the partial results of stringifying this object value.\n\n gap += indent;\n partial = [];\n\n // Is the value an array?\n\n if (Object.prototype.toString.apply(value) === \"[object Array]\") {\n\n // The value is an array. Stringify every element. Use null as a placeholder\n // for non-JSON values.\n\n length = value.length;\n for (i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || \"null\";\n }\n\n // Join all of the elements together, separated with commas, and wrap them in\n // brackets.\n\n v = partial.length === 0\n ? \"[]\"\n : gap\n ? \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\"\n : \"[\" + partial.join(\",\") + \"]\";\n gap = mind;\n return v;\n }\n\n // If the replacer is an array, use it to select the members to be stringified.\n\n if (rep && typeof rep === \"object\") {\n length = rep.length;\n for (i = 0; i < length; i += 1) {\n if (typeof rep[i] === \"string\") {\n k = rep[i];\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n } else {\n\n // Otherwise, iterate through all of the keys in the object.\n\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n }\n\n // Join all of the member texts together, separated with commas,\n // and wrap them in braces.\n\n v = partial.length === 0\n ? \"{}\"\n : gap\n ? \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\"\n : \"{\" + partial.join(\",\") + \"}\";\n gap = mind;\n return v;\n }\n }\n\n // If the JSON object does not yet have a stringify method, give it one.\n\n if (typeof JSON.stringify !== \"function\") {\n meta = { // table of character substitutions\n \"\\b\": \"\\\\b\",\n \"\\t\": \"\\\\t\",\n \"\\n\": \"\\\\n\",\n \"\\f\": \"\\\\f\",\n \"\\r\": \"\\\\r\",\n \"\\\"\": \"\\\\\\\"\",\n \"\\\\\": \"\\\\\\\\\"\n };\n JSON.stringify = function (value, replacer, space) {\n\n // The stringify method takes a value and an optional replacer, and an optional\n // space parameter, and returns a JSON text. The replacer can be a function\n // that can replace values, or an array of strings that will select the keys.\n // A default replacer method can be provided. Use of the space parameter can\n // produce text that is more easily readable.\n\n var i;\n gap = \"\";\n indent = \"\";\n\n // If the space parameter is a number, make an indent string containing that\n // many spaces.\n\n if (typeof space === \"number\") {\n for (i = 0; i < space; i += 1) {\n indent += \" \";\n }\n\n // If the space parameter is a string, it will be used as the indent string.\n\n } else if (typeof space === \"string\") {\n indent = space;\n }\n\n // If there is a replacer, it must be a function or an array.\n // Otherwise, throw an error.\n\n rep = replacer;\n if (replacer && typeof replacer !== \"function\" &&\n (typeof replacer !== \"object\" ||\n typeof replacer.length !== \"number\")) {\n throw new Error(\"JSON.stringify\");\n }\n\n // Make a fake root object containing our value under the key of \"\".\n // Return the result of stringifying the value.\n\n return str(\"\", {\"\": value});\n };\n }\n\n\n // If the JSON object does not yet have a parse method, give it one.\n\n if (typeof JSON.parse !== \"function\") {\n JSON.parse = (function () {\n\n // This function creates a JSON parse function that uses a state machine rather\n // than the dangerous eval function to parse a JSON text.\n\n var state; // The state of the parser, one of\n // 'go' The starting state\n // 'ok' The final, accepting state\n // 'firstokey' Ready for the first key of the object or\n // the closing of an empty object\n // 'okey' Ready for the next key of the object\n // 'colon' Ready for the colon\n // 'ovalue' Ready for the value half of a key/value pair\n // 'ocomma' Ready for a comma or closing }\n // 'firstavalue' Ready for the first value of an array or\n // an empty array\n // 'avalue' Ready for the next value of an array\n // 'acomma' Ready for a comma or closing ]\n var stack; // The stack, for controlling nesting.\n var container; // The current container object or array\n var key; // The current key\n var value; // The current value\n var escapes = { // Escapement translation table\n \"\\\\\": \"\\\\\",\n \"\\\"\": \"\\\"\",\n \"/\": \"/\",\n \"t\": \"\\t\",\n \"n\": \"\\n\",\n \"r\": \"\\r\",\n \"f\": \"\\f\",\n \"b\": \"\\b\"\n };\n var string = { // The actions for string tokens\n go: function () {\n state = \"ok\";\n },\n firstokey: function () {\n key = value;\n state = \"colon\";\n },\n okey: function () {\n key = value;\n state = \"colon\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var number = { // The actions for number tokens\n go: function () {\n state = \"ok\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var action = {\n\n // The action table describes the behavior of the machine. It contains an\n // object for each token. Each object contains a method that is called when\n // a token is matched in a state. An object will lack a method for illegal\n // states.\n\n \"{\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = {};\n state = \"firstokey\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = {};\n state = \"firstokey\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n }\n },\n \"}\": {\n firstokey: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n ocomma: function () {\n var pop = stack.pop();\n container[key] = value;\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \"[\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = [];\n state = \"firstavalue\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = [];\n state = \"firstavalue\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n }\n },\n \"]\": {\n firstavalue: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n acomma: function () {\n var pop = stack.pop();\n container.push(value);\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \":\": {\n colon: function () {\n if (Object.hasOwnProperty.call(container, key)) {\n throw new SyntaxError(\"Duplicate key '\" + key + \"\\\"\");\n }\n state = \"ovalue\";\n }\n },\n \",\": {\n ocomma: function () {\n container[key] = value;\n state = \"okey\";\n },\n acomma: function () {\n container.push(value);\n state = \"avalue\";\n }\n },\n \"true\": {\n go: function () {\n value = true;\n state = \"ok\";\n },\n ovalue: function () {\n value = true;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = true;\n state = \"acomma\";\n },\n avalue: function () {\n value = true;\n state = \"acomma\";\n }\n },\n \"false\": {\n go: function () {\n value = false;\n state = \"ok\";\n },\n ovalue: function () {\n value = false;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = false;\n state = \"acomma\";\n },\n avalue: function () {\n value = false;\n state = \"acomma\";\n }\n },\n \"null\": {\n go: function () {\n value = null;\n state = \"ok\";\n },\n ovalue: function () {\n value = null;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = null;\n state = \"acomma\";\n },\n avalue: function () {\n value = null;\n state = \"acomma\";\n }\n }\n };\n\n function debackslashify(text) {\n\n // Remove and replace any backslash escapement.\n\n return text.replace(/\\\\(?:u(.{4})|([^u]))/g, function (ignore, b, c) {\n return b\n ? String.fromCharCode(parseInt(b, 16))\n : escapes[c];\n });\n }\n\n return function (source, reviver) {\n\n // A regular expression is used to extract tokens from the JSON text.\n // The extraction process is cautious.\n\n var result;\n var tx = /^[\\u0020\\t\\n\\r]*(?:([,:\\[\\]{}]|true|false|null)|(-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)|\"((?:[^\\r\\n\\t\\\\\\\"]|\\\\(?:[\"\\\\\\/trnfb]|u[0-9a-fA-F]{4}))*)\")/;\n\n // Set the starting state.\n\n state = \"go\";\n\n // The stack records the container, key, and state for each object or array\n // that contains another object or array while processing nested structures.\n\n stack = [];\n\n // If any error occurs, we will catch it and ultimately throw a syntax error.\n\n try {\n\n // For each token...\n\n while (true) {\n result = tx.exec(source);\n if (!result) {\n break;\n }\n\n // result is the result array from matching the tokenizing regular expression.\n // result[0] contains everything that matched, including any initial whitespace.\n // result[1] contains any punctuation that was matched, or true, false, or null.\n // result[2] contains a matched number, still in string form.\n // result[3] contains a matched string, without quotes but with escapement.\n\n if (result[1]) {\n\n // Token: Execute the action for this state and token.\n\n action[result[1]][state]();\n\n } else if (result[2]) {\n\n // Number token: Convert the number string into a number value and execute\n // the action for this state and number.\n\n value = +result[2];\n number[state]();\n } else {\n\n // String token: Replace the escapement sequences and execute the action for\n // this state and string.\n\n value = debackslashify(result[3]);\n string[state]();\n }\n\n // Remove the token from the string. The loop will continue as long as there\n // are tokens. This is a slow process, but it allows the use of ^ matching,\n // which assures that no illegal tokens slip through.\n\n source = source.slice(result[0].length);\n }\n\n // If we find a state/token combination that is illegal, then the action will\n // cause an error. We handle the error by simply changing the state.\n\n } catch (e) {\n state = e;\n }\n\n // The parsing is finished. If we are not in the final \"ok\" state, or if the\n // remaining source contains anything except whitespace, then we did not have\n //a well-formed JSON text.\n\n if (state !== \"ok\" || (/[^\\u0020\\t\\n\\r]/.test(source))) {\n throw (state instanceof SyntaxError)\n ? state\n : new SyntaxError(\"JSON\");\n }\n\n // If there is a reviver function, we recursively walk the new structure,\n // passing each name/value pair to the reviver function for possible\n // transformation, starting with a temporary root object that holds the current\n // value in an empty key. If there is not a reviver function, we simply return\n // that value.\n\n return (typeof reviver === \"function\")\n ? (function walk(holder, key) {\n var k;\n var v;\n var val = holder[key];\n if (val && typeof val === \"object\") {\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(val, k)) {\n v = walk(val, k);\n if (v !== undefined) {\n val[k] = v;\n } else {\n delete val[k];\n }\n }\n }\n }\n return reviver.call(holder, key, val);\n }({\"\": value}, \"\"))\n : value;\n };\n }());\n }\n}\n\nmodule.exports = setupCustomJSON;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./vendor/JSON-js/json3.js\n// module id = 8\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Notifier - the internal object responsible for delegating between the client exposed API, the\n * chain of transforms necessary to turn an item into something that can be sent to Rollbar, and the\n * queue which handles the communcation with the Rollbar API servers.\n *\n * @param queue - an object that conforms to the interface: addItem(item, callback)\n * @param options - an object representing the options to be set for this notifier, this should have\n * any defaults already set by the caller\n */\nfunction Notifier(queue, options) {\n this.queue = queue;\n this.options = options;\n this.transforms = [];\n}\n\n/*\n * configure - updates the options for this notifier with the passed in object\n *\n * @param options - an object which gets merged with the current options set on this notifier\n * @returns this\n */\nNotifier.prototype.configure = function(options) {\n this.queue && this.queue.configure(options);\n var oldOptions = this.options;\n this.options = _.extend({}, oldOptions, options);\n return this;\n};\n\n/*\n * addTransform - adds a transform onto the end of the queue of transforms for this notifier\n *\n * @param transform - a function which takes three arguments:\n * * item: An Object representing the data to eventually be sent to Rollbar\n * * options: The current value of the options for this notifier\n * * callback: function(err: (Null|Error), item: (Null|Object)) the transform must call this\n * callback with a null value for error if it wants the processing chain to continue, otherwise\n * with an error to terminate the processing. The item should be the updated item after this\n * transform is finished modifying it.\n */\nNotifier.prototype.addTransform = function(transform) {\n if (_.isFunction(transform)) {\n this.transforms.push(transform);\n }\n return this;\n};\n\n/*\n * log - the internal log function which applies the configured transforms and then pushes onto the\n * queue to be sent to the backend.\n *\n * @param item - An object with the following structure:\n * message [String] - An optional string to be sent to rollbar\n * error [Error] - An optional error\n *\n * @param callback - A function of type function(err, resp) which will be called with exactly one\n * null argument and one non-null argument. The callback will be called once, either during the\n * transform stage if an error occurs inside a transform, or in response to the communication with\n * the backend. The second argument will be the response from the backend in case of success.\n */\nNotifier.prototype.log = function(item, callback) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!this.options.enabled) {\n return callback(new Error('Rollbar is not enabled'));\n }\n\n this.queue.addPendingItem(item);\n var originalError = item.err;\n this._applyTransforms(item, function(err, i) {\n if (err) {\n this.queue.removePendingItem(item);\n return callback(err, null);\n }\n this.queue.addItem(i, callback, originalError, item);\n }.bind(this));\n};\n\n/* Internal */\n\n/*\n * _applyTransforms - Applies the transforms that have been added to this notifier sequentially. See\n * `addTransform` for more information.\n *\n * @param item - An item to be transformed\n * @param callback - A function of type function(err, item) which will be called with a non-null\n * error and a null item in the case of a transform failure, or a null error and non-null item after\n * all transforms have been applied.\n */\nNotifier.prototype._applyTransforms = function(item, callback) {\n var transformIndex = -1;\n var transformsLength = this.transforms.length;\n var transforms = this.transforms;\n var options = this.options;\n\n var cb = function(err, i) {\n if (err) {\n callback(err, null);\n return;\n }\n\n transformIndex++;\n\n if (transformIndex === transformsLength) {\n callback(null, i);\n return;\n }\n\n transforms[transformIndex](i, options, cb);\n };\n\n cb(null, item);\n};\n\nmodule.exports = Notifier;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/notifier.js\n// module id = 9\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nvar MAX_EVENTS = 100;\n\nfunction Telemeter(options) {\n this.queue = [];\n this.options = _.extend(true, {}, options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n this.maxQueueSize = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n}\n\nTelemeter.prototype.configure = function(options) {\n var oldOptions = this.options;\n this.options = _.extend(true, {}, oldOptions, options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n var newMaxEvents = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n var deleteCount = 0;\n if (this.maxQueueSize > newMaxEvents) {\n deleteCount = this.maxQueueSize - newMaxEvents;\n }\n this.maxQueueSize = newMaxEvents;\n this.queue.splice(0, deleteCount);\n};\n\nTelemeter.prototype.copyEvents = function() {\n return Array.prototype.slice.call(this.queue, 0);\n};\n\nTelemeter.prototype.capture = function(type, metadata, level, rollbarUUID, timestamp) {\n var e = {\n level: getLevel(type, level),\n type: type,\n timestamp_ms: timestamp || _.now(),\n body: metadata,\n source: 'client'\n };\n if (rollbarUUID) {\n e.uuid = rollbarUUID;\n }\n\n try {\n if (_.isFunction(this.options.filterTelemetry) && this.options.filterTelemetry(e)) {\n return false;\n }\n } catch (e) {\n this.options.filterTelemetry = null;\n }\n\n this.push(e);\n return e;\n};\n\nTelemeter.prototype.captureEvent = function(metadata, level, rollbarUUID) {\n return this.capture('manual', metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.captureError = function(err, level, rollbarUUID, timestamp) {\n var metadata = {\n message: err.message || String(err)\n };\n if (err.stack) {\n metadata.stack = err.stack;\n }\n return this.capture('error', metadata, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureLog = function(message, level, rollbarUUID, timestamp) {\n return this.capture('log', {\n message: message\n }, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureNetwork = function(metadata, subtype, rollbarUUID, requestData) {\n subtype = subtype || 'xhr';\n metadata.subtype = metadata.subtype || subtype;\n if (requestData) {\n metadata.request = requestData;\n }\n var level = this.levelFromStatus(metadata.status_code);\n return this.capture('network', metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.levelFromStatus = function(statusCode) {\n if (statusCode >= 200 && statusCode < 400) {\n return 'info';\n }\n if (statusCode === 0 || statusCode >= 400) {\n return 'error';\n }\n return 'info';\n};\n\nTelemeter.prototype.captureDom = function(subtype, element, value, checked, rollbarUUID) {\n var metadata = {\n subtype: subtype,\n element: element\n };\n if (value !== undefined) {\n metadata.value = value;\n }\n if (checked !== undefined) {\n metadata.checked = checked;\n }\n return this.capture('dom', metadata, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureNavigation = function(from, to, rollbarUUID) {\n return this.capture('navigation', {from: from, to: to}, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureDomContentLoaded = function(ts) {\n return this.capture('navigation', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n */\n};\nTelemeter.prototype.captureLoad = function(ts) {\n return this.capture('navigation', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n */\n};\n\nTelemeter.prototype.captureConnectivityChange = function(type, rollbarUUID) {\n return this.captureNetwork({change: type}, 'connectivity', rollbarUUID);\n};\n\n// Only intended to be used internally by the notifier\nTelemeter.prototype._captureRollbarItem = function(item) {\n if (!this.options.includeItemsInTelemetry) {\n return;\n }\n if (item.err) {\n return this.captureError(item.err, item.level, item.uuid, item.timestamp);\n }\n if (item.message) {\n return this.captureLog(item.message, item.level, item.uuid, item.timestamp);\n }\n if (item.custom) {\n return this.capture('log', item.custom, item.level, item.uuid, item.timestamp);\n }\n};\n\nTelemeter.prototype.push = function(e) {\n this.queue.push(e);\n if (this.queue.length > this.maxQueueSize) {\n this.queue.shift();\n }\n};\n\nfunction getLevel(type, level) {\n if (level) {\n return level;\n }\n var defaultLevel = {\n error: 'error',\n manual: 'info'\n };\n return defaultLevel[type] || 'info';\n}\n\nmodule.exports = Telemeter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/telemetry.js\n// module id = 10\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\nvar helpers = require('./apiUtility');\n\nvar defaultOptions = {\n hostname: 'api.rollbar.com',\n path: '/api/1/item/',\n search: null,\n version: '1',\n protocol: 'https:',\n port: 443\n};\n\n/**\n * Api is an object that encapsulates methods of communicating with\n * the Rollbar API. It is a standard interface with some parts implemented\n * differently for server or browser contexts. It is an object that should\n * be instantiated when used so it can contain non-global options that may\n * be different for another instance of RollbarApi.\n *\n * @param options {\n * accessToken: the accessToken to use for posting items to rollbar\n * endpoint: an alternative endpoint to send errors to\n * must be a valid, fully qualified URL.\n * The default is: https://api.rollbar.com/api/1/item\n * proxy: if you wish to proxy requests provide an object\n * with the following keys:\n * host or hostname (required): foo.example.com\n * port (optional): 123\n * protocol (optional): https\n * }\n */\nfunction Api(options, t, u, j) {\n this.options = options;\n this.transport = t;\n this.url = u;\n this.jsonBackup = j;\n this.accessToken = options.accessToken;\n this.transportOptions = _getTransport(options, u);\n}\n\n/**\n *\n * @param data\n * @param callback\n */\nApi.prototype.postItem = function(data, callback) {\n var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n this.transport.post(this.accessToken, transportOptions, payload, callback);\n};\n\nApi.prototype.configure = function(options) {\n var oldOptions = this.oldOptions;\n this.options = _.extend(true, {}, oldOptions, options);\n this.transportOptions = _getTransport(this.options, this.url);\n if (this.options.accessToken !== undefined) {\n this.accessToken = this.options.accessToken;\n }\n return this;\n};\n\nfunction _getTransport(options, url) {\n return helpers.getTransportFromOptions(options, defaultOptions, url);\n}\n\nmodule.exports = Api;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/api.js\n// module id = 11\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction buildPayload(accessToken, data, jsonBackup) {\n if (!_.isType(data.context, 'string')) {\n var contextResult = _.stringify(data.context, jsonBackup);\n if (contextResult.error) {\n data.context = 'Error: could not serialize \\'context\\'';\n } else {\n data.context = contextResult.value || '';\n }\n if (data.context.length > 255) {\n data.context = data.context.substr(0, 255);\n }\n }\n return {\n access_token: accessToken,\n data: data\n };\n}\n\nfunction getTransportFromOptions(options, defaults, url) {\n var hostname = defaults.hostname;\n var protocol = defaults.protocol;\n var port = defaults.port;\n var path = defaults.path;\n var search = defaults.search;\n\n var proxy = options.proxy;\n if (options.endpoint) {\n var opts = url.parse(options.endpoint);\n hostname = opts.hostname;\n protocol = opts.protocol;\n port = opts.port;\n path = opts.pathname;\n search = opts.search;\n }\n return {\n hostname: hostname,\n protocol: protocol,\n port: port,\n path: path,\n search: search,\n proxy: proxy\n };\n}\n\nfunction transportOptions(transport, method) {\n var protocol = transport.protocol || 'https:';\n var port = transport.port || (protocol === 'http:' ? 80 : protocol === 'https:' ? 443 : undefined);\n var hostname = transport.hostname;\n var path = transport.path;\n if (transport.search) {\n path = path + transport.search;\n }\n if (transport.proxy) {\n path = protocol + '//' + hostname + path;\n hostname = transport.proxy.host || transport.proxy.hostname;\n port = transport.proxy.port;\n protocol = transport.proxy.protocol || protocol;\n }\n return {\n protocol: protocol,\n hostname: hostname,\n path: path,\n port: port,\n method: method\n };\n}\n\nfunction appendPathToPath(base, path) {\n var baseTrailingSlash = /\\/$/.test(base);\n var pathBeginningSlash = /^\\//.test(path);\n\n if (baseTrailingSlash && pathBeginningSlash) {\n path = path.substring(1);\n } else if (!baseTrailingSlash && !pathBeginningSlash) {\n path = '/' + path;\n }\n\n return base + path;\n}\n\nmodule.exports = {\n buildPayload: buildPayload,\n getTransportFromOptions: getTransportFromOptions,\n transportOptions: transportOptions,\n appendPathToPath: appendPathToPath\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/apiUtility.js\n// module id = 12\n// module chunks = 0","'use strict';\n\n/* eslint-disable no-console */\nrequire('console-polyfill');\nvar detection = require('./detection');\nvar _ = require('../utility');\n\nfunction error() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.error(_.formatArgsAsString(args));\n } else {\n console.error.apply(console, args);\n }\n}\n\nfunction info() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.info(_.formatArgsAsString(args));\n } else {\n console.info.apply(console, args);\n }\n}\n\nfunction log() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.log(_.formatArgsAsString(args));\n } else {\n console.log.apply(console, args);\n }\n}\n\n/* eslint-enable no-console */\n\nmodule.exports = {\n error: error,\n info: info,\n log: log\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/logger.js\n// module id = 13\n// module chunks = 0","// Console-polyfill. MIT license.\n// https://github.com/paulmillr/console-polyfill\n// Make it safe to do console.log() always.\n(function(global) {\n 'use strict';\n if (!global.console) {\n global.console = {};\n }\n var con = global.console;\n var prop, method;\n var dummy = function() {};\n var properties = ['memory'];\n var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' +\n 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' +\n 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',');\n while (prop = properties.pop()) if (!con[prop]) con[prop] = {};\n while (method = methods.pop()) if (!con[method]) con[method] = dummy;\n // Using `this` for web workers & supports Browserify / Webpack.\n})(typeof window === 'undefined' ? this : window);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/console-polyfill/index.js\n// module id = 14\n// module chunks = 0","'use strict';\n\n// This detection.js module is used to encapsulate any ugly browser/feature\n// detection we may need to do.\n\n// Figure out which version of IE we're using, if any.\n// This is gleaned from http://stackoverflow.com/questions/5574842/best-way-to-check-for-ie-less-than-9-in-javascript-without-library\n// Will return an integer on IE (i.e. 8)\n// Will return undefined otherwise\nfunction getIEVersion() {\n\tvar undef;\n\tif (!document) {\n\t\treturn undef;\n\t}\n\n var v = 3,\n div = document.createElement('div'),\n all = div.getElementsByTagName('i');\n\n while (\n div.innerHTML = '',\n all[0]\n );\n\n return v > 4 ? v : undef;\n}\n\nvar Detection = {\n ieVersion: getIEVersion\n};\n\nmodule.exports = Detection;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/detection.js\n// module id = 15\n// module chunks = 0","'use strict';\n\nfunction captureUncaughtExceptions(window, handler, shim) {\n if (!window) { return; }\n var oldOnError;\n\n if (typeof handler._rollbarOldOnError === 'function') {\n oldOnError = handler._rollbarOldOnError;\n } else if (window.onerror && !window.onerror.belongsToShim) {\n oldOnError = window.onerror;\n handler._rollbarOldOnError = oldOnError;\n }\n\n var fn = function() {\n var args = Array.prototype.slice.call(arguments, 0);\n _rollbarWindowOnError(window, handler, oldOnError, args);\n };\n fn.belongsToShim = shim;\n window.onerror = fn;\n}\n\nfunction _rollbarWindowOnError(window, r, old, args) {\n if (window._rollbarWrappedError) {\n if (!args[4]) {\n args[4] = window._rollbarWrappedError;\n }\n if (!args[5]) {\n args[5] = window._rollbarWrappedError._rollbarContext;\n }\n window._rollbarWrappedError = null;\n }\n\n r.handleUncaughtException.apply(r, args);\n if (old) {\n old.apply(window, args);\n }\n}\n\nfunction captureUnhandledRejections(window, handler, shim) {\n if (!window) { return; }\n\n if (typeof window._rollbarURH === 'function' && window._rollbarURH.belongsToShim) {\n window.removeEventListener('unhandledrejection', window._rollbarURH);\n }\n\n var rejectionHandler = function (evt) {\n var reason, promise, detail;\n try {\n reason = evt.reason;\n } catch (e) {\n reason = undefined;\n }\n try {\n promise = evt.promise;\n } catch (e) {\n promise = '[unhandledrejection] error getting `promise` from event';\n }\n try {\n detail = evt.detail;\n if (!reason && detail) {\n reason = detail.reason;\n promise = detail.promise;\n }\n } catch (e) {\n detail = '[unhandledrejection] error getting `detail` from event';\n }\n if (!reason) {\n reason = '[unhandledrejection] error getting `reason` from event';\n }\n\n if (handler && handler.handleUnhandledRejection) {\n handler.handleUnhandledRejection(reason, promise);\n }\n };\n rejectionHandler.belongsToShim = shim;\n window._rollbarURH = rejectionHandler;\n window.addEventListener('unhandledrejection', rejectionHandler);\n}\n\nfunction wrapGlobals(window, handler, shim) {\n if (!window) { return; }\n // Adapted from https://github.com/bugsnag/bugsnag-js\n var globals = 'EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload'.split(',');\n var i, global;\n for (i = 0; i < globals.length; ++i) {\n global = globals[i];\n\n if (window[global] && window[global].prototype) {\n _extendListenerPrototype(handler, window[global].prototype, shim);\n }\n }\n}\n\nfunction _extendListenerPrototype(handler, prototype, shim) {\n if (prototype.hasOwnProperty && prototype.hasOwnProperty('addEventListener')) {\n var oldAddEventListener = prototype.addEventListener;\n while (oldAddEventListener._rollbarOldAdd && oldAddEventListener.belongsToShim) {\n oldAddEventListener = oldAddEventListener._rollbarOldAdd;\n }\n var addFn = function(event, callback, bubble) {\n oldAddEventListener.call(this, event, handler.wrap(callback), bubble);\n };\n addFn._rollbarOldAdd = oldAddEventListener;\n addFn.belongsToShim = shim;\n prototype.addEventListener = addFn;\n\n var oldRemoveEventListener = prototype.removeEventListener;\n while (oldRemoveEventListener._rollbarOldRemove && oldRemoveEventListener.belongsToShim) {\n oldRemoveEventListener = oldRemoveEventListener._rollbarOldRemove;\n }\n var removeFn = function(event, callback, bubble) {\n oldRemoveEventListener.call(this, event, callback && callback._rollbar_wrapped || callback, bubble);\n };\n removeFn._rollbarOldRemove = oldRemoveEventListener;\n removeFn.belongsToShim = shim;\n prototype.removeEventListener = removeFn;\n }\n}\n\nmodule.exports = {\n captureUncaughtExceptions: captureUncaughtExceptions,\n captureUnhandledRejections: captureUnhandledRejections,\n wrapGlobals: wrapGlobals\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/globalSetup.js\n// module id = 16\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar logger = require('./logger');\n\n/*\n * accessToken may be embedded in payload but that should not\n * be assumed\n *\n * options: {\n * hostname\n * protocol\n * path\n * port\n * method\n * }\n *\n * params is an object containing key/value pairs. These\n * will be appended to the path as 'key=value&key=value'\n *\n * payload is an unserialized object\n */\n\nfunction get(accessToken, options, params, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n _.addParamsAndAccessTokenToPath(accessToken, options, params);\n\n var method = 'GET';\n var url = _.formatUrl(options);\n _makeRequest(accessToken, url, method, null, callback, requestFactory);\n}\n\nfunction post(accessToken, options, payload, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!payload) {\n return callback(new Error('Cannot send empty request'));\n }\n\n var stringifyResult = _.stringify(payload);\n if (stringifyResult.error) {\n return callback(stringifyResult.error);\n }\n\n var writeData = stringifyResult.value;\n var method = 'POST';\n var url = _.formatUrl(options);\n _makeRequest(accessToken, url, method, writeData, callback, requestFactory);\n}\n\nfunction _makeRequest(accessToken, url, method, data, callback, requestFactory) {\n var request;\n if (requestFactory) {\n request = requestFactory();\n } else {\n request = _createXMLHTTPObject();\n }\n if (!request) {\n // Give up, no way to send requests\n return callback(new Error('No way to send a request'));\n }\n try {\n try {\n var onreadystatechange = function() {\n try {\n if (onreadystatechange && request.readyState === 4) {\n onreadystatechange = undefined;\n\n var parseResponse = _.jsonParse(request.responseText);\n if (_isSuccess(request)) {\n callback(parseResponse.error, parseResponse.value);\n return;\n } else if (_isNormalFailure(request)) {\n if (request.status === 403) {\n // likely caused by using a server access token\n var message = parseResponse.value && parseResponse.value.message;\n logger.error(message);\n }\n // return valid http status codes\n callback(new Error(String(request.status)));\n } else {\n // IE will return a status 12000+ on some sort of connection failure,\n // so we return a blank error\n // http://msdn.microsoft.com/en-us/library/aa383770%28VS.85%29.aspx\n var msg = 'XHR response had no status code (likely connection failure)';\n callback(_newRetriableError(msg));\n }\n }\n } catch (ex) {\n //jquery source mentions firefox may error out while accessing the\n //request members if there is a network error\n //https://github.com/jquery/jquery/blob/a938d7b1282fc0e5c52502c225ae8f0cef219f0a/src/ajax/xhr.js#L111\n var exc;\n if (ex && ex.stack) {\n exc = ex;\n } else {\n exc = new Error(ex);\n }\n callback(exc);\n }\n };\n\n request.open(method, url, true);\n if (request.setRequestHeader) {\n request.setRequestHeader('Content-Type', 'application/json');\n request.setRequestHeader('X-Rollbar-Access-Token', accessToken);\n }\n request.onreadystatechange = onreadystatechange;\n request.send(data);\n } catch (e1) {\n // Sending using the normal xmlhttprequest object didn't work, try XDomainRequest\n if (typeof XDomainRequest !== 'undefined') {\n\n // Assume we are in a really old browser which has a bunch of limitations:\n // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\n // Extreme paranoia: if we have XDomainRequest then we have a window, but just in case\n if (!window || !window.location) {\n return callback(new Error('No window available during request, unknown environment'));\n }\n\n // If the current page is http, try and send over http\n if (window.location.href.substring(0, 5) === 'http:' && url.substring(0, 5) === 'https') {\n url = 'http' + url.substring(5);\n }\n\n var xdomainrequest = new XDomainRequest();\n xdomainrequest.onprogress = function() {};\n xdomainrequest.ontimeout = function() {\n var msg = 'Request timed out';\n var code = 'ETIMEDOUT';\n callback(_newRetriableError(msg, code));\n };\n xdomainrequest.onerror = function() {\n callback(new Error('Error during request'));\n };\n xdomainrequest.onload = function() {\n var parseResponse = _.jsonParse(xdomainrequest.responseText);\n callback(parseResponse.error, parseResponse.value);\n };\n xdomainrequest.open(method, url, true);\n xdomainrequest.send(data);\n } else {\n callback(new Error('Cannot find a method to transport a request'));\n }\n }\n } catch (e2) {\n callback(e2);\n }\n}\n\nfunction _createXMLHTTPObject() {\n /* global ActiveXObject:false */\n\n var factories = [\n function () {\n return new XMLHttpRequest();\n },\n function () {\n return new ActiveXObject('Msxml2.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Msxml3.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Microsoft.XMLHTTP');\n }\n ];\n var xmlhttp;\n var i;\n var numFactories = factories.length;\n for (i = 0; i < numFactories; i++) {\n /* eslint-disable no-empty */\n try {\n xmlhttp = factories[i]();\n break;\n } catch (e) {\n // pass\n }\n /* eslint-enable no-empty */\n }\n return xmlhttp;\n}\n\nfunction _isSuccess(r) {\n return r && r.status && r.status === 200;\n}\n\nfunction _isNormalFailure(r) {\n return r && _.isType(r.status, 'number') && r.status >= 400 && r.status < 600;\n}\n\nfunction _newRetriableError(message, code) {\n var err = new Error(message);\n err.code = code || 'ENOTFOUND';\n return err;\n}\n\nmodule.exports = {\n get: get,\n post: post\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transport.js\n// module id = 17\n// module chunks = 0","'use strict';\n\n// See https://nodejs.org/docs/latest/api/url.html\nfunction parse(url) {\n var result = {\n protocol: null, auth: null, host: null, path: null,\n hash: null, href: url, hostname: null, port: null,\n pathname: null, search: null, query: null\n };\n\n var i, last;\n i = url.indexOf('//');\n if (i !== -1) {\n result.protocol = url.substring(0,i);\n last = i+2;\n } else {\n last = 0;\n }\n \n i = url.indexOf('@', last);\n if (i !== -1) {\n result.auth = url.substring(last, i);\n last = i+1;\n }\n\n i = url.indexOf('/', last);\n if (i === -1) {\n i = url.indexOf('?', last);\n if (i === -1) {\n i = url.indexOf('#', last);\n if (i === -1) {\n result.host = url.substring(last);\n } else {\n result.host = url.substring(last, i);\n result.hash = url.substring(i);\n }\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n return result;\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n\n i = url.indexOf('#', last);\n if (i === -1) {\n result.path = url.substring(last);\n } else {\n result.path = url.substring(last, i);\n result.hash = url.substring(i);\n }\n\n if (result.path) {\n var pathParts = result.path.split('?');\n result.pathname = pathParts[0];\n result.query = pathParts[1];\n result.search = result.query ? '?' + result.query : null;\n }\n return result;\n}\n\nmodule.exports = {\n parse: parse\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/url.js\n// module id = 18\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar errorParser = require('./errorParser');\nvar logger = require('./logger');\n\nfunction handleItemWithError(item, options, callback) {\n item.data = item.data || {};\n if (item.err) {\n try {\n item.stackInfo = item.err._savedStackTrace || errorParser.parse(item.err);\n } catch (e)\n /* istanbul ignore next */\n {\n logger.error('Error while parsing the error object.', e);\n item.message = item.err.message || item.err.description || item.message || String(item.err);\n delete item.err;\n }\n }\n callback(null, item);\n}\n\nfunction ensureItemHasSomethingToSay(item, options, callback) {\n if (!item.message && !item.stackInfo && !item.custom) {\n callback(new Error('No message, stack info, or custom data'), null);\n }\n callback(null, item);\n}\n\nfunction addBaseInfo(item, options, callback) {\n var environment = (options.payload && options.payload.environment) || options.environment;\n item.data = _.extend(true, {}, item.data, {\n environment: environment,\n level: item.level,\n endpoint: options.endpoint,\n platform: 'browser',\n framework: 'browser-js',\n language: 'javascript',\n server: {},\n uuid: item.uuid,\n notifier: {\n name: 'rollbar-browser-js',\n version: options.version\n }\n });\n callback(null, item);\n}\n\nfunction addRequestInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.location) {\n return callback(null, item);\n }\n var remoteString = '$remote_ip';\n if (!options.captureIp) {\n remoteString = null;\n } else if (options.captureIp !== true) {\n remoteString += '_anonymize';\n }\n _.set(item, 'data.request', {\n url: window.location.href,\n query_string: window.location.search,\n user_ip: remoteString\n });\n callback(null, item);\n };\n}\n\nfunction addClientInfo(window) {\n return function(item, options, callback) {\n if (!window) {\n return callback(null, item);\n }\n var nav = window.navigator || {};\n var scr = window.screen || {};\n _.set(item, 'data.client', {\n runtime_ms: item.timestamp - window._rollbarStartTime,\n timestamp: Math.round(item.timestamp / 1000),\n javascript: {\n browser: nav.userAgent,\n language: nav.language,\n cookie_enabled: nav.cookieEnabled,\n screen: {\n width: scr.width,\n height: scr.height\n }\n }\n });\n callback(null, item);\n };\n}\n\nfunction addPluginInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.navigator) {\n return callback(null, item);\n }\n var plugins = [];\n var navPlugins = window.navigator.plugins || [];\n var cur;\n for (var i=0, l=navPlugins.length; i < l; ++i) {\n cur = navPlugins[i];\n plugins.push({name: cur.name, description: cur.description});\n }\n _.set(item, 'data.client.javascript.plugins', plugins);\n callback(null, item);\n };\n}\n\nfunction addBody(item, options, callback) {\n if (item.stackInfo) {\n addBodyTrace(item, options, callback);\n } else {\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction addBodyMessage(item, options, callback) {\n var message = item.message;\n var custom = item.custom;\n\n if (!message) {\n if (custom) {\n var scrubFields = options.scrubFields;\n var messageResult = _.stringify(_.scrub(custom, scrubFields));\n message = messageResult.error || messageResult.value || '';\n } else {\n message = '';\n }\n }\n var result = {\n body: message\n };\n\n if (custom) {\n result.extra = _.extend(true, {}, custom);\n }\n\n _.set(item, 'data.body', {message: result});\n callback(null, item);\n}\n\n\nfunction addBodyTrace(item, options, callback) {\n var description = item.data.description;\n var stackInfo = item.stackInfo;\n var custom = item.custom;\n\n var guess = errorParser.guessErrorClass(stackInfo.message);\n var className = stackInfo.name || guess[0];\n var message = guess[1];\n var trace = {\n exception: {\n 'class': className,\n message: message\n }\n };\n\n if (description) {\n trace.exception.description = description;\n }\n\n // Transform a TraceKit stackInfo object into a Rollbar trace\n var stack = stackInfo.stack;\n if (stack && stack.length === 0 && item._unhandledStackInfo && item._unhandledStackInfo.stack) {\n stack = item._unhandledStackInfo.stack;\n }\n if (stack) {\n if (stack.length === 0) {\n trace.exception.stack = stackInfo.rawStack;\n trace.exception.raw = String(stackInfo.rawException);\n }\n var stackFrame;\n var frame;\n var code;\n var pre;\n var post;\n var contextLength;\n var i, mid;\n\n trace.frames = [];\n for (i = 0; i < stack.length; ++i) {\n stackFrame = stack[i];\n frame = {\n filename: stackFrame.url ? _.sanitizeUrl(stackFrame.url) : '(unknown)',\n lineno: stackFrame.line || null,\n method: (!stackFrame.func || stackFrame.func === '?') ? '[anonymous]' : stackFrame.func,\n colno: stackFrame.column\n };\n if (frame.method && frame.method.endsWith && frame.method.endsWith('_rollbar_wrapped')) {\n continue;\n }\n\n code = pre = post = null;\n contextLength = stackFrame.context ? stackFrame.context.length : 0;\n if (contextLength) {\n mid = Math.floor(contextLength / 2);\n pre = stackFrame.context.slice(0, mid);\n code = stackFrame.context[mid];\n post = stackFrame.context.slice(mid);\n }\n\n if (code) {\n frame.code = code;\n }\n\n if (pre || post) {\n frame.context = {};\n if (pre && pre.length) {\n frame.context.pre = pre;\n }\n if (post && post.length) {\n frame.context.post = post;\n }\n }\n\n if (stackFrame.args) {\n frame.args = stackFrame.args;\n }\n\n trace.frames.push(frame);\n }\n\n // NOTE(cory): reverse the frames since rollbar.com expects the most recent call last\n trace.frames.reverse();\n\n if (custom) {\n trace.extra = _.extend(true, {}, custom);\n }\n _.set(item, 'data.body', {trace: trace});\n callback(null, item);\n } else {\n item.message = className + ': ' + message;\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction scrubPayload(item, options, callback) {\n var scrubFields = options.scrubFields;\n item.data = _.scrub(item.data, scrubFields);\n callback(null, item);\n}\n\nmodule.exports = {\n handleItemWithError: handleItemWithError,\n ensureItemHasSomethingToSay: ensureItemHasSomethingToSay,\n addBaseInfo: addBaseInfo,\n addRequestInfo: addRequestInfo,\n addClientInfo: addClientInfo,\n addPluginInfo: addPluginInfo,\n addBody: addBody,\n scrubPayload: scrubPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transforms.js\n// module id = 19\n// module chunks = 0","'use strict';\n\nvar ErrorStackParser = require('error-stack-parser');\n\nvar UNKNOWN_FUNCTION = '?';\nvar ERR_CLASS_REGEXP = new RegExp('^(([a-zA-Z0-9-_$ ]*): *)?(Uncaught )?([a-zA-Z0-9-_$ ]*): ');\n\nfunction guessFunctionName() {\n return UNKNOWN_FUNCTION;\n}\n\n\nfunction gatherContext() {\n return null;\n}\n\n\nfunction Frame(stackFrame) {\n var data = {};\n\n data._stackFrame = stackFrame;\n\n data.url = stackFrame.fileName;\n data.line = stackFrame.lineNumber;\n data.func = stackFrame.functionName;\n data.column = stackFrame.columnNumber;\n data.args = stackFrame.args;\n\n data.context = gatherContext(data.url, data.line);\n\n return data;\n}\n\n\nfunction Stack(exception) {\n function getStack() {\n var parserStack = [];\n var exc;\n\n if (!exception.stack) {\n try {\n throw exception;\n } catch (e) {\n exc = e;\n }\n } else {\n exc = exception;\n }\n\n try {\n parserStack = ErrorStackParser.parse(exc);\n } catch(e) {\n parserStack = [];\n }\n\n var stack = [];\n\n for (var i = 0; i < parserStack.length; i++) {\n stack.push(new Frame(parserStack[i]));\n }\n\n return stack;\n }\n\n return {\n stack: getStack(),\n message: exception.message,\n name: exception.name,\n rawStack: exception.stack,\n rawException: exception\n };\n}\n\n\nfunction parse(e) {\n return new Stack(e);\n}\n\n\nfunction guessErrorClass(errMsg) {\n if (!errMsg || !errMsg.match) {\n return ['Unknown error. There was no error message to display.', ''];\n }\n var errClassMatch = errMsg.match(ERR_CLASS_REGEXP);\n var errClass = '(unknown)';\n\n if (errClassMatch) {\n errClass = errClassMatch[errClassMatch.length - 1];\n errMsg = errMsg.replace((errClassMatch[errClassMatch.length - 2] || '') + errClass + ':', '');\n errMsg = errMsg.replace(/(^[\\s]+|[\\s]+$)/g, '');\n }\n return [errClass, errMsg];\n}\n\n\nmodule.exports = {\n guessFunctionName: guessFunctionName,\n guessErrorClass: guessErrorClass,\n gatherContext: gatherContext,\n parse: parse,\n Stack: Stack,\n Frame: Frame\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/errorParser.js\n// module id = 20\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = locationParts[0] === 'eval' ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/error-stack-parser.js\n// module id = 21\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stackframe', [], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.StackFrame = factory();\n }\n}(this, function () {\n 'use strict';\n function _isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n function StackFrame(functionName, args, fileName, lineNumber, columnNumber, source) {\n if (functionName !== undefined) {\n this.setFunctionName(functionName);\n }\n if (args !== undefined) {\n this.setArgs(args);\n }\n if (fileName !== undefined) {\n this.setFileName(fileName);\n }\n if (lineNumber !== undefined) {\n this.setLineNumber(lineNumber);\n }\n if (columnNumber !== undefined) {\n this.setColumnNumber(columnNumber);\n }\n if (source !== undefined) {\n this.setSource(source);\n }\n }\n\n StackFrame.prototype = {\n getFunctionName: function () {\n return this.functionName;\n },\n setFunctionName: function (v) {\n this.functionName = String(v);\n },\n\n getArgs: function () {\n return this.args;\n },\n setArgs: function (v) {\n if (Object.prototype.toString.call(v) !== '[object Array]') {\n throw new TypeError('Args must be an Array');\n }\n this.args = v;\n },\n\n // NOTE: Property name may be misleading as it includes the path,\n // but it somewhat mirrors V8's JavaScriptStackTraceApi\n // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's\n // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14\n getFileName: function () {\n return this.fileName;\n },\n setFileName: function (v) {\n this.fileName = String(v);\n },\n\n getLineNumber: function () {\n return this.lineNumber;\n },\n setLineNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Line Number must be a Number');\n }\n this.lineNumber = Number(v);\n },\n\n getColumnNumber: function () {\n return this.columnNumber;\n },\n setColumnNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Column Number must be a Number');\n }\n this.columnNumber = Number(v);\n },\n\n getSource: function () {\n return this.source;\n },\n setSource: function (v) {\n this.source = String(v);\n },\n\n toString: function() {\n var functionName = this.getFunctionName() || '{anonymous}';\n var args = '(' + (this.getArgs() || []).join(',') + ')';\n var fileName = this.getFileName() ? ('@' + this.getFileName()) : '';\n var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : '';\n var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : '';\n return functionName + args + fileName + lineNumber + columnNumber;\n }\n };\n\n return StackFrame;\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/~/stackframe/stackframe.js\n// module id = 22\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction itemToPayload(item, options, callback) {\n var payloadOptions = options.payload || {};\n if (payloadOptions.body) {\n delete payloadOptions.body;\n }\n\n var data = _.extend(true, {}, item.data, payloadOptions);\n if (item._isUncaught) {\n data._isUncaught = true;\n }\n if (item._originalArgs) {\n data._originalArgs = item._originalArgs;\n }\n callback(null, data);\n}\n\nfunction addTelemetryData(item, options, callback) {\n if (item.telemetryEvents) {\n _.set(item, 'data.body.telemetry', item.telemetryEvents);\n }\n callback(null, item);\n}\n\nfunction addMessageWithError(item, options, callback) {\n if (!item.message) {\n callback(null, item);\n return;\n }\n var tracePath = 'data.body.trace_chain.0';\n var trace = _.get(item, tracePath);\n if (!trace) {\n tracePath = 'data.body.trace';\n trace = _.get(item, tracePath);\n }\n if (trace) {\n if (!(trace.exception && trace.exception.description)) {\n _.set(item, tracePath+'.exception.description', item.message);\n callback(null, item);\n return;\n }\n var extra = _.get(item, tracePath+'.extra') || {};\n var newExtra = _.extend(true, {}, extra, {message: item.message});\n _.set(item, tracePath+'.extra', newExtra);\n }\n callback(null, item);\n}\n\nfunction userTransform(logger) {\n return function(item, options, callback) {\n var newItem = _.extend(true, {}, item);\n try {\n if (_.isFunction(options.transform)) {\n options.transform(newItem.data);\n }\n } catch (e) {\n options.transform = null;\n logger.error('Error while calling custom transform() function. Removing custom transform().', e);\n callback(null, item);\n return;\n }\n callback(null, newItem);\n }\n}\n\nfunction addConfigToPayload(item, options, callback) {\n if (!options.sendConfig) {\n return callback(null, item);\n }\n var configKey = '_rollbarConfig';\n var custom = _.get(item, 'data.custom') || {};\n custom[configKey] = options;\n item.data.custom = custom;\n callback(null, item);\n}\n\nmodule.exports = {\n itemToPayload: itemToPayload,\n addTelemetryData: addTelemetryData,\n addMessageWithError: addMessageWithError,\n userTransform: userTransform,\n addConfigToPayload: addConfigToPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/transforms.js\n// module id = 23\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\n\nfunction checkIgnore(item, settings) {\n if (_.get(settings, 'plugins.jquery.ignoreAjaxErrors')) {\n return !_.get(item, 'body.message.extra.isAjax');\n }\n return true;\n}\n\nmodule.exports = {\n checkIgnore: checkIgnore\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/predicates.js\n// module id = 24\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction checkLevel(item, settings) {\n var level = item.level;\n var levelVal = _.LEVELS[level] || 0;\n var reportLevel = settings.reportLevel;\n var reportLevelVal = _.LEVELS[reportLevel] || 0;\n\n if (levelVal < reportLevelVal) {\n return false;\n }\n return true;\n}\n\nfunction userCheckIgnore(logger) {\n return function(item, settings) {\n var isUncaught = !!item._isUncaught;\n delete item._isUncaught;\n var args = item._originalArgs;\n delete item._originalArgs;\n try {\n if (_.isFunction(settings.onSendCallback)) {\n settings.onSendCallback(isUncaught, args, item);\n }\n } catch (e) {\n settings.onSendCallback = null;\n logger.error('Error while calling onSendCallback, removing', e);\n }\n try {\n if (_.isFunction(settings.checkIgnore) && settings.checkIgnore(isUncaught, args, item)) {\n return false;\n }\n } catch (e) {\n settings.checkIgnore = null;\n logger.error('Error while calling custom checkIgnore(), removing', e);\n }\n return true;\n }\n}\n\nfunction urlIsNotBlacklisted(logger) {\n return function(item, settings) {\n return !urlIsOnAList(item, settings, 'blacklist', logger);\n }\n}\n\nfunction urlIsWhitelisted(logger) {\n return function(item, settings) {\n return urlIsOnAList(item, settings, 'whitelist', logger);\n }\n}\n\nfunction urlIsOnAList(item, settings, whiteOrBlack, logger) {\n // whitelist is the default\n var black = false;\n if (whiteOrBlack === 'blacklist') {\n black = true;\n }\n var list, trace, frame, filename, frameLength, url, listLength, urlRegex;\n var i, j;\n\n try {\n list = black ? settings.hostBlackList : settings.hostWhiteList;\n listLength = list && list.length;\n trace = _.get(item, 'body.trace');\n\n // These two checks are important to come first as they are defaults\n // in case the list is missing or the trace is missing or not well-formed\n if (!list || listLength === 0) {\n return !black;\n }\n if (!trace || !trace.frames || trace.frames.length === 0) {\n return !black;\n }\n\n frameLength = trace.frames.length;\n for (i = 0; i < frameLength; i++) {\n frame = trace.frames[i];\n filename = frame.filename;\n\n if (!_.isType(filename, 'string')) {\n return !black;\n }\n\n for (j = 0; j < listLength; j++) {\n url = list[j];\n urlRegex = new RegExp(url);\n\n if (urlRegex.test(filename)) {\n return true;\n }\n }\n }\n } catch (e)\n /* istanbul ignore next */\n {\n if (black) {\n settings.hostBlackList = null;\n } else {\n settings.hostWhiteList = null;\n }\n var listName = black ? 'hostBlackList' : 'hostWhiteList';\n logger.error('Error while reading your configuration\\'s ' + listName + ' option. Removing custom ' + listName + '.', e);\n return !black;\n }\n return false;\n}\n\nfunction messageIsIgnored(logger) {\n return function(item, settings) {\n var exceptionMessage, i, ignoredMessages,\n len, messageIsIgnored, rIgnoredMessage,\n body, traceMessage, bodyMessage;\n\n try {\n messageIsIgnored = false;\n ignoredMessages = settings.ignoredMessages;\n\n if (!ignoredMessages || ignoredMessages.length === 0) {\n return true;\n }\n\n body = item.body;\n traceMessage = _.get(body, 'trace.exception.message');\n bodyMessage = _.get(body, 'message.body');\n\n exceptionMessage = traceMessage || bodyMessage;\n\n if (!exceptionMessage){\n return true;\n }\n\n len = ignoredMessages.length;\n for (i = 0; i < len; i++) {\n rIgnoredMessage = new RegExp(ignoredMessages[i], 'gi');\n messageIsIgnored = rIgnoredMessage.test(exceptionMessage);\n\n if (messageIsIgnored) {\n break;\n }\n }\n } catch(e)\n /* istanbul ignore next */\n {\n settings.ignoredMessages = null;\n logger.error('Error while reading your configuration\\'s ignoredMessages option. Removing custom ignoredMessages.');\n }\n\n return !messageIsIgnored;\n }\n}\n\nmodule.exports = {\n checkLevel: checkLevel,\n userCheckIgnore: userCheckIgnore,\n urlIsNotBlacklisted: urlIsNotBlacklisted,\n urlIsWhitelisted: urlIsWhitelisted,\n messageIsIgnored: messageIsIgnored\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/predicates.js\n// module id = 25\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar urlparser = require('./url');\nvar domUtil = require('./domUtility');\n\nvar defaults = {\n network: true,\n networkResponseHeaders: false,\n networkResponseBody: false,\n networkRequestBody: false,\n log: true,\n dom: true,\n navigation: true,\n connectivity: true\n};\n\nfunction replace(obj, name, replacement, replacements, type) {\n var orig = obj[name];\n obj[name] = replacement(orig);\n if (replacements) {\n replacements[type].push([obj, name, orig]);\n }\n}\n\nfunction restore(replacements, type) {\n var b;\n while (replacements[type].length) {\n b = replacements[type].shift();\n b[0][b[1]] = b[2];\n }\n}\n\nfunction Instrumenter(options, telemeter, rollbar, _window, _document) {\n var autoInstrument = options.autoInstrument;\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.extend(true, {}, defaults, autoInstrument);\n }\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n this.telemetryScrubber = options.telemetryScrubber;\n this.telemeter = telemeter;\n this.rollbar = rollbar;\n this._window = _window || {};\n this._document = _document || {};\n this.replacements = {\n network: [],\n log: [],\n navigation: [],\n connectivity: []\n };\n this.eventRemovers = {\n dom: [],\n connectivity: []\n };\n\n this._location = this._window.location;\n this._lastHref = this._location && this._location.href;\n}\n\nInstrumenter.prototype.configure = function(options) {\n var autoInstrument = options.autoInstrument;\n var oldSettings = _.extend(true, {}, this.autoInstrument);\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.extend(true, {}, defaults, autoInstrument);\n }\n this.instrument(oldSettings);\n if (options.scrubTelemetryInputs !== undefined) {\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n }\n if (options.telemetryScrubber !== undefined) {\n this.telemetryScrubber = options.telemetryScrubber;\n }\n};\n\nInstrumenter.prototype.instrument = function(oldSettings) {\n if (this.autoInstrument.network && !(oldSettings && oldSettings.network)) {\n this.instrumentNetwork();\n } else if (!this.autoInstrument.network && oldSettings && oldSettings.network) {\n this.deinstrumentNetwork();\n }\n\n if (this.autoInstrument.log && !(oldSettings && oldSettings.log)) {\n this.instrumentConsole();\n } else if (!this.autoInstrument.log && oldSettings && oldSettings.log) {\n this.deinstrumentConsole();\n }\n\n if (this.autoInstrument.dom && !(oldSettings && oldSettings.dom)) {\n this.instrumentDom();\n } else if (!this.autoInstrument.dom && oldSettings && oldSettings.dom) {\n this.deinstrumentDom();\n }\n\n if (this.autoInstrument.navigation && !(oldSettings && oldSettings.navigation)) {\n this.instrumentNavigation();\n } else if (!this.autoInstrument.navigation && oldSettings && oldSettings.navigation) {\n this.deinstrumentNavigation();\n }\n\n if (this.autoInstrument.connectivity && !(oldSettings && oldSettings.connectivity)) {\n this.instrumentConnectivity();\n } else if (!this.autoInstrument.connectivity && oldSettings && oldSettings.connectivity) {\n this.deinstrumentConnectivity();\n }\n};\n\nInstrumenter.prototype.deinstrumentNetwork = function() {\n restore(this.replacements, 'network');\n};\n\nInstrumenter.prototype.instrumentNetwork = function() {\n var self = this;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && _.isFunction(xhr[prop])) {\n replace(xhr, prop, function(orig) {\n return self.rollbar.wrap(orig);\n });\n }\n }\n\n if ('XMLHttpRequest' in this._window) {\n var xhrp = this._window.XMLHttpRequest.prototype;\n replace(xhrp, 'open', function(orig) {\n return function(method, url) {\n if (_.isType(url, 'string')) {\n this.__rollbar_xhr = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'network');\n\n replace(xhrp, 'send', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(data) {\n /* eslint-enable no-unused-vars */\n var xhr = this;\n\n function onreadystatechangeHandler() {\n if (xhr.__rollbar_xhr && (xhr.readyState === 1 || xhr.readyState === 4)) {\n if (xhr.__rollbar_xhr.status_code === null) {\n xhr.__rollbar_xhr.status_code = 0;\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n requestData = data;\n }\n xhr.__rollbar_event = self.telemeter.captureNetwork(xhr.__rollbar_xhr, 'xhr', undefined, requestData);\n }\n if (xhr.readyState === 1) {\n xhr.__rollbar_xhr.start_time_ms = _.now();\n } else {\n xhr.__rollbar_xhr.end_time_ms = _.now();\n\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n var header, i;\n if (headersConfig === true) {\n var allHeaders = xhr.getAllResponseHeaders();\n if (allHeaders) {\n var arr = allHeaders.trim().split(/[\\r\\n]+/);\n var parts, value;\n for (i=0; i < arr.length; i++) {\n parts = arr[i].split(': ');\n header = parts.shift();\n value = parts.join(': ');\n headers[header] = value;\n }\n }\n } else {\n for (i=0; i < headersConfig.length; i++) {\n header = headersConfig[i];\n headers[header] = xhr.getResponseHeader(header);\n }\n }\n } catch (e) {\n /* we ignore the errors here that could come from different\n * browser issues with the xhr methods */\n }\n }\n var body = null;\n if (self.autoInstrument.networkResponseBody) {\n try {\n body = xhr.responseText;\n } catch (e) {\n /* ignore errors from reading responseText */\n }\n }\n var response = null;\n if (body || headers) {\n response = {};\n if (body) {\n response.body = body;\n }\n if (headers) {\n response.headers = headers;\n }\n }\n if (response) {\n xhr.__rollbar_xhr.response = response;\n }\n }\n try {\n var code = xhr.status;\n code = code === 1223 ? 204 : code;\n xhr.__rollbar_xhr.status_code = code;\n xhr.__rollbar_event.level = self.telemeter.levelFromStatus(code);\n } catch (e) {\n /* ignore possible exception from xhr.status */\n }\n }\n }\n\n wrapProp('onload', xhr);\n wrapProp('onerror', xhr);\n wrapProp('onprogress', xhr);\n\n if ('onreadystatechange' in xhr && _.isFunction(xhr.onreadystatechange)) {\n replace(xhr, 'onreadystatechange', function(orig) {\n return self.rollbar.wrap(orig, undefined, onreadystatechangeHandler);\n });\n } else {\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n return orig.apply(this, arguments);\n }\n }, this.replacements, 'network');\n }\n\n if ('fetch' in this._window) {\n replace(this._window, 'fetch', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(fn, t) {\n /* eslint-enable no-unused-vars */\n var args = new Array(arguments.length);\n for (var i=0, len=args.length; i < len; i++) {\n args[i] = arguments[i];\n }\n var input = args[0];\n var method = 'GET';\n var url;\n if (_.isType(input, 'string')) {\n url = input;\n } else if (input) {\n url = input.url;\n if (input.method) {\n method = input.method;\n }\n }\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n var metadata = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n if (args[1] && args[1].body) {\n requestData = args[1].body;\n } else if (args[0] && !_.isType(args[0], 'string') && args[0].body) {\n requestData = args[0].body;\n }\n }\n self.telemeter.captureNetwork(metadata, 'fetch', undefined, requestData);\n return orig.apply(this, args).then(function (resp) {\n metadata.end_time_ms = _.now();\n metadata.status_code = resp.status;\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n if (headersConfig === true) {\n // This is unsupported in IE so we can't do it\n /*\n var allHeaders = resp.headers.entries();\n for (var pair of allHeaders) {\n headers[pair[0]] = pair[1];\n }\n */\n } else {\n for (var i=0; i < headersConfig.length; i++) {\n var header = headersConfig[i];\n headers[header] = resp.headers.get(header);\n }\n }\n } catch (e) {\n /* ignore probable IE errors */\n }\n }\n var response = null;\n if (headers) {\n response = {\n headers: headers\n };\n }\n if (response) {\n metadata.response = response;\n }\n return resp;\n });\n };\n }, this.replacements, 'network');\n }\n};\n\nInstrumenter.prototype.deinstrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n var b;\n while (this.replacements['log'].length) {\n b = this.replacements['log'].shift();\n this._window.console[b[0]] = b[1];\n }\n};\n\nInstrumenter.prototype.instrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n\n var self = this;\n var c = this._window.console;\n\n function wrapConsole(method) {\n var orig = c[method];\n var origConsole = c;\n var level = method === 'warn' ? 'warning' : method;\n c[method] = function() {\n var args = Array.prototype.slice.call(arguments);\n var message = _.formatArgsAsString(args);\n self.telemeter.captureLog(message, level);\n if (orig) {\n Function.prototype.apply.call(orig, origConsole, args);\n }\n };\n self.replacements['log'].push([method, orig]);\n }\n var methods = ['debug','info','warn','error','log'];\n for (var i=0, len=methods.length; i < len; i++) {\n wrapConsole(methods[i]);\n }\n};\n\nInstrumenter.prototype.deinstrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n this.removeListeners('dom');\n};\n\nInstrumenter.prototype.instrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n var clickHandler = this.handleClick.bind(this);\n var blurHandler = this.handleBlur.bind(this);\n this.addListener('dom', this._window, 'click', 'onclick', clickHandler, true);\n this.addListener('dom', this._window, 'blur', 'onfocusout', blurHandler, true);\n};\n\nInstrumenter.prototype.handleClick = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n var hasTag = e && e.tagName;\n var anchorOrButton = domUtil.isDescribedElement(e, 'a') || domUtil.isDescribedElement(e, 'button');\n if (hasTag && (anchorOrButton || domUtil.isDescribedElement(e, 'input', ['button', 'submit']))) {\n this.captureDomEvent('click', e);\n } else if (domUtil.isDescribedElement(e, 'input', ['checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value, e.checked);\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleBlur = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n if (e && e.tagName) {\n if (domUtil.isDescribedElement(e, 'textarea')) {\n this.captureDomEvent('input', e, e.value);\n } else if (domUtil.isDescribedElement(e, 'select') && e.options && e.options.length) {\n this.handleSelectInputChanged(e);\n } else if (domUtil.isDescribedElement(e, 'input') && !domUtil.isDescribedElement(e, 'input', ['button', 'submit', 'hidden', 'checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value);\n }\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleSelectInputChanged = function(elem) {\n if (elem.multiple) {\n for (var i = 0; i < elem.options.length; i++) {\n if (elem.options[i].selected) {\n this.captureDomEvent('input', elem, elem.options[i].value);\n }\n }\n } else if (elem.selectedIndex >= 0 && elem.options[elem.selectedIndex]) {\n this.captureDomEvent('input', elem, elem.options[elem.selectedIndex].value);\n }\n};\n\nInstrumenter.prototype.captureDomEvent = function(subtype, element, value, isChecked) {\n if (value !== undefined) {\n if (this.scrubTelemetryInputs || (domUtil.getElementType(element) === 'password')) {\n value = '[scrubbed]';\n } else if (this.telemetryScrubber) {\n var description = domUtil.describeElement(element);\n if (this.telemetryScrubber(description)) {\n value = '[scrubbed]';\n }\n }\n }\n var elementString = domUtil.elementArrayToString(domUtil.treeToArray(element));\n this.telemeter.captureDom(subtype, elementString, value, isChecked);\n};\n\nInstrumenter.prototype.deinstrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n restore(this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.instrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n var self = this;\n replace(this._window, 'onpopstate', function(orig) {\n return function() {\n var current = self._location.href;\n self.handleUrlChange(self._lastHref, current);\n if (orig) {\n orig.apply(this, arguments);\n }\n };\n }, this.replacements, 'navigation');\n\n replace(this._window.history, 'pushState', function(orig) {\n return function() {\n var url = arguments.length > 2 ? arguments[2] : undefined;\n if (url) {\n self.handleUrlChange(self._lastHref, url + '');\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.handleUrlChange = function(from, to) {\n var parsedHref = urlparser.parse(this._location.href);\n var parsedTo = urlparser.parse(to);\n var parsedFrom = urlparser.parse(from);\n this._lastHref = to;\n if (parsedHref.protocol === parsedTo.protocol && parsedHref.host === parsedTo.host) {\n to = parsedTo.path + (parsedTo.hash || '');\n }\n if (parsedHref.protocol === parsedFrom.protocol && parsedHref.host === parsedFrom.host) {\n from = parsedFrom.path + (parsedFrom.hash || '');\n }\n this.telemeter.captureNavigation(from, to);\n};\n\nInstrumenter.prototype.deinstrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.removeListeners('connectivity');\n } else {\n restore(this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.instrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.addListener('connectivity', this._window, 'online', undefined, function() {\n this.telemeter.captureConnectivityChange('online');\n }.bind(this), true);\n this.addListener('connectivity', this._window, 'offline', undefined, function() {\n this.telemeter.captureConnectivityChange('offline');\n }.bind(this), true);\n } else {\n var self = this;\n replace(this._document.body, 'ononline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('online');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n replace(this._document.body, 'onoffline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('offline');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.addListener = function(section, obj, type, altType, handler, capture) {\n if (obj.addEventListener) {\n obj.addEventListener(type, handler, capture);\n this.eventRemovers[section].push(function() {\n obj.removeEventListener(type, handler, capture);\n });\n } else if (altType) {\n obj.attachEvent(altType, handler);\n this.eventRemovers[section].push(function() {\n obj.detachEvent(altType, handler);\n });\n }\n};\n\nInstrumenter.prototype.removeListeners = function(section) {\n var r;\n while (this.eventRemovers[section].length) {\n r = this.eventRemovers[section].shift();\n r();\n }\n};\n\nmodule.exports = Instrumenter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/telemetry.js\n// module id = 26\n// module chunks = 0","'use strict';\n\nfunction getElementType(e) {\n return (e.getAttribute('type') || '').toLowerCase();\n}\n\nfunction isDescribedElement(element, type, subtypes) {\n if (element.tagName.toLowerCase() !== type.toLowerCase()) {\n return false;\n }\n if (!subtypes) {\n return true;\n }\n element = getElementType(element);\n for (var i = 0; i < subtypes.length; i++) {\n if (subtypes[i] === element) {\n return true;\n }\n }\n return false;\n}\n\nfunction getElementFromEvent(evt, doc) {\n if (evt.target) {\n return evt.target;\n }\n if (doc && doc.elementFromPoint) {\n return doc.elementFromPoint(evt.clientX, evt.clientY);\n }\n return undefined;\n}\n\nfunction treeToArray(elem) {\n var MAX_HEIGHT = 5;\n var out = [];\n var nextDescription;\n for (var height = 0; elem && height < MAX_HEIGHT; height++) {\n nextDescription = describeElement(elem);\n if (nextDescription.tagName === 'html') {\n break;\n }\n out.unshift(nextDescription);\n elem = elem.parentNode;\n }\n return out;\n}\n\nfunction elementArrayToString(a) {\n var MAX_LENGTH = 80;\n var separator = ' > ', separatorLength = separator.length;\n var out = [], len = 0, nextStr, totalLength;\n\n for (var i = a.length - 1; i >= 0; i--) {\n nextStr = descriptionToString(a[i]);\n totalLength = len + (out.length * separatorLength) + nextStr.length;\n if (i < a.length - 1 && totalLength >= MAX_LENGTH + 3) {\n out.unshift('...');\n break;\n }\n out.unshift(nextStr);\n len += nextStr.length;\n }\n return out.join(separator);\n}\n\nfunction descriptionToString(desc) {\n if (!desc || !desc.tagName) {\n return '';\n }\n var out = [desc.tagName];\n if (desc.id) {\n out.push('#' + desc.id);\n }\n if (desc.classes) {\n out.push('.' + desc.classes.join('.'));\n }\n for (var i = 0; i < desc.attributes.length; i++) {\n out.push('[' + desc.attributes[i].key + '=\"' + desc.attributes[i].value + '\"]');\n }\n\n return out.join('');\n}\n\n/**\n * Input: a dom element\n * Output: null if tagName is falsey or input is falsey, else\n * {\n * tagName: String,\n * id: String | undefined,\n * classes: [String] | undefined,\n * attributes: [\n * {\n * key: OneOf(type, name, title, alt),\n * value: String\n * }\n * ]\n * }\n */\nfunction describeElement(elem) {\n if (!elem || !elem.tagName) {\n return null;\n }\n var out = {}, className, key, attr, i;\n out.tagName = elem.tagName.toLowerCase();\n if (elem.id) {\n out.id = elem.id;\n }\n className = elem.className;\n if (className && (typeof className === 'string')) {\n out.classes = className.split(/\\s+/);\n }\n var attributes = ['type', 'name', 'title', 'alt'];\n out.attributes = [];\n for (i = 0; i < attributes.length; i++) {\n key = attributes[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.attributes.push({key: key, value: attr});\n }\n }\n return out;\n}\n\nmodule.exports = {\n describeElement: describeElement,\n descriptionToString: descriptionToString,\n elementArrayToString: elementArrayToString,\n treeToArray: treeToArray,\n getElementFromEvent: getElementFromEvent,\n isDescribedElement: isDescribedElement,\n getElementType: getElementType\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/domUtility.js\n// module id = 27\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/rollbar.named-amd.min.js b/dist/rollbar.named-amd.min.js index a461bce90..87a641548 100644 --- a/dist/rollbar.named-amd.min.js +++ b/dist/rollbar.named-amd.min.js @@ -1,3 +1,3 @@ -define("rollbar",[],function(){return function(t){function e(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return t[r].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}var n={};return e.m=t,e.c=n,e.p="",e(0)}([function(t,e,n){t.exports=n(1)},function(t,e,n){"use strict";var r=n(2),o="undefined"!=typeof window&&window._rollbarConfig,i=o&&o.globalAlias||"Rollbar",a="undefined"!=typeof window&&window[i]&&"function"==typeof window[i].shimId&&void 0!==window[i].shimId();if("undefined"==typeof window||window._rollbarStartTime||(window._rollbarStartTime=(new Date).getTime()),!a&&o){var s=new r(o);window[i]=s}else"undefined"!=typeof window?(window.rollbar=r,window._rollbarDidLoad=!0):"undefined"!=typeof self&&(self.rollbar=r,self._rollbarDidLoad=!0);t.exports=r},function(t,e,n){"use strict";function r(t,e){this.options=c.extend(!0,x,t);var n=new l(this.options,h,d);this.client=e||new u(this.options,n,p,"browser");var r="undefined"!=typeof window&&window||"undefined"!=typeof self&&self,o="undefined"!=typeof document&&document;i(this.client.notifier),a(this.client.queue),(this.options.captureUncaught||this.options.handleUncaughtExceptions)&&(f.captureUncaughtExceptions(r,this),f.wrapGlobals(r,this)),(this.options.captureUnhandledRejections||this.options.handleUnhandledRejections)&&f.captureUnhandledRejections(r,this),this.instrumenter=new w(this.options,this.client.telemeter,this,r,o),this.instrumenter.instrument()}function o(t){var e="Rollbar is not initialized";p.error(e),t&&t(new Error(e))}function i(t){t.addTransform(m.handleItemWithError).addTransform(m.ensureItemHasSomethingToSay).addTransform(m.addBaseInfo).addTransform(m.addRequestInfo(window)).addTransform(m.addClientInfo(window)).addTransform(m.addPluginInfo(window)).addTransform(m.addBody).addTransform(g.addMessageWithError).addTransform(g.addTelemetryData).addTransform(g.addConfigToPayload).addTransform(m.scrubPayload).addTransform(g.userTransform(p)).addTransform(g.itemToPayload)}function a(t){t.addPredicate(y.checkLevel).addPredicate(v.checkIgnore).addPredicate(y.userCheckIgnore(p)).addPredicate(y.urlIsNotBlacklisted(p)).addPredicate(y.urlIsWhitelisted(p)).addPredicate(y.messageIsIgnored(p))}function s(t){for(var e=0,n=t.length;e=1&&n>e}function o(t,e,n,r,o,a,s){var u=null;return n&&(n=new Error(n)),n||r||(u=i(t,e,o,a,s)),{error:n,shouldSend:r,payload:u}}function i(t,e,n,r,o){var i,a=e.environment||e.payload&&e.payload.environment;i=o?"item per minute limit reached, ignoring errors until timeout":"maxItems has been hit, ignoring errors until reset.";var s={body:{message:{body:i,extra:{maxItems:n,itemsPerMinute:r}}},language:"javascript",environment:a,notifier:{version:e.notifier&&e.notifier.version||e.version}};return"browser"===t?(s.platform="browser",s.framework="browser-js",s.notifier.name="rollbar-browser-js"):"server"===t?(s.framework=e.framework||"node-js",s.notifier.name=e.notifier.name):"react-native"===t&&(s.framework=e.framework||"react-native",s.notifier.name=e.notifier.name),s}n.globalSettings={startTime:(new Date).getTime(),maxItems:void 0,itemsPerMinute:void 0},n.prototype.configureGlobal=function(t){void 0!==t.startTime&&(n.globalSettings.startTime=t.startTime),void 0!==t.maxItems&&(n.globalSettings.maxItems=t.maxItems),void 0!==t.itemsPerMinute&&(n.globalSettings.itemsPerMinute=t.itemsPerMinute)},n.prototype.shouldSend=function(t,e){e=e||(new Date).getTime(),e-this.startTime>=6e4&&(this.startTime=e,this.perMinCounter=0);var i=n.globalSettings.maxItems,a=n.globalSettings.itemsPerMinute;if(r(t,i,this.counter))return o(this.platform,this.platformOptions,i+" max items reached",!1);if(r(t,a,this.perMinCounter))return o(this.platform,this.platformOptions,a+" items per minute reached",!1);this.counter++,this.perMinCounter++;var s=!r(t,i,this.counter),u=s;return s=s&&!r(t,a,this.perMinCounter),o(this.platform,this.platformOptions,null,s,i,a,u)},n.prototype.setPlatformOptions=function(t,e){this.platform=t,this.platformOptions=e},t.exports=n},function(t,e,n){"use strict";function r(t,e,n,r){this.rateLimiter=t,this.api=e,this.logger=n,this.options=r,this.predicates=[],this.pendingItems=[],this.pendingRequests=[],this.retryQueue=[],this.retryHandle=null,this.waitCallback=null,this.waitIntervalID=null}var o=n(6);r.prototype.configure=function(t){this.api&&this.api.configure(t);var e=this.options;return this.options=o.extend(!0,{},e,t),this},r.prototype.addPredicate=function(t){return o.isFunction(t)&&this.predicates.push(t),this},r.prototype.addPendingItem=function(t){this.pendingItems.push(t)},r.prototype.removePendingItem=function(t){var e=this.pendingItems.indexOf(t);e!==-1&&this.pendingItems.splice(e,1)},r.prototype.addItem=function(t,e,n,r){e&&o.isFunction(e)||(e=function(){});var i=this._applyPredicates(t);if(i.stop)return this.removePendingItem(r),void e(i.err);this._maybeLog(t,n),this.removePendingItem(r),this.pendingRequests.push(t);try{this._makeApiRequest(t,function(n,r){this._dequeuePendingRequest(t),e(n,r)}.bind(this))}catch(n){this._dequeuePendingRequest(t),e(n)}},r.prototype.wait=function(t){o.isFunction(t)&&(this.waitCallback=t,this._maybeCallWait()||(this.waitIntervalID&&(this.waitIntervalID=clearInterval(this.waitIntervalID)),this.waitIntervalID=setInterval(function(){this._maybeCallWait()}.bind(this),500)))},r.prototype._applyPredicates=function(t){for(var e=null,n=0,r=this.predicates.length;ns)?(a=e.path,e.path=a.substring(0,s)+i+"&"+a.substring(s+1)):u!==-1?(a=e.path,e.path=a.substring(0,u)+i+a.substring(u)):e.path=e.path+i}function y(t,e){if(e=e||t.protocol,!e&&t.port&&(80===t.port?e="http:":443===t.port&&(e="https:")),e=e||"https:",!t.hostname)return null;var n=e+"//"+t.hostname;return t.port&&(n=n+":"+t.port),t.path&&(n+=t.path),n}function b(t,e){var n,r;try{n=R.stringify(t)}catch(o){if(e&&a(e))try{n=e(t)}catch(t){r=t}else r=o}return{error:r,value:n}}function w(t){var e,n;try{e=R.parse(t)}catch(t){n=t}return{error:n,value:e}}function _(t,e,n,r,o,i,a,s){var u={url:e||"",line:n,column:r};u.func=s.guessFunctionName(u.url,u.line),u.context=s.gatherContext(u.url,u.line);var c=document&&document.location&&document.location.href,l=window&&window.navigator&&window.navigator.userAgent;return{mode:i,message:o?String(o):t||a,url:c,stack:[u],useragent:l}}function x(t,e){return function(n,r){try{e(n,r)}catch(e){t.error(e)}}}function k(t,e,n,r,o){for(var a,s,u,c,l,p,f=[],h=0,m=t.length;h0&&(u=C(!0,{},u),u.extraArgs=f);var b={message:a,err:s,custom:u,timestamp:N(),callback:c,uuid:d()};return u&&void 0!==u.level&&(b.level=u.level,delete u.level),r&&l&&(b.request=l),o&&(b.lambdaContext=o),b._originalArgs=t,b}function E(t,e){if(t){var n=e.split("."),r=t;try{for(var o=0,i=n.length;o500&&(r=r.substr(0,500)+"...")):"undefined"==typeof r&&(r="undefined"),o.push(r);return o.join(" ")}function N(){return Date.now?+Date.now():+new Date}var C=n(7),R={},A=!1;r();var j={debug:0,info:1,warning:2,error:3,critical:4},q={strictMode:!1,key:["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],q:{name:"queryKey",parser:/(?:^|&)([^&=]*)=?([^&]*)/g},parser:{strict:/^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,loose:/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/}};t.exports={isType:o,typeName:i,isFunction:a,isNativeFunction:s,isIterable:l,isError:p,extend:C,traverse:f,redact:h,uuid4:d,LEVELS:j,sanitizeUrl:m,addParamsAndAccessTokenToPath:v,formatUrl:y,stringify:b,jsonParse:w,makeUnhandledStackInfo:_,createItem:k,get:E,set:I,scrub:T,formatArgsAsString:L,now:N}},function(t,e){"use strict";var n=Object.prototype.hasOwnProperty,r=Object.prototype.toString,o=function(t){return"function"==typeof Array.isArray?Array.isArray(t):"[object Array]"===r.call(t)},i=function(t){if(!t||"[object Object]"!==r.call(t))return!1;var e=n.call(t,"constructor"),o=t.constructor&&t.constructor.prototype&&n.call(t.constructor.prototype,"isPrototypeOf");if(t.constructor&&!e&&!o)return!1;var i;for(i in t);return"undefined"==typeof i||n.call(t,i)};t.exports=function t(){var e,n,r,a,s,u,c=arguments[0],l=1,p=arguments.length,f=!1;for("boolean"==typeof c?(f=c,c=arguments[1]||{},l=2):("object"!=typeof c&&"function"!=typeof c||null==c)&&(c={});lr&&(o=this.maxQueueSize-r),this.maxQueueSize=r,this.queue.splice(0,o)},r.prototype.copyEvents=function(){return Array.prototype.slice.call(this.queue,0)},r.prototype.capture=function(t,e,n,r,a){var s={level:o(t,n),type:t,timestamp_ms:a||i.now(),body:e,source:"client"};r&&(s.uuid=r);try{if(i.isFunction(this.options.filterTelemetry)&&this.options.filterTelemetry(s))return!1}catch(t){this.options.filterTelemetry=null}return this.push(s),s},r.prototype.captureEvent=function(t,e,n){return this.capture("manual",t,e,n)},r.prototype.captureError=function(t,e,n,r){var o={message:t.message||String(t)};return t.stack&&(o.stack=t.stack),this.capture("error",o,e,n,r)},r.prototype.captureLog=function(t,e,n,r){return this.capture("log",{message:t},e,n,r)},r.prototype.captureNetwork=function(t,e,n,r){e=e||"xhr",t.subtype=t.subtype||e,r&&(t.request=r);var o=this.levelFromStatus(t.status_code);return this.capture("network",t,o,n)},r.prototype.levelFromStatus=function(t){return t>=200&&t<400?"info":0===t||t>=400?"error":"info"},r.prototype.captureDom=function(t,e,n,r,o){var i={subtype:t,element:e};return void 0!==n&&(i.value=n),void 0!==r&&(i.checked=r),this.capture("dom",i,"info",o)},r.prototype.captureNavigation=function(t,e,n){return this.capture("navigation",{from:t,to:e},"info",n)},r.prototype.captureDomContentLoaded=function(t){return this.capture("navigation",{subtype:"DOMContentLoaded"},"info",void 0,t&&t.getTime())},r.prototype.captureLoad=function(t){return this.capture("navigation",{subtype:"load"},"info",void 0,t&&t.getTime())},r.prototype.captureConnectivityChange=function(t,e){return this.captureNetwork({change:t},"connectivity",e)},r.prototype._captureRollbarItem=function(t){if(this.options.includeItemsInTelemetry)return t.err?this.captureError(t.err,t.level,t.uuid,t.timestamp):t.message?this.captureLog(t.message,t.level,t.uuid,t.timestamp):t.custom?this.capture("log",t.custom,t.level,t.uuid,t.timestamp):void 0},r.prototype.push=function(t){this.queue.push(t),this.queue.length>this.maxQueueSize&&this.queue.shift()},t.exports=r},function(t,e,n){"use strict";function r(t,e,n,r){this.options=t,this.transport=e,this.url=n,this.jsonBackup=r,this.accessToken=t.accessToken,this.transportOptions=o(t,n)}function o(t,e){return a.getTransportFromOptions(t,s,e)}var i=n(6),a=n(12),s={hostname:"api.rollbar.com",path:"/api/1/item/",search:null,version:"1",protocol:"https:",port:443};r.prototype.postItem=function(t,e){var n=a.transportOptions(this.transportOptions,"POST"),r=a.buildPayload(this.accessToken,t,this.jsonBackup);this.transport.post(this.accessToken,n,r,e)},r.prototype.configure=function(t){var e=this.oldOptions;return this.options=i.extend(!0,{},e,t),this.transportOptions=o(this.options,this.url),void 0!==this.options.accessToken&&(this.accessToken=this.options.accessToken),this},t.exports=r},function(t,e,n){"use strict";function r(t,e,n){if(!s.isType(e.context,"string")){var r=s.stringify(e.context,n);r.error?e.context="Error: could not serialize 'context'":e.context=r.value||"",e.context.length>255&&(e.context=e.context.substr(0,255))}return{access_token:t,data:e}}function o(t,e,n){var r=e.hostname,o=e.protocol,i=e.port,a=e.path,s=e.search,u=t.proxy;if(t.endpoint){var c=n.parse(t.endpoint);r=c.hostname,o=c.protocol,i=c.port,a=c.pathname,s=c.search}return{hostname:r,protocol:o,port:i,path:a,search:s,proxy:u}}function i(t,e){var n=t.protocol||"https:",r=t.port||("http:"===n?80:"https:"===n?443:void 0),o=t.hostname,i=t.path;return t.search&&(i+=t.search),t.proxy&&(i=n+"//"+o+i,o=t.proxy.host||t.proxy.hostname,r=t.proxy.port,n=t.proxy.protocol||n),{protocol:n,hostname:o,path:i,port:r,method:e}}function a(t,e){var n=/\/$/.test(t),r=/^\//.test(e);return n&&r?e=e.substring(1):n||r||(e="/"+e),t+e}var s=n(6);t.exports={buildPayload:r,getTransportFromOptions:o,transportOptions:i,appendPathToPath:a}},function(t,e,n){"use strict";function r(){var t=Array.prototype.slice.call(arguments,0);t.unshift("Rollbar:"),a.ieVersion()<=8?console.error(s.formatArgsAsString(t)):console.error.apply(console,t)}function o(){var t=Array.prototype.slice.call(arguments,0);t.unshift("Rollbar:"),a.ieVersion()<=8?console.info(s.formatArgsAsString(t)):console.info.apply(console,t)}function i(){var t=Array.prototype.slice.call(arguments,0);t.unshift("Rollbar:"),a.ieVersion()<=8?console.log(s.formatArgsAsString(t)):console.log.apply(console,t)}n(14);var a=n(15),s=n(6);t.exports={error:r,info:o,log:i}},function(t,e){!function(t){"use strict";t.console||(t.console={});for(var e,n,r=t.console,o=function(){},i=["memory"],a="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(",");e=i.pop();)r[e]||(r[e]={});for(;n=a.pop();)r[n]||(r[n]=o)}("undefined"==typeof window?this:window)},function(t,e){"use strict";function n(){var t;if(!document)return t;for(var e=3,n=document.createElement("div"),r=n.getElementsByTagName("i");n.innerHTML="",r[0];);return e>4?e:t}var r={ieVersion:n};t.exports=r},function(t,e){"use strict";function n(t,e,n){if(t){var o;"function"==typeof e._rollbarOldOnError?o=e._rollbarOldOnError:t.onerror&&!t.onerror.belongsToShim&&(o=t.onerror,e._rollbarOldOnError=o);var i=function(){var n=Array.prototype.slice.call(arguments,0);r(t,e,o,n)};i.belongsToShim=n,t.onerror=i}}function r(t,e,n,r){ -t._rollbarWrappedError&&(r[4]||(r[4]=t._rollbarWrappedError),r[5]||(r[5]=t._rollbarWrappedError._rollbarContext),t._rollbarWrappedError=null),e.handleUncaughtException.apply(e,r),n&&n.apply(t,r)}function o(t,e,n){if(t){"function"==typeof t._rollbarURH&&t._rollbarURH.belongsToShim&&t.removeEventListener("unhandledrejection",t._rollbarURH);var r=function(t){var n,r,o;try{n=t.reason}catch(t){n=void 0}try{r=t.promise}catch(t){r="[unhandledrejection] error getting `promise` from event"}try{o=t.detail,!n&&o&&(n=o.reason,r=o.promise)}catch(t){o="[unhandledrejection] error getting `detail` from event"}n||(n="[unhandledrejection] error getting `reason` from event"),e&&e.handleUnhandledRejection&&e.handleUnhandledRejection(n,r)};r.belongsToShim=n,t._rollbarURH=r,t.addEventListener("unhandledrejection",r)}}function i(t,e,n){if(t){var r,o,i="EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload".split(",");for(r=0;r=400&&t.status<600}function c(t,e){var n=new Error(t);return n.code=e||"ENOTFOUND",n}var l=n(6),p=n(13);t.exports={get:r,post:o}},function(t,e){"use strict";function n(t){var e,n,r={protocol:null,auth:null,host:null,path:null,hash:null,href:t,hostname:null,port:null,pathname:null,search:null,query:null};if(e=t.indexOf("//"),e!==-1?(r.protocol=t.substring(0,e),n=e+2):n=0,e=t.indexOf("@",n),e!==-1&&(r.auth=t.substring(n,e),n=e+1),e=t.indexOf("/",n),e===-1){if(e=t.indexOf("?",n),e===-1)return e=t.indexOf("#",n),e===-1?r.host=t.substring(n):(r.host=t.substring(n,e),r.hash=t.substring(e)),r.hostname=r.host.split(":")[0],r.port=r.host.split(":")[1],r.port&&(r.port=parseInt(r.port,10)),r;r.host=t.substring(n,e),r.hostname=r.host.split(":")[0],r.port=r.host.split(":")[1],r.port&&(r.port=parseInt(r.port,10)),n=e}else r.host=t.substring(n,e),r.hostname=r.host.split(":")[0],r.port=r.host.split(":")[1],r.port&&(r.port=parseInt(r.port,10)),n=e;if(e=t.indexOf("#",n),e===-1?r.path=t.substring(n):(r.path=t.substring(n,e),r.hash=t.substring(e)),r.path){var o=r.path.split("?");r.pathname=o[0],r.query=o[1],r.search=r.query?"?"+r.query:null}return r}t.exports={parse:n}},function(t,e,n){"use strict";function r(t,e,n){if(t.data=t.data||{},t.err)try{t.stackInfo=t.err._savedStackTrace||d.parse(t.err)}catch(e){m.error("Error while parsing the error object.",e),t.message=t.err.message||t.err.description||t.message||String(t.err),delete t.err}n(null,t)}function o(t,e,n){t.message||t.stackInfo||t.custom||n(new Error("No message, stack info, or custom data"),null),n(null,t)}function i(t,e,n){var r=e.payload&&e.payload.environment||e.environment;t.data=h.extend(!0,{},t.data,{environment:r,level:t.level,endpoint:e.endpoint,platform:"browser",framework:"browser-js",language:"javascript",server:{},uuid:t.uuid,notifier:{name:"rollbar-browser-js",version:e.version}}),n(null,t)}function a(t){return function(e,n,r){return t&&t.location?(h.set(e,"data.request",{url:t.location.href,query_string:t.location.search,user_ip:"$remote_ip"}),void r(null,e)):r(null,e)}}function s(t){return function(e,n,r){if(!t)return r(null,e);var o=t.navigator||{},i=t.screen||{};h.set(e,"data.client",{runtime_ms:e.timestamp-t._rollbarStartTime,timestamp:Math.round(e.timestamp/1e3),javascript:{browser:o.userAgent,language:o.language,cookie_enabled:o.cookieEnabled,screen:{width:i.width,height:i.height}}}),r(null,e)}}function u(t){return function(e,n,r){if(!t||!t.navigator)return r(null,e);for(var o,i=[],a=t.navigator.plugins||[],s=0,u=a.length;s-1&&(e=e.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var n=e.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),r=this.extractLocation(n.pop()),o=n.join(" ")||void 0,i="eval"===r[0]?void 0:r[0];return new t(o,void 0,i,r[1],r[2],e)},this)},parseFFOrSafari:function(r){var o=n(r.stack.split("\n"),function(t){return!t.match(i)},this);return e(o,function(e){if(e.indexOf(" > eval")>-1&&(e=e.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),e.indexOf("@")===-1&&e.indexOf(":")===-1)return new t(e);var n=e.split("@"),r=this.extractLocation(n.pop()),o=n.shift()||void 0;return new t(o,void 0,r[0],r[1],r[2],e)},this)},parseOpera:function(t){return!t.stacktrace||t.message.indexOf("\n")>-1&&t.message.split("\n").length>t.stacktrace.split("\n").length?this.parseOpera9(t):t.stack?this.parseOpera11(t):this.parseOpera10(t)},parseOpera9:function(e){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=e.message.split("\n"),o=[],i=2,a=r.length;i/,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(n=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new t(a,s,o[0],o[1],o[2],e)},this)}}})},function(t,e,n){var r,o,i;!function(n,a){"use strict";o=[],r=a,i="function"==typeof r?r.apply(e,o):r,!(void 0!==i&&(t.exports=i))}(this,function(){"use strict";function t(t){return!isNaN(parseFloat(t))&&isFinite(t)}function e(t,e,n,r,o,i){void 0!==t&&this.setFunctionName(t),void 0!==e&&this.setArgs(e),void 0!==n&&this.setFileName(n),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return e.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(t){this.functionName=String(t)},getArgs:function(){return this.args},setArgs:function(t){if("[object Array]"!==Object.prototype.toString.call(t))throw new TypeError("Args must be an Array");this.args=t},getFileName:function(){return this.fileName},setFileName:function(t){this.fileName=String(t)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(e){if(!t(e))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(e)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(e){if(!t(e))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(e)},getSource:function(){return this.source},setSource:function(t){this.source=String(t)},toString:function(){var e=this.getFunctionName()||"{anonymous}",n="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=t(this.getLineNumber())?":"+this.getLineNumber():"",i=t(this.getColumnNumber())?":"+this.getColumnNumber():"";return e+n+r+o+i}},e})},function(t,e,n){"use strict";function r(t,e,n){var r=e.payload||{};r.body&&delete r.body;var o=u.extend(!0,{},t.data,r);t._isUncaught&&(o._isUncaught=!0),t._originalArgs&&(o._originalArgs=t._originalArgs),n(null,o)}function o(t,e,n){t.telemetryEvents&&u.set(t,"data.body.telemetry",t.telemetryEvents),n(null,t)}function i(t,e,n){if(!t.message)return void n(null,t);var r="data.body.trace_chain.0",o=u.get(t,r);if(o||(r="data.body.trace",o=u.get(t,r)),o){if(!o.exception||!o.exception.description)return u.set(t,r+".exception.description",t.message),void n(null,t);var i=u.get(t,r+".extra")||{},a=u.extend(!0,{},i,{message:t.message});u.set(t,r+".extra",a)}n(null,t)}function a(t){return function(e,n,r){var o=u.extend(!0,{},e);try{u.isFunction(n.transform)&&n.transform(o.data)}catch(o){return n.transform=null,t.error("Error while calling custom transform() function. Removing custom transform().",o),void r(null,e)}r(null,o)}}function s(t,e,n){if(!e.sendConfig)return n(null,t);var r="_rollbarConfig",o=u.get(t,"data.custom")||{};o[r]=e,t.data.custom=o,n(null,t)}var u=n(6);t.exports={itemToPayload:r,addTelemetryData:o,addMessageWithError:i,userTransform:a,addConfigToPayload:s}},function(t,e,n){"use strict";function r(t,e){return!o.get(e,"plugins.jquery.ignoreAjaxErrors")||!o.get(t,"body.message.extra.isAjax")}var o=n(6);t.exports={checkIgnore:r}},function(t,e,n){"use strict";function r(t,e){var n=t.level,r=c.LEVELS[n]||0,o=e.reportLevel,i=c.LEVELS[o]||0;return!(r=0&&t.options[t.selectedIndex]&&this.captureDomEvent("input",t,t.options[t.selectedIndex].value)},i.prototype.captureDomEvent=function(t,e,n,r){if(void 0!==n)if(this.scrubTelemetryInputs||"password"===u.getElementType(e))n="[scrubbed]";else if(this.telemetryScrubber){var o=u.describeElement(e);this.telemetryScrubber(o)&&(n="[scrubbed]")}var i=u.elementArrayToString(u.treeToArray(e));this.telemeter.captureDom(t,i,n,r)},i.prototype.deinstrumentNavigation=function(){var t=this._window.chrome,e=t&&t.app&&t.app.runtime,n=!e&&this._window.history&&this._window.history.pushState;n&&o(this.replacements,"navigation")},i.prototype.instrumentNavigation=function(){var t=this._window.chrome,e=t&&t.app&&t.app.runtime,n=!e&&this._window.history&&this._window.history.pushState;if(n){var o=this;r(this._window,"onpopstate",function(t){return function(){var e=o._location.href;o.handleUrlChange(o._lastHref,e),t&&t.apply(this,arguments)}},this.replacements,"navigation"),r(this._window.history,"pushState",function(t){return function(){var e=arguments.length>2?arguments[2]:void 0;return e&&o.handleUrlChange(o._lastHref,e+""),t.apply(this,arguments)}},this.replacements,"navigation")}},i.prototype.handleUrlChange=function(t,e){var n=s.parse(this._location.href),r=s.parse(e),o=s.parse(t);this._lastHref=e,n.protocol===r.protocol&&n.host===r.host&&(e=r.path+(r.hash||"")),n.protocol===o.protocol&&n.host===o.host&&(t=o.path+(o.hash||"")),this.telemeter.captureNavigation(t,e)},i.prototype.deinstrumentConnectivity=function(){("addEventListener"in this._window||"body"in this._document)&&(this._window.addEventListener?this.removeListeners("connectivity"):o(this.replacements,"connectivity"))},i.prototype.instrumentConnectivity=function(){if("addEventListener"in this._window||"body"in this._document)if(this._window.addEventListener)this.addListener("connectivity",this._window,"online",void 0,function(){this.telemeter.captureConnectivityChange("online")}.bind(this),!0),this.addListener("connectivity",this._window,"offline",void 0,function(){this.telemeter.captureConnectivityChange("offline")}.bind(this),!0);else{var t=this;r(this._document.body,"ononline",function(e){return function(){t.telemeter.captureConnectivityChange("online"),e&&e.apply(this,arguments)}},this.replacements,"connectivity"),r(this._document.body,"onoffline",function(e){return function(){t.telemeter.captureConnectivityChange("offline"),e&&e.apply(this,arguments)}},this.replacements,"connectivity")}},i.prototype.addListener=function(t,e,n,r,o,i){e.addEventListener?(e.addEventListener(n,o,i),this.eventRemovers[t].push(function(){e.removeEventListener(n,o,i)})):r&&(e.attachEvent(r,o),this.eventRemovers[t].push(function(){e.detachEvent(r,o)}))},i.prototype.removeListeners=function(t){for(var e;this.eventRemovers[t].length;)(e=this.eventRemovers[t].shift())()},t.exports=i},function(t,e){"use strict";function n(t){return(t.getAttribute("type")||"").toLowerCase()}function r(t,e,r){if(t.tagName.toLowerCase()!==e.toLowerCase())return!1;if(!r)return!0;t=n(t);for(var o=0;o ",i=o.length,a=[],u=0,c=t.length-1;c>=0;c--){if(e=s(t[c]),n=u+a.length*i+e.length,c=r+3){a.unshift("...");break}a.unshift(e),u+=e.length}return a.join(o)}function s(t){if(!t||!t.tagName)return"";var e=[t.tagName];t.id&&e.push("#"+t.id),t.classes&&e.push("."+t.classes.join("."));for(var n=0;n=1&&n>e}function o(t,e,n,r,o,a,s){var u=null;return n&&(n=new Error(n)),n||r||(u=i(t,e,o,a,s)),{error:n,shouldSend:r,payload:u}}function i(t,e,n,r,o){var i,a=e.environment||e.payload&&e.payload.environment;i=o?"item per minute limit reached, ignoring errors until timeout":"maxItems has been hit, ignoring errors until reset.";var s={body:{message:{body:i,extra:{maxItems:n,itemsPerMinute:r}}},language:"javascript",environment:a,notifier:{version:e.notifier&&e.notifier.version||e.version}};return"browser"===t?(s.platform="browser",s.framework="browser-js",s.notifier.name="rollbar-browser-js"):"server"===t?(s.framework=e.framework||"node-js",s.notifier.name=e.notifier.name):"react-native"===t&&(s.framework=e.framework||"react-native",s.notifier.name=e.notifier.name),s}n.globalSettings={startTime:(new Date).getTime(),maxItems:void 0,itemsPerMinute:void 0},n.prototype.configureGlobal=function(t){void 0!==t.startTime&&(n.globalSettings.startTime=t.startTime),void 0!==t.maxItems&&(n.globalSettings.maxItems=t.maxItems),void 0!==t.itemsPerMinute&&(n.globalSettings.itemsPerMinute=t.itemsPerMinute)},n.prototype.shouldSend=function(t,e){e=e||(new Date).getTime(),e-this.startTime>=6e4&&(this.startTime=e,this.perMinCounter=0);var i=n.globalSettings.maxItems,a=n.globalSettings.itemsPerMinute;if(r(t,i,this.counter))return o(this.platform,this.platformOptions,i+" max items reached",!1);if(r(t,a,this.perMinCounter))return o(this.platform,this.platformOptions,a+" items per minute reached",!1);this.counter++,this.perMinCounter++;var s=!r(t,i,this.counter),u=s;return s=s&&!r(t,a,this.perMinCounter),o(this.platform,this.platformOptions,null,s,i,a,u)},n.prototype.setPlatformOptions=function(t,e){this.platform=t,this.platformOptions=e},t.exports=n},function(t,e,n){"use strict";function r(t,e,n,r){this.rateLimiter=t,this.api=e,this.logger=n,this.options=r,this.predicates=[],this.pendingItems=[],this.pendingRequests=[],this.retryQueue=[],this.retryHandle=null,this.waitCallback=null,this.waitIntervalID=null}var o=n(6);r.prototype.configure=function(t){this.api&&this.api.configure(t);var e=this.options;return this.options=o.extend(!0,{},e,t),this},r.prototype.addPredicate=function(t){return o.isFunction(t)&&this.predicates.push(t),this},r.prototype.addPendingItem=function(t){this.pendingItems.push(t)},r.prototype.removePendingItem=function(t){var e=this.pendingItems.indexOf(t);e!==-1&&this.pendingItems.splice(e,1)},r.prototype.addItem=function(t,e,n,r){e&&o.isFunction(e)||(e=function(){});var i=this._applyPredicates(t);if(i.stop)return this.removePendingItem(r),void e(i.err);this._maybeLog(t,n),this.removePendingItem(r),this.pendingRequests.push(t);try{this._makeApiRequest(t,function(n,r){this._dequeuePendingRequest(t),e(n,r)}.bind(this))}catch(n){this._dequeuePendingRequest(t),e(n)}},r.prototype.wait=function(t){o.isFunction(t)&&(this.waitCallback=t,this._maybeCallWait()||(this.waitIntervalID&&(this.waitIntervalID=clearInterval(this.waitIntervalID)),this.waitIntervalID=setInterval(function(){this._maybeCallWait()}.bind(this),500)))},r.prototype._applyPredicates=function(t){for(var e=null,n=0,r=this.predicates.length;ns)?(a=e.path,e.path=a.substring(0,s)+i+"&"+a.substring(s+1)):u!==-1?(a=e.path,e.path=a.substring(0,u)+i+a.substring(u)):e.path=e.path+i}function y(t,e){if(e=e||t.protocol,!e&&t.port&&(80===t.port?e="http:":443===t.port&&(e="https:")),e=e||"https:",!t.hostname)return null;var n=e+"//"+t.hostname;return t.port&&(n=n+":"+t.port),t.path&&(n+=t.path),n}function b(t,e){var n,r;try{n=R.stringify(t)}catch(o){if(e&&a(e))try{n=e(t)}catch(t){r=t}else r=o}return{error:r,value:n}}function w(t){var e,n;try{e=R.parse(t)}catch(t){n=t}return{error:n,value:e}}function _(t,e,n,r,o,i,a,s){var u={url:e||"",line:n,column:r};u.func=s.guessFunctionName(u.url,u.line),u.context=s.gatherContext(u.url,u.line);var c=document&&document.location&&document.location.href,l=window&&window.navigator&&window.navigator.userAgent;return{mode:i,message:o?String(o):t||a,url:c,stack:[u],useragent:l}}function x(t,e){return function(n,r){try{e(n,r)}catch(e){t.error(e)}}}function k(t,e,n,r,o){for(var a,s,u,c,l,p,f=[],h=0,m=t.length;h0&&(u=j(!0,{},u),u.extraArgs=f);var b={message:a,err:s,custom:u,timestamp:N(),callback:c,uuid:d()};return u&&void 0!==u.level&&(b.level=u.level,delete u.level),r&&l&&(b.request=l),o&&(b.lambdaContext=o),b._originalArgs=t,b}function E(t,e){if(t){var n=e.split("."),r=t;try{for(var o=0,i=n.length;o500&&(r=r.substr(0,500)+"...")):"undefined"==typeof r&&(r="undefined"),o.push(r);return o.join(" ")}function N(){return Date.now?+Date.now():+new Date}function C(t,e){if(t&&t.user_ip&&e!==!0){var n=t.user_ip;if(e)try{var r;if(n.indexOf(".")!==-1)r=n.split("."),r.pop(),r.push("0"),n=r.join(".");else if(n.indexOf(":")!==-1){if(r=n.split(":"),r.length>2){var o=r.slice(0,3),i=o[2].indexOf("/");i!==-1&&(o[2]=o[2].substring(0,i));var a="0000:0000:0000:0000:0000";n=o.concat(a).join(":")}}else n=null}catch(t){n=null}else n=null;t.user_ip=n}}var j=n(7),R={},A=!1;r();var q={debug:0,info:1,warning:2,error:3,critical:4},D={strictMode:!1,key:["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],q:{name:"queryKey",parser:/(?:^|&)([^&=]*)=?([^&]*)/g},parser:{strict:/^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,loose:/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/}};t.exports={isType:o,typeName:i,isFunction:a,isNativeFunction:s,isIterable:l,isError:p,extend:j,traverse:f,redact:h,uuid4:d,LEVELS:q,sanitizeUrl:m,addParamsAndAccessTokenToPath:v,formatUrl:y,stringify:b,jsonParse:w,makeUnhandledStackInfo:_,createItem:k,get:E,set:I,scrub:T,formatArgsAsString:L,now:N,filterIp:C}},function(t,e){"use strict";var n=Object.prototype.hasOwnProperty,r=Object.prototype.toString,o=function(t){return"function"==typeof Array.isArray?Array.isArray(t):"[object Array]"===r.call(t)},i=function(t){if(!t||"[object Object]"!==r.call(t))return!1;var e=n.call(t,"constructor"),o=t.constructor&&t.constructor.prototype&&n.call(t.constructor.prototype,"isPrototypeOf");if(t.constructor&&!e&&!o)return!1;var i;for(i in t);return"undefined"==typeof i||n.call(t,i)};t.exports=function t(){var e,n,r,a,s,u,c=arguments[0],l=1,p=arguments.length,f=!1;for("boolean"==typeof c?(f=c,c=arguments[1]||{},l=2):("object"!=typeof c&&"function"!=typeof c||null==c)&&(c={});lr&&(o=this.maxQueueSize-r),this.maxQueueSize=r,this.queue.splice(0,o)},r.prototype.copyEvents=function(){return Array.prototype.slice.call(this.queue,0)},r.prototype.capture=function(t,e,n,r,a){var s={level:o(t,n),type:t,timestamp_ms:a||i.now(),body:e,source:"client"};r&&(s.uuid=r);try{if(i.isFunction(this.options.filterTelemetry)&&this.options.filterTelemetry(s))return!1}catch(t){this.options.filterTelemetry=null}return this.push(s),s},r.prototype.captureEvent=function(t,e,n){return this.capture("manual",t,e,n)},r.prototype.captureError=function(t,e,n,r){var o={message:t.message||String(t)};return t.stack&&(o.stack=t.stack),this.capture("error",o,e,n,r)},r.prototype.captureLog=function(t,e,n,r){return this.capture("log",{message:t},e,n,r)},r.prototype.captureNetwork=function(t,e,n,r){e=e||"xhr",t.subtype=t.subtype||e,r&&(t.request=r);var o=this.levelFromStatus(t.status_code);return this.capture("network",t,o,n)},r.prototype.levelFromStatus=function(t){return t>=200&&t<400?"info":0===t||t>=400?"error":"info"},r.prototype.captureDom=function(t,e,n,r,o){var i={subtype:t,element:e};return void 0!==n&&(i.value=n),void 0!==r&&(i.checked=r),this.capture("dom",i,"info",o)},r.prototype.captureNavigation=function(t,e,n){return this.capture("navigation",{from:t,to:e},"info",n)},r.prototype.captureDomContentLoaded=function(t){return this.capture("navigation",{subtype:"DOMContentLoaded"},"info",void 0,t&&t.getTime())},r.prototype.captureLoad=function(t){return this.capture("navigation",{subtype:"load"},"info",void 0,t&&t.getTime())},r.prototype.captureConnectivityChange=function(t,e){return this.captureNetwork({change:t},"connectivity",e)},r.prototype._captureRollbarItem=function(t){if(this.options.includeItemsInTelemetry)return t.err?this.captureError(t.err,t.level,t.uuid,t.timestamp):t.message?this.captureLog(t.message,t.level,t.uuid,t.timestamp):t.custom?this.capture("log",t.custom,t.level,t.uuid,t.timestamp):void 0},r.prototype.push=function(t){this.queue.push(t),this.queue.length>this.maxQueueSize&&this.queue.shift()},t.exports=r},function(t,e,n){"use strict";function r(t,e,n,r){this.options=t,this.transport=e,this.url=n,this.jsonBackup=r,this.accessToken=t.accessToken,this.transportOptions=o(t,n)}function o(t,e){return a.getTransportFromOptions(t,s,e)}var i=n(6),a=n(12),s={hostname:"api.rollbar.com",path:"/api/1/item/",search:null,version:"1",protocol:"https:",port:443};r.prototype.postItem=function(t,e){var n=a.transportOptions(this.transportOptions,"POST"),r=a.buildPayload(this.accessToken,t,this.jsonBackup);this.transport.post(this.accessToken,n,r,e)},r.prototype.configure=function(t){var e=this.oldOptions;return this.options=i.extend(!0,{},e,t),this.transportOptions=o(this.options,this.url),void 0!==this.options.accessToken&&(this.accessToken=this.options.accessToken),this},t.exports=r},function(t,e,n){"use strict";function r(t,e,n){if(!s.isType(e.context,"string")){var r=s.stringify(e.context,n);r.error?e.context="Error: could not serialize 'context'":e.context=r.value||"",e.context.length>255&&(e.context=e.context.substr(0,255))}return{access_token:t,data:e}}function o(t,e,n){var r=e.hostname,o=e.protocol,i=e.port,a=e.path,s=e.search,u=t.proxy;if(t.endpoint){var c=n.parse(t.endpoint);r=c.hostname,o=c.protocol,i=c.port,a=c.pathname,s=c.search}return{hostname:r,protocol:o,port:i,path:a,search:s,proxy:u}}function i(t,e){var n=t.protocol||"https:",r=t.port||("http:"===n?80:"https:"===n?443:void 0),o=t.hostname,i=t.path;return t.search&&(i+=t.search),t.proxy&&(i=n+"//"+o+i,o=t.proxy.host||t.proxy.hostname,r=t.proxy.port,n=t.proxy.protocol||n),{protocol:n,hostname:o,path:i,port:r,method:e}}function a(t,e){var n=/\/$/.test(t),r=/^\//.test(e);return n&&r?e=e.substring(1):n||r||(e="/"+e),t+e}var s=n(6);t.exports={buildPayload:r,getTransportFromOptions:o,transportOptions:i,appendPathToPath:a}},function(t,e,n){"use strict";function r(){var t=Array.prototype.slice.call(arguments,0);t.unshift("Rollbar:"),a.ieVersion()<=8?console.error(s.formatArgsAsString(t)):console.error.apply(console,t)}function o(){var t=Array.prototype.slice.call(arguments,0);t.unshift("Rollbar:"),a.ieVersion()<=8?console.info(s.formatArgsAsString(t)):console.info.apply(console,t)}function i(){var t=Array.prototype.slice.call(arguments,0);t.unshift("Rollbar:"),a.ieVersion()<=8?console.log(s.formatArgsAsString(t)):console.log.apply(console,t)}n(14);var a=n(15),s=n(6);t.exports={error:r,info:o,log:i}},function(t,e){!function(t){"use strict";t.console||(t.console={});for(var e,n,r=t.console,o=function(){},i=["memory"],a="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(",");e=i.pop();)r[e]||(r[e]={});for(;n=a.pop();)r[n]||(r[n]=o)}("undefined"==typeof window?this:window)},function(t,e){"use strict";function n(){var t;if(!document)return t;for(var e=3,n=document.createElement("div"),r=n.getElementsByTagName("i");n.innerHTML="", +r[0];);return e>4?e:t}var r={ieVersion:n};t.exports=r},function(t,e){"use strict";function n(t,e,n){if(t){var o;"function"==typeof e._rollbarOldOnError?o=e._rollbarOldOnError:t.onerror&&!t.onerror.belongsToShim&&(o=t.onerror,e._rollbarOldOnError=o);var i=function(){var n=Array.prototype.slice.call(arguments,0);r(t,e,o,n)};i.belongsToShim=n,t.onerror=i}}function r(t,e,n,r){t._rollbarWrappedError&&(r[4]||(r[4]=t._rollbarWrappedError),r[5]||(r[5]=t._rollbarWrappedError._rollbarContext),t._rollbarWrappedError=null),e.handleUncaughtException.apply(e,r),n&&n.apply(t,r)}function o(t,e,n){if(t){"function"==typeof t._rollbarURH&&t._rollbarURH.belongsToShim&&t.removeEventListener("unhandledrejection",t._rollbarURH);var r=function(t){var n,r,o;try{n=t.reason}catch(t){n=void 0}try{r=t.promise}catch(t){r="[unhandledrejection] error getting `promise` from event"}try{o=t.detail,!n&&o&&(n=o.reason,r=o.promise)}catch(t){o="[unhandledrejection] error getting `detail` from event"}n||(n="[unhandledrejection] error getting `reason` from event"),e&&e.handleUnhandledRejection&&e.handleUnhandledRejection(n,r)};r.belongsToShim=n,t._rollbarURH=r,t.addEventListener("unhandledrejection",r)}}function i(t,e,n){if(t){var r,o,i="EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload".split(",");for(r=0;r=400&&t.status<600}function c(t,e){var n=new Error(t);return n.code=e||"ENOTFOUND",n}var l=n(6),p=n(13);t.exports={get:r,post:o}},function(t,e){"use strict";function n(t){var e,n,r={protocol:null,auth:null,host:null,path:null,hash:null,href:t,hostname:null,port:null,pathname:null,search:null,query:null};if(e=t.indexOf("//"),e!==-1?(r.protocol=t.substring(0,e),n=e+2):n=0,e=t.indexOf("@",n),e!==-1&&(r.auth=t.substring(n,e),n=e+1),e=t.indexOf("/",n),e===-1){if(e=t.indexOf("?",n),e===-1)return e=t.indexOf("#",n),e===-1?r.host=t.substring(n):(r.host=t.substring(n,e),r.hash=t.substring(e)),r.hostname=r.host.split(":")[0],r.port=r.host.split(":")[1],r.port&&(r.port=parseInt(r.port,10)),r;r.host=t.substring(n,e),r.hostname=r.host.split(":")[0],r.port=r.host.split(":")[1],r.port&&(r.port=parseInt(r.port,10)),n=e}else r.host=t.substring(n,e),r.hostname=r.host.split(":")[0],r.port=r.host.split(":")[1],r.port&&(r.port=parseInt(r.port,10)),n=e;if(e=t.indexOf("#",n),e===-1?r.path=t.substring(n):(r.path=t.substring(n,e),r.hash=t.substring(e)),r.path){var o=r.path.split("?");r.pathname=o[0],r.query=o[1],r.search=r.query?"?"+r.query:null}return r}t.exports={parse:n}},function(t,e,n){"use strict";function r(t,e,n){if(t.data=t.data||{},t.err)try{t.stackInfo=t.err._savedStackTrace||d.parse(t.err)}catch(e){m.error("Error while parsing the error object.",e),t.message=t.err.message||t.err.description||t.message||String(t.err),delete t.err}n(null,t)}function o(t,e,n){t.message||t.stackInfo||t.custom||n(new Error("No message, stack info, or custom data"),null),n(null,t)}function i(t,e,n){var r=e.payload&&e.payload.environment||e.environment;t.data=h.extend(!0,{},t.data,{environment:r,level:t.level,endpoint:e.endpoint,platform:"browser",framework:"browser-js",language:"javascript",server:{},uuid:t.uuid,notifier:{name:"rollbar-browser-js",version:e.version}}),n(null,t)}function a(t){return function(e,n,r){if(!t||!t.location)return r(null,e);var o="$remote_ip";n.captureIp?n.captureIp!==!0&&(o+="_anonymize"):o=null,h.set(e,"data.request",{url:t.location.href,query_string:t.location.search,user_ip:o}),r(null,e)}}function s(t){return function(e,n,r){if(!t)return r(null,e);var o=t.navigator||{},i=t.screen||{};h.set(e,"data.client",{runtime_ms:e.timestamp-t._rollbarStartTime,timestamp:Math.round(e.timestamp/1e3),javascript:{browser:o.userAgent,language:o.language,cookie_enabled:o.cookieEnabled,screen:{width:i.width,height:i.height}}}),r(null,e)}}function u(t){return function(e,n,r){if(!t||!t.navigator)return r(null,e);for(var o,i=[],a=t.navigator.plugins||[],s=0,u=a.length;s-1&&(e=e.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var n=e.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),r=this.extractLocation(n.pop()),o=n.join(" ")||void 0,i="eval"===r[0]?void 0:r[0];return new t(o,void 0,i,r[1],r[2],e)},this)},parseFFOrSafari:function(r){var o=n(r.stack.split("\n"),function(t){return!t.match(i)},this);return e(o,function(e){if(e.indexOf(" > eval")>-1&&(e=e.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),e.indexOf("@")===-1&&e.indexOf(":")===-1)return new t(e);var n=e.split("@"),r=this.extractLocation(n.pop()),o=n.shift()||void 0;return new t(o,void 0,r[0],r[1],r[2],e)},this)},parseOpera:function(t){return!t.stacktrace||t.message.indexOf("\n")>-1&&t.message.split("\n").length>t.stacktrace.split("\n").length?this.parseOpera9(t):t.stack?this.parseOpera11(t):this.parseOpera10(t)},parseOpera9:function(e){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=e.message.split("\n"),o=[],i=2,a=r.length;i/,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(n=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new t(a,s,o[0],o[1],o[2],e)},this)}}})},function(t,e,n){var r,o,i;!function(n,a){"use strict";o=[],r=a,i="function"==typeof r?r.apply(e,o):r,!(void 0!==i&&(t.exports=i))}(this,function(){"use strict";function t(t){return!isNaN(parseFloat(t))&&isFinite(t)}function e(t,e,n,r,o,i){void 0!==t&&this.setFunctionName(t),void 0!==e&&this.setArgs(e),void 0!==n&&this.setFileName(n),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return e.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(t){this.functionName=String(t)},getArgs:function(){return this.args},setArgs:function(t){if("[object Array]"!==Object.prototype.toString.call(t))throw new TypeError("Args must be an Array");this.args=t},getFileName:function(){return this.fileName},setFileName:function(t){this.fileName=String(t)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(e){if(!t(e))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(e)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(e){if(!t(e))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(e)},getSource:function(){return this.source},setSource:function(t){this.source=String(t)},toString:function(){var e=this.getFunctionName()||"{anonymous}",n="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=t(this.getLineNumber())?":"+this.getLineNumber():"",i=t(this.getColumnNumber())?":"+this.getColumnNumber():"";return e+n+r+o+i}},e})},function(t,e,n){"use strict";function r(t,e,n){var r=e.payload||{};r.body&&delete r.body;var o=u.extend(!0,{},t.data,r);t._isUncaught&&(o._isUncaught=!0),t._originalArgs&&(o._originalArgs=t._originalArgs),n(null,o)}function o(t,e,n){t.telemetryEvents&&u.set(t,"data.body.telemetry",t.telemetryEvents),n(null,t)}function i(t,e,n){if(!t.message)return void n(null,t);var r="data.body.trace_chain.0",o=u.get(t,r);if(o||(r="data.body.trace",o=u.get(t,r)),o){if(!o.exception||!o.exception.description)return u.set(t,r+".exception.description",t.message),void n(null,t);var i=u.get(t,r+".extra")||{},a=u.extend(!0,{},i,{message:t.message});u.set(t,r+".extra",a)}n(null,t)}function a(t){return function(e,n,r){var o=u.extend(!0,{},e);try{u.isFunction(n.transform)&&n.transform(o.data)}catch(o){return n.transform=null,t.error("Error while calling custom transform() function. Removing custom transform().",o),void r(null,e)}r(null,o)}}function s(t,e,n){if(!e.sendConfig)return n(null,t);var r="_rollbarConfig",o=u.get(t,"data.custom")||{};o[r]=e,t.data.custom=o,n(null,t)}var u=n(6);t.exports={itemToPayload:r,addTelemetryData:o,addMessageWithError:i,userTransform:a,addConfigToPayload:s}},function(t,e,n){"use strict";function r(t,e){return!o.get(e,"plugins.jquery.ignoreAjaxErrors")||!o.get(t,"body.message.extra.isAjax")}var o=n(6);t.exports={checkIgnore:r}},function(t,e,n){"use strict";function r(t,e){var n=t.level,r=c.LEVELS[n]||0,o=e.reportLevel,i=c.LEVELS[o]||0;return!(r=0&&t.options[t.selectedIndex]&&this.captureDomEvent("input",t,t.options[t.selectedIndex].value)},i.prototype.captureDomEvent=function(t,e,n,r){if(void 0!==n)if(this.scrubTelemetryInputs||"password"===u.getElementType(e))n="[scrubbed]";else if(this.telemetryScrubber){var o=u.describeElement(e);this.telemetryScrubber(o)&&(n="[scrubbed]")}var i=u.elementArrayToString(u.treeToArray(e));this.telemeter.captureDom(t,i,n,r)},i.prototype.deinstrumentNavigation=function(){var t=this._window.chrome,e=t&&t.app&&t.app.runtime,n=!e&&this._window.history&&this._window.history.pushState;n&&o(this.replacements,"navigation")},i.prototype.instrumentNavigation=function(){var t=this._window.chrome,e=t&&t.app&&t.app.runtime,n=!e&&this._window.history&&this._window.history.pushState;if(n){var o=this;r(this._window,"onpopstate",function(t){return function(){var e=o._location.href;o.handleUrlChange(o._lastHref,e),t&&t.apply(this,arguments)}},this.replacements,"navigation"),r(this._window.history,"pushState",function(t){return function(){var e=arguments.length>2?arguments[2]:void 0;return e&&o.handleUrlChange(o._lastHref,e+""),t.apply(this,arguments)}},this.replacements,"navigation")}},i.prototype.handleUrlChange=function(t,e){var n=s.parse(this._location.href),r=s.parse(e),o=s.parse(t);this._lastHref=e,n.protocol===r.protocol&&n.host===r.host&&(e=r.path+(r.hash||"")),n.protocol===o.protocol&&n.host===o.host&&(t=o.path+(o.hash||"")),this.telemeter.captureNavigation(t,e)},i.prototype.deinstrumentConnectivity=function(){("addEventListener"in this._window||"body"in this._document)&&(this._window.addEventListener?this.removeListeners("connectivity"):o(this.replacements,"connectivity"))},i.prototype.instrumentConnectivity=function(){if("addEventListener"in this._window||"body"in this._document)if(this._window.addEventListener)this.addListener("connectivity",this._window,"online",void 0,function(){this.telemeter.captureConnectivityChange("online")}.bind(this),!0),this.addListener("connectivity",this._window,"offline",void 0,function(){this.telemeter.captureConnectivityChange("offline")}.bind(this),!0);else{var t=this;r(this._document.body,"ononline",function(e){return function(){t.telemeter.captureConnectivityChange("online"),e&&e.apply(this,arguments)}},this.replacements,"connectivity"),r(this._document.body,"onoffline",function(e){return function(){t.telemeter.captureConnectivityChange("offline"),e&&e.apply(this,arguments)}},this.replacements,"connectivity")}},i.prototype.addListener=function(t,e,n,r,o,i){e.addEventListener?(e.addEventListener(n,o,i),this.eventRemovers[t].push(function(){e.removeEventListener(n,o,i)})):r&&(e.attachEvent(r,o),this.eventRemovers[t].push(function(){e.detachEvent(r,o)}))},i.prototype.removeListeners=function(t){for(var e;this.eventRemovers[t].length;)(e=this.eventRemovers[t].shift())()},t.exports=i},function(t,e){"use strict";function n(t){return(t.getAttribute("type")||"").toLowerCase()}function r(t,e,r){if(t.tagName.toLowerCase()!==e.toLowerCase())return!1;if(!r)return!0;t=n(t);for(var o=0;o ",i=o.length,a=[],u=0,c=t.length-1;c>=0;c--){if(e=s(t[c]),n=u+a.length*i+e.length,c=r+3){a.unshift("...");break}a.unshift(e),u+=e.length}return a.join(o)}function s(t){if(!t||!t.tagName)return"";var e=[t.tagName];t.id&&e.push("#"+t.id),t.classes&&e.push("."+t.classes.join("."));for(var n=0;n= 60000) {\n\t this.startTime = now;\n\t this.perMinCounter = 0;\n\t }\n\t\n\t var globalRateLimit = RateLimiter.globalSettings.maxItems;\n\t var globalRateLimitPerMin = RateLimiter.globalSettings.itemsPerMinute;\n\t\n\t if (checkRate(item, globalRateLimit, this.counter)) {\n\t return shouldSendValue(this.platform, this.platformOptions, globalRateLimit + ' max items reached', false);\n\t } else if (checkRate(item, globalRateLimitPerMin, this.perMinCounter)) {\n\t return shouldSendValue(this.platform, this.platformOptions, globalRateLimitPerMin + ' items per minute reached', false);\n\t }\n\t this.counter++;\n\t this.perMinCounter++;\n\t\n\t var shouldSend = !checkRate(item, globalRateLimit, this.counter);\n\t var perMinute = shouldSend;\n\t shouldSend = shouldSend && !checkRate(item, globalRateLimitPerMin, this.perMinCounter);\n\t return shouldSendValue(this.platform, this.platformOptions, null, shouldSend, globalRateLimit, globalRateLimitPerMin, perMinute);\n\t};\n\t\n\tRateLimiter.prototype.setPlatformOptions = function(platform, options) {\n\t this.platform = platform;\n\t this.platformOptions = options;\n\t};\n\t\n\t/* Helpers */\n\t\n\tfunction checkRate(item, limit, counter) {\n\t return !item.ignoreRateLimit && limit >= 1 && counter > limit;\n\t}\n\t\n\tfunction shouldSendValue(platform, options, error, shouldSend, globalRateLimit, limitPerMin, perMinute) {\n\t var payload = null;\n\t if (error) {\n\t error = new Error(error);\n\t }\n\t if (!error && !shouldSend) {\n\t payload = rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute);\n\t }\n\t return {error: error, shouldSend: shouldSend, payload: payload};\n\t}\n\t\n\tfunction rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute) {\n\t var environment = options.environment || (options.payload && options.payload.environment);\n\t var msg;\n\t if (perMinute) {\n\t msg = 'item per minute limit reached, ignoring errors until timeout';\n\t } else {\n\t msg = 'maxItems has been hit, ignoring errors until reset.';\n\t }\n\t var item = {\n\t body: {\n\t message: {\n\t body: msg,\n\t extra: {\n\t maxItems: globalRateLimit,\n\t itemsPerMinute: limitPerMin\n\t }\n\t }\n\t },\n\t language: 'javascript',\n\t environment: environment,\n\t notifier: {\n\t version: (options.notifier && options.notifier.version) || options.version\n\t }\n\t };\n\t if (platform === 'browser') {\n\t item.platform = 'browser';\n\t item.framework = 'browser-js';\n\t item.notifier.name = 'rollbar-browser-js';\n\t } else if (platform === 'server') {\n\t item.framework = options.framework || 'node-js';\n\t item.notifier.name = options.notifier.name;\n\t } else if (platform === 'react-native') {\n\t item.framework = options.framework || 'react-native';\n\t item.notifier.name = options.notifier.name;\n\t }\n\t return item;\n\t}\n\t\n\tmodule.exports = RateLimiter;\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\t\n\t/*\n\t * Queue - an object which handles which handles a queue of items to be sent to Rollbar.\n\t * This object handles rate limiting via a passed in rate limiter, retries based on connection\n\t * errors, and filtering of items based on a set of configurable predicates. The communication to\n\t * the backend is performed via a given API object.\n\t *\n\t * @param rateLimiter - An object which conforms to the interface\n\t * rateLimiter.shouldSend(item) -> bool\n\t * @param api - An object which conforms to the interface\n\t * api.postItem(payload, function(err, response))\n\t * @param logger - An object used to log verbose messages if desired\n\t * @param options - see Queue.prototype.configure\n\t */\n\tfunction Queue(rateLimiter, api, logger, options) {\n\t this.rateLimiter = rateLimiter;\n\t this.api = api;\n\t this.logger = logger;\n\t this.options = options;\n\t this.predicates = [];\n\t this.pendingItems = [];\n\t this.pendingRequests = [];\n\t this.retryQueue = [];\n\t this.retryHandle = null;\n\t this.waitCallback = null;\n\t this.waitIntervalID = null;\n\t}\n\t\n\t/*\n\t * configure - updates the options this queue uses\n\t *\n\t * @param options\n\t */\n\tQueue.prototype.configure = function(options) {\n\t this.api && this.api.configure(options);\n\t var oldOptions = this.options;\n\t this.options = _.extend(true, {}, oldOptions, options);\n\t return this;\n\t};\n\t\n\t/*\n\t * addPredicate - adds a predicate to the end of the list of predicates for this queue\n\t *\n\t * @param predicate - function(item, options) -> (bool|{err: Error})\n\t * Returning true means that this predicate passes and the item is okay to go on the queue\n\t * Returning false means do not add the item to the queue, but it is not an error\n\t * Returning {err: Error} means do not add the item to the queue, and the given error explains why\n\t * Returning {err: undefined} is equivalent to returning true but don't do that\n\t */\n\tQueue.prototype.addPredicate = function(predicate) {\n\t if (_.isFunction(predicate)) {\n\t this.predicates.push(predicate);\n\t }\n\t return this;\n\t};\n\t\n\tQueue.prototype.addPendingItem = function(item) {\n\t this.pendingItems.push(item);\n\t};\n\t\n\tQueue.prototype.removePendingItem = function(item) {\n\t var idx = this.pendingItems.indexOf(item);\n\t if (idx !== -1) {\n\t this.pendingItems.splice(idx, 1);\n\t }\n\t};\n\t\n\t/*\n\t * addItem - Send an item to the Rollbar API if all of the predicates are satisfied\n\t *\n\t * @param item - The payload to send to the backend\n\t * @param callback - function(error, repsonse) which will be called with the response from the API\n\t * in the case of a success, otherwise response will be null and error will have a value. If both\n\t * error and response are null then the item was stopped by a predicate which did not consider this\n\t * to be an error condition, but nonetheless did not send the item to the API.\n\t * @param originalError - The original error before any transformations that is to be logged if any\n\t */\n\tQueue.prototype.addItem = function(item, callback, originalError, originalItem) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() { return; };\n\t }\n\t var predicateResult = this._applyPredicates(item);\n\t if (predicateResult.stop) {\n\t this.removePendingItem(originalItem);\n\t callback(predicateResult.err);\n\t return;\n\t }\n\t this._maybeLog(item, originalError);\n\t this.removePendingItem(originalItem);\n\t this.pendingRequests.push(item);\n\t try {\n\t this._makeApiRequest(item, function(err, resp) {\n\t this._dequeuePendingRequest(item);\n\t callback(err, resp);\n\t }.bind(this));\n\t } catch (e) {\n\t this._dequeuePendingRequest(item);\n\t callback(e);\n\t }\n\t};\n\t\n\t/*\n\t * wait - Stop any further errors from being added to the queue, and get called back when all items\n\t * currently processing have finished sending to the backend.\n\t *\n\t * @param callback - function() called when all pending items have been sent\n\t */\n\tQueue.prototype.wait = function(callback) {\n\t if (!_.isFunction(callback)) {\n\t return;\n\t }\n\t this.waitCallback = callback;\n\t if (this._maybeCallWait()) {\n\t return;\n\t }\n\t if (this.waitIntervalID) {\n\t this.waitIntervalID = clearInterval(this.waitIntervalID);\n\t }\n\t this.waitIntervalID = setInterval(function() {\n\t this._maybeCallWait();\n\t }.bind(this), 500);\n\t};\n\t\n\t/* _applyPredicates - Sequentially applies the predicates that have been added to the queue to the\n\t * given item with the currently configured options.\n\t *\n\t * @param item - An item in the queue\n\t * @returns {stop: bool, err: (Error|null)} - stop being true means do not add item to the queue,\n\t * the error value should be passed up to a callbak if we are stopping.\n\t */\n\tQueue.prototype._applyPredicates = function(item) {\n\t var p = null;\n\t for (var i = 0, len = this.predicates.length; i < len; i++) {\n\t p = this.predicates[i](item, this.options);\n\t if (!p || p.err !== undefined) {\n\t return {stop: true, err: p.err};\n\t }\n\t }\n\t return {stop: false, err: null};\n\t};\n\t\n\t/*\n\t * _makeApiRequest - Send an item to Rollbar, callback when done, if there is an error make an\n\t * effort to retry if we are configured to do so.\n\t *\n\t * @param item - an item ready to send to the backend\n\t * @param callback - function(err, response)\n\t */\n\tQueue.prototype._makeApiRequest = function(item, callback) {\n\t var rateLimitResponse = this.rateLimiter.shouldSend(item);\n\t if (rateLimitResponse.shouldSend) {\n\t this.api.postItem(item, function(err, resp) {\n\t if (err) {\n\t this._maybeRetry(err, item, callback);\n\t } else {\n\t callback(err, resp);\n\t }\n\t }.bind(this));\n\t } else if (rateLimitResponse.error) {\n\t callback(rateLimitResponse.error);\n\t } else {\n\t this.api.postItem(rateLimitResponse.payload, callback);\n\t }\n\t};\n\t\n\t// These are errors basically mean there is no internet connection\n\tvar RETRIABLE_ERRORS = ['ECONNRESET', 'ENOTFOUND', 'ESOCKETTIMEDOUT', 'ETIMEDOUT', 'ECONNREFUSED', 'EHOSTUNREACH', 'EPIPE', 'EAI_AGAIN'];\n\t\n\t/*\n\t * _maybeRetry - Given the error returned by the API, decide if we should retry or just callback\n\t * with the error.\n\t *\n\t * @param err - an error returned by the API transport\n\t * @param item - the item that was trying to be sent when this error occured\n\t * @param callback - function(err, response)\n\t */\n\tQueue.prototype._maybeRetry = function(err, item, callback) {\n\t var shouldRetry = false;\n\t if (this.options.retryInterval) {\n\t for (var i = 0, len = RETRIABLE_ERRORS.length; i < len; i++) {\n\t if (err.code === RETRIABLE_ERRORS[i]) {\n\t shouldRetry = true;\n\t break;\n\t }\n\t }\n\t }\n\t if (shouldRetry) {\n\t this._retryApiRequest(item, callback);\n\t } else {\n\t callback(err);\n\t }\n\t};\n\t\n\t/*\n\t * _retryApiRequest - Add an item and a callback to a queue and possibly start a timer to process\n\t * that queue based on the retryInterval in the options for this queue.\n\t *\n\t * @param item - an item that failed to send due to an error we deem retriable\n\t * @param callback - function(err, response)\n\t */\n\tQueue.prototype._retryApiRequest = function(item, callback) {\n\t this.retryQueue.push({item: item, callback: callback});\n\t\n\t if (!this.retryHandle) {\n\t this.retryHandle = setInterval(function() {\n\t while (this.retryQueue.length) {\n\t var retryObject = this.retryQueue.shift();\n\t this._makeApiRequest(retryObject.item, retryObject.callback);\n\t }\n\t }.bind(this), this.options.retryInterval);\n\t }\n\t};\n\t\n\t/*\n\t * _dequeuePendingRequest - Removes the item from the pending request queue, this queue is used to\n\t * enable to functionality of providing a callback that clients can pass to `wait` to be notified\n\t * when the pending request queue has been emptied. This must be called when the API finishes\n\t * processing this item. If a `wait` callback is configured, it is called by this function.\n\t *\n\t * @param item - the item previously added to the pending request queue\n\t */\n\tQueue.prototype._dequeuePendingRequest = function(item) {\n\t var idx = this.pendingRequests.indexOf(item);\n\t if (idx !== -1) {\n\t this.pendingRequests.splice(idx, 1);\n\t this._maybeCallWait();\n\t }\n\t};\n\t\n\tQueue.prototype._maybeLog = function(data, originalError) {\n\t if (this.logger && this.options.verbose) {\n\t var message = originalError;\n\t message = message || _.get(data, 'body.trace.exception.message');\n\t message = message || _.get(data, 'body.trace_chain.0.exception.message');\n\t if (message) {\n\t this.logger.error(message);\n\t return;\n\t }\n\t message = _.get(data, 'body.message.body');\n\t if (message) {\n\t this.logger.log(message);\n\t }\n\t }\n\t};\n\t\n\tQueue.prototype._maybeCallWait = function() {\n\t if (_.isFunction(this.waitCallback) && this.pendingItems.length === 0 && this.pendingRequests.length === 0) {\n\t if (this.waitIntervalID) {\n\t this.waitIntervalID = clearInterval(this.waitIntervalID);\n\t }\n\t this.waitCallback();\n\t return true;\n\t }\n\t return false;\n\t};\n\t\n\tmodule.exports = Queue;\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar extend = __webpack_require__(7);\n\t\n\tvar RollbarJSON = {};\n\tvar __initRollbarJSON = false;\n\tfunction setupJSON() {\n\t if (__initRollbarJSON) {\n\t return;\n\t }\n\t __initRollbarJSON = true;\n\t\n\t if (isDefined(JSON)) {\n\t if (isNativeFunction(JSON.stringify)) {\n\t RollbarJSON.stringify = JSON.stringify;\n\t }\n\t if (isNativeFunction(JSON.parse)) {\n\t RollbarJSON.parse = JSON.parse;\n\t }\n\t }\n\t if (!isFunction(RollbarJSON.stringify) || !isFunction(RollbarJSON.parse)) {\n\t var setupCustomJSON = __webpack_require__(8);\n\t setupCustomJSON(RollbarJSON);\n\t }\n\t}\n\tsetupJSON();\n\t\n\t/*\n\t * isType - Given a Javascript value and a string, returns true if the type of the value matches the\n\t * given string.\n\t *\n\t * @param x - any value\n\t * @param t - a lowercase string containing one of the following type names:\n\t * - undefined\n\t * - null\n\t * - error\n\t * - number\n\t * - boolean\n\t * - string\n\t * - symbol\n\t * - function\n\t * - object\n\t * - array\n\t * @returns true if x is of type t, otherwise false\n\t */\n\tfunction isType(x, t) {\n\t return t === typeName(x);\n\t}\n\t\n\t/*\n\t * typeName - Given a Javascript value, returns the type of the object as a string\n\t */\n\tfunction typeName(x) {\n\t var name = typeof x;\n\t if (name !== 'object') {\n\t return name;\n\t }\n\t if (!x) {\n\t return 'null';\n\t }\n\t if (x instanceof Error) {\n\t return 'error';\n\t }\n\t return ({}).toString.call(x).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n\t}\n\t\n\t/* isFunction - a convenience function for checking if a value is a function\n\t *\n\t * @param f - any value\n\t * @returns true if f is a function, otherwise false\n\t */\n\tfunction isFunction(f) {\n\t return isType(f, 'function');\n\t}\n\t\n\t/* isNativeFunction - a convenience function for checking if a value is a native JS function\n\t *\n\t * @param f - any value\n\t * @returns true if f is a native JS function, otherwise false\n\t */\n\tfunction isNativeFunction(f) {\n\t var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\t var funcMatchString = Function.prototype.toString.call(Object.prototype.hasOwnProperty)\n\t .replace(reRegExpChar, '\\\\$&')\n\t .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?');\n\t var reIsNative = RegExp('^' + funcMatchString + '$');\n\t return isObject(f) && reIsNative.test(f);\n\t}\n\t\n\t/* isObject - Checks if the argument is an object\n\t *\n\t * @param value - any value\n\t * @returns true is value is an object function is an object)\n\t*/\n\tfunction isObject(value) {\n\t var type = typeof value;\n\t return value != null && (type == 'object' || type == 'function');\n\t}\n\t\n\t/*\n\t * isDefined - a convenience function for checking if a value is not equal to undefined\n\t *\n\t * @param u - any value\n\t * @returns true if u is anything other than undefined\n\t */\n\tfunction isDefined(u) {\n\t return !isType(u, 'undefined');\n\t}\n\t\n\t/*\n\t * isIterable - convenience function for checking if a value can be iterated, essentially\n\t * whether it is an object or an array.\n\t *\n\t * @param i - any value\n\t * @returns true if i is an object or an array as determined by `typeName`\n\t */\n\tfunction isIterable(i) {\n\t var type = typeName(i);\n\t return (type === 'object' || type === 'array');\n\t}\n\t\n\t/*\n\t * isError - convenience function for checking if a value is of an error type\n\t *\n\t * @param e - any value\n\t * @returns true if e is an error\n\t */\n\tfunction isError(e) {\n\t return isType(e, 'error');\n\t}\n\t\n\tfunction traverse(obj, func, seen) {\n\t var k, v, i;\n\t var isObj = isType(obj, 'object');\n\t var isArray = isType(obj, 'array');\n\t var keys = [];\n\t\n\t if (isObj && seen.indexOf(obj) !== -1) {\n\t return obj;\n\t }\n\t seen.push(obj);\n\t\n\t if (isObj) {\n\t for (k in obj) {\n\t if (Object.prototype.hasOwnProperty.call(obj, k)) {\n\t keys.push(k);\n\t }\n\t }\n\t } else if (isArray) {\n\t for (i = 0; i < obj.length; ++i) {\n\t keys.push(i);\n\t }\n\t }\n\t\n\t var result = isObj ? {} : [];\n\t for (i = 0; i < keys.length; ++i) {\n\t k = keys[i];\n\t v = obj[k];\n\t result[k] = func(k, v, seen);\n\t }\n\t\n\t return (keys.length != 0) ? result : obj;\n\t}\n\t\n\tfunction redact() {\n\t return '********';\n\t}\n\t\n\t// from http://stackoverflow.com/a/8809472/1138191\n\tfunction uuid4() {\n\t var d = now();\n\t var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n\t var r = (d + Math.random() * 16) % 16 | 0;\n\t d = Math.floor(d / 16);\n\t return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16);\n\t });\n\t return uuid;\n\t}\n\t\n\tvar LEVELS = {\n\t debug: 0,\n\t info: 1,\n\t warning: 2,\n\t error: 3,\n\t critical: 4\n\t};\n\t\n\tfunction sanitizeUrl(url) {\n\t var baseUrlParts = parseUri(url);\n\t // remove a trailing # if there is no anchor\n\t if (baseUrlParts.anchor === '') {\n\t baseUrlParts.source = baseUrlParts.source.replace('#', '');\n\t }\n\t\n\t url = baseUrlParts.source.replace('?' + baseUrlParts.query, '');\n\t return url;\n\t}\n\t\n\tvar parseUriOptions = {\n\t strictMode: false,\n\t key: [\n\t 'source',\n\t 'protocol',\n\t 'authority',\n\t 'userInfo',\n\t 'user',\n\t 'password',\n\t 'host',\n\t 'port',\n\t 'relative',\n\t 'path',\n\t 'directory',\n\t 'file',\n\t 'query',\n\t 'anchor'\n\t ],\n\t q: {\n\t name: 'queryKey',\n\t parser: /(?:^|&)([^&=]*)=?([^&]*)/g\n\t },\n\t parser: {\n\t strict: /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,\n\t loose: /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/\n\t }\n\t};\n\t\n\tfunction parseUri(str) {\n\t if (!isType(str, 'string')) {\n\t throw new Error('received invalid input');\n\t }\n\t\n\t var o = parseUriOptions;\n\t var m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str);\n\t var uri = {};\n\t var i = o.key.length;\n\t\n\t while (i--) {\n\t uri[o.key[i]] = m[i] || '';\n\t }\n\t\n\t uri[o.q.name] = {};\n\t uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {\n\t if ($1) {\n\t uri[o.q.name][$1] = $2;\n\t }\n\t });\n\t\n\t return uri;\n\t}\n\t\n\tfunction addParamsAndAccessTokenToPath(accessToken, options, params) {\n\t params = params || {};\n\t params.access_token = accessToken;\n\t var paramsArray = [];\n\t var k;\n\t for (k in params) {\n\t if (Object.prototype.hasOwnProperty.call(params, k)) {\n\t paramsArray.push([k, params[k]].join('='));\n\t }\n\t }\n\t var query = '?' + paramsArray.sort().join('&');\n\t\n\t options = options || {};\n\t options.path = options.path || '';\n\t var qs = options.path.indexOf('?');\n\t var h = options.path.indexOf('#');\n\t var p;\n\t if (qs !== -1 && (h === -1 || h > qs)) {\n\t p = options.path;\n\t options.path = p.substring(0,qs) + query + '&' + p.substring(qs+1);\n\t } else {\n\t if (h !== -1) {\n\t p = options.path;\n\t options.path = p.substring(0,h) + query + p.substring(h);\n\t } else {\n\t options.path = options.path + query;\n\t }\n\t }\n\t}\n\t\n\tfunction formatUrl(u, protocol) {\n\t protocol = protocol || u.protocol;\n\t if (!protocol && u.port) {\n\t if (u.port === 80) {\n\t protocol = 'http:';\n\t } else if (u.port === 443) {\n\t protocol = 'https:';\n\t }\n\t }\n\t protocol = protocol || 'https:';\n\t\n\t if (!u.hostname) {\n\t return null;\n\t }\n\t var result = protocol + '//' + u.hostname;\n\t if (u.port) {\n\t result = result + ':' + u.port;\n\t }\n\t if (u.path) {\n\t result = result + u.path;\n\t }\n\t return result;\n\t}\n\t\n\tfunction stringify(obj, backup) {\n\t var value, error;\n\t try {\n\t value = RollbarJSON.stringify(obj);\n\t } catch (jsonError) {\n\t if (backup && isFunction(backup)) {\n\t try {\n\t value = backup(obj);\n\t } catch (backupError) {\n\t error = backupError;\n\t }\n\t } else {\n\t error = jsonError;\n\t }\n\t }\n\t return {error: error, value: value};\n\t}\n\t\n\tfunction jsonParse(s) {\n\t var value, error;\n\t try {\n\t value = RollbarJSON.parse(s);\n\t } catch (e) {\n\t error = e;\n\t }\n\t return {error: error, value: value};\n\t}\n\t\n\tfunction makeUnhandledStackInfo(\n\t message,\n\t url,\n\t lineno,\n\t colno,\n\t error,\n\t mode,\n\t backupMessage,\n\t errorParser\n\t) {\n\t var location = {\n\t url: url || '',\n\t line: lineno,\n\t column: colno\n\t };\n\t location.func = errorParser.guessFunctionName(location.url, location.line);\n\t location.context = errorParser.gatherContext(location.url, location.line);\n\t var href = document && document.location && document.location.href;\n\t var useragent = window && window.navigator && window.navigator.userAgent;\n\t return {\n\t 'mode': mode,\n\t 'message': error ? String(error) : (message || backupMessage),\n\t 'url': href,\n\t 'stack': [location],\n\t 'useragent': useragent\n\t };\n\t}\n\t\n\tfunction wrapCallback(logger, f) {\n\t return function(err, resp) {\n\t try {\n\t f(err, resp);\n\t } catch (e) {\n\t logger.error(e);\n\t }\n\t };\n\t}\n\t\n\tfunction createItem(args, logger, notifier, requestKeys, lambdaContext) {\n\t var message, err, custom, callback, request;\n\t var arg;\n\t var extraArgs = [];\n\t\n\t for (var i = 0, l = args.length; i < l; ++i) {\n\t arg = args[i];\n\t\n\t var typ = typeName(arg);\n\t switch (typ) {\n\t case 'undefined':\n\t break;\n\t case 'string':\n\t message ? extraArgs.push(arg) : message = arg;\n\t break;\n\t case 'function':\n\t callback = wrapCallback(logger, arg);\n\t break;\n\t case 'date':\n\t extraArgs.push(arg);\n\t break;\n\t case 'error':\n\t case 'domexception':\n\t err ? extraArgs.push(arg) : err = arg;\n\t break;\n\t case 'object':\n\t case 'array':\n\t if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n\t err ? extraArgs.push(arg) : err = arg;\n\t break;\n\t }\n\t if (requestKeys && typ === 'object' && !request) {\n\t for (var j = 0, len = requestKeys.length; j < len; ++j) {\n\t if (arg[requestKeys[j]] !== undefined) {\n\t request = arg;\n\t break;\n\t }\n\t }\n\t if (request) {\n\t break;\n\t }\n\t }\n\t custom ? extraArgs.push(arg) : custom = arg;\n\t break;\n\t default:\n\t if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n\t err ? extraArgs.push(arg) : err = arg;\n\t break;\n\t }\n\t extraArgs.push(arg);\n\t }\n\t }\n\t\n\t if (extraArgs.length > 0) {\n\t // if custom is an array this turns it into an object with integer keys\n\t custom = extend(true, {}, custom);\n\t custom.extraArgs = extraArgs;\n\t }\n\t\n\t var item = {\n\t message: message,\n\t err: err,\n\t custom: custom,\n\t timestamp: now(),\n\t callback: callback,\n\t uuid: uuid4()\n\t };\n\t if (custom && custom.level !== undefined) {\n\t item.level = custom.level;\n\t delete custom.level;\n\t }\n\t if (requestKeys && request) {\n\t item.request = request;\n\t }\n\t if (lambdaContext) {\n\t item.lambdaContext = lambdaContext;\n\t }\n\t item._originalArgs = args;\n\t return item;\n\t}\n\t\n\t/*\n\t * get - given an obj/array and a keypath, return the value at that keypath or\n\t * undefined if not possible.\n\t *\n\t * @param obj - an object or array\n\t * @param path - a string of keys separated by '.' such as 'plugin.jquery.0.message'\n\t * which would correspond to 42 in `{plugin: {jquery: [{message: 42}]}}`\n\t */\n\tfunction get(obj, path) {\n\t if (!obj) {\n\t return undefined;\n\t }\n\t var keys = path.split('.');\n\t var result = obj;\n\t try {\n\t for (var i = 0, len = keys.length; i < len; ++i) {\n\t result = result[keys[i]];\n\t }\n\t } catch (e) {\n\t result = undefined;\n\t }\n\t return result;\n\t}\n\t\n\tfunction set(obj, path, value) {\n\t if (!obj) {\n\t return;\n\t }\n\t var keys = path.split('.');\n\t var len = keys.length;\n\t if (len < 1) {\n\t return;\n\t }\n\t if (len === 1) {\n\t obj[keys[0]] = value;\n\t return;\n\t }\n\t try {\n\t var temp = obj[keys[0]] || {};\n\t var replacement = temp;\n\t for (var i = 1; i < len-1; i++) {\n\t temp[keys[i]] = temp[keys[i]] || {};\n\t temp = temp[keys[i]];\n\t }\n\t temp[keys[len-1]] = value;\n\t obj[keys[0]] = replacement;\n\t } catch (e) {\n\t return;\n\t }\n\t}\n\t\n\tfunction scrub(data, scrubFields) {\n\t scrubFields = scrubFields || [];\n\t var paramRes = _getScrubFieldRegexs(scrubFields);\n\t var queryRes = _getScrubQueryParamRegexs(scrubFields);\n\t\n\t function redactQueryParam(dummy0, paramPart, dummy1, dummy2, dummy3, valPart) {\n\t return paramPart + redact(valPart);\n\t }\n\t\n\t function paramScrubber(v) {\n\t var i;\n\t if (isType(v, 'string')) {\n\t for (i = 0; i < queryRes.length; ++i) {\n\t v = v.replace(queryRes[i], redactQueryParam);\n\t }\n\t }\n\t return v;\n\t }\n\t\n\t function valScrubber(k, v) {\n\t var i;\n\t for (i = 0; i < paramRes.length; ++i) {\n\t if (paramRes[i].test(k)) {\n\t v = redact(v);\n\t break;\n\t }\n\t }\n\t return v;\n\t }\n\t\n\t function scrubber(k, v, seen) {\n\t var tmpV = valScrubber(k, v);\n\t if (tmpV === v) {\n\t if (isType(v, 'object') || isType(v, 'array')) {\n\t return traverse(v, scrubber, seen);\n\t }\n\t return paramScrubber(tmpV);\n\t } else {\n\t return tmpV;\n\t }\n\t }\n\t\n\t return traverse(data, scrubber, []);\n\t}\n\t\n\tfunction _getScrubFieldRegexs(scrubFields) {\n\t var ret = [];\n\t var pat;\n\t for (var i = 0; i < scrubFields.length; ++i) {\n\t pat = '^\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?$';\n\t ret.push(new RegExp(pat, 'i'));\n\t }\n\t return ret;\n\t}\n\t\n\t\n\tfunction _getScrubQueryParamRegexs(scrubFields) {\n\t var ret = [];\n\t var pat;\n\t for (var i = 0; i < scrubFields.length; ++i) {\n\t pat = '\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?';\n\t ret.push(new RegExp('(' + pat + '=)([^&\\\\n]+)', 'igm'));\n\t }\n\t return ret;\n\t}\n\t\n\tfunction formatArgsAsString(args) {\n\t var i, len, arg;\n\t var result = [];\n\t for (i = 0, len = args.length; i < len; i++) {\n\t arg = args[i];\n\t if (typeof arg === 'object') {\n\t arg = stringify(arg);\n\t arg = arg.error || arg.value;\n\t if (arg.length > 500)\n\t arg = arg.substr(0,500)+'...';\n\t } else if (typeof arg === 'undefined') {\n\t arg = 'undefined';\n\t }\n\t result.push(arg);\n\t }\n\t return result.join(' ');\n\t}\n\t\n\tfunction now() {\n\t if (Date.now) {\n\t return +Date.now();\n\t }\n\t return +new Date();\n\t}\n\t\n\tmodule.exports = {\n\t isType: isType,\n\t typeName: typeName,\n\t isFunction: isFunction,\n\t isNativeFunction: isNativeFunction,\n\t isIterable: isIterable,\n\t isError: isError,\n\t extend: extend,\n\t traverse: traverse,\n\t redact: redact,\n\t uuid4: uuid4,\n\t LEVELS: LEVELS,\n\t sanitizeUrl: sanitizeUrl,\n\t addParamsAndAccessTokenToPath: addParamsAndAccessTokenToPath,\n\t formatUrl: formatUrl,\n\t stringify: stringify,\n\t jsonParse: jsonParse,\n\t makeUnhandledStackInfo: makeUnhandledStackInfo,\n\t createItem: createItem,\n\t get: get,\n\t set: set,\n\t scrub: scrub,\n\t formatArgsAsString: formatArgsAsString,\n\t now: now\n\t};\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tvar hasOwn = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\t\n\tvar isArray = function isArray(arr) {\n\t\tif (typeof Array.isArray === 'function') {\n\t\t\treturn Array.isArray(arr);\n\t\t}\n\t\n\t\treturn toStr.call(arr) === '[object Array]';\n\t};\n\t\n\tvar isPlainObject = function isPlainObject(obj) {\n\t\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\t\treturn false;\n\t\t}\n\t\n\t\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\t\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t\t// Not own constructor property must be Object\n\t\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\t\treturn false;\n\t\t}\n\t\n\t\t// Own properties are enumerated firstly, so to speed up,\n\t\t// if last one is own, then all properties are own.\n\t\tvar key;\n\t\tfor (key in obj) {/**/}\n\t\n\t\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n\t};\n\t\n\tmodule.exports = function extend() {\n\t\tvar options, name, src, copy, copyIsArray, clone,\n\t\t\ttarget = arguments[0],\n\t\t\ti = 1,\n\t\t\tlength = arguments.length,\n\t\t\tdeep = false;\n\t\n\t\t// Handle a deep copy situation\n\t\tif (typeof target === 'boolean') {\n\t\t\tdeep = target;\n\t\t\ttarget = arguments[1] || {};\n\t\t\t// skip the boolean and the target\n\t\t\ti = 2;\n\t\t} else if ((typeof target !== 'object' && typeof target !== 'function') || target == null) {\n\t\t\ttarget = {};\n\t\t}\n\t\n\t\tfor (; i < length; ++i) {\n\t\t\toptions = arguments[i];\n\t\t\t// Only deal with non-null/undefined values\n\t\t\tif (options != null) {\n\t\t\t\t// Extend the base object\n\t\t\t\tfor (name in options) {\n\t\t\t\t\tsrc = target[name];\n\t\t\t\t\tcopy = options[name];\n\t\n\t\t\t\t\t// Prevent never-ending loop\n\t\t\t\t\tif (target !== copy) {\n\t\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\t\ttarget[name] = extend(deep, clone, copy);\n\t\n\t\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\t// Return the modified object\n\t\treturn target;\n\t};\n\t\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports) {\n\n\t// json3.js\n\t// 2017-02-21\n\t// Public Domain.\n\t// NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n\t// See http://www.JSON.org/js.html\n\t// This code should be minified before deployment.\n\t// See http://javascript.crockford.com/jsmin.html\n\t\n\t// USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n\t// NOT CONTROL.\n\t\n\t// This file creates a global JSON object containing two methods: stringify\n\t// and parse. This file provides the ES5 JSON capability to ES3 systems.\n\t// If a project might run on IE8 or earlier, then this file should be included.\n\t// This file does nothing on ES5 systems.\n\t\n\t// JSON.stringify(value, replacer, space)\n\t// value any JavaScript value, usually an object or array.\n\t// replacer an optional parameter that determines how object\n\t// values are stringified for objects. It can be a\n\t// function or an array of strings.\n\t// space an optional parameter that specifies the indentation\n\t// of nested structures. If it is omitted, the text will\n\t// be packed without extra whitespace. If it is a number,\n\t// it will specify the number of spaces to indent at each\n\t// level. If it is a string (such as \"\\t\" or \" \"),\n\t// it contains the characters used to indent at each level.\n\t// This method produces a JSON text from a JavaScript value.\n\t// When an object value is found, if the object contains a toJSON\n\t// method, its toJSON method will be called and the result will be\n\t// stringified. A toJSON method does not serialize: it returns the\n\t// value represented by the name/value pair that should be serialized,\n\t// or undefined if nothing should be serialized. The toJSON method\n\t// will be passed the key associated with the value, and this will be\n\t// bound to the value.\n\t\n\t// For example, this would serialize Dates as ISO strings.\n\t\n\t// Date.prototype.toJSON = function (key) {\n\t// function f(n) {\n\t// // Format integers to have at least two digits.\n\t// return (n < 10)\n\t// ? \"0\" + n\n\t// : n;\n\t// }\n\t// return this.getUTCFullYear() + \"-\" +\n\t// f(this.getUTCMonth() + 1) + \"-\" +\n\t// f(this.getUTCDate()) + \"T\" +\n\t// f(this.getUTCHours()) + \":\" +\n\t// f(this.getUTCMinutes()) + \":\" +\n\t// f(this.getUTCSeconds()) + \"Z\";\n\t// };\n\t\n\t// You can provide an optional replacer method. It will be passed the\n\t// key and value of each member, with this bound to the containing\n\t// object. The value that is returned from your method will be\n\t// serialized. If your method returns undefined, then the member will\n\t// be excluded from the serialization.\n\t\n\t// If the replacer parameter is an array of strings, then it will be\n\t// used to select the members to be serialized. It filters the results\n\t// such that only members with keys listed in the replacer array are\n\t// stringified.\n\t\n\t// Values that do not have JSON representations, such as undefined or\n\t// functions, will not be serialized. Such values in objects will be\n\t// dropped; in arrays they will be replaced with null. You can use\n\t// a replacer function to replace those with JSON values.\n\t\n\t// JSON.stringify(undefined) returns undefined.\n\t\n\t// The optional space parameter produces a stringification of the\n\t// value that is filled with line breaks and indentation to make it\n\t// easier to read.\n\t\n\t// If the space parameter is a non-empty string, then that string will\n\t// be used for indentation. If the space parameter is a number, then\n\t// the indentation will be that many spaces.\n\t\n\t// Example:\n\t\n\t// text = JSON.stringify([\"e\", {pluribus: \"unum\"}]);\n\t// // text is '[\"e\",{\"pluribus\":\"unum\"}]'\n\t\n\t// text = JSON.stringify([\"e\", {pluribus: \"unum\"}], null, \"\\t\");\n\t// // text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\n\t\n\t// text = JSON.stringify([new Date()], function (key, value) {\n\t// return this[key] instanceof Date\n\t// ? \"Date(\" + this[key] + \")\"\n\t// : value;\n\t// });\n\t// // text is '[\"Date(---current time---)\"]'\n\t\n\t// JSON.parse(text, reviver)\n\t// This method parses a JSON text to produce an object or array.\n\t// It can throw a SyntaxError exception.\n\t// This has been modified to use JSON-js/json_parse_state.js as the\n\t// parser instead of the one built around eval found in JSON-js/json2.js\n\t\n\t// The optional reviver parameter is a function that can filter and\n\t// transform the results. It receives each of the keys and values,\n\t// and its return value is used instead of the original value.\n\t// If it returns what it received, then the structure is not modified.\n\t// If it returns undefined then the member is deleted.\n\t\n\t// Example:\n\t\n\t// // Parse the text. Values that look like ISO date strings will\n\t// // be converted to Date objects.\n\t\n\t// myData = JSON.parse(text, function (key, value) {\n\t// var a;\n\t// if (typeof value === \"string\") {\n\t// a =\n\t// /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n\t// if (a) {\n\t// return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n\t// +a[5], +a[6]));\n\t// }\n\t// }\n\t// return value;\n\t// });\n\t\n\t// myData = JSON.parse('[\"Date(09/09/2001)\"]', function (key, value) {\n\t// var d;\n\t// if (typeof value === \"string\" &&\n\t// value.slice(0, 5) === \"Date(\" &&\n\t// value.slice(-1) === \")\") {\n\t// d = new Date(value.slice(5, -1));\n\t// if (d) {\n\t// return d;\n\t// }\n\t// }\n\t// return value;\n\t// });\n\t\n\t// This is a reference implementation. You are free to copy, modify, or\n\t// redistribute.\n\t\n\t/*jslint\n\t for, this\n\t */\n\t\n\t/*property\n\t JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\n\t getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\n\t lastIndex, length, parse, prototype, push, replace, slice, stringify,\n\t test, toJSON, toString, valueOf\n\t */\n\t\n\tvar setupCustomJSON = function(JSON) {\n\t\n\t var rx_one = /^[\\],:{}\\s]*$/;\n\t var rx_two = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g;\n\t var rx_three = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\n\t var rx_four = /(?:^|:|,)(?:\\s*\\[)+/g;\n\t var rx_escapable = /[\\\\\"\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\t var rx_dangerous = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\t\n\t function f(n) {\n\t // Format integers to have at least two digits.\n\t return n < 10\n\t ? \"0\" + n\n\t : n;\n\t }\n\t\n\t function this_value() {\n\t return this.valueOf();\n\t }\n\t\n\t if (typeof Date.prototype.toJSON !== \"function\") {\n\t\n\t Date.prototype.toJSON = function () {\n\t\n\t return isFinite(this.valueOf())\n\t ? this.getUTCFullYear() + \"-\" +\n\t f(this.getUTCMonth() + 1) + \"-\" +\n\t f(this.getUTCDate()) + \"T\" +\n\t f(this.getUTCHours()) + \":\" +\n\t f(this.getUTCMinutes()) + \":\" +\n\t f(this.getUTCSeconds()) + \"Z\"\n\t : null;\n\t };\n\t\n\t Boolean.prototype.toJSON = this_value;\n\t Number.prototype.toJSON = this_value;\n\t String.prototype.toJSON = this_value;\n\t }\n\t\n\t var gap;\n\t var indent;\n\t var meta;\n\t var rep;\n\t\n\t\n\t function quote(string) {\n\t\n\t // If the string contains no control characters, no quote characters, and no\n\t // backslash characters, then we can safely slap some quotes around it.\n\t // Otherwise we must also replace the offending characters with safe escape\n\t // sequences.\n\t\n\t rx_escapable.lastIndex = 0;\n\t return rx_escapable.test(string)\n\t ? \"\\\"\" + string.replace(rx_escapable, function (a) {\n\t var c = meta[a];\n\t return typeof c === \"string\"\n\t ? c\n\t : \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n\t }) + \"\\\"\"\n\t : \"\\\"\" + string + \"\\\"\";\n\t }\n\t\n\t\n\t function str(key, holder) {\n\t\n\t // Produce a string from holder[key].\n\t\n\t var i; // The loop counter.\n\t var k; // The member key.\n\t var v; // The member value.\n\t var length;\n\t var mind = gap;\n\t var partial;\n\t var value = holder[key];\n\t\n\t // If the value has a toJSON method, call it to obtain a replacement value.\n\t\n\t if (value && typeof value === \"object\" &&\n\t typeof value.toJSON === \"function\") {\n\t value = value.toJSON(key);\n\t }\n\t\n\t // If we were called with a replacer function, then call the replacer to\n\t // obtain a replacement value.\n\t\n\t if (typeof rep === \"function\") {\n\t value = rep.call(holder, key, value);\n\t }\n\t\n\t // What happens next depends on the value's type.\n\t\n\t switch (typeof value) {\n\t case \"string\":\n\t return quote(value);\n\t\n\t case \"number\":\n\t\n\t // JSON numbers must be finite. Encode non-finite numbers as null.\n\t\n\t return isFinite(value)\n\t ? String(value)\n\t : \"null\";\n\t\n\t case \"boolean\":\n\t case \"null\":\n\t\n\t // If the value is a boolean or null, convert it to a string. Note:\n\t // typeof null does not produce \"null\". The case is included here in\n\t // the remote chance that this gets fixed someday.\n\t\n\t return String(value);\n\t\n\t // If the type is \"object\", we might be dealing with an object or an array or\n\t // null.\n\t\n\t case \"object\":\n\t\n\t // Due to a specification blunder in ECMAScript, typeof null is \"object\",\n\t // so watch out for that case.\n\t\n\t if (!value) {\n\t return \"null\";\n\t }\n\t\n\t // Make an array to hold the partial results of stringifying this object value.\n\t\n\t gap += indent;\n\t partial = [];\n\t\n\t // Is the value an array?\n\t\n\t if (Object.prototype.toString.apply(value) === \"[object Array]\") {\n\t\n\t // The value is an array. Stringify every element. Use null as a placeholder\n\t // for non-JSON values.\n\t\n\t length = value.length;\n\t for (i = 0; i < length; i += 1) {\n\t partial[i] = str(i, value) || \"null\";\n\t }\n\t\n\t // Join all of the elements together, separated with commas, and wrap them in\n\t // brackets.\n\t\n\t v = partial.length === 0\n\t ? \"[]\"\n\t : gap\n\t ? \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\"\n\t : \"[\" + partial.join(\",\") + \"]\";\n\t gap = mind;\n\t return v;\n\t }\n\t\n\t // If the replacer is an array, use it to select the members to be stringified.\n\t\n\t if (rep && typeof rep === \"object\") {\n\t length = rep.length;\n\t for (i = 0; i < length; i += 1) {\n\t if (typeof rep[i] === \"string\") {\n\t k = rep[i];\n\t v = str(k, value);\n\t if (v) {\n\t partial.push(quote(k) + (\n\t gap\n\t ? \": \"\n\t : \":\"\n\t ) + v);\n\t }\n\t }\n\t }\n\t } else {\n\t\n\t // Otherwise, iterate through all of the keys in the object.\n\t\n\t for (k in value) {\n\t if (Object.prototype.hasOwnProperty.call(value, k)) {\n\t v = str(k, value);\n\t if (v) {\n\t partial.push(quote(k) + (\n\t gap\n\t ? \": \"\n\t : \":\"\n\t ) + v);\n\t }\n\t }\n\t }\n\t }\n\t\n\t // Join all of the member texts together, separated with commas,\n\t // and wrap them in braces.\n\t\n\t v = partial.length === 0\n\t ? \"{}\"\n\t : gap\n\t ? \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\"\n\t : \"{\" + partial.join(\",\") + \"}\";\n\t gap = mind;\n\t return v;\n\t }\n\t }\n\t\n\t // If the JSON object does not yet have a stringify method, give it one.\n\t\n\t if (typeof JSON.stringify !== \"function\") {\n\t meta = { // table of character substitutions\n\t \"\\b\": \"\\\\b\",\n\t \"\\t\": \"\\\\t\",\n\t \"\\n\": \"\\\\n\",\n\t \"\\f\": \"\\\\f\",\n\t \"\\r\": \"\\\\r\",\n\t \"\\\"\": \"\\\\\\\"\",\n\t \"\\\\\": \"\\\\\\\\\"\n\t };\n\t JSON.stringify = function (value, replacer, space) {\n\t\n\t // The stringify method takes a value and an optional replacer, and an optional\n\t // space parameter, and returns a JSON text. The replacer can be a function\n\t // that can replace values, or an array of strings that will select the keys.\n\t // A default replacer method can be provided. Use of the space parameter can\n\t // produce text that is more easily readable.\n\t\n\t var i;\n\t gap = \"\";\n\t indent = \"\";\n\t\n\t // If the space parameter is a number, make an indent string containing that\n\t // many spaces.\n\t\n\t if (typeof space === \"number\") {\n\t for (i = 0; i < space; i += 1) {\n\t indent += \" \";\n\t }\n\t\n\t // If the space parameter is a string, it will be used as the indent string.\n\t\n\t } else if (typeof space === \"string\") {\n\t indent = space;\n\t }\n\t\n\t // If there is a replacer, it must be a function or an array.\n\t // Otherwise, throw an error.\n\t\n\t rep = replacer;\n\t if (replacer && typeof replacer !== \"function\" &&\n\t (typeof replacer !== \"object\" ||\n\t typeof replacer.length !== \"number\")) {\n\t throw new Error(\"JSON.stringify\");\n\t }\n\t\n\t // Make a fake root object containing our value under the key of \"\".\n\t // Return the result of stringifying the value.\n\t\n\t return str(\"\", {\"\": value});\n\t };\n\t }\n\t\n\t\n\t // If the JSON object does not yet have a parse method, give it one.\n\t\n\t if (typeof JSON.parse !== \"function\") {\n\t JSON.parse = (function () {\n\t\n\t // This function creates a JSON parse function that uses a state machine rather\n\t // than the dangerous eval function to parse a JSON text.\n\t\n\t var state; // The state of the parser, one of\n\t // 'go' The starting state\n\t // 'ok' The final, accepting state\n\t // 'firstokey' Ready for the first key of the object or\n\t // the closing of an empty object\n\t // 'okey' Ready for the next key of the object\n\t // 'colon' Ready for the colon\n\t // 'ovalue' Ready for the value half of a key/value pair\n\t // 'ocomma' Ready for a comma or closing }\n\t // 'firstavalue' Ready for the first value of an array or\n\t // an empty array\n\t // 'avalue' Ready for the next value of an array\n\t // 'acomma' Ready for a comma or closing ]\n\t var stack; // The stack, for controlling nesting.\n\t var container; // The current container object or array\n\t var key; // The current key\n\t var value; // The current value\n\t var escapes = { // Escapement translation table\n\t \"\\\\\": \"\\\\\",\n\t \"\\\"\": \"\\\"\",\n\t \"/\": \"/\",\n\t \"t\": \"\\t\",\n\t \"n\": \"\\n\",\n\t \"r\": \"\\r\",\n\t \"f\": \"\\f\",\n\t \"b\": \"\\b\"\n\t };\n\t var string = { // The actions for string tokens\n\t go: function () {\n\t state = \"ok\";\n\t },\n\t firstokey: function () {\n\t key = value;\n\t state = \"colon\";\n\t },\n\t okey: function () {\n\t key = value;\n\t state = \"colon\";\n\t },\n\t ovalue: function () {\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t state = \"acomma\";\n\t }\n\t };\n\t var number = { // The actions for number tokens\n\t go: function () {\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t state = \"acomma\";\n\t }\n\t };\n\t var action = {\n\t\n\t // The action table describes the behavior of the machine. It contains an\n\t // object for each token. Each object contains a method that is called when\n\t // a token is matched in a state. An object will lack a method for illegal\n\t // states.\n\t\n\t \"{\": {\n\t go: function () {\n\t stack.push({state: \"ok\"});\n\t container = {};\n\t state = \"firstokey\";\n\t },\n\t ovalue: function () {\n\t stack.push({container: container, state: \"ocomma\", key: key});\n\t container = {};\n\t state = \"firstokey\";\n\t },\n\t firstavalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = {};\n\t state = \"firstokey\";\n\t },\n\t avalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = {};\n\t state = \"firstokey\";\n\t }\n\t },\n\t \"}\": {\n\t firstokey: function () {\n\t var pop = stack.pop();\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t },\n\t ocomma: function () {\n\t var pop = stack.pop();\n\t container[key] = value;\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t }\n\t },\n\t \"[\": {\n\t go: function () {\n\t stack.push({state: \"ok\"});\n\t container = [];\n\t state = \"firstavalue\";\n\t },\n\t ovalue: function () {\n\t stack.push({container: container, state: \"ocomma\", key: key});\n\t container = [];\n\t state = \"firstavalue\";\n\t },\n\t firstavalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = [];\n\t state = \"firstavalue\";\n\t },\n\t avalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = [];\n\t state = \"firstavalue\";\n\t }\n\t },\n\t \"]\": {\n\t firstavalue: function () {\n\t var pop = stack.pop();\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t },\n\t acomma: function () {\n\t var pop = stack.pop();\n\t container.push(value);\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t }\n\t },\n\t \":\": {\n\t colon: function () {\n\t if (Object.hasOwnProperty.call(container, key)) {\n\t throw new SyntaxError(\"Duplicate key '\" + key + \"\\\"\");\n\t }\n\t state = \"ovalue\";\n\t }\n\t },\n\t \",\": {\n\t ocomma: function () {\n\t container[key] = value;\n\t state = \"okey\";\n\t },\n\t acomma: function () {\n\t container.push(value);\n\t state = \"avalue\";\n\t }\n\t },\n\t \"true\": {\n\t go: function () {\n\t value = true;\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t value = true;\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t value = true;\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t value = true;\n\t state = \"acomma\";\n\t }\n\t },\n\t \"false\": {\n\t go: function () {\n\t value = false;\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t value = false;\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t value = false;\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t value = false;\n\t state = \"acomma\";\n\t }\n\t },\n\t \"null\": {\n\t go: function () {\n\t value = null;\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t value = null;\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t value = null;\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t value = null;\n\t state = \"acomma\";\n\t }\n\t }\n\t };\n\t\n\t function debackslashify(text) {\n\t\n\t // Remove and replace any backslash escapement.\n\t\n\t return text.replace(/\\\\(?:u(.{4})|([^u]))/g, function (ignore, b, c) {\n\t return b\n\t ? String.fromCharCode(parseInt(b, 16))\n\t : escapes[c];\n\t });\n\t }\n\t\n\t return function (source, reviver) {\n\t\n\t // A regular expression is used to extract tokens from the JSON text.\n\t // The extraction process is cautious.\n\t\n\t var result;\n\t var tx = /^[\\u0020\\t\\n\\r]*(?:([,:\\[\\]{}]|true|false|null)|(-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)|\"((?:[^\\r\\n\\t\\\\\\\"]|\\\\(?:[\"\\\\\\/trnfb]|u[0-9a-fA-F]{4}))*)\")/;\n\t\n\t // Set the starting state.\n\t\n\t state = \"go\";\n\t\n\t // The stack records the container, key, and state for each object or array\n\t // that contains another object or array while processing nested structures.\n\t\n\t stack = [];\n\t\n\t // If any error occurs, we will catch it and ultimately throw a syntax error.\n\t\n\t try {\n\t\n\t // For each token...\n\t\n\t while (true) {\n\t result = tx.exec(source);\n\t if (!result) {\n\t break;\n\t }\n\t\n\t // result is the result array from matching the tokenizing regular expression.\n\t // result[0] contains everything that matched, including any initial whitespace.\n\t // result[1] contains any punctuation that was matched, or true, false, or null.\n\t // result[2] contains a matched number, still in string form.\n\t // result[3] contains a matched string, without quotes but with escapement.\n\t\n\t if (result[1]) {\n\t\n\t // Token: Execute the action for this state and token.\n\t\n\t action[result[1]][state]();\n\t\n\t } else if (result[2]) {\n\t\n\t // Number token: Convert the number string into a number value and execute\n\t // the action for this state and number.\n\t\n\t value = +result[2];\n\t number[state]();\n\t } else {\n\t\n\t // String token: Replace the escapement sequences and execute the action for\n\t // this state and string.\n\t\n\t value = debackslashify(result[3]);\n\t string[state]();\n\t }\n\t\n\t // Remove the token from the string. The loop will continue as long as there\n\t // are tokens. This is a slow process, but it allows the use of ^ matching,\n\t // which assures that no illegal tokens slip through.\n\t\n\t source = source.slice(result[0].length);\n\t }\n\t\n\t // If we find a state/token combination that is illegal, then the action will\n\t // cause an error. We handle the error by simply changing the state.\n\t\n\t } catch (e) {\n\t state = e;\n\t }\n\t\n\t // The parsing is finished. If we are not in the final \"ok\" state, or if the\n\t // remaining source contains anything except whitespace, then we did not have\n\t //a well-formed JSON text.\n\t\n\t if (state !== \"ok\" || (/[^\\u0020\\t\\n\\r]/.test(source))) {\n\t throw (state instanceof SyntaxError)\n\t ? state\n\t : new SyntaxError(\"JSON\");\n\t }\n\t\n\t // If there is a reviver function, we recursively walk the new structure,\n\t // passing each name/value pair to the reviver function for possible\n\t // transformation, starting with a temporary root object that holds the current\n\t // value in an empty key. If there is not a reviver function, we simply return\n\t // that value.\n\t\n\t return (typeof reviver === \"function\")\n\t ? (function walk(holder, key) {\n\t var k;\n\t var v;\n\t var val = holder[key];\n\t if (val && typeof val === \"object\") {\n\t for (k in value) {\n\t if (Object.prototype.hasOwnProperty.call(val, k)) {\n\t v = walk(val, k);\n\t if (v !== undefined) {\n\t val[k] = v;\n\t } else {\n\t delete val[k];\n\t }\n\t }\n\t }\n\t }\n\t return reviver.call(holder, key, val);\n\t }({\"\": value}, \"\"))\n\t : value;\n\t };\n\t }());\n\t }\n\t}\n\t\n\tmodule.exports = setupCustomJSON;\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\t\n\t/*\n\t * Notifier - the internal object responsible for delegating between the client exposed API, the\n\t * chain of transforms necessary to turn an item into something that can be sent to Rollbar, and the\n\t * queue which handles the communcation with the Rollbar API servers.\n\t *\n\t * @param queue - an object that conforms to the interface: addItem(item, callback)\n\t * @param options - an object representing the options to be set for this notifier, this should have\n\t * any defaults already set by the caller\n\t */\n\tfunction Notifier(queue, options) {\n\t this.queue = queue;\n\t this.options = options;\n\t this.transforms = [];\n\t}\n\t\n\t/*\n\t * configure - updates the options for this notifier with the passed in object\n\t *\n\t * @param options - an object which gets merged with the current options set on this notifier\n\t * @returns this\n\t */\n\tNotifier.prototype.configure = function(options) {\n\t this.queue && this.queue.configure(options);\n\t var oldOptions = this.options;\n\t this.options = _.extend(true, {}, oldOptions, options);\n\t return this;\n\t};\n\t\n\t/*\n\t * addTransform - adds a transform onto the end of the queue of transforms for this notifier\n\t *\n\t * @param transform - a function which takes three arguments:\n\t * * item: An Object representing the data to eventually be sent to Rollbar\n\t * * options: The current value of the options for this notifier\n\t * * callback: function(err: (Null|Error), item: (Null|Object)) the transform must call this\n\t * callback with a null value for error if it wants the processing chain to continue, otherwise\n\t * with an error to terminate the processing. The item should be the updated item after this\n\t * transform is finished modifying it.\n\t */\n\tNotifier.prototype.addTransform = function(transform) {\n\t if (_.isFunction(transform)) {\n\t this.transforms.push(transform);\n\t }\n\t return this;\n\t};\n\t\n\t/*\n\t * log - the internal log function which applies the configured transforms and then pushes onto the\n\t * queue to be sent to the backend.\n\t *\n\t * @param item - An object with the following structure:\n\t * message [String] - An optional string to be sent to rollbar\n\t * error [Error] - An optional error\n\t *\n\t * @param callback - A function of type function(err, resp) which will be called with exactly one\n\t * null argument and one non-null argument. The callback will be called once, either during the\n\t * transform stage if an error occurs inside a transform, or in response to the communication with\n\t * the backend. The second argument will be the response from the backend in case of success.\n\t */\n\tNotifier.prototype.log = function(item, callback) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t\n\t if (!this.options.enabled) {\n\t return callback(new Error('Rollbar is not enabled'));\n\t }\n\t\n\t this.queue.addPendingItem(item);\n\t var originalError = item.err;\n\t this._applyTransforms(item, function(err, i) {\n\t if (err) {\n\t this.queue.removePendingItem(item);\n\t return callback(err, null);\n\t }\n\t this.queue.addItem(i, callback, originalError, item);\n\t }.bind(this));\n\t};\n\t\n\t/* Internal */\n\t\n\t/*\n\t * _applyTransforms - Applies the transforms that have been added to this notifier sequentially. See\n\t * `addTransform` for more information.\n\t *\n\t * @param item - An item to be transformed\n\t * @param callback - A function of type function(err, item) which will be called with a non-null\n\t * error and a null item in the case of a transform failure, or a null error and non-null item after\n\t * all transforms have been applied.\n\t */\n\tNotifier.prototype._applyTransforms = function(item, callback) {\n\t var transformIndex = -1;\n\t var transformsLength = this.transforms.length;\n\t var transforms = this.transforms;\n\t var options = this.options;\n\t\n\t var cb = function(err, i) {\n\t if (err) {\n\t callback(err, null);\n\t return;\n\t }\n\t\n\t transformIndex++;\n\t\n\t if (transformIndex === transformsLength) {\n\t callback(null, i);\n\t return;\n\t }\n\t\n\t transforms[transformIndex](i, options, cb);\n\t };\n\t\n\t cb(null, item);\n\t};\n\t\n\tmodule.exports = Notifier;\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\t\n\tvar MAX_EVENTS = 100;\n\t\n\tfunction Telemeter(options) {\n\t this.queue = [];\n\t this.options = _.extend(true, {}, options);\n\t var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n\t this.maxQueueSize = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n\t}\n\t\n\tTelemeter.prototype.configure = function(options) {\n\t var oldOptions = this.options;\n\t this.options = _.extend(true, {}, oldOptions, options);\n\t var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n\t var newMaxEvents = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n\t var deleteCount = 0;\n\t if (this.maxQueueSize > newMaxEvents) {\n\t deleteCount = this.maxQueueSize - newMaxEvents;\n\t }\n\t this.maxQueueSize = newMaxEvents;\n\t this.queue.splice(0, deleteCount);\n\t};\n\t\n\tTelemeter.prototype.copyEvents = function() {\n\t return Array.prototype.slice.call(this.queue, 0);\n\t};\n\t\n\tTelemeter.prototype.capture = function(type, metadata, level, rollbarUUID, timestamp) {\n\t var e = {\n\t level: getLevel(type, level),\n\t type: type,\n\t timestamp_ms: timestamp || _.now(),\n\t body: metadata,\n\t source: 'client'\n\t };\n\t if (rollbarUUID) {\n\t e.uuid = rollbarUUID;\n\t }\n\t\n\t try {\n\t if (_.isFunction(this.options.filterTelemetry) && this.options.filterTelemetry(e)) {\n\t return false;\n\t }\n\t } catch (e) {\n\t this.options.filterTelemetry = null;\n\t }\n\t\n\t this.push(e);\n\t return e;\n\t};\n\t\n\tTelemeter.prototype.captureEvent = function(metadata, level, rollbarUUID) {\n\t return this.capture('manual', metadata, level, rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.captureError = function(err, level, rollbarUUID, timestamp) {\n\t var metadata = {\n\t message: err.message || String(err)\n\t };\n\t if (err.stack) {\n\t metadata.stack = err.stack;\n\t }\n\t return this.capture('error', metadata, level, rollbarUUID, timestamp);\n\t};\n\t\n\tTelemeter.prototype.captureLog = function(message, level, rollbarUUID, timestamp) {\n\t return this.capture('log', {\n\t message: message\n\t }, level, rollbarUUID, timestamp);\n\t};\n\t\n\tTelemeter.prototype.captureNetwork = function(metadata, subtype, rollbarUUID, requestData) {\n\t subtype = subtype || 'xhr';\n\t metadata.subtype = metadata.subtype || subtype;\n\t if (requestData) {\n\t metadata.request = requestData;\n\t }\n\t var level = this.levelFromStatus(metadata.status_code);\n\t return this.capture('network', metadata, level, rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.levelFromStatus = function(statusCode) {\n\t if (statusCode >= 200 && statusCode < 400) {\n\t return 'info';\n\t }\n\t if (statusCode === 0 || statusCode >= 400) {\n\t return 'error';\n\t }\n\t return 'info';\n\t};\n\t\n\tTelemeter.prototype.captureDom = function(subtype, element, value, checked, rollbarUUID) {\n\t var metadata = {\n\t subtype: subtype,\n\t element: element\n\t };\n\t if (value !== undefined) {\n\t metadata.value = value;\n\t }\n\t if (checked !== undefined) {\n\t metadata.checked = checked;\n\t }\n\t return this.capture('dom', metadata, 'info', rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.captureNavigation = function(from, to, rollbarUUID) {\n\t return this.capture('navigation', {from: from, to: to}, 'info', rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.captureDomContentLoaded = function(ts) {\n\t return this.capture('navigation', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n\t /**\n\t * If we decide to make this a dom event instead, then use the line below:\n\t return this.capture('dom', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n\t */\n\t};\n\tTelemeter.prototype.captureLoad = function(ts) {\n\t return this.capture('navigation', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n\t /**\n\t * If we decide to make this a dom event instead, then use the line below:\n\t return this.capture('dom', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n\t */\n\t};\n\t\n\tTelemeter.prototype.captureConnectivityChange = function(type, rollbarUUID) {\n\t return this.captureNetwork({change: type}, 'connectivity', rollbarUUID);\n\t};\n\t\n\t// Only intended to be used internally by the notifier\n\tTelemeter.prototype._captureRollbarItem = function(item) {\n\t if (!this.options.includeItemsInTelemetry) {\n\t return;\n\t }\n\t if (item.err) {\n\t return this.captureError(item.err, item.level, item.uuid, item.timestamp);\n\t }\n\t if (item.message) {\n\t return this.captureLog(item.message, item.level, item.uuid, item.timestamp);\n\t }\n\t if (item.custom) {\n\t return this.capture('log', item.custom, item.level, item.uuid, item.timestamp);\n\t }\n\t};\n\t\n\tTelemeter.prototype.push = function(e) {\n\t this.queue.push(e);\n\t if (this.queue.length > this.maxQueueSize) {\n\t this.queue.shift();\n\t }\n\t};\n\t\n\tfunction getLevel(type, level) {\n\t if (level) {\n\t return level;\n\t }\n\t var defaultLevel = {\n\t error: 'error',\n\t manual: 'info'\n\t };\n\t return defaultLevel[type] || 'info';\n\t}\n\t\n\tmodule.exports = Telemeter;\n\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\tvar helpers = __webpack_require__(12);\n\t\n\tvar defaultOptions = {\n\t hostname: 'api.rollbar.com',\n\t path: '/api/1/item/',\n\t search: null,\n\t version: '1',\n\t protocol: 'https:',\n\t port: 443\n\t};\n\t\n\t/**\n\t * Api is an object that encapsulates methods of communicating with\n\t * the Rollbar API. It is a standard interface with some parts implemented\n\t * differently for server or browser contexts. It is an object that should\n\t * be instantiated when used so it can contain non-global options that may\n\t * be different for another instance of RollbarApi.\n\t *\n\t * @param options {\n\t * accessToken: the accessToken to use for posting items to rollbar\n\t * endpoint: an alternative endpoint to send errors to\n\t * must be a valid, fully qualified URL.\n\t * The default is: https://api.rollbar.com/api/1/item\n\t * proxy: if you wish to proxy requests provide an object\n\t * with the following keys:\n\t * host or hostname (required): foo.example.com\n\t * port (optional): 123\n\t * protocol (optional): https\n\t * }\n\t */\n\tfunction Api(options, t, u, j) {\n\t this.options = options;\n\t this.transport = t;\n\t this.url = u;\n\t this.jsonBackup = j;\n\t this.accessToken = options.accessToken;\n\t this.transportOptions = _getTransport(options, u);\n\t}\n\t\n\t/**\n\t *\n\t * @param data\n\t * @param callback\n\t */\n\tApi.prototype.postItem = function(data, callback) {\n\t var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n\t var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n\t this.transport.post(this.accessToken, transportOptions, payload, callback);\n\t};\n\t\n\tApi.prototype.configure = function(options) {\n\t var oldOptions = this.oldOptions;\n\t this.options = _.extend(true, {}, oldOptions, options);\n\t this.transportOptions = _getTransport(this.options, this.url);\n\t if (this.options.accessToken !== undefined) {\n\t this.accessToken = this.options.accessToken;\n\t }\n\t return this;\n\t};\n\t\n\tfunction _getTransport(options, url) {\n\t return helpers.getTransportFromOptions(options, defaultOptions, url);\n\t}\n\t\n\tmodule.exports = Api;\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\t\n\tfunction buildPayload(accessToken, data, jsonBackup) {\n\t if (!_.isType(data.context, 'string')) {\n\t var contextResult = _.stringify(data.context, jsonBackup);\n\t if (contextResult.error) {\n\t data.context = 'Error: could not serialize \\'context\\'';\n\t } else {\n\t data.context = contextResult.value || '';\n\t }\n\t if (data.context.length > 255) {\n\t data.context = data.context.substr(0, 255);\n\t }\n\t }\n\t return {\n\t access_token: accessToken,\n\t data: data\n\t };\n\t}\n\t\n\tfunction getTransportFromOptions(options, defaults, url) {\n\t var hostname = defaults.hostname;\n\t var protocol = defaults.protocol;\n\t var port = defaults.port;\n\t var path = defaults.path;\n\t var search = defaults.search;\n\t\n\t var proxy = options.proxy;\n\t if (options.endpoint) {\n\t var opts = url.parse(options.endpoint);\n\t hostname = opts.hostname;\n\t protocol = opts.protocol;\n\t port = opts.port;\n\t path = opts.pathname;\n\t search = opts.search;\n\t }\n\t return {\n\t hostname: hostname,\n\t protocol: protocol,\n\t port: port,\n\t path: path,\n\t search: search,\n\t proxy: proxy\n\t };\n\t}\n\t\n\tfunction transportOptions(transport, method) {\n\t var protocol = transport.protocol || 'https:';\n\t var port = transport.port || (protocol === 'http:' ? 80 : protocol === 'https:' ? 443 : undefined);\n\t var hostname = transport.hostname;\n\t var path = transport.path;\n\t if (transport.search) {\n\t path = path + transport.search;\n\t }\n\t if (transport.proxy) {\n\t path = protocol + '//' + hostname + path;\n\t hostname = transport.proxy.host || transport.proxy.hostname;\n\t port = transport.proxy.port;\n\t protocol = transport.proxy.protocol || protocol;\n\t }\n\t return {\n\t protocol: protocol,\n\t hostname: hostname,\n\t path: path,\n\t port: port,\n\t method: method\n\t };\n\t}\n\t\n\tfunction appendPathToPath(base, path) {\n\t var baseTrailingSlash = /\\/$/.test(base);\n\t var pathBeginningSlash = /^\\//.test(path);\n\t\n\t if (baseTrailingSlash && pathBeginningSlash) {\n\t path = path.substring(1);\n\t } else if (!baseTrailingSlash && !pathBeginningSlash) {\n\t path = '/' + path;\n\t }\n\t\n\t return base + path;\n\t}\n\t\n\tmodule.exports = {\n\t buildPayload: buildPayload,\n\t getTransportFromOptions: getTransportFromOptions,\n\t transportOptions: transportOptions,\n\t appendPathToPath: appendPathToPath\n\t};\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t/* eslint-disable no-console */\n\t__webpack_require__(14);\n\tvar detection = __webpack_require__(15);\n\tvar _ = __webpack_require__(6);\n\t\n\tfunction error() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t args.unshift('Rollbar:');\n\t if (detection.ieVersion() <= 8) {\n\t console.error(_.formatArgsAsString(args));\n\t } else {\n\t console.error.apply(console, args);\n\t }\n\t}\n\t\n\tfunction info() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t args.unshift('Rollbar:');\n\t if (detection.ieVersion() <= 8) {\n\t console.info(_.formatArgsAsString(args));\n\t } else {\n\t console.info.apply(console, args);\n\t }\n\t}\n\t\n\tfunction log() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t args.unshift('Rollbar:');\n\t if (detection.ieVersion() <= 8) {\n\t console.log(_.formatArgsAsString(args));\n\t } else {\n\t console.log.apply(console, args);\n\t }\n\t}\n\t\n\t/* eslint-enable no-console */\n\t\n\tmodule.exports = {\n\t error: error,\n\t info: info,\n\t log: log\n\t};\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports) {\n\n\t// Console-polyfill. MIT license.\n\t// https://github.com/paulmillr/console-polyfill\n\t// Make it safe to do console.log() always.\n\t(function(global) {\n\t 'use strict';\n\t if (!global.console) {\n\t global.console = {};\n\t }\n\t var con = global.console;\n\t var prop, method;\n\t var dummy = function() {};\n\t var properties = ['memory'];\n\t var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' +\n\t 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' +\n\t 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',');\n\t while (prop = properties.pop()) if (!con[prop]) con[prop] = {};\n\t while (method = methods.pop()) if (!con[method]) con[method] = dummy;\n\t // Using `this` for web workers & supports Browserify / Webpack.\n\t})(typeof window === 'undefined' ? this : window);\n\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\t// This detection.js module is used to encapsulate any ugly browser/feature\n\t// detection we may need to do.\n\t\n\t// Figure out which version of IE we're using, if any.\n\t// This is gleaned from http://stackoverflow.com/questions/5574842/best-way-to-check-for-ie-less-than-9-in-javascript-without-library\n\t// Will return an integer on IE (i.e. 8)\n\t// Will return undefined otherwise\n\tfunction getIEVersion() {\n\t\tvar undef;\n\t\tif (!document) {\n\t\t\treturn undef;\n\t\t}\n\t\n\t var v = 3,\n\t div = document.createElement('div'),\n\t all = div.getElementsByTagName('i');\n\t\n\t while (\n\t div.innerHTML = '',\n\t all[0]\n\t );\n\t\n\t return v > 4 ? v : undef;\n\t}\n\t\n\tvar Detection = {\n\t ieVersion: getIEVersion\n\t};\n\t\n\tmodule.exports = Detection;\n\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tfunction captureUncaughtExceptions(window, handler, shim) {\n\t if (!window) { return; }\n\t var oldOnError;\n\t\n\t if (typeof handler._rollbarOldOnError === 'function') {\n\t oldOnError = handler._rollbarOldOnError;\n\t } else if (window.onerror && !window.onerror.belongsToShim) {\n\t oldOnError = window.onerror;\n\t handler._rollbarOldOnError = oldOnError;\n\t }\n\t\n\t var fn = function() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t _rollbarWindowOnError(window, handler, oldOnError, args);\n\t };\n\t fn.belongsToShim = shim;\n\t window.onerror = fn;\n\t}\n\t\n\tfunction _rollbarWindowOnError(window, r, old, args) {\n\t if (window._rollbarWrappedError) {\n\t if (!args[4]) {\n\t args[4] = window._rollbarWrappedError;\n\t }\n\t if (!args[5]) {\n\t args[5] = window._rollbarWrappedError._rollbarContext;\n\t }\n\t window._rollbarWrappedError = null;\n\t }\n\t\n\t r.handleUncaughtException.apply(r, args);\n\t if (old) {\n\t old.apply(window, args);\n\t }\n\t}\n\t\n\tfunction captureUnhandledRejections(window, handler, shim) {\n\t if (!window) { return; }\n\t\n\t if (typeof window._rollbarURH === 'function' && window._rollbarURH.belongsToShim) {\n\t window.removeEventListener('unhandledrejection', window._rollbarURH);\n\t }\n\t\n\t var rejectionHandler = function (evt) {\n\t var reason, promise, detail;\n\t try {\n\t reason = evt.reason;\n\t } catch (e) {\n\t reason = undefined;\n\t }\n\t try {\n\t promise = evt.promise;\n\t } catch (e) {\n\t promise = '[unhandledrejection] error getting `promise` from event';\n\t }\n\t try {\n\t detail = evt.detail;\n\t if (!reason && detail) {\n\t reason = detail.reason;\n\t promise = detail.promise;\n\t }\n\t } catch (e) {\n\t detail = '[unhandledrejection] error getting `detail` from event';\n\t }\n\t if (!reason) {\n\t reason = '[unhandledrejection] error getting `reason` from event';\n\t }\n\t\n\t if (handler && handler.handleUnhandledRejection) {\n\t handler.handleUnhandledRejection(reason, promise);\n\t }\n\t };\n\t rejectionHandler.belongsToShim = shim;\n\t window._rollbarURH = rejectionHandler;\n\t window.addEventListener('unhandledrejection', rejectionHandler);\n\t}\n\t\n\tfunction wrapGlobals(window, handler, shim) {\n\t if (!window) { return; }\n\t // Adapted from https://github.com/bugsnag/bugsnag-js\n\t var globals = 'EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload'.split(',');\n\t var i, global;\n\t for (i = 0; i < globals.length; ++i) {\n\t global = globals[i];\n\t\n\t if (window[global] && window[global].prototype) {\n\t _extendListenerPrototype(handler, window[global].prototype, shim);\n\t }\n\t }\n\t}\n\t\n\tfunction _extendListenerPrototype(handler, prototype, shim) {\n\t if (prototype.hasOwnProperty && prototype.hasOwnProperty('addEventListener')) {\n\t var oldAddEventListener = prototype.addEventListener;\n\t while (oldAddEventListener._rollbarOldAdd && oldAddEventListener.belongsToShim) {\n\t oldAddEventListener = oldAddEventListener._rollbarOldAdd;\n\t }\n\t var addFn = function(event, callback, bubble) {\n\t oldAddEventListener.call(this, event, handler.wrap(callback), bubble);\n\t };\n\t addFn._rollbarOldAdd = oldAddEventListener;\n\t addFn.belongsToShim = shim;\n\t prototype.addEventListener = addFn;\n\t\n\t var oldRemoveEventListener = prototype.removeEventListener;\n\t while (oldRemoveEventListener._rollbarOldRemove && oldRemoveEventListener.belongsToShim) {\n\t oldRemoveEventListener = oldRemoveEventListener._rollbarOldRemove;\n\t }\n\t var removeFn = function(event, callback, bubble) {\n\t oldRemoveEventListener.call(this, event, callback && callback._rollbar_wrapped || callback, bubble);\n\t };\n\t removeFn._rollbarOldRemove = oldRemoveEventListener;\n\t removeFn.belongsToShim = shim;\n\t prototype.removeEventListener = removeFn;\n\t }\n\t}\n\t\n\tmodule.exports = {\n\t captureUncaughtExceptions: captureUncaughtExceptions,\n\t captureUnhandledRejections: captureUnhandledRejections,\n\t wrapGlobals: wrapGlobals\n\t};\n\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\tvar logger = __webpack_require__(13);\n\t\n\t/*\n\t * accessToken may be embedded in payload but that should not\n\t * be assumed\n\t *\n\t * options: {\n\t * hostname\n\t * protocol\n\t * path\n\t * port\n\t * method\n\t * }\n\t *\n\t * params is an object containing key/value pairs. These\n\t * will be appended to the path as 'key=value&key=value'\n\t *\n\t * payload is an unserialized object\n\t */\n\t\n\tfunction get(accessToken, options, params, callback, requestFactory) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t _.addParamsAndAccessTokenToPath(accessToken, options, params);\n\t\n\t var method = 'GET';\n\t var url = _.formatUrl(options);\n\t _makeRequest(accessToken, url, method, null, callback, requestFactory);\n\t}\n\t\n\tfunction post(accessToken, options, payload, callback, requestFactory) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t\n\t if (!payload) {\n\t return callback(new Error('Cannot send empty request'));\n\t }\n\t\n\t var stringifyResult = _.stringify(payload);\n\t if (stringifyResult.error) {\n\t return callback(stringifyResult.error);\n\t }\n\t\n\t var writeData = stringifyResult.value;\n\t var method = 'POST';\n\t var url = _.formatUrl(options);\n\t _makeRequest(accessToken, url, method, writeData, callback, requestFactory);\n\t}\n\t\n\tfunction _makeRequest(accessToken, url, method, data, callback, requestFactory) {\n\t var request;\n\t if (requestFactory) {\n\t request = requestFactory();\n\t } else {\n\t request = _createXMLHTTPObject();\n\t }\n\t if (!request) {\n\t // Give up, no way to send requests\n\t return callback(new Error('No way to send a request'));\n\t }\n\t try {\n\t try {\n\t var onreadystatechange = function() {\n\t try {\n\t if (onreadystatechange && request.readyState === 4) {\n\t onreadystatechange = undefined;\n\t\n\t var parseResponse = _.jsonParse(request.responseText);\n\t if (_isSuccess(request)) {\n\t callback(parseResponse.error, parseResponse.value);\n\t return;\n\t } else if (_isNormalFailure(request)) {\n\t if (request.status === 403) {\n\t // likely caused by using a server access token\n\t var message = parseResponse.value && parseResponse.value.message;\n\t logger.error(message);\n\t }\n\t // return valid http status codes\n\t callback(new Error(String(request.status)));\n\t } else {\n\t // IE will return a status 12000+ on some sort of connection failure,\n\t // so we return a blank error\n\t // http://msdn.microsoft.com/en-us/library/aa383770%28VS.85%29.aspx\n\t var msg = 'XHR response had no status code (likely connection failure)';\n\t callback(_newRetriableError(msg));\n\t }\n\t }\n\t } catch (ex) {\n\t //jquery source mentions firefox may error out while accessing the\n\t //request members if there is a network error\n\t //https://github.com/jquery/jquery/blob/a938d7b1282fc0e5c52502c225ae8f0cef219f0a/src/ajax/xhr.js#L111\n\t var exc;\n\t if (ex && ex.stack) {\n\t exc = ex;\n\t } else {\n\t exc = new Error(ex);\n\t }\n\t callback(exc);\n\t }\n\t };\n\t\n\t request.open(method, url, true);\n\t if (request.setRequestHeader) {\n\t request.setRequestHeader('Content-Type', 'application/json');\n\t request.setRequestHeader('X-Rollbar-Access-Token', accessToken);\n\t }\n\t request.onreadystatechange = onreadystatechange;\n\t request.send(data);\n\t } catch (e1) {\n\t // Sending using the normal xmlhttprequest object didn't work, try XDomainRequest\n\t if (typeof XDomainRequest !== 'undefined') {\n\t\n\t // Assume we are in a really old browser which has a bunch of limitations:\n\t // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\t\n\t // Extreme paranoia: if we have XDomainRequest then we have a window, but just in case\n\t if (!window || !window.location) {\n\t return callback(new Error('No window available during request, unknown environment'));\n\t }\n\t\n\t // If the current page is http, try and send over http\n\t if (window.location.href.substring(0, 5) === 'http:' && url.substring(0, 5) === 'https') {\n\t url = 'http' + url.substring(5);\n\t }\n\t\n\t var xdomainrequest = new XDomainRequest();\n\t xdomainrequest.onprogress = function() {};\n\t xdomainrequest.ontimeout = function() {\n\t var msg = 'Request timed out';\n\t var code = 'ETIMEDOUT';\n\t callback(_newRetriableError(msg, code));\n\t };\n\t xdomainrequest.onerror = function() {\n\t callback(new Error('Error during request'));\n\t };\n\t xdomainrequest.onload = function() {\n\t var parseResponse = _.jsonParse(xdomainrequest.responseText);\n\t callback(parseResponse.error, parseResponse.value);\n\t };\n\t xdomainrequest.open(method, url, true);\n\t xdomainrequest.send(data);\n\t } else {\n\t callback(new Error('Cannot find a method to transport a request'));\n\t }\n\t }\n\t } catch (e2) {\n\t callback(e2);\n\t }\n\t}\n\t\n\tfunction _createXMLHTTPObject() {\n\t /* global ActiveXObject:false */\n\t\n\t var factories = [\n\t function () {\n\t return new XMLHttpRequest();\n\t },\n\t function () {\n\t return new ActiveXObject('Msxml2.XMLHTTP');\n\t },\n\t function () {\n\t return new ActiveXObject('Msxml3.XMLHTTP');\n\t },\n\t function () {\n\t return new ActiveXObject('Microsoft.XMLHTTP');\n\t }\n\t ];\n\t var xmlhttp;\n\t var i;\n\t var numFactories = factories.length;\n\t for (i = 0; i < numFactories; i++) {\n\t /* eslint-disable no-empty */\n\t try {\n\t xmlhttp = factories[i]();\n\t break;\n\t } catch (e) {\n\t // pass\n\t }\n\t /* eslint-enable no-empty */\n\t }\n\t return xmlhttp;\n\t}\n\t\n\tfunction _isSuccess(r) {\n\t return r && r.status && r.status === 200;\n\t}\n\t\n\tfunction _isNormalFailure(r) {\n\t return r && _.isType(r.status, 'number') && r.status >= 400 && r.status < 600;\n\t}\n\t\n\tfunction _newRetriableError(message, code) {\n\t var err = new Error(message);\n\t err.code = code || 'ENOTFOUND';\n\t return err;\n\t}\n\t\n\tmodule.exports = {\n\t get: get,\n\t post: post\n\t};\n\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\t// See https://nodejs.org/docs/latest/api/url.html\n\tfunction parse(url) {\n\t var result = {\n\t protocol: null, auth: null, host: null, path: null,\n\t hash: null, href: url, hostname: null, port: null,\n\t pathname: null, search: null, query: null\n\t };\n\t\n\t var i, last;\n\t i = url.indexOf('//');\n\t if (i !== -1) {\n\t result.protocol = url.substring(0,i);\n\t last = i+2;\n\t } else {\n\t last = 0;\n\t }\n\t \n\t i = url.indexOf('@', last);\n\t if (i !== -1) {\n\t result.auth = url.substring(last, i);\n\t last = i+1;\n\t }\n\t\n\t i = url.indexOf('/', last);\n\t if (i === -1) {\n\t i = url.indexOf('?', last);\n\t if (i === -1) {\n\t i = url.indexOf('#', last);\n\t if (i === -1) {\n\t result.host = url.substring(last);\n\t } else {\n\t result.host = url.substring(last, i);\n\t result.hash = url.substring(i);\n\t }\n\t result.hostname = result.host.split(':')[0];\n\t result.port = result.host.split(':')[1];\n\t if (result.port) {\n\t result.port = parseInt(result.port, 10);\n\t }\n\t return result;\n\t } else {\n\t result.host = url.substring(last, i);\n\t result.hostname = result.host.split(':')[0];\n\t result.port = result.host.split(':')[1];\n\t if (result.port) {\n\t result.port = parseInt(result.port, 10);\n\t }\n\t last = i;\n\t }\n\t } else {\n\t result.host = url.substring(last, i);\n\t result.hostname = result.host.split(':')[0];\n\t result.port = result.host.split(':')[1];\n\t if (result.port) {\n\t result.port = parseInt(result.port, 10);\n\t }\n\t last = i;\n\t }\n\t\n\t i = url.indexOf('#', last);\n\t if (i === -1) {\n\t result.path = url.substring(last);\n\t } else {\n\t result.path = url.substring(last, i);\n\t result.hash = url.substring(i);\n\t }\n\t\n\t if (result.path) {\n\t var pathParts = result.path.split('?');\n\t result.pathname = pathParts[0];\n\t result.query = pathParts[1];\n\t result.search = result.query ? '?' + result.query : null;\n\t }\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t parse: parse\n\t};\n\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\tvar errorParser = __webpack_require__(20);\n\tvar logger = __webpack_require__(13);\n\t\n\tfunction handleItemWithError(item, options, callback) {\n\t item.data = item.data || {};\n\t if (item.err) {\n\t try {\n\t item.stackInfo = item.err._savedStackTrace || errorParser.parse(item.err);\n\t } catch (e)\n\t /* istanbul ignore next */\n\t {\n\t logger.error('Error while parsing the error object.', e);\n\t item.message = item.err.message || item.err.description || item.message || String(item.err);\n\t delete item.err;\n\t }\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction ensureItemHasSomethingToSay(item, options, callback) {\n\t if (!item.message && !item.stackInfo && !item.custom) {\n\t callback(new Error('No message, stack info, or custom data'), null);\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction addBaseInfo(item, options, callback) {\n\t var environment = (options.payload && options.payload.environment) || options.environment;\n\t item.data = _.extend(true, {}, item.data, {\n\t environment: environment,\n\t level: item.level,\n\t endpoint: options.endpoint,\n\t platform: 'browser',\n\t framework: 'browser-js',\n\t language: 'javascript',\n\t server: {},\n\t uuid: item.uuid,\n\t notifier: {\n\t name: 'rollbar-browser-js',\n\t version: options.version\n\t }\n\t });\n\t callback(null, item);\n\t}\n\t\n\tfunction addRequestInfo(window) {\n\t return function(item, options, callback) {\n\t if (!window || !window.location) {\n\t return callback(null, item);\n\t }\n\t _.set(item, 'data.request', {\n\t url: window.location.href,\n\t query_string: window.location.search,\n\t user_ip: '$remote_ip'\n\t });\n\t callback(null, item);\n\t };\n\t}\n\t\n\tfunction addClientInfo(window) {\n\t return function(item, options, callback) {\n\t if (!window) {\n\t return callback(null, item);\n\t }\n\t var nav = window.navigator || {};\n\t var scr = window.screen || {};\n\t _.set(item, 'data.client', {\n\t runtime_ms: item.timestamp - window._rollbarStartTime,\n\t timestamp: Math.round(item.timestamp / 1000),\n\t javascript: {\n\t browser: nav.userAgent,\n\t language: nav.language,\n\t cookie_enabled: nav.cookieEnabled,\n\t screen: {\n\t width: scr.width,\n\t height: scr.height\n\t }\n\t }\n\t });\n\t callback(null, item);\n\t };\n\t}\n\t\n\tfunction addPluginInfo(window) {\n\t return function(item, options, callback) {\n\t if (!window || !window.navigator) {\n\t return callback(null, item);\n\t }\n\t var plugins = [];\n\t var navPlugins = window.navigator.plugins || [];\n\t var cur;\n\t for (var i=0, l=navPlugins.length; i < l; ++i) {\n\t cur = navPlugins[i];\n\t plugins.push({name: cur.name, description: cur.description});\n\t }\n\t _.set(item, 'data.client.javascript.plugins', plugins);\n\t callback(null, item);\n\t };\n\t}\n\t\n\tfunction addBody(item, options, callback) {\n\t if (item.stackInfo) {\n\t addBodyTrace(item, options, callback);\n\t } else {\n\t addBodyMessage(item, options, callback);\n\t }\n\t}\n\t\n\tfunction addBodyMessage(item, options, callback) {\n\t var message = item.message;\n\t var custom = item.custom;\n\t\n\t if (!message) {\n\t if (custom) {\n\t var scrubFields = options.scrubFields;\n\t var messageResult = _.stringify(_.scrub(custom, scrubFields));\n\t message = messageResult.error || messageResult.value || '';\n\t } else {\n\t message = '';\n\t }\n\t }\n\t var result = {\n\t body: message\n\t };\n\t\n\t if (custom) {\n\t result.extra = _.extend(true, {}, custom);\n\t }\n\t\n\t _.set(item, 'data.body', {message: result});\n\t callback(null, item);\n\t}\n\t\n\t\n\tfunction addBodyTrace(item, options, callback) {\n\t var description = item.data.description;\n\t var stackInfo = item.stackInfo;\n\t var custom = item.custom;\n\t\n\t var guess = errorParser.guessErrorClass(stackInfo.message);\n\t var className = stackInfo.name || guess[0];\n\t var message = guess[1];\n\t var trace = {\n\t exception: {\n\t 'class': className,\n\t message: message\n\t }\n\t };\n\t\n\t if (description) {\n\t trace.exception.description = description;\n\t }\n\t\n\t // Transform a TraceKit stackInfo object into a Rollbar trace\n\t var stack = stackInfo.stack;\n\t if (stack && stack.length === 0 && item._unhandledStackInfo && item._unhandledStackInfo.stack) {\n\t stack = item._unhandledStackInfo.stack;\n\t }\n\t if (stack) {\n\t if (stack.length === 0) {\n\t trace.exception.stack = stackInfo.rawStack;\n\t trace.exception.raw = String(stackInfo.rawException);\n\t }\n\t var stackFrame;\n\t var frame;\n\t var code;\n\t var pre;\n\t var post;\n\t var contextLength;\n\t var i, mid;\n\t\n\t trace.frames = [];\n\t for (i = 0; i < stack.length; ++i) {\n\t stackFrame = stack[i];\n\t frame = {\n\t filename: stackFrame.url ? _.sanitizeUrl(stackFrame.url) : '(unknown)',\n\t lineno: stackFrame.line || null,\n\t method: (!stackFrame.func || stackFrame.func === '?') ? '[anonymous]' : stackFrame.func,\n\t colno: stackFrame.column\n\t };\n\t if (frame.method && frame.method.endsWith && frame.method.endsWith('_rollbar_wrapped')) {\n\t continue;\n\t }\n\t\n\t code = pre = post = null;\n\t contextLength = stackFrame.context ? stackFrame.context.length : 0;\n\t if (contextLength) {\n\t mid = Math.floor(contextLength / 2);\n\t pre = stackFrame.context.slice(0, mid);\n\t code = stackFrame.context[mid];\n\t post = stackFrame.context.slice(mid);\n\t }\n\t\n\t if (code) {\n\t frame.code = code;\n\t }\n\t\n\t if (pre || post) {\n\t frame.context = {};\n\t if (pre && pre.length) {\n\t frame.context.pre = pre;\n\t }\n\t if (post && post.length) {\n\t frame.context.post = post;\n\t }\n\t }\n\t\n\t if (stackFrame.args) {\n\t frame.args = stackFrame.args;\n\t }\n\t\n\t trace.frames.push(frame);\n\t }\n\t\n\t // NOTE(cory): reverse the frames since rollbar.com expects the most recent call last\n\t trace.frames.reverse();\n\t\n\t if (custom) {\n\t trace.extra = _.extend(true, {}, custom);\n\t }\n\t _.set(item, 'data.body', {trace: trace});\n\t callback(null, item);\n\t } else {\n\t item.message = className + ': ' + message;\n\t addBodyMessage(item, options, callback);\n\t }\n\t}\n\t\n\tfunction scrubPayload(item, options, callback) {\n\t var scrubFields = options.scrubFields;\n\t item.data = _.scrub(item.data, scrubFields);\n\t callback(null, item);\n\t}\n\t\n\tmodule.exports = {\n\t handleItemWithError: handleItemWithError,\n\t ensureItemHasSomethingToSay: ensureItemHasSomethingToSay,\n\t addBaseInfo: addBaseInfo,\n\t addRequestInfo: addRequestInfo,\n\t addClientInfo: addClientInfo,\n\t addPluginInfo: addPluginInfo,\n\t addBody: addBody,\n\t scrubPayload: scrubPayload\n\t};\n\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar ErrorStackParser = __webpack_require__(21);\n\t\n\tvar UNKNOWN_FUNCTION = '?';\n\tvar ERR_CLASS_REGEXP = new RegExp('^(([a-zA-Z0-9-_$ ]*): *)?(Uncaught )?([a-zA-Z0-9-_$ ]*): ');\n\t\n\tfunction guessFunctionName() {\n\t return UNKNOWN_FUNCTION;\n\t}\n\t\n\t\n\tfunction gatherContext() {\n\t return null;\n\t}\n\t\n\t\n\tfunction Frame(stackFrame) {\n\t var data = {};\n\t\n\t data._stackFrame = stackFrame;\n\t\n\t data.url = stackFrame.fileName;\n\t data.line = stackFrame.lineNumber;\n\t data.func = stackFrame.functionName;\n\t data.column = stackFrame.columnNumber;\n\t data.args = stackFrame.args;\n\t\n\t data.context = gatherContext(data.url, data.line);\n\t\n\t return data;\n\t}\n\t\n\t\n\tfunction Stack(exception) {\n\t function getStack() {\n\t var parserStack = [];\n\t var exc;\n\t\n\t if (!exception.stack) {\n\t try {\n\t throw exception;\n\t } catch (e) {\n\t exc = e;\n\t }\n\t } else {\n\t exc = exception;\n\t }\n\t\n\t try {\n\t parserStack = ErrorStackParser.parse(exc);\n\t } catch(e) {\n\t parserStack = [];\n\t }\n\t\n\t var stack = [];\n\t\n\t for (var i = 0; i < parserStack.length; i++) {\n\t stack.push(new Frame(parserStack[i]));\n\t }\n\t\n\t return stack;\n\t }\n\t\n\t return {\n\t stack: getStack(),\n\t message: exception.message,\n\t name: exception.name,\n\t rawStack: exception.stack,\n\t rawException: exception\n\t };\n\t}\n\t\n\t\n\tfunction parse(e) {\n\t return new Stack(e);\n\t}\n\t\n\t\n\tfunction guessErrorClass(errMsg) {\n\t if (!errMsg || !errMsg.match) {\n\t return ['Unknown error. There was no error message to display.', ''];\n\t }\n\t var errClassMatch = errMsg.match(ERR_CLASS_REGEXP);\n\t var errClass = '(unknown)';\n\t\n\t if (errClassMatch) {\n\t errClass = errClassMatch[errClassMatch.length - 1];\n\t errMsg = errMsg.replace((errClassMatch[errClassMatch.length - 2] || '') + errClass + ':', '');\n\t errMsg = errMsg.replace(/(^[\\s]+|[\\s]+$)/g, '');\n\t }\n\t return [errClass, errMsg];\n\t}\n\t\n\t\n\tmodule.exports = {\n\t guessFunctionName: guessFunctionName,\n\t guessErrorClass: guessErrorClass,\n\t gatherContext: gatherContext,\n\t parse: parse,\n\t Stack: Stack,\n\t Frame: Frame\n\t};\n\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (root, factory) {\n\t 'use strict';\n\t // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\t\n\t /* istanbul ignore next */\n\t if (true) {\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(22)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t } else if (typeof exports === 'object') {\n\t module.exports = factory(require('stackframe'));\n\t } else {\n\t root.ErrorStackParser = factory(root.StackFrame);\n\t }\n\t}(this, function ErrorStackParser(StackFrame) {\n\t 'use strict';\n\t\n\t var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n\t var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n\t var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\t\n\t function _map(array, fn, thisArg) {\n\t if (typeof Array.prototype.map === 'function') {\n\t return array.map(fn, thisArg);\n\t } else {\n\t var output = new Array(array.length);\n\t for (var i = 0; i < array.length; i++) {\n\t output[i] = fn.call(thisArg, array[i]);\n\t }\n\t return output;\n\t }\n\t }\n\t\n\t function _filter(array, fn, thisArg) {\n\t if (typeof Array.prototype.filter === 'function') {\n\t return array.filter(fn, thisArg);\n\t } else {\n\t var output = [];\n\t for (var i = 0; i < array.length; i++) {\n\t if (fn.call(thisArg, array[i])) {\n\t output.push(array[i]);\n\t }\n\t }\n\t return output;\n\t }\n\t }\n\t\n\t return {\n\t /**\n\t * Given an Error object, extract the most information from it.\n\t * @param error {Error}\n\t * @return Array[StackFrame]\n\t */\n\t parse: function ErrorStackParser$$parse(error) {\n\t if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n\t return this.parseOpera(error);\n\t } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n\t return this.parseV8OrIE(error);\n\t } else if (error.stack) {\n\t return this.parseFFOrSafari(error);\n\t } else {\n\t throw new Error('Cannot parse given Error object');\n\t }\n\t },\n\t\n\t /**\n\t * Separate line and column numbers from a URL-like string.\n\t * @param urlLike String\n\t * @return Array[String]\n\t */\n\t extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n\t // Fail-fast but return locations like \"(native)\"\n\t if (urlLike.indexOf(':') === -1) {\n\t return [urlLike];\n\t }\n\t\n\t var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n\t var lastNumber = locationParts.pop();\n\t var possibleNumber = locationParts[locationParts.length - 1];\n\t if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n\t var lineNumber = locationParts.pop();\n\t return [locationParts.join(':'), lineNumber, lastNumber];\n\t } else {\n\t return [locationParts.join(':'), lastNumber, undefined];\n\t }\n\t },\n\t\n\t parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n\t var filtered = _filter(error.stack.split('\\n'), function (line) {\n\t return !!line.match(CHROME_IE_STACK_REGEXP);\n\t }, this);\n\t\n\t return _map(filtered, function (line) {\n\t if (line.indexOf('(eval ') > -1) {\n\t // Throw away eval information until we implement stacktrace.js/stackframe#8\n\t line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n\t }\n\t var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n\t var locationParts = this.extractLocation(tokens.pop());\n\t var functionName = tokens.join(' ') || undefined;\n\t var fileName = locationParts[0] === 'eval' ? undefined : locationParts[0];\n\t\n\t return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n\t }, this);\n\t },\n\t\n\t parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n\t var filtered = _filter(error.stack.split('\\n'), function (line) {\n\t return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n\t }, this);\n\t\n\t return _map(filtered, function (line) {\n\t // Throw away eval information until we implement stacktrace.js/stackframe#8\n\t if (line.indexOf(' > eval') > -1) {\n\t line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n\t }\n\t\n\t if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n\t // Safari eval frames only have function names and nothing else\n\t return new StackFrame(line);\n\t } else {\n\t var tokens = line.split('@');\n\t var locationParts = this.extractLocation(tokens.pop());\n\t var functionName = tokens.shift() || undefined;\n\t return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n\t }\n\t }, this);\n\t },\n\t\n\t parseOpera: function ErrorStackParser$$parseOpera(e) {\n\t if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n\t e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n\t return this.parseOpera9(e);\n\t } else if (!e.stack) {\n\t return this.parseOpera10(e);\n\t } else {\n\t return this.parseOpera11(e);\n\t }\n\t },\n\t\n\t parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n\t var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n\t var lines = e.message.split('\\n');\n\t var result = [];\n\t\n\t for (var i = 2, len = lines.length; i < len; i += 2) {\n\t var match = lineRE.exec(lines[i]);\n\t if (match) {\n\t result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n\t }\n\t }\n\t\n\t return result;\n\t },\n\t\n\t parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n\t var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n\t var lines = e.stacktrace.split('\\n');\n\t var result = [];\n\t\n\t for (var i = 0, len = lines.length; i < len; i += 2) {\n\t var match = lineRE.exec(lines[i]);\n\t if (match) {\n\t result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n\t }\n\t }\n\t\n\t return result;\n\t },\n\t\n\t // Opera 10.65+ Error.stack very similar to FF/Safari\n\t parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n\t var filtered = _filter(error.stack.split('\\n'), function (line) {\n\t return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n\t !line.match(/^Error created at/);\n\t }, this);\n\t\n\t return _map(filtered, function (line) {\n\t var tokens = line.split('@');\n\t var locationParts = this.extractLocation(tokens.pop());\n\t var functionCall = (tokens.shift() || '');\n\t var functionName = functionCall\n\t .replace(//, '$2')\n\t .replace(/\\([^\\)]*\\)/g, '') || undefined;\n\t var argsRaw;\n\t if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n\t argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n\t }\n\t var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n\t return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n\t }, this);\n\t }\n\t };\n\t}));\n\t\n\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (root, factory) {\n\t 'use strict';\n\t // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\t\n\t /* istanbul ignore next */\n\t if (true) {\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t } else if (typeof exports === 'object') {\n\t module.exports = factory();\n\t } else {\n\t root.StackFrame = factory();\n\t }\n\t}(this, function () {\n\t 'use strict';\n\t function _isNumber(n) {\n\t return !isNaN(parseFloat(n)) && isFinite(n);\n\t }\n\t\n\t function StackFrame(functionName, args, fileName, lineNumber, columnNumber, source) {\n\t if (functionName !== undefined) {\n\t this.setFunctionName(functionName);\n\t }\n\t if (args !== undefined) {\n\t this.setArgs(args);\n\t }\n\t if (fileName !== undefined) {\n\t this.setFileName(fileName);\n\t }\n\t if (lineNumber !== undefined) {\n\t this.setLineNumber(lineNumber);\n\t }\n\t if (columnNumber !== undefined) {\n\t this.setColumnNumber(columnNumber);\n\t }\n\t if (source !== undefined) {\n\t this.setSource(source);\n\t }\n\t }\n\t\n\t StackFrame.prototype = {\n\t getFunctionName: function () {\n\t return this.functionName;\n\t },\n\t setFunctionName: function (v) {\n\t this.functionName = String(v);\n\t },\n\t\n\t getArgs: function () {\n\t return this.args;\n\t },\n\t setArgs: function (v) {\n\t if (Object.prototype.toString.call(v) !== '[object Array]') {\n\t throw new TypeError('Args must be an Array');\n\t }\n\t this.args = v;\n\t },\n\t\n\t // NOTE: Property name may be misleading as it includes the path,\n\t // but it somewhat mirrors V8's JavaScriptStackTraceApi\n\t // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's\n\t // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14\n\t getFileName: function () {\n\t return this.fileName;\n\t },\n\t setFileName: function (v) {\n\t this.fileName = String(v);\n\t },\n\t\n\t getLineNumber: function () {\n\t return this.lineNumber;\n\t },\n\t setLineNumber: function (v) {\n\t if (!_isNumber(v)) {\n\t throw new TypeError('Line Number must be a Number');\n\t }\n\t this.lineNumber = Number(v);\n\t },\n\t\n\t getColumnNumber: function () {\n\t return this.columnNumber;\n\t },\n\t setColumnNumber: function (v) {\n\t if (!_isNumber(v)) {\n\t throw new TypeError('Column Number must be a Number');\n\t }\n\t this.columnNumber = Number(v);\n\t },\n\t\n\t getSource: function () {\n\t return this.source;\n\t },\n\t setSource: function (v) {\n\t this.source = String(v);\n\t },\n\t\n\t toString: function() {\n\t var functionName = this.getFunctionName() || '{anonymous}';\n\t var args = '(' + (this.getArgs() || []).join(',') + ')';\n\t var fileName = this.getFileName() ? ('@' + this.getFileName()) : '';\n\t var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : '';\n\t var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : '';\n\t return functionName + args + fileName + lineNumber + columnNumber;\n\t }\n\t };\n\t\n\t return StackFrame;\n\t}));\n\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\t\n\tfunction itemToPayload(item, options, callback) {\n\t var payloadOptions = options.payload || {};\n\t if (payloadOptions.body) {\n\t delete payloadOptions.body;\n\t }\n\t\n\t var data = _.extend(true, {}, item.data, payloadOptions);\n\t if (item._isUncaught) {\n\t data._isUncaught = true;\n\t }\n\t if (item._originalArgs) {\n\t data._originalArgs = item._originalArgs;\n\t }\n\t callback(null, data);\n\t}\n\t\n\tfunction addTelemetryData(item, options, callback) {\n\t if (item.telemetryEvents) {\n\t _.set(item, 'data.body.telemetry', item.telemetryEvents);\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction addMessageWithError(item, options, callback) {\n\t if (!item.message) {\n\t callback(null, item);\n\t return;\n\t }\n\t var tracePath = 'data.body.trace_chain.0';\n\t var trace = _.get(item, tracePath);\n\t if (!trace) {\n\t tracePath = 'data.body.trace';\n\t trace = _.get(item, tracePath);\n\t }\n\t if (trace) {\n\t if (!(trace.exception && trace.exception.description)) {\n\t _.set(item, tracePath+'.exception.description', item.message);\n\t callback(null, item);\n\t return;\n\t }\n\t var extra = _.get(item, tracePath+'.extra') || {};\n\t var newExtra = _.extend(true, {}, extra, {message: item.message});\n\t _.set(item, tracePath+'.extra', newExtra);\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction userTransform(logger) {\n\t return function(item, options, callback) {\n\t var newItem = _.extend(true, {}, item);\n\t try {\n\t if (_.isFunction(options.transform)) {\n\t options.transform(newItem.data);\n\t }\n\t } catch (e) {\n\t options.transform = null;\n\t logger.error('Error while calling custom transform() function. Removing custom transform().', e);\n\t callback(null, item);\n\t return;\n\t }\n\t callback(null, newItem);\n\t }\n\t}\n\t\n\tfunction addConfigToPayload(item, options, callback) {\n\t if (!options.sendConfig) {\n\t return callback(null, item);\n\t }\n\t var configKey = '_rollbarConfig';\n\t var custom = _.get(item, 'data.custom') || {};\n\t custom[configKey] = options;\n\t item.data.custom = custom;\n\t callback(null, item);\n\t}\n\t\n\tmodule.exports = {\n\t itemToPayload: itemToPayload,\n\t addTelemetryData: addTelemetryData,\n\t addMessageWithError: addMessageWithError,\n\t userTransform: userTransform,\n\t addConfigToPayload: addConfigToPayload\n\t};\n\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\t\n\tfunction checkIgnore(item, settings) {\n\t if (_.get(settings, 'plugins.jquery.ignoreAjaxErrors')) {\n\t return !_.get(item, 'body.message.extra.isAjax');\n\t }\n\t return true;\n\t}\n\t\n\tmodule.exports = {\n\t checkIgnore: checkIgnore\n\t};\n\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\t\n\tfunction checkLevel(item, settings) {\n\t var level = item.level;\n\t var levelVal = _.LEVELS[level] || 0;\n\t var reportLevel = settings.reportLevel;\n\t var reportLevelVal = _.LEVELS[reportLevel] || 0;\n\t\n\t if (levelVal < reportLevelVal) {\n\t return false;\n\t }\n\t return true;\n\t}\n\t\n\tfunction userCheckIgnore(logger) {\n\t return function(item, settings) {\n\t var isUncaught = !!item._isUncaught;\n\t delete item._isUncaught;\n\t var args = item._originalArgs;\n\t delete item._originalArgs;\n\t try {\n\t if (_.isFunction(settings.onSendCallback)) {\n\t settings.onSendCallback(isUncaught, args, item);\n\t }\n\t } catch (e) {\n\t settings.onSendCallback = null;\n\t logger.error('Error while calling onSendCallback, removing', e);\n\t }\n\t try {\n\t if (_.isFunction(settings.checkIgnore) && settings.checkIgnore(isUncaught, args, item)) {\n\t return false;\n\t }\n\t } catch (e) {\n\t settings.checkIgnore = null;\n\t logger.error('Error while calling custom checkIgnore(), removing', e);\n\t }\n\t return true;\n\t }\n\t}\n\t\n\tfunction urlIsNotBlacklisted(logger) {\n\t return function(item, settings) {\n\t return !urlIsOnAList(item, settings, 'blacklist', logger);\n\t }\n\t}\n\t\n\tfunction urlIsWhitelisted(logger) {\n\t return function(item, settings) {\n\t return urlIsOnAList(item, settings, 'whitelist', logger);\n\t }\n\t}\n\t\n\tfunction urlIsOnAList(item, settings, whiteOrBlack, logger) {\n\t // whitelist is the default\n\t var black = false;\n\t if (whiteOrBlack === 'blacklist') {\n\t black = true;\n\t }\n\t var list, trace, frame, filename, frameLength, url, listLength, urlRegex;\n\t var i, j;\n\t\n\t try {\n\t list = black ? settings.hostBlackList : settings.hostWhiteList;\n\t listLength = list && list.length;\n\t trace = _.get(item, 'body.trace');\n\t\n\t // These two checks are important to come first as they are defaults\n\t // in case the list is missing or the trace is missing or not well-formed\n\t if (!list || listLength === 0) {\n\t return !black;\n\t }\n\t if (!trace || !trace.frames || trace.frames.length === 0) {\n\t return !black;\n\t }\n\t\n\t frameLength = trace.frames.length;\n\t for (i = 0; i < frameLength; i++) {\n\t frame = trace.frames[i];\n\t filename = frame.filename;\n\t\n\t if (!_.isType(filename, 'string')) {\n\t return !black;\n\t }\n\t\n\t for (j = 0; j < listLength; j++) {\n\t url = list[j];\n\t urlRegex = new RegExp(url);\n\t\n\t if (urlRegex.test(filename)) {\n\t return true;\n\t }\n\t }\n\t }\n\t } catch (e)\n\t /* istanbul ignore next */\n\t {\n\t if (black) {\n\t settings.hostBlackList = null;\n\t } else {\n\t settings.hostWhiteList = null;\n\t }\n\t var listName = black ? 'hostBlackList' : 'hostWhiteList';\n\t logger.error('Error while reading your configuration\\'s ' + listName + ' option. Removing custom ' + listName + '.', e);\n\t return !black;\n\t }\n\t return false;\n\t}\n\t\n\tfunction messageIsIgnored(logger) {\n\t return function(item, settings) {\n\t var exceptionMessage, i, ignoredMessages,\n\t len, messageIsIgnored, rIgnoredMessage,\n\t body, traceMessage, bodyMessage;\n\t\n\t try {\n\t messageIsIgnored = false;\n\t ignoredMessages = settings.ignoredMessages;\n\t\n\t if (!ignoredMessages || ignoredMessages.length === 0) {\n\t return true;\n\t }\n\t\n\t body = item.body;\n\t traceMessage = _.get(body, 'trace.exception.message');\n\t bodyMessage = _.get(body, 'message.body');\n\t\n\t exceptionMessage = traceMessage || bodyMessage;\n\t\n\t if (!exceptionMessage){\n\t return true;\n\t }\n\t\n\t len = ignoredMessages.length;\n\t for (i = 0; i < len; i++) {\n\t rIgnoredMessage = new RegExp(ignoredMessages[i], 'gi');\n\t messageIsIgnored = rIgnoredMessage.test(exceptionMessage);\n\t\n\t if (messageIsIgnored) {\n\t break;\n\t }\n\t }\n\t } catch(e)\n\t /* istanbul ignore next */\n\t {\n\t settings.ignoredMessages = null;\n\t logger.error('Error while reading your configuration\\'s ignoredMessages option. Removing custom ignoredMessages.');\n\t }\n\t\n\t return !messageIsIgnored;\n\t }\n\t}\n\t\n\tmodule.exports = {\n\t checkLevel: checkLevel,\n\t userCheckIgnore: userCheckIgnore,\n\t urlIsNotBlacklisted: urlIsNotBlacklisted,\n\t urlIsWhitelisted: urlIsWhitelisted,\n\t messageIsIgnored: messageIsIgnored\n\t};\n\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\tvar urlparser = __webpack_require__(18);\n\tvar domUtil = __webpack_require__(27);\n\t\n\tvar defaults = {\n\t network: true,\n\t networkResponseHeaders: false,\n\t networkResponseBody: false,\n\t networkRequestBody: false,\n\t log: true,\n\t dom: true,\n\t navigation: true,\n\t connectivity: true\n\t};\n\t\n\tfunction replace(obj, name, replacement, replacements, type) {\n\t var orig = obj[name];\n\t obj[name] = replacement(orig);\n\t if (replacements) {\n\t replacements[type].push([obj, name, orig]);\n\t }\n\t}\n\t\n\tfunction restore(replacements, type) {\n\t var b;\n\t while (replacements[type].length) {\n\t b = replacements[type].shift();\n\t b[0][b[1]] = b[2];\n\t }\n\t}\n\t\n\tfunction Instrumenter(options, telemeter, rollbar, _window, _document) {\n\t var autoInstrument = options.autoInstrument;\n\t if (options.enabled === false || autoInstrument === false) {\n\t this.autoInstrument = {};\n\t } else {\n\t if (!_.isType(autoInstrument, 'object')) {\n\t autoInstrument = defaults;\n\t }\n\t this.autoInstrument = _.extend(true, {}, defaults, autoInstrument);\n\t }\n\t this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n\t this.telemetryScrubber = options.telemetryScrubber;\n\t this.telemeter = telemeter;\n\t this.rollbar = rollbar;\n\t this._window = _window || {};\n\t this._document = _document || {};\n\t this.replacements = {\n\t network: [],\n\t log: [],\n\t navigation: [],\n\t connectivity: []\n\t };\n\t this.eventRemovers = {\n\t dom: [],\n\t connectivity: []\n\t };\n\t\n\t this._location = this._window.location;\n\t this._lastHref = this._location && this._location.href;\n\t}\n\t\n\tInstrumenter.prototype.configure = function(options) {\n\t var autoInstrument = options.autoInstrument;\n\t var oldSettings = _.extend(true, {}, this.autoInstrument);\n\t if (options.enabled === false || autoInstrument === false) {\n\t this.autoInstrument = {};\n\t } else {\n\t if (!_.isType(autoInstrument, 'object')) {\n\t autoInstrument = defaults;\n\t }\n\t this.autoInstrument = _.extend(true, {}, defaults, autoInstrument);\n\t }\n\t this.instrument(oldSettings);\n\t if (options.scrubTelemetryInputs !== undefined) {\n\t this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n\t }\n\t if (options.telemetryScrubber !== undefined) {\n\t this.telemetryScrubber = options.telemetryScrubber;\n\t }\n\t};\n\t\n\tInstrumenter.prototype.instrument = function(oldSettings) {\n\t if (this.autoInstrument.network && !(oldSettings && oldSettings.network)) {\n\t this.instrumentNetwork();\n\t } else if (!this.autoInstrument.network && oldSettings && oldSettings.network) {\n\t this.deinstrumentNetwork();\n\t }\n\t\n\t if (this.autoInstrument.log && !(oldSettings && oldSettings.log)) {\n\t this.instrumentConsole();\n\t } else if (!this.autoInstrument.log && oldSettings && oldSettings.log) {\n\t this.deinstrumentConsole();\n\t }\n\t\n\t if (this.autoInstrument.dom && !(oldSettings && oldSettings.dom)) {\n\t this.instrumentDom();\n\t } else if (!this.autoInstrument.dom && oldSettings && oldSettings.dom) {\n\t this.deinstrumentDom();\n\t }\n\t\n\t if (this.autoInstrument.navigation && !(oldSettings && oldSettings.navigation)) {\n\t this.instrumentNavigation();\n\t } else if (!this.autoInstrument.navigation && oldSettings && oldSettings.navigation) {\n\t this.deinstrumentNavigation();\n\t }\n\t\n\t if (this.autoInstrument.connectivity && !(oldSettings && oldSettings.connectivity)) {\n\t this.instrumentConnectivity();\n\t } else if (!this.autoInstrument.connectivity && oldSettings && oldSettings.connectivity) {\n\t this.deinstrumentConnectivity();\n\t }\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentNetwork = function() {\n\t restore(this.replacements, 'network');\n\t};\n\t\n\tInstrumenter.prototype.instrumentNetwork = function() {\n\t var self = this;\n\t\n\t function wrapProp(prop, xhr) {\n\t if (prop in xhr && _.isFunction(xhr[prop])) {\n\t replace(xhr, prop, function(orig) {\n\t return self.rollbar.wrap(orig);\n\t });\n\t }\n\t }\n\t\n\t if ('XMLHttpRequest' in this._window) {\n\t var xhrp = this._window.XMLHttpRequest.prototype;\n\t replace(xhrp, 'open', function(orig) {\n\t return function(method, url) {\n\t if (_.isType(url, 'string')) {\n\t this.__rollbar_xhr = {\n\t method: method,\n\t url: url,\n\t status_code: null,\n\t start_time_ms: _.now(),\n\t end_time_ms: null\n\t };\n\t }\n\t return orig.apply(this, arguments);\n\t };\n\t }, this.replacements, 'network');\n\t\n\t replace(xhrp, 'send', function(orig) {\n\t /* eslint-disable no-unused-vars */\n\t return function(data) {\n\t /* eslint-enable no-unused-vars */\n\t var xhr = this;\n\t\n\t function onreadystatechangeHandler() {\n\t if (xhr.__rollbar_xhr && (xhr.readyState === 1 || xhr.readyState === 4)) {\n\t if (xhr.__rollbar_xhr.status_code === null) {\n\t xhr.__rollbar_xhr.status_code = 0;\n\t var requestData = null;\n\t if (self.autoInstrument.networkRequestBody) {\n\t requestData = data;\n\t }\n\t xhr.__rollbar_event = self.telemeter.captureNetwork(xhr.__rollbar_xhr, 'xhr', undefined, requestData);\n\t }\n\t if (xhr.readyState === 1) {\n\t xhr.__rollbar_xhr.start_time_ms = _.now();\n\t } else {\n\t xhr.__rollbar_xhr.end_time_ms = _.now();\n\t\n\t var headers = null;\n\t if (self.autoInstrument.networkResponseHeaders) {\n\t var headersConfig = self.autoInstrument.networkResponseHeaders;\n\t headers = {};\n\t try {\n\t var header, i;\n\t if (headersConfig === true) {\n\t var allHeaders = xhr.getAllResponseHeaders();\n\t if (allHeaders) {\n\t var arr = allHeaders.trim().split(/[\\r\\n]+/);\n\t var parts, value;\n\t for (i=0; i < arr.length; i++) {\n\t parts = arr[i].split(': ');\n\t header = parts.shift();\n\t value = parts.join(': ');\n\t headers[header] = value;\n\t }\n\t }\n\t } else {\n\t for (i=0; i < headersConfig.length; i++) {\n\t header = headersConfig[i];\n\t headers[header] = xhr.getResponseHeader(header);\n\t }\n\t }\n\t } catch (e) {\n\t /* we ignore the errors here that could come from different\n\t * browser issues with the xhr methods */\n\t }\n\t }\n\t var body = null;\n\t if (self.autoInstrument.networkResponseBody) {\n\t try {\n\t body = xhr.responseText;\n\t } catch (e) {\n\t /* ignore errors from reading responseText */\n\t }\n\t }\n\t var response = null;\n\t if (body || headers) {\n\t response = {};\n\t if (body) {\n\t response.body = body;\n\t }\n\t if (headers) {\n\t response.headers = headers;\n\t }\n\t }\n\t if (response) {\n\t xhr.__rollbar_xhr.response = response;\n\t }\n\t }\n\t try {\n\t var code = xhr.status;\n\t code = code === 1223 ? 204 : code;\n\t xhr.__rollbar_xhr.status_code = code;\n\t xhr.__rollbar_event.level = self.telemeter.levelFromStatus(code);\n\t } catch (e) {\n\t /* ignore possible exception from xhr.status */\n\t }\n\t }\n\t }\n\t\n\t wrapProp('onload', xhr);\n\t wrapProp('onerror', xhr);\n\t wrapProp('onprogress', xhr);\n\t\n\t if ('onreadystatechange' in xhr && _.isFunction(xhr.onreadystatechange)) {\n\t replace(xhr, 'onreadystatechange', function(orig) {\n\t return self.rollbar.wrap(orig, undefined, onreadystatechangeHandler);\n\t });\n\t } else {\n\t xhr.onreadystatechange = onreadystatechangeHandler;\n\t }\n\t return orig.apply(this, arguments);\n\t }\n\t }, this.replacements, 'network');\n\t }\n\t\n\t if ('fetch' in this._window) {\n\t replace(this._window, 'fetch', function(orig) {\n\t /* eslint-disable no-unused-vars */\n\t return function(fn, t) {\n\t /* eslint-enable no-unused-vars */\n\t var args = new Array(arguments.length);\n\t for (var i=0, len=args.length; i < len; i++) {\n\t args[i] = arguments[i];\n\t }\n\t var input = args[0];\n\t var method = 'GET';\n\t var url;\n\t if (_.isType(input, 'string')) {\n\t url = input;\n\t } else if (input) {\n\t url = input.url;\n\t if (input.method) {\n\t method = input.method;\n\t }\n\t }\n\t if (args[1] && args[1].method) {\n\t method = args[1].method;\n\t }\n\t var metadata = {\n\t method: method,\n\t url: url,\n\t status_code: null,\n\t start_time_ms: _.now(),\n\t end_time_ms: null\n\t };\n\t var requestData = null;\n\t if (self.autoInstrument.networkRequestBody) {\n\t if (args[1] && args[1].body) {\n\t requestData = args[1].body;\n\t } else if (args[0] && !_.isType(args[0], 'string') && args[0].body) {\n\t requestData = args[0].body;\n\t }\n\t }\n\t self.telemeter.captureNetwork(metadata, 'fetch', undefined, requestData);\n\t return orig.apply(this, args).then(function (resp) {\n\t metadata.end_time_ms = _.now();\n\t metadata.status_code = resp.status;\n\t var headers = null;\n\t if (self.autoInstrument.networkResponseHeaders) {\n\t var headersConfig = self.autoInstrument.networkResponseHeaders;\n\t headers = {};\n\t try {\n\t if (headersConfig === true) {\n\t // This is unsupported in IE so we can't do it\n\t /*\n\t var allHeaders = resp.headers.entries();\n\t for (var pair of allHeaders) {\n\t headers[pair[0]] = pair[1];\n\t }\n\t */\n\t } else {\n\t for (var i=0; i < headersConfig.length; i++) {\n\t var header = headersConfig[i];\n\t headers[header] = resp.headers.get(header);\n\t }\n\t }\n\t } catch (e) {\n\t /* ignore probable IE errors */\n\t }\n\t }\n\t var response = null;\n\t if (headers) {\n\t response = {\n\t headers: headers\n\t };\n\t }\n\t if (response) {\n\t metadata.response = response;\n\t }\n\t return resp;\n\t });\n\t };\n\t }, this.replacements, 'network');\n\t }\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentConsole = function() {\n\t if (!('console' in this._window && this._window.console.log)) {\n\t return;\n\t }\n\t var b;\n\t while (this.replacements['log'].length) {\n\t b = this.replacements['log'].shift();\n\t this._window.console[b[0]] = b[1];\n\t }\n\t};\n\t\n\tInstrumenter.prototype.instrumentConsole = function() {\n\t if (!('console' in this._window && this._window.console.log)) {\n\t return;\n\t }\n\t\n\t var self = this;\n\t var c = this._window.console;\n\t\n\t function wrapConsole(method) {\n\t var orig = c[method];\n\t var origConsole = c;\n\t var level = method === 'warn' ? 'warning' : method;\n\t c[method] = function() {\n\t var args = Array.prototype.slice.call(arguments);\n\t var message = _.formatArgsAsString(args);\n\t self.telemeter.captureLog(message, level);\n\t if (orig) {\n\t Function.prototype.apply.call(orig, origConsole, args);\n\t }\n\t };\n\t self.replacements['log'].push([method, orig]);\n\t }\n\t var methods = ['debug','info','warn','error','log'];\n\t for (var i=0, len=methods.length; i < len; i++) {\n\t wrapConsole(methods[i]);\n\t }\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentDom = function() {\n\t if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n\t return;\n\t }\n\t this.removeListeners('dom');\n\t};\n\t\n\tInstrumenter.prototype.instrumentDom = function() {\n\t if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n\t return;\n\t }\n\t var clickHandler = this.handleClick.bind(this);\n\t var blurHandler = this.handleBlur.bind(this);\n\t this.addListener('dom', this._window, 'click', 'onclick', clickHandler, true);\n\t this.addListener('dom', this._window, 'blur', 'onfocusout', blurHandler, true);\n\t};\n\t\n\tInstrumenter.prototype.handleClick = function(evt) {\n\t try {\n\t var e = domUtil.getElementFromEvent(evt, this._document);\n\t var hasTag = e && e.tagName;\n\t var anchorOrButton = domUtil.isDescribedElement(e, 'a') || domUtil.isDescribedElement(e, 'button');\n\t if (hasTag && (anchorOrButton || domUtil.isDescribedElement(e, 'input', ['button', 'submit']))) {\n\t this.captureDomEvent('click', e);\n\t } else if (domUtil.isDescribedElement(e, 'input', ['checkbox', 'radio'])) {\n\t this.captureDomEvent('input', e, e.value, e.checked);\n\t }\n\t } catch (exc) {\n\t // TODO: Not sure what to do here\n\t }\n\t};\n\t\n\tInstrumenter.prototype.handleBlur = function(evt) {\n\t try {\n\t var e = domUtil.getElementFromEvent(evt, this._document);\n\t if (e && e.tagName) {\n\t if (domUtil.isDescribedElement(e, 'textarea')) {\n\t this.captureDomEvent('input', e, e.value);\n\t } else if (domUtil.isDescribedElement(e, 'select') && e.options && e.options.length) {\n\t this.handleSelectInputChanged(e);\n\t } else if (domUtil.isDescribedElement(e, 'input') && !domUtil.isDescribedElement(e, 'input', ['button', 'submit', 'hidden', 'checkbox', 'radio'])) {\n\t this.captureDomEvent('input', e, e.value);\n\t }\n\t }\n\t } catch (exc) {\n\t // TODO: Not sure what to do here\n\t }\n\t};\n\t\n\tInstrumenter.prototype.handleSelectInputChanged = function(elem) {\n\t if (elem.multiple) {\n\t for (var i = 0; i < elem.options.length; i++) {\n\t if (elem.options[i].selected) {\n\t this.captureDomEvent('input', elem, elem.options[i].value);\n\t }\n\t }\n\t } else if (elem.selectedIndex >= 0 && elem.options[elem.selectedIndex]) {\n\t this.captureDomEvent('input', elem, elem.options[elem.selectedIndex].value);\n\t }\n\t};\n\t\n\tInstrumenter.prototype.captureDomEvent = function(subtype, element, value, isChecked) {\n\t if (value !== undefined) {\n\t if (this.scrubTelemetryInputs || (domUtil.getElementType(element) === 'password')) {\n\t value = '[scrubbed]';\n\t } else if (this.telemetryScrubber) {\n\t var description = domUtil.describeElement(element);\n\t if (this.telemetryScrubber(description)) {\n\t value = '[scrubbed]';\n\t }\n\t }\n\t }\n\t var elementString = domUtil.elementArrayToString(domUtil.treeToArray(element));\n\t this.telemeter.captureDom(subtype, elementString, value, isChecked);\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentNavigation = function() {\n\t var chrome = this._window.chrome;\n\t var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n\t // See https://github.com/angular/angular.js/pull/13945/files\n\t var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n\t if (!hasPushState) {\n\t return;\n\t }\n\t restore(this.replacements, 'navigation');\n\t};\n\t\n\tInstrumenter.prototype.instrumentNavigation = function() {\n\t var chrome = this._window.chrome;\n\t var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n\t // See https://github.com/angular/angular.js/pull/13945/files\n\t var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n\t if (!hasPushState) {\n\t return;\n\t }\n\t var self = this;\n\t replace(this._window, 'onpopstate', function(orig) {\n\t return function() {\n\t var current = self._location.href;\n\t self.handleUrlChange(self._lastHref, current);\n\t if (orig) {\n\t orig.apply(this, arguments);\n\t }\n\t };\n\t }, this.replacements, 'navigation');\n\t\n\t replace(this._window.history, 'pushState', function(orig) {\n\t return function() {\n\t var url = arguments.length > 2 ? arguments[2] : undefined;\n\t if (url) {\n\t self.handleUrlChange(self._lastHref, url + '');\n\t }\n\t return orig.apply(this, arguments);\n\t };\n\t }, this.replacements, 'navigation');\n\t};\n\t\n\tInstrumenter.prototype.handleUrlChange = function(from, to) {\n\t var parsedHref = urlparser.parse(this._location.href);\n\t var parsedTo = urlparser.parse(to);\n\t var parsedFrom = urlparser.parse(from);\n\t this._lastHref = to;\n\t if (parsedHref.protocol === parsedTo.protocol && parsedHref.host === parsedTo.host) {\n\t to = parsedTo.path + (parsedTo.hash || '');\n\t }\n\t if (parsedHref.protocol === parsedFrom.protocol && parsedHref.host === parsedFrom.host) {\n\t from = parsedFrom.path + (parsedFrom.hash || '');\n\t }\n\t this.telemeter.captureNavigation(from, to);\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentConnectivity = function() {\n\t if (!('addEventListener' in this._window || 'body' in this._document)) {\n\t return;\n\t }\n\t if (this._window.addEventListener) {\n\t this.removeListeners('connectivity');\n\t } else {\n\t restore(this.replacements, 'connectivity');\n\t }\n\t};\n\t\n\tInstrumenter.prototype.instrumentConnectivity = function() {\n\t if (!('addEventListener' in this._window || 'body' in this._document)) {\n\t return;\n\t }\n\t if (this._window.addEventListener) {\n\t this.addListener('connectivity', this._window, 'online', undefined, function() {\n\t this.telemeter.captureConnectivityChange('online');\n\t }.bind(this), true);\n\t this.addListener('connectivity', this._window, 'offline', undefined, function() {\n\t this.telemeter.captureConnectivityChange('offline');\n\t }.bind(this), true);\n\t } else {\n\t var self = this;\n\t replace(this._document.body, 'ononline', function(orig) {\n\t return function() {\n\t self.telemeter.captureConnectivityChange('online');\n\t if (orig) {\n\t orig.apply(this, arguments);\n\t }\n\t }\n\t }, this.replacements, 'connectivity');\n\t replace(this._document.body, 'onoffline', function(orig) {\n\t return function() {\n\t self.telemeter.captureConnectivityChange('offline');\n\t if (orig) {\n\t orig.apply(this, arguments);\n\t }\n\t }\n\t }, this.replacements, 'connectivity');\n\t }\n\t};\n\t\n\tInstrumenter.prototype.addListener = function(section, obj, type, altType, handler, capture) {\n\t if (obj.addEventListener) {\n\t obj.addEventListener(type, handler, capture);\n\t this.eventRemovers[section].push(function() {\n\t obj.removeEventListener(type, handler, capture);\n\t });\n\t } else if (altType) {\n\t obj.attachEvent(altType, handler);\n\t this.eventRemovers[section].push(function() {\n\t obj.detachEvent(altType, handler);\n\t });\n\t }\n\t};\n\t\n\tInstrumenter.prototype.removeListeners = function(section) {\n\t var r;\n\t while (this.eventRemovers[section].length) {\n\t r = this.eventRemovers[section].shift();\n\t r();\n\t }\n\t};\n\t\n\tmodule.exports = Instrumenter;\n\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tfunction getElementType(e) {\n\t return (e.getAttribute('type') || '').toLowerCase();\n\t}\n\t\n\tfunction isDescribedElement(element, type, subtypes) {\n\t if (element.tagName.toLowerCase() !== type.toLowerCase()) {\n\t return false;\n\t }\n\t if (!subtypes) {\n\t return true;\n\t }\n\t element = getElementType(element);\n\t for (var i = 0; i < subtypes.length; i++) {\n\t if (subtypes[i] === element) {\n\t return true;\n\t }\n\t }\n\t return false;\n\t}\n\t\n\tfunction getElementFromEvent(evt, doc) {\n\t if (evt.target) {\n\t return evt.target;\n\t }\n\t if (doc && doc.elementFromPoint) {\n\t return doc.elementFromPoint(evt.clientX, evt.clientY);\n\t }\n\t return undefined;\n\t}\n\t\n\tfunction treeToArray(elem) {\n\t var MAX_HEIGHT = 5;\n\t var out = [];\n\t var nextDescription;\n\t for (var height = 0; elem && height < MAX_HEIGHT; height++) {\n\t nextDescription = describeElement(elem);\n\t if (nextDescription.tagName === 'html') {\n\t break;\n\t }\n\t out.unshift(nextDescription);\n\t elem = elem.parentNode;\n\t }\n\t return out;\n\t}\n\t\n\tfunction elementArrayToString(a) {\n\t var MAX_LENGTH = 80;\n\t var separator = ' > ', separatorLength = separator.length;\n\t var out = [], len = 0, nextStr, totalLength;\n\t\n\t for (var i = a.length - 1; i >= 0; i--) {\n\t nextStr = descriptionToString(a[i]);\n\t totalLength = len + (out.length * separatorLength) + nextStr.length;\n\t if (i < a.length - 1 && totalLength >= MAX_LENGTH + 3) {\n\t out.unshift('...');\n\t break;\n\t }\n\t out.unshift(nextStr);\n\t len += nextStr.length;\n\t }\n\t return out.join(separator);\n\t}\n\t\n\tfunction descriptionToString(desc) {\n\t if (!desc || !desc.tagName) {\n\t return '';\n\t }\n\t var out = [desc.tagName];\n\t if (desc.id) {\n\t out.push('#' + desc.id);\n\t }\n\t if (desc.classes) {\n\t out.push('.' + desc.classes.join('.'));\n\t }\n\t for (var i = 0; i < desc.attributes.length; i++) {\n\t out.push('[' + desc.attributes[i].key + '=\"' + desc.attributes[i].value + '\"]');\n\t }\n\t\n\t return out.join('');\n\t}\n\t\n\t/**\n\t * Input: a dom element\n\t * Output: null if tagName is falsey or input is falsey, else\n\t * {\n\t * tagName: String,\n\t * id: String | undefined,\n\t * classes: [String] | undefined,\n\t * attributes: [\n\t * {\n\t * key: OneOf(type, name, title, alt),\n\t * value: String\n\t * }\n\t * ]\n\t * }\n\t */\n\tfunction describeElement(elem) {\n\t if (!elem || !elem.tagName) {\n\t return null;\n\t }\n\t var out = {}, className, key, attr, i;\n\t out.tagName = elem.tagName.toLowerCase();\n\t if (elem.id) {\n\t out.id = elem.id;\n\t }\n\t className = elem.className;\n\t if (className && (typeof className === 'string')) {\n\t out.classes = className.split(/\\s+/);\n\t }\n\t var attributes = ['type', 'name', 'title', 'alt'];\n\t out.attributes = [];\n\t for (i = 0; i < attributes.length; i++) {\n\t key = attributes[i];\n\t attr = elem.getAttribute(key);\n\t if (attr) {\n\t out.attributes.push({key: key, value: attr});\n\t }\n\t }\n\t return out;\n\t}\n\t\n\tmodule.exports = {\n\t describeElement: describeElement,\n\t descriptionToString: descriptionToString,\n\t elementArrayToString: elementArrayToString,\n\t treeToArray: treeToArray,\n\t getElementFromEvent: getElementFromEvent,\n\t isDescribedElement: isDescribedElement,\n\t getElementType: getElementType\n\t};\n\n\n/***/ })\n/******/ ])});;\n\n\n// WEBPACK FOOTER //\n// rollbar.named-amd.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 4f791ad5f31f456ca083","'use strict';\n\nvar rollbar = require('../rollbar');\n\nvar options = (typeof window !== 'undefined') && window._rollbarConfig;\nvar alias = options && options.globalAlias || 'Rollbar';\nvar shimRunning = (typeof window !== 'undefined') && window[alias] && typeof window[alias].shimId === 'function' && window[alias].shimId() !== undefined;\n\nif ((typeof window !== 'undefined') && !window._rollbarStartTime) {\n window._rollbarStartTime = (new Date()).getTime();\n}\n\nif (!shimRunning && options) {\n var Rollbar = new rollbar(options);\n window[alias] = Rollbar;\n} else if (typeof window !== 'undefined') {\n window.rollbar = rollbar;\n window._rollbarDidLoad = true;\n} else if (typeof self !== 'undefined') {\n self.rollbar = rollbar;\n self._rollbarDidLoad = true;\n}\n\nmodule.exports = rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/bundles/rollbar.js\n// module id = 1\n// module chunks = 0","'use strict';\n\nvar Client = require('../rollbar');\nvar _ = require('../utility');\nvar API = require('../api');\nvar logger = require('./logger');\nvar globals = require('./globalSetup');\n\nvar transport = require('./transport');\nvar urllib = require('./url');\n\nvar transforms = require('./transforms');\nvar sharedTransforms = require('../transforms');\nvar predicates = require('./predicates');\nvar sharedPredicates = require('../predicates');\nvar errorParser = require('./errorParser');\nvar Instrumenter = require('./telemetry');\n\nfunction Rollbar(options, client) {\n this.options = _.extend(true, defaultOptions, options);\n var api = new API(this.options, transport, urllib);\n this.client = client || new Client(this.options, api, logger, 'browser');\n\n var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n var gDocument = (typeof document != 'undefined') && document;\n addTransformsToNotifier(this.client.notifier);\n addPredicatesToQueue(this.client.queue);\n if (this.options.captureUncaught || this.options.handleUncaughtExceptions) {\n globals.captureUncaughtExceptions(gWindow, this);\n globals.wrapGlobals(gWindow, this);\n }\n if (this.options.captureUnhandledRejections || this.options.handleUnhandledRejections) {\n globals.captureUnhandledRejections(gWindow, this);\n }\n\n this.instrumenter = new Instrumenter(this.options, this.client.telemeter, this, gWindow, gDocument);\n this.instrumenter.instrument();\n}\n\nvar _instance = null;\nRollbar.init = function(options, client) {\n if (_instance) {\n return _instance.global(options).configure(options);\n }\n _instance = new Rollbar(options, client);\n return _instance;\n};\n\nfunction handleUninitialized(maybeCallback) {\n var message = 'Rollbar is not initialized';\n logger.error(message);\n if (maybeCallback) {\n maybeCallback(new Error(message));\n }\n}\n\nRollbar.prototype.global = function(options) {\n this.client.global(options);\n return this;\n};\nRollbar.global = function(options) {\n if (_instance) {\n return _instance.global(options);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.extend(true, {}, oldOptions, options, payload);\n this.client.configure(options, payloadData);\n this.instrumenter.configure(options);\n return this;\n};\nRollbar.configure = function(options, payloadData) {\n if (_instance) {\n return _instance.configure(options, payloadData);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.lastError = function() {\n return this.client.lastError;\n};\nRollbar.lastError = function() {\n if (_instance) {\n return _instance.lastError();\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.log = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.log(item);\n return {uuid: uuid};\n};\nRollbar.log = function() {\n if (_instance) {\n return _instance.log.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.debug = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.debug(item);\n return {uuid: uuid};\n};\nRollbar.debug = function() {\n if (_instance) {\n return _instance.debug.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.info = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.info(item);\n return {uuid: uuid};\n};\nRollbar.info = function() {\n if (_instance) {\n return _instance.info.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warn = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warn(item);\n return {uuid: uuid};\n};\nRollbar.warn = function() {\n if (_instance) {\n return _instance.warn.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warning = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warning(item);\n return {uuid: uuid};\n};\nRollbar.warning = function() {\n if (_instance) {\n return _instance.warning.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.error = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.error(item);\n return {uuid: uuid};\n};\nRollbar.error = function() {\n if (_instance) {\n return _instance.error.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.critical = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.critical(item);\n return {uuid: uuid};\n};\nRollbar.critical = function() {\n if (_instance) {\n return _instance.critical.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.handleUncaughtException = function(message, url, lineno, colno, error, context) {\n var item;\n var stackInfo = _.makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n 'onerror',\n 'uncaught exception',\n errorParser\n );\n if (_.isError(error)) {\n item = this._createItem([message, error, context]);\n item._unhandledStackInfo = stackInfo;\n } else if (_.isError(url)) {\n item = this._createItem([message, url, context]);\n item._unhandledStackInfo = stackInfo;\n } else {\n item = this._createItem([message, context]);\n item.stackInfo = stackInfo;\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n this.client.log(item);\n};\n\nRollbar.prototype.handleUnhandledRejection = function(reason, promise) {\n var message = 'unhandled rejection was null or undefined!';\n message = reason ? (reason.message || String(reason)) : message;\n var context = (reason && reason._rollbarContext) || (promise && promise._rollbarContext);\n\n var item;\n if (_.isError(reason)) {\n item = this._createItem([message, reason, context]);\n } else {\n item = this._createItem([message, reason, context]);\n item.stackInfo = _.makeUnhandledStackInfo(\n message,\n '',\n 0,\n 0,\n null,\n 'unhandledrejection',\n '',\n errorParser\n );\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n item._originalArgs = item._originalArgs || [];\n item._originalArgs.push(promise);\n this.client.log(item);\n};\n\nRollbar.prototype.wrap = function(f, context, _before) {\n try {\n var ctxFn;\n if(_.isFunction(context)) {\n ctxFn = context;\n } else {\n ctxFn = function() { return context || {}; };\n }\n\n if (!_.isFunction(f)) {\n return f;\n }\n\n if (f._isWrap) {\n return f;\n }\n\n if (!f._rollbar_wrapped) {\n f._rollbar_wrapped = function () {\n if (_before && _.isFunction(_before)) {\n _before.apply(this, arguments);\n }\n try {\n return f.apply(this, arguments);\n } catch(exc) {\n var e = exc;\n if (_.isType(e, 'string')) {\n e = new String(e);\n }\n e._rollbarContext = ctxFn() || {};\n e._rollbarContext._wrappedSource = f.toString();\n\n window._rollbarWrappedError = e;\n throw e;\n }\n };\n\n f._rollbar_wrapped._isWrap = true;\n\n if (f.hasOwnProperty) {\n for (var prop in f) {\n if (f.hasOwnProperty(prop)) {\n f._rollbar_wrapped[prop] = f[prop];\n }\n }\n }\n }\n\n return f._rollbar_wrapped;\n } catch (e) {\n // Return the original function if the wrap fails.\n return f;\n }\n};\nRollbar.wrap = function(f, context) {\n if (_instance) {\n return _instance.wrap(f, context);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.captureEvent = function(metadata, level) {\n return this.client.captureEvent(metadata, level);\n};\nRollbar.captureEvent = function(metadata, level) {\n if (_instance) {\n return _instance.captureEvent(metadata, level);\n } else {\n handleUninitialized();\n }\n};\n\n// The following two methods are used internally and are not meant for public use\nRollbar.prototype.captureDomContentLoaded = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureLoad(ts);\n};\n\n/* Internal */\n\nfunction addTransformsToNotifier(notifier) {\n notifier\n .addTransform(transforms.handleItemWithError)\n .addTransform(transforms.ensureItemHasSomethingToSay)\n .addTransform(transforms.addBaseInfo)\n .addTransform(transforms.addRequestInfo(window))\n .addTransform(transforms.addClientInfo(window))\n .addTransform(transforms.addPluginInfo(window))\n .addTransform(transforms.addBody)\n .addTransform(sharedTransforms.addMessageWithError)\n .addTransform(sharedTransforms.addTelemetryData)\n .addTransform(sharedTransforms.addConfigToPayload)\n .addTransform(transforms.scrubPayload)\n .addTransform(sharedTransforms.userTransform(logger))\n .addTransform(sharedTransforms.itemToPayload);\n}\n\nfunction addPredicatesToQueue(queue) {\n queue\n .addPredicate(sharedPredicates.checkLevel)\n .addPredicate(predicates.checkIgnore)\n .addPredicate(sharedPredicates.userCheckIgnore(logger))\n .addPredicate(sharedPredicates.urlIsNotBlacklisted(logger))\n .addPredicate(sharedPredicates.urlIsWhitelisted(logger))\n .addPredicate(sharedPredicates.messageIsIgnored(logger));\n}\n\nRollbar.prototype._createItem = function(args) {\n return _.createItem(args, logger, this);\n};\n\nfunction _getFirstFunction(args) {\n for (var i = 0, len = args.length; i < len; ++i) {\n if (_.isFunction(args[i])) {\n return args[i];\n }\n }\n return undefined;\n}\n\n/* global __NOTIFIER_VERSION__:false */\n/* global __DEFAULT_BROWSER_SCRUB_FIELDS__:false */\n/* global __DEFAULT_LOG_LEVEL__:false */\n/* global __DEFAULT_REPORT_LEVEL__:false */\n/* global __DEFAULT_UNCAUGHT_ERROR_LEVEL:false */\n/* global __DEFAULT_ENDPOINT__:false */\n\nvar defaultOptions = {\n version: __NOTIFIER_VERSION__,\n scrubFields: __DEFAULT_BROWSER_SCRUB_FIELDS__,\n logLevel: __DEFAULT_LOG_LEVEL__,\n reportLevel: __DEFAULT_REPORT_LEVEL__,\n uncaughtErrorLevel: __DEFAULT_UNCAUGHT_ERROR_LEVEL,\n endpoint: __DEFAULT_ENDPOINT__,\n verbose: false,\n enabled: true,\n sendConfig: false,\n includeItemsInTelemetry: true\n};\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/rollbar.js\n// module id = 2\n// module chunks = 0","'use strict';\n\nvar RateLimiter = require('./rateLimiter');\nvar Queue = require('./queue');\nvar Notifier = require('./notifier');\nvar Telemeter = require('./telemetry');\nvar _ = require('./utility');\n\n/*\n * Rollbar - the interface to Rollbar\n *\n * @param options\n * @param api\n * @param logger\n */\nfunction Rollbar(options, api, logger, platform) {\n this.options = _.extend(true, {}, options);\n this.logger = logger;\n Rollbar.rateLimiter.configureGlobal(this.options);\n Rollbar.rateLimiter.setPlatformOptions(platform, this.options);\n this.queue = new Queue(Rollbar.rateLimiter, api, logger, this.options);\n this.notifier = new Notifier(this.queue, this.options);\n this.telemeter = new Telemeter(this.options);\n this.lastError = null;\n}\n\nvar defaultOptions = {\n maxItems: 0,\n itemsPerMinute: 60\n};\n\nRollbar.rateLimiter = new RateLimiter(defaultOptions);\n\nRollbar.prototype.global = function(options) {\n Rollbar.rateLimiter.configureGlobal(options);\n return this;\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n this.notifier && this.notifier.configure(options);\n this.telemeter && this.telemeter.configure(options);\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.extend(true, {}, oldOptions, options, payload);\n this.global(this.options);\n return this;\n};\n\nRollbar.prototype.log = function(item) {\n var level = this._defaultLogLevel();\n return this._log(level, item);\n};\n\nRollbar.prototype.debug = function(item) {\n this._log('debug', item);\n};\n\nRollbar.prototype.info = function(item) {\n this._log('info', item);\n};\n\nRollbar.prototype.warn = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.warning = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.error = function(item) {\n this._log('error', item);\n};\n\nRollbar.prototype.critical = function(item) {\n this._log('critical', item);\n};\n\nRollbar.prototype.wait = function(callback) {\n this.queue.wait(callback);\n};\n\nRollbar.prototype.captureEvent = function(metadata, level) {\n return this.telemeter.captureEvent(metadata, level);\n};\n\nRollbar.prototype.captureDomContentLoaded = function(ts) {\n return this.telemeter.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(ts) {\n return this.telemeter.captureLoad(ts);\n};\n\n/* Internal */\n\nRollbar.prototype._log = function(defaultLevel, item) {\n if (this._sameAsLastError(item)) {\n if (item.callback) {\n item.callback();\n }\n return;\n }\n try {\n var callback = null;\n if (item.callback) {\n callback = item.callback;\n delete item.callback;\n }\n item.level = item.level || defaultLevel;\n this.telemeter._captureRollbarItem(item);\n item.telemetryEvents = this.telemeter.copyEvents();\n this.notifier.log(item, callback);\n } catch (e) {\n this.logger.error(e)\n }\n};\n\nRollbar.prototype._defaultLogLevel = function() {\n return this.options.logLevel || 'debug';\n};\n\nRollbar.prototype._sameAsLastError = function(item) {\n if (this.lastError && this.lastError === item.err) {\n return true;\n }\n this.lastError = item.err;\n return false;\n};\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rollbar.js\n// module id = 3\n// module chunks = 0","'use strict';\n\n/*\n * RateLimiter - an object that encapsulates the logic for counting items sent to Rollbar\n *\n * @param options - the same options that are accepted by configureGlobal offered as a convenience\n */\nfunction RateLimiter(options) {\n this.startTime = (new Date()).getTime();\n this.counter = 0;\n this.perMinCounter = 0;\n this.platform = null;\n this.platformOptions = {};\n this.configureGlobal(options);\n}\n\nRateLimiter.globalSettings = {\n startTime: (new Date()).getTime(),\n maxItems: undefined,\n itemsPerMinute: undefined\n};\n\n/*\n * configureGlobal - set the global rate limiter options\n *\n * @param options - Only the following values are recognized:\n * startTime: a timestamp of the form returned by (new Date()).getTime()\n * maxItems: the maximum items\n * itemsPerMinute: the max number of items to send in a given minute\n */\nRateLimiter.prototype.configureGlobal = function(options) {\n if (options.startTime !== undefined) {\n RateLimiter.globalSettings.startTime = options.startTime;\n }\n if (options.maxItems !== undefined) {\n RateLimiter.globalSettings.maxItems = options.maxItems;\n }\n if (options.itemsPerMinute !== undefined) {\n RateLimiter.globalSettings.itemsPerMinute = options.itemsPerMinute;\n }\n};\n\n/*\n * shouldSend - determine if we should send a given item based on rate limit settings\n *\n * @param item - the item we are about to send\n * @returns An object with the following structure:\n * error: (Error|null)\n * shouldSend: bool\n * payload: (Object|null)\n * If shouldSend is false, the item passed as a parameter should not be sent to Rollbar, and\n * exactly one of error or payload will be non-null. If error is non-null, the returned Error will\n * describe the situation, but it means that we were already over a rate limit (either globally or\n * per minute) when this item was checked. If error is null, and therefore payload is non-null, it\n * means this item put us over the global rate limit and the payload should be sent to Rollbar in\n * place of the passed in item.\n */\nRateLimiter.prototype.shouldSend = function(item, now) {\n now = now || (new Date()).getTime();\n if (now - this.startTime >= 60000) {\n this.startTime = now;\n this.perMinCounter = 0;\n }\n\n var globalRateLimit = RateLimiter.globalSettings.maxItems;\n var globalRateLimitPerMin = RateLimiter.globalSettings.itemsPerMinute;\n\n if (checkRate(item, globalRateLimit, this.counter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimit + ' max items reached', false);\n } else if (checkRate(item, globalRateLimitPerMin, this.perMinCounter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimitPerMin + ' items per minute reached', false);\n }\n this.counter++;\n this.perMinCounter++;\n\n var shouldSend = !checkRate(item, globalRateLimit, this.counter);\n var perMinute = shouldSend;\n shouldSend = shouldSend && !checkRate(item, globalRateLimitPerMin, this.perMinCounter);\n return shouldSendValue(this.platform, this.platformOptions, null, shouldSend, globalRateLimit, globalRateLimitPerMin, perMinute);\n};\n\nRateLimiter.prototype.setPlatformOptions = function(platform, options) {\n this.platform = platform;\n this.platformOptions = options;\n};\n\n/* Helpers */\n\nfunction checkRate(item, limit, counter) {\n return !item.ignoreRateLimit && limit >= 1 && counter > limit;\n}\n\nfunction shouldSendValue(platform, options, error, shouldSend, globalRateLimit, limitPerMin, perMinute) {\n var payload = null;\n if (error) {\n error = new Error(error);\n }\n if (!error && !shouldSend) {\n payload = rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute);\n }\n return {error: error, shouldSend: shouldSend, payload: payload};\n}\n\nfunction rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute) {\n var environment = options.environment || (options.payload && options.payload.environment);\n var msg;\n if (perMinute) {\n msg = 'item per minute limit reached, ignoring errors until timeout';\n } else {\n msg = 'maxItems has been hit, ignoring errors until reset.';\n }\n var item = {\n body: {\n message: {\n body: msg,\n extra: {\n maxItems: globalRateLimit,\n itemsPerMinute: limitPerMin\n }\n }\n },\n language: 'javascript',\n environment: environment,\n notifier: {\n version: (options.notifier && options.notifier.version) || options.version\n }\n };\n if (platform === 'browser') {\n item.platform = 'browser';\n item.framework = 'browser-js';\n item.notifier.name = 'rollbar-browser-js';\n } else if (platform === 'server') {\n item.framework = options.framework || 'node-js';\n item.notifier.name = options.notifier.name;\n } else if (platform === 'react-native') {\n item.framework = options.framework || 'react-native';\n item.notifier.name = options.notifier.name;\n }\n return item;\n}\n\nmodule.exports = RateLimiter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rateLimiter.js\n// module id = 4\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Queue - an object which handles which handles a queue of items to be sent to Rollbar.\n * This object handles rate limiting via a passed in rate limiter, retries based on connection\n * errors, and filtering of items based on a set of configurable predicates. The communication to\n * the backend is performed via a given API object.\n *\n * @param rateLimiter - An object which conforms to the interface\n * rateLimiter.shouldSend(item) -> bool\n * @param api - An object which conforms to the interface\n * api.postItem(payload, function(err, response))\n * @param logger - An object used to log verbose messages if desired\n * @param options - see Queue.prototype.configure\n */\nfunction Queue(rateLimiter, api, logger, options) {\n this.rateLimiter = rateLimiter;\n this.api = api;\n this.logger = logger;\n this.options = options;\n this.predicates = [];\n this.pendingItems = [];\n this.pendingRequests = [];\n this.retryQueue = [];\n this.retryHandle = null;\n this.waitCallback = null;\n this.waitIntervalID = null;\n}\n\n/*\n * configure - updates the options this queue uses\n *\n * @param options\n */\nQueue.prototype.configure = function(options) {\n this.api && this.api.configure(options);\n var oldOptions = this.options;\n this.options = _.extend(true, {}, oldOptions, options);\n return this;\n};\n\n/*\n * addPredicate - adds a predicate to the end of the list of predicates for this queue\n *\n * @param predicate - function(item, options) -> (bool|{err: Error})\n * Returning true means that this predicate passes and the item is okay to go on the queue\n * Returning false means do not add the item to the queue, but it is not an error\n * Returning {err: Error} means do not add the item to the queue, and the given error explains why\n * Returning {err: undefined} is equivalent to returning true but don't do that\n */\nQueue.prototype.addPredicate = function(predicate) {\n if (_.isFunction(predicate)) {\n this.predicates.push(predicate);\n }\n return this;\n};\n\nQueue.prototype.addPendingItem = function(item) {\n this.pendingItems.push(item);\n};\n\nQueue.prototype.removePendingItem = function(item) {\n var idx = this.pendingItems.indexOf(item);\n if (idx !== -1) {\n this.pendingItems.splice(idx, 1);\n }\n};\n\n/*\n * addItem - Send an item to the Rollbar API if all of the predicates are satisfied\n *\n * @param item - The payload to send to the backend\n * @param callback - function(error, repsonse) which will be called with the response from the API\n * in the case of a success, otherwise response will be null and error will have a value. If both\n * error and response are null then the item was stopped by a predicate which did not consider this\n * to be an error condition, but nonetheless did not send the item to the API.\n * @param originalError - The original error before any transformations that is to be logged if any\n */\nQueue.prototype.addItem = function(item, callback, originalError, originalItem) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() { return; };\n }\n var predicateResult = this._applyPredicates(item);\n if (predicateResult.stop) {\n this.removePendingItem(originalItem);\n callback(predicateResult.err);\n return;\n }\n this._maybeLog(item, originalError);\n this.removePendingItem(originalItem);\n this.pendingRequests.push(item);\n try {\n this._makeApiRequest(item, function(err, resp) {\n this._dequeuePendingRequest(item);\n callback(err, resp);\n }.bind(this));\n } catch (e) {\n this._dequeuePendingRequest(item);\n callback(e);\n }\n};\n\n/*\n * wait - Stop any further errors from being added to the queue, and get called back when all items\n * currently processing have finished sending to the backend.\n *\n * @param callback - function() called when all pending items have been sent\n */\nQueue.prototype.wait = function(callback) {\n if (!_.isFunction(callback)) {\n return;\n }\n this.waitCallback = callback;\n if (this._maybeCallWait()) {\n return;\n }\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitIntervalID = setInterval(function() {\n this._maybeCallWait();\n }.bind(this), 500);\n};\n\n/* _applyPredicates - Sequentially applies the predicates that have been added to the queue to the\n * given item with the currently configured options.\n *\n * @param item - An item in the queue\n * @returns {stop: bool, err: (Error|null)} - stop being true means do not add item to the queue,\n * the error value should be passed up to a callbak if we are stopping.\n */\nQueue.prototype._applyPredicates = function(item) {\n var p = null;\n for (var i = 0, len = this.predicates.length; i < len; i++) {\n p = this.predicates[i](item, this.options);\n if (!p || p.err !== undefined) {\n return {stop: true, err: p.err};\n }\n }\n return {stop: false, err: null};\n};\n\n/*\n * _makeApiRequest - Send an item to Rollbar, callback when done, if there is an error make an\n * effort to retry if we are configured to do so.\n *\n * @param item - an item ready to send to the backend\n * @param callback - function(err, response)\n */\nQueue.prototype._makeApiRequest = function(item, callback) {\n var rateLimitResponse = this.rateLimiter.shouldSend(item);\n if (rateLimitResponse.shouldSend) {\n this.api.postItem(item, function(err, resp) {\n if (err) {\n this._maybeRetry(err, item, callback);\n } else {\n callback(err, resp);\n }\n }.bind(this));\n } else if (rateLimitResponse.error) {\n callback(rateLimitResponse.error);\n } else {\n this.api.postItem(rateLimitResponse.payload, callback);\n }\n};\n\n// These are errors basically mean there is no internet connection\nvar RETRIABLE_ERRORS = ['ECONNRESET', 'ENOTFOUND', 'ESOCKETTIMEDOUT', 'ETIMEDOUT', 'ECONNREFUSED', 'EHOSTUNREACH', 'EPIPE', 'EAI_AGAIN'];\n\n/*\n * _maybeRetry - Given the error returned by the API, decide if we should retry or just callback\n * with the error.\n *\n * @param err - an error returned by the API transport\n * @param item - the item that was trying to be sent when this error occured\n * @param callback - function(err, response)\n */\nQueue.prototype._maybeRetry = function(err, item, callback) {\n var shouldRetry = false;\n if (this.options.retryInterval) {\n for (var i = 0, len = RETRIABLE_ERRORS.length; i < len; i++) {\n if (err.code === RETRIABLE_ERRORS[i]) {\n shouldRetry = true;\n break;\n }\n }\n }\n if (shouldRetry) {\n this._retryApiRequest(item, callback);\n } else {\n callback(err);\n }\n};\n\n/*\n * _retryApiRequest - Add an item and a callback to a queue and possibly start a timer to process\n * that queue based on the retryInterval in the options for this queue.\n *\n * @param item - an item that failed to send due to an error we deem retriable\n * @param callback - function(err, response)\n */\nQueue.prototype._retryApiRequest = function(item, callback) {\n this.retryQueue.push({item: item, callback: callback});\n\n if (!this.retryHandle) {\n this.retryHandle = setInterval(function() {\n while (this.retryQueue.length) {\n var retryObject = this.retryQueue.shift();\n this._makeApiRequest(retryObject.item, retryObject.callback);\n }\n }.bind(this), this.options.retryInterval);\n }\n};\n\n/*\n * _dequeuePendingRequest - Removes the item from the pending request queue, this queue is used to\n * enable to functionality of providing a callback that clients can pass to `wait` to be notified\n * when the pending request queue has been emptied. This must be called when the API finishes\n * processing this item. If a `wait` callback is configured, it is called by this function.\n *\n * @param item - the item previously added to the pending request queue\n */\nQueue.prototype._dequeuePendingRequest = function(item) {\n var idx = this.pendingRequests.indexOf(item);\n if (idx !== -1) {\n this.pendingRequests.splice(idx, 1);\n this._maybeCallWait();\n }\n};\n\nQueue.prototype._maybeLog = function(data, originalError) {\n if (this.logger && this.options.verbose) {\n var message = originalError;\n message = message || _.get(data, 'body.trace.exception.message');\n message = message || _.get(data, 'body.trace_chain.0.exception.message');\n if (message) {\n this.logger.error(message);\n return;\n }\n message = _.get(data, 'body.message.body');\n if (message) {\n this.logger.log(message);\n }\n }\n};\n\nQueue.prototype._maybeCallWait = function() {\n if (_.isFunction(this.waitCallback) && this.pendingItems.length === 0 && this.pendingRequests.length === 0) {\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitCallback();\n return true;\n }\n return false;\n};\n\nmodule.exports = Queue;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/queue.js\n// module id = 5\n// module chunks = 0","'use strict';\n\nvar extend = require('extend');\n\nvar RollbarJSON = {};\nvar __initRollbarJSON = false;\nfunction setupJSON() {\n if (__initRollbarJSON) {\n return;\n }\n __initRollbarJSON = true;\n\n if (isDefined(JSON)) {\n if (isNativeFunction(JSON.stringify)) {\n RollbarJSON.stringify = JSON.stringify;\n }\n if (isNativeFunction(JSON.parse)) {\n RollbarJSON.parse = JSON.parse;\n }\n }\n if (!isFunction(RollbarJSON.stringify) || !isFunction(RollbarJSON.parse)) {\n var setupCustomJSON = require('../vendor/JSON-js/json3.js');\n setupCustomJSON(RollbarJSON);\n }\n}\nsetupJSON();\n\n/*\n * isType - Given a Javascript value and a string, returns true if the type of the value matches the\n * given string.\n *\n * @param x - any value\n * @param t - a lowercase string containing one of the following type names:\n * - undefined\n * - null\n * - error\n * - number\n * - boolean\n * - string\n * - symbol\n * - function\n * - object\n * - array\n * @returns true if x is of type t, otherwise false\n */\nfunction isType(x, t) {\n return t === typeName(x);\n}\n\n/*\n * typeName - Given a Javascript value, returns the type of the object as a string\n */\nfunction typeName(x) {\n var name = typeof x;\n if (name !== 'object') {\n return name;\n }\n if (!x) {\n return 'null';\n }\n if (x instanceof Error) {\n return 'error';\n }\n return ({}).toString.call(x).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n}\n\n/* isFunction - a convenience function for checking if a value is a function\n *\n * @param f - any value\n * @returns true if f is a function, otherwise false\n */\nfunction isFunction(f) {\n return isType(f, 'function');\n}\n\n/* isNativeFunction - a convenience function for checking if a value is a native JS function\n *\n * @param f - any value\n * @returns true if f is a native JS function, otherwise false\n */\nfunction isNativeFunction(f) {\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n var funcMatchString = Function.prototype.toString.call(Object.prototype.hasOwnProperty)\n .replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?');\n var reIsNative = RegExp('^' + funcMatchString + '$');\n return isObject(f) && reIsNative.test(f);\n}\n\n/* isObject - Checks if the argument is an object\n *\n * @param value - any value\n * @returns true is value is an object function is an object)\n*/\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/*\n * isDefined - a convenience function for checking if a value is not equal to undefined\n *\n * @param u - any value\n * @returns true if u is anything other than undefined\n */\nfunction isDefined(u) {\n return !isType(u, 'undefined');\n}\n\n/*\n * isIterable - convenience function for checking if a value can be iterated, essentially\n * whether it is an object or an array.\n *\n * @param i - any value\n * @returns true if i is an object or an array as determined by `typeName`\n */\nfunction isIterable(i) {\n var type = typeName(i);\n return (type === 'object' || type === 'array');\n}\n\n/*\n * isError - convenience function for checking if a value is of an error type\n *\n * @param e - any value\n * @returns true if e is an error\n */\nfunction isError(e) {\n return isType(e, 'error');\n}\n\nfunction traverse(obj, func, seen) {\n var k, v, i;\n var isObj = isType(obj, 'object');\n var isArray = isType(obj, 'array');\n var keys = [];\n\n if (isObj && seen.indexOf(obj) !== -1) {\n return obj;\n }\n seen.push(obj);\n\n if (isObj) {\n for (k in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, k)) {\n keys.push(k);\n }\n }\n } else if (isArray) {\n for (i = 0; i < obj.length; ++i) {\n keys.push(i);\n }\n }\n\n var result = isObj ? {} : [];\n for (i = 0; i < keys.length; ++i) {\n k = keys[i];\n v = obj[k];\n result[k] = func(k, v, seen);\n }\n\n return (keys.length != 0) ? result : obj;\n}\n\nfunction redact() {\n return '********';\n}\n\n// from http://stackoverflow.com/a/8809472/1138191\nfunction uuid4() {\n var d = now();\n var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (d + Math.random() * 16) % 16 | 0;\n d = Math.floor(d / 16);\n return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16);\n });\n return uuid;\n}\n\nvar LEVELS = {\n debug: 0,\n info: 1,\n warning: 2,\n error: 3,\n critical: 4\n};\n\nfunction sanitizeUrl(url) {\n var baseUrlParts = parseUri(url);\n // remove a trailing # if there is no anchor\n if (baseUrlParts.anchor === '') {\n baseUrlParts.source = baseUrlParts.source.replace('#', '');\n }\n\n url = baseUrlParts.source.replace('?' + baseUrlParts.query, '');\n return url;\n}\n\nvar parseUriOptions = {\n strictMode: false,\n key: [\n 'source',\n 'protocol',\n 'authority',\n 'userInfo',\n 'user',\n 'password',\n 'host',\n 'port',\n 'relative',\n 'path',\n 'directory',\n 'file',\n 'query',\n 'anchor'\n ],\n q: {\n name: 'queryKey',\n parser: /(?:^|&)([^&=]*)=?([^&]*)/g\n },\n parser: {\n strict: /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,\n loose: /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/\n }\n};\n\nfunction parseUri(str) {\n if (!isType(str, 'string')) {\n throw new Error('received invalid input');\n }\n\n var o = parseUriOptions;\n var m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str);\n var uri = {};\n var i = o.key.length;\n\n while (i--) {\n uri[o.key[i]] = m[i] || '';\n }\n\n uri[o.q.name] = {};\n uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {\n if ($1) {\n uri[o.q.name][$1] = $2;\n }\n });\n\n return uri;\n}\n\nfunction addParamsAndAccessTokenToPath(accessToken, options, params) {\n params = params || {};\n params.access_token = accessToken;\n var paramsArray = [];\n var k;\n for (k in params) {\n if (Object.prototype.hasOwnProperty.call(params, k)) {\n paramsArray.push([k, params[k]].join('='));\n }\n }\n var query = '?' + paramsArray.sort().join('&');\n\n options = options || {};\n options.path = options.path || '';\n var qs = options.path.indexOf('?');\n var h = options.path.indexOf('#');\n var p;\n if (qs !== -1 && (h === -1 || h > qs)) {\n p = options.path;\n options.path = p.substring(0,qs) + query + '&' + p.substring(qs+1);\n } else {\n if (h !== -1) {\n p = options.path;\n options.path = p.substring(0,h) + query + p.substring(h);\n } else {\n options.path = options.path + query;\n }\n }\n}\n\nfunction formatUrl(u, protocol) {\n protocol = protocol || u.protocol;\n if (!protocol && u.port) {\n if (u.port === 80) {\n protocol = 'http:';\n } else if (u.port === 443) {\n protocol = 'https:';\n }\n }\n protocol = protocol || 'https:';\n\n if (!u.hostname) {\n return null;\n }\n var result = protocol + '//' + u.hostname;\n if (u.port) {\n result = result + ':' + u.port;\n }\n if (u.path) {\n result = result + u.path;\n }\n return result;\n}\n\nfunction stringify(obj, backup) {\n var value, error;\n try {\n value = RollbarJSON.stringify(obj);\n } catch (jsonError) {\n if (backup && isFunction(backup)) {\n try {\n value = backup(obj);\n } catch (backupError) {\n error = backupError;\n }\n } else {\n error = jsonError;\n }\n }\n return {error: error, value: value};\n}\n\nfunction jsonParse(s) {\n var value, error;\n try {\n value = RollbarJSON.parse(s);\n } catch (e) {\n error = e;\n }\n return {error: error, value: value};\n}\n\nfunction makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n mode,\n backupMessage,\n errorParser\n) {\n var location = {\n url: url || '',\n line: lineno,\n column: colno\n };\n location.func = errorParser.guessFunctionName(location.url, location.line);\n location.context = errorParser.gatherContext(location.url, location.line);\n var href = document && document.location && document.location.href;\n var useragent = window && window.navigator && window.navigator.userAgent;\n return {\n 'mode': mode,\n 'message': error ? String(error) : (message || backupMessage),\n 'url': href,\n 'stack': [location],\n 'useragent': useragent\n };\n}\n\nfunction wrapCallback(logger, f) {\n return function(err, resp) {\n try {\n f(err, resp);\n } catch (e) {\n logger.error(e);\n }\n };\n}\n\nfunction createItem(args, logger, notifier, requestKeys, lambdaContext) {\n var message, err, custom, callback, request;\n var arg;\n var extraArgs = [];\n\n for (var i = 0, l = args.length; i < l; ++i) {\n arg = args[i];\n\n var typ = typeName(arg);\n switch (typ) {\n case 'undefined':\n break;\n case 'string':\n message ? extraArgs.push(arg) : message = arg;\n break;\n case 'function':\n callback = wrapCallback(logger, arg);\n break;\n case 'date':\n extraArgs.push(arg);\n break;\n case 'error':\n case 'domexception':\n err ? extraArgs.push(arg) : err = arg;\n break;\n case 'object':\n case 'array':\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n if (requestKeys && typ === 'object' && !request) {\n for (var j = 0, len = requestKeys.length; j < len; ++j) {\n if (arg[requestKeys[j]] !== undefined) {\n request = arg;\n break;\n }\n }\n if (request) {\n break;\n }\n }\n custom ? extraArgs.push(arg) : custom = arg;\n break;\n default:\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n extraArgs.push(arg);\n }\n }\n\n if (extraArgs.length > 0) {\n // if custom is an array this turns it into an object with integer keys\n custom = extend(true, {}, custom);\n custom.extraArgs = extraArgs;\n }\n\n var item = {\n message: message,\n err: err,\n custom: custom,\n timestamp: now(),\n callback: callback,\n uuid: uuid4()\n };\n if (custom && custom.level !== undefined) {\n item.level = custom.level;\n delete custom.level;\n }\n if (requestKeys && request) {\n item.request = request;\n }\n if (lambdaContext) {\n item.lambdaContext = lambdaContext;\n }\n item._originalArgs = args;\n return item;\n}\n\n/*\n * get - given an obj/array and a keypath, return the value at that keypath or\n * undefined if not possible.\n *\n * @param obj - an object or array\n * @param path - a string of keys separated by '.' such as 'plugin.jquery.0.message'\n * which would correspond to 42 in `{plugin: {jquery: [{message: 42}]}}`\n */\nfunction get(obj, path) {\n if (!obj) {\n return undefined;\n }\n var keys = path.split('.');\n var result = obj;\n try {\n for (var i = 0, len = keys.length; i < len; ++i) {\n result = result[keys[i]];\n }\n } catch (e) {\n result = undefined;\n }\n return result;\n}\n\nfunction set(obj, path, value) {\n if (!obj) {\n return;\n }\n var keys = path.split('.');\n var len = keys.length;\n if (len < 1) {\n return;\n }\n if (len === 1) {\n obj[keys[0]] = value;\n return;\n }\n try {\n var temp = obj[keys[0]] || {};\n var replacement = temp;\n for (var i = 1; i < len-1; i++) {\n temp[keys[i]] = temp[keys[i]] || {};\n temp = temp[keys[i]];\n }\n temp[keys[len-1]] = value;\n obj[keys[0]] = replacement;\n } catch (e) {\n return;\n }\n}\n\nfunction scrub(data, scrubFields) {\n scrubFields = scrubFields || [];\n var paramRes = _getScrubFieldRegexs(scrubFields);\n var queryRes = _getScrubQueryParamRegexs(scrubFields);\n\n function redactQueryParam(dummy0, paramPart, dummy1, dummy2, dummy3, valPart) {\n return paramPart + redact(valPart);\n }\n\n function paramScrubber(v) {\n var i;\n if (isType(v, 'string')) {\n for (i = 0; i < queryRes.length; ++i) {\n v = v.replace(queryRes[i], redactQueryParam);\n }\n }\n return v;\n }\n\n function valScrubber(k, v) {\n var i;\n for (i = 0; i < paramRes.length; ++i) {\n if (paramRes[i].test(k)) {\n v = redact(v);\n break;\n }\n }\n return v;\n }\n\n function scrubber(k, v, seen) {\n var tmpV = valScrubber(k, v);\n if (tmpV === v) {\n if (isType(v, 'object') || isType(v, 'array')) {\n return traverse(v, scrubber, seen);\n }\n return paramScrubber(tmpV);\n } else {\n return tmpV;\n }\n }\n\n return traverse(data, scrubber, []);\n}\n\nfunction _getScrubFieldRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '^\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?$';\n ret.push(new RegExp(pat, 'i'));\n }\n return ret;\n}\n\n\nfunction _getScrubQueryParamRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?';\n ret.push(new RegExp('(' + pat + '=)([^&\\\\n]+)', 'igm'));\n }\n return ret;\n}\n\nfunction formatArgsAsString(args) {\n var i, len, arg;\n var result = [];\n for (i = 0, len = args.length; i < len; i++) {\n arg = args[i];\n if (typeof arg === 'object') {\n arg = stringify(arg);\n arg = arg.error || arg.value;\n if (arg.length > 500)\n arg = arg.substr(0,500)+'...';\n } else if (typeof arg === 'undefined') {\n arg = 'undefined';\n }\n result.push(arg);\n }\n return result.join(' ');\n}\n\nfunction now() {\n if (Date.now) {\n return +Date.now();\n }\n return +new Date();\n}\n\nmodule.exports = {\n isType: isType,\n typeName: typeName,\n isFunction: isFunction,\n isNativeFunction: isNativeFunction,\n isIterable: isIterable,\n isError: isError,\n extend: extend,\n traverse: traverse,\n redact: redact,\n uuid4: uuid4,\n LEVELS: LEVELS,\n sanitizeUrl: sanitizeUrl,\n addParamsAndAccessTokenToPath: addParamsAndAccessTokenToPath,\n formatUrl: formatUrl,\n stringify: stringify,\n jsonParse: jsonParse,\n makeUnhandledStackInfo: makeUnhandledStackInfo,\n createItem: createItem,\n get: get,\n set: set,\n scrub: scrub,\n formatArgsAsString: formatArgsAsString,\n now: now\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/utility.js\n// module id = 6\n// module chunks = 0","'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) {/**/}\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[0],\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t} else if ((typeof target !== 'object' && typeof target !== 'function') || target == null) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = target[name];\n\t\t\t\tcopy = options[name];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\ttarget[name] = extend(deep, clone, copy);\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/extend/index.js\n// module id = 7\n// module chunks = 0","// json3.js\n// 2017-02-21\n// Public Domain.\n// NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n// See http://www.JSON.org/js.html\n// This code should be minified before deployment.\n// See http://javascript.crockford.com/jsmin.html\n\n// USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n// NOT CONTROL.\n\n// This file creates a global JSON object containing two methods: stringify\n// and parse. This file provides the ES5 JSON capability to ES3 systems.\n// If a project might run on IE8 or earlier, then this file should be included.\n// This file does nothing on ES5 systems.\n\n// JSON.stringify(value, replacer, space)\n// value any JavaScript value, usually an object or array.\n// replacer an optional parameter that determines how object\n// values are stringified for objects. It can be a\n// function or an array of strings.\n// space an optional parameter that specifies the indentation\n// of nested structures. If it is omitted, the text will\n// be packed without extra whitespace. If it is a number,\n// it will specify the number of spaces to indent at each\n// level. If it is a string (such as \"\\t\" or \" \"),\n// it contains the characters used to indent at each level.\n// This method produces a JSON text from a JavaScript value.\n// When an object value is found, if the object contains a toJSON\n// method, its toJSON method will be called and the result will be\n// stringified. A toJSON method does not serialize: it returns the\n// value represented by the name/value pair that should be serialized,\n// or undefined if nothing should be serialized. The toJSON method\n// will be passed the key associated with the value, and this will be\n// bound to the value.\n\n// For example, this would serialize Dates as ISO strings.\n\n// Date.prototype.toJSON = function (key) {\n// function f(n) {\n// // Format integers to have at least two digits.\n// return (n < 10)\n// ? \"0\" + n\n// : n;\n// }\n// return this.getUTCFullYear() + \"-\" +\n// f(this.getUTCMonth() + 1) + \"-\" +\n// f(this.getUTCDate()) + \"T\" +\n// f(this.getUTCHours()) + \":\" +\n// f(this.getUTCMinutes()) + \":\" +\n// f(this.getUTCSeconds()) + \"Z\";\n// };\n\n// You can provide an optional replacer method. It will be passed the\n// key and value of each member, with this bound to the containing\n// object. The value that is returned from your method will be\n// serialized. If your method returns undefined, then the member will\n// be excluded from the serialization.\n\n// If the replacer parameter is an array of strings, then it will be\n// used to select the members to be serialized. It filters the results\n// such that only members with keys listed in the replacer array are\n// stringified.\n\n// Values that do not have JSON representations, such as undefined or\n// functions, will not be serialized. Such values in objects will be\n// dropped; in arrays they will be replaced with null. You can use\n// a replacer function to replace those with JSON values.\n\n// JSON.stringify(undefined) returns undefined.\n\n// The optional space parameter produces a stringification of the\n// value that is filled with line breaks and indentation to make it\n// easier to read.\n\n// If the space parameter is a non-empty string, then that string will\n// be used for indentation. If the space parameter is a number, then\n// the indentation will be that many spaces.\n\n// Example:\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}]);\n// // text is '[\"e\",{\"pluribus\":\"unum\"}]'\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}], null, \"\\t\");\n// // text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\n\n// text = JSON.stringify([new Date()], function (key, value) {\n// return this[key] instanceof Date\n// ? \"Date(\" + this[key] + \")\"\n// : value;\n// });\n// // text is '[\"Date(---current time---)\"]'\n\n// JSON.parse(text, reviver)\n// This method parses a JSON text to produce an object or array.\n// It can throw a SyntaxError exception.\n// This has been modified to use JSON-js/json_parse_state.js as the\n// parser instead of the one built around eval found in JSON-js/json2.js\n\n// The optional reviver parameter is a function that can filter and\n// transform the results. It receives each of the keys and values,\n// and its return value is used instead of the original value.\n// If it returns what it received, then the structure is not modified.\n// If it returns undefined then the member is deleted.\n\n// Example:\n\n// // Parse the text. Values that look like ISO date strings will\n// // be converted to Date objects.\n\n// myData = JSON.parse(text, function (key, value) {\n// var a;\n// if (typeof value === \"string\") {\n// a =\n// /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n// if (a) {\n// return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n// +a[5], +a[6]));\n// }\n// }\n// return value;\n// });\n\n// myData = JSON.parse('[\"Date(09/09/2001)\"]', function (key, value) {\n// var d;\n// if (typeof value === \"string\" &&\n// value.slice(0, 5) === \"Date(\" &&\n// value.slice(-1) === \")\") {\n// d = new Date(value.slice(5, -1));\n// if (d) {\n// return d;\n// }\n// }\n// return value;\n// });\n\n// This is a reference implementation. You are free to copy, modify, or\n// redistribute.\n\n/*jslint\n for, this\n */\n\n/*property\n JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\n getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\n lastIndex, length, parse, prototype, push, replace, slice, stringify,\n test, toJSON, toString, valueOf\n */\n\nvar setupCustomJSON = function(JSON) {\n\n var rx_one = /^[\\],:{}\\s]*$/;\n var rx_two = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g;\n var rx_three = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\n var rx_four = /(?:^|:|,)(?:\\s*\\[)+/g;\n var rx_escapable = /[\\\\\"\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n var rx_dangerous = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\n function f(n) {\n // Format integers to have at least two digits.\n return n < 10\n ? \"0\" + n\n : n;\n }\n\n function this_value() {\n return this.valueOf();\n }\n\n if (typeof Date.prototype.toJSON !== \"function\") {\n\n Date.prototype.toJSON = function () {\n\n return isFinite(this.valueOf())\n ? this.getUTCFullYear() + \"-\" +\n f(this.getUTCMonth() + 1) + \"-\" +\n f(this.getUTCDate()) + \"T\" +\n f(this.getUTCHours()) + \":\" +\n f(this.getUTCMinutes()) + \":\" +\n f(this.getUTCSeconds()) + \"Z\"\n : null;\n };\n\n Boolean.prototype.toJSON = this_value;\n Number.prototype.toJSON = this_value;\n String.prototype.toJSON = this_value;\n }\n\n var gap;\n var indent;\n var meta;\n var rep;\n\n\n function quote(string) {\n\n // If the string contains no control characters, no quote characters, and no\n // backslash characters, then we can safely slap some quotes around it.\n // Otherwise we must also replace the offending characters with safe escape\n // sequences.\n\n rx_escapable.lastIndex = 0;\n return rx_escapable.test(string)\n ? \"\\\"\" + string.replace(rx_escapable, function (a) {\n var c = meta[a];\n return typeof c === \"string\"\n ? c\n : \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n }) + \"\\\"\"\n : \"\\\"\" + string + \"\\\"\";\n }\n\n\n function str(key, holder) {\n\n // Produce a string from holder[key].\n\n var i; // The loop counter.\n var k; // The member key.\n var v; // The member value.\n var length;\n var mind = gap;\n var partial;\n var value = holder[key];\n\n // If the value has a toJSON method, call it to obtain a replacement value.\n\n if (value && typeof value === \"object\" &&\n typeof value.toJSON === \"function\") {\n value = value.toJSON(key);\n }\n\n // If we were called with a replacer function, then call the replacer to\n // obtain a replacement value.\n\n if (typeof rep === \"function\") {\n value = rep.call(holder, key, value);\n }\n\n // What happens next depends on the value's type.\n\n switch (typeof value) {\n case \"string\":\n return quote(value);\n\n case \"number\":\n\n // JSON numbers must be finite. Encode non-finite numbers as null.\n\n return isFinite(value)\n ? String(value)\n : \"null\";\n\n case \"boolean\":\n case \"null\":\n\n // If the value is a boolean or null, convert it to a string. Note:\n // typeof null does not produce \"null\". The case is included here in\n // the remote chance that this gets fixed someday.\n\n return String(value);\n\n // If the type is \"object\", we might be dealing with an object or an array or\n // null.\n\n case \"object\":\n\n // Due to a specification blunder in ECMAScript, typeof null is \"object\",\n // so watch out for that case.\n\n if (!value) {\n return \"null\";\n }\n\n // Make an array to hold the partial results of stringifying this object value.\n\n gap += indent;\n partial = [];\n\n // Is the value an array?\n\n if (Object.prototype.toString.apply(value) === \"[object Array]\") {\n\n // The value is an array. Stringify every element. Use null as a placeholder\n // for non-JSON values.\n\n length = value.length;\n for (i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || \"null\";\n }\n\n // Join all of the elements together, separated with commas, and wrap them in\n // brackets.\n\n v = partial.length === 0\n ? \"[]\"\n : gap\n ? \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\"\n : \"[\" + partial.join(\",\") + \"]\";\n gap = mind;\n return v;\n }\n\n // If the replacer is an array, use it to select the members to be stringified.\n\n if (rep && typeof rep === \"object\") {\n length = rep.length;\n for (i = 0; i < length; i += 1) {\n if (typeof rep[i] === \"string\") {\n k = rep[i];\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n } else {\n\n // Otherwise, iterate through all of the keys in the object.\n\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n }\n\n // Join all of the member texts together, separated with commas,\n // and wrap them in braces.\n\n v = partial.length === 0\n ? \"{}\"\n : gap\n ? \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\"\n : \"{\" + partial.join(\",\") + \"}\";\n gap = mind;\n return v;\n }\n }\n\n // If the JSON object does not yet have a stringify method, give it one.\n\n if (typeof JSON.stringify !== \"function\") {\n meta = { // table of character substitutions\n \"\\b\": \"\\\\b\",\n \"\\t\": \"\\\\t\",\n \"\\n\": \"\\\\n\",\n \"\\f\": \"\\\\f\",\n \"\\r\": \"\\\\r\",\n \"\\\"\": \"\\\\\\\"\",\n \"\\\\\": \"\\\\\\\\\"\n };\n JSON.stringify = function (value, replacer, space) {\n\n // The stringify method takes a value and an optional replacer, and an optional\n // space parameter, and returns a JSON text. The replacer can be a function\n // that can replace values, or an array of strings that will select the keys.\n // A default replacer method can be provided. Use of the space parameter can\n // produce text that is more easily readable.\n\n var i;\n gap = \"\";\n indent = \"\";\n\n // If the space parameter is a number, make an indent string containing that\n // many spaces.\n\n if (typeof space === \"number\") {\n for (i = 0; i < space; i += 1) {\n indent += \" \";\n }\n\n // If the space parameter is a string, it will be used as the indent string.\n\n } else if (typeof space === \"string\") {\n indent = space;\n }\n\n // If there is a replacer, it must be a function or an array.\n // Otherwise, throw an error.\n\n rep = replacer;\n if (replacer && typeof replacer !== \"function\" &&\n (typeof replacer !== \"object\" ||\n typeof replacer.length !== \"number\")) {\n throw new Error(\"JSON.stringify\");\n }\n\n // Make a fake root object containing our value under the key of \"\".\n // Return the result of stringifying the value.\n\n return str(\"\", {\"\": value});\n };\n }\n\n\n // If the JSON object does not yet have a parse method, give it one.\n\n if (typeof JSON.parse !== \"function\") {\n JSON.parse = (function () {\n\n // This function creates a JSON parse function that uses a state machine rather\n // than the dangerous eval function to parse a JSON text.\n\n var state; // The state of the parser, one of\n // 'go' The starting state\n // 'ok' The final, accepting state\n // 'firstokey' Ready for the first key of the object or\n // the closing of an empty object\n // 'okey' Ready for the next key of the object\n // 'colon' Ready for the colon\n // 'ovalue' Ready for the value half of a key/value pair\n // 'ocomma' Ready for a comma or closing }\n // 'firstavalue' Ready for the first value of an array or\n // an empty array\n // 'avalue' Ready for the next value of an array\n // 'acomma' Ready for a comma or closing ]\n var stack; // The stack, for controlling nesting.\n var container; // The current container object or array\n var key; // The current key\n var value; // The current value\n var escapes = { // Escapement translation table\n \"\\\\\": \"\\\\\",\n \"\\\"\": \"\\\"\",\n \"/\": \"/\",\n \"t\": \"\\t\",\n \"n\": \"\\n\",\n \"r\": \"\\r\",\n \"f\": \"\\f\",\n \"b\": \"\\b\"\n };\n var string = { // The actions for string tokens\n go: function () {\n state = \"ok\";\n },\n firstokey: function () {\n key = value;\n state = \"colon\";\n },\n okey: function () {\n key = value;\n state = \"colon\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var number = { // The actions for number tokens\n go: function () {\n state = \"ok\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var action = {\n\n // The action table describes the behavior of the machine. It contains an\n // object for each token. Each object contains a method that is called when\n // a token is matched in a state. An object will lack a method for illegal\n // states.\n\n \"{\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = {};\n state = \"firstokey\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = {};\n state = \"firstokey\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n }\n },\n \"}\": {\n firstokey: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n ocomma: function () {\n var pop = stack.pop();\n container[key] = value;\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \"[\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = [];\n state = \"firstavalue\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = [];\n state = \"firstavalue\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n }\n },\n \"]\": {\n firstavalue: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n acomma: function () {\n var pop = stack.pop();\n container.push(value);\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \":\": {\n colon: function () {\n if (Object.hasOwnProperty.call(container, key)) {\n throw new SyntaxError(\"Duplicate key '\" + key + \"\\\"\");\n }\n state = \"ovalue\";\n }\n },\n \",\": {\n ocomma: function () {\n container[key] = value;\n state = \"okey\";\n },\n acomma: function () {\n container.push(value);\n state = \"avalue\";\n }\n },\n \"true\": {\n go: function () {\n value = true;\n state = \"ok\";\n },\n ovalue: function () {\n value = true;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = true;\n state = \"acomma\";\n },\n avalue: function () {\n value = true;\n state = \"acomma\";\n }\n },\n \"false\": {\n go: function () {\n value = false;\n state = \"ok\";\n },\n ovalue: function () {\n value = false;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = false;\n state = \"acomma\";\n },\n avalue: function () {\n value = false;\n state = \"acomma\";\n }\n },\n \"null\": {\n go: function () {\n value = null;\n state = \"ok\";\n },\n ovalue: function () {\n value = null;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = null;\n state = \"acomma\";\n },\n avalue: function () {\n value = null;\n state = \"acomma\";\n }\n }\n };\n\n function debackslashify(text) {\n\n // Remove and replace any backslash escapement.\n\n return text.replace(/\\\\(?:u(.{4})|([^u]))/g, function (ignore, b, c) {\n return b\n ? String.fromCharCode(parseInt(b, 16))\n : escapes[c];\n });\n }\n\n return function (source, reviver) {\n\n // A regular expression is used to extract tokens from the JSON text.\n // The extraction process is cautious.\n\n var result;\n var tx = /^[\\u0020\\t\\n\\r]*(?:([,:\\[\\]{}]|true|false|null)|(-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)|\"((?:[^\\r\\n\\t\\\\\\\"]|\\\\(?:[\"\\\\\\/trnfb]|u[0-9a-fA-F]{4}))*)\")/;\n\n // Set the starting state.\n\n state = \"go\";\n\n // The stack records the container, key, and state for each object or array\n // that contains another object or array while processing nested structures.\n\n stack = [];\n\n // If any error occurs, we will catch it and ultimately throw a syntax error.\n\n try {\n\n // For each token...\n\n while (true) {\n result = tx.exec(source);\n if (!result) {\n break;\n }\n\n // result is the result array from matching the tokenizing regular expression.\n // result[0] contains everything that matched, including any initial whitespace.\n // result[1] contains any punctuation that was matched, or true, false, or null.\n // result[2] contains a matched number, still in string form.\n // result[3] contains a matched string, without quotes but with escapement.\n\n if (result[1]) {\n\n // Token: Execute the action for this state and token.\n\n action[result[1]][state]();\n\n } else if (result[2]) {\n\n // Number token: Convert the number string into a number value and execute\n // the action for this state and number.\n\n value = +result[2];\n number[state]();\n } else {\n\n // String token: Replace the escapement sequences and execute the action for\n // this state and string.\n\n value = debackslashify(result[3]);\n string[state]();\n }\n\n // Remove the token from the string. The loop will continue as long as there\n // are tokens. This is a slow process, but it allows the use of ^ matching,\n // which assures that no illegal tokens slip through.\n\n source = source.slice(result[0].length);\n }\n\n // If we find a state/token combination that is illegal, then the action will\n // cause an error. We handle the error by simply changing the state.\n\n } catch (e) {\n state = e;\n }\n\n // The parsing is finished. If we are not in the final \"ok\" state, or if the\n // remaining source contains anything except whitespace, then we did not have\n //a well-formed JSON text.\n\n if (state !== \"ok\" || (/[^\\u0020\\t\\n\\r]/.test(source))) {\n throw (state instanceof SyntaxError)\n ? state\n : new SyntaxError(\"JSON\");\n }\n\n // If there is a reviver function, we recursively walk the new structure,\n // passing each name/value pair to the reviver function for possible\n // transformation, starting with a temporary root object that holds the current\n // value in an empty key. If there is not a reviver function, we simply return\n // that value.\n\n return (typeof reviver === \"function\")\n ? (function walk(holder, key) {\n var k;\n var v;\n var val = holder[key];\n if (val && typeof val === \"object\") {\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(val, k)) {\n v = walk(val, k);\n if (v !== undefined) {\n val[k] = v;\n } else {\n delete val[k];\n }\n }\n }\n }\n return reviver.call(holder, key, val);\n }({\"\": value}, \"\"))\n : value;\n };\n }());\n }\n}\n\nmodule.exports = setupCustomJSON;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./vendor/JSON-js/json3.js\n// module id = 8\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Notifier - the internal object responsible for delegating between the client exposed API, the\n * chain of transforms necessary to turn an item into something that can be sent to Rollbar, and the\n * queue which handles the communcation with the Rollbar API servers.\n *\n * @param queue - an object that conforms to the interface: addItem(item, callback)\n * @param options - an object representing the options to be set for this notifier, this should have\n * any defaults already set by the caller\n */\nfunction Notifier(queue, options) {\n this.queue = queue;\n this.options = options;\n this.transforms = [];\n}\n\n/*\n * configure - updates the options for this notifier with the passed in object\n *\n * @param options - an object which gets merged with the current options set on this notifier\n * @returns this\n */\nNotifier.prototype.configure = function(options) {\n this.queue && this.queue.configure(options);\n var oldOptions = this.options;\n this.options = _.extend(true, {}, oldOptions, options);\n return this;\n};\n\n/*\n * addTransform - adds a transform onto the end of the queue of transforms for this notifier\n *\n * @param transform - a function which takes three arguments:\n * * item: An Object representing the data to eventually be sent to Rollbar\n * * options: The current value of the options for this notifier\n * * callback: function(err: (Null|Error), item: (Null|Object)) the transform must call this\n * callback with a null value for error if it wants the processing chain to continue, otherwise\n * with an error to terminate the processing. The item should be the updated item after this\n * transform is finished modifying it.\n */\nNotifier.prototype.addTransform = function(transform) {\n if (_.isFunction(transform)) {\n this.transforms.push(transform);\n }\n return this;\n};\n\n/*\n * log - the internal log function which applies the configured transforms and then pushes onto the\n * queue to be sent to the backend.\n *\n * @param item - An object with the following structure:\n * message [String] - An optional string to be sent to rollbar\n * error [Error] - An optional error\n *\n * @param callback - A function of type function(err, resp) which will be called with exactly one\n * null argument and one non-null argument. The callback will be called once, either during the\n * transform stage if an error occurs inside a transform, or in response to the communication with\n * the backend. The second argument will be the response from the backend in case of success.\n */\nNotifier.prototype.log = function(item, callback) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!this.options.enabled) {\n return callback(new Error('Rollbar is not enabled'));\n }\n\n this.queue.addPendingItem(item);\n var originalError = item.err;\n this._applyTransforms(item, function(err, i) {\n if (err) {\n this.queue.removePendingItem(item);\n return callback(err, null);\n }\n this.queue.addItem(i, callback, originalError, item);\n }.bind(this));\n};\n\n/* Internal */\n\n/*\n * _applyTransforms - Applies the transforms that have been added to this notifier sequentially. See\n * `addTransform` for more information.\n *\n * @param item - An item to be transformed\n * @param callback - A function of type function(err, item) which will be called with a non-null\n * error and a null item in the case of a transform failure, or a null error and non-null item after\n * all transforms have been applied.\n */\nNotifier.prototype._applyTransforms = function(item, callback) {\n var transformIndex = -1;\n var transformsLength = this.transforms.length;\n var transforms = this.transforms;\n var options = this.options;\n\n var cb = function(err, i) {\n if (err) {\n callback(err, null);\n return;\n }\n\n transformIndex++;\n\n if (transformIndex === transformsLength) {\n callback(null, i);\n return;\n }\n\n transforms[transformIndex](i, options, cb);\n };\n\n cb(null, item);\n};\n\nmodule.exports = Notifier;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/notifier.js\n// module id = 9\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nvar MAX_EVENTS = 100;\n\nfunction Telemeter(options) {\n this.queue = [];\n this.options = _.extend(true, {}, options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n this.maxQueueSize = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n}\n\nTelemeter.prototype.configure = function(options) {\n var oldOptions = this.options;\n this.options = _.extend(true, {}, oldOptions, options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n var newMaxEvents = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n var deleteCount = 0;\n if (this.maxQueueSize > newMaxEvents) {\n deleteCount = this.maxQueueSize - newMaxEvents;\n }\n this.maxQueueSize = newMaxEvents;\n this.queue.splice(0, deleteCount);\n};\n\nTelemeter.prototype.copyEvents = function() {\n return Array.prototype.slice.call(this.queue, 0);\n};\n\nTelemeter.prototype.capture = function(type, metadata, level, rollbarUUID, timestamp) {\n var e = {\n level: getLevel(type, level),\n type: type,\n timestamp_ms: timestamp || _.now(),\n body: metadata,\n source: 'client'\n };\n if (rollbarUUID) {\n e.uuid = rollbarUUID;\n }\n\n try {\n if (_.isFunction(this.options.filterTelemetry) && this.options.filterTelemetry(e)) {\n return false;\n }\n } catch (e) {\n this.options.filterTelemetry = null;\n }\n\n this.push(e);\n return e;\n};\n\nTelemeter.prototype.captureEvent = function(metadata, level, rollbarUUID) {\n return this.capture('manual', metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.captureError = function(err, level, rollbarUUID, timestamp) {\n var metadata = {\n message: err.message || String(err)\n };\n if (err.stack) {\n metadata.stack = err.stack;\n }\n return this.capture('error', metadata, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureLog = function(message, level, rollbarUUID, timestamp) {\n return this.capture('log', {\n message: message\n }, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureNetwork = function(metadata, subtype, rollbarUUID, requestData) {\n subtype = subtype || 'xhr';\n metadata.subtype = metadata.subtype || subtype;\n if (requestData) {\n metadata.request = requestData;\n }\n var level = this.levelFromStatus(metadata.status_code);\n return this.capture('network', metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.levelFromStatus = function(statusCode) {\n if (statusCode >= 200 && statusCode < 400) {\n return 'info';\n }\n if (statusCode === 0 || statusCode >= 400) {\n return 'error';\n }\n return 'info';\n};\n\nTelemeter.prototype.captureDom = function(subtype, element, value, checked, rollbarUUID) {\n var metadata = {\n subtype: subtype,\n element: element\n };\n if (value !== undefined) {\n metadata.value = value;\n }\n if (checked !== undefined) {\n metadata.checked = checked;\n }\n return this.capture('dom', metadata, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureNavigation = function(from, to, rollbarUUID) {\n return this.capture('navigation', {from: from, to: to}, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureDomContentLoaded = function(ts) {\n return this.capture('navigation', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n */\n};\nTelemeter.prototype.captureLoad = function(ts) {\n return this.capture('navigation', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n */\n};\n\nTelemeter.prototype.captureConnectivityChange = function(type, rollbarUUID) {\n return this.captureNetwork({change: type}, 'connectivity', rollbarUUID);\n};\n\n// Only intended to be used internally by the notifier\nTelemeter.prototype._captureRollbarItem = function(item) {\n if (!this.options.includeItemsInTelemetry) {\n return;\n }\n if (item.err) {\n return this.captureError(item.err, item.level, item.uuid, item.timestamp);\n }\n if (item.message) {\n return this.captureLog(item.message, item.level, item.uuid, item.timestamp);\n }\n if (item.custom) {\n return this.capture('log', item.custom, item.level, item.uuid, item.timestamp);\n }\n};\n\nTelemeter.prototype.push = function(e) {\n this.queue.push(e);\n if (this.queue.length > this.maxQueueSize) {\n this.queue.shift();\n }\n};\n\nfunction getLevel(type, level) {\n if (level) {\n return level;\n }\n var defaultLevel = {\n error: 'error',\n manual: 'info'\n };\n return defaultLevel[type] || 'info';\n}\n\nmodule.exports = Telemeter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/telemetry.js\n// module id = 10\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\nvar helpers = require('./apiUtility');\n\nvar defaultOptions = {\n hostname: 'api.rollbar.com',\n path: '/api/1/item/',\n search: null,\n version: '1',\n protocol: 'https:',\n port: 443\n};\n\n/**\n * Api is an object that encapsulates methods of communicating with\n * the Rollbar API. It is a standard interface with some parts implemented\n * differently for server or browser contexts. It is an object that should\n * be instantiated when used so it can contain non-global options that may\n * be different for another instance of RollbarApi.\n *\n * @param options {\n * accessToken: the accessToken to use for posting items to rollbar\n * endpoint: an alternative endpoint to send errors to\n * must be a valid, fully qualified URL.\n * The default is: https://api.rollbar.com/api/1/item\n * proxy: if you wish to proxy requests provide an object\n * with the following keys:\n * host or hostname (required): foo.example.com\n * port (optional): 123\n * protocol (optional): https\n * }\n */\nfunction Api(options, t, u, j) {\n this.options = options;\n this.transport = t;\n this.url = u;\n this.jsonBackup = j;\n this.accessToken = options.accessToken;\n this.transportOptions = _getTransport(options, u);\n}\n\n/**\n *\n * @param data\n * @param callback\n */\nApi.prototype.postItem = function(data, callback) {\n var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n this.transport.post(this.accessToken, transportOptions, payload, callback);\n};\n\nApi.prototype.configure = function(options) {\n var oldOptions = this.oldOptions;\n this.options = _.extend(true, {}, oldOptions, options);\n this.transportOptions = _getTransport(this.options, this.url);\n if (this.options.accessToken !== undefined) {\n this.accessToken = this.options.accessToken;\n }\n return this;\n};\n\nfunction _getTransport(options, url) {\n return helpers.getTransportFromOptions(options, defaultOptions, url);\n}\n\nmodule.exports = Api;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/api.js\n// module id = 11\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction buildPayload(accessToken, data, jsonBackup) {\n if (!_.isType(data.context, 'string')) {\n var contextResult = _.stringify(data.context, jsonBackup);\n if (contextResult.error) {\n data.context = 'Error: could not serialize \\'context\\'';\n } else {\n data.context = contextResult.value || '';\n }\n if (data.context.length > 255) {\n data.context = data.context.substr(0, 255);\n }\n }\n return {\n access_token: accessToken,\n data: data\n };\n}\n\nfunction getTransportFromOptions(options, defaults, url) {\n var hostname = defaults.hostname;\n var protocol = defaults.protocol;\n var port = defaults.port;\n var path = defaults.path;\n var search = defaults.search;\n\n var proxy = options.proxy;\n if (options.endpoint) {\n var opts = url.parse(options.endpoint);\n hostname = opts.hostname;\n protocol = opts.protocol;\n port = opts.port;\n path = opts.pathname;\n search = opts.search;\n }\n return {\n hostname: hostname,\n protocol: protocol,\n port: port,\n path: path,\n search: search,\n proxy: proxy\n };\n}\n\nfunction transportOptions(transport, method) {\n var protocol = transport.protocol || 'https:';\n var port = transport.port || (protocol === 'http:' ? 80 : protocol === 'https:' ? 443 : undefined);\n var hostname = transport.hostname;\n var path = transport.path;\n if (transport.search) {\n path = path + transport.search;\n }\n if (transport.proxy) {\n path = protocol + '//' + hostname + path;\n hostname = transport.proxy.host || transport.proxy.hostname;\n port = transport.proxy.port;\n protocol = transport.proxy.protocol || protocol;\n }\n return {\n protocol: protocol,\n hostname: hostname,\n path: path,\n port: port,\n method: method\n };\n}\n\nfunction appendPathToPath(base, path) {\n var baseTrailingSlash = /\\/$/.test(base);\n var pathBeginningSlash = /^\\//.test(path);\n\n if (baseTrailingSlash && pathBeginningSlash) {\n path = path.substring(1);\n } else if (!baseTrailingSlash && !pathBeginningSlash) {\n path = '/' + path;\n }\n\n return base + path;\n}\n\nmodule.exports = {\n buildPayload: buildPayload,\n getTransportFromOptions: getTransportFromOptions,\n transportOptions: transportOptions,\n appendPathToPath: appendPathToPath\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/apiUtility.js\n// module id = 12\n// module chunks = 0","'use strict';\n\n/* eslint-disable no-console */\nrequire('console-polyfill');\nvar detection = require('./detection');\nvar _ = require('../utility');\n\nfunction error() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.error(_.formatArgsAsString(args));\n } else {\n console.error.apply(console, args);\n }\n}\n\nfunction info() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.info(_.formatArgsAsString(args));\n } else {\n console.info.apply(console, args);\n }\n}\n\nfunction log() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.log(_.formatArgsAsString(args));\n } else {\n console.log.apply(console, args);\n }\n}\n\n/* eslint-enable no-console */\n\nmodule.exports = {\n error: error,\n info: info,\n log: log\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/logger.js\n// module id = 13\n// module chunks = 0","// Console-polyfill. MIT license.\n// https://github.com/paulmillr/console-polyfill\n// Make it safe to do console.log() always.\n(function(global) {\n 'use strict';\n if (!global.console) {\n global.console = {};\n }\n var con = global.console;\n var prop, method;\n var dummy = function() {};\n var properties = ['memory'];\n var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' +\n 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' +\n 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',');\n while (prop = properties.pop()) if (!con[prop]) con[prop] = {};\n while (method = methods.pop()) if (!con[method]) con[method] = dummy;\n // Using `this` for web workers & supports Browserify / Webpack.\n})(typeof window === 'undefined' ? this : window);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/console-polyfill/index.js\n// module id = 14\n// module chunks = 0","'use strict';\n\n// This detection.js module is used to encapsulate any ugly browser/feature\n// detection we may need to do.\n\n// Figure out which version of IE we're using, if any.\n// This is gleaned from http://stackoverflow.com/questions/5574842/best-way-to-check-for-ie-less-than-9-in-javascript-without-library\n// Will return an integer on IE (i.e. 8)\n// Will return undefined otherwise\nfunction getIEVersion() {\n\tvar undef;\n\tif (!document) {\n\t\treturn undef;\n\t}\n\n var v = 3,\n div = document.createElement('div'),\n all = div.getElementsByTagName('i');\n\n while (\n div.innerHTML = '',\n all[0]\n );\n\n return v > 4 ? v : undef;\n}\n\nvar Detection = {\n ieVersion: getIEVersion\n};\n\nmodule.exports = Detection;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/detection.js\n// module id = 15\n// module chunks = 0","'use strict';\n\nfunction captureUncaughtExceptions(window, handler, shim) {\n if (!window) { return; }\n var oldOnError;\n\n if (typeof handler._rollbarOldOnError === 'function') {\n oldOnError = handler._rollbarOldOnError;\n } else if (window.onerror && !window.onerror.belongsToShim) {\n oldOnError = window.onerror;\n handler._rollbarOldOnError = oldOnError;\n }\n\n var fn = function() {\n var args = Array.prototype.slice.call(arguments, 0);\n _rollbarWindowOnError(window, handler, oldOnError, args);\n };\n fn.belongsToShim = shim;\n window.onerror = fn;\n}\n\nfunction _rollbarWindowOnError(window, r, old, args) {\n if (window._rollbarWrappedError) {\n if (!args[4]) {\n args[4] = window._rollbarWrappedError;\n }\n if (!args[5]) {\n args[5] = window._rollbarWrappedError._rollbarContext;\n }\n window._rollbarWrappedError = null;\n }\n\n r.handleUncaughtException.apply(r, args);\n if (old) {\n old.apply(window, args);\n }\n}\n\nfunction captureUnhandledRejections(window, handler, shim) {\n if (!window) { return; }\n\n if (typeof window._rollbarURH === 'function' && window._rollbarURH.belongsToShim) {\n window.removeEventListener('unhandledrejection', window._rollbarURH);\n }\n\n var rejectionHandler = function (evt) {\n var reason, promise, detail;\n try {\n reason = evt.reason;\n } catch (e) {\n reason = undefined;\n }\n try {\n promise = evt.promise;\n } catch (e) {\n promise = '[unhandledrejection] error getting `promise` from event';\n }\n try {\n detail = evt.detail;\n if (!reason && detail) {\n reason = detail.reason;\n promise = detail.promise;\n }\n } catch (e) {\n detail = '[unhandledrejection] error getting `detail` from event';\n }\n if (!reason) {\n reason = '[unhandledrejection] error getting `reason` from event';\n }\n\n if (handler && handler.handleUnhandledRejection) {\n handler.handleUnhandledRejection(reason, promise);\n }\n };\n rejectionHandler.belongsToShim = shim;\n window._rollbarURH = rejectionHandler;\n window.addEventListener('unhandledrejection', rejectionHandler);\n}\n\nfunction wrapGlobals(window, handler, shim) {\n if (!window) { return; }\n // Adapted from https://github.com/bugsnag/bugsnag-js\n var globals = 'EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload'.split(',');\n var i, global;\n for (i = 0; i < globals.length; ++i) {\n global = globals[i];\n\n if (window[global] && window[global].prototype) {\n _extendListenerPrototype(handler, window[global].prototype, shim);\n }\n }\n}\n\nfunction _extendListenerPrototype(handler, prototype, shim) {\n if (prototype.hasOwnProperty && prototype.hasOwnProperty('addEventListener')) {\n var oldAddEventListener = prototype.addEventListener;\n while (oldAddEventListener._rollbarOldAdd && oldAddEventListener.belongsToShim) {\n oldAddEventListener = oldAddEventListener._rollbarOldAdd;\n }\n var addFn = function(event, callback, bubble) {\n oldAddEventListener.call(this, event, handler.wrap(callback), bubble);\n };\n addFn._rollbarOldAdd = oldAddEventListener;\n addFn.belongsToShim = shim;\n prototype.addEventListener = addFn;\n\n var oldRemoveEventListener = prototype.removeEventListener;\n while (oldRemoveEventListener._rollbarOldRemove && oldRemoveEventListener.belongsToShim) {\n oldRemoveEventListener = oldRemoveEventListener._rollbarOldRemove;\n }\n var removeFn = function(event, callback, bubble) {\n oldRemoveEventListener.call(this, event, callback && callback._rollbar_wrapped || callback, bubble);\n };\n removeFn._rollbarOldRemove = oldRemoveEventListener;\n removeFn.belongsToShim = shim;\n prototype.removeEventListener = removeFn;\n }\n}\n\nmodule.exports = {\n captureUncaughtExceptions: captureUncaughtExceptions,\n captureUnhandledRejections: captureUnhandledRejections,\n wrapGlobals: wrapGlobals\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/globalSetup.js\n// module id = 16\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar logger = require('./logger');\n\n/*\n * accessToken may be embedded in payload but that should not\n * be assumed\n *\n * options: {\n * hostname\n * protocol\n * path\n * port\n * method\n * }\n *\n * params is an object containing key/value pairs. These\n * will be appended to the path as 'key=value&key=value'\n *\n * payload is an unserialized object\n */\n\nfunction get(accessToken, options, params, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n _.addParamsAndAccessTokenToPath(accessToken, options, params);\n\n var method = 'GET';\n var url = _.formatUrl(options);\n _makeRequest(accessToken, url, method, null, callback, requestFactory);\n}\n\nfunction post(accessToken, options, payload, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!payload) {\n return callback(new Error('Cannot send empty request'));\n }\n\n var stringifyResult = _.stringify(payload);\n if (stringifyResult.error) {\n return callback(stringifyResult.error);\n }\n\n var writeData = stringifyResult.value;\n var method = 'POST';\n var url = _.formatUrl(options);\n _makeRequest(accessToken, url, method, writeData, callback, requestFactory);\n}\n\nfunction _makeRequest(accessToken, url, method, data, callback, requestFactory) {\n var request;\n if (requestFactory) {\n request = requestFactory();\n } else {\n request = _createXMLHTTPObject();\n }\n if (!request) {\n // Give up, no way to send requests\n return callback(new Error('No way to send a request'));\n }\n try {\n try {\n var onreadystatechange = function() {\n try {\n if (onreadystatechange && request.readyState === 4) {\n onreadystatechange = undefined;\n\n var parseResponse = _.jsonParse(request.responseText);\n if (_isSuccess(request)) {\n callback(parseResponse.error, parseResponse.value);\n return;\n } else if (_isNormalFailure(request)) {\n if (request.status === 403) {\n // likely caused by using a server access token\n var message = parseResponse.value && parseResponse.value.message;\n logger.error(message);\n }\n // return valid http status codes\n callback(new Error(String(request.status)));\n } else {\n // IE will return a status 12000+ on some sort of connection failure,\n // so we return a blank error\n // http://msdn.microsoft.com/en-us/library/aa383770%28VS.85%29.aspx\n var msg = 'XHR response had no status code (likely connection failure)';\n callback(_newRetriableError(msg));\n }\n }\n } catch (ex) {\n //jquery source mentions firefox may error out while accessing the\n //request members if there is a network error\n //https://github.com/jquery/jquery/blob/a938d7b1282fc0e5c52502c225ae8f0cef219f0a/src/ajax/xhr.js#L111\n var exc;\n if (ex && ex.stack) {\n exc = ex;\n } else {\n exc = new Error(ex);\n }\n callback(exc);\n }\n };\n\n request.open(method, url, true);\n if (request.setRequestHeader) {\n request.setRequestHeader('Content-Type', 'application/json');\n request.setRequestHeader('X-Rollbar-Access-Token', accessToken);\n }\n request.onreadystatechange = onreadystatechange;\n request.send(data);\n } catch (e1) {\n // Sending using the normal xmlhttprequest object didn't work, try XDomainRequest\n if (typeof XDomainRequest !== 'undefined') {\n\n // Assume we are in a really old browser which has a bunch of limitations:\n // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\n // Extreme paranoia: if we have XDomainRequest then we have a window, but just in case\n if (!window || !window.location) {\n return callback(new Error('No window available during request, unknown environment'));\n }\n\n // If the current page is http, try and send over http\n if (window.location.href.substring(0, 5) === 'http:' && url.substring(0, 5) === 'https') {\n url = 'http' + url.substring(5);\n }\n\n var xdomainrequest = new XDomainRequest();\n xdomainrequest.onprogress = function() {};\n xdomainrequest.ontimeout = function() {\n var msg = 'Request timed out';\n var code = 'ETIMEDOUT';\n callback(_newRetriableError(msg, code));\n };\n xdomainrequest.onerror = function() {\n callback(new Error('Error during request'));\n };\n xdomainrequest.onload = function() {\n var parseResponse = _.jsonParse(xdomainrequest.responseText);\n callback(parseResponse.error, parseResponse.value);\n };\n xdomainrequest.open(method, url, true);\n xdomainrequest.send(data);\n } else {\n callback(new Error('Cannot find a method to transport a request'));\n }\n }\n } catch (e2) {\n callback(e2);\n }\n}\n\nfunction _createXMLHTTPObject() {\n /* global ActiveXObject:false */\n\n var factories = [\n function () {\n return new XMLHttpRequest();\n },\n function () {\n return new ActiveXObject('Msxml2.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Msxml3.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Microsoft.XMLHTTP');\n }\n ];\n var xmlhttp;\n var i;\n var numFactories = factories.length;\n for (i = 0; i < numFactories; i++) {\n /* eslint-disable no-empty */\n try {\n xmlhttp = factories[i]();\n break;\n } catch (e) {\n // pass\n }\n /* eslint-enable no-empty */\n }\n return xmlhttp;\n}\n\nfunction _isSuccess(r) {\n return r && r.status && r.status === 200;\n}\n\nfunction _isNormalFailure(r) {\n return r && _.isType(r.status, 'number') && r.status >= 400 && r.status < 600;\n}\n\nfunction _newRetriableError(message, code) {\n var err = new Error(message);\n err.code = code || 'ENOTFOUND';\n return err;\n}\n\nmodule.exports = {\n get: get,\n post: post\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transport.js\n// module id = 17\n// module chunks = 0","'use strict';\n\n// See https://nodejs.org/docs/latest/api/url.html\nfunction parse(url) {\n var result = {\n protocol: null, auth: null, host: null, path: null,\n hash: null, href: url, hostname: null, port: null,\n pathname: null, search: null, query: null\n };\n\n var i, last;\n i = url.indexOf('//');\n if (i !== -1) {\n result.protocol = url.substring(0,i);\n last = i+2;\n } else {\n last = 0;\n }\n \n i = url.indexOf('@', last);\n if (i !== -1) {\n result.auth = url.substring(last, i);\n last = i+1;\n }\n\n i = url.indexOf('/', last);\n if (i === -1) {\n i = url.indexOf('?', last);\n if (i === -1) {\n i = url.indexOf('#', last);\n if (i === -1) {\n result.host = url.substring(last);\n } else {\n result.host = url.substring(last, i);\n result.hash = url.substring(i);\n }\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n return result;\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n\n i = url.indexOf('#', last);\n if (i === -1) {\n result.path = url.substring(last);\n } else {\n result.path = url.substring(last, i);\n result.hash = url.substring(i);\n }\n\n if (result.path) {\n var pathParts = result.path.split('?');\n result.pathname = pathParts[0];\n result.query = pathParts[1];\n result.search = result.query ? '?' + result.query : null;\n }\n return result;\n}\n\nmodule.exports = {\n parse: parse\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/url.js\n// module id = 18\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar errorParser = require('./errorParser');\nvar logger = require('./logger');\n\nfunction handleItemWithError(item, options, callback) {\n item.data = item.data || {};\n if (item.err) {\n try {\n item.stackInfo = item.err._savedStackTrace || errorParser.parse(item.err);\n } catch (e)\n /* istanbul ignore next */\n {\n logger.error('Error while parsing the error object.', e);\n item.message = item.err.message || item.err.description || item.message || String(item.err);\n delete item.err;\n }\n }\n callback(null, item);\n}\n\nfunction ensureItemHasSomethingToSay(item, options, callback) {\n if (!item.message && !item.stackInfo && !item.custom) {\n callback(new Error('No message, stack info, or custom data'), null);\n }\n callback(null, item);\n}\n\nfunction addBaseInfo(item, options, callback) {\n var environment = (options.payload && options.payload.environment) || options.environment;\n item.data = _.extend(true, {}, item.data, {\n environment: environment,\n level: item.level,\n endpoint: options.endpoint,\n platform: 'browser',\n framework: 'browser-js',\n language: 'javascript',\n server: {},\n uuid: item.uuid,\n notifier: {\n name: 'rollbar-browser-js',\n version: options.version\n }\n });\n callback(null, item);\n}\n\nfunction addRequestInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.location) {\n return callback(null, item);\n }\n _.set(item, 'data.request', {\n url: window.location.href,\n query_string: window.location.search,\n user_ip: '$remote_ip'\n });\n callback(null, item);\n };\n}\n\nfunction addClientInfo(window) {\n return function(item, options, callback) {\n if (!window) {\n return callback(null, item);\n }\n var nav = window.navigator || {};\n var scr = window.screen || {};\n _.set(item, 'data.client', {\n runtime_ms: item.timestamp - window._rollbarStartTime,\n timestamp: Math.round(item.timestamp / 1000),\n javascript: {\n browser: nav.userAgent,\n language: nav.language,\n cookie_enabled: nav.cookieEnabled,\n screen: {\n width: scr.width,\n height: scr.height\n }\n }\n });\n callback(null, item);\n };\n}\n\nfunction addPluginInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.navigator) {\n return callback(null, item);\n }\n var plugins = [];\n var navPlugins = window.navigator.plugins || [];\n var cur;\n for (var i=0, l=navPlugins.length; i < l; ++i) {\n cur = navPlugins[i];\n plugins.push({name: cur.name, description: cur.description});\n }\n _.set(item, 'data.client.javascript.plugins', plugins);\n callback(null, item);\n };\n}\n\nfunction addBody(item, options, callback) {\n if (item.stackInfo) {\n addBodyTrace(item, options, callback);\n } else {\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction addBodyMessage(item, options, callback) {\n var message = item.message;\n var custom = item.custom;\n\n if (!message) {\n if (custom) {\n var scrubFields = options.scrubFields;\n var messageResult = _.stringify(_.scrub(custom, scrubFields));\n message = messageResult.error || messageResult.value || '';\n } else {\n message = '';\n }\n }\n var result = {\n body: message\n };\n\n if (custom) {\n result.extra = _.extend(true, {}, custom);\n }\n\n _.set(item, 'data.body', {message: result});\n callback(null, item);\n}\n\n\nfunction addBodyTrace(item, options, callback) {\n var description = item.data.description;\n var stackInfo = item.stackInfo;\n var custom = item.custom;\n\n var guess = errorParser.guessErrorClass(stackInfo.message);\n var className = stackInfo.name || guess[0];\n var message = guess[1];\n var trace = {\n exception: {\n 'class': className,\n message: message\n }\n };\n\n if (description) {\n trace.exception.description = description;\n }\n\n // Transform a TraceKit stackInfo object into a Rollbar trace\n var stack = stackInfo.stack;\n if (stack && stack.length === 0 && item._unhandledStackInfo && item._unhandledStackInfo.stack) {\n stack = item._unhandledStackInfo.stack;\n }\n if (stack) {\n if (stack.length === 0) {\n trace.exception.stack = stackInfo.rawStack;\n trace.exception.raw = String(stackInfo.rawException);\n }\n var stackFrame;\n var frame;\n var code;\n var pre;\n var post;\n var contextLength;\n var i, mid;\n\n trace.frames = [];\n for (i = 0; i < stack.length; ++i) {\n stackFrame = stack[i];\n frame = {\n filename: stackFrame.url ? _.sanitizeUrl(stackFrame.url) : '(unknown)',\n lineno: stackFrame.line || null,\n method: (!stackFrame.func || stackFrame.func === '?') ? '[anonymous]' : stackFrame.func,\n colno: stackFrame.column\n };\n if (frame.method && frame.method.endsWith && frame.method.endsWith('_rollbar_wrapped')) {\n continue;\n }\n\n code = pre = post = null;\n contextLength = stackFrame.context ? stackFrame.context.length : 0;\n if (contextLength) {\n mid = Math.floor(contextLength / 2);\n pre = stackFrame.context.slice(0, mid);\n code = stackFrame.context[mid];\n post = stackFrame.context.slice(mid);\n }\n\n if (code) {\n frame.code = code;\n }\n\n if (pre || post) {\n frame.context = {};\n if (pre && pre.length) {\n frame.context.pre = pre;\n }\n if (post && post.length) {\n frame.context.post = post;\n }\n }\n\n if (stackFrame.args) {\n frame.args = stackFrame.args;\n }\n\n trace.frames.push(frame);\n }\n\n // NOTE(cory): reverse the frames since rollbar.com expects the most recent call last\n trace.frames.reverse();\n\n if (custom) {\n trace.extra = _.extend(true, {}, custom);\n }\n _.set(item, 'data.body', {trace: trace});\n callback(null, item);\n } else {\n item.message = className + ': ' + message;\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction scrubPayload(item, options, callback) {\n var scrubFields = options.scrubFields;\n item.data = _.scrub(item.data, scrubFields);\n callback(null, item);\n}\n\nmodule.exports = {\n handleItemWithError: handleItemWithError,\n ensureItemHasSomethingToSay: ensureItemHasSomethingToSay,\n addBaseInfo: addBaseInfo,\n addRequestInfo: addRequestInfo,\n addClientInfo: addClientInfo,\n addPluginInfo: addPluginInfo,\n addBody: addBody,\n scrubPayload: scrubPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transforms.js\n// module id = 19\n// module chunks = 0","'use strict';\n\nvar ErrorStackParser = require('error-stack-parser');\n\nvar UNKNOWN_FUNCTION = '?';\nvar ERR_CLASS_REGEXP = new RegExp('^(([a-zA-Z0-9-_$ ]*): *)?(Uncaught )?([a-zA-Z0-9-_$ ]*): ');\n\nfunction guessFunctionName() {\n return UNKNOWN_FUNCTION;\n}\n\n\nfunction gatherContext() {\n return null;\n}\n\n\nfunction Frame(stackFrame) {\n var data = {};\n\n data._stackFrame = stackFrame;\n\n data.url = stackFrame.fileName;\n data.line = stackFrame.lineNumber;\n data.func = stackFrame.functionName;\n data.column = stackFrame.columnNumber;\n data.args = stackFrame.args;\n\n data.context = gatherContext(data.url, data.line);\n\n return data;\n}\n\n\nfunction Stack(exception) {\n function getStack() {\n var parserStack = [];\n var exc;\n\n if (!exception.stack) {\n try {\n throw exception;\n } catch (e) {\n exc = e;\n }\n } else {\n exc = exception;\n }\n\n try {\n parserStack = ErrorStackParser.parse(exc);\n } catch(e) {\n parserStack = [];\n }\n\n var stack = [];\n\n for (var i = 0; i < parserStack.length; i++) {\n stack.push(new Frame(parserStack[i]));\n }\n\n return stack;\n }\n\n return {\n stack: getStack(),\n message: exception.message,\n name: exception.name,\n rawStack: exception.stack,\n rawException: exception\n };\n}\n\n\nfunction parse(e) {\n return new Stack(e);\n}\n\n\nfunction guessErrorClass(errMsg) {\n if (!errMsg || !errMsg.match) {\n return ['Unknown error. There was no error message to display.', ''];\n }\n var errClassMatch = errMsg.match(ERR_CLASS_REGEXP);\n var errClass = '(unknown)';\n\n if (errClassMatch) {\n errClass = errClassMatch[errClassMatch.length - 1];\n errMsg = errMsg.replace((errClassMatch[errClassMatch.length - 2] || '') + errClass + ':', '');\n errMsg = errMsg.replace(/(^[\\s]+|[\\s]+$)/g, '');\n }\n return [errClass, errMsg];\n}\n\n\nmodule.exports = {\n guessFunctionName: guessFunctionName,\n guessErrorClass: guessErrorClass,\n gatherContext: gatherContext,\n parse: parse,\n Stack: Stack,\n Frame: Frame\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/errorParser.js\n// module id = 20\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = locationParts[0] === 'eval' ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/error-stack-parser.js\n// module id = 21\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stackframe', [], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.StackFrame = factory();\n }\n}(this, function () {\n 'use strict';\n function _isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n function StackFrame(functionName, args, fileName, lineNumber, columnNumber, source) {\n if (functionName !== undefined) {\n this.setFunctionName(functionName);\n }\n if (args !== undefined) {\n this.setArgs(args);\n }\n if (fileName !== undefined) {\n this.setFileName(fileName);\n }\n if (lineNumber !== undefined) {\n this.setLineNumber(lineNumber);\n }\n if (columnNumber !== undefined) {\n this.setColumnNumber(columnNumber);\n }\n if (source !== undefined) {\n this.setSource(source);\n }\n }\n\n StackFrame.prototype = {\n getFunctionName: function () {\n return this.functionName;\n },\n setFunctionName: function (v) {\n this.functionName = String(v);\n },\n\n getArgs: function () {\n return this.args;\n },\n setArgs: function (v) {\n if (Object.prototype.toString.call(v) !== '[object Array]') {\n throw new TypeError('Args must be an Array');\n }\n this.args = v;\n },\n\n // NOTE: Property name may be misleading as it includes the path,\n // but it somewhat mirrors V8's JavaScriptStackTraceApi\n // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's\n // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14\n getFileName: function () {\n return this.fileName;\n },\n setFileName: function (v) {\n this.fileName = String(v);\n },\n\n getLineNumber: function () {\n return this.lineNumber;\n },\n setLineNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Line Number must be a Number');\n }\n this.lineNumber = Number(v);\n },\n\n getColumnNumber: function () {\n return this.columnNumber;\n },\n setColumnNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Column Number must be a Number');\n }\n this.columnNumber = Number(v);\n },\n\n getSource: function () {\n return this.source;\n },\n setSource: function (v) {\n this.source = String(v);\n },\n\n toString: function() {\n var functionName = this.getFunctionName() || '{anonymous}';\n var args = '(' + (this.getArgs() || []).join(',') + ')';\n var fileName = this.getFileName() ? ('@' + this.getFileName()) : '';\n var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : '';\n var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : '';\n return functionName + args + fileName + lineNumber + columnNumber;\n }\n };\n\n return StackFrame;\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/~/stackframe/stackframe.js\n// module id = 22\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction itemToPayload(item, options, callback) {\n var payloadOptions = options.payload || {};\n if (payloadOptions.body) {\n delete payloadOptions.body;\n }\n\n var data = _.extend(true, {}, item.data, payloadOptions);\n if (item._isUncaught) {\n data._isUncaught = true;\n }\n if (item._originalArgs) {\n data._originalArgs = item._originalArgs;\n }\n callback(null, data);\n}\n\nfunction addTelemetryData(item, options, callback) {\n if (item.telemetryEvents) {\n _.set(item, 'data.body.telemetry', item.telemetryEvents);\n }\n callback(null, item);\n}\n\nfunction addMessageWithError(item, options, callback) {\n if (!item.message) {\n callback(null, item);\n return;\n }\n var tracePath = 'data.body.trace_chain.0';\n var trace = _.get(item, tracePath);\n if (!trace) {\n tracePath = 'data.body.trace';\n trace = _.get(item, tracePath);\n }\n if (trace) {\n if (!(trace.exception && trace.exception.description)) {\n _.set(item, tracePath+'.exception.description', item.message);\n callback(null, item);\n return;\n }\n var extra = _.get(item, tracePath+'.extra') || {};\n var newExtra = _.extend(true, {}, extra, {message: item.message});\n _.set(item, tracePath+'.extra', newExtra);\n }\n callback(null, item);\n}\n\nfunction userTransform(logger) {\n return function(item, options, callback) {\n var newItem = _.extend(true, {}, item);\n try {\n if (_.isFunction(options.transform)) {\n options.transform(newItem.data);\n }\n } catch (e) {\n options.transform = null;\n logger.error('Error while calling custom transform() function. Removing custom transform().', e);\n callback(null, item);\n return;\n }\n callback(null, newItem);\n }\n}\n\nfunction addConfigToPayload(item, options, callback) {\n if (!options.sendConfig) {\n return callback(null, item);\n }\n var configKey = '_rollbarConfig';\n var custom = _.get(item, 'data.custom') || {};\n custom[configKey] = options;\n item.data.custom = custom;\n callback(null, item);\n}\n\nmodule.exports = {\n itemToPayload: itemToPayload,\n addTelemetryData: addTelemetryData,\n addMessageWithError: addMessageWithError,\n userTransform: userTransform,\n addConfigToPayload: addConfigToPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/transforms.js\n// module id = 23\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\n\nfunction checkIgnore(item, settings) {\n if (_.get(settings, 'plugins.jquery.ignoreAjaxErrors')) {\n return !_.get(item, 'body.message.extra.isAjax');\n }\n return true;\n}\n\nmodule.exports = {\n checkIgnore: checkIgnore\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/predicates.js\n// module id = 24\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction checkLevel(item, settings) {\n var level = item.level;\n var levelVal = _.LEVELS[level] || 0;\n var reportLevel = settings.reportLevel;\n var reportLevelVal = _.LEVELS[reportLevel] || 0;\n\n if (levelVal < reportLevelVal) {\n return false;\n }\n return true;\n}\n\nfunction userCheckIgnore(logger) {\n return function(item, settings) {\n var isUncaught = !!item._isUncaught;\n delete item._isUncaught;\n var args = item._originalArgs;\n delete item._originalArgs;\n try {\n if (_.isFunction(settings.onSendCallback)) {\n settings.onSendCallback(isUncaught, args, item);\n }\n } catch (e) {\n settings.onSendCallback = null;\n logger.error('Error while calling onSendCallback, removing', e);\n }\n try {\n if (_.isFunction(settings.checkIgnore) && settings.checkIgnore(isUncaught, args, item)) {\n return false;\n }\n } catch (e) {\n settings.checkIgnore = null;\n logger.error('Error while calling custom checkIgnore(), removing', e);\n }\n return true;\n }\n}\n\nfunction urlIsNotBlacklisted(logger) {\n return function(item, settings) {\n return !urlIsOnAList(item, settings, 'blacklist', logger);\n }\n}\n\nfunction urlIsWhitelisted(logger) {\n return function(item, settings) {\n return urlIsOnAList(item, settings, 'whitelist', logger);\n }\n}\n\nfunction urlIsOnAList(item, settings, whiteOrBlack, logger) {\n // whitelist is the default\n var black = false;\n if (whiteOrBlack === 'blacklist') {\n black = true;\n }\n var list, trace, frame, filename, frameLength, url, listLength, urlRegex;\n var i, j;\n\n try {\n list = black ? settings.hostBlackList : settings.hostWhiteList;\n listLength = list && list.length;\n trace = _.get(item, 'body.trace');\n\n // These two checks are important to come first as they are defaults\n // in case the list is missing or the trace is missing or not well-formed\n if (!list || listLength === 0) {\n return !black;\n }\n if (!trace || !trace.frames || trace.frames.length === 0) {\n return !black;\n }\n\n frameLength = trace.frames.length;\n for (i = 0; i < frameLength; i++) {\n frame = trace.frames[i];\n filename = frame.filename;\n\n if (!_.isType(filename, 'string')) {\n return !black;\n }\n\n for (j = 0; j < listLength; j++) {\n url = list[j];\n urlRegex = new RegExp(url);\n\n if (urlRegex.test(filename)) {\n return true;\n }\n }\n }\n } catch (e)\n /* istanbul ignore next */\n {\n if (black) {\n settings.hostBlackList = null;\n } else {\n settings.hostWhiteList = null;\n }\n var listName = black ? 'hostBlackList' : 'hostWhiteList';\n logger.error('Error while reading your configuration\\'s ' + listName + ' option. Removing custom ' + listName + '.', e);\n return !black;\n }\n return false;\n}\n\nfunction messageIsIgnored(logger) {\n return function(item, settings) {\n var exceptionMessage, i, ignoredMessages,\n len, messageIsIgnored, rIgnoredMessage,\n body, traceMessage, bodyMessage;\n\n try {\n messageIsIgnored = false;\n ignoredMessages = settings.ignoredMessages;\n\n if (!ignoredMessages || ignoredMessages.length === 0) {\n return true;\n }\n\n body = item.body;\n traceMessage = _.get(body, 'trace.exception.message');\n bodyMessage = _.get(body, 'message.body');\n\n exceptionMessage = traceMessage || bodyMessage;\n\n if (!exceptionMessage){\n return true;\n }\n\n len = ignoredMessages.length;\n for (i = 0; i < len; i++) {\n rIgnoredMessage = new RegExp(ignoredMessages[i], 'gi');\n messageIsIgnored = rIgnoredMessage.test(exceptionMessage);\n\n if (messageIsIgnored) {\n break;\n }\n }\n } catch(e)\n /* istanbul ignore next */\n {\n settings.ignoredMessages = null;\n logger.error('Error while reading your configuration\\'s ignoredMessages option. Removing custom ignoredMessages.');\n }\n\n return !messageIsIgnored;\n }\n}\n\nmodule.exports = {\n checkLevel: checkLevel,\n userCheckIgnore: userCheckIgnore,\n urlIsNotBlacklisted: urlIsNotBlacklisted,\n urlIsWhitelisted: urlIsWhitelisted,\n messageIsIgnored: messageIsIgnored\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/predicates.js\n// module id = 25\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar urlparser = require('./url');\nvar domUtil = require('./domUtility');\n\nvar defaults = {\n network: true,\n networkResponseHeaders: false,\n networkResponseBody: false,\n networkRequestBody: false,\n log: true,\n dom: true,\n navigation: true,\n connectivity: true\n};\n\nfunction replace(obj, name, replacement, replacements, type) {\n var orig = obj[name];\n obj[name] = replacement(orig);\n if (replacements) {\n replacements[type].push([obj, name, orig]);\n }\n}\n\nfunction restore(replacements, type) {\n var b;\n while (replacements[type].length) {\n b = replacements[type].shift();\n b[0][b[1]] = b[2];\n }\n}\n\nfunction Instrumenter(options, telemeter, rollbar, _window, _document) {\n var autoInstrument = options.autoInstrument;\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.extend(true, {}, defaults, autoInstrument);\n }\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n this.telemetryScrubber = options.telemetryScrubber;\n this.telemeter = telemeter;\n this.rollbar = rollbar;\n this._window = _window || {};\n this._document = _document || {};\n this.replacements = {\n network: [],\n log: [],\n navigation: [],\n connectivity: []\n };\n this.eventRemovers = {\n dom: [],\n connectivity: []\n };\n\n this._location = this._window.location;\n this._lastHref = this._location && this._location.href;\n}\n\nInstrumenter.prototype.configure = function(options) {\n var autoInstrument = options.autoInstrument;\n var oldSettings = _.extend(true, {}, this.autoInstrument);\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.extend(true, {}, defaults, autoInstrument);\n }\n this.instrument(oldSettings);\n if (options.scrubTelemetryInputs !== undefined) {\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n }\n if (options.telemetryScrubber !== undefined) {\n this.telemetryScrubber = options.telemetryScrubber;\n }\n};\n\nInstrumenter.prototype.instrument = function(oldSettings) {\n if (this.autoInstrument.network && !(oldSettings && oldSettings.network)) {\n this.instrumentNetwork();\n } else if (!this.autoInstrument.network && oldSettings && oldSettings.network) {\n this.deinstrumentNetwork();\n }\n\n if (this.autoInstrument.log && !(oldSettings && oldSettings.log)) {\n this.instrumentConsole();\n } else if (!this.autoInstrument.log && oldSettings && oldSettings.log) {\n this.deinstrumentConsole();\n }\n\n if (this.autoInstrument.dom && !(oldSettings && oldSettings.dom)) {\n this.instrumentDom();\n } else if (!this.autoInstrument.dom && oldSettings && oldSettings.dom) {\n this.deinstrumentDom();\n }\n\n if (this.autoInstrument.navigation && !(oldSettings && oldSettings.navigation)) {\n this.instrumentNavigation();\n } else if (!this.autoInstrument.navigation && oldSettings && oldSettings.navigation) {\n this.deinstrumentNavigation();\n }\n\n if (this.autoInstrument.connectivity && !(oldSettings && oldSettings.connectivity)) {\n this.instrumentConnectivity();\n } else if (!this.autoInstrument.connectivity && oldSettings && oldSettings.connectivity) {\n this.deinstrumentConnectivity();\n }\n};\n\nInstrumenter.prototype.deinstrumentNetwork = function() {\n restore(this.replacements, 'network');\n};\n\nInstrumenter.prototype.instrumentNetwork = function() {\n var self = this;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && _.isFunction(xhr[prop])) {\n replace(xhr, prop, function(orig) {\n return self.rollbar.wrap(orig);\n });\n }\n }\n\n if ('XMLHttpRequest' in this._window) {\n var xhrp = this._window.XMLHttpRequest.prototype;\n replace(xhrp, 'open', function(orig) {\n return function(method, url) {\n if (_.isType(url, 'string')) {\n this.__rollbar_xhr = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'network');\n\n replace(xhrp, 'send', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(data) {\n /* eslint-enable no-unused-vars */\n var xhr = this;\n\n function onreadystatechangeHandler() {\n if (xhr.__rollbar_xhr && (xhr.readyState === 1 || xhr.readyState === 4)) {\n if (xhr.__rollbar_xhr.status_code === null) {\n xhr.__rollbar_xhr.status_code = 0;\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n requestData = data;\n }\n xhr.__rollbar_event = self.telemeter.captureNetwork(xhr.__rollbar_xhr, 'xhr', undefined, requestData);\n }\n if (xhr.readyState === 1) {\n xhr.__rollbar_xhr.start_time_ms = _.now();\n } else {\n xhr.__rollbar_xhr.end_time_ms = _.now();\n\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n var header, i;\n if (headersConfig === true) {\n var allHeaders = xhr.getAllResponseHeaders();\n if (allHeaders) {\n var arr = allHeaders.trim().split(/[\\r\\n]+/);\n var parts, value;\n for (i=0; i < arr.length; i++) {\n parts = arr[i].split(': ');\n header = parts.shift();\n value = parts.join(': ');\n headers[header] = value;\n }\n }\n } else {\n for (i=0; i < headersConfig.length; i++) {\n header = headersConfig[i];\n headers[header] = xhr.getResponseHeader(header);\n }\n }\n } catch (e) {\n /* we ignore the errors here that could come from different\n * browser issues with the xhr methods */\n }\n }\n var body = null;\n if (self.autoInstrument.networkResponseBody) {\n try {\n body = xhr.responseText;\n } catch (e) {\n /* ignore errors from reading responseText */\n }\n }\n var response = null;\n if (body || headers) {\n response = {};\n if (body) {\n response.body = body;\n }\n if (headers) {\n response.headers = headers;\n }\n }\n if (response) {\n xhr.__rollbar_xhr.response = response;\n }\n }\n try {\n var code = xhr.status;\n code = code === 1223 ? 204 : code;\n xhr.__rollbar_xhr.status_code = code;\n xhr.__rollbar_event.level = self.telemeter.levelFromStatus(code);\n } catch (e) {\n /* ignore possible exception from xhr.status */\n }\n }\n }\n\n wrapProp('onload', xhr);\n wrapProp('onerror', xhr);\n wrapProp('onprogress', xhr);\n\n if ('onreadystatechange' in xhr && _.isFunction(xhr.onreadystatechange)) {\n replace(xhr, 'onreadystatechange', function(orig) {\n return self.rollbar.wrap(orig, undefined, onreadystatechangeHandler);\n });\n } else {\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n return orig.apply(this, arguments);\n }\n }, this.replacements, 'network');\n }\n\n if ('fetch' in this._window) {\n replace(this._window, 'fetch', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(fn, t) {\n /* eslint-enable no-unused-vars */\n var args = new Array(arguments.length);\n for (var i=0, len=args.length; i < len; i++) {\n args[i] = arguments[i];\n }\n var input = args[0];\n var method = 'GET';\n var url;\n if (_.isType(input, 'string')) {\n url = input;\n } else if (input) {\n url = input.url;\n if (input.method) {\n method = input.method;\n }\n }\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n var metadata = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n if (args[1] && args[1].body) {\n requestData = args[1].body;\n } else if (args[0] && !_.isType(args[0], 'string') && args[0].body) {\n requestData = args[0].body;\n }\n }\n self.telemeter.captureNetwork(metadata, 'fetch', undefined, requestData);\n return orig.apply(this, args).then(function (resp) {\n metadata.end_time_ms = _.now();\n metadata.status_code = resp.status;\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n if (headersConfig === true) {\n // This is unsupported in IE so we can't do it\n /*\n var allHeaders = resp.headers.entries();\n for (var pair of allHeaders) {\n headers[pair[0]] = pair[1];\n }\n */\n } else {\n for (var i=0; i < headersConfig.length; i++) {\n var header = headersConfig[i];\n headers[header] = resp.headers.get(header);\n }\n }\n } catch (e) {\n /* ignore probable IE errors */\n }\n }\n var response = null;\n if (headers) {\n response = {\n headers: headers\n };\n }\n if (response) {\n metadata.response = response;\n }\n return resp;\n });\n };\n }, this.replacements, 'network');\n }\n};\n\nInstrumenter.prototype.deinstrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n var b;\n while (this.replacements['log'].length) {\n b = this.replacements['log'].shift();\n this._window.console[b[0]] = b[1];\n }\n};\n\nInstrumenter.prototype.instrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n\n var self = this;\n var c = this._window.console;\n\n function wrapConsole(method) {\n var orig = c[method];\n var origConsole = c;\n var level = method === 'warn' ? 'warning' : method;\n c[method] = function() {\n var args = Array.prototype.slice.call(arguments);\n var message = _.formatArgsAsString(args);\n self.telemeter.captureLog(message, level);\n if (orig) {\n Function.prototype.apply.call(orig, origConsole, args);\n }\n };\n self.replacements['log'].push([method, orig]);\n }\n var methods = ['debug','info','warn','error','log'];\n for (var i=0, len=methods.length; i < len; i++) {\n wrapConsole(methods[i]);\n }\n};\n\nInstrumenter.prototype.deinstrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n this.removeListeners('dom');\n};\n\nInstrumenter.prototype.instrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n var clickHandler = this.handleClick.bind(this);\n var blurHandler = this.handleBlur.bind(this);\n this.addListener('dom', this._window, 'click', 'onclick', clickHandler, true);\n this.addListener('dom', this._window, 'blur', 'onfocusout', blurHandler, true);\n};\n\nInstrumenter.prototype.handleClick = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n var hasTag = e && e.tagName;\n var anchorOrButton = domUtil.isDescribedElement(e, 'a') || domUtil.isDescribedElement(e, 'button');\n if (hasTag && (anchorOrButton || domUtil.isDescribedElement(e, 'input', ['button', 'submit']))) {\n this.captureDomEvent('click', e);\n } else if (domUtil.isDescribedElement(e, 'input', ['checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value, e.checked);\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleBlur = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n if (e && e.tagName) {\n if (domUtil.isDescribedElement(e, 'textarea')) {\n this.captureDomEvent('input', e, e.value);\n } else if (domUtil.isDescribedElement(e, 'select') && e.options && e.options.length) {\n this.handleSelectInputChanged(e);\n } else if (domUtil.isDescribedElement(e, 'input') && !domUtil.isDescribedElement(e, 'input', ['button', 'submit', 'hidden', 'checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value);\n }\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleSelectInputChanged = function(elem) {\n if (elem.multiple) {\n for (var i = 0; i < elem.options.length; i++) {\n if (elem.options[i].selected) {\n this.captureDomEvent('input', elem, elem.options[i].value);\n }\n }\n } else if (elem.selectedIndex >= 0 && elem.options[elem.selectedIndex]) {\n this.captureDomEvent('input', elem, elem.options[elem.selectedIndex].value);\n }\n};\n\nInstrumenter.prototype.captureDomEvent = function(subtype, element, value, isChecked) {\n if (value !== undefined) {\n if (this.scrubTelemetryInputs || (domUtil.getElementType(element) === 'password')) {\n value = '[scrubbed]';\n } else if (this.telemetryScrubber) {\n var description = domUtil.describeElement(element);\n if (this.telemetryScrubber(description)) {\n value = '[scrubbed]';\n }\n }\n }\n var elementString = domUtil.elementArrayToString(domUtil.treeToArray(element));\n this.telemeter.captureDom(subtype, elementString, value, isChecked);\n};\n\nInstrumenter.prototype.deinstrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n restore(this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.instrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n var self = this;\n replace(this._window, 'onpopstate', function(orig) {\n return function() {\n var current = self._location.href;\n self.handleUrlChange(self._lastHref, current);\n if (orig) {\n orig.apply(this, arguments);\n }\n };\n }, this.replacements, 'navigation');\n\n replace(this._window.history, 'pushState', function(orig) {\n return function() {\n var url = arguments.length > 2 ? arguments[2] : undefined;\n if (url) {\n self.handleUrlChange(self._lastHref, url + '');\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.handleUrlChange = function(from, to) {\n var parsedHref = urlparser.parse(this._location.href);\n var parsedTo = urlparser.parse(to);\n var parsedFrom = urlparser.parse(from);\n this._lastHref = to;\n if (parsedHref.protocol === parsedTo.protocol && parsedHref.host === parsedTo.host) {\n to = parsedTo.path + (parsedTo.hash || '');\n }\n if (parsedHref.protocol === parsedFrom.protocol && parsedHref.host === parsedFrom.host) {\n from = parsedFrom.path + (parsedFrom.hash || '');\n }\n this.telemeter.captureNavigation(from, to);\n};\n\nInstrumenter.prototype.deinstrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.removeListeners('connectivity');\n } else {\n restore(this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.instrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.addListener('connectivity', this._window, 'online', undefined, function() {\n this.telemeter.captureConnectivityChange('online');\n }.bind(this), true);\n this.addListener('connectivity', this._window, 'offline', undefined, function() {\n this.telemeter.captureConnectivityChange('offline');\n }.bind(this), true);\n } else {\n var self = this;\n replace(this._document.body, 'ononline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('online');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n replace(this._document.body, 'onoffline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('offline');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.addListener = function(section, obj, type, altType, handler, capture) {\n if (obj.addEventListener) {\n obj.addEventListener(type, handler, capture);\n this.eventRemovers[section].push(function() {\n obj.removeEventListener(type, handler, capture);\n });\n } else if (altType) {\n obj.attachEvent(altType, handler);\n this.eventRemovers[section].push(function() {\n obj.detachEvent(altType, handler);\n });\n }\n};\n\nInstrumenter.prototype.removeListeners = function(section) {\n var r;\n while (this.eventRemovers[section].length) {\n r = this.eventRemovers[section].shift();\n r();\n }\n};\n\nmodule.exports = Instrumenter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/telemetry.js\n// module id = 26\n// module chunks = 0","'use strict';\n\nfunction getElementType(e) {\n return (e.getAttribute('type') || '').toLowerCase();\n}\n\nfunction isDescribedElement(element, type, subtypes) {\n if (element.tagName.toLowerCase() !== type.toLowerCase()) {\n return false;\n }\n if (!subtypes) {\n return true;\n }\n element = getElementType(element);\n for (var i = 0; i < subtypes.length; i++) {\n if (subtypes[i] === element) {\n return true;\n }\n }\n return false;\n}\n\nfunction getElementFromEvent(evt, doc) {\n if (evt.target) {\n return evt.target;\n }\n if (doc && doc.elementFromPoint) {\n return doc.elementFromPoint(evt.clientX, evt.clientY);\n }\n return undefined;\n}\n\nfunction treeToArray(elem) {\n var MAX_HEIGHT = 5;\n var out = [];\n var nextDescription;\n for (var height = 0; elem && height < MAX_HEIGHT; height++) {\n nextDescription = describeElement(elem);\n if (nextDescription.tagName === 'html') {\n break;\n }\n out.unshift(nextDescription);\n elem = elem.parentNode;\n }\n return out;\n}\n\nfunction elementArrayToString(a) {\n var MAX_LENGTH = 80;\n var separator = ' > ', separatorLength = separator.length;\n var out = [], len = 0, nextStr, totalLength;\n\n for (var i = a.length - 1; i >= 0; i--) {\n nextStr = descriptionToString(a[i]);\n totalLength = len + (out.length * separatorLength) + nextStr.length;\n if (i < a.length - 1 && totalLength >= MAX_LENGTH + 3) {\n out.unshift('...');\n break;\n }\n out.unshift(nextStr);\n len += nextStr.length;\n }\n return out.join(separator);\n}\n\nfunction descriptionToString(desc) {\n if (!desc || !desc.tagName) {\n return '';\n }\n var out = [desc.tagName];\n if (desc.id) {\n out.push('#' + desc.id);\n }\n if (desc.classes) {\n out.push('.' + desc.classes.join('.'));\n }\n for (var i = 0; i < desc.attributes.length; i++) {\n out.push('[' + desc.attributes[i].key + '=\"' + desc.attributes[i].value + '\"]');\n }\n\n return out.join('');\n}\n\n/**\n * Input: a dom element\n * Output: null if tagName is falsey or input is falsey, else\n * {\n * tagName: String,\n * id: String | undefined,\n * classes: [String] | undefined,\n * attributes: [\n * {\n * key: OneOf(type, name, title, alt),\n * value: String\n * }\n * ]\n * }\n */\nfunction describeElement(elem) {\n if (!elem || !elem.tagName) {\n return null;\n }\n var out = {}, className, key, attr, i;\n out.tagName = elem.tagName.toLowerCase();\n if (elem.id) {\n out.id = elem.id;\n }\n className = elem.className;\n if (className && (typeof className === 'string')) {\n out.classes = className.split(/\\s+/);\n }\n var attributes = ['type', 'name', 'title', 'alt'];\n out.attributes = [];\n for (i = 0; i < attributes.length; i++) {\n key = attributes[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.attributes.push({key: key, value: attr});\n }\n }\n return out;\n}\n\nmodule.exports = {\n describeElement: describeElement,\n descriptionToString: descriptionToString,\n elementArrayToString: elementArrayToString,\n treeToArray: treeToArray,\n getElementFromEvent: getElementFromEvent,\n isDescribedElement: isDescribedElement,\n getElementType: getElementType\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/domUtility.js\n// module id = 27\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///rollbar.named-amd.min.js","webpack:///webpack/bootstrap 28670ddef9ef6c71006b","webpack:///./src/browser/bundles/rollbar.js","webpack:///./src/browser/rollbar.js","webpack:///./src/rollbar.js","webpack:///./src/rateLimiter.js","webpack:///./src/queue.js","webpack:///./src/utility.js","webpack:///./~/extend/index.js","webpack:///./vendor/JSON-js/json3.js","webpack:///./src/notifier.js","webpack:///./src/telemetry.js","webpack:///./src/api.js","webpack:///./src/apiUtility.js","webpack:///./src/browser/logger.js","webpack:///./~/console-polyfill/index.js","webpack:///./src/browser/detection.js","webpack:///./src/browser/globalSetup.js","webpack:///./src/browser/transport.js","webpack:///./src/browser/url.js","webpack:///./src/browser/transforms.js","webpack:///./src/browser/errorParser.js","webpack:///./~/error-stack-parser/error-stack-parser.js","webpack:///./~/error-stack-parser/~/stackframe/stackframe.js","webpack:///./src/transforms.js","webpack:///./src/browser/predicates.js","webpack:///./src/predicates.js","webpack:///./src/browser/telemetry.js","webpack:///./src/browser/domUtility.js"],"names":["define","modules","__webpack_require__","moduleId","installedModules","exports","module","id","loaded","call","m","c","p","rollbar","options","window","_rollbarConfig","alias","globalAlias","shimRunning","shimId","undefined","_rollbarStartTime","Date","getTime","Rollbar","_rollbarDidLoad","self","client","this","_","extend","defaultOptions","api","API","transport","urllib","Client","logger","gWindow","gDocument","document","addTransformsToNotifier","notifier","addPredicatesToQueue","queue","captureUncaught","handleUncaughtExceptions","globals","captureUncaughtExceptions","wrapGlobals","captureUnhandledRejections","handleUnhandledRejections","instrumenter","Instrumenter","telemeter","instrument","handleUninitialized","maybeCallback","message","error","Error","addTransform","transforms","handleItemWithError","ensureItemHasSomethingToSay","addBaseInfo","addRequestInfo","addClientInfo","addPluginInfo","addBody","sharedTransforms","addMessageWithError","addTelemetryData","addConfigToPayload","scrubPayload","userTransform","itemToPayload","addPredicate","sharedPredicates","checkLevel","predicates","checkIgnore","userCheckIgnore","urlIsNotBlacklisted","urlIsWhitelisted","messageIsIgnored","_getFirstFunction","args","i","len","length","isFunction","errorParser","_instance","init","global","configure","prototype","payloadData","oldOptions","payload","lastError","log","item","_createItem","arguments","uuid","apply","debug","info","warn","warning","critical","handleUncaughtException","url","lineno","colno","context","stackInfo","makeUnhandledStackInfo","isError","_unhandledStackInfo","level","uncaughtErrorLevel","_isUncaught","handleUnhandledRejection","reason","promise","String","_rollbarContext","_originalArgs","push","wrap","f","_before","ctxFn","_isWrap","_rollbar_wrapped","exc","e","isType","_wrappedSource","toString","_rollbarWrappedError","hasOwnProperty","prop","captureEvent","metadata","captureDomContentLoaded","ts","captureLoad","createItem","version","scrubFields","logLevel","reportLevel","endpoint","verbose","enabled","sendConfig","includeItemsInTelemetry","captureIp","platform","rateLimiter","configureGlobal","setPlatformOptions","Queue","Notifier","Telemeter","RateLimiter","maxItems","itemsPerMinute","_defaultLogLevel","_log","wait","callback","defaultLevel","_sameAsLastError","_captureRollbarItem","telemetryEvents","copyEvents","err","startTime","counter","perMinCounter","platformOptions","checkRate","limit","ignoreRateLimit","shouldSendValue","shouldSend","globalRateLimit","limitPerMin","perMinute","rateLimitPayload","msg","environment","body","extra","language","framework","name","globalSettings","now","globalRateLimitPerMin","pendingItems","pendingRequests","retryQueue","retryHandle","waitCallback","waitIntervalID","predicate","addPendingItem","removePendingItem","idx","indexOf","splice","addItem","originalError","originalItem","predicateResult","_applyPredicates","stop","_maybeLog","_makeApiRequest","resp","_dequeuePendingRequest","bind","_maybeCallWait","clearInterval","setInterval","rateLimitResponse","postItem","_maybeRetry","RETRIABLE_ERRORS","shouldRetry","retryInterval","code","_retryApiRequest","retryObject","shift","data","get","setupJSON","__initRollbarJSON","isDefined","JSON","isNativeFunction","stringify","RollbarJSON","parse","setupCustomJSON","x","t","typeName","match","toLowerCase","reRegExpChar","funcMatchString","Function","Object","replace","reIsNative","RegExp","isObject","test","value","type","u","isIterable","traverse","obj","func","seen","k","v","isObj","isArray","keys","result","redact","uuid4","d","r","Math","random","floor","sanitizeUrl","baseUrlParts","parseUri","anchor","source","query","str","o","parseUriOptions","parser","strictMode","exec","uri","key","q","$0","$1","$2","addParamsAndAccessTokenToPath","accessToken","params","access_token","paramsArray","join","sort","path","qs","h","substring","formatUrl","protocol","port","hostname","backup","jsonError","backupError","jsonParse","s","mode","backupMessage","location","line","column","guessFunctionName","gatherContext","href","useragent","navigator","userAgent","stack","wrapCallback","requestKeys","lambdaContext","custom","request","arg","extraArgs","l","typ","DOMException","j","timestamp","split","set","temp","replacement","scrub","redactQueryParam","dummy0","paramPart","dummy1","dummy2","dummy3","valPart","paramScrubber","queryRes","valScrubber","paramRes","scrubber","tmpV","_getScrubFieldRegexs","_getScrubQueryParamRegexs","pat","ret","formatArgsAsString","substr","filterIp","requestData","newIp","parts","pop","beginning","slice","slashIdx","terminal","concat","LEVELS","strict","loose","hasOwn","toStr","arr","Array","isPlainObject","hasOwnConstructor","hasIsPrototypeOf","constructor","src","copy","copyIsArray","clone","target","deep","n","this_value","valueOf","quote","string","rx_escapable","lastIndex","a","meta","charCodeAt","holder","partial","mind","gap","toJSON","rep","isFinite","indent","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","Boolean","Number","\b","\t","\n","\f","\r","\"","\\","replacer","space","","debackslashify","text","ignore","b","fromCharCode","parseInt","escapes","state","container","/","go","firstokey","okey","ovalue","firstavalue","avalue","number","action","{","}","ocomma","[","]","acomma",":","colon","SyntaxError",",","true","false","null","reviver","tx","walk","val","transform","_applyTransforms","transformIndex","transformsLength","cb","maxTelemetryEvents","MAX_EVENTS","maxQueueSize","max","min","getLevel","manual","newMaxEvents","deleteCount","capture","rollbarUUID","timestamp_ms","filterTelemetry","captureError","captureLog","captureNetwork","subtype","levelFromStatus","status_code","statusCode","captureDom","element","checked","captureNavigation","from","to","captureConnectivityChange","change","Api","jsonBackup","transportOptions","_getTransport","helpers","getTransportFromOptions","search","buildPayload","post","contextResult","defaults","proxy","opts","pathname","method","host","appendPathToPath","base","baseTrailingSlash","pathBeginningSlash","unshift","detection","ieVersion","console","con","dummy","properties","methods","getIEVersion","undef","div","createElement","all","getElementsByTagName","innerHTML","Detection","handler","shim","oldOnError","_rollbarOldOnError","onerror","belongsToShim","fn","_rollbarWindowOnError","old","_rollbarURH","removeEventListener","rejectionHandler","evt","detail","addEventListener","_extendListenerPrototype","oldAddEventListener","_rollbarOldAdd","addFn","event","bubble","oldRemoveEventListener","_rollbarOldRemove","removeFn","requestFactory","_makeRequest","stringifyResult","writeData","_createXMLHTTPObject","onreadystatechange","readyState","parseResponse","responseText","_isSuccess","_isNormalFailure","status","_newRetriableError","ex","open","setRequestHeader","send","e1","XDomainRequest","xdomainrequest","onprogress","ontimeout","onload","e2","xmlhttp","factories","XMLHttpRequest","ActiveXObject","numFactories","last","auth","hash","pathParts","_savedStackTrace","description","server","remoteString","query_string","user_ip","nav","scr","screen","runtime_ms","round","javascript","browser","cookie_enabled","cookieEnabled","width","height","cur","plugins","navPlugins","addBodyTrace","addBodyMessage","messageResult","guess","guessErrorClass","className","trace","exception","class","rawStack","raw","rawException","stackFrame","frame","pre","contextLength","mid","frames","filename","endsWith","reverse","UNKNOWN_FUNCTION","Frame","_stackFrame","fileName","lineNumber","functionName","columnNumber","Stack","getStack","parserStack","ErrorStackParser","errMsg","errClassMatch","ERR_CLASS_REGEXP","errClass","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","root","factory","StackFrame","_map","array","thisArg","map","output","_filter","filter","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","possibleNumber","isNaN","parseFloat","filtered","tokens","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","argsRaw","functionCall","_isNumber","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","getFunctionName","getArgs","TypeError","getFileName","getLineNumber","getColumnNumber","getSource","payloadOptions","tracePath","newExtra","newItem","configKey","settings","levelVal","reportLevelVal","isUncaught","onSendCallback","urlIsOnAList","whiteOrBlack","black","list","frameLength","listLength","urlRegex","hostBlackList","hostWhiteList","listName","exceptionMessage","ignoredMessages","rIgnoredMessage","traceMessage","bodyMessage","replacements","orig","restore","_window","_document","autoInstrument","scrubTelemetryInputs","telemetryScrubber","network","navigation","connectivity","eventRemovers","dom","_location","_lastHref","urlparser","domUtil","networkResponseHeaders","networkResponseBody","networkRequestBody","oldSettings","deinstrumentNetwork","instrumentNetwork","deinstrumentConsole","instrumentConsole","deinstrumentDom","instrumentDom","deinstrumentNavigation","instrumentNavigation","deinstrumentConnectivity","instrumentConnectivity","wrapProp","xhr","xhrp","__rollbar_xhr","start_time_ms","end_time_ms","onreadystatechangeHandler","__rollbar_event","headers","headersConfig","header","allHeaders","getAllResponseHeaders","trim","getResponseHeader","response","input","then","wrapConsole","origConsole","removeListeners","clickHandler","handleClick","blurHandler","handleBlur","addListener","getElementFromEvent","hasTag","tagName","anchorOrButton","isDescribedElement","captureDomEvent","handleSelectInputChanged","elem","multiple","selected","selectedIndex","isChecked","getElementType","describeElement","elementString","elementArrayToString","treeToArray","chrome","chromePackagedApp","app","runtime","hasPushState","history","pushState","current","handleUrlChange","parsedHref","parsedTo","parsedFrom","section","altType","attachEvent","detachEvent","getAttribute","subtypes","doc","elementFromPoint","clientX","clientY","nextDescription","MAX_HEIGHT","out","parentNode","nextStr","totalLength","MAX_LENGTH","separator","separatorLength","descriptionToString","desc","classes","attributes","attr"],"mappings":"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","file":"rollbar.named-amd.min.js","sourcesContent":["define(\"rollbar\", [], function() { return /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1);\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar rollbar = __webpack_require__(2);\n\t\n\tvar options = (typeof window !== 'undefined') && window._rollbarConfig;\n\tvar alias = options && options.globalAlias || 'Rollbar';\n\tvar shimRunning = (typeof window !== 'undefined') && window[alias] && typeof window[alias].shimId === 'function' && window[alias].shimId() !== undefined;\n\t\n\tif ((typeof window !== 'undefined') && !window._rollbarStartTime) {\n\t window._rollbarStartTime = (new Date()).getTime();\n\t}\n\t\n\tif (!shimRunning && options) {\n\t var Rollbar = new rollbar(options);\n\t window[alias] = Rollbar;\n\t} else if (typeof window !== 'undefined') {\n\t window.rollbar = rollbar;\n\t window._rollbarDidLoad = true;\n\t} else if (typeof self !== 'undefined') {\n\t self.rollbar = rollbar;\n\t self._rollbarDidLoad = true;\n\t}\n\t\n\tmodule.exports = rollbar;\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar Client = __webpack_require__(3);\n\tvar _ = __webpack_require__(6);\n\tvar API = __webpack_require__(11);\n\tvar logger = __webpack_require__(13);\n\tvar globals = __webpack_require__(16);\n\t\n\tvar transport = __webpack_require__(17);\n\tvar urllib = __webpack_require__(18);\n\t\n\tvar transforms = __webpack_require__(19);\n\tvar sharedTransforms = __webpack_require__(23);\n\tvar predicates = __webpack_require__(24);\n\tvar sharedPredicates = __webpack_require__(25);\n\tvar errorParser = __webpack_require__(20);\n\tvar Instrumenter = __webpack_require__(26);\n\t\n\tfunction Rollbar(options, client) {\n\t this.options = _.extend({}, defaultOptions, options);\n\t var api = new API(this.options, transport, urllib);\n\t this.client = client || new Client(this.options, api, logger, 'browser');\n\t\n\t var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n\t var gDocument = (typeof document != 'undefined') && document;\n\t addTransformsToNotifier(this.client.notifier);\n\t addPredicatesToQueue(this.client.queue);\n\t if (this.options.captureUncaught || this.options.handleUncaughtExceptions) {\n\t globals.captureUncaughtExceptions(gWindow, this);\n\t globals.wrapGlobals(gWindow, this);\n\t }\n\t if (this.options.captureUnhandledRejections || this.options.handleUnhandledRejections) {\n\t globals.captureUnhandledRejections(gWindow, this);\n\t }\n\t\n\t this.instrumenter = new Instrumenter(this.options, this.client.telemeter, this, gWindow, gDocument);\n\t this.instrumenter.instrument();\n\t}\n\t\n\tvar _instance = null;\n\tRollbar.init = function(options, client) {\n\t if (_instance) {\n\t return _instance.global(options).configure(options);\n\t }\n\t _instance = new Rollbar(options, client);\n\t return _instance;\n\t};\n\t\n\tfunction handleUninitialized(maybeCallback) {\n\t var message = 'Rollbar is not initialized';\n\t logger.error(message);\n\t if (maybeCallback) {\n\t maybeCallback(new Error(message));\n\t }\n\t}\n\t\n\tRollbar.prototype.global = function(options) {\n\t this.client.global(options);\n\t return this;\n\t};\n\tRollbar.global = function(options) {\n\t if (_instance) {\n\t return _instance.global(options);\n\t } else {\n\t handleUninitialized();\n\t }\n\t};\n\t\n\tRollbar.prototype.configure = function(options, payloadData) {\n\t var oldOptions = this.options;\n\t var payload = {};\n\t if (payloadData) {\n\t payload = {payload: payloadData};\n\t }\n\t this.options = _.extend({}, oldOptions, options, payload);\n\t this.client.configure(options, payloadData);\n\t this.instrumenter.configure(options);\n\t return this;\n\t};\n\tRollbar.configure = function(options, payloadData) {\n\t if (_instance) {\n\t return _instance.configure(options, payloadData);\n\t } else {\n\t handleUninitialized();\n\t }\n\t};\n\t\n\tRollbar.prototype.lastError = function() {\n\t return this.client.lastError;\n\t};\n\tRollbar.lastError = function() {\n\t if (_instance) {\n\t return _instance.lastError();\n\t } else {\n\t handleUninitialized();\n\t }\n\t};\n\t\n\tRollbar.prototype.log = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.log(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.log = function() {\n\t if (_instance) {\n\t return _instance.log.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.debug = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.debug(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.debug = function() {\n\t if (_instance) {\n\t return _instance.debug.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.info = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.info(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.info = function() {\n\t if (_instance) {\n\t return _instance.info.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.warn = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.warn(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.warn = function() {\n\t if (_instance) {\n\t return _instance.warn.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.warning = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.warning(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.warning = function() {\n\t if (_instance) {\n\t return _instance.warning.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.error = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.error(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.error = function() {\n\t if (_instance) {\n\t return _instance.error.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.critical = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.critical(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.critical = function() {\n\t if (_instance) {\n\t return _instance.critical.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.handleUncaughtException = function(message, url, lineno, colno, error, context) {\n\t var item;\n\t var stackInfo = _.makeUnhandledStackInfo(\n\t message,\n\t url,\n\t lineno,\n\t colno,\n\t error,\n\t 'onerror',\n\t 'uncaught exception',\n\t errorParser\n\t );\n\t if (_.isError(error)) {\n\t item = this._createItem([message, error, context]);\n\t item._unhandledStackInfo = stackInfo;\n\t } else if (_.isError(url)) {\n\t item = this._createItem([message, url, context]);\n\t item._unhandledStackInfo = stackInfo;\n\t } else {\n\t item = this._createItem([message, context]);\n\t item.stackInfo = stackInfo;\n\t }\n\t item.level = this.options.uncaughtErrorLevel;\n\t item._isUncaught = true;\n\t this.client.log(item);\n\t};\n\t\n\tRollbar.prototype.handleUnhandledRejection = function(reason, promise) {\n\t var message = 'unhandled rejection was null or undefined!';\n\t message = reason ? (reason.message || String(reason)) : message;\n\t var context = (reason && reason._rollbarContext) || (promise && promise._rollbarContext);\n\t\n\t var item;\n\t if (_.isError(reason)) {\n\t item = this._createItem([message, reason, context]);\n\t } else {\n\t item = this._createItem([message, reason, context]);\n\t item.stackInfo = _.makeUnhandledStackInfo(\n\t message,\n\t '',\n\t 0,\n\t 0,\n\t null,\n\t 'unhandledrejection',\n\t '',\n\t errorParser\n\t );\n\t }\n\t item.level = this.options.uncaughtErrorLevel;\n\t item._isUncaught = true;\n\t item._originalArgs = item._originalArgs || [];\n\t item._originalArgs.push(promise);\n\t this.client.log(item);\n\t};\n\t\n\tRollbar.prototype.wrap = function(f, context, _before) {\n\t try {\n\t var ctxFn;\n\t if(_.isFunction(context)) {\n\t ctxFn = context;\n\t } else {\n\t ctxFn = function() { return context || {}; };\n\t }\n\t\n\t if (!_.isFunction(f)) {\n\t return f;\n\t }\n\t\n\t if (f._isWrap) {\n\t return f;\n\t }\n\t\n\t if (!f._rollbar_wrapped) {\n\t f._rollbar_wrapped = function () {\n\t if (_before && _.isFunction(_before)) {\n\t _before.apply(this, arguments);\n\t }\n\t try {\n\t return f.apply(this, arguments);\n\t } catch(exc) {\n\t var e = exc;\n\t if (e) {\n\t if (_.isType(e, 'string')) {\n\t e = new String(e);\n\t }\n\t e._rollbarContext = ctxFn() || {};\n\t e._rollbarContext._wrappedSource = f.toString();\n\t\n\t window._rollbarWrappedError = e;\n\t }\n\t throw e;\n\t }\n\t };\n\t\n\t f._rollbar_wrapped._isWrap = true;\n\t\n\t if (f.hasOwnProperty) {\n\t for (var prop in f) {\n\t if (f.hasOwnProperty(prop)) {\n\t f._rollbar_wrapped[prop] = f[prop];\n\t }\n\t }\n\t }\n\t }\n\t\n\t return f._rollbar_wrapped;\n\t } catch (e) {\n\t // Return the original function if the wrap fails.\n\t return f;\n\t }\n\t};\n\tRollbar.wrap = function(f, context) {\n\t if (_instance) {\n\t return _instance.wrap(f, context);\n\t } else {\n\t handleUninitialized();\n\t }\n\t};\n\t\n\tRollbar.prototype.captureEvent = function(metadata, level) {\n\t return this.client.captureEvent(metadata, level);\n\t};\n\tRollbar.captureEvent = function(metadata, level) {\n\t if (_instance) {\n\t return _instance.captureEvent(metadata, level);\n\t } else {\n\t handleUninitialized();\n\t }\n\t};\n\t\n\t// The following two methods are used internally and are not meant for public use\n\tRollbar.prototype.captureDomContentLoaded = function(e, ts) {\n\t if (!ts) {\n\t ts = new Date();\n\t }\n\t return this.client.captureDomContentLoaded(ts);\n\t};\n\t\n\tRollbar.prototype.captureLoad = function(e, ts) {\n\t if (!ts) {\n\t ts = new Date();\n\t }\n\t return this.client.captureLoad(ts);\n\t};\n\t\n\t/* Internal */\n\t\n\tfunction addTransformsToNotifier(notifier) {\n\t notifier\n\t .addTransform(transforms.handleItemWithError)\n\t .addTransform(transforms.ensureItemHasSomethingToSay)\n\t .addTransform(transforms.addBaseInfo)\n\t .addTransform(transforms.addRequestInfo(window))\n\t .addTransform(transforms.addClientInfo(window))\n\t .addTransform(transforms.addPluginInfo(window))\n\t .addTransform(transforms.addBody)\n\t .addTransform(sharedTransforms.addMessageWithError)\n\t .addTransform(sharedTransforms.addTelemetryData)\n\t .addTransform(sharedTransforms.addConfigToPayload)\n\t .addTransform(transforms.scrubPayload)\n\t .addTransform(sharedTransforms.userTransform(logger))\n\t .addTransform(sharedTransforms.itemToPayload);\n\t}\n\t\n\tfunction addPredicatesToQueue(queue) {\n\t queue\n\t .addPredicate(sharedPredicates.checkLevel)\n\t .addPredicate(predicates.checkIgnore)\n\t .addPredicate(sharedPredicates.userCheckIgnore(logger))\n\t .addPredicate(sharedPredicates.urlIsNotBlacklisted(logger))\n\t .addPredicate(sharedPredicates.urlIsWhitelisted(logger))\n\t .addPredicate(sharedPredicates.messageIsIgnored(logger));\n\t}\n\t\n\tRollbar.prototype._createItem = function(args) {\n\t return _.createItem(args, logger, this);\n\t};\n\t\n\tfunction _getFirstFunction(args) {\n\t for (var i = 0, len = args.length; i < len; ++i) {\n\t if (_.isFunction(args[i])) {\n\t return args[i];\n\t }\n\t }\n\t return undefined;\n\t}\n\t\n\t/* global __NOTIFIER_VERSION__:false */\n\t/* global __DEFAULT_BROWSER_SCRUB_FIELDS__:false */\n\t/* global __DEFAULT_LOG_LEVEL__:false */\n\t/* global __DEFAULT_REPORT_LEVEL__:false */\n\t/* global __DEFAULT_UNCAUGHT_ERROR_LEVEL:false */\n\t/* global __DEFAULT_ENDPOINT__:false */\n\t\n\tvar defaultOptions = {\n\t version: (\"2.4.0\"),\n\t scrubFields: ([\"pw\",\"pass\",\"passwd\",\"password\",\"secret\",\"confirm_password\",\"confirmPassword\",\"password_confirmation\",\"passwordConfirmation\",\"access_token\",\"accessToken\",\"secret_key\",\"secretKey\",\"secretToken\"]),\n\t logLevel: (\"debug\"),\n\t reportLevel: (\"debug\"),\n\t uncaughtErrorLevel: (\"error\"),\n\t endpoint: (\"api.rollbar.com/api/1/item/\"),\n\t verbose: false,\n\t enabled: true,\n\t sendConfig: false,\n\t includeItemsInTelemetry: true,\n\t captureIp: true\n\t};\n\t\n\tmodule.exports = Rollbar;\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar RateLimiter = __webpack_require__(4);\n\tvar Queue = __webpack_require__(5);\n\tvar Notifier = __webpack_require__(9);\n\tvar Telemeter = __webpack_require__(10);\n\tvar _ = __webpack_require__(6);\n\t\n\t/*\n\t * Rollbar - the interface to Rollbar\n\t *\n\t * @param options\n\t * @param api\n\t * @param logger\n\t */\n\tfunction Rollbar(options, api, logger, platform) {\n\t this.options = _.extend(true, {}, options);\n\t this.logger = logger;\n\t Rollbar.rateLimiter.configureGlobal(this.options);\n\t Rollbar.rateLimiter.setPlatformOptions(platform, this.options);\n\t this.queue = new Queue(Rollbar.rateLimiter, api, logger, this.options);\n\t this.notifier = new Notifier(this.queue, this.options);\n\t this.telemeter = new Telemeter(this.options);\n\t this.lastError = null;\n\t}\n\t\n\tvar defaultOptions = {\n\t maxItems: 0,\n\t itemsPerMinute: 60\n\t};\n\t\n\tRollbar.rateLimiter = new RateLimiter(defaultOptions);\n\t\n\tRollbar.prototype.global = function(options) {\n\t Rollbar.rateLimiter.configureGlobal(options);\n\t return this;\n\t};\n\t\n\tRollbar.prototype.configure = function(options, payloadData) {\n\t this.notifier && this.notifier.configure(options);\n\t this.telemeter && this.telemeter.configure(options);\n\t var oldOptions = this.options;\n\t var payload = {};\n\t if (payloadData) {\n\t payload = {payload: payloadData};\n\t }\n\t this.options = _.extend(true, {}, oldOptions, options, payload);\n\t this.global(this.options);\n\t return this;\n\t};\n\t\n\tRollbar.prototype.log = function(item) {\n\t var level = this._defaultLogLevel();\n\t return this._log(level, item);\n\t};\n\t\n\tRollbar.prototype.debug = function(item) {\n\t this._log('debug', item);\n\t};\n\t\n\tRollbar.prototype.info = function(item) {\n\t this._log('info', item);\n\t};\n\t\n\tRollbar.prototype.warn = function(item) {\n\t this._log('warning', item);\n\t};\n\t\n\tRollbar.prototype.warning = function(item) {\n\t this._log('warning', item);\n\t};\n\t\n\tRollbar.prototype.error = function(item) {\n\t this._log('error', item);\n\t};\n\t\n\tRollbar.prototype.critical = function(item) {\n\t this._log('critical', item);\n\t};\n\t\n\tRollbar.prototype.wait = function(callback) {\n\t this.queue.wait(callback);\n\t};\n\t\n\tRollbar.prototype.captureEvent = function(metadata, level) {\n\t return this.telemeter.captureEvent(metadata, level);\n\t};\n\t\n\tRollbar.prototype.captureDomContentLoaded = function(ts) {\n\t return this.telemeter.captureDomContentLoaded(ts);\n\t};\n\t\n\tRollbar.prototype.captureLoad = function(ts) {\n\t return this.telemeter.captureLoad(ts);\n\t};\n\t\n\t/* Internal */\n\t\n\tRollbar.prototype._log = function(defaultLevel, item) {\n\t if (this._sameAsLastError(item)) {\n\t if (item.callback) {\n\t item.callback();\n\t }\n\t return;\n\t }\n\t try {\n\t var callback = null;\n\t if (item.callback) {\n\t callback = item.callback;\n\t delete item.callback;\n\t }\n\t item.level = item.level || defaultLevel;\n\t this.telemeter._captureRollbarItem(item);\n\t item.telemetryEvents = this.telemeter.copyEvents();\n\t this.notifier.log(item, callback);\n\t } catch (e) {\n\t this.logger.error(e)\n\t }\n\t};\n\t\n\tRollbar.prototype._defaultLogLevel = function() {\n\t return this.options.logLevel || 'debug';\n\t};\n\t\n\tRollbar.prototype._sameAsLastError = function(item) {\n\t if (this.lastError && this.lastError === item.err) {\n\t return true;\n\t }\n\t this.lastError = item.err;\n\t return false;\n\t};\n\t\n\tmodule.exports = Rollbar;\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\t/*\n\t * RateLimiter - an object that encapsulates the logic for counting items sent to Rollbar\n\t *\n\t * @param options - the same options that are accepted by configureGlobal offered as a convenience\n\t */\n\tfunction RateLimiter(options) {\n\t this.startTime = (new Date()).getTime();\n\t this.counter = 0;\n\t this.perMinCounter = 0;\n\t this.platform = null;\n\t this.platformOptions = {};\n\t this.configureGlobal(options);\n\t}\n\t\n\tRateLimiter.globalSettings = {\n\t startTime: (new Date()).getTime(),\n\t maxItems: undefined,\n\t itemsPerMinute: undefined\n\t};\n\t\n\t/*\n\t * configureGlobal - set the global rate limiter options\n\t *\n\t * @param options - Only the following values are recognized:\n\t * startTime: a timestamp of the form returned by (new Date()).getTime()\n\t * maxItems: the maximum items\n\t * itemsPerMinute: the max number of items to send in a given minute\n\t */\n\tRateLimiter.prototype.configureGlobal = function(options) {\n\t if (options.startTime !== undefined) {\n\t RateLimiter.globalSettings.startTime = options.startTime;\n\t }\n\t if (options.maxItems !== undefined) {\n\t RateLimiter.globalSettings.maxItems = options.maxItems;\n\t }\n\t if (options.itemsPerMinute !== undefined) {\n\t RateLimiter.globalSettings.itemsPerMinute = options.itemsPerMinute;\n\t }\n\t};\n\t\n\t/*\n\t * shouldSend - determine if we should send a given item based on rate limit settings\n\t *\n\t * @param item - the item we are about to send\n\t * @returns An object with the following structure:\n\t * error: (Error|null)\n\t * shouldSend: bool\n\t * payload: (Object|null)\n\t * If shouldSend is false, the item passed as a parameter should not be sent to Rollbar, and\n\t * exactly one of error or payload will be non-null. If error is non-null, the returned Error will\n\t * describe the situation, but it means that we were already over a rate limit (either globally or\n\t * per minute) when this item was checked. If error is null, and therefore payload is non-null, it\n\t * means this item put us over the global rate limit and the payload should be sent to Rollbar in\n\t * place of the passed in item.\n\t */\n\tRateLimiter.prototype.shouldSend = function(item, now) {\n\t now = now || (new Date()).getTime();\n\t if (now - this.startTime >= 60000) {\n\t this.startTime = now;\n\t this.perMinCounter = 0;\n\t }\n\t\n\t var globalRateLimit = RateLimiter.globalSettings.maxItems;\n\t var globalRateLimitPerMin = RateLimiter.globalSettings.itemsPerMinute;\n\t\n\t if (checkRate(item, globalRateLimit, this.counter)) {\n\t return shouldSendValue(this.platform, this.platformOptions, globalRateLimit + ' max items reached', false);\n\t } else if (checkRate(item, globalRateLimitPerMin, this.perMinCounter)) {\n\t return shouldSendValue(this.platform, this.platformOptions, globalRateLimitPerMin + ' items per minute reached', false);\n\t }\n\t this.counter++;\n\t this.perMinCounter++;\n\t\n\t var shouldSend = !checkRate(item, globalRateLimit, this.counter);\n\t var perMinute = shouldSend;\n\t shouldSend = shouldSend && !checkRate(item, globalRateLimitPerMin, this.perMinCounter);\n\t return shouldSendValue(this.platform, this.platformOptions, null, shouldSend, globalRateLimit, globalRateLimitPerMin, perMinute);\n\t};\n\t\n\tRateLimiter.prototype.setPlatformOptions = function(platform, options) {\n\t this.platform = platform;\n\t this.platformOptions = options;\n\t};\n\t\n\t/* Helpers */\n\t\n\tfunction checkRate(item, limit, counter) {\n\t return !item.ignoreRateLimit && limit >= 1 && counter > limit;\n\t}\n\t\n\tfunction shouldSendValue(platform, options, error, shouldSend, globalRateLimit, limitPerMin, perMinute) {\n\t var payload = null;\n\t if (error) {\n\t error = new Error(error);\n\t }\n\t if (!error && !shouldSend) {\n\t payload = rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute);\n\t }\n\t return {error: error, shouldSend: shouldSend, payload: payload};\n\t}\n\t\n\tfunction rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute) {\n\t var environment = options.environment || (options.payload && options.payload.environment);\n\t var msg;\n\t if (perMinute) {\n\t msg = 'item per minute limit reached, ignoring errors until timeout';\n\t } else {\n\t msg = 'maxItems has been hit, ignoring errors until reset.';\n\t }\n\t var item = {\n\t body: {\n\t message: {\n\t body: msg,\n\t extra: {\n\t maxItems: globalRateLimit,\n\t itemsPerMinute: limitPerMin\n\t }\n\t }\n\t },\n\t language: 'javascript',\n\t environment: environment,\n\t notifier: {\n\t version: (options.notifier && options.notifier.version) || options.version\n\t }\n\t };\n\t if (platform === 'browser') {\n\t item.platform = 'browser';\n\t item.framework = 'browser-js';\n\t item.notifier.name = 'rollbar-browser-js';\n\t } else if (platform === 'server') {\n\t item.framework = options.framework || 'node-js';\n\t item.notifier.name = options.notifier.name;\n\t } else if (platform === 'react-native') {\n\t item.framework = options.framework || 'react-native';\n\t item.notifier.name = options.notifier.name;\n\t }\n\t return item;\n\t}\n\t\n\tmodule.exports = RateLimiter;\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\t\n\t/*\n\t * Queue - an object which handles which handles a queue of items to be sent to Rollbar.\n\t * This object handles rate limiting via a passed in rate limiter, retries based on connection\n\t * errors, and filtering of items based on a set of configurable predicates. The communication to\n\t * the backend is performed via a given API object.\n\t *\n\t * @param rateLimiter - An object which conforms to the interface\n\t * rateLimiter.shouldSend(item) -> bool\n\t * @param api - An object which conforms to the interface\n\t * api.postItem(payload, function(err, response))\n\t * @param logger - An object used to log verbose messages if desired\n\t * @param options - see Queue.prototype.configure\n\t */\n\tfunction Queue(rateLimiter, api, logger, options) {\n\t this.rateLimiter = rateLimiter;\n\t this.api = api;\n\t this.logger = logger;\n\t this.options = options;\n\t this.predicates = [];\n\t this.pendingItems = [];\n\t this.pendingRequests = [];\n\t this.retryQueue = [];\n\t this.retryHandle = null;\n\t this.waitCallback = null;\n\t this.waitIntervalID = null;\n\t}\n\t\n\t/*\n\t * configure - updates the options this queue uses\n\t *\n\t * @param options\n\t */\n\tQueue.prototype.configure = function(options) {\n\t this.api && this.api.configure(options);\n\t var oldOptions = this.options;\n\t this.options = _.extend(true, {}, oldOptions, options);\n\t return this;\n\t};\n\t\n\t/*\n\t * addPredicate - adds a predicate to the end of the list of predicates for this queue\n\t *\n\t * @param predicate - function(item, options) -> (bool|{err: Error})\n\t * Returning true means that this predicate passes and the item is okay to go on the queue\n\t * Returning false means do not add the item to the queue, but it is not an error\n\t * Returning {err: Error} means do not add the item to the queue, and the given error explains why\n\t * Returning {err: undefined} is equivalent to returning true but don't do that\n\t */\n\tQueue.prototype.addPredicate = function(predicate) {\n\t if (_.isFunction(predicate)) {\n\t this.predicates.push(predicate);\n\t }\n\t return this;\n\t};\n\t\n\tQueue.prototype.addPendingItem = function(item) {\n\t this.pendingItems.push(item);\n\t};\n\t\n\tQueue.prototype.removePendingItem = function(item) {\n\t var idx = this.pendingItems.indexOf(item);\n\t if (idx !== -1) {\n\t this.pendingItems.splice(idx, 1);\n\t }\n\t};\n\t\n\t/*\n\t * addItem - Send an item to the Rollbar API if all of the predicates are satisfied\n\t *\n\t * @param item - The payload to send to the backend\n\t * @param callback - function(error, repsonse) which will be called with the response from the API\n\t * in the case of a success, otherwise response will be null and error will have a value. If both\n\t * error and response are null then the item was stopped by a predicate which did not consider this\n\t * to be an error condition, but nonetheless did not send the item to the API.\n\t * @param originalError - The original error before any transformations that is to be logged if any\n\t */\n\tQueue.prototype.addItem = function(item, callback, originalError, originalItem) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() { return; };\n\t }\n\t var predicateResult = this._applyPredicates(item);\n\t if (predicateResult.stop) {\n\t this.removePendingItem(originalItem);\n\t callback(predicateResult.err);\n\t return;\n\t }\n\t this._maybeLog(item, originalError);\n\t this.removePendingItem(originalItem);\n\t this.pendingRequests.push(item);\n\t try {\n\t this._makeApiRequest(item, function(err, resp) {\n\t this._dequeuePendingRequest(item);\n\t callback(err, resp);\n\t }.bind(this));\n\t } catch (e) {\n\t this._dequeuePendingRequest(item);\n\t callback(e);\n\t }\n\t};\n\t\n\t/*\n\t * wait - Stop any further errors from being added to the queue, and get called back when all items\n\t * currently processing have finished sending to the backend.\n\t *\n\t * @param callback - function() called when all pending items have been sent\n\t */\n\tQueue.prototype.wait = function(callback) {\n\t if (!_.isFunction(callback)) {\n\t return;\n\t }\n\t this.waitCallback = callback;\n\t if (this._maybeCallWait()) {\n\t return;\n\t }\n\t if (this.waitIntervalID) {\n\t this.waitIntervalID = clearInterval(this.waitIntervalID);\n\t }\n\t this.waitIntervalID = setInterval(function() {\n\t this._maybeCallWait();\n\t }.bind(this), 500);\n\t};\n\t\n\t/* _applyPredicates - Sequentially applies the predicates that have been added to the queue to the\n\t * given item with the currently configured options.\n\t *\n\t * @param item - An item in the queue\n\t * @returns {stop: bool, err: (Error|null)} - stop being true means do not add item to the queue,\n\t * the error value should be passed up to a callbak if we are stopping.\n\t */\n\tQueue.prototype._applyPredicates = function(item) {\n\t var p = null;\n\t for (var i = 0, len = this.predicates.length; i < len; i++) {\n\t p = this.predicates[i](item, this.options);\n\t if (!p || p.err !== undefined) {\n\t return {stop: true, err: p.err};\n\t }\n\t }\n\t return {stop: false, err: null};\n\t};\n\t\n\t/*\n\t * _makeApiRequest - Send an item to Rollbar, callback when done, if there is an error make an\n\t * effort to retry if we are configured to do so.\n\t *\n\t * @param item - an item ready to send to the backend\n\t * @param callback - function(err, response)\n\t */\n\tQueue.prototype._makeApiRequest = function(item, callback) {\n\t var rateLimitResponse = this.rateLimiter.shouldSend(item);\n\t if (rateLimitResponse.shouldSend) {\n\t this.api.postItem(item, function(err, resp) {\n\t if (err) {\n\t this._maybeRetry(err, item, callback);\n\t } else {\n\t callback(err, resp);\n\t }\n\t }.bind(this));\n\t } else if (rateLimitResponse.error) {\n\t callback(rateLimitResponse.error);\n\t } else {\n\t this.api.postItem(rateLimitResponse.payload, callback);\n\t }\n\t};\n\t\n\t// These are errors basically mean there is no internet connection\n\tvar RETRIABLE_ERRORS = ['ECONNRESET', 'ENOTFOUND', 'ESOCKETTIMEDOUT', 'ETIMEDOUT', 'ECONNREFUSED', 'EHOSTUNREACH', 'EPIPE', 'EAI_AGAIN'];\n\t\n\t/*\n\t * _maybeRetry - Given the error returned by the API, decide if we should retry or just callback\n\t * with the error.\n\t *\n\t * @param err - an error returned by the API transport\n\t * @param item - the item that was trying to be sent when this error occured\n\t * @param callback - function(err, response)\n\t */\n\tQueue.prototype._maybeRetry = function(err, item, callback) {\n\t var shouldRetry = false;\n\t if (this.options.retryInterval) {\n\t for (var i = 0, len = RETRIABLE_ERRORS.length; i < len; i++) {\n\t if (err.code === RETRIABLE_ERRORS[i]) {\n\t shouldRetry = true;\n\t break;\n\t }\n\t }\n\t }\n\t if (shouldRetry) {\n\t this._retryApiRequest(item, callback);\n\t } else {\n\t callback(err);\n\t }\n\t};\n\t\n\t/*\n\t * _retryApiRequest - Add an item and a callback to a queue and possibly start a timer to process\n\t * that queue based on the retryInterval in the options for this queue.\n\t *\n\t * @param item - an item that failed to send due to an error we deem retriable\n\t * @param callback - function(err, response)\n\t */\n\tQueue.prototype._retryApiRequest = function(item, callback) {\n\t this.retryQueue.push({item: item, callback: callback});\n\t\n\t if (!this.retryHandle) {\n\t this.retryHandle = setInterval(function() {\n\t while (this.retryQueue.length) {\n\t var retryObject = this.retryQueue.shift();\n\t this._makeApiRequest(retryObject.item, retryObject.callback);\n\t }\n\t }.bind(this), this.options.retryInterval);\n\t }\n\t};\n\t\n\t/*\n\t * _dequeuePendingRequest - Removes the item from the pending request queue, this queue is used to\n\t * enable to functionality of providing a callback that clients can pass to `wait` to be notified\n\t * when the pending request queue has been emptied. This must be called when the API finishes\n\t * processing this item. If a `wait` callback is configured, it is called by this function.\n\t *\n\t * @param item - the item previously added to the pending request queue\n\t */\n\tQueue.prototype._dequeuePendingRequest = function(item) {\n\t var idx = this.pendingRequests.indexOf(item);\n\t if (idx !== -1) {\n\t this.pendingRequests.splice(idx, 1);\n\t this._maybeCallWait();\n\t }\n\t};\n\t\n\tQueue.prototype._maybeLog = function(data, originalError) {\n\t if (this.logger && this.options.verbose) {\n\t var message = originalError;\n\t message = message || _.get(data, 'body.trace.exception.message');\n\t message = message || _.get(data, 'body.trace_chain.0.exception.message');\n\t if (message) {\n\t this.logger.error(message);\n\t return;\n\t }\n\t message = _.get(data, 'body.message.body');\n\t if (message) {\n\t this.logger.log(message);\n\t }\n\t }\n\t};\n\t\n\tQueue.prototype._maybeCallWait = function() {\n\t if (_.isFunction(this.waitCallback) && this.pendingItems.length === 0 && this.pendingRequests.length === 0) {\n\t if (this.waitIntervalID) {\n\t this.waitIntervalID = clearInterval(this.waitIntervalID);\n\t }\n\t this.waitCallback();\n\t return true;\n\t }\n\t return false;\n\t};\n\t\n\tmodule.exports = Queue;\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar extend = __webpack_require__(7);\n\t\n\tvar RollbarJSON = {};\n\tvar __initRollbarJSON = false;\n\tfunction setupJSON() {\n\t if (__initRollbarJSON) {\n\t return;\n\t }\n\t __initRollbarJSON = true;\n\t\n\t if (isDefined(JSON)) {\n\t if (isNativeFunction(JSON.stringify)) {\n\t RollbarJSON.stringify = JSON.stringify;\n\t }\n\t if (isNativeFunction(JSON.parse)) {\n\t RollbarJSON.parse = JSON.parse;\n\t }\n\t }\n\t if (!isFunction(RollbarJSON.stringify) || !isFunction(RollbarJSON.parse)) {\n\t var setupCustomJSON = __webpack_require__(8);\n\t setupCustomJSON(RollbarJSON);\n\t }\n\t}\n\tsetupJSON();\n\t\n\t/*\n\t * isType - Given a Javascript value and a string, returns true if the type of the value matches the\n\t * given string.\n\t *\n\t * @param x - any value\n\t * @param t - a lowercase string containing one of the following type names:\n\t * - undefined\n\t * - null\n\t * - error\n\t * - number\n\t * - boolean\n\t * - string\n\t * - symbol\n\t * - function\n\t * - object\n\t * - array\n\t * @returns true if x is of type t, otherwise false\n\t */\n\tfunction isType(x, t) {\n\t return t === typeName(x);\n\t}\n\t\n\t/*\n\t * typeName - Given a Javascript value, returns the type of the object as a string\n\t */\n\tfunction typeName(x) {\n\t var name = typeof x;\n\t if (name !== 'object') {\n\t return name;\n\t }\n\t if (!x) {\n\t return 'null';\n\t }\n\t if (x instanceof Error) {\n\t return 'error';\n\t }\n\t return ({}).toString.call(x).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n\t}\n\t\n\t/* isFunction - a convenience function for checking if a value is a function\n\t *\n\t * @param f - any value\n\t * @returns true if f is a function, otherwise false\n\t */\n\tfunction isFunction(f) {\n\t return isType(f, 'function');\n\t}\n\t\n\t/* isNativeFunction - a convenience function for checking if a value is a native JS function\n\t *\n\t * @param f - any value\n\t * @returns true if f is a native JS function, otherwise false\n\t */\n\tfunction isNativeFunction(f) {\n\t var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\t var funcMatchString = Function.prototype.toString.call(Object.prototype.hasOwnProperty)\n\t .replace(reRegExpChar, '\\\\$&')\n\t .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?');\n\t var reIsNative = RegExp('^' + funcMatchString + '$');\n\t return isObject(f) && reIsNative.test(f);\n\t}\n\t\n\t/* isObject - Checks if the argument is an object\n\t *\n\t * @param value - any value\n\t * @returns true is value is an object function is an object)\n\t*/\n\tfunction isObject(value) {\n\t var type = typeof value;\n\t return value != null && (type == 'object' || type == 'function');\n\t}\n\t\n\t/*\n\t * isDefined - a convenience function for checking if a value is not equal to undefined\n\t *\n\t * @param u - any value\n\t * @returns true if u is anything other than undefined\n\t */\n\tfunction isDefined(u) {\n\t return !isType(u, 'undefined');\n\t}\n\t\n\t/*\n\t * isIterable - convenience function for checking if a value can be iterated, essentially\n\t * whether it is an object or an array.\n\t *\n\t * @param i - any value\n\t * @returns true if i is an object or an array as determined by `typeName`\n\t */\n\tfunction isIterable(i) {\n\t var type = typeName(i);\n\t return (type === 'object' || type === 'array');\n\t}\n\t\n\t/*\n\t * isError - convenience function for checking if a value is of an error type\n\t *\n\t * @param e - any value\n\t * @returns true if e is an error\n\t */\n\tfunction isError(e) {\n\t return isType(e, 'error');\n\t}\n\t\n\tfunction traverse(obj, func, seen) {\n\t var k, v, i;\n\t var isObj = isType(obj, 'object');\n\t var isArray = isType(obj, 'array');\n\t var keys = [];\n\t\n\t if (isObj && seen.indexOf(obj) !== -1) {\n\t return obj;\n\t }\n\t seen.push(obj);\n\t\n\t if (isObj) {\n\t for (k in obj) {\n\t if (Object.prototype.hasOwnProperty.call(obj, k)) {\n\t keys.push(k);\n\t }\n\t }\n\t } else if (isArray) {\n\t for (i = 0; i < obj.length; ++i) {\n\t keys.push(i);\n\t }\n\t }\n\t\n\t var result = isObj ? {} : [];\n\t for (i = 0; i < keys.length; ++i) {\n\t k = keys[i];\n\t v = obj[k];\n\t result[k] = func(k, v, seen);\n\t }\n\t\n\t return (keys.length != 0) ? result : obj;\n\t}\n\t\n\tfunction redact() {\n\t return '********';\n\t}\n\t\n\t// from http://stackoverflow.com/a/8809472/1138191\n\tfunction uuid4() {\n\t var d = now();\n\t var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n\t var r = (d + Math.random() * 16) % 16 | 0;\n\t d = Math.floor(d / 16);\n\t return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16);\n\t });\n\t return uuid;\n\t}\n\t\n\tvar LEVELS = {\n\t debug: 0,\n\t info: 1,\n\t warning: 2,\n\t error: 3,\n\t critical: 4\n\t};\n\t\n\tfunction sanitizeUrl(url) {\n\t var baseUrlParts = parseUri(url);\n\t // remove a trailing # if there is no anchor\n\t if (baseUrlParts.anchor === '') {\n\t baseUrlParts.source = baseUrlParts.source.replace('#', '');\n\t }\n\t\n\t url = baseUrlParts.source.replace('?' + baseUrlParts.query, '');\n\t return url;\n\t}\n\t\n\tvar parseUriOptions = {\n\t strictMode: false,\n\t key: [\n\t 'source',\n\t 'protocol',\n\t 'authority',\n\t 'userInfo',\n\t 'user',\n\t 'password',\n\t 'host',\n\t 'port',\n\t 'relative',\n\t 'path',\n\t 'directory',\n\t 'file',\n\t 'query',\n\t 'anchor'\n\t ],\n\t q: {\n\t name: 'queryKey',\n\t parser: /(?:^|&)([^&=]*)=?([^&]*)/g\n\t },\n\t parser: {\n\t strict: /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,\n\t loose: /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/\n\t }\n\t};\n\t\n\tfunction parseUri(str) {\n\t if (!isType(str, 'string')) {\n\t throw new Error('received invalid input');\n\t }\n\t\n\t var o = parseUriOptions;\n\t var m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str);\n\t var uri = {};\n\t var i = o.key.length;\n\t\n\t while (i--) {\n\t uri[o.key[i]] = m[i] || '';\n\t }\n\t\n\t uri[o.q.name] = {};\n\t uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {\n\t if ($1) {\n\t uri[o.q.name][$1] = $2;\n\t }\n\t });\n\t\n\t return uri;\n\t}\n\t\n\tfunction addParamsAndAccessTokenToPath(accessToken, options, params) {\n\t params = params || {};\n\t params.access_token = accessToken;\n\t var paramsArray = [];\n\t var k;\n\t for (k in params) {\n\t if (Object.prototype.hasOwnProperty.call(params, k)) {\n\t paramsArray.push([k, params[k]].join('='));\n\t }\n\t }\n\t var query = '?' + paramsArray.sort().join('&');\n\t\n\t options = options || {};\n\t options.path = options.path || '';\n\t var qs = options.path.indexOf('?');\n\t var h = options.path.indexOf('#');\n\t var p;\n\t if (qs !== -1 && (h === -1 || h > qs)) {\n\t p = options.path;\n\t options.path = p.substring(0,qs) + query + '&' + p.substring(qs+1);\n\t } else {\n\t if (h !== -1) {\n\t p = options.path;\n\t options.path = p.substring(0,h) + query + p.substring(h);\n\t } else {\n\t options.path = options.path + query;\n\t }\n\t }\n\t}\n\t\n\tfunction formatUrl(u, protocol) {\n\t protocol = protocol || u.protocol;\n\t if (!protocol && u.port) {\n\t if (u.port === 80) {\n\t protocol = 'http:';\n\t } else if (u.port === 443) {\n\t protocol = 'https:';\n\t }\n\t }\n\t protocol = protocol || 'https:';\n\t\n\t if (!u.hostname) {\n\t return null;\n\t }\n\t var result = protocol + '//' + u.hostname;\n\t if (u.port) {\n\t result = result + ':' + u.port;\n\t }\n\t if (u.path) {\n\t result = result + u.path;\n\t }\n\t return result;\n\t}\n\t\n\tfunction stringify(obj, backup) {\n\t var value, error;\n\t try {\n\t value = RollbarJSON.stringify(obj);\n\t } catch (jsonError) {\n\t if (backup && isFunction(backup)) {\n\t try {\n\t value = backup(obj);\n\t } catch (backupError) {\n\t error = backupError;\n\t }\n\t } else {\n\t error = jsonError;\n\t }\n\t }\n\t return {error: error, value: value};\n\t}\n\t\n\tfunction jsonParse(s) {\n\t var value, error;\n\t try {\n\t value = RollbarJSON.parse(s);\n\t } catch (e) {\n\t error = e;\n\t }\n\t return {error: error, value: value};\n\t}\n\t\n\tfunction makeUnhandledStackInfo(\n\t message,\n\t url,\n\t lineno,\n\t colno,\n\t error,\n\t mode,\n\t backupMessage,\n\t errorParser\n\t) {\n\t var location = {\n\t url: url || '',\n\t line: lineno,\n\t column: colno\n\t };\n\t location.func = errorParser.guessFunctionName(location.url, location.line);\n\t location.context = errorParser.gatherContext(location.url, location.line);\n\t var href = document && document.location && document.location.href;\n\t var useragent = window && window.navigator && window.navigator.userAgent;\n\t return {\n\t 'mode': mode,\n\t 'message': error ? String(error) : (message || backupMessage),\n\t 'url': href,\n\t 'stack': [location],\n\t 'useragent': useragent\n\t };\n\t}\n\t\n\tfunction wrapCallback(logger, f) {\n\t return function(err, resp) {\n\t try {\n\t f(err, resp);\n\t } catch (e) {\n\t logger.error(e);\n\t }\n\t };\n\t}\n\t\n\tfunction createItem(args, logger, notifier, requestKeys, lambdaContext) {\n\t var message, err, custom, callback, request;\n\t var arg;\n\t var extraArgs = [];\n\t\n\t for (var i = 0, l = args.length; i < l; ++i) {\n\t arg = args[i];\n\t\n\t var typ = typeName(arg);\n\t switch (typ) {\n\t case 'undefined':\n\t break;\n\t case 'string':\n\t message ? extraArgs.push(arg) : message = arg;\n\t break;\n\t case 'function':\n\t callback = wrapCallback(logger, arg);\n\t break;\n\t case 'date':\n\t extraArgs.push(arg);\n\t break;\n\t case 'error':\n\t case 'domexception':\n\t err ? extraArgs.push(arg) : err = arg;\n\t break;\n\t case 'object':\n\t case 'array':\n\t if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n\t err ? extraArgs.push(arg) : err = arg;\n\t break;\n\t }\n\t if (requestKeys && typ === 'object' && !request) {\n\t for (var j = 0, len = requestKeys.length; j < len; ++j) {\n\t if (arg[requestKeys[j]] !== undefined) {\n\t request = arg;\n\t break;\n\t }\n\t }\n\t if (request) {\n\t break;\n\t }\n\t }\n\t custom ? extraArgs.push(arg) : custom = arg;\n\t break;\n\t default:\n\t if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n\t err ? extraArgs.push(arg) : err = arg;\n\t break;\n\t }\n\t extraArgs.push(arg);\n\t }\n\t }\n\t\n\t if (extraArgs.length > 0) {\n\t // if custom is an array this turns it into an object with integer keys\n\t custom = extend(true, {}, custom);\n\t custom.extraArgs = extraArgs;\n\t }\n\t\n\t var item = {\n\t message: message,\n\t err: err,\n\t custom: custom,\n\t timestamp: now(),\n\t callback: callback,\n\t uuid: uuid4()\n\t };\n\t if (custom && custom.level !== undefined) {\n\t item.level = custom.level;\n\t delete custom.level;\n\t }\n\t if (requestKeys && request) {\n\t item.request = request;\n\t }\n\t if (lambdaContext) {\n\t item.lambdaContext = lambdaContext;\n\t }\n\t item._originalArgs = args;\n\t return item;\n\t}\n\t\n\t/*\n\t * get - given an obj/array and a keypath, return the value at that keypath or\n\t * undefined if not possible.\n\t *\n\t * @param obj - an object or array\n\t * @param path - a string of keys separated by '.' such as 'plugin.jquery.0.message'\n\t * which would correspond to 42 in `{plugin: {jquery: [{message: 42}]}}`\n\t */\n\tfunction get(obj, path) {\n\t if (!obj) {\n\t return undefined;\n\t }\n\t var keys = path.split('.');\n\t var result = obj;\n\t try {\n\t for (var i = 0, len = keys.length; i < len; ++i) {\n\t result = result[keys[i]];\n\t }\n\t } catch (e) {\n\t result = undefined;\n\t }\n\t return result;\n\t}\n\t\n\tfunction set(obj, path, value) {\n\t if (!obj) {\n\t return;\n\t }\n\t var keys = path.split('.');\n\t var len = keys.length;\n\t if (len < 1) {\n\t return;\n\t }\n\t if (len === 1) {\n\t obj[keys[0]] = value;\n\t return;\n\t }\n\t try {\n\t var temp = obj[keys[0]] || {};\n\t var replacement = temp;\n\t for (var i = 1; i < len-1; i++) {\n\t temp[keys[i]] = temp[keys[i]] || {};\n\t temp = temp[keys[i]];\n\t }\n\t temp[keys[len-1]] = value;\n\t obj[keys[0]] = replacement;\n\t } catch (e) {\n\t return;\n\t }\n\t}\n\t\n\tfunction scrub(data, scrubFields) {\n\t scrubFields = scrubFields || [];\n\t var paramRes = _getScrubFieldRegexs(scrubFields);\n\t var queryRes = _getScrubQueryParamRegexs(scrubFields);\n\t\n\t function redactQueryParam(dummy0, paramPart, dummy1, dummy2, dummy3, valPart) {\n\t return paramPart + redact(valPart);\n\t }\n\t\n\t function paramScrubber(v) {\n\t var i;\n\t if (isType(v, 'string')) {\n\t for (i = 0; i < queryRes.length; ++i) {\n\t v = v.replace(queryRes[i], redactQueryParam);\n\t }\n\t }\n\t return v;\n\t }\n\t\n\t function valScrubber(k, v) {\n\t var i;\n\t for (i = 0; i < paramRes.length; ++i) {\n\t if (paramRes[i].test(k)) {\n\t v = redact(v);\n\t break;\n\t }\n\t }\n\t return v;\n\t }\n\t\n\t function scrubber(k, v, seen) {\n\t var tmpV = valScrubber(k, v);\n\t if (tmpV === v) {\n\t if (isType(v, 'object') || isType(v, 'array')) {\n\t return traverse(v, scrubber, seen);\n\t }\n\t return paramScrubber(tmpV);\n\t } else {\n\t return tmpV;\n\t }\n\t }\n\t\n\t return traverse(data, scrubber, []);\n\t}\n\t\n\tfunction _getScrubFieldRegexs(scrubFields) {\n\t var ret = [];\n\t var pat;\n\t for (var i = 0; i < scrubFields.length; ++i) {\n\t pat = '^\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?$';\n\t ret.push(new RegExp(pat, 'i'));\n\t }\n\t return ret;\n\t}\n\t\n\t\n\tfunction _getScrubQueryParamRegexs(scrubFields) {\n\t var ret = [];\n\t var pat;\n\t for (var i = 0; i < scrubFields.length; ++i) {\n\t pat = '\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?';\n\t ret.push(new RegExp('(' + pat + '=)([^&\\\\n]+)', 'igm'));\n\t }\n\t return ret;\n\t}\n\t\n\tfunction formatArgsAsString(args) {\n\t var i, len, arg;\n\t var result = [];\n\t for (i = 0, len = args.length; i < len; i++) {\n\t arg = args[i];\n\t if (typeof arg === 'object') {\n\t arg = stringify(arg);\n\t arg = arg.error || arg.value;\n\t if (arg.length > 500)\n\t arg = arg.substr(0,500)+'...';\n\t } else if (typeof arg === 'undefined') {\n\t arg = 'undefined';\n\t }\n\t result.push(arg);\n\t }\n\t return result.join(' ');\n\t}\n\t\n\tfunction now() {\n\t if (Date.now) {\n\t return +Date.now();\n\t }\n\t return +new Date();\n\t}\n\t\n\tfunction filterIp(requestData, captureIp) {\n\t if (!requestData || !requestData['user_ip'] || captureIp === true) {\n\t return;\n\t }\n\t var newIp = requestData['user_ip'];\n\t if (!captureIp) {\n\t newIp = null;\n\t } else {\n\t try {\n\t var parts;\n\t if (newIp.indexOf('.') !== -1) {\n\t parts = newIp.split('.');\n\t parts.pop();\n\t parts.push('0');\n\t newIp = parts.join('.');\n\t } else if (newIp.indexOf(':') !== -1) {\n\t parts = newIp.split(':');\n\t if (parts.length > 2) {\n\t var beginning = parts.slice(0, 3);\n\t var slashIdx = beginning[2].indexOf('/');\n\t if (slashIdx !== -1) {\n\t beginning[2] = beginning[2].substring(0, slashIdx);\n\t }\n\t var terminal = '0000:0000:0000:0000:0000';\n\t newIp = beginning.concat(terminal).join(':');\n\t }\n\t } else {\n\t newIp = null;\n\t }\n\t } catch (e) {\n\t newIp = null;\n\t }\n\t }\n\t requestData['user_ip'] = newIp;\n\t}\n\t\n\tmodule.exports = {\n\t isType: isType,\n\t typeName: typeName,\n\t isFunction: isFunction,\n\t isNativeFunction: isNativeFunction,\n\t isIterable: isIterable,\n\t isError: isError,\n\t extend: extend,\n\t traverse: traverse,\n\t redact: redact,\n\t uuid4: uuid4,\n\t LEVELS: LEVELS,\n\t sanitizeUrl: sanitizeUrl,\n\t addParamsAndAccessTokenToPath: addParamsAndAccessTokenToPath,\n\t formatUrl: formatUrl,\n\t stringify: stringify,\n\t jsonParse: jsonParse,\n\t makeUnhandledStackInfo: makeUnhandledStackInfo,\n\t createItem: createItem,\n\t get: get,\n\t set: set,\n\t scrub: scrub,\n\t formatArgsAsString: formatArgsAsString,\n\t now: now,\n\t filterIp: filterIp\n\t};\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tvar hasOwn = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\t\n\tvar isArray = function isArray(arr) {\n\t\tif (typeof Array.isArray === 'function') {\n\t\t\treturn Array.isArray(arr);\n\t\t}\n\t\n\t\treturn toStr.call(arr) === '[object Array]';\n\t};\n\t\n\tvar isPlainObject = function isPlainObject(obj) {\n\t\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\t\treturn false;\n\t\t}\n\t\n\t\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\t\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t\t// Not own constructor property must be Object\n\t\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\t\treturn false;\n\t\t}\n\t\n\t\t// Own properties are enumerated firstly, so to speed up,\n\t\t// if last one is own, then all properties are own.\n\t\tvar key;\n\t\tfor (key in obj) {/**/}\n\t\n\t\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n\t};\n\t\n\tmodule.exports = function extend() {\n\t\tvar options, name, src, copy, copyIsArray, clone,\n\t\t\ttarget = arguments[0],\n\t\t\ti = 1,\n\t\t\tlength = arguments.length,\n\t\t\tdeep = false;\n\t\n\t\t// Handle a deep copy situation\n\t\tif (typeof target === 'boolean') {\n\t\t\tdeep = target;\n\t\t\ttarget = arguments[1] || {};\n\t\t\t// skip the boolean and the target\n\t\t\ti = 2;\n\t\t} else if ((typeof target !== 'object' && typeof target !== 'function') || target == null) {\n\t\t\ttarget = {};\n\t\t}\n\t\n\t\tfor (; i < length; ++i) {\n\t\t\toptions = arguments[i];\n\t\t\t// Only deal with non-null/undefined values\n\t\t\tif (options != null) {\n\t\t\t\t// Extend the base object\n\t\t\t\tfor (name in options) {\n\t\t\t\t\tsrc = target[name];\n\t\t\t\t\tcopy = options[name];\n\t\n\t\t\t\t\t// Prevent never-ending loop\n\t\t\t\t\tif (target !== copy) {\n\t\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\t\ttarget[name] = extend(deep, clone, copy);\n\t\n\t\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\t// Return the modified object\n\t\treturn target;\n\t};\n\t\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports) {\n\n\t// json3.js\n\t// 2017-02-21\n\t// Public Domain.\n\t// NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n\t// See http://www.JSON.org/js.html\n\t// This code should be minified before deployment.\n\t// See http://javascript.crockford.com/jsmin.html\n\t\n\t// USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n\t// NOT CONTROL.\n\t\n\t// This file creates a global JSON object containing two methods: stringify\n\t// and parse. This file provides the ES5 JSON capability to ES3 systems.\n\t// If a project might run on IE8 or earlier, then this file should be included.\n\t// This file does nothing on ES5 systems.\n\t\n\t// JSON.stringify(value, replacer, space)\n\t// value any JavaScript value, usually an object or array.\n\t// replacer an optional parameter that determines how object\n\t// values are stringified for objects. It can be a\n\t// function or an array of strings.\n\t// space an optional parameter that specifies the indentation\n\t// of nested structures. If it is omitted, the text will\n\t// be packed without extra whitespace. If it is a number,\n\t// it will specify the number of spaces to indent at each\n\t// level. If it is a string (such as \"\\t\" or \" \"),\n\t// it contains the characters used to indent at each level.\n\t// This method produces a JSON text from a JavaScript value.\n\t// When an object value is found, if the object contains a toJSON\n\t// method, its toJSON method will be called and the result will be\n\t// stringified. A toJSON method does not serialize: it returns the\n\t// value represented by the name/value pair that should be serialized,\n\t// or undefined if nothing should be serialized. The toJSON method\n\t// will be passed the key associated with the value, and this will be\n\t// bound to the value.\n\t\n\t// For example, this would serialize Dates as ISO strings.\n\t\n\t// Date.prototype.toJSON = function (key) {\n\t// function f(n) {\n\t// // Format integers to have at least two digits.\n\t// return (n < 10)\n\t// ? \"0\" + n\n\t// : n;\n\t// }\n\t// return this.getUTCFullYear() + \"-\" +\n\t// f(this.getUTCMonth() + 1) + \"-\" +\n\t// f(this.getUTCDate()) + \"T\" +\n\t// f(this.getUTCHours()) + \":\" +\n\t// f(this.getUTCMinutes()) + \":\" +\n\t// f(this.getUTCSeconds()) + \"Z\";\n\t// };\n\t\n\t// You can provide an optional replacer method. It will be passed the\n\t// key and value of each member, with this bound to the containing\n\t// object. The value that is returned from your method will be\n\t// serialized. If your method returns undefined, then the member will\n\t// be excluded from the serialization.\n\t\n\t// If the replacer parameter is an array of strings, then it will be\n\t// used to select the members to be serialized. It filters the results\n\t// such that only members with keys listed in the replacer array are\n\t// stringified.\n\t\n\t// Values that do not have JSON representations, such as undefined or\n\t// functions, will not be serialized. Such values in objects will be\n\t// dropped; in arrays they will be replaced with null. You can use\n\t// a replacer function to replace those with JSON values.\n\t\n\t// JSON.stringify(undefined) returns undefined.\n\t\n\t// The optional space parameter produces a stringification of the\n\t// value that is filled with line breaks and indentation to make it\n\t// easier to read.\n\t\n\t// If the space parameter is a non-empty string, then that string will\n\t// be used for indentation. If the space parameter is a number, then\n\t// the indentation will be that many spaces.\n\t\n\t// Example:\n\t\n\t// text = JSON.stringify([\"e\", {pluribus: \"unum\"}]);\n\t// // text is '[\"e\",{\"pluribus\":\"unum\"}]'\n\t\n\t// text = JSON.stringify([\"e\", {pluribus: \"unum\"}], null, \"\\t\");\n\t// // text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\n\t\n\t// text = JSON.stringify([new Date()], function (key, value) {\n\t// return this[key] instanceof Date\n\t// ? \"Date(\" + this[key] + \")\"\n\t// : value;\n\t// });\n\t// // text is '[\"Date(---current time---)\"]'\n\t\n\t// JSON.parse(text, reviver)\n\t// This method parses a JSON text to produce an object or array.\n\t// It can throw a SyntaxError exception.\n\t// This has been modified to use JSON-js/json_parse_state.js as the\n\t// parser instead of the one built around eval found in JSON-js/json2.js\n\t\n\t// The optional reviver parameter is a function that can filter and\n\t// transform the results. It receives each of the keys and values,\n\t// and its return value is used instead of the original value.\n\t// If it returns what it received, then the structure is not modified.\n\t// If it returns undefined then the member is deleted.\n\t\n\t// Example:\n\t\n\t// // Parse the text. Values that look like ISO date strings will\n\t// // be converted to Date objects.\n\t\n\t// myData = JSON.parse(text, function (key, value) {\n\t// var a;\n\t// if (typeof value === \"string\") {\n\t// a =\n\t// /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n\t// if (a) {\n\t// return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n\t// +a[5], +a[6]));\n\t// }\n\t// }\n\t// return value;\n\t// });\n\t\n\t// myData = JSON.parse('[\"Date(09/09/2001)\"]', function (key, value) {\n\t// var d;\n\t// if (typeof value === \"string\" &&\n\t// value.slice(0, 5) === \"Date(\" &&\n\t// value.slice(-1) === \")\") {\n\t// d = new Date(value.slice(5, -1));\n\t// if (d) {\n\t// return d;\n\t// }\n\t// }\n\t// return value;\n\t// });\n\t\n\t// This is a reference implementation. You are free to copy, modify, or\n\t// redistribute.\n\t\n\t/*jslint\n\t for, this\n\t */\n\t\n\t/*property\n\t JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\n\t getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\n\t lastIndex, length, parse, prototype, push, replace, slice, stringify,\n\t test, toJSON, toString, valueOf\n\t */\n\t\n\tvar setupCustomJSON = function(JSON) {\n\t\n\t var rx_one = /^[\\],:{}\\s]*$/;\n\t var rx_two = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g;\n\t var rx_three = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\n\t var rx_four = /(?:^|:|,)(?:\\s*\\[)+/g;\n\t var rx_escapable = /[\\\\\"\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\t var rx_dangerous = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\t\n\t function f(n) {\n\t // Format integers to have at least two digits.\n\t return n < 10\n\t ? \"0\" + n\n\t : n;\n\t }\n\t\n\t function this_value() {\n\t return this.valueOf();\n\t }\n\t\n\t if (typeof Date.prototype.toJSON !== \"function\") {\n\t\n\t Date.prototype.toJSON = function () {\n\t\n\t return isFinite(this.valueOf())\n\t ? this.getUTCFullYear() + \"-\" +\n\t f(this.getUTCMonth() + 1) + \"-\" +\n\t f(this.getUTCDate()) + \"T\" +\n\t f(this.getUTCHours()) + \":\" +\n\t f(this.getUTCMinutes()) + \":\" +\n\t f(this.getUTCSeconds()) + \"Z\"\n\t : null;\n\t };\n\t\n\t Boolean.prototype.toJSON = this_value;\n\t Number.prototype.toJSON = this_value;\n\t String.prototype.toJSON = this_value;\n\t }\n\t\n\t var gap;\n\t var indent;\n\t var meta;\n\t var rep;\n\t\n\t\n\t function quote(string) {\n\t\n\t // If the string contains no control characters, no quote characters, and no\n\t // backslash characters, then we can safely slap some quotes around it.\n\t // Otherwise we must also replace the offending characters with safe escape\n\t // sequences.\n\t\n\t rx_escapable.lastIndex = 0;\n\t return rx_escapable.test(string)\n\t ? \"\\\"\" + string.replace(rx_escapable, function (a) {\n\t var c = meta[a];\n\t return typeof c === \"string\"\n\t ? c\n\t : \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n\t }) + \"\\\"\"\n\t : \"\\\"\" + string + \"\\\"\";\n\t }\n\t\n\t\n\t function str(key, holder) {\n\t\n\t // Produce a string from holder[key].\n\t\n\t var i; // The loop counter.\n\t var k; // The member key.\n\t var v; // The member value.\n\t var length;\n\t var mind = gap;\n\t var partial;\n\t var value = holder[key];\n\t\n\t // If the value has a toJSON method, call it to obtain a replacement value.\n\t\n\t if (value && typeof value === \"object\" &&\n\t typeof value.toJSON === \"function\") {\n\t value = value.toJSON(key);\n\t }\n\t\n\t // If we were called with a replacer function, then call the replacer to\n\t // obtain a replacement value.\n\t\n\t if (typeof rep === \"function\") {\n\t value = rep.call(holder, key, value);\n\t }\n\t\n\t // What happens next depends on the value's type.\n\t\n\t switch (typeof value) {\n\t case \"string\":\n\t return quote(value);\n\t\n\t case \"number\":\n\t\n\t // JSON numbers must be finite. Encode non-finite numbers as null.\n\t\n\t return isFinite(value)\n\t ? String(value)\n\t : \"null\";\n\t\n\t case \"boolean\":\n\t case \"null\":\n\t\n\t // If the value is a boolean or null, convert it to a string. Note:\n\t // typeof null does not produce \"null\". The case is included here in\n\t // the remote chance that this gets fixed someday.\n\t\n\t return String(value);\n\t\n\t // If the type is \"object\", we might be dealing with an object or an array or\n\t // null.\n\t\n\t case \"object\":\n\t\n\t // Due to a specification blunder in ECMAScript, typeof null is \"object\",\n\t // so watch out for that case.\n\t\n\t if (!value) {\n\t return \"null\";\n\t }\n\t\n\t // Make an array to hold the partial results of stringifying this object value.\n\t\n\t gap += indent;\n\t partial = [];\n\t\n\t // Is the value an array?\n\t\n\t if (Object.prototype.toString.apply(value) === \"[object Array]\") {\n\t\n\t // The value is an array. Stringify every element. Use null as a placeholder\n\t // for non-JSON values.\n\t\n\t length = value.length;\n\t for (i = 0; i < length; i += 1) {\n\t partial[i] = str(i, value) || \"null\";\n\t }\n\t\n\t // Join all of the elements together, separated with commas, and wrap them in\n\t // brackets.\n\t\n\t v = partial.length === 0\n\t ? \"[]\"\n\t : gap\n\t ? \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\"\n\t : \"[\" + partial.join(\",\") + \"]\";\n\t gap = mind;\n\t return v;\n\t }\n\t\n\t // If the replacer is an array, use it to select the members to be stringified.\n\t\n\t if (rep && typeof rep === \"object\") {\n\t length = rep.length;\n\t for (i = 0; i < length; i += 1) {\n\t if (typeof rep[i] === \"string\") {\n\t k = rep[i];\n\t v = str(k, value);\n\t if (v) {\n\t partial.push(quote(k) + (\n\t gap\n\t ? \": \"\n\t : \":\"\n\t ) + v);\n\t }\n\t }\n\t }\n\t } else {\n\t\n\t // Otherwise, iterate through all of the keys in the object.\n\t\n\t for (k in value) {\n\t if (Object.prototype.hasOwnProperty.call(value, k)) {\n\t v = str(k, value);\n\t if (v) {\n\t partial.push(quote(k) + (\n\t gap\n\t ? \": \"\n\t : \":\"\n\t ) + v);\n\t }\n\t }\n\t }\n\t }\n\t\n\t // Join all of the member texts together, separated with commas,\n\t // and wrap them in braces.\n\t\n\t v = partial.length === 0\n\t ? \"{}\"\n\t : gap\n\t ? \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\"\n\t : \"{\" + partial.join(\",\") + \"}\";\n\t gap = mind;\n\t return v;\n\t }\n\t }\n\t\n\t // If the JSON object does not yet have a stringify method, give it one.\n\t\n\t if (typeof JSON.stringify !== \"function\") {\n\t meta = { // table of character substitutions\n\t \"\\b\": \"\\\\b\",\n\t \"\\t\": \"\\\\t\",\n\t \"\\n\": \"\\\\n\",\n\t \"\\f\": \"\\\\f\",\n\t \"\\r\": \"\\\\r\",\n\t \"\\\"\": \"\\\\\\\"\",\n\t \"\\\\\": \"\\\\\\\\\"\n\t };\n\t JSON.stringify = function (value, replacer, space) {\n\t\n\t // The stringify method takes a value and an optional replacer, and an optional\n\t // space parameter, and returns a JSON text. The replacer can be a function\n\t // that can replace values, or an array of strings that will select the keys.\n\t // A default replacer method can be provided. Use of the space parameter can\n\t // produce text that is more easily readable.\n\t\n\t var i;\n\t gap = \"\";\n\t indent = \"\";\n\t\n\t // If the space parameter is a number, make an indent string containing that\n\t // many spaces.\n\t\n\t if (typeof space === \"number\") {\n\t for (i = 0; i < space; i += 1) {\n\t indent += \" \";\n\t }\n\t\n\t // If the space parameter is a string, it will be used as the indent string.\n\t\n\t } else if (typeof space === \"string\") {\n\t indent = space;\n\t }\n\t\n\t // If there is a replacer, it must be a function or an array.\n\t // Otherwise, throw an error.\n\t\n\t rep = replacer;\n\t if (replacer && typeof replacer !== \"function\" &&\n\t (typeof replacer !== \"object\" ||\n\t typeof replacer.length !== \"number\")) {\n\t throw new Error(\"JSON.stringify\");\n\t }\n\t\n\t // Make a fake root object containing our value under the key of \"\".\n\t // Return the result of stringifying the value.\n\t\n\t return str(\"\", {\"\": value});\n\t };\n\t }\n\t\n\t\n\t // If the JSON object does not yet have a parse method, give it one.\n\t\n\t if (typeof JSON.parse !== \"function\") {\n\t JSON.parse = (function () {\n\t\n\t // This function creates a JSON parse function that uses a state machine rather\n\t // than the dangerous eval function to parse a JSON text.\n\t\n\t var state; // The state of the parser, one of\n\t // 'go' The starting state\n\t // 'ok' The final, accepting state\n\t // 'firstokey' Ready for the first key of the object or\n\t // the closing of an empty object\n\t // 'okey' Ready for the next key of the object\n\t // 'colon' Ready for the colon\n\t // 'ovalue' Ready for the value half of a key/value pair\n\t // 'ocomma' Ready for a comma or closing }\n\t // 'firstavalue' Ready for the first value of an array or\n\t // an empty array\n\t // 'avalue' Ready for the next value of an array\n\t // 'acomma' Ready for a comma or closing ]\n\t var stack; // The stack, for controlling nesting.\n\t var container; // The current container object or array\n\t var key; // The current key\n\t var value; // The current value\n\t var escapes = { // Escapement translation table\n\t \"\\\\\": \"\\\\\",\n\t \"\\\"\": \"\\\"\",\n\t \"/\": \"/\",\n\t \"t\": \"\\t\",\n\t \"n\": \"\\n\",\n\t \"r\": \"\\r\",\n\t \"f\": \"\\f\",\n\t \"b\": \"\\b\"\n\t };\n\t var string = { // The actions for string tokens\n\t go: function () {\n\t state = \"ok\";\n\t },\n\t firstokey: function () {\n\t key = value;\n\t state = \"colon\";\n\t },\n\t okey: function () {\n\t key = value;\n\t state = \"colon\";\n\t },\n\t ovalue: function () {\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t state = \"acomma\";\n\t }\n\t };\n\t var number = { // The actions for number tokens\n\t go: function () {\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t state = \"acomma\";\n\t }\n\t };\n\t var action = {\n\t\n\t // The action table describes the behavior of the machine. It contains an\n\t // object for each token. Each object contains a method that is called when\n\t // a token is matched in a state. An object will lack a method for illegal\n\t // states.\n\t\n\t \"{\": {\n\t go: function () {\n\t stack.push({state: \"ok\"});\n\t container = {};\n\t state = \"firstokey\";\n\t },\n\t ovalue: function () {\n\t stack.push({container: container, state: \"ocomma\", key: key});\n\t container = {};\n\t state = \"firstokey\";\n\t },\n\t firstavalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = {};\n\t state = \"firstokey\";\n\t },\n\t avalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = {};\n\t state = \"firstokey\";\n\t }\n\t },\n\t \"}\": {\n\t firstokey: function () {\n\t var pop = stack.pop();\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t },\n\t ocomma: function () {\n\t var pop = stack.pop();\n\t container[key] = value;\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t }\n\t },\n\t \"[\": {\n\t go: function () {\n\t stack.push({state: \"ok\"});\n\t container = [];\n\t state = \"firstavalue\";\n\t },\n\t ovalue: function () {\n\t stack.push({container: container, state: \"ocomma\", key: key});\n\t container = [];\n\t state = \"firstavalue\";\n\t },\n\t firstavalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = [];\n\t state = \"firstavalue\";\n\t },\n\t avalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = [];\n\t state = \"firstavalue\";\n\t }\n\t },\n\t \"]\": {\n\t firstavalue: function () {\n\t var pop = stack.pop();\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t },\n\t acomma: function () {\n\t var pop = stack.pop();\n\t container.push(value);\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t }\n\t },\n\t \":\": {\n\t colon: function () {\n\t if (Object.hasOwnProperty.call(container, key)) {\n\t throw new SyntaxError(\"Duplicate key '\" + key + \"\\\"\");\n\t }\n\t state = \"ovalue\";\n\t }\n\t },\n\t \",\": {\n\t ocomma: function () {\n\t container[key] = value;\n\t state = \"okey\";\n\t },\n\t acomma: function () {\n\t container.push(value);\n\t state = \"avalue\";\n\t }\n\t },\n\t \"true\": {\n\t go: function () {\n\t value = true;\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t value = true;\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t value = true;\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t value = true;\n\t state = \"acomma\";\n\t }\n\t },\n\t \"false\": {\n\t go: function () {\n\t value = false;\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t value = false;\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t value = false;\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t value = false;\n\t state = \"acomma\";\n\t }\n\t },\n\t \"null\": {\n\t go: function () {\n\t value = null;\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t value = null;\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t value = null;\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t value = null;\n\t state = \"acomma\";\n\t }\n\t }\n\t };\n\t\n\t function debackslashify(text) {\n\t\n\t // Remove and replace any backslash escapement.\n\t\n\t return text.replace(/\\\\(?:u(.{4})|([^u]))/g, function (ignore, b, c) {\n\t return b\n\t ? String.fromCharCode(parseInt(b, 16))\n\t : escapes[c];\n\t });\n\t }\n\t\n\t return function (source, reviver) {\n\t\n\t // A regular expression is used to extract tokens from the JSON text.\n\t // The extraction process is cautious.\n\t\n\t var result;\n\t var tx = /^[\\u0020\\t\\n\\r]*(?:([,:\\[\\]{}]|true|false|null)|(-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)|\"((?:[^\\r\\n\\t\\\\\\\"]|\\\\(?:[\"\\\\\\/trnfb]|u[0-9a-fA-F]{4}))*)\")/;\n\t\n\t // Set the starting state.\n\t\n\t state = \"go\";\n\t\n\t // The stack records the container, key, and state for each object or array\n\t // that contains another object or array while processing nested structures.\n\t\n\t stack = [];\n\t\n\t // If any error occurs, we will catch it and ultimately throw a syntax error.\n\t\n\t try {\n\t\n\t // For each token...\n\t\n\t while (true) {\n\t result = tx.exec(source);\n\t if (!result) {\n\t break;\n\t }\n\t\n\t // result is the result array from matching the tokenizing regular expression.\n\t // result[0] contains everything that matched, including any initial whitespace.\n\t // result[1] contains any punctuation that was matched, or true, false, or null.\n\t // result[2] contains a matched number, still in string form.\n\t // result[3] contains a matched string, without quotes but with escapement.\n\t\n\t if (result[1]) {\n\t\n\t // Token: Execute the action for this state and token.\n\t\n\t action[result[1]][state]();\n\t\n\t } else if (result[2]) {\n\t\n\t // Number token: Convert the number string into a number value and execute\n\t // the action for this state and number.\n\t\n\t value = +result[2];\n\t number[state]();\n\t } else {\n\t\n\t // String token: Replace the escapement sequences and execute the action for\n\t // this state and string.\n\t\n\t value = debackslashify(result[3]);\n\t string[state]();\n\t }\n\t\n\t // Remove the token from the string. The loop will continue as long as there\n\t // are tokens. This is a slow process, but it allows the use of ^ matching,\n\t // which assures that no illegal tokens slip through.\n\t\n\t source = source.slice(result[0].length);\n\t }\n\t\n\t // If we find a state/token combination that is illegal, then the action will\n\t // cause an error. We handle the error by simply changing the state.\n\t\n\t } catch (e) {\n\t state = e;\n\t }\n\t\n\t // The parsing is finished. If we are not in the final \"ok\" state, or if the\n\t // remaining source contains anything except whitespace, then we did not have\n\t //a well-formed JSON text.\n\t\n\t if (state !== \"ok\" || (/[^\\u0020\\t\\n\\r]/.test(source))) {\n\t throw (state instanceof SyntaxError)\n\t ? state\n\t : new SyntaxError(\"JSON\");\n\t }\n\t\n\t // If there is a reviver function, we recursively walk the new structure,\n\t // passing each name/value pair to the reviver function for possible\n\t // transformation, starting with a temporary root object that holds the current\n\t // value in an empty key. If there is not a reviver function, we simply return\n\t // that value.\n\t\n\t return (typeof reviver === \"function\")\n\t ? (function walk(holder, key) {\n\t var k;\n\t var v;\n\t var val = holder[key];\n\t if (val && typeof val === \"object\") {\n\t for (k in value) {\n\t if (Object.prototype.hasOwnProperty.call(val, k)) {\n\t v = walk(val, k);\n\t if (v !== undefined) {\n\t val[k] = v;\n\t } else {\n\t delete val[k];\n\t }\n\t }\n\t }\n\t }\n\t return reviver.call(holder, key, val);\n\t }({\"\": value}, \"\"))\n\t : value;\n\t };\n\t }());\n\t }\n\t}\n\t\n\tmodule.exports = setupCustomJSON;\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\t\n\t/*\n\t * Notifier - the internal object responsible for delegating between the client exposed API, the\n\t * chain of transforms necessary to turn an item into something that can be sent to Rollbar, and the\n\t * queue which handles the communcation with the Rollbar API servers.\n\t *\n\t * @param queue - an object that conforms to the interface: addItem(item, callback)\n\t * @param options - an object representing the options to be set for this notifier, this should have\n\t * any defaults already set by the caller\n\t */\n\tfunction Notifier(queue, options) {\n\t this.queue = queue;\n\t this.options = options;\n\t this.transforms = [];\n\t}\n\t\n\t/*\n\t * configure - updates the options for this notifier with the passed in object\n\t *\n\t * @param options - an object which gets merged with the current options set on this notifier\n\t * @returns this\n\t */\n\tNotifier.prototype.configure = function(options) {\n\t this.queue && this.queue.configure(options);\n\t var oldOptions = this.options;\n\t this.options = _.extend({}, oldOptions, options);\n\t return this;\n\t};\n\t\n\t/*\n\t * addTransform - adds a transform onto the end of the queue of transforms for this notifier\n\t *\n\t * @param transform - a function which takes three arguments:\n\t * * item: An Object representing the data to eventually be sent to Rollbar\n\t * * options: The current value of the options for this notifier\n\t * * callback: function(err: (Null|Error), item: (Null|Object)) the transform must call this\n\t * callback with a null value for error if it wants the processing chain to continue, otherwise\n\t * with an error to terminate the processing. The item should be the updated item after this\n\t * transform is finished modifying it.\n\t */\n\tNotifier.prototype.addTransform = function(transform) {\n\t if (_.isFunction(transform)) {\n\t this.transforms.push(transform);\n\t }\n\t return this;\n\t};\n\t\n\t/*\n\t * log - the internal log function which applies the configured transforms and then pushes onto the\n\t * queue to be sent to the backend.\n\t *\n\t * @param item - An object with the following structure:\n\t * message [String] - An optional string to be sent to rollbar\n\t * error [Error] - An optional error\n\t *\n\t * @param callback - A function of type function(err, resp) which will be called with exactly one\n\t * null argument and one non-null argument. The callback will be called once, either during the\n\t * transform stage if an error occurs inside a transform, or in response to the communication with\n\t * the backend. The second argument will be the response from the backend in case of success.\n\t */\n\tNotifier.prototype.log = function(item, callback) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t\n\t if (!this.options.enabled) {\n\t return callback(new Error('Rollbar is not enabled'));\n\t }\n\t\n\t this.queue.addPendingItem(item);\n\t var originalError = item.err;\n\t this._applyTransforms(item, function(err, i) {\n\t if (err) {\n\t this.queue.removePendingItem(item);\n\t return callback(err, null);\n\t }\n\t this.queue.addItem(i, callback, originalError, item);\n\t }.bind(this));\n\t};\n\t\n\t/* Internal */\n\t\n\t/*\n\t * _applyTransforms - Applies the transforms that have been added to this notifier sequentially. See\n\t * `addTransform` for more information.\n\t *\n\t * @param item - An item to be transformed\n\t * @param callback - A function of type function(err, item) which will be called with a non-null\n\t * error and a null item in the case of a transform failure, or a null error and non-null item after\n\t * all transforms have been applied.\n\t */\n\tNotifier.prototype._applyTransforms = function(item, callback) {\n\t var transformIndex = -1;\n\t var transformsLength = this.transforms.length;\n\t var transforms = this.transforms;\n\t var options = this.options;\n\t\n\t var cb = function(err, i) {\n\t if (err) {\n\t callback(err, null);\n\t return;\n\t }\n\t\n\t transformIndex++;\n\t\n\t if (transformIndex === transformsLength) {\n\t callback(null, i);\n\t return;\n\t }\n\t\n\t transforms[transformIndex](i, options, cb);\n\t };\n\t\n\t cb(null, item);\n\t};\n\t\n\tmodule.exports = Notifier;\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\t\n\tvar MAX_EVENTS = 100;\n\t\n\tfunction Telemeter(options) {\n\t this.queue = [];\n\t this.options = _.extend(true, {}, options);\n\t var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n\t this.maxQueueSize = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n\t}\n\t\n\tTelemeter.prototype.configure = function(options) {\n\t var oldOptions = this.options;\n\t this.options = _.extend(true, {}, oldOptions, options);\n\t var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n\t var newMaxEvents = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n\t var deleteCount = 0;\n\t if (this.maxQueueSize > newMaxEvents) {\n\t deleteCount = this.maxQueueSize - newMaxEvents;\n\t }\n\t this.maxQueueSize = newMaxEvents;\n\t this.queue.splice(0, deleteCount);\n\t};\n\t\n\tTelemeter.prototype.copyEvents = function() {\n\t return Array.prototype.slice.call(this.queue, 0);\n\t};\n\t\n\tTelemeter.prototype.capture = function(type, metadata, level, rollbarUUID, timestamp) {\n\t var e = {\n\t level: getLevel(type, level),\n\t type: type,\n\t timestamp_ms: timestamp || _.now(),\n\t body: metadata,\n\t source: 'client'\n\t };\n\t if (rollbarUUID) {\n\t e.uuid = rollbarUUID;\n\t }\n\t\n\t try {\n\t if (_.isFunction(this.options.filterTelemetry) && this.options.filterTelemetry(e)) {\n\t return false;\n\t }\n\t } catch (e) {\n\t this.options.filterTelemetry = null;\n\t }\n\t\n\t this.push(e);\n\t return e;\n\t};\n\t\n\tTelemeter.prototype.captureEvent = function(metadata, level, rollbarUUID) {\n\t return this.capture('manual', metadata, level, rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.captureError = function(err, level, rollbarUUID, timestamp) {\n\t var metadata = {\n\t message: err.message || String(err)\n\t };\n\t if (err.stack) {\n\t metadata.stack = err.stack;\n\t }\n\t return this.capture('error', metadata, level, rollbarUUID, timestamp);\n\t};\n\t\n\tTelemeter.prototype.captureLog = function(message, level, rollbarUUID, timestamp) {\n\t return this.capture('log', {\n\t message: message\n\t }, level, rollbarUUID, timestamp);\n\t};\n\t\n\tTelemeter.prototype.captureNetwork = function(metadata, subtype, rollbarUUID, requestData) {\n\t subtype = subtype || 'xhr';\n\t metadata.subtype = metadata.subtype || subtype;\n\t if (requestData) {\n\t metadata.request = requestData;\n\t }\n\t var level = this.levelFromStatus(metadata.status_code);\n\t return this.capture('network', metadata, level, rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.levelFromStatus = function(statusCode) {\n\t if (statusCode >= 200 && statusCode < 400) {\n\t return 'info';\n\t }\n\t if (statusCode === 0 || statusCode >= 400) {\n\t return 'error';\n\t }\n\t return 'info';\n\t};\n\t\n\tTelemeter.prototype.captureDom = function(subtype, element, value, checked, rollbarUUID) {\n\t var metadata = {\n\t subtype: subtype,\n\t element: element\n\t };\n\t if (value !== undefined) {\n\t metadata.value = value;\n\t }\n\t if (checked !== undefined) {\n\t metadata.checked = checked;\n\t }\n\t return this.capture('dom', metadata, 'info', rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.captureNavigation = function(from, to, rollbarUUID) {\n\t return this.capture('navigation', {from: from, to: to}, 'info', rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.captureDomContentLoaded = function(ts) {\n\t return this.capture('navigation', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n\t /**\n\t * If we decide to make this a dom event instead, then use the line below:\n\t return this.capture('dom', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n\t */\n\t};\n\tTelemeter.prototype.captureLoad = function(ts) {\n\t return this.capture('navigation', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n\t /**\n\t * If we decide to make this a dom event instead, then use the line below:\n\t return this.capture('dom', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n\t */\n\t};\n\t\n\tTelemeter.prototype.captureConnectivityChange = function(type, rollbarUUID) {\n\t return this.captureNetwork({change: type}, 'connectivity', rollbarUUID);\n\t};\n\t\n\t// Only intended to be used internally by the notifier\n\tTelemeter.prototype._captureRollbarItem = function(item) {\n\t if (!this.options.includeItemsInTelemetry) {\n\t return;\n\t }\n\t if (item.err) {\n\t return this.captureError(item.err, item.level, item.uuid, item.timestamp);\n\t }\n\t if (item.message) {\n\t return this.captureLog(item.message, item.level, item.uuid, item.timestamp);\n\t }\n\t if (item.custom) {\n\t return this.capture('log', item.custom, item.level, item.uuid, item.timestamp);\n\t }\n\t};\n\t\n\tTelemeter.prototype.push = function(e) {\n\t this.queue.push(e);\n\t if (this.queue.length > this.maxQueueSize) {\n\t this.queue.shift();\n\t }\n\t};\n\t\n\tfunction getLevel(type, level) {\n\t if (level) {\n\t return level;\n\t }\n\t var defaultLevel = {\n\t error: 'error',\n\t manual: 'info'\n\t };\n\t return defaultLevel[type] || 'info';\n\t}\n\t\n\tmodule.exports = Telemeter;\n\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\tvar helpers = __webpack_require__(12);\n\t\n\tvar defaultOptions = {\n\t hostname: 'api.rollbar.com',\n\t path: '/api/1/item/',\n\t search: null,\n\t version: '1',\n\t protocol: 'https:',\n\t port: 443\n\t};\n\t\n\t/**\n\t * Api is an object that encapsulates methods of communicating with\n\t * the Rollbar API. It is a standard interface with some parts implemented\n\t * differently for server or browser contexts. It is an object that should\n\t * be instantiated when used so it can contain non-global options that may\n\t * be different for another instance of RollbarApi.\n\t *\n\t * @param options {\n\t * accessToken: the accessToken to use for posting items to rollbar\n\t * endpoint: an alternative endpoint to send errors to\n\t * must be a valid, fully qualified URL.\n\t * The default is: https://api.rollbar.com/api/1/item\n\t * proxy: if you wish to proxy requests provide an object\n\t * with the following keys:\n\t * host or hostname (required): foo.example.com\n\t * port (optional): 123\n\t * protocol (optional): https\n\t * }\n\t */\n\tfunction Api(options, t, u, j) {\n\t this.options = options;\n\t this.transport = t;\n\t this.url = u;\n\t this.jsonBackup = j;\n\t this.accessToken = options.accessToken;\n\t this.transportOptions = _getTransport(options, u);\n\t}\n\t\n\t/**\n\t *\n\t * @param data\n\t * @param callback\n\t */\n\tApi.prototype.postItem = function(data, callback) {\n\t var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n\t var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n\t this.transport.post(this.accessToken, transportOptions, payload, callback);\n\t};\n\t\n\tApi.prototype.configure = function(options) {\n\t var oldOptions = this.oldOptions;\n\t this.options = _.extend(true, {}, oldOptions, options);\n\t this.transportOptions = _getTransport(this.options, this.url);\n\t if (this.options.accessToken !== undefined) {\n\t this.accessToken = this.options.accessToken;\n\t }\n\t return this;\n\t};\n\t\n\tfunction _getTransport(options, url) {\n\t return helpers.getTransportFromOptions(options, defaultOptions, url);\n\t}\n\t\n\tmodule.exports = Api;\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\t\n\tfunction buildPayload(accessToken, data, jsonBackup) {\n\t if (!_.isType(data.context, 'string')) {\n\t var contextResult = _.stringify(data.context, jsonBackup);\n\t if (contextResult.error) {\n\t data.context = 'Error: could not serialize \\'context\\'';\n\t } else {\n\t data.context = contextResult.value || '';\n\t }\n\t if (data.context.length > 255) {\n\t data.context = data.context.substr(0, 255);\n\t }\n\t }\n\t return {\n\t access_token: accessToken,\n\t data: data\n\t };\n\t}\n\t\n\tfunction getTransportFromOptions(options, defaults, url) {\n\t var hostname = defaults.hostname;\n\t var protocol = defaults.protocol;\n\t var port = defaults.port;\n\t var path = defaults.path;\n\t var search = defaults.search;\n\t\n\t var proxy = options.proxy;\n\t if (options.endpoint) {\n\t var opts = url.parse(options.endpoint);\n\t hostname = opts.hostname;\n\t protocol = opts.protocol;\n\t port = opts.port;\n\t path = opts.pathname;\n\t search = opts.search;\n\t }\n\t return {\n\t hostname: hostname,\n\t protocol: protocol,\n\t port: port,\n\t path: path,\n\t search: search,\n\t proxy: proxy\n\t };\n\t}\n\t\n\tfunction transportOptions(transport, method) {\n\t var protocol = transport.protocol || 'https:';\n\t var port = transport.port || (protocol === 'http:' ? 80 : protocol === 'https:' ? 443 : undefined);\n\t var hostname = transport.hostname;\n\t var path = transport.path;\n\t if (transport.search) {\n\t path = path + transport.search;\n\t }\n\t if (transport.proxy) {\n\t path = protocol + '//' + hostname + path;\n\t hostname = transport.proxy.host || transport.proxy.hostname;\n\t port = transport.proxy.port;\n\t protocol = transport.proxy.protocol || protocol;\n\t }\n\t return {\n\t protocol: protocol,\n\t hostname: hostname,\n\t path: path,\n\t port: port,\n\t method: method\n\t };\n\t}\n\t\n\tfunction appendPathToPath(base, path) {\n\t var baseTrailingSlash = /\\/$/.test(base);\n\t var pathBeginningSlash = /^\\//.test(path);\n\t\n\t if (baseTrailingSlash && pathBeginningSlash) {\n\t path = path.substring(1);\n\t } else if (!baseTrailingSlash && !pathBeginningSlash) {\n\t path = '/' + path;\n\t }\n\t\n\t return base + path;\n\t}\n\t\n\tmodule.exports = {\n\t buildPayload: buildPayload,\n\t getTransportFromOptions: getTransportFromOptions,\n\t transportOptions: transportOptions,\n\t appendPathToPath: appendPathToPath\n\t};\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t/* eslint-disable no-console */\n\t__webpack_require__(14);\n\tvar detection = __webpack_require__(15);\n\tvar _ = __webpack_require__(6);\n\t\n\tfunction error() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t args.unshift('Rollbar:');\n\t if (detection.ieVersion() <= 8) {\n\t console.error(_.formatArgsAsString(args));\n\t } else {\n\t console.error.apply(console, args);\n\t }\n\t}\n\t\n\tfunction info() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t args.unshift('Rollbar:');\n\t if (detection.ieVersion() <= 8) {\n\t console.info(_.formatArgsAsString(args));\n\t } else {\n\t console.info.apply(console, args);\n\t }\n\t}\n\t\n\tfunction log() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t args.unshift('Rollbar:');\n\t if (detection.ieVersion() <= 8) {\n\t console.log(_.formatArgsAsString(args));\n\t } else {\n\t console.log.apply(console, args);\n\t }\n\t}\n\t\n\t/* eslint-enable no-console */\n\t\n\tmodule.exports = {\n\t error: error,\n\t info: info,\n\t log: log\n\t};\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports) {\n\n\t// Console-polyfill. MIT license.\n\t// https://github.com/paulmillr/console-polyfill\n\t// Make it safe to do console.log() always.\n\t(function(global) {\n\t 'use strict';\n\t if (!global.console) {\n\t global.console = {};\n\t }\n\t var con = global.console;\n\t var prop, method;\n\t var dummy = function() {};\n\t var properties = ['memory'];\n\t var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' +\n\t 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' +\n\t 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',');\n\t while (prop = properties.pop()) if (!con[prop]) con[prop] = {};\n\t while (method = methods.pop()) if (!con[method]) con[method] = dummy;\n\t // Using `this` for web workers & supports Browserify / Webpack.\n\t})(typeof window === 'undefined' ? this : window);\n\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\t// This detection.js module is used to encapsulate any ugly browser/feature\n\t// detection we may need to do.\n\t\n\t// Figure out which version of IE we're using, if any.\n\t// This is gleaned from http://stackoverflow.com/questions/5574842/best-way-to-check-for-ie-less-than-9-in-javascript-without-library\n\t// Will return an integer on IE (i.e. 8)\n\t// Will return undefined otherwise\n\tfunction getIEVersion() {\n\t\tvar undef;\n\t\tif (!document) {\n\t\t\treturn undef;\n\t\t}\n\t\n\t var v = 3,\n\t div = document.createElement('div'),\n\t all = div.getElementsByTagName('i');\n\t\n\t while (\n\t div.innerHTML = '',\n\t all[0]\n\t );\n\t\n\t return v > 4 ? v : undef;\n\t}\n\t\n\tvar Detection = {\n\t ieVersion: getIEVersion\n\t};\n\t\n\tmodule.exports = Detection;\n\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tfunction captureUncaughtExceptions(window, handler, shim) {\n\t if (!window) { return; }\n\t var oldOnError;\n\t\n\t if (typeof handler._rollbarOldOnError === 'function') {\n\t oldOnError = handler._rollbarOldOnError;\n\t } else if (window.onerror && !window.onerror.belongsToShim) {\n\t oldOnError = window.onerror;\n\t handler._rollbarOldOnError = oldOnError;\n\t }\n\t\n\t var fn = function() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t _rollbarWindowOnError(window, handler, oldOnError, args);\n\t };\n\t fn.belongsToShim = shim;\n\t window.onerror = fn;\n\t}\n\t\n\tfunction _rollbarWindowOnError(window, r, old, args) {\n\t if (window._rollbarWrappedError) {\n\t if (!args[4]) {\n\t args[4] = window._rollbarWrappedError;\n\t }\n\t if (!args[5]) {\n\t args[5] = window._rollbarWrappedError._rollbarContext;\n\t }\n\t window._rollbarWrappedError = null;\n\t }\n\t\n\t r.handleUncaughtException.apply(r, args);\n\t if (old) {\n\t old.apply(window, args);\n\t }\n\t}\n\t\n\tfunction captureUnhandledRejections(window, handler, shim) {\n\t if (!window) { return; }\n\t\n\t if (typeof window._rollbarURH === 'function' && window._rollbarURH.belongsToShim) {\n\t window.removeEventListener('unhandledrejection', window._rollbarURH);\n\t }\n\t\n\t var rejectionHandler = function (evt) {\n\t var reason, promise, detail;\n\t try {\n\t reason = evt.reason;\n\t } catch (e) {\n\t reason = undefined;\n\t }\n\t try {\n\t promise = evt.promise;\n\t } catch (e) {\n\t promise = '[unhandledrejection] error getting `promise` from event';\n\t }\n\t try {\n\t detail = evt.detail;\n\t if (!reason && detail) {\n\t reason = detail.reason;\n\t promise = detail.promise;\n\t }\n\t } catch (e) {\n\t detail = '[unhandledrejection] error getting `detail` from event';\n\t }\n\t if (!reason) {\n\t reason = '[unhandledrejection] error getting `reason` from event';\n\t }\n\t\n\t if (handler && handler.handleUnhandledRejection) {\n\t handler.handleUnhandledRejection(reason, promise);\n\t }\n\t };\n\t rejectionHandler.belongsToShim = shim;\n\t window._rollbarURH = rejectionHandler;\n\t window.addEventListener('unhandledrejection', rejectionHandler);\n\t}\n\t\n\tfunction wrapGlobals(window, handler, shim) {\n\t if (!window) { return; }\n\t // Adapted from https://github.com/bugsnag/bugsnag-js\n\t var globals = 'EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload'.split(',');\n\t var i, global;\n\t for (i = 0; i < globals.length; ++i) {\n\t global = globals[i];\n\t\n\t if (window[global] && window[global].prototype) {\n\t _extendListenerPrototype(handler, window[global].prototype, shim);\n\t }\n\t }\n\t}\n\t\n\tfunction _extendListenerPrototype(handler, prototype, shim) {\n\t if (prototype.hasOwnProperty && prototype.hasOwnProperty('addEventListener')) {\n\t var oldAddEventListener = prototype.addEventListener;\n\t while (oldAddEventListener._rollbarOldAdd && oldAddEventListener.belongsToShim) {\n\t oldAddEventListener = oldAddEventListener._rollbarOldAdd;\n\t }\n\t var addFn = function(event, callback, bubble) {\n\t oldAddEventListener.call(this, event, handler.wrap(callback), bubble);\n\t };\n\t addFn._rollbarOldAdd = oldAddEventListener;\n\t addFn.belongsToShim = shim;\n\t prototype.addEventListener = addFn;\n\t\n\t var oldRemoveEventListener = prototype.removeEventListener;\n\t while (oldRemoveEventListener._rollbarOldRemove && oldRemoveEventListener.belongsToShim) {\n\t oldRemoveEventListener = oldRemoveEventListener._rollbarOldRemove;\n\t }\n\t var removeFn = function(event, callback, bubble) {\n\t oldRemoveEventListener.call(this, event, callback && callback._rollbar_wrapped || callback, bubble);\n\t };\n\t removeFn._rollbarOldRemove = oldRemoveEventListener;\n\t removeFn.belongsToShim = shim;\n\t prototype.removeEventListener = removeFn;\n\t }\n\t}\n\t\n\tmodule.exports = {\n\t captureUncaughtExceptions: captureUncaughtExceptions,\n\t captureUnhandledRejections: captureUnhandledRejections,\n\t wrapGlobals: wrapGlobals\n\t};\n\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\tvar logger = __webpack_require__(13);\n\t\n\t/*\n\t * accessToken may be embedded in payload but that should not\n\t * be assumed\n\t *\n\t * options: {\n\t * hostname\n\t * protocol\n\t * path\n\t * port\n\t * method\n\t * }\n\t *\n\t * params is an object containing key/value pairs. These\n\t * will be appended to the path as 'key=value&key=value'\n\t *\n\t * payload is an unserialized object\n\t */\n\t\n\tfunction get(accessToken, options, params, callback, requestFactory) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t _.addParamsAndAccessTokenToPath(accessToken, options, params);\n\t\n\t var method = 'GET';\n\t var url = _.formatUrl(options);\n\t _makeRequest(accessToken, url, method, null, callback, requestFactory);\n\t}\n\t\n\tfunction post(accessToken, options, payload, callback, requestFactory) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t\n\t if (!payload) {\n\t return callback(new Error('Cannot send empty request'));\n\t }\n\t\n\t var stringifyResult = _.stringify(payload);\n\t if (stringifyResult.error) {\n\t return callback(stringifyResult.error);\n\t }\n\t\n\t var writeData = stringifyResult.value;\n\t var method = 'POST';\n\t var url = _.formatUrl(options);\n\t _makeRequest(accessToken, url, method, writeData, callback, requestFactory);\n\t}\n\t\n\tfunction _makeRequest(accessToken, url, method, data, callback, requestFactory) {\n\t var request;\n\t if (requestFactory) {\n\t request = requestFactory();\n\t } else {\n\t request = _createXMLHTTPObject();\n\t }\n\t if (!request) {\n\t // Give up, no way to send requests\n\t return callback(new Error('No way to send a request'));\n\t }\n\t try {\n\t try {\n\t var onreadystatechange = function() {\n\t try {\n\t if (onreadystatechange && request.readyState === 4) {\n\t onreadystatechange = undefined;\n\t\n\t var parseResponse = _.jsonParse(request.responseText);\n\t if (_isSuccess(request)) {\n\t callback(parseResponse.error, parseResponse.value);\n\t return;\n\t } else if (_isNormalFailure(request)) {\n\t if (request.status === 403) {\n\t // likely caused by using a server access token\n\t var message = parseResponse.value && parseResponse.value.message;\n\t logger.error(message);\n\t }\n\t // return valid http status codes\n\t callback(new Error(String(request.status)));\n\t } else {\n\t // IE will return a status 12000+ on some sort of connection failure,\n\t // so we return a blank error\n\t // http://msdn.microsoft.com/en-us/library/aa383770%28VS.85%29.aspx\n\t var msg = 'XHR response had no status code (likely connection failure)';\n\t callback(_newRetriableError(msg));\n\t }\n\t }\n\t } catch (ex) {\n\t //jquery source mentions firefox may error out while accessing the\n\t //request members if there is a network error\n\t //https://github.com/jquery/jquery/blob/a938d7b1282fc0e5c52502c225ae8f0cef219f0a/src/ajax/xhr.js#L111\n\t var exc;\n\t if (ex && ex.stack) {\n\t exc = ex;\n\t } else {\n\t exc = new Error(ex);\n\t }\n\t callback(exc);\n\t }\n\t };\n\t\n\t request.open(method, url, true);\n\t if (request.setRequestHeader) {\n\t request.setRequestHeader('Content-Type', 'application/json');\n\t request.setRequestHeader('X-Rollbar-Access-Token', accessToken);\n\t }\n\t request.onreadystatechange = onreadystatechange;\n\t request.send(data);\n\t } catch (e1) {\n\t // Sending using the normal xmlhttprequest object didn't work, try XDomainRequest\n\t if (typeof XDomainRequest !== 'undefined') {\n\t\n\t // Assume we are in a really old browser which has a bunch of limitations:\n\t // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\t\n\t // Extreme paranoia: if we have XDomainRequest then we have a window, but just in case\n\t if (!window || !window.location) {\n\t return callback(new Error('No window available during request, unknown environment'));\n\t }\n\t\n\t // If the current page is http, try and send over http\n\t if (window.location.href.substring(0, 5) === 'http:' && url.substring(0, 5) === 'https') {\n\t url = 'http' + url.substring(5);\n\t }\n\t\n\t var xdomainrequest = new XDomainRequest();\n\t xdomainrequest.onprogress = function() {};\n\t xdomainrequest.ontimeout = function() {\n\t var msg = 'Request timed out';\n\t var code = 'ETIMEDOUT';\n\t callback(_newRetriableError(msg, code));\n\t };\n\t xdomainrequest.onerror = function() {\n\t callback(new Error('Error during request'));\n\t };\n\t xdomainrequest.onload = function() {\n\t var parseResponse = _.jsonParse(xdomainrequest.responseText);\n\t callback(parseResponse.error, parseResponse.value);\n\t };\n\t xdomainrequest.open(method, url, true);\n\t xdomainrequest.send(data);\n\t } else {\n\t callback(new Error('Cannot find a method to transport a request'));\n\t }\n\t }\n\t } catch (e2) {\n\t callback(e2);\n\t }\n\t}\n\t\n\tfunction _createXMLHTTPObject() {\n\t /* global ActiveXObject:false */\n\t\n\t var factories = [\n\t function () {\n\t return new XMLHttpRequest();\n\t },\n\t function () {\n\t return new ActiveXObject('Msxml2.XMLHTTP');\n\t },\n\t function () {\n\t return new ActiveXObject('Msxml3.XMLHTTP');\n\t },\n\t function () {\n\t return new ActiveXObject('Microsoft.XMLHTTP');\n\t }\n\t ];\n\t var xmlhttp;\n\t var i;\n\t var numFactories = factories.length;\n\t for (i = 0; i < numFactories; i++) {\n\t /* eslint-disable no-empty */\n\t try {\n\t xmlhttp = factories[i]();\n\t break;\n\t } catch (e) {\n\t // pass\n\t }\n\t /* eslint-enable no-empty */\n\t }\n\t return xmlhttp;\n\t}\n\t\n\tfunction _isSuccess(r) {\n\t return r && r.status && r.status === 200;\n\t}\n\t\n\tfunction _isNormalFailure(r) {\n\t return r && _.isType(r.status, 'number') && r.status >= 400 && r.status < 600;\n\t}\n\t\n\tfunction _newRetriableError(message, code) {\n\t var err = new Error(message);\n\t err.code = code || 'ENOTFOUND';\n\t return err;\n\t}\n\t\n\tmodule.exports = {\n\t get: get,\n\t post: post\n\t};\n\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\t// See https://nodejs.org/docs/latest/api/url.html\n\tfunction parse(url) {\n\t var result = {\n\t protocol: null, auth: null, host: null, path: null,\n\t hash: null, href: url, hostname: null, port: null,\n\t pathname: null, search: null, query: null\n\t };\n\t\n\t var i, last;\n\t i = url.indexOf('//');\n\t if (i !== -1) {\n\t result.protocol = url.substring(0,i);\n\t last = i+2;\n\t } else {\n\t last = 0;\n\t }\n\t \n\t i = url.indexOf('@', last);\n\t if (i !== -1) {\n\t result.auth = url.substring(last, i);\n\t last = i+1;\n\t }\n\t\n\t i = url.indexOf('/', last);\n\t if (i === -1) {\n\t i = url.indexOf('?', last);\n\t if (i === -1) {\n\t i = url.indexOf('#', last);\n\t if (i === -1) {\n\t result.host = url.substring(last);\n\t } else {\n\t result.host = url.substring(last, i);\n\t result.hash = url.substring(i);\n\t }\n\t result.hostname = result.host.split(':')[0];\n\t result.port = result.host.split(':')[1];\n\t if (result.port) {\n\t result.port = parseInt(result.port, 10);\n\t }\n\t return result;\n\t } else {\n\t result.host = url.substring(last, i);\n\t result.hostname = result.host.split(':')[0];\n\t result.port = result.host.split(':')[1];\n\t if (result.port) {\n\t result.port = parseInt(result.port, 10);\n\t }\n\t last = i;\n\t }\n\t } else {\n\t result.host = url.substring(last, i);\n\t result.hostname = result.host.split(':')[0];\n\t result.port = result.host.split(':')[1];\n\t if (result.port) {\n\t result.port = parseInt(result.port, 10);\n\t }\n\t last = i;\n\t }\n\t\n\t i = url.indexOf('#', last);\n\t if (i === -1) {\n\t result.path = url.substring(last);\n\t } else {\n\t result.path = url.substring(last, i);\n\t result.hash = url.substring(i);\n\t }\n\t\n\t if (result.path) {\n\t var pathParts = result.path.split('?');\n\t result.pathname = pathParts[0];\n\t result.query = pathParts[1];\n\t result.search = result.query ? '?' + result.query : null;\n\t }\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t parse: parse\n\t};\n\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\tvar errorParser = __webpack_require__(20);\n\tvar logger = __webpack_require__(13);\n\t\n\tfunction handleItemWithError(item, options, callback) {\n\t item.data = item.data || {};\n\t if (item.err) {\n\t try {\n\t item.stackInfo = item.err._savedStackTrace || errorParser.parse(item.err);\n\t } catch (e)\n\t /* istanbul ignore next */\n\t {\n\t logger.error('Error while parsing the error object.', e);\n\t item.message = item.err.message || item.err.description || item.message || String(item.err);\n\t delete item.err;\n\t }\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction ensureItemHasSomethingToSay(item, options, callback) {\n\t if (!item.message && !item.stackInfo && !item.custom) {\n\t callback(new Error('No message, stack info, or custom data'), null);\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction addBaseInfo(item, options, callback) {\n\t var environment = (options.payload && options.payload.environment) || options.environment;\n\t item.data = _.extend(true, {}, item.data, {\n\t environment: environment,\n\t level: item.level,\n\t endpoint: options.endpoint,\n\t platform: 'browser',\n\t framework: 'browser-js',\n\t language: 'javascript',\n\t server: {},\n\t uuid: item.uuid,\n\t notifier: {\n\t name: 'rollbar-browser-js',\n\t version: options.version\n\t }\n\t });\n\t callback(null, item);\n\t}\n\t\n\tfunction addRequestInfo(window) {\n\t return function(item, options, callback) {\n\t if (!window || !window.location) {\n\t return callback(null, item);\n\t }\n\t var remoteString = '$remote_ip';\n\t if (!options.captureIp) {\n\t remoteString = null;\n\t } else if (options.captureIp !== true) {\n\t remoteString += '_anonymize';\n\t }\n\t _.set(item, 'data.request', {\n\t url: window.location.href,\n\t query_string: window.location.search,\n\t user_ip: remoteString\n\t });\n\t callback(null, item);\n\t };\n\t}\n\t\n\tfunction addClientInfo(window) {\n\t return function(item, options, callback) {\n\t if (!window) {\n\t return callback(null, item);\n\t }\n\t var nav = window.navigator || {};\n\t var scr = window.screen || {};\n\t _.set(item, 'data.client', {\n\t runtime_ms: item.timestamp - window._rollbarStartTime,\n\t timestamp: Math.round(item.timestamp / 1000),\n\t javascript: {\n\t browser: nav.userAgent,\n\t language: nav.language,\n\t cookie_enabled: nav.cookieEnabled,\n\t screen: {\n\t width: scr.width,\n\t height: scr.height\n\t }\n\t }\n\t });\n\t callback(null, item);\n\t };\n\t}\n\t\n\tfunction addPluginInfo(window) {\n\t return function(item, options, callback) {\n\t if (!window || !window.navigator) {\n\t return callback(null, item);\n\t }\n\t var plugins = [];\n\t var navPlugins = window.navigator.plugins || [];\n\t var cur;\n\t for (var i=0, l=navPlugins.length; i < l; ++i) {\n\t cur = navPlugins[i];\n\t plugins.push({name: cur.name, description: cur.description});\n\t }\n\t _.set(item, 'data.client.javascript.plugins', plugins);\n\t callback(null, item);\n\t };\n\t}\n\t\n\tfunction addBody(item, options, callback) {\n\t if (item.stackInfo) {\n\t addBodyTrace(item, options, callback);\n\t } else {\n\t addBodyMessage(item, options, callback);\n\t }\n\t}\n\t\n\tfunction addBodyMessage(item, options, callback) {\n\t var message = item.message;\n\t var custom = item.custom;\n\t\n\t if (!message) {\n\t if (custom) {\n\t var scrubFields = options.scrubFields;\n\t var messageResult = _.stringify(_.scrub(custom, scrubFields));\n\t message = messageResult.error || messageResult.value || '';\n\t } else {\n\t message = '';\n\t }\n\t }\n\t var result = {\n\t body: message\n\t };\n\t\n\t if (custom) {\n\t result.extra = _.extend(true, {}, custom);\n\t }\n\t\n\t _.set(item, 'data.body', {message: result});\n\t callback(null, item);\n\t}\n\t\n\t\n\tfunction addBodyTrace(item, options, callback) {\n\t var description = item.data.description;\n\t var stackInfo = item.stackInfo;\n\t var custom = item.custom;\n\t\n\t var guess = errorParser.guessErrorClass(stackInfo.message);\n\t var className = stackInfo.name || guess[0];\n\t var message = guess[1];\n\t var trace = {\n\t exception: {\n\t 'class': className,\n\t message: message\n\t }\n\t };\n\t\n\t if (description) {\n\t trace.exception.description = description;\n\t }\n\t\n\t // Transform a TraceKit stackInfo object into a Rollbar trace\n\t var stack = stackInfo.stack;\n\t if (stack && stack.length === 0 && item._unhandledStackInfo && item._unhandledStackInfo.stack) {\n\t stack = item._unhandledStackInfo.stack;\n\t }\n\t if (stack) {\n\t if (stack.length === 0) {\n\t trace.exception.stack = stackInfo.rawStack;\n\t trace.exception.raw = String(stackInfo.rawException);\n\t }\n\t var stackFrame;\n\t var frame;\n\t var code;\n\t var pre;\n\t var post;\n\t var contextLength;\n\t var i, mid;\n\t\n\t trace.frames = [];\n\t for (i = 0; i < stack.length; ++i) {\n\t stackFrame = stack[i];\n\t frame = {\n\t filename: stackFrame.url ? _.sanitizeUrl(stackFrame.url) : '(unknown)',\n\t lineno: stackFrame.line || null,\n\t method: (!stackFrame.func || stackFrame.func === '?') ? '[anonymous]' : stackFrame.func,\n\t colno: stackFrame.column\n\t };\n\t if (frame.method && frame.method.endsWith && frame.method.endsWith('_rollbar_wrapped')) {\n\t continue;\n\t }\n\t\n\t code = pre = post = null;\n\t contextLength = stackFrame.context ? stackFrame.context.length : 0;\n\t if (contextLength) {\n\t mid = Math.floor(contextLength / 2);\n\t pre = stackFrame.context.slice(0, mid);\n\t code = stackFrame.context[mid];\n\t post = stackFrame.context.slice(mid);\n\t }\n\t\n\t if (code) {\n\t frame.code = code;\n\t }\n\t\n\t if (pre || post) {\n\t frame.context = {};\n\t if (pre && pre.length) {\n\t frame.context.pre = pre;\n\t }\n\t if (post && post.length) {\n\t frame.context.post = post;\n\t }\n\t }\n\t\n\t if (stackFrame.args) {\n\t frame.args = stackFrame.args;\n\t }\n\t\n\t trace.frames.push(frame);\n\t }\n\t\n\t // NOTE(cory): reverse the frames since rollbar.com expects the most recent call last\n\t trace.frames.reverse();\n\t\n\t if (custom) {\n\t trace.extra = _.extend(true, {}, custom);\n\t }\n\t _.set(item, 'data.body', {trace: trace});\n\t callback(null, item);\n\t } else {\n\t item.message = className + ': ' + message;\n\t addBodyMessage(item, options, callback);\n\t }\n\t}\n\t\n\tfunction scrubPayload(item, options, callback) {\n\t var scrubFields = options.scrubFields;\n\t item.data = _.scrub(item.data, scrubFields);\n\t callback(null, item);\n\t}\n\t\n\tmodule.exports = {\n\t handleItemWithError: handleItemWithError,\n\t ensureItemHasSomethingToSay: ensureItemHasSomethingToSay,\n\t addBaseInfo: addBaseInfo,\n\t addRequestInfo: addRequestInfo,\n\t addClientInfo: addClientInfo,\n\t addPluginInfo: addPluginInfo,\n\t addBody: addBody,\n\t scrubPayload: scrubPayload\n\t};\n\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar ErrorStackParser = __webpack_require__(21);\n\t\n\tvar UNKNOWN_FUNCTION = '?';\n\tvar ERR_CLASS_REGEXP = new RegExp('^(([a-zA-Z0-9-_$ ]*): *)?(Uncaught )?([a-zA-Z0-9-_$ ]*): ');\n\t\n\tfunction guessFunctionName() {\n\t return UNKNOWN_FUNCTION;\n\t}\n\t\n\t\n\tfunction gatherContext() {\n\t return null;\n\t}\n\t\n\t\n\tfunction Frame(stackFrame) {\n\t var data = {};\n\t\n\t data._stackFrame = stackFrame;\n\t\n\t data.url = stackFrame.fileName;\n\t data.line = stackFrame.lineNumber;\n\t data.func = stackFrame.functionName;\n\t data.column = stackFrame.columnNumber;\n\t data.args = stackFrame.args;\n\t\n\t data.context = gatherContext(data.url, data.line);\n\t\n\t return data;\n\t}\n\t\n\t\n\tfunction Stack(exception) {\n\t function getStack() {\n\t var parserStack = [];\n\t var exc;\n\t\n\t if (!exception.stack) {\n\t try {\n\t throw exception;\n\t } catch (e) {\n\t exc = e;\n\t }\n\t } else {\n\t exc = exception;\n\t }\n\t\n\t try {\n\t parserStack = ErrorStackParser.parse(exc);\n\t } catch(e) {\n\t parserStack = [];\n\t }\n\t\n\t var stack = [];\n\t\n\t for (var i = 0; i < parserStack.length; i++) {\n\t stack.push(new Frame(parserStack[i]));\n\t }\n\t\n\t return stack;\n\t }\n\t\n\t return {\n\t stack: getStack(),\n\t message: exception.message,\n\t name: exception.name,\n\t rawStack: exception.stack,\n\t rawException: exception\n\t };\n\t}\n\t\n\t\n\tfunction parse(e) {\n\t return new Stack(e);\n\t}\n\t\n\t\n\tfunction guessErrorClass(errMsg) {\n\t if (!errMsg || !errMsg.match) {\n\t return ['Unknown error. There was no error message to display.', ''];\n\t }\n\t var errClassMatch = errMsg.match(ERR_CLASS_REGEXP);\n\t var errClass = '(unknown)';\n\t\n\t if (errClassMatch) {\n\t errClass = errClassMatch[errClassMatch.length - 1];\n\t errMsg = errMsg.replace((errClassMatch[errClassMatch.length - 2] || '') + errClass + ':', '');\n\t errMsg = errMsg.replace(/(^[\\s]+|[\\s]+$)/g, '');\n\t }\n\t return [errClass, errMsg];\n\t}\n\t\n\t\n\tmodule.exports = {\n\t guessFunctionName: guessFunctionName,\n\t guessErrorClass: guessErrorClass,\n\t gatherContext: gatherContext,\n\t parse: parse,\n\t Stack: Stack,\n\t Frame: Frame\n\t};\n\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (root, factory) {\n\t 'use strict';\n\t // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\t\n\t /* istanbul ignore next */\n\t if (true) {\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(22)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t } else if (typeof exports === 'object') {\n\t module.exports = factory(require('stackframe'));\n\t } else {\n\t root.ErrorStackParser = factory(root.StackFrame);\n\t }\n\t}(this, function ErrorStackParser(StackFrame) {\n\t 'use strict';\n\t\n\t var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n\t var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n\t var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\t\n\t function _map(array, fn, thisArg) {\n\t if (typeof Array.prototype.map === 'function') {\n\t return array.map(fn, thisArg);\n\t } else {\n\t var output = new Array(array.length);\n\t for (var i = 0; i < array.length; i++) {\n\t output[i] = fn.call(thisArg, array[i]);\n\t }\n\t return output;\n\t }\n\t }\n\t\n\t function _filter(array, fn, thisArg) {\n\t if (typeof Array.prototype.filter === 'function') {\n\t return array.filter(fn, thisArg);\n\t } else {\n\t var output = [];\n\t for (var i = 0; i < array.length; i++) {\n\t if (fn.call(thisArg, array[i])) {\n\t output.push(array[i]);\n\t }\n\t }\n\t return output;\n\t }\n\t }\n\t\n\t return {\n\t /**\n\t * Given an Error object, extract the most information from it.\n\t * @param error {Error}\n\t * @return Array[StackFrame]\n\t */\n\t parse: function ErrorStackParser$$parse(error) {\n\t if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n\t return this.parseOpera(error);\n\t } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n\t return this.parseV8OrIE(error);\n\t } else if (error.stack) {\n\t return this.parseFFOrSafari(error);\n\t } else {\n\t throw new Error('Cannot parse given Error object');\n\t }\n\t },\n\t\n\t /**\n\t * Separate line and column numbers from a URL-like string.\n\t * @param urlLike String\n\t * @return Array[String]\n\t */\n\t extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n\t // Fail-fast but return locations like \"(native)\"\n\t if (urlLike.indexOf(':') === -1) {\n\t return [urlLike];\n\t }\n\t\n\t var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n\t var lastNumber = locationParts.pop();\n\t var possibleNumber = locationParts[locationParts.length - 1];\n\t if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n\t var lineNumber = locationParts.pop();\n\t return [locationParts.join(':'), lineNumber, lastNumber];\n\t } else {\n\t return [locationParts.join(':'), lastNumber, undefined];\n\t }\n\t },\n\t\n\t parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n\t var filtered = _filter(error.stack.split('\\n'), function (line) {\n\t return !!line.match(CHROME_IE_STACK_REGEXP);\n\t }, this);\n\t\n\t return _map(filtered, function (line) {\n\t if (line.indexOf('(eval ') > -1) {\n\t // Throw away eval information until we implement stacktrace.js/stackframe#8\n\t line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n\t }\n\t var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n\t var locationParts = this.extractLocation(tokens.pop());\n\t var functionName = tokens.join(' ') || undefined;\n\t var fileName = locationParts[0] === 'eval' ? undefined : locationParts[0];\n\t\n\t return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n\t }, this);\n\t },\n\t\n\t parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n\t var filtered = _filter(error.stack.split('\\n'), function (line) {\n\t return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n\t }, this);\n\t\n\t return _map(filtered, function (line) {\n\t // Throw away eval information until we implement stacktrace.js/stackframe#8\n\t if (line.indexOf(' > eval') > -1) {\n\t line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n\t }\n\t\n\t if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n\t // Safari eval frames only have function names and nothing else\n\t return new StackFrame(line);\n\t } else {\n\t var tokens = line.split('@');\n\t var locationParts = this.extractLocation(tokens.pop());\n\t var functionName = tokens.shift() || undefined;\n\t return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n\t }\n\t }, this);\n\t },\n\t\n\t parseOpera: function ErrorStackParser$$parseOpera(e) {\n\t if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n\t e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n\t return this.parseOpera9(e);\n\t } else if (!e.stack) {\n\t return this.parseOpera10(e);\n\t } else {\n\t return this.parseOpera11(e);\n\t }\n\t },\n\t\n\t parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n\t var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n\t var lines = e.message.split('\\n');\n\t var result = [];\n\t\n\t for (var i = 2, len = lines.length; i < len; i += 2) {\n\t var match = lineRE.exec(lines[i]);\n\t if (match) {\n\t result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n\t }\n\t }\n\t\n\t return result;\n\t },\n\t\n\t parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n\t var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n\t var lines = e.stacktrace.split('\\n');\n\t var result = [];\n\t\n\t for (var i = 0, len = lines.length; i < len; i += 2) {\n\t var match = lineRE.exec(lines[i]);\n\t if (match) {\n\t result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n\t }\n\t }\n\t\n\t return result;\n\t },\n\t\n\t // Opera 10.65+ Error.stack very similar to FF/Safari\n\t parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n\t var filtered = _filter(error.stack.split('\\n'), function (line) {\n\t return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n\t !line.match(/^Error created at/);\n\t }, this);\n\t\n\t return _map(filtered, function (line) {\n\t var tokens = line.split('@');\n\t var locationParts = this.extractLocation(tokens.pop());\n\t var functionCall = (tokens.shift() || '');\n\t var functionName = functionCall\n\t .replace(//, '$2')\n\t .replace(/\\([^\\)]*\\)/g, '') || undefined;\n\t var argsRaw;\n\t if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n\t argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n\t }\n\t var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n\t return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n\t }, this);\n\t }\n\t };\n\t}));\n\t\n\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (root, factory) {\n\t 'use strict';\n\t // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\t\n\t /* istanbul ignore next */\n\t if (true) {\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t } else if (typeof exports === 'object') {\n\t module.exports = factory();\n\t } else {\n\t root.StackFrame = factory();\n\t }\n\t}(this, function () {\n\t 'use strict';\n\t function _isNumber(n) {\n\t return !isNaN(parseFloat(n)) && isFinite(n);\n\t }\n\t\n\t function StackFrame(functionName, args, fileName, lineNumber, columnNumber, source) {\n\t if (functionName !== undefined) {\n\t this.setFunctionName(functionName);\n\t }\n\t if (args !== undefined) {\n\t this.setArgs(args);\n\t }\n\t if (fileName !== undefined) {\n\t this.setFileName(fileName);\n\t }\n\t if (lineNumber !== undefined) {\n\t this.setLineNumber(lineNumber);\n\t }\n\t if (columnNumber !== undefined) {\n\t this.setColumnNumber(columnNumber);\n\t }\n\t if (source !== undefined) {\n\t this.setSource(source);\n\t }\n\t }\n\t\n\t StackFrame.prototype = {\n\t getFunctionName: function () {\n\t return this.functionName;\n\t },\n\t setFunctionName: function (v) {\n\t this.functionName = String(v);\n\t },\n\t\n\t getArgs: function () {\n\t return this.args;\n\t },\n\t setArgs: function (v) {\n\t if (Object.prototype.toString.call(v) !== '[object Array]') {\n\t throw new TypeError('Args must be an Array');\n\t }\n\t this.args = v;\n\t },\n\t\n\t // NOTE: Property name may be misleading as it includes the path,\n\t // but it somewhat mirrors V8's JavaScriptStackTraceApi\n\t // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's\n\t // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14\n\t getFileName: function () {\n\t return this.fileName;\n\t },\n\t setFileName: function (v) {\n\t this.fileName = String(v);\n\t },\n\t\n\t getLineNumber: function () {\n\t return this.lineNumber;\n\t },\n\t setLineNumber: function (v) {\n\t if (!_isNumber(v)) {\n\t throw new TypeError('Line Number must be a Number');\n\t }\n\t this.lineNumber = Number(v);\n\t },\n\t\n\t getColumnNumber: function () {\n\t return this.columnNumber;\n\t },\n\t setColumnNumber: function (v) {\n\t if (!_isNumber(v)) {\n\t throw new TypeError('Column Number must be a Number');\n\t }\n\t this.columnNumber = Number(v);\n\t },\n\t\n\t getSource: function () {\n\t return this.source;\n\t },\n\t setSource: function (v) {\n\t this.source = String(v);\n\t },\n\t\n\t toString: function() {\n\t var functionName = this.getFunctionName() || '{anonymous}';\n\t var args = '(' + (this.getArgs() || []).join(',') + ')';\n\t var fileName = this.getFileName() ? ('@' + this.getFileName()) : '';\n\t var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : '';\n\t var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : '';\n\t return functionName + args + fileName + lineNumber + columnNumber;\n\t }\n\t };\n\t\n\t return StackFrame;\n\t}));\n\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\t\n\tfunction itemToPayload(item, options, callback) {\n\t var payloadOptions = options.payload || {};\n\t if (payloadOptions.body) {\n\t delete payloadOptions.body;\n\t }\n\t\n\t var data = _.extend(true, {}, item.data, payloadOptions);\n\t if (item._isUncaught) {\n\t data._isUncaught = true;\n\t }\n\t if (item._originalArgs) {\n\t data._originalArgs = item._originalArgs;\n\t }\n\t callback(null, data);\n\t}\n\t\n\tfunction addTelemetryData(item, options, callback) {\n\t if (item.telemetryEvents) {\n\t _.set(item, 'data.body.telemetry', item.telemetryEvents);\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction addMessageWithError(item, options, callback) {\n\t if (!item.message) {\n\t callback(null, item);\n\t return;\n\t }\n\t var tracePath = 'data.body.trace_chain.0';\n\t var trace = _.get(item, tracePath);\n\t if (!trace) {\n\t tracePath = 'data.body.trace';\n\t trace = _.get(item, tracePath);\n\t }\n\t if (trace) {\n\t if (!(trace.exception && trace.exception.description)) {\n\t _.set(item, tracePath+'.exception.description', item.message);\n\t callback(null, item);\n\t return;\n\t }\n\t var extra = _.get(item, tracePath+'.extra') || {};\n\t var newExtra = _.extend(true, {}, extra, {message: item.message});\n\t _.set(item, tracePath+'.extra', newExtra);\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction userTransform(logger) {\n\t return function(item, options, callback) {\n\t var newItem = _.extend(true, {}, item);\n\t try {\n\t if (_.isFunction(options.transform)) {\n\t options.transform(newItem.data);\n\t }\n\t } catch (e) {\n\t options.transform = null;\n\t logger.error('Error while calling custom transform() function. Removing custom transform().', e);\n\t callback(null, item);\n\t return;\n\t }\n\t callback(null, newItem);\n\t }\n\t}\n\t\n\tfunction addConfigToPayload(item, options, callback) {\n\t if (!options.sendConfig) {\n\t return callback(null, item);\n\t }\n\t var configKey = '_rollbarConfig';\n\t var custom = _.get(item, 'data.custom') || {};\n\t custom[configKey] = options;\n\t item.data.custom = custom;\n\t callback(null, item);\n\t}\n\t\n\tmodule.exports = {\n\t itemToPayload: itemToPayload,\n\t addTelemetryData: addTelemetryData,\n\t addMessageWithError: addMessageWithError,\n\t userTransform: userTransform,\n\t addConfigToPayload: addConfigToPayload\n\t};\n\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\t\n\tfunction checkIgnore(item, settings) {\n\t if (_.get(settings, 'plugins.jquery.ignoreAjaxErrors')) {\n\t return !_.get(item, 'body.message.extra.isAjax');\n\t }\n\t return true;\n\t}\n\t\n\tmodule.exports = {\n\t checkIgnore: checkIgnore\n\t};\n\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\t\n\tfunction checkLevel(item, settings) {\n\t var level = item.level;\n\t var levelVal = _.LEVELS[level] || 0;\n\t var reportLevel = settings.reportLevel;\n\t var reportLevelVal = _.LEVELS[reportLevel] || 0;\n\t\n\t if (levelVal < reportLevelVal) {\n\t return false;\n\t }\n\t return true;\n\t}\n\t\n\tfunction userCheckIgnore(logger) {\n\t return function(item, settings) {\n\t var isUncaught = !!item._isUncaught;\n\t delete item._isUncaught;\n\t var args = item._originalArgs;\n\t delete item._originalArgs;\n\t try {\n\t if (_.isFunction(settings.onSendCallback)) {\n\t settings.onSendCallback(isUncaught, args, item);\n\t }\n\t } catch (e) {\n\t settings.onSendCallback = null;\n\t logger.error('Error while calling onSendCallback, removing', e);\n\t }\n\t try {\n\t if (_.isFunction(settings.checkIgnore) && settings.checkIgnore(isUncaught, args, item)) {\n\t return false;\n\t }\n\t } catch (e) {\n\t settings.checkIgnore = null;\n\t logger.error('Error while calling custom checkIgnore(), removing', e);\n\t }\n\t return true;\n\t }\n\t}\n\t\n\tfunction urlIsNotBlacklisted(logger) {\n\t return function(item, settings) {\n\t return !urlIsOnAList(item, settings, 'blacklist', logger);\n\t }\n\t}\n\t\n\tfunction urlIsWhitelisted(logger) {\n\t return function(item, settings) {\n\t return urlIsOnAList(item, settings, 'whitelist', logger);\n\t }\n\t}\n\t\n\tfunction urlIsOnAList(item, settings, whiteOrBlack, logger) {\n\t // whitelist is the default\n\t var black = false;\n\t if (whiteOrBlack === 'blacklist') {\n\t black = true;\n\t }\n\t var list, trace, frame, filename, frameLength, url, listLength, urlRegex;\n\t var i, j;\n\t\n\t try {\n\t list = black ? settings.hostBlackList : settings.hostWhiteList;\n\t listLength = list && list.length;\n\t trace = _.get(item, 'body.trace');\n\t\n\t // These two checks are important to come first as they are defaults\n\t // in case the list is missing or the trace is missing or not well-formed\n\t if (!list || listLength === 0) {\n\t return !black;\n\t }\n\t if (!trace || !trace.frames || trace.frames.length === 0) {\n\t return !black;\n\t }\n\t\n\t frameLength = trace.frames.length;\n\t for (i = 0; i < frameLength; i++) {\n\t frame = trace.frames[i];\n\t filename = frame.filename;\n\t\n\t if (!_.isType(filename, 'string')) {\n\t return !black;\n\t }\n\t\n\t for (j = 0; j < listLength; j++) {\n\t url = list[j];\n\t urlRegex = new RegExp(url);\n\t\n\t if (urlRegex.test(filename)) {\n\t return true;\n\t }\n\t }\n\t }\n\t } catch (e)\n\t /* istanbul ignore next */\n\t {\n\t if (black) {\n\t settings.hostBlackList = null;\n\t } else {\n\t settings.hostWhiteList = null;\n\t }\n\t var listName = black ? 'hostBlackList' : 'hostWhiteList';\n\t logger.error('Error while reading your configuration\\'s ' + listName + ' option. Removing custom ' + listName + '.', e);\n\t return !black;\n\t }\n\t return false;\n\t}\n\t\n\tfunction messageIsIgnored(logger) {\n\t return function(item, settings) {\n\t var exceptionMessage, i, ignoredMessages,\n\t len, messageIsIgnored, rIgnoredMessage,\n\t body, traceMessage, bodyMessage;\n\t\n\t try {\n\t messageIsIgnored = false;\n\t ignoredMessages = settings.ignoredMessages;\n\t\n\t if (!ignoredMessages || ignoredMessages.length === 0) {\n\t return true;\n\t }\n\t\n\t body = item.body;\n\t traceMessage = _.get(body, 'trace.exception.message');\n\t bodyMessage = _.get(body, 'message.body');\n\t\n\t exceptionMessage = traceMessage || bodyMessage;\n\t\n\t if (!exceptionMessage){\n\t return true;\n\t }\n\t\n\t len = ignoredMessages.length;\n\t for (i = 0; i < len; i++) {\n\t rIgnoredMessage = new RegExp(ignoredMessages[i], 'gi');\n\t messageIsIgnored = rIgnoredMessage.test(exceptionMessage);\n\t\n\t if (messageIsIgnored) {\n\t break;\n\t }\n\t }\n\t } catch(e)\n\t /* istanbul ignore next */\n\t {\n\t settings.ignoredMessages = null;\n\t logger.error('Error while reading your configuration\\'s ignoredMessages option. Removing custom ignoredMessages.');\n\t }\n\t\n\t return !messageIsIgnored;\n\t }\n\t}\n\t\n\tmodule.exports = {\n\t checkLevel: checkLevel,\n\t userCheckIgnore: userCheckIgnore,\n\t urlIsNotBlacklisted: urlIsNotBlacklisted,\n\t urlIsWhitelisted: urlIsWhitelisted,\n\t messageIsIgnored: messageIsIgnored\n\t};\n\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\tvar urlparser = __webpack_require__(18);\n\tvar domUtil = __webpack_require__(27);\n\t\n\tvar defaults = {\n\t network: true,\n\t networkResponseHeaders: false,\n\t networkResponseBody: false,\n\t networkRequestBody: false,\n\t log: true,\n\t dom: true,\n\t navigation: true,\n\t connectivity: true\n\t};\n\t\n\tfunction replace(obj, name, replacement, replacements, type) {\n\t var orig = obj[name];\n\t obj[name] = replacement(orig);\n\t if (replacements) {\n\t replacements[type].push([obj, name, orig]);\n\t }\n\t}\n\t\n\tfunction restore(replacements, type) {\n\t var b;\n\t while (replacements[type].length) {\n\t b = replacements[type].shift();\n\t b[0][b[1]] = b[2];\n\t }\n\t}\n\t\n\tfunction Instrumenter(options, telemeter, rollbar, _window, _document) {\n\t var autoInstrument = options.autoInstrument;\n\t if (options.enabled === false || autoInstrument === false) {\n\t this.autoInstrument = {};\n\t } else {\n\t if (!_.isType(autoInstrument, 'object')) {\n\t autoInstrument = defaults;\n\t }\n\t this.autoInstrument = _.extend(true, {}, defaults, autoInstrument);\n\t }\n\t this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n\t this.telemetryScrubber = options.telemetryScrubber;\n\t this.telemeter = telemeter;\n\t this.rollbar = rollbar;\n\t this._window = _window || {};\n\t this._document = _document || {};\n\t this.replacements = {\n\t network: [],\n\t log: [],\n\t navigation: [],\n\t connectivity: []\n\t };\n\t this.eventRemovers = {\n\t dom: [],\n\t connectivity: []\n\t };\n\t\n\t this._location = this._window.location;\n\t this._lastHref = this._location && this._location.href;\n\t}\n\t\n\tInstrumenter.prototype.configure = function(options) {\n\t var autoInstrument = options.autoInstrument;\n\t var oldSettings = _.extend(true, {}, this.autoInstrument);\n\t if (options.enabled === false || autoInstrument === false) {\n\t this.autoInstrument = {};\n\t } else {\n\t if (!_.isType(autoInstrument, 'object')) {\n\t autoInstrument = defaults;\n\t }\n\t this.autoInstrument = _.extend(true, {}, defaults, autoInstrument);\n\t }\n\t this.instrument(oldSettings);\n\t if (options.scrubTelemetryInputs !== undefined) {\n\t this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n\t }\n\t if (options.telemetryScrubber !== undefined) {\n\t this.telemetryScrubber = options.telemetryScrubber;\n\t }\n\t};\n\t\n\tInstrumenter.prototype.instrument = function(oldSettings) {\n\t if (this.autoInstrument.network && !(oldSettings && oldSettings.network)) {\n\t this.instrumentNetwork();\n\t } else if (!this.autoInstrument.network && oldSettings && oldSettings.network) {\n\t this.deinstrumentNetwork();\n\t }\n\t\n\t if (this.autoInstrument.log && !(oldSettings && oldSettings.log)) {\n\t this.instrumentConsole();\n\t } else if (!this.autoInstrument.log && oldSettings && oldSettings.log) {\n\t this.deinstrumentConsole();\n\t }\n\t\n\t if (this.autoInstrument.dom && !(oldSettings && oldSettings.dom)) {\n\t this.instrumentDom();\n\t } else if (!this.autoInstrument.dom && oldSettings && oldSettings.dom) {\n\t this.deinstrumentDom();\n\t }\n\t\n\t if (this.autoInstrument.navigation && !(oldSettings && oldSettings.navigation)) {\n\t this.instrumentNavigation();\n\t } else if (!this.autoInstrument.navigation && oldSettings && oldSettings.navigation) {\n\t this.deinstrumentNavigation();\n\t }\n\t\n\t if (this.autoInstrument.connectivity && !(oldSettings && oldSettings.connectivity)) {\n\t this.instrumentConnectivity();\n\t } else if (!this.autoInstrument.connectivity && oldSettings && oldSettings.connectivity) {\n\t this.deinstrumentConnectivity();\n\t }\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentNetwork = function() {\n\t restore(this.replacements, 'network');\n\t};\n\t\n\tInstrumenter.prototype.instrumentNetwork = function() {\n\t var self = this;\n\t\n\t function wrapProp(prop, xhr) {\n\t if (prop in xhr && _.isFunction(xhr[prop])) {\n\t replace(xhr, prop, function(orig) {\n\t return self.rollbar.wrap(orig);\n\t });\n\t }\n\t }\n\t\n\t if ('XMLHttpRequest' in this._window) {\n\t var xhrp = this._window.XMLHttpRequest.prototype;\n\t replace(xhrp, 'open', function(orig) {\n\t return function(method, url) {\n\t if (_.isType(url, 'string')) {\n\t this.__rollbar_xhr = {\n\t method: method,\n\t url: url,\n\t status_code: null,\n\t start_time_ms: _.now(),\n\t end_time_ms: null\n\t };\n\t }\n\t return orig.apply(this, arguments);\n\t };\n\t }, this.replacements, 'network');\n\t\n\t replace(xhrp, 'send', function(orig) {\n\t /* eslint-disable no-unused-vars */\n\t return function(data) {\n\t /* eslint-enable no-unused-vars */\n\t var xhr = this;\n\t\n\t function onreadystatechangeHandler() {\n\t if (xhr.__rollbar_xhr && (xhr.readyState === 1 || xhr.readyState === 4)) {\n\t if (xhr.__rollbar_xhr.status_code === null) {\n\t xhr.__rollbar_xhr.status_code = 0;\n\t var requestData = null;\n\t if (self.autoInstrument.networkRequestBody) {\n\t requestData = data;\n\t }\n\t xhr.__rollbar_event = self.telemeter.captureNetwork(xhr.__rollbar_xhr, 'xhr', undefined, requestData);\n\t }\n\t if (xhr.readyState === 1) {\n\t xhr.__rollbar_xhr.start_time_ms = _.now();\n\t } else {\n\t xhr.__rollbar_xhr.end_time_ms = _.now();\n\t\n\t var headers = null;\n\t if (self.autoInstrument.networkResponseHeaders) {\n\t var headersConfig = self.autoInstrument.networkResponseHeaders;\n\t headers = {};\n\t try {\n\t var header, i;\n\t if (headersConfig === true) {\n\t var allHeaders = xhr.getAllResponseHeaders();\n\t if (allHeaders) {\n\t var arr = allHeaders.trim().split(/[\\r\\n]+/);\n\t var parts, value;\n\t for (i=0; i < arr.length; i++) {\n\t parts = arr[i].split(': ');\n\t header = parts.shift();\n\t value = parts.join(': ');\n\t headers[header] = value;\n\t }\n\t }\n\t } else {\n\t for (i=0; i < headersConfig.length; i++) {\n\t header = headersConfig[i];\n\t headers[header] = xhr.getResponseHeader(header);\n\t }\n\t }\n\t } catch (e) {\n\t /* we ignore the errors here that could come from different\n\t * browser issues with the xhr methods */\n\t }\n\t }\n\t var body = null;\n\t if (self.autoInstrument.networkResponseBody) {\n\t try {\n\t body = xhr.responseText;\n\t } catch (e) {\n\t /* ignore errors from reading responseText */\n\t }\n\t }\n\t var response = null;\n\t if (body || headers) {\n\t response = {};\n\t if (body) {\n\t response.body = body;\n\t }\n\t if (headers) {\n\t response.headers = headers;\n\t }\n\t }\n\t if (response) {\n\t xhr.__rollbar_xhr.response = response;\n\t }\n\t }\n\t try {\n\t var code = xhr.status;\n\t code = code === 1223 ? 204 : code;\n\t xhr.__rollbar_xhr.status_code = code;\n\t xhr.__rollbar_event.level = self.telemeter.levelFromStatus(code);\n\t } catch (e) {\n\t /* ignore possible exception from xhr.status */\n\t }\n\t }\n\t }\n\t\n\t wrapProp('onload', xhr);\n\t wrapProp('onerror', xhr);\n\t wrapProp('onprogress', xhr);\n\t\n\t if ('onreadystatechange' in xhr && _.isFunction(xhr.onreadystatechange)) {\n\t replace(xhr, 'onreadystatechange', function(orig) {\n\t return self.rollbar.wrap(orig, undefined, onreadystatechangeHandler);\n\t });\n\t } else {\n\t xhr.onreadystatechange = onreadystatechangeHandler;\n\t }\n\t return orig.apply(this, arguments);\n\t }\n\t }, this.replacements, 'network');\n\t }\n\t\n\t if ('fetch' in this._window) {\n\t replace(this._window, 'fetch', function(orig) {\n\t /* eslint-disable no-unused-vars */\n\t return function(fn, t) {\n\t /* eslint-enable no-unused-vars */\n\t var args = new Array(arguments.length);\n\t for (var i=0, len=args.length; i < len; i++) {\n\t args[i] = arguments[i];\n\t }\n\t var input = args[0];\n\t var method = 'GET';\n\t var url;\n\t if (_.isType(input, 'string')) {\n\t url = input;\n\t } else if (input) {\n\t url = input.url;\n\t if (input.method) {\n\t method = input.method;\n\t }\n\t }\n\t if (args[1] && args[1].method) {\n\t method = args[1].method;\n\t }\n\t var metadata = {\n\t method: method,\n\t url: url,\n\t status_code: null,\n\t start_time_ms: _.now(),\n\t end_time_ms: null\n\t };\n\t var requestData = null;\n\t if (self.autoInstrument.networkRequestBody) {\n\t if (args[1] && args[1].body) {\n\t requestData = args[1].body;\n\t } else if (args[0] && !_.isType(args[0], 'string') && args[0].body) {\n\t requestData = args[0].body;\n\t }\n\t }\n\t self.telemeter.captureNetwork(metadata, 'fetch', undefined, requestData);\n\t return orig.apply(this, args).then(function (resp) {\n\t metadata.end_time_ms = _.now();\n\t metadata.status_code = resp.status;\n\t var headers = null;\n\t if (self.autoInstrument.networkResponseHeaders) {\n\t var headersConfig = self.autoInstrument.networkResponseHeaders;\n\t headers = {};\n\t try {\n\t if (headersConfig === true) {\n\t // This is unsupported in IE so we can't do it\n\t /*\n\t var allHeaders = resp.headers.entries();\n\t for (var pair of allHeaders) {\n\t headers[pair[0]] = pair[1];\n\t }\n\t */\n\t } else {\n\t for (var i=0; i < headersConfig.length; i++) {\n\t var header = headersConfig[i];\n\t headers[header] = resp.headers.get(header);\n\t }\n\t }\n\t } catch (e) {\n\t /* ignore probable IE errors */\n\t }\n\t }\n\t var response = null;\n\t if (headers) {\n\t response = {\n\t headers: headers\n\t };\n\t }\n\t if (response) {\n\t metadata.response = response;\n\t }\n\t return resp;\n\t });\n\t };\n\t }, this.replacements, 'network');\n\t }\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentConsole = function() {\n\t if (!('console' in this._window && this._window.console.log)) {\n\t return;\n\t }\n\t var b;\n\t while (this.replacements['log'].length) {\n\t b = this.replacements['log'].shift();\n\t this._window.console[b[0]] = b[1];\n\t }\n\t};\n\t\n\tInstrumenter.prototype.instrumentConsole = function() {\n\t if (!('console' in this._window && this._window.console.log)) {\n\t return;\n\t }\n\t\n\t var self = this;\n\t var c = this._window.console;\n\t\n\t function wrapConsole(method) {\n\t var orig = c[method];\n\t var origConsole = c;\n\t var level = method === 'warn' ? 'warning' : method;\n\t c[method] = function() {\n\t var args = Array.prototype.slice.call(arguments);\n\t var message = _.formatArgsAsString(args);\n\t self.telemeter.captureLog(message, level);\n\t if (orig) {\n\t Function.prototype.apply.call(orig, origConsole, args);\n\t }\n\t };\n\t self.replacements['log'].push([method, orig]);\n\t }\n\t var methods = ['debug','info','warn','error','log'];\n\t for (var i=0, len=methods.length; i < len; i++) {\n\t wrapConsole(methods[i]);\n\t }\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentDom = function() {\n\t if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n\t return;\n\t }\n\t this.removeListeners('dom');\n\t};\n\t\n\tInstrumenter.prototype.instrumentDom = function() {\n\t if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n\t return;\n\t }\n\t var clickHandler = this.handleClick.bind(this);\n\t var blurHandler = this.handleBlur.bind(this);\n\t this.addListener('dom', this._window, 'click', 'onclick', clickHandler, true);\n\t this.addListener('dom', this._window, 'blur', 'onfocusout', blurHandler, true);\n\t};\n\t\n\tInstrumenter.prototype.handleClick = function(evt) {\n\t try {\n\t var e = domUtil.getElementFromEvent(evt, this._document);\n\t var hasTag = e && e.tagName;\n\t var anchorOrButton = domUtil.isDescribedElement(e, 'a') || domUtil.isDescribedElement(e, 'button');\n\t if (hasTag && (anchorOrButton || domUtil.isDescribedElement(e, 'input', ['button', 'submit']))) {\n\t this.captureDomEvent('click', e);\n\t } else if (domUtil.isDescribedElement(e, 'input', ['checkbox', 'radio'])) {\n\t this.captureDomEvent('input', e, e.value, e.checked);\n\t }\n\t } catch (exc) {\n\t // TODO: Not sure what to do here\n\t }\n\t};\n\t\n\tInstrumenter.prototype.handleBlur = function(evt) {\n\t try {\n\t var e = domUtil.getElementFromEvent(evt, this._document);\n\t if (e && e.tagName) {\n\t if (domUtil.isDescribedElement(e, 'textarea')) {\n\t this.captureDomEvent('input', e, e.value);\n\t } else if (domUtil.isDescribedElement(e, 'select') && e.options && e.options.length) {\n\t this.handleSelectInputChanged(e);\n\t } else if (domUtil.isDescribedElement(e, 'input') && !domUtil.isDescribedElement(e, 'input', ['button', 'submit', 'hidden', 'checkbox', 'radio'])) {\n\t this.captureDomEvent('input', e, e.value);\n\t }\n\t }\n\t } catch (exc) {\n\t // TODO: Not sure what to do here\n\t }\n\t};\n\t\n\tInstrumenter.prototype.handleSelectInputChanged = function(elem) {\n\t if (elem.multiple) {\n\t for (var i = 0; i < elem.options.length; i++) {\n\t if (elem.options[i].selected) {\n\t this.captureDomEvent('input', elem, elem.options[i].value);\n\t }\n\t }\n\t } else if (elem.selectedIndex >= 0 && elem.options[elem.selectedIndex]) {\n\t this.captureDomEvent('input', elem, elem.options[elem.selectedIndex].value);\n\t }\n\t};\n\t\n\tInstrumenter.prototype.captureDomEvent = function(subtype, element, value, isChecked) {\n\t if (value !== undefined) {\n\t if (this.scrubTelemetryInputs || (domUtil.getElementType(element) === 'password')) {\n\t value = '[scrubbed]';\n\t } else if (this.telemetryScrubber) {\n\t var description = domUtil.describeElement(element);\n\t if (this.telemetryScrubber(description)) {\n\t value = '[scrubbed]';\n\t }\n\t }\n\t }\n\t var elementString = domUtil.elementArrayToString(domUtil.treeToArray(element));\n\t this.telemeter.captureDom(subtype, elementString, value, isChecked);\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentNavigation = function() {\n\t var chrome = this._window.chrome;\n\t var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n\t // See https://github.com/angular/angular.js/pull/13945/files\n\t var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n\t if (!hasPushState) {\n\t return;\n\t }\n\t restore(this.replacements, 'navigation');\n\t};\n\t\n\tInstrumenter.prototype.instrumentNavigation = function() {\n\t var chrome = this._window.chrome;\n\t var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n\t // See https://github.com/angular/angular.js/pull/13945/files\n\t var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n\t if (!hasPushState) {\n\t return;\n\t }\n\t var self = this;\n\t replace(this._window, 'onpopstate', function(orig) {\n\t return function() {\n\t var current = self._location.href;\n\t self.handleUrlChange(self._lastHref, current);\n\t if (orig) {\n\t orig.apply(this, arguments);\n\t }\n\t };\n\t }, this.replacements, 'navigation');\n\t\n\t replace(this._window.history, 'pushState', function(orig) {\n\t return function() {\n\t var url = arguments.length > 2 ? arguments[2] : undefined;\n\t if (url) {\n\t self.handleUrlChange(self._lastHref, url + '');\n\t }\n\t return orig.apply(this, arguments);\n\t };\n\t }, this.replacements, 'navigation');\n\t};\n\t\n\tInstrumenter.prototype.handleUrlChange = function(from, to) {\n\t var parsedHref = urlparser.parse(this._location.href);\n\t var parsedTo = urlparser.parse(to);\n\t var parsedFrom = urlparser.parse(from);\n\t this._lastHref = to;\n\t if (parsedHref.protocol === parsedTo.protocol && parsedHref.host === parsedTo.host) {\n\t to = parsedTo.path + (parsedTo.hash || '');\n\t }\n\t if (parsedHref.protocol === parsedFrom.protocol && parsedHref.host === parsedFrom.host) {\n\t from = parsedFrom.path + (parsedFrom.hash || '');\n\t }\n\t this.telemeter.captureNavigation(from, to);\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentConnectivity = function() {\n\t if (!('addEventListener' in this._window || 'body' in this._document)) {\n\t return;\n\t }\n\t if (this._window.addEventListener) {\n\t this.removeListeners('connectivity');\n\t } else {\n\t restore(this.replacements, 'connectivity');\n\t }\n\t};\n\t\n\tInstrumenter.prototype.instrumentConnectivity = function() {\n\t if (!('addEventListener' in this._window || 'body' in this._document)) {\n\t return;\n\t }\n\t if (this._window.addEventListener) {\n\t this.addListener('connectivity', this._window, 'online', undefined, function() {\n\t this.telemeter.captureConnectivityChange('online');\n\t }.bind(this), true);\n\t this.addListener('connectivity', this._window, 'offline', undefined, function() {\n\t this.telemeter.captureConnectivityChange('offline');\n\t }.bind(this), true);\n\t } else {\n\t var self = this;\n\t replace(this._document.body, 'ononline', function(orig) {\n\t return function() {\n\t self.telemeter.captureConnectivityChange('online');\n\t if (orig) {\n\t orig.apply(this, arguments);\n\t }\n\t }\n\t }, this.replacements, 'connectivity');\n\t replace(this._document.body, 'onoffline', function(orig) {\n\t return function() {\n\t self.telemeter.captureConnectivityChange('offline');\n\t if (orig) {\n\t orig.apply(this, arguments);\n\t }\n\t }\n\t }, this.replacements, 'connectivity');\n\t }\n\t};\n\t\n\tInstrumenter.prototype.addListener = function(section, obj, type, altType, handler, capture) {\n\t if (obj.addEventListener) {\n\t obj.addEventListener(type, handler, capture);\n\t this.eventRemovers[section].push(function() {\n\t obj.removeEventListener(type, handler, capture);\n\t });\n\t } else if (altType) {\n\t obj.attachEvent(altType, handler);\n\t this.eventRemovers[section].push(function() {\n\t obj.detachEvent(altType, handler);\n\t });\n\t }\n\t};\n\t\n\tInstrumenter.prototype.removeListeners = function(section) {\n\t var r;\n\t while (this.eventRemovers[section].length) {\n\t r = this.eventRemovers[section].shift();\n\t r();\n\t }\n\t};\n\t\n\tmodule.exports = Instrumenter;\n\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tfunction getElementType(e) {\n\t return (e.getAttribute('type') || '').toLowerCase();\n\t}\n\t\n\tfunction isDescribedElement(element, type, subtypes) {\n\t if (element.tagName.toLowerCase() !== type.toLowerCase()) {\n\t return false;\n\t }\n\t if (!subtypes) {\n\t return true;\n\t }\n\t element = getElementType(element);\n\t for (var i = 0; i < subtypes.length; i++) {\n\t if (subtypes[i] === element) {\n\t return true;\n\t }\n\t }\n\t return false;\n\t}\n\t\n\tfunction getElementFromEvent(evt, doc) {\n\t if (evt.target) {\n\t return evt.target;\n\t }\n\t if (doc && doc.elementFromPoint) {\n\t return doc.elementFromPoint(evt.clientX, evt.clientY);\n\t }\n\t return undefined;\n\t}\n\t\n\tfunction treeToArray(elem) {\n\t var MAX_HEIGHT = 5;\n\t var out = [];\n\t var nextDescription;\n\t for (var height = 0; elem && height < MAX_HEIGHT; height++) {\n\t nextDescription = describeElement(elem);\n\t if (nextDescription.tagName === 'html') {\n\t break;\n\t }\n\t out.unshift(nextDescription);\n\t elem = elem.parentNode;\n\t }\n\t return out;\n\t}\n\t\n\tfunction elementArrayToString(a) {\n\t var MAX_LENGTH = 80;\n\t var separator = ' > ', separatorLength = separator.length;\n\t var out = [], len = 0, nextStr, totalLength;\n\t\n\t for (var i = a.length - 1; i >= 0; i--) {\n\t nextStr = descriptionToString(a[i]);\n\t totalLength = len + (out.length * separatorLength) + nextStr.length;\n\t if (i < a.length - 1 && totalLength >= MAX_LENGTH + 3) {\n\t out.unshift('...');\n\t break;\n\t }\n\t out.unshift(nextStr);\n\t len += nextStr.length;\n\t }\n\t return out.join(separator);\n\t}\n\t\n\tfunction descriptionToString(desc) {\n\t if (!desc || !desc.tagName) {\n\t return '';\n\t }\n\t var out = [desc.tagName];\n\t if (desc.id) {\n\t out.push('#' + desc.id);\n\t }\n\t if (desc.classes) {\n\t out.push('.' + desc.classes.join('.'));\n\t }\n\t for (var i = 0; i < desc.attributes.length; i++) {\n\t out.push('[' + desc.attributes[i].key + '=\"' + desc.attributes[i].value + '\"]');\n\t }\n\t\n\t return out.join('');\n\t}\n\t\n\t/**\n\t * Input: a dom element\n\t * Output: null if tagName is falsey or input is falsey, else\n\t * {\n\t * tagName: String,\n\t * id: String | undefined,\n\t * classes: [String] | undefined,\n\t * attributes: [\n\t * {\n\t * key: OneOf(type, name, title, alt),\n\t * value: String\n\t * }\n\t * ]\n\t * }\n\t */\n\tfunction describeElement(elem) {\n\t if (!elem || !elem.tagName) {\n\t return null;\n\t }\n\t var out = {}, className, key, attr, i;\n\t out.tagName = elem.tagName.toLowerCase();\n\t if (elem.id) {\n\t out.id = elem.id;\n\t }\n\t className = elem.className;\n\t if (className && (typeof className === 'string')) {\n\t out.classes = className.split(/\\s+/);\n\t }\n\t var attributes = ['type', 'name', 'title', 'alt'];\n\t out.attributes = [];\n\t for (i = 0; i < attributes.length; i++) {\n\t key = attributes[i];\n\t attr = elem.getAttribute(key);\n\t if (attr) {\n\t out.attributes.push({key: key, value: attr});\n\t }\n\t }\n\t return out;\n\t}\n\t\n\tmodule.exports = {\n\t describeElement: describeElement,\n\t descriptionToString: descriptionToString,\n\t elementArrayToString: elementArrayToString,\n\t treeToArray: treeToArray,\n\t getElementFromEvent: getElementFromEvent,\n\t isDescribedElement: isDescribedElement,\n\t getElementType: getElementType\n\t};\n\n\n/***/ })\n/******/ ])});;\n\n\n// WEBPACK FOOTER //\n// rollbar.named-amd.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 28670ddef9ef6c71006b","'use strict';\n\nvar rollbar = require('../rollbar');\n\nvar options = (typeof window !== 'undefined') && window._rollbarConfig;\nvar alias = options && options.globalAlias || 'Rollbar';\nvar shimRunning = (typeof window !== 'undefined') && window[alias] && typeof window[alias].shimId === 'function' && window[alias].shimId() !== undefined;\n\nif ((typeof window !== 'undefined') && !window._rollbarStartTime) {\n window._rollbarStartTime = (new Date()).getTime();\n}\n\nif (!shimRunning && options) {\n var Rollbar = new rollbar(options);\n window[alias] = Rollbar;\n} else if (typeof window !== 'undefined') {\n window.rollbar = rollbar;\n window._rollbarDidLoad = true;\n} else if (typeof self !== 'undefined') {\n self.rollbar = rollbar;\n self._rollbarDidLoad = true;\n}\n\nmodule.exports = rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/bundles/rollbar.js\n// module id = 1\n// module chunks = 0","'use strict';\n\nvar Client = require('../rollbar');\nvar _ = require('../utility');\nvar API = require('../api');\nvar logger = require('./logger');\nvar globals = require('./globalSetup');\n\nvar transport = require('./transport');\nvar urllib = require('./url');\n\nvar transforms = require('./transforms');\nvar sharedTransforms = require('../transforms');\nvar predicates = require('./predicates');\nvar sharedPredicates = require('../predicates');\nvar errorParser = require('./errorParser');\nvar Instrumenter = require('./telemetry');\n\nfunction Rollbar(options, client) {\n this.options = _.extend({}, defaultOptions, options);\n var api = new API(this.options, transport, urllib);\n this.client = client || new Client(this.options, api, logger, 'browser');\n\n var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n var gDocument = (typeof document != 'undefined') && document;\n addTransformsToNotifier(this.client.notifier);\n addPredicatesToQueue(this.client.queue);\n if (this.options.captureUncaught || this.options.handleUncaughtExceptions) {\n globals.captureUncaughtExceptions(gWindow, this);\n globals.wrapGlobals(gWindow, this);\n }\n if (this.options.captureUnhandledRejections || this.options.handleUnhandledRejections) {\n globals.captureUnhandledRejections(gWindow, this);\n }\n\n this.instrumenter = new Instrumenter(this.options, this.client.telemeter, this, gWindow, gDocument);\n this.instrumenter.instrument();\n}\n\nvar _instance = null;\nRollbar.init = function(options, client) {\n if (_instance) {\n return _instance.global(options).configure(options);\n }\n _instance = new Rollbar(options, client);\n return _instance;\n};\n\nfunction handleUninitialized(maybeCallback) {\n var message = 'Rollbar is not initialized';\n logger.error(message);\n if (maybeCallback) {\n maybeCallback(new Error(message));\n }\n}\n\nRollbar.prototype.global = function(options) {\n this.client.global(options);\n return this;\n};\nRollbar.global = function(options) {\n if (_instance) {\n return _instance.global(options);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.extend({}, oldOptions, options, payload);\n this.client.configure(options, payloadData);\n this.instrumenter.configure(options);\n return this;\n};\nRollbar.configure = function(options, payloadData) {\n if (_instance) {\n return _instance.configure(options, payloadData);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.lastError = function() {\n return this.client.lastError;\n};\nRollbar.lastError = function() {\n if (_instance) {\n return _instance.lastError();\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.log = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.log(item);\n return {uuid: uuid};\n};\nRollbar.log = function() {\n if (_instance) {\n return _instance.log.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.debug = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.debug(item);\n return {uuid: uuid};\n};\nRollbar.debug = function() {\n if (_instance) {\n return _instance.debug.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.info = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.info(item);\n return {uuid: uuid};\n};\nRollbar.info = function() {\n if (_instance) {\n return _instance.info.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warn = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warn(item);\n return {uuid: uuid};\n};\nRollbar.warn = function() {\n if (_instance) {\n return _instance.warn.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warning = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warning(item);\n return {uuid: uuid};\n};\nRollbar.warning = function() {\n if (_instance) {\n return _instance.warning.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.error = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.error(item);\n return {uuid: uuid};\n};\nRollbar.error = function() {\n if (_instance) {\n return _instance.error.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.critical = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.critical(item);\n return {uuid: uuid};\n};\nRollbar.critical = function() {\n if (_instance) {\n return _instance.critical.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.handleUncaughtException = function(message, url, lineno, colno, error, context) {\n var item;\n var stackInfo = _.makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n 'onerror',\n 'uncaught exception',\n errorParser\n );\n if (_.isError(error)) {\n item = this._createItem([message, error, context]);\n item._unhandledStackInfo = stackInfo;\n } else if (_.isError(url)) {\n item = this._createItem([message, url, context]);\n item._unhandledStackInfo = stackInfo;\n } else {\n item = this._createItem([message, context]);\n item.stackInfo = stackInfo;\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n this.client.log(item);\n};\n\nRollbar.prototype.handleUnhandledRejection = function(reason, promise) {\n var message = 'unhandled rejection was null or undefined!';\n message = reason ? (reason.message || String(reason)) : message;\n var context = (reason && reason._rollbarContext) || (promise && promise._rollbarContext);\n\n var item;\n if (_.isError(reason)) {\n item = this._createItem([message, reason, context]);\n } else {\n item = this._createItem([message, reason, context]);\n item.stackInfo = _.makeUnhandledStackInfo(\n message,\n '',\n 0,\n 0,\n null,\n 'unhandledrejection',\n '',\n errorParser\n );\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n item._originalArgs = item._originalArgs || [];\n item._originalArgs.push(promise);\n this.client.log(item);\n};\n\nRollbar.prototype.wrap = function(f, context, _before) {\n try {\n var ctxFn;\n if(_.isFunction(context)) {\n ctxFn = context;\n } else {\n ctxFn = function() { return context || {}; };\n }\n\n if (!_.isFunction(f)) {\n return f;\n }\n\n if (f._isWrap) {\n return f;\n }\n\n if (!f._rollbar_wrapped) {\n f._rollbar_wrapped = function () {\n if (_before && _.isFunction(_before)) {\n _before.apply(this, arguments);\n }\n try {\n return f.apply(this, arguments);\n } catch(exc) {\n var e = exc;\n if (e) {\n if (_.isType(e, 'string')) {\n e = new String(e);\n }\n e._rollbarContext = ctxFn() || {};\n e._rollbarContext._wrappedSource = f.toString();\n\n window._rollbarWrappedError = e;\n }\n throw e;\n }\n };\n\n f._rollbar_wrapped._isWrap = true;\n\n if (f.hasOwnProperty) {\n for (var prop in f) {\n if (f.hasOwnProperty(prop)) {\n f._rollbar_wrapped[prop] = f[prop];\n }\n }\n }\n }\n\n return f._rollbar_wrapped;\n } catch (e) {\n // Return the original function if the wrap fails.\n return f;\n }\n};\nRollbar.wrap = function(f, context) {\n if (_instance) {\n return _instance.wrap(f, context);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.captureEvent = function(metadata, level) {\n return this.client.captureEvent(metadata, level);\n};\nRollbar.captureEvent = function(metadata, level) {\n if (_instance) {\n return _instance.captureEvent(metadata, level);\n } else {\n handleUninitialized();\n }\n};\n\n// The following two methods are used internally and are not meant for public use\nRollbar.prototype.captureDomContentLoaded = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureLoad(ts);\n};\n\n/* Internal */\n\nfunction addTransformsToNotifier(notifier) {\n notifier\n .addTransform(transforms.handleItemWithError)\n .addTransform(transforms.ensureItemHasSomethingToSay)\n .addTransform(transforms.addBaseInfo)\n .addTransform(transforms.addRequestInfo(window))\n .addTransform(transforms.addClientInfo(window))\n .addTransform(transforms.addPluginInfo(window))\n .addTransform(transforms.addBody)\n .addTransform(sharedTransforms.addMessageWithError)\n .addTransform(sharedTransforms.addTelemetryData)\n .addTransform(sharedTransforms.addConfigToPayload)\n .addTransform(transforms.scrubPayload)\n .addTransform(sharedTransforms.userTransform(logger))\n .addTransform(sharedTransforms.itemToPayload);\n}\n\nfunction addPredicatesToQueue(queue) {\n queue\n .addPredicate(sharedPredicates.checkLevel)\n .addPredicate(predicates.checkIgnore)\n .addPredicate(sharedPredicates.userCheckIgnore(logger))\n .addPredicate(sharedPredicates.urlIsNotBlacklisted(logger))\n .addPredicate(sharedPredicates.urlIsWhitelisted(logger))\n .addPredicate(sharedPredicates.messageIsIgnored(logger));\n}\n\nRollbar.prototype._createItem = function(args) {\n return _.createItem(args, logger, this);\n};\n\nfunction _getFirstFunction(args) {\n for (var i = 0, len = args.length; i < len; ++i) {\n if (_.isFunction(args[i])) {\n return args[i];\n }\n }\n return undefined;\n}\n\n/* global __NOTIFIER_VERSION__:false */\n/* global __DEFAULT_BROWSER_SCRUB_FIELDS__:false */\n/* global __DEFAULT_LOG_LEVEL__:false */\n/* global __DEFAULT_REPORT_LEVEL__:false */\n/* global __DEFAULT_UNCAUGHT_ERROR_LEVEL:false */\n/* global __DEFAULT_ENDPOINT__:false */\n\nvar defaultOptions = {\n version: __NOTIFIER_VERSION__,\n scrubFields: __DEFAULT_BROWSER_SCRUB_FIELDS__,\n logLevel: __DEFAULT_LOG_LEVEL__,\n reportLevel: __DEFAULT_REPORT_LEVEL__,\n uncaughtErrorLevel: __DEFAULT_UNCAUGHT_ERROR_LEVEL,\n endpoint: __DEFAULT_ENDPOINT__,\n verbose: false,\n enabled: true,\n sendConfig: false,\n includeItemsInTelemetry: true,\n captureIp: true\n};\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/rollbar.js\n// module id = 2\n// module chunks = 0","'use strict';\n\nvar RateLimiter = require('./rateLimiter');\nvar Queue = require('./queue');\nvar Notifier = require('./notifier');\nvar Telemeter = require('./telemetry');\nvar _ = require('./utility');\n\n/*\n * Rollbar - the interface to Rollbar\n *\n * @param options\n * @param api\n * @param logger\n */\nfunction Rollbar(options, api, logger, platform) {\n this.options = _.extend(true, {}, options);\n this.logger = logger;\n Rollbar.rateLimiter.configureGlobal(this.options);\n Rollbar.rateLimiter.setPlatformOptions(platform, this.options);\n this.queue = new Queue(Rollbar.rateLimiter, api, logger, this.options);\n this.notifier = new Notifier(this.queue, this.options);\n this.telemeter = new Telemeter(this.options);\n this.lastError = null;\n}\n\nvar defaultOptions = {\n maxItems: 0,\n itemsPerMinute: 60\n};\n\nRollbar.rateLimiter = new RateLimiter(defaultOptions);\n\nRollbar.prototype.global = function(options) {\n Rollbar.rateLimiter.configureGlobal(options);\n return this;\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n this.notifier && this.notifier.configure(options);\n this.telemeter && this.telemeter.configure(options);\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.extend(true, {}, oldOptions, options, payload);\n this.global(this.options);\n return this;\n};\n\nRollbar.prototype.log = function(item) {\n var level = this._defaultLogLevel();\n return this._log(level, item);\n};\n\nRollbar.prototype.debug = function(item) {\n this._log('debug', item);\n};\n\nRollbar.prototype.info = function(item) {\n this._log('info', item);\n};\n\nRollbar.prototype.warn = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.warning = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.error = function(item) {\n this._log('error', item);\n};\n\nRollbar.prototype.critical = function(item) {\n this._log('critical', item);\n};\n\nRollbar.prototype.wait = function(callback) {\n this.queue.wait(callback);\n};\n\nRollbar.prototype.captureEvent = function(metadata, level) {\n return this.telemeter.captureEvent(metadata, level);\n};\n\nRollbar.prototype.captureDomContentLoaded = function(ts) {\n return this.telemeter.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(ts) {\n return this.telemeter.captureLoad(ts);\n};\n\n/* Internal */\n\nRollbar.prototype._log = function(defaultLevel, item) {\n if (this._sameAsLastError(item)) {\n if (item.callback) {\n item.callback();\n }\n return;\n }\n try {\n var callback = null;\n if (item.callback) {\n callback = item.callback;\n delete item.callback;\n }\n item.level = item.level || defaultLevel;\n this.telemeter._captureRollbarItem(item);\n item.telemetryEvents = this.telemeter.copyEvents();\n this.notifier.log(item, callback);\n } catch (e) {\n this.logger.error(e)\n }\n};\n\nRollbar.prototype._defaultLogLevel = function() {\n return this.options.logLevel || 'debug';\n};\n\nRollbar.prototype._sameAsLastError = function(item) {\n if (this.lastError && this.lastError === item.err) {\n return true;\n }\n this.lastError = item.err;\n return false;\n};\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rollbar.js\n// module id = 3\n// module chunks = 0","'use strict';\n\n/*\n * RateLimiter - an object that encapsulates the logic for counting items sent to Rollbar\n *\n * @param options - the same options that are accepted by configureGlobal offered as a convenience\n */\nfunction RateLimiter(options) {\n this.startTime = (new Date()).getTime();\n this.counter = 0;\n this.perMinCounter = 0;\n this.platform = null;\n this.platformOptions = {};\n this.configureGlobal(options);\n}\n\nRateLimiter.globalSettings = {\n startTime: (new Date()).getTime(),\n maxItems: undefined,\n itemsPerMinute: undefined\n};\n\n/*\n * configureGlobal - set the global rate limiter options\n *\n * @param options - Only the following values are recognized:\n * startTime: a timestamp of the form returned by (new Date()).getTime()\n * maxItems: the maximum items\n * itemsPerMinute: the max number of items to send in a given minute\n */\nRateLimiter.prototype.configureGlobal = function(options) {\n if (options.startTime !== undefined) {\n RateLimiter.globalSettings.startTime = options.startTime;\n }\n if (options.maxItems !== undefined) {\n RateLimiter.globalSettings.maxItems = options.maxItems;\n }\n if (options.itemsPerMinute !== undefined) {\n RateLimiter.globalSettings.itemsPerMinute = options.itemsPerMinute;\n }\n};\n\n/*\n * shouldSend - determine if we should send a given item based on rate limit settings\n *\n * @param item - the item we are about to send\n * @returns An object with the following structure:\n * error: (Error|null)\n * shouldSend: bool\n * payload: (Object|null)\n * If shouldSend is false, the item passed as a parameter should not be sent to Rollbar, and\n * exactly one of error or payload will be non-null. If error is non-null, the returned Error will\n * describe the situation, but it means that we were already over a rate limit (either globally or\n * per minute) when this item was checked. If error is null, and therefore payload is non-null, it\n * means this item put us over the global rate limit and the payload should be sent to Rollbar in\n * place of the passed in item.\n */\nRateLimiter.prototype.shouldSend = function(item, now) {\n now = now || (new Date()).getTime();\n if (now - this.startTime >= 60000) {\n this.startTime = now;\n this.perMinCounter = 0;\n }\n\n var globalRateLimit = RateLimiter.globalSettings.maxItems;\n var globalRateLimitPerMin = RateLimiter.globalSettings.itemsPerMinute;\n\n if (checkRate(item, globalRateLimit, this.counter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimit + ' max items reached', false);\n } else if (checkRate(item, globalRateLimitPerMin, this.perMinCounter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimitPerMin + ' items per minute reached', false);\n }\n this.counter++;\n this.perMinCounter++;\n\n var shouldSend = !checkRate(item, globalRateLimit, this.counter);\n var perMinute = shouldSend;\n shouldSend = shouldSend && !checkRate(item, globalRateLimitPerMin, this.perMinCounter);\n return shouldSendValue(this.platform, this.platformOptions, null, shouldSend, globalRateLimit, globalRateLimitPerMin, perMinute);\n};\n\nRateLimiter.prototype.setPlatformOptions = function(platform, options) {\n this.platform = platform;\n this.platformOptions = options;\n};\n\n/* Helpers */\n\nfunction checkRate(item, limit, counter) {\n return !item.ignoreRateLimit && limit >= 1 && counter > limit;\n}\n\nfunction shouldSendValue(platform, options, error, shouldSend, globalRateLimit, limitPerMin, perMinute) {\n var payload = null;\n if (error) {\n error = new Error(error);\n }\n if (!error && !shouldSend) {\n payload = rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute);\n }\n return {error: error, shouldSend: shouldSend, payload: payload};\n}\n\nfunction rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute) {\n var environment = options.environment || (options.payload && options.payload.environment);\n var msg;\n if (perMinute) {\n msg = 'item per minute limit reached, ignoring errors until timeout';\n } else {\n msg = 'maxItems has been hit, ignoring errors until reset.';\n }\n var item = {\n body: {\n message: {\n body: msg,\n extra: {\n maxItems: globalRateLimit,\n itemsPerMinute: limitPerMin\n }\n }\n },\n language: 'javascript',\n environment: environment,\n notifier: {\n version: (options.notifier && options.notifier.version) || options.version\n }\n };\n if (platform === 'browser') {\n item.platform = 'browser';\n item.framework = 'browser-js';\n item.notifier.name = 'rollbar-browser-js';\n } else if (platform === 'server') {\n item.framework = options.framework || 'node-js';\n item.notifier.name = options.notifier.name;\n } else if (platform === 'react-native') {\n item.framework = options.framework || 'react-native';\n item.notifier.name = options.notifier.name;\n }\n return item;\n}\n\nmodule.exports = RateLimiter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rateLimiter.js\n// module id = 4\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Queue - an object which handles which handles a queue of items to be sent to Rollbar.\n * This object handles rate limiting via a passed in rate limiter, retries based on connection\n * errors, and filtering of items based on a set of configurable predicates. The communication to\n * the backend is performed via a given API object.\n *\n * @param rateLimiter - An object which conforms to the interface\n * rateLimiter.shouldSend(item) -> bool\n * @param api - An object which conforms to the interface\n * api.postItem(payload, function(err, response))\n * @param logger - An object used to log verbose messages if desired\n * @param options - see Queue.prototype.configure\n */\nfunction Queue(rateLimiter, api, logger, options) {\n this.rateLimiter = rateLimiter;\n this.api = api;\n this.logger = logger;\n this.options = options;\n this.predicates = [];\n this.pendingItems = [];\n this.pendingRequests = [];\n this.retryQueue = [];\n this.retryHandle = null;\n this.waitCallback = null;\n this.waitIntervalID = null;\n}\n\n/*\n * configure - updates the options this queue uses\n *\n * @param options\n */\nQueue.prototype.configure = function(options) {\n this.api && this.api.configure(options);\n var oldOptions = this.options;\n this.options = _.extend(true, {}, oldOptions, options);\n return this;\n};\n\n/*\n * addPredicate - adds a predicate to the end of the list of predicates for this queue\n *\n * @param predicate - function(item, options) -> (bool|{err: Error})\n * Returning true means that this predicate passes and the item is okay to go on the queue\n * Returning false means do not add the item to the queue, but it is not an error\n * Returning {err: Error} means do not add the item to the queue, and the given error explains why\n * Returning {err: undefined} is equivalent to returning true but don't do that\n */\nQueue.prototype.addPredicate = function(predicate) {\n if (_.isFunction(predicate)) {\n this.predicates.push(predicate);\n }\n return this;\n};\n\nQueue.prototype.addPendingItem = function(item) {\n this.pendingItems.push(item);\n};\n\nQueue.prototype.removePendingItem = function(item) {\n var idx = this.pendingItems.indexOf(item);\n if (idx !== -1) {\n this.pendingItems.splice(idx, 1);\n }\n};\n\n/*\n * addItem - Send an item to the Rollbar API if all of the predicates are satisfied\n *\n * @param item - The payload to send to the backend\n * @param callback - function(error, repsonse) which will be called with the response from the API\n * in the case of a success, otherwise response will be null and error will have a value. If both\n * error and response are null then the item was stopped by a predicate which did not consider this\n * to be an error condition, but nonetheless did not send the item to the API.\n * @param originalError - The original error before any transformations that is to be logged if any\n */\nQueue.prototype.addItem = function(item, callback, originalError, originalItem) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() { return; };\n }\n var predicateResult = this._applyPredicates(item);\n if (predicateResult.stop) {\n this.removePendingItem(originalItem);\n callback(predicateResult.err);\n return;\n }\n this._maybeLog(item, originalError);\n this.removePendingItem(originalItem);\n this.pendingRequests.push(item);\n try {\n this._makeApiRequest(item, function(err, resp) {\n this._dequeuePendingRequest(item);\n callback(err, resp);\n }.bind(this));\n } catch (e) {\n this._dequeuePendingRequest(item);\n callback(e);\n }\n};\n\n/*\n * wait - Stop any further errors from being added to the queue, and get called back when all items\n * currently processing have finished sending to the backend.\n *\n * @param callback - function() called when all pending items have been sent\n */\nQueue.prototype.wait = function(callback) {\n if (!_.isFunction(callback)) {\n return;\n }\n this.waitCallback = callback;\n if (this._maybeCallWait()) {\n return;\n }\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitIntervalID = setInterval(function() {\n this._maybeCallWait();\n }.bind(this), 500);\n};\n\n/* _applyPredicates - Sequentially applies the predicates that have been added to the queue to the\n * given item with the currently configured options.\n *\n * @param item - An item in the queue\n * @returns {stop: bool, err: (Error|null)} - stop being true means do not add item to the queue,\n * the error value should be passed up to a callbak if we are stopping.\n */\nQueue.prototype._applyPredicates = function(item) {\n var p = null;\n for (var i = 0, len = this.predicates.length; i < len; i++) {\n p = this.predicates[i](item, this.options);\n if (!p || p.err !== undefined) {\n return {stop: true, err: p.err};\n }\n }\n return {stop: false, err: null};\n};\n\n/*\n * _makeApiRequest - Send an item to Rollbar, callback when done, if there is an error make an\n * effort to retry if we are configured to do so.\n *\n * @param item - an item ready to send to the backend\n * @param callback - function(err, response)\n */\nQueue.prototype._makeApiRequest = function(item, callback) {\n var rateLimitResponse = this.rateLimiter.shouldSend(item);\n if (rateLimitResponse.shouldSend) {\n this.api.postItem(item, function(err, resp) {\n if (err) {\n this._maybeRetry(err, item, callback);\n } else {\n callback(err, resp);\n }\n }.bind(this));\n } else if (rateLimitResponse.error) {\n callback(rateLimitResponse.error);\n } else {\n this.api.postItem(rateLimitResponse.payload, callback);\n }\n};\n\n// These are errors basically mean there is no internet connection\nvar RETRIABLE_ERRORS = ['ECONNRESET', 'ENOTFOUND', 'ESOCKETTIMEDOUT', 'ETIMEDOUT', 'ECONNREFUSED', 'EHOSTUNREACH', 'EPIPE', 'EAI_AGAIN'];\n\n/*\n * _maybeRetry - Given the error returned by the API, decide if we should retry or just callback\n * with the error.\n *\n * @param err - an error returned by the API transport\n * @param item - the item that was trying to be sent when this error occured\n * @param callback - function(err, response)\n */\nQueue.prototype._maybeRetry = function(err, item, callback) {\n var shouldRetry = false;\n if (this.options.retryInterval) {\n for (var i = 0, len = RETRIABLE_ERRORS.length; i < len; i++) {\n if (err.code === RETRIABLE_ERRORS[i]) {\n shouldRetry = true;\n break;\n }\n }\n }\n if (shouldRetry) {\n this._retryApiRequest(item, callback);\n } else {\n callback(err);\n }\n};\n\n/*\n * _retryApiRequest - Add an item and a callback to a queue and possibly start a timer to process\n * that queue based on the retryInterval in the options for this queue.\n *\n * @param item - an item that failed to send due to an error we deem retriable\n * @param callback - function(err, response)\n */\nQueue.prototype._retryApiRequest = function(item, callback) {\n this.retryQueue.push({item: item, callback: callback});\n\n if (!this.retryHandle) {\n this.retryHandle = setInterval(function() {\n while (this.retryQueue.length) {\n var retryObject = this.retryQueue.shift();\n this._makeApiRequest(retryObject.item, retryObject.callback);\n }\n }.bind(this), this.options.retryInterval);\n }\n};\n\n/*\n * _dequeuePendingRequest - Removes the item from the pending request queue, this queue is used to\n * enable to functionality of providing a callback that clients can pass to `wait` to be notified\n * when the pending request queue has been emptied. This must be called when the API finishes\n * processing this item. If a `wait` callback is configured, it is called by this function.\n *\n * @param item - the item previously added to the pending request queue\n */\nQueue.prototype._dequeuePendingRequest = function(item) {\n var idx = this.pendingRequests.indexOf(item);\n if (idx !== -1) {\n this.pendingRequests.splice(idx, 1);\n this._maybeCallWait();\n }\n};\n\nQueue.prototype._maybeLog = function(data, originalError) {\n if (this.logger && this.options.verbose) {\n var message = originalError;\n message = message || _.get(data, 'body.trace.exception.message');\n message = message || _.get(data, 'body.trace_chain.0.exception.message');\n if (message) {\n this.logger.error(message);\n return;\n }\n message = _.get(data, 'body.message.body');\n if (message) {\n this.logger.log(message);\n }\n }\n};\n\nQueue.prototype._maybeCallWait = function() {\n if (_.isFunction(this.waitCallback) && this.pendingItems.length === 0 && this.pendingRequests.length === 0) {\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitCallback();\n return true;\n }\n return false;\n};\n\nmodule.exports = Queue;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/queue.js\n// module id = 5\n// module chunks = 0","'use strict';\n\nvar extend = require('extend');\n\nvar RollbarJSON = {};\nvar __initRollbarJSON = false;\nfunction setupJSON() {\n if (__initRollbarJSON) {\n return;\n }\n __initRollbarJSON = true;\n\n if (isDefined(JSON)) {\n if (isNativeFunction(JSON.stringify)) {\n RollbarJSON.stringify = JSON.stringify;\n }\n if (isNativeFunction(JSON.parse)) {\n RollbarJSON.parse = JSON.parse;\n }\n }\n if (!isFunction(RollbarJSON.stringify) || !isFunction(RollbarJSON.parse)) {\n var setupCustomJSON = require('../vendor/JSON-js/json3.js');\n setupCustomJSON(RollbarJSON);\n }\n}\nsetupJSON();\n\n/*\n * isType - Given a Javascript value and a string, returns true if the type of the value matches the\n * given string.\n *\n * @param x - any value\n * @param t - a lowercase string containing one of the following type names:\n * - undefined\n * - null\n * - error\n * - number\n * - boolean\n * - string\n * - symbol\n * - function\n * - object\n * - array\n * @returns true if x is of type t, otherwise false\n */\nfunction isType(x, t) {\n return t === typeName(x);\n}\n\n/*\n * typeName - Given a Javascript value, returns the type of the object as a string\n */\nfunction typeName(x) {\n var name = typeof x;\n if (name !== 'object') {\n return name;\n }\n if (!x) {\n return 'null';\n }\n if (x instanceof Error) {\n return 'error';\n }\n return ({}).toString.call(x).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n}\n\n/* isFunction - a convenience function for checking if a value is a function\n *\n * @param f - any value\n * @returns true if f is a function, otherwise false\n */\nfunction isFunction(f) {\n return isType(f, 'function');\n}\n\n/* isNativeFunction - a convenience function for checking if a value is a native JS function\n *\n * @param f - any value\n * @returns true if f is a native JS function, otherwise false\n */\nfunction isNativeFunction(f) {\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n var funcMatchString = Function.prototype.toString.call(Object.prototype.hasOwnProperty)\n .replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?');\n var reIsNative = RegExp('^' + funcMatchString + '$');\n return isObject(f) && reIsNative.test(f);\n}\n\n/* isObject - Checks if the argument is an object\n *\n * @param value - any value\n * @returns true is value is an object function is an object)\n*/\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/*\n * isDefined - a convenience function for checking if a value is not equal to undefined\n *\n * @param u - any value\n * @returns true if u is anything other than undefined\n */\nfunction isDefined(u) {\n return !isType(u, 'undefined');\n}\n\n/*\n * isIterable - convenience function for checking if a value can be iterated, essentially\n * whether it is an object or an array.\n *\n * @param i - any value\n * @returns true if i is an object or an array as determined by `typeName`\n */\nfunction isIterable(i) {\n var type = typeName(i);\n return (type === 'object' || type === 'array');\n}\n\n/*\n * isError - convenience function for checking if a value is of an error type\n *\n * @param e - any value\n * @returns true if e is an error\n */\nfunction isError(e) {\n return isType(e, 'error');\n}\n\nfunction traverse(obj, func, seen) {\n var k, v, i;\n var isObj = isType(obj, 'object');\n var isArray = isType(obj, 'array');\n var keys = [];\n\n if (isObj && seen.indexOf(obj) !== -1) {\n return obj;\n }\n seen.push(obj);\n\n if (isObj) {\n for (k in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, k)) {\n keys.push(k);\n }\n }\n } else if (isArray) {\n for (i = 0; i < obj.length; ++i) {\n keys.push(i);\n }\n }\n\n var result = isObj ? {} : [];\n for (i = 0; i < keys.length; ++i) {\n k = keys[i];\n v = obj[k];\n result[k] = func(k, v, seen);\n }\n\n return (keys.length != 0) ? result : obj;\n}\n\nfunction redact() {\n return '********';\n}\n\n// from http://stackoverflow.com/a/8809472/1138191\nfunction uuid4() {\n var d = now();\n var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (d + Math.random() * 16) % 16 | 0;\n d = Math.floor(d / 16);\n return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16);\n });\n return uuid;\n}\n\nvar LEVELS = {\n debug: 0,\n info: 1,\n warning: 2,\n error: 3,\n critical: 4\n};\n\nfunction sanitizeUrl(url) {\n var baseUrlParts = parseUri(url);\n // remove a trailing # if there is no anchor\n if (baseUrlParts.anchor === '') {\n baseUrlParts.source = baseUrlParts.source.replace('#', '');\n }\n\n url = baseUrlParts.source.replace('?' + baseUrlParts.query, '');\n return url;\n}\n\nvar parseUriOptions = {\n strictMode: false,\n key: [\n 'source',\n 'protocol',\n 'authority',\n 'userInfo',\n 'user',\n 'password',\n 'host',\n 'port',\n 'relative',\n 'path',\n 'directory',\n 'file',\n 'query',\n 'anchor'\n ],\n q: {\n name: 'queryKey',\n parser: /(?:^|&)([^&=]*)=?([^&]*)/g\n },\n parser: {\n strict: /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,\n loose: /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/\n }\n};\n\nfunction parseUri(str) {\n if (!isType(str, 'string')) {\n throw new Error('received invalid input');\n }\n\n var o = parseUriOptions;\n var m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str);\n var uri = {};\n var i = o.key.length;\n\n while (i--) {\n uri[o.key[i]] = m[i] || '';\n }\n\n uri[o.q.name] = {};\n uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {\n if ($1) {\n uri[o.q.name][$1] = $2;\n }\n });\n\n return uri;\n}\n\nfunction addParamsAndAccessTokenToPath(accessToken, options, params) {\n params = params || {};\n params.access_token = accessToken;\n var paramsArray = [];\n var k;\n for (k in params) {\n if (Object.prototype.hasOwnProperty.call(params, k)) {\n paramsArray.push([k, params[k]].join('='));\n }\n }\n var query = '?' + paramsArray.sort().join('&');\n\n options = options || {};\n options.path = options.path || '';\n var qs = options.path.indexOf('?');\n var h = options.path.indexOf('#');\n var p;\n if (qs !== -1 && (h === -1 || h > qs)) {\n p = options.path;\n options.path = p.substring(0,qs) + query + '&' + p.substring(qs+1);\n } else {\n if (h !== -1) {\n p = options.path;\n options.path = p.substring(0,h) + query + p.substring(h);\n } else {\n options.path = options.path + query;\n }\n }\n}\n\nfunction formatUrl(u, protocol) {\n protocol = protocol || u.protocol;\n if (!protocol && u.port) {\n if (u.port === 80) {\n protocol = 'http:';\n } else if (u.port === 443) {\n protocol = 'https:';\n }\n }\n protocol = protocol || 'https:';\n\n if (!u.hostname) {\n return null;\n }\n var result = protocol + '//' + u.hostname;\n if (u.port) {\n result = result + ':' + u.port;\n }\n if (u.path) {\n result = result + u.path;\n }\n return result;\n}\n\nfunction stringify(obj, backup) {\n var value, error;\n try {\n value = RollbarJSON.stringify(obj);\n } catch (jsonError) {\n if (backup && isFunction(backup)) {\n try {\n value = backup(obj);\n } catch (backupError) {\n error = backupError;\n }\n } else {\n error = jsonError;\n }\n }\n return {error: error, value: value};\n}\n\nfunction jsonParse(s) {\n var value, error;\n try {\n value = RollbarJSON.parse(s);\n } catch (e) {\n error = e;\n }\n return {error: error, value: value};\n}\n\nfunction makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n mode,\n backupMessage,\n errorParser\n) {\n var location = {\n url: url || '',\n line: lineno,\n column: colno\n };\n location.func = errorParser.guessFunctionName(location.url, location.line);\n location.context = errorParser.gatherContext(location.url, location.line);\n var href = document && document.location && document.location.href;\n var useragent = window && window.navigator && window.navigator.userAgent;\n return {\n 'mode': mode,\n 'message': error ? String(error) : (message || backupMessage),\n 'url': href,\n 'stack': [location],\n 'useragent': useragent\n };\n}\n\nfunction wrapCallback(logger, f) {\n return function(err, resp) {\n try {\n f(err, resp);\n } catch (e) {\n logger.error(e);\n }\n };\n}\n\nfunction createItem(args, logger, notifier, requestKeys, lambdaContext) {\n var message, err, custom, callback, request;\n var arg;\n var extraArgs = [];\n\n for (var i = 0, l = args.length; i < l; ++i) {\n arg = args[i];\n\n var typ = typeName(arg);\n switch (typ) {\n case 'undefined':\n break;\n case 'string':\n message ? extraArgs.push(arg) : message = arg;\n break;\n case 'function':\n callback = wrapCallback(logger, arg);\n break;\n case 'date':\n extraArgs.push(arg);\n break;\n case 'error':\n case 'domexception':\n err ? extraArgs.push(arg) : err = arg;\n break;\n case 'object':\n case 'array':\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n if (requestKeys && typ === 'object' && !request) {\n for (var j = 0, len = requestKeys.length; j < len; ++j) {\n if (arg[requestKeys[j]] !== undefined) {\n request = arg;\n break;\n }\n }\n if (request) {\n break;\n }\n }\n custom ? extraArgs.push(arg) : custom = arg;\n break;\n default:\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n extraArgs.push(arg);\n }\n }\n\n if (extraArgs.length > 0) {\n // if custom is an array this turns it into an object with integer keys\n custom = extend(true, {}, custom);\n custom.extraArgs = extraArgs;\n }\n\n var item = {\n message: message,\n err: err,\n custom: custom,\n timestamp: now(),\n callback: callback,\n uuid: uuid4()\n };\n if (custom && custom.level !== undefined) {\n item.level = custom.level;\n delete custom.level;\n }\n if (requestKeys && request) {\n item.request = request;\n }\n if (lambdaContext) {\n item.lambdaContext = lambdaContext;\n }\n item._originalArgs = args;\n return item;\n}\n\n/*\n * get - given an obj/array and a keypath, return the value at that keypath or\n * undefined if not possible.\n *\n * @param obj - an object or array\n * @param path - a string of keys separated by '.' such as 'plugin.jquery.0.message'\n * which would correspond to 42 in `{plugin: {jquery: [{message: 42}]}}`\n */\nfunction get(obj, path) {\n if (!obj) {\n return undefined;\n }\n var keys = path.split('.');\n var result = obj;\n try {\n for (var i = 0, len = keys.length; i < len; ++i) {\n result = result[keys[i]];\n }\n } catch (e) {\n result = undefined;\n }\n return result;\n}\n\nfunction set(obj, path, value) {\n if (!obj) {\n return;\n }\n var keys = path.split('.');\n var len = keys.length;\n if (len < 1) {\n return;\n }\n if (len === 1) {\n obj[keys[0]] = value;\n return;\n }\n try {\n var temp = obj[keys[0]] || {};\n var replacement = temp;\n for (var i = 1; i < len-1; i++) {\n temp[keys[i]] = temp[keys[i]] || {};\n temp = temp[keys[i]];\n }\n temp[keys[len-1]] = value;\n obj[keys[0]] = replacement;\n } catch (e) {\n return;\n }\n}\n\nfunction scrub(data, scrubFields) {\n scrubFields = scrubFields || [];\n var paramRes = _getScrubFieldRegexs(scrubFields);\n var queryRes = _getScrubQueryParamRegexs(scrubFields);\n\n function redactQueryParam(dummy0, paramPart, dummy1, dummy2, dummy3, valPart) {\n return paramPart + redact(valPart);\n }\n\n function paramScrubber(v) {\n var i;\n if (isType(v, 'string')) {\n for (i = 0; i < queryRes.length; ++i) {\n v = v.replace(queryRes[i], redactQueryParam);\n }\n }\n return v;\n }\n\n function valScrubber(k, v) {\n var i;\n for (i = 0; i < paramRes.length; ++i) {\n if (paramRes[i].test(k)) {\n v = redact(v);\n break;\n }\n }\n return v;\n }\n\n function scrubber(k, v, seen) {\n var tmpV = valScrubber(k, v);\n if (tmpV === v) {\n if (isType(v, 'object') || isType(v, 'array')) {\n return traverse(v, scrubber, seen);\n }\n return paramScrubber(tmpV);\n } else {\n return tmpV;\n }\n }\n\n return traverse(data, scrubber, []);\n}\n\nfunction _getScrubFieldRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '^\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?$';\n ret.push(new RegExp(pat, 'i'));\n }\n return ret;\n}\n\n\nfunction _getScrubQueryParamRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?';\n ret.push(new RegExp('(' + pat + '=)([^&\\\\n]+)', 'igm'));\n }\n return ret;\n}\n\nfunction formatArgsAsString(args) {\n var i, len, arg;\n var result = [];\n for (i = 0, len = args.length; i < len; i++) {\n arg = args[i];\n if (typeof arg === 'object') {\n arg = stringify(arg);\n arg = arg.error || arg.value;\n if (arg.length > 500)\n arg = arg.substr(0,500)+'...';\n } else if (typeof arg === 'undefined') {\n arg = 'undefined';\n }\n result.push(arg);\n }\n return result.join(' ');\n}\n\nfunction now() {\n if (Date.now) {\n return +Date.now();\n }\n return +new Date();\n}\n\nfunction filterIp(requestData, captureIp) {\n if (!requestData || !requestData['user_ip'] || captureIp === true) {\n return;\n }\n var newIp = requestData['user_ip'];\n if (!captureIp) {\n newIp = null;\n } else {\n try {\n var parts;\n if (newIp.indexOf('.') !== -1) {\n parts = newIp.split('.');\n parts.pop();\n parts.push('0');\n newIp = parts.join('.');\n } else if (newIp.indexOf(':') !== -1) {\n parts = newIp.split(':');\n if (parts.length > 2) {\n var beginning = parts.slice(0, 3);\n var slashIdx = beginning[2].indexOf('/');\n if (slashIdx !== -1) {\n beginning[2] = beginning[2].substring(0, slashIdx);\n }\n var terminal = '0000:0000:0000:0000:0000';\n newIp = beginning.concat(terminal).join(':');\n }\n } else {\n newIp = null;\n }\n } catch (e) {\n newIp = null;\n }\n }\n requestData['user_ip'] = newIp;\n}\n\nmodule.exports = {\n isType: isType,\n typeName: typeName,\n isFunction: isFunction,\n isNativeFunction: isNativeFunction,\n isIterable: isIterable,\n isError: isError,\n extend: extend,\n traverse: traverse,\n redact: redact,\n uuid4: uuid4,\n LEVELS: LEVELS,\n sanitizeUrl: sanitizeUrl,\n addParamsAndAccessTokenToPath: addParamsAndAccessTokenToPath,\n formatUrl: formatUrl,\n stringify: stringify,\n jsonParse: jsonParse,\n makeUnhandledStackInfo: makeUnhandledStackInfo,\n createItem: createItem,\n get: get,\n set: set,\n scrub: scrub,\n formatArgsAsString: formatArgsAsString,\n now: now,\n filterIp: filterIp\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/utility.js\n// module id = 6\n// module chunks = 0","'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) {/**/}\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[0],\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t} else if ((typeof target !== 'object' && typeof target !== 'function') || target == null) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = target[name];\n\t\t\t\tcopy = options[name];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\ttarget[name] = extend(deep, clone, copy);\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/extend/index.js\n// module id = 7\n// module chunks = 0","// json3.js\n// 2017-02-21\n// Public Domain.\n// NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n// See http://www.JSON.org/js.html\n// This code should be minified before deployment.\n// See http://javascript.crockford.com/jsmin.html\n\n// USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n// NOT CONTROL.\n\n// This file creates a global JSON object containing two methods: stringify\n// and parse. This file provides the ES5 JSON capability to ES3 systems.\n// If a project might run on IE8 or earlier, then this file should be included.\n// This file does nothing on ES5 systems.\n\n// JSON.stringify(value, replacer, space)\n// value any JavaScript value, usually an object or array.\n// replacer an optional parameter that determines how object\n// values are stringified for objects. It can be a\n// function or an array of strings.\n// space an optional parameter that specifies the indentation\n// of nested structures. If it is omitted, the text will\n// be packed without extra whitespace. If it is a number,\n// it will specify the number of spaces to indent at each\n// level. If it is a string (such as \"\\t\" or \" \"),\n// it contains the characters used to indent at each level.\n// This method produces a JSON text from a JavaScript value.\n// When an object value is found, if the object contains a toJSON\n// method, its toJSON method will be called and the result will be\n// stringified. A toJSON method does not serialize: it returns the\n// value represented by the name/value pair that should be serialized,\n// or undefined if nothing should be serialized. The toJSON method\n// will be passed the key associated with the value, and this will be\n// bound to the value.\n\n// For example, this would serialize Dates as ISO strings.\n\n// Date.prototype.toJSON = function (key) {\n// function f(n) {\n// // Format integers to have at least two digits.\n// return (n < 10)\n// ? \"0\" + n\n// : n;\n// }\n// return this.getUTCFullYear() + \"-\" +\n// f(this.getUTCMonth() + 1) + \"-\" +\n// f(this.getUTCDate()) + \"T\" +\n// f(this.getUTCHours()) + \":\" +\n// f(this.getUTCMinutes()) + \":\" +\n// f(this.getUTCSeconds()) + \"Z\";\n// };\n\n// You can provide an optional replacer method. It will be passed the\n// key and value of each member, with this bound to the containing\n// object. The value that is returned from your method will be\n// serialized. If your method returns undefined, then the member will\n// be excluded from the serialization.\n\n// If the replacer parameter is an array of strings, then it will be\n// used to select the members to be serialized. It filters the results\n// such that only members with keys listed in the replacer array are\n// stringified.\n\n// Values that do not have JSON representations, such as undefined or\n// functions, will not be serialized. Such values in objects will be\n// dropped; in arrays they will be replaced with null. You can use\n// a replacer function to replace those with JSON values.\n\n// JSON.stringify(undefined) returns undefined.\n\n// The optional space parameter produces a stringification of the\n// value that is filled with line breaks and indentation to make it\n// easier to read.\n\n// If the space parameter is a non-empty string, then that string will\n// be used for indentation. If the space parameter is a number, then\n// the indentation will be that many spaces.\n\n// Example:\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}]);\n// // text is '[\"e\",{\"pluribus\":\"unum\"}]'\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}], null, \"\\t\");\n// // text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\n\n// text = JSON.stringify([new Date()], function (key, value) {\n// return this[key] instanceof Date\n// ? \"Date(\" + this[key] + \")\"\n// : value;\n// });\n// // text is '[\"Date(---current time---)\"]'\n\n// JSON.parse(text, reviver)\n// This method parses a JSON text to produce an object or array.\n// It can throw a SyntaxError exception.\n// This has been modified to use JSON-js/json_parse_state.js as the\n// parser instead of the one built around eval found in JSON-js/json2.js\n\n// The optional reviver parameter is a function that can filter and\n// transform the results. It receives each of the keys and values,\n// and its return value is used instead of the original value.\n// If it returns what it received, then the structure is not modified.\n// If it returns undefined then the member is deleted.\n\n// Example:\n\n// // Parse the text. Values that look like ISO date strings will\n// // be converted to Date objects.\n\n// myData = JSON.parse(text, function (key, value) {\n// var a;\n// if (typeof value === \"string\") {\n// a =\n// /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n// if (a) {\n// return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n// +a[5], +a[6]));\n// }\n// }\n// return value;\n// });\n\n// myData = JSON.parse('[\"Date(09/09/2001)\"]', function (key, value) {\n// var d;\n// if (typeof value === \"string\" &&\n// value.slice(0, 5) === \"Date(\" &&\n// value.slice(-1) === \")\") {\n// d = new Date(value.slice(5, -1));\n// if (d) {\n// return d;\n// }\n// }\n// return value;\n// });\n\n// This is a reference implementation. You are free to copy, modify, or\n// redistribute.\n\n/*jslint\n for, this\n */\n\n/*property\n JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\n getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\n lastIndex, length, parse, prototype, push, replace, slice, stringify,\n test, toJSON, toString, valueOf\n */\n\nvar setupCustomJSON = function(JSON) {\n\n var rx_one = /^[\\],:{}\\s]*$/;\n var rx_two = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g;\n var rx_three = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\n var rx_four = /(?:^|:|,)(?:\\s*\\[)+/g;\n var rx_escapable = /[\\\\\"\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n var rx_dangerous = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\n function f(n) {\n // Format integers to have at least two digits.\n return n < 10\n ? \"0\" + n\n : n;\n }\n\n function this_value() {\n return this.valueOf();\n }\n\n if (typeof Date.prototype.toJSON !== \"function\") {\n\n Date.prototype.toJSON = function () {\n\n return isFinite(this.valueOf())\n ? this.getUTCFullYear() + \"-\" +\n f(this.getUTCMonth() + 1) + \"-\" +\n f(this.getUTCDate()) + \"T\" +\n f(this.getUTCHours()) + \":\" +\n f(this.getUTCMinutes()) + \":\" +\n f(this.getUTCSeconds()) + \"Z\"\n : null;\n };\n\n Boolean.prototype.toJSON = this_value;\n Number.prototype.toJSON = this_value;\n String.prototype.toJSON = this_value;\n }\n\n var gap;\n var indent;\n var meta;\n var rep;\n\n\n function quote(string) {\n\n // If the string contains no control characters, no quote characters, and no\n // backslash characters, then we can safely slap some quotes around it.\n // Otherwise we must also replace the offending characters with safe escape\n // sequences.\n\n rx_escapable.lastIndex = 0;\n return rx_escapable.test(string)\n ? \"\\\"\" + string.replace(rx_escapable, function (a) {\n var c = meta[a];\n return typeof c === \"string\"\n ? c\n : \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n }) + \"\\\"\"\n : \"\\\"\" + string + \"\\\"\";\n }\n\n\n function str(key, holder) {\n\n // Produce a string from holder[key].\n\n var i; // The loop counter.\n var k; // The member key.\n var v; // The member value.\n var length;\n var mind = gap;\n var partial;\n var value = holder[key];\n\n // If the value has a toJSON method, call it to obtain a replacement value.\n\n if (value && typeof value === \"object\" &&\n typeof value.toJSON === \"function\") {\n value = value.toJSON(key);\n }\n\n // If we were called with a replacer function, then call the replacer to\n // obtain a replacement value.\n\n if (typeof rep === \"function\") {\n value = rep.call(holder, key, value);\n }\n\n // What happens next depends on the value's type.\n\n switch (typeof value) {\n case \"string\":\n return quote(value);\n\n case \"number\":\n\n // JSON numbers must be finite. Encode non-finite numbers as null.\n\n return isFinite(value)\n ? String(value)\n : \"null\";\n\n case \"boolean\":\n case \"null\":\n\n // If the value is a boolean or null, convert it to a string. Note:\n // typeof null does not produce \"null\". The case is included here in\n // the remote chance that this gets fixed someday.\n\n return String(value);\n\n // If the type is \"object\", we might be dealing with an object or an array or\n // null.\n\n case \"object\":\n\n // Due to a specification blunder in ECMAScript, typeof null is \"object\",\n // so watch out for that case.\n\n if (!value) {\n return \"null\";\n }\n\n // Make an array to hold the partial results of stringifying this object value.\n\n gap += indent;\n partial = [];\n\n // Is the value an array?\n\n if (Object.prototype.toString.apply(value) === \"[object Array]\") {\n\n // The value is an array. Stringify every element. Use null as a placeholder\n // for non-JSON values.\n\n length = value.length;\n for (i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || \"null\";\n }\n\n // Join all of the elements together, separated with commas, and wrap them in\n // brackets.\n\n v = partial.length === 0\n ? \"[]\"\n : gap\n ? \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\"\n : \"[\" + partial.join(\",\") + \"]\";\n gap = mind;\n return v;\n }\n\n // If the replacer is an array, use it to select the members to be stringified.\n\n if (rep && typeof rep === \"object\") {\n length = rep.length;\n for (i = 0; i < length; i += 1) {\n if (typeof rep[i] === \"string\") {\n k = rep[i];\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n } else {\n\n // Otherwise, iterate through all of the keys in the object.\n\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n }\n\n // Join all of the member texts together, separated with commas,\n // and wrap them in braces.\n\n v = partial.length === 0\n ? \"{}\"\n : gap\n ? \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\"\n : \"{\" + partial.join(\",\") + \"}\";\n gap = mind;\n return v;\n }\n }\n\n // If the JSON object does not yet have a stringify method, give it one.\n\n if (typeof JSON.stringify !== \"function\") {\n meta = { // table of character substitutions\n \"\\b\": \"\\\\b\",\n \"\\t\": \"\\\\t\",\n \"\\n\": \"\\\\n\",\n \"\\f\": \"\\\\f\",\n \"\\r\": \"\\\\r\",\n \"\\\"\": \"\\\\\\\"\",\n \"\\\\\": \"\\\\\\\\\"\n };\n JSON.stringify = function (value, replacer, space) {\n\n // The stringify method takes a value and an optional replacer, and an optional\n // space parameter, and returns a JSON text. The replacer can be a function\n // that can replace values, or an array of strings that will select the keys.\n // A default replacer method can be provided. Use of the space parameter can\n // produce text that is more easily readable.\n\n var i;\n gap = \"\";\n indent = \"\";\n\n // If the space parameter is a number, make an indent string containing that\n // many spaces.\n\n if (typeof space === \"number\") {\n for (i = 0; i < space; i += 1) {\n indent += \" \";\n }\n\n // If the space parameter is a string, it will be used as the indent string.\n\n } else if (typeof space === \"string\") {\n indent = space;\n }\n\n // If there is a replacer, it must be a function or an array.\n // Otherwise, throw an error.\n\n rep = replacer;\n if (replacer && typeof replacer !== \"function\" &&\n (typeof replacer !== \"object\" ||\n typeof replacer.length !== \"number\")) {\n throw new Error(\"JSON.stringify\");\n }\n\n // Make a fake root object containing our value under the key of \"\".\n // Return the result of stringifying the value.\n\n return str(\"\", {\"\": value});\n };\n }\n\n\n // If the JSON object does not yet have a parse method, give it one.\n\n if (typeof JSON.parse !== \"function\") {\n JSON.parse = (function () {\n\n // This function creates a JSON parse function that uses a state machine rather\n // than the dangerous eval function to parse a JSON text.\n\n var state; // The state of the parser, one of\n // 'go' The starting state\n // 'ok' The final, accepting state\n // 'firstokey' Ready for the first key of the object or\n // the closing of an empty object\n // 'okey' Ready for the next key of the object\n // 'colon' Ready for the colon\n // 'ovalue' Ready for the value half of a key/value pair\n // 'ocomma' Ready for a comma or closing }\n // 'firstavalue' Ready for the first value of an array or\n // an empty array\n // 'avalue' Ready for the next value of an array\n // 'acomma' Ready for a comma or closing ]\n var stack; // The stack, for controlling nesting.\n var container; // The current container object or array\n var key; // The current key\n var value; // The current value\n var escapes = { // Escapement translation table\n \"\\\\\": \"\\\\\",\n \"\\\"\": \"\\\"\",\n \"/\": \"/\",\n \"t\": \"\\t\",\n \"n\": \"\\n\",\n \"r\": \"\\r\",\n \"f\": \"\\f\",\n \"b\": \"\\b\"\n };\n var string = { // The actions for string tokens\n go: function () {\n state = \"ok\";\n },\n firstokey: function () {\n key = value;\n state = \"colon\";\n },\n okey: function () {\n key = value;\n state = \"colon\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var number = { // The actions for number tokens\n go: function () {\n state = \"ok\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var action = {\n\n // The action table describes the behavior of the machine. It contains an\n // object for each token. Each object contains a method that is called when\n // a token is matched in a state. An object will lack a method for illegal\n // states.\n\n \"{\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = {};\n state = \"firstokey\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = {};\n state = \"firstokey\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n }\n },\n \"}\": {\n firstokey: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n ocomma: function () {\n var pop = stack.pop();\n container[key] = value;\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \"[\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = [];\n state = \"firstavalue\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = [];\n state = \"firstavalue\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n }\n },\n \"]\": {\n firstavalue: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n acomma: function () {\n var pop = stack.pop();\n container.push(value);\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \":\": {\n colon: function () {\n if (Object.hasOwnProperty.call(container, key)) {\n throw new SyntaxError(\"Duplicate key '\" + key + \"\\\"\");\n }\n state = \"ovalue\";\n }\n },\n \",\": {\n ocomma: function () {\n container[key] = value;\n state = \"okey\";\n },\n acomma: function () {\n container.push(value);\n state = \"avalue\";\n }\n },\n \"true\": {\n go: function () {\n value = true;\n state = \"ok\";\n },\n ovalue: function () {\n value = true;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = true;\n state = \"acomma\";\n },\n avalue: function () {\n value = true;\n state = \"acomma\";\n }\n },\n \"false\": {\n go: function () {\n value = false;\n state = \"ok\";\n },\n ovalue: function () {\n value = false;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = false;\n state = \"acomma\";\n },\n avalue: function () {\n value = false;\n state = \"acomma\";\n }\n },\n \"null\": {\n go: function () {\n value = null;\n state = \"ok\";\n },\n ovalue: function () {\n value = null;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = null;\n state = \"acomma\";\n },\n avalue: function () {\n value = null;\n state = \"acomma\";\n }\n }\n };\n\n function debackslashify(text) {\n\n // Remove and replace any backslash escapement.\n\n return text.replace(/\\\\(?:u(.{4})|([^u]))/g, function (ignore, b, c) {\n return b\n ? String.fromCharCode(parseInt(b, 16))\n : escapes[c];\n });\n }\n\n return function (source, reviver) {\n\n // A regular expression is used to extract tokens from the JSON text.\n // The extraction process is cautious.\n\n var result;\n var tx = /^[\\u0020\\t\\n\\r]*(?:([,:\\[\\]{}]|true|false|null)|(-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)|\"((?:[^\\r\\n\\t\\\\\\\"]|\\\\(?:[\"\\\\\\/trnfb]|u[0-9a-fA-F]{4}))*)\")/;\n\n // Set the starting state.\n\n state = \"go\";\n\n // The stack records the container, key, and state for each object or array\n // that contains another object or array while processing nested structures.\n\n stack = [];\n\n // If any error occurs, we will catch it and ultimately throw a syntax error.\n\n try {\n\n // For each token...\n\n while (true) {\n result = tx.exec(source);\n if (!result) {\n break;\n }\n\n // result is the result array from matching the tokenizing regular expression.\n // result[0] contains everything that matched, including any initial whitespace.\n // result[1] contains any punctuation that was matched, or true, false, or null.\n // result[2] contains a matched number, still in string form.\n // result[3] contains a matched string, without quotes but with escapement.\n\n if (result[1]) {\n\n // Token: Execute the action for this state and token.\n\n action[result[1]][state]();\n\n } else if (result[2]) {\n\n // Number token: Convert the number string into a number value and execute\n // the action for this state and number.\n\n value = +result[2];\n number[state]();\n } else {\n\n // String token: Replace the escapement sequences and execute the action for\n // this state and string.\n\n value = debackslashify(result[3]);\n string[state]();\n }\n\n // Remove the token from the string. The loop will continue as long as there\n // are tokens. This is a slow process, but it allows the use of ^ matching,\n // which assures that no illegal tokens slip through.\n\n source = source.slice(result[0].length);\n }\n\n // If we find a state/token combination that is illegal, then the action will\n // cause an error. We handle the error by simply changing the state.\n\n } catch (e) {\n state = e;\n }\n\n // The parsing is finished. If we are not in the final \"ok\" state, or if the\n // remaining source contains anything except whitespace, then we did not have\n //a well-formed JSON text.\n\n if (state !== \"ok\" || (/[^\\u0020\\t\\n\\r]/.test(source))) {\n throw (state instanceof SyntaxError)\n ? state\n : new SyntaxError(\"JSON\");\n }\n\n // If there is a reviver function, we recursively walk the new structure,\n // passing each name/value pair to the reviver function for possible\n // transformation, starting with a temporary root object that holds the current\n // value in an empty key. If there is not a reviver function, we simply return\n // that value.\n\n return (typeof reviver === \"function\")\n ? (function walk(holder, key) {\n var k;\n var v;\n var val = holder[key];\n if (val && typeof val === \"object\") {\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(val, k)) {\n v = walk(val, k);\n if (v !== undefined) {\n val[k] = v;\n } else {\n delete val[k];\n }\n }\n }\n }\n return reviver.call(holder, key, val);\n }({\"\": value}, \"\"))\n : value;\n };\n }());\n }\n}\n\nmodule.exports = setupCustomJSON;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./vendor/JSON-js/json3.js\n// module id = 8\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Notifier - the internal object responsible for delegating between the client exposed API, the\n * chain of transforms necessary to turn an item into something that can be sent to Rollbar, and the\n * queue which handles the communcation with the Rollbar API servers.\n *\n * @param queue - an object that conforms to the interface: addItem(item, callback)\n * @param options - an object representing the options to be set for this notifier, this should have\n * any defaults already set by the caller\n */\nfunction Notifier(queue, options) {\n this.queue = queue;\n this.options = options;\n this.transforms = [];\n}\n\n/*\n * configure - updates the options for this notifier with the passed in object\n *\n * @param options - an object which gets merged with the current options set on this notifier\n * @returns this\n */\nNotifier.prototype.configure = function(options) {\n this.queue && this.queue.configure(options);\n var oldOptions = this.options;\n this.options = _.extend({}, oldOptions, options);\n return this;\n};\n\n/*\n * addTransform - adds a transform onto the end of the queue of transforms for this notifier\n *\n * @param transform - a function which takes three arguments:\n * * item: An Object representing the data to eventually be sent to Rollbar\n * * options: The current value of the options for this notifier\n * * callback: function(err: (Null|Error), item: (Null|Object)) the transform must call this\n * callback with a null value for error if it wants the processing chain to continue, otherwise\n * with an error to terminate the processing. The item should be the updated item after this\n * transform is finished modifying it.\n */\nNotifier.prototype.addTransform = function(transform) {\n if (_.isFunction(transform)) {\n this.transforms.push(transform);\n }\n return this;\n};\n\n/*\n * log - the internal log function which applies the configured transforms and then pushes onto the\n * queue to be sent to the backend.\n *\n * @param item - An object with the following structure:\n * message [String] - An optional string to be sent to rollbar\n * error [Error] - An optional error\n *\n * @param callback - A function of type function(err, resp) which will be called with exactly one\n * null argument and one non-null argument. The callback will be called once, either during the\n * transform stage if an error occurs inside a transform, or in response to the communication with\n * the backend. The second argument will be the response from the backend in case of success.\n */\nNotifier.prototype.log = function(item, callback) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!this.options.enabled) {\n return callback(new Error('Rollbar is not enabled'));\n }\n\n this.queue.addPendingItem(item);\n var originalError = item.err;\n this._applyTransforms(item, function(err, i) {\n if (err) {\n this.queue.removePendingItem(item);\n return callback(err, null);\n }\n this.queue.addItem(i, callback, originalError, item);\n }.bind(this));\n};\n\n/* Internal */\n\n/*\n * _applyTransforms - Applies the transforms that have been added to this notifier sequentially. See\n * `addTransform` for more information.\n *\n * @param item - An item to be transformed\n * @param callback - A function of type function(err, item) which will be called with a non-null\n * error and a null item in the case of a transform failure, or a null error and non-null item after\n * all transforms have been applied.\n */\nNotifier.prototype._applyTransforms = function(item, callback) {\n var transformIndex = -1;\n var transformsLength = this.transforms.length;\n var transforms = this.transforms;\n var options = this.options;\n\n var cb = function(err, i) {\n if (err) {\n callback(err, null);\n return;\n }\n\n transformIndex++;\n\n if (transformIndex === transformsLength) {\n callback(null, i);\n return;\n }\n\n transforms[transformIndex](i, options, cb);\n };\n\n cb(null, item);\n};\n\nmodule.exports = Notifier;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/notifier.js\n// module id = 9\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nvar MAX_EVENTS = 100;\n\nfunction Telemeter(options) {\n this.queue = [];\n this.options = _.extend(true, {}, options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n this.maxQueueSize = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n}\n\nTelemeter.prototype.configure = function(options) {\n var oldOptions = this.options;\n this.options = _.extend(true, {}, oldOptions, options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n var newMaxEvents = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n var deleteCount = 0;\n if (this.maxQueueSize > newMaxEvents) {\n deleteCount = this.maxQueueSize - newMaxEvents;\n }\n this.maxQueueSize = newMaxEvents;\n this.queue.splice(0, deleteCount);\n};\n\nTelemeter.prototype.copyEvents = function() {\n return Array.prototype.slice.call(this.queue, 0);\n};\n\nTelemeter.prototype.capture = function(type, metadata, level, rollbarUUID, timestamp) {\n var e = {\n level: getLevel(type, level),\n type: type,\n timestamp_ms: timestamp || _.now(),\n body: metadata,\n source: 'client'\n };\n if (rollbarUUID) {\n e.uuid = rollbarUUID;\n }\n\n try {\n if (_.isFunction(this.options.filterTelemetry) && this.options.filterTelemetry(e)) {\n return false;\n }\n } catch (e) {\n this.options.filterTelemetry = null;\n }\n\n this.push(e);\n return e;\n};\n\nTelemeter.prototype.captureEvent = function(metadata, level, rollbarUUID) {\n return this.capture('manual', metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.captureError = function(err, level, rollbarUUID, timestamp) {\n var metadata = {\n message: err.message || String(err)\n };\n if (err.stack) {\n metadata.stack = err.stack;\n }\n return this.capture('error', metadata, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureLog = function(message, level, rollbarUUID, timestamp) {\n return this.capture('log', {\n message: message\n }, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureNetwork = function(metadata, subtype, rollbarUUID, requestData) {\n subtype = subtype || 'xhr';\n metadata.subtype = metadata.subtype || subtype;\n if (requestData) {\n metadata.request = requestData;\n }\n var level = this.levelFromStatus(metadata.status_code);\n return this.capture('network', metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.levelFromStatus = function(statusCode) {\n if (statusCode >= 200 && statusCode < 400) {\n return 'info';\n }\n if (statusCode === 0 || statusCode >= 400) {\n return 'error';\n }\n return 'info';\n};\n\nTelemeter.prototype.captureDom = function(subtype, element, value, checked, rollbarUUID) {\n var metadata = {\n subtype: subtype,\n element: element\n };\n if (value !== undefined) {\n metadata.value = value;\n }\n if (checked !== undefined) {\n metadata.checked = checked;\n }\n return this.capture('dom', metadata, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureNavigation = function(from, to, rollbarUUID) {\n return this.capture('navigation', {from: from, to: to}, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureDomContentLoaded = function(ts) {\n return this.capture('navigation', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n */\n};\nTelemeter.prototype.captureLoad = function(ts) {\n return this.capture('navigation', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n */\n};\n\nTelemeter.prototype.captureConnectivityChange = function(type, rollbarUUID) {\n return this.captureNetwork({change: type}, 'connectivity', rollbarUUID);\n};\n\n// Only intended to be used internally by the notifier\nTelemeter.prototype._captureRollbarItem = function(item) {\n if (!this.options.includeItemsInTelemetry) {\n return;\n }\n if (item.err) {\n return this.captureError(item.err, item.level, item.uuid, item.timestamp);\n }\n if (item.message) {\n return this.captureLog(item.message, item.level, item.uuid, item.timestamp);\n }\n if (item.custom) {\n return this.capture('log', item.custom, item.level, item.uuid, item.timestamp);\n }\n};\n\nTelemeter.prototype.push = function(e) {\n this.queue.push(e);\n if (this.queue.length > this.maxQueueSize) {\n this.queue.shift();\n }\n};\n\nfunction getLevel(type, level) {\n if (level) {\n return level;\n }\n var defaultLevel = {\n error: 'error',\n manual: 'info'\n };\n return defaultLevel[type] || 'info';\n}\n\nmodule.exports = Telemeter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/telemetry.js\n// module id = 10\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\nvar helpers = require('./apiUtility');\n\nvar defaultOptions = {\n hostname: 'api.rollbar.com',\n path: '/api/1/item/',\n search: null,\n version: '1',\n protocol: 'https:',\n port: 443\n};\n\n/**\n * Api is an object that encapsulates methods of communicating with\n * the Rollbar API. It is a standard interface with some parts implemented\n * differently for server or browser contexts. It is an object that should\n * be instantiated when used so it can contain non-global options that may\n * be different for another instance of RollbarApi.\n *\n * @param options {\n * accessToken: the accessToken to use for posting items to rollbar\n * endpoint: an alternative endpoint to send errors to\n * must be a valid, fully qualified URL.\n * The default is: https://api.rollbar.com/api/1/item\n * proxy: if you wish to proxy requests provide an object\n * with the following keys:\n * host or hostname (required): foo.example.com\n * port (optional): 123\n * protocol (optional): https\n * }\n */\nfunction Api(options, t, u, j) {\n this.options = options;\n this.transport = t;\n this.url = u;\n this.jsonBackup = j;\n this.accessToken = options.accessToken;\n this.transportOptions = _getTransport(options, u);\n}\n\n/**\n *\n * @param data\n * @param callback\n */\nApi.prototype.postItem = function(data, callback) {\n var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n this.transport.post(this.accessToken, transportOptions, payload, callback);\n};\n\nApi.prototype.configure = function(options) {\n var oldOptions = this.oldOptions;\n this.options = _.extend(true, {}, oldOptions, options);\n this.transportOptions = _getTransport(this.options, this.url);\n if (this.options.accessToken !== undefined) {\n this.accessToken = this.options.accessToken;\n }\n return this;\n};\n\nfunction _getTransport(options, url) {\n return helpers.getTransportFromOptions(options, defaultOptions, url);\n}\n\nmodule.exports = Api;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/api.js\n// module id = 11\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction buildPayload(accessToken, data, jsonBackup) {\n if (!_.isType(data.context, 'string')) {\n var contextResult = _.stringify(data.context, jsonBackup);\n if (contextResult.error) {\n data.context = 'Error: could not serialize \\'context\\'';\n } else {\n data.context = contextResult.value || '';\n }\n if (data.context.length > 255) {\n data.context = data.context.substr(0, 255);\n }\n }\n return {\n access_token: accessToken,\n data: data\n };\n}\n\nfunction getTransportFromOptions(options, defaults, url) {\n var hostname = defaults.hostname;\n var protocol = defaults.protocol;\n var port = defaults.port;\n var path = defaults.path;\n var search = defaults.search;\n\n var proxy = options.proxy;\n if (options.endpoint) {\n var opts = url.parse(options.endpoint);\n hostname = opts.hostname;\n protocol = opts.protocol;\n port = opts.port;\n path = opts.pathname;\n search = opts.search;\n }\n return {\n hostname: hostname,\n protocol: protocol,\n port: port,\n path: path,\n search: search,\n proxy: proxy\n };\n}\n\nfunction transportOptions(transport, method) {\n var protocol = transport.protocol || 'https:';\n var port = transport.port || (protocol === 'http:' ? 80 : protocol === 'https:' ? 443 : undefined);\n var hostname = transport.hostname;\n var path = transport.path;\n if (transport.search) {\n path = path + transport.search;\n }\n if (transport.proxy) {\n path = protocol + '//' + hostname + path;\n hostname = transport.proxy.host || transport.proxy.hostname;\n port = transport.proxy.port;\n protocol = transport.proxy.protocol || protocol;\n }\n return {\n protocol: protocol,\n hostname: hostname,\n path: path,\n port: port,\n method: method\n };\n}\n\nfunction appendPathToPath(base, path) {\n var baseTrailingSlash = /\\/$/.test(base);\n var pathBeginningSlash = /^\\//.test(path);\n\n if (baseTrailingSlash && pathBeginningSlash) {\n path = path.substring(1);\n } else if (!baseTrailingSlash && !pathBeginningSlash) {\n path = '/' + path;\n }\n\n return base + path;\n}\n\nmodule.exports = {\n buildPayload: buildPayload,\n getTransportFromOptions: getTransportFromOptions,\n transportOptions: transportOptions,\n appendPathToPath: appendPathToPath\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/apiUtility.js\n// module id = 12\n// module chunks = 0","'use strict';\n\n/* eslint-disable no-console */\nrequire('console-polyfill');\nvar detection = require('./detection');\nvar _ = require('../utility');\n\nfunction error() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.error(_.formatArgsAsString(args));\n } else {\n console.error.apply(console, args);\n }\n}\n\nfunction info() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.info(_.formatArgsAsString(args));\n } else {\n console.info.apply(console, args);\n }\n}\n\nfunction log() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.log(_.formatArgsAsString(args));\n } else {\n console.log.apply(console, args);\n }\n}\n\n/* eslint-enable no-console */\n\nmodule.exports = {\n error: error,\n info: info,\n log: log\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/logger.js\n// module id = 13\n// module chunks = 0","// Console-polyfill. MIT license.\n// https://github.com/paulmillr/console-polyfill\n// Make it safe to do console.log() always.\n(function(global) {\n 'use strict';\n if (!global.console) {\n global.console = {};\n }\n var con = global.console;\n var prop, method;\n var dummy = function() {};\n var properties = ['memory'];\n var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' +\n 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' +\n 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',');\n while (prop = properties.pop()) if (!con[prop]) con[prop] = {};\n while (method = methods.pop()) if (!con[method]) con[method] = dummy;\n // Using `this` for web workers & supports Browserify / Webpack.\n})(typeof window === 'undefined' ? this : window);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/console-polyfill/index.js\n// module id = 14\n// module chunks = 0","'use strict';\n\n// This detection.js module is used to encapsulate any ugly browser/feature\n// detection we may need to do.\n\n// Figure out which version of IE we're using, if any.\n// This is gleaned from http://stackoverflow.com/questions/5574842/best-way-to-check-for-ie-less-than-9-in-javascript-without-library\n// Will return an integer on IE (i.e. 8)\n// Will return undefined otherwise\nfunction getIEVersion() {\n\tvar undef;\n\tif (!document) {\n\t\treturn undef;\n\t}\n\n var v = 3,\n div = document.createElement('div'),\n all = div.getElementsByTagName('i');\n\n while (\n div.innerHTML = '',\n all[0]\n );\n\n return v > 4 ? v : undef;\n}\n\nvar Detection = {\n ieVersion: getIEVersion\n};\n\nmodule.exports = Detection;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/detection.js\n// module id = 15\n// module chunks = 0","'use strict';\n\nfunction captureUncaughtExceptions(window, handler, shim) {\n if (!window) { return; }\n var oldOnError;\n\n if (typeof handler._rollbarOldOnError === 'function') {\n oldOnError = handler._rollbarOldOnError;\n } else if (window.onerror && !window.onerror.belongsToShim) {\n oldOnError = window.onerror;\n handler._rollbarOldOnError = oldOnError;\n }\n\n var fn = function() {\n var args = Array.prototype.slice.call(arguments, 0);\n _rollbarWindowOnError(window, handler, oldOnError, args);\n };\n fn.belongsToShim = shim;\n window.onerror = fn;\n}\n\nfunction _rollbarWindowOnError(window, r, old, args) {\n if (window._rollbarWrappedError) {\n if (!args[4]) {\n args[4] = window._rollbarWrappedError;\n }\n if (!args[5]) {\n args[5] = window._rollbarWrappedError._rollbarContext;\n }\n window._rollbarWrappedError = null;\n }\n\n r.handleUncaughtException.apply(r, args);\n if (old) {\n old.apply(window, args);\n }\n}\n\nfunction captureUnhandledRejections(window, handler, shim) {\n if (!window) { return; }\n\n if (typeof window._rollbarURH === 'function' && window._rollbarURH.belongsToShim) {\n window.removeEventListener('unhandledrejection', window._rollbarURH);\n }\n\n var rejectionHandler = function (evt) {\n var reason, promise, detail;\n try {\n reason = evt.reason;\n } catch (e) {\n reason = undefined;\n }\n try {\n promise = evt.promise;\n } catch (e) {\n promise = '[unhandledrejection] error getting `promise` from event';\n }\n try {\n detail = evt.detail;\n if (!reason && detail) {\n reason = detail.reason;\n promise = detail.promise;\n }\n } catch (e) {\n detail = '[unhandledrejection] error getting `detail` from event';\n }\n if (!reason) {\n reason = '[unhandledrejection] error getting `reason` from event';\n }\n\n if (handler && handler.handleUnhandledRejection) {\n handler.handleUnhandledRejection(reason, promise);\n }\n };\n rejectionHandler.belongsToShim = shim;\n window._rollbarURH = rejectionHandler;\n window.addEventListener('unhandledrejection', rejectionHandler);\n}\n\nfunction wrapGlobals(window, handler, shim) {\n if (!window) { return; }\n // Adapted from https://github.com/bugsnag/bugsnag-js\n var globals = 'EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload'.split(',');\n var i, global;\n for (i = 0; i < globals.length; ++i) {\n global = globals[i];\n\n if (window[global] && window[global].prototype) {\n _extendListenerPrototype(handler, window[global].prototype, shim);\n }\n }\n}\n\nfunction _extendListenerPrototype(handler, prototype, shim) {\n if (prototype.hasOwnProperty && prototype.hasOwnProperty('addEventListener')) {\n var oldAddEventListener = prototype.addEventListener;\n while (oldAddEventListener._rollbarOldAdd && oldAddEventListener.belongsToShim) {\n oldAddEventListener = oldAddEventListener._rollbarOldAdd;\n }\n var addFn = function(event, callback, bubble) {\n oldAddEventListener.call(this, event, handler.wrap(callback), bubble);\n };\n addFn._rollbarOldAdd = oldAddEventListener;\n addFn.belongsToShim = shim;\n prototype.addEventListener = addFn;\n\n var oldRemoveEventListener = prototype.removeEventListener;\n while (oldRemoveEventListener._rollbarOldRemove && oldRemoveEventListener.belongsToShim) {\n oldRemoveEventListener = oldRemoveEventListener._rollbarOldRemove;\n }\n var removeFn = function(event, callback, bubble) {\n oldRemoveEventListener.call(this, event, callback && callback._rollbar_wrapped || callback, bubble);\n };\n removeFn._rollbarOldRemove = oldRemoveEventListener;\n removeFn.belongsToShim = shim;\n prototype.removeEventListener = removeFn;\n }\n}\n\nmodule.exports = {\n captureUncaughtExceptions: captureUncaughtExceptions,\n captureUnhandledRejections: captureUnhandledRejections,\n wrapGlobals: wrapGlobals\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/globalSetup.js\n// module id = 16\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar logger = require('./logger');\n\n/*\n * accessToken may be embedded in payload but that should not\n * be assumed\n *\n * options: {\n * hostname\n * protocol\n * path\n * port\n * method\n * }\n *\n * params is an object containing key/value pairs. These\n * will be appended to the path as 'key=value&key=value'\n *\n * payload is an unserialized object\n */\n\nfunction get(accessToken, options, params, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n _.addParamsAndAccessTokenToPath(accessToken, options, params);\n\n var method = 'GET';\n var url = _.formatUrl(options);\n _makeRequest(accessToken, url, method, null, callback, requestFactory);\n}\n\nfunction post(accessToken, options, payload, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!payload) {\n return callback(new Error('Cannot send empty request'));\n }\n\n var stringifyResult = _.stringify(payload);\n if (stringifyResult.error) {\n return callback(stringifyResult.error);\n }\n\n var writeData = stringifyResult.value;\n var method = 'POST';\n var url = _.formatUrl(options);\n _makeRequest(accessToken, url, method, writeData, callback, requestFactory);\n}\n\nfunction _makeRequest(accessToken, url, method, data, callback, requestFactory) {\n var request;\n if (requestFactory) {\n request = requestFactory();\n } else {\n request = _createXMLHTTPObject();\n }\n if (!request) {\n // Give up, no way to send requests\n return callback(new Error('No way to send a request'));\n }\n try {\n try {\n var onreadystatechange = function() {\n try {\n if (onreadystatechange && request.readyState === 4) {\n onreadystatechange = undefined;\n\n var parseResponse = _.jsonParse(request.responseText);\n if (_isSuccess(request)) {\n callback(parseResponse.error, parseResponse.value);\n return;\n } else if (_isNormalFailure(request)) {\n if (request.status === 403) {\n // likely caused by using a server access token\n var message = parseResponse.value && parseResponse.value.message;\n logger.error(message);\n }\n // return valid http status codes\n callback(new Error(String(request.status)));\n } else {\n // IE will return a status 12000+ on some sort of connection failure,\n // so we return a blank error\n // http://msdn.microsoft.com/en-us/library/aa383770%28VS.85%29.aspx\n var msg = 'XHR response had no status code (likely connection failure)';\n callback(_newRetriableError(msg));\n }\n }\n } catch (ex) {\n //jquery source mentions firefox may error out while accessing the\n //request members if there is a network error\n //https://github.com/jquery/jquery/blob/a938d7b1282fc0e5c52502c225ae8f0cef219f0a/src/ajax/xhr.js#L111\n var exc;\n if (ex && ex.stack) {\n exc = ex;\n } else {\n exc = new Error(ex);\n }\n callback(exc);\n }\n };\n\n request.open(method, url, true);\n if (request.setRequestHeader) {\n request.setRequestHeader('Content-Type', 'application/json');\n request.setRequestHeader('X-Rollbar-Access-Token', accessToken);\n }\n request.onreadystatechange = onreadystatechange;\n request.send(data);\n } catch (e1) {\n // Sending using the normal xmlhttprequest object didn't work, try XDomainRequest\n if (typeof XDomainRequest !== 'undefined') {\n\n // Assume we are in a really old browser which has a bunch of limitations:\n // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\n // Extreme paranoia: if we have XDomainRequest then we have a window, but just in case\n if (!window || !window.location) {\n return callback(new Error('No window available during request, unknown environment'));\n }\n\n // If the current page is http, try and send over http\n if (window.location.href.substring(0, 5) === 'http:' && url.substring(0, 5) === 'https') {\n url = 'http' + url.substring(5);\n }\n\n var xdomainrequest = new XDomainRequest();\n xdomainrequest.onprogress = function() {};\n xdomainrequest.ontimeout = function() {\n var msg = 'Request timed out';\n var code = 'ETIMEDOUT';\n callback(_newRetriableError(msg, code));\n };\n xdomainrequest.onerror = function() {\n callback(new Error('Error during request'));\n };\n xdomainrequest.onload = function() {\n var parseResponse = _.jsonParse(xdomainrequest.responseText);\n callback(parseResponse.error, parseResponse.value);\n };\n xdomainrequest.open(method, url, true);\n xdomainrequest.send(data);\n } else {\n callback(new Error('Cannot find a method to transport a request'));\n }\n }\n } catch (e2) {\n callback(e2);\n }\n}\n\nfunction _createXMLHTTPObject() {\n /* global ActiveXObject:false */\n\n var factories = [\n function () {\n return new XMLHttpRequest();\n },\n function () {\n return new ActiveXObject('Msxml2.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Msxml3.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Microsoft.XMLHTTP');\n }\n ];\n var xmlhttp;\n var i;\n var numFactories = factories.length;\n for (i = 0; i < numFactories; i++) {\n /* eslint-disable no-empty */\n try {\n xmlhttp = factories[i]();\n break;\n } catch (e) {\n // pass\n }\n /* eslint-enable no-empty */\n }\n return xmlhttp;\n}\n\nfunction _isSuccess(r) {\n return r && r.status && r.status === 200;\n}\n\nfunction _isNormalFailure(r) {\n return r && _.isType(r.status, 'number') && r.status >= 400 && r.status < 600;\n}\n\nfunction _newRetriableError(message, code) {\n var err = new Error(message);\n err.code = code || 'ENOTFOUND';\n return err;\n}\n\nmodule.exports = {\n get: get,\n post: post\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transport.js\n// module id = 17\n// module chunks = 0","'use strict';\n\n// See https://nodejs.org/docs/latest/api/url.html\nfunction parse(url) {\n var result = {\n protocol: null, auth: null, host: null, path: null,\n hash: null, href: url, hostname: null, port: null,\n pathname: null, search: null, query: null\n };\n\n var i, last;\n i = url.indexOf('//');\n if (i !== -1) {\n result.protocol = url.substring(0,i);\n last = i+2;\n } else {\n last = 0;\n }\n \n i = url.indexOf('@', last);\n if (i !== -1) {\n result.auth = url.substring(last, i);\n last = i+1;\n }\n\n i = url.indexOf('/', last);\n if (i === -1) {\n i = url.indexOf('?', last);\n if (i === -1) {\n i = url.indexOf('#', last);\n if (i === -1) {\n result.host = url.substring(last);\n } else {\n result.host = url.substring(last, i);\n result.hash = url.substring(i);\n }\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n return result;\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n\n i = url.indexOf('#', last);\n if (i === -1) {\n result.path = url.substring(last);\n } else {\n result.path = url.substring(last, i);\n result.hash = url.substring(i);\n }\n\n if (result.path) {\n var pathParts = result.path.split('?');\n result.pathname = pathParts[0];\n result.query = pathParts[1];\n result.search = result.query ? '?' + result.query : null;\n }\n return result;\n}\n\nmodule.exports = {\n parse: parse\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/url.js\n// module id = 18\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar errorParser = require('./errorParser');\nvar logger = require('./logger');\n\nfunction handleItemWithError(item, options, callback) {\n item.data = item.data || {};\n if (item.err) {\n try {\n item.stackInfo = item.err._savedStackTrace || errorParser.parse(item.err);\n } catch (e)\n /* istanbul ignore next */\n {\n logger.error('Error while parsing the error object.', e);\n item.message = item.err.message || item.err.description || item.message || String(item.err);\n delete item.err;\n }\n }\n callback(null, item);\n}\n\nfunction ensureItemHasSomethingToSay(item, options, callback) {\n if (!item.message && !item.stackInfo && !item.custom) {\n callback(new Error('No message, stack info, or custom data'), null);\n }\n callback(null, item);\n}\n\nfunction addBaseInfo(item, options, callback) {\n var environment = (options.payload && options.payload.environment) || options.environment;\n item.data = _.extend(true, {}, item.data, {\n environment: environment,\n level: item.level,\n endpoint: options.endpoint,\n platform: 'browser',\n framework: 'browser-js',\n language: 'javascript',\n server: {},\n uuid: item.uuid,\n notifier: {\n name: 'rollbar-browser-js',\n version: options.version\n }\n });\n callback(null, item);\n}\n\nfunction addRequestInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.location) {\n return callback(null, item);\n }\n var remoteString = '$remote_ip';\n if (!options.captureIp) {\n remoteString = null;\n } else if (options.captureIp !== true) {\n remoteString += '_anonymize';\n }\n _.set(item, 'data.request', {\n url: window.location.href,\n query_string: window.location.search,\n user_ip: remoteString\n });\n callback(null, item);\n };\n}\n\nfunction addClientInfo(window) {\n return function(item, options, callback) {\n if (!window) {\n return callback(null, item);\n }\n var nav = window.navigator || {};\n var scr = window.screen || {};\n _.set(item, 'data.client', {\n runtime_ms: item.timestamp - window._rollbarStartTime,\n timestamp: Math.round(item.timestamp / 1000),\n javascript: {\n browser: nav.userAgent,\n language: nav.language,\n cookie_enabled: nav.cookieEnabled,\n screen: {\n width: scr.width,\n height: scr.height\n }\n }\n });\n callback(null, item);\n };\n}\n\nfunction addPluginInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.navigator) {\n return callback(null, item);\n }\n var plugins = [];\n var navPlugins = window.navigator.plugins || [];\n var cur;\n for (var i=0, l=navPlugins.length; i < l; ++i) {\n cur = navPlugins[i];\n plugins.push({name: cur.name, description: cur.description});\n }\n _.set(item, 'data.client.javascript.plugins', plugins);\n callback(null, item);\n };\n}\n\nfunction addBody(item, options, callback) {\n if (item.stackInfo) {\n addBodyTrace(item, options, callback);\n } else {\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction addBodyMessage(item, options, callback) {\n var message = item.message;\n var custom = item.custom;\n\n if (!message) {\n if (custom) {\n var scrubFields = options.scrubFields;\n var messageResult = _.stringify(_.scrub(custom, scrubFields));\n message = messageResult.error || messageResult.value || '';\n } else {\n message = '';\n }\n }\n var result = {\n body: message\n };\n\n if (custom) {\n result.extra = _.extend(true, {}, custom);\n }\n\n _.set(item, 'data.body', {message: result});\n callback(null, item);\n}\n\n\nfunction addBodyTrace(item, options, callback) {\n var description = item.data.description;\n var stackInfo = item.stackInfo;\n var custom = item.custom;\n\n var guess = errorParser.guessErrorClass(stackInfo.message);\n var className = stackInfo.name || guess[0];\n var message = guess[1];\n var trace = {\n exception: {\n 'class': className,\n message: message\n }\n };\n\n if (description) {\n trace.exception.description = description;\n }\n\n // Transform a TraceKit stackInfo object into a Rollbar trace\n var stack = stackInfo.stack;\n if (stack && stack.length === 0 && item._unhandledStackInfo && item._unhandledStackInfo.stack) {\n stack = item._unhandledStackInfo.stack;\n }\n if (stack) {\n if (stack.length === 0) {\n trace.exception.stack = stackInfo.rawStack;\n trace.exception.raw = String(stackInfo.rawException);\n }\n var stackFrame;\n var frame;\n var code;\n var pre;\n var post;\n var contextLength;\n var i, mid;\n\n trace.frames = [];\n for (i = 0; i < stack.length; ++i) {\n stackFrame = stack[i];\n frame = {\n filename: stackFrame.url ? _.sanitizeUrl(stackFrame.url) : '(unknown)',\n lineno: stackFrame.line || null,\n method: (!stackFrame.func || stackFrame.func === '?') ? '[anonymous]' : stackFrame.func,\n colno: stackFrame.column\n };\n if (frame.method && frame.method.endsWith && frame.method.endsWith('_rollbar_wrapped')) {\n continue;\n }\n\n code = pre = post = null;\n contextLength = stackFrame.context ? stackFrame.context.length : 0;\n if (contextLength) {\n mid = Math.floor(contextLength / 2);\n pre = stackFrame.context.slice(0, mid);\n code = stackFrame.context[mid];\n post = stackFrame.context.slice(mid);\n }\n\n if (code) {\n frame.code = code;\n }\n\n if (pre || post) {\n frame.context = {};\n if (pre && pre.length) {\n frame.context.pre = pre;\n }\n if (post && post.length) {\n frame.context.post = post;\n }\n }\n\n if (stackFrame.args) {\n frame.args = stackFrame.args;\n }\n\n trace.frames.push(frame);\n }\n\n // NOTE(cory): reverse the frames since rollbar.com expects the most recent call last\n trace.frames.reverse();\n\n if (custom) {\n trace.extra = _.extend(true, {}, custom);\n }\n _.set(item, 'data.body', {trace: trace});\n callback(null, item);\n } else {\n item.message = className + ': ' + message;\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction scrubPayload(item, options, callback) {\n var scrubFields = options.scrubFields;\n item.data = _.scrub(item.data, scrubFields);\n callback(null, item);\n}\n\nmodule.exports = {\n handleItemWithError: handleItemWithError,\n ensureItemHasSomethingToSay: ensureItemHasSomethingToSay,\n addBaseInfo: addBaseInfo,\n addRequestInfo: addRequestInfo,\n addClientInfo: addClientInfo,\n addPluginInfo: addPluginInfo,\n addBody: addBody,\n scrubPayload: scrubPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transforms.js\n// module id = 19\n// module chunks = 0","'use strict';\n\nvar ErrorStackParser = require('error-stack-parser');\n\nvar UNKNOWN_FUNCTION = '?';\nvar ERR_CLASS_REGEXP = new RegExp('^(([a-zA-Z0-9-_$ ]*): *)?(Uncaught )?([a-zA-Z0-9-_$ ]*): ');\n\nfunction guessFunctionName() {\n return UNKNOWN_FUNCTION;\n}\n\n\nfunction gatherContext() {\n return null;\n}\n\n\nfunction Frame(stackFrame) {\n var data = {};\n\n data._stackFrame = stackFrame;\n\n data.url = stackFrame.fileName;\n data.line = stackFrame.lineNumber;\n data.func = stackFrame.functionName;\n data.column = stackFrame.columnNumber;\n data.args = stackFrame.args;\n\n data.context = gatherContext(data.url, data.line);\n\n return data;\n}\n\n\nfunction Stack(exception) {\n function getStack() {\n var parserStack = [];\n var exc;\n\n if (!exception.stack) {\n try {\n throw exception;\n } catch (e) {\n exc = e;\n }\n } else {\n exc = exception;\n }\n\n try {\n parserStack = ErrorStackParser.parse(exc);\n } catch(e) {\n parserStack = [];\n }\n\n var stack = [];\n\n for (var i = 0; i < parserStack.length; i++) {\n stack.push(new Frame(parserStack[i]));\n }\n\n return stack;\n }\n\n return {\n stack: getStack(),\n message: exception.message,\n name: exception.name,\n rawStack: exception.stack,\n rawException: exception\n };\n}\n\n\nfunction parse(e) {\n return new Stack(e);\n}\n\n\nfunction guessErrorClass(errMsg) {\n if (!errMsg || !errMsg.match) {\n return ['Unknown error. There was no error message to display.', ''];\n }\n var errClassMatch = errMsg.match(ERR_CLASS_REGEXP);\n var errClass = '(unknown)';\n\n if (errClassMatch) {\n errClass = errClassMatch[errClassMatch.length - 1];\n errMsg = errMsg.replace((errClassMatch[errClassMatch.length - 2] || '') + errClass + ':', '');\n errMsg = errMsg.replace(/(^[\\s]+|[\\s]+$)/g, '');\n }\n return [errClass, errMsg];\n}\n\n\nmodule.exports = {\n guessFunctionName: guessFunctionName,\n guessErrorClass: guessErrorClass,\n gatherContext: gatherContext,\n parse: parse,\n Stack: Stack,\n Frame: Frame\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/errorParser.js\n// module id = 20\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = locationParts[0] === 'eval' ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/error-stack-parser.js\n// module id = 21\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stackframe', [], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.StackFrame = factory();\n }\n}(this, function () {\n 'use strict';\n function _isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n function StackFrame(functionName, args, fileName, lineNumber, columnNumber, source) {\n if (functionName !== undefined) {\n this.setFunctionName(functionName);\n }\n if (args !== undefined) {\n this.setArgs(args);\n }\n if (fileName !== undefined) {\n this.setFileName(fileName);\n }\n if (lineNumber !== undefined) {\n this.setLineNumber(lineNumber);\n }\n if (columnNumber !== undefined) {\n this.setColumnNumber(columnNumber);\n }\n if (source !== undefined) {\n this.setSource(source);\n }\n }\n\n StackFrame.prototype = {\n getFunctionName: function () {\n return this.functionName;\n },\n setFunctionName: function (v) {\n this.functionName = String(v);\n },\n\n getArgs: function () {\n return this.args;\n },\n setArgs: function (v) {\n if (Object.prototype.toString.call(v) !== '[object Array]') {\n throw new TypeError('Args must be an Array');\n }\n this.args = v;\n },\n\n // NOTE: Property name may be misleading as it includes the path,\n // but it somewhat mirrors V8's JavaScriptStackTraceApi\n // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's\n // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14\n getFileName: function () {\n return this.fileName;\n },\n setFileName: function (v) {\n this.fileName = String(v);\n },\n\n getLineNumber: function () {\n return this.lineNumber;\n },\n setLineNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Line Number must be a Number');\n }\n this.lineNumber = Number(v);\n },\n\n getColumnNumber: function () {\n return this.columnNumber;\n },\n setColumnNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Column Number must be a Number');\n }\n this.columnNumber = Number(v);\n },\n\n getSource: function () {\n return this.source;\n },\n setSource: function (v) {\n this.source = String(v);\n },\n\n toString: function() {\n var functionName = this.getFunctionName() || '{anonymous}';\n var args = '(' + (this.getArgs() || []).join(',') + ')';\n var fileName = this.getFileName() ? ('@' + this.getFileName()) : '';\n var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : '';\n var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : '';\n return functionName + args + fileName + lineNumber + columnNumber;\n }\n };\n\n return StackFrame;\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/~/stackframe/stackframe.js\n// module id = 22\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction itemToPayload(item, options, callback) {\n var payloadOptions = options.payload || {};\n if (payloadOptions.body) {\n delete payloadOptions.body;\n }\n\n var data = _.extend(true, {}, item.data, payloadOptions);\n if (item._isUncaught) {\n data._isUncaught = true;\n }\n if (item._originalArgs) {\n data._originalArgs = item._originalArgs;\n }\n callback(null, data);\n}\n\nfunction addTelemetryData(item, options, callback) {\n if (item.telemetryEvents) {\n _.set(item, 'data.body.telemetry', item.telemetryEvents);\n }\n callback(null, item);\n}\n\nfunction addMessageWithError(item, options, callback) {\n if (!item.message) {\n callback(null, item);\n return;\n }\n var tracePath = 'data.body.trace_chain.0';\n var trace = _.get(item, tracePath);\n if (!trace) {\n tracePath = 'data.body.trace';\n trace = _.get(item, tracePath);\n }\n if (trace) {\n if (!(trace.exception && trace.exception.description)) {\n _.set(item, tracePath+'.exception.description', item.message);\n callback(null, item);\n return;\n }\n var extra = _.get(item, tracePath+'.extra') || {};\n var newExtra = _.extend(true, {}, extra, {message: item.message});\n _.set(item, tracePath+'.extra', newExtra);\n }\n callback(null, item);\n}\n\nfunction userTransform(logger) {\n return function(item, options, callback) {\n var newItem = _.extend(true, {}, item);\n try {\n if (_.isFunction(options.transform)) {\n options.transform(newItem.data);\n }\n } catch (e) {\n options.transform = null;\n logger.error('Error while calling custom transform() function. Removing custom transform().', e);\n callback(null, item);\n return;\n }\n callback(null, newItem);\n }\n}\n\nfunction addConfigToPayload(item, options, callback) {\n if (!options.sendConfig) {\n return callback(null, item);\n }\n var configKey = '_rollbarConfig';\n var custom = _.get(item, 'data.custom') || {};\n custom[configKey] = options;\n item.data.custom = custom;\n callback(null, item);\n}\n\nmodule.exports = {\n itemToPayload: itemToPayload,\n addTelemetryData: addTelemetryData,\n addMessageWithError: addMessageWithError,\n userTransform: userTransform,\n addConfigToPayload: addConfigToPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/transforms.js\n// module id = 23\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\n\nfunction checkIgnore(item, settings) {\n if (_.get(settings, 'plugins.jquery.ignoreAjaxErrors')) {\n return !_.get(item, 'body.message.extra.isAjax');\n }\n return true;\n}\n\nmodule.exports = {\n checkIgnore: checkIgnore\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/predicates.js\n// module id = 24\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction checkLevel(item, settings) {\n var level = item.level;\n var levelVal = _.LEVELS[level] || 0;\n var reportLevel = settings.reportLevel;\n var reportLevelVal = _.LEVELS[reportLevel] || 0;\n\n if (levelVal < reportLevelVal) {\n return false;\n }\n return true;\n}\n\nfunction userCheckIgnore(logger) {\n return function(item, settings) {\n var isUncaught = !!item._isUncaught;\n delete item._isUncaught;\n var args = item._originalArgs;\n delete item._originalArgs;\n try {\n if (_.isFunction(settings.onSendCallback)) {\n settings.onSendCallback(isUncaught, args, item);\n }\n } catch (e) {\n settings.onSendCallback = null;\n logger.error('Error while calling onSendCallback, removing', e);\n }\n try {\n if (_.isFunction(settings.checkIgnore) && settings.checkIgnore(isUncaught, args, item)) {\n return false;\n }\n } catch (e) {\n settings.checkIgnore = null;\n logger.error('Error while calling custom checkIgnore(), removing', e);\n }\n return true;\n }\n}\n\nfunction urlIsNotBlacklisted(logger) {\n return function(item, settings) {\n return !urlIsOnAList(item, settings, 'blacklist', logger);\n }\n}\n\nfunction urlIsWhitelisted(logger) {\n return function(item, settings) {\n return urlIsOnAList(item, settings, 'whitelist', logger);\n }\n}\n\nfunction urlIsOnAList(item, settings, whiteOrBlack, logger) {\n // whitelist is the default\n var black = false;\n if (whiteOrBlack === 'blacklist') {\n black = true;\n }\n var list, trace, frame, filename, frameLength, url, listLength, urlRegex;\n var i, j;\n\n try {\n list = black ? settings.hostBlackList : settings.hostWhiteList;\n listLength = list && list.length;\n trace = _.get(item, 'body.trace');\n\n // These two checks are important to come first as they are defaults\n // in case the list is missing or the trace is missing or not well-formed\n if (!list || listLength === 0) {\n return !black;\n }\n if (!trace || !trace.frames || trace.frames.length === 0) {\n return !black;\n }\n\n frameLength = trace.frames.length;\n for (i = 0; i < frameLength; i++) {\n frame = trace.frames[i];\n filename = frame.filename;\n\n if (!_.isType(filename, 'string')) {\n return !black;\n }\n\n for (j = 0; j < listLength; j++) {\n url = list[j];\n urlRegex = new RegExp(url);\n\n if (urlRegex.test(filename)) {\n return true;\n }\n }\n }\n } catch (e)\n /* istanbul ignore next */\n {\n if (black) {\n settings.hostBlackList = null;\n } else {\n settings.hostWhiteList = null;\n }\n var listName = black ? 'hostBlackList' : 'hostWhiteList';\n logger.error('Error while reading your configuration\\'s ' + listName + ' option. Removing custom ' + listName + '.', e);\n return !black;\n }\n return false;\n}\n\nfunction messageIsIgnored(logger) {\n return function(item, settings) {\n var exceptionMessage, i, ignoredMessages,\n len, messageIsIgnored, rIgnoredMessage,\n body, traceMessage, bodyMessage;\n\n try {\n messageIsIgnored = false;\n ignoredMessages = settings.ignoredMessages;\n\n if (!ignoredMessages || ignoredMessages.length === 0) {\n return true;\n }\n\n body = item.body;\n traceMessage = _.get(body, 'trace.exception.message');\n bodyMessage = _.get(body, 'message.body');\n\n exceptionMessage = traceMessage || bodyMessage;\n\n if (!exceptionMessage){\n return true;\n }\n\n len = ignoredMessages.length;\n for (i = 0; i < len; i++) {\n rIgnoredMessage = new RegExp(ignoredMessages[i], 'gi');\n messageIsIgnored = rIgnoredMessage.test(exceptionMessage);\n\n if (messageIsIgnored) {\n break;\n }\n }\n } catch(e)\n /* istanbul ignore next */\n {\n settings.ignoredMessages = null;\n logger.error('Error while reading your configuration\\'s ignoredMessages option. Removing custom ignoredMessages.');\n }\n\n return !messageIsIgnored;\n }\n}\n\nmodule.exports = {\n checkLevel: checkLevel,\n userCheckIgnore: userCheckIgnore,\n urlIsNotBlacklisted: urlIsNotBlacklisted,\n urlIsWhitelisted: urlIsWhitelisted,\n messageIsIgnored: messageIsIgnored\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/predicates.js\n// module id = 25\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar urlparser = require('./url');\nvar domUtil = require('./domUtility');\n\nvar defaults = {\n network: true,\n networkResponseHeaders: false,\n networkResponseBody: false,\n networkRequestBody: false,\n log: true,\n dom: true,\n navigation: true,\n connectivity: true\n};\n\nfunction replace(obj, name, replacement, replacements, type) {\n var orig = obj[name];\n obj[name] = replacement(orig);\n if (replacements) {\n replacements[type].push([obj, name, orig]);\n }\n}\n\nfunction restore(replacements, type) {\n var b;\n while (replacements[type].length) {\n b = replacements[type].shift();\n b[0][b[1]] = b[2];\n }\n}\n\nfunction Instrumenter(options, telemeter, rollbar, _window, _document) {\n var autoInstrument = options.autoInstrument;\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.extend(true, {}, defaults, autoInstrument);\n }\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n this.telemetryScrubber = options.telemetryScrubber;\n this.telemeter = telemeter;\n this.rollbar = rollbar;\n this._window = _window || {};\n this._document = _document || {};\n this.replacements = {\n network: [],\n log: [],\n navigation: [],\n connectivity: []\n };\n this.eventRemovers = {\n dom: [],\n connectivity: []\n };\n\n this._location = this._window.location;\n this._lastHref = this._location && this._location.href;\n}\n\nInstrumenter.prototype.configure = function(options) {\n var autoInstrument = options.autoInstrument;\n var oldSettings = _.extend(true, {}, this.autoInstrument);\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.extend(true, {}, defaults, autoInstrument);\n }\n this.instrument(oldSettings);\n if (options.scrubTelemetryInputs !== undefined) {\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n }\n if (options.telemetryScrubber !== undefined) {\n this.telemetryScrubber = options.telemetryScrubber;\n }\n};\n\nInstrumenter.prototype.instrument = function(oldSettings) {\n if (this.autoInstrument.network && !(oldSettings && oldSettings.network)) {\n this.instrumentNetwork();\n } else if (!this.autoInstrument.network && oldSettings && oldSettings.network) {\n this.deinstrumentNetwork();\n }\n\n if (this.autoInstrument.log && !(oldSettings && oldSettings.log)) {\n this.instrumentConsole();\n } else if (!this.autoInstrument.log && oldSettings && oldSettings.log) {\n this.deinstrumentConsole();\n }\n\n if (this.autoInstrument.dom && !(oldSettings && oldSettings.dom)) {\n this.instrumentDom();\n } else if (!this.autoInstrument.dom && oldSettings && oldSettings.dom) {\n this.deinstrumentDom();\n }\n\n if (this.autoInstrument.navigation && !(oldSettings && oldSettings.navigation)) {\n this.instrumentNavigation();\n } else if (!this.autoInstrument.navigation && oldSettings && oldSettings.navigation) {\n this.deinstrumentNavigation();\n }\n\n if (this.autoInstrument.connectivity && !(oldSettings && oldSettings.connectivity)) {\n this.instrumentConnectivity();\n } else if (!this.autoInstrument.connectivity && oldSettings && oldSettings.connectivity) {\n this.deinstrumentConnectivity();\n }\n};\n\nInstrumenter.prototype.deinstrumentNetwork = function() {\n restore(this.replacements, 'network');\n};\n\nInstrumenter.prototype.instrumentNetwork = function() {\n var self = this;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && _.isFunction(xhr[prop])) {\n replace(xhr, prop, function(orig) {\n return self.rollbar.wrap(orig);\n });\n }\n }\n\n if ('XMLHttpRequest' in this._window) {\n var xhrp = this._window.XMLHttpRequest.prototype;\n replace(xhrp, 'open', function(orig) {\n return function(method, url) {\n if (_.isType(url, 'string')) {\n this.__rollbar_xhr = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'network');\n\n replace(xhrp, 'send', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(data) {\n /* eslint-enable no-unused-vars */\n var xhr = this;\n\n function onreadystatechangeHandler() {\n if (xhr.__rollbar_xhr && (xhr.readyState === 1 || xhr.readyState === 4)) {\n if (xhr.__rollbar_xhr.status_code === null) {\n xhr.__rollbar_xhr.status_code = 0;\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n requestData = data;\n }\n xhr.__rollbar_event = self.telemeter.captureNetwork(xhr.__rollbar_xhr, 'xhr', undefined, requestData);\n }\n if (xhr.readyState === 1) {\n xhr.__rollbar_xhr.start_time_ms = _.now();\n } else {\n xhr.__rollbar_xhr.end_time_ms = _.now();\n\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n var header, i;\n if (headersConfig === true) {\n var allHeaders = xhr.getAllResponseHeaders();\n if (allHeaders) {\n var arr = allHeaders.trim().split(/[\\r\\n]+/);\n var parts, value;\n for (i=0; i < arr.length; i++) {\n parts = arr[i].split(': ');\n header = parts.shift();\n value = parts.join(': ');\n headers[header] = value;\n }\n }\n } else {\n for (i=0; i < headersConfig.length; i++) {\n header = headersConfig[i];\n headers[header] = xhr.getResponseHeader(header);\n }\n }\n } catch (e) {\n /* we ignore the errors here that could come from different\n * browser issues with the xhr methods */\n }\n }\n var body = null;\n if (self.autoInstrument.networkResponseBody) {\n try {\n body = xhr.responseText;\n } catch (e) {\n /* ignore errors from reading responseText */\n }\n }\n var response = null;\n if (body || headers) {\n response = {};\n if (body) {\n response.body = body;\n }\n if (headers) {\n response.headers = headers;\n }\n }\n if (response) {\n xhr.__rollbar_xhr.response = response;\n }\n }\n try {\n var code = xhr.status;\n code = code === 1223 ? 204 : code;\n xhr.__rollbar_xhr.status_code = code;\n xhr.__rollbar_event.level = self.telemeter.levelFromStatus(code);\n } catch (e) {\n /* ignore possible exception from xhr.status */\n }\n }\n }\n\n wrapProp('onload', xhr);\n wrapProp('onerror', xhr);\n wrapProp('onprogress', xhr);\n\n if ('onreadystatechange' in xhr && _.isFunction(xhr.onreadystatechange)) {\n replace(xhr, 'onreadystatechange', function(orig) {\n return self.rollbar.wrap(orig, undefined, onreadystatechangeHandler);\n });\n } else {\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n return orig.apply(this, arguments);\n }\n }, this.replacements, 'network');\n }\n\n if ('fetch' in this._window) {\n replace(this._window, 'fetch', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(fn, t) {\n /* eslint-enable no-unused-vars */\n var args = new Array(arguments.length);\n for (var i=0, len=args.length; i < len; i++) {\n args[i] = arguments[i];\n }\n var input = args[0];\n var method = 'GET';\n var url;\n if (_.isType(input, 'string')) {\n url = input;\n } else if (input) {\n url = input.url;\n if (input.method) {\n method = input.method;\n }\n }\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n var metadata = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n if (args[1] && args[1].body) {\n requestData = args[1].body;\n } else if (args[0] && !_.isType(args[0], 'string') && args[0].body) {\n requestData = args[0].body;\n }\n }\n self.telemeter.captureNetwork(metadata, 'fetch', undefined, requestData);\n return orig.apply(this, args).then(function (resp) {\n metadata.end_time_ms = _.now();\n metadata.status_code = resp.status;\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n if (headersConfig === true) {\n // This is unsupported in IE so we can't do it\n /*\n var allHeaders = resp.headers.entries();\n for (var pair of allHeaders) {\n headers[pair[0]] = pair[1];\n }\n */\n } else {\n for (var i=0; i < headersConfig.length; i++) {\n var header = headersConfig[i];\n headers[header] = resp.headers.get(header);\n }\n }\n } catch (e) {\n /* ignore probable IE errors */\n }\n }\n var response = null;\n if (headers) {\n response = {\n headers: headers\n };\n }\n if (response) {\n metadata.response = response;\n }\n return resp;\n });\n };\n }, this.replacements, 'network');\n }\n};\n\nInstrumenter.prototype.deinstrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n var b;\n while (this.replacements['log'].length) {\n b = this.replacements['log'].shift();\n this._window.console[b[0]] = b[1];\n }\n};\n\nInstrumenter.prototype.instrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n\n var self = this;\n var c = this._window.console;\n\n function wrapConsole(method) {\n var orig = c[method];\n var origConsole = c;\n var level = method === 'warn' ? 'warning' : method;\n c[method] = function() {\n var args = Array.prototype.slice.call(arguments);\n var message = _.formatArgsAsString(args);\n self.telemeter.captureLog(message, level);\n if (orig) {\n Function.prototype.apply.call(orig, origConsole, args);\n }\n };\n self.replacements['log'].push([method, orig]);\n }\n var methods = ['debug','info','warn','error','log'];\n for (var i=0, len=methods.length; i < len; i++) {\n wrapConsole(methods[i]);\n }\n};\n\nInstrumenter.prototype.deinstrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n this.removeListeners('dom');\n};\n\nInstrumenter.prototype.instrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n var clickHandler = this.handleClick.bind(this);\n var blurHandler = this.handleBlur.bind(this);\n this.addListener('dom', this._window, 'click', 'onclick', clickHandler, true);\n this.addListener('dom', this._window, 'blur', 'onfocusout', blurHandler, true);\n};\n\nInstrumenter.prototype.handleClick = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n var hasTag = e && e.tagName;\n var anchorOrButton = domUtil.isDescribedElement(e, 'a') || domUtil.isDescribedElement(e, 'button');\n if (hasTag && (anchorOrButton || domUtil.isDescribedElement(e, 'input', ['button', 'submit']))) {\n this.captureDomEvent('click', e);\n } else if (domUtil.isDescribedElement(e, 'input', ['checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value, e.checked);\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleBlur = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n if (e && e.tagName) {\n if (domUtil.isDescribedElement(e, 'textarea')) {\n this.captureDomEvent('input', e, e.value);\n } else if (domUtil.isDescribedElement(e, 'select') && e.options && e.options.length) {\n this.handleSelectInputChanged(e);\n } else if (domUtil.isDescribedElement(e, 'input') && !domUtil.isDescribedElement(e, 'input', ['button', 'submit', 'hidden', 'checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value);\n }\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleSelectInputChanged = function(elem) {\n if (elem.multiple) {\n for (var i = 0; i < elem.options.length; i++) {\n if (elem.options[i].selected) {\n this.captureDomEvent('input', elem, elem.options[i].value);\n }\n }\n } else if (elem.selectedIndex >= 0 && elem.options[elem.selectedIndex]) {\n this.captureDomEvent('input', elem, elem.options[elem.selectedIndex].value);\n }\n};\n\nInstrumenter.prototype.captureDomEvent = function(subtype, element, value, isChecked) {\n if (value !== undefined) {\n if (this.scrubTelemetryInputs || (domUtil.getElementType(element) === 'password')) {\n value = '[scrubbed]';\n } else if (this.telemetryScrubber) {\n var description = domUtil.describeElement(element);\n if (this.telemetryScrubber(description)) {\n value = '[scrubbed]';\n }\n }\n }\n var elementString = domUtil.elementArrayToString(domUtil.treeToArray(element));\n this.telemeter.captureDom(subtype, elementString, value, isChecked);\n};\n\nInstrumenter.prototype.deinstrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n restore(this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.instrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n var self = this;\n replace(this._window, 'onpopstate', function(orig) {\n return function() {\n var current = self._location.href;\n self.handleUrlChange(self._lastHref, current);\n if (orig) {\n orig.apply(this, arguments);\n }\n };\n }, this.replacements, 'navigation');\n\n replace(this._window.history, 'pushState', function(orig) {\n return function() {\n var url = arguments.length > 2 ? arguments[2] : undefined;\n if (url) {\n self.handleUrlChange(self._lastHref, url + '');\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.handleUrlChange = function(from, to) {\n var parsedHref = urlparser.parse(this._location.href);\n var parsedTo = urlparser.parse(to);\n var parsedFrom = urlparser.parse(from);\n this._lastHref = to;\n if (parsedHref.protocol === parsedTo.protocol && parsedHref.host === parsedTo.host) {\n to = parsedTo.path + (parsedTo.hash || '');\n }\n if (parsedHref.protocol === parsedFrom.protocol && parsedHref.host === parsedFrom.host) {\n from = parsedFrom.path + (parsedFrom.hash || '');\n }\n this.telemeter.captureNavigation(from, to);\n};\n\nInstrumenter.prototype.deinstrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.removeListeners('connectivity');\n } else {\n restore(this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.instrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.addListener('connectivity', this._window, 'online', undefined, function() {\n this.telemeter.captureConnectivityChange('online');\n }.bind(this), true);\n this.addListener('connectivity', this._window, 'offline', undefined, function() {\n this.telemeter.captureConnectivityChange('offline');\n }.bind(this), true);\n } else {\n var self = this;\n replace(this._document.body, 'ononline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('online');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n replace(this._document.body, 'onoffline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('offline');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.addListener = function(section, obj, type, altType, handler, capture) {\n if (obj.addEventListener) {\n obj.addEventListener(type, handler, capture);\n this.eventRemovers[section].push(function() {\n obj.removeEventListener(type, handler, capture);\n });\n } else if (altType) {\n obj.attachEvent(altType, handler);\n this.eventRemovers[section].push(function() {\n obj.detachEvent(altType, handler);\n });\n }\n};\n\nInstrumenter.prototype.removeListeners = function(section) {\n var r;\n while (this.eventRemovers[section].length) {\n r = this.eventRemovers[section].shift();\n r();\n }\n};\n\nmodule.exports = Instrumenter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/telemetry.js\n// module id = 26\n// module chunks = 0","'use strict';\n\nfunction getElementType(e) {\n return (e.getAttribute('type') || '').toLowerCase();\n}\n\nfunction isDescribedElement(element, type, subtypes) {\n if (element.tagName.toLowerCase() !== type.toLowerCase()) {\n return false;\n }\n if (!subtypes) {\n return true;\n }\n element = getElementType(element);\n for (var i = 0; i < subtypes.length; i++) {\n if (subtypes[i] === element) {\n return true;\n }\n }\n return false;\n}\n\nfunction getElementFromEvent(evt, doc) {\n if (evt.target) {\n return evt.target;\n }\n if (doc && doc.elementFromPoint) {\n return doc.elementFromPoint(evt.clientX, evt.clientY);\n }\n return undefined;\n}\n\nfunction treeToArray(elem) {\n var MAX_HEIGHT = 5;\n var out = [];\n var nextDescription;\n for (var height = 0; elem && height < MAX_HEIGHT; height++) {\n nextDescription = describeElement(elem);\n if (nextDescription.tagName === 'html') {\n break;\n }\n out.unshift(nextDescription);\n elem = elem.parentNode;\n }\n return out;\n}\n\nfunction elementArrayToString(a) {\n var MAX_LENGTH = 80;\n var separator = ' > ', separatorLength = separator.length;\n var out = [], len = 0, nextStr, totalLength;\n\n for (var i = a.length - 1; i >= 0; i--) {\n nextStr = descriptionToString(a[i]);\n totalLength = len + (out.length * separatorLength) + nextStr.length;\n if (i < a.length - 1 && totalLength >= MAX_LENGTH + 3) {\n out.unshift('...');\n break;\n }\n out.unshift(nextStr);\n len += nextStr.length;\n }\n return out.join(separator);\n}\n\nfunction descriptionToString(desc) {\n if (!desc || !desc.tagName) {\n return '';\n }\n var out = [desc.tagName];\n if (desc.id) {\n out.push('#' + desc.id);\n }\n if (desc.classes) {\n out.push('.' + desc.classes.join('.'));\n }\n for (var i = 0; i < desc.attributes.length; i++) {\n out.push('[' + desc.attributes[i].key + '=\"' + desc.attributes[i].value + '\"]');\n }\n\n return out.join('');\n}\n\n/**\n * Input: a dom element\n * Output: null if tagName is falsey or input is falsey, else\n * {\n * tagName: String,\n * id: String | undefined,\n * classes: [String] | undefined,\n * attributes: [\n * {\n * key: OneOf(type, name, title, alt),\n * value: String\n * }\n * ]\n * }\n */\nfunction describeElement(elem) {\n if (!elem || !elem.tagName) {\n return null;\n }\n var out = {}, className, key, attr, i;\n out.tagName = elem.tagName.toLowerCase();\n if (elem.id) {\n out.id = elem.id;\n }\n className = elem.className;\n if (className && (typeof className === 'string')) {\n out.classes = className.split(/\\s+/);\n }\n var attributes = ['type', 'name', 'title', 'alt'];\n out.attributes = [];\n for (i = 0; i < attributes.length; i++) {\n key = attributes[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.attributes.push({key: key, value: attr});\n }\n }\n return out;\n}\n\nmodule.exports = {\n describeElement: describeElement,\n descriptionToString: descriptionToString,\n elementArrayToString: elementArrayToString,\n treeToArray: treeToArray,\n getElementFromEvent: getElementFromEvent,\n isDescribedElement: isDescribedElement,\n getElementType: getElementType\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/domUtility.js\n// module id = 27\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/rollbar.noconflict.umd.js b/dist/rollbar.noconflict.umd.js index 382053fba..7f04b4a09 100644 --- a/dist/rollbar.noconflict.umd.js +++ b/dist/rollbar.noconflict.umd.js @@ -95,7 +95,7 @@ return /******/ (function(modules) { // webpackBootstrap var Instrumenter = __webpack_require__(26); function Rollbar(options, client) { - this.options = _.extend(true, defaultOptions, options); + this.options = _.extend({}, defaultOptions, options); var api = new API(this.options, transport, urllib); this.client = client || new Client(this.options, api, logger, 'browser'); @@ -150,7 +150,7 @@ return /******/ (function(modules) { // webpackBootstrap if (payloadData) { payload = {payload: payloadData}; } - this.options = _.extend(true, {}, oldOptions, options, payload); + this.options = _.extend({}, oldOptions, options, payload); this.client.configure(options, payloadData); this.instrumenter.configure(options); return this; @@ -360,13 +360,15 @@ return /******/ (function(modules) { // webpackBootstrap return f.apply(this, arguments); } catch(exc) { var e = exc; - if (_.isType(e, 'string')) { - e = new String(e); - } - e._rollbarContext = ctxFn() || {}; - e._rollbarContext._wrappedSource = f.toString(); + if (e) { + if (_.isType(e, 'string')) { + e = new String(e); + } + e._rollbarContext = ctxFn() || {}; + e._rollbarContext._wrappedSource = f.toString(); - window._rollbarWrappedError = e; + window._rollbarWrappedError = e; + } throw e; } }; @@ -472,7 +474,7 @@ return /******/ (function(modules) { // webpackBootstrap /* global __DEFAULT_ENDPOINT__:false */ var defaultOptions = { - version: ("2.3.9"), + version: ("2.4.0"), scrubFields: (["pw","pass","passwd","password","secret","confirm_password","confirmPassword","password_confirmation","passwordConfirmation","access_token","accessToken","secret_key","secretKey","secretToken"]), logLevel: ("debug"), reportLevel: ("debug"), @@ -481,7 +483,8 @@ return /******/ (function(modules) { // webpackBootstrap verbose: false, enabled: true, sendConfig: false, - includeItemsInTelemetry: true + includeItemsInTelemetry: true, + captureIp: true }; module.exports = Rollbar; @@ -1637,6 +1640,42 @@ return /******/ (function(modules) { // webpackBootstrap return +new Date(); } + function filterIp(requestData, captureIp) { + if (!requestData || !requestData['user_ip'] || captureIp === true) { + return; + } + var newIp = requestData['user_ip']; + if (!captureIp) { + newIp = null; + } else { + try { + var parts; + if (newIp.indexOf('.') !== -1) { + parts = newIp.split('.'); + parts.pop(); + parts.push('0'); + newIp = parts.join('.'); + } else if (newIp.indexOf(':') !== -1) { + parts = newIp.split(':'); + if (parts.length > 2) { + var beginning = parts.slice(0, 3); + var slashIdx = beginning[2].indexOf('/'); + if (slashIdx !== -1) { + beginning[2] = beginning[2].substring(0, slashIdx); + } + var terminal = '0000:0000:0000:0000:0000'; + newIp = beginning.concat(terminal).join(':'); + } + } else { + newIp = null; + } + } catch (e) { + newIp = null; + } + } + requestData['user_ip'] = newIp; + } + module.exports = { isType: isType, typeName: typeName, @@ -1660,7 +1699,8 @@ return /******/ (function(modules) { // webpackBootstrap set: set, scrub: scrub, formatArgsAsString: formatArgsAsString, - now: now + now: now, + filterIp: filterIp }; @@ -2557,7 +2597,7 @@ return /******/ (function(modules) { // webpackBootstrap Notifier.prototype.configure = function(options) { this.queue && this.queue.configure(options); var oldOptions = this.options; - this.options = _.extend(true, {}, oldOptions, options); + this.options = _.extend({}, oldOptions, options); return this; }; @@ -3592,10 +3632,16 @@ return /******/ (function(modules) { // webpackBootstrap if (!window || !window.location) { return callback(null, item); } + var remoteString = '$remote_ip'; + if (!options.captureIp) { + remoteString = null; + } else if (options.captureIp !== true) { + remoteString += '_anonymize'; + } _.set(item, 'data.request', { url: window.location.href, query_string: window.location.search, - user_ip: '$remote_ip' + user_ip: remoteString }); callback(null, item); }; diff --git a/dist/rollbar.noconflict.umd.js.map b/dist/rollbar.noconflict.umd.js.map index 50d061d2e..6eb3e2dbd 100644 --- a/dist/rollbar.noconflict.umd.js.map +++ b/dist/rollbar.noconflict.umd.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 036c97698bf05106eb91","webpack:///./src/browser/bundles/rollbar.noconflict.js","webpack:///./src/browser/rollbar.js","webpack:///./src/rollbar.js","webpack:///./src/rateLimiter.js","webpack:///./src/queue.js","webpack:///./src/utility.js","webpack:///./~/extend/index.js","webpack:///./vendor/JSON-js/json3.js","webpack:///./src/notifier.js","webpack:///./src/telemetry.js","webpack:///./src/api.js","webpack:///./src/apiUtility.js","webpack:///./src/browser/logger.js","webpack:///./~/console-polyfill/index.js","webpack:///./src/browser/detection.js","webpack:///./src/browser/globalSetup.js","webpack:///./src/browser/transport.js","webpack:///./src/browser/url.js","webpack:///./src/browser/transforms.js","webpack:///./src/browser/errorParser.js","webpack:///./~/error-stack-parser/error-stack-parser.js","webpack:///./~/error-stack-parser/~/stackframe/stackframe.js","webpack:///./src/transforms.js","webpack:///./src/browser/predicates.js","webpack:///./src/predicates.js","webpack:///./src/browser/telemetry.js","webpack:///./src/browser/domUtility.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;ACVA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;;;;;;;ACtCA;;AAEA;;AAEA;AACA;AACA;;AAEA;;;;;;;ACRA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA,mCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,2BAA0B,sBAAsB;AAChD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,qCAAoC,SAAS;AAC7C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACxZA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA,mCAAkC;AAClC;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACpIA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC7IA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAkC;AAClC;AACA;;AAEA;AACA;AACA;AACA,yDAAwD,WAAW;AACnE;AACA;AACA,gBAAe,WAAW;AAC1B,gBAAe,eAAe;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA2B,QAAQ;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,cAAa,8BAA8B;AAC3C;AACA;AACA;AACA;AACA,gDAA+C,SAAS;AACxD;AACA;AACA,eAAc;AACd;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAkD,SAAS;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAwB,+BAA+B;;AAEvD;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACnQA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAY;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,gBAAe,gBAAgB;AAC/B;AACA;AACA;;AAEA,0BAAyB;AACzB,cAAa,iBAAiB;AAC9B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,mCAAkC,OAAO;AACzC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAmD,SAAS;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,6BAA4B;AAC5B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAwC,SAAS,UAAU,YAAY,GAAG;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,SAAS;AAC/C;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,WAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB,qBAAqB;AACtC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAe,qBAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB,wBAAwB;AACzC;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,kBAAiB,wBAAwB;AACzC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iCAAgC,SAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACzmBA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAmB;;AAEnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA,QAAO,YAAY;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA,OAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAAyE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAoB;AACpB;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,0CAAyC,iBAAiB;AAC1D,+BAA8B,kBAAkB;;AAEhD,0CAAyC,iBAAiB;AAC1D,uCAAsC,6BAA6B;;AAEnE;AACA;AACA;AACA;AACA,cAAa;AACb;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,yBAAwB;AACxB,gDAA+C,EAAE;AACjD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;;AAGA;;AAEA;;AAEA,WAAU;AACV,WAAU;AACV,WAAU;AACV;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA,sBAAqB,YAAY;AACjC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,sBAAqB,YAAY;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,gBAAe;AACf;AACA,eAAc,wDAAwD;AACtE,eAAc,0BAA0B;AACxC;AACA;AACA;AACA;;AAEA;;AAEA;AACA,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAmB,WAAW;AAC9B;AACA;;AAEA;;AAEA,QAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,uBAAsB,UAAU;AAChC;AACA;;;AAGA;;AAEA;AACA;;AAEA;AACA;;AAEA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB,qBAAoB;AACpB,eAAc;AACd,iBAAgB;AAChB,sBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAoB;AACpB;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,qBAAoB;AACpB;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,WAAU;AACV;AACA,yBAAwB,YAAY;AACpC;AACA;AACA,YAAW;AACX;AACA,yBAAwB,gDAAgD;AACxE;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA;AACA,UAAS;AACT,WAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,yBAAwB,YAAY;AACpC;AACA;AACA,YAAW;AACX;AACA,yBAAwB,gDAAgD;AACxE;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,uCAAsC,EAAE;AACxC;AACA;AACA;AACA,UAAS;AACT;;AAEA;;AAEA;AACA;;AAEA;AACA,gDAA+C,yGAAyG,EAAE;;AAE1J;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA,cAAa;;AAEb;AACA;;AAEA;AACA;AACA,cAAa;;AAEb;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,UAAS;AACT;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE,UAAU;AACvB;AACA;AACA,MAAK;AACL;AACA;;AAEA;;;;;;;AC1vBA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAkC;AAClC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;;;;;;ACvHA;;AAEA;;AAEA;;AAEA;AACA;AACA,mCAAkC;AAClC;AACA;AACA;;AAEA;AACA;AACA,mCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sCAAqC,mBAAmB;AACxD;;AAEA;AACA,sCAAqC,4BAA4B;AACjE;AACA;AACA,+BAA8B,4BAA4B;AAC1D;AACA;AACA;AACA,sCAAqC,gBAAgB;AACrD;AACA;AACA,+BAA8B,gBAAgB;AAC9C;AACA;;AAEA;AACA,+BAA8B,aAAa;AAC3C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACrKA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;ACnEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACzFA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;;;AClBD;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;AC/BA;;AAEA;AACA,iBAAgB,QAAQ;AACxB;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAgB,QAAQ;;AAExB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAgB,QAAQ;AACxB;AACA;AACA;AACA,cAAa,oBAAoB;AACjC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;AC3HA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,kBAAkB;AAC/B;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;AC7MA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;AChFA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gCAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,OAAO;AAC7C;AACA,qBAAoB,6CAA6C;AACjE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qCAAoC;AACpC;;AAEA,6BAA4B,gBAAgB;AAC5C;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAe,kBAAkB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,sCAAqC;AACrC;AACA,+BAA8B,aAAa;AAC3C;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACtPA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;;AAEA;;AAEA,oBAAmB,wBAAwB;AAC3C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACtGA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA,EAAC;AACD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA,4BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA,4BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,0BAAyB;AACzB;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,cAAa;AACb;AACA,cAAa;AACb;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAa;AACb,UAAS;;AAET;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,cAAa;AACb,UAAS;;AAET;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,cAAa;AACb;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;;AAEA,gDAA+C,SAAS;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAS;;AAET;AACA;AACA;AACA;;AAEA,gDAA+C,SAAS;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,EAAC;;;;;;;;AC/LD;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;;AAET;AACA,4DAA2D,UAAU;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,EAAC;;;;;;;AC1GD;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,+BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAqC,UAAU,sBAAsB;AACrE;AACA;AACA;AACA;;AAEA;AACA;AACA,oCAAmC;AACnC;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACrFA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;ACbA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAe,iBAAiB;AAChC;AACA;;AAEA;AACA;AACA;;AAEA,kBAAiB,gBAAgB;AACjC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,kBAAiB,SAAS;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AChKA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,4CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,sCAAqC;AACrC;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,4CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAA+B,gBAAgB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB;AACnB,8BAA6B,0BAA0B;AACvD;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,SAAS;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf,8BAA6B,0BAA0B;AACvD;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAmC,SAAS;AAC5C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA,oBAAmB,yBAAyB;AAC5C;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACnjBA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB,qBAAqB;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,uBAAsB,6BAA6B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,6BAA4B,QAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB,4BAA4B;AAC7C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,uBAAuB;AACpC;AACA;AACA;AACA,4BAA2B,sBAAsB;AACjD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"rollbar.noconflict.umd.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"rollbar\"] = factory();\n\telse\n\t\troot[\"rollbar\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 036c97698bf05106eb91","'use strict';\n\nvar rollbar = require('../rollbar');\n\nif ((typeof window !== 'undefined') && !window._rollbarStartTime) {\n window._rollbarStartTime = (new Date()).getTime();\n}\n\nmodule.exports = rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/bundles/rollbar.noconflict.js\n// module id = 1\n// module chunks = 0","'use strict';\n\nvar Client = require('../rollbar');\nvar _ = require('../utility');\nvar API = require('../api');\nvar logger = require('./logger');\nvar globals = require('./globalSetup');\n\nvar transport = require('./transport');\nvar urllib = require('./url');\n\nvar transforms = require('./transforms');\nvar sharedTransforms = require('../transforms');\nvar predicates = require('./predicates');\nvar sharedPredicates = require('../predicates');\nvar errorParser = require('./errorParser');\nvar Instrumenter = require('./telemetry');\n\nfunction Rollbar(options, client) {\n this.options = _.extend(true, defaultOptions, options);\n var api = new API(this.options, transport, urllib);\n this.client = client || new Client(this.options, api, logger, 'browser');\n\n var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n var gDocument = (typeof document != 'undefined') && document;\n addTransformsToNotifier(this.client.notifier);\n addPredicatesToQueue(this.client.queue);\n if (this.options.captureUncaught || this.options.handleUncaughtExceptions) {\n globals.captureUncaughtExceptions(gWindow, this);\n globals.wrapGlobals(gWindow, this);\n }\n if (this.options.captureUnhandledRejections || this.options.handleUnhandledRejections) {\n globals.captureUnhandledRejections(gWindow, this);\n }\n\n this.instrumenter = new Instrumenter(this.options, this.client.telemeter, this, gWindow, gDocument);\n this.instrumenter.instrument();\n}\n\nvar _instance = null;\nRollbar.init = function(options, client) {\n if (_instance) {\n return _instance.global(options).configure(options);\n }\n _instance = new Rollbar(options, client);\n return _instance;\n};\n\nfunction handleUninitialized(maybeCallback) {\n var message = 'Rollbar is not initialized';\n logger.error(message);\n if (maybeCallback) {\n maybeCallback(new Error(message));\n }\n}\n\nRollbar.prototype.global = function(options) {\n this.client.global(options);\n return this;\n};\nRollbar.global = function(options) {\n if (_instance) {\n return _instance.global(options);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.extend(true, {}, oldOptions, options, payload);\n this.client.configure(options, payloadData);\n this.instrumenter.configure(options);\n return this;\n};\nRollbar.configure = function(options, payloadData) {\n if (_instance) {\n return _instance.configure(options, payloadData);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.lastError = function() {\n return this.client.lastError;\n};\nRollbar.lastError = function() {\n if (_instance) {\n return _instance.lastError();\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.log = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.log(item);\n return {uuid: uuid};\n};\nRollbar.log = function() {\n if (_instance) {\n return _instance.log.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.debug = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.debug(item);\n return {uuid: uuid};\n};\nRollbar.debug = function() {\n if (_instance) {\n return _instance.debug.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.info = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.info(item);\n return {uuid: uuid};\n};\nRollbar.info = function() {\n if (_instance) {\n return _instance.info.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warn = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warn(item);\n return {uuid: uuid};\n};\nRollbar.warn = function() {\n if (_instance) {\n return _instance.warn.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warning = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warning(item);\n return {uuid: uuid};\n};\nRollbar.warning = function() {\n if (_instance) {\n return _instance.warning.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.error = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.error(item);\n return {uuid: uuid};\n};\nRollbar.error = function() {\n if (_instance) {\n return _instance.error.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.critical = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.critical(item);\n return {uuid: uuid};\n};\nRollbar.critical = function() {\n if (_instance) {\n return _instance.critical.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.handleUncaughtException = function(message, url, lineno, colno, error, context) {\n var item;\n var stackInfo = _.makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n 'onerror',\n 'uncaught exception',\n errorParser\n );\n if (_.isError(error)) {\n item = this._createItem([message, error, context]);\n item._unhandledStackInfo = stackInfo;\n } else if (_.isError(url)) {\n item = this._createItem([message, url, context]);\n item._unhandledStackInfo = stackInfo;\n } else {\n item = this._createItem([message, context]);\n item.stackInfo = stackInfo;\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n this.client.log(item);\n};\n\nRollbar.prototype.handleUnhandledRejection = function(reason, promise) {\n var message = 'unhandled rejection was null or undefined!';\n message = reason ? (reason.message || String(reason)) : message;\n var context = (reason && reason._rollbarContext) || (promise && promise._rollbarContext);\n\n var item;\n if (_.isError(reason)) {\n item = this._createItem([message, reason, context]);\n } else {\n item = this._createItem([message, reason, context]);\n item.stackInfo = _.makeUnhandledStackInfo(\n message,\n '',\n 0,\n 0,\n null,\n 'unhandledrejection',\n '',\n errorParser\n );\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n item._originalArgs = item._originalArgs || [];\n item._originalArgs.push(promise);\n this.client.log(item);\n};\n\nRollbar.prototype.wrap = function(f, context, _before) {\n try {\n var ctxFn;\n if(_.isFunction(context)) {\n ctxFn = context;\n } else {\n ctxFn = function() { return context || {}; };\n }\n\n if (!_.isFunction(f)) {\n return f;\n }\n\n if (f._isWrap) {\n return f;\n }\n\n if (!f._rollbar_wrapped) {\n f._rollbar_wrapped = function () {\n if (_before && _.isFunction(_before)) {\n _before.apply(this, arguments);\n }\n try {\n return f.apply(this, arguments);\n } catch(exc) {\n var e = exc;\n if (_.isType(e, 'string')) {\n e = new String(e);\n }\n e._rollbarContext = ctxFn() || {};\n e._rollbarContext._wrappedSource = f.toString();\n\n window._rollbarWrappedError = e;\n throw e;\n }\n };\n\n f._rollbar_wrapped._isWrap = true;\n\n if (f.hasOwnProperty) {\n for (var prop in f) {\n if (f.hasOwnProperty(prop)) {\n f._rollbar_wrapped[prop] = f[prop];\n }\n }\n }\n }\n\n return f._rollbar_wrapped;\n } catch (e) {\n // Return the original function if the wrap fails.\n return f;\n }\n};\nRollbar.wrap = function(f, context) {\n if (_instance) {\n return _instance.wrap(f, context);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.captureEvent = function(metadata, level) {\n return this.client.captureEvent(metadata, level);\n};\nRollbar.captureEvent = function(metadata, level) {\n if (_instance) {\n return _instance.captureEvent(metadata, level);\n } else {\n handleUninitialized();\n }\n};\n\n// The following two methods are used internally and are not meant for public use\nRollbar.prototype.captureDomContentLoaded = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureLoad(ts);\n};\n\n/* Internal */\n\nfunction addTransformsToNotifier(notifier) {\n notifier\n .addTransform(transforms.handleItemWithError)\n .addTransform(transforms.ensureItemHasSomethingToSay)\n .addTransform(transforms.addBaseInfo)\n .addTransform(transforms.addRequestInfo(window))\n .addTransform(transforms.addClientInfo(window))\n .addTransform(transforms.addPluginInfo(window))\n .addTransform(transforms.addBody)\n .addTransform(sharedTransforms.addMessageWithError)\n .addTransform(sharedTransforms.addTelemetryData)\n .addTransform(sharedTransforms.addConfigToPayload)\n .addTransform(transforms.scrubPayload)\n .addTransform(sharedTransforms.userTransform(logger))\n .addTransform(sharedTransforms.itemToPayload);\n}\n\nfunction addPredicatesToQueue(queue) {\n queue\n .addPredicate(sharedPredicates.checkLevel)\n .addPredicate(predicates.checkIgnore)\n .addPredicate(sharedPredicates.userCheckIgnore(logger))\n .addPredicate(sharedPredicates.urlIsNotBlacklisted(logger))\n .addPredicate(sharedPredicates.urlIsWhitelisted(logger))\n .addPredicate(sharedPredicates.messageIsIgnored(logger));\n}\n\nRollbar.prototype._createItem = function(args) {\n return _.createItem(args, logger, this);\n};\n\nfunction _getFirstFunction(args) {\n for (var i = 0, len = args.length; i < len; ++i) {\n if (_.isFunction(args[i])) {\n return args[i];\n }\n }\n return undefined;\n}\n\n/* global __NOTIFIER_VERSION__:false */\n/* global __DEFAULT_BROWSER_SCRUB_FIELDS__:false */\n/* global __DEFAULT_LOG_LEVEL__:false */\n/* global __DEFAULT_REPORT_LEVEL__:false */\n/* global __DEFAULT_UNCAUGHT_ERROR_LEVEL:false */\n/* global __DEFAULT_ENDPOINT__:false */\n\nvar defaultOptions = {\n version: __NOTIFIER_VERSION__,\n scrubFields: __DEFAULT_BROWSER_SCRUB_FIELDS__,\n logLevel: __DEFAULT_LOG_LEVEL__,\n reportLevel: __DEFAULT_REPORT_LEVEL__,\n uncaughtErrorLevel: __DEFAULT_UNCAUGHT_ERROR_LEVEL,\n endpoint: __DEFAULT_ENDPOINT__,\n verbose: false,\n enabled: true,\n sendConfig: false,\n includeItemsInTelemetry: true\n};\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/rollbar.js\n// module id = 2\n// module chunks = 0","'use strict';\n\nvar RateLimiter = require('./rateLimiter');\nvar Queue = require('./queue');\nvar Notifier = require('./notifier');\nvar Telemeter = require('./telemetry');\nvar _ = require('./utility');\n\n/*\n * Rollbar - the interface to Rollbar\n *\n * @param options\n * @param api\n * @param logger\n */\nfunction Rollbar(options, api, logger, platform) {\n this.options = _.extend(true, {}, options);\n this.logger = logger;\n Rollbar.rateLimiter.configureGlobal(this.options);\n Rollbar.rateLimiter.setPlatformOptions(platform, this.options);\n this.queue = new Queue(Rollbar.rateLimiter, api, logger, this.options);\n this.notifier = new Notifier(this.queue, this.options);\n this.telemeter = new Telemeter(this.options);\n this.lastError = null;\n}\n\nvar defaultOptions = {\n maxItems: 0,\n itemsPerMinute: 60\n};\n\nRollbar.rateLimiter = new RateLimiter(defaultOptions);\n\nRollbar.prototype.global = function(options) {\n Rollbar.rateLimiter.configureGlobal(options);\n return this;\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n this.notifier && this.notifier.configure(options);\n this.telemeter && this.telemeter.configure(options);\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.extend(true, {}, oldOptions, options, payload);\n this.global(this.options);\n return this;\n};\n\nRollbar.prototype.log = function(item) {\n var level = this._defaultLogLevel();\n return this._log(level, item);\n};\n\nRollbar.prototype.debug = function(item) {\n this._log('debug', item);\n};\n\nRollbar.prototype.info = function(item) {\n this._log('info', item);\n};\n\nRollbar.prototype.warn = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.warning = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.error = function(item) {\n this._log('error', item);\n};\n\nRollbar.prototype.critical = function(item) {\n this._log('critical', item);\n};\n\nRollbar.prototype.wait = function(callback) {\n this.queue.wait(callback);\n};\n\nRollbar.prototype.captureEvent = function(metadata, level) {\n return this.telemeter.captureEvent(metadata, level);\n};\n\nRollbar.prototype.captureDomContentLoaded = function(ts) {\n return this.telemeter.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(ts) {\n return this.telemeter.captureLoad(ts);\n};\n\n/* Internal */\n\nRollbar.prototype._log = function(defaultLevel, item) {\n if (this._sameAsLastError(item)) {\n if (item.callback) {\n item.callback();\n }\n return;\n }\n try {\n var callback = null;\n if (item.callback) {\n callback = item.callback;\n delete item.callback;\n }\n item.level = item.level || defaultLevel;\n this.telemeter._captureRollbarItem(item);\n item.telemetryEvents = this.telemeter.copyEvents();\n this.notifier.log(item, callback);\n } catch (e) {\n this.logger.error(e)\n }\n};\n\nRollbar.prototype._defaultLogLevel = function() {\n return this.options.logLevel || 'debug';\n};\n\nRollbar.prototype._sameAsLastError = function(item) {\n if (this.lastError && this.lastError === item.err) {\n return true;\n }\n this.lastError = item.err;\n return false;\n};\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rollbar.js\n// module id = 3\n// module chunks = 0","'use strict';\n\n/*\n * RateLimiter - an object that encapsulates the logic for counting items sent to Rollbar\n *\n * @param options - the same options that are accepted by configureGlobal offered as a convenience\n */\nfunction RateLimiter(options) {\n this.startTime = (new Date()).getTime();\n this.counter = 0;\n this.perMinCounter = 0;\n this.platform = null;\n this.platformOptions = {};\n this.configureGlobal(options);\n}\n\nRateLimiter.globalSettings = {\n startTime: (new Date()).getTime(),\n maxItems: undefined,\n itemsPerMinute: undefined\n};\n\n/*\n * configureGlobal - set the global rate limiter options\n *\n * @param options - Only the following values are recognized:\n * startTime: a timestamp of the form returned by (new Date()).getTime()\n * maxItems: the maximum items\n * itemsPerMinute: the max number of items to send in a given minute\n */\nRateLimiter.prototype.configureGlobal = function(options) {\n if (options.startTime !== undefined) {\n RateLimiter.globalSettings.startTime = options.startTime;\n }\n if (options.maxItems !== undefined) {\n RateLimiter.globalSettings.maxItems = options.maxItems;\n }\n if (options.itemsPerMinute !== undefined) {\n RateLimiter.globalSettings.itemsPerMinute = options.itemsPerMinute;\n }\n};\n\n/*\n * shouldSend - determine if we should send a given item based on rate limit settings\n *\n * @param item - the item we are about to send\n * @returns An object with the following structure:\n * error: (Error|null)\n * shouldSend: bool\n * payload: (Object|null)\n * If shouldSend is false, the item passed as a parameter should not be sent to Rollbar, and\n * exactly one of error or payload will be non-null. If error is non-null, the returned Error will\n * describe the situation, but it means that we were already over a rate limit (either globally or\n * per minute) when this item was checked. If error is null, and therefore payload is non-null, it\n * means this item put us over the global rate limit and the payload should be sent to Rollbar in\n * place of the passed in item.\n */\nRateLimiter.prototype.shouldSend = function(item, now) {\n now = now || (new Date()).getTime();\n if (now - this.startTime >= 60000) {\n this.startTime = now;\n this.perMinCounter = 0;\n }\n\n var globalRateLimit = RateLimiter.globalSettings.maxItems;\n var globalRateLimitPerMin = RateLimiter.globalSettings.itemsPerMinute;\n\n if (checkRate(item, globalRateLimit, this.counter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimit + ' max items reached', false);\n } else if (checkRate(item, globalRateLimitPerMin, this.perMinCounter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimitPerMin + ' items per minute reached', false);\n }\n this.counter++;\n this.perMinCounter++;\n\n var shouldSend = !checkRate(item, globalRateLimit, this.counter);\n var perMinute = shouldSend;\n shouldSend = shouldSend && !checkRate(item, globalRateLimitPerMin, this.perMinCounter);\n return shouldSendValue(this.platform, this.platformOptions, null, shouldSend, globalRateLimit, globalRateLimitPerMin, perMinute);\n};\n\nRateLimiter.prototype.setPlatformOptions = function(platform, options) {\n this.platform = platform;\n this.platformOptions = options;\n};\n\n/* Helpers */\n\nfunction checkRate(item, limit, counter) {\n return !item.ignoreRateLimit && limit >= 1 && counter > limit;\n}\n\nfunction shouldSendValue(platform, options, error, shouldSend, globalRateLimit, limitPerMin, perMinute) {\n var payload = null;\n if (error) {\n error = new Error(error);\n }\n if (!error && !shouldSend) {\n payload = rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute);\n }\n return {error: error, shouldSend: shouldSend, payload: payload};\n}\n\nfunction rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute) {\n var environment = options.environment || (options.payload && options.payload.environment);\n var msg;\n if (perMinute) {\n msg = 'item per minute limit reached, ignoring errors until timeout';\n } else {\n msg = 'maxItems has been hit, ignoring errors until reset.';\n }\n var item = {\n body: {\n message: {\n body: msg,\n extra: {\n maxItems: globalRateLimit,\n itemsPerMinute: limitPerMin\n }\n }\n },\n language: 'javascript',\n environment: environment,\n notifier: {\n version: (options.notifier && options.notifier.version) || options.version\n }\n };\n if (platform === 'browser') {\n item.platform = 'browser';\n item.framework = 'browser-js';\n item.notifier.name = 'rollbar-browser-js';\n } else if (platform === 'server') {\n item.framework = options.framework || 'node-js';\n item.notifier.name = options.notifier.name;\n } else if (platform === 'react-native') {\n item.framework = options.framework || 'react-native';\n item.notifier.name = options.notifier.name;\n }\n return item;\n}\n\nmodule.exports = RateLimiter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rateLimiter.js\n// module id = 4\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Queue - an object which handles which handles a queue of items to be sent to Rollbar.\n * This object handles rate limiting via a passed in rate limiter, retries based on connection\n * errors, and filtering of items based on a set of configurable predicates. The communication to\n * the backend is performed via a given API object.\n *\n * @param rateLimiter - An object which conforms to the interface\n * rateLimiter.shouldSend(item) -> bool\n * @param api - An object which conforms to the interface\n * api.postItem(payload, function(err, response))\n * @param logger - An object used to log verbose messages if desired\n * @param options - see Queue.prototype.configure\n */\nfunction Queue(rateLimiter, api, logger, options) {\n this.rateLimiter = rateLimiter;\n this.api = api;\n this.logger = logger;\n this.options = options;\n this.predicates = [];\n this.pendingItems = [];\n this.pendingRequests = [];\n this.retryQueue = [];\n this.retryHandle = null;\n this.waitCallback = null;\n this.waitIntervalID = null;\n}\n\n/*\n * configure - updates the options this queue uses\n *\n * @param options\n */\nQueue.prototype.configure = function(options) {\n this.api && this.api.configure(options);\n var oldOptions = this.options;\n this.options = _.extend(true, {}, oldOptions, options);\n return this;\n};\n\n/*\n * addPredicate - adds a predicate to the end of the list of predicates for this queue\n *\n * @param predicate - function(item, options) -> (bool|{err: Error})\n * Returning true means that this predicate passes and the item is okay to go on the queue\n * Returning false means do not add the item to the queue, but it is not an error\n * Returning {err: Error} means do not add the item to the queue, and the given error explains why\n * Returning {err: undefined} is equivalent to returning true but don't do that\n */\nQueue.prototype.addPredicate = function(predicate) {\n if (_.isFunction(predicate)) {\n this.predicates.push(predicate);\n }\n return this;\n};\n\nQueue.prototype.addPendingItem = function(item) {\n this.pendingItems.push(item);\n};\n\nQueue.prototype.removePendingItem = function(item) {\n var idx = this.pendingItems.indexOf(item);\n if (idx !== -1) {\n this.pendingItems.splice(idx, 1);\n }\n};\n\n/*\n * addItem - Send an item to the Rollbar API if all of the predicates are satisfied\n *\n * @param item - The payload to send to the backend\n * @param callback - function(error, repsonse) which will be called with the response from the API\n * in the case of a success, otherwise response will be null and error will have a value. If both\n * error and response are null then the item was stopped by a predicate which did not consider this\n * to be an error condition, but nonetheless did not send the item to the API.\n * @param originalError - The original error before any transformations that is to be logged if any\n */\nQueue.prototype.addItem = function(item, callback, originalError, originalItem) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() { return; };\n }\n var predicateResult = this._applyPredicates(item);\n if (predicateResult.stop) {\n this.removePendingItem(originalItem);\n callback(predicateResult.err);\n return;\n }\n this._maybeLog(item, originalError);\n this.removePendingItem(originalItem);\n this.pendingRequests.push(item);\n try {\n this._makeApiRequest(item, function(err, resp) {\n this._dequeuePendingRequest(item);\n callback(err, resp);\n }.bind(this));\n } catch (e) {\n this._dequeuePendingRequest(item);\n callback(e);\n }\n};\n\n/*\n * wait - Stop any further errors from being added to the queue, and get called back when all items\n * currently processing have finished sending to the backend.\n *\n * @param callback - function() called when all pending items have been sent\n */\nQueue.prototype.wait = function(callback) {\n if (!_.isFunction(callback)) {\n return;\n }\n this.waitCallback = callback;\n if (this._maybeCallWait()) {\n return;\n }\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitIntervalID = setInterval(function() {\n this._maybeCallWait();\n }.bind(this), 500);\n};\n\n/* _applyPredicates - Sequentially applies the predicates that have been added to the queue to the\n * given item with the currently configured options.\n *\n * @param item - An item in the queue\n * @returns {stop: bool, err: (Error|null)} - stop being true means do not add item to the queue,\n * the error value should be passed up to a callbak if we are stopping.\n */\nQueue.prototype._applyPredicates = function(item) {\n var p = null;\n for (var i = 0, len = this.predicates.length; i < len; i++) {\n p = this.predicates[i](item, this.options);\n if (!p || p.err !== undefined) {\n return {stop: true, err: p.err};\n }\n }\n return {stop: false, err: null};\n};\n\n/*\n * _makeApiRequest - Send an item to Rollbar, callback when done, if there is an error make an\n * effort to retry if we are configured to do so.\n *\n * @param item - an item ready to send to the backend\n * @param callback - function(err, response)\n */\nQueue.prototype._makeApiRequest = function(item, callback) {\n var rateLimitResponse = this.rateLimiter.shouldSend(item);\n if (rateLimitResponse.shouldSend) {\n this.api.postItem(item, function(err, resp) {\n if (err) {\n this._maybeRetry(err, item, callback);\n } else {\n callback(err, resp);\n }\n }.bind(this));\n } else if (rateLimitResponse.error) {\n callback(rateLimitResponse.error);\n } else {\n this.api.postItem(rateLimitResponse.payload, callback);\n }\n};\n\n// These are errors basically mean there is no internet connection\nvar RETRIABLE_ERRORS = ['ECONNRESET', 'ENOTFOUND', 'ESOCKETTIMEDOUT', 'ETIMEDOUT', 'ECONNREFUSED', 'EHOSTUNREACH', 'EPIPE', 'EAI_AGAIN'];\n\n/*\n * _maybeRetry - Given the error returned by the API, decide if we should retry or just callback\n * with the error.\n *\n * @param err - an error returned by the API transport\n * @param item - the item that was trying to be sent when this error occured\n * @param callback - function(err, response)\n */\nQueue.prototype._maybeRetry = function(err, item, callback) {\n var shouldRetry = false;\n if (this.options.retryInterval) {\n for (var i = 0, len = RETRIABLE_ERRORS.length; i < len; i++) {\n if (err.code === RETRIABLE_ERRORS[i]) {\n shouldRetry = true;\n break;\n }\n }\n }\n if (shouldRetry) {\n this._retryApiRequest(item, callback);\n } else {\n callback(err);\n }\n};\n\n/*\n * _retryApiRequest - Add an item and a callback to a queue and possibly start a timer to process\n * that queue based on the retryInterval in the options for this queue.\n *\n * @param item - an item that failed to send due to an error we deem retriable\n * @param callback - function(err, response)\n */\nQueue.prototype._retryApiRequest = function(item, callback) {\n this.retryQueue.push({item: item, callback: callback});\n\n if (!this.retryHandle) {\n this.retryHandle = setInterval(function() {\n while (this.retryQueue.length) {\n var retryObject = this.retryQueue.shift();\n this._makeApiRequest(retryObject.item, retryObject.callback);\n }\n }.bind(this), this.options.retryInterval);\n }\n};\n\n/*\n * _dequeuePendingRequest - Removes the item from the pending request queue, this queue is used to\n * enable to functionality of providing a callback that clients can pass to `wait` to be notified\n * when the pending request queue has been emptied. This must be called when the API finishes\n * processing this item. If a `wait` callback is configured, it is called by this function.\n *\n * @param item - the item previously added to the pending request queue\n */\nQueue.prototype._dequeuePendingRequest = function(item) {\n var idx = this.pendingRequests.indexOf(item);\n if (idx !== -1) {\n this.pendingRequests.splice(idx, 1);\n this._maybeCallWait();\n }\n};\n\nQueue.prototype._maybeLog = function(data, originalError) {\n if (this.logger && this.options.verbose) {\n var message = originalError;\n message = message || _.get(data, 'body.trace.exception.message');\n message = message || _.get(data, 'body.trace_chain.0.exception.message');\n if (message) {\n this.logger.error(message);\n return;\n }\n message = _.get(data, 'body.message.body');\n if (message) {\n this.logger.log(message);\n }\n }\n};\n\nQueue.prototype._maybeCallWait = function() {\n if (_.isFunction(this.waitCallback) && this.pendingItems.length === 0 && this.pendingRequests.length === 0) {\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitCallback();\n return true;\n }\n return false;\n};\n\nmodule.exports = Queue;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/queue.js\n// module id = 5\n// module chunks = 0","'use strict';\n\nvar extend = require('extend');\n\nvar RollbarJSON = {};\nvar __initRollbarJSON = false;\nfunction setupJSON() {\n if (__initRollbarJSON) {\n return;\n }\n __initRollbarJSON = true;\n\n if (isDefined(JSON)) {\n if (isNativeFunction(JSON.stringify)) {\n RollbarJSON.stringify = JSON.stringify;\n }\n if (isNativeFunction(JSON.parse)) {\n RollbarJSON.parse = JSON.parse;\n }\n }\n if (!isFunction(RollbarJSON.stringify) || !isFunction(RollbarJSON.parse)) {\n var setupCustomJSON = require('../vendor/JSON-js/json3.js');\n setupCustomJSON(RollbarJSON);\n }\n}\nsetupJSON();\n\n/*\n * isType - Given a Javascript value and a string, returns true if the type of the value matches the\n * given string.\n *\n * @param x - any value\n * @param t - a lowercase string containing one of the following type names:\n * - undefined\n * - null\n * - error\n * - number\n * - boolean\n * - string\n * - symbol\n * - function\n * - object\n * - array\n * @returns true if x is of type t, otherwise false\n */\nfunction isType(x, t) {\n return t === typeName(x);\n}\n\n/*\n * typeName - Given a Javascript value, returns the type of the object as a string\n */\nfunction typeName(x) {\n var name = typeof x;\n if (name !== 'object') {\n return name;\n }\n if (!x) {\n return 'null';\n }\n if (x instanceof Error) {\n return 'error';\n }\n return ({}).toString.call(x).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n}\n\n/* isFunction - a convenience function for checking if a value is a function\n *\n * @param f - any value\n * @returns true if f is a function, otherwise false\n */\nfunction isFunction(f) {\n return isType(f, 'function');\n}\n\n/* isNativeFunction - a convenience function for checking if a value is a native JS function\n *\n * @param f - any value\n * @returns true if f is a native JS function, otherwise false\n */\nfunction isNativeFunction(f) {\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n var funcMatchString = Function.prototype.toString.call(Object.prototype.hasOwnProperty)\n .replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?');\n var reIsNative = RegExp('^' + funcMatchString + '$');\n return isObject(f) && reIsNative.test(f);\n}\n\n/* isObject - Checks if the argument is an object\n *\n * @param value - any value\n * @returns true is value is an object function is an object)\n*/\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/*\n * isDefined - a convenience function for checking if a value is not equal to undefined\n *\n * @param u - any value\n * @returns true if u is anything other than undefined\n */\nfunction isDefined(u) {\n return !isType(u, 'undefined');\n}\n\n/*\n * isIterable - convenience function for checking if a value can be iterated, essentially\n * whether it is an object or an array.\n *\n * @param i - any value\n * @returns true if i is an object or an array as determined by `typeName`\n */\nfunction isIterable(i) {\n var type = typeName(i);\n return (type === 'object' || type === 'array');\n}\n\n/*\n * isError - convenience function for checking if a value is of an error type\n *\n * @param e - any value\n * @returns true if e is an error\n */\nfunction isError(e) {\n return isType(e, 'error');\n}\n\nfunction traverse(obj, func, seen) {\n var k, v, i;\n var isObj = isType(obj, 'object');\n var isArray = isType(obj, 'array');\n var keys = [];\n\n if (isObj && seen.indexOf(obj) !== -1) {\n return obj;\n }\n seen.push(obj);\n\n if (isObj) {\n for (k in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, k)) {\n keys.push(k);\n }\n }\n } else if (isArray) {\n for (i = 0; i < obj.length; ++i) {\n keys.push(i);\n }\n }\n\n var result = isObj ? {} : [];\n for (i = 0; i < keys.length; ++i) {\n k = keys[i];\n v = obj[k];\n result[k] = func(k, v, seen);\n }\n\n return (keys.length != 0) ? result : obj;\n}\n\nfunction redact() {\n return '********';\n}\n\n// from http://stackoverflow.com/a/8809472/1138191\nfunction uuid4() {\n var d = now();\n var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (d + Math.random() * 16) % 16 | 0;\n d = Math.floor(d / 16);\n return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16);\n });\n return uuid;\n}\n\nvar LEVELS = {\n debug: 0,\n info: 1,\n warning: 2,\n error: 3,\n critical: 4\n};\n\nfunction sanitizeUrl(url) {\n var baseUrlParts = parseUri(url);\n // remove a trailing # if there is no anchor\n if (baseUrlParts.anchor === '') {\n baseUrlParts.source = baseUrlParts.source.replace('#', '');\n }\n\n url = baseUrlParts.source.replace('?' + baseUrlParts.query, '');\n return url;\n}\n\nvar parseUriOptions = {\n strictMode: false,\n key: [\n 'source',\n 'protocol',\n 'authority',\n 'userInfo',\n 'user',\n 'password',\n 'host',\n 'port',\n 'relative',\n 'path',\n 'directory',\n 'file',\n 'query',\n 'anchor'\n ],\n q: {\n name: 'queryKey',\n parser: /(?:^|&)([^&=]*)=?([^&]*)/g\n },\n parser: {\n strict: /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,\n loose: /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/\n }\n};\n\nfunction parseUri(str) {\n if (!isType(str, 'string')) {\n throw new Error('received invalid input');\n }\n\n var o = parseUriOptions;\n var m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str);\n var uri = {};\n var i = o.key.length;\n\n while (i--) {\n uri[o.key[i]] = m[i] || '';\n }\n\n uri[o.q.name] = {};\n uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {\n if ($1) {\n uri[o.q.name][$1] = $2;\n }\n });\n\n return uri;\n}\n\nfunction addParamsAndAccessTokenToPath(accessToken, options, params) {\n params = params || {};\n params.access_token = accessToken;\n var paramsArray = [];\n var k;\n for (k in params) {\n if (Object.prototype.hasOwnProperty.call(params, k)) {\n paramsArray.push([k, params[k]].join('='));\n }\n }\n var query = '?' + paramsArray.sort().join('&');\n\n options = options || {};\n options.path = options.path || '';\n var qs = options.path.indexOf('?');\n var h = options.path.indexOf('#');\n var p;\n if (qs !== -1 && (h === -1 || h > qs)) {\n p = options.path;\n options.path = p.substring(0,qs) + query + '&' + p.substring(qs+1);\n } else {\n if (h !== -1) {\n p = options.path;\n options.path = p.substring(0,h) + query + p.substring(h);\n } else {\n options.path = options.path + query;\n }\n }\n}\n\nfunction formatUrl(u, protocol) {\n protocol = protocol || u.protocol;\n if (!protocol && u.port) {\n if (u.port === 80) {\n protocol = 'http:';\n } else if (u.port === 443) {\n protocol = 'https:';\n }\n }\n protocol = protocol || 'https:';\n\n if (!u.hostname) {\n return null;\n }\n var result = protocol + '//' + u.hostname;\n if (u.port) {\n result = result + ':' + u.port;\n }\n if (u.path) {\n result = result + u.path;\n }\n return result;\n}\n\nfunction stringify(obj, backup) {\n var value, error;\n try {\n value = RollbarJSON.stringify(obj);\n } catch (jsonError) {\n if (backup && isFunction(backup)) {\n try {\n value = backup(obj);\n } catch (backupError) {\n error = backupError;\n }\n } else {\n error = jsonError;\n }\n }\n return {error: error, value: value};\n}\n\nfunction jsonParse(s) {\n var value, error;\n try {\n value = RollbarJSON.parse(s);\n } catch (e) {\n error = e;\n }\n return {error: error, value: value};\n}\n\nfunction makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n mode,\n backupMessage,\n errorParser\n) {\n var location = {\n url: url || '',\n line: lineno,\n column: colno\n };\n location.func = errorParser.guessFunctionName(location.url, location.line);\n location.context = errorParser.gatherContext(location.url, location.line);\n var href = document && document.location && document.location.href;\n var useragent = window && window.navigator && window.navigator.userAgent;\n return {\n 'mode': mode,\n 'message': error ? String(error) : (message || backupMessage),\n 'url': href,\n 'stack': [location],\n 'useragent': useragent\n };\n}\n\nfunction wrapCallback(logger, f) {\n return function(err, resp) {\n try {\n f(err, resp);\n } catch (e) {\n logger.error(e);\n }\n };\n}\n\nfunction createItem(args, logger, notifier, requestKeys, lambdaContext) {\n var message, err, custom, callback, request;\n var arg;\n var extraArgs = [];\n\n for (var i = 0, l = args.length; i < l; ++i) {\n arg = args[i];\n\n var typ = typeName(arg);\n switch (typ) {\n case 'undefined':\n break;\n case 'string':\n message ? extraArgs.push(arg) : message = arg;\n break;\n case 'function':\n callback = wrapCallback(logger, arg);\n break;\n case 'date':\n extraArgs.push(arg);\n break;\n case 'error':\n case 'domexception':\n err ? extraArgs.push(arg) : err = arg;\n break;\n case 'object':\n case 'array':\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n if (requestKeys && typ === 'object' && !request) {\n for (var j = 0, len = requestKeys.length; j < len; ++j) {\n if (arg[requestKeys[j]] !== undefined) {\n request = arg;\n break;\n }\n }\n if (request) {\n break;\n }\n }\n custom ? extraArgs.push(arg) : custom = arg;\n break;\n default:\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n extraArgs.push(arg);\n }\n }\n\n if (extraArgs.length > 0) {\n // if custom is an array this turns it into an object with integer keys\n custom = extend(true, {}, custom);\n custom.extraArgs = extraArgs;\n }\n\n var item = {\n message: message,\n err: err,\n custom: custom,\n timestamp: now(),\n callback: callback,\n uuid: uuid4()\n };\n if (custom && custom.level !== undefined) {\n item.level = custom.level;\n delete custom.level;\n }\n if (requestKeys && request) {\n item.request = request;\n }\n if (lambdaContext) {\n item.lambdaContext = lambdaContext;\n }\n item._originalArgs = args;\n return item;\n}\n\n/*\n * get - given an obj/array and a keypath, return the value at that keypath or\n * undefined if not possible.\n *\n * @param obj - an object or array\n * @param path - a string of keys separated by '.' such as 'plugin.jquery.0.message'\n * which would correspond to 42 in `{plugin: {jquery: [{message: 42}]}}`\n */\nfunction get(obj, path) {\n if (!obj) {\n return undefined;\n }\n var keys = path.split('.');\n var result = obj;\n try {\n for (var i = 0, len = keys.length; i < len; ++i) {\n result = result[keys[i]];\n }\n } catch (e) {\n result = undefined;\n }\n return result;\n}\n\nfunction set(obj, path, value) {\n if (!obj) {\n return;\n }\n var keys = path.split('.');\n var len = keys.length;\n if (len < 1) {\n return;\n }\n if (len === 1) {\n obj[keys[0]] = value;\n return;\n }\n try {\n var temp = obj[keys[0]] || {};\n var replacement = temp;\n for (var i = 1; i < len-1; i++) {\n temp[keys[i]] = temp[keys[i]] || {};\n temp = temp[keys[i]];\n }\n temp[keys[len-1]] = value;\n obj[keys[0]] = replacement;\n } catch (e) {\n return;\n }\n}\n\nfunction scrub(data, scrubFields) {\n scrubFields = scrubFields || [];\n var paramRes = _getScrubFieldRegexs(scrubFields);\n var queryRes = _getScrubQueryParamRegexs(scrubFields);\n\n function redactQueryParam(dummy0, paramPart, dummy1, dummy2, dummy3, valPart) {\n return paramPart + redact(valPart);\n }\n\n function paramScrubber(v) {\n var i;\n if (isType(v, 'string')) {\n for (i = 0; i < queryRes.length; ++i) {\n v = v.replace(queryRes[i], redactQueryParam);\n }\n }\n return v;\n }\n\n function valScrubber(k, v) {\n var i;\n for (i = 0; i < paramRes.length; ++i) {\n if (paramRes[i].test(k)) {\n v = redact(v);\n break;\n }\n }\n return v;\n }\n\n function scrubber(k, v, seen) {\n var tmpV = valScrubber(k, v);\n if (tmpV === v) {\n if (isType(v, 'object') || isType(v, 'array')) {\n return traverse(v, scrubber, seen);\n }\n return paramScrubber(tmpV);\n } else {\n return tmpV;\n }\n }\n\n return traverse(data, scrubber, []);\n}\n\nfunction _getScrubFieldRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '^\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?$';\n ret.push(new RegExp(pat, 'i'));\n }\n return ret;\n}\n\n\nfunction _getScrubQueryParamRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?';\n ret.push(new RegExp('(' + pat + '=)([^&\\\\n]+)', 'igm'));\n }\n return ret;\n}\n\nfunction formatArgsAsString(args) {\n var i, len, arg;\n var result = [];\n for (i = 0, len = args.length; i < len; i++) {\n arg = args[i];\n if (typeof arg === 'object') {\n arg = stringify(arg);\n arg = arg.error || arg.value;\n if (arg.length > 500)\n arg = arg.substr(0,500)+'...';\n } else if (typeof arg === 'undefined') {\n arg = 'undefined';\n }\n result.push(arg);\n }\n return result.join(' ');\n}\n\nfunction now() {\n if (Date.now) {\n return +Date.now();\n }\n return +new Date();\n}\n\nmodule.exports = {\n isType: isType,\n typeName: typeName,\n isFunction: isFunction,\n isNativeFunction: isNativeFunction,\n isIterable: isIterable,\n isError: isError,\n extend: extend,\n traverse: traverse,\n redact: redact,\n uuid4: uuid4,\n LEVELS: LEVELS,\n sanitizeUrl: sanitizeUrl,\n addParamsAndAccessTokenToPath: addParamsAndAccessTokenToPath,\n formatUrl: formatUrl,\n stringify: stringify,\n jsonParse: jsonParse,\n makeUnhandledStackInfo: makeUnhandledStackInfo,\n createItem: createItem,\n get: get,\n set: set,\n scrub: scrub,\n formatArgsAsString: formatArgsAsString,\n now: now\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/utility.js\n// module id = 6\n// module chunks = 0","'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) {/**/}\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[0],\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t} else if ((typeof target !== 'object' && typeof target !== 'function') || target == null) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = target[name];\n\t\t\t\tcopy = options[name];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\ttarget[name] = extend(deep, clone, copy);\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/extend/index.js\n// module id = 7\n// module chunks = 0","// json3.js\n// 2017-02-21\n// Public Domain.\n// NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n// See http://www.JSON.org/js.html\n// This code should be minified before deployment.\n// See http://javascript.crockford.com/jsmin.html\n\n// USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n// NOT CONTROL.\n\n// This file creates a global JSON object containing two methods: stringify\n// and parse. This file provides the ES5 JSON capability to ES3 systems.\n// If a project might run on IE8 or earlier, then this file should be included.\n// This file does nothing on ES5 systems.\n\n// JSON.stringify(value, replacer, space)\n// value any JavaScript value, usually an object or array.\n// replacer an optional parameter that determines how object\n// values are stringified for objects. It can be a\n// function or an array of strings.\n// space an optional parameter that specifies the indentation\n// of nested structures. If it is omitted, the text will\n// be packed without extra whitespace. If it is a number,\n// it will specify the number of spaces to indent at each\n// level. If it is a string (such as \"\\t\" or \" \"),\n// it contains the characters used to indent at each level.\n// This method produces a JSON text from a JavaScript value.\n// When an object value is found, if the object contains a toJSON\n// method, its toJSON method will be called and the result will be\n// stringified. A toJSON method does not serialize: it returns the\n// value represented by the name/value pair that should be serialized,\n// or undefined if nothing should be serialized. The toJSON method\n// will be passed the key associated with the value, and this will be\n// bound to the value.\n\n// For example, this would serialize Dates as ISO strings.\n\n// Date.prototype.toJSON = function (key) {\n// function f(n) {\n// // Format integers to have at least two digits.\n// return (n < 10)\n// ? \"0\" + n\n// : n;\n// }\n// return this.getUTCFullYear() + \"-\" +\n// f(this.getUTCMonth() + 1) + \"-\" +\n// f(this.getUTCDate()) + \"T\" +\n// f(this.getUTCHours()) + \":\" +\n// f(this.getUTCMinutes()) + \":\" +\n// f(this.getUTCSeconds()) + \"Z\";\n// };\n\n// You can provide an optional replacer method. It will be passed the\n// key and value of each member, with this bound to the containing\n// object. The value that is returned from your method will be\n// serialized. If your method returns undefined, then the member will\n// be excluded from the serialization.\n\n// If the replacer parameter is an array of strings, then it will be\n// used to select the members to be serialized. It filters the results\n// such that only members with keys listed in the replacer array are\n// stringified.\n\n// Values that do not have JSON representations, such as undefined or\n// functions, will not be serialized. Such values in objects will be\n// dropped; in arrays they will be replaced with null. You can use\n// a replacer function to replace those with JSON values.\n\n// JSON.stringify(undefined) returns undefined.\n\n// The optional space parameter produces a stringification of the\n// value that is filled with line breaks and indentation to make it\n// easier to read.\n\n// If the space parameter is a non-empty string, then that string will\n// be used for indentation. If the space parameter is a number, then\n// the indentation will be that many spaces.\n\n// Example:\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}]);\n// // text is '[\"e\",{\"pluribus\":\"unum\"}]'\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}], null, \"\\t\");\n// // text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\n\n// text = JSON.stringify([new Date()], function (key, value) {\n// return this[key] instanceof Date\n// ? \"Date(\" + this[key] + \")\"\n// : value;\n// });\n// // text is '[\"Date(---current time---)\"]'\n\n// JSON.parse(text, reviver)\n// This method parses a JSON text to produce an object or array.\n// It can throw a SyntaxError exception.\n// This has been modified to use JSON-js/json_parse_state.js as the\n// parser instead of the one built around eval found in JSON-js/json2.js\n\n// The optional reviver parameter is a function that can filter and\n// transform the results. It receives each of the keys and values,\n// and its return value is used instead of the original value.\n// If it returns what it received, then the structure is not modified.\n// If it returns undefined then the member is deleted.\n\n// Example:\n\n// // Parse the text. Values that look like ISO date strings will\n// // be converted to Date objects.\n\n// myData = JSON.parse(text, function (key, value) {\n// var a;\n// if (typeof value === \"string\") {\n// a =\n// /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n// if (a) {\n// return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n// +a[5], +a[6]));\n// }\n// }\n// return value;\n// });\n\n// myData = JSON.parse('[\"Date(09/09/2001)\"]', function (key, value) {\n// var d;\n// if (typeof value === \"string\" &&\n// value.slice(0, 5) === \"Date(\" &&\n// value.slice(-1) === \")\") {\n// d = new Date(value.slice(5, -1));\n// if (d) {\n// return d;\n// }\n// }\n// return value;\n// });\n\n// This is a reference implementation. You are free to copy, modify, or\n// redistribute.\n\n/*jslint\n for, this\n */\n\n/*property\n JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\n getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\n lastIndex, length, parse, prototype, push, replace, slice, stringify,\n test, toJSON, toString, valueOf\n */\n\nvar setupCustomJSON = function(JSON) {\n\n var rx_one = /^[\\],:{}\\s]*$/;\n var rx_two = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g;\n var rx_three = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\n var rx_four = /(?:^|:|,)(?:\\s*\\[)+/g;\n var rx_escapable = /[\\\\\"\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n var rx_dangerous = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\n function f(n) {\n // Format integers to have at least two digits.\n return n < 10\n ? \"0\" + n\n : n;\n }\n\n function this_value() {\n return this.valueOf();\n }\n\n if (typeof Date.prototype.toJSON !== \"function\") {\n\n Date.prototype.toJSON = function () {\n\n return isFinite(this.valueOf())\n ? this.getUTCFullYear() + \"-\" +\n f(this.getUTCMonth() + 1) + \"-\" +\n f(this.getUTCDate()) + \"T\" +\n f(this.getUTCHours()) + \":\" +\n f(this.getUTCMinutes()) + \":\" +\n f(this.getUTCSeconds()) + \"Z\"\n : null;\n };\n\n Boolean.prototype.toJSON = this_value;\n Number.prototype.toJSON = this_value;\n String.prototype.toJSON = this_value;\n }\n\n var gap;\n var indent;\n var meta;\n var rep;\n\n\n function quote(string) {\n\n // If the string contains no control characters, no quote characters, and no\n // backslash characters, then we can safely slap some quotes around it.\n // Otherwise we must also replace the offending characters with safe escape\n // sequences.\n\n rx_escapable.lastIndex = 0;\n return rx_escapable.test(string)\n ? \"\\\"\" + string.replace(rx_escapable, function (a) {\n var c = meta[a];\n return typeof c === \"string\"\n ? c\n : \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n }) + \"\\\"\"\n : \"\\\"\" + string + \"\\\"\";\n }\n\n\n function str(key, holder) {\n\n // Produce a string from holder[key].\n\n var i; // The loop counter.\n var k; // The member key.\n var v; // The member value.\n var length;\n var mind = gap;\n var partial;\n var value = holder[key];\n\n // If the value has a toJSON method, call it to obtain a replacement value.\n\n if (value && typeof value === \"object\" &&\n typeof value.toJSON === \"function\") {\n value = value.toJSON(key);\n }\n\n // If we were called with a replacer function, then call the replacer to\n // obtain a replacement value.\n\n if (typeof rep === \"function\") {\n value = rep.call(holder, key, value);\n }\n\n // What happens next depends on the value's type.\n\n switch (typeof value) {\n case \"string\":\n return quote(value);\n\n case \"number\":\n\n // JSON numbers must be finite. Encode non-finite numbers as null.\n\n return isFinite(value)\n ? String(value)\n : \"null\";\n\n case \"boolean\":\n case \"null\":\n\n // If the value is a boolean or null, convert it to a string. Note:\n // typeof null does not produce \"null\". The case is included here in\n // the remote chance that this gets fixed someday.\n\n return String(value);\n\n // If the type is \"object\", we might be dealing with an object or an array or\n // null.\n\n case \"object\":\n\n // Due to a specification blunder in ECMAScript, typeof null is \"object\",\n // so watch out for that case.\n\n if (!value) {\n return \"null\";\n }\n\n // Make an array to hold the partial results of stringifying this object value.\n\n gap += indent;\n partial = [];\n\n // Is the value an array?\n\n if (Object.prototype.toString.apply(value) === \"[object Array]\") {\n\n // The value is an array. Stringify every element. Use null as a placeholder\n // for non-JSON values.\n\n length = value.length;\n for (i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || \"null\";\n }\n\n // Join all of the elements together, separated with commas, and wrap them in\n // brackets.\n\n v = partial.length === 0\n ? \"[]\"\n : gap\n ? \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\"\n : \"[\" + partial.join(\",\") + \"]\";\n gap = mind;\n return v;\n }\n\n // If the replacer is an array, use it to select the members to be stringified.\n\n if (rep && typeof rep === \"object\") {\n length = rep.length;\n for (i = 0; i < length; i += 1) {\n if (typeof rep[i] === \"string\") {\n k = rep[i];\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n } else {\n\n // Otherwise, iterate through all of the keys in the object.\n\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n }\n\n // Join all of the member texts together, separated with commas,\n // and wrap them in braces.\n\n v = partial.length === 0\n ? \"{}\"\n : gap\n ? \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\"\n : \"{\" + partial.join(\",\") + \"}\";\n gap = mind;\n return v;\n }\n }\n\n // If the JSON object does not yet have a stringify method, give it one.\n\n if (typeof JSON.stringify !== \"function\") {\n meta = { // table of character substitutions\n \"\\b\": \"\\\\b\",\n \"\\t\": \"\\\\t\",\n \"\\n\": \"\\\\n\",\n \"\\f\": \"\\\\f\",\n \"\\r\": \"\\\\r\",\n \"\\\"\": \"\\\\\\\"\",\n \"\\\\\": \"\\\\\\\\\"\n };\n JSON.stringify = function (value, replacer, space) {\n\n // The stringify method takes a value and an optional replacer, and an optional\n // space parameter, and returns a JSON text. The replacer can be a function\n // that can replace values, or an array of strings that will select the keys.\n // A default replacer method can be provided. Use of the space parameter can\n // produce text that is more easily readable.\n\n var i;\n gap = \"\";\n indent = \"\";\n\n // If the space parameter is a number, make an indent string containing that\n // many spaces.\n\n if (typeof space === \"number\") {\n for (i = 0; i < space; i += 1) {\n indent += \" \";\n }\n\n // If the space parameter is a string, it will be used as the indent string.\n\n } else if (typeof space === \"string\") {\n indent = space;\n }\n\n // If there is a replacer, it must be a function or an array.\n // Otherwise, throw an error.\n\n rep = replacer;\n if (replacer && typeof replacer !== \"function\" &&\n (typeof replacer !== \"object\" ||\n typeof replacer.length !== \"number\")) {\n throw new Error(\"JSON.stringify\");\n }\n\n // Make a fake root object containing our value under the key of \"\".\n // Return the result of stringifying the value.\n\n return str(\"\", {\"\": value});\n };\n }\n\n\n // If the JSON object does not yet have a parse method, give it one.\n\n if (typeof JSON.parse !== \"function\") {\n JSON.parse = (function () {\n\n // This function creates a JSON parse function that uses a state machine rather\n // than the dangerous eval function to parse a JSON text.\n\n var state; // The state of the parser, one of\n // 'go' The starting state\n // 'ok' The final, accepting state\n // 'firstokey' Ready for the first key of the object or\n // the closing of an empty object\n // 'okey' Ready for the next key of the object\n // 'colon' Ready for the colon\n // 'ovalue' Ready for the value half of a key/value pair\n // 'ocomma' Ready for a comma or closing }\n // 'firstavalue' Ready for the first value of an array or\n // an empty array\n // 'avalue' Ready for the next value of an array\n // 'acomma' Ready for a comma or closing ]\n var stack; // The stack, for controlling nesting.\n var container; // The current container object or array\n var key; // The current key\n var value; // The current value\n var escapes = { // Escapement translation table\n \"\\\\\": \"\\\\\",\n \"\\\"\": \"\\\"\",\n \"/\": \"/\",\n \"t\": \"\\t\",\n \"n\": \"\\n\",\n \"r\": \"\\r\",\n \"f\": \"\\f\",\n \"b\": \"\\b\"\n };\n var string = { // The actions for string tokens\n go: function () {\n state = \"ok\";\n },\n firstokey: function () {\n key = value;\n state = \"colon\";\n },\n okey: function () {\n key = value;\n state = \"colon\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var number = { // The actions for number tokens\n go: function () {\n state = \"ok\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var action = {\n\n // The action table describes the behavior of the machine. It contains an\n // object for each token. Each object contains a method that is called when\n // a token is matched in a state. An object will lack a method for illegal\n // states.\n\n \"{\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = {};\n state = \"firstokey\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = {};\n state = \"firstokey\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n }\n },\n \"}\": {\n firstokey: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n ocomma: function () {\n var pop = stack.pop();\n container[key] = value;\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \"[\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = [];\n state = \"firstavalue\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = [];\n state = \"firstavalue\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n }\n },\n \"]\": {\n firstavalue: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n acomma: function () {\n var pop = stack.pop();\n container.push(value);\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \":\": {\n colon: function () {\n if (Object.hasOwnProperty.call(container, key)) {\n throw new SyntaxError(\"Duplicate key '\" + key + \"\\\"\");\n }\n state = \"ovalue\";\n }\n },\n \",\": {\n ocomma: function () {\n container[key] = value;\n state = \"okey\";\n },\n acomma: function () {\n container.push(value);\n state = \"avalue\";\n }\n },\n \"true\": {\n go: function () {\n value = true;\n state = \"ok\";\n },\n ovalue: function () {\n value = true;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = true;\n state = \"acomma\";\n },\n avalue: function () {\n value = true;\n state = \"acomma\";\n }\n },\n \"false\": {\n go: function () {\n value = false;\n state = \"ok\";\n },\n ovalue: function () {\n value = false;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = false;\n state = \"acomma\";\n },\n avalue: function () {\n value = false;\n state = \"acomma\";\n }\n },\n \"null\": {\n go: function () {\n value = null;\n state = \"ok\";\n },\n ovalue: function () {\n value = null;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = null;\n state = \"acomma\";\n },\n avalue: function () {\n value = null;\n state = \"acomma\";\n }\n }\n };\n\n function debackslashify(text) {\n\n // Remove and replace any backslash escapement.\n\n return text.replace(/\\\\(?:u(.{4})|([^u]))/g, function (ignore, b, c) {\n return b\n ? String.fromCharCode(parseInt(b, 16))\n : escapes[c];\n });\n }\n\n return function (source, reviver) {\n\n // A regular expression is used to extract tokens from the JSON text.\n // The extraction process is cautious.\n\n var result;\n var tx = /^[\\u0020\\t\\n\\r]*(?:([,:\\[\\]{}]|true|false|null)|(-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)|\"((?:[^\\r\\n\\t\\\\\\\"]|\\\\(?:[\"\\\\\\/trnfb]|u[0-9a-fA-F]{4}))*)\")/;\n\n // Set the starting state.\n\n state = \"go\";\n\n // The stack records the container, key, and state for each object or array\n // that contains another object or array while processing nested structures.\n\n stack = [];\n\n // If any error occurs, we will catch it and ultimately throw a syntax error.\n\n try {\n\n // For each token...\n\n while (true) {\n result = tx.exec(source);\n if (!result) {\n break;\n }\n\n // result is the result array from matching the tokenizing regular expression.\n // result[0] contains everything that matched, including any initial whitespace.\n // result[1] contains any punctuation that was matched, or true, false, or null.\n // result[2] contains a matched number, still in string form.\n // result[3] contains a matched string, without quotes but with escapement.\n\n if (result[1]) {\n\n // Token: Execute the action for this state and token.\n\n action[result[1]][state]();\n\n } else if (result[2]) {\n\n // Number token: Convert the number string into a number value and execute\n // the action for this state and number.\n\n value = +result[2];\n number[state]();\n } else {\n\n // String token: Replace the escapement sequences and execute the action for\n // this state and string.\n\n value = debackslashify(result[3]);\n string[state]();\n }\n\n // Remove the token from the string. The loop will continue as long as there\n // are tokens. This is a slow process, but it allows the use of ^ matching,\n // which assures that no illegal tokens slip through.\n\n source = source.slice(result[0].length);\n }\n\n // If we find a state/token combination that is illegal, then the action will\n // cause an error. We handle the error by simply changing the state.\n\n } catch (e) {\n state = e;\n }\n\n // The parsing is finished. If we are not in the final \"ok\" state, or if the\n // remaining source contains anything except whitespace, then we did not have\n //a well-formed JSON text.\n\n if (state !== \"ok\" || (/[^\\u0020\\t\\n\\r]/.test(source))) {\n throw (state instanceof SyntaxError)\n ? state\n : new SyntaxError(\"JSON\");\n }\n\n // If there is a reviver function, we recursively walk the new structure,\n // passing each name/value pair to the reviver function for possible\n // transformation, starting with a temporary root object that holds the current\n // value in an empty key. If there is not a reviver function, we simply return\n // that value.\n\n return (typeof reviver === \"function\")\n ? (function walk(holder, key) {\n var k;\n var v;\n var val = holder[key];\n if (val && typeof val === \"object\") {\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(val, k)) {\n v = walk(val, k);\n if (v !== undefined) {\n val[k] = v;\n } else {\n delete val[k];\n }\n }\n }\n }\n return reviver.call(holder, key, val);\n }({\"\": value}, \"\"))\n : value;\n };\n }());\n }\n}\n\nmodule.exports = setupCustomJSON;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./vendor/JSON-js/json3.js\n// module id = 8\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Notifier - the internal object responsible for delegating between the client exposed API, the\n * chain of transforms necessary to turn an item into something that can be sent to Rollbar, and the\n * queue which handles the communcation with the Rollbar API servers.\n *\n * @param queue - an object that conforms to the interface: addItem(item, callback)\n * @param options - an object representing the options to be set for this notifier, this should have\n * any defaults already set by the caller\n */\nfunction Notifier(queue, options) {\n this.queue = queue;\n this.options = options;\n this.transforms = [];\n}\n\n/*\n * configure - updates the options for this notifier with the passed in object\n *\n * @param options - an object which gets merged with the current options set on this notifier\n * @returns this\n */\nNotifier.prototype.configure = function(options) {\n this.queue && this.queue.configure(options);\n var oldOptions = this.options;\n this.options = _.extend(true, {}, oldOptions, options);\n return this;\n};\n\n/*\n * addTransform - adds a transform onto the end of the queue of transforms for this notifier\n *\n * @param transform - a function which takes three arguments:\n * * item: An Object representing the data to eventually be sent to Rollbar\n * * options: The current value of the options for this notifier\n * * callback: function(err: (Null|Error), item: (Null|Object)) the transform must call this\n * callback with a null value for error if it wants the processing chain to continue, otherwise\n * with an error to terminate the processing. The item should be the updated item after this\n * transform is finished modifying it.\n */\nNotifier.prototype.addTransform = function(transform) {\n if (_.isFunction(transform)) {\n this.transforms.push(transform);\n }\n return this;\n};\n\n/*\n * log - the internal log function which applies the configured transforms and then pushes onto the\n * queue to be sent to the backend.\n *\n * @param item - An object with the following structure:\n * message [String] - An optional string to be sent to rollbar\n * error [Error] - An optional error\n *\n * @param callback - A function of type function(err, resp) which will be called with exactly one\n * null argument and one non-null argument. The callback will be called once, either during the\n * transform stage if an error occurs inside a transform, or in response to the communication with\n * the backend. The second argument will be the response from the backend in case of success.\n */\nNotifier.prototype.log = function(item, callback) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!this.options.enabled) {\n return callback(new Error('Rollbar is not enabled'));\n }\n\n this.queue.addPendingItem(item);\n var originalError = item.err;\n this._applyTransforms(item, function(err, i) {\n if (err) {\n this.queue.removePendingItem(item);\n return callback(err, null);\n }\n this.queue.addItem(i, callback, originalError, item);\n }.bind(this));\n};\n\n/* Internal */\n\n/*\n * _applyTransforms - Applies the transforms that have been added to this notifier sequentially. See\n * `addTransform` for more information.\n *\n * @param item - An item to be transformed\n * @param callback - A function of type function(err, item) which will be called with a non-null\n * error and a null item in the case of a transform failure, or a null error and non-null item after\n * all transforms have been applied.\n */\nNotifier.prototype._applyTransforms = function(item, callback) {\n var transformIndex = -1;\n var transformsLength = this.transforms.length;\n var transforms = this.transforms;\n var options = this.options;\n\n var cb = function(err, i) {\n if (err) {\n callback(err, null);\n return;\n }\n\n transformIndex++;\n\n if (transformIndex === transformsLength) {\n callback(null, i);\n return;\n }\n\n transforms[transformIndex](i, options, cb);\n };\n\n cb(null, item);\n};\n\nmodule.exports = Notifier;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/notifier.js\n// module id = 9\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nvar MAX_EVENTS = 100;\n\nfunction Telemeter(options) {\n this.queue = [];\n this.options = _.extend(true, {}, options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n this.maxQueueSize = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n}\n\nTelemeter.prototype.configure = function(options) {\n var oldOptions = this.options;\n this.options = _.extend(true, {}, oldOptions, options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n var newMaxEvents = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n var deleteCount = 0;\n if (this.maxQueueSize > newMaxEvents) {\n deleteCount = this.maxQueueSize - newMaxEvents;\n }\n this.maxQueueSize = newMaxEvents;\n this.queue.splice(0, deleteCount);\n};\n\nTelemeter.prototype.copyEvents = function() {\n return Array.prototype.slice.call(this.queue, 0);\n};\n\nTelemeter.prototype.capture = function(type, metadata, level, rollbarUUID, timestamp) {\n var e = {\n level: getLevel(type, level),\n type: type,\n timestamp_ms: timestamp || _.now(),\n body: metadata,\n source: 'client'\n };\n if (rollbarUUID) {\n e.uuid = rollbarUUID;\n }\n\n try {\n if (_.isFunction(this.options.filterTelemetry) && this.options.filterTelemetry(e)) {\n return false;\n }\n } catch (e) {\n this.options.filterTelemetry = null;\n }\n\n this.push(e);\n return e;\n};\n\nTelemeter.prototype.captureEvent = function(metadata, level, rollbarUUID) {\n return this.capture('manual', metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.captureError = function(err, level, rollbarUUID, timestamp) {\n var metadata = {\n message: err.message || String(err)\n };\n if (err.stack) {\n metadata.stack = err.stack;\n }\n return this.capture('error', metadata, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureLog = function(message, level, rollbarUUID, timestamp) {\n return this.capture('log', {\n message: message\n }, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureNetwork = function(metadata, subtype, rollbarUUID, requestData) {\n subtype = subtype || 'xhr';\n metadata.subtype = metadata.subtype || subtype;\n if (requestData) {\n metadata.request = requestData;\n }\n var level = this.levelFromStatus(metadata.status_code);\n return this.capture('network', metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.levelFromStatus = function(statusCode) {\n if (statusCode >= 200 && statusCode < 400) {\n return 'info';\n }\n if (statusCode === 0 || statusCode >= 400) {\n return 'error';\n }\n return 'info';\n};\n\nTelemeter.prototype.captureDom = function(subtype, element, value, checked, rollbarUUID) {\n var metadata = {\n subtype: subtype,\n element: element\n };\n if (value !== undefined) {\n metadata.value = value;\n }\n if (checked !== undefined) {\n metadata.checked = checked;\n }\n return this.capture('dom', metadata, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureNavigation = function(from, to, rollbarUUID) {\n return this.capture('navigation', {from: from, to: to}, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureDomContentLoaded = function(ts) {\n return this.capture('navigation', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n */\n};\nTelemeter.prototype.captureLoad = function(ts) {\n return this.capture('navigation', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n */\n};\n\nTelemeter.prototype.captureConnectivityChange = function(type, rollbarUUID) {\n return this.captureNetwork({change: type}, 'connectivity', rollbarUUID);\n};\n\n// Only intended to be used internally by the notifier\nTelemeter.prototype._captureRollbarItem = function(item) {\n if (!this.options.includeItemsInTelemetry) {\n return;\n }\n if (item.err) {\n return this.captureError(item.err, item.level, item.uuid, item.timestamp);\n }\n if (item.message) {\n return this.captureLog(item.message, item.level, item.uuid, item.timestamp);\n }\n if (item.custom) {\n return this.capture('log', item.custom, item.level, item.uuid, item.timestamp);\n }\n};\n\nTelemeter.prototype.push = function(e) {\n this.queue.push(e);\n if (this.queue.length > this.maxQueueSize) {\n this.queue.shift();\n }\n};\n\nfunction getLevel(type, level) {\n if (level) {\n return level;\n }\n var defaultLevel = {\n error: 'error',\n manual: 'info'\n };\n return defaultLevel[type] || 'info';\n}\n\nmodule.exports = Telemeter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/telemetry.js\n// module id = 10\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\nvar helpers = require('./apiUtility');\n\nvar defaultOptions = {\n hostname: 'api.rollbar.com',\n path: '/api/1/item/',\n search: null,\n version: '1',\n protocol: 'https:',\n port: 443\n};\n\n/**\n * Api is an object that encapsulates methods of communicating with\n * the Rollbar API. It is a standard interface with some parts implemented\n * differently for server or browser contexts. It is an object that should\n * be instantiated when used so it can contain non-global options that may\n * be different for another instance of RollbarApi.\n *\n * @param options {\n * accessToken: the accessToken to use for posting items to rollbar\n * endpoint: an alternative endpoint to send errors to\n * must be a valid, fully qualified URL.\n * The default is: https://api.rollbar.com/api/1/item\n * proxy: if you wish to proxy requests provide an object\n * with the following keys:\n * host or hostname (required): foo.example.com\n * port (optional): 123\n * protocol (optional): https\n * }\n */\nfunction Api(options, t, u, j) {\n this.options = options;\n this.transport = t;\n this.url = u;\n this.jsonBackup = j;\n this.accessToken = options.accessToken;\n this.transportOptions = _getTransport(options, u);\n}\n\n/**\n *\n * @param data\n * @param callback\n */\nApi.prototype.postItem = function(data, callback) {\n var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n this.transport.post(this.accessToken, transportOptions, payload, callback);\n};\n\nApi.prototype.configure = function(options) {\n var oldOptions = this.oldOptions;\n this.options = _.extend(true, {}, oldOptions, options);\n this.transportOptions = _getTransport(this.options, this.url);\n if (this.options.accessToken !== undefined) {\n this.accessToken = this.options.accessToken;\n }\n return this;\n};\n\nfunction _getTransport(options, url) {\n return helpers.getTransportFromOptions(options, defaultOptions, url);\n}\n\nmodule.exports = Api;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/api.js\n// module id = 11\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction buildPayload(accessToken, data, jsonBackup) {\n if (!_.isType(data.context, 'string')) {\n var contextResult = _.stringify(data.context, jsonBackup);\n if (contextResult.error) {\n data.context = 'Error: could not serialize \\'context\\'';\n } else {\n data.context = contextResult.value || '';\n }\n if (data.context.length > 255) {\n data.context = data.context.substr(0, 255);\n }\n }\n return {\n access_token: accessToken,\n data: data\n };\n}\n\nfunction getTransportFromOptions(options, defaults, url) {\n var hostname = defaults.hostname;\n var protocol = defaults.protocol;\n var port = defaults.port;\n var path = defaults.path;\n var search = defaults.search;\n\n var proxy = options.proxy;\n if (options.endpoint) {\n var opts = url.parse(options.endpoint);\n hostname = opts.hostname;\n protocol = opts.protocol;\n port = opts.port;\n path = opts.pathname;\n search = opts.search;\n }\n return {\n hostname: hostname,\n protocol: protocol,\n port: port,\n path: path,\n search: search,\n proxy: proxy\n };\n}\n\nfunction transportOptions(transport, method) {\n var protocol = transport.protocol || 'https:';\n var port = transport.port || (protocol === 'http:' ? 80 : protocol === 'https:' ? 443 : undefined);\n var hostname = transport.hostname;\n var path = transport.path;\n if (transport.search) {\n path = path + transport.search;\n }\n if (transport.proxy) {\n path = protocol + '//' + hostname + path;\n hostname = transport.proxy.host || transport.proxy.hostname;\n port = transport.proxy.port;\n protocol = transport.proxy.protocol || protocol;\n }\n return {\n protocol: protocol,\n hostname: hostname,\n path: path,\n port: port,\n method: method\n };\n}\n\nfunction appendPathToPath(base, path) {\n var baseTrailingSlash = /\\/$/.test(base);\n var pathBeginningSlash = /^\\//.test(path);\n\n if (baseTrailingSlash && pathBeginningSlash) {\n path = path.substring(1);\n } else if (!baseTrailingSlash && !pathBeginningSlash) {\n path = '/' + path;\n }\n\n return base + path;\n}\n\nmodule.exports = {\n buildPayload: buildPayload,\n getTransportFromOptions: getTransportFromOptions,\n transportOptions: transportOptions,\n appendPathToPath: appendPathToPath\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/apiUtility.js\n// module id = 12\n// module chunks = 0","'use strict';\n\n/* eslint-disable no-console */\nrequire('console-polyfill');\nvar detection = require('./detection');\nvar _ = require('../utility');\n\nfunction error() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.error(_.formatArgsAsString(args));\n } else {\n console.error.apply(console, args);\n }\n}\n\nfunction info() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.info(_.formatArgsAsString(args));\n } else {\n console.info.apply(console, args);\n }\n}\n\nfunction log() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.log(_.formatArgsAsString(args));\n } else {\n console.log.apply(console, args);\n }\n}\n\n/* eslint-enable no-console */\n\nmodule.exports = {\n error: error,\n info: info,\n log: log\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/logger.js\n// module id = 13\n// module chunks = 0","// Console-polyfill. MIT license.\n// https://github.com/paulmillr/console-polyfill\n// Make it safe to do console.log() always.\n(function(global) {\n 'use strict';\n if (!global.console) {\n global.console = {};\n }\n var con = global.console;\n var prop, method;\n var dummy = function() {};\n var properties = ['memory'];\n var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' +\n 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' +\n 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',');\n while (prop = properties.pop()) if (!con[prop]) con[prop] = {};\n while (method = methods.pop()) if (!con[method]) con[method] = dummy;\n // Using `this` for web workers & supports Browserify / Webpack.\n})(typeof window === 'undefined' ? this : window);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/console-polyfill/index.js\n// module id = 14\n// module chunks = 0","'use strict';\n\n// This detection.js module is used to encapsulate any ugly browser/feature\n// detection we may need to do.\n\n// Figure out which version of IE we're using, if any.\n// This is gleaned from http://stackoverflow.com/questions/5574842/best-way-to-check-for-ie-less-than-9-in-javascript-without-library\n// Will return an integer on IE (i.e. 8)\n// Will return undefined otherwise\nfunction getIEVersion() {\n\tvar undef;\n\tif (!document) {\n\t\treturn undef;\n\t}\n\n var v = 3,\n div = document.createElement('div'),\n all = div.getElementsByTagName('i');\n\n while (\n div.innerHTML = '',\n all[0]\n );\n\n return v > 4 ? v : undef;\n}\n\nvar Detection = {\n ieVersion: getIEVersion\n};\n\nmodule.exports = Detection;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/detection.js\n// module id = 15\n// module chunks = 0","'use strict';\n\nfunction captureUncaughtExceptions(window, handler, shim) {\n if (!window) { return; }\n var oldOnError;\n\n if (typeof handler._rollbarOldOnError === 'function') {\n oldOnError = handler._rollbarOldOnError;\n } else if (window.onerror && !window.onerror.belongsToShim) {\n oldOnError = window.onerror;\n handler._rollbarOldOnError = oldOnError;\n }\n\n var fn = function() {\n var args = Array.prototype.slice.call(arguments, 0);\n _rollbarWindowOnError(window, handler, oldOnError, args);\n };\n fn.belongsToShim = shim;\n window.onerror = fn;\n}\n\nfunction _rollbarWindowOnError(window, r, old, args) {\n if (window._rollbarWrappedError) {\n if (!args[4]) {\n args[4] = window._rollbarWrappedError;\n }\n if (!args[5]) {\n args[5] = window._rollbarWrappedError._rollbarContext;\n }\n window._rollbarWrappedError = null;\n }\n\n r.handleUncaughtException.apply(r, args);\n if (old) {\n old.apply(window, args);\n }\n}\n\nfunction captureUnhandledRejections(window, handler, shim) {\n if (!window) { return; }\n\n if (typeof window._rollbarURH === 'function' && window._rollbarURH.belongsToShim) {\n window.removeEventListener('unhandledrejection', window._rollbarURH);\n }\n\n var rejectionHandler = function (evt) {\n var reason, promise, detail;\n try {\n reason = evt.reason;\n } catch (e) {\n reason = undefined;\n }\n try {\n promise = evt.promise;\n } catch (e) {\n promise = '[unhandledrejection] error getting `promise` from event';\n }\n try {\n detail = evt.detail;\n if (!reason && detail) {\n reason = detail.reason;\n promise = detail.promise;\n }\n } catch (e) {\n detail = '[unhandledrejection] error getting `detail` from event';\n }\n if (!reason) {\n reason = '[unhandledrejection] error getting `reason` from event';\n }\n\n if (handler && handler.handleUnhandledRejection) {\n handler.handleUnhandledRejection(reason, promise);\n }\n };\n rejectionHandler.belongsToShim = shim;\n window._rollbarURH = rejectionHandler;\n window.addEventListener('unhandledrejection', rejectionHandler);\n}\n\nfunction wrapGlobals(window, handler, shim) {\n if (!window) { return; }\n // Adapted from https://github.com/bugsnag/bugsnag-js\n var globals = 'EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload'.split(',');\n var i, global;\n for (i = 0; i < globals.length; ++i) {\n global = globals[i];\n\n if (window[global] && window[global].prototype) {\n _extendListenerPrototype(handler, window[global].prototype, shim);\n }\n }\n}\n\nfunction _extendListenerPrototype(handler, prototype, shim) {\n if (prototype.hasOwnProperty && prototype.hasOwnProperty('addEventListener')) {\n var oldAddEventListener = prototype.addEventListener;\n while (oldAddEventListener._rollbarOldAdd && oldAddEventListener.belongsToShim) {\n oldAddEventListener = oldAddEventListener._rollbarOldAdd;\n }\n var addFn = function(event, callback, bubble) {\n oldAddEventListener.call(this, event, handler.wrap(callback), bubble);\n };\n addFn._rollbarOldAdd = oldAddEventListener;\n addFn.belongsToShim = shim;\n prototype.addEventListener = addFn;\n\n var oldRemoveEventListener = prototype.removeEventListener;\n while (oldRemoveEventListener._rollbarOldRemove && oldRemoveEventListener.belongsToShim) {\n oldRemoveEventListener = oldRemoveEventListener._rollbarOldRemove;\n }\n var removeFn = function(event, callback, bubble) {\n oldRemoveEventListener.call(this, event, callback && callback._rollbar_wrapped || callback, bubble);\n };\n removeFn._rollbarOldRemove = oldRemoveEventListener;\n removeFn.belongsToShim = shim;\n prototype.removeEventListener = removeFn;\n }\n}\n\nmodule.exports = {\n captureUncaughtExceptions: captureUncaughtExceptions,\n captureUnhandledRejections: captureUnhandledRejections,\n wrapGlobals: wrapGlobals\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/globalSetup.js\n// module id = 16\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar logger = require('./logger');\n\n/*\n * accessToken may be embedded in payload but that should not\n * be assumed\n *\n * options: {\n * hostname\n * protocol\n * path\n * port\n * method\n * }\n *\n * params is an object containing key/value pairs. These\n * will be appended to the path as 'key=value&key=value'\n *\n * payload is an unserialized object\n */\n\nfunction get(accessToken, options, params, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n _.addParamsAndAccessTokenToPath(accessToken, options, params);\n\n var method = 'GET';\n var url = _.formatUrl(options);\n _makeRequest(accessToken, url, method, null, callback, requestFactory);\n}\n\nfunction post(accessToken, options, payload, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!payload) {\n return callback(new Error('Cannot send empty request'));\n }\n\n var stringifyResult = _.stringify(payload);\n if (stringifyResult.error) {\n return callback(stringifyResult.error);\n }\n\n var writeData = stringifyResult.value;\n var method = 'POST';\n var url = _.formatUrl(options);\n _makeRequest(accessToken, url, method, writeData, callback, requestFactory);\n}\n\nfunction _makeRequest(accessToken, url, method, data, callback, requestFactory) {\n var request;\n if (requestFactory) {\n request = requestFactory();\n } else {\n request = _createXMLHTTPObject();\n }\n if (!request) {\n // Give up, no way to send requests\n return callback(new Error('No way to send a request'));\n }\n try {\n try {\n var onreadystatechange = function() {\n try {\n if (onreadystatechange && request.readyState === 4) {\n onreadystatechange = undefined;\n\n var parseResponse = _.jsonParse(request.responseText);\n if (_isSuccess(request)) {\n callback(parseResponse.error, parseResponse.value);\n return;\n } else if (_isNormalFailure(request)) {\n if (request.status === 403) {\n // likely caused by using a server access token\n var message = parseResponse.value && parseResponse.value.message;\n logger.error(message);\n }\n // return valid http status codes\n callback(new Error(String(request.status)));\n } else {\n // IE will return a status 12000+ on some sort of connection failure,\n // so we return a blank error\n // http://msdn.microsoft.com/en-us/library/aa383770%28VS.85%29.aspx\n var msg = 'XHR response had no status code (likely connection failure)';\n callback(_newRetriableError(msg));\n }\n }\n } catch (ex) {\n //jquery source mentions firefox may error out while accessing the\n //request members if there is a network error\n //https://github.com/jquery/jquery/blob/a938d7b1282fc0e5c52502c225ae8f0cef219f0a/src/ajax/xhr.js#L111\n var exc;\n if (ex && ex.stack) {\n exc = ex;\n } else {\n exc = new Error(ex);\n }\n callback(exc);\n }\n };\n\n request.open(method, url, true);\n if (request.setRequestHeader) {\n request.setRequestHeader('Content-Type', 'application/json');\n request.setRequestHeader('X-Rollbar-Access-Token', accessToken);\n }\n request.onreadystatechange = onreadystatechange;\n request.send(data);\n } catch (e1) {\n // Sending using the normal xmlhttprequest object didn't work, try XDomainRequest\n if (typeof XDomainRequest !== 'undefined') {\n\n // Assume we are in a really old browser which has a bunch of limitations:\n // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\n // Extreme paranoia: if we have XDomainRequest then we have a window, but just in case\n if (!window || !window.location) {\n return callback(new Error('No window available during request, unknown environment'));\n }\n\n // If the current page is http, try and send over http\n if (window.location.href.substring(0, 5) === 'http:' && url.substring(0, 5) === 'https') {\n url = 'http' + url.substring(5);\n }\n\n var xdomainrequest = new XDomainRequest();\n xdomainrequest.onprogress = function() {};\n xdomainrequest.ontimeout = function() {\n var msg = 'Request timed out';\n var code = 'ETIMEDOUT';\n callback(_newRetriableError(msg, code));\n };\n xdomainrequest.onerror = function() {\n callback(new Error('Error during request'));\n };\n xdomainrequest.onload = function() {\n var parseResponse = _.jsonParse(xdomainrequest.responseText);\n callback(parseResponse.error, parseResponse.value);\n };\n xdomainrequest.open(method, url, true);\n xdomainrequest.send(data);\n } else {\n callback(new Error('Cannot find a method to transport a request'));\n }\n }\n } catch (e2) {\n callback(e2);\n }\n}\n\nfunction _createXMLHTTPObject() {\n /* global ActiveXObject:false */\n\n var factories = [\n function () {\n return new XMLHttpRequest();\n },\n function () {\n return new ActiveXObject('Msxml2.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Msxml3.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Microsoft.XMLHTTP');\n }\n ];\n var xmlhttp;\n var i;\n var numFactories = factories.length;\n for (i = 0; i < numFactories; i++) {\n /* eslint-disable no-empty */\n try {\n xmlhttp = factories[i]();\n break;\n } catch (e) {\n // pass\n }\n /* eslint-enable no-empty */\n }\n return xmlhttp;\n}\n\nfunction _isSuccess(r) {\n return r && r.status && r.status === 200;\n}\n\nfunction _isNormalFailure(r) {\n return r && _.isType(r.status, 'number') && r.status >= 400 && r.status < 600;\n}\n\nfunction _newRetriableError(message, code) {\n var err = new Error(message);\n err.code = code || 'ENOTFOUND';\n return err;\n}\n\nmodule.exports = {\n get: get,\n post: post\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transport.js\n// module id = 17\n// module chunks = 0","'use strict';\n\n// See https://nodejs.org/docs/latest/api/url.html\nfunction parse(url) {\n var result = {\n protocol: null, auth: null, host: null, path: null,\n hash: null, href: url, hostname: null, port: null,\n pathname: null, search: null, query: null\n };\n\n var i, last;\n i = url.indexOf('//');\n if (i !== -1) {\n result.protocol = url.substring(0,i);\n last = i+2;\n } else {\n last = 0;\n }\n \n i = url.indexOf('@', last);\n if (i !== -1) {\n result.auth = url.substring(last, i);\n last = i+1;\n }\n\n i = url.indexOf('/', last);\n if (i === -1) {\n i = url.indexOf('?', last);\n if (i === -1) {\n i = url.indexOf('#', last);\n if (i === -1) {\n result.host = url.substring(last);\n } else {\n result.host = url.substring(last, i);\n result.hash = url.substring(i);\n }\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n return result;\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n\n i = url.indexOf('#', last);\n if (i === -1) {\n result.path = url.substring(last);\n } else {\n result.path = url.substring(last, i);\n result.hash = url.substring(i);\n }\n\n if (result.path) {\n var pathParts = result.path.split('?');\n result.pathname = pathParts[0];\n result.query = pathParts[1];\n result.search = result.query ? '?' + result.query : null;\n }\n return result;\n}\n\nmodule.exports = {\n parse: parse\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/url.js\n// module id = 18\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar errorParser = require('./errorParser');\nvar logger = require('./logger');\n\nfunction handleItemWithError(item, options, callback) {\n item.data = item.data || {};\n if (item.err) {\n try {\n item.stackInfo = item.err._savedStackTrace || errorParser.parse(item.err);\n } catch (e)\n /* istanbul ignore next */\n {\n logger.error('Error while parsing the error object.', e);\n item.message = item.err.message || item.err.description || item.message || String(item.err);\n delete item.err;\n }\n }\n callback(null, item);\n}\n\nfunction ensureItemHasSomethingToSay(item, options, callback) {\n if (!item.message && !item.stackInfo && !item.custom) {\n callback(new Error('No message, stack info, or custom data'), null);\n }\n callback(null, item);\n}\n\nfunction addBaseInfo(item, options, callback) {\n var environment = (options.payload && options.payload.environment) || options.environment;\n item.data = _.extend(true, {}, item.data, {\n environment: environment,\n level: item.level,\n endpoint: options.endpoint,\n platform: 'browser',\n framework: 'browser-js',\n language: 'javascript',\n server: {},\n uuid: item.uuid,\n notifier: {\n name: 'rollbar-browser-js',\n version: options.version\n }\n });\n callback(null, item);\n}\n\nfunction addRequestInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.location) {\n return callback(null, item);\n }\n _.set(item, 'data.request', {\n url: window.location.href,\n query_string: window.location.search,\n user_ip: '$remote_ip'\n });\n callback(null, item);\n };\n}\n\nfunction addClientInfo(window) {\n return function(item, options, callback) {\n if (!window) {\n return callback(null, item);\n }\n var nav = window.navigator || {};\n var scr = window.screen || {};\n _.set(item, 'data.client', {\n runtime_ms: item.timestamp - window._rollbarStartTime,\n timestamp: Math.round(item.timestamp / 1000),\n javascript: {\n browser: nav.userAgent,\n language: nav.language,\n cookie_enabled: nav.cookieEnabled,\n screen: {\n width: scr.width,\n height: scr.height\n }\n }\n });\n callback(null, item);\n };\n}\n\nfunction addPluginInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.navigator) {\n return callback(null, item);\n }\n var plugins = [];\n var navPlugins = window.navigator.plugins || [];\n var cur;\n for (var i=0, l=navPlugins.length; i < l; ++i) {\n cur = navPlugins[i];\n plugins.push({name: cur.name, description: cur.description});\n }\n _.set(item, 'data.client.javascript.plugins', plugins);\n callback(null, item);\n };\n}\n\nfunction addBody(item, options, callback) {\n if (item.stackInfo) {\n addBodyTrace(item, options, callback);\n } else {\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction addBodyMessage(item, options, callback) {\n var message = item.message;\n var custom = item.custom;\n\n if (!message) {\n if (custom) {\n var scrubFields = options.scrubFields;\n var messageResult = _.stringify(_.scrub(custom, scrubFields));\n message = messageResult.error || messageResult.value || '';\n } else {\n message = '';\n }\n }\n var result = {\n body: message\n };\n\n if (custom) {\n result.extra = _.extend(true, {}, custom);\n }\n\n _.set(item, 'data.body', {message: result});\n callback(null, item);\n}\n\n\nfunction addBodyTrace(item, options, callback) {\n var description = item.data.description;\n var stackInfo = item.stackInfo;\n var custom = item.custom;\n\n var guess = errorParser.guessErrorClass(stackInfo.message);\n var className = stackInfo.name || guess[0];\n var message = guess[1];\n var trace = {\n exception: {\n 'class': className,\n message: message\n }\n };\n\n if (description) {\n trace.exception.description = description;\n }\n\n // Transform a TraceKit stackInfo object into a Rollbar trace\n var stack = stackInfo.stack;\n if (stack && stack.length === 0 && item._unhandledStackInfo && item._unhandledStackInfo.stack) {\n stack = item._unhandledStackInfo.stack;\n }\n if (stack) {\n if (stack.length === 0) {\n trace.exception.stack = stackInfo.rawStack;\n trace.exception.raw = String(stackInfo.rawException);\n }\n var stackFrame;\n var frame;\n var code;\n var pre;\n var post;\n var contextLength;\n var i, mid;\n\n trace.frames = [];\n for (i = 0; i < stack.length; ++i) {\n stackFrame = stack[i];\n frame = {\n filename: stackFrame.url ? _.sanitizeUrl(stackFrame.url) : '(unknown)',\n lineno: stackFrame.line || null,\n method: (!stackFrame.func || stackFrame.func === '?') ? '[anonymous]' : stackFrame.func,\n colno: stackFrame.column\n };\n if (frame.method && frame.method.endsWith && frame.method.endsWith('_rollbar_wrapped')) {\n continue;\n }\n\n code = pre = post = null;\n contextLength = stackFrame.context ? stackFrame.context.length : 0;\n if (contextLength) {\n mid = Math.floor(contextLength / 2);\n pre = stackFrame.context.slice(0, mid);\n code = stackFrame.context[mid];\n post = stackFrame.context.slice(mid);\n }\n\n if (code) {\n frame.code = code;\n }\n\n if (pre || post) {\n frame.context = {};\n if (pre && pre.length) {\n frame.context.pre = pre;\n }\n if (post && post.length) {\n frame.context.post = post;\n }\n }\n\n if (stackFrame.args) {\n frame.args = stackFrame.args;\n }\n\n trace.frames.push(frame);\n }\n\n // NOTE(cory): reverse the frames since rollbar.com expects the most recent call last\n trace.frames.reverse();\n\n if (custom) {\n trace.extra = _.extend(true, {}, custom);\n }\n _.set(item, 'data.body', {trace: trace});\n callback(null, item);\n } else {\n item.message = className + ': ' + message;\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction scrubPayload(item, options, callback) {\n var scrubFields = options.scrubFields;\n item.data = _.scrub(item.data, scrubFields);\n callback(null, item);\n}\n\nmodule.exports = {\n handleItemWithError: handleItemWithError,\n ensureItemHasSomethingToSay: ensureItemHasSomethingToSay,\n addBaseInfo: addBaseInfo,\n addRequestInfo: addRequestInfo,\n addClientInfo: addClientInfo,\n addPluginInfo: addPluginInfo,\n addBody: addBody,\n scrubPayload: scrubPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transforms.js\n// module id = 19\n// module chunks = 0","'use strict';\n\nvar ErrorStackParser = require('error-stack-parser');\n\nvar UNKNOWN_FUNCTION = '?';\nvar ERR_CLASS_REGEXP = new RegExp('^(([a-zA-Z0-9-_$ ]*): *)?(Uncaught )?([a-zA-Z0-9-_$ ]*): ');\n\nfunction guessFunctionName() {\n return UNKNOWN_FUNCTION;\n}\n\n\nfunction gatherContext() {\n return null;\n}\n\n\nfunction Frame(stackFrame) {\n var data = {};\n\n data._stackFrame = stackFrame;\n\n data.url = stackFrame.fileName;\n data.line = stackFrame.lineNumber;\n data.func = stackFrame.functionName;\n data.column = stackFrame.columnNumber;\n data.args = stackFrame.args;\n\n data.context = gatherContext(data.url, data.line);\n\n return data;\n}\n\n\nfunction Stack(exception) {\n function getStack() {\n var parserStack = [];\n var exc;\n\n if (!exception.stack) {\n try {\n throw exception;\n } catch (e) {\n exc = e;\n }\n } else {\n exc = exception;\n }\n\n try {\n parserStack = ErrorStackParser.parse(exc);\n } catch(e) {\n parserStack = [];\n }\n\n var stack = [];\n\n for (var i = 0; i < parserStack.length; i++) {\n stack.push(new Frame(parserStack[i]));\n }\n\n return stack;\n }\n\n return {\n stack: getStack(),\n message: exception.message,\n name: exception.name,\n rawStack: exception.stack,\n rawException: exception\n };\n}\n\n\nfunction parse(e) {\n return new Stack(e);\n}\n\n\nfunction guessErrorClass(errMsg) {\n if (!errMsg || !errMsg.match) {\n return ['Unknown error. There was no error message to display.', ''];\n }\n var errClassMatch = errMsg.match(ERR_CLASS_REGEXP);\n var errClass = '(unknown)';\n\n if (errClassMatch) {\n errClass = errClassMatch[errClassMatch.length - 1];\n errMsg = errMsg.replace((errClassMatch[errClassMatch.length - 2] || '') + errClass + ':', '');\n errMsg = errMsg.replace(/(^[\\s]+|[\\s]+$)/g, '');\n }\n return [errClass, errMsg];\n}\n\n\nmodule.exports = {\n guessFunctionName: guessFunctionName,\n guessErrorClass: guessErrorClass,\n gatherContext: gatherContext,\n parse: parse,\n Stack: Stack,\n Frame: Frame\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/errorParser.js\n// module id = 20\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = locationParts[0] === 'eval' ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/error-stack-parser.js\n// module id = 21\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stackframe', [], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.StackFrame = factory();\n }\n}(this, function () {\n 'use strict';\n function _isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n function StackFrame(functionName, args, fileName, lineNumber, columnNumber, source) {\n if (functionName !== undefined) {\n this.setFunctionName(functionName);\n }\n if (args !== undefined) {\n this.setArgs(args);\n }\n if (fileName !== undefined) {\n this.setFileName(fileName);\n }\n if (lineNumber !== undefined) {\n this.setLineNumber(lineNumber);\n }\n if (columnNumber !== undefined) {\n this.setColumnNumber(columnNumber);\n }\n if (source !== undefined) {\n this.setSource(source);\n }\n }\n\n StackFrame.prototype = {\n getFunctionName: function () {\n return this.functionName;\n },\n setFunctionName: function (v) {\n this.functionName = String(v);\n },\n\n getArgs: function () {\n return this.args;\n },\n setArgs: function (v) {\n if (Object.prototype.toString.call(v) !== '[object Array]') {\n throw new TypeError('Args must be an Array');\n }\n this.args = v;\n },\n\n // NOTE: Property name may be misleading as it includes the path,\n // but it somewhat mirrors V8's JavaScriptStackTraceApi\n // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's\n // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14\n getFileName: function () {\n return this.fileName;\n },\n setFileName: function (v) {\n this.fileName = String(v);\n },\n\n getLineNumber: function () {\n return this.lineNumber;\n },\n setLineNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Line Number must be a Number');\n }\n this.lineNumber = Number(v);\n },\n\n getColumnNumber: function () {\n return this.columnNumber;\n },\n setColumnNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Column Number must be a Number');\n }\n this.columnNumber = Number(v);\n },\n\n getSource: function () {\n return this.source;\n },\n setSource: function (v) {\n this.source = String(v);\n },\n\n toString: function() {\n var functionName = this.getFunctionName() || '{anonymous}';\n var args = '(' + (this.getArgs() || []).join(',') + ')';\n var fileName = this.getFileName() ? ('@' + this.getFileName()) : '';\n var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : '';\n var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : '';\n return functionName + args + fileName + lineNumber + columnNumber;\n }\n };\n\n return StackFrame;\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/~/stackframe/stackframe.js\n// module id = 22\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction itemToPayload(item, options, callback) {\n var payloadOptions = options.payload || {};\n if (payloadOptions.body) {\n delete payloadOptions.body;\n }\n\n var data = _.extend(true, {}, item.data, payloadOptions);\n if (item._isUncaught) {\n data._isUncaught = true;\n }\n if (item._originalArgs) {\n data._originalArgs = item._originalArgs;\n }\n callback(null, data);\n}\n\nfunction addTelemetryData(item, options, callback) {\n if (item.telemetryEvents) {\n _.set(item, 'data.body.telemetry', item.telemetryEvents);\n }\n callback(null, item);\n}\n\nfunction addMessageWithError(item, options, callback) {\n if (!item.message) {\n callback(null, item);\n return;\n }\n var tracePath = 'data.body.trace_chain.0';\n var trace = _.get(item, tracePath);\n if (!trace) {\n tracePath = 'data.body.trace';\n trace = _.get(item, tracePath);\n }\n if (trace) {\n if (!(trace.exception && trace.exception.description)) {\n _.set(item, tracePath+'.exception.description', item.message);\n callback(null, item);\n return;\n }\n var extra = _.get(item, tracePath+'.extra') || {};\n var newExtra = _.extend(true, {}, extra, {message: item.message});\n _.set(item, tracePath+'.extra', newExtra);\n }\n callback(null, item);\n}\n\nfunction userTransform(logger) {\n return function(item, options, callback) {\n var newItem = _.extend(true, {}, item);\n try {\n if (_.isFunction(options.transform)) {\n options.transform(newItem.data);\n }\n } catch (e) {\n options.transform = null;\n logger.error('Error while calling custom transform() function. Removing custom transform().', e);\n callback(null, item);\n return;\n }\n callback(null, newItem);\n }\n}\n\nfunction addConfigToPayload(item, options, callback) {\n if (!options.sendConfig) {\n return callback(null, item);\n }\n var configKey = '_rollbarConfig';\n var custom = _.get(item, 'data.custom') || {};\n custom[configKey] = options;\n item.data.custom = custom;\n callback(null, item);\n}\n\nmodule.exports = {\n itemToPayload: itemToPayload,\n addTelemetryData: addTelemetryData,\n addMessageWithError: addMessageWithError,\n userTransform: userTransform,\n addConfigToPayload: addConfigToPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/transforms.js\n// module id = 23\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\n\nfunction checkIgnore(item, settings) {\n if (_.get(settings, 'plugins.jquery.ignoreAjaxErrors')) {\n return !_.get(item, 'body.message.extra.isAjax');\n }\n return true;\n}\n\nmodule.exports = {\n checkIgnore: checkIgnore\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/predicates.js\n// module id = 24\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction checkLevel(item, settings) {\n var level = item.level;\n var levelVal = _.LEVELS[level] || 0;\n var reportLevel = settings.reportLevel;\n var reportLevelVal = _.LEVELS[reportLevel] || 0;\n\n if (levelVal < reportLevelVal) {\n return false;\n }\n return true;\n}\n\nfunction userCheckIgnore(logger) {\n return function(item, settings) {\n var isUncaught = !!item._isUncaught;\n delete item._isUncaught;\n var args = item._originalArgs;\n delete item._originalArgs;\n try {\n if (_.isFunction(settings.onSendCallback)) {\n settings.onSendCallback(isUncaught, args, item);\n }\n } catch (e) {\n settings.onSendCallback = null;\n logger.error('Error while calling onSendCallback, removing', e);\n }\n try {\n if (_.isFunction(settings.checkIgnore) && settings.checkIgnore(isUncaught, args, item)) {\n return false;\n }\n } catch (e) {\n settings.checkIgnore = null;\n logger.error('Error while calling custom checkIgnore(), removing', e);\n }\n return true;\n }\n}\n\nfunction urlIsNotBlacklisted(logger) {\n return function(item, settings) {\n return !urlIsOnAList(item, settings, 'blacklist', logger);\n }\n}\n\nfunction urlIsWhitelisted(logger) {\n return function(item, settings) {\n return urlIsOnAList(item, settings, 'whitelist', logger);\n }\n}\n\nfunction urlIsOnAList(item, settings, whiteOrBlack, logger) {\n // whitelist is the default\n var black = false;\n if (whiteOrBlack === 'blacklist') {\n black = true;\n }\n var list, trace, frame, filename, frameLength, url, listLength, urlRegex;\n var i, j;\n\n try {\n list = black ? settings.hostBlackList : settings.hostWhiteList;\n listLength = list && list.length;\n trace = _.get(item, 'body.trace');\n\n // These two checks are important to come first as they are defaults\n // in case the list is missing or the trace is missing or not well-formed\n if (!list || listLength === 0) {\n return !black;\n }\n if (!trace || !trace.frames || trace.frames.length === 0) {\n return !black;\n }\n\n frameLength = trace.frames.length;\n for (i = 0; i < frameLength; i++) {\n frame = trace.frames[i];\n filename = frame.filename;\n\n if (!_.isType(filename, 'string')) {\n return !black;\n }\n\n for (j = 0; j < listLength; j++) {\n url = list[j];\n urlRegex = new RegExp(url);\n\n if (urlRegex.test(filename)) {\n return true;\n }\n }\n }\n } catch (e)\n /* istanbul ignore next */\n {\n if (black) {\n settings.hostBlackList = null;\n } else {\n settings.hostWhiteList = null;\n }\n var listName = black ? 'hostBlackList' : 'hostWhiteList';\n logger.error('Error while reading your configuration\\'s ' + listName + ' option. Removing custom ' + listName + '.', e);\n return !black;\n }\n return false;\n}\n\nfunction messageIsIgnored(logger) {\n return function(item, settings) {\n var exceptionMessage, i, ignoredMessages,\n len, messageIsIgnored, rIgnoredMessage,\n body, traceMessage, bodyMessage;\n\n try {\n messageIsIgnored = false;\n ignoredMessages = settings.ignoredMessages;\n\n if (!ignoredMessages || ignoredMessages.length === 0) {\n return true;\n }\n\n body = item.body;\n traceMessage = _.get(body, 'trace.exception.message');\n bodyMessage = _.get(body, 'message.body');\n\n exceptionMessage = traceMessage || bodyMessage;\n\n if (!exceptionMessage){\n return true;\n }\n\n len = ignoredMessages.length;\n for (i = 0; i < len; i++) {\n rIgnoredMessage = new RegExp(ignoredMessages[i], 'gi');\n messageIsIgnored = rIgnoredMessage.test(exceptionMessage);\n\n if (messageIsIgnored) {\n break;\n }\n }\n } catch(e)\n /* istanbul ignore next */\n {\n settings.ignoredMessages = null;\n logger.error('Error while reading your configuration\\'s ignoredMessages option. Removing custom ignoredMessages.');\n }\n\n return !messageIsIgnored;\n }\n}\n\nmodule.exports = {\n checkLevel: checkLevel,\n userCheckIgnore: userCheckIgnore,\n urlIsNotBlacklisted: urlIsNotBlacklisted,\n urlIsWhitelisted: urlIsWhitelisted,\n messageIsIgnored: messageIsIgnored\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/predicates.js\n// module id = 25\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar urlparser = require('./url');\nvar domUtil = require('./domUtility');\n\nvar defaults = {\n network: true,\n networkResponseHeaders: false,\n networkResponseBody: false,\n networkRequestBody: false,\n log: true,\n dom: true,\n navigation: true,\n connectivity: true\n};\n\nfunction replace(obj, name, replacement, replacements, type) {\n var orig = obj[name];\n obj[name] = replacement(orig);\n if (replacements) {\n replacements[type].push([obj, name, orig]);\n }\n}\n\nfunction restore(replacements, type) {\n var b;\n while (replacements[type].length) {\n b = replacements[type].shift();\n b[0][b[1]] = b[2];\n }\n}\n\nfunction Instrumenter(options, telemeter, rollbar, _window, _document) {\n var autoInstrument = options.autoInstrument;\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.extend(true, {}, defaults, autoInstrument);\n }\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n this.telemetryScrubber = options.telemetryScrubber;\n this.telemeter = telemeter;\n this.rollbar = rollbar;\n this._window = _window || {};\n this._document = _document || {};\n this.replacements = {\n network: [],\n log: [],\n navigation: [],\n connectivity: []\n };\n this.eventRemovers = {\n dom: [],\n connectivity: []\n };\n\n this._location = this._window.location;\n this._lastHref = this._location && this._location.href;\n}\n\nInstrumenter.prototype.configure = function(options) {\n var autoInstrument = options.autoInstrument;\n var oldSettings = _.extend(true, {}, this.autoInstrument);\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.extend(true, {}, defaults, autoInstrument);\n }\n this.instrument(oldSettings);\n if (options.scrubTelemetryInputs !== undefined) {\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n }\n if (options.telemetryScrubber !== undefined) {\n this.telemetryScrubber = options.telemetryScrubber;\n }\n};\n\nInstrumenter.prototype.instrument = function(oldSettings) {\n if (this.autoInstrument.network && !(oldSettings && oldSettings.network)) {\n this.instrumentNetwork();\n } else if (!this.autoInstrument.network && oldSettings && oldSettings.network) {\n this.deinstrumentNetwork();\n }\n\n if (this.autoInstrument.log && !(oldSettings && oldSettings.log)) {\n this.instrumentConsole();\n } else if (!this.autoInstrument.log && oldSettings && oldSettings.log) {\n this.deinstrumentConsole();\n }\n\n if (this.autoInstrument.dom && !(oldSettings && oldSettings.dom)) {\n this.instrumentDom();\n } else if (!this.autoInstrument.dom && oldSettings && oldSettings.dom) {\n this.deinstrumentDom();\n }\n\n if (this.autoInstrument.navigation && !(oldSettings && oldSettings.navigation)) {\n this.instrumentNavigation();\n } else if (!this.autoInstrument.navigation && oldSettings && oldSettings.navigation) {\n this.deinstrumentNavigation();\n }\n\n if (this.autoInstrument.connectivity && !(oldSettings && oldSettings.connectivity)) {\n this.instrumentConnectivity();\n } else if (!this.autoInstrument.connectivity && oldSettings && oldSettings.connectivity) {\n this.deinstrumentConnectivity();\n }\n};\n\nInstrumenter.prototype.deinstrumentNetwork = function() {\n restore(this.replacements, 'network');\n};\n\nInstrumenter.prototype.instrumentNetwork = function() {\n var self = this;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && _.isFunction(xhr[prop])) {\n replace(xhr, prop, function(orig) {\n return self.rollbar.wrap(orig);\n });\n }\n }\n\n if ('XMLHttpRequest' in this._window) {\n var xhrp = this._window.XMLHttpRequest.prototype;\n replace(xhrp, 'open', function(orig) {\n return function(method, url) {\n if (_.isType(url, 'string')) {\n this.__rollbar_xhr = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'network');\n\n replace(xhrp, 'send', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(data) {\n /* eslint-enable no-unused-vars */\n var xhr = this;\n\n function onreadystatechangeHandler() {\n if (xhr.__rollbar_xhr && (xhr.readyState === 1 || xhr.readyState === 4)) {\n if (xhr.__rollbar_xhr.status_code === null) {\n xhr.__rollbar_xhr.status_code = 0;\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n requestData = data;\n }\n xhr.__rollbar_event = self.telemeter.captureNetwork(xhr.__rollbar_xhr, 'xhr', undefined, requestData);\n }\n if (xhr.readyState === 1) {\n xhr.__rollbar_xhr.start_time_ms = _.now();\n } else {\n xhr.__rollbar_xhr.end_time_ms = _.now();\n\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n var header, i;\n if (headersConfig === true) {\n var allHeaders = xhr.getAllResponseHeaders();\n if (allHeaders) {\n var arr = allHeaders.trim().split(/[\\r\\n]+/);\n var parts, value;\n for (i=0; i < arr.length; i++) {\n parts = arr[i].split(': ');\n header = parts.shift();\n value = parts.join(': ');\n headers[header] = value;\n }\n }\n } else {\n for (i=0; i < headersConfig.length; i++) {\n header = headersConfig[i];\n headers[header] = xhr.getResponseHeader(header);\n }\n }\n } catch (e) {\n /* we ignore the errors here that could come from different\n * browser issues with the xhr methods */\n }\n }\n var body = null;\n if (self.autoInstrument.networkResponseBody) {\n try {\n body = xhr.responseText;\n } catch (e) {\n /* ignore errors from reading responseText */\n }\n }\n var response = null;\n if (body || headers) {\n response = {};\n if (body) {\n response.body = body;\n }\n if (headers) {\n response.headers = headers;\n }\n }\n if (response) {\n xhr.__rollbar_xhr.response = response;\n }\n }\n try {\n var code = xhr.status;\n code = code === 1223 ? 204 : code;\n xhr.__rollbar_xhr.status_code = code;\n xhr.__rollbar_event.level = self.telemeter.levelFromStatus(code);\n } catch (e) {\n /* ignore possible exception from xhr.status */\n }\n }\n }\n\n wrapProp('onload', xhr);\n wrapProp('onerror', xhr);\n wrapProp('onprogress', xhr);\n\n if ('onreadystatechange' in xhr && _.isFunction(xhr.onreadystatechange)) {\n replace(xhr, 'onreadystatechange', function(orig) {\n return self.rollbar.wrap(orig, undefined, onreadystatechangeHandler);\n });\n } else {\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n return orig.apply(this, arguments);\n }\n }, this.replacements, 'network');\n }\n\n if ('fetch' in this._window) {\n replace(this._window, 'fetch', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(fn, t) {\n /* eslint-enable no-unused-vars */\n var args = new Array(arguments.length);\n for (var i=0, len=args.length; i < len; i++) {\n args[i] = arguments[i];\n }\n var input = args[0];\n var method = 'GET';\n var url;\n if (_.isType(input, 'string')) {\n url = input;\n } else if (input) {\n url = input.url;\n if (input.method) {\n method = input.method;\n }\n }\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n var metadata = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n if (args[1] && args[1].body) {\n requestData = args[1].body;\n } else if (args[0] && !_.isType(args[0], 'string') && args[0].body) {\n requestData = args[0].body;\n }\n }\n self.telemeter.captureNetwork(metadata, 'fetch', undefined, requestData);\n return orig.apply(this, args).then(function (resp) {\n metadata.end_time_ms = _.now();\n metadata.status_code = resp.status;\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n if (headersConfig === true) {\n // This is unsupported in IE so we can't do it\n /*\n var allHeaders = resp.headers.entries();\n for (var pair of allHeaders) {\n headers[pair[0]] = pair[1];\n }\n */\n } else {\n for (var i=0; i < headersConfig.length; i++) {\n var header = headersConfig[i];\n headers[header] = resp.headers.get(header);\n }\n }\n } catch (e) {\n /* ignore probable IE errors */\n }\n }\n var response = null;\n if (headers) {\n response = {\n headers: headers\n };\n }\n if (response) {\n metadata.response = response;\n }\n return resp;\n });\n };\n }, this.replacements, 'network');\n }\n};\n\nInstrumenter.prototype.deinstrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n var b;\n while (this.replacements['log'].length) {\n b = this.replacements['log'].shift();\n this._window.console[b[0]] = b[1];\n }\n};\n\nInstrumenter.prototype.instrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n\n var self = this;\n var c = this._window.console;\n\n function wrapConsole(method) {\n var orig = c[method];\n var origConsole = c;\n var level = method === 'warn' ? 'warning' : method;\n c[method] = function() {\n var args = Array.prototype.slice.call(arguments);\n var message = _.formatArgsAsString(args);\n self.telemeter.captureLog(message, level);\n if (orig) {\n Function.prototype.apply.call(orig, origConsole, args);\n }\n };\n self.replacements['log'].push([method, orig]);\n }\n var methods = ['debug','info','warn','error','log'];\n for (var i=0, len=methods.length; i < len; i++) {\n wrapConsole(methods[i]);\n }\n};\n\nInstrumenter.prototype.deinstrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n this.removeListeners('dom');\n};\n\nInstrumenter.prototype.instrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n var clickHandler = this.handleClick.bind(this);\n var blurHandler = this.handleBlur.bind(this);\n this.addListener('dom', this._window, 'click', 'onclick', clickHandler, true);\n this.addListener('dom', this._window, 'blur', 'onfocusout', blurHandler, true);\n};\n\nInstrumenter.prototype.handleClick = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n var hasTag = e && e.tagName;\n var anchorOrButton = domUtil.isDescribedElement(e, 'a') || domUtil.isDescribedElement(e, 'button');\n if (hasTag && (anchorOrButton || domUtil.isDescribedElement(e, 'input', ['button', 'submit']))) {\n this.captureDomEvent('click', e);\n } else if (domUtil.isDescribedElement(e, 'input', ['checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value, e.checked);\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleBlur = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n if (e && e.tagName) {\n if (domUtil.isDescribedElement(e, 'textarea')) {\n this.captureDomEvent('input', e, e.value);\n } else if (domUtil.isDescribedElement(e, 'select') && e.options && e.options.length) {\n this.handleSelectInputChanged(e);\n } else if (domUtil.isDescribedElement(e, 'input') && !domUtil.isDescribedElement(e, 'input', ['button', 'submit', 'hidden', 'checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value);\n }\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleSelectInputChanged = function(elem) {\n if (elem.multiple) {\n for (var i = 0; i < elem.options.length; i++) {\n if (elem.options[i].selected) {\n this.captureDomEvent('input', elem, elem.options[i].value);\n }\n }\n } else if (elem.selectedIndex >= 0 && elem.options[elem.selectedIndex]) {\n this.captureDomEvent('input', elem, elem.options[elem.selectedIndex].value);\n }\n};\n\nInstrumenter.prototype.captureDomEvent = function(subtype, element, value, isChecked) {\n if (value !== undefined) {\n if (this.scrubTelemetryInputs || (domUtil.getElementType(element) === 'password')) {\n value = '[scrubbed]';\n } else if (this.telemetryScrubber) {\n var description = domUtil.describeElement(element);\n if (this.telemetryScrubber(description)) {\n value = '[scrubbed]';\n }\n }\n }\n var elementString = domUtil.elementArrayToString(domUtil.treeToArray(element));\n this.telemeter.captureDom(subtype, elementString, value, isChecked);\n};\n\nInstrumenter.prototype.deinstrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n restore(this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.instrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n var self = this;\n replace(this._window, 'onpopstate', function(orig) {\n return function() {\n var current = self._location.href;\n self.handleUrlChange(self._lastHref, current);\n if (orig) {\n orig.apply(this, arguments);\n }\n };\n }, this.replacements, 'navigation');\n\n replace(this._window.history, 'pushState', function(orig) {\n return function() {\n var url = arguments.length > 2 ? arguments[2] : undefined;\n if (url) {\n self.handleUrlChange(self._lastHref, url + '');\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.handleUrlChange = function(from, to) {\n var parsedHref = urlparser.parse(this._location.href);\n var parsedTo = urlparser.parse(to);\n var parsedFrom = urlparser.parse(from);\n this._lastHref = to;\n if (parsedHref.protocol === parsedTo.protocol && parsedHref.host === parsedTo.host) {\n to = parsedTo.path + (parsedTo.hash || '');\n }\n if (parsedHref.protocol === parsedFrom.protocol && parsedHref.host === parsedFrom.host) {\n from = parsedFrom.path + (parsedFrom.hash || '');\n }\n this.telemeter.captureNavigation(from, to);\n};\n\nInstrumenter.prototype.deinstrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.removeListeners('connectivity');\n } else {\n restore(this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.instrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.addListener('connectivity', this._window, 'online', undefined, function() {\n this.telemeter.captureConnectivityChange('online');\n }.bind(this), true);\n this.addListener('connectivity', this._window, 'offline', undefined, function() {\n this.telemeter.captureConnectivityChange('offline');\n }.bind(this), true);\n } else {\n var self = this;\n replace(this._document.body, 'ononline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('online');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n replace(this._document.body, 'onoffline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('offline');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.addListener = function(section, obj, type, altType, handler, capture) {\n if (obj.addEventListener) {\n obj.addEventListener(type, handler, capture);\n this.eventRemovers[section].push(function() {\n obj.removeEventListener(type, handler, capture);\n });\n } else if (altType) {\n obj.attachEvent(altType, handler);\n this.eventRemovers[section].push(function() {\n obj.detachEvent(altType, handler);\n });\n }\n};\n\nInstrumenter.prototype.removeListeners = function(section) {\n var r;\n while (this.eventRemovers[section].length) {\n r = this.eventRemovers[section].shift();\n r();\n }\n};\n\nmodule.exports = Instrumenter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/telemetry.js\n// module id = 26\n// module chunks = 0","'use strict';\n\nfunction getElementType(e) {\n return (e.getAttribute('type') || '').toLowerCase();\n}\n\nfunction isDescribedElement(element, type, subtypes) {\n if (element.tagName.toLowerCase() !== type.toLowerCase()) {\n return false;\n }\n if (!subtypes) {\n return true;\n }\n element = getElementType(element);\n for (var i = 0; i < subtypes.length; i++) {\n if (subtypes[i] === element) {\n return true;\n }\n }\n return false;\n}\n\nfunction getElementFromEvent(evt, doc) {\n if (evt.target) {\n return evt.target;\n }\n if (doc && doc.elementFromPoint) {\n return doc.elementFromPoint(evt.clientX, evt.clientY);\n }\n return undefined;\n}\n\nfunction treeToArray(elem) {\n var MAX_HEIGHT = 5;\n var out = [];\n var nextDescription;\n for (var height = 0; elem && height < MAX_HEIGHT; height++) {\n nextDescription = describeElement(elem);\n if (nextDescription.tagName === 'html') {\n break;\n }\n out.unshift(nextDescription);\n elem = elem.parentNode;\n }\n return out;\n}\n\nfunction elementArrayToString(a) {\n var MAX_LENGTH = 80;\n var separator = ' > ', separatorLength = separator.length;\n var out = [], len = 0, nextStr, totalLength;\n\n for (var i = a.length - 1; i >= 0; i--) {\n nextStr = descriptionToString(a[i]);\n totalLength = len + (out.length * separatorLength) + nextStr.length;\n if (i < a.length - 1 && totalLength >= MAX_LENGTH + 3) {\n out.unshift('...');\n break;\n }\n out.unshift(nextStr);\n len += nextStr.length;\n }\n return out.join(separator);\n}\n\nfunction descriptionToString(desc) {\n if (!desc || !desc.tagName) {\n return '';\n }\n var out = [desc.tagName];\n if (desc.id) {\n out.push('#' + desc.id);\n }\n if (desc.classes) {\n out.push('.' + desc.classes.join('.'));\n }\n for (var i = 0; i < desc.attributes.length; i++) {\n out.push('[' + desc.attributes[i].key + '=\"' + desc.attributes[i].value + '\"]');\n }\n\n return out.join('');\n}\n\n/**\n * Input: a dom element\n * Output: null if tagName is falsey or input is falsey, else\n * {\n * tagName: String,\n * id: String | undefined,\n * classes: [String] | undefined,\n * attributes: [\n * {\n * key: OneOf(type, name, title, alt),\n * value: String\n * }\n * ]\n * }\n */\nfunction describeElement(elem) {\n if (!elem || !elem.tagName) {\n return null;\n }\n var out = {}, className, key, attr, i;\n out.tagName = elem.tagName.toLowerCase();\n if (elem.id) {\n out.id = elem.id;\n }\n className = elem.className;\n if (className && (typeof className === 'string')) {\n out.classes = className.split(/\\s+/);\n }\n var attributes = ['type', 'name', 'title', 'alt'];\n out.attributes = [];\n for (i = 0; i < attributes.length; i++) {\n key = attributes[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.attributes.push({key: key, value: attr});\n }\n }\n return out;\n}\n\nmodule.exports = {\n describeElement: describeElement,\n descriptionToString: descriptionToString,\n elementArrayToString: elementArrayToString,\n treeToArray: treeToArray,\n getElementFromEvent: getElementFromEvent,\n isDescribedElement: isDescribedElement,\n getElementType: getElementType\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/domUtility.js\n// module id = 27\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 85d78aa3ccff8dc159ee","webpack:///./src/browser/bundles/rollbar.noconflict.js","webpack:///./src/browser/rollbar.js","webpack:///./src/rollbar.js","webpack:///./src/rateLimiter.js","webpack:///./src/queue.js","webpack:///./src/utility.js","webpack:///./~/extend/index.js","webpack:///./vendor/JSON-js/json3.js","webpack:///./src/notifier.js","webpack:///./src/telemetry.js","webpack:///./src/api.js","webpack:///./src/apiUtility.js","webpack:///./src/browser/logger.js","webpack:///./~/console-polyfill/index.js","webpack:///./src/browser/detection.js","webpack:///./src/browser/globalSetup.js","webpack:///./src/browser/transport.js","webpack:///./src/browser/url.js","webpack:///./src/browser/transforms.js","webpack:///./src/browser/errorParser.js","webpack:///./~/error-stack-parser/error-stack-parser.js","webpack:///./~/error-stack-parser/~/stackframe/stackframe.js","webpack:///./src/transforms.js","webpack:///./src/browser/predicates.js","webpack:///./src/predicates.js","webpack:///./src/browser/telemetry.js","webpack:///./src/browser/domUtility.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;ACVA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;;;;;;;ACtCA;;AAEA;;AAEA;AACA;AACA;;AAEA;;;;;;;ACRA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,6BAA4B;AAC5B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA,6BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,2BAA0B,sBAAsB;AAChD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,qCAAoC,SAAS;AAC7C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC3ZA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA,mCAAkC;AAClC;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACpIA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC7IA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAkC;AAClC;AACA;;AAEA;AACA;AACA;AACA,yDAAwD,WAAW;AACnE;AACA;AACA,gBAAe,WAAW;AAC1B,gBAAe,eAAe;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA2B,QAAQ;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,cAAa,8BAA8B;AAC3C;AACA;AACA;AACA;AACA,gDAA+C,SAAS;AACxD;AACA;AACA,eAAc;AACd;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAkD,SAAS;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAwB,+BAA+B;;AAEvD;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACnQA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAY;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,gBAAe,gBAAgB;AAC/B;AACA;AACA;;AAEA,0BAAyB;AACzB,cAAa,iBAAiB;AAC9B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,mCAAkC,OAAO;AACzC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAmD,SAAS;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,6BAA4B;AAC5B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAwC,SAAS,UAAU,YAAY,GAAG;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,SAAS;AAC/C;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,WAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB,qBAAqB;AACtC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAe,qBAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB,wBAAwB;AACzC;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,kBAAiB,wBAAwB;AACzC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iCAAgC,SAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC9oBA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAmB;;AAEnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA,QAAO,YAAY;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA,OAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAAyE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAoB;AACpB;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,0CAAyC,iBAAiB;AAC1D,+BAA8B,kBAAkB;;AAEhD,0CAAyC,iBAAiB;AAC1D,uCAAsC,6BAA6B;;AAEnE;AACA;AACA;AACA;AACA,cAAa;AACb;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,yBAAwB;AACxB,gDAA+C,EAAE;AACjD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;;AAGA;;AAEA;;AAEA,WAAU;AACV,WAAU;AACV,WAAU;AACV;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA,sBAAqB,YAAY;AACjC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,sBAAqB,YAAY;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,gBAAe;AACf;AACA,eAAc,wDAAwD;AACtE,eAAc,0BAA0B;AACxC;AACA;AACA;AACA;;AAEA;;AAEA;AACA,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAmB,WAAW;AAC9B;AACA;;AAEA;;AAEA,QAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,uBAAsB,UAAU;AAChC;AACA;;;AAGA;;AAEA;AACA;;AAEA;AACA;;AAEA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB,qBAAoB;AACpB,eAAc;AACd,iBAAgB;AAChB,sBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAoB;AACpB;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,qBAAoB;AACpB;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,WAAU;AACV;AACA,yBAAwB,YAAY;AACpC;AACA;AACA,YAAW;AACX;AACA,yBAAwB,gDAAgD;AACxE;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA;AACA,UAAS;AACT,WAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,yBAAwB,YAAY;AACpC;AACA;AACA,YAAW;AACX;AACA,yBAAwB,gDAAgD;AACxE;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,uCAAsC,EAAE;AACxC;AACA;AACA;AACA,UAAS;AACT;;AAEA;;AAEA;AACA;;AAEA;AACA,gDAA+C,yGAAyG,EAAE;;AAE1J;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA,cAAa;;AAEb;AACA;;AAEA;AACA;AACA,cAAa;;AAEb;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,UAAS;AACT;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE,UAAU;AACvB;AACA;AACA,MAAK;AACL;AACA;;AAEA;;;;;;;AC1vBA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA4B;AAC5B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;;;;;;ACvHA;;AAEA;;AAEA;;AAEA;AACA;AACA,mCAAkC;AAClC;AACA;AACA;;AAEA;AACA;AACA,mCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sCAAqC,mBAAmB;AACxD;;AAEA;AACA,sCAAqC,4BAA4B;AACjE;AACA;AACA,+BAA8B,4BAA4B;AAC1D;AACA;AACA;AACA,sCAAqC,gBAAgB;AACrD;AACA;AACA,+BAA8B,gBAAgB;AAC9C;AACA;;AAEA;AACA,+BAA8B,aAAa;AAC3C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACrKA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;ACnEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACzFA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;;;AClBD;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;AC/BA;;AAEA;AACA,iBAAgB,QAAQ;AACxB;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAgB,QAAQ;;AAExB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAgB,QAAQ;AACxB;AACA;AACA;AACA,cAAa,oBAAoB;AACjC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;AC3HA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,kBAAkB;AAC/B;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;AC7MA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;AChFA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gCAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,OAAO;AAC7C;AACA,qBAAoB,6CAA6C;AACjE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qCAAoC;AACpC;;AAEA,6BAA4B,gBAAgB;AAC5C;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAe,kBAAkB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,sCAAqC;AACrC;AACA,+BAA8B,aAAa;AAC3C;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC5PA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;;AAEA;;AAEA,oBAAmB,wBAAwB;AAC3C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACtGA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA,EAAC;AACD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA,4BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA,4BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,0BAAyB;AACzB;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,cAAa;AACb;AACA,cAAa;AACb;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAa;AACb,UAAS;;AAET;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,cAAa;AACb,UAAS;;AAET;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,cAAa;AACb;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;;AAEA,gDAA+C,SAAS;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAS;;AAET;AACA;AACA;AACA;;AAEA,gDAA+C,SAAS;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,EAAC;;;;;;;;AC/LD;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;;AAET;AACA,4DAA2D,UAAU;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,EAAC;;;;;;;AC1GD;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,+BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAqC,UAAU,sBAAsB;AACrE;AACA;AACA;AACA;;AAEA;AACA;AACA,oCAAmC;AACnC;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACrFA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;ACbA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAe,iBAAiB;AAChC;AACA;;AAEA;AACA;AACA;;AAEA,kBAAiB,gBAAgB;AACjC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,kBAAiB,SAAS;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AChKA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,4CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,sCAAqC;AACrC;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,4CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAA+B,gBAAgB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB;AACnB,8BAA6B,0BAA0B;AACvD;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,SAAS;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf,8BAA6B,0BAA0B;AACvD;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAmC,SAAS;AAC5C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA,oBAAmB,yBAAyB;AAC5C;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACnjBA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB,qBAAqB;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,uBAAsB,6BAA6B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,6BAA4B,QAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB,4BAA4B;AAC7C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,uBAAuB;AACpC;AACA;AACA;AACA,4BAA2B,sBAAsB;AACjD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"rollbar.noconflict.umd.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"rollbar\"] = factory();\n\telse\n\t\troot[\"rollbar\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 85d78aa3ccff8dc159ee","'use strict';\n\nvar rollbar = require('../rollbar');\n\nif ((typeof window !== 'undefined') && !window._rollbarStartTime) {\n window._rollbarStartTime = (new Date()).getTime();\n}\n\nmodule.exports = rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/bundles/rollbar.noconflict.js\n// module id = 1\n// module chunks = 0","'use strict';\n\nvar Client = require('../rollbar');\nvar _ = require('../utility');\nvar API = require('../api');\nvar logger = require('./logger');\nvar globals = require('./globalSetup');\n\nvar transport = require('./transport');\nvar urllib = require('./url');\n\nvar transforms = require('./transforms');\nvar sharedTransforms = require('../transforms');\nvar predicates = require('./predicates');\nvar sharedPredicates = require('../predicates');\nvar errorParser = require('./errorParser');\nvar Instrumenter = require('./telemetry');\n\nfunction Rollbar(options, client) {\n this.options = _.extend({}, defaultOptions, options);\n var api = new API(this.options, transport, urllib);\n this.client = client || new Client(this.options, api, logger, 'browser');\n\n var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n var gDocument = (typeof document != 'undefined') && document;\n addTransformsToNotifier(this.client.notifier);\n addPredicatesToQueue(this.client.queue);\n if (this.options.captureUncaught || this.options.handleUncaughtExceptions) {\n globals.captureUncaughtExceptions(gWindow, this);\n globals.wrapGlobals(gWindow, this);\n }\n if (this.options.captureUnhandledRejections || this.options.handleUnhandledRejections) {\n globals.captureUnhandledRejections(gWindow, this);\n }\n\n this.instrumenter = new Instrumenter(this.options, this.client.telemeter, this, gWindow, gDocument);\n this.instrumenter.instrument();\n}\n\nvar _instance = null;\nRollbar.init = function(options, client) {\n if (_instance) {\n return _instance.global(options).configure(options);\n }\n _instance = new Rollbar(options, client);\n return _instance;\n};\n\nfunction handleUninitialized(maybeCallback) {\n var message = 'Rollbar is not initialized';\n logger.error(message);\n if (maybeCallback) {\n maybeCallback(new Error(message));\n }\n}\n\nRollbar.prototype.global = function(options) {\n this.client.global(options);\n return this;\n};\nRollbar.global = function(options) {\n if (_instance) {\n return _instance.global(options);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.extend({}, oldOptions, options, payload);\n this.client.configure(options, payloadData);\n this.instrumenter.configure(options);\n return this;\n};\nRollbar.configure = function(options, payloadData) {\n if (_instance) {\n return _instance.configure(options, payloadData);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.lastError = function() {\n return this.client.lastError;\n};\nRollbar.lastError = function() {\n if (_instance) {\n return _instance.lastError();\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.log = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.log(item);\n return {uuid: uuid};\n};\nRollbar.log = function() {\n if (_instance) {\n return _instance.log.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.debug = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.debug(item);\n return {uuid: uuid};\n};\nRollbar.debug = function() {\n if (_instance) {\n return _instance.debug.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.info = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.info(item);\n return {uuid: uuid};\n};\nRollbar.info = function() {\n if (_instance) {\n return _instance.info.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warn = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warn(item);\n return {uuid: uuid};\n};\nRollbar.warn = function() {\n if (_instance) {\n return _instance.warn.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warning = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warning(item);\n return {uuid: uuid};\n};\nRollbar.warning = function() {\n if (_instance) {\n return _instance.warning.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.error = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.error(item);\n return {uuid: uuid};\n};\nRollbar.error = function() {\n if (_instance) {\n return _instance.error.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.critical = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.critical(item);\n return {uuid: uuid};\n};\nRollbar.critical = function() {\n if (_instance) {\n return _instance.critical.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.handleUncaughtException = function(message, url, lineno, colno, error, context) {\n var item;\n var stackInfo = _.makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n 'onerror',\n 'uncaught exception',\n errorParser\n );\n if (_.isError(error)) {\n item = this._createItem([message, error, context]);\n item._unhandledStackInfo = stackInfo;\n } else if (_.isError(url)) {\n item = this._createItem([message, url, context]);\n item._unhandledStackInfo = stackInfo;\n } else {\n item = this._createItem([message, context]);\n item.stackInfo = stackInfo;\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n this.client.log(item);\n};\n\nRollbar.prototype.handleUnhandledRejection = function(reason, promise) {\n var message = 'unhandled rejection was null or undefined!';\n message = reason ? (reason.message || String(reason)) : message;\n var context = (reason && reason._rollbarContext) || (promise && promise._rollbarContext);\n\n var item;\n if (_.isError(reason)) {\n item = this._createItem([message, reason, context]);\n } else {\n item = this._createItem([message, reason, context]);\n item.stackInfo = _.makeUnhandledStackInfo(\n message,\n '',\n 0,\n 0,\n null,\n 'unhandledrejection',\n '',\n errorParser\n );\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n item._originalArgs = item._originalArgs || [];\n item._originalArgs.push(promise);\n this.client.log(item);\n};\n\nRollbar.prototype.wrap = function(f, context, _before) {\n try {\n var ctxFn;\n if(_.isFunction(context)) {\n ctxFn = context;\n } else {\n ctxFn = function() { return context || {}; };\n }\n\n if (!_.isFunction(f)) {\n return f;\n }\n\n if (f._isWrap) {\n return f;\n }\n\n if (!f._rollbar_wrapped) {\n f._rollbar_wrapped = function () {\n if (_before && _.isFunction(_before)) {\n _before.apply(this, arguments);\n }\n try {\n return f.apply(this, arguments);\n } catch(exc) {\n var e = exc;\n if (e) {\n if (_.isType(e, 'string')) {\n e = new String(e);\n }\n e._rollbarContext = ctxFn() || {};\n e._rollbarContext._wrappedSource = f.toString();\n\n window._rollbarWrappedError = e;\n }\n throw e;\n }\n };\n\n f._rollbar_wrapped._isWrap = true;\n\n if (f.hasOwnProperty) {\n for (var prop in f) {\n if (f.hasOwnProperty(prop)) {\n f._rollbar_wrapped[prop] = f[prop];\n }\n }\n }\n }\n\n return f._rollbar_wrapped;\n } catch (e) {\n // Return the original function if the wrap fails.\n return f;\n }\n};\nRollbar.wrap = function(f, context) {\n if (_instance) {\n return _instance.wrap(f, context);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.captureEvent = function(metadata, level) {\n return this.client.captureEvent(metadata, level);\n};\nRollbar.captureEvent = function(metadata, level) {\n if (_instance) {\n return _instance.captureEvent(metadata, level);\n } else {\n handleUninitialized();\n }\n};\n\n// The following two methods are used internally and are not meant for public use\nRollbar.prototype.captureDomContentLoaded = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureLoad(ts);\n};\n\n/* Internal */\n\nfunction addTransformsToNotifier(notifier) {\n notifier\n .addTransform(transforms.handleItemWithError)\n .addTransform(transforms.ensureItemHasSomethingToSay)\n .addTransform(transforms.addBaseInfo)\n .addTransform(transforms.addRequestInfo(window))\n .addTransform(transforms.addClientInfo(window))\n .addTransform(transforms.addPluginInfo(window))\n .addTransform(transforms.addBody)\n .addTransform(sharedTransforms.addMessageWithError)\n .addTransform(sharedTransforms.addTelemetryData)\n .addTransform(sharedTransforms.addConfigToPayload)\n .addTransform(transforms.scrubPayload)\n .addTransform(sharedTransforms.userTransform(logger))\n .addTransform(sharedTransforms.itemToPayload);\n}\n\nfunction addPredicatesToQueue(queue) {\n queue\n .addPredicate(sharedPredicates.checkLevel)\n .addPredicate(predicates.checkIgnore)\n .addPredicate(sharedPredicates.userCheckIgnore(logger))\n .addPredicate(sharedPredicates.urlIsNotBlacklisted(logger))\n .addPredicate(sharedPredicates.urlIsWhitelisted(logger))\n .addPredicate(sharedPredicates.messageIsIgnored(logger));\n}\n\nRollbar.prototype._createItem = function(args) {\n return _.createItem(args, logger, this);\n};\n\nfunction _getFirstFunction(args) {\n for (var i = 0, len = args.length; i < len; ++i) {\n if (_.isFunction(args[i])) {\n return args[i];\n }\n }\n return undefined;\n}\n\n/* global __NOTIFIER_VERSION__:false */\n/* global __DEFAULT_BROWSER_SCRUB_FIELDS__:false */\n/* global __DEFAULT_LOG_LEVEL__:false */\n/* global __DEFAULT_REPORT_LEVEL__:false */\n/* global __DEFAULT_UNCAUGHT_ERROR_LEVEL:false */\n/* global __DEFAULT_ENDPOINT__:false */\n\nvar defaultOptions = {\n version: __NOTIFIER_VERSION__,\n scrubFields: __DEFAULT_BROWSER_SCRUB_FIELDS__,\n logLevel: __DEFAULT_LOG_LEVEL__,\n reportLevel: __DEFAULT_REPORT_LEVEL__,\n uncaughtErrorLevel: __DEFAULT_UNCAUGHT_ERROR_LEVEL,\n endpoint: __DEFAULT_ENDPOINT__,\n verbose: false,\n enabled: true,\n sendConfig: false,\n includeItemsInTelemetry: true,\n captureIp: true\n};\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/rollbar.js\n// module id = 2\n// module chunks = 0","'use strict';\n\nvar RateLimiter = require('./rateLimiter');\nvar Queue = require('./queue');\nvar Notifier = require('./notifier');\nvar Telemeter = require('./telemetry');\nvar _ = require('./utility');\n\n/*\n * Rollbar - the interface to Rollbar\n *\n * @param options\n * @param api\n * @param logger\n */\nfunction Rollbar(options, api, logger, platform) {\n this.options = _.extend(true, {}, options);\n this.logger = logger;\n Rollbar.rateLimiter.configureGlobal(this.options);\n Rollbar.rateLimiter.setPlatformOptions(platform, this.options);\n this.queue = new Queue(Rollbar.rateLimiter, api, logger, this.options);\n this.notifier = new Notifier(this.queue, this.options);\n this.telemeter = new Telemeter(this.options);\n this.lastError = null;\n}\n\nvar defaultOptions = {\n maxItems: 0,\n itemsPerMinute: 60\n};\n\nRollbar.rateLimiter = new RateLimiter(defaultOptions);\n\nRollbar.prototype.global = function(options) {\n Rollbar.rateLimiter.configureGlobal(options);\n return this;\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n this.notifier && this.notifier.configure(options);\n this.telemeter && this.telemeter.configure(options);\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.extend(true, {}, oldOptions, options, payload);\n this.global(this.options);\n return this;\n};\n\nRollbar.prototype.log = function(item) {\n var level = this._defaultLogLevel();\n return this._log(level, item);\n};\n\nRollbar.prototype.debug = function(item) {\n this._log('debug', item);\n};\n\nRollbar.prototype.info = function(item) {\n this._log('info', item);\n};\n\nRollbar.prototype.warn = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.warning = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.error = function(item) {\n this._log('error', item);\n};\n\nRollbar.prototype.critical = function(item) {\n this._log('critical', item);\n};\n\nRollbar.prototype.wait = function(callback) {\n this.queue.wait(callback);\n};\n\nRollbar.prototype.captureEvent = function(metadata, level) {\n return this.telemeter.captureEvent(metadata, level);\n};\n\nRollbar.prototype.captureDomContentLoaded = function(ts) {\n return this.telemeter.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(ts) {\n return this.telemeter.captureLoad(ts);\n};\n\n/* Internal */\n\nRollbar.prototype._log = function(defaultLevel, item) {\n if (this._sameAsLastError(item)) {\n if (item.callback) {\n item.callback();\n }\n return;\n }\n try {\n var callback = null;\n if (item.callback) {\n callback = item.callback;\n delete item.callback;\n }\n item.level = item.level || defaultLevel;\n this.telemeter._captureRollbarItem(item);\n item.telemetryEvents = this.telemeter.copyEvents();\n this.notifier.log(item, callback);\n } catch (e) {\n this.logger.error(e)\n }\n};\n\nRollbar.prototype._defaultLogLevel = function() {\n return this.options.logLevel || 'debug';\n};\n\nRollbar.prototype._sameAsLastError = function(item) {\n if (this.lastError && this.lastError === item.err) {\n return true;\n }\n this.lastError = item.err;\n return false;\n};\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rollbar.js\n// module id = 3\n// module chunks = 0","'use strict';\n\n/*\n * RateLimiter - an object that encapsulates the logic for counting items sent to Rollbar\n *\n * @param options - the same options that are accepted by configureGlobal offered as a convenience\n */\nfunction RateLimiter(options) {\n this.startTime = (new Date()).getTime();\n this.counter = 0;\n this.perMinCounter = 0;\n this.platform = null;\n this.platformOptions = {};\n this.configureGlobal(options);\n}\n\nRateLimiter.globalSettings = {\n startTime: (new Date()).getTime(),\n maxItems: undefined,\n itemsPerMinute: undefined\n};\n\n/*\n * configureGlobal - set the global rate limiter options\n *\n * @param options - Only the following values are recognized:\n * startTime: a timestamp of the form returned by (new Date()).getTime()\n * maxItems: the maximum items\n * itemsPerMinute: the max number of items to send in a given minute\n */\nRateLimiter.prototype.configureGlobal = function(options) {\n if (options.startTime !== undefined) {\n RateLimiter.globalSettings.startTime = options.startTime;\n }\n if (options.maxItems !== undefined) {\n RateLimiter.globalSettings.maxItems = options.maxItems;\n }\n if (options.itemsPerMinute !== undefined) {\n RateLimiter.globalSettings.itemsPerMinute = options.itemsPerMinute;\n }\n};\n\n/*\n * shouldSend - determine if we should send a given item based on rate limit settings\n *\n * @param item - the item we are about to send\n * @returns An object with the following structure:\n * error: (Error|null)\n * shouldSend: bool\n * payload: (Object|null)\n * If shouldSend is false, the item passed as a parameter should not be sent to Rollbar, and\n * exactly one of error or payload will be non-null. If error is non-null, the returned Error will\n * describe the situation, but it means that we were already over a rate limit (either globally or\n * per minute) when this item was checked. If error is null, and therefore payload is non-null, it\n * means this item put us over the global rate limit and the payload should be sent to Rollbar in\n * place of the passed in item.\n */\nRateLimiter.prototype.shouldSend = function(item, now) {\n now = now || (new Date()).getTime();\n if (now - this.startTime >= 60000) {\n this.startTime = now;\n this.perMinCounter = 0;\n }\n\n var globalRateLimit = RateLimiter.globalSettings.maxItems;\n var globalRateLimitPerMin = RateLimiter.globalSettings.itemsPerMinute;\n\n if (checkRate(item, globalRateLimit, this.counter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimit + ' max items reached', false);\n } else if (checkRate(item, globalRateLimitPerMin, this.perMinCounter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimitPerMin + ' items per minute reached', false);\n }\n this.counter++;\n this.perMinCounter++;\n\n var shouldSend = !checkRate(item, globalRateLimit, this.counter);\n var perMinute = shouldSend;\n shouldSend = shouldSend && !checkRate(item, globalRateLimitPerMin, this.perMinCounter);\n return shouldSendValue(this.platform, this.platformOptions, null, shouldSend, globalRateLimit, globalRateLimitPerMin, perMinute);\n};\n\nRateLimiter.prototype.setPlatformOptions = function(platform, options) {\n this.platform = platform;\n this.platformOptions = options;\n};\n\n/* Helpers */\n\nfunction checkRate(item, limit, counter) {\n return !item.ignoreRateLimit && limit >= 1 && counter > limit;\n}\n\nfunction shouldSendValue(platform, options, error, shouldSend, globalRateLimit, limitPerMin, perMinute) {\n var payload = null;\n if (error) {\n error = new Error(error);\n }\n if (!error && !shouldSend) {\n payload = rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute);\n }\n return {error: error, shouldSend: shouldSend, payload: payload};\n}\n\nfunction rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute) {\n var environment = options.environment || (options.payload && options.payload.environment);\n var msg;\n if (perMinute) {\n msg = 'item per minute limit reached, ignoring errors until timeout';\n } else {\n msg = 'maxItems has been hit, ignoring errors until reset.';\n }\n var item = {\n body: {\n message: {\n body: msg,\n extra: {\n maxItems: globalRateLimit,\n itemsPerMinute: limitPerMin\n }\n }\n },\n language: 'javascript',\n environment: environment,\n notifier: {\n version: (options.notifier && options.notifier.version) || options.version\n }\n };\n if (platform === 'browser') {\n item.platform = 'browser';\n item.framework = 'browser-js';\n item.notifier.name = 'rollbar-browser-js';\n } else if (platform === 'server') {\n item.framework = options.framework || 'node-js';\n item.notifier.name = options.notifier.name;\n } else if (platform === 'react-native') {\n item.framework = options.framework || 'react-native';\n item.notifier.name = options.notifier.name;\n }\n return item;\n}\n\nmodule.exports = RateLimiter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rateLimiter.js\n// module id = 4\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Queue - an object which handles which handles a queue of items to be sent to Rollbar.\n * This object handles rate limiting via a passed in rate limiter, retries based on connection\n * errors, and filtering of items based on a set of configurable predicates. The communication to\n * the backend is performed via a given API object.\n *\n * @param rateLimiter - An object which conforms to the interface\n * rateLimiter.shouldSend(item) -> bool\n * @param api - An object which conforms to the interface\n * api.postItem(payload, function(err, response))\n * @param logger - An object used to log verbose messages if desired\n * @param options - see Queue.prototype.configure\n */\nfunction Queue(rateLimiter, api, logger, options) {\n this.rateLimiter = rateLimiter;\n this.api = api;\n this.logger = logger;\n this.options = options;\n this.predicates = [];\n this.pendingItems = [];\n this.pendingRequests = [];\n this.retryQueue = [];\n this.retryHandle = null;\n this.waitCallback = null;\n this.waitIntervalID = null;\n}\n\n/*\n * configure - updates the options this queue uses\n *\n * @param options\n */\nQueue.prototype.configure = function(options) {\n this.api && this.api.configure(options);\n var oldOptions = this.options;\n this.options = _.extend(true, {}, oldOptions, options);\n return this;\n};\n\n/*\n * addPredicate - adds a predicate to the end of the list of predicates for this queue\n *\n * @param predicate - function(item, options) -> (bool|{err: Error})\n * Returning true means that this predicate passes and the item is okay to go on the queue\n * Returning false means do not add the item to the queue, but it is not an error\n * Returning {err: Error} means do not add the item to the queue, and the given error explains why\n * Returning {err: undefined} is equivalent to returning true but don't do that\n */\nQueue.prototype.addPredicate = function(predicate) {\n if (_.isFunction(predicate)) {\n this.predicates.push(predicate);\n }\n return this;\n};\n\nQueue.prototype.addPendingItem = function(item) {\n this.pendingItems.push(item);\n};\n\nQueue.prototype.removePendingItem = function(item) {\n var idx = this.pendingItems.indexOf(item);\n if (idx !== -1) {\n this.pendingItems.splice(idx, 1);\n }\n};\n\n/*\n * addItem - Send an item to the Rollbar API if all of the predicates are satisfied\n *\n * @param item - The payload to send to the backend\n * @param callback - function(error, repsonse) which will be called with the response from the API\n * in the case of a success, otherwise response will be null and error will have a value. If both\n * error and response are null then the item was stopped by a predicate which did not consider this\n * to be an error condition, but nonetheless did not send the item to the API.\n * @param originalError - The original error before any transformations that is to be logged if any\n */\nQueue.prototype.addItem = function(item, callback, originalError, originalItem) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() { return; };\n }\n var predicateResult = this._applyPredicates(item);\n if (predicateResult.stop) {\n this.removePendingItem(originalItem);\n callback(predicateResult.err);\n return;\n }\n this._maybeLog(item, originalError);\n this.removePendingItem(originalItem);\n this.pendingRequests.push(item);\n try {\n this._makeApiRequest(item, function(err, resp) {\n this._dequeuePendingRequest(item);\n callback(err, resp);\n }.bind(this));\n } catch (e) {\n this._dequeuePendingRequest(item);\n callback(e);\n }\n};\n\n/*\n * wait - Stop any further errors from being added to the queue, and get called back when all items\n * currently processing have finished sending to the backend.\n *\n * @param callback - function() called when all pending items have been sent\n */\nQueue.prototype.wait = function(callback) {\n if (!_.isFunction(callback)) {\n return;\n }\n this.waitCallback = callback;\n if (this._maybeCallWait()) {\n return;\n }\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitIntervalID = setInterval(function() {\n this._maybeCallWait();\n }.bind(this), 500);\n};\n\n/* _applyPredicates - Sequentially applies the predicates that have been added to the queue to the\n * given item with the currently configured options.\n *\n * @param item - An item in the queue\n * @returns {stop: bool, err: (Error|null)} - stop being true means do not add item to the queue,\n * the error value should be passed up to a callbak if we are stopping.\n */\nQueue.prototype._applyPredicates = function(item) {\n var p = null;\n for (var i = 0, len = this.predicates.length; i < len; i++) {\n p = this.predicates[i](item, this.options);\n if (!p || p.err !== undefined) {\n return {stop: true, err: p.err};\n }\n }\n return {stop: false, err: null};\n};\n\n/*\n * _makeApiRequest - Send an item to Rollbar, callback when done, if there is an error make an\n * effort to retry if we are configured to do so.\n *\n * @param item - an item ready to send to the backend\n * @param callback - function(err, response)\n */\nQueue.prototype._makeApiRequest = function(item, callback) {\n var rateLimitResponse = this.rateLimiter.shouldSend(item);\n if (rateLimitResponse.shouldSend) {\n this.api.postItem(item, function(err, resp) {\n if (err) {\n this._maybeRetry(err, item, callback);\n } else {\n callback(err, resp);\n }\n }.bind(this));\n } else if (rateLimitResponse.error) {\n callback(rateLimitResponse.error);\n } else {\n this.api.postItem(rateLimitResponse.payload, callback);\n }\n};\n\n// These are errors basically mean there is no internet connection\nvar RETRIABLE_ERRORS = ['ECONNRESET', 'ENOTFOUND', 'ESOCKETTIMEDOUT', 'ETIMEDOUT', 'ECONNREFUSED', 'EHOSTUNREACH', 'EPIPE', 'EAI_AGAIN'];\n\n/*\n * _maybeRetry - Given the error returned by the API, decide if we should retry or just callback\n * with the error.\n *\n * @param err - an error returned by the API transport\n * @param item - the item that was trying to be sent when this error occured\n * @param callback - function(err, response)\n */\nQueue.prototype._maybeRetry = function(err, item, callback) {\n var shouldRetry = false;\n if (this.options.retryInterval) {\n for (var i = 0, len = RETRIABLE_ERRORS.length; i < len; i++) {\n if (err.code === RETRIABLE_ERRORS[i]) {\n shouldRetry = true;\n break;\n }\n }\n }\n if (shouldRetry) {\n this._retryApiRequest(item, callback);\n } else {\n callback(err);\n }\n};\n\n/*\n * _retryApiRequest - Add an item and a callback to a queue and possibly start a timer to process\n * that queue based on the retryInterval in the options for this queue.\n *\n * @param item - an item that failed to send due to an error we deem retriable\n * @param callback - function(err, response)\n */\nQueue.prototype._retryApiRequest = function(item, callback) {\n this.retryQueue.push({item: item, callback: callback});\n\n if (!this.retryHandle) {\n this.retryHandle = setInterval(function() {\n while (this.retryQueue.length) {\n var retryObject = this.retryQueue.shift();\n this._makeApiRequest(retryObject.item, retryObject.callback);\n }\n }.bind(this), this.options.retryInterval);\n }\n};\n\n/*\n * _dequeuePendingRequest - Removes the item from the pending request queue, this queue is used to\n * enable to functionality of providing a callback that clients can pass to `wait` to be notified\n * when the pending request queue has been emptied. This must be called when the API finishes\n * processing this item. If a `wait` callback is configured, it is called by this function.\n *\n * @param item - the item previously added to the pending request queue\n */\nQueue.prototype._dequeuePendingRequest = function(item) {\n var idx = this.pendingRequests.indexOf(item);\n if (idx !== -1) {\n this.pendingRequests.splice(idx, 1);\n this._maybeCallWait();\n }\n};\n\nQueue.prototype._maybeLog = function(data, originalError) {\n if (this.logger && this.options.verbose) {\n var message = originalError;\n message = message || _.get(data, 'body.trace.exception.message');\n message = message || _.get(data, 'body.trace_chain.0.exception.message');\n if (message) {\n this.logger.error(message);\n return;\n }\n message = _.get(data, 'body.message.body');\n if (message) {\n this.logger.log(message);\n }\n }\n};\n\nQueue.prototype._maybeCallWait = function() {\n if (_.isFunction(this.waitCallback) && this.pendingItems.length === 0 && this.pendingRequests.length === 0) {\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitCallback();\n return true;\n }\n return false;\n};\n\nmodule.exports = Queue;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/queue.js\n// module id = 5\n// module chunks = 0","'use strict';\n\nvar extend = require('extend');\n\nvar RollbarJSON = {};\nvar __initRollbarJSON = false;\nfunction setupJSON() {\n if (__initRollbarJSON) {\n return;\n }\n __initRollbarJSON = true;\n\n if (isDefined(JSON)) {\n if (isNativeFunction(JSON.stringify)) {\n RollbarJSON.stringify = JSON.stringify;\n }\n if (isNativeFunction(JSON.parse)) {\n RollbarJSON.parse = JSON.parse;\n }\n }\n if (!isFunction(RollbarJSON.stringify) || !isFunction(RollbarJSON.parse)) {\n var setupCustomJSON = require('../vendor/JSON-js/json3.js');\n setupCustomJSON(RollbarJSON);\n }\n}\nsetupJSON();\n\n/*\n * isType - Given a Javascript value and a string, returns true if the type of the value matches the\n * given string.\n *\n * @param x - any value\n * @param t - a lowercase string containing one of the following type names:\n * - undefined\n * - null\n * - error\n * - number\n * - boolean\n * - string\n * - symbol\n * - function\n * - object\n * - array\n * @returns true if x is of type t, otherwise false\n */\nfunction isType(x, t) {\n return t === typeName(x);\n}\n\n/*\n * typeName - Given a Javascript value, returns the type of the object as a string\n */\nfunction typeName(x) {\n var name = typeof x;\n if (name !== 'object') {\n return name;\n }\n if (!x) {\n return 'null';\n }\n if (x instanceof Error) {\n return 'error';\n }\n return ({}).toString.call(x).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n}\n\n/* isFunction - a convenience function for checking if a value is a function\n *\n * @param f - any value\n * @returns true if f is a function, otherwise false\n */\nfunction isFunction(f) {\n return isType(f, 'function');\n}\n\n/* isNativeFunction - a convenience function for checking if a value is a native JS function\n *\n * @param f - any value\n * @returns true if f is a native JS function, otherwise false\n */\nfunction isNativeFunction(f) {\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n var funcMatchString = Function.prototype.toString.call(Object.prototype.hasOwnProperty)\n .replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?');\n var reIsNative = RegExp('^' + funcMatchString + '$');\n return isObject(f) && reIsNative.test(f);\n}\n\n/* isObject - Checks if the argument is an object\n *\n * @param value - any value\n * @returns true is value is an object function is an object)\n*/\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/*\n * isDefined - a convenience function for checking if a value is not equal to undefined\n *\n * @param u - any value\n * @returns true if u is anything other than undefined\n */\nfunction isDefined(u) {\n return !isType(u, 'undefined');\n}\n\n/*\n * isIterable - convenience function for checking if a value can be iterated, essentially\n * whether it is an object or an array.\n *\n * @param i - any value\n * @returns true if i is an object or an array as determined by `typeName`\n */\nfunction isIterable(i) {\n var type = typeName(i);\n return (type === 'object' || type === 'array');\n}\n\n/*\n * isError - convenience function for checking if a value is of an error type\n *\n * @param e - any value\n * @returns true if e is an error\n */\nfunction isError(e) {\n return isType(e, 'error');\n}\n\nfunction traverse(obj, func, seen) {\n var k, v, i;\n var isObj = isType(obj, 'object');\n var isArray = isType(obj, 'array');\n var keys = [];\n\n if (isObj && seen.indexOf(obj) !== -1) {\n return obj;\n }\n seen.push(obj);\n\n if (isObj) {\n for (k in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, k)) {\n keys.push(k);\n }\n }\n } else if (isArray) {\n for (i = 0; i < obj.length; ++i) {\n keys.push(i);\n }\n }\n\n var result = isObj ? {} : [];\n for (i = 0; i < keys.length; ++i) {\n k = keys[i];\n v = obj[k];\n result[k] = func(k, v, seen);\n }\n\n return (keys.length != 0) ? result : obj;\n}\n\nfunction redact() {\n return '********';\n}\n\n// from http://stackoverflow.com/a/8809472/1138191\nfunction uuid4() {\n var d = now();\n var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (d + Math.random() * 16) % 16 | 0;\n d = Math.floor(d / 16);\n return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16);\n });\n return uuid;\n}\n\nvar LEVELS = {\n debug: 0,\n info: 1,\n warning: 2,\n error: 3,\n critical: 4\n};\n\nfunction sanitizeUrl(url) {\n var baseUrlParts = parseUri(url);\n // remove a trailing # if there is no anchor\n if (baseUrlParts.anchor === '') {\n baseUrlParts.source = baseUrlParts.source.replace('#', '');\n }\n\n url = baseUrlParts.source.replace('?' + baseUrlParts.query, '');\n return url;\n}\n\nvar parseUriOptions = {\n strictMode: false,\n key: [\n 'source',\n 'protocol',\n 'authority',\n 'userInfo',\n 'user',\n 'password',\n 'host',\n 'port',\n 'relative',\n 'path',\n 'directory',\n 'file',\n 'query',\n 'anchor'\n ],\n q: {\n name: 'queryKey',\n parser: /(?:^|&)([^&=]*)=?([^&]*)/g\n },\n parser: {\n strict: /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,\n loose: /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/\n }\n};\n\nfunction parseUri(str) {\n if (!isType(str, 'string')) {\n throw new Error('received invalid input');\n }\n\n var o = parseUriOptions;\n var m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str);\n var uri = {};\n var i = o.key.length;\n\n while (i--) {\n uri[o.key[i]] = m[i] || '';\n }\n\n uri[o.q.name] = {};\n uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {\n if ($1) {\n uri[o.q.name][$1] = $2;\n }\n });\n\n return uri;\n}\n\nfunction addParamsAndAccessTokenToPath(accessToken, options, params) {\n params = params || {};\n params.access_token = accessToken;\n var paramsArray = [];\n var k;\n for (k in params) {\n if (Object.prototype.hasOwnProperty.call(params, k)) {\n paramsArray.push([k, params[k]].join('='));\n }\n }\n var query = '?' + paramsArray.sort().join('&');\n\n options = options || {};\n options.path = options.path || '';\n var qs = options.path.indexOf('?');\n var h = options.path.indexOf('#');\n var p;\n if (qs !== -1 && (h === -1 || h > qs)) {\n p = options.path;\n options.path = p.substring(0,qs) + query + '&' + p.substring(qs+1);\n } else {\n if (h !== -1) {\n p = options.path;\n options.path = p.substring(0,h) + query + p.substring(h);\n } else {\n options.path = options.path + query;\n }\n }\n}\n\nfunction formatUrl(u, protocol) {\n protocol = protocol || u.protocol;\n if (!protocol && u.port) {\n if (u.port === 80) {\n protocol = 'http:';\n } else if (u.port === 443) {\n protocol = 'https:';\n }\n }\n protocol = protocol || 'https:';\n\n if (!u.hostname) {\n return null;\n }\n var result = protocol + '//' + u.hostname;\n if (u.port) {\n result = result + ':' + u.port;\n }\n if (u.path) {\n result = result + u.path;\n }\n return result;\n}\n\nfunction stringify(obj, backup) {\n var value, error;\n try {\n value = RollbarJSON.stringify(obj);\n } catch (jsonError) {\n if (backup && isFunction(backup)) {\n try {\n value = backup(obj);\n } catch (backupError) {\n error = backupError;\n }\n } else {\n error = jsonError;\n }\n }\n return {error: error, value: value};\n}\n\nfunction jsonParse(s) {\n var value, error;\n try {\n value = RollbarJSON.parse(s);\n } catch (e) {\n error = e;\n }\n return {error: error, value: value};\n}\n\nfunction makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n mode,\n backupMessage,\n errorParser\n) {\n var location = {\n url: url || '',\n line: lineno,\n column: colno\n };\n location.func = errorParser.guessFunctionName(location.url, location.line);\n location.context = errorParser.gatherContext(location.url, location.line);\n var href = document && document.location && document.location.href;\n var useragent = window && window.navigator && window.navigator.userAgent;\n return {\n 'mode': mode,\n 'message': error ? String(error) : (message || backupMessage),\n 'url': href,\n 'stack': [location],\n 'useragent': useragent\n };\n}\n\nfunction wrapCallback(logger, f) {\n return function(err, resp) {\n try {\n f(err, resp);\n } catch (e) {\n logger.error(e);\n }\n };\n}\n\nfunction createItem(args, logger, notifier, requestKeys, lambdaContext) {\n var message, err, custom, callback, request;\n var arg;\n var extraArgs = [];\n\n for (var i = 0, l = args.length; i < l; ++i) {\n arg = args[i];\n\n var typ = typeName(arg);\n switch (typ) {\n case 'undefined':\n break;\n case 'string':\n message ? extraArgs.push(arg) : message = arg;\n break;\n case 'function':\n callback = wrapCallback(logger, arg);\n break;\n case 'date':\n extraArgs.push(arg);\n break;\n case 'error':\n case 'domexception':\n err ? extraArgs.push(arg) : err = arg;\n break;\n case 'object':\n case 'array':\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n if (requestKeys && typ === 'object' && !request) {\n for (var j = 0, len = requestKeys.length; j < len; ++j) {\n if (arg[requestKeys[j]] !== undefined) {\n request = arg;\n break;\n }\n }\n if (request) {\n break;\n }\n }\n custom ? extraArgs.push(arg) : custom = arg;\n break;\n default:\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n extraArgs.push(arg);\n }\n }\n\n if (extraArgs.length > 0) {\n // if custom is an array this turns it into an object with integer keys\n custom = extend(true, {}, custom);\n custom.extraArgs = extraArgs;\n }\n\n var item = {\n message: message,\n err: err,\n custom: custom,\n timestamp: now(),\n callback: callback,\n uuid: uuid4()\n };\n if (custom && custom.level !== undefined) {\n item.level = custom.level;\n delete custom.level;\n }\n if (requestKeys && request) {\n item.request = request;\n }\n if (lambdaContext) {\n item.lambdaContext = lambdaContext;\n }\n item._originalArgs = args;\n return item;\n}\n\n/*\n * get - given an obj/array and a keypath, return the value at that keypath or\n * undefined if not possible.\n *\n * @param obj - an object or array\n * @param path - a string of keys separated by '.' such as 'plugin.jquery.0.message'\n * which would correspond to 42 in `{plugin: {jquery: [{message: 42}]}}`\n */\nfunction get(obj, path) {\n if (!obj) {\n return undefined;\n }\n var keys = path.split('.');\n var result = obj;\n try {\n for (var i = 0, len = keys.length; i < len; ++i) {\n result = result[keys[i]];\n }\n } catch (e) {\n result = undefined;\n }\n return result;\n}\n\nfunction set(obj, path, value) {\n if (!obj) {\n return;\n }\n var keys = path.split('.');\n var len = keys.length;\n if (len < 1) {\n return;\n }\n if (len === 1) {\n obj[keys[0]] = value;\n return;\n }\n try {\n var temp = obj[keys[0]] || {};\n var replacement = temp;\n for (var i = 1; i < len-1; i++) {\n temp[keys[i]] = temp[keys[i]] || {};\n temp = temp[keys[i]];\n }\n temp[keys[len-1]] = value;\n obj[keys[0]] = replacement;\n } catch (e) {\n return;\n }\n}\n\nfunction scrub(data, scrubFields) {\n scrubFields = scrubFields || [];\n var paramRes = _getScrubFieldRegexs(scrubFields);\n var queryRes = _getScrubQueryParamRegexs(scrubFields);\n\n function redactQueryParam(dummy0, paramPart, dummy1, dummy2, dummy3, valPart) {\n return paramPart + redact(valPart);\n }\n\n function paramScrubber(v) {\n var i;\n if (isType(v, 'string')) {\n for (i = 0; i < queryRes.length; ++i) {\n v = v.replace(queryRes[i], redactQueryParam);\n }\n }\n return v;\n }\n\n function valScrubber(k, v) {\n var i;\n for (i = 0; i < paramRes.length; ++i) {\n if (paramRes[i].test(k)) {\n v = redact(v);\n break;\n }\n }\n return v;\n }\n\n function scrubber(k, v, seen) {\n var tmpV = valScrubber(k, v);\n if (tmpV === v) {\n if (isType(v, 'object') || isType(v, 'array')) {\n return traverse(v, scrubber, seen);\n }\n return paramScrubber(tmpV);\n } else {\n return tmpV;\n }\n }\n\n return traverse(data, scrubber, []);\n}\n\nfunction _getScrubFieldRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '^\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?$';\n ret.push(new RegExp(pat, 'i'));\n }\n return ret;\n}\n\n\nfunction _getScrubQueryParamRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?';\n ret.push(new RegExp('(' + pat + '=)([^&\\\\n]+)', 'igm'));\n }\n return ret;\n}\n\nfunction formatArgsAsString(args) {\n var i, len, arg;\n var result = [];\n for (i = 0, len = args.length; i < len; i++) {\n arg = args[i];\n if (typeof arg === 'object') {\n arg = stringify(arg);\n arg = arg.error || arg.value;\n if (arg.length > 500)\n arg = arg.substr(0,500)+'...';\n } else if (typeof arg === 'undefined') {\n arg = 'undefined';\n }\n result.push(arg);\n }\n return result.join(' ');\n}\n\nfunction now() {\n if (Date.now) {\n return +Date.now();\n }\n return +new Date();\n}\n\nfunction filterIp(requestData, captureIp) {\n if (!requestData || !requestData['user_ip'] || captureIp === true) {\n return;\n }\n var newIp = requestData['user_ip'];\n if (!captureIp) {\n newIp = null;\n } else {\n try {\n var parts;\n if (newIp.indexOf('.') !== -1) {\n parts = newIp.split('.');\n parts.pop();\n parts.push('0');\n newIp = parts.join('.');\n } else if (newIp.indexOf(':') !== -1) {\n parts = newIp.split(':');\n if (parts.length > 2) {\n var beginning = parts.slice(0, 3);\n var slashIdx = beginning[2].indexOf('/');\n if (slashIdx !== -1) {\n beginning[2] = beginning[2].substring(0, slashIdx);\n }\n var terminal = '0000:0000:0000:0000:0000';\n newIp = beginning.concat(terminal).join(':');\n }\n } else {\n newIp = null;\n }\n } catch (e) {\n newIp = null;\n }\n }\n requestData['user_ip'] = newIp;\n}\n\nmodule.exports = {\n isType: isType,\n typeName: typeName,\n isFunction: isFunction,\n isNativeFunction: isNativeFunction,\n isIterable: isIterable,\n isError: isError,\n extend: extend,\n traverse: traverse,\n redact: redact,\n uuid4: uuid4,\n LEVELS: LEVELS,\n sanitizeUrl: sanitizeUrl,\n addParamsAndAccessTokenToPath: addParamsAndAccessTokenToPath,\n formatUrl: formatUrl,\n stringify: stringify,\n jsonParse: jsonParse,\n makeUnhandledStackInfo: makeUnhandledStackInfo,\n createItem: createItem,\n get: get,\n set: set,\n scrub: scrub,\n formatArgsAsString: formatArgsAsString,\n now: now,\n filterIp: filterIp\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/utility.js\n// module id = 6\n// module chunks = 0","'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) {/**/}\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[0],\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t} else if ((typeof target !== 'object' && typeof target !== 'function') || target == null) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = target[name];\n\t\t\t\tcopy = options[name];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\ttarget[name] = extend(deep, clone, copy);\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/extend/index.js\n// module id = 7\n// module chunks = 0","// json3.js\n// 2017-02-21\n// Public Domain.\n// NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n// See http://www.JSON.org/js.html\n// This code should be minified before deployment.\n// See http://javascript.crockford.com/jsmin.html\n\n// USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n// NOT CONTROL.\n\n// This file creates a global JSON object containing two methods: stringify\n// and parse. This file provides the ES5 JSON capability to ES3 systems.\n// If a project might run on IE8 or earlier, then this file should be included.\n// This file does nothing on ES5 systems.\n\n// JSON.stringify(value, replacer, space)\n// value any JavaScript value, usually an object or array.\n// replacer an optional parameter that determines how object\n// values are stringified for objects. It can be a\n// function or an array of strings.\n// space an optional parameter that specifies the indentation\n// of nested structures. If it is omitted, the text will\n// be packed without extra whitespace. If it is a number,\n// it will specify the number of spaces to indent at each\n// level. If it is a string (such as \"\\t\" or \" \"),\n// it contains the characters used to indent at each level.\n// This method produces a JSON text from a JavaScript value.\n// When an object value is found, if the object contains a toJSON\n// method, its toJSON method will be called and the result will be\n// stringified. A toJSON method does not serialize: it returns the\n// value represented by the name/value pair that should be serialized,\n// or undefined if nothing should be serialized. The toJSON method\n// will be passed the key associated with the value, and this will be\n// bound to the value.\n\n// For example, this would serialize Dates as ISO strings.\n\n// Date.prototype.toJSON = function (key) {\n// function f(n) {\n// // Format integers to have at least two digits.\n// return (n < 10)\n// ? \"0\" + n\n// : n;\n// }\n// return this.getUTCFullYear() + \"-\" +\n// f(this.getUTCMonth() + 1) + \"-\" +\n// f(this.getUTCDate()) + \"T\" +\n// f(this.getUTCHours()) + \":\" +\n// f(this.getUTCMinutes()) + \":\" +\n// f(this.getUTCSeconds()) + \"Z\";\n// };\n\n// You can provide an optional replacer method. It will be passed the\n// key and value of each member, with this bound to the containing\n// object. The value that is returned from your method will be\n// serialized. If your method returns undefined, then the member will\n// be excluded from the serialization.\n\n// If the replacer parameter is an array of strings, then it will be\n// used to select the members to be serialized. It filters the results\n// such that only members with keys listed in the replacer array are\n// stringified.\n\n// Values that do not have JSON representations, such as undefined or\n// functions, will not be serialized. Such values in objects will be\n// dropped; in arrays they will be replaced with null. You can use\n// a replacer function to replace those with JSON values.\n\n// JSON.stringify(undefined) returns undefined.\n\n// The optional space parameter produces a stringification of the\n// value that is filled with line breaks and indentation to make it\n// easier to read.\n\n// If the space parameter is a non-empty string, then that string will\n// be used for indentation. If the space parameter is a number, then\n// the indentation will be that many spaces.\n\n// Example:\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}]);\n// // text is '[\"e\",{\"pluribus\":\"unum\"}]'\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}], null, \"\\t\");\n// // text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\n\n// text = JSON.stringify([new Date()], function (key, value) {\n// return this[key] instanceof Date\n// ? \"Date(\" + this[key] + \")\"\n// : value;\n// });\n// // text is '[\"Date(---current time---)\"]'\n\n// JSON.parse(text, reviver)\n// This method parses a JSON text to produce an object or array.\n// It can throw a SyntaxError exception.\n// This has been modified to use JSON-js/json_parse_state.js as the\n// parser instead of the one built around eval found in JSON-js/json2.js\n\n// The optional reviver parameter is a function that can filter and\n// transform the results. It receives each of the keys and values,\n// and its return value is used instead of the original value.\n// If it returns what it received, then the structure is not modified.\n// If it returns undefined then the member is deleted.\n\n// Example:\n\n// // Parse the text. Values that look like ISO date strings will\n// // be converted to Date objects.\n\n// myData = JSON.parse(text, function (key, value) {\n// var a;\n// if (typeof value === \"string\") {\n// a =\n// /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n// if (a) {\n// return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n// +a[5], +a[6]));\n// }\n// }\n// return value;\n// });\n\n// myData = JSON.parse('[\"Date(09/09/2001)\"]', function (key, value) {\n// var d;\n// if (typeof value === \"string\" &&\n// value.slice(0, 5) === \"Date(\" &&\n// value.slice(-1) === \")\") {\n// d = new Date(value.slice(5, -1));\n// if (d) {\n// return d;\n// }\n// }\n// return value;\n// });\n\n// This is a reference implementation. You are free to copy, modify, or\n// redistribute.\n\n/*jslint\n for, this\n */\n\n/*property\n JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\n getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\n lastIndex, length, parse, prototype, push, replace, slice, stringify,\n test, toJSON, toString, valueOf\n */\n\nvar setupCustomJSON = function(JSON) {\n\n var rx_one = /^[\\],:{}\\s]*$/;\n var rx_two = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g;\n var rx_three = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\n var rx_four = /(?:^|:|,)(?:\\s*\\[)+/g;\n var rx_escapable = /[\\\\\"\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n var rx_dangerous = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\n function f(n) {\n // Format integers to have at least two digits.\n return n < 10\n ? \"0\" + n\n : n;\n }\n\n function this_value() {\n return this.valueOf();\n }\n\n if (typeof Date.prototype.toJSON !== \"function\") {\n\n Date.prototype.toJSON = function () {\n\n return isFinite(this.valueOf())\n ? this.getUTCFullYear() + \"-\" +\n f(this.getUTCMonth() + 1) + \"-\" +\n f(this.getUTCDate()) + \"T\" +\n f(this.getUTCHours()) + \":\" +\n f(this.getUTCMinutes()) + \":\" +\n f(this.getUTCSeconds()) + \"Z\"\n : null;\n };\n\n Boolean.prototype.toJSON = this_value;\n Number.prototype.toJSON = this_value;\n String.prototype.toJSON = this_value;\n }\n\n var gap;\n var indent;\n var meta;\n var rep;\n\n\n function quote(string) {\n\n // If the string contains no control characters, no quote characters, and no\n // backslash characters, then we can safely slap some quotes around it.\n // Otherwise we must also replace the offending characters with safe escape\n // sequences.\n\n rx_escapable.lastIndex = 0;\n return rx_escapable.test(string)\n ? \"\\\"\" + string.replace(rx_escapable, function (a) {\n var c = meta[a];\n return typeof c === \"string\"\n ? c\n : \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n }) + \"\\\"\"\n : \"\\\"\" + string + \"\\\"\";\n }\n\n\n function str(key, holder) {\n\n // Produce a string from holder[key].\n\n var i; // The loop counter.\n var k; // The member key.\n var v; // The member value.\n var length;\n var mind = gap;\n var partial;\n var value = holder[key];\n\n // If the value has a toJSON method, call it to obtain a replacement value.\n\n if (value && typeof value === \"object\" &&\n typeof value.toJSON === \"function\") {\n value = value.toJSON(key);\n }\n\n // If we were called with a replacer function, then call the replacer to\n // obtain a replacement value.\n\n if (typeof rep === \"function\") {\n value = rep.call(holder, key, value);\n }\n\n // What happens next depends on the value's type.\n\n switch (typeof value) {\n case \"string\":\n return quote(value);\n\n case \"number\":\n\n // JSON numbers must be finite. Encode non-finite numbers as null.\n\n return isFinite(value)\n ? String(value)\n : \"null\";\n\n case \"boolean\":\n case \"null\":\n\n // If the value is a boolean or null, convert it to a string. Note:\n // typeof null does not produce \"null\". The case is included here in\n // the remote chance that this gets fixed someday.\n\n return String(value);\n\n // If the type is \"object\", we might be dealing with an object or an array or\n // null.\n\n case \"object\":\n\n // Due to a specification blunder in ECMAScript, typeof null is \"object\",\n // so watch out for that case.\n\n if (!value) {\n return \"null\";\n }\n\n // Make an array to hold the partial results of stringifying this object value.\n\n gap += indent;\n partial = [];\n\n // Is the value an array?\n\n if (Object.prototype.toString.apply(value) === \"[object Array]\") {\n\n // The value is an array. Stringify every element. Use null as a placeholder\n // for non-JSON values.\n\n length = value.length;\n for (i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || \"null\";\n }\n\n // Join all of the elements together, separated with commas, and wrap them in\n // brackets.\n\n v = partial.length === 0\n ? \"[]\"\n : gap\n ? \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\"\n : \"[\" + partial.join(\",\") + \"]\";\n gap = mind;\n return v;\n }\n\n // If the replacer is an array, use it to select the members to be stringified.\n\n if (rep && typeof rep === \"object\") {\n length = rep.length;\n for (i = 0; i < length; i += 1) {\n if (typeof rep[i] === \"string\") {\n k = rep[i];\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n } else {\n\n // Otherwise, iterate through all of the keys in the object.\n\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n }\n\n // Join all of the member texts together, separated with commas,\n // and wrap them in braces.\n\n v = partial.length === 0\n ? \"{}\"\n : gap\n ? \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\"\n : \"{\" + partial.join(\",\") + \"}\";\n gap = mind;\n return v;\n }\n }\n\n // If the JSON object does not yet have a stringify method, give it one.\n\n if (typeof JSON.stringify !== \"function\") {\n meta = { // table of character substitutions\n \"\\b\": \"\\\\b\",\n \"\\t\": \"\\\\t\",\n \"\\n\": \"\\\\n\",\n \"\\f\": \"\\\\f\",\n \"\\r\": \"\\\\r\",\n \"\\\"\": \"\\\\\\\"\",\n \"\\\\\": \"\\\\\\\\\"\n };\n JSON.stringify = function (value, replacer, space) {\n\n // The stringify method takes a value and an optional replacer, and an optional\n // space parameter, and returns a JSON text. The replacer can be a function\n // that can replace values, or an array of strings that will select the keys.\n // A default replacer method can be provided. Use of the space parameter can\n // produce text that is more easily readable.\n\n var i;\n gap = \"\";\n indent = \"\";\n\n // If the space parameter is a number, make an indent string containing that\n // many spaces.\n\n if (typeof space === \"number\") {\n for (i = 0; i < space; i += 1) {\n indent += \" \";\n }\n\n // If the space parameter is a string, it will be used as the indent string.\n\n } else if (typeof space === \"string\") {\n indent = space;\n }\n\n // If there is a replacer, it must be a function or an array.\n // Otherwise, throw an error.\n\n rep = replacer;\n if (replacer && typeof replacer !== \"function\" &&\n (typeof replacer !== \"object\" ||\n typeof replacer.length !== \"number\")) {\n throw new Error(\"JSON.stringify\");\n }\n\n // Make a fake root object containing our value under the key of \"\".\n // Return the result of stringifying the value.\n\n return str(\"\", {\"\": value});\n };\n }\n\n\n // If the JSON object does not yet have a parse method, give it one.\n\n if (typeof JSON.parse !== \"function\") {\n JSON.parse = (function () {\n\n // This function creates a JSON parse function that uses a state machine rather\n // than the dangerous eval function to parse a JSON text.\n\n var state; // The state of the parser, one of\n // 'go' The starting state\n // 'ok' The final, accepting state\n // 'firstokey' Ready for the first key of the object or\n // the closing of an empty object\n // 'okey' Ready for the next key of the object\n // 'colon' Ready for the colon\n // 'ovalue' Ready for the value half of a key/value pair\n // 'ocomma' Ready for a comma or closing }\n // 'firstavalue' Ready for the first value of an array or\n // an empty array\n // 'avalue' Ready for the next value of an array\n // 'acomma' Ready for a comma or closing ]\n var stack; // The stack, for controlling nesting.\n var container; // The current container object or array\n var key; // The current key\n var value; // The current value\n var escapes = { // Escapement translation table\n \"\\\\\": \"\\\\\",\n \"\\\"\": \"\\\"\",\n \"/\": \"/\",\n \"t\": \"\\t\",\n \"n\": \"\\n\",\n \"r\": \"\\r\",\n \"f\": \"\\f\",\n \"b\": \"\\b\"\n };\n var string = { // The actions for string tokens\n go: function () {\n state = \"ok\";\n },\n firstokey: function () {\n key = value;\n state = \"colon\";\n },\n okey: function () {\n key = value;\n state = \"colon\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var number = { // The actions for number tokens\n go: function () {\n state = \"ok\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var action = {\n\n // The action table describes the behavior of the machine. It contains an\n // object for each token. Each object contains a method that is called when\n // a token is matched in a state. An object will lack a method for illegal\n // states.\n\n \"{\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = {};\n state = \"firstokey\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = {};\n state = \"firstokey\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n }\n },\n \"}\": {\n firstokey: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n ocomma: function () {\n var pop = stack.pop();\n container[key] = value;\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \"[\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = [];\n state = \"firstavalue\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = [];\n state = \"firstavalue\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n }\n },\n \"]\": {\n firstavalue: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n acomma: function () {\n var pop = stack.pop();\n container.push(value);\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \":\": {\n colon: function () {\n if (Object.hasOwnProperty.call(container, key)) {\n throw new SyntaxError(\"Duplicate key '\" + key + \"\\\"\");\n }\n state = \"ovalue\";\n }\n },\n \",\": {\n ocomma: function () {\n container[key] = value;\n state = \"okey\";\n },\n acomma: function () {\n container.push(value);\n state = \"avalue\";\n }\n },\n \"true\": {\n go: function () {\n value = true;\n state = \"ok\";\n },\n ovalue: function () {\n value = true;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = true;\n state = \"acomma\";\n },\n avalue: function () {\n value = true;\n state = \"acomma\";\n }\n },\n \"false\": {\n go: function () {\n value = false;\n state = \"ok\";\n },\n ovalue: function () {\n value = false;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = false;\n state = \"acomma\";\n },\n avalue: function () {\n value = false;\n state = \"acomma\";\n }\n },\n \"null\": {\n go: function () {\n value = null;\n state = \"ok\";\n },\n ovalue: function () {\n value = null;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = null;\n state = \"acomma\";\n },\n avalue: function () {\n value = null;\n state = \"acomma\";\n }\n }\n };\n\n function debackslashify(text) {\n\n // Remove and replace any backslash escapement.\n\n return text.replace(/\\\\(?:u(.{4})|([^u]))/g, function (ignore, b, c) {\n return b\n ? String.fromCharCode(parseInt(b, 16))\n : escapes[c];\n });\n }\n\n return function (source, reviver) {\n\n // A regular expression is used to extract tokens from the JSON text.\n // The extraction process is cautious.\n\n var result;\n var tx = /^[\\u0020\\t\\n\\r]*(?:([,:\\[\\]{}]|true|false|null)|(-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)|\"((?:[^\\r\\n\\t\\\\\\\"]|\\\\(?:[\"\\\\\\/trnfb]|u[0-9a-fA-F]{4}))*)\")/;\n\n // Set the starting state.\n\n state = \"go\";\n\n // The stack records the container, key, and state for each object or array\n // that contains another object or array while processing nested structures.\n\n stack = [];\n\n // If any error occurs, we will catch it and ultimately throw a syntax error.\n\n try {\n\n // For each token...\n\n while (true) {\n result = tx.exec(source);\n if (!result) {\n break;\n }\n\n // result is the result array from matching the tokenizing regular expression.\n // result[0] contains everything that matched, including any initial whitespace.\n // result[1] contains any punctuation that was matched, or true, false, or null.\n // result[2] contains a matched number, still in string form.\n // result[3] contains a matched string, without quotes but with escapement.\n\n if (result[1]) {\n\n // Token: Execute the action for this state and token.\n\n action[result[1]][state]();\n\n } else if (result[2]) {\n\n // Number token: Convert the number string into a number value and execute\n // the action for this state and number.\n\n value = +result[2];\n number[state]();\n } else {\n\n // String token: Replace the escapement sequences and execute the action for\n // this state and string.\n\n value = debackslashify(result[3]);\n string[state]();\n }\n\n // Remove the token from the string. The loop will continue as long as there\n // are tokens. This is a slow process, but it allows the use of ^ matching,\n // which assures that no illegal tokens slip through.\n\n source = source.slice(result[0].length);\n }\n\n // If we find a state/token combination that is illegal, then the action will\n // cause an error. We handle the error by simply changing the state.\n\n } catch (e) {\n state = e;\n }\n\n // The parsing is finished. If we are not in the final \"ok\" state, or if the\n // remaining source contains anything except whitespace, then we did not have\n //a well-formed JSON text.\n\n if (state !== \"ok\" || (/[^\\u0020\\t\\n\\r]/.test(source))) {\n throw (state instanceof SyntaxError)\n ? state\n : new SyntaxError(\"JSON\");\n }\n\n // If there is a reviver function, we recursively walk the new structure,\n // passing each name/value pair to the reviver function for possible\n // transformation, starting with a temporary root object that holds the current\n // value in an empty key. If there is not a reviver function, we simply return\n // that value.\n\n return (typeof reviver === \"function\")\n ? (function walk(holder, key) {\n var k;\n var v;\n var val = holder[key];\n if (val && typeof val === \"object\") {\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(val, k)) {\n v = walk(val, k);\n if (v !== undefined) {\n val[k] = v;\n } else {\n delete val[k];\n }\n }\n }\n }\n return reviver.call(holder, key, val);\n }({\"\": value}, \"\"))\n : value;\n };\n }());\n }\n}\n\nmodule.exports = setupCustomJSON;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./vendor/JSON-js/json3.js\n// module id = 8\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Notifier - the internal object responsible for delegating between the client exposed API, the\n * chain of transforms necessary to turn an item into something that can be sent to Rollbar, and the\n * queue which handles the communcation with the Rollbar API servers.\n *\n * @param queue - an object that conforms to the interface: addItem(item, callback)\n * @param options - an object representing the options to be set for this notifier, this should have\n * any defaults already set by the caller\n */\nfunction Notifier(queue, options) {\n this.queue = queue;\n this.options = options;\n this.transforms = [];\n}\n\n/*\n * configure - updates the options for this notifier with the passed in object\n *\n * @param options - an object which gets merged with the current options set on this notifier\n * @returns this\n */\nNotifier.prototype.configure = function(options) {\n this.queue && this.queue.configure(options);\n var oldOptions = this.options;\n this.options = _.extend({}, oldOptions, options);\n return this;\n};\n\n/*\n * addTransform - adds a transform onto the end of the queue of transforms for this notifier\n *\n * @param transform - a function which takes three arguments:\n * * item: An Object representing the data to eventually be sent to Rollbar\n * * options: The current value of the options for this notifier\n * * callback: function(err: (Null|Error), item: (Null|Object)) the transform must call this\n * callback with a null value for error if it wants the processing chain to continue, otherwise\n * with an error to terminate the processing. The item should be the updated item after this\n * transform is finished modifying it.\n */\nNotifier.prototype.addTransform = function(transform) {\n if (_.isFunction(transform)) {\n this.transforms.push(transform);\n }\n return this;\n};\n\n/*\n * log - the internal log function which applies the configured transforms and then pushes onto the\n * queue to be sent to the backend.\n *\n * @param item - An object with the following structure:\n * message [String] - An optional string to be sent to rollbar\n * error [Error] - An optional error\n *\n * @param callback - A function of type function(err, resp) which will be called with exactly one\n * null argument and one non-null argument. The callback will be called once, either during the\n * transform stage if an error occurs inside a transform, or in response to the communication with\n * the backend. The second argument will be the response from the backend in case of success.\n */\nNotifier.prototype.log = function(item, callback) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!this.options.enabled) {\n return callback(new Error('Rollbar is not enabled'));\n }\n\n this.queue.addPendingItem(item);\n var originalError = item.err;\n this._applyTransforms(item, function(err, i) {\n if (err) {\n this.queue.removePendingItem(item);\n return callback(err, null);\n }\n this.queue.addItem(i, callback, originalError, item);\n }.bind(this));\n};\n\n/* Internal */\n\n/*\n * _applyTransforms - Applies the transforms that have been added to this notifier sequentially. See\n * `addTransform` for more information.\n *\n * @param item - An item to be transformed\n * @param callback - A function of type function(err, item) which will be called with a non-null\n * error and a null item in the case of a transform failure, or a null error and non-null item after\n * all transforms have been applied.\n */\nNotifier.prototype._applyTransforms = function(item, callback) {\n var transformIndex = -1;\n var transformsLength = this.transforms.length;\n var transforms = this.transforms;\n var options = this.options;\n\n var cb = function(err, i) {\n if (err) {\n callback(err, null);\n return;\n }\n\n transformIndex++;\n\n if (transformIndex === transformsLength) {\n callback(null, i);\n return;\n }\n\n transforms[transformIndex](i, options, cb);\n };\n\n cb(null, item);\n};\n\nmodule.exports = Notifier;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/notifier.js\n// module id = 9\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nvar MAX_EVENTS = 100;\n\nfunction Telemeter(options) {\n this.queue = [];\n this.options = _.extend(true, {}, options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n this.maxQueueSize = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n}\n\nTelemeter.prototype.configure = function(options) {\n var oldOptions = this.options;\n this.options = _.extend(true, {}, oldOptions, options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n var newMaxEvents = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n var deleteCount = 0;\n if (this.maxQueueSize > newMaxEvents) {\n deleteCount = this.maxQueueSize - newMaxEvents;\n }\n this.maxQueueSize = newMaxEvents;\n this.queue.splice(0, deleteCount);\n};\n\nTelemeter.prototype.copyEvents = function() {\n return Array.prototype.slice.call(this.queue, 0);\n};\n\nTelemeter.prototype.capture = function(type, metadata, level, rollbarUUID, timestamp) {\n var e = {\n level: getLevel(type, level),\n type: type,\n timestamp_ms: timestamp || _.now(),\n body: metadata,\n source: 'client'\n };\n if (rollbarUUID) {\n e.uuid = rollbarUUID;\n }\n\n try {\n if (_.isFunction(this.options.filterTelemetry) && this.options.filterTelemetry(e)) {\n return false;\n }\n } catch (e) {\n this.options.filterTelemetry = null;\n }\n\n this.push(e);\n return e;\n};\n\nTelemeter.prototype.captureEvent = function(metadata, level, rollbarUUID) {\n return this.capture('manual', metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.captureError = function(err, level, rollbarUUID, timestamp) {\n var metadata = {\n message: err.message || String(err)\n };\n if (err.stack) {\n metadata.stack = err.stack;\n }\n return this.capture('error', metadata, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureLog = function(message, level, rollbarUUID, timestamp) {\n return this.capture('log', {\n message: message\n }, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureNetwork = function(metadata, subtype, rollbarUUID, requestData) {\n subtype = subtype || 'xhr';\n metadata.subtype = metadata.subtype || subtype;\n if (requestData) {\n metadata.request = requestData;\n }\n var level = this.levelFromStatus(metadata.status_code);\n return this.capture('network', metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.levelFromStatus = function(statusCode) {\n if (statusCode >= 200 && statusCode < 400) {\n return 'info';\n }\n if (statusCode === 0 || statusCode >= 400) {\n return 'error';\n }\n return 'info';\n};\n\nTelemeter.prototype.captureDom = function(subtype, element, value, checked, rollbarUUID) {\n var metadata = {\n subtype: subtype,\n element: element\n };\n if (value !== undefined) {\n metadata.value = value;\n }\n if (checked !== undefined) {\n metadata.checked = checked;\n }\n return this.capture('dom', metadata, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureNavigation = function(from, to, rollbarUUID) {\n return this.capture('navigation', {from: from, to: to}, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureDomContentLoaded = function(ts) {\n return this.capture('navigation', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n */\n};\nTelemeter.prototype.captureLoad = function(ts) {\n return this.capture('navigation', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n */\n};\n\nTelemeter.prototype.captureConnectivityChange = function(type, rollbarUUID) {\n return this.captureNetwork({change: type}, 'connectivity', rollbarUUID);\n};\n\n// Only intended to be used internally by the notifier\nTelemeter.prototype._captureRollbarItem = function(item) {\n if (!this.options.includeItemsInTelemetry) {\n return;\n }\n if (item.err) {\n return this.captureError(item.err, item.level, item.uuid, item.timestamp);\n }\n if (item.message) {\n return this.captureLog(item.message, item.level, item.uuid, item.timestamp);\n }\n if (item.custom) {\n return this.capture('log', item.custom, item.level, item.uuid, item.timestamp);\n }\n};\n\nTelemeter.prototype.push = function(e) {\n this.queue.push(e);\n if (this.queue.length > this.maxQueueSize) {\n this.queue.shift();\n }\n};\n\nfunction getLevel(type, level) {\n if (level) {\n return level;\n }\n var defaultLevel = {\n error: 'error',\n manual: 'info'\n };\n return defaultLevel[type] || 'info';\n}\n\nmodule.exports = Telemeter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/telemetry.js\n// module id = 10\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\nvar helpers = require('./apiUtility');\n\nvar defaultOptions = {\n hostname: 'api.rollbar.com',\n path: '/api/1/item/',\n search: null,\n version: '1',\n protocol: 'https:',\n port: 443\n};\n\n/**\n * Api is an object that encapsulates methods of communicating with\n * the Rollbar API. It is a standard interface with some parts implemented\n * differently for server or browser contexts. It is an object that should\n * be instantiated when used so it can contain non-global options that may\n * be different for another instance of RollbarApi.\n *\n * @param options {\n * accessToken: the accessToken to use for posting items to rollbar\n * endpoint: an alternative endpoint to send errors to\n * must be a valid, fully qualified URL.\n * The default is: https://api.rollbar.com/api/1/item\n * proxy: if you wish to proxy requests provide an object\n * with the following keys:\n * host or hostname (required): foo.example.com\n * port (optional): 123\n * protocol (optional): https\n * }\n */\nfunction Api(options, t, u, j) {\n this.options = options;\n this.transport = t;\n this.url = u;\n this.jsonBackup = j;\n this.accessToken = options.accessToken;\n this.transportOptions = _getTransport(options, u);\n}\n\n/**\n *\n * @param data\n * @param callback\n */\nApi.prototype.postItem = function(data, callback) {\n var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n this.transport.post(this.accessToken, transportOptions, payload, callback);\n};\n\nApi.prototype.configure = function(options) {\n var oldOptions = this.oldOptions;\n this.options = _.extend(true, {}, oldOptions, options);\n this.transportOptions = _getTransport(this.options, this.url);\n if (this.options.accessToken !== undefined) {\n this.accessToken = this.options.accessToken;\n }\n return this;\n};\n\nfunction _getTransport(options, url) {\n return helpers.getTransportFromOptions(options, defaultOptions, url);\n}\n\nmodule.exports = Api;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/api.js\n// module id = 11\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction buildPayload(accessToken, data, jsonBackup) {\n if (!_.isType(data.context, 'string')) {\n var contextResult = _.stringify(data.context, jsonBackup);\n if (contextResult.error) {\n data.context = 'Error: could not serialize \\'context\\'';\n } else {\n data.context = contextResult.value || '';\n }\n if (data.context.length > 255) {\n data.context = data.context.substr(0, 255);\n }\n }\n return {\n access_token: accessToken,\n data: data\n };\n}\n\nfunction getTransportFromOptions(options, defaults, url) {\n var hostname = defaults.hostname;\n var protocol = defaults.protocol;\n var port = defaults.port;\n var path = defaults.path;\n var search = defaults.search;\n\n var proxy = options.proxy;\n if (options.endpoint) {\n var opts = url.parse(options.endpoint);\n hostname = opts.hostname;\n protocol = opts.protocol;\n port = opts.port;\n path = opts.pathname;\n search = opts.search;\n }\n return {\n hostname: hostname,\n protocol: protocol,\n port: port,\n path: path,\n search: search,\n proxy: proxy\n };\n}\n\nfunction transportOptions(transport, method) {\n var protocol = transport.protocol || 'https:';\n var port = transport.port || (protocol === 'http:' ? 80 : protocol === 'https:' ? 443 : undefined);\n var hostname = transport.hostname;\n var path = transport.path;\n if (transport.search) {\n path = path + transport.search;\n }\n if (transport.proxy) {\n path = protocol + '//' + hostname + path;\n hostname = transport.proxy.host || transport.proxy.hostname;\n port = transport.proxy.port;\n protocol = transport.proxy.protocol || protocol;\n }\n return {\n protocol: protocol,\n hostname: hostname,\n path: path,\n port: port,\n method: method\n };\n}\n\nfunction appendPathToPath(base, path) {\n var baseTrailingSlash = /\\/$/.test(base);\n var pathBeginningSlash = /^\\//.test(path);\n\n if (baseTrailingSlash && pathBeginningSlash) {\n path = path.substring(1);\n } else if (!baseTrailingSlash && !pathBeginningSlash) {\n path = '/' + path;\n }\n\n return base + path;\n}\n\nmodule.exports = {\n buildPayload: buildPayload,\n getTransportFromOptions: getTransportFromOptions,\n transportOptions: transportOptions,\n appendPathToPath: appendPathToPath\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/apiUtility.js\n// module id = 12\n// module chunks = 0","'use strict';\n\n/* eslint-disable no-console */\nrequire('console-polyfill');\nvar detection = require('./detection');\nvar _ = require('../utility');\n\nfunction error() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.error(_.formatArgsAsString(args));\n } else {\n console.error.apply(console, args);\n }\n}\n\nfunction info() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.info(_.formatArgsAsString(args));\n } else {\n console.info.apply(console, args);\n }\n}\n\nfunction log() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.log(_.formatArgsAsString(args));\n } else {\n console.log.apply(console, args);\n }\n}\n\n/* eslint-enable no-console */\n\nmodule.exports = {\n error: error,\n info: info,\n log: log\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/logger.js\n// module id = 13\n// module chunks = 0","// Console-polyfill. MIT license.\n// https://github.com/paulmillr/console-polyfill\n// Make it safe to do console.log() always.\n(function(global) {\n 'use strict';\n if (!global.console) {\n global.console = {};\n }\n var con = global.console;\n var prop, method;\n var dummy = function() {};\n var properties = ['memory'];\n var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' +\n 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' +\n 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',');\n while (prop = properties.pop()) if (!con[prop]) con[prop] = {};\n while (method = methods.pop()) if (!con[method]) con[method] = dummy;\n // Using `this` for web workers & supports Browserify / Webpack.\n})(typeof window === 'undefined' ? this : window);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/console-polyfill/index.js\n// module id = 14\n// module chunks = 0","'use strict';\n\n// This detection.js module is used to encapsulate any ugly browser/feature\n// detection we may need to do.\n\n// Figure out which version of IE we're using, if any.\n// This is gleaned from http://stackoverflow.com/questions/5574842/best-way-to-check-for-ie-less-than-9-in-javascript-without-library\n// Will return an integer on IE (i.e. 8)\n// Will return undefined otherwise\nfunction getIEVersion() {\n\tvar undef;\n\tif (!document) {\n\t\treturn undef;\n\t}\n\n var v = 3,\n div = document.createElement('div'),\n all = div.getElementsByTagName('i');\n\n while (\n div.innerHTML = '',\n all[0]\n );\n\n return v > 4 ? v : undef;\n}\n\nvar Detection = {\n ieVersion: getIEVersion\n};\n\nmodule.exports = Detection;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/detection.js\n// module id = 15\n// module chunks = 0","'use strict';\n\nfunction captureUncaughtExceptions(window, handler, shim) {\n if (!window) { return; }\n var oldOnError;\n\n if (typeof handler._rollbarOldOnError === 'function') {\n oldOnError = handler._rollbarOldOnError;\n } else if (window.onerror && !window.onerror.belongsToShim) {\n oldOnError = window.onerror;\n handler._rollbarOldOnError = oldOnError;\n }\n\n var fn = function() {\n var args = Array.prototype.slice.call(arguments, 0);\n _rollbarWindowOnError(window, handler, oldOnError, args);\n };\n fn.belongsToShim = shim;\n window.onerror = fn;\n}\n\nfunction _rollbarWindowOnError(window, r, old, args) {\n if (window._rollbarWrappedError) {\n if (!args[4]) {\n args[4] = window._rollbarWrappedError;\n }\n if (!args[5]) {\n args[5] = window._rollbarWrappedError._rollbarContext;\n }\n window._rollbarWrappedError = null;\n }\n\n r.handleUncaughtException.apply(r, args);\n if (old) {\n old.apply(window, args);\n }\n}\n\nfunction captureUnhandledRejections(window, handler, shim) {\n if (!window) { return; }\n\n if (typeof window._rollbarURH === 'function' && window._rollbarURH.belongsToShim) {\n window.removeEventListener('unhandledrejection', window._rollbarURH);\n }\n\n var rejectionHandler = function (evt) {\n var reason, promise, detail;\n try {\n reason = evt.reason;\n } catch (e) {\n reason = undefined;\n }\n try {\n promise = evt.promise;\n } catch (e) {\n promise = '[unhandledrejection] error getting `promise` from event';\n }\n try {\n detail = evt.detail;\n if (!reason && detail) {\n reason = detail.reason;\n promise = detail.promise;\n }\n } catch (e) {\n detail = '[unhandledrejection] error getting `detail` from event';\n }\n if (!reason) {\n reason = '[unhandledrejection] error getting `reason` from event';\n }\n\n if (handler && handler.handleUnhandledRejection) {\n handler.handleUnhandledRejection(reason, promise);\n }\n };\n rejectionHandler.belongsToShim = shim;\n window._rollbarURH = rejectionHandler;\n window.addEventListener('unhandledrejection', rejectionHandler);\n}\n\nfunction wrapGlobals(window, handler, shim) {\n if (!window) { return; }\n // Adapted from https://github.com/bugsnag/bugsnag-js\n var globals = 'EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload'.split(',');\n var i, global;\n for (i = 0; i < globals.length; ++i) {\n global = globals[i];\n\n if (window[global] && window[global].prototype) {\n _extendListenerPrototype(handler, window[global].prototype, shim);\n }\n }\n}\n\nfunction _extendListenerPrototype(handler, prototype, shim) {\n if (prototype.hasOwnProperty && prototype.hasOwnProperty('addEventListener')) {\n var oldAddEventListener = prototype.addEventListener;\n while (oldAddEventListener._rollbarOldAdd && oldAddEventListener.belongsToShim) {\n oldAddEventListener = oldAddEventListener._rollbarOldAdd;\n }\n var addFn = function(event, callback, bubble) {\n oldAddEventListener.call(this, event, handler.wrap(callback), bubble);\n };\n addFn._rollbarOldAdd = oldAddEventListener;\n addFn.belongsToShim = shim;\n prototype.addEventListener = addFn;\n\n var oldRemoveEventListener = prototype.removeEventListener;\n while (oldRemoveEventListener._rollbarOldRemove && oldRemoveEventListener.belongsToShim) {\n oldRemoveEventListener = oldRemoveEventListener._rollbarOldRemove;\n }\n var removeFn = function(event, callback, bubble) {\n oldRemoveEventListener.call(this, event, callback && callback._rollbar_wrapped || callback, bubble);\n };\n removeFn._rollbarOldRemove = oldRemoveEventListener;\n removeFn.belongsToShim = shim;\n prototype.removeEventListener = removeFn;\n }\n}\n\nmodule.exports = {\n captureUncaughtExceptions: captureUncaughtExceptions,\n captureUnhandledRejections: captureUnhandledRejections,\n wrapGlobals: wrapGlobals\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/globalSetup.js\n// module id = 16\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar logger = require('./logger');\n\n/*\n * accessToken may be embedded in payload but that should not\n * be assumed\n *\n * options: {\n * hostname\n * protocol\n * path\n * port\n * method\n * }\n *\n * params is an object containing key/value pairs. These\n * will be appended to the path as 'key=value&key=value'\n *\n * payload is an unserialized object\n */\n\nfunction get(accessToken, options, params, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n _.addParamsAndAccessTokenToPath(accessToken, options, params);\n\n var method = 'GET';\n var url = _.formatUrl(options);\n _makeRequest(accessToken, url, method, null, callback, requestFactory);\n}\n\nfunction post(accessToken, options, payload, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!payload) {\n return callback(new Error('Cannot send empty request'));\n }\n\n var stringifyResult = _.stringify(payload);\n if (stringifyResult.error) {\n return callback(stringifyResult.error);\n }\n\n var writeData = stringifyResult.value;\n var method = 'POST';\n var url = _.formatUrl(options);\n _makeRequest(accessToken, url, method, writeData, callback, requestFactory);\n}\n\nfunction _makeRequest(accessToken, url, method, data, callback, requestFactory) {\n var request;\n if (requestFactory) {\n request = requestFactory();\n } else {\n request = _createXMLHTTPObject();\n }\n if (!request) {\n // Give up, no way to send requests\n return callback(new Error('No way to send a request'));\n }\n try {\n try {\n var onreadystatechange = function() {\n try {\n if (onreadystatechange && request.readyState === 4) {\n onreadystatechange = undefined;\n\n var parseResponse = _.jsonParse(request.responseText);\n if (_isSuccess(request)) {\n callback(parseResponse.error, parseResponse.value);\n return;\n } else if (_isNormalFailure(request)) {\n if (request.status === 403) {\n // likely caused by using a server access token\n var message = parseResponse.value && parseResponse.value.message;\n logger.error(message);\n }\n // return valid http status codes\n callback(new Error(String(request.status)));\n } else {\n // IE will return a status 12000+ on some sort of connection failure,\n // so we return a blank error\n // http://msdn.microsoft.com/en-us/library/aa383770%28VS.85%29.aspx\n var msg = 'XHR response had no status code (likely connection failure)';\n callback(_newRetriableError(msg));\n }\n }\n } catch (ex) {\n //jquery source mentions firefox may error out while accessing the\n //request members if there is a network error\n //https://github.com/jquery/jquery/blob/a938d7b1282fc0e5c52502c225ae8f0cef219f0a/src/ajax/xhr.js#L111\n var exc;\n if (ex && ex.stack) {\n exc = ex;\n } else {\n exc = new Error(ex);\n }\n callback(exc);\n }\n };\n\n request.open(method, url, true);\n if (request.setRequestHeader) {\n request.setRequestHeader('Content-Type', 'application/json');\n request.setRequestHeader('X-Rollbar-Access-Token', accessToken);\n }\n request.onreadystatechange = onreadystatechange;\n request.send(data);\n } catch (e1) {\n // Sending using the normal xmlhttprequest object didn't work, try XDomainRequest\n if (typeof XDomainRequest !== 'undefined') {\n\n // Assume we are in a really old browser which has a bunch of limitations:\n // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\n // Extreme paranoia: if we have XDomainRequest then we have a window, but just in case\n if (!window || !window.location) {\n return callback(new Error('No window available during request, unknown environment'));\n }\n\n // If the current page is http, try and send over http\n if (window.location.href.substring(0, 5) === 'http:' && url.substring(0, 5) === 'https') {\n url = 'http' + url.substring(5);\n }\n\n var xdomainrequest = new XDomainRequest();\n xdomainrequest.onprogress = function() {};\n xdomainrequest.ontimeout = function() {\n var msg = 'Request timed out';\n var code = 'ETIMEDOUT';\n callback(_newRetriableError(msg, code));\n };\n xdomainrequest.onerror = function() {\n callback(new Error('Error during request'));\n };\n xdomainrequest.onload = function() {\n var parseResponse = _.jsonParse(xdomainrequest.responseText);\n callback(parseResponse.error, parseResponse.value);\n };\n xdomainrequest.open(method, url, true);\n xdomainrequest.send(data);\n } else {\n callback(new Error('Cannot find a method to transport a request'));\n }\n }\n } catch (e2) {\n callback(e2);\n }\n}\n\nfunction _createXMLHTTPObject() {\n /* global ActiveXObject:false */\n\n var factories = [\n function () {\n return new XMLHttpRequest();\n },\n function () {\n return new ActiveXObject('Msxml2.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Msxml3.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Microsoft.XMLHTTP');\n }\n ];\n var xmlhttp;\n var i;\n var numFactories = factories.length;\n for (i = 0; i < numFactories; i++) {\n /* eslint-disable no-empty */\n try {\n xmlhttp = factories[i]();\n break;\n } catch (e) {\n // pass\n }\n /* eslint-enable no-empty */\n }\n return xmlhttp;\n}\n\nfunction _isSuccess(r) {\n return r && r.status && r.status === 200;\n}\n\nfunction _isNormalFailure(r) {\n return r && _.isType(r.status, 'number') && r.status >= 400 && r.status < 600;\n}\n\nfunction _newRetriableError(message, code) {\n var err = new Error(message);\n err.code = code || 'ENOTFOUND';\n return err;\n}\n\nmodule.exports = {\n get: get,\n post: post\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transport.js\n// module id = 17\n// module chunks = 0","'use strict';\n\n// See https://nodejs.org/docs/latest/api/url.html\nfunction parse(url) {\n var result = {\n protocol: null, auth: null, host: null, path: null,\n hash: null, href: url, hostname: null, port: null,\n pathname: null, search: null, query: null\n };\n\n var i, last;\n i = url.indexOf('//');\n if (i !== -1) {\n result.protocol = url.substring(0,i);\n last = i+2;\n } else {\n last = 0;\n }\n \n i = url.indexOf('@', last);\n if (i !== -1) {\n result.auth = url.substring(last, i);\n last = i+1;\n }\n\n i = url.indexOf('/', last);\n if (i === -1) {\n i = url.indexOf('?', last);\n if (i === -1) {\n i = url.indexOf('#', last);\n if (i === -1) {\n result.host = url.substring(last);\n } else {\n result.host = url.substring(last, i);\n result.hash = url.substring(i);\n }\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n return result;\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n\n i = url.indexOf('#', last);\n if (i === -1) {\n result.path = url.substring(last);\n } else {\n result.path = url.substring(last, i);\n result.hash = url.substring(i);\n }\n\n if (result.path) {\n var pathParts = result.path.split('?');\n result.pathname = pathParts[0];\n result.query = pathParts[1];\n result.search = result.query ? '?' + result.query : null;\n }\n return result;\n}\n\nmodule.exports = {\n parse: parse\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/url.js\n// module id = 18\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar errorParser = require('./errorParser');\nvar logger = require('./logger');\n\nfunction handleItemWithError(item, options, callback) {\n item.data = item.data || {};\n if (item.err) {\n try {\n item.stackInfo = item.err._savedStackTrace || errorParser.parse(item.err);\n } catch (e)\n /* istanbul ignore next */\n {\n logger.error('Error while parsing the error object.', e);\n item.message = item.err.message || item.err.description || item.message || String(item.err);\n delete item.err;\n }\n }\n callback(null, item);\n}\n\nfunction ensureItemHasSomethingToSay(item, options, callback) {\n if (!item.message && !item.stackInfo && !item.custom) {\n callback(new Error('No message, stack info, or custom data'), null);\n }\n callback(null, item);\n}\n\nfunction addBaseInfo(item, options, callback) {\n var environment = (options.payload && options.payload.environment) || options.environment;\n item.data = _.extend(true, {}, item.data, {\n environment: environment,\n level: item.level,\n endpoint: options.endpoint,\n platform: 'browser',\n framework: 'browser-js',\n language: 'javascript',\n server: {},\n uuid: item.uuid,\n notifier: {\n name: 'rollbar-browser-js',\n version: options.version\n }\n });\n callback(null, item);\n}\n\nfunction addRequestInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.location) {\n return callback(null, item);\n }\n var remoteString = '$remote_ip';\n if (!options.captureIp) {\n remoteString = null;\n } else if (options.captureIp !== true) {\n remoteString += '_anonymize';\n }\n _.set(item, 'data.request', {\n url: window.location.href,\n query_string: window.location.search,\n user_ip: remoteString\n });\n callback(null, item);\n };\n}\n\nfunction addClientInfo(window) {\n return function(item, options, callback) {\n if (!window) {\n return callback(null, item);\n }\n var nav = window.navigator || {};\n var scr = window.screen || {};\n _.set(item, 'data.client', {\n runtime_ms: item.timestamp - window._rollbarStartTime,\n timestamp: Math.round(item.timestamp / 1000),\n javascript: {\n browser: nav.userAgent,\n language: nav.language,\n cookie_enabled: nav.cookieEnabled,\n screen: {\n width: scr.width,\n height: scr.height\n }\n }\n });\n callback(null, item);\n };\n}\n\nfunction addPluginInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.navigator) {\n return callback(null, item);\n }\n var plugins = [];\n var navPlugins = window.navigator.plugins || [];\n var cur;\n for (var i=0, l=navPlugins.length; i < l; ++i) {\n cur = navPlugins[i];\n plugins.push({name: cur.name, description: cur.description});\n }\n _.set(item, 'data.client.javascript.plugins', plugins);\n callback(null, item);\n };\n}\n\nfunction addBody(item, options, callback) {\n if (item.stackInfo) {\n addBodyTrace(item, options, callback);\n } else {\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction addBodyMessage(item, options, callback) {\n var message = item.message;\n var custom = item.custom;\n\n if (!message) {\n if (custom) {\n var scrubFields = options.scrubFields;\n var messageResult = _.stringify(_.scrub(custom, scrubFields));\n message = messageResult.error || messageResult.value || '';\n } else {\n message = '';\n }\n }\n var result = {\n body: message\n };\n\n if (custom) {\n result.extra = _.extend(true, {}, custom);\n }\n\n _.set(item, 'data.body', {message: result});\n callback(null, item);\n}\n\n\nfunction addBodyTrace(item, options, callback) {\n var description = item.data.description;\n var stackInfo = item.stackInfo;\n var custom = item.custom;\n\n var guess = errorParser.guessErrorClass(stackInfo.message);\n var className = stackInfo.name || guess[0];\n var message = guess[1];\n var trace = {\n exception: {\n 'class': className,\n message: message\n }\n };\n\n if (description) {\n trace.exception.description = description;\n }\n\n // Transform a TraceKit stackInfo object into a Rollbar trace\n var stack = stackInfo.stack;\n if (stack && stack.length === 0 && item._unhandledStackInfo && item._unhandledStackInfo.stack) {\n stack = item._unhandledStackInfo.stack;\n }\n if (stack) {\n if (stack.length === 0) {\n trace.exception.stack = stackInfo.rawStack;\n trace.exception.raw = String(stackInfo.rawException);\n }\n var stackFrame;\n var frame;\n var code;\n var pre;\n var post;\n var contextLength;\n var i, mid;\n\n trace.frames = [];\n for (i = 0; i < stack.length; ++i) {\n stackFrame = stack[i];\n frame = {\n filename: stackFrame.url ? _.sanitizeUrl(stackFrame.url) : '(unknown)',\n lineno: stackFrame.line || null,\n method: (!stackFrame.func || stackFrame.func === '?') ? '[anonymous]' : stackFrame.func,\n colno: stackFrame.column\n };\n if (frame.method && frame.method.endsWith && frame.method.endsWith('_rollbar_wrapped')) {\n continue;\n }\n\n code = pre = post = null;\n contextLength = stackFrame.context ? stackFrame.context.length : 0;\n if (contextLength) {\n mid = Math.floor(contextLength / 2);\n pre = stackFrame.context.slice(0, mid);\n code = stackFrame.context[mid];\n post = stackFrame.context.slice(mid);\n }\n\n if (code) {\n frame.code = code;\n }\n\n if (pre || post) {\n frame.context = {};\n if (pre && pre.length) {\n frame.context.pre = pre;\n }\n if (post && post.length) {\n frame.context.post = post;\n }\n }\n\n if (stackFrame.args) {\n frame.args = stackFrame.args;\n }\n\n trace.frames.push(frame);\n }\n\n // NOTE(cory): reverse the frames since rollbar.com expects the most recent call last\n trace.frames.reverse();\n\n if (custom) {\n trace.extra = _.extend(true, {}, custom);\n }\n _.set(item, 'data.body', {trace: trace});\n callback(null, item);\n } else {\n item.message = className + ': ' + message;\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction scrubPayload(item, options, callback) {\n var scrubFields = options.scrubFields;\n item.data = _.scrub(item.data, scrubFields);\n callback(null, item);\n}\n\nmodule.exports = {\n handleItemWithError: handleItemWithError,\n ensureItemHasSomethingToSay: ensureItemHasSomethingToSay,\n addBaseInfo: addBaseInfo,\n addRequestInfo: addRequestInfo,\n addClientInfo: addClientInfo,\n addPluginInfo: addPluginInfo,\n addBody: addBody,\n scrubPayload: scrubPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transforms.js\n// module id = 19\n// module chunks = 0","'use strict';\n\nvar ErrorStackParser = require('error-stack-parser');\n\nvar UNKNOWN_FUNCTION = '?';\nvar ERR_CLASS_REGEXP = new RegExp('^(([a-zA-Z0-9-_$ ]*): *)?(Uncaught )?([a-zA-Z0-9-_$ ]*): ');\n\nfunction guessFunctionName() {\n return UNKNOWN_FUNCTION;\n}\n\n\nfunction gatherContext() {\n return null;\n}\n\n\nfunction Frame(stackFrame) {\n var data = {};\n\n data._stackFrame = stackFrame;\n\n data.url = stackFrame.fileName;\n data.line = stackFrame.lineNumber;\n data.func = stackFrame.functionName;\n data.column = stackFrame.columnNumber;\n data.args = stackFrame.args;\n\n data.context = gatherContext(data.url, data.line);\n\n return data;\n}\n\n\nfunction Stack(exception) {\n function getStack() {\n var parserStack = [];\n var exc;\n\n if (!exception.stack) {\n try {\n throw exception;\n } catch (e) {\n exc = e;\n }\n } else {\n exc = exception;\n }\n\n try {\n parserStack = ErrorStackParser.parse(exc);\n } catch(e) {\n parserStack = [];\n }\n\n var stack = [];\n\n for (var i = 0; i < parserStack.length; i++) {\n stack.push(new Frame(parserStack[i]));\n }\n\n return stack;\n }\n\n return {\n stack: getStack(),\n message: exception.message,\n name: exception.name,\n rawStack: exception.stack,\n rawException: exception\n };\n}\n\n\nfunction parse(e) {\n return new Stack(e);\n}\n\n\nfunction guessErrorClass(errMsg) {\n if (!errMsg || !errMsg.match) {\n return ['Unknown error. There was no error message to display.', ''];\n }\n var errClassMatch = errMsg.match(ERR_CLASS_REGEXP);\n var errClass = '(unknown)';\n\n if (errClassMatch) {\n errClass = errClassMatch[errClassMatch.length - 1];\n errMsg = errMsg.replace((errClassMatch[errClassMatch.length - 2] || '') + errClass + ':', '');\n errMsg = errMsg.replace(/(^[\\s]+|[\\s]+$)/g, '');\n }\n return [errClass, errMsg];\n}\n\n\nmodule.exports = {\n guessFunctionName: guessFunctionName,\n guessErrorClass: guessErrorClass,\n gatherContext: gatherContext,\n parse: parse,\n Stack: Stack,\n Frame: Frame\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/errorParser.js\n// module id = 20\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = locationParts[0] === 'eval' ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/error-stack-parser.js\n// module id = 21\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stackframe', [], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.StackFrame = factory();\n }\n}(this, function () {\n 'use strict';\n function _isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n function StackFrame(functionName, args, fileName, lineNumber, columnNumber, source) {\n if (functionName !== undefined) {\n this.setFunctionName(functionName);\n }\n if (args !== undefined) {\n this.setArgs(args);\n }\n if (fileName !== undefined) {\n this.setFileName(fileName);\n }\n if (lineNumber !== undefined) {\n this.setLineNumber(lineNumber);\n }\n if (columnNumber !== undefined) {\n this.setColumnNumber(columnNumber);\n }\n if (source !== undefined) {\n this.setSource(source);\n }\n }\n\n StackFrame.prototype = {\n getFunctionName: function () {\n return this.functionName;\n },\n setFunctionName: function (v) {\n this.functionName = String(v);\n },\n\n getArgs: function () {\n return this.args;\n },\n setArgs: function (v) {\n if (Object.prototype.toString.call(v) !== '[object Array]') {\n throw new TypeError('Args must be an Array');\n }\n this.args = v;\n },\n\n // NOTE: Property name may be misleading as it includes the path,\n // but it somewhat mirrors V8's JavaScriptStackTraceApi\n // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's\n // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14\n getFileName: function () {\n return this.fileName;\n },\n setFileName: function (v) {\n this.fileName = String(v);\n },\n\n getLineNumber: function () {\n return this.lineNumber;\n },\n setLineNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Line Number must be a Number');\n }\n this.lineNumber = Number(v);\n },\n\n getColumnNumber: function () {\n return this.columnNumber;\n },\n setColumnNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Column Number must be a Number');\n }\n this.columnNumber = Number(v);\n },\n\n getSource: function () {\n return this.source;\n },\n setSource: function (v) {\n this.source = String(v);\n },\n\n toString: function() {\n var functionName = this.getFunctionName() || '{anonymous}';\n var args = '(' + (this.getArgs() || []).join(',') + ')';\n var fileName = this.getFileName() ? ('@' + this.getFileName()) : '';\n var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : '';\n var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : '';\n return functionName + args + fileName + lineNumber + columnNumber;\n }\n };\n\n return StackFrame;\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/~/stackframe/stackframe.js\n// module id = 22\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction itemToPayload(item, options, callback) {\n var payloadOptions = options.payload || {};\n if (payloadOptions.body) {\n delete payloadOptions.body;\n }\n\n var data = _.extend(true, {}, item.data, payloadOptions);\n if (item._isUncaught) {\n data._isUncaught = true;\n }\n if (item._originalArgs) {\n data._originalArgs = item._originalArgs;\n }\n callback(null, data);\n}\n\nfunction addTelemetryData(item, options, callback) {\n if (item.telemetryEvents) {\n _.set(item, 'data.body.telemetry', item.telemetryEvents);\n }\n callback(null, item);\n}\n\nfunction addMessageWithError(item, options, callback) {\n if (!item.message) {\n callback(null, item);\n return;\n }\n var tracePath = 'data.body.trace_chain.0';\n var trace = _.get(item, tracePath);\n if (!trace) {\n tracePath = 'data.body.trace';\n trace = _.get(item, tracePath);\n }\n if (trace) {\n if (!(trace.exception && trace.exception.description)) {\n _.set(item, tracePath+'.exception.description', item.message);\n callback(null, item);\n return;\n }\n var extra = _.get(item, tracePath+'.extra') || {};\n var newExtra = _.extend(true, {}, extra, {message: item.message});\n _.set(item, tracePath+'.extra', newExtra);\n }\n callback(null, item);\n}\n\nfunction userTransform(logger) {\n return function(item, options, callback) {\n var newItem = _.extend(true, {}, item);\n try {\n if (_.isFunction(options.transform)) {\n options.transform(newItem.data);\n }\n } catch (e) {\n options.transform = null;\n logger.error('Error while calling custom transform() function. Removing custom transform().', e);\n callback(null, item);\n return;\n }\n callback(null, newItem);\n }\n}\n\nfunction addConfigToPayload(item, options, callback) {\n if (!options.sendConfig) {\n return callback(null, item);\n }\n var configKey = '_rollbarConfig';\n var custom = _.get(item, 'data.custom') || {};\n custom[configKey] = options;\n item.data.custom = custom;\n callback(null, item);\n}\n\nmodule.exports = {\n itemToPayload: itemToPayload,\n addTelemetryData: addTelemetryData,\n addMessageWithError: addMessageWithError,\n userTransform: userTransform,\n addConfigToPayload: addConfigToPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/transforms.js\n// module id = 23\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\n\nfunction checkIgnore(item, settings) {\n if (_.get(settings, 'plugins.jquery.ignoreAjaxErrors')) {\n return !_.get(item, 'body.message.extra.isAjax');\n }\n return true;\n}\n\nmodule.exports = {\n checkIgnore: checkIgnore\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/predicates.js\n// module id = 24\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction checkLevel(item, settings) {\n var level = item.level;\n var levelVal = _.LEVELS[level] || 0;\n var reportLevel = settings.reportLevel;\n var reportLevelVal = _.LEVELS[reportLevel] || 0;\n\n if (levelVal < reportLevelVal) {\n return false;\n }\n return true;\n}\n\nfunction userCheckIgnore(logger) {\n return function(item, settings) {\n var isUncaught = !!item._isUncaught;\n delete item._isUncaught;\n var args = item._originalArgs;\n delete item._originalArgs;\n try {\n if (_.isFunction(settings.onSendCallback)) {\n settings.onSendCallback(isUncaught, args, item);\n }\n } catch (e) {\n settings.onSendCallback = null;\n logger.error('Error while calling onSendCallback, removing', e);\n }\n try {\n if (_.isFunction(settings.checkIgnore) && settings.checkIgnore(isUncaught, args, item)) {\n return false;\n }\n } catch (e) {\n settings.checkIgnore = null;\n logger.error('Error while calling custom checkIgnore(), removing', e);\n }\n return true;\n }\n}\n\nfunction urlIsNotBlacklisted(logger) {\n return function(item, settings) {\n return !urlIsOnAList(item, settings, 'blacklist', logger);\n }\n}\n\nfunction urlIsWhitelisted(logger) {\n return function(item, settings) {\n return urlIsOnAList(item, settings, 'whitelist', logger);\n }\n}\n\nfunction urlIsOnAList(item, settings, whiteOrBlack, logger) {\n // whitelist is the default\n var black = false;\n if (whiteOrBlack === 'blacklist') {\n black = true;\n }\n var list, trace, frame, filename, frameLength, url, listLength, urlRegex;\n var i, j;\n\n try {\n list = black ? settings.hostBlackList : settings.hostWhiteList;\n listLength = list && list.length;\n trace = _.get(item, 'body.trace');\n\n // These two checks are important to come first as they are defaults\n // in case the list is missing or the trace is missing or not well-formed\n if (!list || listLength === 0) {\n return !black;\n }\n if (!trace || !trace.frames || trace.frames.length === 0) {\n return !black;\n }\n\n frameLength = trace.frames.length;\n for (i = 0; i < frameLength; i++) {\n frame = trace.frames[i];\n filename = frame.filename;\n\n if (!_.isType(filename, 'string')) {\n return !black;\n }\n\n for (j = 0; j < listLength; j++) {\n url = list[j];\n urlRegex = new RegExp(url);\n\n if (urlRegex.test(filename)) {\n return true;\n }\n }\n }\n } catch (e)\n /* istanbul ignore next */\n {\n if (black) {\n settings.hostBlackList = null;\n } else {\n settings.hostWhiteList = null;\n }\n var listName = black ? 'hostBlackList' : 'hostWhiteList';\n logger.error('Error while reading your configuration\\'s ' + listName + ' option. Removing custom ' + listName + '.', e);\n return !black;\n }\n return false;\n}\n\nfunction messageIsIgnored(logger) {\n return function(item, settings) {\n var exceptionMessage, i, ignoredMessages,\n len, messageIsIgnored, rIgnoredMessage,\n body, traceMessage, bodyMessage;\n\n try {\n messageIsIgnored = false;\n ignoredMessages = settings.ignoredMessages;\n\n if (!ignoredMessages || ignoredMessages.length === 0) {\n return true;\n }\n\n body = item.body;\n traceMessage = _.get(body, 'trace.exception.message');\n bodyMessage = _.get(body, 'message.body');\n\n exceptionMessage = traceMessage || bodyMessage;\n\n if (!exceptionMessage){\n return true;\n }\n\n len = ignoredMessages.length;\n for (i = 0; i < len; i++) {\n rIgnoredMessage = new RegExp(ignoredMessages[i], 'gi');\n messageIsIgnored = rIgnoredMessage.test(exceptionMessage);\n\n if (messageIsIgnored) {\n break;\n }\n }\n } catch(e)\n /* istanbul ignore next */\n {\n settings.ignoredMessages = null;\n logger.error('Error while reading your configuration\\'s ignoredMessages option. Removing custom ignoredMessages.');\n }\n\n return !messageIsIgnored;\n }\n}\n\nmodule.exports = {\n checkLevel: checkLevel,\n userCheckIgnore: userCheckIgnore,\n urlIsNotBlacklisted: urlIsNotBlacklisted,\n urlIsWhitelisted: urlIsWhitelisted,\n messageIsIgnored: messageIsIgnored\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/predicates.js\n// module id = 25\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar urlparser = require('./url');\nvar domUtil = require('./domUtility');\n\nvar defaults = {\n network: true,\n networkResponseHeaders: false,\n networkResponseBody: false,\n networkRequestBody: false,\n log: true,\n dom: true,\n navigation: true,\n connectivity: true\n};\n\nfunction replace(obj, name, replacement, replacements, type) {\n var orig = obj[name];\n obj[name] = replacement(orig);\n if (replacements) {\n replacements[type].push([obj, name, orig]);\n }\n}\n\nfunction restore(replacements, type) {\n var b;\n while (replacements[type].length) {\n b = replacements[type].shift();\n b[0][b[1]] = b[2];\n }\n}\n\nfunction Instrumenter(options, telemeter, rollbar, _window, _document) {\n var autoInstrument = options.autoInstrument;\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.extend(true, {}, defaults, autoInstrument);\n }\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n this.telemetryScrubber = options.telemetryScrubber;\n this.telemeter = telemeter;\n this.rollbar = rollbar;\n this._window = _window || {};\n this._document = _document || {};\n this.replacements = {\n network: [],\n log: [],\n navigation: [],\n connectivity: []\n };\n this.eventRemovers = {\n dom: [],\n connectivity: []\n };\n\n this._location = this._window.location;\n this._lastHref = this._location && this._location.href;\n}\n\nInstrumenter.prototype.configure = function(options) {\n var autoInstrument = options.autoInstrument;\n var oldSettings = _.extend(true, {}, this.autoInstrument);\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.extend(true, {}, defaults, autoInstrument);\n }\n this.instrument(oldSettings);\n if (options.scrubTelemetryInputs !== undefined) {\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n }\n if (options.telemetryScrubber !== undefined) {\n this.telemetryScrubber = options.telemetryScrubber;\n }\n};\n\nInstrumenter.prototype.instrument = function(oldSettings) {\n if (this.autoInstrument.network && !(oldSettings && oldSettings.network)) {\n this.instrumentNetwork();\n } else if (!this.autoInstrument.network && oldSettings && oldSettings.network) {\n this.deinstrumentNetwork();\n }\n\n if (this.autoInstrument.log && !(oldSettings && oldSettings.log)) {\n this.instrumentConsole();\n } else if (!this.autoInstrument.log && oldSettings && oldSettings.log) {\n this.deinstrumentConsole();\n }\n\n if (this.autoInstrument.dom && !(oldSettings && oldSettings.dom)) {\n this.instrumentDom();\n } else if (!this.autoInstrument.dom && oldSettings && oldSettings.dom) {\n this.deinstrumentDom();\n }\n\n if (this.autoInstrument.navigation && !(oldSettings && oldSettings.navigation)) {\n this.instrumentNavigation();\n } else if (!this.autoInstrument.navigation && oldSettings && oldSettings.navigation) {\n this.deinstrumentNavigation();\n }\n\n if (this.autoInstrument.connectivity && !(oldSettings && oldSettings.connectivity)) {\n this.instrumentConnectivity();\n } else if (!this.autoInstrument.connectivity && oldSettings && oldSettings.connectivity) {\n this.deinstrumentConnectivity();\n }\n};\n\nInstrumenter.prototype.deinstrumentNetwork = function() {\n restore(this.replacements, 'network');\n};\n\nInstrumenter.prototype.instrumentNetwork = function() {\n var self = this;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && _.isFunction(xhr[prop])) {\n replace(xhr, prop, function(orig) {\n return self.rollbar.wrap(orig);\n });\n }\n }\n\n if ('XMLHttpRequest' in this._window) {\n var xhrp = this._window.XMLHttpRequest.prototype;\n replace(xhrp, 'open', function(orig) {\n return function(method, url) {\n if (_.isType(url, 'string')) {\n this.__rollbar_xhr = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'network');\n\n replace(xhrp, 'send', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(data) {\n /* eslint-enable no-unused-vars */\n var xhr = this;\n\n function onreadystatechangeHandler() {\n if (xhr.__rollbar_xhr && (xhr.readyState === 1 || xhr.readyState === 4)) {\n if (xhr.__rollbar_xhr.status_code === null) {\n xhr.__rollbar_xhr.status_code = 0;\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n requestData = data;\n }\n xhr.__rollbar_event = self.telemeter.captureNetwork(xhr.__rollbar_xhr, 'xhr', undefined, requestData);\n }\n if (xhr.readyState === 1) {\n xhr.__rollbar_xhr.start_time_ms = _.now();\n } else {\n xhr.__rollbar_xhr.end_time_ms = _.now();\n\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n var header, i;\n if (headersConfig === true) {\n var allHeaders = xhr.getAllResponseHeaders();\n if (allHeaders) {\n var arr = allHeaders.trim().split(/[\\r\\n]+/);\n var parts, value;\n for (i=0; i < arr.length; i++) {\n parts = arr[i].split(': ');\n header = parts.shift();\n value = parts.join(': ');\n headers[header] = value;\n }\n }\n } else {\n for (i=0; i < headersConfig.length; i++) {\n header = headersConfig[i];\n headers[header] = xhr.getResponseHeader(header);\n }\n }\n } catch (e) {\n /* we ignore the errors here that could come from different\n * browser issues with the xhr methods */\n }\n }\n var body = null;\n if (self.autoInstrument.networkResponseBody) {\n try {\n body = xhr.responseText;\n } catch (e) {\n /* ignore errors from reading responseText */\n }\n }\n var response = null;\n if (body || headers) {\n response = {};\n if (body) {\n response.body = body;\n }\n if (headers) {\n response.headers = headers;\n }\n }\n if (response) {\n xhr.__rollbar_xhr.response = response;\n }\n }\n try {\n var code = xhr.status;\n code = code === 1223 ? 204 : code;\n xhr.__rollbar_xhr.status_code = code;\n xhr.__rollbar_event.level = self.telemeter.levelFromStatus(code);\n } catch (e) {\n /* ignore possible exception from xhr.status */\n }\n }\n }\n\n wrapProp('onload', xhr);\n wrapProp('onerror', xhr);\n wrapProp('onprogress', xhr);\n\n if ('onreadystatechange' in xhr && _.isFunction(xhr.onreadystatechange)) {\n replace(xhr, 'onreadystatechange', function(orig) {\n return self.rollbar.wrap(orig, undefined, onreadystatechangeHandler);\n });\n } else {\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n return orig.apply(this, arguments);\n }\n }, this.replacements, 'network');\n }\n\n if ('fetch' in this._window) {\n replace(this._window, 'fetch', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(fn, t) {\n /* eslint-enable no-unused-vars */\n var args = new Array(arguments.length);\n for (var i=0, len=args.length; i < len; i++) {\n args[i] = arguments[i];\n }\n var input = args[0];\n var method = 'GET';\n var url;\n if (_.isType(input, 'string')) {\n url = input;\n } else if (input) {\n url = input.url;\n if (input.method) {\n method = input.method;\n }\n }\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n var metadata = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n if (args[1] && args[1].body) {\n requestData = args[1].body;\n } else if (args[0] && !_.isType(args[0], 'string') && args[0].body) {\n requestData = args[0].body;\n }\n }\n self.telemeter.captureNetwork(metadata, 'fetch', undefined, requestData);\n return orig.apply(this, args).then(function (resp) {\n metadata.end_time_ms = _.now();\n metadata.status_code = resp.status;\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n if (headersConfig === true) {\n // This is unsupported in IE so we can't do it\n /*\n var allHeaders = resp.headers.entries();\n for (var pair of allHeaders) {\n headers[pair[0]] = pair[1];\n }\n */\n } else {\n for (var i=0; i < headersConfig.length; i++) {\n var header = headersConfig[i];\n headers[header] = resp.headers.get(header);\n }\n }\n } catch (e) {\n /* ignore probable IE errors */\n }\n }\n var response = null;\n if (headers) {\n response = {\n headers: headers\n };\n }\n if (response) {\n metadata.response = response;\n }\n return resp;\n });\n };\n }, this.replacements, 'network');\n }\n};\n\nInstrumenter.prototype.deinstrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n var b;\n while (this.replacements['log'].length) {\n b = this.replacements['log'].shift();\n this._window.console[b[0]] = b[1];\n }\n};\n\nInstrumenter.prototype.instrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n\n var self = this;\n var c = this._window.console;\n\n function wrapConsole(method) {\n var orig = c[method];\n var origConsole = c;\n var level = method === 'warn' ? 'warning' : method;\n c[method] = function() {\n var args = Array.prototype.slice.call(arguments);\n var message = _.formatArgsAsString(args);\n self.telemeter.captureLog(message, level);\n if (orig) {\n Function.prototype.apply.call(orig, origConsole, args);\n }\n };\n self.replacements['log'].push([method, orig]);\n }\n var methods = ['debug','info','warn','error','log'];\n for (var i=0, len=methods.length; i < len; i++) {\n wrapConsole(methods[i]);\n }\n};\n\nInstrumenter.prototype.deinstrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n this.removeListeners('dom');\n};\n\nInstrumenter.prototype.instrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n var clickHandler = this.handleClick.bind(this);\n var blurHandler = this.handleBlur.bind(this);\n this.addListener('dom', this._window, 'click', 'onclick', clickHandler, true);\n this.addListener('dom', this._window, 'blur', 'onfocusout', blurHandler, true);\n};\n\nInstrumenter.prototype.handleClick = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n var hasTag = e && e.tagName;\n var anchorOrButton = domUtil.isDescribedElement(e, 'a') || domUtil.isDescribedElement(e, 'button');\n if (hasTag && (anchorOrButton || domUtil.isDescribedElement(e, 'input', ['button', 'submit']))) {\n this.captureDomEvent('click', e);\n } else if (domUtil.isDescribedElement(e, 'input', ['checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value, e.checked);\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleBlur = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n if (e && e.tagName) {\n if (domUtil.isDescribedElement(e, 'textarea')) {\n this.captureDomEvent('input', e, e.value);\n } else if (domUtil.isDescribedElement(e, 'select') && e.options && e.options.length) {\n this.handleSelectInputChanged(e);\n } else if (domUtil.isDescribedElement(e, 'input') && !domUtil.isDescribedElement(e, 'input', ['button', 'submit', 'hidden', 'checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value);\n }\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleSelectInputChanged = function(elem) {\n if (elem.multiple) {\n for (var i = 0; i < elem.options.length; i++) {\n if (elem.options[i].selected) {\n this.captureDomEvent('input', elem, elem.options[i].value);\n }\n }\n } else if (elem.selectedIndex >= 0 && elem.options[elem.selectedIndex]) {\n this.captureDomEvent('input', elem, elem.options[elem.selectedIndex].value);\n }\n};\n\nInstrumenter.prototype.captureDomEvent = function(subtype, element, value, isChecked) {\n if (value !== undefined) {\n if (this.scrubTelemetryInputs || (domUtil.getElementType(element) === 'password')) {\n value = '[scrubbed]';\n } else if (this.telemetryScrubber) {\n var description = domUtil.describeElement(element);\n if (this.telemetryScrubber(description)) {\n value = '[scrubbed]';\n }\n }\n }\n var elementString = domUtil.elementArrayToString(domUtil.treeToArray(element));\n this.telemeter.captureDom(subtype, elementString, value, isChecked);\n};\n\nInstrumenter.prototype.deinstrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n restore(this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.instrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n var self = this;\n replace(this._window, 'onpopstate', function(orig) {\n return function() {\n var current = self._location.href;\n self.handleUrlChange(self._lastHref, current);\n if (orig) {\n orig.apply(this, arguments);\n }\n };\n }, this.replacements, 'navigation');\n\n replace(this._window.history, 'pushState', function(orig) {\n return function() {\n var url = arguments.length > 2 ? arguments[2] : undefined;\n if (url) {\n self.handleUrlChange(self._lastHref, url + '');\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.handleUrlChange = function(from, to) {\n var parsedHref = urlparser.parse(this._location.href);\n var parsedTo = urlparser.parse(to);\n var parsedFrom = urlparser.parse(from);\n this._lastHref = to;\n if (parsedHref.protocol === parsedTo.protocol && parsedHref.host === parsedTo.host) {\n to = parsedTo.path + (parsedTo.hash || '');\n }\n if (parsedHref.protocol === parsedFrom.protocol && parsedHref.host === parsedFrom.host) {\n from = parsedFrom.path + (parsedFrom.hash || '');\n }\n this.telemeter.captureNavigation(from, to);\n};\n\nInstrumenter.prototype.deinstrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.removeListeners('connectivity');\n } else {\n restore(this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.instrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.addListener('connectivity', this._window, 'online', undefined, function() {\n this.telemeter.captureConnectivityChange('online');\n }.bind(this), true);\n this.addListener('connectivity', this._window, 'offline', undefined, function() {\n this.telemeter.captureConnectivityChange('offline');\n }.bind(this), true);\n } else {\n var self = this;\n replace(this._document.body, 'ononline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('online');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n replace(this._document.body, 'onoffline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('offline');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.addListener = function(section, obj, type, altType, handler, capture) {\n if (obj.addEventListener) {\n obj.addEventListener(type, handler, capture);\n this.eventRemovers[section].push(function() {\n obj.removeEventListener(type, handler, capture);\n });\n } else if (altType) {\n obj.attachEvent(altType, handler);\n this.eventRemovers[section].push(function() {\n obj.detachEvent(altType, handler);\n });\n }\n};\n\nInstrumenter.prototype.removeListeners = function(section) {\n var r;\n while (this.eventRemovers[section].length) {\n r = this.eventRemovers[section].shift();\n r();\n }\n};\n\nmodule.exports = Instrumenter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/telemetry.js\n// module id = 26\n// module chunks = 0","'use strict';\n\nfunction getElementType(e) {\n return (e.getAttribute('type') || '').toLowerCase();\n}\n\nfunction isDescribedElement(element, type, subtypes) {\n if (element.tagName.toLowerCase() !== type.toLowerCase()) {\n return false;\n }\n if (!subtypes) {\n return true;\n }\n element = getElementType(element);\n for (var i = 0; i < subtypes.length; i++) {\n if (subtypes[i] === element) {\n return true;\n }\n }\n return false;\n}\n\nfunction getElementFromEvent(evt, doc) {\n if (evt.target) {\n return evt.target;\n }\n if (doc && doc.elementFromPoint) {\n return doc.elementFromPoint(evt.clientX, evt.clientY);\n }\n return undefined;\n}\n\nfunction treeToArray(elem) {\n var MAX_HEIGHT = 5;\n var out = [];\n var nextDescription;\n for (var height = 0; elem && height < MAX_HEIGHT; height++) {\n nextDescription = describeElement(elem);\n if (nextDescription.tagName === 'html') {\n break;\n }\n out.unshift(nextDescription);\n elem = elem.parentNode;\n }\n return out;\n}\n\nfunction elementArrayToString(a) {\n var MAX_LENGTH = 80;\n var separator = ' > ', separatorLength = separator.length;\n var out = [], len = 0, nextStr, totalLength;\n\n for (var i = a.length - 1; i >= 0; i--) {\n nextStr = descriptionToString(a[i]);\n totalLength = len + (out.length * separatorLength) + nextStr.length;\n if (i < a.length - 1 && totalLength >= MAX_LENGTH + 3) {\n out.unshift('...');\n break;\n }\n out.unshift(nextStr);\n len += nextStr.length;\n }\n return out.join(separator);\n}\n\nfunction descriptionToString(desc) {\n if (!desc || !desc.tagName) {\n return '';\n }\n var out = [desc.tagName];\n if (desc.id) {\n out.push('#' + desc.id);\n }\n if (desc.classes) {\n out.push('.' + desc.classes.join('.'));\n }\n for (var i = 0; i < desc.attributes.length; i++) {\n out.push('[' + desc.attributes[i].key + '=\"' + desc.attributes[i].value + '\"]');\n }\n\n return out.join('');\n}\n\n/**\n * Input: a dom element\n * Output: null if tagName is falsey or input is falsey, else\n * {\n * tagName: String,\n * id: String | undefined,\n * classes: [String] | undefined,\n * attributes: [\n * {\n * key: OneOf(type, name, title, alt),\n * value: String\n * }\n * ]\n * }\n */\nfunction describeElement(elem) {\n if (!elem || !elem.tagName) {\n return null;\n }\n var out = {}, className, key, attr, i;\n out.tagName = elem.tagName.toLowerCase();\n if (elem.id) {\n out.id = elem.id;\n }\n className = elem.className;\n if (className && (typeof className === 'string')) {\n out.classes = className.split(/\\s+/);\n }\n var attributes = ['type', 'name', 'title', 'alt'];\n out.attributes = [];\n for (i = 0; i < attributes.length; i++) {\n key = attributes[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.attributes.push({key: key, value: attr});\n }\n }\n return out;\n}\n\nmodule.exports = {\n describeElement: describeElement,\n descriptionToString: descriptionToString,\n elementArrayToString: elementArrayToString,\n treeToArray: treeToArray,\n getElementFromEvent: getElementFromEvent,\n isDescribedElement: isDescribedElement,\n getElementType: getElementType\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/domUtility.js\n// module id = 27\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/rollbar.noconflict.umd.min.js b/dist/rollbar.noconflict.umd.min.js index ecf122fda..d82440128 100644 --- a/dist/rollbar.noconflict.umd.min.js +++ b/dist/rollbar.noconflict.umd.min.js @@ -1,3 +1,3 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.rollbar=e():t.rollbar=e()}(this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return t[r].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}var n={};return e.m=t,e.c=n,e.p="",e(0)}([function(t,e,n){t.exports=n(1)},function(t,e,n){"use strict";var r=n(2);"undefined"==typeof window||window._rollbarStartTime||(window._rollbarStartTime=(new Date).getTime()),t.exports=r},function(t,e,n){"use strict";function r(t,e){this.options=c.extend(!0,_,t);var n=new l(this.options,h,d);this.client=e||new u(this.options,n,p,"browser");var r="undefined"!=typeof window&&window||"undefined"!=typeof self&&self,o="undefined"!=typeof document&&document;i(this.client.notifier),a(this.client.queue),(this.options.captureUncaught||this.options.handleUncaughtExceptions)&&(f.captureUncaughtExceptions(r,this),f.wrapGlobals(r,this)),(this.options.captureUnhandledRejections||this.options.handleUnhandledRejections)&&f.captureUnhandledRejections(r,this),this.instrumenter=new w(this.options,this.client.telemeter,this,r,o),this.instrumenter.instrument()}function o(t){var e="Rollbar is not initialized";p.error(e),t&&t(new Error(e))}function i(t){t.addTransform(m.handleItemWithError).addTransform(m.ensureItemHasSomethingToSay).addTransform(m.addBaseInfo).addTransform(m.addRequestInfo(window)).addTransform(m.addClientInfo(window)).addTransform(m.addPluginInfo(window)).addTransform(m.addBody).addTransform(g.addMessageWithError).addTransform(g.addTelemetryData).addTransform(g.addConfigToPayload).addTransform(m.scrubPayload).addTransform(g.userTransform(p)).addTransform(g.itemToPayload)}function a(t){t.addPredicate(y.checkLevel).addPredicate(v.checkIgnore).addPredicate(y.userCheckIgnore(p)).addPredicate(y.urlIsNotBlacklisted(p)).addPredicate(y.urlIsWhitelisted(p)).addPredicate(y.messageIsIgnored(p))}function s(t){for(var e=0,n=t.length;e=1&&n>e}function o(t,e,n,r,o,a,s){var u=null;return n&&(n=new Error(n)),n||r||(u=i(t,e,o,a,s)),{error:n,shouldSend:r,payload:u}}function i(t,e,n,r,o){var i,a=e.environment||e.payload&&e.payload.environment;i=o?"item per minute limit reached, ignoring errors until timeout":"maxItems has been hit, ignoring errors until reset.";var s={body:{message:{body:i,extra:{maxItems:n,itemsPerMinute:r}}},language:"javascript",environment:a,notifier:{version:e.notifier&&e.notifier.version||e.version}};return"browser"===t?(s.platform="browser",s.framework="browser-js",s.notifier.name="rollbar-browser-js"):"server"===t?(s.framework=e.framework||"node-js",s.notifier.name=e.notifier.name):"react-native"===t&&(s.framework=e.framework||"react-native",s.notifier.name=e.notifier.name),s}n.globalSettings={startTime:(new Date).getTime(),maxItems:void 0,itemsPerMinute:void 0},n.prototype.configureGlobal=function(t){void 0!==t.startTime&&(n.globalSettings.startTime=t.startTime),void 0!==t.maxItems&&(n.globalSettings.maxItems=t.maxItems),void 0!==t.itemsPerMinute&&(n.globalSettings.itemsPerMinute=t.itemsPerMinute)},n.prototype.shouldSend=function(t,e){e=e||(new Date).getTime(),e-this.startTime>=6e4&&(this.startTime=e,this.perMinCounter=0);var i=n.globalSettings.maxItems,a=n.globalSettings.itemsPerMinute;if(r(t,i,this.counter))return o(this.platform,this.platformOptions,i+" max items reached",!1);if(r(t,a,this.perMinCounter))return o(this.platform,this.platformOptions,a+" items per minute reached",!1);this.counter++,this.perMinCounter++;var s=!r(t,i,this.counter),u=s;return s=s&&!r(t,a,this.perMinCounter),o(this.platform,this.platformOptions,null,s,i,a,u)},n.prototype.setPlatformOptions=function(t,e){this.platform=t,this.platformOptions=e},t.exports=n},function(t,e,n){"use strict";function r(t,e,n,r){this.rateLimiter=t,this.api=e,this.logger=n,this.options=r,this.predicates=[],this.pendingItems=[],this.pendingRequests=[],this.retryQueue=[],this.retryHandle=null,this.waitCallback=null,this.waitIntervalID=null}var o=n(6);r.prototype.configure=function(t){this.api&&this.api.configure(t);var e=this.options;return this.options=o.extend(!0,{},e,t),this},r.prototype.addPredicate=function(t){return o.isFunction(t)&&this.predicates.push(t),this},r.prototype.addPendingItem=function(t){this.pendingItems.push(t)},r.prototype.removePendingItem=function(t){var e=this.pendingItems.indexOf(t);e!==-1&&this.pendingItems.splice(e,1)},r.prototype.addItem=function(t,e,n,r){e&&o.isFunction(e)||(e=function(){});var i=this._applyPredicates(t);if(i.stop)return this.removePendingItem(r),void e(i.err);this._maybeLog(t,n),this.removePendingItem(r),this.pendingRequests.push(t);try{this._makeApiRequest(t,function(n,r){this._dequeuePendingRequest(t),e(n,r)}.bind(this))}catch(n){this._dequeuePendingRequest(t),e(n)}},r.prototype.wait=function(t){o.isFunction(t)&&(this.waitCallback=t,this._maybeCallWait()||(this.waitIntervalID&&(this.waitIntervalID=clearInterval(this.waitIntervalID)),this.waitIntervalID=setInterval(function(){this._maybeCallWait()}.bind(this),500)))},r.prototype._applyPredicates=function(t){for(var e=null,n=0,r=this.predicates.length;ns)?(a=e.path,e.path=a.substring(0,s)+i+"&"+a.substring(s+1)):u!==-1?(a=e.path,e.path=a.substring(0,u)+i+a.substring(u)):e.path=e.path+i}function y(t,e){if(e=e||t.protocol,!e&&t.port&&(80===t.port?e="http:":443===t.port&&(e="https:")),e=e||"https:",!t.hostname)return null;var n=e+"//"+t.hostname;return t.port&&(n=n+":"+t.port),t.path&&(n+=t.path),n}function b(t,e){var n,r;try{n=j.stringify(t)}catch(o){if(e&&a(e))try{n=e(t)}catch(t){r=t}else r=o}return{error:r,value:n}}function w(t){var e,n;try{e=j.parse(t)}catch(t){n=t}return{error:n,value:e}}function x(t,e,n,r,o,i,a,s){var u={url:e||"",line:n,column:r};u.func=s.guessFunctionName(u.url,u.line),u.context=s.gatherContext(u.url,u.line);var c=document&&document.location&&document.location.href,l=window&&window.navigator&&window.navigator.userAgent;return{mode:i,message:o?String(o):t||a,url:c,stack:[u],useragent:l}}function _(t,e){return function(n,r){try{e(n,r)}catch(e){t.error(e)}}}function k(t,e,n,r,o){for(var a,s,u,c,l,p,f=[],h=0,m=t.length;h0&&(u=C(!0,{},u),u.extraArgs=f);var b={message:a,err:s,custom:u,timestamp:N(),callback:c,uuid:d()};return u&&void 0!==u.level&&(b.level=u.level,delete u.level),r&&l&&(b.request=l),o&&(b.lambdaContext=o),b._originalArgs=t,b}function E(t,e){if(t){var n=e.split("."),r=t;try{for(var o=0,i=n.length;o500&&(r=r.substr(0,500)+"...")):"undefined"==typeof r&&(r="undefined"),o.push(r);return o.join(" ")}function N(){return Date.now?+Date.now():+new Date}var C=n(7),j={},R=!1;r();var A={debug:0,info:1,warning:2,error:3,critical:4},q={strictMode:!1,key:["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],q:{name:"queryKey",parser:/(?:^|&)([^&=]*)=?([^&]*)/g},parser:{strict:/^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,loose:/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/}};t.exports={isType:o,typeName:i,isFunction:a,isNativeFunction:s,isIterable:l,isError:p,extend:C,traverse:f,redact:h,uuid4:d,LEVELS:A,sanitizeUrl:m,addParamsAndAccessTokenToPath:v,formatUrl:y,stringify:b,jsonParse:w,makeUnhandledStackInfo:x,createItem:k,get:E,set:I,scrub:T,formatArgsAsString:L,now:N}},function(t,e){"use strict";var n=Object.prototype.hasOwnProperty,r=Object.prototype.toString,o=function(t){return"function"==typeof Array.isArray?Array.isArray(t):"[object Array]"===r.call(t)},i=function(t){if(!t||"[object Object]"!==r.call(t))return!1;var e=n.call(t,"constructor"),o=t.constructor&&t.constructor.prototype&&n.call(t.constructor.prototype,"isPrototypeOf");if(t.constructor&&!e&&!o)return!1;var i;for(i in t);return"undefined"==typeof i||n.call(t,i)};t.exports=function t(){var e,n,r,a,s,u,c=arguments[0],l=1,p=arguments.length,f=!1;for("boolean"==typeof c?(f=c,c=arguments[1]||{},l=2):("object"!=typeof c&&"function"!=typeof c||null==c)&&(c={});lr&&(o=this.maxQueueSize-r),this.maxQueueSize=r,this.queue.splice(0,o)},r.prototype.copyEvents=function(){return Array.prototype.slice.call(this.queue,0)},r.prototype.capture=function(t,e,n,r,a){var s={level:o(t,n),type:t,timestamp_ms:a||i.now(),body:e,source:"client"};r&&(s.uuid=r);try{if(i.isFunction(this.options.filterTelemetry)&&this.options.filterTelemetry(s))return!1}catch(t){this.options.filterTelemetry=null}return this.push(s),s},r.prototype.captureEvent=function(t,e,n){return this.capture("manual",t,e,n)},r.prototype.captureError=function(t,e,n,r){var o={message:t.message||String(t)};return t.stack&&(o.stack=t.stack),this.capture("error",o,e,n,r)},r.prototype.captureLog=function(t,e,n,r){return this.capture("log",{message:t},e,n,r)},r.prototype.captureNetwork=function(t,e,n,r){e=e||"xhr",t.subtype=t.subtype||e,r&&(t.request=r);var o=this.levelFromStatus(t.status_code);return this.capture("network",t,o,n)},r.prototype.levelFromStatus=function(t){return t>=200&&t<400?"info":0===t||t>=400?"error":"info"},r.prototype.captureDom=function(t,e,n,r,o){var i={subtype:t,element:e};return void 0!==n&&(i.value=n),void 0!==r&&(i.checked=r),this.capture("dom",i,"info",o)},r.prototype.captureNavigation=function(t,e,n){return this.capture("navigation",{from:t,to:e},"info",n)},r.prototype.captureDomContentLoaded=function(t){return this.capture("navigation",{subtype:"DOMContentLoaded"},"info",void 0,t&&t.getTime())},r.prototype.captureLoad=function(t){return this.capture("navigation",{subtype:"load"},"info",void 0,t&&t.getTime())},r.prototype.captureConnectivityChange=function(t,e){return this.captureNetwork({change:t},"connectivity",e)},r.prototype._captureRollbarItem=function(t){if(this.options.includeItemsInTelemetry)return t.err?this.captureError(t.err,t.level,t.uuid,t.timestamp):t.message?this.captureLog(t.message,t.level,t.uuid,t.timestamp):t.custom?this.capture("log",t.custom,t.level,t.uuid,t.timestamp):void 0},r.prototype.push=function(t){this.queue.push(t),this.queue.length>this.maxQueueSize&&this.queue.shift()},t.exports=r},function(t,e,n){"use strict";function r(t,e,n,r){this.options=t,this.transport=e,this.url=n,this.jsonBackup=r,this.accessToken=t.accessToken,this.transportOptions=o(t,n)}function o(t,e){return a.getTransportFromOptions(t,s,e)}var i=n(6),a=n(12),s={hostname:"api.rollbar.com",path:"/api/1/item/",search:null,version:"1",protocol:"https:",port:443};r.prototype.postItem=function(t,e){var n=a.transportOptions(this.transportOptions,"POST"),r=a.buildPayload(this.accessToken,t,this.jsonBackup);this.transport.post(this.accessToken,n,r,e)},r.prototype.configure=function(t){var e=this.oldOptions;return this.options=i.extend(!0,{},e,t),this.transportOptions=o(this.options,this.url),void 0!==this.options.accessToken&&(this.accessToken=this.options.accessToken),this},t.exports=r},function(t,e,n){"use strict";function r(t,e,n){if(!s.isType(e.context,"string")){var r=s.stringify(e.context,n);r.error?e.context="Error: could not serialize 'context'":e.context=r.value||"",e.context.length>255&&(e.context=e.context.substr(0,255))}return{access_token:t,data:e}}function o(t,e,n){var r=e.hostname,o=e.protocol,i=e.port,a=e.path,s=e.search,u=t.proxy;if(t.endpoint){var c=n.parse(t.endpoint);r=c.hostname,o=c.protocol,i=c.port,a=c.pathname,s=c.search}return{hostname:r,protocol:o,port:i,path:a,search:s,proxy:u}}function i(t,e){var n=t.protocol||"https:",r=t.port||("http:"===n?80:"https:"===n?443:void 0),o=t.hostname,i=t.path;return t.search&&(i+=t.search),t.proxy&&(i=n+"//"+o+i,o=t.proxy.host||t.proxy.hostname,r=t.proxy.port,n=t.proxy.protocol||n),{protocol:n,hostname:o,path:i,port:r,method:e}}function a(t,e){var n=/\/$/.test(t),r=/^\//.test(e);return n&&r?e=e.substring(1):n||r||(e="/"+e),t+e}var s=n(6);t.exports={buildPayload:r,getTransportFromOptions:o,transportOptions:i,appendPathToPath:a}},function(t,e,n){"use strict";function r(){var t=Array.prototype.slice.call(arguments,0);t.unshift("Rollbar:"),a.ieVersion()<=8?console.error(s.formatArgsAsString(t)):console.error.apply(console,t)}function o(){var t=Array.prototype.slice.call(arguments,0);t.unshift("Rollbar:"),a.ieVersion()<=8?console.info(s.formatArgsAsString(t)):console.info.apply(console,t)}function i(){var t=Array.prototype.slice.call(arguments,0);t.unshift("Rollbar:"),a.ieVersion()<=8?console.log(s.formatArgsAsString(t)):console.log.apply(console,t)}n(14);var a=n(15),s=n(6);t.exports={error:r,info:o,log:i}},function(t,e){!function(t){"use strict";t.console||(t.console={});for(var e,n,r=t.console,o=function(){},i=["memory"],a="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(",");e=i.pop();)r[e]||(r[e]={});for(;n=a.pop();)r[n]||(r[n]=o)}("undefined"==typeof window?this:window)},function(t,e){"use strict";function n(){var t;if(!document)return t;for(var e=3,n=document.createElement("div"),r=n.getElementsByTagName("i");n.innerHTML="",r[0];);return e>4?e:t}var r={ieVersion:n};t.exports=r},function(t,e){"use strict";function n(t,e,n){if(t){var o;"function"==typeof e._rollbarOldOnError?o=e._rollbarOldOnError:t.onerror&&!t.onerror.belongsToShim&&(o=t.onerror,e._rollbarOldOnError=o);var i=function(){var n=Array.prototype.slice.call(arguments,0);r(t,e,o,n)};i.belongsToShim=n,t.onerror=i}}function r(t,e,n,r){t._rollbarWrappedError&&(r[4]||(r[4]=t._rollbarWrappedError),r[5]||(r[5]=t._rollbarWrappedError._rollbarContext),t._rollbarWrappedError=null),e.handleUncaughtException.apply(e,r), -n&&n.apply(t,r)}function o(t,e,n){if(t){"function"==typeof t._rollbarURH&&t._rollbarURH.belongsToShim&&t.removeEventListener("unhandledrejection",t._rollbarURH);var r=function(t){var n,r,o;try{n=t.reason}catch(t){n=void 0}try{r=t.promise}catch(t){r="[unhandledrejection] error getting `promise` from event"}try{o=t.detail,!n&&o&&(n=o.reason,r=o.promise)}catch(t){o="[unhandledrejection] error getting `detail` from event"}n||(n="[unhandledrejection] error getting `reason` from event"),e&&e.handleUnhandledRejection&&e.handleUnhandledRejection(n,r)};r.belongsToShim=n,t._rollbarURH=r,t.addEventListener("unhandledrejection",r)}}function i(t,e,n){if(t){var r,o,i="EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload".split(",");for(r=0;r=400&&t.status<600}function c(t,e){var n=new Error(t);return n.code=e||"ENOTFOUND",n}var l=n(6),p=n(13);t.exports={get:r,post:o}},function(t,e){"use strict";function n(t){var e,n,r={protocol:null,auth:null,host:null,path:null,hash:null,href:t,hostname:null,port:null,pathname:null,search:null,query:null};if(e=t.indexOf("//"),e!==-1?(r.protocol=t.substring(0,e),n=e+2):n=0,e=t.indexOf("@",n),e!==-1&&(r.auth=t.substring(n,e),n=e+1),e=t.indexOf("/",n),e===-1){if(e=t.indexOf("?",n),e===-1)return e=t.indexOf("#",n),e===-1?r.host=t.substring(n):(r.host=t.substring(n,e),r.hash=t.substring(e)),r.hostname=r.host.split(":")[0],r.port=r.host.split(":")[1],r.port&&(r.port=parseInt(r.port,10)),r;r.host=t.substring(n,e),r.hostname=r.host.split(":")[0],r.port=r.host.split(":")[1],r.port&&(r.port=parseInt(r.port,10)),n=e}else r.host=t.substring(n,e),r.hostname=r.host.split(":")[0],r.port=r.host.split(":")[1],r.port&&(r.port=parseInt(r.port,10)),n=e;if(e=t.indexOf("#",n),e===-1?r.path=t.substring(n):(r.path=t.substring(n,e),r.hash=t.substring(e)),r.path){var o=r.path.split("?");r.pathname=o[0],r.query=o[1],r.search=r.query?"?"+r.query:null}return r}t.exports={parse:n}},function(t,e,n){"use strict";function r(t,e,n){if(t.data=t.data||{},t.err)try{t.stackInfo=t.err._savedStackTrace||d.parse(t.err)}catch(e){m.error("Error while parsing the error object.",e),t.message=t.err.message||t.err.description||t.message||String(t.err),delete t.err}n(null,t)}function o(t,e,n){t.message||t.stackInfo||t.custom||n(new Error("No message, stack info, or custom data"),null),n(null,t)}function i(t,e,n){var r=e.payload&&e.payload.environment||e.environment;t.data=h.extend(!0,{},t.data,{environment:r,level:t.level,endpoint:e.endpoint,platform:"browser",framework:"browser-js",language:"javascript",server:{},uuid:t.uuid,notifier:{name:"rollbar-browser-js",version:e.version}}),n(null,t)}function a(t){return function(e,n,r){return t&&t.location?(h.set(e,"data.request",{url:t.location.href,query_string:t.location.search,user_ip:"$remote_ip"}),void r(null,e)):r(null,e)}}function s(t){return function(e,n,r){if(!t)return r(null,e);var o=t.navigator||{},i=t.screen||{};h.set(e,"data.client",{runtime_ms:e.timestamp-t._rollbarStartTime,timestamp:Math.round(e.timestamp/1e3),javascript:{browser:o.userAgent,language:o.language,cookie_enabled:o.cookieEnabled,screen:{width:i.width,height:i.height}}}),r(null,e)}}function u(t){return function(e,n,r){if(!t||!t.navigator)return r(null,e);for(var o,i=[],a=t.navigator.plugins||[],s=0,u=a.length;s-1&&(e=e.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var n=e.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),r=this.extractLocation(n.pop()),o=n.join(" ")||void 0,i="eval"===r[0]?void 0:r[0];return new t(o,void 0,i,r[1],r[2],e)},this)},parseFFOrSafari:function(r){var o=n(r.stack.split("\n"),function(t){return!t.match(i)},this);return e(o,function(e){if(e.indexOf(" > eval")>-1&&(e=e.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),e.indexOf("@")===-1&&e.indexOf(":")===-1)return new t(e);var n=e.split("@"),r=this.extractLocation(n.pop()),o=n.shift()||void 0;return new t(o,void 0,r[0],r[1],r[2],e)},this)},parseOpera:function(t){return!t.stacktrace||t.message.indexOf("\n")>-1&&t.message.split("\n").length>t.stacktrace.split("\n").length?this.parseOpera9(t):t.stack?this.parseOpera11(t):this.parseOpera10(t)},parseOpera9:function(e){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=e.message.split("\n"),o=[],i=2,a=r.length;i/,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(n=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new t(a,s,o[0],o[1],o[2],e)},this)}}})},function(t,e,n){var r,o,i;!function(n,a){"use strict";o=[],r=a,i="function"==typeof r?r.apply(e,o):r,!(void 0!==i&&(t.exports=i))}(this,function(){"use strict";function t(t){return!isNaN(parseFloat(t))&&isFinite(t)}function e(t,e,n,r,o,i){void 0!==t&&this.setFunctionName(t),void 0!==e&&this.setArgs(e),void 0!==n&&this.setFileName(n),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return e.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(t){this.functionName=String(t)},getArgs:function(){return this.args},setArgs:function(t){if("[object Array]"!==Object.prototype.toString.call(t))throw new TypeError("Args must be an Array");this.args=t},getFileName:function(){return this.fileName},setFileName:function(t){this.fileName=String(t)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(e){if(!t(e))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(e)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(e){if(!t(e))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(e)},getSource:function(){return this.source},setSource:function(t){this.source=String(t)},toString:function(){var e=this.getFunctionName()||"{anonymous}",n="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=t(this.getLineNumber())?":"+this.getLineNumber():"",i=t(this.getColumnNumber())?":"+this.getColumnNumber():"";return e+n+r+o+i}},e})},function(t,e,n){"use strict";function r(t,e,n){var r=e.payload||{};r.body&&delete r.body;var o=u.extend(!0,{},t.data,r);t._isUncaught&&(o._isUncaught=!0),t._originalArgs&&(o._originalArgs=t._originalArgs),n(null,o)}function o(t,e,n){t.telemetryEvents&&u.set(t,"data.body.telemetry",t.telemetryEvents),n(null,t)}function i(t,e,n){if(!t.message)return void n(null,t);var r="data.body.trace_chain.0",o=u.get(t,r);if(o||(r="data.body.trace",o=u.get(t,r)),o){if(!o.exception||!o.exception.description)return u.set(t,r+".exception.description",t.message),void n(null,t);var i=u.get(t,r+".extra")||{},a=u.extend(!0,{},i,{message:t.message});u.set(t,r+".extra",a)}n(null,t)}function a(t){return function(e,n,r){var o=u.extend(!0,{},e);try{u.isFunction(n.transform)&&n.transform(o.data)}catch(o){return n.transform=null,t.error("Error while calling custom transform() function. Removing custom transform().",o),void r(null,e)}r(null,o)}}function s(t,e,n){if(!e.sendConfig)return n(null,t);var r="_rollbarConfig",o=u.get(t,"data.custom")||{};o[r]=e,t.data.custom=o,n(null,t)}var u=n(6);t.exports={itemToPayload:r,addTelemetryData:o,addMessageWithError:i,userTransform:a,addConfigToPayload:s}},function(t,e,n){"use strict";function r(t,e){return!o.get(e,"plugins.jquery.ignoreAjaxErrors")||!o.get(t,"body.message.extra.isAjax")}var o=n(6);t.exports={checkIgnore:r}},function(t,e,n){"use strict";function r(t,e){var n=t.level,r=c.LEVELS[n]||0,o=e.reportLevel,i=c.LEVELS[o]||0;return!(r=0&&t.options[t.selectedIndex]&&this.captureDomEvent("input",t,t.options[t.selectedIndex].value)},i.prototype.captureDomEvent=function(t,e,n,r){if(void 0!==n)if(this.scrubTelemetryInputs||"password"===u.getElementType(e))n="[scrubbed]";else if(this.telemetryScrubber){var o=u.describeElement(e);this.telemetryScrubber(o)&&(n="[scrubbed]")}var i=u.elementArrayToString(u.treeToArray(e));this.telemeter.captureDom(t,i,n,r)},i.prototype.deinstrumentNavigation=function(){var t=this._window.chrome,e=t&&t.app&&t.app.runtime,n=!e&&this._window.history&&this._window.history.pushState;n&&o(this.replacements,"navigation")},i.prototype.instrumentNavigation=function(){var t=this._window.chrome,e=t&&t.app&&t.app.runtime,n=!e&&this._window.history&&this._window.history.pushState;if(n){var o=this;r(this._window,"onpopstate",function(t){return function(){var e=o._location.href;o.handleUrlChange(o._lastHref,e),t&&t.apply(this,arguments)}},this.replacements,"navigation"),r(this._window.history,"pushState",function(t){return function(){var e=arguments.length>2?arguments[2]:void 0;return e&&o.handleUrlChange(o._lastHref,e+""),t.apply(this,arguments)}},this.replacements,"navigation")}},i.prototype.handleUrlChange=function(t,e){var n=s.parse(this._location.href),r=s.parse(e),o=s.parse(t);this._lastHref=e,n.protocol===r.protocol&&n.host===r.host&&(e=r.path+(r.hash||"")),n.protocol===o.protocol&&n.host===o.host&&(t=o.path+(o.hash||"")),this.telemeter.captureNavigation(t,e)},i.prototype.deinstrumentConnectivity=function(){("addEventListener"in this._window||"body"in this._document)&&(this._window.addEventListener?this.removeListeners("connectivity"):o(this.replacements,"connectivity"))},i.prototype.instrumentConnectivity=function(){if("addEventListener"in this._window||"body"in this._document)if(this._window.addEventListener)this.addListener("connectivity",this._window,"online",void 0,function(){this.telemeter.captureConnectivityChange("online")}.bind(this),!0),this.addListener("connectivity",this._window,"offline",void 0,function(){this.telemeter.captureConnectivityChange("offline")}.bind(this),!0);else{var t=this;r(this._document.body,"ononline",function(e){return function(){t.telemeter.captureConnectivityChange("online"),e&&e.apply(this,arguments)}},this.replacements,"connectivity"),r(this._document.body,"onoffline",function(e){return function(){t.telemeter.captureConnectivityChange("offline"),e&&e.apply(this,arguments)}},this.replacements,"connectivity")}},i.prototype.addListener=function(t,e,n,r,o,i){e.addEventListener?(e.addEventListener(n,o,i),this.eventRemovers[t].push(function(){e.removeEventListener(n,o,i)})):r&&(e.attachEvent(r,o),this.eventRemovers[t].push(function(){e.detachEvent(r,o)}))},i.prototype.removeListeners=function(t){for(var e;this.eventRemovers[t].length;)(e=this.eventRemovers[t].shift())()},t.exports=i},function(t,e){"use strict";function n(t){return(t.getAttribute("type")||"").toLowerCase()}function r(t,e,r){if(t.tagName.toLowerCase()!==e.toLowerCase())return!1;if(!r)return!0;t=n(t);for(var o=0;o ",i=o.length,a=[],u=0,c=t.length-1;c>=0;c--){if(e=s(t[c]),n=u+a.length*i+e.length,c=r+3){a.unshift("...");break}a.unshift(e),u+=e.length}return a.join(o)}function s(t){if(!t||!t.tagName)return"";var e=[t.tagName];t.id&&e.push("#"+t.id),t.classes&&e.push("."+t.classes.join("."));for(var n=0;n=1&&n>e}function o(t,e,n,r,o,a,s){var u=null;return n&&(n=new Error(n)),n||r||(u=i(t,e,o,a,s)),{error:n,shouldSend:r,payload:u}}function i(t,e,n,r,o){var i,a=e.environment||e.payload&&e.payload.environment;i=o?"item per minute limit reached, ignoring errors until timeout":"maxItems has been hit, ignoring errors until reset.";var s={body:{message:{body:i,extra:{maxItems:n,itemsPerMinute:r}}},language:"javascript",environment:a,notifier:{version:e.notifier&&e.notifier.version||e.version}};return"browser"===t?(s.platform="browser",s.framework="browser-js",s.notifier.name="rollbar-browser-js"):"server"===t?(s.framework=e.framework||"node-js",s.notifier.name=e.notifier.name):"react-native"===t&&(s.framework=e.framework||"react-native",s.notifier.name=e.notifier.name),s}n.globalSettings={startTime:(new Date).getTime(),maxItems:void 0,itemsPerMinute:void 0},n.prototype.configureGlobal=function(t){void 0!==t.startTime&&(n.globalSettings.startTime=t.startTime),void 0!==t.maxItems&&(n.globalSettings.maxItems=t.maxItems),void 0!==t.itemsPerMinute&&(n.globalSettings.itemsPerMinute=t.itemsPerMinute)},n.prototype.shouldSend=function(t,e){e=e||(new Date).getTime(),e-this.startTime>=6e4&&(this.startTime=e,this.perMinCounter=0);var i=n.globalSettings.maxItems,a=n.globalSettings.itemsPerMinute;if(r(t,i,this.counter))return o(this.platform,this.platformOptions,i+" max items reached",!1);if(r(t,a,this.perMinCounter))return o(this.platform,this.platformOptions,a+" items per minute reached",!1);this.counter++,this.perMinCounter++;var s=!r(t,i,this.counter),u=s;return s=s&&!r(t,a,this.perMinCounter),o(this.platform,this.platformOptions,null,s,i,a,u)},n.prototype.setPlatformOptions=function(t,e){this.platform=t,this.platformOptions=e},t.exports=n},function(t,e,n){"use strict";function r(t,e,n,r){this.rateLimiter=t,this.api=e,this.logger=n,this.options=r,this.predicates=[],this.pendingItems=[],this.pendingRequests=[],this.retryQueue=[],this.retryHandle=null,this.waitCallback=null,this.waitIntervalID=null}var o=n(6);r.prototype.configure=function(t){this.api&&this.api.configure(t);var e=this.options;return this.options=o.extend(!0,{},e,t),this},r.prototype.addPredicate=function(t){return o.isFunction(t)&&this.predicates.push(t),this},r.prototype.addPendingItem=function(t){this.pendingItems.push(t)},r.prototype.removePendingItem=function(t){var e=this.pendingItems.indexOf(t);e!==-1&&this.pendingItems.splice(e,1)},r.prototype.addItem=function(t,e,n,r){e&&o.isFunction(e)||(e=function(){});var i=this._applyPredicates(t);if(i.stop)return this.removePendingItem(r),void e(i.err);this._maybeLog(t,n),this.removePendingItem(r),this.pendingRequests.push(t);try{this._makeApiRequest(t,function(n,r){this._dequeuePendingRequest(t),e(n,r)}.bind(this))}catch(n){this._dequeuePendingRequest(t),e(n)}},r.prototype.wait=function(t){o.isFunction(t)&&(this.waitCallback=t,this._maybeCallWait()||(this.waitIntervalID&&(this.waitIntervalID=clearInterval(this.waitIntervalID)),this.waitIntervalID=setInterval(function(){this._maybeCallWait()}.bind(this),500)))},r.prototype._applyPredicates=function(t){for(var e=null,n=0,r=this.predicates.length;ns)?(a=e.path,e.path=a.substring(0,s)+i+"&"+a.substring(s+1)):u!==-1?(a=e.path,e.path=a.substring(0,u)+i+a.substring(u)):e.path=e.path+i}function y(t,e){if(e=e||t.protocol,!e&&t.port&&(80===t.port?e="http:":443===t.port&&(e="https:")),e=e||"https:",!t.hostname)return null;var n=e+"//"+t.hostname;return t.port&&(n=n+":"+t.port),t.path&&(n+=t.path),n}function b(t,e){var n,r;try{n=R.stringify(t)}catch(o){if(e&&a(e))try{n=e(t)}catch(t){r=t}else r=o}return{error:r,value:n}}function w(t){var e,n;try{e=R.parse(t)}catch(t){n=t}return{error:n,value:e}}function _(t,e,n,r,o,i,a,s){var u={url:e||"",line:n,column:r};u.func=s.guessFunctionName(u.url,u.line),u.context=s.gatherContext(u.url,u.line);var c=document&&document.location&&document.location.href,l=window&&window.navigator&&window.navigator.userAgent;return{mode:i,message:o?String(o):t||a,url:c,stack:[u],useragent:l}}function x(t,e){return function(n,r){try{e(n,r)}catch(e){t.error(e)}}}function k(t,e,n,r,o){for(var a,s,u,c,l,p,f=[],h=0,m=t.length;h0&&(u=j(!0,{},u),u.extraArgs=f);var b={message:a,err:s,custom:u,timestamp:N(),callback:c,uuid:d()};return u&&void 0!==u.level&&(b.level=u.level,delete u.level),r&&l&&(b.request=l),o&&(b.lambdaContext=o),b._originalArgs=t,b}function E(t,e){if(t){var n=e.split("."),r=t;try{for(var o=0,i=n.length;o500&&(r=r.substr(0,500)+"...")):"undefined"==typeof r&&(r="undefined"),o.push(r);return o.join(" ")}function N(){return Date.now?+Date.now():+new Date}function C(t,e){if(t&&t.user_ip&&e!==!0){var n=t.user_ip;if(e)try{var r;if(n.indexOf(".")!==-1)r=n.split("."),r.pop(),r.push("0"),n=r.join(".");else if(n.indexOf(":")!==-1){if(r=n.split(":"),r.length>2){var o=r.slice(0,3),i=o[2].indexOf("/");i!==-1&&(o[2]=o[2].substring(0,i));var a="0000:0000:0000:0000:0000";n=o.concat(a).join(":")}}else n=null}catch(t){n=null}else n=null;t.user_ip=n}}var j=n(7),R={},A=!1;r();var q={debug:0,info:1,warning:2,error:3,critical:4},P={strictMode:!1,key:["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],q:{name:"queryKey",parser:/(?:^|&)([^&=]*)=?([^&]*)/g},parser:{strict:/^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,loose:/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/}};t.exports={isType:o,typeName:i,isFunction:a,isNativeFunction:s,isIterable:l,isError:p,extend:j,traverse:f,redact:h,uuid4:d,LEVELS:q,sanitizeUrl:m,addParamsAndAccessTokenToPath:v,formatUrl:y,stringify:b,jsonParse:w,makeUnhandledStackInfo:_,createItem:k,get:E,set:I,scrub:T,formatArgsAsString:L,now:N,filterIp:C}},function(t,e){"use strict";var n=Object.prototype.hasOwnProperty,r=Object.prototype.toString,o=function(t){return"function"==typeof Array.isArray?Array.isArray(t):"[object Array]"===r.call(t)},i=function(t){if(!t||"[object Object]"!==r.call(t))return!1;var e=n.call(t,"constructor"),o=t.constructor&&t.constructor.prototype&&n.call(t.constructor.prototype,"isPrototypeOf");if(t.constructor&&!e&&!o)return!1;var i;for(i in t);return"undefined"==typeof i||n.call(t,i)};t.exports=function t(){var e,n,r,a,s,u,c=arguments[0],l=1,p=arguments.length,f=!1;for("boolean"==typeof c?(f=c,c=arguments[1]||{},l=2):("object"!=typeof c&&"function"!=typeof c||null==c)&&(c={});lr&&(o=this.maxQueueSize-r),this.maxQueueSize=r,this.queue.splice(0,o)},r.prototype.copyEvents=function(){return Array.prototype.slice.call(this.queue,0)},r.prototype.capture=function(t,e,n,r,a){var s={level:o(t,n),type:t,timestamp_ms:a||i.now(),body:e,source:"client"};r&&(s.uuid=r);try{if(i.isFunction(this.options.filterTelemetry)&&this.options.filterTelemetry(s))return!1}catch(t){this.options.filterTelemetry=null}return this.push(s),s},r.prototype.captureEvent=function(t,e,n){return this.capture("manual",t,e,n)},r.prototype.captureError=function(t,e,n,r){var o={message:t.message||String(t)};return t.stack&&(o.stack=t.stack),this.capture("error",o,e,n,r)},r.prototype.captureLog=function(t,e,n,r){return this.capture("log",{message:t},e,n,r)},r.prototype.captureNetwork=function(t,e,n,r){e=e||"xhr",t.subtype=t.subtype||e,r&&(t.request=r);var o=this.levelFromStatus(t.status_code);return this.capture("network",t,o,n)},r.prototype.levelFromStatus=function(t){return t>=200&&t<400?"info":0===t||t>=400?"error":"info"},r.prototype.captureDom=function(t,e,n,r,o){var i={subtype:t,element:e};return void 0!==n&&(i.value=n),void 0!==r&&(i.checked=r),this.capture("dom",i,"info",o)},r.prototype.captureNavigation=function(t,e,n){return this.capture("navigation",{from:t,to:e},"info",n)},r.prototype.captureDomContentLoaded=function(t){return this.capture("navigation",{subtype:"DOMContentLoaded"},"info",void 0,t&&t.getTime())},r.prototype.captureLoad=function(t){return this.capture("navigation",{subtype:"load"},"info",void 0,t&&t.getTime())},r.prototype.captureConnectivityChange=function(t,e){return this.captureNetwork({change:t},"connectivity",e)},r.prototype._captureRollbarItem=function(t){if(this.options.includeItemsInTelemetry)return t.err?this.captureError(t.err,t.level,t.uuid,t.timestamp):t.message?this.captureLog(t.message,t.level,t.uuid,t.timestamp):t.custom?this.capture("log",t.custom,t.level,t.uuid,t.timestamp):void 0},r.prototype.push=function(t){this.queue.push(t),this.queue.length>this.maxQueueSize&&this.queue.shift()},t.exports=r},function(t,e,n){"use strict";function r(t,e,n,r){this.options=t,this.transport=e,this.url=n,this.jsonBackup=r,this.accessToken=t.accessToken,this.transportOptions=o(t,n)}function o(t,e){return a.getTransportFromOptions(t,s,e)}var i=n(6),a=n(12),s={hostname:"api.rollbar.com",path:"/api/1/item/",search:null,version:"1",protocol:"https:",port:443};r.prototype.postItem=function(t,e){var n=a.transportOptions(this.transportOptions,"POST"),r=a.buildPayload(this.accessToken,t,this.jsonBackup);this.transport.post(this.accessToken,n,r,e)},r.prototype.configure=function(t){var e=this.oldOptions;return this.options=i.extend(!0,{},e,t),this.transportOptions=o(this.options,this.url),void 0!==this.options.accessToken&&(this.accessToken=this.options.accessToken),this},t.exports=r},function(t,e,n){"use strict";function r(t,e,n){if(!s.isType(e.context,"string")){var r=s.stringify(e.context,n);r.error?e.context="Error: could not serialize 'context'":e.context=r.value||"",e.context.length>255&&(e.context=e.context.substr(0,255))}return{access_token:t,data:e}}function o(t,e,n){var r=e.hostname,o=e.protocol,i=e.port,a=e.path,s=e.search,u=t.proxy;if(t.endpoint){var c=n.parse(t.endpoint);r=c.hostname,o=c.protocol,i=c.port,a=c.pathname,s=c.search}return{hostname:r,protocol:o,port:i,path:a,search:s,proxy:u}}function i(t,e){var n=t.protocol||"https:",r=t.port||("http:"===n?80:"https:"===n?443:void 0),o=t.hostname,i=t.path;return t.search&&(i+=t.search),t.proxy&&(i=n+"//"+o+i,o=t.proxy.host||t.proxy.hostname,r=t.proxy.port,n=t.proxy.protocol||n),{protocol:n,hostname:o,path:i,port:r,method:e}}function a(t,e){var n=/\/$/.test(t),r=/^\//.test(e);return n&&r?e=e.substring(1):n||r||(e="/"+e),t+e}var s=n(6);t.exports={buildPayload:r,getTransportFromOptions:o,transportOptions:i,appendPathToPath:a}},function(t,e,n){"use strict";function r(){var t=Array.prototype.slice.call(arguments,0);t.unshift("Rollbar:"),a.ieVersion()<=8?console.error(s.formatArgsAsString(t)):console.error.apply(console,t)}function o(){var t=Array.prototype.slice.call(arguments,0);t.unshift("Rollbar:"),a.ieVersion()<=8?console.info(s.formatArgsAsString(t)):console.info.apply(console,t)}function i(){var t=Array.prototype.slice.call(arguments,0);t.unshift("Rollbar:"),a.ieVersion()<=8?console.log(s.formatArgsAsString(t)):console.log.apply(console,t)}n(14);var a=n(15),s=n(6);t.exports={error:r,info:o,log:i}},function(t,e){!function(t){"use strict";t.console||(t.console={});for(var e,n,r=t.console,o=function(){},i=["memory"],a="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(",");e=i.pop();)r[e]||(r[e]={});for(;n=a.pop();)r[n]||(r[n]=o)}("undefined"==typeof window?this:window)},function(t,e){"use strict";function n(){var t;if(!document)return t;for(var e=3,n=document.createElement("div"),r=n.getElementsByTagName("i");n.innerHTML="",r[0];);return e>4?e:t}var r={ieVersion:n};t.exports=r},function(t,e){"use strict";function n(t,e,n){if(t){var o;"function"==typeof e._rollbarOldOnError?o=e._rollbarOldOnError:t.onerror&&!t.onerror.belongsToShim&&(o=t.onerror, +e._rollbarOldOnError=o);var i=function(){var n=Array.prototype.slice.call(arguments,0);r(t,e,o,n)};i.belongsToShim=n,t.onerror=i}}function r(t,e,n,r){t._rollbarWrappedError&&(r[4]||(r[4]=t._rollbarWrappedError),r[5]||(r[5]=t._rollbarWrappedError._rollbarContext),t._rollbarWrappedError=null),e.handleUncaughtException.apply(e,r),n&&n.apply(t,r)}function o(t,e,n){if(t){"function"==typeof t._rollbarURH&&t._rollbarURH.belongsToShim&&t.removeEventListener("unhandledrejection",t._rollbarURH);var r=function(t){var n,r,o;try{n=t.reason}catch(t){n=void 0}try{r=t.promise}catch(t){r="[unhandledrejection] error getting `promise` from event"}try{o=t.detail,!n&&o&&(n=o.reason,r=o.promise)}catch(t){o="[unhandledrejection] error getting `detail` from event"}n||(n="[unhandledrejection] error getting `reason` from event"),e&&e.handleUnhandledRejection&&e.handleUnhandledRejection(n,r)};r.belongsToShim=n,t._rollbarURH=r,t.addEventListener("unhandledrejection",r)}}function i(t,e,n){if(t){var r,o,i="EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload".split(",");for(r=0;r=400&&t.status<600}function c(t,e){var n=new Error(t);return n.code=e||"ENOTFOUND",n}var l=n(6),p=n(13);t.exports={get:r,post:o}},function(t,e){"use strict";function n(t){var e,n,r={protocol:null,auth:null,host:null,path:null,hash:null,href:t,hostname:null,port:null,pathname:null,search:null,query:null};if(e=t.indexOf("//"),e!==-1?(r.protocol=t.substring(0,e),n=e+2):n=0,e=t.indexOf("@",n),e!==-1&&(r.auth=t.substring(n,e),n=e+1),e=t.indexOf("/",n),e===-1){if(e=t.indexOf("?",n),e===-1)return e=t.indexOf("#",n),e===-1?r.host=t.substring(n):(r.host=t.substring(n,e),r.hash=t.substring(e)),r.hostname=r.host.split(":")[0],r.port=r.host.split(":")[1],r.port&&(r.port=parseInt(r.port,10)),r;r.host=t.substring(n,e),r.hostname=r.host.split(":")[0],r.port=r.host.split(":")[1],r.port&&(r.port=parseInt(r.port,10)),n=e}else r.host=t.substring(n,e),r.hostname=r.host.split(":")[0],r.port=r.host.split(":")[1],r.port&&(r.port=parseInt(r.port,10)),n=e;if(e=t.indexOf("#",n),e===-1?r.path=t.substring(n):(r.path=t.substring(n,e),r.hash=t.substring(e)),r.path){var o=r.path.split("?");r.pathname=o[0],r.query=o[1],r.search=r.query?"?"+r.query:null}return r}t.exports={parse:n}},function(t,e,n){"use strict";function r(t,e,n){if(t.data=t.data||{},t.err)try{t.stackInfo=t.err._savedStackTrace||d.parse(t.err)}catch(e){m.error("Error while parsing the error object.",e),t.message=t.err.message||t.err.description||t.message||String(t.err),delete t.err}n(null,t)}function o(t,e,n){t.message||t.stackInfo||t.custom||n(new Error("No message, stack info, or custom data"),null),n(null,t)}function i(t,e,n){var r=e.payload&&e.payload.environment||e.environment;t.data=h.extend(!0,{},t.data,{environment:r,level:t.level,endpoint:e.endpoint,platform:"browser",framework:"browser-js",language:"javascript",server:{},uuid:t.uuid,notifier:{name:"rollbar-browser-js",version:e.version}}),n(null,t)}function a(t){return function(e,n,r){if(!t||!t.location)return r(null,e);var o="$remote_ip";n.captureIp?n.captureIp!==!0&&(o+="_anonymize"):o=null,h.set(e,"data.request",{url:t.location.href,query_string:t.location.search,user_ip:o}),r(null,e)}}function s(t){return function(e,n,r){if(!t)return r(null,e);var o=t.navigator||{},i=t.screen||{};h.set(e,"data.client",{runtime_ms:e.timestamp-t._rollbarStartTime,timestamp:Math.round(e.timestamp/1e3),javascript:{browser:o.userAgent,language:o.language,cookie_enabled:o.cookieEnabled,screen:{width:i.width,height:i.height}}}),r(null,e)}}function u(t){return function(e,n,r){if(!t||!t.navigator)return r(null,e);for(var o,i=[],a=t.navigator.plugins||[],s=0,u=a.length;s-1&&(e=e.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var n=e.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),r=this.extractLocation(n.pop()),o=n.join(" ")||void 0,i="eval"===r[0]?void 0:r[0];return new t(o,void 0,i,r[1],r[2],e)},this)},parseFFOrSafari:function(r){var o=n(r.stack.split("\n"),function(t){return!t.match(i)},this);return e(o,function(e){if(e.indexOf(" > eval")>-1&&(e=e.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),e.indexOf("@")===-1&&e.indexOf(":")===-1)return new t(e);var n=e.split("@"),r=this.extractLocation(n.pop()),o=n.shift()||void 0;return new t(o,void 0,r[0],r[1],r[2],e)},this)},parseOpera:function(t){return!t.stacktrace||t.message.indexOf("\n")>-1&&t.message.split("\n").length>t.stacktrace.split("\n").length?this.parseOpera9(t):t.stack?this.parseOpera11(t):this.parseOpera10(t)},parseOpera9:function(e){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=e.message.split("\n"),o=[],i=2,a=r.length;i/,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(n=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new t(a,s,o[0],o[1],o[2],e)},this)}}})},function(t,e,n){var r,o,i;!function(n,a){"use strict";o=[],r=a,i="function"==typeof r?r.apply(e,o):r,!(void 0!==i&&(t.exports=i))}(this,function(){"use strict";function t(t){return!isNaN(parseFloat(t))&&isFinite(t)}function e(t,e,n,r,o,i){void 0!==t&&this.setFunctionName(t),void 0!==e&&this.setArgs(e),void 0!==n&&this.setFileName(n),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return e.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(t){this.functionName=String(t)},getArgs:function(){return this.args},setArgs:function(t){if("[object Array]"!==Object.prototype.toString.call(t))throw new TypeError("Args must be an Array");this.args=t},getFileName:function(){return this.fileName},setFileName:function(t){this.fileName=String(t)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(e){if(!t(e))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(e)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(e){if(!t(e))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(e)},getSource:function(){return this.source},setSource:function(t){this.source=String(t)},toString:function(){var e=this.getFunctionName()||"{anonymous}",n="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=t(this.getLineNumber())?":"+this.getLineNumber():"",i=t(this.getColumnNumber())?":"+this.getColumnNumber():"";return e+n+r+o+i}},e})},function(t,e,n){"use strict";function r(t,e,n){var r=e.payload||{};r.body&&delete r.body;var o=u.extend(!0,{},t.data,r);t._isUncaught&&(o._isUncaught=!0),t._originalArgs&&(o._originalArgs=t._originalArgs),n(null,o)}function o(t,e,n){t.telemetryEvents&&u.set(t,"data.body.telemetry",t.telemetryEvents),n(null,t)}function i(t,e,n){if(!t.message)return void n(null,t);var r="data.body.trace_chain.0",o=u.get(t,r);if(o||(r="data.body.trace",o=u.get(t,r)),o){if(!o.exception||!o.exception.description)return u.set(t,r+".exception.description",t.message),void n(null,t);var i=u.get(t,r+".extra")||{},a=u.extend(!0,{},i,{message:t.message});u.set(t,r+".extra",a)}n(null,t)}function a(t){return function(e,n,r){var o=u.extend(!0,{},e);try{u.isFunction(n.transform)&&n.transform(o.data)}catch(o){return n.transform=null,t.error("Error while calling custom transform() function. Removing custom transform().",o),void r(null,e)}r(null,o)}}function s(t,e,n){if(!e.sendConfig)return n(null,t);var r="_rollbarConfig",o=u.get(t,"data.custom")||{};o[r]=e,t.data.custom=o,n(null,t)}var u=n(6);t.exports={itemToPayload:r,addTelemetryData:o,addMessageWithError:i,userTransform:a,addConfigToPayload:s}},function(t,e,n){"use strict";function r(t,e){return!o.get(e,"plugins.jquery.ignoreAjaxErrors")||!o.get(t,"body.message.extra.isAjax")}var o=n(6);t.exports={checkIgnore:r}},function(t,e,n){"use strict";function r(t,e){var n=t.level,r=c.LEVELS[n]||0,o=e.reportLevel,i=c.LEVELS[o]||0;return!(r=0&&t.options[t.selectedIndex]&&this.captureDomEvent("input",t,t.options[t.selectedIndex].value)},i.prototype.captureDomEvent=function(t,e,n,r){if(void 0!==n)if(this.scrubTelemetryInputs||"password"===u.getElementType(e))n="[scrubbed]";else if(this.telemetryScrubber){var o=u.describeElement(e);this.telemetryScrubber(o)&&(n="[scrubbed]")}var i=u.elementArrayToString(u.treeToArray(e));this.telemeter.captureDom(t,i,n,r)},i.prototype.deinstrumentNavigation=function(){var t=this._window.chrome,e=t&&t.app&&t.app.runtime,n=!e&&this._window.history&&this._window.history.pushState;n&&o(this.replacements,"navigation")},i.prototype.instrumentNavigation=function(){var t=this._window.chrome,e=t&&t.app&&t.app.runtime,n=!e&&this._window.history&&this._window.history.pushState;if(n){var o=this;r(this._window,"onpopstate",function(t){return function(){var e=o._location.href;o.handleUrlChange(o._lastHref,e),t&&t.apply(this,arguments)}},this.replacements,"navigation"),r(this._window.history,"pushState",function(t){return function(){var e=arguments.length>2?arguments[2]:void 0;return e&&o.handleUrlChange(o._lastHref,e+""),t.apply(this,arguments)}},this.replacements,"navigation")}},i.prototype.handleUrlChange=function(t,e){var n=s.parse(this._location.href),r=s.parse(e),o=s.parse(t);this._lastHref=e,n.protocol===r.protocol&&n.host===r.host&&(e=r.path+(r.hash||"")),n.protocol===o.protocol&&n.host===o.host&&(t=o.path+(o.hash||"")),this.telemeter.captureNavigation(t,e)},i.prototype.deinstrumentConnectivity=function(){("addEventListener"in this._window||"body"in this._document)&&(this._window.addEventListener?this.removeListeners("connectivity"):o(this.replacements,"connectivity"))},i.prototype.instrumentConnectivity=function(){if("addEventListener"in this._window||"body"in this._document)if(this._window.addEventListener)this.addListener("connectivity",this._window,"online",void 0,function(){this.telemeter.captureConnectivityChange("online")}.bind(this),!0),this.addListener("connectivity",this._window,"offline",void 0,function(){this.telemeter.captureConnectivityChange("offline")}.bind(this),!0);else{var t=this;r(this._document.body,"ononline",function(e){return function(){t.telemeter.captureConnectivityChange("online"),e&&e.apply(this,arguments)}},this.replacements,"connectivity"),r(this._document.body,"onoffline",function(e){return function(){t.telemeter.captureConnectivityChange("offline"),e&&e.apply(this,arguments)}},this.replacements,"connectivity")}},i.prototype.addListener=function(t,e,n,r,o,i){e.addEventListener?(e.addEventListener(n,o,i),this.eventRemovers[t].push(function(){e.removeEventListener(n,o,i)})):r&&(e.attachEvent(r,o),this.eventRemovers[t].push(function(){e.detachEvent(r,o)}))},i.prototype.removeListeners=function(t){for(var e;this.eventRemovers[t].length;)(e=this.eventRemovers[t].shift())()},t.exports=i},function(t,e){"use strict";function n(t){return(t.getAttribute("type")||"").toLowerCase()}function r(t,e,r){if(t.tagName.toLowerCase()!==e.toLowerCase())return!1;if(!r)return!0;t=n(t);for(var o=0;o ",i=o.length,a=[],u=0,c=t.length-1;c>=0;c--){if(e=s(t[c]),n=u+a.length*i+e.length,c=r+3){a.unshift("...");break}a.unshift(e),u+=e.length}return a.join(o)}function s(t){if(!t||!t.tagName)return"";var e=[t.tagName];t.id&&e.push("#"+t.id),t.classes&&e.push("."+t.classes.join("."));for(var n=0;n= 60000) {\n\t this.startTime = now;\n\t this.perMinCounter = 0;\n\t }\n\t\n\t var globalRateLimit = RateLimiter.globalSettings.maxItems;\n\t var globalRateLimitPerMin = RateLimiter.globalSettings.itemsPerMinute;\n\t\n\t if (checkRate(item, globalRateLimit, this.counter)) {\n\t return shouldSendValue(this.platform, this.platformOptions, globalRateLimit + ' max items reached', false);\n\t } else if (checkRate(item, globalRateLimitPerMin, this.perMinCounter)) {\n\t return shouldSendValue(this.platform, this.platformOptions, globalRateLimitPerMin + ' items per minute reached', false);\n\t }\n\t this.counter++;\n\t this.perMinCounter++;\n\t\n\t var shouldSend = !checkRate(item, globalRateLimit, this.counter);\n\t var perMinute = shouldSend;\n\t shouldSend = shouldSend && !checkRate(item, globalRateLimitPerMin, this.perMinCounter);\n\t return shouldSendValue(this.platform, this.platformOptions, null, shouldSend, globalRateLimit, globalRateLimitPerMin, perMinute);\n\t};\n\t\n\tRateLimiter.prototype.setPlatformOptions = function(platform, options) {\n\t this.platform = platform;\n\t this.platformOptions = options;\n\t};\n\t\n\t/* Helpers */\n\t\n\tfunction checkRate(item, limit, counter) {\n\t return !item.ignoreRateLimit && limit >= 1 && counter > limit;\n\t}\n\t\n\tfunction shouldSendValue(platform, options, error, shouldSend, globalRateLimit, limitPerMin, perMinute) {\n\t var payload = null;\n\t if (error) {\n\t error = new Error(error);\n\t }\n\t if (!error && !shouldSend) {\n\t payload = rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute);\n\t }\n\t return {error: error, shouldSend: shouldSend, payload: payload};\n\t}\n\t\n\tfunction rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute) {\n\t var environment = options.environment || (options.payload && options.payload.environment);\n\t var msg;\n\t if (perMinute) {\n\t msg = 'item per minute limit reached, ignoring errors until timeout';\n\t } else {\n\t msg = 'maxItems has been hit, ignoring errors until reset.';\n\t }\n\t var item = {\n\t body: {\n\t message: {\n\t body: msg,\n\t extra: {\n\t maxItems: globalRateLimit,\n\t itemsPerMinute: limitPerMin\n\t }\n\t }\n\t },\n\t language: 'javascript',\n\t environment: environment,\n\t notifier: {\n\t version: (options.notifier && options.notifier.version) || options.version\n\t }\n\t };\n\t if (platform === 'browser') {\n\t item.platform = 'browser';\n\t item.framework = 'browser-js';\n\t item.notifier.name = 'rollbar-browser-js';\n\t } else if (platform === 'server') {\n\t item.framework = options.framework || 'node-js';\n\t item.notifier.name = options.notifier.name;\n\t } else if (platform === 'react-native') {\n\t item.framework = options.framework || 'react-native';\n\t item.notifier.name = options.notifier.name;\n\t }\n\t return item;\n\t}\n\t\n\tmodule.exports = RateLimiter;\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\t\n\t/*\n\t * Queue - an object which handles which handles a queue of items to be sent to Rollbar.\n\t * This object handles rate limiting via a passed in rate limiter, retries based on connection\n\t * errors, and filtering of items based on a set of configurable predicates. The communication to\n\t * the backend is performed via a given API object.\n\t *\n\t * @param rateLimiter - An object which conforms to the interface\n\t * rateLimiter.shouldSend(item) -> bool\n\t * @param api - An object which conforms to the interface\n\t * api.postItem(payload, function(err, response))\n\t * @param logger - An object used to log verbose messages if desired\n\t * @param options - see Queue.prototype.configure\n\t */\n\tfunction Queue(rateLimiter, api, logger, options) {\n\t this.rateLimiter = rateLimiter;\n\t this.api = api;\n\t this.logger = logger;\n\t this.options = options;\n\t this.predicates = [];\n\t this.pendingItems = [];\n\t this.pendingRequests = [];\n\t this.retryQueue = [];\n\t this.retryHandle = null;\n\t this.waitCallback = null;\n\t this.waitIntervalID = null;\n\t}\n\t\n\t/*\n\t * configure - updates the options this queue uses\n\t *\n\t * @param options\n\t */\n\tQueue.prototype.configure = function(options) {\n\t this.api && this.api.configure(options);\n\t var oldOptions = this.options;\n\t this.options = _.extend(true, {}, oldOptions, options);\n\t return this;\n\t};\n\t\n\t/*\n\t * addPredicate - adds a predicate to the end of the list of predicates for this queue\n\t *\n\t * @param predicate - function(item, options) -> (bool|{err: Error})\n\t * Returning true means that this predicate passes and the item is okay to go on the queue\n\t * Returning false means do not add the item to the queue, but it is not an error\n\t * Returning {err: Error} means do not add the item to the queue, and the given error explains why\n\t * Returning {err: undefined} is equivalent to returning true but don't do that\n\t */\n\tQueue.prototype.addPredicate = function(predicate) {\n\t if (_.isFunction(predicate)) {\n\t this.predicates.push(predicate);\n\t }\n\t return this;\n\t};\n\t\n\tQueue.prototype.addPendingItem = function(item) {\n\t this.pendingItems.push(item);\n\t};\n\t\n\tQueue.prototype.removePendingItem = function(item) {\n\t var idx = this.pendingItems.indexOf(item);\n\t if (idx !== -1) {\n\t this.pendingItems.splice(idx, 1);\n\t }\n\t};\n\t\n\t/*\n\t * addItem - Send an item to the Rollbar API if all of the predicates are satisfied\n\t *\n\t * @param item - The payload to send to the backend\n\t * @param callback - function(error, repsonse) which will be called with the response from the API\n\t * in the case of a success, otherwise response will be null and error will have a value. If both\n\t * error and response are null then the item was stopped by a predicate which did not consider this\n\t * to be an error condition, but nonetheless did not send the item to the API.\n\t * @param originalError - The original error before any transformations that is to be logged if any\n\t */\n\tQueue.prototype.addItem = function(item, callback, originalError, originalItem) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() { return; };\n\t }\n\t var predicateResult = this._applyPredicates(item);\n\t if (predicateResult.stop) {\n\t this.removePendingItem(originalItem);\n\t callback(predicateResult.err);\n\t return;\n\t }\n\t this._maybeLog(item, originalError);\n\t this.removePendingItem(originalItem);\n\t this.pendingRequests.push(item);\n\t try {\n\t this._makeApiRequest(item, function(err, resp) {\n\t this._dequeuePendingRequest(item);\n\t callback(err, resp);\n\t }.bind(this));\n\t } catch (e) {\n\t this._dequeuePendingRequest(item);\n\t callback(e);\n\t }\n\t};\n\t\n\t/*\n\t * wait - Stop any further errors from being added to the queue, and get called back when all items\n\t * currently processing have finished sending to the backend.\n\t *\n\t * @param callback - function() called when all pending items have been sent\n\t */\n\tQueue.prototype.wait = function(callback) {\n\t if (!_.isFunction(callback)) {\n\t return;\n\t }\n\t this.waitCallback = callback;\n\t if (this._maybeCallWait()) {\n\t return;\n\t }\n\t if (this.waitIntervalID) {\n\t this.waitIntervalID = clearInterval(this.waitIntervalID);\n\t }\n\t this.waitIntervalID = setInterval(function() {\n\t this._maybeCallWait();\n\t }.bind(this), 500);\n\t};\n\t\n\t/* _applyPredicates - Sequentially applies the predicates that have been added to the queue to the\n\t * given item with the currently configured options.\n\t *\n\t * @param item - An item in the queue\n\t * @returns {stop: bool, err: (Error|null)} - stop being true means do not add item to the queue,\n\t * the error value should be passed up to a callbak if we are stopping.\n\t */\n\tQueue.prototype._applyPredicates = function(item) {\n\t var p = null;\n\t for (var i = 0, len = this.predicates.length; i < len; i++) {\n\t p = this.predicates[i](item, this.options);\n\t if (!p || p.err !== undefined) {\n\t return {stop: true, err: p.err};\n\t }\n\t }\n\t return {stop: false, err: null};\n\t};\n\t\n\t/*\n\t * _makeApiRequest - Send an item to Rollbar, callback when done, if there is an error make an\n\t * effort to retry if we are configured to do so.\n\t *\n\t * @param item - an item ready to send to the backend\n\t * @param callback - function(err, response)\n\t */\n\tQueue.prototype._makeApiRequest = function(item, callback) {\n\t var rateLimitResponse = this.rateLimiter.shouldSend(item);\n\t if (rateLimitResponse.shouldSend) {\n\t this.api.postItem(item, function(err, resp) {\n\t if (err) {\n\t this._maybeRetry(err, item, callback);\n\t } else {\n\t callback(err, resp);\n\t }\n\t }.bind(this));\n\t } else if (rateLimitResponse.error) {\n\t callback(rateLimitResponse.error);\n\t } else {\n\t this.api.postItem(rateLimitResponse.payload, callback);\n\t }\n\t};\n\t\n\t// These are errors basically mean there is no internet connection\n\tvar RETRIABLE_ERRORS = ['ECONNRESET', 'ENOTFOUND', 'ESOCKETTIMEDOUT', 'ETIMEDOUT', 'ECONNREFUSED', 'EHOSTUNREACH', 'EPIPE', 'EAI_AGAIN'];\n\t\n\t/*\n\t * _maybeRetry - Given the error returned by the API, decide if we should retry or just callback\n\t * with the error.\n\t *\n\t * @param err - an error returned by the API transport\n\t * @param item - the item that was trying to be sent when this error occured\n\t * @param callback - function(err, response)\n\t */\n\tQueue.prototype._maybeRetry = function(err, item, callback) {\n\t var shouldRetry = false;\n\t if (this.options.retryInterval) {\n\t for (var i = 0, len = RETRIABLE_ERRORS.length; i < len; i++) {\n\t if (err.code === RETRIABLE_ERRORS[i]) {\n\t shouldRetry = true;\n\t break;\n\t }\n\t }\n\t }\n\t if (shouldRetry) {\n\t this._retryApiRequest(item, callback);\n\t } else {\n\t callback(err);\n\t }\n\t};\n\t\n\t/*\n\t * _retryApiRequest - Add an item and a callback to a queue and possibly start a timer to process\n\t * that queue based on the retryInterval in the options for this queue.\n\t *\n\t * @param item - an item that failed to send due to an error we deem retriable\n\t * @param callback - function(err, response)\n\t */\n\tQueue.prototype._retryApiRequest = function(item, callback) {\n\t this.retryQueue.push({item: item, callback: callback});\n\t\n\t if (!this.retryHandle) {\n\t this.retryHandle = setInterval(function() {\n\t while (this.retryQueue.length) {\n\t var retryObject = this.retryQueue.shift();\n\t this._makeApiRequest(retryObject.item, retryObject.callback);\n\t }\n\t }.bind(this), this.options.retryInterval);\n\t }\n\t};\n\t\n\t/*\n\t * _dequeuePendingRequest - Removes the item from the pending request queue, this queue is used to\n\t * enable to functionality of providing a callback that clients can pass to `wait` to be notified\n\t * when the pending request queue has been emptied. This must be called when the API finishes\n\t * processing this item. If a `wait` callback is configured, it is called by this function.\n\t *\n\t * @param item - the item previously added to the pending request queue\n\t */\n\tQueue.prototype._dequeuePendingRequest = function(item) {\n\t var idx = this.pendingRequests.indexOf(item);\n\t if (idx !== -1) {\n\t this.pendingRequests.splice(idx, 1);\n\t this._maybeCallWait();\n\t }\n\t};\n\t\n\tQueue.prototype._maybeLog = function(data, originalError) {\n\t if (this.logger && this.options.verbose) {\n\t var message = originalError;\n\t message = message || _.get(data, 'body.trace.exception.message');\n\t message = message || _.get(data, 'body.trace_chain.0.exception.message');\n\t if (message) {\n\t this.logger.error(message);\n\t return;\n\t }\n\t message = _.get(data, 'body.message.body');\n\t if (message) {\n\t this.logger.log(message);\n\t }\n\t }\n\t};\n\t\n\tQueue.prototype._maybeCallWait = function() {\n\t if (_.isFunction(this.waitCallback) && this.pendingItems.length === 0 && this.pendingRequests.length === 0) {\n\t if (this.waitIntervalID) {\n\t this.waitIntervalID = clearInterval(this.waitIntervalID);\n\t }\n\t this.waitCallback();\n\t return true;\n\t }\n\t return false;\n\t};\n\t\n\tmodule.exports = Queue;\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar extend = __webpack_require__(7);\n\t\n\tvar RollbarJSON = {};\n\tvar __initRollbarJSON = false;\n\tfunction setupJSON() {\n\t if (__initRollbarJSON) {\n\t return;\n\t }\n\t __initRollbarJSON = true;\n\t\n\t if (isDefined(JSON)) {\n\t if (isNativeFunction(JSON.stringify)) {\n\t RollbarJSON.stringify = JSON.stringify;\n\t }\n\t if (isNativeFunction(JSON.parse)) {\n\t RollbarJSON.parse = JSON.parse;\n\t }\n\t }\n\t if (!isFunction(RollbarJSON.stringify) || !isFunction(RollbarJSON.parse)) {\n\t var setupCustomJSON = __webpack_require__(8);\n\t setupCustomJSON(RollbarJSON);\n\t }\n\t}\n\tsetupJSON();\n\t\n\t/*\n\t * isType - Given a Javascript value and a string, returns true if the type of the value matches the\n\t * given string.\n\t *\n\t * @param x - any value\n\t * @param t - a lowercase string containing one of the following type names:\n\t * - undefined\n\t * - null\n\t * - error\n\t * - number\n\t * - boolean\n\t * - string\n\t * - symbol\n\t * - function\n\t * - object\n\t * - array\n\t * @returns true if x is of type t, otherwise false\n\t */\n\tfunction isType(x, t) {\n\t return t === typeName(x);\n\t}\n\t\n\t/*\n\t * typeName - Given a Javascript value, returns the type of the object as a string\n\t */\n\tfunction typeName(x) {\n\t var name = typeof x;\n\t if (name !== 'object') {\n\t return name;\n\t }\n\t if (!x) {\n\t return 'null';\n\t }\n\t if (x instanceof Error) {\n\t return 'error';\n\t }\n\t return ({}).toString.call(x).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n\t}\n\t\n\t/* isFunction - a convenience function for checking if a value is a function\n\t *\n\t * @param f - any value\n\t * @returns true if f is a function, otherwise false\n\t */\n\tfunction isFunction(f) {\n\t return isType(f, 'function');\n\t}\n\t\n\t/* isNativeFunction - a convenience function for checking if a value is a native JS function\n\t *\n\t * @param f - any value\n\t * @returns true if f is a native JS function, otherwise false\n\t */\n\tfunction isNativeFunction(f) {\n\t var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\t var funcMatchString = Function.prototype.toString.call(Object.prototype.hasOwnProperty)\n\t .replace(reRegExpChar, '\\\\$&')\n\t .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?');\n\t var reIsNative = RegExp('^' + funcMatchString + '$');\n\t return isObject(f) && reIsNative.test(f);\n\t}\n\t\n\t/* isObject - Checks if the argument is an object\n\t *\n\t * @param value - any value\n\t * @returns true is value is an object function is an object)\n\t*/\n\tfunction isObject(value) {\n\t var type = typeof value;\n\t return value != null && (type == 'object' || type == 'function');\n\t}\n\t\n\t/*\n\t * isDefined - a convenience function for checking if a value is not equal to undefined\n\t *\n\t * @param u - any value\n\t * @returns true if u is anything other than undefined\n\t */\n\tfunction isDefined(u) {\n\t return !isType(u, 'undefined');\n\t}\n\t\n\t/*\n\t * isIterable - convenience function for checking if a value can be iterated, essentially\n\t * whether it is an object or an array.\n\t *\n\t * @param i - any value\n\t * @returns true if i is an object or an array as determined by `typeName`\n\t */\n\tfunction isIterable(i) {\n\t var type = typeName(i);\n\t return (type === 'object' || type === 'array');\n\t}\n\t\n\t/*\n\t * isError - convenience function for checking if a value is of an error type\n\t *\n\t * @param e - any value\n\t * @returns true if e is an error\n\t */\n\tfunction isError(e) {\n\t return isType(e, 'error');\n\t}\n\t\n\tfunction traverse(obj, func, seen) {\n\t var k, v, i;\n\t var isObj = isType(obj, 'object');\n\t var isArray = isType(obj, 'array');\n\t var keys = [];\n\t\n\t if (isObj && seen.indexOf(obj) !== -1) {\n\t return obj;\n\t }\n\t seen.push(obj);\n\t\n\t if (isObj) {\n\t for (k in obj) {\n\t if (Object.prototype.hasOwnProperty.call(obj, k)) {\n\t keys.push(k);\n\t }\n\t }\n\t } else if (isArray) {\n\t for (i = 0; i < obj.length; ++i) {\n\t keys.push(i);\n\t }\n\t }\n\t\n\t var result = isObj ? {} : [];\n\t for (i = 0; i < keys.length; ++i) {\n\t k = keys[i];\n\t v = obj[k];\n\t result[k] = func(k, v, seen);\n\t }\n\t\n\t return (keys.length != 0) ? result : obj;\n\t}\n\t\n\tfunction redact() {\n\t return '********';\n\t}\n\t\n\t// from http://stackoverflow.com/a/8809472/1138191\n\tfunction uuid4() {\n\t var d = now();\n\t var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n\t var r = (d + Math.random() * 16) % 16 | 0;\n\t d = Math.floor(d / 16);\n\t return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16);\n\t });\n\t return uuid;\n\t}\n\t\n\tvar LEVELS = {\n\t debug: 0,\n\t info: 1,\n\t warning: 2,\n\t error: 3,\n\t critical: 4\n\t};\n\t\n\tfunction sanitizeUrl(url) {\n\t var baseUrlParts = parseUri(url);\n\t // remove a trailing # if there is no anchor\n\t if (baseUrlParts.anchor === '') {\n\t baseUrlParts.source = baseUrlParts.source.replace('#', '');\n\t }\n\t\n\t url = baseUrlParts.source.replace('?' + baseUrlParts.query, '');\n\t return url;\n\t}\n\t\n\tvar parseUriOptions = {\n\t strictMode: false,\n\t key: [\n\t 'source',\n\t 'protocol',\n\t 'authority',\n\t 'userInfo',\n\t 'user',\n\t 'password',\n\t 'host',\n\t 'port',\n\t 'relative',\n\t 'path',\n\t 'directory',\n\t 'file',\n\t 'query',\n\t 'anchor'\n\t ],\n\t q: {\n\t name: 'queryKey',\n\t parser: /(?:^|&)([^&=]*)=?([^&]*)/g\n\t },\n\t parser: {\n\t strict: /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,\n\t loose: /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/\n\t }\n\t};\n\t\n\tfunction parseUri(str) {\n\t if (!isType(str, 'string')) {\n\t throw new Error('received invalid input');\n\t }\n\t\n\t var o = parseUriOptions;\n\t var m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str);\n\t var uri = {};\n\t var i = o.key.length;\n\t\n\t while (i--) {\n\t uri[o.key[i]] = m[i] || '';\n\t }\n\t\n\t uri[o.q.name] = {};\n\t uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {\n\t if ($1) {\n\t uri[o.q.name][$1] = $2;\n\t }\n\t });\n\t\n\t return uri;\n\t}\n\t\n\tfunction addParamsAndAccessTokenToPath(accessToken, options, params) {\n\t params = params || {};\n\t params.access_token = accessToken;\n\t var paramsArray = [];\n\t var k;\n\t for (k in params) {\n\t if (Object.prototype.hasOwnProperty.call(params, k)) {\n\t paramsArray.push([k, params[k]].join('='));\n\t }\n\t }\n\t var query = '?' + paramsArray.sort().join('&');\n\t\n\t options = options || {};\n\t options.path = options.path || '';\n\t var qs = options.path.indexOf('?');\n\t var h = options.path.indexOf('#');\n\t var p;\n\t if (qs !== -1 && (h === -1 || h > qs)) {\n\t p = options.path;\n\t options.path = p.substring(0,qs) + query + '&' + p.substring(qs+1);\n\t } else {\n\t if (h !== -1) {\n\t p = options.path;\n\t options.path = p.substring(0,h) + query + p.substring(h);\n\t } else {\n\t options.path = options.path + query;\n\t }\n\t }\n\t}\n\t\n\tfunction formatUrl(u, protocol) {\n\t protocol = protocol || u.protocol;\n\t if (!protocol && u.port) {\n\t if (u.port === 80) {\n\t protocol = 'http:';\n\t } else if (u.port === 443) {\n\t protocol = 'https:';\n\t }\n\t }\n\t protocol = protocol || 'https:';\n\t\n\t if (!u.hostname) {\n\t return null;\n\t }\n\t var result = protocol + '//' + u.hostname;\n\t if (u.port) {\n\t result = result + ':' + u.port;\n\t }\n\t if (u.path) {\n\t result = result + u.path;\n\t }\n\t return result;\n\t}\n\t\n\tfunction stringify(obj, backup) {\n\t var value, error;\n\t try {\n\t value = RollbarJSON.stringify(obj);\n\t } catch (jsonError) {\n\t if (backup && isFunction(backup)) {\n\t try {\n\t value = backup(obj);\n\t } catch (backupError) {\n\t error = backupError;\n\t }\n\t } else {\n\t error = jsonError;\n\t }\n\t }\n\t return {error: error, value: value};\n\t}\n\t\n\tfunction jsonParse(s) {\n\t var value, error;\n\t try {\n\t value = RollbarJSON.parse(s);\n\t } catch (e) {\n\t error = e;\n\t }\n\t return {error: error, value: value};\n\t}\n\t\n\tfunction makeUnhandledStackInfo(\n\t message,\n\t url,\n\t lineno,\n\t colno,\n\t error,\n\t mode,\n\t backupMessage,\n\t errorParser\n\t) {\n\t var location = {\n\t url: url || '',\n\t line: lineno,\n\t column: colno\n\t };\n\t location.func = errorParser.guessFunctionName(location.url, location.line);\n\t location.context = errorParser.gatherContext(location.url, location.line);\n\t var href = document && document.location && document.location.href;\n\t var useragent = window && window.navigator && window.navigator.userAgent;\n\t return {\n\t 'mode': mode,\n\t 'message': error ? String(error) : (message || backupMessage),\n\t 'url': href,\n\t 'stack': [location],\n\t 'useragent': useragent\n\t };\n\t}\n\t\n\tfunction wrapCallback(logger, f) {\n\t return function(err, resp) {\n\t try {\n\t f(err, resp);\n\t } catch (e) {\n\t logger.error(e);\n\t }\n\t };\n\t}\n\t\n\tfunction createItem(args, logger, notifier, requestKeys, lambdaContext) {\n\t var message, err, custom, callback, request;\n\t var arg;\n\t var extraArgs = [];\n\t\n\t for (var i = 0, l = args.length; i < l; ++i) {\n\t arg = args[i];\n\t\n\t var typ = typeName(arg);\n\t switch (typ) {\n\t case 'undefined':\n\t break;\n\t case 'string':\n\t message ? extraArgs.push(arg) : message = arg;\n\t break;\n\t case 'function':\n\t callback = wrapCallback(logger, arg);\n\t break;\n\t case 'date':\n\t extraArgs.push(arg);\n\t break;\n\t case 'error':\n\t case 'domexception':\n\t err ? extraArgs.push(arg) : err = arg;\n\t break;\n\t case 'object':\n\t case 'array':\n\t if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n\t err ? extraArgs.push(arg) : err = arg;\n\t break;\n\t }\n\t if (requestKeys && typ === 'object' && !request) {\n\t for (var j = 0, len = requestKeys.length; j < len; ++j) {\n\t if (arg[requestKeys[j]] !== undefined) {\n\t request = arg;\n\t break;\n\t }\n\t }\n\t if (request) {\n\t break;\n\t }\n\t }\n\t custom ? extraArgs.push(arg) : custom = arg;\n\t break;\n\t default:\n\t if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n\t err ? extraArgs.push(arg) : err = arg;\n\t break;\n\t }\n\t extraArgs.push(arg);\n\t }\n\t }\n\t\n\t if (extraArgs.length > 0) {\n\t // if custom is an array this turns it into an object with integer keys\n\t custom = extend(true, {}, custom);\n\t custom.extraArgs = extraArgs;\n\t }\n\t\n\t var item = {\n\t message: message,\n\t err: err,\n\t custom: custom,\n\t timestamp: now(),\n\t callback: callback,\n\t uuid: uuid4()\n\t };\n\t if (custom && custom.level !== undefined) {\n\t item.level = custom.level;\n\t delete custom.level;\n\t }\n\t if (requestKeys && request) {\n\t item.request = request;\n\t }\n\t if (lambdaContext) {\n\t item.lambdaContext = lambdaContext;\n\t }\n\t item._originalArgs = args;\n\t return item;\n\t}\n\t\n\t/*\n\t * get - given an obj/array and a keypath, return the value at that keypath or\n\t * undefined if not possible.\n\t *\n\t * @param obj - an object or array\n\t * @param path - a string of keys separated by '.' such as 'plugin.jquery.0.message'\n\t * which would correspond to 42 in `{plugin: {jquery: [{message: 42}]}}`\n\t */\n\tfunction get(obj, path) {\n\t if (!obj) {\n\t return undefined;\n\t }\n\t var keys = path.split('.');\n\t var result = obj;\n\t try {\n\t for (var i = 0, len = keys.length; i < len; ++i) {\n\t result = result[keys[i]];\n\t }\n\t } catch (e) {\n\t result = undefined;\n\t }\n\t return result;\n\t}\n\t\n\tfunction set(obj, path, value) {\n\t if (!obj) {\n\t return;\n\t }\n\t var keys = path.split('.');\n\t var len = keys.length;\n\t if (len < 1) {\n\t return;\n\t }\n\t if (len === 1) {\n\t obj[keys[0]] = value;\n\t return;\n\t }\n\t try {\n\t var temp = obj[keys[0]] || {};\n\t var replacement = temp;\n\t for (var i = 1; i < len-1; i++) {\n\t temp[keys[i]] = temp[keys[i]] || {};\n\t temp = temp[keys[i]];\n\t }\n\t temp[keys[len-1]] = value;\n\t obj[keys[0]] = replacement;\n\t } catch (e) {\n\t return;\n\t }\n\t}\n\t\n\tfunction scrub(data, scrubFields) {\n\t scrubFields = scrubFields || [];\n\t var paramRes = _getScrubFieldRegexs(scrubFields);\n\t var queryRes = _getScrubQueryParamRegexs(scrubFields);\n\t\n\t function redactQueryParam(dummy0, paramPart, dummy1, dummy2, dummy3, valPart) {\n\t return paramPart + redact(valPart);\n\t }\n\t\n\t function paramScrubber(v) {\n\t var i;\n\t if (isType(v, 'string')) {\n\t for (i = 0; i < queryRes.length; ++i) {\n\t v = v.replace(queryRes[i], redactQueryParam);\n\t }\n\t }\n\t return v;\n\t }\n\t\n\t function valScrubber(k, v) {\n\t var i;\n\t for (i = 0; i < paramRes.length; ++i) {\n\t if (paramRes[i].test(k)) {\n\t v = redact(v);\n\t break;\n\t }\n\t }\n\t return v;\n\t }\n\t\n\t function scrubber(k, v, seen) {\n\t var tmpV = valScrubber(k, v);\n\t if (tmpV === v) {\n\t if (isType(v, 'object') || isType(v, 'array')) {\n\t return traverse(v, scrubber, seen);\n\t }\n\t return paramScrubber(tmpV);\n\t } else {\n\t return tmpV;\n\t }\n\t }\n\t\n\t return traverse(data, scrubber, []);\n\t}\n\t\n\tfunction _getScrubFieldRegexs(scrubFields) {\n\t var ret = [];\n\t var pat;\n\t for (var i = 0; i < scrubFields.length; ++i) {\n\t pat = '^\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?$';\n\t ret.push(new RegExp(pat, 'i'));\n\t }\n\t return ret;\n\t}\n\t\n\t\n\tfunction _getScrubQueryParamRegexs(scrubFields) {\n\t var ret = [];\n\t var pat;\n\t for (var i = 0; i < scrubFields.length; ++i) {\n\t pat = '\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?';\n\t ret.push(new RegExp('(' + pat + '=)([^&\\\\n]+)', 'igm'));\n\t }\n\t return ret;\n\t}\n\t\n\tfunction formatArgsAsString(args) {\n\t var i, len, arg;\n\t var result = [];\n\t for (i = 0, len = args.length; i < len; i++) {\n\t arg = args[i];\n\t if (typeof arg === 'object') {\n\t arg = stringify(arg);\n\t arg = arg.error || arg.value;\n\t if (arg.length > 500)\n\t arg = arg.substr(0,500)+'...';\n\t } else if (typeof arg === 'undefined') {\n\t arg = 'undefined';\n\t }\n\t result.push(arg);\n\t }\n\t return result.join(' ');\n\t}\n\t\n\tfunction now() {\n\t if (Date.now) {\n\t return +Date.now();\n\t }\n\t return +new Date();\n\t}\n\t\n\tmodule.exports = {\n\t isType: isType,\n\t typeName: typeName,\n\t isFunction: isFunction,\n\t isNativeFunction: isNativeFunction,\n\t isIterable: isIterable,\n\t isError: isError,\n\t extend: extend,\n\t traverse: traverse,\n\t redact: redact,\n\t uuid4: uuid4,\n\t LEVELS: LEVELS,\n\t sanitizeUrl: sanitizeUrl,\n\t addParamsAndAccessTokenToPath: addParamsAndAccessTokenToPath,\n\t formatUrl: formatUrl,\n\t stringify: stringify,\n\t jsonParse: jsonParse,\n\t makeUnhandledStackInfo: makeUnhandledStackInfo,\n\t createItem: createItem,\n\t get: get,\n\t set: set,\n\t scrub: scrub,\n\t formatArgsAsString: formatArgsAsString,\n\t now: now\n\t};\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tvar hasOwn = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\t\n\tvar isArray = function isArray(arr) {\n\t\tif (typeof Array.isArray === 'function') {\n\t\t\treturn Array.isArray(arr);\n\t\t}\n\t\n\t\treturn toStr.call(arr) === '[object Array]';\n\t};\n\t\n\tvar isPlainObject = function isPlainObject(obj) {\n\t\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\t\treturn false;\n\t\t}\n\t\n\t\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\t\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t\t// Not own constructor property must be Object\n\t\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\t\treturn false;\n\t\t}\n\t\n\t\t// Own properties are enumerated firstly, so to speed up,\n\t\t// if last one is own, then all properties are own.\n\t\tvar key;\n\t\tfor (key in obj) {/**/}\n\t\n\t\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n\t};\n\t\n\tmodule.exports = function extend() {\n\t\tvar options, name, src, copy, copyIsArray, clone,\n\t\t\ttarget = arguments[0],\n\t\t\ti = 1,\n\t\t\tlength = arguments.length,\n\t\t\tdeep = false;\n\t\n\t\t// Handle a deep copy situation\n\t\tif (typeof target === 'boolean') {\n\t\t\tdeep = target;\n\t\t\ttarget = arguments[1] || {};\n\t\t\t// skip the boolean and the target\n\t\t\ti = 2;\n\t\t} else if ((typeof target !== 'object' && typeof target !== 'function') || target == null) {\n\t\t\ttarget = {};\n\t\t}\n\t\n\t\tfor (; i < length; ++i) {\n\t\t\toptions = arguments[i];\n\t\t\t// Only deal with non-null/undefined values\n\t\t\tif (options != null) {\n\t\t\t\t// Extend the base object\n\t\t\t\tfor (name in options) {\n\t\t\t\t\tsrc = target[name];\n\t\t\t\t\tcopy = options[name];\n\t\n\t\t\t\t\t// Prevent never-ending loop\n\t\t\t\t\tif (target !== copy) {\n\t\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\t\ttarget[name] = extend(deep, clone, copy);\n\t\n\t\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\t// Return the modified object\n\t\treturn target;\n\t};\n\t\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports) {\n\n\t// json3.js\n\t// 2017-02-21\n\t// Public Domain.\n\t// NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n\t// See http://www.JSON.org/js.html\n\t// This code should be minified before deployment.\n\t// See http://javascript.crockford.com/jsmin.html\n\t\n\t// USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n\t// NOT CONTROL.\n\t\n\t// This file creates a global JSON object containing two methods: stringify\n\t// and parse. This file provides the ES5 JSON capability to ES3 systems.\n\t// If a project might run on IE8 or earlier, then this file should be included.\n\t// This file does nothing on ES5 systems.\n\t\n\t// JSON.stringify(value, replacer, space)\n\t// value any JavaScript value, usually an object or array.\n\t// replacer an optional parameter that determines how object\n\t// values are stringified for objects. It can be a\n\t// function or an array of strings.\n\t// space an optional parameter that specifies the indentation\n\t// of nested structures. If it is omitted, the text will\n\t// be packed without extra whitespace. If it is a number,\n\t// it will specify the number of spaces to indent at each\n\t// level. If it is a string (such as \"\\t\" or \" \"),\n\t// it contains the characters used to indent at each level.\n\t// This method produces a JSON text from a JavaScript value.\n\t// When an object value is found, if the object contains a toJSON\n\t// method, its toJSON method will be called and the result will be\n\t// stringified. A toJSON method does not serialize: it returns the\n\t// value represented by the name/value pair that should be serialized,\n\t// or undefined if nothing should be serialized. The toJSON method\n\t// will be passed the key associated with the value, and this will be\n\t// bound to the value.\n\t\n\t// For example, this would serialize Dates as ISO strings.\n\t\n\t// Date.prototype.toJSON = function (key) {\n\t// function f(n) {\n\t// // Format integers to have at least two digits.\n\t// return (n < 10)\n\t// ? \"0\" + n\n\t// : n;\n\t// }\n\t// return this.getUTCFullYear() + \"-\" +\n\t// f(this.getUTCMonth() + 1) + \"-\" +\n\t// f(this.getUTCDate()) + \"T\" +\n\t// f(this.getUTCHours()) + \":\" +\n\t// f(this.getUTCMinutes()) + \":\" +\n\t// f(this.getUTCSeconds()) + \"Z\";\n\t// };\n\t\n\t// You can provide an optional replacer method. It will be passed the\n\t// key and value of each member, with this bound to the containing\n\t// object. The value that is returned from your method will be\n\t// serialized. If your method returns undefined, then the member will\n\t// be excluded from the serialization.\n\t\n\t// If the replacer parameter is an array of strings, then it will be\n\t// used to select the members to be serialized. It filters the results\n\t// such that only members with keys listed in the replacer array are\n\t// stringified.\n\t\n\t// Values that do not have JSON representations, such as undefined or\n\t// functions, will not be serialized. Such values in objects will be\n\t// dropped; in arrays they will be replaced with null. You can use\n\t// a replacer function to replace those with JSON values.\n\t\n\t// JSON.stringify(undefined) returns undefined.\n\t\n\t// The optional space parameter produces a stringification of the\n\t// value that is filled with line breaks and indentation to make it\n\t// easier to read.\n\t\n\t// If the space parameter is a non-empty string, then that string will\n\t// be used for indentation. If the space parameter is a number, then\n\t// the indentation will be that many spaces.\n\t\n\t// Example:\n\t\n\t// text = JSON.stringify([\"e\", {pluribus: \"unum\"}]);\n\t// // text is '[\"e\",{\"pluribus\":\"unum\"}]'\n\t\n\t// text = JSON.stringify([\"e\", {pluribus: \"unum\"}], null, \"\\t\");\n\t// // text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\n\t\n\t// text = JSON.stringify([new Date()], function (key, value) {\n\t// return this[key] instanceof Date\n\t// ? \"Date(\" + this[key] + \")\"\n\t// : value;\n\t// });\n\t// // text is '[\"Date(---current time---)\"]'\n\t\n\t// JSON.parse(text, reviver)\n\t// This method parses a JSON text to produce an object or array.\n\t// It can throw a SyntaxError exception.\n\t// This has been modified to use JSON-js/json_parse_state.js as the\n\t// parser instead of the one built around eval found in JSON-js/json2.js\n\t\n\t// The optional reviver parameter is a function that can filter and\n\t// transform the results. It receives each of the keys and values,\n\t// and its return value is used instead of the original value.\n\t// If it returns what it received, then the structure is not modified.\n\t// If it returns undefined then the member is deleted.\n\t\n\t// Example:\n\t\n\t// // Parse the text. Values that look like ISO date strings will\n\t// // be converted to Date objects.\n\t\n\t// myData = JSON.parse(text, function (key, value) {\n\t// var a;\n\t// if (typeof value === \"string\") {\n\t// a =\n\t// /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n\t// if (a) {\n\t// return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n\t// +a[5], +a[6]));\n\t// }\n\t// }\n\t// return value;\n\t// });\n\t\n\t// myData = JSON.parse('[\"Date(09/09/2001)\"]', function (key, value) {\n\t// var d;\n\t// if (typeof value === \"string\" &&\n\t// value.slice(0, 5) === \"Date(\" &&\n\t// value.slice(-1) === \")\") {\n\t// d = new Date(value.slice(5, -1));\n\t// if (d) {\n\t// return d;\n\t// }\n\t// }\n\t// return value;\n\t// });\n\t\n\t// This is a reference implementation. You are free to copy, modify, or\n\t// redistribute.\n\t\n\t/*jslint\n\t for, this\n\t */\n\t\n\t/*property\n\t JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\n\t getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\n\t lastIndex, length, parse, prototype, push, replace, slice, stringify,\n\t test, toJSON, toString, valueOf\n\t */\n\t\n\tvar setupCustomJSON = function(JSON) {\n\t\n\t var rx_one = /^[\\],:{}\\s]*$/;\n\t var rx_two = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g;\n\t var rx_three = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\n\t var rx_four = /(?:^|:|,)(?:\\s*\\[)+/g;\n\t var rx_escapable = /[\\\\\"\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\t var rx_dangerous = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\t\n\t function f(n) {\n\t // Format integers to have at least two digits.\n\t return n < 10\n\t ? \"0\" + n\n\t : n;\n\t }\n\t\n\t function this_value() {\n\t return this.valueOf();\n\t }\n\t\n\t if (typeof Date.prototype.toJSON !== \"function\") {\n\t\n\t Date.prototype.toJSON = function () {\n\t\n\t return isFinite(this.valueOf())\n\t ? this.getUTCFullYear() + \"-\" +\n\t f(this.getUTCMonth() + 1) + \"-\" +\n\t f(this.getUTCDate()) + \"T\" +\n\t f(this.getUTCHours()) + \":\" +\n\t f(this.getUTCMinutes()) + \":\" +\n\t f(this.getUTCSeconds()) + \"Z\"\n\t : null;\n\t };\n\t\n\t Boolean.prototype.toJSON = this_value;\n\t Number.prototype.toJSON = this_value;\n\t String.prototype.toJSON = this_value;\n\t }\n\t\n\t var gap;\n\t var indent;\n\t var meta;\n\t var rep;\n\t\n\t\n\t function quote(string) {\n\t\n\t // If the string contains no control characters, no quote characters, and no\n\t // backslash characters, then we can safely slap some quotes around it.\n\t // Otherwise we must also replace the offending characters with safe escape\n\t // sequences.\n\t\n\t rx_escapable.lastIndex = 0;\n\t return rx_escapable.test(string)\n\t ? \"\\\"\" + string.replace(rx_escapable, function (a) {\n\t var c = meta[a];\n\t return typeof c === \"string\"\n\t ? c\n\t : \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n\t }) + \"\\\"\"\n\t : \"\\\"\" + string + \"\\\"\";\n\t }\n\t\n\t\n\t function str(key, holder) {\n\t\n\t // Produce a string from holder[key].\n\t\n\t var i; // The loop counter.\n\t var k; // The member key.\n\t var v; // The member value.\n\t var length;\n\t var mind = gap;\n\t var partial;\n\t var value = holder[key];\n\t\n\t // If the value has a toJSON method, call it to obtain a replacement value.\n\t\n\t if (value && typeof value === \"object\" &&\n\t typeof value.toJSON === \"function\") {\n\t value = value.toJSON(key);\n\t }\n\t\n\t // If we were called with a replacer function, then call the replacer to\n\t // obtain a replacement value.\n\t\n\t if (typeof rep === \"function\") {\n\t value = rep.call(holder, key, value);\n\t }\n\t\n\t // What happens next depends on the value's type.\n\t\n\t switch (typeof value) {\n\t case \"string\":\n\t return quote(value);\n\t\n\t case \"number\":\n\t\n\t // JSON numbers must be finite. Encode non-finite numbers as null.\n\t\n\t return isFinite(value)\n\t ? String(value)\n\t : \"null\";\n\t\n\t case \"boolean\":\n\t case \"null\":\n\t\n\t // If the value is a boolean or null, convert it to a string. Note:\n\t // typeof null does not produce \"null\". The case is included here in\n\t // the remote chance that this gets fixed someday.\n\t\n\t return String(value);\n\t\n\t // If the type is \"object\", we might be dealing with an object or an array or\n\t // null.\n\t\n\t case \"object\":\n\t\n\t // Due to a specification blunder in ECMAScript, typeof null is \"object\",\n\t // so watch out for that case.\n\t\n\t if (!value) {\n\t return \"null\";\n\t }\n\t\n\t // Make an array to hold the partial results of stringifying this object value.\n\t\n\t gap += indent;\n\t partial = [];\n\t\n\t // Is the value an array?\n\t\n\t if (Object.prototype.toString.apply(value) === \"[object Array]\") {\n\t\n\t // The value is an array. Stringify every element. Use null as a placeholder\n\t // for non-JSON values.\n\t\n\t length = value.length;\n\t for (i = 0; i < length; i += 1) {\n\t partial[i] = str(i, value) || \"null\";\n\t }\n\t\n\t // Join all of the elements together, separated with commas, and wrap them in\n\t // brackets.\n\t\n\t v = partial.length === 0\n\t ? \"[]\"\n\t : gap\n\t ? \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\"\n\t : \"[\" + partial.join(\",\") + \"]\";\n\t gap = mind;\n\t return v;\n\t }\n\t\n\t // If the replacer is an array, use it to select the members to be stringified.\n\t\n\t if (rep && typeof rep === \"object\") {\n\t length = rep.length;\n\t for (i = 0; i < length; i += 1) {\n\t if (typeof rep[i] === \"string\") {\n\t k = rep[i];\n\t v = str(k, value);\n\t if (v) {\n\t partial.push(quote(k) + (\n\t gap\n\t ? \": \"\n\t : \":\"\n\t ) + v);\n\t }\n\t }\n\t }\n\t } else {\n\t\n\t // Otherwise, iterate through all of the keys in the object.\n\t\n\t for (k in value) {\n\t if (Object.prototype.hasOwnProperty.call(value, k)) {\n\t v = str(k, value);\n\t if (v) {\n\t partial.push(quote(k) + (\n\t gap\n\t ? \": \"\n\t : \":\"\n\t ) + v);\n\t }\n\t }\n\t }\n\t }\n\t\n\t // Join all of the member texts together, separated with commas,\n\t // and wrap them in braces.\n\t\n\t v = partial.length === 0\n\t ? \"{}\"\n\t : gap\n\t ? \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\"\n\t : \"{\" + partial.join(\",\") + \"}\";\n\t gap = mind;\n\t return v;\n\t }\n\t }\n\t\n\t // If the JSON object does not yet have a stringify method, give it one.\n\t\n\t if (typeof JSON.stringify !== \"function\") {\n\t meta = { // table of character substitutions\n\t \"\\b\": \"\\\\b\",\n\t \"\\t\": \"\\\\t\",\n\t \"\\n\": \"\\\\n\",\n\t \"\\f\": \"\\\\f\",\n\t \"\\r\": \"\\\\r\",\n\t \"\\\"\": \"\\\\\\\"\",\n\t \"\\\\\": \"\\\\\\\\\"\n\t };\n\t JSON.stringify = function (value, replacer, space) {\n\t\n\t // The stringify method takes a value and an optional replacer, and an optional\n\t // space parameter, and returns a JSON text. The replacer can be a function\n\t // that can replace values, or an array of strings that will select the keys.\n\t // A default replacer method can be provided. Use of the space parameter can\n\t // produce text that is more easily readable.\n\t\n\t var i;\n\t gap = \"\";\n\t indent = \"\";\n\t\n\t // If the space parameter is a number, make an indent string containing that\n\t // many spaces.\n\t\n\t if (typeof space === \"number\") {\n\t for (i = 0; i < space; i += 1) {\n\t indent += \" \";\n\t }\n\t\n\t // If the space parameter is a string, it will be used as the indent string.\n\t\n\t } else if (typeof space === \"string\") {\n\t indent = space;\n\t }\n\t\n\t // If there is a replacer, it must be a function or an array.\n\t // Otherwise, throw an error.\n\t\n\t rep = replacer;\n\t if (replacer && typeof replacer !== \"function\" &&\n\t (typeof replacer !== \"object\" ||\n\t typeof replacer.length !== \"number\")) {\n\t throw new Error(\"JSON.stringify\");\n\t }\n\t\n\t // Make a fake root object containing our value under the key of \"\".\n\t // Return the result of stringifying the value.\n\t\n\t return str(\"\", {\"\": value});\n\t };\n\t }\n\t\n\t\n\t // If the JSON object does not yet have a parse method, give it one.\n\t\n\t if (typeof JSON.parse !== \"function\") {\n\t JSON.parse = (function () {\n\t\n\t // This function creates a JSON parse function that uses a state machine rather\n\t // than the dangerous eval function to parse a JSON text.\n\t\n\t var state; // The state of the parser, one of\n\t // 'go' The starting state\n\t // 'ok' The final, accepting state\n\t // 'firstokey' Ready for the first key of the object or\n\t // the closing of an empty object\n\t // 'okey' Ready for the next key of the object\n\t // 'colon' Ready for the colon\n\t // 'ovalue' Ready for the value half of a key/value pair\n\t // 'ocomma' Ready for a comma or closing }\n\t // 'firstavalue' Ready for the first value of an array or\n\t // an empty array\n\t // 'avalue' Ready for the next value of an array\n\t // 'acomma' Ready for a comma or closing ]\n\t var stack; // The stack, for controlling nesting.\n\t var container; // The current container object or array\n\t var key; // The current key\n\t var value; // The current value\n\t var escapes = { // Escapement translation table\n\t \"\\\\\": \"\\\\\",\n\t \"\\\"\": \"\\\"\",\n\t \"/\": \"/\",\n\t \"t\": \"\\t\",\n\t \"n\": \"\\n\",\n\t \"r\": \"\\r\",\n\t \"f\": \"\\f\",\n\t \"b\": \"\\b\"\n\t };\n\t var string = { // The actions for string tokens\n\t go: function () {\n\t state = \"ok\";\n\t },\n\t firstokey: function () {\n\t key = value;\n\t state = \"colon\";\n\t },\n\t okey: function () {\n\t key = value;\n\t state = \"colon\";\n\t },\n\t ovalue: function () {\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t state = \"acomma\";\n\t }\n\t };\n\t var number = { // The actions for number tokens\n\t go: function () {\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t state = \"acomma\";\n\t }\n\t };\n\t var action = {\n\t\n\t // The action table describes the behavior of the machine. It contains an\n\t // object for each token. Each object contains a method that is called when\n\t // a token is matched in a state. An object will lack a method for illegal\n\t // states.\n\t\n\t \"{\": {\n\t go: function () {\n\t stack.push({state: \"ok\"});\n\t container = {};\n\t state = \"firstokey\";\n\t },\n\t ovalue: function () {\n\t stack.push({container: container, state: \"ocomma\", key: key});\n\t container = {};\n\t state = \"firstokey\";\n\t },\n\t firstavalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = {};\n\t state = \"firstokey\";\n\t },\n\t avalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = {};\n\t state = \"firstokey\";\n\t }\n\t },\n\t \"}\": {\n\t firstokey: function () {\n\t var pop = stack.pop();\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t },\n\t ocomma: function () {\n\t var pop = stack.pop();\n\t container[key] = value;\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t }\n\t },\n\t \"[\": {\n\t go: function () {\n\t stack.push({state: \"ok\"});\n\t container = [];\n\t state = \"firstavalue\";\n\t },\n\t ovalue: function () {\n\t stack.push({container: container, state: \"ocomma\", key: key});\n\t container = [];\n\t state = \"firstavalue\";\n\t },\n\t firstavalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = [];\n\t state = \"firstavalue\";\n\t },\n\t avalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = [];\n\t state = \"firstavalue\";\n\t }\n\t },\n\t \"]\": {\n\t firstavalue: function () {\n\t var pop = stack.pop();\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t },\n\t acomma: function () {\n\t var pop = stack.pop();\n\t container.push(value);\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t }\n\t },\n\t \":\": {\n\t colon: function () {\n\t if (Object.hasOwnProperty.call(container, key)) {\n\t throw new SyntaxError(\"Duplicate key '\" + key + \"\\\"\");\n\t }\n\t state = \"ovalue\";\n\t }\n\t },\n\t \",\": {\n\t ocomma: function () {\n\t container[key] = value;\n\t state = \"okey\";\n\t },\n\t acomma: function () {\n\t container.push(value);\n\t state = \"avalue\";\n\t }\n\t },\n\t \"true\": {\n\t go: function () {\n\t value = true;\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t value = true;\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t value = true;\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t value = true;\n\t state = \"acomma\";\n\t }\n\t },\n\t \"false\": {\n\t go: function () {\n\t value = false;\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t value = false;\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t value = false;\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t value = false;\n\t state = \"acomma\";\n\t }\n\t },\n\t \"null\": {\n\t go: function () {\n\t value = null;\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t value = null;\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t value = null;\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t value = null;\n\t state = \"acomma\";\n\t }\n\t }\n\t };\n\t\n\t function debackslashify(text) {\n\t\n\t // Remove and replace any backslash escapement.\n\t\n\t return text.replace(/\\\\(?:u(.{4})|([^u]))/g, function (ignore, b, c) {\n\t return b\n\t ? String.fromCharCode(parseInt(b, 16))\n\t : escapes[c];\n\t });\n\t }\n\t\n\t return function (source, reviver) {\n\t\n\t // A regular expression is used to extract tokens from the JSON text.\n\t // The extraction process is cautious.\n\t\n\t var result;\n\t var tx = /^[\\u0020\\t\\n\\r]*(?:([,:\\[\\]{}]|true|false|null)|(-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)|\"((?:[^\\r\\n\\t\\\\\\\"]|\\\\(?:[\"\\\\\\/trnfb]|u[0-9a-fA-F]{4}))*)\")/;\n\t\n\t // Set the starting state.\n\t\n\t state = \"go\";\n\t\n\t // The stack records the container, key, and state for each object or array\n\t // that contains another object or array while processing nested structures.\n\t\n\t stack = [];\n\t\n\t // If any error occurs, we will catch it and ultimately throw a syntax error.\n\t\n\t try {\n\t\n\t // For each token...\n\t\n\t while (true) {\n\t result = tx.exec(source);\n\t if (!result) {\n\t break;\n\t }\n\t\n\t // result is the result array from matching the tokenizing regular expression.\n\t // result[0] contains everything that matched, including any initial whitespace.\n\t // result[1] contains any punctuation that was matched, or true, false, or null.\n\t // result[2] contains a matched number, still in string form.\n\t // result[3] contains a matched string, without quotes but with escapement.\n\t\n\t if (result[1]) {\n\t\n\t // Token: Execute the action for this state and token.\n\t\n\t action[result[1]][state]();\n\t\n\t } else if (result[2]) {\n\t\n\t // Number token: Convert the number string into a number value and execute\n\t // the action for this state and number.\n\t\n\t value = +result[2];\n\t number[state]();\n\t } else {\n\t\n\t // String token: Replace the escapement sequences and execute the action for\n\t // this state and string.\n\t\n\t value = debackslashify(result[3]);\n\t string[state]();\n\t }\n\t\n\t // Remove the token from the string. The loop will continue as long as there\n\t // are tokens. This is a slow process, but it allows the use of ^ matching,\n\t // which assures that no illegal tokens slip through.\n\t\n\t source = source.slice(result[0].length);\n\t }\n\t\n\t // If we find a state/token combination that is illegal, then the action will\n\t // cause an error. We handle the error by simply changing the state.\n\t\n\t } catch (e) {\n\t state = e;\n\t }\n\t\n\t // The parsing is finished. If we are not in the final \"ok\" state, or if the\n\t // remaining source contains anything except whitespace, then we did not have\n\t //a well-formed JSON text.\n\t\n\t if (state !== \"ok\" || (/[^\\u0020\\t\\n\\r]/.test(source))) {\n\t throw (state instanceof SyntaxError)\n\t ? state\n\t : new SyntaxError(\"JSON\");\n\t }\n\t\n\t // If there is a reviver function, we recursively walk the new structure,\n\t // passing each name/value pair to the reviver function for possible\n\t // transformation, starting with a temporary root object that holds the current\n\t // value in an empty key. If there is not a reviver function, we simply return\n\t // that value.\n\t\n\t return (typeof reviver === \"function\")\n\t ? (function walk(holder, key) {\n\t var k;\n\t var v;\n\t var val = holder[key];\n\t if (val && typeof val === \"object\") {\n\t for (k in value) {\n\t if (Object.prototype.hasOwnProperty.call(val, k)) {\n\t v = walk(val, k);\n\t if (v !== undefined) {\n\t val[k] = v;\n\t } else {\n\t delete val[k];\n\t }\n\t }\n\t }\n\t }\n\t return reviver.call(holder, key, val);\n\t }({\"\": value}, \"\"))\n\t : value;\n\t };\n\t }());\n\t }\n\t}\n\t\n\tmodule.exports = setupCustomJSON;\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\t\n\t/*\n\t * Notifier - the internal object responsible for delegating between the client exposed API, the\n\t * chain of transforms necessary to turn an item into something that can be sent to Rollbar, and the\n\t * queue which handles the communcation with the Rollbar API servers.\n\t *\n\t * @param queue - an object that conforms to the interface: addItem(item, callback)\n\t * @param options - an object representing the options to be set for this notifier, this should have\n\t * any defaults already set by the caller\n\t */\n\tfunction Notifier(queue, options) {\n\t this.queue = queue;\n\t this.options = options;\n\t this.transforms = [];\n\t}\n\t\n\t/*\n\t * configure - updates the options for this notifier with the passed in object\n\t *\n\t * @param options - an object which gets merged with the current options set on this notifier\n\t * @returns this\n\t */\n\tNotifier.prototype.configure = function(options) {\n\t this.queue && this.queue.configure(options);\n\t var oldOptions = this.options;\n\t this.options = _.extend(true, {}, oldOptions, options);\n\t return this;\n\t};\n\t\n\t/*\n\t * addTransform - adds a transform onto the end of the queue of transforms for this notifier\n\t *\n\t * @param transform - a function which takes three arguments:\n\t * * item: An Object representing the data to eventually be sent to Rollbar\n\t * * options: The current value of the options for this notifier\n\t * * callback: function(err: (Null|Error), item: (Null|Object)) the transform must call this\n\t * callback with a null value for error if it wants the processing chain to continue, otherwise\n\t * with an error to terminate the processing. The item should be the updated item after this\n\t * transform is finished modifying it.\n\t */\n\tNotifier.prototype.addTransform = function(transform) {\n\t if (_.isFunction(transform)) {\n\t this.transforms.push(transform);\n\t }\n\t return this;\n\t};\n\t\n\t/*\n\t * log - the internal log function which applies the configured transforms and then pushes onto the\n\t * queue to be sent to the backend.\n\t *\n\t * @param item - An object with the following structure:\n\t * message [String] - An optional string to be sent to rollbar\n\t * error [Error] - An optional error\n\t *\n\t * @param callback - A function of type function(err, resp) which will be called with exactly one\n\t * null argument and one non-null argument. The callback will be called once, either during the\n\t * transform stage if an error occurs inside a transform, or in response to the communication with\n\t * the backend. The second argument will be the response from the backend in case of success.\n\t */\n\tNotifier.prototype.log = function(item, callback) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t\n\t if (!this.options.enabled) {\n\t return callback(new Error('Rollbar is not enabled'));\n\t }\n\t\n\t this.queue.addPendingItem(item);\n\t var originalError = item.err;\n\t this._applyTransforms(item, function(err, i) {\n\t if (err) {\n\t this.queue.removePendingItem(item);\n\t return callback(err, null);\n\t }\n\t this.queue.addItem(i, callback, originalError, item);\n\t }.bind(this));\n\t};\n\t\n\t/* Internal */\n\t\n\t/*\n\t * _applyTransforms - Applies the transforms that have been added to this notifier sequentially. See\n\t * `addTransform` for more information.\n\t *\n\t * @param item - An item to be transformed\n\t * @param callback - A function of type function(err, item) which will be called with a non-null\n\t * error and a null item in the case of a transform failure, or a null error and non-null item after\n\t * all transforms have been applied.\n\t */\n\tNotifier.prototype._applyTransforms = function(item, callback) {\n\t var transformIndex = -1;\n\t var transformsLength = this.transforms.length;\n\t var transforms = this.transforms;\n\t var options = this.options;\n\t\n\t var cb = function(err, i) {\n\t if (err) {\n\t callback(err, null);\n\t return;\n\t }\n\t\n\t transformIndex++;\n\t\n\t if (transformIndex === transformsLength) {\n\t callback(null, i);\n\t return;\n\t }\n\t\n\t transforms[transformIndex](i, options, cb);\n\t };\n\t\n\t cb(null, item);\n\t};\n\t\n\tmodule.exports = Notifier;\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\t\n\tvar MAX_EVENTS = 100;\n\t\n\tfunction Telemeter(options) {\n\t this.queue = [];\n\t this.options = _.extend(true, {}, options);\n\t var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n\t this.maxQueueSize = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n\t}\n\t\n\tTelemeter.prototype.configure = function(options) {\n\t var oldOptions = this.options;\n\t this.options = _.extend(true, {}, oldOptions, options);\n\t var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n\t var newMaxEvents = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n\t var deleteCount = 0;\n\t if (this.maxQueueSize > newMaxEvents) {\n\t deleteCount = this.maxQueueSize - newMaxEvents;\n\t }\n\t this.maxQueueSize = newMaxEvents;\n\t this.queue.splice(0, deleteCount);\n\t};\n\t\n\tTelemeter.prototype.copyEvents = function() {\n\t return Array.prototype.slice.call(this.queue, 0);\n\t};\n\t\n\tTelemeter.prototype.capture = function(type, metadata, level, rollbarUUID, timestamp) {\n\t var e = {\n\t level: getLevel(type, level),\n\t type: type,\n\t timestamp_ms: timestamp || _.now(),\n\t body: metadata,\n\t source: 'client'\n\t };\n\t if (rollbarUUID) {\n\t e.uuid = rollbarUUID;\n\t }\n\t\n\t try {\n\t if (_.isFunction(this.options.filterTelemetry) && this.options.filterTelemetry(e)) {\n\t return false;\n\t }\n\t } catch (e) {\n\t this.options.filterTelemetry = null;\n\t }\n\t\n\t this.push(e);\n\t return e;\n\t};\n\t\n\tTelemeter.prototype.captureEvent = function(metadata, level, rollbarUUID) {\n\t return this.capture('manual', metadata, level, rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.captureError = function(err, level, rollbarUUID, timestamp) {\n\t var metadata = {\n\t message: err.message || String(err)\n\t };\n\t if (err.stack) {\n\t metadata.stack = err.stack;\n\t }\n\t return this.capture('error', metadata, level, rollbarUUID, timestamp);\n\t};\n\t\n\tTelemeter.prototype.captureLog = function(message, level, rollbarUUID, timestamp) {\n\t return this.capture('log', {\n\t message: message\n\t }, level, rollbarUUID, timestamp);\n\t};\n\t\n\tTelemeter.prototype.captureNetwork = function(metadata, subtype, rollbarUUID, requestData) {\n\t subtype = subtype || 'xhr';\n\t metadata.subtype = metadata.subtype || subtype;\n\t if (requestData) {\n\t metadata.request = requestData;\n\t }\n\t var level = this.levelFromStatus(metadata.status_code);\n\t return this.capture('network', metadata, level, rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.levelFromStatus = function(statusCode) {\n\t if (statusCode >= 200 && statusCode < 400) {\n\t return 'info';\n\t }\n\t if (statusCode === 0 || statusCode >= 400) {\n\t return 'error';\n\t }\n\t return 'info';\n\t};\n\t\n\tTelemeter.prototype.captureDom = function(subtype, element, value, checked, rollbarUUID) {\n\t var metadata = {\n\t subtype: subtype,\n\t element: element\n\t };\n\t if (value !== undefined) {\n\t metadata.value = value;\n\t }\n\t if (checked !== undefined) {\n\t metadata.checked = checked;\n\t }\n\t return this.capture('dom', metadata, 'info', rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.captureNavigation = function(from, to, rollbarUUID) {\n\t return this.capture('navigation', {from: from, to: to}, 'info', rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.captureDomContentLoaded = function(ts) {\n\t return this.capture('navigation', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n\t /**\n\t * If we decide to make this a dom event instead, then use the line below:\n\t return this.capture('dom', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n\t */\n\t};\n\tTelemeter.prototype.captureLoad = function(ts) {\n\t return this.capture('navigation', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n\t /**\n\t * If we decide to make this a dom event instead, then use the line below:\n\t return this.capture('dom', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n\t */\n\t};\n\t\n\tTelemeter.prototype.captureConnectivityChange = function(type, rollbarUUID) {\n\t return this.captureNetwork({change: type}, 'connectivity', rollbarUUID);\n\t};\n\t\n\t// Only intended to be used internally by the notifier\n\tTelemeter.prototype._captureRollbarItem = function(item) {\n\t if (!this.options.includeItemsInTelemetry) {\n\t return;\n\t }\n\t if (item.err) {\n\t return this.captureError(item.err, item.level, item.uuid, item.timestamp);\n\t }\n\t if (item.message) {\n\t return this.captureLog(item.message, item.level, item.uuid, item.timestamp);\n\t }\n\t if (item.custom) {\n\t return this.capture('log', item.custom, item.level, item.uuid, item.timestamp);\n\t }\n\t};\n\t\n\tTelemeter.prototype.push = function(e) {\n\t this.queue.push(e);\n\t if (this.queue.length > this.maxQueueSize) {\n\t this.queue.shift();\n\t }\n\t};\n\t\n\tfunction getLevel(type, level) {\n\t if (level) {\n\t return level;\n\t }\n\t var defaultLevel = {\n\t error: 'error',\n\t manual: 'info'\n\t };\n\t return defaultLevel[type] || 'info';\n\t}\n\t\n\tmodule.exports = Telemeter;\n\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\tvar helpers = __webpack_require__(12);\n\t\n\tvar defaultOptions = {\n\t hostname: 'api.rollbar.com',\n\t path: '/api/1/item/',\n\t search: null,\n\t version: '1',\n\t protocol: 'https:',\n\t port: 443\n\t};\n\t\n\t/**\n\t * Api is an object that encapsulates methods of communicating with\n\t * the Rollbar API. It is a standard interface with some parts implemented\n\t * differently for server or browser contexts. It is an object that should\n\t * be instantiated when used so it can contain non-global options that may\n\t * be different for another instance of RollbarApi.\n\t *\n\t * @param options {\n\t * accessToken: the accessToken to use for posting items to rollbar\n\t * endpoint: an alternative endpoint to send errors to\n\t * must be a valid, fully qualified URL.\n\t * The default is: https://api.rollbar.com/api/1/item\n\t * proxy: if you wish to proxy requests provide an object\n\t * with the following keys:\n\t * host or hostname (required): foo.example.com\n\t * port (optional): 123\n\t * protocol (optional): https\n\t * }\n\t */\n\tfunction Api(options, t, u, j) {\n\t this.options = options;\n\t this.transport = t;\n\t this.url = u;\n\t this.jsonBackup = j;\n\t this.accessToken = options.accessToken;\n\t this.transportOptions = _getTransport(options, u);\n\t}\n\t\n\t/**\n\t *\n\t * @param data\n\t * @param callback\n\t */\n\tApi.prototype.postItem = function(data, callback) {\n\t var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n\t var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n\t this.transport.post(this.accessToken, transportOptions, payload, callback);\n\t};\n\t\n\tApi.prototype.configure = function(options) {\n\t var oldOptions = this.oldOptions;\n\t this.options = _.extend(true, {}, oldOptions, options);\n\t this.transportOptions = _getTransport(this.options, this.url);\n\t if (this.options.accessToken !== undefined) {\n\t this.accessToken = this.options.accessToken;\n\t }\n\t return this;\n\t};\n\t\n\tfunction _getTransport(options, url) {\n\t return helpers.getTransportFromOptions(options, defaultOptions, url);\n\t}\n\t\n\tmodule.exports = Api;\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\t\n\tfunction buildPayload(accessToken, data, jsonBackup) {\n\t if (!_.isType(data.context, 'string')) {\n\t var contextResult = _.stringify(data.context, jsonBackup);\n\t if (contextResult.error) {\n\t data.context = 'Error: could not serialize \\'context\\'';\n\t } else {\n\t data.context = contextResult.value || '';\n\t }\n\t if (data.context.length > 255) {\n\t data.context = data.context.substr(0, 255);\n\t }\n\t }\n\t return {\n\t access_token: accessToken,\n\t data: data\n\t };\n\t}\n\t\n\tfunction getTransportFromOptions(options, defaults, url) {\n\t var hostname = defaults.hostname;\n\t var protocol = defaults.protocol;\n\t var port = defaults.port;\n\t var path = defaults.path;\n\t var search = defaults.search;\n\t\n\t var proxy = options.proxy;\n\t if (options.endpoint) {\n\t var opts = url.parse(options.endpoint);\n\t hostname = opts.hostname;\n\t protocol = opts.protocol;\n\t port = opts.port;\n\t path = opts.pathname;\n\t search = opts.search;\n\t }\n\t return {\n\t hostname: hostname,\n\t protocol: protocol,\n\t port: port,\n\t path: path,\n\t search: search,\n\t proxy: proxy\n\t };\n\t}\n\t\n\tfunction transportOptions(transport, method) {\n\t var protocol = transport.protocol || 'https:';\n\t var port = transport.port || (protocol === 'http:' ? 80 : protocol === 'https:' ? 443 : undefined);\n\t var hostname = transport.hostname;\n\t var path = transport.path;\n\t if (transport.search) {\n\t path = path + transport.search;\n\t }\n\t if (transport.proxy) {\n\t path = protocol + '//' + hostname + path;\n\t hostname = transport.proxy.host || transport.proxy.hostname;\n\t port = transport.proxy.port;\n\t protocol = transport.proxy.protocol || protocol;\n\t }\n\t return {\n\t protocol: protocol,\n\t hostname: hostname,\n\t path: path,\n\t port: port,\n\t method: method\n\t };\n\t}\n\t\n\tfunction appendPathToPath(base, path) {\n\t var baseTrailingSlash = /\\/$/.test(base);\n\t var pathBeginningSlash = /^\\//.test(path);\n\t\n\t if (baseTrailingSlash && pathBeginningSlash) {\n\t path = path.substring(1);\n\t } else if (!baseTrailingSlash && !pathBeginningSlash) {\n\t path = '/' + path;\n\t }\n\t\n\t return base + path;\n\t}\n\t\n\tmodule.exports = {\n\t buildPayload: buildPayload,\n\t getTransportFromOptions: getTransportFromOptions,\n\t transportOptions: transportOptions,\n\t appendPathToPath: appendPathToPath\n\t};\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t/* eslint-disable no-console */\n\t__webpack_require__(14);\n\tvar detection = __webpack_require__(15);\n\tvar _ = __webpack_require__(6);\n\t\n\tfunction error() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t args.unshift('Rollbar:');\n\t if (detection.ieVersion() <= 8) {\n\t console.error(_.formatArgsAsString(args));\n\t } else {\n\t console.error.apply(console, args);\n\t }\n\t}\n\t\n\tfunction info() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t args.unshift('Rollbar:');\n\t if (detection.ieVersion() <= 8) {\n\t console.info(_.formatArgsAsString(args));\n\t } else {\n\t console.info.apply(console, args);\n\t }\n\t}\n\t\n\tfunction log() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t args.unshift('Rollbar:');\n\t if (detection.ieVersion() <= 8) {\n\t console.log(_.formatArgsAsString(args));\n\t } else {\n\t console.log.apply(console, args);\n\t }\n\t}\n\t\n\t/* eslint-enable no-console */\n\t\n\tmodule.exports = {\n\t error: error,\n\t info: info,\n\t log: log\n\t};\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports) {\n\n\t// Console-polyfill. MIT license.\n\t// https://github.com/paulmillr/console-polyfill\n\t// Make it safe to do console.log() always.\n\t(function(global) {\n\t 'use strict';\n\t if (!global.console) {\n\t global.console = {};\n\t }\n\t var con = global.console;\n\t var prop, method;\n\t var dummy = function() {};\n\t var properties = ['memory'];\n\t var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' +\n\t 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' +\n\t 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',');\n\t while (prop = properties.pop()) if (!con[prop]) con[prop] = {};\n\t while (method = methods.pop()) if (!con[method]) con[method] = dummy;\n\t // Using `this` for web workers & supports Browserify / Webpack.\n\t})(typeof window === 'undefined' ? this : window);\n\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\t// This detection.js module is used to encapsulate any ugly browser/feature\n\t// detection we may need to do.\n\t\n\t// Figure out which version of IE we're using, if any.\n\t// This is gleaned from http://stackoverflow.com/questions/5574842/best-way-to-check-for-ie-less-than-9-in-javascript-without-library\n\t// Will return an integer on IE (i.e. 8)\n\t// Will return undefined otherwise\n\tfunction getIEVersion() {\n\t\tvar undef;\n\t\tif (!document) {\n\t\t\treturn undef;\n\t\t}\n\t\n\t var v = 3,\n\t div = document.createElement('div'),\n\t all = div.getElementsByTagName('i');\n\t\n\t while (\n\t div.innerHTML = '',\n\t all[0]\n\t );\n\t\n\t return v > 4 ? v : undef;\n\t}\n\t\n\tvar Detection = {\n\t ieVersion: getIEVersion\n\t};\n\t\n\tmodule.exports = Detection;\n\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tfunction captureUncaughtExceptions(window, handler, shim) {\n\t if (!window) { return; }\n\t var oldOnError;\n\t\n\t if (typeof handler._rollbarOldOnError === 'function') {\n\t oldOnError = handler._rollbarOldOnError;\n\t } else if (window.onerror && !window.onerror.belongsToShim) {\n\t oldOnError = window.onerror;\n\t handler._rollbarOldOnError = oldOnError;\n\t }\n\t\n\t var fn = function() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t _rollbarWindowOnError(window, handler, oldOnError, args);\n\t };\n\t fn.belongsToShim = shim;\n\t window.onerror = fn;\n\t}\n\t\n\tfunction _rollbarWindowOnError(window, r, old, args) {\n\t if (window._rollbarWrappedError) {\n\t if (!args[4]) {\n\t args[4] = window._rollbarWrappedError;\n\t }\n\t if (!args[5]) {\n\t args[5] = window._rollbarWrappedError._rollbarContext;\n\t }\n\t window._rollbarWrappedError = null;\n\t }\n\t\n\t r.handleUncaughtException.apply(r, args);\n\t if (old) {\n\t old.apply(window, args);\n\t }\n\t}\n\t\n\tfunction captureUnhandledRejections(window, handler, shim) {\n\t if (!window) { return; }\n\t\n\t if (typeof window._rollbarURH === 'function' && window._rollbarURH.belongsToShim) {\n\t window.removeEventListener('unhandledrejection', window._rollbarURH);\n\t }\n\t\n\t var rejectionHandler = function (evt) {\n\t var reason, promise, detail;\n\t try {\n\t reason = evt.reason;\n\t } catch (e) {\n\t reason = undefined;\n\t }\n\t try {\n\t promise = evt.promise;\n\t } catch (e) {\n\t promise = '[unhandledrejection] error getting `promise` from event';\n\t }\n\t try {\n\t detail = evt.detail;\n\t if (!reason && detail) {\n\t reason = detail.reason;\n\t promise = detail.promise;\n\t }\n\t } catch (e) {\n\t detail = '[unhandledrejection] error getting `detail` from event';\n\t }\n\t if (!reason) {\n\t reason = '[unhandledrejection] error getting `reason` from event';\n\t }\n\t\n\t if (handler && handler.handleUnhandledRejection) {\n\t handler.handleUnhandledRejection(reason, promise);\n\t }\n\t };\n\t rejectionHandler.belongsToShim = shim;\n\t window._rollbarURH = rejectionHandler;\n\t window.addEventListener('unhandledrejection', rejectionHandler);\n\t}\n\t\n\tfunction wrapGlobals(window, handler, shim) {\n\t if (!window) { return; }\n\t // Adapted from https://github.com/bugsnag/bugsnag-js\n\t var globals = 'EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload'.split(',');\n\t var i, global;\n\t for (i = 0; i < globals.length; ++i) {\n\t global = globals[i];\n\t\n\t if (window[global] && window[global].prototype) {\n\t _extendListenerPrototype(handler, window[global].prototype, shim);\n\t }\n\t }\n\t}\n\t\n\tfunction _extendListenerPrototype(handler, prototype, shim) {\n\t if (prototype.hasOwnProperty && prototype.hasOwnProperty('addEventListener')) {\n\t var oldAddEventListener = prototype.addEventListener;\n\t while (oldAddEventListener._rollbarOldAdd && oldAddEventListener.belongsToShim) {\n\t oldAddEventListener = oldAddEventListener._rollbarOldAdd;\n\t }\n\t var addFn = function(event, callback, bubble) {\n\t oldAddEventListener.call(this, event, handler.wrap(callback), bubble);\n\t };\n\t addFn._rollbarOldAdd = oldAddEventListener;\n\t addFn.belongsToShim = shim;\n\t prototype.addEventListener = addFn;\n\t\n\t var oldRemoveEventListener = prototype.removeEventListener;\n\t while (oldRemoveEventListener._rollbarOldRemove && oldRemoveEventListener.belongsToShim) {\n\t oldRemoveEventListener = oldRemoveEventListener._rollbarOldRemove;\n\t }\n\t var removeFn = function(event, callback, bubble) {\n\t oldRemoveEventListener.call(this, event, callback && callback._rollbar_wrapped || callback, bubble);\n\t };\n\t removeFn._rollbarOldRemove = oldRemoveEventListener;\n\t removeFn.belongsToShim = shim;\n\t prototype.removeEventListener = removeFn;\n\t }\n\t}\n\t\n\tmodule.exports = {\n\t captureUncaughtExceptions: captureUncaughtExceptions,\n\t captureUnhandledRejections: captureUnhandledRejections,\n\t wrapGlobals: wrapGlobals\n\t};\n\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\tvar logger = __webpack_require__(13);\n\t\n\t/*\n\t * accessToken may be embedded in payload but that should not\n\t * be assumed\n\t *\n\t * options: {\n\t * hostname\n\t * protocol\n\t * path\n\t * port\n\t * method\n\t * }\n\t *\n\t * params is an object containing key/value pairs. These\n\t * will be appended to the path as 'key=value&key=value'\n\t *\n\t * payload is an unserialized object\n\t */\n\t\n\tfunction get(accessToken, options, params, callback, requestFactory) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t _.addParamsAndAccessTokenToPath(accessToken, options, params);\n\t\n\t var method = 'GET';\n\t var url = _.formatUrl(options);\n\t _makeRequest(accessToken, url, method, null, callback, requestFactory);\n\t}\n\t\n\tfunction post(accessToken, options, payload, callback, requestFactory) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t\n\t if (!payload) {\n\t return callback(new Error('Cannot send empty request'));\n\t }\n\t\n\t var stringifyResult = _.stringify(payload);\n\t if (stringifyResult.error) {\n\t return callback(stringifyResult.error);\n\t }\n\t\n\t var writeData = stringifyResult.value;\n\t var method = 'POST';\n\t var url = _.formatUrl(options);\n\t _makeRequest(accessToken, url, method, writeData, callback, requestFactory);\n\t}\n\t\n\tfunction _makeRequest(accessToken, url, method, data, callback, requestFactory) {\n\t var request;\n\t if (requestFactory) {\n\t request = requestFactory();\n\t } else {\n\t request = _createXMLHTTPObject();\n\t }\n\t if (!request) {\n\t // Give up, no way to send requests\n\t return callback(new Error('No way to send a request'));\n\t }\n\t try {\n\t try {\n\t var onreadystatechange = function() {\n\t try {\n\t if (onreadystatechange && request.readyState === 4) {\n\t onreadystatechange = undefined;\n\t\n\t var parseResponse = _.jsonParse(request.responseText);\n\t if (_isSuccess(request)) {\n\t callback(parseResponse.error, parseResponse.value);\n\t return;\n\t } else if (_isNormalFailure(request)) {\n\t if (request.status === 403) {\n\t // likely caused by using a server access token\n\t var message = parseResponse.value && parseResponse.value.message;\n\t logger.error(message);\n\t }\n\t // return valid http status codes\n\t callback(new Error(String(request.status)));\n\t } else {\n\t // IE will return a status 12000+ on some sort of connection failure,\n\t // so we return a blank error\n\t // http://msdn.microsoft.com/en-us/library/aa383770%28VS.85%29.aspx\n\t var msg = 'XHR response had no status code (likely connection failure)';\n\t callback(_newRetriableError(msg));\n\t }\n\t }\n\t } catch (ex) {\n\t //jquery source mentions firefox may error out while accessing the\n\t //request members if there is a network error\n\t //https://github.com/jquery/jquery/blob/a938d7b1282fc0e5c52502c225ae8f0cef219f0a/src/ajax/xhr.js#L111\n\t var exc;\n\t if (ex && ex.stack) {\n\t exc = ex;\n\t } else {\n\t exc = new Error(ex);\n\t }\n\t callback(exc);\n\t }\n\t };\n\t\n\t request.open(method, url, true);\n\t if (request.setRequestHeader) {\n\t request.setRequestHeader('Content-Type', 'application/json');\n\t request.setRequestHeader('X-Rollbar-Access-Token', accessToken);\n\t }\n\t request.onreadystatechange = onreadystatechange;\n\t request.send(data);\n\t } catch (e1) {\n\t // Sending using the normal xmlhttprequest object didn't work, try XDomainRequest\n\t if (typeof XDomainRequest !== 'undefined') {\n\t\n\t // Assume we are in a really old browser which has a bunch of limitations:\n\t // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\t\n\t // Extreme paranoia: if we have XDomainRequest then we have a window, but just in case\n\t if (!window || !window.location) {\n\t return callback(new Error('No window available during request, unknown environment'));\n\t }\n\t\n\t // If the current page is http, try and send over http\n\t if (window.location.href.substring(0, 5) === 'http:' && url.substring(0, 5) === 'https') {\n\t url = 'http' + url.substring(5);\n\t }\n\t\n\t var xdomainrequest = new XDomainRequest();\n\t xdomainrequest.onprogress = function() {};\n\t xdomainrequest.ontimeout = function() {\n\t var msg = 'Request timed out';\n\t var code = 'ETIMEDOUT';\n\t callback(_newRetriableError(msg, code));\n\t };\n\t xdomainrequest.onerror = function() {\n\t callback(new Error('Error during request'));\n\t };\n\t xdomainrequest.onload = function() {\n\t var parseResponse = _.jsonParse(xdomainrequest.responseText);\n\t callback(parseResponse.error, parseResponse.value);\n\t };\n\t xdomainrequest.open(method, url, true);\n\t xdomainrequest.send(data);\n\t } else {\n\t callback(new Error('Cannot find a method to transport a request'));\n\t }\n\t }\n\t } catch (e2) {\n\t callback(e2);\n\t }\n\t}\n\t\n\tfunction _createXMLHTTPObject() {\n\t /* global ActiveXObject:false */\n\t\n\t var factories = [\n\t function () {\n\t return new XMLHttpRequest();\n\t },\n\t function () {\n\t return new ActiveXObject('Msxml2.XMLHTTP');\n\t },\n\t function () {\n\t return new ActiveXObject('Msxml3.XMLHTTP');\n\t },\n\t function () {\n\t return new ActiveXObject('Microsoft.XMLHTTP');\n\t }\n\t ];\n\t var xmlhttp;\n\t var i;\n\t var numFactories = factories.length;\n\t for (i = 0; i < numFactories; i++) {\n\t /* eslint-disable no-empty */\n\t try {\n\t xmlhttp = factories[i]();\n\t break;\n\t } catch (e) {\n\t // pass\n\t }\n\t /* eslint-enable no-empty */\n\t }\n\t return xmlhttp;\n\t}\n\t\n\tfunction _isSuccess(r) {\n\t return r && r.status && r.status === 200;\n\t}\n\t\n\tfunction _isNormalFailure(r) {\n\t return r && _.isType(r.status, 'number') && r.status >= 400 && r.status < 600;\n\t}\n\t\n\tfunction _newRetriableError(message, code) {\n\t var err = new Error(message);\n\t err.code = code || 'ENOTFOUND';\n\t return err;\n\t}\n\t\n\tmodule.exports = {\n\t get: get,\n\t post: post\n\t};\n\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\t// See https://nodejs.org/docs/latest/api/url.html\n\tfunction parse(url) {\n\t var result = {\n\t protocol: null, auth: null, host: null, path: null,\n\t hash: null, href: url, hostname: null, port: null,\n\t pathname: null, search: null, query: null\n\t };\n\t\n\t var i, last;\n\t i = url.indexOf('//');\n\t if (i !== -1) {\n\t result.protocol = url.substring(0,i);\n\t last = i+2;\n\t } else {\n\t last = 0;\n\t }\n\t \n\t i = url.indexOf('@', last);\n\t if (i !== -1) {\n\t result.auth = url.substring(last, i);\n\t last = i+1;\n\t }\n\t\n\t i = url.indexOf('/', last);\n\t if (i === -1) {\n\t i = url.indexOf('?', last);\n\t if (i === -1) {\n\t i = url.indexOf('#', last);\n\t if (i === -1) {\n\t result.host = url.substring(last);\n\t } else {\n\t result.host = url.substring(last, i);\n\t result.hash = url.substring(i);\n\t }\n\t result.hostname = result.host.split(':')[0];\n\t result.port = result.host.split(':')[1];\n\t if (result.port) {\n\t result.port = parseInt(result.port, 10);\n\t }\n\t return result;\n\t } else {\n\t result.host = url.substring(last, i);\n\t result.hostname = result.host.split(':')[0];\n\t result.port = result.host.split(':')[1];\n\t if (result.port) {\n\t result.port = parseInt(result.port, 10);\n\t }\n\t last = i;\n\t }\n\t } else {\n\t result.host = url.substring(last, i);\n\t result.hostname = result.host.split(':')[0];\n\t result.port = result.host.split(':')[1];\n\t if (result.port) {\n\t result.port = parseInt(result.port, 10);\n\t }\n\t last = i;\n\t }\n\t\n\t i = url.indexOf('#', last);\n\t if (i === -1) {\n\t result.path = url.substring(last);\n\t } else {\n\t result.path = url.substring(last, i);\n\t result.hash = url.substring(i);\n\t }\n\t\n\t if (result.path) {\n\t var pathParts = result.path.split('?');\n\t result.pathname = pathParts[0];\n\t result.query = pathParts[1];\n\t result.search = result.query ? '?' + result.query : null;\n\t }\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t parse: parse\n\t};\n\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\tvar errorParser = __webpack_require__(20);\n\tvar logger = __webpack_require__(13);\n\t\n\tfunction handleItemWithError(item, options, callback) {\n\t item.data = item.data || {};\n\t if (item.err) {\n\t try {\n\t item.stackInfo = item.err._savedStackTrace || errorParser.parse(item.err);\n\t } catch (e)\n\t /* istanbul ignore next */\n\t {\n\t logger.error('Error while parsing the error object.', e);\n\t item.message = item.err.message || item.err.description || item.message || String(item.err);\n\t delete item.err;\n\t }\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction ensureItemHasSomethingToSay(item, options, callback) {\n\t if (!item.message && !item.stackInfo && !item.custom) {\n\t callback(new Error('No message, stack info, or custom data'), null);\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction addBaseInfo(item, options, callback) {\n\t var environment = (options.payload && options.payload.environment) || options.environment;\n\t item.data = _.extend(true, {}, item.data, {\n\t environment: environment,\n\t level: item.level,\n\t endpoint: options.endpoint,\n\t platform: 'browser',\n\t framework: 'browser-js',\n\t language: 'javascript',\n\t server: {},\n\t uuid: item.uuid,\n\t notifier: {\n\t name: 'rollbar-browser-js',\n\t version: options.version\n\t }\n\t });\n\t callback(null, item);\n\t}\n\t\n\tfunction addRequestInfo(window) {\n\t return function(item, options, callback) {\n\t if (!window || !window.location) {\n\t return callback(null, item);\n\t }\n\t _.set(item, 'data.request', {\n\t url: window.location.href,\n\t query_string: window.location.search,\n\t user_ip: '$remote_ip'\n\t });\n\t callback(null, item);\n\t };\n\t}\n\t\n\tfunction addClientInfo(window) {\n\t return function(item, options, callback) {\n\t if (!window) {\n\t return callback(null, item);\n\t }\n\t var nav = window.navigator || {};\n\t var scr = window.screen || {};\n\t _.set(item, 'data.client', {\n\t runtime_ms: item.timestamp - window._rollbarStartTime,\n\t timestamp: Math.round(item.timestamp / 1000),\n\t javascript: {\n\t browser: nav.userAgent,\n\t language: nav.language,\n\t cookie_enabled: nav.cookieEnabled,\n\t screen: {\n\t width: scr.width,\n\t height: scr.height\n\t }\n\t }\n\t });\n\t callback(null, item);\n\t };\n\t}\n\t\n\tfunction addPluginInfo(window) {\n\t return function(item, options, callback) {\n\t if (!window || !window.navigator) {\n\t return callback(null, item);\n\t }\n\t var plugins = [];\n\t var navPlugins = window.navigator.plugins || [];\n\t var cur;\n\t for (var i=0, l=navPlugins.length; i < l; ++i) {\n\t cur = navPlugins[i];\n\t plugins.push({name: cur.name, description: cur.description});\n\t }\n\t _.set(item, 'data.client.javascript.plugins', plugins);\n\t callback(null, item);\n\t };\n\t}\n\t\n\tfunction addBody(item, options, callback) {\n\t if (item.stackInfo) {\n\t addBodyTrace(item, options, callback);\n\t } else {\n\t addBodyMessage(item, options, callback);\n\t }\n\t}\n\t\n\tfunction addBodyMessage(item, options, callback) {\n\t var message = item.message;\n\t var custom = item.custom;\n\t\n\t if (!message) {\n\t if (custom) {\n\t var scrubFields = options.scrubFields;\n\t var messageResult = _.stringify(_.scrub(custom, scrubFields));\n\t message = messageResult.error || messageResult.value || '';\n\t } else {\n\t message = '';\n\t }\n\t }\n\t var result = {\n\t body: message\n\t };\n\t\n\t if (custom) {\n\t result.extra = _.extend(true, {}, custom);\n\t }\n\t\n\t _.set(item, 'data.body', {message: result});\n\t callback(null, item);\n\t}\n\t\n\t\n\tfunction addBodyTrace(item, options, callback) {\n\t var description = item.data.description;\n\t var stackInfo = item.stackInfo;\n\t var custom = item.custom;\n\t\n\t var guess = errorParser.guessErrorClass(stackInfo.message);\n\t var className = stackInfo.name || guess[0];\n\t var message = guess[1];\n\t var trace = {\n\t exception: {\n\t 'class': className,\n\t message: message\n\t }\n\t };\n\t\n\t if (description) {\n\t trace.exception.description = description;\n\t }\n\t\n\t // Transform a TraceKit stackInfo object into a Rollbar trace\n\t var stack = stackInfo.stack;\n\t if (stack && stack.length === 0 && item._unhandledStackInfo && item._unhandledStackInfo.stack) {\n\t stack = item._unhandledStackInfo.stack;\n\t }\n\t if (stack) {\n\t if (stack.length === 0) {\n\t trace.exception.stack = stackInfo.rawStack;\n\t trace.exception.raw = String(stackInfo.rawException);\n\t }\n\t var stackFrame;\n\t var frame;\n\t var code;\n\t var pre;\n\t var post;\n\t var contextLength;\n\t var i, mid;\n\t\n\t trace.frames = [];\n\t for (i = 0; i < stack.length; ++i) {\n\t stackFrame = stack[i];\n\t frame = {\n\t filename: stackFrame.url ? _.sanitizeUrl(stackFrame.url) : '(unknown)',\n\t lineno: stackFrame.line || null,\n\t method: (!stackFrame.func || stackFrame.func === '?') ? '[anonymous]' : stackFrame.func,\n\t colno: stackFrame.column\n\t };\n\t if (frame.method && frame.method.endsWith && frame.method.endsWith('_rollbar_wrapped')) {\n\t continue;\n\t }\n\t\n\t code = pre = post = null;\n\t contextLength = stackFrame.context ? stackFrame.context.length : 0;\n\t if (contextLength) {\n\t mid = Math.floor(contextLength / 2);\n\t pre = stackFrame.context.slice(0, mid);\n\t code = stackFrame.context[mid];\n\t post = stackFrame.context.slice(mid);\n\t }\n\t\n\t if (code) {\n\t frame.code = code;\n\t }\n\t\n\t if (pre || post) {\n\t frame.context = {};\n\t if (pre && pre.length) {\n\t frame.context.pre = pre;\n\t }\n\t if (post && post.length) {\n\t frame.context.post = post;\n\t }\n\t }\n\t\n\t if (stackFrame.args) {\n\t frame.args = stackFrame.args;\n\t }\n\t\n\t trace.frames.push(frame);\n\t }\n\t\n\t // NOTE(cory): reverse the frames since rollbar.com expects the most recent call last\n\t trace.frames.reverse();\n\t\n\t if (custom) {\n\t trace.extra = _.extend(true, {}, custom);\n\t }\n\t _.set(item, 'data.body', {trace: trace});\n\t callback(null, item);\n\t } else {\n\t item.message = className + ': ' + message;\n\t addBodyMessage(item, options, callback);\n\t }\n\t}\n\t\n\tfunction scrubPayload(item, options, callback) {\n\t var scrubFields = options.scrubFields;\n\t item.data = _.scrub(item.data, scrubFields);\n\t callback(null, item);\n\t}\n\t\n\tmodule.exports = {\n\t handleItemWithError: handleItemWithError,\n\t ensureItemHasSomethingToSay: ensureItemHasSomethingToSay,\n\t addBaseInfo: addBaseInfo,\n\t addRequestInfo: addRequestInfo,\n\t addClientInfo: addClientInfo,\n\t addPluginInfo: addPluginInfo,\n\t addBody: addBody,\n\t scrubPayload: scrubPayload\n\t};\n\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar ErrorStackParser = __webpack_require__(21);\n\t\n\tvar UNKNOWN_FUNCTION = '?';\n\tvar ERR_CLASS_REGEXP = new RegExp('^(([a-zA-Z0-9-_$ ]*): *)?(Uncaught )?([a-zA-Z0-9-_$ ]*): ');\n\t\n\tfunction guessFunctionName() {\n\t return UNKNOWN_FUNCTION;\n\t}\n\t\n\t\n\tfunction gatherContext() {\n\t return null;\n\t}\n\t\n\t\n\tfunction Frame(stackFrame) {\n\t var data = {};\n\t\n\t data._stackFrame = stackFrame;\n\t\n\t data.url = stackFrame.fileName;\n\t data.line = stackFrame.lineNumber;\n\t data.func = stackFrame.functionName;\n\t data.column = stackFrame.columnNumber;\n\t data.args = stackFrame.args;\n\t\n\t data.context = gatherContext(data.url, data.line);\n\t\n\t return data;\n\t}\n\t\n\t\n\tfunction Stack(exception) {\n\t function getStack() {\n\t var parserStack = [];\n\t var exc;\n\t\n\t if (!exception.stack) {\n\t try {\n\t throw exception;\n\t } catch (e) {\n\t exc = e;\n\t }\n\t } else {\n\t exc = exception;\n\t }\n\t\n\t try {\n\t parserStack = ErrorStackParser.parse(exc);\n\t } catch(e) {\n\t parserStack = [];\n\t }\n\t\n\t var stack = [];\n\t\n\t for (var i = 0; i < parserStack.length; i++) {\n\t stack.push(new Frame(parserStack[i]));\n\t }\n\t\n\t return stack;\n\t }\n\t\n\t return {\n\t stack: getStack(),\n\t message: exception.message,\n\t name: exception.name,\n\t rawStack: exception.stack,\n\t rawException: exception\n\t };\n\t}\n\t\n\t\n\tfunction parse(e) {\n\t return new Stack(e);\n\t}\n\t\n\t\n\tfunction guessErrorClass(errMsg) {\n\t if (!errMsg || !errMsg.match) {\n\t return ['Unknown error. There was no error message to display.', ''];\n\t }\n\t var errClassMatch = errMsg.match(ERR_CLASS_REGEXP);\n\t var errClass = '(unknown)';\n\t\n\t if (errClassMatch) {\n\t errClass = errClassMatch[errClassMatch.length - 1];\n\t errMsg = errMsg.replace((errClassMatch[errClassMatch.length - 2] || '') + errClass + ':', '');\n\t errMsg = errMsg.replace(/(^[\\s]+|[\\s]+$)/g, '');\n\t }\n\t return [errClass, errMsg];\n\t}\n\t\n\t\n\tmodule.exports = {\n\t guessFunctionName: guessFunctionName,\n\t guessErrorClass: guessErrorClass,\n\t gatherContext: gatherContext,\n\t parse: parse,\n\t Stack: Stack,\n\t Frame: Frame\n\t};\n\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (root, factory) {\n\t 'use strict';\n\t // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\t\n\t /* istanbul ignore next */\n\t if (true) {\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(22)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t } else if (typeof exports === 'object') {\n\t module.exports = factory(require('stackframe'));\n\t } else {\n\t root.ErrorStackParser = factory(root.StackFrame);\n\t }\n\t}(this, function ErrorStackParser(StackFrame) {\n\t 'use strict';\n\t\n\t var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n\t var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n\t var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\t\n\t function _map(array, fn, thisArg) {\n\t if (typeof Array.prototype.map === 'function') {\n\t return array.map(fn, thisArg);\n\t } else {\n\t var output = new Array(array.length);\n\t for (var i = 0; i < array.length; i++) {\n\t output[i] = fn.call(thisArg, array[i]);\n\t }\n\t return output;\n\t }\n\t }\n\t\n\t function _filter(array, fn, thisArg) {\n\t if (typeof Array.prototype.filter === 'function') {\n\t return array.filter(fn, thisArg);\n\t } else {\n\t var output = [];\n\t for (var i = 0; i < array.length; i++) {\n\t if (fn.call(thisArg, array[i])) {\n\t output.push(array[i]);\n\t }\n\t }\n\t return output;\n\t }\n\t }\n\t\n\t return {\n\t /**\n\t * Given an Error object, extract the most information from it.\n\t * @param error {Error}\n\t * @return Array[StackFrame]\n\t */\n\t parse: function ErrorStackParser$$parse(error) {\n\t if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n\t return this.parseOpera(error);\n\t } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n\t return this.parseV8OrIE(error);\n\t } else if (error.stack) {\n\t return this.parseFFOrSafari(error);\n\t } else {\n\t throw new Error('Cannot parse given Error object');\n\t }\n\t },\n\t\n\t /**\n\t * Separate line and column numbers from a URL-like string.\n\t * @param urlLike String\n\t * @return Array[String]\n\t */\n\t extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n\t // Fail-fast but return locations like \"(native)\"\n\t if (urlLike.indexOf(':') === -1) {\n\t return [urlLike];\n\t }\n\t\n\t var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n\t var lastNumber = locationParts.pop();\n\t var possibleNumber = locationParts[locationParts.length - 1];\n\t if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n\t var lineNumber = locationParts.pop();\n\t return [locationParts.join(':'), lineNumber, lastNumber];\n\t } else {\n\t return [locationParts.join(':'), lastNumber, undefined];\n\t }\n\t },\n\t\n\t parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n\t var filtered = _filter(error.stack.split('\\n'), function (line) {\n\t return !!line.match(CHROME_IE_STACK_REGEXP);\n\t }, this);\n\t\n\t return _map(filtered, function (line) {\n\t if (line.indexOf('(eval ') > -1) {\n\t // Throw away eval information until we implement stacktrace.js/stackframe#8\n\t line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n\t }\n\t var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n\t var locationParts = this.extractLocation(tokens.pop());\n\t var functionName = tokens.join(' ') || undefined;\n\t var fileName = locationParts[0] === 'eval' ? undefined : locationParts[0];\n\t\n\t return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n\t }, this);\n\t },\n\t\n\t parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n\t var filtered = _filter(error.stack.split('\\n'), function (line) {\n\t return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n\t }, this);\n\t\n\t return _map(filtered, function (line) {\n\t // Throw away eval information until we implement stacktrace.js/stackframe#8\n\t if (line.indexOf(' > eval') > -1) {\n\t line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n\t }\n\t\n\t if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n\t // Safari eval frames only have function names and nothing else\n\t return new StackFrame(line);\n\t } else {\n\t var tokens = line.split('@');\n\t var locationParts = this.extractLocation(tokens.pop());\n\t var functionName = tokens.shift() || undefined;\n\t return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n\t }\n\t }, this);\n\t },\n\t\n\t parseOpera: function ErrorStackParser$$parseOpera(e) {\n\t if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n\t e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n\t return this.parseOpera9(e);\n\t } else if (!e.stack) {\n\t return this.parseOpera10(e);\n\t } else {\n\t return this.parseOpera11(e);\n\t }\n\t },\n\t\n\t parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n\t var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n\t var lines = e.message.split('\\n');\n\t var result = [];\n\t\n\t for (var i = 2, len = lines.length; i < len; i += 2) {\n\t var match = lineRE.exec(lines[i]);\n\t if (match) {\n\t result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n\t }\n\t }\n\t\n\t return result;\n\t },\n\t\n\t parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n\t var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n\t var lines = e.stacktrace.split('\\n');\n\t var result = [];\n\t\n\t for (var i = 0, len = lines.length; i < len; i += 2) {\n\t var match = lineRE.exec(lines[i]);\n\t if (match) {\n\t result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n\t }\n\t }\n\t\n\t return result;\n\t },\n\t\n\t // Opera 10.65+ Error.stack very similar to FF/Safari\n\t parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n\t var filtered = _filter(error.stack.split('\\n'), function (line) {\n\t return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n\t !line.match(/^Error created at/);\n\t }, this);\n\t\n\t return _map(filtered, function (line) {\n\t var tokens = line.split('@');\n\t var locationParts = this.extractLocation(tokens.pop());\n\t var functionCall = (tokens.shift() || '');\n\t var functionName = functionCall\n\t .replace(//, '$2')\n\t .replace(/\\([^\\)]*\\)/g, '') || undefined;\n\t var argsRaw;\n\t if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n\t argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n\t }\n\t var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n\t return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n\t }, this);\n\t }\n\t };\n\t}));\n\t\n\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (root, factory) {\n\t 'use strict';\n\t // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\t\n\t /* istanbul ignore next */\n\t if (true) {\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t } else if (typeof exports === 'object') {\n\t module.exports = factory();\n\t } else {\n\t root.StackFrame = factory();\n\t }\n\t}(this, function () {\n\t 'use strict';\n\t function _isNumber(n) {\n\t return !isNaN(parseFloat(n)) && isFinite(n);\n\t }\n\t\n\t function StackFrame(functionName, args, fileName, lineNumber, columnNumber, source) {\n\t if (functionName !== undefined) {\n\t this.setFunctionName(functionName);\n\t }\n\t if (args !== undefined) {\n\t this.setArgs(args);\n\t }\n\t if (fileName !== undefined) {\n\t this.setFileName(fileName);\n\t }\n\t if (lineNumber !== undefined) {\n\t this.setLineNumber(lineNumber);\n\t }\n\t if (columnNumber !== undefined) {\n\t this.setColumnNumber(columnNumber);\n\t }\n\t if (source !== undefined) {\n\t this.setSource(source);\n\t }\n\t }\n\t\n\t StackFrame.prototype = {\n\t getFunctionName: function () {\n\t return this.functionName;\n\t },\n\t setFunctionName: function (v) {\n\t this.functionName = String(v);\n\t },\n\t\n\t getArgs: function () {\n\t return this.args;\n\t },\n\t setArgs: function (v) {\n\t if (Object.prototype.toString.call(v) !== '[object Array]') {\n\t throw new TypeError('Args must be an Array');\n\t }\n\t this.args = v;\n\t },\n\t\n\t // NOTE: Property name may be misleading as it includes the path,\n\t // but it somewhat mirrors V8's JavaScriptStackTraceApi\n\t // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's\n\t // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14\n\t getFileName: function () {\n\t return this.fileName;\n\t },\n\t setFileName: function (v) {\n\t this.fileName = String(v);\n\t },\n\t\n\t getLineNumber: function () {\n\t return this.lineNumber;\n\t },\n\t setLineNumber: function (v) {\n\t if (!_isNumber(v)) {\n\t throw new TypeError('Line Number must be a Number');\n\t }\n\t this.lineNumber = Number(v);\n\t },\n\t\n\t getColumnNumber: function () {\n\t return this.columnNumber;\n\t },\n\t setColumnNumber: function (v) {\n\t if (!_isNumber(v)) {\n\t throw new TypeError('Column Number must be a Number');\n\t }\n\t this.columnNumber = Number(v);\n\t },\n\t\n\t getSource: function () {\n\t return this.source;\n\t },\n\t setSource: function (v) {\n\t this.source = String(v);\n\t },\n\t\n\t toString: function() {\n\t var functionName = this.getFunctionName() || '{anonymous}';\n\t var args = '(' + (this.getArgs() || []).join(',') + ')';\n\t var fileName = this.getFileName() ? ('@' + this.getFileName()) : '';\n\t var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : '';\n\t var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : '';\n\t return functionName + args + fileName + lineNumber + columnNumber;\n\t }\n\t };\n\t\n\t return StackFrame;\n\t}));\n\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\t\n\tfunction itemToPayload(item, options, callback) {\n\t var payloadOptions = options.payload || {};\n\t if (payloadOptions.body) {\n\t delete payloadOptions.body;\n\t }\n\t\n\t var data = _.extend(true, {}, item.data, payloadOptions);\n\t if (item._isUncaught) {\n\t data._isUncaught = true;\n\t }\n\t if (item._originalArgs) {\n\t data._originalArgs = item._originalArgs;\n\t }\n\t callback(null, data);\n\t}\n\t\n\tfunction addTelemetryData(item, options, callback) {\n\t if (item.telemetryEvents) {\n\t _.set(item, 'data.body.telemetry', item.telemetryEvents);\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction addMessageWithError(item, options, callback) {\n\t if (!item.message) {\n\t callback(null, item);\n\t return;\n\t }\n\t var tracePath = 'data.body.trace_chain.0';\n\t var trace = _.get(item, tracePath);\n\t if (!trace) {\n\t tracePath = 'data.body.trace';\n\t trace = _.get(item, tracePath);\n\t }\n\t if (trace) {\n\t if (!(trace.exception && trace.exception.description)) {\n\t _.set(item, tracePath+'.exception.description', item.message);\n\t callback(null, item);\n\t return;\n\t }\n\t var extra = _.get(item, tracePath+'.extra') || {};\n\t var newExtra = _.extend(true, {}, extra, {message: item.message});\n\t _.set(item, tracePath+'.extra', newExtra);\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction userTransform(logger) {\n\t return function(item, options, callback) {\n\t var newItem = _.extend(true, {}, item);\n\t try {\n\t if (_.isFunction(options.transform)) {\n\t options.transform(newItem.data);\n\t }\n\t } catch (e) {\n\t options.transform = null;\n\t logger.error('Error while calling custom transform() function. Removing custom transform().', e);\n\t callback(null, item);\n\t return;\n\t }\n\t callback(null, newItem);\n\t }\n\t}\n\t\n\tfunction addConfigToPayload(item, options, callback) {\n\t if (!options.sendConfig) {\n\t return callback(null, item);\n\t }\n\t var configKey = '_rollbarConfig';\n\t var custom = _.get(item, 'data.custom') || {};\n\t custom[configKey] = options;\n\t item.data.custom = custom;\n\t callback(null, item);\n\t}\n\t\n\tmodule.exports = {\n\t itemToPayload: itemToPayload,\n\t addTelemetryData: addTelemetryData,\n\t addMessageWithError: addMessageWithError,\n\t userTransform: userTransform,\n\t addConfigToPayload: addConfigToPayload\n\t};\n\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\t\n\tfunction checkIgnore(item, settings) {\n\t if (_.get(settings, 'plugins.jquery.ignoreAjaxErrors')) {\n\t return !_.get(item, 'body.message.extra.isAjax');\n\t }\n\t return true;\n\t}\n\t\n\tmodule.exports = {\n\t checkIgnore: checkIgnore\n\t};\n\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\t\n\tfunction checkLevel(item, settings) {\n\t var level = item.level;\n\t var levelVal = _.LEVELS[level] || 0;\n\t var reportLevel = settings.reportLevel;\n\t var reportLevelVal = _.LEVELS[reportLevel] || 0;\n\t\n\t if (levelVal < reportLevelVal) {\n\t return false;\n\t }\n\t return true;\n\t}\n\t\n\tfunction userCheckIgnore(logger) {\n\t return function(item, settings) {\n\t var isUncaught = !!item._isUncaught;\n\t delete item._isUncaught;\n\t var args = item._originalArgs;\n\t delete item._originalArgs;\n\t try {\n\t if (_.isFunction(settings.onSendCallback)) {\n\t settings.onSendCallback(isUncaught, args, item);\n\t }\n\t } catch (e) {\n\t settings.onSendCallback = null;\n\t logger.error('Error while calling onSendCallback, removing', e);\n\t }\n\t try {\n\t if (_.isFunction(settings.checkIgnore) && settings.checkIgnore(isUncaught, args, item)) {\n\t return false;\n\t }\n\t } catch (e) {\n\t settings.checkIgnore = null;\n\t logger.error('Error while calling custom checkIgnore(), removing', e);\n\t }\n\t return true;\n\t }\n\t}\n\t\n\tfunction urlIsNotBlacklisted(logger) {\n\t return function(item, settings) {\n\t return !urlIsOnAList(item, settings, 'blacklist', logger);\n\t }\n\t}\n\t\n\tfunction urlIsWhitelisted(logger) {\n\t return function(item, settings) {\n\t return urlIsOnAList(item, settings, 'whitelist', logger);\n\t }\n\t}\n\t\n\tfunction urlIsOnAList(item, settings, whiteOrBlack, logger) {\n\t // whitelist is the default\n\t var black = false;\n\t if (whiteOrBlack === 'blacklist') {\n\t black = true;\n\t }\n\t var list, trace, frame, filename, frameLength, url, listLength, urlRegex;\n\t var i, j;\n\t\n\t try {\n\t list = black ? settings.hostBlackList : settings.hostWhiteList;\n\t listLength = list && list.length;\n\t trace = _.get(item, 'body.trace');\n\t\n\t // These two checks are important to come first as they are defaults\n\t // in case the list is missing or the trace is missing or not well-formed\n\t if (!list || listLength === 0) {\n\t return !black;\n\t }\n\t if (!trace || !trace.frames || trace.frames.length === 0) {\n\t return !black;\n\t }\n\t\n\t frameLength = trace.frames.length;\n\t for (i = 0; i < frameLength; i++) {\n\t frame = trace.frames[i];\n\t filename = frame.filename;\n\t\n\t if (!_.isType(filename, 'string')) {\n\t return !black;\n\t }\n\t\n\t for (j = 0; j < listLength; j++) {\n\t url = list[j];\n\t urlRegex = new RegExp(url);\n\t\n\t if (urlRegex.test(filename)) {\n\t return true;\n\t }\n\t }\n\t }\n\t } catch (e)\n\t /* istanbul ignore next */\n\t {\n\t if (black) {\n\t settings.hostBlackList = null;\n\t } else {\n\t settings.hostWhiteList = null;\n\t }\n\t var listName = black ? 'hostBlackList' : 'hostWhiteList';\n\t logger.error('Error while reading your configuration\\'s ' + listName + ' option. Removing custom ' + listName + '.', e);\n\t return !black;\n\t }\n\t return false;\n\t}\n\t\n\tfunction messageIsIgnored(logger) {\n\t return function(item, settings) {\n\t var exceptionMessage, i, ignoredMessages,\n\t len, messageIsIgnored, rIgnoredMessage,\n\t body, traceMessage, bodyMessage;\n\t\n\t try {\n\t messageIsIgnored = false;\n\t ignoredMessages = settings.ignoredMessages;\n\t\n\t if (!ignoredMessages || ignoredMessages.length === 0) {\n\t return true;\n\t }\n\t\n\t body = item.body;\n\t traceMessage = _.get(body, 'trace.exception.message');\n\t bodyMessage = _.get(body, 'message.body');\n\t\n\t exceptionMessage = traceMessage || bodyMessage;\n\t\n\t if (!exceptionMessage){\n\t return true;\n\t }\n\t\n\t len = ignoredMessages.length;\n\t for (i = 0; i < len; i++) {\n\t rIgnoredMessage = new RegExp(ignoredMessages[i], 'gi');\n\t messageIsIgnored = rIgnoredMessage.test(exceptionMessage);\n\t\n\t if (messageIsIgnored) {\n\t break;\n\t }\n\t }\n\t } catch(e)\n\t /* istanbul ignore next */\n\t {\n\t settings.ignoredMessages = null;\n\t logger.error('Error while reading your configuration\\'s ignoredMessages option. Removing custom ignoredMessages.');\n\t }\n\t\n\t return !messageIsIgnored;\n\t }\n\t}\n\t\n\tmodule.exports = {\n\t checkLevel: checkLevel,\n\t userCheckIgnore: userCheckIgnore,\n\t urlIsNotBlacklisted: urlIsNotBlacklisted,\n\t urlIsWhitelisted: urlIsWhitelisted,\n\t messageIsIgnored: messageIsIgnored\n\t};\n\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\tvar urlparser = __webpack_require__(18);\n\tvar domUtil = __webpack_require__(27);\n\t\n\tvar defaults = {\n\t network: true,\n\t networkResponseHeaders: false,\n\t networkResponseBody: false,\n\t networkRequestBody: false,\n\t log: true,\n\t dom: true,\n\t navigation: true,\n\t connectivity: true\n\t};\n\t\n\tfunction replace(obj, name, replacement, replacements, type) {\n\t var orig = obj[name];\n\t obj[name] = replacement(orig);\n\t if (replacements) {\n\t replacements[type].push([obj, name, orig]);\n\t }\n\t}\n\t\n\tfunction restore(replacements, type) {\n\t var b;\n\t while (replacements[type].length) {\n\t b = replacements[type].shift();\n\t b[0][b[1]] = b[2];\n\t }\n\t}\n\t\n\tfunction Instrumenter(options, telemeter, rollbar, _window, _document) {\n\t var autoInstrument = options.autoInstrument;\n\t if (options.enabled === false || autoInstrument === false) {\n\t this.autoInstrument = {};\n\t } else {\n\t if (!_.isType(autoInstrument, 'object')) {\n\t autoInstrument = defaults;\n\t }\n\t this.autoInstrument = _.extend(true, {}, defaults, autoInstrument);\n\t }\n\t this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n\t this.telemetryScrubber = options.telemetryScrubber;\n\t this.telemeter = telemeter;\n\t this.rollbar = rollbar;\n\t this._window = _window || {};\n\t this._document = _document || {};\n\t this.replacements = {\n\t network: [],\n\t log: [],\n\t navigation: [],\n\t connectivity: []\n\t };\n\t this.eventRemovers = {\n\t dom: [],\n\t connectivity: []\n\t };\n\t\n\t this._location = this._window.location;\n\t this._lastHref = this._location && this._location.href;\n\t}\n\t\n\tInstrumenter.prototype.configure = function(options) {\n\t var autoInstrument = options.autoInstrument;\n\t var oldSettings = _.extend(true, {}, this.autoInstrument);\n\t if (options.enabled === false || autoInstrument === false) {\n\t this.autoInstrument = {};\n\t } else {\n\t if (!_.isType(autoInstrument, 'object')) {\n\t autoInstrument = defaults;\n\t }\n\t this.autoInstrument = _.extend(true, {}, defaults, autoInstrument);\n\t }\n\t this.instrument(oldSettings);\n\t if (options.scrubTelemetryInputs !== undefined) {\n\t this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n\t }\n\t if (options.telemetryScrubber !== undefined) {\n\t this.telemetryScrubber = options.telemetryScrubber;\n\t }\n\t};\n\t\n\tInstrumenter.prototype.instrument = function(oldSettings) {\n\t if (this.autoInstrument.network && !(oldSettings && oldSettings.network)) {\n\t this.instrumentNetwork();\n\t } else if (!this.autoInstrument.network && oldSettings && oldSettings.network) {\n\t this.deinstrumentNetwork();\n\t }\n\t\n\t if (this.autoInstrument.log && !(oldSettings && oldSettings.log)) {\n\t this.instrumentConsole();\n\t } else if (!this.autoInstrument.log && oldSettings && oldSettings.log) {\n\t this.deinstrumentConsole();\n\t }\n\t\n\t if (this.autoInstrument.dom && !(oldSettings && oldSettings.dom)) {\n\t this.instrumentDom();\n\t } else if (!this.autoInstrument.dom && oldSettings && oldSettings.dom) {\n\t this.deinstrumentDom();\n\t }\n\t\n\t if (this.autoInstrument.navigation && !(oldSettings && oldSettings.navigation)) {\n\t this.instrumentNavigation();\n\t } else if (!this.autoInstrument.navigation && oldSettings && oldSettings.navigation) {\n\t this.deinstrumentNavigation();\n\t }\n\t\n\t if (this.autoInstrument.connectivity && !(oldSettings && oldSettings.connectivity)) {\n\t this.instrumentConnectivity();\n\t } else if (!this.autoInstrument.connectivity && oldSettings && oldSettings.connectivity) {\n\t this.deinstrumentConnectivity();\n\t }\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentNetwork = function() {\n\t restore(this.replacements, 'network');\n\t};\n\t\n\tInstrumenter.prototype.instrumentNetwork = function() {\n\t var self = this;\n\t\n\t function wrapProp(prop, xhr) {\n\t if (prop in xhr && _.isFunction(xhr[prop])) {\n\t replace(xhr, prop, function(orig) {\n\t return self.rollbar.wrap(orig);\n\t });\n\t }\n\t }\n\t\n\t if ('XMLHttpRequest' in this._window) {\n\t var xhrp = this._window.XMLHttpRequest.prototype;\n\t replace(xhrp, 'open', function(orig) {\n\t return function(method, url) {\n\t if (_.isType(url, 'string')) {\n\t this.__rollbar_xhr = {\n\t method: method,\n\t url: url,\n\t status_code: null,\n\t start_time_ms: _.now(),\n\t end_time_ms: null\n\t };\n\t }\n\t return orig.apply(this, arguments);\n\t };\n\t }, this.replacements, 'network');\n\t\n\t replace(xhrp, 'send', function(orig) {\n\t /* eslint-disable no-unused-vars */\n\t return function(data) {\n\t /* eslint-enable no-unused-vars */\n\t var xhr = this;\n\t\n\t function onreadystatechangeHandler() {\n\t if (xhr.__rollbar_xhr && (xhr.readyState === 1 || xhr.readyState === 4)) {\n\t if (xhr.__rollbar_xhr.status_code === null) {\n\t xhr.__rollbar_xhr.status_code = 0;\n\t var requestData = null;\n\t if (self.autoInstrument.networkRequestBody) {\n\t requestData = data;\n\t }\n\t xhr.__rollbar_event = self.telemeter.captureNetwork(xhr.__rollbar_xhr, 'xhr', undefined, requestData);\n\t }\n\t if (xhr.readyState === 1) {\n\t xhr.__rollbar_xhr.start_time_ms = _.now();\n\t } else {\n\t xhr.__rollbar_xhr.end_time_ms = _.now();\n\t\n\t var headers = null;\n\t if (self.autoInstrument.networkResponseHeaders) {\n\t var headersConfig = self.autoInstrument.networkResponseHeaders;\n\t headers = {};\n\t try {\n\t var header, i;\n\t if (headersConfig === true) {\n\t var allHeaders = xhr.getAllResponseHeaders();\n\t if (allHeaders) {\n\t var arr = allHeaders.trim().split(/[\\r\\n]+/);\n\t var parts, value;\n\t for (i=0; i < arr.length; i++) {\n\t parts = arr[i].split(': ');\n\t header = parts.shift();\n\t value = parts.join(': ');\n\t headers[header] = value;\n\t }\n\t }\n\t } else {\n\t for (i=0; i < headersConfig.length; i++) {\n\t header = headersConfig[i];\n\t headers[header] = xhr.getResponseHeader(header);\n\t }\n\t }\n\t } catch (e) {\n\t /* we ignore the errors here that could come from different\n\t * browser issues with the xhr methods */\n\t }\n\t }\n\t var body = null;\n\t if (self.autoInstrument.networkResponseBody) {\n\t try {\n\t body = xhr.responseText;\n\t } catch (e) {\n\t /* ignore errors from reading responseText */\n\t }\n\t }\n\t var response = null;\n\t if (body || headers) {\n\t response = {};\n\t if (body) {\n\t response.body = body;\n\t }\n\t if (headers) {\n\t response.headers = headers;\n\t }\n\t }\n\t if (response) {\n\t xhr.__rollbar_xhr.response = response;\n\t }\n\t }\n\t try {\n\t var code = xhr.status;\n\t code = code === 1223 ? 204 : code;\n\t xhr.__rollbar_xhr.status_code = code;\n\t xhr.__rollbar_event.level = self.telemeter.levelFromStatus(code);\n\t } catch (e) {\n\t /* ignore possible exception from xhr.status */\n\t }\n\t }\n\t }\n\t\n\t wrapProp('onload', xhr);\n\t wrapProp('onerror', xhr);\n\t wrapProp('onprogress', xhr);\n\t\n\t if ('onreadystatechange' in xhr && _.isFunction(xhr.onreadystatechange)) {\n\t replace(xhr, 'onreadystatechange', function(orig) {\n\t return self.rollbar.wrap(orig, undefined, onreadystatechangeHandler);\n\t });\n\t } else {\n\t xhr.onreadystatechange = onreadystatechangeHandler;\n\t }\n\t return orig.apply(this, arguments);\n\t }\n\t }, this.replacements, 'network');\n\t }\n\t\n\t if ('fetch' in this._window) {\n\t replace(this._window, 'fetch', function(orig) {\n\t /* eslint-disable no-unused-vars */\n\t return function(fn, t) {\n\t /* eslint-enable no-unused-vars */\n\t var args = new Array(arguments.length);\n\t for (var i=0, len=args.length; i < len; i++) {\n\t args[i] = arguments[i];\n\t }\n\t var input = args[0];\n\t var method = 'GET';\n\t var url;\n\t if (_.isType(input, 'string')) {\n\t url = input;\n\t } else if (input) {\n\t url = input.url;\n\t if (input.method) {\n\t method = input.method;\n\t }\n\t }\n\t if (args[1] && args[1].method) {\n\t method = args[1].method;\n\t }\n\t var metadata = {\n\t method: method,\n\t url: url,\n\t status_code: null,\n\t start_time_ms: _.now(),\n\t end_time_ms: null\n\t };\n\t var requestData = null;\n\t if (self.autoInstrument.networkRequestBody) {\n\t if (args[1] && args[1].body) {\n\t requestData = args[1].body;\n\t } else if (args[0] && !_.isType(args[0], 'string') && args[0].body) {\n\t requestData = args[0].body;\n\t }\n\t }\n\t self.telemeter.captureNetwork(metadata, 'fetch', undefined, requestData);\n\t return orig.apply(this, args).then(function (resp) {\n\t metadata.end_time_ms = _.now();\n\t metadata.status_code = resp.status;\n\t var headers = null;\n\t if (self.autoInstrument.networkResponseHeaders) {\n\t var headersConfig = self.autoInstrument.networkResponseHeaders;\n\t headers = {};\n\t try {\n\t if (headersConfig === true) {\n\t // This is unsupported in IE so we can't do it\n\t /*\n\t var allHeaders = resp.headers.entries();\n\t for (var pair of allHeaders) {\n\t headers[pair[0]] = pair[1];\n\t }\n\t */\n\t } else {\n\t for (var i=0; i < headersConfig.length; i++) {\n\t var header = headersConfig[i];\n\t headers[header] = resp.headers.get(header);\n\t }\n\t }\n\t } catch (e) {\n\t /* ignore probable IE errors */\n\t }\n\t }\n\t var response = null;\n\t if (headers) {\n\t response = {\n\t headers: headers\n\t };\n\t }\n\t if (response) {\n\t metadata.response = response;\n\t }\n\t return resp;\n\t });\n\t };\n\t }, this.replacements, 'network');\n\t }\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentConsole = function() {\n\t if (!('console' in this._window && this._window.console.log)) {\n\t return;\n\t }\n\t var b;\n\t while (this.replacements['log'].length) {\n\t b = this.replacements['log'].shift();\n\t this._window.console[b[0]] = b[1];\n\t }\n\t};\n\t\n\tInstrumenter.prototype.instrumentConsole = function() {\n\t if (!('console' in this._window && this._window.console.log)) {\n\t return;\n\t }\n\t\n\t var self = this;\n\t var c = this._window.console;\n\t\n\t function wrapConsole(method) {\n\t var orig = c[method];\n\t var origConsole = c;\n\t var level = method === 'warn' ? 'warning' : method;\n\t c[method] = function() {\n\t var args = Array.prototype.slice.call(arguments);\n\t var message = _.formatArgsAsString(args);\n\t self.telemeter.captureLog(message, level);\n\t if (orig) {\n\t Function.prototype.apply.call(orig, origConsole, args);\n\t }\n\t };\n\t self.replacements['log'].push([method, orig]);\n\t }\n\t var methods = ['debug','info','warn','error','log'];\n\t for (var i=0, len=methods.length; i < len; i++) {\n\t wrapConsole(methods[i]);\n\t }\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentDom = function() {\n\t if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n\t return;\n\t }\n\t this.removeListeners('dom');\n\t};\n\t\n\tInstrumenter.prototype.instrumentDom = function() {\n\t if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n\t return;\n\t }\n\t var clickHandler = this.handleClick.bind(this);\n\t var blurHandler = this.handleBlur.bind(this);\n\t this.addListener('dom', this._window, 'click', 'onclick', clickHandler, true);\n\t this.addListener('dom', this._window, 'blur', 'onfocusout', blurHandler, true);\n\t};\n\t\n\tInstrumenter.prototype.handleClick = function(evt) {\n\t try {\n\t var e = domUtil.getElementFromEvent(evt, this._document);\n\t var hasTag = e && e.tagName;\n\t var anchorOrButton = domUtil.isDescribedElement(e, 'a') || domUtil.isDescribedElement(e, 'button');\n\t if (hasTag && (anchorOrButton || domUtil.isDescribedElement(e, 'input', ['button', 'submit']))) {\n\t this.captureDomEvent('click', e);\n\t } else if (domUtil.isDescribedElement(e, 'input', ['checkbox', 'radio'])) {\n\t this.captureDomEvent('input', e, e.value, e.checked);\n\t }\n\t } catch (exc) {\n\t // TODO: Not sure what to do here\n\t }\n\t};\n\t\n\tInstrumenter.prototype.handleBlur = function(evt) {\n\t try {\n\t var e = domUtil.getElementFromEvent(evt, this._document);\n\t if (e && e.tagName) {\n\t if (domUtil.isDescribedElement(e, 'textarea')) {\n\t this.captureDomEvent('input', e, e.value);\n\t } else if (domUtil.isDescribedElement(e, 'select') && e.options && e.options.length) {\n\t this.handleSelectInputChanged(e);\n\t } else if (domUtil.isDescribedElement(e, 'input') && !domUtil.isDescribedElement(e, 'input', ['button', 'submit', 'hidden', 'checkbox', 'radio'])) {\n\t this.captureDomEvent('input', e, e.value);\n\t }\n\t }\n\t } catch (exc) {\n\t // TODO: Not sure what to do here\n\t }\n\t};\n\t\n\tInstrumenter.prototype.handleSelectInputChanged = function(elem) {\n\t if (elem.multiple) {\n\t for (var i = 0; i < elem.options.length; i++) {\n\t if (elem.options[i].selected) {\n\t this.captureDomEvent('input', elem, elem.options[i].value);\n\t }\n\t }\n\t } else if (elem.selectedIndex >= 0 && elem.options[elem.selectedIndex]) {\n\t this.captureDomEvent('input', elem, elem.options[elem.selectedIndex].value);\n\t }\n\t};\n\t\n\tInstrumenter.prototype.captureDomEvent = function(subtype, element, value, isChecked) {\n\t if (value !== undefined) {\n\t if (this.scrubTelemetryInputs || (domUtil.getElementType(element) === 'password')) {\n\t value = '[scrubbed]';\n\t } else if (this.telemetryScrubber) {\n\t var description = domUtil.describeElement(element);\n\t if (this.telemetryScrubber(description)) {\n\t value = '[scrubbed]';\n\t }\n\t }\n\t }\n\t var elementString = domUtil.elementArrayToString(domUtil.treeToArray(element));\n\t this.telemeter.captureDom(subtype, elementString, value, isChecked);\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentNavigation = function() {\n\t var chrome = this._window.chrome;\n\t var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n\t // See https://github.com/angular/angular.js/pull/13945/files\n\t var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n\t if (!hasPushState) {\n\t return;\n\t }\n\t restore(this.replacements, 'navigation');\n\t};\n\t\n\tInstrumenter.prototype.instrumentNavigation = function() {\n\t var chrome = this._window.chrome;\n\t var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n\t // See https://github.com/angular/angular.js/pull/13945/files\n\t var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n\t if (!hasPushState) {\n\t return;\n\t }\n\t var self = this;\n\t replace(this._window, 'onpopstate', function(orig) {\n\t return function() {\n\t var current = self._location.href;\n\t self.handleUrlChange(self._lastHref, current);\n\t if (orig) {\n\t orig.apply(this, arguments);\n\t }\n\t };\n\t }, this.replacements, 'navigation');\n\t\n\t replace(this._window.history, 'pushState', function(orig) {\n\t return function() {\n\t var url = arguments.length > 2 ? arguments[2] : undefined;\n\t if (url) {\n\t self.handleUrlChange(self._lastHref, url + '');\n\t }\n\t return orig.apply(this, arguments);\n\t };\n\t }, this.replacements, 'navigation');\n\t};\n\t\n\tInstrumenter.prototype.handleUrlChange = function(from, to) {\n\t var parsedHref = urlparser.parse(this._location.href);\n\t var parsedTo = urlparser.parse(to);\n\t var parsedFrom = urlparser.parse(from);\n\t this._lastHref = to;\n\t if (parsedHref.protocol === parsedTo.protocol && parsedHref.host === parsedTo.host) {\n\t to = parsedTo.path + (parsedTo.hash || '');\n\t }\n\t if (parsedHref.protocol === parsedFrom.protocol && parsedHref.host === parsedFrom.host) {\n\t from = parsedFrom.path + (parsedFrom.hash || '');\n\t }\n\t this.telemeter.captureNavigation(from, to);\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentConnectivity = function() {\n\t if (!('addEventListener' in this._window || 'body' in this._document)) {\n\t return;\n\t }\n\t if (this._window.addEventListener) {\n\t this.removeListeners('connectivity');\n\t } else {\n\t restore(this.replacements, 'connectivity');\n\t }\n\t};\n\t\n\tInstrumenter.prototype.instrumentConnectivity = function() {\n\t if (!('addEventListener' in this._window || 'body' in this._document)) {\n\t return;\n\t }\n\t if (this._window.addEventListener) {\n\t this.addListener('connectivity', this._window, 'online', undefined, function() {\n\t this.telemeter.captureConnectivityChange('online');\n\t }.bind(this), true);\n\t this.addListener('connectivity', this._window, 'offline', undefined, function() {\n\t this.telemeter.captureConnectivityChange('offline');\n\t }.bind(this), true);\n\t } else {\n\t var self = this;\n\t replace(this._document.body, 'ononline', function(orig) {\n\t return function() {\n\t self.telemeter.captureConnectivityChange('online');\n\t if (orig) {\n\t orig.apply(this, arguments);\n\t }\n\t }\n\t }, this.replacements, 'connectivity');\n\t replace(this._document.body, 'onoffline', function(orig) {\n\t return function() {\n\t self.telemeter.captureConnectivityChange('offline');\n\t if (orig) {\n\t orig.apply(this, arguments);\n\t }\n\t }\n\t }, this.replacements, 'connectivity');\n\t }\n\t};\n\t\n\tInstrumenter.prototype.addListener = function(section, obj, type, altType, handler, capture) {\n\t if (obj.addEventListener) {\n\t obj.addEventListener(type, handler, capture);\n\t this.eventRemovers[section].push(function() {\n\t obj.removeEventListener(type, handler, capture);\n\t });\n\t } else if (altType) {\n\t obj.attachEvent(altType, handler);\n\t this.eventRemovers[section].push(function() {\n\t obj.detachEvent(altType, handler);\n\t });\n\t }\n\t};\n\t\n\tInstrumenter.prototype.removeListeners = function(section) {\n\t var r;\n\t while (this.eventRemovers[section].length) {\n\t r = this.eventRemovers[section].shift();\n\t r();\n\t }\n\t};\n\t\n\tmodule.exports = Instrumenter;\n\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tfunction getElementType(e) {\n\t return (e.getAttribute('type') || '').toLowerCase();\n\t}\n\t\n\tfunction isDescribedElement(element, type, subtypes) {\n\t if (element.tagName.toLowerCase() !== type.toLowerCase()) {\n\t return false;\n\t }\n\t if (!subtypes) {\n\t return true;\n\t }\n\t element = getElementType(element);\n\t for (var i = 0; i < subtypes.length; i++) {\n\t if (subtypes[i] === element) {\n\t return true;\n\t }\n\t }\n\t return false;\n\t}\n\t\n\tfunction getElementFromEvent(evt, doc) {\n\t if (evt.target) {\n\t return evt.target;\n\t }\n\t if (doc && doc.elementFromPoint) {\n\t return doc.elementFromPoint(evt.clientX, evt.clientY);\n\t }\n\t return undefined;\n\t}\n\t\n\tfunction treeToArray(elem) {\n\t var MAX_HEIGHT = 5;\n\t var out = [];\n\t var nextDescription;\n\t for (var height = 0; elem && height < MAX_HEIGHT; height++) {\n\t nextDescription = describeElement(elem);\n\t if (nextDescription.tagName === 'html') {\n\t break;\n\t }\n\t out.unshift(nextDescription);\n\t elem = elem.parentNode;\n\t }\n\t return out;\n\t}\n\t\n\tfunction elementArrayToString(a) {\n\t var MAX_LENGTH = 80;\n\t var separator = ' > ', separatorLength = separator.length;\n\t var out = [], len = 0, nextStr, totalLength;\n\t\n\t for (var i = a.length - 1; i >= 0; i--) {\n\t nextStr = descriptionToString(a[i]);\n\t totalLength = len + (out.length * separatorLength) + nextStr.length;\n\t if (i < a.length - 1 && totalLength >= MAX_LENGTH + 3) {\n\t out.unshift('...');\n\t break;\n\t }\n\t out.unshift(nextStr);\n\t len += nextStr.length;\n\t }\n\t return out.join(separator);\n\t}\n\t\n\tfunction descriptionToString(desc) {\n\t if (!desc || !desc.tagName) {\n\t return '';\n\t }\n\t var out = [desc.tagName];\n\t if (desc.id) {\n\t out.push('#' + desc.id);\n\t }\n\t if (desc.classes) {\n\t out.push('.' + desc.classes.join('.'));\n\t }\n\t for (var i = 0; i < desc.attributes.length; i++) {\n\t out.push('[' + desc.attributes[i].key + '=\"' + desc.attributes[i].value + '\"]');\n\t }\n\t\n\t return out.join('');\n\t}\n\t\n\t/**\n\t * Input: a dom element\n\t * Output: null if tagName is falsey or input is falsey, else\n\t * {\n\t * tagName: String,\n\t * id: String | undefined,\n\t * classes: [String] | undefined,\n\t * attributes: [\n\t * {\n\t * key: OneOf(type, name, title, alt),\n\t * value: String\n\t * }\n\t * ]\n\t * }\n\t */\n\tfunction describeElement(elem) {\n\t if (!elem || !elem.tagName) {\n\t return null;\n\t }\n\t var out = {}, className, key, attr, i;\n\t out.tagName = elem.tagName.toLowerCase();\n\t if (elem.id) {\n\t out.id = elem.id;\n\t }\n\t className = elem.className;\n\t if (className && (typeof className === 'string')) {\n\t out.classes = className.split(/\\s+/);\n\t }\n\t var attributes = ['type', 'name', 'title', 'alt'];\n\t out.attributes = [];\n\t for (i = 0; i < attributes.length; i++) {\n\t key = attributes[i];\n\t attr = elem.getAttribute(key);\n\t if (attr) {\n\t out.attributes.push({key: key, value: attr});\n\t }\n\t }\n\t return out;\n\t}\n\t\n\tmodule.exports = {\n\t describeElement: describeElement,\n\t descriptionToString: descriptionToString,\n\t elementArrayToString: elementArrayToString,\n\t treeToArray: treeToArray,\n\t getElementFromEvent: getElementFromEvent,\n\t isDescribedElement: isDescribedElement,\n\t getElementType: getElementType\n\t};\n\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// rollbar.noconflict.umd.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 9b0a15e3dc209b021f88","'use strict';\n\nvar rollbar = require('../rollbar');\n\nif ((typeof window !== 'undefined') && !window._rollbarStartTime) {\n window._rollbarStartTime = (new Date()).getTime();\n}\n\nmodule.exports = rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/bundles/rollbar.noconflict.js\n// module id = 1\n// module chunks = 0","'use strict';\n\nvar Client = require('../rollbar');\nvar _ = require('../utility');\nvar API = require('../api');\nvar logger = require('./logger');\nvar globals = require('./globalSetup');\n\nvar transport = require('./transport');\nvar urllib = require('./url');\n\nvar transforms = require('./transforms');\nvar sharedTransforms = require('../transforms');\nvar predicates = require('./predicates');\nvar sharedPredicates = require('../predicates');\nvar errorParser = require('./errorParser');\nvar Instrumenter = require('./telemetry');\n\nfunction Rollbar(options, client) {\n this.options = _.extend(true, defaultOptions, options);\n var api = new API(this.options, transport, urllib);\n this.client = client || new Client(this.options, api, logger, 'browser');\n\n var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n var gDocument = (typeof document != 'undefined') && document;\n addTransformsToNotifier(this.client.notifier);\n addPredicatesToQueue(this.client.queue);\n if (this.options.captureUncaught || this.options.handleUncaughtExceptions) {\n globals.captureUncaughtExceptions(gWindow, this);\n globals.wrapGlobals(gWindow, this);\n }\n if (this.options.captureUnhandledRejections || this.options.handleUnhandledRejections) {\n globals.captureUnhandledRejections(gWindow, this);\n }\n\n this.instrumenter = new Instrumenter(this.options, this.client.telemeter, this, gWindow, gDocument);\n this.instrumenter.instrument();\n}\n\nvar _instance = null;\nRollbar.init = function(options, client) {\n if (_instance) {\n return _instance.global(options).configure(options);\n }\n _instance = new Rollbar(options, client);\n return _instance;\n};\n\nfunction handleUninitialized(maybeCallback) {\n var message = 'Rollbar is not initialized';\n logger.error(message);\n if (maybeCallback) {\n maybeCallback(new Error(message));\n }\n}\n\nRollbar.prototype.global = function(options) {\n this.client.global(options);\n return this;\n};\nRollbar.global = function(options) {\n if (_instance) {\n return _instance.global(options);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.extend(true, {}, oldOptions, options, payload);\n this.client.configure(options, payloadData);\n this.instrumenter.configure(options);\n return this;\n};\nRollbar.configure = function(options, payloadData) {\n if (_instance) {\n return _instance.configure(options, payloadData);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.lastError = function() {\n return this.client.lastError;\n};\nRollbar.lastError = function() {\n if (_instance) {\n return _instance.lastError();\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.log = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.log(item);\n return {uuid: uuid};\n};\nRollbar.log = function() {\n if (_instance) {\n return _instance.log.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.debug = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.debug(item);\n return {uuid: uuid};\n};\nRollbar.debug = function() {\n if (_instance) {\n return _instance.debug.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.info = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.info(item);\n return {uuid: uuid};\n};\nRollbar.info = function() {\n if (_instance) {\n return _instance.info.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warn = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warn(item);\n return {uuid: uuid};\n};\nRollbar.warn = function() {\n if (_instance) {\n return _instance.warn.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warning = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warning(item);\n return {uuid: uuid};\n};\nRollbar.warning = function() {\n if (_instance) {\n return _instance.warning.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.error = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.error(item);\n return {uuid: uuid};\n};\nRollbar.error = function() {\n if (_instance) {\n return _instance.error.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.critical = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.critical(item);\n return {uuid: uuid};\n};\nRollbar.critical = function() {\n if (_instance) {\n return _instance.critical.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.handleUncaughtException = function(message, url, lineno, colno, error, context) {\n var item;\n var stackInfo = _.makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n 'onerror',\n 'uncaught exception',\n errorParser\n );\n if (_.isError(error)) {\n item = this._createItem([message, error, context]);\n item._unhandledStackInfo = stackInfo;\n } else if (_.isError(url)) {\n item = this._createItem([message, url, context]);\n item._unhandledStackInfo = stackInfo;\n } else {\n item = this._createItem([message, context]);\n item.stackInfo = stackInfo;\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n this.client.log(item);\n};\n\nRollbar.prototype.handleUnhandledRejection = function(reason, promise) {\n var message = 'unhandled rejection was null or undefined!';\n message = reason ? (reason.message || String(reason)) : message;\n var context = (reason && reason._rollbarContext) || (promise && promise._rollbarContext);\n\n var item;\n if (_.isError(reason)) {\n item = this._createItem([message, reason, context]);\n } else {\n item = this._createItem([message, reason, context]);\n item.stackInfo = _.makeUnhandledStackInfo(\n message,\n '',\n 0,\n 0,\n null,\n 'unhandledrejection',\n '',\n errorParser\n );\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n item._originalArgs = item._originalArgs || [];\n item._originalArgs.push(promise);\n this.client.log(item);\n};\n\nRollbar.prototype.wrap = function(f, context, _before) {\n try {\n var ctxFn;\n if(_.isFunction(context)) {\n ctxFn = context;\n } else {\n ctxFn = function() { return context || {}; };\n }\n\n if (!_.isFunction(f)) {\n return f;\n }\n\n if (f._isWrap) {\n return f;\n }\n\n if (!f._rollbar_wrapped) {\n f._rollbar_wrapped = function () {\n if (_before && _.isFunction(_before)) {\n _before.apply(this, arguments);\n }\n try {\n return f.apply(this, arguments);\n } catch(exc) {\n var e = exc;\n if (_.isType(e, 'string')) {\n e = new String(e);\n }\n e._rollbarContext = ctxFn() || {};\n e._rollbarContext._wrappedSource = f.toString();\n\n window._rollbarWrappedError = e;\n throw e;\n }\n };\n\n f._rollbar_wrapped._isWrap = true;\n\n if (f.hasOwnProperty) {\n for (var prop in f) {\n if (f.hasOwnProperty(prop)) {\n f._rollbar_wrapped[prop] = f[prop];\n }\n }\n }\n }\n\n return f._rollbar_wrapped;\n } catch (e) {\n // Return the original function if the wrap fails.\n return f;\n }\n};\nRollbar.wrap = function(f, context) {\n if (_instance) {\n return _instance.wrap(f, context);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.captureEvent = function(metadata, level) {\n return this.client.captureEvent(metadata, level);\n};\nRollbar.captureEvent = function(metadata, level) {\n if (_instance) {\n return _instance.captureEvent(metadata, level);\n } else {\n handleUninitialized();\n }\n};\n\n// The following two methods are used internally and are not meant for public use\nRollbar.prototype.captureDomContentLoaded = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureLoad(ts);\n};\n\n/* Internal */\n\nfunction addTransformsToNotifier(notifier) {\n notifier\n .addTransform(transforms.handleItemWithError)\n .addTransform(transforms.ensureItemHasSomethingToSay)\n .addTransform(transforms.addBaseInfo)\n .addTransform(transforms.addRequestInfo(window))\n .addTransform(transforms.addClientInfo(window))\n .addTransform(transforms.addPluginInfo(window))\n .addTransform(transforms.addBody)\n .addTransform(sharedTransforms.addMessageWithError)\n .addTransform(sharedTransforms.addTelemetryData)\n .addTransform(sharedTransforms.addConfigToPayload)\n .addTransform(transforms.scrubPayload)\n .addTransform(sharedTransforms.userTransform(logger))\n .addTransform(sharedTransforms.itemToPayload);\n}\n\nfunction addPredicatesToQueue(queue) {\n queue\n .addPredicate(sharedPredicates.checkLevel)\n .addPredicate(predicates.checkIgnore)\n .addPredicate(sharedPredicates.userCheckIgnore(logger))\n .addPredicate(sharedPredicates.urlIsNotBlacklisted(logger))\n .addPredicate(sharedPredicates.urlIsWhitelisted(logger))\n .addPredicate(sharedPredicates.messageIsIgnored(logger));\n}\n\nRollbar.prototype._createItem = function(args) {\n return _.createItem(args, logger, this);\n};\n\nfunction _getFirstFunction(args) {\n for (var i = 0, len = args.length; i < len; ++i) {\n if (_.isFunction(args[i])) {\n return args[i];\n }\n }\n return undefined;\n}\n\n/* global __NOTIFIER_VERSION__:false */\n/* global __DEFAULT_BROWSER_SCRUB_FIELDS__:false */\n/* global __DEFAULT_LOG_LEVEL__:false */\n/* global __DEFAULT_REPORT_LEVEL__:false */\n/* global __DEFAULT_UNCAUGHT_ERROR_LEVEL:false */\n/* global __DEFAULT_ENDPOINT__:false */\n\nvar defaultOptions = {\n version: __NOTIFIER_VERSION__,\n scrubFields: __DEFAULT_BROWSER_SCRUB_FIELDS__,\n logLevel: __DEFAULT_LOG_LEVEL__,\n reportLevel: __DEFAULT_REPORT_LEVEL__,\n uncaughtErrorLevel: __DEFAULT_UNCAUGHT_ERROR_LEVEL,\n endpoint: __DEFAULT_ENDPOINT__,\n verbose: false,\n enabled: true,\n sendConfig: false,\n includeItemsInTelemetry: true\n};\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/rollbar.js\n// module id = 2\n// module chunks = 0","'use strict';\n\nvar RateLimiter = require('./rateLimiter');\nvar Queue = require('./queue');\nvar Notifier = require('./notifier');\nvar Telemeter = require('./telemetry');\nvar _ = require('./utility');\n\n/*\n * Rollbar - the interface to Rollbar\n *\n * @param options\n * @param api\n * @param logger\n */\nfunction Rollbar(options, api, logger, platform) {\n this.options = _.extend(true, {}, options);\n this.logger = logger;\n Rollbar.rateLimiter.configureGlobal(this.options);\n Rollbar.rateLimiter.setPlatformOptions(platform, this.options);\n this.queue = new Queue(Rollbar.rateLimiter, api, logger, this.options);\n this.notifier = new Notifier(this.queue, this.options);\n this.telemeter = new Telemeter(this.options);\n this.lastError = null;\n}\n\nvar defaultOptions = {\n maxItems: 0,\n itemsPerMinute: 60\n};\n\nRollbar.rateLimiter = new RateLimiter(defaultOptions);\n\nRollbar.prototype.global = function(options) {\n Rollbar.rateLimiter.configureGlobal(options);\n return this;\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n this.notifier && this.notifier.configure(options);\n this.telemeter && this.telemeter.configure(options);\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.extend(true, {}, oldOptions, options, payload);\n this.global(this.options);\n return this;\n};\n\nRollbar.prototype.log = function(item) {\n var level = this._defaultLogLevel();\n return this._log(level, item);\n};\n\nRollbar.prototype.debug = function(item) {\n this._log('debug', item);\n};\n\nRollbar.prototype.info = function(item) {\n this._log('info', item);\n};\n\nRollbar.prototype.warn = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.warning = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.error = function(item) {\n this._log('error', item);\n};\n\nRollbar.prototype.critical = function(item) {\n this._log('critical', item);\n};\n\nRollbar.prototype.wait = function(callback) {\n this.queue.wait(callback);\n};\n\nRollbar.prototype.captureEvent = function(metadata, level) {\n return this.telemeter.captureEvent(metadata, level);\n};\n\nRollbar.prototype.captureDomContentLoaded = function(ts) {\n return this.telemeter.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(ts) {\n return this.telemeter.captureLoad(ts);\n};\n\n/* Internal */\n\nRollbar.prototype._log = function(defaultLevel, item) {\n if (this._sameAsLastError(item)) {\n if (item.callback) {\n item.callback();\n }\n return;\n }\n try {\n var callback = null;\n if (item.callback) {\n callback = item.callback;\n delete item.callback;\n }\n item.level = item.level || defaultLevel;\n this.telemeter._captureRollbarItem(item);\n item.telemetryEvents = this.telemeter.copyEvents();\n this.notifier.log(item, callback);\n } catch (e) {\n this.logger.error(e)\n }\n};\n\nRollbar.prototype._defaultLogLevel = function() {\n return this.options.logLevel || 'debug';\n};\n\nRollbar.prototype._sameAsLastError = function(item) {\n if (this.lastError && this.lastError === item.err) {\n return true;\n }\n this.lastError = item.err;\n return false;\n};\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rollbar.js\n// module id = 3\n// module chunks = 0","'use strict';\n\n/*\n * RateLimiter - an object that encapsulates the logic for counting items sent to Rollbar\n *\n * @param options - the same options that are accepted by configureGlobal offered as a convenience\n */\nfunction RateLimiter(options) {\n this.startTime = (new Date()).getTime();\n this.counter = 0;\n this.perMinCounter = 0;\n this.platform = null;\n this.platformOptions = {};\n this.configureGlobal(options);\n}\n\nRateLimiter.globalSettings = {\n startTime: (new Date()).getTime(),\n maxItems: undefined,\n itemsPerMinute: undefined\n};\n\n/*\n * configureGlobal - set the global rate limiter options\n *\n * @param options - Only the following values are recognized:\n * startTime: a timestamp of the form returned by (new Date()).getTime()\n * maxItems: the maximum items\n * itemsPerMinute: the max number of items to send in a given minute\n */\nRateLimiter.prototype.configureGlobal = function(options) {\n if (options.startTime !== undefined) {\n RateLimiter.globalSettings.startTime = options.startTime;\n }\n if (options.maxItems !== undefined) {\n RateLimiter.globalSettings.maxItems = options.maxItems;\n }\n if (options.itemsPerMinute !== undefined) {\n RateLimiter.globalSettings.itemsPerMinute = options.itemsPerMinute;\n }\n};\n\n/*\n * shouldSend - determine if we should send a given item based on rate limit settings\n *\n * @param item - the item we are about to send\n * @returns An object with the following structure:\n * error: (Error|null)\n * shouldSend: bool\n * payload: (Object|null)\n * If shouldSend is false, the item passed as a parameter should not be sent to Rollbar, and\n * exactly one of error or payload will be non-null. If error is non-null, the returned Error will\n * describe the situation, but it means that we were already over a rate limit (either globally or\n * per minute) when this item was checked. If error is null, and therefore payload is non-null, it\n * means this item put us over the global rate limit and the payload should be sent to Rollbar in\n * place of the passed in item.\n */\nRateLimiter.prototype.shouldSend = function(item, now) {\n now = now || (new Date()).getTime();\n if (now - this.startTime >= 60000) {\n this.startTime = now;\n this.perMinCounter = 0;\n }\n\n var globalRateLimit = RateLimiter.globalSettings.maxItems;\n var globalRateLimitPerMin = RateLimiter.globalSettings.itemsPerMinute;\n\n if (checkRate(item, globalRateLimit, this.counter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimit + ' max items reached', false);\n } else if (checkRate(item, globalRateLimitPerMin, this.perMinCounter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimitPerMin + ' items per minute reached', false);\n }\n this.counter++;\n this.perMinCounter++;\n\n var shouldSend = !checkRate(item, globalRateLimit, this.counter);\n var perMinute = shouldSend;\n shouldSend = shouldSend && !checkRate(item, globalRateLimitPerMin, this.perMinCounter);\n return shouldSendValue(this.platform, this.platformOptions, null, shouldSend, globalRateLimit, globalRateLimitPerMin, perMinute);\n};\n\nRateLimiter.prototype.setPlatformOptions = function(platform, options) {\n this.platform = platform;\n this.platformOptions = options;\n};\n\n/* Helpers */\n\nfunction checkRate(item, limit, counter) {\n return !item.ignoreRateLimit && limit >= 1 && counter > limit;\n}\n\nfunction shouldSendValue(platform, options, error, shouldSend, globalRateLimit, limitPerMin, perMinute) {\n var payload = null;\n if (error) {\n error = new Error(error);\n }\n if (!error && !shouldSend) {\n payload = rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute);\n }\n return {error: error, shouldSend: shouldSend, payload: payload};\n}\n\nfunction rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute) {\n var environment = options.environment || (options.payload && options.payload.environment);\n var msg;\n if (perMinute) {\n msg = 'item per minute limit reached, ignoring errors until timeout';\n } else {\n msg = 'maxItems has been hit, ignoring errors until reset.';\n }\n var item = {\n body: {\n message: {\n body: msg,\n extra: {\n maxItems: globalRateLimit,\n itemsPerMinute: limitPerMin\n }\n }\n },\n language: 'javascript',\n environment: environment,\n notifier: {\n version: (options.notifier && options.notifier.version) || options.version\n }\n };\n if (platform === 'browser') {\n item.platform = 'browser';\n item.framework = 'browser-js';\n item.notifier.name = 'rollbar-browser-js';\n } else if (platform === 'server') {\n item.framework = options.framework || 'node-js';\n item.notifier.name = options.notifier.name;\n } else if (platform === 'react-native') {\n item.framework = options.framework || 'react-native';\n item.notifier.name = options.notifier.name;\n }\n return item;\n}\n\nmodule.exports = RateLimiter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rateLimiter.js\n// module id = 4\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Queue - an object which handles which handles a queue of items to be sent to Rollbar.\n * This object handles rate limiting via a passed in rate limiter, retries based on connection\n * errors, and filtering of items based on a set of configurable predicates. The communication to\n * the backend is performed via a given API object.\n *\n * @param rateLimiter - An object which conforms to the interface\n * rateLimiter.shouldSend(item) -> bool\n * @param api - An object which conforms to the interface\n * api.postItem(payload, function(err, response))\n * @param logger - An object used to log verbose messages if desired\n * @param options - see Queue.prototype.configure\n */\nfunction Queue(rateLimiter, api, logger, options) {\n this.rateLimiter = rateLimiter;\n this.api = api;\n this.logger = logger;\n this.options = options;\n this.predicates = [];\n this.pendingItems = [];\n this.pendingRequests = [];\n this.retryQueue = [];\n this.retryHandle = null;\n this.waitCallback = null;\n this.waitIntervalID = null;\n}\n\n/*\n * configure - updates the options this queue uses\n *\n * @param options\n */\nQueue.prototype.configure = function(options) {\n this.api && this.api.configure(options);\n var oldOptions = this.options;\n this.options = _.extend(true, {}, oldOptions, options);\n return this;\n};\n\n/*\n * addPredicate - adds a predicate to the end of the list of predicates for this queue\n *\n * @param predicate - function(item, options) -> (bool|{err: Error})\n * Returning true means that this predicate passes and the item is okay to go on the queue\n * Returning false means do not add the item to the queue, but it is not an error\n * Returning {err: Error} means do not add the item to the queue, and the given error explains why\n * Returning {err: undefined} is equivalent to returning true but don't do that\n */\nQueue.prototype.addPredicate = function(predicate) {\n if (_.isFunction(predicate)) {\n this.predicates.push(predicate);\n }\n return this;\n};\n\nQueue.prototype.addPendingItem = function(item) {\n this.pendingItems.push(item);\n};\n\nQueue.prototype.removePendingItem = function(item) {\n var idx = this.pendingItems.indexOf(item);\n if (idx !== -1) {\n this.pendingItems.splice(idx, 1);\n }\n};\n\n/*\n * addItem - Send an item to the Rollbar API if all of the predicates are satisfied\n *\n * @param item - The payload to send to the backend\n * @param callback - function(error, repsonse) which will be called with the response from the API\n * in the case of a success, otherwise response will be null and error will have a value. If both\n * error and response are null then the item was stopped by a predicate which did not consider this\n * to be an error condition, but nonetheless did not send the item to the API.\n * @param originalError - The original error before any transformations that is to be logged if any\n */\nQueue.prototype.addItem = function(item, callback, originalError, originalItem) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() { return; };\n }\n var predicateResult = this._applyPredicates(item);\n if (predicateResult.stop) {\n this.removePendingItem(originalItem);\n callback(predicateResult.err);\n return;\n }\n this._maybeLog(item, originalError);\n this.removePendingItem(originalItem);\n this.pendingRequests.push(item);\n try {\n this._makeApiRequest(item, function(err, resp) {\n this._dequeuePendingRequest(item);\n callback(err, resp);\n }.bind(this));\n } catch (e) {\n this._dequeuePendingRequest(item);\n callback(e);\n }\n};\n\n/*\n * wait - Stop any further errors from being added to the queue, and get called back when all items\n * currently processing have finished sending to the backend.\n *\n * @param callback - function() called when all pending items have been sent\n */\nQueue.prototype.wait = function(callback) {\n if (!_.isFunction(callback)) {\n return;\n }\n this.waitCallback = callback;\n if (this._maybeCallWait()) {\n return;\n }\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitIntervalID = setInterval(function() {\n this._maybeCallWait();\n }.bind(this), 500);\n};\n\n/* _applyPredicates - Sequentially applies the predicates that have been added to the queue to the\n * given item with the currently configured options.\n *\n * @param item - An item in the queue\n * @returns {stop: bool, err: (Error|null)} - stop being true means do not add item to the queue,\n * the error value should be passed up to a callbak if we are stopping.\n */\nQueue.prototype._applyPredicates = function(item) {\n var p = null;\n for (var i = 0, len = this.predicates.length; i < len; i++) {\n p = this.predicates[i](item, this.options);\n if (!p || p.err !== undefined) {\n return {stop: true, err: p.err};\n }\n }\n return {stop: false, err: null};\n};\n\n/*\n * _makeApiRequest - Send an item to Rollbar, callback when done, if there is an error make an\n * effort to retry if we are configured to do so.\n *\n * @param item - an item ready to send to the backend\n * @param callback - function(err, response)\n */\nQueue.prototype._makeApiRequest = function(item, callback) {\n var rateLimitResponse = this.rateLimiter.shouldSend(item);\n if (rateLimitResponse.shouldSend) {\n this.api.postItem(item, function(err, resp) {\n if (err) {\n this._maybeRetry(err, item, callback);\n } else {\n callback(err, resp);\n }\n }.bind(this));\n } else if (rateLimitResponse.error) {\n callback(rateLimitResponse.error);\n } else {\n this.api.postItem(rateLimitResponse.payload, callback);\n }\n};\n\n// These are errors basically mean there is no internet connection\nvar RETRIABLE_ERRORS = ['ECONNRESET', 'ENOTFOUND', 'ESOCKETTIMEDOUT', 'ETIMEDOUT', 'ECONNREFUSED', 'EHOSTUNREACH', 'EPIPE', 'EAI_AGAIN'];\n\n/*\n * _maybeRetry - Given the error returned by the API, decide if we should retry or just callback\n * with the error.\n *\n * @param err - an error returned by the API transport\n * @param item - the item that was trying to be sent when this error occured\n * @param callback - function(err, response)\n */\nQueue.prototype._maybeRetry = function(err, item, callback) {\n var shouldRetry = false;\n if (this.options.retryInterval) {\n for (var i = 0, len = RETRIABLE_ERRORS.length; i < len; i++) {\n if (err.code === RETRIABLE_ERRORS[i]) {\n shouldRetry = true;\n break;\n }\n }\n }\n if (shouldRetry) {\n this._retryApiRequest(item, callback);\n } else {\n callback(err);\n }\n};\n\n/*\n * _retryApiRequest - Add an item and a callback to a queue and possibly start a timer to process\n * that queue based on the retryInterval in the options for this queue.\n *\n * @param item - an item that failed to send due to an error we deem retriable\n * @param callback - function(err, response)\n */\nQueue.prototype._retryApiRequest = function(item, callback) {\n this.retryQueue.push({item: item, callback: callback});\n\n if (!this.retryHandle) {\n this.retryHandle = setInterval(function() {\n while (this.retryQueue.length) {\n var retryObject = this.retryQueue.shift();\n this._makeApiRequest(retryObject.item, retryObject.callback);\n }\n }.bind(this), this.options.retryInterval);\n }\n};\n\n/*\n * _dequeuePendingRequest - Removes the item from the pending request queue, this queue is used to\n * enable to functionality of providing a callback that clients can pass to `wait` to be notified\n * when the pending request queue has been emptied. This must be called when the API finishes\n * processing this item. If a `wait` callback is configured, it is called by this function.\n *\n * @param item - the item previously added to the pending request queue\n */\nQueue.prototype._dequeuePendingRequest = function(item) {\n var idx = this.pendingRequests.indexOf(item);\n if (idx !== -1) {\n this.pendingRequests.splice(idx, 1);\n this._maybeCallWait();\n }\n};\n\nQueue.prototype._maybeLog = function(data, originalError) {\n if (this.logger && this.options.verbose) {\n var message = originalError;\n message = message || _.get(data, 'body.trace.exception.message');\n message = message || _.get(data, 'body.trace_chain.0.exception.message');\n if (message) {\n this.logger.error(message);\n return;\n }\n message = _.get(data, 'body.message.body');\n if (message) {\n this.logger.log(message);\n }\n }\n};\n\nQueue.prototype._maybeCallWait = function() {\n if (_.isFunction(this.waitCallback) && this.pendingItems.length === 0 && this.pendingRequests.length === 0) {\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitCallback();\n return true;\n }\n return false;\n};\n\nmodule.exports = Queue;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/queue.js\n// module id = 5\n// module chunks = 0","'use strict';\n\nvar extend = require('extend');\n\nvar RollbarJSON = {};\nvar __initRollbarJSON = false;\nfunction setupJSON() {\n if (__initRollbarJSON) {\n return;\n }\n __initRollbarJSON = true;\n\n if (isDefined(JSON)) {\n if (isNativeFunction(JSON.stringify)) {\n RollbarJSON.stringify = JSON.stringify;\n }\n if (isNativeFunction(JSON.parse)) {\n RollbarJSON.parse = JSON.parse;\n }\n }\n if (!isFunction(RollbarJSON.stringify) || !isFunction(RollbarJSON.parse)) {\n var setupCustomJSON = require('../vendor/JSON-js/json3.js');\n setupCustomJSON(RollbarJSON);\n }\n}\nsetupJSON();\n\n/*\n * isType - Given a Javascript value and a string, returns true if the type of the value matches the\n * given string.\n *\n * @param x - any value\n * @param t - a lowercase string containing one of the following type names:\n * - undefined\n * - null\n * - error\n * - number\n * - boolean\n * - string\n * - symbol\n * - function\n * - object\n * - array\n * @returns true if x is of type t, otherwise false\n */\nfunction isType(x, t) {\n return t === typeName(x);\n}\n\n/*\n * typeName - Given a Javascript value, returns the type of the object as a string\n */\nfunction typeName(x) {\n var name = typeof x;\n if (name !== 'object') {\n return name;\n }\n if (!x) {\n return 'null';\n }\n if (x instanceof Error) {\n return 'error';\n }\n return ({}).toString.call(x).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n}\n\n/* isFunction - a convenience function for checking if a value is a function\n *\n * @param f - any value\n * @returns true if f is a function, otherwise false\n */\nfunction isFunction(f) {\n return isType(f, 'function');\n}\n\n/* isNativeFunction - a convenience function for checking if a value is a native JS function\n *\n * @param f - any value\n * @returns true if f is a native JS function, otherwise false\n */\nfunction isNativeFunction(f) {\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n var funcMatchString = Function.prototype.toString.call(Object.prototype.hasOwnProperty)\n .replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?');\n var reIsNative = RegExp('^' + funcMatchString + '$');\n return isObject(f) && reIsNative.test(f);\n}\n\n/* isObject - Checks if the argument is an object\n *\n * @param value - any value\n * @returns true is value is an object function is an object)\n*/\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/*\n * isDefined - a convenience function for checking if a value is not equal to undefined\n *\n * @param u - any value\n * @returns true if u is anything other than undefined\n */\nfunction isDefined(u) {\n return !isType(u, 'undefined');\n}\n\n/*\n * isIterable - convenience function for checking if a value can be iterated, essentially\n * whether it is an object or an array.\n *\n * @param i - any value\n * @returns true if i is an object or an array as determined by `typeName`\n */\nfunction isIterable(i) {\n var type = typeName(i);\n return (type === 'object' || type === 'array');\n}\n\n/*\n * isError - convenience function for checking if a value is of an error type\n *\n * @param e - any value\n * @returns true if e is an error\n */\nfunction isError(e) {\n return isType(e, 'error');\n}\n\nfunction traverse(obj, func, seen) {\n var k, v, i;\n var isObj = isType(obj, 'object');\n var isArray = isType(obj, 'array');\n var keys = [];\n\n if (isObj && seen.indexOf(obj) !== -1) {\n return obj;\n }\n seen.push(obj);\n\n if (isObj) {\n for (k in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, k)) {\n keys.push(k);\n }\n }\n } else if (isArray) {\n for (i = 0; i < obj.length; ++i) {\n keys.push(i);\n }\n }\n\n var result = isObj ? {} : [];\n for (i = 0; i < keys.length; ++i) {\n k = keys[i];\n v = obj[k];\n result[k] = func(k, v, seen);\n }\n\n return (keys.length != 0) ? result : obj;\n}\n\nfunction redact() {\n return '********';\n}\n\n// from http://stackoverflow.com/a/8809472/1138191\nfunction uuid4() {\n var d = now();\n var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (d + Math.random() * 16) % 16 | 0;\n d = Math.floor(d / 16);\n return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16);\n });\n return uuid;\n}\n\nvar LEVELS = {\n debug: 0,\n info: 1,\n warning: 2,\n error: 3,\n critical: 4\n};\n\nfunction sanitizeUrl(url) {\n var baseUrlParts = parseUri(url);\n // remove a trailing # if there is no anchor\n if (baseUrlParts.anchor === '') {\n baseUrlParts.source = baseUrlParts.source.replace('#', '');\n }\n\n url = baseUrlParts.source.replace('?' + baseUrlParts.query, '');\n return url;\n}\n\nvar parseUriOptions = {\n strictMode: false,\n key: [\n 'source',\n 'protocol',\n 'authority',\n 'userInfo',\n 'user',\n 'password',\n 'host',\n 'port',\n 'relative',\n 'path',\n 'directory',\n 'file',\n 'query',\n 'anchor'\n ],\n q: {\n name: 'queryKey',\n parser: /(?:^|&)([^&=]*)=?([^&]*)/g\n },\n parser: {\n strict: /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,\n loose: /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/\n }\n};\n\nfunction parseUri(str) {\n if (!isType(str, 'string')) {\n throw new Error('received invalid input');\n }\n\n var o = parseUriOptions;\n var m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str);\n var uri = {};\n var i = o.key.length;\n\n while (i--) {\n uri[o.key[i]] = m[i] || '';\n }\n\n uri[o.q.name] = {};\n uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {\n if ($1) {\n uri[o.q.name][$1] = $2;\n }\n });\n\n return uri;\n}\n\nfunction addParamsAndAccessTokenToPath(accessToken, options, params) {\n params = params || {};\n params.access_token = accessToken;\n var paramsArray = [];\n var k;\n for (k in params) {\n if (Object.prototype.hasOwnProperty.call(params, k)) {\n paramsArray.push([k, params[k]].join('='));\n }\n }\n var query = '?' + paramsArray.sort().join('&');\n\n options = options || {};\n options.path = options.path || '';\n var qs = options.path.indexOf('?');\n var h = options.path.indexOf('#');\n var p;\n if (qs !== -1 && (h === -1 || h > qs)) {\n p = options.path;\n options.path = p.substring(0,qs) + query + '&' + p.substring(qs+1);\n } else {\n if (h !== -1) {\n p = options.path;\n options.path = p.substring(0,h) + query + p.substring(h);\n } else {\n options.path = options.path + query;\n }\n }\n}\n\nfunction formatUrl(u, protocol) {\n protocol = protocol || u.protocol;\n if (!protocol && u.port) {\n if (u.port === 80) {\n protocol = 'http:';\n } else if (u.port === 443) {\n protocol = 'https:';\n }\n }\n protocol = protocol || 'https:';\n\n if (!u.hostname) {\n return null;\n }\n var result = protocol + '//' + u.hostname;\n if (u.port) {\n result = result + ':' + u.port;\n }\n if (u.path) {\n result = result + u.path;\n }\n return result;\n}\n\nfunction stringify(obj, backup) {\n var value, error;\n try {\n value = RollbarJSON.stringify(obj);\n } catch (jsonError) {\n if (backup && isFunction(backup)) {\n try {\n value = backup(obj);\n } catch (backupError) {\n error = backupError;\n }\n } else {\n error = jsonError;\n }\n }\n return {error: error, value: value};\n}\n\nfunction jsonParse(s) {\n var value, error;\n try {\n value = RollbarJSON.parse(s);\n } catch (e) {\n error = e;\n }\n return {error: error, value: value};\n}\n\nfunction makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n mode,\n backupMessage,\n errorParser\n) {\n var location = {\n url: url || '',\n line: lineno,\n column: colno\n };\n location.func = errorParser.guessFunctionName(location.url, location.line);\n location.context = errorParser.gatherContext(location.url, location.line);\n var href = document && document.location && document.location.href;\n var useragent = window && window.navigator && window.navigator.userAgent;\n return {\n 'mode': mode,\n 'message': error ? String(error) : (message || backupMessage),\n 'url': href,\n 'stack': [location],\n 'useragent': useragent\n };\n}\n\nfunction wrapCallback(logger, f) {\n return function(err, resp) {\n try {\n f(err, resp);\n } catch (e) {\n logger.error(e);\n }\n };\n}\n\nfunction createItem(args, logger, notifier, requestKeys, lambdaContext) {\n var message, err, custom, callback, request;\n var arg;\n var extraArgs = [];\n\n for (var i = 0, l = args.length; i < l; ++i) {\n arg = args[i];\n\n var typ = typeName(arg);\n switch (typ) {\n case 'undefined':\n break;\n case 'string':\n message ? extraArgs.push(arg) : message = arg;\n break;\n case 'function':\n callback = wrapCallback(logger, arg);\n break;\n case 'date':\n extraArgs.push(arg);\n break;\n case 'error':\n case 'domexception':\n err ? extraArgs.push(arg) : err = arg;\n break;\n case 'object':\n case 'array':\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n if (requestKeys && typ === 'object' && !request) {\n for (var j = 0, len = requestKeys.length; j < len; ++j) {\n if (arg[requestKeys[j]] !== undefined) {\n request = arg;\n break;\n }\n }\n if (request) {\n break;\n }\n }\n custom ? extraArgs.push(arg) : custom = arg;\n break;\n default:\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n extraArgs.push(arg);\n }\n }\n\n if (extraArgs.length > 0) {\n // if custom is an array this turns it into an object with integer keys\n custom = extend(true, {}, custom);\n custom.extraArgs = extraArgs;\n }\n\n var item = {\n message: message,\n err: err,\n custom: custom,\n timestamp: now(),\n callback: callback,\n uuid: uuid4()\n };\n if (custom && custom.level !== undefined) {\n item.level = custom.level;\n delete custom.level;\n }\n if (requestKeys && request) {\n item.request = request;\n }\n if (lambdaContext) {\n item.lambdaContext = lambdaContext;\n }\n item._originalArgs = args;\n return item;\n}\n\n/*\n * get - given an obj/array and a keypath, return the value at that keypath or\n * undefined if not possible.\n *\n * @param obj - an object or array\n * @param path - a string of keys separated by '.' such as 'plugin.jquery.0.message'\n * which would correspond to 42 in `{plugin: {jquery: [{message: 42}]}}`\n */\nfunction get(obj, path) {\n if (!obj) {\n return undefined;\n }\n var keys = path.split('.');\n var result = obj;\n try {\n for (var i = 0, len = keys.length; i < len; ++i) {\n result = result[keys[i]];\n }\n } catch (e) {\n result = undefined;\n }\n return result;\n}\n\nfunction set(obj, path, value) {\n if (!obj) {\n return;\n }\n var keys = path.split('.');\n var len = keys.length;\n if (len < 1) {\n return;\n }\n if (len === 1) {\n obj[keys[0]] = value;\n return;\n }\n try {\n var temp = obj[keys[0]] || {};\n var replacement = temp;\n for (var i = 1; i < len-1; i++) {\n temp[keys[i]] = temp[keys[i]] || {};\n temp = temp[keys[i]];\n }\n temp[keys[len-1]] = value;\n obj[keys[0]] = replacement;\n } catch (e) {\n return;\n }\n}\n\nfunction scrub(data, scrubFields) {\n scrubFields = scrubFields || [];\n var paramRes = _getScrubFieldRegexs(scrubFields);\n var queryRes = _getScrubQueryParamRegexs(scrubFields);\n\n function redactQueryParam(dummy0, paramPart, dummy1, dummy2, dummy3, valPart) {\n return paramPart + redact(valPart);\n }\n\n function paramScrubber(v) {\n var i;\n if (isType(v, 'string')) {\n for (i = 0; i < queryRes.length; ++i) {\n v = v.replace(queryRes[i], redactQueryParam);\n }\n }\n return v;\n }\n\n function valScrubber(k, v) {\n var i;\n for (i = 0; i < paramRes.length; ++i) {\n if (paramRes[i].test(k)) {\n v = redact(v);\n break;\n }\n }\n return v;\n }\n\n function scrubber(k, v, seen) {\n var tmpV = valScrubber(k, v);\n if (tmpV === v) {\n if (isType(v, 'object') || isType(v, 'array')) {\n return traverse(v, scrubber, seen);\n }\n return paramScrubber(tmpV);\n } else {\n return tmpV;\n }\n }\n\n return traverse(data, scrubber, []);\n}\n\nfunction _getScrubFieldRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '^\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?$';\n ret.push(new RegExp(pat, 'i'));\n }\n return ret;\n}\n\n\nfunction _getScrubQueryParamRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?';\n ret.push(new RegExp('(' + pat + '=)([^&\\\\n]+)', 'igm'));\n }\n return ret;\n}\n\nfunction formatArgsAsString(args) {\n var i, len, arg;\n var result = [];\n for (i = 0, len = args.length; i < len; i++) {\n arg = args[i];\n if (typeof arg === 'object') {\n arg = stringify(arg);\n arg = arg.error || arg.value;\n if (arg.length > 500)\n arg = arg.substr(0,500)+'...';\n } else if (typeof arg === 'undefined') {\n arg = 'undefined';\n }\n result.push(arg);\n }\n return result.join(' ');\n}\n\nfunction now() {\n if (Date.now) {\n return +Date.now();\n }\n return +new Date();\n}\n\nmodule.exports = {\n isType: isType,\n typeName: typeName,\n isFunction: isFunction,\n isNativeFunction: isNativeFunction,\n isIterable: isIterable,\n isError: isError,\n extend: extend,\n traverse: traverse,\n redact: redact,\n uuid4: uuid4,\n LEVELS: LEVELS,\n sanitizeUrl: sanitizeUrl,\n addParamsAndAccessTokenToPath: addParamsAndAccessTokenToPath,\n formatUrl: formatUrl,\n stringify: stringify,\n jsonParse: jsonParse,\n makeUnhandledStackInfo: makeUnhandledStackInfo,\n createItem: createItem,\n get: get,\n set: set,\n scrub: scrub,\n formatArgsAsString: formatArgsAsString,\n now: now\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/utility.js\n// module id = 6\n// module chunks = 0","'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) {/**/}\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[0],\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t} else if ((typeof target !== 'object' && typeof target !== 'function') || target == null) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = target[name];\n\t\t\t\tcopy = options[name];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\ttarget[name] = extend(deep, clone, copy);\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/extend/index.js\n// module id = 7\n// module chunks = 0","// json3.js\n// 2017-02-21\n// Public Domain.\n// NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n// See http://www.JSON.org/js.html\n// This code should be minified before deployment.\n// See http://javascript.crockford.com/jsmin.html\n\n// USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n// NOT CONTROL.\n\n// This file creates a global JSON object containing two methods: stringify\n// and parse. This file provides the ES5 JSON capability to ES3 systems.\n// If a project might run on IE8 or earlier, then this file should be included.\n// This file does nothing on ES5 systems.\n\n// JSON.stringify(value, replacer, space)\n// value any JavaScript value, usually an object or array.\n// replacer an optional parameter that determines how object\n// values are stringified for objects. It can be a\n// function or an array of strings.\n// space an optional parameter that specifies the indentation\n// of nested structures. If it is omitted, the text will\n// be packed without extra whitespace. If it is a number,\n// it will specify the number of spaces to indent at each\n// level. If it is a string (such as \"\\t\" or \" \"),\n// it contains the characters used to indent at each level.\n// This method produces a JSON text from a JavaScript value.\n// When an object value is found, if the object contains a toJSON\n// method, its toJSON method will be called and the result will be\n// stringified. A toJSON method does not serialize: it returns the\n// value represented by the name/value pair that should be serialized,\n// or undefined if nothing should be serialized. The toJSON method\n// will be passed the key associated with the value, and this will be\n// bound to the value.\n\n// For example, this would serialize Dates as ISO strings.\n\n// Date.prototype.toJSON = function (key) {\n// function f(n) {\n// // Format integers to have at least two digits.\n// return (n < 10)\n// ? \"0\" + n\n// : n;\n// }\n// return this.getUTCFullYear() + \"-\" +\n// f(this.getUTCMonth() + 1) + \"-\" +\n// f(this.getUTCDate()) + \"T\" +\n// f(this.getUTCHours()) + \":\" +\n// f(this.getUTCMinutes()) + \":\" +\n// f(this.getUTCSeconds()) + \"Z\";\n// };\n\n// You can provide an optional replacer method. It will be passed the\n// key and value of each member, with this bound to the containing\n// object. The value that is returned from your method will be\n// serialized. If your method returns undefined, then the member will\n// be excluded from the serialization.\n\n// If the replacer parameter is an array of strings, then it will be\n// used to select the members to be serialized. It filters the results\n// such that only members with keys listed in the replacer array are\n// stringified.\n\n// Values that do not have JSON representations, such as undefined or\n// functions, will not be serialized. Such values in objects will be\n// dropped; in arrays they will be replaced with null. You can use\n// a replacer function to replace those with JSON values.\n\n// JSON.stringify(undefined) returns undefined.\n\n// The optional space parameter produces a stringification of the\n// value that is filled with line breaks and indentation to make it\n// easier to read.\n\n// If the space parameter is a non-empty string, then that string will\n// be used for indentation. If the space parameter is a number, then\n// the indentation will be that many spaces.\n\n// Example:\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}]);\n// // text is '[\"e\",{\"pluribus\":\"unum\"}]'\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}], null, \"\\t\");\n// // text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\n\n// text = JSON.stringify([new Date()], function (key, value) {\n// return this[key] instanceof Date\n// ? \"Date(\" + this[key] + \")\"\n// : value;\n// });\n// // text is '[\"Date(---current time---)\"]'\n\n// JSON.parse(text, reviver)\n// This method parses a JSON text to produce an object or array.\n// It can throw a SyntaxError exception.\n// This has been modified to use JSON-js/json_parse_state.js as the\n// parser instead of the one built around eval found in JSON-js/json2.js\n\n// The optional reviver parameter is a function that can filter and\n// transform the results. It receives each of the keys and values,\n// and its return value is used instead of the original value.\n// If it returns what it received, then the structure is not modified.\n// If it returns undefined then the member is deleted.\n\n// Example:\n\n// // Parse the text. Values that look like ISO date strings will\n// // be converted to Date objects.\n\n// myData = JSON.parse(text, function (key, value) {\n// var a;\n// if (typeof value === \"string\") {\n// a =\n// /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n// if (a) {\n// return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n// +a[5], +a[6]));\n// }\n// }\n// return value;\n// });\n\n// myData = JSON.parse('[\"Date(09/09/2001)\"]', function (key, value) {\n// var d;\n// if (typeof value === \"string\" &&\n// value.slice(0, 5) === \"Date(\" &&\n// value.slice(-1) === \")\") {\n// d = new Date(value.slice(5, -1));\n// if (d) {\n// return d;\n// }\n// }\n// return value;\n// });\n\n// This is a reference implementation. You are free to copy, modify, or\n// redistribute.\n\n/*jslint\n for, this\n */\n\n/*property\n JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\n getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\n lastIndex, length, parse, prototype, push, replace, slice, stringify,\n test, toJSON, toString, valueOf\n */\n\nvar setupCustomJSON = function(JSON) {\n\n var rx_one = /^[\\],:{}\\s]*$/;\n var rx_two = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g;\n var rx_three = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\n var rx_four = /(?:^|:|,)(?:\\s*\\[)+/g;\n var rx_escapable = /[\\\\\"\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n var rx_dangerous = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\n function f(n) {\n // Format integers to have at least two digits.\n return n < 10\n ? \"0\" + n\n : n;\n }\n\n function this_value() {\n return this.valueOf();\n }\n\n if (typeof Date.prototype.toJSON !== \"function\") {\n\n Date.prototype.toJSON = function () {\n\n return isFinite(this.valueOf())\n ? this.getUTCFullYear() + \"-\" +\n f(this.getUTCMonth() + 1) + \"-\" +\n f(this.getUTCDate()) + \"T\" +\n f(this.getUTCHours()) + \":\" +\n f(this.getUTCMinutes()) + \":\" +\n f(this.getUTCSeconds()) + \"Z\"\n : null;\n };\n\n Boolean.prototype.toJSON = this_value;\n Number.prototype.toJSON = this_value;\n String.prototype.toJSON = this_value;\n }\n\n var gap;\n var indent;\n var meta;\n var rep;\n\n\n function quote(string) {\n\n // If the string contains no control characters, no quote characters, and no\n // backslash characters, then we can safely slap some quotes around it.\n // Otherwise we must also replace the offending characters with safe escape\n // sequences.\n\n rx_escapable.lastIndex = 0;\n return rx_escapable.test(string)\n ? \"\\\"\" + string.replace(rx_escapable, function (a) {\n var c = meta[a];\n return typeof c === \"string\"\n ? c\n : \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n }) + \"\\\"\"\n : \"\\\"\" + string + \"\\\"\";\n }\n\n\n function str(key, holder) {\n\n // Produce a string from holder[key].\n\n var i; // The loop counter.\n var k; // The member key.\n var v; // The member value.\n var length;\n var mind = gap;\n var partial;\n var value = holder[key];\n\n // If the value has a toJSON method, call it to obtain a replacement value.\n\n if (value && typeof value === \"object\" &&\n typeof value.toJSON === \"function\") {\n value = value.toJSON(key);\n }\n\n // If we were called with a replacer function, then call the replacer to\n // obtain a replacement value.\n\n if (typeof rep === \"function\") {\n value = rep.call(holder, key, value);\n }\n\n // What happens next depends on the value's type.\n\n switch (typeof value) {\n case \"string\":\n return quote(value);\n\n case \"number\":\n\n // JSON numbers must be finite. Encode non-finite numbers as null.\n\n return isFinite(value)\n ? String(value)\n : \"null\";\n\n case \"boolean\":\n case \"null\":\n\n // If the value is a boolean or null, convert it to a string. Note:\n // typeof null does not produce \"null\". The case is included here in\n // the remote chance that this gets fixed someday.\n\n return String(value);\n\n // If the type is \"object\", we might be dealing with an object or an array or\n // null.\n\n case \"object\":\n\n // Due to a specification blunder in ECMAScript, typeof null is \"object\",\n // so watch out for that case.\n\n if (!value) {\n return \"null\";\n }\n\n // Make an array to hold the partial results of stringifying this object value.\n\n gap += indent;\n partial = [];\n\n // Is the value an array?\n\n if (Object.prototype.toString.apply(value) === \"[object Array]\") {\n\n // The value is an array. Stringify every element. Use null as a placeholder\n // for non-JSON values.\n\n length = value.length;\n for (i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || \"null\";\n }\n\n // Join all of the elements together, separated with commas, and wrap them in\n // brackets.\n\n v = partial.length === 0\n ? \"[]\"\n : gap\n ? \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\"\n : \"[\" + partial.join(\",\") + \"]\";\n gap = mind;\n return v;\n }\n\n // If the replacer is an array, use it to select the members to be stringified.\n\n if (rep && typeof rep === \"object\") {\n length = rep.length;\n for (i = 0; i < length; i += 1) {\n if (typeof rep[i] === \"string\") {\n k = rep[i];\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n } else {\n\n // Otherwise, iterate through all of the keys in the object.\n\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n }\n\n // Join all of the member texts together, separated with commas,\n // and wrap them in braces.\n\n v = partial.length === 0\n ? \"{}\"\n : gap\n ? \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\"\n : \"{\" + partial.join(\",\") + \"}\";\n gap = mind;\n return v;\n }\n }\n\n // If the JSON object does not yet have a stringify method, give it one.\n\n if (typeof JSON.stringify !== \"function\") {\n meta = { // table of character substitutions\n \"\\b\": \"\\\\b\",\n \"\\t\": \"\\\\t\",\n \"\\n\": \"\\\\n\",\n \"\\f\": \"\\\\f\",\n \"\\r\": \"\\\\r\",\n \"\\\"\": \"\\\\\\\"\",\n \"\\\\\": \"\\\\\\\\\"\n };\n JSON.stringify = function (value, replacer, space) {\n\n // The stringify method takes a value and an optional replacer, and an optional\n // space parameter, and returns a JSON text. The replacer can be a function\n // that can replace values, or an array of strings that will select the keys.\n // A default replacer method can be provided. Use of the space parameter can\n // produce text that is more easily readable.\n\n var i;\n gap = \"\";\n indent = \"\";\n\n // If the space parameter is a number, make an indent string containing that\n // many spaces.\n\n if (typeof space === \"number\") {\n for (i = 0; i < space; i += 1) {\n indent += \" \";\n }\n\n // If the space parameter is a string, it will be used as the indent string.\n\n } else if (typeof space === \"string\") {\n indent = space;\n }\n\n // If there is a replacer, it must be a function or an array.\n // Otherwise, throw an error.\n\n rep = replacer;\n if (replacer && typeof replacer !== \"function\" &&\n (typeof replacer !== \"object\" ||\n typeof replacer.length !== \"number\")) {\n throw new Error(\"JSON.stringify\");\n }\n\n // Make a fake root object containing our value under the key of \"\".\n // Return the result of stringifying the value.\n\n return str(\"\", {\"\": value});\n };\n }\n\n\n // If the JSON object does not yet have a parse method, give it one.\n\n if (typeof JSON.parse !== \"function\") {\n JSON.parse = (function () {\n\n // This function creates a JSON parse function that uses a state machine rather\n // than the dangerous eval function to parse a JSON text.\n\n var state; // The state of the parser, one of\n // 'go' The starting state\n // 'ok' The final, accepting state\n // 'firstokey' Ready for the first key of the object or\n // the closing of an empty object\n // 'okey' Ready for the next key of the object\n // 'colon' Ready for the colon\n // 'ovalue' Ready for the value half of a key/value pair\n // 'ocomma' Ready for a comma or closing }\n // 'firstavalue' Ready for the first value of an array or\n // an empty array\n // 'avalue' Ready for the next value of an array\n // 'acomma' Ready for a comma or closing ]\n var stack; // The stack, for controlling nesting.\n var container; // The current container object or array\n var key; // The current key\n var value; // The current value\n var escapes = { // Escapement translation table\n \"\\\\\": \"\\\\\",\n \"\\\"\": \"\\\"\",\n \"/\": \"/\",\n \"t\": \"\\t\",\n \"n\": \"\\n\",\n \"r\": \"\\r\",\n \"f\": \"\\f\",\n \"b\": \"\\b\"\n };\n var string = { // The actions for string tokens\n go: function () {\n state = \"ok\";\n },\n firstokey: function () {\n key = value;\n state = \"colon\";\n },\n okey: function () {\n key = value;\n state = \"colon\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var number = { // The actions for number tokens\n go: function () {\n state = \"ok\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var action = {\n\n // The action table describes the behavior of the machine. It contains an\n // object for each token. Each object contains a method that is called when\n // a token is matched in a state. An object will lack a method for illegal\n // states.\n\n \"{\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = {};\n state = \"firstokey\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = {};\n state = \"firstokey\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n }\n },\n \"}\": {\n firstokey: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n ocomma: function () {\n var pop = stack.pop();\n container[key] = value;\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \"[\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = [];\n state = \"firstavalue\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = [];\n state = \"firstavalue\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n }\n },\n \"]\": {\n firstavalue: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n acomma: function () {\n var pop = stack.pop();\n container.push(value);\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \":\": {\n colon: function () {\n if (Object.hasOwnProperty.call(container, key)) {\n throw new SyntaxError(\"Duplicate key '\" + key + \"\\\"\");\n }\n state = \"ovalue\";\n }\n },\n \",\": {\n ocomma: function () {\n container[key] = value;\n state = \"okey\";\n },\n acomma: function () {\n container.push(value);\n state = \"avalue\";\n }\n },\n \"true\": {\n go: function () {\n value = true;\n state = \"ok\";\n },\n ovalue: function () {\n value = true;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = true;\n state = \"acomma\";\n },\n avalue: function () {\n value = true;\n state = \"acomma\";\n }\n },\n \"false\": {\n go: function () {\n value = false;\n state = \"ok\";\n },\n ovalue: function () {\n value = false;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = false;\n state = \"acomma\";\n },\n avalue: function () {\n value = false;\n state = \"acomma\";\n }\n },\n \"null\": {\n go: function () {\n value = null;\n state = \"ok\";\n },\n ovalue: function () {\n value = null;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = null;\n state = \"acomma\";\n },\n avalue: function () {\n value = null;\n state = \"acomma\";\n }\n }\n };\n\n function debackslashify(text) {\n\n // Remove and replace any backslash escapement.\n\n return text.replace(/\\\\(?:u(.{4})|([^u]))/g, function (ignore, b, c) {\n return b\n ? String.fromCharCode(parseInt(b, 16))\n : escapes[c];\n });\n }\n\n return function (source, reviver) {\n\n // A regular expression is used to extract tokens from the JSON text.\n // The extraction process is cautious.\n\n var result;\n var tx = /^[\\u0020\\t\\n\\r]*(?:([,:\\[\\]{}]|true|false|null)|(-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)|\"((?:[^\\r\\n\\t\\\\\\\"]|\\\\(?:[\"\\\\\\/trnfb]|u[0-9a-fA-F]{4}))*)\")/;\n\n // Set the starting state.\n\n state = \"go\";\n\n // The stack records the container, key, and state for each object or array\n // that contains another object or array while processing nested structures.\n\n stack = [];\n\n // If any error occurs, we will catch it and ultimately throw a syntax error.\n\n try {\n\n // For each token...\n\n while (true) {\n result = tx.exec(source);\n if (!result) {\n break;\n }\n\n // result is the result array from matching the tokenizing regular expression.\n // result[0] contains everything that matched, including any initial whitespace.\n // result[1] contains any punctuation that was matched, or true, false, or null.\n // result[2] contains a matched number, still in string form.\n // result[3] contains a matched string, without quotes but with escapement.\n\n if (result[1]) {\n\n // Token: Execute the action for this state and token.\n\n action[result[1]][state]();\n\n } else if (result[2]) {\n\n // Number token: Convert the number string into a number value and execute\n // the action for this state and number.\n\n value = +result[2];\n number[state]();\n } else {\n\n // String token: Replace the escapement sequences and execute the action for\n // this state and string.\n\n value = debackslashify(result[3]);\n string[state]();\n }\n\n // Remove the token from the string. The loop will continue as long as there\n // are tokens. This is a slow process, but it allows the use of ^ matching,\n // which assures that no illegal tokens slip through.\n\n source = source.slice(result[0].length);\n }\n\n // If we find a state/token combination that is illegal, then the action will\n // cause an error. We handle the error by simply changing the state.\n\n } catch (e) {\n state = e;\n }\n\n // The parsing is finished. If we are not in the final \"ok\" state, or if the\n // remaining source contains anything except whitespace, then we did not have\n //a well-formed JSON text.\n\n if (state !== \"ok\" || (/[^\\u0020\\t\\n\\r]/.test(source))) {\n throw (state instanceof SyntaxError)\n ? state\n : new SyntaxError(\"JSON\");\n }\n\n // If there is a reviver function, we recursively walk the new structure,\n // passing each name/value pair to the reviver function for possible\n // transformation, starting with a temporary root object that holds the current\n // value in an empty key. If there is not a reviver function, we simply return\n // that value.\n\n return (typeof reviver === \"function\")\n ? (function walk(holder, key) {\n var k;\n var v;\n var val = holder[key];\n if (val && typeof val === \"object\") {\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(val, k)) {\n v = walk(val, k);\n if (v !== undefined) {\n val[k] = v;\n } else {\n delete val[k];\n }\n }\n }\n }\n return reviver.call(holder, key, val);\n }({\"\": value}, \"\"))\n : value;\n };\n }());\n }\n}\n\nmodule.exports = setupCustomJSON;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./vendor/JSON-js/json3.js\n// module id = 8\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Notifier - the internal object responsible for delegating between the client exposed API, the\n * chain of transforms necessary to turn an item into something that can be sent to Rollbar, and the\n * queue which handles the communcation with the Rollbar API servers.\n *\n * @param queue - an object that conforms to the interface: addItem(item, callback)\n * @param options - an object representing the options to be set for this notifier, this should have\n * any defaults already set by the caller\n */\nfunction Notifier(queue, options) {\n this.queue = queue;\n this.options = options;\n this.transforms = [];\n}\n\n/*\n * configure - updates the options for this notifier with the passed in object\n *\n * @param options - an object which gets merged with the current options set on this notifier\n * @returns this\n */\nNotifier.prototype.configure = function(options) {\n this.queue && this.queue.configure(options);\n var oldOptions = this.options;\n this.options = _.extend(true, {}, oldOptions, options);\n return this;\n};\n\n/*\n * addTransform - adds a transform onto the end of the queue of transforms for this notifier\n *\n * @param transform - a function which takes three arguments:\n * * item: An Object representing the data to eventually be sent to Rollbar\n * * options: The current value of the options for this notifier\n * * callback: function(err: (Null|Error), item: (Null|Object)) the transform must call this\n * callback with a null value for error if it wants the processing chain to continue, otherwise\n * with an error to terminate the processing. The item should be the updated item after this\n * transform is finished modifying it.\n */\nNotifier.prototype.addTransform = function(transform) {\n if (_.isFunction(transform)) {\n this.transforms.push(transform);\n }\n return this;\n};\n\n/*\n * log - the internal log function which applies the configured transforms and then pushes onto the\n * queue to be sent to the backend.\n *\n * @param item - An object with the following structure:\n * message [String] - An optional string to be sent to rollbar\n * error [Error] - An optional error\n *\n * @param callback - A function of type function(err, resp) which will be called with exactly one\n * null argument and one non-null argument. The callback will be called once, either during the\n * transform stage if an error occurs inside a transform, or in response to the communication with\n * the backend. The second argument will be the response from the backend in case of success.\n */\nNotifier.prototype.log = function(item, callback) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!this.options.enabled) {\n return callback(new Error('Rollbar is not enabled'));\n }\n\n this.queue.addPendingItem(item);\n var originalError = item.err;\n this._applyTransforms(item, function(err, i) {\n if (err) {\n this.queue.removePendingItem(item);\n return callback(err, null);\n }\n this.queue.addItem(i, callback, originalError, item);\n }.bind(this));\n};\n\n/* Internal */\n\n/*\n * _applyTransforms - Applies the transforms that have been added to this notifier sequentially. See\n * `addTransform` for more information.\n *\n * @param item - An item to be transformed\n * @param callback - A function of type function(err, item) which will be called with a non-null\n * error and a null item in the case of a transform failure, or a null error and non-null item after\n * all transforms have been applied.\n */\nNotifier.prototype._applyTransforms = function(item, callback) {\n var transformIndex = -1;\n var transformsLength = this.transforms.length;\n var transforms = this.transforms;\n var options = this.options;\n\n var cb = function(err, i) {\n if (err) {\n callback(err, null);\n return;\n }\n\n transformIndex++;\n\n if (transformIndex === transformsLength) {\n callback(null, i);\n return;\n }\n\n transforms[transformIndex](i, options, cb);\n };\n\n cb(null, item);\n};\n\nmodule.exports = Notifier;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/notifier.js\n// module id = 9\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nvar MAX_EVENTS = 100;\n\nfunction Telemeter(options) {\n this.queue = [];\n this.options = _.extend(true, {}, options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n this.maxQueueSize = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n}\n\nTelemeter.prototype.configure = function(options) {\n var oldOptions = this.options;\n this.options = _.extend(true, {}, oldOptions, options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n var newMaxEvents = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n var deleteCount = 0;\n if (this.maxQueueSize > newMaxEvents) {\n deleteCount = this.maxQueueSize - newMaxEvents;\n }\n this.maxQueueSize = newMaxEvents;\n this.queue.splice(0, deleteCount);\n};\n\nTelemeter.prototype.copyEvents = function() {\n return Array.prototype.slice.call(this.queue, 0);\n};\n\nTelemeter.prototype.capture = function(type, metadata, level, rollbarUUID, timestamp) {\n var e = {\n level: getLevel(type, level),\n type: type,\n timestamp_ms: timestamp || _.now(),\n body: metadata,\n source: 'client'\n };\n if (rollbarUUID) {\n e.uuid = rollbarUUID;\n }\n\n try {\n if (_.isFunction(this.options.filterTelemetry) && this.options.filterTelemetry(e)) {\n return false;\n }\n } catch (e) {\n this.options.filterTelemetry = null;\n }\n\n this.push(e);\n return e;\n};\n\nTelemeter.prototype.captureEvent = function(metadata, level, rollbarUUID) {\n return this.capture('manual', metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.captureError = function(err, level, rollbarUUID, timestamp) {\n var metadata = {\n message: err.message || String(err)\n };\n if (err.stack) {\n metadata.stack = err.stack;\n }\n return this.capture('error', metadata, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureLog = function(message, level, rollbarUUID, timestamp) {\n return this.capture('log', {\n message: message\n }, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureNetwork = function(metadata, subtype, rollbarUUID, requestData) {\n subtype = subtype || 'xhr';\n metadata.subtype = metadata.subtype || subtype;\n if (requestData) {\n metadata.request = requestData;\n }\n var level = this.levelFromStatus(metadata.status_code);\n return this.capture('network', metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.levelFromStatus = function(statusCode) {\n if (statusCode >= 200 && statusCode < 400) {\n return 'info';\n }\n if (statusCode === 0 || statusCode >= 400) {\n return 'error';\n }\n return 'info';\n};\n\nTelemeter.prototype.captureDom = function(subtype, element, value, checked, rollbarUUID) {\n var metadata = {\n subtype: subtype,\n element: element\n };\n if (value !== undefined) {\n metadata.value = value;\n }\n if (checked !== undefined) {\n metadata.checked = checked;\n }\n return this.capture('dom', metadata, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureNavigation = function(from, to, rollbarUUID) {\n return this.capture('navigation', {from: from, to: to}, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureDomContentLoaded = function(ts) {\n return this.capture('navigation', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n */\n};\nTelemeter.prototype.captureLoad = function(ts) {\n return this.capture('navigation', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n */\n};\n\nTelemeter.prototype.captureConnectivityChange = function(type, rollbarUUID) {\n return this.captureNetwork({change: type}, 'connectivity', rollbarUUID);\n};\n\n// Only intended to be used internally by the notifier\nTelemeter.prototype._captureRollbarItem = function(item) {\n if (!this.options.includeItemsInTelemetry) {\n return;\n }\n if (item.err) {\n return this.captureError(item.err, item.level, item.uuid, item.timestamp);\n }\n if (item.message) {\n return this.captureLog(item.message, item.level, item.uuid, item.timestamp);\n }\n if (item.custom) {\n return this.capture('log', item.custom, item.level, item.uuid, item.timestamp);\n }\n};\n\nTelemeter.prototype.push = function(e) {\n this.queue.push(e);\n if (this.queue.length > this.maxQueueSize) {\n this.queue.shift();\n }\n};\n\nfunction getLevel(type, level) {\n if (level) {\n return level;\n }\n var defaultLevel = {\n error: 'error',\n manual: 'info'\n };\n return defaultLevel[type] || 'info';\n}\n\nmodule.exports = Telemeter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/telemetry.js\n// module id = 10\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\nvar helpers = require('./apiUtility');\n\nvar defaultOptions = {\n hostname: 'api.rollbar.com',\n path: '/api/1/item/',\n search: null,\n version: '1',\n protocol: 'https:',\n port: 443\n};\n\n/**\n * Api is an object that encapsulates methods of communicating with\n * the Rollbar API. It is a standard interface with some parts implemented\n * differently for server or browser contexts. It is an object that should\n * be instantiated when used so it can contain non-global options that may\n * be different for another instance of RollbarApi.\n *\n * @param options {\n * accessToken: the accessToken to use for posting items to rollbar\n * endpoint: an alternative endpoint to send errors to\n * must be a valid, fully qualified URL.\n * The default is: https://api.rollbar.com/api/1/item\n * proxy: if you wish to proxy requests provide an object\n * with the following keys:\n * host or hostname (required): foo.example.com\n * port (optional): 123\n * protocol (optional): https\n * }\n */\nfunction Api(options, t, u, j) {\n this.options = options;\n this.transport = t;\n this.url = u;\n this.jsonBackup = j;\n this.accessToken = options.accessToken;\n this.transportOptions = _getTransport(options, u);\n}\n\n/**\n *\n * @param data\n * @param callback\n */\nApi.prototype.postItem = function(data, callback) {\n var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n this.transport.post(this.accessToken, transportOptions, payload, callback);\n};\n\nApi.prototype.configure = function(options) {\n var oldOptions = this.oldOptions;\n this.options = _.extend(true, {}, oldOptions, options);\n this.transportOptions = _getTransport(this.options, this.url);\n if (this.options.accessToken !== undefined) {\n this.accessToken = this.options.accessToken;\n }\n return this;\n};\n\nfunction _getTransport(options, url) {\n return helpers.getTransportFromOptions(options, defaultOptions, url);\n}\n\nmodule.exports = Api;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/api.js\n// module id = 11\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction buildPayload(accessToken, data, jsonBackup) {\n if (!_.isType(data.context, 'string')) {\n var contextResult = _.stringify(data.context, jsonBackup);\n if (contextResult.error) {\n data.context = 'Error: could not serialize \\'context\\'';\n } else {\n data.context = contextResult.value || '';\n }\n if (data.context.length > 255) {\n data.context = data.context.substr(0, 255);\n }\n }\n return {\n access_token: accessToken,\n data: data\n };\n}\n\nfunction getTransportFromOptions(options, defaults, url) {\n var hostname = defaults.hostname;\n var protocol = defaults.protocol;\n var port = defaults.port;\n var path = defaults.path;\n var search = defaults.search;\n\n var proxy = options.proxy;\n if (options.endpoint) {\n var opts = url.parse(options.endpoint);\n hostname = opts.hostname;\n protocol = opts.protocol;\n port = opts.port;\n path = opts.pathname;\n search = opts.search;\n }\n return {\n hostname: hostname,\n protocol: protocol,\n port: port,\n path: path,\n search: search,\n proxy: proxy\n };\n}\n\nfunction transportOptions(transport, method) {\n var protocol = transport.protocol || 'https:';\n var port = transport.port || (protocol === 'http:' ? 80 : protocol === 'https:' ? 443 : undefined);\n var hostname = transport.hostname;\n var path = transport.path;\n if (transport.search) {\n path = path + transport.search;\n }\n if (transport.proxy) {\n path = protocol + '//' + hostname + path;\n hostname = transport.proxy.host || transport.proxy.hostname;\n port = transport.proxy.port;\n protocol = transport.proxy.protocol || protocol;\n }\n return {\n protocol: protocol,\n hostname: hostname,\n path: path,\n port: port,\n method: method\n };\n}\n\nfunction appendPathToPath(base, path) {\n var baseTrailingSlash = /\\/$/.test(base);\n var pathBeginningSlash = /^\\//.test(path);\n\n if (baseTrailingSlash && pathBeginningSlash) {\n path = path.substring(1);\n } else if (!baseTrailingSlash && !pathBeginningSlash) {\n path = '/' + path;\n }\n\n return base + path;\n}\n\nmodule.exports = {\n buildPayload: buildPayload,\n getTransportFromOptions: getTransportFromOptions,\n transportOptions: transportOptions,\n appendPathToPath: appendPathToPath\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/apiUtility.js\n// module id = 12\n// module chunks = 0","'use strict';\n\n/* eslint-disable no-console */\nrequire('console-polyfill');\nvar detection = require('./detection');\nvar _ = require('../utility');\n\nfunction error() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.error(_.formatArgsAsString(args));\n } else {\n console.error.apply(console, args);\n }\n}\n\nfunction info() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.info(_.formatArgsAsString(args));\n } else {\n console.info.apply(console, args);\n }\n}\n\nfunction log() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.log(_.formatArgsAsString(args));\n } else {\n console.log.apply(console, args);\n }\n}\n\n/* eslint-enable no-console */\n\nmodule.exports = {\n error: error,\n info: info,\n log: log\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/logger.js\n// module id = 13\n// module chunks = 0","// Console-polyfill. MIT license.\n// https://github.com/paulmillr/console-polyfill\n// Make it safe to do console.log() always.\n(function(global) {\n 'use strict';\n if (!global.console) {\n global.console = {};\n }\n var con = global.console;\n var prop, method;\n var dummy = function() {};\n var properties = ['memory'];\n var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' +\n 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' +\n 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',');\n while (prop = properties.pop()) if (!con[prop]) con[prop] = {};\n while (method = methods.pop()) if (!con[method]) con[method] = dummy;\n // Using `this` for web workers & supports Browserify / Webpack.\n})(typeof window === 'undefined' ? this : window);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/console-polyfill/index.js\n// module id = 14\n// module chunks = 0","'use strict';\n\n// This detection.js module is used to encapsulate any ugly browser/feature\n// detection we may need to do.\n\n// Figure out which version of IE we're using, if any.\n// This is gleaned from http://stackoverflow.com/questions/5574842/best-way-to-check-for-ie-less-than-9-in-javascript-without-library\n// Will return an integer on IE (i.e. 8)\n// Will return undefined otherwise\nfunction getIEVersion() {\n\tvar undef;\n\tif (!document) {\n\t\treturn undef;\n\t}\n\n var v = 3,\n div = document.createElement('div'),\n all = div.getElementsByTagName('i');\n\n while (\n div.innerHTML = '',\n all[0]\n );\n\n return v > 4 ? v : undef;\n}\n\nvar Detection = {\n ieVersion: getIEVersion\n};\n\nmodule.exports = Detection;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/detection.js\n// module id = 15\n// module chunks = 0","'use strict';\n\nfunction captureUncaughtExceptions(window, handler, shim) {\n if (!window) { return; }\n var oldOnError;\n\n if (typeof handler._rollbarOldOnError === 'function') {\n oldOnError = handler._rollbarOldOnError;\n } else if (window.onerror && !window.onerror.belongsToShim) {\n oldOnError = window.onerror;\n handler._rollbarOldOnError = oldOnError;\n }\n\n var fn = function() {\n var args = Array.prototype.slice.call(arguments, 0);\n _rollbarWindowOnError(window, handler, oldOnError, args);\n };\n fn.belongsToShim = shim;\n window.onerror = fn;\n}\n\nfunction _rollbarWindowOnError(window, r, old, args) {\n if (window._rollbarWrappedError) {\n if (!args[4]) {\n args[4] = window._rollbarWrappedError;\n }\n if (!args[5]) {\n args[5] = window._rollbarWrappedError._rollbarContext;\n }\n window._rollbarWrappedError = null;\n }\n\n r.handleUncaughtException.apply(r, args);\n if (old) {\n old.apply(window, args);\n }\n}\n\nfunction captureUnhandledRejections(window, handler, shim) {\n if (!window) { return; }\n\n if (typeof window._rollbarURH === 'function' && window._rollbarURH.belongsToShim) {\n window.removeEventListener('unhandledrejection', window._rollbarURH);\n }\n\n var rejectionHandler = function (evt) {\n var reason, promise, detail;\n try {\n reason = evt.reason;\n } catch (e) {\n reason = undefined;\n }\n try {\n promise = evt.promise;\n } catch (e) {\n promise = '[unhandledrejection] error getting `promise` from event';\n }\n try {\n detail = evt.detail;\n if (!reason && detail) {\n reason = detail.reason;\n promise = detail.promise;\n }\n } catch (e) {\n detail = '[unhandledrejection] error getting `detail` from event';\n }\n if (!reason) {\n reason = '[unhandledrejection] error getting `reason` from event';\n }\n\n if (handler && handler.handleUnhandledRejection) {\n handler.handleUnhandledRejection(reason, promise);\n }\n };\n rejectionHandler.belongsToShim = shim;\n window._rollbarURH = rejectionHandler;\n window.addEventListener('unhandledrejection', rejectionHandler);\n}\n\nfunction wrapGlobals(window, handler, shim) {\n if (!window) { return; }\n // Adapted from https://github.com/bugsnag/bugsnag-js\n var globals = 'EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload'.split(',');\n var i, global;\n for (i = 0; i < globals.length; ++i) {\n global = globals[i];\n\n if (window[global] && window[global].prototype) {\n _extendListenerPrototype(handler, window[global].prototype, shim);\n }\n }\n}\n\nfunction _extendListenerPrototype(handler, prototype, shim) {\n if (prototype.hasOwnProperty && prototype.hasOwnProperty('addEventListener')) {\n var oldAddEventListener = prototype.addEventListener;\n while (oldAddEventListener._rollbarOldAdd && oldAddEventListener.belongsToShim) {\n oldAddEventListener = oldAddEventListener._rollbarOldAdd;\n }\n var addFn = function(event, callback, bubble) {\n oldAddEventListener.call(this, event, handler.wrap(callback), bubble);\n };\n addFn._rollbarOldAdd = oldAddEventListener;\n addFn.belongsToShim = shim;\n prototype.addEventListener = addFn;\n\n var oldRemoveEventListener = prototype.removeEventListener;\n while (oldRemoveEventListener._rollbarOldRemove && oldRemoveEventListener.belongsToShim) {\n oldRemoveEventListener = oldRemoveEventListener._rollbarOldRemove;\n }\n var removeFn = function(event, callback, bubble) {\n oldRemoveEventListener.call(this, event, callback && callback._rollbar_wrapped || callback, bubble);\n };\n removeFn._rollbarOldRemove = oldRemoveEventListener;\n removeFn.belongsToShim = shim;\n prototype.removeEventListener = removeFn;\n }\n}\n\nmodule.exports = {\n captureUncaughtExceptions: captureUncaughtExceptions,\n captureUnhandledRejections: captureUnhandledRejections,\n wrapGlobals: wrapGlobals\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/globalSetup.js\n// module id = 16\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar logger = require('./logger');\n\n/*\n * accessToken may be embedded in payload but that should not\n * be assumed\n *\n * options: {\n * hostname\n * protocol\n * path\n * port\n * method\n * }\n *\n * params is an object containing key/value pairs. These\n * will be appended to the path as 'key=value&key=value'\n *\n * payload is an unserialized object\n */\n\nfunction get(accessToken, options, params, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n _.addParamsAndAccessTokenToPath(accessToken, options, params);\n\n var method = 'GET';\n var url = _.formatUrl(options);\n _makeRequest(accessToken, url, method, null, callback, requestFactory);\n}\n\nfunction post(accessToken, options, payload, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!payload) {\n return callback(new Error('Cannot send empty request'));\n }\n\n var stringifyResult = _.stringify(payload);\n if (stringifyResult.error) {\n return callback(stringifyResult.error);\n }\n\n var writeData = stringifyResult.value;\n var method = 'POST';\n var url = _.formatUrl(options);\n _makeRequest(accessToken, url, method, writeData, callback, requestFactory);\n}\n\nfunction _makeRequest(accessToken, url, method, data, callback, requestFactory) {\n var request;\n if (requestFactory) {\n request = requestFactory();\n } else {\n request = _createXMLHTTPObject();\n }\n if (!request) {\n // Give up, no way to send requests\n return callback(new Error('No way to send a request'));\n }\n try {\n try {\n var onreadystatechange = function() {\n try {\n if (onreadystatechange && request.readyState === 4) {\n onreadystatechange = undefined;\n\n var parseResponse = _.jsonParse(request.responseText);\n if (_isSuccess(request)) {\n callback(parseResponse.error, parseResponse.value);\n return;\n } else if (_isNormalFailure(request)) {\n if (request.status === 403) {\n // likely caused by using a server access token\n var message = parseResponse.value && parseResponse.value.message;\n logger.error(message);\n }\n // return valid http status codes\n callback(new Error(String(request.status)));\n } else {\n // IE will return a status 12000+ on some sort of connection failure,\n // so we return a blank error\n // http://msdn.microsoft.com/en-us/library/aa383770%28VS.85%29.aspx\n var msg = 'XHR response had no status code (likely connection failure)';\n callback(_newRetriableError(msg));\n }\n }\n } catch (ex) {\n //jquery source mentions firefox may error out while accessing the\n //request members if there is a network error\n //https://github.com/jquery/jquery/blob/a938d7b1282fc0e5c52502c225ae8f0cef219f0a/src/ajax/xhr.js#L111\n var exc;\n if (ex && ex.stack) {\n exc = ex;\n } else {\n exc = new Error(ex);\n }\n callback(exc);\n }\n };\n\n request.open(method, url, true);\n if (request.setRequestHeader) {\n request.setRequestHeader('Content-Type', 'application/json');\n request.setRequestHeader('X-Rollbar-Access-Token', accessToken);\n }\n request.onreadystatechange = onreadystatechange;\n request.send(data);\n } catch (e1) {\n // Sending using the normal xmlhttprequest object didn't work, try XDomainRequest\n if (typeof XDomainRequest !== 'undefined') {\n\n // Assume we are in a really old browser which has a bunch of limitations:\n // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\n // Extreme paranoia: if we have XDomainRequest then we have a window, but just in case\n if (!window || !window.location) {\n return callback(new Error('No window available during request, unknown environment'));\n }\n\n // If the current page is http, try and send over http\n if (window.location.href.substring(0, 5) === 'http:' && url.substring(0, 5) === 'https') {\n url = 'http' + url.substring(5);\n }\n\n var xdomainrequest = new XDomainRequest();\n xdomainrequest.onprogress = function() {};\n xdomainrequest.ontimeout = function() {\n var msg = 'Request timed out';\n var code = 'ETIMEDOUT';\n callback(_newRetriableError(msg, code));\n };\n xdomainrequest.onerror = function() {\n callback(new Error('Error during request'));\n };\n xdomainrequest.onload = function() {\n var parseResponse = _.jsonParse(xdomainrequest.responseText);\n callback(parseResponse.error, parseResponse.value);\n };\n xdomainrequest.open(method, url, true);\n xdomainrequest.send(data);\n } else {\n callback(new Error('Cannot find a method to transport a request'));\n }\n }\n } catch (e2) {\n callback(e2);\n }\n}\n\nfunction _createXMLHTTPObject() {\n /* global ActiveXObject:false */\n\n var factories = [\n function () {\n return new XMLHttpRequest();\n },\n function () {\n return new ActiveXObject('Msxml2.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Msxml3.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Microsoft.XMLHTTP');\n }\n ];\n var xmlhttp;\n var i;\n var numFactories = factories.length;\n for (i = 0; i < numFactories; i++) {\n /* eslint-disable no-empty */\n try {\n xmlhttp = factories[i]();\n break;\n } catch (e) {\n // pass\n }\n /* eslint-enable no-empty */\n }\n return xmlhttp;\n}\n\nfunction _isSuccess(r) {\n return r && r.status && r.status === 200;\n}\n\nfunction _isNormalFailure(r) {\n return r && _.isType(r.status, 'number') && r.status >= 400 && r.status < 600;\n}\n\nfunction _newRetriableError(message, code) {\n var err = new Error(message);\n err.code = code || 'ENOTFOUND';\n return err;\n}\n\nmodule.exports = {\n get: get,\n post: post\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transport.js\n// module id = 17\n// module chunks = 0","'use strict';\n\n// See https://nodejs.org/docs/latest/api/url.html\nfunction parse(url) {\n var result = {\n protocol: null, auth: null, host: null, path: null,\n hash: null, href: url, hostname: null, port: null,\n pathname: null, search: null, query: null\n };\n\n var i, last;\n i = url.indexOf('//');\n if (i !== -1) {\n result.protocol = url.substring(0,i);\n last = i+2;\n } else {\n last = 0;\n }\n \n i = url.indexOf('@', last);\n if (i !== -1) {\n result.auth = url.substring(last, i);\n last = i+1;\n }\n\n i = url.indexOf('/', last);\n if (i === -1) {\n i = url.indexOf('?', last);\n if (i === -1) {\n i = url.indexOf('#', last);\n if (i === -1) {\n result.host = url.substring(last);\n } else {\n result.host = url.substring(last, i);\n result.hash = url.substring(i);\n }\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n return result;\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n\n i = url.indexOf('#', last);\n if (i === -1) {\n result.path = url.substring(last);\n } else {\n result.path = url.substring(last, i);\n result.hash = url.substring(i);\n }\n\n if (result.path) {\n var pathParts = result.path.split('?');\n result.pathname = pathParts[0];\n result.query = pathParts[1];\n result.search = result.query ? '?' + result.query : null;\n }\n return result;\n}\n\nmodule.exports = {\n parse: parse\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/url.js\n// module id = 18\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar errorParser = require('./errorParser');\nvar logger = require('./logger');\n\nfunction handleItemWithError(item, options, callback) {\n item.data = item.data || {};\n if (item.err) {\n try {\n item.stackInfo = item.err._savedStackTrace || errorParser.parse(item.err);\n } catch (e)\n /* istanbul ignore next */\n {\n logger.error('Error while parsing the error object.', e);\n item.message = item.err.message || item.err.description || item.message || String(item.err);\n delete item.err;\n }\n }\n callback(null, item);\n}\n\nfunction ensureItemHasSomethingToSay(item, options, callback) {\n if (!item.message && !item.stackInfo && !item.custom) {\n callback(new Error('No message, stack info, or custom data'), null);\n }\n callback(null, item);\n}\n\nfunction addBaseInfo(item, options, callback) {\n var environment = (options.payload && options.payload.environment) || options.environment;\n item.data = _.extend(true, {}, item.data, {\n environment: environment,\n level: item.level,\n endpoint: options.endpoint,\n platform: 'browser',\n framework: 'browser-js',\n language: 'javascript',\n server: {},\n uuid: item.uuid,\n notifier: {\n name: 'rollbar-browser-js',\n version: options.version\n }\n });\n callback(null, item);\n}\n\nfunction addRequestInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.location) {\n return callback(null, item);\n }\n _.set(item, 'data.request', {\n url: window.location.href,\n query_string: window.location.search,\n user_ip: '$remote_ip'\n });\n callback(null, item);\n };\n}\n\nfunction addClientInfo(window) {\n return function(item, options, callback) {\n if (!window) {\n return callback(null, item);\n }\n var nav = window.navigator || {};\n var scr = window.screen || {};\n _.set(item, 'data.client', {\n runtime_ms: item.timestamp - window._rollbarStartTime,\n timestamp: Math.round(item.timestamp / 1000),\n javascript: {\n browser: nav.userAgent,\n language: nav.language,\n cookie_enabled: nav.cookieEnabled,\n screen: {\n width: scr.width,\n height: scr.height\n }\n }\n });\n callback(null, item);\n };\n}\n\nfunction addPluginInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.navigator) {\n return callback(null, item);\n }\n var plugins = [];\n var navPlugins = window.navigator.plugins || [];\n var cur;\n for (var i=0, l=navPlugins.length; i < l; ++i) {\n cur = navPlugins[i];\n plugins.push({name: cur.name, description: cur.description});\n }\n _.set(item, 'data.client.javascript.plugins', plugins);\n callback(null, item);\n };\n}\n\nfunction addBody(item, options, callback) {\n if (item.stackInfo) {\n addBodyTrace(item, options, callback);\n } else {\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction addBodyMessage(item, options, callback) {\n var message = item.message;\n var custom = item.custom;\n\n if (!message) {\n if (custom) {\n var scrubFields = options.scrubFields;\n var messageResult = _.stringify(_.scrub(custom, scrubFields));\n message = messageResult.error || messageResult.value || '';\n } else {\n message = '';\n }\n }\n var result = {\n body: message\n };\n\n if (custom) {\n result.extra = _.extend(true, {}, custom);\n }\n\n _.set(item, 'data.body', {message: result});\n callback(null, item);\n}\n\n\nfunction addBodyTrace(item, options, callback) {\n var description = item.data.description;\n var stackInfo = item.stackInfo;\n var custom = item.custom;\n\n var guess = errorParser.guessErrorClass(stackInfo.message);\n var className = stackInfo.name || guess[0];\n var message = guess[1];\n var trace = {\n exception: {\n 'class': className,\n message: message\n }\n };\n\n if (description) {\n trace.exception.description = description;\n }\n\n // Transform a TraceKit stackInfo object into a Rollbar trace\n var stack = stackInfo.stack;\n if (stack && stack.length === 0 && item._unhandledStackInfo && item._unhandledStackInfo.stack) {\n stack = item._unhandledStackInfo.stack;\n }\n if (stack) {\n if (stack.length === 0) {\n trace.exception.stack = stackInfo.rawStack;\n trace.exception.raw = String(stackInfo.rawException);\n }\n var stackFrame;\n var frame;\n var code;\n var pre;\n var post;\n var contextLength;\n var i, mid;\n\n trace.frames = [];\n for (i = 0; i < stack.length; ++i) {\n stackFrame = stack[i];\n frame = {\n filename: stackFrame.url ? _.sanitizeUrl(stackFrame.url) : '(unknown)',\n lineno: stackFrame.line || null,\n method: (!stackFrame.func || stackFrame.func === '?') ? '[anonymous]' : stackFrame.func,\n colno: stackFrame.column\n };\n if (frame.method && frame.method.endsWith && frame.method.endsWith('_rollbar_wrapped')) {\n continue;\n }\n\n code = pre = post = null;\n contextLength = stackFrame.context ? stackFrame.context.length : 0;\n if (contextLength) {\n mid = Math.floor(contextLength / 2);\n pre = stackFrame.context.slice(0, mid);\n code = stackFrame.context[mid];\n post = stackFrame.context.slice(mid);\n }\n\n if (code) {\n frame.code = code;\n }\n\n if (pre || post) {\n frame.context = {};\n if (pre && pre.length) {\n frame.context.pre = pre;\n }\n if (post && post.length) {\n frame.context.post = post;\n }\n }\n\n if (stackFrame.args) {\n frame.args = stackFrame.args;\n }\n\n trace.frames.push(frame);\n }\n\n // NOTE(cory): reverse the frames since rollbar.com expects the most recent call last\n trace.frames.reverse();\n\n if (custom) {\n trace.extra = _.extend(true, {}, custom);\n }\n _.set(item, 'data.body', {trace: trace});\n callback(null, item);\n } else {\n item.message = className + ': ' + message;\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction scrubPayload(item, options, callback) {\n var scrubFields = options.scrubFields;\n item.data = _.scrub(item.data, scrubFields);\n callback(null, item);\n}\n\nmodule.exports = {\n handleItemWithError: handleItemWithError,\n ensureItemHasSomethingToSay: ensureItemHasSomethingToSay,\n addBaseInfo: addBaseInfo,\n addRequestInfo: addRequestInfo,\n addClientInfo: addClientInfo,\n addPluginInfo: addPluginInfo,\n addBody: addBody,\n scrubPayload: scrubPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transforms.js\n// module id = 19\n// module chunks = 0","'use strict';\n\nvar ErrorStackParser = require('error-stack-parser');\n\nvar UNKNOWN_FUNCTION = '?';\nvar ERR_CLASS_REGEXP = new RegExp('^(([a-zA-Z0-9-_$ ]*): *)?(Uncaught )?([a-zA-Z0-9-_$ ]*): ');\n\nfunction guessFunctionName() {\n return UNKNOWN_FUNCTION;\n}\n\n\nfunction gatherContext() {\n return null;\n}\n\n\nfunction Frame(stackFrame) {\n var data = {};\n\n data._stackFrame = stackFrame;\n\n data.url = stackFrame.fileName;\n data.line = stackFrame.lineNumber;\n data.func = stackFrame.functionName;\n data.column = stackFrame.columnNumber;\n data.args = stackFrame.args;\n\n data.context = gatherContext(data.url, data.line);\n\n return data;\n}\n\n\nfunction Stack(exception) {\n function getStack() {\n var parserStack = [];\n var exc;\n\n if (!exception.stack) {\n try {\n throw exception;\n } catch (e) {\n exc = e;\n }\n } else {\n exc = exception;\n }\n\n try {\n parserStack = ErrorStackParser.parse(exc);\n } catch(e) {\n parserStack = [];\n }\n\n var stack = [];\n\n for (var i = 0; i < parserStack.length; i++) {\n stack.push(new Frame(parserStack[i]));\n }\n\n return stack;\n }\n\n return {\n stack: getStack(),\n message: exception.message,\n name: exception.name,\n rawStack: exception.stack,\n rawException: exception\n };\n}\n\n\nfunction parse(e) {\n return new Stack(e);\n}\n\n\nfunction guessErrorClass(errMsg) {\n if (!errMsg || !errMsg.match) {\n return ['Unknown error. There was no error message to display.', ''];\n }\n var errClassMatch = errMsg.match(ERR_CLASS_REGEXP);\n var errClass = '(unknown)';\n\n if (errClassMatch) {\n errClass = errClassMatch[errClassMatch.length - 1];\n errMsg = errMsg.replace((errClassMatch[errClassMatch.length - 2] || '') + errClass + ':', '');\n errMsg = errMsg.replace(/(^[\\s]+|[\\s]+$)/g, '');\n }\n return [errClass, errMsg];\n}\n\n\nmodule.exports = {\n guessFunctionName: guessFunctionName,\n guessErrorClass: guessErrorClass,\n gatherContext: gatherContext,\n parse: parse,\n Stack: Stack,\n Frame: Frame\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/errorParser.js\n// module id = 20\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = locationParts[0] === 'eval' ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/error-stack-parser.js\n// module id = 21\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stackframe', [], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.StackFrame = factory();\n }\n}(this, function () {\n 'use strict';\n function _isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n function StackFrame(functionName, args, fileName, lineNumber, columnNumber, source) {\n if (functionName !== undefined) {\n this.setFunctionName(functionName);\n }\n if (args !== undefined) {\n this.setArgs(args);\n }\n if (fileName !== undefined) {\n this.setFileName(fileName);\n }\n if (lineNumber !== undefined) {\n this.setLineNumber(lineNumber);\n }\n if (columnNumber !== undefined) {\n this.setColumnNumber(columnNumber);\n }\n if (source !== undefined) {\n this.setSource(source);\n }\n }\n\n StackFrame.prototype = {\n getFunctionName: function () {\n return this.functionName;\n },\n setFunctionName: function (v) {\n this.functionName = String(v);\n },\n\n getArgs: function () {\n return this.args;\n },\n setArgs: function (v) {\n if (Object.prototype.toString.call(v) !== '[object Array]') {\n throw new TypeError('Args must be an Array');\n }\n this.args = v;\n },\n\n // NOTE: Property name may be misleading as it includes the path,\n // but it somewhat mirrors V8's JavaScriptStackTraceApi\n // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's\n // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14\n getFileName: function () {\n return this.fileName;\n },\n setFileName: function (v) {\n this.fileName = String(v);\n },\n\n getLineNumber: function () {\n return this.lineNumber;\n },\n setLineNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Line Number must be a Number');\n }\n this.lineNumber = Number(v);\n },\n\n getColumnNumber: function () {\n return this.columnNumber;\n },\n setColumnNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Column Number must be a Number');\n }\n this.columnNumber = Number(v);\n },\n\n getSource: function () {\n return this.source;\n },\n setSource: function (v) {\n this.source = String(v);\n },\n\n toString: function() {\n var functionName = this.getFunctionName() || '{anonymous}';\n var args = '(' + (this.getArgs() || []).join(',') + ')';\n var fileName = this.getFileName() ? ('@' + this.getFileName()) : '';\n var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : '';\n var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : '';\n return functionName + args + fileName + lineNumber + columnNumber;\n }\n };\n\n return StackFrame;\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/~/stackframe/stackframe.js\n// module id = 22\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction itemToPayload(item, options, callback) {\n var payloadOptions = options.payload || {};\n if (payloadOptions.body) {\n delete payloadOptions.body;\n }\n\n var data = _.extend(true, {}, item.data, payloadOptions);\n if (item._isUncaught) {\n data._isUncaught = true;\n }\n if (item._originalArgs) {\n data._originalArgs = item._originalArgs;\n }\n callback(null, data);\n}\n\nfunction addTelemetryData(item, options, callback) {\n if (item.telemetryEvents) {\n _.set(item, 'data.body.telemetry', item.telemetryEvents);\n }\n callback(null, item);\n}\n\nfunction addMessageWithError(item, options, callback) {\n if (!item.message) {\n callback(null, item);\n return;\n }\n var tracePath = 'data.body.trace_chain.0';\n var trace = _.get(item, tracePath);\n if (!trace) {\n tracePath = 'data.body.trace';\n trace = _.get(item, tracePath);\n }\n if (trace) {\n if (!(trace.exception && trace.exception.description)) {\n _.set(item, tracePath+'.exception.description', item.message);\n callback(null, item);\n return;\n }\n var extra = _.get(item, tracePath+'.extra') || {};\n var newExtra = _.extend(true, {}, extra, {message: item.message});\n _.set(item, tracePath+'.extra', newExtra);\n }\n callback(null, item);\n}\n\nfunction userTransform(logger) {\n return function(item, options, callback) {\n var newItem = _.extend(true, {}, item);\n try {\n if (_.isFunction(options.transform)) {\n options.transform(newItem.data);\n }\n } catch (e) {\n options.transform = null;\n logger.error('Error while calling custom transform() function. Removing custom transform().', e);\n callback(null, item);\n return;\n }\n callback(null, newItem);\n }\n}\n\nfunction addConfigToPayload(item, options, callback) {\n if (!options.sendConfig) {\n return callback(null, item);\n }\n var configKey = '_rollbarConfig';\n var custom = _.get(item, 'data.custom') || {};\n custom[configKey] = options;\n item.data.custom = custom;\n callback(null, item);\n}\n\nmodule.exports = {\n itemToPayload: itemToPayload,\n addTelemetryData: addTelemetryData,\n addMessageWithError: addMessageWithError,\n userTransform: userTransform,\n addConfigToPayload: addConfigToPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/transforms.js\n// module id = 23\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\n\nfunction checkIgnore(item, settings) {\n if (_.get(settings, 'plugins.jquery.ignoreAjaxErrors')) {\n return !_.get(item, 'body.message.extra.isAjax');\n }\n return true;\n}\n\nmodule.exports = {\n checkIgnore: checkIgnore\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/predicates.js\n// module id = 24\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction checkLevel(item, settings) {\n var level = item.level;\n var levelVal = _.LEVELS[level] || 0;\n var reportLevel = settings.reportLevel;\n var reportLevelVal = _.LEVELS[reportLevel] || 0;\n\n if (levelVal < reportLevelVal) {\n return false;\n }\n return true;\n}\n\nfunction userCheckIgnore(logger) {\n return function(item, settings) {\n var isUncaught = !!item._isUncaught;\n delete item._isUncaught;\n var args = item._originalArgs;\n delete item._originalArgs;\n try {\n if (_.isFunction(settings.onSendCallback)) {\n settings.onSendCallback(isUncaught, args, item);\n }\n } catch (e) {\n settings.onSendCallback = null;\n logger.error('Error while calling onSendCallback, removing', e);\n }\n try {\n if (_.isFunction(settings.checkIgnore) && settings.checkIgnore(isUncaught, args, item)) {\n return false;\n }\n } catch (e) {\n settings.checkIgnore = null;\n logger.error('Error while calling custom checkIgnore(), removing', e);\n }\n return true;\n }\n}\n\nfunction urlIsNotBlacklisted(logger) {\n return function(item, settings) {\n return !urlIsOnAList(item, settings, 'blacklist', logger);\n }\n}\n\nfunction urlIsWhitelisted(logger) {\n return function(item, settings) {\n return urlIsOnAList(item, settings, 'whitelist', logger);\n }\n}\n\nfunction urlIsOnAList(item, settings, whiteOrBlack, logger) {\n // whitelist is the default\n var black = false;\n if (whiteOrBlack === 'blacklist') {\n black = true;\n }\n var list, trace, frame, filename, frameLength, url, listLength, urlRegex;\n var i, j;\n\n try {\n list = black ? settings.hostBlackList : settings.hostWhiteList;\n listLength = list && list.length;\n trace = _.get(item, 'body.trace');\n\n // These two checks are important to come first as they are defaults\n // in case the list is missing or the trace is missing or not well-formed\n if (!list || listLength === 0) {\n return !black;\n }\n if (!trace || !trace.frames || trace.frames.length === 0) {\n return !black;\n }\n\n frameLength = trace.frames.length;\n for (i = 0; i < frameLength; i++) {\n frame = trace.frames[i];\n filename = frame.filename;\n\n if (!_.isType(filename, 'string')) {\n return !black;\n }\n\n for (j = 0; j < listLength; j++) {\n url = list[j];\n urlRegex = new RegExp(url);\n\n if (urlRegex.test(filename)) {\n return true;\n }\n }\n }\n } catch (e)\n /* istanbul ignore next */\n {\n if (black) {\n settings.hostBlackList = null;\n } else {\n settings.hostWhiteList = null;\n }\n var listName = black ? 'hostBlackList' : 'hostWhiteList';\n logger.error('Error while reading your configuration\\'s ' + listName + ' option. Removing custom ' + listName + '.', e);\n return !black;\n }\n return false;\n}\n\nfunction messageIsIgnored(logger) {\n return function(item, settings) {\n var exceptionMessage, i, ignoredMessages,\n len, messageIsIgnored, rIgnoredMessage,\n body, traceMessage, bodyMessage;\n\n try {\n messageIsIgnored = false;\n ignoredMessages = settings.ignoredMessages;\n\n if (!ignoredMessages || ignoredMessages.length === 0) {\n return true;\n }\n\n body = item.body;\n traceMessage = _.get(body, 'trace.exception.message');\n bodyMessage = _.get(body, 'message.body');\n\n exceptionMessage = traceMessage || bodyMessage;\n\n if (!exceptionMessage){\n return true;\n }\n\n len = ignoredMessages.length;\n for (i = 0; i < len; i++) {\n rIgnoredMessage = new RegExp(ignoredMessages[i], 'gi');\n messageIsIgnored = rIgnoredMessage.test(exceptionMessage);\n\n if (messageIsIgnored) {\n break;\n }\n }\n } catch(e)\n /* istanbul ignore next */\n {\n settings.ignoredMessages = null;\n logger.error('Error while reading your configuration\\'s ignoredMessages option. Removing custom ignoredMessages.');\n }\n\n return !messageIsIgnored;\n }\n}\n\nmodule.exports = {\n checkLevel: checkLevel,\n userCheckIgnore: userCheckIgnore,\n urlIsNotBlacklisted: urlIsNotBlacklisted,\n urlIsWhitelisted: urlIsWhitelisted,\n messageIsIgnored: messageIsIgnored\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/predicates.js\n// module id = 25\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar urlparser = require('./url');\nvar domUtil = require('./domUtility');\n\nvar defaults = {\n network: true,\n networkResponseHeaders: false,\n networkResponseBody: false,\n networkRequestBody: false,\n log: true,\n dom: true,\n navigation: true,\n connectivity: true\n};\n\nfunction replace(obj, name, replacement, replacements, type) {\n var orig = obj[name];\n obj[name] = replacement(orig);\n if (replacements) {\n replacements[type].push([obj, name, orig]);\n }\n}\n\nfunction restore(replacements, type) {\n var b;\n while (replacements[type].length) {\n b = replacements[type].shift();\n b[0][b[1]] = b[2];\n }\n}\n\nfunction Instrumenter(options, telemeter, rollbar, _window, _document) {\n var autoInstrument = options.autoInstrument;\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.extend(true, {}, defaults, autoInstrument);\n }\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n this.telemetryScrubber = options.telemetryScrubber;\n this.telemeter = telemeter;\n this.rollbar = rollbar;\n this._window = _window || {};\n this._document = _document || {};\n this.replacements = {\n network: [],\n log: [],\n navigation: [],\n connectivity: []\n };\n this.eventRemovers = {\n dom: [],\n connectivity: []\n };\n\n this._location = this._window.location;\n this._lastHref = this._location && this._location.href;\n}\n\nInstrumenter.prototype.configure = function(options) {\n var autoInstrument = options.autoInstrument;\n var oldSettings = _.extend(true, {}, this.autoInstrument);\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.extend(true, {}, defaults, autoInstrument);\n }\n this.instrument(oldSettings);\n if (options.scrubTelemetryInputs !== undefined) {\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n }\n if (options.telemetryScrubber !== undefined) {\n this.telemetryScrubber = options.telemetryScrubber;\n }\n};\n\nInstrumenter.prototype.instrument = function(oldSettings) {\n if (this.autoInstrument.network && !(oldSettings && oldSettings.network)) {\n this.instrumentNetwork();\n } else if (!this.autoInstrument.network && oldSettings && oldSettings.network) {\n this.deinstrumentNetwork();\n }\n\n if (this.autoInstrument.log && !(oldSettings && oldSettings.log)) {\n this.instrumentConsole();\n } else if (!this.autoInstrument.log && oldSettings && oldSettings.log) {\n this.deinstrumentConsole();\n }\n\n if (this.autoInstrument.dom && !(oldSettings && oldSettings.dom)) {\n this.instrumentDom();\n } else if (!this.autoInstrument.dom && oldSettings && oldSettings.dom) {\n this.deinstrumentDom();\n }\n\n if (this.autoInstrument.navigation && !(oldSettings && oldSettings.navigation)) {\n this.instrumentNavigation();\n } else if (!this.autoInstrument.navigation && oldSettings && oldSettings.navigation) {\n this.deinstrumentNavigation();\n }\n\n if (this.autoInstrument.connectivity && !(oldSettings && oldSettings.connectivity)) {\n this.instrumentConnectivity();\n } else if (!this.autoInstrument.connectivity && oldSettings && oldSettings.connectivity) {\n this.deinstrumentConnectivity();\n }\n};\n\nInstrumenter.prototype.deinstrumentNetwork = function() {\n restore(this.replacements, 'network');\n};\n\nInstrumenter.prototype.instrumentNetwork = function() {\n var self = this;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && _.isFunction(xhr[prop])) {\n replace(xhr, prop, function(orig) {\n return self.rollbar.wrap(orig);\n });\n }\n }\n\n if ('XMLHttpRequest' in this._window) {\n var xhrp = this._window.XMLHttpRequest.prototype;\n replace(xhrp, 'open', function(orig) {\n return function(method, url) {\n if (_.isType(url, 'string')) {\n this.__rollbar_xhr = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'network');\n\n replace(xhrp, 'send', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(data) {\n /* eslint-enable no-unused-vars */\n var xhr = this;\n\n function onreadystatechangeHandler() {\n if (xhr.__rollbar_xhr && (xhr.readyState === 1 || xhr.readyState === 4)) {\n if (xhr.__rollbar_xhr.status_code === null) {\n xhr.__rollbar_xhr.status_code = 0;\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n requestData = data;\n }\n xhr.__rollbar_event = self.telemeter.captureNetwork(xhr.__rollbar_xhr, 'xhr', undefined, requestData);\n }\n if (xhr.readyState === 1) {\n xhr.__rollbar_xhr.start_time_ms = _.now();\n } else {\n xhr.__rollbar_xhr.end_time_ms = _.now();\n\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n var header, i;\n if (headersConfig === true) {\n var allHeaders = xhr.getAllResponseHeaders();\n if (allHeaders) {\n var arr = allHeaders.trim().split(/[\\r\\n]+/);\n var parts, value;\n for (i=0; i < arr.length; i++) {\n parts = arr[i].split(': ');\n header = parts.shift();\n value = parts.join(': ');\n headers[header] = value;\n }\n }\n } else {\n for (i=0; i < headersConfig.length; i++) {\n header = headersConfig[i];\n headers[header] = xhr.getResponseHeader(header);\n }\n }\n } catch (e) {\n /* we ignore the errors here that could come from different\n * browser issues with the xhr methods */\n }\n }\n var body = null;\n if (self.autoInstrument.networkResponseBody) {\n try {\n body = xhr.responseText;\n } catch (e) {\n /* ignore errors from reading responseText */\n }\n }\n var response = null;\n if (body || headers) {\n response = {};\n if (body) {\n response.body = body;\n }\n if (headers) {\n response.headers = headers;\n }\n }\n if (response) {\n xhr.__rollbar_xhr.response = response;\n }\n }\n try {\n var code = xhr.status;\n code = code === 1223 ? 204 : code;\n xhr.__rollbar_xhr.status_code = code;\n xhr.__rollbar_event.level = self.telemeter.levelFromStatus(code);\n } catch (e) {\n /* ignore possible exception from xhr.status */\n }\n }\n }\n\n wrapProp('onload', xhr);\n wrapProp('onerror', xhr);\n wrapProp('onprogress', xhr);\n\n if ('onreadystatechange' in xhr && _.isFunction(xhr.onreadystatechange)) {\n replace(xhr, 'onreadystatechange', function(orig) {\n return self.rollbar.wrap(orig, undefined, onreadystatechangeHandler);\n });\n } else {\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n return orig.apply(this, arguments);\n }\n }, this.replacements, 'network');\n }\n\n if ('fetch' in this._window) {\n replace(this._window, 'fetch', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(fn, t) {\n /* eslint-enable no-unused-vars */\n var args = new Array(arguments.length);\n for (var i=0, len=args.length; i < len; i++) {\n args[i] = arguments[i];\n }\n var input = args[0];\n var method = 'GET';\n var url;\n if (_.isType(input, 'string')) {\n url = input;\n } else if (input) {\n url = input.url;\n if (input.method) {\n method = input.method;\n }\n }\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n var metadata = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n if (args[1] && args[1].body) {\n requestData = args[1].body;\n } else if (args[0] && !_.isType(args[0], 'string') && args[0].body) {\n requestData = args[0].body;\n }\n }\n self.telemeter.captureNetwork(metadata, 'fetch', undefined, requestData);\n return orig.apply(this, args).then(function (resp) {\n metadata.end_time_ms = _.now();\n metadata.status_code = resp.status;\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n if (headersConfig === true) {\n // This is unsupported in IE so we can't do it\n /*\n var allHeaders = resp.headers.entries();\n for (var pair of allHeaders) {\n headers[pair[0]] = pair[1];\n }\n */\n } else {\n for (var i=0; i < headersConfig.length; i++) {\n var header = headersConfig[i];\n headers[header] = resp.headers.get(header);\n }\n }\n } catch (e) {\n /* ignore probable IE errors */\n }\n }\n var response = null;\n if (headers) {\n response = {\n headers: headers\n };\n }\n if (response) {\n metadata.response = response;\n }\n return resp;\n });\n };\n }, this.replacements, 'network');\n }\n};\n\nInstrumenter.prototype.deinstrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n var b;\n while (this.replacements['log'].length) {\n b = this.replacements['log'].shift();\n this._window.console[b[0]] = b[1];\n }\n};\n\nInstrumenter.prototype.instrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n\n var self = this;\n var c = this._window.console;\n\n function wrapConsole(method) {\n var orig = c[method];\n var origConsole = c;\n var level = method === 'warn' ? 'warning' : method;\n c[method] = function() {\n var args = Array.prototype.slice.call(arguments);\n var message = _.formatArgsAsString(args);\n self.telemeter.captureLog(message, level);\n if (orig) {\n Function.prototype.apply.call(orig, origConsole, args);\n }\n };\n self.replacements['log'].push([method, orig]);\n }\n var methods = ['debug','info','warn','error','log'];\n for (var i=0, len=methods.length; i < len; i++) {\n wrapConsole(methods[i]);\n }\n};\n\nInstrumenter.prototype.deinstrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n this.removeListeners('dom');\n};\n\nInstrumenter.prototype.instrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n var clickHandler = this.handleClick.bind(this);\n var blurHandler = this.handleBlur.bind(this);\n this.addListener('dom', this._window, 'click', 'onclick', clickHandler, true);\n this.addListener('dom', this._window, 'blur', 'onfocusout', blurHandler, true);\n};\n\nInstrumenter.prototype.handleClick = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n var hasTag = e && e.tagName;\n var anchorOrButton = domUtil.isDescribedElement(e, 'a') || domUtil.isDescribedElement(e, 'button');\n if (hasTag && (anchorOrButton || domUtil.isDescribedElement(e, 'input', ['button', 'submit']))) {\n this.captureDomEvent('click', e);\n } else if (domUtil.isDescribedElement(e, 'input', ['checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value, e.checked);\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleBlur = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n if (e && e.tagName) {\n if (domUtil.isDescribedElement(e, 'textarea')) {\n this.captureDomEvent('input', e, e.value);\n } else if (domUtil.isDescribedElement(e, 'select') && e.options && e.options.length) {\n this.handleSelectInputChanged(e);\n } else if (domUtil.isDescribedElement(e, 'input') && !domUtil.isDescribedElement(e, 'input', ['button', 'submit', 'hidden', 'checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value);\n }\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleSelectInputChanged = function(elem) {\n if (elem.multiple) {\n for (var i = 0; i < elem.options.length; i++) {\n if (elem.options[i].selected) {\n this.captureDomEvent('input', elem, elem.options[i].value);\n }\n }\n } else if (elem.selectedIndex >= 0 && elem.options[elem.selectedIndex]) {\n this.captureDomEvent('input', elem, elem.options[elem.selectedIndex].value);\n }\n};\n\nInstrumenter.prototype.captureDomEvent = function(subtype, element, value, isChecked) {\n if (value !== undefined) {\n if (this.scrubTelemetryInputs || (domUtil.getElementType(element) === 'password')) {\n value = '[scrubbed]';\n } else if (this.telemetryScrubber) {\n var description = domUtil.describeElement(element);\n if (this.telemetryScrubber(description)) {\n value = '[scrubbed]';\n }\n }\n }\n var elementString = domUtil.elementArrayToString(domUtil.treeToArray(element));\n this.telemeter.captureDom(subtype, elementString, value, isChecked);\n};\n\nInstrumenter.prototype.deinstrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n restore(this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.instrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n var self = this;\n replace(this._window, 'onpopstate', function(orig) {\n return function() {\n var current = self._location.href;\n self.handleUrlChange(self._lastHref, current);\n if (orig) {\n orig.apply(this, arguments);\n }\n };\n }, this.replacements, 'navigation');\n\n replace(this._window.history, 'pushState', function(orig) {\n return function() {\n var url = arguments.length > 2 ? arguments[2] : undefined;\n if (url) {\n self.handleUrlChange(self._lastHref, url + '');\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.handleUrlChange = function(from, to) {\n var parsedHref = urlparser.parse(this._location.href);\n var parsedTo = urlparser.parse(to);\n var parsedFrom = urlparser.parse(from);\n this._lastHref = to;\n if (parsedHref.protocol === parsedTo.protocol && parsedHref.host === parsedTo.host) {\n to = parsedTo.path + (parsedTo.hash || '');\n }\n if (parsedHref.protocol === parsedFrom.protocol && parsedHref.host === parsedFrom.host) {\n from = parsedFrom.path + (parsedFrom.hash || '');\n }\n this.telemeter.captureNavigation(from, to);\n};\n\nInstrumenter.prototype.deinstrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.removeListeners('connectivity');\n } else {\n restore(this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.instrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.addListener('connectivity', this._window, 'online', undefined, function() {\n this.telemeter.captureConnectivityChange('online');\n }.bind(this), true);\n this.addListener('connectivity', this._window, 'offline', undefined, function() {\n this.telemeter.captureConnectivityChange('offline');\n }.bind(this), true);\n } else {\n var self = this;\n replace(this._document.body, 'ononline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('online');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n replace(this._document.body, 'onoffline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('offline');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.addListener = function(section, obj, type, altType, handler, capture) {\n if (obj.addEventListener) {\n obj.addEventListener(type, handler, capture);\n this.eventRemovers[section].push(function() {\n obj.removeEventListener(type, handler, capture);\n });\n } else if (altType) {\n obj.attachEvent(altType, handler);\n this.eventRemovers[section].push(function() {\n obj.detachEvent(altType, handler);\n });\n }\n};\n\nInstrumenter.prototype.removeListeners = function(section) {\n var r;\n while (this.eventRemovers[section].length) {\n r = this.eventRemovers[section].shift();\n r();\n }\n};\n\nmodule.exports = Instrumenter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/telemetry.js\n// module id = 26\n// module chunks = 0","'use strict';\n\nfunction getElementType(e) {\n return (e.getAttribute('type') || '').toLowerCase();\n}\n\nfunction isDescribedElement(element, type, subtypes) {\n if (element.tagName.toLowerCase() !== type.toLowerCase()) {\n return false;\n }\n if (!subtypes) {\n return true;\n }\n element = getElementType(element);\n for (var i = 0; i < subtypes.length; i++) {\n if (subtypes[i] === element) {\n return true;\n }\n }\n return false;\n}\n\nfunction getElementFromEvent(evt, doc) {\n if (evt.target) {\n return evt.target;\n }\n if (doc && doc.elementFromPoint) {\n return doc.elementFromPoint(evt.clientX, evt.clientY);\n }\n return undefined;\n}\n\nfunction treeToArray(elem) {\n var MAX_HEIGHT = 5;\n var out = [];\n var nextDescription;\n for (var height = 0; elem && height < MAX_HEIGHT; height++) {\n nextDescription = describeElement(elem);\n if (nextDescription.tagName === 'html') {\n break;\n }\n out.unshift(nextDescription);\n elem = elem.parentNode;\n }\n return out;\n}\n\nfunction elementArrayToString(a) {\n var MAX_LENGTH = 80;\n var separator = ' > ', separatorLength = separator.length;\n var out = [], len = 0, nextStr, totalLength;\n\n for (var i = a.length - 1; i >= 0; i--) {\n nextStr = descriptionToString(a[i]);\n totalLength = len + (out.length * separatorLength) + nextStr.length;\n if (i < a.length - 1 && totalLength >= MAX_LENGTH + 3) {\n out.unshift('...');\n break;\n }\n out.unshift(nextStr);\n len += nextStr.length;\n }\n return out.join(separator);\n}\n\nfunction descriptionToString(desc) {\n if (!desc || !desc.tagName) {\n return '';\n }\n var out = [desc.tagName];\n if (desc.id) {\n out.push('#' + desc.id);\n }\n if (desc.classes) {\n out.push('.' + desc.classes.join('.'));\n }\n for (var i = 0; i < desc.attributes.length; i++) {\n out.push('[' + desc.attributes[i].key + '=\"' + desc.attributes[i].value + '\"]');\n }\n\n return out.join('');\n}\n\n/**\n * Input: a dom element\n * Output: null if tagName is falsey or input is falsey, else\n * {\n * tagName: String,\n * id: String | undefined,\n * classes: [String] | undefined,\n * attributes: [\n * {\n * key: OneOf(type, name, title, alt),\n * value: String\n * }\n * ]\n * }\n */\nfunction describeElement(elem) {\n if (!elem || !elem.tagName) {\n return null;\n }\n var out = {}, className, key, attr, i;\n out.tagName = elem.tagName.toLowerCase();\n if (elem.id) {\n out.id = elem.id;\n }\n className = elem.className;\n if (className && (typeof className === 'string')) {\n out.classes = className.split(/\\s+/);\n }\n var attributes = ['type', 'name', 'title', 'alt'];\n out.attributes = [];\n for (i = 0; i < attributes.length; i++) {\n key = attributes[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.attributes.push({key: key, value: attr});\n }\n }\n return out;\n}\n\nmodule.exports = {\n describeElement: describeElement,\n descriptionToString: descriptionToString,\n elementArrayToString: elementArrayToString,\n treeToArray: treeToArray,\n getElementFromEvent: getElementFromEvent,\n isDescribedElement: isDescribedElement,\n getElementType: getElementType\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/domUtility.js\n// module id = 27\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///rollbar.noconflict.umd.min.js","webpack:///webpack/bootstrap 9529478730529717f4fd","webpack:///./src/browser/bundles/rollbar.noconflict.js","webpack:///./src/browser/rollbar.js","webpack:///./src/rollbar.js","webpack:///./src/rateLimiter.js","webpack:///./src/queue.js","webpack:///./src/utility.js","webpack:///./~/extend/index.js","webpack:///./vendor/JSON-js/json3.js","webpack:///./src/notifier.js","webpack:///./src/telemetry.js","webpack:///./src/api.js","webpack:///./src/apiUtility.js","webpack:///./src/browser/logger.js","webpack:///./~/console-polyfill/index.js","webpack:///./src/browser/detection.js","webpack:///./src/browser/globalSetup.js","webpack:///./src/browser/transport.js","webpack:///./src/browser/url.js","webpack:///./src/browser/transforms.js","webpack:///./src/browser/errorParser.js","webpack:///./~/error-stack-parser/error-stack-parser.js","webpack:///./~/error-stack-parser/~/stackframe/stackframe.js","webpack:///./src/transforms.js","webpack:///./src/browser/predicates.js","webpack:///./src/predicates.js","webpack:///./src/browser/telemetry.js","webpack:///./src/browser/domUtility.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","rollbar","window","_rollbarStartTime","Date","getTime","Rollbar","options","client","_","extend","defaultOptions","api","API","transport","urllib","Client","logger","gWindow","self","gDocument","document","addTransformsToNotifier","notifier","addPredicatesToQueue","queue","captureUncaught","handleUncaughtExceptions","globals","captureUncaughtExceptions","wrapGlobals","captureUnhandledRejections","handleUnhandledRejections","instrumenter","Instrumenter","telemeter","instrument","handleUninitialized","maybeCallback","message","error","Error","addTransform","transforms","handleItemWithError","ensureItemHasSomethingToSay","addBaseInfo","addRequestInfo","addClientInfo","addPluginInfo","addBody","sharedTransforms","addMessageWithError","addTelemetryData","addConfigToPayload","scrubPayload","userTransform","itemToPayload","addPredicate","sharedPredicates","checkLevel","predicates","checkIgnore","userCheckIgnore","urlIsNotBlacklisted","urlIsWhitelisted","messageIsIgnored","_getFirstFunction","args","i","len","length","isFunction","errorParser","_instance","init","global","configure","prototype","payloadData","oldOptions","payload","lastError","log","item","_createItem","arguments","uuid","apply","debug","info","warn","warning","critical","handleUncaughtException","url","lineno","colno","context","stackInfo","makeUnhandledStackInfo","isError","_unhandledStackInfo","level","uncaughtErrorLevel","_isUncaught","handleUnhandledRejection","reason","promise","String","_rollbarContext","_originalArgs","push","wrap","f","_before","ctxFn","_isWrap","_rollbar_wrapped","exc","e","isType","_wrappedSource","toString","_rollbarWrappedError","hasOwnProperty","prop","captureEvent","metadata","captureDomContentLoaded","ts","captureLoad","createItem","version","scrubFields","logLevel","reportLevel","endpoint","verbose","enabled","sendConfig","includeItemsInTelemetry","captureIp","platform","rateLimiter","configureGlobal","setPlatformOptions","Queue","Notifier","Telemeter","RateLimiter","maxItems","itemsPerMinute","_defaultLogLevel","_log","wait","callback","defaultLevel","_sameAsLastError","_captureRollbarItem","telemetryEvents","copyEvents","err","startTime","counter","perMinCounter","platformOptions","checkRate","limit","ignoreRateLimit","shouldSendValue","shouldSend","globalRateLimit","limitPerMin","perMinute","rateLimitPayload","msg","environment","body","extra","language","framework","name","globalSettings","undefined","now","globalRateLimitPerMin","pendingItems","pendingRequests","retryQueue","retryHandle","waitCallback","waitIntervalID","predicate","addPendingItem","removePendingItem","idx","indexOf","splice","addItem","originalError","originalItem","predicateResult","_applyPredicates","stop","_maybeLog","_makeApiRequest","resp","_dequeuePendingRequest","bind","_maybeCallWait","clearInterval","setInterval","rateLimitResponse","postItem","_maybeRetry","RETRIABLE_ERRORS","shouldRetry","retryInterval","code","_retryApiRequest","retryObject","shift","data","get","setupJSON","__initRollbarJSON","isDefined","JSON","isNativeFunction","stringify","RollbarJSON","parse","setupCustomJSON","x","t","typeName","match","toLowerCase","reRegExpChar","funcMatchString","Function","Object","replace","reIsNative","RegExp","isObject","test","value","type","u","isIterable","traverse","obj","func","seen","k","v","isObj","isArray","keys","result","redact","uuid4","d","r","Math","random","floor","sanitizeUrl","baseUrlParts","parseUri","anchor","source","query","str","o","parseUriOptions","parser","strictMode","exec","uri","key","q","$0","$1","$2","addParamsAndAccessTokenToPath","accessToken","params","access_token","paramsArray","join","sort","path","qs","h","substring","formatUrl","protocol","port","hostname","backup","jsonError","backupError","jsonParse","s","mode","backupMessage","location","line","column","guessFunctionName","gatherContext","href","useragent","navigator","userAgent","stack","wrapCallback","requestKeys","lambdaContext","custom","request","arg","extraArgs","l","typ","DOMException","j","timestamp","split","set","temp","replacement","scrub","redactQueryParam","dummy0","paramPart","dummy1","dummy2","dummy3","valPart","paramScrubber","queryRes","valScrubber","paramRes","scrubber","tmpV","_getScrubFieldRegexs","_getScrubQueryParamRegexs","pat","ret","formatArgsAsString","substr","filterIp","requestData","newIp","parts","pop","beginning","slice","slashIdx","terminal","concat","LEVELS","strict","loose","hasOwn","toStr","arr","Array","isPlainObject","hasOwnConstructor","hasIsPrototypeOf","constructor","src","copy","copyIsArray","clone","target","deep","n","this_value","valueOf","quote","string","rx_escapable","lastIndex","a","meta","charCodeAt","holder","partial","mind","gap","toJSON","rep","isFinite","indent","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","Boolean","Number","\b","\t","\n","\f","\r","\"","\\","replacer","space","","debackslashify","text","ignore","b","fromCharCode","parseInt","escapes","state","container","/","go","firstokey","okey","ovalue","firstavalue","avalue","number","action","{","}","ocomma","[","]","acomma",":","colon","SyntaxError",",","true","false","null","reviver","tx","walk","val","transform","_applyTransforms","transformIndex","transformsLength","cb","maxTelemetryEvents","MAX_EVENTS","maxQueueSize","max","min","getLevel","manual","newMaxEvents","deleteCount","capture","rollbarUUID","timestamp_ms","filterTelemetry","captureError","captureLog","captureNetwork","subtype","levelFromStatus","status_code","statusCode","captureDom","element","checked","captureNavigation","from","to","captureConnectivityChange","change","Api","jsonBackup","transportOptions","_getTransport","helpers","getTransportFromOptions","search","buildPayload","post","contextResult","defaults","proxy","opts","pathname","method","host","appendPathToPath","base","baseTrailingSlash","pathBeginningSlash","unshift","detection","ieVersion","console","con","dummy","properties","methods","getIEVersion","undef","div","createElement","all","getElementsByTagName","innerHTML","Detection","handler","shim","oldOnError","_rollbarOldOnError","onerror","belongsToShim","fn","_rollbarWindowOnError","old","_rollbarURH","removeEventListener","rejectionHandler","evt","detail","addEventListener","_extendListenerPrototype","oldAddEventListener","_rollbarOldAdd","addFn","event","bubble","oldRemoveEventListener","_rollbarOldRemove","removeFn","requestFactory","_makeRequest","stringifyResult","writeData","_createXMLHTTPObject","onreadystatechange","readyState","parseResponse","responseText","_isSuccess","_isNormalFailure","status","_newRetriableError","ex","open","setRequestHeader","send","e1","XDomainRequest","xdomainrequest","onprogress","ontimeout","onload","e2","xmlhttp","factories","XMLHttpRequest","ActiveXObject","numFactories","last","auth","hash","pathParts","_savedStackTrace","description","server","remoteString","query_string","user_ip","nav","scr","screen","runtime_ms","round","javascript","browser","cookie_enabled","cookieEnabled","width","height","cur","plugins","navPlugins","addBodyTrace","addBodyMessage","messageResult","guess","guessErrorClass","className","trace","exception","class","rawStack","raw","rawException","stackFrame","frame","pre","contextLength","mid","frames","filename","endsWith","reverse","UNKNOWN_FUNCTION","Frame","_stackFrame","fileName","lineNumber","functionName","columnNumber","Stack","getStack","parserStack","ErrorStackParser","errMsg","errClassMatch","ERR_CLASS_REGEXP","errClass","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","StackFrame","_map","array","thisArg","map","output","_filter","filter","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","possibleNumber","isNaN","parseFloat","filtered","tokens","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","argsRaw","functionCall","_isNumber","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","getFunctionName","getArgs","TypeError","getFileName","getLineNumber","getColumnNumber","getSource","payloadOptions","tracePath","newExtra","newItem","configKey","settings","levelVal","reportLevelVal","isUncaught","onSendCallback","urlIsOnAList","whiteOrBlack","black","list","frameLength","listLength","urlRegex","hostBlackList","hostWhiteList","listName","exceptionMessage","ignoredMessages","rIgnoredMessage","traceMessage","bodyMessage","replacements","orig","restore","_window","_document","autoInstrument","scrubTelemetryInputs","telemetryScrubber","network","navigation","connectivity","eventRemovers","dom","_location","_lastHref","urlparser","domUtil","networkResponseHeaders","networkResponseBody","networkRequestBody","oldSettings","deinstrumentNetwork","instrumentNetwork","deinstrumentConsole","instrumentConsole","deinstrumentDom","instrumentDom","deinstrumentNavigation","instrumentNavigation","deinstrumentConnectivity","instrumentConnectivity","wrapProp","xhr","xhrp","__rollbar_xhr","start_time_ms","end_time_ms","onreadystatechangeHandler","__rollbar_event","headers","headersConfig","header","allHeaders","getAllResponseHeaders","trim","getResponseHeader","response","input","then","wrapConsole","origConsole","removeListeners","clickHandler","handleClick","blurHandler","handleBlur","addListener","getElementFromEvent","hasTag","tagName","anchorOrButton","isDescribedElement","captureDomEvent","handleSelectInputChanged","elem","multiple","selected","selectedIndex","isChecked","getElementType","describeElement","elementString","elementArrayToString","treeToArray","chrome","chromePackagedApp","app","runtime","hasPushState","history","pushState","current","handleUrlChange","parsedHref","parsedTo","parsedFrom","section","altType","attachEvent","detachEvent","getAttribute","subtypes","doc","elementFromPoint","clientX","clientY","nextDescription","MAX_HEIGHT","out","parentNode","nextStr","totalLength","MAX_LENGTH","separator","separatorLength","descriptionToString","desc","classes","attributes","attr"],"mappings":"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","file":"rollbar.noconflict.umd.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"rollbar\"] = factory();\n\telse\n\t\troot[\"rollbar\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"rollbar\"] = factory();\n\telse\n\t\troot[\"rollbar\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1);\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar rollbar = __webpack_require__(2);\n\t\n\tif ((typeof window !== 'undefined') && !window._rollbarStartTime) {\n\t window._rollbarStartTime = (new Date()).getTime();\n\t}\n\t\n\tmodule.exports = rollbar;\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar Client = __webpack_require__(3);\n\tvar _ = __webpack_require__(6);\n\tvar API = __webpack_require__(11);\n\tvar logger = __webpack_require__(13);\n\tvar globals = __webpack_require__(16);\n\t\n\tvar transport = __webpack_require__(17);\n\tvar urllib = __webpack_require__(18);\n\t\n\tvar transforms = __webpack_require__(19);\n\tvar sharedTransforms = __webpack_require__(23);\n\tvar predicates = __webpack_require__(24);\n\tvar sharedPredicates = __webpack_require__(25);\n\tvar errorParser = __webpack_require__(20);\n\tvar Instrumenter = __webpack_require__(26);\n\t\n\tfunction Rollbar(options, client) {\n\t this.options = _.extend({}, defaultOptions, options);\n\t var api = new API(this.options, transport, urllib);\n\t this.client = client || new Client(this.options, api, logger, 'browser');\n\t\n\t var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n\t var gDocument = (typeof document != 'undefined') && document;\n\t addTransformsToNotifier(this.client.notifier);\n\t addPredicatesToQueue(this.client.queue);\n\t if (this.options.captureUncaught || this.options.handleUncaughtExceptions) {\n\t globals.captureUncaughtExceptions(gWindow, this);\n\t globals.wrapGlobals(gWindow, this);\n\t }\n\t if (this.options.captureUnhandledRejections || this.options.handleUnhandledRejections) {\n\t globals.captureUnhandledRejections(gWindow, this);\n\t }\n\t\n\t this.instrumenter = new Instrumenter(this.options, this.client.telemeter, this, gWindow, gDocument);\n\t this.instrumenter.instrument();\n\t}\n\t\n\tvar _instance = null;\n\tRollbar.init = function(options, client) {\n\t if (_instance) {\n\t return _instance.global(options).configure(options);\n\t }\n\t _instance = new Rollbar(options, client);\n\t return _instance;\n\t};\n\t\n\tfunction handleUninitialized(maybeCallback) {\n\t var message = 'Rollbar is not initialized';\n\t logger.error(message);\n\t if (maybeCallback) {\n\t maybeCallback(new Error(message));\n\t }\n\t}\n\t\n\tRollbar.prototype.global = function(options) {\n\t this.client.global(options);\n\t return this;\n\t};\n\tRollbar.global = function(options) {\n\t if (_instance) {\n\t return _instance.global(options);\n\t } else {\n\t handleUninitialized();\n\t }\n\t};\n\t\n\tRollbar.prototype.configure = function(options, payloadData) {\n\t var oldOptions = this.options;\n\t var payload = {};\n\t if (payloadData) {\n\t payload = {payload: payloadData};\n\t }\n\t this.options = _.extend({}, oldOptions, options, payload);\n\t this.client.configure(options, payloadData);\n\t this.instrumenter.configure(options);\n\t return this;\n\t};\n\tRollbar.configure = function(options, payloadData) {\n\t if (_instance) {\n\t return _instance.configure(options, payloadData);\n\t } else {\n\t handleUninitialized();\n\t }\n\t};\n\t\n\tRollbar.prototype.lastError = function() {\n\t return this.client.lastError;\n\t};\n\tRollbar.lastError = function() {\n\t if (_instance) {\n\t return _instance.lastError();\n\t } else {\n\t handleUninitialized();\n\t }\n\t};\n\t\n\tRollbar.prototype.log = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.log(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.log = function() {\n\t if (_instance) {\n\t return _instance.log.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.debug = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.debug(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.debug = function() {\n\t if (_instance) {\n\t return _instance.debug.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.info = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.info(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.info = function() {\n\t if (_instance) {\n\t return _instance.info.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.warn = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.warn(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.warn = function() {\n\t if (_instance) {\n\t return _instance.warn.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.warning = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.warning(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.warning = function() {\n\t if (_instance) {\n\t return _instance.warning.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.error = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.error(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.error = function() {\n\t if (_instance) {\n\t return _instance.error.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.critical = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.critical(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.critical = function() {\n\t if (_instance) {\n\t return _instance.critical.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.handleUncaughtException = function(message, url, lineno, colno, error, context) {\n\t var item;\n\t var stackInfo = _.makeUnhandledStackInfo(\n\t message,\n\t url,\n\t lineno,\n\t colno,\n\t error,\n\t 'onerror',\n\t 'uncaught exception',\n\t errorParser\n\t );\n\t if (_.isError(error)) {\n\t item = this._createItem([message, error, context]);\n\t item._unhandledStackInfo = stackInfo;\n\t } else if (_.isError(url)) {\n\t item = this._createItem([message, url, context]);\n\t item._unhandledStackInfo = stackInfo;\n\t } else {\n\t item = this._createItem([message, context]);\n\t item.stackInfo = stackInfo;\n\t }\n\t item.level = this.options.uncaughtErrorLevel;\n\t item._isUncaught = true;\n\t this.client.log(item);\n\t};\n\t\n\tRollbar.prototype.handleUnhandledRejection = function(reason, promise) {\n\t var message = 'unhandled rejection was null or undefined!';\n\t message = reason ? (reason.message || String(reason)) : message;\n\t var context = (reason && reason._rollbarContext) || (promise && promise._rollbarContext);\n\t\n\t var item;\n\t if (_.isError(reason)) {\n\t item = this._createItem([message, reason, context]);\n\t } else {\n\t item = this._createItem([message, reason, context]);\n\t item.stackInfo = _.makeUnhandledStackInfo(\n\t message,\n\t '',\n\t 0,\n\t 0,\n\t null,\n\t 'unhandledrejection',\n\t '',\n\t errorParser\n\t );\n\t }\n\t item.level = this.options.uncaughtErrorLevel;\n\t item._isUncaught = true;\n\t item._originalArgs = item._originalArgs || [];\n\t item._originalArgs.push(promise);\n\t this.client.log(item);\n\t};\n\t\n\tRollbar.prototype.wrap = function(f, context, _before) {\n\t try {\n\t var ctxFn;\n\t if(_.isFunction(context)) {\n\t ctxFn = context;\n\t } else {\n\t ctxFn = function() { return context || {}; };\n\t }\n\t\n\t if (!_.isFunction(f)) {\n\t return f;\n\t }\n\t\n\t if (f._isWrap) {\n\t return f;\n\t }\n\t\n\t if (!f._rollbar_wrapped) {\n\t f._rollbar_wrapped = function () {\n\t if (_before && _.isFunction(_before)) {\n\t _before.apply(this, arguments);\n\t }\n\t try {\n\t return f.apply(this, arguments);\n\t } catch(exc) {\n\t var e = exc;\n\t if (e) {\n\t if (_.isType(e, 'string')) {\n\t e = new String(e);\n\t }\n\t e._rollbarContext = ctxFn() || {};\n\t e._rollbarContext._wrappedSource = f.toString();\n\t\n\t window._rollbarWrappedError = e;\n\t }\n\t throw e;\n\t }\n\t };\n\t\n\t f._rollbar_wrapped._isWrap = true;\n\t\n\t if (f.hasOwnProperty) {\n\t for (var prop in f) {\n\t if (f.hasOwnProperty(prop)) {\n\t f._rollbar_wrapped[prop] = f[prop];\n\t }\n\t }\n\t }\n\t }\n\t\n\t return f._rollbar_wrapped;\n\t } catch (e) {\n\t // Return the original function if the wrap fails.\n\t return f;\n\t }\n\t};\n\tRollbar.wrap = function(f, context) {\n\t if (_instance) {\n\t return _instance.wrap(f, context);\n\t } else {\n\t handleUninitialized();\n\t }\n\t};\n\t\n\tRollbar.prototype.captureEvent = function(metadata, level) {\n\t return this.client.captureEvent(metadata, level);\n\t};\n\tRollbar.captureEvent = function(metadata, level) {\n\t if (_instance) {\n\t return _instance.captureEvent(metadata, level);\n\t } else {\n\t handleUninitialized();\n\t }\n\t};\n\t\n\t// The following two methods are used internally and are not meant for public use\n\tRollbar.prototype.captureDomContentLoaded = function(e, ts) {\n\t if (!ts) {\n\t ts = new Date();\n\t }\n\t return this.client.captureDomContentLoaded(ts);\n\t};\n\t\n\tRollbar.prototype.captureLoad = function(e, ts) {\n\t if (!ts) {\n\t ts = new Date();\n\t }\n\t return this.client.captureLoad(ts);\n\t};\n\t\n\t/* Internal */\n\t\n\tfunction addTransformsToNotifier(notifier) {\n\t notifier\n\t .addTransform(transforms.handleItemWithError)\n\t .addTransform(transforms.ensureItemHasSomethingToSay)\n\t .addTransform(transforms.addBaseInfo)\n\t .addTransform(transforms.addRequestInfo(window))\n\t .addTransform(transforms.addClientInfo(window))\n\t .addTransform(transforms.addPluginInfo(window))\n\t .addTransform(transforms.addBody)\n\t .addTransform(sharedTransforms.addMessageWithError)\n\t .addTransform(sharedTransforms.addTelemetryData)\n\t .addTransform(sharedTransforms.addConfigToPayload)\n\t .addTransform(transforms.scrubPayload)\n\t .addTransform(sharedTransforms.userTransform(logger))\n\t .addTransform(sharedTransforms.itemToPayload);\n\t}\n\t\n\tfunction addPredicatesToQueue(queue) {\n\t queue\n\t .addPredicate(sharedPredicates.checkLevel)\n\t .addPredicate(predicates.checkIgnore)\n\t .addPredicate(sharedPredicates.userCheckIgnore(logger))\n\t .addPredicate(sharedPredicates.urlIsNotBlacklisted(logger))\n\t .addPredicate(sharedPredicates.urlIsWhitelisted(logger))\n\t .addPredicate(sharedPredicates.messageIsIgnored(logger));\n\t}\n\t\n\tRollbar.prototype._createItem = function(args) {\n\t return _.createItem(args, logger, this);\n\t};\n\t\n\tfunction _getFirstFunction(args) {\n\t for (var i = 0, len = args.length; i < len; ++i) {\n\t if (_.isFunction(args[i])) {\n\t return args[i];\n\t }\n\t }\n\t return undefined;\n\t}\n\t\n\t/* global __NOTIFIER_VERSION__:false */\n\t/* global __DEFAULT_BROWSER_SCRUB_FIELDS__:false */\n\t/* global __DEFAULT_LOG_LEVEL__:false */\n\t/* global __DEFAULT_REPORT_LEVEL__:false */\n\t/* global __DEFAULT_UNCAUGHT_ERROR_LEVEL:false */\n\t/* global __DEFAULT_ENDPOINT__:false */\n\t\n\tvar defaultOptions = {\n\t version: (\"2.4.0\"),\n\t scrubFields: ([\"pw\",\"pass\",\"passwd\",\"password\",\"secret\",\"confirm_password\",\"confirmPassword\",\"password_confirmation\",\"passwordConfirmation\",\"access_token\",\"accessToken\",\"secret_key\",\"secretKey\",\"secretToken\"]),\n\t logLevel: (\"debug\"),\n\t reportLevel: (\"debug\"),\n\t uncaughtErrorLevel: (\"error\"),\n\t endpoint: (\"api.rollbar.com/api/1/item/\"),\n\t verbose: false,\n\t enabled: true,\n\t sendConfig: false,\n\t includeItemsInTelemetry: true,\n\t captureIp: true\n\t};\n\t\n\tmodule.exports = Rollbar;\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar RateLimiter = __webpack_require__(4);\n\tvar Queue = __webpack_require__(5);\n\tvar Notifier = __webpack_require__(9);\n\tvar Telemeter = __webpack_require__(10);\n\tvar _ = __webpack_require__(6);\n\t\n\t/*\n\t * Rollbar - the interface to Rollbar\n\t *\n\t * @param options\n\t * @param api\n\t * @param logger\n\t */\n\tfunction Rollbar(options, api, logger, platform) {\n\t this.options = _.extend(true, {}, options);\n\t this.logger = logger;\n\t Rollbar.rateLimiter.configureGlobal(this.options);\n\t Rollbar.rateLimiter.setPlatformOptions(platform, this.options);\n\t this.queue = new Queue(Rollbar.rateLimiter, api, logger, this.options);\n\t this.notifier = new Notifier(this.queue, this.options);\n\t this.telemeter = new Telemeter(this.options);\n\t this.lastError = null;\n\t}\n\t\n\tvar defaultOptions = {\n\t maxItems: 0,\n\t itemsPerMinute: 60\n\t};\n\t\n\tRollbar.rateLimiter = new RateLimiter(defaultOptions);\n\t\n\tRollbar.prototype.global = function(options) {\n\t Rollbar.rateLimiter.configureGlobal(options);\n\t return this;\n\t};\n\t\n\tRollbar.prototype.configure = function(options, payloadData) {\n\t this.notifier && this.notifier.configure(options);\n\t this.telemeter && this.telemeter.configure(options);\n\t var oldOptions = this.options;\n\t var payload = {};\n\t if (payloadData) {\n\t payload = {payload: payloadData};\n\t }\n\t this.options = _.extend(true, {}, oldOptions, options, payload);\n\t this.global(this.options);\n\t return this;\n\t};\n\t\n\tRollbar.prototype.log = function(item) {\n\t var level = this._defaultLogLevel();\n\t return this._log(level, item);\n\t};\n\t\n\tRollbar.prototype.debug = function(item) {\n\t this._log('debug', item);\n\t};\n\t\n\tRollbar.prototype.info = function(item) {\n\t this._log('info', item);\n\t};\n\t\n\tRollbar.prototype.warn = function(item) {\n\t this._log('warning', item);\n\t};\n\t\n\tRollbar.prototype.warning = function(item) {\n\t this._log('warning', item);\n\t};\n\t\n\tRollbar.prototype.error = function(item) {\n\t this._log('error', item);\n\t};\n\t\n\tRollbar.prototype.critical = function(item) {\n\t this._log('critical', item);\n\t};\n\t\n\tRollbar.prototype.wait = function(callback) {\n\t this.queue.wait(callback);\n\t};\n\t\n\tRollbar.prototype.captureEvent = function(metadata, level) {\n\t return this.telemeter.captureEvent(metadata, level);\n\t};\n\t\n\tRollbar.prototype.captureDomContentLoaded = function(ts) {\n\t return this.telemeter.captureDomContentLoaded(ts);\n\t};\n\t\n\tRollbar.prototype.captureLoad = function(ts) {\n\t return this.telemeter.captureLoad(ts);\n\t};\n\t\n\t/* Internal */\n\t\n\tRollbar.prototype._log = function(defaultLevel, item) {\n\t if (this._sameAsLastError(item)) {\n\t if (item.callback) {\n\t item.callback();\n\t }\n\t return;\n\t }\n\t try {\n\t var callback = null;\n\t if (item.callback) {\n\t callback = item.callback;\n\t delete item.callback;\n\t }\n\t item.level = item.level || defaultLevel;\n\t this.telemeter._captureRollbarItem(item);\n\t item.telemetryEvents = this.telemeter.copyEvents();\n\t this.notifier.log(item, callback);\n\t } catch (e) {\n\t this.logger.error(e)\n\t }\n\t};\n\t\n\tRollbar.prototype._defaultLogLevel = function() {\n\t return this.options.logLevel || 'debug';\n\t};\n\t\n\tRollbar.prototype._sameAsLastError = function(item) {\n\t if (this.lastError && this.lastError === item.err) {\n\t return true;\n\t }\n\t this.lastError = item.err;\n\t return false;\n\t};\n\t\n\tmodule.exports = Rollbar;\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\t/*\n\t * RateLimiter - an object that encapsulates the logic for counting items sent to Rollbar\n\t *\n\t * @param options - the same options that are accepted by configureGlobal offered as a convenience\n\t */\n\tfunction RateLimiter(options) {\n\t this.startTime = (new Date()).getTime();\n\t this.counter = 0;\n\t this.perMinCounter = 0;\n\t this.platform = null;\n\t this.platformOptions = {};\n\t this.configureGlobal(options);\n\t}\n\t\n\tRateLimiter.globalSettings = {\n\t startTime: (new Date()).getTime(),\n\t maxItems: undefined,\n\t itemsPerMinute: undefined\n\t};\n\t\n\t/*\n\t * configureGlobal - set the global rate limiter options\n\t *\n\t * @param options - Only the following values are recognized:\n\t * startTime: a timestamp of the form returned by (new Date()).getTime()\n\t * maxItems: the maximum items\n\t * itemsPerMinute: the max number of items to send in a given minute\n\t */\n\tRateLimiter.prototype.configureGlobal = function(options) {\n\t if (options.startTime !== undefined) {\n\t RateLimiter.globalSettings.startTime = options.startTime;\n\t }\n\t if (options.maxItems !== undefined) {\n\t RateLimiter.globalSettings.maxItems = options.maxItems;\n\t }\n\t if (options.itemsPerMinute !== undefined) {\n\t RateLimiter.globalSettings.itemsPerMinute = options.itemsPerMinute;\n\t }\n\t};\n\t\n\t/*\n\t * shouldSend - determine if we should send a given item based on rate limit settings\n\t *\n\t * @param item - the item we are about to send\n\t * @returns An object with the following structure:\n\t * error: (Error|null)\n\t * shouldSend: bool\n\t * payload: (Object|null)\n\t * If shouldSend is false, the item passed as a parameter should not be sent to Rollbar, and\n\t * exactly one of error or payload will be non-null. If error is non-null, the returned Error will\n\t * describe the situation, but it means that we were already over a rate limit (either globally or\n\t * per minute) when this item was checked. If error is null, and therefore payload is non-null, it\n\t * means this item put us over the global rate limit and the payload should be sent to Rollbar in\n\t * place of the passed in item.\n\t */\n\tRateLimiter.prototype.shouldSend = function(item, now) {\n\t now = now || (new Date()).getTime();\n\t if (now - this.startTime >= 60000) {\n\t this.startTime = now;\n\t this.perMinCounter = 0;\n\t }\n\t\n\t var globalRateLimit = RateLimiter.globalSettings.maxItems;\n\t var globalRateLimitPerMin = RateLimiter.globalSettings.itemsPerMinute;\n\t\n\t if (checkRate(item, globalRateLimit, this.counter)) {\n\t return shouldSendValue(this.platform, this.platformOptions, globalRateLimit + ' max items reached', false);\n\t } else if (checkRate(item, globalRateLimitPerMin, this.perMinCounter)) {\n\t return shouldSendValue(this.platform, this.platformOptions, globalRateLimitPerMin + ' items per minute reached', false);\n\t }\n\t this.counter++;\n\t this.perMinCounter++;\n\t\n\t var shouldSend = !checkRate(item, globalRateLimit, this.counter);\n\t var perMinute = shouldSend;\n\t shouldSend = shouldSend && !checkRate(item, globalRateLimitPerMin, this.perMinCounter);\n\t return shouldSendValue(this.platform, this.platformOptions, null, shouldSend, globalRateLimit, globalRateLimitPerMin, perMinute);\n\t};\n\t\n\tRateLimiter.prototype.setPlatformOptions = function(platform, options) {\n\t this.platform = platform;\n\t this.platformOptions = options;\n\t};\n\t\n\t/* Helpers */\n\t\n\tfunction checkRate(item, limit, counter) {\n\t return !item.ignoreRateLimit && limit >= 1 && counter > limit;\n\t}\n\t\n\tfunction shouldSendValue(platform, options, error, shouldSend, globalRateLimit, limitPerMin, perMinute) {\n\t var payload = null;\n\t if (error) {\n\t error = new Error(error);\n\t }\n\t if (!error && !shouldSend) {\n\t payload = rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute);\n\t }\n\t return {error: error, shouldSend: shouldSend, payload: payload};\n\t}\n\t\n\tfunction rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute) {\n\t var environment = options.environment || (options.payload && options.payload.environment);\n\t var msg;\n\t if (perMinute) {\n\t msg = 'item per minute limit reached, ignoring errors until timeout';\n\t } else {\n\t msg = 'maxItems has been hit, ignoring errors until reset.';\n\t }\n\t var item = {\n\t body: {\n\t message: {\n\t body: msg,\n\t extra: {\n\t maxItems: globalRateLimit,\n\t itemsPerMinute: limitPerMin\n\t }\n\t }\n\t },\n\t language: 'javascript',\n\t environment: environment,\n\t notifier: {\n\t version: (options.notifier && options.notifier.version) || options.version\n\t }\n\t };\n\t if (platform === 'browser') {\n\t item.platform = 'browser';\n\t item.framework = 'browser-js';\n\t item.notifier.name = 'rollbar-browser-js';\n\t } else if (platform === 'server') {\n\t item.framework = options.framework || 'node-js';\n\t item.notifier.name = options.notifier.name;\n\t } else if (platform === 'react-native') {\n\t item.framework = options.framework || 'react-native';\n\t item.notifier.name = options.notifier.name;\n\t }\n\t return item;\n\t}\n\t\n\tmodule.exports = RateLimiter;\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\t\n\t/*\n\t * Queue - an object which handles which handles a queue of items to be sent to Rollbar.\n\t * This object handles rate limiting via a passed in rate limiter, retries based on connection\n\t * errors, and filtering of items based on a set of configurable predicates. The communication to\n\t * the backend is performed via a given API object.\n\t *\n\t * @param rateLimiter - An object which conforms to the interface\n\t * rateLimiter.shouldSend(item) -> bool\n\t * @param api - An object which conforms to the interface\n\t * api.postItem(payload, function(err, response))\n\t * @param logger - An object used to log verbose messages if desired\n\t * @param options - see Queue.prototype.configure\n\t */\n\tfunction Queue(rateLimiter, api, logger, options) {\n\t this.rateLimiter = rateLimiter;\n\t this.api = api;\n\t this.logger = logger;\n\t this.options = options;\n\t this.predicates = [];\n\t this.pendingItems = [];\n\t this.pendingRequests = [];\n\t this.retryQueue = [];\n\t this.retryHandle = null;\n\t this.waitCallback = null;\n\t this.waitIntervalID = null;\n\t}\n\t\n\t/*\n\t * configure - updates the options this queue uses\n\t *\n\t * @param options\n\t */\n\tQueue.prototype.configure = function(options) {\n\t this.api && this.api.configure(options);\n\t var oldOptions = this.options;\n\t this.options = _.extend(true, {}, oldOptions, options);\n\t return this;\n\t};\n\t\n\t/*\n\t * addPredicate - adds a predicate to the end of the list of predicates for this queue\n\t *\n\t * @param predicate - function(item, options) -> (bool|{err: Error})\n\t * Returning true means that this predicate passes and the item is okay to go on the queue\n\t * Returning false means do not add the item to the queue, but it is not an error\n\t * Returning {err: Error} means do not add the item to the queue, and the given error explains why\n\t * Returning {err: undefined} is equivalent to returning true but don't do that\n\t */\n\tQueue.prototype.addPredicate = function(predicate) {\n\t if (_.isFunction(predicate)) {\n\t this.predicates.push(predicate);\n\t }\n\t return this;\n\t};\n\t\n\tQueue.prototype.addPendingItem = function(item) {\n\t this.pendingItems.push(item);\n\t};\n\t\n\tQueue.prototype.removePendingItem = function(item) {\n\t var idx = this.pendingItems.indexOf(item);\n\t if (idx !== -1) {\n\t this.pendingItems.splice(idx, 1);\n\t }\n\t};\n\t\n\t/*\n\t * addItem - Send an item to the Rollbar API if all of the predicates are satisfied\n\t *\n\t * @param item - The payload to send to the backend\n\t * @param callback - function(error, repsonse) which will be called with the response from the API\n\t * in the case of a success, otherwise response will be null and error will have a value. If both\n\t * error and response are null then the item was stopped by a predicate which did not consider this\n\t * to be an error condition, but nonetheless did not send the item to the API.\n\t * @param originalError - The original error before any transformations that is to be logged if any\n\t */\n\tQueue.prototype.addItem = function(item, callback, originalError, originalItem) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() { return; };\n\t }\n\t var predicateResult = this._applyPredicates(item);\n\t if (predicateResult.stop) {\n\t this.removePendingItem(originalItem);\n\t callback(predicateResult.err);\n\t return;\n\t }\n\t this._maybeLog(item, originalError);\n\t this.removePendingItem(originalItem);\n\t this.pendingRequests.push(item);\n\t try {\n\t this._makeApiRequest(item, function(err, resp) {\n\t this._dequeuePendingRequest(item);\n\t callback(err, resp);\n\t }.bind(this));\n\t } catch (e) {\n\t this._dequeuePendingRequest(item);\n\t callback(e);\n\t }\n\t};\n\t\n\t/*\n\t * wait - Stop any further errors from being added to the queue, and get called back when all items\n\t * currently processing have finished sending to the backend.\n\t *\n\t * @param callback - function() called when all pending items have been sent\n\t */\n\tQueue.prototype.wait = function(callback) {\n\t if (!_.isFunction(callback)) {\n\t return;\n\t }\n\t this.waitCallback = callback;\n\t if (this._maybeCallWait()) {\n\t return;\n\t }\n\t if (this.waitIntervalID) {\n\t this.waitIntervalID = clearInterval(this.waitIntervalID);\n\t }\n\t this.waitIntervalID = setInterval(function() {\n\t this._maybeCallWait();\n\t }.bind(this), 500);\n\t};\n\t\n\t/* _applyPredicates - Sequentially applies the predicates that have been added to the queue to the\n\t * given item with the currently configured options.\n\t *\n\t * @param item - An item in the queue\n\t * @returns {stop: bool, err: (Error|null)} - stop being true means do not add item to the queue,\n\t * the error value should be passed up to a callbak if we are stopping.\n\t */\n\tQueue.prototype._applyPredicates = function(item) {\n\t var p = null;\n\t for (var i = 0, len = this.predicates.length; i < len; i++) {\n\t p = this.predicates[i](item, this.options);\n\t if (!p || p.err !== undefined) {\n\t return {stop: true, err: p.err};\n\t }\n\t }\n\t return {stop: false, err: null};\n\t};\n\t\n\t/*\n\t * _makeApiRequest - Send an item to Rollbar, callback when done, if there is an error make an\n\t * effort to retry if we are configured to do so.\n\t *\n\t * @param item - an item ready to send to the backend\n\t * @param callback - function(err, response)\n\t */\n\tQueue.prototype._makeApiRequest = function(item, callback) {\n\t var rateLimitResponse = this.rateLimiter.shouldSend(item);\n\t if (rateLimitResponse.shouldSend) {\n\t this.api.postItem(item, function(err, resp) {\n\t if (err) {\n\t this._maybeRetry(err, item, callback);\n\t } else {\n\t callback(err, resp);\n\t }\n\t }.bind(this));\n\t } else if (rateLimitResponse.error) {\n\t callback(rateLimitResponse.error);\n\t } else {\n\t this.api.postItem(rateLimitResponse.payload, callback);\n\t }\n\t};\n\t\n\t// These are errors basically mean there is no internet connection\n\tvar RETRIABLE_ERRORS = ['ECONNRESET', 'ENOTFOUND', 'ESOCKETTIMEDOUT', 'ETIMEDOUT', 'ECONNREFUSED', 'EHOSTUNREACH', 'EPIPE', 'EAI_AGAIN'];\n\t\n\t/*\n\t * _maybeRetry - Given the error returned by the API, decide if we should retry or just callback\n\t * with the error.\n\t *\n\t * @param err - an error returned by the API transport\n\t * @param item - the item that was trying to be sent when this error occured\n\t * @param callback - function(err, response)\n\t */\n\tQueue.prototype._maybeRetry = function(err, item, callback) {\n\t var shouldRetry = false;\n\t if (this.options.retryInterval) {\n\t for (var i = 0, len = RETRIABLE_ERRORS.length; i < len; i++) {\n\t if (err.code === RETRIABLE_ERRORS[i]) {\n\t shouldRetry = true;\n\t break;\n\t }\n\t }\n\t }\n\t if (shouldRetry) {\n\t this._retryApiRequest(item, callback);\n\t } else {\n\t callback(err);\n\t }\n\t};\n\t\n\t/*\n\t * _retryApiRequest - Add an item and a callback to a queue and possibly start a timer to process\n\t * that queue based on the retryInterval in the options for this queue.\n\t *\n\t * @param item - an item that failed to send due to an error we deem retriable\n\t * @param callback - function(err, response)\n\t */\n\tQueue.prototype._retryApiRequest = function(item, callback) {\n\t this.retryQueue.push({item: item, callback: callback});\n\t\n\t if (!this.retryHandle) {\n\t this.retryHandle = setInterval(function() {\n\t while (this.retryQueue.length) {\n\t var retryObject = this.retryQueue.shift();\n\t this._makeApiRequest(retryObject.item, retryObject.callback);\n\t }\n\t }.bind(this), this.options.retryInterval);\n\t }\n\t};\n\t\n\t/*\n\t * _dequeuePendingRequest - Removes the item from the pending request queue, this queue is used to\n\t * enable to functionality of providing a callback that clients can pass to `wait` to be notified\n\t * when the pending request queue has been emptied. This must be called when the API finishes\n\t * processing this item. If a `wait` callback is configured, it is called by this function.\n\t *\n\t * @param item - the item previously added to the pending request queue\n\t */\n\tQueue.prototype._dequeuePendingRequest = function(item) {\n\t var idx = this.pendingRequests.indexOf(item);\n\t if (idx !== -1) {\n\t this.pendingRequests.splice(idx, 1);\n\t this._maybeCallWait();\n\t }\n\t};\n\t\n\tQueue.prototype._maybeLog = function(data, originalError) {\n\t if (this.logger && this.options.verbose) {\n\t var message = originalError;\n\t message = message || _.get(data, 'body.trace.exception.message');\n\t message = message || _.get(data, 'body.trace_chain.0.exception.message');\n\t if (message) {\n\t this.logger.error(message);\n\t return;\n\t }\n\t message = _.get(data, 'body.message.body');\n\t if (message) {\n\t this.logger.log(message);\n\t }\n\t }\n\t};\n\t\n\tQueue.prototype._maybeCallWait = function() {\n\t if (_.isFunction(this.waitCallback) && this.pendingItems.length === 0 && this.pendingRequests.length === 0) {\n\t if (this.waitIntervalID) {\n\t this.waitIntervalID = clearInterval(this.waitIntervalID);\n\t }\n\t this.waitCallback();\n\t return true;\n\t }\n\t return false;\n\t};\n\t\n\tmodule.exports = Queue;\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar extend = __webpack_require__(7);\n\t\n\tvar RollbarJSON = {};\n\tvar __initRollbarJSON = false;\n\tfunction setupJSON() {\n\t if (__initRollbarJSON) {\n\t return;\n\t }\n\t __initRollbarJSON = true;\n\t\n\t if (isDefined(JSON)) {\n\t if (isNativeFunction(JSON.stringify)) {\n\t RollbarJSON.stringify = JSON.stringify;\n\t }\n\t if (isNativeFunction(JSON.parse)) {\n\t RollbarJSON.parse = JSON.parse;\n\t }\n\t }\n\t if (!isFunction(RollbarJSON.stringify) || !isFunction(RollbarJSON.parse)) {\n\t var setupCustomJSON = __webpack_require__(8);\n\t setupCustomJSON(RollbarJSON);\n\t }\n\t}\n\tsetupJSON();\n\t\n\t/*\n\t * isType - Given a Javascript value and a string, returns true if the type of the value matches the\n\t * given string.\n\t *\n\t * @param x - any value\n\t * @param t - a lowercase string containing one of the following type names:\n\t * - undefined\n\t * - null\n\t * - error\n\t * - number\n\t * - boolean\n\t * - string\n\t * - symbol\n\t * - function\n\t * - object\n\t * - array\n\t * @returns true if x is of type t, otherwise false\n\t */\n\tfunction isType(x, t) {\n\t return t === typeName(x);\n\t}\n\t\n\t/*\n\t * typeName - Given a Javascript value, returns the type of the object as a string\n\t */\n\tfunction typeName(x) {\n\t var name = typeof x;\n\t if (name !== 'object') {\n\t return name;\n\t }\n\t if (!x) {\n\t return 'null';\n\t }\n\t if (x instanceof Error) {\n\t return 'error';\n\t }\n\t return ({}).toString.call(x).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n\t}\n\t\n\t/* isFunction - a convenience function for checking if a value is a function\n\t *\n\t * @param f - any value\n\t * @returns true if f is a function, otherwise false\n\t */\n\tfunction isFunction(f) {\n\t return isType(f, 'function');\n\t}\n\t\n\t/* isNativeFunction - a convenience function for checking if a value is a native JS function\n\t *\n\t * @param f - any value\n\t * @returns true if f is a native JS function, otherwise false\n\t */\n\tfunction isNativeFunction(f) {\n\t var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\t var funcMatchString = Function.prototype.toString.call(Object.prototype.hasOwnProperty)\n\t .replace(reRegExpChar, '\\\\$&')\n\t .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?');\n\t var reIsNative = RegExp('^' + funcMatchString + '$');\n\t return isObject(f) && reIsNative.test(f);\n\t}\n\t\n\t/* isObject - Checks if the argument is an object\n\t *\n\t * @param value - any value\n\t * @returns true is value is an object function is an object)\n\t*/\n\tfunction isObject(value) {\n\t var type = typeof value;\n\t return value != null && (type == 'object' || type == 'function');\n\t}\n\t\n\t/*\n\t * isDefined - a convenience function for checking if a value is not equal to undefined\n\t *\n\t * @param u - any value\n\t * @returns true if u is anything other than undefined\n\t */\n\tfunction isDefined(u) {\n\t return !isType(u, 'undefined');\n\t}\n\t\n\t/*\n\t * isIterable - convenience function for checking if a value can be iterated, essentially\n\t * whether it is an object or an array.\n\t *\n\t * @param i - any value\n\t * @returns true if i is an object or an array as determined by `typeName`\n\t */\n\tfunction isIterable(i) {\n\t var type = typeName(i);\n\t return (type === 'object' || type === 'array');\n\t}\n\t\n\t/*\n\t * isError - convenience function for checking if a value is of an error type\n\t *\n\t * @param e - any value\n\t * @returns true if e is an error\n\t */\n\tfunction isError(e) {\n\t return isType(e, 'error');\n\t}\n\t\n\tfunction traverse(obj, func, seen) {\n\t var k, v, i;\n\t var isObj = isType(obj, 'object');\n\t var isArray = isType(obj, 'array');\n\t var keys = [];\n\t\n\t if (isObj && seen.indexOf(obj) !== -1) {\n\t return obj;\n\t }\n\t seen.push(obj);\n\t\n\t if (isObj) {\n\t for (k in obj) {\n\t if (Object.prototype.hasOwnProperty.call(obj, k)) {\n\t keys.push(k);\n\t }\n\t }\n\t } else if (isArray) {\n\t for (i = 0; i < obj.length; ++i) {\n\t keys.push(i);\n\t }\n\t }\n\t\n\t var result = isObj ? {} : [];\n\t for (i = 0; i < keys.length; ++i) {\n\t k = keys[i];\n\t v = obj[k];\n\t result[k] = func(k, v, seen);\n\t }\n\t\n\t return (keys.length != 0) ? result : obj;\n\t}\n\t\n\tfunction redact() {\n\t return '********';\n\t}\n\t\n\t// from http://stackoverflow.com/a/8809472/1138191\n\tfunction uuid4() {\n\t var d = now();\n\t var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n\t var r = (d + Math.random() * 16) % 16 | 0;\n\t d = Math.floor(d / 16);\n\t return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16);\n\t });\n\t return uuid;\n\t}\n\t\n\tvar LEVELS = {\n\t debug: 0,\n\t info: 1,\n\t warning: 2,\n\t error: 3,\n\t critical: 4\n\t};\n\t\n\tfunction sanitizeUrl(url) {\n\t var baseUrlParts = parseUri(url);\n\t // remove a trailing # if there is no anchor\n\t if (baseUrlParts.anchor === '') {\n\t baseUrlParts.source = baseUrlParts.source.replace('#', '');\n\t }\n\t\n\t url = baseUrlParts.source.replace('?' + baseUrlParts.query, '');\n\t return url;\n\t}\n\t\n\tvar parseUriOptions = {\n\t strictMode: false,\n\t key: [\n\t 'source',\n\t 'protocol',\n\t 'authority',\n\t 'userInfo',\n\t 'user',\n\t 'password',\n\t 'host',\n\t 'port',\n\t 'relative',\n\t 'path',\n\t 'directory',\n\t 'file',\n\t 'query',\n\t 'anchor'\n\t ],\n\t q: {\n\t name: 'queryKey',\n\t parser: /(?:^|&)([^&=]*)=?([^&]*)/g\n\t },\n\t parser: {\n\t strict: /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,\n\t loose: /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/\n\t }\n\t};\n\t\n\tfunction parseUri(str) {\n\t if (!isType(str, 'string')) {\n\t throw new Error('received invalid input');\n\t }\n\t\n\t var o = parseUriOptions;\n\t var m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str);\n\t var uri = {};\n\t var i = o.key.length;\n\t\n\t while (i--) {\n\t uri[o.key[i]] = m[i] || '';\n\t }\n\t\n\t uri[o.q.name] = {};\n\t uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {\n\t if ($1) {\n\t uri[o.q.name][$1] = $2;\n\t }\n\t });\n\t\n\t return uri;\n\t}\n\t\n\tfunction addParamsAndAccessTokenToPath(accessToken, options, params) {\n\t params = params || {};\n\t params.access_token = accessToken;\n\t var paramsArray = [];\n\t var k;\n\t for (k in params) {\n\t if (Object.prototype.hasOwnProperty.call(params, k)) {\n\t paramsArray.push([k, params[k]].join('='));\n\t }\n\t }\n\t var query = '?' + paramsArray.sort().join('&');\n\t\n\t options = options || {};\n\t options.path = options.path || '';\n\t var qs = options.path.indexOf('?');\n\t var h = options.path.indexOf('#');\n\t var p;\n\t if (qs !== -1 && (h === -1 || h > qs)) {\n\t p = options.path;\n\t options.path = p.substring(0,qs) + query + '&' + p.substring(qs+1);\n\t } else {\n\t if (h !== -1) {\n\t p = options.path;\n\t options.path = p.substring(0,h) + query + p.substring(h);\n\t } else {\n\t options.path = options.path + query;\n\t }\n\t }\n\t}\n\t\n\tfunction formatUrl(u, protocol) {\n\t protocol = protocol || u.protocol;\n\t if (!protocol && u.port) {\n\t if (u.port === 80) {\n\t protocol = 'http:';\n\t } else if (u.port === 443) {\n\t protocol = 'https:';\n\t }\n\t }\n\t protocol = protocol || 'https:';\n\t\n\t if (!u.hostname) {\n\t return null;\n\t }\n\t var result = protocol + '//' + u.hostname;\n\t if (u.port) {\n\t result = result + ':' + u.port;\n\t }\n\t if (u.path) {\n\t result = result + u.path;\n\t }\n\t return result;\n\t}\n\t\n\tfunction stringify(obj, backup) {\n\t var value, error;\n\t try {\n\t value = RollbarJSON.stringify(obj);\n\t } catch (jsonError) {\n\t if (backup && isFunction(backup)) {\n\t try {\n\t value = backup(obj);\n\t } catch (backupError) {\n\t error = backupError;\n\t }\n\t } else {\n\t error = jsonError;\n\t }\n\t }\n\t return {error: error, value: value};\n\t}\n\t\n\tfunction jsonParse(s) {\n\t var value, error;\n\t try {\n\t value = RollbarJSON.parse(s);\n\t } catch (e) {\n\t error = e;\n\t }\n\t return {error: error, value: value};\n\t}\n\t\n\tfunction makeUnhandledStackInfo(\n\t message,\n\t url,\n\t lineno,\n\t colno,\n\t error,\n\t mode,\n\t backupMessage,\n\t errorParser\n\t) {\n\t var location = {\n\t url: url || '',\n\t line: lineno,\n\t column: colno\n\t };\n\t location.func = errorParser.guessFunctionName(location.url, location.line);\n\t location.context = errorParser.gatherContext(location.url, location.line);\n\t var href = document && document.location && document.location.href;\n\t var useragent = window && window.navigator && window.navigator.userAgent;\n\t return {\n\t 'mode': mode,\n\t 'message': error ? String(error) : (message || backupMessage),\n\t 'url': href,\n\t 'stack': [location],\n\t 'useragent': useragent\n\t };\n\t}\n\t\n\tfunction wrapCallback(logger, f) {\n\t return function(err, resp) {\n\t try {\n\t f(err, resp);\n\t } catch (e) {\n\t logger.error(e);\n\t }\n\t };\n\t}\n\t\n\tfunction createItem(args, logger, notifier, requestKeys, lambdaContext) {\n\t var message, err, custom, callback, request;\n\t var arg;\n\t var extraArgs = [];\n\t\n\t for (var i = 0, l = args.length; i < l; ++i) {\n\t arg = args[i];\n\t\n\t var typ = typeName(arg);\n\t switch (typ) {\n\t case 'undefined':\n\t break;\n\t case 'string':\n\t message ? extraArgs.push(arg) : message = arg;\n\t break;\n\t case 'function':\n\t callback = wrapCallback(logger, arg);\n\t break;\n\t case 'date':\n\t extraArgs.push(arg);\n\t break;\n\t case 'error':\n\t case 'domexception':\n\t err ? extraArgs.push(arg) : err = arg;\n\t break;\n\t case 'object':\n\t case 'array':\n\t if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n\t err ? extraArgs.push(arg) : err = arg;\n\t break;\n\t }\n\t if (requestKeys && typ === 'object' && !request) {\n\t for (var j = 0, len = requestKeys.length; j < len; ++j) {\n\t if (arg[requestKeys[j]] !== undefined) {\n\t request = arg;\n\t break;\n\t }\n\t }\n\t if (request) {\n\t break;\n\t }\n\t }\n\t custom ? extraArgs.push(arg) : custom = arg;\n\t break;\n\t default:\n\t if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n\t err ? extraArgs.push(arg) : err = arg;\n\t break;\n\t }\n\t extraArgs.push(arg);\n\t }\n\t }\n\t\n\t if (extraArgs.length > 0) {\n\t // if custom is an array this turns it into an object with integer keys\n\t custom = extend(true, {}, custom);\n\t custom.extraArgs = extraArgs;\n\t }\n\t\n\t var item = {\n\t message: message,\n\t err: err,\n\t custom: custom,\n\t timestamp: now(),\n\t callback: callback,\n\t uuid: uuid4()\n\t };\n\t if (custom && custom.level !== undefined) {\n\t item.level = custom.level;\n\t delete custom.level;\n\t }\n\t if (requestKeys && request) {\n\t item.request = request;\n\t }\n\t if (lambdaContext) {\n\t item.lambdaContext = lambdaContext;\n\t }\n\t item._originalArgs = args;\n\t return item;\n\t}\n\t\n\t/*\n\t * get - given an obj/array and a keypath, return the value at that keypath or\n\t * undefined if not possible.\n\t *\n\t * @param obj - an object or array\n\t * @param path - a string of keys separated by '.' such as 'plugin.jquery.0.message'\n\t * which would correspond to 42 in `{plugin: {jquery: [{message: 42}]}}`\n\t */\n\tfunction get(obj, path) {\n\t if (!obj) {\n\t return undefined;\n\t }\n\t var keys = path.split('.');\n\t var result = obj;\n\t try {\n\t for (var i = 0, len = keys.length; i < len; ++i) {\n\t result = result[keys[i]];\n\t }\n\t } catch (e) {\n\t result = undefined;\n\t }\n\t return result;\n\t}\n\t\n\tfunction set(obj, path, value) {\n\t if (!obj) {\n\t return;\n\t }\n\t var keys = path.split('.');\n\t var len = keys.length;\n\t if (len < 1) {\n\t return;\n\t }\n\t if (len === 1) {\n\t obj[keys[0]] = value;\n\t return;\n\t }\n\t try {\n\t var temp = obj[keys[0]] || {};\n\t var replacement = temp;\n\t for (var i = 1; i < len-1; i++) {\n\t temp[keys[i]] = temp[keys[i]] || {};\n\t temp = temp[keys[i]];\n\t }\n\t temp[keys[len-1]] = value;\n\t obj[keys[0]] = replacement;\n\t } catch (e) {\n\t return;\n\t }\n\t}\n\t\n\tfunction scrub(data, scrubFields) {\n\t scrubFields = scrubFields || [];\n\t var paramRes = _getScrubFieldRegexs(scrubFields);\n\t var queryRes = _getScrubQueryParamRegexs(scrubFields);\n\t\n\t function redactQueryParam(dummy0, paramPart, dummy1, dummy2, dummy3, valPart) {\n\t return paramPart + redact(valPart);\n\t }\n\t\n\t function paramScrubber(v) {\n\t var i;\n\t if (isType(v, 'string')) {\n\t for (i = 0; i < queryRes.length; ++i) {\n\t v = v.replace(queryRes[i], redactQueryParam);\n\t }\n\t }\n\t return v;\n\t }\n\t\n\t function valScrubber(k, v) {\n\t var i;\n\t for (i = 0; i < paramRes.length; ++i) {\n\t if (paramRes[i].test(k)) {\n\t v = redact(v);\n\t break;\n\t }\n\t }\n\t return v;\n\t }\n\t\n\t function scrubber(k, v, seen) {\n\t var tmpV = valScrubber(k, v);\n\t if (tmpV === v) {\n\t if (isType(v, 'object') || isType(v, 'array')) {\n\t return traverse(v, scrubber, seen);\n\t }\n\t return paramScrubber(tmpV);\n\t } else {\n\t return tmpV;\n\t }\n\t }\n\t\n\t return traverse(data, scrubber, []);\n\t}\n\t\n\tfunction _getScrubFieldRegexs(scrubFields) {\n\t var ret = [];\n\t var pat;\n\t for (var i = 0; i < scrubFields.length; ++i) {\n\t pat = '^\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?$';\n\t ret.push(new RegExp(pat, 'i'));\n\t }\n\t return ret;\n\t}\n\t\n\t\n\tfunction _getScrubQueryParamRegexs(scrubFields) {\n\t var ret = [];\n\t var pat;\n\t for (var i = 0; i < scrubFields.length; ++i) {\n\t pat = '\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?';\n\t ret.push(new RegExp('(' + pat + '=)([^&\\\\n]+)', 'igm'));\n\t }\n\t return ret;\n\t}\n\t\n\tfunction formatArgsAsString(args) {\n\t var i, len, arg;\n\t var result = [];\n\t for (i = 0, len = args.length; i < len; i++) {\n\t arg = args[i];\n\t if (typeof arg === 'object') {\n\t arg = stringify(arg);\n\t arg = arg.error || arg.value;\n\t if (arg.length > 500)\n\t arg = arg.substr(0,500)+'...';\n\t } else if (typeof arg === 'undefined') {\n\t arg = 'undefined';\n\t }\n\t result.push(arg);\n\t }\n\t return result.join(' ');\n\t}\n\t\n\tfunction now() {\n\t if (Date.now) {\n\t return +Date.now();\n\t }\n\t return +new Date();\n\t}\n\t\n\tfunction filterIp(requestData, captureIp) {\n\t if (!requestData || !requestData['user_ip'] || captureIp === true) {\n\t return;\n\t }\n\t var newIp = requestData['user_ip'];\n\t if (!captureIp) {\n\t newIp = null;\n\t } else {\n\t try {\n\t var parts;\n\t if (newIp.indexOf('.') !== -1) {\n\t parts = newIp.split('.');\n\t parts.pop();\n\t parts.push('0');\n\t newIp = parts.join('.');\n\t } else if (newIp.indexOf(':') !== -1) {\n\t parts = newIp.split(':');\n\t if (parts.length > 2) {\n\t var beginning = parts.slice(0, 3);\n\t var slashIdx = beginning[2].indexOf('/');\n\t if (slashIdx !== -1) {\n\t beginning[2] = beginning[2].substring(0, slashIdx);\n\t }\n\t var terminal = '0000:0000:0000:0000:0000';\n\t newIp = beginning.concat(terminal).join(':');\n\t }\n\t } else {\n\t newIp = null;\n\t }\n\t } catch (e) {\n\t newIp = null;\n\t }\n\t }\n\t requestData['user_ip'] = newIp;\n\t}\n\t\n\tmodule.exports = {\n\t isType: isType,\n\t typeName: typeName,\n\t isFunction: isFunction,\n\t isNativeFunction: isNativeFunction,\n\t isIterable: isIterable,\n\t isError: isError,\n\t extend: extend,\n\t traverse: traverse,\n\t redact: redact,\n\t uuid4: uuid4,\n\t LEVELS: LEVELS,\n\t sanitizeUrl: sanitizeUrl,\n\t addParamsAndAccessTokenToPath: addParamsAndAccessTokenToPath,\n\t formatUrl: formatUrl,\n\t stringify: stringify,\n\t jsonParse: jsonParse,\n\t makeUnhandledStackInfo: makeUnhandledStackInfo,\n\t createItem: createItem,\n\t get: get,\n\t set: set,\n\t scrub: scrub,\n\t formatArgsAsString: formatArgsAsString,\n\t now: now,\n\t filterIp: filterIp\n\t};\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tvar hasOwn = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\t\n\tvar isArray = function isArray(arr) {\n\t\tif (typeof Array.isArray === 'function') {\n\t\t\treturn Array.isArray(arr);\n\t\t}\n\t\n\t\treturn toStr.call(arr) === '[object Array]';\n\t};\n\t\n\tvar isPlainObject = function isPlainObject(obj) {\n\t\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\t\treturn false;\n\t\t}\n\t\n\t\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\t\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t\t// Not own constructor property must be Object\n\t\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\t\treturn false;\n\t\t}\n\t\n\t\t// Own properties are enumerated firstly, so to speed up,\n\t\t// if last one is own, then all properties are own.\n\t\tvar key;\n\t\tfor (key in obj) {/**/}\n\t\n\t\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n\t};\n\t\n\tmodule.exports = function extend() {\n\t\tvar options, name, src, copy, copyIsArray, clone,\n\t\t\ttarget = arguments[0],\n\t\t\ti = 1,\n\t\t\tlength = arguments.length,\n\t\t\tdeep = false;\n\t\n\t\t// Handle a deep copy situation\n\t\tif (typeof target === 'boolean') {\n\t\t\tdeep = target;\n\t\t\ttarget = arguments[1] || {};\n\t\t\t// skip the boolean and the target\n\t\t\ti = 2;\n\t\t} else if ((typeof target !== 'object' && typeof target !== 'function') || target == null) {\n\t\t\ttarget = {};\n\t\t}\n\t\n\t\tfor (; i < length; ++i) {\n\t\t\toptions = arguments[i];\n\t\t\t// Only deal with non-null/undefined values\n\t\t\tif (options != null) {\n\t\t\t\t// Extend the base object\n\t\t\t\tfor (name in options) {\n\t\t\t\t\tsrc = target[name];\n\t\t\t\t\tcopy = options[name];\n\t\n\t\t\t\t\t// Prevent never-ending loop\n\t\t\t\t\tif (target !== copy) {\n\t\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\t\ttarget[name] = extend(deep, clone, copy);\n\t\n\t\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\t// Return the modified object\n\t\treturn target;\n\t};\n\t\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports) {\n\n\t// json3.js\n\t// 2017-02-21\n\t// Public Domain.\n\t// NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n\t// See http://www.JSON.org/js.html\n\t// This code should be minified before deployment.\n\t// See http://javascript.crockford.com/jsmin.html\n\t\n\t// USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n\t// NOT CONTROL.\n\t\n\t// This file creates a global JSON object containing two methods: stringify\n\t// and parse. This file provides the ES5 JSON capability to ES3 systems.\n\t// If a project might run on IE8 or earlier, then this file should be included.\n\t// This file does nothing on ES5 systems.\n\t\n\t// JSON.stringify(value, replacer, space)\n\t// value any JavaScript value, usually an object or array.\n\t// replacer an optional parameter that determines how object\n\t// values are stringified for objects. It can be a\n\t// function or an array of strings.\n\t// space an optional parameter that specifies the indentation\n\t// of nested structures. If it is omitted, the text will\n\t// be packed without extra whitespace. If it is a number,\n\t// it will specify the number of spaces to indent at each\n\t// level. If it is a string (such as \"\\t\" or \" \"),\n\t// it contains the characters used to indent at each level.\n\t// This method produces a JSON text from a JavaScript value.\n\t// When an object value is found, if the object contains a toJSON\n\t// method, its toJSON method will be called and the result will be\n\t// stringified. A toJSON method does not serialize: it returns the\n\t// value represented by the name/value pair that should be serialized,\n\t// or undefined if nothing should be serialized. The toJSON method\n\t// will be passed the key associated with the value, and this will be\n\t// bound to the value.\n\t\n\t// For example, this would serialize Dates as ISO strings.\n\t\n\t// Date.prototype.toJSON = function (key) {\n\t// function f(n) {\n\t// // Format integers to have at least two digits.\n\t// return (n < 10)\n\t// ? \"0\" + n\n\t// : n;\n\t// }\n\t// return this.getUTCFullYear() + \"-\" +\n\t// f(this.getUTCMonth() + 1) + \"-\" +\n\t// f(this.getUTCDate()) + \"T\" +\n\t// f(this.getUTCHours()) + \":\" +\n\t// f(this.getUTCMinutes()) + \":\" +\n\t// f(this.getUTCSeconds()) + \"Z\";\n\t// };\n\t\n\t// You can provide an optional replacer method. It will be passed the\n\t// key and value of each member, with this bound to the containing\n\t// object. The value that is returned from your method will be\n\t// serialized. If your method returns undefined, then the member will\n\t// be excluded from the serialization.\n\t\n\t// If the replacer parameter is an array of strings, then it will be\n\t// used to select the members to be serialized. It filters the results\n\t// such that only members with keys listed in the replacer array are\n\t// stringified.\n\t\n\t// Values that do not have JSON representations, such as undefined or\n\t// functions, will not be serialized. Such values in objects will be\n\t// dropped; in arrays they will be replaced with null. You can use\n\t// a replacer function to replace those with JSON values.\n\t\n\t// JSON.stringify(undefined) returns undefined.\n\t\n\t// The optional space parameter produces a stringification of the\n\t// value that is filled with line breaks and indentation to make it\n\t// easier to read.\n\t\n\t// If the space parameter is a non-empty string, then that string will\n\t// be used for indentation. If the space parameter is a number, then\n\t// the indentation will be that many spaces.\n\t\n\t// Example:\n\t\n\t// text = JSON.stringify([\"e\", {pluribus: \"unum\"}]);\n\t// // text is '[\"e\",{\"pluribus\":\"unum\"}]'\n\t\n\t// text = JSON.stringify([\"e\", {pluribus: \"unum\"}], null, \"\\t\");\n\t// // text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\n\t\n\t// text = JSON.stringify([new Date()], function (key, value) {\n\t// return this[key] instanceof Date\n\t// ? \"Date(\" + this[key] + \")\"\n\t// : value;\n\t// });\n\t// // text is '[\"Date(---current time---)\"]'\n\t\n\t// JSON.parse(text, reviver)\n\t// This method parses a JSON text to produce an object or array.\n\t// It can throw a SyntaxError exception.\n\t// This has been modified to use JSON-js/json_parse_state.js as the\n\t// parser instead of the one built around eval found in JSON-js/json2.js\n\t\n\t// The optional reviver parameter is a function that can filter and\n\t// transform the results. It receives each of the keys and values,\n\t// and its return value is used instead of the original value.\n\t// If it returns what it received, then the structure is not modified.\n\t// If it returns undefined then the member is deleted.\n\t\n\t// Example:\n\t\n\t// // Parse the text. Values that look like ISO date strings will\n\t// // be converted to Date objects.\n\t\n\t// myData = JSON.parse(text, function (key, value) {\n\t// var a;\n\t// if (typeof value === \"string\") {\n\t// a =\n\t// /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n\t// if (a) {\n\t// return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n\t// +a[5], +a[6]));\n\t// }\n\t// }\n\t// return value;\n\t// });\n\t\n\t// myData = JSON.parse('[\"Date(09/09/2001)\"]', function (key, value) {\n\t// var d;\n\t// if (typeof value === \"string\" &&\n\t// value.slice(0, 5) === \"Date(\" &&\n\t// value.slice(-1) === \")\") {\n\t// d = new Date(value.slice(5, -1));\n\t// if (d) {\n\t// return d;\n\t// }\n\t// }\n\t// return value;\n\t// });\n\t\n\t// This is a reference implementation. You are free to copy, modify, or\n\t// redistribute.\n\t\n\t/*jslint\n\t for, this\n\t */\n\t\n\t/*property\n\t JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\n\t getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\n\t lastIndex, length, parse, prototype, push, replace, slice, stringify,\n\t test, toJSON, toString, valueOf\n\t */\n\t\n\tvar setupCustomJSON = function(JSON) {\n\t\n\t var rx_one = /^[\\],:{}\\s]*$/;\n\t var rx_two = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g;\n\t var rx_three = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\n\t var rx_four = /(?:^|:|,)(?:\\s*\\[)+/g;\n\t var rx_escapable = /[\\\\\"\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\t var rx_dangerous = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\t\n\t function f(n) {\n\t // Format integers to have at least two digits.\n\t return n < 10\n\t ? \"0\" + n\n\t : n;\n\t }\n\t\n\t function this_value() {\n\t return this.valueOf();\n\t }\n\t\n\t if (typeof Date.prototype.toJSON !== \"function\") {\n\t\n\t Date.prototype.toJSON = function () {\n\t\n\t return isFinite(this.valueOf())\n\t ? this.getUTCFullYear() + \"-\" +\n\t f(this.getUTCMonth() + 1) + \"-\" +\n\t f(this.getUTCDate()) + \"T\" +\n\t f(this.getUTCHours()) + \":\" +\n\t f(this.getUTCMinutes()) + \":\" +\n\t f(this.getUTCSeconds()) + \"Z\"\n\t : null;\n\t };\n\t\n\t Boolean.prototype.toJSON = this_value;\n\t Number.prototype.toJSON = this_value;\n\t String.prototype.toJSON = this_value;\n\t }\n\t\n\t var gap;\n\t var indent;\n\t var meta;\n\t var rep;\n\t\n\t\n\t function quote(string) {\n\t\n\t // If the string contains no control characters, no quote characters, and no\n\t // backslash characters, then we can safely slap some quotes around it.\n\t // Otherwise we must also replace the offending characters with safe escape\n\t // sequences.\n\t\n\t rx_escapable.lastIndex = 0;\n\t return rx_escapable.test(string)\n\t ? \"\\\"\" + string.replace(rx_escapable, function (a) {\n\t var c = meta[a];\n\t return typeof c === \"string\"\n\t ? c\n\t : \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n\t }) + \"\\\"\"\n\t : \"\\\"\" + string + \"\\\"\";\n\t }\n\t\n\t\n\t function str(key, holder) {\n\t\n\t // Produce a string from holder[key].\n\t\n\t var i; // The loop counter.\n\t var k; // The member key.\n\t var v; // The member value.\n\t var length;\n\t var mind = gap;\n\t var partial;\n\t var value = holder[key];\n\t\n\t // If the value has a toJSON method, call it to obtain a replacement value.\n\t\n\t if (value && typeof value === \"object\" &&\n\t typeof value.toJSON === \"function\") {\n\t value = value.toJSON(key);\n\t }\n\t\n\t // If we were called with a replacer function, then call the replacer to\n\t // obtain a replacement value.\n\t\n\t if (typeof rep === \"function\") {\n\t value = rep.call(holder, key, value);\n\t }\n\t\n\t // What happens next depends on the value's type.\n\t\n\t switch (typeof value) {\n\t case \"string\":\n\t return quote(value);\n\t\n\t case \"number\":\n\t\n\t // JSON numbers must be finite. Encode non-finite numbers as null.\n\t\n\t return isFinite(value)\n\t ? String(value)\n\t : \"null\";\n\t\n\t case \"boolean\":\n\t case \"null\":\n\t\n\t // If the value is a boolean or null, convert it to a string. Note:\n\t // typeof null does not produce \"null\". The case is included here in\n\t // the remote chance that this gets fixed someday.\n\t\n\t return String(value);\n\t\n\t // If the type is \"object\", we might be dealing with an object or an array or\n\t // null.\n\t\n\t case \"object\":\n\t\n\t // Due to a specification blunder in ECMAScript, typeof null is \"object\",\n\t // so watch out for that case.\n\t\n\t if (!value) {\n\t return \"null\";\n\t }\n\t\n\t // Make an array to hold the partial results of stringifying this object value.\n\t\n\t gap += indent;\n\t partial = [];\n\t\n\t // Is the value an array?\n\t\n\t if (Object.prototype.toString.apply(value) === \"[object Array]\") {\n\t\n\t // The value is an array. Stringify every element. Use null as a placeholder\n\t // for non-JSON values.\n\t\n\t length = value.length;\n\t for (i = 0; i < length; i += 1) {\n\t partial[i] = str(i, value) || \"null\";\n\t }\n\t\n\t // Join all of the elements together, separated with commas, and wrap them in\n\t // brackets.\n\t\n\t v = partial.length === 0\n\t ? \"[]\"\n\t : gap\n\t ? \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\"\n\t : \"[\" + partial.join(\",\") + \"]\";\n\t gap = mind;\n\t return v;\n\t }\n\t\n\t // If the replacer is an array, use it to select the members to be stringified.\n\t\n\t if (rep && typeof rep === \"object\") {\n\t length = rep.length;\n\t for (i = 0; i < length; i += 1) {\n\t if (typeof rep[i] === \"string\") {\n\t k = rep[i];\n\t v = str(k, value);\n\t if (v) {\n\t partial.push(quote(k) + (\n\t gap\n\t ? \": \"\n\t : \":\"\n\t ) + v);\n\t }\n\t }\n\t }\n\t } else {\n\t\n\t // Otherwise, iterate through all of the keys in the object.\n\t\n\t for (k in value) {\n\t if (Object.prototype.hasOwnProperty.call(value, k)) {\n\t v = str(k, value);\n\t if (v) {\n\t partial.push(quote(k) + (\n\t gap\n\t ? \": \"\n\t : \":\"\n\t ) + v);\n\t }\n\t }\n\t }\n\t }\n\t\n\t // Join all of the member texts together, separated with commas,\n\t // and wrap them in braces.\n\t\n\t v = partial.length === 0\n\t ? \"{}\"\n\t : gap\n\t ? \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\"\n\t : \"{\" + partial.join(\",\") + \"}\";\n\t gap = mind;\n\t return v;\n\t }\n\t }\n\t\n\t // If the JSON object does not yet have a stringify method, give it one.\n\t\n\t if (typeof JSON.stringify !== \"function\") {\n\t meta = { // table of character substitutions\n\t \"\\b\": \"\\\\b\",\n\t \"\\t\": \"\\\\t\",\n\t \"\\n\": \"\\\\n\",\n\t \"\\f\": \"\\\\f\",\n\t \"\\r\": \"\\\\r\",\n\t \"\\\"\": \"\\\\\\\"\",\n\t \"\\\\\": \"\\\\\\\\\"\n\t };\n\t JSON.stringify = function (value, replacer, space) {\n\t\n\t // The stringify method takes a value and an optional replacer, and an optional\n\t // space parameter, and returns a JSON text. The replacer can be a function\n\t // that can replace values, or an array of strings that will select the keys.\n\t // A default replacer method can be provided. Use of the space parameter can\n\t // produce text that is more easily readable.\n\t\n\t var i;\n\t gap = \"\";\n\t indent = \"\";\n\t\n\t // If the space parameter is a number, make an indent string containing that\n\t // many spaces.\n\t\n\t if (typeof space === \"number\") {\n\t for (i = 0; i < space; i += 1) {\n\t indent += \" \";\n\t }\n\t\n\t // If the space parameter is a string, it will be used as the indent string.\n\t\n\t } else if (typeof space === \"string\") {\n\t indent = space;\n\t }\n\t\n\t // If there is a replacer, it must be a function or an array.\n\t // Otherwise, throw an error.\n\t\n\t rep = replacer;\n\t if (replacer && typeof replacer !== \"function\" &&\n\t (typeof replacer !== \"object\" ||\n\t typeof replacer.length !== \"number\")) {\n\t throw new Error(\"JSON.stringify\");\n\t }\n\t\n\t // Make a fake root object containing our value under the key of \"\".\n\t // Return the result of stringifying the value.\n\t\n\t return str(\"\", {\"\": value});\n\t };\n\t }\n\t\n\t\n\t // If the JSON object does not yet have a parse method, give it one.\n\t\n\t if (typeof JSON.parse !== \"function\") {\n\t JSON.parse = (function () {\n\t\n\t // This function creates a JSON parse function that uses a state machine rather\n\t // than the dangerous eval function to parse a JSON text.\n\t\n\t var state; // The state of the parser, one of\n\t // 'go' The starting state\n\t // 'ok' The final, accepting state\n\t // 'firstokey' Ready for the first key of the object or\n\t // the closing of an empty object\n\t // 'okey' Ready for the next key of the object\n\t // 'colon' Ready for the colon\n\t // 'ovalue' Ready for the value half of a key/value pair\n\t // 'ocomma' Ready for a comma or closing }\n\t // 'firstavalue' Ready for the first value of an array or\n\t // an empty array\n\t // 'avalue' Ready for the next value of an array\n\t // 'acomma' Ready for a comma or closing ]\n\t var stack; // The stack, for controlling nesting.\n\t var container; // The current container object or array\n\t var key; // The current key\n\t var value; // The current value\n\t var escapes = { // Escapement translation table\n\t \"\\\\\": \"\\\\\",\n\t \"\\\"\": \"\\\"\",\n\t \"/\": \"/\",\n\t \"t\": \"\\t\",\n\t \"n\": \"\\n\",\n\t \"r\": \"\\r\",\n\t \"f\": \"\\f\",\n\t \"b\": \"\\b\"\n\t };\n\t var string = { // The actions for string tokens\n\t go: function () {\n\t state = \"ok\";\n\t },\n\t firstokey: function () {\n\t key = value;\n\t state = \"colon\";\n\t },\n\t okey: function () {\n\t key = value;\n\t state = \"colon\";\n\t },\n\t ovalue: function () {\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t state = \"acomma\";\n\t }\n\t };\n\t var number = { // The actions for number tokens\n\t go: function () {\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t state = \"acomma\";\n\t }\n\t };\n\t var action = {\n\t\n\t // The action table describes the behavior of the machine. It contains an\n\t // object for each token. Each object contains a method that is called when\n\t // a token is matched in a state. An object will lack a method for illegal\n\t // states.\n\t\n\t \"{\": {\n\t go: function () {\n\t stack.push({state: \"ok\"});\n\t container = {};\n\t state = \"firstokey\";\n\t },\n\t ovalue: function () {\n\t stack.push({container: container, state: \"ocomma\", key: key});\n\t container = {};\n\t state = \"firstokey\";\n\t },\n\t firstavalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = {};\n\t state = \"firstokey\";\n\t },\n\t avalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = {};\n\t state = \"firstokey\";\n\t }\n\t },\n\t \"}\": {\n\t firstokey: function () {\n\t var pop = stack.pop();\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t },\n\t ocomma: function () {\n\t var pop = stack.pop();\n\t container[key] = value;\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t }\n\t },\n\t \"[\": {\n\t go: function () {\n\t stack.push({state: \"ok\"});\n\t container = [];\n\t state = \"firstavalue\";\n\t },\n\t ovalue: function () {\n\t stack.push({container: container, state: \"ocomma\", key: key});\n\t container = [];\n\t state = \"firstavalue\";\n\t },\n\t firstavalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = [];\n\t state = \"firstavalue\";\n\t },\n\t avalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = [];\n\t state = \"firstavalue\";\n\t }\n\t },\n\t \"]\": {\n\t firstavalue: function () {\n\t var pop = stack.pop();\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t },\n\t acomma: function () {\n\t var pop = stack.pop();\n\t container.push(value);\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t }\n\t },\n\t \":\": {\n\t colon: function () {\n\t if (Object.hasOwnProperty.call(container, key)) {\n\t throw new SyntaxError(\"Duplicate key '\" + key + \"\\\"\");\n\t }\n\t state = \"ovalue\";\n\t }\n\t },\n\t \",\": {\n\t ocomma: function () {\n\t container[key] = value;\n\t state = \"okey\";\n\t },\n\t acomma: function () {\n\t container.push(value);\n\t state = \"avalue\";\n\t }\n\t },\n\t \"true\": {\n\t go: function () {\n\t value = true;\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t value = true;\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t value = true;\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t value = true;\n\t state = \"acomma\";\n\t }\n\t },\n\t \"false\": {\n\t go: function () {\n\t value = false;\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t value = false;\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t value = false;\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t value = false;\n\t state = \"acomma\";\n\t }\n\t },\n\t \"null\": {\n\t go: function () {\n\t value = null;\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t value = null;\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t value = null;\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t value = null;\n\t state = \"acomma\";\n\t }\n\t }\n\t };\n\t\n\t function debackslashify(text) {\n\t\n\t // Remove and replace any backslash escapement.\n\t\n\t return text.replace(/\\\\(?:u(.{4})|([^u]))/g, function (ignore, b, c) {\n\t return b\n\t ? String.fromCharCode(parseInt(b, 16))\n\t : escapes[c];\n\t });\n\t }\n\t\n\t return function (source, reviver) {\n\t\n\t // A regular expression is used to extract tokens from the JSON text.\n\t // The extraction process is cautious.\n\t\n\t var result;\n\t var tx = /^[\\u0020\\t\\n\\r]*(?:([,:\\[\\]{}]|true|false|null)|(-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)|\"((?:[^\\r\\n\\t\\\\\\\"]|\\\\(?:[\"\\\\\\/trnfb]|u[0-9a-fA-F]{4}))*)\")/;\n\t\n\t // Set the starting state.\n\t\n\t state = \"go\";\n\t\n\t // The stack records the container, key, and state for each object or array\n\t // that contains another object or array while processing nested structures.\n\t\n\t stack = [];\n\t\n\t // If any error occurs, we will catch it and ultimately throw a syntax error.\n\t\n\t try {\n\t\n\t // For each token...\n\t\n\t while (true) {\n\t result = tx.exec(source);\n\t if (!result) {\n\t break;\n\t }\n\t\n\t // result is the result array from matching the tokenizing regular expression.\n\t // result[0] contains everything that matched, including any initial whitespace.\n\t // result[1] contains any punctuation that was matched, or true, false, or null.\n\t // result[2] contains a matched number, still in string form.\n\t // result[3] contains a matched string, without quotes but with escapement.\n\t\n\t if (result[1]) {\n\t\n\t // Token: Execute the action for this state and token.\n\t\n\t action[result[1]][state]();\n\t\n\t } else if (result[2]) {\n\t\n\t // Number token: Convert the number string into a number value and execute\n\t // the action for this state and number.\n\t\n\t value = +result[2];\n\t number[state]();\n\t } else {\n\t\n\t // String token: Replace the escapement sequences and execute the action for\n\t // this state and string.\n\t\n\t value = debackslashify(result[3]);\n\t string[state]();\n\t }\n\t\n\t // Remove the token from the string. The loop will continue as long as there\n\t // are tokens. This is a slow process, but it allows the use of ^ matching,\n\t // which assures that no illegal tokens slip through.\n\t\n\t source = source.slice(result[0].length);\n\t }\n\t\n\t // If we find a state/token combination that is illegal, then the action will\n\t // cause an error. We handle the error by simply changing the state.\n\t\n\t } catch (e) {\n\t state = e;\n\t }\n\t\n\t // The parsing is finished. If we are not in the final \"ok\" state, or if the\n\t // remaining source contains anything except whitespace, then we did not have\n\t //a well-formed JSON text.\n\t\n\t if (state !== \"ok\" || (/[^\\u0020\\t\\n\\r]/.test(source))) {\n\t throw (state instanceof SyntaxError)\n\t ? state\n\t : new SyntaxError(\"JSON\");\n\t }\n\t\n\t // If there is a reviver function, we recursively walk the new structure,\n\t // passing each name/value pair to the reviver function for possible\n\t // transformation, starting with a temporary root object that holds the current\n\t // value in an empty key. If there is not a reviver function, we simply return\n\t // that value.\n\t\n\t return (typeof reviver === \"function\")\n\t ? (function walk(holder, key) {\n\t var k;\n\t var v;\n\t var val = holder[key];\n\t if (val && typeof val === \"object\") {\n\t for (k in value) {\n\t if (Object.prototype.hasOwnProperty.call(val, k)) {\n\t v = walk(val, k);\n\t if (v !== undefined) {\n\t val[k] = v;\n\t } else {\n\t delete val[k];\n\t }\n\t }\n\t }\n\t }\n\t return reviver.call(holder, key, val);\n\t }({\"\": value}, \"\"))\n\t : value;\n\t };\n\t }());\n\t }\n\t}\n\t\n\tmodule.exports = setupCustomJSON;\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\t\n\t/*\n\t * Notifier - the internal object responsible for delegating between the client exposed API, the\n\t * chain of transforms necessary to turn an item into something that can be sent to Rollbar, and the\n\t * queue which handles the communcation with the Rollbar API servers.\n\t *\n\t * @param queue - an object that conforms to the interface: addItem(item, callback)\n\t * @param options - an object representing the options to be set for this notifier, this should have\n\t * any defaults already set by the caller\n\t */\n\tfunction Notifier(queue, options) {\n\t this.queue = queue;\n\t this.options = options;\n\t this.transforms = [];\n\t}\n\t\n\t/*\n\t * configure - updates the options for this notifier with the passed in object\n\t *\n\t * @param options - an object which gets merged with the current options set on this notifier\n\t * @returns this\n\t */\n\tNotifier.prototype.configure = function(options) {\n\t this.queue && this.queue.configure(options);\n\t var oldOptions = this.options;\n\t this.options = _.extend({}, oldOptions, options);\n\t return this;\n\t};\n\t\n\t/*\n\t * addTransform - adds a transform onto the end of the queue of transforms for this notifier\n\t *\n\t * @param transform - a function which takes three arguments:\n\t * * item: An Object representing the data to eventually be sent to Rollbar\n\t * * options: The current value of the options for this notifier\n\t * * callback: function(err: (Null|Error), item: (Null|Object)) the transform must call this\n\t * callback with a null value for error if it wants the processing chain to continue, otherwise\n\t * with an error to terminate the processing. The item should be the updated item after this\n\t * transform is finished modifying it.\n\t */\n\tNotifier.prototype.addTransform = function(transform) {\n\t if (_.isFunction(transform)) {\n\t this.transforms.push(transform);\n\t }\n\t return this;\n\t};\n\t\n\t/*\n\t * log - the internal log function which applies the configured transforms and then pushes onto the\n\t * queue to be sent to the backend.\n\t *\n\t * @param item - An object with the following structure:\n\t * message [String] - An optional string to be sent to rollbar\n\t * error [Error] - An optional error\n\t *\n\t * @param callback - A function of type function(err, resp) which will be called with exactly one\n\t * null argument and one non-null argument. The callback will be called once, either during the\n\t * transform stage if an error occurs inside a transform, or in response to the communication with\n\t * the backend. The second argument will be the response from the backend in case of success.\n\t */\n\tNotifier.prototype.log = function(item, callback) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t\n\t if (!this.options.enabled) {\n\t return callback(new Error('Rollbar is not enabled'));\n\t }\n\t\n\t this.queue.addPendingItem(item);\n\t var originalError = item.err;\n\t this._applyTransforms(item, function(err, i) {\n\t if (err) {\n\t this.queue.removePendingItem(item);\n\t return callback(err, null);\n\t }\n\t this.queue.addItem(i, callback, originalError, item);\n\t }.bind(this));\n\t};\n\t\n\t/* Internal */\n\t\n\t/*\n\t * _applyTransforms - Applies the transforms that have been added to this notifier sequentially. See\n\t * `addTransform` for more information.\n\t *\n\t * @param item - An item to be transformed\n\t * @param callback - A function of type function(err, item) which will be called with a non-null\n\t * error and a null item in the case of a transform failure, or a null error and non-null item after\n\t * all transforms have been applied.\n\t */\n\tNotifier.prototype._applyTransforms = function(item, callback) {\n\t var transformIndex = -1;\n\t var transformsLength = this.transforms.length;\n\t var transforms = this.transforms;\n\t var options = this.options;\n\t\n\t var cb = function(err, i) {\n\t if (err) {\n\t callback(err, null);\n\t return;\n\t }\n\t\n\t transformIndex++;\n\t\n\t if (transformIndex === transformsLength) {\n\t callback(null, i);\n\t return;\n\t }\n\t\n\t transforms[transformIndex](i, options, cb);\n\t };\n\t\n\t cb(null, item);\n\t};\n\t\n\tmodule.exports = Notifier;\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\t\n\tvar MAX_EVENTS = 100;\n\t\n\tfunction Telemeter(options) {\n\t this.queue = [];\n\t this.options = _.extend(true, {}, options);\n\t var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n\t this.maxQueueSize = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n\t}\n\t\n\tTelemeter.prototype.configure = function(options) {\n\t var oldOptions = this.options;\n\t this.options = _.extend(true, {}, oldOptions, options);\n\t var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n\t var newMaxEvents = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n\t var deleteCount = 0;\n\t if (this.maxQueueSize > newMaxEvents) {\n\t deleteCount = this.maxQueueSize - newMaxEvents;\n\t }\n\t this.maxQueueSize = newMaxEvents;\n\t this.queue.splice(0, deleteCount);\n\t};\n\t\n\tTelemeter.prototype.copyEvents = function() {\n\t return Array.prototype.slice.call(this.queue, 0);\n\t};\n\t\n\tTelemeter.prototype.capture = function(type, metadata, level, rollbarUUID, timestamp) {\n\t var e = {\n\t level: getLevel(type, level),\n\t type: type,\n\t timestamp_ms: timestamp || _.now(),\n\t body: metadata,\n\t source: 'client'\n\t };\n\t if (rollbarUUID) {\n\t e.uuid = rollbarUUID;\n\t }\n\t\n\t try {\n\t if (_.isFunction(this.options.filterTelemetry) && this.options.filterTelemetry(e)) {\n\t return false;\n\t }\n\t } catch (e) {\n\t this.options.filterTelemetry = null;\n\t }\n\t\n\t this.push(e);\n\t return e;\n\t};\n\t\n\tTelemeter.prototype.captureEvent = function(metadata, level, rollbarUUID) {\n\t return this.capture('manual', metadata, level, rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.captureError = function(err, level, rollbarUUID, timestamp) {\n\t var metadata = {\n\t message: err.message || String(err)\n\t };\n\t if (err.stack) {\n\t metadata.stack = err.stack;\n\t }\n\t return this.capture('error', metadata, level, rollbarUUID, timestamp);\n\t};\n\t\n\tTelemeter.prototype.captureLog = function(message, level, rollbarUUID, timestamp) {\n\t return this.capture('log', {\n\t message: message\n\t }, level, rollbarUUID, timestamp);\n\t};\n\t\n\tTelemeter.prototype.captureNetwork = function(metadata, subtype, rollbarUUID, requestData) {\n\t subtype = subtype || 'xhr';\n\t metadata.subtype = metadata.subtype || subtype;\n\t if (requestData) {\n\t metadata.request = requestData;\n\t }\n\t var level = this.levelFromStatus(metadata.status_code);\n\t return this.capture('network', metadata, level, rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.levelFromStatus = function(statusCode) {\n\t if (statusCode >= 200 && statusCode < 400) {\n\t return 'info';\n\t }\n\t if (statusCode === 0 || statusCode >= 400) {\n\t return 'error';\n\t }\n\t return 'info';\n\t};\n\t\n\tTelemeter.prototype.captureDom = function(subtype, element, value, checked, rollbarUUID) {\n\t var metadata = {\n\t subtype: subtype,\n\t element: element\n\t };\n\t if (value !== undefined) {\n\t metadata.value = value;\n\t }\n\t if (checked !== undefined) {\n\t metadata.checked = checked;\n\t }\n\t return this.capture('dom', metadata, 'info', rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.captureNavigation = function(from, to, rollbarUUID) {\n\t return this.capture('navigation', {from: from, to: to}, 'info', rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.captureDomContentLoaded = function(ts) {\n\t return this.capture('navigation', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n\t /**\n\t * If we decide to make this a dom event instead, then use the line below:\n\t return this.capture('dom', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n\t */\n\t};\n\tTelemeter.prototype.captureLoad = function(ts) {\n\t return this.capture('navigation', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n\t /**\n\t * If we decide to make this a dom event instead, then use the line below:\n\t return this.capture('dom', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n\t */\n\t};\n\t\n\tTelemeter.prototype.captureConnectivityChange = function(type, rollbarUUID) {\n\t return this.captureNetwork({change: type}, 'connectivity', rollbarUUID);\n\t};\n\t\n\t// Only intended to be used internally by the notifier\n\tTelemeter.prototype._captureRollbarItem = function(item) {\n\t if (!this.options.includeItemsInTelemetry) {\n\t return;\n\t }\n\t if (item.err) {\n\t return this.captureError(item.err, item.level, item.uuid, item.timestamp);\n\t }\n\t if (item.message) {\n\t return this.captureLog(item.message, item.level, item.uuid, item.timestamp);\n\t }\n\t if (item.custom) {\n\t return this.capture('log', item.custom, item.level, item.uuid, item.timestamp);\n\t }\n\t};\n\t\n\tTelemeter.prototype.push = function(e) {\n\t this.queue.push(e);\n\t if (this.queue.length > this.maxQueueSize) {\n\t this.queue.shift();\n\t }\n\t};\n\t\n\tfunction getLevel(type, level) {\n\t if (level) {\n\t return level;\n\t }\n\t var defaultLevel = {\n\t error: 'error',\n\t manual: 'info'\n\t };\n\t return defaultLevel[type] || 'info';\n\t}\n\t\n\tmodule.exports = Telemeter;\n\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\tvar helpers = __webpack_require__(12);\n\t\n\tvar defaultOptions = {\n\t hostname: 'api.rollbar.com',\n\t path: '/api/1/item/',\n\t search: null,\n\t version: '1',\n\t protocol: 'https:',\n\t port: 443\n\t};\n\t\n\t/**\n\t * Api is an object that encapsulates methods of communicating with\n\t * the Rollbar API. It is a standard interface with some parts implemented\n\t * differently for server or browser contexts. It is an object that should\n\t * be instantiated when used so it can contain non-global options that may\n\t * be different for another instance of RollbarApi.\n\t *\n\t * @param options {\n\t * accessToken: the accessToken to use for posting items to rollbar\n\t * endpoint: an alternative endpoint to send errors to\n\t * must be a valid, fully qualified URL.\n\t * The default is: https://api.rollbar.com/api/1/item\n\t * proxy: if you wish to proxy requests provide an object\n\t * with the following keys:\n\t * host or hostname (required): foo.example.com\n\t * port (optional): 123\n\t * protocol (optional): https\n\t * }\n\t */\n\tfunction Api(options, t, u, j) {\n\t this.options = options;\n\t this.transport = t;\n\t this.url = u;\n\t this.jsonBackup = j;\n\t this.accessToken = options.accessToken;\n\t this.transportOptions = _getTransport(options, u);\n\t}\n\t\n\t/**\n\t *\n\t * @param data\n\t * @param callback\n\t */\n\tApi.prototype.postItem = function(data, callback) {\n\t var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n\t var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n\t this.transport.post(this.accessToken, transportOptions, payload, callback);\n\t};\n\t\n\tApi.prototype.configure = function(options) {\n\t var oldOptions = this.oldOptions;\n\t this.options = _.extend(true, {}, oldOptions, options);\n\t this.transportOptions = _getTransport(this.options, this.url);\n\t if (this.options.accessToken !== undefined) {\n\t this.accessToken = this.options.accessToken;\n\t }\n\t return this;\n\t};\n\t\n\tfunction _getTransport(options, url) {\n\t return helpers.getTransportFromOptions(options, defaultOptions, url);\n\t}\n\t\n\tmodule.exports = Api;\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\t\n\tfunction buildPayload(accessToken, data, jsonBackup) {\n\t if (!_.isType(data.context, 'string')) {\n\t var contextResult = _.stringify(data.context, jsonBackup);\n\t if (contextResult.error) {\n\t data.context = 'Error: could not serialize \\'context\\'';\n\t } else {\n\t data.context = contextResult.value || '';\n\t }\n\t if (data.context.length > 255) {\n\t data.context = data.context.substr(0, 255);\n\t }\n\t }\n\t return {\n\t access_token: accessToken,\n\t data: data\n\t };\n\t}\n\t\n\tfunction getTransportFromOptions(options, defaults, url) {\n\t var hostname = defaults.hostname;\n\t var protocol = defaults.protocol;\n\t var port = defaults.port;\n\t var path = defaults.path;\n\t var search = defaults.search;\n\t\n\t var proxy = options.proxy;\n\t if (options.endpoint) {\n\t var opts = url.parse(options.endpoint);\n\t hostname = opts.hostname;\n\t protocol = opts.protocol;\n\t port = opts.port;\n\t path = opts.pathname;\n\t search = opts.search;\n\t }\n\t return {\n\t hostname: hostname,\n\t protocol: protocol,\n\t port: port,\n\t path: path,\n\t search: search,\n\t proxy: proxy\n\t };\n\t}\n\t\n\tfunction transportOptions(transport, method) {\n\t var protocol = transport.protocol || 'https:';\n\t var port = transport.port || (protocol === 'http:' ? 80 : protocol === 'https:' ? 443 : undefined);\n\t var hostname = transport.hostname;\n\t var path = transport.path;\n\t if (transport.search) {\n\t path = path + transport.search;\n\t }\n\t if (transport.proxy) {\n\t path = protocol + '//' + hostname + path;\n\t hostname = transport.proxy.host || transport.proxy.hostname;\n\t port = transport.proxy.port;\n\t protocol = transport.proxy.protocol || protocol;\n\t }\n\t return {\n\t protocol: protocol,\n\t hostname: hostname,\n\t path: path,\n\t port: port,\n\t method: method\n\t };\n\t}\n\t\n\tfunction appendPathToPath(base, path) {\n\t var baseTrailingSlash = /\\/$/.test(base);\n\t var pathBeginningSlash = /^\\//.test(path);\n\t\n\t if (baseTrailingSlash && pathBeginningSlash) {\n\t path = path.substring(1);\n\t } else if (!baseTrailingSlash && !pathBeginningSlash) {\n\t path = '/' + path;\n\t }\n\t\n\t return base + path;\n\t}\n\t\n\tmodule.exports = {\n\t buildPayload: buildPayload,\n\t getTransportFromOptions: getTransportFromOptions,\n\t transportOptions: transportOptions,\n\t appendPathToPath: appendPathToPath\n\t};\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t/* eslint-disable no-console */\n\t__webpack_require__(14);\n\tvar detection = __webpack_require__(15);\n\tvar _ = __webpack_require__(6);\n\t\n\tfunction error() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t args.unshift('Rollbar:');\n\t if (detection.ieVersion() <= 8) {\n\t console.error(_.formatArgsAsString(args));\n\t } else {\n\t console.error.apply(console, args);\n\t }\n\t}\n\t\n\tfunction info() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t args.unshift('Rollbar:');\n\t if (detection.ieVersion() <= 8) {\n\t console.info(_.formatArgsAsString(args));\n\t } else {\n\t console.info.apply(console, args);\n\t }\n\t}\n\t\n\tfunction log() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t args.unshift('Rollbar:');\n\t if (detection.ieVersion() <= 8) {\n\t console.log(_.formatArgsAsString(args));\n\t } else {\n\t console.log.apply(console, args);\n\t }\n\t}\n\t\n\t/* eslint-enable no-console */\n\t\n\tmodule.exports = {\n\t error: error,\n\t info: info,\n\t log: log\n\t};\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports) {\n\n\t// Console-polyfill. MIT license.\n\t// https://github.com/paulmillr/console-polyfill\n\t// Make it safe to do console.log() always.\n\t(function(global) {\n\t 'use strict';\n\t if (!global.console) {\n\t global.console = {};\n\t }\n\t var con = global.console;\n\t var prop, method;\n\t var dummy = function() {};\n\t var properties = ['memory'];\n\t var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' +\n\t 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' +\n\t 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',');\n\t while (prop = properties.pop()) if (!con[prop]) con[prop] = {};\n\t while (method = methods.pop()) if (!con[method]) con[method] = dummy;\n\t // Using `this` for web workers & supports Browserify / Webpack.\n\t})(typeof window === 'undefined' ? this : window);\n\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\t// This detection.js module is used to encapsulate any ugly browser/feature\n\t// detection we may need to do.\n\t\n\t// Figure out which version of IE we're using, if any.\n\t// This is gleaned from http://stackoverflow.com/questions/5574842/best-way-to-check-for-ie-less-than-9-in-javascript-without-library\n\t// Will return an integer on IE (i.e. 8)\n\t// Will return undefined otherwise\n\tfunction getIEVersion() {\n\t\tvar undef;\n\t\tif (!document) {\n\t\t\treturn undef;\n\t\t}\n\t\n\t var v = 3,\n\t div = document.createElement('div'),\n\t all = div.getElementsByTagName('i');\n\t\n\t while (\n\t div.innerHTML = '',\n\t all[0]\n\t );\n\t\n\t return v > 4 ? v : undef;\n\t}\n\t\n\tvar Detection = {\n\t ieVersion: getIEVersion\n\t};\n\t\n\tmodule.exports = Detection;\n\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tfunction captureUncaughtExceptions(window, handler, shim) {\n\t if (!window) { return; }\n\t var oldOnError;\n\t\n\t if (typeof handler._rollbarOldOnError === 'function') {\n\t oldOnError = handler._rollbarOldOnError;\n\t } else if (window.onerror && !window.onerror.belongsToShim) {\n\t oldOnError = window.onerror;\n\t handler._rollbarOldOnError = oldOnError;\n\t }\n\t\n\t var fn = function() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t _rollbarWindowOnError(window, handler, oldOnError, args);\n\t };\n\t fn.belongsToShim = shim;\n\t window.onerror = fn;\n\t}\n\t\n\tfunction _rollbarWindowOnError(window, r, old, args) {\n\t if (window._rollbarWrappedError) {\n\t if (!args[4]) {\n\t args[4] = window._rollbarWrappedError;\n\t }\n\t if (!args[5]) {\n\t args[5] = window._rollbarWrappedError._rollbarContext;\n\t }\n\t window._rollbarWrappedError = null;\n\t }\n\t\n\t r.handleUncaughtException.apply(r, args);\n\t if (old) {\n\t old.apply(window, args);\n\t }\n\t}\n\t\n\tfunction captureUnhandledRejections(window, handler, shim) {\n\t if (!window) { return; }\n\t\n\t if (typeof window._rollbarURH === 'function' && window._rollbarURH.belongsToShim) {\n\t window.removeEventListener('unhandledrejection', window._rollbarURH);\n\t }\n\t\n\t var rejectionHandler = function (evt) {\n\t var reason, promise, detail;\n\t try {\n\t reason = evt.reason;\n\t } catch (e) {\n\t reason = undefined;\n\t }\n\t try {\n\t promise = evt.promise;\n\t } catch (e) {\n\t promise = '[unhandledrejection] error getting `promise` from event';\n\t }\n\t try {\n\t detail = evt.detail;\n\t if (!reason && detail) {\n\t reason = detail.reason;\n\t promise = detail.promise;\n\t }\n\t } catch (e) {\n\t detail = '[unhandledrejection] error getting `detail` from event';\n\t }\n\t if (!reason) {\n\t reason = '[unhandledrejection] error getting `reason` from event';\n\t }\n\t\n\t if (handler && handler.handleUnhandledRejection) {\n\t handler.handleUnhandledRejection(reason, promise);\n\t }\n\t };\n\t rejectionHandler.belongsToShim = shim;\n\t window._rollbarURH = rejectionHandler;\n\t window.addEventListener('unhandledrejection', rejectionHandler);\n\t}\n\t\n\tfunction wrapGlobals(window, handler, shim) {\n\t if (!window) { return; }\n\t // Adapted from https://github.com/bugsnag/bugsnag-js\n\t var globals = 'EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload'.split(',');\n\t var i, global;\n\t for (i = 0; i < globals.length; ++i) {\n\t global = globals[i];\n\t\n\t if (window[global] && window[global].prototype) {\n\t _extendListenerPrototype(handler, window[global].prototype, shim);\n\t }\n\t }\n\t}\n\t\n\tfunction _extendListenerPrototype(handler, prototype, shim) {\n\t if (prototype.hasOwnProperty && prototype.hasOwnProperty('addEventListener')) {\n\t var oldAddEventListener = prototype.addEventListener;\n\t while (oldAddEventListener._rollbarOldAdd && oldAddEventListener.belongsToShim) {\n\t oldAddEventListener = oldAddEventListener._rollbarOldAdd;\n\t }\n\t var addFn = function(event, callback, bubble) {\n\t oldAddEventListener.call(this, event, handler.wrap(callback), bubble);\n\t };\n\t addFn._rollbarOldAdd = oldAddEventListener;\n\t addFn.belongsToShim = shim;\n\t prototype.addEventListener = addFn;\n\t\n\t var oldRemoveEventListener = prototype.removeEventListener;\n\t while (oldRemoveEventListener._rollbarOldRemove && oldRemoveEventListener.belongsToShim) {\n\t oldRemoveEventListener = oldRemoveEventListener._rollbarOldRemove;\n\t }\n\t var removeFn = function(event, callback, bubble) {\n\t oldRemoveEventListener.call(this, event, callback && callback._rollbar_wrapped || callback, bubble);\n\t };\n\t removeFn._rollbarOldRemove = oldRemoveEventListener;\n\t removeFn.belongsToShim = shim;\n\t prototype.removeEventListener = removeFn;\n\t }\n\t}\n\t\n\tmodule.exports = {\n\t captureUncaughtExceptions: captureUncaughtExceptions,\n\t captureUnhandledRejections: captureUnhandledRejections,\n\t wrapGlobals: wrapGlobals\n\t};\n\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\tvar logger = __webpack_require__(13);\n\t\n\t/*\n\t * accessToken may be embedded in payload but that should not\n\t * be assumed\n\t *\n\t * options: {\n\t * hostname\n\t * protocol\n\t * path\n\t * port\n\t * method\n\t * }\n\t *\n\t * params is an object containing key/value pairs. These\n\t * will be appended to the path as 'key=value&key=value'\n\t *\n\t * payload is an unserialized object\n\t */\n\t\n\tfunction get(accessToken, options, params, callback, requestFactory) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t _.addParamsAndAccessTokenToPath(accessToken, options, params);\n\t\n\t var method = 'GET';\n\t var url = _.formatUrl(options);\n\t _makeRequest(accessToken, url, method, null, callback, requestFactory);\n\t}\n\t\n\tfunction post(accessToken, options, payload, callback, requestFactory) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t\n\t if (!payload) {\n\t return callback(new Error('Cannot send empty request'));\n\t }\n\t\n\t var stringifyResult = _.stringify(payload);\n\t if (stringifyResult.error) {\n\t return callback(stringifyResult.error);\n\t }\n\t\n\t var writeData = stringifyResult.value;\n\t var method = 'POST';\n\t var url = _.formatUrl(options);\n\t _makeRequest(accessToken, url, method, writeData, callback, requestFactory);\n\t}\n\t\n\tfunction _makeRequest(accessToken, url, method, data, callback, requestFactory) {\n\t var request;\n\t if (requestFactory) {\n\t request = requestFactory();\n\t } else {\n\t request = _createXMLHTTPObject();\n\t }\n\t if (!request) {\n\t // Give up, no way to send requests\n\t return callback(new Error('No way to send a request'));\n\t }\n\t try {\n\t try {\n\t var onreadystatechange = function() {\n\t try {\n\t if (onreadystatechange && request.readyState === 4) {\n\t onreadystatechange = undefined;\n\t\n\t var parseResponse = _.jsonParse(request.responseText);\n\t if (_isSuccess(request)) {\n\t callback(parseResponse.error, parseResponse.value);\n\t return;\n\t } else if (_isNormalFailure(request)) {\n\t if (request.status === 403) {\n\t // likely caused by using a server access token\n\t var message = parseResponse.value && parseResponse.value.message;\n\t logger.error(message);\n\t }\n\t // return valid http status codes\n\t callback(new Error(String(request.status)));\n\t } else {\n\t // IE will return a status 12000+ on some sort of connection failure,\n\t // so we return a blank error\n\t // http://msdn.microsoft.com/en-us/library/aa383770%28VS.85%29.aspx\n\t var msg = 'XHR response had no status code (likely connection failure)';\n\t callback(_newRetriableError(msg));\n\t }\n\t }\n\t } catch (ex) {\n\t //jquery source mentions firefox may error out while accessing the\n\t //request members if there is a network error\n\t //https://github.com/jquery/jquery/blob/a938d7b1282fc0e5c52502c225ae8f0cef219f0a/src/ajax/xhr.js#L111\n\t var exc;\n\t if (ex && ex.stack) {\n\t exc = ex;\n\t } else {\n\t exc = new Error(ex);\n\t }\n\t callback(exc);\n\t }\n\t };\n\t\n\t request.open(method, url, true);\n\t if (request.setRequestHeader) {\n\t request.setRequestHeader('Content-Type', 'application/json');\n\t request.setRequestHeader('X-Rollbar-Access-Token', accessToken);\n\t }\n\t request.onreadystatechange = onreadystatechange;\n\t request.send(data);\n\t } catch (e1) {\n\t // Sending using the normal xmlhttprequest object didn't work, try XDomainRequest\n\t if (typeof XDomainRequest !== 'undefined') {\n\t\n\t // Assume we are in a really old browser which has a bunch of limitations:\n\t // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\t\n\t // Extreme paranoia: if we have XDomainRequest then we have a window, but just in case\n\t if (!window || !window.location) {\n\t return callback(new Error('No window available during request, unknown environment'));\n\t }\n\t\n\t // If the current page is http, try and send over http\n\t if (window.location.href.substring(0, 5) === 'http:' && url.substring(0, 5) === 'https') {\n\t url = 'http' + url.substring(5);\n\t }\n\t\n\t var xdomainrequest = new XDomainRequest();\n\t xdomainrequest.onprogress = function() {};\n\t xdomainrequest.ontimeout = function() {\n\t var msg = 'Request timed out';\n\t var code = 'ETIMEDOUT';\n\t callback(_newRetriableError(msg, code));\n\t };\n\t xdomainrequest.onerror = function() {\n\t callback(new Error('Error during request'));\n\t };\n\t xdomainrequest.onload = function() {\n\t var parseResponse = _.jsonParse(xdomainrequest.responseText);\n\t callback(parseResponse.error, parseResponse.value);\n\t };\n\t xdomainrequest.open(method, url, true);\n\t xdomainrequest.send(data);\n\t } else {\n\t callback(new Error('Cannot find a method to transport a request'));\n\t }\n\t }\n\t } catch (e2) {\n\t callback(e2);\n\t }\n\t}\n\t\n\tfunction _createXMLHTTPObject() {\n\t /* global ActiveXObject:false */\n\t\n\t var factories = [\n\t function () {\n\t return new XMLHttpRequest();\n\t },\n\t function () {\n\t return new ActiveXObject('Msxml2.XMLHTTP');\n\t },\n\t function () {\n\t return new ActiveXObject('Msxml3.XMLHTTP');\n\t },\n\t function () {\n\t return new ActiveXObject('Microsoft.XMLHTTP');\n\t }\n\t ];\n\t var xmlhttp;\n\t var i;\n\t var numFactories = factories.length;\n\t for (i = 0; i < numFactories; i++) {\n\t /* eslint-disable no-empty */\n\t try {\n\t xmlhttp = factories[i]();\n\t break;\n\t } catch (e) {\n\t // pass\n\t }\n\t /* eslint-enable no-empty */\n\t }\n\t return xmlhttp;\n\t}\n\t\n\tfunction _isSuccess(r) {\n\t return r && r.status && r.status === 200;\n\t}\n\t\n\tfunction _isNormalFailure(r) {\n\t return r && _.isType(r.status, 'number') && r.status >= 400 && r.status < 600;\n\t}\n\t\n\tfunction _newRetriableError(message, code) {\n\t var err = new Error(message);\n\t err.code = code || 'ENOTFOUND';\n\t return err;\n\t}\n\t\n\tmodule.exports = {\n\t get: get,\n\t post: post\n\t};\n\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\t// See https://nodejs.org/docs/latest/api/url.html\n\tfunction parse(url) {\n\t var result = {\n\t protocol: null, auth: null, host: null, path: null,\n\t hash: null, href: url, hostname: null, port: null,\n\t pathname: null, search: null, query: null\n\t };\n\t\n\t var i, last;\n\t i = url.indexOf('//');\n\t if (i !== -1) {\n\t result.protocol = url.substring(0,i);\n\t last = i+2;\n\t } else {\n\t last = 0;\n\t }\n\t \n\t i = url.indexOf('@', last);\n\t if (i !== -1) {\n\t result.auth = url.substring(last, i);\n\t last = i+1;\n\t }\n\t\n\t i = url.indexOf('/', last);\n\t if (i === -1) {\n\t i = url.indexOf('?', last);\n\t if (i === -1) {\n\t i = url.indexOf('#', last);\n\t if (i === -1) {\n\t result.host = url.substring(last);\n\t } else {\n\t result.host = url.substring(last, i);\n\t result.hash = url.substring(i);\n\t }\n\t result.hostname = result.host.split(':')[0];\n\t result.port = result.host.split(':')[1];\n\t if (result.port) {\n\t result.port = parseInt(result.port, 10);\n\t }\n\t return result;\n\t } else {\n\t result.host = url.substring(last, i);\n\t result.hostname = result.host.split(':')[0];\n\t result.port = result.host.split(':')[1];\n\t if (result.port) {\n\t result.port = parseInt(result.port, 10);\n\t }\n\t last = i;\n\t }\n\t } else {\n\t result.host = url.substring(last, i);\n\t result.hostname = result.host.split(':')[0];\n\t result.port = result.host.split(':')[1];\n\t if (result.port) {\n\t result.port = parseInt(result.port, 10);\n\t }\n\t last = i;\n\t }\n\t\n\t i = url.indexOf('#', last);\n\t if (i === -1) {\n\t result.path = url.substring(last);\n\t } else {\n\t result.path = url.substring(last, i);\n\t result.hash = url.substring(i);\n\t }\n\t\n\t if (result.path) {\n\t var pathParts = result.path.split('?');\n\t result.pathname = pathParts[0];\n\t result.query = pathParts[1];\n\t result.search = result.query ? '?' + result.query : null;\n\t }\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t parse: parse\n\t};\n\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\tvar errorParser = __webpack_require__(20);\n\tvar logger = __webpack_require__(13);\n\t\n\tfunction handleItemWithError(item, options, callback) {\n\t item.data = item.data || {};\n\t if (item.err) {\n\t try {\n\t item.stackInfo = item.err._savedStackTrace || errorParser.parse(item.err);\n\t } catch (e)\n\t /* istanbul ignore next */\n\t {\n\t logger.error('Error while parsing the error object.', e);\n\t item.message = item.err.message || item.err.description || item.message || String(item.err);\n\t delete item.err;\n\t }\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction ensureItemHasSomethingToSay(item, options, callback) {\n\t if (!item.message && !item.stackInfo && !item.custom) {\n\t callback(new Error('No message, stack info, or custom data'), null);\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction addBaseInfo(item, options, callback) {\n\t var environment = (options.payload && options.payload.environment) || options.environment;\n\t item.data = _.extend(true, {}, item.data, {\n\t environment: environment,\n\t level: item.level,\n\t endpoint: options.endpoint,\n\t platform: 'browser',\n\t framework: 'browser-js',\n\t language: 'javascript',\n\t server: {},\n\t uuid: item.uuid,\n\t notifier: {\n\t name: 'rollbar-browser-js',\n\t version: options.version\n\t }\n\t });\n\t callback(null, item);\n\t}\n\t\n\tfunction addRequestInfo(window) {\n\t return function(item, options, callback) {\n\t if (!window || !window.location) {\n\t return callback(null, item);\n\t }\n\t var remoteString = '$remote_ip';\n\t if (!options.captureIp) {\n\t remoteString = null;\n\t } else if (options.captureIp !== true) {\n\t remoteString += '_anonymize';\n\t }\n\t _.set(item, 'data.request', {\n\t url: window.location.href,\n\t query_string: window.location.search,\n\t user_ip: remoteString\n\t });\n\t callback(null, item);\n\t };\n\t}\n\t\n\tfunction addClientInfo(window) {\n\t return function(item, options, callback) {\n\t if (!window) {\n\t return callback(null, item);\n\t }\n\t var nav = window.navigator || {};\n\t var scr = window.screen || {};\n\t _.set(item, 'data.client', {\n\t runtime_ms: item.timestamp - window._rollbarStartTime,\n\t timestamp: Math.round(item.timestamp / 1000),\n\t javascript: {\n\t browser: nav.userAgent,\n\t language: nav.language,\n\t cookie_enabled: nav.cookieEnabled,\n\t screen: {\n\t width: scr.width,\n\t height: scr.height\n\t }\n\t }\n\t });\n\t callback(null, item);\n\t };\n\t}\n\t\n\tfunction addPluginInfo(window) {\n\t return function(item, options, callback) {\n\t if (!window || !window.navigator) {\n\t return callback(null, item);\n\t }\n\t var plugins = [];\n\t var navPlugins = window.navigator.plugins || [];\n\t var cur;\n\t for (var i=0, l=navPlugins.length; i < l; ++i) {\n\t cur = navPlugins[i];\n\t plugins.push({name: cur.name, description: cur.description});\n\t }\n\t _.set(item, 'data.client.javascript.plugins', plugins);\n\t callback(null, item);\n\t };\n\t}\n\t\n\tfunction addBody(item, options, callback) {\n\t if (item.stackInfo) {\n\t addBodyTrace(item, options, callback);\n\t } else {\n\t addBodyMessage(item, options, callback);\n\t }\n\t}\n\t\n\tfunction addBodyMessage(item, options, callback) {\n\t var message = item.message;\n\t var custom = item.custom;\n\t\n\t if (!message) {\n\t if (custom) {\n\t var scrubFields = options.scrubFields;\n\t var messageResult = _.stringify(_.scrub(custom, scrubFields));\n\t message = messageResult.error || messageResult.value || '';\n\t } else {\n\t message = '';\n\t }\n\t }\n\t var result = {\n\t body: message\n\t };\n\t\n\t if (custom) {\n\t result.extra = _.extend(true, {}, custom);\n\t }\n\t\n\t _.set(item, 'data.body', {message: result});\n\t callback(null, item);\n\t}\n\t\n\t\n\tfunction addBodyTrace(item, options, callback) {\n\t var description = item.data.description;\n\t var stackInfo = item.stackInfo;\n\t var custom = item.custom;\n\t\n\t var guess = errorParser.guessErrorClass(stackInfo.message);\n\t var className = stackInfo.name || guess[0];\n\t var message = guess[1];\n\t var trace = {\n\t exception: {\n\t 'class': className,\n\t message: message\n\t }\n\t };\n\t\n\t if (description) {\n\t trace.exception.description = description;\n\t }\n\t\n\t // Transform a TraceKit stackInfo object into a Rollbar trace\n\t var stack = stackInfo.stack;\n\t if (stack && stack.length === 0 && item._unhandledStackInfo && item._unhandledStackInfo.stack) {\n\t stack = item._unhandledStackInfo.stack;\n\t }\n\t if (stack) {\n\t if (stack.length === 0) {\n\t trace.exception.stack = stackInfo.rawStack;\n\t trace.exception.raw = String(stackInfo.rawException);\n\t }\n\t var stackFrame;\n\t var frame;\n\t var code;\n\t var pre;\n\t var post;\n\t var contextLength;\n\t var i, mid;\n\t\n\t trace.frames = [];\n\t for (i = 0; i < stack.length; ++i) {\n\t stackFrame = stack[i];\n\t frame = {\n\t filename: stackFrame.url ? _.sanitizeUrl(stackFrame.url) : '(unknown)',\n\t lineno: stackFrame.line || null,\n\t method: (!stackFrame.func || stackFrame.func === '?') ? '[anonymous]' : stackFrame.func,\n\t colno: stackFrame.column\n\t };\n\t if (frame.method && frame.method.endsWith && frame.method.endsWith('_rollbar_wrapped')) {\n\t continue;\n\t }\n\t\n\t code = pre = post = null;\n\t contextLength = stackFrame.context ? stackFrame.context.length : 0;\n\t if (contextLength) {\n\t mid = Math.floor(contextLength / 2);\n\t pre = stackFrame.context.slice(0, mid);\n\t code = stackFrame.context[mid];\n\t post = stackFrame.context.slice(mid);\n\t }\n\t\n\t if (code) {\n\t frame.code = code;\n\t }\n\t\n\t if (pre || post) {\n\t frame.context = {};\n\t if (pre && pre.length) {\n\t frame.context.pre = pre;\n\t }\n\t if (post && post.length) {\n\t frame.context.post = post;\n\t }\n\t }\n\t\n\t if (stackFrame.args) {\n\t frame.args = stackFrame.args;\n\t }\n\t\n\t trace.frames.push(frame);\n\t }\n\t\n\t // NOTE(cory): reverse the frames since rollbar.com expects the most recent call last\n\t trace.frames.reverse();\n\t\n\t if (custom) {\n\t trace.extra = _.extend(true, {}, custom);\n\t }\n\t _.set(item, 'data.body', {trace: trace});\n\t callback(null, item);\n\t } else {\n\t item.message = className + ': ' + message;\n\t addBodyMessage(item, options, callback);\n\t }\n\t}\n\t\n\tfunction scrubPayload(item, options, callback) {\n\t var scrubFields = options.scrubFields;\n\t item.data = _.scrub(item.data, scrubFields);\n\t callback(null, item);\n\t}\n\t\n\tmodule.exports = {\n\t handleItemWithError: handleItemWithError,\n\t ensureItemHasSomethingToSay: ensureItemHasSomethingToSay,\n\t addBaseInfo: addBaseInfo,\n\t addRequestInfo: addRequestInfo,\n\t addClientInfo: addClientInfo,\n\t addPluginInfo: addPluginInfo,\n\t addBody: addBody,\n\t scrubPayload: scrubPayload\n\t};\n\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar ErrorStackParser = __webpack_require__(21);\n\t\n\tvar UNKNOWN_FUNCTION = '?';\n\tvar ERR_CLASS_REGEXP = new RegExp('^(([a-zA-Z0-9-_$ ]*): *)?(Uncaught )?([a-zA-Z0-9-_$ ]*): ');\n\t\n\tfunction guessFunctionName() {\n\t return UNKNOWN_FUNCTION;\n\t}\n\t\n\t\n\tfunction gatherContext() {\n\t return null;\n\t}\n\t\n\t\n\tfunction Frame(stackFrame) {\n\t var data = {};\n\t\n\t data._stackFrame = stackFrame;\n\t\n\t data.url = stackFrame.fileName;\n\t data.line = stackFrame.lineNumber;\n\t data.func = stackFrame.functionName;\n\t data.column = stackFrame.columnNumber;\n\t data.args = stackFrame.args;\n\t\n\t data.context = gatherContext(data.url, data.line);\n\t\n\t return data;\n\t}\n\t\n\t\n\tfunction Stack(exception) {\n\t function getStack() {\n\t var parserStack = [];\n\t var exc;\n\t\n\t if (!exception.stack) {\n\t try {\n\t throw exception;\n\t } catch (e) {\n\t exc = e;\n\t }\n\t } else {\n\t exc = exception;\n\t }\n\t\n\t try {\n\t parserStack = ErrorStackParser.parse(exc);\n\t } catch(e) {\n\t parserStack = [];\n\t }\n\t\n\t var stack = [];\n\t\n\t for (var i = 0; i < parserStack.length; i++) {\n\t stack.push(new Frame(parserStack[i]));\n\t }\n\t\n\t return stack;\n\t }\n\t\n\t return {\n\t stack: getStack(),\n\t message: exception.message,\n\t name: exception.name,\n\t rawStack: exception.stack,\n\t rawException: exception\n\t };\n\t}\n\t\n\t\n\tfunction parse(e) {\n\t return new Stack(e);\n\t}\n\t\n\t\n\tfunction guessErrorClass(errMsg) {\n\t if (!errMsg || !errMsg.match) {\n\t return ['Unknown error. There was no error message to display.', ''];\n\t }\n\t var errClassMatch = errMsg.match(ERR_CLASS_REGEXP);\n\t var errClass = '(unknown)';\n\t\n\t if (errClassMatch) {\n\t errClass = errClassMatch[errClassMatch.length - 1];\n\t errMsg = errMsg.replace((errClassMatch[errClassMatch.length - 2] || '') + errClass + ':', '');\n\t errMsg = errMsg.replace(/(^[\\s]+|[\\s]+$)/g, '');\n\t }\n\t return [errClass, errMsg];\n\t}\n\t\n\t\n\tmodule.exports = {\n\t guessFunctionName: guessFunctionName,\n\t guessErrorClass: guessErrorClass,\n\t gatherContext: gatherContext,\n\t parse: parse,\n\t Stack: Stack,\n\t Frame: Frame\n\t};\n\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (root, factory) {\n\t 'use strict';\n\t // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\t\n\t /* istanbul ignore next */\n\t if (true) {\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(22)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t } else if (typeof exports === 'object') {\n\t module.exports = factory(require('stackframe'));\n\t } else {\n\t root.ErrorStackParser = factory(root.StackFrame);\n\t }\n\t}(this, function ErrorStackParser(StackFrame) {\n\t 'use strict';\n\t\n\t var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n\t var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n\t var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\t\n\t function _map(array, fn, thisArg) {\n\t if (typeof Array.prototype.map === 'function') {\n\t return array.map(fn, thisArg);\n\t } else {\n\t var output = new Array(array.length);\n\t for (var i = 0; i < array.length; i++) {\n\t output[i] = fn.call(thisArg, array[i]);\n\t }\n\t return output;\n\t }\n\t }\n\t\n\t function _filter(array, fn, thisArg) {\n\t if (typeof Array.prototype.filter === 'function') {\n\t return array.filter(fn, thisArg);\n\t } else {\n\t var output = [];\n\t for (var i = 0; i < array.length; i++) {\n\t if (fn.call(thisArg, array[i])) {\n\t output.push(array[i]);\n\t }\n\t }\n\t return output;\n\t }\n\t }\n\t\n\t return {\n\t /**\n\t * Given an Error object, extract the most information from it.\n\t * @param error {Error}\n\t * @return Array[StackFrame]\n\t */\n\t parse: function ErrorStackParser$$parse(error) {\n\t if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n\t return this.parseOpera(error);\n\t } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n\t return this.parseV8OrIE(error);\n\t } else if (error.stack) {\n\t return this.parseFFOrSafari(error);\n\t } else {\n\t throw new Error('Cannot parse given Error object');\n\t }\n\t },\n\t\n\t /**\n\t * Separate line and column numbers from a URL-like string.\n\t * @param urlLike String\n\t * @return Array[String]\n\t */\n\t extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n\t // Fail-fast but return locations like \"(native)\"\n\t if (urlLike.indexOf(':') === -1) {\n\t return [urlLike];\n\t }\n\t\n\t var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n\t var lastNumber = locationParts.pop();\n\t var possibleNumber = locationParts[locationParts.length - 1];\n\t if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n\t var lineNumber = locationParts.pop();\n\t return [locationParts.join(':'), lineNumber, lastNumber];\n\t } else {\n\t return [locationParts.join(':'), lastNumber, undefined];\n\t }\n\t },\n\t\n\t parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n\t var filtered = _filter(error.stack.split('\\n'), function (line) {\n\t return !!line.match(CHROME_IE_STACK_REGEXP);\n\t }, this);\n\t\n\t return _map(filtered, function (line) {\n\t if (line.indexOf('(eval ') > -1) {\n\t // Throw away eval information until we implement stacktrace.js/stackframe#8\n\t line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n\t }\n\t var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n\t var locationParts = this.extractLocation(tokens.pop());\n\t var functionName = tokens.join(' ') || undefined;\n\t var fileName = locationParts[0] === 'eval' ? undefined : locationParts[0];\n\t\n\t return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n\t }, this);\n\t },\n\t\n\t parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n\t var filtered = _filter(error.stack.split('\\n'), function (line) {\n\t return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n\t }, this);\n\t\n\t return _map(filtered, function (line) {\n\t // Throw away eval information until we implement stacktrace.js/stackframe#8\n\t if (line.indexOf(' > eval') > -1) {\n\t line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n\t }\n\t\n\t if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n\t // Safari eval frames only have function names and nothing else\n\t return new StackFrame(line);\n\t } else {\n\t var tokens = line.split('@');\n\t var locationParts = this.extractLocation(tokens.pop());\n\t var functionName = tokens.shift() || undefined;\n\t return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n\t }\n\t }, this);\n\t },\n\t\n\t parseOpera: function ErrorStackParser$$parseOpera(e) {\n\t if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n\t e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n\t return this.parseOpera9(e);\n\t } else if (!e.stack) {\n\t return this.parseOpera10(e);\n\t } else {\n\t return this.parseOpera11(e);\n\t }\n\t },\n\t\n\t parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n\t var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n\t var lines = e.message.split('\\n');\n\t var result = [];\n\t\n\t for (var i = 2, len = lines.length; i < len; i += 2) {\n\t var match = lineRE.exec(lines[i]);\n\t if (match) {\n\t result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n\t }\n\t }\n\t\n\t return result;\n\t },\n\t\n\t parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n\t var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n\t var lines = e.stacktrace.split('\\n');\n\t var result = [];\n\t\n\t for (var i = 0, len = lines.length; i < len; i += 2) {\n\t var match = lineRE.exec(lines[i]);\n\t if (match) {\n\t result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n\t }\n\t }\n\t\n\t return result;\n\t },\n\t\n\t // Opera 10.65+ Error.stack very similar to FF/Safari\n\t parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n\t var filtered = _filter(error.stack.split('\\n'), function (line) {\n\t return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n\t !line.match(/^Error created at/);\n\t }, this);\n\t\n\t return _map(filtered, function (line) {\n\t var tokens = line.split('@');\n\t var locationParts = this.extractLocation(tokens.pop());\n\t var functionCall = (tokens.shift() || '');\n\t var functionName = functionCall\n\t .replace(//, '$2')\n\t .replace(/\\([^\\)]*\\)/g, '') || undefined;\n\t var argsRaw;\n\t if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n\t argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n\t }\n\t var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n\t return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n\t }, this);\n\t }\n\t };\n\t}));\n\t\n\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (root, factory) {\n\t 'use strict';\n\t // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\t\n\t /* istanbul ignore next */\n\t if (true) {\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t } else if (typeof exports === 'object') {\n\t module.exports = factory();\n\t } else {\n\t root.StackFrame = factory();\n\t }\n\t}(this, function () {\n\t 'use strict';\n\t function _isNumber(n) {\n\t return !isNaN(parseFloat(n)) && isFinite(n);\n\t }\n\t\n\t function StackFrame(functionName, args, fileName, lineNumber, columnNumber, source) {\n\t if (functionName !== undefined) {\n\t this.setFunctionName(functionName);\n\t }\n\t if (args !== undefined) {\n\t this.setArgs(args);\n\t }\n\t if (fileName !== undefined) {\n\t this.setFileName(fileName);\n\t }\n\t if (lineNumber !== undefined) {\n\t this.setLineNumber(lineNumber);\n\t }\n\t if (columnNumber !== undefined) {\n\t this.setColumnNumber(columnNumber);\n\t }\n\t if (source !== undefined) {\n\t this.setSource(source);\n\t }\n\t }\n\t\n\t StackFrame.prototype = {\n\t getFunctionName: function () {\n\t return this.functionName;\n\t },\n\t setFunctionName: function (v) {\n\t this.functionName = String(v);\n\t },\n\t\n\t getArgs: function () {\n\t return this.args;\n\t },\n\t setArgs: function (v) {\n\t if (Object.prototype.toString.call(v) !== '[object Array]') {\n\t throw new TypeError('Args must be an Array');\n\t }\n\t this.args = v;\n\t },\n\t\n\t // NOTE: Property name may be misleading as it includes the path,\n\t // but it somewhat mirrors V8's JavaScriptStackTraceApi\n\t // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's\n\t // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14\n\t getFileName: function () {\n\t return this.fileName;\n\t },\n\t setFileName: function (v) {\n\t this.fileName = String(v);\n\t },\n\t\n\t getLineNumber: function () {\n\t return this.lineNumber;\n\t },\n\t setLineNumber: function (v) {\n\t if (!_isNumber(v)) {\n\t throw new TypeError('Line Number must be a Number');\n\t }\n\t this.lineNumber = Number(v);\n\t },\n\t\n\t getColumnNumber: function () {\n\t return this.columnNumber;\n\t },\n\t setColumnNumber: function (v) {\n\t if (!_isNumber(v)) {\n\t throw new TypeError('Column Number must be a Number');\n\t }\n\t this.columnNumber = Number(v);\n\t },\n\t\n\t getSource: function () {\n\t return this.source;\n\t },\n\t setSource: function (v) {\n\t this.source = String(v);\n\t },\n\t\n\t toString: function() {\n\t var functionName = this.getFunctionName() || '{anonymous}';\n\t var args = '(' + (this.getArgs() || []).join(',') + ')';\n\t var fileName = this.getFileName() ? ('@' + this.getFileName()) : '';\n\t var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : '';\n\t var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : '';\n\t return functionName + args + fileName + lineNumber + columnNumber;\n\t }\n\t };\n\t\n\t return StackFrame;\n\t}));\n\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\t\n\tfunction itemToPayload(item, options, callback) {\n\t var payloadOptions = options.payload || {};\n\t if (payloadOptions.body) {\n\t delete payloadOptions.body;\n\t }\n\t\n\t var data = _.extend(true, {}, item.data, payloadOptions);\n\t if (item._isUncaught) {\n\t data._isUncaught = true;\n\t }\n\t if (item._originalArgs) {\n\t data._originalArgs = item._originalArgs;\n\t }\n\t callback(null, data);\n\t}\n\t\n\tfunction addTelemetryData(item, options, callback) {\n\t if (item.telemetryEvents) {\n\t _.set(item, 'data.body.telemetry', item.telemetryEvents);\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction addMessageWithError(item, options, callback) {\n\t if (!item.message) {\n\t callback(null, item);\n\t return;\n\t }\n\t var tracePath = 'data.body.trace_chain.0';\n\t var trace = _.get(item, tracePath);\n\t if (!trace) {\n\t tracePath = 'data.body.trace';\n\t trace = _.get(item, tracePath);\n\t }\n\t if (trace) {\n\t if (!(trace.exception && trace.exception.description)) {\n\t _.set(item, tracePath+'.exception.description', item.message);\n\t callback(null, item);\n\t return;\n\t }\n\t var extra = _.get(item, tracePath+'.extra') || {};\n\t var newExtra = _.extend(true, {}, extra, {message: item.message});\n\t _.set(item, tracePath+'.extra', newExtra);\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction userTransform(logger) {\n\t return function(item, options, callback) {\n\t var newItem = _.extend(true, {}, item);\n\t try {\n\t if (_.isFunction(options.transform)) {\n\t options.transform(newItem.data);\n\t }\n\t } catch (e) {\n\t options.transform = null;\n\t logger.error('Error while calling custom transform() function. Removing custom transform().', e);\n\t callback(null, item);\n\t return;\n\t }\n\t callback(null, newItem);\n\t }\n\t}\n\t\n\tfunction addConfigToPayload(item, options, callback) {\n\t if (!options.sendConfig) {\n\t return callback(null, item);\n\t }\n\t var configKey = '_rollbarConfig';\n\t var custom = _.get(item, 'data.custom') || {};\n\t custom[configKey] = options;\n\t item.data.custom = custom;\n\t callback(null, item);\n\t}\n\t\n\tmodule.exports = {\n\t itemToPayload: itemToPayload,\n\t addTelemetryData: addTelemetryData,\n\t addMessageWithError: addMessageWithError,\n\t userTransform: userTransform,\n\t addConfigToPayload: addConfigToPayload\n\t};\n\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\t\n\tfunction checkIgnore(item, settings) {\n\t if (_.get(settings, 'plugins.jquery.ignoreAjaxErrors')) {\n\t return !_.get(item, 'body.message.extra.isAjax');\n\t }\n\t return true;\n\t}\n\t\n\tmodule.exports = {\n\t checkIgnore: checkIgnore\n\t};\n\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\t\n\tfunction checkLevel(item, settings) {\n\t var level = item.level;\n\t var levelVal = _.LEVELS[level] || 0;\n\t var reportLevel = settings.reportLevel;\n\t var reportLevelVal = _.LEVELS[reportLevel] || 0;\n\t\n\t if (levelVal < reportLevelVal) {\n\t return false;\n\t }\n\t return true;\n\t}\n\t\n\tfunction userCheckIgnore(logger) {\n\t return function(item, settings) {\n\t var isUncaught = !!item._isUncaught;\n\t delete item._isUncaught;\n\t var args = item._originalArgs;\n\t delete item._originalArgs;\n\t try {\n\t if (_.isFunction(settings.onSendCallback)) {\n\t settings.onSendCallback(isUncaught, args, item);\n\t }\n\t } catch (e) {\n\t settings.onSendCallback = null;\n\t logger.error('Error while calling onSendCallback, removing', e);\n\t }\n\t try {\n\t if (_.isFunction(settings.checkIgnore) && settings.checkIgnore(isUncaught, args, item)) {\n\t return false;\n\t }\n\t } catch (e) {\n\t settings.checkIgnore = null;\n\t logger.error('Error while calling custom checkIgnore(), removing', e);\n\t }\n\t return true;\n\t }\n\t}\n\t\n\tfunction urlIsNotBlacklisted(logger) {\n\t return function(item, settings) {\n\t return !urlIsOnAList(item, settings, 'blacklist', logger);\n\t }\n\t}\n\t\n\tfunction urlIsWhitelisted(logger) {\n\t return function(item, settings) {\n\t return urlIsOnAList(item, settings, 'whitelist', logger);\n\t }\n\t}\n\t\n\tfunction urlIsOnAList(item, settings, whiteOrBlack, logger) {\n\t // whitelist is the default\n\t var black = false;\n\t if (whiteOrBlack === 'blacklist') {\n\t black = true;\n\t }\n\t var list, trace, frame, filename, frameLength, url, listLength, urlRegex;\n\t var i, j;\n\t\n\t try {\n\t list = black ? settings.hostBlackList : settings.hostWhiteList;\n\t listLength = list && list.length;\n\t trace = _.get(item, 'body.trace');\n\t\n\t // These two checks are important to come first as they are defaults\n\t // in case the list is missing or the trace is missing or not well-formed\n\t if (!list || listLength === 0) {\n\t return !black;\n\t }\n\t if (!trace || !trace.frames || trace.frames.length === 0) {\n\t return !black;\n\t }\n\t\n\t frameLength = trace.frames.length;\n\t for (i = 0; i < frameLength; i++) {\n\t frame = trace.frames[i];\n\t filename = frame.filename;\n\t\n\t if (!_.isType(filename, 'string')) {\n\t return !black;\n\t }\n\t\n\t for (j = 0; j < listLength; j++) {\n\t url = list[j];\n\t urlRegex = new RegExp(url);\n\t\n\t if (urlRegex.test(filename)) {\n\t return true;\n\t }\n\t }\n\t }\n\t } catch (e)\n\t /* istanbul ignore next */\n\t {\n\t if (black) {\n\t settings.hostBlackList = null;\n\t } else {\n\t settings.hostWhiteList = null;\n\t }\n\t var listName = black ? 'hostBlackList' : 'hostWhiteList';\n\t logger.error('Error while reading your configuration\\'s ' + listName + ' option. Removing custom ' + listName + '.', e);\n\t return !black;\n\t }\n\t return false;\n\t}\n\t\n\tfunction messageIsIgnored(logger) {\n\t return function(item, settings) {\n\t var exceptionMessage, i, ignoredMessages,\n\t len, messageIsIgnored, rIgnoredMessage,\n\t body, traceMessage, bodyMessage;\n\t\n\t try {\n\t messageIsIgnored = false;\n\t ignoredMessages = settings.ignoredMessages;\n\t\n\t if (!ignoredMessages || ignoredMessages.length === 0) {\n\t return true;\n\t }\n\t\n\t body = item.body;\n\t traceMessage = _.get(body, 'trace.exception.message');\n\t bodyMessage = _.get(body, 'message.body');\n\t\n\t exceptionMessage = traceMessage || bodyMessage;\n\t\n\t if (!exceptionMessage){\n\t return true;\n\t }\n\t\n\t len = ignoredMessages.length;\n\t for (i = 0; i < len; i++) {\n\t rIgnoredMessage = new RegExp(ignoredMessages[i], 'gi');\n\t messageIsIgnored = rIgnoredMessage.test(exceptionMessage);\n\t\n\t if (messageIsIgnored) {\n\t break;\n\t }\n\t }\n\t } catch(e)\n\t /* istanbul ignore next */\n\t {\n\t settings.ignoredMessages = null;\n\t logger.error('Error while reading your configuration\\'s ignoredMessages option. Removing custom ignoredMessages.');\n\t }\n\t\n\t return !messageIsIgnored;\n\t }\n\t}\n\t\n\tmodule.exports = {\n\t checkLevel: checkLevel,\n\t userCheckIgnore: userCheckIgnore,\n\t urlIsNotBlacklisted: urlIsNotBlacklisted,\n\t urlIsWhitelisted: urlIsWhitelisted,\n\t messageIsIgnored: messageIsIgnored\n\t};\n\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\tvar urlparser = __webpack_require__(18);\n\tvar domUtil = __webpack_require__(27);\n\t\n\tvar defaults = {\n\t network: true,\n\t networkResponseHeaders: false,\n\t networkResponseBody: false,\n\t networkRequestBody: false,\n\t log: true,\n\t dom: true,\n\t navigation: true,\n\t connectivity: true\n\t};\n\t\n\tfunction replace(obj, name, replacement, replacements, type) {\n\t var orig = obj[name];\n\t obj[name] = replacement(orig);\n\t if (replacements) {\n\t replacements[type].push([obj, name, orig]);\n\t }\n\t}\n\t\n\tfunction restore(replacements, type) {\n\t var b;\n\t while (replacements[type].length) {\n\t b = replacements[type].shift();\n\t b[0][b[1]] = b[2];\n\t }\n\t}\n\t\n\tfunction Instrumenter(options, telemeter, rollbar, _window, _document) {\n\t var autoInstrument = options.autoInstrument;\n\t if (options.enabled === false || autoInstrument === false) {\n\t this.autoInstrument = {};\n\t } else {\n\t if (!_.isType(autoInstrument, 'object')) {\n\t autoInstrument = defaults;\n\t }\n\t this.autoInstrument = _.extend(true, {}, defaults, autoInstrument);\n\t }\n\t this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n\t this.telemetryScrubber = options.telemetryScrubber;\n\t this.telemeter = telemeter;\n\t this.rollbar = rollbar;\n\t this._window = _window || {};\n\t this._document = _document || {};\n\t this.replacements = {\n\t network: [],\n\t log: [],\n\t navigation: [],\n\t connectivity: []\n\t };\n\t this.eventRemovers = {\n\t dom: [],\n\t connectivity: []\n\t };\n\t\n\t this._location = this._window.location;\n\t this._lastHref = this._location && this._location.href;\n\t}\n\t\n\tInstrumenter.prototype.configure = function(options) {\n\t var autoInstrument = options.autoInstrument;\n\t var oldSettings = _.extend(true, {}, this.autoInstrument);\n\t if (options.enabled === false || autoInstrument === false) {\n\t this.autoInstrument = {};\n\t } else {\n\t if (!_.isType(autoInstrument, 'object')) {\n\t autoInstrument = defaults;\n\t }\n\t this.autoInstrument = _.extend(true, {}, defaults, autoInstrument);\n\t }\n\t this.instrument(oldSettings);\n\t if (options.scrubTelemetryInputs !== undefined) {\n\t this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n\t }\n\t if (options.telemetryScrubber !== undefined) {\n\t this.telemetryScrubber = options.telemetryScrubber;\n\t }\n\t};\n\t\n\tInstrumenter.prototype.instrument = function(oldSettings) {\n\t if (this.autoInstrument.network && !(oldSettings && oldSettings.network)) {\n\t this.instrumentNetwork();\n\t } else if (!this.autoInstrument.network && oldSettings && oldSettings.network) {\n\t this.deinstrumentNetwork();\n\t }\n\t\n\t if (this.autoInstrument.log && !(oldSettings && oldSettings.log)) {\n\t this.instrumentConsole();\n\t } else if (!this.autoInstrument.log && oldSettings && oldSettings.log) {\n\t this.deinstrumentConsole();\n\t }\n\t\n\t if (this.autoInstrument.dom && !(oldSettings && oldSettings.dom)) {\n\t this.instrumentDom();\n\t } else if (!this.autoInstrument.dom && oldSettings && oldSettings.dom) {\n\t this.deinstrumentDom();\n\t }\n\t\n\t if (this.autoInstrument.navigation && !(oldSettings && oldSettings.navigation)) {\n\t this.instrumentNavigation();\n\t } else if (!this.autoInstrument.navigation && oldSettings && oldSettings.navigation) {\n\t this.deinstrumentNavigation();\n\t }\n\t\n\t if (this.autoInstrument.connectivity && !(oldSettings && oldSettings.connectivity)) {\n\t this.instrumentConnectivity();\n\t } else if (!this.autoInstrument.connectivity && oldSettings && oldSettings.connectivity) {\n\t this.deinstrumentConnectivity();\n\t }\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentNetwork = function() {\n\t restore(this.replacements, 'network');\n\t};\n\t\n\tInstrumenter.prototype.instrumentNetwork = function() {\n\t var self = this;\n\t\n\t function wrapProp(prop, xhr) {\n\t if (prop in xhr && _.isFunction(xhr[prop])) {\n\t replace(xhr, prop, function(orig) {\n\t return self.rollbar.wrap(orig);\n\t });\n\t }\n\t }\n\t\n\t if ('XMLHttpRequest' in this._window) {\n\t var xhrp = this._window.XMLHttpRequest.prototype;\n\t replace(xhrp, 'open', function(orig) {\n\t return function(method, url) {\n\t if (_.isType(url, 'string')) {\n\t this.__rollbar_xhr = {\n\t method: method,\n\t url: url,\n\t status_code: null,\n\t start_time_ms: _.now(),\n\t end_time_ms: null\n\t };\n\t }\n\t return orig.apply(this, arguments);\n\t };\n\t }, this.replacements, 'network');\n\t\n\t replace(xhrp, 'send', function(orig) {\n\t /* eslint-disable no-unused-vars */\n\t return function(data) {\n\t /* eslint-enable no-unused-vars */\n\t var xhr = this;\n\t\n\t function onreadystatechangeHandler() {\n\t if (xhr.__rollbar_xhr && (xhr.readyState === 1 || xhr.readyState === 4)) {\n\t if (xhr.__rollbar_xhr.status_code === null) {\n\t xhr.__rollbar_xhr.status_code = 0;\n\t var requestData = null;\n\t if (self.autoInstrument.networkRequestBody) {\n\t requestData = data;\n\t }\n\t xhr.__rollbar_event = self.telemeter.captureNetwork(xhr.__rollbar_xhr, 'xhr', undefined, requestData);\n\t }\n\t if (xhr.readyState === 1) {\n\t xhr.__rollbar_xhr.start_time_ms = _.now();\n\t } else {\n\t xhr.__rollbar_xhr.end_time_ms = _.now();\n\t\n\t var headers = null;\n\t if (self.autoInstrument.networkResponseHeaders) {\n\t var headersConfig = self.autoInstrument.networkResponseHeaders;\n\t headers = {};\n\t try {\n\t var header, i;\n\t if (headersConfig === true) {\n\t var allHeaders = xhr.getAllResponseHeaders();\n\t if (allHeaders) {\n\t var arr = allHeaders.trim().split(/[\\r\\n]+/);\n\t var parts, value;\n\t for (i=0; i < arr.length; i++) {\n\t parts = arr[i].split(': ');\n\t header = parts.shift();\n\t value = parts.join(': ');\n\t headers[header] = value;\n\t }\n\t }\n\t } else {\n\t for (i=0; i < headersConfig.length; i++) {\n\t header = headersConfig[i];\n\t headers[header] = xhr.getResponseHeader(header);\n\t }\n\t }\n\t } catch (e) {\n\t /* we ignore the errors here that could come from different\n\t * browser issues with the xhr methods */\n\t }\n\t }\n\t var body = null;\n\t if (self.autoInstrument.networkResponseBody) {\n\t try {\n\t body = xhr.responseText;\n\t } catch (e) {\n\t /* ignore errors from reading responseText */\n\t }\n\t }\n\t var response = null;\n\t if (body || headers) {\n\t response = {};\n\t if (body) {\n\t response.body = body;\n\t }\n\t if (headers) {\n\t response.headers = headers;\n\t }\n\t }\n\t if (response) {\n\t xhr.__rollbar_xhr.response = response;\n\t }\n\t }\n\t try {\n\t var code = xhr.status;\n\t code = code === 1223 ? 204 : code;\n\t xhr.__rollbar_xhr.status_code = code;\n\t xhr.__rollbar_event.level = self.telemeter.levelFromStatus(code);\n\t } catch (e) {\n\t /* ignore possible exception from xhr.status */\n\t }\n\t }\n\t }\n\t\n\t wrapProp('onload', xhr);\n\t wrapProp('onerror', xhr);\n\t wrapProp('onprogress', xhr);\n\t\n\t if ('onreadystatechange' in xhr && _.isFunction(xhr.onreadystatechange)) {\n\t replace(xhr, 'onreadystatechange', function(orig) {\n\t return self.rollbar.wrap(orig, undefined, onreadystatechangeHandler);\n\t });\n\t } else {\n\t xhr.onreadystatechange = onreadystatechangeHandler;\n\t }\n\t return orig.apply(this, arguments);\n\t }\n\t }, this.replacements, 'network');\n\t }\n\t\n\t if ('fetch' in this._window) {\n\t replace(this._window, 'fetch', function(orig) {\n\t /* eslint-disable no-unused-vars */\n\t return function(fn, t) {\n\t /* eslint-enable no-unused-vars */\n\t var args = new Array(arguments.length);\n\t for (var i=0, len=args.length; i < len; i++) {\n\t args[i] = arguments[i];\n\t }\n\t var input = args[0];\n\t var method = 'GET';\n\t var url;\n\t if (_.isType(input, 'string')) {\n\t url = input;\n\t } else if (input) {\n\t url = input.url;\n\t if (input.method) {\n\t method = input.method;\n\t }\n\t }\n\t if (args[1] && args[1].method) {\n\t method = args[1].method;\n\t }\n\t var metadata = {\n\t method: method,\n\t url: url,\n\t status_code: null,\n\t start_time_ms: _.now(),\n\t end_time_ms: null\n\t };\n\t var requestData = null;\n\t if (self.autoInstrument.networkRequestBody) {\n\t if (args[1] && args[1].body) {\n\t requestData = args[1].body;\n\t } else if (args[0] && !_.isType(args[0], 'string') && args[0].body) {\n\t requestData = args[0].body;\n\t }\n\t }\n\t self.telemeter.captureNetwork(metadata, 'fetch', undefined, requestData);\n\t return orig.apply(this, args).then(function (resp) {\n\t metadata.end_time_ms = _.now();\n\t metadata.status_code = resp.status;\n\t var headers = null;\n\t if (self.autoInstrument.networkResponseHeaders) {\n\t var headersConfig = self.autoInstrument.networkResponseHeaders;\n\t headers = {};\n\t try {\n\t if (headersConfig === true) {\n\t // This is unsupported in IE so we can't do it\n\t /*\n\t var allHeaders = resp.headers.entries();\n\t for (var pair of allHeaders) {\n\t headers[pair[0]] = pair[1];\n\t }\n\t */\n\t } else {\n\t for (var i=0; i < headersConfig.length; i++) {\n\t var header = headersConfig[i];\n\t headers[header] = resp.headers.get(header);\n\t }\n\t }\n\t } catch (e) {\n\t /* ignore probable IE errors */\n\t }\n\t }\n\t var response = null;\n\t if (headers) {\n\t response = {\n\t headers: headers\n\t };\n\t }\n\t if (response) {\n\t metadata.response = response;\n\t }\n\t return resp;\n\t });\n\t };\n\t }, this.replacements, 'network');\n\t }\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentConsole = function() {\n\t if (!('console' in this._window && this._window.console.log)) {\n\t return;\n\t }\n\t var b;\n\t while (this.replacements['log'].length) {\n\t b = this.replacements['log'].shift();\n\t this._window.console[b[0]] = b[1];\n\t }\n\t};\n\t\n\tInstrumenter.prototype.instrumentConsole = function() {\n\t if (!('console' in this._window && this._window.console.log)) {\n\t return;\n\t }\n\t\n\t var self = this;\n\t var c = this._window.console;\n\t\n\t function wrapConsole(method) {\n\t var orig = c[method];\n\t var origConsole = c;\n\t var level = method === 'warn' ? 'warning' : method;\n\t c[method] = function() {\n\t var args = Array.prototype.slice.call(arguments);\n\t var message = _.formatArgsAsString(args);\n\t self.telemeter.captureLog(message, level);\n\t if (orig) {\n\t Function.prototype.apply.call(orig, origConsole, args);\n\t }\n\t };\n\t self.replacements['log'].push([method, orig]);\n\t }\n\t var methods = ['debug','info','warn','error','log'];\n\t for (var i=0, len=methods.length; i < len; i++) {\n\t wrapConsole(methods[i]);\n\t }\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentDom = function() {\n\t if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n\t return;\n\t }\n\t this.removeListeners('dom');\n\t};\n\t\n\tInstrumenter.prototype.instrumentDom = function() {\n\t if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n\t return;\n\t }\n\t var clickHandler = this.handleClick.bind(this);\n\t var blurHandler = this.handleBlur.bind(this);\n\t this.addListener('dom', this._window, 'click', 'onclick', clickHandler, true);\n\t this.addListener('dom', this._window, 'blur', 'onfocusout', blurHandler, true);\n\t};\n\t\n\tInstrumenter.prototype.handleClick = function(evt) {\n\t try {\n\t var e = domUtil.getElementFromEvent(evt, this._document);\n\t var hasTag = e && e.tagName;\n\t var anchorOrButton = domUtil.isDescribedElement(e, 'a') || domUtil.isDescribedElement(e, 'button');\n\t if (hasTag && (anchorOrButton || domUtil.isDescribedElement(e, 'input', ['button', 'submit']))) {\n\t this.captureDomEvent('click', e);\n\t } else if (domUtil.isDescribedElement(e, 'input', ['checkbox', 'radio'])) {\n\t this.captureDomEvent('input', e, e.value, e.checked);\n\t }\n\t } catch (exc) {\n\t // TODO: Not sure what to do here\n\t }\n\t};\n\t\n\tInstrumenter.prototype.handleBlur = function(evt) {\n\t try {\n\t var e = domUtil.getElementFromEvent(evt, this._document);\n\t if (e && e.tagName) {\n\t if (domUtil.isDescribedElement(e, 'textarea')) {\n\t this.captureDomEvent('input', e, e.value);\n\t } else if (domUtil.isDescribedElement(e, 'select') && e.options && e.options.length) {\n\t this.handleSelectInputChanged(e);\n\t } else if (domUtil.isDescribedElement(e, 'input') && !domUtil.isDescribedElement(e, 'input', ['button', 'submit', 'hidden', 'checkbox', 'radio'])) {\n\t this.captureDomEvent('input', e, e.value);\n\t }\n\t }\n\t } catch (exc) {\n\t // TODO: Not sure what to do here\n\t }\n\t};\n\t\n\tInstrumenter.prototype.handleSelectInputChanged = function(elem) {\n\t if (elem.multiple) {\n\t for (var i = 0; i < elem.options.length; i++) {\n\t if (elem.options[i].selected) {\n\t this.captureDomEvent('input', elem, elem.options[i].value);\n\t }\n\t }\n\t } else if (elem.selectedIndex >= 0 && elem.options[elem.selectedIndex]) {\n\t this.captureDomEvent('input', elem, elem.options[elem.selectedIndex].value);\n\t }\n\t};\n\t\n\tInstrumenter.prototype.captureDomEvent = function(subtype, element, value, isChecked) {\n\t if (value !== undefined) {\n\t if (this.scrubTelemetryInputs || (domUtil.getElementType(element) === 'password')) {\n\t value = '[scrubbed]';\n\t } else if (this.telemetryScrubber) {\n\t var description = domUtil.describeElement(element);\n\t if (this.telemetryScrubber(description)) {\n\t value = '[scrubbed]';\n\t }\n\t }\n\t }\n\t var elementString = domUtil.elementArrayToString(domUtil.treeToArray(element));\n\t this.telemeter.captureDom(subtype, elementString, value, isChecked);\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentNavigation = function() {\n\t var chrome = this._window.chrome;\n\t var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n\t // See https://github.com/angular/angular.js/pull/13945/files\n\t var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n\t if (!hasPushState) {\n\t return;\n\t }\n\t restore(this.replacements, 'navigation');\n\t};\n\t\n\tInstrumenter.prototype.instrumentNavigation = function() {\n\t var chrome = this._window.chrome;\n\t var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n\t // See https://github.com/angular/angular.js/pull/13945/files\n\t var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n\t if (!hasPushState) {\n\t return;\n\t }\n\t var self = this;\n\t replace(this._window, 'onpopstate', function(orig) {\n\t return function() {\n\t var current = self._location.href;\n\t self.handleUrlChange(self._lastHref, current);\n\t if (orig) {\n\t orig.apply(this, arguments);\n\t }\n\t };\n\t }, this.replacements, 'navigation');\n\t\n\t replace(this._window.history, 'pushState', function(orig) {\n\t return function() {\n\t var url = arguments.length > 2 ? arguments[2] : undefined;\n\t if (url) {\n\t self.handleUrlChange(self._lastHref, url + '');\n\t }\n\t return orig.apply(this, arguments);\n\t };\n\t }, this.replacements, 'navigation');\n\t};\n\t\n\tInstrumenter.prototype.handleUrlChange = function(from, to) {\n\t var parsedHref = urlparser.parse(this._location.href);\n\t var parsedTo = urlparser.parse(to);\n\t var parsedFrom = urlparser.parse(from);\n\t this._lastHref = to;\n\t if (parsedHref.protocol === parsedTo.protocol && parsedHref.host === parsedTo.host) {\n\t to = parsedTo.path + (parsedTo.hash || '');\n\t }\n\t if (parsedHref.protocol === parsedFrom.protocol && parsedHref.host === parsedFrom.host) {\n\t from = parsedFrom.path + (parsedFrom.hash || '');\n\t }\n\t this.telemeter.captureNavigation(from, to);\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentConnectivity = function() {\n\t if (!('addEventListener' in this._window || 'body' in this._document)) {\n\t return;\n\t }\n\t if (this._window.addEventListener) {\n\t this.removeListeners('connectivity');\n\t } else {\n\t restore(this.replacements, 'connectivity');\n\t }\n\t};\n\t\n\tInstrumenter.prototype.instrumentConnectivity = function() {\n\t if (!('addEventListener' in this._window || 'body' in this._document)) {\n\t return;\n\t }\n\t if (this._window.addEventListener) {\n\t this.addListener('connectivity', this._window, 'online', undefined, function() {\n\t this.telemeter.captureConnectivityChange('online');\n\t }.bind(this), true);\n\t this.addListener('connectivity', this._window, 'offline', undefined, function() {\n\t this.telemeter.captureConnectivityChange('offline');\n\t }.bind(this), true);\n\t } else {\n\t var self = this;\n\t replace(this._document.body, 'ononline', function(orig) {\n\t return function() {\n\t self.telemeter.captureConnectivityChange('online');\n\t if (orig) {\n\t orig.apply(this, arguments);\n\t }\n\t }\n\t }, this.replacements, 'connectivity');\n\t replace(this._document.body, 'onoffline', function(orig) {\n\t return function() {\n\t self.telemeter.captureConnectivityChange('offline');\n\t if (orig) {\n\t orig.apply(this, arguments);\n\t }\n\t }\n\t }, this.replacements, 'connectivity');\n\t }\n\t};\n\t\n\tInstrumenter.prototype.addListener = function(section, obj, type, altType, handler, capture) {\n\t if (obj.addEventListener) {\n\t obj.addEventListener(type, handler, capture);\n\t this.eventRemovers[section].push(function() {\n\t obj.removeEventListener(type, handler, capture);\n\t });\n\t } else if (altType) {\n\t obj.attachEvent(altType, handler);\n\t this.eventRemovers[section].push(function() {\n\t obj.detachEvent(altType, handler);\n\t });\n\t }\n\t};\n\t\n\tInstrumenter.prototype.removeListeners = function(section) {\n\t var r;\n\t while (this.eventRemovers[section].length) {\n\t r = this.eventRemovers[section].shift();\n\t r();\n\t }\n\t};\n\t\n\tmodule.exports = Instrumenter;\n\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tfunction getElementType(e) {\n\t return (e.getAttribute('type') || '').toLowerCase();\n\t}\n\t\n\tfunction isDescribedElement(element, type, subtypes) {\n\t if (element.tagName.toLowerCase() !== type.toLowerCase()) {\n\t return false;\n\t }\n\t if (!subtypes) {\n\t return true;\n\t }\n\t element = getElementType(element);\n\t for (var i = 0; i < subtypes.length; i++) {\n\t if (subtypes[i] === element) {\n\t return true;\n\t }\n\t }\n\t return false;\n\t}\n\t\n\tfunction getElementFromEvent(evt, doc) {\n\t if (evt.target) {\n\t return evt.target;\n\t }\n\t if (doc && doc.elementFromPoint) {\n\t return doc.elementFromPoint(evt.clientX, evt.clientY);\n\t }\n\t return undefined;\n\t}\n\t\n\tfunction treeToArray(elem) {\n\t var MAX_HEIGHT = 5;\n\t var out = [];\n\t var nextDescription;\n\t for (var height = 0; elem && height < MAX_HEIGHT; height++) {\n\t nextDescription = describeElement(elem);\n\t if (nextDescription.tagName === 'html') {\n\t break;\n\t }\n\t out.unshift(nextDescription);\n\t elem = elem.parentNode;\n\t }\n\t return out;\n\t}\n\t\n\tfunction elementArrayToString(a) {\n\t var MAX_LENGTH = 80;\n\t var separator = ' > ', separatorLength = separator.length;\n\t var out = [], len = 0, nextStr, totalLength;\n\t\n\t for (var i = a.length - 1; i >= 0; i--) {\n\t nextStr = descriptionToString(a[i]);\n\t totalLength = len + (out.length * separatorLength) + nextStr.length;\n\t if (i < a.length - 1 && totalLength >= MAX_LENGTH + 3) {\n\t out.unshift('...');\n\t break;\n\t }\n\t out.unshift(nextStr);\n\t len += nextStr.length;\n\t }\n\t return out.join(separator);\n\t}\n\t\n\tfunction descriptionToString(desc) {\n\t if (!desc || !desc.tagName) {\n\t return '';\n\t }\n\t var out = [desc.tagName];\n\t if (desc.id) {\n\t out.push('#' + desc.id);\n\t }\n\t if (desc.classes) {\n\t out.push('.' + desc.classes.join('.'));\n\t }\n\t for (var i = 0; i < desc.attributes.length; i++) {\n\t out.push('[' + desc.attributes[i].key + '=\"' + desc.attributes[i].value + '\"]');\n\t }\n\t\n\t return out.join('');\n\t}\n\t\n\t/**\n\t * Input: a dom element\n\t * Output: null if tagName is falsey or input is falsey, else\n\t * {\n\t * tagName: String,\n\t * id: String | undefined,\n\t * classes: [String] | undefined,\n\t * attributes: [\n\t * {\n\t * key: OneOf(type, name, title, alt),\n\t * value: String\n\t * }\n\t * ]\n\t * }\n\t */\n\tfunction describeElement(elem) {\n\t if (!elem || !elem.tagName) {\n\t return null;\n\t }\n\t var out = {}, className, key, attr, i;\n\t out.tagName = elem.tagName.toLowerCase();\n\t if (elem.id) {\n\t out.id = elem.id;\n\t }\n\t className = elem.className;\n\t if (className && (typeof className === 'string')) {\n\t out.classes = className.split(/\\s+/);\n\t }\n\t var attributes = ['type', 'name', 'title', 'alt'];\n\t out.attributes = [];\n\t for (i = 0; i < attributes.length; i++) {\n\t key = attributes[i];\n\t attr = elem.getAttribute(key);\n\t if (attr) {\n\t out.attributes.push({key: key, value: attr});\n\t }\n\t }\n\t return out;\n\t}\n\t\n\tmodule.exports = {\n\t describeElement: describeElement,\n\t descriptionToString: descriptionToString,\n\t elementArrayToString: elementArrayToString,\n\t treeToArray: treeToArray,\n\t getElementFromEvent: getElementFromEvent,\n\t isDescribedElement: isDescribedElement,\n\t getElementType: getElementType\n\t};\n\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// rollbar.noconflict.umd.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 9529478730529717f4fd","'use strict';\n\nvar rollbar = require('../rollbar');\n\nif ((typeof window !== 'undefined') && !window._rollbarStartTime) {\n window._rollbarStartTime = (new Date()).getTime();\n}\n\nmodule.exports = rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/bundles/rollbar.noconflict.js\n// module id = 1\n// module chunks = 0","'use strict';\n\nvar Client = require('../rollbar');\nvar _ = require('../utility');\nvar API = require('../api');\nvar logger = require('./logger');\nvar globals = require('./globalSetup');\n\nvar transport = require('./transport');\nvar urllib = require('./url');\n\nvar transforms = require('./transforms');\nvar sharedTransforms = require('../transforms');\nvar predicates = require('./predicates');\nvar sharedPredicates = require('../predicates');\nvar errorParser = require('./errorParser');\nvar Instrumenter = require('./telemetry');\n\nfunction Rollbar(options, client) {\n this.options = _.extend({}, defaultOptions, options);\n var api = new API(this.options, transport, urllib);\n this.client = client || new Client(this.options, api, logger, 'browser');\n\n var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n var gDocument = (typeof document != 'undefined') && document;\n addTransformsToNotifier(this.client.notifier);\n addPredicatesToQueue(this.client.queue);\n if (this.options.captureUncaught || this.options.handleUncaughtExceptions) {\n globals.captureUncaughtExceptions(gWindow, this);\n globals.wrapGlobals(gWindow, this);\n }\n if (this.options.captureUnhandledRejections || this.options.handleUnhandledRejections) {\n globals.captureUnhandledRejections(gWindow, this);\n }\n\n this.instrumenter = new Instrumenter(this.options, this.client.telemeter, this, gWindow, gDocument);\n this.instrumenter.instrument();\n}\n\nvar _instance = null;\nRollbar.init = function(options, client) {\n if (_instance) {\n return _instance.global(options).configure(options);\n }\n _instance = new Rollbar(options, client);\n return _instance;\n};\n\nfunction handleUninitialized(maybeCallback) {\n var message = 'Rollbar is not initialized';\n logger.error(message);\n if (maybeCallback) {\n maybeCallback(new Error(message));\n }\n}\n\nRollbar.prototype.global = function(options) {\n this.client.global(options);\n return this;\n};\nRollbar.global = function(options) {\n if (_instance) {\n return _instance.global(options);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.extend({}, oldOptions, options, payload);\n this.client.configure(options, payloadData);\n this.instrumenter.configure(options);\n return this;\n};\nRollbar.configure = function(options, payloadData) {\n if (_instance) {\n return _instance.configure(options, payloadData);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.lastError = function() {\n return this.client.lastError;\n};\nRollbar.lastError = function() {\n if (_instance) {\n return _instance.lastError();\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.log = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.log(item);\n return {uuid: uuid};\n};\nRollbar.log = function() {\n if (_instance) {\n return _instance.log.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.debug = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.debug(item);\n return {uuid: uuid};\n};\nRollbar.debug = function() {\n if (_instance) {\n return _instance.debug.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.info = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.info(item);\n return {uuid: uuid};\n};\nRollbar.info = function() {\n if (_instance) {\n return _instance.info.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warn = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warn(item);\n return {uuid: uuid};\n};\nRollbar.warn = function() {\n if (_instance) {\n return _instance.warn.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warning = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warning(item);\n return {uuid: uuid};\n};\nRollbar.warning = function() {\n if (_instance) {\n return _instance.warning.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.error = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.error(item);\n return {uuid: uuid};\n};\nRollbar.error = function() {\n if (_instance) {\n return _instance.error.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.critical = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.critical(item);\n return {uuid: uuid};\n};\nRollbar.critical = function() {\n if (_instance) {\n return _instance.critical.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.handleUncaughtException = function(message, url, lineno, colno, error, context) {\n var item;\n var stackInfo = _.makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n 'onerror',\n 'uncaught exception',\n errorParser\n );\n if (_.isError(error)) {\n item = this._createItem([message, error, context]);\n item._unhandledStackInfo = stackInfo;\n } else if (_.isError(url)) {\n item = this._createItem([message, url, context]);\n item._unhandledStackInfo = stackInfo;\n } else {\n item = this._createItem([message, context]);\n item.stackInfo = stackInfo;\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n this.client.log(item);\n};\n\nRollbar.prototype.handleUnhandledRejection = function(reason, promise) {\n var message = 'unhandled rejection was null or undefined!';\n message = reason ? (reason.message || String(reason)) : message;\n var context = (reason && reason._rollbarContext) || (promise && promise._rollbarContext);\n\n var item;\n if (_.isError(reason)) {\n item = this._createItem([message, reason, context]);\n } else {\n item = this._createItem([message, reason, context]);\n item.stackInfo = _.makeUnhandledStackInfo(\n message,\n '',\n 0,\n 0,\n null,\n 'unhandledrejection',\n '',\n errorParser\n );\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n item._originalArgs = item._originalArgs || [];\n item._originalArgs.push(promise);\n this.client.log(item);\n};\n\nRollbar.prototype.wrap = function(f, context, _before) {\n try {\n var ctxFn;\n if(_.isFunction(context)) {\n ctxFn = context;\n } else {\n ctxFn = function() { return context || {}; };\n }\n\n if (!_.isFunction(f)) {\n return f;\n }\n\n if (f._isWrap) {\n return f;\n }\n\n if (!f._rollbar_wrapped) {\n f._rollbar_wrapped = function () {\n if (_before && _.isFunction(_before)) {\n _before.apply(this, arguments);\n }\n try {\n return f.apply(this, arguments);\n } catch(exc) {\n var e = exc;\n if (e) {\n if (_.isType(e, 'string')) {\n e = new String(e);\n }\n e._rollbarContext = ctxFn() || {};\n e._rollbarContext._wrappedSource = f.toString();\n\n window._rollbarWrappedError = e;\n }\n throw e;\n }\n };\n\n f._rollbar_wrapped._isWrap = true;\n\n if (f.hasOwnProperty) {\n for (var prop in f) {\n if (f.hasOwnProperty(prop)) {\n f._rollbar_wrapped[prop] = f[prop];\n }\n }\n }\n }\n\n return f._rollbar_wrapped;\n } catch (e) {\n // Return the original function if the wrap fails.\n return f;\n }\n};\nRollbar.wrap = function(f, context) {\n if (_instance) {\n return _instance.wrap(f, context);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.captureEvent = function(metadata, level) {\n return this.client.captureEvent(metadata, level);\n};\nRollbar.captureEvent = function(metadata, level) {\n if (_instance) {\n return _instance.captureEvent(metadata, level);\n } else {\n handleUninitialized();\n }\n};\n\n// The following two methods are used internally and are not meant for public use\nRollbar.prototype.captureDomContentLoaded = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureLoad(ts);\n};\n\n/* Internal */\n\nfunction addTransformsToNotifier(notifier) {\n notifier\n .addTransform(transforms.handleItemWithError)\n .addTransform(transforms.ensureItemHasSomethingToSay)\n .addTransform(transforms.addBaseInfo)\n .addTransform(transforms.addRequestInfo(window))\n .addTransform(transforms.addClientInfo(window))\n .addTransform(transforms.addPluginInfo(window))\n .addTransform(transforms.addBody)\n .addTransform(sharedTransforms.addMessageWithError)\n .addTransform(sharedTransforms.addTelemetryData)\n .addTransform(sharedTransforms.addConfigToPayload)\n .addTransform(transforms.scrubPayload)\n .addTransform(sharedTransforms.userTransform(logger))\n .addTransform(sharedTransforms.itemToPayload);\n}\n\nfunction addPredicatesToQueue(queue) {\n queue\n .addPredicate(sharedPredicates.checkLevel)\n .addPredicate(predicates.checkIgnore)\n .addPredicate(sharedPredicates.userCheckIgnore(logger))\n .addPredicate(sharedPredicates.urlIsNotBlacklisted(logger))\n .addPredicate(sharedPredicates.urlIsWhitelisted(logger))\n .addPredicate(sharedPredicates.messageIsIgnored(logger));\n}\n\nRollbar.prototype._createItem = function(args) {\n return _.createItem(args, logger, this);\n};\n\nfunction _getFirstFunction(args) {\n for (var i = 0, len = args.length; i < len; ++i) {\n if (_.isFunction(args[i])) {\n return args[i];\n }\n }\n return undefined;\n}\n\n/* global __NOTIFIER_VERSION__:false */\n/* global __DEFAULT_BROWSER_SCRUB_FIELDS__:false */\n/* global __DEFAULT_LOG_LEVEL__:false */\n/* global __DEFAULT_REPORT_LEVEL__:false */\n/* global __DEFAULT_UNCAUGHT_ERROR_LEVEL:false */\n/* global __DEFAULT_ENDPOINT__:false */\n\nvar defaultOptions = {\n version: __NOTIFIER_VERSION__,\n scrubFields: __DEFAULT_BROWSER_SCRUB_FIELDS__,\n logLevel: __DEFAULT_LOG_LEVEL__,\n reportLevel: __DEFAULT_REPORT_LEVEL__,\n uncaughtErrorLevel: __DEFAULT_UNCAUGHT_ERROR_LEVEL,\n endpoint: __DEFAULT_ENDPOINT__,\n verbose: false,\n enabled: true,\n sendConfig: false,\n includeItemsInTelemetry: true,\n captureIp: true\n};\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/rollbar.js\n// module id = 2\n// module chunks = 0","'use strict';\n\nvar RateLimiter = require('./rateLimiter');\nvar Queue = require('./queue');\nvar Notifier = require('./notifier');\nvar Telemeter = require('./telemetry');\nvar _ = require('./utility');\n\n/*\n * Rollbar - the interface to Rollbar\n *\n * @param options\n * @param api\n * @param logger\n */\nfunction Rollbar(options, api, logger, platform) {\n this.options = _.extend(true, {}, options);\n this.logger = logger;\n Rollbar.rateLimiter.configureGlobal(this.options);\n Rollbar.rateLimiter.setPlatformOptions(platform, this.options);\n this.queue = new Queue(Rollbar.rateLimiter, api, logger, this.options);\n this.notifier = new Notifier(this.queue, this.options);\n this.telemeter = new Telemeter(this.options);\n this.lastError = null;\n}\n\nvar defaultOptions = {\n maxItems: 0,\n itemsPerMinute: 60\n};\n\nRollbar.rateLimiter = new RateLimiter(defaultOptions);\n\nRollbar.prototype.global = function(options) {\n Rollbar.rateLimiter.configureGlobal(options);\n return this;\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n this.notifier && this.notifier.configure(options);\n this.telemeter && this.telemeter.configure(options);\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.extend(true, {}, oldOptions, options, payload);\n this.global(this.options);\n return this;\n};\n\nRollbar.prototype.log = function(item) {\n var level = this._defaultLogLevel();\n return this._log(level, item);\n};\n\nRollbar.prototype.debug = function(item) {\n this._log('debug', item);\n};\n\nRollbar.prototype.info = function(item) {\n this._log('info', item);\n};\n\nRollbar.prototype.warn = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.warning = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.error = function(item) {\n this._log('error', item);\n};\n\nRollbar.prototype.critical = function(item) {\n this._log('critical', item);\n};\n\nRollbar.prototype.wait = function(callback) {\n this.queue.wait(callback);\n};\n\nRollbar.prototype.captureEvent = function(metadata, level) {\n return this.telemeter.captureEvent(metadata, level);\n};\n\nRollbar.prototype.captureDomContentLoaded = function(ts) {\n return this.telemeter.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(ts) {\n return this.telemeter.captureLoad(ts);\n};\n\n/* Internal */\n\nRollbar.prototype._log = function(defaultLevel, item) {\n if (this._sameAsLastError(item)) {\n if (item.callback) {\n item.callback();\n }\n return;\n }\n try {\n var callback = null;\n if (item.callback) {\n callback = item.callback;\n delete item.callback;\n }\n item.level = item.level || defaultLevel;\n this.telemeter._captureRollbarItem(item);\n item.telemetryEvents = this.telemeter.copyEvents();\n this.notifier.log(item, callback);\n } catch (e) {\n this.logger.error(e)\n }\n};\n\nRollbar.prototype._defaultLogLevel = function() {\n return this.options.logLevel || 'debug';\n};\n\nRollbar.prototype._sameAsLastError = function(item) {\n if (this.lastError && this.lastError === item.err) {\n return true;\n }\n this.lastError = item.err;\n return false;\n};\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rollbar.js\n// module id = 3\n// module chunks = 0","'use strict';\n\n/*\n * RateLimiter - an object that encapsulates the logic for counting items sent to Rollbar\n *\n * @param options - the same options that are accepted by configureGlobal offered as a convenience\n */\nfunction RateLimiter(options) {\n this.startTime = (new Date()).getTime();\n this.counter = 0;\n this.perMinCounter = 0;\n this.platform = null;\n this.platformOptions = {};\n this.configureGlobal(options);\n}\n\nRateLimiter.globalSettings = {\n startTime: (new Date()).getTime(),\n maxItems: undefined,\n itemsPerMinute: undefined\n};\n\n/*\n * configureGlobal - set the global rate limiter options\n *\n * @param options - Only the following values are recognized:\n * startTime: a timestamp of the form returned by (new Date()).getTime()\n * maxItems: the maximum items\n * itemsPerMinute: the max number of items to send in a given minute\n */\nRateLimiter.prototype.configureGlobal = function(options) {\n if (options.startTime !== undefined) {\n RateLimiter.globalSettings.startTime = options.startTime;\n }\n if (options.maxItems !== undefined) {\n RateLimiter.globalSettings.maxItems = options.maxItems;\n }\n if (options.itemsPerMinute !== undefined) {\n RateLimiter.globalSettings.itemsPerMinute = options.itemsPerMinute;\n }\n};\n\n/*\n * shouldSend - determine if we should send a given item based on rate limit settings\n *\n * @param item - the item we are about to send\n * @returns An object with the following structure:\n * error: (Error|null)\n * shouldSend: bool\n * payload: (Object|null)\n * If shouldSend is false, the item passed as a parameter should not be sent to Rollbar, and\n * exactly one of error or payload will be non-null. If error is non-null, the returned Error will\n * describe the situation, but it means that we were already over a rate limit (either globally or\n * per minute) when this item was checked. If error is null, and therefore payload is non-null, it\n * means this item put us over the global rate limit and the payload should be sent to Rollbar in\n * place of the passed in item.\n */\nRateLimiter.prototype.shouldSend = function(item, now) {\n now = now || (new Date()).getTime();\n if (now - this.startTime >= 60000) {\n this.startTime = now;\n this.perMinCounter = 0;\n }\n\n var globalRateLimit = RateLimiter.globalSettings.maxItems;\n var globalRateLimitPerMin = RateLimiter.globalSettings.itemsPerMinute;\n\n if (checkRate(item, globalRateLimit, this.counter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimit + ' max items reached', false);\n } else if (checkRate(item, globalRateLimitPerMin, this.perMinCounter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimitPerMin + ' items per minute reached', false);\n }\n this.counter++;\n this.perMinCounter++;\n\n var shouldSend = !checkRate(item, globalRateLimit, this.counter);\n var perMinute = shouldSend;\n shouldSend = shouldSend && !checkRate(item, globalRateLimitPerMin, this.perMinCounter);\n return shouldSendValue(this.platform, this.platformOptions, null, shouldSend, globalRateLimit, globalRateLimitPerMin, perMinute);\n};\n\nRateLimiter.prototype.setPlatformOptions = function(platform, options) {\n this.platform = platform;\n this.platformOptions = options;\n};\n\n/* Helpers */\n\nfunction checkRate(item, limit, counter) {\n return !item.ignoreRateLimit && limit >= 1 && counter > limit;\n}\n\nfunction shouldSendValue(platform, options, error, shouldSend, globalRateLimit, limitPerMin, perMinute) {\n var payload = null;\n if (error) {\n error = new Error(error);\n }\n if (!error && !shouldSend) {\n payload = rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute);\n }\n return {error: error, shouldSend: shouldSend, payload: payload};\n}\n\nfunction rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute) {\n var environment = options.environment || (options.payload && options.payload.environment);\n var msg;\n if (perMinute) {\n msg = 'item per minute limit reached, ignoring errors until timeout';\n } else {\n msg = 'maxItems has been hit, ignoring errors until reset.';\n }\n var item = {\n body: {\n message: {\n body: msg,\n extra: {\n maxItems: globalRateLimit,\n itemsPerMinute: limitPerMin\n }\n }\n },\n language: 'javascript',\n environment: environment,\n notifier: {\n version: (options.notifier && options.notifier.version) || options.version\n }\n };\n if (platform === 'browser') {\n item.platform = 'browser';\n item.framework = 'browser-js';\n item.notifier.name = 'rollbar-browser-js';\n } else if (platform === 'server') {\n item.framework = options.framework || 'node-js';\n item.notifier.name = options.notifier.name;\n } else if (platform === 'react-native') {\n item.framework = options.framework || 'react-native';\n item.notifier.name = options.notifier.name;\n }\n return item;\n}\n\nmodule.exports = RateLimiter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rateLimiter.js\n// module id = 4\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Queue - an object which handles which handles a queue of items to be sent to Rollbar.\n * This object handles rate limiting via a passed in rate limiter, retries based on connection\n * errors, and filtering of items based on a set of configurable predicates. The communication to\n * the backend is performed via a given API object.\n *\n * @param rateLimiter - An object which conforms to the interface\n * rateLimiter.shouldSend(item) -> bool\n * @param api - An object which conforms to the interface\n * api.postItem(payload, function(err, response))\n * @param logger - An object used to log verbose messages if desired\n * @param options - see Queue.prototype.configure\n */\nfunction Queue(rateLimiter, api, logger, options) {\n this.rateLimiter = rateLimiter;\n this.api = api;\n this.logger = logger;\n this.options = options;\n this.predicates = [];\n this.pendingItems = [];\n this.pendingRequests = [];\n this.retryQueue = [];\n this.retryHandle = null;\n this.waitCallback = null;\n this.waitIntervalID = null;\n}\n\n/*\n * configure - updates the options this queue uses\n *\n * @param options\n */\nQueue.prototype.configure = function(options) {\n this.api && this.api.configure(options);\n var oldOptions = this.options;\n this.options = _.extend(true, {}, oldOptions, options);\n return this;\n};\n\n/*\n * addPredicate - adds a predicate to the end of the list of predicates for this queue\n *\n * @param predicate - function(item, options) -> (bool|{err: Error})\n * Returning true means that this predicate passes and the item is okay to go on the queue\n * Returning false means do not add the item to the queue, but it is not an error\n * Returning {err: Error} means do not add the item to the queue, and the given error explains why\n * Returning {err: undefined} is equivalent to returning true but don't do that\n */\nQueue.prototype.addPredicate = function(predicate) {\n if (_.isFunction(predicate)) {\n this.predicates.push(predicate);\n }\n return this;\n};\n\nQueue.prototype.addPendingItem = function(item) {\n this.pendingItems.push(item);\n};\n\nQueue.prototype.removePendingItem = function(item) {\n var idx = this.pendingItems.indexOf(item);\n if (idx !== -1) {\n this.pendingItems.splice(idx, 1);\n }\n};\n\n/*\n * addItem - Send an item to the Rollbar API if all of the predicates are satisfied\n *\n * @param item - The payload to send to the backend\n * @param callback - function(error, repsonse) which will be called with the response from the API\n * in the case of a success, otherwise response will be null and error will have a value. If both\n * error and response are null then the item was stopped by a predicate which did not consider this\n * to be an error condition, but nonetheless did not send the item to the API.\n * @param originalError - The original error before any transformations that is to be logged if any\n */\nQueue.prototype.addItem = function(item, callback, originalError, originalItem) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() { return; };\n }\n var predicateResult = this._applyPredicates(item);\n if (predicateResult.stop) {\n this.removePendingItem(originalItem);\n callback(predicateResult.err);\n return;\n }\n this._maybeLog(item, originalError);\n this.removePendingItem(originalItem);\n this.pendingRequests.push(item);\n try {\n this._makeApiRequest(item, function(err, resp) {\n this._dequeuePendingRequest(item);\n callback(err, resp);\n }.bind(this));\n } catch (e) {\n this._dequeuePendingRequest(item);\n callback(e);\n }\n};\n\n/*\n * wait - Stop any further errors from being added to the queue, and get called back when all items\n * currently processing have finished sending to the backend.\n *\n * @param callback - function() called when all pending items have been sent\n */\nQueue.prototype.wait = function(callback) {\n if (!_.isFunction(callback)) {\n return;\n }\n this.waitCallback = callback;\n if (this._maybeCallWait()) {\n return;\n }\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitIntervalID = setInterval(function() {\n this._maybeCallWait();\n }.bind(this), 500);\n};\n\n/* _applyPredicates - Sequentially applies the predicates that have been added to the queue to the\n * given item with the currently configured options.\n *\n * @param item - An item in the queue\n * @returns {stop: bool, err: (Error|null)} - stop being true means do not add item to the queue,\n * the error value should be passed up to a callbak if we are stopping.\n */\nQueue.prototype._applyPredicates = function(item) {\n var p = null;\n for (var i = 0, len = this.predicates.length; i < len; i++) {\n p = this.predicates[i](item, this.options);\n if (!p || p.err !== undefined) {\n return {stop: true, err: p.err};\n }\n }\n return {stop: false, err: null};\n};\n\n/*\n * _makeApiRequest - Send an item to Rollbar, callback when done, if there is an error make an\n * effort to retry if we are configured to do so.\n *\n * @param item - an item ready to send to the backend\n * @param callback - function(err, response)\n */\nQueue.prototype._makeApiRequest = function(item, callback) {\n var rateLimitResponse = this.rateLimiter.shouldSend(item);\n if (rateLimitResponse.shouldSend) {\n this.api.postItem(item, function(err, resp) {\n if (err) {\n this._maybeRetry(err, item, callback);\n } else {\n callback(err, resp);\n }\n }.bind(this));\n } else if (rateLimitResponse.error) {\n callback(rateLimitResponse.error);\n } else {\n this.api.postItem(rateLimitResponse.payload, callback);\n }\n};\n\n// These are errors basically mean there is no internet connection\nvar RETRIABLE_ERRORS = ['ECONNRESET', 'ENOTFOUND', 'ESOCKETTIMEDOUT', 'ETIMEDOUT', 'ECONNREFUSED', 'EHOSTUNREACH', 'EPIPE', 'EAI_AGAIN'];\n\n/*\n * _maybeRetry - Given the error returned by the API, decide if we should retry or just callback\n * with the error.\n *\n * @param err - an error returned by the API transport\n * @param item - the item that was trying to be sent when this error occured\n * @param callback - function(err, response)\n */\nQueue.prototype._maybeRetry = function(err, item, callback) {\n var shouldRetry = false;\n if (this.options.retryInterval) {\n for (var i = 0, len = RETRIABLE_ERRORS.length; i < len; i++) {\n if (err.code === RETRIABLE_ERRORS[i]) {\n shouldRetry = true;\n break;\n }\n }\n }\n if (shouldRetry) {\n this._retryApiRequest(item, callback);\n } else {\n callback(err);\n }\n};\n\n/*\n * _retryApiRequest - Add an item and a callback to a queue and possibly start a timer to process\n * that queue based on the retryInterval in the options for this queue.\n *\n * @param item - an item that failed to send due to an error we deem retriable\n * @param callback - function(err, response)\n */\nQueue.prototype._retryApiRequest = function(item, callback) {\n this.retryQueue.push({item: item, callback: callback});\n\n if (!this.retryHandle) {\n this.retryHandle = setInterval(function() {\n while (this.retryQueue.length) {\n var retryObject = this.retryQueue.shift();\n this._makeApiRequest(retryObject.item, retryObject.callback);\n }\n }.bind(this), this.options.retryInterval);\n }\n};\n\n/*\n * _dequeuePendingRequest - Removes the item from the pending request queue, this queue is used to\n * enable to functionality of providing a callback that clients can pass to `wait` to be notified\n * when the pending request queue has been emptied. This must be called when the API finishes\n * processing this item. If a `wait` callback is configured, it is called by this function.\n *\n * @param item - the item previously added to the pending request queue\n */\nQueue.prototype._dequeuePendingRequest = function(item) {\n var idx = this.pendingRequests.indexOf(item);\n if (idx !== -1) {\n this.pendingRequests.splice(idx, 1);\n this._maybeCallWait();\n }\n};\n\nQueue.prototype._maybeLog = function(data, originalError) {\n if (this.logger && this.options.verbose) {\n var message = originalError;\n message = message || _.get(data, 'body.trace.exception.message');\n message = message || _.get(data, 'body.trace_chain.0.exception.message');\n if (message) {\n this.logger.error(message);\n return;\n }\n message = _.get(data, 'body.message.body');\n if (message) {\n this.logger.log(message);\n }\n }\n};\n\nQueue.prototype._maybeCallWait = function() {\n if (_.isFunction(this.waitCallback) && this.pendingItems.length === 0 && this.pendingRequests.length === 0) {\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitCallback();\n return true;\n }\n return false;\n};\n\nmodule.exports = Queue;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/queue.js\n// module id = 5\n// module chunks = 0","'use strict';\n\nvar extend = require('extend');\n\nvar RollbarJSON = {};\nvar __initRollbarJSON = false;\nfunction setupJSON() {\n if (__initRollbarJSON) {\n return;\n }\n __initRollbarJSON = true;\n\n if (isDefined(JSON)) {\n if (isNativeFunction(JSON.stringify)) {\n RollbarJSON.stringify = JSON.stringify;\n }\n if (isNativeFunction(JSON.parse)) {\n RollbarJSON.parse = JSON.parse;\n }\n }\n if (!isFunction(RollbarJSON.stringify) || !isFunction(RollbarJSON.parse)) {\n var setupCustomJSON = require('../vendor/JSON-js/json3.js');\n setupCustomJSON(RollbarJSON);\n }\n}\nsetupJSON();\n\n/*\n * isType - Given a Javascript value and a string, returns true if the type of the value matches the\n * given string.\n *\n * @param x - any value\n * @param t - a lowercase string containing one of the following type names:\n * - undefined\n * - null\n * - error\n * - number\n * - boolean\n * - string\n * - symbol\n * - function\n * - object\n * - array\n * @returns true if x is of type t, otherwise false\n */\nfunction isType(x, t) {\n return t === typeName(x);\n}\n\n/*\n * typeName - Given a Javascript value, returns the type of the object as a string\n */\nfunction typeName(x) {\n var name = typeof x;\n if (name !== 'object') {\n return name;\n }\n if (!x) {\n return 'null';\n }\n if (x instanceof Error) {\n return 'error';\n }\n return ({}).toString.call(x).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n}\n\n/* isFunction - a convenience function for checking if a value is a function\n *\n * @param f - any value\n * @returns true if f is a function, otherwise false\n */\nfunction isFunction(f) {\n return isType(f, 'function');\n}\n\n/* isNativeFunction - a convenience function for checking if a value is a native JS function\n *\n * @param f - any value\n * @returns true if f is a native JS function, otherwise false\n */\nfunction isNativeFunction(f) {\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n var funcMatchString = Function.prototype.toString.call(Object.prototype.hasOwnProperty)\n .replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?');\n var reIsNative = RegExp('^' + funcMatchString + '$');\n return isObject(f) && reIsNative.test(f);\n}\n\n/* isObject - Checks if the argument is an object\n *\n * @param value - any value\n * @returns true is value is an object function is an object)\n*/\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/*\n * isDefined - a convenience function for checking if a value is not equal to undefined\n *\n * @param u - any value\n * @returns true if u is anything other than undefined\n */\nfunction isDefined(u) {\n return !isType(u, 'undefined');\n}\n\n/*\n * isIterable - convenience function for checking if a value can be iterated, essentially\n * whether it is an object or an array.\n *\n * @param i - any value\n * @returns true if i is an object or an array as determined by `typeName`\n */\nfunction isIterable(i) {\n var type = typeName(i);\n return (type === 'object' || type === 'array');\n}\n\n/*\n * isError - convenience function for checking if a value is of an error type\n *\n * @param e - any value\n * @returns true if e is an error\n */\nfunction isError(e) {\n return isType(e, 'error');\n}\n\nfunction traverse(obj, func, seen) {\n var k, v, i;\n var isObj = isType(obj, 'object');\n var isArray = isType(obj, 'array');\n var keys = [];\n\n if (isObj && seen.indexOf(obj) !== -1) {\n return obj;\n }\n seen.push(obj);\n\n if (isObj) {\n for (k in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, k)) {\n keys.push(k);\n }\n }\n } else if (isArray) {\n for (i = 0; i < obj.length; ++i) {\n keys.push(i);\n }\n }\n\n var result = isObj ? {} : [];\n for (i = 0; i < keys.length; ++i) {\n k = keys[i];\n v = obj[k];\n result[k] = func(k, v, seen);\n }\n\n return (keys.length != 0) ? result : obj;\n}\n\nfunction redact() {\n return '********';\n}\n\n// from http://stackoverflow.com/a/8809472/1138191\nfunction uuid4() {\n var d = now();\n var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (d + Math.random() * 16) % 16 | 0;\n d = Math.floor(d / 16);\n return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16);\n });\n return uuid;\n}\n\nvar LEVELS = {\n debug: 0,\n info: 1,\n warning: 2,\n error: 3,\n critical: 4\n};\n\nfunction sanitizeUrl(url) {\n var baseUrlParts = parseUri(url);\n // remove a trailing # if there is no anchor\n if (baseUrlParts.anchor === '') {\n baseUrlParts.source = baseUrlParts.source.replace('#', '');\n }\n\n url = baseUrlParts.source.replace('?' + baseUrlParts.query, '');\n return url;\n}\n\nvar parseUriOptions = {\n strictMode: false,\n key: [\n 'source',\n 'protocol',\n 'authority',\n 'userInfo',\n 'user',\n 'password',\n 'host',\n 'port',\n 'relative',\n 'path',\n 'directory',\n 'file',\n 'query',\n 'anchor'\n ],\n q: {\n name: 'queryKey',\n parser: /(?:^|&)([^&=]*)=?([^&]*)/g\n },\n parser: {\n strict: /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,\n loose: /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/\n }\n};\n\nfunction parseUri(str) {\n if (!isType(str, 'string')) {\n throw new Error('received invalid input');\n }\n\n var o = parseUriOptions;\n var m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str);\n var uri = {};\n var i = o.key.length;\n\n while (i--) {\n uri[o.key[i]] = m[i] || '';\n }\n\n uri[o.q.name] = {};\n uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {\n if ($1) {\n uri[o.q.name][$1] = $2;\n }\n });\n\n return uri;\n}\n\nfunction addParamsAndAccessTokenToPath(accessToken, options, params) {\n params = params || {};\n params.access_token = accessToken;\n var paramsArray = [];\n var k;\n for (k in params) {\n if (Object.prototype.hasOwnProperty.call(params, k)) {\n paramsArray.push([k, params[k]].join('='));\n }\n }\n var query = '?' + paramsArray.sort().join('&');\n\n options = options || {};\n options.path = options.path || '';\n var qs = options.path.indexOf('?');\n var h = options.path.indexOf('#');\n var p;\n if (qs !== -1 && (h === -1 || h > qs)) {\n p = options.path;\n options.path = p.substring(0,qs) + query + '&' + p.substring(qs+1);\n } else {\n if (h !== -1) {\n p = options.path;\n options.path = p.substring(0,h) + query + p.substring(h);\n } else {\n options.path = options.path + query;\n }\n }\n}\n\nfunction formatUrl(u, protocol) {\n protocol = protocol || u.protocol;\n if (!protocol && u.port) {\n if (u.port === 80) {\n protocol = 'http:';\n } else if (u.port === 443) {\n protocol = 'https:';\n }\n }\n protocol = protocol || 'https:';\n\n if (!u.hostname) {\n return null;\n }\n var result = protocol + '//' + u.hostname;\n if (u.port) {\n result = result + ':' + u.port;\n }\n if (u.path) {\n result = result + u.path;\n }\n return result;\n}\n\nfunction stringify(obj, backup) {\n var value, error;\n try {\n value = RollbarJSON.stringify(obj);\n } catch (jsonError) {\n if (backup && isFunction(backup)) {\n try {\n value = backup(obj);\n } catch (backupError) {\n error = backupError;\n }\n } else {\n error = jsonError;\n }\n }\n return {error: error, value: value};\n}\n\nfunction jsonParse(s) {\n var value, error;\n try {\n value = RollbarJSON.parse(s);\n } catch (e) {\n error = e;\n }\n return {error: error, value: value};\n}\n\nfunction makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n mode,\n backupMessage,\n errorParser\n) {\n var location = {\n url: url || '',\n line: lineno,\n column: colno\n };\n location.func = errorParser.guessFunctionName(location.url, location.line);\n location.context = errorParser.gatherContext(location.url, location.line);\n var href = document && document.location && document.location.href;\n var useragent = window && window.navigator && window.navigator.userAgent;\n return {\n 'mode': mode,\n 'message': error ? String(error) : (message || backupMessage),\n 'url': href,\n 'stack': [location],\n 'useragent': useragent\n };\n}\n\nfunction wrapCallback(logger, f) {\n return function(err, resp) {\n try {\n f(err, resp);\n } catch (e) {\n logger.error(e);\n }\n };\n}\n\nfunction createItem(args, logger, notifier, requestKeys, lambdaContext) {\n var message, err, custom, callback, request;\n var arg;\n var extraArgs = [];\n\n for (var i = 0, l = args.length; i < l; ++i) {\n arg = args[i];\n\n var typ = typeName(arg);\n switch (typ) {\n case 'undefined':\n break;\n case 'string':\n message ? extraArgs.push(arg) : message = arg;\n break;\n case 'function':\n callback = wrapCallback(logger, arg);\n break;\n case 'date':\n extraArgs.push(arg);\n break;\n case 'error':\n case 'domexception':\n err ? extraArgs.push(arg) : err = arg;\n break;\n case 'object':\n case 'array':\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n if (requestKeys && typ === 'object' && !request) {\n for (var j = 0, len = requestKeys.length; j < len; ++j) {\n if (arg[requestKeys[j]] !== undefined) {\n request = arg;\n break;\n }\n }\n if (request) {\n break;\n }\n }\n custom ? extraArgs.push(arg) : custom = arg;\n break;\n default:\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n extraArgs.push(arg);\n }\n }\n\n if (extraArgs.length > 0) {\n // if custom is an array this turns it into an object with integer keys\n custom = extend(true, {}, custom);\n custom.extraArgs = extraArgs;\n }\n\n var item = {\n message: message,\n err: err,\n custom: custom,\n timestamp: now(),\n callback: callback,\n uuid: uuid4()\n };\n if (custom && custom.level !== undefined) {\n item.level = custom.level;\n delete custom.level;\n }\n if (requestKeys && request) {\n item.request = request;\n }\n if (lambdaContext) {\n item.lambdaContext = lambdaContext;\n }\n item._originalArgs = args;\n return item;\n}\n\n/*\n * get - given an obj/array and a keypath, return the value at that keypath or\n * undefined if not possible.\n *\n * @param obj - an object or array\n * @param path - a string of keys separated by '.' such as 'plugin.jquery.0.message'\n * which would correspond to 42 in `{plugin: {jquery: [{message: 42}]}}`\n */\nfunction get(obj, path) {\n if (!obj) {\n return undefined;\n }\n var keys = path.split('.');\n var result = obj;\n try {\n for (var i = 0, len = keys.length; i < len; ++i) {\n result = result[keys[i]];\n }\n } catch (e) {\n result = undefined;\n }\n return result;\n}\n\nfunction set(obj, path, value) {\n if (!obj) {\n return;\n }\n var keys = path.split('.');\n var len = keys.length;\n if (len < 1) {\n return;\n }\n if (len === 1) {\n obj[keys[0]] = value;\n return;\n }\n try {\n var temp = obj[keys[0]] || {};\n var replacement = temp;\n for (var i = 1; i < len-1; i++) {\n temp[keys[i]] = temp[keys[i]] || {};\n temp = temp[keys[i]];\n }\n temp[keys[len-1]] = value;\n obj[keys[0]] = replacement;\n } catch (e) {\n return;\n }\n}\n\nfunction scrub(data, scrubFields) {\n scrubFields = scrubFields || [];\n var paramRes = _getScrubFieldRegexs(scrubFields);\n var queryRes = _getScrubQueryParamRegexs(scrubFields);\n\n function redactQueryParam(dummy0, paramPart, dummy1, dummy2, dummy3, valPart) {\n return paramPart + redact(valPart);\n }\n\n function paramScrubber(v) {\n var i;\n if (isType(v, 'string')) {\n for (i = 0; i < queryRes.length; ++i) {\n v = v.replace(queryRes[i], redactQueryParam);\n }\n }\n return v;\n }\n\n function valScrubber(k, v) {\n var i;\n for (i = 0; i < paramRes.length; ++i) {\n if (paramRes[i].test(k)) {\n v = redact(v);\n break;\n }\n }\n return v;\n }\n\n function scrubber(k, v, seen) {\n var tmpV = valScrubber(k, v);\n if (tmpV === v) {\n if (isType(v, 'object') || isType(v, 'array')) {\n return traverse(v, scrubber, seen);\n }\n return paramScrubber(tmpV);\n } else {\n return tmpV;\n }\n }\n\n return traverse(data, scrubber, []);\n}\n\nfunction _getScrubFieldRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '^\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?$';\n ret.push(new RegExp(pat, 'i'));\n }\n return ret;\n}\n\n\nfunction _getScrubQueryParamRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?';\n ret.push(new RegExp('(' + pat + '=)([^&\\\\n]+)', 'igm'));\n }\n return ret;\n}\n\nfunction formatArgsAsString(args) {\n var i, len, arg;\n var result = [];\n for (i = 0, len = args.length; i < len; i++) {\n arg = args[i];\n if (typeof arg === 'object') {\n arg = stringify(arg);\n arg = arg.error || arg.value;\n if (arg.length > 500)\n arg = arg.substr(0,500)+'...';\n } else if (typeof arg === 'undefined') {\n arg = 'undefined';\n }\n result.push(arg);\n }\n return result.join(' ');\n}\n\nfunction now() {\n if (Date.now) {\n return +Date.now();\n }\n return +new Date();\n}\n\nfunction filterIp(requestData, captureIp) {\n if (!requestData || !requestData['user_ip'] || captureIp === true) {\n return;\n }\n var newIp = requestData['user_ip'];\n if (!captureIp) {\n newIp = null;\n } else {\n try {\n var parts;\n if (newIp.indexOf('.') !== -1) {\n parts = newIp.split('.');\n parts.pop();\n parts.push('0');\n newIp = parts.join('.');\n } else if (newIp.indexOf(':') !== -1) {\n parts = newIp.split(':');\n if (parts.length > 2) {\n var beginning = parts.slice(0, 3);\n var slashIdx = beginning[2].indexOf('/');\n if (slashIdx !== -1) {\n beginning[2] = beginning[2].substring(0, slashIdx);\n }\n var terminal = '0000:0000:0000:0000:0000';\n newIp = beginning.concat(terminal).join(':');\n }\n } else {\n newIp = null;\n }\n } catch (e) {\n newIp = null;\n }\n }\n requestData['user_ip'] = newIp;\n}\n\nmodule.exports = {\n isType: isType,\n typeName: typeName,\n isFunction: isFunction,\n isNativeFunction: isNativeFunction,\n isIterable: isIterable,\n isError: isError,\n extend: extend,\n traverse: traverse,\n redact: redact,\n uuid4: uuid4,\n LEVELS: LEVELS,\n sanitizeUrl: sanitizeUrl,\n addParamsAndAccessTokenToPath: addParamsAndAccessTokenToPath,\n formatUrl: formatUrl,\n stringify: stringify,\n jsonParse: jsonParse,\n makeUnhandledStackInfo: makeUnhandledStackInfo,\n createItem: createItem,\n get: get,\n set: set,\n scrub: scrub,\n formatArgsAsString: formatArgsAsString,\n now: now,\n filterIp: filterIp\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/utility.js\n// module id = 6\n// module chunks = 0","'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) {/**/}\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[0],\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t} else if ((typeof target !== 'object' && typeof target !== 'function') || target == null) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = target[name];\n\t\t\t\tcopy = options[name];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\ttarget[name] = extend(deep, clone, copy);\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/extend/index.js\n// module id = 7\n// module chunks = 0","// json3.js\n// 2017-02-21\n// Public Domain.\n// NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n// See http://www.JSON.org/js.html\n// This code should be minified before deployment.\n// See http://javascript.crockford.com/jsmin.html\n\n// USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n// NOT CONTROL.\n\n// This file creates a global JSON object containing two methods: stringify\n// and parse. This file provides the ES5 JSON capability to ES3 systems.\n// If a project might run on IE8 or earlier, then this file should be included.\n// This file does nothing on ES5 systems.\n\n// JSON.stringify(value, replacer, space)\n// value any JavaScript value, usually an object or array.\n// replacer an optional parameter that determines how object\n// values are stringified for objects. It can be a\n// function or an array of strings.\n// space an optional parameter that specifies the indentation\n// of nested structures. If it is omitted, the text will\n// be packed without extra whitespace. If it is a number,\n// it will specify the number of spaces to indent at each\n// level. If it is a string (such as \"\\t\" or \" \"),\n// it contains the characters used to indent at each level.\n// This method produces a JSON text from a JavaScript value.\n// When an object value is found, if the object contains a toJSON\n// method, its toJSON method will be called and the result will be\n// stringified. A toJSON method does not serialize: it returns the\n// value represented by the name/value pair that should be serialized,\n// or undefined if nothing should be serialized. The toJSON method\n// will be passed the key associated with the value, and this will be\n// bound to the value.\n\n// For example, this would serialize Dates as ISO strings.\n\n// Date.prototype.toJSON = function (key) {\n// function f(n) {\n// // Format integers to have at least two digits.\n// return (n < 10)\n// ? \"0\" + n\n// : n;\n// }\n// return this.getUTCFullYear() + \"-\" +\n// f(this.getUTCMonth() + 1) + \"-\" +\n// f(this.getUTCDate()) + \"T\" +\n// f(this.getUTCHours()) + \":\" +\n// f(this.getUTCMinutes()) + \":\" +\n// f(this.getUTCSeconds()) + \"Z\";\n// };\n\n// You can provide an optional replacer method. It will be passed the\n// key and value of each member, with this bound to the containing\n// object. The value that is returned from your method will be\n// serialized. If your method returns undefined, then the member will\n// be excluded from the serialization.\n\n// If the replacer parameter is an array of strings, then it will be\n// used to select the members to be serialized. It filters the results\n// such that only members with keys listed in the replacer array are\n// stringified.\n\n// Values that do not have JSON representations, such as undefined or\n// functions, will not be serialized. Such values in objects will be\n// dropped; in arrays they will be replaced with null. You can use\n// a replacer function to replace those with JSON values.\n\n// JSON.stringify(undefined) returns undefined.\n\n// The optional space parameter produces a stringification of the\n// value that is filled with line breaks and indentation to make it\n// easier to read.\n\n// If the space parameter is a non-empty string, then that string will\n// be used for indentation. If the space parameter is a number, then\n// the indentation will be that many spaces.\n\n// Example:\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}]);\n// // text is '[\"e\",{\"pluribus\":\"unum\"}]'\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}], null, \"\\t\");\n// // text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\n\n// text = JSON.stringify([new Date()], function (key, value) {\n// return this[key] instanceof Date\n// ? \"Date(\" + this[key] + \")\"\n// : value;\n// });\n// // text is '[\"Date(---current time---)\"]'\n\n// JSON.parse(text, reviver)\n// This method parses a JSON text to produce an object or array.\n// It can throw a SyntaxError exception.\n// This has been modified to use JSON-js/json_parse_state.js as the\n// parser instead of the one built around eval found in JSON-js/json2.js\n\n// The optional reviver parameter is a function that can filter and\n// transform the results. It receives each of the keys and values,\n// and its return value is used instead of the original value.\n// If it returns what it received, then the structure is not modified.\n// If it returns undefined then the member is deleted.\n\n// Example:\n\n// // Parse the text. Values that look like ISO date strings will\n// // be converted to Date objects.\n\n// myData = JSON.parse(text, function (key, value) {\n// var a;\n// if (typeof value === \"string\") {\n// a =\n// /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n// if (a) {\n// return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n// +a[5], +a[6]));\n// }\n// }\n// return value;\n// });\n\n// myData = JSON.parse('[\"Date(09/09/2001)\"]', function (key, value) {\n// var d;\n// if (typeof value === \"string\" &&\n// value.slice(0, 5) === \"Date(\" &&\n// value.slice(-1) === \")\") {\n// d = new Date(value.slice(5, -1));\n// if (d) {\n// return d;\n// }\n// }\n// return value;\n// });\n\n// This is a reference implementation. You are free to copy, modify, or\n// redistribute.\n\n/*jslint\n for, this\n */\n\n/*property\n JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\n getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\n lastIndex, length, parse, prototype, push, replace, slice, stringify,\n test, toJSON, toString, valueOf\n */\n\nvar setupCustomJSON = function(JSON) {\n\n var rx_one = /^[\\],:{}\\s]*$/;\n var rx_two = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g;\n var rx_three = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\n var rx_four = /(?:^|:|,)(?:\\s*\\[)+/g;\n var rx_escapable = /[\\\\\"\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n var rx_dangerous = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\n function f(n) {\n // Format integers to have at least two digits.\n return n < 10\n ? \"0\" + n\n : n;\n }\n\n function this_value() {\n return this.valueOf();\n }\n\n if (typeof Date.prototype.toJSON !== \"function\") {\n\n Date.prototype.toJSON = function () {\n\n return isFinite(this.valueOf())\n ? this.getUTCFullYear() + \"-\" +\n f(this.getUTCMonth() + 1) + \"-\" +\n f(this.getUTCDate()) + \"T\" +\n f(this.getUTCHours()) + \":\" +\n f(this.getUTCMinutes()) + \":\" +\n f(this.getUTCSeconds()) + \"Z\"\n : null;\n };\n\n Boolean.prototype.toJSON = this_value;\n Number.prototype.toJSON = this_value;\n String.prototype.toJSON = this_value;\n }\n\n var gap;\n var indent;\n var meta;\n var rep;\n\n\n function quote(string) {\n\n // If the string contains no control characters, no quote characters, and no\n // backslash characters, then we can safely slap some quotes around it.\n // Otherwise we must also replace the offending characters with safe escape\n // sequences.\n\n rx_escapable.lastIndex = 0;\n return rx_escapable.test(string)\n ? \"\\\"\" + string.replace(rx_escapable, function (a) {\n var c = meta[a];\n return typeof c === \"string\"\n ? c\n : \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n }) + \"\\\"\"\n : \"\\\"\" + string + \"\\\"\";\n }\n\n\n function str(key, holder) {\n\n // Produce a string from holder[key].\n\n var i; // The loop counter.\n var k; // The member key.\n var v; // The member value.\n var length;\n var mind = gap;\n var partial;\n var value = holder[key];\n\n // If the value has a toJSON method, call it to obtain a replacement value.\n\n if (value && typeof value === \"object\" &&\n typeof value.toJSON === \"function\") {\n value = value.toJSON(key);\n }\n\n // If we were called with a replacer function, then call the replacer to\n // obtain a replacement value.\n\n if (typeof rep === \"function\") {\n value = rep.call(holder, key, value);\n }\n\n // What happens next depends on the value's type.\n\n switch (typeof value) {\n case \"string\":\n return quote(value);\n\n case \"number\":\n\n // JSON numbers must be finite. Encode non-finite numbers as null.\n\n return isFinite(value)\n ? String(value)\n : \"null\";\n\n case \"boolean\":\n case \"null\":\n\n // If the value is a boolean or null, convert it to a string. Note:\n // typeof null does not produce \"null\". The case is included here in\n // the remote chance that this gets fixed someday.\n\n return String(value);\n\n // If the type is \"object\", we might be dealing with an object or an array or\n // null.\n\n case \"object\":\n\n // Due to a specification blunder in ECMAScript, typeof null is \"object\",\n // so watch out for that case.\n\n if (!value) {\n return \"null\";\n }\n\n // Make an array to hold the partial results of stringifying this object value.\n\n gap += indent;\n partial = [];\n\n // Is the value an array?\n\n if (Object.prototype.toString.apply(value) === \"[object Array]\") {\n\n // The value is an array. Stringify every element. Use null as a placeholder\n // for non-JSON values.\n\n length = value.length;\n for (i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || \"null\";\n }\n\n // Join all of the elements together, separated with commas, and wrap them in\n // brackets.\n\n v = partial.length === 0\n ? \"[]\"\n : gap\n ? \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\"\n : \"[\" + partial.join(\",\") + \"]\";\n gap = mind;\n return v;\n }\n\n // If the replacer is an array, use it to select the members to be stringified.\n\n if (rep && typeof rep === \"object\") {\n length = rep.length;\n for (i = 0; i < length; i += 1) {\n if (typeof rep[i] === \"string\") {\n k = rep[i];\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n } else {\n\n // Otherwise, iterate through all of the keys in the object.\n\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n }\n\n // Join all of the member texts together, separated with commas,\n // and wrap them in braces.\n\n v = partial.length === 0\n ? \"{}\"\n : gap\n ? \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\"\n : \"{\" + partial.join(\",\") + \"}\";\n gap = mind;\n return v;\n }\n }\n\n // If the JSON object does not yet have a stringify method, give it one.\n\n if (typeof JSON.stringify !== \"function\") {\n meta = { // table of character substitutions\n \"\\b\": \"\\\\b\",\n \"\\t\": \"\\\\t\",\n \"\\n\": \"\\\\n\",\n \"\\f\": \"\\\\f\",\n \"\\r\": \"\\\\r\",\n \"\\\"\": \"\\\\\\\"\",\n \"\\\\\": \"\\\\\\\\\"\n };\n JSON.stringify = function (value, replacer, space) {\n\n // The stringify method takes a value and an optional replacer, and an optional\n // space parameter, and returns a JSON text. The replacer can be a function\n // that can replace values, or an array of strings that will select the keys.\n // A default replacer method can be provided. Use of the space parameter can\n // produce text that is more easily readable.\n\n var i;\n gap = \"\";\n indent = \"\";\n\n // If the space parameter is a number, make an indent string containing that\n // many spaces.\n\n if (typeof space === \"number\") {\n for (i = 0; i < space; i += 1) {\n indent += \" \";\n }\n\n // If the space parameter is a string, it will be used as the indent string.\n\n } else if (typeof space === \"string\") {\n indent = space;\n }\n\n // If there is a replacer, it must be a function or an array.\n // Otherwise, throw an error.\n\n rep = replacer;\n if (replacer && typeof replacer !== \"function\" &&\n (typeof replacer !== \"object\" ||\n typeof replacer.length !== \"number\")) {\n throw new Error(\"JSON.stringify\");\n }\n\n // Make a fake root object containing our value under the key of \"\".\n // Return the result of stringifying the value.\n\n return str(\"\", {\"\": value});\n };\n }\n\n\n // If the JSON object does not yet have a parse method, give it one.\n\n if (typeof JSON.parse !== \"function\") {\n JSON.parse = (function () {\n\n // This function creates a JSON parse function that uses a state machine rather\n // than the dangerous eval function to parse a JSON text.\n\n var state; // The state of the parser, one of\n // 'go' The starting state\n // 'ok' The final, accepting state\n // 'firstokey' Ready for the first key of the object or\n // the closing of an empty object\n // 'okey' Ready for the next key of the object\n // 'colon' Ready for the colon\n // 'ovalue' Ready for the value half of a key/value pair\n // 'ocomma' Ready for a comma or closing }\n // 'firstavalue' Ready for the first value of an array or\n // an empty array\n // 'avalue' Ready for the next value of an array\n // 'acomma' Ready for a comma or closing ]\n var stack; // The stack, for controlling nesting.\n var container; // The current container object or array\n var key; // The current key\n var value; // The current value\n var escapes = { // Escapement translation table\n \"\\\\\": \"\\\\\",\n \"\\\"\": \"\\\"\",\n \"/\": \"/\",\n \"t\": \"\\t\",\n \"n\": \"\\n\",\n \"r\": \"\\r\",\n \"f\": \"\\f\",\n \"b\": \"\\b\"\n };\n var string = { // The actions for string tokens\n go: function () {\n state = \"ok\";\n },\n firstokey: function () {\n key = value;\n state = \"colon\";\n },\n okey: function () {\n key = value;\n state = \"colon\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var number = { // The actions for number tokens\n go: function () {\n state = \"ok\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var action = {\n\n // The action table describes the behavior of the machine. It contains an\n // object for each token. Each object contains a method that is called when\n // a token is matched in a state. An object will lack a method for illegal\n // states.\n\n \"{\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = {};\n state = \"firstokey\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = {};\n state = \"firstokey\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n }\n },\n \"}\": {\n firstokey: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n ocomma: function () {\n var pop = stack.pop();\n container[key] = value;\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \"[\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = [];\n state = \"firstavalue\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = [];\n state = \"firstavalue\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n }\n },\n \"]\": {\n firstavalue: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n acomma: function () {\n var pop = stack.pop();\n container.push(value);\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \":\": {\n colon: function () {\n if (Object.hasOwnProperty.call(container, key)) {\n throw new SyntaxError(\"Duplicate key '\" + key + \"\\\"\");\n }\n state = \"ovalue\";\n }\n },\n \",\": {\n ocomma: function () {\n container[key] = value;\n state = \"okey\";\n },\n acomma: function () {\n container.push(value);\n state = \"avalue\";\n }\n },\n \"true\": {\n go: function () {\n value = true;\n state = \"ok\";\n },\n ovalue: function () {\n value = true;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = true;\n state = \"acomma\";\n },\n avalue: function () {\n value = true;\n state = \"acomma\";\n }\n },\n \"false\": {\n go: function () {\n value = false;\n state = \"ok\";\n },\n ovalue: function () {\n value = false;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = false;\n state = \"acomma\";\n },\n avalue: function () {\n value = false;\n state = \"acomma\";\n }\n },\n \"null\": {\n go: function () {\n value = null;\n state = \"ok\";\n },\n ovalue: function () {\n value = null;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = null;\n state = \"acomma\";\n },\n avalue: function () {\n value = null;\n state = \"acomma\";\n }\n }\n };\n\n function debackslashify(text) {\n\n // Remove and replace any backslash escapement.\n\n return text.replace(/\\\\(?:u(.{4})|([^u]))/g, function (ignore, b, c) {\n return b\n ? String.fromCharCode(parseInt(b, 16))\n : escapes[c];\n });\n }\n\n return function (source, reviver) {\n\n // A regular expression is used to extract tokens from the JSON text.\n // The extraction process is cautious.\n\n var result;\n var tx = /^[\\u0020\\t\\n\\r]*(?:([,:\\[\\]{}]|true|false|null)|(-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)|\"((?:[^\\r\\n\\t\\\\\\\"]|\\\\(?:[\"\\\\\\/trnfb]|u[0-9a-fA-F]{4}))*)\")/;\n\n // Set the starting state.\n\n state = \"go\";\n\n // The stack records the container, key, and state for each object or array\n // that contains another object or array while processing nested structures.\n\n stack = [];\n\n // If any error occurs, we will catch it and ultimately throw a syntax error.\n\n try {\n\n // For each token...\n\n while (true) {\n result = tx.exec(source);\n if (!result) {\n break;\n }\n\n // result is the result array from matching the tokenizing regular expression.\n // result[0] contains everything that matched, including any initial whitespace.\n // result[1] contains any punctuation that was matched, or true, false, or null.\n // result[2] contains a matched number, still in string form.\n // result[3] contains a matched string, without quotes but with escapement.\n\n if (result[1]) {\n\n // Token: Execute the action for this state and token.\n\n action[result[1]][state]();\n\n } else if (result[2]) {\n\n // Number token: Convert the number string into a number value and execute\n // the action for this state and number.\n\n value = +result[2];\n number[state]();\n } else {\n\n // String token: Replace the escapement sequences and execute the action for\n // this state and string.\n\n value = debackslashify(result[3]);\n string[state]();\n }\n\n // Remove the token from the string. The loop will continue as long as there\n // are tokens. This is a slow process, but it allows the use of ^ matching,\n // which assures that no illegal tokens slip through.\n\n source = source.slice(result[0].length);\n }\n\n // If we find a state/token combination that is illegal, then the action will\n // cause an error. We handle the error by simply changing the state.\n\n } catch (e) {\n state = e;\n }\n\n // The parsing is finished. If we are not in the final \"ok\" state, or if the\n // remaining source contains anything except whitespace, then we did not have\n //a well-formed JSON text.\n\n if (state !== \"ok\" || (/[^\\u0020\\t\\n\\r]/.test(source))) {\n throw (state instanceof SyntaxError)\n ? state\n : new SyntaxError(\"JSON\");\n }\n\n // If there is a reviver function, we recursively walk the new structure,\n // passing each name/value pair to the reviver function for possible\n // transformation, starting with a temporary root object that holds the current\n // value in an empty key. If there is not a reviver function, we simply return\n // that value.\n\n return (typeof reviver === \"function\")\n ? (function walk(holder, key) {\n var k;\n var v;\n var val = holder[key];\n if (val && typeof val === \"object\") {\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(val, k)) {\n v = walk(val, k);\n if (v !== undefined) {\n val[k] = v;\n } else {\n delete val[k];\n }\n }\n }\n }\n return reviver.call(holder, key, val);\n }({\"\": value}, \"\"))\n : value;\n };\n }());\n }\n}\n\nmodule.exports = setupCustomJSON;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./vendor/JSON-js/json3.js\n// module id = 8\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Notifier - the internal object responsible for delegating between the client exposed API, the\n * chain of transforms necessary to turn an item into something that can be sent to Rollbar, and the\n * queue which handles the communcation with the Rollbar API servers.\n *\n * @param queue - an object that conforms to the interface: addItem(item, callback)\n * @param options - an object representing the options to be set for this notifier, this should have\n * any defaults already set by the caller\n */\nfunction Notifier(queue, options) {\n this.queue = queue;\n this.options = options;\n this.transforms = [];\n}\n\n/*\n * configure - updates the options for this notifier with the passed in object\n *\n * @param options - an object which gets merged with the current options set on this notifier\n * @returns this\n */\nNotifier.prototype.configure = function(options) {\n this.queue && this.queue.configure(options);\n var oldOptions = this.options;\n this.options = _.extend({}, oldOptions, options);\n return this;\n};\n\n/*\n * addTransform - adds a transform onto the end of the queue of transforms for this notifier\n *\n * @param transform - a function which takes three arguments:\n * * item: An Object representing the data to eventually be sent to Rollbar\n * * options: The current value of the options for this notifier\n * * callback: function(err: (Null|Error), item: (Null|Object)) the transform must call this\n * callback with a null value for error if it wants the processing chain to continue, otherwise\n * with an error to terminate the processing. The item should be the updated item after this\n * transform is finished modifying it.\n */\nNotifier.prototype.addTransform = function(transform) {\n if (_.isFunction(transform)) {\n this.transforms.push(transform);\n }\n return this;\n};\n\n/*\n * log - the internal log function which applies the configured transforms and then pushes onto the\n * queue to be sent to the backend.\n *\n * @param item - An object with the following structure:\n * message [String] - An optional string to be sent to rollbar\n * error [Error] - An optional error\n *\n * @param callback - A function of type function(err, resp) which will be called with exactly one\n * null argument and one non-null argument. The callback will be called once, either during the\n * transform stage if an error occurs inside a transform, or in response to the communication with\n * the backend. The second argument will be the response from the backend in case of success.\n */\nNotifier.prototype.log = function(item, callback) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!this.options.enabled) {\n return callback(new Error('Rollbar is not enabled'));\n }\n\n this.queue.addPendingItem(item);\n var originalError = item.err;\n this._applyTransforms(item, function(err, i) {\n if (err) {\n this.queue.removePendingItem(item);\n return callback(err, null);\n }\n this.queue.addItem(i, callback, originalError, item);\n }.bind(this));\n};\n\n/* Internal */\n\n/*\n * _applyTransforms - Applies the transforms that have been added to this notifier sequentially. See\n * `addTransform` for more information.\n *\n * @param item - An item to be transformed\n * @param callback - A function of type function(err, item) which will be called with a non-null\n * error and a null item in the case of a transform failure, or a null error and non-null item after\n * all transforms have been applied.\n */\nNotifier.prototype._applyTransforms = function(item, callback) {\n var transformIndex = -1;\n var transformsLength = this.transforms.length;\n var transforms = this.transforms;\n var options = this.options;\n\n var cb = function(err, i) {\n if (err) {\n callback(err, null);\n return;\n }\n\n transformIndex++;\n\n if (transformIndex === transformsLength) {\n callback(null, i);\n return;\n }\n\n transforms[transformIndex](i, options, cb);\n };\n\n cb(null, item);\n};\n\nmodule.exports = Notifier;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/notifier.js\n// module id = 9\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nvar MAX_EVENTS = 100;\n\nfunction Telemeter(options) {\n this.queue = [];\n this.options = _.extend(true, {}, options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n this.maxQueueSize = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n}\n\nTelemeter.prototype.configure = function(options) {\n var oldOptions = this.options;\n this.options = _.extend(true, {}, oldOptions, options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n var newMaxEvents = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n var deleteCount = 0;\n if (this.maxQueueSize > newMaxEvents) {\n deleteCount = this.maxQueueSize - newMaxEvents;\n }\n this.maxQueueSize = newMaxEvents;\n this.queue.splice(0, deleteCount);\n};\n\nTelemeter.prototype.copyEvents = function() {\n return Array.prototype.slice.call(this.queue, 0);\n};\n\nTelemeter.prototype.capture = function(type, metadata, level, rollbarUUID, timestamp) {\n var e = {\n level: getLevel(type, level),\n type: type,\n timestamp_ms: timestamp || _.now(),\n body: metadata,\n source: 'client'\n };\n if (rollbarUUID) {\n e.uuid = rollbarUUID;\n }\n\n try {\n if (_.isFunction(this.options.filterTelemetry) && this.options.filterTelemetry(e)) {\n return false;\n }\n } catch (e) {\n this.options.filterTelemetry = null;\n }\n\n this.push(e);\n return e;\n};\n\nTelemeter.prototype.captureEvent = function(metadata, level, rollbarUUID) {\n return this.capture('manual', metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.captureError = function(err, level, rollbarUUID, timestamp) {\n var metadata = {\n message: err.message || String(err)\n };\n if (err.stack) {\n metadata.stack = err.stack;\n }\n return this.capture('error', metadata, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureLog = function(message, level, rollbarUUID, timestamp) {\n return this.capture('log', {\n message: message\n }, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureNetwork = function(metadata, subtype, rollbarUUID, requestData) {\n subtype = subtype || 'xhr';\n metadata.subtype = metadata.subtype || subtype;\n if (requestData) {\n metadata.request = requestData;\n }\n var level = this.levelFromStatus(metadata.status_code);\n return this.capture('network', metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.levelFromStatus = function(statusCode) {\n if (statusCode >= 200 && statusCode < 400) {\n return 'info';\n }\n if (statusCode === 0 || statusCode >= 400) {\n return 'error';\n }\n return 'info';\n};\n\nTelemeter.prototype.captureDom = function(subtype, element, value, checked, rollbarUUID) {\n var metadata = {\n subtype: subtype,\n element: element\n };\n if (value !== undefined) {\n metadata.value = value;\n }\n if (checked !== undefined) {\n metadata.checked = checked;\n }\n return this.capture('dom', metadata, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureNavigation = function(from, to, rollbarUUID) {\n return this.capture('navigation', {from: from, to: to}, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureDomContentLoaded = function(ts) {\n return this.capture('navigation', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n */\n};\nTelemeter.prototype.captureLoad = function(ts) {\n return this.capture('navigation', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n */\n};\n\nTelemeter.prototype.captureConnectivityChange = function(type, rollbarUUID) {\n return this.captureNetwork({change: type}, 'connectivity', rollbarUUID);\n};\n\n// Only intended to be used internally by the notifier\nTelemeter.prototype._captureRollbarItem = function(item) {\n if (!this.options.includeItemsInTelemetry) {\n return;\n }\n if (item.err) {\n return this.captureError(item.err, item.level, item.uuid, item.timestamp);\n }\n if (item.message) {\n return this.captureLog(item.message, item.level, item.uuid, item.timestamp);\n }\n if (item.custom) {\n return this.capture('log', item.custom, item.level, item.uuid, item.timestamp);\n }\n};\n\nTelemeter.prototype.push = function(e) {\n this.queue.push(e);\n if (this.queue.length > this.maxQueueSize) {\n this.queue.shift();\n }\n};\n\nfunction getLevel(type, level) {\n if (level) {\n return level;\n }\n var defaultLevel = {\n error: 'error',\n manual: 'info'\n };\n return defaultLevel[type] || 'info';\n}\n\nmodule.exports = Telemeter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/telemetry.js\n// module id = 10\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\nvar helpers = require('./apiUtility');\n\nvar defaultOptions = {\n hostname: 'api.rollbar.com',\n path: '/api/1/item/',\n search: null,\n version: '1',\n protocol: 'https:',\n port: 443\n};\n\n/**\n * Api is an object that encapsulates methods of communicating with\n * the Rollbar API. It is a standard interface with some parts implemented\n * differently for server or browser contexts. It is an object that should\n * be instantiated when used so it can contain non-global options that may\n * be different for another instance of RollbarApi.\n *\n * @param options {\n * accessToken: the accessToken to use for posting items to rollbar\n * endpoint: an alternative endpoint to send errors to\n * must be a valid, fully qualified URL.\n * The default is: https://api.rollbar.com/api/1/item\n * proxy: if you wish to proxy requests provide an object\n * with the following keys:\n * host or hostname (required): foo.example.com\n * port (optional): 123\n * protocol (optional): https\n * }\n */\nfunction Api(options, t, u, j) {\n this.options = options;\n this.transport = t;\n this.url = u;\n this.jsonBackup = j;\n this.accessToken = options.accessToken;\n this.transportOptions = _getTransport(options, u);\n}\n\n/**\n *\n * @param data\n * @param callback\n */\nApi.prototype.postItem = function(data, callback) {\n var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n this.transport.post(this.accessToken, transportOptions, payload, callback);\n};\n\nApi.prototype.configure = function(options) {\n var oldOptions = this.oldOptions;\n this.options = _.extend(true, {}, oldOptions, options);\n this.transportOptions = _getTransport(this.options, this.url);\n if (this.options.accessToken !== undefined) {\n this.accessToken = this.options.accessToken;\n }\n return this;\n};\n\nfunction _getTransport(options, url) {\n return helpers.getTransportFromOptions(options, defaultOptions, url);\n}\n\nmodule.exports = Api;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/api.js\n// module id = 11\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction buildPayload(accessToken, data, jsonBackup) {\n if (!_.isType(data.context, 'string')) {\n var contextResult = _.stringify(data.context, jsonBackup);\n if (contextResult.error) {\n data.context = 'Error: could not serialize \\'context\\'';\n } else {\n data.context = contextResult.value || '';\n }\n if (data.context.length > 255) {\n data.context = data.context.substr(0, 255);\n }\n }\n return {\n access_token: accessToken,\n data: data\n };\n}\n\nfunction getTransportFromOptions(options, defaults, url) {\n var hostname = defaults.hostname;\n var protocol = defaults.protocol;\n var port = defaults.port;\n var path = defaults.path;\n var search = defaults.search;\n\n var proxy = options.proxy;\n if (options.endpoint) {\n var opts = url.parse(options.endpoint);\n hostname = opts.hostname;\n protocol = opts.protocol;\n port = opts.port;\n path = opts.pathname;\n search = opts.search;\n }\n return {\n hostname: hostname,\n protocol: protocol,\n port: port,\n path: path,\n search: search,\n proxy: proxy\n };\n}\n\nfunction transportOptions(transport, method) {\n var protocol = transport.protocol || 'https:';\n var port = transport.port || (protocol === 'http:' ? 80 : protocol === 'https:' ? 443 : undefined);\n var hostname = transport.hostname;\n var path = transport.path;\n if (transport.search) {\n path = path + transport.search;\n }\n if (transport.proxy) {\n path = protocol + '//' + hostname + path;\n hostname = transport.proxy.host || transport.proxy.hostname;\n port = transport.proxy.port;\n protocol = transport.proxy.protocol || protocol;\n }\n return {\n protocol: protocol,\n hostname: hostname,\n path: path,\n port: port,\n method: method\n };\n}\n\nfunction appendPathToPath(base, path) {\n var baseTrailingSlash = /\\/$/.test(base);\n var pathBeginningSlash = /^\\//.test(path);\n\n if (baseTrailingSlash && pathBeginningSlash) {\n path = path.substring(1);\n } else if (!baseTrailingSlash && !pathBeginningSlash) {\n path = '/' + path;\n }\n\n return base + path;\n}\n\nmodule.exports = {\n buildPayload: buildPayload,\n getTransportFromOptions: getTransportFromOptions,\n transportOptions: transportOptions,\n appendPathToPath: appendPathToPath\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/apiUtility.js\n// module id = 12\n// module chunks = 0","'use strict';\n\n/* eslint-disable no-console */\nrequire('console-polyfill');\nvar detection = require('./detection');\nvar _ = require('../utility');\n\nfunction error() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.error(_.formatArgsAsString(args));\n } else {\n console.error.apply(console, args);\n }\n}\n\nfunction info() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.info(_.formatArgsAsString(args));\n } else {\n console.info.apply(console, args);\n }\n}\n\nfunction log() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.log(_.formatArgsAsString(args));\n } else {\n console.log.apply(console, args);\n }\n}\n\n/* eslint-enable no-console */\n\nmodule.exports = {\n error: error,\n info: info,\n log: log\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/logger.js\n// module id = 13\n// module chunks = 0","// Console-polyfill. MIT license.\n// https://github.com/paulmillr/console-polyfill\n// Make it safe to do console.log() always.\n(function(global) {\n 'use strict';\n if (!global.console) {\n global.console = {};\n }\n var con = global.console;\n var prop, method;\n var dummy = function() {};\n var properties = ['memory'];\n var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' +\n 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' +\n 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',');\n while (prop = properties.pop()) if (!con[prop]) con[prop] = {};\n while (method = methods.pop()) if (!con[method]) con[method] = dummy;\n // Using `this` for web workers & supports Browserify / Webpack.\n})(typeof window === 'undefined' ? this : window);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/console-polyfill/index.js\n// module id = 14\n// module chunks = 0","'use strict';\n\n// This detection.js module is used to encapsulate any ugly browser/feature\n// detection we may need to do.\n\n// Figure out which version of IE we're using, if any.\n// This is gleaned from http://stackoverflow.com/questions/5574842/best-way-to-check-for-ie-less-than-9-in-javascript-without-library\n// Will return an integer on IE (i.e. 8)\n// Will return undefined otherwise\nfunction getIEVersion() {\n\tvar undef;\n\tif (!document) {\n\t\treturn undef;\n\t}\n\n var v = 3,\n div = document.createElement('div'),\n all = div.getElementsByTagName('i');\n\n while (\n div.innerHTML = '',\n all[0]\n );\n\n return v > 4 ? v : undef;\n}\n\nvar Detection = {\n ieVersion: getIEVersion\n};\n\nmodule.exports = Detection;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/detection.js\n// module id = 15\n// module chunks = 0","'use strict';\n\nfunction captureUncaughtExceptions(window, handler, shim) {\n if (!window) { return; }\n var oldOnError;\n\n if (typeof handler._rollbarOldOnError === 'function') {\n oldOnError = handler._rollbarOldOnError;\n } else if (window.onerror && !window.onerror.belongsToShim) {\n oldOnError = window.onerror;\n handler._rollbarOldOnError = oldOnError;\n }\n\n var fn = function() {\n var args = Array.prototype.slice.call(arguments, 0);\n _rollbarWindowOnError(window, handler, oldOnError, args);\n };\n fn.belongsToShim = shim;\n window.onerror = fn;\n}\n\nfunction _rollbarWindowOnError(window, r, old, args) {\n if (window._rollbarWrappedError) {\n if (!args[4]) {\n args[4] = window._rollbarWrappedError;\n }\n if (!args[5]) {\n args[5] = window._rollbarWrappedError._rollbarContext;\n }\n window._rollbarWrappedError = null;\n }\n\n r.handleUncaughtException.apply(r, args);\n if (old) {\n old.apply(window, args);\n }\n}\n\nfunction captureUnhandledRejections(window, handler, shim) {\n if (!window) { return; }\n\n if (typeof window._rollbarURH === 'function' && window._rollbarURH.belongsToShim) {\n window.removeEventListener('unhandledrejection', window._rollbarURH);\n }\n\n var rejectionHandler = function (evt) {\n var reason, promise, detail;\n try {\n reason = evt.reason;\n } catch (e) {\n reason = undefined;\n }\n try {\n promise = evt.promise;\n } catch (e) {\n promise = '[unhandledrejection] error getting `promise` from event';\n }\n try {\n detail = evt.detail;\n if (!reason && detail) {\n reason = detail.reason;\n promise = detail.promise;\n }\n } catch (e) {\n detail = '[unhandledrejection] error getting `detail` from event';\n }\n if (!reason) {\n reason = '[unhandledrejection] error getting `reason` from event';\n }\n\n if (handler && handler.handleUnhandledRejection) {\n handler.handleUnhandledRejection(reason, promise);\n }\n };\n rejectionHandler.belongsToShim = shim;\n window._rollbarURH = rejectionHandler;\n window.addEventListener('unhandledrejection', rejectionHandler);\n}\n\nfunction wrapGlobals(window, handler, shim) {\n if (!window) { return; }\n // Adapted from https://github.com/bugsnag/bugsnag-js\n var globals = 'EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload'.split(',');\n var i, global;\n for (i = 0; i < globals.length; ++i) {\n global = globals[i];\n\n if (window[global] && window[global].prototype) {\n _extendListenerPrototype(handler, window[global].prototype, shim);\n }\n }\n}\n\nfunction _extendListenerPrototype(handler, prototype, shim) {\n if (prototype.hasOwnProperty && prototype.hasOwnProperty('addEventListener')) {\n var oldAddEventListener = prototype.addEventListener;\n while (oldAddEventListener._rollbarOldAdd && oldAddEventListener.belongsToShim) {\n oldAddEventListener = oldAddEventListener._rollbarOldAdd;\n }\n var addFn = function(event, callback, bubble) {\n oldAddEventListener.call(this, event, handler.wrap(callback), bubble);\n };\n addFn._rollbarOldAdd = oldAddEventListener;\n addFn.belongsToShim = shim;\n prototype.addEventListener = addFn;\n\n var oldRemoveEventListener = prototype.removeEventListener;\n while (oldRemoveEventListener._rollbarOldRemove && oldRemoveEventListener.belongsToShim) {\n oldRemoveEventListener = oldRemoveEventListener._rollbarOldRemove;\n }\n var removeFn = function(event, callback, bubble) {\n oldRemoveEventListener.call(this, event, callback && callback._rollbar_wrapped || callback, bubble);\n };\n removeFn._rollbarOldRemove = oldRemoveEventListener;\n removeFn.belongsToShim = shim;\n prototype.removeEventListener = removeFn;\n }\n}\n\nmodule.exports = {\n captureUncaughtExceptions: captureUncaughtExceptions,\n captureUnhandledRejections: captureUnhandledRejections,\n wrapGlobals: wrapGlobals\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/globalSetup.js\n// module id = 16\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar logger = require('./logger');\n\n/*\n * accessToken may be embedded in payload but that should not\n * be assumed\n *\n * options: {\n * hostname\n * protocol\n * path\n * port\n * method\n * }\n *\n * params is an object containing key/value pairs. These\n * will be appended to the path as 'key=value&key=value'\n *\n * payload is an unserialized object\n */\n\nfunction get(accessToken, options, params, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n _.addParamsAndAccessTokenToPath(accessToken, options, params);\n\n var method = 'GET';\n var url = _.formatUrl(options);\n _makeRequest(accessToken, url, method, null, callback, requestFactory);\n}\n\nfunction post(accessToken, options, payload, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!payload) {\n return callback(new Error('Cannot send empty request'));\n }\n\n var stringifyResult = _.stringify(payload);\n if (stringifyResult.error) {\n return callback(stringifyResult.error);\n }\n\n var writeData = stringifyResult.value;\n var method = 'POST';\n var url = _.formatUrl(options);\n _makeRequest(accessToken, url, method, writeData, callback, requestFactory);\n}\n\nfunction _makeRequest(accessToken, url, method, data, callback, requestFactory) {\n var request;\n if (requestFactory) {\n request = requestFactory();\n } else {\n request = _createXMLHTTPObject();\n }\n if (!request) {\n // Give up, no way to send requests\n return callback(new Error('No way to send a request'));\n }\n try {\n try {\n var onreadystatechange = function() {\n try {\n if (onreadystatechange && request.readyState === 4) {\n onreadystatechange = undefined;\n\n var parseResponse = _.jsonParse(request.responseText);\n if (_isSuccess(request)) {\n callback(parseResponse.error, parseResponse.value);\n return;\n } else if (_isNormalFailure(request)) {\n if (request.status === 403) {\n // likely caused by using a server access token\n var message = parseResponse.value && parseResponse.value.message;\n logger.error(message);\n }\n // return valid http status codes\n callback(new Error(String(request.status)));\n } else {\n // IE will return a status 12000+ on some sort of connection failure,\n // so we return a blank error\n // http://msdn.microsoft.com/en-us/library/aa383770%28VS.85%29.aspx\n var msg = 'XHR response had no status code (likely connection failure)';\n callback(_newRetriableError(msg));\n }\n }\n } catch (ex) {\n //jquery source mentions firefox may error out while accessing the\n //request members if there is a network error\n //https://github.com/jquery/jquery/blob/a938d7b1282fc0e5c52502c225ae8f0cef219f0a/src/ajax/xhr.js#L111\n var exc;\n if (ex && ex.stack) {\n exc = ex;\n } else {\n exc = new Error(ex);\n }\n callback(exc);\n }\n };\n\n request.open(method, url, true);\n if (request.setRequestHeader) {\n request.setRequestHeader('Content-Type', 'application/json');\n request.setRequestHeader('X-Rollbar-Access-Token', accessToken);\n }\n request.onreadystatechange = onreadystatechange;\n request.send(data);\n } catch (e1) {\n // Sending using the normal xmlhttprequest object didn't work, try XDomainRequest\n if (typeof XDomainRequest !== 'undefined') {\n\n // Assume we are in a really old browser which has a bunch of limitations:\n // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\n // Extreme paranoia: if we have XDomainRequest then we have a window, but just in case\n if (!window || !window.location) {\n return callback(new Error('No window available during request, unknown environment'));\n }\n\n // If the current page is http, try and send over http\n if (window.location.href.substring(0, 5) === 'http:' && url.substring(0, 5) === 'https') {\n url = 'http' + url.substring(5);\n }\n\n var xdomainrequest = new XDomainRequest();\n xdomainrequest.onprogress = function() {};\n xdomainrequest.ontimeout = function() {\n var msg = 'Request timed out';\n var code = 'ETIMEDOUT';\n callback(_newRetriableError(msg, code));\n };\n xdomainrequest.onerror = function() {\n callback(new Error('Error during request'));\n };\n xdomainrequest.onload = function() {\n var parseResponse = _.jsonParse(xdomainrequest.responseText);\n callback(parseResponse.error, parseResponse.value);\n };\n xdomainrequest.open(method, url, true);\n xdomainrequest.send(data);\n } else {\n callback(new Error('Cannot find a method to transport a request'));\n }\n }\n } catch (e2) {\n callback(e2);\n }\n}\n\nfunction _createXMLHTTPObject() {\n /* global ActiveXObject:false */\n\n var factories = [\n function () {\n return new XMLHttpRequest();\n },\n function () {\n return new ActiveXObject('Msxml2.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Msxml3.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Microsoft.XMLHTTP');\n }\n ];\n var xmlhttp;\n var i;\n var numFactories = factories.length;\n for (i = 0; i < numFactories; i++) {\n /* eslint-disable no-empty */\n try {\n xmlhttp = factories[i]();\n break;\n } catch (e) {\n // pass\n }\n /* eslint-enable no-empty */\n }\n return xmlhttp;\n}\n\nfunction _isSuccess(r) {\n return r && r.status && r.status === 200;\n}\n\nfunction _isNormalFailure(r) {\n return r && _.isType(r.status, 'number') && r.status >= 400 && r.status < 600;\n}\n\nfunction _newRetriableError(message, code) {\n var err = new Error(message);\n err.code = code || 'ENOTFOUND';\n return err;\n}\n\nmodule.exports = {\n get: get,\n post: post\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transport.js\n// module id = 17\n// module chunks = 0","'use strict';\n\n// See https://nodejs.org/docs/latest/api/url.html\nfunction parse(url) {\n var result = {\n protocol: null, auth: null, host: null, path: null,\n hash: null, href: url, hostname: null, port: null,\n pathname: null, search: null, query: null\n };\n\n var i, last;\n i = url.indexOf('//');\n if (i !== -1) {\n result.protocol = url.substring(0,i);\n last = i+2;\n } else {\n last = 0;\n }\n \n i = url.indexOf('@', last);\n if (i !== -1) {\n result.auth = url.substring(last, i);\n last = i+1;\n }\n\n i = url.indexOf('/', last);\n if (i === -1) {\n i = url.indexOf('?', last);\n if (i === -1) {\n i = url.indexOf('#', last);\n if (i === -1) {\n result.host = url.substring(last);\n } else {\n result.host = url.substring(last, i);\n result.hash = url.substring(i);\n }\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n return result;\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n\n i = url.indexOf('#', last);\n if (i === -1) {\n result.path = url.substring(last);\n } else {\n result.path = url.substring(last, i);\n result.hash = url.substring(i);\n }\n\n if (result.path) {\n var pathParts = result.path.split('?');\n result.pathname = pathParts[0];\n result.query = pathParts[1];\n result.search = result.query ? '?' + result.query : null;\n }\n return result;\n}\n\nmodule.exports = {\n parse: parse\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/url.js\n// module id = 18\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar errorParser = require('./errorParser');\nvar logger = require('./logger');\n\nfunction handleItemWithError(item, options, callback) {\n item.data = item.data || {};\n if (item.err) {\n try {\n item.stackInfo = item.err._savedStackTrace || errorParser.parse(item.err);\n } catch (e)\n /* istanbul ignore next */\n {\n logger.error('Error while parsing the error object.', e);\n item.message = item.err.message || item.err.description || item.message || String(item.err);\n delete item.err;\n }\n }\n callback(null, item);\n}\n\nfunction ensureItemHasSomethingToSay(item, options, callback) {\n if (!item.message && !item.stackInfo && !item.custom) {\n callback(new Error('No message, stack info, or custom data'), null);\n }\n callback(null, item);\n}\n\nfunction addBaseInfo(item, options, callback) {\n var environment = (options.payload && options.payload.environment) || options.environment;\n item.data = _.extend(true, {}, item.data, {\n environment: environment,\n level: item.level,\n endpoint: options.endpoint,\n platform: 'browser',\n framework: 'browser-js',\n language: 'javascript',\n server: {},\n uuid: item.uuid,\n notifier: {\n name: 'rollbar-browser-js',\n version: options.version\n }\n });\n callback(null, item);\n}\n\nfunction addRequestInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.location) {\n return callback(null, item);\n }\n var remoteString = '$remote_ip';\n if (!options.captureIp) {\n remoteString = null;\n } else if (options.captureIp !== true) {\n remoteString += '_anonymize';\n }\n _.set(item, 'data.request', {\n url: window.location.href,\n query_string: window.location.search,\n user_ip: remoteString\n });\n callback(null, item);\n };\n}\n\nfunction addClientInfo(window) {\n return function(item, options, callback) {\n if (!window) {\n return callback(null, item);\n }\n var nav = window.navigator || {};\n var scr = window.screen || {};\n _.set(item, 'data.client', {\n runtime_ms: item.timestamp - window._rollbarStartTime,\n timestamp: Math.round(item.timestamp / 1000),\n javascript: {\n browser: nav.userAgent,\n language: nav.language,\n cookie_enabled: nav.cookieEnabled,\n screen: {\n width: scr.width,\n height: scr.height\n }\n }\n });\n callback(null, item);\n };\n}\n\nfunction addPluginInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.navigator) {\n return callback(null, item);\n }\n var plugins = [];\n var navPlugins = window.navigator.plugins || [];\n var cur;\n for (var i=0, l=navPlugins.length; i < l; ++i) {\n cur = navPlugins[i];\n plugins.push({name: cur.name, description: cur.description});\n }\n _.set(item, 'data.client.javascript.plugins', plugins);\n callback(null, item);\n };\n}\n\nfunction addBody(item, options, callback) {\n if (item.stackInfo) {\n addBodyTrace(item, options, callback);\n } else {\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction addBodyMessage(item, options, callback) {\n var message = item.message;\n var custom = item.custom;\n\n if (!message) {\n if (custom) {\n var scrubFields = options.scrubFields;\n var messageResult = _.stringify(_.scrub(custom, scrubFields));\n message = messageResult.error || messageResult.value || '';\n } else {\n message = '';\n }\n }\n var result = {\n body: message\n };\n\n if (custom) {\n result.extra = _.extend(true, {}, custom);\n }\n\n _.set(item, 'data.body', {message: result});\n callback(null, item);\n}\n\n\nfunction addBodyTrace(item, options, callback) {\n var description = item.data.description;\n var stackInfo = item.stackInfo;\n var custom = item.custom;\n\n var guess = errorParser.guessErrorClass(stackInfo.message);\n var className = stackInfo.name || guess[0];\n var message = guess[1];\n var trace = {\n exception: {\n 'class': className,\n message: message\n }\n };\n\n if (description) {\n trace.exception.description = description;\n }\n\n // Transform a TraceKit stackInfo object into a Rollbar trace\n var stack = stackInfo.stack;\n if (stack && stack.length === 0 && item._unhandledStackInfo && item._unhandledStackInfo.stack) {\n stack = item._unhandledStackInfo.stack;\n }\n if (stack) {\n if (stack.length === 0) {\n trace.exception.stack = stackInfo.rawStack;\n trace.exception.raw = String(stackInfo.rawException);\n }\n var stackFrame;\n var frame;\n var code;\n var pre;\n var post;\n var contextLength;\n var i, mid;\n\n trace.frames = [];\n for (i = 0; i < stack.length; ++i) {\n stackFrame = stack[i];\n frame = {\n filename: stackFrame.url ? _.sanitizeUrl(stackFrame.url) : '(unknown)',\n lineno: stackFrame.line || null,\n method: (!stackFrame.func || stackFrame.func === '?') ? '[anonymous]' : stackFrame.func,\n colno: stackFrame.column\n };\n if (frame.method && frame.method.endsWith && frame.method.endsWith('_rollbar_wrapped')) {\n continue;\n }\n\n code = pre = post = null;\n contextLength = stackFrame.context ? stackFrame.context.length : 0;\n if (contextLength) {\n mid = Math.floor(contextLength / 2);\n pre = stackFrame.context.slice(0, mid);\n code = stackFrame.context[mid];\n post = stackFrame.context.slice(mid);\n }\n\n if (code) {\n frame.code = code;\n }\n\n if (pre || post) {\n frame.context = {};\n if (pre && pre.length) {\n frame.context.pre = pre;\n }\n if (post && post.length) {\n frame.context.post = post;\n }\n }\n\n if (stackFrame.args) {\n frame.args = stackFrame.args;\n }\n\n trace.frames.push(frame);\n }\n\n // NOTE(cory): reverse the frames since rollbar.com expects the most recent call last\n trace.frames.reverse();\n\n if (custom) {\n trace.extra = _.extend(true, {}, custom);\n }\n _.set(item, 'data.body', {trace: trace});\n callback(null, item);\n } else {\n item.message = className + ': ' + message;\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction scrubPayload(item, options, callback) {\n var scrubFields = options.scrubFields;\n item.data = _.scrub(item.data, scrubFields);\n callback(null, item);\n}\n\nmodule.exports = {\n handleItemWithError: handleItemWithError,\n ensureItemHasSomethingToSay: ensureItemHasSomethingToSay,\n addBaseInfo: addBaseInfo,\n addRequestInfo: addRequestInfo,\n addClientInfo: addClientInfo,\n addPluginInfo: addPluginInfo,\n addBody: addBody,\n scrubPayload: scrubPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transforms.js\n// module id = 19\n// module chunks = 0","'use strict';\n\nvar ErrorStackParser = require('error-stack-parser');\n\nvar UNKNOWN_FUNCTION = '?';\nvar ERR_CLASS_REGEXP = new RegExp('^(([a-zA-Z0-9-_$ ]*): *)?(Uncaught )?([a-zA-Z0-9-_$ ]*): ');\n\nfunction guessFunctionName() {\n return UNKNOWN_FUNCTION;\n}\n\n\nfunction gatherContext() {\n return null;\n}\n\n\nfunction Frame(stackFrame) {\n var data = {};\n\n data._stackFrame = stackFrame;\n\n data.url = stackFrame.fileName;\n data.line = stackFrame.lineNumber;\n data.func = stackFrame.functionName;\n data.column = stackFrame.columnNumber;\n data.args = stackFrame.args;\n\n data.context = gatherContext(data.url, data.line);\n\n return data;\n}\n\n\nfunction Stack(exception) {\n function getStack() {\n var parserStack = [];\n var exc;\n\n if (!exception.stack) {\n try {\n throw exception;\n } catch (e) {\n exc = e;\n }\n } else {\n exc = exception;\n }\n\n try {\n parserStack = ErrorStackParser.parse(exc);\n } catch(e) {\n parserStack = [];\n }\n\n var stack = [];\n\n for (var i = 0; i < parserStack.length; i++) {\n stack.push(new Frame(parserStack[i]));\n }\n\n return stack;\n }\n\n return {\n stack: getStack(),\n message: exception.message,\n name: exception.name,\n rawStack: exception.stack,\n rawException: exception\n };\n}\n\n\nfunction parse(e) {\n return new Stack(e);\n}\n\n\nfunction guessErrorClass(errMsg) {\n if (!errMsg || !errMsg.match) {\n return ['Unknown error. There was no error message to display.', ''];\n }\n var errClassMatch = errMsg.match(ERR_CLASS_REGEXP);\n var errClass = '(unknown)';\n\n if (errClassMatch) {\n errClass = errClassMatch[errClassMatch.length - 1];\n errMsg = errMsg.replace((errClassMatch[errClassMatch.length - 2] || '') + errClass + ':', '');\n errMsg = errMsg.replace(/(^[\\s]+|[\\s]+$)/g, '');\n }\n return [errClass, errMsg];\n}\n\n\nmodule.exports = {\n guessFunctionName: guessFunctionName,\n guessErrorClass: guessErrorClass,\n gatherContext: gatherContext,\n parse: parse,\n Stack: Stack,\n Frame: Frame\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/errorParser.js\n// module id = 20\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = locationParts[0] === 'eval' ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/error-stack-parser.js\n// module id = 21\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stackframe', [], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.StackFrame = factory();\n }\n}(this, function () {\n 'use strict';\n function _isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n function StackFrame(functionName, args, fileName, lineNumber, columnNumber, source) {\n if (functionName !== undefined) {\n this.setFunctionName(functionName);\n }\n if (args !== undefined) {\n this.setArgs(args);\n }\n if (fileName !== undefined) {\n this.setFileName(fileName);\n }\n if (lineNumber !== undefined) {\n this.setLineNumber(lineNumber);\n }\n if (columnNumber !== undefined) {\n this.setColumnNumber(columnNumber);\n }\n if (source !== undefined) {\n this.setSource(source);\n }\n }\n\n StackFrame.prototype = {\n getFunctionName: function () {\n return this.functionName;\n },\n setFunctionName: function (v) {\n this.functionName = String(v);\n },\n\n getArgs: function () {\n return this.args;\n },\n setArgs: function (v) {\n if (Object.prototype.toString.call(v) !== '[object Array]') {\n throw new TypeError('Args must be an Array');\n }\n this.args = v;\n },\n\n // NOTE: Property name may be misleading as it includes the path,\n // but it somewhat mirrors V8's JavaScriptStackTraceApi\n // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's\n // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14\n getFileName: function () {\n return this.fileName;\n },\n setFileName: function (v) {\n this.fileName = String(v);\n },\n\n getLineNumber: function () {\n return this.lineNumber;\n },\n setLineNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Line Number must be a Number');\n }\n this.lineNumber = Number(v);\n },\n\n getColumnNumber: function () {\n return this.columnNumber;\n },\n setColumnNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Column Number must be a Number');\n }\n this.columnNumber = Number(v);\n },\n\n getSource: function () {\n return this.source;\n },\n setSource: function (v) {\n this.source = String(v);\n },\n\n toString: function() {\n var functionName = this.getFunctionName() || '{anonymous}';\n var args = '(' + (this.getArgs() || []).join(',') + ')';\n var fileName = this.getFileName() ? ('@' + this.getFileName()) : '';\n var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : '';\n var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : '';\n return functionName + args + fileName + lineNumber + columnNumber;\n }\n };\n\n return StackFrame;\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/~/stackframe/stackframe.js\n// module id = 22\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction itemToPayload(item, options, callback) {\n var payloadOptions = options.payload || {};\n if (payloadOptions.body) {\n delete payloadOptions.body;\n }\n\n var data = _.extend(true, {}, item.data, payloadOptions);\n if (item._isUncaught) {\n data._isUncaught = true;\n }\n if (item._originalArgs) {\n data._originalArgs = item._originalArgs;\n }\n callback(null, data);\n}\n\nfunction addTelemetryData(item, options, callback) {\n if (item.telemetryEvents) {\n _.set(item, 'data.body.telemetry', item.telemetryEvents);\n }\n callback(null, item);\n}\n\nfunction addMessageWithError(item, options, callback) {\n if (!item.message) {\n callback(null, item);\n return;\n }\n var tracePath = 'data.body.trace_chain.0';\n var trace = _.get(item, tracePath);\n if (!trace) {\n tracePath = 'data.body.trace';\n trace = _.get(item, tracePath);\n }\n if (trace) {\n if (!(trace.exception && trace.exception.description)) {\n _.set(item, tracePath+'.exception.description', item.message);\n callback(null, item);\n return;\n }\n var extra = _.get(item, tracePath+'.extra') || {};\n var newExtra = _.extend(true, {}, extra, {message: item.message});\n _.set(item, tracePath+'.extra', newExtra);\n }\n callback(null, item);\n}\n\nfunction userTransform(logger) {\n return function(item, options, callback) {\n var newItem = _.extend(true, {}, item);\n try {\n if (_.isFunction(options.transform)) {\n options.transform(newItem.data);\n }\n } catch (e) {\n options.transform = null;\n logger.error('Error while calling custom transform() function. Removing custom transform().', e);\n callback(null, item);\n return;\n }\n callback(null, newItem);\n }\n}\n\nfunction addConfigToPayload(item, options, callback) {\n if (!options.sendConfig) {\n return callback(null, item);\n }\n var configKey = '_rollbarConfig';\n var custom = _.get(item, 'data.custom') || {};\n custom[configKey] = options;\n item.data.custom = custom;\n callback(null, item);\n}\n\nmodule.exports = {\n itemToPayload: itemToPayload,\n addTelemetryData: addTelemetryData,\n addMessageWithError: addMessageWithError,\n userTransform: userTransform,\n addConfigToPayload: addConfigToPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/transforms.js\n// module id = 23\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\n\nfunction checkIgnore(item, settings) {\n if (_.get(settings, 'plugins.jquery.ignoreAjaxErrors')) {\n return !_.get(item, 'body.message.extra.isAjax');\n }\n return true;\n}\n\nmodule.exports = {\n checkIgnore: checkIgnore\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/predicates.js\n// module id = 24\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction checkLevel(item, settings) {\n var level = item.level;\n var levelVal = _.LEVELS[level] || 0;\n var reportLevel = settings.reportLevel;\n var reportLevelVal = _.LEVELS[reportLevel] || 0;\n\n if (levelVal < reportLevelVal) {\n return false;\n }\n return true;\n}\n\nfunction userCheckIgnore(logger) {\n return function(item, settings) {\n var isUncaught = !!item._isUncaught;\n delete item._isUncaught;\n var args = item._originalArgs;\n delete item._originalArgs;\n try {\n if (_.isFunction(settings.onSendCallback)) {\n settings.onSendCallback(isUncaught, args, item);\n }\n } catch (e) {\n settings.onSendCallback = null;\n logger.error('Error while calling onSendCallback, removing', e);\n }\n try {\n if (_.isFunction(settings.checkIgnore) && settings.checkIgnore(isUncaught, args, item)) {\n return false;\n }\n } catch (e) {\n settings.checkIgnore = null;\n logger.error('Error while calling custom checkIgnore(), removing', e);\n }\n return true;\n }\n}\n\nfunction urlIsNotBlacklisted(logger) {\n return function(item, settings) {\n return !urlIsOnAList(item, settings, 'blacklist', logger);\n }\n}\n\nfunction urlIsWhitelisted(logger) {\n return function(item, settings) {\n return urlIsOnAList(item, settings, 'whitelist', logger);\n }\n}\n\nfunction urlIsOnAList(item, settings, whiteOrBlack, logger) {\n // whitelist is the default\n var black = false;\n if (whiteOrBlack === 'blacklist') {\n black = true;\n }\n var list, trace, frame, filename, frameLength, url, listLength, urlRegex;\n var i, j;\n\n try {\n list = black ? settings.hostBlackList : settings.hostWhiteList;\n listLength = list && list.length;\n trace = _.get(item, 'body.trace');\n\n // These two checks are important to come first as they are defaults\n // in case the list is missing or the trace is missing or not well-formed\n if (!list || listLength === 0) {\n return !black;\n }\n if (!trace || !trace.frames || trace.frames.length === 0) {\n return !black;\n }\n\n frameLength = trace.frames.length;\n for (i = 0; i < frameLength; i++) {\n frame = trace.frames[i];\n filename = frame.filename;\n\n if (!_.isType(filename, 'string')) {\n return !black;\n }\n\n for (j = 0; j < listLength; j++) {\n url = list[j];\n urlRegex = new RegExp(url);\n\n if (urlRegex.test(filename)) {\n return true;\n }\n }\n }\n } catch (e)\n /* istanbul ignore next */\n {\n if (black) {\n settings.hostBlackList = null;\n } else {\n settings.hostWhiteList = null;\n }\n var listName = black ? 'hostBlackList' : 'hostWhiteList';\n logger.error('Error while reading your configuration\\'s ' + listName + ' option. Removing custom ' + listName + '.', e);\n return !black;\n }\n return false;\n}\n\nfunction messageIsIgnored(logger) {\n return function(item, settings) {\n var exceptionMessage, i, ignoredMessages,\n len, messageIsIgnored, rIgnoredMessage,\n body, traceMessage, bodyMessage;\n\n try {\n messageIsIgnored = false;\n ignoredMessages = settings.ignoredMessages;\n\n if (!ignoredMessages || ignoredMessages.length === 0) {\n return true;\n }\n\n body = item.body;\n traceMessage = _.get(body, 'trace.exception.message');\n bodyMessage = _.get(body, 'message.body');\n\n exceptionMessage = traceMessage || bodyMessage;\n\n if (!exceptionMessage){\n return true;\n }\n\n len = ignoredMessages.length;\n for (i = 0; i < len; i++) {\n rIgnoredMessage = new RegExp(ignoredMessages[i], 'gi');\n messageIsIgnored = rIgnoredMessage.test(exceptionMessage);\n\n if (messageIsIgnored) {\n break;\n }\n }\n } catch(e)\n /* istanbul ignore next */\n {\n settings.ignoredMessages = null;\n logger.error('Error while reading your configuration\\'s ignoredMessages option. Removing custom ignoredMessages.');\n }\n\n return !messageIsIgnored;\n }\n}\n\nmodule.exports = {\n checkLevel: checkLevel,\n userCheckIgnore: userCheckIgnore,\n urlIsNotBlacklisted: urlIsNotBlacklisted,\n urlIsWhitelisted: urlIsWhitelisted,\n messageIsIgnored: messageIsIgnored\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/predicates.js\n// module id = 25\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar urlparser = require('./url');\nvar domUtil = require('./domUtility');\n\nvar defaults = {\n network: true,\n networkResponseHeaders: false,\n networkResponseBody: false,\n networkRequestBody: false,\n log: true,\n dom: true,\n navigation: true,\n connectivity: true\n};\n\nfunction replace(obj, name, replacement, replacements, type) {\n var orig = obj[name];\n obj[name] = replacement(orig);\n if (replacements) {\n replacements[type].push([obj, name, orig]);\n }\n}\n\nfunction restore(replacements, type) {\n var b;\n while (replacements[type].length) {\n b = replacements[type].shift();\n b[0][b[1]] = b[2];\n }\n}\n\nfunction Instrumenter(options, telemeter, rollbar, _window, _document) {\n var autoInstrument = options.autoInstrument;\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.extend(true, {}, defaults, autoInstrument);\n }\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n this.telemetryScrubber = options.telemetryScrubber;\n this.telemeter = telemeter;\n this.rollbar = rollbar;\n this._window = _window || {};\n this._document = _document || {};\n this.replacements = {\n network: [],\n log: [],\n navigation: [],\n connectivity: []\n };\n this.eventRemovers = {\n dom: [],\n connectivity: []\n };\n\n this._location = this._window.location;\n this._lastHref = this._location && this._location.href;\n}\n\nInstrumenter.prototype.configure = function(options) {\n var autoInstrument = options.autoInstrument;\n var oldSettings = _.extend(true, {}, this.autoInstrument);\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.extend(true, {}, defaults, autoInstrument);\n }\n this.instrument(oldSettings);\n if (options.scrubTelemetryInputs !== undefined) {\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n }\n if (options.telemetryScrubber !== undefined) {\n this.telemetryScrubber = options.telemetryScrubber;\n }\n};\n\nInstrumenter.prototype.instrument = function(oldSettings) {\n if (this.autoInstrument.network && !(oldSettings && oldSettings.network)) {\n this.instrumentNetwork();\n } else if (!this.autoInstrument.network && oldSettings && oldSettings.network) {\n this.deinstrumentNetwork();\n }\n\n if (this.autoInstrument.log && !(oldSettings && oldSettings.log)) {\n this.instrumentConsole();\n } else if (!this.autoInstrument.log && oldSettings && oldSettings.log) {\n this.deinstrumentConsole();\n }\n\n if (this.autoInstrument.dom && !(oldSettings && oldSettings.dom)) {\n this.instrumentDom();\n } else if (!this.autoInstrument.dom && oldSettings && oldSettings.dom) {\n this.deinstrumentDom();\n }\n\n if (this.autoInstrument.navigation && !(oldSettings && oldSettings.navigation)) {\n this.instrumentNavigation();\n } else if (!this.autoInstrument.navigation && oldSettings && oldSettings.navigation) {\n this.deinstrumentNavigation();\n }\n\n if (this.autoInstrument.connectivity && !(oldSettings && oldSettings.connectivity)) {\n this.instrumentConnectivity();\n } else if (!this.autoInstrument.connectivity && oldSettings && oldSettings.connectivity) {\n this.deinstrumentConnectivity();\n }\n};\n\nInstrumenter.prototype.deinstrumentNetwork = function() {\n restore(this.replacements, 'network');\n};\n\nInstrumenter.prototype.instrumentNetwork = function() {\n var self = this;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && _.isFunction(xhr[prop])) {\n replace(xhr, prop, function(orig) {\n return self.rollbar.wrap(orig);\n });\n }\n }\n\n if ('XMLHttpRequest' in this._window) {\n var xhrp = this._window.XMLHttpRequest.prototype;\n replace(xhrp, 'open', function(orig) {\n return function(method, url) {\n if (_.isType(url, 'string')) {\n this.__rollbar_xhr = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'network');\n\n replace(xhrp, 'send', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(data) {\n /* eslint-enable no-unused-vars */\n var xhr = this;\n\n function onreadystatechangeHandler() {\n if (xhr.__rollbar_xhr && (xhr.readyState === 1 || xhr.readyState === 4)) {\n if (xhr.__rollbar_xhr.status_code === null) {\n xhr.__rollbar_xhr.status_code = 0;\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n requestData = data;\n }\n xhr.__rollbar_event = self.telemeter.captureNetwork(xhr.__rollbar_xhr, 'xhr', undefined, requestData);\n }\n if (xhr.readyState === 1) {\n xhr.__rollbar_xhr.start_time_ms = _.now();\n } else {\n xhr.__rollbar_xhr.end_time_ms = _.now();\n\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n var header, i;\n if (headersConfig === true) {\n var allHeaders = xhr.getAllResponseHeaders();\n if (allHeaders) {\n var arr = allHeaders.trim().split(/[\\r\\n]+/);\n var parts, value;\n for (i=0; i < arr.length; i++) {\n parts = arr[i].split(': ');\n header = parts.shift();\n value = parts.join(': ');\n headers[header] = value;\n }\n }\n } else {\n for (i=0; i < headersConfig.length; i++) {\n header = headersConfig[i];\n headers[header] = xhr.getResponseHeader(header);\n }\n }\n } catch (e) {\n /* we ignore the errors here that could come from different\n * browser issues with the xhr methods */\n }\n }\n var body = null;\n if (self.autoInstrument.networkResponseBody) {\n try {\n body = xhr.responseText;\n } catch (e) {\n /* ignore errors from reading responseText */\n }\n }\n var response = null;\n if (body || headers) {\n response = {};\n if (body) {\n response.body = body;\n }\n if (headers) {\n response.headers = headers;\n }\n }\n if (response) {\n xhr.__rollbar_xhr.response = response;\n }\n }\n try {\n var code = xhr.status;\n code = code === 1223 ? 204 : code;\n xhr.__rollbar_xhr.status_code = code;\n xhr.__rollbar_event.level = self.telemeter.levelFromStatus(code);\n } catch (e) {\n /* ignore possible exception from xhr.status */\n }\n }\n }\n\n wrapProp('onload', xhr);\n wrapProp('onerror', xhr);\n wrapProp('onprogress', xhr);\n\n if ('onreadystatechange' in xhr && _.isFunction(xhr.onreadystatechange)) {\n replace(xhr, 'onreadystatechange', function(orig) {\n return self.rollbar.wrap(orig, undefined, onreadystatechangeHandler);\n });\n } else {\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n return orig.apply(this, arguments);\n }\n }, this.replacements, 'network');\n }\n\n if ('fetch' in this._window) {\n replace(this._window, 'fetch', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(fn, t) {\n /* eslint-enable no-unused-vars */\n var args = new Array(arguments.length);\n for (var i=0, len=args.length; i < len; i++) {\n args[i] = arguments[i];\n }\n var input = args[0];\n var method = 'GET';\n var url;\n if (_.isType(input, 'string')) {\n url = input;\n } else if (input) {\n url = input.url;\n if (input.method) {\n method = input.method;\n }\n }\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n var metadata = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n if (args[1] && args[1].body) {\n requestData = args[1].body;\n } else if (args[0] && !_.isType(args[0], 'string') && args[0].body) {\n requestData = args[0].body;\n }\n }\n self.telemeter.captureNetwork(metadata, 'fetch', undefined, requestData);\n return orig.apply(this, args).then(function (resp) {\n metadata.end_time_ms = _.now();\n metadata.status_code = resp.status;\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n if (headersConfig === true) {\n // This is unsupported in IE so we can't do it\n /*\n var allHeaders = resp.headers.entries();\n for (var pair of allHeaders) {\n headers[pair[0]] = pair[1];\n }\n */\n } else {\n for (var i=0; i < headersConfig.length; i++) {\n var header = headersConfig[i];\n headers[header] = resp.headers.get(header);\n }\n }\n } catch (e) {\n /* ignore probable IE errors */\n }\n }\n var response = null;\n if (headers) {\n response = {\n headers: headers\n };\n }\n if (response) {\n metadata.response = response;\n }\n return resp;\n });\n };\n }, this.replacements, 'network');\n }\n};\n\nInstrumenter.prototype.deinstrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n var b;\n while (this.replacements['log'].length) {\n b = this.replacements['log'].shift();\n this._window.console[b[0]] = b[1];\n }\n};\n\nInstrumenter.prototype.instrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n\n var self = this;\n var c = this._window.console;\n\n function wrapConsole(method) {\n var orig = c[method];\n var origConsole = c;\n var level = method === 'warn' ? 'warning' : method;\n c[method] = function() {\n var args = Array.prototype.slice.call(arguments);\n var message = _.formatArgsAsString(args);\n self.telemeter.captureLog(message, level);\n if (orig) {\n Function.prototype.apply.call(orig, origConsole, args);\n }\n };\n self.replacements['log'].push([method, orig]);\n }\n var methods = ['debug','info','warn','error','log'];\n for (var i=0, len=methods.length; i < len; i++) {\n wrapConsole(methods[i]);\n }\n};\n\nInstrumenter.prototype.deinstrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n this.removeListeners('dom');\n};\n\nInstrumenter.prototype.instrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n var clickHandler = this.handleClick.bind(this);\n var blurHandler = this.handleBlur.bind(this);\n this.addListener('dom', this._window, 'click', 'onclick', clickHandler, true);\n this.addListener('dom', this._window, 'blur', 'onfocusout', blurHandler, true);\n};\n\nInstrumenter.prototype.handleClick = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n var hasTag = e && e.tagName;\n var anchorOrButton = domUtil.isDescribedElement(e, 'a') || domUtil.isDescribedElement(e, 'button');\n if (hasTag && (anchorOrButton || domUtil.isDescribedElement(e, 'input', ['button', 'submit']))) {\n this.captureDomEvent('click', e);\n } else if (domUtil.isDescribedElement(e, 'input', ['checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value, e.checked);\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleBlur = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n if (e && e.tagName) {\n if (domUtil.isDescribedElement(e, 'textarea')) {\n this.captureDomEvent('input', e, e.value);\n } else if (domUtil.isDescribedElement(e, 'select') && e.options && e.options.length) {\n this.handleSelectInputChanged(e);\n } else if (domUtil.isDescribedElement(e, 'input') && !domUtil.isDescribedElement(e, 'input', ['button', 'submit', 'hidden', 'checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value);\n }\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleSelectInputChanged = function(elem) {\n if (elem.multiple) {\n for (var i = 0; i < elem.options.length; i++) {\n if (elem.options[i].selected) {\n this.captureDomEvent('input', elem, elem.options[i].value);\n }\n }\n } else if (elem.selectedIndex >= 0 && elem.options[elem.selectedIndex]) {\n this.captureDomEvent('input', elem, elem.options[elem.selectedIndex].value);\n }\n};\n\nInstrumenter.prototype.captureDomEvent = function(subtype, element, value, isChecked) {\n if (value !== undefined) {\n if (this.scrubTelemetryInputs || (domUtil.getElementType(element) === 'password')) {\n value = '[scrubbed]';\n } else if (this.telemetryScrubber) {\n var description = domUtil.describeElement(element);\n if (this.telemetryScrubber(description)) {\n value = '[scrubbed]';\n }\n }\n }\n var elementString = domUtil.elementArrayToString(domUtil.treeToArray(element));\n this.telemeter.captureDom(subtype, elementString, value, isChecked);\n};\n\nInstrumenter.prototype.deinstrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n restore(this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.instrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n var self = this;\n replace(this._window, 'onpopstate', function(orig) {\n return function() {\n var current = self._location.href;\n self.handleUrlChange(self._lastHref, current);\n if (orig) {\n orig.apply(this, arguments);\n }\n };\n }, this.replacements, 'navigation');\n\n replace(this._window.history, 'pushState', function(orig) {\n return function() {\n var url = arguments.length > 2 ? arguments[2] : undefined;\n if (url) {\n self.handleUrlChange(self._lastHref, url + '');\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.handleUrlChange = function(from, to) {\n var parsedHref = urlparser.parse(this._location.href);\n var parsedTo = urlparser.parse(to);\n var parsedFrom = urlparser.parse(from);\n this._lastHref = to;\n if (parsedHref.protocol === parsedTo.protocol && parsedHref.host === parsedTo.host) {\n to = parsedTo.path + (parsedTo.hash || '');\n }\n if (parsedHref.protocol === parsedFrom.protocol && parsedHref.host === parsedFrom.host) {\n from = parsedFrom.path + (parsedFrom.hash || '');\n }\n this.telemeter.captureNavigation(from, to);\n};\n\nInstrumenter.prototype.deinstrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.removeListeners('connectivity');\n } else {\n restore(this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.instrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.addListener('connectivity', this._window, 'online', undefined, function() {\n this.telemeter.captureConnectivityChange('online');\n }.bind(this), true);\n this.addListener('connectivity', this._window, 'offline', undefined, function() {\n this.telemeter.captureConnectivityChange('offline');\n }.bind(this), true);\n } else {\n var self = this;\n replace(this._document.body, 'ononline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('online');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n replace(this._document.body, 'onoffline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('offline');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.addListener = function(section, obj, type, altType, handler, capture) {\n if (obj.addEventListener) {\n obj.addEventListener(type, handler, capture);\n this.eventRemovers[section].push(function() {\n obj.removeEventListener(type, handler, capture);\n });\n } else if (altType) {\n obj.attachEvent(altType, handler);\n this.eventRemovers[section].push(function() {\n obj.detachEvent(altType, handler);\n });\n }\n};\n\nInstrumenter.prototype.removeListeners = function(section) {\n var r;\n while (this.eventRemovers[section].length) {\n r = this.eventRemovers[section].shift();\n r();\n }\n};\n\nmodule.exports = Instrumenter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/telemetry.js\n// module id = 26\n// module chunks = 0","'use strict';\n\nfunction getElementType(e) {\n return (e.getAttribute('type') || '').toLowerCase();\n}\n\nfunction isDescribedElement(element, type, subtypes) {\n if (element.tagName.toLowerCase() !== type.toLowerCase()) {\n return false;\n }\n if (!subtypes) {\n return true;\n }\n element = getElementType(element);\n for (var i = 0; i < subtypes.length; i++) {\n if (subtypes[i] === element) {\n return true;\n }\n }\n return false;\n}\n\nfunction getElementFromEvent(evt, doc) {\n if (evt.target) {\n return evt.target;\n }\n if (doc && doc.elementFromPoint) {\n return doc.elementFromPoint(evt.clientX, evt.clientY);\n }\n return undefined;\n}\n\nfunction treeToArray(elem) {\n var MAX_HEIGHT = 5;\n var out = [];\n var nextDescription;\n for (var height = 0; elem && height < MAX_HEIGHT; height++) {\n nextDescription = describeElement(elem);\n if (nextDescription.tagName === 'html') {\n break;\n }\n out.unshift(nextDescription);\n elem = elem.parentNode;\n }\n return out;\n}\n\nfunction elementArrayToString(a) {\n var MAX_LENGTH = 80;\n var separator = ' > ', separatorLength = separator.length;\n var out = [], len = 0, nextStr, totalLength;\n\n for (var i = a.length - 1; i >= 0; i--) {\n nextStr = descriptionToString(a[i]);\n totalLength = len + (out.length * separatorLength) + nextStr.length;\n if (i < a.length - 1 && totalLength >= MAX_LENGTH + 3) {\n out.unshift('...');\n break;\n }\n out.unshift(nextStr);\n len += nextStr.length;\n }\n return out.join(separator);\n}\n\nfunction descriptionToString(desc) {\n if (!desc || !desc.tagName) {\n return '';\n }\n var out = [desc.tagName];\n if (desc.id) {\n out.push('#' + desc.id);\n }\n if (desc.classes) {\n out.push('.' + desc.classes.join('.'));\n }\n for (var i = 0; i < desc.attributes.length; i++) {\n out.push('[' + desc.attributes[i].key + '=\"' + desc.attributes[i].value + '\"]');\n }\n\n return out.join('');\n}\n\n/**\n * Input: a dom element\n * Output: null if tagName is falsey or input is falsey, else\n * {\n * tagName: String,\n * id: String | undefined,\n * classes: [String] | undefined,\n * attributes: [\n * {\n * key: OneOf(type, name, title, alt),\n * value: String\n * }\n * ]\n * }\n */\nfunction describeElement(elem) {\n if (!elem || !elem.tagName) {\n return null;\n }\n var out = {}, className, key, attr, i;\n out.tagName = elem.tagName.toLowerCase();\n if (elem.id) {\n out.id = elem.id;\n }\n className = elem.className;\n if (className && (typeof className === 'string')) {\n out.classes = className.split(/\\s+/);\n }\n var attributes = ['type', 'name', 'title', 'alt'];\n out.attributes = [];\n for (i = 0; i < attributes.length; i++) {\n key = attributes[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.attributes.push({key: key, value: attr});\n }\n }\n return out;\n}\n\nmodule.exports = {\n describeElement: describeElement,\n descriptionToString: descriptionToString,\n elementArrayToString: elementArrayToString,\n treeToArray: treeToArray,\n getElementFromEvent: getElementFromEvent,\n isDescribedElement: isDescribedElement,\n getElementType: getElementType\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/domUtility.js\n// module id = 27\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/rollbar.snippet.js b/dist/rollbar.snippet.js index 5872c31f5..cb64588f2 100644 --- a/dist/rollbar.snippet.js +++ b/dist/rollbar.snippet.js @@ -1 +1 @@ -!function(r){function e(n){if(o[n])return o[n].exports;var t=o[n]={exports:{},id:n,loaded:!1};return r[n].call(t.exports,t,t.exports,e),t.loaded=!0,t.exports}var o={};return e.m=r,e.c=o,e.p="",e(0)}([function(r,e,o){"use strict";var n=o(1),t=o(4);_rollbarConfig=_rollbarConfig||{},_rollbarConfig.rollbarJsUrl=_rollbarConfig.rollbarJsUrl||"https://cdnjs.cloudflare.com/ajax/libs/rollbar.js/2.3.9/rollbar.min.js",_rollbarConfig.async=void 0===_rollbarConfig.async||_rollbarConfig.async;var a=n.setupShim(window,_rollbarConfig),l=t(_rollbarConfig);window.rollbar=n.Rollbar,a.loadFull(window,document,!_rollbarConfig.async,_rollbarConfig,l)},function(r,e,o){"use strict";function n(r){return function(){try{return r.apply(this,arguments)}catch(r){try{console.error("[Rollbar]: Internal error",r)}catch(r){}}}}function t(r,e){this.options=r,this._rollbarOldOnError=null;var o=s++;this.shimId=function(){return o},"undefined"!=typeof window&&window._rollbarShims&&(window._rollbarShims[o]={handler:e,messages:[]})}function a(r,e){if(r){var o=e.globalAlias||"Rollbar";if("object"==typeof r[o])return r[o];r._rollbarShims={},r._rollbarWrappedError=null;var t=new p(e);return n(function(){e.captureUncaught&&(t._rollbarOldOnError=r.onerror,i.captureUncaughtExceptions(r,t,!0),i.wrapGlobals(r,t,!0)),e.captureUnhandledRejections&&i.captureUnhandledRejections(r,t,!0);var n=e.autoInstrument;return e.enabled!==!1&&(void 0===n||n===!0||"object"==typeof n&&n.network)&&r.addEventListener&&(r.addEventListener("load",t.captureLoad.bind(t)),r.addEventListener("DOMContentLoaded",t.captureDomContentLoaded.bind(t))),r[o]=t,t})()}}function l(r){return n(function(){var e=this,o=Array.prototype.slice.call(arguments,0),n={shim:e,method:r,args:o,ts:new Date};window._rollbarShims[this.shimId()].messages.push(n)})}var i=o(2),s=0,d=o(3),c=function(r,e){return new t(r,e)},p=d.bind(null,c);t.prototype.loadFull=function(r,e,o,t,a){var l=function(){var e;if(void 0===r._rollbarDidLoad){e=new Error("rollbar.js did not load");for(var o,n,t,l,i=0;o=r._rollbarShims[i++];)for(o=o.messages||[];n=o.shift();)for(t=n.args||[],i=0;i 2) { + var beginning = parts.slice(0, 3); + var slashIdx = beginning[2].indexOf('/'); + if (slashIdx !== -1) { + beginning[2] = beginning[2].substring(0, slashIdx); + } + var terminal = '0000:0000:0000:0000:0000'; + newIp = beginning.concat(terminal).join(':'); + } + } else { + newIp = null; + } + } catch (e) { + newIp = null; + } + } + requestData['user_ip'] = newIp; + } + module.exports = { isType: isType, typeName: typeName, @@ -1675,7 +1714,8 @@ return /******/ (function(modules) { // webpackBootstrap set: set, scrub: scrub, formatArgsAsString: formatArgsAsString, - now: now + now: now, + filterIp: filterIp }; @@ -2572,7 +2612,7 @@ return /******/ (function(modules) { // webpackBootstrap Notifier.prototype.configure = function(options) { this.queue && this.queue.configure(options); var oldOptions = this.options; - this.options = _.extend(true, {}, oldOptions, options); + this.options = _.extend({}, oldOptions, options); return this; }; @@ -3607,10 +3647,16 @@ return /******/ (function(modules) { // webpackBootstrap if (!window || !window.location) { return callback(null, item); } + var remoteString = '$remote_ip'; + if (!options.captureIp) { + remoteString = null; + } else if (options.captureIp !== true) { + remoteString += '_anonymize'; + } _.set(item, 'data.request', { url: window.location.href, query_string: window.location.search, - user_ip: '$remote_ip' + user_ip: remoteString }); callback(null, item); }; diff --git a/dist/rollbar.umd.js.map b/dist/rollbar.umd.js.map index 5d7dce61b..c80d2df0c 100644 --- a/dist/rollbar.umd.js.map +++ b/dist/rollbar.umd.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 1c8670bd1c640a91238f","webpack:///./src/browser/bundles/rollbar.js","webpack:///./src/browser/rollbar.js","webpack:///./src/rollbar.js","webpack:///./src/rateLimiter.js","webpack:///./src/queue.js","webpack:///./src/utility.js","webpack:///./~/extend/index.js","webpack:///./vendor/JSON-js/json3.js","webpack:///./src/notifier.js","webpack:///./src/telemetry.js","webpack:///./src/api.js","webpack:///./src/apiUtility.js","webpack:///./src/browser/logger.js","webpack:///./~/console-polyfill/index.js","webpack:///./src/browser/detection.js","webpack:///./src/browser/globalSetup.js","webpack:///./src/browser/transport.js","webpack:///./src/browser/url.js","webpack:///./src/browser/transforms.js","webpack:///./src/browser/errorParser.js","webpack:///./~/error-stack-parser/error-stack-parser.js","webpack:///./~/error-stack-parser/~/stackframe/stackframe.js","webpack:///./src/transforms.js","webpack:///./src/browser/predicates.js","webpack:///./src/predicates.js","webpack:///./src/browser/telemetry.js","webpack:///./src/browser/domUtility.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;ACVA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;;;;;;;ACtCA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA,EAAC;AACD;AACA;AACA;;AAEA;;;;;;;ACvBA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA,mCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,2BAA0B,sBAAsB;AAChD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,qCAAoC,SAAS;AAC7C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACxZA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA,mCAAkC;AAClC;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACpIA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC7IA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAkC;AAClC;AACA;;AAEA;AACA;AACA;AACA,yDAAwD,WAAW;AACnE;AACA;AACA,gBAAe,WAAW;AAC1B,gBAAe,eAAe;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA2B,QAAQ;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,cAAa,8BAA8B;AAC3C;AACA;AACA;AACA;AACA,gDAA+C,SAAS;AACxD;AACA;AACA,eAAc;AACd;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAkD,SAAS;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAwB,+BAA+B;;AAEvD;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACnQA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAY;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,gBAAe,gBAAgB;AAC/B;AACA;AACA;;AAEA,0BAAyB;AACzB,cAAa,iBAAiB;AAC9B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,mCAAkC,OAAO;AACzC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAmD,SAAS;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,6BAA4B;AAC5B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAwC,SAAS,UAAU,YAAY,GAAG;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,SAAS;AAC/C;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,WAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB,qBAAqB;AACtC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAe,qBAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB,wBAAwB;AACzC;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,kBAAiB,wBAAwB;AACzC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iCAAgC,SAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACzmBA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAmB;;AAEnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA,QAAO,YAAY;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA,OAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAAyE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAoB;AACpB;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,0CAAyC,iBAAiB;AAC1D,+BAA8B,kBAAkB;;AAEhD,0CAAyC,iBAAiB;AAC1D,uCAAsC,6BAA6B;;AAEnE;AACA;AACA;AACA;AACA,cAAa;AACb;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,yBAAwB;AACxB,gDAA+C,EAAE;AACjD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;;AAGA;;AAEA;;AAEA,WAAU;AACV,WAAU;AACV,WAAU;AACV;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA,sBAAqB,YAAY;AACjC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,sBAAqB,YAAY;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,gBAAe;AACf;AACA,eAAc,wDAAwD;AACtE,eAAc,0BAA0B;AACxC;AACA;AACA;AACA;;AAEA;;AAEA;AACA,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAmB,WAAW;AAC9B;AACA;;AAEA;;AAEA,QAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,uBAAsB,UAAU;AAChC;AACA;;;AAGA;;AAEA;AACA;;AAEA;AACA;;AAEA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB,qBAAoB;AACpB,eAAc;AACd,iBAAgB;AAChB,sBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAoB;AACpB;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,qBAAoB;AACpB;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,WAAU;AACV;AACA,yBAAwB,YAAY;AACpC;AACA;AACA,YAAW;AACX;AACA,yBAAwB,gDAAgD;AACxE;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA;AACA,UAAS;AACT,WAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,yBAAwB,YAAY;AACpC;AACA;AACA,YAAW;AACX;AACA,yBAAwB,gDAAgD;AACxE;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,uCAAsC,EAAE;AACxC;AACA;AACA;AACA,UAAS;AACT;;AAEA;;AAEA;AACA;;AAEA;AACA,gDAA+C,yGAAyG,EAAE;;AAE1J;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA,cAAa;;AAEb;AACA;;AAEA;AACA;AACA,cAAa;;AAEb;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,UAAS;AACT;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE,UAAU;AACvB;AACA;AACA,MAAK;AACL;AACA;;AAEA;;;;;;;AC1vBA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAkC;AAClC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;;;;;;ACvHA;;AAEA;;AAEA;;AAEA;AACA;AACA,mCAAkC;AAClC;AACA;AACA;;AAEA;AACA;AACA,mCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sCAAqC,mBAAmB;AACxD;;AAEA;AACA,sCAAqC,4BAA4B;AACjE;AACA;AACA,+BAA8B,4BAA4B;AAC1D;AACA;AACA;AACA,sCAAqC,gBAAgB;AACrD;AACA;AACA,+BAA8B,gBAAgB;AAC9C;AACA;;AAEA;AACA,+BAA8B,aAAa;AAC3C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACrKA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;ACnEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACzFA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;;;AClBD;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;AC/BA;;AAEA;AACA,iBAAgB,QAAQ;AACxB;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAgB,QAAQ;;AAExB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAgB,QAAQ;AACxB;AACA;AACA;AACA,cAAa,oBAAoB;AACjC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;AC3HA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,kBAAkB;AAC/B;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;AC7MA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;AChFA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gCAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,OAAO;AAC7C;AACA,qBAAoB,6CAA6C;AACjE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qCAAoC;AACpC;;AAEA,6BAA4B,gBAAgB;AAC5C;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAe,kBAAkB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,sCAAqC;AACrC;AACA,+BAA8B,aAAa;AAC3C;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACtPA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;;AAEA;;AAEA,oBAAmB,wBAAwB;AAC3C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACtGA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA,EAAC;AACD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA,4BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA,4BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,0BAAyB;AACzB;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,cAAa;AACb;AACA,cAAa;AACb;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAa;AACb,UAAS;;AAET;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,cAAa;AACb,UAAS;;AAET;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,cAAa;AACb;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;;AAEA,gDAA+C,SAAS;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAS;;AAET;AACA;AACA;AACA;;AAEA,gDAA+C,SAAS;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,EAAC;;;;;;;;AC/LD;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;;AAET;AACA,4DAA2D,UAAU;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,EAAC;;;;;;;AC1GD;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,+BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAqC,UAAU,sBAAsB;AACrE;AACA;AACA;AACA;;AAEA;AACA;AACA,oCAAmC;AACnC;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACrFA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;ACbA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAe,iBAAiB;AAChC;AACA;;AAEA;AACA;AACA;;AAEA,kBAAiB,gBAAgB;AACjC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,kBAAiB,SAAS;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AChKA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,4CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,sCAAqC;AACrC;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,4CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAA+B,gBAAgB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB;AACnB,8BAA6B,0BAA0B;AACvD;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,SAAS;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf,8BAA6B,0BAA0B;AACvD;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAmC,SAAS;AAC5C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA,oBAAmB,yBAAyB;AAC5C;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACnjBA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB,qBAAqB;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,uBAAsB,6BAA6B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,6BAA4B,QAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB,4BAA4B;AAC7C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,uBAAuB;AACpC;AACA;AACA;AACA,4BAA2B,sBAAsB;AACjD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"rollbar.umd.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"rollbar\"] = factory();\n\telse\n\t\troot[\"rollbar\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 1c8670bd1c640a91238f","'use strict';\n\nvar rollbar = require('../rollbar');\n\nvar options = (typeof window !== 'undefined') && window._rollbarConfig;\nvar alias = options && options.globalAlias || 'Rollbar';\nvar shimRunning = (typeof window !== 'undefined') && window[alias] && typeof window[alias].shimId === 'function' && window[alias].shimId() !== undefined;\n\nif ((typeof window !== 'undefined') && !window._rollbarStartTime) {\n window._rollbarStartTime = (new Date()).getTime();\n}\n\nif (!shimRunning && options) {\n var Rollbar = new rollbar(options);\n window[alias] = Rollbar;\n} else if (typeof window !== 'undefined') {\n window.rollbar = rollbar;\n window._rollbarDidLoad = true;\n} else if (typeof self !== 'undefined') {\n self.rollbar = rollbar;\n self._rollbarDidLoad = true;\n}\n\nmodule.exports = rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/bundles/rollbar.js\n// module id = 1\n// module chunks = 0","'use strict';\n\nvar Client = require('../rollbar');\nvar _ = require('../utility');\nvar API = require('../api');\nvar logger = require('./logger');\nvar globals = require('./globalSetup');\n\nvar transport = require('./transport');\nvar urllib = require('./url');\n\nvar transforms = require('./transforms');\nvar sharedTransforms = require('../transforms');\nvar predicates = require('./predicates');\nvar sharedPredicates = require('../predicates');\nvar errorParser = require('./errorParser');\nvar Instrumenter = require('./telemetry');\n\nfunction Rollbar(options, client) {\n this.options = _.extend(true, defaultOptions, options);\n var api = new API(this.options, transport, urllib);\n this.client = client || new Client(this.options, api, logger, 'browser');\n\n var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n var gDocument = (typeof document != 'undefined') && document;\n addTransformsToNotifier(this.client.notifier);\n addPredicatesToQueue(this.client.queue);\n if (this.options.captureUncaught || this.options.handleUncaughtExceptions) {\n globals.captureUncaughtExceptions(gWindow, this);\n globals.wrapGlobals(gWindow, this);\n }\n if (this.options.captureUnhandledRejections || this.options.handleUnhandledRejections) {\n globals.captureUnhandledRejections(gWindow, this);\n }\n\n this.instrumenter = new Instrumenter(this.options, this.client.telemeter, this, gWindow, gDocument);\n this.instrumenter.instrument();\n}\n\nvar _instance = null;\nRollbar.init = function(options, client) {\n if (_instance) {\n return _instance.global(options).configure(options);\n }\n _instance = new Rollbar(options, client);\n return _instance;\n};\n\nfunction handleUninitialized(maybeCallback) {\n var message = 'Rollbar is not initialized';\n logger.error(message);\n if (maybeCallback) {\n maybeCallback(new Error(message));\n }\n}\n\nRollbar.prototype.global = function(options) {\n this.client.global(options);\n return this;\n};\nRollbar.global = function(options) {\n if (_instance) {\n return _instance.global(options);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.extend(true, {}, oldOptions, options, payload);\n this.client.configure(options, payloadData);\n this.instrumenter.configure(options);\n return this;\n};\nRollbar.configure = function(options, payloadData) {\n if (_instance) {\n return _instance.configure(options, payloadData);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.lastError = function() {\n return this.client.lastError;\n};\nRollbar.lastError = function() {\n if (_instance) {\n return _instance.lastError();\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.log = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.log(item);\n return {uuid: uuid};\n};\nRollbar.log = function() {\n if (_instance) {\n return _instance.log.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.debug = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.debug(item);\n return {uuid: uuid};\n};\nRollbar.debug = function() {\n if (_instance) {\n return _instance.debug.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.info = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.info(item);\n return {uuid: uuid};\n};\nRollbar.info = function() {\n if (_instance) {\n return _instance.info.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warn = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warn(item);\n return {uuid: uuid};\n};\nRollbar.warn = function() {\n if (_instance) {\n return _instance.warn.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warning = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warning(item);\n return {uuid: uuid};\n};\nRollbar.warning = function() {\n if (_instance) {\n return _instance.warning.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.error = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.error(item);\n return {uuid: uuid};\n};\nRollbar.error = function() {\n if (_instance) {\n return _instance.error.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.critical = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.critical(item);\n return {uuid: uuid};\n};\nRollbar.critical = function() {\n if (_instance) {\n return _instance.critical.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.handleUncaughtException = function(message, url, lineno, colno, error, context) {\n var item;\n var stackInfo = _.makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n 'onerror',\n 'uncaught exception',\n errorParser\n );\n if (_.isError(error)) {\n item = this._createItem([message, error, context]);\n item._unhandledStackInfo = stackInfo;\n } else if (_.isError(url)) {\n item = this._createItem([message, url, context]);\n item._unhandledStackInfo = stackInfo;\n } else {\n item = this._createItem([message, context]);\n item.stackInfo = stackInfo;\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n this.client.log(item);\n};\n\nRollbar.prototype.handleUnhandledRejection = function(reason, promise) {\n var message = 'unhandled rejection was null or undefined!';\n message = reason ? (reason.message || String(reason)) : message;\n var context = (reason && reason._rollbarContext) || (promise && promise._rollbarContext);\n\n var item;\n if (_.isError(reason)) {\n item = this._createItem([message, reason, context]);\n } else {\n item = this._createItem([message, reason, context]);\n item.stackInfo = _.makeUnhandledStackInfo(\n message,\n '',\n 0,\n 0,\n null,\n 'unhandledrejection',\n '',\n errorParser\n );\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n item._originalArgs = item._originalArgs || [];\n item._originalArgs.push(promise);\n this.client.log(item);\n};\n\nRollbar.prototype.wrap = function(f, context, _before) {\n try {\n var ctxFn;\n if(_.isFunction(context)) {\n ctxFn = context;\n } else {\n ctxFn = function() { return context || {}; };\n }\n\n if (!_.isFunction(f)) {\n return f;\n }\n\n if (f._isWrap) {\n return f;\n }\n\n if (!f._rollbar_wrapped) {\n f._rollbar_wrapped = function () {\n if (_before && _.isFunction(_before)) {\n _before.apply(this, arguments);\n }\n try {\n return f.apply(this, arguments);\n } catch(exc) {\n var e = exc;\n if (_.isType(e, 'string')) {\n e = new String(e);\n }\n e._rollbarContext = ctxFn() || {};\n e._rollbarContext._wrappedSource = f.toString();\n\n window._rollbarWrappedError = e;\n throw e;\n }\n };\n\n f._rollbar_wrapped._isWrap = true;\n\n if (f.hasOwnProperty) {\n for (var prop in f) {\n if (f.hasOwnProperty(prop)) {\n f._rollbar_wrapped[prop] = f[prop];\n }\n }\n }\n }\n\n return f._rollbar_wrapped;\n } catch (e) {\n // Return the original function if the wrap fails.\n return f;\n }\n};\nRollbar.wrap = function(f, context) {\n if (_instance) {\n return _instance.wrap(f, context);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.captureEvent = function(metadata, level) {\n return this.client.captureEvent(metadata, level);\n};\nRollbar.captureEvent = function(metadata, level) {\n if (_instance) {\n return _instance.captureEvent(metadata, level);\n } else {\n handleUninitialized();\n }\n};\n\n// The following two methods are used internally and are not meant for public use\nRollbar.prototype.captureDomContentLoaded = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureLoad(ts);\n};\n\n/* Internal */\n\nfunction addTransformsToNotifier(notifier) {\n notifier\n .addTransform(transforms.handleItemWithError)\n .addTransform(transforms.ensureItemHasSomethingToSay)\n .addTransform(transforms.addBaseInfo)\n .addTransform(transforms.addRequestInfo(window))\n .addTransform(transforms.addClientInfo(window))\n .addTransform(transforms.addPluginInfo(window))\n .addTransform(transforms.addBody)\n .addTransform(sharedTransforms.addMessageWithError)\n .addTransform(sharedTransforms.addTelemetryData)\n .addTransform(sharedTransforms.addConfigToPayload)\n .addTransform(transforms.scrubPayload)\n .addTransform(sharedTransforms.userTransform(logger))\n .addTransform(sharedTransforms.itemToPayload);\n}\n\nfunction addPredicatesToQueue(queue) {\n queue\n .addPredicate(sharedPredicates.checkLevel)\n .addPredicate(predicates.checkIgnore)\n .addPredicate(sharedPredicates.userCheckIgnore(logger))\n .addPredicate(sharedPredicates.urlIsNotBlacklisted(logger))\n .addPredicate(sharedPredicates.urlIsWhitelisted(logger))\n .addPredicate(sharedPredicates.messageIsIgnored(logger));\n}\n\nRollbar.prototype._createItem = function(args) {\n return _.createItem(args, logger, this);\n};\n\nfunction _getFirstFunction(args) {\n for (var i = 0, len = args.length; i < len; ++i) {\n if (_.isFunction(args[i])) {\n return args[i];\n }\n }\n return undefined;\n}\n\n/* global __NOTIFIER_VERSION__:false */\n/* global __DEFAULT_BROWSER_SCRUB_FIELDS__:false */\n/* global __DEFAULT_LOG_LEVEL__:false */\n/* global __DEFAULT_REPORT_LEVEL__:false */\n/* global __DEFAULT_UNCAUGHT_ERROR_LEVEL:false */\n/* global __DEFAULT_ENDPOINT__:false */\n\nvar defaultOptions = {\n version: __NOTIFIER_VERSION__,\n scrubFields: __DEFAULT_BROWSER_SCRUB_FIELDS__,\n logLevel: __DEFAULT_LOG_LEVEL__,\n reportLevel: __DEFAULT_REPORT_LEVEL__,\n uncaughtErrorLevel: __DEFAULT_UNCAUGHT_ERROR_LEVEL,\n endpoint: __DEFAULT_ENDPOINT__,\n verbose: false,\n enabled: true,\n sendConfig: false,\n includeItemsInTelemetry: true\n};\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/rollbar.js\n// module id = 2\n// module chunks = 0","'use strict';\n\nvar RateLimiter = require('./rateLimiter');\nvar Queue = require('./queue');\nvar Notifier = require('./notifier');\nvar Telemeter = require('./telemetry');\nvar _ = require('./utility');\n\n/*\n * Rollbar - the interface to Rollbar\n *\n * @param options\n * @param api\n * @param logger\n */\nfunction Rollbar(options, api, logger, platform) {\n this.options = _.extend(true, {}, options);\n this.logger = logger;\n Rollbar.rateLimiter.configureGlobal(this.options);\n Rollbar.rateLimiter.setPlatformOptions(platform, this.options);\n this.queue = new Queue(Rollbar.rateLimiter, api, logger, this.options);\n this.notifier = new Notifier(this.queue, this.options);\n this.telemeter = new Telemeter(this.options);\n this.lastError = null;\n}\n\nvar defaultOptions = {\n maxItems: 0,\n itemsPerMinute: 60\n};\n\nRollbar.rateLimiter = new RateLimiter(defaultOptions);\n\nRollbar.prototype.global = function(options) {\n Rollbar.rateLimiter.configureGlobal(options);\n return this;\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n this.notifier && this.notifier.configure(options);\n this.telemeter && this.telemeter.configure(options);\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.extend(true, {}, oldOptions, options, payload);\n this.global(this.options);\n return this;\n};\n\nRollbar.prototype.log = function(item) {\n var level = this._defaultLogLevel();\n return this._log(level, item);\n};\n\nRollbar.prototype.debug = function(item) {\n this._log('debug', item);\n};\n\nRollbar.prototype.info = function(item) {\n this._log('info', item);\n};\n\nRollbar.prototype.warn = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.warning = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.error = function(item) {\n this._log('error', item);\n};\n\nRollbar.prototype.critical = function(item) {\n this._log('critical', item);\n};\n\nRollbar.prototype.wait = function(callback) {\n this.queue.wait(callback);\n};\n\nRollbar.prototype.captureEvent = function(metadata, level) {\n return this.telemeter.captureEvent(metadata, level);\n};\n\nRollbar.prototype.captureDomContentLoaded = function(ts) {\n return this.telemeter.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(ts) {\n return this.telemeter.captureLoad(ts);\n};\n\n/* Internal */\n\nRollbar.prototype._log = function(defaultLevel, item) {\n if (this._sameAsLastError(item)) {\n if (item.callback) {\n item.callback();\n }\n return;\n }\n try {\n var callback = null;\n if (item.callback) {\n callback = item.callback;\n delete item.callback;\n }\n item.level = item.level || defaultLevel;\n this.telemeter._captureRollbarItem(item);\n item.telemetryEvents = this.telemeter.copyEvents();\n this.notifier.log(item, callback);\n } catch (e) {\n this.logger.error(e)\n }\n};\n\nRollbar.prototype._defaultLogLevel = function() {\n return this.options.logLevel || 'debug';\n};\n\nRollbar.prototype._sameAsLastError = function(item) {\n if (this.lastError && this.lastError === item.err) {\n return true;\n }\n this.lastError = item.err;\n return false;\n};\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rollbar.js\n// module id = 3\n// module chunks = 0","'use strict';\n\n/*\n * RateLimiter - an object that encapsulates the logic for counting items sent to Rollbar\n *\n * @param options - the same options that are accepted by configureGlobal offered as a convenience\n */\nfunction RateLimiter(options) {\n this.startTime = (new Date()).getTime();\n this.counter = 0;\n this.perMinCounter = 0;\n this.platform = null;\n this.platformOptions = {};\n this.configureGlobal(options);\n}\n\nRateLimiter.globalSettings = {\n startTime: (new Date()).getTime(),\n maxItems: undefined,\n itemsPerMinute: undefined\n};\n\n/*\n * configureGlobal - set the global rate limiter options\n *\n * @param options - Only the following values are recognized:\n * startTime: a timestamp of the form returned by (new Date()).getTime()\n * maxItems: the maximum items\n * itemsPerMinute: the max number of items to send in a given minute\n */\nRateLimiter.prototype.configureGlobal = function(options) {\n if (options.startTime !== undefined) {\n RateLimiter.globalSettings.startTime = options.startTime;\n }\n if (options.maxItems !== undefined) {\n RateLimiter.globalSettings.maxItems = options.maxItems;\n }\n if (options.itemsPerMinute !== undefined) {\n RateLimiter.globalSettings.itemsPerMinute = options.itemsPerMinute;\n }\n};\n\n/*\n * shouldSend - determine if we should send a given item based on rate limit settings\n *\n * @param item - the item we are about to send\n * @returns An object with the following structure:\n * error: (Error|null)\n * shouldSend: bool\n * payload: (Object|null)\n * If shouldSend is false, the item passed as a parameter should not be sent to Rollbar, and\n * exactly one of error or payload will be non-null. If error is non-null, the returned Error will\n * describe the situation, but it means that we were already over a rate limit (either globally or\n * per minute) when this item was checked. If error is null, and therefore payload is non-null, it\n * means this item put us over the global rate limit and the payload should be sent to Rollbar in\n * place of the passed in item.\n */\nRateLimiter.prototype.shouldSend = function(item, now) {\n now = now || (new Date()).getTime();\n if (now - this.startTime >= 60000) {\n this.startTime = now;\n this.perMinCounter = 0;\n }\n\n var globalRateLimit = RateLimiter.globalSettings.maxItems;\n var globalRateLimitPerMin = RateLimiter.globalSettings.itemsPerMinute;\n\n if (checkRate(item, globalRateLimit, this.counter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimit + ' max items reached', false);\n } else if (checkRate(item, globalRateLimitPerMin, this.perMinCounter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimitPerMin + ' items per minute reached', false);\n }\n this.counter++;\n this.perMinCounter++;\n\n var shouldSend = !checkRate(item, globalRateLimit, this.counter);\n var perMinute = shouldSend;\n shouldSend = shouldSend && !checkRate(item, globalRateLimitPerMin, this.perMinCounter);\n return shouldSendValue(this.platform, this.platformOptions, null, shouldSend, globalRateLimit, globalRateLimitPerMin, perMinute);\n};\n\nRateLimiter.prototype.setPlatformOptions = function(platform, options) {\n this.platform = platform;\n this.platformOptions = options;\n};\n\n/* Helpers */\n\nfunction checkRate(item, limit, counter) {\n return !item.ignoreRateLimit && limit >= 1 && counter > limit;\n}\n\nfunction shouldSendValue(platform, options, error, shouldSend, globalRateLimit, limitPerMin, perMinute) {\n var payload = null;\n if (error) {\n error = new Error(error);\n }\n if (!error && !shouldSend) {\n payload = rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute);\n }\n return {error: error, shouldSend: shouldSend, payload: payload};\n}\n\nfunction rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute) {\n var environment = options.environment || (options.payload && options.payload.environment);\n var msg;\n if (perMinute) {\n msg = 'item per minute limit reached, ignoring errors until timeout';\n } else {\n msg = 'maxItems has been hit, ignoring errors until reset.';\n }\n var item = {\n body: {\n message: {\n body: msg,\n extra: {\n maxItems: globalRateLimit,\n itemsPerMinute: limitPerMin\n }\n }\n },\n language: 'javascript',\n environment: environment,\n notifier: {\n version: (options.notifier && options.notifier.version) || options.version\n }\n };\n if (platform === 'browser') {\n item.platform = 'browser';\n item.framework = 'browser-js';\n item.notifier.name = 'rollbar-browser-js';\n } else if (platform === 'server') {\n item.framework = options.framework || 'node-js';\n item.notifier.name = options.notifier.name;\n } else if (platform === 'react-native') {\n item.framework = options.framework || 'react-native';\n item.notifier.name = options.notifier.name;\n }\n return item;\n}\n\nmodule.exports = RateLimiter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rateLimiter.js\n// module id = 4\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Queue - an object which handles which handles a queue of items to be sent to Rollbar.\n * This object handles rate limiting via a passed in rate limiter, retries based on connection\n * errors, and filtering of items based on a set of configurable predicates. The communication to\n * the backend is performed via a given API object.\n *\n * @param rateLimiter - An object which conforms to the interface\n * rateLimiter.shouldSend(item) -> bool\n * @param api - An object which conforms to the interface\n * api.postItem(payload, function(err, response))\n * @param logger - An object used to log verbose messages if desired\n * @param options - see Queue.prototype.configure\n */\nfunction Queue(rateLimiter, api, logger, options) {\n this.rateLimiter = rateLimiter;\n this.api = api;\n this.logger = logger;\n this.options = options;\n this.predicates = [];\n this.pendingItems = [];\n this.pendingRequests = [];\n this.retryQueue = [];\n this.retryHandle = null;\n this.waitCallback = null;\n this.waitIntervalID = null;\n}\n\n/*\n * configure - updates the options this queue uses\n *\n * @param options\n */\nQueue.prototype.configure = function(options) {\n this.api && this.api.configure(options);\n var oldOptions = this.options;\n this.options = _.extend(true, {}, oldOptions, options);\n return this;\n};\n\n/*\n * addPredicate - adds a predicate to the end of the list of predicates for this queue\n *\n * @param predicate - function(item, options) -> (bool|{err: Error})\n * Returning true means that this predicate passes and the item is okay to go on the queue\n * Returning false means do not add the item to the queue, but it is not an error\n * Returning {err: Error} means do not add the item to the queue, and the given error explains why\n * Returning {err: undefined} is equivalent to returning true but don't do that\n */\nQueue.prototype.addPredicate = function(predicate) {\n if (_.isFunction(predicate)) {\n this.predicates.push(predicate);\n }\n return this;\n};\n\nQueue.prototype.addPendingItem = function(item) {\n this.pendingItems.push(item);\n};\n\nQueue.prototype.removePendingItem = function(item) {\n var idx = this.pendingItems.indexOf(item);\n if (idx !== -1) {\n this.pendingItems.splice(idx, 1);\n }\n};\n\n/*\n * addItem - Send an item to the Rollbar API if all of the predicates are satisfied\n *\n * @param item - The payload to send to the backend\n * @param callback - function(error, repsonse) which will be called with the response from the API\n * in the case of a success, otherwise response will be null and error will have a value. If both\n * error and response are null then the item was stopped by a predicate which did not consider this\n * to be an error condition, but nonetheless did not send the item to the API.\n * @param originalError - The original error before any transformations that is to be logged if any\n */\nQueue.prototype.addItem = function(item, callback, originalError, originalItem) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() { return; };\n }\n var predicateResult = this._applyPredicates(item);\n if (predicateResult.stop) {\n this.removePendingItem(originalItem);\n callback(predicateResult.err);\n return;\n }\n this._maybeLog(item, originalError);\n this.removePendingItem(originalItem);\n this.pendingRequests.push(item);\n try {\n this._makeApiRequest(item, function(err, resp) {\n this._dequeuePendingRequest(item);\n callback(err, resp);\n }.bind(this));\n } catch (e) {\n this._dequeuePendingRequest(item);\n callback(e);\n }\n};\n\n/*\n * wait - Stop any further errors from being added to the queue, and get called back when all items\n * currently processing have finished sending to the backend.\n *\n * @param callback - function() called when all pending items have been sent\n */\nQueue.prototype.wait = function(callback) {\n if (!_.isFunction(callback)) {\n return;\n }\n this.waitCallback = callback;\n if (this._maybeCallWait()) {\n return;\n }\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitIntervalID = setInterval(function() {\n this._maybeCallWait();\n }.bind(this), 500);\n};\n\n/* _applyPredicates - Sequentially applies the predicates that have been added to the queue to the\n * given item with the currently configured options.\n *\n * @param item - An item in the queue\n * @returns {stop: bool, err: (Error|null)} - stop being true means do not add item to the queue,\n * the error value should be passed up to a callbak if we are stopping.\n */\nQueue.prototype._applyPredicates = function(item) {\n var p = null;\n for (var i = 0, len = this.predicates.length; i < len; i++) {\n p = this.predicates[i](item, this.options);\n if (!p || p.err !== undefined) {\n return {stop: true, err: p.err};\n }\n }\n return {stop: false, err: null};\n};\n\n/*\n * _makeApiRequest - Send an item to Rollbar, callback when done, if there is an error make an\n * effort to retry if we are configured to do so.\n *\n * @param item - an item ready to send to the backend\n * @param callback - function(err, response)\n */\nQueue.prototype._makeApiRequest = function(item, callback) {\n var rateLimitResponse = this.rateLimiter.shouldSend(item);\n if (rateLimitResponse.shouldSend) {\n this.api.postItem(item, function(err, resp) {\n if (err) {\n this._maybeRetry(err, item, callback);\n } else {\n callback(err, resp);\n }\n }.bind(this));\n } else if (rateLimitResponse.error) {\n callback(rateLimitResponse.error);\n } else {\n this.api.postItem(rateLimitResponse.payload, callback);\n }\n};\n\n// These are errors basically mean there is no internet connection\nvar RETRIABLE_ERRORS = ['ECONNRESET', 'ENOTFOUND', 'ESOCKETTIMEDOUT', 'ETIMEDOUT', 'ECONNREFUSED', 'EHOSTUNREACH', 'EPIPE', 'EAI_AGAIN'];\n\n/*\n * _maybeRetry - Given the error returned by the API, decide if we should retry or just callback\n * with the error.\n *\n * @param err - an error returned by the API transport\n * @param item - the item that was trying to be sent when this error occured\n * @param callback - function(err, response)\n */\nQueue.prototype._maybeRetry = function(err, item, callback) {\n var shouldRetry = false;\n if (this.options.retryInterval) {\n for (var i = 0, len = RETRIABLE_ERRORS.length; i < len; i++) {\n if (err.code === RETRIABLE_ERRORS[i]) {\n shouldRetry = true;\n break;\n }\n }\n }\n if (shouldRetry) {\n this._retryApiRequest(item, callback);\n } else {\n callback(err);\n }\n};\n\n/*\n * _retryApiRequest - Add an item and a callback to a queue and possibly start a timer to process\n * that queue based on the retryInterval in the options for this queue.\n *\n * @param item - an item that failed to send due to an error we deem retriable\n * @param callback - function(err, response)\n */\nQueue.prototype._retryApiRequest = function(item, callback) {\n this.retryQueue.push({item: item, callback: callback});\n\n if (!this.retryHandle) {\n this.retryHandle = setInterval(function() {\n while (this.retryQueue.length) {\n var retryObject = this.retryQueue.shift();\n this._makeApiRequest(retryObject.item, retryObject.callback);\n }\n }.bind(this), this.options.retryInterval);\n }\n};\n\n/*\n * _dequeuePendingRequest - Removes the item from the pending request queue, this queue is used to\n * enable to functionality of providing a callback that clients can pass to `wait` to be notified\n * when the pending request queue has been emptied. This must be called when the API finishes\n * processing this item. If a `wait` callback is configured, it is called by this function.\n *\n * @param item - the item previously added to the pending request queue\n */\nQueue.prototype._dequeuePendingRequest = function(item) {\n var idx = this.pendingRequests.indexOf(item);\n if (idx !== -1) {\n this.pendingRequests.splice(idx, 1);\n this._maybeCallWait();\n }\n};\n\nQueue.prototype._maybeLog = function(data, originalError) {\n if (this.logger && this.options.verbose) {\n var message = originalError;\n message = message || _.get(data, 'body.trace.exception.message');\n message = message || _.get(data, 'body.trace_chain.0.exception.message');\n if (message) {\n this.logger.error(message);\n return;\n }\n message = _.get(data, 'body.message.body');\n if (message) {\n this.logger.log(message);\n }\n }\n};\n\nQueue.prototype._maybeCallWait = function() {\n if (_.isFunction(this.waitCallback) && this.pendingItems.length === 0 && this.pendingRequests.length === 0) {\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitCallback();\n return true;\n }\n return false;\n};\n\nmodule.exports = Queue;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/queue.js\n// module id = 5\n// module chunks = 0","'use strict';\n\nvar extend = require('extend');\n\nvar RollbarJSON = {};\nvar __initRollbarJSON = false;\nfunction setupJSON() {\n if (__initRollbarJSON) {\n return;\n }\n __initRollbarJSON = true;\n\n if (isDefined(JSON)) {\n if (isNativeFunction(JSON.stringify)) {\n RollbarJSON.stringify = JSON.stringify;\n }\n if (isNativeFunction(JSON.parse)) {\n RollbarJSON.parse = JSON.parse;\n }\n }\n if (!isFunction(RollbarJSON.stringify) || !isFunction(RollbarJSON.parse)) {\n var setupCustomJSON = require('../vendor/JSON-js/json3.js');\n setupCustomJSON(RollbarJSON);\n }\n}\nsetupJSON();\n\n/*\n * isType - Given a Javascript value and a string, returns true if the type of the value matches the\n * given string.\n *\n * @param x - any value\n * @param t - a lowercase string containing one of the following type names:\n * - undefined\n * - null\n * - error\n * - number\n * - boolean\n * - string\n * - symbol\n * - function\n * - object\n * - array\n * @returns true if x is of type t, otherwise false\n */\nfunction isType(x, t) {\n return t === typeName(x);\n}\n\n/*\n * typeName - Given a Javascript value, returns the type of the object as a string\n */\nfunction typeName(x) {\n var name = typeof x;\n if (name !== 'object') {\n return name;\n }\n if (!x) {\n return 'null';\n }\n if (x instanceof Error) {\n return 'error';\n }\n return ({}).toString.call(x).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n}\n\n/* isFunction - a convenience function for checking if a value is a function\n *\n * @param f - any value\n * @returns true if f is a function, otherwise false\n */\nfunction isFunction(f) {\n return isType(f, 'function');\n}\n\n/* isNativeFunction - a convenience function for checking if a value is a native JS function\n *\n * @param f - any value\n * @returns true if f is a native JS function, otherwise false\n */\nfunction isNativeFunction(f) {\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n var funcMatchString = Function.prototype.toString.call(Object.prototype.hasOwnProperty)\n .replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?');\n var reIsNative = RegExp('^' + funcMatchString + '$');\n return isObject(f) && reIsNative.test(f);\n}\n\n/* isObject - Checks if the argument is an object\n *\n * @param value - any value\n * @returns true is value is an object function is an object)\n*/\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/*\n * isDefined - a convenience function for checking if a value is not equal to undefined\n *\n * @param u - any value\n * @returns true if u is anything other than undefined\n */\nfunction isDefined(u) {\n return !isType(u, 'undefined');\n}\n\n/*\n * isIterable - convenience function for checking if a value can be iterated, essentially\n * whether it is an object or an array.\n *\n * @param i - any value\n * @returns true if i is an object or an array as determined by `typeName`\n */\nfunction isIterable(i) {\n var type = typeName(i);\n return (type === 'object' || type === 'array');\n}\n\n/*\n * isError - convenience function for checking if a value is of an error type\n *\n * @param e - any value\n * @returns true if e is an error\n */\nfunction isError(e) {\n return isType(e, 'error');\n}\n\nfunction traverse(obj, func, seen) {\n var k, v, i;\n var isObj = isType(obj, 'object');\n var isArray = isType(obj, 'array');\n var keys = [];\n\n if (isObj && seen.indexOf(obj) !== -1) {\n return obj;\n }\n seen.push(obj);\n\n if (isObj) {\n for (k in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, k)) {\n keys.push(k);\n }\n }\n } else if (isArray) {\n for (i = 0; i < obj.length; ++i) {\n keys.push(i);\n }\n }\n\n var result = isObj ? {} : [];\n for (i = 0; i < keys.length; ++i) {\n k = keys[i];\n v = obj[k];\n result[k] = func(k, v, seen);\n }\n\n return (keys.length != 0) ? result : obj;\n}\n\nfunction redact() {\n return '********';\n}\n\n// from http://stackoverflow.com/a/8809472/1138191\nfunction uuid4() {\n var d = now();\n var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (d + Math.random() * 16) % 16 | 0;\n d = Math.floor(d / 16);\n return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16);\n });\n return uuid;\n}\n\nvar LEVELS = {\n debug: 0,\n info: 1,\n warning: 2,\n error: 3,\n critical: 4\n};\n\nfunction sanitizeUrl(url) {\n var baseUrlParts = parseUri(url);\n // remove a trailing # if there is no anchor\n if (baseUrlParts.anchor === '') {\n baseUrlParts.source = baseUrlParts.source.replace('#', '');\n }\n\n url = baseUrlParts.source.replace('?' + baseUrlParts.query, '');\n return url;\n}\n\nvar parseUriOptions = {\n strictMode: false,\n key: [\n 'source',\n 'protocol',\n 'authority',\n 'userInfo',\n 'user',\n 'password',\n 'host',\n 'port',\n 'relative',\n 'path',\n 'directory',\n 'file',\n 'query',\n 'anchor'\n ],\n q: {\n name: 'queryKey',\n parser: /(?:^|&)([^&=]*)=?([^&]*)/g\n },\n parser: {\n strict: /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,\n loose: /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/\n }\n};\n\nfunction parseUri(str) {\n if (!isType(str, 'string')) {\n throw new Error('received invalid input');\n }\n\n var o = parseUriOptions;\n var m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str);\n var uri = {};\n var i = o.key.length;\n\n while (i--) {\n uri[o.key[i]] = m[i] || '';\n }\n\n uri[o.q.name] = {};\n uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {\n if ($1) {\n uri[o.q.name][$1] = $2;\n }\n });\n\n return uri;\n}\n\nfunction addParamsAndAccessTokenToPath(accessToken, options, params) {\n params = params || {};\n params.access_token = accessToken;\n var paramsArray = [];\n var k;\n for (k in params) {\n if (Object.prototype.hasOwnProperty.call(params, k)) {\n paramsArray.push([k, params[k]].join('='));\n }\n }\n var query = '?' + paramsArray.sort().join('&');\n\n options = options || {};\n options.path = options.path || '';\n var qs = options.path.indexOf('?');\n var h = options.path.indexOf('#');\n var p;\n if (qs !== -1 && (h === -1 || h > qs)) {\n p = options.path;\n options.path = p.substring(0,qs) + query + '&' + p.substring(qs+1);\n } else {\n if (h !== -1) {\n p = options.path;\n options.path = p.substring(0,h) + query + p.substring(h);\n } else {\n options.path = options.path + query;\n }\n }\n}\n\nfunction formatUrl(u, protocol) {\n protocol = protocol || u.protocol;\n if (!protocol && u.port) {\n if (u.port === 80) {\n protocol = 'http:';\n } else if (u.port === 443) {\n protocol = 'https:';\n }\n }\n protocol = protocol || 'https:';\n\n if (!u.hostname) {\n return null;\n }\n var result = protocol + '//' + u.hostname;\n if (u.port) {\n result = result + ':' + u.port;\n }\n if (u.path) {\n result = result + u.path;\n }\n return result;\n}\n\nfunction stringify(obj, backup) {\n var value, error;\n try {\n value = RollbarJSON.stringify(obj);\n } catch (jsonError) {\n if (backup && isFunction(backup)) {\n try {\n value = backup(obj);\n } catch (backupError) {\n error = backupError;\n }\n } else {\n error = jsonError;\n }\n }\n return {error: error, value: value};\n}\n\nfunction jsonParse(s) {\n var value, error;\n try {\n value = RollbarJSON.parse(s);\n } catch (e) {\n error = e;\n }\n return {error: error, value: value};\n}\n\nfunction makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n mode,\n backupMessage,\n errorParser\n) {\n var location = {\n url: url || '',\n line: lineno,\n column: colno\n };\n location.func = errorParser.guessFunctionName(location.url, location.line);\n location.context = errorParser.gatherContext(location.url, location.line);\n var href = document && document.location && document.location.href;\n var useragent = window && window.navigator && window.navigator.userAgent;\n return {\n 'mode': mode,\n 'message': error ? String(error) : (message || backupMessage),\n 'url': href,\n 'stack': [location],\n 'useragent': useragent\n };\n}\n\nfunction wrapCallback(logger, f) {\n return function(err, resp) {\n try {\n f(err, resp);\n } catch (e) {\n logger.error(e);\n }\n };\n}\n\nfunction createItem(args, logger, notifier, requestKeys, lambdaContext) {\n var message, err, custom, callback, request;\n var arg;\n var extraArgs = [];\n\n for (var i = 0, l = args.length; i < l; ++i) {\n arg = args[i];\n\n var typ = typeName(arg);\n switch (typ) {\n case 'undefined':\n break;\n case 'string':\n message ? extraArgs.push(arg) : message = arg;\n break;\n case 'function':\n callback = wrapCallback(logger, arg);\n break;\n case 'date':\n extraArgs.push(arg);\n break;\n case 'error':\n case 'domexception':\n err ? extraArgs.push(arg) : err = arg;\n break;\n case 'object':\n case 'array':\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n if (requestKeys && typ === 'object' && !request) {\n for (var j = 0, len = requestKeys.length; j < len; ++j) {\n if (arg[requestKeys[j]] !== undefined) {\n request = arg;\n break;\n }\n }\n if (request) {\n break;\n }\n }\n custom ? extraArgs.push(arg) : custom = arg;\n break;\n default:\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n extraArgs.push(arg);\n }\n }\n\n if (extraArgs.length > 0) {\n // if custom is an array this turns it into an object with integer keys\n custom = extend(true, {}, custom);\n custom.extraArgs = extraArgs;\n }\n\n var item = {\n message: message,\n err: err,\n custom: custom,\n timestamp: now(),\n callback: callback,\n uuid: uuid4()\n };\n if (custom && custom.level !== undefined) {\n item.level = custom.level;\n delete custom.level;\n }\n if (requestKeys && request) {\n item.request = request;\n }\n if (lambdaContext) {\n item.lambdaContext = lambdaContext;\n }\n item._originalArgs = args;\n return item;\n}\n\n/*\n * get - given an obj/array and a keypath, return the value at that keypath or\n * undefined if not possible.\n *\n * @param obj - an object or array\n * @param path - a string of keys separated by '.' such as 'plugin.jquery.0.message'\n * which would correspond to 42 in `{plugin: {jquery: [{message: 42}]}}`\n */\nfunction get(obj, path) {\n if (!obj) {\n return undefined;\n }\n var keys = path.split('.');\n var result = obj;\n try {\n for (var i = 0, len = keys.length; i < len; ++i) {\n result = result[keys[i]];\n }\n } catch (e) {\n result = undefined;\n }\n return result;\n}\n\nfunction set(obj, path, value) {\n if (!obj) {\n return;\n }\n var keys = path.split('.');\n var len = keys.length;\n if (len < 1) {\n return;\n }\n if (len === 1) {\n obj[keys[0]] = value;\n return;\n }\n try {\n var temp = obj[keys[0]] || {};\n var replacement = temp;\n for (var i = 1; i < len-1; i++) {\n temp[keys[i]] = temp[keys[i]] || {};\n temp = temp[keys[i]];\n }\n temp[keys[len-1]] = value;\n obj[keys[0]] = replacement;\n } catch (e) {\n return;\n }\n}\n\nfunction scrub(data, scrubFields) {\n scrubFields = scrubFields || [];\n var paramRes = _getScrubFieldRegexs(scrubFields);\n var queryRes = _getScrubQueryParamRegexs(scrubFields);\n\n function redactQueryParam(dummy0, paramPart, dummy1, dummy2, dummy3, valPart) {\n return paramPart + redact(valPart);\n }\n\n function paramScrubber(v) {\n var i;\n if (isType(v, 'string')) {\n for (i = 0; i < queryRes.length; ++i) {\n v = v.replace(queryRes[i], redactQueryParam);\n }\n }\n return v;\n }\n\n function valScrubber(k, v) {\n var i;\n for (i = 0; i < paramRes.length; ++i) {\n if (paramRes[i].test(k)) {\n v = redact(v);\n break;\n }\n }\n return v;\n }\n\n function scrubber(k, v, seen) {\n var tmpV = valScrubber(k, v);\n if (tmpV === v) {\n if (isType(v, 'object') || isType(v, 'array')) {\n return traverse(v, scrubber, seen);\n }\n return paramScrubber(tmpV);\n } else {\n return tmpV;\n }\n }\n\n return traverse(data, scrubber, []);\n}\n\nfunction _getScrubFieldRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '^\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?$';\n ret.push(new RegExp(pat, 'i'));\n }\n return ret;\n}\n\n\nfunction _getScrubQueryParamRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?';\n ret.push(new RegExp('(' + pat + '=)([^&\\\\n]+)', 'igm'));\n }\n return ret;\n}\n\nfunction formatArgsAsString(args) {\n var i, len, arg;\n var result = [];\n for (i = 0, len = args.length; i < len; i++) {\n arg = args[i];\n if (typeof arg === 'object') {\n arg = stringify(arg);\n arg = arg.error || arg.value;\n if (arg.length > 500)\n arg = arg.substr(0,500)+'...';\n } else if (typeof arg === 'undefined') {\n arg = 'undefined';\n }\n result.push(arg);\n }\n return result.join(' ');\n}\n\nfunction now() {\n if (Date.now) {\n return +Date.now();\n }\n return +new Date();\n}\n\nmodule.exports = {\n isType: isType,\n typeName: typeName,\n isFunction: isFunction,\n isNativeFunction: isNativeFunction,\n isIterable: isIterable,\n isError: isError,\n extend: extend,\n traverse: traverse,\n redact: redact,\n uuid4: uuid4,\n LEVELS: LEVELS,\n sanitizeUrl: sanitizeUrl,\n addParamsAndAccessTokenToPath: addParamsAndAccessTokenToPath,\n formatUrl: formatUrl,\n stringify: stringify,\n jsonParse: jsonParse,\n makeUnhandledStackInfo: makeUnhandledStackInfo,\n createItem: createItem,\n get: get,\n set: set,\n scrub: scrub,\n formatArgsAsString: formatArgsAsString,\n now: now\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/utility.js\n// module id = 6\n// module chunks = 0","'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) {/**/}\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[0],\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t} else if ((typeof target !== 'object' && typeof target !== 'function') || target == null) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = target[name];\n\t\t\t\tcopy = options[name];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\ttarget[name] = extend(deep, clone, copy);\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/extend/index.js\n// module id = 7\n// module chunks = 0","// json3.js\n// 2017-02-21\n// Public Domain.\n// NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n// See http://www.JSON.org/js.html\n// This code should be minified before deployment.\n// See http://javascript.crockford.com/jsmin.html\n\n// USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n// NOT CONTROL.\n\n// This file creates a global JSON object containing two methods: stringify\n// and parse. This file provides the ES5 JSON capability to ES3 systems.\n// If a project might run on IE8 or earlier, then this file should be included.\n// This file does nothing on ES5 systems.\n\n// JSON.stringify(value, replacer, space)\n// value any JavaScript value, usually an object or array.\n// replacer an optional parameter that determines how object\n// values are stringified for objects. It can be a\n// function or an array of strings.\n// space an optional parameter that specifies the indentation\n// of nested structures. If it is omitted, the text will\n// be packed without extra whitespace. If it is a number,\n// it will specify the number of spaces to indent at each\n// level. If it is a string (such as \"\\t\" or \" \"),\n// it contains the characters used to indent at each level.\n// This method produces a JSON text from a JavaScript value.\n// When an object value is found, if the object contains a toJSON\n// method, its toJSON method will be called and the result will be\n// stringified. A toJSON method does not serialize: it returns the\n// value represented by the name/value pair that should be serialized,\n// or undefined if nothing should be serialized. The toJSON method\n// will be passed the key associated with the value, and this will be\n// bound to the value.\n\n// For example, this would serialize Dates as ISO strings.\n\n// Date.prototype.toJSON = function (key) {\n// function f(n) {\n// // Format integers to have at least two digits.\n// return (n < 10)\n// ? \"0\" + n\n// : n;\n// }\n// return this.getUTCFullYear() + \"-\" +\n// f(this.getUTCMonth() + 1) + \"-\" +\n// f(this.getUTCDate()) + \"T\" +\n// f(this.getUTCHours()) + \":\" +\n// f(this.getUTCMinutes()) + \":\" +\n// f(this.getUTCSeconds()) + \"Z\";\n// };\n\n// You can provide an optional replacer method. It will be passed the\n// key and value of each member, with this bound to the containing\n// object. The value that is returned from your method will be\n// serialized. If your method returns undefined, then the member will\n// be excluded from the serialization.\n\n// If the replacer parameter is an array of strings, then it will be\n// used to select the members to be serialized. It filters the results\n// such that only members with keys listed in the replacer array are\n// stringified.\n\n// Values that do not have JSON representations, such as undefined or\n// functions, will not be serialized. Such values in objects will be\n// dropped; in arrays they will be replaced with null. You can use\n// a replacer function to replace those with JSON values.\n\n// JSON.stringify(undefined) returns undefined.\n\n// The optional space parameter produces a stringification of the\n// value that is filled with line breaks and indentation to make it\n// easier to read.\n\n// If the space parameter is a non-empty string, then that string will\n// be used for indentation. If the space parameter is a number, then\n// the indentation will be that many spaces.\n\n// Example:\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}]);\n// // text is '[\"e\",{\"pluribus\":\"unum\"}]'\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}], null, \"\\t\");\n// // text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\n\n// text = JSON.stringify([new Date()], function (key, value) {\n// return this[key] instanceof Date\n// ? \"Date(\" + this[key] + \")\"\n// : value;\n// });\n// // text is '[\"Date(---current time---)\"]'\n\n// JSON.parse(text, reviver)\n// This method parses a JSON text to produce an object or array.\n// It can throw a SyntaxError exception.\n// This has been modified to use JSON-js/json_parse_state.js as the\n// parser instead of the one built around eval found in JSON-js/json2.js\n\n// The optional reviver parameter is a function that can filter and\n// transform the results. It receives each of the keys and values,\n// and its return value is used instead of the original value.\n// If it returns what it received, then the structure is not modified.\n// If it returns undefined then the member is deleted.\n\n// Example:\n\n// // Parse the text. Values that look like ISO date strings will\n// // be converted to Date objects.\n\n// myData = JSON.parse(text, function (key, value) {\n// var a;\n// if (typeof value === \"string\") {\n// a =\n// /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n// if (a) {\n// return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n// +a[5], +a[6]));\n// }\n// }\n// return value;\n// });\n\n// myData = JSON.parse('[\"Date(09/09/2001)\"]', function (key, value) {\n// var d;\n// if (typeof value === \"string\" &&\n// value.slice(0, 5) === \"Date(\" &&\n// value.slice(-1) === \")\") {\n// d = new Date(value.slice(5, -1));\n// if (d) {\n// return d;\n// }\n// }\n// return value;\n// });\n\n// This is a reference implementation. You are free to copy, modify, or\n// redistribute.\n\n/*jslint\n for, this\n */\n\n/*property\n JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\n getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\n lastIndex, length, parse, prototype, push, replace, slice, stringify,\n test, toJSON, toString, valueOf\n */\n\nvar setupCustomJSON = function(JSON) {\n\n var rx_one = /^[\\],:{}\\s]*$/;\n var rx_two = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g;\n var rx_three = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\n var rx_four = /(?:^|:|,)(?:\\s*\\[)+/g;\n var rx_escapable = /[\\\\\"\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n var rx_dangerous = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\n function f(n) {\n // Format integers to have at least two digits.\n return n < 10\n ? \"0\" + n\n : n;\n }\n\n function this_value() {\n return this.valueOf();\n }\n\n if (typeof Date.prototype.toJSON !== \"function\") {\n\n Date.prototype.toJSON = function () {\n\n return isFinite(this.valueOf())\n ? this.getUTCFullYear() + \"-\" +\n f(this.getUTCMonth() + 1) + \"-\" +\n f(this.getUTCDate()) + \"T\" +\n f(this.getUTCHours()) + \":\" +\n f(this.getUTCMinutes()) + \":\" +\n f(this.getUTCSeconds()) + \"Z\"\n : null;\n };\n\n Boolean.prototype.toJSON = this_value;\n Number.prototype.toJSON = this_value;\n String.prototype.toJSON = this_value;\n }\n\n var gap;\n var indent;\n var meta;\n var rep;\n\n\n function quote(string) {\n\n // If the string contains no control characters, no quote characters, and no\n // backslash characters, then we can safely slap some quotes around it.\n // Otherwise we must also replace the offending characters with safe escape\n // sequences.\n\n rx_escapable.lastIndex = 0;\n return rx_escapable.test(string)\n ? \"\\\"\" + string.replace(rx_escapable, function (a) {\n var c = meta[a];\n return typeof c === \"string\"\n ? c\n : \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n }) + \"\\\"\"\n : \"\\\"\" + string + \"\\\"\";\n }\n\n\n function str(key, holder) {\n\n // Produce a string from holder[key].\n\n var i; // The loop counter.\n var k; // The member key.\n var v; // The member value.\n var length;\n var mind = gap;\n var partial;\n var value = holder[key];\n\n // If the value has a toJSON method, call it to obtain a replacement value.\n\n if (value && typeof value === \"object\" &&\n typeof value.toJSON === \"function\") {\n value = value.toJSON(key);\n }\n\n // If we were called with a replacer function, then call the replacer to\n // obtain a replacement value.\n\n if (typeof rep === \"function\") {\n value = rep.call(holder, key, value);\n }\n\n // What happens next depends on the value's type.\n\n switch (typeof value) {\n case \"string\":\n return quote(value);\n\n case \"number\":\n\n // JSON numbers must be finite. Encode non-finite numbers as null.\n\n return isFinite(value)\n ? String(value)\n : \"null\";\n\n case \"boolean\":\n case \"null\":\n\n // If the value is a boolean or null, convert it to a string. Note:\n // typeof null does not produce \"null\". The case is included here in\n // the remote chance that this gets fixed someday.\n\n return String(value);\n\n // If the type is \"object\", we might be dealing with an object or an array or\n // null.\n\n case \"object\":\n\n // Due to a specification blunder in ECMAScript, typeof null is \"object\",\n // so watch out for that case.\n\n if (!value) {\n return \"null\";\n }\n\n // Make an array to hold the partial results of stringifying this object value.\n\n gap += indent;\n partial = [];\n\n // Is the value an array?\n\n if (Object.prototype.toString.apply(value) === \"[object Array]\") {\n\n // The value is an array. Stringify every element. Use null as a placeholder\n // for non-JSON values.\n\n length = value.length;\n for (i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || \"null\";\n }\n\n // Join all of the elements together, separated with commas, and wrap them in\n // brackets.\n\n v = partial.length === 0\n ? \"[]\"\n : gap\n ? \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\"\n : \"[\" + partial.join(\",\") + \"]\";\n gap = mind;\n return v;\n }\n\n // If the replacer is an array, use it to select the members to be stringified.\n\n if (rep && typeof rep === \"object\") {\n length = rep.length;\n for (i = 0; i < length; i += 1) {\n if (typeof rep[i] === \"string\") {\n k = rep[i];\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n } else {\n\n // Otherwise, iterate through all of the keys in the object.\n\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n }\n\n // Join all of the member texts together, separated with commas,\n // and wrap them in braces.\n\n v = partial.length === 0\n ? \"{}\"\n : gap\n ? \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\"\n : \"{\" + partial.join(\",\") + \"}\";\n gap = mind;\n return v;\n }\n }\n\n // If the JSON object does not yet have a stringify method, give it one.\n\n if (typeof JSON.stringify !== \"function\") {\n meta = { // table of character substitutions\n \"\\b\": \"\\\\b\",\n \"\\t\": \"\\\\t\",\n \"\\n\": \"\\\\n\",\n \"\\f\": \"\\\\f\",\n \"\\r\": \"\\\\r\",\n \"\\\"\": \"\\\\\\\"\",\n \"\\\\\": \"\\\\\\\\\"\n };\n JSON.stringify = function (value, replacer, space) {\n\n // The stringify method takes a value and an optional replacer, and an optional\n // space parameter, and returns a JSON text. The replacer can be a function\n // that can replace values, or an array of strings that will select the keys.\n // A default replacer method can be provided. Use of the space parameter can\n // produce text that is more easily readable.\n\n var i;\n gap = \"\";\n indent = \"\";\n\n // If the space parameter is a number, make an indent string containing that\n // many spaces.\n\n if (typeof space === \"number\") {\n for (i = 0; i < space; i += 1) {\n indent += \" \";\n }\n\n // If the space parameter is a string, it will be used as the indent string.\n\n } else if (typeof space === \"string\") {\n indent = space;\n }\n\n // If there is a replacer, it must be a function or an array.\n // Otherwise, throw an error.\n\n rep = replacer;\n if (replacer && typeof replacer !== \"function\" &&\n (typeof replacer !== \"object\" ||\n typeof replacer.length !== \"number\")) {\n throw new Error(\"JSON.stringify\");\n }\n\n // Make a fake root object containing our value under the key of \"\".\n // Return the result of stringifying the value.\n\n return str(\"\", {\"\": value});\n };\n }\n\n\n // If the JSON object does not yet have a parse method, give it one.\n\n if (typeof JSON.parse !== \"function\") {\n JSON.parse = (function () {\n\n // This function creates a JSON parse function that uses a state machine rather\n // than the dangerous eval function to parse a JSON text.\n\n var state; // The state of the parser, one of\n // 'go' The starting state\n // 'ok' The final, accepting state\n // 'firstokey' Ready for the first key of the object or\n // the closing of an empty object\n // 'okey' Ready for the next key of the object\n // 'colon' Ready for the colon\n // 'ovalue' Ready for the value half of a key/value pair\n // 'ocomma' Ready for a comma or closing }\n // 'firstavalue' Ready for the first value of an array or\n // an empty array\n // 'avalue' Ready for the next value of an array\n // 'acomma' Ready for a comma or closing ]\n var stack; // The stack, for controlling nesting.\n var container; // The current container object or array\n var key; // The current key\n var value; // The current value\n var escapes = { // Escapement translation table\n \"\\\\\": \"\\\\\",\n \"\\\"\": \"\\\"\",\n \"/\": \"/\",\n \"t\": \"\\t\",\n \"n\": \"\\n\",\n \"r\": \"\\r\",\n \"f\": \"\\f\",\n \"b\": \"\\b\"\n };\n var string = { // The actions for string tokens\n go: function () {\n state = \"ok\";\n },\n firstokey: function () {\n key = value;\n state = \"colon\";\n },\n okey: function () {\n key = value;\n state = \"colon\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var number = { // The actions for number tokens\n go: function () {\n state = \"ok\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var action = {\n\n // The action table describes the behavior of the machine. It contains an\n // object for each token. Each object contains a method that is called when\n // a token is matched in a state. An object will lack a method for illegal\n // states.\n\n \"{\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = {};\n state = \"firstokey\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = {};\n state = \"firstokey\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n }\n },\n \"}\": {\n firstokey: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n ocomma: function () {\n var pop = stack.pop();\n container[key] = value;\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \"[\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = [];\n state = \"firstavalue\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = [];\n state = \"firstavalue\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n }\n },\n \"]\": {\n firstavalue: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n acomma: function () {\n var pop = stack.pop();\n container.push(value);\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \":\": {\n colon: function () {\n if (Object.hasOwnProperty.call(container, key)) {\n throw new SyntaxError(\"Duplicate key '\" + key + \"\\\"\");\n }\n state = \"ovalue\";\n }\n },\n \",\": {\n ocomma: function () {\n container[key] = value;\n state = \"okey\";\n },\n acomma: function () {\n container.push(value);\n state = \"avalue\";\n }\n },\n \"true\": {\n go: function () {\n value = true;\n state = \"ok\";\n },\n ovalue: function () {\n value = true;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = true;\n state = \"acomma\";\n },\n avalue: function () {\n value = true;\n state = \"acomma\";\n }\n },\n \"false\": {\n go: function () {\n value = false;\n state = \"ok\";\n },\n ovalue: function () {\n value = false;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = false;\n state = \"acomma\";\n },\n avalue: function () {\n value = false;\n state = \"acomma\";\n }\n },\n \"null\": {\n go: function () {\n value = null;\n state = \"ok\";\n },\n ovalue: function () {\n value = null;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = null;\n state = \"acomma\";\n },\n avalue: function () {\n value = null;\n state = \"acomma\";\n }\n }\n };\n\n function debackslashify(text) {\n\n // Remove and replace any backslash escapement.\n\n return text.replace(/\\\\(?:u(.{4})|([^u]))/g, function (ignore, b, c) {\n return b\n ? String.fromCharCode(parseInt(b, 16))\n : escapes[c];\n });\n }\n\n return function (source, reviver) {\n\n // A regular expression is used to extract tokens from the JSON text.\n // The extraction process is cautious.\n\n var result;\n var tx = /^[\\u0020\\t\\n\\r]*(?:([,:\\[\\]{}]|true|false|null)|(-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)|\"((?:[^\\r\\n\\t\\\\\\\"]|\\\\(?:[\"\\\\\\/trnfb]|u[0-9a-fA-F]{4}))*)\")/;\n\n // Set the starting state.\n\n state = \"go\";\n\n // The stack records the container, key, and state for each object or array\n // that contains another object or array while processing nested structures.\n\n stack = [];\n\n // If any error occurs, we will catch it and ultimately throw a syntax error.\n\n try {\n\n // For each token...\n\n while (true) {\n result = tx.exec(source);\n if (!result) {\n break;\n }\n\n // result is the result array from matching the tokenizing regular expression.\n // result[0] contains everything that matched, including any initial whitespace.\n // result[1] contains any punctuation that was matched, or true, false, or null.\n // result[2] contains a matched number, still in string form.\n // result[3] contains a matched string, without quotes but with escapement.\n\n if (result[1]) {\n\n // Token: Execute the action for this state and token.\n\n action[result[1]][state]();\n\n } else if (result[2]) {\n\n // Number token: Convert the number string into a number value and execute\n // the action for this state and number.\n\n value = +result[2];\n number[state]();\n } else {\n\n // String token: Replace the escapement sequences and execute the action for\n // this state and string.\n\n value = debackslashify(result[3]);\n string[state]();\n }\n\n // Remove the token from the string. The loop will continue as long as there\n // are tokens. This is a slow process, but it allows the use of ^ matching,\n // which assures that no illegal tokens slip through.\n\n source = source.slice(result[0].length);\n }\n\n // If we find a state/token combination that is illegal, then the action will\n // cause an error. We handle the error by simply changing the state.\n\n } catch (e) {\n state = e;\n }\n\n // The parsing is finished. If we are not in the final \"ok\" state, or if the\n // remaining source contains anything except whitespace, then we did not have\n //a well-formed JSON text.\n\n if (state !== \"ok\" || (/[^\\u0020\\t\\n\\r]/.test(source))) {\n throw (state instanceof SyntaxError)\n ? state\n : new SyntaxError(\"JSON\");\n }\n\n // If there is a reviver function, we recursively walk the new structure,\n // passing each name/value pair to the reviver function for possible\n // transformation, starting with a temporary root object that holds the current\n // value in an empty key. If there is not a reviver function, we simply return\n // that value.\n\n return (typeof reviver === \"function\")\n ? (function walk(holder, key) {\n var k;\n var v;\n var val = holder[key];\n if (val && typeof val === \"object\") {\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(val, k)) {\n v = walk(val, k);\n if (v !== undefined) {\n val[k] = v;\n } else {\n delete val[k];\n }\n }\n }\n }\n return reviver.call(holder, key, val);\n }({\"\": value}, \"\"))\n : value;\n };\n }());\n }\n}\n\nmodule.exports = setupCustomJSON;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./vendor/JSON-js/json3.js\n// module id = 8\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Notifier - the internal object responsible for delegating between the client exposed API, the\n * chain of transforms necessary to turn an item into something that can be sent to Rollbar, and the\n * queue which handles the communcation with the Rollbar API servers.\n *\n * @param queue - an object that conforms to the interface: addItem(item, callback)\n * @param options - an object representing the options to be set for this notifier, this should have\n * any defaults already set by the caller\n */\nfunction Notifier(queue, options) {\n this.queue = queue;\n this.options = options;\n this.transforms = [];\n}\n\n/*\n * configure - updates the options for this notifier with the passed in object\n *\n * @param options - an object which gets merged with the current options set on this notifier\n * @returns this\n */\nNotifier.prototype.configure = function(options) {\n this.queue && this.queue.configure(options);\n var oldOptions = this.options;\n this.options = _.extend(true, {}, oldOptions, options);\n return this;\n};\n\n/*\n * addTransform - adds a transform onto the end of the queue of transforms for this notifier\n *\n * @param transform - a function which takes three arguments:\n * * item: An Object representing the data to eventually be sent to Rollbar\n * * options: The current value of the options for this notifier\n * * callback: function(err: (Null|Error), item: (Null|Object)) the transform must call this\n * callback with a null value for error if it wants the processing chain to continue, otherwise\n * with an error to terminate the processing. The item should be the updated item after this\n * transform is finished modifying it.\n */\nNotifier.prototype.addTransform = function(transform) {\n if (_.isFunction(transform)) {\n this.transforms.push(transform);\n }\n return this;\n};\n\n/*\n * log - the internal log function which applies the configured transforms and then pushes onto the\n * queue to be sent to the backend.\n *\n * @param item - An object with the following structure:\n * message [String] - An optional string to be sent to rollbar\n * error [Error] - An optional error\n *\n * @param callback - A function of type function(err, resp) which will be called with exactly one\n * null argument and one non-null argument. The callback will be called once, either during the\n * transform stage if an error occurs inside a transform, or in response to the communication with\n * the backend. The second argument will be the response from the backend in case of success.\n */\nNotifier.prototype.log = function(item, callback) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!this.options.enabled) {\n return callback(new Error('Rollbar is not enabled'));\n }\n\n this.queue.addPendingItem(item);\n var originalError = item.err;\n this._applyTransforms(item, function(err, i) {\n if (err) {\n this.queue.removePendingItem(item);\n return callback(err, null);\n }\n this.queue.addItem(i, callback, originalError, item);\n }.bind(this));\n};\n\n/* Internal */\n\n/*\n * _applyTransforms - Applies the transforms that have been added to this notifier sequentially. See\n * `addTransform` for more information.\n *\n * @param item - An item to be transformed\n * @param callback - A function of type function(err, item) which will be called with a non-null\n * error and a null item in the case of a transform failure, or a null error and non-null item after\n * all transforms have been applied.\n */\nNotifier.prototype._applyTransforms = function(item, callback) {\n var transformIndex = -1;\n var transformsLength = this.transforms.length;\n var transforms = this.transforms;\n var options = this.options;\n\n var cb = function(err, i) {\n if (err) {\n callback(err, null);\n return;\n }\n\n transformIndex++;\n\n if (transformIndex === transformsLength) {\n callback(null, i);\n return;\n }\n\n transforms[transformIndex](i, options, cb);\n };\n\n cb(null, item);\n};\n\nmodule.exports = Notifier;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/notifier.js\n// module id = 9\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nvar MAX_EVENTS = 100;\n\nfunction Telemeter(options) {\n this.queue = [];\n this.options = _.extend(true, {}, options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n this.maxQueueSize = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n}\n\nTelemeter.prototype.configure = function(options) {\n var oldOptions = this.options;\n this.options = _.extend(true, {}, oldOptions, options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n var newMaxEvents = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n var deleteCount = 0;\n if (this.maxQueueSize > newMaxEvents) {\n deleteCount = this.maxQueueSize - newMaxEvents;\n }\n this.maxQueueSize = newMaxEvents;\n this.queue.splice(0, deleteCount);\n};\n\nTelemeter.prototype.copyEvents = function() {\n return Array.prototype.slice.call(this.queue, 0);\n};\n\nTelemeter.prototype.capture = function(type, metadata, level, rollbarUUID, timestamp) {\n var e = {\n level: getLevel(type, level),\n type: type,\n timestamp_ms: timestamp || _.now(),\n body: metadata,\n source: 'client'\n };\n if (rollbarUUID) {\n e.uuid = rollbarUUID;\n }\n\n try {\n if (_.isFunction(this.options.filterTelemetry) && this.options.filterTelemetry(e)) {\n return false;\n }\n } catch (e) {\n this.options.filterTelemetry = null;\n }\n\n this.push(e);\n return e;\n};\n\nTelemeter.prototype.captureEvent = function(metadata, level, rollbarUUID) {\n return this.capture('manual', metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.captureError = function(err, level, rollbarUUID, timestamp) {\n var metadata = {\n message: err.message || String(err)\n };\n if (err.stack) {\n metadata.stack = err.stack;\n }\n return this.capture('error', metadata, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureLog = function(message, level, rollbarUUID, timestamp) {\n return this.capture('log', {\n message: message\n }, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureNetwork = function(metadata, subtype, rollbarUUID, requestData) {\n subtype = subtype || 'xhr';\n metadata.subtype = metadata.subtype || subtype;\n if (requestData) {\n metadata.request = requestData;\n }\n var level = this.levelFromStatus(metadata.status_code);\n return this.capture('network', metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.levelFromStatus = function(statusCode) {\n if (statusCode >= 200 && statusCode < 400) {\n return 'info';\n }\n if (statusCode === 0 || statusCode >= 400) {\n return 'error';\n }\n return 'info';\n};\n\nTelemeter.prototype.captureDom = function(subtype, element, value, checked, rollbarUUID) {\n var metadata = {\n subtype: subtype,\n element: element\n };\n if (value !== undefined) {\n metadata.value = value;\n }\n if (checked !== undefined) {\n metadata.checked = checked;\n }\n return this.capture('dom', metadata, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureNavigation = function(from, to, rollbarUUID) {\n return this.capture('navigation', {from: from, to: to}, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureDomContentLoaded = function(ts) {\n return this.capture('navigation', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n */\n};\nTelemeter.prototype.captureLoad = function(ts) {\n return this.capture('navigation', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n */\n};\n\nTelemeter.prototype.captureConnectivityChange = function(type, rollbarUUID) {\n return this.captureNetwork({change: type}, 'connectivity', rollbarUUID);\n};\n\n// Only intended to be used internally by the notifier\nTelemeter.prototype._captureRollbarItem = function(item) {\n if (!this.options.includeItemsInTelemetry) {\n return;\n }\n if (item.err) {\n return this.captureError(item.err, item.level, item.uuid, item.timestamp);\n }\n if (item.message) {\n return this.captureLog(item.message, item.level, item.uuid, item.timestamp);\n }\n if (item.custom) {\n return this.capture('log', item.custom, item.level, item.uuid, item.timestamp);\n }\n};\n\nTelemeter.prototype.push = function(e) {\n this.queue.push(e);\n if (this.queue.length > this.maxQueueSize) {\n this.queue.shift();\n }\n};\n\nfunction getLevel(type, level) {\n if (level) {\n return level;\n }\n var defaultLevel = {\n error: 'error',\n manual: 'info'\n };\n return defaultLevel[type] || 'info';\n}\n\nmodule.exports = Telemeter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/telemetry.js\n// module id = 10\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\nvar helpers = require('./apiUtility');\n\nvar defaultOptions = {\n hostname: 'api.rollbar.com',\n path: '/api/1/item/',\n search: null,\n version: '1',\n protocol: 'https:',\n port: 443\n};\n\n/**\n * Api is an object that encapsulates methods of communicating with\n * the Rollbar API. It is a standard interface with some parts implemented\n * differently for server or browser contexts. It is an object that should\n * be instantiated when used so it can contain non-global options that may\n * be different for another instance of RollbarApi.\n *\n * @param options {\n * accessToken: the accessToken to use for posting items to rollbar\n * endpoint: an alternative endpoint to send errors to\n * must be a valid, fully qualified URL.\n * The default is: https://api.rollbar.com/api/1/item\n * proxy: if you wish to proxy requests provide an object\n * with the following keys:\n * host or hostname (required): foo.example.com\n * port (optional): 123\n * protocol (optional): https\n * }\n */\nfunction Api(options, t, u, j) {\n this.options = options;\n this.transport = t;\n this.url = u;\n this.jsonBackup = j;\n this.accessToken = options.accessToken;\n this.transportOptions = _getTransport(options, u);\n}\n\n/**\n *\n * @param data\n * @param callback\n */\nApi.prototype.postItem = function(data, callback) {\n var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n this.transport.post(this.accessToken, transportOptions, payload, callback);\n};\n\nApi.prototype.configure = function(options) {\n var oldOptions = this.oldOptions;\n this.options = _.extend(true, {}, oldOptions, options);\n this.transportOptions = _getTransport(this.options, this.url);\n if (this.options.accessToken !== undefined) {\n this.accessToken = this.options.accessToken;\n }\n return this;\n};\n\nfunction _getTransport(options, url) {\n return helpers.getTransportFromOptions(options, defaultOptions, url);\n}\n\nmodule.exports = Api;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/api.js\n// module id = 11\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction buildPayload(accessToken, data, jsonBackup) {\n if (!_.isType(data.context, 'string')) {\n var contextResult = _.stringify(data.context, jsonBackup);\n if (contextResult.error) {\n data.context = 'Error: could not serialize \\'context\\'';\n } else {\n data.context = contextResult.value || '';\n }\n if (data.context.length > 255) {\n data.context = data.context.substr(0, 255);\n }\n }\n return {\n access_token: accessToken,\n data: data\n };\n}\n\nfunction getTransportFromOptions(options, defaults, url) {\n var hostname = defaults.hostname;\n var protocol = defaults.protocol;\n var port = defaults.port;\n var path = defaults.path;\n var search = defaults.search;\n\n var proxy = options.proxy;\n if (options.endpoint) {\n var opts = url.parse(options.endpoint);\n hostname = opts.hostname;\n protocol = opts.protocol;\n port = opts.port;\n path = opts.pathname;\n search = opts.search;\n }\n return {\n hostname: hostname,\n protocol: protocol,\n port: port,\n path: path,\n search: search,\n proxy: proxy\n };\n}\n\nfunction transportOptions(transport, method) {\n var protocol = transport.protocol || 'https:';\n var port = transport.port || (protocol === 'http:' ? 80 : protocol === 'https:' ? 443 : undefined);\n var hostname = transport.hostname;\n var path = transport.path;\n if (transport.search) {\n path = path + transport.search;\n }\n if (transport.proxy) {\n path = protocol + '//' + hostname + path;\n hostname = transport.proxy.host || transport.proxy.hostname;\n port = transport.proxy.port;\n protocol = transport.proxy.protocol || protocol;\n }\n return {\n protocol: protocol,\n hostname: hostname,\n path: path,\n port: port,\n method: method\n };\n}\n\nfunction appendPathToPath(base, path) {\n var baseTrailingSlash = /\\/$/.test(base);\n var pathBeginningSlash = /^\\//.test(path);\n\n if (baseTrailingSlash && pathBeginningSlash) {\n path = path.substring(1);\n } else if (!baseTrailingSlash && !pathBeginningSlash) {\n path = '/' + path;\n }\n\n return base + path;\n}\n\nmodule.exports = {\n buildPayload: buildPayload,\n getTransportFromOptions: getTransportFromOptions,\n transportOptions: transportOptions,\n appendPathToPath: appendPathToPath\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/apiUtility.js\n// module id = 12\n// module chunks = 0","'use strict';\n\n/* eslint-disable no-console */\nrequire('console-polyfill');\nvar detection = require('./detection');\nvar _ = require('../utility');\n\nfunction error() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.error(_.formatArgsAsString(args));\n } else {\n console.error.apply(console, args);\n }\n}\n\nfunction info() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.info(_.formatArgsAsString(args));\n } else {\n console.info.apply(console, args);\n }\n}\n\nfunction log() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.log(_.formatArgsAsString(args));\n } else {\n console.log.apply(console, args);\n }\n}\n\n/* eslint-enable no-console */\n\nmodule.exports = {\n error: error,\n info: info,\n log: log\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/logger.js\n// module id = 13\n// module chunks = 0","// Console-polyfill. MIT license.\n// https://github.com/paulmillr/console-polyfill\n// Make it safe to do console.log() always.\n(function(global) {\n 'use strict';\n if (!global.console) {\n global.console = {};\n }\n var con = global.console;\n var prop, method;\n var dummy = function() {};\n var properties = ['memory'];\n var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' +\n 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' +\n 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',');\n while (prop = properties.pop()) if (!con[prop]) con[prop] = {};\n while (method = methods.pop()) if (!con[method]) con[method] = dummy;\n // Using `this` for web workers & supports Browserify / Webpack.\n})(typeof window === 'undefined' ? this : window);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/console-polyfill/index.js\n// module id = 14\n// module chunks = 0","'use strict';\n\n// This detection.js module is used to encapsulate any ugly browser/feature\n// detection we may need to do.\n\n// Figure out which version of IE we're using, if any.\n// This is gleaned from http://stackoverflow.com/questions/5574842/best-way-to-check-for-ie-less-than-9-in-javascript-without-library\n// Will return an integer on IE (i.e. 8)\n// Will return undefined otherwise\nfunction getIEVersion() {\n\tvar undef;\n\tif (!document) {\n\t\treturn undef;\n\t}\n\n var v = 3,\n div = document.createElement('div'),\n all = div.getElementsByTagName('i');\n\n while (\n div.innerHTML = '',\n all[0]\n );\n\n return v > 4 ? v : undef;\n}\n\nvar Detection = {\n ieVersion: getIEVersion\n};\n\nmodule.exports = Detection;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/detection.js\n// module id = 15\n// module chunks = 0","'use strict';\n\nfunction captureUncaughtExceptions(window, handler, shim) {\n if (!window) { return; }\n var oldOnError;\n\n if (typeof handler._rollbarOldOnError === 'function') {\n oldOnError = handler._rollbarOldOnError;\n } else if (window.onerror && !window.onerror.belongsToShim) {\n oldOnError = window.onerror;\n handler._rollbarOldOnError = oldOnError;\n }\n\n var fn = function() {\n var args = Array.prototype.slice.call(arguments, 0);\n _rollbarWindowOnError(window, handler, oldOnError, args);\n };\n fn.belongsToShim = shim;\n window.onerror = fn;\n}\n\nfunction _rollbarWindowOnError(window, r, old, args) {\n if (window._rollbarWrappedError) {\n if (!args[4]) {\n args[4] = window._rollbarWrappedError;\n }\n if (!args[5]) {\n args[5] = window._rollbarWrappedError._rollbarContext;\n }\n window._rollbarWrappedError = null;\n }\n\n r.handleUncaughtException.apply(r, args);\n if (old) {\n old.apply(window, args);\n }\n}\n\nfunction captureUnhandledRejections(window, handler, shim) {\n if (!window) { return; }\n\n if (typeof window._rollbarURH === 'function' && window._rollbarURH.belongsToShim) {\n window.removeEventListener('unhandledrejection', window._rollbarURH);\n }\n\n var rejectionHandler = function (evt) {\n var reason, promise, detail;\n try {\n reason = evt.reason;\n } catch (e) {\n reason = undefined;\n }\n try {\n promise = evt.promise;\n } catch (e) {\n promise = '[unhandledrejection] error getting `promise` from event';\n }\n try {\n detail = evt.detail;\n if (!reason && detail) {\n reason = detail.reason;\n promise = detail.promise;\n }\n } catch (e) {\n detail = '[unhandledrejection] error getting `detail` from event';\n }\n if (!reason) {\n reason = '[unhandledrejection] error getting `reason` from event';\n }\n\n if (handler && handler.handleUnhandledRejection) {\n handler.handleUnhandledRejection(reason, promise);\n }\n };\n rejectionHandler.belongsToShim = shim;\n window._rollbarURH = rejectionHandler;\n window.addEventListener('unhandledrejection', rejectionHandler);\n}\n\nfunction wrapGlobals(window, handler, shim) {\n if (!window) { return; }\n // Adapted from https://github.com/bugsnag/bugsnag-js\n var globals = 'EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload'.split(',');\n var i, global;\n for (i = 0; i < globals.length; ++i) {\n global = globals[i];\n\n if (window[global] && window[global].prototype) {\n _extendListenerPrototype(handler, window[global].prototype, shim);\n }\n }\n}\n\nfunction _extendListenerPrototype(handler, prototype, shim) {\n if (prototype.hasOwnProperty && prototype.hasOwnProperty('addEventListener')) {\n var oldAddEventListener = prototype.addEventListener;\n while (oldAddEventListener._rollbarOldAdd && oldAddEventListener.belongsToShim) {\n oldAddEventListener = oldAddEventListener._rollbarOldAdd;\n }\n var addFn = function(event, callback, bubble) {\n oldAddEventListener.call(this, event, handler.wrap(callback), bubble);\n };\n addFn._rollbarOldAdd = oldAddEventListener;\n addFn.belongsToShim = shim;\n prototype.addEventListener = addFn;\n\n var oldRemoveEventListener = prototype.removeEventListener;\n while (oldRemoveEventListener._rollbarOldRemove && oldRemoveEventListener.belongsToShim) {\n oldRemoveEventListener = oldRemoveEventListener._rollbarOldRemove;\n }\n var removeFn = function(event, callback, bubble) {\n oldRemoveEventListener.call(this, event, callback && callback._rollbar_wrapped || callback, bubble);\n };\n removeFn._rollbarOldRemove = oldRemoveEventListener;\n removeFn.belongsToShim = shim;\n prototype.removeEventListener = removeFn;\n }\n}\n\nmodule.exports = {\n captureUncaughtExceptions: captureUncaughtExceptions,\n captureUnhandledRejections: captureUnhandledRejections,\n wrapGlobals: wrapGlobals\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/globalSetup.js\n// module id = 16\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar logger = require('./logger');\n\n/*\n * accessToken may be embedded in payload but that should not\n * be assumed\n *\n * options: {\n * hostname\n * protocol\n * path\n * port\n * method\n * }\n *\n * params is an object containing key/value pairs. These\n * will be appended to the path as 'key=value&key=value'\n *\n * payload is an unserialized object\n */\n\nfunction get(accessToken, options, params, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n _.addParamsAndAccessTokenToPath(accessToken, options, params);\n\n var method = 'GET';\n var url = _.formatUrl(options);\n _makeRequest(accessToken, url, method, null, callback, requestFactory);\n}\n\nfunction post(accessToken, options, payload, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!payload) {\n return callback(new Error('Cannot send empty request'));\n }\n\n var stringifyResult = _.stringify(payload);\n if (stringifyResult.error) {\n return callback(stringifyResult.error);\n }\n\n var writeData = stringifyResult.value;\n var method = 'POST';\n var url = _.formatUrl(options);\n _makeRequest(accessToken, url, method, writeData, callback, requestFactory);\n}\n\nfunction _makeRequest(accessToken, url, method, data, callback, requestFactory) {\n var request;\n if (requestFactory) {\n request = requestFactory();\n } else {\n request = _createXMLHTTPObject();\n }\n if (!request) {\n // Give up, no way to send requests\n return callback(new Error('No way to send a request'));\n }\n try {\n try {\n var onreadystatechange = function() {\n try {\n if (onreadystatechange && request.readyState === 4) {\n onreadystatechange = undefined;\n\n var parseResponse = _.jsonParse(request.responseText);\n if (_isSuccess(request)) {\n callback(parseResponse.error, parseResponse.value);\n return;\n } else if (_isNormalFailure(request)) {\n if (request.status === 403) {\n // likely caused by using a server access token\n var message = parseResponse.value && parseResponse.value.message;\n logger.error(message);\n }\n // return valid http status codes\n callback(new Error(String(request.status)));\n } else {\n // IE will return a status 12000+ on some sort of connection failure,\n // so we return a blank error\n // http://msdn.microsoft.com/en-us/library/aa383770%28VS.85%29.aspx\n var msg = 'XHR response had no status code (likely connection failure)';\n callback(_newRetriableError(msg));\n }\n }\n } catch (ex) {\n //jquery source mentions firefox may error out while accessing the\n //request members if there is a network error\n //https://github.com/jquery/jquery/blob/a938d7b1282fc0e5c52502c225ae8f0cef219f0a/src/ajax/xhr.js#L111\n var exc;\n if (ex && ex.stack) {\n exc = ex;\n } else {\n exc = new Error(ex);\n }\n callback(exc);\n }\n };\n\n request.open(method, url, true);\n if (request.setRequestHeader) {\n request.setRequestHeader('Content-Type', 'application/json');\n request.setRequestHeader('X-Rollbar-Access-Token', accessToken);\n }\n request.onreadystatechange = onreadystatechange;\n request.send(data);\n } catch (e1) {\n // Sending using the normal xmlhttprequest object didn't work, try XDomainRequest\n if (typeof XDomainRequest !== 'undefined') {\n\n // Assume we are in a really old browser which has a bunch of limitations:\n // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\n // Extreme paranoia: if we have XDomainRequest then we have a window, but just in case\n if (!window || !window.location) {\n return callback(new Error('No window available during request, unknown environment'));\n }\n\n // If the current page is http, try and send over http\n if (window.location.href.substring(0, 5) === 'http:' && url.substring(0, 5) === 'https') {\n url = 'http' + url.substring(5);\n }\n\n var xdomainrequest = new XDomainRequest();\n xdomainrequest.onprogress = function() {};\n xdomainrequest.ontimeout = function() {\n var msg = 'Request timed out';\n var code = 'ETIMEDOUT';\n callback(_newRetriableError(msg, code));\n };\n xdomainrequest.onerror = function() {\n callback(new Error('Error during request'));\n };\n xdomainrequest.onload = function() {\n var parseResponse = _.jsonParse(xdomainrequest.responseText);\n callback(parseResponse.error, parseResponse.value);\n };\n xdomainrequest.open(method, url, true);\n xdomainrequest.send(data);\n } else {\n callback(new Error('Cannot find a method to transport a request'));\n }\n }\n } catch (e2) {\n callback(e2);\n }\n}\n\nfunction _createXMLHTTPObject() {\n /* global ActiveXObject:false */\n\n var factories = [\n function () {\n return new XMLHttpRequest();\n },\n function () {\n return new ActiveXObject('Msxml2.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Msxml3.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Microsoft.XMLHTTP');\n }\n ];\n var xmlhttp;\n var i;\n var numFactories = factories.length;\n for (i = 0; i < numFactories; i++) {\n /* eslint-disable no-empty */\n try {\n xmlhttp = factories[i]();\n break;\n } catch (e) {\n // pass\n }\n /* eslint-enable no-empty */\n }\n return xmlhttp;\n}\n\nfunction _isSuccess(r) {\n return r && r.status && r.status === 200;\n}\n\nfunction _isNormalFailure(r) {\n return r && _.isType(r.status, 'number') && r.status >= 400 && r.status < 600;\n}\n\nfunction _newRetriableError(message, code) {\n var err = new Error(message);\n err.code = code || 'ENOTFOUND';\n return err;\n}\n\nmodule.exports = {\n get: get,\n post: post\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transport.js\n// module id = 17\n// module chunks = 0","'use strict';\n\n// See https://nodejs.org/docs/latest/api/url.html\nfunction parse(url) {\n var result = {\n protocol: null, auth: null, host: null, path: null,\n hash: null, href: url, hostname: null, port: null,\n pathname: null, search: null, query: null\n };\n\n var i, last;\n i = url.indexOf('//');\n if (i !== -1) {\n result.protocol = url.substring(0,i);\n last = i+2;\n } else {\n last = 0;\n }\n \n i = url.indexOf('@', last);\n if (i !== -1) {\n result.auth = url.substring(last, i);\n last = i+1;\n }\n\n i = url.indexOf('/', last);\n if (i === -1) {\n i = url.indexOf('?', last);\n if (i === -1) {\n i = url.indexOf('#', last);\n if (i === -1) {\n result.host = url.substring(last);\n } else {\n result.host = url.substring(last, i);\n result.hash = url.substring(i);\n }\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n return result;\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n\n i = url.indexOf('#', last);\n if (i === -1) {\n result.path = url.substring(last);\n } else {\n result.path = url.substring(last, i);\n result.hash = url.substring(i);\n }\n\n if (result.path) {\n var pathParts = result.path.split('?');\n result.pathname = pathParts[0];\n result.query = pathParts[1];\n result.search = result.query ? '?' + result.query : null;\n }\n return result;\n}\n\nmodule.exports = {\n parse: parse\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/url.js\n// module id = 18\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar errorParser = require('./errorParser');\nvar logger = require('./logger');\n\nfunction handleItemWithError(item, options, callback) {\n item.data = item.data || {};\n if (item.err) {\n try {\n item.stackInfo = item.err._savedStackTrace || errorParser.parse(item.err);\n } catch (e)\n /* istanbul ignore next */\n {\n logger.error('Error while parsing the error object.', e);\n item.message = item.err.message || item.err.description || item.message || String(item.err);\n delete item.err;\n }\n }\n callback(null, item);\n}\n\nfunction ensureItemHasSomethingToSay(item, options, callback) {\n if (!item.message && !item.stackInfo && !item.custom) {\n callback(new Error('No message, stack info, or custom data'), null);\n }\n callback(null, item);\n}\n\nfunction addBaseInfo(item, options, callback) {\n var environment = (options.payload && options.payload.environment) || options.environment;\n item.data = _.extend(true, {}, item.data, {\n environment: environment,\n level: item.level,\n endpoint: options.endpoint,\n platform: 'browser',\n framework: 'browser-js',\n language: 'javascript',\n server: {},\n uuid: item.uuid,\n notifier: {\n name: 'rollbar-browser-js',\n version: options.version\n }\n });\n callback(null, item);\n}\n\nfunction addRequestInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.location) {\n return callback(null, item);\n }\n _.set(item, 'data.request', {\n url: window.location.href,\n query_string: window.location.search,\n user_ip: '$remote_ip'\n });\n callback(null, item);\n };\n}\n\nfunction addClientInfo(window) {\n return function(item, options, callback) {\n if (!window) {\n return callback(null, item);\n }\n var nav = window.navigator || {};\n var scr = window.screen || {};\n _.set(item, 'data.client', {\n runtime_ms: item.timestamp - window._rollbarStartTime,\n timestamp: Math.round(item.timestamp / 1000),\n javascript: {\n browser: nav.userAgent,\n language: nav.language,\n cookie_enabled: nav.cookieEnabled,\n screen: {\n width: scr.width,\n height: scr.height\n }\n }\n });\n callback(null, item);\n };\n}\n\nfunction addPluginInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.navigator) {\n return callback(null, item);\n }\n var plugins = [];\n var navPlugins = window.navigator.plugins || [];\n var cur;\n for (var i=0, l=navPlugins.length; i < l; ++i) {\n cur = navPlugins[i];\n plugins.push({name: cur.name, description: cur.description});\n }\n _.set(item, 'data.client.javascript.plugins', plugins);\n callback(null, item);\n };\n}\n\nfunction addBody(item, options, callback) {\n if (item.stackInfo) {\n addBodyTrace(item, options, callback);\n } else {\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction addBodyMessage(item, options, callback) {\n var message = item.message;\n var custom = item.custom;\n\n if (!message) {\n if (custom) {\n var scrubFields = options.scrubFields;\n var messageResult = _.stringify(_.scrub(custom, scrubFields));\n message = messageResult.error || messageResult.value || '';\n } else {\n message = '';\n }\n }\n var result = {\n body: message\n };\n\n if (custom) {\n result.extra = _.extend(true, {}, custom);\n }\n\n _.set(item, 'data.body', {message: result});\n callback(null, item);\n}\n\n\nfunction addBodyTrace(item, options, callback) {\n var description = item.data.description;\n var stackInfo = item.stackInfo;\n var custom = item.custom;\n\n var guess = errorParser.guessErrorClass(stackInfo.message);\n var className = stackInfo.name || guess[0];\n var message = guess[1];\n var trace = {\n exception: {\n 'class': className,\n message: message\n }\n };\n\n if (description) {\n trace.exception.description = description;\n }\n\n // Transform a TraceKit stackInfo object into a Rollbar trace\n var stack = stackInfo.stack;\n if (stack && stack.length === 0 && item._unhandledStackInfo && item._unhandledStackInfo.stack) {\n stack = item._unhandledStackInfo.stack;\n }\n if (stack) {\n if (stack.length === 0) {\n trace.exception.stack = stackInfo.rawStack;\n trace.exception.raw = String(stackInfo.rawException);\n }\n var stackFrame;\n var frame;\n var code;\n var pre;\n var post;\n var contextLength;\n var i, mid;\n\n trace.frames = [];\n for (i = 0; i < stack.length; ++i) {\n stackFrame = stack[i];\n frame = {\n filename: stackFrame.url ? _.sanitizeUrl(stackFrame.url) : '(unknown)',\n lineno: stackFrame.line || null,\n method: (!stackFrame.func || stackFrame.func === '?') ? '[anonymous]' : stackFrame.func,\n colno: stackFrame.column\n };\n if (frame.method && frame.method.endsWith && frame.method.endsWith('_rollbar_wrapped')) {\n continue;\n }\n\n code = pre = post = null;\n contextLength = stackFrame.context ? stackFrame.context.length : 0;\n if (contextLength) {\n mid = Math.floor(contextLength / 2);\n pre = stackFrame.context.slice(0, mid);\n code = stackFrame.context[mid];\n post = stackFrame.context.slice(mid);\n }\n\n if (code) {\n frame.code = code;\n }\n\n if (pre || post) {\n frame.context = {};\n if (pre && pre.length) {\n frame.context.pre = pre;\n }\n if (post && post.length) {\n frame.context.post = post;\n }\n }\n\n if (stackFrame.args) {\n frame.args = stackFrame.args;\n }\n\n trace.frames.push(frame);\n }\n\n // NOTE(cory): reverse the frames since rollbar.com expects the most recent call last\n trace.frames.reverse();\n\n if (custom) {\n trace.extra = _.extend(true, {}, custom);\n }\n _.set(item, 'data.body', {trace: trace});\n callback(null, item);\n } else {\n item.message = className + ': ' + message;\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction scrubPayload(item, options, callback) {\n var scrubFields = options.scrubFields;\n item.data = _.scrub(item.data, scrubFields);\n callback(null, item);\n}\n\nmodule.exports = {\n handleItemWithError: handleItemWithError,\n ensureItemHasSomethingToSay: ensureItemHasSomethingToSay,\n addBaseInfo: addBaseInfo,\n addRequestInfo: addRequestInfo,\n addClientInfo: addClientInfo,\n addPluginInfo: addPluginInfo,\n addBody: addBody,\n scrubPayload: scrubPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transforms.js\n// module id = 19\n// module chunks = 0","'use strict';\n\nvar ErrorStackParser = require('error-stack-parser');\n\nvar UNKNOWN_FUNCTION = '?';\nvar ERR_CLASS_REGEXP = new RegExp('^(([a-zA-Z0-9-_$ ]*): *)?(Uncaught )?([a-zA-Z0-9-_$ ]*): ');\n\nfunction guessFunctionName() {\n return UNKNOWN_FUNCTION;\n}\n\n\nfunction gatherContext() {\n return null;\n}\n\n\nfunction Frame(stackFrame) {\n var data = {};\n\n data._stackFrame = stackFrame;\n\n data.url = stackFrame.fileName;\n data.line = stackFrame.lineNumber;\n data.func = stackFrame.functionName;\n data.column = stackFrame.columnNumber;\n data.args = stackFrame.args;\n\n data.context = gatherContext(data.url, data.line);\n\n return data;\n}\n\n\nfunction Stack(exception) {\n function getStack() {\n var parserStack = [];\n var exc;\n\n if (!exception.stack) {\n try {\n throw exception;\n } catch (e) {\n exc = e;\n }\n } else {\n exc = exception;\n }\n\n try {\n parserStack = ErrorStackParser.parse(exc);\n } catch(e) {\n parserStack = [];\n }\n\n var stack = [];\n\n for (var i = 0; i < parserStack.length; i++) {\n stack.push(new Frame(parserStack[i]));\n }\n\n return stack;\n }\n\n return {\n stack: getStack(),\n message: exception.message,\n name: exception.name,\n rawStack: exception.stack,\n rawException: exception\n };\n}\n\n\nfunction parse(e) {\n return new Stack(e);\n}\n\n\nfunction guessErrorClass(errMsg) {\n if (!errMsg || !errMsg.match) {\n return ['Unknown error. There was no error message to display.', ''];\n }\n var errClassMatch = errMsg.match(ERR_CLASS_REGEXP);\n var errClass = '(unknown)';\n\n if (errClassMatch) {\n errClass = errClassMatch[errClassMatch.length - 1];\n errMsg = errMsg.replace((errClassMatch[errClassMatch.length - 2] || '') + errClass + ':', '');\n errMsg = errMsg.replace(/(^[\\s]+|[\\s]+$)/g, '');\n }\n return [errClass, errMsg];\n}\n\n\nmodule.exports = {\n guessFunctionName: guessFunctionName,\n guessErrorClass: guessErrorClass,\n gatherContext: gatherContext,\n parse: parse,\n Stack: Stack,\n Frame: Frame\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/errorParser.js\n// module id = 20\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = locationParts[0] === 'eval' ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/error-stack-parser.js\n// module id = 21\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stackframe', [], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.StackFrame = factory();\n }\n}(this, function () {\n 'use strict';\n function _isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n function StackFrame(functionName, args, fileName, lineNumber, columnNumber, source) {\n if (functionName !== undefined) {\n this.setFunctionName(functionName);\n }\n if (args !== undefined) {\n this.setArgs(args);\n }\n if (fileName !== undefined) {\n this.setFileName(fileName);\n }\n if (lineNumber !== undefined) {\n this.setLineNumber(lineNumber);\n }\n if (columnNumber !== undefined) {\n this.setColumnNumber(columnNumber);\n }\n if (source !== undefined) {\n this.setSource(source);\n }\n }\n\n StackFrame.prototype = {\n getFunctionName: function () {\n return this.functionName;\n },\n setFunctionName: function (v) {\n this.functionName = String(v);\n },\n\n getArgs: function () {\n return this.args;\n },\n setArgs: function (v) {\n if (Object.prototype.toString.call(v) !== '[object Array]') {\n throw new TypeError('Args must be an Array');\n }\n this.args = v;\n },\n\n // NOTE: Property name may be misleading as it includes the path,\n // but it somewhat mirrors V8's JavaScriptStackTraceApi\n // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's\n // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14\n getFileName: function () {\n return this.fileName;\n },\n setFileName: function (v) {\n this.fileName = String(v);\n },\n\n getLineNumber: function () {\n return this.lineNumber;\n },\n setLineNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Line Number must be a Number');\n }\n this.lineNumber = Number(v);\n },\n\n getColumnNumber: function () {\n return this.columnNumber;\n },\n setColumnNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Column Number must be a Number');\n }\n this.columnNumber = Number(v);\n },\n\n getSource: function () {\n return this.source;\n },\n setSource: function (v) {\n this.source = String(v);\n },\n\n toString: function() {\n var functionName = this.getFunctionName() || '{anonymous}';\n var args = '(' + (this.getArgs() || []).join(',') + ')';\n var fileName = this.getFileName() ? ('@' + this.getFileName()) : '';\n var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : '';\n var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : '';\n return functionName + args + fileName + lineNumber + columnNumber;\n }\n };\n\n return StackFrame;\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/~/stackframe/stackframe.js\n// module id = 22\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction itemToPayload(item, options, callback) {\n var payloadOptions = options.payload || {};\n if (payloadOptions.body) {\n delete payloadOptions.body;\n }\n\n var data = _.extend(true, {}, item.data, payloadOptions);\n if (item._isUncaught) {\n data._isUncaught = true;\n }\n if (item._originalArgs) {\n data._originalArgs = item._originalArgs;\n }\n callback(null, data);\n}\n\nfunction addTelemetryData(item, options, callback) {\n if (item.telemetryEvents) {\n _.set(item, 'data.body.telemetry', item.telemetryEvents);\n }\n callback(null, item);\n}\n\nfunction addMessageWithError(item, options, callback) {\n if (!item.message) {\n callback(null, item);\n return;\n }\n var tracePath = 'data.body.trace_chain.0';\n var trace = _.get(item, tracePath);\n if (!trace) {\n tracePath = 'data.body.trace';\n trace = _.get(item, tracePath);\n }\n if (trace) {\n if (!(trace.exception && trace.exception.description)) {\n _.set(item, tracePath+'.exception.description', item.message);\n callback(null, item);\n return;\n }\n var extra = _.get(item, tracePath+'.extra') || {};\n var newExtra = _.extend(true, {}, extra, {message: item.message});\n _.set(item, tracePath+'.extra', newExtra);\n }\n callback(null, item);\n}\n\nfunction userTransform(logger) {\n return function(item, options, callback) {\n var newItem = _.extend(true, {}, item);\n try {\n if (_.isFunction(options.transform)) {\n options.transform(newItem.data);\n }\n } catch (e) {\n options.transform = null;\n logger.error('Error while calling custom transform() function. Removing custom transform().', e);\n callback(null, item);\n return;\n }\n callback(null, newItem);\n }\n}\n\nfunction addConfigToPayload(item, options, callback) {\n if (!options.sendConfig) {\n return callback(null, item);\n }\n var configKey = '_rollbarConfig';\n var custom = _.get(item, 'data.custom') || {};\n custom[configKey] = options;\n item.data.custom = custom;\n callback(null, item);\n}\n\nmodule.exports = {\n itemToPayload: itemToPayload,\n addTelemetryData: addTelemetryData,\n addMessageWithError: addMessageWithError,\n userTransform: userTransform,\n addConfigToPayload: addConfigToPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/transforms.js\n// module id = 23\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\n\nfunction checkIgnore(item, settings) {\n if (_.get(settings, 'plugins.jquery.ignoreAjaxErrors')) {\n return !_.get(item, 'body.message.extra.isAjax');\n }\n return true;\n}\n\nmodule.exports = {\n checkIgnore: checkIgnore\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/predicates.js\n// module id = 24\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction checkLevel(item, settings) {\n var level = item.level;\n var levelVal = _.LEVELS[level] || 0;\n var reportLevel = settings.reportLevel;\n var reportLevelVal = _.LEVELS[reportLevel] || 0;\n\n if (levelVal < reportLevelVal) {\n return false;\n }\n return true;\n}\n\nfunction userCheckIgnore(logger) {\n return function(item, settings) {\n var isUncaught = !!item._isUncaught;\n delete item._isUncaught;\n var args = item._originalArgs;\n delete item._originalArgs;\n try {\n if (_.isFunction(settings.onSendCallback)) {\n settings.onSendCallback(isUncaught, args, item);\n }\n } catch (e) {\n settings.onSendCallback = null;\n logger.error('Error while calling onSendCallback, removing', e);\n }\n try {\n if (_.isFunction(settings.checkIgnore) && settings.checkIgnore(isUncaught, args, item)) {\n return false;\n }\n } catch (e) {\n settings.checkIgnore = null;\n logger.error('Error while calling custom checkIgnore(), removing', e);\n }\n return true;\n }\n}\n\nfunction urlIsNotBlacklisted(logger) {\n return function(item, settings) {\n return !urlIsOnAList(item, settings, 'blacklist', logger);\n }\n}\n\nfunction urlIsWhitelisted(logger) {\n return function(item, settings) {\n return urlIsOnAList(item, settings, 'whitelist', logger);\n }\n}\n\nfunction urlIsOnAList(item, settings, whiteOrBlack, logger) {\n // whitelist is the default\n var black = false;\n if (whiteOrBlack === 'blacklist') {\n black = true;\n }\n var list, trace, frame, filename, frameLength, url, listLength, urlRegex;\n var i, j;\n\n try {\n list = black ? settings.hostBlackList : settings.hostWhiteList;\n listLength = list && list.length;\n trace = _.get(item, 'body.trace');\n\n // These two checks are important to come first as they are defaults\n // in case the list is missing or the trace is missing or not well-formed\n if (!list || listLength === 0) {\n return !black;\n }\n if (!trace || !trace.frames || trace.frames.length === 0) {\n return !black;\n }\n\n frameLength = trace.frames.length;\n for (i = 0; i < frameLength; i++) {\n frame = trace.frames[i];\n filename = frame.filename;\n\n if (!_.isType(filename, 'string')) {\n return !black;\n }\n\n for (j = 0; j < listLength; j++) {\n url = list[j];\n urlRegex = new RegExp(url);\n\n if (urlRegex.test(filename)) {\n return true;\n }\n }\n }\n } catch (e)\n /* istanbul ignore next */\n {\n if (black) {\n settings.hostBlackList = null;\n } else {\n settings.hostWhiteList = null;\n }\n var listName = black ? 'hostBlackList' : 'hostWhiteList';\n logger.error('Error while reading your configuration\\'s ' + listName + ' option. Removing custom ' + listName + '.', e);\n return !black;\n }\n return false;\n}\n\nfunction messageIsIgnored(logger) {\n return function(item, settings) {\n var exceptionMessage, i, ignoredMessages,\n len, messageIsIgnored, rIgnoredMessage,\n body, traceMessage, bodyMessage;\n\n try {\n messageIsIgnored = false;\n ignoredMessages = settings.ignoredMessages;\n\n if (!ignoredMessages || ignoredMessages.length === 0) {\n return true;\n }\n\n body = item.body;\n traceMessage = _.get(body, 'trace.exception.message');\n bodyMessage = _.get(body, 'message.body');\n\n exceptionMessage = traceMessage || bodyMessage;\n\n if (!exceptionMessage){\n return true;\n }\n\n len = ignoredMessages.length;\n for (i = 0; i < len; i++) {\n rIgnoredMessage = new RegExp(ignoredMessages[i], 'gi');\n messageIsIgnored = rIgnoredMessage.test(exceptionMessage);\n\n if (messageIsIgnored) {\n break;\n }\n }\n } catch(e)\n /* istanbul ignore next */\n {\n settings.ignoredMessages = null;\n logger.error('Error while reading your configuration\\'s ignoredMessages option. Removing custom ignoredMessages.');\n }\n\n return !messageIsIgnored;\n }\n}\n\nmodule.exports = {\n checkLevel: checkLevel,\n userCheckIgnore: userCheckIgnore,\n urlIsNotBlacklisted: urlIsNotBlacklisted,\n urlIsWhitelisted: urlIsWhitelisted,\n messageIsIgnored: messageIsIgnored\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/predicates.js\n// module id = 25\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar urlparser = require('./url');\nvar domUtil = require('./domUtility');\n\nvar defaults = {\n network: true,\n networkResponseHeaders: false,\n networkResponseBody: false,\n networkRequestBody: false,\n log: true,\n dom: true,\n navigation: true,\n connectivity: true\n};\n\nfunction replace(obj, name, replacement, replacements, type) {\n var orig = obj[name];\n obj[name] = replacement(orig);\n if (replacements) {\n replacements[type].push([obj, name, orig]);\n }\n}\n\nfunction restore(replacements, type) {\n var b;\n while (replacements[type].length) {\n b = replacements[type].shift();\n b[0][b[1]] = b[2];\n }\n}\n\nfunction Instrumenter(options, telemeter, rollbar, _window, _document) {\n var autoInstrument = options.autoInstrument;\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.extend(true, {}, defaults, autoInstrument);\n }\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n this.telemetryScrubber = options.telemetryScrubber;\n this.telemeter = telemeter;\n this.rollbar = rollbar;\n this._window = _window || {};\n this._document = _document || {};\n this.replacements = {\n network: [],\n log: [],\n navigation: [],\n connectivity: []\n };\n this.eventRemovers = {\n dom: [],\n connectivity: []\n };\n\n this._location = this._window.location;\n this._lastHref = this._location && this._location.href;\n}\n\nInstrumenter.prototype.configure = function(options) {\n var autoInstrument = options.autoInstrument;\n var oldSettings = _.extend(true, {}, this.autoInstrument);\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.extend(true, {}, defaults, autoInstrument);\n }\n this.instrument(oldSettings);\n if (options.scrubTelemetryInputs !== undefined) {\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n }\n if (options.telemetryScrubber !== undefined) {\n this.telemetryScrubber = options.telemetryScrubber;\n }\n};\n\nInstrumenter.prototype.instrument = function(oldSettings) {\n if (this.autoInstrument.network && !(oldSettings && oldSettings.network)) {\n this.instrumentNetwork();\n } else if (!this.autoInstrument.network && oldSettings && oldSettings.network) {\n this.deinstrumentNetwork();\n }\n\n if (this.autoInstrument.log && !(oldSettings && oldSettings.log)) {\n this.instrumentConsole();\n } else if (!this.autoInstrument.log && oldSettings && oldSettings.log) {\n this.deinstrumentConsole();\n }\n\n if (this.autoInstrument.dom && !(oldSettings && oldSettings.dom)) {\n this.instrumentDom();\n } else if (!this.autoInstrument.dom && oldSettings && oldSettings.dom) {\n this.deinstrumentDom();\n }\n\n if (this.autoInstrument.navigation && !(oldSettings && oldSettings.navigation)) {\n this.instrumentNavigation();\n } else if (!this.autoInstrument.navigation && oldSettings && oldSettings.navigation) {\n this.deinstrumentNavigation();\n }\n\n if (this.autoInstrument.connectivity && !(oldSettings && oldSettings.connectivity)) {\n this.instrumentConnectivity();\n } else if (!this.autoInstrument.connectivity && oldSettings && oldSettings.connectivity) {\n this.deinstrumentConnectivity();\n }\n};\n\nInstrumenter.prototype.deinstrumentNetwork = function() {\n restore(this.replacements, 'network');\n};\n\nInstrumenter.prototype.instrumentNetwork = function() {\n var self = this;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && _.isFunction(xhr[prop])) {\n replace(xhr, prop, function(orig) {\n return self.rollbar.wrap(orig);\n });\n }\n }\n\n if ('XMLHttpRequest' in this._window) {\n var xhrp = this._window.XMLHttpRequest.prototype;\n replace(xhrp, 'open', function(orig) {\n return function(method, url) {\n if (_.isType(url, 'string')) {\n this.__rollbar_xhr = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'network');\n\n replace(xhrp, 'send', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(data) {\n /* eslint-enable no-unused-vars */\n var xhr = this;\n\n function onreadystatechangeHandler() {\n if (xhr.__rollbar_xhr && (xhr.readyState === 1 || xhr.readyState === 4)) {\n if (xhr.__rollbar_xhr.status_code === null) {\n xhr.__rollbar_xhr.status_code = 0;\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n requestData = data;\n }\n xhr.__rollbar_event = self.telemeter.captureNetwork(xhr.__rollbar_xhr, 'xhr', undefined, requestData);\n }\n if (xhr.readyState === 1) {\n xhr.__rollbar_xhr.start_time_ms = _.now();\n } else {\n xhr.__rollbar_xhr.end_time_ms = _.now();\n\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n var header, i;\n if (headersConfig === true) {\n var allHeaders = xhr.getAllResponseHeaders();\n if (allHeaders) {\n var arr = allHeaders.trim().split(/[\\r\\n]+/);\n var parts, value;\n for (i=0; i < arr.length; i++) {\n parts = arr[i].split(': ');\n header = parts.shift();\n value = parts.join(': ');\n headers[header] = value;\n }\n }\n } else {\n for (i=0; i < headersConfig.length; i++) {\n header = headersConfig[i];\n headers[header] = xhr.getResponseHeader(header);\n }\n }\n } catch (e) {\n /* we ignore the errors here that could come from different\n * browser issues with the xhr methods */\n }\n }\n var body = null;\n if (self.autoInstrument.networkResponseBody) {\n try {\n body = xhr.responseText;\n } catch (e) {\n /* ignore errors from reading responseText */\n }\n }\n var response = null;\n if (body || headers) {\n response = {};\n if (body) {\n response.body = body;\n }\n if (headers) {\n response.headers = headers;\n }\n }\n if (response) {\n xhr.__rollbar_xhr.response = response;\n }\n }\n try {\n var code = xhr.status;\n code = code === 1223 ? 204 : code;\n xhr.__rollbar_xhr.status_code = code;\n xhr.__rollbar_event.level = self.telemeter.levelFromStatus(code);\n } catch (e) {\n /* ignore possible exception from xhr.status */\n }\n }\n }\n\n wrapProp('onload', xhr);\n wrapProp('onerror', xhr);\n wrapProp('onprogress', xhr);\n\n if ('onreadystatechange' in xhr && _.isFunction(xhr.onreadystatechange)) {\n replace(xhr, 'onreadystatechange', function(orig) {\n return self.rollbar.wrap(orig, undefined, onreadystatechangeHandler);\n });\n } else {\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n return orig.apply(this, arguments);\n }\n }, this.replacements, 'network');\n }\n\n if ('fetch' in this._window) {\n replace(this._window, 'fetch', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(fn, t) {\n /* eslint-enable no-unused-vars */\n var args = new Array(arguments.length);\n for (var i=0, len=args.length; i < len; i++) {\n args[i] = arguments[i];\n }\n var input = args[0];\n var method = 'GET';\n var url;\n if (_.isType(input, 'string')) {\n url = input;\n } else if (input) {\n url = input.url;\n if (input.method) {\n method = input.method;\n }\n }\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n var metadata = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n if (args[1] && args[1].body) {\n requestData = args[1].body;\n } else if (args[0] && !_.isType(args[0], 'string') && args[0].body) {\n requestData = args[0].body;\n }\n }\n self.telemeter.captureNetwork(metadata, 'fetch', undefined, requestData);\n return orig.apply(this, args).then(function (resp) {\n metadata.end_time_ms = _.now();\n metadata.status_code = resp.status;\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n if (headersConfig === true) {\n // This is unsupported in IE so we can't do it\n /*\n var allHeaders = resp.headers.entries();\n for (var pair of allHeaders) {\n headers[pair[0]] = pair[1];\n }\n */\n } else {\n for (var i=0; i < headersConfig.length; i++) {\n var header = headersConfig[i];\n headers[header] = resp.headers.get(header);\n }\n }\n } catch (e) {\n /* ignore probable IE errors */\n }\n }\n var response = null;\n if (headers) {\n response = {\n headers: headers\n };\n }\n if (response) {\n metadata.response = response;\n }\n return resp;\n });\n };\n }, this.replacements, 'network');\n }\n};\n\nInstrumenter.prototype.deinstrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n var b;\n while (this.replacements['log'].length) {\n b = this.replacements['log'].shift();\n this._window.console[b[0]] = b[1];\n }\n};\n\nInstrumenter.prototype.instrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n\n var self = this;\n var c = this._window.console;\n\n function wrapConsole(method) {\n var orig = c[method];\n var origConsole = c;\n var level = method === 'warn' ? 'warning' : method;\n c[method] = function() {\n var args = Array.prototype.slice.call(arguments);\n var message = _.formatArgsAsString(args);\n self.telemeter.captureLog(message, level);\n if (orig) {\n Function.prototype.apply.call(orig, origConsole, args);\n }\n };\n self.replacements['log'].push([method, orig]);\n }\n var methods = ['debug','info','warn','error','log'];\n for (var i=0, len=methods.length; i < len; i++) {\n wrapConsole(methods[i]);\n }\n};\n\nInstrumenter.prototype.deinstrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n this.removeListeners('dom');\n};\n\nInstrumenter.prototype.instrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n var clickHandler = this.handleClick.bind(this);\n var blurHandler = this.handleBlur.bind(this);\n this.addListener('dom', this._window, 'click', 'onclick', clickHandler, true);\n this.addListener('dom', this._window, 'blur', 'onfocusout', blurHandler, true);\n};\n\nInstrumenter.prototype.handleClick = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n var hasTag = e && e.tagName;\n var anchorOrButton = domUtil.isDescribedElement(e, 'a') || domUtil.isDescribedElement(e, 'button');\n if (hasTag && (anchorOrButton || domUtil.isDescribedElement(e, 'input', ['button', 'submit']))) {\n this.captureDomEvent('click', e);\n } else if (domUtil.isDescribedElement(e, 'input', ['checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value, e.checked);\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleBlur = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n if (e && e.tagName) {\n if (domUtil.isDescribedElement(e, 'textarea')) {\n this.captureDomEvent('input', e, e.value);\n } else if (domUtil.isDescribedElement(e, 'select') && e.options && e.options.length) {\n this.handleSelectInputChanged(e);\n } else if (domUtil.isDescribedElement(e, 'input') && !domUtil.isDescribedElement(e, 'input', ['button', 'submit', 'hidden', 'checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value);\n }\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleSelectInputChanged = function(elem) {\n if (elem.multiple) {\n for (var i = 0; i < elem.options.length; i++) {\n if (elem.options[i].selected) {\n this.captureDomEvent('input', elem, elem.options[i].value);\n }\n }\n } else if (elem.selectedIndex >= 0 && elem.options[elem.selectedIndex]) {\n this.captureDomEvent('input', elem, elem.options[elem.selectedIndex].value);\n }\n};\n\nInstrumenter.prototype.captureDomEvent = function(subtype, element, value, isChecked) {\n if (value !== undefined) {\n if (this.scrubTelemetryInputs || (domUtil.getElementType(element) === 'password')) {\n value = '[scrubbed]';\n } else if (this.telemetryScrubber) {\n var description = domUtil.describeElement(element);\n if (this.telemetryScrubber(description)) {\n value = '[scrubbed]';\n }\n }\n }\n var elementString = domUtil.elementArrayToString(domUtil.treeToArray(element));\n this.telemeter.captureDom(subtype, elementString, value, isChecked);\n};\n\nInstrumenter.prototype.deinstrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n restore(this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.instrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n var self = this;\n replace(this._window, 'onpopstate', function(orig) {\n return function() {\n var current = self._location.href;\n self.handleUrlChange(self._lastHref, current);\n if (orig) {\n orig.apply(this, arguments);\n }\n };\n }, this.replacements, 'navigation');\n\n replace(this._window.history, 'pushState', function(orig) {\n return function() {\n var url = arguments.length > 2 ? arguments[2] : undefined;\n if (url) {\n self.handleUrlChange(self._lastHref, url + '');\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.handleUrlChange = function(from, to) {\n var parsedHref = urlparser.parse(this._location.href);\n var parsedTo = urlparser.parse(to);\n var parsedFrom = urlparser.parse(from);\n this._lastHref = to;\n if (parsedHref.protocol === parsedTo.protocol && parsedHref.host === parsedTo.host) {\n to = parsedTo.path + (parsedTo.hash || '');\n }\n if (parsedHref.protocol === parsedFrom.protocol && parsedHref.host === parsedFrom.host) {\n from = parsedFrom.path + (parsedFrom.hash || '');\n }\n this.telemeter.captureNavigation(from, to);\n};\n\nInstrumenter.prototype.deinstrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.removeListeners('connectivity');\n } else {\n restore(this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.instrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.addListener('connectivity', this._window, 'online', undefined, function() {\n this.telemeter.captureConnectivityChange('online');\n }.bind(this), true);\n this.addListener('connectivity', this._window, 'offline', undefined, function() {\n this.telemeter.captureConnectivityChange('offline');\n }.bind(this), true);\n } else {\n var self = this;\n replace(this._document.body, 'ononline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('online');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n replace(this._document.body, 'onoffline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('offline');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.addListener = function(section, obj, type, altType, handler, capture) {\n if (obj.addEventListener) {\n obj.addEventListener(type, handler, capture);\n this.eventRemovers[section].push(function() {\n obj.removeEventListener(type, handler, capture);\n });\n } else if (altType) {\n obj.attachEvent(altType, handler);\n this.eventRemovers[section].push(function() {\n obj.detachEvent(altType, handler);\n });\n }\n};\n\nInstrumenter.prototype.removeListeners = function(section) {\n var r;\n while (this.eventRemovers[section].length) {\n r = this.eventRemovers[section].shift();\n r();\n }\n};\n\nmodule.exports = Instrumenter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/telemetry.js\n// module id = 26\n// module chunks = 0","'use strict';\n\nfunction getElementType(e) {\n return (e.getAttribute('type') || '').toLowerCase();\n}\n\nfunction isDescribedElement(element, type, subtypes) {\n if (element.tagName.toLowerCase() !== type.toLowerCase()) {\n return false;\n }\n if (!subtypes) {\n return true;\n }\n element = getElementType(element);\n for (var i = 0; i < subtypes.length; i++) {\n if (subtypes[i] === element) {\n return true;\n }\n }\n return false;\n}\n\nfunction getElementFromEvent(evt, doc) {\n if (evt.target) {\n return evt.target;\n }\n if (doc && doc.elementFromPoint) {\n return doc.elementFromPoint(evt.clientX, evt.clientY);\n }\n return undefined;\n}\n\nfunction treeToArray(elem) {\n var MAX_HEIGHT = 5;\n var out = [];\n var nextDescription;\n for (var height = 0; elem && height < MAX_HEIGHT; height++) {\n nextDescription = describeElement(elem);\n if (nextDescription.tagName === 'html') {\n break;\n }\n out.unshift(nextDescription);\n elem = elem.parentNode;\n }\n return out;\n}\n\nfunction elementArrayToString(a) {\n var MAX_LENGTH = 80;\n var separator = ' > ', separatorLength = separator.length;\n var out = [], len = 0, nextStr, totalLength;\n\n for (var i = a.length - 1; i >= 0; i--) {\n nextStr = descriptionToString(a[i]);\n totalLength = len + (out.length * separatorLength) + nextStr.length;\n if (i < a.length - 1 && totalLength >= MAX_LENGTH + 3) {\n out.unshift('...');\n break;\n }\n out.unshift(nextStr);\n len += nextStr.length;\n }\n return out.join(separator);\n}\n\nfunction descriptionToString(desc) {\n if (!desc || !desc.tagName) {\n return '';\n }\n var out = [desc.tagName];\n if (desc.id) {\n out.push('#' + desc.id);\n }\n if (desc.classes) {\n out.push('.' + desc.classes.join('.'));\n }\n for (var i = 0; i < desc.attributes.length; i++) {\n out.push('[' + desc.attributes[i].key + '=\"' + desc.attributes[i].value + '\"]');\n }\n\n return out.join('');\n}\n\n/**\n * Input: a dom element\n * Output: null if tagName is falsey or input is falsey, else\n * {\n * tagName: String,\n * id: String | undefined,\n * classes: [String] | undefined,\n * attributes: [\n * {\n * key: OneOf(type, name, title, alt),\n * value: String\n * }\n * ]\n * }\n */\nfunction describeElement(elem) {\n if (!elem || !elem.tagName) {\n return null;\n }\n var out = {}, className, key, attr, i;\n out.tagName = elem.tagName.toLowerCase();\n if (elem.id) {\n out.id = elem.id;\n }\n className = elem.className;\n if (className && (typeof className === 'string')) {\n out.classes = className.split(/\\s+/);\n }\n var attributes = ['type', 'name', 'title', 'alt'];\n out.attributes = [];\n for (i = 0; i < attributes.length; i++) {\n key = attributes[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.attributes.push({key: key, value: attr});\n }\n }\n return out;\n}\n\nmodule.exports = {\n describeElement: describeElement,\n descriptionToString: descriptionToString,\n elementArrayToString: elementArrayToString,\n treeToArray: treeToArray,\n getElementFromEvent: getElementFromEvent,\n isDescribedElement: isDescribedElement,\n getElementType: getElementType\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/domUtility.js\n// module id = 27\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap a3767966f819774ccfef","webpack:///./src/browser/bundles/rollbar.js","webpack:///./src/browser/rollbar.js","webpack:///./src/rollbar.js","webpack:///./src/rateLimiter.js","webpack:///./src/queue.js","webpack:///./src/utility.js","webpack:///./~/extend/index.js","webpack:///./vendor/JSON-js/json3.js","webpack:///./src/notifier.js","webpack:///./src/telemetry.js","webpack:///./src/api.js","webpack:///./src/apiUtility.js","webpack:///./src/browser/logger.js","webpack:///./~/console-polyfill/index.js","webpack:///./src/browser/detection.js","webpack:///./src/browser/globalSetup.js","webpack:///./src/browser/transport.js","webpack:///./src/browser/url.js","webpack:///./src/browser/transforms.js","webpack:///./src/browser/errorParser.js","webpack:///./~/error-stack-parser/error-stack-parser.js","webpack:///./~/error-stack-parser/~/stackframe/stackframe.js","webpack:///./src/transforms.js","webpack:///./src/browser/predicates.js","webpack:///./src/predicates.js","webpack:///./src/browser/telemetry.js","webpack:///./src/browser/domUtility.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;ACVA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;;;;;;;ACtCA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA,EAAC;AACD;AACA;AACA;;AAEA;;;;;;;ACvBA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,6BAA4B;AAC5B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA,6BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,2BAA0B,sBAAsB;AAChD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,qCAAoC,SAAS;AAC7C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC3ZA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA,mCAAkC;AAClC;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACpIA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC7IA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAkC;AAClC;AACA;;AAEA;AACA;AACA;AACA,yDAAwD,WAAW;AACnE;AACA;AACA,gBAAe,WAAW;AAC1B,gBAAe,eAAe;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA2B,QAAQ;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,cAAa,8BAA8B;AAC3C;AACA;AACA;AACA;AACA,gDAA+C,SAAS;AACxD;AACA;AACA,eAAc;AACd;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAkD,SAAS;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAwB,+BAA+B;;AAEvD;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACnQA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAY;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,gBAAe,gBAAgB;AAC/B;AACA;AACA;;AAEA,0BAAyB;AACzB,cAAa,iBAAiB;AAC9B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,mCAAkC,OAAO;AACzC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAmD,SAAS;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,6BAA4B;AAC5B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAwC,SAAS,UAAU,YAAY,GAAG;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,SAAS;AAC/C;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,WAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB,qBAAqB;AACtC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAe,qBAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB,wBAAwB;AACzC;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,kBAAiB,wBAAwB;AACzC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iCAAgC,SAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC9oBA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAmB;;AAEnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA,QAAO,YAAY;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA,OAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAAyE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAoB;AACpB;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,0CAAyC,iBAAiB;AAC1D,+BAA8B,kBAAkB;;AAEhD,0CAAyC,iBAAiB;AAC1D,uCAAsC,6BAA6B;;AAEnE;AACA;AACA;AACA;AACA,cAAa;AACb;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,yBAAwB;AACxB,gDAA+C,EAAE;AACjD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;;AAGA;;AAEA;;AAEA,WAAU;AACV,WAAU;AACV,WAAU;AACV;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA,sBAAqB,YAAY;AACjC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,sBAAqB,YAAY;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,gBAAe;AACf;AACA,eAAc,wDAAwD;AACtE,eAAc,0BAA0B;AACxC;AACA;AACA;AACA;;AAEA;;AAEA;AACA,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAmB,WAAW;AAC9B;AACA;;AAEA;;AAEA,QAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,uBAAsB,UAAU;AAChC;AACA;;;AAGA;;AAEA;AACA;;AAEA;AACA;;AAEA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB,qBAAoB;AACpB,eAAc;AACd,iBAAgB;AAChB,sBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAoB;AACpB;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,qBAAoB;AACpB;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,WAAU;AACV;AACA,yBAAwB,YAAY;AACpC;AACA;AACA,YAAW;AACX;AACA,yBAAwB,gDAAgD;AACxE;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA;AACA,UAAS;AACT,WAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,yBAAwB,YAAY;AACpC;AACA;AACA,YAAW;AACX;AACA,yBAAwB,gDAAgD;AACxE;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,uCAAsC,EAAE;AACxC;AACA;AACA;AACA,UAAS;AACT;;AAEA;;AAEA;AACA;;AAEA;AACA,gDAA+C,yGAAyG,EAAE;;AAE1J;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA,cAAa;;AAEb;AACA;;AAEA;AACA;AACA,cAAa;;AAEb;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,UAAS;AACT;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE,UAAU;AACvB;AACA;AACA,MAAK;AACL;AACA;;AAEA;;;;;;;AC1vBA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA4B;AAC5B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;;;;;;ACvHA;;AAEA;;AAEA;;AAEA;AACA;AACA,mCAAkC;AAClC;AACA;AACA;;AAEA;AACA;AACA,mCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sCAAqC,mBAAmB;AACxD;;AAEA;AACA,sCAAqC,4BAA4B;AACjE;AACA;AACA,+BAA8B,4BAA4B;AAC1D;AACA;AACA;AACA,sCAAqC,gBAAgB;AACrD;AACA;AACA,+BAA8B,gBAAgB;AAC9C;AACA;;AAEA;AACA,+BAA8B,aAAa;AAC3C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACrKA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;ACnEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACzFA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;;;AClBD;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;AC/BA;;AAEA;AACA,iBAAgB,QAAQ;AACxB;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAgB,QAAQ;;AAExB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAgB,QAAQ;AACxB;AACA;AACA;AACA,cAAa,oBAAoB;AACjC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;AC3HA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,kBAAkB;AAC/B;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;AC7MA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;AChFA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gCAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,OAAO;AAC7C;AACA,qBAAoB,6CAA6C;AACjE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qCAAoC;AACpC;;AAEA,6BAA4B,gBAAgB;AAC5C;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAe,kBAAkB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,sCAAqC;AACrC;AACA,+BAA8B,aAAa;AAC3C;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC5PA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;;AAEA;;AAEA,oBAAmB,wBAAwB;AAC3C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACtGA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA,EAAC;AACD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA,4BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA,4BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,0BAAyB;AACzB;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,cAAa;AACb;AACA,cAAa;AACb;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAa;AACb,UAAS;;AAET;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,cAAa;AACb,UAAS;;AAET;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,cAAa;AACb;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;;AAEA,gDAA+C,SAAS;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAS;;AAET;AACA;AACA;AACA;;AAEA,gDAA+C,SAAS;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,EAAC;;;;;;;;AC/LD;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;;AAET;AACA,4DAA2D,UAAU;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,EAAC;;;;;;;AC1GD;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,+BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAqC,UAAU,sBAAsB;AACrE;AACA;AACA;AACA;;AAEA;AACA;AACA,oCAAmC;AACnC;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACrFA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;ACbA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAe,iBAAiB;AAChC;AACA;;AAEA;AACA;AACA;;AAEA,kBAAiB,gBAAgB;AACjC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,kBAAiB,SAAS;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AChKA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,4CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,sCAAqC;AACrC;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,4CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAA+B,gBAAgB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB;AACnB,8BAA6B,0BAA0B;AACvD;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,SAAS;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf,8BAA6B,0BAA0B;AACvD;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAmC,SAAS;AAC5C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA,oBAAmB,yBAAyB;AAC5C;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACnjBA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB,qBAAqB;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,uBAAsB,6BAA6B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,6BAA4B,QAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB,4BAA4B;AAC7C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,uBAAuB;AACpC;AACA;AACA;AACA,4BAA2B,sBAAsB;AACjD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"rollbar.umd.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"rollbar\"] = factory();\n\telse\n\t\troot[\"rollbar\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap a3767966f819774ccfef","'use strict';\n\nvar rollbar = require('../rollbar');\n\nvar options = (typeof window !== 'undefined') && window._rollbarConfig;\nvar alias = options && options.globalAlias || 'Rollbar';\nvar shimRunning = (typeof window !== 'undefined') && window[alias] && typeof window[alias].shimId === 'function' && window[alias].shimId() !== undefined;\n\nif ((typeof window !== 'undefined') && !window._rollbarStartTime) {\n window._rollbarStartTime = (new Date()).getTime();\n}\n\nif (!shimRunning && options) {\n var Rollbar = new rollbar(options);\n window[alias] = Rollbar;\n} else if (typeof window !== 'undefined') {\n window.rollbar = rollbar;\n window._rollbarDidLoad = true;\n} else if (typeof self !== 'undefined') {\n self.rollbar = rollbar;\n self._rollbarDidLoad = true;\n}\n\nmodule.exports = rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/bundles/rollbar.js\n// module id = 1\n// module chunks = 0","'use strict';\n\nvar Client = require('../rollbar');\nvar _ = require('../utility');\nvar API = require('../api');\nvar logger = require('./logger');\nvar globals = require('./globalSetup');\n\nvar transport = require('./transport');\nvar urllib = require('./url');\n\nvar transforms = require('./transforms');\nvar sharedTransforms = require('../transforms');\nvar predicates = require('./predicates');\nvar sharedPredicates = require('../predicates');\nvar errorParser = require('./errorParser');\nvar Instrumenter = require('./telemetry');\n\nfunction Rollbar(options, client) {\n this.options = _.extend({}, defaultOptions, options);\n var api = new API(this.options, transport, urllib);\n this.client = client || new Client(this.options, api, logger, 'browser');\n\n var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n var gDocument = (typeof document != 'undefined') && document;\n addTransformsToNotifier(this.client.notifier);\n addPredicatesToQueue(this.client.queue);\n if (this.options.captureUncaught || this.options.handleUncaughtExceptions) {\n globals.captureUncaughtExceptions(gWindow, this);\n globals.wrapGlobals(gWindow, this);\n }\n if (this.options.captureUnhandledRejections || this.options.handleUnhandledRejections) {\n globals.captureUnhandledRejections(gWindow, this);\n }\n\n this.instrumenter = new Instrumenter(this.options, this.client.telemeter, this, gWindow, gDocument);\n this.instrumenter.instrument();\n}\n\nvar _instance = null;\nRollbar.init = function(options, client) {\n if (_instance) {\n return _instance.global(options).configure(options);\n }\n _instance = new Rollbar(options, client);\n return _instance;\n};\n\nfunction handleUninitialized(maybeCallback) {\n var message = 'Rollbar is not initialized';\n logger.error(message);\n if (maybeCallback) {\n maybeCallback(new Error(message));\n }\n}\n\nRollbar.prototype.global = function(options) {\n this.client.global(options);\n return this;\n};\nRollbar.global = function(options) {\n if (_instance) {\n return _instance.global(options);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.extend({}, oldOptions, options, payload);\n this.client.configure(options, payloadData);\n this.instrumenter.configure(options);\n return this;\n};\nRollbar.configure = function(options, payloadData) {\n if (_instance) {\n return _instance.configure(options, payloadData);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.lastError = function() {\n return this.client.lastError;\n};\nRollbar.lastError = function() {\n if (_instance) {\n return _instance.lastError();\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.log = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.log(item);\n return {uuid: uuid};\n};\nRollbar.log = function() {\n if (_instance) {\n return _instance.log.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.debug = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.debug(item);\n return {uuid: uuid};\n};\nRollbar.debug = function() {\n if (_instance) {\n return _instance.debug.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.info = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.info(item);\n return {uuid: uuid};\n};\nRollbar.info = function() {\n if (_instance) {\n return _instance.info.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warn = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warn(item);\n return {uuid: uuid};\n};\nRollbar.warn = function() {\n if (_instance) {\n return _instance.warn.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warning = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warning(item);\n return {uuid: uuid};\n};\nRollbar.warning = function() {\n if (_instance) {\n return _instance.warning.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.error = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.error(item);\n return {uuid: uuid};\n};\nRollbar.error = function() {\n if (_instance) {\n return _instance.error.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.critical = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.critical(item);\n return {uuid: uuid};\n};\nRollbar.critical = function() {\n if (_instance) {\n return _instance.critical.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.handleUncaughtException = function(message, url, lineno, colno, error, context) {\n var item;\n var stackInfo = _.makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n 'onerror',\n 'uncaught exception',\n errorParser\n );\n if (_.isError(error)) {\n item = this._createItem([message, error, context]);\n item._unhandledStackInfo = stackInfo;\n } else if (_.isError(url)) {\n item = this._createItem([message, url, context]);\n item._unhandledStackInfo = stackInfo;\n } else {\n item = this._createItem([message, context]);\n item.stackInfo = stackInfo;\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n this.client.log(item);\n};\n\nRollbar.prototype.handleUnhandledRejection = function(reason, promise) {\n var message = 'unhandled rejection was null or undefined!';\n message = reason ? (reason.message || String(reason)) : message;\n var context = (reason && reason._rollbarContext) || (promise && promise._rollbarContext);\n\n var item;\n if (_.isError(reason)) {\n item = this._createItem([message, reason, context]);\n } else {\n item = this._createItem([message, reason, context]);\n item.stackInfo = _.makeUnhandledStackInfo(\n message,\n '',\n 0,\n 0,\n null,\n 'unhandledrejection',\n '',\n errorParser\n );\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n item._originalArgs = item._originalArgs || [];\n item._originalArgs.push(promise);\n this.client.log(item);\n};\n\nRollbar.prototype.wrap = function(f, context, _before) {\n try {\n var ctxFn;\n if(_.isFunction(context)) {\n ctxFn = context;\n } else {\n ctxFn = function() { return context || {}; };\n }\n\n if (!_.isFunction(f)) {\n return f;\n }\n\n if (f._isWrap) {\n return f;\n }\n\n if (!f._rollbar_wrapped) {\n f._rollbar_wrapped = function () {\n if (_before && _.isFunction(_before)) {\n _before.apply(this, arguments);\n }\n try {\n return f.apply(this, arguments);\n } catch(exc) {\n var e = exc;\n if (e) {\n if (_.isType(e, 'string')) {\n e = new String(e);\n }\n e._rollbarContext = ctxFn() || {};\n e._rollbarContext._wrappedSource = f.toString();\n\n window._rollbarWrappedError = e;\n }\n throw e;\n }\n };\n\n f._rollbar_wrapped._isWrap = true;\n\n if (f.hasOwnProperty) {\n for (var prop in f) {\n if (f.hasOwnProperty(prop)) {\n f._rollbar_wrapped[prop] = f[prop];\n }\n }\n }\n }\n\n return f._rollbar_wrapped;\n } catch (e) {\n // Return the original function if the wrap fails.\n return f;\n }\n};\nRollbar.wrap = function(f, context) {\n if (_instance) {\n return _instance.wrap(f, context);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.captureEvent = function(metadata, level) {\n return this.client.captureEvent(metadata, level);\n};\nRollbar.captureEvent = function(metadata, level) {\n if (_instance) {\n return _instance.captureEvent(metadata, level);\n } else {\n handleUninitialized();\n }\n};\n\n// The following two methods are used internally and are not meant for public use\nRollbar.prototype.captureDomContentLoaded = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureLoad(ts);\n};\n\n/* Internal */\n\nfunction addTransformsToNotifier(notifier) {\n notifier\n .addTransform(transforms.handleItemWithError)\n .addTransform(transforms.ensureItemHasSomethingToSay)\n .addTransform(transforms.addBaseInfo)\n .addTransform(transforms.addRequestInfo(window))\n .addTransform(transforms.addClientInfo(window))\n .addTransform(transforms.addPluginInfo(window))\n .addTransform(transforms.addBody)\n .addTransform(sharedTransforms.addMessageWithError)\n .addTransform(sharedTransforms.addTelemetryData)\n .addTransform(sharedTransforms.addConfigToPayload)\n .addTransform(transforms.scrubPayload)\n .addTransform(sharedTransforms.userTransform(logger))\n .addTransform(sharedTransforms.itemToPayload);\n}\n\nfunction addPredicatesToQueue(queue) {\n queue\n .addPredicate(sharedPredicates.checkLevel)\n .addPredicate(predicates.checkIgnore)\n .addPredicate(sharedPredicates.userCheckIgnore(logger))\n .addPredicate(sharedPredicates.urlIsNotBlacklisted(logger))\n .addPredicate(sharedPredicates.urlIsWhitelisted(logger))\n .addPredicate(sharedPredicates.messageIsIgnored(logger));\n}\n\nRollbar.prototype._createItem = function(args) {\n return _.createItem(args, logger, this);\n};\n\nfunction _getFirstFunction(args) {\n for (var i = 0, len = args.length; i < len; ++i) {\n if (_.isFunction(args[i])) {\n return args[i];\n }\n }\n return undefined;\n}\n\n/* global __NOTIFIER_VERSION__:false */\n/* global __DEFAULT_BROWSER_SCRUB_FIELDS__:false */\n/* global __DEFAULT_LOG_LEVEL__:false */\n/* global __DEFAULT_REPORT_LEVEL__:false */\n/* global __DEFAULT_UNCAUGHT_ERROR_LEVEL:false */\n/* global __DEFAULT_ENDPOINT__:false */\n\nvar defaultOptions = {\n version: __NOTIFIER_VERSION__,\n scrubFields: __DEFAULT_BROWSER_SCRUB_FIELDS__,\n logLevel: __DEFAULT_LOG_LEVEL__,\n reportLevel: __DEFAULT_REPORT_LEVEL__,\n uncaughtErrorLevel: __DEFAULT_UNCAUGHT_ERROR_LEVEL,\n endpoint: __DEFAULT_ENDPOINT__,\n verbose: false,\n enabled: true,\n sendConfig: false,\n includeItemsInTelemetry: true,\n captureIp: true\n};\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/rollbar.js\n// module id = 2\n// module chunks = 0","'use strict';\n\nvar RateLimiter = require('./rateLimiter');\nvar Queue = require('./queue');\nvar Notifier = require('./notifier');\nvar Telemeter = require('./telemetry');\nvar _ = require('./utility');\n\n/*\n * Rollbar - the interface to Rollbar\n *\n * @param options\n * @param api\n * @param logger\n */\nfunction Rollbar(options, api, logger, platform) {\n this.options = _.extend(true, {}, options);\n this.logger = logger;\n Rollbar.rateLimiter.configureGlobal(this.options);\n Rollbar.rateLimiter.setPlatformOptions(platform, this.options);\n this.queue = new Queue(Rollbar.rateLimiter, api, logger, this.options);\n this.notifier = new Notifier(this.queue, this.options);\n this.telemeter = new Telemeter(this.options);\n this.lastError = null;\n}\n\nvar defaultOptions = {\n maxItems: 0,\n itemsPerMinute: 60\n};\n\nRollbar.rateLimiter = new RateLimiter(defaultOptions);\n\nRollbar.prototype.global = function(options) {\n Rollbar.rateLimiter.configureGlobal(options);\n return this;\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n this.notifier && this.notifier.configure(options);\n this.telemeter && this.telemeter.configure(options);\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.extend(true, {}, oldOptions, options, payload);\n this.global(this.options);\n return this;\n};\n\nRollbar.prototype.log = function(item) {\n var level = this._defaultLogLevel();\n return this._log(level, item);\n};\n\nRollbar.prototype.debug = function(item) {\n this._log('debug', item);\n};\n\nRollbar.prototype.info = function(item) {\n this._log('info', item);\n};\n\nRollbar.prototype.warn = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.warning = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.error = function(item) {\n this._log('error', item);\n};\n\nRollbar.prototype.critical = function(item) {\n this._log('critical', item);\n};\n\nRollbar.prototype.wait = function(callback) {\n this.queue.wait(callback);\n};\n\nRollbar.prototype.captureEvent = function(metadata, level) {\n return this.telemeter.captureEvent(metadata, level);\n};\n\nRollbar.prototype.captureDomContentLoaded = function(ts) {\n return this.telemeter.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(ts) {\n return this.telemeter.captureLoad(ts);\n};\n\n/* Internal */\n\nRollbar.prototype._log = function(defaultLevel, item) {\n if (this._sameAsLastError(item)) {\n if (item.callback) {\n item.callback();\n }\n return;\n }\n try {\n var callback = null;\n if (item.callback) {\n callback = item.callback;\n delete item.callback;\n }\n item.level = item.level || defaultLevel;\n this.telemeter._captureRollbarItem(item);\n item.telemetryEvents = this.telemeter.copyEvents();\n this.notifier.log(item, callback);\n } catch (e) {\n this.logger.error(e)\n }\n};\n\nRollbar.prototype._defaultLogLevel = function() {\n return this.options.logLevel || 'debug';\n};\n\nRollbar.prototype._sameAsLastError = function(item) {\n if (this.lastError && this.lastError === item.err) {\n return true;\n }\n this.lastError = item.err;\n return false;\n};\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rollbar.js\n// module id = 3\n// module chunks = 0","'use strict';\n\n/*\n * RateLimiter - an object that encapsulates the logic for counting items sent to Rollbar\n *\n * @param options - the same options that are accepted by configureGlobal offered as a convenience\n */\nfunction RateLimiter(options) {\n this.startTime = (new Date()).getTime();\n this.counter = 0;\n this.perMinCounter = 0;\n this.platform = null;\n this.platformOptions = {};\n this.configureGlobal(options);\n}\n\nRateLimiter.globalSettings = {\n startTime: (new Date()).getTime(),\n maxItems: undefined,\n itemsPerMinute: undefined\n};\n\n/*\n * configureGlobal - set the global rate limiter options\n *\n * @param options - Only the following values are recognized:\n * startTime: a timestamp of the form returned by (new Date()).getTime()\n * maxItems: the maximum items\n * itemsPerMinute: the max number of items to send in a given minute\n */\nRateLimiter.prototype.configureGlobal = function(options) {\n if (options.startTime !== undefined) {\n RateLimiter.globalSettings.startTime = options.startTime;\n }\n if (options.maxItems !== undefined) {\n RateLimiter.globalSettings.maxItems = options.maxItems;\n }\n if (options.itemsPerMinute !== undefined) {\n RateLimiter.globalSettings.itemsPerMinute = options.itemsPerMinute;\n }\n};\n\n/*\n * shouldSend - determine if we should send a given item based on rate limit settings\n *\n * @param item - the item we are about to send\n * @returns An object with the following structure:\n * error: (Error|null)\n * shouldSend: bool\n * payload: (Object|null)\n * If shouldSend is false, the item passed as a parameter should not be sent to Rollbar, and\n * exactly one of error or payload will be non-null. If error is non-null, the returned Error will\n * describe the situation, but it means that we were already over a rate limit (either globally or\n * per minute) when this item was checked. If error is null, and therefore payload is non-null, it\n * means this item put us over the global rate limit and the payload should be sent to Rollbar in\n * place of the passed in item.\n */\nRateLimiter.prototype.shouldSend = function(item, now) {\n now = now || (new Date()).getTime();\n if (now - this.startTime >= 60000) {\n this.startTime = now;\n this.perMinCounter = 0;\n }\n\n var globalRateLimit = RateLimiter.globalSettings.maxItems;\n var globalRateLimitPerMin = RateLimiter.globalSettings.itemsPerMinute;\n\n if (checkRate(item, globalRateLimit, this.counter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimit + ' max items reached', false);\n } else if (checkRate(item, globalRateLimitPerMin, this.perMinCounter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimitPerMin + ' items per minute reached', false);\n }\n this.counter++;\n this.perMinCounter++;\n\n var shouldSend = !checkRate(item, globalRateLimit, this.counter);\n var perMinute = shouldSend;\n shouldSend = shouldSend && !checkRate(item, globalRateLimitPerMin, this.perMinCounter);\n return shouldSendValue(this.platform, this.platformOptions, null, shouldSend, globalRateLimit, globalRateLimitPerMin, perMinute);\n};\n\nRateLimiter.prototype.setPlatformOptions = function(platform, options) {\n this.platform = platform;\n this.platformOptions = options;\n};\n\n/* Helpers */\n\nfunction checkRate(item, limit, counter) {\n return !item.ignoreRateLimit && limit >= 1 && counter > limit;\n}\n\nfunction shouldSendValue(platform, options, error, shouldSend, globalRateLimit, limitPerMin, perMinute) {\n var payload = null;\n if (error) {\n error = new Error(error);\n }\n if (!error && !shouldSend) {\n payload = rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute);\n }\n return {error: error, shouldSend: shouldSend, payload: payload};\n}\n\nfunction rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute) {\n var environment = options.environment || (options.payload && options.payload.environment);\n var msg;\n if (perMinute) {\n msg = 'item per minute limit reached, ignoring errors until timeout';\n } else {\n msg = 'maxItems has been hit, ignoring errors until reset.';\n }\n var item = {\n body: {\n message: {\n body: msg,\n extra: {\n maxItems: globalRateLimit,\n itemsPerMinute: limitPerMin\n }\n }\n },\n language: 'javascript',\n environment: environment,\n notifier: {\n version: (options.notifier && options.notifier.version) || options.version\n }\n };\n if (platform === 'browser') {\n item.platform = 'browser';\n item.framework = 'browser-js';\n item.notifier.name = 'rollbar-browser-js';\n } else if (platform === 'server') {\n item.framework = options.framework || 'node-js';\n item.notifier.name = options.notifier.name;\n } else if (platform === 'react-native') {\n item.framework = options.framework || 'react-native';\n item.notifier.name = options.notifier.name;\n }\n return item;\n}\n\nmodule.exports = RateLimiter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rateLimiter.js\n// module id = 4\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Queue - an object which handles which handles a queue of items to be sent to Rollbar.\n * This object handles rate limiting via a passed in rate limiter, retries based on connection\n * errors, and filtering of items based on a set of configurable predicates. The communication to\n * the backend is performed via a given API object.\n *\n * @param rateLimiter - An object which conforms to the interface\n * rateLimiter.shouldSend(item) -> bool\n * @param api - An object which conforms to the interface\n * api.postItem(payload, function(err, response))\n * @param logger - An object used to log verbose messages if desired\n * @param options - see Queue.prototype.configure\n */\nfunction Queue(rateLimiter, api, logger, options) {\n this.rateLimiter = rateLimiter;\n this.api = api;\n this.logger = logger;\n this.options = options;\n this.predicates = [];\n this.pendingItems = [];\n this.pendingRequests = [];\n this.retryQueue = [];\n this.retryHandle = null;\n this.waitCallback = null;\n this.waitIntervalID = null;\n}\n\n/*\n * configure - updates the options this queue uses\n *\n * @param options\n */\nQueue.prototype.configure = function(options) {\n this.api && this.api.configure(options);\n var oldOptions = this.options;\n this.options = _.extend(true, {}, oldOptions, options);\n return this;\n};\n\n/*\n * addPredicate - adds a predicate to the end of the list of predicates for this queue\n *\n * @param predicate - function(item, options) -> (bool|{err: Error})\n * Returning true means that this predicate passes and the item is okay to go on the queue\n * Returning false means do not add the item to the queue, but it is not an error\n * Returning {err: Error} means do not add the item to the queue, and the given error explains why\n * Returning {err: undefined} is equivalent to returning true but don't do that\n */\nQueue.prototype.addPredicate = function(predicate) {\n if (_.isFunction(predicate)) {\n this.predicates.push(predicate);\n }\n return this;\n};\n\nQueue.prototype.addPendingItem = function(item) {\n this.pendingItems.push(item);\n};\n\nQueue.prototype.removePendingItem = function(item) {\n var idx = this.pendingItems.indexOf(item);\n if (idx !== -1) {\n this.pendingItems.splice(idx, 1);\n }\n};\n\n/*\n * addItem - Send an item to the Rollbar API if all of the predicates are satisfied\n *\n * @param item - The payload to send to the backend\n * @param callback - function(error, repsonse) which will be called with the response from the API\n * in the case of a success, otherwise response will be null and error will have a value. If both\n * error and response are null then the item was stopped by a predicate which did not consider this\n * to be an error condition, but nonetheless did not send the item to the API.\n * @param originalError - The original error before any transformations that is to be logged if any\n */\nQueue.prototype.addItem = function(item, callback, originalError, originalItem) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() { return; };\n }\n var predicateResult = this._applyPredicates(item);\n if (predicateResult.stop) {\n this.removePendingItem(originalItem);\n callback(predicateResult.err);\n return;\n }\n this._maybeLog(item, originalError);\n this.removePendingItem(originalItem);\n this.pendingRequests.push(item);\n try {\n this._makeApiRequest(item, function(err, resp) {\n this._dequeuePendingRequest(item);\n callback(err, resp);\n }.bind(this));\n } catch (e) {\n this._dequeuePendingRequest(item);\n callback(e);\n }\n};\n\n/*\n * wait - Stop any further errors from being added to the queue, and get called back when all items\n * currently processing have finished sending to the backend.\n *\n * @param callback - function() called when all pending items have been sent\n */\nQueue.prototype.wait = function(callback) {\n if (!_.isFunction(callback)) {\n return;\n }\n this.waitCallback = callback;\n if (this._maybeCallWait()) {\n return;\n }\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitIntervalID = setInterval(function() {\n this._maybeCallWait();\n }.bind(this), 500);\n};\n\n/* _applyPredicates - Sequentially applies the predicates that have been added to the queue to the\n * given item with the currently configured options.\n *\n * @param item - An item in the queue\n * @returns {stop: bool, err: (Error|null)} - stop being true means do not add item to the queue,\n * the error value should be passed up to a callbak if we are stopping.\n */\nQueue.prototype._applyPredicates = function(item) {\n var p = null;\n for (var i = 0, len = this.predicates.length; i < len; i++) {\n p = this.predicates[i](item, this.options);\n if (!p || p.err !== undefined) {\n return {stop: true, err: p.err};\n }\n }\n return {stop: false, err: null};\n};\n\n/*\n * _makeApiRequest - Send an item to Rollbar, callback when done, if there is an error make an\n * effort to retry if we are configured to do so.\n *\n * @param item - an item ready to send to the backend\n * @param callback - function(err, response)\n */\nQueue.prototype._makeApiRequest = function(item, callback) {\n var rateLimitResponse = this.rateLimiter.shouldSend(item);\n if (rateLimitResponse.shouldSend) {\n this.api.postItem(item, function(err, resp) {\n if (err) {\n this._maybeRetry(err, item, callback);\n } else {\n callback(err, resp);\n }\n }.bind(this));\n } else if (rateLimitResponse.error) {\n callback(rateLimitResponse.error);\n } else {\n this.api.postItem(rateLimitResponse.payload, callback);\n }\n};\n\n// These are errors basically mean there is no internet connection\nvar RETRIABLE_ERRORS = ['ECONNRESET', 'ENOTFOUND', 'ESOCKETTIMEDOUT', 'ETIMEDOUT', 'ECONNREFUSED', 'EHOSTUNREACH', 'EPIPE', 'EAI_AGAIN'];\n\n/*\n * _maybeRetry - Given the error returned by the API, decide if we should retry or just callback\n * with the error.\n *\n * @param err - an error returned by the API transport\n * @param item - the item that was trying to be sent when this error occured\n * @param callback - function(err, response)\n */\nQueue.prototype._maybeRetry = function(err, item, callback) {\n var shouldRetry = false;\n if (this.options.retryInterval) {\n for (var i = 0, len = RETRIABLE_ERRORS.length; i < len; i++) {\n if (err.code === RETRIABLE_ERRORS[i]) {\n shouldRetry = true;\n break;\n }\n }\n }\n if (shouldRetry) {\n this._retryApiRequest(item, callback);\n } else {\n callback(err);\n }\n};\n\n/*\n * _retryApiRequest - Add an item and a callback to a queue and possibly start a timer to process\n * that queue based on the retryInterval in the options for this queue.\n *\n * @param item - an item that failed to send due to an error we deem retriable\n * @param callback - function(err, response)\n */\nQueue.prototype._retryApiRequest = function(item, callback) {\n this.retryQueue.push({item: item, callback: callback});\n\n if (!this.retryHandle) {\n this.retryHandle = setInterval(function() {\n while (this.retryQueue.length) {\n var retryObject = this.retryQueue.shift();\n this._makeApiRequest(retryObject.item, retryObject.callback);\n }\n }.bind(this), this.options.retryInterval);\n }\n};\n\n/*\n * _dequeuePendingRequest - Removes the item from the pending request queue, this queue is used to\n * enable to functionality of providing a callback that clients can pass to `wait` to be notified\n * when the pending request queue has been emptied. This must be called when the API finishes\n * processing this item. If a `wait` callback is configured, it is called by this function.\n *\n * @param item - the item previously added to the pending request queue\n */\nQueue.prototype._dequeuePendingRequest = function(item) {\n var idx = this.pendingRequests.indexOf(item);\n if (idx !== -1) {\n this.pendingRequests.splice(idx, 1);\n this._maybeCallWait();\n }\n};\n\nQueue.prototype._maybeLog = function(data, originalError) {\n if (this.logger && this.options.verbose) {\n var message = originalError;\n message = message || _.get(data, 'body.trace.exception.message');\n message = message || _.get(data, 'body.trace_chain.0.exception.message');\n if (message) {\n this.logger.error(message);\n return;\n }\n message = _.get(data, 'body.message.body');\n if (message) {\n this.logger.log(message);\n }\n }\n};\n\nQueue.prototype._maybeCallWait = function() {\n if (_.isFunction(this.waitCallback) && this.pendingItems.length === 0 && this.pendingRequests.length === 0) {\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitCallback();\n return true;\n }\n return false;\n};\n\nmodule.exports = Queue;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/queue.js\n// module id = 5\n// module chunks = 0","'use strict';\n\nvar extend = require('extend');\n\nvar RollbarJSON = {};\nvar __initRollbarJSON = false;\nfunction setupJSON() {\n if (__initRollbarJSON) {\n return;\n }\n __initRollbarJSON = true;\n\n if (isDefined(JSON)) {\n if (isNativeFunction(JSON.stringify)) {\n RollbarJSON.stringify = JSON.stringify;\n }\n if (isNativeFunction(JSON.parse)) {\n RollbarJSON.parse = JSON.parse;\n }\n }\n if (!isFunction(RollbarJSON.stringify) || !isFunction(RollbarJSON.parse)) {\n var setupCustomJSON = require('../vendor/JSON-js/json3.js');\n setupCustomJSON(RollbarJSON);\n }\n}\nsetupJSON();\n\n/*\n * isType - Given a Javascript value and a string, returns true if the type of the value matches the\n * given string.\n *\n * @param x - any value\n * @param t - a lowercase string containing one of the following type names:\n * - undefined\n * - null\n * - error\n * - number\n * - boolean\n * - string\n * - symbol\n * - function\n * - object\n * - array\n * @returns true if x is of type t, otherwise false\n */\nfunction isType(x, t) {\n return t === typeName(x);\n}\n\n/*\n * typeName - Given a Javascript value, returns the type of the object as a string\n */\nfunction typeName(x) {\n var name = typeof x;\n if (name !== 'object') {\n return name;\n }\n if (!x) {\n return 'null';\n }\n if (x instanceof Error) {\n return 'error';\n }\n return ({}).toString.call(x).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n}\n\n/* isFunction - a convenience function for checking if a value is a function\n *\n * @param f - any value\n * @returns true if f is a function, otherwise false\n */\nfunction isFunction(f) {\n return isType(f, 'function');\n}\n\n/* isNativeFunction - a convenience function for checking if a value is a native JS function\n *\n * @param f - any value\n * @returns true if f is a native JS function, otherwise false\n */\nfunction isNativeFunction(f) {\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n var funcMatchString = Function.prototype.toString.call(Object.prototype.hasOwnProperty)\n .replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?');\n var reIsNative = RegExp('^' + funcMatchString + '$');\n return isObject(f) && reIsNative.test(f);\n}\n\n/* isObject - Checks if the argument is an object\n *\n * @param value - any value\n * @returns true is value is an object function is an object)\n*/\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/*\n * isDefined - a convenience function for checking if a value is not equal to undefined\n *\n * @param u - any value\n * @returns true if u is anything other than undefined\n */\nfunction isDefined(u) {\n return !isType(u, 'undefined');\n}\n\n/*\n * isIterable - convenience function for checking if a value can be iterated, essentially\n * whether it is an object or an array.\n *\n * @param i - any value\n * @returns true if i is an object or an array as determined by `typeName`\n */\nfunction isIterable(i) {\n var type = typeName(i);\n return (type === 'object' || type === 'array');\n}\n\n/*\n * isError - convenience function for checking if a value is of an error type\n *\n * @param e - any value\n * @returns true if e is an error\n */\nfunction isError(e) {\n return isType(e, 'error');\n}\n\nfunction traverse(obj, func, seen) {\n var k, v, i;\n var isObj = isType(obj, 'object');\n var isArray = isType(obj, 'array');\n var keys = [];\n\n if (isObj && seen.indexOf(obj) !== -1) {\n return obj;\n }\n seen.push(obj);\n\n if (isObj) {\n for (k in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, k)) {\n keys.push(k);\n }\n }\n } else if (isArray) {\n for (i = 0; i < obj.length; ++i) {\n keys.push(i);\n }\n }\n\n var result = isObj ? {} : [];\n for (i = 0; i < keys.length; ++i) {\n k = keys[i];\n v = obj[k];\n result[k] = func(k, v, seen);\n }\n\n return (keys.length != 0) ? result : obj;\n}\n\nfunction redact() {\n return '********';\n}\n\n// from http://stackoverflow.com/a/8809472/1138191\nfunction uuid4() {\n var d = now();\n var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (d + Math.random() * 16) % 16 | 0;\n d = Math.floor(d / 16);\n return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16);\n });\n return uuid;\n}\n\nvar LEVELS = {\n debug: 0,\n info: 1,\n warning: 2,\n error: 3,\n critical: 4\n};\n\nfunction sanitizeUrl(url) {\n var baseUrlParts = parseUri(url);\n // remove a trailing # if there is no anchor\n if (baseUrlParts.anchor === '') {\n baseUrlParts.source = baseUrlParts.source.replace('#', '');\n }\n\n url = baseUrlParts.source.replace('?' + baseUrlParts.query, '');\n return url;\n}\n\nvar parseUriOptions = {\n strictMode: false,\n key: [\n 'source',\n 'protocol',\n 'authority',\n 'userInfo',\n 'user',\n 'password',\n 'host',\n 'port',\n 'relative',\n 'path',\n 'directory',\n 'file',\n 'query',\n 'anchor'\n ],\n q: {\n name: 'queryKey',\n parser: /(?:^|&)([^&=]*)=?([^&]*)/g\n },\n parser: {\n strict: /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,\n loose: /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/\n }\n};\n\nfunction parseUri(str) {\n if (!isType(str, 'string')) {\n throw new Error('received invalid input');\n }\n\n var o = parseUriOptions;\n var m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str);\n var uri = {};\n var i = o.key.length;\n\n while (i--) {\n uri[o.key[i]] = m[i] || '';\n }\n\n uri[o.q.name] = {};\n uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {\n if ($1) {\n uri[o.q.name][$1] = $2;\n }\n });\n\n return uri;\n}\n\nfunction addParamsAndAccessTokenToPath(accessToken, options, params) {\n params = params || {};\n params.access_token = accessToken;\n var paramsArray = [];\n var k;\n for (k in params) {\n if (Object.prototype.hasOwnProperty.call(params, k)) {\n paramsArray.push([k, params[k]].join('='));\n }\n }\n var query = '?' + paramsArray.sort().join('&');\n\n options = options || {};\n options.path = options.path || '';\n var qs = options.path.indexOf('?');\n var h = options.path.indexOf('#');\n var p;\n if (qs !== -1 && (h === -1 || h > qs)) {\n p = options.path;\n options.path = p.substring(0,qs) + query + '&' + p.substring(qs+1);\n } else {\n if (h !== -1) {\n p = options.path;\n options.path = p.substring(0,h) + query + p.substring(h);\n } else {\n options.path = options.path + query;\n }\n }\n}\n\nfunction formatUrl(u, protocol) {\n protocol = protocol || u.protocol;\n if (!protocol && u.port) {\n if (u.port === 80) {\n protocol = 'http:';\n } else if (u.port === 443) {\n protocol = 'https:';\n }\n }\n protocol = protocol || 'https:';\n\n if (!u.hostname) {\n return null;\n }\n var result = protocol + '//' + u.hostname;\n if (u.port) {\n result = result + ':' + u.port;\n }\n if (u.path) {\n result = result + u.path;\n }\n return result;\n}\n\nfunction stringify(obj, backup) {\n var value, error;\n try {\n value = RollbarJSON.stringify(obj);\n } catch (jsonError) {\n if (backup && isFunction(backup)) {\n try {\n value = backup(obj);\n } catch (backupError) {\n error = backupError;\n }\n } else {\n error = jsonError;\n }\n }\n return {error: error, value: value};\n}\n\nfunction jsonParse(s) {\n var value, error;\n try {\n value = RollbarJSON.parse(s);\n } catch (e) {\n error = e;\n }\n return {error: error, value: value};\n}\n\nfunction makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n mode,\n backupMessage,\n errorParser\n) {\n var location = {\n url: url || '',\n line: lineno,\n column: colno\n };\n location.func = errorParser.guessFunctionName(location.url, location.line);\n location.context = errorParser.gatherContext(location.url, location.line);\n var href = document && document.location && document.location.href;\n var useragent = window && window.navigator && window.navigator.userAgent;\n return {\n 'mode': mode,\n 'message': error ? String(error) : (message || backupMessage),\n 'url': href,\n 'stack': [location],\n 'useragent': useragent\n };\n}\n\nfunction wrapCallback(logger, f) {\n return function(err, resp) {\n try {\n f(err, resp);\n } catch (e) {\n logger.error(e);\n }\n };\n}\n\nfunction createItem(args, logger, notifier, requestKeys, lambdaContext) {\n var message, err, custom, callback, request;\n var arg;\n var extraArgs = [];\n\n for (var i = 0, l = args.length; i < l; ++i) {\n arg = args[i];\n\n var typ = typeName(arg);\n switch (typ) {\n case 'undefined':\n break;\n case 'string':\n message ? extraArgs.push(arg) : message = arg;\n break;\n case 'function':\n callback = wrapCallback(logger, arg);\n break;\n case 'date':\n extraArgs.push(arg);\n break;\n case 'error':\n case 'domexception':\n err ? extraArgs.push(arg) : err = arg;\n break;\n case 'object':\n case 'array':\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n if (requestKeys && typ === 'object' && !request) {\n for (var j = 0, len = requestKeys.length; j < len; ++j) {\n if (arg[requestKeys[j]] !== undefined) {\n request = arg;\n break;\n }\n }\n if (request) {\n break;\n }\n }\n custom ? extraArgs.push(arg) : custom = arg;\n break;\n default:\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n extraArgs.push(arg);\n }\n }\n\n if (extraArgs.length > 0) {\n // if custom is an array this turns it into an object with integer keys\n custom = extend(true, {}, custom);\n custom.extraArgs = extraArgs;\n }\n\n var item = {\n message: message,\n err: err,\n custom: custom,\n timestamp: now(),\n callback: callback,\n uuid: uuid4()\n };\n if (custom && custom.level !== undefined) {\n item.level = custom.level;\n delete custom.level;\n }\n if (requestKeys && request) {\n item.request = request;\n }\n if (lambdaContext) {\n item.lambdaContext = lambdaContext;\n }\n item._originalArgs = args;\n return item;\n}\n\n/*\n * get - given an obj/array and a keypath, return the value at that keypath or\n * undefined if not possible.\n *\n * @param obj - an object or array\n * @param path - a string of keys separated by '.' such as 'plugin.jquery.0.message'\n * which would correspond to 42 in `{plugin: {jquery: [{message: 42}]}}`\n */\nfunction get(obj, path) {\n if (!obj) {\n return undefined;\n }\n var keys = path.split('.');\n var result = obj;\n try {\n for (var i = 0, len = keys.length; i < len; ++i) {\n result = result[keys[i]];\n }\n } catch (e) {\n result = undefined;\n }\n return result;\n}\n\nfunction set(obj, path, value) {\n if (!obj) {\n return;\n }\n var keys = path.split('.');\n var len = keys.length;\n if (len < 1) {\n return;\n }\n if (len === 1) {\n obj[keys[0]] = value;\n return;\n }\n try {\n var temp = obj[keys[0]] || {};\n var replacement = temp;\n for (var i = 1; i < len-1; i++) {\n temp[keys[i]] = temp[keys[i]] || {};\n temp = temp[keys[i]];\n }\n temp[keys[len-1]] = value;\n obj[keys[0]] = replacement;\n } catch (e) {\n return;\n }\n}\n\nfunction scrub(data, scrubFields) {\n scrubFields = scrubFields || [];\n var paramRes = _getScrubFieldRegexs(scrubFields);\n var queryRes = _getScrubQueryParamRegexs(scrubFields);\n\n function redactQueryParam(dummy0, paramPart, dummy1, dummy2, dummy3, valPart) {\n return paramPart + redact(valPart);\n }\n\n function paramScrubber(v) {\n var i;\n if (isType(v, 'string')) {\n for (i = 0; i < queryRes.length; ++i) {\n v = v.replace(queryRes[i], redactQueryParam);\n }\n }\n return v;\n }\n\n function valScrubber(k, v) {\n var i;\n for (i = 0; i < paramRes.length; ++i) {\n if (paramRes[i].test(k)) {\n v = redact(v);\n break;\n }\n }\n return v;\n }\n\n function scrubber(k, v, seen) {\n var tmpV = valScrubber(k, v);\n if (tmpV === v) {\n if (isType(v, 'object') || isType(v, 'array')) {\n return traverse(v, scrubber, seen);\n }\n return paramScrubber(tmpV);\n } else {\n return tmpV;\n }\n }\n\n return traverse(data, scrubber, []);\n}\n\nfunction _getScrubFieldRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '^\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?$';\n ret.push(new RegExp(pat, 'i'));\n }\n return ret;\n}\n\n\nfunction _getScrubQueryParamRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?';\n ret.push(new RegExp('(' + pat + '=)([^&\\\\n]+)', 'igm'));\n }\n return ret;\n}\n\nfunction formatArgsAsString(args) {\n var i, len, arg;\n var result = [];\n for (i = 0, len = args.length; i < len; i++) {\n arg = args[i];\n if (typeof arg === 'object') {\n arg = stringify(arg);\n arg = arg.error || arg.value;\n if (arg.length > 500)\n arg = arg.substr(0,500)+'...';\n } else if (typeof arg === 'undefined') {\n arg = 'undefined';\n }\n result.push(arg);\n }\n return result.join(' ');\n}\n\nfunction now() {\n if (Date.now) {\n return +Date.now();\n }\n return +new Date();\n}\n\nfunction filterIp(requestData, captureIp) {\n if (!requestData || !requestData['user_ip'] || captureIp === true) {\n return;\n }\n var newIp = requestData['user_ip'];\n if (!captureIp) {\n newIp = null;\n } else {\n try {\n var parts;\n if (newIp.indexOf('.') !== -1) {\n parts = newIp.split('.');\n parts.pop();\n parts.push('0');\n newIp = parts.join('.');\n } else if (newIp.indexOf(':') !== -1) {\n parts = newIp.split(':');\n if (parts.length > 2) {\n var beginning = parts.slice(0, 3);\n var slashIdx = beginning[2].indexOf('/');\n if (slashIdx !== -1) {\n beginning[2] = beginning[2].substring(0, slashIdx);\n }\n var terminal = '0000:0000:0000:0000:0000';\n newIp = beginning.concat(terminal).join(':');\n }\n } else {\n newIp = null;\n }\n } catch (e) {\n newIp = null;\n }\n }\n requestData['user_ip'] = newIp;\n}\n\nmodule.exports = {\n isType: isType,\n typeName: typeName,\n isFunction: isFunction,\n isNativeFunction: isNativeFunction,\n isIterable: isIterable,\n isError: isError,\n extend: extend,\n traverse: traverse,\n redact: redact,\n uuid4: uuid4,\n LEVELS: LEVELS,\n sanitizeUrl: sanitizeUrl,\n addParamsAndAccessTokenToPath: addParamsAndAccessTokenToPath,\n formatUrl: formatUrl,\n stringify: stringify,\n jsonParse: jsonParse,\n makeUnhandledStackInfo: makeUnhandledStackInfo,\n createItem: createItem,\n get: get,\n set: set,\n scrub: scrub,\n formatArgsAsString: formatArgsAsString,\n now: now,\n filterIp: filterIp\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/utility.js\n// module id = 6\n// module chunks = 0","'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) {/**/}\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[0],\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t} else if ((typeof target !== 'object' && typeof target !== 'function') || target == null) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = target[name];\n\t\t\t\tcopy = options[name];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\ttarget[name] = extend(deep, clone, copy);\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/extend/index.js\n// module id = 7\n// module chunks = 0","// json3.js\n// 2017-02-21\n// Public Domain.\n// NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n// See http://www.JSON.org/js.html\n// This code should be minified before deployment.\n// See http://javascript.crockford.com/jsmin.html\n\n// USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n// NOT CONTROL.\n\n// This file creates a global JSON object containing two methods: stringify\n// and parse. This file provides the ES5 JSON capability to ES3 systems.\n// If a project might run on IE8 or earlier, then this file should be included.\n// This file does nothing on ES5 systems.\n\n// JSON.stringify(value, replacer, space)\n// value any JavaScript value, usually an object or array.\n// replacer an optional parameter that determines how object\n// values are stringified for objects. It can be a\n// function or an array of strings.\n// space an optional parameter that specifies the indentation\n// of nested structures. If it is omitted, the text will\n// be packed without extra whitespace. If it is a number,\n// it will specify the number of spaces to indent at each\n// level. If it is a string (such as \"\\t\" or \" \"),\n// it contains the characters used to indent at each level.\n// This method produces a JSON text from a JavaScript value.\n// When an object value is found, if the object contains a toJSON\n// method, its toJSON method will be called and the result will be\n// stringified. A toJSON method does not serialize: it returns the\n// value represented by the name/value pair that should be serialized,\n// or undefined if nothing should be serialized. The toJSON method\n// will be passed the key associated with the value, and this will be\n// bound to the value.\n\n// For example, this would serialize Dates as ISO strings.\n\n// Date.prototype.toJSON = function (key) {\n// function f(n) {\n// // Format integers to have at least two digits.\n// return (n < 10)\n// ? \"0\" + n\n// : n;\n// }\n// return this.getUTCFullYear() + \"-\" +\n// f(this.getUTCMonth() + 1) + \"-\" +\n// f(this.getUTCDate()) + \"T\" +\n// f(this.getUTCHours()) + \":\" +\n// f(this.getUTCMinutes()) + \":\" +\n// f(this.getUTCSeconds()) + \"Z\";\n// };\n\n// You can provide an optional replacer method. It will be passed the\n// key and value of each member, with this bound to the containing\n// object. The value that is returned from your method will be\n// serialized. If your method returns undefined, then the member will\n// be excluded from the serialization.\n\n// If the replacer parameter is an array of strings, then it will be\n// used to select the members to be serialized. It filters the results\n// such that only members with keys listed in the replacer array are\n// stringified.\n\n// Values that do not have JSON representations, such as undefined or\n// functions, will not be serialized. Such values in objects will be\n// dropped; in arrays they will be replaced with null. You can use\n// a replacer function to replace those with JSON values.\n\n// JSON.stringify(undefined) returns undefined.\n\n// The optional space parameter produces a stringification of the\n// value that is filled with line breaks and indentation to make it\n// easier to read.\n\n// If the space parameter is a non-empty string, then that string will\n// be used for indentation. If the space parameter is a number, then\n// the indentation will be that many spaces.\n\n// Example:\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}]);\n// // text is '[\"e\",{\"pluribus\":\"unum\"}]'\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}], null, \"\\t\");\n// // text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\n\n// text = JSON.stringify([new Date()], function (key, value) {\n// return this[key] instanceof Date\n// ? \"Date(\" + this[key] + \")\"\n// : value;\n// });\n// // text is '[\"Date(---current time---)\"]'\n\n// JSON.parse(text, reviver)\n// This method parses a JSON text to produce an object or array.\n// It can throw a SyntaxError exception.\n// This has been modified to use JSON-js/json_parse_state.js as the\n// parser instead of the one built around eval found in JSON-js/json2.js\n\n// The optional reviver parameter is a function that can filter and\n// transform the results. It receives each of the keys and values,\n// and its return value is used instead of the original value.\n// If it returns what it received, then the structure is not modified.\n// If it returns undefined then the member is deleted.\n\n// Example:\n\n// // Parse the text. Values that look like ISO date strings will\n// // be converted to Date objects.\n\n// myData = JSON.parse(text, function (key, value) {\n// var a;\n// if (typeof value === \"string\") {\n// a =\n// /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n// if (a) {\n// return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n// +a[5], +a[6]));\n// }\n// }\n// return value;\n// });\n\n// myData = JSON.parse('[\"Date(09/09/2001)\"]', function (key, value) {\n// var d;\n// if (typeof value === \"string\" &&\n// value.slice(0, 5) === \"Date(\" &&\n// value.slice(-1) === \")\") {\n// d = new Date(value.slice(5, -1));\n// if (d) {\n// return d;\n// }\n// }\n// return value;\n// });\n\n// This is a reference implementation. You are free to copy, modify, or\n// redistribute.\n\n/*jslint\n for, this\n */\n\n/*property\n JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\n getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\n lastIndex, length, parse, prototype, push, replace, slice, stringify,\n test, toJSON, toString, valueOf\n */\n\nvar setupCustomJSON = function(JSON) {\n\n var rx_one = /^[\\],:{}\\s]*$/;\n var rx_two = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g;\n var rx_three = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\n var rx_four = /(?:^|:|,)(?:\\s*\\[)+/g;\n var rx_escapable = /[\\\\\"\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n var rx_dangerous = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\n function f(n) {\n // Format integers to have at least two digits.\n return n < 10\n ? \"0\" + n\n : n;\n }\n\n function this_value() {\n return this.valueOf();\n }\n\n if (typeof Date.prototype.toJSON !== \"function\") {\n\n Date.prototype.toJSON = function () {\n\n return isFinite(this.valueOf())\n ? this.getUTCFullYear() + \"-\" +\n f(this.getUTCMonth() + 1) + \"-\" +\n f(this.getUTCDate()) + \"T\" +\n f(this.getUTCHours()) + \":\" +\n f(this.getUTCMinutes()) + \":\" +\n f(this.getUTCSeconds()) + \"Z\"\n : null;\n };\n\n Boolean.prototype.toJSON = this_value;\n Number.prototype.toJSON = this_value;\n String.prototype.toJSON = this_value;\n }\n\n var gap;\n var indent;\n var meta;\n var rep;\n\n\n function quote(string) {\n\n // If the string contains no control characters, no quote characters, and no\n // backslash characters, then we can safely slap some quotes around it.\n // Otherwise we must also replace the offending characters with safe escape\n // sequences.\n\n rx_escapable.lastIndex = 0;\n return rx_escapable.test(string)\n ? \"\\\"\" + string.replace(rx_escapable, function (a) {\n var c = meta[a];\n return typeof c === \"string\"\n ? c\n : \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n }) + \"\\\"\"\n : \"\\\"\" + string + \"\\\"\";\n }\n\n\n function str(key, holder) {\n\n // Produce a string from holder[key].\n\n var i; // The loop counter.\n var k; // The member key.\n var v; // The member value.\n var length;\n var mind = gap;\n var partial;\n var value = holder[key];\n\n // If the value has a toJSON method, call it to obtain a replacement value.\n\n if (value && typeof value === \"object\" &&\n typeof value.toJSON === \"function\") {\n value = value.toJSON(key);\n }\n\n // If we were called with a replacer function, then call the replacer to\n // obtain a replacement value.\n\n if (typeof rep === \"function\") {\n value = rep.call(holder, key, value);\n }\n\n // What happens next depends on the value's type.\n\n switch (typeof value) {\n case \"string\":\n return quote(value);\n\n case \"number\":\n\n // JSON numbers must be finite. Encode non-finite numbers as null.\n\n return isFinite(value)\n ? String(value)\n : \"null\";\n\n case \"boolean\":\n case \"null\":\n\n // If the value is a boolean or null, convert it to a string. Note:\n // typeof null does not produce \"null\". The case is included here in\n // the remote chance that this gets fixed someday.\n\n return String(value);\n\n // If the type is \"object\", we might be dealing with an object or an array or\n // null.\n\n case \"object\":\n\n // Due to a specification blunder in ECMAScript, typeof null is \"object\",\n // so watch out for that case.\n\n if (!value) {\n return \"null\";\n }\n\n // Make an array to hold the partial results of stringifying this object value.\n\n gap += indent;\n partial = [];\n\n // Is the value an array?\n\n if (Object.prototype.toString.apply(value) === \"[object Array]\") {\n\n // The value is an array. Stringify every element. Use null as a placeholder\n // for non-JSON values.\n\n length = value.length;\n for (i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || \"null\";\n }\n\n // Join all of the elements together, separated with commas, and wrap them in\n // brackets.\n\n v = partial.length === 0\n ? \"[]\"\n : gap\n ? \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\"\n : \"[\" + partial.join(\",\") + \"]\";\n gap = mind;\n return v;\n }\n\n // If the replacer is an array, use it to select the members to be stringified.\n\n if (rep && typeof rep === \"object\") {\n length = rep.length;\n for (i = 0; i < length; i += 1) {\n if (typeof rep[i] === \"string\") {\n k = rep[i];\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n } else {\n\n // Otherwise, iterate through all of the keys in the object.\n\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n }\n\n // Join all of the member texts together, separated with commas,\n // and wrap them in braces.\n\n v = partial.length === 0\n ? \"{}\"\n : gap\n ? \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\"\n : \"{\" + partial.join(\",\") + \"}\";\n gap = mind;\n return v;\n }\n }\n\n // If the JSON object does not yet have a stringify method, give it one.\n\n if (typeof JSON.stringify !== \"function\") {\n meta = { // table of character substitutions\n \"\\b\": \"\\\\b\",\n \"\\t\": \"\\\\t\",\n \"\\n\": \"\\\\n\",\n \"\\f\": \"\\\\f\",\n \"\\r\": \"\\\\r\",\n \"\\\"\": \"\\\\\\\"\",\n \"\\\\\": \"\\\\\\\\\"\n };\n JSON.stringify = function (value, replacer, space) {\n\n // The stringify method takes a value and an optional replacer, and an optional\n // space parameter, and returns a JSON text. The replacer can be a function\n // that can replace values, or an array of strings that will select the keys.\n // A default replacer method can be provided. Use of the space parameter can\n // produce text that is more easily readable.\n\n var i;\n gap = \"\";\n indent = \"\";\n\n // If the space parameter is a number, make an indent string containing that\n // many spaces.\n\n if (typeof space === \"number\") {\n for (i = 0; i < space; i += 1) {\n indent += \" \";\n }\n\n // If the space parameter is a string, it will be used as the indent string.\n\n } else if (typeof space === \"string\") {\n indent = space;\n }\n\n // If there is a replacer, it must be a function or an array.\n // Otherwise, throw an error.\n\n rep = replacer;\n if (replacer && typeof replacer !== \"function\" &&\n (typeof replacer !== \"object\" ||\n typeof replacer.length !== \"number\")) {\n throw new Error(\"JSON.stringify\");\n }\n\n // Make a fake root object containing our value under the key of \"\".\n // Return the result of stringifying the value.\n\n return str(\"\", {\"\": value});\n };\n }\n\n\n // If the JSON object does not yet have a parse method, give it one.\n\n if (typeof JSON.parse !== \"function\") {\n JSON.parse = (function () {\n\n // This function creates a JSON parse function that uses a state machine rather\n // than the dangerous eval function to parse a JSON text.\n\n var state; // The state of the parser, one of\n // 'go' The starting state\n // 'ok' The final, accepting state\n // 'firstokey' Ready for the first key of the object or\n // the closing of an empty object\n // 'okey' Ready for the next key of the object\n // 'colon' Ready for the colon\n // 'ovalue' Ready for the value half of a key/value pair\n // 'ocomma' Ready for a comma or closing }\n // 'firstavalue' Ready for the first value of an array or\n // an empty array\n // 'avalue' Ready for the next value of an array\n // 'acomma' Ready for a comma or closing ]\n var stack; // The stack, for controlling nesting.\n var container; // The current container object or array\n var key; // The current key\n var value; // The current value\n var escapes = { // Escapement translation table\n \"\\\\\": \"\\\\\",\n \"\\\"\": \"\\\"\",\n \"/\": \"/\",\n \"t\": \"\\t\",\n \"n\": \"\\n\",\n \"r\": \"\\r\",\n \"f\": \"\\f\",\n \"b\": \"\\b\"\n };\n var string = { // The actions for string tokens\n go: function () {\n state = \"ok\";\n },\n firstokey: function () {\n key = value;\n state = \"colon\";\n },\n okey: function () {\n key = value;\n state = \"colon\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var number = { // The actions for number tokens\n go: function () {\n state = \"ok\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var action = {\n\n // The action table describes the behavior of the machine. It contains an\n // object for each token. Each object contains a method that is called when\n // a token is matched in a state. An object will lack a method for illegal\n // states.\n\n \"{\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = {};\n state = \"firstokey\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = {};\n state = \"firstokey\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n }\n },\n \"}\": {\n firstokey: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n ocomma: function () {\n var pop = stack.pop();\n container[key] = value;\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \"[\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = [];\n state = \"firstavalue\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = [];\n state = \"firstavalue\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n }\n },\n \"]\": {\n firstavalue: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n acomma: function () {\n var pop = stack.pop();\n container.push(value);\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \":\": {\n colon: function () {\n if (Object.hasOwnProperty.call(container, key)) {\n throw new SyntaxError(\"Duplicate key '\" + key + \"\\\"\");\n }\n state = \"ovalue\";\n }\n },\n \",\": {\n ocomma: function () {\n container[key] = value;\n state = \"okey\";\n },\n acomma: function () {\n container.push(value);\n state = \"avalue\";\n }\n },\n \"true\": {\n go: function () {\n value = true;\n state = \"ok\";\n },\n ovalue: function () {\n value = true;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = true;\n state = \"acomma\";\n },\n avalue: function () {\n value = true;\n state = \"acomma\";\n }\n },\n \"false\": {\n go: function () {\n value = false;\n state = \"ok\";\n },\n ovalue: function () {\n value = false;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = false;\n state = \"acomma\";\n },\n avalue: function () {\n value = false;\n state = \"acomma\";\n }\n },\n \"null\": {\n go: function () {\n value = null;\n state = \"ok\";\n },\n ovalue: function () {\n value = null;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = null;\n state = \"acomma\";\n },\n avalue: function () {\n value = null;\n state = \"acomma\";\n }\n }\n };\n\n function debackslashify(text) {\n\n // Remove and replace any backslash escapement.\n\n return text.replace(/\\\\(?:u(.{4})|([^u]))/g, function (ignore, b, c) {\n return b\n ? String.fromCharCode(parseInt(b, 16))\n : escapes[c];\n });\n }\n\n return function (source, reviver) {\n\n // A regular expression is used to extract tokens from the JSON text.\n // The extraction process is cautious.\n\n var result;\n var tx = /^[\\u0020\\t\\n\\r]*(?:([,:\\[\\]{}]|true|false|null)|(-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)|\"((?:[^\\r\\n\\t\\\\\\\"]|\\\\(?:[\"\\\\\\/trnfb]|u[0-9a-fA-F]{4}))*)\")/;\n\n // Set the starting state.\n\n state = \"go\";\n\n // The stack records the container, key, and state for each object or array\n // that contains another object or array while processing nested structures.\n\n stack = [];\n\n // If any error occurs, we will catch it and ultimately throw a syntax error.\n\n try {\n\n // For each token...\n\n while (true) {\n result = tx.exec(source);\n if (!result) {\n break;\n }\n\n // result is the result array from matching the tokenizing regular expression.\n // result[0] contains everything that matched, including any initial whitespace.\n // result[1] contains any punctuation that was matched, or true, false, or null.\n // result[2] contains a matched number, still in string form.\n // result[3] contains a matched string, without quotes but with escapement.\n\n if (result[1]) {\n\n // Token: Execute the action for this state and token.\n\n action[result[1]][state]();\n\n } else if (result[2]) {\n\n // Number token: Convert the number string into a number value and execute\n // the action for this state and number.\n\n value = +result[2];\n number[state]();\n } else {\n\n // String token: Replace the escapement sequences and execute the action for\n // this state and string.\n\n value = debackslashify(result[3]);\n string[state]();\n }\n\n // Remove the token from the string. The loop will continue as long as there\n // are tokens. This is a slow process, but it allows the use of ^ matching,\n // which assures that no illegal tokens slip through.\n\n source = source.slice(result[0].length);\n }\n\n // If we find a state/token combination that is illegal, then the action will\n // cause an error. We handle the error by simply changing the state.\n\n } catch (e) {\n state = e;\n }\n\n // The parsing is finished. If we are not in the final \"ok\" state, or if the\n // remaining source contains anything except whitespace, then we did not have\n //a well-formed JSON text.\n\n if (state !== \"ok\" || (/[^\\u0020\\t\\n\\r]/.test(source))) {\n throw (state instanceof SyntaxError)\n ? state\n : new SyntaxError(\"JSON\");\n }\n\n // If there is a reviver function, we recursively walk the new structure,\n // passing each name/value pair to the reviver function for possible\n // transformation, starting with a temporary root object that holds the current\n // value in an empty key. If there is not a reviver function, we simply return\n // that value.\n\n return (typeof reviver === \"function\")\n ? (function walk(holder, key) {\n var k;\n var v;\n var val = holder[key];\n if (val && typeof val === \"object\") {\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(val, k)) {\n v = walk(val, k);\n if (v !== undefined) {\n val[k] = v;\n } else {\n delete val[k];\n }\n }\n }\n }\n return reviver.call(holder, key, val);\n }({\"\": value}, \"\"))\n : value;\n };\n }());\n }\n}\n\nmodule.exports = setupCustomJSON;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./vendor/JSON-js/json3.js\n// module id = 8\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Notifier - the internal object responsible for delegating between the client exposed API, the\n * chain of transforms necessary to turn an item into something that can be sent to Rollbar, and the\n * queue which handles the communcation with the Rollbar API servers.\n *\n * @param queue - an object that conforms to the interface: addItem(item, callback)\n * @param options - an object representing the options to be set for this notifier, this should have\n * any defaults already set by the caller\n */\nfunction Notifier(queue, options) {\n this.queue = queue;\n this.options = options;\n this.transforms = [];\n}\n\n/*\n * configure - updates the options for this notifier with the passed in object\n *\n * @param options - an object which gets merged with the current options set on this notifier\n * @returns this\n */\nNotifier.prototype.configure = function(options) {\n this.queue && this.queue.configure(options);\n var oldOptions = this.options;\n this.options = _.extend({}, oldOptions, options);\n return this;\n};\n\n/*\n * addTransform - adds a transform onto the end of the queue of transforms for this notifier\n *\n * @param transform - a function which takes three arguments:\n * * item: An Object representing the data to eventually be sent to Rollbar\n * * options: The current value of the options for this notifier\n * * callback: function(err: (Null|Error), item: (Null|Object)) the transform must call this\n * callback with a null value for error if it wants the processing chain to continue, otherwise\n * with an error to terminate the processing. The item should be the updated item after this\n * transform is finished modifying it.\n */\nNotifier.prototype.addTransform = function(transform) {\n if (_.isFunction(transform)) {\n this.transforms.push(transform);\n }\n return this;\n};\n\n/*\n * log - the internal log function which applies the configured transforms and then pushes onto the\n * queue to be sent to the backend.\n *\n * @param item - An object with the following structure:\n * message [String] - An optional string to be sent to rollbar\n * error [Error] - An optional error\n *\n * @param callback - A function of type function(err, resp) which will be called with exactly one\n * null argument and one non-null argument. The callback will be called once, either during the\n * transform stage if an error occurs inside a transform, or in response to the communication with\n * the backend. The second argument will be the response from the backend in case of success.\n */\nNotifier.prototype.log = function(item, callback) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!this.options.enabled) {\n return callback(new Error('Rollbar is not enabled'));\n }\n\n this.queue.addPendingItem(item);\n var originalError = item.err;\n this._applyTransforms(item, function(err, i) {\n if (err) {\n this.queue.removePendingItem(item);\n return callback(err, null);\n }\n this.queue.addItem(i, callback, originalError, item);\n }.bind(this));\n};\n\n/* Internal */\n\n/*\n * _applyTransforms - Applies the transforms that have been added to this notifier sequentially. See\n * `addTransform` for more information.\n *\n * @param item - An item to be transformed\n * @param callback - A function of type function(err, item) which will be called with a non-null\n * error and a null item in the case of a transform failure, or a null error and non-null item after\n * all transforms have been applied.\n */\nNotifier.prototype._applyTransforms = function(item, callback) {\n var transformIndex = -1;\n var transformsLength = this.transforms.length;\n var transforms = this.transforms;\n var options = this.options;\n\n var cb = function(err, i) {\n if (err) {\n callback(err, null);\n return;\n }\n\n transformIndex++;\n\n if (transformIndex === transformsLength) {\n callback(null, i);\n return;\n }\n\n transforms[transformIndex](i, options, cb);\n };\n\n cb(null, item);\n};\n\nmodule.exports = Notifier;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/notifier.js\n// module id = 9\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nvar MAX_EVENTS = 100;\n\nfunction Telemeter(options) {\n this.queue = [];\n this.options = _.extend(true, {}, options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n this.maxQueueSize = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n}\n\nTelemeter.prototype.configure = function(options) {\n var oldOptions = this.options;\n this.options = _.extend(true, {}, oldOptions, options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n var newMaxEvents = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n var deleteCount = 0;\n if (this.maxQueueSize > newMaxEvents) {\n deleteCount = this.maxQueueSize - newMaxEvents;\n }\n this.maxQueueSize = newMaxEvents;\n this.queue.splice(0, deleteCount);\n};\n\nTelemeter.prototype.copyEvents = function() {\n return Array.prototype.slice.call(this.queue, 0);\n};\n\nTelemeter.prototype.capture = function(type, metadata, level, rollbarUUID, timestamp) {\n var e = {\n level: getLevel(type, level),\n type: type,\n timestamp_ms: timestamp || _.now(),\n body: metadata,\n source: 'client'\n };\n if (rollbarUUID) {\n e.uuid = rollbarUUID;\n }\n\n try {\n if (_.isFunction(this.options.filterTelemetry) && this.options.filterTelemetry(e)) {\n return false;\n }\n } catch (e) {\n this.options.filterTelemetry = null;\n }\n\n this.push(e);\n return e;\n};\n\nTelemeter.prototype.captureEvent = function(metadata, level, rollbarUUID) {\n return this.capture('manual', metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.captureError = function(err, level, rollbarUUID, timestamp) {\n var metadata = {\n message: err.message || String(err)\n };\n if (err.stack) {\n metadata.stack = err.stack;\n }\n return this.capture('error', metadata, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureLog = function(message, level, rollbarUUID, timestamp) {\n return this.capture('log', {\n message: message\n }, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureNetwork = function(metadata, subtype, rollbarUUID, requestData) {\n subtype = subtype || 'xhr';\n metadata.subtype = metadata.subtype || subtype;\n if (requestData) {\n metadata.request = requestData;\n }\n var level = this.levelFromStatus(metadata.status_code);\n return this.capture('network', metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.levelFromStatus = function(statusCode) {\n if (statusCode >= 200 && statusCode < 400) {\n return 'info';\n }\n if (statusCode === 0 || statusCode >= 400) {\n return 'error';\n }\n return 'info';\n};\n\nTelemeter.prototype.captureDom = function(subtype, element, value, checked, rollbarUUID) {\n var metadata = {\n subtype: subtype,\n element: element\n };\n if (value !== undefined) {\n metadata.value = value;\n }\n if (checked !== undefined) {\n metadata.checked = checked;\n }\n return this.capture('dom', metadata, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureNavigation = function(from, to, rollbarUUID) {\n return this.capture('navigation', {from: from, to: to}, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureDomContentLoaded = function(ts) {\n return this.capture('navigation', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n */\n};\nTelemeter.prototype.captureLoad = function(ts) {\n return this.capture('navigation', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n */\n};\n\nTelemeter.prototype.captureConnectivityChange = function(type, rollbarUUID) {\n return this.captureNetwork({change: type}, 'connectivity', rollbarUUID);\n};\n\n// Only intended to be used internally by the notifier\nTelemeter.prototype._captureRollbarItem = function(item) {\n if (!this.options.includeItemsInTelemetry) {\n return;\n }\n if (item.err) {\n return this.captureError(item.err, item.level, item.uuid, item.timestamp);\n }\n if (item.message) {\n return this.captureLog(item.message, item.level, item.uuid, item.timestamp);\n }\n if (item.custom) {\n return this.capture('log', item.custom, item.level, item.uuid, item.timestamp);\n }\n};\n\nTelemeter.prototype.push = function(e) {\n this.queue.push(e);\n if (this.queue.length > this.maxQueueSize) {\n this.queue.shift();\n }\n};\n\nfunction getLevel(type, level) {\n if (level) {\n return level;\n }\n var defaultLevel = {\n error: 'error',\n manual: 'info'\n };\n return defaultLevel[type] || 'info';\n}\n\nmodule.exports = Telemeter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/telemetry.js\n// module id = 10\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\nvar helpers = require('./apiUtility');\n\nvar defaultOptions = {\n hostname: 'api.rollbar.com',\n path: '/api/1/item/',\n search: null,\n version: '1',\n protocol: 'https:',\n port: 443\n};\n\n/**\n * Api is an object that encapsulates methods of communicating with\n * the Rollbar API. It is a standard interface with some parts implemented\n * differently for server or browser contexts. It is an object that should\n * be instantiated when used so it can contain non-global options that may\n * be different for another instance of RollbarApi.\n *\n * @param options {\n * accessToken: the accessToken to use for posting items to rollbar\n * endpoint: an alternative endpoint to send errors to\n * must be a valid, fully qualified URL.\n * The default is: https://api.rollbar.com/api/1/item\n * proxy: if you wish to proxy requests provide an object\n * with the following keys:\n * host or hostname (required): foo.example.com\n * port (optional): 123\n * protocol (optional): https\n * }\n */\nfunction Api(options, t, u, j) {\n this.options = options;\n this.transport = t;\n this.url = u;\n this.jsonBackup = j;\n this.accessToken = options.accessToken;\n this.transportOptions = _getTransport(options, u);\n}\n\n/**\n *\n * @param data\n * @param callback\n */\nApi.prototype.postItem = function(data, callback) {\n var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n this.transport.post(this.accessToken, transportOptions, payload, callback);\n};\n\nApi.prototype.configure = function(options) {\n var oldOptions = this.oldOptions;\n this.options = _.extend(true, {}, oldOptions, options);\n this.transportOptions = _getTransport(this.options, this.url);\n if (this.options.accessToken !== undefined) {\n this.accessToken = this.options.accessToken;\n }\n return this;\n};\n\nfunction _getTransport(options, url) {\n return helpers.getTransportFromOptions(options, defaultOptions, url);\n}\n\nmodule.exports = Api;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/api.js\n// module id = 11\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction buildPayload(accessToken, data, jsonBackup) {\n if (!_.isType(data.context, 'string')) {\n var contextResult = _.stringify(data.context, jsonBackup);\n if (contextResult.error) {\n data.context = 'Error: could not serialize \\'context\\'';\n } else {\n data.context = contextResult.value || '';\n }\n if (data.context.length > 255) {\n data.context = data.context.substr(0, 255);\n }\n }\n return {\n access_token: accessToken,\n data: data\n };\n}\n\nfunction getTransportFromOptions(options, defaults, url) {\n var hostname = defaults.hostname;\n var protocol = defaults.protocol;\n var port = defaults.port;\n var path = defaults.path;\n var search = defaults.search;\n\n var proxy = options.proxy;\n if (options.endpoint) {\n var opts = url.parse(options.endpoint);\n hostname = opts.hostname;\n protocol = opts.protocol;\n port = opts.port;\n path = opts.pathname;\n search = opts.search;\n }\n return {\n hostname: hostname,\n protocol: protocol,\n port: port,\n path: path,\n search: search,\n proxy: proxy\n };\n}\n\nfunction transportOptions(transport, method) {\n var protocol = transport.protocol || 'https:';\n var port = transport.port || (protocol === 'http:' ? 80 : protocol === 'https:' ? 443 : undefined);\n var hostname = transport.hostname;\n var path = transport.path;\n if (transport.search) {\n path = path + transport.search;\n }\n if (transport.proxy) {\n path = protocol + '//' + hostname + path;\n hostname = transport.proxy.host || transport.proxy.hostname;\n port = transport.proxy.port;\n protocol = transport.proxy.protocol || protocol;\n }\n return {\n protocol: protocol,\n hostname: hostname,\n path: path,\n port: port,\n method: method\n };\n}\n\nfunction appendPathToPath(base, path) {\n var baseTrailingSlash = /\\/$/.test(base);\n var pathBeginningSlash = /^\\//.test(path);\n\n if (baseTrailingSlash && pathBeginningSlash) {\n path = path.substring(1);\n } else if (!baseTrailingSlash && !pathBeginningSlash) {\n path = '/' + path;\n }\n\n return base + path;\n}\n\nmodule.exports = {\n buildPayload: buildPayload,\n getTransportFromOptions: getTransportFromOptions,\n transportOptions: transportOptions,\n appendPathToPath: appendPathToPath\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/apiUtility.js\n// module id = 12\n// module chunks = 0","'use strict';\n\n/* eslint-disable no-console */\nrequire('console-polyfill');\nvar detection = require('./detection');\nvar _ = require('../utility');\n\nfunction error() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.error(_.formatArgsAsString(args));\n } else {\n console.error.apply(console, args);\n }\n}\n\nfunction info() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.info(_.formatArgsAsString(args));\n } else {\n console.info.apply(console, args);\n }\n}\n\nfunction log() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.log(_.formatArgsAsString(args));\n } else {\n console.log.apply(console, args);\n }\n}\n\n/* eslint-enable no-console */\n\nmodule.exports = {\n error: error,\n info: info,\n log: log\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/logger.js\n// module id = 13\n// module chunks = 0","// Console-polyfill. MIT license.\n// https://github.com/paulmillr/console-polyfill\n// Make it safe to do console.log() always.\n(function(global) {\n 'use strict';\n if (!global.console) {\n global.console = {};\n }\n var con = global.console;\n var prop, method;\n var dummy = function() {};\n var properties = ['memory'];\n var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' +\n 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' +\n 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',');\n while (prop = properties.pop()) if (!con[prop]) con[prop] = {};\n while (method = methods.pop()) if (!con[method]) con[method] = dummy;\n // Using `this` for web workers & supports Browserify / Webpack.\n})(typeof window === 'undefined' ? this : window);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/console-polyfill/index.js\n// module id = 14\n// module chunks = 0","'use strict';\n\n// This detection.js module is used to encapsulate any ugly browser/feature\n// detection we may need to do.\n\n// Figure out which version of IE we're using, if any.\n// This is gleaned from http://stackoverflow.com/questions/5574842/best-way-to-check-for-ie-less-than-9-in-javascript-without-library\n// Will return an integer on IE (i.e. 8)\n// Will return undefined otherwise\nfunction getIEVersion() {\n\tvar undef;\n\tif (!document) {\n\t\treturn undef;\n\t}\n\n var v = 3,\n div = document.createElement('div'),\n all = div.getElementsByTagName('i');\n\n while (\n div.innerHTML = '',\n all[0]\n );\n\n return v > 4 ? v : undef;\n}\n\nvar Detection = {\n ieVersion: getIEVersion\n};\n\nmodule.exports = Detection;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/detection.js\n// module id = 15\n// module chunks = 0","'use strict';\n\nfunction captureUncaughtExceptions(window, handler, shim) {\n if (!window) { return; }\n var oldOnError;\n\n if (typeof handler._rollbarOldOnError === 'function') {\n oldOnError = handler._rollbarOldOnError;\n } else if (window.onerror && !window.onerror.belongsToShim) {\n oldOnError = window.onerror;\n handler._rollbarOldOnError = oldOnError;\n }\n\n var fn = function() {\n var args = Array.prototype.slice.call(arguments, 0);\n _rollbarWindowOnError(window, handler, oldOnError, args);\n };\n fn.belongsToShim = shim;\n window.onerror = fn;\n}\n\nfunction _rollbarWindowOnError(window, r, old, args) {\n if (window._rollbarWrappedError) {\n if (!args[4]) {\n args[4] = window._rollbarWrappedError;\n }\n if (!args[5]) {\n args[5] = window._rollbarWrappedError._rollbarContext;\n }\n window._rollbarWrappedError = null;\n }\n\n r.handleUncaughtException.apply(r, args);\n if (old) {\n old.apply(window, args);\n }\n}\n\nfunction captureUnhandledRejections(window, handler, shim) {\n if (!window) { return; }\n\n if (typeof window._rollbarURH === 'function' && window._rollbarURH.belongsToShim) {\n window.removeEventListener('unhandledrejection', window._rollbarURH);\n }\n\n var rejectionHandler = function (evt) {\n var reason, promise, detail;\n try {\n reason = evt.reason;\n } catch (e) {\n reason = undefined;\n }\n try {\n promise = evt.promise;\n } catch (e) {\n promise = '[unhandledrejection] error getting `promise` from event';\n }\n try {\n detail = evt.detail;\n if (!reason && detail) {\n reason = detail.reason;\n promise = detail.promise;\n }\n } catch (e) {\n detail = '[unhandledrejection] error getting `detail` from event';\n }\n if (!reason) {\n reason = '[unhandledrejection] error getting `reason` from event';\n }\n\n if (handler && handler.handleUnhandledRejection) {\n handler.handleUnhandledRejection(reason, promise);\n }\n };\n rejectionHandler.belongsToShim = shim;\n window._rollbarURH = rejectionHandler;\n window.addEventListener('unhandledrejection', rejectionHandler);\n}\n\nfunction wrapGlobals(window, handler, shim) {\n if (!window) { return; }\n // Adapted from https://github.com/bugsnag/bugsnag-js\n var globals = 'EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload'.split(',');\n var i, global;\n for (i = 0; i < globals.length; ++i) {\n global = globals[i];\n\n if (window[global] && window[global].prototype) {\n _extendListenerPrototype(handler, window[global].prototype, shim);\n }\n }\n}\n\nfunction _extendListenerPrototype(handler, prototype, shim) {\n if (prototype.hasOwnProperty && prototype.hasOwnProperty('addEventListener')) {\n var oldAddEventListener = prototype.addEventListener;\n while (oldAddEventListener._rollbarOldAdd && oldAddEventListener.belongsToShim) {\n oldAddEventListener = oldAddEventListener._rollbarOldAdd;\n }\n var addFn = function(event, callback, bubble) {\n oldAddEventListener.call(this, event, handler.wrap(callback), bubble);\n };\n addFn._rollbarOldAdd = oldAddEventListener;\n addFn.belongsToShim = shim;\n prototype.addEventListener = addFn;\n\n var oldRemoveEventListener = prototype.removeEventListener;\n while (oldRemoveEventListener._rollbarOldRemove && oldRemoveEventListener.belongsToShim) {\n oldRemoveEventListener = oldRemoveEventListener._rollbarOldRemove;\n }\n var removeFn = function(event, callback, bubble) {\n oldRemoveEventListener.call(this, event, callback && callback._rollbar_wrapped || callback, bubble);\n };\n removeFn._rollbarOldRemove = oldRemoveEventListener;\n removeFn.belongsToShim = shim;\n prototype.removeEventListener = removeFn;\n }\n}\n\nmodule.exports = {\n captureUncaughtExceptions: captureUncaughtExceptions,\n captureUnhandledRejections: captureUnhandledRejections,\n wrapGlobals: wrapGlobals\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/globalSetup.js\n// module id = 16\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar logger = require('./logger');\n\n/*\n * accessToken may be embedded in payload but that should not\n * be assumed\n *\n * options: {\n * hostname\n * protocol\n * path\n * port\n * method\n * }\n *\n * params is an object containing key/value pairs. These\n * will be appended to the path as 'key=value&key=value'\n *\n * payload is an unserialized object\n */\n\nfunction get(accessToken, options, params, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n _.addParamsAndAccessTokenToPath(accessToken, options, params);\n\n var method = 'GET';\n var url = _.formatUrl(options);\n _makeRequest(accessToken, url, method, null, callback, requestFactory);\n}\n\nfunction post(accessToken, options, payload, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!payload) {\n return callback(new Error('Cannot send empty request'));\n }\n\n var stringifyResult = _.stringify(payload);\n if (stringifyResult.error) {\n return callback(stringifyResult.error);\n }\n\n var writeData = stringifyResult.value;\n var method = 'POST';\n var url = _.formatUrl(options);\n _makeRequest(accessToken, url, method, writeData, callback, requestFactory);\n}\n\nfunction _makeRequest(accessToken, url, method, data, callback, requestFactory) {\n var request;\n if (requestFactory) {\n request = requestFactory();\n } else {\n request = _createXMLHTTPObject();\n }\n if (!request) {\n // Give up, no way to send requests\n return callback(new Error('No way to send a request'));\n }\n try {\n try {\n var onreadystatechange = function() {\n try {\n if (onreadystatechange && request.readyState === 4) {\n onreadystatechange = undefined;\n\n var parseResponse = _.jsonParse(request.responseText);\n if (_isSuccess(request)) {\n callback(parseResponse.error, parseResponse.value);\n return;\n } else if (_isNormalFailure(request)) {\n if (request.status === 403) {\n // likely caused by using a server access token\n var message = parseResponse.value && parseResponse.value.message;\n logger.error(message);\n }\n // return valid http status codes\n callback(new Error(String(request.status)));\n } else {\n // IE will return a status 12000+ on some sort of connection failure,\n // so we return a blank error\n // http://msdn.microsoft.com/en-us/library/aa383770%28VS.85%29.aspx\n var msg = 'XHR response had no status code (likely connection failure)';\n callback(_newRetriableError(msg));\n }\n }\n } catch (ex) {\n //jquery source mentions firefox may error out while accessing the\n //request members if there is a network error\n //https://github.com/jquery/jquery/blob/a938d7b1282fc0e5c52502c225ae8f0cef219f0a/src/ajax/xhr.js#L111\n var exc;\n if (ex && ex.stack) {\n exc = ex;\n } else {\n exc = new Error(ex);\n }\n callback(exc);\n }\n };\n\n request.open(method, url, true);\n if (request.setRequestHeader) {\n request.setRequestHeader('Content-Type', 'application/json');\n request.setRequestHeader('X-Rollbar-Access-Token', accessToken);\n }\n request.onreadystatechange = onreadystatechange;\n request.send(data);\n } catch (e1) {\n // Sending using the normal xmlhttprequest object didn't work, try XDomainRequest\n if (typeof XDomainRequest !== 'undefined') {\n\n // Assume we are in a really old browser which has a bunch of limitations:\n // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\n // Extreme paranoia: if we have XDomainRequest then we have a window, but just in case\n if (!window || !window.location) {\n return callback(new Error('No window available during request, unknown environment'));\n }\n\n // If the current page is http, try and send over http\n if (window.location.href.substring(0, 5) === 'http:' && url.substring(0, 5) === 'https') {\n url = 'http' + url.substring(5);\n }\n\n var xdomainrequest = new XDomainRequest();\n xdomainrequest.onprogress = function() {};\n xdomainrequest.ontimeout = function() {\n var msg = 'Request timed out';\n var code = 'ETIMEDOUT';\n callback(_newRetriableError(msg, code));\n };\n xdomainrequest.onerror = function() {\n callback(new Error('Error during request'));\n };\n xdomainrequest.onload = function() {\n var parseResponse = _.jsonParse(xdomainrequest.responseText);\n callback(parseResponse.error, parseResponse.value);\n };\n xdomainrequest.open(method, url, true);\n xdomainrequest.send(data);\n } else {\n callback(new Error('Cannot find a method to transport a request'));\n }\n }\n } catch (e2) {\n callback(e2);\n }\n}\n\nfunction _createXMLHTTPObject() {\n /* global ActiveXObject:false */\n\n var factories = [\n function () {\n return new XMLHttpRequest();\n },\n function () {\n return new ActiveXObject('Msxml2.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Msxml3.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Microsoft.XMLHTTP');\n }\n ];\n var xmlhttp;\n var i;\n var numFactories = factories.length;\n for (i = 0; i < numFactories; i++) {\n /* eslint-disable no-empty */\n try {\n xmlhttp = factories[i]();\n break;\n } catch (e) {\n // pass\n }\n /* eslint-enable no-empty */\n }\n return xmlhttp;\n}\n\nfunction _isSuccess(r) {\n return r && r.status && r.status === 200;\n}\n\nfunction _isNormalFailure(r) {\n return r && _.isType(r.status, 'number') && r.status >= 400 && r.status < 600;\n}\n\nfunction _newRetriableError(message, code) {\n var err = new Error(message);\n err.code = code || 'ENOTFOUND';\n return err;\n}\n\nmodule.exports = {\n get: get,\n post: post\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transport.js\n// module id = 17\n// module chunks = 0","'use strict';\n\n// See https://nodejs.org/docs/latest/api/url.html\nfunction parse(url) {\n var result = {\n protocol: null, auth: null, host: null, path: null,\n hash: null, href: url, hostname: null, port: null,\n pathname: null, search: null, query: null\n };\n\n var i, last;\n i = url.indexOf('//');\n if (i !== -1) {\n result.protocol = url.substring(0,i);\n last = i+2;\n } else {\n last = 0;\n }\n \n i = url.indexOf('@', last);\n if (i !== -1) {\n result.auth = url.substring(last, i);\n last = i+1;\n }\n\n i = url.indexOf('/', last);\n if (i === -1) {\n i = url.indexOf('?', last);\n if (i === -1) {\n i = url.indexOf('#', last);\n if (i === -1) {\n result.host = url.substring(last);\n } else {\n result.host = url.substring(last, i);\n result.hash = url.substring(i);\n }\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n return result;\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n\n i = url.indexOf('#', last);\n if (i === -1) {\n result.path = url.substring(last);\n } else {\n result.path = url.substring(last, i);\n result.hash = url.substring(i);\n }\n\n if (result.path) {\n var pathParts = result.path.split('?');\n result.pathname = pathParts[0];\n result.query = pathParts[1];\n result.search = result.query ? '?' + result.query : null;\n }\n return result;\n}\n\nmodule.exports = {\n parse: parse\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/url.js\n// module id = 18\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar errorParser = require('./errorParser');\nvar logger = require('./logger');\n\nfunction handleItemWithError(item, options, callback) {\n item.data = item.data || {};\n if (item.err) {\n try {\n item.stackInfo = item.err._savedStackTrace || errorParser.parse(item.err);\n } catch (e)\n /* istanbul ignore next */\n {\n logger.error('Error while parsing the error object.', e);\n item.message = item.err.message || item.err.description || item.message || String(item.err);\n delete item.err;\n }\n }\n callback(null, item);\n}\n\nfunction ensureItemHasSomethingToSay(item, options, callback) {\n if (!item.message && !item.stackInfo && !item.custom) {\n callback(new Error('No message, stack info, or custom data'), null);\n }\n callback(null, item);\n}\n\nfunction addBaseInfo(item, options, callback) {\n var environment = (options.payload && options.payload.environment) || options.environment;\n item.data = _.extend(true, {}, item.data, {\n environment: environment,\n level: item.level,\n endpoint: options.endpoint,\n platform: 'browser',\n framework: 'browser-js',\n language: 'javascript',\n server: {},\n uuid: item.uuid,\n notifier: {\n name: 'rollbar-browser-js',\n version: options.version\n }\n });\n callback(null, item);\n}\n\nfunction addRequestInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.location) {\n return callback(null, item);\n }\n var remoteString = '$remote_ip';\n if (!options.captureIp) {\n remoteString = null;\n } else if (options.captureIp !== true) {\n remoteString += '_anonymize';\n }\n _.set(item, 'data.request', {\n url: window.location.href,\n query_string: window.location.search,\n user_ip: remoteString\n });\n callback(null, item);\n };\n}\n\nfunction addClientInfo(window) {\n return function(item, options, callback) {\n if (!window) {\n return callback(null, item);\n }\n var nav = window.navigator || {};\n var scr = window.screen || {};\n _.set(item, 'data.client', {\n runtime_ms: item.timestamp - window._rollbarStartTime,\n timestamp: Math.round(item.timestamp / 1000),\n javascript: {\n browser: nav.userAgent,\n language: nav.language,\n cookie_enabled: nav.cookieEnabled,\n screen: {\n width: scr.width,\n height: scr.height\n }\n }\n });\n callback(null, item);\n };\n}\n\nfunction addPluginInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.navigator) {\n return callback(null, item);\n }\n var plugins = [];\n var navPlugins = window.navigator.plugins || [];\n var cur;\n for (var i=0, l=navPlugins.length; i < l; ++i) {\n cur = navPlugins[i];\n plugins.push({name: cur.name, description: cur.description});\n }\n _.set(item, 'data.client.javascript.plugins', plugins);\n callback(null, item);\n };\n}\n\nfunction addBody(item, options, callback) {\n if (item.stackInfo) {\n addBodyTrace(item, options, callback);\n } else {\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction addBodyMessage(item, options, callback) {\n var message = item.message;\n var custom = item.custom;\n\n if (!message) {\n if (custom) {\n var scrubFields = options.scrubFields;\n var messageResult = _.stringify(_.scrub(custom, scrubFields));\n message = messageResult.error || messageResult.value || '';\n } else {\n message = '';\n }\n }\n var result = {\n body: message\n };\n\n if (custom) {\n result.extra = _.extend(true, {}, custom);\n }\n\n _.set(item, 'data.body', {message: result});\n callback(null, item);\n}\n\n\nfunction addBodyTrace(item, options, callback) {\n var description = item.data.description;\n var stackInfo = item.stackInfo;\n var custom = item.custom;\n\n var guess = errorParser.guessErrorClass(stackInfo.message);\n var className = stackInfo.name || guess[0];\n var message = guess[1];\n var trace = {\n exception: {\n 'class': className,\n message: message\n }\n };\n\n if (description) {\n trace.exception.description = description;\n }\n\n // Transform a TraceKit stackInfo object into a Rollbar trace\n var stack = stackInfo.stack;\n if (stack && stack.length === 0 && item._unhandledStackInfo && item._unhandledStackInfo.stack) {\n stack = item._unhandledStackInfo.stack;\n }\n if (stack) {\n if (stack.length === 0) {\n trace.exception.stack = stackInfo.rawStack;\n trace.exception.raw = String(stackInfo.rawException);\n }\n var stackFrame;\n var frame;\n var code;\n var pre;\n var post;\n var contextLength;\n var i, mid;\n\n trace.frames = [];\n for (i = 0; i < stack.length; ++i) {\n stackFrame = stack[i];\n frame = {\n filename: stackFrame.url ? _.sanitizeUrl(stackFrame.url) : '(unknown)',\n lineno: stackFrame.line || null,\n method: (!stackFrame.func || stackFrame.func === '?') ? '[anonymous]' : stackFrame.func,\n colno: stackFrame.column\n };\n if (frame.method && frame.method.endsWith && frame.method.endsWith('_rollbar_wrapped')) {\n continue;\n }\n\n code = pre = post = null;\n contextLength = stackFrame.context ? stackFrame.context.length : 0;\n if (contextLength) {\n mid = Math.floor(contextLength / 2);\n pre = stackFrame.context.slice(0, mid);\n code = stackFrame.context[mid];\n post = stackFrame.context.slice(mid);\n }\n\n if (code) {\n frame.code = code;\n }\n\n if (pre || post) {\n frame.context = {};\n if (pre && pre.length) {\n frame.context.pre = pre;\n }\n if (post && post.length) {\n frame.context.post = post;\n }\n }\n\n if (stackFrame.args) {\n frame.args = stackFrame.args;\n }\n\n trace.frames.push(frame);\n }\n\n // NOTE(cory): reverse the frames since rollbar.com expects the most recent call last\n trace.frames.reverse();\n\n if (custom) {\n trace.extra = _.extend(true, {}, custom);\n }\n _.set(item, 'data.body', {trace: trace});\n callback(null, item);\n } else {\n item.message = className + ': ' + message;\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction scrubPayload(item, options, callback) {\n var scrubFields = options.scrubFields;\n item.data = _.scrub(item.data, scrubFields);\n callback(null, item);\n}\n\nmodule.exports = {\n handleItemWithError: handleItemWithError,\n ensureItemHasSomethingToSay: ensureItemHasSomethingToSay,\n addBaseInfo: addBaseInfo,\n addRequestInfo: addRequestInfo,\n addClientInfo: addClientInfo,\n addPluginInfo: addPluginInfo,\n addBody: addBody,\n scrubPayload: scrubPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transforms.js\n// module id = 19\n// module chunks = 0","'use strict';\n\nvar ErrorStackParser = require('error-stack-parser');\n\nvar UNKNOWN_FUNCTION = '?';\nvar ERR_CLASS_REGEXP = new RegExp('^(([a-zA-Z0-9-_$ ]*): *)?(Uncaught )?([a-zA-Z0-9-_$ ]*): ');\n\nfunction guessFunctionName() {\n return UNKNOWN_FUNCTION;\n}\n\n\nfunction gatherContext() {\n return null;\n}\n\n\nfunction Frame(stackFrame) {\n var data = {};\n\n data._stackFrame = stackFrame;\n\n data.url = stackFrame.fileName;\n data.line = stackFrame.lineNumber;\n data.func = stackFrame.functionName;\n data.column = stackFrame.columnNumber;\n data.args = stackFrame.args;\n\n data.context = gatherContext(data.url, data.line);\n\n return data;\n}\n\n\nfunction Stack(exception) {\n function getStack() {\n var parserStack = [];\n var exc;\n\n if (!exception.stack) {\n try {\n throw exception;\n } catch (e) {\n exc = e;\n }\n } else {\n exc = exception;\n }\n\n try {\n parserStack = ErrorStackParser.parse(exc);\n } catch(e) {\n parserStack = [];\n }\n\n var stack = [];\n\n for (var i = 0; i < parserStack.length; i++) {\n stack.push(new Frame(parserStack[i]));\n }\n\n return stack;\n }\n\n return {\n stack: getStack(),\n message: exception.message,\n name: exception.name,\n rawStack: exception.stack,\n rawException: exception\n };\n}\n\n\nfunction parse(e) {\n return new Stack(e);\n}\n\n\nfunction guessErrorClass(errMsg) {\n if (!errMsg || !errMsg.match) {\n return ['Unknown error. There was no error message to display.', ''];\n }\n var errClassMatch = errMsg.match(ERR_CLASS_REGEXP);\n var errClass = '(unknown)';\n\n if (errClassMatch) {\n errClass = errClassMatch[errClassMatch.length - 1];\n errMsg = errMsg.replace((errClassMatch[errClassMatch.length - 2] || '') + errClass + ':', '');\n errMsg = errMsg.replace(/(^[\\s]+|[\\s]+$)/g, '');\n }\n return [errClass, errMsg];\n}\n\n\nmodule.exports = {\n guessFunctionName: guessFunctionName,\n guessErrorClass: guessErrorClass,\n gatherContext: gatherContext,\n parse: parse,\n Stack: Stack,\n Frame: Frame\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/errorParser.js\n// module id = 20\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = locationParts[0] === 'eval' ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/error-stack-parser.js\n// module id = 21\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stackframe', [], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.StackFrame = factory();\n }\n}(this, function () {\n 'use strict';\n function _isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n function StackFrame(functionName, args, fileName, lineNumber, columnNumber, source) {\n if (functionName !== undefined) {\n this.setFunctionName(functionName);\n }\n if (args !== undefined) {\n this.setArgs(args);\n }\n if (fileName !== undefined) {\n this.setFileName(fileName);\n }\n if (lineNumber !== undefined) {\n this.setLineNumber(lineNumber);\n }\n if (columnNumber !== undefined) {\n this.setColumnNumber(columnNumber);\n }\n if (source !== undefined) {\n this.setSource(source);\n }\n }\n\n StackFrame.prototype = {\n getFunctionName: function () {\n return this.functionName;\n },\n setFunctionName: function (v) {\n this.functionName = String(v);\n },\n\n getArgs: function () {\n return this.args;\n },\n setArgs: function (v) {\n if (Object.prototype.toString.call(v) !== '[object Array]') {\n throw new TypeError('Args must be an Array');\n }\n this.args = v;\n },\n\n // NOTE: Property name may be misleading as it includes the path,\n // but it somewhat mirrors V8's JavaScriptStackTraceApi\n // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's\n // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14\n getFileName: function () {\n return this.fileName;\n },\n setFileName: function (v) {\n this.fileName = String(v);\n },\n\n getLineNumber: function () {\n return this.lineNumber;\n },\n setLineNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Line Number must be a Number');\n }\n this.lineNumber = Number(v);\n },\n\n getColumnNumber: function () {\n return this.columnNumber;\n },\n setColumnNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Column Number must be a Number');\n }\n this.columnNumber = Number(v);\n },\n\n getSource: function () {\n return this.source;\n },\n setSource: function (v) {\n this.source = String(v);\n },\n\n toString: function() {\n var functionName = this.getFunctionName() || '{anonymous}';\n var args = '(' + (this.getArgs() || []).join(',') + ')';\n var fileName = this.getFileName() ? ('@' + this.getFileName()) : '';\n var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : '';\n var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : '';\n return functionName + args + fileName + lineNumber + columnNumber;\n }\n };\n\n return StackFrame;\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/~/stackframe/stackframe.js\n// module id = 22\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction itemToPayload(item, options, callback) {\n var payloadOptions = options.payload || {};\n if (payloadOptions.body) {\n delete payloadOptions.body;\n }\n\n var data = _.extend(true, {}, item.data, payloadOptions);\n if (item._isUncaught) {\n data._isUncaught = true;\n }\n if (item._originalArgs) {\n data._originalArgs = item._originalArgs;\n }\n callback(null, data);\n}\n\nfunction addTelemetryData(item, options, callback) {\n if (item.telemetryEvents) {\n _.set(item, 'data.body.telemetry', item.telemetryEvents);\n }\n callback(null, item);\n}\n\nfunction addMessageWithError(item, options, callback) {\n if (!item.message) {\n callback(null, item);\n return;\n }\n var tracePath = 'data.body.trace_chain.0';\n var trace = _.get(item, tracePath);\n if (!trace) {\n tracePath = 'data.body.trace';\n trace = _.get(item, tracePath);\n }\n if (trace) {\n if (!(trace.exception && trace.exception.description)) {\n _.set(item, tracePath+'.exception.description', item.message);\n callback(null, item);\n return;\n }\n var extra = _.get(item, tracePath+'.extra') || {};\n var newExtra = _.extend(true, {}, extra, {message: item.message});\n _.set(item, tracePath+'.extra', newExtra);\n }\n callback(null, item);\n}\n\nfunction userTransform(logger) {\n return function(item, options, callback) {\n var newItem = _.extend(true, {}, item);\n try {\n if (_.isFunction(options.transform)) {\n options.transform(newItem.data);\n }\n } catch (e) {\n options.transform = null;\n logger.error('Error while calling custom transform() function. Removing custom transform().', e);\n callback(null, item);\n return;\n }\n callback(null, newItem);\n }\n}\n\nfunction addConfigToPayload(item, options, callback) {\n if (!options.sendConfig) {\n return callback(null, item);\n }\n var configKey = '_rollbarConfig';\n var custom = _.get(item, 'data.custom') || {};\n custom[configKey] = options;\n item.data.custom = custom;\n callback(null, item);\n}\n\nmodule.exports = {\n itemToPayload: itemToPayload,\n addTelemetryData: addTelemetryData,\n addMessageWithError: addMessageWithError,\n userTransform: userTransform,\n addConfigToPayload: addConfigToPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/transforms.js\n// module id = 23\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\n\nfunction checkIgnore(item, settings) {\n if (_.get(settings, 'plugins.jquery.ignoreAjaxErrors')) {\n return !_.get(item, 'body.message.extra.isAjax');\n }\n return true;\n}\n\nmodule.exports = {\n checkIgnore: checkIgnore\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/predicates.js\n// module id = 24\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction checkLevel(item, settings) {\n var level = item.level;\n var levelVal = _.LEVELS[level] || 0;\n var reportLevel = settings.reportLevel;\n var reportLevelVal = _.LEVELS[reportLevel] || 0;\n\n if (levelVal < reportLevelVal) {\n return false;\n }\n return true;\n}\n\nfunction userCheckIgnore(logger) {\n return function(item, settings) {\n var isUncaught = !!item._isUncaught;\n delete item._isUncaught;\n var args = item._originalArgs;\n delete item._originalArgs;\n try {\n if (_.isFunction(settings.onSendCallback)) {\n settings.onSendCallback(isUncaught, args, item);\n }\n } catch (e) {\n settings.onSendCallback = null;\n logger.error('Error while calling onSendCallback, removing', e);\n }\n try {\n if (_.isFunction(settings.checkIgnore) && settings.checkIgnore(isUncaught, args, item)) {\n return false;\n }\n } catch (e) {\n settings.checkIgnore = null;\n logger.error('Error while calling custom checkIgnore(), removing', e);\n }\n return true;\n }\n}\n\nfunction urlIsNotBlacklisted(logger) {\n return function(item, settings) {\n return !urlIsOnAList(item, settings, 'blacklist', logger);\n }\n}\n\nfunction urlIsWhitelisted(logger) {\n return function(item, settings) {\n return urlIsOnAList(item, settings, 'whitelist', logger);\n }\n}\n\nfunction urlIsOnAList(item, settings, whiteOrBlack, logger) {\n // whitelist is the default\n var black = false;\n if (whiteOrBlack === 'blacklist') {\n black = true;\n }\n var list, trace, frame, filename, frameLength, url, listLength, urlRegex;\n var i, j;\n\n try {\n list = black ? settings.hostBlackList : settings.hostWhiteList;\n listLength = list && list.length;\n trace = _.get(item, 'body.trace');\n\n // These two checks are important to come first as they are defaults\n // in case the list is missing or the trace is missing or not well-formed\n if (!list || listLength === 0) {\n return !black;\n }\n if (!trace || !trace.frames || trace.frames.length === 0) {\n return !black;\n }\n\n frameLength = trace.frames.length;\n for (i = 0; i < frameLength; i++) {\n frame = trace.frames[i];\n filename = frame.filename;\n\n if (!_.isType(filename, 'string')) {\n return !black;\n }\n\n for (j = 0; j < listLength; j++) {\n url = list[j];\n urlRegex = new RegExp(url);\n\n if (urlRegex.test(filename)) {\n return true;\n }\n }\n }\n } catch (e)\n /* istanbul ignore next */\n {\n if (black) {\n settings.hostBlackList = null;\n } else {\n settings.hostWhiteList = null;\n }\n var listName = black ? 'hostBlackList' : 'hostWhiteList';\n logger.error('Error while reading your configuration\\'s ' + listName + ' option. Removing custom ' + listName + '.', e);\n return !black;\n }\n return false;\n}\n\nfunction messageIsIgnored(logger) {\n return function(item, settings) {\n var exceptionMessage, i, ignoredMessages,\n len, messageIsIgnored, rIgnoredMessage,\n body, traceMessage, bodyMessage;\n\n try {\n messageIsIgnored = false;\n ignoredMessages = settings.ignoredMessages;\n\n if (!ignoredMessages || ignoredMessages.length === 0) {\n return true;\n }\n\n body = item.body;\n traceMessage = _.get(body, 'trace.exception.message');\n bodyMessage = _.get(body, 'message.body');\n\n exceptionMessage = traceMessage || bodyMessage;\n\n if (!exceptionMessage){\n return true;\n }\n\n len = ignoredMessages.length;\n for (i = 0; i < len; i++) {\n rIgnoredMessage = new RegExp(ignoredMessages[i], 'gi');\n messageIsIgnored = rIgnoredMessage.test(exceptionMessage);\n\n if (messageIsIgnored) {\n break;\n }\n }\n } catch(e)\n /* istanbul ignore next */\n {\n settings.ignoredMessages = null;\n logger.error('Error while reading your configuration\\'s ignoredMessages option. Removing custom ignoredMessages.');\n }\n\n return !messageIsIgnored;\n }\n}\n\nmodule.exports = {\n checkLevel: checkLevel,\n userCheckIgnore: userCheckIgnore,\n urlIsNotBlacklisted: urlIsNotBlacklisted,\n urlIsWhitelisted: urlIsWhitelisted,\n messageIsIgnored: messageIsIgnored\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/predicates.js\n// module id = 25\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar urlparser = require('./url');\nvar domUtil = require('./domUtility');\n\nvar defaults = {\n network: true,\n networkResponseHeaders: false,\n networkResponseBody: false,\n networkRequestBody: false,\n log: true,\n dom: true,\n navigation: true,\n connectivity: true\n};\n\nfunction replace(obj, name, replacement, replacements, type) {\n var orig = obj[name];\n obj[name] = replacement(orig);\n if (replacements) {\n replacements[type].push([obj, name, orig]);\n }\n}\n\nfunction restore(replacements, type) {\n var b;\n while (replacements[type].length) {\n b = replacements[type].shift();\n b[0][b[1]] = b[2];\n }\n}\n\nfunction Instrumenter(options, telemeter, rollbar, _window, _document) {\n var autoInstrument = options.autoInstrument;\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.extend(true, {}, defaults, autoInstrument);\n }\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n this.telemetryScrubber = options.telemetryScrubber;\n this.telemeter = telemeter;\n this.rollbar = rollbar;\n this._window = _window || {};\n this._document = _document || {};\n this.replacements = {\n network: [],\n log: [],\n navigation: [],\n connectivity: []\n };\n this.eventRemovers = {\n dom: [],\n connectivity: []\n };\n\n this._location = this._window.location;\n this._lastHref = this._location && this._location.href;\n}\n\nInstrumenter.prototype.configure = function(options) {\n var autoInstrument = options.autoInstrument;\n var oldSettings = _.extend(true, {}, this.autoInstrument);\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.extend(true, {}, defaults, autoInstrument);\n }\n this.instrument(oldSettings);\n if (options.scrubTelemetryInputs !== undefined) {\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n }\n if (options.telemetryScrubber !== undefined) {\n this.telemetryScrubber = options.telemetryScrubber;\n }\n};\n\nInstrumenter.prototype.instrument = function(oldSettings) {\n if (this.autoInstrument.network && !(oldSettings && oldSettings.network)) {\n this.instrumentNetwork();\n } else if (!this.autoInstrument.network && oldSettings && oldSettings.network) {\n this.deinstrumentNetwork();\n }\n\n if (this.autoInstrument.log && !(oldSettings && oldSettings.log)) {\n this.instrumentConsole();\n } else if (!this.autoInstrument.log && oldSettings && oldSettings.log) {\n this.deinstrumentConsole();\n }\n\n if (this.autoInstrument.dom && !(oldSettings && oldSettings.dom)) {\n this.instrumentDom();\n } else if (!this.autoInstrument.dom && oldSettings && oldSettings.dom) {\n this.deinstrumentDom();\n }\n\n if (this.autoInstrument.navigation && !(oldSettings && oldSettings.navigation)) {\n this.instrumentNavigation();\n } else if (!this.autoInstrument.navigation && oldSettings && oldSettings.navigation) {\n this.deinstrumentNavigation();\n }\n\n if (this.autoInstrument.connectivity && !(oldSettings && oldSettings.connectivity)) {\n this.instrumentConnectivity();\n } else if (!this.autoInstrument.connectivity && oldSettings && oldSettings.connectivity) {\n this.deinstrumentConnectivity();\n }\n};\n\nInstrumenter.prototype.deinstrumentNetwork = function() {\n restore(this.replacements, 'network');\n};\n\nInstrumenter.prototype.instrumentNetwork = function() {\n var self = this;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && _.isFunction(xhr[prop])) {\n replace(xhr, prop, function(orig) {\n return self.rollbar.wrap(orig);\n });\n }\n }\n\n if ('XMLHttpRequest' in this._window) {\n var xhrp = this._window.XMLHttpRequest.prototype;\n replace(xhrp, 'open', function(orig) {\n return function(method, url) {\n if (_.isType(url, 'string')) {\n this.__rollbar_xhr = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'network');\n\n replace(xhrp, 'send', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(data) {\n /* eslint-enable no-unused-vars */\n var xhr = this;\n\n function onreadystatechangeHandler() {\n if (xhr.__rollbar_xhr && (xhr.readyState === 1 || xhr.readyState === 4)) {\n if (xhr.__rollbar_xhr.status_code === null) {\n xhr.__rollbar_xhr.status_code = 0;\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n requestData = data;\n }\n xhr.__rollbar_event = self.telemeter.captureNetwork(xhr.__rollbar_xhr, 'xhr', undefined, requestData);\n }\n if (xhr.readyState === 1) {\n xhr.__rollbar_xhr.start_time_ms = _.now();\n } else {\n xhr.__rollbar_xhr.end_time_ms = _.now();\n\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n var header, i;\n if (headersConfig === true) {\n var allHeaders = xhr.getAllResponseHeaders();\n if (allHeaders) {\n var arr = allHeaders.trim().split(/[\\r\\n]+/);\n var parts, value;\n for (i=0; i < arr.length; i++) {\n parts = arr[i].split(': ');\n header = parts.shift();\n value = parts.join(': ');\n headers[header] = value;\n }\n }\n } else {\n for (i=0; i < headersConfig.length; i++) {\n header = headersConfig[i];\n headers[header] = xhr.getResponseHeader(header);\n }\n }\n } catch (e) {\n /* we ignore the errors here that could come from different\n * browser issues with the xhr methods */\n }\n }\n var body = null;\n if (self.autoInstrument.networkResponseBody) {\n try {\n body = xhr.responseText;\n } catch (e) {\n /* ignore errors from reading responseText */\n }\n }\n var response = null;\n if (body || headers) {\n response = {};\n if (body) {\n response.body = body;\n }\n if (headers) {\n response.headers = headers;\n }\n }\n if (response) {\n xhr.__rollbar_xhr.response = response;\n }\n }\n try {\n var code = xhr.status;\n code = code === 1223 ? 204 : code;\n xhr.__rollbar_xhr.status_code = code;\n xhr.__rollbar_event.level = self.telemeter.levelFromStatus(code);\n } catch (e) {\n /* ignore possible exception from xhr.status */\n }\n }\n }\n\n wrapProp('onload', xhr);\n wrapProp('onerror', xhr);\n wrapProp('onprogress', xhr);\n\n if ('onreadystatechange' in xhr && _.isFunction(xhr.onreadystatechange)) {\n replace(xhr, 'onreadystatechange', function(orig) {\n return self.rollbar.wrap(orig, undefined, onreadystatechangeHandler);\n });\n } else {\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n return orig.apply(this, arguments);\n }\n }, this.replacements, 'network');\n }\n\n if ('fetch' in this._window) {\n replace(this._window, 'fetch', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(fn, t) {\n /* eslint-enable no-unused-vars */\n var args = new Array(arguments.length);\n for (var i=0, len=args.length; i < len; i++) {\n args[i] = arguments[i];\n }\n var input = args[0];\n var method = 'GET';\n var url;\n if (_.isType(input, 'string')) {\n url = input;\n } else if (input) {\n url = input.url;\n if (input.method) {\n method = input.method;\n }\n }\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n var metadata = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n if (args[1] && args[1].body) {\n requestData = args[1].body;\n } else if (args[0] && !_.isType(args[0], 'string') && args[0].body) {\n requestData = args[0].body;\n }\n }\n self.telemeter.captureNetwork(metadata, 'fetch', undefined, requestData);\n return orig.apply(this, args).then(function (resp) {\n metadata.end_time_ms = _.now();\n metadata.status_code = resp.status;\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n if (headersConfig === true) {\n // This is unsupported in IE so we can't do it\n /*\n var allHeaders = resp.headers.entries();\n for (var pair of allHeaders) {\n headers[pair[0]] = pair[1];\n }\n */\n } else {\n for (var i=0; i < headersConfig.length; i++) {\n var header = headersConfig[i];\n headers[header] = resp.headers.get(header);\n }\n }\n } catch (e) {\n /* ignore probable IE errors */\n }\n }\n var response = null;\n if (headers) {\n response = {\n headers: headers\n };\n }\n if (response) {\n metadata.response = response;\n }\n return resp;\n });\n };\n }, this.replacements, 'network');\n }\n};\n\nInstrumenter.prototype.deinstrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n var b;\n while (this.replacements['log'].length) {\n b = this.replacements['log'].shift();\n this._window.console[b[0]] = b[1];\n }\n};\n\nInstrumenter.prototype.instrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n\n var self = this;\n var c = this._window.console;\n\n function wrapConsole(method) {\n var orig = c[method];\n var origConsole = c;\n var level = method === 'warn' ? 'warning' : method;\n c[method] = function() {\n var args = Array.prototype.slice.call(arguments);\n var message = _.formatArgsAsString(args);\n self.telemeter.captureLog(message, level);\n if (orig) {\n Function.prototype.apply.call(orig, origConsole, args);\n }\n };\n self.replacements['log'].push([method, orig]);\n }\n var methods = ['debug','info','warn','error','log'];\n for (var i=0, len=methods.length; i < len; i++) {\n wrapConsole(methods[i]);\n }\n};\n\nInstrumenter.prototype.deinstrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n this.removeListeners('dom');\n};\n\nInstrumenter.prototype.instrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n var clickHandler = this.handleClick.bind(this);\n var blurHandler = this.handleBlur.bind(this);\n this.addListener('dom', this._window, 'click', 'onclick', clickHandler, true);\n this.addListener('dom', this._window, 'blur', 'onfocusout', blurHandler, true);\n};\n\nInstrumenter.prototype.handleClick = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n var hasTag = e && e.tagName;\n var anchorOrButton = domUtil.isDescribedElement(e, 'a') || domUtil.isDescribedElement(e, 'button');\n if (hasTag && (anchorOrButton || domUtil.isDescribedElement(e, 'input', ['button', 'submit']))) {\n this.captureDomEvent('click', e);\n } else if (domUtil.isDescribedElement(e, 'input', ['checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value, e.checked);\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleBlur = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n if (e && e.tagName) {\n if (domUtil.isDescribedElement(e, 'textarea')) {\n this.captureDomEvent('input', e, e.value);\n } else if (domUtil.isDescribedElement(e, 'select') && e.options && e.options.length) {\n this.handleSelectInputChanged(e);\n } else if (domUtil.isDescribedElement(e, 'input') && !domUtil.isDescribedElement(e, 'input', ['button', 'submit', 'hidden', 'checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value);\n }\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleSelectInputChanged = function(elem) {\n if (elem.multiple) {\n for (var i = 0; i < elem.options.length; i++) {\n if (elem.options[i].selected) {\n this.captureDomEvent('input', elem, elem.options[i].value);\n }\n }\n } else if (elem.selectedIndex >= 0 && elem.options[elem.selectedIndex]) {\n this.captureDomEvent('input', elem, elem.options[elem.selectedIndex].value);\n }\n};\n\nInstrumenter.prototype.captureDomEvent = function(subtype, element, value, isChecked) {\n if (value !== undefined) {\n if (this.scrubTelemetryInputs || (domUtil.getElementType(element) === 'password')) {\n value = '[scrubbed]';\n } else if (this.telemetryScrubber) {\n var description = domUtil.describeElement(element);\n if (this.telemetryScrubber(description)) {\n value = '[scrubbed]';\n }\n }\n }\n var elementString = domUtil.elementArrayToString(domUtil.treeToArray(element));\n this.telemeter.captureDom(subtype, elementString, value, isChecked);\n};\n\nInstrumenter.prototype.deinstrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n restore(this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.instrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n var self = this;\n replace(this._window, 'onpopstate', function(orig) {\n return function() {\n var current = self._location.href;\n self.handleUrlChange(self._lastHref, current);\n if (orig) {\n orig.apply(this, arguments);\n }\n };\n }, this.replacements, 'navigation');\n\n replace(this._window.history, 'pushState', function(orig) {\n return function() {\n var url = arguments.length > 2 ? arguments[2] : undefined;\n if (url) {\n self.handleUrlChange(self._lastHref, url + '');\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.handleUrlChange = function(from, to) {\n var parsedHref = urlparser.parse(this._location.href);\n var parsedTo = urlparser.parse(to);\n var parsedFrom = urlparser.parse(from);\n this._lastHref = to;\n if (parsedHref.protocol === parsedTo.protocol && parsedHref.host === parsedTo.host) {\n to = parsedTo.path + (parsedTo.hash || '');\n }\n if (parsedHref.protocol === parsedFrom.protocol && parsedHref.host === parsedFrom.host) {\n from = parsedFrom.path + (parsedFrom.hash || '');\n }\n this.telemeter.captureNavigation(from, to);\n};\n\nInstrumenter.prototype.deinstrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.removeListeners('connectivity');\n } else {\n restore(this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.instrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.addListener('connectivity', this._window, 'online', undefined, function() {\n this.telemeter.captureConnectivityChange('online');\n }.bind(this), true);\n this.addListener('connectivity', this._window, 'offline', undefined, function() {\n this.telemeter.captureConnectivityChange('offline');\n }.bind(this), true);\n } else {\n var self = this;\n replace(this._document.body, 'ononline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('online');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n replace(this._document.body, 'onoffline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('offline');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.addListener = function(section, obj, type, altType, handler, capture) {\n if (obj.addEventListener) {\n obj.addEventListener(type, handler, capture);\n this.eventRemovers[section].push(function() {\n obj.removeEventListener(type, handler, capture);\n });\n } else if (altType) {\n obj.attachEvent(altType, handler);\n this.eventRemovers[section].push(function() {\n obj.detachEvent(altType, handler);\n });\n }\n};\n\nInstrumenter.prototype.removeListeners = function(section) {\n var r;\n while (this.eventRemovers[section].length) {\n r = this.eventRemovers[section].shift();\n r();\n }\n};\n\nmodule.exports = Instrumenter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/telemetry.js\n// module id = 26\n// module chunks = 0","'use strict';\n\nfunction getElementType(e) {\n return (e.getAttribute('type') || '').toLowerCase();\n}\n\nfunction isDescribedElement(element, type, subtypes) {\n if (element.tagName.toLowerCase() !== type.toLowerCase()) {\n return false;\n }\n if (!subtypes) {\n return true;\n }\n element = getElementType(element);\n for (var i = 0; i < subtypes.length; i++) {\n if (subtypes[i] === element) {\n return true;\n }\n }\n return false;\n}\n\nfunction getElementFromEvent(evt, doc) {\n if (evt.target) {\n return evt.target;\n }\n if (doc && doc.elementFromPoint) {\n return doc.elementFromPoint(evt.clientX, evt.clientY);\n }\n return undefined;\n}\n\nfunction treeToArray(elem) {\n var MAX_HEIGHT = 5;\n var out = [];\n var nextDescription;\n for (var height = 0; elem && height < MAX_HEIGHT; height++) {\n nextDescription = describeElement(elem);\n if (nextDescription.tagName === 'html') {\n break;\n }\n out.unshift(nextDescription);\n elem = elem.parentNode;\n }\n return out;\n}\n\nfunction elementArrayToString(a) {\n var MAX_LENGTH = 80;\n var separator = ' > ', separatorLength = separator.length;\n var out = [], len = 0, nextStr, totalLength;\n\n for (var i = a.length - 1; i >= 0; i--) {\n nextStr = descriptionToString(a[i]);\n totalLength = len + (out.length * separatorLength) + nextStr.length;\n if (i < a.length - 1 && totalLength >= MAX_LENGTH + 3) {\n out.unshift('...');\n break;\n }\n out.unshift(nextStr);\n len += nextStr.length;\n }\n return out.join(separator);\n}\n\nfunction descriptionToString(desc) {\n if (!desc || !desc.tagName) {\n return '';\n }\n var out = [desc.tagName];\n if (desc.id) {\n out.push('#' + desc.id);\n }\n if (desc.classes) {\n out.push('.' + desc.classes.join('.'));\n }\n for (var i = 0; i < desc.attributes.length; i++) {\n out.push('[' + desc.attributes[i].key + '=\"' + desc.attributes[i].value + '\"]');\n }\n\n return out.join('');\n}\n\n/**\n * Input: a dom element\n * Output: null if tagName is falsey or input is falsey, else\n * {\n * tagName: String,\n * id: String | undefined,\n * classes: [String] | undefined,\n * attributes: [\n * {\n * key: OneOf(type, name, title, alt),\n * value: String\n * }\n * ]\n * }\n */\nfunction describeElement(elem) {\n if (!elem || !elem.tagName) {\n return null;\n }\n var out = {}, className, key, attr, i;\n out.tagName = elem.tagName.toLowerCase();\n if (elem.id) {\n out.id = elem.id;\n }\n className = elem.className;\n if (className && (typeof className === 'string')) {\n out.classes = className.split(/\\s+/);\n }\n var attributes = ['type', 'name', 'title', 'alt'];\n out.attributes = [];\n for (i = 0; i < attributes.length; i++) {\n key = attributes[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.attributes.push({key: key, value: attr});\n }\n }\n return out;\n}\n\nmodule.exports = {\n describeElement: describeElement,\n descriptionToString: descriptionToString,\n elementArrayToString: elementArrayToString,\n treeToArray: treeToArray,\n getElementFromEvent: getElementFromEvent,\n isDescribedElement: isDescribedElement,\n getElementType: getElementType\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/domUtility.js\n// module id = 27\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/rollbar.umd.min.js b/dist/rollbar.umd.min.js index a588cba4f..8ec871e56 100644 --- a/dist/rollbar.umd.min.js +++ b/dist/rollbar.umd.min.js @@ -1,3 +1,3 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.rollbar=e():t.rollbar=e()}(this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return t[r].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}var n={};return e.m=t,e.c=n,e.p="",e(0)}([function(t,e,n){t.exports=n(1)},function(t,e,n){"use strict";var r=n(2),o="undefined"!=typeof window&&window._rollbarConfig,i=o&&o.globalAlias||"Rollbar",a="undefined"!=typeof window&&window[i]&&"function"==typeof window[i].shimId&&void 0!==window[i].shimId();if("undefined"==typeof window||window._rollbarStartTime||(window._rollbarStartTime=(new Date).getTime()),!a&&o){var s=new r(o);window[i]=s}else"undefined"!=typeof window?(window.rollbar=r,window._rollbarDidLoad=!0):"undefined"!=typeof self&&(self.rollbar=r,self._rollbarDidLoad=!0);t.exports=r},function(t,e,n){"use strict";function r(t,e){this.options=c.extend(!0,x,t);var n=new l(this.options,h,d);this.client=e||new u(this.options,n,p,"browser");var r="undefined"!=typeof window&&window||"undefined"!=typeof self&&self,o="undefined"!=typeof document&&document;i(this.client.notifier),a(this.client.queue),(this.options.captureUncaught||this.options.handleUncaughtExceptions)&&(f.captureUncaughtExceptions(r,this),f.wrapGlobals(r,this)),(this.options.captureUnhandledRejections||this.options.handleUnhandledRejections)&&f.captureUnhandledRejections(r,this),this.instrumenter=new w(this.options,this.client.telemeter,this,r,o),this.instrumenter.instrument()}function o(t){var e="Rollbar is not initialized";p.error(e),t&&t(new Error(e))}function i(t){t.addTransform(m.handleItemWithError).addTransform(m.ensureItemHasSomethingToSay).addTransform(m.addBaseInfo).addTransform(m.addRequestInfo(window)).addTransform(m.addClientInfo(window)).addTransform(m.addPluginInfo(window)).addTransform(m.addBody).addTransform(g.addMessageWithError).addTransform(g.addTelemetryData).addTransform(g.addConfigToPayload).addTransform(m.scrubPayload).addTransform(g.userTransform(p)).addTransform(g.itemToPayload)}function a(t){t.addPredicate(y.checkLevel).addPredicate(v.checkIgnore).addPredicate(y.userCheckIgnore(p)).addPredicate(y.urlIsNotBlacklisted(p)).addPredicate(y.urlIsWhitelisted(p)).addPredicate(y.messageIsIgnored(p))}function s(t){for(var e=0,n=t.length;e=1&&n>e}function o(t,e,n,r,o,a,s){var u=null;return n&&(n=new Error(n)),n||r||(u=i(t,e,o,a,s)),{error:n,shouldSend:r,payload:u}}function i(t,e,n,r,o){var i,a=e.environment||e.payload&&e.payload.environment;i=o?"item per minute limit reached, ignoring errors until timeout":"maxItems has been hit, ignoring errors until reset.";var s={body:{message:{body:i,extra:{maxItems:n,itemsPerMinute:r}}},language:"javascript",environment:a,notifier:{version:e.notifier&&e.notifier.version||e.version}};return"browser"===t?(s.platform="browser",s.framework="browser-js",s.notifier.name="rollbar-browser-js"):"server"===t?(s.framework=e.framework||"node-js",s.notifier.name=e.notifier.name):"react-native"===t&&(s.framework=e.framework||"react-native",s.notifier.name=e.notifier.name),s}n.globalSettings={startTime:(new Date).getTime(),maxItems:void 0,itemsPerMinute:void 0},n.prototype.configureGlobal=function(t){void 0!==t.startTime&&(n.globalSettings.startTime=t.startTime),void 0!==t.maxItems&&(n.globalSettings.maxItems=t.maxItems),void 0!==t.itemsPerMinute&&(n.globalSettings.itemsPerMinute=t.itemsPerMinute)},n.prototype.shouldSend=function(t,e){e=e||(new Date).getTime(),e-this.startTime>=6e4&&(this.startTime=e,this.perMinCounter=0);var i=n.globalSettings.maxItems,a=n.globalSettings.itemsPerMinute;if(r(t,i,this.counter))return o(this.platform,this.platformOptions,i+" max items reached",!1);if(r(t,a,this.perMinCounter))return o(this.platform,this.platformOptions,a+" items per minute reached",!1);this.counter++,this.perMinCounter++;var s=!r(t,i,this.counter),u=s;return s=s&&!r(t,a,this.perMinCounter),o(this.platform,this.platformOptions,null,s,i,a,u)},n.prototype.setPlatformOptions=function(t,e){this.platform=t,this.platformOptions=e},t.exports=n},function(t,e,n){"use strict";function r(t,e,n,r){this.rateLimiter=t,this.api=e,this.logger=n,this.options=r,this.predicates=[],this.pendingItems=[],this.pendingRequests=[],this.retryQueue=[],this.retryHandle=null,this.waitCallback=null,this.waitIntervalID=null}var o=n(6);r.prototype.configure=function(t){this.api&&this.api.configure(t);var e=this.options;return this.options=o.extend(!0,{},e,t),this},r.prototype.addPredicate=function(t){return o.isFunction(t)&&this.predicates.push(t),this},r.prototype.addPendingItem=function(t){this.pendingItems.push(t)},r.prototype.removePendingItem=function(t){var e=this.pendingItems.indexOf(t);e!==-1&&this.pendingItems.splice(e,1)},r.prototype.addItem=function(t,e,n,r){e&&o.isFunction(e)||(e=function(){});var i=this._applyPredicates(t);if(i.stop)return this.removePendingItem(r),void e(i.err);this._maybeLog(t,n),this.removePendingItem(r),this.pendingRequests.push(t);try{this._makeApiRequest(t,function(n,r){this._dequeuePendingRequest(t),e(n,r)}.bind(this))}catch(n){this._dequeuePendingRequest(t),e(n)}},r.prototype.wait=function(t){o.isFunction(t)&&(this.waitCallback=t,this._maybeCallWait()||(this.waitIntervalID&&(this.waitIntervalID=clearInterval(this.waitIntervalID)),this.waitIntervalID=setInterval(function(){this._maybeCallWait()}.bind(this),500)))},r.prototype._applyPredicates=function(t){for(var e=null,n=0,r=this.predicates.length;ns)?(a=e.path,e.path=a.substring(0,s)+i+"&"+a.substring(s+1)):u!==-1?(a=e.path,e.path=a.substring(0,u)+i+a.substring(u)):e.path=e.path+i}function y(t,e){if(e=e||t.protocol,!e&&t.port&&(80===t.port?e="http:":443===t.port&&(e="https:")),e=e||"https:",!t.hostname)return null;var n=e+"//"+t.hostname;return t.port&&(n=n+":"+t.port),t.path&&(n+=t.path),n}function b(t,e){var n,r;try{n=j.stringify(t)}catch(o){if(e&&a(e))try{n=e(t)}catch(t){r=t}else r=o}return{error:r,value:n}}function w(t){var e,n;try{e=j.parse(t)}catch(t){n=t}return{error:n,value:e}}function _(t,e,n,r,o,i,a,s){var u={url:e||"",line:n,column:r};u.func=s.guessFunctionName(u.url,u.line),u.context=s.gatherContext(u.url,u.line);var c=document&&document.location&&document.location.href,l=window&&window.navigator&&window.navigator.userAgent;return{mode:i,message:o?String(o):t||a,url:c,stack:[u],useragent:l}}function x(t,e){return function(n,r){try{e(n,r)}catch(e){t.error(e)}}}function k(t,e,n,r,o){for(var a,s,u,c,l,p,f=[],h=0,m=t.length;h0&&(u=C(!0,{},u),u.extraArgs=f);var b={message:a,err:s,custom:u,timestamp:N(),callback:c,uuid:d()};return u&&void 0!==u.level&&(b.level=u.level,delete u.level),r&&l&&(b.request=l),o&&(b.lambdaContext=o),b._originalArgs=t,b}function E(t,e){if(t){var n=e.split("."),r=t;try{for(var o=0,i=n.length;o500&&(r=r.substr(0,500)+"...")):"undefined"==typeof r&&(r="undefined"),o.push(r);return o.join(" ")}function N(){return Date.now?+Date.now():+new Date}var C=n(7),j={},R=!1;r();var A={debug:0,info:1,warning:2,error:3,critical:4},q={strictMode:!1,key:["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],q:{name:"queryKey",parser:/(?:^|&)([^&=]*)=?([^&]*)/g},parser:{strict:/^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,loose:/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/}};t.exports={isType:o,typeName:i,isFunction:a,isNativeFunction:s,isIterable:l,isError:p,extend:C,traverse:f,redact:h,uuid4:d,LEVELS:A,sanitizeUrl:m,addParamsAndAccessTokenToPath:v,formatUrl:y,stringify:b,jsonParse:w,makeUnhandledStackInfo:_,createItem:k,get:E,set:I,scrub:T,formatArgsAsString:L,now:N}},function(t,e){"use strict";var n=Object.prototype.hasOwnProperty,r=Object.prototype.toString,o=function(t){return"function"==typeof Array.isArray?Array.isArray(t):"[object Array]"===r.call(t)},i=function(t){if(!t||"[object Object]"!==r.call(t))return!1;var e=n.call(t,"constructor"),o=t.constructor&&t.constructor.prototype&&n.call(t.constructor.prototype,"isPrototypeOf");if(t.constructor&&!e&&!o)return!1;var i;for(i in t);return"undefined"==typeof i||n.call(t,i)};t.exports=function t(){var e,n,r,a,s,u,c=arguments[0],l=1,p=arguments.length,f=!1;for("boolean"==typeof c?(f=c,c=arguments[1]||{},l=2):("object"!=typeof c&&"function"!=typeof c||null==c)&&(c={});lr&&(o=this.maxQueueSize-r),this.maxQueueSize=r,this.queue.splice(0,o)},r.prototype.copyEvents=function(){return Array.prototype.slice.call(this.queue,0)},r.prototype.capture=function(t,e,n,r,a){var s={level:o(t,n),type:t,timestamp_ms:a||i.now(),body:e,source:"client"};r&&(s.uuid=r);try{if(i.isFunction(this.options.filterTelemetry)&&this.options.filterTelemetry(s))return!1}catch(t){this.options.filterTelemetry=null}return this.push(s),s},r.prototype.captureEvent=function(t,e,n){return this.capture("manual",t,e,n)},r.prototype.captureError=function(t,e,n,r){var o={message:t.message||String(t)};return t.stack&&(o.stack=t.stack),this.capture("error",o,e,n,r)},r.prototype.captureLog=function(t,e,n,r){return this.capture("log",{message:t},e,n,r)},r.prototype.captureNetwork=function(t,e,n,r){e=e||"xhr",t.subtype=t.subtype||e,r&&(t.request=r);var o=this.levelFromStatus(t.status_code);return this.capture("network",t,o,n)},r.prototype.levelFromStatus=function(t){return t>=200&&t<400?"info":0===t||t>=400?"error":"info"},r.prototype.captureDom=function(t,e,n,r,o){var i={subtype:t,element:e};return void 0!==n&&(i.value=n),void 0!==r&&(i.checked=r),this.capture("dom",i,"info",o)},r.prototype.captureNavigation=function(t,e,n){return this.capture("navigation",{from:t,to:e},"info",n)},r.prototype.captureDomContentLoaded=function(t){return this.capture("navigation",{subtype:"DOMContentLoaded"},"info",void 0,t&&t.getTime())},r.prototype.captureLoad=function(t){return this.capture("navigation",{subtype:"load"},"info",void 0,t&&t.getTime())},r.prototype.captureConnectivityChange=function(t,e){return this.captureNetwork({change:t},"connectivity",e)},r.prototype._captureRollbarItem=function(t){if(this.options.includeItemsInTelemetry)return t.err?this.captureError(t.err,t.level,t.uuid,t.timestamp):t.message?this.captureLog(t.message,t.level,t.uuid,t.timestamp):t.custom?this.capture("log",t.custom,t.level,t.uuid,t.timestamp):void 0},r.prototype.push=function(t){this.queue.push(t),this.queue.length>this.maxQueueSize&&this.queue.shift()},t.exports=r},function(t,e,n){"use strict";function r(t,e,n,r){this.options=t,this.transport=e,this.url=n,this.jsonBackup=r,this.accessToken=t.accessToken,this.transportOptions=o(t,n)}function o(t,e){return a.getTransportFromOptions(t,s,e)}var i=n(6),a=n(12),s={hostname:"api.rollbar.com",path:"/api/1/item/",search:null,version:"1",protocol:"https:",port:443};r.prototype.postItem=function(t,e){var n=a.transportOptions(this.transportOptions,"POST"),r=a.buildPayload(this.accessToken,t,this.jsonBackup);this.transport.post(this.accessToken,n,r,e)},r.prototype.configure=function(t){var e=this.oldOptions;return this.options=i.extend(!0,{},e,t),this.transportOptions=o(this.options,this.url),void 0!==this.options.accessToken&&(this.accessToken=this.options.accessToken),this},t.exports=r},function(t,e,n){"use strict";function r(t,e,n){if(!s.isType(e.context,"string")){var r=s.stringify(e.context,n);r.error?e.context="Error: could not serialize 'context'":e.context=r.value||"",e.context.length>255&&(e.context=e.context.substr(0,255))}return{access_token:t,data:e}}function o(t,e,n){var r=e.hostname,o=e.protocol,i=e.port,a=e.path,s=e.search,u=t.proxy;if(t.endpoint){var c=n.parse(t.endpoint);r=c.hostname,o=c.protocol,i=c.port,a=c.pathname,s=c.search}return{hostname:r,protocol:o,port:i,path:a,search:s,proxy:u}}function i(t,e){var n=t.protocol||"https:",r=t.port||("http:"===n?80:"https:"===n?443:void 0),o=t.hostname,i=t.path;return t.search&&(i+=t.search),t.proxy&&(i=n+"//"+o+i,o=t.proxy.host||t.proxy.hostname,r=t.proxy.port,n=t.proxy.protocol||n),{protocol:n,hostname:o,path:i,port:r,method:e}}function a(t,e){var n=/\/$/.test(t),r=/^\//.test(e);return n&&r?e=e.substring(1):n||r||(e="/"+e),t+e}var s=n(6);t.exports={buildPayload:r,getTransportFromOptions:o,transportOptions:i,appendPathToPath:a}},function(t,e,n){"use strict";function r(){var t=Array.prototype.slice.call(arguments,0);t.unshift("Rollbar:"),a.ieVersion()<=8?console.error(s.formatArgsAsString(t)):console.error.apply(console,t)}function o(){var t=Array.prototype.slice.call(arguments,0);t.unshift("Rollbar:"),a.ieVersion()<=8?console.info(s.formatArgsAsString(t)):console.info.apply(console,t)}function i(){var t=Array.prototype.slice.call(arguments,0);t.unshift("Rollbar:"),a.ieVersion()<=8?console.log(s.formatArgsAsString(t)):console.log.apply(console,t)}n(14);var a=n(15),s=n(6);t.exports={error:r,info:o,log:i}},function(t,e){!function(t){"use strict";t.console||(t.console={});for(var e,n,r=t.console,o=function(){},i=["memory"],a="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(",");e=i.pop();)r[e]||(r[e]={});for(;n=a.pop();)r[n]||(r[n]=o)}("undefined"==typeof window?this:window)},function(t,e){"use strict";function n(){var t;if(!document)return t;for(var e=3,n=document.createElement("div"),r=n.getElementsByTagName("i");n.innerHTML="",r[0];);return e>4?e:t}var r={ieVersion:n};t.exports=r},function(t,e){"use strict";function n(t,e,n){if(t){var o;"function"==typeof e._rollbarOldOnError?o=e._rollbarOldOnError:t.onerror&&!t.onerror.belongsToShim&&(o=t.onerror, -e._rollbarOldOnError=o);var i=function(){var n=Array.prototype.slice.call(arguments,0);r(t,e,o,n)};i.belongsToShim=n,t.onerror=i}}function r(t,e,n,r){t._rollbarWrappedError&&(r[4]||(r[4]=t._rollbarWrappedError),r[5]||(r[5]=t._rollbarWrappedError._rollbarContext),t._rollbarWrappedError=null),e.handleUncaughtException.apply(e,r),n&&n.apply(t,r)}function o(t,e,n){if(t){"function"==typeof t._rollbarURH&&t._rollbarURH.belongsToShim&&t.removeEventListener("unhandledrejection",t._rollbarURH);var r=function(t){var n,r,o;try{n=t.reason}catch(t){n=void 0}try{r=t.promise}catch(t){r="[unhandledrejection] error getting `promise` from event"}try{o=t.detail,!n&&o&&(n=o.reason,r=o.promise)}catch(t){o="[unhandledrejection] error getting `detail` from event"}n||(n="[unhandledrejection] error getting `reason` from event"),e&&e.handleUnhandledRejection&&e.handleUnhandledRejection(n,r)};r.belongsToShim=n,t._rollbarURH=r,t.addEventListener("unhandledrejection",r)}}function i(t,e,n){if(t){var r,o,i="EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload".split(",");for(r=0;r=400&&t.status<600}function c(t,e){var n=new Error(t);return n.code=e||"ENOTFOUND",n}var l=n(6),p=n(13);t.exports={get:r,post:o}},function(t,e){"use strict";function n(t){var e,n,r={protocol:null,auth:null,host:null,path:null,hash:null,href:t,hostname:null,port:null,pathname:null,search:null,query:null};if(e=t.indexOf("//"),e!==-1?(r.protocol=t.substring(0,e),n=e+2):n=0,e=t.indexOf("@",n),e!==-1&&(r.auth=t.substring(n,e),n=e+1),e=t.indexOf("/",n),e===-1){if(e=t.indexOf("?",n),e===-1)return e=t.indexOf("#",n),e===-1?r.host=t.substring(n):(r.host=t.substring(n,e),r.hash=t.substring(e)),r.hostname=r.host.split(":")[0],r.port=r.host.split(":")[1],r.port&&(r.port=parseInt(r.port,10)),r;r.host=t.substring(n,e),r.hostname=r.host.split(":")[0],r.port=r.host.split(":")[1],r.port&&(r.port=parseInt(r.port,10)),n=e}else r.host=t.substring(n,e),r.hostname=r.host.split(":")[0],r.port=r.host.split(":")[1],r.port&&(r.port=parseInt(r.port,10)),n=e;if(e=t.indexOf("#",n),e===-1?r.path=t.substring(n):(r.path=t.substring(n,e),r.hash=t.substring(e)),r.path){var o=r.path.split("?");r.pathname=o[0],r.query=o[1],r.search=r.query?"?"+r.query:null}return r}t.exports={parse:n}},function(t,e,n){"use strict";function r(t,e,n){if(t.data=t.data||{},t.err)try{t.stackInfo=t.err._savedStackTrace||d.parse(t.err)}catch(e){m.error("Error while parsing the error object.",e),t.message=t.err.message||t.err.description||t.message||String(t.err),delete t.err}n(null,t)}function o(t,e,n){t.message||t.stackInfo||t.custom||n(new Error("No message, stack info, or custom data"),null),n(null,t)}function i(t,e,n){var r=e.payload&&e.payload.environment||e.environment;t.data=h.extend(!0,{},t.data,{environment:r,level:t.level,endpoint:e.endpoint,platform:"browser",framework:"browser-js",language:"javascript",server:{},uuid:t.uuid,notifier:{name:"rollbar-browser-js",version:e.version}}),n(null,t)}function a(t){return function(e,n,r){return t&&t.location?(h.set(e,"data.request",{url:t.location.href,query_string:t.location.search,user_ip:"$remote_ip"}),void r(null,e)):r(null,e)}}function s(t){return function(e,n,r){if(!t)return r(null,e);var o=t.navigator||{},i=t.screen||{};h.set(e,"data.client",{runtime_ms:e.timestamp-t._rollbarStartTime,timestamp:Math.round(e.timestamp/1e3),javascript:{browser:o.userAgent,language:o.language,cookie_enabled:o.cookieEnabled,screen:{width:i.width,height:i.height}}}),r(null,e)}}function u(t){return function(e,n,r){if(!t||!t.navigator)return r(null,e);for(var o,i=[],a=t.navigator.plugins||[],s=0,u=a.length;s-1&&(e=e.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var n=e.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),r=this.extractLocation(n.pop()),o=n.join(" ")||void 0,i="eval"===r[0]?void 0:r[0];return new t(o,void 0,i,r[1],r[2],e)},this)},parseFFOrSafari:function(r){var o=n(r.stack.split("\n"),function(t){return!t.match(i)},this);return e(o,function(e){if(e.indexOf(" > eval")>-1&&(e=e.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),e.indexOf("@")===-1&&e.indexOf(":")===-1)return new t(e);var n=e.split("@"),r=this.extractLocation(n.pop()),o=n.shift()||void 0;return new t(o,void 0,r[0],r[1],r[2],e)},this)},parseOpera:function(t){return!t.stacktrace||t.message.indexOf("\n")>-1&&t.message.split("\n").length>t.stacktrace.split("\n").length?this.parseOpera9(t):t.stack?this.parseOpera11(t):this.parseOpera10(t)},parseOpera9:function(e){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=e.message.split("\n"),o=[],i=2,a=r.length;i/,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(n=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new t(a,s,o[0],o[1],o[2],e)},this)}}})},function(t,e,n){var r,o,i;!function(n,a){"use strict";o=[],r=a,i="function"==typeof r?r.apply(e,o):r,!(void 0!==i&&(t.exports=i))}(this,function(){"use strict";function t(t){return!isNaN(parseFloat(t))&&isFinite(t)}function e(t,e,n,r,o,i){void 0!==t&&this.setFunctionName(t),void 0!==e&&this.setArgs(e),void 0!==n&&this.setFileName(n),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return e.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(t){this.functionName=String(t)},getArgs:function(){return this.args},setArgs:function(t){if("[object Array]"!==Object.prototype.toString.call(t))throw new TypeError("Args must be an Array");this.args=t},getFileName:function(){return this.fileName},setFileName:function(t){this.fileName=String(t)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(e){if(!t(e))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(e)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(e){if(!t(e))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(e)},getSource:function(){return this.source},setSource:function(t){this.source=String(t)},toString:function(){var e=this.getFunctionName()||"{anonymous}",n="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=t(this.getLineNumber())?":"+this.getLineNumber():"",i=t(this.getColumnNumber())?":"+this.getColumnNumber():"";return e+n+r+o+i}},e})},function(t,e,n){"use strict";function r(t,e,n){var r=e.payload||{};r.body&&delete r.body;var o=u.extend(!0,{},t.data,r);t._isUncaught&&(o._isUncaught=!0),t._originalArgs&&(o._originalArgs=t._originalArgs),n(null,o)}function o(t,e,n){t.telemetryEvents&&u.set(t,"data.body.telemetry",t.telemetryEvents),n(null,t)}function i(t,e,n){if(!t.message)return void n(null,t);var r="data.body.trace_chain.0",o=u.get(t,r);if(o||(r="data.body.trace",o=u.get(t,r)),o){if(!o.exception||!o.exception.description)return u.set(t,r+".exception.description",t.message),void n(null,t);var i=u.get(t,r+".extra")||{},a=u.extend(!0,{},i,{message:t.message});u.set(t,r+".extra",a)}n(null,t)}function a(t){return function(e,n,r){var o=u.extend(!0,{},e);try{u.isFunction(n.transform)&&n.transform(o.data)}catch(o){return n.transform=null,t.error("Error while calling custom transform() function. Removing custom transform().",o),void r(null,e)}r(null,o)}}function s(t,e,n){if(!e.sendConfig)return n(null,t);var r="_rollbarConfig",o=u.get(t,"data.custom")||{};o[r]=e,t.data.custom=o,n(null,t)}var u=n(6);t.exports={itemToPayload:r,addTelemetryData:o,addMessageWithError:i,userTransform:a,addConfigToPayload:s}},function(t,e,n){"use strict";function r(t,e){return!o.get(e,"plugins.jquery.ignoreAjaxErrors")||!o.get(t,"body.message.extra.isAjax")}var o=n(6);t.exports={checkIgnore:r}},function(t,e,n){"use strict";function r(t,e){var n=t.level,r=c.LEVELS[n]||0,o=e.reportLevel,i=c.LEVELS[o]||0;return!(r=0&&t.options[t.selectedIndex]&&this.captureDomEvent("input",t,t.options[t.selectedIndex].value)},i.prototype.captureDomEvent=function(t,e,n,r){if(void 0!==n)if(this.scrubTelemetryInputs||"password"===u.getElementType(e))n="[scrubbed]";else if(this.telemetryScrubber){var o=u.describeElement(e);this.telemetryScrubber(o)&&(n="[scrubbed]")}var i=u.elementArrayToString(u.treeToArray(e));this.telemeter.captureDom(t,i,n,r)},i.prototype.deinstrumentNavigation=function(){var t=this._window.chrome,e=t&&t.app&&t.app.runtime,n=!e&&this._window.history&&this._window.history.pushState;n&&o(this.replacements,"navigation")},i.prototype.instrumentNavigation=function(){var t=this._window.chrome,e=t&&t.app&&t.app.runtime,n=!e&&this._window.history&&this._window.history.pushState;if(n){var o=this;r(this._window,"onpopstate",function(t){return function(){var e=o._location.href;o.handleUrlChange(o._lastHref,e),t&&t.apply(this,arguments)}},this.replacements,"navigation"),r(this._window.history,"pushState",function(t){return function(){var e=arguments.length>2?arguments[2]:void 0;return e&&o.handleUrlChange(o._lastHref,e+""),t.apply(this,arguments)}},this.replacements,"navigation")}},i.prototype.handleUrlChange=function(t,e){var n=s.parse(this._location.href),r=s.parse(e),o=s.parse(t);this._lastHref=e,n.protocol===r.protocol&&n.host===r.host&&(e=r.path+(r.hash||"")),n.protocol===o.protocol&&n.host===o.host&&(t=o.path+(o.hash||"")),this.telemeter.captureNavigation(t,e)},i.prototype.deinstrumentConnectivity=function(){("addEventListener"in this._window||"body"in this._document)&&(this._window.addEventListener?this.removeListeners("connectivity"):o(this.replacements,"connectivity"))},i.prototype.instrumentConnectivity=function(){if("addEventListener"in this._window||"body"in this._document)if(this._window.addEventListener)this.addListener("connectivity",this._window,"online",void 0,function(){this.telemeter.captureConnectivityChange("online")}.bind(this),!0),this.addListener("connectivity",this._window,"offline",void 0,function(){this.telemeter.captureConnectivityChange("offline")}.bind(this),!0);else{var t=this;r(this._document.body,"ononline",function(e){return function(){t.telemeter.captureConnectivityChange("online"),e&&e.apply(this,arguments)}},this.replacements,"connectivity"),r(this._document.body,"onoffline",function(e){return function(){t.telemeter.captureConnectivityChange("offline"),e&&e.apply(this,arguments)}},this.replacements,"connectivity")}},i.prototype.addListener=function(t,e,n,r,o,i){e.addEventListener?(e.addEventListener(n,o,i),this.eventRemovers[t].push(function(){e.removeEventListener(n,o,i)})):r&&(e.attachEvent(r,o),this.eventRemovers[t].push(function(){e.detachEvent(r,o)}))},i.prototype.removeListeners=function(t){for(var e;this.eventRemovers[t].length;)(e=this.eventRemovers[t].shift())()},t.exports=i},function(t,e){"use strict";function n(t){return(t.getAttribute("type")||"").toLowerCase()}function r(t,e,r){if(t.tagName.toLowerCase()!==e.toLowerCase())return!1;if(!r)return!0;t=n(t);for(var o=0;o ",i=o.length,a=[],u=0,c=t.length-1;c>=0;c--){if(e=s(t[c]),n=u+a.length*i+e.length,c=r+3){a.unshift("...");break}a.unshift(e),u+=e.length}return a.join(o)}function s(t){if(!t||!t.tagName)return"";var e=[t.tagName];t.id&&e.push("#"+t.id),t.classes&&e.push("."+t.classes.join("."));for(var n=0;n=1&&n>e}function o(t,e,n,r,o,a,s){var u=null;return n&&(n=new Error(n)),n||r||(u=i(t,e,o,a,s)),{error:n,shouldSend:r,payload:u}}function i(t,e,n,r,o){var i,a=e.environment||e.payload&&e.payload.environment;i=o?"item per minute limit reached, ignoring errors until timeout":"maxItems has been hit, ignoring errors until reset.";var s={body:{message:{body:i,extra:{maxItems:n,itemsPerMinute:r}}},language:"javascript",environment:a,notifier:{version:e.notifier&&e.notifier.version||e.version}};return"browser"===t?(s.platform="browser",s.framework="browser-js",s.notifier.name="rollbar-browser-js"):"server"===t?(s.framework=e.framework||"node-js",s.notifier.name=e.notifier.name):"react-native"===t&&(s.framework=e.framework||"react-native",s.notifier.name=e.notifier.name),s}n.globalSettings={startTime:(new Date).getTime(),maxItems:void 0,itemsPerMinute:void 0},n.prototype.configureGlobal=function(t){void 0!==t.startTime&&(n.globalSettings.startTime=t.startTime),void 0!==t.maxItems&&(n.globalSettings.maxItems=t.maxItems),void 0!==t.itemsPerMinute&&(n.globalSettings.itemsPerMinute=t.itemsPerMinute)},n.prototype.shouldSend=function(t,e){e=e||(new Date).getTime(),e-this.startTime>=6e4&&(this.startTime=e,this.perMinCounter=0);var i=n.globalSettings.maxItems,a=n.globalSettings.itemsPerMinute;if(r(t,i,this.counter))return o(this.platform,this.platformOptions,i+" max items reached",!1);if(r(t,a,this.perMinCounter))return o(this.platform,this.platformOptions,a+" items per minute reached",!1);this.counter++,this.perMinCounter++;var s=!r(t,i,this.counter),u=s;return s=s&&!r(t,a,this.perMinCounter),o(this.platform,this.platformOptions,null,s,i,a,u)},n.prototype.setPlatformOptions=function(t,e){this.platform=t,this.platformOptions=e},t.exports=n},function(t,e,n){"use strict";function r(t,e,n,r){this.rateLimiter=t,this.api=e,this.logger=n,this.options=r,this.predicates=[],this.pendingItems=[],this.pendingRequests=[],this.retryQueue=[],this.retryHandle=null,this.waitCallback=null,this.waitIntervalID=null}var o=n(6);r.prototype.configure=function(t){this.api&&this.api.configure(t);var e=this.options;return this.options=o.extend(!0,{},e,t),this},r.prototype.addPredicate=function(t){return o.isFunction(t)&&this.predicates.push(t),this},r.prototype.addPendingItem=function(t){this.pendingItems.push(t)},r.prototype.removePendingItem=function(t){var e=this.pendingItems.indexOf(t);e!==-1&&this.pendingItems.splice(e,1)},r.prototype.addItem=function(t,e,n,r){e&&o.isFunction(e)||(e=function(){});var i=this._applyPredicates(t);if(i.stop)return this.removePendingItem(r),void e(i.err);this._maybeLog(t,n),this.removePendingItem(r),this.pendingRequests.push(t);try{this._makeApiRequest(t,function(n,r){this._dequeuePendingRequest(t),e(n,r)}.bind(this))}catch(n){this._dequeuePendingRequest(t),e(n)}},r.prototype.wait=function(t){o.isFunction(t)&&(this.waitCallback=t,this._maybeCallWait()||(this.waitIntervalID&&(this.waitIntervalID=clearInterval(this.waitIntervalID)),this.waitIntervalID=setInterval(function(){this._maybeCallWait()}.bind(this),500)))},r.prototype._applyPredicates=function(t){for(var e=null,n=0,r=this.predicates.length;ns)?(a=e.path,e.path=a.substring(0,s)+i+"&"+a.substring(s+1)):u!==-1?(a=e.path,e.path=a.substring(0,u)+i+a.substring(u)):e.path=e.path+i}function y(t,e){if(e=e||t.protocol,!e&&t.port&&(80===t.port?e="http:":443===t.port&&(e="https:")),e=e||"https:",!t.hostname)return null;var n=e+"//"+t.hostname;return t.port&&(n=n+":"+t.port),t.path&&(n+=t.path),n}function b(t,e){var n,r;try{n=R.stringify(t)}catch(o){if(e&&a(e))try{n=e(t)}catch(t){r=t}else r=o}return{error:r,value:n}}function w(t){var e,n;try{e=R.parse(t)}catch(t){n=t}return{error:n,value:e}}function _(t,e,n,r,o,i,a,s){var u={url:e||"",line:n,column:r};u.func=s.guessFunctionName(u.url,u.line),u.context=s.gatherContext(u.url,u.line);var c=document&&document.location&&document.location.href,l=window&&window.navigator&&window.navigator.userAgent;return{mode:i,message:o?String(o):t||a,url:c,stack:[u],useragent:l}}function x(t,e){return function(n,r){try{e(n,r)}catch(e){t.error(e)}}}function k(t,e,n,r,o){for(var a,s,u,c,l,p,f=[],h=0,m=t.length;h0&&(u=j(!0,{},u),u.extraArgs=f);var b={message:a,err:s,custom:u,timestamp:N(),callback:c,uuid:d()};return u&&void 0!==u.level&&(b.level=u.level,delete u.level),r&&l&&(b.request=l),o&&(b.lambdaContext=o),b._originalArgs=t,b}function E(t,e){if(t){var n=e.split("."),r=t;try{for(var o=0,i=n.length;o500&&(r=r.substr(0,500)+"...")):"undefined"==typeof r&&(r="undefined"),o.push(r);return o.join(" ")}function N(){return Date.now?+Date.now():+new Date}function C(t,e){if(t&&t.user_ip&&e!==!0){var n=t.user_ip;if(e)try{var r;if(n.indexOf(".")!==-1)r=n.split("."),r.pop(),r.push("0"),n=r.join(".");else if(n.indexOf(":")!==-1){if(r=n.split(":"),r.length>2){var o=r.slice(0,3),i=o[2].indexOf("/");i!==-1&&(o[2]=o[2].substring(0,i));var a="0000:0000:0000:0000:0000";n=o.concat(a).join(":")}}else n=null}catch(t){n=null}else n=null;t.user_ip=n}}var j=n(7),R={},A=!1;r();var q={debug:0,info:1,warning:2,error:3,critical:4},D={strictMode:!1,key:["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],q:{name:"queryKey",parser:/(?:^|&)([^&=]*)=?([^&]*)/g},parser:{strict:/^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,loose:/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/}};t.exports={isType:o,typeName:i,isFunction:a,isNativeFunction:s,isIterable:l,isError:p,extend:j,traverse:f,redact:h,uuid4:d,LEVELS:q,sanitizeUrl:m,addParamsAndAccessTokenToPath:v,formatUrl:y,stringify:b,jsonParse:w,makeUnhandledStackInfo:_,createItem:k,get:E,set:I,scrub:T,formatArgsAsString:L,now:N,filterIp:C}},function(t,e){"use strict";var n=Object.prototype.hasOwnProperty,r=Object.prototype.toString,o=function(t){return"function"==typeof Array.isArray?Array.isArray(t):"[object Array]"===r.call(t)},i=function(t){if(!t||"[object Object]"!==r.call(t))return!1;var e=n.call(t,"constructor"),o=t.constructor&&t.constructor.prototype&&n.call(t.constructor.prototype,"isPrototypeOf");if(t.constructor&&!e&&!o)return!1;var i;for(i in t);return"undefined"==typeof i||n.call(t,i)};t.exports=function t(){var e,n,r,a,s,u,c=arguments[0],l=1,p=arguments.length,f=!1;for("boolean"==typeof c?(f=c,c=arguments[1]||{},l=2):("object"!=typeof c&&"function"!=typeof c||null==c)&&(c={});lr&&(o=this.maxQueueSize-r),this.maxQueueSize=r,this.queue.splice(0,o)},r.prototype.copyEvents=function(){return Array.prototype.slice.call(this.queue,0)},r.prototype.capture=function(t,e,n,r,a){var s={level:o(t,n),type:t,timestamp_ms:a||i.now(),body:e,source:"client"};r&&(s.uuid=r);try{if(i.isFunction(this.options.filterTelemetry)&&this.options.filterTelemetry(s))return!1}catch(t){this.options.filterTelemetry=null}return this.push(s),s},r.prototype.captureEvent=function(t,e,n){return this.capture("manual",t,e,n)},r.prototype.captureError=function(t,e,n,r){var o={message:t.message||String(t)};return t.stack&&(o.stack=t.stack),this.capture("error",o,e,n,r)},r.prototype.captureLog=function(t,e,n,r){return this.capture("log",{message:t},e,n,r)},r.prototype.captureNetwork=function(t,e,n,r){e=e||"xhr",t.subtype=t.subtype||e,r&&(t.request=r);var o=this.levelFromStatus(t.status_code);return this.capture("network",t,o,n)},r.prototype.levelFromStatus=function(t){return t>=200&&t<400?"info":0===t||t>=400?"error":"info"},r.prototype.captureDom=function(t,e,n,r,o){var i={subtype:t,element:e};return void 0!==n&&(i.value=n),void 0!==r&&(i.checked=r),this.capture("dom",i,"info",o)},r.prototype.captureNavigation=function(t,e,n){return this.capture("navigation",{from:t,to:e},"info",n)},r.prototype.captureDomContentLoaded=function(t){return this.capture("navigation",{subtype:"DOMContentLoaded"},"info",void 0,t&&t.getTime())},r.prototype.captureLoad=function(t){return this.capture("navigation",{subtype:"load"},"info",void 0,t&&t.getTime())},r.prototype.captureConnectivityChange=function(t,e){return this.captureNetwork({change:t},"connectivity",e)},r.prototype._captureRollbarItem=function(t){if(this.options.includeItemsInTelemetry)return t.err?this.captureError(t.err,t.level,t.uuid,t.timestamp):t.message?this.captureLog(t.message,t.level,t.uuid,t.timestamp):t.custom?this.capture("log",t.custom,t.level,t.uuid,t.timestamp):void 0},r.prototype.push=function(t){this.queue.push(t),this.queue.length>this.maxQueueSize&&this.queue.shift()},t.exports=r},function(t,e,n){"use strict";function r(t,e,n,r){this.options=t,this.transport=e,this.url=n,this.jsonBackup=r,this.accessToken=t.accessToken,this.transportOptions=o(t,n)}function o(t,e){return a.getTransportFromOptions(t,s,e)}var i=n(6),a=n(12),s={hostname:"api.rollbar.com",path:"/api/1/item/",search:null,version:"1",protocol:"https:",port:443};r.prototype.postItem=function(t,e){var n=a.transportOptions(this.transportOptions,"POST"),r=a.buildPayload(this.accessToken,t,this.jsonBackup);this.transport.post(this.accessToken,n,r,e)},r.prototype.configure=function(t){var e=this.oldOptions;return this.options=i.extend(!0,{},e,t),this.transportOptions=o(this.options,this.url),void 0!==this.options.accessToken&&(this.accessToken=this.options.accessToken),this},t.exports=r},function(t,e,n){"use strict";function r(t,e,n){if(!s.isType(e.context,"string")){var r=s.stringify(e.context,n);r.error?e.context="Error: could not serialize 'context'":e.context=r.value||"",e.context.length>255&&(e.context=e.context.substr(0,255))}return{access_token:t,data:e}}function o(t,e,n){var r=e.hostname,o=e.protocol,i=e.port,a=e.path,s=e.search,u=t.proxy;if(t.endpoint){var c=n.parse(t.endpoint);r=c.hostname,o=c.protocol,i=c.port,a=c.pathname,s=c.search}return{hostname:r,protocol:o,port:i,path:a,search:s,proxy:u}}function i(t,e){var n=t.protocol||"https:",r=t.port||("http:"===n?80:"https:"===n?443:void 0),o=t.hostname,i=t.path;return t.search&&(i+=t.search),t.proxy&&(i=n+"//"+o+i,o=t.proxy.host||t.proxy.hostname,r=t.proxy.port,n=t.proxy.protocol||n),{protocol:n,hostname:o,path:i,port:r,method:e}}function a(t,e){var n=/\/$/.test(t),r=/^\//.test(e);return n&&r?e=e.substring(1):n||r||(e="/"+e),t+e}var s=n(6);t.exports={buildPayload:r,getTransportFromOptions:o,transportOptions:i,appendPathToPath:a}},function(t,e,n){"use strict";function r(){var t=Array.prototype.slice.call(arguments,0);t.unshift("Rollbar:"),a.ieVersion()<=8?console.error(s.formatArgsAsString(t)):console.error.apply(console,t)}function o(){var t=Array.prototype.slice.call(arguments,0);t.unshift("Rollbar:"),a.ieVersion()<=8?console.info(s.formatArgsAsString(t)):console.info.apply(console,t)}function i(){var t=Array.prototype.slice.call(arguments,0);t.unshift("Rollbar:"),a.ieVersion()<=8?console.log(s.formatArgsAsString(t)):console.log.apply(console,t)}n(14);var a=n(15),s=n(6);t.exports={error:r,info:o,log:i}},function(t,e){!function(t){"use strict";t.console||(t.console={});for(var e,n,r=t.console,o=function(){},i=["memory"],a="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(",");e=i.pop();)r[e]||(r[e]={});for(;n=a.pop();)r[n]||(r[n]=o)}("undefined"==typeof window?this:window); +},function(t,e){"use strict";function n(){var t;if(!document)return t;for(var e=3,n=document.createElement("div"),r=n.getElementsByTagName("i");n.innerHTML="",r[0];);return e>4?e:t}var r={ieVersion:n};t.exports=r},function(t,e){"use strict";function n(t,e,n){if(t){var o;"function"==typeof e._rollbarOldOnError?o=e._rollbarOldOnError:t.onerror&&!t.onerror.belongsToShim&&(o=t.onerror,e._rollbarOldOnError=o);var i=function(){var n=Array.prototype.slice.call(arguments,0);r(t,e,o,n)};i.belongsToShim=n,t.onerror=i}}function r(t,e,n,r){t._rollbarWrappedError&&(r[4]||(r[4]=t._rollbarWrappedError),r[5]||(r[5]=t._rollbarWrappedError._rollbarContext),t._rollbarWrappedError=null),e.handleUncaughtException.apply(e,r),n&&n.apply(t,r)}function o(t,e,n){if(t){"function"==typeof t._rollbarURH&&t._rollbarURH.belongsToShim&&t.removeEventListener("unhandledrejection",t._rollbarURH);var r=function(t){var n,r,o;try{n=t.reason}catch(t){n=void 0}try{r=t.promise}catch(t){r="[unhandledrejection] error getting `promise` from event"}try{o=t.detail,!n&&o&&(n=o.reason,r=o.promise)}catch(t){o="[unhandledrejection] error getting `detail` from event"}n||(n="[unhandledrejection] error getting `reason` from event"),e&&e.handleUnhandledRejection&&e.handleUnhandledRejection(n,r)};r.belongsToShim=n,t._rollbarURH=r,t.addEventListener("unhandledrejection",r)}}function i(t,e,n){if(t){var r,o,i="EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload".split(",");for(r=0;r=400&&t.status<600}function c(t,e){var n=new Error(t);return n.code=e||"ENOTFOUND",n}var l=n(6),p=n(13);t.exports={get:r,post:o}},function(t,e){"use strict";function n(t){var e,n,r={protocol:null,auth:null,host:null,path:null,hash:null,href:t,hostname:null,port:null,pathname:null,search:null,query:null};if(e=t.indexOf("//"),e!==-1?(r.protocol=t.substring(0,e),n=e+2):n=0,e=t.indexOf("@",n),e!==-1&&(r.auth=t.substring(n,e),n=e+1),e=t.indexOf("/",n),e===-1){if(e=t.indexOf("?",n),e===-1)return e=t.indexOf("#",n),e===-1?r.host=t.substring(n):(r.host=t.substring(n,e),r.hash=t.substring(e)),r.hostname=r.host.split(":")[0],r.port=r.host.split(":")[1],r.port&&(r.port=parseInt(r.port,10)),r;r.host=t.substring(n,e),r.hostname=r.host.split(":")[0],r.port=r.host.split(":")[1],r.port&&(r.port=parseInt(r.port,10)),n=e}else r.host=t.substring(n,e),r.hostname=r.host.split(":")[0],r.port=r.host.split(":")[1],r.port&&(r.port=parseInt(r.port,10)),n=e;if(e=t.indexOf("#",n),e===-1?r.path=t.substring(n):(r.path=t.substring(n,e),r.hash=t.substring(e)),r.path){var o=r.path.split("?");r.pathname=o[0],r.query=o[1],r.search=r.query?"?"+r.query:null}return r}t.exports={parse:n}},function(t,e,n){"use strict";function r(t,e,n){if(t.data=t.data||{},t.err)try{t.stackInfo=t.err._savedStackTrace||d.parse(t.err)}catch(e){m.error("Error while parsing the error object.",e),t.message=t.err.message||t.err.description||t.message||String(t.err),delete t.err}n(null,t)}function o(t,e,n){t.message||t.stackInfo||t.custom||n(new Error("No message, stack info, or custom data"),null),n(null,t)}function i(t,e,n){var r=e.payload&&e.payload.environment||e.environment;t.data=h.extend(!0,{},t.data,{environment:r,level:t.level,endpoint:e.endpoint,platform:"browser",framework:"browser-js",language:"javascript",server:{},uuid:t.uuid,notifier:{name:"rollbar-browser-js",version:e.version}}),n(null,t)}function a(t){return function(e,n,r){if(!t||!t.location)return r(null,e);var o="$remote_ip";n.captureIp?n.captureIp!==!0&&(o+="_anonymize"):o=null,h.set(e,"data.request",{url:t.location.href,query_string:t.location.search,user_ip:o}),r(null,e)}}function s(t){return function(e,n,r){if(!t)return r(null,e);var o=t.navigator||{},i=t.screen||{};h.set(e,"data.client",{runtime_ms:e.timestamp-t._rollbarStartTime,timestamp:Math.round(e.timestamp/1e3),javascript:{browser:o.userAgent,language:o.language,cookie_enabled:o.cookieEnabled,screen:{width:i.width,height:i.height}}}),r(null,e)}}function u(t){return function(e,n,r){if(!t||!t.navigator)return r(null,e);for(var o,i=[],a=t.navigator.plugins||[],s=0,u=a.length;s-1&&(e=e.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var n=e.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),r=this.extractLocation(n.pop()),o=n.join(" ")||void 0,i="eval"===r[0]?void 0:r[0];return new t(o,void 0,i,r[1],r[2],e)},this)},parseFFOrSafari:function(r){var o=n(r.stack.split("\n"),function(t){return!t.match(i)},this);return e(o,function(e){if(e.indexOf(" > eval")>-1&&(e=e.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),e.indexOf("@")===-1&&e.indexOf(":")===-1)return new t(e);var n=e.split("@"),r=this.extractLocation(n.pop()),o=n.shift()||void 0;return new t(o,void 0,r[0],r[1],r[2],e)},this)},parseOpera:function(t){return!t.stacktrace||t.message.indexOf("\n")>-1&&t.message.split("\n").length>t.stacktrace.split("\n").length?this.parseOpera9(t):t.stack?this.parseOpera11(t):this.parseOpera10(t)},parseOpera9:function(e){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=e.message.split("\n"),o=[],i=2,a=r.length;i/,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(n=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new t(a,s,o[0],o[1],o[2],e)},this)}}})},function(t,e,n){var r,o,i;!function(n,a){"use strict";o=[],r=a,i="function"==typeof r?r.apply(e,o):r,!(void 0!==i&&(t.exports=i))}(this,function(){"use strict";function t(t){return!isNaN(parseFloat(t))&&isFinite(t)}function e(t,e,n,r,o,i){void 0!==t&&this.setFunctionName(t),void 0!==e&&this.setArgs(e),void 0!==n&&this.setFileName(n),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return e.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(t){this.functionName=String(t)},getArgs:function(){return this.args},setArgs:function(t){if("[object Array]"!==Object.prototype.toString.call(t))throw new TypeError("Args must be an Array");this.args=t},getFileName:function(){return this.fileName},setFileName:function(t){this.fileName=String(t)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(e){if(!t(e))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(e)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(e){if(!t(e))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(e)},getSource:function(){return this.source},setSource:function(t){this.source=String(t)},toString:function(){var e=this.getFunctionName()||"{anonymous}",n="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=t(this.getLineNumber())?":"+this.getLineNumber():"",i=t(this.getColumnNumber())?":"+this.getColumnNumber():"";return e+n+r+o+i}},e})},function(t,e,n){"use strict";function r(t,e,n){var r=e.payload||{};r.body&&delete r.body;var o=u.extend(!0,{},t.data,r);t._isUncaught&&(o._isUncaught=!0),t._originalArgs&&(o._originalArgs=t._originalArgs),n(null,o)}function o(t,e,n){t.telemetryEvents&&u.set(t,"data.body.telemetry",t.telemetryEvents),n(null,t)}function i(t,e,n){if(!t.message)return void n(null,t);var r="data.body.trace_chain.0",o=u.get(t,r);if(o||(r="data.body.trace",o=u.get(t,r)),o){if(!o.exception||!o.exception.description)return u.set(t,r+".exception.description",t.message),void n(null,t);var i=u.get(t,r+".extra")||{},a=u.extend(!0,{},i,{message:t.message});u.set(t,r+".extra",a)}n(null,t)}function a(t){return function(e,n,r){var o=u.extend(!0,{},e);try{u.isFunction(n.transform)&&n.transform(o.data)}catch(o){return n.transform=null,t.error("Error while calling custom transform() function. Removing custom transform().",o),void r(null,e)}r(null,o)}}function s(t,e,n){if(!e.sendConfig)return n(null,t);var r="_rollbarConfig",o=u.get(t,"data.custom")||{};o[r]=e,t.data.custom=o,n(null,t)}var u=n(6);t.exports={itemToPayload:r,addTelemetryData:o,addMessageWithError:i,userTransform:a,addConfigToPayload:s}},function(t,e,n){"use strict";function r(t,e){return!o.get(e,"plugins.jquery.ignoreAjaxErrors")||!o.get(t,"body.message.extra.isAjax")}var o=n(6);t.exports={checkIgnore:r}},function(t,e,n){"use strict";function r(t,e){var n=t.level,r=c.LEVELS[n]||0,o=e.reportLevel,i=c.LEVELS[o]||0;return!(r=0&&t.options[t.selectedIndex]&&this.captureDomEvent("input",t,t.options[t.selectedIndex].value)},i.prototype.captureDomEvent=function(t,e,n,r){if(void 0!==n)if(this.scrubTelemetryInputs||"password"===u.getElementType(e))n="[scrubbed]";else if(this.telemetryScrubber){var o=u.describeElement(e);this.telemetryScrubber(o)&&(n="[scrubbed]")}var i=u.elementArrayToString(u.treeToArray(e));this.telemeter.captureDom(t,i,n,r)},i.prototype.deinstrumentNavigation=function(){var t=this._window.chrome,e=t&&t.app&&t.app.runtime,n=!e&&this._window.history&&this._window.history.pushState;n&&o(this.replacements,"navigation")},i.prototype.instrumentNavigation=function(){var t=this._window.chrome,e=t&&t.app&&t.app.runtime,n=!e&&this._window.history&&this._window.history.pushState;if(n){var o=this;r(this._window,"onpopstate",function(t){return function(){var e=o._location.href;o.handleUrlChange(o._lastHref,e),t&&t.apply(this,arguments)}},this.replacements,"navigation"),r(this._window.history,"pushState",function(t){return function(){var e=arguments.length>2?arguments[2]:void 0;return e&&o.handleUrlChange(o._lastHref,e+""),t.apply(this,arguments)}},this.replacements,"navigation")}},i.prototype.handleUrlChange=function(t,e){var n=s.parse(this._location.href),r=s.parse(e),o=s.parse(t);this._lastHref=e,n.protocol===r.protocol&&n.host===r.host&&(e=r.path+(r.hash||"")),n.protocol===o.protocol&&n.host===o.host&&(t=o.path+(o.hash||"")),this.telemeter.captureNavigation(t,e)},i.prototype.deinstrumentConnectivity=function(){("addEventListener"in this._window||"body"in this._document)&&(this._window.addEventListener?this.removeListeners("connectivity"):o(this.replacements,"connectivity"))},i.prototype.instrumentConnectivity=function(){if("addEventListener"in this._window||"body"in this._document)if(this._window.addEventListener)this.addListener("connectivity",this._window,"online",void 0,function(){this.telemeter.captureConnectivityChange("online")}.bind(this),!0),this.addListener("connectivity",this._window,"offline",void 0,function(){this.telemeter.captureConnectivityChange("offline")}.bind(this),!0);else{var t=this;r(this._document.body,"ononline",function(e){return function(){t.telemeter.captureConnectivityChange("online"),e&&e.apply(this,arguments)}},this.replacements,"connectivity"),r(this._document.body,"onoffline",function(e){return function(){t.telemeter.captureConnectivityChange("offline"),e&&e.apply(this,arguments)}},this.replacements,"connectivity")}},i.prototype.addListener=function(t,e,n,r,o,i){e.addEventListener?(e.addEventListener(n,o,i),this.eventRemovers[t].push(function(){e.removeEventListener(n,o,i)})):r&&(e.attachEvent(r,o),this.eventRemovers[t].push(function(){e.detachEvent(r,o)}))},i.prototype.removeListeners=function(t){for(var e;this.eventRemovers[t].length;)(e=this.eventRemovers[t].shift())()},t.exports=i},function(t,e){"use strict";function n(t){return(t.getAttribute("type")||"").toLowerCase()}function r(t,e,r){if(t.tagName.toLowerCase()!==e.toLowerCase())return!1;if(!r)return!0;t=n(t);for(var o=0;o ",i=o.length,a=[],u=0,c=t.length-1;c>=0;c--){if(e=s(t[c]),n=u+a.length*i+e.length,c=r+3){a.unshift("...");break}a.unshift(e),u+=e.length}return a.join(o)}function s(t){if(!t||!t.tagName)return"";var e=[t.tagName];t.id&&e.push("#"+t.id),t.classes&&e.push("."+t.classes.join("."));for(var n=0;n= 60000) {\n\t this.startTime = now;\n\t this.perMinCounter = 0;\n\t }\n\t\n\t var globalRateLimit = RateLimiter.globalSettings.maxItems;\n\t var globalRateLimitPerMin = RateLimiter.globalSettings.itemsPerMinute;\n\t\n\t if (checkRate(item, globalRateLimit, this.counter)) {\n\t return shouldSendValue(this.platform, this.platformOptions, globalRateLimit + ' max items reached', false);\n\t } else if (checkRate(item, globalRateLimitPerMin, this.perMinCounter)) {\n\t return shouldSendValue(this.platform, this.platformOptions, globalRateLimitPerMin + ' items per minute reached', false);\n\t }\n\t this.counter++;\n\t this.perMinCounter++;\n\t\n\t var shouldSend = !checkRate(item, globalRateLimit, this.counter);\n\t var perMinute = shouldSend;\n\t shouldSend = shouldSend && !checkRate(item, globalRateLimitPerMin, this.perMinCounter);\n\t return shouldSendValue(this.platform, this.platformOptions, null, shouldSend, globalRateLimit, globalRateLimitPerMin, perMinute);\n\t};\n\t\n\tRateLimiter.prototype.setPlatformOptions = function(platform, options) {\n\t this.platform = platform;\n\t this.platformOptions = options;\n\t};\n\t\n\t/* Helpers */\n\t\n\tfunction checkRate(item, limit, counter) {\n\t return !item.ignoreRateLimit && limit >= 1 && counter > limit;\n\t}\n\t\n\tfunction shouldSendValue(platform, options, error, shouldSend, globalRateLimit, limitPerMin, perMinute) {\n\t var payload = null;\n\t if (error) {\n\t error = new Error(error);\n\t }\n\t if (!error && !shouldSend) {\n\t payload = rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute);\n\t }\n\t return {error: error, shouldSend: shouldSend, payload: payload};\n\t}\n\t\n\tfunction rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute) {\n\t var environment = options.environment || (options.payload && options.payload.environment);\n\t var msg;\n\t if (perMinute) {\n\t msg = 'item per minute limit reached, ignoring errors until timeout';\n\t } else {\n\t msg = 'maxItems has been hit, ignoring errors until reset.';\n\t }\n\t var item = {\n\t body: {\n\t message: {\n\t body: msg,\n\t extra: {\n\t maxItems: globalRateLimit,\n\t itemsPerMinute: limitPerMin\n\t }\n\t }\n\t },\n\t language: 'javascript',\n\t environment: environment,\n\t notifier: {\n\t version: (options.notifier && options.notifier.version) || options.version\n\t }\n\t };\n\t if (platform === 'browser') {\n\t item.platform = 'browser';\n\t item.framework = 'browser-js';\n\t item.notifier.name = 'rollbar-browser-js';\n\t } else if (platform === 'server') {\n\t item.framework = options.framework || 'node-js';\n\t item.notifier.name = options.notifier.name;\n\t } else if (platform === 'react-native') {\n\t item.framework = options.framework || 'react-native';\n\t item.notifier.name = options.notifier.name;\n\t }\n\t return item;\n\t}\n\t\n\tmodule.exports = RateLimiter;\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\t\n\t/*\n\t * Queue - an object which handles which handles a queue of items to be sent to Rollbar.\n\t * This object handles rate limiting via a passed in rate limiter, retries based on connection\n\t * errors, and filtering of items based on a set of configurable predicates. The communication to\n\t * the backend is performed via a given API object.\n\t *\n\t * @param rateLimiter - An object which conforms to the interface\n\t * rateLimiter.shouldSend(item) -> bool\n\t * @param api - An object which conforms to the interface\n\t * api.postItem(payload, function(err, response))\n\t * @param logger - An object used to log verbose messages if desired\n\t * @param options - see Queue.prototype.configure\n\t */\n\tfunction Queue(rateLimiter, api, logger, options) {\n\t this.rateLimiter = rateLimiter;\n\t this.api = api;\n\t this.logger = logger;\n\t this.options = options;\n\t this.predicates = [];\n\t this.pendingItems = [];\n\t this.pendingRequests = [];\n\t this.retryQueue = [];\n\t this.retryHandle = null;\n\t this.waitCallback = null;\n\t this.waitIntervalID = null;\n\t}\n\t\n\t/*\n\t * configure - updates the options this queue uses\n\t *\n\t * @param options\n\t */\n\tQueue.prototype.configure = function(options) {\n\t this.api && this.api.configure(options);\n\t var oldOptions = this.options;\n\t this.options = _.extend(true, {}, oldOptions, options);\n\t return this;\n\t};\n\t\n\t/*\n\t * addPredicate - adds a predicate to the end of the list of predicates for this queue\n\t *\n\t * @param predicate - function(item, options) -> (bool|{err: Error})\n\t * Returning true means that this predicate passes and the item is okay to go on the queue\n\t * Returning false means do not add the item to the queue, but it is not an error\n\t * Returning {err: Error} means do not add the item to the queue, and the given error explains why\n\t * Returning {err: undefined} is equivalent to returning true but don't do that\n\t */\n\tQueue.prototype.addPredicate = function(predicate) {\n\t if (_.isFunction(predicate)) {\n\t this.predicates.push(predicate);\n\t }\n\t return this;\n\t};\n\t\n\tQueue.prototype.addPendingItem = function(item) {\n\t this.pendingItems.push(item);\n\t};\n\t\n\tQueue.prototype.removePendingItem = function(item) {\n\t var idx = this.pendingItems.indexOf(item);\n\t if (idx !== -1) {\n\t this.pendingItems.splice(idx, 1);\n\t }\n\t};\n\t\n\t/*\n\t * addItem - Send an item to the Rollbar API if all of the predicates are satisfied\n\t *\n\t * @param item - The payload to send to the backend\n\t * @param callback - function(error, repsonse) which will be called with the response from the API\n\t * in the case of a success, otherwise response will be null and error will have a value. If both\n\t * error and response are null then the item was stopped by a predicate which did not consider this\n\t * to be an error condition, but nonetheless did not send the item to the API.\n\t * @param originalError - The original error before any transformations that is to be logged if any\n\t */\n\tQueue.prototype.addItem = function(item, callback, originalError, originalItem) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() { return; };\n\t }\n\t var predicateResult = this._applyPredicates(item);\n\t if (predicateResult.stop) {\n\t this.removePendingItem(originalItem);\n\t callback(predicateResult.err);\n\t return;\n\t }\n\t this._maybeLog(item, originalError);\n\t this.removePendingItem(originalItem);\n\t this.pendingRequests.push(item);\n\t try {\n\t this._makeApiRequest(item, function(err, resp) {\n\t this._dequeuePendingRequest(item);\n\t callback(err, resp);\n\t }.bind(this));\n\t } catch (e) {\n\t this._dequeuePendingRequest(item);\n\t callback(e);\n\t }\n\t};\n\t\n\t/*\n\t * wait - Stop any further errors from being added to the queue, and get called back when all items\n\t * currently processing have finished sending to the backend.\n\t *\n\t * @param callback - function() called when all pending items have been sent\n\t */\n\tQueue.prototype.wait = function(callback) {\n\t if (!_.isFunction(callback)) {\n\t return;\n\t }\n\t this.waitCallback = callback;\n\t if (this._maybeCallWait()) {\n\t return;\n\t }\n\t if (this.waitIntervalID) {\n\t this.waitIntervalID = clearInterval(this.waitIntervalID);\n\t }\n\t this.waitIntervalID = setInterval(function() {\n\t this._maybeCallWait();\n\t }.bind(this), 500);\n\t};\n\t\n\t/* _applyPredicates - Sequentially applies the predicates that have been added to the queue to the\n\t * given item with the currently configured options.\n\t *\n\t * @param item - An item in the queue\n\t * @returns {stop: bool, err: (Error|null)} - stop being true means do not add item to the queue,\n\t * the error value should be passed up to a callbak if we are stopping.\n\t */\n\tQueue.prototype._applyPredicates = function(item) {\n\t var p = null;\n\t for (var i = 0, len = this.predicates.length; i < len; i++) {\n\t p = this.predicates[i](item, this.options);\n\t if (!p || p.err !== undefined) {\n\t return {stop: true, err: p.err};\n\t }\n\t }\n\t return {stop: false, err: null};\n\t};\n\t\n\t/*\n\t * _makeApiRequest - Send an item to Rollbar, callback when done, if there is an error make an\n\t * effort to retry if we are configured to do so.\n\t *\n\t * @param item - an item ready to send to the backend\n\t * @param callback - function(err, response)\n\t */\n\tQueue.prototype._makeApiRequest = function(item, callback) {\n\t var rateLimitResponse = this.rateLimiter.shouldSend(item);\n\t if (rateLimitResponse.shouldSend) {\n\t this.api.postItem(item, function(err, resp) {\n\t if (err) {\n\t this._maybeRetry(err, item, callback);\n\t } else {\n\t callback(err, resp);\n\t }\n\t }.bind(this));\n\t } else if (rateLimitResponse.error) {\n\t callback(rateLimitResponse.error);\n\t } else {\n\t this.api.postItem(rateLimitResponse.payload, callback);\n\t }\n\t};\n\t\n\t// These are errors basically mean there is no internet connection\n\tvar RETRIABLE_ERRORS = ['ECONNRESET', 'ENOTFOUND', 'ESOCKETTIMEDOUT', 'ETIMEDOUT', 'ECONNREFUSED', 'EHOSTUNREACH', 'EPIPE', 'EAI_AGAIN'];\n\t\n\t/*\n\t * _maybeRetry - Given the error returned by the API, decide if we should retry or just callback\n\t * with the error.\n\t *\n\t * @param err - an error returned by the API transport\n\t * @param item - the item that was trying to be sent when this error occured\n\t * @param callback - function(err, response)\n\t */\n\tQueue.prototype._maybeRetry = function(err, item, callback) {\n\t var shouldRetry = false;\n\t if (this.options.retryInterval) {\n\t for (var i = 0, len = RETRIABLE_ERRORS.length; i < len; i++) {\n\t if (err.code === RETRIABLE_ERRORS[i]) {\n\t shouldRetry = true;\n\t break;\n\t }\n\t }\n\t }\n\t if (shouldRetry) {\n\t this._retryApiRequest(item, callback);\n\t } else {\n\t callback(err);\n\t }\n\t};\n\t\n\t/*\n\t * _retryApiRequest - Add an item and a callback to a queue and possibly start a timer to process\n\t * that queue based on the retryInterval in the options for this queue.\n\t *\n\t * @param item - an item that failed to send due to an error we deem retriable\n\t * @param callback - function(err, response)\n\t */\n\tQueue.prototype._retryApiRequest = function(item, callback) {\n\t this.retryQueue.push({item: item, callback: callback});\n\t\n\t if (!this.retryHandle) {\n\t this.retryHandle = setInterval(function() {\n\t while (this.retryQueue.length) {\n\t var retryObject = this.retryQueue.shift();\n\t this._makeApiRequest(retryObject.item, retryObject.callback);\n\t }\n\t }.bind(this), this.options.retryInterval);\n\t }\n\t};\n\t\n\t/*\n\t * _dequeuePendingRequest - Removes the item from the pending request queue, this queue is used to\n\t * enable to functionality of providing a callback that clients can pass to `wait` to be notified\n\t * when the pending request queue has been emptied. This must be called when the API finishes\n\t * processing this item. If a `wait` callback is configured, it is called by this function.\n\t *\n\t * @param item - the item previously added to the pending request queue\n\t */\n\tQueue.prototype._dequeuePendingRequest = function(item) {\n\t var idx = this.pendingRequests.indexOf(item);\n\t if (idx !== -1) {\n\t this.pendingRequests.splice(idx, 1);\n\t this._maybeCallWait();\n\t }\n\t};\n\t\n\tQueue.prototype._maybeLog = function(data, originalError) {\n\t if (this.logger && this.options.verbose) {\n\t var message = originalError;\n\t message = message || _.get(data, 'body.trace.exception.message');\n\t message = message || _.get(data, 'body.trace_chain.0.exception.message');\n\t if (message) {\n\t this.logger.error(message);\n\t return;\n\t }\n\t message = _.get(data, 'body.message.body');\n\t if (message) {\n\t this.logger.log(message);\n\t }\n\t }\n\t};\n\t\n\tQueue.prototype._maybeCallWait = function() {\n\t if (_.isFunction(this.waitCallback) && this.pendingItems.length === 0 && this.pendingRequests.length === 0) {\n\t if (this.waitIntervalID) {\n\t this.waitIntervalID = clearInterval(this.waitIntervalID);\n\t }\n\t this.waitCallback();\n\t return true;\n\t }\n\t return false;\n\t};\n\t\n\tmodule.exports = Queue;\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar extend = __webpack_require__(7);\n\t\n\tvar RollbarJSON = {};\n\tvar __initRollbarJSON = false;\n\tfunction setupJSON() {\n\t if (__initRollbarJSON) {\n\t return;\n\t }\n\t __initRollbarJSON = true;\n\t\n\t if (isDefined(JSON)) {\n\t if (isNativeFunction(JSON.stringify)) {\n\t RollbarJSON.stringify = JSON.stringify;\n\t }\n\t if (isNativeFunction(JSON.parse)) {\n\t RollbarJSON.parse = JSON.parse;\n\t }\n\t }\n\t if (!isFunction(RollbarJSON.stringify) || !isFunction(RollbarJSON.parse)) {\n\t var setupCustomJSON = __webpack_require__(8);\n\t setupCustomJSON(RollbarJSON);\n\t }\n\t}\n\tsetupJSON();\n\t\n\t/*\n\t * isType - Given a Javascript value and a string, returns true if the type of the value matches the\n\t * given string.\n\t *\n\t * @param x - any value\n\t * @param t - a lowercase string containing one of the following type names:\n\t * - undefined\n\t * - null\n\t * - error\n\t * - number\n\t * - boolean\n\t * - string\n\t * - symbol\n\t * - function\n\t * - object\n\t * - array\n\t * @returns true if x is of type t, otherwise false\n\t */\n\tfunction isType(x, t) {\n\t return t === typeName(x);\n\t}\n\t\n\t/*\n\t * typeName - Given a Javascript value, returns the type of the object as a string\n\t */\n\tfunction typeName(x) {\n\t var name = typeof x;\n\t if (name !== 'object') {\n\t return name;\n\t }\n\t if (!x) {\n\t return 'null';\n\t }\n\t if (x instanceof Error) {\n\t return 'error';\n\t }\n\t return ({}).toString.call(x).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n\t}\n\t\n\t/* isFunction - a convenience function for checking if a value is a function\n\t *\n\t * @param f - any value\n\t * @returns true if f is a function, otherwise false\n\t */\n\tfunction isFunction(f) {\n\t return isType(f, 'function');\n\t}\n\t\n\t/* isNativeFunction - a convenience function for checking if a value is a native JS function\n\t *\n\t * @param f - any value\n\t * @returns true if f is a native JS function, otherwise false\n\t */\n\tfunction isNativeFunction(f) {\n\t var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\t var funcMatchString = Function.prototype.toString.call(Object.prototype.hasOwnProperty)\n\t .replace(reRegExpChar, '\\\\$&')\n\t .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?');\n\t var reIsNative = RegExp('^' + funcMatchString + '$');\n\t return isObject(f) && reIsNative.test(f);\n\t}\n\t\n\t/* isObject - Checks if the argument is an object\n\t *\n\t * @param value - any value\n\t * @returns true is value is an object function is an object)\n\t*/\n\tfunction isObject(value) {\n\t var type = typeof value;\n\t return value != null && (type == 'object' || type == 'function');\n\t}\n\t\n\t/*\n\t * isDefined - a convenience function for checking if a value is not equal to undefined\n\t *\n\t * @param u - any value\n\t * @returns true if u is anything other than undefined\n\t */\n\tfunction isDefined(u) {\n\t return !isType(u, 'undefined');\n\t}\n\t\n\t/*\n\t * isIterable - convenience function for checking if a value can be iterated, essentially\n\t * whether it is an object or an array.\n\t *\n\t * @param i - any value\n\t * @returns true if i is an object or an array as determined by `typeName`\n\t */\n\tfunction isIterable(i) {\n\t var type = typeName(i);\n\t return (type === 'object' || type === 'array');\n\t}\n\t\n\t/*\n\t * isError - convenience function for checking if a value is of an error type\n\t *\n\t * @param e - any value\n\t * @returns true if e is an error\n\t */\n\tfunction isError(e) {\n\t return isType(e, 'error');\n\t}\n\t\n\tfunction traverse(obj, func, seen) {\n\t var k, v, i;\n\t var isObj = isType(obj, 'object');\n\t var isArray = isType(obj, 'array');\n\t var keys = [];\n\t\n\t if (isObj && seen.indexOf(obj) !== -1) {\n\t return obj;\n\t }\n\t seen.push(obj);\n\t\n\t if (isObj) {\n\t for (k in obj) {\n\t if (Object.prototype.hasOwnProperty.call(obj, k)) {\n\t keys.push(k);\n\t }\n\t }\n\t } else if (isArray) {\n\t for (i = 0; i < obj.length; ++i) {\n\t keys.push(i);\n\t }\n\t }\n\t\n\t var result = isObj ? {} : [];\n\t for (i = 0; i < keys.length; ++i) {\n\t k = keys[i];\n\t v = obj[k];\n\t result[k] = func(k, v, seen);\n\t }\n\t\n\t return (keys.length != 0) ? result : obj;\n\t}\n\t\n\tfunction redact() {\n\t return '********';\n\t}\n\t\n\t// from http://stackoverflow.com/a/8809472/1138191\n\tfunction uuid4() {\n\t var d = now();\n\t var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n\t var r = (d + Math.random() * 16) % 16 | 0;\n\t d = Math.floor(d / 16);\n\t return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16);\n\t });\n\t return uuid;\n\t}\n\t\n\tvar LEVELS = {\n\t debug: 0,\n\t info: 1,\n\t warning: 2,\n\t error: 3,\n\t critical: 4\n\t};\n\t\n\tfunction sanitizeUrl(url) {\n\t var baseUrlParts = parseUri(url);\n\t // remove a trailing # if there is no anchor\n\t if (baseUrlParts.anchor === '') {\n\t baseUrlParts.source = baseUrlParts.source.replace('#', '');\n\t }\n\t\n\t url = baseUrlParts.source.replace('?' + baseUrlParts.query, '');\n\t return url;\n\t}\n\t\n\tvar parseUriOptions = {\n\t strictMode: false,\n\t key: [\n\t 'source',\n\t 'protocol',\n\t 'authority',\n\t 'userInfo',\n\t 'user',\n\t 'password',\n\t 'host',\n\t 'port',\n\t 'relative',\n\t 'path',\n\t 'directory',\n\t 'file',\n\t 'query',\n\t 'anchor'\n\t ],\n\t q: {\n\t name: 'queryKey',\n\t parser: /(?:^|&)([^&=]*)=?([^&]*)/g\n\t },\n\t parser: {\n\t strict: /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,\n\t loose: /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/\n\t }\n\t};\n\t\n\tfunction parseUri(str) {\n\t if (!isType(str, 'string')) {\n\t throw new Error('received invalid input');\n\t }\n\t\n\t var o = parseUriOptions;\n\t var m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str);\n\t var uri = {};\n\t var i = o.key.length;\n\t\n\t while (i--) {\n\t uri[o.key[i]] = m[i] || '';\n\t }\n\t\n\t uri[o.q.name] = {};\n\t uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {\n\t if ($1) {\n\t uri[o.q.name][$1] = $2;\n\t }\n\t });\n\t\n\t return uri;\n\t}\n\t\n\tfunction addParamsAndAccessTokenToPath(accessToken, options, params) {\n\t params = params || {};\n\t params.access_token = accessToken;\n\t var paramsArray = [];\n\t var k;\n\t for (k in params) {\n\t if (Object.prototype.hasOwnProperty.call(params, k)) {\n\t paramsArray.push([k, params[k]].join('='));\n\t }\n\t }\n\t var query = '?' + paramsArray.sort().join('&');\n\t\n\t options = options || {};\n\t options.path = options.path || '';\n\t var qs = options.path.indexOf('?');\n\t var h = options.path.indexOf('#');\n\t var p;\n\t if (qs !== -1 && (h === -1 || h > qs)) {\n\t p = options.path;\n\t options.path = p.substring(0,qs) + query + '&' + p.substring(qs+1);\n\t } else {\n\t if (h !== -1) {\n\t p = options.path;\n\t options.path = p.substring(0,h) + query + p.substring(h);\n\t } else {\n\t options.path = options.path + query;\n\t }\n\t }\n\t}\n\t\n\tfunction formatUrl(u, protocol) {\n\t protocol = protocol || u.protocol;\n\t if (!protocol && u.port) {\n\t if (u.port === 80) {\n\t protocol = 'http:';\n\t } else if (u.port === 443) {\n\t protocol = 'https:';\n\t }\n\t }\n\t protocol = protocol || 'https:';\n\t\n\t if (!u.hostname) {\n\t return null;\n\t }\n\t var result = protocol + '//' + u.hostname;\n\t if (u.port) {\n\t result = result + ':' + u.port;\n\t }\n\t if (u.path) {\n\t result = result + u.path;\n\t }\n\t return result;\n\t}\n\t\n\tfunction stringify(obj, backup) {\n\t var value, error;\n\t try {\n\t value = RollbarJSON.stringify(obj);\n\t } catch (jsonError) {\n\t if (backup && isFunction(backup)) {\n\t try {\n\t value = backup(obj);\n\t } catch (backupError) {\n\t error = backupError;\n\t }\n\t } else {\n\t error = jsonError;\n\t }\n\t }\n\t return {error: error, value: value};\n\t}\n\t\n\tfunction jsonParse(s) {\n\t var value, error;\n\t try {\n\t value = RollbarJSON.parse(s);\n\t } catch (e) {\n\t error = e;\n\t }\n\t return {error: error, value: value};\n\t}\n\t\n\tfunction makeUnhandledStackInfo(\n\t message,\n\t url,\n\t lineno,\n\t colno,\n\t error,\n\t mode,\n\t backupMessage,\n\t errorParser\n\t) {\n\t var location = {\n\t url: url || '',\n\t line: lineno,\n\t column: colno\n\t };\n\t location.func = errorParser.guessFunctionName(location.url, location.line);\n\t location.context = errorParser.gatherContext(location.url, location.line);\n\t var href = document && document.location && document.location.href;\n\t var useragent = window && window.navigator && window.navigator.userAgent;\n\t return {\n\t 'mode': mode,\n\t 'message': error ? String(error) : (message || backupMessage),\n\t 'url': href,\n\t 'stack': [location],\n\t 'useragent': useragent\n\t };\n\t}\n\t\n\tfunction wrapCallback(logger, f) {\n\t return function(err, resp) {\n\t try {\n\t f(err, resp);\n\t } catch (e) {\n\t logger.error(e);\n\t }\n\t };\n\t}\n\t\n\tfunction createItem(args, logger, notifier, requestKeys, lambdaContext) {\n\t var message, err, custom, callback, request;\n\t var arg;\n\t var extraArgs = [];\n\t\n\t for (var i = 0, l = args.length; i < l; ++i) {\n\t arg = args[i];\n\t\n\t var typ = typeName(arg);\n\t switch (typ) {\n\t case 'undefined':\n\t break;\n\t case 'string':\n\t message ? extraArgs.push(arg) : message = arg;\n\t break;\n\t case 'function':\n\t callback = wrapCallback(logger, arg);\n\t break;\n\t case 'date':\n\t extraArgs.push(arg);\n\t break;\n\t case 'error':\n\t case 'domexception':\n\t err ? extraArgs.push(arg) : err = arg;\n\t break;\n\t case 'object':\n\t case 'array':\n\t if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n\t err ? extraArgs.push(arg) : err = arg;\n\t break;\n\t }\n\t if (requestKeys && typ === 'object' && !request) {\n\t for (var j = 0, len = requestKeys.length; j < len; ++j) {\n\t if (arg[requestKeys[j]] !== undefined) {\n\t request = arg;\n\t break;\n\t }\n\t }\n\t if (request) {\n\t break;\n\t }\n\t }\n\t custom ? extraArgs.push(arg) : custom = arg;\n\t break;\n\t default:\n\t if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n\t err ? extraArgs.push(arg) : err = arg;\n\t break;\n\t }\n\t extraArgs.push(arg);\n\t }\n\t }\n\t\n\t if (extraArgs.length > 0) {\n\t // if custom is an array this turns it into an object with integer keys\n\t custom = extend(true, {}, custom);\n\t custom.extraArgs = extraArgs;\n\t }\n\t\n\t var item = {\n\t message: message,\n\t err: err,\n\t custom: custom,\n\t timestamp: now(),\n\t callback: callback,\n\t uuid: uuid4()\n\t };\n\t if (custom && custom.level !== undefined) {\n\t item.level = custom.level;\n\t delete custom.level;\n\t }\n\t if (requestKeys && request) {\n\t item.request = request;\n\t }\n\t if (lambdaContext) {\n\t item.lambdaContext = lambdaContext;\n\t }\n\t item._originalArgs = args;\n\t return item;\n\t}\n\t\n\t/*\n\t * get - given an obj/array and a keypath, return the value at that keypath or\n\t * undefined if not possible.\n\t *\n\t * @param obj - an object or array\n\t * @param path - a string of keys separated by '.' such as 'plugin.jquery.0.message'\n\t * which would correspond to 42 in `{plugin: {jquery: [{message: 42}]}}`\n\t */\n\tfunction get(obj, path) {\n\t if (!obj) {\n\t return undefined;\n\t }\n\t var keys = path.split('.');\n\t var result = obj;\n\t try {\n\t for (var i = 0, len = keys.length; i < len; ++i) {\n\t result = result[keys[i]];\n\t }\n\t } catch (e) {\n\t result = undefined;\n\t }\n\t return result;\n\t}\n\t\n\tfunction set(obj, path, value) {\n\t if (!obj) {\n\t return;\n\t }\n\t var keys = path.split('.');\n\t var len = keys.length;\n\t if (len < 1) {\n\t return;\n\t }\n\t if (len === 1) {\n\t obj[keys[0]] = value;\n\t return;\n\t }\n\t try {\n\t var temp = obj[keys[0]] || {};\n\t var replacement = temp;\n\t for (var i = 1; i < len-1; i++) {\n\t temp[keys[i]] = temp[keys[i]] || {};\n\t temp = temp[keys[i]];\n\t }\n\t temp[keys[len-1]] = value;\n\t obj[keys[0]] = replacement;\n\t } catch (e) {\n\t return;\n\t }\n\t}\n\t\n\tfunction scrub(data, scrubFields) {\n\t scrubFields = scrubFields || [];\n\t var paramRes = _getScrubFieldRegexs(scrubFields);\n\t var queryRes = _getScrubQueryParamRegexs(scrubFields);\n\t\n\t function redactQueryParam(dummy0, paramPart, dummy1, dummy2, dummy3, valPart) {\n\t return paramPart + redact(valPart);\n\t }\n\t\n\t function paramScrubber(v) {\n\t var i;\n\t if (isType(v, 'string')) {\n\t for (i = 0; i < queryRes.length; ++i) {\n\t v = v.replace(queryRes[i], redactQueryParam);\n\t }\n\t }\n\t return v;\n\t }\n\t\n\t function valScrubber(k, v) {\n\t var i;\n\t for (i = 0; i < paramRes.length; ++i) {\n\t if (paramRes[i].test(k)) {\n\t v = redact(v);\n\t break;\n\t }\n\t }\n\t return v;\n\t }\n\t\n\t function scrubber(k, v, seen) {\n\t var tmpV = valScrubber(k, v);\n\t if (tmpV === v) {\n\t if (isType(v, 'object') || isType(v, 'array')) {\n\t return traverse(v, scrubber, seen);\n\t }\n\t return paramScrubber(tmpV);\n\t } else {\n\t return tmpV;\n\t }\n\t }\n\t\n\t return traverse(data, scrubber, []);\n\t}\n\t\n\tfunction _getScrubFieldRegexs(scrubFields) {\n\t var ret = [];\n\t var pat;\n\t for (var i = 0; i < scrubFields.length; ++i) {\n\t pat = '^\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?$';\n\t ret.push(new RegExp(pat, 'i'));\n\t }\n\t return ret;\n\t}\n\t\n\t\n\tfunction _getScrubQueryParamRegexs(scrubFields) {\n\t var ret = [];\n\t var pat;\n\t for (var i = 0; i < scrubFields.length; ++i) {\n\t pat = '\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?';\n\t ret.push(new RegExp('(' + pat + '=)([^&\\\\n]+)', 'igm'));\n\t }\n\t return ret;\n\t}\n\t\n\tfunction formatArgsAsString(args) {\n\t var i, len, arg;\n\t var result = [];\n\t for (i = 0, len = args.length; i < len; i++) {\n\t arg = args[i];\n\t if (typeof arg === 'object') {\n\t arg = stringify(arg);\n\t arg = arg.error || arg.value;\n\t if (arg.length > 500)\n\t arg = arg.substr(0,500)+'...';\n\t } else if (typeof arg === 'undefined') {\n\t arg = 'undefined';\n\t }\n\t result.push(arg);\n\t }\n\t return result.join(' ');\n\t}\n\t\n\tfunction now() {\n\t if (Date.now) {\n\t return +Date.now();\n\t }\n\t return +new Date();\n\t}\n\t\n\tmodule.exports = {\n\t isType: isType,\n\t typeName: typeName,\n\t isFunction: isFunction,\n\t isNativeFunction: isNativeFunction,\n\t isIterable: isIterable,\n\t isError: isError,\n\t extend: extend,\n\t traverse: traverse,\n\t redact: redact,\n\t uuid4: uuid4,\n\t LEVELS: LEVELS,\n\t sanitizeUrl: sanitizeUrl,\n\t addParamsAndAccessTokenToPath: addParamsAndAccessTokenToPath,\n\t formatUrl: formatUrl,\n\t stringify: stringify,\n\t jsonParse: jsonParse,\n\t makeUnhandledStackInfo: makeUnhandledStackInfo,\n\t createItem: createItem,\n\t get: get,\n\t set: set,\n\t scrub: scrub,\n\t formatArgsAsString: formatArgsAsString,\n\t now: now\n\t};\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tvar hasOwn = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\t\n\tvar isArray = function isArray(arr) {\n\t\tif (typeof Array.isArray === 'function') {\n\t\t\treturn Array.isArray(arr);\n\t\t}\n\t\n\t\treturn toStr.call(arr) === '[object Array]';\n\t};\n\t\n\tvar isPlainObject = function isPlainObject(obj) {\n\t\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\t\treturn false;\n\t\t}\n\t\n\t\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\t\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t\t// Not own constructor property must be Object\n\t\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\t\treturn false;\n\t\t}\n\t\n\t\t// Own properties are enumerated firstly, so to speed up,\n\t\t// if last one is own, then all properties are own.\n\t\tvar key;\n\t\tfor (key in obj) {/**/}\n\t\n\t\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n\t};\n\t\n\tmodule.exports = function extend() {\n\t\tvar options, name, src, copy, copyIsArray, clone,\n\t\t\ttarget = arguments[0],\n\t\t\ti = 1,\n\t\t\tlength = arguments.length,\n\t\t\tdeep = false;\n\t\n\t\t// Handle a deep copy situation\n\t\tif (typeof target === 'boolean') {\n\t\t\tdeep = target;\n\t\t\ttarget = arguments[1] || {};\n\t\t\t// skip the boolean and the target\n\t\t\ti = 2;\n\t\t} else if ((typeof target !== 'object' && typeof target !== 'function') || target == null) {\n\t\t\ttarget = {};\n\t\t}\n\t\n\t\tfor (; i < length; ++i) {\n\t\t\toptions = arguments[i];\n\t\t\t// Only deal with non-null/undefined values\n\t\t\tif (options != null) {\n\t\t\t\t// Extend the base object\n\t\t\t\tfor (name in options) {\n\t\t\t\t\tsrc = target[name];\n\t\t\t\t\tcopy = options[name];\n\t\n\t\t\t\t\t// Prevent never-ending loop\n\t\t\t\t\tif (target !== copy) {\n\t\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\t\ttarget[name] = extend(deep, clone, copy);\n\t\n\t\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\t// Return the modified object\n\t\treturn target;\n\t};\n\t\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports) {\n\n\t// json3.js\n\t// 2017-02-21\n\t// Public Domain.\n\t// NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n\t// See http://www.JSON.org/js.html\n\t// This code should be minified before deployment.\n\t// See http://javascript.crockford.com/jsmin.html\n\t\n\t// USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n\t// NOT CONTROL.\n\t\n\t// This file creates a global JSON object containing two methods: stringify\n\t// and parse. This file provides the ES5 JSON capability to ES3 systems.\n\t// If a project might run on IE8 or earlier, then this file should be included.\n\t// This file does nothing on ES5 systems.\n\t\n\t// JSON.stringify(value, replacer, space)\n\t// value any JavaScript value, usually an object or array.\n\t// replacer an optional parameter that determines how object\n\t// values are stringified for objects. It can be a\n\t// function or an array of strings.\n\t// space an optional parameter that specifies the indentation\n\t// of nested structures. If it is omitted, the text will\n\t// be packed without extra whitespace. If it is a number,\n\t// it will specify the number of spaces to indent at each\n\t// level. If it is a string (such as \"\\t\" or \" \"),\n\t// it contains the characters used to indent at each level.\n\t// This method produces a JSON text from a JavaScript value.\n\t// When an object value is found, if the object contains a toJSON\n\t// method, its toJSON method will be called and the result will be\n\t// stringified. A toJSON method does not serialize: it returns the\n\t// value represented by the name/value pair that should be serialized,\n\t// or undefined if nothing should be serialized. The toJSON method\n\t// will be passed the key associated with the value, and this will be\n\t// bound to the value.\n\t\n\t// For example, this would serialize Dates as ISO strings.\n\t\n\t// Date.prototype.toJSON = function (key) {\n\t// function f(n) {\n\t// // Format integers to have at least two digits.\n\t// return (n < 10)\n\t// ? \"0\" + n\n\t// : n;\n\t// }\n\t// return this.getUTCFullYear() + \"-\" +\n\t// f(this.getUTCMonth() + 1) + \"-\" +\n\t// f(this.getUTCDate()) + \"T\" +\n\t// f(this.getUTCHours()) + \":\" +\n\t// f(this.getUTCMinutes()) + \":\" +\n\t// f(this.getUTCSeconds()) + \"Z\";\n\t// };\n\t\n\t// You can provide an optional replacer method. It will be passed the\n\t// key and value of each member, with this bound to the containing\n\t// object. The value that is returned from your method will be\n\t// serialized. If your method returns undefined, then the member will\n\t// be excluded from the serialization.\n\t\n\t// If the replacer parameter is an array of strings, then it will be\n\t// used to select the members to be serialized. It filters the results\n\t// such that only members with keys listed in the replacer array are\n\t// stringified.\n\t\n\t// Values that do not have JSON representations, such as undefined or\n\t// functions, will not be serialized. Such values in objects will be\n\t// dropped; in arrays they will be replaced with null. You can use\n\t// a replacer function to replace those with JSON values.\n\t\n\t// JSON.stringify(undefined) returns undefined.\n\t\n\t// The optional space parameter produces a stringification of the\n\t// value that is filled with line breaks and indentation to make it\n\t// easier to read.\n\t\n\t// If the space parameter is a non-empty string, then that string will\n\t// be used for indentation. If the space parameter is a number, then\n\t// the indentation will be that many spaces.\n\t\n\t// Example:\n\t\n\t// text = JSON.stringify([\"e\", {pluribus: \"unum\"}]);\n\t// // text is '[\"e\",{\"pluribus\":\"unum\"}]'\n\t\n\t// text = JSON.stringify([\"e\", {pluribus: \"unum\"}], null, \"\\t\");\n\t// // text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\n\t\n\t// text = JSON.stringify([new Date()], function (key, value) {\n\t// return this[key] instanceof Date\n\t// ? \"Date(\" + this[key] + \")\"\n\t// : value;\n\t// });\n\t// // text is '[\"Date(---current time---)\"]'\n\t\n\t// JSON.parse(text, reviver)\n\t// This method parses a JSON text to produce an object or array.\n\t// It can throw a SyntaxError exception.\n\t// This has been modified to use JSON-js/json_parse_state.js as the\n\t// parser instead of the one built around eval found in JSON-js/json2.js\n\t\n\t// The optional reviver parameter is a function that can filter and\n\t// transform the results. It receives each of the keys and values,\n\t// and its return value is used instead of the original value.\n\t// If it returns what it received, then the structure is not modified.\n\t// If it returns undefined then the member is deleted.\n\t\n\t// Example:\n\t\n\t// // Parse the text. Values that look like ISO date strings will\n\t// // be converted to Date objects.\n\t\n\t// myData = JSON.parse(text, function (key, value) {\n\t// var a;\n\t// if (typeof value === \"string\") {\n\t// a =\n\t// /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n\t// if (a) {\n\t// return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n\t// +a[5], +a[6]));\n\t// }\n\t// }\n\t// return value;\n\t// });\n\t\n\t// myData = JSON.parse('[\"Date(09/09/2001)\"]', function (key, value) {\n\t// var d;\n\t// if (typeof value === \"string\" &&\n\t// value.slice(0, 5) === \"Date(\" &&\n\t// value.slice(-1) === \")\") {\n\t// d = new Date(value.slice(5, -1));\n\t// if (d) {\n\t// return d;\n\t// }\n\t// }\n\t// return value;\n\t// });\n\t\n\t// This is a reference implementation. You are free to copy, modify, or\n\t// redistribute.\n\t\n\t/*jslint\n\t for, this\n\t */\n\t\n\t/*property\n\t JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\n\t getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\n\t lastIndex, length, parse, prototype, push, replace, slice, stringify,\n\t test, toJSON, toString, valueOf\n\t */\n\t\n\tvar setupCustomJSON = function(JSON) {\n\t\n\t var rx_one = /^[\\],:{}\\s]*$/;\n\t var rx_two = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g;\n\t var rx_three = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\n\t var rx_four = /(?:^|:|,)(?:\\s*\\[)+/g;\n\t var rx_escapable = /[\\\\\"\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\t var rx_dangerous = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\t\n\t function f(n) {\n\t // Format integers to have at least two digits.\n\t return n < 10\n\t ? \"0\" + n\n\t : n;\n\t }\n\t\n\t function this_value() {\n\t return this.valueOf();\n\t }\n\t\n\t if (typeof Date.prototype.toJSON !== \"function\") {\n\t\n\t Date.prototype.toJSON = function () {\n\t\n\t return isFinite(this.valueOf())\n\t ? this.getUTCFullYear() + \"-\" +\n\t f(this.getUTCMonth() + 1) + \"-\" +\n\t f(this.getUTCDate()) + \"T\" +\n\t f(this.getUTCHours()) + \":\" +\n\t f(this.getUTCMinutes()) + \":\" +\n\t f(this.getUTCSeconds()) + \"Z\"\n\t : null;\n\t };\n\t\n\t Boolean.prototype.toJSON = this_value;\n\t Number.prototype.toJSON = this_value;\n\t String.prototype.toJSON = this_value;\n\t }\n\t\n\t var gap;\n\t var indent;\n\t var meta;\n\t var rep;\n\t\n\t\n\t function quote(string) {\n\t\n\t // If the string contains no control characters, no quote characters, and no\n\t // backslash characters, then we can safely slap some quotes around it.\n\t // Otherwise we must also replace the offending characters with safe escape\n\t // sequences.\n\t\n\t rx_escapable.lastIndex = 0;\n\t return rx_escapable.test(string)\n\t ? \"\\\"\" + string.replace(rx_escapable, function (a) {\n\t var c = meta[a];\n\t return typeof c === \"string\"\n\t ? c\n\t : \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n\t }) + \"\\\"\"\n\t : \"\\\"\" + string + \"\\\"\";\n\t }\n\t\n\t\n\t function str(key, holder) {\n\t\n\t // Produce a string from holder[key].\n\t\n\t var i; // The loop counter.\n\t var k; // The member key.\n\t var v; // The member value.\n\t var length;\n\t var mind = gap;\n\t var partial;\n\t var value = holder[key];\n\t\n\t // If the value has a toJSON method, call it to obtain a replacement value.\n\t\n\t if (value && typeof value === \"object\" &&\n\t typeof value.toJSON === \"function\") {\n\t value = value.toJSON(key);\n\t }\n\t\n\t // If we were called with a replacer function, then call the replacer to\n\t // obtain a replacement value.\n\t\n\t if (typeof rep === \"function\") {\n\t value = rep.call(holder, key, value);\n\t }\n\t\n\t // What happens next depends on the value's type.\n\t\n\t switch (typeof value) {\n\t case \"string\":\n\t return quote(value);\n\t\n\t case \"number\":\n\t\n\t // JSON numbers must be finite. Encode non-finite numbers as null.\n\t\n\t return isFinite(value)\n\t ? String(value)\n\t : \"null\";\n\t\n\t case \"boolean\":\n\t case \"null\":\n\t\n\t // If the value is a boolean or null, convert it to a string. Note:\n\t // typeof null does not produce \"null\". The case is included here in\n\t // the remote chance that this gets fixed someday.\n\t\n\t return String(value);\n\t\n\t // If the type is \"object\", we might be dealing with an object or an array or\n\t // null.\n\t\n\t case \"object\":\n\t\n\t // Due to a specification blunder in ECMAScript, typeof null is \"object\",\n\t // so watch out for that case.\n\t\n\t if (!value) {\n\t return \"null\";\n\t }\n\t\n\t // Make an array to hold the partial results of stringifying this object value.\n\t\n\t gap += indent;\n\t partial = [];\n\t\n\t // Is the value an array?\n\t\n\t if (Object.prototype.toString.apply(value) === \"[object Array]\") {\n\t\n\t // The value is an array. Stringify every element. Use null as a placeholder\n\t // for non-JSON values.\n\t\n\t length = value.length;\n\t for (i = 0; i < length; i += 1) {\n\t partial[i] = str(i, value) || \"null\";\n\t }\n\t\n\t // Join all of the elements together, separated with commas, and wrap them in\n\t // brackets.\n\t\n\t v = partial.length === 0\n\t ? \"[]\"\n\t : gap\n\t ? \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\"\n\t : \"[\" + partial.join(\",\") + \"]\";\n\t gap = mind;\n\t return v;\n\t }\n\t\n\t // If the replacer is an array, use it to select the members to be stringified.\n\t\n\t if (rep && typeof rep === \"object\") {\n\t length = rep.length;\n\t for (i = 0; i < length; i += 1) {\n\t if (typeof rep[i] === \"string\") {\n\t k = rep[i];\n\t v = str(k, value);\n\t if (v) {\n\t partial.push(quote(k) + (\n\t gap\n\t ? \": \"\n\t : \":\"\n\t ) + v);\n\t }\n\t }\n\t }\n\t } else {\n\t\n\t // Otherwise, iterate through all of the keys in the object.\n\t\n\t for (k in value) {\n\t if (Object.prototype.hasOwnProperty.call(value, k)) {\n\t v = str(k, value);\n\t if (v) {\n\t partial.push(quote(k) + (\n\t gap\n\t ? \": \"\n\t : \":\"\n\t ) + v);\n\t }\n\t }\n\t }\n\t }\n\t\n\t // Join all of the member texts together, separated with commas,\n\t // and wrap them in braces.\n\t\n\t v = partial.length === 0\n\t ? \"{}\"\n\t : gap\n\t ? \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\"\n\t : \"{\" + partial.join(\",\") + \"}\";\n\t gap = mind;\n\t return v;\n\t }\n\t }\n\t\n\t // If the JSON object does not yet have a stringify method, give it one.\n\t\n\t if (typeof JSON.stringify !== \"function\") {\n\t meta = { // table of character substitutions\n\t \"\\b\": \"\\\\b\",\n\t \"\\t\": \"\\\\t\",\n\t \"\\n\": \"\\\\n\",\n\t \"\\f\": \"\\\\f\",\n\t \"\\r\": \"\\\\r\",\n\t \"\\\"\": \"\\\\\\\"\",\n\t \"\\\\\": \"\\\\\\\\\"\n\t };\n\t JSON.stringify = function (value, replacer, space) {\n\t\n\t // The stringify method takes a value and an optional replacer, and an optional\n\t // space parameter, and returns a JSON text. The replacer can be a function\n\t // that can replace values, or an array of strings that will select the keys.\n\t // A default replacer method can be provided. Use of the space parameter can\n\t // produce text that is more easily readable.\n\t\n\t var i;\n\t gap = \"\";\n\t indent = \"\";\n\t\n\t // If the space parameter is a number, make an indent string containing that\n\t // many spaces.\n\t\n\t if (typeof space === \"number\") {\n\t for (i = 0; i < space; i += 1) {\n\t indent += \" \";\n\t }\n\t\n\t // If the space parameter is a string, it will be used as the indent string.\n\t\n\t } else if (typeof space === \"string\") {\n\t indent = space;\n\t }\n\t\n\t // If there is a replacer, it must be a function or an array.\n\t // Otherwise, throw an error.\n\t\n\t rep = replacer;\n\t if (replacer && typeof replacer !== \"function\" &&\n\t (typeof replacer !== \"object\" ||\n\t typeof replacer.length !== \"number\")) {\n\t throw new Error(\"JSON.stringify\");\n\t }\n\t\n\t // Make a fake root object containing our value under the key of \"\".\n\t // Return the result of stringifying the value.\n\t\n\t return str(\"\", {\"\": value});\n\t };\n\t }\n\t\n\t\n\t // If the JSON object does not yet have a parse method, give it one.\n\t\n\t if (typeof JSON.parse !== \"function\") {\n\t JSON.parse = (function () {\n\t\n\t // This function creates a JSON parse function that uses a state machine rather\n\t // than the dangerous eval function to parse a JSON text.\n\t\n\t var state; // The state of the parser, one of\n\t // 'go' The starting state\n\t // 'ok' The final, accepting state\n\t // 'firstokey' Ready for the first key of the object or\n\t // the closing of an empty object\n\t // 'okey' Ready for the next key of the object\n\t // 'colon' Ready for the colon\n\t // 'ovalue' Ready for the value half of a key/value pair\n\t // 'ocomma' Ready for a comma or closing }\n\t // 'firstavalue' Ready for the first value of an array or\n\t // an empty array\n\t // 'avalue' Ready for the next value of an array\n\t // 'acomma' Ready for a comma or closing ]\n\t var stack; // The stack, for controlling nesting.\n\t var container; // The current container object or array\n\t var key; // The current key\n\t var value; // The current value\n\t var escapes = { // Escapement translation table\n\t \"\\\\\": \"\\\\\",\n\t \"\\\"\": \"\\\"\",\n\t \"/\": \"/\",\n\t \"t\": \"\\t\",\n\t \"n\": \"\\n\",\n\t \"r\": \"\\r\",\n\t \"f\": \"\\f\",\n\t \"b\": \"\\b\"\n\t };\n\t var string = { // The actions for string tokens\n\t go: function () {\n\t state = \"ok\";\n\t },\n\t firstokey: function () {\n\t key = value;\n\t state = \"colon\";\n\t },\n\t okey: function () {\n\t key = value;\n\t state = \"colon\";\n\t },\n\t ovalue: function () {\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t state = \"acomma\";\n\t }\n\t };\n\t var number = { // The actions for number tokens\n\t go: function () {\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t state = \"acomma\";\n\t }\n\t };\n\t var action = {\n\t\n\t // The action table describes the behavior of the machine. It contains an\n\t // object for each token. Each object contains a method that is called when\n\t // a token is matched in a state. An object will lack a method for illegal\n\t // states.\n\t\n\t \"{\": {\n\t go: function () {\n\t stack.push({state: \"ok\"});\n\t container = {};\n\t state = \"firstokey\";\n\t },\n\t ovalue: function () {\n\t stack.push({container: container, state: \"ocomma\", key: key});\n\t container = {};\n\t state = \"firstokey\";\n\t },\n\t firstavalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = {};\n\t state = \"firstokey\";\n\t },\n\t avalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = {};\n\t state = \"firstokey\";\n\t }\n\t },\n\t \"}\": {\n\t firstokey: function () {\n\t var pop = stack.pop();\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t },\n\t ocomma: function () {\n\t var pop = stack.pop();\n\t container[key] = value;\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t }\n\t },\n\t \"[\": {\n\t go: function () {\n\t stack.push({state: \"ok\"});\n\t container = [];\n\t state = \"firstavalue\";\n\t },\n\t ovalue: function () {\n\t stack.push({container: container, state: \"ocomma\", key: key});\n\t container = [];\n\t state = \"firstavalue\";\n\t },\n\t firstavalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = [];\n\t state = \"firstavalue\";\n\t },\n\t avalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = [];\n\t state = \"firstavalue\";\n\t }\n\t },\n\t \"]\": {\n\t firstavalue: function () {\n\t var pop = stack.pop();\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t },\n\t acomma: function () {\n\t var pop = stack.pop();\n\t container.push(value);\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t }\n\t },\n\t \":\": {\n\t colon: function () {\n\t if (Object.hasOwnProperty.call(container, key)) {\n\t throw new SyntaxError(\"Duplicate key '\" + key + \"\\\"\");\n\t }\n\t state = \"ovalue\";\n\t }\n\t },\n\t \",\": {\n\t ocomma: function () {\n\t container[key] = value;\n\t state = \"okey\";\n\t },\n\t acomma: function () {\n\t container.push(value);\n\t state = \"avalue\";\n\t }\n\t },\n\t \"true\": {\n\t go: function () {\n\t value = true;\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t value = true;\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t value = true;\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t value = true;\n\t state = \"acomma\";\n\t }\n\t },\n\t \"false\": {\n\t go: function () {\n\t value = false;\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t value = false;\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t value = false;\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t value = false;\n\t state = \"acomma\";\n\t }\n\t },\n\t \"null\": {\n\t go: function () {\n\t value = null;\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t value = null;\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t value = null;\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t value = null;\n\t state = \"acomma\";\n\t }\n\t }\n\t };\n\t\n\t function debackslashify(text) {\n\t\n\t // Remove and replace any backslash escapement.\n\t\n\t return text.replace(/\\\\(?:u(.{4})|([^u]))/g, function (ignore, b, c) {\n\t return b\n\t ? String.fromCharCode(parseInt(b, 16))\n\t : escapes[c];\n\t });\n\t }\n\t\n\t return function (source, reviver) {\n\t\n\t // A regular expression is used to extract tokens from the JSON text.\n\t // The extraction process is cautious.\n\t\n\t var result;\n\t var tx = /^[\\u0020\\t\\n\\r]*(?:([,:\\[\\]{}]|true|false|null)|(-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)|\"((?:[^\\r\\n\\t\\\\\\\"]|\\\\(?:[\"\\\\\\/trnfb]|u[0-9a-fA-F]{4}))*)\")/;\n\t\n\t // Set the starting state.\n\t\n\t state = \"go\";\n\t\n\t // The stack records the container, key, and state for each object or array\n\t // that contains another object or array while processing nested structures.\n\t\n\t stack = [];\n\t\n\t // If any error occurs, we will catch it and ultimately throw a syntax error.\n\t\n\t try {\n\t\n\t // For each token...\n\t\n\t while (true) {\n\t result = tx.exec(source);\n\t if (!result) {\n\t break;\n\t }\n\t\n\t // result is the result array from matching the tokenizing regular expression.\n\t // result[0] contains everything that matched, including any initial whitespace.\n\t // result[1] contains any punctuation that was matched, or true, false, or null.\n\t // result[2] contains a matched number, still in string form.\n\t // result[3] contains a matched string, without quotes but with escapement.\n\t\n\t if (result[1]) {\n\t\n\t // Token: Execute the action for this state and token.\n\t\n\t action[result[1]][state]();\n\t\n\t } else if (result[2]) {\n\t\n\t // Number token: Convert the number string into a number value and execute\n\t // the action for this state and number.\n\t\n\t value = +result[2];\n\t number[state]();\n\t } else {\n\t\n\t // String token: Replace the escapement sequences and execute the action for\n\t // this state and string.\n\t\n\t value = debackslashify(result[3]);\n\t string[state]();\n\t }\n\t\n\t // Remove the token from the string. The loop will continue as long as there\n\t // are tokens. This is a slow process, but it allows the use of ^ matching,\n\t // which assures that no illegal tokens slip through.\n\t\n\t source = source.slice(result[0].length);\n\t }\n\t\n\t // If we find a state/token combination that is illegal, then the action will\n\t // cause an error. We handle the error by simply changing the state.\n\t\n\t } catch (e) {\n\t state = e;\n\t }\n\t\n\t // The parsing is finished. If we are not in the final \"ok\" state, or if the\n\t // remaining source contains anything except whitespace, then we did not have\n\t //a well-formed JSON text.\n\t\n\t if (state !== \"ok\" || (/[^\\u0020\\t\\n\\r]/.test(source))) {\n\t throw (state instanceof SyntaxError)\n\t ? state\n\t : new SyntaxError(\"JSON\");\n\t }\n\t\n\t // If there is a reviver function, we recursively walk the new structure,\n\t // passing each name/value pair to the reviver function for possible\n\t // transformation, starting with a temporary root object that holds the current\n\t // value in an empty key. If there is not a reviver function, we simply return\n\t // that value.\n\t\n\t return (typeof reviver === \"function\")\n\t ? (function walk(holder, key) {\n\t var k;\n\t var v;\n\t var val = holder[key];\n\t if (val && typeof val === \"object\") {\n\t for (k in value) {\n\t if (Object.prototype.hasOwnProperty.call(val, k)) {\n\t v = walk(val, k);\n\t if (v !== undefined) {\n\t val[k] = v;\n\t } else {\n\t delete val[k];\n\t }\n\t }\n\t }\n\t }\n\t return reviver.call(holder, key, val);\n\t }({\"\": value}, \"\"))\n\t : value;\n\t };\n\t }());\n\t }\n\t}\n\t\n\tmodule.exports = setupCustomJSON;\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\t\n\t/*\n\t * Notifier - the internal object responsible for delegating between the client exposed API, the\n\t * chain of transforms necessary to turn an item into something that can be sent to Rollbar, and the\n\t * queue which handles the communcation with the Rollbar API servers.\n\t *\n\t * @param queue - an object that conforms to the interface: addItem(item, callback)\n\t * @param options - an object representing the options to be set for this notifier, this should have\n\t * any defaults already set by the caller\n\t */\n\tfunction Notifier(queue, options) {\n\t this.queue = queue;\n\t this.options = options;\n\t this.transforms = [];\n\t}\n\t\n\t/*\n\t * configure - updates the options for this notifier with the passed in object\n\t *\n\t * @param options - an object which gets merged with the current options set on this notifier\n\t * @returns this\n\t */\n\tNotifier.prototype.configure = function(options) {\n\t this.queue && this.queue.configure(options);\n\t var oldOptions = this.options;\n\t this.options = _.extend(true, {}, oldOptions, options);\n\t return this;\n\t};\n\t\n\t/*\n\t * addTransform - adds a transform onto the end of the queue of transforms for this notifier\n\t *\n\t * @param transform - a function which takes three arguments:\n\t * * item: An Object representing the data to eventually be sent to Rollbar\n\t * * options: The current value of the options for this notifier\n\t * * callback: function(err: (Null|Error), item: (Null|Object)) the transform must call this\n\t * callback with a null value for error if it wants the processing chain to continue, otherwise\n\t * with an error to terminate the processing. The item should be the updated item after this\n\t * transform is finished modifying it.\n\t */\n\tNotifier.prototype.addTransform = function(transform) {\n\t if (_.isFunction(transform)) {\n\t this.transforms.push(transform);\n\t }\n\t return this;\n\t};\n\t\n\t/*\n\t * log - the internal log function which applies the configured transforms and then pushes onto the\n\t * queue to be sent to the backend.\n\t *\n\t * @param item - An object with the following structure:\n\t * message [String] - An optional string to be sent to rollbar\n\t * error [Error] - An optional error\n\t *\n\t * @param callback - A function of type function(err, resp) which will be called with exactly one\n\t * null argument and one non-null argument. The callback will be called once, either during the\n\t * transform stage if an error occurs inside a transform, or in response to the communication with\n\t * the backend. The second argument will be the response from the backend in case of success.\n\t */\n\tNotifier.prototype.log = function(item, callback) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t\n\t if (!this.options.enabled) {\n\t return callback(new Error('Rollbar is not enabled'));\n\t }\n\t\n\t this.queue.addPendingItem(item);\n\t var originalError = item.err;\n\t this._applyTransforms(item, function(err, i) {\n\t if (err) {\n\t this.queue.removePendingItem(item);\n\t return callback(err, null);\n\t }\n\t this.queue.addItem(i, callback, originalError, item);\n\t }.bind(this));\n\t};\n\t\n\t/* Internal */\n\t\n\t/*\n\t * _applyTransforms - Applies the transforms that have been added to this notifier sequentially. See\n\t * `addTransform` for more information.\n\t *\n\t * @param item - An item to be transformed\n\t * @param callback - A function of type function(err, item) which will be called with a non-null\n\t * error and a null item in the case of a transform failure, or a null error and non-null item after\n\t * all transforms have been applied.\n\t */\n\tNotifier.prototype._applyTransforms = function(item, callback) {\n\t var transformIndex = -1;\n\t var transformsLength = this.transforms.length;\n\t var transforms = this.transforms;\n\t var options = this.options;\n\t\n\t var cb = function(err, i) {\n\t if (err) {\n\t callback(err, null);\n\t return;\n\t }\n\t\n\t transformIndex++;\n\t\n\t if (transformIndex === transformsLength) {\n\t callback(null, i);\n\t return;\n\t }\n\t\n\t transforms[transformIndex](i, options, cb);\n\t };\n\t\n\t cb(null, item);\n\t};\n\t\n\tmodule.exports = Notifier;\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\t\n\tvar MAX_EVENTS = 100;\n\t\n\tfunction Telemeter(options) {\n\t this.queue = [];\n\t this.options = _.extend(true, {}, options);\n\t var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n\t this.maxQueueSize = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n\t}\n\t\n\tTelemeter.prototype.configure = function(options) {\n\t var oldOptions = this.options;\n\t this.options = _.extend(true, {}, oldOptions, options);\n\t var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n\t var newMaxEvents = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n\t var deleteCount = 0;\n\t if (this.maxQueueSize > newMaxEvents) {\n\t deleteCount = this.maxQueueSize - newMaxEvents;\n\t }\n\t this.maxQueueSize = newMaxEvents;\n\t this.queue.splice(0, deleteCount);\n\t};\n\t\n\tTelemeter.prototype.copyEvents = function() {\n\t return Array.prototype.slice.call(this.queue, 0);\n\t};\n\t\n\tTelemeter.prototype.capture = function(type, metadata, level, rollbarUUID, timestamp) {\n\t var e = {\n\t level: getLevel(type, level),\n\t type: type,\n\t timestamp_ms: timestamp || _.now(),\n\t body: metadata,\n\t source: 'client'\n\t };\n\t if (rollbarUUID) {\n\t e.uuid = rollbarUUID;\n\t }\n\t\n\t try {\n\t if (_.isFunction(this.options.filterTelemetry) && this.options.filterTelemetry(e)) {\n\t return false;\n\t }\n\t } catch (e) {\n\t this.options.filterTelemetry = null;\n\t }\n\t\n\t this.push(e);\n\t return e;\n\t};\n\t\n\tTelemeter.prototype.captureEvent = function(metadata, level, rollbarUUID) {\n\t return this.capture('manual', metadata, level, rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.captureError = function(err, level, rollbarUUID, timestamp) {\n\t var metadata = {\n\t message: err.message || String(err)\n\t };\n\t if (err.stack) {\n\t metadata.stack = err.stack;\n\t }\n\t return this.capture('error', metadata, level, rollbarUUID, timestamp);\n\t};\n\t\n\tTelemeter.prototype.captureLog = function(message, level, rollbarUUID, timestamp) {\n\t return this.capture('log', {\n\t message: message\n\t }, level, rollbarUUID, timestamp);\n\t};\n\t\n\tTelemeter.prototype.captureNetwork = function(metadata, subtype, rollbarUUID, requestData) {\n\t subtype = subtype || 'xhr';\n\t metadata.subtype = metadata.subtype || subtype;\n\t if (requestData) {\n\t metadata.request = requestData;\n\t }\n\t var level = this.levelFromStatus(metadata.status_code);\n\t return this.capture('network', metadata, level, rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.levelFromStatus = function(statusCode) {\n\t if (statusCode >= 200 && statusCode < 400) {\n\t return 'info';\n\t }\n\t if (statusCode === 0 || statusCode >= 400) {\n\t return 'error';\n\t }\n\t return 'info';\n\t};\n\t\n\tTelemeter.prototype.captureDom = function(subtype, element, value, checked, rollbarUUID) {\n\t var metadata = {\n\t subtype: subtype,\n\t element: element\n\t };\n\t if (value !== undefined) {\n\t metadata.value = value;\n\t }\n\t if (checked !== undefined) {\n\t metadata.checked = checked;\n\t }\n\t return this.capture('dom', metadata, 'info', rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.captureNavigation = function(from, to, rollbarUUID) {\n\t return this.capture('navigation', {from: from, to: to}, 'info', rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.captureDomContentLoaded = function(ts) {\n\t return this.capture('navigation', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n\t /**\n\t * If we decide to make this a dom event instead, then use the line below:\n\t return this.capture('dom', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n\t */\n\t};\n\tTelemeter.prototype.captureLoad = function(ts) {\n\t return this.capture('navigation', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n\t /**\n\t * If we decide to make this a dom event instead, then use the line below:\n\t return this.capture('dom', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n\t */\n\t};\n\t\n\tTelemeter.prototype.captureConnectivityChange = function(type, rollbarUUID) {\n\t return this.captureNetwork({change: type}, 'connectivity', rollbarUUID);\n\t};\n\t\n\t// Only intended to be used internally by the notifier\n\tTelemeter.prototype._captureRollbarItem = function(item) {\n\t if (!this.options.includeItemsInTelemetry) {\n\t return;\n\t }\n\t if (item.err) {\n\t return this.captureError(item.err, item.level, item.uuid, item.timestamp);\n\t }\n\t if (item.message) {\n\t return this.captureLog(item.message, item.level, item.uuid, item.timestamp);\n\t }\n\t if (item.custom) {\n\t return this.capture('log', item.custom, item.level, item.uuid, item.timestamp);\n\t }\n\t};\n\t\n\tTelemeter.prototype.push = function(e) {\n\t this.queue.push(e);\n\t if (this.queue.length > this.maxQueueSize) {\n\t this.queue.shift();\n\t }\n\t};\n\t\n\tfunction getLevel(type, level) {\n\t if (level) {\n\t return level;\n\t }\n\t var defaultLevel = {\n\t error: 'error',\n\t manual: 'info'\n\t };\n\t return defaultLevel[type] || 'info';\n\t}\n\t\n\tmodule.exports = Telemeter;\n\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\tvar helpers = __webpack_require__(12);\n\t\n\tvar defaultOptions = {\n\t hostname: 'api.rollbar.com',\n\t path: '/api/1/item/',\n\t search: null,\n\t version: '1',\n\t protocol: 'https:',\n\t port: 443\n\t};\n\t\n\t/**\n\t * Api is an object that encapsulates methods of communicating with\n\t * the Rollbar API. It is a standard interface with some parts implemented\n\t * differently for server or browser contexts. It is an object that should\n\t * be instantiated when used so it can contain non-global options that may\n\t * be different for another instance of RollbarApi.\n\t *\n\t * @param options {\n\t * accessToken: the accessToken to use for posting items to rollbar\n\t * endpoint: an alternative endpoint to send errors to\n\t * must be a valid, fully qualified URL.\n\t * The default is: https://api.rollbar.com/api/1/item\n\t * proxy: if you wish to proxy requests provide an object\n\t * with the following keys:\n\t * host or hostname (required): foo.example.com\n\t * port (optional): 123\n\t * protocol (optional): https\n\t * }\n\t */\n\tfunction Api(options, t, u, j) {\n\t this.options = options;\n\t this.transport = t;\n\t this.url = u;\n\t this.jsonBackup = j;\n\t this.accessToken = options.accessToken;\n\t this.transportOptions = _getTransport(options, u);\n\t}\n\t\n\t/**\n\t *\n\t * @param data\n\t * @param callback\n\t */\n\tApi.prototype.postItem = function(data, callback) {\n\t var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n\t var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n\t this.transport.post(this.accessToken, transportOptions, payload, callback);\n\t};\n\t\n\tApi.prototype.configure = function(options) {\n\t var oldOptions = this.oldOptions;\n\t this.options = _.extend(true, {}, oldOptions, options);\n\t this.transportOptions = _getTransport(this.options, this.url);\n\t if (this.options.accessToken !== undefined) {\n\t this.accessToken = this.options.accessToken;\n\t }\n\t return this;\n\t};\n\t\n\tfunction _getTransport(options, url) {\n\t return helpers.getTransportFromOptions(options, defaultOptions, url);\n\t}\n\t\n\tmodule.exports = Api;\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\t\n\tfunction buildPayload(accessToken, data, jsonBackup) {\n\t if (!_.isType(data.context, 'string')) {\n\t var contextResult = _.stringify(data.context, jsonBackup);\n\t if (contextResult.error) {\n\t data.context = 'Error: could not serialize \\'context\\'';\n\t } else {\n\t data.context = contextResult.value || '';\n\t }\n\t if (data.context.length > 255) {\n\t data.context = data.context.substr(0, 255);\n\t }\n\t }\n\t return {\n\t access_token: accessToken,\n\t data: data\n\t };\n\t}\n\t\n\tfunction getTransportFromOptions(options, defaults, url) {\n\t var hostname = defaults.hostname;\n\t var protocol = defaults.protocol;\n\t var port = defaults.port;\n\t var path = defaults.path;\n\t var search = defaults.search;\n\t\n\t var proxy = options.proxy;\n\t if (options.endpoint) {\n\t var opts = url.parse(options.endpoint);\n\t hostname = opts.hostname;\n\t protocol = opts.protocol;\n\t port = opts.port;\n\t path = opts.pathname;\n\t search = opts.search;\n\t }\n\t return {\n\t hostname: hostname,\n\t protocol: protocol,\n\t port: port,\n\t path: path,\n\t search: search,\n\t proxy: proxy\n\t };\n\t}\n\t\n\tfunction transportOptions(transport, method) {\n\t var protocol = transport.protocol || 'https:';\n\t var port = transport.port || (protocol === 'http:' ? 80 : protocol === 'https:' ? 443 : undefined);\n\t var hostname = transport.hostname;\n\t var path = transport.path;\n\t if (transport.search) {\n\t path = path + transport.search;\n\t }\n\t if (transport.proxy) {\n\t path = protocol + '//' + hostname + path;\n\t hostname = transport.proxy.host || transport.proxy.hostname;\n\t port = transport.proxy.port;\n\t protocol = transport.proxy.protocol || protocol;\n\t }\n\t return {\n\t protocol: protocol,\n\t hostname: hostname,\n\t path: path,\n\t port: port,\n\t method: method\n\t };\n\t}\n\t\n\tfunction appendPathToPath(base, path) {\n\t var baseTrailingSlash = /\\/$/.test(base);\n\t var pathBeginningSlash = /^\\//.test(path);\n\t\n\t if (baseTrailingSlash && pathBeginningSlash) {\n\t path = path.substring(1);\n\t } else if (!baseTrailingSlash && !pathBeginningSlash) {\n\t path = '/' + path;\n\t }\n\t\n\t return base + path;\n\t}\n\t\n\tmodule.exports = {\n\t buildPayload: buildPayload,\n\t getTransportFromOptions: getTransportFromOptions,\n\t transportOptions: transportOptions,\n\t appendPathToPath: appendPathToPath\n\t};\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t/* eslint-disable no-console */\n\t__webpack_require__(14);\n\tvar detection = __webpack_require__(15);\n\tvar _ = __webpack_require__(6);\n\t\n\tfunction error() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t args.unshift('Rollbar:');\n\t if (detection.ieVersion() <= 8) {\n\t console.error(_.formatArgsAsString(args));\n\t } else {\n\t console.error.apply(console, args);\n\t }\n\t}\n\t\n\tfunction info() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t args.unshift('Rollbar:');\n\t if (detection.ieVersion() <= 8) {\n\t console.info(_.formatArgsAsString(args));\n\t } else {\n\t console.info.apply(console, args);\n\t }\n\t}\n\t\n\tfunction log() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t args.unshift('Rollbar:');\n\t if (detection.ieVersion() <= 8) {\n\t console.log(_.formatArgsAsString(args));\n\t } else {\n\t console.log.apply(console, args);\n\t }\n\t}\n\t\n\t/* eslint-enable no-console */\n\t\n\tmodule.exports = {\n\t error: error,\n\t info: info,\n\t log: log\n\t};\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports) {\n\n\t// Console-polyfill. MIT license.\n\t// https://github.com/paulmillr/console-polyfill\n\t// Make it safe to do console.log() always.\n\t(function(global) {\n\t 'use strict';\n\t if (!global.console) {\n\t global.console = {};\n\t }\n\t var con = global.console;\n\t var prop, method;\n\t var dummy = function() {};\n\t var properties = ['memory'];\n\t var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' +\n\t 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' +\n\t 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',');\n\t while (prop = properties.pop()) if (!con[prop]) con[prop] = {};\n\t while (method = methods.pop()) if (!con[method]) con[method] = dummy;\n\t // Using `this` for web workers & supports Browserify / Webpack.\n\t})(typeof window === 'undefined' ? this : window);\n\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\t// This detection.js module is used to encapsulate any ugly browser/feature\n\t// detection we may need to do.\n\t\n\t// Figure out which version of IE we're using, if any.\n\t// This is gleaned from http://stackoverflow.com/questions/5574842/best-way-to-check-for-ie-less-than-9-in-javascript-without-library\n\t// Will return an integer on IE (i.e. 8)\n\t// Will return undefined otherwise\n\tfunction getIEVersion() {\n\t\tvar undef;\n\t\tif (!document) {\n\t\t\treturn undef;\n\t\t}\n\t\n\t var v = 3,\n\t div = document.createElement('div'),\n\t all = div.getElementsByTagName('i');\n\t\n\t while (\n\t div.innerHTML = '',\n\t all[0]\n\t );\n\t\n\t return v > 4 ? v : undef;\n\t}\n\t\n\tvar Detection = {\n\t ieVersion: getIEVersion\n\t};\n\t\n\tmodule.exports = Detection;\n\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tfunction captureUncaughtExceptions(window, handler, shim) {\n\t if (!window) { return; }\n\t var oldOnError;\n\t\n\t if (typeof handler._rollbarOldOnError === 'function') {\n\t oldOnError = handler._rollbarOldOnError;\n\t } else if (window.onerror && !window.onerror.belongsToShim) {\n\t oldOnError = window.onerror;\n\t handler._rollbarOldOnError = oldOnError;\n\t }\n\t\n\t var fn = function() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t _rollbarWindowOnError(window, handler, oldOnError, args);\n\t };\n\t fn.belongsToShim = shim;\n\t window.onerror = fn;\n\t}\n\t\n\tfunction _rollbarWindowOnError(window, r, old, args) {\n\t if (window._rollbarWrappedError) {\n\t if (!args[4]) {\n\t args[4] = window._rollbarWrappedError;\n\t }\n\t if (!args[5]) {\n\t args[5] = window._rollbarWrappedError._rollbarContext;\n\t }\n\t window._rollbarWrappedError = null;\n\t }\n\t\n\t r.handleUncaughtException.apply(r, args);\n\t if (old) {\n\t old.apply(window, args);\n\t }\n\t}\n\t\n\tfunction captureUnhandledRejections(window, handler, shim) {\n\t if (!window) { return; }\n\t\n\t if (typeof window._rollbarURH === 'function' && window._rollbarURH.belongsToShim) {\n\t window.removeEventListener('unhandledrejection', window._rollbarURH);\n\t }\n\t\n\t var rejectionHandler = function (evt) {\n\t var reason, promise, detail;\n\t try {\n\t reason = evt.reason;\n\t } catch (e) {\n\t reason = undefined;\n\t }\n\t try {\n\t promise = evt.promise;\n\t } catch (e) {\n\t promise = '[unhandledrejection] error getting `promise` from event';\n\t }\n\t try {\n\t detail = evt.detail;\n\t if (!reason && detail) {\n\t reason = detail.reason;\n\t promise = detail.promise;\n\t }\n\t } catch (e) {\n\t detail = '[unhandledrejection] error getting `detail` from event';\n\t }\n\t if (!reason) {\n\t reason = '[unhandledrejection] error getting `reason` from event';\n\t }\n\t\n\t if (handler && handler.handleUnhandledRejection) {\n\t handler.handleUnhandledRejection(reason, promise);\n\t }\n\t };\n\t rejectionHandler.belongsToShim = shim;\n\t window._rollbarURH = rejectionHandler;\n\t window.addEventListener('unhandledrejection', rejectionHandler);\n\t}\n\t\n\tfunction wrapGlobals(window, handler, shim) {\n\t if (!window) { return; }\n\t // Adapted from https://github.com/bugsnag/bugsnag-js\n\t var globals = 'EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload'.split(',');\n\t var i, global;\n\t for (i = 0; i < globals.length; ++i) {\n\t global = globals[i];\n\t\n\t if (window[global] && window[global].prototype) {\n\t _extendListenerPrototype(handler, window[global].prototype, shim);\n\t }\n\t }\n\t}\n\t\n\tfunction _extendListenerPrototype(handler, prototype, shim) {\n\t if (prototype.hasOwnProperty && prototype.hasOwnProperty('addEventListener')) {\n\t var oldAddEventListener = prototype.addEventListener;\n\t while (oldAddEventListener._rollbarOldAdd && oldAddEventListener.belongsToShim) {\n\t oldAddEventListener = oldAddEventListener._rollbarOldAdd;\n\t }\n\t var addFn = function(event, callback, bubble) {\n\t oldAddEventListener.call(this, event, handler.wrap(callback), bubble);\n\t };\n\t addFn._rollbarOldAdd = oldAddEventListener;\n\t addFn.belongsToShim = shim;\n\t prototype.addEventListener = addFn;\n\t\n\t var oldRemoveEventListener = prototype.removeEventListener;\n\t while (oldRemoveEventListener._rollbarOldRemove && oldRemoveEventListener.belongsToShim) {\n\t oldRemoveEventListener = oldRemoveEventListener._rollbarOldRemove;\n\t }\n\t var removeFn = function(event, callback, bubble) {\n\t oldRemoveEventListener.call(this, event, callback && callback._rollbar_wrapped || callback, bubble);\n\t };\n\t removeFn._rollbarOldRemove = oldRemoveEventListener;\n\t removeFn.belongsToShim = shim;\n\t prototype.removeEventListener = removeFn;\n\t }\n\t}\n\t\n\tmodule.exports = {\n\t captureUncaughtExceptions: captureUncaughtExceptions,\n\t captureUnhandledRejections: captureUnhandledRejections,\n\t wrapGlobals: wrapGlobals\n\t};\n\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\tvar logger = __webpack_require__(13);\n\t\n\t/*\n\t * accessToken may be embedded in payload but that should not\n\t * be assumed\n\t *\n\t * options: {\n\t * hostname\n\t * protocol\n\t * path\n\t * port\n\t * method\n\t * }\n\t *\n\t * params is an object containing key/value pairs. These\n\t * will be appended to the path as 'key=value&key=value'\n\t *\n\t * payload is an unserialized object\n\t */\n\t\n\tfunction get(accessToken, options, params, callback, requestFactory) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t _.addParamsAndAccessTokenToPath(accessToken, options, params);\n\t\n\t var method = 'GET';\n\t var url = _.formatUrl(options);\n\t _makeRequest(accessToken, url, method, null, callback, requestFactory);\n\t}\n\t\n\tfunction post(accessToken, options, payload, callback, requestFactory) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t\n\t if (!payload) {\n\t return callback(new Error('Cannot send empty request'));\n\t }\n\t\n\t var stringifyResult = _.stringify(payload);\n\t if (stringifyResult.error) {\n\t return callback(stringifyResult.error);\n\t }\n\t\n\t var writeData = stringifyResult.value;\n\t var method = 'POST';\n\t var url = _.formatUrl(options);\n\t _makeRequest(accessToken, url, method, writeData, callback, requestFactory);\n\t}\n\t\n\tfunction _makeRequest(accessToken, url, method, data, callback, requestFactory) {\n\t var request;\n\t if (requestFactory) {\n\t request = requestFactory();\n\t } else {\n\t request = _createXMLHTTPObject();\n\t }\n\t if (!request) {\n\t // Give up, no way to send requests\n\t return callback(new Error('No way to send a request'));\n\t }\n\t try {\n\t try {\n\t var onreadystatechange = function() {\n\t try {\n\t if (onreadystatechange && request.readyState === 4) {\n\t onreadystatechange = undefined;\n\t\n\t var parseResponse = _.jsonParse(request.responseText);\n\t if (_isSuccess(request)) {\n\t callback(parseResponse.error, parseResponse.value);\n\t return;\n\t } else if (_isNormalFailure(request)) {\n\t if (request.status === 403) {\n\t // likely caused by using a server access token\n\t var message = parseResponse.value && parseResponse.value.message;\n\t logger.error(message);\n\t }\n\t // return valid http status codes\n\t callback(new Error(String(request.status)));\n\t } else {\n\t // IE will return a status 12000+ on some sort of connection failure,\n\t // so we return a blank error\n\t // http://msdn.microsoft.com/en-us/library/aa383770%28VS.85%29.aspx\n\t var msg = 'XHR response had no status code (likely connection failure)';\n\t callback(_newRetriableError(msg));\n\t }\n\t }\n\t } catch (ex) {\n\t //jquery source mentions firefox may error out while accessing the\n\t //request members if there is a network error\n\t //https://github.com/jquery/jquery/blob/a938d7b1282fc0e5c52502c225ae8f0cef219f0a/src/ajax/xhr.js#L111\n\t var exc;\n\t if (ex && ex.stack) {\n\t exc = ex;\n\t } else {\n\t exc = new Error(ex);\n\t }\n\t callback(exc);\n\t }\n\t };\n\t\n\t request.open(method, url, true);\n\t if (request.setRequestHeader) {\n\t request.setRequestHeader('Content-Type', 'application/json');\n\t request.setRequestHeader('X-Rollbar-Access-Token', accessToken);\n\t }\n\t request.onreadystatechange = onreadystatechange;\n\t request.send(data);\n\t } catch (e1) {\n\t // Sending using the normal xmlhttprequest object didn't work, try XDomainRequest\n\t if (typeof XDomainRequest !== 'undefined') {\n\t\n\t // Assume we are in a really old browser which has a bunch of limitations:\n\t // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\t\n\t // Extreme paranoia: if we have XDomainRequest then we have a window, but just in case\n\t if (!window || !window.location) {\n\t return callback(new Error('No window available during request, unknown environment'));\n\t }\n\t\n\t // If the current page is http, try and send over http\n\t if (window.location.href.substring(0, 5) === 'http:' && url.substring(0, 5) === 'https') {\n\t url = 'http' + url.substring(5);\n\t }\n\t\n\t var xdomainrequest = new XDomainRequest();\n\t xdomainrequest.onprogress = function() {};\n\t xdomainrequest.ontimeout = function() {\n\t var msg = 'Request timed out';\n\t var code = 'ETIMEDOUT';\n\t callback(_newRetriableError(msg, code));\n\t };\n\t xdomainrequest.onerror = function() {\n\t callback(new Error('Error during request'));\n\t };\n\t xdomainrequest.onload = function() {\n\t var parseResponse = _.jsonParse(xdomainrequest.responseText);\n\t callback(parseResponse.error, parseResponse.value);\n\t };\n\t xdomainrequest.open(method, url, true);\n\t xdomainrequest.send(data);\n\t } else {\n\t callback(new Error('Cannot find a method to transport a request'));\n\t }\n\t }\n\t } catch (e2) {\n\t callback(e2);\n\t }\n\t}\n\t\n\tfunction _createXMLHTTPObject() {\n\t /* global ActiveXObject:false */\n\t\n\t var factories = [\n\t function () {\n\t return new XMLHttpRequest();\n\t },\n\t function () {\n\t return new ActiveXObject('Msxml2.XMLHTTP');\n\t },\n\t function () {\n\t return new ActiveXObject('Msxml3.XMLHTTP');\n\t },\n\t function () {\n\t return new ActiveXObject('Microsoft.XMLHTTP');\n\t }\n\t ];\n\t var xmlhttp;\n\t var i;\n\t var numFactories = factories.length;\n\t for (i = 0; i < numFactories; i++) {\n\t /* eslint-disable no-empty */\n\t try {\n\t xmlhttp = factories[i]();\n\t break;\n\t } catch (e) {\n\t // pass\n\t }\n\t /* eslint-enable no-empty */\n\t }\n\t return xmlhttp;\n\t}\n\t\n\tfunction _isSuccess(r) {\n\t return r && r.status && r.status === 200;\n\t}\n\t\n\tfunction _isNormalFailure(r) {\n\t return r && _.isType(r.status, 'number') && r.status >= 400 && r.status < 600;\n\t}\n\t\n\tfunction _newRetriableError(message, code) {\n\t var err = new Error(message);\n\t err.code = code || 'ENOTFOUND';\n\t return err;\n\t}\n\t\n\tmodule.exports = {\n\t get: get,\n\t post: post\n\t};\n\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\t// See https://nodejs.org/docs/latest/api/url.html\n\tfunction parse(url) {\n\t var result = {\n\t protocol: null, auth: null, host: null, path: null,\n\t hash: null, href: url, hostname: null, port: null,\n\t pathname: null, search: null, query: null\n\t };\n\t\n\t var i, last;\n\t i = url.indexOf('//');\n\t if (i !== -1) {\n\t result.protocol = url.substring(0,i);\n\t last = i+2;\n\t } else {\n\t last = 0;\n\t }\n\t \n\t i = url.indexOf('@', last);\n\t if (i !== -1) {\n\t result.auth = url.substring(last, i);\n\t last = i+1;\n\t }\n\t\n\t i = url.indexOf('/', last);\n\t if (i === -1) {\n\t i = url.indexOf('?', last);\n\t if (i === -1) {\n\t i = url.indexOf('#', last);\n\t if (i === -1) {\n\t result.host = url.substring(last);\n\t } else {\n\t result.host = url.substring(last, i);\n\t result.hash = url.substring(i);\n\t }\n\t result.hostname = result.host.split(':')[0];\n\t result.port = result.host.split(':')[1];\n\t if (result.port) {\n\t result.port = parseInt(result.port, 10);\n\t }\n\t return result;\n\t } else {\n\t result.host = url.substring(last, i);\n\t result.hostname = result.host.split(':')[0];\n\t result.port = result.host.split(':')[1];\n\t if (result.port) {\n\t result.port = parseInt(result.port, 10);\n\t }\n\t last = i;\n\t }\n\t } else {\n\t result.host = url.substring(last, i);\n\t result.hostname = result.host.split(':')[0];\n\t result.port = result.host.split(':')[1];\n\t if (result.port) {\n\t result.port = parseInt(result.port, 10);\n\t }\n\t last = i;\n\t }\n\t\n\t i = url.indexOf('#', last);\n\t if (i === -1) {\n\t result.path = url.substring(last);\n\t } else {\n\t result.path = url.substring(last, i);\n\t result.hash = url.substring(i);\n\t }\n\t\n\t if (result.path) {\n\t var pathParts = result.path.split('?');\n\t result.pathname = pathParts[0];\n\t result.query = pathParts[1];\n\t result.search = result.query ? '?' + result.query : null;\n\t }\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t parse: parse\n\t};\n\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\tvar errorParser = __webpack_require__(20);\n\tvar logger = __webpack_require__(13);\n\t\n\tfunction handleItemWithError(item, options, callback) {\n\t item.data = item.data || {};\n\t if (item.err) {\n\t try {\n\t item.stackInfo = item.err._savedStackTrace || errorParser.parse(item.err);\n\t } catch (e)\n\t /* istanbul ignore next */\n\t {\n\t logger.error('Error while parsing the error object.', e);\n\t item.message = item.err.message || item.err.description || item.message || String(item.err);\n\t delete item.err;\n\t }\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction ensureItemHasSomethingToSay(item, options, callback) {\n\t if (!item.message && !item.stackInfo && !item.custom) {\n\t callback(new Error('No message, stack info, or custom data'), null);\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction addBaseInfo(item, options, callback) {\n\t var environment = (options.payload && options.payload.environment) || options.environment;\n\t item.data = _.extend(true, {}, item.data, {\n\t environment: environment,\n\t level: item.level,\n\t endpoint: options.endpoint,\n\t platform: 'browser',\n\t framework: 'browser-js',\n\t language: 'javascript',\n\t server: {},\n\t uuid: item.uuid,\n\t notifier: {\n\t name: 'rollbar-browser-js',\n\t version: options.version\n\t }\n\t });\n\t callback(null, item);\n\t}\n\t\n\tfunction addRequestInfo(window) {\n\t return function(item, options, callback) {\n\t if (!window || !window.location) {\n\t return callback(null, item);\n\t }\n\t _.set(item, 'data.request', {\n\t url: window.location.href,\n\t query_string: window.location.search,\n\t user_ip: '$remote_ip'\n\t });\n\t callback(null, item);\n\t };\n\t}\n\t\n\tfunction addClientInfo(window) {\n\t return function(item, options, callback) {\n\t if (!window) {\n\t return callback(null, item);\n\t }\n\t var nav = window.navigator || {};\n\t var scr = window.screen || {};\n\t _.set(item, 'data.client', {\n\t runtime_ms: item.timestamp - window._rollbarStartTime,\n\t timestamp: Math.round(item.timestamp / 1000),\n\t javascript: {\n\t browser: nav.userAgent,\n\t language: nav.language,\n\t cookie_enabled: nav.cookieEnabled,\n\t screen: {\n\t width: scr.width,\n\t height: scr.height\n\t }\n\t }\n\t });\n\t callback(null, item);\n\t };\n\t}\n\t\n\tfunction addPluginInfo(window) {\n\t return function(item, options, callback) {\n\t if (!window || !window.navigator) {\n\t return callback(null, item);\n\t }\n\t var plugins = [];\n\t var navPlugins = window.navigator.plugins || [];\n\t var cur;\n\t for (var i=0, l=navPlugins.length; i < l; ++i) {\n\t cur = navPlugins[i];\n\t plugins.push({name: cur.name, description: cur.description});\n\t }\n\t _.set(item, 'data.client.javascript.plugins', plugins);\n\t callback(null, item);\n\t };\n\t}\n\t\n\tfunction addBody(item, options, callback) {\n\t if (item.stackInfo) {\n\t addBodyTrace(item, options, callback);\n\t } else {\n\t addBodyMessage(item, options, callback);\n\t }\n\t}\n\t\n\tfunction addBodyMessage(item, options, callback) {\n\t var message = item.message;\n\t var custom = item.custom;\n\t\n\t if (!message) {\n\t if (custom) {\n\t var scrubFields = options.scrubFields;\n\t var messageResult = _.stringify(_.scrub(custom, scrubFields));\n\t message = messageResult.error || messageResult.value || '';\n\t } else {\n\t message = '';\n\t }\n\t }\n\t var result = {\n\t body: message\n\t };\n\t\n\t if (custom) {\n\t result.extra = _.extend(true, {}, custom);\n\t }\n\t\n\t _.set(item, 'data.body', {message: result});\n\t callback(null, item);\n\t}\n\t\n\t\n\tfunction addBodyTrace(item, options, callback) {\n\t var description = item.data.description;\n\t var stackInfo = item.stackInfo;\n\t var custom = item.custom;\n\t\n\t var guess = errorParser.guessErrorClass(stackInfo.message);\n\t var className = stackInfo.name || guess[0];\n\t var message = guess[1];\n\t var trace = {\n\t exception: {\n\t 'class': className,\n\t message: message\n\t }\n\t };\n\t\n\t if (description) {\n\t trace.exception.description = description;\n\t }\n\t\n\t // Transform a TraceKit stackInfo object into a Rollbar trace\n\t var stack = stackInfo.stack;\n\t if (stack && stack.length === 0 && item._unhandledStackInfo && item._unhandledStackInfo.stack) {\n\t stack = item._unhandledStackInfo.stack;\n\t }\n\t if (stack) {\n\t if (stack.length === 0) {\n\t trace.exception.stack = stackInfo.rawStack;\n\t trace.exception.raw = String(stackInfo.rawException);\n\t }\n\t var stackFrame;\n\t var frame;\n\t var code;\n\t var pre;\n\t var post;\n\t var contextLength;\n\t var i, mid;\n\t\n\t trace.frames = [];\n\t for (i = 0; i < stack.length; ++i) {\n\t stackFrame = stack[i];\n\t frame = {\n\t filename: stackFrame.url ? _.sanitizeUrl(stackFrame.url) : '(unknown)',\n\t lineno: stackFrame.line || null,\n\t method: (!stackFrame.func || stackFrame.func === '?') ? '[anonymous]' : stackFrame.func,\n\t colno: stackFrame.column\n\t };\n\t if (frame.method && frame.method.endsWith && frame.method.endsWith('_rollbar_wrapped')) {\n\t continue;\n\t }\n\t\n\t code = pre = post = null;\n\t contextLength = stackFrame.context ? stackFrame.context.length : 0;\n\t if (contextLength) {\n\t mid = Math.floor(contextLength / 2);\n\t pre = stackFrame.context.slice(0, mid);\n\t code = stackFrame.context[mid];\n\t post = stackFrame.context.slice(mid);\n\t }\n\t\n\t if (code) {\n\t frame.code = code;\n\t }\n\t\n\t if (pre || post) {\n\t frame.context = {};\n\t if (pre && pre.length) {\n\t frame.context.pre = pre;\n\t }\n\t if (post && post.length) {\n\t frame.context.post = post;\n\t }\n\t }\n\t\n\t if (stackFrame.args) {\n\t frame.args = stackFrame.args;\n\t }\n\t\n\t trace.frames.push(frame);\n\t }\n\t\n\t // NOTE(cory): reverse the frames since rollbar.com expects the most recent call last\n\t trace.frames.reverse();\n\t\n\t if (custom) {\n\t trace.extra = _.extend(true, {}, custom);\n\t }\n\t _.set(item, 'data.body', {trace: trace});\n\t callback(null, item);\n\t } else {\n\t item.message = className + ': ' + message;\n\t addBodyMessage(item, options, callback);\n\t }\n\t}\n\t\n\tfunction scrubPayload(item, options, callback) {\n\t var scrubFields = options.scrubFields;\n\t item.data = _.scrub(item.data, scrubFields);\n\t callback(null, item);\n\t}\n\t\n\tmodule.exports = {\n\t handleItemWithError: handleItemWithError,\n\t ensureItemHasSomethingToSay: ensureItemHasSomethingToSay,\n\t addBaseInfo: addBaseInfo,\n\t addRequestInfo: addRequestInfo,\n\t addClientInfo: addClientInfo,\n\t addPluginInfo: addPluginInfo,\n\t addBody: addBody,\n\t scrubPayload: scrubPayload\n\t};\n\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar ErrorStackParser = __webpack_require__(21);\n\t\n\tvar UNKNOWN_FUNCTION = '?';\n\tvar ERR_CLASS_REGEXP = new RegExp('^(([a-zA-Z0-9-_$ ]*): *)?(Uncaught )?([a-zA-Z0-9-_$ ]*): ');\n\t\n\tfunction guessFunctionName() {\n\t return UNKNOWN_FUNCTION;\n\t}\n\t\n\t\n\tfunction gatherContext() {\n\t return null;\n\t}\n\t\n\t\n\tfunction Frame(stackFrame) {\n\t var data = {};\n\t\n\t data._stackFrame = stackFrame;\n\t\n\t data.url = stackFrame.fileName;\n\t data.line = stackFrame.lineNumber;\n\t data.func = stackFrame.functionName;\n\t data.column = stackFrame.columnNumber;\n\t data.args = stackFrame.args;\n\t\n\t data.context = gatherContext(data.url, data.line);\n\t\n\t return data;\n\t}\n\t\n\t\n\tfunction Stack(exception) {\n\t function getStack() {\n\t var parserStack = [];\n\t var exc;\n\t\n\t if (!exception.stack) {\n\t try {\n\t throw exception;\n\t } catch (e) {\n\t exc = e;\n\t }\n\t } else {\n\t exc = exception;\n\t }\n\t\n\t try {\n\t parserStack = ErrorStackParser.parse(exc);\n\t } catch(e) {\n\t parserStack = [];\n\t }\n\t\n\t var stack = [];\n\t\n\t for (var i = 0; i < parserStack.length; i++) {\n\t stack.push(new Frame(parserStack[i]));\n\t }\n\t\n\t return stack;\n\t }\n\t\n\t return {\n\t stack: getStack(),\n\t message: exception.message,\n\t name: exception.name,\n\t rawStack: exception.stack,\n\t rawException: exception\n\t };\n\t}\n\t\n\t\n\tfunction parse(e) {\n\t return new Stack(e);\n\t}\n\t\n\t\n\tfunction guessErrorClass(errMsg) {\n\t if (!errMsg || !errMsg.match) {\n\t return ['Unknown error. There was no error message to display.', ''];\n\t }\n\t var errClassMatch = errMsg.match(ERR_CLASS_REGEXP);\n\t var errClass = '(unknown)';\n\t\n\t if (errClassMatch) {\n\t errClass = errClassMatch[errClassMatch.length - 1];\n\t errMsg = errMsg.replace((errClassMatch[errClassMatch.length - 2] || '') + errClass + ':', '');\n\t errMsg = errMsg.replace(/(^[\\s]+|[\\s]+$)/g, '');\n\t }\n\t return [errClass, errMsg];\n\t}\n\t\n\t\n\tmodule.exports = {\n\t guessFunctionName: guessFunctionName,\n\t guessErrorClass: guessErrorClass,\n\t gatherContext: gatherContext,\n\t parse: parse,\n\t Stack: Stack,\n\t Frame: Frame\n\t};\n\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (root, factory) {\n\t 'use strict';\n\t // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\t\n\t /* istanbul ignore next */\n\t if (true) {\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(22)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t } else if (typeof exports === 'object') {\n\t module.exports = factory(require('stackframe'));\n\t } else {\n\t root.ErrorStackParser = factory(root.StackFrame);\n\t }\n\t}(this, function ErrorStackParser(StackFrame) {\n\t 'use strict';\n\t\n\t var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n\t var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n\t var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\t\n\t function _map(array, fn, thisArg) {\n\t if (typeof Array.prototype.map === 'function') {\n\t return array.map(fn, thisArg);\n\t } else {\n\t var output = new Array(array.length);\n\t for (var i = 0; i < array.length; i++) {\n\t output[i] = fn.call(thisArg, array[i]);\n\t }\n\t return output;\n\t }\n\t }\n\t\n\t function _filter(array, fn, thisArg) {\n\t if (typeof Array.prototype.filter === 'function') {\n\t return array.filter(fn, thisArg);\n\t } else {\n\t var output = [];\n\t for (var i = 0; i < array.length; i++) {\n\t if (fn.call(thisArg, array[i])) {\n\t output.push(array[i]);\n\t }\n\t }\n\t return output;\n\t }\n\t }\n\t\n\t return {\n\t /**\n\t * Given an Error object, extract the most information from it.\n\t * @param error {Error}\n\t * @return Array[StackFrame]\n\t */\n\t parse: function ErrorStackParser$$parse(error) {\n\t if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n\t return this.parseOpera(error);\n\t } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n\t return this.parseV8OrIE(error);\n\t } else if (error.stack) {\n\t return this.parseFFOrSafari(error);\n\t } else {\n\t throw new Error('Cannot parse given Error object');\n\t }\n\t },\n\t\n\t /**\n\t * Separate line and column numbers from a URL-like string.\n\t * @param urlLike String\n\t * @return Array[String]\n\t */\n\t extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n\t // Fail-fast but return locations like \"(native)\"\n\t if (urlLike.indexOf(':') === -1) {\n\t return [urlLike];\n\t }\n\t\n\t var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n\t var lastNumber = locationParts.pop();\n\t var possibleNumber = locationParts[locationParts.length - 1];\n\t if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n\t var lineNumber = locationParts.pop();\n\t return [locationParts.join(':'), lineNumber, lastNumber];\n\t } else {\n\t return [locationParts.join(':'), lastNumber, undefined];\n\t }\n\t },\n\t\n\t parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n\t var filtered = _filter(error.stack.split('\\n'), function (line) {\n\t return !!line.match(CHROME_IE_STACK_REGEXP);\n\t }, this);\n\t\n\t return _map(filtered, function (line) {\n\t if (line.indexOf('(eval ') > -1) {\n\t // Throw away eval information until we implement stacktrace.js/stackframe#8\n\t line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n\t }\n\t var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n\t var locationParts = this.extractLocation(tokens.pop());\n\t var functionName = tokens.join(' ') || undefined;\n\t var fileName = locationParts[0] === 'eval' ? undefined : locationParts[0];\n\t\n\t return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n\t }, this);\n\t },\n\t\n\t parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n\t var filtered = _filter(error.stack.split('\\n'), function (line) {\n\t return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n\t }, this);\n\t\n\t return _map(filtered, function (line) {\n\t // Throw away eval information until we implement stacktrace.js/stackframe#8\n\t if (line.indexOf(' > eval') > -1) {\n\t line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n\t }\n\t\n\t if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n\t // Safari eval frames only have function names and nothing else\n\t return new StackFrame(line);\n\t } else {\n\t var tokens = line.split('@');\n\t var locationParts = this.extractLocation(tokens.pop());\n\t var functionName = tokens.shift() || undefined;\n\t return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n\t }\n\t }, this);\n\t },\n\t\n\t parseOpera: function ErrorStackParser$$parseOpera(e) {\n\t if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n\t e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n\t return this.parseOpera9(e);\n\t } else if (!e.stack) {\n\t return this.parseOpera10(e);\n\t } else {\n\t return this.parseOpera11(e);\n\t }\n\t },\n\t\n\t parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n\t var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n\t var lines = e.message.split('\\n');\n\t var result = [];\n\t\n\t for (var i = 2, len = lines.length; i < len; i += 2) {\n\t var match = lineRE.exec(lines[i]);\n\t if (match) {\n\t result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n\t }\n\t }\n\t\n\t return result;\n\t },\n\t\n\t parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n\t var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n\t var lines = e.stacktrace.split('\\n');\n\t var result = [];\n\t\n\t for (var i = 0, len = lines.length; i < len; i += 2) {\n\t var match = lineRE.exec(lines[i]);\n\t if (match) {\n\t result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n\t }\n\t }\n\t\n\t return result;\n\t },\n\t\n\t // Opera 10.65+ Error.stack very similar to FF/Safari\n\t parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n\t var filtered = _filter(error.stack.split('\\n'), function (line) {\n\t return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n\t !line.match(/^Error created at/);\n\t }, this);\n\t\n\t return _map(filtered, function (line) {\n\t var tokens = line.split('@');\n\t var locationParts = this.extractLocation(tokens.pop());\n\t var functionCall = (tokens.shift() || '');\n\t var functionName = functionCall\n\t .replace(//, '$2')\n\t .replace(/\\([^\\)]*\\)/g, '') || undefined;\n\t var argsRaw;\n\t if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n\t argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n\t }\n\t var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n\t return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n\t }, this);\n\t }\n\t };\n\t}));\n\t\n\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (root, factory) {\n\t 'use strict';\n\t // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\t\n\t /* istanbul ignore next */\n\t if (true) {\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t } else if (typeof exports === 'object') {\n\t module.exports = factory();\n\t } else {\n\t root.StackFrame = factory();\n\t }\n\t}(this, function () {\n\t 'use strict';\n\t function _isNumber(n) {\n\t return !isNaN(parseFloat(n)) && isFinite(n);\n\t }\n\t\n\t function StackFrame(functionName, args, fileName, lineNumber, columnNumber, source) {\n\t if (functionName !== undefined) {\n\t this.setFunctionName(functionName);\n\t }\n\t if (args !== undefined) {\n\t this.setArgs(args);\n\t }\n\t if (fileName !== undefined) {\n\t this.setFileName(fileName);\n\t }\n\t if (lineNumber !== undefined) {\n\t this.setLineNumber(lineNumber);\n\t }\n\t if (columnNumber !== undefined) {\n\t this.setColumnNumber(columnNumber);\n\t }\n\t if (source !== undefined) {\n\t this.setSource(source);\n\t }\n\t }\n\t\n\t StackFrame.prototype = {\n\t getFunctionName: function () {\n\t return this.functionName;\n\t },\n\t setFunctionName: function (v) {\n\t this.functionName = String(v);\n\t },\n\t\n\t getArgs: function () {\n\t return this.args;\n\t },\n\t setArgs: function (v) {\n\t if (Object.prototype.toString.call(v) !== '[object Array]') {\n\t throw new TypeError('Args must be an Array');\n\t }\n\t this.args = v;\n\t },\n\t\n\t // NOTE: Property name may be misleading as it includes the path,\n\t // but it somewhat mirrors V8's JavaScriptStackTraceApi\n\t // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's\n\t // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14\n\t getFileName: function () {\n\t return this.fileName;\n\t },\n\t setFileName: function (v) {\n\t this.fileName = String(v);\n\t },\n\t\n\t getLineNumber: function () {\n\t return this.lineNumber;\n\t },\n\t setLineNumber: function (v) {\n\t if (!_isNumber(v)) {\n\t throw new TypeError('Line Number must be a Number');\n\t }\n\t this.lineNumber = Number(v);\n\t },\n\t\n\t getColumnNumber: function () {\n\t return this.columnNumber;\n\t },\n\t setColumnNumber: function (v) {\n\t if (!_isNumber(v)) {\n\t throw new TypeError('Column Number must be a Number');\n\t }\n\t this.columnNumber = Number(v);\n\t },\n\t\n\t getSource: function () {\n\t return this.source;\n\t },\n\t setSource: function (v) {\n\t this.source = String(v);\n\t },\n\t\n\t toString: function() {\n\t var functionName = this.getFunctionName() || '{anonymous}';\n\t var args = '(' + (this.getArgs() || []).join(',') + ')';\n\t var fileName = this.getFileName() ? ('@' + this.getFileName()) : '';\n\t var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : '';\n\t var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : '';\n\t return functionName + args + fileName + lineNumber + columnNumber;\n\t }\n\t };\n\t\n\t return StackFrame;\n\t}));\n\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\t\n\tfunction itemToPayload(item, options, callback) {\n\t var payloadOptions = options.payload || {};\n\t if (payloadOptions.body) {\n\t delete payloadOptions.body;\n\t }\n\t\n\t var data = _.extend(true, {}, item.data, payloadOptions);\n\t if (item._isUncaught) {\n\t data._isUncaught = true;\n\t }\n\t if (item._originalArgs) {\n\t data._originalArgs = item._originalArgs;\n\t }\n\t callback(null, data);\n\t}\n\t\n\tfunction addTelemetryData(item, options, callback) {\n\t if (item.telemetryEvents) {\n\t _.set(item, 'data.body.telemetry', item.telemetryEvents);\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction addMessageWithError(item, options, callback) {\n\t if (!item.message) {\n\t callback(null, item);\n\t return;\n\t }\n\t var tracePath = 'data.body.trace_chain.0';\n\t var trace = _.get(item, tracePath);\n\t if (!trace) {\n\t tracePath = 'data.body.trace';\n\t trace = _.get(item, tracePath);\n\t }\n\t if (trace) {\n\t if (!(trace.exception && trace.exception.description)) {\n\t _.set(item, tracePath+'.exception.description', item.message);\n\t callback(null, item);\n\t return;\n\t }\n\t var extra = _.get(item, tracePath+'.extra') || {};\n\t var newExtra = _.extend(true, {}, extra, {message: item.message});\n\t _.set(item, tracePath+'.extra', newExtra);\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction userTransform(logger) {\n\t return function(item, options, callback) {\n\t var newItem = _.extend(true, {}, item);\n\t try {\n\t if (_.isFunction(options.transform)) {\n\t options.transform(newItem.data);\n\t }\n\t } catch (e) {\n\t options.transform = null;\n\t logger.error('Error while calling custom transform() function. Removing custom transform().', e);\n\t callback(null, item);\n\t return;\n\t }\n\t callback(null, newItem);\n\t }\n\t}\n\t\n\tfunction addConfigToPayload(item, options, callback) {\n\t if (!options.sendConfig) {\n\t return callback(null, item);\n\t }\n\t var configKey = '_rollbarConfig';\n\t var custom = _.get(item, 'data.custom') || {};\n\t custom[configKey] = options;\n\t item.data.custom = custom;\n\t callback(null, item);\n\t}\n\t\n\tmodule.exports = {\n\t itemToPayload: itemToPayload,\n\t addTelemetryData: addTelemetryData,\n\t addMessageWithError: addMessageWithError,\n\t userTransform: userTransform,\n\t addConfigToPayload: addConfigToPayload\n\t};\n\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\t\n\tfunction checkIgnore(item, settings) {\n\t if (_.get(settings, 'plugins.jquery.ignoreAjaxErrors')) {\n\t return !_.get(item, 'body.message.extra.isAjax');\n\t }\n\t return true;\n\t}\n\t\n\tmodule.exports = {\n\t checkIgnore: checkIgnore\n\t};\n\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\t\n\tfunction checkLevel(item, settings) {\n\t var level = item.level;\n\t var levelVal = _.LEVELS[level] || 0;\n\t var reportLevel = settings.reportLevel;\n\t var reportLevelVal = _.LEVELS[reportLevel] || 0;\n\t\n\t if (levelVal < reportLevelVal) {\n\t return false;\n\t }\n\t return true;\n\t}\n\t\n\tfunction userCheckIgnore(logger) {\n\t return function(item, settings) {\n\t var isUncaught = !!item._isUncaught;\n\t delete item._isUncaught;\n\t var args = item._originalArgs;\n\t delete item._originalArgs;\n\t try {\n\t if (_.isFunction(settings.onSendCallback)) {\n\t settings.onSendCallback(isUncaught, args, item);\n\t }\n\t } catch (e) {\n\t settings.onSendCallback = null;\n\t logger.error('Error while calling onSendCallback, removing', e);\n\t }\n\t try {\n\t if (_.isFunction(settings.checkIgnore) && settings.checkIgnore(isUncaught, args, item)) {\n\t return false;\n\t }\n\t } catch (e) {\n\t settings.checkIgnore = null;\n\t logger.error('Error while calling custom checkIgnore(), removing', e);\n\t }\n\t return true;\n\t }\n\t}\n\t\n\tfunction urlIsNotBlacklisted(logger) {\n\t return function(item, settings) {\n\t return !urlIsOnAList(item, settings, 'blacklist', logger);\n\t }\n\t}\n\t\n\tfunction urlIsWhitelisted(logger) {\n\t return function(item, settings) {\n\t return urlIsOnAList(item, settings, 'whitelist', logger);\n\t }\n\t}\n\t\n\tfunction urlIsOnAList(item, settings, whiteOrBlack, logger) {\n\t // whitelist is the default\n\t var black = false;\n\t if (whiteOrBlack === 'blacklist') {\n\t black = true;\n\t }\n\t var list, trace, frame, filename, frameLength, url, listLength, urlRegex;\n\t var i, j;\n\t\n\t try {\n\t list = black ? settings.hostBlackList : settings.hostWhiteList;\n\t listLength = list && list.length;\n\t trace = _.get(item, 'body.trace');\n\t\n\t // These two checks are important to come first as they are defaults\n\t // in case the list is missing or the trace is missing or not well-formed\n\t if (!list || listLength === 0) {\n\t return !black;\n\t }\n\t if (!trace || !trace.frames || trace.frames.length === 0) {\n\t return !black;\n\t }\n\t\n\t frameLength = trace.frames.length;\n\t for (i = 0; i < frameLength; i++) {\n\t frame = trace.frames[i];\n\t filename = frame.filename;\n\t\n\t if (!_.isType(filename, 'string')) {\n\t return !black;\n\t }\n\t\n\t for (j = 0; j < listLength; j++) {\n\t url = list[j];\n\t urlRegex = new RegExp(url);\n\t\n\t if (urlRegex.test(filename)) {\n\t return true;\n\t }\n\t }\n\t }\n\t } catch (e)\n\t /* istanbul ignore next */\n\t {\n\t if (black) {\n\t settings.hostBlackList = null;\n\t } else {\n\t settings.hostWhiteList = null;\n\t }\n\t var listName = black ? 'hostBlackList' : 'hostWhiteList';\n\t logger.error('Error while reading your configuration\\'s ' + listName + ' option. Removing custom ' + listName + '.', e);\n\t return !black;\n\t }\n\t return false;\n\t}\n\t\n\tfunction messageIsIgnored(logger) {\n\t return function(item, settings) {\n\t var exceptionMessage, i, ignoredMessages,\n\t len, messageIsIgnored, rIgnoredMessage,\n\t body, traceMessage, bodyMessage;\n\t\n\t try {\n\t messageIsIgnored = false;\n\t ignoredMessages = settings.ignoredMessages;\n\t\n\t if (!ignoredMessages || ignoredMessages.length === 0) {\n\t return true;\n\t }\n\t\n\t body = item.body;\n\t traceMessage = _.get(body, 'trace.exception.message');\n\t bodyMessage = _.get(body, 'message.body');\n\t\n\t exceptionMessage = traceMessage || bodyMessage;\n\t\n\t if (!exceptionMessage){\n\t return true;\n\t }\n\t\n\t len = ignoredMessages.length;\n\t for (i = 0; i < len; i++) {\n\t rIgnoredMessage = new RegExp(ignoredMessages[i], 'gi');\n\t messageIsIgnored = rIgnoredMessage.test(exceptionMessage);\n\t\n\t if (messageIsIgnored) {\n\t break;\n\t }\n\t }\n\t } catch(e)\n\t /* istanbul ignore next */\n\t {\n\t settings.ignoredMessages = null;\n\t logger.error('Error while reading your configuration\\'s ignoredMessages option. Removing custom ignoredMessages.');\n\t }\n\t\n\t return !messageIsIgnored;\n\t }\n\t}\n\t\n\tmodule.exports = {\n\t checkLevel: checkLevel,\n\t userCheckIgnore: userCheckIgnore,\n\t urlIsNotBlacklisted: urlIsNotBlacklisted,\n\t urlIsWhitelisted: urlIsWhitelisted,\n\t messageIsIgnored: messageIsIgnored\n\t};\n\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\tvar urlparser = __webpack_require__(18);\n\tvar domUtil = __webpack_require__(27);\n\t\n\tvar defaults = {\n\t network: true,\n\t networkResponseHeaders: false,\n\t networkResponseBody: false,\n\t networkRequestBody: false,\n\t log: true,\n\t dom: true,\n\t navigation: true,\n\t connectivity: true\n\t};\n\t\n\tfunction replace(obj, name, replacement, replacements, type) {\n\t var orig = obj[name];\n\t obj[name] = replacement(orig);\n\t if (replacements) {\n\t replacements[type].push([obj, name, orig]);\n\t }\n\t}\n\t\n\tfunction restore(replacements, type) {\n\t var b;\n\t while (replacements[type].length) {\n\t b = replacements[type].shift();\n\t b[0][b[1]] = b[2];\n\t }\n\t}\n\t\n\tfunction Instrumenter(options, telemeter, rollbar, _window, _document) {\n\t var autoInstrument = options.autoInstrument;\n\t if (options.enabled === false || autoInstrument === false) {\n\t this.autoInstrument = {};\n\t } else {\n\t if (!_.isType(autoInstrument, 'object')) {\n\t autoInstrument = defaults;\n\t }\n\t this.autoInstrument = _.extend(true, {}, defaults, autoInstrument);\n\t }\n\t this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n\t this.telemetryScrubber = options.telemetryScrubber;\n\t this.telemeter = telemeter;\n\t this.rollbar = rollbar;\n\t this._window = _window || {};\n\t this._document = _document || {};\n\t this.replacements = {\n\t network: [],\n\t log: [],\n\t navigation: [],\n\t connectivity: []\n\t };\n\t this.eventRemovers = {\n\t dom: [],\n\t connectivity: []\n\t };\n\t\n\t this._location = this._window.location;\n\t this._lastHref = this._location && this._location.href;\n\t}\n\t\n\tInstrumenter.prototype.configure = function(options) {\n\t var autoInstrument = options.autoInstrument;\n\t var oldSettings = _.extend(true, {}, this.autoInstrument);\n\t if (options.enabled === false || autoInstrument === false) {\n\t this.autoInstrument = {};\n\t } else {\n\t if (!_.isType(autoInstrument, 'object')) {\n\t autoInstrument = defaults;\n\t }\n\t this.autoInstrument = _.extend(true, {}, defaults, autoInstrument);\n\t }\n\t this.instrument(oldSettings);\n\t if (options.scrubTelemetryInputs !== undefined) {\n\t this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n\t }\n\t if (options.telemetryScrubber !== undefined) {\n\t this.telemetryScrubber = options.telemetryScrubber;\n\t }\n\t};\n\t\n\tInstrumenter.prototype.instrument = function(oldSettings) {\n\t if (this.autoInstrument.network && !(oldSettings && oldSettings.network)) {\n\t this.instrumentNetwork();\n\t } else if (!this.autoInstrument.network && oldSettings && oldSettings.network) {\n\t this.deinstrumentNetwork();\n\t }\n\t\n\t if (this.autoInstrument.log && !(oldSettings && oldSettings.log)) {\n\t this.instrumentConsole();\n\t } else if (!this.autoInstrument.log && oldSettings && oldSettings.log) {\n\t this.deinstrumentConsole();\n\t }\n\t\n\t if (this.autoInstrument.dom && !(oldSettings && oldSettings.dom)) {\n\t this.instrumentDom();\n\t } else if (!this.autoInstrument.dom && oldSettings && oldSettings.dom) {\n\t this.deinstrumentDom();\n\t }\n\t\n\t if (this.autoInstrument.navigation && !(oldSettings && oldSettings.navigation)) {\n\t this.instrumentNavigation();\n\t } else if (!this.autoInstrument.navigation && oldSettings && oldSettings.navigation) {\n\t this.deinstrumentNavigation();\n\t }\n\t\n\t if (this.autoInstrument.connectivity && !(oldSettings && oldSettings.connectivity)) {\n\t this.instrumentConnectivity();\n\t } else if (!this.autoInstrument.connectivity && oldSettings && oldSettings.connectivity) {\n\t this.deinstrumentConnectivity();\n\t }\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentNetwork = function() {\n\t restore(this.replacements, 'network');\n\t};\n\t\n\tInstrumenter.prototype.instrumentNetwork = function() {\n\t var self = this;\n\t\n\t function wrapProp(prop, xhr) {\n\t if (prop in xhr && _.isFunction(xhr[prop])) {\n\t replace(xhr, prop, function(orig) {\n\t return self.rollbar.wrap(orig);\n\t });\n\t }\n\t }\n\t\n\t if ('XMLHttpRequest' in this._window) {\n\t var xhrp = this._window.XMLHttpRequest.prototype;\n\t replace(xhrp, 'open', function(orig) {\n\t return function(method, url) {\n\t if (_.isType(url, 'string')) {\n\t this.__rollbar_xhr = {\n\t method: method,\n\t url: url,\n\t status_code: null,\n\t start_time_ms: _.now(),\n\t end_time_ms: null\n\t };\n\t }\n\t return orig.apply(this, arguments);\n\t };\n\t }, this.replacements, 'network');\n\t\n\t replace(xhrp, 'send', function(orig) {\n\t /* eslint-disable no-unused-vars */\n\t return function(data) {\n\t /* eslint-enable no-unused-vars */\n\t var xhr = this;\n\t\n\t function onreadystatechangeHandler() {\n\t if (xhr.__rollbar_xhr && (xhr.readyState === 1 || xhr.readyState === 4)) {\n\t if (xhr.__rollbar_xhr.status_code === null) {\n\t xhr.__rollbar_xhr.status_code = 0;\n\t var requestData = null;\n\t if (self.autoInstrument.networkRequestBody) {\n\t requestData = data;\n\t }\n\t xhr.__rollbar_event = self.telemeter.captureNetwork(xhr.__rollbar_xhr, 'xhr', undefined, requestData);\n\t }\n\t if (xhr.readyState === 1) {\n\t xhr.__rollbar_xhr.start_time_ms = _.now();\n\t } else {\n\t xhr.__rollbar_xhr.end_time_ms = _.now();\n\t\n\t var headers = null;\n\t if (self.autoInstrument.networkResponseHeaders) {\n\t var headersConfig = self.autoInstrument.networkResponseHeaders;\n\t headers = {};\n\t try {\n\t var header, i;\n\t if (headersConfig === true) {\n\t var allHeaders = xhr.getAllResponseHeaders();\n\t if (allHeaders) {\n\t var arr = allHeaders.trim().split(/[\\r\\n]+/);\n\t var parts, value;\n\t for (i=0; i < arr.length; i++) {\n\t parts = arr[i].split(': ');\n\t header = parts.shift();\n\t value = parts.join(': ');\n\t headers[header] = value;\n\t }\n\t }\n\t } else {\n\t for (i=0; i < headersConfig.length; i++) {\n\t header = headersConfig[i];\n\t headers[header] = xhr.getResponseHeader(header);\n\t }\n\t }\n\t } catch (e) {\n\t /* we ignore the errors here that could come from different\n\t * browser issues with the xhr methods */\n\t }\n\t }\n\t var body = null;\n\t if (self.autoInstrument.networkResponseBody) {\n\t try {\n\t body = xhr.responseText;\n\t } catch (e) {\n\t /* ignore errors from reading responseText */\n\t }\n\t }\n\t var response = null;\n\t if (body || headers) {\n\t response = {};\n\t if (body) {\n\t response.body = body;\n\t }\n\t if (headers) {\n\t response.headers = headers;\n\t }\n\t }\n\t if (response) {\n\t xhr.__rollbar_xhr.response = response;\n\t }\n\t }\n\t try {\n\t var code = xhr.status;\n\t code = code === 1223 ? 204 : code;\n\t xhr.__rollbar_xhr.status_code = code;\n\t xhr.__rollbar_event.level = self.telemeter.levelFromStatus(code);\n\t } catch (e) {\n\t /* ignore possible exception from xhr.status */\n\t }\n\t }\n\t }\n\t\n\t wrapProp('onload', xhr);\n\t wrapProp('onerror', xhr);\n\t wrapProp('onprogress', xhr);\n\t\n\t if ('onreadystatechange' in xhr && _.isFunction(xhr.onreadystatechange)) {\n\t replace(xhr, 'onreadystatechange', function(orig) {\n\t return self.rollbar.wrap(orig, undefined, onreadystatechangeHandler);\n\t });\n\t } else {\n\t xhr.onreadystatechange = onreadystatechangeHandler;\n\t }\n\t return orig.apply(this, arguments);\n\t }\n\t }, this.replacements, 'network');\n\t }\n\t\n\t if ('fetch' in this._window) {\n\t replace(this._window, 'fetch', function(orig) {\n\t /* eslint-disable no-unused-vars */\n\t return function(fn, t) {\n\t /* eslint-enable no-unused-vars */\n\t var args = new Array(arguments.length);\n\t for (var i=0, len=args.length; i < len; i++) {\n\t args[i] = arguments[i];\n\t }\n\t var input = args[0];\n\t var method = 'GET';\n\t var url;\n\t if (_.isType(input, 'string')) {\n\t url = input;\n\t } else if (input) {\n\t url = input.url;\n\t if (input.method) {\n\t method = input.method;\n\t }\n\t }\n\t if (args[1] && args[1].method) {\n\t method = args[1].method;\n\t }\n\t var metadata = {\n\t method: method,\n\t url: url,\n\t status_code: null,\n\t start_time_ms: _.now(),\n\t end_time_ms: null\n\t };\n\t var requestData = null;\n\t if (self.autoInstrument.networkRequestBody) {\n\t if (args[1] && args[1].body) {\n\t requestData = args[1].body;\n\t } else if (args[0] && !_.isType(args[0], 'string') && args[0].body) {\n\t requestData = args[0].body;\n\t }\n\t }\n\t self.telemeter.captureNetwork(metadata, 'fetch', undefined, requestData);\n\t return orig.apply(this, args).then(function (resp) {\n\t metadata.end_time_ms = _.now();\n\t metadata.status_code = resp.status;\n\t var headers = null;\n\t if (self.autoInstrument.networkResponseHeaders) {\n\t var headersConfig = self.autoInstrument.networkResponseHeaders;\n\t headers = {};\n\t try {\n\t if (headersConfig === true) {\n\t // This is unsupported in IE so we can't do it\n\t /*\n\t var allHeaders = resp.headers.entries();\n\t for (var pair of allHeaders) {\n\t headers[pair[0]] = pair[1];\n\t }\n\t */\n\t } else {\n\t for (var i=0; i < headersConfig.length; i++) {\n\t var header = headersConfig[i];\n\t headers[header] = resp.headers.get(header);\n\t }\n\t }\n\t } catch (e) {\n\t /* ignore probable IE errors */\n\t }\n\t }\n\t var response = null;\n\t if (headers) {\n\t response = {\n\t headers: headers\n\t };\n\t }\n\t if (response) {\n\t metadata.response = response;\n\t }\n\t return resp;\n\t });\n\t };\n\t }, this.replacements, 'network');\n\t }\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentConsole = function() {\n\t if (!('console' in this._window && this._window.console.log)) {\n\t return;\n\t }\n\t var b;\n\t while (this.replacements['log'].length) {\n\t b = this.replacements['log'].shift();\n\t this._window.console[b[0]] = b[1];\n\t }\n\t};\n\t\n\tInstrumenter.prototype.instrumentConsole = function() {\n\t if (!('console' in this._window && this._window.console.log)) {\n\t return;\n\t }\n\t\n\t var self = this;\n\t var c = this._window.console;\n\t\n\t function wrapConsole(method) {\n\t var orig = c[method];\n\t var origConsole = c;\n\t var level = method === 'warn' ? 'warning' : method;\n\t c[method] = function() {\n\t var args = Array.prototype.slice.call(arguments);\n\t var message = _.formatArgsAsString(args);\n\t self.telemeter.captureLog(message, level);\n\t if (orig) {\n\t Function.prototype.apply.call(orig, origConsole, args);\n\t }\n\t };\n\t self.replacements['log'].push([method, orig]);\n\t }\n\t var methods = ['debug','info','warn','error','log'];\n\t for (var i=0, len=methods.length; i < len; i++) {\n\t wrapConsole(methods[i]);\n\t }\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentDom = function() {\n\t if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n\t return;\n\t }\n\t this.removeListeners('dom');\n\t};\n\t\n\tInstrumenter.prototype.instrumentDom = function() {\n\t if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n\t return;\n\t }\n\t var clickHandler = this.handleClick.bind(this);\n\t var blurHandler = this.handleBlur.bind(this);\n\t this.addListener('dom', this._window, 'click', 'onclick', clickHandler, true);\n\t this.addListener('dom', this._window, 'blur', 'onfocusout', blurHandler, true);\n\t};\n\t\n\tInstrumenter.prototype.handleClick = function(evt) {\n\t try {\n\t var e = domUtil.getElementFromEvent(evt, this._document);\n\t var hasTag = e && e.tagName;\n\t var anchorOrButton = domUtil.isDescribedElement(e, 'a') || domUtil.isDescribedElement(e, 'button');\n\t if (hasTag && (anchorOrButton || domUtil.isDescribedElement(e, 'input', ['button', 'submit']))) {\n\t this.captureDomEvent('click', e);\n\t } else if (domUtil.isDescribedElement(e, 'input', ['checkbox', 'radio'])) {\n\t this.captureDomEvent('input', e, e.value, e.checked);\n\t }\n\t } catch (exc) {\n\t // TODO: Not sure what to do here\n\t }\n\t};\n\t\n\tInstrumenter.prototype.handleBlur = function(evt) {\n\t try {\n\t var e = domUtil.getElementFromEvent(evt, this._document);\n\t if (e && e.tagName) {\n\t if (domUtil.isDescribedElement(e, 'textarea')) {\n\t this.captureDomEvent('input', e, e.value);\n\t } else if (domUtil.isDescribedElement(e, 'select') && e.options && e.options.length) {\n\t this.handleSelectInputChanged(e);\n\t } else if (domUtil.isDescribedElement(e, 'input') && !domUtil.isDescribedElement(e, 'input', ['button', 'submit', 'hidden', 'checkbox', 'radio'])) {\n\t this.captureDomEvent('input', e, e.value);\n\t }\n\t }\n\t } catch (exc) {\n\t // TODO: Not sure what to do here\n\t }\n\t};\n\t\n\tInstrumenter.prototype.handleSelectInputChanged = function(elem) {\n\t if (elem.multiple) {\n\t for (var i = 0; i < elem.options.length; i++) {\n\t if (elem.options[i].selected) {\n\t this.captureDomEvent('input', elem, elem.options[i].value);\n\t }\n\t }\n\t } else if (elem.selectedIndex >= 0 && elem.options[elem.selectedIndex]) {\n\t this.captureDomEvent('input', elem, elem.options[elem.selectedIndex].value);\n\t }\n\t};\n\t\n\tInstrumenter.prototype.captureDomEvent = function(subtype, element, value, isChecked) {\n\t if (value !== undefined) {\n\t if (this.scrubTelemetryInputs || (domUtil.getElementType(element) === 'password')) {\n\t value = '[scrubbed]';\n\t } else if (this.telemetryScrubber) {\n\t var description = domUtil.describeElement(element);\n\t if (this.telemetryScrubber(description)) {\n\t value = '[scrubbed]';\n\t }\n\t }\n\t }\n\t var elementString = domUtil.elementArrayToString(domUtil.treeToArray(element));\n\t this.telemeter.captureDom(subtype, elementString, value, isChecked);\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentNavigation = function() {\n\t var chrome = this._window.chrome;\n\t var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n\t // See https://github.com/angular/angular.js/pull/13945/files\n\t var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n\t if (!hasPushState) {\n\t return;\n\t }\n\t restore(this.replacements, 'navigation');\n\t};\n\t\n\tInstrumenter.prototype.instrumentNavigation = function() {\n\t var chrome = this._window.chrome;\n\t var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n\t // See https://github.com/angular/angular.js/pull/13945/files\n\t var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n\t if (!hasPushState) {\n\t return;\n\t }\n\t var self = this;\n\t replace(this._window, 'onpopstate', function(orig) {\n\t return function() {\n\t var current = self._location.href;\n\t self.handleUrlChange(self._lastHref, current);\n\t if (orig) {\n\t orig.apply(this, arguments);\n\t }\n\t };\n\t }, this.replacements, 'navigation');\n\t\n\t replace(this._window.history, 'pushState', function(orig) {\n\t return function() {\n\t var url = arguments.length > 2 ? arguments[2] : undefined;\n\t if (url) {\n\t self.handleUrlChange(self._lastHref, url + '');\n\t }\n\t return orig.apply(this, arguments);\n\t };\n\t }, this.replacements, 'navigation');\n\t};\n\t\n\tInstrumenter.prototype.handleUrlChange = function(from, to) {\n\t var parsedHref = urlparser.parse(this._location.href);\n\t var parsedTo = urlparser.parse(to);\n\t var parsedFrom = urlparser.parse(from);\n\t this._lastHref = to;\n\t if (parsedHref.protocol === parsedTo.protocol && parsedHref.host === parsedTo.host) {\n\t to = parsedTo.path + (parsedTo.hash || '');\n\t }\n\t if (parsedHref.protocol === parsedFrom.protocol && parsedHref.host === parsedFrom.host) {\n\t from = parsedFrom.path + (parsedFrom.hash || '');\n\t }\n\t this.telemeter.captureNavigation(from, to);\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentConnectivity = function() {\n\t if (!('addEventListener' in this._window || 'body' in this._document)) {\n\t return;\n\t }\n\t if (this._window.addEventListener) {\n\t this.removeListeners('connectivity');\n\t } else {\n\t restore(this.replacements, 'connectivity');\n\t }\n\t};\n\t\n\tInstrumenter.prototype.instrumentConnectivity = function() {\n\t if (!('addEventListener' in this._window || 'body' in this._document)) {\n\t return;\n\t }\n\t if (this._window.addEventListener) {\n\t this.addListener('connectivity', this._window, 'online', undefined, function() {\n\t this.telemeter.captureConnectivityChange('online');\n\t }.bind(this), true);\n\t this.addListener('connectivity', this._window, 'offline', undefined, function() {\n\t this.telemeter.captureConnectivityChange('offline');\n\t }.bind(this), true);\n\t } else {\n\t var self = this;\n\t replace(this._document.body, 'ononline', function(orig) {\n\t return function() {\n\t self.telemeter.captureConnectivityChange('online');\n\t if (orig) {\n\t orig.apply(this, arguments);\n\t }\n\t }\n\t }, this.replacements, 'connectivity');\n\t replace(this._document.body, 'onoffline', function(orig) {\n\t return function() {\n\t self.telemeter.captureConnectivityChange('offline');\n\t if (orig) {\n\t orig.apply(this, arguments);\n\t }\n\t }\n\t }, this.replacements, 'connectivity');\n\t }\n\t};\n\t\n\tInstrumenter.prototype.addListener = function(section, obj, type, altType, handler, capture) {\n\t if (obj.addEventListener) {\n\t obj.addEventListener(type, handler, capture);\n\t this.eventRemovers[section].push(function() {\n\t obj.removeEventListener(type, handler, capture);\n\t });\n\t } else if (altType) {\n\t obj.attachEvent(altType, handler);\n\t this.eventRemovers[section].push(function() {\n\t obj.detachEvent(altType, handler);\n\t });\n\t }\n\t};\n\t\n\tInstrumenter.prototype.removeListeners = function(section) {\n\t var r;\n\t while (this.eventRemovers[section].length) {\n\t r = this.eventRemovers[section].shift();\n\t r();\n\t }\n\t};\n\t\n\tmodule.exports = Instrumenter;\n\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tfunction getElementType(e) {\n\t return (e.getAttribute('type') || '').toLowerCase();\n\t}\n\t\n\tfunction isDescribedElement(element, type, subtypes) {\n\t if (element.tagName.toLowerCase() !== type.toLowerCase()) {\n\t return false;\n\t }\n\t if (!subtypes) {\n\t return true;\n\t }\n\t element = getElementType(element);\n\t for (var i = 0; i < subtypes.length; i++) {\n\t if (subtypes[i] === element) {\n\t return true;\n\t }\n\t }\n\t return false;\n\t}\n\t\n\tfunction getElementFromEvent(evt, doc) {\n\t if (evt.target) {\n\t return evt.target;\n\t }\n\t if (doc && doc.elementFromPoint) {\n\t return doc.elementFromPoint(evt.clientX, evt.clientY);\n\t }\n\t return undefined;\n\t}\n\t\n\tfunction treeToArray(elem) {\n\t var MAX_HEIGHT = 5;\n\t var out = [];\n\t var nextDescription;\n\t for (var height = 0; elem && height < MAX_HEIGHT; height++) {\n\t nextDescription = describeElement(elem);\n\t if (nextDescription.tagName === 'html') {\n\t break;\n\t }\n\t out.unshift(nextDescription);\n\t elem = elem.parentNode;\n\t }\n\t return out;\n\t}\n\t\n\tfunction elementArrayToString(a) {\n\t var MAX_LENGTH = 80;\n\t var separator = ' > ', separatorLength = separator.length;\n\t var out = [], len = 0, nextStr, totalLength;\n\t\n\t for (var i = a.length - 1; i >= 0; i--) {\n\t nextStr = descriptionToString(a[i]);\n\t totalLength = len + (out.length * separatorLength) + nextStr.length;\n\t if (i < a.length - 1 && totalLength >= MAX_LENGTH + 3) {\n\t out.unshift('...');\n\t break;\n\t }\n\t out.unshift(nextStr);\n\t len += nextStr.length;\n\t }\n\t return out.join(separator);\n\t}\n\t\n\tfunction descriptionToString(desc) {\n\t if (!desc || !desc.tagName) {\n\t return '';\n\t }\n\t var out = [desc.tagName];\n\t if (desc.id) {\n\t out.push('#' + desc.id);\n\t }\n\t if (desc.classes) {\n\t out.push('.' + desc.classes.join('.'));\n\t }\n\t for (var i = 0; i < desc.attributes.length; i++) {\n\t out.push('[' + desc.attributes[i].key + '=\"' + desc.attributes[i].value + '\"]');\n\t }\n\t\n\t return out.join('');\n\t}\n\t\n\t/**\n\t * Input: a dom element\n\t * Output: null if tagName is falsey or input is falsey, else\n\t * {\n\t * tagName: String,\n\t * id: String | undefined,\n\t * classes: [String] | undefined,\n\t * attributes: [\n\t * {\n\t * key: OneOf(type, name, title, alt),\n\t * value: String\n\t * }\n\t * ]\n\t * }\n\t */\n\tfunction describeElement(elem) {\n\t if (!elem || !elem.tagName) {\n\t return null;\n\t }\n\t var out = {}, className, key, attr, i;\n\t out.tagName = elem.tagName.toLowerCase();\n\t if (elem.id) {\n\t out.id = elem.id;\n\t }\n\t className = elem.className;\n\t if (className && (typeof className === 'string')) {\n\t out.classes = className.split(/\\s+/);\n\t }\n\t var attributes = ['type', 'name', 'title', 'alt'];\n\t out.attributes = [];\n\t for (i = 0; i < attributes.length; i++) {\n\t key = attributes[i];\n\t attr = elem.getAttribute(key);\n\t if (attr) {\n\t out.attributes.push({key: key, value: attr});\n\t }\n\t }\n\t return out;\n\t}\n\t\n\tmodule.exports = {\n\t describeElement: describeElement,\n\t descriptionToString: descriptionToString,\n\t elementArrayToString: elementArrayToString,\n\t treeToArray: treeToArray,\n\t getElementFromEvent: getElementFromEvent,\n\t isDescribedElement: isDescribedElement,\n\t getElementType: getElementType\n\t};\n\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// rollbar.umd.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 5cd3017112725f22f80e","'use strict';\n\nvar rollbar = require('../rollbar');\n\nvar options = (typeof window !== 'undefined') && window._rollbarConfig;\nvar alias = options && options.globalAlias || 'Rollbar';\nvar shimRunning = (typeof window !== 'undefined') && window[alias] && typeof window[alias].shimId === 'function' && window[alias].shimId() !== undefined;\n\nif ((typeof window !== 'undefined') && !window._rollbarStartTime) {\n window._rollbarStartTime = (new Date()).getTime();\n}\n\nif (!shimRunning && options) {\n var Rollbar = new rollbar(options);\n window[alias] = Rollbar;\n} else if (typeof window !== 'undefined') {\n window.rollbar = rollbar;\n window._rollbarDidLoad = true;\n} else if (typeof self !== 'undefined') {\n self.rollbar = rollbar;\n self._rollbarDidLoad = true;\n}\n\nmodule.exports = rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/bundles/rollbar.js\n// module id = 1\n// module chunks = 0","'use strict';\n\nvar Client = require('../rollbar');\nvar _ = require('../utility');\nvar API = require('../api');\nvar logger = require('./logger');\nvar globals = require('./globalSetup');\n\nvar transport = require('./transport');\nvar urllib = require('./url');\n\nvar transforms = require('./transforms');\nvar sharedTransforms = require('../transforms');\nvar predicates = require('./predicates');\nvar sharedPredicates = require('../predicates');\nvar errorParser = require('./errorParser');\nvar Instrumenter = require('./telemetry');\n\nfunction Rollbar(options, client) {\n this.options = _.extend(true, defaultOptions, options);\n var api = new API(this.options, transport, urllib);\n this.client = client || new Client(this.options, api, logger, 'browser');\n\n var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n var gDocument = (typeof document != 'undefined') && document;\n addTransformsToNotifier(this.client.notifier);\n addPredicatesToQueue(this.client.queue);\n if (this.options.captureUncaught || this.options.handleUncaughtExceptions) {\n globals.captureUncaughtExceptions(gWindow, this);\n globals.wrapGlobals(gWindow, this);\n }\n if (this.options.captureUnhandledRejections || this.options.handleUnhandledRejections) {\n globals.captureUnhandledRejections(gWindow, this);\n }\n\n this.instrumenter = new Instrumenter(this.options, this.client.telemeter, this, gWindow, gDocument);\n this.instrumenter.instrument();\n}\n\nvar _instance = null;\nRollbar.init = function(options, client) {\n if (_instance) {\n return _instance.global(options).configure(options);\n }\n _instance = new Rollbar(options, client);\n return _instance;\n};\n\nfunction handleUninitialized(maybeCallback) {\n var message = 'Rollbar is not initialized';\n logger.error(message);\n if (maybeCallback) {\n maybeCallback(new Error(message));\n }\n}\n\nRollbar.prototype.global = function(options) {\n this.client.global(options);\n return this;\n};\nRollbar.global = function(options) {\n if (_instance) {\n return _instance.global(options);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.extend(true, {}, oldOptions, options, payload);\n this.client.configure(options, payloadData);\n this.instrumenter.configure(options);\n return this;\n};\nRollbar.configure = function(options, payloadData) {\n if (_instance) {\n return _instance.configure(options, payloadData);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.lastError = function() {\n return this.client.lastError;\n};\nRollbar.lastError = function() {\n if (_instance) {\n return _instance.lastError();\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.log = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.log(item);\n return {uuid: uuid};\n};\nRollbar.log = function() {\n if (_instance) {\n return _instance.log.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.debug = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.debug(item);\n return {uuid: uuid};\n};\nRollbar.debug = function() {\n if (_instance) {\n return _instance.debug.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.info = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.info(item);\n return {uuid: uuid};\n};\nRollbar.info = function() {\n if (_instance) {\n return _instance.info.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warn = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warn(item);\n return {uuid: uuid};\n};\nRollbar.warn = function() {\n if (_instance) {\n return _instance.warn.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warning = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warning(item);\n return {uuid: uuid};\n};\nRollbar.warning = function() {\n if (_instance) {\n return _instance.warning.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.error = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.error(item);\n return {uuid: uuid};\n};\nRollbar.error = function() {\n if (_instance) {\n return _instance.error.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.critical = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.critical(item);\n return {uuid: uuid};\n};\nRollbar.critical = function() {\n if (_instance) {\n return _instance.critical.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.handleUncaughtException = function(message, url, lineno, colno, error, context) {\n var item;\n var stackInfo = _.makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n 'onerror',\n 'uncaught exception',\n errorParser\n );\n if (_.isError(error)) {\n item = this._createItem([message, error, context]);\n item._unhandledStackInfo = stackInfo;\n } else if (_.isError(url)) {\n item = this._createItem([message, url, context]);\n item._unhandledStackInfo = stackInfo;\n } else {\n item = this._createItem([message, context]);\n item.stackInfo = stackInfo;\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n this.client.log(item);\n};\n\nRollbar.prototype.handleUnhandledRejection = function(reason, promise) {\n var message = 'unhandled rejection was null or undefined!';\n message = reason ? (reason.message || String(reason)) : message;\n var context = (reason && reason._rollbarContext) || (promise && promise._rollbarContext);\n\n var item;\n if (_.isError(reason)) {\n item = this._createItem([message, reason, context]);\n } else {\n item = this._createItem([message, reason, context]);\n item.stackInfo = _.makeUnhandledStackInfo(\n message,\n '',\n 0,\n 0,\n null,\n 'unhandledrejection',\n '',\n errorParser\n );\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n item._originalArgs = item._originalArgs || [];\n item._originalArgs.push(promise);\n this.client.log(item);\n};\n\nRollbar.prototype.wrap = function(f, context, _before) {\n try {\n var ctxFn;\n if(_.isFunction(context)) {\n ctxFn = context;\n } else {\n ctxFn = function() { return context || {}; };\n }\n\n if (!_.isFunction(f)) {\n return f;\n }\n\n if (f._isWrap) {\n return f;\n }\n\n if (!f._rollbar_wrapped) {\n f._rollbar_wrapped = function () {\n if (_before && _.isFunction(_before)) {\n _before.apply(this, arguments);\n }\n try {\n return f.apply(this, arguments);\n } catch(exc) {\n var e = exc;\n if (_.isType(e, 'string')) {\n e = new String(e);\n }\n e._rollbarContext = ctxFn() || {};\n e._rollbarContext._wrappedSource = f.toString();\n\n window._rollbarWrappedError = e;\n throw e;\n }\n };\n\n f._rollbar_wrapped._isWrap = true;\n\n if (f.hasOwnProperty) {\n for (var prop in f) {\n if (f.hasOwnProperty(prop)) {\n f._rollbar_wrapped[prop] = f[prop];\n }\n }\n }\n }\n\n return f._rollbar_wrapped;\n } catch (e) {\n // Return the original function if the wrap fails.\n return f;\n }\n};\nRollbar.wrap = function(f, context) {\n if (_instance) {\n return _instance.wrap(f, context);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.captureEvent = function(metadata, level) {\n return this.client.captureEvent(metadata, level);\n};\nRollbar.captureEvent = function(metadata, level) {\n if (_instance) {\n return _instance.captureEvent(metadata, level);\n } else {\n handleUninitialized();\n }\n};\n\n// The following two methods are used internally and are not meant for public use\nRollbar.prototype.captureDomContentLoaded = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureLoad(ts);\n};\n\n/* Internal */\n\nfunction addTransformsToNotifier(notifier) {\n notifier\n .addTransform(transforms.handleItemWithError)\n .addTransform(transforms.ensureItemHasSomethingToSay)\n .addTransform(transforms.addBaseInfo)\n .addTransform(transforms.addRequestInfo(window))\n .addTransform(transforms.addClientInfo(window))\n .addTransform(transforms.addPluginInfo(window))\n .addTransform(transforms.addBody)\n .addTransform(sharedTransforms.addMessageWithError)\n .addTransform(sharedTransforms.addTelemetryData)\n .addTransform(sharedTransforms.addConfigToPayload)\n .addTransform(transforms.scrubPayload)\n .addTransform(sharedTransforms.userTransform(logger))\n .addTransform(sharedTransforms.itemToPayload);\n}\n\nfunction addPredicatesToQueue(queue) {\n queue\n .addPredicate(sharedPredicates.checkLevel)\n .addPredicate(predicates.checkIgnore)\n .addPredicate(sharedPredicates.userCheckIgnore(logger))\n .addPredicate(sharedPredicates.urlIsNotBlacklisted(logger))\n .addPredicate(sharedPredicates.urlIsWhitelisted(logger))\n .addPredicate(sharedPredicates.messageIsIgnored(logger));\n}\n\nRollbar.prototype._createItem = function(args) {\n return _.createItem(args, logger, this);\n};\n\nfunction _getFirstFunction(args) {\n for (var i = 0, len = args.length; i < len; ++i) {\n if (_.isFunction(args[i])) {\n return args[i];\n }\n }\n return undefined;\n}\n\n/* global __NOTIFIER_VERSION__:false */\n/* global __DEFAULT_BROWSER_SCRUB_FIELDS__:false */\n/* global __DEFAULT_LOG_LEVEL__:false */\n/* global __DEFAULT_REPORT_LEVEL__:false */\n/* global __DEFAULT_UNCAUGHT_ERROR_LEVEL:false */\n/* global __DEFAULT_ENDPOINT__:false */\n\nvar defaultOptions = {\n version: __NOTIFIER_VERSION__,\n scrubFields: __DEFAULT_BROWSER_SCRUB_FIELDS__,\n logLevel: __DEFAULT_LOG_LEVEL__,\n reportLevel: __DEFAULT_REPORT_LEVEL__,\n uncaughtErrorLevel: __DEFAULT_UNCAUGHT_ERROR_LEVEL,\n endpoint: __DEFAULT_ENDPOINT__,\n verbose: false,\n enabled: true,\n sendConfig: false,\n includeItemsInTelemetry: true\n};\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/rollbar.js\n// module id = 2\n// module chunks = 0","'use strict';\n\nvar RateLimiter = require('./rateLimiter');\nvar Queue = require('./queue');\nvar Notifier = require('./notifier');\nvar Telemeter = require('./telemetry');\nvar _ = require('./utility');\n\n/*\n * Rollbar - the interface to Rollbar\n *\n * @param options\n * @param api\n * @param logger\n */\nfunction Rollbar(options, api, logger, platform) {\n this.options = _.extend(true, {}, options);\n this.logger = logger;\n Rollbar.rateLimiter.configureGlobal(this.options);\n Rollbar.rateLimiter.setPlatformOptions(platform, this.options);\n this.queue = new Queue(Rollbar.rateLimiter, api, logger, this.options);\n this.notifier = new Notifier(this.queue, this.options);\n this.telemeter = new Telemeter(this.options);\n this.lastError = null;\n}\n\nvar defaultOptions = {\n maxItems: 0,\n itemsPerMinute: 60\n};\n\nRollbar.rateLimiter = new RateLimiter(defaultOptions);\n\nRollbar.prototype.global = function(options) {\n Rollbar.rateLimiter.configureGlobal(options);\n return this;\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n this.notifier && this.notifier.configure(options);\n this.telemeter && this.telemeter.configure(options);\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.extend(true, {}, oldOptions, options, payload);\n this.global(this.options);\n return this;\n};\n\nRollbar.prototype.log = function(item) {\n var level = this._defaultLogLevel();\n return this._log(level, item);\n};\n\nRollbar.prototype.debug = function(item) {\n this._log('debug', item);\n};\n\nRollbar.prototype.info = function(item) {\n this._log('info', item);\n};\n\nRollbar.prototype.warn = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.warning = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.error = function(item) {\n this._log('error', item);\n};\n\nRollbar.prototype.critical = function(item) {\n this._log('critical', item);\n};\n\nRollbar.prototype.wait = function(callback) {\n this.queue.wait(callback);\n};\n\nRollbar.prototype.captureEvent = function(metadata, level) {\n return this.telemeter.captureEvent(metadata, level);\n};\n\nRollbar.prototype.captureDomContentLoaded = function(ts) {\n return this.telemeter.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(ts) {\n return this.telemeter.captureLoad(ts);\n};\n\n/* Internal */\n\nRollbar.prototype._log = function(defaultLevel, item) {\n if (this._sameAsLastError(item)) {\n if (item.callback) {\n item.callback();\n }\n return;\n }\n try {\n var callback = null;\n if (item.callback) {\n callback = item.callback;\n delete item.callback;\n }\n item.level = item.level || defaultLevel;\n this.telemeter._captureRollbarItem(item);\n item.telemetryEvents = this.telemeter.copyEvents();\n this.notifier.log(item, callback);\n } catch (e) {\n this.logger.error(e)\n }\n};\n\nRollbar.prototype._defaultLogLevel = function() {\n return this.options.logLevel || 'debug';\n};\n\nRollbar.prototype._sameAsLastError = function(item) {\n if (this.lastError && this.lastError === item.err) {\n return true;\n }\n this.lastError = item.err;\n return false;\n};\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rollbar.js\n// module id = 3\n// module chunks = 0","'use strict';\n\n/*\n * RateLimiter - an object that encapsulates the logic for counting items sent to Rollbar\n *\n * @param options - the same options that are accepted by configureGlobal offered as a convenience\n */\nfunction RateLimiter(options) {\n this.startTime = (new Date()).getTime();\n this.counter = 0;\n this.perMinCounter = 0;\n this.platform = null;\n this.platformOptions = {};\n this.configureGlobal(options);\n}\n\nRateLimiter.globalSettings = {\n startTime: (new Date()).getTime(),\n maxItems: undefined,\n itemsPerMinute: undefined\n};\n\n/*\n * configureGlobal - set the global rate limiter options\n *\n * @param options - Only the following values are recognized:\n * startTime: a timestamp of the form returned by (new Date()).getTime()\n * maxItems: the maximum items\n * itemsPerMinute: the max number of items to send in a given minute\n */\nRateLimiter.prototype.configureGlobal = function(options) {\n if (options.startTime !== undefined) {\n RateLimiter.globalSettings.startTime = options.startTime;\n }\n if (options.maxItems !== undefined) {\n RateLimiter.globalSettings.maxItems = options.maxItems;\n }\n if (options.itemsPerMinute !== undefined) {\n RateLimiter.globalSettings.itemsPerMinute = options.itemsPerMinute;\n }\n};\n\n/*\n * shouldSend - determine if we should send a given item based on rate limit settings\n *\n * @param item - the item we are about to send\n * @returns An object with the following structure:\n * error: (Error|null)\n * shouldSend: bool\n * payload: (Object|null)\n * If shouldSend is false, the item passed as a parameter should not be sent to Rollbar, and\n * exactly one of error or payload will be non-null. If error is non-null, the returned Error will\n * describe the situation, but it means that we were already over a rate limit (either globally or\n * per minute) when this item was checked. If error is null, and therefore payload is non-null, it\n * means this item put us over the global rate limit and the payload should be sent to Rollbar in\n * place of the passed in item.\n */\nRateLimiter.prototype.shouldSend = function(item, now) {\n now = now || (new Date()).getTime();\n if (now - this.startTime >= 60000) {\n this.startTime = now;\n this.perMinCounter = 0;\n }\n\n var globalRateLimit = RateLimiter.globalSettings.maxItems;\n var globalRateLimitPerMin = RateLimiter.globalSettings.itemsPerMinute;\n\n if (checkRate(item, globalRateLimit, this.counter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimit + ' max items reached', false);\n } else if (checkRate(item, globalRateLimitPerMin, this.perMinCounter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimitPerMin + ' items per minute reached', false);\n }\n this.counter++;\n this.perMinCounter++;\n\n var shouldSend = !checkRate(item, globalRateLimit, this.counter);\n var perMinute = shouldSend;\n shouldSend = shouldSend && !checkRate(item, globalRateLimitPerMin, this.perMinCounter);\n return shouldSendValue(this.platform, this.platformOptions, null, shouldSend, globalRateLimit, globalRateLimitPerMin, perMinute);\n};\n\nRateLimiter.prototype.setPlatformOptions = function(platform, options) {\n this.platform = platform;\n this.platformOptions = options;\n};\n\n/* Helpers */\n\nfunction checkRate(item, limit, counter) {\n return !item.ignoreRateLimit && limit >= 1 && counter > limit;\n}\n\nfunction shouldSendValue(platform, options, error, shouldSend, globalRateLimit, limitPerMin, perMinute) {\n var payload = null;\n if (error) {\n error = new Error(error);\n }\n if (!error && !shouldSend) {\n payload = rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute);\n }\n return {error: error, shouldSend: shouldSend, payload: payload};\n}\n\nfunction rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute) {\n var environment = options.environment || (options.payload && options.payload.environment);\n var msg;\n if (perMinute) {\n msg = 'item per minute limit reached, ignoring errors until timeout';\n } else {\n msg = 'maxItems has been hit, ignoring errors until reset.';\n }\n var item = {\n body: {\n message: {\n body: msg,\n extra: {\n maxItems: globalRateLimit,\n itemsPerMinute: limitPerMin\n }\n }\n },\n language: 'javascript',\n environment: environment,\n notifier: {\n version: (options.notifier && options.notifier.version) || options.version\n }\n };\n if (platform === 'browser') {\n item.platform = 'browser';\n item.framework = 'browser-js';\n item.notifier.name = 'rollbar-browser-js';\n } else if (platform === 'server') {\n item.framework = options.framework || 'node-js';\n item.notifier.name = options.notifier.name;\n } else if (platform === 'react-native') {\n item.framework = options.framework || 'react-native';\n item.notifier.name = options.notifier.name;\n }\n return item;\n}\n\nmodule.exports = RateLimiter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rateLimiter.js\n// module id = 4\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Queue - an object which handles which handles a queue of items to be sent to Rollbar.\n * This object handles rate limiting via a passed in rate limiter, retries based on connection\n * errors, and filtering of items based on a set of configurable predicates. The communication to\n * the backend is performed via a given API object.\n *\n * @param rateLimiter - An object which conforms to the interface\n * rateLimiter.shouldSend(item) -> bool\n * @param api - An object which conforms to the interface\n * api.postItem(payload, function(err, response))\n * @param logger - An object used to log verbose messages if desired\n * @param options - see Queue.prototype.configure\n */\nfunction Queue(rateLimiter, api, logger, options) {\n this.rateLimiter = rateLimiter;\n this.api = api;\n this.logger = logger;\n this.options = options;\n this.predicates = [];\n this.pendingItems = [];\n this.pendingRequests = [];\n this.retryQueue = [];\n this.retryHandle = null;\n this.waitCallback = null;\n this.waitIntervalID = null;\n}\n\n/*\n * configure - updates the options this queue uses\n *\n * @param options\n */\nQueue.prototype.configure = function(options) {\n this.api && this.api.configure(options);\n var oldOptions = this.options;\n this.options = _.extend(true, {}, oldOptions, options);\n return this;\n};\n\n/*\n * addPredicate - adds a predicate to the end of the list of predicates for this queue\n *\n * @param predicate - function(item, options) -> (bool|{err: Error})\n * Returning true means that this predicate passes and the item is okay to go on the queue\n * Returning false means do not add the item to the queue, but it is not an error\n * Returning {err: Error} means do not add the item to the queue, and the given error explains why\n * Returning {err: undefined} is equivalent to returning true but don't do that\n */\nQueue.prototype.addPredicate = function(predicate) {\n if (_.isFunction(predicate)) {\n this.predicates.push(predicate);\n }\n return this;\n};\n\nQueue.prototype.addPendingItem = function(item) {\n this.pendingItems.push(item);\n};\n\nQueue.prototype.removePendingItem = function(item) {\n var idx = this.pendingItems.indexOf(item);\n if (idx !== -1) {\n this.pendingItems.splice(idx, 1);\n }\n};\n\n/*\n * addItem - Send an item to the Rollbar API if all of the predicates are satisfied\n *\n * @param item - The payload to send to the backend\n * @param callback - function(error, repsonse) which will be called with the response from the API\n * in the case of a success, otherwise response will be null and error will have a value. If both\n * error and response are null then the item was stopped by a predicate which did not consider this\n * to be an error condition, but nonetheless did not send the item to the API.\n * @param originalError - The original error before any transformations that is to be logged if any\n */\nQueue.prototype.addItem = function(item, callback, originalError, originalItem) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() { return; };\n }\n var predicateResult = this._applyPredicates(item);\n if (predicateResult.stop) {\n this.removePendingItem(originalItem);\n callback(predicateResult.err);\n return;\n }\n this._maybeLog(item, originalError);\n this.removePendingItem(originalItem);\n this.pendingRequests.push(item);\n try {\n this._makeApiRequest(item, function(err, resp) {\n this._dequeuePendingRequest(item);\n callback(err, resp);\n }.bind(this));\n } catch (e) {\n this._dequeuePendingRequest(item);\n callback(e);\n }\n};\n\n/*\n * wait - Stop any further errors from being added to the queue, and get called back when all items\n * currently processing have finished sending to the backend.\n *\n * @param callback - function() called when all pending items have been sent\n */\nQueue.prototype.wait = function(callback) {\n if (!_.isFunction(callback)) {\n return;\n }\n this.waitCallback = callback;\n if (this._maybeCallWait()) {\n return;\n }\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitIntervalID = setInterval(function() {\n this._maybeCallWait();\n }.bind(this), 500);\n};\n\n/* _applyPredicates - Sequentially applies the predicates that have been added to the queue to the\n * given item with the currently configured options.\n *\n * @param item - An item in the queue\n * @returns {stop: bool, err: (Error|null)} - stop being true means do not add item to the queue,\n * the error value should be passed up to a callbak if we are stopping.\n */\nQueue.prototype._applyPredicates = function(item) {\n var p = null;\n for (var i = 0, len = this.predicates.length; i < len; i++) {\n p = this.predicates[i](item, this.options);\n if (!p || p.err !== undefined) {\n return {stop: true, err: p.err};\n }\n }\n return {stop: false, err: null};\n};\n\n/*\n * _makeApiRequest - Send an item to Rollbar, callback when done, if there is an error make an\n * effort to retry if we are configured to do so.\n *\n * @param item - an item ready to send to the backend\n * @param callback - function(err, response)\n */\nQueue.prototype._makeApiRequest = function(item, callback) {\n var rateLimitResponse = this.rateLimiter.shouldSend(item);\n if (rateLimitResponse.shouldSend) {\n this.api.postItem(item, function(err, resp) {\n if (err) {\n this._maybeRetry(err, item, callback);\n } else {\n callback(err, resp);\n }\n }.bind(this));\n } else if (rateLimitResponse.error) {\n callback(rateLimitResponse.error);\n } else {\n this.api.postItem(rateLimitResponse.payload, callback);\n }\n};\n\n// These are errors basically mean there is no internet connection\nvar RETRIABLE_ERRORS = ['ECONNRESET', 'ENOTFOUND', 'ESOCKETTIMEDOUT', 'ETIMEDOUT', 'ECONNREFUSED', 'EHOSTUNREACH', 'EPIPE', 'EAI_AGAIN'];\n\n/*\n * _maybeRetry - Given the error returned by the API, decide if we should retry or just callback\n * with the error.\n *\n * @param err - an error returned by the API transport\n * @param item - the item that was trying to be sent when this error occured\n * @param callback - function(err, response)\n */\nQueue.prototype._maybeRetry = function(err, item, callback) {\n var shouldRetry = false;\n if (this.options.retryInterval) {\n for (var i = 0, len = RETRIABLE_ERRORS.length; i < len; i++) {\n if (err.code === RETRIABLE_ERRORS[i]) {\n shouldRetry = true;\n break;\n }\n }\n }\n if (shouldRetry) {\n this._retryApiRequest(item, callback);\n } else {\n callback(err);\n }\n};\n\n/*\n * _retryApiRequest - Add an item and a callback to a queue and possibly start a timer to process\n * that queue based on the retryInterval in the options for this queue.\n *\n * @param item - an item that failed to send due to an error we deem retriable\n * @param callback - function(err, response)\n */\nQueue.prototype._retryApiRequest = function(item, callback) {\n this.retryQueue.push({item: item, callback: callback});\n\n if (!this.retryHandle) {\n this.retryHandle = setInterval(function() {\n while (this.retryQueue.length) {\n var retryObject = this.retryQueue.shift();\n this._makeApiRequest(retryObject.item, retryObject.callback);\n }\n }.bind(this), this.options.retryInterval);\n }\n};\n\n/*\n * _dequeuePendingRequest - Removes the item from the pending request queue, this queue is used to\n * enable to functionality of providing a callback that clients can pass to `wait` to be notified\n * when the pending request queue has been emptied. This must be called when the API finishes\n * processing this item. If a `wait` callback is configured, it is called by this function.\n *\n * @param item - the item previously added to the pending request queue\n */\nQueue.prototype._dequeuePendingRequest = function(item) {\n var idx = this.pendingRequests.indexOf(item);\n if (idx !== -1) {\n this.pendingRequests.splice(idx, 1);\n this._maybeCallWait();\n }\n};\n\nQueue.prototype._maybeLog = function(data, originalError) {\n if (this.logger && this.options.verbose) {\n var message = originalError;\n message = message || _.get(data, 'body.trace.exception.message');\n message = message || _.get(data, 'body.trace_chain.0.exception.message');\n if (message) {\n this.logger.error(message);\n return;\n }\n message = _.get(data, 'body.message.body');\n if (message) {\n this.logger.log(message);\n }\n }\n};\n\nQueue.prototype._maybeCallWait = function() {\n if (_.isFunction(this.waitCallback) && this.pendingItems.length === 0 && this.pendingRequests.length === 0) {\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitCallback();\n return true;\n }\n return false;\n};\n\nmodule.exports = Queue;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/queue.js\n// module id = 5\n// module chunks = 0","'use strict';\n\nvar extend = require('extend');\n\nvar RollbarJSON = {};\nvar __initRollbarJSON = false;\nfunction setupJSON() {\n if (__initRollbarJSON) {\n return;\n }\n __initRollbarJSON = true;\n\n if (isDefined(JSON)) {\n if (isNativeFunction(JSON.stringify)) {\n RollbarJSON.stringify = JSON.stringify;\n }\n if (isNativeFunction(JSON.parse)) {\n RollbarJSON.parse = JSON.parse;\n }\n }\n if (!isFunction(RollbarJSON.stringify) || !isFunction(RollbarJSON.parse)) {\n var setupCustomJSON = require('../vendor/JSON-js/json3.js');\n setupCustomJSON(RollbarJSON);\n }\n}\nsetupJSON();\n\n/*\n * isType - Given a Javascript value and a string, returns true if the type of the value matches the\n * given string.\n *\n * @param x - any value\n * @param t - a lowercase string containing one of the following type names:\n * - undefined\n * - null\n * - error\n * - number\n * - boolean\n * - string\n * - symbol\n * - function\n * - object\n * - array\n * @returns true if x is of type t, otherwise false\n */\nfunction isType(x, t) {\n return t === typeName(x);\n}\n\n/*\n * typeName - Given a Javascript value, returns the type of the object as a string\n */\nfunction typeName(x) {\n var name = typeof x;\n if (name !== 'object') {\n return name;\n }\n if (!x) {\n return 'null';\n }\n if (x instanceof Error) {\n return 'error';\n }\n return ({}).toString.call(x).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n}\n\n/* isFunction - a convenience function for checking if a value is a function\n *\n * @param f - any value\n * @returns true if f is a function, otherwise false\n */\nfunction isFunction(f) {\n return isType(f, 'function');\n}\n\n/* isNativeFunction - a convenience function for checking if a value is a native JS function\n *\n * @param f - any value\n * @returns true if f is a native JS function, otherwise false\n */\nfunction isNativeFunction(f) {\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n var funcMatchString = Function.prototype.toString.call(Object.prototype.hasOwnProperty)\n .replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?');\n var reIsNative = RegExp('^' + funcMatchString + '$');\n return isObject(f) && reIsNative.test(f);\n}\n\n/* isObject - Checks if the argument is an object\n *\n * @param value - any value\n * @returns true is value is an object function is an object)\n*/\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/*\n * isDefined - a convenience function for checking if a value is not equal to undefined\n *\n * @param u - any value\n * @returns true if u is anything other than undefined\n */\nfunction isDefined(u) {\n return !isType(u, 'undefined');\n}\n\n/*\n * isIterable - convenience function for checking if a value can be iterated, essentially\n * whether it is an object or an array.\n *\n * @param i - any value\n * @returns true if i is an object or an array as determined by `typeName`\n */\nfunction isIterable(i) {\n var type = typeName(i);\n return (type === 'object' || type === 'array');\n}\n\n/*\n * isError - convenience function for checking if a value is of an error type\n *\n * @param e - any value\n * @returns true if e is an error\n */\nfunction isError(e) {\n return isType(e, 'error');\n}\n\nfunction traverse(obj, func, seen) {\n var k, v, i;\n var isObj = isType(obj, 'object');\n var isArray = isType(obj, 'array');\n var keys = [];\n\n if (isObj && seen.indexOf(obj) !== -1) {\n return obj;\n }\n seen.push(obj);\n\n if (isObj) {\n for (k in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, k)) {\n keys.push(k);\n }\n }\n } else if (isArray) {\n for (i = 0; i < obj.length; ++i) {\n keys.push(i);\n }\n }\n\n var result = isObj ? {} : [];\n for (i = 0; i < keys.length; ++i) {\n k = keys[i];\n v = obj[k];\n result[k] = func(k, v, seen);\n }\n\n return (keys.length != 0) ? result : obj;\n}\n\nfunction redact() {\n return '********';\n}\n\n// from http://stackoverflow.com/a/8809472/1138191\nfunction uuid4() {\n var d = now();\n var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (d + Math.random() * 16) % 16 | 0;\n d = Math.floor(d / 16);\n return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16);\n });\n return uuid;\n}\n\nvar LEVELS = {\n debug: 0,\n info: 1,\n warning: 2,\n error: 3,\n critical: 4\n};\n\nfunction sanitizeUrl(url) {\n var baseUrlParts = parseUri(url);\n // remove a trailing # if there is no anchor\n if (baseUrlParts.anchor === '') {\n baseUrlParts.source = baseUrlParts.source.replace('#', '');\n }\n\n url = baseUrlParts.source.replace('?' + baseUrlParts.query, '');\n return url;\n}\n\nvar parseUriOptions = {\n strictMode: false,\n key: [\n 'source',\n 'protocol',\n 'authority',\n 'userInfo',\n 'user',\n 'password',\n 'host',\n 'port',\n 'relative',\n 'path',\n 'directory',\n 'file',\n 'query',\n 'anchor'\n ],\n q: {\n name: 'queryKey',\n parser: /(?:^|&)([^&=]*)=?([^&]*)/g\n },\n parser: {\n strict: /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,\n loose: /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/\n }\n};\n\nfunction parseUri(str) {\n if (!isType(str, 'string')) {\n throw new Error('received invalid input');\n }\n\n var o = parseUriOptions;\n var m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str);\n var uri = {};\n var i = o.key.length;\n\n while (i--) {\n uri[o.key[i]] = m[i] || '';\n }\n\n uri[o.q.name] = {};\n uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {\n if ($1) {\n uri[o.q.name][$1] = $2;\n }\n });\n\n return uri;\n}\n\nfunction addParamsAndAccessTokenToPath(accessToken, options, params) {\n params = params || {};\n params.access_token = accessToken;\n var paramsArray = [];\n var k;\n for (k in params) {\n if (Object.prototype.hasOwnProperty.call(params, k)) {\n paramsArray.push([k, params[k]].join('='));\n }\n }\n var query = '?' + paramsArray.sort().join('&');\n\n options = options || {};\n options.path = options.path || '';\n var qs = options.path.indexOf('?');\n var h = options.path.indexOf('#');\n var p;\n if (qs !== -1 && (h === -1 || h > qs)) {\n p = options.path;\n options.path = p.substring(0,qs) + query + '&' + p.substring(qs+1);\n } else {\n if (h !== -1) {\n p = options.path;\n options.path = p.substring(0,h) + query + p.substring(h);\n } else {\n options.path = options.path + query;\n }\n }\n}\n\nfunction formatUrl(u, protocol) {\n protocol = protocol || u.protocol;\n if (!protocol && u.port) {\n if (u.port === 80) {\n protocol = 'http:';\n } else if (u.port === 443) {\n protocol = 'https:';\n }\n }\n protocol = protocol || 'https:';\n\n if (!u.hostname) {\n return null;\n }\n var result = protocol + '//' + u.hostname;\n if (u.port) {\n result = result + ':' + u.port;\n }\n if (u.path) {\n result = result + u.path;\n }\n return result;\n}\n\nfunction stringify(obj, backup) {\n var value, error;\n try {\n value = RollbarJSON.stringify(obj);\n } catch (jsonError) {\n if (backup && isFunction(backup)) {\n try {\n value = backup(obj);\n } catch (backupError) {\n error = backupError;\n }\n } else {\n error = jsonError;\n }\n }\n return {error: error, value: value};\n}\n\nfunction jsonParse(s) {\n var value, error;\n try {\n value = RollbarJSON.parse(s);\n } catch (e) {\n error = e;\n }\n return {error: error, value: value};\n}\n\nfunction makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n mode,\n backupMessage,\n errorParser\n) {\n var location = {\n url: url || '',\n line: lineno,\n column: colno\n };\n location.func = errorParser.guessFunctionName(location.url, location.line);\n location.context = errorParser.gatherContext(location.url, location.line);\n var href = document && document.location && document.location.href;\n var useragent = window && window.navigator && window.navigator.userAgent;\n return {\n 'mode': mode,\n 'message': error ? String(error) : (message || backupMessage),\n 'url': href,\n 'stack': [location],\n 'useragent': useragent\n };\n}\n\nfunction wrapCallback(logger, f) {\n return function(err, resp) {\n try {\n f(err, resp);\n } catch (e) {\n logger.error(e);\n }\n };\n}\n\nfunction createItem(args, logger, notifier, requestKeys, lambdaContext) {\n var message, err, custom, callback, request;\n var arg;\n var extraArgs = [];\n\n for (var i = 0, l = args.length; i < l; ++i) {\n arg = args[i];\n\n var typ = typeName(arg);\n switch (typ) {\n case 'undefined':\n break;\n case 'string':\n message ? extraArgs.push(arg) : message = arg;\n break;\n case 'function':\n callback = wrapCallback(logger, arg);\n break;\n case 'date':\n extraArgs.push(arg);\n break;\n case 'error':\n case 'domexception':\n err ? extraArgs.push(arg) : err = arg;\n break;\n case 'object':\n case 'array':\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n if (requestKeys && typ === 'object' && !request) {\n for (var j = 0, len = requestKeys.length; j < len; ++j) {\n if (arg[requestKeys[j]] !== undefined) {\n request = arg;\n break;\n }\n }\n if (request) {\n break;\n }\n }\n custom ? extraArgs.push(arg) : custom = arg;\n break;\n default:\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n extraArgs.push(arg);\n }\n }\n\n if (extraArgs.length > 0) {\n // if custom is an array this turns it into an object with integer keys\n custom = extend(true, {}, custom);\n custom.extraArgs = extraArgs;\n }\n\n var item = {\n message: message,\n err: err,\n custom: custom,\n timestamp: now(),\n callback: callback,\n uuid: uuid4()\n };\n if (custom && custom.level !== undefined) {\n item.level = custom.level;\n delete custom.level;\n }\n if (requestKeys && request) {\n item.request = request;\n }\n if (lambdaContext) {\n item.lambdaContext = lambdaContext;\n }\n item._originalArgs = args;\n return item;\n}\n\n/*\n * get - given an obj/array and a keypath, return the value at that keypath or\n * undefined if not possible.\n *\n * @param obj - an object or array\n * @param path - a string of keys separated by '.' such as 'plugin.jquery.0.message'\n * which would correspond to 42 in `{plugin: {jquery: [{message: 42}]}}`\n */\nfunction get(obj, path) {\n if (!obj) {\n return undefined;\n }\n var keys = path.split('.');\n var result = obj;\n try {\n for (var i = 0, len = keys.length; i < len; ++i) {\n result = result[keys[i]];\n }\n } catch (e) {\n result = undefined;\n }\n return result;\n}\n\nfunction set(obj, path, value) {\n if (!obj) {\n return;\n }\n var keys = path.split('.');\n var len = keys.length;\n if (len < 1) {\n return;\n }\n if (len === 1) {\n obj[keys[0]] = value;\n return;\n }\n try {\n var temp = obj[keys[0]] || {};\n var replacement = temp;\n for (var i = 1; i < len-1; i++) {\n temp[keys[i]] = temp[keys[i]] || {};\n temp = temp[keys[i]];\n }\n temp[keys[len-1]] = value;\n obj[keys[0]] = replacement;\n } catch (e) {\n return;\n }\n}\n\nfunction scrub(data, scrubFields) {\n scrubFields = scrubFields || [];\n var paramRes = _getScrubFieldRegexs(scrubFields);\n var queryRes = _getScrubQueryParamRegexs(scrubFields);\n\n function redactQueryParam(dummy0, paramPart, dummy1, dummy2, dummy3, valPart) {\n return paramPart + redact(valPart);\n }\n\n function paramScrubber(v) {\n var i;\n if (isType(v, 'string')) {\n for (i = 0; i < queryRes.length; ++i) {\n v = v.replace(queryRes[i], redactQueryParam);\n }\n }\n return v;\n }\n\n function valScrubber(k, v) {\n var i;\n for (i = 0; i < paramRes.length; ++i) {\n if (paramRes[i].test(k)) {\n v = redact(v);\n break;\n }\n }\n return v;\n }\n\n function scrubber(k, v, seen) {\n var tmpV = valScrubber(k, v);\n if (tmpV === v) {\n if (isType(v, 'object') || isType(v, 'array')) {\n return traverse(v, scrubber, seen);\n }\n return paramScrubber(tmpV);\n } else {\n return tmpV;\n }\n }\n\n return traverse(data, scrubber, []);\n}\n\nfunction _getScrubFieldRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '^\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?$';\n ret.push(new RegExp(pat, 'i'));\n }\n return ret;\n}\n\n\nfunction _getScrubQueryParamRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?';\n ret.push(new RegExp('(' + pat + '=)([^&\\\\n]+)', 'igm'));\n }\n return ret;\n}\n\nfunction formatArgsAsString(args) {\n var i, len, arg;\n var result = [];\n for (i = 0, len = args.length; i < len; i++) {\n arg = args[i];\n if (typeof arg === 'object') {\n arg = stringify(arg);\n arg = arg.error || arg.value;\n if (arg.length > 500)\n arg = arg.substr(0,500)+'...';\n } else if (typeof arg === 'undefined') {\n arg = 'undefined';\n }\n result.push(arg);\n }\n return result.join(' ');\n}\n\nfunction now() {\n if (Date.now) {\n return +Date.now();\n }\n return +new Date();\n}\n\nmodule.exports = {\n isType: isType,\n typeName: typeName,\n isFunction: isFunction,\n isNativeFunction: isNativeFunction,\n isIterable: isIterable,\n isError: isError,\n extend: extend,\n traverse: traverse,\n redact: redact,\n uuid4: uuid4,\n LEVELS: LEVELS,\n sanitizeUrl: sanitizeUrl,\n addParamsAndAccessTokenToPath: addParamsAndAccessTokenToPath,\n formatUrl: formatUrl,\n stringify: stringify,\n jsonParse: jsonParse,\n makeUnhandledStackInfo: makeUnhandledStackInfo,\n createItem: createItem,\n get: get,\n set: set,\n scrub: scrub,\n formatArgsAsString: formatArgsAsString,\n now: now\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/utility.js\n// module id = 6\n// module chunks = 0","'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) {/**/}\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[0],\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t} else if ((typeof target !== 'object' && typeof target !== 'function') || target == null) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = target[name];\n\t\t\t\tcopy = options[name];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\ttarget[name] = extend(deep, clone, copy);\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/extend/index.js\n// module id = 7\n// module chunks = 0","// json3.js\n// 2017-02-21\n// Public Domain.\n// NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n// See http://www.JSON.org/js.html\n// This code should be minified before deployment.\n// See http://javascript.crockford.com/jsmin.html\n\n// USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n// NOT CONTROL.\n\n// This file creates a global JSON object containing two methods: stringify\n// and parse. This file provides the ES5 JSON capability to ES3 systems.\n// If a project might run on IE8 or earlier, then this file should be included.\n// This file does nothing on ES5 systems.\n\n// JSON.stringify(value, replacer, space)\n// value any JavaScript value, usually an object or array.\n// replacer an optional parameter that determines how object\n// values are stringified for objects. It can be a\n// function or an array of strings.\n// space an optional parameter that specifies the indentation\n// of nested structures. If it is omitted, the text will\n// be packed without extra whitespace. If it is a number,\n// it will specify the number of spaces to indent at each\n// level. If it is a string (such as \"\\t\" or \" \"),\n// it contains the characters used to indent at each level.\n// This method produces a JSON text from a JavaScript value.\n// When an object value is found, if the object contains a toJSON\n// method, its toJSON method will be called and the result will be\n// stringified. A toJSON method does not serialize: it returns the\n// value represented by the name/value pair that should be serialized,\n// or undefined if nothing should be serialized. The toJSON method\n// will be passed the key associated with the value, and this will be\n// bound to the value.\n\n// For example, this would serialize Dates as ISO strings.\n\n// Date.prototype.toJSON = function (key) {\n// function f(n) {\n// // Format integers to have at least two digits.\n// return (n < 10)\n// ? \"0\" + n\n// : n;\n// }\n// return this.getUTCFullYear() + \"-\" +\n// f(this.getUTCMonth() + 1) + \"-\" +\n// f(this.getUTCDate()) + \"T\" +\n// f(this.getUTCHours()) + \":\" +\n// f(this.getUTCMinutes()) + \":\" +\n// f(this.getUTCSeconds()) + \"Z\";\n// };\n\n// You can provide an optional replacer method. It will be passed the\n// key and value of each member, with this bound to the containing\n// object. The value that is returned from your method will be\n// serialized. If your method returns undefined, then the member will\n// be excluded from the serialization.\n\n// If the replacer parameter is an array of strings, then it will be\n// used to select the members to be serialized. It filters the results\n// such that only members with keys listed in the replacer array are\n// stringified.\n\n// Values that do not have JSON representations, such as undefined or\n// functions, will not be serialized. Such values in objects will be\n// dropped; in arrays they will be replaced with null. You can use\n// a replacer function to replace those with JSON values.\n\n// JSON.stringify(undefined) returns undefined.\n\n// The optional space parameter produces a stringification of the\n// value that is filled with line breaks and indentation to make it\n// easier to read.\n\n// If the space parameter is a non-empty string, then that string will\n// be used for indentation. If the space parameter is a number, then\n// the indentation will be that many spaces.\n\n// Example:\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}]);\n// // text is '[\"e\",{\"pluribus\":\"unum\"}]'\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}], null, \"\\t\");\n// // text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\n\n// text = JSON.stringify([new Date()], function (key, value) {\n// return this[key] instanceof Date\n// ? \"Date(\" + this[key] + \")\"\n// : value;\n// });\n// // text is '[\"Date(---current time---)\"]'\n\n// JSON.parse(text, reviver)\n// This method parses a JSON text to produce an object or array.\n// It can throw a SyntaxError exception.\n// This has been modified to use JSON-js/json_parse_state.js as the\n// parser instead of the one built around eval found in JSON-js/json2.js\n\n// The optional reviver parameter is a function that can filter and\n// transform the results. It receives each of the keys and values,\n// and its return value is used instead of the original value.\n// If it returns what it received, then the structure is not modified.\n// If it returns undefined then the member is deleted.\n\n// Example:\n\n// // Parse the text. Values that look like ISO date strings will\n// // be converted to Date objects.\n\n// myData = JSON.parse(text, function (key, value) {\n// var a;\n// if (typeof value === \"string\") {\n// a =\n// /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n// if (a) {\n// return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n// +a[5], +a[6]));\n// }\n// }\n// return value;\n// });\n\n// myData = JSON.parse('[\"Date(09/09/2001)\"]', function (key, value) {\n// var d;\n// if (typeof value === \"string\" &&\n// value.slice(0, 5) === \"Date(\" &&\n// value.slice(-1) === \")\") {\n// d = new Date(value.slice(5, -1));\n// if (d) {\n// return d;\n// }\n// }\n// return value;\n// });\n\n// This is a reference implementation. You are free to copy, modify, or\n// redistribute.\n\n/*jslint\n for, this\n */\n\n/*property\n JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\n getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\n lastIndex, length, parse, prototype, push, replace, slice, stringify,\n test, toJSON, toString, valueOf\n */\n\nvar setupCustomJSON = function(JSON) {\n\n var rx_one = /^[\\],:{}\\s]*$/;\n var rx_two = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g;\n var rx_three = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\n var rx_four = /(?:^|:|,)(?:\\s*\\[)+/g;\n var rx_escapable = /[\\\\\"\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n var rx_dangerous = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\n function f(n) {\n // Format integers to have at least two digits.\n return n < 10\n ? \"0\" + n\n : n;\n }\n\n function this_value() {\n return this.valueOf();\n }\n\n if (typeof Date.prototype.toJSON !== \"function\") {\n\n Date.prototype.toJSON = function () {\n\n return isFinite(this.valueOf())\n ? this.getUTCFullYear() + \"-\" +\n f(this.getUTCMonth() + 1) + \"-\" +\n f(this.getUTCDate()) + \"T\" +\n f(this.getUTCHours()) + \":\" +\n f(this.getUTCMinutes()) + \":\" +\n f(this.getUTCSeconds()) + \"Z\"\n : null;\n };\n\n Boolean.prototype.toJSON = this_value;\n Number.prototype.toJSON = this_value;\n String.prototype.toJSON = this_value;\n }\n\n var gap;\n var indent;\n var meta;\n var rep;\n\n\n function quote(string) {\n\n // If the string contains no control characters, no quote characters, and no\n // backslash characters, then we can safely slap some quotes around it.\n // Otherwise we must also replace the offending characters with safe escape\n // sequences.\n\n rx_escapable.lastIndex = 0;\n return rx_escapable.test(string)\n ? \"\\\"\" + string.replace(rx_escapable, function (a) {\n var c = meta[a];\n return typeof c === \"string\"\n ? c\n : \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n }) + \"\\\"\"\n : \"\\\"\" + string + \"\\\"\";\n }\n\n\n function str(key, holder) {\n\n // Produce a string from holder[key].\n\n var i; // The loop counter.\n var k; // The member key.\n var v; // The member value.\n var length;\n var mind = gap;\n var partial;\n var value = holder[key];\n\n // If the value has a toJSON method, call it to obtain a replacement value.\n\n if (value && typeof value === \"object\" &&\n typeof value.toJSON === \"function\") {\n value = value.toJSON(key);\n }\n\n // If we were called with a replacer function, then call the replacer to\n // obtain a replacement value.\n\n if (typeof rep === \"function\") {\n value = rep.call(holder, key, value);\n }\n\n // What happens next depends on the value's type.\n\n switch (typeof value) {\n case \"string\":\n return quote(value);\n\n case \"number\":\n\n // JSON numbers must be finite. Encode non-finite numbers as null.\n\n return isFinite(value)\n ? String(value)\n : \"null\";\n\n case \"boolean\":\n case \"null\":\n\n // If the value is a boolean or null, convert it to a string. Note:\n // typeof null does not produce \"null\". The case is included here in\n // the remote chance that this gets fixed someday.\n\n return String(value);\n\n // If the type is \"object\", we might be dealing with an object or an array or\n // null.\n\n case \"object\":\n\n // Due to a specification blunder in ECMAScript, typeof null is \"object\",\n // so watch out for that case.\n\n if (!value) {\n return \"null\";\n }\n\n // Make an array to hold the partial results of stringifying this object value.\n\n gap += indent;\n partial = [];\n\n // Is the value an array?\n\n if (Object.prototype.toString.apply(value) === \"[object Array]\") {\n\n // The value is an array. Stringify every element. Use null as a placeholder\n // for non-JSON values.\n\n length = value.length;\n for (i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || \"null\";\n }\n\n // Join all of the elements together, separated with commas, and wrap them in\n // brackets.\n\n v = partial.length === 0\n ? \"[]\"\n : gap\n ? \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\"\n : \"[\" + partial.join(\",\") + \"]\";\n gap = mind;\n return v;\n }\n\n // If the replacer is an array, use it to select the members to be stringified.\n\n if (rep && typeof rep === \"object\") {\n length = rep.length;\n for (i = 0; i < length; i += 1) {\n if (typeof rep[i] === \"string\") {\n k = rep[i];\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n } else {\n\n // Otherwise, iterate through all of the keys in the object.\n\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n }\n\n // Join all of the member texts together, separated with commas,\n // and wrap them in braces.\n\n v = partial.length === 0\n ? \"{}\"\n : gap\n ? \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\"\n : \"{\" + partial.join(\",\") + \"}\";\n gap = mind;\n return v;\n }\n }\n\n // If the JSON object does not yet have a stringify method, give it one.\n\n if (typeof JSON.stringify !== \"function\") {\n meta = { // table of character substitutions\n \"\\b\": \"\\\\b\",\n \"\\t\": \"\\\\t\",\n \"\\n\": \"\\\\n\",\n \"\\f\": \"\\\\f\",\n \"\\r\": \"\\\\r\",\n \"\\\"\": \"\\\\\\\"\",\n \"\\\\\": \"\\\\\\\\\"\n };\n JSON.stringify = function (value, replacer, space) {\n\n // The stringify method takes a value and an optional replacer, and an optional\n // space parameter, and returns a JSON text. The replacer can be a function\n // that can replace values, or an array of strings that will select the keys.\n // A default replacer method can be provided. Use of the space parameter can\n // produce text that is more easily readable.\n\n var i;\n gap = \"\";\n indent = \"\";\n\n // If the space parameter is a number, make an indent string containing that\n // many spaces.\n\n if (typeof space === \"number\") {\n for (i = 0; i < space; i += 1) {\n indent += \" \";\n }\n\n // If the space parameter is a string, it will be used as the indent string.\n\n } else if (typeof space === \"string\") {\n indent = space;\n }\n\n // If there is a replacer, it must be a function or an array.\n // Otherwise, throw an error.\n\n rep = replacer;\n if (replacer && typeof replacer !== \"function\" &&\n (typeof replacer !== \"object\" ||\n typeof replacer.length !== \"number\")) {\n throw new Error(\"JSON.stringify\");\n }\n\n // Make a fake root object containing our value under the key of \"\".\n // Return the result of stringifying the value.\n\n return str(\"\", {\"\": value});\n };\n }\n\n\n // If the JSON object does not yet have a parse method, give it one.\n\n if (typeof JSON.parse !== \"function\") {\n JSON.parse = (function () {\n\n // This function creates a JSON parse function that uses a state machine rather\n // than the dangerous eval function to parse a JSON text.\n\n var state; // The state of the parser, one of\n // 'go' The starting state\n // 'ok' The final, accepting state\n // 'firstokey' Ready for the first key of the object or\n // the closing of an empty object\n // 'okey' Ready for the next key of the object\n // 'colon' Ready for the colon\n // 'ovalue' Ready for the value half of a key/value pair\n // 'ocomma' Ready for a comma or closing }\n // 'firstavalue' Ready for the first value of an array or\n // an empty array\n // 'avalue' Ready for the next value of an array\n // 'acomma' Ready for a comma or closing ]\n var stack; // The stack, for controlling nesting.\n var container; // The current container object or array\n var key; // The current key\n var value; // The current value\n var escapes = { // Escapement translation table\n \"\\\\\": \"\\\\\",\n \"\\\"\": \"\\\"\",\n \"/\": \"/\",\n \"t\": \"\\t\",\n \"n\": \"\\n\",\n \"r\": \"\\r\",\n \"f\": \"\\f\",\n \"b\": \"\\b\"\n };\n var string = { // The actions for string tokens\n go: function () {\n state = \"ok\";\n },\n firstokey: function () {\n key = value;\n state = \"colon\";\n },\n okey: function () {\n key = value;\n state = \"colon\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var number = { // The actions for number tokens\n go: function () {\n state = \"ok\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var action = {\n\n // The action table describes the behavior of the machine. It contains an\n // object for each token. Each object contains a method that is called when\n // a token is matched in a state. An object will lack a method for illegal\n // states.\n\n \"{\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = {};\n state = \"firstokey\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = {};\n state = \"firstokey\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n }\n },\n \"}\": {\n firstokey: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n ocomma: function () {\n var pop = stack.pop();\n container[key] = value;\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \"[\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = [];\n state = \"firstavalue\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = [];\n state = \"firstavalue\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n }\n },\n \"]\": {\n firstavalue: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n acomma: function () {\n var pop = stack.pop();\n container.push(value);\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \":\": {\n colon: function () {\n if (Object.hasOwnProperty.call(container, key)) {\n throw new SyntaxError(\"Duplicate key '\" + key + \"\\\"\");\n }\n state = \"ovalue\";\n }\n },\n \",\": {\n ocomma: function () {\n container[key] = value;\n state = \"okey\";\n },\n acomma: function () {\n container.push(value);\n state = \"avalue\";\n }\n },\n \"true\": {\n go: function () {\n value = true;\n state = \"ok\";\n },\n ovalue: function () {\n value = true;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = true;\n state = \"acomma\";\n },\n avalue: function () {\n value = true;\n state = \"acomma\";\n }\n },\n \"false\": {\n go: function () {\n value = false;\n state = \"ok\";\n },\n ovalue: function () {\n value = false;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = false;\n state = \"acomma\";\n },\n avalue: function () {\n value = false;\n state = \"acomma\";\n }\n },\n \"null\": {\n go: function () {\n value = null;\n state = \"ok\";\n },\n ovalue: function () {\n value = null;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = null;\n state = \"acomma\";\n },\n avalue: function () {\n value = null;\n state = \"acomma\";\n }\n }\n };\n\n function debackslashify(text) {\n\n // Remove and replace any backslash escapement.\n\n return text.replace(/\\\\(?:u(.{4})|([^u]))/g, function (ignore, b, c) {\n return b\n ? String.fromCharCode(parseInt(b, 16))\n : escapes[c];\n });\n }\n\n return function (source, reviver) {\n\n // A regular expression is used to extract tokens from the JSON text.\n // The extraction process is cautious.\n\n var result;\n var tx = /^[\\u0020\\t\\n\\r]*(?:([,:\\[\\]{}]|true|false|null)|(-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)|\"((?:[^\\r\\n\\t\\\\\\\"]|\\\\(?:[\"\\\\\\/trnfb]|u[0-9a-fA-F]{4}))*)\")/;\n\n // Set the starting state.\n\n state = \"go\";\n\n // The stack records the container, key, and state for each object or array\n // that contains another object or array while processing nested structures.\n\n stack = [];\n\n // If any error occurs, we will catch it and ultimately throw a syntax error.\n\n try {\n\n // For each token...\n\n while (true) {\n result = tx.exec(source);\n if (!result) {\n break;\n }\n\n // result is the result array from matching the tokenizing regular expression.\n // result[0] contains everything that matched, including any initial whitespace.\n // result[1] contains any punctuation that was matched, or true, false, or null.\n // result[2] contains a matched number, still in string form.\n // result[3] contains a matched string, without quotes but with escapement.\n\n if (result[1]) {\n\n // Token: Execute the action for this state and token.\n\n action[result[1]][state]();\n\n } else if (result[2]) {\n\n // Number token: Convert the number string into a number value and execute\n // the action for this state and number.\n\n value = +result[2];\n number[state]();\n } else {\n\n // String token: Replace the escapement sequences and execute the action for\n // this state and string.\n\n value = debackslashify(result[3]);\n string[state]();\n }\n\n // Remove the token from the string. The loop will continue as long as there\n // are tokens. This is a slow process, but it allows the use of ^ matching,\n // which assures that no illegal tokens slip through.\n\n source = source.slice(result[0].length);\n }\n\n // If we find a state/token combination that is illegal, then the action will\n // cause an error. We handle the error by simply changing the state.\n\n } catch (e) {\n state = e;\n }\n\n // The parsing is finished. If we are not in the final \"ok\" state, or if the\n // remaining source contains anything except whitespace, then we did not have\n //a well-formed JSON text.\n\n if (state !== \"ok\" || (/[^\\u0020\\t\\n\\r]/.test(source))) {\n throw (state instanceof SyntaxError)\n ? state\n : new SyntaxError(\"JSON\");\n }\n\n // If there is a reviver function, we recursively walk the new structure,\n // passing each name/value pair to the reviver function for possible\n // transformation, starting with a temporary root object that holds the current\n // value in an empty key. If there is not a reviver function, we simply return\n // that value.\n\n return (typeof reviver === \"function\")\n ? (function walk(holder, key) {\n var k;\n var v;\n var val = holder[key];\n if (val && typeof val === \"object\") {\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(val, k)) {\n v = walk(val, k);\n if (v !== undefined) {\n val[k] = v;\n } else {\n delete val[k];\n }\n }\n }\n }\n return reviver.call(holder, key, val);\n }({\"\": value}, \"\"))\n : value;\n };\n }());\n }\n}\n\nmodule.exports = setupCustomJSON;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./vendor/JSON-js/json3.js\n// module id = 8\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Notifier - the internal object responsible for delegating between the client exposed API, the\n * chain of transforms necessary to turn an item into something that can be sent to Rollbar, and the\n * queue which handles the communcation with the Rollbar API servers.\n *\n * @param queue - an object that conforms to the interface: addItem(item, callback)\n * @param options - an object representing the options to be set for this notifier, this should have\n * any defaults already set by the caller\n */\nfunction Notifier(queue, options) {\n this.queue = queue;\n this.options = options;\n this.transforms = [];\n}\n\n/*\n * configure - updates the options for this notifier with the passed in object\n *\n * @param options - an object which gets merged with the current options set on this notifier\n * @returns this\n */\nNotifier.prototype.configure = function(options) {\n this.queue && this.queue.configure(options);\n var oldOptions = this.options;\n this.options = _.extend(true, {}, oldOptions, options);\n return this;\n};\n\n/*\n * addTransform - adds a transform onto the end of the queue of transforms for this notifier\n *\n * @param transform - a function which takes three arguments:\n * * item: An Object representing the data to eventually be sent to Rollbar\n * * options: The current value of the options for this notifier\n * * callback: function(err: (Null|Error), item: (Null|Object)) the transform must call this\n * callback with a null value for error if it wants the processing chain to continue, otherwise\n * with an error to terminate the processing. The item should be the updated item after this\n * transform is finished modifying it.\n */\nNotifier.prototype.addTransform = function(transform) {\n if (_.isFunction(transform)) {\n this.transforms.push(transform);\n }\n return this;\n};\n\n/*\n * log - the internal log function which applies the configured transforms and then pushes onto the\n * queue to be sent to the backend.\n *\n * @param item - An object with the following structure:\n * message [String] - An optional string to be sent to rollbar\n * error [Error] - An optional error\n *\n * @param callback - A function of type function(err, resp) which will be called with exactly one\n * null argument and one non-null argument. The callback will be called once, either during the\n * transform stage if an error occurs inside a transform, or in response to the communication with\n * the backend. The second argument will be the response from the backend in case of success.\n */\nNotifier.prototype.log = function(item, callback) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!this.options.enabled) {\n return callback(new Error('Rollbar is not enabled'));\n }\n\n this.queue.addPendingItem(item);\n var originalError = item.err;\n this._applyTransforms(item, function(err, i) {\n if (err) {\n this.queue.removePendingItem(item);\n return callback(err, null);\n }\n this.queue.addItem(i, callback, originalError, item);\n }.bind(this));\n};\n\n/* Internal */\n\n/*\n * _applyTransforms - Applies the transforms that have been added to this notifier sequentially. See\n * `addTransform` for more information.\n *\n * @param item - An item to be transformed\n * @param callback - A function of type function(err, item) which will be called with a non-null\n * error and a null item in the case of a transform failure, or a null error and non-null item after\n * all transforms have been applied.\n */\nNotifier.prototype._applyTransforms = function(item, callback) {\n var transformIndex = -1;\n var transformsLength = this.transforms.length;\n var transforms = this.transforms;\n var options = this.options;\n\n var cb = function(err, i) {\n if (err) {\n callback(err, null);\n return;\n }\n\n transformIndex++;\n\n if (transformIndex === transformsLength) {\n callback(null, i);\n return;\n }\n\n transforms[transformIndex](i, options, cb);\n };\n\n cb(null, item);\n};\n\nmodule.exports = Notifier;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/notifier.js\n// module id = 9\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nvar MAX_EVENTS = 100;\n\nfunction Telemeter(options) {\n this.queue = [];\n this.options = _.extend(true, {}, options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n this.maxQueueSize = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n}\n\nTelemeter.prototype.configure = function(options) {\n var oldOptions = this.options;\n this.options = _.extend(true, {}, oldOptions, options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n var newMaxEvents = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n var deleteCount = 0;\n if (this.maxQueueSize > newMaxEvents) {\n deleteCount = this.maxQueueSize - newMaxEvents;\n }\n this.maxQueueSize = newMaxEvents;\n this.queue.splice(0, deleteCount);\n};\n\nTelemeter.prototype.copyEvents = function() {\n return Array.prototype.slice.call(this.queue, 0);\n};\n\nTelemeter.prototype.capture = function(type, metadata, level, rollbarUUID, timestamp) {\n var e = {\n level: getLevel(type, level),\n type: type,\n timestamp_ms: timestamp || _.now(),\n body: metadata,\n source: 'client'\n };\n if (rollbarUUID) {\n e.uuid = rollbarUUID;\n }\n\n try {\n if (_.isFunction(this.options.filterTelemetry) && this.options.filterTelemetry(e)) {\n return false;\n }\n } catch (e) {\n this.options.filterTelemetry = null;\n }\n\n this.push(e);\n return e;\n};\n\nTelemeter.prototype.captureEvent = function(metadata, level, rollbarUUID) {\n return this.capture('manual', metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.captureError = function(err, level, rollbarUUID, timestamp) {\n var metadata = {\n message: err.message || String(err)\n };\n if (err.stack) {\n metadata.stack = err.stack;\n }\n return this.capture('error', metadata, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureLog = function(message, level, rollbarUUID, timestamp) {\n return this.capture('log', {\n message: message\n }, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureNetwork = function(metadata, subtype, rollbarUUID, requestData) {\n subtype = subtype || 'xhr';\n metadata.subtype = metadata.subtype || subtype;\n if (requestData) {\n metadata.request = requestData;\n }\n var level = this.levelFromStatus(metadata.status_code);\n return this.capture('network', metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.levelFromStatus = function(statusCode) {\n if (statusCode >= 200 && statusCode < 400) {\n return 'info';\n }\n if (statusCode === 0 || statusCode >= 400) {\n return 'error';\n }\n return 'info';\n};\n\nTelemeter.prototype.captureDom = function(subtype, element, value, checked, rollbarUUID) {\n var metadata = {\n subtype: subtype,\n element: element\n };\n if (value !== undefined) {\n metadata.value = value;\n }\n if (checked !== undefined) {\n metadata.checked = checked;\n }\n return this.capture('dom', metadata, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureNavigation = function(from, to, rollbarUUID) {\n return this.capture('navigation', {from: from, to: to}, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureDomContentLoaded = function(ts) {\n return this.capture('navigation', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n */\n};\nTelemeter.prototype.captureLoad = function(ts) {\n return this.capture('navigation', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n */\n};\n\nTelemeter.prototype.captureConnectivityChange = function(type, rollbarUUID) {\n return this.captureNetwork({change: type}, 'connectivity', rollbarUUID);\n};\n\n// Only intended to be used internally by the notifier\nTelemeter.prototype._captureRollbarItem = function(item) {\n if (!this.options.includeItemsInTelemetry) {\n return;\n }\n if (item.err) {\n return this.captureError(item.err, item.level, item.uuid, item.timestamp);\n }\n if (item.message) {\n return this.captureLog(item.message, item.level, item.uuid, item.timestamp);\n }\n if (item.custom) {\n return this.capture('log', item.custom, item.level, item.uuid, item.timestamp);\n }\n};\n\nTelemeter.prototype.push = function(e) {\n this.queue.push(e);\n if (this.queue.length > this.maxQueueSize) {\n this.queue.shift();\n }\n};\n\nfunction getLevel(type, level) {\n if (level) {\n return level;\n }\n var defaultLevel = {\n error: 'error',\n manual: 'info'\n };\n return defaultLevel[type] || 'info';\n}\n\nmodule.exports = Telemeter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/telemetry.js\n// module id = 10\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\nvar helpers = require('./apiUtility');\n\nvar defaultOptions = {\n hostname: 'api.rollbar.com',\n path: '/api/1/item/',\n search: null,\n version: '1',\n protocol: 'https:',\n port: 443\n};\n\n/**\n * Api is an object that encapsulates methods of communicating with\n * the Rollbar API. It is a standard interface with some parts implemented\n * differently for server or browser contexts. It is an object that should\n * be instantiated when used so it can contain non-global options that may\n * be different for another instance of RollbarApi.\n *\n * @param options {\n * accessToken: the accessToken to use for posting items to rollbar\n * endpoint: an alternative endpoint to send errors to\n * must be a valid, fully qualified URL.\n * The default is: https://api.rollbar.com/api/1/item\n * proxy: if you wish to proxy requests provide an object\n * with the following keys:\n * host or hostname (required): foo.example.com\n * port (optional): 123\n * protocol (optional): https\n * }\n */\nfunction Api(options, t, u, j) {\n this.options = options;\n this.transport = t;\n this.url = u;\n this.jsonBackup = j;\n this.accessToken = options.accessToken;\n this.transportOptions = _getTransport(options, u);\n}\n\n/**\n *\n * @param data\n * @param callback\n */\nApi.prototype.postItem = function(data, callback) {\n var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n this.transport.post(this.accessToken, transportOptions, payload, callback);\n};\n\nApi.prototype.configure = function(options) {\n var oldOptions = this.oldOptions;\n this.options = _.extend(true, {}, oldOptions, options);\n this.transportOptions = _getTransport(this.options, this.url);\n if (this.options.accessToken !== undefined) {\n this.accessToken = this.options.accessToken;\n }\n return this;\n};\n\nfunction _getTransport(options, url) {\n return helpers.getTransportFromOptions(options, defaultOptions, url);\n}\n\nmodule.exports = Api;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/api.js\n// module id = 11\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction buildPayload(accessToken, data, jsonBackup) {\n if (!_.isType(data.context, 'string')) {\n var contextResult = _.stringify(data.context, jsonBackup);\n if (contextResult.error) {\n data.context = 'Error: could not serialize \\'context\\'';\n } else {\n data.context = contextResult.value || '';\n }\n if (data.context.length > 255) {\n data.context = data.context.substr(0, 255);\n }\n }\n return {\n access_token: accessToken,\n data: data\n };\n}\n\nfunction getTransportFromOptions(options, defaults, url) {\n var hostname = defaults.hostname;\n var protocol = defaults.protocol;\n var port = defaults.port;\n var path = defaults.path;\n var search = defaults.search;\n\n var proxy = options.proxy;\n if (options.endpoint) {\n var opts = url.parse(options.endpoint);\n hostname = opts.hostname;\n protocol = opts.protocol;\n port = opts.port;\n path = opts.pathname;\n search = opts.search;\n }\n return {\n hostname: hostname,\n protocol: protocol,\n port: port,\n path: path,\n search: search,\n proxy: proxy\n };\n}\n\nfunction transportOptions(transport, method) {\n var protocol = transport.protocol || 'https:';\n var port = transport.port || (protocol === 'http:' ? 80 : protocol === 'https:' ? 443 : undefined);\n var hostname = transport.hostname;\n var path = transport.path;\n if (transport.search) {\n path = path + transport.search;\n }\n if (transport.proxy) {\n path = protocol + '//' + hostname + path;\n hostname = transport.proxy.host || transport.proxy.hostname;\n port = transport.proxy.port;\n protocol = transport.proxy.protocol || protocol;\n }\n return {\n protocol: protocol,\n hostname: hostname,\n path: path,\n port: port,\n method: method\n };\n}\n\nfunction appendPathToPath(base, path) {\n var baseTrailingSlash = /\\/$/.test(base);\n var pathBeginningSlash = /^\\//.test(path);\n\n if (baseTrailingSlash && pathBeginningSlash) {\n path = path.substring(1);\n } else if (!baseTrailingSlash && !pathBeginningSlash) {\n path = '/' + path;\n }\n\n return base + path;\n}\n\nmodule.exports = {\n buildPayload: buildPayload,\n getTransportFromOptions: getTransportFromOptions,\n transportOptions: transportOptions,\n appendPathToPath: appendPathToPath\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/apiUtility.js\n// module id = 12\n// module chunks = 0","'use strict';\n\n/* eslint-disable no-console */\nrequire('console-polyfill');\nvar detection = require('./detection');\nvar _ = require('../utility');\n\nfunction error() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.error(_.formatArgsAsString(args));\n } else {\n console.error.apply(console, args);\n }\n}\n\nfunction info() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.info(_.formatArgsAsString(args));\n } else {\n console.info.apply(console, args);\n }\n}\n\nfunction log() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.log(_.formatArgsAsString(args));\n } else {\n console.log.apply(console, args);\n }\n}\n\n/* eslint-enable no-console */\n\nmodule.exports = {\n error: error,\n info: info,\n log: log\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/logger.js\n// module id = 13\n// module chunks = 0","// Console-polyfill. MIT license.\n// https://github.com/paulmillr/console-polyfill\n// Make it safe to do console.log() always.\n(function(global) {\n 'use strict';\n if (!global.console) {\n global.console = {};\n }\n var con = global.console;\n var prop, method;\n var dummy = function() {};\n var properties = ['memory'];\n var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' +\n 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' +\n 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',');\n while (prop = properties.pop()) if (!con[prop]) con[prop] = {};\n while (method = methods.pop()) if (!con[method]) con[method] = dummy;\n // Using `this` for web workers & supports Browserify / Webpack.\n})(typeof window === 'undefined' ? this : window);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/console-polyfill/index.js\n// module id = 14\n// module chunks = 0","'use strict';\n\n// This detection.js module is used to encapsulate any ugly browser/feature\n// detection we may need to do.\n\n// Figure out which version of IE we're using, if any.\n// This is gleaned from http://stackoverflow.com/questions/5574842/best-way-to-check-for-ie-less-than-9-in-javascript-without-library\n// Will return an integer on IE (i.e. 8)\n// Will return undefined otherwise\nfunction getIEVersion() {\n\tvar undef;\n\tif (!document) {\n\t\treturn undef;\n\t}\n\n var v = 3,\n div = document.createElement('div'),\n all = div.getElementsByTagName('i');\n\n while (\n div.innerHTML = '',\n all[0]\n );\n\n return v > 4 ? v : undef;\n}\n\nvar Detection = {\n ieVersion: getIEVersion\n};\n\nmodule.exports = Detection;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/detection.js\n// module id = 15\n// module chunks = 0","'use strict';\n\nfunction captureUncaughtExceptions(window, handler, shim) {\n if (!window) { return; }\n var oldOnError;\n\n if (typeof handler._rollbarOldOnError === 'function') {\n oldOnError = handler._rollbarOldOnError;\n } else if (window.onerror && !window.onerror.belongsToShim) {\n oldOnError = window.onerror;\n handler._rollbarOldOnError = oldOnError;\n }\n\n var fn = function() {\n var args = Array.prototype.slice.call(arguments, 0);\n _rollbarWindowOnError(window, handler, oldOnError, args);\n };\n fn.belongsToShim = shim;\n window.onerror = fn;\n}\n\nfunction _rollbarWindowOnError(window, r, old, args) {\n if (window._rollbarWrappedError) {\n if (!args[4]) {\n args[4] = window._rollbarWrappedError;\n }\n if (!args[5]) {\n args[5] = window._rollbarWrappedError._rollbarContext;\n }\n window._rollbarWrappedError = null;\n }\n\n r.handleUncaughtException.apply(r, args);\n if (old) {\n old.apply(window, args);\n }\n}\n\nfunction captureUnhandledRejections(window, handler, shim) {\n if (!window) { return; }\n\n if (typeof window._rollbarURH === 'function' && window._rollbarURH.belongsToShim) {\n window.removeEventListener('unhandledrejection', window._rollbarURH);\n }\n\n var rejectionHandler = function (evt) {\n var reason, promise, detail;\n try {\n reason = evt.reason;\n } catch (e) {\n reason = undefined;\n }\n try {\n promise = evt.promise;\n } catch (e) {\n promise = '[unhandledrejection] error getting `promise` from event';\n }\n try {\n detail = evt.detail;\n if (!reason && detail) {\n reason = detail.reason;\n promise = detail.promise;\n }\n } catch (e) {\n detail = '[unhandledrejection] error getting `detail` from event';\n }\n if (!reason) {\n reason = '[unhandledrejection] error getting `reason` from event';\n }\n\n if (handler && handler.handleUnhandledRejection) {\n handler.handleUnhandledRejection(reason, promise);\n }\n };\n rejectionHandler.belongsToShim = shim;\n window._rollbarURH = rejectionHandler;\n window.addEventListener('unhandledrejection', rejectionHandler);\n}\n\nfunction wrapGlobals(window, handler, shim) {\n if (!window) { return; }\n // Adapted from https://github.com/bugsnag/bugsnag-js\n var globals = 'EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload'.split(',');\n var i, global;\n for (i = 0; i < globals.length; ++i) {\n global = globals[i];\n\n if (window[global] && window[global].prototype) {\n _extendListenerPrototype(handler, window[global].prototype, shim);\n }\n }\n}\n\nfunction _extendListenerPrototype(handler, prototype, shim) {\n if (prototype.hasOwnProperty && prototype.hasOwnProperty('addEventListener')) {\n var oldAddEventListener = prototype.addEventListener;\n while (oldAddEventListener._rollbarOldAdd && oldAddEventListener.belongsToShim) {\n oldAddEventListener = oldAddEventListener._rollbarOldAdd;\n }\n var addFn = function(event, callback, bubble) {\n oldAddEventListener.call(this, event, handler.wrap(callback), bubble);\n };\n addFn._rollbarOldAdd = oldAddEventListener;\n addFn.belongsToShim = shim;\n prototype.addEventListener = addFn;\n\n var oldRemoveEventListener = prototype.removeEventListener;\n while (oldRemoveEventListener._rollbarOldRemove && oldRemoveEventListener.belongsToShim) {\n oldRemoveEventListener = oldRemoveEventListener._rollbarOldRemove;\n }\n var removeFn = function(event, callback, bubble) {\n oldRemoveEventListener.call(this, event, callback && callback._rollbar_wrapped || callback, bubble);\n };\n removeFn._rollbarOldRemove = oldRemoveEventListener;\n removeFn.belongsToShim = shim;\n prototype.removeEventListener = removeFn;\n }\n}\n\nmodule.exports = {\n captureUncaughtExceptions: captureUncaughtExceptions,\n captureUnhandledRejections: captureUnhandledRejections,\n wrapGlobals: wrapGlobals\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/globalSetup.js\n// module id = 16\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar logger = require('./logger');\n\n/*\n * accessToken may be embedded in payload but that should not\n * be assumed\n *\n * options: {\n * hostname\n * protocol\n * path\n * port\n * method\n * }\n *\n * params is an object containing key/value pairs. These\n * will be appended to the path as 'key=value&key=value'\n *\n * payload is an unserialized object\n */\n\nfunction get(accessToken, options, params, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n _.addParamsAndAccessTokenToPath(accessToken, options, params);\n\n var method = 'GET';\n var url = _.formatUrl(options);\n _makeRequest(accessToken, url, method, null, callback, requestFactory);\n}\n\nfunction post(accessToken, options, payload, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!payload) {\n return callback(new Error('Cannot send empty request'));\n }\n\n var stringifyResult = _.stringify(payload);\n if (stringifyResult.error) {\n return callback(stringifyResult.error);\n }\n\n var writeData = stringifyResult.value;\n var method = 'POST';\n var url = _.formatUrl(options);\n _makeRequest(accessToken, url, method, writeData, callback, requestFactory);\n}\n\nfunction _makeRequest(accessToken, url, method, data, callback, requestFactory) {\n var request;\n if (requestFactory) {\n request = requestFactory();\n } else {\n request = _createXMLHTTPObject();\n }\n if (!request) {\n // Give up, no way to send requests\n return callback(new Error('No way to send a request'));\n }\n try {\n try {\n var onreadystatechange = function() {\n try {\n if (onreadystatechange && request.readyState === 4) {\n onreadystatechange = undefined;\n\n var parseResponse = _.jsonParse(request.responseText);\n if (_isSuccess(request)) {\n callback(parseResponse.error, parseResponse.value);\n return;\n } else if (_isNormalFailure(request)) {\n if (request.status === 403) {\n // likely caused by using a server access token\n var message = parseResponse.value && parseResponse.value.message;\n logger.error(message);\n }\n // return valid http status codes\n callback(new Error(String(request.status)));\n } else {\n // IE will return a status 12000+ on some sort of connection failure,\n // so we return a blank error\n // http://msdn.microsoft.com/en-us/library/aa383770%28VS.85%29.aspx\n var msg = 'XHR response had no status code (likely connection failure)';\n callback(_newRetriableError(msg));\n }\n }\n } catch (ex) {\n //jquery source mentions firefox may error out while accessing the\n //request members if there is a network error\n //https://github.com/jquery/jquery/blob/a938d7b1282fc0e5c52502c225ae8f0cef219f0a/src/ajax/xhr.js#L111\n var exc;\n if (ex && ex.stack) {\n exc = ex;\n } else {\n exc = new Error(ex);\n }\n callback(exc);\n }\n };\n\n request.open(method, url, true);\n if (request.setRequestHeader) {\n request.setRequestHeader('Content-Type', 'application/json');\n request.setRequestHeader('X-Rollbar-Access-Token', accessToken);\n }\n request.onreadystatechange = onreadystatechange;\n request.send(data);\n } catch (e1) {\n // Sending using the normal xmlhttprequest object didn't work, try XDomainRequest\n if (typeof XDomainRequest !== 'undefined') {\n\n // Assume we are in a really old browser which has a bunch of limitations:\n // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\n // Extreme paranoia: if we have XDomainRequest then we have a window, but just in case\n if (!window || !window.location) {\n return callback(new Error('No window available during request, unknown environment'));\n }\n\n // If the current page is http, try and send over http\n if (window.location.href.substring(0, 5) === 'http:' && url.substring(0, 5) === 'https') {\n url = 'http' + url.substring(5);\n }\n\n var xdomainrequest = new XDomainRequest();\n xdomainrequest.onprogress = function() {};\n xdomainrequest.ontimeout = function() {\n var msg = 'Request timed out';\n var code = 'ETIMEDOUT';\n callback(_newRetriableError(msg, code));\n };\n xdomainrequest.onerror = function() {\n callback(new Error('Error during request'));\n };\n xdomainrequest.onload = function() {\n var parseResponse = _.jsonParse(xdomainrequest.responseText);\n callback(parseResponse.error, parseResponse.value);\n };\n xdomainrequest.open(method, url, true);\n xdomainrequest.send(data);\n } else {\n callback(new Error('Cannot find a method to transport a request'));\n }\n }\n } catch (e2) {\n callback(e2);\n }\n}\n\nfunction _createXMLHTTPObject() {\n /* global ActiveXObject:false */\n\n var factories = [\n function () {\n return new XMLHttpRequest();\n },\n function () {\n return new ActiveXObject('Msxml2.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Msxml3.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Microsoft.XMLHTTP');\n }\n ];\n var xmlhttp;\n var i;\n var numFactories = factories.length;\n for (i = 0; i < numFactories; i++) {\n /* eslint-disable no-empty */\n try {\n xmlhttp = factories[i]();\n break;\n } catch (e) {\n // pass\n }\n /* eslint-enable no-empty */\n }\n return xmlhttp;\n}\n\nfunction _isSuccess(r) {\n return r && r.status && r.status === 200;\n}\n\nfunction _isNormalFailure(r) {\n return r && _.isType(r.status, 'number') && r.status >= 400 && r.status < 600;\n}\n\nfunction _newRetriableError(message, code) {\n var err = new Error(message);\n err.code = code || 'ENOTFOUND';\n return err;\n}\n\nmodule.exports = {\n get: get,\n post: post\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transport.js\n// module id = 17\n// module chunks = 0","'use strict';\n\n// See https://nodejs.org/docs/latest/api/url.html\nfunction parse(url) {\n var result = {\n protocol: null, auth: null, host: null, path: null,\n hash: null, href: url, hostname: null, port: null,\n pathname: null, search: null, query: null\n };\n\n var i, last;\n i = url.indexOf('//');\n if (i !== -1) {\n result.protocol = url.substring(0,i);\n last = i+2;\n } else {\n last = 0;\n }\n \n i = url.indexOf('@', last);\n if (i !== -1) {\n result.auth = url.substring(last, i);\n last = i+1;\n }\n\n i = url.indexOf('/', last);\n if (i === -1) {\n i = url.indexOf('?', last);\n if (i === -1) {\n i = url.indexOf('#', last);\n if (i === -1) {\n result.host = url.substring(last);\n } else {\n result.host = url.substring(last, i);\n result.hash = url.substring(i);\n }\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n return result;\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n\n i = url.indexOf('#', last);\n if (i === -1) {\n result.path = url.substring(last);\n } else {\n result.path = url.substring(last, i);\n result.hash = url.substring(i);\n }\n\n if (result.path) {\n var pathParts = result.path.split('?');\n result.pathname = pathParts[0];\n result.query = pathParts[1];\n result.search = result.query ? '?' + result.query : null;\n }\n return result;\n}\n\nmodule.exports = {\n parse: parse\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/url.js\n// module id = 18\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar errorParser = require('./errorParser');\nvar logger = require('./logger');\n\nfunction handleItemWithError(item, options, callback) {\n item.data = item.data || {};\n if (item.err) {\n try {\n item.stackInfo = item.err._savedStackTrace || errorParser.parse(item.err);\n } catch (e)\n /* istanbul ignore next */\n {\n logger.error('Error while parsing the error object.', e);\n item.message = item.err.message || item.err.description || item.message || String(item.err);\n delete item.err;\n }\n }\n callback(null, item);\n}\n\nfunction ensureItemHasSomethingToSay(item, options, callback) {\n if (!item.message && !item.stackInfo && !item.custom) {\n callback(new Error('No message, stack info, or custom data'), null);\n }\n callback(null, item);\n}\n\nfunction addBaseInfo(item, options, callback) {\n var environment = (options.payload && options.payload.environment) || options.environment;\n item.data = _.extend(true, {}, item.data, {\n environment: environment,\n level: item.level,\n endpoint: options.endpoint,\n platform: 'browser',\n framework: 'browser-js',\n language: 'javascript',\n server: {},\n uuid: item.uuid,\n notifier: {\n name: 'rollbar-browser-js',\n version: options.version\n }\n });\n callback(null, item);\n}\n\nfunction addRequestInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.location) {\n return callback(null, item);\n }\n _.set(item, 'data.request', {\n url: window.location.href,\n query_string: window.location.search,\n user_ip: '$remote_ip'\n });\n callback(null, item);\n };\n}\n\nfunction addClientInfo(window) {\n return function(item, options, callback) {\n if (!window) {\n return callback(null, item);\n }\n var nav = window.navigator || {};\n var scr = window.screen || {};\n _.set(item, 'data.client', {\n runtime_ms: item.timestamp - window._rollbarStartTime,\n timestamp: Math.round(item.timestamp / 1000),\n javascript: {\n browser: nav.userAgent,\n language: nav.language,\n cookie_enabled: nav.cookieEnabled,\n screen: {\n width: scr.width,\n height: scr.height\n }\n }\n });\n callback(null, item);\n };\n}\n\nfunction addPluginInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.navigator) {\n return callback(null, item);\n }\n var plugins = [];\n var navPlugins = window.navigator.plugins || [];\n var cur;\n for (var i=0, l=navPlugins.length; i < l; ++i) {\n cur = navPlugins[i];\n plugins.push({name: cur.name, description: cur.description});\n }\n _.set(item, 'data.client.javascript.plugins', plugins);\n callback(null, item);\n };\n}\n\nfunction addBody(item, options, callback) {\n if (item.stackInfo) {\n addBodyTrace(item, options, callback);\n } else {\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction addBodyMessage(item, options, callback) {\n var message = item.message;\n var custom = item.custom;\n\n if (!message) {\n if (custom) {\n var scrubFields = options.scrubFields;\n var messageResult = _.stringify(_.scrub(custom, scrubFields));\n message = messageResult.error || messageResult.value || '';\n } else {\n message = '';\n }\n }\n var result = {\n body: message\n };\n\n if (custom) {\n result.extra = _.extend(true, {}, custom);\n }\n\n _.set(item, 'data.body', {message: result});\n callback(null, item);\n}\n\n\nfunction addBodyTrace(item, options, callback) {\n var description = item.data.description;\n var stackInfo = item.stackInfo;\n var custom = item.custom;\n\n var guess = errorParser.guessErrorClass(stackInfo.message);\n var className = stackInfo.name || guess[0];\n var message = guess[1];\n var trace = {\n exception: {\n 'class': className,\n message: message\n }\n };\n\n if (description) {\n trace.exception.description = description;\n }\n\n // Transform a TraceKit stackInfo object into a Rollbar trace\n var stack = stackInfo.stack;\n if (stack && stack.length === 0 && item._unhandledStackInfo && item._unhandledStackInfo.stack) {\n stack = item._unhandledStackInfo.stack;\n }\n if (stack) {\n if (stack.length === 0) {\n trace.exception.stack = stackInfo.rawStack;\n trace.exception.raw = String(stackInfo.rawException);\n }\n var stackFrame;\n var frame;\n var code;\n var pre;\n var post;\n var contextLength;\n var i, mid;\n\n trace.frames = [];\n for (i = 0; i < stack.length; ++i) {\n stackFrame = stack[i];\n frame = {\n filename: stackFrame.url ? _.sanitizeUrl(stackFrame.url) : '(unknown)',\n lineno: stackFrame.line || null,\n method: (!stackFrame.func || stackFrame.func === '?') ? '[anonymous]' : stackFrame.func,\n colno: stackFrame.column\n };\n if (frame.method && frame.method.endsWith && frame.method.endsWith('_rollbar_wrapped')) {\n continue;\n }\n\n code = pre = post = null;\n contextLength = stackFrame.context ? stackFrame.context.length : 0;\n if (contextLength) {\n mid = Math.floor(contextLength / 2);\n pre = stackFrame.context.slice(0, mid);\n code = stackFrame.context[mid];\n post = stackFrame.context.slice(mid);\n }\n\n if (code) {\n frame.code = code;\n }\n\n if (pre || post) {\n frame.context = {};\n if (pre && pre.length) {\n frame.context.pre = pre;\n }\n if (post && post.length) {\n frame.context.post = post;\n }\n }\n\n if (stackFrame.args) {\n frame.args = stackFrame.args;\n }\n\n trace.frames.push(frame);\n }\n\n // NOTE(cory): reverse the frames since rollbar.com expects the most recent call last\n trace.frames.reverse();\n\n if (custom) {\n trace.extra = _.extend(true, {}, custom);\n }\n _.set(item, 'data.body', {trace: trace});\n callback(null, item);\n } else {\n item.message = className + ': ' + message;\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction scrubPayload(item, options, callback) {\n var scrubFields = options.scrubFields;\n item.data = _.scrub(item.data, scrubFields);\n callback(null, item);\n}\n\nmodule.exports = {\n handleItemWithError: handleItemWithError,\n ensureItemHasSomethingToSay: ensureItemHasSomethingToSay,\n addBaseInfo: addBaseInfo,\n addRequestInfo: addRequestInfo,\n addClientInfo: addClientInfo,\n addPluginInfo: addPluginInfo,\n addBody: addBody,\n scrubPayload: scrubPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transforms.js\n// module id = 19\n// module chunks = 0","'use strict';\n\nvar ErrorStackParser = require('error-stack-parser');\n\nvar UNKNOWN_FUNCTION = '?';\nvar ERR_CLASS_REGEXP = new RegExp('^(([a-zA-Z0-9-_$ ]*): *)?(Uncaught )?([a-zA-Z0-9-_$ ]*): ');\n\nfunction guessFunctionName() {\n return UNKNOWN_FUNCTION;\n}\n\n\nfunction gatherContext() {\n return null;\n}\n\n\nfunction Frame(stackFrame) {\n var data = {};\n\n data._stackFrame = stackFrame;\n\n data.url = stackFrame.fileName;\n data.line = stackFrame.lineNumber;\n data.func = stackFrame.functionName;\n data.column = stackFrame.columnNumber;\n data.args = stackFrame.args;\n\n data.context = gatherContext(data.url, data.line);\n\n return data;\n}\n\n\nfunction Stack(exception) {\n function getStack() {\n var parserStack = [];\n var exc;\n\n if (!exception.stack) {\n try {\n throw exception;\n } catch (e) {\n exc = e;\n }\n } else {\n exc = exception;\n }\n\n try {\n parserStack = ErrorStackParser.parse(exc);\n } catch(e) {\n parserStack = [];\n }\n\n var stack = [];\n\n for (var i = 0; i < parserStack.length; i++) {\n stack.push(new Frame(parserStack[i]));\n }\n\n return stack;\n }\n\n return {\n stack: getStack(),\n message: exception.message,\n name: exception.name,\n rawStack: exception.stack,\n rawException: exception\n };\n}\n\n\nfunction parse(e) {\n return new Stack(e);\n}\n\n\nfunction guessErrorClass(errMsg) {\n if (!errMsg || !errMsg.match) {\n return ['Unknown error. There was no error message to display.', ''];\n }\n var errClassMatch = errMsg.match(ERR_CLASS_REGEXP);\n var errClass = '(unknown)';\n\n if (errClassMatch) {\n errClass = errClassMatch[errClassMatch.length - 1];\n errMsg = errMsg.replace((errClassMatch[errClassMatch.length - 2] || '') + errClass + ':', '');\n errMsg = errMsg.replace(/(^[\\s]+|[\\s]+$)/g, '');\n }\n return [errClass, errMsg];\n}\n\n\nmodule.exports = {\n guessFunctionName: guessFunctionName,\n guessErrorClass: guessErrorClass,\n gatherContext: gatherContext,\n parse: parse,\n Stack: Stack,\n Frame: Frame\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/errorParser.js\n// module id = 20\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = locationParts[0] === 'eval' ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/error-stack-parser.js\n// module id = 21\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stackframe', [], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.StackFrame = factory();\n }\n}(this, function () {\n 'use strict';\n function _isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n function StackFrame(functionName, args, fileName, lineNumber, columnNumber, source) {\n if (functionName !== undefined) {\n this.setFunctionName(functionName);\n }\n if (args !== undefined) {\n this.setArgs(args);\n }\n if (fileName !== undefined) {\n this.setFileName(fileName);\n }\n if (lineNumber !== undefined) {\n this.setLineNumber(lineNumber);\n }\n if (columnNumber !== undefined) {\n this.setColumnNumber(columnNumber);\n }\n if (source !== undefined) {\n this.setSource(source);\n }\n }\n\n StackFrame.prototype = {\n getFunctionName: function () {\n return this.functionName;\n },\n setFunctionName: function (v) {\n this.functionName = String(v);\n },\n\n getArgs: function () {\n return this.args;\n },\n setArgs: function (v) {\n if (Object.prototype.toString.call(v) !== '[object Array]') {\n throw new TypeError('Args must be an Array');\n }\n this.args = v;\n },\n\n // NOTE: Property name may be misleading as it includes the path,\n // but it somewhat mirrors V8's JavaScriptStackTraceApi\n // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's\n // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14\n getFileName: function () {\n return this.fileName;\n },\n setFileName: function (v) {\n this.fileName = String(v);\n },\n\n getLineNumber: function () {\n return this.lineNumber;\n },\n setLineNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Line Number must be a Number');\n }\n this.lineNumber = Number(v);\n },\n\n getColumnNumber: function () {\n return this.columnNumber;\n },\n setColumnNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Column Number must be a Number');\n }\n this.columnNumber = Number(v);\n },\n\n getSource: function () {\n return this.source;\n },\n setSource: function (v) {\n this.source = String(v);\n },\n\n toString: function() {\n var functionName = this.getFunctionName() || '{anonymous}';\n var args = '(' + (this.getArgs() || []).join(',') + ')';\n var fileName = this.getFileName() ? ('@' + this.getFileName()) : '';\n var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : '';\n var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : '';\n return functionName + args + fileName + lineNumber + columnNumber;\n }\n };\n\n return StackFrame;\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/~/stackframe/stackframe.js\n// module id = 22\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction itemToPayload(item, options, callback) {\n var payloadOptions = options.payload || {};\n if (payloadOptions.body) {\n delete payloadOptions.body;\n }\n\n var data = _.extend(true, {}, item.data, payloadOptions);\n if (item._isUncaught) {\n data._isUncaught = true;\n }\n if (item._originalArgs) {\n data._originalArgs = item._originalArgs;\n }\n callback(null, data);\n}\n\nfunction addTelemetryData(item, options, callback) {\n if (item.telemetryEvents) {\n _.set(item, 'data.body.telemetry', item.telemetryEvents);\n }\n callback(null, item);\n}\n\nfunction addMessageWithError(item, options, callback) {\n if (!item.message) {\n callback(null, item);\n return;\n }\n var tracePath = 'data.body.trace_chain.0';\n var trace = _.get(item, tracePath);\n if (!trace) {\n tracePath = 'data.body.trace';\n trace = _.get(item, tracePath);\n }\n if (trace) {\n if (!(trace.exception && trace.exception.description)) {\n _.set(item, tracePath+'.exception.description', item.message);\n callback(null, item);\n return;\n }\n var extra = _.get(item, tracePath+'.extra') || {};\n var newExtra = _.extend(true, {}, extra, {message: item.message});\n _.set(item, tracePath+'.extra', newExtra);\n }\n callback(null, item);\n}\n\nfunction userTransform(logger) {\n return function(item, options, callback) {\n var newItem = _.extend(true, {}, item);\n try {\n if (_.isFunction(options.transform)) {\n options.transform(newItem.data);\n }\n } catch (e) {\n options.transform = null;\n logger.error('Error while calling custom transform() function. Removing custom transform().', e);\n callback(null, item);\n return;\n }\n callback(null, newItem);\n }\n}\n\nfunction addConfigToPayload(item, options, callback) {\n if (!options.sendConfig) {\n return callback(null, item);\n }\n var configKey = '_rollbarConfig';\n var custom = _.get(item, 'data.custom') || {};\n custom[configKey] = options;\n item.data.custom = custom;\n callback(null, item);\n}\n\nmodule.exports = {\n itemToPayload: itemToPayload,\n addTelemetryData: addTelemetryData,\n addMessageWithError: addMessageWithError,\n userTransform: userTransform,\n addConfigToPayload: addConfigToPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/transforms.js\n// module id = 23\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\n\nfunction checkIgnore(item, settings) {\n if (_.get(settings, 'plugins.jquery.ignoreAjaxErrors')) {\n return !_.get(item, 'body.message.extra.isAjax');\n }\n return true;\n}\n\nmodule.exports = {\n checkIgnore: checkIgnore\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/predicates.js\n// module id = 24\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction checkLevel(item, settings) {\n var level = item.level;\n var levelVal = _.LEVELS[level] || 0;\n var reportLevel = settings.reportLevel;\n var reportLevelVal = _.LEVELS[reportLevel] || 0;\n\n if (levelVal < reportLevelVal) {\n return false;\n }\n return true;\n}\n\nfunction userCheckIgnore(logger) {\n return function(item, settings) {\n var isUncaught = !!item._isUncaught;\n delete item._isUncaught;\n var args = item._originalArgs;\n delete item._originalArgs;\n try {\n if (_.isFunction(settings.onSendCallback)) {\n settings.onSendCallback(isUncaught, args, item);\n }\n } catch (e) {\n settings.onSendCallback = null;\n logger.error('Error while calling onSendCallback, removing', e);\n }\n try {\n if (_.isFunction(settings.checkIgnore) && settings.checkIgnore(isUncaught, args, item)) {\n return false;\n }\n } catch (e) {\n settings.checkIgnore = null;\n logger.error('Error while calling custom checkIgnore(), removing', e);\n }\n return true;\n }\n}\n\nfunction urlIsNotBlacklisted(logger) {\n return function(item, settings) {\n return !urlIsOnAList(item, settings, 'blacklist', logger);\n }\n}\n\nfunction urlIsWhitelisted(logger) {\n return function(item, settings) {\n return urlIsOnAList(item, settings, 'whitelist', logger);\n }\n}\n\nfunction urlIsOnAList(item, settings, whiteOrBlack, logger) {\n // whitelist is the default\n var black = false;\n if (whiteOrBlack === 'blacklist') {\n black = true;\n }\n var list, trace, frame, filename, frameLength, url, listLength, urlRegex;\n var i, j;\n\n try {\n list = black ? settings.hostBlackList : settings.hostWhiteList;\n listLength = list && list.length;\n trace = _.get(item, 'body.trace');\n\n // These two checks are important to come first as they are defaults\n // in case the list is missing or the trace is missing or not well-formed\n if (!list || listLength === 0) {\n return !black;\n }\n if (!trace || !trace.frames || trace.frames.length === 0) {\n return !black;\n }\n\n frameLength = trace.frames.length;\n for (i = 0; i < frameLength; i++) {\n frame = trace.frames[i];\n filename = frame.filename;\n\n if (!_.isType(filename, 'string')) {\n return !black;\n }\n\n for (j = 0; j < listLength; j++) {\n url = list[j];\n urlRegex = new RegExp(url);\n\n if (urlRegex.test(filename)) {\n return true;\n }\n }\n }\n } catch (e)\n /* istanbul ignore next */\n {\n if (black) {\n settings.hostBlackList = null;\n } else {\n settings.hostWhiteList = null;\n }\n var listName = black ? 'hostBlackList' : 'hostWhiteList';\n logger.error('Error while reading your configuration\\'s ' + listName + ' option. Removing custom ' + listName + '.', e);\n return !black;\n }\n return false;\n}\n\nfunction messageIsIgnored(logger) {\n return function(item, settings) {\n var exceptionMessage, i, ignoredMessages,\n len, messageIsIgnored, rIgnoredMessage,\n body, traceMessage, bodyMessage;\n\n try {\n messageIsIgnored = false;\n ignoredMessages = settings.ignoredMessages;\n\n if (!ignoredMessages || ignoredMessages.length === 0) {\n return true;\n }\n\n body = item.body;\n traceMessage = _.get(body, 'trace.exception.message');\n bodyMessage = _.get(body, 'message.body');\n\n exceptionMessage = traceMessage || bodyMessage;\n\n if (!exceptionMessage){\n return true;\n }\n\n len = ignoredMessages.length;\n for (i = 0; i < len; i++) {\n rIgnoredMessage = new RegExp(ignoredMessages[i], 'gi');\n messageIsIgnored = rIgnoredMessage.test(exceptionMessage);\n\n if (messageIsIgnored) {\n break;\n }\n }\n } catch(e)\n /* istanbul ignore next */\n {\n settings.ignoredMessages = null;\n logger.error('Error while reading your configuration\\'s ignoredMessages option. Removing custom ignoredMessages.');\n }\n\n return !messageIsIgnored;\n }\n}\n\nmodule.exports = {\n checkLevel: checkLevel,\n userCheckIgnore: userCheckIgnore,\n urlIsNotBlacklisted: urlIsNotBlacklisted,\n urlIsWhitelisted: urlIsWhitelisted,\n messageIsIgnored: messageIsIgnored\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/predicates.js\n// module id = 25\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar urlparser = require('./url');\nvar domUtil = require('./domUtility');\n\nvar defaults = {\n network: true,\n networkResponseHeaders: false,\n networkResponseBody: false,\n networkRequestBody: false,\n log: true,\n dom: true,\n navigation: true,\n connectivity: true\n};\n\nfunction replace(obj, name, replacement, replacements, type) {\n var orig = obj[name];\n obj[name] = replacement(orig);\n if (replacements) {\n replacements[type].push([obj, name, orig]);\n }\n}\n\nfunction restore(replacements, type) {\n var b;\n while (replacements[type].length) {\n b = replacements[type].shift();\n b[0][b[1]] = b[2];\n }\n}\n\nfunction Instrumenter(options, telemeter, rollbar, _window, _document) {\n var autoInstrument = options.autoInstrument;\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.extend(true, {}, defaults, autoInstrument);\n }\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n this.telemetryScrubber = options.telemetryScrubber;\n this.telemeter = telemeter;\n this.rollbar = rollbar;\n this._window = _window || {};\n this._document = _document || {};\n this.replacements = {\n network: [],\n log: [],\n navigation: [],\n connectivity: []\n };\n this.eventRemovers = {\n dom: [],\n connectivity: []\n };\n\n this._location = this._window.location;\n this._lastHref = this._location && this._location.href;\n}\n\nInstrumenter.prototype.configure = function(options) {\n var autoInstrument = options.autoInstrument;\n var oldSettings = _.extend(true, {}, this.autoInstrument);\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.extend(true, {}, defaults, autoInstrument);\n }\n this.instrument(oldSettings);\n if (options.scrubTelemetryInputs !== undefined) {\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n }\n if (options.telemetryScrubber !== undefined) {\n this.telemetryScrubber = options.telemetryScrubber;\n }\n};\n\nInstrumenter.prototype.instrument = function(oldSettings) {\n if (this.autoInstrument.network && !(oldSettings && oldSettings.network)) {\n this.instrumentNetwork();\n } else if (!this.autoInstrument.network && oldSettings && oldSettings.network) {\n this.deinstrumentNetwork();\n }\n\n if (this.autoInstrument.log && !(oldSettings && oldSettings.log)) {\n this.instrumentConsole();\n } else if (!this.autoInstrument.log && oldSettings && oldSettings.log) {\n this.deinstrumentConsole();\n }\n\n if (this.autoInstrument.dom && !(oldSettings && oldSettings.dom)) {\n this.instrumentDom();\n } else if (!this.autoInstrument.dom && oldSettings && oldSettings.dom) {\n this.deinstrumentDom();\n }\n\n if (this.autoInstrument.navigation && !(oldSettings && oldSettings.navigation)) {\n this.instrumentNavigation();\n } else if (!this.autoInstrument.navigation && oldSettings && oldSettings.navigation) {\n this.deinstrumentNavigation();\n }\n\n if (this.autoInstrument.connectivity && !(oldSettings && oldSettings.connectivity)) {\n this.instrumentConnectivity();\n } else if (!this.autoInstrument.connectivity && oldSettings && oldSettings.connectivity) {\n this.deinstrumentConnectivity();\n }\n};\n\nInstrumenter.prototype.deinstrumentNetwork = function() {\n restore(this.replacements, 'network');\n};\n\nInstrumenter.prototype.instrumentNetwork = function() {\n var self = this;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && _.isFunction(xhr[prop])) {\n replace(xhr, prop, function(orig) {\n return self.rollbar.wrap(orig);\n });\n }\n }\n\n if ('XMLHttpRequest' in this._window) {\n var xhrp = this._window.XMLHttpRequest.prototype;\n replace(xhrp, 'open', function(orig) {\n return function(method, url) {\n if (_.isType(url, 'string')) {\n this.__rollbar_xhr = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'network');\n\n replace(xhrp, 'send', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(data) {\n /* eslint-enable no-unused-vars */\n var xhr = this;\n\n function onreadystatechangeHandler() {\n if (xhr.__rollbar_xhr && (xhr.readyState === 1 || xhr.readyState === 4)) {\n if (xhr.__rollbar_xhr.status_code === null) {\n xhr.__rollbar_xhr.status_code = 0;\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n requestData = data;\n }\n xhr.__rollbar_event = self.telemeter.captureNetwork(xhr.__rollbar_xhr, 'xhr', undefined, requestData);\n }\n if (xhr.readyState === 1) {\n xhr.__rollbar_xhr.start_time_ms = _.now();\n } else {\n xhr.__rollbar_xhr.end_time_ms = _.now();\n\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n var header, i;\n if (headersConfig === true) {\n var allHeaders = xhr.getAllResponseHeaders();\n if (allHeaders) {\n var arr = allHeaders.trim().split(/[\\r\\n]+/);\n var parts, value;\n for (i=0; i < arr.length; i++) {\n parts = arr[i].split(': ');\n header = parts.shift();\n value = parts.join(': ');\n headers[header] = value;\n }\n }\n } else {\n for (i=0; i < headersConfig.length; i++) {\n header = headersConfig[i];\n headers[header] = xhr.getResponseHeader(header);\n }\n }\n } catch (e) {\n /* we ignore the errors here that could come from different\n * browser issues with the xhr methods */\n }\n }\n var body = null;\n if (self.autoInstrument.networkResponseBody) {\n try {\n body = xhr.responseText;\n } catch (e) {\n /* ignore errors from reading responseText */\n }\n }\n var response = null;\n if (body || headers) {\n response = {};\n if (body) {\n response.body = body;\n }\n if (headers) {\n response.headers = headers;\n }\n }\n if (response) {\n xhr.__rollbar_xhr.response = response;\n }\n }\n try {\n var code = xhr.status;\n code = code === 1223 ? 204 : code;\n xhr.__rollbar_xhr.status_code = code;\n xhr.__rollbar_event.level = self.telemeter.levelFromStatus(code);\n } catch (e) {\n /* ignore possible exception from xhr.status */\n }\n }\n }\n\n wrapProp('onload', xhr);\n wrapProp('onerror', xhr);\n wrapProp('onprogress', xhr);\n\n if ('onreadystatechange' in xhr && _.isFunction(xhr.onreadystatechange)) {\n replace(xhr, 'onreadystatechange', function(orig) {\n return self.rollbar.wrap(orig, undefined, onreadystatechangeHandler);\n });\n } else {\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n return orig.apply(this, arguments);\n }\n }, this.replacements, 'network');\n }\n\n if ('fetch' in this._window) {\n replace(this._window, 'fetch', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(fn, t) {\n /* eslint-enable no-unused-vars */\n var args = new Array(arguments.length);\n for (var i=0, len=args.length; i < len; i++) {\n args[i] = arguments[i];\n }\n var input = args[0];\n var method = 'GET';\n var url;\n if (_.isType(input, 'string')) {\n url = input;\n } else if (input) {\n url = input.url;\n if (input.method) {\n method = input.method;\n }\n }\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n var metadata = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n if (args[1] && args[1].body) {\n requestData = args[1].body;\n } else if (args[0] && !_.isType(args[0], 'string') && args[0].body) {\n requestData = args[0].body;\n }\n }\n self.telemeter.captureNetwork(metadata, 'fetch', undefined, requestData);\n return orig.apply(this, args).then(function (resp) {\n metadata.end_time_ms = _.now();\n metadata.status_code = resp.status;\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n if (headersConfig === true) {\n // This is unsupported in IE so we can't do it\n /*\n var allHeaders = resp.headers.entries();\n for (var pair of allHeaders) {\n headers[pair[0]] = pair[1];\n }\n */\n } else {\n for (var i=0; i < headersConfig.length; i++) {\n var header = headersConfig[i];\n headers[header] = resp.headers.get(header);\n }\n }\n } catch (e) {\n /* ignore probable IE errors */\n }\n }\n var response = null;\n if (headers) {\n response = {\n headers: headers\n };\n }\n if (response) {\n metadata.response = response;\n }\n return resp;\n });\n };\n }, this.replacements, 'network');\n }\n};\n\nInstrumenter.prototype.deinstrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n var b;\n while (this.replacements['log'].length) {\n b = this.replacements['log'].shift();\n this._window.console[b[0]] = b[1];\n }\n};\n\nInstrumenter.prototype.instrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n\n var self = this;\n var c = this._window.console;\n\n function wrapConsole(method) {\n var orig = c[method];\n var origConsole = c;\n var level = method === 'warn' ? 'warning' : method;\n c[method] = function() {\n var args = Array.prototype.slice.call(arguments);\n var message = _.formatArgsAsString(args);\n self.telemeter.captureLog(message, level);\n if (orig) {\n Function.prototype.apply.call(orig, origConsole, args);\n }\n };\n self.replacements['log'].push([method, orig]);\n }\n var methods = ['debug','info','warn','error','log'];\n for (var i=0, len=methods.length; i < len; i++) {\n wrapConsole(methods[i]);\n }\n};\n\nInstrumenter.prototype.deinstrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n this.removeListeners('dom');\n};\n\nInstrumenter.prototype.instrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n var clickHandler = this.handleClick.bind(this);\n var blurHandler = this.handleBlur.bind(this);\n this.addListener('dom', this._window, 'click', 'onclick', clickHandler, true);\n this.addListener('dom', this._window, 'blur', 'onfocusout', blurHandler, true);\n};\n\nInstrumenter.prototype.handleClick = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n var hasTag = e && e.tagName;\n var anchorOrButton = domUtil.isDescribedElement(e, 'a') || domUtil.isDescribedElement(e, 'button');\n if (hasTag && (anchorOrButton || domUtil.isDescribedElement(e, 'input', ['button', 'submit']))) {\n this.captureDomEvent('click', e);\n } else if (domUtil.isDescribedElement(e, 'input', ['checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value, e.checked);\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleBlur = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n if (e && e.tagName) {\n if (domUtil.isDescribedElement(e, 'textarea')) {\n this.captureDomEvent('input', e, e.value);\n } else if (domUtil.isDescribedElement(e, 'select') && e.options && e.options.length) {\n this.handleSelectInputChanged(e);\n } else if (domUtil.isDescribedElement(e, 'input') && !domUtil.isDescribedElement(e, 'input', ['button', 'submit', 'hidden', 'checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value);\n }\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleSelectInputChanged = function(elem) {\n if (elem.multiple) {\n for (var i = 0; i < elem.options.length; i++) {\n if (elem.options[i].selected) {\n this.captureDomEvent('input', elem, elem.options[i].value);\n }\n }\n } else if (elem.selectedIndex >= 0 && elem.options[elem.selectedIndex]) {\n this.captureDomEvent('input', elem, elem.options[elem.selectedIndex].value);\n }\n};\n\nInstrumenter.prototype.captureDomEvent = function(subtype, element, value, isChecked) {\n if (value !== undefined) {\n if (this.scrubTelemetryInputs || (domUtil.getElementType(element) === 'password')) {\n value = '[scrubbed]';\n } else if (this.telemetryScrubber) {\n var description = domUtil.describeElement(element);\n if (this.telemetryScrubber(description)) {\n value = '[scrubbed]';\n }\n }\n }\n var elementString = domUtil.elementArrayToString(domUtil.treeToArray(element));\n this.telemeter.captureDom(subtype, elementString, value, isChecked);\n};\n\nInstrumenter.prototype.deinstrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n restore(this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.instrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n var self = this;\n replace(this._window, 'onpopstate', function(orig) {\n return function() {\n var current = self._location.href;\n self.handleUrlChange(self._lastHref, current);\n if (orig) {\n orig.apply(this, arguments);\n }\n };\n }, this.replacements, 'navigation');\n\n replace(this._window.history, 'pushState', function(orig) {\n return function() {\n var url = arguments.length > 2 ? arguments[2] : undefined;\n if (url) {\n self.handleUrlChange(self._lastHref, url + '');\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.handleUrlChange = function(from, to) {\n var parsedHref = urlparser.parse(this._location.href);\n var parsedTo = urlparser.parse(to);\n var parsedFrom = urlparser.parse(from);\n this._lastHref = to;\n if (parsedHref.protocol === parsedTo.protocol && parsedHref.host === parsedTo.host) {\n to = parsedTo.path + (parsedTo.hash || '');\n }\n if (parsedHref.protocol === parsedFrom.protocol && parsedHref.host === parsedFrom.host) {\n from = parsedFrom.path + (parsedFrom.hash || '');\n }\n this.telemeter.captureNavigation(from, to);\n};\n\nInstrumenter.prototype.deinstrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.removeListeners('connectivity');\n } else {\n restore(this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.instrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.addListener('connectivity', this._window, 'online', undefined, function() {\n this.telemeter.captureConnectivityChange('online');\n }.bind(this), true);\n this.addListener('connectivity', this._window, 'offline', undefined, function() {\n this.telemeter.captureConnectivityChange('offline');\n }.bind(this), true);\n } else {\n var self = this;\n replace(this._document.body, 'ononline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('online');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n replace(this._document.body, 'onoffline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('offline');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.addListener = function(section, obj, type, altType, handler, capture) {\n if (obj.addEventListener) {\n obj.addEventListener(type, handler, capture);\n this.eventRemovers[section].push(function() {\n obj.removeEventListener(type, handler, capture);\n });\n } else if (altType) {\n obj.attachEvent(altType, handler);\n this.eventRemovers[section].push(function() {\n obj.detachEvent(altType, handler);\n });\n }\n};\n\nInstrumenter.prototype.removeListeners = function(section) {\n var r;\n while (this.eventRemovers[section].length) {\n r = this.eventRemovers[section].shift();\n r();\n }\n};\n\nmodule.exports = Instrumenter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/telemetry.js\n// module id = 26\n// module chunks = 0","'use strict';\n\nfunction getElementType(e) {\n return (e.getAttribute('type') || '').toLowerCase();\n}\n\nfunction isDescribedElement(element, type, subtypes) {\n if (element.tagName.toLowerCase() !== type.toLowerCase()) {\n return false;\n }\n if (!subtypes) {\n return true;\n }\n element = getElementType(element);\n for (var i = 0; i < subtypes.length; i++) {\n if (subtypes[i] === element) {\n return true;\n }\n }\n return false;\n}\n\nfunction getElementFromEvent(evt, doc) {\n if (evt.target) {\n return evt.target;\n }\n if (doc && doc.elementFromPoint) {\n return doc.elementFromPoint(evt.clientX, evt.clientY);\n }\n return undefined;\n}\n\nfunction treeToArray(elem) {\n var MAX_HEIGHT = 5;\n var out = [];\n var nextDescription;\n for (var height = 0; elem && height < MAX_HEIGHT; height++) {\n nextDescription = describeElement(elem);\n if (nextDescription.tagName === 'html') {\n break;\n }\n out.unshift(nextDescription);\n elem = elem.parentNode;\n }\n return out;\n}\n\nfunction elementArrayToString(a) {\n var MAX_LENGTH = 80;\n var separator = ' > ', separatorLength = separator.length;\n var out = [], len = 0, nextStr, totalLength;\n\n for (var i = a.length - 1; i >= 0; i--) {\n nextStr = descriptionToString(a[i]);\n totalLength = len + (out.length * separatorLength) + nextStr.length;\n if (i < a.length - 1 && totalLength >= MAX_LENGTH + 3) {\n out.unshift('...');\n break;\n }\n out.unshift(nextStr);\n len += nextStr.length;\n }\n return out.join(separator);\n}\n\nfunction descriptionToString(desc) {\n if (!desc || !desc.tagName) {\n return '';\n }\n var out = [desc.tagName];\n if (desc.id) {\n out.push('#' + desc.id);\n }\n if (desc.classes) {\n out.push('.' + desc.classes.join('.'));\n }\n for (var i = 0; i < desc.attributes.length; i++) {\n out.push('[' + desc.attributes[i].key + '=\"' + desc.attributes[i].value + '\"]');\n }\n\n return out.join('');\n}\n\n/**\n * Input: a dom element\n * Output: null if tagName is falsey or input is falsey, else\n * {\n * tagName: String,\n * id: String | undefined,\n * classes: [String] | undefined,\n * attributes: [\n * {\n * key: OneOf(type, name, title, alt),\n * value: String\n * }\n * ]\n * }\n */\nfunction describeElement(elem) {\n if (!elem || !elem.tagName) {\n return null;\n }\n var out = {}, className, key, attr, i;\n out.tagName = elem.tagName.toLowerCase();\n if (elem.id) {\n out.id = elem.id;\n }\n className = elem.className;\n if (className && (typeof className === 'string')) {\n out.classes = className.split(/\\s+/);\n }\n var attributes = ['type', 'name', 'title', 'alt'];\n out.attributes = [];\n for (i = 0; i < attributes.length; i++) {\n key = attributes[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.attributes.push({key: key, value: attr});\n }\n }\n return out;\n}\n\nmodule.exports = {\n describeElement: describeElement,\n descriptionToString: descriptionToString,\n elementArrayToString: elementArrayToString,\n treeToArray: treeToArray,\n getElementFromEvent: getElementFromEvent,\n isDescribedElement: isDescribedElement,\n getElementType: getElementType\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/domUtility.js\n// module id = 27\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///rollbar.umd.min.js","webpack:///webpack/bootstrap 7216ae5c8b1973ecd1a0","webpack:///./src/browser/bundles/rollbar.js","webpack:///./src/browser/rollbar.js","webpack:///./src/rollbar.js","webpack:///./src/rateLimiter.js","webpack:///./src/queue.js","webpack:///./src/utility.js","webpack:///./~/extend/index.js","webpack:///./vendor/JSON-js/json3.js","webpack:///./src/notifier.js","webpack:///./src/telemetry.js","webpack:///./src/api.js","webpack:///./src/apiUtility.js","webpack:///./src/browser/logger.js","webpack:///./~/console-polyfill/index.js","webpack:///./src/browser/detection.js","webpack:///./src/browser/globalSetup.js","webpack:///./src/browser/transport.js","webpack:///./src/browser/url.js","webpack:///./src/browser/transforms.js","webpack:///./src/browser/errorParser.js","webpack:///./~/error-stack-parser/error-stack-parser.js","webpack:///./~/error-stack-parser/~/stackframe/stackframe.js","webpack:///./src/transforms.js","webpack:///./src/browser/predicates.js","webpack:///./src/predicates.js","webpack:///./src/browser/telemetry.js","webpack:///./src/browser/domUtility.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","rollbar","options","window","_rollbarConfig","alias","globalAlias","shimRunning","shimId","undefined","_rollbarStartTime","Date","getTime","Rollbar","_rollbarDidLoad","self","client","_","extend","defaultOptions","api","API","transport","urllib","Client","logger","gWindow","gDocument","document","addTransformsToNotifier","notifier","addPredicatesToQueue","queue","captureUncaught","handleUncaughtExceptions","globals","captureUncaughtExceptions","wrapGlobals","captureUnhandledRejections","handleUnhandledRejections","instrumenter","Instrumenter","telemeter","instrument","handleUninitialized","maybeCallback","message","error","Error","addTransform","transforms","handleItemWithError","ensureItemHasSomethingToSay","addBaseInfo","addRequestInfo","addClientInfo","addPluginInfo","addBody","sharedTransforms","addMessageWithError","addTelemetryData","addConfigToPayload","scrubPayload","userTransform","itemToPayload","addPredicate","sharedPredicates","checkLevel","predicates","checkIgnore","userCheckIgnore","urlIsNotBlacklisted","urlIsWhitelisted","messageIsIgnored","_getFirstFunction","args","i","len","length","isFunction","errorParser","_instance","init","global","configure","prototype","payloadData","oldOptions","payload","lastError","log","item","_createItem","arguments","uuid","apply","debug","info","warn","warning","critical","handleUncaughtException","url","lineno","colno","context","stackInfo","makeUnhandledStackInfo","isError","_unhandledStackInfo","level","uncaughtErrorLevel","_isUncaught","handleUnhandledRejection","reason","promise","String","_rollbarContext","_originalArgs","push","wrap","f","_before","ctxFn","_isWrap","_rollbar_wrapped","exc","e","isType","_wrappedSource","toString","_rollbarWrappedError","hasOwnProperty","prop","captureEvent","metadata","captureDomContentLoaded","ts","captureLoad","createItem","version","scrubFields","logLevel","reportLevel","endpoint","verbose","enabled","sendConfig","includeItemsInTelemetry","captureIp","platform","rateLimiter","configureGlobal","setPlatformOptions","Queue","Notifier","Telemeter","RateLimiter","maxItems","itemsPerMinute","_defaultLogLevel","_log","wait","callback","defaultLevel","_sameAsLastError","_captureRollbarItem","telemetryEvents","copyEvents","err","startTime","counter","perMinCounter","platformOptions","checkRate","limit","ignoreRateLimit","shouldSendValue","shouldSend","globalRateLimit","limitPerMin","perMinute","rateLimitPayload","msg","environment","body","extra","language","framework","name","globalSettings","now","globalRateLimitPerMin","pendingItems","pendingRequests","retryQueue","retryHandle","waitCallback","waitIntervalID","predicate","addPendingItem","removePendingItem","idx","indexOf","splice","addItem","originalError","originalItem","predicateResult","_applyPredicates","stop","_maybeLog","_makeApiRequest","resp","_dequeuePendingRequest","bind","_maybeCallWait","clearInterval","setInterval","rateLimitResponse","postItem","_maybeRetry","RETRIABLE_ERRORS","shouldRetry","retryInterval","code","_retryApiRequest","retryObject","shift","data","get","setupJSON","__initRollbarJSON","isDefined","JSON","isNativeFunction","stringify","RollbarJSON","parse","setupCustomJSON","x","t","typeName","match","toLowerCase","reRegExpChar","funcMatchString","Function","Object","replace","reIsNative","RegExp","isObject","test","value","type","u","isIterable","traverse","obj","func","seen","k","v","isObj","isArray","keys","result","redact","uuid4","d","r","Math","random","floor","sanitizeUrl","baseUrlParts","parseUri","anchor","source","query","str","o","parseUriOptions","parser","strictMode","exec","uri","key","q","$0","$1","$2","addParamsAndAccessTokenToPath","accessToken","params","access_token","paramsArray","join","sort","path","qs","h","substring","formatUrl","protocol","port","hostname","backup","jsonError","backupError","jsonParse","s","mode","backupMessage","location","line","column","guessFunctionName","gatherContext","href","useragent","navigator","userAgent","stack","wrapCallback","requestKeys","lambdaContext","custom","request","arg","extraArgs","l","typ","DOMException","j","timestamp","split","set","temp","replacement","scrub","redactQueryParam","dummy0","paramPart","dummy1","dummy2","dummy3","valPart","paramScrubber","queryRes","valScrubber","paramRes","scrubber","tmpV","_getScrubFieldRegexs","_getScrubQueryParamRegexs","pat","ret","formatArgsAsString","substr","filterIp","requestData","newIp","parts","pop","beginning","slice","slashIdx","terminal","concat","LEVELS","strict","loose","hasOwn","toStr","arr","Array","isPlainObject","hasOwnConstructor","hasIsPrototypeOf","constructor","src","copy","copyIsArray","clone","target","deep","n","this_value","valueOf","quote","string","rx_escapable","lastIndex","a","meta","charCodeAt","holder","partial","mind","gap","toJSON","rep","isFinite","indent","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","Boolean","Number","\b","\t","\n","\f","\r","\"","\\","replacer","space","","debackslashify","text","ignore","b","fromCharCode","parseInt","escapes","state","container","/","go","firstokey","okey","ovalue","firstavalue","avalue","number","action","{","}","ocomma","[","]","acomma",":","colon","SyntaxError",",","true","false","null","reviver","tx","walk","val","transform","_applyTransforms","transformIndex","transformsLength","cb","maxTelemetryEvents","MAX_EVENTS","maxQueueSize","max","min","getLevel","manual","newMaxEvents","deleteCount","capture","rollbarUUID","timestamp_ms","filterTelemetry","captureError","captureLog","captureNetwork","subtype","levelFromStatus","status_code","statusCode","captureDom","element","checked","captureNavigation","from","to","captureConnectivityChange","change","Api","jsonBackup","transportOptions","_getTransport","helpers","getTransportFromOptions","search","buildPayload","post","contextResult","defaults","proxy","opts","pathname","method","host","appendPathToPath","base","baseTrailingSlash","pathBeginningSlash","unshift","detection","ieVersion","console","con","dummy","properties","methods","getIEVersion","undef","div","createElement","all","getElementsByTagName","innerHTML","Detection","handler","shim","oldOnError","_rollbarOldOnError","onerror","belongsToShim","fn","_rollbarWindowOnError","old","_rollbarURH","removeEventListener","rejectionHandler","evt","detail","addEventListener","_extendListenerPrototype","oldAddEventListener","_rollbarOldAdd","addFn","event","bubble","oldRemoveEventListener","_rollbarOldRemove","removeFn","requestFactory","_makeRequest","stringifyResult","writeData","_createXMLHTTPObject","onreadystatechange","readyState","parseResponse","responseText","_isSuccess","_isNormalFailure","status","_newRetriableError","ex","open","setRequestHeader","send","e1","XDomainRequest","xdomainrequest","onprogress","ontimeout","onload","e2","xmlhttp","factories","XMLHttpRequest","ActiveXObject","numFactories","last","auth","hash","pathParts","_savedStackTrace","description","server","remoteString","query_string","user_ip","nav","scr","screen","runtime_ms","round","javascript","browser","cookie_enabled","cookieEnabled","width","height","cur","plugins","navPlugins","addBodyTrace","addBodyMessage","messageResult","guess","guessErrorClass","className","trace","exception","class","rawStack","raw","rawException","stackFrame","frame","pre","contextLength","mid","frames","filename","endsWith","reverse","UNKNOWN_FUNCTION","Frame","_stackFrame","fileName","lineNumber","functionName","columnNumber","Stack","getStack","parserStack","ErrorStackParser","errMsg","errClassMatch","ERR_CLASS_REGEXP","errClass","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","StackFrame","_map","array","thisArg","map","output","_filter","filter","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","possibleNumber","isNaN","parseFloat","filtered","tokens","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","argsRaw","functionCall","_isNumber","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","getFunctionName","getArgs","TypeError","getFileName","getLineNumber","getColumnNumber","getSource","payloadOptions","tracePath","newExtra","newItem","configKey","settings","levelVal","reportLevelVal","isUncaught","onSendCallback","urlIsOnAList","whiteOrBlack","black","list","frameLength","listLength","urlRegex","hostBlackList","hostWhiteList","listName","exceptionMessage","ignoredMessages","rIgnoredMessage","traceMessage","bodyMessage","replacements","orig","restore","_window","_document","autoInstrument","scrubTelemetryInputs","telemetryScrubber","network","navigation","connectivity","eventRemovers","dom","_location","_lastHref","urlparser","domUtil","networkResponseHeaders","networkResponseBody","networkRequestBody","oldSettings","deinstrumentNetwork","instrumentNetwork","deinstrumentConsole","instrumentConsole","deinstrumentDom","instrumentDom","deinstrumentNavigation","instrumentNavigation","deinstrumentConnectivity","instrumentConnectivity","wrapProp","xhr","xhrp","__rollbar_xhr","start_time_ms","end_time_ms","onreadystatechangeHandler","__rollbar_event","headers","headersConfig","header","allHeaders","getAllResponseHeaders","trim","getResponseHeader","response","input","then","wrapConsole","origConsole","removeListeners","clickHandler","handleClick","blurHandler","handleBlur","addListener","getElementFromEvent","hasTag","tagName","anchorOrButton","isDescribedElement","captureDomEvent","handleSelectInputChanged","elem","multiple","selected","selectedIndex","isChecked","getElementType","describeElement","elementString","elementArrayToString","treeToArray","chrome","chromePackagedApp","app","runtime","hasPushState","history","pushState","current","handleUrlChange","parsedHref","parsedTo","parsedFrom","section","altType","attachEvent","detachEvent","getAttribute","subtypes","doc","elementFromPoint","clientX","clientY","nextDescription","MAX_HEIGHT","out","parentNode","nextStr","totalLength","MAX_LENGTH","separator","separatorLength","descriptionToString","desc","classes","attributes","attr"],"mappings":"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","file":"rollbar.umd.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"rollbar\"] = factory();\n\telse\n\t\troot[\"rollbar\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"rollbar\"] = factory();\n\telse\n\t\troot[\"rollbar\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1);\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar rollbar = __webpack_require__(2);\n\t\n\tvar options = (typeof window !== 'undefined') && window._rollbarConfig;\n\tvar alias = options && options.globalAlias || 'Rollbar';\n\tvar shimRunning = (typeof window !== 'undefined') && window[alias] && typeof window[alias].shimId === 'function' && window[alias].shimId() !== undefined;\n\t\n\tif ((typeof window !== 'undefined') && !window._rollbarStartTime) {\n\t window._rollbarStartTime = (new Date()).getTime();\n\t}\n\t\n\tif (!shimRunning && options) {\n\t var Rollbar = new rollbar(options);\n\t window[alias] = Rollbar;\n\t} else if (typeof window !== 'undefined') {\n\t window.rollbar = rollbar;\n\t window._rollbarDidLoad = true;\n\t} else if (typeof self !== 'undefined') {\n\t self.rollbar = rollbar;\n\t self._rollbarDidLoad = true;\n\t}\n\t\n\tmodule.exports = rollbar;\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar Client = __webpack_require__(3);\n\tvar _ = __webpack_require__(6);\n\tvar API = __webpack_require__(11);\n\tvar logger = __webpack_require__(13);\n\tvar globals = __webpack_require__(16);\n\t\n\tvar transport = __webpack_require__(17);\n\tvar urllib = __webpack_require__(18);\n\t\n\tvar transforms = __webpack_require__(19);\n\tvar sharedTransforms = __webpack_require__(23);\n\tvar predicates = __webpack_require__(24);\n\tvar sharedPredicates = __webpack_require__(25);\n\tvar errorParser = __webpack_require__(20);\n\tvar Instrumenter = __webpack_require__(26);\n\t\n\tfunction Rollbar(options, client) {\n\t this.options = _.extend({}, defaultOptions, options);\n\t var api = new API(this.options, transport, urllib);\n\t this.client = client || new Client(this.options, api, logger, 'browser');\n\t\n\t var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n\t var gDocument = (typeof document != 'undefined') && document;\n\t addTransformsToNotifier(this.client.notifier);\n\t addPredicatesToQueue(this.client.queue);\n\t if (this.options.captureUncaught || this.options.handleUncaughtExceptions) {\n\t globals.captureUncaughtExceptions(gWindow, this);\n\t globals.wrapGlobals(gWindow, this);\n\t }\n\t if (this.options.captureUnhandledRejections || this.options.handleUnhandledRejections) {\n\t globals.captureUnhandledRejections(gWindow, this);\n\t }\n\t\n\t this.instrumenter = new Instrumenter(this.options, this.client.telemeter, this, gWindow, gDocument);\n\t this.instrumenter.instrument();\n\t}\n\t\n\tvar _instance = null;\n\tRollbar.init = function(options, client) {\n\t if (_instance) {\n\t return _instance.global(options).configure(options);\n\t }\n\t _instance = new Rollbar(options, client);\n\t return _instance;\n\t};\n\t\n\tfunction handleUninitialized(maybeCallback) {\n\t var message = 'Rollbar is not initialized';\n\t logger.error(message);\n\t if (maybeCallback) {\n\t maybeCallback(new Error(message));\n\t }\n\t}\n\t\n\tRollbar.prototype.global = function(options) {\n\t this.client.global(options);\n\t return this;\n\t};\n\tRollbar.global = function(options) {\n\t if (_instance) {\n\t return _instance.global(options);\n\t } else {\n\t handleUninitialized();\n\t }\n\t};\n\t\n\tRollbar.prototype.configure = function(options, payloadData) {\n\t var oldOptions = this.options;\n\t var payload = {};\n\t if (payloadData) {\n\t payload = {payload: payloadData};\n\t }\n\t this.options = _.extend({}, oldOptions, options, payload);\n\t this.client.configure(options, payloadData);\n\t this.instrumenter.configure(options);\n\t return this;\n\t};\n\tRollbar.configure = function(options, payloadData) {\n\t if (_instance) {\n\t return _instance.configure(options, payloadData);\n\t } else {\n\t handleUninitialized();\n\t }\n\t};\n\t\n\tRollbar.prototype.lastError = function() {\n\t return this.client.lastError;\n\t};\n\tRollbar.lastError = function() {\n\t if (_instance) {\n\t return _instance.lastError();\n\t } else {\n\t handleUninitialized();\n\t }\n\t};\n\t\n\tRollbar.prototype.log = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.log(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.log = function() {\n\t if (_instance) {\n\t return _instance.log.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.debug = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.debug(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.debug = function() {\n\t if (_instance) {\n\t return _instance.debug.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.info = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.info(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.info = function() {\n\t if (_instance) {\n\t return _instance.info.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.warn = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.warn(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.warn = function() {\n\t if (_instance) {\n\t return _instance.warn.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.warning = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.warning(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.warning = function() {\n\t if (_instance) {\n\t return _instance.warning.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.error = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.error(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.error = function() {\n\t if (_instance) {\n\t return _instance.error.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.critical = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.critical(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.critical = function() {\n\t if (_instance) {\n\t return _instance.critical.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.handleUncaughtException = function(message, url, lineno, colno, error, context) {\n\t var item;\n\t var stackInfo = _.makeUnhandledStackInfo(\n\t message,\n\t url,\n\t lineno,\n\t colno,\n\t error,\n\t 'onerror',\n\t 'uncaught exception',\n\t errorParser\n\t );\n\t if (_.isError(error)) {\n\t item = this._createItem([message, error, context]);\n\t item._unhandledStackInfo = stackInfo;\n\t } else if (_.isError(url)) {\n\t item = this._createItem([message, url, context]);\n\t item._unhandledStackInfo = stackInfo;\n\t } else {\n\t item = this._createItem([message, context]);\n\t item.stackInfo = stackInfo;\n\t }\n\t item.level = this.options.uncaughtErrorLevel;\n\t item._isUncaught = true;\n\t this.client.log(item);\n\t};\n\t\n\tRollbar.prototype.handleUnhandledRejection = function(reason, promise) {\n\t var message = 'unhandled rejection was null or undefined!';\n\t message = reason ? (reason.message || String(reason)) : message;\n\t var context = (reason && reason._rollbarContext) || (promise && promise._rollbarContext);\n\t\n\t var item;\n\t if (_.isError(reason)) {\n\t item = this._createItem([message, reason, context]);\n\t } else {\n\t item = this._createItem([message, reason, context]);\n\t item.stackInfo = _.makeUnhandledStackInfo(\n\t message,\n\t '',\n\t 0,\n\t 0,\n\t null,\n\t 'unhandledrejection',\n\t '',\n\t errorParser\n\t );\n\t }\n\t item.level = this.options.uncaughtErrorLevel;\n\t item._isUncaught = true;\n\t item._originalArgs = item._originalArgs || [];\n\t item._originalArgs.push(promise);\n\t this.client.log(item);\n\t};\n\t\n\tRollbar.prototype.wrap = function(f, context, _before) {\n\t try {\n\t var ctxFn;\n\t if(_.isFunction(context)) {\n\t ctxFn = context;\n\t } else {\n\t ctxFn = function() { return context || {}; };\n\t }\n\t\n\t if (!_.isFunction(f)) {\n\t return f;\n\t }\n\t\n\t if (f._isWrap) {\n\t return f;\n\t }\n\t\n\t if (!f._rollbar_wrapped) {\n\t f._rollbar_wrapped = function () {\n\t if (_before && _.isFunction(_before)) {\n\t _before.apply(this, arguments);\n\t }\n\t try {\n\t return f.apply(this, arguments);\n\t } catch(exc) {\n\t var e = exc;\n\t if (e) {\n\t if (_.isType(e, 'string')) {\n\t e = new String(e);\n\t }\n\t e._rollbarContext = ctxFn() || {};\n\t e._rollbarContext._wrappedSource = f.toString();\n\t\n\t window._rollbarWrappedError = e;\n\t }\n\t throw e;\n\t }\n\t };\n\t\n\t f._rollbar_wrapped._isWrap = true;\n\t\n\t if (f.hasOwnProperty) {\n\t for (var prop in f) {\n\t if (f.hasOwnProperty(prop)) {\n\t f._rollbar_wrapped[prop] = f[prop];\n\t }\n\t }\n\t }\n\t }\n\t\n\t return f._rollbar_wrapped;\n\t } catch (e) {\n\t // Return the original function if the wrap fails.\n\t return f;\n\t }\n\t};\n\tRollbar.wrap = function(f, context) {\n\t if (_instance) {\n\t return _instance.wrap(f, context);\n\t } else {\n\t handleUninitialized();\n\t }\n\t};\n\t\n\tRollbar.prototype.captureEvent = function(metadata, level) {\n\t return this.client.captureEvent(metadata, level);\n\t};\n\tRollbar.captureEvent = function(metadata, level) {\n\t if (_instance) {\n\t return _instance.captureEvent(metadata, level);\n\t } else {\n\t handleUninitialized();\n\t }\n\t};\n\t\n\t// The following two methods are used internally and are not meant for public use\n\tRollbar.prototype.captureDomContentLoaded = function(e, ts) {\n\t if (!ts) {\n\t ts = new Date();\n\t }\n\t return this.client.captureDomContentLoaded(ts);\n\t};\n\t\n\tRollbar.prototype.captureLoad = function(e, ts) {\n\t if (!ts) {\n\t ts = new Date();\n\t }\n\t return this.client.captureLoad(ts);\n\t};\n\t\n\t/* Internal */\n\t\n\tfunction addTransformsToNotifier(notifier) {\n\t notifier\n\t .addTransform(transforms.handleItemWithError)\n\t .addTransform(transforms.ensureItemHasSomethingToSay)\n\t .addTransform(transforms.addBaseInfo)\n\t .addTransform(transforms.addRequestInfo(window))\n\t .addTransform(transforms.addClientInfo(window))\n\t .addTransform(transforms.addPluginInfo(window))\n\t .addTransform(transforms.addBody)\n\t .addTransform(sharedTransforms.addMessageWithError)\n\t .addTransform(sharedTransforms.addTelemetryData)\n\t .addTransform(sharedTransforms.addConfigToPayload)\n\t .addTransform(transforms.scrubPayload)\n\t .addTransform(sharedTransforms.userTransform(logger))\n\t .addTransform(sharedTransforms.itemToPayload);\n\t}\n\t\n\tfunction addPredicatesToQueue(queue) {\n\t queue\n\t .addPredicate(sharedPredicates.checkLevel)\n\t .addPredicate(predicates.checkIgnore)\n\t .addPredicate(sharedPredicates.userCheckIgnore(logger))\n\t .addPredicate(sharedPredicates.urlIsNotBlacklisted(logger))\n\t .addPredicate(sharedPredicates.urlIsWhitelisted(logger))\n\t .addPredicate(sharedPredicates.messageIsIgnored(logger));\n\t}\n\t\n\tRollbar.prototype._createItem = function(args) {\n\t return _.createItem(args, logger, this);\n\t};\n\t\n\tfunction _getFirstFunction(args) {\n\t for (var i = 0, len = args.length; i < len; ++i) {\n\t if (_.isFunction(args[i])) {\n\t return args[i];\n\t }\n\t }\n\t return undefined;\n\t}\n\t\n\t/* global __NOTIFIER_VERSION__:false */\n\t/* global __DEFAULT_BROWSER_SCRUB_FIELDS__:false */\n\t/* global __DEFAULT_LOG_LEVEL__:false */\n\t/* global __DEFAULT_REPORT_LEVEL__:false */\n\t/* global __DEFAULT_UNCAUGHT_ERROR_LEVEL:false */\n\t/* global __DEFAULT_ENDPOINT__:false */\n\t\n\tvar defaultOptions = {\n\t version: (\"2.4.0\"),\n\t scrubFields: ([\"pw\",\"pass\",\"passwd\",\"password\",\"secret\",\"confirm_password\",\"confirmPassword\",\"password_confirmation\",\"passwordConfirmation\",\"access_token\",\"accessToken\",\"secret_key\",\"secretKey\",\"secretToken\"]),\n\t logLevel: (\"debug\"),\n\t reportLevel: (\"debug\"),\n\t uncaughtErrorLevel: (\"error\"),\n\t endpoint: (\"api.rollbar.com/api/1/item/\"),\n\t verbose: false,\n\t enabled: true,\n\t sendConfig: false,\n\t includeItemsInTelemetry: true,\n\t captureIp: true\n\t};\n\t\n\tmodule.exports = Rollbar;\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar RateLimiter = __webpack_require__(4);\n\tvar Queue = __webpack_require__(5);\n\tvar Notifier = __webpack_require__(9);\n\tvar Telemeter = __webpack_require__(10);\n\tvar _ = __webpack_require__(6);\n\t\n\t/*\n\t * Rollbar - the interface to Rollbar\n\t *\n\t * @param options\n\t * @param api\n\t * @param logger\n\t */\n\tfunction Rollbar(options, api, logger, platform) {\n\t this.options = _.extend(true, {}, options);\n\t this.logger = logger;\n\t Rollbar.rateLimiter.configureGlobal(this.options);\n\t Rollbar.rateLimiter.setPlatformOptions(platform, this.options);\n\t this.queue = new Queue(Rollbar.rateLimiter, api, logger, this.options);\n\t this.notifier = new Notifier(this.queue, this.options);\n\t this.telemeter = new Telemeter(this.options);\n\t this.lastError = null;\n\t}\n\t\n\tvar defaultOptions = {\n\t maxItems: 0,\n\t itemsPerMinute: 60\n\t};\n\t\n\tRollbar.rateLimiter = new RateLimiter(defaultOptions);\n\t\n\tRollbar.prototype.global = function(options) {\n\t Rollbar.rateLimiter.configureGlobal(options);\n\t return this;\n\t};\n\t\n\tRollbar.prototype.configure = function(options, payloadData) {\n\t this.notifier && this.notifier.configure(options);\n\t this.telemeter && this.telemeter.configure(options);\n\t var oldOptions = this.options;\n\t var payload = {};\n\t if (payloadData) {\n\t payload = {payload: payloadData};\n\t }\n\t this.options = _.extend(true, {}, oldOptions, options, payload);\n\t this.global(this.options);\n\t return this;\n\t};\n\t\n\tRollbar.prototype.log = function(item) {\n\t var level = this._defaultLogLevel();\n\t return this._log(level, item);\n\t};\n\t\n\tRollbar.prototype.debug = function(item) {\n\t this._log('debug', item);\n\t};\n\t\n\tRollbar.prototype.info = function(item) {\n\t this._log('info', item);\n\t};\n\t\n\tRollbar.prototype.warn = function(item) {\n\t this._log('warning', item);\n\t};\n\t\n\tRollbar.prototype.warning = function(item) {\n\t this._log('warning', item);\n\t};\n\t\n\tRollbar.prototype.error = function(item) {\n\t this._log('error', item);\n\t};\n\t\n\tRollbar.prototype.critical = function(item) {\n\t this._log('critical', item);\n\t};\n\t\n\tRollbar.prototype.wait = function(callback) {\n\t this.queue.wait(callback);\n\t};\n\t\n\tRollbar.prototype.captureEvent = function(metadata, level) {\n\t return this.telemeter.captureEvent(metadata, level);\n\t};\n\t\n\tRollbar.prototype.captureDomContentLoaded = function(ts) {\n\t return this.telemeter.captureDomContentLoaded(ts);\n\t};\n\t\n\tRollbar.prototype.captureLoad = function(ts) {\n\t return this.telemeter.captureLoad(ts);\n\t};\n\t\n\t/* Internal */\n\t\n\tRollbar.prototype._log = function(defaultLevel, item) {\n\t if (this._sameAsLastError(item)) {\n\t if (item.callback) {\n\t item.callback();\n\t }\n\t return;\n\t }\n\t try {\n\t var callback = null;\n\t if (item.callback) {\n\t callback = item.callback;\n\t delete item.callback;\n\t }\n\t item.level = item.level || defaultLevel;\n\t this.telemeter._captureRollbarItem(item);\n\t item.telemetryEvents = this.telemeter.copyEvents();\n\t this.notifier.log(item, callback);\n\t } catch (e) {\n\t this.logger.error(e)\n\t }\n\t};\n\t\n\tRollbar.prototype._defaultLogLevel = function() {\n\t return this.options.logLevel || 'debug';\n\t};\n\t\n\tRollbar.prototype._sameAsLastError = function(item) {\n\t if (this.lastError && this.lastError === item.err) {\n\t return true;\n\t }\n\t this.lastError = item.err;\n\t return false;\n\t};\n\t\n\tmodule.exports = Rollbar;\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\t/*\n\t * RateLimiter - an object that encapsulates the logic for counting items sent to Rollbar\n\t *\n\t * @param options - the same options that are accepted by configureGlobal offered as a convenience\n\t */\n\tfunction RateLimiter(options) {\n\t this.startTime = (new Date()).getTime();\n\t this.counter = 0;\n\t this.perMinCounter = 0;\n\t this.platform = null;\n\t this.platformOptions = {};\n\t this.configureGlobal(options);\n\t}\n\t\n\tRateLimiter.globalSettings = {\n\t startTime: (new Date()).getTime(),\n\t maxItems: undefined,\n\t itemsPerMinute: undefined\n\t};\n\t\n\t/*\n\t * configureGlobal - set the global rate limiter options\n\t *\n\t * @param options - Only the following values are recognized:\n\t * startTime: a timestamp of the form returned by (new Date()).getTime()\n\t * maxItems: the maximum items\n\t * itemsPerMinute: the max number of items to send in a given minute\n\t */\n\tRateLimiter.prototype.configureGlobal = function(options) {\n\t if (options.startTime !== undefined) {\n\t RateLimiter.globalSettings.startTime = options.startTime;\n\t }\n\t if (options.maxItems !== undefined) {\n\t RateLimiter.globalSettings.maxItems = options.maxItems;\n\t }\n\t if (options.itemsPerMinute !== undefined) {\n\t RateLimiter.globalSettings.itemsPerMinute = options.itemsPerMinute;\n\t }\n\t};\n\t\n\t/*\n\t * shouldSend - determine if we should send a given item based on rate limit settings\n\t *\n\t * @param item - the item we are about to send\n\t * @returns An object with the following structure:\n\t * error: (Error|null)\n\t * shouldSend: bool\n\t * payload: (Object|null)\n\t * If shouldSend is false, the item passed as a parameter should not be sent to Rollbar, and\n\t * exactly one of error or payload will be non-null. If error is non-null, the returned Error will\n\t * describe the situation, but it means that we were already over a rate limit (either globally or\n\t * per minute) when this item was checked. If error is null, and therefore payload is non-null, it\n\t * means this item put us over the global rate limit and the payload should be sent to Rollbar in\n\t * place of the passed in item.\n\t */\n\tRateLimiter.prototype.shouldSend = function(item, now) {\n\t now = now || (new Date()).getTime();\n\t if (now - this.startTime >= 60000) {\n\t this.startTime = now;\n\t this.perMinCounter = 0;\n\t }\n\t\n\t var globalRateLimit = RateLimiter.globalSettings.maxItems;\n\t var globalRateLimitPerMin = RateLimiter.globalSettings.itemsPerMinute;\n\t\n\t if (checkRate(item, globalRateLimit, this.counter)) {\n\t return shouldSendValue(this.platform, this.platformOptions, globalRateLimit + ' max items reached', false);\n\t } else if (checkRate(item, globalRateLimitPerMin, this.perMinCounter)) {\n\t return shouldSendValue(this.platform, this.platformOptions, globalRateLimitPerMin + ' items per minute reached', false);\n\t }\n\t this.counter++;\n\t this.perMinCounter++;\n\t\n\t var shouldSend = !checkRate(item, globalRateLimit, this.counter);\n\t var perMinute = shouldSend;\n\t shouldSend = shouldSend && !checkRate(item, globalRateLimitPerMin, this.perMinCounter);\n\t return shouldSendValue(this.platform, this.platformOptions, null, shouldSend, globalRateLimit, globalRateLimitPerMin, perMinute);\n\t};\n\t\n\tRateLimiter.prototype.setPlatformOptions = function(platform, options) {\n\t this.platform = platform;\n\t this.platformOptions = options;\n\t};\n\t\n\t/* Helpers */\n\t\n\tfunction checkRate(item, limit, counter) {\n\t return !item.ignoreRateLimit && limit >= 1 && counter > limit;\n\t}\n\t\n\tfunction shouldSendValue(platform, options, error, shouldSend, globalRateLimit, limitPerMin, perMinute) {\n\t var payload = null;\n\t if (error) {\n\t error = new Error(error);\n\t }\n\t if (!error && !shouldSend) {\n\t payload = rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute);\n\t }\n\t return {error: error, shouldSend: shouldSend, payload: payload};\n\t}\n\t\n\tfunction rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute) {\n\t var environment = options.environment || (options.payload && options.payload.environment);\n\t var msg;\n\t if (perMinute) {\n\t msg = 'item per minute limit reached, ignoring errors until timeout';\n\t } else {\n\t msg = 'maxItems has been hit, ignoring errors until reset.';\n\t }\n\t var item = {\n\t body: {\n\t message: {\n\t body: msg,\n\t extra: {\n\t maxItems: globalRateLimit,\n\t itemsPerMinute: limitPerMin\n\t }\n\t }\n\t },\n\t language: 'javascript',\n\t environment: environment,\n\t notifier: {\n\t version: (options.notifier && options.notifier.version) || options.version\n\t }\n\t };\n\t if (platform === 'browser') {\n\t item.platform = 'browser';\n\t item.framework = 'browser-js';\n\t item.notifier.name = 'rollbar-browser-js';\n\t } else if (platform === 'server') {\n\t item.framework = options.framework || 'node-js';\n\t item.notifier.name = options.notifier.name;\n\t } else if (platform === 'react-native') {\n\t item.framework = options.framework || 'react-native';\n\t item.notifier.name = options.notifier.name;\n\t }\n\t return item;\n\t}\n\t\n\tmodule.exports = RateLimiter;\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\t\n\t/*\n\t * Queue - an object which handles which handles a queue of items to be sent to Rollbar.\n\t * This object handles rate limiting via a passed in rate limiter, retries based on connection\n\t * errors, and filtering of items based on a set of configurable predicates. The communication to\n\t * the backend is performed via a given API object.\n\t *\n\t * @param rateLimiter - An object which conforms to the interface\n\t * rateLimiter.shouldSend(item) -> bool\n\t * @param api - An object which conforms to the interface\n\t * api.postItem(payload, function(err, response))\n\t * @param logger - An object used to log verbose messages if desired\n\t * @param options - see Queue.prototype.configure\n\t */\n\tfunction Queue(rateLimiter, api, logger, options) {\n\t this.rateLimiter = rateLimiter;\n\t this.api = api;\n\t this.logger = logger;\n\t this.options = options;\n\t this.predicates = [];\n\t this.pendingItems = [];\n\t this.pendingRequests = [];\n\t this.retryQueue = [];\n\t this.retryHandle = null;\n\t this.waitCallback = null;\n\t this.waitIntervalID = null;\n\t}\n\t\n\t/*\n\t * configure - updates the options this queue uses\n\t *\n\t * @param options\n\t */\n\tQueue.prototype.configure = function(options) {\n\t this.api && this.api.configure(options);\n\t var oldOptions = this.options;\n\t this.options = _.extend(true, {}, oldOptions, options);\n\t return this;\n\t};\n\t\n\t/*\n\t * addPredicate - adds a predicate to the end of the list of predicates for this queue\n\t *\n\t * @param predicate - function(item, options) -> (bool|{err: Error})\n\t * Returning true means that this predicate passes and the item is okay to go on the queue\n\t * Returning false means do not add the item to the queue, but it is not an error\n\t * Returning {err: Error} means do not add the item to the queue, and the given error explains why\n\t * Returning {err: undefined} is equivalent to returning true but don't do that\n\t */\n\tQueue.prototype.addPredicate = function(predicate) {\n\t if (_.isFunction(predicate)) {\n\t this.predicates.push(predicate);\n\t }\n\t return this;\n\t};\n\t\n\tQueue.prototype.addPendingItem = function(item) {\n\t this.pendingItems.push(item);\n\t};\n\t\n\tQueue.prototype.removePendingItem = function(item) {\n\t var idx = this.pendingItems.indexOf(item);\n\t if (idx !== -1) {\n\t this.pendingItems.splice(idx, 1);\n\t }\n\t};\n\t\n\t/*\n\t * addItem - Send an item to the Rollbar API if all of the predicates are satisfied\n\t *\n\t * @param item - The payload to send to the backend\n\t * @param callback - function(error, repsonse) which will be called with the response from the API\n\t * in the case of a success, otherwise response will be null and error will have a value. If both\n\t * error and response are null then the item was stopped by a predicate which did not consider this\n\t * to be an error condition, but nonetheless did not send the item to the API.\n\t * @param originalError - The original error before any transformations that is to be logged if any\n\t */\n\tQueue.prototype.addItem = function(item, callback, originalError, originalItem) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() { return; };\n\t }\n\t var predicateResult = this._applyPredicates(item);\n\t if (predicateResult.stop) {\n\t this.removePendingItem(originalItem);\n\t callback(predicateResult.err);\n\t return;\n\t }\n\t this._maybeLog(item, originalError);\n\t this.removePendingItem(originalItem);\n\t this.pendingRequests.push(item);\n\t try {\n\t this._makeApiRequest(item, function(err, resp) {\n\t this._dequeuePendingRequest(item);\n\t callback(err, resp);\n\t }.bind(this));\n\t } catch (e) {\n\t this._dequeuePendingRequest(item);\n\t callback(e);\n\t }\n\t};\n\t\n\t/*\n\t * wait - Stop any further errors from being added to the queue, and get called back when all items\n\t * currently processing have finished sending to the backend.\n\t *\n\t * @param callback - function() called when all pending items have been sent\n\t */\n\tQueue.prototype.wait = function(callback) {\n\t if (!_.isFunction(callback)) {\n\t return;\n\t }\n\t this.waitCallback = callback;\n\t if (this._maybeCallWait()) {\n\t return;\n\t }\n\t if (this.waitIntervalID) {\n\t this.waitIntervalID = clearInterval(this.waitIntervalID);\n\t }\n\t this.waitIntervalID = setInterval(function() {\n\t this._maybeCallWait();\n\t }.bind(this), 500);\n\t};\n\t\n\t/* _applyPredicates - Sequentially applies the predicates that have been added to the queue to the\n\t * given item with the currently configured options.\n\t *\n\t * @param item - An item in the queue\n\t * @returns {stop: bool, err: (Error|null)} - stop being true means do not add item to the queue,\n\t * the error value should be passed up to a callbak if we are stopping.\n\t */\n\tQueue.prototype._applyPredicates = function(item) {\n\t var p = null;\n\t for (var i = 0, len = this.predicates.length; i < len; i++) {\n\t p = this.predicates[i](item, this.options);\n\t if (!p || p.err !== undefined) {\n\t return {stop: true, err: p.err};\n\t }\n\t }\n\t return {stop: false, err: null};\n\t};\n\t\n\t/*\n\t * _makeApiRequest - Send an item to Rollbar, callback when done, if there is an error make an\n\t * effort to retry if we are configured to do so.\n\t *\n\t * @param item - an item ready to send to the backend\n\t * @param callback - function(err, response)\n\t */\n\tQueue.prototype._makeApiRequest = function(item, callback) {\n\t var rateLimitResponse = this.rateLimiter.shouldSend(item);\n\t if (rateLimitResponse.shouldSend) {\n\t this.api.postItem(item, function(err, resp) {\n\t if (err) {\n\t this._maybeRetry(err, item, callback);\n\t } else {\n\t callback(err, resp);\n\t }\n\t }.bind(this));\n\t } else if (rateLimitResponse.error) {\n\t callback(rateLimitResponse.error);\n\t } else {\n\t this.api.postItem(rateLimitResponse.payload, callback);\n\t }\n\t};\n\t\n\t// These are errors basically mean there is no internet connection\n\tvar RETRIABLE_ERRORS = ['ECONNRESET', 'ENOTFOUND', 'ESOCKETTIMEDOUT', 'ETIMEDOUT', 'ECONNREFUSED', 'EHOSTUNREACH', 'EPIPE', 'EAI_AGAIN'];\n\t\n\t/*\n\t * _maybeRetry - Given the error returned by the API, decide if we should retry or just callback\n\t * with the error.\n\t *\n\t * @param err - an error returned by the API transport\n\t * @param item - the item that was trying to be sent when this error occured\n\t * @param callback - function(err, response)\n\t */\n\tQueue.prototype._maybeRetry = function(err, item, callback) {\n\t var shouldRetry = false;\n\t if (this.options.retryInterval) {\n\t for (var i = 0, len = RETRIABLE_ERRORS.length; i < len; i++) {\n\t if (err.code === RETRIABLE_ERRORS[i]) {\n\t shouldRetry = true;\n\t break;\n\t }\n\t }\n\t }\n\t if (shouldRetry) {\n\t this._retryApiRequest(item, callback);\n\t } else {\n\t callback(err);\n\t }\n\t};\n\t\n\t/*\n\t * _retryApiRequest - Add an item and a callback to a queue and possibly start a timer to process\n\t * that queue based on the retryInterval in the options for this queue.\n\t *\n\t * @param item - an item that failed to send due to an error we deem retriable\n\t * @param callback - function(err, response)\n\t */\n\tQueue.prototype._retryApiRequest = function(item, callback) {\n\t this.retryQueue.push({item: item, callback: callback});\n\t\n\t if (!this.retryHandle) {\n\t this.retryHandle = setInterval(function() {\n\t while (this.retryQueue.length) {\n\t var retryObject = this.retryQueue.shift();\n\t this._makeApiRequest(retryObject.item, retryObject.callback);\n\t }\n\t }.bind(this), this.options.retryInterval);\n\t }\n\t};\n\t\n\t/*\n\t * _dequeuePendingRequest - Removes the item from the pending request queue, this queue is used to\n\t * enable to functionality of providing a callback that clients can pass to `wait` to be notified\n\t * when the pending request queue has been emptied. This must be called when the API finishes\n\t * processing this item. If a `wait` callback is configured, it is called by this function.\n\t *\n\t * @param item - the item previously added to the pending request queue\n\t */\n\tQueue.prototype._dequeuePendingRequest = function(item) {\n\t var idx = this.pendingRequests.indexOf(item);\n\t if (idx !== -1) {\n\t this.pendingRequests.splice(idx, 1);\n\t this._maybeCallWait();\n\t }\n\t};\n\t\n\tQueue.prototype._maybeLog = function(data, originalError) {\n\t if (this.logger && this.options.verbose) {\n\t var message = originalError;\n\t message = message || _.get(data, 'body.trace.exception.message');\n\t message = message || _.get(data, 'body.trace_chain.0.exception.message');\n\t if (message) {\n\t this.logger.error(message);\n\t return;\n\t }\n\t message = _.get(data, 'body.message.body');\n\t if (message) {\n\t this.logger.log(message);\n\t }\n\t }\n\t};\n\t\n\tQueue.prototype._maybeCallWait = function() {\n\t if (_.isFunction(this.waitCallback) && this.pendingItems.length === 0 && this.pendingRequests.length === 0) {\n\t if (this.waitIntervalID) {\n\t this.waitIntervalID = clearInterval(this.waitIntervalID);\n\t }\n\t this.waitCallback();\n\t return true;\n\t }\n\t return false;\n\t};\n\t\n\tmodule.exports = Queue;\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar extend = __webpack_require__(7);\n\t\n\tvar RollbarJSON = {};\n\tvar __initRollbarJSON = false;\n\tfunction setupJSON() {\n\t if (__initRollbarJSON) {\n\t return;\n\t }\n\t __initRollbarJSON = true;\n\t\n\t if (isDefined(JSON)) {\n\t if (isNativeFunction(JSON.stringify)) {\n\t RollbarJSON.stringify = JSON.stringify;\n\t }\n\t if (isNativeFunction(JSON.parse)) {\n\t RollbarJSON.parse = JSON.parse;\n\t }\n\t }\n\t if (!isFunction(RollbarJSON.stringify) || !isFunction(RollbarJSON.parse)) {\n\t var setupCustomJSON = __webpack_require__(8);\n\t setupCustomJSON(RollbarJSON);\n\t }\n\t}\n\tsetupJSON();\n\t\n\t/*\n\t * isType - Given a Javascript value and a string, returns true if the type of the value matches the\n\t * given string.\n\t *\n\t * @param x - any value\n\t * @param t - a lowercase string containing one of the following type names:\n\t * - undefined\n\t * - null\n\t * - error\n\t * - number\n\t * - boolean\n\t * - string\n\t * - symbol\n\t * - function\n\t * - object\n\t * - array\n\t * @returns true if x is of type t, otherwise false\n\t */\n\tfunction isType(x, t) {\n\t return t === typeName(x);\n\t}\n\t\n\t/*\n\t * typeName - Given a Javascript value, returns the type of the object as a string\n\t */\n\tfunction typeName(x) {\n\t var name = typeof x;\n\t if (name !== 'object') {\n\t return name;\n\t }\n\t if (!x) {\n\t return 'null';\n\t }\n\t if (x instanceof Error) {\n\t return 'error';\n\t }\n\t return ({}).toString.call(x).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n\t}\n\t\n\t/* isFunction - a convenience function for checking if a value is a function\n\t *\n\t * @param f - any value\n\t * @returns true if f is a function, otherwise false\n\t */\n\tfunction isFunction(f) {\n\t return isType(f, 'function');\n\t}\n\t\n\t/* isNativeFunction - a convenience function for checking if a value is a native JS function\n\t *\n\t * @param f - any value\n\t * @returns true if f is a native JS function, otherwise false\n\t */\n\tfunction isNativeFunction(f) {\n\t var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\t var funcMatchString = Function.prototype.toString.call(Object.prototype.hasOwnProperty)\n\t .replace(reRegExpChar, '\\\\$&')\n\t .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?');\n\t var reIsNative = RegExp('^' + funcMatchString + '$');\n\t return isObject(f) && reIsNative.test(f);\n\t}\n\t\n\t/* isObject - Checks if the argument is an object\n\t *\n\t * @param value - any value\n\t * @returns true is value is an object function is an object)\n\t*/\n\tfunction isObject(value) {\n\t var type = typeof value;\n\t return value != null && (type == 'object' || type == 'function');\n\t}\n\t\n\t/*\n\t * isDefined - a convenience function for checking if a value is not equal to undefined\n\t *\n\t * @param u - any value\n\t * @returns true if u is anything other than undefined\n\t */\n\tfunction isDefined(u) {\n\t return !isType(u, 'undefined');\n\t}\n\t\n\t/*\n\t * isIterable - convenience function for checking if a value can be iterated, essentially\n\t * whether it is an object or an array.\n\t *\n\t * @param i - any value\n\t * @returns true if i is an object or an array as determined by `typeName`\n\t */\n\tfunction isIterable(i) {\n\t var type = typeName(i);\n\t return (type === 'object' || type === 'array');\n\t}\n\t\n\t/*\n\t * isError - convenience function for checking if a value is of an error type\n\t *\n\t * @param e - any value\n\t * @returns true if e is an error\n\t */\n\tfunction isError(e) {\n\t return isType(e, 'error');\n\t}\n\t\n\tfunction traverse(obj, func, seen) {\n\t var k, v, i;\n\t var isObj = isType(obj, 'object');\n\t var isArray = isType(obj, 'array');\n\t var keys = [];\n\t\n\t if (isObj && seen.indexOf(obj) !== -1) {\n\t return obj;\n\t }\n\t seen.push(obj);\n\t\n\t if (isObj) {\n\t for (k in obj) {\n\t if (Object.prototype.hasOwnProperty.call(obj, k)) {\n\t keys.push(k);\n\t }\n\t }\n\t } else if (isArray) {\n\t for (i = 0; i < obj.length; ++i) {\n\t keys.push(i);\n\t }\n\t }\n\t\n\t var result = isObj ? {} : [];\n\t for (i = 0; i < keys.length; ++i) {\n\t k = keys[i];\n\t v = obj[k];\n\t result[k] = func(k, v, seen);\n\t }\n\t\n\t return (keys.length != 0) ? result : obj;\n\t}\n\t\n\tfunction redact() {\n\t return '********';\n\t}\n\t\n\t// from http://stackoverflow.com/a/8809472/1138191\n\tfunction uuid4() {\n\t var d = now();\n\t var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n\t var r = (d + Math.random() * 16) % 16 | 0;\n\t d = Math.floor(d / 16);\n\t return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16);\n\t });\n\t return uuid;\n\t}\n\t\n\tvar LEVELS = {\n\t debug: 0,\n\t info: 1,\n\t warning: 2,\n\t error: 3,\n\t critical: 4\n\t};\n\t\n\tfunction sanitizeUrl(url) {\n\t var baseUrlParts = parseUri(url);\n\t // remove a trailing # if there is no anchor\n\t if (baseUrlParts.anchor === '') {\n\t baseUrlParts.source = baseUrlParts.source.replace('#', '');\n\t }\n\t\n\t url = baseUrlParts.source.replace('?' + baseUrlParts.query, '');\n\t return url;\n\t}\n\t\n\tvar parseUriOptions = {\n\t strictMode: false,\n\t key: [\n\t 'source',\n\t 'protocol',\n\t 'authority',\n\t 'userInfo',\n\t 'user',\n\t 'password',\n\t 'host',\n\t 'port',\n\t 'relative',\n\t 'path',\n\t 'directory',\n\t 'file',\n\t 'query',\n\t 'anchor'\n\t ],\n\t q: {\n\t name: 'queryKey',\n\t parser: /(?:^|&)([^&=]*)=?([^&]*)/g\n\t },\n\t parser: {\n\t strict: /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,\n\t loose: /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/\n\t }\n\t};\n\t\n\tfunction parseUri(str) {\n\t if (!isType(str, 'string')) {\n\t throw new Error('received invalid input');\n\t }\n\t\n\t var o = parseUriOptions;\n\t var m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str);\n\t var uri = {};\n\t var i = o.key.length;\n\t\n\t while (i--) {\n\t uri[o.key[i]] = m[i] || '';\n\t }\n\t\n\t uri[o.q.name] = {};\n\t uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {\n\t if ($1) {\n\t uri[o.q.name][$1] = $2;\n\t }\n\t });\n\t\n\t return uri;\n\t}\n\t\n\tfunction addParamsAndAccessTokenToPath(accessToken, options, params) {\n\t params = params || {};\n\t params.access_token = accessToken;\n\t var paramsArray = [];\n\t var k;\n\t for (k in params) {\n\t if (Object.prototype.hasOwnProperty.call(params, k)) {\n\t paramsArray.push([k, params[k]].join('='));\n\t }\n\t }\n\t var query = '?' + paramsArray.sort().join('&');\n\t\n\t options = options || {};\n\t options.path = options.path || '';\n\t var qs = options.path.indexOf('?');\n\t var h = options.path.indexOf('#');\n\t var p;\n\t if (qs !== -1 && (h === -1 || h > qs)) {\n\t p = options.path;\n\t options.path = p.substring(0,qs) + query + '&' + p.substring(qs+1);\n\t } else {\n\t if (h !== -1) {\n\t p = options.path;\n\t options.path = p.substring(0,h) + query + p.substring(h);\n\t } else {\n\t options.path = options.path + query;\n\t }\n\t }\n\t}\n\t\n\tfunction formatUrl(u, protocol) {\n\t protocol = protocol || u.protocol;\n\t if (!protocol && u.port) {\n\t if (u.port === 80) {\n\t protocol = 'http:';\n\t } else if (u.port === 443) {\n\t protocol = 'https:';\n\t }\n\t }\n\t protocol = protocol || 'https:';\n\t\n\t if (!u.hostname) {\n\t return null;\n\t }\n\t var result = protocol + '//' + u.hostname;\n\t if (u.port) {\n\t result = result + ':' + u.port;\n\t }\n\t if (u.path) {\n\t result = result + u.path;\n\t }\n\t return result;\n\t}\n\t\n\tfunction stringify(obj, backup) {\n\t var value, error;\n\t try {\n\t value = RollbarJSON.stringify(obj);\n\t } catch (jsonError) {\n\t if (backup && isFunction(backup)) {\n\t try {\n\t value = backup(obj);\n\t } catch (backupError) {\n\t error = backupError;\n\t }\n\t } else {\n\t error = jsonError;\n\t }\n\t }\n\t return {error: error, value: value};\n\t}\n\t\n\tfunction jsonParse(s) {\n\t var value, error;\n\t try {\n\t value = RollbarJSON.parse(s);\n\t } catch (e) {\n\t error = e;\n\t }\n\t return {error: error, value: value};\n\t}\n\t\n\tfunction makeUnhandledStackInfo(\n\t message,\n\t url,\n\t lineno,\n\t colno,\n\t error,\n\t mode,\n\t backupMessage,\n\t errorParser\n\t) {\n\t var location = {\n\t url: url || '',\n\t line: lineno,\n\t column: colno\n\t };\n\t location.func = errorParser.guessFunctionName(location.url, location.line);\n\t location.context = errorParser.gatherContext(location.url, location.line);\n\t var href = document && document.location && document.location.href;\n\t var useragent = window && window.navigator && window.navigator.userAgent;\n\t return {\n\t 'mode': mode,\n\t 'message': error ? String(error) : (message || backupMessage),\n\t 'url': href,\n\t 'stack': [location],\n\t 'useragent': useragent\n\t };\n\t}\n\t\n\tfunction wrapCallback(logger, f) {\n\t return function(err, resp) {\n\t try {\n\t f(err, resp);\n\t } catch (e) {\n\t logger.error(e);\n\t }\n\t };\n\t}\n\t\n\tfunction createItem(args, logger, notifier, requestKeys, lambdaContext) {\n\t var message, err, custom, callback, request;\n\t var arg;\n\t var extraArgs = [];\n\t\n\t for (var i = 0, l = args.length; i < l; ++i) {\n\t arg = args[i];\n\t\n\t var typ = typeName(arg);\n\t switch (typ) {\n\t case 'undefined':\n\t break;\n\t case 'string':\n\t message ? extraArgs.push(arg) : message = arg;\n\t break;\n\t case 'function':\n\t callback = wrapCallback(logger, arg);\n\t break;\n\t case 'date':\n\t extraArgs.push(arg);\n\t break;\n\t case 'error':\n\t case 'domexception':\n\t err ? extraArgs.push(arg) : err = arg;\n\t break;\n\t case 'object':\n\t case 'array':\n\t if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n\t err ? extraArgs.push(arg) : err = arg;\n\t break;\n\t }\n\t if (requestKeys && typ === 'object' && !request) {\n\t for (var j = 0, len = requestKeys.length; j < len; ++j) {\n\t if (arg[requestKeys[j]] !== undefined) {\n\t request = arg;\n\t break;\n\t }\n\t }\n\t if (request) {\n\t break;\n\t }\n\t }\n\t custom ? extraArgs.push(arg) : custom = arg;\n\t break;\n\t default:\n\t if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n\t err ? extraArgs.push(arg) : err = arg;\n\t break;\n\t }\n\t extraArgs.push(arg);\n\t }\n\t }\n\t\n\t if (extraArgs.length > 0) {\n\t // if custom is an array this turns it into an object with integer keys\n\t custom = extend(true, {}, custom);\n\t custom.extraArgs = extraArgs;\n\t }\n\t\n\t var item = {\n\t message: message,\n\t err: err,\n\t custom: custom,\n\t timestamp: now(),\n\t callback: callback,\n\t uuid: uuid4()\n\t };\n\t if (custom && custom.level !== undefined) {\n\t item.level = custom.level;\n\t delete custom.level;\n\t }\n\t if (requestKeys && request) {\n\t item.request = request;\n\t }\n\t if (lambdaContext) {\n\t item.lambdaContext = lambdaContext;\n\t }\n\t item._originalArgs = args;\n\t return item;\n\t}\n\t\n\t/*\n\t * get - given an obj/array and a keypath, return the value at that keypath or\n\t * undefined if not possible.\n\t *\n\t * @param obj - an object or array\n\t * @param path - a string of keys separated by '.' such as 'plugin.jquery.0.message'\n\t * which would correspond to 42 in `{plugin: {jquery: [{message: 42}]}}`\n\t */\n\tfunction get(obj, path) {\n\t if (!obj) {\n\t return undefined;\n\t }\n\t var keys = path.split('.');\n\t var result = obj;\n\t try {\n\t for (var i = 0, len = keys.length; i < len; ++i) {\n\t result = result[keys[i]];\n\t }\n\t } catch (e) {\n\t result = undefined;\n\t }\n\t return result;\n\t}\n\t\n\tfunction set(obj, path, value) {\n\t if (!obj) {\n\t return;\n\t }\n\t var keys = path.split('.');\n\t var len = keys.length;\n\t if (len < 1) {\n\t return;\n\t }\n\t if (len === 1) {\n\t obj[keys[0]] = value;\n\t return;\n\t }\n\t try {\n\t var temp = obj[keys[0]] || {};\n\t var replacement = temp;\n\t for (var i = 1; i < len-1; i++) {\n\t temp[keys[i]] = temp[keys[i]] || {};\n\t temp = temp[keys[i]];\n\t }\n\t temp[keys[len-1]] = value;\n\t obj[keys[0]] = replacement;\n\t } catch (e) {\n\t return;\n\t }\n\t}\n\t\n\tfunction scrub(data, scrubFields) {\n\t scrubFields = scrubFields || [];\n\t var paramRes = _getScrubFieldRegexs(scrubFields);\n\t var queryRes = _getScrubQueryParamRegexs(scrubFields);\n\t\n\t function redactQueryParam(dummy0, paramPart, dummy1, dummy2, dummy3, valPart) {\n\t return paramPart + redact(valPart);\n\t }\n\t\n\t function paramScrubber(v) {\n\t var i;\n\t if (isType(v, 'string')) {\n\t for (i = 0; i < queryRes.length; ++i) {\n\t v = v.replace(queryRes[i], redactQueryParam);\n\t }\n\t }\n\t return v;\n\t }\n\t\n\t function valScrubber(k, v) {\n\t var i;\n\t for (i = 0; i < paramRes.length; ++i) {\n\t if (paramRes[i].test(k)) {\n\t v = redact(v);\n\t break;\n\t }\n\t }\n\t return v;\n\t }\n\t\n\t function scrubber(k, v, seen) {\n\t var tmpV = valScrubber(k, v);\n\t if (tmpV === v) {\n\t if (isType(v, 'object') || isType(v, 'array')) {\n\t return traverse(v, scrubber, seen);\n\t }\n\t return paramScrubber(tmpV);\n\t } else {\n\t return tmpV;\n\t }\n\t }\n\t\n\t return traverse(data, scrubber, []);\n\t}\n\t\n\tfunction _getScrubFieldRegexs(scrubFields) {\n\t var ret = [];\n\t var pat;\n\t for (var i = 0; i < scrubFields.length; ++i) {\n\t pat = '^\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?$';\n\t ret.push(new RegExp(pat, 'i'));\n\t }\n\t return ret;\n\t}\n\t\n\t\n\tfunction _getScrubQueryParamRegexs(scrubFields) {\n\t var ret = [];\n\t var pat;\n\t for (var i = 0; i < scrubFields.length; ++i) {\n\t pat = '\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?';\n\t ret.push(new RegExp('(' + pat + '=)([^&\\\\n]+)', 'igm'));\n\t }\n\t return ret;\n\t}\n\t\n\tfunction formatArgsAsString(args) {\n\t var i, len, arg;\n\t var result = [];\n\t for (i = 0, len = args.length; i < len; i++) {\n\t arg = args[i];\n\t if (typeof arg === 'object') {\n\t arg = stringify(arg);\n\t arg = arg.error || arg.value;\n\t if (arg.length > 500)\n\t arg = arg.substr(0,500)+'...';\n\t } else if (typeof arg === 'undefined') {\n\t arg = 'undefined';\n\t }\n\t result.push(arg);\n\t }\n\t return result.join(' ');\n\t}\n\t\n\tfunction now() {\n\t if (Date.now) {\n\t return +Date.now();\n\t }\n\t return +new Date();\n\t}\n\t\n\tfunction filterIp(requestData, captureIp) {\n\t if (!requestData || !requestData['user_ip'] || captureIp === true) {\n\t return;\n\t }\n\t var newIp = requestData['user_ip'];\n\t if (!captureIp) {\n\t newIp = null;\n\t } else {\n\t try {\n\t var parts;\n\t if (newIp.indexOf('.') !== -1) {\n\t parts = newIp.split('.');\n\t parts.pop();\n\t parts.push('0');\n\t newIp = parts.join('.');\n\t } else if (newIp.indexOf(':') !== -1) {\n\t parts = newIp.split(':');\n\t if (parts.length > 2) {\n\t var beginning = parts.slice(0, 3);\n\t var slashIdx = beginning[2].indexOf('/');\n\t if (slashIdx !== -1) {\n\t beginning[2] = beginning[2].substring(0, slashIdx);\n\t }\n\t var terminal = '0000:0000:0000:0000:0000';\n\t newIp = beginning.concat(terminal).join(':');\n\t }\n\t } else {\n\t newIp = null;\n\t }\n\t } catch (e) {\n\t newIp = null;\n\t }\n\t }\n\t requestData['user_ip'] = newIp;\n\t}\n\t\n\tmodule.exports = {\n\t isType: isType,\n\t typeName: typeName,\n\t isFunction: isFunction,\n\t isNativeFunction: isNativeFunction,\n\t isIterable: isIterable,\n\t isError: isError,\n\t extend: extend,\n\t traverse: traverse,\n\t redact: redact,\n\t uuid4: uuid4,\n\t LEVELS: LEVELS,\n\t sanitizeUrl: sanitizeUrl,\n\t addParamsAndAccessTokenToPath: addParamsAndAccessTokenToPath,\n\t formatUrl: formatUrl,\n\t stringify: stringify,\n\t jsonParse: jsonParse,\n\t makeUnhandledStackInfo: makeUnhandledStackInfo,\n\t createItem: createItem,\n\t get: get,\n\t set: set,\n\t scrub: scrub,\n\t formatArgsAsString: formatArgsAsString,\n\t now: now,\n\t filterIp: filterIp\n\t};\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tvar hasOwn = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\t\n\tvar isArray = function isArray(arr) {\n\t\tif (typeof Array.isArray === 'function') {\n\t\t\treturn Array.isArray(arr);\n\t\t}\n\t\n\t\treturn toStr.call(arr) === '[object Array]';\n\t};\n\t\n\tvar isPlainObject = function isPlainObject(obj) {\n\t\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\t\treturn false;\n\t\t}\n\t\n\t\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\t\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t\t// Not own constructor property must be Object\n\t\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\t\treturn false;\n\t\t}\n\t\n\t\t// Own properties are enumerated firstly, so to speed up,\n\t\t// if last one is own, then all properties are own.\n\t\tvar key;\n\t\tfor (key in obj) {/**/}\n\t\n\t\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n\t};\n\t\n\tmodule.exports = function extend() {\n\t\tvar options, name, src, copy, copyIsArray, clone,\n\t\t\ttarget = arguments[0],\n\t\t\ti = 1,\n\t\t\tlength = arguments.length,\n\t\t\tdeep = false;\n\t\n\t\t// Handle a deep copy situation\n\t\tif (typeof target === 'boolean') {\n\t\t\tdeep = target;\n\t\t\ttarget = arguments[1] || {};\n\t\t\t// skip the boolean and the target\n\t\t\ti = 2;\n\t\t} else if ((typeof target !== 'object' && typeof target !== 'function') || target == null) {\n\t\t\ttarget = {};\n\t\t}\n\t\n\t\tfor (; i < length; ++i) {\n\t\t\toptions = arguments[i];\n\t\t\t// Only deal with non-null/undefined values\n\t\t\tif (options != null) {\n\t\t\t\t// Extend the base object\n\t\t\t\tfor (name in options) {\n\t\t\t\t\tsrc = target[name];\n\t\t\t\t\tcopy = options[name];\n\t\n\t\t\t\t\t// Prevent never-ending loop\n\t\t\t\t\tif (target !== copy) {\n\t\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\t\ttarget[name] = extend(deep, clone, copy);\n\t\n\t\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\t// Return the modified object\n\t\treturn target;\n\t};\n\t\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports) {\n\n\t// json3.js\n\t// 2017-02-21\n\t// Public Domain.\n\t// NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n\t// See http://www.JSON.org/js.html\n\t// This code should be minified before deployment.\n\t// See http://javascript.crockford.com/jsmin.html\n\t\n\t// USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n\t// NOT CONTROL.\n\t\n\t// This file creates a global JSON object containing two methods: stringify\n\t// and parse. This file provides the ES5 JSON capability to ES3 systems.\n\t// If a project might run on IE8 or earlier, then this file should be included.\n\t// This file does nothing on ES5 systems.\n\t\n\t// JSON.stringify(value, replacer, space)\n\t// value any JavaScript value, usually an object or array.\n\t// replacer an optional parameter that determines how object\n\t// values are stringified for objects. It can be a\n\t// function or an array of strings.\n\t// space an optional parameter that specifies the indentation\n\t// of nested structures. If it is omitted, the text will\n\t// be packed without extra whitespace. If it is a number,\n\t// it will specify the number of spaces to indent at each\n\t// level. If it is a string (such as \"\\t\" or \" \"),\n\t// it contains the characters used to indent at each level.\n\t// This method produces a JSON text from a JavaScript value.\n\t// When an object value is found, if the object contains a toJSON\n\t// method, its toJSON method will be called and the result will be\n\t// stringified. A toJSON method does not serialize: it returns the\n\t// value represented by the name/value pair that should be serialized,\n\t// or undefined if nothing should be serialized. The toJSON method\n\t// will be passed the key associated with the value, and this will be\n\t// bound to the value.\n\t\n\t// For example, this would serialize Dates as ISO strings.\n\t\n\t// Date.prototype.toJSON = function (key) {\n\t// function f(n) {\n\t// // Format integers to have at least two digits.\n\t// return (n < 10)\n\t// ? \"0\" + n\n\t// : n;\n\t// }\n\t// return this.getUTCFullYear() + \"-\" +\n\t// f(this.getUTCMonth() + 1) + \"-\" +\n\t// f(this.getUTCDate()) + \"T\" +\n\t// f(this.getUTCHours()) + \":\" +\n\t// f(this.getUTCMinutes()) + \":\" +\n\t// f(this.getUTCSeconds()) + \"Z\";\n\t// };\n\t\n\t// You can provide an optional replacer method. It will be passed the\n\t// key and value of each member, with this bound to the containing\n\t// object. The value that is returned from your method will be\n\t// serialized. If your method returns undefined, then the member will\n\t// be excluded from the serialization.\n\t\n\t// If the replacer parameter is an array of strings, then it will be\n\t// used to select the members to be serialized. It filters the results\n\t// such that only members with keys listed in the replacer array are\n\t// stringified.\n\t\n\t// Values that do not have JSON representations, such as undefined or\n\t// functions, will not be serialized. Such values in objects will be\n\t// dropped; in arrays they will be replaced with null. You can use\n\t// a replacer function to replace those with JSON values.\n\t\n\t// JSON.stringify(undefined) returns undefined.\n\t\n\t// The optional space parameter produces a stringification of the\n\t// value that is filled with line breaks and indentation to make it\n\t// easier to read.\n\t\n\t// If the space parameter is a non-empty string, then that string will\n\t// be used for indentation. If the space parameter is a number, then\n\t// the indentation will be that many spaces.\n\t\n\t// Example:\n\t\n\t// text = JSON.stringify([\"e\", {pluribus: \"unum\"}]);\n\t// // text is '[\"e\",{\"pluribus\":\"unum\"}]'\n\t\n\t// text = JSON.stringify([\"e\", {pluribus: \"unum\"}], null, \"\\t\");\n\t// // text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\n\t\n\t// text = JSON.stringify([new Date()], function (key, value) {\n\t// return this[key] instanceof Date\n\t// ? \"Date(\" + this[key] + \")\"\n\t// : value;\n\t// });\n\t// // text is '[\"Date(---current time---)\"]'\n\t\n\t// JSON.parse(text, reviver)\n\t// This method parses a JSON text to produce an object or array.\n\t// It can throw a SyntaxError exception.\n\t// This has been modified to use JSON-js/json_parse_state.js as the\n\t// parser instead of the one built around eval found in JSON-js/json2.js\n\t\n\t// The optional reviver parameter is a function that can filter and\n\t// transform the results. It receives each of the keys and values,\n\t// and its return value is used instead of the original value.\n\t// If it returns what it received, then the structure is not modified.\n\t// If it returns undefined then the member is deleted.\n\t\n\t// Example:\n\t\n\t// // Parse the text. Values that look like ISO date strings will\n\t// // be converted to Date objects.\n\t\n\t// myData = JSON.parse(text, function (key, value) {\n\t// var a;\n\t// if (typeof value === \"string\") {\n\t// a =\n\t// /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n\t// if (a) {\n\t// return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n\t// +a[5], +a[6]));\n\t// }\n\t// }\n\t// return value;\n\t// });\n\t\n\t// myData = JSON.parse('[\"Date(09/09/2001)\"]', function (key, value) {\n\t// var d;\n\t// if (typeof value === \"string\" &&\n\t// value.slice(0, 5) === \"Date(\" &&\n\t// value.slice(-1) === \")\") {\n\t// d = new Date(value.slice(5, -1));\n\t// if (d) {\n\t// return d;\n\t// }\n\t// }\n\t// return value;\n\t// });\n\t\n\t// This is a reference implementation. You are free to copy, modify, or\n\t// redistribute.\n\t\n\t/*jslint\n\t for, this\n\t */\n\t\n\t/*property\n\t JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\n\t getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\n\t lastIndex, length, parse, prototype, push, replace, slice, stringify,\n\t test, toJSON, toString, valueOf\n\t */\n\t\n\tvar setupCustomJSON = function(JSON) {\n\t\n\t var rx_one = /^[\\],:{}\\s]*$/;\n\t var rx_two = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g;\n\t var rx_three = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\n\t var rx_four = /(?:^|:|,)(?:\\s*\\[)+/g;\n\t var rx_escapable = /[\\\\\"\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\t var rx_dangerous = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\t\n\t function f(n) {\n\t // Format integers to have at least two digits.\n\t return n < 10\n\t ? \"0\" + n\n\t : n;\n\t }\n\t\n\t function this_value() {\n\t return this.valueOf();\n\t }\n\t\n\t if (typeof Date.prototype.toJSON !== \"function\") {\n\t\n\t Date.prototype.toJSON = function () {\n\t\n\t return isFinite(this.valueOf())\n\t ? this.getUTCFullYear() + \"-\" +\n\t f(this.getUTCMonth() + 1) + \"-\" +\n\t f(this.getUTCDate()) + \"T\" +\n\t f(this.getUTCHours()) + \":\" +\n\t f(this.getUTCMinutes()) + \":\" +\n\t f(this.getUTCSeconds()) + \"Z\"\n\t : null;\n\t };\n\t\n\t Boolean.prototype.toJSON = this_value;\n\t Number.prototype.toJSON = this_value;\n\t String.prototype.toJSON = this_value;\n\t }\n\t\n\t var gap;\n\t var indent;\n\t var meta;\n\t var rep;\n\t\n\t\n\t function quote(string) {\n\t\n\t // If the string contains no control characters, no quote characters, and no\n\t // backslash characters, then we can safely slap some quotes around it.\n\t // Otherwise we must also replace the offending characters with safe escape\n\t // sequences.\n\t\n\t rx_escapable.lastIndex = 0;\n\t return rx_escapable.test(string)\n\t ? \"\\\"\" + string.replace(rx_escapable, function (a) {\n\t var c = meta[a];\n\t return typeof c === \"string\"\n\t ? c\n\t : \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n\t }) + \"\\\"\"\n\t : \"\\\"\" + string + \"\\\"\";\n\t }\n\t\n\t\n\t function str(key, holder) {\n\t\n\t // Produce a string from holder[key].\n\t\n\t var i; // The loop counter.\n\t var k; // The member key.\n\t var v; // The member value.\n\t var length;\n\t var mind = gap;\n\t var partial;\n\t var value = holder[key];\n\t\n\t // If the value has a toJSON method, call it to obtain a replacement value.\n\t\n\t if (value && typeof value === \"object\" &&\n\t typeof value.toJSON === \"function\") {\n\t value = value.toJSON(key);\n\t }\n\t\n\t // If we were called with a replacer function, then call the replacer to\n\t // obtain a replacement value.\n\t\n\t if (typeof rep === \"function\") {\n\t value = rep.call(holder, key, value);\n\t }\n\t\n\t // What happens next depends on the value's type.\n\t\n\t switch (typeof value) {\n\t case \"string\":\n\t return quote(value);\n\t\n\t case \"number\":\n\t\n\t // JSON numbers must be finite. Encode non-finite numbers as null.\n\t\n\t return isFinite(value)\n\t ? String(value)\n\t : \"null\";\n\t\n\t case \"boolean\":\n\t case \"null\":\n\t\n\t // If the value is a boolean or null, convert it to a string. Note:\n\t // typeof null does not produce \"null\". The case is included here in\n\t // the remote chance that this gets fixed someday.\n\t\n\t return String(value);\n\t\n\t // If the type is \"object\", we might be dealing with an object or an array or\n\t // null.\n\t\n\t case \"object\":\n\t\n\t // Due to a specification blunder in ECMAScript, typeof null is \"object\",\n\t // so watch out for that case.\n\t\n\t if (!value) {\n\t return \"null\";\n\t }\n\t\n\t // Make an array to hold the partial results of stringifying this object value.\n\t\n\t gap += indent;\n\t partial = [];\n\t\n\t // Is the value an array?\n\t\n\t if (Object.prototype.toString.apply(value) === \"[object Array]\") {\n\t\n\t // The value is an array. Stringify every element. Use null as a placeholder\n\t // for non-JSON values.\n\t\n\t length = value.length;\n\t for (i = 0; i < length; i += 1) {\n\t partial[i] = str(i, value) || \"null\";\n\t }\n\t\n\t // Join all of the elements together, separated with commas, and wrap them in\n\t // brackets.\n\t\n\t v = partial.length === 0\n\t ? \"[]\"\n\t : gap\n\t ? \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\"\n\t : \"[\" + partial.join(\",\") + \"]\";\n\t gap = mind;\n\t return v;\n\t }\n\t\n\t // If the replacer is an array, use it to select the members to be stringified.\n\t\n\t if (rep && typeof rep === \"object\") {\n\t length = rep.length;\n\t for (i = 0; i < length; i += 1) {\n\t if (typeof rep[i] === \"string\") {\n\t k = rep[i];\n\t v = str(k, value);\n\t if (v) {\n\t partial.push(quote(k) + (\n\t gap\n\t ? \": \"\n\t : \":\"\n\t ) + v);\n\t }\n\t }\n\t }\n\t } else {\n\t\n\t // Otherwise, iterate through all of the keys in the object.\n\t\n\t for (k in value) {\n\t if (Object.prototype.hasOwnProperty.call(value, k)) {\n\t v = str(k, value);\n\t if (v) {\n\t partial.push(quote(k) + (\n\t gap\n\t ? \": \"\n\t : \":\"\n\t ) + v);\n\t }\n\t }\n\t }\n\t }\n\t\n\t // Join all of the member texts together, separated with commas,\n\t // and wrap them in braces.\n\t\n\t v = partial.length === 0\n\t ? \"{}\"\n\t : gap\n\t ? \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\"\n\t : \"{\" + partial.join(\",\") + \"}\";\n\t gap = mind;\n\t return v;\n\t }\n\t }\n\t\n\t // If the JSON object does not yet have a stringify method, give it one.\n\t\n\t if (typeof JSON.stringify !== \"function\") {\n\t meta = { // table of character substitutions\n\t \"\\b\": \"\\\\b\",\n\t \"\\t\": \"\\\\t\",\n\t \"\\n\": \"\\\\n\",\n\t \"\\f\": \"\\\\f\",\n\t \"\\r\": \"\\\\r\",\n\t \"\\\"\": \"\\\\\\\"\",\n\t \"\\\\\": \"\\\\\\\\\"\n\t };\n\t JSON.stringify = function (value, replacer, space) {\n\t\n\t // The stringify method takes a value and an optional replacer, and an optional\n\t // space parameter, and returns a JSON text. The replacer can be a function\n\t // that can replace values, or an array of strings that will select the keys.\n\t // A default replacer method can be provided. Use of the space parameter can\n\t // produce text that is more easily readable.\n\t\n\t var i;\n\t gap = \"\";\n\t indent = \"\";\n\t\n\t // If the space parameter is a number, make an indent string containing that\n\t // many spaces.\n\t\n\t if (typeof space === \"number\") {\n\t for (i = 0; i < space; i += 1) {\n\t indent += \" \";\n\t }\n\t\n\t // If the space parameter is a string, it will be used as the indent string.\n\t\n\t } else if (typeof space === \"string\") {\n\t indent = space;\n\t }\n\t\n\t // If there is a replacer, it must be a function or an array.\n\t // Otherwise, throw an error.\n\t\n\t rep = replacer;\n\t if (replacer && typeof replacer !== \"function\" &&\n\t (typeof replacer !== \"object\" ||\n\t typeof replacer.length !== \"number\")) {\n\t throw new Error(\"JSON.stringify\");\n\t }\n\t\n\t // Make a fake root object containing our value under the key of \"\".\n\t // Return the result of stringifying the value.\n\t\n\t return str(\"\", {\"\": value});\n\t };\n\t }\n\t\n\t\n\t // If the JSON object does not yet have a parse method, give it one.\n\t\n\t if (typeof JSON.parse !== \"function\") {\n\t JSON.parse = (function () {\n\t\n\t // This function creates a JSON parse function that uses a state machine rather\n\t // than the dangerous eval function to parse a JSON text.\n\t\n\t var state; // The state of the parser, one of\n\t // 'go' The starting state\n\t // 'ok' The final, accepting state\n\t // 'firstokey' Ready for the first key of the object or\n\t // the closing of an empty object\n\t // 'okey' Ready for the next key of the object\n\t // 'colon' Ready for the colon\n\t // 'ovalue' Ready for the value half of a key/value pair\n\t // 'ocomma' Ready for a comma or closing }\n\t // 'firstavalue' Ready for the first value of an array or\n\t // an empty array\n\t // 'avalue' Ready for the next value of an array\n\t // 'acomma' Ready for a comma or closing ]\n\t var stack; // The stack, for controlling nesting.\n\t var container; // The current container object or array\n\t var key; // The current key\n\t var value; // The current value\n\t var escapes = { // Escapement translation table\n\t \"\\\\\": \"\\\\\",\n\t \"\\\"\": \"\\\"\",\n\t \"/\": \"/\",\n\t \"t\": \"\\t\",\n\t \"n\": \"\\n\",\n\t \"r\": \"\\r\",\n\t \"f\": \"\\f\",\n\t \"b\": \"\\b\"\n\t };\n\t var string = { // The actions for string tokens\n\t go: function () {\n\t state = \"ok\";\n\t },\n\t firstokey: function () {\n\t key = value;\n\t state = \"colon\";\n\t },\n\t okey: function () {\n\t key = value;\n\t state = \"colon\";\n\t },\n\t ovalue: function () {\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t state = \"acomma\";\n\t }\n\t };\n\t var number = { // The actions for number tokens\n\t go: function () {\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t state = \"acomma\";\n\t }\n\t };\n\t var action = {\n\t\n\t // The action table describes the behavior of the machine. It contains an\n\t // object for each token. Each object contains a method that is called when\n\t // a token is matched in a state. An object will lack a method for illegal\n\t // states.\n\t\n\t \"{\": {\n\t go: function () {\n\t stack.push({state: \"ok\"});\n\t container = {};\n\t state = \"firstokey\";\n\t },\n\t ovalue: function () {\n\t stack.push({container: container, state: \"ocomma\", key: key});\n\t container = {};\n\t state = \"firstokey\";\n\t },\n\t firstavalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = {};\n\t state = \"firstokey\";\n\t },\n\t avalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = {};\n\t state = \"firstokey\";\n\t }\n\t },\n\t \"}\": {\n\t firstokey: function () {\n\t var pop = stack.pop();\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t },\n\t ocomma: function () {\n\t var pop = stack.pop();\n\t container[key] = value;\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t }\n\t },\n\t \"[\": {\n\t go: function () {\n\t stack.push({state: \"ok\"});\n\t container = [];\n\t state = \"firstavalue\";\n\t },\n\t ovalue: function () {\n\t stack.push({container: container, state: \"ocomma\", key: key});\n\t container = [];\n\t state = \"firstavalue\";\n\t },\n\t firstavalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = [];\n\t state = \"firstavalue\";\n\t },\n\t avalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = [];\n\t state = \"firstavalue\";\n\t }\n\t },\n\t \"]\": {\n\t firstavalue: function () {\n\t var pop = stack.pop();\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t },\n\t acomma: function () {\n\t var pop = stack.pop();\n\t container.push(value);\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t }\n\t },\n\t \":\": {\n\t colon: function () {\n\t if (Object.hasOwnProperty.call(container, key)) {\n\t throw new SyntaxError(\"Duplicate key '\" + key + \"\\\"\");\n\t }\n\t state = \"ovalue\";\n\t }\n\t },\n\t \",\": {\n\t ocomma: function () {\n\t container[key] = value;\n\t state = \"okey\";\n\t },\n\t acomma: function () {\n\t container.push(value);\n\t state = \"avalue\";\n\t }\n\t },\n\t \"true\": {\n\t go: function () {\n\t value = true;\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t value = true;\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t value = true;\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t value = true;\n\t state = \"acomma\";\n\t }\n\t },\n\t \"false\": {\n\t go: function () {\n\t value = false;\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t value = false;\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t value = false;\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t value = false;\n\t state = \"acomma\";\n\t }\n\t },\n\t \"null\": {\n\t go: function () {\n\t value = null;\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t value = null;\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t value = null;\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t value = null;\n\t state = \"acomma\";\n\t }\n\t }\n\t };\n\t\n\t function debackslashify(text) {\n\t\n\t // Remove and replace any backslash escapement.\n\t\n\t return text.replace(/\\\\(?:u(.{4})|([^u]))/g, function (ignore, b, c) {\n\t return b\n\t ? String.fromCharCode(parseInt(b, 16))\n\t : escapes[c];\n\t });\n\t }\n\t\n\t return function (source, reviver) {\n\t\n\t // A regular expression is used to extract tokens from the JSON text.\n\t // The extraction process is cautious.\n\t\n\t var result;\n\t var tx = /^[\\u0020\\t\\n\\r]*(?:([,:\\[\\]{}]|true|false|null)|(-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)|\"((?:[^\\r\\n\\t\\\\\\\"]|\\\\(?:[\"\\\\\\/trnfb]|u[0-9a-fA-F]{4}))*)\")/;\n\t\n\t // Set the starting state.\n\t\n\t state = \"go\";\n\t\n\t // The stack records the container, key, and state for each object or array\n\t // that contains another object or array while processing nested structures.\n\t\n\t stack = [];\n\t\n\t // If any error occurs, we will catch it and ultimately throw a syntax error.\n\t\n\t try {\n\t\n\t // For each token...\n\t\n\t while (true) {\n\t result = tx.exec(source);\n\t if (!result) {\n\t break;\n\t }\n\t\n\t // result is the result array from matching the tokenizing regular expression.\n\t // result[0] contains everything that matched, including any initial whitespace.\n\t // result[1] contains any punctuation that was matched, or true, false, or null.\n\t // result[2] contains a matched number, still in string form.\n\t // result[3] contains a matched string, without quotes but with escapement.\n\t\n\t if (result[1]) {\n\t\n\t // Token: Execute the action for this state and token.\n\t\n\t action[result[1]][state]();\n\t\n\t } else if (result[2]) {\n\t\n\t // Number token: Convert the number string into a number value and execute\n\t // the action for this state and number.\n\t\n\t value = +result[2];\n\t number[state]();\n\t } else {\n\t\n\t // String token: Replace the escapement sequences and execute the action for\n\t // this state and string.\n\t\n\t value = debackslashify(result[3]);\n\t string[state]();\n\t }\n\t\n\t // Remove the token from the string. The loop will continue as long as there\n\t // are tokens. This is a slow process, but it allows the use of ^ matching,\n\t // which assures that no illegal tokens slip through.\n\t\n\t source = source.slice(result[0].length);\n\t }\n\t\n\t // If we find a state/token combination that is illegal, then the action will\n\t // cause an error. We handle the error by simply changing the state.\n\t\n\t } catch (e) {\n\t state = e;\n\t }\n\t\n\t // The parsing is finished. If we are not in the final \"ok\" state, or if the\n\t // remaining source contains anything except whitespace, then we did not have\n\t //a well-formed JSON text.\n\t\n\t if (state !== \"ok\" || (/[^\\u0020\\t\\n\\r]/.test(source))) {\n\t throw (state instanceof SyntaxError)\n\t ? state\n\t : new SyntaxError(\"JSON\");\n\t }\n\t\n\t // If there is a reviver function, we recursively walk the new structure,\n\t // passing each name/value pair to the reviver function for possible\n\t // transformation, starting with a temporary root object that holds the current\n\t // value in an empty key. If there is not a reviver function, we simply return\n\t // that value.\n\t\n\t return (typeof reviver === \"function\")\n\t ? (function walk(holder, key) {\n\t var k;\n\t var v;\n\t var val = holder[key];\n\t if (val && typeof val === \"object\") {\n\t for (k in value) {\n\t if (Object.prototype.hasOwnProperty.call(val, k)) {\n\t v = walk(val, k);\n\t if (v !== undefined) {\n\t val[k] = v;\n\t } else {\n\t delete val[k];\n\t }\n\t }\n\t }\n\t }\n\t return reviver.call(holder, key, val);\n\t }({\"\": value}, \"\"))\n\t : value;\n\t };\n\t }());\n\t }\n\t}\n\t\n\tmodule.exports = setupCustomJSON;\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\t\n\t/*\n\t * Notifier - the internal object responsible for delegating between the client exposed API, the\n\t * chain of transforms necessary to turn an item into something that can be sent to Rollbar, and the\n\t * queue which handles the communcation with the Rollbar API servers.\n\t *\n\t * @param queue - an object that conforms to the interface: addItem(item, callback)\n\t * @param options - an object representing the options to be set for this notifier, this should have\n\t * any defaults already set by the caller\n\t */\n\tfunction Notifier(queue, options) {\n\t this.queue = queue;\n\t this.options = options;\n\t this.transforms = [];\n\t}\n\t\n\t/*\n\t * configure - updates the options for this notifier with the passed in object\n\t *\n\t * @param options - an object which gets merged with the current options set on this notifier\n\t * @returns this\n\t */\n\tNotifier.prototype.configure = function(options) {\n\t this.queue && this.queue.configure(options);\n\t var oldOptions = this.options;\n\t this.options = _.extend({}, oldOptions, options);\n\t return this;\n\t};\n\t\n\t/*\n\t * addTransform - adds a transform onto the end of the queue of transforms for this notifier\n\t *\n\t * @param transform - a function which takes three arguments:\n\t * * item: An Object representing the data to eventually be sent to Rollbar\n\t * * options: The current value of the options for this notifier\n\t * * callback: function(err: (Null|Error), item: (Null|Object)) the transform must call this\n\t * callback with a null value for error if it wants the processing chain to continue, otherwise\n\t * with an error to terminate the processing. The item should be the updated item after this\n\t * transform is finished modifying it.\n\t */\n\tNotifier.prototype.addTransform = function(transform) {\n\t if (_.isFunction(transform)) {\n\t this.transforms.push(transform);\n\t }\n\t return this;\n\t};\n\t\n\t/*\n\t * log - the internal log function which applies the configured transforms and then pushes onto the\n\t * queue to be sent to the backend.\n\t *\n\t * @param item - An object with the following structure:\n\t * message [String] - An optional string to be sent to rollbar\n\t * error [Error] - An optional error\n\t *\n\t * @param callback - A function of type function(err, resp) which will be called with exactly one\n\t * null argument and one non-null argument. The callback will be called once, either during the\n\t * transform stage if an error occurs inside a transform, or in response to the communication with\n\t * the backend. The second argument will be the response from the backend in case of success.\n\t */\n\tNotifier.prototype.log = function(item, callback) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t\n\t if (!this.options.enabled) {\n\t return callback(new Error('Rollbar is not enabled'));\n\t }\n\t\n\t this.queue.addPendingItem(item);\n\t var originalError = item.err;\n\t this._applyTransforms(item, function(err, i) {\n\t if (err) {\n\t this.queue.removePendingItem(item);\n\t return callback(err, null);\n\t }\n\t this.queue.addItem(i, callback, originalError, item);\n\t }.bind(this));\n\t};\n\t\n\t/* Internal */\n\t\n\t/*\n\t * _applyTransforms - Applies the transforms that have been added to this notifier sequentially. See\n\t * `addTransform` for more information.\n\t *\n\t * @param item - An item to be transformed\n\t * @param callback - A function of type function(err, item) which will be called with a non-null\n\t * error and a null item in the case of a transform failure, or a null error and non-null item after\n\t * all transforms have been applied.\n\t */\n\tNotifier.prototype._applyTransforms = function(item, callback) {\n\t var transformIndex = -1;\n\t var transformsLength = this.transforms.length;\n\t var transforms = this.transforms;\n\t var options = this.options;\n\t\n\t var cb = function(err, i) {\n\t if (err) {\n\t callback(err, null);\n\t return;\n\t }\n\t\n\t transformIndex++;\n\t\n\t if (transformIndex === transformsLength) {\n\t callback(null, i);\n\t return;\n\t }\n\t\n\t transforms[transformIndex](i, options, cb);\n\t };\n\t\n\t cb(null, item);\n\t};\n\t\n\tmodule.exports = Notifier;\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\t\n\tvar MAX_EVENTS = 100;\n\t\n\tfunction Telemeter(options) {\n\t this.queue = [];\n\t this.options = _.extend(true, {}, options);\n\t var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n\t this.maxQueueSize = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n\t}\n\t\n\tTelemeter.prototype.configure = function(options) {\n\t var oldOptions = this.options;\n\t this.options = _.extend(true, {}, oldOptions, options);\n\t var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n\t var newMaxEvents = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n\t var deleteCount = 0;\n\t if (this.maxQueueSize > newMaxEvents) {\n\t deleteCount = this.maxQueueSize - newMaxEvents;\n\t }\n\t this.maxQueueSize = newMaxEvents;\n\t this.queue.splice(0, deleteCount);\n\t};\n\t\n\tTelemeter.prototype.copyEvents = function() {\n\t return Array.prototype.slice.call(this.queue, 0);\n\t};\n\t\n\tTelemeter.prototype.capture = function(type, metadata, level, rollbarUUID, timestamp) {\n\t var e = {\n\t level: getLevel(type, level),\n\t type: type,\n\t timestamp_ms: timestamp || _.now(),\n\t body: metadata,\n\t source: 'client'\n\t };\n\t if (rollbarUUID) {\n\t e.uuid = rollbarUUID;\n\t }\n\t\n\t try {\n\t if (_.isFunction(this.options.filterTelemetry) && this.options.filterTelemetry(e)) {\n\t return false;\n\t }\n\t } catch (e) {\n\t this.options.filterTelemetry = null;\n\t }\n\t\n\t this.push(e);\n\t return e;\n\t};\n\t\n\tTelemeter.prototype.captureEvent = function(metadata, level, rollbarUUID) {\n\t return this.capture('manual', metadata, level, rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.captureError = function(err, level, rollbarUUID, timestamp) {\n\t var metadata = {\n\t message: err.message || String(err)\n\t };\n\t if (err.stack) {\n\t metadata.stack = err.stack;\n\t }\n\t return this.capture('error', metadata, level, rollbarUUID, timestamp);\n\t};\n\t\n\tTelemeter.prototype.captureLog = function(message, level, rollbarUUID, timestamp) {\n\t return this.capture('log', {\n\t message: message\n\t }, level, rollbarUUID, timestamp);\n\t};\n\t\n\tTelemeter.prototype.captureNetwork = function(metadata, subtype, rollbarUUID, requestData) {\n\t subtype = subtype || 'xhr';\n\t metadata.subtype = metadata.subtype || subtype;\n\t if (requestData) {\n\t metadata.request = requestData;\n\t }\n\t var level = this.levelFromStatus(metadata.status_code);\n\t return this.capture('network', metadata, level, rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.levelFromStatus = function(statusCode) {\n\t if (statusCode >= 200 && statusCode < 400) {\n\t return 'info';\n\t }\n\t if (statusCode === 0 || statusCode >= 400) {\n\t return 'error';\n\t }\n\t return 'info';\n\t};\n\t\n\tTelemeter.prototype.captureDom = function(subtype, element, value, checked, rollbarUUID) {\n\t var metadata = {\n\t subtype: subtype,\n\t element: element\n\t };\n\t if (value !== undefined) {\n\t metadata.value = value;\n\t }\n\t if (checked !== undefined) {\n\t metadata.checked = checked;\n\t }\n\t return this.capture('dom', metadata, 'info', rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.captureNavigation = function(from, to, rollbarUUID) {\n\t return this.capture('navigation', {from: from, to: to}, 'info', rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.captureDomContentLoaded = function(ts) {\n\t return this.capture('navigation', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n\t /**\n\t * If we decide to make this a dom event instead, then use the line below:\n\t return this.capture('dom', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n\t */\n\t};\n\tTelemeter.prototype.captureLoad = function(ts) {\n\t return this.capture('navigation', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n\t /**\n\t * If we decide to make this a dom event instead, then use the line below:\n\t return this.capture('dom', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n\t */\n\t};\n\t\n\tTelemeter.prototype.captureConnectivityChange = function(type, rollbarUUID) {\n\t return this.captureNetwork({change: type}, 'connectivity', rollbarUUID);\n\t};\n\t\n\t// Only intended to be used internally by the notifier\n\tTelemeter.prototype._captureRollbarItem = function(item) {\n\t if (!this.options.includeItemsInTelemetry) {\n\t return;\n\t }\n\t if (item.err) {\n\t return this.captureError(item.err, item.level, item.uuid, item.timestamp);\n\t }\n\t if (item.message) {\n\t return this.captureLog(item.message, item.level, item.uuid, item.timestamp);\n\t }\n\t if (item.custom) {\n\t return this.capture('log', item.custom, item.level, item.uuid, item.timestamp);\n\t }\n\t};\n\t\n\tTelemeter.prototype.push = function(e) {\n\t this.queue.push(e);\n\t if (this.queue.length > this.maxQueueSize) {\n\t this.queue.shift();\n\t }\n\t};\n\t\n\tfunction getLevel(type, level) {\n\t if (level) {\n\t return level;\n\t }\n\t var defaultLevel = {\n\t error: 'error',\n\t manual: 'info'\n\t };\n\t return defaultLevel[type] || 'info';\n\t}\n\t\n\tmodule.exports = Telemeter;\n\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\tvar helpers = __webpack_require__(12);\n\t\n\tvar defaultOptions = {\n\t hostname: 'api.rollbar.com',\n\t path: '/api/1/item/',\n\t search: null,\n\t version: '1',\n\t protocol: 'https:',\n\t port: 443\n\t};\n\t\n\t/**\n\t * Api is an object that encapsulates methods of communicating with\n\t * the Rollbar API. It is a standard interface with some parts implemented\n\t * differently for server or browser contexts. It is an object that should\n\t * be instantiated when used so it can contain non-global options that may\n\t * be different for another instance of RollbarApi.\n\t *\n\t * @param options {\n\t * accessToken: the accessToken to use for posting items to rollbar\n\t * endpoint: an alternative endpoint to send errors to\n\t * must be a valid, fully qualified URL.\n\t * The default is: https://api.rollbar.com/api/1/item\n\t * proxy: if you wish to proxy requests provide an object\n\t * with the following keys:\n\t * host or hostname (required): foo.example.com\n\t * port (optional): 123\n\t * protocol (optional): https\n\t * }\n\t */\n\tfunction Api(options, t, u, j) {\n\t this.options = options;\n\t this.transport = t;\n\t this.url = u;\n\t this.jsonBackup = j;\n\t this.accessToken = options.accessToken;\n\t this.transportOptions = _getTransport(options, u);\n\t}\n\t\n\t/**\n\t *\n\t * @param data\n\t * @param callback\n\t */\n\tApi.prototype.postItem = function(data, callback) {\n\t var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n\t var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n\t this.transport.post(this.accessToken, transportOptions, payload, callback);\n\t};\n\t\n\tApi.prototype.configure = function(options) {\n\t var oldOptions = this.oldOptions;\n\t this.options = _.extend(true, {}, oldOptions, options);\n\t this.transportOptions = _getTransport(this.options, this.url);\n\t if (this.options.accessToken !== undefined) {\n\t this.accessToken = this.options.accessToken;\n\t }\n\t return this;\n\t};\n\t\n\tfunction _getTransport(options, url) {\n\t return helpers.getTransportFromOptions(options, defaultOptions, url);\n\t}\n\t\n\tmodule.exports = Api;\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\t\n\tfunction buildPayload(accessToken, data, jsonBackup) {\n\t if (!_.isType(data.context, 'string')) {\n\t var contextResult = _.stringify(data.context, jsonBackup);\n\t if (contextResult.error) {\n\t data.context = 'Error: could not serialize \\'context\\'';\n\t } else {\n\t data.context = contextResult.value || '';\n\t }\n\t if (data.context.length > 255) {\n\t data.context = data.context.substr(0, 255);\n\t }\n\t }\n\t return {\n\t access_token: accessToken,\n\t data: data\n\t };\n\t}\n\t\n\tfunction getTransportFromOptions(options, defaults, url) {\n\t var hostname = defaults.hostname;\n\t var protocol = defaults.protocol;\n\t var port = defaults.port;\n\t var path = defaults.path;\n\t var search = defaults.search;\n\t\n\t var proxy = options.proxy;\n\t if (options.endpoint) {\n\t var opts = url.parse(options.endpoint);\n\t hostname = opts.hostname;\n\t protocol = opts.protocol;\n\t port = opts.port;\n\t path = opts.pathname;\n\t search = opts.search;\n\t }\n\t return {\n\t hostname: hostname,\n\t protocol: protocol,\n\t port: port,\n\t path: path,\n\t search: search,\n\t proxy: proxy\n\t };\n\t}\n\t\n\tfunction transportOptions(transport, method) {\n\t var protocol = transport.protocol || 'https:';\n\t var port = transport.port || (protocol === 'http:' ? 80 : protocol === 'https:' ? 443 : undefined);\n\t var hostname = transport.hostname;\n\t var path = transport.path;\n\t if (transport.search) {\n\t path = path + transport.search;\n\t }\n\t if (transport.proxy) {\n\t path = protocol + '//' + hostname + path;\n\t hostname = transport.proxy.host || transport.proxy.hostname;\n\t port = transport.proxy.port;\n\t protocol = transport.proxy.protocol || protocol;\n\t }\n\t return {\n\t protocol: protocol,\n\t hostname: hostname,\n\t path: path,\n\t port: port,\n\t method: method\n\t };\n\t}\n\t\n\tfunction appendPathToPath(base, path) {\n\t var baseTrailingSlash = /\\/$/.test(base);\n\t var pathBeginningSlash = /^\\//.test(path);\n\t\n\t if (baseTrailingSlash && pathBeginningSlash) {\n\t path = path.substring(1);\n\t } else if (!baseTrailingSlash && !pathBeginningSlash) {\n\t path = '/' + path;\n\t }\n\t\n\t return base + path;\n\t}\n\t\n\tmodule.exports = {\n\t buildPayload: buildPayload,\n\t getTransportFromOptions: getTransportFromOptions,\n\t transportOptions: transportOptions,\n\t appendPathToPath: appendPathToPath\n\t};\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t/* eslint-disable no-console */\n\t__webpack_require__(14);\n\tvar detection = __webpack_require__(15);\n\tvar _ = __webpack_require__(6);\n\t\n\tfunction error() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t args.unshift('Rollbar:');\n\t if (detection.ieVersion() <= 8) {\n\t console.error(_.formatArgsAsString(args));\n\t } else {\n\t console.error.apply(console, args);\n\t }\n\t}\n\t\n\tfunction info() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t args.unshift('Rollbar:');\n\t if (detection.ieVersion() <= 8) {\n\t console.info(_.formatArgsAsString(args));\n\t } else {\n\t console.info.apply(console, args);\n\t }\n\t}\n\t\n\tfunction log() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t args.unshift('Rollbar:');\n\t if (detection.ieVersion() <= 8) {\n\t console.log(_.formatArgsAsString(args));\n\t } else {\n\t console.log.apply(console, args);\n\t }\n\t}\n\t\n\t/* eslint-enable no-console */\n\t\n\tmodule.exports = {\n\t error: error,\n\t info: info,\n\t log: log\n\t};\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports) {\n\n\t// Console-polyfill. MIT license.\n\t// https://github.com/paulmillr/console-polyfill\n\t// Make it safe to do console.log() always.\n\t(function(global) {\n\t 'use strict';\n\t if (!global.console) {\n\t global.console = {};\n\t }\n\t var con = global.console;\n\t var prop, method;\n\t var dummy = function() {};\n\t var properties = ['memory'];\n\t var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' +\n\t 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' +\n\t 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',');\n\t while (prop = properties.pop()) if (!con[prop]) con[prop] = {};\n\t while (method = methods.pop()) if (!con[method]) con[method] = dummy;\n\t // Using `this` for web workers & supports Browserify / Webpack.\n\t})(typeof window === 'undefined' ? this : window);\n\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\t// This detection.js module is used to encapsulate any ugly browser/feature\n\t// detection we may need to do.\n\t\n\t// Figure out which version of IE we're using, if any.\n\t// This is gleaned from http://stackoverflow.com/questions/5574842/best-way-to-check-for-ie-less-than-9-in-javascript-without-library\n\t// Will return an integer on IE (i.e. 8)\n\t// Will return undefined otherwise\n\tfunction getIEVersion() {\n\t\tvar undef;\n\t\tif (!document) {\n\t\t\treturn undef;\n\t\t}\n\t\n\t var v = 3,\n\t div = document.createElement('div'),\n\t all = div.getElementsByTagName('i');\n\t\n\t while (\n\t div.innerHTML = '',\n\t all[0]\n\t );\n\t\n\t return v > 4 ? v : undef;\n\t}\n\t\n\tvar Detection = {\n\t ieVersion: getIEVersion\n\t};\n\t\n\tmodule.exports = Detection;\n\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tfunction captureUncaughtExceptions(window, handler, shim) {\n\t if (!window) { return; }\n\t var oldOnError;\n\t\n\t if (typeof handler._rollbarOldOnError === 'function') {\n\t oldOnError = handler._rollbarOldOnError;\n\t } else if (window.onerror && !window.onerror.belongsToShim) {\n\t oldOnError = window.onerror;\n\t handler._rollbarOldOnError = oldOnError;\n\t }\n\t\n\t var fn = function() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t _rollbarWindowOnError(window, handler, oldOnError, args);\n\t };\n\t fn.belongsToShim = shim;\n\t window.onerror = fn;\n\t}\n\t\n\tfunction _rollbarWindowOnError(window, r, old, args) {\n\t if (window._rollbarWrappedError) {\n\t if (!args[4]) {\n\t args[4] = window._rollbarWrappedError;\n\t }\n\t if (!args[5]) {\n\t args[5] = window._rollbarWrappedError._rollbarContext;\n\t }\n\t window._rollbarWrappedError = null;\n\t }\n\t\n\t r.handleUncaughtException.apply(r, args);\n\t if (old) {\n\t old.apply(window, args);\n\t }\n\t}\n\t\n\tfunction captureUnhandledRejections(window, handler, shim) {\n\t if (!window) { return; }\n\t\n\t if (typeof window._rollbarURH === 'function' && window._rollbarURH.belongsToShim) {\n\t window.removeEventListener('unhandledrejection', window._rollbarURH);\n\t }\n\t\n\t var rejectionHandler = function (evt) {\n\t var reason, promise, detail;\n\t try {\n\t reason = evt.reason;\n\t } catch (e) {\n\t reason = undefined;\n\t }\n\t try {\n\t promise = evt.promise;\n\t } catch (e) {\n\t promise = '[unhandledrejection] error getting `promise` from event';\n\t }\n\t try {\n\t detail = evt.detail;\n\t if (!reason && detail) {\n\t reason = detail.reason;\n\t promise = detail.promise;\n\t }\n\t } catch (e) {\n\t detail = '[unhandledrejection] error getting `detail` from event';\n\t }\n\t if (!reason) {\n\t reason = '[unhandledrejection] error getting `reason` from event';\n\t }\n\t\n\t if (handler && handler.handleUnhandledRejection) {\n\t handler.handleUnhandledRejection(reason, promise);\n\t }\n\t };\n\t rejectionHandler.belongsToShim = shim;\n\t window._rollbarURH = rejectionHandler;\n\t window.addEventListener('unhandledrejection', rejectionHandler);\n\t}\n\t\n\tfunction wrapGlobals(window, handler, shim) {\n\t if (!window) { return; }\n\t // Adapted from https://github.com/bugsnag/bugsnag-js\n\t var globals = 'EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload'.split(',');\n\t var i, global;\n\t for (i = 0; i < globals.length; ++i) {\n\t global = globals[i];\n\t\n\t if (window[global] && window[global].prototype) {\n\t _extendListenerPrototype(handler, window[global].prototype, shim);\n\t }\n\t }\n\t}\n\t\n\tfunction _extendListenerPrototype(handler, prototype, shim) {\n\t if (prototype.hasOwnProperty && prototype.hasOwnProperty('addEventListener')) {\n\t var oldAddEventListener = prototype.addEventListener;\n\t while (oldAddEventListener._rollbarOldAdd && oldAddEventListener.belongsToShim) {\n\t oldAddEventListener = oldAddEventListener._rollbarOldAdd;\n\t }\n\t var addFn = function(event, callback, bubble) {\n\t oldAddEventListener.call(this, event, handler.wrap(callback), bubble);\n\t };\n\t addFn._rollbarOldAdd = oldAddEventListener;\n\t addFn.belongsToShim = shim;\n\t prototype.addEventListener = addFn;\n\t\n\t var oldRemoveEventListener = prototype.removeEventListener;\n\t while (oldRemoveEventListener._rollbarOldRemove && oldRemoveEventListener.belongsToShim) {\n\t oldRemoveEventListener = oldRemoveEventListener._rollbarOldRemove;\n\t }\n\t var removeFn = function(event, callback, bubble) {\n\t oldRemoveEventListener.call(this, event, callback && callback._rollbar_wrapped || callback, bubble);\n\t };\n\t removeFn._rollbarOldRemove = oldRemoveEventListener;\n\t removeFn.belongsToShim = shim;\n\t prototype.removeEventListener = removeFn;\n\t }\n\t}\n\t\n\tmodule.exports = {\n\t captureUncaughtExceptions: captureUncaughtExceptions,\n\t captureUnhandledRejections: captureUnhandledRejections,\n\t wrapGlobals: wrapGlobals\n\t};\n\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\tvar logger = __webpack_require__(13);\n\t\n\t/*\n\t * accessToken may be embedded in payload but that should not\n\t * be assumed\n\t *\n\t * options: {\n\t * hostname\n\t * protocol\n\t * path\n\t * port\n\t * method\n\t * }\n\t *\n\t * params is an object containing key/value pairs. These\n\t * will be appended to the path as 'key=value&key=value'\n\t *\n\t * payload is an unserialized object\n\t */\n\t\n\tfunction get(accessToken, options, params, callback, requestFactory) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t _.addParamsAndAccessTokenToPath(accessToken, options, params);\n\t\n\t var method = 'GET';\n\t var url = _.formatUrl(options);\n\t _makeRequest(accessToken, url, method, null, callback, requestFactory);\n\t}\n\t\n\tfunction post(accessToken, options, payload, callback, requestFactory) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t\n\t if (!payload) {\n\t return callback(new Error('Cannot send empty request'));\n\t }\n\t\n\t var stringifyResult = _.stringify(payload);\n\t if (stringifyResult.error) {\n\t return callback(stringifyResult.error);\n\t }\n\t\n\t var writeData = stringifyResult.value;\n\t var method = 'POST';\n\t var url = _.formatUrl(options);\n\t _makeRequest(accessToken, url, method, writeData, callback, requestFactory);\n\t}\n\t\n\tfunction _makeRequest(accessToken, url, method, data, callback, requestFactory) {\n\t var request;\n\t if (requestFactory) {\n\t request = requestFactory();\n\t } else {\n\t request = _createXMLHTTPObject();\n\t }\n\t if (!request) {\n\t // Give up, no way to send requests\n\t return callback(new Error('No way to send a request'));\n\t }\n\t try {\n\t try {\n\t var onreadystatechange = function() {\n\t try {\n\t if (onreadystatechange && request.readyState === 4) {\n\t onreadystatechange = undefined;\n\t\n\t var parseResponse = _.jsonParse(request.responseText);\n\t if (_isSuccess(request)) {\n\t callback(parseResponse.error, parseResponse.value);\n\t return;\n\t } else if (_isNormalFailure(request)) {\n\t if (request.status === 403) {\n\t // likely caused by using a server access token\n\t var message = parseResponse.value && parseResponse.value.message;\n\t logger.error(message);\n\t }\n\t // return valid http status codes\n\t callback(new Error(String(request.status)));\n\t } else {\n\t // IE will return a status 12000+ on some sort of connection failure,\n\t // so we return a blank error\n\t // http://msdn.microsoft.com/en-us/library/aa383770%28VS.85%29.aspx\n\t var msg = 'XHR response had no status code (likely connection failure)';\n\t callback(_newRetriableError(msg));\n\t }\n\t }\n\t } catch (ex) {\n\t //jquery source mentions firefox may error out while accessing the\n\t //request members if there is a network error\n\t //https://github.com/jquery/jquery/blob/a938d7b1282fc0e5c52502c225ae8f0cef219f0a/src/ajax/xhr.js#L111\n\t var exc;\n\t if (ex && ex.stack) {\n\t exc = ex;\n\t } else {\n\t exc = new Error(ex);\n\t }\n\t callback(exc);\n\t }\n\t };\n\t\n\t request.open(method, url, true);\n\t if (request.setRequestHeader) {\n\t request.setRequestHeader('Content-Type', 'application/json');\n\t request.setRequestHeader('X-Rollbar-Access-Token', accessToken);\n\t }\n\t request.onreadystatechange = onreadystatechange;\n\t request.send(data);\n\t } catch (e1) {\n\t // Sending using the normal xmlhttprequest object didn't work, try XDomainRequest\n\t if (typeof XDomainRequest !== 'undefined') {\n\t\n\t // Assume we are in a really old browser which has a bunch of limitations:\n\t // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\t\n\t // Extreme paranoia: if we have XDomainRequest then we have a window, but just in case\n\t if (!window || !window.location) {\n\t return callback(new Error('No window available during request, unknown environment'));\n\t }\n\t\n\t // If the current page is http, try and send over http\n\t if (window.location.href.substring(0, 5) === 'http:' && url.substring(0, 5) === 'https') {\n\t url = 'http' + url.substring(5);\n\t }\n\t\n\t var xdomainrequest = new XDomainRequest();\n\t xdomainrequest.onprogress = function() {};\n\t xdomainrequest.ontimeout = function() {\n\t var msg = 'Request timed out';\n\t var code = 'ETIMEDOUT';\n\t callback(_newRetriableError(msg, code));\n\t };\n\t xdomainrequest.onerror = function() {\n\t callback(new Error('Error during request'));\n\t };\n\t xdomainrequest.onload = function() {\n\t var parseResponse = _.jsonParse(xdomainrequest.responseText);\n\t callback(parseResponse.error, parseResponse.value);\n\t };\n\t xdomainrequest.open(method, url, true);\n\t xdomainrequest.send(data);\n\t } else {\n\t callback(new Error('Cannot find a method to transport a request'));\n\t }\n\t }\n\t } catch (e2) {\n\t callback(e2);\n\t }\n\t}\n\t\n\tfunction _createXMLHTTPObject() {\n\t /* global ActiveXObject:false */\n\t\n\t var factories = [\n\t function () {\n\t return new XMLHttpRequest();\n\t },\n\t function () {\n\t return new ActiveXObject('Msxml2.XMLHTTP');\n\t },\n\t function () {\n\t return new ActiveXObject('Msxml3.XMLHTTP');\n\t },\n\t function () {\n\t return new ActiveXObject('Microsoft.XMLHTTP');\n\t }\n\t ];\n\t var xmlhttp;\n\t var i;\n\t var numFactories = factories.length;\n\t for (i = 0; i < numFactories; i++) {\n\t /* eslint-disable no-empty */\n\t try {\n\t xmlhttp = factories[i]();\n\t break;\n\t } catch (e) {\n\t // pass\n\t }\n\t /* eslint-enable no-empty */\n\t }\n\t return xmlhttp;\n\t}\n\t\n\tfunction _isSuccess(r) {\n\t return r && r.status && r.status === 200;\n\t}\n\t\n\tfunction _isNormalFailure(r) {\n\t return r && _.isType(r.status, 'number') && r.status >= 400 && r.status < 600;\n\t}\n\t\n\tfunction _newRetriableError(message, code) {\n\t var err = new Error(message);\n\t err.code = code || 'ENOTFOUND';\n\t return err;\n\t}\n\t\n\tmodule.exports = {\n\t get: get,\n\t post: post\n\t};\n\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\t// See https://nodejs.org/docs/latest/api/url.html\n\tfunction parse(url) {\n\t var result = {\n\t protocol: null, auth: null, host: null, path: null,\n\t hash: null, href: url, hostname: null, port: null,\n\t pathname: null, search: null, query: null\n\t };\n\t\n\t var i, last;\n\t i = url.indexOf('//');\n\t if (i !== -1) {\n\t result.protocol = url.substring(0,i);\n\t last = i+2;\n\t } else {\n\t last = 0;\n\t }\n\t \n\t i = url.indexOf('@', last);\n\t if (i !== -1) {\n\t result.auth = url.substring(last, i);\n\t last = i+1;\n\t }\n\t\n\t i = url.indexOf('/', last);\n\t if (i === -1) {\n\t i = url.indexOf('?', last);\n\t if (i === -1) {\n\t i = url.indexOf('#', last);\n\t if (i === -1) {\n\t result.host = url.substring(last);\n\t } else {\n\t result.host = url.substring(last, i);\n\t result.hash = url.substring(i);\n\t }\n\t result.hostname = result.host.split(':')[0];\n\t result.port = result.host.split(':')[1];\n\t if (result.port) {\n\t result.port = parseInt(result.port, 10);\n\t }\n\t return result;\n\t } else {\n\t result.host = url.substring(last, i);\n\t result.hostname = result.host.split(':')[0];\n\t result.port = result.host.split(':')[1];\n\t if (result.port) {\n\t result.port = parseInt(result.port, 10);\n\t }\n\t last = i;\n\t }\n\t } else {\n\t result.host = url.substring(last, i);\n\t result.hostname = result.host.split(':')[0];\n\t result.port = result.host.split(':')[1];\n\t if (result.port) {\n\t result.port = parseInt(result.port, 10);\n\t }\n\t last = i;\n\t }\n\t\n\t i = url.indexOf('#', last);\n\t if (i === -1) {\n\t result.path = url.substring(last);\n\t } else {\n\t result.path = url.substring(last, i);\n\t result.hash = url.substring(i);\n\t }\n\t\n\t if (result.path) {\n\t var pathParts = result.path.split('?');\n\t result.pathname = pathParts[0];\n\t result.query = pathParts[1];\n\t result.search = result.query ? '?' + result.query : null;\n\t }\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t parse: parse\n\t};\n\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\tvar errorParser = __webpack_require__(20);\n\tvar logger = __webpack_require__(13);\n\t\n\tfunction handleItemWithError(item, options, callback) {\n\t item.data = item.data || {};\n\t if (item.err) {\n\t try {\n\t item.stackInfo = item.err._savedStackTrace || errorParser.parse(item.err);\n\t } catch (e)\n\t /* istanbul ignore next */\n\t {\n\t logger.error('Error while parsing the error object.', e);\n\t item.message = item.err.message || item.err.description || item.message || String(item.err);\n\t delete item.err;\n\t }\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction ensureItemHasSomethingToSay(item, options, callback) {\n\t if (!item.message && !item.stackInfo && !item.custom) {\n\t callback(new Error('No message, stack info, or custom data'), null);\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction addBaseInfo(item, options, callback) {\n\t var environment = (options.payload && options.payload.environment) || options.environment;\n\t item.data = _.extend(true, {}, item.data, {\n\t environment: environment,\n\t level: item.level,\n\t endpoint: options.endpoint,\n\t platform: 'browser',\n\t framework: 'browser-js',\n\t language: 'javascript',\n\t server: {},\n\t uuid: item.uuid,\n\t notifier: {\n\t name: 'rollbar-browser-js',\n\t version: options.version\n\t }\n\t });\n\t callback(null, item);\n\t}\n\t\n\tfunction addRequestInfo(window) {\n\t return function(item, options, callback) {\n\t if (!window || !window.location) {\n\t return callback(null, item);\n\t }\n\t var remoteString = '$remote_ip';\n\t if (!options.captureIp) {\n\t remoteString = null;\n\t } else if (options.captureIp !== true) {\n\t remoteString += '_anonymize';\n\t }\n\t _.set(item, 'data.request', {\n\t url: window.location.href,\n\t query_string: window.location.search,\n\t user_ip: remoteString\n\t });\n\t callback(null, item);\n\t };\n\t}\n\t\n\tfunction addClientInfo(window) {\n\t return function(item, options, callback) {\n\t if (!window) {\n\t return callback(null, item);\n\t }\n\t var nav = window.navigator || {};\n\t var scr = window.screen || {};\n\t _.set(item, 'data.client', {\n\t runtime_ms: item.timestamp - window._rollbarStartTime,\n\t timestamp: Math.round(item.timestamp / 1000),\n\t javascript: {\n\t browser: nav.userAgent,\n\t language: nav.language,\n\t cookie_enabled: nav.cookieEnabled,\n\t screen: {\n\t width: scr.width,\n\t height: scr.height\n\t }\n\t }\n\t });\n\t callback(null, item);\n\t };\n\t}\n\t\n\tfunction addPluginInfo(window) {\n\t return function(item, options, callback) {\n\t if (!window || !window.navigator) {\n\t return callback(null, item);\n\t }\n\t var plugins = [];\n\t var navPlugins = window.navigator.plugins || [];\n\t var cur;\n\t for (var i=0, l=navPlugins.length; i < l; ++i) {\n\t cur = navPlugins[i];\n\t plugins.push({name: cur.name, description: cur.description});\n\t }\n\t _.set(item, 'data.client.javascript.plugins', plugins);\n\t callback(null, item);\n\t };\n\t}\n\t\n\tfunction addBody(item, options, callback) {\n\t if (item.stackInfo) {\n\t addBodyTrace(item, options, callback);\n\t } else {\n\t addBodyMessage(item, options, callback);\n\t }\n\t}\n\t\n\tfunction addBodyMessage(item, options, callback) {\n\t var message = item.message;\n\t var custom = item.custom;\n\t\n\t if (!message) {\n\t if (custom) {\n\t var scrubFields = options.scrubFields;\n\t var messageResult = _.stringify(_.scrub(custom, scrubFields));\n\t message = messageResult.error || messageResult.value || '';\n\t } else {\n\t message = '';\n\t }\n\t }\n\t var result = {\n\t body: message\n\t };\n\t\n\t if (custom) {\n\t result.extra = _.extend(true, {}, custom);\n\t }\n\t\n\t _.set(item, 'data.body', {message: result});\n\t callback(null, item);\n\t}\n\t\n\t\n\tfunction addBodyTrace(item, options, callback) {\n\t var description = item.data.description;\n\t var stackInfo = item.stackInfo;\n\t var custom = item.custom;\n\t\n\t var guess = errorParser.guessErrorClass(stackInfo.message);\n\t var className = stackInfo.name || guess[0];\n\t var message = guess[1];\n\t var trace = {\n\t exception: {\n\t 'class': className,\n\t message: message\n\t }\n\t };\n\t\n\t if (description) {\n\t trace.exception.description = description;\n\t }\n\t\n\t // Transform a TraceKit stackInfo object into a Rollbar trace\n\t var stack = stackInfo.stack;\n\t if (stack && stack.length === 0 && item._unhandledStackInfo && item._unhandledStackInfo.stack) {\n\t stack = item._unhandledStackInfo.stack;\n\t }\n\t if (stack) {\n\t if (stack.length === 0) {\n\t trace.exception.stack = stackInfo.rawStack;\n\t trace.exception.raw = String(stackInfo.rawException);\n\t }\n\t var stackFrame;\n\t var frame;\n\t var code;\n\t var pre;\n\t var post;\n\t var contextLength;\n\t var i, mid;\n\t\n\t trace.frames = [];\n\t for (i = 0; i < stack.length; ++i) {\n\t stackFrame = stack[i];\n\t frame = {\n\t filename: stackFrame.url ? _.sanitizeUrl(stackFrame.url) : '(unknown)',\n\t lineno: stackFrame.line || null,\n\t method: (!stackFrame.func || stackFrame.func === '?') ? '[anonymous]' : stackFrame.func,\n\t colno: stackFrame.column\n\t };\n\t if (frame.method && frame.method.endsWith && frame.method.endsWith('_rollbar_wrapped')) {\n\t continue;\n\t }\n\t\n\t code = pre = post = null;\n\t contextLength = stackFrame.context ? stackFrame.context.length : 0;\n\t if (contextLength) {\n\t mid = Math.floor(contextLength / 2);\n\t pre = stackFrame.context.slice(0, mid);\n\t code = stackFrame.context[mid];\n\t post = stackFrame.context.slice(mid);\n\t }\n\t\n\t if (code) {\n\t frame.code = code;\n\t }\n\t\n\t if (pre || post) {\n\t frame.context = {};\n\t if (pre && pre.length) {\n\t frame.context.pre = pre;\n\t }\n\t if (post && post.length) {\n\t frame.context.post = post;\n\t }\n\t }\n\t\n\t if (stackFrame.args) {\n\t frame.args = stackFrame.args;\n\t }\n\t\n\t trace.frames.push(frame);\n\t }\n\t\n\t // NOTE(cory): reverse the frames since rollbar.com expects the most recent call last\n\t trace.frames.reverse();\n\t\n\t if (custom) {\n\t trace.extra = _.extend(true, {}, custom);\n\t }\n\t _.set(item, 'data.body', {trace: trace});\n\t callback(null, item);\n\t } else {\n\t item.message = className + ': ' + message;\n\t addBodyMessage(item, options, callback);\n\t }\n\t}\n\t\n\tfunction scrubPayload(item, options, callback) {\n\t var scrubFields = options.scrubFields;\n\t item.data = _.scrub(item.data, scrubFields);\n\t callback(null, item);\n\t}\n\t\n\tmodule.exports = {\n\t handleItemWithError: handleItemWithError,\n\t ensureItemHasSomethingToSay: ensureItemHasSomethingToSay,\n\t addBaseInfo: addBaseInfo,\n\t addRequestInfo: addRequestInfo,\n\t addClientInfo: addClientInfo,\n\t addPluginInfo: addPluginInfo,\n\t addBody: addBody,\n\t scrubPayload: scrubPayload\n\t};\n\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar ErrorStackParser = __webpack_require__(21);\n\t\n\tvar UNKNOWN_FUNCTION = '?';\n\tvar ERR_CLASS_REGEXP = new RegExp('^(([a-zA-Z0-9-_$ ]*): *)?(Uncaught )?([a-zA-Z0-9-_$ ]*): ');\n\t\n\tfunction guessFunctionName() {\n\t return UNKNOWN_FUNCTION;\n\t}\n\t\n\t\n\tfunction gatherContext() {\n\t return null;\n\t}\n\t\n\t\n\tfunction Frame(stackFrame) {\n\t var data = {};\n\t\n\t data._stackFrame = stackFrame;\n\t\n\t data.url = stackFrame.fileName;\n\t data.line = stackFrame.lineNumber;\n\t data.func = stackFrame.functionName;\n\t data.column = stackFrame.columnNumber;\n\t data.args = stackFrame.args;\n\t\n\t data.context = gatherContext(data.url, data.line);\n\t\n\t return data;\n\t}\n\t\n\t\n\tfunction Stack(exception) {\n\t function getStack() {\n\t var parserStack = [];\n\t var exc;\n\t\n\t if (!exception.stack) {\n\t try {\n\t throw exception;\n\t } catch (e) {\n\t exc = e;\n\t }\n\t } else {\n\t exc = exception;\n\t }\n\t\n\t try {\n\t parserStack = ErrorStackParser.parse(exc);\n\t } catch(e) {\n\t parserStack = [];\n\t }\n\t\n\t var stack = [];\n\t\n\t for (var i = 0; i < parserStack.length; i++) {\n\t stack.push(new Frame(parserStack[i]));\n\t }\n\t\n\t return stack;\n\t }\n\t\n\t return {\n\t stack: getStack(),\n\t message: exception.message,\n\t name: exception.name,\n\t rawStack: exception.stack,\n\t rawException: exception\n\t };\n\t}\n\t\n\t\n\tfunction parse(e) {\n\t return new Stack(e);\n\t}\n\t\n\t\n\tfunction guessErrorClass(errMsg) {\n\t if (!errMsg || !errMsg.match) {\n\t return ['Unknown error. There was no error message to display.', ''];\n\t }\n\t var errClassMatch = errMsg.match(ERR_CLASS_REGEXP);\n\t var errClass = '(unknown)';\n\t\n\t if (errClassMatch) {\n\t errClass = errClassMatch[errClassMatch.length - 1];\n\t errMsg = errMsg.replace((errClassMatch[errClassMatch.length - 2] || '') + errClass + ':', '');\n\t errMsg = errMsg.replace(/(^[\\s]+|[\\s]+$)/g, '');\n\t }\n\t return [errClass, errMsg];\n\t}\n\t\n\t\n\tmodule.exports = {\n\t guessFunctionName: guessFunctionName,\n\t guessErrorClass: guessErrorClass,\n\t gatherContext: gatherContext,\n\t parse: parse,\n\t Stack: Stack,\n\t Frame: Frame\n\t};\n\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (root, factory) {\n\t 'use strict';\n\t // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\t\n\t /* istanbul ignore next */\n\t if (true) {\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(22)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t } else if (typeof exports === 'object') {\n\t module.exports = factory(require('stackframe'));\n\t } else {\n\t root.ErrorStackParser = factory(root.StackFrame);\n\t }\n\t}(this, function ErrorStackParser(StackFrame) {\n\t 'use strict';\n\t\n\t var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n\t var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n\t var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\t\n\t function _map(array, fn, thisArg) {\n\t if (typeof Array.prototype.map === 'function') {\n\t return array.map(fn, thisArg);\n\t } else {\n\t var output = new Array(array.length);\n\t for (var i = 0; i < array.length; i++) {\n\t output[i] = fn.call(thisArg, array[i]);\n\t }\n\t return output;\n\t }\n\t }\n\t\n\t function _filter(array, fn, thisArg) {\n\t if (typeof Array.prototype.filter === 'function') {\n\t return array.filter(fn, thisArg);\n\t } else {\n\t var output = [];\n\t for (var i = 0; i < array.length; i++) {\n\t if (fn.call(thisArg, array[i])) {\n\t output.push(array[i]);\n\t }\n\t }\n\t return output;\n\t }\n\t }\n\t\n\t return {\n\t /**\n\t * Given an Error object, extract the most information from it.\n\t * @param error {Error}\n\t * @return Array[StackFrame]\n\t */\n\t parse: function ErrorStackParser$$parse(error) {\n\t if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n\t return this.parseOpera(error);\n\t } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n\t return this.parseV8OrIE(error);\n\t } else if (error.stack) {\n\t return this.parseFFOrSafari(error);\n\t } else {\n\t throw new Error('Cannot parse given Error object');\n\t }\n\t },\n\t\n\t /**\n\t * Separate line and column numbers from a URL-like string.\n\t * @param urlLike String\n\t * @return Array[String]\n\t */\n\t extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n\t // Fail-fast but return locations like \"(native)\"\n\t if (urlLike.indexOf(':') === -1) {\n\t return [urlLike];\n\t }\n\t\n\t var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n\t var lastNumber = locationParts.pop();\n\t var possibleNumber = locationParts[locationParts.length - 1];\n\t if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n\t var lineNumber = locationParts.pop();\n\t return [locationParts.join(':'), lineNumber, lastNumber];\n\t } else {\n\t return [locationParts.join(':'), lastNumber, undefined];\n\t }\n\t },\n\t\n\t parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n\t var filtered = _filter(error.stack.split('\\n'), function (line) {\n\t return !!line.match(CHROME_IE_STACK_REGEXP);\n\t }, this);\n\t\n\t return _map(filtered, function (line) {\n\t if (line.indexOf('(eval ') > -1) {\n\t // Throw away eval information until we implement stacktrace.js/stackframe#8\n\t line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n\t }\n\t var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n\t var locationParts = this.extractLocation(tokens.pop());\n\t var functionName = tokens.join(' ') || undefined;\n\t var fileName = locationParts[0] === 'eval' ? undefined : locationParts[0];\n\t\n\t return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n\t }, this);\n\t },\n\t\n\t parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n\t var filtered = _filter(error.stack.split('\\n'), function (line) {\n\t return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n\t }, this);\n\t\n\t return _map(filtered, function (line) {\n\t // Throw away eval information until we implement stacktrace.js/stackframe#8\n\t if (line.indexOf(' > eval') > -1) {\n\t line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n\t }\n\t\n\t if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n\t // Safari eval frames only have function names and nothing else\n\t return new StackFrame(line);\n\t } else {\n\t var tokens = line.split('@');\n\t var locationParts = this.extractLocation(tokens.pop());\n\t var functionName = tokens.shift() || undefined;\n\t return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n\t }\n\t }, this);\n\t },\n\t\n\t parseOpera: function ErrorStackParser$$parseOpera(e) {\n\t if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n\t e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n\t return this.parseOpera9(e);\n\t } else if (!e.stack) {\n\t return this.parseOpera10(e);\n\t } else {\n\t return this.parseOpera11(e);\n\t }\n\t },\n\t\n\t parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n\t var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n\t var lines = e.message.split('\\n');\n\t var result = [];\n\t\n\t for (var i = 2, len = lines.length; i < len; i += 2) {\n\t var match = lineRE.exec(lines[i]);\n\t if (match) {\n\t result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n\t }\n\t }\n\t\n\t return result;\n\t },\n\t\n\t parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n\t var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n\t var lines = e.stacktrace.split('\\n');\n\t var result = [];\n\t\n\t for (var i = 0, len = lines.length; i < len; i += 2) {\n\t var match = lineRE.exec(lines[i]);\n\t if (match) {\n\t result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n\t }\n\t }\n\t\n\t return result;\n\t },\n\t\n\t // Opera 10.65+ Error.stack very similar to FF/Safari\n\t parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n\t var filtered = _filter(error.stack.split('\\n'), function (line) {\n\t return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n\t !line.match(/^Error created at/);\n\t }, this);\n\t\n\t return _map(filtered, function (line) {\n\t var tokens = line.split('@');\n\t var locationParts = this.extractLocation(tokens.pop());\n\t var functionCall = (tokens.shift() || '');\n\t var functionName = functionCall\n\t .replace(//, '$2')\n\t .replace(/\\([^\\)]*\\)/g, '') || undefined;\n\t var argsRaw;\n\t if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n\t argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n\t }\n\t var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n\t return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n\t }, this);\n\t }\n\t };\n\t}));\n\t\n\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (root, factory) {\n\t 'use strict';\n\t // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\t\n\t /* istanbul ignore next */\n\t if (true) {\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t } else if (typeof exports === 'object') {\n\t module.exports = factory();\n\t } else {\n\t root.StackFrame = factory();\n\t }\n\t}(this, function () {\n\t 'use strict';\n\t function _isNumber(n) {\n\t return !isNaN(parseFloat(n)) && isFinite(n);\n\t }\n\t\n\t function StackFrame(functionName, args, fileName, lineNumber, columnNumber, source) {\n\t if (functionName !== undefined) {\n\t this.setFunctionName(functionName);\n\t }\n\t if (args !== undefined) {\n\t this.setArgs(args);\n\t }\n\t if (fileName !== undefined) {\n\t this.setFileName(fileName);\n\t }\n\t if (lineNumber !== undefined) {\n\t this.setLineNumber(lineNumber);\n\t }\n\t if (columnNumber !== undefined) {\n\t this.setColumnNumber(columnNumber);\n\t }\n\t if (source !== undefined) {\n\t this.setSource(source);\n\t }\n\t }\n\t\n\t StackFrame.prototype = {\n\t getFunctionName: function () {\n\t return this.functionName;\n\t },\n\t setFunctionName: function (v) {\n\t this.functionName = String(v);\n\t },\n\t\n\t getArgs: function () {\n\t return this.args;\n\t },\n\t setArgs: function (v) {\n\t if (Object.prototype.toString.call(v) !== '[object Array]') {\n\t throw new TypeError('Args must be an Array');\n\t }\n\t this.args = v;\n\t },\n\t\n\t // NOTE: Property name may be misleading as it includes the path,\n\t // but it somewhat mirrors V8's JavaScriptStackTraceApi\n\t // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's\n\t // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14\n\t getFileName: function () {\n\t return this.fileName;\n\t },\n\t setFileName: function (v) {\n\t this.fileName = String(v);\n\t },\n\t\n\t getLineNumber: function () {\n\t return this.lineNumber;\n\t },\n\t setLineNumber: function (v) {\n\t if (!_isNumber(v)) {\n\t throw new TypeError('Line Number must be a Number');\n\t }\n\t this.lineNumber = Number(v);\n\t },\n\t\n\t getColumnNumber: function () {\n\t return this.columnNumber;\n\t },\n\t setColumnNumber: function (v) {\n\t if (!_isNumber(v)) {\n\t throw new TypeError('Column Number must be a Number');\n\t }\n\t this.columnNumber = Number(v);\n\t },\n\t\n\t getSource: function () {\n\t return this.source;\n\t },\n\t setSource: function (v) {\n\t this.source = String(v);\n\t },\n\t\n\t toString: function() {\n\t var functionName = this.getFunctionName() || '{anonymous}';\n\t var args = '(' + (this.getArgs() || []).join(',') + ')';\n\t var fileName = this.getFileName() ? ('@' + this.getFileName()) : '';\n\t var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : '';\n\t var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : '';\n\t return functionName + args + fileName + lineNumber + columnNumber;\n\t }\n\t };\n\t\n\t return StackFrame;\n\t}));\n\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\t\n\tfunction itemToPayload(item, options, callback) {\n\t var payloadOptions = options.payload || {};\n\t if (payloadOptions.body) {\n\t delete payloadOptions.body;\n\t }\n\t\n\t var data = _.extend(true, {}, item.data, payloadOptions);\n\t if (item._isUncaught) {\n\t data._isUncaught = true;\n\t }\n\t if (item._originalArgs) {\n\t data._originalArgs = item._originalArgs;\n\t }\n\t callback(null, data);\n\t}\n\t\n\tfunction addTelemetryData(item, options, callback) {\n\t if (item.telemetryEvents) {\n\t _.set(item, 'data.body.telemetry', item.telemetryEvents);\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction addMessageWithError(item, options, callback) {\n\t if (!item.message) {\n\t callback(null, item);\n\t return;\n\t }\n\t var tracePath = 'data.body.trace_chain.0';\n\t var trace = _.get(item, tracePath);\n\t if (!trace) {\n\t tracePath = 'data.body.trace';\n\t trace = _.get(item, tracePath);\n\t }\n\t if (trace) {\n\t if (!(trace.exception && trace.exception.description)) {\n\t _.set(item, tracePath+'.exception.description', item.message);\n\t callback(null, item);\n\t return;\n\t }\n\t var extra = _.get(item, tracePath+'.extra') || {};\n\t var newExtra = _.extend(true, {}, extra, {message: item.message});\n\t _.set(item, tracePath+'.extra', newExtra);\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction userTransform(logger) {\n\t return function(item, options, callback) {\n\t var newItem = _.extend(true, {}, item);\n\t try {\n\t if (_.isFunction(options.transform)) {\n\t options.transform(newItem.data);\n\t }\n\t } catch (e) {\n\t options.transform = null;\n\t logger.error('Error while calling custom transform() function. Removing custom transform().', e);\n\t callback(null, item);\n\t return;\n\t }\n\t callback(null, newItem);\n\t }\n\t}\n\t\n\tfunction addConfigToPayload(item, options, callback) {\n\t if (!options.sendConfig) {\n\t return callback(null, item);\n\t }\n\t var configKey = '_rollbarConfig';\n\t var custom = _.get(item, 'data.custom') || {};\n\t custom[configKey] = options;\n\t item.data.custom = custom;\n\t callback(null, item);\n\t}\n\t\n\tmodule.exports = {\n\t itemToPayload: itemToPayload,\n\t addTelemetryData: addTelemetryData,\n\t addMessageWithError: addMessageWithError,\n\t userTransform: userTransform,\n\t addConfigToPayload: addConfigToPayload\n\t};\n\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\t\n\tfunction checkIgnore(item, settings) {\n\t if (_.get(settings, 'plugins.jquery.ignoreAjaxErrors')) {\n\t return !_.get(item, 'body.message.extra.isAjax');\n\t }\n\t return true;\n\t}\n\t\n\tmodule.exports = {\n\t checkIgnore: checkIgnore\n\t};\n\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\t\n\tfunction checkLevel(item, settings) {\n\t var level = item.level;\n\t var levelVal = _.LEVELS[level] || 0;\n\t var reportLevel = settings.reportLevel;\n\t var reportLevelVal = _.LEVELS[reportLevel] || 0;\n\t\n\t if (levelVal < reportLevelVal) {\n\t return false;\n\t }\n\t return true;\n\t}\n\t\n\tfunction userCheckIgnore(logger) {\n\t return function(item, settings) {\n\t var isUncaught = !!item._isUncaught;\n\t delete item._isUncaught;\n\t var args = item._originalArgs;\n\t delete item._originalArgs;\n\t try {\n\t if (_.isFunction(settings.onSendCallback)) {\n\t settings.onSendCallback(isUncaught, args, item);\n\t }\n\t } catch (e) {\n\t settings.onSendCallback = null;\n\t logger.error('Error while calling onSendCallback, removing', e);\n\t }\n\t try {\n\t if (_.isFunction(settings.checkIgnore) && settings.checkIgnore(isUncaught, args, item)) {\n\t return false;\n\t }\n\t } catch (e) {\n\t settings.checkIgnore = null;\n\t logger.error('Error while calling custom checkIgnore(), removing', e);\n\t }\n\t return true;\n\t }\n\t}\n\t\n\tfunction urlIsNotBlacklisted(logger) {\n\t return function(item, settings) {\n\t return !urlIsOnAList(item, settings, 'blacklist', logger);\n\t }\n\t}\n\t\n\tfunction urlIsWhitelisted(logger) {\n\t return function(item, settings) {\n\t return urlIsOnAList(item, settings, 'whitelist', logger);\n\t }\n\t}\n\t\n\tfunction urlIsOnAList(item, settings, whiteOrBlack, logger) {\n\t // whitelist is the default\n\t var black = false;\n\t if (whiteOrBlack === 'blacklist') {\n\t black = true;\n\t }\n\t var list, trace, frame, filename, frameLength, url, listLength, urlRegex;\n\t var i, j;\n\t\n\t try {\n\t list = black ? settings.hostBlackList : settings.hostWhiteList;\n\t listLength = list && list.length;\n\t trace = _.get(item, 'body.trace');\n\t\n\t // These two checks are important to come first as they are defaults\n\t // in case the list is missing or the trace is missing or not well-formed\n\t if (!list || listLength === 0) {\n\t return !black;\n\t }\n\t if (!trace || !trace.frames || trace.frames.length === 0) {\n\t return !black;\n\t }\n\t\n\t frameLength = trace.frames.length;\n\t for (i = 0; i < frameLength; i++) {\n\t frame = trace.frames[i];\n\t filename = frame.filename;\n\t\n\t if (!_.isType(filename, 'string')) {\n\t return !black;\n\t }\n\t\n\t for (j = 0; j < listLength; j++) {\n\t url = list[j];\n\t urlRegex = new RegExp(url);\n\t\n\t if (urlRegex.test(filename)) {\n\t return true;\n\t }\n\t }\n\t }\n\t } catch (e)\n\t /* istanbul ignore next */\n\t {\n\t if (black) {\n\t settings.hostBlackList = null;\n\t } else {\n\t settings.hostWhiteList = null;\n\t }\n\t var listName = black ? 'hostBlackList' : 'hostWhiteList';\n\t logger.error('Error while reading your configuration\\'s ' + listName + ' option. Removing custom ' + listName + '.', e);\n\t return !black;\n\t }\n\t return false;\n\t}\n\t\n\tfunction messageIsIgnored(logger) {\n\t return function(item, settings) {\n\t var exceptionMessage, i, ignoredMessages,\n\t len, messageIsIgnored, rIgnoredMessage,\n\t body, traceMessage, bodyMessage;\n\t\n\t try {\n\t messageIsIgnored = false;\n\t ignoredMessages = settings.ignoredMessages;\n\t\n\t if (!ignoredMessages || ignoredMessages.length === 0) {\n\t return true;\n\t }\n\t\n\t body = item.body;\n\t traceMessage = _.get(body, 'trace.exception.message');\n\t bodyMessage = _.get(body, 'message.body');\n\t\n\t exceptionMessage = traceMessage || bodyMessage;\n\t\n\t if (!exceptionMessage){\n\t return true;\n\t }\n\t\n\t len = ignoredMessages.length;\n\t for (i = 0; i < len; i++) {\n\t rIgnoredMessage = new RegExp(ignoredMessages[i], 'gi');\n\t messageIsIgnored = rIgnoredMessage.test(exceptionMessage);\n\t\n\t if (messageIsIgnored) {\n\t break;\n\t }\n\t }\n\t } catch(e)\n\t /* istanbul ignore next */\n\t {\n\t settings.ignoredMessages = null;\n\t logger.error('Error while reading your configuration\\'s ignoredMessages option. Removing custom ignoredMessages.');\n\t }\n\t\n\t return !messageIsIgnored;\n\t }\n\t}\n\t\n\tmodule.exports = {\n\t checkLevel: checkLevel,\n\t userCheckIgnore: userCheckIgnore,\n\t urlIsNotBlacklisted: urlIsNotBlacklisted,\n\t urlIsWhitelisted: urlIsWhitelisted,\n\t messageIsIgnored: messageIsIgnored\n\t};\n\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(6);\n\tvar urlparser = __webpack_require__(18);\n\tvar domUtil = __webpack_require__(27);\n\t\n\tvar defaults = {\n\t network: true,\n\t networkResponseHeaders: false,\n\t networkResponseBody: false,\n\t networkRequestBody: false,\n\t log: true,\n\t dom: true,\n\t navigation: true,\n\t connectivity: true\n\t};\n\t\n\tfunction replace(obj, name, replacement, replacements, type) {\n\t var orig = obj[name];\n\t obj[name] = replacement(orig);\n\t if (replacements) {\n\t replacements[type].push([obj, name, orig]);\n\t }\n\t}\n\t\n\tfunction restore(replacements, type) {\n\t var b;\n\t while (replacements[type].length) {\n\t b = replacements[type].shift();\n\t b[0][b[1]] = b[2];\n\t }\n\t}\n\t\n\tfunction Instrumenter(options, telemeter, rollbar, _window, _document) {\n\t var autoInstrument = options.autoInstrument;\n\t if (options.enabled === false || autoInstrument === false) {\n\t this.autoInstrument = {};\n\t } else {\n\t if (!_.isType(autoInstrument, 'object')) {\n\t autoInstrument = defaults;\n\t }\n\t this.autoInstrument = _.extend(true, {}, defaults, autoInstrument);\n\t }\n\t this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n\t this.telemetryScrubber = options.telemetryScrubber;\n\t this.telemeter = telemeter;\n\t this.rollbar = rollbar;\n\t this._window = _window || {};\n\t this._document = _document || {};\n\t this.replacements = {\n\t network: [],\n\t log: [],\n\t navigation: [],\n\t connectivity: []\n\t };\n\t this.eventRemovers = {\n\t dom: [],\n\t connectivity: []\n\t };\n\t\n\t this._location = this._window.location;\n\t this._lastHref = this._location && this._location.href;\n\t}\n\t\n\tInstrumenter.prototype.configure = function(options) {\n\t var autoInstrument = options.autoInstrument;\n\t var oldSettings = _.extend(true, {}, this.autoInstrument);\n\t if (options.enabled === false || autoInstrument === false) {\n\t this.autoInstrument = {};\n\t } else {\n\t if (!_.isType(autoInstrument, 'object')) {\n\t autoInstrument = defaults;\n\t }\n\t this.autoInstrument = _.extend(true, {}, defaults, autoInstrument);\n\t }\n\t this.instrument(oldSettings);\n\t if (options.scrubTelemetryInputs !== undefined) {\n\t this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n\t }\n\t if (options.telemetryScrubber !== undefined) {\n\t this.telemetryScrubber = options.telemetryScrubber;\n\t }\n\t};\n\t\n\tInstrumenter.prototype.instrument = function(oldSettings) {\n\t if (this.autoInstrument.network && !(oldSettings && oldSettings.network)) {\n\t this.instrumentNetwork();\n\t } else if (!this.autoInstrument.network && oldSettings && oldSettings.network) {\n\t this.deinstrumentNetwork();\n\t }\n\t\n\t if (this.autoInstrument.log && !(oldSettings && oldSettings.log)) {\n\t this.instrumentConsole();\n\t } else if (!this.autoInstrument.log && oldSettings && oldSettings.log) {\n\t this.deinstrumentConsole();\n\t }\n\t\n\t if (this.autoInstrument.dom && !(oldSettings && oldSettings.dom)) {\n\t this.instrumentDom();\n\t } else if (!this.autoInstrument.dom && oldSettings && oldSettings.dom) {\n\t this.deinstrumentDom();\n\t }\n\t\n\t if (this.autoInstrument.navigation && !(oldSettings && oldSettings.navigation)) {\n\t this.instrumentNavigation();\n\t } else if (!this.autoInstrument.navigation && oldSettings && oldSettings.navigation) {\n\t this.deinstrumentNavigation();\n\t }\n\t\n\t if (this.autoInstrument.connectivity && !(oldSettings && oldSettings.connectivity)) {\n\t this.instrumentConnectivity();\n\t } else if (!this.autoInstrument.connectivity && oldSettings && oldSettings.connectivity) {\n\t this.deinstrumentConnectivity();\n\t }\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentNetwork = function() {\n\t restore(this.replacements, 'network');\n\t};\n\t\n\tInstrumenter.prototype.instrumentNetwork = function() {\n\t var self = this;\n\t\n\t function wrapProp(prop, xhr) {\n\t if (prop in xhr && _.isFunction(xhr[prop])) {\n\t replace(xhr, prop, function(orig) {\n\t return self.rollbar.wrap(orig);\n\t });\n\t }\n\t }\n\t\n\t if ('XMLHttpRequest' in this._window) {\n\t var xhrp = this._window.XMLHttpRequest.prototype;\n\t replace(xhrp, 'open', function(orig) {\n\t return function(method, url) {\n\t if (_.isType(url, 'string')) {\n\t this.__rollbar_xhr = {\n\t method: method,\n\t url: url,\n\t status_code: null,\n\t start_time_ms: _.now(),\n\t end_time_ms: null\n\t };\n\t }\n\t return orig.apply(this, arguments);\n\t };\n\t }, this.replacements, 'network');\n\t\n\t replace(xhrp, 'send', function(orig) {\n\t /* eslint-disable no-unused-vars */\n\t return function(data) {\n\t /* eslint-enable no-unused-vars */\n\t var xhr = this;\n\t\n\t function onreadystatechangeHandler() {\n\t if (xhr.__rollbar_xhr && (xhr.readyState === 1 || xhr.readyState === 4)) {\n\t if (xhr.__rollbar_xhr.status_code === null) {\n\t xhr.__rollbar_xhr.status_code = 0;\n\t var requestData = null;\n\t if (self.autoInstrument.networkRequestBody) {\n\t requestData = data;\n\t }\n\t xhr.__rollbar_event = self.telemeter.captureNetwork(xhr.__rollbar_xhr, 'xhr', undefined, requestData);\n\t }\n\t if (xhr.readyState === 1) {\n\t xhr.__rollbar_xhr.start_time_ms = _.now();\n\t } else {\n\t xhr.__rollbar_xhr.end_time_ms = _.now();\n\t\n\t var headers = null;\n\t if (self.autoInstrument.networkResponseHeaders) {\n\t var headersConfig = self.autoInstrument.networkResponseHeaders;\n\t headers = {};\n\t try {\n\t var header, i;\n\t if (headersConfig === true) {\n\t var allHeaders = xhr.getAllResponseHeaders();\n\t if (allHeaders) {\n\t var arr = allHeaders.trim().split(/[\\r\\n]+/);\n\t var parts, value;\n\t for (i=0; i < arr.length; i++) {\n\t parts = arr[i].split(': ');\n\t header = parts.shift();\n\t value = parts.join(': ');\n\t headers[header] = value;\n\t }\n\t }\n\t } else {\n\t for (i=0; i < headersConfig.length; i++) {\n\t header = headersConfig[i];\n\t headers[header] = xhr.getResponseHeader(header);\n\t }\n\t }\n\t } catch (e) {\n\t /* we ignore the errors here that could come from different\n\t * browser issues with the xhr methods */\n\t }\n\t }\n\t var body = null;\n\t if (self.autoInstrument.networkResponseBody) {\n\t try {\n\t body = xhr.responseText;\n\t } catch (e) {\n\t /* ignore errors from reading responseText */\n\t }\n\t }\n\t var response = null;\n\t if (body || headers) {\n\t response = {};\n\t if (body) {\n\t response.body = body;\n\t }\n\t if (headers) {\n\t response.headers = headers;\n\t }\n\t }\n\t if (response) {\n\t xhr.__rollbar_xhr.response = response;\n\t }\n\t }\n\t try {\n\t var code = xhr.status;\n\t code = code === 1223 ? 204 : code;\n\t xhr.__rollbar_xhr.status_code = code;\n\t xhr.__rollbar_event.level = self.telemeter.levelFromStatus(code);\n\t } catch (e) {\n\t /* ignore possible exception from xhr.status */\n\t }\n\t }\n\t }\n\t\n\t wrapProp('onload', xhr);\n\t wrapProp('onerror', xhr);\n\t wrapProp('onprogress', xhr);\n\t\n\t if ('onreadystatechange' in xhr && _.isFunction(xhr.onreadystatechange)) {\n\t replace(xhr, 'onreadystatechange', function(orig) {\n\t return self.rollbar.wrap(orig, undefined, onreadystatechangeHandler);\n\t });\n\t } else {\n\t xhr.onreadystatechange = onreadystatechangeHandler;\n\t }\n\t return orig.apply(this, arguments);\n\t }\n\t }, this.replacements, 'network');\n\t }\n\t\n\t if ('fetch' in this._window) {\n\t replace(this._window, 'fetch', function(orig) {\n\t /* eslint-disable no-unused-vars */\n\t return function(fn, t) {\n\t /* eslint-enable no-unused-vars */\n\t var args = new Array(arguments.length);\n\t for (var i=0, len=args.length; i < len; i++) {\n\t args[i] = arguments[i];\n\t }\n\t var input = args[0];\n\t var method = 'GET';\n\t var url;\n\t if (_.isType(input, 'string')) {\n\t url = input;\n\t } else if (input) {\n\t url = input.url;\n\t if (input.method) {\n\t method = input.method;\n\t }\n\t }\n\t if (args[1] && args[1].method) {\n\t method = args[1].method;\n\t }\n\t var metadata = {\n\t method: method,\n\t url: url,\n\t status_code: null,\n\t start_time_ms: _.now(),\n\t end_time_ms: null\n\t };\n\t var requestData = null;\n\t if (self.autoInstrument.networkRequestBody) {\n\t if (args[1] && args[1].body) {\n\t requestData = args[1].body;\n\t } else if (args[0] && !_.isType(args[0], 'string') && args[0].body) {\n\t requestData = args[0].body;\n\t }\n\t }\n\t self.telemeter.captureNetwork(metadata, 'fetch', undefined, requestData);\n\t return orig.apply(this, args).then(function (resp) {\n\t metadata.end_time_ms = _.now();\n\t metadata.status_code = resp.status;\n\t var headers = null;\n\t if (self.autoInstrument.networkResponseHeaders) {\n\t var headersConfig = self.autoInstrument.networkResponseHeaders;\n\t headers = {};\n\t try {\n\t if (headersConfig === true) {\n\t // This is unsupported in IE so we can't do it\n\t /*\n\t var allHeaders = resp.headers.entries();\n\t for (var pair of allHeaders) {\n\t headers[pair[0]] = pair[1];\n\t }\n\t */\n\t } else {\n\t for (var i=0; i < headersConfig.length; i++) {\n\t var header = headersConfig[i];\n\t headers[header] = resp.headers.get(header);\n\t }\n\t }\n\t } catch (e) {\n\t /* ignore probable IE errors */\n\t }\n\t }\n\t var response = null;\n\t if (headers) {\n\t response = {\n\t headers: headers\n\t };\n\t }\n\t if (response) {\n\t metadata.response = response;\n\t }\n\t return resp;\n\t });\n\t };\n\t }, this.replacements, 'network');\n\t }\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentConsole = function() {\n\t if (!('console' in this._window && this._window.console.log)) {\n\t return;\n\t }\n\t var b;\n\t while (this.replacements['log'].length) {\n\t b = this.replacements['log'].shift();\n\t this._window.console[b[0]] = b[1];\n\t }\n\t};\n\t\n\tInstrumenter.prototype.instrumentConsole = function() {\n\t if (!('console' in this._window && this._window.console.log)) {\n\t return;\n\t }\n\t\n\t var self = this;\n\t var c = this._window.console;\n\t\n\t function wrapConsole(method) {\n\t var orig = c[method];\n\t var origConsole = c;\n\t var level = method === 'warn' ? 'warning' : method;\n\t c[method] = function() {\n\t var args = Array.prototype.slice.call(arguments);\n\t var message = _.formatArgsAsString(args);\n\t self.telemeter.captureLog(message, level);\n\t if (orig) {\n\t Function.prototype.apply.call(orig, origConsole, args);\n\t }\n\t };\n\t self.replacements['log'].push([method, orig]);\n\t }\n\t var methods = ['debug','info','warn','error','log'];\n\t for (var i=0, len=methods.length; i < len; i++) {\n\t wrapConsole(methods[i]);\n\t }\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentDom = function() {\n\t if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n\t return;\n\t }\n\t this.removeListeners('dom');\n\t};\n\t\n\tInstrumenter.prototype.instrumentDom = function() {\n\t if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n\t return;\n\t }\n\t var clickHandler = this.handleClick.bind(this);\n\t var blurHandler = this.handleBlur.bind(this);\n\t this.addListener('dom', this._window, 'click', 'onclick', clickHandler, true);\n\t this.addListener('dom', this._window, 'blur', 'onfocusout', blurHandler, true);\n\t};\n\t\n\tInstrumenter.prototype.handleClick = function(evt) {\n\t try {\n\t var e = domUtil.getElementFromEvent(evt, this._document);\n\t var hasTag = e && e.tagName;\n\t var anchorOrButton = domUtil.isDescribedElement(e, 'a') || domUtil.isDescribedElement(e, 'button');\n\t if (hasTag && (anchorOrButton || domUtil.isDescribedElement(e, 'input', ['button', 'submit']))) {\n\t this.captureDomEvent('click', e);\n\t } else if (domUtil.isDescribedElement(e, 'input', ['checkbox', 'radio'])) {\n\t this.captureDomEvent('input', e, e.value, e.checked);\n\t }\n\t } catch (exc) {\n\t // TODO: Not sure what to do here\n\t }\n\t};\n\t\n\tInstrumenter.prototype.handleBlur = function(evt) {\n\t try {\n\t var e = domUtil.getElementFromEvent(evt, this._document);\n\t if (e && e.tagName) {\n\t if (domUtil.isDescribedElement(e, 'textarea')) {\n\t this.captureDomEvent('input', e, e.value);\n\t } else if (domUtil.isDescribedElement(e, 'select') && e.options && e.options.length) {\n\t this.handleSelectInputChanged(e);\n\t } else if (domUtil.isDescribedElement(e, 'input') && !domUtil.isDescribedElement(e, 'input', ['button', 'submit', 'hidden', 'checkbox', 'radio'])) {\n\t this.captureDomEvent('input', e, e.value);\n\t }\n\t }\n\t } catch (exc) {\n\t // TODO: Not sure what to do here\n\t }\n\t};\n\t\n\tInstrumenter.prototype.handleSelectInputChanged = function(elem) {\n\t if (elem.multiple) {\n\t for (var i = 0; i < elem.options.length; i++) {\n\t if (elem.options[i].selected) {\n\t this.captureDomEvent('input', elem, elem.options[i].value);\n\t }\n\t }\n\t } else if (elem.selectedIndex >= 0 && elem.options[elem.selectedIndex]) {\n\t this.captureDomEvent('input', elem, elem.options[elem.selectedIndex].value);\n\t }\n\t};\n\t\n\tInstrumenter.prototype.captureDomEvent = function(subtype, element, value, isChecked) {\n\t if (value !== undefined) {\n\t if (this.scrubTelemetryInputs || (domUtil.getElementType(element) === 'password')) {\n\t value = '[scrubbed]';\n\t } else if (this.telemetryScrubber) {\n\t var description = domUtil.describeElement(element);\n\t if (this.telemetryScrubber(description)) {\n\t value = '[scrubbed]';\n\t }\n\t }\n\t }\n\t var elementString = domUtil.elementArrayToString(domUtil.treeToArray(element));\n\t this.telemeter.captureDom(subtype, elementString, value, isChecked);\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentNavigation = function() {\n\t var chrome = this._window.chrome;\n\t var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n\t // See https://github.com/angular/angular.js/pull/13945/files\n\t var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n\t if (!hasPushState) {\n\t return;\n\t }\n\t restore(this.replacements, 'navigation');\n\t};\n\t\n\tInstrumenter.prototype.instrumentNavigation = function() {\n\t var chrome = this._window.chrome;\n\t var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n\t // See https://github.com/angular/angular.js/pull/13945/files\n\t var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n\t if (!hasPushState) {\n\t return;\n\t }\n\t var self = this;\n\t replace(this._window, 'onpopstate', function(orig) {\n\t return function() {\n\t var current = self._location.href;\n\t self.handleUrlChange(self._lastHref, current);\n\t if (orig) {\n\t orig.apply(this, arguments);\n\t }\n\t };\n\t }, this.replacements, 'navigation');\n\t\n\t replace(this._window.history, 'pushState', function(orig) {\n\t return function() {\n\t var url = arguments.length > 2 ? arguments[2] : undefined;\n\t if (url) {\n\t self.handleUrlChange(self._lastHref, url + '');\n\t }\n\t return orig.apply(this, arguments);\n\t };\n\t }, this.replacements, 'navigation');\n\t};\n\t\n\tInstrumenter.prototype.handleUrlChange = function(from, to) {\n\t var parsedHref = urlparser.parse(this._location.href);\n\t var parsedTo = urlparser.parse(to);\n\t var parsedFrom = urlparser.parse(from);\n\t this._lastHref = to;\n\t if (parsedHref.protocol === parsedTo.protocol && parsedHref.host === parsedTo.host) {\n\t to = parsedTo.path + (parsedTo.hash || '');\n\t }\n\t if (parsedHref.protocol === parsedFrom.protocol && parsedHref.host === parsedFrom.host) {\n\t from = parsedFrom.path + (parsedFrom.hash || '');\n\t }\n\t this.telemeter.captureNavigation(from, to);\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentConnectivity = function() {\n\t if (!('addEventListener' in this._window || 'body' in this._document)) {\n\t return;\n\t }\n\t if (this._window.addEventListener) {\n\t this.removeListeners('connectivity');\n\t } else {\n\t restore(this.replacements, 'connectivity');\n\t }\n\t};\n\t\n\tInstrumenter.prototype.instrumentConnectivity = function() {\n\t if (!('addEventListener' in this._window || 'body' in this._document)) {\n\t return;\n\t }\n\t if (this._window.addEventListener) {\n\t this.addListener('connectivity', this._window, 'online', undefined, function() {\n\t this.telemeter.captureConnectivityChange('online');\n\t }.bind(this), true);\n\t this.addListener('connectivity', this._window, 'offline', undefined, function() {\n\t this.telemeter.captureConnectivityChange('offline');\n\t }.bind(this), true);\n\t } else {\n\t var self = this;\n\t replace(this._document.body, 'ononline', function(orig) {\n\t return function() {\n\t self.telemeter.captureConnectivityChange('online');\n\t if (orig) {\n\t orig.apply(this, arguments);\n\t }\n\t }\n\t }, this.replacements, 'connectivity');\n\t replace(this._document.body, 'onoffline', function(orig) {\n\t return function() {\n\t self.telemeter.captureConnectivityChange('offline');\n\t if (orig) {\n\t orig.apply(this, arguments);\n\t }\n\t }\n\t }, this.replacements, 'connectivity');\n\t }\n\t};\n\t\n\tInstrumenter.prototype.addListener = function(section, obj, type, altType, handler, capture) {\n\t if (obj.addEventListener) {\n\t obj.addEventListener(type, handler, capture);\n\t this.eventRemovers[section].push(function() {\n\t obj.removeEventListener(type, handler, capture);\n\t });\n\t } else if (altType) {\n\t obj.attachEvent(altType, handler);\n\t this.eventRemovers[section].push(function() {\n\t obj.detachEvent(altType, handler);\n\t });\n\t }\n\t};\n\t\n\tInstrumenter.prototype.removeListeners = function(section) {\n\t var r;\n\t while (this.eventRemovers[section].length) {\n\t r = this.eventRemovers[section].shift();\n\t r();\n\t }\n\t};\n\t\n\tmodule.exports = Instrumenter;\n\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tfunction getElementType(e) {\n\t return (e.getAttribute('type') || '').toLowerCase();\n\t}\n\t\n\tfunction isDescribedElement(element, type, subtypes) {\n\t if (element.tagName.toLowerCase() !== type.toLowerCase()) {\n\t return false;\n\t }\n\t if (!subtypes) {\n\t return true;\n\t }\n\t element = getElementType(element);\n\t for (var i = 0; i < subtypes.length; i++) {\n\t if (subtypes[i] === element) {\n\t return true;\n\t }\n\t }\n\t return false;\n\t}\n\t\n\tfunction getElementFromEvent(evt, doc) {\n\t if (evt.target) {\n\t return evt.target;\n\t }\n\t if (doc && doc.elementFromPoint) {\n\t return doc.elementFromPoint(evt.clientX, evt.clientY);\n\t }\n\t return undefined;\n\t}\n\t\n\tfunction treeToArray(elem) {\n\t var MAX_HEIGHT = 5;\n\t var out = [];\n\t var nextDescription;\n\t for (var height = 0; elem && height < MAX_HEIGHT; height++) {\n\t nextDescription = describeElement(elem);\n\t if (nextDescription.tagName === 'html') {\n\t break;\n\t }\n\t out.unshift(nextDescription);\n\t elem = elem.parentNode;\n\t }\n\t return out;\n\t}\n\t\n\tfunction elementArrayToString(a) {\n\t var MAX_LENGTH = 80;\n\t var separator = ' > ', separatorLength = separator.length;\n\t var out = [], len = 0, nextStr, totalLength;\n\t\n\t for (var i = a.length - 1; i >= 0; i--) {\n\t nextStr = descriptionToString(a[i]);\n\t totalLength = len + (out.length * separatorLength) + nextStr.length;\n\t if (i < a.length - 1 && totalLength >= MAX_LENGTH + 3) {\n\t out.unshift('...');\n\t break;\n\t }\n\t out.unshift(nextStr);\n\t len += nextStr.length;\n\t }\n\t return out.join(separator);\n\t}\n\t\n\tfunction descriptionToString(desc) {\n\t if (!desc || !desc.tagName) {\n\t return '';\n\t }\n\t var out = [desc.tagName];\n\t if (desc.id) {\n\t out.push('#' + desc.id);\n\t }\n\t if (desc.classes) {\n\t out.push('.' + desc.classes.join('.'));\n\t }\n\t for (var i = 0; i < desc.attributes.length; i++) {\n\t out.push('[' + desc.attributes[i].key + '=\"' + desc.attributes[i].value + '\"]');\n\t }\n\t\n\t return out.join('');\n\t}\n\t\n\t/**\n\t * Input: a dom element\n\t * Output: null if tagName is falsey or input is falsey, else\n\t * {\n\t * tagName: String,\n\t * id: String | undefined,\n\t * classes: [String] | undefined,\n\t * attributes: [\n\t * {\n\t * key: OneOf(type, name, title, alt),\n\t * value: String\n\t * }\n\t * ]\n\t * }\n\t */\n\tfunction describeElement(elem) {\n\t if (!elem || !elem.tagName) {\n\t return null;\n\t }\n\t var out = {}, className, key, attr, i;\n\t out.tagName = elem.tagName.toLowerCase();\n\t if (elem.id) {\n\t out.id = elem.id;\n\t }\n\t className = elem.className;\n\t if (className && (typeof className === 'string')) {\n\t out.classes = className.split(/\\s+/);\n\t }\n\t var attributes = ['type', 'name', 'title', 'alt'];\n\t out.attributes = [];\n\t for (i = 0; i < attributes.length; i++) {\n\t key = attributes[i];\n\t attr = elem.getAttribute(key);\n\t if (attr) {\n\t out.attributes.push({key: key, value: attr});\n\t }\n\t }\n\t return out;\n\t}\n\t\n\tmodule.exports = {\n\t describeElement: describeElement,\n\t descriptionToString: descriptionToString,\n\t elementArrayToString: elementArrayToString,\n\t treeToArray: treeToArray,\n\t getElementFromEvent: getElementFromEvent,\n\t isDescribedElement: isDescribedElement,\n\t getElementType: getElementType\n\t};\n\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// rollbar.umd.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 7216ae5c8b1973ecd1a0","'use strict';\n\nvar rollbar = require('../rollbar');\n\nvar options = (typeof window !== 'undefined') && window._rollbarConfig;\nvar alias = options && options.globalAlias || 'Rollbar';\nvar shimRunning = (typeof window !== 'undefined') && window[alias] && typeof window[alias].shimId === 'function' && window[alias].shimId() !== undefined;\n\nif ((typeof window !== 'undefined') && !window._rollbarStartTime) {\n window._rollbarStartTime = (new Date()).getTime();\n}\n\nif (!shimRunning && options) {\n var Rollbar = new rollbar(options);\n window[alias] = Rollbar;\n} else if (typeof window !== 'undefined') {\n window.rollbar = rollbar;\n window._rollbarDidLoad = true;\n} else if (typeof self !== 'undefined') {\n self.rollbar = rollbar;\n self._rollbarDidLoad = true;\n}\n\nmodule.exports = rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/bundles/rollbar.js\n// module id = 1\n// module chunks = 0","'use strict';\n\nvar Client = require('../rollbar');\nvar _ = require('../utility');\nvar API = require('../api');\nvar logger = require('./logger');\nvar globals = require('./globalSetup');\n\nvar transport = require('./transport');\nvar urllib = require('./url');\n\nvar transforms = require('./transforms');\nvar sharedTransforms = require('../transforms');\nvar predicates = require('./predicates');\nvar sharedPredicates = require('../predicates');\nvar errorParser = require('./errorParser');\nvar Instrumenter = require('./telemetry');\n\nfunction Rollbar(options, client) {\n this.options = _.extend({}, defaultOptions, options);\n var api = new API(this.options, transport, urllib);\n this.client = client || new Client(this.options, api, logger, 'browser');\n\n var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n var gDocument = (typeof document != 'undefined') && document;\n addTransformsToNotifier(this.client.notifier);\n addPredicatesToQueue(this.client.queue);\n if (this.options.captureUncaught || this.options.handleUncaughtExceptions) {\n globals.captureUncaughtExceptions(gWindow, this);\n globals.wrapGlobals(gWindow, this);\n }\n if (this.options.captureUnhandledRejections || this.options.handleUnhandledRejections) {\n globals.captureUnhandledRejections(gWindow, this);\n }\n\n this.instrumenter = new Instrumenter(this.options, this.client.telemeter, this, gWindow, gDocument);\n this.instrumenter.instrument();\n}\n\nvar _instance = null;\nRollbar.init = function(options, client) {\n if (_instance) {\n return _instance.global(options).configure(options);\n }\n _instance = new Rollbar(options, client);\n return _instance;\n};\n\nfunction handleUninitialized(maybeCallback) {\n var message = 'Rollbar is not initialized';\n logger.error(message);\n if (maybeCallback) {\n maybeCallback(new Error(message));\n }\n}\n\nRollbar.prototype.global = function(options) {\n this.client.global(options);\n return this;\n};\nRollbar.global = function(options) {\n if (_instance) {\n return _instance.global(options);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.extend({}, oldOptions, options, payload);\n this.client.configure(options, payloadData);\n this.instrumenter.configure(options);\n return this;\n};\nRollbar.configure = function(options, payloadData) {\n if (_instance) {\n return _instance.configure(options, payloadData);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.lastError = function() {\n return this.client.lastError;\n};\nRollbar.lastError = function() {\n if (_instance) {\n return _instance.lastError();\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.log = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.log(item);\n return {uuid: uuid};\n};\nRollbar.log = function() {\n if (_instance) {\n return _instance.log.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.debug = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.debug(item);\n return {uuid: uuid};\n};\nRollbar.debug = function() {\n if (_instance) {\n return _instance.debug.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.info = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.info(item);\n return {uuid: uuid};\n};\nRollbar.info = function() {\n if (_instance) {\n return _instance.info.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warn = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warn(item);\n return {uuid: uuid};\n};\nRollbar.warn = function() {\n if (_instance) {\n return _instance.warn.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warning = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warning(item);\n return {uuid: uuid};\n};\nRollbar.warning = function() {\n if (_instance) {\n return _instance.warning.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.error = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.error(item);\n return {uuid: uuid};\n};\nRollbar.error = function() {\n if (_instance) {\n return _instance.error.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.critical = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.critical(item);\n return {uuid: uuid};\n};\nRollbar.critical = function() {\n if (_instance) {\n return _instance.critical.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.handleUncaughtException = function(message, url, lineno, colno, error, context) {\n var item;\n var stackInfo = _.makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n 'onerror',\n 'uncaught exception',\n errorParser\n );\n if (_.isError(error)) {\n item = this._createItem([message, error, context]);\n item._unhandledStackInfo = stackInfo;\n } else if (_.isError(url)) {\n item = this._createItem([message, url, context]);\n item._unhandledStackInfo = stackInfo;\n } else {\n item = this._createItem([message, context]);\n item.stackInfo = stackInfo;\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n this.client.log(item);\n};\n\nRollbar.prototype.handleUnhandledRejection = function(reason, promise) {\n var message = 'unhandled rejection was null or undefined!';\n message = reason ? (reason.message || String(reason)) : message;\n var context = (reason && reason._rollbarContext) || (promise && promise._rollbarContext);\n\n var item;\n if (_.isError(reason)) {\n item = this._createItem([message, reason, context]);\n } else {\n item = this._createItem([message, reason, context]);\n item.stackInfo = _.makeUnhandledStackInfo(\n message,\n '',\n 0,\n 0,\n null,\n 'unhandledrejection',\n '',\n errorParser\n );\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n item._originalArgs = item._originalArgs || [];\n item._originalArgs.push(promise);\n this.client.log(item);\n};\n\nRollbar.prototype.wrap = function(f, context, _before) {\n try {\n var ctxFn;\n if(_.isFunction(context)) {\n ctxFn = context;\n } else {\n ctxFn = function() { return context || {}; };\n }\n\n if (!_.isFunction(f)) {\n return f;\n }\n\n if (f._isWrap) {\n return f;\n }\n\n if (!f._rollbar_wrapped) {\n f._rollbar_wrapped = function () {\n if (_before && _.isFunction(_before)) {\n _before.apply(this, arguments);\n }\n try {\n return f.apply(this, arguments);\n } catch(exc) {\n var e = exc;\n if (e) {\n if (_.isType(e, 'string')) {\n e = new String(e);\n }\n e._rollbarContext = ctxFn() || {};\n e._rollbarContext._wrappedSource = f.toString();\n\n window._rollbarWrappedError = e;\n }\n throw e;\n }\n };\n\n f._rollbar_wrapped._isWrap = true;\n\n if (f.hasOwnProperty) {\n for (var prop in f) {\n if (f.hasOwnProperty(prop)) {\n f._rollbar_wrapped[prop] = f[prop];\n }\n }\n }\n }\n\n return f._rollbar_wrapped;\n } catch (e) {\n // Return the original function if the wrap fails.\n return f;\n }\n};\nRollbar.wrap = function(f, context) {\n if (_instance) {\n return _instance.wrap(f, context);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.captureEvent = function(metadata, level) {\n return this.client.captureEvent(metadata, level);\n};\nRollbar.captureEvent = function(metadata, level) {\n if (_instance) {\n return _instance.captureEvent(metadata, level);\n } else {\n handleUninitialized();\n }\n};\n\n// The following two methods are used internally and are not meant for public use\nRollbar.prototype.captureDomContentLoaded = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureLoad(ts);\n};\n\n/* Internal */\n\nfunction addTransformsToNotifier(notifier) {\n notifier\n .addTransform(transforms.handleItemWithError)\n .addTransform(transforms.ensureItemHasSomethingToSay)\n .addTransform(transforms.addBaseInfo)\n .addTransform(transforms.addRequestInfo(window))\n .addTransform(transforms.addClientInfo(window))\n .addTransform(transforms.addPluginInfo(window))\n .addTransform(transforms.addBody)\n .addTransform(sharedTransforms.addMessageWithError)\n .addTransform(sharedTransforms.addTelemetryData)\n .addTransform(sharedTransforms.addConfigToPayload)\n .addTransform(transforms.scrubPayload)\n .addTransform(sharedTransforms.userTransform(logger))\n .addTransform(sharedTransforms.itemToPayload);\n}\n\nfunction addPredicatesToQueue(queue) {\n queue\n .addPredicate(sharedPredicates.checkLevel)\n .addPredicate(predicates.checkIgnore)\n .addPredicate(sharedPredicates.userCheckIgnore(logger))\n .addPredicate(sharedPredicates.urlIsNotBlacklisted(logger))\n .addPredicate(sharedPredicates.urlIsWhitelisted(logger))\n .addPredicate(sharedPredicates.messageIsIgnored(logger));\n}\n\nRollbar.prototype._createItem = function(args) {\n return _.createItem(args, logger, this);\n};\n\nfunction _getFirstFunction(args) {\n for (var i = 0, len = args.length; i < len; ++i) {\n if (_.isFunction(args[i])) {\n return args[i];\n }\n }\n return undefined;\n}\n\n/* global __NOTIFIER_VERSION__:false */\n/* global __DEFAULT_BROWSER_SCRUB_FIELDS__:false */\n/* global __DEFAULT_LOG_LEVEL__:false */\n/* global __DEFAULT_REPORT_LEVEL__:false */\n/* global __DEFAULT_UNCAUGHT_ERROR_LEVEL:false */\n/* global __DEFAULT_ENDPOINT__:false */\n\nvar defaultOptions = {\n version: __NOTIFIER_VERSION__,\n scrubFields: __DEFAULT_BROWSER_SCRUB_FIELDS__,\n logLevel: __DEFAULT_LOG_LEVEL__,\n reportLevel: __DEFAULT_REPORT_LEVEL__,\n uncaughtErrorLevel: __DEFAULT_UNCAUGHT_ERROR_LEVEL,\n endpoint: __DEFAULT_ENDPOINT__,\n verbose: false,\n enabled: true,\n sendConfig: false,\n includeItemsInTelemetry: true,\n captureIp: true\n};\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/rollbar.js\n// module id = 2\n// module chunks = 0","'use strict';\n\nvar RateLimiter = require('./rateLimiter');\nvar Queue = require('./queue');\nvar Notifier = require('./notifier');\nvar Telemeter = require('./telemetry');\nvar _ = require('./utility');\n\n/*\n * Rollbar - the interface to Rollbar\n *\n * @param options\n * @param api\n * @param logger\n */\nfunction Rollbar(options, api, logger, platform) {\n this.options = _.extend(true, {}, options);\n this.logger = logger;\n Rollbar.rateLimiter.configureGlobal(this.options);\n Rollbar.rateLimiter.setPlatformOptions(platform, this.options);\n this.queue = new Queue(Rollbar.rateLimiter, api, logger, this.options);\n this.notifier = new Notifier(this.queue, this.options);\n this.telemeter = new Telemeter(this.options);\n this.lastError = null;\n}\n\nvar defaultOptions = {\n maxItems: 0,\n itemsPerMinute: 60\n};\n\nRollbar.rateLimiter = new RateLimiter(defaultOptions);\n\nRollbar.prototype.global = function(options) {\n Rollbar.rateLimiter.configureGlobal(options);\n return this;\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n this.notifier && this.notifier.configure(options);\n this.telemeter && this.telemeter.configure(options);\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.extend(true, {}, oldOptions, options, payload);\n this.global(this.options);\n return this;\n};\n\nRollbar.prototype.log = function(item) {\n var level = this._defaultLogLevel();\n return this._log(level, item);\n};\n\nRollbar.prototype.debug = function(item) {\n this._log('debug', item);\n};\n\nRollbar.prototype.info = function(item) {\n this._log('info', item);\n};\n\nRollbar.prototype.warn = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.warning = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.error = function(item) {\n this._log('error', item);\n};\n\nRollbar.prototype.critical = function(item) {\n this._log('critical', item);\n};\n\nRollbar.prototype.wait = function(callback) {\n this.queue.wait(callback);\n};\n\nRollbar.prototype.captureEvent = function(metadata, level) {\n return this.telemeter.captureEvent(metadata, level);\n};\n\nRollbar.prototype.captureDomContentLoaded = function(ts) {\n return this.telemeter.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(ts) {\n return this.telemeter.captureLoad(ts);\n};\n\n/* Internal */\n\nRollbar.prototype._log = function(defaultLevel, item) {\n if (this._sameAsLastError(item)) {\n if (item.callback) {\n item.callback();\n }\n return;\n }\n try {\n var callback = null;\n if (item.callback) {\n callback = item.callback;\n delete item.callback;\n }\n item.level = item.level || defaultLevel;\n this.telemeter._captureRollbarItem(item);\n item.telemetryEvents = this.telemeter.copyEvents();\n this.notifier.log(item, callback);\n } catch (e) {\n this.logger.error(e)\n }\n};\n\nRollbar.prototype._defaultLogLevel = function() {\n return this.options.logLevel || 'debug';\n};\n\nRollbar.prototype._sameAsLastError = function(item) {\n if (this.lastError && this.lastError === item.err) {\n return true;\n }\n this.lastError = item.err;\n return false;\n};\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rollbar.js\n// module id = 3\n// module chunks = 0","'use strict';\n\n/*\n * RateLimiter - an object that encapsulates the logic for counting items sent to Rollbar\n *\n * @param options - the same options that are accepted by configureGlobal offered as a convenience\n */\nfunction RateLimiter(options) {\n this.startTime = (new Date()).getTime();\n this.counter = 0;\n this.perMinCounter = 0;\n this.platform = null;\n this.platformOptions = {};\n this.configureGlobal(options);\n}\n\nRateLimiter.globalSettings = {\n startTime: (new Date()).getTime(),\n maxItems: undefined,\n itemsPerMinute: undefined\n};\n\n/*\n * configureGlobal - set the global rate limiter options\n *\n * @param options - Only the following values are recognized:\n * startTime: a timestamp of the form returned by (new Date()).getTime()\n * maxItems: the maximum items\n * itemsPerMinute: the max number of items to send in a given minute\n */\nRateLimiter.prototype.configureGlobal = function(options) {\n if (options.startTime !== undefined) {\n RateLimiter.globalSettings.startTime = options.startTime;\n }\n if (options.maxItems !== undefined) {\n RateLimiter.globalSettings.maxItems = options.maxItems;\n }\n if (options.itemsPerMinute !== undefined) {\n RateLimiter.globalSettings.itemsPerMinute = options.itemsPerMinute;\n }\n};\n\n/*\n * shouldSend - determine if we should send a given item based on rate limit settings\n *\n * @param item - the item we are about to send\n * @returns An object with the following structure:\n * error: (Error|null)\n * shouldSend: bool\n * payload: (Object|null)\n * If shouldSend is false, the item passed as a parameter should not be sent to Rollbar, and\n * exactly one of error or payload will be non-null. If error is non-null, the returned Error will\n * describe the situation, but it means that we were already over a rate limit (either globally or\n * per minute) when this item was checked. If error is null, and therefore payload is non-null, it\n * means this item put us over the global rate limit and the payload should be sent to Rollbar in\n * place of the passed in item.\n */\nRateLimiter.prototype.shouldSend = function(item, now) {\n now = now || (new Date()).getTime();\n if (now - this.startTime >= 60000) {\n this.startTime = now;\n this.perMinCounter = 0;\n }\n\n var globalRateLimit = RateLimiter.globalSettings.maxItems;\n var globalRateLimitPerMin = RateLimiter.globalSettings.itemsPerMinute;\n\n if (checkRate(item, globalRateLimit, this.counter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimit + ' max items reached', false);\n } else if (checkRate(item, globalRateLimitPerMin, this.perMinCounter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimitPerMin + ' items per minute reached', false);\n }\n this.counter++;\n this.perMinCounter++;\n\n var shouldSend = !checkRate(item, globalRateLimit, this.counter);\n var perMinute = shouldSend;\n shouldSend = shouldSend && !checkRate(item, globalRateLimitPerMin, this.perMinCounter);\n return shouldSendValue(this.platform, this.platformOptions, null, shouldSend, globalRateLimit, globalRateLimitPerMin, perMinute);\n};\n\nRateLimiter.prototype.setPlatformOptions = function(platform, options) {\n this.platform = platform;\n this.platformOptions = options;\n};\n\n/* Helpers */\n\nfunction checkRate(item, limit, counter) {\n return !item.ignoreRateLimit && limit >= 1 && counter > limit;\n}\n\nfunction shouldSendValue(platform, options, error, shouldSend, globalRateLimit, limitPerMin, perMinute) {\n var payload = null;\n if (error) {\n error = new Error(error);\n }\n if (!error && !shouldSend) {\n payload = rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute);\n }\n return {error: error, shouldSend: shouldSend, payload: payload};\n}\n\nfunction rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute) {\n var environment = options.environment || (options.payload && options.payload.environment);\n var msg;\n if (perMinute) {\n msg = 'item per minute limit reached, ignoring errors until timeout';\n } else {\n msg = 'maxItems has been hit, ignoring errors until reset.';\n }\n var item = {\n body: {\n message: {\n body: msg,\n extra: {\n maxItems: globalRateLimit,\n itemsPerMinute: limitPerMin\n }\n }\n },\n language: 'javascript',\n environment: environment,\n notifier: {\n version: (options.notifier && options.notifier.version) || options.version\n }\n };\n if (platform === 'browser') {\n item.platform = 'browser';\n item.framework = 'browser-js';\n item.notifier.name = 'rollbar-browser-js';\n } else if (platform === 'server') {\n item.framework = options.framework || 'node-js';\n item.notifier.name = options.notifier.name;\n } else if (platform === 'react-native') {\n item.framework = options.framework || 'react-native';\n item.notifier.name = options.notifier.name;\n }\n return item;\n}\n\nmodule.exports = RateLimiter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rateLimiter.js\n// module id = 4\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Queue - an object which handles which handles a queue of items to be sent to Rollbar.\n * This object handles rate limiting via a passed in rate limiter, retries based on connection\n * errors, and filtering of items based on a set of configurable predicates. The communication to\n * the backend is performed via a given API object.\n *\n * @param rateLimiter - An object which conforms to the interface\n * rateLimiter.shouldSend(item) -> bool\n * @param api - An object which conforms to the interface\n * api.postItem(payload, function(err, response))\n * @param logger - An object used to log verbose messages if desired\n * @param options - see Queue.prototype.configure\n */\nfunction Queue(rateLimiter, api, logger, options) {\n this.rateLimiter = rateLimiter;\n this.api = api;\n this.logger = logger;\n this.options = options;\n this.predicates = [];\n this.pendingItems = [];\n this.pendingRequests = [];\n this.retryQueue = [];\n this.retryHandle = null;\n this.waitCallback = null;\n this.waitIntervalID = null;\n}\n\n/*\n * configure - updates the options this queue uses\n *\n * @param options\n */\nQueue.prototype.configure = function(options) {\n this.api && this.api.configure(options);\n var oldOptions = this.options;\n this.options = _.extend(true, {}, oldOptions, options);\n return this;\n};\n\n/*\n * addPredicate - adds a predicate to the end of the list of predicates for this queue\n *\n * @param predicate - function(item, options) -> (bool|{err: Error})\n * Returning true means that this predicate passes and the item is okay to go on the queue\n * Returning false means do not add the item to the queue, but it is not an error\n * Returning {err: Error} means do not add the item to the queue, and the given error explains why\n * Returning {err: undefined} is equivalent to returning true but don't do that\n */\nQueue.prototype.addPredicate = function(predicate) {\n if (_.isFunction(predicate)) {\n this.predicates.push(predicate);\n }\n return this;\n};\n\nQueue.prototype.addPendingItem = function(item) {\n this.pendingItems.push(item);\n};\n\nQueue.prototype.removePendingItem = function(item) {\n var idx = this.pendingItems.indexOf(item);\n if (idx !== -1) {\n this.pendingItems.splice(idx, 1);\n }\n};\n\n/*\n * addItem - Send an item to the Rollbar API if all of the predicates are satisfied\n *\n * @param item - The payload to send to the backend\n * @param callback - function(error, repsonse) which will be called with the response from the API\n * in the case of a success, otherwise response will be null and error will have a value. If both\n * error and response are null then the item was stopped by a predicate which did not consider this\n * to be an error condition, but nonetheless did not send the item to the API.\n * @param originalError - The original error before any transformations that is to be logged if any\n */\nQueue.prototype.addItem = function(item, callback, originalError, originalItem) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() { return; };\n }\n var predicateResult = this._applyPredicates(item);\n if (predicateResult.stop) {\n this.removePendingItem(originalItem);\n callback(predicateResult.err);\n return;\n }\n this._maybeLog(item, originalError);\n this.removePendingItem(originalItem);\n this.pendingRequests.push(item);\n try {\n this._makeApiRequest(item, function(err, resp) {\n this._dequeuePendingRequest(item);\n callback(err, resp);\n }.bind(this));\n } catch (e) {\n this._dequeuePendingRequest(item);\n callback(e);\n }\n};\n\n/*\n * wait - Stop any further errors from being added to the queue, and get called back when all items\n * currently processing have finished sending to the backend.\n *\n * @param callback - function() called when all pending items have been sent\n */\nQueue.prototype.wait = function(callback) {\n if (!_.isFunction(callback)) {\n return;\n }\n this.waitCallback = callback;\n if (this._maybeCallWait()) {\n return;\n }\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitIntervalID = setInterval(function() {\n this._maybeCallWait();\n }.bind(this), 500);\n};\n\n/* _applyPredicates - Sequentially applies the predicates that have been added to the queue to the\n * given item with the currently configured options.\n *\n * @param item - An item in the queue\n * @returns {stop: bool, err: (Error|null)} - stop being true means do not add item to the queue,\n * the error value should be passed up to a callbak if we are stopping.\n */\nQueue.prototype._applyPredicates = function(item) {\n var p = null;\n for (var i = 0, len = this.predicates.length; i < len; i++) {\n p = this.predicates[i](item, this.options);\n if (!p || p.err !== undefined) {\n return {stop: true, err: p.err};\n }\n }\n return {stop: false, err: null};\n};\n\n/*\n * _makeApiRequest - Send an item to Rollbar, callback when done, if there is an error make an\n * effort to retry if we are configured to do so.\n *\n * @param item - an item ready to send to the backend\n * @param callback - function(err, response)\n */\nQueue.prototype._makeApiRequest = function(item, callback) {\n var rateLimitResponse = this.rateLimiter.shouldSend(item);\n if (rateLimitResponse.shouldSend) {\n this.api.postItem(item, function(err, resp) {\n if (err) {\n this._maybeRetry(err, item, callback);\n } else {\n callback(err, resp);\n }\n }.bind(this));\n } else if (rateLimitResponse.error) {\n callback(rateLimitResponse.error);\n } else {\n this.api.postItem(rateLimitResponse.payload, callback);\n }\n};\n\n// These are errors basically mean there is no internet connection\nvar RETRIABLE_ERRORS = ['ECONNRESET', 'ENOTFOUND', 'ESOCKETTIMEDOUT', 'ETIMEDOUT', 'ECONNREFUSED', 'EHOSTUNREACH', 'EPIPE', 'EAI_AGAIN'];\n\n/*\n * _maybeRetry - Given the error returned by the API, decide if we should retry or just callback\n * with the error.\n *\n * @param err - an error returned by the API transport\n * @param item - the item that was trying to be sent when this error occured\n * @param callback - function(err, response)\n */\nQueue.prototype._maybeRetry = function(err, item, callback) {\n var shouldRetry = false;\n if (this.options.retryInterval) {\n for (var i = 0, len = RETRIABLE_ERRORS.length; i < len; i++) {\n if (err.code === RETRIABLE_ERRORS[i]) {\n shouldRetry = true;\n break;\n }\n }\n }\n if (shouldRetry) {\n this._retryApiRequest(item, callback);\n } else {\n callback(err);\n }\n};\n\n/*\n * _retryApiRequest - Add an item and a callback to a queue and possibly start a timer to process\n * that queue based on the retryInterval in the options for this queue.\n *\n * @param item - an item that failed to send due to an error we deem retriable\n * @param callback - function(err, response)\n */\nQueue.prototype._retryApiRequest = function(item, callback) {\n this.retryQueue.push({item: item, callback: callback});\n\n if (!this.retryHandle) {\n this.retryHandle = setInterval(function() {\n while (this.retryQueue.length) {\n var retryObject = this.retryQueue.shift();\n this._makeApiRequest(retryObject.item, retryObject.callback);\n }\n }.bind(this), this.options.retryInterval);\n }\n};\n\n/*\n * _dequeuePendingRequest - Removes the item from the pending request queue, this queue is used to\n * enable to functionality of providing a callback that clients can pass to `wait` to be notified\n * when the pending request queue has been emptied. This must be called when the API finishes\n * processing this item. If a `wait` callback is configured, it is called by this function.\n *\n * @param item - the item previously added to the pending request queue\n */\nQueue.prototype._dequeuePendingRequest = function(item) {\n var idx = this.pendingRequests.indexOf(item);\n if (idx !== -1) {\n this.pendingRequests.splice(idx, 1);\n this._maybeCallWait();\n }\n};\n\nQueue.prototype._maybeLog = function(data, originalError) {\n if (this.logger && this.options.verbose) {\n var message = originalError;\n message = message || _.get(data, 'body.trace.exception.message');\n message = message || _.get(data, 'body.trace_chain.0.exception.message');\n if (message) {\n this.logger.error(message);\n return;\n }\n message = _.get(data, 'body.message.body');\n if (message) {\n this.logger.log(message);\n }\n }\n};\n\nQueue.prototype._maybeCallWait = function() {\n if (_.isFunction(this.waitCallback) && this.pendingItems.length === 0 && this.pendingRequests.length === 0) {\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitCallback();\n return true;\n }\n return false;\n};\n\nmodule.exports = Queue;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/queue.js\n// module id = 5\n// module chunks = 0","'use strict';\n\nvar extend = require('extend');\n\nvar RollbarJSON = {};\nvar __initRollbarJSON = false;\nfunction setupJSON() {\n if (__initRollbarJSON) {\n return;\n }\n __initRollbarJSON = true;\n\n if (isDefined(JSON)) {\n if (isNativeFunction(JSON.stringify)) {\n RollbarJSON.stringify = JSON.stringify;\n }\n if (isNativeFunction(JSON.parse)) {\n RollbarJSON.parse = JSON.parse;\n }\n }\n if (!isFunction(RollbarJSON.stringify) || !isFunction(RollbarJSON.parse)) {\n var setupCustomJSON = require('../vendor/JSON-js/json3.js');\n setupCustomJSON(RollbarJSON);\n }\n}\nsetupJSON();\n\n/*\n * isType - Given a Javascript value and a string, returns true if the type of the value matches the\n * given string.\n *\n * @param x - any value\n * @param t - a lowercase string containing one of the following type names:\n * - undefined\n * - null\n * - error\n * - number\n * - boolean\n * - string\n * - symbol\n * - function\n * - object\n * - array\n * @returns true if x is of type t, otherwise false\n */\nfunction isType(x, t) {\n return t === typeName(x);\n}\n\n/*\n * typeName - Given a Javascript value, returns the type of the object as a string\n */\nfunction typeName(x) {\n var name = typeof x;\n if (name !== 'object') {\n return name;\n }\n if (!x) {\n return 'null';\n }\n if (x instanceof Error) {\n return 'error';\n }\n return ({}).toString.call(x).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n}\n\n/* isFunction - a convenience function for checking if a value is a function\n *\n * @param f - any value\n * @returns true if f is a function, otherwise false\n */\nfunction isFunction(f) {\n return isType(f, 'function');\n}\n\n/* isNativeFunction - a convenience function for checking if a value is a native JS function\n *\n * @param f - any value\n * @returns true if f is a native JS function, otherwise false\n */\nfunction isNativeFunction(f) {\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n var funcMatchString = Function.prototype.toString.call(Object.prototype.hasOwnProperty)\n .replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?');\n var reIsNative = RegExp('^' + funcMatchString + '$');\n return isObject(f) && reIsNative.test(f);\n}\n\n/* isObject - Checks if the argument is an object\n *\n * @param value - any value\n * @returns true is value is an object function is an object)\n*/\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/*\n * isDefined - a convenience function for checking if a value is not equal to undefined\n *\n * @param u - any value\n * @returns true if u is anything other than undefined\n */\nfunction isDefined(u) {\n return !isType(u, 'undefined');\n}\n\n/*\n * isIterable - convenience function for checking if a value can be iterated, essentially\n * whether it is an object or an array.\n *\n * @param i - any value\n * @returns true if i is an object or an array as determined by `typeName`\n */\nfunction isIterable(i) {\n var type = typeName(i);\n return (type === 'object' || type === 'array');\n}\n\n/*\n * isError - convenience function for checking if a value is of an error type\n *\n * @param e - any value\n * @returns true if e is an error\n */\nfunction isError(e) {\n return isType(e, 'error');\n}\n\nfunction traverse(obj, func, seen) {\n var k, v, i;\n var isObj = isType(obj, 'object');\n var isArray = isType(obj, 'array');\n var keys = [];\n\n if (isObj && seen.indexOf(obj) !== -1) {\n return obj;\n }\n seen.push(obj);\n\n if (isObj) {\n for (k in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, k)) {\n keys.push(k);\n }\n }\n } else if (isArray) {\n for (i = 0; i < obj.length; ++i) {\n keys.push(i);\n }\n }\n\n var result = isObj ? {} : [];\n for (i = 0; i < keys.length; ++i) {\n k = keys[i];\n v = obj[k];\n result[k] = func(k, v, seen);\n }\n\n return (keys.length != 0) ? result : obj;\n}\n\nfunction redact() {\n return '********';\n}\n\n// from http://stackoverflow.com/a/8809472/1138191\nfunction uuid4() {\n var d = now();\n var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (d + Math.random() * 16) % 16 | 0;\n d = Math.floor(d / 16);\n return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16);\n });\n return uuid;\n}\n\nvar LEVELS = {\n debug: 0,\n info: 1,\n warning: 2,\n error: 3,\n critical: 4\n};\n\nfunction sanitizeUrl(url) {\n var baseUrlParts = parseUri(url);\n // remove a trailing # if there is no anchor\n if (baseUrlParts.anchor === '') {\n baseUrlParts.source = baseUrlParts.source.replace('#', '');\n }\n\n url = baseUrlParts.source.replace('?' + baseUrlParts.query, '');\n return url;\n}\n\nvar parseUriOptions = {\n strictMode: false,\n key: [\n 'source',\n 'protocol',\n 'authority',\n 'userInfo',\n 'user',\n 'password',\n 'host',\n 'port',\n 'relative',\n 'path',\n 'directory',\n 'file',\n 'query',\n 'anchor'\n ],\n q: {\n name: 'queryKey',\n parser: /(?:^|&)([^&=]*)=?([^&]*)/g\n },\n parser: {\n strict: /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,\n loose: /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/\n }\n};\n\nfunction parseUri(str) {\n if (!isType(str, 'string')) {\n throw new Error('received invalid input');\n }\n\n var o = parseUriOptions;\n var m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str);\n var uri = {};\n var i = o.key.length;\n\n while (i--) {\n uri[o.key[i]] = m[i] || '';\n }\n\n uri[o.q.name] = {};\n uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {\n if ($1) {\n uri[o.q.name][$1] = $2;\n }\n });\n\n return uri;\n}\n\nfunction addParamsAndAccessTokenToPath(accessToken, options, params) {\n params = params || {};\n params.access_token = accessToken;\n var paramsArray = [];\n var k;\n for (k in params) {\n if (Object.prototype.hasOwnProperty.call(params, k)) {\n paramsArray.push([k, params[k]].join('='));\n }\n }\n var query = '?' + paramsArray.sort().join('&');\n\n options = options || {};\n options.path = options.path || '';\n var qs = options.path.indexOf('?');\n var h = options.path.indexOf('#');\n var p;\n if (qs !== -1 && (h === -1 || h > qs)) {\n p = options.path;\n options.path = p.substring(0,qs) + query + '&' + p.substring(qs+1);\n } else {\n if (h !== -1) {\n p = options.path;\n options.path = p.substring(0,h) + query + p.substring(h);\n } else {\n options.path = options.path + query;\n }\n }\n}\n\nfunction formatUrl(u, protocol) {\n protocol = protocol || u.protocol;\n if (!protocol && u.port) {\n if (u.port === 80) {\n protocol = 'http:';\n } else if (u.port === 443) {\n protocol = 'https:';\n }\n }\n protocol = protocol || 'https:';\n\n if (!u.hostname) {\n return null;\n }\n var result = protocol + '//' + u.hostname;\n if (u.port) {\n result = result + ':' + u.port;\n }\n if (u.path) {\n result = result + u.path;\n }\n return result;\n}\n\nfunction stringify(obj, backup) {\n var value, error;\n try {\n value = RollbarJSON.stringify(obj);\n } catch (jsonError) {\n if (backup && isFunction(backup)) {\n try {\n value = backup(obj);\n } catch (backupError) {\n error = backupError;\n }\n } else {\n error = jsonError;\n }\n }\n return {error: error, value: value};\n}\n\nfunction jsonParse(s) {\n var value, error;\n try {\n value = RollbarJSON.parse(s);\n } catch (e) {\n error = e;\n }\n return {error: error, value: value};\n}\n\nfunction makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n mode,\n backupMessage,\n errorParser\n) {\n var location = {\n url: url || '',\n line: lineno,\n column: colno\n };\n location.func = errorParser.guessFunctionName(location.url, location.line);\n location.context = errorParser.gatherContext(location.url, location.line);\n var href = document && document.location && document.location.href;\n var useragent = window && window.navigator && window.navigator.userAgent;\n return {\n 'mode': mode,\n 'message': error ? String(error) : (message || backupMessage),\n 'url': href,\n 'stack': [location],\n 'useragent': useragent\n };\n}\n\nfunction wrapCallback(logger, f) {\n return function(err, resp) {\n try {\n f(err, resp);\n } catch (e) {\n logger.error(e);\n }\n };\n}\n\nfunction createItem(args, logger, notifier, requestKeys, lambdaContext) {\n var message, err, custom, callback, request;\n var arg;\n var extraArgs = [];\n\n for (var i = 0, l = args.length; i < l; ++i) {\n arg = args[i];\n\n var typ = typeName(arg);\n switch (typ) {\n case 'undefined':\n break;\n case 'string':\n message ? extraArgs.push(arg) : message = arg;\n break;\n case 'function':\n callback = wrapCallback(logger, arg);\n break;\n case 'date':\n extraArgs.push(arg);\n break;\n case 'error':\n case 'domexception':\n err ? extraArgs.push(arg) : err = arg;\n break;\n case 'object':\n case 'array':\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n if (requestKeys && typ === 'object' && !request) {\n for (var j = 0, len = requestKeys.length; j < len; ++j) {\n if (arg[requestKeys[j]] !== undefined) {\n request = arg;\n break;\n }\n }\n if (request) {\n break;\n }\n }\n custom ? extraArgs.push(arg) : custom = arg;\n break;\n default:\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n extraArgs.push(arg);\n }\n }\n\n if (extraArgs.length > 0) {\n // if custom is an array this turns it into an object with integer keys\n custom = extend(true, {}, custom);\n custom.extraArgs = extraArgs;\n }\n\n var item = {\n message: message,\n err: err,\n custom: custom,\n timestamp: now(),\n callback: callback,\n uuid: uuid4()\n };\n if (custom && custom.level !== undefined) {\n item.level = custom.level;\n delete custom.level;\n }\n if (requestKeys && request) {\n item.request = request;\n }\n if (lambdaContext) {\n item.lambdaContext = lambdaContext;\n }\n item._originalArgs = args;\n return item;\n}\n\n/*\n * get - given an obj/array and a keypath, return the value at that keypath or\n * undefined if not possible.\n *\n * @param obj - an object or array\n * @param path - a string of keys separated by '.' such as 'plugin.jquery.0.message'\n * which would correspond to 42 in `{plugin: {jquery: [{message: 42}]}}`\n */\nfunction get(obj, path) {\n if (!obj) {\n return undefined;\n }\n var keys = path.split('.');\n var result = obj;\n try {\n for (var i = 0, len = keys.length; i < len; ++i) {\n result = result[keys[i]];\n }\n } catch (e) {\n result = undefined;\n }\n return result;\n}\n\nfunction set(obj, path, value) {\n if (!obj) {\n return;\n }\n var keys = path.split('.');\n var len = keys.length;\n if (len < 1) {\n return;\n }\n if (len === 1) {\n obj[keys[0]] = value;\n return;\n }\n try {\n var temp = obj[keys[0]] || {};\n var replacement = temp;\n for (var i = 1; i < len-1; i++) {\n temp[keys[i]] = temp[keys[i]] || {};\n temp = temp[keys[i]];\n }\n temp[keys[len-1]] = value;\n obj[keys[0]] = replacement;\n } catch (e) {\n return;\n }\n}\n\nfunction scrub(data, scrubFields) {\n scrubFields = scrubFields || [];\n var paramRes = _getScrubFieldRegexs(scrubFields);\n var queryRes = _getScrubQueryParamRegexs(scrubFields);\n\n function redactQueryParam(dummy0, paramPart, dummy1, dummy2, dummy3, valPart) {\n return paramPart + redact(valPart);\n }\n\n function paramScrubber(v) {\n var i;\n if (isType(v, 'string')) {\n for (i = 0; i < queryRes.length; ++i) {\n v = v.replace(queryRes[i], redactQueryParam);\n }\n }\n return v;\n }\n\n function valScrubber(k, v) {\n var i;\n for (i = 0; i < paramRes.length; ++i) {\n if (paramRes[i].test(k)) {\n v = redact(v);\n break;\n }\n }\n return v;\n }\n\n function scrubber(k, v, seen) {\n var tmpV = valScrubber(k, v);\n if (tmpV === v) {\n if (isType(v, 'object') || isType(v, 'array')) {\n return traverse(v, scrubber, seen);\n }\n return paramScrubber(tmpV);\n } else {\n return tmpV;\n }\n }\n\n return traverse(data, scrubber, []);\n}\n\nfunction _getScrubFieldRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '^\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?$';\n ret.push(new RegExp(pat, 'i'));\n }\n return ret;\n}\n\n\nfunction _getScrubQueryParamRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?';\n ret.push(new RegExp('(' + pat + '=)([^&\\\\n]+)', 'igm'));\n }\n return ret;\n}\n\nfunction formatArgsAsString(args) {\n var i, len, arg;\n var result = [];\n for (i = 0, len = args.length; i < len; i++) {\n arg = args[i];\n if (typeof arg === 'object') {\n arg = stringify(arg);\n arg = arg.error || arg.value;\n if (arg.length > 500)\n arg = arg.substr(0,500)+'...';\n } else if (typeof arg === 'undefined') {\n arg = 'undefined';\n }\n result.push(arg);\n }\n return result.join(' ');\n}\n\nfunction now() {\n if (Date.now) {\n return +Date.now();\n }\n return +new Date();\n}\n\nfunction filterIp(requestData, captureIp) {\n if (!requestData || !requestData['user_ip'] || captureIp === true) {\n return;\n }\n var newIp = requestData['user_ip'];\n if (!captureIp) {\n newIp = null;\n } else {\n try {\n var parts;\n if (newIp.indexOf('.') !== -1) {\n parts = newIp.split('.');\n parts.pop();\n parts.push('0');\n newIp = parts.join('.');\n } else if (newIp.indexOf(':') !== -1) {\n parts = newIp.split(':');\n if (parts.length > 2) {\n var beginning = parts.slice(0, 3);\n var slashIdx = beginning[2].indexOf('/');\n if (slashIdx !== -1) {\n beginning[2] = beginning[2].substring(0, slashIdx);\n }\n var terminal = '0000:0000:0000:0000:0000';\n newIp = beginning.concat(terminal).join(':');\n }\n } else {\n newIp = null;\n }\n } catch (e) {\n newIp = null;\n }\n }\n requestData['user_ip'] = newIp;\n}\n\nmodule.exports = {\n isType: isType,\n typeName: typeName,\n isFunction: isFunction,\n isNativeFunction: isNativeFunction,\n isIterable: isIterable,\n isError: isError,\n extend: extend,\n traverse: traverse,\n redact: redact,\n uuid4: uuid4,\n LEVELS: LEVELS,\n sanitizeUrl: sanitizeUrl,\n addParamsAndAccessTokenToPath: addParamsAndAccessTokenToPath,\n formatUrl: formatUrl,\n stringify: stringify,\n jsonParse: jsonParse,\n makeUnhandledStackInfo: makeUnhandledStackInfo,\n createItem: createItem,\n get: get,\n set: set,\n scrub: scrub,\n formatArgsAsString: formatArgsAsString,\n now: now,\n filterIp: filterIp\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/utility.js\n// module id = 6\n// module chunks = 0","'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) {/**/}\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[0],\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t} else if ((typeof target !== 'object' && typeof target !== 'function') || target == null) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = target[name];\n\t\t\t\tcopy = options[name];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\ttarget[name] = extend(deep, clone, copy);\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/extend/index.js\n// module id = 7\n// module chunks = 0","// json3.js\n// 2017-02-21\n// Public Domain.\n// NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n// See http://www.JSON.org/js.html\n// This code should be minified before deployment.\n// See http://javascript.crockford.com/jsmin.html\n\n// USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n// NOT CONTROL.\n\n// This file creates a global JSON object containing two methods: stringify\n// and parse. This file provides the ES5 JSON capability to ES3 systems.\n// If a project might run on IE8 or earlier, then this file should be included.\n// This file does nothing on ES5 systems.\n\n// JSON.stringify(value, replacer, space)\n// value any JavaScript value, usually an object or array.\n// replacer an optional parameter that determines how object\n// values are stringified for objects. It can be a\n// function or an array of strings.\n// space an optional parameter that specifies the indentation\n// of nested structures. If it is omitted, the text will\n// be packed without extra whitespace. If it is a number,\n// it will specify the number of spaces to indent at each\n// level. If it is a string (such as \"\\t\" or \" \"),\n// it contains the characters used to indent at each level.\n// This method produces a JSON text from a JavaScript value.\n// When an object value is found, if the object contains a toJSON\n// method, its toJSON method will be called and the result will be\n// stringified. A toJSON method does not serialize: it returns the\n// value represented by the name/value pair that should be serialized,\n// or undefined if nothing should be serialized. The toJSON method\n// will be passed the key associated with the value, and this will be\n// bound to the value.\n\n// For example, this would serialize Dates as ISO strings.\n\n// Date.prototype.toJSON = function (key) {\n// function f(n) {\n// // Format integers to have at least two digits.\n// return (n < 10)\n// ? \"0\" + n\n// : n;\n// }\n// return this.getUTCFullYear() + \"-\" +\n// f(this.getUTCMonth() + 1) + \"-\" +\n// f(this.getUTCDate()) + \"T\" +\n// f(this.getUTCHours()) + \":\" +\n// f(this.getUTCMinutes()) + \":\" +\n// f(this.getUTCSeconds()) + \"Z\";\n// };\n\n// You can provide an optional replacer method. It will be passed the\n// key and value of each member, with this bound to the containing\n// object. The value that is returned from your method will be\n// serialized. If your method returns undefined, then the member will\n// be excluded from the serialization.\n\n// If the replacer parameter is an array of strings, then it will be\n// used to select the members to be serialized. It filters the results\n// such that only members with keys listed in the replacer array are\n// stringified.\n\n// Values that do not have JSON representations, such as undefined or\n// functions, will not be serialized. Such values in objects will be\n// dropped; in arrays they will be replaced with null. You can use\n// a replacer function to replace those with JSON values.\n\n// JSON.stringify(undefined) returns undefined.\n\n// The optional space parameter produces a stringification of the\n// value that is filled with line breaks and indentation to make it\n// easier to read.\n\n// If the space parameter is a non-empty string, then that string will\n// be used for indentation. If the space parameter is a number, then\n// the indentation will be that many spaces.\n\n// Example:\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}]);\n// // text is '[\"e\",{\"pluribus\":\"unum\"}]'\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}], null, \"\\t\");\n// // text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\n\n// text = JSON.stringify([new Date()], function (key, value) {\n// return this[key] instanceof Date\n// ? \"Date(\" + this[key] + \")\"\n// : value;\n// });\n// // text is '[\"Date(---current time---)\"]'\n\n// JSON.parse(text, reviver)\n// This method parses a JSON text to produce an object or array.\n// It can throw a SyntaxError exception.\n// This has been modified to use JSON-js/json_parse_state.js as the\n// parser instead of the one built around eval found in JSON-js/json2.js\n\n// The optional reviver parameter is a function that can filter and\n// transform the results. It receives each of the keys and values,\n// and its return value is used instead of the original value.\n// If it returns what it received, then the structure is not modified.\n// If it returns undefined then the member is deleted.\n\n// Example:\n\n// // Parse the text. Values that look like ISO date strings will\n// // be converted to Date objects.\n\n// myData = JSON.parse(text, function (key, value) {\n// var a;\n// if (typeof value === \"string\") {\n// a =\n// /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n// if (a) {\n// return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n// +a[5], +a[6]));\n// }\n// }\n// return value;\n// });\n\n// myData = JSON.parse('[\"Date(09/09/2001)\"]', function (key, value) {\n// var d;\n// if (typeof value === \"string\" &&\n// value.slice(0, 5) === \"Date(\" &&\n// value.slice(-1) === \")\") {\n// d = new Date(value.slice(5, -1));\n// if (d) {\n// return d;\n// }\n// }\n// return value;\n// });\n\n// This is a reference implementation. You are free to copy, modify, or\n// redistribute.\n\n/*jslint\n for, this\n */\n\n/*property\n JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\n getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\n lastIndex, length, parse, prototype, push, replace, slice, stringify,\n test, toJSON, toString, valueOf\n */\n\nvar setupCustomJSON = function(JSON) {\n\n var rx_one = /^[\\],:{}\\s]*$/;\n var rx_two = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g;\n var rx_three = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\n var rx_four = /(?:^|:|,)(?:\\s*\\[)+/g;\n var rx_escapable = /[\\\\\"\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n var rx_dangerous = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\n function f(n) {\n // Format integers to have at least two digits.\n return n < 10\n ? \"0\" + n\n : n;\n }\n\n function this_value() {\n return this.valueOf();\n }\n\n if (typeof Date.prototype.toJSON !== \"function\") {\n\n Date.prototype.toJSON = function () {\n\n return isFinite(this.valueOf())\n ? this.getUTCFullYear() + \"-\" +\n f(this.getUTCMonth() + 1) + \"-\" +\n f(this.getUTCDate()) + \"T\" +\n f(this.getUTCHours()) + \":\" +\n f(this.getUTCMinutes()) + \":\" +\n f(this.getUTCSeconds()) + \"Z\"\n : null;\n };\n\n Boolean.prototype.toJSON = this_value;\n Number.prototype.toJSON = this_value;\n String.prototype.toJSON = this_value;\n }\n\n var gap;\n var indent;\n var meta;\n var rep;\n\n\n function quote(string) {\n\n // If the string contains no control characters, no quote characters, and no\n // backslash characters, then we can safely slap some quotes around it.\n // Otherwise we must also replace the offending characters with safe escape\n // sequences.\n\n rx_escapable.lastIndex = 0;\n return rx_escapable.test(string)\n ? \"\\\"\" + string.replace(rx_escapable, function (a) {\n var c = meta[a];\n return typeof c === \"string\"\n ? c\n : \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n }) + \"\\\"\"\n : \"\\\"\" + string + \"\\\"\";\n }\n\n\n function str(key, holder) {\n\n // Produce a string from holder[key].\n\n var i; // The loop counter.\n var k; // The member key.\n var v; // The member value.\n var length;\n var mind = gap;\n var partial;\n var value = holder[key];\n\n // If the value has a toJSON method, call it to obtain a replacement value.\n\n if (value && typeof value === \"object\" &&\n typeof value.toJSON === \"function\") {\n value = value.toJSON(key);\n }\n\n // If we were called with a replacer function, then call the replacer to\n // obtain a replacement value.\n\n if (typeof rep === \"function\") {\n value = rep.call(holder, key, value);\n }\n\n // What happens next depends on the value's type.\n\n switch (typeof value) {\n case \"string\":\n return quote(value);\n\n case \"number\":\n\n // JSON numbers must be finite. Encode non-finite numbers as null.\n\n return isFinite(value)\n ? String(value)\n : \"null\";\n\n case \"boolean\":\n case \"null\":\n\n // If the value is a boolean or null, convert it to a string. Note:\n // typeof null does not produce \"null\". The case is included here in\n // the remote chance that this gets fixed someday.\n\n return String(value);\n\n // If the type is \"object\", we might be dealing with an object or an array or\n // null.\n\n case \"object\":\n\n // Due to a specification blunder in ECMAScript, typeof null is \"object\",\n // so watch out for that case.\n\n if (!value) {\n return \"null\";\n }\n\n // Make an array to hold the partial results of stringifying this object value.\n\n gap += indent;\n partial = [];\n\n // Is the value an array?\n\n if (Object.prototype.toString.apply(value) === \"[object Array]\") {\n\n // The value is an array. Stringify every element. Use null as a placeholder\n // for non-JSON values.\n\n length = value.length;\n for (i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || \"null\";\n }\n\n // Join all of the elements together, separated with commas, and wrap them in\n // brackets.\n\n v = partial.length === 0\n ? \"[]\"\n : gap\n ? \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\"\n : \"[\" + partial.join(\",\") + \"]\";\n gap = mind;\n return v;\n }\n\n // If the replacer is an array, use it to select the members to be stringified.\n\n if (rep && typeof rep === \"object\") {\n length = rep.length;\n for (i = 0; i < length; i += 1) {\n if (typeof rep[i] === \"string\") {\n k = rep[i];\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n } else {\n\n // Otherwise, iterate through all of the keys in the object.\n\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n }\n\n // Join all of the member texts together, separated with commas,\n // and wrap them in braces.\n\n v = partial.length === 0\n ? \"{}\"\n : gap\n ? \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\"\n : \"{\" + partial.join(\",\") + \"}\";\n gap = mind;\n return v;\n }\n }\n\n // If the JSON object does not yet have a stringify method, give it one.\n\n if (typeof JSON.stringify !== \"function\") {\n meta = { // table of character substitutions\n \"\\b\": \"\\\\b\",\n \"\\t\": \"\\\\t\",\n \"\\n\": \"\\\\n\",\n \"\\f\": \"\\\\f\",\n \"\\r\": \"\\\\r\",\n \"\\\"\": \"\\\\\\\"\",\n \"\\\\\": \"\\\\\\\\\"\n };\n JSON.stringify = function (value, replacer, space) {\n\n // The stringify method takes a value and an optional replacer, and an optional\n // space parameter, and returns a JSON text. The replacer can be a function\n // that can replace values, or an array of strings that will select the keys.\n // A default replacer method can be provided. Use of the space parameter can\n // produce text that is more easily readable.\n\n var i;\n gap = \"\";\n indent = \"\";\n\n // If the space parameter is a number, make an indent string containing that\n // many spaces.\n\n if (typeof space === \"number\") {\n for (i = 0; i < space; i += 1) {\n indent += \" \";\n }\n\n // If the space parameter is a string, it will be used as the indent string.\n\n } else if (typeof space === \"string\") {\n indent = space;\n }\n\n // If there is a replacer, it must be a function or an array.\n // Otherwise, throw an error.\n\n rep = replacer;\n if (replacer && typeof replacer !== \"function\" &&\n (typeof replacer !== \"object\" ||\n typeof replacer.length !== \"number\")) {\n throw new Error(\"JSON.stringify\");\n }\n\n // Make a fake root object containing our value under the key of \"\".\n // Return the result of stringifying the value.\n\n return str(\"\", {\"\": value});\n };\n }\n\n\n // If the JSON object does not yet have a parse method, give it one.\n\n if (typeof JSON.parse !== \"function\") {\n JSON.parse = (function () {\n\n // This function creates a JSON parse function that uses a state machine rather\n // than the dangerous eval function to parse a JSON text.\n\n var state; // The state of the parser, one of\n // 'go' The starting state\n // 'ok' The final, accepting state\n // 'firstokey' Ready for the first key of the object or\n // the closing of an empty object\n // 'okey' Ready for the next key of the object\n // 'colon' Ready for the colon\n // 'ovalue' Ready for the value half of a key/value pair\n // 'ocomma' Ready for a comma or closing }\n // 'firstavalue' Ready for the first value of an array or\n // an empty array\n // 'avalue' Ready for the next value of an array\n // 'acomma' Ready for a comma or closing ]\n var stack; // The stack, for controlling nesting.\n var container; // The current container object or array\n var key; // The current key\n var value; // The current value\n var escapes = { // Escapement translation table\n \"\\\\\": \"\\\\\",\n \"\\\"\": \"\\\"\",\n \"/\": \"/\",\n \"t\": \"\\t\",\n \"n\": \"\\n\",\n \"r\": \"\\r\",\n \"f\": \"\\f\",\n \"b\": \"\\b\"\n };\n var string = { // The actions for string tokens\n go: function () {\n state = \"ok\";\n },\n firstokey: function () {\n key = value;\n state = \"colon\";\n },\n okey: function () {\n key = value;\n state = \"colon\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var number = { // The actions for number tokens\n go: function () {\n state = \"ok\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var action = {\n\n // The action table describes the behavior of the machine. It contains an\n // object for each token. Each object contains a method that is called when\n // a token is matched in a state. An object will lack a method for illegal\n // states.\n\n \"{\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = {};\n state = \"firstokey\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = {};\n state = \"firstokey\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n }\n },\n \"}\": {\n firstokey: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n ocomma: function () {\n var pop = stack.pop();\n container[key] = value;\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \"[\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = [];\n state = \"firstavalue\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = [];\n state = \"firstavalue\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n }\n },\n \"]\": {\n firstavalue: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n acomma: function () {\n var pop = stack.pop();\n container.push(value);\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \":\": {\n colon: function () {\n if (Object.hasOwnProperty.call(container, key)) {\n throw new SyntaxError(\"Duplicate key '\" + key + \"\\\"\");\n }\n state = \"ovalue\";\n }\n },\n \",\": {\n ocomma: function () {\n container[key] = value;\n state = \"okey\";\n },\n acomma: function () {\n container.push(value);\n state = \"avalue\";\n }\n },\n \"true\": {\n go: function () {\n value = true;\n state = \"ok\";\n },\n ovalue: function () {\n value = true;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = true;\n state = \"acomma\";\n },\n avalue: function () {\n value = true;\n state = \"acomma\";\n }\n },\n \"false\": {\n go: function () {\n value = false;\n state = \"ok\";\n },\n ovalue: function () {\n value = false;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = false;\n state = \"acomma\";\n },\n avalue: function () {\n value = false;\n state = \"acomma\";\n }\n },\n \"null\": {\n go: function () {\n value = null;\n state = \"ok\";\n },\n ovalue: function () {\n value = null;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = null;\n state = \"acomma\";\n },\n avalue: function () {\n value = null;\n state = \"acomma\";\n }\n }\n };\n\n function debackslashify(text) {\n\n // Remove and replace any backslash escapement.\n\n return text.replace(/\\\\(?:u(.{4})|([^u]))/g, function (ignore, b, c) {\n return b\n ? String.fromCharCode(parseInt(b, 16))\n : escapes[c];\n });\n }\n\n return function (source, reviver) {\n\n // A regular expression is used to extract tokens from the JSON text.\n // The extraction process is cautious.\n\n var result;\n var tx = /^[\\u0020\\t\\n\\r]*(?:([,:\\[\\]{}]|true|false|null)|(-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)|\"((?:[^\\r\\n\\t\\\\\\\"]|\\\\(?:[\"\\\\\\/trnfb]|u[0-9a-fA-F]{4}))*)\")/;\n\n // Set the starting state.\n\n state = \"go\";\n\n // The stack records the container, key, and state for each object or array\n // that contains another object or array while processing nested structures.\n\n stack = [];\n\n // If any error occurs, we will catch it and ultimately throw a syntax error.\n\n try {\n\n // For each token...\n\n while (true) {\n result = tx.exec(source);\n if (!result) {\n break;\n }\n\n // result is the result array from matching the tokenizing regular expression.\n // result[0] contains everything that matched, including any initial whitespace.\n // result[1] contains any punctuation that was matched, or true, false, or null.\n // result[2] contains a matched number, still in string form.\n // result[3] contains a matched string, without quotes but with escapement.\n\n if (result[1]) {\n\n // Token: Execute the action for this state and token.\n\n action[result[1]][state]();\n\n } else if (result[2]) {\n\n // Number token: Convert the number string into a number value and execute\n // the action for this state and number.\n\n value = +result[2];\n number[state]();\n } else {\n\n // String token: Replace the escapement sequences and execute the action for\n // this state and string.\n\n value = debackslashify(result[3]);\n string[state]();\n }\n\n // Remove the token from the string. The loop will continue as long as there\n // are tokens. This is a slow process, but it allows the use of ^ matching,\n // which assures that no illegal tokens slip through.\n\n source = source.slice(result[0].length);\n }\n\n // If we find a state/token combination that is illegal, then the action will\n // cause an error. We handle the error by simply changing the state.\n\n } catch (e) {\n state = e;\n }\n\n // The parsing is finished. If we are not in the final \"ok\" state, or if the\n // remaining source contains anything except whitespace, then we did not have\n //a well-formed JSON text.\n\n if (state !== \"ok\" || (/[^\\u0020\\t\\n\\r]/.test(source))) {\n throw (state instanceof SyntaxError)\n ? state\n : new SyntaxError(\"JSON\");\n }\n\n // If there is a reviver function, we recursively walk the new structure,\n // passing each name/value pair to the reviver function for possible\n // transformation, starting with a temporary root object that holds the current\n // value in an empty key. If there is not a reviver function, we simply return\n // that value.\n\n return (typeof reviver === \"function\")\n ? (function walk(holder, key) {\n var k;\n var v;\n var val = holder[key];\n if (val && typeof val === \"object\") {\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(val, k)) {\n v = walk(val, k);\n if (v !== undefined) {\n val[k] = v;\n } else {\n delete val[k];\n }\n }\n }\n }\n return reviver.call(holder, key, val);\n }({\"\": value}, \"\"))\n : value;\n };\n }());\n }\n}\n\nmodule.exports = setupCustomJSON;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./vendor/JSON-js/json3.js\n// module id = 8\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Notifier - the internal object responsible for delegating between the client exposed API, the\n * chain of transforms necessary to turn an item into something that can be sent to Rollbar, and the\n * queue which handles the communcation with the Rollbar API servers.\n *\n * @param queue - an object that conforms to the interface: addItem(item, callback)\n * @param options - an object representing the options to be set for this notifier, this should have\n * any defaults already set by the caller\n */\nfunction Notifier(queue, options) {\n this.queue = queue;\n this.options = options;\n this.transforms = [];\n}\n\n/*\n * configure - updates the options for this notifier with the passed in object\n *\n * @param options - an object which gets merged with the current options set on this notifier\n * @returns this\n */\nNotifier.prototype.configure = function(options) {\n this.queue && this.queue.configure(options);\n var oldOptions = this.options;\n this.options = _.extend({}, oldOptions, options);\n return this;\n};\n\n/*\n * addTransform - adds a transform onto the end of the queue of transforms for this notifier\n *\n * @param transform - a function which takes three arguments:\n * * item: An Object representing the data to eventually be sent to Rollbar\n * * options: The current value of the options for this notifier\n * * callback: function(err: (Null|Error), item: (Null|Object)) the transform must call this\n * callback with a null value for error if it wants the processing chain to continue, otherwise\n * with an error to terminate the processing. The item should be the updated item after this\n * transform is finished modifying it.\n */\nNotifier.prototype.addTransform = function(transform) {\n if (_.isFunction(transform)) {\n this.transforms.push(transform);\n }\n return this;\n};\n\n/*\n * log - the internal log function which applies the configured transforms and then pushes onto the\n * queue to be sent to the backend.\n *\n * @param item - An object with the following structure:\n * message [String] - An optional string to be sent to rollbar\n * error [Error] - An optional error\n *\n * @param callback - A function of type function(err, resp) which will be called with exactly one\n * null argument and one non-null argument. The callback will be called once, either during the\n * transform stage if an error occurs inside a transform, or in response to the communication with\n * the backend. The second argument will be the response from the backend in case of success.\n */\nNotifier.prototype.log = function(item, callback) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!this.options.enabled) {\n return callback(new Error('Rollbar is not enabled'));\n }\n\n this.queue.addPendingItem(item);\n var originalError = item.err;\n this._applyTransforms(item, function(err, i) {\n if (err) {\n this.queue.removePendingItem(item);\n return callback(err, null);\n }\n this.queue.addItem(i, callback, originalError, item);\n }.bind(this));\n};\n\n/* Internal */\n\n/*\n * _applyTransforms - Applies the transforms that have been added to this notifier sequentially. See\n * `addTransform` for more information.\n *\n * @param item - An item to be transformed\n * @param callback - A function of type function(err, item) which will be called with a non-null\n * error and a null item in the case of a transform failure, or a null error and non-null item after\n * all transforms have been applied.\n */\nNotifier.prototype._applyTransforms = function(item, callback) {\n var transformIndex = -1;\n var transformsLength = this.transforms.length;\n var transforms = this.transforms;\n var options = this.options;\n\n var cb = function(err, i) {\n if (err) {\n callback(err, null);\n return;\n }\n\n transformIndex++;\n\n if (transformIndex === transformsLength) {\n callback(null, i);\n return;\n }\n\n transforms[transformIndex](i, options, cb);\n };\n\n cb(null, item);\n};\n\nmodule.exports = Notifier;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/notifier.js\n// module id = 9\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nvar MAX_EVENTS = 100;\n\nfunction Telemeter(options) {\n this.queue = [];\n this.options = _.extend(true, {}, options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n this.maxQueueSize = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n}\n\nTelemeter.prototype.configure = function(options) {\n var oldOptions = this.options;\n this.options = _.extend(true, {}, oldOptions, options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n var newMaxEvents = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n var deleteCount = 0;\n if (this.maxQueueSize > newMaxEvents) {\n deleteCount = this.maxQueueSize - newMaxEvents;\n }\n this.maxQueueSize = newMaxEvents;\n this.queue.splice(0, deleteCount);\n};\n\nTelemeter.prototype.copyEvents = function() {\n return Array.prototype.slice.call(this.queue, 0);\n};\n\nTelemeter.prototype.capture = function(type, metadata, level, rollbarUUID, timestamp) {\n var e = {\n level: getLevel(type, level),\n type: type,\n timestamp_ms: timestamp || _.now(),\n body: metadata,\n source: 'client'\n };\n if (rollbarUUID) {\n e.uuid = rollbarUUID;\n }\n\n try {\n if (_.isFunction(this.options.filterTelemetry) && this.options.filterTelemetry(e)) {\n return false;\n }\n } catch (e) {\n this.options.filterTelemetry = null;\n }\n\n this.push(e);\n return e;\n};\n\nTelemeter.prototype.captureEvent = function(metadata, level, rollbarUUID) {\n return this.capture('manual', metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.captureError = function(err, level, rollbarUUID, timestamp) {\n var metadata = {\n message: err.message || String(err)\n };\n if (err.stack) {\n metadata.stack = err.stack;\n }\n return this.capture('error', metadata, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureLog = function(message, level, rollbarUUID, timestamp) {\n return this.capture('log', {\n message: message\n }, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureNetwork = function(metadata, subtype, rollbarUUID, requestData) {\n subtype = subtype || 'xhr';\n metadata.subtype = metadata.subtype || subtype;\n if (requestData) {\n metadata.request = requestData;\n }\n var level = this.levelFromStatus(metadata.status_code);\n return this.capture('network', metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.levelFromStatus = function(statusCode) {\n if (statusCode >= 200 && statusCode < 400) {\n return 'info';\n }\n if (statusCode === 0 || statusCode >= 400) {\n return 'error';\n }\n return 'info';\n};\n\nTelemeter.prototype.captureDom = function(subtype, element, value, checked, rollbarUUID) {\n var metadata = {\n subtype: subtype,\n element: element\n };\n if (value !== undefined) {\n metadata.value = value;\n }\n if (checked !== undefined) {\n metadata.checked = checked;\n }\n return this.capture('dom', metadata, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureNavigation = function(from, to, rollbarUUID) {\n return this.capture('navigation', {from: from, to: to}, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureDomContentLoaded = function(ts) {\n return this.capture('navigation', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n */\n};\nTelemeter.prototype.captureLoad = function(ts) {\n return this.capture('navigation', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n */\n};\n\nTelemeter.prototype.captureConnectivityChange = function(type, rollbarUUID) {\n return this.captureNetwork({change: type}, 'connectivity', rollbarUUID);\n};\n\n// Only intended to be used internally by the notifier\nTelemeter.prototype._captureRollbarItem = function(item) {\n if (!this.options.includeItemsInTelemetry) {\n return;\n }\n if (item.err) {\n return this.captureError(item.err, item.level, item.uuid, item.timestamp);\n }\n if (item.message) {\n return this.captureLog(item.message, item.level, item.uuid, item.timestamp);\n }\n if (item.custom) {\n return this.capture('log', item.custom, item.level, item.uuid, item.timestamp);\n }\n};\n\nTelemeter.prototype.push = function(e) {\n this.queue.push(e);\n if (this.queue.length > this.maxQueueSize) {\n this.queue.shift();\n }\n};\n\nfunction getLevel(type, level) {\n if (level) {\n return level;\n }\n var defaultLevel = {\n error: 'error',\n manual: 'info'\n };\n return defaultLevel[type] || 'info';\n}\n\nmodule.exports = Telemeter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/telemetry.js\n// module id = 10\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\nvar helpers = require('./apiUtility');\n\nvar defaultOptions = {\n hostname: 'api.rollbar.com',\n path: '/api/1/item/',\n search: null,\n version: '1',\n protocol: 'https:',\n port: 443\n};\n\n/**\n * Api is an object that encapsulates methods of communicating with\n * the Rollbar API. It is a standard interface with some parts implemented\n * differently for server or browser contexts. It is an object that should\n * be instantiated when used so it can contain non-global options that may\n * be different for another instance of RollbarApi.\n *\n * @param options {\n * accessToken: the accessToken to use for posting items to rollbar\n * endpoint: an alternative endpoint to send errors to\n * must be a valid, fully qualified URL.\n * The default is: https://api.rollbar.com/api/1/item\n * proxy: if you wish to proxy requests provide an object\n * with the following keys:\n * host or hostname (required): foo.example.com\n * port (optional): 123\n * protocol (optional): https\n * }\n */\nfunction Api(options, t, u, j) {\n this.options = options;\n this.transport = t;\n this.url = u;\n this.jsonBackup = j;\n this.accessToken = options.accessToken;\n this.transportOptions = _getTransport(options, u);\n}\n\n/**\n *\n * @param data\n * @param callback\n */\nApi.prototype.postItem = function(data, callback) {\n var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n this.transport.post(this.accessToken, transportOptions, payload, callback);\n};\n\nApi.prototype.configure = function(options) {\n var oldOptions = this.oldOptions;\n this.options = _.extend(true, {}, oldOptions, options);\n this.transportOptions = _getTransport(this.options, this.url);\n if (this.options.accessToken !== undefined) {\n this.accessToken = this.options.accessToken;\n }\n return this;\n};\n\nfunction _getTransport(options, url) {\n return helpers.getTransportFromOptions(options, defaultOptions, url);\n}\n\nmodule.exports = Api;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/api.js\n// module id = 11\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction buildPayload(accessToken, data, jsonBackup) {\n if (!_.isType(data.context, 'string')) {\n var contextResult = _.stringify(data.context, jsonBackup);\n if (contextResult.error) {\n data.context = 'Error: could not serialize \\'context\\'';\n } else {\n data.context = contextResult.value || '';\n }\n if (data.context.length > 255) {\n data.context = data.context.substr(0, 255);\n }\n }\n return {\n access_token: accessToken,\n data: data\n };\n}\n\nfunction getTransportFromOptions(options, defaults, url) {\n var hostname = defaults.hostname;\n var protocol = defaults.protocol;\n var port = defaults.port;\n var path = defaults.path;\n var search = defaults.search;\n\n var proxy = options.proxy;\n if (options.endpoint) {\n var opts = url.parse(options.endpoint);\n hostname = opts.hostname;\n protocol = opts.protocol;\n port = opts.port;\n path = opts.pathname;\n search = opts.search;\n }\n return {\n hostname: hostname,\n protocol: protocol,\n port: port,\n path: path,\n search: search,\n proxy: proxy\n };\n}\n\nfunction transportOptions(transport, method) {\n var protocol = transport.protocol || 'https:';\n var port = transport.port || (protocol === 'http:' ? 80 : protocol === 'https:' ? 443 : undefined);\n var hostname = transport.hostname;\n var path = transport.path;\n if (transport.search) {\n path = path + transport.search;\n }\n if (transport.proxy) {\n path = protocol + '//' + hostname + path;\n hostname = transport.proxy.host || transport.proxy.hostname;\n port = transport.proxy.port;\n protocol = transport.proxy.protocol || protocol;\n }\n return {\n protocol: protocol,\n hostname: hostname,\n path: path,\n port: port,\n method: method\n };\n}\n\nfunction appendPathToPath(base, path) {\n var baseTrailingSlash = /\\/$/.test(base);\n var pathBeginningSlash = /^\\//.test(path);\n\n if (baseTrailingSlash && pathBeginningSlash) {\n path = path.substring(1);\n } else if (!baseTrailingSlash && !pathBeginningSlash) {\n path = '/' + path;\n }\n\n return base + path;\n}\n\nmodule.exports = {\n buildPayload: buildPayload,\n getTransportFromOptions: getTransportFromOptions,\n transportOptions: transportOptions,\n appendPathToPath: appendPathToPath\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/apiUtility.js\n// module id = 12\n// module chunks = 0","'use strict';\n\n/* eslint-disable no-console */\nrequire('console-polyfill');\nvar detection = require('./detection');\nvar _ = require('../utility');\n\nfunction error() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.error(_.formatArgsAsString(args));\n } else {\n console.error.apply(console, args);\n }\n}\n\nfunction info() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.info(_.formatArgsAsString(args));\n } else {\n console.info.apply(console, args);\n }\n}\n\nfunction log() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.log(_.formatArgsAsString(args));\n } else {\n console.log.apply(console, args);\n }\n}\n\n/* eslint-enable no-console */\n\nmodule.exports = {\n error: error,\n info: info,\n log: log\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/logger.js\n// module id = 13\n// module chunks = 0","// Console-polyfill. MIT license.\n// https://github.com/paulmillr/console-polyfill\n// Make it safe to do console.log() always.\n(function(global) {\n 'use strict';\n if (!global.console) {\n global.console = {};\n }\n var con = global.console;\n var prop, method;\n var dummy = function() {};\n var properties = ['memory'];\n var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' +\n 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' +\n 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',');\n while (prop = properties.pop()) if (!con[prop]) con[prop] = {};\n while (method = methods.pop()) if (!con[method]) con[method] = dummy;\n // Using `this` for web workers & supports Browserify / Webpack.\n})(typeof window === 'undefined' ? this : window);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/console-polyfill/index.js\n// module id = 14\n// module chunks = 0","'use strict';\n\n// This detection.js module is used to encapsulate any ugly browser/feature\n// detection we may need to do.\n\n// Figure out which version of IE we're using, if any.\n// This is gleaned from http://stackoverflow.com/questions/5574842/best-way-to-check-for-ie-less-than-9-in-javascript-without-library\n// Will return an integer on IE (i.e. 8)\n// Will return undefined otherwise\nfunction getIEVersion() {\n\tvar undef;\n\tif (!document) {\n\t\treturn undef;\n\t}\n\n var v = 3,\n div = document.createElement('div'),\n all = div.getElementsByTagName('i');\n\n while (\n div.innerHTML = '',\n all[0]\n );\n\n return v > 4 ? v : undef;\n}\n\nvar Detection = {\n ieVersion: getIEVersion\n};\n\nmodule.exports = Detection;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/detection.js\n// module id = 15\n// module chunks = 0","'use strict';\n\nfunction captureUncaughtExceptions(window, handler, shim) {\n if (!window) { return; }\n var oldOnError;\n\n if (typeof handler._rollbarOldOnError === 'function') {\n oldOnError = handler._rollbarOldOnError;\n } else if (window.onerror && !window.onerror.belongsToShim) {\n oldOnError = window.onerror;\n handler._rollbarOldOnError = oldOnError;\n }\n\n var fn = function() {\n var args = Array.prototype.slice.call(arguments, 0);\n _rollbarWindowOnError(window, handler, oldOnError, args);\n };\n fn.belongsToShim = shim;\n window.onerror = fn;\n}\n\nfunction _rollbarWindowOnError(window, r, old, args) {\n if (window._rollbarWrappedError) {\n if (!args[4]) {\n args[4] = window._rollbarWrappedError;\n }\n if (!args[5]) {\n args[5] = window._rollbarWrappedError._rollbarContext;\n }\n window._rollbarWrappedError = null;\n }\n\n r.handleUncaughtException.apply(r, args);\n if (old) {\n old.apply(window, args);\n }\n}\n\nfunction captureUnhandledRejections(window, handler, shim) {\n if (!window) { return; }\n\n if (typeof window._rollbarURH === 'function' && window._rollbarURH.belongsToShim) {\n window.removeEventListener('unhandledrejection', window._rollbarURH);\n }\n\n var rejectionHandler = function (evt) {\n var reason, promise, detail;\n try {\n reason = evt.reason;\n } catch (e) {\n reason = undefined;\n }\n try {\n promise = evt.promise;\n } catch (e) {\n promise = '[unhandledrejection] error getting `promise` from event';\n }\n try {\n detail = evt.detail;\n if (!reason && detail) {\n reason = detail.reason;\n promise = detail.promise;\n }\n } catch (e) {\n detail = '[unhandledrejection] error getting `detail` from event';\n }\n if (!reason) {\n reason = '[unhandledrejection] error getting `reason` from event';\n }\n\n if (handler && handler.handleUnhandledRejection) {\n handler.handleUnhandledRejection(reason, promise);\n }\n };\n rejectionHandler.belongsToShim = shim;\n window._rollbarURH = rejectionHandler;\n window.addEventListener('unhandledrejection', rejectionHandler);\n}\n\nfunction wrapGlobals(window, handler, shim) {\n if (!window) { return; }\n // Adapted from https://github.com/bugsnag/bugsnag-js\n var globals = 'EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload'.split(',');\n var i, global;\n for (i = 0; i < globals.length; ++i) {\n global = globals[i];\n\n if (window[global] && window[global].prototype) {\n _extendListenerPrototype(handler, window[global].prototype, shim);\n }\n }\n}\n\nfunction _extendListenerPrototype(handler, prototype, shim) {\n if (prototype.hasOwnProperty && prototype.hasOwnProperty('addEventListener')) {\n var oldAddEventListener = prototype.addEventListener;\n while (oldAddEventListener._rollbarOldAdd && oldAddEventListener.belongsToShim) {\n oldAddEventListener = oldAddEventListener._rollbarOldAdd;\n }\n var addFn = function(event, callback, bubble) {\n oldAddEventListener.call(this, event, handler.wrap(callback), bubble);\n };\n addFn._rollbarOldAdd = oldAddEventListener;\n addFn.belongsToShim = shim;\n prototype.addEventListener = addFn;\n\n var oldRemoveEventListener = prototype.removeEventListener;\n while (oldRemoveEventListener._rollbarOldRemove && oldRemoveEventListener.belongsToShim) {\n oldRemoveEventListener = oldRemoveEventListener._rollbarOldRemove;\n }\n var removeFn = function(event, callback, bubble) {\n oldRemoveEventListener.call(this, event, callback && callback._rollbar_wrapped || callback, bubble);\n };\n removeFn._rollbarOldRemove = oldRemoveEventListener;\n removeFn.belongsToShim = shim;\n prototype.removeEventListener = removeFn;\n }\n}\n\nmodule.exports = {\n captureUncaughtExceptions: captureUncaughtExceptions,\n captureUnhandledRejections: captureUnhandledRejections,\n wrapGlobals: wrapGlobals\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/globalSetup.js\n// module id = 16\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar logger = require('./logger');\n\n/*\n * accessToken may be embedded in payload but that should not\n * be assumed\n *\n * options: {\n * hostname\n * protocol\n * path\n * port\n * method\n * }\n *\n * params is an object containing key/value pairs. These\n * will be appended to the path as 'key=value&key=value'\n *\n * payload is an unserialized object\n */\n\nfunction get(accessToken, options, params, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n _.addParamsAndAccessTokenToPath(accessToken, options, params);\n\n var method = 'GET';\n var url = _.formatUrl(options);\n _makeRequest(accessToken, url, method, null, callback, requestFactory);\n}\n\nfunction post(accessToken, options, payload, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!payload) {\n return callback(new Error('Cannot send empty request'));\n }\n\n var stringifyResult = _.stringify(payload);\n if (stringifyResult.error) {\n return callback(stringifyResult.error);\n }\n\n var writeData = stringifyResult.value;\n var method = 'POST';\n var url = _.formatUrl(options);\n _makeRequest(accessToken, url, method, writeData, callback, requestFactory);\n}\n\nfunction _makeRequest(accessToken, url, method, data, callback, requestFactory) {\n var request;\n if (requestFactory) {\n request = requestFactory();\n } else {\n request = _createXMLHTTPObject();\n }\n if (!request) {\n // Give up, no way to send requests\n return callback(new Error('No way to send a request'));\n }\n try {\n try {\n var onreadystatechange = function() {\n try {\n if (onreadystatechange && request.readyState === 4) {\n onreadystatechange = undefined;\n\n var parseResponse = _.jsonParse(request.responseText);\n if (_isSuccess(request)) {\n callback(parseResponse.error, parseResponse.value);\n return;\n } else if (_isNormalFailure(request)) {\n if (request.status === 403) {\n // likely caused by using a server access token\n var message = parseResponse.value && parseResponse.value.message;\n logger.error(message);\n }\n // return valid http status codes\n callback(new Error(String(request.status)));\n } else {\n // IE will return a status 12000+ on some sort of connection failure,\n // so we return a blank error\n // http://msdn.microsoft.com/en-us/library/aa383770%28VS.85%29.aspx\n var msg = 'XHR response had no status code (likely connection failure)';\n callback(_newRetriableError(msg));\n }\n }\n } catch (ex) {\n //jquery source mentions firefox may error out while accessing the\n //request members if there is a network error\n //https://github.com/jquery/jquery/blob/a938d7b1282fc0e5c52502c225ae8f0cef219f0a/src/ajax/xhr.js#L111\n var exc;\n if (ex && ex.stack) {\n exc = ex;\n } else {\n exc = new Error(ex);\n }\n callback(exc);\n }\n };\n\n request.open(method, url, true);\n if (request.setRequestHeader) {\n request.setRequestHeader('Content-Type', 'application/json');\n request.setRequestHeader('X-Rollbar-Access-Token', accessToken);\n }\n request.onreadystatechange = onreadystatechange;\n request.send(data);\n } catch (e1) {\n // Sending using the normal xmlhttprequest object didn't work, try XDomainRequest\n if (typeof XDomainRequest !== 'undefined') {\n\n // Assume we are in a really old browser which has a bunch of limitations:\n // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\n // Extreme paranoia: if we have XDomainRequest then we have a window, but just in case\n if (!window || !window.location) {\n return callback(new Error('No window available during request, unknown environment'));\n }\n\n // If the current page is http, try and send over http\n if (window.location.href.substring(0, 5) === 'http:' && url.substring(0, 5) === 'https') {\n url = 'http' + url.substring(5);\n }\n\n var xdomainrequest = new XDomainRequest();\n xdomainrequest.onprogress = function() {};\n xdomainrequest.ontimeout = function() {\n var msg = 'Request timed out';\n var code = 'ETIMEDOUT';\n callback(_newRetriableError(msg, code));\n };\n xdomainrequest.onerror = function() {\n callback(new Error('Error during request'));\n };\n xdomainrequest.onload = function() {\n var parseResponse = _.jsonParse(xdomainrequest.responseText);\n callback(parseResponse.error, parseResponse.value);\n };\n xdomainrequest.open(method, url, true);\n xdomainrequest.send(data);\n } else {\n callback(new Error('Cannot find a method to transport a request'));\n }\n }\n } catch (e2) {\n callback(e2);\n }\n}\n\nfunction _createXMLHTTPObject() {\n /* global ActiveXObject:false */\n\n var factories = [\n function () {\n return new XMLHttpRequest();\n },\n function () {\n return new ActiveXObject('Msxml2.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Msxml3.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Microsoft.XMLHTTP');\n }\n ];\n var xmlhttp;\n var i;\n var numFactories = factories.length;\n for (i = 0; i < numFactories; i++) {\n /* eslint-disable no-empty */\n try {\n xmlhttp = factories[i]();\n break;\n } catch (e) {\n // pass\n }\n /* eslint-enable no-empty */\n }\n return xmlhttp;\n}\n\nfunction _isSuccess(r) {\n return r && r.status && r.status === 200;\n}\n\nfunction _isNormalFailure(r) {\n return r && _.isType(r.status, 'number') && r.status >= 400 && r.status < 600;\n}\n\nfunction _newRetriableError(message, code) {\n var err = new Error(message);\n err.code = code || 'ENOTFOUND';\n return err;\n}\n\nmodule.exports = {\n get: get,\n post: post\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transport.js\n// module id = 17\n// module chunks = 0","'use strict';\n\n// See https://nodejs.org/docs/latest/api/url.html\nfunction parse(url) {\n var result = {\n protocol: null, auth: null, host: null, path: null,\n hash: null, href: url, hostname: null, port: null,\n pathname: null, search: null, query: null\n };\n\n var i, last;\n i = url.indexOf('//');\n if (i !== -1) {\n result.protocol = url.substring(0,i);\n last = i+2;\n } else {\n last = 0;\n }\n \n i = url.indexOf('@', last);\n if (i !== -1) {\n result.auth = url.substring(last, i);\n last = i+1;\n }\n\n i = url.indexOf('/', last);\n if (i === -1) {\n i = url.indexOf('?', last);\n if (i === -1) {\n i = url.indexOf('#', last);\n if (i === -1) {\n result.host = url.substring(last);\n } else {\n result.host = url.substring(last, i);\n result.hash = url.substring(i);\n }\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n return result;\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n\n i = url.indexOf('#', last);\n if (i === -1) {\n result.path = url.substring(last);\n } else {\n result.path = url.substring(last, i);\n result.hash = url.substring(i);\n }\n\n if (result.path) {\n var pathParts = result.path.split('?');\n result.pathname = pathParts[0];\n result.query = pathParts[1];\n result.search = result.query ? '?' + result.query : null;\n }\n return result;\n}\n\nmodule.exports = {\n parse: parse\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/url.js\n// module id = 18\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar errorParser = require('./errorParser');\nvar logger = require('./logger');\n\nfunction handleItemWithError(item, options, callback) {\n item.data = item.data || {};\n if (item.err) {\n try {\n item.stackInfo = item.err._savedStackTrace || errorParser.parse(item.err);\n } catch (e)\n /* istanbul ignore next */\n {\n logger.error('Error while parsing the error object.', e);\n item.message = item.err.message || item.err.description || item.message || String(item.err);\n delete item.err;\n }\n }\n callback(null, item);\n}\n\nfunction ensureItemHasSomethingToSay(item, options, callback) {\n if (!item.message && !item.stackInfo && !item.custom) {\n callback(new Error('No message, stack info, or custom data'), null);\n }\n callback(null, item);\n}\n\nfunction addBaseInfo(item, options, callback) {\n var environment = (options.payload && options.payload.environment) || options.environment;\n item.data = _.extend(true, {}, item.data, {\n environment: environment,\n level: item.level,\n endpoint: options.endpoint,\n platform: 'browser',\n framework: 'browser-js',\n language: 'javascript',\n server: {},\n uuid: item.uuid,\n notifier: {\n name: 'rollbar-browser-js',\n version: options.version\n }\n });\n callback(null, item);\n}\n\nfunction addRequestInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.location) {\n return callback(null, item);\n }\n var remoteString = '$remote_ip';\n if (!options.captureIp) {\n remoteString = null;\n } else if (options.captureIp !== true) {\n remoteString += '_anonymize';\n }\n _.set(item, 'data.request', {\n url: window.location.href,\n query_string: window.location.search,\n user_ip: remoteString\n });\n callback(null, item);\n };\n}\n\nfunction addClientInfo(window) {\n return function(item, options, callback) {\n if (!window) {\n return callback(null, item);\n }\n var nav = window.navigator || {};\n var scr = window.screen || {};\n _.set(item, 'data.client', {\n runtime_ms: item.timestamp - window._rollbarStartTime,\n timestamp: Math.round(item.timestamp / 1000),\n javascript: {\n browser: nav.userAgent,\n language: nav.language,\n cookie_enabled: nav.cookieEnabled,\n screen: {\n width: scr.width,\n height: scr.height\n }\n }\n });\n callback(null, item);\n };\n}\n\nfunction addPluginInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.navigator) {\n return callback(null, item);\n }\n var plugins = [];\n var navPlugins = window.navigator.plugins || [];\n var cur;\n for (var i=0, l=navPlugins.length; i < l; ++i) {\n cur = navPlugins[i];\n plugins.push({name: cur.name, description: cur.description});\n }\n _.set(item, 'data.client.javascript.plugins', plugins);\n callback(null, item);\n };\n}\n\nfunction addBody(item, options, callback) {\n if (item.stackInfo) {\n addBodyTrace(item, options, callback);\n } else {\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction addBodyMessage(item, options, callback) {\n var message = item.message;\n var custom = item.custom;\n\n if (!message) {\n if (custom) {\n var scrubFields = options.scrubFields;\n var messageResult = _.stringify(_.scrub(custom, scrubFields));\n message = messageResult.error || messageResult.value || '';\n } else {\n message = '';\n }\n }\n var result = {\n body: message\n };\n\n if (custom) {\n result.extra = _.extend(true, {}, custom);\n }\n\n _.set(item, 'data.body', {message: result});\n callback(null, item);\n}\n\n\nfunction addBodyTrace(item, options, callback) {\n var description = item.data.description;\n var stackInfo = item.stackInfo;\n var custom = item.custom;\n\n var guess = errorParser.guessErrorClass(stackInfo.message);\n var className = stackInfo.name || guess[0];\n var message = guess[1];\n var trace = {\n exception: {\n 'class': className,\n message: message\n }\n };\n\n if (description) {\n trace.exception.description = description;\n }\n\n // Transform a TraceKit stackInfo object into a Rollbar trace\n var stack = stackInfo.stack;\n if (stack && stack.length === 0 && item._unhandledStackInfo && item._unhandledStackInfo.stack) {\n stack = item._unhandledStackInfo.stack;\n }\n if (stack) {\n if (stack.length === 0) {\n trace.exception.stack = stackInfo.rawStack;\n trace.exception.raw = String(stackInfo.rawException);\n }\n var stackFrame;\n var frame;\n var code;\n var pre;\n var post;\n var contextLength;\n var i, mid;\n\n trace.frames = [];\n for (i = 0; i < stack.length; ++i) {\n stackFrame = stack[i];\n frame = {\n filename: stackFrame.url ? _.sanitizeUrl(stackFrame.url) : '(unknown)',\n lineno: stackFrame.line || null,\n method: (!stackFrame.func || stackFrame.func === '?') ? '[anonymous]' : stackFrame.func,\n colno: stackFrame.column\n };\n if (frame.method && frame.method.endsWith && frame.method.endsWith('_rollbar_wrapped')) {\n continue;\n }\n\n code = pre = post = null;\n contextLength = stackFrame.context ? stackFrame.context.length : 0;\n if (contextLength) {\n mid = Math.floor(contextLength / 2);\n pre = stackFrame.context.slice(0, mid);\n code = stackFrame.context[mid];\n post = stackFrame.context.slice(mid);\n }\n\n if (code) {\n frame.code = code;\n }\n\n if (pre || post) {\n frame.context = {};\n if (pre && pre.length) {\n frame.context.pre = pre;\n }\n if (post && post.length) {\n frame.context.post = post;\n }\n }\n\n if (stackFrame.args) {\n frame.args = stackFrame.args;\n }\n\n trace.frames.push(frame);\n }\n\n // NOTE(cory): reverse the frames since rollbar.com expects the most recent call last\n trace.frames.reverse();\n\n if (custom) {\n trace.extra = _.extend(true, {}, custom);\n }\n _.set(item, 'data.body', {trace: trace});\n callback(null, item);\n } else {\n item.message = className + ': ' + message;\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction scrubPayload(item, options, callback) {\n var scrubFields = options.scrubFields;\n item.data = _.scrub(item.data, scrubFields);\n callback(null, item);\n}\n\nmodule.exports = {\n handleItemWithError: handleItemWithError,\n ensureItemHasSomethingToSay: ensureItemHasSomethingToSay,\n addBaseInfo: addBaseInfo,\n addRequestInfo: addRequestInfo,\n addClientInfo: addClientInfo,\n addPluginInfo: addPluginInfo,\n addBody: addBody,\n scrubPayload: scrubPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transforms.js\n// module id = 19\n// module chunks = 0","'use strict';\n\nvar ErrorStackParser = require('error-stack-parser');\n\nvar UNKNOWN_FUNCTION = '?';\nvar ERR_CLASS_REGEXP = new RegExp('^(([a-zA-Z0-9-_$ ]*): *)?(Uncaught )?([a-zA-Z0-9-_$ ]*): ');\n\nfunction guessFunctionName() {\n return UNKNOWN_FUNCTION;\n}\n\n\nfunction gatherContext() {\n return null;\n}\n\n\nfunction Frame(stackFrame) {\n var data = {};\n\n data._stackFrame = stackFrame;\n\n data.url = stackFrame.fileName;\n data.line = stackFrame.lineNumber;\n data.func = stackFrame.functionName;\n data.column = stackFrame.columnNumber;\n data.args = stackFrame.args;\n\n data.context = gatherContext(data.url, data.line);\n\n return data;\n}\n\n\nfunction Stack(exception) {\n function getStack() {\n var parserStack = [];\n var exc;\n\n if (!exception.stack) {\n try {\n throw exception;\n } catch (e) {\n exc = e;\n }\n } else {\n exc = exception;\n }\n\n try {\n parserStack = ErrorStackParser.parse(exc);\n } catch(e) {\n parserStack = [];\n }\n\n var stack = [];\n\n for (var i = 0; i < parserStack.length; i++) {\n stack.push(new Frame(parserStack[i]));\n }\n\n return stack;\n }\n\n return {\n stack: getStack(),\n message: exception.message,\n name: exception.name,\n rawStack: exception.stack,\n rawException: exception\n };\n}\n\n\nfunction parse(e) {\n return new Stack(e);\n}\n\n\nfunction guessErrorClass(errMsg) {\n if (!errMsg || !errMsg.match) {\n return ['Unknown error. There was no error message to display.', ''];\n }\n var errClassMatch = errMsg.match(ERR_CLASS_REGEXP);\n var errClass = '(unknown)';\n\n if (errClassMatch) {\n errClass = errClassMatch[errClassMatch.length - 1];\n errMsg = errMsg.replace((errClassMatch[errClassMatch.length - 2] || '') + errClass + ':', '');\n errMsg = errMsg.replace(/(^[\\s]+|[\\s]+$)/g, '');\n }\n return [errClass, errMsg];\n}\n\n\nmodule.exports = {\n guessFunctionName: guessFunctionName,\n guessErrorClass: guessErrorClass,\n gatherContext: gatherContext,\n parse: parse,\n Stack: Stack,\n Frame: Frame\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/errorParser.js\n// module id = 20\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = locationParts[0] === 'eval' ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/error-stack-parser.js\n// module id = 21\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stackframe', [], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.StackFrame = factory();\n }\n}(this, function () {\n 'use strict';\n function _isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n function StackFrame(functionName, args, fileName, lineNumber, columnNumber, source) {\n if (functionName !== undefined) {\n this.setFunctionName(functionName);\n }\n if (args !== undefined) {\n this.setArgs(args);\n }\n if (fileName !== undefined) {\n this.setFileName(fileName);\n }\n if (lineNumber !== undefined) {\n this.setLineNumber(lineNumber);\n }\n if (columnNumber !== undefined) {\n this.setColumnNumber(columnNumber);\n }\n if (source !== undefined) {\n this.setSource(source);\n }\n }\n\n StackFrame.prototype = {\n getFunctionName: function () {\n return this.functionName;\n },\n setFunctionName: function (v) {\n this.functionName = String(v);\n },\n\n getArgs: function () {\n return this.args;\n },\n setArgs: function (v) {\n if (Object.prototype.toString.call(v) !== '[object Array]') {\n throw new TypeError('Args must be an Array');\n }\n this.args = v;\n },\n\n // NOTE: Property name may be misleading as it includes the path,\n // but it somewhat mirrors V8's JavaScriptStackTraceApi\n // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's\n // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14\n getFileName: function () {\n return this.fileName;\n },\n setFileName: function (v) {\n this.fileName = String(v);\n },\n\n getLineNumber: function () {\n return this.lineNumber;\n },\n setLineNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Line Number must be a Number');\n }\n this.lineNumber = Number(v);\n },\n\n getColumnNumber: function () {\n return this.columnNumber;\n },\n setColumnNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Column Number must be a Number');\n }\n this.columnNumber = Number(v);\n },\n\n getSource: function () {\n return this.source;\n },\n setSource: function (v) {\n this.source = String(v);\n },\n\n toString: function() {\n var functionName = this.getFunctionName() || '{anonymous}';\n var args = '(' + (this.getArgs() || []).join(',') + ')';\n var fileName = this.getFileName() ? ('@' + this.getFileName()) : '';\n var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : '';\n var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : '';\n return functionName + args + fileName + lineNumber + columnNumber;\n }\n };\n\n return StackFrame;\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/~/stackframe/stackframe.js\n// module id = 22\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction itemToPayload(item, options, callback) {\n var payloadOptions = options.payload || {};\n if (payloadOptions.body) {\n delete payloadOptions.body;\n }\n\n var data = _.extend(true, {}, item.data, payloadOptions);\n if (item._isUncaught) {\n data._isUncaught = true;\n }\n if (item._originalArgs) {\n data._originalArgs = item._originalArgs;\n }\n callback(null, data);\n}\n\nfunction addTelemetryData(item, options, callback) {\n if (item.telemetryEvents) {\n _.set(item, 'data.body.telemetry', item.telemetryEvents);\n }\n callback(null, item);\n}\n\nfunction addMessageWithError(item, options, callback) {\n if (!item.message) {\n callback(null, item);\n return;\n }\n var tracePath = 'data.body.trace_chain.0';\n var trace = _.get(item, tracePath);\n if (!trace) {\n tracePath = 'data.body.trace';\n trace = _.get(item, tracePath);\n }\n if (trace) {\n if (!(trace.exception && trace.exception.description)) {\n _.set(item, tracePath+'.exception.description', item.message);\n callback(null, item);\n return;\n }\n var extra = _.get(item, tracePath+'.extra') || {};\n var newExtra = _.extend(true, {}, extra, {message: item.message});\n _.set(item, tracePath+'.extra', newExtra);\n }\n callback(null, item);\n}\n\nfunction userTransform(logger) {\n return function(item, options, callback) {\n var newItem = _.extend(true, {}, item);\n try {\n if (_.isFunction(options.transform)) {\n options.transform(newItem.data);\n }\n } catch (e) {\n options.transform = null;\n logger.error('Error while calling custom transform() function. Removing custom transform().', e);\n callback(null, item);\n return;\n }\n callback(null, newItem);\n }\n}\n\nfunction addConfigToPayload(item, options, callback) {\n if (!options.sendConfig) {\n return callback(null, item);\n }\n var configKey = '_rollbarConfig';\n var custom = _.get(item, 'data.custom') || {};\n custom[configKey] = options;\n item.data.custom = custom;\n callback(null, item);\n}\n\nmodule.exports = {\n itemToPayload: itemToPayload,\n addTelemetryData: addTelemetryData,\n addMessageWithError: addMessageWithError,\n userTransform: userTransform,\n addConfigToPayload: addConfigToPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/transforms.js\n// module id = 23\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\n\nfunction checkIgnore(item, settings) {\n if (_.get(settings, 'plugins.jquery.ignoreAjaxErrors')) {\n return !_.get(item, 'body.message.extra.isAjax');\n }\n return true;\n}\n\nmodule.exports = {\n checkIgnore: checkIgnore\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/predicates.js\n// module id = 24\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction checkLevel(item, settings) {\n var level = item.level;\n var levelVal = _.LEVELS[level] || 0;\n var reportLevel = settings.reportLevel;\n var reportLevelVal = _.LEVELS[reportLevel] || 0;\n\n if (levelVal < reportLevelVal) {\n return false;\n }\n return true;\n}\n\nfunction userCheckIgnore(logger) {\n return function(item, settings) {\n var isUncaught = !!item._isUncaught;\n delete item._isUncaught;\n var args = item._originalArgs;\n delete item._originalArgs;\n try {\n if (_.isFunction(settings.onSendCallback)) {\n settings.onSendCallback(isUncaught, args, item);\n }\n } catch (e) {\n settings.onSendCallback = null;\n logger.error('Error while calling onSendCallback, removing', e);\n }\n try {\n if (_.isFunction(settings.checkIgnore) && settings.checkIgnore(isUncaught, args, item)) {\n return false;\n }\n } catch (e) {\n settings.checkIgnore = null;\n logger.error('Error while calling custom checkIgnore(), removing', e);\n }\n return true;\n }\n}\n\nfunction urlIsNotBlacklisted(logger) {\n return function(item, settings) {\n return !urlIsOnAList(item, settings, 'blacklist', logger);\n }\n}\n\nfunction urlIsWhitelisted(logger) {\n return function(item, settings) {\n return urlIsOnAList(item, settings, 'whitelist', logger);\n }\n}\n\nfunction urlIsOnAList(item, settings, whiteOrBlack, logger) {\n // whitelist is the default\n var black = false;\n if (whiteOrBlack === 'blacklist') {\n black = true;\n }\n var list, trace, frame, filename, frameLength, url, listLength, urlRegex;\n var i, j;\n\n try {\n list = black ? settings.hostBlackList : settings.hostWhiteList;\n listLength = list && list.length;\n trace = _.get(item, 'body.trace');\n\n // These two checks are important to come first as they are defaults\n // in case the list is missing or the trace is missing or not well-formed\n if (!list || listLength === 0) {\n return !black;\n }\n if (!trace || !trace.frames || trace.frames.length === 0) {\n return !black;\n }\n\n frameLength = trace.frames.length;\n for (i = 0; i < frameLength; i++) {\n frame = trace.frames[i];\n filename = frame.filename;\n\n if (!_.isType(filename, 'string')) {\n return !black;\n }\n\n for (j = 0; j < listLength; j++) {\n url = list[j];\n urlRegex = new RegExp(url);\n\n if (urlRegex.test(filename)) {\n return true;\n }\n }\n }\n } catch (e)\n /* istanbul ignore next */\n {\n if (black) {\n settings.hostBlackList = null;\n } else {\n settings.hostWhiteList = null;\n }\n var listName = black ? 'hostBlackList' : 'hostWhiteList';\n logger.error('Error while reading your configuration\\'s ' + listName + ' option. Removing custom ' + listName + '.', e);\n return !black;\n }\n return false;\n}\n\nfunction messageIsIgnored(logger) {\n return function(item, settings) {\n var exceptionMessage, i, ignoredMessages,\n len, messageIsIgnored, rIgnoredMessage,\n body, traceMessage, bodyMessage;\n\n try {\n messageIsIgnored = false;\n ignoredMessages = settings.ignoredMessages;\n\n if (!ignoredMessages || ignoredMessages.length === 0) {\n return true;\n }\n\n body = item.body;\n traceMessage = _.get(body, 'trace.exception.message');\n bodyMessage = _.get(body, 'message.body');\n\n exceptionMessage = traceMessage || bodyMessage;\n\n if (!exceptionMessage){\n return true;\n }\n\n len = ignoredMessages.length;\n for (i = 0; i < len; i++) {\n rIgnoredMessage = new RegExp(ignoredMessages[i], 'gi');\n messageIsIgnored = rIgnoredMessage.test(exceptionMessage);\n\n if (messageIsIgnored) {\n break;\n }\n }\n } catch(e)\n /* istanbul ignore next */\n {\n settings.ignoredMessages = null;\n logger.error('Error while reading your configuration\\'s ignoredMessages option. Removing custom ignoredMessages.');\n }\n\n return !messageIsIgnored;\n }\n}\n\nmodule.exports = {\n checkLevel: checkLevel,\n userCheckIgnore: userCheckIgnore,\n urlIsNotBlacklisted: urlIsNotBlacklisted,\n urlIsWhitelisted: urlIsWhitelisted,\n messageIsIgnored: messageIsIgnored\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/predicates.js\n// module id = 25\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar urlparser = require('./url');\nvar domUtil = require('./domUtility');\n\nvar defaults = {\n network: true,\n networkResponseHeaders: false,\n networkResponseBody: false,\n networkRequestBody: false,\n log: true,\n dom: true,\n navigation: true,\n connectivity: true\n};\n\nfunction replace(obj, name, replacement, replacements, type) {\n var orig = obj[name];\n obj[name] = replacement(orig);\n if (replacements) {\n replacements[type].push([obj, name, orig]);\n }\n}\n\nfunction restore(replacements, type) {\n var b;\n while (replacements[type].length) {\n b = replacements[type].shift();\n b[0][b[1]] = b[2];\n }\n}\n\nfunction Instrumenter(options, telemeter, rollbar, _window, _document) {\n var autoInstrument = options.autoInstrument;\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.extend(true, {}, defaults, autoInstrument);\n }\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n this.telemetryScrubber = options.telemetryScrubber;\n this.telemeter = telemeter;\n this.rollbar = rollbar;\n this._window = _window || {};\n this._document = _document || {};\n this.replacements = {\n network: [],\n log: [],\n navigation: [],\n connectivity: []\n };\n this.eventRemovers = {\n dom: [],\n connectivity: []\n };\n\n this._location = this._window.location;\n this._lastHref = this._location && this._location.href;\n}\n\nInstrumenter.prototype.configure = function(options) {\n var autoInstrument = options.autoInstrument;\n var oldSettings = _.extend(true, {}, this.autoInstrument);\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.extend(true, {}, defaults, autoInstrument);\n }\n this.instrument(oldSettings);\n if (options.scrubTelemetryInputs !== undefined) {\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n }\n if (options.telemetryScrubber !== undefined) {\n this.telemetryScrubber = options.telemetryScrubber;\n }\n};\n\nInstrumenter.prototype.instrument = function(oldSettings) {\n if (this.autoInstrument.network && !(oldSettings && oldSettings.network)) {\n this.instrumentNetwork();\n } else if (!this.autoInstrument.network && oldSettings && oldSettings.network) {\n this.deinstrumentNetwork();\n }\n\n if (this.autoInstrument.log && !(oldSettings && oldSettings.log)) {\n this.instrumentConsole();\n } else if (!this.autoInstrument.log && oldSettings && oldSettings.log) {\n this.deinstrumentConsole();\n }\n\n if (this.autoInstrument.dom && !(oldSettings && oldSettings.dom)) {\n this.instrumentDom();\n } else if (!this.autoInstrument.dom && oldSettings && oldSettings.dom) {\n this.deinstrumentDom();\n }\n\n if (this.autoInstrument.navigation && !(oldSettings && oldSettings.navigation)) {\n this.instrumentNavigation();\n } else if (!this.autoInstrument.navigation && oldSettings && oldSettings.navigation) {\n this.deinstrumentNavigation();\n }\n\n if (this.autoInstrument.connectivity && !(oldSettings && oldSettings.connectivity)) {\n this.instrumentConnectivity();\n } else if (!this.autoInstrument.connectivity && oldSettings && oldSettings.connectivity) {\n this.deinstrumentConnectivity();\n }\n};\n\nInstrumenter.prototype.deinstrumentNetwork = function() {\n restore(this.replacements, 'network');\n};\n\nInstrumenter.prototype.instrumentNetwork = function() {\n var self = this;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && _.isFunction(xhr[prop])) {\n replace(xhr, prop, function(orig) {\n return self.rollbar.wrap(orig);\n });\n }\n }\n\n if ('XMLHttpRequest' in this._window) {\n var xhrp = this._window.XMLHttpRequest.prototype;\n replace(xhrp, 'open', function(orig) {\n return function(method, url) {\n if (_.isType(url, 'string')) {\n this.__rollbar_xhr = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'network');\n\n replace(xhrp, 'send', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(data) {\n /* eslint-enable no-unused-vars */\n var xhr = this;\n\n function onreadystatechangeHandler() {\n if (xhr.__rollbar_xhr && (xhr.readyState === 1 || xhr.readyState === 4)) {\n if (xhr.__rollbar_xhr.status_code === null) {\n xhr.__rollbar_xhr.status_code = 0;\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n requestData = data;\n }\n xhr.__rollbar_event = self.telemeter.captureNetwork(xhr.__rollbar_xhr, 'xhr', undefined, requestData);\n }\n if (xhr.readyState === 1) {\n xhr.__rollbar_xhr.start_time_ms = _.now();\n } else {\n xhr.__rollbar_xhr.end_time_ms = _.now();\n\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n var header, i;\n if (headersConfig === true) {\n var allHeaders = xhr.getAllResponseHeaders();\n if (allHeaders) {\n var arr = allHeaders.trim().split(/[\\r\\n]+/);\n var parts, value;\n for (i=0; i < arr.length; i++) {\n parts = arr[i].split(': ');\n header = parts.shift();\n value = parts.join(': ');\n headers[header] = value;\n }\n }\n } else {\n for (i=0; i < headersConfig.length; i++) {\n header = headersConfig[i];\n headers[header] = xhr.getResponseHeader(header);\n }\n }\n } catch (e) {\n /* we ignore the errors here that could come from different\n * browser issues with the xhr methods */\n }\n }\n var body = null;\n if (self.autoInstrument.networkResponseBody) {\n try {\n body = xhr.responseText;\n } catch (e) {\n /* ignore errors from reading responseText */\n }\n }\n var response = null;\n if (body || headers) {\n response = {};\n if (body) {\n response.body = body;\n }\n if (headers) {\n response.headers = headers;\n }\n }\n if (response) {\n xhr.__rollbar_xhr.response = response;\n }\n }\n try {\n var code = xhr.status;\n code = code === 1223 ? 204 : code;\n xhr.__rollbar_xhr.status_code = code;\n xhr.__rollbar_event.level = self.telemeter.levelFromStatus(code);\n } catch (e) {\n /* ignore possible exception from xhr.status */\n }\n }\n }\n\n wrapProp('onload', xhr);\n wrapProp('onerror', xhr);\n wrapProp('onprogress', xhr);\n\n if ('onreadystatechange' in xhr && _.isFunction(xhr.onreadystatechange)) {\n replace(xhr, 'onreadystatechange', function(orig) {\n return self.rollbar.wrap(orig, undefined, onreadystatechangeHandler);\n });\n } else {\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n return orig.apply(this, arguments);\n }\n }, this.replacements, 'network');\n }\n\n if ('fetch' in this._window) {\n replace(this._window, 'fetch', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(fn, t) {\n /* eslint-enable no-unused-vars */\n var args = new Array(arguments.length);\n for (var i=0, len=args.length; i < len; i++) {\n args[i] = arguments[i];\n }\n var input = args[0];\n var method = 'GET';\n var url;\n if (_.isType(input, 'string')) {\n url = input;\n } else if (input) {\n url = input.url;\n if (input.method) {\n method = input.method;\n }\n }\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n var metadata = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n if (args[1] && args[1].body) {\n requestData = args[1].body;\n } else if (args[0] && !_.isType(args[0], 'string') && args[0].body) {\n requestData = args[0].body;\n }\n }\n self.telemeter.captureNetwork(metadata, 'fetch', undefined, requestData);\n return orig.apply(this, args).then(function (resp) {\n metadata.end_time_ms = _.now();\n metadata.status_code = resp.status;\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n if (headersConfig === true) {\n // This is unsupported in IE so we can't do it\n /*\n var allHeaders = resp.headers.entries();\n for (var pair of allHeaders) {\n headers[pair[0]] = pair[1];\n }\n */\n } else {\n for (var i=0; i < headersConfig.length; i++) {\n var header = headersConfig[i];\n headers[header] = resp.headers.get(header);\n }\n }\n } catch (e) {\n /* ignore probable IE errors */\n }\n }\n var response = null;\n if (headers) {\n response = {\n headers: headers\n };\n }\n if (response) {\n metadata.response = response;\n }\n return resp;\n });\n };\n }, this.replacements, 'network');\n }\n};\n\nInstrumenter.prototype.deinstrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n var b;\n while (this.replacements['log'].length) {\n b = this.replacements['log'].shift();\n this._window.console[b[0]] = b[1];\n }\n};\n\nInstrumenter.prototype.instrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n\n var self = this;\n var c = this._window.console;\n\n function wrapConsole(method) {\n var orig = c[method];\n var origConsole = c;\n var level = method === 'warn' ? 'warning' : method;\n c[method] = function() {\n var args = Array.prototype.slice.call(arguments);\n var message = _.formatArgsAsString(args);\n self.telemeter.captureLog(message, level);\n if (orig) {\n Function.prototype.apply.call(orig, origConsole, args);\n }\n };\n self.replacements['log'].push([method, orig]);\n }\n var methods = ['debug','info','warn','error','log'];\n for (var i=0, len=methods.length; i < len; i++) {\n wrapConsole(methods[i]);\n }\n};\n\nInstrumenter.prototype.deinstrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n this.removeListeners('dom');\n};\n\nInstrumenter.prototype.instrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n var clickHandler = this.handleClick.bind(this);\n var blurHandler = this.handleBlur.bind(this);\n this.addListener('dom', this._window, 'click', 'onclick', clickHandler, true);\n this.addListener('dom', this._window, 'blur', 'onfocusout', blurHandler, true);\n};\n\nInstrumenter.prototype.handleClick = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n var hasTag = e && e.tagName;\n var anchorOrButton = domUtil.isDescribedElement(e, 'a') || domUtil.isDescribedElement(e, 'button');\n if (hasTag && (anchorOrButton || domUtil.isDescribedElement(e, 'input', ['button', 'submit']))) {\n this.captureDomEvent('click', e);\n } else if (domUtil.isDescribedElement(e, 'input', ['checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value, e.checked);\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleBlur = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n if (e && e.tagName) {\n if (domUtil.isDescribedElement(e, 'textarea')) {\n this.captureDomEvent('input', e, e.value);\n } else if (domUtil.isDescribedElement(e, 'select') && e.options && e.options.length) {\n this.handleSelectInputChanged(e);\n } else if (domUtil.isDescribedElement(e, 'input') && !domUtil.isDescribedElement(e, 'input', ['button', 'submit', 'hidden', 'checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value);\n }\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleSelectInputChanged = function(elem) {\n if (elem.multiple) {\n for (var i = 0; i < elem.options.length; i++) {\n if (elem.options[i].selected) {\n this.captureDomEvent('input', elem, elem.options[i].value);\n }\n }\n } else if (elem.selectedIndex >= 0 && elem.options[elem.selectedIndex]) {\n this.captureDomEvent('input', elem, elem.options[elem.selectedIndex].value);\n }\n};\n\nInstrumenter.prototype.captureDomEvent = function(subtype, element, value, isChecked) {\n if (value !== undefined) {\n if (this.scrubTelemetryInputs || (domUtil.getElementType(element) === 'password')) {\n value = '[scrubbed]';\n } else if (this.telemetryScrubber) {\n var description = domUtil.describeElement(element);\n if (this.telemetryScrubber(description)) {\n value = '[scrubbed]';\n }\n }\n }\n var elementString = domUtil.elementArrayToString(domUtil.treeToArray(element));\n this.telemeter.captureDom(subtype, elementString, value, isChecked);\n};\n\nInstrumenter.prototype.deinstrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n restore(this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.instrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n var self = this;\n replace(this._window, 'onpopstate', function(orig) {\n return function() {\n var current = self._location.href;\n self.handleUrlChange(self._lastHref, current);\n if (orig) {\n orig.apply(this, arguments);\n }\n };\n }, this.replacements, 'navigation');\n\n replace(this._window.history, 'pushState', function(orig) {\n return function() {\n var url = arguments.length > 2 ? arguments[2] : undefined;\n if (url) {\n self.handleUrlChange(self._lastHref, url + '');\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.handleUrlChange = function(from, to) {\n var parsedHref = urlparser.parse(this._location.href);\n var parsedTo = urlparser.parse(to);\n var parsedFrom = urlparser.parse(from);\n this._lastHref = to;\n if (parsedHref.protocol === parsedTo.protocol && parsedHref.host === parsedTo.host) {\n to = parsedTo.path + (parsedTo.hash || '');\n }\n if (parsedHref.protocol === parsedFrom.protocol && parsedHref.host === parsedFrom.host) {\n from = parsedFrom.path + (parsedFrom.hash || '');\n }\n this.telemeter.captureNavigation(from, to);\n};\n\nInstrumenter.prototype.deinstrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.removeListeners('connectivity');\n } else {\n restore(this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.instrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.addListener('connectivity', this._window, 'online', undefined, function() {\n this.telemeter.captureConnectivityChange('online');\n }.bind(this), true);\n this.addListener('connectivity', this._window, 'offline', undefined, function() {\n this.telemeter.captureConnectivityChange('offline');\n }.bind(this), true);\n } else {\n var self = this;\n replace(this._document.body, 'ononline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('online');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n replace(this._document.body, 'onoffline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('offline');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.addListener = function(section, obj, type, altType, handler, capture) {\n if (obj.addEventListener) {\n obj.addEventListener(type, handler, capture);\n this.eventRemovers[section].push(function() {\n obj.removeEventListener(type, handler, capture);\n });\n } else if (altType) {\n obj.attachEvent(altType, handler);\n this.eventRemovers[section].push(function() {\n obj.detachEvent(altType, handler);\n });\n }\n};\n\nInstrumenter.prototype.removeListeners = function(section) {\n var r;\n while (this.eventRemovers[section].length) {\n r = this.eventRemovers[section].shift();\n r();\n }\n};\n\nmodule.exports = Instrumenter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/telemetry.js\n// module id = 26\n// module chunks = 0","'use strict';\n\nfunction getElementType(e) {\n return (e.getAttribute('type') || '').toLowerCase();\n}\n\nfunction isDescribedElement(element, type, subtypes) {\n if (element.tagName.toLowerCase() !== type.toLowerCase()) {\n return false;\n }\n if (!subtypes) {\n return true;\n }\n element = getElementType(element);\n for (var i = 0; i < subtypes.length; i++) {\n if (subtypes[i] === element) {\n return true;\n }\n }\n return false;\n}\n\nfunction getElementFromEvent(evt, doc) {\n if (evt.target) {\n return evt.target;\n }\n if (doc && doc.elementFromPoint) {\n return doc.elementFromPoint(evt.clientX, evt.clientY);\n }\n return undefined;\n}\n\nfunction treeToArray(elem) {\n var MAX_HEIGHT = 5;\n var out = [];\n var nextDescription;\n for (var height = 0; elem && height < MAX_HEIGHT; height++) {\n nextDescription = describeElement(elem);\n if (nextDescription.tagName === 'html') {\n break;\n }\n out.unshift(nextDescription);\n elem = elem.parentNode;\n }\n return out;\n}\n\nfunction elementArrayToString(a) {\n var MAX_LENGTH = 80;\n var separator = ' > ', separatorLength = separator.length;\n var out = [], len = 0, nextStr, totalLength;\n\n for (var i = a.length - 1; i >= 0; i--) {\n nextStr = descriptionToString(a[i]);\n totalLength = len + (out.length * separatorLength) + nextStr.length;\n if (i < a.length - 1 && totalLength >= MAX_LENGTH + 3) {\n out.unshift('...');\n break;\n }\n out.unshift(nextStr);\n len += nextStr.length;\n }\n return out.join(separator);\n}\n\nfunction descriptionToString(desc) {\n if (!desc || !desc.tagName) {\n return '';\n }\n var out = [desc.tagName];\n if (desc.id) {\n out.push('#' + desc.id);\n }\n if (desc.classes) {\n out.push('.' + desc.classes.join('.'));\n }\n for (var i = 0; i < desc.attributes.length; i++) {\n out.push('[' + desc.attributes[i].key + '=\"' + desc.attributes[i].value + '\"]');\n }\n\n return out.join('');\n}\n\n/**\n * Input: a dom element\n * Output: null if tagName is falsey or input is falsey, else\n * {\n * tagName: String,\n * id: String | undefined,\n * classes: [String] | undefined,\n * attributes: [\n * {\n * key: OneOf(type, name, title, alt),\n * value: String\n * }\n * ]\n * }\n */\nfunction describeElement(elem) {\n if (!elem || !elem.tagName) {\n return null;\n }\n var out = {}, className, key, attr, i;\n out.tagName = elem.tagName.toLowerCase();\n if (elem.id) {\n out.id = elem.id;\n }\n className = elem.className;\n if (className && (typeof className === 'string')) {\n out.classes = className.split(/\\s+/);\n }\n var attributes = ['type', 'name', 'title', 'alt'];\n out.attributes = [];\n for (i = 0; i < attributes.length; i++) {\n key = attributes[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.attributes.push({key: key, value: attr});\n }\n }\n return out;\n}\n\nmodule.exports = {\n describeElement: describeElement,\n descriptionToString: descriptionToString,\n elementArrayToString: elementArrayToString,\n treeToArray: treeToArray,\n getElementFromEvent: getElementFromEvent,\n isDescribedElement: isDescribedElement,\n getElementType: getElementType\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/domUtility.js\n// module id = 27\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file diff --git a/examples/itemsPerMinute.html b/examples/itemsPerMinute.html index e899458f9..f3c8bd574 100644 --- a/examples/itemsPerMinute.html +++ b/examples/itemsPerMinute.html @@ -12,7 +12,7 @@ }; // Rollbar Snippet -!function(r){function e(n){if(o[n])return o[n].exports;var t=o[n]={exports:{},id:n,loaded:!1};return r[n].call(t.exports,t,t.exports,e),t.loaded=!0,t.exports}var o={};return e.m=r,e.c=o,e.p="",e(0)}([function(r,e,o){"use strict";var n=o(1),t=o(4);_rollbarConfig=_rollbarConfig||{},_rollbarConfig.rollbarJsUrl=_rollbarConfig.rollbarJsUrl||"https://cdnjs.cloudflare.com/ajax/libs/rollbar.js/2.3.9/rollbar.min.js",_rollbarConfig.async=void 0===_rollbarConfig.async||_rollbarConfig.async;var a=n.setupShim(window,_rollbarConfig),l=t(_rollbarConfig);window.rollbar=n.Rollbar,a.loadFull(window,document,!_rollbarConfig.async,_rollbarConfig,l)},function(r,e,o){"use strict";function n(r){return function(){try{return r.apply(this,arguments)}catch(r){try{console.error("[Rollbar]: Internal error",r)}catch(r){}}}}function t(r,e){this.options=r,this._rollbarOldOnError=null;var o=s++;this.shimId=function(){return o},"undefined"!=typeof window&&window._rollbarShims&&(window._rollbarShims[o]={handler:e,messages:[]})}function a(r,e){if(r){var o=e.globalAlias||"Rollbar";if("object"==typeof r[o])return r[o];r._rollbarShims={},r._rollbarWrappedError=null;var t=new p(e);return n(function(){e.captureUncaught&&(t._rollbarOldOnError=r.onerror,i.captureUncaughtExceptions(r,t,!0),i.wrapGlobals(r,t,!0)),e.captureUnhandledRejections&&i.captureUnhandledRejections(r,t,!0);var n=e.autoInstrument;return e.enabled!==!1&&(void 0===n||n===!0||"object"==typeof n&&n.network)&&r.addEventListener&&(r.addEventListener("load",t.captureLoad.bind(t)),r.addEventListener("DOMContentLoaded",t.captureDomContentLoaded.bind(t))),r[o]=t,t})()}}function l(r){return n(function(){var e=this,o=Array.prototype.slice.call(arguments,0),n={shim:e,method:r,args:o,ts:new Date};window._rollbarShims[this.shimId()].messages.push(n)})}var i=o(2),s=0,d=o(3),c=function(r,e){return new t(r,e)},p=d.bind(null,c);t.prototype.loadFull=function(r,e,o,t,a){var l=function(){var e;if(void 0===r._rollbarDidLoad){e=new Error("rollbar.js did not load");for(var o,n,t,l,i=0;o=r._rollbarShims[i++];)for(o=o.messages||[];n=o.shift();)for(t=n.args||[],i=0;i diff --git a/examples/snippet.html b/examples/snippet.html index bf1d6b441..1bf048d8e 100644 --- a/examples/snippet.html +++ b/examples/snippet.html @@ -13,7 +13,7 @@ diff --git a/examples/test.html b/examples/test.html index 8e438c214..c33b4924b 100644 --- a/examples/test.html +++ b/examples/test.html @@ -35,7 +35,7 @@ diff --git a/examples/universal-browser/test.html b/examples/universal-browser/test.html index 9c8d5d1f3..9cf7b8d8e 100644 --- a/examples/universal-browser/test.html +++ b/examples/universal-browser/test.html @@ -35,7 +35,7 @@