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

boundless-portal

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-portal - 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 t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};return t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=4)}([function(e,t){e.exports=require("boundless-utils-omit-keys")},function(e,t){e.exports=require("boundless-utils-uuid")},function(e,t){e.exports=require("react")},function(e,t){e.exports=require("react-dom")},function(e,t,n){"use strict";function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var u=n(2),a=(n.n(u),n(3)),p=(n.n(a),n(0)),s=n.n(p),c=n(1),f=n.n(c),d=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},h=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),y=function(e){function t(){var e,n,r,l;o(this,t);for(var u=arguments.length,a=Array(u),p=0;p<u;p++)a[p]=arguments[p];return n=r=i(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(a))),r.id=f()(),r.$portal=null,r.$passenger=null,l=n,i(r,l)}return l(t,e),h(t,[{key:"componentWillMount",value:function(){this.$portal=document.createElement("div"),this.props.destination.appendChild(this.$portal),this.renderPortalledContent()}},{key:"renderPortalledContent",value:function(){var e=n.i(u.isValidElement)(this.props.children)?this.props.children:n.i(u.createElement)("div",null,this.props.children);this.$portal.id=this.props.portalId||this.id,n.i(a.unstable_renderSubtreeIntoContainer)(this,e,this.$portal),this.$passenger=this.$portal.children[0]}},{key:"componentDidUpdate",value:function(){this.renderPortalledContent()}},{key:"componentWillUnmount",value:function(){n.i(a.unmountComponentAtNode)(this.$portal),this.props.destination.removeChild(this.$portal)}},{key:"render",value:function(){return n.i(u.createElement)("span",d({},s()(this.props,t.internalKeys),r({},t.PORTAL_DATA_ATTRIBUTE,this.props.portalId||this.id)))}}]),t}(u.Component);y.propTypes={"*":u.PropTypes.any,children:u.PropTypes.node,destination:u.PropTypes.instanceOf(HTMLElement),portalId:u.PropTypes.string},y.defaultProps={children:null,destination:document.body,portalId:null},y.internalKeys=Object.keys(y.defaultProps),y.PORTAL_DATA_ATTRIBUTE="data-portal-id",t.default=y}]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vaW5kZXguanMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svYm9vdHN0cmFwIDNkYWM4ZWQxNDVkODQ0MzNmOTE4Iiwid2VicGFjazovLy9leHRlcm5hbCB7XCJjb21tb25qczJcIjpcImJvdW5kbGVzcy11dGlscy1vbWl0LWtleXNcIn0iLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIHtcImNvbW1vbmpzMlwiOlwiYm91bmRsZXNzLXV0aWxzLXV1aWRcIn0iLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIHtcImNvbW1vbmpzMlwiOlwicmVhY3RcIn0iLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIHtcImNvbW1vbmpzMlwiOlwicmVhY3QtZG9tXCJ9Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL2JvdW5kbGVzcy1wb3J0YWwvaW5kZXguanMiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsIm1vZHVsZXMiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJpbnN0YWxsZWRNb2R1bGVzIiwiaSIsImwiLCJjYWxsIiwibSIsImMiLCJ2YWx1ZSIsImQiLCJuYW1lIiwiZ2V0dGVyIiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsImdldCIsIm4iLCJfX2VzTW9kdWxlIiwib2JqZWN0IiwicHJvcGVydHkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsInAiLCJzIiwicmVxdWlyZSIsIl9fd2VicGFja19leHBvcnRzX18iLCJfZGVmaW5lUHJvcGVydHkiLCJvYmoiLCJrZXkiLCJ3cml0YWJsZSIsIl9jbGFzc0NhbGxDaGVjayIsImluc3RhbmNlIiwiQ29uc3RydWN0b3IiLCJUeXBlRXJyb3IiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsInNlbGYiLCJSZWZlcmVuY2VFcnJvciIsIl9pbmhlcml0cyIsInN1YkNsYXNzIiwic3VwZXJDbGFzcyIsImNyZWF0ZSIsImNvbnN0cnVjdG9yIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9kb21fXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9ib3VuZGxlc3NfdXRpbHNfb21pdF9rZXlzX18iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfYm91bmRsZXNzX3V0aWxzX29taXRfa2V5c19fX2RlZmF1bHQiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfYm91bmRsZXNzX3V0aWxzX3V1aWRfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19ib3VuZGxlc3NfdXRpbHNfdXVpZF9fX2RlZmF1bHQiLCJfZXh0ZW5kcyIsImFzc2lnbiIsInRhcmdldCIsImFyZ3VtZW50cyIsImxlbmd0aCIsInNvdXJjZSIsIl9jcmVhdGVDbGFzcyIsImRlZmluZVByb3BlcnRpZXMiLCJwcm9wcyIsImRlc2NyaXB0b3IiLCJwcm90b1Byb3BzIiwic3RhdGljUHJvcHMiLCJQb3J0YWwiLCJfQ29tcG9uZW50IiwiX3JlZiIsIl90ZW1wIiwiX3RoaXMiLCJfcmV0IiwidGhpcyIsIl9sZW4iLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiZ2V0UHJvdG90eXBlT2YiLCJhcHBseSIsImNvbmNhdCIsImlkIiwiJHBvcnRhbCIsIiRwYXNzZW5nZXIiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJkZXN0aW5hdGlvbiIsImFwcGVuZENoaWxkIiwicmVuZGVyUG9ydGFsbGVkQ29udGVudCIsImNoaWxkIiwiY2hpbGRyZW4iLCJwb3J0YWxJZCIsInJlbW92ZUNoaWxkIiwiaW50ZXJuYWxLZXlzIiwiUE9SVEFMX0RBVEFfQVRUUklCVVRFIiwicHJvcFR5cGVzIiwiKiIsImFueSIsIm5vZGUiLCJpbnN0YW5jZU9mIiwiSFRNTEVsZW1lbnQiLCJzdHJpbmciLCJkZWZhdWx0UHJvcHMiLCJib2R5Iiwia2V5cyJdLCJtYXBw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LFlBQWFGLFNBQVNtQixLQUN0QlosU0FBVSxNQXhER3hCLEVBMkRWMEIsYUFBZTdFLE9BQU93RixLQUFLckMsRUFBT21DLGNBM0R4Qm5DLEVBNkRWMkIsc0JBQXdCLGlCTnFDbWxJaEUsRUFBNkIsUU1sRzluSXFDIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPVxuLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKVxuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0aTogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubCA9IHRydWU7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBpZGVudGl0eSBmdW5jdGlvbiBmb3IgY2FsbGluZyBoYXJtb255IGltcG9ydHMgd2l0aCB0aGUgY29ycmVjdCBjb250ZXh0XG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uaSA9IGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiB2YWx1ZTsgfTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbi8qKioqKiovIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwge1xuLyoqKioqKi8gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuLyoqKioqKi8gXHRcdFx0XHRnZXQ6IGdldHRlclxuLyoqKioqKi8gXHRcdFx0fSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4vKioqKioqLyBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4vKioqKioqLyBcdFx0cmV0dXJuIGdldHRlcjtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDQpO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoW1xuLyogMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJib3VuZGxlc3MtdXRpbHMtb21pdC1rZXlzXCIpO1xuXG4vKioqLyB9KSxcbi8qIDEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiYm91bmRsZXNzLXV0aWxzLXV1aWRcIik7XG5cbi8qKiovIH0pLFxuLyogMiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcblxuLyoqKi8gfSksXG4vKiAzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LWRvbVwiKTtcblxuLyoqKi8gfSksXG4vKiA0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fd2VicGFja19leHBvcnRzX18sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfZG9tX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9kb21fX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9kb21fXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX2JvdW5kbGVzc191dGlsc19vbWl0X2tleXNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX2JvdW5kbGVzc191dGlsc19vbWl0X2tleXNfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9ib3VuZGxlc3NfdXRpbHNfb21pdF9rZXlzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19ib3VuZGxlc3NfdXRpbHNfdXVpZF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfYm91bmRsZXNzX3V0aWxzX3V1aWRfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19ib3VuZGxlc3NfdXRpbHNfdXVpZF9fKTtcbnZhciBfZXh0ZW5kcz1PYmplY3QuYXNzaWdufHxmdW5jdGlvbih0YXJnZXQpe2Zvcih2YXIgaT0xO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspe3ZhciBzb3VyY2U9YXJndW1lbnRzW2ldO2Zvcih2YXIga2V5IGluIHNvdXJjZSl7aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSxrZXkpKXt0YXJnZXRba2V5XT1zb3VyY2Vba2V5XTt9fX1yZXR1cm4gdGFyZ2V0O307dmFyIF9jcmVhdGVDbGFzcz1mdW5jdGlvbigpe2Z1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LHByb3BzKXtmb3IodmFyIGk9MDtpPHByb3BzLmxlbmd0aDtpKyspe3ZhciBkZXNjcmlwdG9yPXByb3BzW2ldO2Rlc2NyaXB0b3IuZW51bWVyYWJsZT1kZXNjcmlwdG9yLmVudW1lcmFibGV8fGZhbHNlO2Rlc2NyaXB0b3IuY29uZmlndXJhYmxlPXRydWU7aWYoXCJ2YWx1ZVwiaW4gZGVzY3JpcHRvcilkZXNjcmlwdG9yLndyaXRhYmxlPXRydWU7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCxkZXNjcmlwdG9yLmtleSxkZXNjcmlwdG9yKTt9fXJldHVybiBmdW5jdGlvbihDb25zdHJ1Y3Rvcixwcm90b1Byb3BzLHN0YXRpY1Byb3BzKXtpZihwcm90b1Byb3BzKWRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLHByb3RvUHJvcHMpO2lmKHN0YXRpY1Byb3BzKWRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3Isc3RhdGljUHJvcHMpO3JldHVybiBDb25zdHJ1Y3Rvcjt9O30oKTtmdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLGtleSx2YWx1ZSl7aWYoa2V5IGluIG9iail7T2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaixrZXkse3ZhbHVlOnZhbHVlLGVudW1lcmFibGU6dHJ1ZSxjb25maWd1cmFibGU6dHJ1ZSx3cml0YWJsZTp0cnVlfSk7fWVsc2V7b2JqW2tleV09dmFsdWU7fXJldHVybiBvYmo7fWZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSxDb25zdHJ1Y3Rvcil7aWYoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTt9fWZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsY2FsbCl7aWYoIXNlbGYpe3Rocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTt9cmV0dXJuIGNhbGwmJih0eXBlb2YgY2FsbD09PVwib2JqZWN0XCJ8fHR5cGVvZiBjYWxsPT09XCJmdW5jdGlvblwiKT9jYWxsOnNlbGY7fWZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcyxzdXBlckNsYXNzKXtpZih0eXBlb2Ygc3VwZXJDbGFzcyE9PVwiZnVuY3Rpb25cIiYmc3VwZXJDbGFzcyE9PW51bGwpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiK3R5cGVvZiBzdXBlckNsYXNzKTt9c3ViQ2xhc3MucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyYmc3VwZXJDbGFzcy5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpzdWJDbGFzcyxlbnVtZXJhYmxlOmZhbHNlLHdyaXRhYmxlOnRydWUsY29uZmlndXJhYmxlOnRydWV9fSk7aWYoc3VwZXJDbGFzcylPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLHN1cGVyQ2xhc3MpOnN1YkNsYXNzLl9fcHJvdG9fXz1zdXBlckNsYXNzO312YXIgUG9ydGFsPWZ1bmN0aW9uKF9Db21wb25lbnQpe19pbmhlcml0cyhQb3J0YWwsX0NvbXBvbmVudCk7ZnVuY3Rpb24gUG9ydGFsKCl7dmFyIF9yZWY7dmFyIF90ZW1wLF90aGlzLF9yZXQ7X2NsYXNzQ2FsbENoZWNrKHRoaXMsUG9ydGFsKTtmb3IodmFyIF9sZW49YXJndW1lbnRzLmxlbmd0aCxhcmdzPUFycmF5KF9sZW4pLF9rZXk9MDtfa2V5PF9sZW47X2tleSsrKXthcmdzW19rZXldPWFyZ3VtZW50c1tfa2V5XTt9cmV0dXJuIF9yZXQ9KF90ZW1wPShfdGhpcz1fcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLChfcmVmPVBvcnRhbC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihQb3J0YWwpKS5jYWxsLmFwcGx5KF9yZWYsW3RoaXNdLmNvbmNhdChhcmdzKSkpLF90aGlzKSxfdGhpcy5pZD1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfYm91bmRsZXNzX3V0aWxzX3V1aWRfX19kZWZhdWx0KCkoKSxfdGhpcy4kcG9ydGFsPW51bGwsX3RoaXMuJHBhc3Nlbmdlcj1udWxsLF90ZW1wKSxfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihfdGhpcyxfcmV0KTt9X2NyZWF0ZUNsYXNzKFBvcnRhbCxbe2tleTonY29tcG9uZW50V2lsbE1vdW50Jyx2YWx1ZTpmdW5jdGlvbiBjb21wb25lbnRXaWxsTW91bnQoKXt0aGlzLiRwb3J0YWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7dGhpcy5wcm9wcy5kZXN0aW5hdGlvbi5hcHBlbmRDaGlsZCh0aGlzLiRwb3J0YWwpO3RoaXMucmVuZGVyUG9ydGFsbGVkQ29udGVudCgpO319LHtrZXk6J3JlbmRlclBvcnRhbGxlZENvbnRlbnQnLHZhbHVlOmZ1bmN0aW9uIHJlbmRlclBvcnRhbGxlZENvbnRlbnQoKXt2YXIgY2hpbGQ9X193ZWJwYWNrX3JlcXVpcmVfXy5pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1wiaXNWYWxpZEVsZW1lbnRcIl0pKHRoaXMucHJvcHMuY2hpbGRyZW4pP3RoaXMucHJvcHMuY2hpbGRyZW46X193ZWJwYWNrX3JlcXVpcmVfXy5pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1wiY3JlYXRlRWxlbWVudFwiXSkoJ2RpdicsbnVsbCx0aGlzLnByb3BzLmNoaWxkcmVuKTt0aGlzLiRwb3J0YWwuaWQ9dGhpcy5wcm9wcy5wb3J0YWxJZHx8dGhpcy5pZDtfX3dlYnBhY2tfcmVxdWlyZV9fLmkoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3JlYWN0X2RvbV9fW1widW5zdGFibGVfcmVuZGVyU3VidHJlZUludG9Db250YWluZXJcIl0pKHRoaXMsY2hpbGQsdGhpcy4kcG9ydGFsKTt0aGlzLiRwYXNzZW5nZXI9dGhpcy4kcG9ydGFsLmNoaWxkcmVuWzBdO319LHtrZXk6J2NvbXBvbmVudERpZFVwZGF0ZScsdmFsdWU6ZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKCl7dGhpcy5yZW5kZXJQb3J0YWxsZWRDb250ZW50KCk7fX0se2tleTonY29tcG9uZW50V2lsbFVubW91bnQnLHZhbHVlOmZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCl7X193ZWJwYWNrX3JlcXVpcmVfXy5pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9kb21fX1tcInVubW91bnRDb21wb25lbnRBdE5vZGVcIl0pKHRoaXMuJHBvcnRhbCk7dGhpcy5wcm9wcy5kZXN0aW5hdGlvbi5yZW1vdmVDaGlsZCh0aGlzLiRwb3J0YWwpO319LHtrZXk6J3JlbmRlcicsdmFsdWU6ZnVuY3Rpb24gcmVuZGVyKCl7cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18uaShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcImNyZWF0ZUVsZW1lbnRcIl0pKCdzcGFuJyxfZXh0ZW5kcyh7fSxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfYm91bmRsZXNzX3V0aWxzX29taXRfa2V5c19fX2RlZmF1bHQoKSh0aGlzLnByb3BzLFBvcnRhbC5pbnRlcm5hbEtleXMpLF9kZWZpbmVQcm9wZXJ0eSh7fSxQb3J0YWwuUE9SVEFMX0RBVEFfQVRUUklCVVRFLHRoaXMucHJvcHMucG9ydGFsSWR8fHRoaXMuaWQpKSk7fX1dKTtyZXR1cm4gUG9ydGFsO30oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXCJDb21wb25lbnRcIl0pO1BvcnRhbC5wcm9wVHlwZXM9eycqJzpfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcIlByb3BUeXBlc1wiXS5hbnksY2hpbGRyZW46X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXCJQcm9wVHlwZXNcIl0ubm9kZSxkZXN0aW5hdGlvbjpfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcIlByb3BUeXBlc1wiXS5pbnN0YW5jZU9mKEhUTUxFbGVtZW50KSxwb3J0YWxJZDpfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcIlByb3BUeXBlc1wiXS5zdHJpbmd9O1BvcnRhbC5kZWZhdWx0UHJvcHM9e2NoaWxkcmVuOm51bGwsZGVzdGluYXRpb246ZG9jdW1lbnQuYm9keSxwb3J0YWxJZDpudWxsfTtQb3J0YWwuaW50ZXJuYWxLZXlzPU9iamVjdC5rZXlzKFBvcnRhbC5kZWZhdWx0UHJvcHMpO1BvcnRhbC5QT1JUQUxfREFUQV9BVFRSSUJVVEU9J2RhdGEtcG9ydGFsLWlkJzsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gUG9ydGFsO1xuXG4vKioqLyB9KVxuLyoqKioqKi8gXSk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIGluZGV4LmpzIiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pXG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG5cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGlkZW50aXR5IGZ1bmN0aW9uIGZvciBjYWxsaW5nIGhhcm1vbnkgaW1wb3J0cyB3aXRoIHRoZSBjb3JyZWN0IGNvbnRleHRcbiBcdF9fd2VicGFja19yZXF1aXJlX18uaSA9IGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiB2YWx1ZTsgfTtcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbiBcdFx0XHRcdGdldDogZ2V0dGVyXG4gXHRcdFx0fSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gNCk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay9ib290c3RyYXAgM2RhYzhlZDE0NWQ4NDQzM2Y5MTgiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJib3VuZGxlc3MtdXRpbHMtb21pdC1rZXlzXCIpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIHtcImNvbW1vbmpzMlwiOlwiYm91bmRsZXNzLXV0aWxzLW9taXQta2V5c1wifVxuLy8gbW9kdWxlIGlkID0gMFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJib3VuZGxlc3MtdXRpbHMtdXVpZFwiKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBleHRlcm5hbCB7XCJjb21tb25qczJcIjpcImJvdW5kbGVzcy11dGlscy11dWlkXCJ9XG4vLyBtb2R1bGUgaWQgPSAxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0XCIpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIHtcImNvbW1vbmpzMlwiOlwicmVhY3RcIn1cbi8vIG1vZHVsZSBpZCA9IDJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3QtZG9tXCIpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIHtcImNvbW1vbmpzMlwiOlwicmVhY3QtZG9tXCJ9XG4vLyBtb2R1bGUgaWQgPSAzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImltcG9ydCB7Y3JlYXRlRWxlbWVudCwgaXNWYWxpZEVsZW1lbnQsIENvbXBvbmVudCwgUHJvcFR5cGVzfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge3VubW91bnRDb21wb25lbnRBdE5vZGUsIHVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyIGFzIHJlbmRlclN1YnRyZWV9IGZyb20gJ3JlYWN0LWRvbSc7XG5cbmltcG9ydCBvbWl0IGZyb20gJ2JvdW5kbGVzcy11dGlscy1vbWl0LWtleXMnO1xuaW1wb3J0IHV1aWQgZnJvbSAnYm91bmRsZXNzLXV0aWxzLXV1aWQnO1xuXG4vKipcbmBQb3J0YWxgIGlzIHVzZWQgaW4gb3RoZXIgY29tcG9uZW50cyBzdWNoIGFzIGBQb3BvdmVyYCB0byByZW5kZXIgY29udGVudCB0byBwbGFjZXMgbGlrZSB0aGUgSFRNTCBgPGJvZHk+YCB0YWcsIGF2b2lkaW5nIHN0eWxlIGxlYWthZ2UgYW5kIHBhcmVudCBsYXlvdXQgY29udGV4dHMuIE9ubHkgYWNjZXB0cyBhIHNpbmdsZSB0b3AtbGV2ZWwgY2hpbGQ7IG5ha2VkIHRleHQsIGV0YyB3aWxsIGJlIHdyYXBwZWQgaW4gYSBgPGRpdj5gLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQb3J0YWwgZXh0ZW5kcyBDb21wb25lbnQge1xuICAgIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBhbnkgW1JlYWN0LXN1cHBvcnRlZCBhdHRyaWJ1dGVdKGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvdGFncy1hbmQtYXR0cmlidXRlcy5odG1sI2h0bWwtYXR0cmlidXRlcylcbiAgICAgICAgICovXG4gICAgICAgICcqJzogUHJvcFR5cGVzLmFueSxcblxuICAgICAgICAvLyBzaW5nbGUgY2hpbGQgb25seSAtIGFycmF5cyBub3QgYWxsb3dlZFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBhbnkgbm9ybWFsIFJlYWN0IGNoaWxkLCBidXQgbXVzdCBiZSBzaW5ndWxhcjsgbXVsdGlwbGUgc2libGluZyBjaGlsZHJlbiBtdXN0IGhhdmUgYSBjb21tb24gd3JhcHBlciwgc3VjaCBhcyBhIFwibGF5b3V0XCIgYDxkaXY+YFxuXG4gICAgICAgICAqIOKchSBPSzpcblxuICAgICAgICAgKiBgYGBqc3hcbiAgICAgICAgICogPFBvcnRhbD5cbiAgICAgICAgICogICBmb29cbiAgICAgICAgICogPC9Qb3J0YWw+XG5cbiAgICAgICAgICogPFBvcnRhbD5cbiAgICAgICAgICogICA8ZGl2PmZvbzwvZGl2PlxuICAgICAgICAgKiA8L1BvcnRhbD5cblxuICAgICAgICAgKiA8UG9ydGFsPlxuICAgICAgICAgKiAgIDxkaXY+XG4gICAgICAgICAqICAgICAgIDxkaXY+Zm9vPC9kaXY+XG4gICAgICAgICAqICAgICAgIDxkaXY+YmFyPC9kaXY+XG4gICAgICAgICAqICAgPC9kaXY+XG4gICAgICAgICAqIDwvUG9ydGFsPlxuICAgICAgICAgKiBgYGBcblxuICAgICAgICAgKiDim5TvuI8gTm90IE9LOlxuXG4gICAgICAgICAqIGBgYGpzeFxuICAgICAgICAgKiA8UG9ydGFsPlxuICAgICAgICAgKiAgIDxkaXY+Zm9vPC9kaXY+XG4gICAgICAgICAqICAgPGRpdj5iYXI8L2Rpdj5cbiAgICAgICAgICogPC9Qb3J0YWw+XG4gICAgICAgICAqIGBgYFxuICAgICAgICAgKi9cbiAgICAgICAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiB0aGUgbG9jYXRpb24gdG8gYXBwZW5kIHRoZSBnZW5lcmF0ZWQgcG9ydGFsIGFuZCBjaGlsZCBlbGVtZW50c1xuICAgICAgICAgKi9cbiAgICAgICAgZGVzdGluYXRpb246IFByb3BUeXBlcy5pbnN0YW5jZU9mKEhUTUxFbGVtZW50KSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogdGhlIElEIHVzZWQgdG8gbGluayB0aGUgcG9ydGFsIG9yaWdpbiB0byB0aGUgZGVzdGluYXRpb247IGFkZGVkIHRvIGdlbmVyYXRlZCBgPGRpdj5gIGFwcGVuZGVkIHRvIHRoZSBkZXN0aW5hdGlvbiBIVE1MIG5vZGVcbiAgICAgICAgICovXG4gICAgICAgIHBvcnRhbElkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIH1cblxuICAgIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgICAgIGNoaWxkcmVuOiBudWxsLFxuICAgICAgICBkZXN0aW5hdGlvbjogZG9jdW1lbnQuYm9keSxcbiAgICAgICAgcG9ydGFsSWQ6IG51bGwsXG4gICAgfVxuXG4gICAgc3RhdGljIGludGVybmFsS2V5cyA9IE9iamVjdC5rZXlzKFBvcnRhbC5kZWZhdWx0UHJvcHMpXG5cbiAgICBzdGF0aWMgUE9SVEFMX0RBVEFfQVRUUklCVVRFID0gJ2RhdGEtcG9ydGFsLWlkJ1xuXG4gICAgaWQgPSB1dWlkKClcblxuICAgIC8vIHRoZSA8ZGl2PiB0aGF0IHRoZSBjaGlsZHJlbiBhcmUgcmVuZGVyZWQgaW50b1xuICAgICRwb3J0YWwgPSBudWxsXG5cbiAgICAvLyB0aGUgdG9wLWxldmVsIGNoaWxkIHJlbmRlcmVkIGludG8gdGhlICRwb3J0YWxcbiAgICAkcGFzc2VuZ2VyID0gbnVsbDtcblxuICAgIGNvbXBvbmVudFdpbGxNb3VudCgpIHtcbiAgICAgICAgdGhpcy4kcG9ydGFsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHRoaXMucHJvcHMuZGVzdGluYXRpb24uYXBwZW5kQ2hpbGQodGhpcy4kcG9ydGFsKTtcblxuICAgICAgICB0aGlzLnJlbmRlclBvcnRhbGxlZENvbnRlbnQoKTtcbiAgICB9XG5cbiAgICByZW5kZXJQb3J0YWxsZWRDb250ZW50KCkge1xuICAgICAgICBjb25zdCBjaGlsZCA9IGlzVmFsaWRFbGVtZW50KHRoaXMucHJvcHMuY2hpbGRyZW4pID8gdGhpcy5wcm9wcy5jaGlsZHJlbiA6ICg8ZGl2Pnt0aGlzLnByb3BzLmNoaWxkcmVufTwvZGl2Pik7XG5cbiAgICAgICAgLy8gdXBkYXRlIHRoZSBwb3J0YWwgSUQgbGluayBpZiBuZWVkZWRcbiAgICAgICAgdGhpcy4kcG9ydGFsLmlkID0gdGhpcy5wcm9wcy5wb3J0YWxJZCB8fCB0aGlzLmlkO1xuXG4gICAgICAgIHJlbmRlclN1YnRyZWUodGhpcywgY2hpbGQsIHRoaXMuJHBvcnRhbCk7XG4gICAgICAgIHRoaXMuJHBhc3NlbmdlciA9IHRoaXMuJHBvcnRhbC5jaGlsZHJlblswXTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRVcGRhdGUoKSB7IHRoaXMucmVuZGVyUG9ydGFsbGVkQ29udGVudCgpOyB9XG5cbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgICAgdW5tb3VudENvbXBvbmVudEF0Tm9kZSh0aGlzLiRwb3J0YWwpO1xuICAgICAgICB0aGlzLnByb3BzLmRlc3RpbmF0aW9uLnJlbW92ZUNoaWxkKHRoaXMuJHBvcnRhbCk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICB7Li4ub21pdCh0aGlzLnByb3BzLCBQb3J0YWwuaW50ZXJuYWxLZXlzKX1cbiAgICAgICAgICAgICAgICB7Li4ue1tQb3J0YWwuUE9SVEFMX0RBVEFfQVRUUklCVVRFXTogdGhpcy5wcm9wcy5wb3J0YWxJZCB8fCB0aGlzLmlkfX0gLz5cbiAgICAgICAgKTtcbiAgICB9XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9wYWNrYWdlcy9ib3VuZGxlc3MtcG9ydGFsL2luZGV4LmpzIl0sInNvdXJjZVJvb3QiOiIifQ==
module.exports=function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};return t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=9)}([function(e,t,n){"function"==typeof Symbol&&Symbol.iterator;e.exports=n(7)()},function(e,t){e.exports=require("boundless-utils-omit-keys")},function(e,t){e.exports=require("boundless-utils-uuid")},function(e,t){e.exports=require("react")},function(e,t){e.exports=require("react-dom")},function(e,t,n){"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,t,n){"use strict";function r(e,t,n,r,i,u,a,s){if(o(t),!e){var l;if(void 0===t)l=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,r,i,u,a,s],p=0;l=new Error(t.replace(/%s/g,function(){return c[p++]})),l.name="Invariant Violation"}throw l.framesToPop=1,l}}var o=function(e){};e.exports=r},function(e,t,n){"use strict";var r=n(5),o=n(6),i=n(8);e.exports=function(){function e(e,t,n,r,u,a){a!==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 t(){return e}e.isRequired=e;var n={array:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t};return n.checkPropTypes=r,n.PropTypes=n,n}},function(e,t,n){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},function(e,t,n){"use strict";function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function u(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var a=n(0),s=n.n(a),l=n(3),c=(n.n(l),n(4)),p=(n.n(c),n(1)),f=n.n(p),d=n(2),h=n.n(d),y=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},b=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),m=function(e){function t(){var e,n,r,u;o(this,t);for(var a=arguments.length,s=Array(a),l=0;l<a;l++)s[l]=arguments[l];return n=r=i(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(s))),r.id=h()(),r.$portal=null,r.$passenger=null,u=n,i(r,u)}return u(t,e),b(t,[{key:"componentWillMount",value:function(){this.$portal=document.createElement("div"),this.props.destination.appendChild(this.$portal),this.renderPortalledContent()}},{key:"renderPortalledContent",value:function(){var e=n.i(l.isValidElement)(this.props.children)?this.props.children:n.i(l.createElement)("div",null,this.props.children);this.$portal.id=this.props.portalId||this.id,n.i(c.unstable_renderSubtreeIntoContainer)(this,e,this.$portal),this.$passenger=this.$portal.children[0]}},{key:"componentDidUpdate",value:function(){this.renderPortalledContent()}},{key:"componentWillUnmount",value:function(){n.i(c.unmountComponentAtNode)(this.$portal),this.props.destination.removeChild(this.$portal)}},{key:"render",value:function(){return n.i(l.createElement)("span",y({},f()(this.props,t.internalKeys),r({},t.PORTAL_DATA_ATTRIBUTE,this.props.portalId||this.id)))}}]),t}(l.Component);m.propTypes={"*":s.a.any,children:s.a.node,destination:s.a.instanceOf(HTMLElement),portalId:s.a.string},m.defaultProps={children:null,destination:document.body,portalId:null},m.internalKeys=Object.keys(m.defaultProps),m.PORTAL_DATA_ATTRIBUTE="data-portal-id",t.default=m}]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vaW5kZXguanMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svYm9vdHN0cmFwIGQzOWZlNDU0MzE3OWYyNjBjYTMwIiwid2VicGFjazovLy8uL34vcHJvcC10eXBlcy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwge1wiY29tbW9uanMyXCI6XCJib3VuZGxlc3MtdXRpbHMtb21pdC1rZXlzXCJ9Iiwid2VicGFjazovLy9leHRlcm5hbCB7XCJjb21tb25qczJcIjpcImJvdW5kbGVzcy11dGlscy11dWlkXCJ9Iiwid2VicGFjazovLy9leHRlcm5hbCB7XCJjb21tb25qczJcIjpcInJlYWN0XCJ9Iiwid2VicGFjazovLy9leHRlcm5hbCB7XCJjb21tb25qczJcIjpcInJlYWN0LWRvbVwifSIsIndlYnBhY2s6Ly8vLi9+L2ZianMvbGliL2VtcHR5RnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vfi9mYmpzL2xpYi9pbnZhcmlhbnQuanMiLCJ3ZWJwYWNrOi8vLy4vfi9wcm9wLXR5cGVzL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcy5qcyIsIndlYnBhY2s6Ly8vLi9+L3Byb3AtdHlwZXMvbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL2JvdW5kbGVzcy1wb3J0YWwvaW5kZXguanMiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsIm1vZHVsZXMiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJpbnN0YWxsZWRNb2R1bGVzIiwiaSIsImwiLCJjYWxsIiwibSIsImMiLCJ2YWx1ZSIsImQiLCJuYW1lIiwiZ2V0dGVyIiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsImdldCIsIm4iLCJfX2VzTW9kdWxlIiwib2JqZWN0IiwicHJvcGVydHkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsInAiLCJzIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJyZXF1aXJlIiwibWFrZUVtcHR5RnVuY3Rpb24iLCJhcmciLCJlbXB0eUZ1bmN0aW9uIiwidGhhdFJldHVybnMiLCJ0aGF0UmV0dXJuc0ZhbHNlIiwidGhhdFJldHVybnNUcnVlIiwidGhhdFJldHVybnNOdWxsIiwidGhhdFJldHVybnNUaGlzIiwidGhpcyIsInRoYXRSZXR1cm5zQXJndW1lbnQiLCJpbnZhcmlhbnQiLCJjb25kaXRpb24iLCJmb3JtYXQiLCJhIiwiYiIsImUiLCJmIiwidmFsaWRhdGVGb3JtYXQiLCJlcnJvciIsInVuZGVmaW5lZCIsIkVycm9yIiwiYXJncyIsImFyZ0luZGV4IiwicmVwbGFjZSIsImZyYW1lc1RvUG9wIiwiUmVhY3RQcm9wVHlwZXNTZWNyZXQiLCJzaGltIiwicHJvcHMiLCJwcm9wTmFtZSIsImNvbXBvbmVudE5hbWUiLCJsb2NhdGlvbiIsInByb3BGdWxsTmFtZSIsInNlY3JldCIsImdldFNoaW0iLCJpc1JlcXVpcmVkIiwiUmVhY3RQcm9wVHlwZXMiLCJhcnJheSIsImJvb2wiLCJmdW5jIiwibnVtYmVyIiwic3RyaW5nIiwic3ltYm9sIiwiYW55IiwiYXJyYXlPZiIsImVsZW1lbnQiLCJpbnN0YW5jZU9mIiwibm9kZSIsIm9iamVjdE9mIiwib25lT2YiLCJvbmVPZlR5cGUiLCJzaGFwZSIsImNoZWNrUHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwiX193ZWJwYWNrX2V4cG9ydHNfXyIsIl9kZWZpbmVQcm9wZXJ0eSIsIm9iaiIsImtleSIsIndyaXRhYmxlIiwiX2NsYXNzQ2FsbENoZWNrIiwiaW5zdGFuY2UiLCJDb25zdHJ1Y3RvciIsIlR5cGVFcnJvciIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwic2VsZiIsIlJlZmVyZW5jZUVycm9yIiwiX2luaGVyaXRzIiwic3ViQ2xhc3MiLCJzdXBlckNsYXNzIiwiY3JlYXRlIiwiY29uc3RydWN0b3IiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9wcm9wX3R5cGVzX18iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9kb21fXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19ib3VuZGxlc3NfdXRpbHNfb21pdF9rZXlzX18iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfYm91bmRsZXNzX3V0aWxzX29taXRfa2V5c19fX2RlZmF1bHQiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfYm91bmRsZXNzX3V0aWxzX3V1aWRfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9ib3VuZGxlc3NfdXRpbHNfdXVpZF9fX2RlZmF1bHQiLCJfZXh0ZW5kcyIsImFzc2lnbiIsInRhcmdldCIsImFyZ3VtZW50cyIsImxlbmd0aCIsInNvdXJjZSIsIl9jcmVhdGVDbGFzcyIsImRlZmluZVByb3BlcnRpZXMiLCJkZXNjcmlwdG9yIiwicHJvdG9Qcm9wcyIsInN0YXRpY1Byb3BzIiwiUG9ydGFsIiwiX0NvbXBvbmVudCIsIl9yZWYiLCJfdGVtcCIsIl90aGlzIiwiX3JldCIsIl9sZW4iLCJBcnJheSIsIl9rZXkiLCJnZXRQcm90b3R5cGVPZiIsImFwcGx5IiwiY29uY2F0IiwiaWQiLCIkcG9ydGFsIiwiJHBhc3NlbmdlciIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImRlc3RpbmF0aW9uIiwiYXBwZW5kQ2hpbGQiLCJyZW5kZXJQb3J0YWxsZWRDb250ZW50IiwiY2hpbGQiLCJjaGlsZHJlbiIsInBvcnRhbElkIiwicmVtb3ZlQ2hpbGQiLCJpbnRlcm5hbEtleXMiLCJQT1JUQUxfREFUQV9BVFRSSUJVVEUiLCJwcm9wVHlwZXMiLCIqIiwiSFRNTEVsZW1lbnQiLCJkZWZhdWx0UHJvcHMiLCJib2R5Iiwia2V5cyJdLCJtYXBwaW5ncyI6IkFBQUFBLE9B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RnhELElBQUkscUJBQXFCN0UsTUFBTSxXVzdDNzhGNkIsS0FBS3NHLDRCWDZDd2dHdEQsSUFBSSx1QkFBdUI3RSxNQUFNLFdXMUNqa0dSLEVBQUFHLEVBQUFxRyxFQUFBLHdCQUF1Qm5FLEtBQUtnRyxTQUM1QmhHLEtBQUttQixNQUFNaUYsWUFBWU0sWUFBWTFHLEtBQUtnRyxZWHlDcXRHaEQsSUFBSSxTQUFTN0UsTUFBTSxXV3JDaHhHLE1BQ0lSLEdBQUFHLEVBQUFvRyxFQUFBLHNCQUFBTSxLQUNRSCxJQUFLckUsS0FBS21CLE1BQU9nRSxFQUFPd0IsY0FEaEM3RCxLQUVXcUMsRUFBT3lCLHNCQUF3QjVHLEtBQUttQixNQUFNc0YsVUFBWXpHLEtBQUsrRixVWGtDNC9HWixHV3JJMWlIakIsRUFBQSxVQUFmaUIsR0FDVjBCLFdBSUhDLElBQUs3QyxFQUFBNUQsRUFBVTZCLElBbUNmc0UsU0FBVXZDLEVBQUE1RCxFQUFVaUMsS0FLcEI4RCxZQUFhbkMsRUFBQTVELEVBQVVnQyxXQUFXMEUsYUFLbENOLFNBQVV4QyxFQUFBNUQsRUFBVTJCLFFBbERQbUQsRUFxRFY2QixjQUNIUixTQUFVLEtBQ1ZKLFlBQWFGLFNBQVNlLEtBQ3RCUixTQUFVLE1BeERHdEIsRUEyRFZ3QixhQUFlbkksT0FBTzBJLEtBQUsvQixFQUFPNkIsY0EzRHhCN0IsRUE2RFZ5QixzQkFBd0IsaUJYd0UybEkvRCxFQUE2QixRQUFJIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPVxuLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRpOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGw6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge31cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGlkZW50aXR5IGZ1bmN0aW9uIGZvciBjYWxsaW5nIGhhcm1vbnkgaW1wb3J0cyB3aXRoIHRoZSBjb3JyZWN0IGNvbnRleHRcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5pID0gZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuLyoqKioqKi8gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4vKioqKioqLyBcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4vKioqKioqLyBcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG4vKioqKioqLyBcdFx0XHRcdGdldDogZ2V0dGVyXG4vKioqKioqLyBcdFx0XHR9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbi8qKioqKiovIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gZ2V0dGVyO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gOSk7XG4vKioqKioqLyB9KVxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovIChbXG4vKiAwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBfdHlwZW9mPXR5cGVvZiBTeW1ib2w9PT1cImZ1bmN0aW9uXCImJnR5cGVvZiBTeW1ib2wuaXRlcmF0b3I9PT1cInN5bWJvbFwiP2Z1bmN0aW9uKG9iail7cmV0dXJuIHR5cGVvZiBvYmo7fTpmdW5jdGlvbihvYmope3JldHVybiBvYmomJnR5cGVvZiBTeW1ib2w9PT1cImZ1bmN0aW9uXCImJm9iai5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmb2JqIT09U3ltYm9sLnByb3RvdHlwZT9cInN5bWJvbFwiOnR5cGVvZiBvYmo7fTtpZihmYWxzZSl7dmFyIFJFQUNUX0VMRU1FTlRfVFlQRT10eXBlb2YgU3ltYm9sPT09J2Z1bmN0aW9uJyYmU3ltYm9sLmZvciYmU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpfHwweGVhYzc7dmFyIGlzVmFsaWRFbGVtZW50PWZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50KG9iamVjdCl7cmV0dXJuKHR5cGVvZiBvYmplY3Q9PT0ndW5kZWZpbmVkJz8ndW5kZWZpbmVkJzpfdHlwZW9mKG9iamVjdCkpPT09J29iamVjdCcmJm9iamVjdCE9PW51bGwmJm9iamVjdC4kJHR5cGVvZj09PVJFQUNUX0VMRU1FTlRfVFlQRTt9O3ZhciB0aHJvd09uRGlyZWN0QWNjZXNzPXRydWU7bW9kdWxlLmV4cG9ydHM9cmVxdWlyZSgnLi9mYWN0b3J5V2l0aFR5cGVDaGVja2VycycpKGlzVmFsaWRFbGVtZW50LHRocm93T25EaXJlY3RBY2Nlc3MpO31lbHNle21vZHVsZS5leHBvcnRzPV9fd2VicGFja19yZXF1aXJlX18oNykoKTt9XG5cbi8qKiovIH0pLFxuLyogMSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJib3VuZGxlc3MtdXRpbHMtb21pdC1rZXlzXCIpO1xuXG4vKioqLyB9KSxcbi8qIDIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiYm91bmRsZXNzLXV0aWxzLXV1aWRcIik7XG5cbi8qKiovIH0pLFxuLyogMyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcblxuLyoqKi8gfSksXG4vKiA0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LWRvbVwiKTtcblxuLyoqKi8gfSksXG4vKiA1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuZnVuY3Rpb24gbWFrZUVtcHR5RnVuY3Rpb24oYXJnKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gYXJnO307fXZhciBlbXB0eUZ1bmN0aW9uPWZ1bmN0aW9uIGVtcHR5RnVuY3Rpb24oKXt9O2VtcHR5RnVuY3Rpb24udGhhdFJldHVybnM9bWFrZUVtcHR5RnVuY3Rpb247ZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc0ZhbHNlPW1ha2VFbXB0eUZ1bmN0aW9uKGZhbHNlKTtlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zVHJ1ZT1tYWtlRW1wdHlGdW5jdGlvbih0cnVlKTtlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zTnVsbD1tYWtlRW1wdHlGdW5jdGlvbihudWxsKTtlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zVGhpcz1mdW5jdGlvbigpe3JldHVybiB0aGlzO307ZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc0FyZ3VtZW50PWZ1bmN0aW9uKGFyZyl7cmV0dXJuIGFyZzt9O21vZHVsZS5leHBvcnRzPWVtcHR5RnVuY3Rpb247XG5cbi8qKiovIH0pLFxuLyogNiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbnZhciB2YWxpZGF0ZUZvcm1hdD1mdW5jdGlvbiB2YWxpZGF0ZUZvcm1hdChmb3JtYXQpe307aWYoZmFsc2Upe3ZhbGlkYXRlRm9ybWF0PWZ1bmN0aW9uIHZhbGlkYXRlRm9ybWF0KGZvcm1hdCl7aWYoZm9ybWF0PT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ2ludmFyaWFudCByZXF1aXJlcyBhbiBlcnJvciBtZXNzYWdlIGFyZ3VtZW50Jyk7fX07fWZ1bmN0aW9uIGludmFyaWFudChjb25kaXRpb24sZm9ybWF0LGEsYixjLGQsZSxmKXt2YWxpZGF0ZUZvcm1hdChmb3JtYXQpO2lmKCFjb25kaXRpb24pe3ZhciBlcnJvcjtpZihmb3JtYXQ9PT11bmRlZmluZWQpe2Vycm9yPW5ldyBFcnJvcignTWluaWZpZWQgZXhjZXB0aW9uIG9jY3VycmVkOyB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgJysnZm9yIHRoZSBmdWxsIGVycm9yIG1lc3NhZ2UgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy4nKTt9ZWxzZXt2YXIgYXJncz1bYSxiLGMsZCxlLGZdO3ZhciBhcmdJbmRleD0wO2Vycm9yPW5ldyBFcnJvcihmb3JtYXQucmVwbGFjZSgvJXMvZyxmdW5jdGlvbigpe3JldHVybiBhcmdzW2FyZ0luZGV4KytdO30pKTtlcnJvci5uYW1lPSdJbnZhcmlhbnQgVmlvbGF0aW9uJzt9ZXJyb3IuZnJhbWVzVG9Qb3A9MTt0aHJvdyBlcnJvcjt9fW1vZHVsZS5leHBvcnRzPWludmFyaWFudDtcblxuLyoqKi8gfSksXG4vKiA3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xudmFyIGVtcHR5RnVuY3Rpb249X193ZWJwYWNrX3JlcXVpcmVfXyg1KTt2YXIgaW52YXJpYW50PV9fd2VicGFja19yZXF1aXJlX18oNik7dmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0PV9fd2VicGFja19yZXF1aXJlX18oOCk7bW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBzaGltKHByb3BzLHByb3BOYW1lLGNvbXBvbmVudE5hbWUsbG9jYXRpb24scHJvcEZ1bGxOYW1lLHNlY3JldCl7aWYoc2VjcmV0PT09UmVhY3RQcm9wVHlwZXNTZWNyZXQpe3JldHVybjt9aW52YXJpYW50KGZhbHNlLCdDYWxsaW5nIFByb3BUeXBlcyB2YWxpZGF0b3JzIGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnKydVc2UgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKCkgdG8gY2FsbCB0aGVtLiAnKydSZWFkIG1vcmUgYXQgaHR0cDovL2ZiLm1lL3VzZS1jaGVjay1wcm9wLXR5cGVzJyk7fTtzaGltLmlzUmVxdWlyZWQ9c2hpbTtmdW5jdGlvbiBnZXRTaGltKCl7cmV0dXJuIHNoaW07fTt2YXIgUmVhY3RQcm9wVHlwZXM9e2FycmF5OnNoaW0sYm9vbDpzaGltLGZ1bmM6c2hpbSxudW1iZXI6c2hpbSxvYmplY3Q6c2hpbSxzdHJpbmc6c2hpbSxzeW1ib2w6c2hpbSxhbnk6c2hpbSxhcnJheU9mOmdldFNoaW0sZWxlbWVudDpzaGltLGluc3RhbmNlT2Y6Z2V0U2hpbSxub2RlOnNoaW0sb2JqZWN0T2Y6Z2V0U2hpbSxvbmVPZjpnZXRTaGltLG9uZU9mVHlwZTpnZXRTaGltLHNoYXBlOmdldFNoaW19O1JlYWN0UHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzPWVtcHR5RnVuY3Rpb247UmVhY3RQcm9wVHlwZXMuUHJvcFR5cGVzPVJlYWN0UHJvcFR5cGVzO3JldHVybiBSZWFjdFByb3BUeXBlczt9O1xuXG4vKioqLyB9KSxcbi8qIDggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQ9J1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJzttb2R1bGUuZXhwb3J0cz1SZWFjdFByb3BUeXBlc1NlY3JldDtcblxuLyoqKi8gfSksXG4vKiA5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fd2VicGFja19leHBvcnRzX18sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9wcm9wX3R5cGVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9wcm9wX3R5cGVzX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3JlYWN0X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X2RvbV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfZG9tX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfZG9tX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19ib3VuZGxlc3NfdXRpbHNfb21pdF9rZXlzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19ib3VuZGxlc3NfdXRpbHNfb21pdF9rZXlzX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfYm91bmRsZXNzX3V0aWxzX29taXRfa2V5c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfYm91bmRsZXNzX3V0aWxzX3V1aWRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X2JvdW5kbGVzc191dGlsc191dWlkX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfYm91bmRsZXNzX3V0aWxzX3V1aWRfXyk7XG52YXIgX2V4dGVuZHM9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24odGFyZ2V0KXtmb3IodmFyIGk9MTtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKXt2YXIgc291cmNlPWFyZ3VtZW50c1tpXTtmb3IodmFyIGtleSBpbiBzb3VyY2Upe2lmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2Usa2V5KSl7dGFyZ2V0W2tleV09c291cmNlW2tleV07fX19cmV0dXJuIHRhcmdldDt9O3ZhciBfY3JlYXRlQ2xhc3M9ZnVuY3Rpb24oKXtmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCxwcm9wcyl7Zm9yKHZhciBpPTA7aTxwcm9wcy5sZW5ndGg7aSsrKXt2YXIgZGVzY3JpcHRvcj1wcm9wc1tpXTtkZXNjcmlwdG9yLmVudW1lcmFibGU9ZGVzY3JpcHRvci5lbnVtZXJhYmxlfHxmYWxzZTtkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZT10cnVlO2lmKFwidmFsdWVcImluIGRlc2NyaXB0b3IpZGVzY3JpcHRvci53cml0YWJsZT10cnVlO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsZGVzY3JpcHRvci5rZXksZGVzY3JpcHRvcik7fX1yZXR1cm4gZnVuY3Rpb24oQ29uc3RydWN0b3IscHJvdG9Qcm9wcyxzdGF0aWNQcm9wcyl7aWYocHJvdG9Qcm9wcylkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSxwcm90b1Byb3BzKTtpZihzdGF0aWNQcm9wcylkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLHN0YXRpY1Byb3BzKTtyZXR1cm4gQ29uc3RydWN0b3I7fTt9KCk7ZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaixrZXksdmFsdWUpe2lmKGtleSBpbiBvYmope09iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosa2V5LHt2YWx1ZTp2YWx1ZSxlbnVtZXJhYmxlOnRydWUsY29uZmlndXJhYmxlOnRydWUsd3JpdGFibGU6dHJ1ZX0pO31lbHNle29ialtrZXldPXZhbHVlO31yZXR1cm4gb2JqO31mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsQ29uc3RydWN0b3Ipe2lmKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3Rvcikpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7fX1mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLGNhbGwpe2lmKCFzZWxmKXt0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7fXJldHVybiBjYWxsJiYodHlwZW9mIGNhbGw9PT1cIm9iamVjdFwifHx0eXBlb2YgY2FsbD09PVwiZnVuY3Rpb25cIik/Y2FsbDpzZWxmO31mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3Msc3VwZXJDbGFzcyl7aWYodHlwZW9mIHN1cGVyQ2xhc3MhPT1cImZ1bmN0aW9uXCImJnN1cGVyQ2xhc3MhPT1udWxsKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIit0eXBlb2Ygc3VwZXJDbGFzcyk7fXN1YkNsYXNzLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MmJnN1cGVyQ2xhc3MucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6c3ViQ2xhc3MsZW51bWVyYWJsZTpmYWxzZSx3cml0YWJsZTp0cnVlLGNvbmZpZ3VyYWJsZTp0cnVlfX0pO2lmKHN1cGVyQ2xhc3MpT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcyxzdXBlckNsYXNzKTpzdWJDbGFzcy5fX3Byb3RvX189c3VwZXJDbGFzczt9dmFyIFBvcnRhbD1mdW5jdGlvbihfQ29tcG9uZW50KXtfaW5oZXJpdHMoUG9ydGFsLF9Db21wb25lbnQpO2Z1bmN0aW9uIFBvcnRhbCgpe3ZhciBfcmVmO3ZhciBfdGVtcCxfdGhpcyxfcmV0O19jbGFzc0NhbGxDaGVjayh0aGlzLFBvcnRhbCk7Zm9yKHZhciBfbGVuPWFyZ3VtZW50cy5sZW5ndGgsYXJncz1BcnJheShfbGVuKSxfa2V5PTA7X2tleTxfbGVuO19rZXkrKyl7YXJnc1tfa2V5XT1hcmd1bWVudHNbX2tleV07fXJldHVybiBfcmV0PShfdGVtcD0oX3RoaXM9X3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywoX3JlZj1Qb3J0YWwuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoUG9ydGFsKSkuY2FsbC5hcHBseShfcmVmLFt0aGlzXS5jb25jYXQoYXJncykpKSxfdGhpcyksX3RoaXMuaWQ9X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X2JvdW5kbGVzc191dGlsc191dWlkX19fZGVmYXVsdCgpKCksX3RoaXMuJHBvcnRhbD1udWxsLF90aGlzLiRwYXNzZW5nZXI9bnVsbCxfdGVtcCksX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oX3RoaXMsX3JldCk7fV9jcmVhdGVDbGFzcyhQb3J0YWwsW3trZXk6J2NvbXBvbmVudFdpbGxNb3VudCcsdmFsdWU6ZnVuY3Rpb24gY29tcG9uZW50V2lsbE1vdW50KCl7dGhpcy4kcG9ydGFsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO3RoaXMucHJvcHMuZGVzdGluYXRpb24uYXBwZW5kQ2hpbGQodGhpcy4kcG9ydGFsKTt0aGlzLnJlbmRlclBvcnRhbGxlZENvbnRlbnQoKTt9fSx7a2V5OidyZW5kZXJQb3J0YWxsZWRDb250ZW50Jyx2YWx1ZTpmdW5jdGlvbiByZW5kZXJQb3J0YWxsZWRDb250ZW50KCl7dmFyIGNoaWxkPV9fd2VicGFja19yZXF1aXJlX18uaShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfX1tcImlzVmFsaWRFbGVtZW50XCJdKSh0aGlzLnByb3BzLmNoaWxkcmVuKT90aGlzLnByb3BzLmNoaWxkcmVuOl9fd2VicGFja19yZXF1aXJlX18uaShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfX1tcImNyZWF0ZUVsZW1lbnRcIl0pKCdkaXYnLG51bGwsdGhpcy5wcm9wcy5jaGlsZHJlbik7dGhpcy4kcG9ydGFsLmlkPXRoaXMucHJvcHMucG9ydGFsSWR8fHRoaXMuaWQ7X193ZWJwYWNrX3JlcXVpcmVfXy5pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9kb21fX1tcInVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyXCJdKSh0aGlzLGNoaWxkLHRoaXMuJHBvcnRhbCk7dGhpcy4kcGFzc2VuZ2VyPXRoaXMuJHBvcnRhbC5jaGlsZHJlblswXTt9fSx7a2V5Oidjb21wb25lbnREaWRVcGRhdGUnLHZhbHVlOmZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZSgpe3RoaXMucmVuZGVyUG9ydGFsbGVkQ29udGVudCgpO319LHtrZXk6J2NvbXBvbmVudFdpbGxVbm1vdW50Jyx2YWx1ZTpmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpe19fd2VicGFja19yZXF1aXJlX18uaShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfZG9tX19bXCJ1bm1vdW50Q29tcG9uZW50QXROb2RlXCJdKSh0aGlzLiRwb3J0YWwpO3RoaXMucHJvcHMuZGVzdGluYXRpb24ucmVtb3ZlQ2hpbGQodGhpcy4kcG9ydGFsKTt9fSx7a2V5OidyZW5kZXInLHZhbHVlOmZ1bmN0aW9uIHJlbmRlcigpe3JldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fLmkoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3JlYWN0X19bXCJjcmVhdGVFbGVtZW50XCJdKSgnc3BhbicsX2V4dGVuZHMoe30sX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX2JvdW5kbGVzc191dGlsc19vbWl0X2tleXNfX19kZWZhdWx0KCkodGhpcy5wcm9wcyxQb3J0YWwuaW50ZXJuYWxLZXlzKSxfZGVmaW5lUHJvcGVydHkoe30sUG9ydGFsLlBPUlRBTF9EQVRBX0FUVFJJQlVURSx0aGlzLnByb3BzLnBvcnRhbElkfHx0aGlzLmlkKSkpO319XSk7cmV0dXJuIFBvcnRhbDt9KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9fW1wiQ29tcG9uZW50XCJdKTtQb3J0YWwucHJvcFR5cGVzPXsnKic6X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0LmEuYW55LGNoaWxkcmVuOl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9wcm9wX3R5cGVzX19fZGVmYXVsdC5hLm5vZGUsZGVzdGluYXRpb246X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0LmEuaW5zdGFuY2VPZihIVE1MRWxlbWVudCkscG9ydGFsSWQ6X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0LmEuc3RyaW5nfTtQb3J0YWwuZGVmYXVsdFByb3BzPXtjaGlsZHJlbjpudWxsLGRlc3RpbmF0aW9uOmRvY3VtZW50LmJvZHkscG9ydGFsSWQ6bnVsbH07UG9ydGFsLmludGVybmFsS2V5cz1PYmplY3Qua2V5cyhQb3J0YWwuZGVmYXVsdFByb3BzKTtQb3J0YWwuUE9SVEFMX0RBVEFfQVRUUklCVVRFPSdkYXRhLXBvcnRhbC1pZCc7LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChQb3J0YWwpO1xuXG4vKioqLyB9KVxuLyoqKioqKi8gXSk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIGluZGV4LmpzIiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gaWRlbnRpdHkgZnVuY3Rpb24gZm9yIGNhbGxpbmcgaGFybW9ueSBpbXBvcnRzIHdpdGggdGhlIGNvcnJlY3QgY29udGV4dFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5pID0gZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9O1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbiBcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuIFx0XHRcdFx0Z2V0OiBnZXR0ZXJcbiBcdFx0XHR9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSA5KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL2Jvb3RzdHJhcCBkMzlmZTQ1NDMxNzlmMjYwY2EzMCIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICovXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIFN5bWJvbC5mb3IgJiZcbiAgICBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50JykpIHx8XG4gICAgMHhlYWM3O1xuXG4gIHZhciBpc1ZhbGlkRWxlbWVudCA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJlxuICAgICAgb2JqZWN0ICE9PSBudWxsICYmXG4gICAgICBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcbiAgfTtcblxuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBkZXZlbG9wbWVudCBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICB2YXIgdGhyb3dPbkRpcmVjdEFjY2VzcyA9IHRydWU7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFR5cGVDaGVja2VycycpKGlzVmFsaWRFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKTtcbn0gZWxzZSB7XG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IHByb2R1Y3Rpb24gYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcycpKCk7XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3Byb3AtdHlwZXMvaW5kZXguanMiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJib3VuZGxlc3MtdXRpbHMtb21pdC1rZXlzXCIpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIHtcImNvbW1vbmpzMlwiOlwiYm91bmRsZXNzLXV0aWxzLW9taXQta2V5c1wifVxuLy8gbW9kdWxlIGlkID0gMVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJib3VuZGxlc3MtdXRpbHMtdXVpZFwiKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBleHRlcm5hbCB7XCJjb21tb25qczJcIjpcImJvdW5kbGVzcy11dGlscy11dWlkXCJ9XG4vLyBtb2R1bGUgaWQgPSAyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0XCIpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIHtcImNvbW1vbmpzMlwiOlwicmVhY3RcIn1cbi8vIG1vZHVsZSBpZCA9IDNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3QtZG9tXCIpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIHtcImNvbW1vbmpzMlwiOlwicmVhY3QtZG9tXCJ9XG4vLyBtb2R1bGUgaWQgPSA0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIlwidXNlIHN0cmljdFwiO1xuXG4vKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogXG4gKi9cblxuZnVuY3Rpb24gbWFrZUVtcHR5RnVuY3Rpb24oYXJnKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGFyZztcbiAgfTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGFjY2VwdHMgYW5kIGRpc2NhcmRzIGlucHV0czsgaXQgaGFzIG5vIHNpZGUgZWZmZWN0cy4gVGhpcyBpc1xuICogcHJpbWFyaWx5IHVzZWZ1bCBpZGlvbWF0aWNhbGx5IGZvciBvdmVycmlkYWJsZSBmdW5jdGlvbiBlbmRwb2ludHMgd2hpY2hcbiAqIGFsd2F5cyBuZWVkIHRvIGJlIGNhbGxhYmxlLCBzaW5jZSBKUyBsYWNrcyBhIG51bGwtY2FsbCBpZGlvbSBhbGEgQ29jb2EuXG4gKi9cbnZhciBlbXB0eUZ1bmN0aW9uID0gZnVuY3Rpb24gZW1wdHlGdW5jdGlvbigpIHt9O1xuXG5lbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zID0gbWFrZUVtcHR5RnVuY3Rpb247XG5lbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zRmFsc2UgPSBtYWtlRW1wdHlGdW5jdGlvbihmYWxzZSk7XG5lbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zVHJ1ZSA9IG1ha2VFbXB0eUZ1bmN0aW9uKHRydWUpO1xuZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc051bGwgPSBtYWtlRW1wdHlGdW5jdGlvbihudWxsKTtcbmVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNUaGlzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcztcbn07XG5lbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zQXJndW1lbnQgPSBmdW5jdGlvbiAoYXJnKSB7XG4gIHJldHVybiBhcmc7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVtcHR5RnVuY3Rpb247XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9mYmpzL2xpYi9lbXB0eUZ1bmN0aW9uLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogVXNlIGludmFyaWFudCgpIHRvIGFzc2VydCBzdGF0ZSB3aGljaCB5b3VyIHByb2dyYW0gYXNzdW1lcyB0byBiZSB0cnVlLlxuICpcbiAqIFByb3ZpZGUgc3ByaW50Zi1zdHlsZSBmb3JtYXQgKG9ubHkgJXMgaXMgc3VwcG9ydGVkKSBhbmQgYXJndW1lbnRzXG4gKiB0byBwcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgYnJva2UgYW5kIHdoYXQgeW91IHdlcmVcbiAqIGV4cGVjdGluZy5cbiAqXG4gKiBUaGUgaW52YXJpYW50IG1lc3NhZ2Ugd2lsbCBiZSBzdHJpcHBlZCBpbiBwcm9kdWN0aW9uLCBidXQgdGhlIGludmFyaWFudFxuICogd2lsbCByZW1haW4gdG8gZW5zdXJlIGxvZ2ljIGRvZXMgbm90IGRpZmZlciBpbiBwcm9kdWN0aW9uLlxuICovXG5cbnZhciB2YWxpZGF0ZUZvcm1hdCA9IGZ1bmN0aW9uIHZhbGlkYXRlRm9ybWF0KGZvcm1hdCkge307XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhbGlkYXRlRm9ybWF0ID0gZnVuY3Rpb24gdmFsaWRhdGVGb3JtYXQoZm9ybWF0KSB7XG4gICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFyaWFudCByZXF1aXJlcyBhbiBlcnJvciBtZXNzYWdlIGFyZ3VtZW50Jyk7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBpbnZhcmlhbnQoY29uZGl0aW9uLCBmb3JtYXQsIGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgdmFsaWRhdGVGb3JtYXQoZm9ybWF0KTtcblxuICBpZiAoIWNvbmRpdGlvbikge1xuICAgIHZhciBlcnJvcjtcbiAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGVycm9yID0gbmV3IEVycm9yKCdNaW5pZmllZCBleGNlcHRpb24gb2NjdXJyZWQ7IHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCAnICsgJ2ZvciB0aGUgZnVsbCBlcnJvciBtZXNzYWdlIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBhcmdzID0gW2EsIGIsIGMsIGQsIGUsIGZdO1xuICAgICAgdmFyIGFyZ0luZGV4ID0gMDtcbiAgICAgIGVycm9yID0gbmV3IEVycm9yKGZvcm1hdC5yZXBsYWNlKC8lcy9nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBhcmdzW2FyZ0luZGV4KytdO1xuICAgICAgfSkpO1xuICAgICAgZXJyb3IubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICB9XG5cbiAgICBlcnJvci5mcmFtZXNUb1BvcCA9IDE7IC8vIHdlIGRvbid0IGNhcmUgYWJvdXQgaW52YXJpYW50J3Mgb3duIGZyYW1lXG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbnZhcmlhbnQ7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9mYmpzL2xpYi9pbnZhcmlhbnQuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBlbXB0eUZ1bmN0aW9uID0gcmVxdWlyZSgnZmJqcy9saWIvZW1wdHlGdW5jdGlvbicpO1xudmFyIGludmFyaWFudCA9IHJlcXVpcmUoJ2ZianMvbGliL2ludmFyaWFudCcpO1xudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gcmVxdWlyZSgnLi9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gc2hpbShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xuICAgIGlmIChzZWNyZXQgPT09IFJlYWN0UHJvcFR5cGVzU2VjcmV0KSB7XG4gICAgICAvLyBJdCBpcyBzdGlsbCBzYWZlIHdoZW4gY2FsbGVkIGZyb20gUmVhY3QuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGludmFyaWFudChcbiAgICAgIGZhbHNlLFxuICAgICAgJ0NhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuICcgK1xuICAgICAgJ1VzZSBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKSB0byBjYWxsIHRoZW0uICcgK1xuICAgICAgJ1JlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMnXG4gICAgKTtcbiAgfTtcbiAgc2hpbS5pc1JlcXVpcmVkID0gc2hpbTtcbiAgZnVuY3Rpb24gZ2V0U2hpbSgpIHtcbiAgICByZXR1cm4gc2hpbTtcbiAgfTtcbiAgLy8gSW1wb3J0YW50IVxuICAvLyBLZWVwIHRoaXMgbGlzdCBpbiBzeW5jIHdpdGggcHJvZHVjdGlvbiB2ZXJzaW9uIGluIGAuL2ZhY3RvcnlXaXRoVHlwZUNoZWNrZXJzLmpzYC5cbiAgdmFyIFJlYWN0UHJvcFR5cGVzID0ge1xuICAgIGFycmF5OiBzaGltLFxuICAgIGJvb2w6IHNoaW0sXG4gICAgZnVuYzogc2hpbSxcbiAgICBudW1iZXI6IHNoaW0sXG4gICAgb2JqZWN0OiBzaGltLFxuICAgIHN0cmluZzogc2hpbSxcbiAgICBzeW1ib2w6IHNoaW0sXG5cbiAgICBhbnk6IHNoaW0sXG4gICAgYXJyYXlPZjogZ2V0U2hpbSxcbiAgICBlbGVtZW50OiBzaGltLFxuICAgIGluc3RhbmNlT2Y6IGdldFNoaW0sXG4gICAgbm9kZTogc2hpbSxcbiAgICBvYmplY3RPZjogZ2V0U2hpbSxcbiAgICBvbmVPZjogZ2V0U2hpbSxcbiAgICBvbmVPZlR5cGU6IGdldFNoaW0sXG4gICAgc2hhcGU6IGdldFNoaW1cbiAgfTtcblxuICBSZWFjdFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcyA9IGVtcHR5RnVuY3Rpb247XG4gIFJlYWN0UHJvcFR5cGVzLlByb3BUeXBlcyA9IFJlYWN0UHJvcFR5cGVzO1xuXG4gIHJldHVybiBSZWFjdFByb3BUeXBlcztcbn07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3Byb3AtdHlwZXMvZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSAnU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0UHJvcFR5cGVzU2VjcmV0O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9wcm9wLXR5cGVzL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldC5qcyIsImltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50LCBpc1ZhbGlkRWxlbWVudCwgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdW5tb3VudENvbXBvbmVudEF0Tm9kZSwgdW5zdGFibGVfcmVuZGVyU3VidHJlZUludG9Db250YWluZXIgYXMgcmVuZGVyU3VidHJlZSB9IGZyb20gJ3JlYWN0LWRvbSc7XG5cbmltcG9ydCBvbWl0IGZyb20gJ2JvdW5kbGVzcy11dGlscy1vbWl0LWtleXMnO1xuaW1wb3J0IHV1aWQgZnJvbSAnYm91bmRsZXNzLXV0aWxzLXV1aWQnO1xuXG4vKipcbmBQb3J0YWxgIGlzIHVzZWQgaW4gb3RoZXIgY29tcG9uZW50cyBzdWNoIGFzIGBQb3BvdmVyYCB0byByZW5kZXIgY29udGVudCB0byBwbGFjZXMgbGlrZSB0aGUgSFRNTCBgPGJvZHk+YCB0YWcsIGF2b2lkaW5nIHN0eWxlIGxlYWthZ2UgYW5kIHBhcmVudCBsYXlvdXQgY29udGV4dHMuIE9ubHkgYWNjZXB0cyBhIHNpbmdsZSB0b3AtbGV2ZWwgY2hpbGQ7IG5ha2VkIHRleHQsIGV0YyB3aWxsIGJlIHdyYXBwZWQgaW4gYSBgPGRpdj5gLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQb3J0YWwgZXh0ZW5kcyBDb21wb25lbnQge1xuICAgIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBhbnkgW1JlYWN0LXN1cHBvcnRlZCBhdHRyaWJ1dGVdKGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvdGFncy1hbmQtYXR0cmlidXRlcy5odG1sI2h0bWwtYXR0cmlidXRlcylcbiAgICAgICAgICovXG4gICAgICAgICcqJzogUHJvcFR5cGVzLmFueSxcblxuICAgICAgICAvLyBzaW5nbGUgY2hpbGQgb25seSAtIGFycmF5cyBub3QgYWxsb3dlZFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBhbnkgbm9ybWFsIFJlYWN0IGNoaWxkLCBidXQgbXVzdCBiZSBzaW5ndWxhcjsgbXVsdGlwbGUgc2libGluZyBjaGlsZHJlbiBtdXN0IGhhdmUgYSBjb21tb24gd3JhcHBlciwgc3VjaCBhcyBhIFwibGF5b3V0XCIgYDxkaXY+YFxuXG4gICAgICAgICAqIOKchSBPSzpcblxuICAgICAgICAgKiBgYGBqc3hcbiAgICAgICAgICogPFBvcnRhbD5cbiAgICAgICAgICogICBmb29cbiAgICAgICAgICogPC9Qb3J0YWw+XG5cbiAgICAgICAgICogPFBvcnRhbD5cbiAgICAgICAgICogICA8ZGl2PmZvbzwvZGl2PlxuICAgICAgICAgKiA8L1BvcnRhbD5cblxuICAgICAgICAgKiA8UG9ydGFsPlxuICAgICAgICAgKiAgIDxkaXY+XG4gICAgICAgICAqICAgICAgIDxkaXY+Zm9vPC9kaXY+XG4gICAgICAgICAqICAgICAgIDxkaXY+YmFyPC9kaXY+XG4gICAgICAgICAqICAgPC9kaXY+XG4gICAgICAgICAqIDwvUG9ydGFsPlxuICAgICAgICAgKiBgYGBcblxuICAgICAgICAgKiDim5TvuI8gTm90IE9LOlxuXG4gICAgICAgICAqIGBgYGpzeFxuICAgICAgICAgKiA8UG9ydGFsPlxuICAgICAgICAgKiAgIDxkaXY+Zm9vPC9kaXY+XG4gICAgICAgICAqICAgPGRpdj5iYXI8L2Rpdj5cbiAgICAgICAgICogPC9Qb3J0YWw+XG4gICAgICAgICAqIGBgYFxuICAgICAgICAgKi9cbiAgICAgICAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiB0aGUgbG9jYXRpb24gdG8gYXBwZW5kIHRoZSBnZW5lcmF0ZWQgcG9ydGFsIGFuZCBjaGlsZCBlbGVtZW50c1xuICAgICAgICAgKi9cbiAgICAgICAgZGVzdGluYXRpb246IFByb3BUeXBlcy5pbnN0YW5jZU9mKEhUTUxFbGVtZW50KSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogdGhlIElEIHVzZWQgdG8gbGluayB0aGUgcG9ydGFsIG9yaWdpbiB0byB0aGUgZGVzdGluYXRpb247IGFkZGVkIHRvIGdlbmVyYXRlZCBgPGRpdj5gIGFwcGVuZGVkIHRvIHRoZSBkZXN0aW5hdGlvbiBIVE1MIG5vZGVcbiAgICAgICAgICovXG4gICAgICAgIHBvcnRhbElkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIH1cblxuICAgIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgICAgIGNoaWxkcmVuOiBudWxsLFxuICAgICAgICBkZXN0aW5hdGlvbjogZG9jdW1lbnQuYm9keSxcbiAgICAgICAgcG9ydGFsSWQ6IG51bGwsXG4gICAgfVxuXG4gICAgc3RhdGljIGludGVybmFsS2V5cyA9IE9iamVjdC5rZXlzKFBvcnRhbC5kZWZhdWx0UHJvcHMpXG5cbiAgICBzdGF0aWMgUE9SVEFMX0RBVEFfQVRUUklCVVRFID0gJ2RhdGEtcG9ydGFsLWlkJ1xuXG4gICAgaWQgPSB1dWlkKClcblxuICAgIC8vIHRoZSA8ZGl2PiB0aGF0IHRoZSBjaGlsZHJlbiBhcmUgcmVuZGVyZWQgaW50b1xuICAgICRwb3J0YWwgPSBudWxsXG5cbiAgICAvLyB0aGUgdG9wLWxldmVsIGNoaWxkIHJlbmRlcmVkIGludG8gdGhlICRwb3J0YWxcbiAgICAkcGFzc2VuZ2VyID0gbnVsbDtcblxuICAgIGNvbXBvbmVudFdpbGxNb3VudCgpIHtcbiAgICAgICAgdGhpcy4kcG9ydGFsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHRoaXMucHJvcHMuZGVzdGluYXRpb24uYXBwZW5kQ2hpbGQodGhpcy4kcG9ydGFsKTtcblxuICAgICAgICB0aGlzLnJlbmRlclBvcnRhbGxlZENvbnRlbnQoKTtcbiAgICB9XG5cbiAgICByZW5kZXJQb3J0YWxsZWRDb250ZW50KCkge1xuICAgICAgICBjb25zdCBjaGlsZCA9IGlzVmFsaWRFbGVtZW50KHRoaXMucHJvcHMuY2hpbGRyZW4pID8gdGhpcy5wcm9wcy5jaGlsZHJlbiA6ICg8ZGl2Pnt0aGlzLnByb3BzLmNoaWxkcmVufTwvZGl2Pik7XG5cbiAgICAgICAgLy8gdXBkYXRlIHRoZSBwb3J0YWwgSUQgbGluayBpZiBuZWVkZWRcbiAgICAgICAgdGhpcy4kcG9ydGFsLmlkID0gdGhpcy5wcm9wcy5wb3J0YWxJZCB8fCB0aGlzLmlkO1xuXG4gICAgICAgIHJlbmRlclN1YnRyZWUodGhpcywgY2hpbGQsIHRoaXMuJHBvcnRhbCk7XG4gICAgICAgIHRoaXMuJHBhc3NlbmdlciA9IHRoaXMuJHBvcnRhbC5jaGlsZHJlblswXTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRVcGRhdGUoKSB7IHRoaXMucmVuZGVyUG9ydGFsbGVkQ29udGVudCgpOyB9XG5cbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgICAgdW5tb3VudENvbXBvbmVudEF0Tm9kZSh0aGlzLiRwb3J0YWwpO1xuICAgICAgICB0aGlzLnByb3BzLmRlc3RpbmF0aW9uLnJlbW92ZUNoaWxkKHRoaXMuJHBvcnRhbCk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICB7Li4ub21pdCh0aGlzLnByb3BzLCBQb3J0YWwuaW50ZXJuYWxLZXlzKX1cbiAgICAgICAgICAgICAgICB7Li4ueyBbUG9ydGFsLlBPUlRBTF9EQVRBX0FUVFJJQlVURV06IHRoaXMucHJvcHMucG9ydGFsSWQgfHwgdGhpcy5pZCB9fSAvPlxuICAgICAgICApO1xuICAgIH1cbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3BhY2thZ2VzL2JvdW5kbGVzcy1wb3J0YWwvaW5kZXguanMiXSwic291cmNlUm9vdCI6IiJ9

@@ -1,3 +0,4 @@

import {createElement, isValidElement, Component, PropTypes} from 'react';
import {unmountComponentAtNode, unstable_renderSubtreeIntoContainer as renderSubtree} from 'react-dom';
import PropTypes from 'prop-types';
import { createElement, isValidElement, Component } from 'react';
import { unmountComponentAtNode, unstable_renderSubtreeIntoContainer as renderSubtree } from 'react-dom';

@@ -109,5 +110,5 @@ import omit from 'boundless-utils-omit-keys';

{...omit(this.props, Portal.internalKeys)}
{...{[Portal.PORTAL_DATA_ATTRIBUTE]: this.props.portalId || this.id}} />
{...{ [Portal.PORTAL_DATA_ATTRIBUTE]: this.props.portalId || this.id }} />
);
}
}
/* eslint no-unused-expressions:0 */
import {createElement} from 'react';
import { createElement } from 'react';
import ReactDOM from 'react-dom';
import Portal from './index';
import {$, conformanceChecker} from '../boundless-utils-test-helpers/index';
import { $, conformanceChecker } from '../boundless-utils-test-helpers/index';

@@ -33,3 +33,3 @@ describe('Portal component', () => {

it('conforms to the Boundless prop interface standards', () => conformanceChecker(render, Portal, {children: 'foo'}));
it('conforms to the Boundless prop interface standards', () => conformanceChecker(render, Portal, { children: 'foo' }));

@@ -36,0 +36,0 @@ it('accepts an arbitrary portal ID', () => {

{
"name": "boundless-portal",
"version": "1.0.4",
"version": "1.1.0",
"description": "A higher-order component for the rendering of components outside the normal React tree.",

@@ -28,4 +28,4 @@ "main": "build/index.js",

"dependencies": {
"boundless-utils-omit-keys": "^1.0.4",
"boundless-utils-uuid": "^1.0.4"
"boundless-utils-omit-keys": "^1.1.0",
"boundless-utils-uuid": "^1.1.0"
},

@@ -32,0 +32,0 @@ "peerDependencies": {

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