All files / boundless/packages/boundless-fitted-text/build index.js

49.32% Statements 36/73
39.29% Branches 22/56
50% Functions 16/32
100% Lines 1/1
1 25x  
module.exports=function(e){function t(o){Iif(n[o])return n[o].exports;var r=n[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,t),r.l=!0,r.exports}var n={};return t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,o){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:o})},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("classnames")},function(e,t){e.exports=require("react")},function(e,t){e.exports=require("react-dom")},function(e,t,n){"use strict";function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(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 i(e,t){Iif("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)}function u(e){return parseInt(e,10)}function a(e){var t=n.i(d.findDOMNode)(e),o=window.getComputedStyle(t.parentNode),r=u(window.getComputedStyle(t).fontSize);null===e.baseFontSize&&(e.baseFontSize=r);var i=u(o.height),a=u(o.width);"border-box"!==o.boxSizing&&"padding-box"!==o.boxSizing||(i-=u(o.paddingTop)+u(o.paddingBottom),a-=u(o.paddingLeft)+u(o.paddingRight));var s=Math.floor(r/t.offsetHeight*i),p=Math.floor(r/t.offsetWidth*a);e.props.upscale?t.style.fontSize=(Math.max(s,p)||1)+"px":t.style.fontSize=(Math.min(e.baseFontSize,s,p)||1)+"px"}function s(){x.forEach(function(e){return a(e)})}function p(e){0===x.length&&window.addEventListener("resize",s,!0),x.push(e)}function c(e){x.splice(x.indexOf(e),1),0===x.length&&window.removeEventListener("resize",s,!0)}Object.defineProperty(t,"__esModule",{value:!0});var f=n(2),l=n.n(f),d=n(3),y=(n.n(d),n(1)),h=n.n(y),b=n(0),m=n.n(b),g=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},v=function(){function e(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}return function(t,n,o){return n&&e(t.prototype,n),o&&e(t,o),t}}(),x=[],w=function(e){function t(){var e,n,i,u;o(this,t);for(var a=arguments.length,s=Array(a),p=0;p<a;p++)s[p]=arguments[p];return n=i=r(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(s))),i.baseFontSize=null,u=n,r(i,u)}return i(t,e),v(t,[{key:"componentDidMount",value:function(){a(this),p(this)}},{key:"componentDidUpdate",value:function(){a(this)}},{key:"componentWillUnmount",value:function(){c(this)}},{key:"render",value:function(){return l.a.createElement(this.props.component,g({},m()(this.props,t.internalKeys),{className:h()("b-text",this.props.className)}),this.props.children)}}]),t}(l.a.PureComponent);w.propTypes={"*":f.PropTypes.any,component:f.PropTypes.string,upscale:f.PropTypes.bool},w.defaultProps={component:"span",upscale:!1},w.internalKeys=Object.keys(w.defaultProps),t.default=w}]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vaW5kZXguanMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svYm9vdHN0cmFwIGQyYmNlMmU2MzJiYjgzMmRmZTcxIiwid2VicGFjazovLy9leHRlcm5hbCB7XCJjb21tb25qczJcIjpcImJvdW5kbGVzcy11dGlscy1vbWl0LWtleXNcIn0iLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIHtcImNvbW1vbmpzMlwiOlwiY2xhc3NuYW1lc1wifSIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwge1wiY29tbW9uanMyXCI6XCJyZWFjdFwifSIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwge1wiY29tbW9uanMyXCI6XCJyZWFjdC1kb21cIn0iLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvYm91bmRsZXNzLWZpdHRlZC10ZXh0L2luZGV4LmpzIl0sIm5hbWVzIjpbIm1vZHVsZSIsImV4cG9ydHMiLCJtb2R1bGVzIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiaW5zdGFsbGVkTW9kdWxlcyIsImkiLCJsIiwiY2FsbCIsIm0iLCJjIiwidmFsdWUiLCJkIiwibmFtZSIsImdldHRlciIsIm8iLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJnZXQiLCJuIiwiX19lc01vZHVsZSIsIm9iamVjdCIsInByb3BlcnR5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJwIiwicyIsInJlcXVpcmUiLCJfX3dlYnBhY2tfZXhwb3J0c19fIiwiX2NsYXNzQ2FsbENoZWNrIiwiaW5zdGFuY2UiLCJDb25zdHJ1Y3RvciIsIlR5cGVFcnJvciIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwic2VsZiIsIlJlZmVyZW5jZUVycm9yIiwiX2luaGVyaXRzIiwic3ViQ2xhc3MiLCJzdXBlckNsYXNzIiwiY3JlYXRlIiwiY29uc3RydWN0b3IiLCJ3cml0YWJsZSIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwidG9JIiwic3RyaW5nTnVtYmVyIiwicGFyc2VJbnQiLCJyZXNjYWxlIiwibm9kZSIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9kb21fXyIsImNvbnRhaW5lckJveCIsIndpbmRvdyIsImdldENvbXB1dGVkU3R5bGUiLCJwYXJlbnROb2RlIiwiZm9udFNpemUiLCJiYXNlRm9udFNpemUiLCJjb250YWluZXJIZWlnaHQiLCJoZWlnaHQiLCJjb250YWluZXJXaWR0aCIsIndpZHRoIiwiYm94U2l6aW5nIiwicGFkZGluZ1RvcCIsInBhZGRpbmdCb3R0b20iLCJwYWRkaW5nTGVmdCIsInBhZGRpbmdSaWdodCIsIm9wdGltaXplRm9ySGVpZ2h0IiwiTWF0aCIsImZsb29yIiwib2Zmc2V0SGVpZ2h0Iiwib3B0aW1pemVGb3JXaWR0aCIsIm9mZnNldFdpZHRoIiwicHJvcHMiLCJ1cHNjYWxlIiwic3R5bGUiLCJtYXgiLCJtaW4iLCJoYW5kbGVXaW5kb3dSZXNpemUiLCJpbnN0YW5jZXMiLCJmb3JFYWNoIiwicmVnaXN0ZXJJbnN0YW5jZSIsImxlbmd0aCIsImFkZEV2ZW50TGlzdGVuZXIiLCJwdXNoIiwidW5yZWdpc3Rlckluc3RhbmNlIiwic3BsaWNlIiwiaW5kZXhPZiIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fX2RlZmF1bHQiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfY2xhc3NuYW1lc19fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX2NsYXNzbmFtZXNfX19kZWZhdWx0IiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX2JvdW5kbGVzc191dGlsc19vbWl0X2tleXNfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19ib3VuZGxlc3NfdXRpbHNfb21pdF9rZXlzX19fZGVmYXVsdCIsIl9leHRlbmRzIiwiYXNzaWduIiwidGFyZ2V0IiwiYXJndW1lbnRzIiwic291cmNlIiwia2V5IiwiX2NyZWF0ZUNsYXNzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlc2NyaXB0b3IiLCJwcm90b1Byb3BzIiwic3RhdGljUHJvcHMiLCJGaXR0ZWRUZXh0IiwiX1JlYWN0JFB1cmVDb21wb25lbnQiLCJfcmVmIiwiX3RlbXAiLCJfdGhpcyIsIl9yZXQiLCJ0aGlzIiwiX2xlbiIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJnZXRQcm90b3R5cGVPZiIsImFwcGx5IiwiY29uY2F0IiwiYSIsImNyZWF0ZUVsZW1lbnQiLCJjb21wb25lbnQiLCJpbnRlcm5hbEtleXMiLCJjbGFzc05hbWUiLCJjaGlsZHJlbiIsIlB1cmVDb21wb25lbnQiLCJwcm9wVHlwZXMiLCIqIiwiYW55Iiwic3RyaW5nIiwiYm9vbCIsImRlZmF1bHRQcm9wcyIsImtleXMiXSwibWFwcGluZ3MiOiJBQUFBQSxPQUFPQyxRQUNFLFNBQVVDLEdDR25CLFFBQUFDLEdBQUFDLEdBR0EsR0FBQUMsRUFBQUQsR0FDQSxNQUFBQyxHQUFBRCxHQUFBSCxPQUdBLElBQUFELEdBQUFLLEVBQUFELElBQ0FFLEVBQUFGLEVBQ0FHLEdBQUEsRUFDQU4sV0FVQSxPQU5BQyxHQUFBRSxHQUFBSSxLQUFBUixFQUFBQyxRQUFBRCxJQUFBQyxRQUFBRSxHQUdBSCxFQUFBTyxHQUFBLEVBR0FQLEVBQUFDLFFBdkJBLEdBQUFJLEtBK0RBLE9BbkNBRixHQUFBTSxFQUFBUCxFQUdBQyxFQUFBTyxFQUFBTCxFQUdBRixFQUFBRyxFQUFBLFNBQUFLLEdBQTJDLE1BQUFBLElBRzNDUixFQUFBUyxFQUFBLFNBQUFYLEVBQUFZLEVBQUFDLEdBQ0FYLEVBQUFZLEVBQUFkLEVBQUFZLElBQ0FHLE9BQUFDLGVBQUFoQixFQUFBWSxHQUNBSyxjQUFBLEVBQ0FDLFlBQUEsRUFDQUMsSUFBQU4sS0FNQVgsRUFBQWtCLEVBQUEsU0FBQXJCLEdBQ0EsR0FBQWMsR0FBQWQsS0FBQXNCLFdBQ0EsV0FBMkIsTUFBQXRCLEdBQUEsU0FDM0IsV0FB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bEIsVUFBVWtCLEVBQU8sT0FBYVAsR0FBT0MsRUFBTTNFLEVBQTJCNkUsTUFBTUosRUFBS0YsRUFBVzdELFdBQVc3QixPQUFPcUcsZUFBZVgsSUFBYWxHLEtBQUs4RyxNQUFNVixHQUFNSSxNQUFNTyxPQUFPTCxLQUFlSixFTWQxNEdyRCxhQUFlLEtOYzR0R3NELEVBQXVMRixFQUFPMUUsRUFBMkIyRSxFQUFNQyxHQUEwcEIsTUFBcG1DekUsR0FBVW9FLEVBQVdDLEdBQTRiTixFQUFhSyxJQUFhTixJQUFJLG9CQUFvQnpGLE1BQU0sV01YcmdIc0MsRUFBUStELE1BSVIvQixFQUFpQitCLFNOTzBqSFosSUFBSSxxQkFBcUJ6RixNQUFNLFdNSDFtSHNDLEVBQVErRCxTTkdrcEhaLElBQUksdUJBQXVCekYsTUFBTSxXTUMzckgwRSxFQUFtQjJCLFNORHF1SFosSUFBSSxTQUFTekYsTUFBTSxXTUszd0gsTUFDSStFLEdBQUE4QixFQUFBQyxjQUFBVCxLQUFNdkMsTUFBTWlELFVBQVozQixLQUNRRCxJQUFLa0IsS0FBS3ZDLE1BQU9pQyxFQUFXaUIsZUFDaENDLFVBQVdoQyxJQUFHLFNBQVVvQixLQUFLdkMsTUFBTW1ELGFBQ2xDWixLQUFLdkMsTUFBTW9ELGNOVG1sSW5CLEdNekN2a0loQixFQUFBOEIsRUFBTU0sY0FBekJwQixHQUNWcUIsV0FJSEMsSUFBS3ZDLEVBQUEsVUFBVXdDLElBS2ZQLFVBQVdqQyxFQUFBLFVBQVV5QyxPQU1yQnhELFFBQVNlLEVBQUEsVUFBVTBDLE1BaEJOekIsRUFtQlYwQixjQUNIVixVQUFXLE9BQ1hoRCxTQUFTLEdBckJJZ0MsRUF3QlZpQixhQUFlM0csT0FBT3FILEtBQUszQixFQUFXMEIsY05pQjIrSXRHLEVBQTZCLFFNekNwaUo0RSIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID1cbi8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSlcbi8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdGk6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0bDogZmFsc2UsXG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gaWRlbnRpdHkgZnVuY3Rpb24gZm9yIGNhbGxpbmcgaGFybW9ueSBpbXBvcnRzIHdpdGggdGhlIGNvcnJlY3QgY29udGV4dFxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmkgPSBmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4vKioqKioqLyBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbi8qKioqKiovIFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbi8qKioqKiovIFx0XHRcdFx0Z2V0OiBnZXR0ZXJcbi8qKioqKiovIFx0XHRcdH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuLyoqKioqKi8gXHRcdHJldHVybiBnZXR0ZXI7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSA0KTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKFtcbi8qIDAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiYm91bmRsZXNzLXV0aWxzLW9taXQta2V5c1wiKTtcblxuLyoqKi8gfSksXG4vKiAxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNsYXNzbmFtZXNcIik7XG5cbi8qKiovIH0pLFxuLyogMiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcblxuLyoqKi8gfSksXG4vKiAzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LWRvbVwiKTtcblxuLyoqKi8gfSksXG4vKiA0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fd2VicGFja19leHBvcnRzX18sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfZG9tX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9kb21fX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9kb21fXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX2NsYXNzbmFtZXNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX2NsYXNzbmFtZXNfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9jbGFzc25hbWVzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19ib3VuZGxlc3NfdXRpbHNfb21pdF9rZXlzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19ib3VuZGxlc3NfdXRpbHNfb21pdF9rZXlzX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfYm91bmRsZXNzX3V0aWxzX29taXRfa2V5c19fKTtcbnZhciBfZXh0ZW5kcz1PYmplY3QuYXNzaWdufHxmdW5jdGlvbih0YXJnZXQpe2Zvcih2YXIgaT0xO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspe3ZhciBzb3VyY2U9YXJndW1lbnRzW2ldO2Zvcih2YXIga2V5IGluIHNvdXJjZSl7aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSxrZXkpKXt0YXJnZXRba2V5XT1zb3VyY2Vba2V5XTt9fX1yZXR1cm4gdGFyZ2V0O307dmFyIF9jcmVhdGVDbGFzcz1mdW5jdGlvbigpe2Z1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LHByb3BzKXtmb3IodmFyIGk9MDtpPHByb3BzLmxlbmd0aDtpKyspe3ZhciBkZXNjcmlwdG9yPXByb3BzW2ldO2Rlc2NyaXB0b3IuZW51bWVyYWJsZT1kZXNjcmlwdG9yLmVudW1lcmFibGV8fGZhbHNlO2Rlc2NyaXB0b3IuY29uZmlndXJhYmxlPXRydWU7aWYoXCJ2YWx1ZVwiaW4gZGVzY3JpcHRvcilkZXNjcmlwdG9yLndyaXRhYmxlPXRydWU7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCxkZXNjcmlwdG9yLmtleSxkZXNjcmlwdG9yKTt9fXJldHVybiBmdW5jdGlvbihDb25zdHJ1Y3Rvcixwcm90b1Byb3BzLHN0YXRpY1Byb3BzKXtpZihwcm90b1Byb3BzKWRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLHByb3RvUHJvcHMpO2lmKHN0YXRpY1Byb3BzKWRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3Isc3RhdGljUHJvcHMpO3JldHVybiBDb25zdHJ1Y3Rvcjt9O30oKTtmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsQ29uc3RydWN0b3Ipe2lmKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3Rvcikpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7fX1mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLGNhbGwpe2lmKCFzZWxmKXt0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7fXJldHVybiBjYWxsJiYodHlwZW9mIGNhbGw9PT1cIm9iamVjdFwifHx0eXBlb2YgY2FsbD09PVwiZnVuY3Rpb25cIik/Y2FsbDpzZWxmO31mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3Msc3VwZXJDbGFzcyl7aWYodHlwZW9mIHN1cGVyQ2xhc3MhPT1cImZ1bmN0aW9uXCImJnN1cGVyQ2xhc3MhPT1udWxsKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIit0eXBlb2Ygc3VwZXJDbGFzcyk7fXN1YkNsYXNzLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MmJnN1cGVyQ2xhc3MucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6c3ViQ2xhc3MsZW51bWVyYWJsZTpmYWxzZSx3cml0YWJsZTp0cnVlLGNvbmZpZ3VyYWJsZTp0cnVlfX0pO2lmKHN1cGVyQ2xhc3MpT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcyxzdXBlckNsYXNzKTpzdWJDbGFzcy5fX3Byb3RvX189c3VwZXJDbGFzczt9dmFyIGluc3RhbmNlcz1bXTtmdW5jdGlvbiB0b0koc3RyaW5nTnVtYmVyKXtyZXR1cm4gcGFyc2VJbnQoc3RyaW5nTnVtYmVyLDEwKTt9ZnVuY3Rpb24gcmVzY2FsZShpbnN0YW5jZSl7dmFyIG5vZGU9X193ZWJwYWNrX3JlcXVpcmVfXy5pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9kb21fX1tcImZpbmRET01Ob2RlXCJdKShpbnN0YW5jZSk7dmFyIGNvbnRhaW5lckJveD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShub2RlLnBhcmVudE5vZGUpO3ZhciBmb250U2l6ZT10b0kod2luZG93LmdldENvbXB1dGVkU3R5bGUobm9kZSkuZm9udFNpemUpO2lmKGluc3RhbmNlLmJhc2VGb250U2l6ZT09PW51bGwpe2luc3RhbmNlLmJhc2VGb250U2l6ZT1mb250U2l6ZTt9dmFyIGNvbnRhaW5lckhlaWdodD10b0koY29udGFpbmVyQm94LmhlaWdodCk7dmFyIGNvbnRhaW5lcldpZHRoPXRvSShjb250YWluZXJCb3gud2lkdGgpO2lmKGNvbnRhaW5lckJveC5ib3hTaXppbmc9PT0nYm9yZGVyLWJveCd8fGNvbnRhaW5lckJveC5ib3hTaXppbmc9PT0ncGFkZGluZy1ib3gnKXtjb250YWluZXJIZWlnaHQtPXRvSShjb250YWluZXJCb3gucGFkZGluZ1RvcCkrdG9JKGNvbnRhaW5lckJveC5wYWRkaW5nQm90dG9tKTtjb250YWluZXJXaWR0aC09dG9JKGNvbnRhaW5lckJveC5wYWRkaW5nTGVmdCkrdG9JKGNvbnRhaW5lckJveC5wYWRkaW5nUmlnaHQpO312YXIgb3B0aW1pemVGb3JIZWlnaHQ9TWF0aC5mbG9vcihmb250U2l6ZS9ub2RlLm9mZnNldEhlaWdodCpjb250YWluZXJIZWlnaHQpO3ZhciBvcHRpbWl6ZUZvcldpZHRoPU1hdGguZmxvb3IoZm9udFNpemUvbm9kZS5vZmZzZXRXaWR0aCpjb250YWluZXJXaWR0aCk7aWYoaW5zdGFuY2UucHJvcHMudXBzY2FsZSl7bm9kZS5zdHlsZS5mb250U2l6ZT0oTWF0aC5tYXgob3B0aW1pemVGb3JIZWlnaHQsb3B0aW1pemVGb3JXaWR0aCl8fDEpKydweCc7fWVsc2V7bm9kZS5zdHlsZS5mb250U2l6ZT0oTWF0aC5taW4oaW5zdGFuY2UuYmFzZUZvbnRTaXplLG9wdGltaXplRm9ySGVpZ2h0LG9wdGltaXplRm9yV2lkdGgpfHwxKSsncHgnO319ZnVuY3Rpb24gaGFuZGxlV2luZG93UmVzaXplKCl7aW5zdGFuY2VzLmZvckVhY2goZnVuY3Rpb24oaW5zdGFuY2Upe3JldHVybiByZXNjYWxlKGluc3RhbmNlKTt9KTt9ZnVuY3Rpb24gcmVnaXN0ZXJJbnN0YW5jZShpbnN0YW5jZSl7aWYoaW5zdGFuY2VzLmxlbmd0aD09PTApe3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLGhhbmRsZVdpbmRvd1Jlc2l6ZSx0cnVlKTt9aW5zdGFuY2VzLnB1c2goaW5zdGFuY2UpO31mdW5jdGlvbiB1bnJlZ2lzdGVySW5zdGFuY2UoaW5zdGFuY2Upe2luc3RhbmNlcy5zcGxpY2UoaW5zdGFuY2VzLmluZGV4T2YoaW5zdGFuY2UpLDEpO2lmKGluc3RhbmNlcy5sZW5ndGg9PT0wKXt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJyxoYW5kbGVXaW5kb3dSZXNpemUsdHJ1ZSk7fX12YXIgRml0dGVkVGV4dD1mdW5jdGlvbihfUmVhY3QkUHVyZUNvbXBvbmVudCl7X2luaGVyaXRzKEZpdHRlZFRleHQsX1JlYWN0JFB1cmVDb21wb25lbnQpO2Z1bmN0aW9uIEZpdHRlZFRleHQoKXt2YXIgX3JlZjt2YXIgX3RlbXAsX3RoaXMsX3JldDtfY2xhc3NDYWxsQ2hlY2sodGhpcyxGaXR0ZWRUZXh0KTtmb3IodmFyIF9sZW49YXJndW1lbnRzLmxlbmd0aCxhcmdzPUFycmF5KF9sZW4pLF9rZXk9MDtfa2V5PF9sZW47X2tleSsrKXthcmdzW19rZXldPWFyZ3VtZW50c1tfa2V5XTt9cmV0dXJuIF9yZXQ9KF90ZW1wPShfdGhpcz1fcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLChfcmVmPUZpdHRlZFRleHQuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoRml0dGVkVGV4dCkpLmNhbGwuYXBwbHkoX3JlZixbdGhpc10uY29uY2F0KGFyZ3MpKSksX3RoaXMpLF90aGlzLmJhc2VGb250U2l6ZT1udWxsLF90ZW1wKSxfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihfdGhpcyxfcmV0KTt9X2NyZWF0ZUNsYXNzKEZpdHRlZFRleHQsW3trZXk6J2NvbXBvbmVudERpZE1vdW50Jyx2YWx1ZTpmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpe3Jlc2NhbGUodGhpcyk7cmVnaXN0ZXJJbnN0YW5jZSh0aGlzKTt9fSx7a2V5Oidjb21wb25lbnREaWRVcGRhdGUnLHZhbHVlOmZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZSgpe3Jlc2NhbGUodGhpcyk7fX0se2tleTonY29tcG9uZW50V2lsbFVubW91bnQnLHZhbHVlOmZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCl7dW5yZWdpc3Rlckluc3RhbmNlKHRoaXMpO319LHtrZXk6J3JlbmRlcicsdmFsdWU6ZnVuY3Rpb24gcmVuZGVyKCl7cmV0dXJuIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KHRoaXMucHJvcHMuY29tcG9uZW50LF9leHRlbmRzKHt9LF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19ib3VuZGxlc3NfdXRpbHNfb21pdF9rZXlzX19fZGVmYXVsdCgpKHRoaXMucHJvcHMsRml0dGVkVGV4dC5pbnRlcm5hbEtleXMpLHtjbGFzc05hbWU6X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX2NsYXNzbmFtZXNfX19kZWZhdWx0KCkoJ2ItdGV4dCcsdGhpcy5wcm9wcy5jbGFzc05hbWUpfSksdGhpcy5wcm9wcy5jaGlsZHJlbik7fX1dKTtyZXR1cm4gRml0dGVkVGV4dDt9KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fX2RlZmF1bHQuYS5QdXJlQ29tcG9uZW50KTtGaXR0ZWRUZXh0LnByb3BUeXBlcz17JyonOl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1wiUHJvcFR5cGVzXCJdLmFueSxjb21wb25lbnQ6X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXCJQcm9wVHlwZXNcIl0uc3RyaW5nLHVwc2NhbGU6X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXCJQcm9wVHlwZXNcIl0uYm9vbH07Rml0dGVkVGV4dC5kZWZhdWx0UHJvcHM9e2NvbXBvbmVudDonc3BhbicsdXBzY2FsZTpmYWxzZX07Rml0dGVkVGV4dC5pbnRlcm5hbEtleXM9T2JqZWN0LmtleXMoRml0dGVkVGV4dC5kZWZhdWx0UHJvcHMpOy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSBGaXR0ZWRUZXh0O1xuXG4vKioqLyB9KVxuLyoqKioqKi8gXSk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIGluZGV4LmpzIiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pXG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG5cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGlkZW50aXR5IGZ1bmN0aW9uIGZvciBjYWxsaW5nIGhhcm1vbnkgaW1wb3J0cyB3aXRoIHRoZSBjb3JyZWN0IGNvbnRleHRcbiBcdF9fd2VicGFja19yZXF1aXJlX18uaSA9IGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiB2YWx1ZTsgfTtcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbiBcdFx0XHRcdGdldDogZ2V0dGVyXG4gXHRcdFx0fSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gNCk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay9ib290c3RyYXAgZDJiY2UyZTYzMmJiODMyZGZlNzEiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJib3VuZGxlc3MtdXRpbHMtb21pdC1rZXlzXCIpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIHtcImNvbW1vbmpzMlwiOlwiYm91bmRsZXNzLXV0aWxzLW9taXQta2V5c1wifVxuLy8gbW9kdWxlIGlkID0gMFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjbGFzc25hbWVzXCIpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIHtcImNvbW1vbmpzMlwiOlwiY2xhc3NuYW1lc1wifVxuLy8gbW9kdWxlIGlkID0gMVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBleHRlcm5hbCB7XCJjb21tb25qczJcIjpcInJlYWN0XCJ9XG4vLyBtb2R1bGUgaWQgPSAyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LWRvbVwiKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBleHRlcm5hbCB7XCJjb21tb25qczJcIjpcInJlYWN0LWRvbVwifVxuLy8gbW9kdWxlIGlkID0gM1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJpbXBvcnQgUmVhY3QsIHtQcm9wVHlwZXN9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7ZmluZERPTU5vZGV9IGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgY3ggZnJvbSAnY2xhc3NuYW1lcyc7XG5cbmltcG9ydCBvbWl0IGZyb20gJ2JvdW5kbGVzcy11dGlscy1vbWl0LWtleXMnO1xuXG5jb25zdCBpbnN0YW5jZXMgPSBbXTtcblxuZnVuY3Rpb24gdG9JKHN0cmluZ051bWJlcikge1xuICAgIHJldHVybiBwYXJzZUludChzdHJpbmdOdW1iZXIsIDEwKTtcbn1cblxuZnVuY3Rpb24gcmVzY2FsZShpbnN0YW5jZSkge1xuICAgIGNvbnN0IG5vZGUgPSBmaW5kRE9NTm9kZShpbnN0YW5jZSk7XG4gICAgY29uc3QgY29udGFpbmVyQm94ID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUobm9kZS5wYXJlbnROb2RlKTtcbiAgICBjb25zdCBmb250U2l6ZSA9IHRvSSh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShub2RlKS5mb250U2l6ZSk7XG5cbiAgICBpZiAoaW5zdGFuY2UuYmFzZUZvbnRTaXplID09PSBudWxsKSB7XG4gICAgICAgIGluc3RhbmNlLmJhc2VGb250U2l6ZSA9IGZvbnRTaXplO1xuICAgIH1cblxuICAgIGxldCBjb250YWluZXJIZWlnaHQgPSB0b0koY29udGFpbmVyQm94LmhlaWdodCk7XG4gICAgbGV0IGNvbnRhaW5lcldpZHRoID0gdG9JKGNvbnRhaW5lckJveC53aWR0aCk7XG5cbiAgICAvLyBuZWVkIHRvIGFjY291bnQgZm9yIHBhZGRpbmdcbiAgICBpZiAoY29udGFpbmVyQm94LmJveFNpemluZyA9PT0gJ2JvcmRlci1ib3gnIHx8IGNvbnRhaW5lckJveC5ib3hTaXppbmcgPT09ICdwYWRkaW5nLWJveCcpIHtcbiAgICAgICAgY29udGFpbmVySGVpZ2h0IC09IHRvSShjb250YWluZXJCb3gucGFkZGluZ1RvcCkgKyB0b0koY29udGFpbmVyQm94LnBhZGRpbmdCb3R0b20pO1xuICAgICAgICBjb250YWluZXJXaWR0aCAtPSB0b0koY29udGFpbmVyQm94LnBhZGRpbmdMZWZ0KSArIHRvSShjb250YWluZXJCb3gucGFkZGluZ1JpZ2h0KTtcbiAgICB9XG5cbiAgICBjb25zdCBvcHRpbWl6ZUZvckhlaWdodCA9IE1hdGguZmxvb3IoKGZvbnRTaXplIC8gbm9kZS5vZmZzZXRIZWlnaHQpICogY29udGFpbmVySGVpZ2h0KTtcbiAgICBjb25zdCBvcHRpbWl6ZUZvcldpZHRoID0gTWF0aC5mbG9vcigoZm9udFNpemUgLyBub2RlLm9mZnNldFdpZHRoKSAqIGNvbnRhaW5lcldpZHRoKTtcblxuICAgIC8vIGlmIHVwc2NhbGluZyBpcyBhbGxvd2VkLCB0aGF0IGNoYW5nZXMgdGhlIG1hdGggYSBiaXRcbiAgICBpZiAoaW5zdGFuY2UucHJvcHMudXBzY2FsZSkge1xuICAgICAgICBub2RlLnN0eWxlLmZvbnRTaXplID0gKE1hdGgubWF4KG9wdGltaXplRm9ySGVpZ2h0LCBvcHRpbWl6ZUZvcldpZHRoKSB8fCAxKSArICdweCc7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZS5zdHlsZS5mb250U2l6ZSA9IChNYXRoLm1pbihpbnN0YW5jZS5iYXNlRm9udFNpemUsIG9wdGltaXplRm9ySGVpZ2h0LCBvcHRpbWl6ZUZvcldpZHRoKSB8fCAxKSArICdweCc7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVXaW5kb3dSZXNpemUoKSB7XG4gICAgaW5zdGFuY2VzLmZvckVhY2goKGluc3RhbmNlKSA9PiByZXNjYWxlKGluc3RhbmNlKSk7XG59XG5cbmZ1bmN0aW9uIHJlZ2lzdGVySW5zdGFuY2UoaW5zdGFuY2UpIHtcbiAgICBpZiAoaW5zdGFuY2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaGFuZGxlV2luZG93UmVzaXplLCB0cnVlKTtcbiAgICB9XG5cbiAgICBpbnN0YW5jZXMucHVzaChpbnN0YW5jZSk7XG59XG5cbmZ1bmN0aW9uIHVucmVnaXN0ZXJJbnN0YW5jZShpbnN0YW5jZSkge1xuICAgIGluc3RhbmNlcy5zcGxpY2UoaW5zdGFuY2VzLmluZGV4T2YoaW5zdGFuY2UpLCAxKTtcblxuICAgIGlmIChpbnN0YW5jZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBoYW5kbGVXaW5kb3dSZXNpemUsIHRydWUpO1xuICAgIH1cbn1cblxuLyoqXG5fX0ZpdCBzaW5nbGUtbGluZSB0ZXh0IGluc2lkZSBhIHBhcmVudCBjb250YWluZXIsIG9iZXlpbmcgaW1wbGljdCBjb25zdHJhaW50cy5fX1xuXG5UaGlzIGNvbXBvbmVudCBjYW4gYmUgdXNlZnVsIGluIHNpdHVhdGlvbnMgd2hlcmUgYW4gaW50ZXJuYXRpb25hbGl6ZWQgc3RyaW5nIGlzIGJlaW5nIHBsYWNlZCBpbnRvIHRoZSBVSSBhbmQgaXQncyB1bmNsZWFyIGlmIGFsbCB2YXJpYXRpb25zIG9mIGl0IHdpbGwgZml0IHdpdGhvdXQgZXhjZXNzaXZlIGFtb3VudHMgb2YgZWRnZS1jYXNlIENTUy4gVWx0aW1hdGVseSwgaXQncyBnb29kIGF0IG1ha2luZyBzdXJlIHdoYXQgeW91IHB1dCBpbiBkb2Vzbid0IG92ZXJmbG93LlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGaXR0ZWRUZXh0IGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudCB7XG4gICAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIGFueSBbUmVhY3Qtc3VwcG9ydGVkIGF0dHJpYnV0ZV0oaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy90YWdzLWFuZC1hdHRyaWJ1dGVzLmh0bWwjaHRtbC1hdHRyaWJ1dGVzKVxuICAgICAgICAgKi9cbiAgICAgICAgJyonOiBQcm9wVHlwZXMuYW55LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBhbnkgdmFsaWQgSFRNTCB0YWcgbmFtZVxuICAgICAgICAgKi9cbiAgICAgICAgY29tcG9uZW50OiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBjb250cm9scyBpZiBGaXR0ZWRUZXh0IHdpbGwgYXV0b21hdGljYWxseSBzY2FsZSB1cCB0aGUgY29udGVudCB0byBmaXQgdGhlIGF2YWlsYWJsZSBzcGFjZTsgbm9ybWFsbHkgdGhlIGNvbXBvbmVudFxuICAgICAgICAgKiBvbmx5IHNjYWxlcyB0ZXh0IGRvd24gYXMgbmVlZGVkIHRvIGZpdFxuICAgICAgICAgKi9cbiAgICAgICAgdXBzY2FsZTogUHJvcFR5cGVzLmJvb2wsXG4gICAgfVxuXG4gICAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICAgICAgY29tcG9uZW50OiAnc3BhbicsXG4gICAgICAgIHVwc2NhbGU6IGZhbHNlLFxuICAgIH1cblxuICAgIHN0YXRpYyBpbnRlcm5hbEtleXMgPSBPYmplY3Qua2V5cyhGaXR0ZWRUZXh0LmRlZmF1bHRQcm9wcylcblxuICAgIC8vIHNldCBkdXJpbmcgdGhlIGZpcnN0IHJlc2NhbGUoKSBydW5cbiAgICBiYXNlRm9udFNpemUgPSBudWxsXG5cbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgICAgcmVzY2FsZSh0aGlzKTtcblxuICAgICAgICAvLyB0aGVyZSBhcmUgbGlrZWx5IHRvIGJlIG11bHRpcGxlIGluc3RhbmNlcyBvZiB0aGlzIGNvbXBvbmVudCBvbiBhIHBhZ2UsIHNvIGl0IG1ha2VzIHNlbnNlIHRvIGp1c3QgdXNlXG4gICAgICAgIC8vIGEgc2hhcmVkIGdsb2JhbCByZXNpemUgbGlzdGVuZXIgaW5zdGVhZCBvZiBlYWNoIGNvbXBvbmVudCBoYXZpbmcgaXRzIG93blxuICAgICAgICByZWdpc3Rlckluc3RhbmNlKHRoaXMpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICAgICAgcmVzY2FsZSh0aGlzKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgICAgdW5yZWdpc3Rlckluc3RhbmNlKHRoaXMpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDx0aGlzLnByb3BzLmNvbXBvbmVudFxuICAgICAgICAgICAgICAgIHsuLi5vbWl0KHRoaXMucHJvcHMsIEZpdHRlZFRleHQuaW50ZXJuYWxLZXlzKX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2N4KCdiLXRleHQnLCB0aGlzLnByb3BzLmNsYXNzTmFtZSl9PlxuICAgICAgICAgICAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVufVxuICAgICAgICAgICAgPC90aGlzLnByb3BzLmNvbXBvbmVudD5cbiAgICAgICAgKTtcbiAgICB9XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9wYWNrYWdlcy9ib3VuZGxlc3MtZml0dGVkLXRleHQvaW5kZXguanMiXSwic291cmNlUm9vdCI6IiJ9