-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy path1822.08c160b5.iframe.bundle.js
3 lines (3 loc) · 72.8 KB
/
1822.08c160b5.iframe.bundle.js
1
2
3
/*! For license information please see 1822.08c160b5.iframe.bundle.js.LICENSE.txt */
(self.webpackChunkblockly_mooc=self.webpackChunkblockly_mooc||[]).push([[1822],{"./node_modules/classnames/index.js":(module,exports)=>{var __WEBPACK_AMD_DEFINE_RESULT__;!function(){"use strict";var hasOwn={}.hasOwnProperty;function classNames(){for(var classes=[],i=0;i<arguments.length;i++){var arg=arguments[i];if(arg){var argType=typeof arg;if("string"===argType||"number"===argType)classes.push(arg);else if(Array.isArray(arg)){if(arg.length){var inner=classNames.apply(null,arg);inner&&classes.push(inner)}}else if("object"===argType){if(arg.toString!==Object.prototype.toString&&!arg.toString.toString().includes("[native code]")){classes.push(arg.toString());continue}for(var key in arg)hasOwn.call(arg,key)&&arg[key]&&classes.push(key)}}}return classes.join(" ")}module.exports?(classNames.default=classNames,module.exports=classNames):void 0===(__WEBPACK_AMD_DEFINE_RESULT__=function(){return classNames}.apply(exports,[]))||(module.exports=__WEBPACK_AMD_DEFINE_RESULT__)}()},"./node_modules/css-loader/dist/runtime/api.js":module=>{"use strict";module.exports=function(cssWithMappingToString){var list=[];return list.toString=function toString(){return this.map((function(item){var content="",needLayer=void 0!==item[5];return item[4]&&(content+="@supports (".concat(item[4],") {")),item[2]&&(content+="@media ".concat(item[2]," {")),needLayer&&(content+="@layer".concat(item[5].length>0?" ".concat(item[5]):""," {")),content+=cssWithMappingToString(item),needLayer&&(content+="}"),item[2]&&(content+="}"),item[4]&&(content+="}"),content})).join("")},list.i=function i(modules,media,dedupe,supports,layer){"string"==typeof modules&&(modules=[[null,modules,void 0]]);var alreadyImportedModules={};if(dedupe)for(var k=0;k<this.length;k++){var id=this[k][0];null!=id&&(alreadyImportedModules[id]=!0)}for(var _k=0;_k<modules.length;_k++){var item=[].concat(modules[_k]);dedupe&&alreadyImportedModules[item[0]]||(void 0!==layer&&(void 0===item[5]||(item[1]="@layer".concat(item[5].length>0?" ".concat(item[5]):""," {").concat(item[1],"}")),item[5]=layer),media&&(item[2]?(item[1]="@media ".concat(item[2]," {").concat(item[1],"}"),item[2]=media):item[2]=media),supports&&(item[4]?(item[1]="@supports (".concat(item[4],") {").concat(item[1],"}"),item[4]=supports):item[4]="".concat(supports)),list.push(item))}},list}},"./node_modules/css-loader/dist/runtime/sourceMaps.js":module=>{"use strict";module.exports=function(item){var content=item[1],cssMapping=item[3];if(!cssMapping)return content;if("function"==typeof btoa){var base64=btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping)))),data="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(base64),sourceMapping="/*# ".concat(data," */"),sourceURLs=cssMapping.sources.map((function(source){return"/*# sourceURL=".concat(cssMapping.sourceRoot||"").concat(source," */")}));return[content].concat(sourceURLs).concat([sourceMapping]).join("\n")}return[content].join("\n")}},"./node_modules/dom-confetti/lib/main.js":(__unused_webpack_module,exports)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.confetti=function confetti(root){var config=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},_Object$assign=Object.assign({},defaults,function backwardPatch(config){!config.stagger&&config.delay&&(config.stagger=config.delay);return config}(config)),elementCount=_Object$assign.elementCount,colors=_Object$assign.colors,width=_Object$assign.width,height=_Object$assign.height,perspective=_Object$assign.perspective,angle=_Object$assign.angle,spread=_Object$assign.spread,startVelocity=_Object$assign.startVelocity,decay=_Object$assign.decay,dragFriction=_Object$assign.dragFriction,duration=_Object$assign.duration,stagger=_Object$assign.stagger,random=_Object$assign.random;root.style.perspective=perspective;var fettis=function createElements(root,elementCount,colors,width,height){return Array.from({length:elementCount}).map((function(_,index){var element=document.createElement("div"),color=colors[index%colors.length];return element.style["background-color"]=color,element.style.width=width,element.style.height=height,element.style.position="absolute",element.style.willChange="transform, opacity",element.style.visibility="hidden",root.appendChild(element),element}))}(root,elementCount,colors,width,height).map((function(element){return{element,physics:randomPhysics(angle,spread,startVelocity,random)}}));return function animate(root,fettis,dragFriction,decay,duration,stagger){var startTime=void 0;return new Promise((function(resolve){function update(time){startTime||(startTime=time);var elapsed=time-startTime,progress=startTime===time?0:(time-startTime)/duration;fettis.slice(0,Math.ceil(elapsed/stagger)).forEach((function(fetti){!function updateFetti(fetti,progress,dragFriction,decay){fetti.physics.x+=Math.cos(fetti.physics.angle2D)*fetti.physics.velocity,fetti.physics.y+=Math.sin(fetti.physics.angle2D)*fetti.physics.velocity,fetti.physics.z+=Math.sin(fetti.physics.angle3D)*fetti.physics.velocity,fetti.physics.wobble+=fetti.physics.wobbleSpeed,decay?fetti.physics.velocity*=decay:fetti.physics.velocity-=fetti.physics.velocity*dragFriction;fetti.physics.y+=3,fetti.physics.tiltAngle+=fetti.physics.tiltAngleSpeed;var _fetti$physics=fetti.physics,x=_fetti$physics.x,y=_fetti$physics.y,z=_fetti$physics.z,tiltAngle=_fetti$physics.tiltAngle,wobble=_fetti$physics.wobble,wobbleX=x+10*Math.cos(wobble),wobbleY=y+10*Math.sin(wobble),transform="translate3d("+wobbleX+"px, "+wobbleY+"px, "+z+"px) rotate3d(1, 1, 1, "+tiltAngle+"rad)";fetti.element.style.visibility="visible",fetti.element.style.transform=transform,fetti.element.style.opacity=1-progress}(fetti,progress,dragFriction,decay)})),time-startTime<duration?requestAnimationFrame(update):(fettis.forEach((function(fetti){if(fetti.element.parentNode===root)return root.removeChild(fetti.element)})),resolve())}requestAnimationFrame(update)}))}(root,fettis,dragFriction,decay,duration,stagger)};function randomPhysics(angle,spread,startVelocity,random){var radAngle=angle*(Math.PI/180),radSpread=spread*(Math.PI/180);return{x:0,y:0,z:0,wobble:10*random(),wobbleSpeed:.1+.1*random(),velocity:.5*startVelocity+random()*startVelocity,angle2D:-radAngle+(.5*radSpread-random()*radSpread),angle3D:-Math.PI/4+random()*(Math.PI/2),tiltAngle:random()*Math.PI,tiltAngleSpeed:.1+.3*random()}}var defaults={angle:90,spread:45,startVelocity:45,elementCount:50,width:"10px",height:"10px",perspective:"",colors:["#a864fd","#29cdff","#78ff44","#ff718d","#fdff6a"],duration:3e3,stagger:0,dragFriction:.1,random:Math.random}},"./node_modules/prop-types/factoryWithThrowingShims.js":(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";var ReactPropTypesSecret=__webpack_require__("./node_modules/prop-types/lib/ReactPropTypesSecret.js");function emptyFunction(){}module.exports=function(){function shim(props,propName,componentName,location,propFullName,secret){if(secret!==ReactPropTypesSecret){var err=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw err.name="Invariant Violation",err}}function getShim(){return shim}shim.isRequired=shim;var ReactPropTypes={array:shim,bool:shim,func:shim,number:shim,object:shim,string:shim,symbol:shim,any:shim,arrayOf:getShim,element:shim,instanceOf:getShim,node:shim,objectOf:getShim,oneOf:getShim,oneOfType:getShim,shape:getShim,exact:getShim};return ReactPropTypes.checkPropTypes=emptyFunction,ReactPropTypes.PropTypes=ReactPropTypes,ReactPropTypes}},"./node_modules/prop-types/index.js":(module,__unused_webpack_exports,__webpack_require__)=>{module.exports=__webpack_require__("./node_modules/prop-types/factoryWithThrowingShims.js")()},"./node_modules/prop-types/lib/ReactPropTypesSecret.js":module=>{"use strict";module.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},"./node_modules/react-dom-confetti/lib/confetti.js":(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){return protoProps&&defineProperties(Constructor.prototype,protoProps),staticProps&&defineProperties(Constructor,staticProps),Constructor}}(),_react=__webpack_require__("./node_modules/react/index.js"),_react2=function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}(_react),_domConfetti=__webpack_require__("./node_modules/dom-confetti/lib/main.js");var style={position:"relative"},Confetti=function(_Component){function Confetti(props){!function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Confetti);var _this=function _possibleConstructorReturn(self,call){if(!self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!call||"object"!=typeof call&&"function"!=typeof call?self:call}(this,(Confetti.__proto__||Object.getPrototypeOf(Confetti)).call(this,props));return _this.setRef=_this.setRef.bind(_this),_this}return function _inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function, not "+typeof superClass);subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:!1,writable:!0,configurable:!0}}),superClass&&(Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass)}(Confetti,_Component),_createClass(Confetti,[{key:"componentDidUpdate",value:function componentDidUpdate(prevProps){!prevProps.active&&this.props.active&&(0,_domConfetti.confetti)(this.container,this.props.config)}},{key:"setRef",value:function setRef(ref){this.container=ref}},{key:"render",value:function render(){return _react2.default.createElement("div",{className:this.props.className,style,ref:this.setRef})}}]),Confetti}(_react.Component);exports.default=Confetti},"./node_modules/react/cjs/react-jsx-runtime.production.min.js":(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";__webpack_require__("./node_modules/object-assign/index.js");var f=__webpack_require__("./node_modules/react/index.js"),g=60103;if(exports.Fragment=60107,"function"==typeof Symbol&&Symbol.for){var h=Symbol.for;g=h("react.element"),exports.Fragment=h("react.fragment")}var m=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,n=Object.prototype.hasOwnProperty,p={key:!0,ref:!0,__self:!0,__source:!0};function q(c,a,k){var b,d={},e=null,l=null;for(b in void 0!==k&&(e=""+k),void 0!==a.key&&(e=""+a.key),void 0!==a.ref&&(l=a.ref),a)n.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:g,type:c,key:e,ref:l,props:d,_owner:m.current}}exports.jsx=q,exports.jsxs=q},"./node_modules/react/jsx-runtime.js":(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";module.exports=__webpack_require__("./node_modules/react/cjs/react-jsx-runtime.production.min.js")},"./node_modules/redux-thunk/lib/index.js":(__unused_webpack_module,exports)=>{"use strict";function createThunkMiddleware(extraArgument){return function(_ref){var dispatch=_ref.dispatch,getState=_ref.getState;return function(next){return function(action){return"function"==typeof action?action(dispatch,getState,extraArgument):next(action)}}}}exports.__esModule=!0;var thunk=createThunkMiddleware();thunk.withExtraArgument=createThunkMiddleware,exports.default=thunk},"./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js":module=>{"use strict";var stylesInDOM=[];function getIndexByIdentifier(identifier){for(var result=-1,i=0;i<stylesInDOM.length;i++)if(stylesInDOM[i].identifier===identifier){result=i;break}return result}function modulesToDom(list,options){for(var idCountMap={},identifiers=[],i=0;i<list.length;i++){var item=list[i],id=options.base?item[0]+options.base:item[0],count=idCountMap[id]||0,identifier="".concat(id," ").concat(count);idCountMap[id]=count+1;var indexByIdentifier=getIndexByIdentifier(identifier),obj={css:item[1],media:item[2],sourceMap:item[3],supports:item[4],layer:item[5]};if(-1!==indexByIdentifier)stylesInDOM[indexByIdentifier].references++,stylesInDOM[indexByIdentifier].updater(obj);else{var updater=addElementStyle(obj,options);options.byIndex=i,stylesInDOM.splice(i,0,{identifier,updater,references:1})}identifiers.push(identifier)}return identifiers}function addElementStyle(obj,options){var api=options.domAPI(options);api.update(obj);return function updater(newObj){if(newObj){if(newObj.css===obj.css&&newObj.media===obj.media&&newObj.sourceMap===obj.sourceMap&&newObj.supports===obj.supports&&newObj.layer===obj.layer)return;api.update(obj=newObj)}else api.remove()}}module.exports=function(list,options){var lastIdentifiers=modulesToDom(list=list||[],options=options||{});return function update(newList){newList=newList||[];for(var i=0;i<lastIdentifiers.length;i++){var index=getIndexByIdentifier(lastIdentifiers[i]);stylesInDOM[index].references--}for(var newLastIdentifiers=modulesToDom(newList,options),_i=0;_i<lastIdentifiers.length;_i++){var _index=getIndexByIdentifier(lastIdentifiers[_i]);0===stylesInDOM[_index].references&&(stylesInDOM[_index].updater(),stylesInDOM.splice(_index,1))}lastIdentifiers=newLastIdentifiers}}},"./node_modules/style-loader/dist/runtime/insertBySelector.js":module=>{"use strict";var memo={};module.exports=function insertBySelector(insert,style){var target=function getTarget(target){if(void 0===memo[target]){var styleTarget=document.querySelector(target);if(window.HTMLIFrameElement&&styleTarget instanceof window.HTMLIFrameElement)try{styleTarget=styleTarget.contentDocument.head}catch(e){styleTarget=null}memo[target]=styleTarget}return memo[target]}(insert);if(!target)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");target.appendChild(style)}},"./node_modules/style-loader/dist/runtime/insertStyleElement.js":module=>{"use strict";module.exports=function insertStyleElement(options){var element=document.createElement("style");return options.setAttributes(element,options.attributes),options.insert(element,options.options),element}},"./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js":(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";module.exports=function setAttributesWithoutAttributes(styleElement){var nonce=__webpack_require__.nc;nonce&&styleElement.setAttribute("nonce",nonce)}},"./node_modules/style-loader/dist/runtime/styleDomAPI.js":module=>{"use strict";module.exports=function domAPI(options){var styleElement=options.insertStyleElement(options);return{update:function update(obj){!function apply(styleElement,options,obj){var css="";obj.supports&&(css+="@supports (".concat(obj.supports,") {")),obj.media&&(css+="@media ".concat(obj.media," {"));var needLayer=void 0!==obj.layer;needLayer&&(css+="@layer".concat(obj.layer.length>0?" ".concat(obj.layer):""," {")),css+=obj.css,needLayer&&(css+="}"),obj.media&&(css+="}"),obj.supports&&(css+="}");var sourceMap=obj.sourceMap;sourceMap&&"undefined"!=typeof btoa&&(css+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))))," */")),options.styleTagTransform(css,styleElement,options.options)}(styleElement,options,obj)},remove:function remove(){!function removeStyleElement(styleElement){if(null===styleElement.parentNode)return!1;styleElement.parentNode.removeChild(styleElement)}(styleElement)}}}},"./node_modules/style-loader/dist/runtime/styleTagTransform.js":module=>{"use strict";module.exports=function styleTagTransform(css,styleElement){if(styleElement.styleSheet)styleElement.styleSheet.cssText=css;else{for(;styleElement.firstChild;)styleElement.removeChild(styleElement.firstChild);styleElement.appendChild(document.createTextNode(css))}}},"../frontend/node_modules/classnames/index.js":(module,exports)=>{var __WEBPACK_AMD_DEFINE_RESULT__;!function(){"use strict";var hasOwn={}.hasOwnProperty;function classNames(){for(var classes="",i=0;i<arguments.length;i++){var arg=arguments[i];arg&&(classes=appendClass(classes,parseValue(arg)))}return classes}function parseValue(arg){if("string"==typeof arg||"number"==typeof arg)return arg;if("object"!=typeof arg)return"";if(Array.isArray(arg))return classNames.apply(null,arg);if(arg.toString!==Object.prototype.toString&&!arg.toString.toString().includes("[native code]"))return arg.toString();var classes="";for(var key in arg)hasOwn.call(arg,key)&&arg[key]&&(classes=appendClass(classes,key));return classes}function appendClass(value,newClass){return newClass?value?value+" "+newClass:value+newClass:value}module.exports?(classNames.default=classNames,module.exports=classNames):void 0===(__WEBPACK_AMD_DEFINE_RESULT__=function(){return classNames}.apply(exports,[]))||(module.exports=__WEBPACK_AMD_DEFINE_RESULT__)}()}}]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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VUFDNUIsT0FBS0EsU0FJRC9PLE1BQ0lBLE1BQVEsSUFBTStPLFNBR2YvTyxNQUFRK08sU0FQUC9PLEtBUVQsQ0FFcUNuQyxPQUFPQyxTQUMzQ3BCLFdBQVdxQixRQUFVckIsV0FDckJtQixPQUFPQyxRQUFVcEIsaUJBS2hCLEtBRndCLDhCQUFGLFdBQ3RCLE9BQU9BLFVBQ1AsZ0JBRm9CLE9BRXBCLDZDQUlILENBckVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvZG9tLWNvbmZldHRpL2xpYi9tYWluLmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcy5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS1jb25mZXR0aS9saWIvY29uZmV0dGkuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL3JlYWN0L2Nqcy9yZWFjdC1qc3gtcnVudGltZS5wcm9kdWN0aW9uLm1pbi5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvcmVhY3QvanN4LXJ1bnRpbWUuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL3JlZHV4LXRodW5rL2xpYi9pbmRleC5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0QnlTZWxlY3Rvci5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRTdHlsZUVsZW1lbnQuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzLmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlVGFnVHJhbnNmb3JtLmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uLi9mcm9udGVuZC9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcblx0Q29weXJpZ2h0IChjKSAyMDE4IEplZCBXYXRzb24uXG5cdExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAoTUlUKSwgc2VlXG5cdGh0dHA6Ly9qZWR3YXRzb24uZ2l0aHViLmlvL2NsYXNzbmFtZXNcbiovXG4vKiBnbG9iYWwgZGVmaW5lICovXG5cbihmdW5jdGlvbiAoKSB7XG5cdCd1c2Ugc3RyaWN0JztcblxuXHR2YXIgaGFzT3duID0ge30uaGFzT3duUHJvcGVydHk7XG5cdHZhciBuYXRpdmVDb2RlU3RyaW5nID0gJ1tuYXRpdmUgY29kZV0nO1xuXG5cdGZ1bmN0aW9uIGNsYXNzTmFtZXMoKSB7XG5cdFx0dmFyIGNsYXNzZXMgPSBbXTtcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgYXJnID0gYXJndW1lbnRzW2ldO1xuXHRcdFx0aWYgKCFhcmcpIGNvbnRpbnVlO1xuXG5cdFx0XHR2YXIgYXJnVHlwZSA9IHR5cGVvZiBhcmc7XG5cblx0XHRcdGlmIChhcmdUeXBlID09PSAnc3RyaW5nJyB8fCBhcmdUeXBlID09PSAnbnVtYmVyJykge1xuXHRcdFx0XHRjbGFzc2VzLnB1c2goYXJnKTtcblx0XHRcdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG5cdFx0XHRcdGlmIChhcmcubGVuZ3RoKSB7XG5cdFx0XHRcdFx0dmFyIGlubmVyID0gY2xhc3NOYW1lcy5hcHBseShudWxsLCBhcmcpO1xuXHRcdFx0XHRcdGlmIChpbm5lcikge1xuXHRcdFx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGlubmVyKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoYXJnVHlwZSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0aWYgKGFyZy50b1N0cmluZyAhPT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyAmJiAhYXJnLnRvU3RyaW5nLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ1tuYXRpdmUgY29kZV0nKSkge1xuXHRcdFx0XHRcdGNsYXNzZXMucHVzaChhcmcudG9TdHJpbmcoKSk7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmb3IgKHZhciBrZXkgaW4gYXJnKSB7XG5cdFx0XHRcdFx0aWYgKGhhc093bi5jYWxsKGFyZywga2V5KSAmJiBhcmdba2V5XSkge1xuXHRcdFx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGtleSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNsYXNzZXMuam9pbignICcpO1xuXHR9XG5cblx0aWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG5cdFx0Y2xhc3NOYW1lcy5kZWZhdWx0ID0gY2xhc3NOYW1lcztcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGNsYXNzTmFtZXM7XG5cdH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZGVmaW5lLmFtZCA9PT0gJ29iamVjdCcgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIHJlZ2lzdGVyIGFzICdjbGFzc25hbWVzJywgY29uc2lzdGVudCB3aXRoIG5wbSBwYWNrYWdlIG5hbWVcblx0XHRkZWZpbmUoJ2NsYXNzbmFtZXMnLCBbXSwgZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIGNsYXNzTmFtZXM7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0d2luZG93LmNsYXNzTmFtZXMgPSBjbGFzc05hbWVzO1xuXHR9XG59KCkpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qXG4gIE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG4gIEF1dGhvciBUb2JpYXMgS29wcGVycyBAc29rcmFcbiovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKSB7XG4gIHZhciBsaXN0ID0gW107IC8vIHJldHVybiB0aGUgbGlzdCBvZiBtb2R1bGVzIGFzIGNzcyBzdHJpbmdcblxuICBsaXN0LnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICB2YXIgY29udGVudCA9IFwiXCI7XG4gICAgICB2YXIgbmVlZExheWVyID0gdHlwZW9mIGl0ZW1bNV0gIT09IFwidW5kZWZpbmVkXCI7XG5cbiAgICAgIGlmIChpdGVtWzRdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChpdGVtWzRdLCBcIikge1wiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGl0ZW1bMl0pIHtcbiAgICAgICAgY29udGVudCArPSBcIkBtZWRpYSBcIi5jb25jYXQoaXRlbVsyXSwgXCIge1wiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5lZWRMYXllcikge1xuICAgICAgICBjb250ZW50ICs9IFwiQGxheWVyXCIuY29uY2F0KGl0ZW1bNV0ubGVuZ3RoID4gMCA/IFwiIFwiLmNvbmNhdChpdGVtWzVdKSA6IFwiXCIsIFwiIHtcIik7XG4gICAgICB9XG5cbiAgICAgIGNvbnRlbnQgKz0gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtKTtcblxuICAgICAgaWYgKG5lZWRMYXllcikge1xuICAgICAgICBjb250ZW50ICs9IFwifVwiO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXRlbVsyXSkge1xuICAgICAgICBjb250ZW50ICs9IFwifVwiO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXRlbVs0XSkge1xuICAgICAgICBjb250ZW50ICs9IFwifVwiO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGVudDtcbiAgICB9KS5qb2luKFwiXCIpO1xuICB9OyAvLyBpbXBvcnQgYSBsaXN0IG9mIG1vZHVsZXMgaW50byB0aGUgbGlzdFxuXG5cbiAgbGlzdC5pID0gZnVuY3Rpb24gaShtb2R1bGVzLCBtZWRpYSwgZGVkdXBlLCBzdXBwb3J0cywgbGF5ZXIpIHtcbiAgICBpZiAodHlwZW9mIG1vZHVsZXMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIG1vZHVsZXMgPSBbW251bGwsIG1vZHVsZXMsIHVuZGVmaW5lZF1dO1xuICAgIH1cblxuICAgIHZhciBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzID0ge307XG5cbiAgICBpZiAoZGVkdXBlKSB7XG4gICAgICBmb3IgKHZhciBrID0gMDsgayA8IHRoaXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgdmFyIGlkID0gdGhpc1trXVswXTtcblxuICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgIGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaWRdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIF9rID0gMDsgX2sgPCBtb2R1bGVzLmxlbmd0aDsgX2srKykge1xuICAgICAgdmFyIGl0ZW0gPSBbXS5jb25jYXQobW9kdWxlc1tfa10pO1xuXG4gICAgICBpZiAoZGVkdXBlICYmIGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaXRlbVswXV0pIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgbGF5ZXIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpdGVtWzVdID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgaXRlbVs1XSA9IGxheWVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1bMV0gPSBcIkBsYXllclwiLmNvbmNhdChpdGVtWzVdLmxlbmd0aCA+IDAgPyBcIiBcIi5jb25jYXQoaXRlbVs1XSkgOiBcIlwiLCBcIiB7XCIpLmNvbmNhdChpdGVtWzFdLCBcIn1cIik7XG4gICAgICAgICAgaXRlbVs1XSA9IGxheWVyO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChtZWRpYSkge1xuICAgICAgICBpZiAoIWl0ZW1bMl0pIHtcbiAgICAgICAgICBpdGVtWzJdID0gbWVkaWE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQG1lZGlhIFwiLmNvbmNhdChpdGVtWzJdLCBcIiB7XCIpLmNvbmNhdChpdGVtWzFdLCBcIn1cIik7XG4gICAgICAgICAgaXRlbVsyXSA9IG1lZGlhO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzdXBwb3J0cykge1xuICAgICAgICBpZiAoIWl0ZW1bNF0pIHtcbiAgICAgICAgICBpdGVtWzRdID0gXCJcIi5jb25jYXQoc3VwcG9ydHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1bMV0gPSBcIkBzdXBwb3J0cyAoXCIuY29uY2F0KGl0ZW1bNF0sIFwiKSB7XCIpLmNvbmNhdChpdGVtWzFdLCBcIn1cIik7XG4gICAgICAgICAgaXRlbVs0XSA9IHN1cHBvcnRzO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxpc3QucHVzaChpdGVtKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIGxpc3Q7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gIHZhciBjb250ZW50ID0gaXRlbVsxXTtcbiAgdmFyIGNzc01hcHBpbmcgPSBpdGVtWzNdO1xuXG4gIGlmICghY3NzTWFwcGluZykge1xuICAgIHJldHVybiBjb250ZW50O1xuICB9XG5cbiAgaWYgKHR5cGVvZiBidG9hID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB2YXIgYmFzZTY0ID0gYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoY3NzTWFwcGluZykpKSk7XG4gICAgdmFyIGRhdGEgPSBcInNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LFwiLmNvbmNhdChiYXNlNjQpO1xuICAgIHZhciBzb3VyY2VNYXBwaW5nID0gXCIvKiMgXCIuY29uY2F0KGRhdGEsIFwiICovXCIpO1xuICAgIHZhciBzb3VyY2VVUkxzID0gY3NzTWFwcGluZy5zb3VyY2VzLm1hcChmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICByZXR1cm4gXCIvKiMgc291cmNlVVJMPVwiLmNvbmNhdChjc3NNYXBwaW5nLnNvdXJjZVJvb3QgfHwgXCJcIikuY29uY2F0KHNvdXJjZSwgXCIgKi9cIik7XG4gICAgfSk7XG4gICAgcmV0dXJuIFtjb250ZW50XS5jb25jYXQoc291cmNlVVJMcykuY29uY2F0KFtzb3VyY2VNYXBwaW5nXSkuam9pbihcIlxcblwiKTtcbiAgfVxuXG4gIHJldHVybiBbY29udGVudF0uam9pbihcIlxcblwiKTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbmZldHRpID0gY29uZmV0dGk7XG52YXIgZGVmYXVsdENvbG9ycyA9IFtcIiNhODY0ZmRcIiwgXCIjMjljZGZmXCIsIFwiIzc4ZmY0NFwiLCBcIiNmZjcxOGRcIiwgXCIjZmRmZjZhXCJdO1xuXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50cyhyb290LCBlbGVtZW50Q291bnQsIGNvbG9ycywgd2lkdGgsIGhlaWdodCkge1xuICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogZWxlbWVudENvdW50IH0pLm1hcChmdW5jdGlvbiAoXywgaW5kZXgpIHtcbiAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdmFyIGNvbG9yID0gY29sb3JzW2luZGV4ICUgY29sb3JzLmxlbmd0aF07XG4gICAgZWxlbWVudC5zdHlsZVtcImJhY2tncm91bmQtY29sb3JcIl0gPSBjb2xvcjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBzcGFjZS1pbmZpeC1vcHNcbiAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gd2lkdGg7XG4gICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgZWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcbiAgICBlbGVtZW50LnN0eWxlLndpbGxDaGFuZ2UgPSBcInRyYW5zZm9ybSwgb3BhY2l0eVwiO1xuICAgIGVsZW1lbnQuc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XG4gICAgcm9vdC5hcHBlbmRDaGlsZChlbGVtZW50KTtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJhbmRvbVBoeXNpY3MoYW5nbGUsIHNwcmVhZCwgc3RhcnRWZWxvY2l0eSwgcmFuZG9tKSB7XG4gIHZhciByYWRBbmdsZSA9IGFuZ2xlICogKE1hdGguUEkgLyAxODApO1xuICB2YXIgcmFkU3ByZWFkID0gc3ByZWFkICogKE1hdGguUEkgLyAxODApO1xuICByZXR1cm4ge1xuICAgIHg6IDAsXG4gICAgeTogMCxcbiAgICB6OiAwLFxuICAgIHdvYmJsZTogcmFuZG9tKCkgKiAxMCxcbiAgICB3b2JibGVTcGVlZDogMC4xICsgcmFuZG9tKCkgKiAwLjEsXG4gICAgdmVsb2NpdHk6IHN0YXJ0VmVsb2NpdHkgKiAwLjUgKyByYW5kb20oKSAqIHN0YXJ0VmVsb2NpdHksXG4gICAgYW5nbGUyRDogLXJhZEFuZ2xlICsgKDAuNSAqIHJhZFNwcmVhZCAtIHJhbmRvbSgpICogcmFkU3ByZWFkKSxcbiAgICBhbmdsZTNEOiAtKE1hdGguUEkgLyA0KSArIHJhbmRvbSgpICogKE1hdGguUEkgLyAyKSxcbiAgICB0aWx0QW5nbGU6IHJhbmRvbSgpICogTWF0aC5QSSxcbiAgICB0aWx0QW5nbGVTcGVlZDogMC4xICsgcmFuZG9tKCkgKiAwLjNcbiAgfTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlRmV0dGkoZmV0dGksIHByb2dyZXNzLCBkcmFnRnJpY3Rpb24sIGRlY2F5KSB7XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLXBhcmFtLXJlYXNzaWduICovXG4gIGZldHRpLnBoeXNpY3MueCArPSBNYXRoLmNvcyhmZXR0aS5waHlzaWNzLmFuZ2xlMkQpICogZmV0dGkucGh5c2ljcy52ZWxvY2l0eTtcbiAgZmV0dGkucGh5c2ljcy55ICs9IE1hdGguc2luKGZldHRpLnBoeXNpY3MuYW5nbGUyRCkgKiBmZXR0aS5waHlzaWNzLnZlbG9jaXR5O1xuICBmZXR0aS5waHlzaWNzLnogKz0gTWF0aC5zaW4oZmV0dGkucGh5c2ljcy5hbmdsZTNEKSAqIGZldHRpLnBoeXNpY3MudmVsb2NpdHk7XG4gIGZldHRpLnBoeXNpY3Mud29iYmxlICs9IGZldHRpLnBoeXNpY3Mud29iYmxlU3BlZWQ7XG4gIC8vIEJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgaWYgKGRlY2F5KSB7XG4gICAgZmV0dGkucGh5c2ljcy52ZWxvY2l0eSAqPSBkZWNheTtcbiAgfSBlbHNlIHtcbiAgICBmZXR0aS5waHlzaWNzLnZlbG9jaXR5IC09IGZldHRpLnBoeXNpY3MudmVsb2NpdHkgKiBkcmFnRnJpY3Rpb247XG4gIH1cbiAgZmV0dGkucGh5c2ljcy55ICs9IDM7XG4gIGZldHRpLnBoeXNpY3MudGlsdEFuZ2xlICs9IGZldHRpLnBoeXNpY3MudGlsdEFuZ2xlU3BlZWQ7XG5cbiAgdmFyIF9mZXR0aSRwaHlzaWNzID0gZmV0dGkucGh5c2ljcyxcbiAgICAgIHggPSBfZmV0dGkkcGh5c2ljcy54LFxuICAgICAgeSA9IF9mZXR0aSRwaHlzaWNzLnksXG4gICAgICB6ID0gX2ZldHRpJHBoeXNpY3MueixcbiAgICAgIHRpbHRBbmdsZSA9IF9mZXR0aSRwaHlzaWNzLnRpbHRBbmdsZSxcbiAgICAgIHdvYmJsZSA9IF9mZXR0aSRwaHlzaWNzLndvYmJsZTtcblxuICB2YXIgd29iYmxlWCA9IHggKyAxMCAqIE1hdGguY29zKHdvYmJsZSk7XG4gIHZhciB3b2JibGVZID0geSArIDEwICogTWF0aC5zaW4od29iYmxlKTtcbiAgdmFyIHRyYW5zZm9ybSA9IFwidHJhbnNsYXRlM2QoXCIgKyB3b2JibGVYICsgXCJweCwgXCIgKyB3b2JibGVZICsgXCJweCwgXCIgKyB6ICsgXCJweCkgcm90YXRlM2QoMSwgMSwgMSwgXCIgKyB0aWx0QW5nbGUgKyBcInJhZClcIjtcblxuICBmZXR0aS5lbGVtZW50LnN0eWxlLnZpc2liaWxpdHkgPSBcInZpc2libGVcIjtcbiAgZmV0dGkuZWxlbWVudC5zdHlsZS50cmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG4gIGZldHRpLmVsZW1lbnQuc3R5bGUub3BhY2l0eSA9IDEgLSBwcm9ncmVzcztcblxuICAvKiBlc2xpbnQtZW5hYmxlICovXG59XG5cbmZ1bmN0aW9uIGFuaW1hdGUocm9vdCwgZmV0dGlzLCBkcmFnRnJpY3Rpb24sIGRlY2F5LCBkdXJhdGlvbiwgc3RhZ2dlcikge1xuICB2YXIgc3RhcnRUaW1lID0gdm9pZCAwO1xuXG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgIGZ1bmN0aW9uIHVwZGF0ZSh0aW1lKSB7XG4gICAgICBpZiAoIXN0YXJ0VGltZSkgc3RhcnRUaW1lID0gdGltZTtcbiAgICAgIHZhciBlbGFwc2VkID0gdGltZSAtIHN0YXJ0VGltZTtcbiAgICAgIHZhciBwcm9ncmVzcyA9IHN0YXJ0VGltZSA9PT0gdGltZSA/IDAgOiAodGltZSAtIHN0YXJ0VGltZSkgLyBkdXJhdGlvbjtcbiAgICAgIGZldHRpcy5zbGljZSgwLCBNYXRoLmNlaWwoZWxhcHNlZCAvIHN0YWdnZXIpKS5mb3JFYWNoKGZ1bmN0aW9uIChmZXR0aSkge1xuICAgICAgICB1cGRhdGVGZXR0aShmZXR0aSwgcHJvZ3Jlc3MsIGRyYWdGcmljdGlvbiwgZGVjYXkpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aW1lIC0gc3RhcnRUaW1lIDwgZHVyYXRpb24pIHtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHVwZGF0ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmZXR0aXMuZm9yRWFjaChmdW5jdGlvbiAoZmV0dGkpIHtcbiAgICAgICAgICBpZiAoZmV0dGkuZWxlbWVudC5wYXJlbnROb2RlID09PSByb290KSB7XG4gICAgICAgICAgICByZXR1cm4gcm9vdC5yZW1vdmVDaGlsZChmZXR0aS5lbGVtZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHVwZGF0ZSk7XG4gIH0pO1xufVxuXG52YXIgZGVmYXVsdHMgPSB7XG4gIGFuZ2xlOiA5MCxcbiAgc3ByZWFkOiA0NSxcbiAgc3RhcnRWZWxvY2l0eTogNDUsXG4gIGVsZW1lbnRDb3VudDogNTAsXG4gIHdpZHRoOiBcIjEwcHhcIixcbiAgaGVpZ2h0OiBcIjEwcHhcIixcbiAgcGVyc3BlY3RpdmU6IFwiXCIsXG4gIGNvbG9yczogZGVmYXVsdENvbG9ycyxcbiAgZHVyYXRpb246IDMwMDAsXG4gIHN0YWdnZXI6IDAsXG4gIGRyYWdGcmljdGlvbjogMC4xLFxuICByYW5kb206IE1hdGgucmFuZG9tXG59O1xuXG5mdW5jdGlvbiBiYWNrd2FyZFBhdGNoKGNvbmZpZykge1xuICBpZiAoIWNvbmZpZy5zdGFnZ2VyICYmIGNvbmZpZy5kZWxheSkge1xuICAgIGNvbmZpZy5zdGFnZ2VyID0gY29uZmlnLmRlbGF5O1xuICB9XG4gIHJldHVybiBjb25maWc7XG59XG5cbmZ1bmN0aW9uIGNvbmZldHRpKHJvb3QpIHtcbiAgdmFyIGNvbmZpZyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgdmFyIF9PYmplY3QkYXNzaWduID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdHMsIGJhY2t3YXJkUGF0Y2goY29uZmlnKSksXG4gICAgICBlbGVtZW50Q291bnQgPSBfT2JqZWN0JGFzc2lnbi5lbGVtZW50Q291bnQsXG4gICAgICBjb2xvcnMgPSBfT2JqZWN0JGFzc2lnbi5jb2xvcnMsXG4gICAgICB3aWR0aCA9IF9PYmplY3QkYXNzaWduLndpZHRoLFxuICAgICAgaGVpZ2h0ID0gX09iamVjdCRhc3NpZ24uaGVpZ2h0LFxuICAgICAgcGVyc3BlY3RpdmUgPSBfT2JqZWN0JGFzc2lnbi5wZXJzcGVjdGl2ZSxcbiAgICAgIGFuZ2xlID0gX09iamVjdCRhc3NpZ24uYW5nbGUsXG4gICAgICBzcHJlYWQgPSBfT2JqZWN0JGFzc2lnbi5zcHJlYWQsXG4gICAgICBzdGFydFZlbG9jaXR5ID0gX09iamVjdCRhc3NpZ24uc3RhcnRWZWxvY2l0eSxcbiAgICAgIGRlY2F5ID0gX09iamVjdCRhc3NpZ24uZGVjYXksXG4gICAgICBkcmFnRnJpY3Rpb24gPSBfT2JqZWN0JGFzc2lnbi5kcmFnRnJpY3Rpb24sXG4gICAgICBkdXJhdGlvbiA9IF9PYmplY3QkYXNzaWduLmR1cmF0aW9uLFxuICAgICAgc3RhZ2dlciA9IF9PYmplY3QkYXNzaWduLnN0YWdnZXIsXG4gICAgICByYW5kb20gPSBfT2JqZWN0JGFzc2lnbi5yYW5kb207XG5cbiAgcm9vdC5zdHlsZS5wZXJzcGVjdGl2ZSA9IHBlcnNwZWN0aXZlO1xuICB2YXIgZWxlbWVudHMgPSBjcmVhdGVFbGVtZW50cyhyb290LCBlbGVtZW50Q291bnQsIGNvbG9ycywgd2lkdGgsIGhlaWdodCk7XG4gIHZhciBmZXR0aXMgPSBlbGVtZW50cy5tYXAoZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZWxlbWVudDogZWxlbWVudCxcbiAgICAgIHBoeXNpY3M6IHJhbmRvbVBoeXNpY3MoYW5nbGUsIHNwcmVhZCwgc3RhcnRWZWxvY2l0eSwgcmFuZG9tKVxuICAgIH07XG4gIH0pO1xuXG4gIHJldHVybiBhbmltYXRlKHJvb3QsIGZldHRpcywgZHJhZ0ZyaWN0aW9uLCBkZWNheSwgZHVyYXRpb24sIHN0YWdnZXIpO1xufSIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldCcpO1xuXG5mdW5jdGlvbiBlbXB0eUZ1bmN0aW9uKCkge31cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gc2hpbShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xuICAgIGlmIChzZWNyZXQgPT09IFJlYWN0UHJvcFR5cGVzU2VjcmV0KSB7XG4gICAgICAvLyBJdCBpcyBzdGlsbCBzYWZlIHdoZW4gY2FsbGVkIGZyb20gUmVhY3QuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoXG4gICAgICAnQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAnVXNlIFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpIHRvIGNhbGwgdGhlbS4gJyArXG4gICAgICAnUmVhZCBtb3JlIGF0IGh0dHA6Ly9mYi5tZS91c2UtY2hlY2stcHJvcC10eXBlcydcbiAgICApO1xuICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgIHRocm93IGVycjtcbiAgfTtcbiAgc2hpbS5pc1JlcXVpcmVkID0gc2hpbTtcbiAgZnVuY3Rpb24gZ2V0U2hpbSgpIHtcbiAgICByZXR1cm4gc2hpbTtcbiAgfTtcbiAgLy8gSW1wb3J0YW50IVxuICAvLyBLZWVwIHRoaXMgbGlzdCBpbiBzeW5jIHdpdGggcHJvZHVjdGlvbiB2ZXJzaW9uIGluIGAuL2ZhY3RvcnlXaXRoVHlwZUNoZWNrZXJzLmpzYC5cbiAgdmFyIFJlYWN0UHJvcFR5cGVzID0ge1xuICAgIGFycmF5OiBzaGltLFxuICAgIGJvb2w6IHNoaW0sXG4gICAgZnVuYzogc2hpbSxcbiAgICBudW1iZXI6IHNoaW0sXG4gICAgb2JqZWN0OiBzaGltLFxuICAgIHN0cmluZzogc2hpbSxcbiAgICBzeW1ib2w6IHNoaW0sXG5cbiAgICBhbnk6IHNoaW0sXG4gICAgYXJyYXlPZjogZ2V0U2hpbSxcbiAgICBlbGVtZW50OiBzaGltLFxuICAgIGluc3RhbmNlT2Y6IGdldFNoaW0sXG4gICAgbm9kZTogc2hpbSxcbiAgICBvYmplY3RPZjogZ2V0U2hpbSxcbiAgICBvbmVPZjogZ2V0U2hpbSxcbiAgICBvbmVPZlR5cGU6IGdldFNoaW0sXG4gICAgc2hhcGU6IGdldFNoaW0sXG4gICAgZXhhY3Q6IGdldFNoaW1cbiAgfTtcblxuICBSZWFjdFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcyA9IGVtcHR5RnVuY3Rpb247XG4gIFJlYWN0UHJvcFR5cGVzLlByb3BUeXBlcyA9IFJlYWN0UHJvcFR5cGVzO1xuXG4gIHJldHVybiBSZWFjdFByb3BUeXBlcztcbn07XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIFN5bWJvbC5mb3IgJiZcbiAgICBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50JykpIHx8XG4gICAgMHhlYWM3O1xuXG4gIHZhciBpc1ZhbGlkRWxlbWVudCA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJlxuICAgICAgb2JqZWN0ICE9PSBudWxsICYmXG4gICAgICBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcbiAgfTtcblxuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBkZXZlbG9wbWVudCBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICB2YXIgdGhyb3dPbkRpcmVjdEFjY2VzcyA9IHRydWU7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFR5cGVDaGVja2VycycpKGlzVmFsaWRFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKTtcbn0gZWxzZSB7XG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IHByb2R1Y3Rpb24gYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcycpKCk7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJztcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFByb3BUeXBlc1NlY3JldDtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xuXG52YXIgX3JlYWN0ID0gcmVxdWlyZShcInJlYWN0XCIpO1xuXG52YXIgX3JlYWN0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3JlYWN0KTtcblxudmFyIF9kb21Db25mZXR0aSA9IHJlcXVpcmUoXCJkb20tY29uZmV0dGlcIik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikgPyBjYWxsIDogc2VsZjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cblxudmFyIHN0eWxlID0ge1xuICBwb3NpdGlvbjogXCJyZWxhdGl2ZVwiXG59O1xuXG52YXIgQ29uZmV0dGkgPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoQ29uZmV0dGksIF9Db21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIENvbmZldHRpKHByb3BzKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENvbmZldHRpKTtcblxuICAgIHZhciBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChDb25mZXR0aS5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKENvbmZldHRpKSkuY2FsbCh0aGlzLCBwcm9wcykpO1xuXG4gICAgX3RoaXMuc2V0UmVmID0gX3RoaXMuc2V0UmVmLmJpbmQoX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhDb25mZXR0aSwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICAgIGlmICghcHJldlByb3BzLmFjdGl2ZSAmJiB0aGlzLnByb3BzLmFjdGl2ZSkge1xuICAgICAgICAoMCwgX2RvbUNvbmZldHRpLmNvbmZldHRpKSh0aGlzLmNvbnRhaW5lciwgdGhpcy5wcm9wcy5jb25maWcpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzZXRSZWZcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2V0UmVmKHJlZikge1xuICAgICAgdGhpcy5jb250YWluZXIgPSByZWY7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IHRoaXMucHJvcHMuY2xhc3NOYW1lLCBzdHlsZTogc3R5bGUsIHJlZjogdGhpcy5zZXRSZWYgfSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIENvbmZldHRpO1xufShfcmVhY3QuQ29tcG9uZW50KTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gQ29uZmV0dGk7IiwiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNy4wLjJcbiAqIHJlYWN0LWpzeC1ydW50aW1lLnByb2R1Y3Rpb24ubWluLmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cbid1c2Ugc3RyaWN0JztyZXF1aXJlKFwib2JqZWN0LWFzc2lnblwiKTt2YXIgZj1yZXF1aXJlKFwicmVhY3RcIiksZz02MDEwMztleHBvcnRzLkZyYWdtZW50PTYwMTA3O2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3Ipe3ZhciBoPVN5bWJvbC5mb3I7Zz1oKFwicmVhY3QuZWxlbWVudFwiKTtleHBvcnRzLkZyYWdtZW50PWgoXCJyZWFjdC5mcmFnbWVudFwiKX12YXIgbT1mLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVELlJlYWN0Q3VycmVudE93bmVyLG49T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxwPXtrZXk6ITAscmVmOiEwLF9fc2VsZjohMCxfX3NvdXJjZTohMH07XG5mdW5jdGlvbiBxKGMsYSxrKXt2YXIgYixkPXt9LGU9bnVsbCxsPW51bGw7dm9pZCAwIT09ayYmKGU9XCJcIitrKTt2b2lkIDAhPT1hLmtleSYmKGU9XCJcIithLmtleSk7dm9pZCAwIT09YS5yZWYmJihsPWEucmVmKTtmb3IoYiBpbiBhKW4uY2FsbChhLGIpJiYhcC5oYXNPd25Qcm9wZXJ0eShiKSYmKGRbYl09YVtiXSk7aWYoYyYmYy5kZWZhdWx0UHJvcHMpZm9yKGIgaW4gYT1jLmRlZmF1bHRQcm9wcyxhKXZvaWQgMD09PWRbYl0mJihkW2JdPWFbYl0pO3JldHVybnskJHR5cGVvZjpnLHR5cGU6YyxrZXk6ZSxyZWY6bCxwcm9wczpkLF9vd25lcjptLmN1cnJlbnR9fWV4cG9ydHMuanN4PXE7ZXhwb3J0cy5qc3hzPXE7XG4iLCIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtanN4LXJ1bnRpbWUucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtanN4LXJ1bnRpbWUuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmZ1bmN0aW9uIGNyZWF0ZVRodW5rTWlkZGxld2FyZShleHRyYUFyZ3VtZW50KSB7XG4gIHJldHVybiBmdW5jdGlvbiAoX3JlZikge1xuICAgIHZhciBkaXNwYXRjaCA9IF9yZWYuZGlzcGF0Y2g7XG4gICAgdmFyIGdldFN0YXRlID0gX3JlZi5nZXRTdGF0ZTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKG5leHQpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYWN0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuIGFjdGlvbihkaXNwYXRjaCwgZ2V0U3RhdGUsIGV4dHJhQXJndW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5leHQoYWN0aW9uKTtcbiAgICAgIH07XG4gICAgfTtcbiAgfTtcbn1cblxudmFyIHRodW5rID0gY3JlYXRlVGh1bmtNaWRkbGV3YXJlKCk7XG50aHVuay53aXRoRXh0cmFBcmd1bWVudCA9IGNyZWF0ZVRodW5rTWlkZGxld2FyZTtcblxuZXhwb3J0c1snZGVmYXVsdCddID0gdGh1bms7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBzdHlsZXNJbkRPTSA9IFtdO1xuXG5mdW5jdGlvbiBnZXRJbmRleEJ5SWRlbnRpZmllcihpZGVudGlmaWVyKSB7XG4gIHZhciByZXN1bHQgPSAtMTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlc0luRE9NLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHN0eWxlc0luRE9NW2ldLmlkZW50aWZpZXIgPT09IGlkZW50aWZpZXIpIHtcbiAgICAgIHJlc3VsdCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBtb2R1bGVzVG9Eb20obGlzdCwgb3B0aW9ucykge1xuICB2YXIgaWRDb3VudE1hcCA9IHt9O1xuICB2YXIgaWRlbnRpZmllcnMgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgaXRlbSA9IGxpc3RbaV07XG4gICAgdmFyIGlkID0gb3B0aW9ucy5iYXNlID8gaXRlbVswXSArIG9wdGlvbnMuYmFzZSA6IGl0ZW1bMF07XG4gICAgdmFyIGNvdW50ID0gaWRDb3VudE1hcFtpZF0gfHwgMDtcbiAgICB2YXIgaWRlbnRpZmllciA9IFwiXCIuY29uY2F0KGlkLCBcIiBcIikuY29uY2F0KGNvdW50KTtcbiAgICBpZENvdW50TWFwW2lkXSA9IGNvdW50ICsgMTtcbiAgICB2YXIgaW5kZXhCeUlkZW50aWZpZXIgPSBnZXRJbmRleEJ5SWRlbnRpZmllcihpZGVudGlmaWVyKTtcbiAgICB2YXIgb2JqID0ge1xuICAgICAgY3NzOiBpdGVtWzFdLFxuICAgICAgbWVkaWE6IGl0ZW1bMl0sXG4gICAgICBzb3VyY2VNYXA6IGl0ZW1bM10sXG4gICAgICBzdXBwb3J0czogaXRlbVs0XSxcbiAgICAgIGxheWVyOiBpdGVtWzVdXG4gICAgfTtcblxuICAgIGlmIChpbmRleEJ5SWRlbnRpZmllciAhPT0gLTEpIHtcbiAgICAgIHN0eWxlc0luRE9NW2luZGV4QnlJZGVudGlmaWVyXS5yZWZlcmVuY2VzKys7XG4gICAgICBzdHlsZXNJbkRPTVtpbmRleEJ5SWRlbnRpZmllcl0udXBkYXRlcihvYmopO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgdXBkYXRlciA9IGFkZEVsZW1lbnRTdHlsZShvYmosIG9wdGlvbnMpO1xuICAgICAgb3B0aW9ucy5ieUluZGV4ID0gaTtcbiAgICAgIHN0eWxlc0luRE9NLnNwbGljZShpLCAwLCB7XG4gICAgICAgIGlkZW50aWZpZXI6IGlkZW50aWZpZXIsXG4gICAgICAgIHVwZGF0ZXI6IHVwZGF0ZXIsXG4gICAgICAgIHJlZmVyZW5jZXM6IDFcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlkZW50aWZpZXJzLnB1c2goaWRlbnRpZmllcik7XG4gIH1cblxuICByZXR1cm4gaWRlbnRpZmllcnM7XG59XG5cbmZ1bmN0aW9uIGFkZEVsZW1lbnRTdHlsZShvYmosIG9wdGlvbnMpIHtcbiAgdmFyIGFwaSA9IG9wdGlvbnMuZG9tQVBJKG9wdGlvbnMpO1xuICBhcGkudXBkYXRlKG9iaik7XG5cbiAgdmFyIHVwZGF0ZXIgPSBmdW5jdGlvbiB1cGRhdGVyKG5ld09iaikge1xuICAgIGlmIChuZXdPYmopIHtcbiAgICAgIGlmIChuZXdPYmouY3NzID09PSBvYmouY3NzICYmIG5ld09iai5tZWRpYSA9PT0gb2JqLm1lZGlhICYmIG5ld09iai5zb3VyY2VNYXAgPT09IG9iai5zb3VyY2VNYXAgJiYgbmV3T2JqLnN1cHBvcnRzID09PSBvYmouc3VwcG9ydHMgJiYgbmV3T2JqLmxheWVyID09PSBvYmoubGF5ZXIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBhcGkudXBkYXRlKG9iaiA9IG5ld09iaik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZW1vdmUoKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIHVwZGF0ZXI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGxpc3QsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGxpc3QgPSBsaXN0IHx8IFtdO1xuICB2YXIgbGFzdElkZW50aWZpZXJzID0gbW9kdWxlc1RvRG9tKGxpc3QsIG9wdGlvbnMpO1xuICByZXR1cm4gZnVuY3Rpb24gdXBkYXRlKG5ld0xpc3QpIHtcbiAgICBuZXdMaXN0ID0gbmV3TGlzdCB8fCBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGFzdElkZW50aWZpZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaWRlbnRpZmllciA9IGxhc3RJZGVudGlmaWVyc1tpXTtcbiAgICAgIHZhciBpbmRleCA9IGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpO1xuICAgICAgc3R5bGVzSW5ET01baW5kZXhdLnJlZmVyZW5jZXMtLTtcbiAgICB9XG5cbiAgICB2YXIgbmV3TGFzdElkZW50aWZpZXJzID0gbW9kdWxlc1RvRG9tKG5ld0xpc3QsIG9wdGlvbnMpO1xuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGxhc3RJZGVudGlmaWVycy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBfaWRlbnRpZmllciA9IGxhc3RJZGVudGlmaWVyc1tfaV07XG5cbiAgICAgIHZhciBfaW5kZXggPSBnZXRJbmRleEJ5SWRlbnRpZmllcihfaWRlbnRpZmllcik7XG5cbiAgICAgIGlmIChzdHlsZXNJbkRPTVtfaW5kZXhdLnJlZmVyZW5jZXMgPT09IDApIHtcbiAgICAgICAgc3R5bGVzSW5ET01bX2luZGV4XS51cGRhdGVyKCk7XG5cbiAgICAgICAgc3R5bGVzSW5ET00uc3BsaWNlKF9pbmRleCwgMSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGFzdElkZW50aWZpZXJzID0gbmV3TGFzdElkZW50aWZpZXJzO1xuICB9O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIG1lbW8gPSB7fTtcbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuXG5mdW5jdGlvbiBnZXRUYXJnZXQodGFyZ2V0KSB7XG4gIGlmICh0eXBlb2YgbWVtb1t0YXJnZXRdID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgdmFyIHN0eWxlVGFyZ2V0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0YXJnZXQpOyAvLyBTcGVjaWFsIGNhc2UgdG8gcmV0dXJuIGhlYWQgb2YgaWZyYW1lIGluc3RlYWQgb2YgaWZyYW1lIGl0c2VsZlxuXG4gICAgaWYgKHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCAmJiBzdHlsZVRhcmdldCBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gVGhpcyB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBhY2Nlc3MgdG8gaWZyYW1lIGlzIGJsb2NrZWRcbiAgICAgICAgLy8gZHVlIHRvIGNyb3NzLW9yaWdpbiByZXN0cmljdGlvbnNcbiAgICAgICAgc3R5bGVUYXJnZXQgPSBzdHlsZVRhcmdldC5jb250ZW50RG9jdW1lbnQuaGVhZDtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgc3R5bGVUYXJnZXQgPSBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIG1lbW9bdGFyZ2V0XSA9IHN0eWxlVGFyZ2V0O1xuICB9XG5cbiAgcmV0dXJuIG1lbW9bdGFyZ2V0XTtcbn1cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuXG5cbmZ1bmN0aW9uIGluc2VydEJ5U2VsZWN0b3IoaW5zZXJ0LCBzdHlsZSkge1xuICB2YXIgdGFyZ2V0ID0gZ2V0VGFyZ2V0KGluc2VydCk7XG5cbiAgaWYgKCF0YXJnZXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZG4ndCBmaW5kIGEgc3R5bGUgdGFyZ2V0LiBUaGlzIHByb2JhYmx5IG1lYW5zIHRoYXQgdGhlIHZhbHVlIGZvciB0aGUgJ2luc2VydCcgcGFyYW1ldGVyIGlzIGludmFsaWQuXCIpO1xuICB9XG5cbiAgdGFyZ2V0LmFwcGVuZENoaWxkKHN0eWxlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbnNlcnRCeVNlbGVjdG9yOyIsIlwidXNlIHN0cmljdFwiO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIGluc2VydFN0eWxlRWxlbWVudChvcHRpb25zKSB7XG4gIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuICBvcHRpb25zLnNldEF0dHJpYnV0ZXMoZWxlbWVudCwgb3B0aW9ucy5hdHRyaWJ1dGVzKTtcbiAgb3B0aW9ucy5pbnNlcnQoZWxlbWVudCwgb3B0aW9ucy5vcHRpb25zKTtcbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW5zZXJ0U3R5bGVFbGVtZW50OyIsIlwidXNlIHN0cmljdFwiO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIHNldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcyhzdHlsZUVsZW1lbnQpIHtcbiAgdmFyIG5vbmNlID0gdHlwZW9mIF9fd2VicGFja19ub25jZV9fICE9PSBcInVuZGVmaW5lZFwiID8gX193ZWJwYWNrX25vbmNlX18gOiBudWxsO1xuXG4gIGlmIChub25jZSkge1xuICAgIHN0eWxlRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJub25jZVwiLCBub25jZSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gYXBwbHkoc3R5bGVFbGVtZW50LCBvcHRpb25zLCBvYmopIHtcbiAgdmFyIGNzcyA9IFwiXCI7XG5cbiAgaWYgKG9iai5zdXBwb3J0cykge1xuICAgIGNzcyArPSBcIkBzdXBwb3J0cyAoXCIuY29uY2F0KG9iai5zdXBwb3J0cywgXCIpIHtcIik7XG4gIH1cblxuICBpZiAob2JqLm1lZGlhKSB7XG4gICAgY3NzICs9IFwiQG1lZGlhIFwiLmNvbmNhdChvYmoubWVkaWEsIFwiIHtcIik7XG4gIH1cblxuICB2YXIgbmVlZExheWVyID0gdHlwZW9mIG9iai5sYXllciAhPT0gXCJ1bmRlZmluZWRcIjtcblxuICBpZiAobmVlZExheWVyKSB7XG4gICAgY3NzICs9IFwiQGxheWVyXCIuY29uY2F0KG9iai5sYXllci5sZW5ndGggPiAwID8gXCIgXCIuY29uY2F0KG9iai5sYXllcikgOiBcIlwiLCBcIiB7XCIpO1xuICB9XG5cbiAgY3NzICs9IG9iai5jc3M7XG5cbiAgaWYgKG5lZWRMYXllcikge1xuICAgIGNzcyArPSBcIn1cIjtcbiAgfVxuXG4gIGlmIChvYmoubWVkaWEpIHtcbiAgICBjc3MgKz0gXCJ9XCI7XG4gIH1cblxuICBpZiAob2JqLnN1cHBvcnRzKSB7XG4gICAgY3NzICs9IFwifVwiO1xuICB9XG5cbiAgdmFyIHNvdXJjZU1hcCA9IG9iai5zb3VyY2VNYXA7XG5cbiAgaWYgKHNvdXJjZU1hcCAmJiB0eXBlb2YgYnRvYSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIGNzcyArPSBcIlxcbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsXCIuY29uY2F0KGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHNvdXJjZU1hcCkpKSksIFwiICovXCIpO1xuICB9IC8vIEZvciBvbGQgSUVcblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgICovXG5cblxuICBvcHRpb25zLnN0eWxlVGFnVHJhbnNmb3JtKGNzcywgc3R5bGVFbGVtZW50LCBvcHRpb25zLm9wdGlvbnMpO1xufVxuXG5mdW5jdGlvbiByZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGVFbGVtZW50KSB7XG4gIC8vIGlzdGFuYnVsIGlnbm9yZSBpZlxuICBpZiAoc3R5bGVFbGVtZW50LnBhcmVudE5vZGUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzdHlsZUVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzdHlsZUVsZW1lbnQpO1xufVxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5cblxuZnVuY3Rpb24gZG9tQVBJKG9wdGlvbnMpIHtcbiAgdmFyIHN0eWxlRWxlbWVudCA9IG9wdGlvbnMuaW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMpO1xuICByZXR1cm4ge1xuICAgIHVwZGF0ZTogZnVuY3Rpb24gdXBkYXRlKG9iaikge1xuICAgICAgYXBwbHkoc3R5bGVFbGVtZW50LCBvcHRpb25zLCBvYmopO1xuICAgIH0sXG4gICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUoKSB7XG4gICAgICByZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGVFbGVtZW50KTtcbiAgICB9XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZG9tQVBJOyIsIlwidXNlIHN0cmljdFwiO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIHN0eWxlVGFnVHJhbnNmb3JtKGNzcywgc3R5bGVFbGVtZW50KSB7XG4gIGlmIChzdHlsZUVsZW1lbnQuc3R5bGVTaGVldCkge1xuICAgIHN0eWxlRWxlbWVudC5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3M7XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKHN0eWxlRWxlbWVudC5maXJzdENoaWxkKSB7XG4gICAgICBzdHlsZUVsZW1lbnQucmVtb3ZlQ2hpbGQoc3R5bGVFbGVtZW50LmZpcnN0Q2hpbGQpO1xuICAgIH1cblxuICAgIHN0eWxlRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0eWxlVGFnVHJhbnNmb3JtOyIsIi8qIVxuXHRDb3B5cmlnaHQgKGMpIDIwMTggSmVkIFdhdHNvbi5cblx0TGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlIChNSVQpLCBzZWVcblx0aHR0cDovL2plZHdhdHNvbi5naXRodWIuaW8vY2xhc3NuYW1lc1xuKi9cbi8qIGdsb2JhbCBkZWZpbmUgKi9cblxuKGZ1bmN0aW9uICgpIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdHZhciBoYXNPd24gPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuXHRmdW5jdGlvbiBjbGFzc05hbWVzICgpIHtcblx0XHR2YXIgY2xhc3NlcyA9ICcnO1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBhcmcgPSBhcmd1bWVudHNbaV07XG5cdFx0XHRpZiAoYXJnKSB7XG5cdFx0XHRcdGNsYXNzZXMgPSBhcHBlbmRDbGFzcyhjbGFzc2VzLCBwYXJzZVZhbHVlKGFyZykpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjbGFzc2VzO1xuXHR9XG5cblx0ZnVuY3Rpb24gcGFyc2VWYWx1ZSAoYXJnKSB7XG5cdFx0aWYgKHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBhcmcgPT09ICdudW1iZXInKSB7XG5cdFx0XHRyZXR1cm4gYXJnO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgYXJnICE9PSAnb2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuICcnO1xuXHRcdH1cblxuXHRcdGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcblx0XHRcdHJldHVybiBjbGFzc05hbWVzLmFwcGx5KG51bGwsIGFyZyk7XG5cdFx0fVxuXG5cdFx0aWYgKGFyZy50b1N0cmluZyAhPT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyAmJiAhYXJnLnRvU3RyaW5nLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ1tuYXRpdmUgY29kZV0nKSkge1xuXHRcdFx0cmV0dXJuIGFyZy50b1N0cmluZygpO1xuXHRcdH1cblxuXHRcdHZhciBjbGFzc2VzID0gJyc7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gYXJnKSB7XG5cdFx0XHRpZiAoaGFzT3duLmNhbGwoYXJnLCBrZXkpICYmIGFyZ1trZXldKSB7XG5cdFx0XHRcdGNsYXNzZXMgPSBhcHBlbmRDbGFzcyhjbGFzc2VzLCBrZXkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjbGFzc2VzO1xuXHR9XG5cblx0ZnVuY3Rpb24gYXBwZW5kQ2xhc3MgKHZhbHVlLCBuZXdDbGFzcykge1xuXHRcdGlmICghbmV3Q2xhc3MpIHtcblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG5cdFxuXHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0cmV0dXJuIHZhbHVlICsgJyAnICsgbmV3Q2xhc3M7XG5cdFx0fVxuXHRcblx0XHRyZXR1cm4gdmFsdWUgKyBuZXdDbGFzcztcblx0fVxuXG5cdGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuXHRcdGNsYXNzTmFtZXMuZGVmYXVsdCA9IGNsYXNzTmFtZXM7XG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBjbGFzc05hbWVzO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRlZmluZS5hbWQgPT09ICdvYmplY3QnICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyByZWdpc3RlciBhcyAnY2xhc3NuYW1lcycsIGNvbnNpc3RlbnQgd2l0aCBucG0gcGFja2FnZSBuYW1lXG5cdFx0ZGVmaW5lKCdjbGFzc25hbWVzJywgW10sIGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBjbGFzc05hbWVzO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHdpbmRvdy5jbGFzc05hbWVzID0gY2xhc3NOYW1lcztcblx0fVxufSgpKTtcbiJdLCJuYW1lcyI6WyJoYXNPd24iLCJoYXNPd25Qcm9wZXJ0eSIsImNsYXNzTmFtZXMiLCJjbGFzc2VzIiwiaSIsImFyZ3VtZW50cyIsImxlbmd0aCIsImFyZyIsImFyZ1R5cGUiLCJwdXNoIiwiQXJyYXkiLCJpc0FycmF5IiwiaW5uZXIiLCJhcHBseSIsInRvU3RyaW5nIiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaW5jbHVkZXMiLCJrZXkiLCJjYWxsIiwiam9pbiIsIm1vZHVsZSIsImV4cG9ydHMiLCJkZWZhdWx0IiwiY3NzV2l0aE1hcHBpbmdUb1N0cmluZyIsImxpc3QiLCJ0aGlzIiwibWFwIiwiaXRlbSIsImNvbnRlbnQiLCJuZWVkTGF5ZXIiLCJjb25jYXQiLCJtb2R1bGVzIiwibWVkaWEiLCJkZWR1cGUiLCJzdXBwb3J0cyIsImxheWVyIiwidW5kZWZpbmVkIiwiYWxyZWFkeUltcG9ydGVkTW9kdWxlcyIsImsiLCJpZCIsIl9rIiwiY3NzTWFwcGluZyIsImJ0b2EiLCJiYXNlNjQiLCJ1bmVzY2FwZSIsImVuY29kZVVSSUNvbXBvbmVudCIsIkpTT04iLCJzdHJpbmdpZnkiLCJkYXRhIiwic291cmNlTWFwcGluZyIsInNvdXJjZVVSTHMiLCJzb3VyY2VzIiwic291cmNlIiwic291cmNlUm9vdCIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJjb25mZXR0aSIsInJvb3QiLCJjb25maWciLCJfT2JqZWN0JGFzc2lnbiIsImFzc2lnbiIsImRlZmF1bHRzIiwiYmFja3dhcmRQYXRjaCIsInN0YWdnZXIiLCJkZWxheSIsImVsZW1lbnRDb3VudCIsImNvbG9ycyIsIndpZHRoIiwiaGVpZ2h0IiwicGVyc3BlY3RpdmUiLCJhbmdsZSIsInNwcmVhZCIsInN0YXJ0VmVsb2NpdHkiLCJkZWNheSIsImRyYWdGcmljdGlvbiIsImR1cmF0aW9uIiwicmFuZG9tIiwic3R5bGUiLCJmZXR0aXMiLCJjcmVhdGVFbGVtZW50cyIsImZyb20iLCJfIiwiaW5kZXgiLCJlbGVtZW50IiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiY29sb3IiLCJwb3NpdGlvbiIsIndpbGxDaGFuZ2UiLCJ2aXNpYmlsaXR5IiwiYXBwZW5kQ2hpbGQiLCJwaHlzaWNzIiwicmFuZG9tUGh5c2ljcyIsImFuaW1hdGUiLCJzdGFydFRpbWUiLCJQcm9taXNlIiwicmVzb2x2ZSIsInVwZGF0ZSIsInRpbWUiLCJlbGFwc2VkIiwicHJvZ3Jlc3MiLCJzbGljZSIsIk1hdGgiLCJjZWlsIiwiZm9yRWFjaCIsImZldHRpIiwidXBkYXRlRmV0dGkiLCJ4IiwiY29zIiwiYW5nbGUyRCIsInZlbG9jaXR5IiwieSIsInNpbiIsInoiLCJhbmdsZTNEIiwid29iYmxlIiwid29iYmxlU3BlZWQiLCJ0aWx0QW5nbGUiLCJ0aWx0QW5nbGVTcGVlZCIsIl9mZXR0aSRwaHlzaWNzIiwid29iYmxlWCIsIndvYmJsZVkiLCJ0cmFuc2Zvcm0iLCJvcGFjaXR5IiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwicGFyZW50Tm9kZSIsInJlbW92ZUNoaWxkIiwicmFkQW5nbGUiLCJQSSIsInJhZFNwcmVhZCIsIlJlYWN0UHJvcFR5cGVzU2VjcmV0IiwiZW1wdHlGdW5jdGlvbiIsInNoaW0iLCJwcm9wcyIsInByb3BOYW1lIiwiY29tcG9uZW50TmFtZSIsImxvY2F0aW9uIiwicHJvcEZ1bGxOYW1lIiwic2VjcmV0IiwiZXJyIiwiRXJyb3IiLCJuYW1lIiwiZ2V0U2hpbSIsImlzUmVxdWlyZWQiLCJSZWFjdFByb3BUeXBlcyIsImFycmF5IiwiYm9vbCIsImZ1bmMiLCJudW1iZXIiLCJvYmplY3QiLCJzdHJpbmciLCJzeW1ib2wiLCJhbnkiLCJhcnJheU9mIiwiaW5zdGFuY2VPZiIsIm5vZGUiLCJvYmplY3RPZiIsIm9uZU9mIiwib25lT2ZUeXBlIiwic2hhcGUiLCJleGFjdCIsImNoZWNrUHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwiX2NyZWF0ZUNsYXNzIiwiZGVmaW5lUHJvcGVydGllcyIsInRhcmdldCIsImRlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJDb25zdHJ1Y3RvciIsInByb3RvUHJvcHMiLCJzdGF0aWNQcm9wcyIsIl9yZWFjdCIsIl9yZWFjdDIiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0Iiwib2JqIiwiX19lc01vZHVsZSIsIl9kb21Db25mZXR0aSIsIkNvbmZldHRpIiwiX0NvbXBvbmVudCIsIl9jbGFzc0NhbGxDaGVjayIsImluc3RhbmNlIiwiVHlwZUVycm9yIiwiX3RoaXMiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsInNlbGYiLCJSZWZlcmVuY2VFcnJvciIsIl9fcHJvdG9fXyIsImdldFByb3RvdHlwZU9mIiwic2V0UmVmIiwiYmluZCIsIl9pbmhlcml0cyIsInN1YkNsYXNzIiwic3VwZXJDbGFzcyIsImNyZWF0ZSIsImNvbnN0cnVjdG9yIiwic2V0UHJvdG90eXBlT2YiLCJjb21wb25lbnREaWRVcGRhdGUiLCJwcmV2UHJvcHMiLCJhY3RpdmUiLCJjb250YWluZXIiLCJyZWYiLCJyZW5kZXIiLCJjbGFzc05hbWUiLCJDb21wb25lbnQiLCJmIiwiZyIsIkZyYWdtZW50IiwiU3ltYm9sIiwiZm9yIiwiaCIsIm0iLCJfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRCIsIlJlYWN0Q3VycmVudE93bmVyIiwibiIsInAiLCJfX3NlbGYiLCJfX3NvdXJjZSIsInEiLCJjIiwiYSIsImIiLCJkIiwiZSIsImwiLCJkZWZhdWx0UHJvcHMiLCIkJHR5cGVvZiIsInR5cGUiLCJfb3duZXIiLCJjdXJyZW50IiwianN4IiwianN4cyIsImNyZWF0ZVRodW5rTWlkZGxld2FyZSIsImV4dHJhQXJndW1lbnQiLCJfcmVmIiwiZGlzcGF0Y2giLCJnZXRTdGF0ZSIsIm5leHQiLCJhY3Rpb24iLCJ0aHVuayIsIndpdGhFeHRyYUFyZ3VtZW50Iiwic3R5bGVzSW5ET00iLCJnZXRJbmRleEJ5SWRlbnRpZmllciIsImlkZW50aWZpZXIiLCJyZXN1bHQiLCJtb2R1bGVzVG9Eb20iLCJvcHRpb25zIiwiaWRDb3VudE1hcCIsImlkZW50aWZpZXJzIiwiYmFzZSIsImNvdW50IiwiaW5kZXhCeUlkZW50aWZpZXIiLCJjc3MiLCJzb3VyY2VNYXAiLCJyZWZlcmVuY2VzIiwidXBkYXRlciIsImFkZEVsZW1lbnRTdHlsZSIsImJ5SW5kZXgiLCJzcGxpY2UiLCJhcGkiLCJkb21BUEkiLCJuZXdPYmoiLCJyZW1vdmUiLCJsYXN0SWRlbnRpZmllcnMiLCJuZXdMaXN0IiwibmV3TGFzdElkZW50aWZpZXJzIiwiX2kiLCJfaW5kZXgiLCJtZW1vIiwiaW5zZXJ0QnlTZWxlY3RvciIsImluc2VydCIsImdldFRhcmdldCIsInN0eWxlVGFyZ2V0IiwicXVlcnlTZWxlY3RvciIsIndpbmRvdyIsIkhUTUxJRnJhbWVFbGVtZW50IiwiY29udGVudERvY3VtZW50IiwiaGVhZCIsImluc2VydFN0eWxlRWxlbWVudCIsInNldEF0dHJpYnV0ZXMiLCJhdHRyaWJ1dGVzIiwic2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzIiwic3R5bGVFbGVtZW50Iiwibm9uY2UiLCJzZXRBdHRyaWJ1dGUiLCJzdHlsZVRhZ1RyYW5zZm9ybSIsInJlbW92ZVN0eWxlRWxlbWVudCIsInN0eWxlU2hlZXQiLCJjc3NUZXh0IiwiZmlyc3RDaGlsZCIsImNyZWF0ZVRleHROb2RlIiwiYXBwZW5kQ2xhc3MiLCJwYXJzZVZhbHVlIiwibmV3Q2xhc3MiXSwic291cmNlUm9vdCI6IiJ9