UNPKG

45.6 kBJavaScriptView Raw
1module.exports=function(e){var t={};function r(n){if(t[n])return t[n].exports;var a=t[n]={i:n,l:!1,exports:{}};return e[n].call(a.exports,a,a.exports,r),a.l=!0,a.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 a in e)r.d(n,a,function(t){return e[t]}.bind(null,a));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=18)}([function(e,t){e.exports=require("prop-types")},function(e,t){e.exports=require("@babel/runtime/helpers/defineProperty")},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/createClass")},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("react")},function(e,t){e.exports=require("@babel/runtime/helpers/objectWithoutProperties")},function(e,t,r){"use strict";var n=r(8),_=r.n(n),i=r(3),o=r.n(i),u=r(4),l=r.n(u),s=r(5),c=r.n(s),p=r(2),f=r.n(p),d=r(13),b=r.n(d),h=r(6),y=r.n(h),m=r(1),O=r.n(m),E=r(15),P=r(16),D=r.n(P),v=r(14),x=r(10),g=r(17),C=r.n(g),M={},k={paragraphHasIndentSetting:function(){return!!this.$target.attr("indent")},backspace_at_beginning_of_text:function(){this.backspace_at_beginning.apply(this,arguments)}},T=function(e){function t(){var e;return o()(this,t),(e=c()(this,f()(t).apply(this,arguments))).PR="",e.PARAGRAPH="paragraph",e.TEXT="text",e.InlineContainers="",Object.assign(C()(e),M,k),e}return y()(t,e),l()(t,[{key:"create_first_paragraph",value:function(){var e=this.file.$("section").prepend("<paragraph><text/></paragraph>"),t=this.file.renderChanged(e.children().first());this.$().findFirst("section").prepend("#".concat(t.id)),this.cursorAt(t.id,0)}}]),t}(x.Input.Editable.EventHandler.xml),w=r(7),A=r.n(w),j=r(0),R=r.n(j),I=r(11),q=r.n(I);function S(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 W={Document:function(e){var t,r,n=e.Document;e.Container,e.Frame;return r=t=function(e){function t(){return o()(this,t),c()(this,f()(t).apply(this,arguments))}return y()(t,e),l()(t,[{key:"getChildContext",value:function(){return{defaultStyle:this.props.defaultStyle}}},{key:"render",value:function(){var e=this.props,t=(e.defaultStyle,_()(e,["defaultStyle"]));return A.a.createElement(n,t)}}]),t}(w.Component),O()(t,"displayName","document"),O()(t,"propTypes",{defaultStyle:R.a.shape({fonts:R.a.string,size:R.a.number,bold:R.a.bool,italic:R.a.bool,color:R.a.string})}),O()(t,"childContextTypes",{defaultStyle:R.a.shape({fonts:R.a.string,size:R.a.number,bold:R.a.bool,italic:R.a.bool,color:R.a.string})}),r},Paragraph:function(e){var t,r,n=e.Paragraph;return r=t=function(e){function t(){return o()(this,t),c()(this,f()(t).apply(this,arguments))}return y()(t,e),l()(t,[{key:"getChildContext",value:function(){return this.getDefaultStyle()}},{key:"getDefaultStyle",value:function(){return function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?S(r,!0).forEach((function(t){O()(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):S(r).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}({},this.context.defaultStyle||{},{},this.props.defaultStyle||{})}},{key:"render",value:function(){var e=this.props,t=(e.defaultStyle,_()(e,["defaultStyle"]));return A.a.createElement(n,q()({defaultStyle:this.getDefaultStyle()},t))}}]),t}(w.Component),O()(t,"displayName","paragraph"),O()(t,"contextTypes",{defaultStyle:R.a.shape({fonts:R.a.string,size:R.a.number,bold:R.a.bool,italic:R.a.bool})}),O()(t,"childContextTypes",{fonts:R.a.string,size:R.a.number,color:R.a.string,bold:R.a.bool,italic:R.a.bool}),r},Text:function(e){var t,r,n=e.Text;return r=t=function(e){function t(){return o()(this,t),c()(this,f()(t).apply(this,arguments))}return y()(t,e),l()(t,[{key:"render",value:function(){var e=this.context,t=e.fonts,r=e.size,a=e.color,_=e.bold,i=e.italic;return A.a.createElement(n,q()({fonts:t,size:r,color:a,bold:_,italic:i},this.props))}}]),t}(w.Component),O()(t,"displayName","text"),O()(t,"contextTypes",{fonts:R.a.string,size:R.a.number,color:R.a.string,bold:R.a.bool,italic:R.a.bool}),r}};function L(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}r.d(t,"a",(function(){return U}));var U=function(e){function t(){return o()(this,t),c()(this,f()(t).apply(this,arguments))}return y()(t,e),l()(t,[{key:"dataToDom",value:function(e){var t=new B({xmlMode:!0,decodeEntities:!1});return new v.Parser(t,{}).end(e),t.dom}},{key:"nodeToString",value:function(e){return e.toXml()}},{key:"parse",value:function(e){var t=e.data,r=_()(e,["data"]);this.props=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?L(r,!0).forEach((function(t){O()(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):L(r).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}({},r,{supportPagination:!0});var n=D.a.load(this.dataToDom(t),{xmlMode:!0,decodeEntities:!1});return Object(x.transactifyCheerio)(n),n}},{key:"stream",value:function(){var e=new E.Readable;return e.push(this.nodeToString(this.doc.root())),e.push(null),e}},{key:"render",value:function(e,t){var r=this,n={},_=function e(r,_){var i,u,l=r.children,s=r.name,c=r.attribs,p=r.isText,f=void 0===p?"text"==s:p,d=f?"Text":s[0].toUpperCase()+s.substr(1),b=t[d]||n[d];b||(n[d]=(u=i=function e(){o()(this,e)},O()(i,"displayName",s),b=u));return _(b,c||{},f?Array.isArray(l)?(l[0]||{}).data:l.data:Array.isArray(l)?l.map((function(t){return e(t,_)})).filter((function(e){return!!e})):l?e(a,_):l,r)};return this.renderNode=function(e,t){return _(r._unwrap(e),t)},_(this.doc.root().children().get(0),e)}},{key:"_unwrap",value:function(e){return e&&"cheerio"in e&&e.get(0)||e}},{key:"makeId",value:function(e,r){if(e=this._unwrap(e),r)return K(e.attribs,r),r;if(e.attribs.xxid)return e.attribs.xxid;var n=r||"document"==e.name&&"root"||b()(f()(t.prototype),"makeId",this).call(this);return K(e.attribs,n),n}},{key:"getNode",value:function(e){var t=this.doc('[xxid="'.concat(e,'"]'));if(1!=t.length)throw new Error("can't find node[id=".concat(uid,"]"));return t}},{key:"$",value:function(){return this.doc.apply(this,arguments)}}],[{key:"support",value:function(e){if(!e)return!0;e.data;var t=e.name,r=e.ext,n=e.type;return!(!r||"xml"!=r)||(!(!t||!t.endsWith(".xml"))||!(!n||"document"!=n))}}]),t}(x.Input.Editable);O()(U,"defaultProps",{type:"xml",ext:"xml",name:"We-Edit XML document",mimeType:"application/xml"}),O()(U,"Reducer",T),O()(U,"HOCs",W);var B=function(e){function t(){return o()(this,t),c()(this,f()(t).apply(this,arguments))}return y()(t,e),l()(t,[{key:"_addDomElement",value:function(e){if("text"!=e.type||"\r"!=e.data[0]&&"\n"!=e.data[0])return b()(f()(t.prototype),"_addDomElement",this).call(this,e)}}]),t}(v.DomHandler),K=function(e,t){return Object.defineProperty(e,"xxid",{enumerable:!1,configurable:!0,writable:!1,value:t})}},function(e,t){e.exports=require("we-edit")},function(e,t){e.exports=require("@babel/runtime/helpers/extends")},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return __$1}));var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(3),_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default=__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__),_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(4),_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default=__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__),_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(5),_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default=__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__),_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__(2),_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default=__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__),_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__(6),_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default=__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__),_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__(1),_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_5___default=__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_5__),_xml__WEBPACK_IMPORTED_MODULE_6__=__webpack_require__(9),__$1=function(_XMLDocument){function __$1(){return _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this,__$1),_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this,_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(__$1).apply(this,arguments))}return _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(__$1,_XMLDocument),_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(__$1,[{key:"dataToDom",value:function dataToDom(data){"string"!=typeof data&&(data=String.fromCharCode.apply(null,new Uint8Array(data))),data=eval("(a=>a)(".concat(data,")"));var toNode=function e(t){var r=t.children,n=t.type,a=void 0===n?"text":n;return{attribs:t.props||{},name:a,type:"tag",children:"text"==a?[{data:r||"",type:"text"}]:(Array.isArray(r)?r:r?[r]:[]).map(e)}},root=toNode(data),connect=function e(t,r){var n=r?r.children:[],a=n.indexOf(t);return Object.assign(t,{parent:r,prev:n[a-1]||null,next:n[a+1]||null,children:"text"==t.type?t.children:t.children.map((function(r){return e(r,t)}))})};return connect(root)}},{key:"nodeToString",value:function(e){var t=function e(t){var r=t.name,n=t.attribs,a=t.children;return{type:r,props:n,children:"text"==r?(a||{}).data:(a||[]).map(e)}}(e);return JSON.stringify(t,(function(e,t){return t}),4)}}],[{key:"support",value:function(e){if(!e)return!0;e.data;var t=e.name,r=e.ext,n=e.type;return!(!r||"wed.json"!=r)||(!(!t||!t.endsWith(".wed.json"))||!(!n||"document"!=n))}}]),__$1}(_xml__WEBPACK_IMPORTED_MODULE_6__.a);_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_5___default()(__$1,"defaultProps",{type:"json",ext:"json",name:"We-Edit json document",mimeType:"application/json"})},function(e,t){e.exports=require("@babel/runtime/helpers/get")},function(e,t){e.exports=require("htmlparser2")},function(e,t){e.exports=require("readable-stream")},function(e,t){e.exports=require("cheerio")},function(e,t){e.exports=require("@babel/runtime/helpers/assertThisInitialized")},function(e,t,r){"use strict";r.r(t);var n=r(12),a=r(9);t.default={JSONDocument:n.a,XMLDocument:a.a,install:function(){n.a.install(),a.a.install()},uninstall:function(){n.a.uninstall(),a.a.uninstall()}}}]);
2//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwicHJvcC10eXBlc1wiIiwid2VicGFjazovLy9leHRlcm5hbCBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHlcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2dldFByb3RvdHlwZU9mXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVja1wiIiwid2VicGFjazovLy9leHRlcm5hbCBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3NcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm5cIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2luaGVyaXRzXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwicmVhY3RcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzXCIiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1pbnB1dC1qc29uL3NyYy9ldmVudC90eXBlLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtaW5wdXQtanNvbi9zcmMvZXZlbnQvYmFja3NwYWNlLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtaW5wdXQtanNvbi9zcmMvZXZlbnQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1pbnB1dC1qc29uL3NyYy9yZW5kZXIvcGFyYWdyYXBoLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtaW5wdXQtanNvbi9zcmMvcmVuZGVyL2luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtaW5wdXQtanNvbi9zcmMvcmVuZGVyL2RvY3VtZW50LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtaW5wdXQtanNvbi9zcmMvcmVuZGVyL3RleHQuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1pbnB1dC1qc29uL3NyYy94bWwuanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwid2UtZWRpdFwiIiwid2VicGFjazovLy9leHRlcm5hbCBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXh0ZW5kc1wiIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtaW5wdXQtanNvbi9zcmMvanNvbi5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2dldFwiIiwid2VicGFjazovLy9leHRlcm5hbCBcImh0bWxwYXJzZXIyXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwicmVhZGFibGUtc3RyZWFtXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiY2hlZXJpb1wiIiwid2VicGFjazovLy9leHRlcm5hbCBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXNzZXJ0VGhpc0luaXRpYWxpemVkXCIiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1pbnB1dC1qc29uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJpbnN0YWxsZWRNb2R1bGVzIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiZXhwb3J0cyIsIm1vZHVsZSIsImkiLCJsIiwibW9kdWxlcyIsImNhbGwiLCJtIiwiYyIsImQiLCJuYW1lIiwiZ2V0dGVyIiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsInIiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsInZhbHVlIiwidCIsIm1vZGUiLCJfX2VzTW9kdWxlIiwibnMiLCJjcmVhdGUiLCJrZXkiLCJiaW5kIiwibiIsIm9iamVjdCIsInByb3BlcnR5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJwIiwicyIsInJlcXVpcmUiLCJwYXJhZ3JhcGhIYXNJbmRlbnRTZXR0aW5nIiwidGhpcyIsIiR0YXJnZXQiLCJhdHRyIiwiYmFja3NwYWNlX2F0X2JlZ2lubmluZ19vZl90ZXh0IiwiYmFja3NwYWNlX2F0X2JlZ2lubmluZyIsImFyZ3VtZW50cyIsIl9fJDEiLCJQUiIsIlBBUkFHUkFQSCIsIlRFWFQiLCJJbmxpbmVDb250YWluZXJzIiwiYXNzaWduIiwidHlwZSIsImJhY2tzcGFjZSIsIiRib2R5IiwiZmlsZSIsIiQiLCJwcmVwZW5kIiwiYSIsInJlbmRlckNoYW5nZWQiLCJjaGlsZHJlbiIsImZpcnN0IiwiZmluZEZpcnN0IiwiaWQiLCJjdXJzb3JBdCIsIklucHV0IiwiRWRpdGFibGUiLCJFdmVudEhhbmRsZXIiLCJ4bWwiLCJEb2N1bWVudCIsIkNvbnRhaW5lciIsIkZyYW1lIiwiZGVmYXVsdFN0eWxlIiwicHJvcHMiLCJDb21wb25lbnQiLCJQcm9wVHlwZXMiLCJzaGFwZSIsImZvbnRzIiwic3RyaW5nIiwic2l6ZSIsIm51bWJlciIsImJvbGQiLCJib29sIiwiaXRhbGljIiwiY29sb3IiLCJQYXJhZ3JhcGgiLCJnZXREZWZhdWx0U3R5bGUiLCJjb250ZXh0IiwiVGV4dCIsImRhdGEiLCJoYW5kbGVyIiwiQ29udGVudERvbUhhbmRsZXIiLCJ4bWxNb2RlIiwiZGVjb2RlRW50aXRpZXMiLCJQYXJzZXIiLCJlbmQiLCJkb20iLCJub2RlIiwidG9YbWwiLCJzdXBwb3J0UGFnaW5hdGlvbiIsImRvYyIsImNoZWVyIiwibG9hZCIsImRhdGFUb0RvbSIsInRyYW5zYWN0aWZ5Q2hlZXJpbyIsInN0cmVhbSIsIlJlYWRhYmxlIiwicHVzaCIsIm5vZGVUb1N0cmluZyIsInJvb3QiLCJjcmVhdGVFbGVtZW50IiwiY29tcG9uZW50cyIsIlVua25vd25Db21wb25lbnRzIiwicmVuZGVyTm9kZSIsImF0dHJpYnMiLCJpc1RleHQiLCJUWVBFIiwidG9VcHBlckNhc2UiLCJzdWJzdHIiLCJUeXBlIiwiQXJyYXkiLCJpc0FycmF5IiwibWFwIiwiZmlsdGVyIiwiX3Vud3JhcCIsInVpZCIsImRlZmluZUlkIiwieHhpZCIsImxlbmd0aCIsIkVycm9yIiwiZXh0IiwiZW5kc1dpdGgiLCJtaW1lVHlwZSIsIlJlZHVjZXIiLCJEb20iLCJlbCIsIkRvbUhhbmRsZXIiLCJ0YXJnZXQiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIlN0cmluZyIsImZyb21DaGFyQ29kZSIsImFwcGx5IiwiVWludDhBcnJheSIsImV2YWwiLCJ0b05vZGUiLCJjb25uZWN0IiwicGFyZW50Iiwic2libGluZ3MiLCJpbmRleE9mIiwicHJldiIsIm5leHQiLCJiIiwidG9PYmplY3QiLCJKU09OIiwic3RyaW5naWZ5IiwiWE1MRG9jdW1lbnQiLCJKU09ORG9jdW1lbnQiLCJpbnN0YWxsIiwidW5pbnN0YWxsIl0sIm1hcHBpbmdzIjoiMkJBQ0UsSUFBSUEsRUFBbUIsR0FHdkIsU0FBU0MsRUFBb0JDLEdBRzVCLEdBQUdGLEVBQWlCRSxHQUNuQixPQUFPRixFQUFpQkUsR0FBVUMsUUFHbkMsSUFBSUMsRUFBU0osRUFBaUJFLEdBQVksQ0FDekNHLEVBQUdILEVBQ0hJLEdBQUcsRUFDSEgsUUFBUyxJQVVWLE9BTkFJLEVBQVFMLEdBQVVNLEtBQUtKLEVBQU9ELFFBQVNDLEVBQVFBLEVBQU9ELFFBQVNGLEdBRy9ERyxFQUFPRSxHQUFJLEVBR0pGLEVBQU9ELFFBMERmLE9BckRBRixFQUFvQlEsRUFBSUYsRUFHeEJOLEVBQW9CUyxFQUFJVixFQUd4QkMsRUFBb0JVLEVBQUksU0FBU1IsRUFBU1MsRUFBTUMsR0FDM0NaLEVBQW9CYSxFQUFFWCxFQUFTUyxJQUNsQ0csT0FBT0MsZUFBZWIsRUFBU1MsRUFBTSxDQUFFSyxZQUFZLEVBQU1DLElBQUtMLEtBS2hFWixFQUFvQmtCLEVBQUksU0FBU2hCLEdBQ1gsb0JBQVhpQixRQUEwQkEsT0FBT0MsYUFDMUNOLE9BQU9DLGVBQWVi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RUFBT0QsUUFBVWtDLFFBQVEsaUQsNkJDQXpCLDBCQUdlLFdBQ2R1SCxpQkFDQUQsZ0JBQ0FFLFFBSGMsV0FJYkQsSUFBYUMsVUFDYkYsSUFBWUUsV0FFYkMsVUFQYyxXQVFiRixJQUFhRSxZQUNiSCxJQUFZRyIsImZpbGUiOiJpbnB1dC1qc29uLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDE4KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInByb3AtdHlwZXNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2dldFByb3RvdHlwZU9mXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2tcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm5cIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbmhlcml0c1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzXCIpOyIsImV4cG9ydCBkZWZhdWx0IHtcbiAgICBcbn0iLCJleHBvcnQgZGVmYXVsdCB7XG4gICAgcGFyYWdyYXBoSGFzSW5kZW50U2V0dGluZygpe1xuICAgICAgICByZXR1cm4gISF0aGlzLiR0YXJnZXQuYXR0cihcImluZGVudFwiKVxuICAgIH0sXG5cbiAgICBiYWNrc3BhY2VfYXRfYmVnaW5uaW5nX29mX3RleHQoKXtcbiAgICAgICAgdGhpcy5iYWNrc3BhY2VfYXRfYmVnaW5uaW5nKC4uLmFyZ3VtZW50cylcbiAgICB9LCBcbi8qXG4gICAgYmFja3NwYWNlX2F0X2JlZ2lubmluZ19vZl91cF90b19udW1iZXJpbmdfcGFyYWdyYXBoKCl7XG4gICAgICAgIGNvbnN0IHA9dGhpcy50YXJnZXQuY2xvc2VzdChgd1xcXFw6cGApXG4gICAgICAgIGNvbnN0IHBQcj1wLmNoaWxkcmVuKFwid1xcXFw6cFByXCIpICBcbiAgICAgICAgY29uc3QgbnVtUHI9cFByLmZpbmQoXCJ3XFxcXDpudW1QclwiKVxuICAgICAgICBpZihudW1Qci5sZW5ndGg+MCl7XG4gICAgICAgICAgICBudW1Qci5yZW1vdmUoKVxuICAgICAgICAgICAgdGhpcy5maWxlLnJlbmRlckNoYW5nZWQocClcbiAgICAgICAgfWVsc2UgaWYodGhpcy5maWxlLmRvYy5vZmZpY2VEb2N1bWVudFxuICAgICAgICAgICAgLnN0eWxlcyhgd1xcXFw6c3R5bGVbd1xcXFw6c3R5bGVJZD1cIiR7cFByLmZpbmQoJ3dcXFxcOnBTdHlsZScpLmF0dHIoXCJ3OnZhbFwiKX1cIl1gKVxuICAgICAgICAgICAgLmJhc2VzdChcIjpoYXMod1xcXFw6bnVtUHIsd1xcXFw6aW5kKVwiKVxuICAgICAgICAgICAgLmxlbmd0aD4wKXtcbiAgICAgICAgICAgIHBQci5maW5kKCd3XFxcXDpwU3R5bGUnKS5yZW1vdmUoKVxuICAgICAgICAgICAgdGhpcy5maWxlLnJlbmRlckNoYW5nZWQocClcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdzaG91bGQgbm90IGJlIGhlcmUnKVxuICAgICAgICB9ICAgIFxuICAgIH0sXG5cbiAgICBiYWNrc3BhY2VfYXRfYmVnaW5uaW5nX29mX3VwX3RvX2luZGVudF9wYXJhZ3JhcGgoKXtcbiAgICAgICAgY29uc3QgcD10aGlzLnRhcmdldC5jbG9zZXN0KGB3XFxcXDpwYClcbiAgICAgICAgY29uc3QgaW5kPXAuY2hpbGRyZW4oXCJ3XFxcXDpwUHJcIikuZmluZChcIndcXFxcOmluZFwiKSAgXG4gICAgICAgIGlmKHBhcnNlSW50KGluZC5hdHRyKFwidzpoYW5naW5nXCIpfHwwKT4wIHx8IFxuICAgICAgICAgICAgcGFyc2VJbnQoaW5kLmF0dHIoXCJ3OmZpcnN0TGluZVwiKXx8MCk+MCl7XG4gICAgICAgICAgICBpbmQuYXR0cihcInc6aGFuZ2luZ1wiLFwiMFwiKVxuICAgICAgICAgICAgaW5kLmF0dHIoXCJ3OmZpcnN0TGluZVwiLFwiMFwiKVxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIGluZC5yZW1vdmUoKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlsZS5yZW5kZXJDaGFuZ2VkKHApXG4gICAgfSxcblxuICAgIGJhY2tzcGFjZV9hdF9lbmRfb2ZfaW1hZ2UoKXtcbiAgICAgICAgY29uc3QgcklkPXRoaXMuJHRhcmdldC5jbG9zZXN0KCdydW4nKS5hdHRyKCdpZCcpXG4gICAgICAgIHRoaXMuY3Vyc29yQXQocklkLDAsIHJJZCwxLCB1bmRlZmluZWQsIGZhbHNlKVxuICAgICAgICB0aGlzLnJlbW92ZSgpICAgXG4gICAgfSxcblxuICAgIGJhY2tzcGFjZV9hdF9lbXB0eV9ydW4oKXtcbiAgICAgICAgY29uc3Qge2lkfT10aGlzLnNlbGVjdGlvbi5zdGFydFxuICAgICAgICB0cnl7XG4gICAgICAgICAgICB0aGlzLmJhY2tzcGFjZV9hdF9lbXB0eSguLi5hcmd1bWVudHMpXG4gICAgICAgIH1maW5hbGx5e1xuICAgICAgICAgICAgdGhpcy5maWxlLmdldE5vZGUoaWQpLnJlbW92ZSgpXG4gICAgICAgICAgICB0aGlzLiQoJyMnK2lkKS5yZW1vdmUoKVxuICAgICAgICB9XG4gICAgfSxcbiAgICBiYWNrc3BhY2VfYXRfYmVnaW5uaW5nX29mX3VwX3RvX3J1bigpe1xuICAgICAgICB0aGlzLmJhY2tzcGFjZV9hdF9iZWdpbm5pbmcoLi4uYXJndW1lbnRzKVxuICAgIH0sIFxuICAgICovICAgICAgXG59XG4iLCJpbXBvcnQge0lucHV0fSBmcm9tIFwid2UtZWRpdFwiXG5cbmltcG9ydCB0eXBlIGZyb20gXCIuL3R5cGVcIlxuaW1wb3J0IGJhY2tzcGFjZSBmcm9tIFwiLi9iYWNrc3BhY2VcIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBfXyQxIGV4dGVuZHMgSW5wdXQuRWRpdGFibGUuRXZlbnRIYW5kbGVyLnhtbHtcbiAgICBjb25zdHJ1Y3Rvcigpe1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpXG4gICAgICAgIHRoaXMuUFI9XCJcIlxuICAgICAgICB0aGlzLlBBUkFHUkFQSD1cInBhcmFncmFwaFwiXG4gICAgICAgIHRoaXMuVEVYVD1cInRleHRcIlxuICAgICAgICB0aGlzLklubGluZUNvbnRhaW5lcnM9XCJcIlxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsdHlwZSwgYmFja3NwYWNlKVxuICAgIH1cblxuICAgIGNyZWF0ZV9maXJzdF9wYXJhZ3JhcGgoKXtcbiAgICAgICAgY29uc3QgJGJvZHk9dGhpcy5maWxlLiQoJ3NlY3Rpb24nKS5wcmVwZW5kKGA8cGFyYWdyYXBoPjx0ZXh0Lz48L3BhcmFncmFwaD5gKVxuICAgICAgICBjb25zdCBhPXRoaXMuZmlsZS5yZW5kZXJDaGFuZ2VkKCRib2R5LmNoaWxkcmVuKCkuZmlyc3QoKSlcbiAgICAgICAgdGhpcy4kKCkuZmluZEZpcnN0KCdzZWN0aW9uJykucHJlcGVuZChgIyR7YS5pZH1gKVxuICAgICAgICB0aGlzLmN1cnNvckF0KGEuaWQsMClcbiAgICB9XG59IiwiaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50fSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5cbmV4cG9ydCBkZWZhdWx0ICh7UGFyYWdyYXBofSk9PmNsYXNzIF9fJDEgZXh0ZW5kcyBDb21wb25lbnR7XG4gICAgc3RhdGljIGRpc3BsYXlOYW1lPVwicGFyYWdyYXBoXCJcbiAgICBzdGF0aWMgY29udGV4dFR5cGVzPXtcbiAgICAgICAgZGVmYXVsdFN0eWxlOlByb3BUeXBlcy5zaGFwZSh7XG5cdFx0XHRmb250czpQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdFx0c2l6ZTpQcm9wVHlwZXMubnVtYmVyLFxuXHRcdFx0Ym9sZDogUHJvcFR5cGVzLmJvb2wsXG5cdFx0XHRpdGFsaWM6IFByb3BUeXBlcy5ib29sLFxuXHRcdH0pXG4gICAgfVxuXG4gICAgc3RhdGljIGNoaWxkQ29udGV4dFR5cGVzPXtcbiAgICAgICAgZm9udHM6IFByb3BUeXBlcy5zdHJpbmcsXG5cdFx0c2l6ZTogUHJvcFR5cGVzLm51bWJlcixcblx0XHRjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcblx0XHRib2xkOiBQcm9wVHlwZXMuYm9vbCxcblx0XHRpdGFsaWM6IFByb3BUeXBlcy5ib29sXG4gICAgfVxuXG4gICAgZ2V0Q2hpbGRDb250ZXh0KCl7XG4gICAgICAgIHJldHVybiB0aGlzLmdldERlZmF1bHRTdHlsZSgpXG4gICAgfVxuXG4gICAgZ2V0RGVmYXVsdFN0eWxlKCl7XG4gICAgICAgIHJldHVybiB7Li4uKHRoaXMuY29udGV4dC5kZWZhdWx0U3R5bGV8fHt9KSwgLi4uKHRoaXMucHJvcHMuZGVmYXVsdFN0eWxlfHx7fSl9XG4gICAgfVxuXG4gICAgcmVuZGVyKCl7XG4gICAgICAgIGNvbnN0IHtkZWZhdWx0U3R5bGUsIC4uLnByb3BzfT10aGlzLnByb3BzXG4gICAgICAgIHJldHVybiA8UGFyYWdyYXBoIGRlZmF1bHRTdHlsZT17dGhpcy5nZXREZWZhdWx0U3R5bGUoKX0gey4uLnByb3BzfS8+XG4gICAgfVxufVxuIiwiaW1wb3J0IERvY3VtZW50IGZyb20gXCIuL2RvY3VtZW50XCJcbmltcG9ydCBQYXJhZ3JhcGggZnJvbSBcIi4vcGFyYWdyYXBoXCJcbmltcG9ydCBUZXh0IGZyb20gXCIuL3RleHRcIlxuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgRG9jdW1lbnQsXG4gICAgUGFyYWdyYXBoLFxuICAgIFRleHRcbn1cbiIsImltcG9ydCBSZWFjdCwge0NvbXBvbmVudH0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuXG5leHBvcnQgZGVmYXVsdCAoe0RvY3VtZW50LCBDb250YWluZXIsRnJhbWV9KT0+Y2xhc3MgX18kMSBleHRlbmRzIENvbXBvbmVudHtcbiAgICBzdGF0aWMgZGlzcGxheU5hbWU9XCJkb2N1bWVudFwiXG4gICAgc3RhdGljIHByb3BUeXBlcz17XG4gICAgICAgIGRlZmF1bHRTdHlsZTpQcm9wVHlwZXMuc2hhcGUoe1xuXHRcdFx0Zm9udHM6UHJvcFR5cGVzLnN0cmluZyxcblx0XHRcdHNpemU6UHJvcFR5cGVzLm51bWJlcixcblx0XHRcdGJvbGQ6IFByb3BUeXBlcy5ib29sLFxuXHRcdFx0aXRhbGljOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgICAgICAgIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdH0pXG4gICAgfVxuXG4gICAgc3RhdGljIGNoaWxkQ29udGV4dFR5cGVzPXtcbiAgICAgICAgZGVmYXVsdFN0eWxlOlByb3BUeXBlcy5zaGFwZSh7XG5cdFx0XHRmb250czpQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdFx0c2l6ZTpQcm9wVHlwZXMubnVtYmVyLFxuXHRcdFx0Ym9sZDogUHJvcFR5cGVzLmJvb2wsXG5cdFx0XHRpdGFsaWM6IFByb3BUeXBlcy5ib29sLFxuICAgICAgICAgICAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG5cdFx0fSlcbiAgICB9XG5cbiAgICBnZXRDaGlsZENvbnRleHQoKXtcbiAgICAgICAgcmV0dXJue1xuICAgICAgICAgICAgZGVmYXVsdFN0eWxlOnRoaXMucHJvcHMuZGVmYXVsdFN0eWxlXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW5kZXIoKXtcbiAgICAgICAgY29uc3Qge2RlZmF1bHRTdHlsZSwgLi4ucHJvcHN9PXRoaXMucHJvcHNcbiAgICAgICAgcmV0dXJuIDxEb2N1bWVudCB7Li4ucHJvcHN9Lz5cbiAgICB9XG59XG4iLCJpbXBvcnQgUmVhY3QsIHtDb21wb25lbnR9IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcblxuZXhwb3J0IGRlZmF1bHQgKHtUZXh0fSk9PmNsYXNzIF9fJDEgZXh0ZW5kcyBDb21wb25lbnR7XG4gICAgc3RhdGljIGRpc3BsYXlOYW1lPVwidGV4dFwiXG4gICAgc3RhdGljIGNvbnRleHRUeXBlcz17XG4gICAgICAgIGZvbnRzOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdHNpemU6IFByb3BUeXBlcy5udW1iZXIsXG5cdFx0Y29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG5cdFx0Ym9sZDogUHJvcFR5cGVzLmJvb2wsXG5cdFx0aXRhbGljOiBQcm9wVHlwZXMuYm9vbCxcbiAgICB9XG5cbiAgICByZW5kZXIoKXtcbiAgICAgICAgY29uc3Qge2ZvbnRzLHNpemUsY29sb3IsYm9sZCxpdGFsaWN9PXRoaXMuY29udGV4dFxuICAgICAgICByZXR1cm4gPFRleHQgey4uLntmb250cyxzaXplLGNvbG9yLGJvbGQsaXRhbGljfX0gey4uLnRoaXMucHJvcHN9Lz5cbiAgICB9XG59XG4iLCJpbXBvcnQge1JlYWRhYmxlfSBmcm9tIFwicmVhZGFibGUtc3RyZWFtXCJcbmltcG9ydCBjaGVlciBmcm9tIFwiY2hlZXJpb1wiXG5pbXBvcnQge1BhcnNlciwgRG9tSGFuZGxlcn0gZnJvbSBcImh0bWxwYXJzZXIyXCJcbmltcG9ydCB7dHJhbnNhY3RpZnlDaGVlcmlvLElucHV0fSBmcm9tIFwid2UtZWRpdFwiXG5pbXBvcnQgUmVkdWNlciBmcm9tIFwiLi9ldmVudFwiXG5pbXBvcnQgRG9tIGZyb20gXCIuL3JlbmRlclwiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIF9fJDEgZXh0ZW5kcyBJbnB1dC5FZGl0YWJsZXtcbiAgICBzdGF0aWMgc3VwcG9ydChmaWxlKXtcblx0XHRpZighZmlsZSkvL2ZvciBpbnN0YWxsZXJcblx0XHRcdHJldHVybiB0cnVlXG5cblx0XHRjb25zdCB7ZGF0YSwgbmFtZSwgZXh0LCB0eXBlfT1maWxlXG5cdFx0aWYoZXh0ICYmIGV4dD09XCJ4bWxcIilcblx0XHRcdHJldHVybiB0cnVlXG5cblx0XHRpZihuYW1lICYmIG5hbWUuZW5kc1dpdGgoXCIueG1sXCIpKVxuXHRcdFx0cmV0dXJuIHRydWVcblxuXHRcdGlmKHR5cGUgJiYgdHlwZT09XCJkb2N1bWVudFwiKVxuXHRcdFx0cmV0dXJuIHRydWVcblx0XHRyZXR1cm4gZmFsc2Vcblx0fVxuXG5cdHN0YXRpYyBkZWZhdWx0UHJvcHM9e1xuXHRcdHR5cGU6XCJ4bWxcIixcblx0XHRleHQ6XCJ4bWxcIixcblx0XHRuYW1lOlwiV2UtRWRpdCBYTUwgZG9jdW1lbnRcIixcblx0XHRtaW1lVHlwZTpcImFwcGxpY2F0aW9uL3htbFwiXG5cdH1cblx0XG5cdHN0YXRpYyBSZWR1Y2VyPVJlZHVjZXJcblx0c3RhdGljIEhPQ3M9RG9tXG4gICAgXG4gICAgZGF0YVRvRG9tKGRhdGEpe1xuICAgICAgICBjb25zdCBoYW5kbGVyPW5ldyBDb250ZW50RG9tSGFuZGxlcih7eG1sTW9kZTp0cnVlLGRlY29kZUVudGl0aWVzOiBmYWxzZX0pXG4gICAgICAgIG5ldyBQYXJzZXIoaGFuZGxlcix7fSkuZW5kKGRhdGEpXG4gICAgICAgIHJldHVybiBoYW5kbGVyLmRvbVxuICAgIH1cblxuICAgIG5vZGVUb1N0cmluZyhub2RlKXtcbiAgICAgICAgcmV0dXJuIG5vZGUudG9YbWwoKVxuICAgIH1cblxuICAgIHBhcnNlKHtkYXRhLCAuLi5wcm9wc30pe1xuXHRcdHRoaXMucHJvcHM9ey4uLnByb3BzLHN1cHBvcnRQYWdpbmF0aW9uOnRydWV9XG5cdFx0Y29uc3QgZG9jPWNoZWVyLmxvYWQodGhpcy5kYXRhVG9Eb20oZGF0YSkse3htbE1vZGU6dHJ1ZSxkZWNvZGVFbnRpdGllczogZmFsc2V9KVxuXHRcdHRyYW5zYWN0aWZ5Q2hlZXJpbyhkb2MpXG5cdFx0cmV0dXJuIGRvY1xuXHR9XG5cblx0c3RyZWFtKCl7XG5cdFx0Y29uc3Qgc3RyZWFtPW5ldyBSZWFkYWJsZSgpXG5cdFx0c3RyZWFtLnB1c2godGhpcy5ub2RlVG9TdHJpbmcodGhpcy5kb2Mucm9vdCgpKSlcblx0XHRzdHJlYW0ucHVzaChudWxsKVxuXHRcdHJldHVybiBzdHJlYW1cblx0fVxuXG5cdHJlbmRlcihjcmVhdGVFbGVtZW50LCBjb21wb25lbnRzKXtcblx0XHRjb25zdCBVbmtub3duQ29tcG9uZW50cz17fVxuXHRcdGNvbnN0IHJlbmRlck5vZGU9KG5vZGUsY3JlYXRlRWxlbWVudCk9Pntcblx0XHRcdGNvbnN0IHtjaGlsZHJlbiwgbmFtZTp0eXBlLCBhdHRyaWJzOnByb3BzLCBpc1RleHQ9dHlwZT09XCJ0ZXh0XCJ9PW5vZGVcblx0XHRcdGNvbnN0IFRZUEU9aXNUZXh0ID8gXCJUZXh0XCIgOiB0eXBlWzBdLnRvVXBwZXJDYXNlKCkrdHlwZS5zdWJzdHIoMSlcblx0XHRcdGxldCBUeXBlPWNvbXBvbmVudHNbVFlQRV18fFVua25vd25Db21wb25lbnRzW1RZUEVdXG5cdFx0XHRpZighVHlwZSl7XG5cdFx0XHRcdFVua25vd25Db21wb25lbnRzW1RZUEVdPVR5cGU9Y2xhc3N7c3RhdGljIGRpc3BsYXlOYW1lPXR5cGV9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gY3JlYXRlRWxlbWVudChUeXBlLHByb3BzfHx7fSxcblx0XHRcdFx0aXNUZXh0ID8gKCFBcnJheS5pc0FycmF5KGNoaWxkcmVuKSA/IGNoaWxkcmVuLmRhdGEgOiAoY2hpbGRyZW5bMF18fHt9KS5kYXRhKSA6IFxuXHRcdFx0XHRcdChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSA/IGNoaWxkcmVuLm1hcChhPT5yZW5kZXJOb2RlKGEsY3JlYXRlRWxlbWVudCkpLmZpbHRlcihhPT4hIWEpIDogXG5cdFx0XHRcdFx0XHQoISFjaGlsZHJlbiA/IHJlbmRlck5vZGUoYSxjcmVhdGVFbGVtZW50KSA6IGNoaWxkcmVuKVxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdG5vZGUpXG5cdFx0fVxuXG5cdFx0dGhpcy5yZW5kZXJOb2RlPShub2RlLGNyZWF0ZUVsZW1lbnQpPT5yZW5kZXJOb2RlKHRoaXMuX3Vud3JhcChub2RlKSxjcmVhdGVFbGVtZW50KVxuXG5cdFx0cmV0dXJuIHJlbmRlck5vZGUodGhpcy5kb2Mucm9vdCgpLmNoaWxkcmVuKCkuZ2V0KDApLGNyZWF0ZUVsZW1lbnQpXG5cdH1cblxuXHRfdW53cmFwKG4pe1xuXHRcdHJldHVybiBuICYmIChcImNoZWVyaW9cIiBpbiBuKSAmJiBuLmdldCgwKSB8fCBuXG5cdH1cblx0XG5cdG1ha2VJZChub2RlLCB1aWQpe1xuXHRcdGlmKCFub2RlKXtcblx0XHRcdGRlYnVnZ2VyXG5cdFx0fVxuXG5cdFx0bm9kZT10aGlzLl91bndyYXAobm9kZSlcblxuXHRcdGlmKHVpZCl7XG5cdFx0XHRkZWZpbmVJZChub2RlLmF0dHJpYnMsdWlkKVxuXHRcdFx0cmV0dXJuIHVpZFxuXHRcdH1cblxuXHRcdGlmKG5vZGUuYXR0cmlicy54eGlkKXtcblx0XHRcdHJldHVybiBub2RlLmF0dHJpYnMueHhpZFxuXHRcdH1cblxuXHRcdGNvbnN0IGlkPXVpZHx8KG5vZGUubmFtZT09XCJkb2N1bWVudFwiJiZcInJvb3RcIil8fHN1cGVyLm1ha2VJZCgpXG5cdFx0ZGVmaW5lSWQobm9kZS5hdHRyaWJzLGlkKVxuXG5cdFx0cmV0dXJuIGlkXG5cdH1cblxuXHRnZXROb2RlKGlkKXtcblx0XHRjb25zdCBub2RlPXRoaXMuZG9jKGBbeHhpZD1cIiR7aWR9XCJdYClcblxuXHRcdGlmKG5vZGUubGVuZ3RoIT0xKXtcblx0XHRcdGRlYnVnZ2VyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYGNhbid0IGZpbmQgbm9kZVtpZD0ke3VpZH1dYClcblx0XHR9XG5cdFx0cmV0dXJuIG5vZGVcblx0fVxuXG5cdCQoKXtcblx0XHRyZXR1cm4gdGhpcy5kb2MoLi4uYXJndW1lbnRzKVxuXHR9XG59XG5cbmNsYXNzIENvbnRlbnREb21IYW5kbGVyIGV4dGVuZHMgRG9tSGFuZGxlcntcblx0X2FkZERvbUVsZW1lbnQoZWwpe1xuXHRcdGlmKGVsLnR5cGU9PVwidGV4dFwiICYmIChlbC5kYXRhWzBdPT0nXFxyJyB8fCBlbC5kYXRhWzBdPT0nXFxuJykpXG5cdFx0XHQ7Ly9yZW1vdmUgZm9ybWF0IHdoaXRlc3BhY2VzXG5cdFx0ZWxzZVxuXHRcdFx0cmV0dXJuIHN1cGVyLl9hZGREb21FbGVtZW50KGVsKVxuXHR9XG59XG5cblxuY29uc3QgZGVmaW5lSWQ9KHRhcmdldCxpZCk9Pk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsXCJ4eGlkXCIse1xuXHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHR3cml0YWJsZTogZmFsc2UsXG5cdHZhbHVlOiBpZFxufSkiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ3ZS1lZGl0XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXh0ZW5kc1wiKTsiLCJpbXBvcnQgWE1MRG9jdW1lbnQgZnJvbSBcIi4veG1sXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgX18kMSBleHRlbmRzIFhNTERvY3VtZW50e1xuICAgIHN0YXRpYyBzdXBwb3J0KGZpbGUpe1xuXHRcdGlmKCFmaWxlKS8vZm9yIGluc3RhbGxlclxuXHRcdFx0cmV0dXJuIHRydWVcblxuXHRcdGNvbnN0IHtkYXRhLCBuYW1lLCBleHQsIHR5cGV9PWZpbGVcblx0XHRpZihleHQgJiYgZXh0PT1cIndlZC5qc29uXCIpXG5cdFx0XHRyZXR1cm4gdHJ1ZVxuXG5cdFx0aWYobmFtZSAmJiBuYW1lLmVuZHNXaXRoKFwiLndlZC5qc29uXCIpKVxuXHRcdFx0cmV0dXJuIHRydWVcblxuXHRcdGlmKHR5cGUgJiYgdHlwZT09XCJkb2N1bWVudFwiKVxuXHRcdFx0cmV0dXJuIHRydWVcblx0XHRyZXR1cm4gZmFsc2Vcblx0fVxuXG5cdHN0YXRpYyBkZWZhdWx0UHJvcHM9e1xuXHRcdHR5cGU6XCJqc29uXCIsXG5cdFx0ZXh0OlwianNvblwiLFxuXHRcdG5hbWU6XCJXZS1FZGl0IGpzb24gZG9jdW1lbnRcIixcblx0XHRtaW1lVHlwZTpcImFwcGxpY2F0aW9uL2pzb25cIlxuICAgIH1cblxuICAgIGRhdGFUb0RvbShkYXRhKXtcbiAgICAgICAgaWYodHlwZW9mKGRhdGEpIT1cInN0cmluZ1wiKXtcbiAgICAgICAgICAgIGRhdGE9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBuZXcgVWludDhBcnJheShkYXRhKSlcbiAgICAgICAgfVxuICAgICAgICBkYXRhPWV2YWwoYChhPT5hKSgke2RhdGF9KWApXG4gICAgICAgIFxuICAgICAgICBjb25zdCB0b05vZGU9KHtjaGlsZHJlbix0eXBlOm5hbWU9XCJ0ZXh0XCIsIHByb3BzfSk9PntcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgYXR0cmliczpwcm9wc3x8e30sIFxuICAgICAgICAgICAgICAgIG5hbWUsIFxuICAgICAgICAgICAgICAgIHR5cGU6XCJ0YWdcIiwgXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46XG4gICAgICAgICAgICAgICAgICAgIG5hbWU9PVwidGV4dFwiID8gW3tkYXRhOmNoaWxkcmVufHxcIlwiLHR5cGU6XCJ0ZXh0XCJ9XSA6IFxuICAgICAgICAgICAgICAgICAgICAgICAgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pID8gY2hpbGRyZW4gOiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoISFjaGlsZHJlbiA/IFtjaGlsZHJlbl0gOiBbXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICkubWFwKHRvTm9kZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY29uc3Qgcm9vdD10b05vZGUoZGF0YSlcblxuICAgICAgICBjb25zdCBjb25uZWN0PShhLHBhcmVudCk9PntcbiAgICAgICAgICAgIGNvbnN0IHNpYmxpbmdzPXBhcmVudCA/IHBhcmVudC5jaGlsZHJlbiA6IFtdXG4gICAgICAgICAgICBjb25zdCBpPXNpYmxpbmdzLmluZGV4T2YoYSlcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGEsIHtcbiAgICAgICAgICAgICAgICBwYXJlbnQsXG4gICAgICAgICAgICAgICAgcHJldjpzaWJsaW5nc1tpLTFdfHxudWxsLFxuICAgICAgICAgICAgICAgIG5leHQ6c2libGluZ3NbaSsxXXx8bnVsbCxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjphLnR5cGU9PVwidGV4dFwiID8gYS5jaGlsZHJlbiA6IGEuY2hpbGRyZW4ubWFwKGI9PmNvbm5lY3QoYixhKSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbm5lY3Qocm9vdClcbiAgICB9XG5cbiAgICBub2RlVG9TdHJpbmcobm9kZSl7XG4gICAgICAgIGNvbnN0IHRvT2JqZWN0PSh7bmFtZTp0eXBlLGF0dHJpYnM6cHJvcHMsY2hpbGRyZW59KT0+e1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgIHByb3BzLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOnR5cGU9PVwidGV4dFwiID8gKGNoaWxkcmVufHx7fSkuZGF0YSA6IChjaGlsZHJlbnx8W10pLm1hcCh0b09iamVjdClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRhPXRvT2JqZWN0KG5vZGUpXG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShkYXRhLChrZXksdmFsdWUpPT57XG5cdFx0XHRyZXR1cm4gdmFsdWVcblx0XHR9LDQpXG4gICAgfVxufSIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZ2V0XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImh0bWxwYXJzZXIyXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWRhYmxlLXN0cmVhbVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjaGVlcmlvXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXNzZXJ0VGhpc0luaXRpYWxpemVkXCIpOyIsImltcG9ydCBKU09ORG9jdW1lbnQgZnJvbSBcIi4vanNvblwiXG5pbXBvcnQgWE1MRG9jdW1lbnQgZnJvbSBcIi4veG1sXCJcblxuZXhwb3J0IGRlZmF1bHQge1xuXHRKU09ORG9jdW1lbnQsXG5cdFhNTERvY3VtZW50LFxuXHRpbnN0YWxsKCl7XG5cdFx0SlNPTkRvY3VtZW50Lmluc3RhbGwoKVxuXHRcdFhNTERvY3VtZW50Lmluc3RhbGwoKVxuXHR9LFxuXHR1bmluc3RhbGwoKXtcblx0XHRKU09ORG9jdW1lbnQudW5pbnN0YWxsKClcblx0XHRYTUxEb2N1bWVudC51bmluc3RhbGwoKVxuXHR9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9
\No newline at end of file