New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

ryuu.js

Package Overview
Dependencies
Maintainers
5
Versions
54
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

ryuu.js - npm Package Compare versions

Comparing version 4.3.1 to 4.4.0

LICENSE

19

changelog.md

@@ -0,1 +1,20 @@

# Changelog
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
## [4.4.0](https://github.com/DomoApps/domo.js/compare/v2.5.8...v4.4.0) (2023-06-26)
### Features
* **onDataUpdate:** verify origin of data recieved ([#10](https://github.com/DomoApps/domo.js/issues/10)) ([d5b8594](https://github.com/DomoApps/domo.js/commit/d5b8594f8baf8a220db1b3aaab449e819b081757))
* **onFiltersUpdate:** DOMO-275255 ([868be22](https://github.com/DomoApps/domo.js/commit/868be22147b4cb64b191986e07bc6cb318da05d1))
### Bug Fixes
* add checking to onDataUpdate event listener ([#9](https://github.com/DomoApps/domo.js/issues/9)) ([d4e07cd](https://github.com/DomoApps/domo.js/commit/d4e07cd4a801ee68f3df115f6adaee9fba98eca9))
* changed to only append SID if it doesn't exist ([95fdbe2](https://github.com/DomoApps/domo.js/commit/95fdbe2fb36a76e8c2428a2cfcbe24beb422fda5))
* **onFiltersUpdate:** call each callback on event ([0aba05f](https://github.com/DomoApps/domo.js/commit/0aba05f0f0de23d2cccdf6be928a294bbc0c57c5))
# v3.0.0

@@ -2,0 +21,0 @@ Converted to TypeScript

4

dist/domo.js
/*! For license information please see domo.js.LICENSE.txt */
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.domo=t():e.domo=t()}(self,(function(){return(()=>{"use strict";var e={727:(e,t,r)=>{var o=r(554),n=r(206),a=function(){function e(){}return e.post=function(e,t,r){return i(o.RequestMethods.POST,e,r,!0,t)},e.put=function(e,t,r){return i(o.RequestMethods.PUT,e,r,!0,t)},e.get=function(e,t){return i(o.RequestMethods.GET,e,t)},e.delete=function(e,t){return i(o.RequestMethods.DELETE,e,t)},e.getAll=function(t,r){return Promise.all(t.map((function(t){return e.get(t,r)})))},e.onDataUpdate=function(e){function t(t){if(c(t.origin)&&"string"==typeof t.data&&t.data.length>0)try{var r=JSON.parse(t.data);if(!r.hasOwnProperty("alias"))return;var o=r.alias,n=JSON.stringify({event:"ack",alias:o});t.source instanceof MessagePort||t.source instanceof ServiceWorker||t.source.postMessage(n,t.origin),e(o)}catch(e){console.warn("There was an error in onDataUpdate! It may be that our event listener caught a message from another source and tried to parse it, so your update still may have worked. If you would like more info, here is the error: \n",e)}}return window.addEventListener("message",t),function(){return window.removeEventListener("message",t)}},e.navigate=function(e,t){var r=JSON.stringify({event:"navigate",url:e,isNewWindow:t});window.parent.postMessage(r,"*")},e.filterContainer=function(e){var t=window.navigator.userAgent.toLowerCase(),r=/safari/.test(t),o=/iphone|ipod|ipad/.test(t),n=JSON.stringify({event:"filter",filter:e&&e.map((function(e){return{columnName:e.column,operator:e.operator||e.operand,values:e.values,dataType:e.dataType}}))});o&&!r?window.webkit.messageHandlers.domofilter.postMessage(e&&e.map((function(e){return{column:e.column,operand:e.operator||e.operand,values:e.values,dataType:e.dataType}}))):window.parent.postMessage(n,"*")},e.connected=!1,e.listeners={onFiltersUpdate:[]},e.connect=function(){e.connected||(e.connected=!0,e.channel=new MessageChannel,window.parent.postMessage(JSON.stringify({event:"subscribe"}),"*",[e.channel.port2]))},e.onFiltersUpdate=function(t){e.connect();var r=e.listeners.onFiltersUpdate.push(t)-1;return e.channel.port1.onmessage=function(t){var r=t.ports[0];void 0!==r&&"filtersUpdated"===t.data.event&&e.listeners.onFiltersUpdate.length>0&&(r.postMessage({}),e.listeners.onFiltersUpdate.forEach((function(e){return e(t.data.filters)})))},function(){e.listeners.onFiltersUpdate.splice(r,1)}},e.env=d(),e.__util={isVerifiedOrigin:c,getQueryParams:d,setFormatHeaders:p,isSuccess:u},e}(),s=window.__RYUU_SID__;function i(e,t,r,n,a){return r=r||{},new Promise((function(i,c){var d=new XMLHttpRequest;if(n?d.open(e,t,n):d.open(e,t),p(d,t,r),function(e,t){t.contentType?"multipart"!==t.contentType&&e.setRequestHeader("Content-Type",t.contentType):e.setRequestHeader("Content-Type",o.DataFormats.JSON)}(d,r),function(e){s&&e.setRequestHeader("X-DOMO-Ryuu-Session",s)}(d),function(e,t){void 0!==t.responseType&&(e.responseType=t.responseType)}(d,r),d.onload=function(){var e;if(u(d.status)){!["csv","excel"].includes(r.format)&&d.response||i(d.response),"blob"===r.responseType&&i(new Blob([d.response],{type:d.getResponseHeader("content-type")}));var t=d.response;try{e=JSON.parse(t)}catch(e){return void c(Error("Invalid JSON response"))}i(e)}else c(Error(d.statusText))},d.onerror=function(){c(Error("Network Error"))},a)if(r.contentType&&r.contentType!==o.DataFormats.JSON)d.send(a);else{var f=JSON.stringify(a);d.send(f)}else d.send()}))}function u(e){return e>=200&&e<300}function c(e){var t=e.match("^https?://([^/]+[.])?(domo|domotech|domorig).(com|io)?(/.*)?$"),r=e.match("(.*).(domoapps).(.*)");return!!t&&!r}function d(){var e=location.search.substr(1),t={};return e.split("&").forEach((function(e){var r=e.split("=");t[r[0]]=decodeURIComponent(r[1])})),t}function p(e,t,r){if(-1!==t.indexOf("data/v")){var a=void 0!==r.format?(0,n.domoFormatToRequestFormat)(r.format):o.DataFormats.DEFAULT;e.setRequestHeader("Accept",a)}}function f(e){if(e===document.body||e===document.head)return l(e);var t=e.dataset&&e.dataset.domoHref||e.getAttribute("href"),r=e.dataset&&e.dataset.domoSrc||e.getAttribute("src"),o=t?"href":"src",n=t||r;if(n&&s&&!n.includes(s)){var a=new URL(n,document.location.origin);a.origin===document.location.origin&&(a.searchParams.append("ryuu-sid",s),e.setAttribute(o,a.href))}}function l(e){for(var t=0;t<e.children.length;t++)f(e.children[t])}var m=new MutationObserver((function(e){for(var t=0,r=e;t<r.length;t++)l(r[t].target)}));m.observe(document.body,{childList:!0,subtree:!0}),m.observe(document.head,{childList:!0,subtree:!0}),e.exports=a},548:(e,t)=>{var r;Object.defineProperty(t,"__esModule",{value:!0}),t.DataFormats=void 0,(r=t.DataFormats||(t.DataFormats={})).DEFAULT="application/array-of-objects",r.ARRAY_OF_OBJECTS="application/array-of-objects",r.JSON="application/json",r.CSV="text/csv",r.EXCEL="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",r.PLAIN="text/plain"},64:(e,t)=>{var r;Object.defineProperty(t,"__esModule",{value:!0}),t.RequestMethods=void 0,(r=t.RequestMethods||(t.RequestMethods={})).get="GET",r.GET="GET",r.post="POST",r.POST="POST",r.put="PUT",r.PUT="PUT",r.delete="DELETE",r.DELETE="DELETE"},554:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.FilterDataTypes=t.DataFormats=t.RequestMethods=void 0;var o=r(64);Object.defineProperty(t,"RequestMethods",{enumerable:!0,get:function(){return o.RequestMethods}});var n=r(548);Object.defineProperty(t,"DataFormats",{enumerable:!0,get:function(){return n.DataFormats}});var a=r(616);Object.defineProperty(t,"FilterDataTypes",{enumerable:!0,get:function(){return a.FilterDataTypes}})},616:(e,t)=>{var r;Object.defineProperty(t,"__esModule",{value:!0}),t.FilterDataTypes=void 0,(r=t.FilterDataTypes||(t.FilterDataTypes={})).NUMERIC="NUMERIC",r.DATE="DATE",r.DATETIME="DATETIME",r.STRING="STRING"},206:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.domoFormatToRequestFormat=void 0;var o=r(554);t.domoFormatToRequestFormat=function(e){switch(e){case"array-of-objects":return o.DataFormats.ARRAY_OF_OBJECTS;case"array-of-arrays":return o.DataFormats.JSON;case"excel":return o.DataFormats.EXCEL;case"csv":return o.DataFormats.CSV;default:return o.DataFormats.DEFAULT}}}},t={};return function r(o){var n=t[o];if(void 0!==n)return n.exports;var a=t[o]={exports:{}};return e[o](a,a.exports,r),a.exports}(727)})()}));
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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SyxFQUFRQSxFQUFPRCxRQUFTNEssR0FHL0MzSyxFQUFPRCxRQ2xCVzRLLENBQW9CLE1STzlDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZG9tby93ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJ3ZWJwYWNrOi8vZG9tby8uL3NyYy9kb21vLnRzIiwid2VicGFjazovL2RvbW8vLi9zcmMvbW9kZWxzL2VudW1zL2RhdGEtZm9ybWF0cy50cyIsIndlYnBhY2s6Ly9kb21vLy4vc3JjL21vZGVscy9lbnVtcy9yZXF1ZXN0LW1ldGhvZHMudHMiLCJ3ZWJwYWNrOi8vZG9tby8uL3NyYy9tb2RlbHMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vZG9tby8uL3NyYy9tb2RlbHMvaW50ZXJmYWNlcy9maWx0ZXItZGF0YS10eXBlcy50cyIsIndlYnBhY2s6Ly9kb21vLy4vc3JjL3V0aWxzL2RhdGEtaGVscGVycy50cyIsIndlYnBhY2s6Ly9kb21vL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL2RvbW8vd2VicGFjay9zdGFydHVwIl0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcImRvbW9cIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wiZG9tb1wiXSA9IGZhY3RvcnkoKTtcbn0pKHNlbGYsIGZ1bmN0aW9uKCkge1xucmV0dXJuICIsImltcG9ydCB7XG4gIFJlcXVlc3RNZXRob2RzLFxuICBSZXF1ZXN0T3B0aW9ucyxcbiAgT2JqZWN0UmVxdWVzdE9wdGlvbnMsXG4gIEFycmF5UmVxdWVzdE9wdGlvbnMsXG4gIERhdGFGb3JtYXRzLFxuICBRdWVyeVBhcmFtcyxcbiAgRmlsdGVyLFxuICBSZXF1ZXN0Qm9keSxcbiAgUmVzcG9uc2VCb2R5LFxuICBPYmplY3RSZXNwb25zZUJvZHksXG4gIEFycmF5UmVzcG9uc2VCb2R5LFxufSBmcm9tIFwiLi9tb2RlbHNcIjtcbmltcG9ydCB7IGRvbW9Gb3JtYXRUb1JlcXVlc3RGb3JtYXQgfSBmcm9tIFwiLi91dGlscy9kYXRhLWhlbHBlcnNcIjtcblxuZXhwb3J0ID0gZG9tbztcblxuY2xhc3MgZG9tbyB7XG4gIHN0YXRpYyBwb3N0KFxuICAgIHVybDogc3RyaW5nLFxuICAgIGJvZHk/OiBSZXF1ZXN0Qm9keSxcbiAgICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbiAgKTogUHJvbWlzZTxSZXNwb25zZUJvZHk+O1xuICBzdGF0aWMgcG9zdDxUPihcbiAgICB1cmw6IHN0cmluZyxcbiAgICBib2R5PzogUmVxdWVzdEJvZHksXG4gICAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zXG4gICk6IFByb21pc2U8VD47XG4gIHN0YXRpYyBwb3N0PFQ+KFxuICAgIHVybDogc3RyaW5nLFxuICAgIGJvZHk/OiBSZXF1ZXN0Qm9keSxcbiAgICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbiAgKTogUHJvbWlzZTxUPiB7XG4gICAgcmV0dXJuIGRvbW9IdHRwPFQ+KFJlcXVlc3RNZXRob2RzLlBPU1QsIHVybCwgb3B0aW9ucywgdHJ1ZSwgYm9keSk7XG4gIH1cblxuICBzdGF0aWMgcHV0KFxuICAgIHVybDogc3RyaW5nLFxuICAgIGJvZHk/OiBSZXF1ZXN0Qm9keSxcbiAgICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbiAgKTogUHJvbWlzZTxSZXNwb25zZUJvZHk+O1xuICBzdGF0aWMgcHV0PFQ+KFxuICAgIHVybDogc3RyaW5nLFxuICAgIGJvZHk/OiBSZXF1ZXN0Qm9keSxcbiAgICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbiAgKTogUHJvbWlzZTxUPjtcbiAgc3RhdGljIHB1dDxUPihcbiAgICB1cmw6IHN0cmluZyxcbiAgICBib2R5PzogUmVxdWVzdEJvZHksXG4gICAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zXG4gICk6IFByb21pc2U8VD4ge1xuICAgIHJldHVybiBkb21vSHR0cDxUPihSZXF1ZXN0TWV0aG9kcy5QVVQsIHVybCwgb3B0aW9ucywgdHJ1ZSwgYm9keSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0KFxuICAgIHVybDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IE9iamVjdFJlcXVlc3RPcHRpb25zXG4gICk6IFByb21pc2U8T2JqZWN0UmVzcG9uc2VCb2R5W10+O1xuICBzdGF0aWMgZ2V0KFxuICAgIHVybDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IEFycmF5UmVxdWVzdE9wdGlvbnNcbiAgKTogUHJvbWlzZTxBcnJheVJlc3BvbnNlQm9keT47XG4gIHN0YXRpYyBnZXQodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9ucyk6IFByb21pc2U8UmVzcG9uc2VCb2R5PjtcbiAgc3RhdGljIGdldDxUPih1cmw6IHN0cmluZywgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zKTogUHJvbWlzZTxUPjtcbiAgc3RhdGljIGdldDxUPih1cmw6IHN0cmluZywgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zKTogUHJvbWlzZTxUPiB7XG4gICAgcmV0dXJuIGRvbW9IdHRwPFQ+KFJlcXVlc3RNZXRob2RzLkdFVCwgdXJsLCBvcHRpb25zKTtcbiAgfVxuXG4gIHN0YXRpYyBkZWxldGUodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9ucyk6IFByb21pc2U8UmVzcG9uc2VCb2R5PjtcbiAgc3RhdGljIGRlbGV0ZTxUPih1cmw6IHN0cmluZywgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zKTogUHJvbWlzZTxUPjtcbiAgc3RhdGljIGRlbGV0ZTxUPih1cmw6IHN0cmluZywgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zKTogUHJvbWlzZTxUPiB7XG4gICAgcmV0dXJuIGRvbW9IdHRwPFQ+KFJlcXVlc3RNZXRob2RzLkRFTEVURSwgdXJsLCBvcHRpb25zKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRBbGwoXG4gICAgdXJsczogc3RyaW5nW10sXG4gICAgb3B0aW9uczogT2JqZWN0UmVxdWVzdE9wdGlvbnNcbiAgKTogUHJvbWlzZTxPYmplY3RSZXNwb25zZUJvZHlbXVtdPjtcbiAgc3RhdGljIGdldEFsbChcbiAgICB1cmxzOiBzdHJpbmdbXSxcbiAgICBvcHRpb25zOiBBcnJheVJlcXVlc3RPcHRpb25zXG4gICk6IFByb21pc2U8QXJyYXlSZXNwb25zZUJvZHlbXT47XG4gIHN0YXRpYyBnZXRBbGwoXG4gICAgdXJsczogc3RyaW5nW10sXG4gICAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zXG4gICk6IFByb21pc2U8UmVzcG9uc2VCb2R5W10+O1xuICBzdGF0aWMgZ2V0QWxsPFQ+KHVybHM6IHN0cmluZ1tdLCBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnMpOiBQcm9taXNlPFRbXT47XG4gIHN0YXRpYyBnZXRBbGw8VD4odXJsczogc3RyaW5nW10sIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9ucyk6IFByb21pc2U8VFtdPiB7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKFxuICAgICAgdXJscy5tYXAoZnVuY3Rpb24gKHVybCkge1xuICAgICAgICByZXR1cm4gZG9tby5nZXQ8VD4odXJsLCBvcHRpb25zKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMZXQgdGhlIGRvbW9hcHAgb3B0aW9uYWxseSBoYW5kbGUgaXRzIG93biBkYXRhIHVwZGF0ZXMuXG4gICAqL1xuICBzdGF0aWMgb25EYXRhVXBkYXRlKGNiOiAoYWxpYXM6IHN0cmluZykgPT4gdm9pZCkge1xuICAgIGZ1bmN0aW9uIGlubmVyQ2FsbGJhY2soZXZlbnQ6IE1lc3NhZ2VFdmVudCkge1xuICAgICAgaWYgKCFpc1ZlcmlmaWVkT3JpZ2luKGV2ZW50Lm9yaWdpbikpIHJldHVybjtcblxuICAgICAgaWYgKHR5cGVvZiBldmVudC5kYXRhID09PSBcInN0cmluZ1wiICYmIGV2ZW50LmRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBKU09OLnBhcnNlKGV2ZW50LmRhdGEpO1xuICAgICAgICAgIGlmICghbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImFsaWFzXCIpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgYWxpYXMgPSBtZXNzYWdlLmFsaWFzO1xuXG4gICAgICAgICAgLy8gc2VuZCBhY2tub3dsZWRnZW1lbnQgdG8gcHJldmVudCBhdXRvcmVmcmVzaFxuICAgICAgICAgIGNvbnN0IGFjayA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIGV2ZW50OiBcImFja1wiLFxuICAgICAgICAgICAgYWxpYXM6IGFsaWFzLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gT25seSBXaW5kb3dQcm94eSB8IFdpbmRvdyBoYXZlIHRoZSBwb3N0TWVzc2FnZSBtZXRob2QgYW5kIHRoZSB0eXBlIG9mIGV2ZW50LnNvdXJjZSB2YXJpZXMgYmV0d2VlbiBicm93c2Vyc1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICEoZXZlbnQuc291cmNlIGluc3RhbmNlb2YgTWVzc2FnZVBvcnQpICYmXG4gICAgICAgICAgICAhKGV2ZW50LnNvdXJjZSBpbnN0YW5jZW9mIFNlcnZpY2VXb3JrZXIpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBldmVudC5zb3VyY2UucG9zdE1lc3NhZ2UoYWNrLCBldmVudC5vcmlnaW4pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGluZm9ybSBkb21vIGFwcCB3aGljaCBhbGlhcyBoYXMgYmVlbiB1cGRhdGVkXG4gICAgICAgICAgY2IoYWxpYXMpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjb25zdCBpbmZvID1cbiAgICAgICAgICAgIFwiVGhlcmUgd2FzIGFuIGVycm9yIGluIG9uRGF0YVVwZGF0ZSEgSXQgbWF5IGJlIHRoYXQgb3VyIGV2ZW50IGxpc3RlbmVyIGNhdWdodCBcIiArXG4gICAgICAgICAgICBcImEgbWVzc2FnZSBmcm9tIGFub3RoZXIgc291cmNlIGFuZCB0cmllZCB0byBwYXJzZSBpdCwgc28geW91ciB1cGRhdGUgc3RpbGwgbWF5IGhhdmUgd29ya2VkLiBcIiArXG4gICAgICAgICAgICBcIklmIHlvdSB3b3VsZCBsaWtlIG1vcmUgaW5mbywgaGVyZSBpcyB0aGUgZXJyb3I6IFxcblwiO1xuICAgICAgICAgIGNvbnNvbGUud2FybihpbmZvLCBlcnIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBpbm5lckNhbGxiYWNrKTtcbiAgICByZXR1cm4gKCkgPT4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGlubmVyQ2FsbGJhY2spO1xuICB9XG5cbiAgLyoqXG4gICAqIExldCB0aGUgZG9tb2FwcCBvcHRpb25hbGx5IGhhbmRsZSBvdGhlciBldmVudHNcbiAgICovXG4gIHN0YXRpYyBjaGFubmVsPzogTWVzc2FnZUNoYW5uZWw7XG4gIHN0YXRpYyBjb25uZWN0ZWQgPSBmYWxzZTtcbiAgc3RhdGljIGxpc3RlbmVyczogeyBbaW5kZXg6IHN0cmluZ106IEZ1bmN0aW9uW10gfSA9IHtcbiAgICBvbkZpbHRlcnNVcGRhdGU6IFtdLFxuICB9O1xuXG4gIHN0YXRpYyBjb25uZWN0ID0gKCkgPT4ge1xuICAgIGlmIChkb21vLmNvbm5lY3RlZCkgcmV0dXJuO1xuICAgIGRvbW8uY29ubmVjdGVkID0gdHJ1ZTtcbiAgICBkb21vLmNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICB3aW5kb3cucGFyZW50LnBvc3RNZXNzYWdlKEpTT04uc3RyaW5naWZ5KHsgZXZlbnQ6IFwic3Vic2NyaWJlXCIgfSksIFwiKlwiLCBbXG4gICAgICBkb21vLmNoYW5uZWwucG9ydDIsXG4gICAgXSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIExldCB0aGUgZG9tb2FwcCBoYW5kbGUgaXRzIG93biBmaWx0ZXIgdXBkYXRlc1xuICAgKi9cbiAgc3RhdGljIG9uRmlsdGVyc1VwZGF0ZSA9IChjYWxsYmFjazogRnVuY3Rpb24pID0+IHtcbiAgICBkb21vLmNvbm5lY3QoKTtcbiAgICBjb25zdCBpbmRleCA9IGRvbW8ubGlzdGVuZXJzLm9uRmlsdGVyc1VwZGF0ZS5wdXNoKGNhbGxiYWNrKSAtIDE7XG5cbiAgICBkb21vLmNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gKGU6IE1lc3NhZ2VFdmVudCkgPT4ge1xuICAgICAgY29uc3QgW3Jlc3BvbnNlUG9ydF0gPSBlLnBvcnRzO1xuICAgICAgaWYgKHJlc3BvbnNlUG9ydCA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG5cbiAgICAgIGlmIChcbiAgICAgICAgZS5kYXRhLmV2ZW50ID09PSBcImZpbHRlcnNVcGRhdGVkXCIgJiZcbiAgICAgICAgZG9tby5saXN0ZW5lcnMub25GaWx0ZXJzVXBkYXRlLmxlbmd0aCA+IDBcbiAgICAgICkge1xuICAgICAgICByZXNwb25zZVBvcnQucG9zdE1lc3NhZ2Uoe30pOyAvLyBQcmV2ZW50cyB0aGUgYXBwIGZyb20gcmVsb2FkaW5nLiBTYXlzIHdlJ3ZlIGhhbmRsZWQgaXRcbiAgICAgICAgZG9tby5saXN0ZW5lcnMub25GaWx0ZXJzVXBkYXRlLmZvckVhY2goKGNiKSA9PiBjYihlLmRhdGEuZmlsdGVycykpOyAvLyA8LSBzcGxpdCBvdXQgb25GaWx0ZXJzVXBkYXRlIHNvIHRoYXQgeW91IGNhbiBoYW5kbGUgZWFjaCBtZXNzYWdlIGRpZmZlcmVudGx5IGhlcmVcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gdW5yZWdpc3RlclxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb21vLmxpc3RlbmVycy5vbkZpbHRlcnNVcGRhdGUuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9O1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXF1ZXN0IGEgbmF2aWdhdGlvbiBjaGFuZ2VcbiAgICovXG4gIHN0YXRpYyBuYXZpZ2F0ZSh1cmw6IHN0cmluZywgaXNOZXdXaW5kb3c6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBtZXNzYWdlID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgZXZlbnQ6IFwibmF2aWdhdGVcIixcbiAgICAgIHVybDogdXJsLFxuICAgICAgaXNOZXdXaW5kb3c6IGlzTmV3V2luZG93LFxuICAgIH0pO1xuICAgIHdpbmRvdy5wYXJlbnQucG9zdE1lc3NhZ2UobWVzc2FnZSwgXCIqXCIpO1xuICB9XG5cbiAgc3RhdGljIGZpbHRlckNvbnRhaW5lcihmaWx0ZXJzOiBGaWx0ZXJbXSB8IG51bGwpOiB2b2lkIHtcbiAgICBjb25zdCB1c2VyQWdlbnQgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLFxuICAgICAgc2FmYXJpID0gL3NhZmFyaS8udGVzdCh1c2VyQWdlbnQpLFxuICAgICAgaW9zID0gL2lwaG9uZXxpcG9kfGlwYWQvLnRlc3QodXNlckFnZW50KTtcblxuICAgIGNvbnN0IG1lc3NhZ2UgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgICBldmVudDogXCJmaWx0ZXJcIixcbiAgICAgIGZpbHRlcjpcbiAgICAgICAgZmlsdGVycyAmJlxuICAgICAgICBmaWx0ZXJzLm1hcCgoZmlsdGVyKSA9PiAoe1xuICAgICAgICAgIGNvbHVtbk5hbWU6IGZpbHRlci5jb2x1bW4sXG4gICAgICAgICAgb3BlcmF0b3I6IGZpbHRlci5vcGVyYXRvciB8fCAoZmlsdGVyIGFzIGFueSkub3BlcmFuZCwgLy8gTW9zdCBmaWx0ZXIgY29kZSAoaW5jbHVkaW5nIFBob2VuaXgpIHN0aWxsIHVzZXMgXCJvcGVyYW5kXCIgaW5zdGVhZCBvZiBcIm9wZXJhdG9yXCJcbiAgICAgICAgICB2YWx1ZXM6IGZpbHRlci52YWx1ZXMsXG4gICAgICAgICAgZGF0YVR5cGU6IGZpbHRlci5kYXRhVHlwZSxcbiAgICAgICAgfSkpLFxuICAgIH0pO1xuXG4gICAgaWYgKGlvcyAmJiAhc2FmYXJpKSB7XG4gICAgICAod2luZG93IGFzIGFueSkud2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5kb21vZmlsdGVyLnBvc3RNZXNzYWdlKFxuICAgICAgICBmaWx0ZXJzICYmXG4gICAgICAgICAgZmlsdGVycy5tYXAoKGZpbHRlcikgPT4gKHtcbiAgICAgICAgICAgIGNvbHVtbjogZmlsdGVyLmNvbHVtbixcbiAgICAgICAgICAgIG9wZXJhbmQ6IGZpbHRlci5vcGVyYXRvciB8fCAoZmlsdGVyIGFzIGFueSkub3BlcmFuZCxcbiAgICAgICAgICAgIHZhbHVlczogZmlsdGVyLnZhbHVlcyxcbiAgICAgICAgICAgIGRhdGFUeXBlOiBmaWx0ZXIuZGF0YVR5cGUsXG4gICAgICAgICAgfSkpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB3aW5kb3cucGFyZW50LnBvc3RNZXNzYWdlKG1lc3NhZ2UsIFwiKlwiKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZW52ID0gZ2V0UXVlcnlQYXJhbXMoKTtcblxuICBzdGF0aWMgX191dGlsID0ge1xuICAgIGlzVmVyaWZpZWRPcmlnaW4sXG4gICAgZ2V0UXVlcnlQYXJhbXMsXG4gICAgc2V0Rm9ybWF0SGVhZGVycyxcbiAgICBpc1N1Y2Nlc3MsXG4gIH07XG59XG5cbmNvbnN0IHRva2VuID0gKHdpbmRvdyBhcyBhbnkpLl9fUllVVV9TSURfXztcblxuZnVuY3Rpb24gZG9tb0h0dHAoXG4gIG1ldGhvZDogUmVxdWVzdE1ldGhvZHMsXG4gIHVybDogc3RyaW5nLFxuICBvcHRpb25zOiBPYmplY3RSZXF1ZXN0T3B0aW9ucyxcbiAgYXN5bmM/OiBib29sZWFuLFxuICBib2R5PzogUmVxdWVzdEJvZHlcbik6IFByb21pc2U8T2JqZWN0UmVzcG9uc2VCb2R5W10+O1xuZnVuY3Rpb24gZG9tb0h0dHAoXG4gIG1ldGhvZDogUmVxdWVzdE1ldGhvZHMsXG4gIHVybDogc3RyaW5nLFxuICBvcHRpb25zOiBBcnJheVJlcXVlc3RPcHRpb25zLFxuICBhc3luYz86IGJvb2xlYW4sXG4gIGJvZHk/OiBSZXF1ZXN0Qm9keVxuKTogUHJvbWlzZTxBcnJheVJlc3BvbnNlQm9keT47XG5mdW5jdGlvbiBkb21vSHR0cChcbiAgbWV0aG9kOiBSZXF1ZXN0TWV0aG9kcyxcbiAgdXJsOiBzdHJpbmcsXG4gIG9wdGlvbnM6IFJlcXVlc3RPcHRpb25zLFxuICBhc3luYz86IGJvb2xlYW4sXG4gIGJvZHk/OiBSZXF1ZXN0Qm9keVxuKTogUHJvbWlzZTxSZXNwb25zZUJvZHk+O1xuZnVuY3Rpb24gZG9tb0h0dHA8VD4oXG4gIG1ldGhvZDogUmVxdWVzdE1ldGhvZHMsXG4gIHVybDogc3RyaW5nLFxuICBvcHRpb25zOiBSZXF1ZXN0T3B0aW9ucyxcbiAgYXN5bmM/OiBib29sZWFuLFxuICBib2R5PzogUmVxdWVzdEJvZHlcbik6IFByb21pc2U8VD47XG5mdW5jdGlvbiBkb21vSHR0cChcbiAgbWV0aG9kOiBSZXF1ZXN0TWV0aG9kcyxcbiAgdXJsOiBzdHJpbmcsXG4gIG9wdGlvbnM6IFJlcXVlc3RPcHRpb25zLFxuICBhc3luYz86IGJvb2xlYW4sXG4gIGJvZHk/OiBSZXF1ZXN0Qm9keVxuKTogUHJvbWlzZTxSZXNwb25zZUJvZHk+IHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoXG4gICAgcmVzb2x2ZTogKHZhbHVlPzogUmVzcG9uc2VCb2R5KSA9PiB2b2lkLFxuICAgIHJlamVjdDogKHJlYXNvbj86IEVycm9yKSA9PiB2b2lkXG4gICkge1xuICAgIC8vIERvIHRoZSB1c3VhbCBYSFIgc3R1ZmZcbiAgICBsZXQgcmVxOiBYTUxIdHRwUmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgIGlmIChhc3luYykge1xuICAgICAgcmVxLm9wZW4obWV0aG9kLCB1cmwsIGFzeW5jKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxLm9wZW4obWV0aG9kLCB1cmwpO1xuICAgIH1cbiAgICBzZXRGb3JtYXRIZWFkZXJzKHJlcSwgdXJsLCBvcHRpb25zKTtcbiAgICBzZXRDb250ZW50SGVhZGVycyhyZXEsIG9wdGlvbnMpO1xuICAgIHNldEF1dGhUb2tlbkhlYWRlcihyZXEpO1xuICAgIHNldFJlc3BvbnNlVHlwZShyZXEsIG9wdGlvbnMpO1xuXG4gICAgcmVxLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBkYXRhO1xuICAgICAgLy8gVGhpcyBpcyBjYWxsZWQgZXZlbiBvbiA0MDQgZXRjIHNvIGNoZWNrIHRoZSBzdGF0dXNcbiAgICAgIGlmIChpc1N1Y2Nlc3MocmVxLnN0YXR1cykpIHtcbiAgICAgICAgaWYgKFtcImNzdlwiLCBcImV4Y2VsXCJdLmluY2x1ZGVzKG9wdGlvbnMuZm9ybWF0KSB8fCAhcmVxLnJlc3BvbnNlKSB7XG4gICAgICAgICAgcmVzb2x2ZShyZXEucmVzcG9uc2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLnJlc3BvbnNlVHlwZSA9PT0gXCJibG9iXCIpIHtcbiAgICAgICAgICByZXNvbHZlKFxuICAgICAgICAgICAgbmV3IEJsb2IoW3JlcS5yZXNwb25zZV0sIHtcbiAgICAgICAgICAgICAgdHlwZTogcmVxLmdldFJlc3BvbnNlSGVhZGVyKFwiY29udGVudC10eXBlXCIpLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlc3BvbnNlU3RyID0gcmVxLnJlc3BvbnNlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIGlmKCFyZXNwb25zZVN0cikge1xuICAgICAgICAgIC8vICAgcmVzcG9uc2VTdHIgPSBcInt9XCI7XG4gICAgICAgICAgLy8gfVxuICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKHJlc3BvbnNlU3RyKTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICByZWplY3QoRXJyb3IoXCJJbnZhbGlkIEpTT04gcmVzcG9uc2VcIikpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBSZXNvbHZlIHRoZSBwcm9taXNlIHdpdGggdGhlIHJlc3BvbnNlIHRleHRcbiAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE90aGVyd2lzZSByZWplY3Qgd2l0aCB0aGUgc3RhdHVzIHRleHRcbiAgICAgICAgLy8gd2hpY2ggd2lsbCBob3BlZnVsbHkgYmUgYSBtZWFuaW5nZnVsIGVycm9yXG4gICAgICAgIHJlamVjdChFcnJvcihyZXEuc3RhdHVzVGV4dCkpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgbmV0d29yayBlcnJvcnNcbiAgICByZXEub25lcnJvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJlamVjdChFcnJvcihcIk5ldHdvcmsgRXJyb3JcIikpO1xuICAgIH07XG5cbiAgICAvLyBNYWtlIHRoZSByZXF1ZXN0XG4gICAgaWYgKGJvZHkpIHtcbiAgICAgIGlmICghb3B0aW9ucy5jb250ZW50VHlwZSB8fCBvcHRpb25zLmNvbnRlbnRUeXBlID09PSBEYXRhRm9ybWF0cy5KU09OKSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSBKU09OLnN0cmluZ2lmeShib2R5KTtcbiAgICAgICAgLy8gTWFrZSB0aGUgcmVxdWVzdFxuICAgICAgICByZXEuc2VuZChqc29uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGJvZHkgY2FuIG5vIGxvbmdlciBiZSBKU09OXG4gICAgICAgIHJlcS5zZW5kKGJvZHkgYXMgRG9jdW1lbnQgfCBYTUxIdHRwUmVxdWVzdEJvZHlJbml0KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVxLnNlbmQoKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBpc1N1Y2Nlc3Moc3RhdHVzOiBudW1iZXIpIHtcbiAgcmV0dXJuIHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwO1xufVxuXG5mdW5jdGlvbiBpc1ZlcmlmaWVkT3JpZ2luKG9yaWdpbjogc3RyaW5nKSB7XG4gIGNvbnN0IHdoaXRlbGlzdGVkID0gb3JpZ2luLm1hdGNoKFxuICAgIFwiXmh0dHBzPzovLyhbXi9dK1suXSk/KGRvbW98ZG9tb3RlY2h8ZG9tb3JpZykuKGNvbXxpbyk/KC8uKik/JFwiXG4gICk7XG4gIGNvbnN0IGJsYWNrbGlzdGVkID0gb3JpZ2luLm1hdGNoKFwiKC4qKS4oZG9tb2FwcHMpLiguKilcIik7XG4gIHJldHVybiAhIXdoaXRlbGlzdGVkICYmICFibGFja2xpc3RlZDtcbn1cblxuZnVuY3Rpb24gZ2V0UXVlcnlQYXJhbXMoKTogUXVlcnlQYXJhbXMge1xuICBjb25zdCBxdWVyeSA9IGxvY2F0aW9uLnNlYXJjaC5zdWJzdHIoMSk7XG4gIGxldCByZXN1bHQ6IHsgW2luZGV4OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuICBxdWVyeS5zcGxpdChcIiZcIikuZm9yRWFjaChmdW5jdGlvbiAocGFydCkge1xuICAgIGNvbnN0IGl0ZW0gPSBwYXJ0LnNwbGl0KFwiPVwiKTtcbiAgICByZXN1bHRbaXRlbVswXV0gPSBkZWNvZGVVUklDb21wb25lbnQoaXRlbVsxXSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBzZXRGb3JtYXRIZWFkZXJzKFxuICByZXE6IFhNTEh0dHBSZXF1ZXN0LFxuICB1cmw6IHN0cmluZyxcbiAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zXG4pIHtcbiAgaWYgKHVybC5pbmRleE9mKFwiZGF0YS92XCIpID09PSAtMSkge1xuICAgIHJldHVybjtcbiAgfVxuICAvLyBzZXQgZm9ybWF0XG4gIGNvbnN0IHJlcXVlc3RGb3JtYXQ6IERhdGFGb3JtYXRzID1cbiAgICBvcHRpb25zLmZvcm1hdCAhPT0gdW5kZWZpbmVkXG4gICAgICA/IGRvbW9Gb3JtYXRUb1JlcXVlc3RGb3JtYXQob3B0aW9ucy5mb3JtYXQpXG4gICAgICA6IERhdGFGb3JtYXRzLkRFRkFVTFQ7XG5cbiAgcmVxLnNldFJlcXVlc3RIZWFkZXIoXCJBY2NlcHRcIiwgcmVxdWVzdEZvcm1hdCk7XG59XG5cbmZ1bmN0aW9uIHNldENvbnRlbnRIZWFkZXJzKHJlcTogWE1MSHR0cFJlcXVlc3QsIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9ucykge1xuICBpZiAob3B0aW9ucy5jb250ZW50VHlwZSkge1xuICAgIC8vIHNldCBjb250ZW50IHR5cGUgaWYgdXNlciBwYXNzZWQgb3B0aW9uXG4gICAgaWYgKG9wdGlvbnMuY29udGVudFR5cGUgIT09IFwibXVsdGlwYXJ0XCIpIHtcbiAgICAgIHJlcS5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIG9wdGlvbnMuY29udGVudFR5cGUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXEuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBEYXRhRm9ybWF0cy5KU09OKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRBdXRoVG9rZW5IZWFkZXIocmVxOiBYTUxIdHRwUmVxdWVzdCkge1xuICBpZiAodG9rZW4pIHtcbiAgICByZXEuc2V0UmVxdWVzdEhlYWRlcihcIlgtRE9NTy1SeXV1LVNlc3Npb25cIiwgdG9rZW4pO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNldFJlc3BvbnNlVHlwZShyZXE6IFhNTEh0dHBSZXF1ZXN0LCBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnMpIHtcbiAgLy9zZXQgcmVzcG9uc2UgdHlwZSBpZiB1c2VyIHBhc3NlZCBvcHRpb25cbiAgaWYgKG9wdGlvbnMucmVzcG9uc2VUeXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXEucmVzcG9uc2VUeXBlID0gb3B0aW9ucy5yZXNwb25zZVR5cGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlTm9kZShub2RlOiBIVE1MRWxlbWVudCkge1xuICBpZiAobm9kZSA9PT0gZG9jdW1lbnQuYm9keSB8fCBub2RlID09PSBkb2N1bWVudC5oZWFkKVxuICAgIHJldHVybiBwcm9jZXNzQm9keShub2RlKTtcblxuICBjb25zdCBocmVmQXR0cmlidXRlID1cbiAgICAobm9kZS5kYXRhc2V0ICYmIG5vZGUuZGF0YXNldC5kb21vSHJlZikgfHwgbm9kZS5nZXRBdHRyaWJ1dGUoXCJocmVmXCIpO1xuICBjb25zdCBzcmNBdHRyaWJ1dGUgPVxuICAgIChub2RlLmRhdGFzZXQgJiYgbm9kZS5kYXRhc2V0LmRvbW9TcmMpIHx8IG5vZGUuZ2V0QXR0cmlidXRlKFwic3JjXCIpO1xuICBjb25zdCBhdHRyID0gaHJlZkF0dHJpYnV0ZSA/IFwiaHJlZlwiIDogXCJzcmNcIjtcbiAgY29uc3QgdXJsID0gaHJlZkF0dHJpYnV0ZSB8fCBzcmNBdHRyaWJ1dGU7XG5cbiAgaWYgKCF1cmwgfHwgIXRva2VuIHx8IHVybC5pbmNsdWRlcyh0b2tlbikpIHJldHVybjtcblxuICBjb25zdCBuZXdVcmwgPSBuZXcgVVJMKHVybCwgZG9jdW1lbnQubG9jYXRpb24ub3JpZ2luKTtcbiAgY29uc3QgaXNSZWxhdGl2ZVVybCA9IG5ld1VybC5vcmlnaW4gPT09IGRvY3VtZW50LmxvY2F0aW9uLm9yaWdpbjtcbiAgaWYgKGlzUmVsYXRpdmVVcmwpIHtcbiAgICBuZXdVcmwuc2VhcmNoUGFyYW1zLmFwcGVuZChcInJ5dXUtc2lkXCIsIHRva2VuKTtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShhdHRyLCBuZXdVcmwuaHJlZik7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc0JvZHkobm9kZTogYW55KSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgIGhhbmRsZU5vZGUoPEhUTUxFbGVtZW50Pm5vZGUuY2hpbGRyZW5baV0pO1xuICB9XG59XG5cbmNvbnN0IG9iID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9ucykgPT4ge1xuICBmb3IgKGNvbnN0IHJlY29yZCBvZiBtdXRhdGlvbnMpIHtcbiAgICBwcm9jZXNzQm9keShyZWNvcmQudGFyZ2V0KTtcbiAgfVxufSk7XG5cbm9iLm9ic2VydmUoZG9jdW1lbnQuYm9keSwgeyBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUgfSk7XG5vYi5vYnNlcnZlKGRvY3VtZW50LmhlYWQsIHsgY2hpbGRMaXN0OiB0cnVlLCBzdWJ0cmVlOiB0cnVlIH0pO1xuIiwiLyoqXG4gKiBTdXBwb3J0ZWQgYGFjY2VwdGAgaGVhZGVycyBmb3IgY29udHJvbGxpbmcgdGhlIGZvcm1hdFxuICogb2YgdGhlIGRhdGEgcmV0dXJuZWQgZnJvbSBEb21vLlxuICpcbiAqIFNlZSBbZGV2ZWxvcGVyLmRvbW8uY29tXShodHRwczovL2RldmVsb3Blci5kb21vLmNvbS9kb2NzL2Rldi1zdHVkaW8tcmVmZXJlbmNlcy9kYXRhLWFwaSNEYXRhJTIwRm9ybWF0cylcbiAqIGZvciBtb3JlIGRldGFpbHMuXG4gKi9cbmV4cG9ydCBlbnVtIERhdGFGb3JtYXRzIHtcbiAgREVGQVVMVCA9ICdhcHBsaWNhdGlvbi9hcnJheS1vZi1vYmplY3RzJyxcbiAgQVJSQVlfT0ZfT0JKRUNUUyA9ICdhcHBsaWNhdGlvbi9hcnJheS1vZi1vYmplY3RzJyxcbiAgSlNPTiA9ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgQ1NWID0gJ3RleHQvY3N2JyxcbiAgRVhDRUwgPSAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnLFxuICBQTEFJTiA9ICd0ZXh0L3BsYWluJ1xufSIsImV4cG9ydCBlbnVtIFJlcXVlc3RNZXRob2RzIHtcbiAgZ2V0ID0gJ0dFVCcsXG4gIEdFVCA9ICdHRVQnLFxuICBwb3N0ID0gJ1BPU1QnLFxuICBQT1NUID0gJ1BPU1QnLFxuICBwdXQgPSAnUFVUJyxcbiAgUFVUID0gJ1BVVCcsXG4gIGRlbGV0ZSA9ICdERUxFVEUnLFxuICBERUxFVEUgPSAnREVMRVRFJyxcbn1cbiIsImV4cG9ydCB7IFJlcXVlc3RNZXRob2RzIH0gZnJvbSAnLi9lbnVtcy9yZXF1ZXN0LW1ldGhvZHMnO1xuZXhwb3J0IHsgRG9tb0RhdGFGb3JtYXRzIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2RvbW8tZGF0YS1mb3JtYXRzJztcbmV4cG9ydCB7IERhdGFGb3JtYXRzIH0gZnJvbSAnLi9lbnVtcy9kYXRhLWZvcm1hdHMnO1xuZXhwb3J0IHsgRmlsdGVyRGF0YVR5cGVzIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2ZpbHRlci1kYXRhLXR5cGVzJztcbmV4cG9ydCB7IEZpbHRlciB9IGZyb20gJy4vaW50ZXJmYWNlcy9maWx0ZXInO1xuXG5leHBvcnQgeyBSZXF1ZXN0T3B0aW9ucywgT2JqZWN0UmVxdWVzdE9wdGlvbnMsIEFycmF5UmVxdWVzdE9wdGlvbnMgfSBmcm9tICcuL2ludGVyZmFjZXMvcmVxdWVzdC1vcHRpb25zJztcbmV4cG9ydCB7IFF1ZXJ5UGFyYW1zIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3F1ZXJ5LXBhcmFtcyc7XG5leHBvcnQgeyBSZXF1ZXN0Qm9keSB9IGZyb20gJy4vaW50ZXJmYWNlcy9yZXF1ZXN0LWJvZHknO1xuZXhwb3J0IHsgUmVzcG9uc2VCb2R5LCBPYmplY3RSZXNwb25zZUJvZHksIEFycmF5UmVzcG9uc2VCb2R5IH0gZnJvbSAnLi9pbnRlcmZhY2VzL3Jlc3BvbnNlLWJvZHknO1xuZXhwb3J0IHsgSnNvbiB9IGZyb20gJy4vaW50ZXJmYWNlcy9qc29uJztcbiIsImV4cG9ydCBlbnVtIEZpbHRlckRhdGFUeXBlc3tcbiAgTlVNRVJJQyA9IFwiTlVNRVJJQ1wiLFxuICBEQVRFID0gXCJEQVRFXCIsXG4gIERBVEVUSU1FID0gXCJEQVRFVElNRVwiLFxuICBTVFJJTkcgPSBcIlNUUklOR1wiLFxufVxuIiwiaW1wb3J0IHsgRG9tb0RhdGFGb3JtYXRzLCBEYXRhRm9ybWF0cyB9IGZyb20gJy4uL21vZGVscyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBkb21vRm9ybWF0VG9SZXF1ZXN0Rm9ybWF0KGZvcm1hdDogRG9tb0RhdGFGb3JtYXRzKTogRGF0YUZvcm1hdHMge1xuICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgIGNhc2UgJ2FycmF5LW9mLW9iamVjdHMnOiB7XG4gICAgICByZXR1cm4gRGF0YUZvcm1hdHMuQVJSQVlfT0ZfT0JKRUNUUztcbiAgICB9XG4gICAgY2FzZSAnYXJyYXktb2YtYXJyYXlzJzoge1xuICAgICAgcmV0dXJuIERhdGFGb3JtYXRzLkpTT047XG4gICAgfVxuICAgIGNhc2UgJ2V4Y2VsJzoge1xuICAgICAgcmV0dXJuIERhdGFGb3JtYXRzLkVYQ0VMO1xuICAgIH1cbiAgICBjYXNlICdjc3YnOiB7XG4gICAgICByZXR1cm4gRGF0YUZvcm1hdHMuQ1NWO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICByZXR1cm4gRGF0YUZvcm1hdHMuREVGQVVMVDtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBzdGFydHVwXG4vLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8vIFRoaXMgZW50cnkgbW9kdWxlIGlzIHJlZmVyZW5jZWQgYnkgb3RoZXIgbW9kdWxlcyBzbyBpdCBjYW4ndCBiZSBpbmxpbmVkXG52YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNzI3KTtcbiJdLCJuYW1lcyI6WyJyb290IiwiZmFjdG9yeSIsImV4cG9ydHMiLCJtb2R1bGUiLCJkZWZpbmUiLCJhbWQiLCJzZWxmIiwicG9zdCIsInVybCIsImJvZHkiLCJvcHRpb25zIiwiZG9tb0h0dHAiLCJSZXF1ZXN0TWV0aG9kcyIsIlBPU1QiLCJwdXQiLCJQVVQiLCJnZXQiLCJHRVQiLCJkZWxldGUiLCJERUxFVEUiLCJnZXRBbGwiLCJ1cmxzIiwiUHJvbWlzZSIsImFsbCIsIm1hcCIsImRvbW8iLCJvbkRhdGFVcGRhdGUiLCJjYiIsImlubmVyQ2FsbGJhY2siLCJldmVudCIsImlzVmVyaWZpZWRPcmlnaW4iLCJvcmlnaW4iLCJkYXRhIiwibGVuZ3RoIiwibWVzc2FnZSIsIkpTT04iLCJwYXJzZSIsImhhc093blByb3BlcnR5IiwiYWxpYXMiLCJhY2siLCJzdHJpbmdpZnkiLCJzb3VyY2UiLCJNZXNzYWdlUG9ydCIsIlNlcnZpY2VXb3JrZXIiLCJwb3N0TWVzc2FnZSIsImVyciIsImNvbnNvbGUiLCJ3YXJuIiwid2luZG93IiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJuYXZpZ2F0ZSIsImlzTmV3V2luZG93IiwicGFyZW50IiwiZmlsdGVyQ29udGFpbmVyIiwiZmlsdGVycyIsInVzZXJBZ2VudCIsIm5hdmlnYXRvciIsInRvTG93ZXJDYXNlIiwic2FmYXJpIiwidGVzdCIsImlvcyIsImZpbHRlciIsImNvbHVtbk5hbWUiLCJjb2x1bW4iLCJvcGVyYXRvciIsIm9wZXJhbmQiLCJ2YWx1ZXMiLCJkYXRhVHlwZSIsIndlYmtpdCIsIm1lc3NhZ2VIYW5kbGVycyIsImRvbW9maWx0ZXIiLCJjb25uZWN0ZWQiLCJsaXN0ZW5lcnMiLCJvbkZpbHRlcnNVcGRhdGUiLCJjb25uZWN0IiwiY2hhbm5lbCIsIk1lc3NhZ2VDaGFubmVsIiwicG9ydDIiLCJjYWxsYmFjayIsImluZGV4IiwicHVzaCIsInBvcnQxIiwib25tZXNzYWdlIiwiZSIsInJlc3BvbnNlUG9ydCIsInBvcnRzIiwidW5kZWZpbmVkIiwiZm9yRWFjaCIsInNwbGljZSIsImVudiIsImdldFF1ZXJ5UGFyYW1zIiwiX191dGlsIiwic2V0Rm9ybWF0SGVhZGVycyIsImlzU3VjY2VzcyIsInRva2VuIiwiX19SWVVVX1NJRF9fIiwibWV0aG9kIiwiYXN5bmMiLCJyZXNvbHZlIiwicmVqZWN0IiwicmVxIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwiY29udGVudFR5cGUiLCJzZXRSZXF1ZXN0SGVhZGVyIiwiRGF0YUZvcm1hdHMiLCJzZXRDb250ZW50SGVhZGVycyIsInNldEF1dGhUb2tlbkhlYWRlciIsInJlc3BvbnNlVHlwZSIsInNldFJlc3BvbnNlVHlwZSIsIm9ubG9hZCIsInN0YXR1cyIsImluY2x1ZGVzIiwiZm9ybWF0IiwicmVzcG9uc2UiLCJCbG9iIiwidHlwZSIsImdldFJlc3BvbnNlSGVhZGVyIiwicmVzcG9uc2VTdHIiLCJleCIsIkVycm9yIiwic3RhdHVzVGV4dCIsIm9uZXJyb3IiLCJzZW5kIiwianNvbiIsIndoaXRlbGlzdGVkIiwibWF0Y2giLCJibGFja2xpc3RlZCIsInF1ZXJ5IiwibG9jYXRpb24iLCJzZWFyY2giLCJzdWJzdHIiLCJyZXN1bHQiLCJzcGxpdCIsInBhcnQiLCJpdGVtIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiaW5kZXhPZiIsInJlcXVlc3RGb3JtYXQiLCJkb21vRm9ybWF0VG9SZXF1ZXN0Rm9ybWF0IiwiREVGQVVMVCIsImhhbmRsZU5vZGUiLCJub2RlIiwiZG9jdW1lbnQiLCJoZWFkIiwicHJvY2Vzc0JvZHkiLCJocmVmQXR0cmlidXRlIiwiZGF0YXNldCIsImRvbW9IcmVmIiwiZ2V0QXR0cmlidXRlIiwic3JjQXR0cmlidXRlIiwiZG9tb1NyYyIsImF0dHIiLCJuZXdVcmwiLCJVUkwiLCJzZWFyY2hQYXJhbXMiLCJhcHBlbmQiLCJzZXRBdHRyaWJ1dGUiLCJocmVmIiwiaSIsImNoaWxkcmVuIiwib2IiLCJNdXRhdGlvbk9ic2VydmVyIiwibXV0YXRpb25zIiwidGFyZ2V0Iiwib2JzZXJ2ZSIsImNoaWxkTGlzdCIsInN1YnRyZWUiLCJGaWx0ZXJEYXRhVHlwZXMiLCJBUlJBWV9PRl9PQkpFQ1RTIiwiRVhDRUwiLCJDU1YiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIl0sInNvdXJjZVJvb3QiOiIifQ==
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.domo=t():e.domo=t()}(self,(()=>(()=>{"use strict";var e={727:(e,t,r)=>{var o=r(554),n=r(206),a=function(){function e(){}return e.post=function(e,t,r){return i(o.RequestMethods.POST,e,r,!0,t)},e.put=function(e,t,r){return i(o.RequestMethods.PUT,e,r,!0,t)},e.get=function(e,t){return i(o.RequestMethods.GET,e,t)},e.delete=function(e,t){return i(o.RequestMethods.DELETE,e,t)},e.getAll=function(t,r){return Promise.all(t.map((function(t){return e.get(t,r)})))},e.onDataUpdate=function(e){function t(t){if(c(t.origin)&&"string"==typeof t.data&&t.data.length>0)try{var r=JSON.parse(t.data);if(!r.hasOwnProperty("alias"))return;var o=r.alias,n=JSON.stringify({event:"ack",alias:o});t.source instanceof MessagePort||t.source instanceof ServiceWorker||t.source.postMessage(n,t.origin),e(o)}catch(e){console.warn("There was an error in onDataUpdate! It may be that our event listener caught a message from another source and tried to parse it, so your update still may have worked. If you would like more info, here is the error: \n",e)}}return window.addEventListener("message",t),function(){return window.removeEventListener("message",t)}},e.navigate=function(e,t){var r=JSON.stringify({event:"navigate",url:e,isNewWindow:t});window.parent.postMessage(r,"*")},e.filterContainer=function(e){var t=window.navigator.userAgent.toLowerCase(),r=/safari/.test(t),o=/iphone|ipod|ipad/.test(t),n=JSON.stringify({event:"filter",filter:e&&e.map((function(e){return{columnName:e.column,operator:e.operator||e.operand,values:e.values,dataType:e.dataType}}))});o&&!r?window.webkit.messageHandlers.domofilter.postMessage(e&&e.map((function(e){return{column:e.column,operand:e.operator||e.operand,values:e.values,dataType:e.dataType}}))):window.parent.postMessage(n,"*")},e.connected=!1,e.listeners={onFiltersUpdate:[]},e.connect=function(){e.connected||(e.connected=!0,e.channel=new MessageChannel,window.parent.postMessage(JSON.stringify({event:"subscribe"}),"*",[e.channel.port2]))},e.onFiltersUpdate=function(t){e.connect();var r=e.listeners.onFiltersUpdate.push(t)-1;return e.channel.port1.onmessage=function(t){var r=t.ports[0];void 0!==r&&"filtersUpdated"===t.data.event&&e.listeners.onFiltersUpdate.length>0&&(r.postMessage({}),e.listeners.onFiltersUpdate.forEach((function(e){return e(t.data.filters)})))},function(){e.listeners.onFiltersUpdate.splice(r,1)}},e.env=d(),e.__util={isVerifiedOrigin:c,getQueryParams:d,setFormatHeaders:p,isSuccess:u},e}(),s=window.__RYUU_SID__;function i(e,t,r,n,a){return r=r||{},new Promise((function(i,c){var d=new XMLHttpRequest;if(n?d.open(e,t,n):d.open(e,t),p(d,t,r),function(e,t){t.contentType?"multipart"!==t.contentType&&e.setRequestHeader("Content-Type",t.contentType):e.setRequestHeader("Content-Type",o.DataFormats.JSON)}(d,r),function(e){s&&e.setRequestHeader("X-DOMO-Ryuu-Session",s)}(d),function(e,t){void 0!==t.responseType&&(e.responseType=t.responseType)}(d,r),d.onload=function(){var e;if(u(d.status)){!["csv","excel"].includes(r.format)&&d.response||i(d.response),"blob"===r.responseType&&i(new Blob([d.response],{type:d.getResponseHeader("content-type")}));var t=d.response;try{e=JSON.parse(t)}catch(e){return void c(Error("Invalid JSON response"))}i(e)}else c(Error(d.statusText))},d.onerror=function(){c(Error("Network Error"))},a)if(r.contentType&&r.contentType!==o.DataFormats.JSON)d.send(a);else{var f=JSON.stringify(a);d.send(f)}else d.send()}))}function u(e){return e>=200&&e<300}function c(e){var t=e.match("^https?://([^/]+[.])?(domo|domotech|domorig).(com|io)?(/.*)?$"),r=e.match("(.*).(domoapps).(.*)");return!!t&&!r}function d(){var e=location.search.substr(1),t={};return e.split("&").forEach((function(e){var r=e.split("=");t[r[0]]=decodeURIComponent(r[1])})),t}function p(e,t,r){if(-1!==t.indexOf("data/v")){var a=void 0!==r.format?(0,n.domoFormatToRequestFormat)(r.format):o.DataFormats.DEFAULT;e.setRequestHeader("Accept",a)}}function f(e){if(e===document.body||e===document.head)return l(e);var t=e.dataset&&e.dataset.domoHref||e.getAttribute("href"),r=e.dataset&&e.dataset.domoSrc||e.getAttribute("src"),o=t?"href":"src",n=t||r;if(n&&s&&!n.includes(s)){var a=new URL(n,document.location.origin);a.origin===document.location.origin&&(a.searchParams.append("ryuu-sid",s),e.setAttribute(o,a.href))}}function l(e){for(var t=0;t<e.children.length;t++)f(e.children[t])}var m=new MutationObserver((function(e){for(var t=0,r=e;t<r.length;t++)l(r[t].target)}));m.observe(document.body,{childList:!0,subtree:!0}),m.observe(document.head,{childList:!0,subtree:!0}),e.exports=a},548:(e,t)=>{var r;Object.defineProperty(t,"__esModule",{value:!0}),t.DataFormats=void 0,(r=t.DataFormats||(t.DataFormats={})).DEFAULT="application/array-of-objects",r.ARRAY_OF_OBJECTS="application/array-of-objects",r.JSON="application/json",r.CSV="text/csv",r.EXCEL="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",r.PLAIN="text/plain"},64:(e,t)=>{var r;Object.defineProperty(t,"__esModule",{value:!0}),t.RequestMethods=void 0,(r=t.RequestMethods||(t.RequestMethods={})).get="GET",r.GET="GET",r.post="POST",r.POST="POST",r.put="PUT",r.PUT="PUT",r.delete="DELETE",r.DELETE="DELETE"},554:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.FilterDataTypes=t.DataFormats=t.RequestMethods=void 0;var o=r(64);Object.defineProperty(t,"RequestMethods",{enumerable:!0,get:function(){return o.RequestMethods}});var n=r(548);Object.defineProperty(t,"DataFormats",{enumerable:!0,get:function(){return n.DataFormats}});var a=r(616);Object.defineProperty(t,"FilterDataTypes",{enumerable:!0,get:function(){return a.FilterDataTypes}})},616:(e,t)=>{var r;Object.defineProperty(t,"__esModule",{value:!0}),t.FilterDataTypes=void 0,(r=t.FilterDataTypes||(t.FilterDataTypes={})).NUMERIC="NUMERIC",r.DATE="DATE",r.DATETIME="DATETIME",r.STRING="STRING"},206:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.domoFormatToRequestFormat=void 0;var o=r(554);t.domoFormatToRequestFormat=function(e){switch(e){case"array-of-objects":return o.DataFormats.ARRAY_OF_OBJECTS;case"array-of-arrays":return o.DataFormats.JSON;case"excel":return o.DataFormats.EXCEL;case"csv":return o.DataFormats.CSV;default:return o.DataFormats.DEFAULT}}}},t={};return function r(o){var n=t[o];if(void 0!==n)return n.exports;var a=t[o]={exports:{}};return e[o](a,a.exports,r),a.exports}(727)})()));
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QWpFLFlBQVlrRSxJQUVyQixRQUNFLE9BQU8sRUFBQWxFLFlBQVltQyxRQUd6QixJQ25CSWdDLEVBQTJCLENBQUMsU0FHaEMsU0FBU0MsRUFBb0JDLEdBRTVCLElBQUlDLEVBQWVILEVBQXlCRSxHQUM1QyxRQUFxQnhGLElBQWpCeUYsRUFDSCxPQUFPQSxFQUFhOUssUUFHckIsSUFBSUMsRUFBUzBLLEVBQXlCRSxHQUFZLENBR2pEN0ssUUFBUyxDQUFDLEdBT1gsT0FIQStLLEVBQW9CRixHQUFVNUssRUFBUUEsRUFBT0QsUUFBUzRLLEdBRy9DM0ssRUFBT0QsT0FDZixDQ25CMEI0SyxDQUFvQixNUk85QyIsInNvdXJjZXMiOlsid2VicGFjazovL2RvbW8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL2RvbW8vLi9zcmMvZG9tby50cyIsIndlYnBhY2s6Ly9kb21vLy4vc3JjL21vZGVscy9lbnVtcy9kYXRhLWZvcm1hdHMudHMiLCJ3ZWJwYWNrOi8vZG9tby8uL3NyYy9tb2RlbHMvZW51bXMvcmVxdWVzdC1tZXRob2RzLnRzIiwid2VicGFjazovL2RvbW8vLi9zcmMvbW9kZWxzL2luZGV4LnRzIiwid2VicGFjazovL2RvbW8vLi9zcmMvbW9kZWxzL2ludGVyZmFjZXMvZmlsdGVyLWRhdGEtdHlwZXMudHMiLCJ3ZWJwYWNrOi8vZG9tby8uL3NyYy91dGlscy9kYXRhLWhlbHBlcnMudHMiLCJ3ZWJwYWNrOi8vZG9tby93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9kb21vL3dlYnBhY2svc3RhcnR1cCJdLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJkb21vXCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcImRvbW9cIl0gPSBmYWN0b3J5KCk7XG59KShzZWxmLCAoKSA9PiB7XG5yZXR1cm4gIiwiaW1wb3J0IHtcbiAgUmVxdWVzdE1ldGhvZHMsXG4gIFJlcXVlc3RPcHRpb25zLFxuICBPYmplY3RSZXF1ZXN0T3B0aW9ucyxcbiAgQXJyYXlSZXF1ZXN0T3B0aW9ucyxcbiAgRGF0YUZvcm1hdHMsXG4gIFF1ZXJ5UGFyYW1zLFxuICBGaWx0ZXIsXG4gIFJlcXVlc3RCb2R5LFxuICBSZXNwb25zZUJvZHksXG4gIE9iamVjdFJlc3BvbnNlQm9keSxcbiAgQXJyYXlSZXNwb25zZUJvZHksXG59IGZyb20gXCIuL21vZGVsc1wiO1xuaW1wb3J0IHsgZG9tb0Zvcm1hdFRvUmVxdWVzdEZvcm1hdCB9IGZyb20gXCIuL3V0aWxzL2RhdGEtaGVscGVyc1wiO1xuXG5leHBvcnQgPSBkb21vO1xuXG5jbGFzcyBkb21vIHtcbiAgc3RhdGljIHBvc3QoXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgYm9keT86IFJlcXVlc3RCb2R5LFxuICAgIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuICApOiBQcm9taXNlPFJlc3BvbnNlQm9keT47XG4gIHN0YXRpYyBwb3N0PFQ+KFxuICAgIHVybDogc3RyaW5nLFxuICAgIGJvZHk/OiBSZXF1ZXN0Qm9keSxcbiAgICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbiAgKTogUHJvbWlzZTxUPjtcbiAgc3RhdGljIHBvc3Q8VD4oXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgYm9keT86IFJlcXVlc3RCb2R5LFxuICAgIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuICApOiBQcm9taXNlPFQ+IHtcbiAgICByZXR1cm4gZG9tb0h0dHA8VD4oUmVxdWVzdE1ldGhvZHMuUE9TVCwgdXJsLCBvcHRpb25zLCB0cnVlLCBib2R5KTtcbiAgfVxuXG4gIHN0YXRpYyBwdXQoXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgYm9keT86IFJlcXVlc3RCb2R5LFxuICAgIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuICApOiBQcm9taXNlPFJlc3BvbnNlQm9keT47XG4gIHN0YXRpYyBwdXQ8VD4oXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgYm9keT86IFJlcXVlc3RCb2R5LFxuICAgIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuICApOiBQcm9taXNlPFQ+O1xuICBzdGF0aWMgcHV0PFQ+KFxuICAgIHVybDogc3RyaW5nLFxuICAgIGJvZHk/OiBSZXF1ZXN0Qm9keSxcbiAgICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbiAgKTogUHJvbWlzZTxUPiB7XG4gICAgcmV0dXJuIGRvbW9IdHRwPFQ+KFJlcXVlc3RNZXRob2RzLlBVVCwgdXJsLCBvcHRpb25zLCB0cnVlLCBib2R5KTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQoXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgb3B0aW9uczogT2JqZWN0UmVxdWVzdE9wdGlvbnNcbiAgKTogUHJvbWlzZTxPYmplY3RSZXNwb25zZUJvZHlbXT47XG4gIHN0YXRpYyBnZXQoXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgb3B0aW9uczogQXJyYXlSZXF1ZXN0T3B0aW9uc1xuICApOiBQcm9taXNlPEFycmF5UmVzcG9uc2VCb2R5PjtcbiAgc3RhdGljIGdldCh1cmw6IHN0cmluZywgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zKTogUHJvbWlzZTxSZXNwb25zZUJvZHk+O1xuICBzdGF0aWMgZ2V0PFQ+KHVybDogc3RyaW5nLCBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnMpOiBQcm9taXNlPFQ+O1xuICBzdGF0aWMgZ2V0PFQ+KHVybDogc3RyaW5nLCBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnMpOiBQcm9taXNlPFQ+IHtcbiAgICByZXR1cm4gZG9tb0h0dHA8VD4oUmVxdWVzdE1ldGhvZHMuR0VULCB1cmwsIG9wdGlvbnMpO1xuICB9XG5cbiAgc3RhdGljIGRlbGV0ZSh1cmw6IHN0cmluZywgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zKTogUHJvbWlzZTxSZXNwb25zZUJvZHk+O1xuICBzdGF0aWMgZGVsZXRlPFQ+KHVybDogc3RyaW5nLCBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnMpOiBQcm9taXNlPFQ+O1xuICBzdGF0aWMgZGVsZXRlPFQ+KHVybDogc3RyaW5nLCBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnMpOiBQcm9taXNlPFQ+IHtcbiAgICByZXR1cm4gZG9tb0h0dHA8VD4oUmVxdWVzdE1ldGhvZHMuREVMRVRFLCB1cmwsIG9wdGlvbnMpO1xuICB9XG5cbiAgc3RhdGljIGdldEFsbChcbiAgICB1cmxzOiBzdHJpbmdbXSxcbiAgICBvcHRpb25zOiBPYmplY3RSZXF1ZXN0T3B0aW9uc1xuICApOiBQcm9taXNlPE9iamVjdFJlc3BvbnNlQm9keVtdW10+O1xuICBzdGF0aWMgZ2V0QWxsKFxuICAgIHVybHM6IHN0cmluZ1tdLFxuICAgIG9wdGlvbnM6IEFycmF5UmVxdWVzdE9wdGlvbnNcbiAgKTogUHJvbWlzZTxBcnJheVJlc3BvbnNlQm9keVtdPjtcbiAgc3RhdGljIGdldEFsbChcbiAgICB1cmxzOiBzdHJpbmdbXSxcbiAgICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbiAgKTogUHJvbWlzZTxSZXNwb25zZUJvZHlbXT47XG4gIHN0YXRpYyBnZXRBbGw8VD4odXJsczogc3RyaW5nW10sIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9ucyk6IFByb21pc2U8VFtdPjtcbiAgc3RhdGljIGdldEFsbDxUPih1cmxzOiBzdHJpbmdbXSwgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zKTogUHJvbWlzZTxUW10+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoXG4gICAgICB1cmxzLm1hcChmdW5jdGlvbiAodXJsKSB7XG4gICAgICAgIHJldHVybiBkb21vLmdldDxUPih1cmwsIG9wdGlvbnMpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIExldCB0aGUgZG9tb2FwcCBvcHRpb25hbGx5IGhhbmRsZSBpdHMgb3duIGRhdGEgdXBkYXRlcy5cbiAgICovXG4gIHN0YXRpYyBvbkRhdGFVcGRhdGUoY2I6IChhbGlhczogc3RyaW5nKSA9PiB2b2lkKSB7XG4gICAgZnVuY3Rpb24gaW5uZXJDYWxsYmFjayhldmVudDogTWVzc2FnZUV2ZW50KSB7XG4gICAgICBpZiAoIWlzVmVyaWZpZWRPcmlnaW4oZXZlbnQub3JpZ2luKSkgcmV0dXJuO1xuXG4gICAgICBpZiAodHlwZW9mIGV2ZW50LmRhdGEgPT09IFwic3RyaW5nXCIgJiYgZXZlbnQuZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IEpTT04ucGFyc2UoZXZlbnQuZGF0YSk7XG4gICAgICAgICAgaWYgKCFtZXNzYWdlLmhhc093blByb3BlcnR5KFwiYWxpYXNcIikpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBhbGlhcyA9IG1lc3NhZ2UuYWxpYXM7XG5cbiAgICAgICAgICAvLyBzZW5kIGFja25vd2xlZGdlbWVudCB0byBwcmV2ZW50IGF1dG9yZWZyZXNoXG4gICAgICAgICAgY29uc3QgYWNrID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgZXZlbnQ6IFwiYWNrXCIsXG4gICAgICAgICAgICBhbGlhczogYWxpYXMsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBPbmx5IFdpbmRvd1Byb3h5IHwgV2luZG93IGhhdmUgdGhlIHBvc3RNZXNzYWdlIG1ldGhvZCBhbmQgdGhlIHR5cGUgb2YgZXZlbnQuc291cmNlIHZhcmllcyBiZXR3ZWVuIGJyb3dzZXJzXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIShldmVudC5zb3VyY2UgaW5zdGFuY2VvZiBNZXNzYWdlUG9ydCkgJiZcbiAgICAgICAgICAgICEoZXZlbnQuc291cmNlIGluc3RhbmNlb2YgU2VydmljZVdvcmtlcilcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGV2ZW50LnNvdXJjZS5wb3N0TWVzc2FnZShhY2ssIGV2ZW50Lm9yaWdpbik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gaW5mb3JtIGRvbW8gYXBwIHdoaWNoIGFsaWFzIGhhcyBiZWVuIHVwZGF0ZWRcbiAgICAgICAgICBjYihhbGlhcyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnN0IGluZm8gPVxuICAgICAgICAgICAgXCJUaGVyZSB3YXMgYW4gZXJyb3IgaW4gb25EYXRhVXBkYXRlISBJdCBtYXkgYmUgdGhhdCBvdXIgZXZlbnQgbGlzdGVuZXIgY2F1Z2h0IFwiICtcbiAgICAgICAgICAgIFwiYSBtZXNzYWdlIGZyb20gYW5vdGhlciBzb3VyY2UgYW5kIHRyaWVkIHRvIHBhcnNlIGl0LCBzbyB5b3VyIHVwZGF0ZSBzdGlsbCBtYXkgaGF2ZSB3b3JrZWQuIFwiICtcbiAgICAgICAgICAgIFwiSWYgeW91IHdvdWxkIGxpa2UgbW9yZSBpbmZvLCBoZXJlIGlzIHRoZSBlcnJvcjogXFxuXCI7XG4gICAgICAgICAgY29uc29sZS53YXJuKGluZm8sIGVycik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGlubmVyQ2FsbGJhY2spO1xuICAgIHJldHVybiAoKSA9PiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgaW5uZXJDYWxsYmFjayk7XG4gIH1cblxuICAvKipcbiAgICogTGV0IHRoZSBkb21vYXBwIG9wdGlvbmFsbHkgaGFuZGxlIG90aGVyIGV2ZW50c1xuICAgKi9cbiAgc3RhdGljIGNoYW5uZWw/OiBNZXNzYWdlQ2hhbm5lbDtcbiAgc3RhdGljIGNvbm5lY3RlZCA9IGZhbHNlO1xuICBzdGF0aWMgbGlzdGVuZXJzOiB7IFtpbmRleDogc3RyaW5nXTogRnVuY3Rpb25bXSB9ID0ge1xuICAgIG9uRmlsdGVyc1VwZGF0ZTogW10sXG4gIH07XG5cbiAgc3RhdGljIGNvbm5lY3QgPSAoKSA9PiB7XG4gICAgaWYgKGRvbW8uY29ubmVjdGVkKSByZXR1cm47XG4gICAgZG9tby5jb25uZWN0ZWQgPSB0cnVlO1xuICAgIGRvbW8uY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgIHdpbmRvdy5wYXJlbnQucG9zdE1lc3NhZ2UoSlNPTi5zdHJpbmdpZnkoeyBldmVudDogXCJzdWJzY3JpYmVcIiB9KSwgXCIqXCIsIFtcbiAgICAgIGRvbW8uY2hhbm5lbC5wb3J0MixcbiAgICBdKTtcbiAgfTtcblxuICAvKipcbiAgICogTGV0IHRoZSBkb21vYXBwIGhhbmRsZSBpdHMgb3duIGZpbHRlciB1cGRhdGVzXG4gICAqL1xuICBzdGF0aWMgb25GaWx0ZXJzVXBkYXRlID0gKGNhbGxiYWNrOiBGdW5jdGlvbikgPT4ge1xuICAgIGRvbW8uY29ubmVjdCgpO1xuICAgIGNvbnN0IGluZGV4ID0gZG9tby5saXN0ZW5lcnMub25GaWx0ZXJzVXBkYXRlLnB1c2goY2FsbGJhY2spIC0gMTtcblxuICAgIGRvbW8uY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSAoZTogTWVzc2FnZUV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBbcmVzcG9uc2VQb3J0XSA9IGUucG9ydHM7XG4gICAgICBpZiAocmVzcG9uc2VQb3J0ID09PSB1bmRlZmluZWQpIHJldHVybjtcblxuICAgICAgaWYgKFxuICAgICAgICBlLmRhdGEuZXZlbnQgPT09IFwiZmlsdGVyc1VwZGF0ZWRcIiAmJlxuICAgICAgICBkb21vLmxpc3RlbmVycy5vbkZpbHRlcnNVcGRhdGUubGVuZ3RoID4gMFxuICAgICAgKSB7XG4gICAgICAgIHJlc3BvbnNlUG9ydC5wb3N0TWVzc2FnZSh7fSk7IC8vIFByZXZlbnRzIHRoZSBhcHAgZnJvbSByZWxvYWRpbmcuIFNheXMgd2UndmUgaGFuZGxlZCBpdFxuICAgICAgICBkb21vLmxpc3RlbmVycy5vbkZpbHRlcnNVcGRhdGUuZm9yRWFjaCgoY2IpID0+IGNiKGUuZGF0YS5maWx0ZXJzKSk7IC8vIDwtIHNwbGl0IG91dCBvbkZpbHRlcnNVcGRhdGUgc28gdGhhdCB5b3UgY2FuIGhhbmRsZSBlYWNoIG1lc3NhZ2UgZGlmZmVyZW50bHkgaGVyZVxuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyB1bnJlZ2lzdGVyXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvbW8ubGlzdGVuZXJzLm9uRmlsdGVyc1VwZGF0ZS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH07XG4gIH07XG5cbiAgLyoqXG4gICAqIFJlcXVlc3QgYSBuYXZpZ2F0aW9uIGNoYW5nZVxuICAgKi9cbiAgc3RhdGljIG5hdmlnYXRlKHVybDogc3RyaW5nLCBpc05ld1dpbmRvdzogYm9vbGVhbikge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgICBldmVudDogXCJuYXZpZ2F0ZVwiLFxuICAgICAgdXJsOiB1cmwsXG4gICAgICBpc05ld1dpbmRvdzogaXNOZXdXaW5kb3csXG4gICAgfSk7XG4gICAgd2luZG93LnBhcmVudC5wb3N0TWVzc2FnZShtZXNzYWdlLCBcIipcIik7XG4gIH1cblxuICBzdGF0aWMgZmlsdGVyQ29udGFpbmVyKGZpbHRlcnM6IEZpbHRlcltdIHwgbnVsbCk6IHZvaWQge1xuICAgIGNvbnN0IHVzZXJBZ2VudCA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCksXG4gICAgICBzYWZhcmkgPSAvc2FmYXJpLy50ZXN0KHVzZXJBZ2VudCksXG4gICAgICBpb3MgPSAvaXBob25lfGlwb2R8aXBhZC8udGVzdCh1c2VyQWdlbnQpO1xuXG4gICAgY29uc3QgbWVzc2FnZSA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIGV2ZW50OiBcImZpbHRlclwiLFxuICAgICAgZmlsdGVyOlxuICAgICAgICBmaWx0ZXJzICYmXG4gICAgICAgIGZpbHRlcnMubWFwKChmaWx0ZXIpID0+ICh7XG4gICAgICAgICAgY29sdW1uTmFtZTogZmlsdGVyLmNvbHVtbixcbiAgICAgICAgICBvcGVyYXRvcjogZmlsdGVyLm9wZXJhdG9yIHx8IChmaWx0ZXIgYXMgYW55KS5vcGVyYW5kLCAvLyBNb3N0IGZpbHRlciBjb2RlIChpbmNsdWRpbmcgUGhvZW5peCkgc3RpbGwgdXNlcyBcIm9wZXJhbmRcIiBpbnN0ZWFkIG9mIFwib3BlcmF0b3JcIlxuICAgICAgICAgIHZhbHVlczogZmlsdGVyLnZhbHVlcyxcbiAgICAgICAgICBkYXRhVHlwZTogZmlsdGVyLmRhdGFUeXBlLFxuICAgICAgICB9KSksXG4gICAgfSk7XG5cbiAgICBpZiAoaW9zICYmICFzYWZhcmkpIHtcbiAgICAgICh3aW5kb3cgYXMgYW55KS53ZWJraXQubWVzc2FnZUhhbmRsZXJzLmRvbW9maWx0ZXIucG9zdE1lc3NhZ2UoXG4gICAgICAgIGZpbHRlcnMgJiZcbiAgICAgICAgICBmaWx0ZXJzLm1hcCgoZmlsdGVyKSA9PiAoe1xuICAgICAgICAgICAgY29sdW1uOiBmaWx0ZXIuY29sdW1uLFxuICAgICAgICAgICAgb3BlcmFuZDogZmlsdGVyLm9wZXJhdG9yIHx8IChmaWx0ZXIgYXMgYW55KS5vcGVyYW5kLFxuICAgICAgICAgICAgdmFsdWVzOiBmaWx0ZXIudmFsdWVzLFxuICAgICAgICAgICAgZGF0YVR5cGU6IGZpbHRlci5kYXRhVHlwZSxcbiAgICAgICAgICB9KSlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdpbmRvdy5wYXJlbnQucG9zdE1lc3NhZ2UobWVzc2FnZSwgXCIqXCIpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBlbnYgPSBnZXRRdWVyeVBhcmFtcygpO1xuXG4gIHN0YXRpYyBfX3V0aWwgPSB7XG4gICAgaXNWZXJpZmllZE9yaWdpbixcbiAgICBnZXRRdWVyeVBhcmFtcyxcbiAgICBzZXRGb3JtYXRIZWFkZXJzLFxuICAgIGlzU3VjY2VzcyxcbiAgfTtcbn1cblxuY29uc3QgdG9rZW4gPSAod2luZG93IGFzIGFueSkuX19SWVVVX1NJRF9fO1xuXG5mdW5jdGlvbiBkb21vSHR0cChcbiAgbWV0aG9kOiBSZXF1ZXN0TWV0aG9kcyxcbiAgdXJsOiBzdHJpbmcsXG4gIG9wdGlvbnM6IE9iamVjdFJlcXVlc3RPcHRpb25zLFxuICBhc3luYz86IGJvb2xlYW4sXG4gIGJvZHk/OiBSZXF1ZXN0Qm9keVxuKTogUHJvbWlzZTxPYmplY3RSZXNwb25zZUJvZHlbXT47XG5mdW5jdGlvbiBkb21vSHR0cChcbiAgbWV0aG9kOiBSZXF1ZXN0TWV0aG9kcyxcbiAgdXJsOiBzdHJpbmcsXG4gIG9wdGlvbnM6IEFycmF5UmVxdWVzdE9wdGlvbnMsXG4gIGFzeW5jPzogYm9vbGVhbixcbiAgYm9keT86IFJlcXVlc3RCb2R5XG4pOiBQcm9taXNlPEFycmF5UmVzcG9uc2VCb2R5PjtcbmZ1bmN0aW9uIGRvbW9IdHRwKFxuICBtZXRob2Q6IFJlcXVlc3RNZXRob2RzLFxuICB1cmw6IHN0cmluZyxcbiAgb3B0aW9uczogUmVxdWVzdE9wdGlvbnMsXG4gIGFzeW5jPzogYm9vbGVhbixcbiAgYm9keT86IFJlcXVlc3RCb2R5XG4pOiBQcm9taXNlPFJlc3BvbnNlQm9keT47XG5mdW5jdGlvbiBkb21vSHR0cDxUPihcbiAgbWV0aG9kOiBSZXF1ZXN0TWV0aG9kcyxcbiAgdXJsOiBzdHJpbmcsXG4gIG9wdGlvbnM6IFJlcXVlc3RPcHRpb25zLFxuICBhc3luYz86IGJvb2xlYW4sXG4gIGJvZHk/OiBSZXF1ZXN0Qm9keVxuKTogUHJvbWlzZTxUPjtcbmZ1bmN0aW9uIGRvbW9IdHRwKFxuICBtZXRob2Q6IFJlcXVlc3RNZXRob2RzLFxuICB1cmw6IHN0cmluZyxcbiAgb3B0aW9uczogUmVxdWVzdE9wdGlvbnMsXG4gIGFzeW5jPzogYm9vbGVhbixcbiAgYm9keT86IFJlcXVlc3RCb2R5XG4pOiBQcm9taXNlPFJlc3BvbnNlQm9keT4ge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChcbiAgICByZXNvbHZlOiAodmFsdWU/OiBSZXNwb25zZUJvZHkpID0+IHZvaWQsXG4gICAgcmVqZWN0OiAocmVhc29uPzogRXJyb3IpID0+IHZvaWRcbiAgKSB7XG4gICAgLy8gRG8gdGhlIHVzdWFsIFhIUiBzdHVmZlxuICAgIGxldCByZXE6IFhNTEh0dHBSZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgaWYgKGFzeW5jKSB7XG4gICAgICByZXEub3BlbihtZXRob2QsIHVybCwgYXN5bmMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXEub3BlbihtZXRob2QsIHVybCk7XG4gICAgfVxuICAgIHNldEZvcm1hdEhlYWRlcnMocmVxLCB1cmwsIG9wdGlvbnMpO1xuICAgIHNldENvbnRlbnRIZWFkZXJzKHJlcSwgb3B0aW9ucyk7XG4gICAgc2V0QXV0aFRva2VuSGVhZGVyKHJlcSk7XG4gICAgc2V0UmVzcG9uc2VUeXBlKHJlcSwgb3B0aW9ucyk7XG5cbiAgICByZXEub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IGRhdGE7XG4gICAgICAvLyBUaGlzIGlzIGNhbGxlZCBldmVuIG9uIDQwNCBldGMgc28gY2hlY2sgdGhlIHN0YXR1c1xuICAgICAgaWYgKGlzU3VjY2VzcyhyZXEuc3RhdHVzKSkge1xuICAgICAgICBpZiAoW1wiY3N2XCIsIFwiZXhjZWxcIl0uaW5jbHVkZXMob3B0aW9ucy5mb3JtYXQpIHx8ICFyZXEucmVzcG9uc2UpIHtcbiAgICAgICAgICByZXNvbHZlKHJlcS5yZXNwb25zZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMucmVzcG9uc2VUeXBlID09PSBcImJsb2JcIikge1xuICAgICAgICAgIHJlc29sdmUoXG4gICAgICAgICAgICBuZXcgQmxvYihbcmVxLnJlc3BvbnNlXSwge1xuICAgICAgICAgICAgICB0eXBlOiByZXEuZ2V0UmVzcG9uc2VIZWFkZXIoXCJjb250ZW50LXR5cGVcIiksXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVzcG9uc2VTdHIgPSByZXEucmVzcG9uc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gaWYoIXJlc3BvbnNlU3RyKSB7XG4gICAgICAgICAgLy8gICByZXNwb25zZVN0ciA9IFwie31cIjtcbiAgICAgICAgICAvLyB9XG4gICAgICAgICAgZGF0YSA9IEpTT04ucGFyc2UocmVzcG9uc2VTdHIpO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgIHJlamVjdChFcnJvcihcIkludmFsaWQgSlNPTiByZXNwb25zZVwiKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIFJlc29sdmUgdGhlIHByb21pc2Ugd2l0aCB0aGUgcmVzcG9uc2UgdGV4dFxuICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gT3RoZXJ3aXNlIHJlamVjdCB3aXRoIHRoZSBzdGF0dXMgdGV4dFxuICAgICAgICAvLyB3aGljaCB3aWxsIGhvcGVmdWxseSBiZSBhIG1lYW5pbmdmdWwgZXJyb3JcbiAgICAgICAgcmVqZWN0KEVycm9yKHJlcS5zdGF0dXNUZXh0KSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSBuZXR3b3JrIGVycm9yc1xuICAgIHJlcS5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmVqZWN0KEVycm9yKFwiTmV0d29yayBFcnJvclwiKSk7XG4gICAgfTtcblxuICAgIC8vIE1ha2UgdGhlIHJlcXVlc3RcbiAgICBpZiAoYm9keSkge1xuICAgICAgaWYgKCFvcHRpb25zLmNvbnRlbnRUeXBlIHx8IG9wdGlvbnMuY29udGVudFR5cGUgPT09IERhdGFGb3JtYXRzLkpTT04pIHtcbiAgICAgICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KGJvZHkpO1xuICAgICAgICAvLyBNYWtlIHRoZSByZXF1ZXN0XG4gICAgICAgIHJlcS5zZW5kKGpzb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gYm9keSBjYW4gbm8gbG9uZ2VyIGJlIEpTT05cbiAgICAgICAgcmVxLnNlbmQoYm9keSBhcyBEb2N1bWVudCB8IFhNTEh0dHBSZXF1ZXN0Qm9keUluaXQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXEuc2VuZCgpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzU3VjY2VzcyhzdGF0dXM6IG51bWJlcikge1xuICByZXR1cm4gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDA7XG59XG5cbmZ1bmN0aW9uIGlzVmVyaWZpZWRPcmlnaW4ob3JpZ2luOiBzdHJpbmcpIHtcbiAgY29uc3Qgd2hpdGVsaXN0ZWQgPSBvcmlnaW4ubWF0Y2goXG4gICAgXCJeaHR0cHM/Oi8vKFteL10rWy5dKT8oZG9tb3xkb21vdGVjaHxkb21vcmlnKS4oY29tfGlvKT8oLy4qKT8kXCJcbiAgKTtcbiAgY29uc3QgYmxhY2tsaXN0ZWQgPSBvcmlnaW4ubWF0Y2goXCIoLiopLihkb21vYXBwcykuKC4qKVwiKTtcbiAgcmV0dXJuICEhd2hpdGVsaXN0ZWQgJiYgIWJsYWNrbGlzdGVkO1xufVxuXG5mdW5jdGlvbiBnZXRRdWVyeVBhcmFtcygpOiBRdWVyeVBhcmFtcyB7XG4gIGNvbnN0IHF1ZXJ5ID0gbG9jYXRpb24uc2VhcmNoLnN1YnN0cigxKTtcbiAgbGV0IHJlc3VsdDogeyBbaW5kZXg6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG4gIHF1ZXJ5LnNwbGl0KFwiJlwiKS5mb3JFYWNoKGZ1bmN0aW9uIChwYXJ0KSB7XG4gICAgY29uc3QgaXRlbSA9IHBhcnQuc3BsaXQoXCI9XCIpO1xuICAgIHJlc3VsdFtpdGVtWzBdXSA9IGRlY29kZVVSSUNvbXBvbmVudChpdGVtWzFdKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHNldEZvcm1hdEhlYWRlcnMoXG4gIHJlcTogWE1MSHR0cFJlcXVlc3QsXG4gIHVybDogc3RyaW5nLFxuICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbikge1xuICBpZiAodXJsLmluZGV4T2YoXCJkYXRhL3ZcIikgPT09IC0xKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIC8vIHNldCBmb3JtYXRcbiAgY29uc3QgcmVxdWVzdEZvcm1hdDogRGF0YUZvcm1hdHMgPVxuICAgIG9wdGlvbnMuZm9ybWF0ICE9PSB1bmRlZmluZWRcbiAgICAgID8gZG9tb0Zvcm1hdFRvUmVxdWVzdEZvcm1hdChvcHRpb25zLmZvcm1hdClcbiAgICAgIDogRGF0YUZvcm1hdHMuREVGQVVMVDtcblxuICByZXEuc2V0UmVxdWVzdEhlYWRlcihcIkFjY2VwdFwiLCByZXF1ZXN0Rm9ybWF0KTtcbn1cblxuZnVuY3Rpb24gc2V0Q29udGVudEhlYWRlcnMocmVxOiBYTUxIdHRwUmVxdWVzdCwgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zKSB7XG4gIGlmIChvcHRpb25zLmNvbnRlbnRUeXBlKSB7XG4gICAgLy8gc2V0IGNvbnRlbnQgdHlwZSBpZiB1c2VyIHBhc3NlZCBvcHRpb25cbiAgICBpZiAob3B0aW9ucy5jb250ZW50VHlwZSAhPT0gXCJtdWx0aXBhcnRcIikge1xuICAgICAgcmVxLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgb3B0aW9ucy5jb250ZW50VHlwZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJlcS5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIERhdGFGb3JtYXRzLkpTT04pO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNldEF1dGhUb2tlbkhlYWRlcihyZXE6IFhNTEh0dHBSZXF1ZXN0KSB7XG4gIGlmICh0b2tlbikge1xuICAgIHJlcS5zZXRSZXF1ZXN0SGVhZGVyKFwiWC1ET01PLVJ5dXUtU2Vzc2lvblwiLCB0b2tlbik7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0UmVzcG9uc2VUeXBlKHJlcTogWE1MSHR0cFJlcXVlc3QsIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9ucykge1xuICAvL3NldCByZXNwb25zZSB0eXBlIGlmIHVzZXIgcGFzc2VkIG9wdGlvblxuICBpZiAob3B0aW9ucy5yZXNwb25zZVR5cGUgIT09IHVuZGVmaW5lZCkge1xuICAgIHJlcS5yZXNwb25zZVR5cGUgPSBvcHRpb25zLnJlc3BvbnNlVHlwZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVOb2RlKG5vZGU6IEhUTUxFbGVtZW50KSB7XG4gIGlmIChub2RlID09PSBkb2N1bWVudC5ib2R5IHx8IG5vZGUgPT09IGRvY3VtZW50LmhlYWQpXG4gICAgcmV0dXJuIHByb2Nlc3NCb2R5KG5vZGUpO1xuXG4gIGNvbnN0IGhyZWZBdHRyaWJ1dGUgPVxuICAgIChub2RlLmRhdGFzZXQgJiYgbm9kZS5kYXRhc2V0LmRvbW9IcmVmKSB8fCBub2RlLmdldEF0dHJpYnV0ZShcImhyZWZcIik7XG4gIGNvbnN0IHNyY0F0dHJpYnV0ZSA9XG4gICAgKG5vZGUuZGF0YXNldCAmJiBub2RlLmRhdGFzZXQuZG9tb1NyYykgfHwgbm9kZS5nZXRBdHRyaWJ1dGUoXCJzcmNcIik7XG4gIGNvbnN0IGF0dHIgPSBocmVmQXR0cmlidXRlID8gXCJocmVmXCIgOiBcInNyY1wiO1xuICBjb25zdCB1cmwgPSBocmVmQXR0cmlidXRlIHx8IHNyY0F0dHJpYnV0ZTtcblxuICBpZiAoIXVybCB8fCAhdG9rZW4gfHwgdXJsLmluY2x1ZGVzKHRva2VuKSkgcmV0dXJuO1xuXG4gIGNvbnN0IG5ld1VybCA9IG5ldyBVUkwodXJsLCBkb2N1bWVudC5sb2NhdGlvbi5vcmlnaW4pO1xuICBjb25zdCBpc1JlbGF0aXZlVXJsID0gbmV3VXJsLm9yaWdpbiA9PT0gZG9jdW1lbnQubG9jYXRpb24ub3JpZ2luO1xuICBpZiAoaXNSZWxhdGl2ZVVybCkge1xuICAgIG5ld1VybC5zZWFyY2hQYXJhbXMuYXBwZW5kKFwicnl1dS1zaWRcIiwgdG9rZW4pO1xuICAgIG5vZGUuc2V0QXR0cmlidXRlKGF0dHIsIG5ld1VybC5ocmVmKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzQm9keShub2RlOiBhbnkpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgaGFuZGxlTm9kZSg8SFRNTEVsZW1lbnQ+bm9kZS5jaGlsZHJlbltpXSk7XG4gIH1cbn1cblxuY29uc3Qgb2IgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zKSA9PiB7XG4gIGZvciAoY29uc3QgcmVjb3JkIG9mIG11dGF0aW9ucykge1xuICAgIHByb2Nlc3NCb2R5KHJlY29yZC50YXJnZXQpO1xuICB9XG59KTtcblxub2Iub2JzZXJ2ZShkb2N1bWVudC5ib2R5LCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9KTtcbm9iLm9ic2VydmUoZG9jdW1lbnQuaGVhZCwgeyBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUgfSk7XG4iLCIvKipcbiAqIFN1cHBvcnRlZCBgYWNjZXB0YCBoZWFkZXJzIGZvciBjb250cm9sbGluZyB0aGUgZm9ybWF0XG4gKiBvZiB0aGUgZGF0YSByZXR1cm5lZCBmcm9tIERvbW8uXG4gKlxuICogU2VlIFtkZXZlbG9wZXIuZG9tby5jb21dKGh0dHBzOi8vZGV2ZWxvcGVyLmRvbW8uY29tL2RvY3MvZGV2LXN0dWRpby1yZWZlcmVuY2VzL2RhdGEtYXBpI0RhdGElMjBGb3JtYXRzKVxuICogZm9yIG1vcmUgZGV0YWlscy5cbiAqL1xuZXhwb3J0IGVudW0gRGF0YUZvcm1hdHMge1xuICBERUZBVUxUID0gJ2FwcGxpY2F0aW9uL2FycmF5LW9mLW9iamVjdHMnLFxuICBBUlJBWV9PRl9PQkpFQ1RTID0gJ2FwcGxpY2F0aW9uL2FycmF5LW9mLW9iamVjdHMnLFxuICBKU09OID0gJ2FwcGxpY2F0aW9uL2pzb24nLFxuICBDU1YgPSAndGV4dC9jc3YnLFxuICBFWENFTCA9ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCcsXG4gIFBMQUlOID0gJ3RleHQvcGxhaW4nXG59IiwiZXhwb3J0IGVudW0gUmVxdWVzdE1ldGhvZHMge1xuICBnZXQgPSAnR0VUJyxcbiAgR0VUID0gJ0dFVCcsXG4gIHBvc3QgPSAnUE9TVCcsXG4gIFBPU1QgPSAnUE9TVCcsXG4gIHB1dCA9ICdQVVQnLFxuICBQVVQgPSAnUFVUJyxcbiAgZGVsZXRlID0gJ0RFTEVURScsXG4gIERFTEVURSA9ICdERUxFVEUnLFxufVxuIiwiZXhwb3J0IHsgUmVxdWVzdE1ldGhvZHMgfSBmcm9tICcuL2VudW1zL3JlcXVlc3QtbWV0aG9kcyc7XG5leHBvcnQgeyBEb21vRGF0YUZvcm1hdHMgfSBmcm9tICcuL2ludGVyZmFjZXMvZG9tby1kYXRhLWZvcm1hdHMnO1xuZXhwb3J0IHsgRGF0YUZvcm1hdHMgfSBmcm9tICcuL2VudW1zL2RhdGEtZm9ybWF0cyc7XG5leHBvcnQgeyBGaWx0ZXJEYXRhVHlwZXMgfSBmcm9tICcuL2ludGVyZmFjZXMvZmlsdGVyLWRhdGEtdHlwZXMnO1xuZXhwb3J0IHsgRmlsdGVyIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2ZpbHRlcic7XG5cbmV4cG9ydCB7IFJlcXVlc3RPcHRpb25zLCBPYmplY3RSZXF1ZXN0T3B0aW9ucywgQXJyYXlSZXF1ZXN0T3B0aW9ucyB9IGZyb20gJy4vaW50ZXJmYWNlcy9yZXF1ZXN0LW9wdGlvbnMnO1xuZXhwb3J0IHsgUXVlcnlQYXJhbXMgfSBmcm9tICcuL2ludGVyZmFjZXMvcXVlcnktcGFyYW1zJztcbmV4cG9ydCB7IFJlcXVlc3RCb2R5IH0gZnJvbSAnLi9pbnRlcmZhY2VzL3JlcXVlc3QtYm9keSc7XG5leHBvcnQgeyBSZXNwb25zZUJvZHksIE9iamVjdFJlc3BvbnNlQm9keSwgQXJyYXlSZXNwb25zZUJvZHkgfSBmcm9tICcuL2ludGVyZmFjZXMvcmVzcG9uc2UtYm9keSc7XG5leHBvcnQgeyBKc29uIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2pzb24nO1xuIiwiZXhwb3J0IGVudW0gRmlsdGVyRGF0YVR5cGVze1xuICBOVU1FUklDID0gXCJOVU1FUklDXCIsXG4gIERBVEUgPSBcIkRBVEVcIixcbiAgREFURVRJTUUgPSBcIkRBVEVUSU1FXCIsXG4gIFNUUklORyA9IFwiU1RSSU5HXCIsXG59XG4iLCJpbXBvcnQgeyBEb21vRGF0YUZvcm1hdHMsIERhdGFGb3JtYXRzIH0gZnJvbSAnLi4vbW9kZWxzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGRvbW9Gb3JtYXRUb1JlcXVlc3RGb3JtYXQoZm9ybWF0OiBEb21vRGF0YUZvcm1hdHMpOiBEYXRhRm9ybWF0cyB7XG4gIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgY2FzZSAnYXJyYXktb2Ytb2JqZWN0cyc6IHtcbiAgICAgIHJldHVybiBEYXRhRm9ybWF0cy5BUlJBWV9PRl9PQkpFQ1RTO1xuICAgIH1cbiAgICBjYXNlICdhcnJheS1vZi1hcnJheXMnOiB7XG4gICAgICByZXR1cm4gRGF0YUZvcm1hdHMuSlNPTjtcbiAgICB9XG4gICAgY2FzZSAnZXhjZWwnOiB7XG4gICAgICByZXR1cm4gRGF0YUZvcm1hdHMuRVhDRUw7XG4gICAgfVxuICAgIGNhc2UgJ2Nzdic6IHtcbiAgICAgIHJldHVybiBEYXRhRm9ybWF0cy5DU1Y7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHJldHVybiBEYXRhRm9ybWF0cy5ERUZBVUxUO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLy8gVGhpcyBlbnRyeSBtb2R1bGUgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBtb2R1bGVzIHNvIGl0IGNhbid0IGJlIGlubGluZWRcbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3MjcpO1xuIl0sIm5hbWVzIjpbInJvb3QiLCJmYWN0b3J5IiwiZXhwb3J0cyIsIm1vZHVsZSIsImRlZmluZSIsImFtZCIsInNlbGYiLCJwb3N0IiwidXJsIiwiYm9keSIsIm9wdGlvbnMiLCJkb21vSHR0cCIsIlJlcXVlc3RNZXRob2RzIiwiUE9TVCIsInB1dCIsIlBVVCIsImdldCIsIkdFVCIsImRlbGV0ZSIsIkRFTEVURSIsImdldEFsbCIsInVybHMiLCJQcm9taXNlIiwiYWxsIiwibWFwIiwiZG9tbyIsIm9uRGF0YVVwZGF0ZSIsImNiIiwiaW5uZXJDYWxsYmFjayIsImV2ZW50IiwiaXNWZXJpZmllZE9yaWdpbiIsIm9yaWdpbiIsImRhdGEiLCJsZW5ndGgiLCJtZXNzYWdlIiwiSlNPTiIsInBhcnNlIiwiaGFzT3duUHJvcGVydHkiLCJhbGlhcyIsImFjayIsInN0cmluZ2lmeSIsInNvdXJjZSIsIk1lc3NhZ2VQb3J0IiwiU2VydmljZVdvcmtlciIsInBvc3RNZXNzYWdlIiwiZXJyIiwiY29uc29sZSIsIndhcm4iLCJ3aW5kb3ciLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIm5hdmlnYXRlIiwiaXNOZXdXaW5kb3ciLCJwYXJlbnQiLCJmaWx0ZXJDb250YWluZXIiLCJmaWx0ZXJzIiwidXNlckFnZW50IiwibmF2aWdhdG9yIiwidG9Mb3dlckNhc2UiLCJzYWZhcmkiLCJ0ZXN0IiwiaW9zIiwiZmlsdGVyIiwiY29sdW1uTmFtZSIsImNvbHVtbiIsIm9wZXJhdG9yIiwib3BlcmFuZCIsInZhbHVlcyIsImRhdGFUeXBlIiwid2Via2l0IiwibWVzc2FnZUhhbmRsZXJzIiwiZG9tb2ZpbHRlciIsImNvbm5lY3RlZCIsImxpc3RlbmVycyIsIm9uRmlsdGVyc1VwZGF0ZSIsImNvbm5lY3QiLCJjaGFubmVsIiwiTWVzc2FnZUNoYW5uZWwiLCJwb3J0MiIsImNhbGxiYWNrIiwiaW5kZXgiLCJwdXNoIiwicG9ydDEiLCJvbm1lc3NhZ2UiLCJlIiwicmVzcG9uc2VQb3J0IiwicG9ydHMiLCJ1bmRlZmluZWQiLCJmb3JFYWNoIiwic3BsaWNlIiwiZW52IiwiZ2V0UXVlcnlQYXJhbXMiLCJfX3V0aWwiLCJzZXRGb3JtYXRIZWFkZXJzIiwiaXNTdWNjZXNzIiwidG9rZW4iLCJfX1JZVVVfU0lEX18iLCJtZXRob2QiLCJhc3luYyIsInJlc29sdmUiLCJyZWplY3QiLCJyZXEiLCJYTUxIdHRwUmVxdWVzdCIsIm9wZW4iLCJjb250ZW50VHlwZSIsInNldFJlcXVlc3RIZWFkZXIiLCJEYXRhRm9ybWF0cyIsInNldENvbnRlbnRIZWFkZXJzIiwic2V0QXV0aFRva2VuSGVhZGVyIiwicmVzcG9uc2VUeXBlIiwic2V0UmVzcG9uc2VUeXBlIiwib25sb2FkIiwic3RhdHVzIiwiaW5jbHVkZXMiLCJmb3JtYXQiLCJyZXNwb25zZSIsIkJsb2IiLCJ0eXBlIiwiZ2V0UmVzcG9uc2VIZWFkZXIiLCJyZXNwb25zZVN0ciIsImV4IiwiRXJyb3IiLCJzdGF0dXNUZXh0Iiwib25lcnJvciIsInNlbmQiLCJqc29uIiwid2hpdGVsaXN0ZWQiLCJtYXRjaCIsImJsYWNrbGlzdGVkIiwicXVlcnkiLCJsb2NhdGlvbiIsInNlYXJjaCIsInN1YnN0ciIsInJlc3VsdCIsInNwbGl0IiwicGFydCIsIml0ZW0iLCJkZWNvZGVVUklDb21wb25lbnQiLCJpbmRleE9mIiwicmVxdWVzdEZvcm1hdCIsImRvbW9Gb3JtYXRUb1JlcXVlc3RGb3JtYXQiLCJERUZBVUxUIiwiaGFuZGxlTm9kZSIsIm5vZGUiLCJkb2N1bWVudCIsImhlYWQiLCJwcm9jZXNzQm9keSIsImhyZWZBdHRyaWJ1dGUiLCJkYXRhc2V0IiwiZG9tb0hyZWYiLCJnZXRBdHRyaWJ1dGUiLCJzcmNBdHRyaWJ1dGUiLCJkb21vU3JjIiwiYXR0ciIsIm5ld1VybCIsIlVSTCIsInNlYXJjaFBhcmFtcyIsImFwcGVuZCIsInNldEF0dHJpYnV0ZSIsImhyZWYiLCJpIiwiY2hpbGRyZW4iLCJvYiIsIk11dGF0aW9uT2JzZXJ2ZXIiLCJtdXRhdGlvbnMiLCJ0YXJnZXQiLCJvYnNlcnZlIiwiY2hpbGRMaXN0Iiwic3VidHJlZSIsIkZpbHRlckRhdGFUeXBlcyIsIkFSUkFZX09GX09CSkVDVFMiLCJFWENFTCIsIkNTViIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsIl9fd2VicGFja19tb2R1bGVzX18iXSwic291cmNlUm9vdCI6IiJ9
/*!
* domo.js v4.3.1
* domo.js v4.4.0
* Optional utility library for Custom Apps
*/
{
"name": "ryuu.js",
"version": "4.3.1",
"version": "4.4.0",
"description": "Ryuu JavaScript Utility Library",
"main": "dist/domo.js",
"license": "SEE LICENSE IN LICENSE",
"dependencies": {},
"devDependencies": {
"http-server": "^14.0.0",
"standard-version": "^9.5.0",
"ts-loader": "^9.2.6",
"typescript": "^4.4.4",
"webpack": "^5.60.0",
"webpack": "^5.88.0",
"webpack-cli": "^4.9.1"

@@ -20,5 +22,8 @@ },

"releaseAlpha": "npm run build && npm publish --tag alpha",
"releaseBeta": "npm run build && npm publish --tag beta"
"releaseBeta": "npm run build && npm publish --tag beta",
"bumpAlpha": "npm run build && npm run bump -- --prerelease alpha",
"bumpBeta": "npm run build && npm run bump -- --prerelease beta",
"bump": "standard-version"
},
"author": "Domo"
}
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc