UNPKG

41.1 kBJavaScriptView Raw
1module.exports=function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=14)}([function(e,t){e.exports=require("@babel/runtime/helpers/getPrototypeOf")},function(e,t){e.exports=require("@babel/runtime/helpers/classCallCheck")},function(e,t){e.exports=require("@babel/runtime/helpers/possibleConstructorReturn")},function(e,t){e.exports=require("@babel/runtime/helpers/inherits")},function(e,t){e.exports=require("@babel/runtime/helpers/createClass")},function(e,t){e.exports=require("react")},function(e,t){e.exports=require("we-edit")},function(e,t){e.exports=require("@babel/runtime/helpers/defineProperty")},function(e,t){e.exports=require("./representation-pagination")},function(e,t){e.exports=require("prop-types")},function(e,t){e.exports=require("@babel/runtime/helpers/objectWithoutProperties")},function(e,t){e.exports=require("@babel/runtime/helpers/get")},function(e,t){e.exports=require("@babel/runtime/helpers/extends")},function(e,t){e.exports=require("@babel/runtime/helpers/assertThisInitialized")},function(e,t,r){"use strict";r.r(t);var n=r(10),o=r.n(n),i=r(1),p=r.n(i),s=r(4),a=r.n(s),u=r(2),c=r.n(u),l=r(0),f=r.n(l),h=r(3),d=r.n(h),y=r(7),m=r.n(y),b=r(5),g=r.n(b),v=r(9),O=r.n(v),w=r(6),P=r(8),j=r.n(P),E=function(e){function t(){return p()(this,t),c()(this,f()(t).apply(this,arguments))}return d()(t,e),a()(t,[{key:"getComposed",value:function(){return g.a.createElement("article",{style:{whiteSpace:"pre-wrap",textAlign:"initial"}},this.props.children)}}]),t}(w.dom.Document),x=function(e){function t(){return p()(this,t),c()(this,f()(t).apply(this,arguments))}return d()(t,e),a()(t,[{key:"render",value:function(){var e=this.props,t=e.spacing,r=t.top,n=t.bottom,o=t.lineHeight,i=e.indent,p=i.left,s=i.right,a=i.firstLine,u=e.align,c=(e.numbering,{textAlign:u});return p&&(c.paddingLeft=p),s&&(c.paddingRight=s),r&&(c.paddingTop=r),n&&(c.paddingBottom=n),a&&(c.textIndent=a),o&&(c.lineHeight=o),g.a.createElement("p",{style:c},this.props.children)}}]),t}(w.dom.Paragraph),D=function(e){function t(){return p()(this,t),c()(this,f()(t).apply(this,arguments))}return d()(t,e),a()(t,[{key:"render",value:function(){var e=this.props,t=e.fonts,r=e.size,n=e.color,o=e.bold,i=e.italic,p=e.vanish,s={fontFamily:t,fontSize:"".concat(r,"pt"),color:n,fontStyle:"normal"};return o&&(s.fontWeight=700),p&&(s.display="none"),i&&(s.fontStyle="italic"),g.a.createElement("span",{style:s},this.props.children)}}]),t}(w.dom.Text),k=function(e){function t(){return p()(this,t),c()(this,f()(t).apply(this,arguments))}return d()(t,e),a()(t,[{key:"render",value:function(){var e=this.props,t=e.width,r=e.height,n=e.src;return g.a.createElement("img",{style:{width:t,height:r},src:n})}}]),t}(w.dom.Image),S=function(e){function t(){return p()(this,t),c()(this,f()(t).apply(this,arguments))}return d()(t,e),a()(t,[{key:"render",value:function(){var e=this.props.cols,t=e.reduce((function(e,t){return e+t}),0);return g.a.createElement("table",{style:{width:"100%",borderCollapse:"collapse"}},g.a.createElement("colgroup",null,e.map((function(e,r){return g.a.createElement("col",{key:r,style:{width:"".concat(100*e/t,"%")}})}))),g.a.createElement("tbody",null,this.props.children))}}]),t}(w.dom.Table),T=function(e){function t(){return p()(this,t),c()(this,f()(t).apply(this,arguments))}return d()(t,e),a()(t,[{key:"render",value:function(){return g.a.createElement("tr",null,this.props.children)}}]),t}(w.dom.Row),C=function(e){function t(){return p()(this,t),c()(this,f()(t).apply(this,arguments))}return d()(t,e),a()(t,[{key:"render",value:function(){return g.a.createElement("td",{style:{border:"1px solid gray"}},this.props.children)}}]),t}(w.dom.Cell);function q(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}var I=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?q(r,!0).forEach((function(t){m()(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):q(r).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}({},w.dom,{Document:E,Paragraph:x,Text:D,Image:k,Table:S,Row:T,Cell:C}),M=r(11),_=r.n(M),z=r(12),A=r.n(z),F=r(13),R=r.n(F);function V(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function H(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?V(r,!0).forEach((function(t){m()(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):V(r).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}var N=P.Editors.Document,B=P.Editors.Frame,L=function(e){function t(){var e;p()(this,t),(e=c()(this,f()(t).apply(this,arguments))).state={};var r=null;return e.resizeViewPort=function(){r||(r=setTimeout((function(){var t=R()(e).state.viewport,n=t.node.getBoundingClientRect(),o=n.width,i=n.height;r=null,e.setState({resize:Date.now(),viewport:H({},t,{width:o,height:i})})}),66))},e}return d()(t,e),a()(t,null,[{key:"getDerivedStateFromProps",value:function(e,t){return H({viewport:e.viewport},t)}}]),a()(t,[{key:"componentDidMount",value:function(){window.addEventListener("resize",this.resizeViewPort)}},{key:"componentWillUnmount",value:function(){window.removeEventListener("resize",this.resizeViewPort)}},{key:"getChildContext",value:function(){return{paper:{border:!1},margin:this.props.margin}}},{key:"render",value:function(){var e=this.props,t=e.children,r=o()(e,["children"]);return g.a.createElement(U,A()({},r,{viewport:this.state.viewport,pageGap:0,wrap:this.context.wrap}),t)}}]),t}(b.Component);m()(L,"displayName","html-document"),m()(L,"defaultProps",{margin:{left:10,right:10,top:10,bottom:10},canvas:N.defaultProps.canvas}),m()(L,"contextTypes",{wrap:O.a.bool}),m()(L,"childContextTypes",{margin:O.a.object,paper:O.a.oneOfType([O.a.bool,O.a.shape({border:O.a.bool})])});var U=function(e){function t(){return p()(this,t),c()(this,f()(t).apply(this,arguments))}return d()(t,e),a()(t,[{key:"appendComposed",value:function(e){this.page.appendComposed(e)}},{key:"componentDidUpdate",value:function(){var e=this.computed.composed[0],r=this.state.viewport;e&&(e.props.height=Math.max(e.composedHeight,r.height)),_()(f()(t.prototype),"componentDidUpdate",this)&&_()(f()(t.prototype),"componentDidUpdate",this).apply(this,arguments)}},{key:"nextAvailableSpace",value:function(){return this.page.nextAvailableSpace()}},{key:"isSection",get:function(){return!0}},{key:"page",get:function(){var e=this.props,r=e.wrap,n=void 0===r||r,o=e.margin,i=this.state.viewport;return 0==this.computed.composed.length&&this.computed.composed.push(new t.Page({id:"root",I:0,i:0,margin:o,width:n?i.width:Number.MAX_SAFE_INTEGER,height:Number.MAX_SAFE_INTEGER},{parent:this,getComposer:this.getComposer.bind(this)})),this.computed.composed[0]}}]),t}(N);function G(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}m()(U,"Page",function(e){function t(){return p()(this,t),c()(this,f()(t).apply(this,arguments))}return d()(t,e),a()(t,[{key:"createComposed2Parent",value:function(){var e=this.props,r=e.width,n=(e.margin,Math.max(this.context.parent.state.viewport.height,this.composedHeight));return g.a.cloneElement(_()(f()(t.prototype),"createComposed2Parent",this).call(this),{key:0,I:0,i:0,width:r,height:n,margin:{}})}}]),t}(B));var W=Object.keys(P.Editors).reduce((function(e,t){return e[t]=function(e){function t(){return p()(this,t),c()(this,f()(t).apply(this,arguments))}return d()(t,e),t}(P.Editors[t]),e}),{}),X=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?G(r,!0).forEach((function(t){m()(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):G(r).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}({},W,{Document:L,Section:W.Container.as("section",{stoppable:!0}),Header:W.Ignore,Footer:W.Ignore});function J(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}var K=function(e){function t(){return p()(this,t),c()(this,f()(t).apply(this,arguments))}return d()(t,e),a()(t,[{key:"output",value:function(e){var t=this,r=this.props,n=r.wrapperStart,o=r.wrapperEnd;n&&this.stream.write(n),e.pipe(this.stream,{end:!1}),e.on("end",(function(){t.stream.end(o)})),e.on("error",(function(e){t.stream.write("<pre>".concat(e.stack,"</pre>")),t.stream.end(o)}))}}]),t}(w.Emitter.Format.Base);function Q(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}m()(K,"defaultProps",function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?J(r,!0).forEach((function(t){m()(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):J(r).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}({},w.Emitter.Format.Base.defaultProps,{representation:"html",type:"html",name:"HTML Document",ext:"html",wrapperStart:"<html><body>",wrapperEnd:"</body></html>"})),r.d(t,"default",(function(){return Y})),r.d(t,"Viewers",(function(){return I})),r.d(t,"Editors",(function(){return X}));var Y=function(e){function t(){return p()(this,t),c()(this,f()(t).apply(this,arguments))}return d()(t,e),a()(t,[{key:"render",value:function(){var e=this.props,t=e.ViewerTypes,r=void 0===t?I:t,n=e.EditorTypes,i=void 0===n?X:n,p=o()(e,["ViewerTypes","EditorTypes"]);return g.a.createElement(j.a,function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?Q(r,!0).forEach((function(t){m()(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Q(r).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}({ViewerTypes:r,EditorTypes:i},p,{type:void 0}))}}]),t}(w.Representation.Base);m()(Y,"displayName","html"),m()(Y,"defaultProps",{type:"html"}),m()(Y,"Output",K),function(e){var t=e.install.bind(e);e.install=function(){t.apply(void 0,arguments),e.Output.install()};var r=e.uninstall.bind(e);e.uninstall=function(){r.apply(void 0,arguments),e.Output.uninstall()}}(Y),Y.install()}]);
2//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9nZXRQcm90b3R5cGVPZlwiIiwid2VicGFjazovLy9leHRlcm5hbCBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2tcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm5cIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2luaGVyaXRzXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzc1wiIiwid2VicGFjazovLy9leHRlcm5hbCBcInJlYWN0XCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwid2UtZWRpdFwiIiwid2VicGFjazovLy9leHRlcm5hbCBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHlcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJ3ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb25cIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJwcm9wLXR5cGVzXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9vYmplY3RXaXRob3V0UHJvcGVydGllc1wiIiwid2VicGFjazovLy9leHRlcm5hbCBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZ2V0XCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9leHRlbmRzXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hc3NlcnRUaGlzSW5pdGlhbGl6ZWRcIiIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLWh0bWwvc3JjL2RvbS9kb2N1bWVudC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLWh0bWwvc3JjL2RvbS9wYXJhZ3JhcGguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1odG1sL3NyYy9kb20vdGV4dC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLWh0bWwvc3JjL2RvbS9pbWFnZS5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLWh0bWwvc3JjL2RvbS90YWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLWh0bWwvc3JjL2RvbS9yb3cuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1odG1sL3NyYy9kb20vY2VsbC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLWh0bWwvc3JjL2RvbS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLWh0bWwvc3JjL2RvbS9lZGl0L2RvY3VtZW50LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24taHRtbC9zcmMvZG9tL2VkaXQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1odG1sL3NyYy9vdXRwdXQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1odG1sL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJpbnN0YWxsZWRNb2R1bGVzIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiZXhwb3J0cyIsIm1vZHVsZSIsImkiLCJsIiwibW9kdWxlcyIsImNhbGwiLCJtIiwiYyIsImQiLCJuYW1lIiwiZ2V0dGVyIiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsInIiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsInZhbHVlIiwidCIsIm1vZGUiLCJfX2VzTW9kdWxlIiwibnMiLCJjcmVhdGUiLCJrZXkiLCJiaW5kIiwibiIsIm9iamVjdCIsInByb3BlcnR5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJwIiwicyIsInJlcXVpcmUiLCJIdG1sRG9jdW1lbnQiLCJzdHlsZSIsIndoaXRlU3BhY2UiLCJ0ZXh0QWxpZ24iLCJ0aGlzIiwicHJvcHMiLCJjaGlsZHJlbiIsImRvbSIsIkRvY3VtZW50IiwiUGFyYWdyYXBoIiwic3BhY2luZyIsInRvcCIsImJvdHRvbSIsImxpbmVIZWlnaHQiLCJpbmRlbnQiLCJsZWZ0IiwicmlnaHQiLCJmaXJzdExpbmUiLCJhbGlnbiIsIm51bWJlcmluZyIsInBhZGRpbmdMZWZ0IiwicGFkZGluZ1JpZ2h0IiwicGFkZGluZ1RvcCIsInBhZGRpbmdCb3R0b20iLCJ0ZXh0SW5kZW50IiwiVGV4dCIsImZvbnRGYW1pbHkiLCJmb250cyIsInNpemUiLCJjb2xvciIsImJvbGQiLCJpdGFsaWMiLCJ2YW5pc2giLCJmb250U2l6ZSIsImZvbnRTdHlsZSIsImZvbnRXZWlnaHQiLCJkaXNwbGF5IiwiSW1hZ2UiLCJ3aWR0aCIsImhlaWdodCIsInNyYyIsIlRhYmxlIiwiY29scyIsInJlZHVjZSIsInciLCJib3JkZXJDb2xsYXBzZSIsIm1hcCIsIlJvdyIsIkNlbGwiLCJib3JkZXIiLCJFZGl0b3JzIiwiRnJhbWUiLCJIVE1MRG9jdW1lbnQiLCJhcmd1bWVudHMiLCJzdGF0ZSIsInJlc2l6ZVRpbWVvdXQiLCJyZXNpemVWaWV3UG9ydCIsInNldFRpbWVvdXQiLCJ2aWV3cG9ydCIsIm5vZGUiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJzZXRTdGF0ZSIsInJlc2l6ZSIsIkRhdGUiLCJub3ciLCJ3aW5kb3ciLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInBhcGVyIiwibWFyZ2luIiwicGFnZUdhcCIsIndyYXAiLCJjb250ZXh0IiwiQ29tcG9uZW50IiwiY2FudmFzIiwiZGVmYXVsdFByb3BzIiwiUHJvcFR5cGVzIiwiYm9vbCIsIm9uZU9mVHlwZSIsInNoYXBlIiwiVmlld3BvcnREb2N1bWVudCIsImZyYW1lIiwicGFnZSIsImFwcGVuZENvbXBvc2VkIiwiY29tcHV0ZWQiLCJjb21wb3NlZCIsIk1hdGgiLCJtYXgiLCJjb21wb3NlZEhlaWdodCIsIm5leHRBdmFpbGFibGVTcGFjZSIsImxlbmd0aCIsInB1c2giLCJQYWdlIiwiaWQiLCJJIiwiTnVtYmVyIiwiTUFYX1NBRkVfSU5URUdFUiIsInBhcmVudCIsImdldENvbXBvc2VyIiwiUmVhY3QiLCJjbG9uZUVsZW1lbnQiLCJrZXlzIiwiTXkiLCJrIiwiU2VjdGlvbiIsIkNvbnRhaW5lciIsImFzIiwic3RvcHBhYmxlIiwiSGVhZGVyIiwiSWdub3JlIiwiRm9vdGVyIiwiT3V0cHV0IiwiY29udGVudCIsIndyYXBwZXJTdGFydCIsIndyYXBwZXJFbmQiLCJzdHJlYW0iLCJ3cml0ZSIsInBpcGUiLCJlbmQiLCJvbiIsImUiLCJzdGFjayIsIkVtaXR0ZXIiLCJGb3JtYXQiLCJCYXNlIiwicmVwcmVzZW50YXRpb24iLCJ0eXBlIiwiZXh0IiwiSHRtbCIsIlZpZXdlclR5cGVzIiwiVmlld2VycyIsIkVkaXRvclR5cGVzIiwidW5kZWZpbmVkIiwiUmVwcmVzZW50YXRpb24iLCJBIiwiaW5zdGFsbCIsInVuaW5zdGFsbCJdLCJtYXBwaW5ncyI6IjJCQUNFLElBQUlBLEVBQW1CLEdBR3ZCLFNBQVNDLEVBQW9CQyxHQUc1QixHQUFHRixFQUFpQkUsR0FDbkIsT0FBT0YsRUFBaUJFLEdBQVVDLFFBR25DLElBQUlDLEVBQVNKLEVBQWlCRSxHQUFZLENBQ3pDRyxFQUFHSCxFQUNISSxHQUFHLEVBQ0hILFFBQVMsSUFVVixPQU5B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T0FDSmQsYUFBYSxlQUNiQyxXQUFXLG9CLDRIQ0VRYyxFLHlJQVNaLE1BQ29ENUgsS0FBS0MsTUFEekQsSUFDQTRILG1CQURBLE1BQ1lDLEVBRFosTUFDcUJDLG1CQURyQixNQUNpQ2pGLEVBRGpDLEVBQzZDN0MsRUFEN0MscUNBRVAsT0FBUSxrQkFBQyxJLGlWQUFELEVBQWlCNEgsY0FBWUUsZUFBZ0I5SCxFQUE3QyxDQUFtRHlILFVBQUtNLFMsR0FYaENDLGlCQUFlVCxNLElBQTVCSSxFLGNBQ0QsUSxJQURDQSxFLGVBR0EsQ0FDbkJGLEtBQUssUyxJQUpjRSxFLFNBT05qQixHQVNmLFNBQVV1QixHQUNULElBQUlDLEVBQVFELEVBQUVDLFFBQVFoSixLQUFLK0ksR0FDM0JBLEVBQUVDLFFBQVEsV0FDVEEsRUFBTyxXQUFQLEVBQVdsRixXQUNYaUYsRUFBRXZCLE9BQU93QixXQUdWLElBQUlDLEVBQVVGLEVBQUVFLFVBQVVqSixLQUFLK0ksR0FDL0JBLEVBQUVFLFVBQVUsV0FDWEEsRUFBUyxXQUFULEVBQWFuRixXQUNiaUYsRUFBRXZCLE9BQU95QixhQVZYLENBWUdSLEdBRUhBLEVBQUtPIiwiZmlsZSI6InJlcHJlc2VudGF0aW9uLWh0bWwuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMTQpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9nZXRQcm90b3R5cGVPZlwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVyblwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2luaGVyaXRzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3NcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3RcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwid2UtZWRpdFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIndlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvblwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9nZXRcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9leHRlbmRzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXNzZXJ0VGhpc0luaXRpYWxpemVkXCIpOyIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHtkb219IGZyb20gXCJ3ZS1lZGl0XCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSHRtbERvY3VtZW50IGV4dGVuZHMgZG9tLkRvY3VtZW50e1xuXHRnZXRDb21wb3NlZCgpe1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8YXJ0aWNsZSBzdHlsZT17e3doaXRlU3BhY2U6XCJwcmUtd3JhcFwiLHRleHRBbGlnbjpcImluaXRpYWxcIn19PlxuXHRcdFx0XHR7dGhpcy5wcm9wcy5jaGlsZHJlbn1cblx0XHRcdDwvYXJ0aWNsZT5cblx0XHQpXG5cdH1cbn0iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCJcbmltcG9ydCB7ZG9tfSBmcm9tIFwid2UtZWRpdFwiXG5jb25zdCB7UGFyYWdyYXBoOkJhc2V9PWRvbVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYXJhZ3JhcGggZXh0ZW5kcyBCYXNle1xuXHRyZW5kZXIoKXtcblx0XHRjb25zdCB7c3BhY2luZzp7dG9wLCBib3R0b20sIGxpbmVIZWlnaHR9LCBpbmRlbnQ6e2xlZnQscmlnaHQsZmlyc3RMaW5lfSwgYWxpZ246dGV4dEFsaWduLCBudW1iZXJpbmd9PXRoaXMucHJvcHNcblx0XHRsZXQgc3R5bGU9e3RleHRBbGlnbn1cblx0XHRcblx0XHRsZWZ0ICYmIChzdHlsZS5wYWRkaW5nTGVmdD1sZWZ0KTtcblx0XHRyaWdodCAmJiAoc3R5bGUucGFkZGluZ1JpZ2h0PXJpZ2h0KTtcblx0XHR0b3AgJiYgKHN0eWxlLnBhZGRpbmdUb3A9dG9wKTtcblx0XHRib3R0b20gJiYgKHN0eWxlLnBhZGRpbmdCb3R0b209Ym90dG9tKTtcblx0XHRcblx0XHRmaXJzdExpbmUgJiYgKHN0eWxlLnRleHRJbmRlbnQ9Zmlyc3RMaW5lKTtcblx0XHRcblx0XHRsaW5lSGVpZ2h0ICYmIChzdHlsZS5saW5lSGVpZ2h0PWxpbmVIZWlnaHQpO1xuXHRcdFxuXHRcdHJldHVybiAoXG5cdFx0XHQ8cCBzdHlsZT17c3R5bGV9Pnt0aGlzLnByb3BzLmNoaWxkcmVufTwvcD5cblx0XHQpXG5cdH1cbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHtkb219IGZyb20gXCJ3ZS1lZGl0XCJcbmNvbnN0IHtUZXh0OkJhc2V9PWRvbVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXh0IGV4dGVuZHMgQmFzZXtcblx0cmVuZGVyKCl7XG5cdFx0Y29uc3Qge2ZvbnRzOmZvbnRGYW1pbHksc2l6ZSxjb2xvcixib2xkLGl0YWxpYyx2YW5pc2h9PXRoaXMucHJvcHNcblx0XHRsZXQgc3R5bGU9e2ZvbnRGYW1pbHksZm9udFNpemU6YCR7c2l6ZX1wdGAsY29sb3IsZm9udFN0eWxlOlwibm9ybWFsXCJ9XG5cdFx0aWYoYm9sZClcblx0XHRcdHN0eWxlLmZvbnRXZWlnaHQ9NzAwXG5cdFx0XG5cdFx0aWYodmFuaXNoKVxuXHRcdFx0c3R5bGUuZGlzcGxheT1cIm5vbmVcIlxuXHRcdFxuXHRcdGlmKGl0YWxpYylcblx0XHRcdHN0eWxlLmZvbnRTdHlsZT1cIml0YWxpY1wiXG5cdFx0XG5cdFx0cmV0dXJuIChcblx0XHRcdDxzcGFuIHN0eWxlPXtzdHlsZX0+e3RoaXMucHJvcHMuY2hpbGRyZW59PC9zcGFuPlxuXHRcdClcblx0fVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQge2RvbX0gZnJvbSBcIndlLWVkaXRcIlxuY29uc3Qge0ltYWdlOkJhc2V9PWRvbVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbWFnZSBleHRlbmRzIEJhc2V7XG5cdHJlbmRlcigpe1xuXHRcdGNvbnN0IHt3aWR0aCxoZWlnaHQsc3JjfT10aGlzLnByb3BzXG5cdFx0cmV0dXJuIChcblx0XHRcdDxpbWcgc3R5bGU9e3t3aWR0aCxoZWlnaHR9fSBzcmM9e3NyY30vPlxuXHRcdClcblx0fVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQge2RvbX0gZnJvbSBcIndlLWVkaXRcIlxuY29uc3Qge1RhYmxlOkJhc2V9PWRvbVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUYWJsZSBleHRlbmRzIEJhc2V7XG5cdHJlbmRlcigpe1xuXHRcdGNvbnN0IHtjb2xzfT10aGlzLnByb3BzXG5cdFx0bGV0IHdpZHRoPWNvbHMucmVkdWNlKChzLHcpPT5zKz13LDApXG5cdFx0cmV0dXJuIChcblx0XHRcdDx0YWJsZSBzdHlsZT17e3dpZHRoOlwiMTAwJVwiLGJvcmRlckNvbGxhcHNlOlwiY29sbGFwc2VcIn19PlxuXHRcdFx0XHQ8Y29sZ3JvdXA+XG5cdFx0XHRcdFx0e2NvbHMubWFwKCh3LGkpPT48Y29sIGtleT17aX0gc3R5bGU9e3t3aWR0aDpgJHsxMDAqdy93aWR0aH0lYH19Lz4pfVxuXHRcdFx0XHQ8L2NvbGdyb3VwPlxuXHRcdFx0XHQ8dGJvZHk+XG5cdFx0XHRcdFx0e3RoaXMucHJvcHMuY2hpbGRyZW59XG5cdFx0XHRcdDwvdGJvZHk+XG5cdFx0XHQ8L3RhYmxlPlxuXHRcdClcblx0fVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQge2RvbX0gZnJvbSBcIndlLWVkaXRcIlxuY29uc3Qge1JvdzpCYXNlfT1kb21cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUm93IGV4dGVuZHMgQmFzZXtcblx0cmVuZGVyKCl7XG5cdFx0cmV0dXJuIChcblx0XHRcdDx0cj57dGhpcy5wcm9wcy5jaGlsZHJlbn08L3RyPlxuXHRcdClcblx0fVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQge2RvbX0gZnJvbSBcIndlLWVkaXRcIlxuY29uc3Qge0NlbGw6QmFzZX09ZG9tXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENlbGwgZXh0ZW5kcyBCYXNle1xuXHRyZW5kZXIoKXtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PHRkIHN0eWxlPXt7Ym9yZGVyOlwiMXB4IHNvbGlkIGdyYXlcIn19Pnt0aGlzLnByb3BzLmNoaWxkcmVufTwvdGQ+XG5cdFx0KVxuXHR9XG59XG4iLCJpbXBvcnQge2RvbX0gZnJvbSBcIndlLWVkaXRcIlxuaW1wb3J0IERvY3VtZW50IGZyb20gXCIuL2RvY3VtZW50XCJcbmltcG9ydCBQYXJhZ3JhcGggZnJvbSBcIi4vcGFyYWdyYXBoXCJcbmltcG9ydCBUZXh0IGZyb20gXCIuL3RleHRcIlxuaW1wb3J0IEltYWdlIGZyb20gXCIuL2ltYWdlXCJcbmltcG9ydCBUYWJsZSBmcm9tIFwiLi90YWJsZVwiXG5pbXBvcnQgUm93IGZyb20gXCIuL3Jvd1wiXG5pbXBvcnQgQ2VsbCBmcm9tIFwiLi9jZWxsXCJcblxuXG5leHBvcnQgZGVmYXVsdCB7XG5cdC4uLmRvbSxcblx0RG9jdW1lbnQsXG5cdFBhcmFncmFwaCxcblx0VGV4dCxcblx0SW1hZ2UsXG5cdFRhYmxlLCBSb3csIENlbGxcbn1cbiIsImltcG9ydCBSZWFjdCwge0NvbXBvbmVudH0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0IHtFZGl0b3JzfSBmcm9tIFwid2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uXCJcblxuY29uc3Qge0RvY3VtZW50LCBGcmFtZX09RWRpdG9yc1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSFRNTERvY3VtZW50IGV4dGVuZHMgQ29tcG9uZW50e1xuXHRzdGF0aWMgZGlzcGxheU5hbWU9XCJodG1sLWRvY3VtZW50XCJcblx0c3RhdGljIGRlZmF1bHRQcm9wcz17XG5cdFx0bWFyZ2luOntcblx0XHRcdGxlZnQ6MTAsXG5cdFx0XHRyaWdodDoxMCxcblx0XHRcdHRvcDoxMCxcblx0XHRcdGJvdHRvbToxMFxuXHRcdH0sXG5cdFx0Y2FudmFzOkRvY3VtZW50LmRlZmF1bHRQcm9wcy5jYW52YXMsXG5cdH1cblxuXHRzdGF0aWMgY29udGV4dFR5cGVzPXtcblx0XHR3cmFwOiBQcm9wVHlwZXMuYm9vbCxcblx0fVxuXG5cdHN0YXRpYyBjaGlsZENvbnRleHRUeXBlcz17XG5cdFx0bWFyZ2luOiBQcm9wVHlwZXMub2JqZWN0LFxuXHRcdHBhcGVyOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtcblx0XHRcdFByb3BUeXBlcy5ib29sLFxuXHRcdFx0UHJvcFR5cGVzLnNoYXBlKHtcblx0XHRcdFx0Ym9yZGVyOlByb3BUeXBlcy5ib29sXG5cdFx0XHR9KVxuXHRcdF0pXG5cdH1cblxuXHRzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKHt2aWV3cG9ydH0sc3RhdGUpe1xuXHRcdHJldHVybiB7dmlld3BvcnQsLi4uc3RhdGV9XG5cdH1cblxuXHRjb25zdHJ1Y3Rvcigpe1xuXHRcdHN1cGVyKC4uLmFyZ3VtZW50cylcblx0XHR0aGlzLnN0YXRlPXt9XG5cdFx0bGV0IHJlc2l6ZVRpbWVvdXQ9bnVsbFxuXHRcdHRoaXMucmVzaXplVmlld1BvcnQ9KCk9Pntcblx0XHRcdGlmKCFyZXNpemVUaW1lb3V0KXtcblx0XHRcdFx0cmVzaXplVGltZW91dD1zZXRUaW1lb3V0KCgpPT57XG5cdFx0XHRcdFx0Y29uc3Qge3N0YXRlOnt2aWV3cG9ydH19PXRoaXNcblx0XHRcdFx0XHRjb25zdCB7d2lkdGgsaGVpZ2h0fT12aWV3cG9ydC5ub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG5cdFx0XHRcdFx0cmVzaXplVGltZW91dD1udWxsXG5cdFx0XHRcdFx0dGhpcy5zZXRTdGF0ZSh7cmVzaXplOkRhdGUubm93KCksdmlld3BvcnQ6ey4uLnZpZXdwb3J0LHdpZHRoLGhlaWdodH19KVxuXHRcdFx0XHR9LDY2KVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGNvbXBvbmVudERpZE1vdW50KCl7XG5cdFx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgdGhpcy5yZXNpemVWaWV3UG9ydClcblx0fVxuXG5cdGNvbXBvbmVudFdpbGxVbm1vdW50KCl7XG5cdFx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgdGhpcy5yZXNpemVWaWV3UG9ydClcblx0fVxuXG5cdGdldENoaWxkQ29udGV4dCgpe1xuXHRcdHJldHVybiB7XG5cdFx0XHRwYXBlcjp7Ym9yZGVyOmZhbHNlfSxcblx0XHRcdG1hcmdpbjp0aGlzLnByb3BzLm1hcmdpblxuXHRcdH1cblx0fVxuXG5cdHJlbmRlcigpe1xuXHRcdGNvbnN0IHtjaGlsZHJlbiwgLi4ucHJvcHN9PXRoaXMucHJvcHNcblx0XHRyZXR1cm4gXHQ8Vmlld3BvcnREb2N1bWVudFxuXHRcdFx0XHRcdHsuLi5wcm9wc30gXG5cdFx0XHRcdFx0dmlld3BvcnQ9e3RoaXMuc3RhdGUudmlld3BvcnR9XG5cdFx0XHRcdFx0cGFnZUdhcD17MH0gd3JhcD17dGhpcy5jb250ZXh0LndyYXB9PlxuXHRcdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdFx0PC9WaWV3cG9ydERvY3VtZW50PlxuXHR9XG59XG4vKipcbiAqIGh0bWwgZG9lc24ndCBhcHBseSBzZWN0aW9uLCBzbyBkb2N1bWVudCBlbXVsYXRlIGFzIGEgc2VjdGlvbiB3aXRoIG9ubHkgMSBwYWdlXG4gKi9cbmNsYXNzIFZpZXdwb3J0RG9jdW1lbnQgZXh0ZW5kcyBEb2N1bWVudHtcblx0Z2V0IGlzU2VjdGlvbigpe1xuXHRcdHJldHVybiB0cnVlXG5cdH1cblxuXHRhcHBlbmRDb21wb3NlZChmcmFtZSl7XG5cdFx0dGhpcy5wYWdlLmFwcGVuZENvbXBvc2VkKGZyYW1lKVxuXHR9XG5cblx0Z2V0IHBhZ2UoKXtcblx0XHRjb25zdCB7d3JhcD10cnVlLG1hcmdpbn09dGhpcy5wcm9wc1xuXHRcdGNvbnN0IHt2aWV3cG9ydH09dGhpcy5zdGF0ZVxuXHRcdGlmKHRoaXMuY29tcHV0ZWQuY29tcG9zZWQubGVuZ3RoPT0wKXtcblx0XHRcdHRoaXMuY29tcHV0ZWQuY29tcG9zZWQucHVzaChcblx0XHRcdFx0bmV3IFZpZXdwb3J0RG9jdW1lbnQuUGFnZSh7XG5cdFx0XHRcdFx0aWQ6XCJyb290XCIsXG5cdFx0XHRcdFx0STowLFxuXHRcdFx0XHRcdGk6MCxcblx0XHRcdFx0XHRtYXJnaW4sXG5cdFx0XHRcdFx0d2lkdGg6d3JhcCA/IHZpZXdwb3J0LndpZHRoIDogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsXG4gICAgICAgICAgICAgICAgXHRoZWlnaHQ6TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIgXG5cdFx0XHRcdH0se1xuXHRcdFx0XHRcdHBhcmVudDp0aGlzLFxuXHRcdFx0XHRcdGdldENvbXBvc2VyOnRoaXMuZ2V0Q29tcG9zZXIuYmluZCh0aGlzKVxuXHRcdFx0XHR9KVxuXHRcdFx0KVxuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5jb21wdXRlZC5jb21wb3NlZFswXVxuXHR9XG5cblx0Y29tcG9uZW50RGlkVXBkYXRlKCl7XG5cdFx0Y29uc3QgcGFnZT10aGlzLmNvbXB1dGVkLmNvbXBvc2VkWzBdXG5cdFx0Y29uc3Qge3ZpZXdwb3J0fT10aGlzLnN0YXRlXG5cdFx0aWYocGFnZSl7XG5cdFx0XHRwYWdlLnByb3BzLmhlaWdodD1NYXRoLm1heChwYWdlLmNvbXBvc2VkSGVpZ2h0LHZpZXdwb3J0LmhlaWdodClcblx0XHR9XG5cdFx0aWYoc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKXtcblx0XHRcdHN1cGVyLmNvbXBvbmVudERpZFVwZGF0ZSguLi5hcmd1bWVudHMpXG5cdFx0fVxuXHR9XG5cblx0bmV4dEF2YWlsYWJsZVNwYWNlKCl7XG5cdFx0cmV0dXJuIHRoaXMucGFnZS5uZXh0QXZhaWxhYmxlU3BhY2UoKVxuXHR9XG5cblx0c3RhdGljIFBhZ2U9Y2xhc3MgUGFnZSBleHRlbmRzIEZyYW1le1xuXHRcdGNyZWF0ZUNvbXBvc2VkMlBhcmVudCgpe1xuXHRcdFx0Y29uc3Qge3Byb3BzOnt3aWR0aCxtYXJnaW59fT10aGlzXG5cdFx0XHRjb25zdCBoZWlnaHQ9TWF0aC5tYXgodGhpcy5jb250ZXh0LnBhcmVudC5zdGF0ZS52aWV3cG9ydC5oZWlnaHQsdGhpcy5jb21wb3NlZEhlaWdodClcblx0XHRcdHJldHVybiBSZWFjdC5jbG9uZUVsZW1lbnQoc3VwZXIuY3JlYXRlQ29tcG9zZWQyUGFyZW50KCkse1xuXHRcdFx0XHRrZXk6MCxJOjAsaTowLHdpZHRoLGhlaWdodCxtYXJnaW46e30sXG5cdFx0XHR9KVxuXHRcdH1cblx0fVxufVxuIiwiaW1wb3J0IHtFZGl0b3JzfSBmcm9tIFwid2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uXCJcbmltcG9ydCBEb2N1bWVudCBmcm9tIFwiLi9kb2N1bWVudFwiXG5cbmNvbnN0IGRvbT1PYmplY3Qua2V5cyhFZGl0b3JzKS5yZWR1Y2UoKE15LGspPT57XG4gICAgTXlba109Y2xhc3MgX18kMSBleHRlbmRzIEVkaXRvcnNba117fVxuICAgIHJldHVybiBNeVxufSx7fSlcblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIC4uLmRvbSxcblx0RG9jdW1lbnQsXG4gICAgU2VjdGlvbjpkb20uQ29udGFpbmVyLmFzKFwic2VjdGlvblwiLHtzdG9wcGFibGU6dHJ1ZX0pLFxuICAgIEhlYWRlcjpkb20uSWdub3JlLFxuICAgIEZvb3Rlcjpkb20uSWdub3JlXG59XG4iLCJpbXBvcnQge0VtaXR0ZXJ9IGZyb20gXCJ3ZS1lZGl0XCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT3V0cHV0IGV4dGVuZHMgRW1pdHRlci5Gb3JtYXQuQmFzZXtcdFxuXHRzdGF0aWMgZGVmYXVsdFByb3BzPXtcblx0XHQuLi5FbWl0dGVyLkZvcm1hdC5CYXNlLmRlZmF1bHRQcm9wcyxcblx0XHRyZXByZXNlbnRhdGlvbjogXCJodG1sXCIsXG5cdFx0dHlwZTpcImh0bWxcIixcblx0XHRuYW1lOlwiSFRNTCBEb2N1bWVudFwiLFxuXHRcdGV4dDpcImh0bWxcIixcblx0XHR3cmFwcGVyU3RhcnQ6XCI8aHRtbD48Ym9keT5cIixcblx0XHR3cmFwcGVyRW5kOlwiPC9ib2R5PjwvaHRtbD5cIlxuXHR9XG5cblx0b3V0cHV0KGNvbnRlbnQpe1xuXHRcdGNvbnN0IHt3cmFwcGVyU3RhcnQsIHdyYXBwZXJFbmR9PXRoaXMucHJvcHNcblx0XHRpZih3cmFwcGVyU3RhcnQpe1xuXHRcdFx0dGhpcy5zdHJlYW0ud3JpdGUod3JhcHBlclN0YXJ0KVxuXHRcdH1cblx0XHRcblx0XHRjb250ZW50LnBpcGUodGhpcy5zdHJlYW0se2VuZDpmYWxzZX0pXG5cdFx0Y29udGVudC5vbihcImVuZFwiLCgpPT57XG5cdFx0XHR0aGlzLnN0cmVhbS5lbmQod3JhcHBlckVuZClcblx0XHR9KVxuXG5cdFx0Y29udGVudC5vbignZXJyb3InLGU9PntcdFxuXHRcdFx0dGhpcy5zdHJlYW0ud3JpdGUoYDxwcmU+JHtlLnN0YWNrfTwvcHJlPmApXG5cdFx0XHR0aGlzLnN0cmVhbS5lbmQod3JhcHBlckVuZClcblx0XHR9KVxuXHR9XG59IiwiaW1wb3J0IFJlYWN0LHtQdXJlQ29tcG9uZW50IGFzIENvbXBvbmVudH0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0IHtSZXByZXNlbnRhdGlvbn0gZnJvbSBcIndlLWVkaXRcIlxuaW1wb3J0IFBhZ2luYXRpb24gZnJvbSBcIndlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvblwiXG5cbmltcG9ydCBWaWV3ZXJzIGZyb20gXCIuL2RvbVwiXG5pbXBvcnQgRWRpdG9ycyBmcm9tIFwiLi9kb20vZWRpdFwiXG5cbmltcG9ydCBPdXRwdXQgZnJvbSBcIi4vb3V0cHV0XCJcblxuZXhwb3J0IHtWaWV3ZXJzLCBFZGl0b3JzfVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIdG1sIGV4dGVuZHMgUmVwcmVzZW50YXRpb24uQmFzZXtcblx0c3RhdGljIGRpc3BsYXlOYW1lPVwiaHRtbFwiXG5cblx0c3RhdGljIGRlZmF1bHRQcm9wcz17XG5cdFx0dHlwZTpcImh0bWxcIlxuXHR9XG5cblx0c3RhdGljIE91dHB1dD1PdXRwdXRcblxuXHRyZW5kZXIoKXtcblx0XHRjb25zdCB7Vmlld2VyVHlwZXM9Vmlld2VycywgRWRpdG9yVHlwZXM9RWRpdG9ycywgLi4ucHJvcHN9PXRoaXMucHJvcHNcblx0XHRyZXR1cm4gKDxQYWdpbmF0aW9uIHsuLi57Vmlld2VyVHlwZXMsRWRpdG9yVHlwZXMsIC4uLnByb3BzLHR5cGU6dW5kZWZpbmVkfX0vPilcblx0fVxufVxuXG5cbihmdW5jdGlvbihBKXtcblx0bGV0IGluc3RhbGw9QS5pbnN0YWxsLmJpbmQoQSlcblx0QS5pbnN0YWxsPWZ1bmN0aW9uKCl7XG5cdFx0aW5zdGFsbCguLi5hcmd1bWVudHMpXG5cdFx0QS5PdXRwdXQuaW5zdGFsbCgpXG5cdH1cblxuXHRsZXQgdW5pbnN0YWxsPUEudW5pbnN0YWxsLmJpbmQoQSlcblx0QS51bmluc3RhbGw9ZnVuY3Rpb24oKXtcblx0XHR1bmluc3RhbGwoLi4uYXJndW1lbnRzKVxuXHRcdEEuT3V0cHV0LnVuaW5zdGFsbCgpXG5cdH1cbn0pKEh0bWwpO1xuXG5IdG1sLmluc3RhbGwoKVxuIl0sInNvdXJjZVJvb3QiOiIifQ==
\No newline at end of file