Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

boundless-async

Package Overview
Dependencies
Maintainers
1
Versions
11
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

boundless-async - npm Package Compare versions

Comparing version 1.0.4 to 1.1.0

4

build/index.js

@@ -1,2 +0,2 @@

module.exports=function(e){function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}var t={};return n.m=e,n.c=t,n.i=function(e){return e},n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},n.p="",n(n.s=3)}([function(e,n){e.exports=require("boundless-utils-omit-keys")},function(e,n){e.exports=require("classnames")},function(e,n){e.exports=require("react")},function(e,n,t){"use strict";function r(e,n){if(!(e instanceof n))throw new TypeError("Cannot call a class as a function")}function o(e,n){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!n||"object"!=typeof n&&"function"!=typeof n?e:n}function i(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Super expression must either be null or a function, not "+typeof n);e.prototype=Object.create(n&&n.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),n&&(Object.setPrototypeOf?Object.setPrototypeOf(e,n):e.__proto__=n)}Object.defineProperty(n,"__esModule",{value:!0});var u=t(2),l=(t.n(u),t(1)),s=t.n(l),c=t(0),a=t.n(c),p=Object.assign||function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])}return e},f=function(){function e(e,n){for(var t=0;t<n.length;t++){var r=n[t];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(n,t,r){return t&&e(n.prototype,t),r&&e(n,r),n}}(),d=function(e,n,t){return n.split(".").reduce(function(e,n){return e[n]||t},e)},h=function(e){function n(){var e,t,i,u;r(this,n);for(var l=arguments.length,s=Array(l),c=0;c<l;c++)s[c]=arguments[c];return t=i=o(this,(e=n.__proto__||Object.getPrototypeOf(n)).call.apply(e,[this].concat(s))),i.mounted=!1,i.promise=null,i.state={},u=t,o(i,u)}return i(n,e),f(n,[{key:"handlePromiseFulfillment",value:function(e,n){this.mounted&&this.setState(function(t){return this.promise===e?(this.promise=null,{component:n}):t},this.fireRenderCallback)}},{key:"handleChildren",value:function(e){var n=e;if(t.i(u.isValidElement)(n))return this.setState({component:n},this.fireRenderCallback);if("function"==typeof n)return this.handleChildren(n(this.props));var r=this.handlePromiseFulfillment.bind(this,n);this.promise=n,this.setState({component:null},function(){return n.then(r,r)})}},{key:"fireRenderCallback",value:function(){this.state.component&&this.props.childrenDidRender()}},{key:"componentWillMount",value:function(){this.handleChildren(this.props.children)}},{key:"componentDidMount",value:function(){this.mounted=!0}},{key:"componentWillReceiveProps",value:function(e){this.handleChildren(e.children)}},{key:"componentWillUnmount",value:function(){this.mounted=!1}},{key:"render",value:function(){var e=this.props,r=this.state;return t.i(u.cloneElement)(r.component||e.pendingContent,p({},a()(e,n.internalKeys),{className:s()("b-async",e.className,null===r.component&&d(e,"pendingContent.props.className"),r.component&&d(r,"component.props.className",""),{"b-async-pending":null===r.component})}))}}]),n}(u.PureComponent);h.propTypes={"*":u.PropTypes.any,children:u.PropTypes.oneOfType([u.PropTypes.func,u.PropTypes.node,u.PropTypes.instanceOf(Promise)]).isRequired,childrenDidRender:u.PropTypes.func,pendingContent:u.PropTypes.node},h.defaultProps={children:t.i(u.createElement)("div",null),childrenDidRender:function(){},pendingContent:t.i(u.createElement)("div",null)},h.internalKeys=Object.keys(h.defaultProps),n.default=h}]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vaW5kZXguanMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svYm9vdHN0cmFwIDg4NmNmYzExNjBhMmE2M2JhMmM3Iiwid2VicGFjazovLy9leHRlcm5hbCB7XCJjb21tb25qczJcIjpcImJvdW5kbGVzcy11dGlscy1vbWl0LWtleXNcIn0iLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIHtcImNvbW1vbmpzMlwiOlwiY2xhc3NuYW1lc1wifSIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwge1wiY29tbW9uanMyXCI6XCJyZWFjdFwifSIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9ib3VuZGxlc3MtYXN5bmMvaW5kZXguanMiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsIm1vZHVsZXMiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJpbnN0YWxsZWRNb2R1bGVzIiwiaSIsImwiLCJjYWxsIiwibSIsImMiLCJ2YWx1ZSIsImQiLCJuYW1lIiwiZ2V0dGVyIiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsImdldCIsIm4iLCJfX2VzTW9kdWxlIiwib2JqZWN0IiwicHJvcGVydHkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsInAiLCJzIiwicmVxdWlyZSIsIl9fd2VicGFja19leHBvcnRzX18iLCJfY2xhc3NDYWxsQ2hlY2siLCJpbnN0YW5jZSIsIkNvbnN0cnVjdG9yIiwiVHlwZUVycm9yIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCJzZWxmIiwiUmVmZXJlbmNlRXJyb3IiLCJfaW5oZXJpdHMiLCJzdWJDbGFzcyIsInN1cGVyQ2xhc3MiLCJjcmVhdGUiLCJjb25zdHJ1Y3RvciIsIndyaXRhYmxlIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9jbGFzc25hbWVzX18iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfY2xhc3NuYW1lc19fX2RlZmF1bHQiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfYm91bmRsZXNzX3V0aWxzX29taXRfa2V5c19fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX2JvdW5kbGVzc191dGlsc19vbWl0X2tleXNfX19kZWZhdWx0IiwiX2V4dGVuZHMiLCJhc3NpZ24iLCJ0YXJnZXQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJzb3VyY2UiLCJrZXkiLCJfY3JlYXRlQ2xhc3MiLCJkZWZpbmVQcm9wZXJ0aWVzIiwicHJvcHMiLCJkZXNjcmlwdG9yIiwicHJvdG9Qcm9wcyIsInN0YXRpY1Byb3BzIiwiYmFzZSIsInBhdGgiLCJmYWxsYmFjayIsInNwbGl0IiwicmVkdWNlIiwiY3VycmVudCIsImZyYWdtZW50IiwiQXN5bmMiLCJfUHVyZUNvbXBvbmVudCIsIl9yZWYiLCJfdGVtcCIsIl90aGlzIiwiX3JldCIsInRoaXMiLCJfbGVuIiwiYXJncyIsIkFycmF5IiwiX2tleSIsImdldFByb3RvdHlwZU9mIiwiYXBwbHkiLCJjb25jYXQiLCJtb3VudGVkIiwicHJvbWlzZSIsInN0YXRlIiwiY29udGV4dCIsInBheWxvYWQiLCJzZXRTdGF0ZSIsImNvbXBvbmVudCIsImZpcmVSZW5kZXJDYWxsYmFjayIsImNoaWxkcmVuIiwiY29udGVudCIsImhhbmRsZUNoaWxkcmVuIiwiYm91bmRIYW5kbGVyIiwiaGFuZGxlUHJvbWlzZUZ1bGZpbGxtZW50IiwiYmluZCIsInRoZW4iLCJjaGlsZHJlbkRpZFJlbmRlciIsIm5leHRQcm9wcyIsInBlbmRpbmdDb250ZW50IiwiaW50ZXJuYWxLZXlzIiwiY2xhc3NOYW1lIiwiYi1hc3luYy1wZW5kaW5nIiwicHJvcFR5cGVzIiwiKiIsImFueSIsIm9uZU9mVHlwZSIsImZ1bmMiLCJub2RlIiwiaW5zdGFuY2VPZiIsIlByb21pc2UiLCJpc1JlcXVpcmVkIiwiZGVmYXVsdFBy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LEVBQUltRSxFQUFPLDRCQUE2QixLQUMxRGtCLGtCQUF1QyxPQUFwQmxCLEVBQU1JLG1CTDlDaStIcEIsR0t0RngrSHpCLEVBQUEsY0FBZHlCLEdBQ1ZtQyxXQUlIQyxJQUFLN0QsRUFBQSxVQUFVOEQsSUFnRGZmLFNBQVUvQyxFQUFBLFVBQVUrRCxXQUNoQi9ELEVBQUEsVUFBVWdFLEtBQ1ZoRSxFQUFBLFVBQVVpRSxLQUNWakUsRUFBQSxVQUFVa0UsV0FBV0MsV0FDdEJDLFdBR0hkLGtCQUFtQnRELEVBQUEsVUFBVWdFLEtBRzdCUixlQUFnQnhELEVBQUEsVUFBVWlFLE1BL0RieEMsRUFrRVY0QyxjQUNIdEIsU0FBVTFGLEVBQUFHLEVBQUF3QyxFQUFBLDJCQUNWc0Qsa0JBQW1CLGFBQ25CRSxlQUFnQm5HLEVBQUFHLEVBQUF3QyxFQUFBLDRCQXJFSHlCLEVBd0VWZ0MsYUFBZXZGLE9BQU9vRyxLQUFLN0MsRUFBTTRDLGNMY3MxSnJGLEVBQTZCLFFLdEYxNEp5QyIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID1cbi8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSlcbi8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdGk6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0bDogZmFsc2UsXG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gaWRlbnRpdHkgZnVuY3Rpb24gZm9yIGNhbGxpbmcgaGFybW9ueSBpbXBvcnRzIHdpdGggdGhlIGNvcnJlY3QgY29udGV4dFxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmkgPSBmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4vKioqKioqLyBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbi8qKioqKiovIFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbi8qKioqKiovIFx0XHRcdFx0Z2V0OiBnZXR0ZXJcbi8qKioqKiovIFx0XHRcdH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuLyoqKioqKi8gXHRcdHJldHVybiBnZXR0ZXI7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAzKTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKFtcbi8qIDAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiYm91bmRsZXNzLXV0aWxzLW9taXQta2V5c1wiKTtcblxuLyoqKi8gfSksXG4vKiAxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNsYXNzbmFtZXNcIik7XG5cbi8qKiovIH0pLFxuLyogMiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcblxuLyoqKi8gfSksXG4vKiAzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fd2VicGFja19leHBvcnRzX18sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfY2xhc3NuYW1lc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfY2xhc3NuYW1lc19fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2NsYXNzbmFtZXNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX2JvdW5kbGVzc191dGlsc19vbWl0X2tleXNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX2JvdW5kbGVzc191dGlsc19vbWl0X2tleXNfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9ib3VuZGxlc3NfdXRpbHNfb21pdF9rZXlzX18pO1xudmFyIF9leHRlbmRzPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKHRhcmdldCl7Zm9yKHZhciBpPTE7aTxhcmd1bWVudHMubGVuZ3RoO2krKyl7dmFyIHNvdXJjZT1hcmd1bWVudHNbaV07Zm9yKHZhciBrZXkgaW4gc291cmNlKXtpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLGtleSkpe3RhcmdldFtrZXldPXNvdXJjZVtrZXldO319fXJldHVybiB0YXJnZXQ7fTt2YXIgX2NyZWF0ZUNsYXNzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQscHJvcHMpe2Zvcih2YXIgaT0wO2k8cHJvcHMubGVuZ3RoO2krKyl7dmFyIGRlc2NyaXB0b3I9cHJvcHNbaV07ZGVzY3JpcHRvci5lbnVtZXJhYmxlPWRlc2NyaXB0b3IuZW51bWVyYWJsZXx8ZmFsc2U7ZGVzY3JpcHRvci5jb25maWd1cmFibGU9dHJ1ZTtpZihcInZhbHVlXCJpbiBkZXNjcmlwdG9yKWRlc2NyaXB0b3Iud3JpdGFibGU9dHJ1ZTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LGRlc2NyaXB0b3Iua2V5LGRlc2NyaXB0b3IpO319cmV0dXJuIGZ1bmN0aW9uKENvbnN0cnVjdG9yLHByb3RvUHJvcHMsc3RhdGljUHJvcHMpe2lmKHByb3RvUHJvcHMpZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUscHJvdG9Qcm9wcyk7aWYoc3RhdGljUHJvcHMpZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3RvcixzdGF0aWNQcm9wcyk7cmV0dXJuIENvbnN0cnVjdG9yO307fSgpO2Z1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSxDb25zdHJ1Y3Rvcil7aWYoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTt9fWZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsY2FsbCl7aWYoIXNlbGYpe3Rocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTt9cmV0dXJuIGNhbGwmJih0eXBlb2YgY2FsbD09PVwib2JqZWN0XCJ8fHR5cGVvZiBjYWxsPT09XCJmdW5jdGlvblwiKT9jYWxsOnNlbGY7fWZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcyxzdXBlckNsYXNzKXtpZih0eXBlb2Ygc3VwZXJDbGFzcyE9PVwiZnVuY3Rpb25cIiYmc3VwZXJDbGFzcyE9PW51bGwpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiK3R5cGVvZiBzdXBlckNsYXNzKTt9c3ViQ2xhc3MucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyYmc3VwZXJDbGFzcy5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpzdWJDbGFzcyxlbnVtZXJhYmxlOmZhbHNlLHdyaXRhYmxlOnRydWUsY29uZmlndXJhYmxlOnRydWV9fSk7aWYoc3VwZXJDbGFzcylPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLHN1cGVyQ2xhc3MpOnN1YkNsYXNzLl9fcHJvdG9fXz1zdXBlckNsYXNzO312YXIgZ2V0PWZ1bmN0aW9uIGdldChiYXNlLHBhdGgsZmFsbGJhY2spe3JldHVybiBwYXRoLnNwbGl0KCcuJykucmVkdWNlKGZ1bmN0aW9uKGN1cnJlbnQsZnJhZ21lbnQpe3JldHVybiBjdXJyZW50W2ZyYWdtZW50XXx8ZmFsbGJhY2s7fSxiYXNlKTt9O3ZhciBBc3luYz1mdW5jdGlvbihfUHVyZUNvbXBvbmVudCl7X2luaGVyaXRzKEFzeW5jLF9QdXJlQ29tcG9uZW50KTtmdW5jdGlvbiBBc3luYygpe3ZhciBfcmVmO3ZhciBfdGVtcCxfdGhpcyxfcmV0O19jbGFzc0NhbGxDaGVjayh0aGlzLEFzeW5jKTtmb3IodmFyIF9sZW49YXJndW1lbnRzLmxlbmd0aCxhcmdzPUFycmF5KF9sZW4pLF9rZXk9MDtfa2V5PF9sZW47X2tleSsrKXthcmdzW19rZXldPWFyZ3VtZW50c1tfa2V5XTt9cmV0dXJuIF9yZXQ9KF90ZW1wPShfdGhpcz1fcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLChfcmVmPUFzeW5jLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKEFzeW5jKSkuY2FsbC5hcHBseShfcmVmLFt0aGlzXS5jb25jYXQoYXJncykpKSxfdGhpcyksX3RoaXMubW91bnRlZD1mYWxzZSxfdGhpcy5wcm9taXNlPW51bGwsX3RoaXMuc3RhdGU9e30sX3RlbXApLF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKF90aGlzLF9yZXQpO31fY3JlYXRlQ2xhc3MoQXN5bmMsW3trZXk6J2hhbmRsZVByb21pc2VGdWxmaWxsbWVudCcsdmFsdWU6ZnVuY3Rpb24gaGFuZGxlUHJvbWlzZUZ1bGZpbGxtZW50KGNvbnRleHQscGF5bG9hZCl7aWYoIXRoaXMubW91bnRlZCl7cmV0dXJuO310aGlzLnNldFN0YXRlKGZ1bmN0aW9uIHJlbmRlclBheWxvYWRJZlByb21pc2VNYXRjaGVzKHN0YXRlKXtpZih0aGlzLnByb21pc2U9PT1jb250ZXh0KXt0aGlzLnByb21pc2U9bnVsbDtyZXR1cm57Y29tcG9uZW50OnBheWxvYWR9O31yZXR1cm4gc3RhdGU7fSx0aGlzLmZpcmVSZW5kZXJDYWxsYmFjayk7fX0se2tleTonaGFuZGxlQ2hpbGRyZW4nLHZhbHVlOmZ1bmN0aW9uIGhhbmRsZUNoaWxkcmVuKGNoaWxkcmVuKXt2YXIgY29udGVudD1jaGlsZHJlbjtpZihfX3dlYnBhY2tfcmVxdWlyZV9fLmkoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXCJpc1ZhbGlkRWxlbWVudFwiXSkoY29udGVudCkpe3JldHVybiB0aGlzLnNldFN0YXRlKHtjb21wb25lbnQ6Y29udGVudH0sdGhpcy5maXJlUmVuZGVyQ2FsbGJhY2spO31lbHNlIGlmKHR5cGVvZiBjb250ZW50PT09J2Z1bmN0aW9uJyl7cmV0dXJuIHRoaXMuaGFuZGxlQ2hpbGRyZW4oY29udGVudCh0aGlzLnByb3BzKSk7fXZhciBib3VuZEhhbmRsZXI9dGhpcy5oYW5kbGVQcm9taXNlRnVsZmlsbG1lbnQuYmluZCh0aGlzLGNvbnRlbnQpO3RoaXMucHJvbWlzZT1jb250ZW50O3RoaXMuc2V0U3RhdGUoe2NvbXBvbmVudDpudWxsfSxmdW5jdGlvbigpe3JldHVybiBjb250ZW50LnRoZW4oYm91bmRIYW5kbGVyLGJvdW5kSGFuZGxlcik7fSk7fX0se2tleTonZmlyZVJlbmRlckNhbGxiYWNrJyx2YWx1ZTpmdW5jdGlvbiBmaXJlUmVuZGVyQ2FsbGJhY2soKXtpZih0aGlzLnN0YXRlLmNvbXBvbmVudCl7dGhpcy5wcm9wcy5jaGlsZHJlbkRpZFJlbmRlcigpO319fSx7a2V5Oidjb21wb25lbnRXaWxsTW91bnQnLHZhbHVlOmZ1bmN0aW9uIGNvbXBvbmVudFdpbGxNb3VudCgpe3RoaXMuaGFuZGxlQ2hpbGRyZW4odGhpcy5wcm9wcy5jaGlsZHJlbik7fX0se2tleTonY29tcG9uZW50RGlkTW91bnQnLHZhbHVlOmZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCl7dGhpcy5tb3VudGVkPXRydWU7fX0se2tleTonY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcycsdmFsdWU6ZnVuY3Rpb24gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpe3RoaXMuaGFuZGxlQ2hpbGRyZW4obmV4dFByb3BzLmNoaWxkcmVuKTt9fSx7a2V5Oidjb21wb25lbnRXaWxsVW5tb3VudCcsdmFsdWU6ZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKXt0aGlzLm1vdW50ZWQ9ZmFsc2U7fX0se2tleToncmVuZGVyJyx2YWx1ZTpmdW5jdGlvbiByZW5kZXIoKXt2YXIgcHJvcHM9dGhpcy5wcm9wcyxzdGF0ZT10aGlzLnN0YXRlO3JldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fLmkoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXCJjbG9uZUVsZW1lbnRcIl0pKHN0YXRlLmNvbXBvbmVudHx8cHJvcHMucGVuZGluZ0NvbnRlbnQsX2V4dGVuZHMoe30sX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX2JvdW5kbGVzc191dGlsc19vbWl0X2tleXNfX19kZWZhdWx0KCkocHJvcHMsQXN5bmMuaW50ZXJuYWxLZXlzKSx7Y2xhc3NOYW1lOl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9jbGFzc25hbWVzX19fZGVmYXVsdCgpKCdiLWFzeW5jJyxwcm9wcy5jbGFzc05hbWUsc3RhdGUuY29tcG9uZW50PT09bnVsbCYmZ2V0KHByb3BzLCdwZW5kaW5nQ29udGVudC5wcm9wcy5jbGFzc05hbWUnKSxzdGF0ZS5jb21wb25lbnQmJmdldChzdGF0ZSwnY29tcG9uZW50LnByb3BzLmNsYXNzTmFtZScsJycpLHsnYi1hc3luYy1wZW5kaW5nJzpzdGF0ZS5jb21wb25lbnQ9PT1udWxsfSl9KSk7fX1dKTtyZXR1cm4gQXN5bmM7fShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcIlB1cmVDb21wb25lbnRcIl0pO0FzeW5jLnByb3BUeXBlcz17JyonOl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1wiUHJvcFR5cGVzXCJdLmFueSxjaGlsZHJlbjpfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcIlByb3BUeXBlc1wiXS5vbmVPZlR5cGUoW19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1wiUHJvcFR5cGVzXCJdLmZ1bmMsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXCJQcm9wVHlwZXNcIl0ubm9kZSxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcIlByb3BUeXBlc1wiXS5pbnN0YW5jZU9mKFByb21pc2UpXSkuaXNSZXF1aXJlZCxjaGlsZHJlbkRpZFJlbmRlcjpfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcIlByb3BUeXBlc1wiXS5mdW5jLHBlbmRpbmdDb250ZW50Ol9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1wiUHJvcFR5cGVzXCJdLm5vZGV9O0FzeW5jLmRlZmF1bHRQcm9wcz17Y2hpbGRyZW46X193ZWJwYWNrX3JlcXVpcmVfXy5pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1wiY3JlYXRlRWxlbWVudFwiXSkoJ2RpdicsbnVsbCksY2hpbGRyZW5EaWRSZW5kZXI6ZnVuY3Rpb24gY2hpbGRyZW5EaWRSZW5kZXIoKXt9LHBlbmRpbmdDb250ZW50Ol9fd2VicGFja19yZXF1aXJlX18uaShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcImNyZWF0ZUVsZW1lbnRcIl0pKCdkaXYnLG51bGwpfTtBc3luYy5pbnRlcm5hbEtleXM9T2JqZWN0LmtleXMoQXN5bmMuZGVmYXVsdFByb3BzKTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gQXN5bmM7XG5cbi8qKiovIH0pXG4vKioqKioqLyBdKTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gaW5kZXguanMiLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSlcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcblxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gaWRlbnRpdHkgZnVuY3Rpb24gZm9yIGNhbGxpbmcgaGFybW9ueSBpbXBvcnRzIHdpdGggdGhlIGNvcnJlY3QgY29udGV4dFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5pID0gZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9O1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbiBcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuIFx0XHRcdFx0Z2V0OiBnZXR0ZXJcbiBcdFx0XHR9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAzKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL2Jvb3RzdHJhcCA4ODZjZmMxMTYwYTJhNjNiYTJjNyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImJvdW5kbGVzcy11dGlscy1vbWl0LWtleXNcIik7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwge1wiY29tbW9uanMyXCI6XCJib3VuZGxlc3MtdXRpbHMtb21pdC1rZXlzXCJ9XG4vLyBtb2R1bGUgaWQgPSAwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNsYXNzbmFtZXNcIik7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwge1wiY29tbW9uanMyXCI6XCJjbGFzc25hbWVzXCJ9XG4vLyBtb2R1bGUgaWQgPSAxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0XCIpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIHtcImNvbW1vbmpzMlwiOlwicmVhY3RcIn1cbi8vIG1vZHVsZSBpZCA9IDJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiaW1wb3J0IHtjbG9uZUVsZW1lbnQsIGNyZWF0ZUVsZW1lbnQsIGlzVmFsaWRFbGVtZW50LCBQcm9wVHlwZXMsIFB1cmVDb21wb25lbnR9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjeCBmcm9tICdjbGFzc25hbWVzJztcblxuaW1wb3J0IG9taXQgZnJvbSAnYm91bmRsZXNzLXV0aWxzLW9taXQta2V5cyc7XG5cbmNvbnN0IGdldCA9IChiYXNlLCBwYXRoLCBmYWxsYmFjaykgPT4gcGF0aC5zcGxpdCgnLicpLnJlZHVjZSgoY3VycmVudCwgZnJhZ21lbnQpID0+IGN1cnJlbnRbZnJhZ21lbnRdIHx8IGZhbGxiYWNrLCBiYXNlKTtcblxuLyoqXG4gKiBUaGVyZSBhcmUgcGxlbnR5IG9mIHNpdHVhdGlvbnMgd2hlcmUgeW91IG5lZWQgdG8gZmV0Y2ggY29udGVudCB0byBiZSBkaXNwbGF5ZWQsIGJ1dCB3YW50XG4gKiB0byBzaG93IHNvbWUgc29ydCBvZiBsb2FkaW5nIGdyYXBoaWMgaW4gdGhlIGludGVyaW0uIFRoaXMgY29tcG9uZW50IGhlbHBzIHRvIHNpbXBsaWZ5XG4gKiB0aGF0IHBhdHRlcm4gYnkgaGFuZGxpbmcgY29tbW9uIHR5cGVzIG9mIHByb21pc2VzIGFuZCBwcm92aWRpbmcgYSBzaW1wbGUgbWVjaGFuaXNtXG4gKiBmb3IgbWF0ZXJpYWxpemluZyB0aGUgZnVsZmlsbGVkIHBheWxvYWQgaW50byBKU1guXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFzeW5jIGV4dGVuZHMgUHVyZUNvbXBvbmVudCB7XG4gICAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIGFueSBbUmVhY3Qtc3VwcG9ydGVkIGF0dHJpYnV0ZV0oaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy90YWdzLWFuZC1hdHRyaWJ1dGVzLmh0bWwjaHRtbC1hdHRyaWJ1dGVzKVxuICAgICAgICAgKi9cbiAgICAgICAgJyonOiBQcm9wVHlwZXMuYW55LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBhIHByb21pc2UsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHByb21pc2UsIG9yIG90aGVyIHR5cGUgb2YgcmVuZGVyYWJsZSBjb250ZW50OyBpZiBhIGZ1bmN0aW9uIGlzIHBhc3NlZCwgaXQgd2lsbFxuICAgICAgICAgKiBiZSBjYWxsZWQgd2l0aCB0aGUgY3VycmVudCBwcm9wc1xuICAgICAgICAgKlxuICAgICAgICAgKiBQcm9taXNlIGV4YW1wbGU6XG4gICAgICAgICAqXG4gICAgICAgICAqIGBgYGpzeFxuICAgICAgICAgKiBjb25zdCBsaXN0RGF0YVByb21pc2UgPSBmZXRjaCgnL3NvbWUvbGlzdC9kYXRhL2VuZHBvaW50JykudGhlbihcbiAgICAgICAgICogICAgIChyZXNwb25zZSkgPT4gcmVzcG9uc2Uub2sgPyByZXNwb25zZS5qc29uKCkgOiAnRmFpbGVkIHRvIHJlY2VpdmUgbGlzdCBkYXRhJyxcbiAgICAgICAgICogICAgIChlcnJvcikgPT4gZXJyb3IubWVzc2FnZSxcbiAgICAgICAgICogKS50aGVuKChwYXlsb2FkKSA9PiB7XG4gICAgICAgICAqICAgICBpZiAodHlwZW9mIHBheWxvYWQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAqICAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT0nZXJyb3InPntwYXlsb2FkfTwvZGl2Pik7XG4gICAgICAgICAqICAgICB9XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICByZXR1cm4gKFxuICAgICAgICAgKiAgICAgICAgIDx1bD5cbiAgICAgICAgICogICAgICAgICAgICAge3BheWxvYWQubWFwKChpdGVtKSA9PiAoPGxpIGtleT17aXRlbS5pZH0+e2l0ZW0uY29udGVudH08L2xpPikpfVxuICAgICAgICAgKiAgICAgICAgIDwvdWw+XG4gICAgICAgICAqICAgICApO1xuICAgICAgICAgKiB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogPEFzeW5jPntsaXN0RGF0YVByb21pc2V9PC9Bc3luYz5cbiAgICAgICAgICogYGBgXG4gICAgICAgICAqXG4gICAgICAgICAqIEZ1bmN0aW9uIGV4YW1wbGUsIHJlYWRpbmcgaW4gYFtkYXRhLWVuZHBvaW50XWAgYXMgdGhlIGB3aW5kb3cuZmV0Y2goKWAgdGFyZ2V0OlxuICAgICAgICAgKlxuICAgICAgICAgKiBgYGBqc3hcbiAgICAgICAgICogY29uc3QgZmV0Y2hMaXN0RGF0YSA9IChwcm9wcykgPT4gZmV0Y2gocHJvcHNbJ2RhdGEtZW5kcG9pbnQnXSkudGhlbihcbiAgICAgICAgICogICAgIChyZXNwb25zZSkgPT4gcmVzcG9uc2Uub2sgPyByZXNwb25zZS5qc29uKCkgOiAnRmFpbGVkIHRvIHJlY2VpdmUgbGlzdCBkYXRhJyxcbiAgICAgICAgICogICAgIChlcnJvcikgPT4gZXJyb3IubWVzc2FnZSxcbiAgICAgICAgICogKS50aGVuKChwYXlsb2FkKSA9PiB7XG4gICAgICAgICAqICAgICBpZiAodHlwZW9mIHBheWxvYWQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAqICAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT0nZXJyb3InPntwYXlsb2FkfTwvZGl2Pik7XG4gICAgICAgICAqICAgICB9XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICByZXR1cm4gKFxuICAgICAgICAgKiAgICAgICAgIDx1bD5cbiAgICAgICAgICogICAgICAgICAgICAge3BheWxvYWQubWFwKChpdGVtKSA9PiAoPGxpIGtleT17aXRlbS5pZH0+e2l0ZW0uY29udGVudH08L2xpPikpfVxuICAgICAgICAgKiAgICAgICAgIDwvdWw+XG4gICAgICAgICAqICAgICApO1xuICAgICAgICAgKiB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogPEFzeW5jIGRhdGEtZW5kcG9pbnQ9Jy9zb21lL2xpc3QvZGF0YS9lbmRwb2ludCc+e2ZldGNoTGlzdERhdGF9PC9Bc3luYz5cbiAgICAgICAgICogYGBgXG4gICAgICAgICAqL1xuICAgICAgICBjaGlsZHJlbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbXG4gICAgICAgICAgICBQcm9wVHlwZXMuZnVuYyxcbiAgICAgICAgICAgIFByb3BUeXBlcy5ub2RlLFxuICAgICAgICAgICAgUHJvcFR5cGVzLmluc3RhbmNlT2YoUHJvbWlzZSksXG4gICAgICAgIF0pLmlzUmVxdWlyZWQsXG5cbiAgICAgICAgLyoqIGEgY2FsbGJhY2sgZm9yIHdoZW4gcmVhbCBjb250ZW50IGhhcyBiZWVuIHJlbmRlcmVkOyB0aGlzIHdpbGwgYmUgY2FsbGVkIGltbWVkaWF0ZWx5IGlmIG5vcm1hbCBKU1ggaXMgcGFzc2VkIHRvIEFzeW5jLCBvciwgaW4gdGhlIGNhc2Ugb2YgYSBwcm9taXNlLCB1cG9uIHJlc29sdXRpb24gb3IgcmVqZWN0aW9uICovXG4gICAgICAgIGNoaWxkcmVuRGlkUmVuZGVyOiBQcm9wVHlwZXMuZnVuYyxcblxuICAgICAgICAvKiogY29udGVudCB0byBiZSBzaG93biB3aGlsZSB0aGUgcHJvbWlzZSBpcyBpbiBcInBlbmRpbmdcIiBzdGF0ZSAobGlrZSBhIGxvYWRpbmcgZ3JhcGhpYywgcGVyaGFwcykgKi9cbiAgICAgICAgcGVuZGluZ0NvbnRlbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIH1cblxuICAgIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgICAgIGNoaWxkcmVuOiA8ZGl2IC8+LFxuICAgICAgICBjaGlsZHJlbkRpZFJlbmRlcjogKCkgPT4ge30sXG4gICAgICAgIHBlbmRpbmdDb250ZW50OiA8ZGl2IC8+LFxuICAgIH1cblxuICAgIHN0YXRpYyBpbnRlcm5hbEtleXMgPSBPYmplY3Qua2V5cyhBc3luYy5kZWZhdWx0UHJvcHMpXG5cbiAgICBtb3VudGVkID0gZmFsc2VcbiAgICBwcm9taXNlID0gbnVsbFxuICAgIHN0YXRlID0ge31cblxuICAgIGhhbmRsZVByb21pc2VGdWxmaWxsbWVudChjb250ZXh0LCBwYXlsb2FkKSB7XG4gICAgICAgIGlmICghdGhpcy5tb3VudGVkKSB7IHJldHVybjsgfVxuXG4gICAgICAgIC8vIG9ubHkgc2V0IHRoZSBjb21wb25lbnQgaWYgdGhlIHByb21pc2UgdGhhdCBpcyBmdWxmaWxsZWQgbWF0Y2hlc1xuICAgICAgICAvLyB0aGUgb25lIHdlJ3JlIHRyYWNraW5nIGluIHN0YXRlLCBvdGhlcndpc2UgaWdub3JlIGl0IGFuZCByZXRhaW4gdGhlIHByZXZpb3VzIGRhdGFcbiAgICAgICAgdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiByZW5kZXJQYXlsb2FkSWZQcm9taXNlTWF0Y2hlcyhzdGF0ZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJvbWlzZSA9PT0gY29udGV4dCkge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZSA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4ge2NvbXBvbmVudDogcGF5bG9hZH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICAgICAgfSwgdGhpcy5maXJlUmVuZGVyQ2FsbGJhY2spO1xuICAgIH1cblxuICAgIGhhbmRsZUNoaWxkcmVuKGNoaWxkcmVuKSB7XG4gICAgICAgIGxldCBjb250ZW50ID0gY2hpbGRyZW47XG5cbiAgICAgICAgaWYgKGlzVmFsaWRFbGVtZW50KGNvbnRlbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXRTdGF0ZSh7Y29tcG9uZW50OiBjb250ZW50fSwgdGhpcy5maXJlUmVuZGVyQ2FsbGJhY2spO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb250ZW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVDaGlsZHJlbihjb250ZW50KHRoaXMucHJvcHMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJvdW5kSGFuZGxlciA9IHRoaXMuaGFuZGxlUHJvbWlzZUZ1bGZpbGxtZW50LmJpbmQodGhpcywgY29udGVudCk7XG5cbiAgICAgICAgLy8gdGhpcyBpcyBrZXB0IG91dHNpZGUgc3RhdGUgc28gaXQgY2FuIGJlIHNldCBpbW1lZGlhdGVseSBpZiB0aGUgcHJvcHMgY2hhbmdlXG4gICAgICAgIHRoaXMucHJvbWlzZSA9IGNvbnRlbnQ7XG5cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7Y29tcG9uZW50OiBudWxsfSwgKCkgPT4gY29udGVudC50aGVuKGJvdW5kSGFuZGxlciwgYm91bmRIYW5kbGVyKSk7XG4gICAgfVxuXG4gICAgZmlyZVJlbmRlckNhbGxiYWNrKCkge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZS5jb21wb25lbnQpIHtcbiAgICAgICAgICAgIHRoaXMucHJvcHMuY2hpbGRyZW5EaWRSZW5kZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbXBvbmVudFdpbGxNb3VudCgpICAgICAgICAgICAgICAgICB7IHRoaXMuaGFuZGxlQ2hpbGRyZW4odGhpcy5wcm9wcy5jaGlsZHJlbik7IH1cbiAgICBjb21wb25lbnREaWRNb3VudCgpICAgICAgICAgICAgICAgICAgeyB0aGlzLm1vdW50ZWQgPSB0cnVlOyB9XG4gICAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHsgdGhpcy5oYW5kbGVDaGlsZHJlbihuZXh0UHJvcHMuY2hpbGRyZW4pOyB9XG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSAgICAgICAgICAgICAgIHsgdGhpcy5tb3VudGVkID0gZmFsc2U7IH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgY29uc3Qge3Byb3BzLCBzdGF0ZX0gPSB0aGlzO1xuXG4gICAgICAgIHJldHVybiBjbG9uZUVsZW1lbnQoc3RhdGUuY29tcG9uZW50IHx8IHByb3BzLnBlbmRpbmdDb250ZW50LCB7XG4gICAgICAgICAgICAuLi5vbWl0KHByb3BzLCBBc3luYy5pbnRlcm5hbEtleXMpLFxuICAgICAgICAgICAgY2xhc3NOYW1lOiBjeChcbiAgICAgICAgICAgICAgICAnYi1hc3luYycsXG4gICAgICAgICAgICAgICAgcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICAgICAgICAgIHN0YXRlLmNvbXBvbmVudCA9PT0gbnVsbCAmJiBnZXQocHJvcHMsICdwZW5kaW5nQ29udGVudC5wcm9wcy5jbGFzc05hbWUnKSxcbiAgICAgICAgICAgICAgICBzdGF0ZS5jb21wb25lbnQgJiYgZ2V0KHN0YXRlLCAnY29tcG9uZW50LnByb3BzLmNsYXNzTmFtZScsICcnKSxcbiAgICAgICAgICAgICAgICB7J2ItYXN5bmMtcGVuZGluZyc6IHN0YXRlLmNvbXBvbmVudCA9PT0gbnVsbH1cbiAgICAgICAgICAgICksXG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3BhY2thZ2VzL2JvdW5kbGVzcy1hc3luYy9pbmRleC5qcyJdLCJzb3VyY2VSb290IjoiIn0=
module.exports=function(e){function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}var t={};return n.m=e,n.c=t,n.i=function(e){return e},n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},n.p="",n(n.s=8)}([function(e,n,t){"function"==typeof Symbol&&Symbol.iterator;e.exports=t(6)()},function(e,n){e.exports=require("boundless-utils-omit-keys")},function(e,n){e.exports=require("classnames")},function(e,n){e.exports=require("react")},function(e,n,t){"use strict";function r(e){return function(){return e}}var o=function(){};o.thatReturns=r,o.thatReturnsFalse=r(!1),o.thatReturnsTrue=r(!0),o.thatReturnsNull=r(null),o.thatReturnsThis=function(){return this},o.thatReturnsArgument=function(e){return e},e.exports=o},function(e,n,t){"use strict";function r(e,n,t,r,i,u,s,a){if(o(n),!e){var c;if(void 0===n)c=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var l=[t,r,i,u,s,a],p=0;c=new Error(n.replace(/%s/g,function(){return l[p++]})),c.name="Invariant Violation"}throw c.framesToPop=1,c}}var o=function(e){};e.exports=r},function(e,n,t){"use strict";var r=t(4),o=t(5),i=t(7);e.exports=function(){function e(e,n,t,r,u,s){s!==i&&o(!1,"Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types")}function n(){return e}e.isRequired=e;var t={array:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:n,element:e,instanceOf:n,node:e,objectOf:n,oneOf:n,oneOfType:n,shape:n};return t.checkPropTypes=r,t.PropTypes=t,t}},function(e,n,t){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},function(e,n,t){"use strict";function r(e,n){if(!(e instanceof n))throw new TypeError("Cannot call a class as a function")}function o(e,n){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!n||"object"!=typeof n&&"function"!=typeof n?e:n}function i(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Super expression must either be null or a function, not "+typeof n);e.prototype=Object.create(n&&n.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),n&&(Object.setPrototypeOf?Object.setPrototypeOf(e,n):e.__proto__=n)}Object.defineProperty(n,"__esModule",{value:!0});var u=t(0),s=t.n(u),a=t(3),c=(t.n(a),t(2)),l=t.n(c),p=t(1),f=t.n(p),d=Object.assign||function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])}return e},h=function(){function e(e,n){for(var t=0;t<n.length;t++){var r=n[t];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(n,t,r){return t&&e(n.prototype,t),r&&e(n,r),n}}(),m=function(e,n,t){return n.split(".").reduce(function(e,n){return e[n]||t},e)},y=function(e){function n(){var e,t,i,u;r(this,n);for(var s=arguments.length,a=Array(s),c=0;c<s;c++)a[c]=arguments[c];return t=i=o(this,(e=n.__proto__||Object.getPrototypeOf(n)).call.apply(e,[this].concat(a))),i.mounted=!1,i.promise=null,i.state={},u=t,o(i,u)}return i(n,e),h(n,[{key:"handlePromiseFulfillment",value:function(e,n){this.mounted&&this.setState(function(t){return this.promise===e?(this.promise=null,{component:n}):t},this.fireRenderCallback)}},{key:"handleChildren",value:function(e){var n=e;if(t.i(a.isValidElement)(n))return this.setState({component:n},this.fireRenderCallback);if("function"==typeof n)return this.handleChildren(n(this.props));var r=this.handlePromiseFulfillment.bind(this,n);this.promise=n,this.setState({component:null},function(){return n.then(r,r)})}},{key:"fireRenderCallback",value:function(){this.state.component&&this.props.childrenDidRender()}},{key:"componentWillMount",value:function(){this.handleChildren(this.props.children)}},{key:"componentDidMount",value:function(){this.mounted=!0}},{key:"componentWillReceiveProps",value:function(e){this.handleChildren(e.children)}},{key:"componentWillUnmount",value:function(){this.mounted=!1}},{key:"render",value:function(){var e=this.props,r=this.state;return t.i(a.cloneElement)(r.component||e.pendingContent,d({},f()(e,n.internalKeys),{className:l()("b-async",e.className,null===r.component&&m(e,"pendingContent.props.className"),r.component&&m(r,"component.props.className",""),{"b-async-pending":null===r.component})}))}}]),n}(a.PureComponent);y.propTypes={"*":s.a.any,children:s.a.oneOfType([s.a.func,s.a.node,s.a.instanceOf(Promise)]).isRequired,childrenDidRender:s.a.func,pendingContent:s.a.node},y.defaultProps={children:t.i(a.createElement)("div",null),childrenDidRender:function(){},pendingContent:t.i(a.createElement)("div",null)},y.internalKeys=Object.keys(y.defaultProps),n.default=y}]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vaW5kZXguanMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svYm9vdHN0cmFwIDI0MGM2ZDA5NzE3Mzc0NzdjMjdiIiwid2VicGFjazovLy8uL34vcHJvcC10eXBlcy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwge1wiY29tbW9uanMyXCI6XCJib3VuZGxlc3MtdXRpbHMtb21pdC1rZXlzXCJ9Iiwid2VicGFjazovLy9leHRlcm5hbCB7XCJjb21tb25qczJcIjpcImNsYXNzbmFtZXNcIn0iLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIHtcImNvbW1vbmpzMlwiOlwicmVhY3RcIn0iLCJ3ZWJwYWNrOi8vLy4vfi9mYmpzL2xpYi9lbXB0eUZ1bmN0aW9uLmpzIiwid2VicGFjazovLy8uL34vZmJqcy9saWIvaW52YXJpYW50LmpzIiwid2VicGFjazovLy8uL34vcHJvcC10eXBlcy9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMuanMiLCJ3ZWJwYWNrOi8vLy4vfi9wcm9wLXR5cGVzL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9ib3VuZGxlc3MtYXN5bmMvaW5kZXguanMiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsIm1vZHVsZXMiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJpbnN0YWxsZWRNb2R1bGVzIiwiaSIsImwiLCJjYWxsIiwibSIsImMiLCJ2YWx1ZSIsImQiLCJuYW1lIiwiZ2V0dGVyIiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsImdldCIsIm4iLCJfX2VzTW9kdWxlIiwib2JqZWN0IiwicHJvcGVydHkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsInAiLCJzIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJyZXF1aXJlIiwibWFrZUVtcHR5RnVuY3Rpb24iLCJhcmciLCJlbXB0eUZ1bmN0aW9uIiwidGhhdFJldHVybnMiLCJ0aGF0UmV0dXJuc0ZhbHNlIiwidGhhdFJldHVybnNUcnVlIiwidGhhdFJldHVybnNOdWxsIiwidGhhdFJldHVybnNUaGlzIiwidGhpcyIsInRoYXRSZXR1cm5zQXJndW1lbnQiLCJpbnZhcmlhbnQiLCJjb25kaXRpb24iLCJmb3JtYXQiLCJhIiwiYiIsImUiLCJmIiwidmFsaWRhdGVGb3JtYXQiLCJlcnJvciIsInVuZGVmaW5lZCIsIkVycm9yIiwiYXJncyIsImFyZ0luZGV4IiwicmVwbGFjZSIsImZyYW1lc1RvUG9wIiwiUmVhY3RQcm9wVHlwZXNTZWNyZXQiLCJzaGltIiwicHJvcHMiLCJwcm9wTmFtZSIsImNvbXBvbmVudE5hbWUiLCJsb2NhdGlvbiIsInByb3BGdWxsTmFtZSIsInNlY3JldCIsImdldFNoaW0iLCJpc1JlcXVpcmVkIiwiUmVhY3RQcm9wVHlwZXMiLCJhcnJheSIsImJvb2wiLCJmdW5jIiwibnVtYmVyIiwic3RyaW5nIiwic3ltYm9sIiwiYW55IiwiYXJyYXlPZiIsImVsZW1lbnQiLCJpbnN0YW5jZU9mIiwibm9kZSIsIm9iamVjdE9mIiwib25lT2YiLCJvbmVPZlR5cGUiLCJzaGFwZSIsImNoZWNrUHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwiX193ZWJwYWNrX2V4cG9ydHNfXyIsIl9jbGFzc0NhbGxDaGVjayIsImluc3RhbmNlIiwiQ29uc3RydWN0b3IiLCJUeXBlRXJyb3IiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsInNlbGYiLCJSZWZlcmVuY2VFcnJvciIsIl9pbmhlcml0cyIsInN1YkNsYXNzIiwic3VwZXJDbGFzcyIsImNyZWF0ZSIsImNvbnN0cnVjdG9yIiwid3JpdGFibGUiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9wcm9wX3R5cGVzX18iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9jbGFzc25hbWVzX18iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfY2xhc3NuYW1lc19fX2RlZmF1bHQiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfYm91bmRsZXNzX3V0aWxzX29taXRfa2V5c19fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX2JvdW5kbGVzc191dGlsc19vbWl0X2tleXNfX19kZWZhdWx0IiwiX2V4dGVuZHMiLCJhc3NpZ24iLCJ0YXJnZXQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJzb3VyY2UiLCJrZXkiLCJfY3JlYXRlQ2xhc3MiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVzY3JpcHRvciIsInByb3RvUHJvcHMiLCJzdGF0aWNQcm9wcyIsImJhc2UiLCJwYXRoIiwiZmFsbGJhY2siLCJzcGxpdCIsInJlZHVjZSIsImN1cnJlbnQiLCJmcmFnbWVudCIsIkFzeW5jIiwiX1B1cmVDb21wb25lbnQiLCJfcmVmIiwiX3RlbXAiLCJfdGhpcyIsIl9yZXQiLCJfbGVuIiwiQXJyYXkiLCJfa2V5IiwiZ2V0UHJvdG90eXBlT2YiLCJhcHBseSIsImNvbmNhdCIsIm1vdW50ZWQiLCJwcm9taXNlIiwic3RhdGUiLCJjb250ZXh0IiwicGF5bG9hZCIsInNldFN0YXRlIiwiY29tcG9uZW50IiwiZmlyZVJlbmRlckNhbGxiYWNrIiwiY2hpbGRyZW4iLCJjb250ZW50IiwiaGFuZGxlQ2hpbGRyZW4iLCJib3VuZEhhbmRsZXIiLCJoYW5kbGVQcm9taXNlRnVsZmlsbG1lbnQiLCJiaW5kIiwidGhlbiIsImNoaWxkcmVuRGlkUmVuZGVyIiwibmV4dFByb3BzIiwicGVuZGluZ0NvbnRlbnQiLCJpbnRlcm5hbEtleXMiLCJjbGFzc05hbWUiLCJiLWFzeW5jLXBlbmRpbmciLCJwcm9wVHlwZXMiLCIqIiwiUHJvbWlzZSIsImRlZmF1bHRQcm9wcyIsImtleXMiXSwibWFwcGluZ3MiOiJBQUFBQSxPQUFPQyxR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SSIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID1cbi8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0aTogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubCA9IHRydWU7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBpZGVudGl0eSBmdW5jdGlvbiBmb3IgY2FsbGluZyBoYXJtb255IGltcG9ydHMgd2l0aCB0aGUgY29ycmVjdCBjb250ZXh0XG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uaSA9IGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiB2YWx1ZTsgfTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbi8qKioqKiovIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwge1xuLyoqKioqKi8gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuLyoqKioqKi8gXHRcdFx0XHRnZXQ6IGdldHRlclxuLyoqKioqKi8gXHRcdFx0fSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4vKioqKioqLyBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4vKioqKioqLyBcdFx0cmV0dXJuIGdldHRlcjtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDgpO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoW1xuLyogMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgX3R5cGVvZj10eXBlb2YgU3ltYm9sPT09XCJmdW5jdGlvblwiJiZ0eXBlb2YgU3ltYm9sLml0ZXJhdG9yPT09XCJzeW1ib2xcIj9mdW5jdGlvbihvYmope3JldHVybiB0eXBlb2Ygb2JqO306ZnVuY3Rpb24ob2JqKXtyZXR1cm4gb2JqJiZ0eXBlb2YgU3ltYm9sPT09XCJmdW5jdGlvblwiJiZvYmouY29uc3RydWN0b3I9PT1TeW1ib2wmJm9iaiE9PVN5bWJvbC5wcm90b3R5cGU/XCJzeW1ib2xcIjp0eXBlb2Ygb2JqO307aWYoZmFsc2Upe3ZhciBSRUFDVF9FTEVNRU5UX1RZUEU9dHlwZW9mIFN5bWJvbD09PSdmdW5jdGlvbicmJlN5bWJvbC5mb3ImJlN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKXx8MHhlYWM3O3ZhciBpc1ZhbGlkRWxlbWVudD1mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudChvYmplY3Qpe3JldHVybih0eXBlb2Ygb2JqZWN0PT09J3VuZGVmaW5lZCc/J3VuZGVmaW5lZCc6X3R5cGVvZihvYmplY3QpKT09PSdvYmplY3QnJiZvYmplY3QhPT1udWxsJiZvYmplY3QuJCR0eXBlb2Y9PT1SRUFDVF9FTEVNRU5UX1RZUEU7fTt2YXIgdGhyb3dPbkRpcmVjdEFjY2Vzcz10cnVlO21vZHVsZS5leHBvcnRzPXJlcXVpcmUoJy4vZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMnKShpc1ZhbGlkRWxlbWVudCx0aHJvd09uRGlyZWN0QWNjZXNzKTt9ZWxzZXttb2R1bGUuZXhwb3J0cz1fX3dlYnBhY2tfcmVxdWlyZV9fKDYpKCk7fVxuXG4vKioqLyB9KSxcbi8qIDEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiYm91bmRsZXNzLXV0aWxzLW9taXQta2V5c1wiKTtcblxuLyoqKi8gfSksXG4vKiAyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNsYXNzbmFtZXNcIik7XG5cbi8qKiovIH0pLFxuLyogMyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcblxuLyoqKi8gfSksXG4vKiA0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuZnVuY3Rpb24gbWFrZUVtcHR5RnVuY3Rpb24oYXJnKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gYXJnO307fXZhciBlbXB0eUZ1bmN0aW9uPWZ1bmN0aW9uIGVtcHR5RnVuY3Rpb24oKXt9O2VtcHR5RnVuY3Rpb24udGhhdFJldHVybnM9bWFrZUVtcHR5RnVuY3Rpb247ZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc0ZhbHNlPW1ha2VFbXB0eUZ1bmN0aW9uKGZhbHNlKTtlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zVHJ1ZT1tYWtlRW1wdHlGdW5jdGlvbih0cnVlKTtlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zTnVsbD1tYWtlRW1wdHlGdW5jdGlvbihudWxsKTtlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zVGhpcz1mdW5jdGlvbigpe3JldHVybiB0aGlzO307ZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc0FyZ3VtZW50PWZ1bmN0aW9uKGFyZyl7cmV0dXJuIGFyZzt9O21vZHVsZS5leHBvcnRzPWVtcHR5RnVuY3Rpb247XG5cbi8qKiovIH0pLFxuLyogNSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbnZhciB2YWxpZGF0ZUZvcm1hdD1mdW5jdGlvbiB2YWxpZGF0ZUZvcm1hdChmb3JtYXQpe307aWYoZmFsc2Upe3ZhbGlkYXRlRm9ybWF0PWZ1bmN0aW9uIHZhbGlkYXRlRm9ybWF0KGZvcm1hdCl7aWYoZm9ybWF0PT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ2ludmFyaWFudCByZXF1aXJlcyBhbiBlcnJvciBtZXNzYWdlIGFyZ3VtZW50Jyk7fX07fWZ1bmN0aW9uIGludmFyaWFudChjb25kaXRpb24sZm9ybWF0LGEsYixjLGQsZSxmKXt2YWxpZGF0ZUZvcm1hdChmb3JtYXQpO2lmKCFjb25kaXRpb24pe3ZhciBlcnJvcjtpZihmb3JtYXQ9PT11bmRlZmluZWQpe2Vycm9yPW5ldyBFcnJvcignTWluaWZpZWQgZXhjZXB0aW9uIG9jY3VycmVkOyB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgJysnZm9yIHRoZSBmdWxsIGVycm9yIG1lc3NhZ2UgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy4nKTt9ZWxzZXt2YXIgYXJncz1bYSxiLGMsZCxlLGZdO3ZhciBhcmdJbmRleD0wO2Vycm9yPW5ldyBFcnJvcihmb3JtYXQucmVwbGFjZSgvJXMvZyxmdW5jdGlvbigpe3JldHVybiBhcmdzW2FyZ0luZGV4KytdO30pKTtlcnJvci5uYW1lPSdJbnZhcmlhbnQgVmlvbGF0aW9uJzt9ZXJyb3IuZnJhbWVzVG9Qb3A9MTt0aHJvdyBlcnJvcjt9fW1vZHVsZS5leHBvcnRzPWludmFyaWFudDtcblxuLyoqKi8gfSksXG4vKiA2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xudmFyIGVtcHR5RnVuY3Rpb249X193ZWJwYWNrX3JlcXVpcmVfXyg0KTt2YXIgaW52YXJpYW50PV9fd2VicGFja19yZXF1aXJlX18oNSk7dmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0PV9fd2VicGFja19yZXF1aXJlX18oNyk7bW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBzaGltKHByb3BzLHByb3BOYW1lLGNvbXBvbmVudE5hbWUsbG9jYXRpb24scHJvcEZ1bGxOYW1lLHNlY3JldCl7aWYoc2VjcmV0PT09UmVhY3RQcm9wVHlwZXNTZWNyZXQpe3JldHVybjt9aW52YXJpYW50KGZhbHNlLCdDYWxsaW5nIFByb3BUeXBlcyB2YWxpZGF0b3JzIGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnKydVc2UgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKCkgdG8gY2FsbCB0aGVtLiAnKydSZWFkIG1vcmUgYXQgaHR0cDovL2ZiLm1lL3VzZS1jaGVjay1wcm9wLXR5cGVzJyk7fTtzaGltLmlzUmVxdWlyZWQ9c2hpbTtmdW5jdGlvbiBnZXRTaGltKCl7cmV0dXJuIHNoaW07fTt2YXIgUmVhY3RQcm9wVHlwZXM9e2FycmF5OnNoaW0sYm9vbDpzaGltLGZ1bmM6c2hpbSxudW1iZXI6c2hpbSxvYmplY3Q6c2hpbSxzdHJpbmc6c2hpbSxzeW1ib2w6c2hpbSxhbnk6c2hpbSxhcnJheU9mOmdldFNoaW0sZWxlbWVudDpzaGltLGluc3RhbmNlT2Y6Z2V0U2hpbSxub2RlOnNoaW0sb2JqZWN0T2Y6Z2V0U2hpbSxvbmVPZjpnZXRTaGltLG9uZU9mVHlwZTpnZXRTaGltLHNoYXBlOmdldFNoaW19O1JlYWN0UHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzPWVtcHR5RnVuY3Rpb247UmVhY3RQcm9wVHlwZXMuUHJvcFR5cGVzPVJlYWN0UHJvcFR5cGVzO3JldHVybiBSZWFjdFByb3BUeXBlczt9O1xuXG4vKioqLyB9KSxcbi8qIDcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQ9J1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJzttb2R1bGUuZXhwb3J0cz1SZWFjdFByb3BUeXBlc1NlY3JldDtcblxuLyoqKi8gfSksXG4vKiA4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fd2VicGFja19leHBvcnRzX18sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9wcm9wX3R5cGVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9wcm9wX3R5cGVzX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3JlYWN0X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX2NsYXNzbmFtZXNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX2NsYXNzbmFtZXNfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9jbGFzc25hbWVzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19ib3VuZGxlc3NfdXRpbHNfb21pdF9rZXlzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19ib3VuZGxlc3NfdXRpbHNfb21pdF9rZXlzX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfYm91bmRsZXNzX3V0aWxzX29taXRfa2V5c19fKTtcbnZhciBfZXh0ZW5kcz1PYmplY3QuYXNzaWdufHxmdW5jdGlvbih0YXJnZXQpe2Zvcih2YXIgaT0xO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspe3ZhciBzb3VyY2U9YXJndW1lbnRzW2ldO2Zvcih2YXIga2V5IGluIHNvdXJjZSl7aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSxrZXkpKXt0YXJnZXRba2V5XT1zb3VyY2Vba2V5XTt9fX1yZXR1cm4gdGFyZ2V0O307dmFyIF9jcmVhdGVDbGFzcz1mdW5jdGlvbigpe2Z1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LHByb3BzKXtmb3IodmFyIGk9MDtpPHByb3BzLmxlbmd0aDtpKyspe3ZhciBkZXNjcmlwdG9yPXByb3BzW2ldO2Rlc2NyaXB0b3IuZW51bWVyYWJsZT1kZXNjcmlwdG9yLmVudW1lcmFibGV8fGZhbHNlO2Rlc2NyaXB0b3IuY29uZmlndXJhYmxlPXRydWU7aWYoXCJ2YWx1ZVwiaW4gZGVzY3JpcHRvcilkZXNjcmlwdG9yLndyaXRhYmxlPXRydWU7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCxkZXNjcmlwdG9yLmtleSxkZXNjcmlwdG9yKTt9fXJldHVybiBmdW5jdGlvbihDb25zdHJ1Y3Rvcixwcm90b1Byb3BzLHN0YXRpY1Byb3BzKXtpZihwcm90b1Byb3BzKWRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLHByb3RvUHJvcHMpO2lmKHN0YXRpY1Byb3BzKWRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3Isc3RhdGljUHJvcHMpO3JldHVybiBDb25zdHJ1Y3Rvcjt9O30oKTtmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsQ29uc3RydWN0b3Ipe2lmKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3Rvcikpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7fX1mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLGNhbGwpe2lmKCFzZWxmKXt0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7fXJldHVybiBjYWxsJiYodHlwZW9mIGNhbGw9PT1cIm9iamVjdFwifHx0eXBlb2YgY2FsbD09PVwiZnVuY3Rpb25cIik/Y2FsbDpzZWxmO31mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3Msc3VwZXJDbGFzcyl7aWYodHlwZW9mIHN1cGVyQ2xhc3MhPT1cImZ1bmN0aW9uXCImJnN1cGVyQ2xhc3MhPT1udWxsKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIit0eXBlb2Ygc3VwZXJDbGFzcyk7fXN1YkNsYXNzLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MmJnN1cGVyQ2xhc3MucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6c3ViQ2xhc3MsZW51bWVyYWJsZTpmYWxzZSx3cml0YWJsZTp0cnVlLGNvbmZpZ3VyYWJsZTp0cnVlfX0pO2lmKHN1cGVyQ2xhc3MpT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcyxzdXBlckNsYXNzKTpzdWJDbGFzcy5fX3Byb3RvX189c3VwZXJDbGFzczt9dmFyIGdldD1mdW5jdGlvbiBnZXQoYmFzZSxwYXRoLGZhbGxiYWNrKXtyZXR1cm4gcGF0aC5zcGxpdCgnLicpLnJlZHVjZShmdW5jdGlvbihjdXJyZW50LGZyYWdtZW50KXtyZXR1cm4gY3VycmVudFtmcmFnbWVudF18fGZhbGxiYWNrO30sYmFzZSk7fTt2YXIgQXN5bmM9ZnVuY3Rpb24oX1B1cmVDb21wb25lbnQpe19pbmhlcml0cyhBc3luYyxfUHVyZUNvbXBvbmVudCk7ZnVuY3Rpb24gQXN5bmMoKXt2YXIgX3JlZjt2YXIgX3RlbXAsX3RoaXMsX3JldDtfY2xhc3NDYWxsQ2hlY2sodGhpcyxBc3luYyk7Zm9yKHZhciBfbGVuPWFyZ3VtZW50cy5sZW5ndGgsYXJncz1BcnJheShfbGVuKSxfa2V5PTA7X2tleTxfbGVuO19rZXkrKyl7YXJnc1tfa2V5XT1hcmd1bWVudHNbX2tleV07fXJldHVybiBfcmV0PShfdGVtcD0oX3RoaXM9X3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywoX3JlZj1Bc3luYy5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihBc3luYykpLmNhbGwuYXBwbHkoX3JlZixbdGhpc10uY29uY2F0KGFyZ3MpKSksX3RoaXMpLF90aGlzLm1vdW50ZWQ9ZmFsc2UsX3RoaXMucHJvbWlzZT1udWxsLF90aGlzLnN0YXRlPXt9LF90ZW1wKSxfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihfdGhpcyxfcmV0KTt9X2NyZWF0ZUNsYXNzKEFzeW5jLFt7a2V5OidoYW5kbGVQcm9taXNlRnVsZmlsbG1lbnQnLHZhbHVlOmZ1bmN0aW9uIGhhbmRsZVByb21pc2VGdWxmaWxsbWVudChjb250ZXh0LHBheWxvYWQpe2lmKCF0aGlzLm1vdW50ZWQpe3JldHVybjt9dGhpcy5zZXRTdGF0ZShmdW5jdGlvbiByZW5kZXJQYXlsb2FkSWZQcm9taXNlTWF0Y2hlcyhzdGF0ZSl7aWYodGhpcy5wcm9taXNlPT09Y29udGV4dCl7dGhpcy5wcm9taXNlPW51bGw7cmV0dXJue2NvbXBvbmVudDpwYXlsb2FkfTt9cmV0dXJuIHN0YXRlO30sdGhpcy5maXJlUmVuZGVyQ2FsbGJhY2spO319LHtrZXk6J2hhbmRsZUNoaWxkcmVuJyx2YWx1ZTpmdW5jdGlvbiBoYW5kbGVDaGlsZHJlbihjaGlsZHJlbil7dmFyIGNvbnRlbnQ9Y2hpbGRyZW47aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9fW1wiaXNWYWxpZEVsZW1lbnRcIl0pKGNvbnRlbnQpKXtyZXR1cm4gdGhpcy5zZXRTdGF0ZSh7Y29tcG9uZW50OmNvbnRlbnR9LHRoaXMuZmlyZVJlbmRlckNhbGxiYWNrKTt9ZWxzZSBpZih0eXBlb2YgY29udGVudD09PSdmdW5jdGlvbicpe3JldHVybiB0aGlzLmhhbmRsZUNoaWxkcmVuKGNvbnRlbnQodGhpcy5wcm9wcykpO312YXIgYm91bmRIYW5kbGVyPXRoaXMuaGFuZGxlUHJvbWlzZUZ1bGZpbGxtZW50LmJpbmQodGhpcyxjb250ZW50KTt0aGlzLnByb21pc2U9Y29udGVudDt0aGlzLnNldFN0YXRlKHtjb21wb25lbnQ6bnVsbH0sZnVuY3Rpb24oKXtyZXR1cm4gY29udGVudC50aGVuKGJvdW5kSGFuZGxlcixib3VuZEhhbmRsZXIpO30pO319LHtrZXk6J2ZpcmVSZW5kZXJDYWxsYmFjaycsdmFsdWU6ZnVuY3Rpb24gZmlyZVJlbmRlckNhbGxiYWNrKCl7aWYodGhpcy5zdGF0ZS5jb21wb25lbnQpe3RoaXMucHJvcHMuY2hpbGRyZW5EaWRSZW5kZXIoKTt9fX0se2tleTonY29tcG9uZW50V2lsbE1vdW50Jyx2YWx1ZTpmdW5jdGlvbiBjb21wb25lbnRXaWxsTW91bnQoKXt0aGlzLmhhbmRsZUNoaWxkcmVuKHRoaXMucHJvcHMuY2hpbGRyZW4pO319LHtrZXk6J2NvbXBvbmVudERpZE1vdW50Jyx2YWx1ZTpmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpe3RoaXMubW91bnRlZD10cnVlO319LHtrZXk6J2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMnLHZhbHVlOmZ1bmN0aW9uIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzKXt0aGlzLmhhbmRsZUNoaWxkcmVuKG5leHRQcm9wcy5jaGlsZHJlbik7fX0se2tleTonY29tcG9uZW50V2lsbFVubW91bnQnLHZhbHVlOmZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCl7dGhpcy5tb3VudGVkPWZhbHNlO319LHtrZXk6J3JlbmRlcicsdmFsdWU6ZnVuY3Rpb24gcmVuZGVyKCl7dmFyIHByb3BzPXRoaXMucHJvcHMsc3RhdGU9dGhpcy5zdGF0ZTtyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXy5pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9fW1wiY2xvbmVFbGVtZW50XCJdKShzdGF0ZS5jb21wb25lbnR8fHByb3BzLnBlbmRpbmdDb250ZW50LF9leHRlbmRzKHt9LF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19ib3VuZGxlc3NfdXRpbHNfb21pdF9rZXlzX19fZGVmYXVsdCgpKHByb3BzLEFzeW5jLmludGVybmFsS2V5cykse2NsYXNzTmFtZTpfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfY2xhc3NuYW1lc19fX2RlZmF1bHQoKSgnYi1hc3luYycscHJvcHMuY2xhc3NOYW1lLHN0YXRlLmNvbXBvbmVudD09PW51bGwmJmdldChwcm9wcywncGVuZGluZ0NvbnRlbnQucHJvcHMuY2xhc3NOYW1lJyksc3RhdGUuY29tcG9uZW50JiZnZXQoc3RhdGUsJ2NvbXBvbmVudC5wcm9wcy5jbGFzc05hbWUnLCcnKSx7J2ItYXN5bmMtcGVuZGluZyc6c3RhdGUuY29tcG9uZW50PT09bnVsbH0pfSkpO319XSk7cmV0dXJuIEFzeW5jO30oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3JlYWN0X19bXCJQdXJlQ29tcG9uZW50XCJdKTtBc3luYy5wcm9wVHlwZXM9eycqJzpfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQuYS5hbnksY2hpbGRyZW46X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0LmEub25lT2ZUeXBlKFtfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQuYS5mdW5jLF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9wcm9wX3R5cGVzX19fZGVmYXVsdC5hLm5vZGUsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0LmEuaW5zdGFuY2VPZihQcm9taXNlKV0pLmlzUmVxdWlyZWQsY2hpbGRyZW5EaWRSZW5kZXI6X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0LmEuZnVuYyxwZW5kaW5nQ29udGVudDpfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQuYS5ub2RlfTtBc3luYy5kZWZhdWx0UHJvcHM9e2NoaWxkcmVuOl9fd2VicGFja19yZXF1aXJlX18uaShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfX1tcImNyZWF0ZUVsZW1lbnRcIl0pKCdkaXYnLG51bGwpLGNoaWxkcmVuRGlkUmVuZGVyOmZ1bmN0aW9uIGNoaWxkcmVuRGlkUmVuZGVyKCl7fSxwZW5kaW5nQ29udGVudDpfX3dlYnBhY2tfcmVxdWlyZV9fLmkoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3JlYWN0X19bXCJjcmVhdGVFbGVtZW50XCJdKSgnZGl2JyxudWxsKX07QXN5bmMuaW50ZXJuYWxLZXlzPU9iamVjdC5rZXlzKEFzeW5jLmRlZmF1bHRQcm9wcyk7LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChBc3luYyk7XG5cbi8qKiovIH0pXG4vKioqKioqLyBdKTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gaW5kZXguanMiLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBpZGVudGl0eSBmdW5jdGlvbiBmb3IgY2FsbGluZyBoYXJtb255IGltcG9ydHMgd2l0aCB0aGUgY29ycmVjdCBjb250ZXh0XG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmkgPSBmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH07XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwge1xuIFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcbiBcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG4gXHRcdFx0XHRnZXQ6IGdldHRlclxuIFx0XHRcdH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDgpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2svYm9vdHN0cmFwIDI0MGM2ZDA5NzE3Mzc0NzdjMjdiIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKi9cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9ICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmXG4gICAgU3ltYm9sLmZvciAmJlxuICAgIFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSkgfHxcbiAgICAweGVhYzc7XG5cbiAgdmFyIGlzVmFsaWRFbGVtZW50ID0gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmXG4gICAgICBvYmplY3QgIT09IG51bGwgJiZcbiAgICAgIG9iamVjdC4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xuICB9O1xuXG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IGRldmVsb3BtZW50IGJlaGF2aW9yLlxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXG4gIHZhciB0aHJvd09uRGlyZWN0QWNjZXNzID0gdHJ1ZTtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ZhY3RvcnlXaXRoVHlwZUNoZWNrZXJzJykoaXNWYWxpZEVsZW1lbnQsIHRocm93T25EaXJlY3RBY2Nlc3MpO1xufSBlbHNlIHtcbiAgLy8gQnkgZXhwbGljaXRseSB1c2luZyBgcHJvcC10eXBlc2AgeW91IGFyZSBvcHRpbmcgaW50byBuZXcgcHJvZHVjdGlvbiBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zJykoKTtcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcHJvcC10eXBlcy9pbmRleC5qcyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImJvdW5kbGVzcy11dGlscy1vbWl0LWtleXNcIik7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwge1wiY29tbW9uanMyXCI6XCJib3VuZGxlc3MtdXRpbHMtb21pdC1rZXlzXCJ9XG4vLyBtb2R1bGUgaWQgPSAxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNsYXNzbmFtZXNcIik7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwge1wiY29tbW9uanMyXCI6XCJjbGFzc25hbWVzXCJ9XG4vLyBtb2R1bGUgaWQgPSAyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0XCIpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIHtcImNvbW1vbmpzMlwiOlwicmVhY3RcIn1cbi8vIG1vZHVsZSBpZCA9IDNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBcbiAqL1xuXG5mdW5jdGlvbiBtYWtlRW1wdHlGdW5jdGlvbihhcmcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gYXJnO1xuICB9O1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gYWNjZXB0cyBhbmQgZGlzY2FyZHMgaW5wdXRzOyBpdCBoYXMgbm8gc2lkZSBlZmZlY3RzLiBUaGlzIGlzXG4gKiBwcmltYXJpbHkgdXNlZnVsIGlkaW9tYXRpY2FsbHkgZm9yIG92ZXJyaWRhYmxlIGZ1bmN0aW9uIGVuZHBvaW50cyB3aGljaFxuICogYWx3YXlzIG5lZWQgdG8gYmUgY2FsbGFibGUsIHNpbmNlIEpTIGxhY2tzIGEgbnVsbC1jYWxsIGlkaW9tIGFsYSBDb2NvYS5cbiAqL1xudmFyIGVtcHR5RnVuY3Rpb24gPSBmdW5jdGlvbiBlbXB0eUZ1bmN0aW9uKCkge307XG5cbmVtcHR5RnVuY3Rpb24udGhhdFJldHVybnMgPSBtYWtlRW1wdHlGdW5jdGlvbjtcbmVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNGYWxzZSA9IG1ha2VFbXB0eUZ1bmN0aW9uKGZhbHNlKTtcbmVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNUcnVlID0gbWFrZUVtcHR5RnVuY3Rpb24odHJ1ZSk7XG5lbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zTnVsbCA9IG1ha2VFbXB0eUZ1bmN0aW9uKG51bGwpO1xuZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc1RoaXMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzO1xufTtcbmVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNBcmd1bWVudCA9IGZ1bmN0aW9uIChhcmcpIHtcbiAgcmV0dXJuIGFyZztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZW1wdHlGdW5jdGlvbjtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L2ZianMvbGliL2VtcHR5RnVuY3Rpb24uanMiLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBVc2UgaW52YXJpYW50KCkgdG8gYXNzZXJ0IHN0YXRlIHdoaWNoIHlvdXIgcHJvZ3JhbSBhc3N1bWVzIHRvIGJlIHRydWUuXG4gKlxuICogUHJvdmlkZSBzcHJpbnRmLXN0eWxlIGZvcm1hdCAob25seSAlcyBpcyBzdXBwb3J0ZWQpIGFuZCBhcmd1bWVudHNcbiAqIHRvIHByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBicm9rZSBhbmQgd2hhdCB5b3Ugd2VyZVxuICogZXhwZWN0aW5nLlxuICpcbiAqIFRoZSBpbnZhcmlhbnQgbWVzc2FnZSB3aWxsIGJlIHN0cmlwcGVkIGluIHByb2R1Y3Rpb24sIGJ1dCB0aGUgaW52YXJpYW50XG4gKiB3aWxsIHJlbWFpbiB0byBlbnN1cmUgbG9naWMgZG9lcyBub3QgZGlmZmVyIGluIHByb2R1Y3Rpb24uXG4gKi9cblxudmFyIHZhbGlkYXRlRm9ybWF0ID0gZnVuY3Rpb24gdmFsaWRhdGVGb3JtYXQoZm9ybWF0KSB7fTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFsaWRhdGVGb3JtYXQgPSBmdW5jdGlvbiB2YWxpZGF0ZUZvcm1hdChmb3JtYXQpIHtcbiAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YXJpYW50IHJlcXVpcmVzIGFuIGVycm9yIG1lc3NhZ2UgYXJndW1lbnQnKTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGludmFyaWFudChjb25kaXRpb24sIGZvcm1hdCwgYSwgYiwgYywgZCwgZSwgZikge1xuICB2YWxpZGF0ZUZvcm1hdChmb3JtYXQpO1xuXG4gIGlmICghY29uZGl0aW9uKSB7XG4gICAgdmFyIGVycm9yO1xuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoJ01pbmlmaWVkIGV4Y2VwdGlvbiBvY2N1cnJlZDsgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50ICcgKyAnZm9yIHRoZSBmdWxsIGVycm9yIG1lc3NhZ2UgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy4nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGFyZ3MgPSBbYSwgYiwgYywgZCwgZSwgZl07XG4gICAgICB2YXIgYXJnSW5kZXggPSAwO1xuICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoZm9ybWF0LnJlcGxhY2UoLyVzL2csIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGFyZ3NbYXJnSW5kZXgrK107XG4gICAgICB9KSk7XG4gICAgICBlcnJvci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgIH1cblxuICAgIGVycm9yLmZyYW1lc1RvUG9wID0gMTsgLy8gd2UgZG9uJ3QgY2FyZSBhYm91dCBpbnZhcmlhbnQncyBvd24gZnJhbWVcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGludmFyaWFudDtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L2ZianMvbGliL2ludmFyaWFudC5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIGVtcHR5RnVuY3Rpb24gPSByZXF1aXJlKCdmYmpzL2xpYi9lbXB0eUZ1bmN0aW9uJyk7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZSgnZmJqcy9saWIvaW52YXJpYW50Jyk7XG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBzaGltKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgaWYgKHNlY3JldCA9PT0gUmVhY3RQcm9wVHlwZXNTZWNyZXQpIHtcbiAgICAgIC8vIEl0IGlzIHN0aWxsIHNhZmUgd2hlbiBjYWxsZWQgZnJvbSBSZWFjdC5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaW52YXJpYW50KFxuICAgICAgZmFsc2UsXG4gICAgICAnQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAnVXNlIFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpIHRvIGNhbGwgdGhlbS4gJyArXG4gICAgICAnUmVhZCBtb3JlIGF0IGh0dHA6Ly9mYi5tZS91c2UtY2hlY2stcHJvcC10eXBlcydcbiAgICApO1xuICB9O1xuICBzaGltLmlzUmVxdWlyZWQgPSBzaGltO1xuICBmdW5jdGlvbiBnZXRTaGltKCkge1xuICAgIHJldHVybiBzaGltO1xuICB9O1xuICAvLyBJbXBvcnRhbnQhXG4gIC8vIEtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4gYC4vZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMuanNgLlxuICB2YXIgUmVhY3RQcm9wVHlwZXMgPSB7XG4gICAgYXJyYXk6IHNoaW0sXG4gICAgYm9vbDogc2hpbSxcbiAgICBmdW5jOiBzaGltLFxuICAgIG51bWJlcjogc2hpbSxcbiAgICBvYmplY3Q6IHNoaW0sXG4gICAgc3RyaW5nOiBzaGltLFxuICAgIHN5bWJvbDogc2hpbSxcblxuICAgIGFueTogc2hpbSxcbiAgICBhcnJheU9mOiBnZXRTaGltLFxuICAgIGVsZW1lbnQ6IHNoaW0sXG4gICAgaW5zdGFuY2VPZjogZ2V0U2hpbSxcbiAgICBub2RlOiBzaGltLFxuICAgIG9iamVjdE9mOiBnZXRTaGltLFxuICAgIG9uZU9mOiBnZXRTaGltLFxuICAgIG9uZU9mVHlwZTogZ2V0U2hpbSxcbiAgICBzaGFwZTogZ2V0U2hpbVxuICB9O1xuXG4gIFJlYWN0UHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzID0gZW1wdHlGdW5jdGlvbjtcbiAgUmVhY3RQcm9wVHlwZXMuUHJvcFR5cGVzID0gUmVhY3RQcm9wVHlwZXM7XG5cbiAgcmV0dXJuIFJlYWN0UHJvcFR5cGVzO1xufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcHJvcC10eXBlcy9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9ICdTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RQcm9wVHlwZXNTZWNyZXQ7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3Byb3AtdHlwZXMvbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0LmpzIiwiaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IGNsb25lRWxlbWVudCwgY3JlYXRlRWxlbWVudCwgaXNWYWxpZEVsZW1lbnQsIFB1cmVDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY3ggZnJvbSAnY2xhc3NuYW1lcyc7XG5cbmltcG9ydCBvbWl0IGZyb20gJ2JvdW5kbGVzcy11dGlscy1vbWl0LWtleXMnO1xuXG5jb25zdCBnZXQgPSAoYmFzZSwgcGF0aCwgZmFsbGJhY2spID0+IHBhdGguc3BsaXQoJy4nKS5yZWR1Y2UoKGN1cnJlbnQsIGZyYWdtZW50KSA9PiBjdXJyZW50W2ZyYWdtZW50XSB8fCBmYWxsYmFjaywgYmFzZSk7XG5cbi8qKlxuICogVGhlcmUgYXJlIHBsZW50eSBvZiBzaXR1YXRpb25zIHdoZXJlIHlvdSBuZWVkIHRvIGZldGNoIGNvbnRlbnQgdG8gYmUgZGlzcGxheWVkLCBidXQgd2FudFxuICogdG8gc2hvdyBzb21lIHNvcnQgb2YgbG9hZGluZyBncmFwaGljIGluIHRoZSBpbnRlcmltLiBUaGlzIGNvbXBvbmVudCBoZWxwcyB0byBzaW1wbGlmeVxuICogdGhhdCBwYXR0ZXJuIGJ5IGhhbmRsaW5nIGNvbW1vbiB0eXBlcyBvZiBwcm9taXNlcyBhbmQgcHJvdmlkaW5nIGEgc2ltcGxlIG1lY2hhbmlzbVxuICogZm9yIG1hdGVyaWFsaXppbmcgdGhlIGZ1bGZpbGxlZCBwYXlsb2FkIGludG8gSlNYLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBc3luYyBleHRlbmRzIFB1cmVDb21wb25lbnQge1xuICAgIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBhbnkgW1JlYWN0LXN1cHBvcnRlZCBhdHRyaWJ1dGVdKGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvdGFncy1hbmQtYXR0cmlidXRlcy5odG1sI2h0bWwtYXR0cmlidXRlcylcbiAgICAgICAgICovXG4gICAgICAgICcqJzogUHJvcFR5cGVzLmFueSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogYSBwcm9taXNlLCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBwcm9taXNlLCBvciBvdGhlciB0eXBlIG9mIHJlbmRlcmFibGUgY29udGVudDsgaWYgYSBmdW5jdGlvbiBpcyBwYXNzZWQsIGl0IHdpbGxcbiAgICAgICAgICogYmUgY2FsbGVkIHdpdGggdGhlIGN1cnJlbnQgcHJvcHNcbiAgICAgICAgICpcbiAgICAgICAgICogUHJvbWlzZSBleGFtcGxlOlxuICAgICAgICAgKlxuICAgICAgICAgKiBgYGBqc3hcbiAgICAgICAgICogY29uc3QgbGlzdERhdGFQcm9taXNlID0gZmV0Y2goJy9zb21lL2xpc3QvZGF0YS9lbmRwb2ludCcpLnRoZW4oXG4gICAgICAgICAqICAgICAocmVzcG9uc2UpID0+IHJlc3BvbnNlLm9rID8gcmVzcG9uc2UuanNvbigpIDogJ0ZhaWxlZCB0byByZWNlaXZlIGxpc3QgZGF0YScsXG4gICAgICAgICAqICAgICAoZXJyb3IpID0+IGVycm9yLm1lc3NhZ2UsXG4gICAgICAgICAqICkudGhlbigocGF5bG9hZCkgPT4ge1xuICAgICAgICAgKiAgICAgaWYgKHR5cGVvZiBwYXlsb2FkID09PSAnc3RyaW5nJykge1xuICAgICAgICAgKiAgICAgICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9J2Vycm9yJz57cGF5bG9hZH08L2Rpdj4pO1xuICAgICAgICAgKiAgICAgfVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgcmV0dXJuIChcbiAgICAgICAgICogICAgICAgICA8dWw+XG4gICAgICAgICAqICAgICAgICAgICAgIHtwYXlsb2FkLm1hcCgoaXRlbSkgPT4gKDxsaSBrZXk9e2l0ZW0uaWR9PntpdGVtLmNvbnRlbnR9PC9saT4pKX1cbiAgICAgICAgICogICAgICAgICA8L3VsPlxuICAgICAgICAgKiAgICAgKTtcbiAgICAgICAgICogfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIDxBc3luYz57bGlzdERhdGFQcm9taXNlfTwvQXN5bmM+XG4gICAgICAgICAqIGBgYFxuICAgICAgICAgKlxuICAgICAgICAgKiBGdW5jdGlvbiBleGFtcGxlLCByZWFkaW5nIGluIGBbZGF0YS1lbmRwb2ludF1gIGFzIHRoZSBgd2luZG93LmZldGNoKClgIHRhcmdldDpcbiAgICAgICAgICpcbiAgICAgICAgICogYGBganN4XG4gICAgICAgICAqIGNvbnN0IGZldGNoTGlzdERhdGEgPSAocHJvcHMpID0+IGZldGNoKHByb3BzWydkYXRhLWVuZHBvaW50J10pLnRoZW4oXG4gICAgICAgICAqICAgICAocmVzcG9uc2UpID0+IHJlc3BvbnNlLm9rID8gcmVzcG9uc2UuanNvbigpIDogJ0ZhaWxlZCB0byByZWNlaXZlIGxpc3QgZGF0YScsXG4gICAgICAgICAqICAgICAoZXJyb3IpID0+IGVycm9yLm1lc3NhZ2UsXG4gICAgICAgICAqICkudGhlbigocGF5bG9hZCkgPT4ge1xuICAgICAgICAgKiAgICAgaWYgKHR5cGVvZiBwYXlsb2FkID09PSAnc3RyaW5nJykge1xuICAgICAgICAgKiAgICAgICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9J2Vycm9yJz57cGF5bG9hZH08L2Rpdj4pO1xuICAgICAgICAgKiAgICAgfVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgcmV0dXJuIChcbiAgICAgICAgICogICAgICAgICA8dWw+XG4gICAgICAgICAqICAgICAgICAgICAgIHtwYXlsb2FkLm1hcCgoaXRlbSkgPT4gKDxsaSBrZXk9e2l0ZW0uaWR9PntpdGVtLmNvbnRlbnR9PC9saT4pKX1cbiAgICAgICAgICogICAgICAgICA8L3VsPlxuICAgICAgICAgKiAgICAgKTtcbiAgICAgICAgICogfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIDxBc3luYyBkYXRhLWVuZHBvaW50PScvc29tZS9saXN0L2RhdGEvZW5kcG9pbnQnPntmZXRjaExpc3REYXRhfTwvQXN5bmM+XG4gICAgICAgICAqIGBgYFxuICAgICAgICAgKi9cbiAgICAgICAgY2hpbGRyZW46IFByb3BUeXBlcy5vbmVPZlR5cGUoW1xuICAgICAgICAgICAgUHJvcFR5cGVzLmZ1bmMsXG4gICAgICAgICAgICBQcm9wVHlwZXMubm9kZSxcbiAgICAgICAgICAgIFByb3BUeXBlcy5pbnN0YW5jZU9mKFByb21pc2UpLFxuICAgICAgICBdKS5pc1JlcXVpcmVkLFxuXG4gICAgICAgIC8qKiBhIGNhbGxiYWNrIGZvciB3aGVuIHJlYWwgY29udGVudCBoYXMgYmVlbiByZW5kZXJlZDsgdGhpcyB3aWxsIGJlIGNhbGxlZCBpbW1lZGlhdGVseSBpZiBub3JtYWwgSlNYIGlzIHBhc3NlZCB0byBBc3luYywgb3IsIGluIHRoZSBjYXNlIG9mIGEgcHJvbWlzZSwgdXBvbiByZXNvbHV0aW9uIG9yIHJlamVjdGlvbiAqL1xuICAgICAgICBjaGlsZHJlbkRpZFJlbmRlcjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgICAgICAgLyoqIGNvbnRlbnQgdG8gYmUgc2hvd24gd2hpbGUgdGhlIHByb21pc2UgaXMgaW4gXCJwZW5kaW5nXCIgc3RhdGUgKGxpa2UgYSBsb2FkaW5nIGdyYXBoaWMsIHBlcmhhcHMpICovXG4gICAgICAgIHBlbmRpbmdDb250ZW50OiBQcm9wVHlwZXMubm9kZSxcbiAgICB9XG5cbiAgICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgICAgICBjaGlsZHJlbjogPGRpdiAvPixcbiAgICAgICAgY2hpbGRyZW5EaWRSZW5kZXI6ICgpID0+IHt9LFxuICAgICAgICBwZW5kaW5nQ29udGVudDogPGRpdiAvPixcbiAgICB9XG5cbiAgICBzdGF0aWMgaW50ZXJuYWxLZXlzID0gT2JqZWN0LmtleXMoQXN5bmMuZGVmYXVsdFByb3BzKVxuXG4gICAgbW91bnRlZCA9IGZhbHNlXG4gICAgcHJvbWlzZSA9IG51bGxcbiAgICBzdGF0ZSA9IHt9XG5cbiAgICBoYW5kbGVQcm9taXNlRnVsZmlsbG1lbnQoY29udGV4dCwgcGF5bG9hZCkge1xuICAgICAgICBpZiAoIXRoaXMubW91bnRlZCkgeyByZXR1cm47IH1cblxuICAgICAgICAvLyBvbmx5IHNldCB0aGUgY29tcG9uZW50IGlmIHRoZSBwcm9taXNlIHRoYXQgaXMgZnVsZmlsbGVkIG1hdGNoZXNcbiAgICAgICAgLy8gdGhlIG9uZSB3ZSdyZSB0cmFja2luZyBpbiBzdGF0ZSwgb3RoZXJ3aXNlIGlnbm9yZSBpdCBhbmQgcmV0YWluIHRoZSBwcmV2aW91cyBkYXRhXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoZnVuY3Rpb24gcmVuZGVyUGF5bG9hZElmUHJvbWlzZU1hdGNoZXMoc3RhdGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByb21pc2UgPT09IGNvbnRleHQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgY29tcG9uZW50OiBwYXlsb2FkIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICAgICAgfSwgdGhpcy5maXJlUmVuZGVyQ2FsbGJhY2spO1xuICAgIH1cblxuICAgIGhhbmRsZUNoaWxkcmVuKGNoaWxkcmVuKSB7XG4gICAgICAgIGxldCBjb250ZW50ID0gY2hpbGRyZW47XG5cbiAgICAgICAgaWYgKGlzVmFsaWRFbGVtZW50KGNvbnRlbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXRTdGF0ZSh7IGNvbXBvbmVudDogY29udGVudCB9LCB0aGlzLmZpcmVSZW5kZXJDYWxsYmFjayk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbnRlbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZUNoaWxkcmVuKGNvbnRlbnQodGhpcy5wcm9wcykpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYm91bmRIYW5kbGVyID0gdGhpcy5oYW5kbGVQcm9taXNlRnVsZmlsbG1lbnQuYmluZCh0aGlzLCBjb250ZW50KTtcblxuICAgICAgICAvLyB0aGlzIGlzIGtlcHQgb3V0c2lkZSBzdGF0ZSBzbyBpdCBjYW4gYmUgc2V0IGltbWVkaWF0ZWx5IGlmIHRoZSBwcm9wcyBjaGFuZ2VcbiAgICAgICAgdGhpcy5wcm9taXNlID0gY29udGVudDtcblxuICAgICAgICB0aGlzLnNldFN0YXRlKHsgY29tcG9uZW50OiBudWxsIH0sICgpID0+IGNvbnRlbnQudGhlbihib3VuZEhhbmRsZXIsIGJvdW5kSGFuZGxlcikpO1xuICAgIH1cblxuICAgIGZpcmVSZW5kZXJDYWxsYmFjaygpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUuY29tcG9uZW50KSB7XG4gICAgICAgICAgICB0aGlzLnByb3BzLmNoaWxkcmVuRGlkUmVuZGVyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb21wb25lbnRXaWxsTW91bnQoKSAgICAgICAgICAgICAgICAgeyB0aGlzLmhhbmRsZUNoaWxkcmVuKHRoaXMucHJvcHMuY2hpbGRyZW4pOyB9XG4gICAgY29tcG9uZW50RGlkTW91bnQoKSAgICAgICAgICAgICAgICAgIHsgdGhpcy5tb3VudGVkID0gdHJ1ZTsgfVxuICAgIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzKSB7IHRoaXMuaGFuZGxlQ2hpbGRyZW4obmV4dFByb3BzLmNoaWxkcmVuKTsgfVxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkgICAgICAgICAgICAgICB7IHRoaXMubW91bnRlZCA9IGZhbHNlOyB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IHsgcHJvcHMsIHN0YXRlIH0gPSB0aGlzO1xuXG4gICAgICAgIHJldHVybiBjbG9uZUVsZW1lbnQoc3RhdGUuY29tcG9uZW50IHx8IHByb3BzLnBlbmRpbmdDb250ZW50LCB7XG4gICAgICAgICAgICAuLi5vbWl0KHByb3BzLCBBc3luYy5pbnRlcm5hbEtleXMpLFxuICAgICAgICAgICAgY2xhc3NOYW1lOiBjeChcbiAgICAgICAgICAgICAgICAnYi1hc3luYycsXG4gICAgICAgICAgICAgICAgcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICAgICAgICAgIHN0YXRlLmNvbXBvbmVudCA9PT0gbnVsbCAmJiBnZXQocHJvcHMsICdwZW5kaW5nQ29udGVudC5wcm9wcy5jbGFzc05hbWUnKSxcbiAgICAgICAgICAgICAgICBzdGF0ZS5jb21wb25lbnQgJiYgZ2V0KHN0YXRlLCAnY29tcG9uZW50LnByb3BzLmNsYXNzTmFtZScsICcnKSxcbiAgICAgICAgICAgICAgICB7ICdiLWFzeW5jLXBlbmRpbmcnOiBzdGF0ZS5jb21wb25lbnQgPT09IG51bGwgfVxuICAgICAgICAgICAgKSxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vcGFja2FnZXMvYm91bmRsZXNzLWFzeW5jL2luZGV4LmpzIl0sInNvdXJjZVJvb3QiOiIifQ==

@@ -1,2 +0,3 @@

import {cloneElement, createElement, isValidElement, PropTypes, PureComponent} from 'react';
import PropTypes from 'prop-types';
import { cloneElement, createElement, isValidElement, PureComponent } from 'react';
import cx from 'classnames';

@@ -101,3 +102,3 @@

return {component: payload};
return { component: payload };
}

@@ -113,3 +114,3 @@

if (isValidElement(content)) {
return this.setState({component: content}, this.fireRenderCallback);
return this.setState({ component: content }, this.fireRenderCallback);
} else if (typeof content === 'function') {

@@ -124,3 +125,3 @@ return this.handleChildren(content(this.props));

this.setState({component: null}, () => content.then(boundHandler, boundHandler));
this.setState({ component: null }, () => content.then(boundHandler, boundHandler));
}

@@ -140,3 +141,3 @@

render() {
const {props, state} = this;
const { props, state } = this;

@@ -150,3 +151,3 @@ return cloneElement(state.component || props.pendingContent, {

state.component && get(state, 'component.props.className', ''),
{'b-async-pending': state.component === null}
{ 'b-async-pending': state.component === null }
),

@@ -153,0 +154,0 @@ });

/* eslint no-unused-expressions:0 */
import {createElement} from 'react';
import { createElement } from 'react';
import ReactDOM from 'react-dom';

@@ -8,3 +8,3 @@ import sinon from 'sinon';

import Async from './index';
import {$, conformanceChecker} from '../boundless-utils-test-helpers/index';
import { $, conformanceChecker } from '../boundless-utils-test-helpers/index';

@@ -11,0 +11,0 @@ describe('Async higher-order component', () => {

{
"name": "boundless-async",
"version": "1.0.4",
"version": "1.1.0",
"description": "A higher-order component for rendering data that isn't ready yet.",

@@ -24,3 +24,3 @@ "author": "Evan Scott <probablyup@gmail.com> (http://yaycmyk.com) (http://yaycmyk.com)",

"dependencies": {
"boundless-utils-omit-keys": "^1.0.4",
"boundless-utils-omit-keys": "^1.1.0",
"classnames": "^2.1.5"

@@ -27,0 +27,0 @@ },

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