cms-token/assets/backend/js/suneditor.min.js

2 lines
2.3 MiB
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

!function(e){var t={};function n(i){if(t[i])return t[i].exports;var l=t[i]={i:i,l:!1,exports:{}};return e[i].call(l.exports,l,l.exports,n),l.l=!0,l.exports}n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var l in e)n.d(i,l,function(t){return e[t]}.bind(null,l));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s="XJR1")}({"1kvd":function(e,t,n){"use strict";var i,l;i="undefined"!=typeof window?window:this,l=function(e,t){const n={name:"dialog",add:function(e){const t=e.context;t.dialog={kind:"",updateModal:!1,_closeSignal:!1};let n=e.util.createElement("DIV");n.className="se-dialog sun-editor-common";let i=e.util.createElement("DIV");i.className="se-dialog-back",i.style.display="none";let l=e.util.createElement("DIV");l.className="se-dialog-inner",l.style.display="none",n.appendChild(i),n.appendChild(l),t.dialog.modalArea=n,t.dialog.back=i,t.dialog.modal=l,t.dialog.modal.addEventListener("mousedown",this._onMouseDown_dialog.bind(e)),t.dialog.modal.addEventListener("click",this._onClick_dialog.bind(e)),t.element.relative.appendChild(n),n=null,i=null,l=null},_onMouseDown_dialog:function(e){/se-dialog-inner/.test(e.target.className)?this.context.dialog._closeSignal=!0:this.context.dialog._closeSignal=!1},_onClick_dialog:function(e){(/close/.test(e.target.getAttribute("data-command"))||this.context.dialog._closeSignal)&&this.plugins.dialog.close.call(this)},open:function(e,t){if(this.modalForm)return!1;this.plugins.dialog._bindClose&&(this._d.removeEventListener("keydown",this.plugins.dialog._bindClose),this.plugins.dialog._bindClose=null),this.plugins.dialog._bindClose=function(e){/27/.test(e.keyCode)&&this.plugins.dialog.close.call(this)}.bind(this),this._d.addEventListener("keydown",this.plugins.dialog._bindClose),this.context.dialog.updateModal=t,"full"===this.options.popupDisplay?this.context.dialog.modalArea.style.position="fixed":this.context.dialog.modalArea.style.position="absolute",this.context.dialog.kind=e,this.modalForm=this.context[e].modal;const n=this.context[e].focusElement;"function"==typeof this.plugins[e].on&&this.plugins[e].on.call(this,t),this.context.dialog.modalArea.style.display="block",this.context.dialog.back.style.display="block",this.context.dialog.modal.style.display="block",this.modalForm.style.display="block",n&&n.focus()},_bindClose:null,close:function(){this.plugins.dialog._bindClose&&(this._d.removeEventListener("keydown",this.plugins.dialog._bindClose),this.plugins.dialog._bindClose=null);const e=this.context.dialog.kind;this.modalForm.style.display="none",this.context.dialog.back.style.display="none",this.context.dialog.modalArea.style.display="none",this.context.dialog.updateModal=!1,"function"==typeof this.plugins[e].init&&this.plugins[e].init.call(this),this.context.dialog.kind="",this.modalForm=null,this.focus()}};return void 0===t&&(e.SUNEDITOR_MODULES||Object.defineProperty(e,"SUNEDITOR_MODULES",{enumerable:!0,writable:!1,configurable:!1,value:{}}),Object.defineProperty(e.SUNEDITOR_MODULES,"dialog",{enumerable:!0,writable:!1,configurable:!1,value:n})),n},"object"==typeof e.exports?e.exports=i.document?l(i,!0):function(e){if(!e.document)throw new Error("SUNEDITOR_MODULES a window with a document");return l(e)}:l(i)},"3FqI":function(e,t,n){},JhlZ:function(e,t,n){"use strict";var i,l;i="undefined"!=typeof window?window:this,l=function(e,t){const n={name:"fileBrowser",_xmlHttp:null,_loading:null,add:function(e){const t=e.context;t.fileBrowser={_closeSignal:!1,area:null,header:null,tagArea:null,body:null,list:null,tagElements:null,items:[],selectedTags:[],selectorHandler:null,contextPlugin:"",columnSize:4};let n=e.util.createElement("DIV");n.className="se-file-browser sun-editor-common";let i=e.util.createElement("DIV");i.className="se-file-browser-back";let l=e.util.createElement("DIV");l.className="se-file-browser-inner",l.innerHTML=this.set_browser(e),n.appendChild(i),n.appendChild(l),this._loading=n.querySelector(".se-loading-box"),t.fileBrowser.area=n,t.fileBrowser.header=l.querySelector(".se-file-browser-header"),t.fileBrowser.titleArea=l.querySelector(".se-file-browser-title"),t.fileBrowser.tagArea=l.querySelector(".se-file-browser-tags"),t.fileBrowser.body=l.querySelector(".se-file-browser-body"),t.fileBrowser.list=l.querySelector(".se-file-browser-list"),t.fileBrowser.tagArea.addEventListener("click",this.onClickTag.bind(e)),t.fileBrowser.list.addEventListener("click",this.onClickFile.bind(e)),l.addEventListener("mousedown",this._onMouseDown_browser.bind(e)),l.addEventListener("click",this._onClick_browser.bind(e)),t.element.relative.appendChild(n),n=null,i=null,l=null},set_browser:function(e){return'<div class="se-file-browser-content"><div class="se-file-browser-header"><button type="button" data-command="close" class="se-btn se-file-browser-close" class="close" aria-label="Close" title="'+e.lang.dialogBox.close+'">'+e.icons.cancel+'</button><span class="se-file-browser-title"></span><div class="se-file-browser-tags"></div></div><div class="se-file-browser-body"><div class="se-loading-box sun-editor-common"><div class="se-loading-effect"></div></div><div class="se-file-browser-list"></div></div></div>'},_onMouseDown_browser:function(e){/se-file-browser-inner/.test(e.target.className)?this.context.fileBrowser._closeSignal=!0:this.context.fileBrowser._closeSignal=!1},_onClick_browser:function(e){e.stopPropagation(),(/close/.test(e.target.getAttribute("data-command"))||this.context.fileBrowser._closeSignal)&&this.plugins.fileBrowser.close.call(this)},open:function(e,t){this.plugins.fileBrowser._bindClose&&(this._d.removeEventListener("keydown",this.plugins.fileBrowser._bindClose),this.plugins.fileBrowser._bindClose=null),this.plugins.fileBrowser._bindClose=function(e){/27/.test(e.keyCode)&&this.plugins.fileBrowser.close.call(this)}.bind(this),this._d.addEventListener("keydown",this.plugins.fileBrowser._bindClose);const n=this.context.fileBrowser;n.contextPlugin=e,n.selectorHandler=t;const i=this.context[e],l=i.listClass;this.util.hasClass(n.list,l)||(n.list.className="se-file-browser-list "+l),"full"===this.options.popupDisplay?n.area.style.position="fixed":n.area.style.position="absolute",n.titleArea.textContent=i.title,n.area.style.display="block",this.plugins.fileBrowser._drawFileList.call(this,this.context[e].url,this.context[e].header)},_bindClose:null,close:function(){const e=this.plugins.fileBrowser;e._xmlHttp&&e._xmlHttp.abort(),e._bindClose&&(this._d.removeEventListener("keydown",e._bindClose),e._bindClose=null);const t=this.context.fileBrowser;t.area.style.display="none",t.selectorHandler=null,t.selectedTags=[],t.items=[],t.list.innerHTML=t.tagArea.innerHTML=t.titleArea.textContent="","function"==typeof this.plugins[t.contextPlugin].init&&this.plugins[t.contextPlugin].init.call(this),t.contextPlugin=""},showBrowserLoading:function(){this._loading.style.display="block"},closeBrowserLoading:function(){this._loading.style.display="none"},_drawFileList:function(e,t){const n=this.plugins.fileBrowser,i=n._xmlHttp=this.util.getXMLHttpRequest();if(i.onreadystatechange=n._callBackGet.bind(this,i),i.open("get",e,!0),null!==t&&"object"==typeof t&&this._w.Object.keys(t).length>0)for(let e in t)i.setRequestHeader(e,t[e]);i.send(null),this.plugins.fileBrowser.showBrowserLoading()},_callBackGet:function(e){if(4===e.readyState)if(this.plugins.fileBrowser._xmlHttp=null,200===e.status)try{this.plugins.fileBrowser._drawListItem.call(this,JSON.parse(e.responseText).result,!0)}catch(e){throw Error('[SUNEDITOR.fileBrowser.drawList.fail] cause : "'+e.message+'"')}finally{this.plugins.fileBrowser.closeBrowserLoading(),this.context.fileBrowser.body.style.maxHeight=this._w.innerHeight-this.context.fileBrowser.header.offsetHeight-50+"px"}else if(this.plugins.fileBrowser.closeBrowserLoading(),0!==e.status){const t=e.responseText?JSON.parse(e.responseText):e,n="[SUNEDITOR.fileBrowser.get.serverException] status: "+e.status+", response: "+(t.errorMessage||e.responseText);throw Error(n)}},_drawListItem:function(e,t){const n=this.context.fileBrowser,i=this.context[n.contextPlugin],l=[],o=e.length,s=i.columnSize||n.columnSize,a=s<=1?1:Math.round(o/s)||1,r=i.itemTemplateHandler;let c="",d='<div class="se-file-item-column">',u=1;for(let n,i,h=0;h<o;h++)if(n=e[h],i=n.tag?"string"==typeof n.tag?n.tag.split(","):n.tag:[],i=n.tag=i.map((function(e){return e.trim()})),d+=r(n),(h+1)%a==0&&u<s&&h+1<o&&(u++,d+='</div><div class="se-file-item-column">'),t&&i.length>0)for(let e,t=0,n=i.length;t<n;t++)e=i[t],e&&-1===l.indexOf(e)&&(l.push(e),c+='<a title="'+e+'">'+e+"</a>");d+="</div>",n.list.innerHTML=d,t&&(n.items=e,n.tagArea.innerHTML=c,n.tagElements=n.tagArea.querySelectorAll("A"))},onClickTag:function(e){const t=e.target;if(!this.util.isAnchor(t))return;const n=t.textContent,i=this.plugins.fileBrowser,l=this.context.fileBrowser,o=l.tagArea.querySelector('a[title="'+n+'"]'),s=l.selectedTags,a=s.indexOf(n);a>-1?(s.splice(a,1),this.util.removeClass(o,"on")):(s.push(n),this.util.addClass(o,"on")),i._drawListItem.call(this,0===s.length?l.items:l.items.filter((function(e){return e.tag.some((function(e){return s.indexOf(e)>-1}))})),!1)},onClickFile:function(e){e.preventDefault(),e.stopPropagation();const t=this.context.fileBrowser,n=t.list;let i=e.target,l=null;if(i===n)return;for(;n!==i.parentNode&&(l=i.getAttribute("data-command"),!l);)i=i.parentNode;if(!l)return;const o=t.selectorHandler||this.context[t.contextPlugin].selectorHandler;this.plugins.fileBrowser.close.call(this),o(i)}};return void 0===t&&(e.SUNEDITOR_MODULES||Object.defineProperty(e,"SUNEDITOR_MODULES",{enumerable:!0,writable:!1,configurable:!1,value:{}}),Object.defineProperty(e.SUNEDITOR_MODULES,"fileBrowser",{enumerable:!0,writable:!1,configurable:!1,value:n})),n},"object"==typeof e.exports?e.exports=i.document?l(i,!0):function(e){if(!e.document)throw new Error("SUNEDITOR_MODULES a window with a document");return l(e)}:l(i)},P6u4:function(e,t,n){"use strict";var i,l;i="undefined"!=typeof window?window:this,l=function(e,t){const n={code:"en",toolbar:{default:"Default",save:"Save",font:"Font",formats:"Formats",fontSize:"Size",bold:"Bold",underline:"Underline",italic:"Italic",strike:"Strike",subscript:"Subscript",superscript:"Superscript",removeFormat:"Remove Format",fontColor:"Font Color",hiliteColor:"Highlight Color",indent:"Indent",outdent:"Outdent",align:"Align",alignLeft:"Align left",alignRight:"Align right",alignCenter:"Align center",alignJustify:"Align justify",list:"List",orderList:"Ordered list",unorderList:"Unordered list",horizontalRule:"Horizontal line",hr_solid:"Solid",hr_dotted:"Dotted",hr_dashed:"Dashed",table:"Table",link:"Link",math:"Math",image:"Image",video:"Video",audio:"Audio",fullScreen:"Full screen",showBlocks:"Show blocks",codeView:"Code view",undo:"Undo",redo:"Redo",preview:"Preview",print:"print",tag_p:"Paragraph",tag_div:"Normal (DIV)",tag_h:"Header",tag_blockquote:"Quote",tag_pre:"Code",template:"Template",lineHeight:"Line height",paragraphStyle:"Paragraph style",textStyle:"Text style",imageGallery:"Image gallery",mention:"Mention"},dialogBox:{linkBox:{title:"Insert Link",url:"URL to link",text:"Text to display",newWindowCheck:"Open in new window",downloadLinkCheck:"Download link",bookmark:"Bookmark"},mathBox:{title:"Math",inputLabel:"Mathematical Notation",fontSizeLabel:"Font Size",previewLabel:"Preview"},imageBox:{title:"Insert image",file:"Select from files",url:"Image URL",altText:"Alternative text"},videoBox:{title:"Insert Video",file:"Select from files",url:"Media embed URL, YouTube/Vimeo"},audioBox:{title:"Insert Audio",file:"Select from files",url:"Audio URL"},browser:{tags:"Tags",search:"Search"},caption:"Insert description",close:"Close",submitButton:"Submit",revertButton:"Revert",proportion:"Constrain proportions",basic:"Basic",left:"Left",right:"Right",center:"Center",width:"Width",height:"Height",size:"Size",ratio:"Ratio"},controller:{edit:"Edit",unlink:"Unlink",remove:"Remove",insertRowAbove:"Insert row above",insertRowBelow:"Insert row below",deleteRow:"Delete row",insertColumnBefore:"Insert column before",insertColumnAfter:"Insert column after",deleteColumn:"Delete column",fixedColumnWidth:"Fixed column width",resize100:"Resize 100%",resize75:"Resize 75%",resize50:"Resize 50%",resize25:"Resize 25%",autoSize:"Auto size",mirrorHorizontal:"Mirror, Horizontal",mirrorVertical:"Mirror, Vertical",rotateLeft:"Rotate left",rotateRight:"Rotate right",maxSize:"Max size",minSize:"Min size",tableHeader:"Table header",mergeCells:"Merge cells",splitCells:"Split Cells",HorizontalSplit:"Horizontal split",VerticalSplit:"Vertical split"},menu:{spaced:"Spaced",bordered:"Bordered",neon:"Neon",translucent:"Translucent",shadow:"Shadow",code:"Code"}};return void 0===t&&(e.SUNEDITOR_LANG||Object.defineProperty(e,"SUNEDITOR_LANG",{enumerable:!0,writable:!1,configurable:!1,value:{}}),Object.defineProperty(e.SUNEDITOR_LANG,"en",{enumerable:!0,writable:!0,configurable:!0,value:n})),n},"object"==typeof e.exports?e.exports=i.document?l(i,!0):function(e){if(!e.document)throw new Error("SUNEDITOR_LANG a window with a document");return l(e)}:l(i)},WUQj:function(e,t,n){},XJR1:function(e,t,n){"use strict";n.r(t);n("3FqI"),n("WUQj");var i={name:"colorPicker",add:function(e){const t=e.context;t.colorPicker={colorListHTML:"",_colorInput:"",_defaultColor:"#000",_styleProperty:"color",_currentColor:"",_colorList:[]},t.colorPicker.colorListHTML=this.createColorList(e,this._makeColorList)},createColorList:function(e,t){const n=e.options,i=e.lang,l=n.colorList&&0!==n.colorList.length?n.colorList:["#ff0000","#ff5e00","#ffe400","#abf200","#00d8ff","#0055ff","#6600ff","#ff00dd","#000000","#ffd8d8","#fae0d4","#faf4c0","#e4f7ba","#d4f4fa","#d9e5ff","#e8d9ff","#ffd9fa","#f1f1f1","#ffa7a7","#ffc19e","#faed7d","#cef279","#b2ebf4","#b2ccff","#d1b2ff","#ffb2f5","#bdbdbd","#f15f5f","#f29661","#e5d85c","#bce55c","#5cd1e5","#6699ff","#a366ff","#f261df","#8c8c8c","#980000","#993800","#998a00","#6b9900","#008299","#003399","#3d0099","#990085","#353535","#670000","#662500","#665c00","#476600","#005766","#002266","#290066","#660058","#222222"];let o=[],s='<div class="se-list-inner">';for(let e,n=0,i=l.length;n<i;n++)e=l[n],e&&("string"==typeof e&&(o.push(e),n<i-1)||(o.length>0&&(s+='<div class="se-selector-color">'+t(o)+"</div>",o=[]),"object"==typeof e&&(s+='<div class="se-selector-color">'+t(e)+"</div>")));return s+='<form class="se-form-group"><input type="text" maxlength="9" class="_se_color_picker_input se-color-input"/><button type="submit" class="se-btn-primary _se_color_picker_submit" title="'+i.dialogBox.submitButton+'">'+e.icons.checked+'</button><button type="button" class="se-btn _se_color_picker_remove" title="'+i.toolbar.removeFormat+'">'+e.icons.erase+"</button></form></div>",s},_makeColorList:function(e){let t="";t+='<ul class="se-color-pallet">';for(let n,i=0,l=e.length;i<l;i++)n=e[i],"string"==typeof n&&(t+='<li><button type="button" data-value="'+n+'" title="'+n+'" style="background-color:'+n+';"></button></li>');return t+="</ul>",t},init:function(e,t){const n=this.plugins.colorPicker;let i=t||(n.getColorInNode.call(this,e)||this.context.colorPicker._defaultColor);i=n.isHexColor(i)?i:n.rgb2hex(i)||i;const l=this.context.colorPicker._colorList;if(l)for(let e=0,t=l.length;e<t;e++)i.toLowerCase()===l[e].getAttribute("data-value").toLowerCase()?this.util.addClass(l[e],"active"):this.util.removeClass(l[e],"active");n.setInputText.call(this,n.colorName2hex.call(this,i))},setCurrentColor:function(e){this.context.colorPicker._currentColor=e,this.context.colorPicker._colorInput.style.borderColor=e},setInputText:function(e){e=/^#/.test(e)?e:"#"+e,this.context.colorPicker._colorInput.value=e,this.plugins.colorPicker.setCurrentColor.call(this,e)},getColorInNode:function(e){let t="";const n=this.context.colorPicker._styleProperty;for(;e&&!this.util.isWysiwygDiv(e)&&0===t.length;)1===e.nodeType&&e.style[n]&&(t=e.style[n]),e=e.parentNode;return t},isHexColor:function(e){return/^#[0-9a-f]{3}(?:[0-9a-f]{3})?$/i.test(e)},rgb2hex:function(e){const t=e.match(/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?/i);return t&&4===t.length?"#"+("0"+parseInt(t[1],10).toString(16)).slice(-2)+("0"+parseInt(t[2],10).toString(16)).slice(-2)+("0"+parseInt(t[3],10).toString(16)).slice(-2):""},colorName2hex:function(e){if(/^#/.test(e))return e;var t=this.util.createElement("div");t.style.display="none",t.style.color=e;var n=this._w.getComputedStyle(this._d.body.appendChild(t)).color.match(/\d+/g).map((function(e){return parseInt(e,10)}));return this.util.removeItem(t),n.length>=3&&"#"+((1<<24)+(n[0]<<16)+(n[1]<<8)+n[2]).toString(16).substr(1)}},l={name:"fontColor",display:"submenu",add:function(e,t){e.addModule([i]);const n=e.context;n.fontColor={previewEl:null,colorInput:null,colorList:null};let l=this.setSubmenu(e);n.fontColor.colorInput=l.querySelector("._se_color_picker_input"),n.fontColor.colorInput.addEventListener("keyup",this.onChangeInput.bind(e)),l.querySelector("._se_color_picker_submit").addEventListener("click",this.submit.bind(e)),l.querySelector("._se_color_picker_remove").addEventListener("click",this.remove.bind(e)),l.addEventListener("click",this.pickup.bind(e)),n.fontColor.colorList=l.querySelectorAll("li button"),e.initMenuTarget(this.name,t,l),l=null},setSubmenu:function(e){const t=e.context.colorPicker.colorListHTML,n=e.util.createElement("DIV");return n.className="se-submenu se-list-layer",n.innerHTML=t,n},on:function(){const e=this.context.colorPicker,t=this.context.fontColor;e._colorInput=t.colorInput;const n=this.wwComputedStyle.color;e._defaultColor=n?this.plugins.colorPicker.isHexColor(n)?n:this.plugins.colorPicker.rgb2hex(n):"#333333",e._styleProperty="color",e._colorList=t.colorList,this.plugins.colorPicker.init.call(this,this.getSelectionNode(),null)},onChangeInput:function(e){this.plugins.colorPicker.setCurrentColor.call(this,e.target.value)},submit:function(){this.plugins.fontColor.applyColor.call(this,this.context.colorPicker._currentColor)},pickup:function(e){e.preventDefault(),e.stopPropagation(),this.plugins.fontColor.applyColor.call(this,e.target.getAttribute("data-value"))},remove:function(){this.nodeChange(null,["color"],["span"],!0),this.submenuOff()},applyColor:function(e){if(!e)return;const t=this.util.createElement("SPAN");t.style.color=e,this.nodeChange(t,["color"],null,null),this.submenuOff()}},o={name:"hiliteColor",display:"submenu",add:function(e,t){e.addModule([i]);const n=e.context;n.hiliteColor={previewEl:null,colorInput:null,colorList:null};let l=this.setSubmenu(e);n.hiliteColor.colorInput=l.querySelector("._se_color_picker_input"),n.hiliteColor.colorInput.addEventListener("keyup",this.onChangeInput.bind(e)),l.querySelector("._se_color_picker_submit").addEventListener("click",this.submit.bind(e)),l.querySelector("._se_color_picker_remove").addEventListener("click",this.remove.bind(e)),l.addEventListener("click",this.pickup.bind(e)),n.hiliteColor.colorList=l.querySelectorAll("li button"),e.initMenuTarget(this.name,t,l),l=null},setSubmenu:function(e){const t=e.context.colorPicker.colorListHTML,n=e.util.createElement("DIV");return n.className="se-submenu se-list-layer",n.innerHTML=t,n},on:function(){const e=this.context.colorPicker,t=this.context.hiliteColor;e._colorInput=t.colorInput;const n=this.wwComputedStyle.backgroundColor;e._defaultColor=n?this.plugins.colorPicker.isHexColor(n)?n:this.plugins.colorPicker.rgb2hex(n):"#ffffff",e._styleProperty="backgroundColor",e._colorList=t.colorList,this.plugins.colorPicker.init.call(this,this.getSelectionNode(),null)},onChangeInput:function(e){this.plugins.colorPicker.setCurrentColor.call(this,e.target.value)},submit:function(){this.plugins.hiliteColor.applyColor.call(this,this.context.colorPicker._currentColor)},pickup:function(e){e.preventDefault(),e.stopPropagation(),this.plugins.hiliteColor.applyColor.call(this,e.target.getAttribute("data-value"))},remove:function(){this.nodeChange(null,["background-color"],["span"],!0),this.submenuOff()},applyColor:function(e){if(!e)return;const t=this.util.createElement("SPAN");t.style.backgroundColor=e,this.nodeChange(t,["background-color"],null,null),this.submenuOff()}},s={name:"template",display:"submenu",add:function(e,t){e.context.template={};let n=this.setSubmenu(e);n.querySelector("ul").addEventListener("click",this.pickup.bind(e)),e.initMenuTarget(this.name,t,n),n=null},setSubmenu:function(e){const t=e.options.templates;if(!t||0===t.length)throw Error('[SUNEDITOR.plugins.template.fail] To use the "template" plugin, please define the "templates" option.');const n=e.util.createElement("DIV");n.className="se-list-layer";let i='<div class="se-submenu se-list-inner"><ul class="se-list-basic">';for(let e,n=0,l=t.length;n<l;n++)e=t[n],i+='<li><button type="button" class="se-btn-list" data-value="'+n+'" title="'+e.name+'">'+e.name+"</button></li>";return i+="</ul></div>",n.innerHTML=i,n},pickup:function(e){if(!/^BUTTON$/i.test(e.target.tagName))return!1;e.preventDefault(),e.stopPropagation();const t=this.options.templates[e.target.getAttribute("data-value")];if(!t.html)throw this.submenuOff(),Error('[SUNEDITOR.template.fail] cause : "templates[i].html not found"');this.setContents(t.html),this.submenuOff()}},a=n("1kvd"),r=n.n(a),c={name:"selectMenu",add:function(e){e.context.selectMenu={caller:{},callerContext:null}},setForm:function(){return'<div class="se-select-list"></div>'},createList:function(e,t,n){e.form.innerHTML="<ul>"+n+"</ul>",e.items=t,e.menus=e.form.querySelectorAll("li")},initEvent:function(e,t){const n=t.querySelector(".se-select-list"),i=this.context.selectMenu.caller[e]={form:n,items:[],menus:[],index:-1,item:null,clickMethod:null,callerName:e};n.addEventListener("mousedown",this.plugins.selectMenu.onMousedown_list),n.addEventListener("mousemove",this.plugins.selectMenu.onMouseMove_list.bind(this,i)),n.addEventListener("click",this.plugins.selectMenu.onClick_list.bind(this,i))},onMousedown_list:function(e){e.preventDefault(),e.stopPropagation()},onMouseMove_list:function(e,t){this.util.addClass(e.form,"__se_select-menu-mouse-move");const n=t.target.getAttribute("data-index");n&&(e.index=1*n)},onClick_list:function(e,t){const n=t.target.getAttribute("data-index");n&&e.clickMethod.call(this,e.items[n])},moveItem:function(e,t){this.util.removeClass(e.form,"__se_select-menu-mouse-move"),t=e.index+t;const n=e.menus,i=n.length,l=e.index=t>=i?0:t<0?i-1:t;for(let e=0;e<i;e++)e===l?this.util.addClass(n[e],"active"):this.util.removeClass(n[e],"active");e.item=e.items[l]},getItem:function(e,t){return t=!t||t<0?e.index:t,e.items[t]},on:function(e,t){const n=this.context.selectMenu.caller[e];this.context.selectMenu.callerContext=n,n.clickMethod=t,n.callerName=e},open:function(e,t){const n=e.form;n.style.visibility="hidden",n.style.display="block",t(n),n.style.visibility=""},close:function(e){e.form.style.display="none",e.items=[],e.menus=[],e.index=-1,e.item=null},init:function(e){e&&(e.items=[],e.menus=[],e.index=-1,e.item=null,e.callerName="",this.context.selectMenu.callerContext=null)}},d={name:"anchor",add:function(e){e.addModule([c]),e.context.anchor={caller:{},forms:this.setDialogForm(e),host:(e._w.location.origin+e._w.location.pathname).replace(/\/$/,""),callerContext:null}},setDialogForm:function(e){const t=e.lang,n=e.options.linkRel,i=(e.options.linkRelDefault.default||"").split(" "),l=e.icons,o=e.util.createElement("DIV");let s='<div class="se-dialog-body"><div class="se-dialog-form"><label>'+t.dialogBox.linkBox.url+'</label><div class="se-dialog-form-files"><input class="se-input-form se-input-url" type="text" placeholder="'+(e.options.protocol||"")+'" /><button type="button" class="se-btn se-dialog-files-edge-button _se_bookmark_button" title="'+t.dialogBox.linkBox.bookmark+'">'+l.bookmark+"</button>"+e.plugins.selectMenu.setForm()+'</div><div class="se-anchor-preview-form"><span class="se-svg se-anchor-preview-icon _se_anchor_bookmark_icon">'+l.bookmark+'</span><span class="se-svg se-anchor-preview-icon _se_anchor_download_icon">'+l.download+'</span><pre class="se-link-preview"></pre></div></div><div class="se-dialog-form"><label>'+t.dialogBox.linkBox.text+'</label><input class="se-input-form _se_anchor_text" type="text" /></div><div class="se-dialog-form-footer"><label><input type="checkbox" class="se-dialog-btn-check _se_anchor_check" />&nbsp;'+t.dialogBox.linkBox.newWindowCheck+'</label><label><input type="checkbox" class="se-dialog-btn-check _se_anchor_download" />&nbsp;'+t.dialogBox.linkBox.downloadLinkCheck+"</label>";if(n.length>0){s+='<div class="se-anchor-rel"><button type="button" class="se-btn se-btn-select se-anchor-rel-btn">&lt;rel&gt;</button><div class="se-anchor-rel-wrapper"><pre class="se-link-preview se-anchor-rel-preview"></pre></div><div class="se-list-layer"><div class="se-list-inner"><ul class="se-list-basic se-list-checked">';for(let e,t=0,o=n.length;t<o;t++)e=n[t],s+='<li><button type="button" class="se-btn-list'+(i.indexOf(e)>-1?" se-checked":"")+'" data-command="'+e+'" title="'+e+'"><span class="se-svg">'+l.checked+"</span>"+e+"</button></li>";s+="</ul></div></div></div>"}return s+="</div></div>",o.innerHTML=s,o},initEvent:function(e,t){const n=this.plugins.anchor,i=this.context.anchor.caller[e]={modal:t,urlInput:null,linkDefaultRel:this.options.linkRelDefault,defaultRel:this.options.linkRelDefault.default||"",currentRel:[],linkAnchor:null,linkValue:"",_change:!1,callerName:e};"string"==typeof i.linkDefaultRel.default&&(i.linkDefaultRel.default=i.linkDefaultRel.default.trim()),"string"==typeof i.linkDefaultRel.check_new_window&&(i.linkDefaultRel.check_new_window=i.linkDefaultRel.check_new_window.trim()),"string"==typeof i.linkDefaultRel.check_bookmark&&(i.linkDefaultRel.check_bookmark=i.linkDefaultRel.check_bookmark.trim()),i.urlInput=t.querySelector(".se-input-url"),i.anchorText=t.querySelector("._se_anchor_text"),i.newWindowCheck=t.querySelector("._se_anchor_check"),i.downloadCheck=t.querySelector("._se_anchor_download"),i.download=t.querySelector("._se_anchor_download_icon"),i.preview=t.querySelector(".se-link-preview"),i.bookmark=t.querySelector("._se_anchor_bookmark_icon"),i.bookmarkButton=t.querySelector("._se_bookmark_button"),this.plugins.selectMenu.initEvent.call(this,e,t);const l=this.context.selectMenu.caller[e];this.options.linkRel.length>0&&(i.relButton=t.querySelector(".se-anchor-rel-btn"),i.relList=t.querySelector(".se-list-layer"),i.relPreview=t.querySelector(".se-anchor-rel-preview"),i.relButton.addEventListener("click",n.onClick_relButton.bind(this,i)),i.relList.addEventListener("click",n.onClick_relList.bind(this,i))),i.newWindowCheck.addEventListener("change",n.onChange_newWindowCheck.bind(this,i)),i.downloadCheck.addEventListener("change",n.onChange_downloadCheck.bind(this,i)),i.anchorText.addEventListener("input",n.onChangeAnchorText.bind(this,i)),i.urlInput.addEventListener("input",n.onChangeUrlInput.bind(this,i)),i.urlInput.addEventListener("keydown",n.onKeyDownUrlInput.bind(this,l)),i.urlInput.addEventListener("focus",n.onFocusUrlInput.bind(this,i,l)),i.urlInput.addEventListener("blur",n.onBlurUrlInput.bind(this,l)),i.bookmarkButton.addEventListener("click",n.onClick_bookmarkButton.bind(this,i))},on:function(e,t){if(t){if(e.linkAnchor){this.context.dialog.updateModal=!0;const t=e.linkAnchor.href;e.linkValue=e.preview.textContent=e.urlInput.value=/\#.+$/.test(t)?t.substr(t.lastIndexOf("#")):t,e.anchorText.value=e.linkAnchor.textContent.trim()||e.linkAnchor.getAttribute("alt"),e.newWindowCheck.checked=!!/_blank/i.test(e.linkAnchor.target),e.downloadCheck.checked=e.linkAnchor.download}}else this.plugins.anchor.init.call(this,e),e.anchorText.value=this.getSelection().toString();this.context.anchor.callerContext=e,this.plugins.anchor.setRel.call(this,e,t&&e.linkAnchor?e.linkAnchor.rel:e.defaultRel),this.plugins.anchor.setLinkPreview.call(this,e,e.linkValue),this.plugins.selectMenu.on.call(this,e.callerName,this.plugins.anchor.setHeaderBookmark)},_closeRelMenu:null,toggleRelList:function(e,t){if(t){const t=e.relButton,n=e.relList;this.util.addClass(t,"active"),n.style.visibility="hidden",n.style.display="block",this.options.rtl?n.style.left=t.offsetLeft-n.offsetWidth-1+"px":n.style.left=t.offsetLeft+t.offsetWidth+1+"px",n.style.top=t.offsetTop+t.offsetHeight/2-n.offsetHeight/2+"px",n.style.visibility="",this.plugins.anchor._closeRelMenu=function(e,t,n){n&&(e.relButton.contains(n.target)||e.relList.contains(n.target))||(this.util.removeClass(t,"active"),e.relList.style.display="none",this.modalForm.removeEventListener("click",this.plugins.anchor._closeRelMenu),this.plugins.anchor._closeRelMenu=null)}.bind(this,e,t),this.modalForm.addEventListener("click",this.plugins.anchor._closeRelMenu)}else this.plugins.anchor._closeRelMenu&&this.plugins.anchor._closeRelMenu()},onClick_relButton:function(e,t){this.plugins.anchor.toggleRelList.call(this,e,!this.util.hasClass(t.target,"active"))},onClick_relList:function(e,t){const n=t.target,i=n.getAttribute("data-command");if(!i)return;const l=e.currentRel,o=this.util.toggleClass(n,"se-checked"),s=l.indexOf(i);o?-1===s&&l.push(i):s>-1&&l.splice(s,1),e.relPreview.title=e.relPreview.textContent=l.join(" ")},setRel:function(e,t){const n=e.relList,i=e.currentRel=t?t.split(" "):[];if(!n)return;const l=n.querySelectorAll("button");for(let e,t=0,n=l.length;t<n;t++)e=l[t].getAttribute("data-command"),i.indexOf(e)>-1?this.util.addClass(l[t],"se-checked"):this.util.removeClass(l[t],"se-checked");e.relPreview.title=e.relPreview.textContent=i.join(" ")},createHeaderList:function(e,t,n){const i=this.util.getListChildren(this.context.element.wysiwyg,(function(e){return/h[1-6]/i.test(e.nodeName)}));if(0===i.length)return;const l=new this._w.RegExp("^"+n.replace(/^#/,""),"i"),o=[];let s="";for(let e,t=0,n=i.length;t<n;t++)e=i[t],l.test(e.textContent)&&(o.push(e),s+='<li class="se-select-item" data-index="'+t+'">'+e.textContent+"</li>");0===o.length?this.plugins.selectMenu.close.call(this,t):(this.plugins.selectMenu.createList(t,o,s),this.plugins.selectMenu.open.call(this,t,this.plugins.anchor._setMenuListPosition.bind(this,e)))},_setMenuListPosition:function(e,t){t.style.top=e.urlInput.offsetHeight+1+"px"},onKeyDownUrlInput:function(e,t){switch(t.keyCode){case 38:t.preventDefault(),t.stopPropagation(),this.plugins.selectMenu.moveItem.call(this,e,-1);break;case 40:t.preventDefault(),t.stopPropagation(),this.plugins.selectMenu.moveItem.call(this,e,1);break;case 13:e.index>-1&&(t.preventDefault(),t.stopPropagation(),this.plugins.anchor.setHeaderBookmark.call(this,this.plugins.selectMenu.getItem(e,null)))}},setHeaderBookmark:function(e){const t=this.context.anchor.callerContext,n=e.id||"h_"+this._w.Math.random().toString().replace(/.+\./,"");e.id=n,t.urlInput.value="#"+n,t.anchorText.value.trim()&&t._change||(t.anchorText.value=e.textContent),this.plugins.anchor.setLinkPreview.call(this,t,t.urlInput.value),this.plugins.selectMenu.close.call(this,this.context.selectMenu.callerContext),this.context.anchor.callerContext.urlInput.focus()},onChangeAnchorText:function(e,t){e._change=!!t.target.value.trim()},onChangeUrlInput:function(e,t){const n=t.target.value.trim();this.plugins.anchor.setLinkPreview.call(this,e,n),/^#/.test(n)?this.plugins.anchor.createHeaderList.call(this,e,this.context.selectMenu.callerContext,n):this.plugins.selectMenu.close.call(this,this.context.selectMenu.callerContext)},onFocusUrlInput:function(e,t){const n=e.urlInput.value;/^#/.test(n)&&this.plugins.anchor.createHeaderList.call(this,e,t,n)},onBlurUrlInput:function(e){this.plugins.selectMenu.close.call(this,e)},setLinkPreview:function(e,t){const n=e.preview,i=this.options.linkProtocol,l=/^(mailto\:|tel\:|sms\:|https*\:\/\/|#)/.test(t),o=!!i&&this._w.RegExp("^"+t.substr(0,i.length)).test(i);e.linkValue=n.textContent=t?!i||l||o?l?t:/^www\./.test(t)?"http://"+t:this.context.anchor.host+(/^\//.test(t)?"":"/")+t:i+t:"",0===t.indexOf("#")?(e.bookmark.style.display="block",this.util.addClass(e.bookmarkButton,"active")):(e.bookmark.style.display="none",this.util.removeClass(e.bookmarkButton,"active")),-1===t.indexOf("#")&&e.downloadCheck.checked?e.download.style.display="block":e.download.style.display="none"},setCtx:function(e,t){e&&(t.linkAnchor=e,t.linkValue=e.href,t.currentRel=e.rel.split(" "))},updateAnchor:function(e,t,n,i,l){!/^\#/.test(t)&&i.downloadCheck.checked?e.setAttribute("download",n||t):e.removeAttribute("download"),i.newWindowCheck.checked?e.target="_blank":e.removeAttribute("target");const o=i.currentRel.join(" ");o?e.rel=o:e.removeAttribute("rel"),e.href=t,e.setAttribute("alt",n),l?0===e.children.length&&(e.textContent=""):e.textContent=n},createAnchor:function(e,t){if(0===e.linkValue.length)return null;const n=e.linkValue,i=e.anchorText,l=0===i.value.length?n:i.value,o=e.linkAnchor||this.util.createElement("A");return this.plugins.anchor.updateAnchor(o,n,l,e,t),e.linkValue=e.preview.textContent=e.urlInput.value=e.anchorText.value="",o},onClick_bookmarkButton:function(e){let t=e.urlInput.value;/^\#/.test(t)?(t=t.substr(1),e.bookmark.style.display="none",this.util.removeClass(e.bookmarkButton,"active"),this.plugins.selectMenu.close.call(this,this.context.selectMenu.callerContext)):(t="#"+t,e.bookmark.style.display="block",this.util.addClass(e.bookmarkButton,"active"),e.downloadCheck.checked=!1,e.download.style.display="none",this.plugins.anchor.createHeaderList.call(this,e,this.context.selectMenu.callerContext,t)),e.urlInput.value=t,this.plugins.anchor.setLinkPreview.call(this,e,t),e.urlInput.focus()},onChange_newWindowCheck:function(e,t){"string"==typeof e.linkDefaultRel.check_new_window&&(t.target.checked?this.plugins.anchor.setRel.call(this,e,this.plugins.anchor._relMerge.call(this,e,e.linkDefaultRel.check_new_window)):this.plugins.anchor.setRel.call(this,e,this.plugins.anchor._relDelete.call(this,e,e.linkDefaultRel.check_new_window)))},onChange_downloadCheck:function(e,t){t.target.checked?(e.download.style.display="block",e.bookmark.style.display="none",this.util.removeClass(e.bookmarkButton,"active"),e.linkValue=e.preview.textContent=e.urlInput.value=e.urlInput.value.replace(/^\#+/,""),"string"==typeof e.linkDefaultRel.check_bookmark&&this.plugins.anchor.setRel.call(this,e,this.plugins.anchor._relMerge.call(this,e,e.linkDefaultRel.check_bookmark))):(e.download.style.display="none","string"==typeof e.linkDefaultRel.check_bookmark&&this.plugins.anchor.setRel.call(this,e,this.plugins.anchor._relDelete.call(this,e,e.linkDefaultRel.check_bookmark)))},_relMerge:function(e,t){const n=e.currentRel;if(!t)return n.join(" ");if(/^only\:/.test(t))return t=t.replace(/^only\:/,"").trim(),e.currentRel=t.split(" "),t;const i=t.split(" ");for(let e,t=0,l=i.length;t<l;t++)e=n.indexOf(i[t]),-1===e&&n.push(i[t]);return n.join(" ")},_relDelete:function(e,t){if(!t)return e.currentRel.join(" ");/^only\:/.test(t)&&(t=t.replace(/^only\:/,"").trim());const n=e.currentRel.join(" ").replace(this._w.RegExp(t+"\\s*"),"");return e.currentRel=n.split(" "),n},init:function(e){e.linkAnchor=null,e.linkValue=e.preview.textContent=e.urlInput.value="",e.anchorText.value="",e.newWindowCheck.checked=!1,e.downloadCheck.checked=!1,e._change=!1,this.plugins.anchor.setRel.call(this,e,e.defaultRel),e.relList&&this.plugins.anchor.toggleRelList.call(this,e,!1),this.context.anchor.callerContext=null,this.plugins.selectMenu.init.call(this,this.context.selectMenu.callerContext)}},u={name:"link",display:"dialog",add:function(e){e.addModule([r.a,d]);const t=e.context,n=t.link={focusElement:null,_linkAnchor:null,anchorCtx:null};let i=this.setDialog(e);n.modal=i;let l=this.setController_LinkButton(e);n.linkController=l,i.querySelector("form").addEventListener("submit",this.submit.bind(e)),l.addEventListener("click",this.onClick_linkController.bind(e)),t.dialog.modal.appendChild(i),t.element.relative.appendChild(l),e.plugins.anchor.initEvent.call(e,"link",i),n.focusElement=t.anchor.caller.link.urlInput,i=null,l=null},setDialog:function(e){const t=e.lang,n=e.util.createElement("DIV"),i=e.icons;n.className="se-dialog-content",n.style.display="none";let l='<form><div class="se-dialog-header"><button type="button" data-command="close" class="se-btn se-dialog-close" aria-label="Close" title="'+t.dialogBox.close+'">'+i.cancel+'</button><span class="se-modal-title">'+t.dialogBox.linkBox.title+"</span></div>"+e.context.anchor.forms.innerHTML+'<div class="se-dialog-footer"><button type="submit" class="se-btn-primary" title="'+t.dialogBox.submitButton+'"><span>'+t.dialogBox.submitButton+"</span></button></div></form>";return n.innerHTML=l,n},setController_LinkButton:function(e){const t=e.lang,n=e.icons,i=e.util.createElement("DIV");return i.className="se-controller se-controller-link",i.innerHTML='<div class="se-arrow se-arrow-up"></div><div class="link-content"><span><a target="_blank" href=""></a>&nbsp;</span><div class="se-btn-group"><button type="button" data-command="update" tabindex="-1" class="se-btn se-tooltip">'+n.edit+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.edit+'</span></span></button><button type="button" data-command="unlink" tabindex="-1" class="se-btn se-tooltip">'+n.unlink+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.unlink+'</span></span></button><button type="button" data-command="delete" tabindex="-1" class="se-btn se-tooltip">'+n.delete+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.remove+"</span></span></button></div></div>",i},open:function(){this.plugins.dialog.open.call(this,"link","link"===this.currentControllerName)},submit:function(e){this.showLoading(),e.preventDefault(),e.stopPropagation();try{const e=this.plugins.anchor.createAnchor.call(this,this.context.anchor.caller.link,!1);if(this.context.dialog.updateModal){const e=this.context.link._linkAnchor.childNodes[0];this.setRange(e,0,e,e.textContent.length)}else{const t=this.getSelectedElements();if(t.length>1){const n=this.util.createElement(t[0].nodeName);if(n.appendChild(e),!this.insertNode(n,null,!0))return}else if(!this.insertNode(e,null,!0))return;this.setRange(e.childNodes[0],0,e.childNodes[0],e.textContent.length)}}finally{this.plugins.dialog.close.call(this),this.closeLoading(),this.history.push(!1)}return!1},active:function(e){if(e){if(this.util.isAnchor(e)&&null===e.getAttribute("data-image-link"))return this.controllerArray.indexOf(this.context.link.linkController)<0&&this.plugins.link.call_controller.call(this,e),!0}else this.controllerArray.indexOf(this.context.link.linkController)>-1&&this.controllersOff();return!1},on:function(e){this.plugins.anchor.on.call(this,this.context.anchor.caller.link,e)},call_controller:function(e){this.editLink=this.context.link._linkAnchor=this.context.anchor.caller.link.linkAnchor=e;const t=this.context.link.linkController,n=t.querySelector("a");n.href=e.href,n.title=e.textContent,n.textContent=e.textContent,this.util.addClass(e,"on"),this.setControllerPosition(t,e,"bottom",{left:0,top:0}),this.controllersOn(t,e,"link",this.util.removeClass.bind(this.util,this.context.link._linkAnchor,"on"))},onClick_linkController:function(e){e.stopPropagation();const t=e.target.getAttribute("data-command")||e.target.parentNode.getAttribute("data-command");if(t){if(e.preventDefault(),/update/.test(t))this.plugins.dialog.open.call(this,"link",!0);else if(/unlink/.test(t)){const e=this.util.getChildElement(this.context.link._linkAnchor,(function(e){return 0===e.childNodes.length||3===e.nodeType}),!1),t=this.util.getChildElement(this.context.link._linkAnchor,(function(e){return 0===e.childNodes.length||3===e.nodeType}),!0);this.setRange(e,0,t,t.textContent.length),this.nodeChange(null,null,["A"],!1)}else this.util.removeItem(this.context.link._linkAnchor),this.context.anchor.caller.link.linkAnchor=null,this.focus(),this.history.push(!1);this.controllersOff()}},init:function(){this.context.link.linkController.style.display="none",this.plugins.anchor.init.call(this,this.context.anchor.caller.link)}},h=n("ZED3"),p=n.n(h),g=n("ee5k"),m=n.n(g),f=n("gjS+"),_=n.n(f),b={name:"image",display:"dialog",add:function(e){e.addModule([r.a,d,p.a,m.a,_.a]);const t=e.options,n=e.context,i=n.image={_infoList:[],_infoIndex:0,_uploadFileLength:0,focusElement:null,sizeUnit:t._imageSizeUnit,_linkElement:"",_altText:"",_align:"none",_floatClassRegExp:"__se__float\\-[a-z]+",_v_src:{_linkValue:""},svgDefaultSize:"30%",base64RenderIndex:0,_element:null,_cover:null,_container:null,inputX:null,inputY:null,_element_w:1,_element_h:1,_element_l:0,_element_t:0,_defaultSizeX:"auto",_defaultSizeY:"auto",_origin_w:"auto"===t.imageWidth?"":t.imageWidth,_origin_h:"auto"===t.imageHeight?"":t.imageHeight,_proportionChecked:!0,_resizing:t.imageResizing,_resizeDotHide:!t.imageHeightShow,_rotation:t.imageRotation,_onlyPercentage:t.imageSizeOnlyPercentage,_ratio:!1,_ratioX:1,_ratioY:1,_captionShow:!0,_captionChecked:!1,_caption:null,captionCheckEl:null};let l=this.setDialog(e);i.modal=l,i.imgInputFile=l.querySelector("._se_image_file"),i.imgUrlFile=l.querySelector("._se_image_url"),i.focusElement=i.imgInputFile||i.imgUrlFile,i.altText=l.querySelector("._se_image_alt"),i.captionCheckEl=l.querySelector("._se_image_check_caption"),i.previewSrc=l.querySelector("._se_tab_content_image .se-link-preview"),l.querySelector(".se-dialog-tabs").addEventListener("click",this.openTab.bind(e)),l.querySelector("form").addEventListener("submit",this.submit.bind(e)),i.imgInputFile&&l.querySelector(".se-file-remove").addEventListener("click",this._removeSelectedFiles.bind(i.imgInputFile,i.imgUrlFile,i.previewSrc)),i.imgUrlFile&&i.imgUrlFile.addEventListener("input",this._onLinkPreview.bind(i.previewSrc,i._v_src,t.linkProtocol)),i.imgInputFile&&i.imgUrlFile&&i.imgInputFile.addEventListener("change",this._fileInputChange.bind(i));const o=l.querySelector(".__se__gallery");o&&o.addEventListener("click",this._openGallery.bind(e)),i.proportion={},i.inputX={},i.inputY={},t.imageResizing&&(i.proportion=l.querySelector("._se_image_check_proportion"),i.inputX=l.querySelector("._se_image_size_x"),i.inputY=l.querySelector("._se_image_size_y"),i.inputX.value=t.imageWidth,i.inputY.value=t.imageHeight,i.inputX.addEventListener("keyup",this.setInputSize.bind(e,"x")),i.inputY.addEventListener("keyup",this.setInputSize.bind(e,"y")),i.inputX.addEventListener("change",this.setRatio.bind(e)),i.inputY.addEventListener("change",this.setRatio.bind(e)),i.proportion.addEventListener("change",this.setRatio.bind(e)),l.querySelector(".se-dialog-btn-revert").addEventListener("click",this.sizeRevert.bind(e))),n.dialog.modal.appendChild(l),e.plugins.anchor.initEvent.call(e,"image",l.querySelector("._se_tab_content_url")),i.anchorCtx=e.context.anchor.caller.image,l=null},setDialog:function(e){const t=e.options,n=e.lang,i=e.util.createElement("DIV");i.className="se-dialog-content se-dialog-image",i.style.display="none";let l='<div class="se-dialog-header"><button type="button" data-command="close" class="se-btn se-dialog-close" class="close" aria-label="Close" title="'+n.dialogBox.close+'">'+e.icons.cancel+'</button><span class="se-modal-title">'+n.dialogBox.imageBox.title+'</span></div><div class="se-dialog-tabs"><button type="button" class="_se_tab_link active" data-tab-link="image">'+n.toolbar.image+'</button><button type="button" class="_se_tab_link" data-tab-link="url">'+n.toolbar.link+'</button></div><form method="post" enctype="multipart/form-data"><div class="_se_tab_content _se_tab_content_image"><div class="se-dialog-body"><div style="border-bottom: 1px dashed #ccc;">';if(t.imageFileInput&&(l+='<div class="se-dialog-form"><label>'+n.dialogBox.imageBox.file+'</label><div class="se-dialog-form-files"><input class="se-input-form _se_image_file" type="file" accept="'+t.imageAccept+'"'+(t.imageMultipleFile?' multiple="multiple"':"")+'/><button type="button" class="se-btn se-dialog-files-edge-button se-file-remove" title="'+n.controller.remove+'">'+e.icons.cancel+"</button></div></div>"),t.imageUrlInput&&(l+='<div class="se-dialog-form"><label>'+n.dialogBox.imageBox.url+'</label><div class="se-dialog-form-files"><input class="se-input-form se-input-url _se_image_url" type="text" />'+(t.imageGalleryUrl&&e.plugins.imageGallery?'<button type="button" class="se-btn se-dialog-files-edge-button __se__gallery" title="'+n.toolbar.imageGallery+'">'+e.icons.image_gallery+"</button>":"")+'</div><pre class="se-link-preview"></pre></div>'),l+='</div><div class="se-dialog-form"><label>'+n.dialogBox.imageBox.altText+'</label><input class="se-input-form _se_image_alt" type="text" /></div>',t.imageResizing){const i=t.imageSizeOnlyPercentage,o=i?' style="display: none !important;"':"",s=t.imageHeightShow?"":' style="display: none !important;"';l+='<div class="se-dialog-form">',i||!t.imageHeightShow?l+='<div class="se-dialog-size-text"><label class="size-w">'+n.dialogBox.size+"</label></div>":l+='<div class="se-dialog-size-text"><label class="size-w">'+n.dialogBox.width+'</label><label class="se-dialog-size-x">&nbsp;</label><label class="size-h">'+n.dialogBox.height+"</label></div>",l+='<input class="se-input-control _se_image_size_x" placeholder="auto"'+(i?' type="number" min="1"':'type="text"')+(i?' max="100"':"")+' /><label class="se-dialog-size-x"'+s+">"+(i?"%":"x")+'</label><input type="text" class="se-input-control _se_image_size_y" placeholder="auto"'+o+(i?' max="100"':"")+s+"/><label"+o+s+'><input type="checkbox" class="se-dialog-btn-check _se_image_check_proportion" checked/>&nbsp;'+n.dialogBox.proportion+'</label><button type="button" title="'+n.dialogBox.revertButton+'" class="se-btn se-dialog-btn-revert" style="float: right;">'+e.icons.revert+"</button></div>"}return l+='<div class="se-dialog-form se-dialog-form-footer"><label><input type="checkbox" class="se-dialog-btn-check _se_image_check_caption" />&nbsp;'+n.dialogBox.caption+'</label></div></div></div><div class="_se_tab_content _se_tab_content_url" style="display: none">'+e.context.anchor.forms.innerHTML+'</div><div class="se-dialog-footer"><div><label><input type="radio" name="suneditor_image_radio" class="se-dialog-btn-radio" value="none" checked>'+n.dialogBox.basic+'</label><label><input type="radio" name="suneditor_image_radio" class="se-dialog-btn-radio" value="left">'+n.dialogBox.left+'</label><label><input type="radio" name="suneditor_image_radio" class="se-dialog-btn-radio" value="center">'+n.dialogBox.center+'</label><label><input type="radio" name="suneditor_image_radio" class="se-dialog-btn-radio" value="right">'+n.dialogBox.right+'</label></div><button type="submit" class="se-btn-primary" title="'+n.dialogBox.submitButton+'"><span>'+n.dialogBox.submitButton+"</span></button></div></form>",i.innerHTML=l,i},_fileInputChange:function(){this.imgInputFile.value?(this.imgUrlFile.setAttribute("disabled",!0),this.previewSrc.style.textDecoration="line-through"):(this.imgUrlFile.removeAttribute("disabled"),this.previewSrc.style.textDecoration="")},_removeSelectedFiles:function(e,t){this.value="",e&&(e.removeAttribute("disabled"),t.style.textDecoration="")},_openGallery:function(){this.callPlugin("imageGallery",this.plugins.imageGallery.open.bind(this,this.plugins.image._setUrlInput.bind(this.context.image)),null)},_setUrlInput:function(e){this.altText.value=e.alt,this._v_src._linkValue=this.previewSrc.textContent=this.imgUrlFile.value=e.src,this.imgUrlFile.focus()},_onLinkPreview:function(e,t,n){const i=n.target.value.trim();e._linkValue=this.textContent=i?t&&-1===i.indexOf("://")&&0!==i.indexOf("#")?t+i:-1===i.indexOf("://")?"/"+i:i:""},fileTags:["img"],select:function(e){this.plugins.image.onModifyMode.call(this,e,this.plugins.resizing.call_controller_resize.call(this,e,"image"))},destroy:function(e){const t=e||this.context.image._element,n=this.util.getParentElement(t,this.util.isMediaComponent)||t,i=1*t.getAttribute("data-index");let l=n.previousElementSibling||n.nextElementSibling;const o=n.parentNode;this.util.removeItem(n),this.plugins.image.init.call(this),this.controllersOff(),o!==this.context.element.wysiwyg&&this.util.removeItemAllParents(o,(function(e){return 0===e.childNodes.length}),null),this.focusEdge(l),this.plugins.fileManager.deleteInfo.call(this,"image",i,this.functions.onImageUpload),this.history.push(!1)},on:function(e){const t=this.context.image;e?t.imgInputFile&&this.options.imageMultipleFile&&t.imgInputFile.removeAttribute("multiple"):(t.inputX.value=t._origin_w=this.options.imageWidth===t._defaultSizeX?"":this.options.imageWidth,t.inputY.value=t._origin_h=this.options.imageHeight===t._defaultSizeY?"":this.options.imageHeight,t.imgInputFile&&this.options.imageMultipleFile&&t.imgInputFile.setAttribute("multiple","multiple")),this.plugins.anchor.on.call(this,t.anchorCtx,e)},open:function(){this.plugins.dialog.open.call(this,"image","image"===this.currentControllerName)},openTab:function(e){const t=this.context.image.modal,n="init"===e?t.querySelector("._se_tab_link"):e.target;if(!/^BUTTON$/i.test(n.tagName))return!1;const i=n.getAttribute("data-tab-link");let l,o,s;for(o=t.getElementsByClassName("_se_tab_content"),l=0;l<o.length;l++)o[l].style.display="none";for(s=t.getElementsByClassName("_se_tab_link"),l=0;l<s.length;l++)this.util.removeClass(s[l],"active");return t.querySelector("._se_tab_content_"+i).style.display="block",this.util.addClass(n,"active"),"image"===i&&this.context.image.focusElement?this.context.image.focusElement.focus():"url"===i&&this.context.anchor.caller.image.urlInput.focus(),!1},submit:function(e){const t=this.context.image,n=this.plugins.image;e.preventDefault(),e.stopPropagation(),t._altText=t.altText.value,t._align=t.modal.querySelector('input[name="suneditor_image_radio"]:checked').value,t._captionChecked=t.captionCheckEl.checked,t._resizing&&(t._proportionChecked=t.proportion.checked);try{this.context.dialog.updateModal&&n.update_image.call(this,!1,!0,!1),t.imgInputFile&&t.imgInputFile.files.length>0?(this.showLoading(),n.submitAction.call(this,this.context.image.imgInputFile.files)):t.imgUrlFile&&t._v_src._linkValue.length>0&&(this.showLoading(),n.onRender_imgUrl.call(this))}catch(e){throw this.closeLoading(),Error('[SUNEDITOR.image.submit.fail] cause : "'+e.message+'"')}finally{this.plugins.dialog.close.call(this)}return!1},submitAction:function(e){if(0===e.length)return;let t=0,n=[];for(let i=0,l=e.length;i<l;i++)/image/i.test(e[i].type)&&(n.push(e[i]),t+=e[i].size);const i=this.options.imageUploadSizeLimit;if(i>0){let e=0;const n=this.context.image._infoList;for(let t=0,i=n.length;t<i;t++)e+=1*n[t].size;if(t+e>i){this.closeLoading();const n="[SUNEDITOR.imageUpload.fail] Size of uploadable total images: "+i/1e3+"KB";return void(("function"!=typeof this.functions.onImageUploadError||this.functions.onImageUploadError(n,{limitSize:i,currentSize:e,uploadSize:t},this))&&this.functions.noticeOpen(n))}}const l=this.context.image;l._uploadFileLength=n.length;const o={anchor:this.plugins.anchor.createAnchor.call(this,l.anchorCtx,!0),inputWidth:l.inputX.value,inputHeight:l.inputY.value,align:l._align,isUpdate:this.context.dialog.updateModal,element:l._element};if("function"==typeof this.functions.onImageUploadBefore){const e=this.functions.onImageUploadBefore(n,o,this,function(e){e&&this._w.Array.isArray(e.result)?this.plugins.image.register.call(this,o,e):this.plugins.image.upload.call(this,o,e)}.bind(this));if(void 0===e)return;if(!e)return void this.closeLoading();this._w.Array.isArray(e)&&e.length>0&&(n=e)}this.plugins.image.upload.call(this,o,n)},error:function(e,t){if(this.closeLoading(),"function"!=typeof this.functions.onImageUploadError||this.functions.onImageUploadError(e,t,this))throw this.functions.noticeOpen(e),Error("[SUNEDITOR.plugin.image.error] response: "+e)},upload:function(e,t){if(!t)return void this.closeLoading();if("string"==typeof t)return void this.plugins.image.error.call(this,t,null);const n=this.options.imageUploadUrl,i=this.context.dialog.updateModal?1:t.length;if("string"==typeof n&&n.length>0){const l=new FormData;for(let e=0;e<i;e++)l.append("file-"+e,t[e]);this.plugins.fileManager.upload.call(this,n,this.options.imageUploadHeader,l,this.plugins.image.callBack_imgUpload.bind(this,e),this.functions.onImageUploadError)}else this.plugins.image.setup_reader.call(this,t,e.anchor,e.inputWidth,e.inputHeight,e.align,i,e.isUpdate)},callBack_imgUpload:function(e,t){if("function"==typeof this.functions.imageUploadHandler)this.functions.imageUploadHandler(t,e,this);else{const n=JSON.parse(t.responseText);n.errorMessage?this.plugins.image.error.call(this,n.errorMessage,n):this.plugins.image.register.call(this,e,n)}},register:function(e,t){const n=t.result;for(let t,i=0,l=n.length;i<l;i++){if(t={name:n[i].name,size:n[i].size},e.isUpdate){this.plugins.image.update_src.call(this,n[i].url,e.element,t);break}this.plugins.image.create_image.call(this,n[i].url,e.anchor,e.inputWidth,e.inputHeight,e.align,t)}this.closeLoading()},setup_reader:function(e,t,n,i,l,o,s){try{this.context.image.base64RenderIndex=o;const a=this._w.FileReader,r=[o];this.context.image.inputX.value=n,this.context.image.inputY.value=i;for(let c,d,u=0;u<o;u++)c=new a,d=e[u],c.onload=function(e,o,s,a,c){r[c]={result:e.result,file:a},0==--this.context.image.base64RenderIndex&&(this.plugins.image.onRender_imgBase64.call(this,o,r,s,t,n,i,l),this.closeLoading())}.bind(this,c,s,this.context.image._element,d,u),c.readAsDataURL(d)}catch(e){throw this.closeLoading(),Error('[SUNEDITOR.image.setup_reader.fail] cause : "'+e.message+'"')}},onRender_imgBase64:function(e,t,n,i,l,o,s){const a=this.plugins.image.update_src,r=this.plugins.image.create_image;for(let c=0,d=t.length;c<d;c++)e?(this.context.image._element.setAttribute("data-file-name",t[c].file.name),this.context.image._element.setAttribute("data-file-size",t[c].file.size),a.call(this,t[c].result,n,t[c].file)):r.call(this,t[c].result,i,l,o,s,t[c].file)},onRender_imgUrl:function(){const e=this.context.image;if(0===e._v_src._linkValue.length)return!1;try{const t={name:e._v_src._linkValue.split("/").pop(),size:0};this.context.dialog.updateModal?this.plugins.image.update_src.call(this,e._v_src._linkValue,e._element,t):this.plugins.image.create_image.call(this,e._v_src._linkValue,this.plugins.anchor.createAnchor.call(this,e.anchorCtx,!0),e.inputX.value,e.inputY.value,e._align,t)}catch(e){throw Error('[SUNEDITOR.image.URLRendering.fail] cause : "'+e.message+'"')}finally{this.closeLoading()}},onRender_link:function(e,t){return t?(t.setAttribute("data-image-link","image"),e.setAttribute("data-image-link",t.href),t.appendChild(e),t):e},setInputSize:function(e,t){t&&32===t.keyCode?t.preventDefault():this.plugins.resizing._module_setInputSize.call(this,this.context.image,e)},setRatio:function(){this.plugins.resizing._module_setRatio.call(this,this.context.image)},checkFileInfo:function(){const e=this.plugins.image,t=this.context.image,n=function(n){e.onModifyMode.call(this,n,null),e.openModify.call(this,!0),t.inputX.value=t._origin_w,t.inputY.value=t._origin_h;const i=this.util.getFormatElement(n);i&&(t._align=i.style.textAlign||i.style.float);this.util.getParentElement(n,this.util.isAnchor)&&!t.anchorCtx.linkValue&&(t.anchorCtx.linkValue=" "),e.update_image.call(this,!0,!1,!0),e.init.call(this)}.bind(this);this.plugins.fileManager.checkInfo.call(this,"image",["img"],this.functions.onImageUpload,n,!0)},resetFileInfo:function(){this.plugins.fileManager.resetInfo.call(this,"image",this.functions.onImageUpload)},create_image:function(e,t,n,i,l,o){const s=this.plugins.image,a=this.context.image;this.context.resizing._resize_plugin="image";let r=this.util.createElement("IMG");r.src=e,r.alt=a._altText,r.setAttribute("data-rotate","0"),t=s.onRender_link.call(this,r,t),a._resizing&&r.setAttribute("data-proportion",a._proportionChecked);const c=this.plugins.component.set_cover.call(this,t),d=this.plugins.component.set_container.call(this,c,"se-image-container");a._captionChecked&&(a._caption=this.plugins.component.create_caption.call(this),a._caption.setAttribute("contenteditable",!1),c.appendChild(a._caption)),a._element=r,a._cover=c,a._container=d,s.applySize.call(this,n,i),s.setAlign.call(this,l,r,c,d),r.onload=s._image_create_onload.bind(this,r,a.svgDefaultSize,d),this.insertComponent(d,!0,!0,!0)&&this.plugins.fileManager.setInfo.call(this,"image",r,this.functions.onImageUpload,o,!0),this.context.resizing._resize_plugin=""},_image_create_onload:function(e,t,n){if(0===e.offsetWidth&&this.plugins.image.applySize.call(this,t,""),this.options.mediaAutoSelect)this.selectComponent(e,"image");else{const e=this.appendFormatTag(n,null);e&&this.setRange(e,0,e,0)}},update_image:function(e,t,n){const i=this.context.image;let l,o=i._element,s=i._cover,a=i._container,r=!1;null===s&&(r=!0,o=i._element.cloneNode(!0),s=this.plugins.component.set_cover.call(this,o)),null===a?(s=s.cloneNode(!0),o=s.querySelector("img"),r=!0,a=this.plugins.component.set_container.call(this,s,"se-image-container")):r&&(a.innerHTML="",a.appendChild(s),i._cover=s,i._element=o,r=!1);const c=this.util.isNumber(i.inputX.value)?i.inputX.value+i.sizeUnit:i.inputX.value,d=this.util.isNumber(i.inputY.value)?i.inputY.value+i.sizeUnit:i.inputY.value;l=/%$/.test(o.style.width)?c!==a.style.width||d!==a.style.height:c!==o.style.width||d!==o.style.height,o.alt=i._altText;let u=!1;i._captionChecked?i._caption||(i._caption=this.plugins.component.create_caption.call(this),s.appendChild(i._caption),u=!0):i._caption&&(this.util.removeItem(i._caption),i._caption=null,u=!0);const h=this.plugins.anchor.createAnchor.call(this,i.anchorCtx,!0);if(h)i._linkElement=i._linkElement===h?h.cloneNode(!1):h,s.insertBefore(this.plugins.image.onRender_link.call(this,o,i._linkElement),i._caption);else if(null!==i._linkElement){const e=o;if(e.setAttribute("data-image-link",""),s.contains(i._linkElement)){const t=e.cloneNode(!0);s.removeChild(i._linkElement),s.insertBefore(t,i._caption),o=t}}if(r){const e=this.util.isRangeFormatElement(i._element.parentNode)||this.util.isWysiwygDiv(i._element.parentNode)?i._element:/^A$/i.test(i._element.parentNode.nodeName)?i._element.parentNode:this.util.getFormatElement(i._element)||i._element;if(this.util.isFormatElement(e)&&e.childNodes.length>0)e.parentNode.insertBefore(a,e),this.util.removeItem(i._element),this.util.removeEmptyNode(e,null),0===e.children.length&&(e.innerHTML=this.util.htmlRemoveWhiteSpace(e.innerHTML));else if(this.util.isFormatElement(e.parentNode)){const t=e.parentNode;t.parentNode.insertBefore(a,e.previousSibling?t.nextElementSibling:t),this.util.removeItem(e)}else e.parentNode.replaceChild(a,e);o=a.querySelector("img"),i._element=o,i._cover=s,i._container=a}(u||!i._onlyPercentage&&l)&&!e&&(/\d+/.test(o.style.height)||this.context.resizing._rotateVertical&&i._captionChecked)&&(/%$/.test(i.inputX.value)||/%$/.test(i.inputY.value)?this.plugins.resizing.resetTransform.call(this,o):this.plugins.resizing.setTransformSize.call(this,o,this.util.getNumber(i.inputX.value,0),this.util.getNumber(i.inputY.value,0))),i._resizing&&(o.setAttribute("data-proportion",i._proportionChecked),l&&this.plugins.image.applySize.call(this)),this.plugins.image.setAlign.call(this,null,o,null,null),e&&this.plugins.fileManager.setInfo.call(this,"image",o,this.functions.onImageUpload,null,!0),t&&this.selectComponent(o,"image"),n||this.history.push(!1)},update_src:function(e,t,n){t.src=e,this._w.setTimeout(this.plugins.fileManager.setInfo.bind(this,"image",t,this.functions.onImageUpload,n,!0)),this.selectComponent(t,"image")},onModifyMode:function(e,t){if(!e)return;const n=this.context.image;n._linkElement=n.anchorCtx.linkAnchor=/^A$/i.test(e.parentNode.nodeName)?e.parentNode:null,n._element=e,n._cover=this.util.getParentElement(e,"FIGURE"),n._container=this.util.getParentElement(e,this.util.isMediaComponent),n._caption=this.util.getChildElement(n._cover,"FIGCAPTION"),n._align=e.style.float||e.getAttribute("data-align")||"none",e.style.float="",this.plugins.anchor.setCtx(n._linkElement,n.anchorCtx),t&&(n._element_w=t.w,n._element_h=t.h,n._element_t=t.t,n._element_l=t.l);let i,l,o=n._element.getAttribute("data-size")||n._element.getAttribute("data-origin");o?(o=o.split(","),i=o[0],l=o[1]):t&&(i=t.w,l=t.h),n._origin_w=i||e.style.width||e.width||"",n._origin_h=l||e.style.height||e.height||""},openModify:function(e){const t=this.context.image;t.imgUrlFile&&(t._v_src._linkValue=t.previewSrc.textContent=t.imgUrlFile.value=t._element.src),t._altText=t.altText.value=t._element.alt,t.modal.querySelector('input[name="suneditor_image_radio"][value="'+t._align+'"]').checked=!0,t._align=t.modal.querySelector('input[name="suneditor_image_radio"]:checked').value,t._captionChecked=t.captionCheckEl.checked=!!t._caption,t._resizing&&this.plugins.resizing._module_setModifyInputSize.call(this,t,this.plugins.image),e||this.plugins.dialog.open.call(this,"image",!0)},applySize:function(e,t){const n=this.context.image;return e||(e=n.inputX.value||this.options.imageWidth),t||(t=n.inputY.value||this.options.imageHeight),n._onlyPercentage&&e||/%$/.test(e)?(this.plugins.image.setPercentSize.call(this,e,t),!0):(e&&"auto"!==e||t&&"auto"!==t?this.plugins.image.setSize.call(this,e,t,!1):this.plugins.image.setAutoSize.call(this),!1)},sizeRevert:function(){this.plugins.resizing._module_sizeRevert.call(this,this.context.image)},setSize:function(e,t,n,i){const l=this.context.image,o=/^(rw|lw)$/.test(i);/^(th|bh)$/.test(i)||(l._element.style.width=this.util.isNumber(e)?e+l.sizeUnit:e,this.plugins.image.cancelPercentAttr.call(this)),o||(l._element.style.height=this.util.isNumber(t)?t+l.sizeUnit:/%$/.test(t)?"":t),"center"===l._align&&this.plugins.image.setAlign.call(this,null,null,null,null),n||l._element.removeAttribute("data-percentage"),this.plugins.resizing._module_saveCurrentSize.call(this,l)},setAutoSize:function(){const e=this.context.image;this.plugins.resizing.resetTransform.call(this,e._element),this.plugins.image.cancelPercentAttr.call(this),e._element.style.maxWidth="",e._element.style.width="",e._element.style.height="",e._cover.style.width="",e._cover.style.height="",this.plugins.image.setAlign.call(this,null,null,null,null),e._element.setAttribute("data-percentage","auto,auto"),this.plugins.resizing._module_saveCurrentSize.call(this,e)},setOriginSize:function(){const e=this.context.image;e._element.removeAttribute("data-percentage"),this.plugins.resizing.resetTransform.call(this,e._element),this.plugins.image.cancelPercentAttr.call(this);const t=(e._element.getAttribute("data-origin")||"").split(","),n=t[0],i=t[1];t&&(e._onlyPercentage||/%$/.test(n)&&(/%$/.test(i)||!/\d/.test(i))?this.plugins.image.setPercentSize.call(this,n,i):this.plugins.image.setSize.call(this,n,i),this.plugins.resizing._module_saveCurrentSize.call(this,e))},setPercentSize:function(e,t){const n=this.context.image;t=!t||/%$/.test(t)||this.util.getNumber(t,0)?this.util.isNumber(t)?t+n.sizeUnit:t||"":this.util.isNumber(t)?t+"%":t;const i=/%$/.test(t);n._container.style.width=this.util.isNumber(e)?e+"%":e,n._container.style.height="",n._cover.style.width="100%",n._cover.style.height=i?t:"",n._element.style.width="100%",n._element.style.height=i?"":t,n._element.style.maxWidth="","center"===n._align&&this.plugins.image.setAlign.call(this,null,null,null,null),n._element.setAttribute("data-percentage",e+","+t),this.plugins.resizing.setCaptionPosition.call(this,n._element),this.plugins.resizing._module_saveCurrentSize.call(this,n)},cancelPercentAttr:function(){const e=this.context.image;e._cover.style.width="",e._cover.style.height="",e._container.style.width="",e._container.style.height="",this.util.removeClass(e._container,this.context.image._floatClassRegExp),this.util.addClass(e._container,"__se__float-"+e._align),"center"===e._align&&this.plugins.image.setAlign.call(this,null,null,null,null)},setAlign:function(e,t,n,i){const l=this.context.image;e||(e=l._align),t||(t=l._element),n||(n=l._cover),i||(i=l._container),n.style.margin=e&&"none"!==e?"auto":"0",/%$/.test(t.style.width)&&"center"===e?(i.style.minWidth="100%",n.style.width=i.style.width):(i.style.minWidth="",n.style.width=this.context.resizing._rotateVertical?t.style.height||t.offsetHeight:t.style.width&&"auto"!==t.style.width?t.style.width||"100%":""),this.util.hasClass(i,"__se__float-"+e)||(this.util.removeClass(i,l._floatClassRegExp),this.util.addClass(i,"__se__float-"+e)),t.setAttribute("data-align",e)},init:function(){const e=this.context.image;e.imgInputFile&&(e.imgInputFile.value=""),e.imgUrlFile&&(e._v_src._linkValue=e.previewSrc.textContent=e.imgUrlFile.value=""),e.imgInputFile&&e.imgUrlFile&&(e.imgUrlFile.removeAttribute("disabled"),e.previewSrc.style.textDecoration=""),e.altText.value="",e.modal.querySelector('input[name="suneditor_image_radio"][value="none"]').checked=!0,e.captionCheckEl.checked=!1,e._element=null,this.plugins.image.openTab.call(this,"init"),e._resizing&&(e.inputX.value=this.options.imageWidth===e._defaultSizeX?"":this.options.imageWidth,e.inputY.value=this.options.imageHeight===e._defaultSizeY?"":this.options.imageHeight,e.proportion.checked=!0,e._ratio=!1,e._ratioX=1,e._ratioY=1),this.plugins.anchor.init.call(this,e.anchorCtx)}},v={name:"video",display:"dialog",add:function(e){e.addModule([r.a,p.a,m.a,_.a]);const t=e.options,n=e.context,i=n.video={_infoList:[],_infoIndex:0,_uploadFileLength:0,focusElement:null,sizeUnit:t._videoSizeUnit,_align:"none",_floatClassRegExp:"__se__float\\-[a-z]+",_youtubeQuery:t.youtubeQuery,_videoRatio:100*t.videoRatio+"%",_defaultRatio:100*t.videoRatio+"%",_linkValue:"",_element:null,_cover:null,_container:null,inputX:null,inputY:null,_element_w:1,_element_h:1,_element_l:0,_element_t:0,_defaultSizeX:"100%",_defaultSizeY:100*t.videoRatio+"%",_origin_w:"100%"===t.videoWidth?"":t.videoWidth,_origin_h:"56.25%"===t.videoHeight?"":t.videoHeight,_proportionChecked:!0,_resizing:t.videoResizing,_resizeDotHide:!t.videoHeightShow,_rotation:t.videoRotation,_onlyPercentage:t.videoSizeOnlyPercentage,_ratio:!1,_ratioX:1,_ratioY:1,_captionShow:!1};let l=this.setDialog(e);i.modal=l,i.videoInputFile=l.querySelector("._se_video_file"),i.videoUrlFile=l.querySelector(".se-input-url"),i.focusElement=i.videoUrlFile||i.videoInputFile,i.preview=l.querySelector(".se-link-preview"),l.querySelector("form").addEventListener("submit",this.submit.bind(e)),i.videoInputFile&&l.querySelector(".se-dialog-files-edge-button").addEventListener("click",this._removeSelectedFiles.bind(i.videoInputFile,i.videoUrlFile,i.preview)),i.videoInputFile&&i.videoUrlFile&&i.videoInputFile.addEventListener("change",this._fileInputChange.bind(i)),i.videoUrlFile&&i.videoUrlFile.addEventListener("input",this._onLinkPreview.bind(i.preview,i,t.linkProtocol)),i.proportion={},i.videoRatioOption={},i.inputX={},i.inputY={},t.videoResizing&&(i.proportion=l.querySelector("._se_video_check_proportion"),i.videoRatioOption=l.querySelector(".se-video-ratio"),i.inputX=l.querySelector("._se_video_size_x"),i.inputY=l.querySelector("._se_video_size_y"),i.inputX.value=t.videoWidth,i.inputY.value=t.videoHeight,i.inputX.addEventListener("keyup",this.setInputSize.bind(e,"x")),i.inputY.addEventListener("keyup",this.setInputSize.bind(e,"y")),i.inputX.addEventListener("change",this.setRatio.bind(e)),i.inputY.addEventListener("change",this.setRatio.bind(e)),i.proportion.addEventListener("change",this.setRatio.bind(e)),i.videoRatioOption.addEventListener("change",this.setVideoRatio.bind(e)),l.querySelector(".se-dialog-btn-revert").addEventListener("click",this.sizeRevert.bind(e))),n.dialog.modal.appendChild(l),l=null},setDialog:function(e){const t=e.options,n=e.lang,i=e.util.createElement("DIV");i.className="se-dialog-content",i.style.display="none";let l='<form method="post" enctype="multipart/form-data"><div class="se-dialog-header"><button type="button" data-command="close" class="se-btn se-dialog-close" aria-label="Close" title="'+n.dialogBox.close+'">'+e.icons.cancel+'</button><span class="se-modal-title">'+n.dialogBox.videoBox.title+'</span></div><div class="se-dialog-body">';if(t.videoFileInput&&(l+='<div class="se-dialog-form"><label>'+n.dialogBox.videoBox.file+'</label><div class="se-dialog-form-files"><input class="se-input-form _se_video_file" type="file" accept="'+t.videoAccept+'"'+(t.videoMultipleFile?' multiple="multiple"':"")+'/><button type="button" data-command="filesRemove" class="se-btn se-dialog-files-edge-button se-file-remove" title="'+n.controller.remove+'">'+e.icons.cancel+"</button></div></div>"),t.videoUrlInput&&(l+='<div class="se-dialog-form"><label>'+n.dialogBox.videoBox.url+'</label><input class="se-input-form se-input-url" type="text" /><pre class="se-link-preview"></pre></div>'),t.videoResizing){const i=t.videoRatioList||[{name:"16:9",value:.5625},{name:"4:3",value:.75},{name:"21:9",value:.4285}],o=t.videoRatio,s=t.videoSizeOnlyPercentage,a=s?' style="display: none !important;"':"",r=t.videoHeightShow?"":' style="display: none !important;"',c=t.videoRatioShow?"":' style="display: none !important;"',d=s||t.videoHeightShow||t.videoRatioShow?"":' style="display: none !important;"';l+='<div class="se-dialog-form"><div class="se-dialog-size-text"><label class="size-w">'+n.dialogBox.width+'</label><label class="se-dialog-size-x">&nbsp;</label><label class="size-h"'+r+">"+n.dialogBox.height+'</label><label class="size-h"'+c+">("+n.dialogBox.ratio+')</label></div><input class="se-input-control _se_video_size_x" placeholder="100%"'+(s?' type="number" min="1"':'type="text"')+(s?' max="100"':"")+'/><label class="se-dialog-size-x"'+d+">"+(s?"%":"x")+'</label><input class="se-input-control _se_video_size_y" placeholder="'+100*t.videoRatio+'%"'+(s?' type="number" min="1"':'type="text"')+(s?' max="100"':"")+r+'/><select class="se-input-select se-video-ratio" title="'+n.dialogBox.ratio+'"'+c+">",r||(l+='<option value=""> - </option>');for(let e=0,t=i.length;e<t;e++)l+='<option value="'+i[e].value+'"'+(o.toString()===i[e].value.toString()?" selected":"")+">"+i[e].name+"</option>";l+='</select><button type="button" title="'+n.dialogBox.revertButton+'" class="se-btn se-dialog-btn-revert" style="float: right;">'+e.icons.revert+'</button></div><div class="se-dialog-form se-dialog-form-footer"'+a+d+'><label><input type="checkbox" class="se-dialog-btn-check _se_video_check_proportion" checked/>&nbsp;'+n.dialogBox.proportion+"</label></div>"}return l+='</div><div class="se-dialog-footer"><div><label><input type="radio" name="suneditor_video_radio" class="se-dialog-btn-radio" value="none" checked>'+n.dialogBox.basic+'</label><label><input type="radio" name="suneditor_video_radio" class="se-dialog-btn-radio" value="left">'+n.dialogBox.left+'</label><label><input type="radio" name="suneditor_video_radio" class="se-dialog-btn-radio" value="center">'+n.dialogBox.center+'</label><label><input type="radio" name="suneditor_video_radio" class="se-dialog-btn-radio" value="right">'+n.dialogBox.right+'</label></div><button type="submit" class="se-btn-primary" title="'+n.dialogBox.submitButton+'"><span>'+n.dialogBox.submitButton+"</span></button></div></form>",i.innerHTML=l,i},_fileInputChange:function(){this.videoInputFile.value?(this.videoUrlFile.setAttribute("disabled",!0),this.preview.style.textDecoration="line-through"):(this.videoUrlFile.removeAttribute("disabled"),this.preview.style.textDecoration="")},_removeSelectedFiles:function(e,t){this.value="",e&&(e.removeAttribute("disabled"),t.style.textDecoration="")},_onLinkPreview:function(e,t,n){const i=n.target.value.trim();/^<iframe.*\/iframe>$/.test(i)?(e._linkValue=i,this.textContent='<IFrame :src=".."></IFrame>'):e._linkValue=this.textContent=i?t&&-1===i.indexOf("://")&&0!==i.indexOf("#")?t+i:-1===i.indexOf("://")?"/"+i:i:""},_setTagAttrs:function(e){e.setAttribute("controls",!0);const t=this.options.videoTagAttrs;if(t)for(let n in t)this.util.hasOwn(t,n)&&e.setAttribute(n,t[n])},createVideoTag:function(){const e=this.util.createElement("VIDEO");return this.plugins.video._setTagAttrs.call(this,e),e},_setIframeAttrs:function(e){e.frameBorder="0",e.allowFullscreen=!0;const t=this.options.videoIframeAttrs;if(t)for(let n in t)this.util.hasOwn(t,n)&&e.setAttribute(n,t[n])},createIframeTag:function(){const e=this.util.createElement("IFRAME");return this.plugins.video._setIframeAttrs.call(this,e),e},fileTags:["iframe","video"],select:function(e){this.plugins.video.onModifyMode.call(this,e,this.plugins.resizing.call_controller_resize.call(this,e,"video"))},destroy:function(e){const t=e||this.context.video._element,n=this.context.video._container,i=1*t.getAttribute("data-index");let l=n.previousElementSibling||n.nextElementSibling;const o=n.parentNode;this.util.removeItem(n),this.plugins.video.init.call(this),this.controllersOff(),o!==this.context.element.wysiwyg&&this.util.removeItemAllParents(o,(function(e){return 0===e.childNodes.length}),null),this.focusEdge(l),this.plugins.fileManager.deleteInfo.call(this,"video",i,this.functions.onVideoUpload),this.history.push(!1)},on:function(e){const t=this.context.video;e?t.videoInputFile&&this.options.videoMultipleFile&&t.videoInputFile.removeAttribute("multiple"):(t.inputX.value=t._origin_w=this.options.videoWidth===t._defaultSizeX?"":this.options.videoWidth,t.inputY.value=t._origin_h=this.options.videoHeight===t._defaultSizeY?"":this.options.videoHeight,t.proportion.disabled=!0,t.videoInputFile&&this.options.videoMultipleFile&&t.videoInputFile.setAttribute("multiple","multiple")),t._resizing&&this.plugins.video.setVideoRatioSelect.call(this,t._origin_h||t._defaultRatio)},open:function(){this.plugins.dialog.open.call(this,"video","video"===this.currentControllerName)},setVideoRatio:function(e){const t=this.context.video,n=e.target.options[e.target.selectedIndex].value;t._defaultSizeY=t._videoRatio=n?100*n+"%":t._defaultSizeY,t.inputY.placeholder=n?100*n+"%":"",t.inputY.value=""},setInputSize:function(e,t){if(t&&32===t.keyCode)return void t.preventDefault();const n=this.context.video;this.plugins.resizing._module_setInputSize.call(this,n,e),"y"===e&&this.plugins.video.setVideoRatioSelect.call(this,t.target.value||n._defaultRatio)},setRatio:function(){this.plugins.resizing._module_setRatio.call(this,this.context.video)},submit:function(e){const t=this.context.video,n=this.plugins.video;e.preventDefault(),e.stopPropagation(),t._align=t.modal.querySelector('input[name="suneditor_video_radio"]:checked').value;try{t.videoInputFile&&t.videoInputFile.files.length>0?(this.showLoading(),n.submitAction.call(this,this.context.video.videoInputFile.files)):t.videoUrlFile&&t._linkValue.length>0&&(this.showLoading(),n.setup_url.call(this))}catch(e){throw this.closeLoading(),Error('[SUNEDITOR.video.submit.fail] cause : "'+e.message+'"')}finally{this.plugins.dialog.close.call(this)}return!1},submitAction:function(e){if(0===e.length)return;let t=0,n=[];for(let i=0,l=e.length;i<l;i++)/video/i.test(e[i].type)&&(n.push(e[i]),t+=e[i].size);const i=this.options.videoUploadSizeLimit;if(i>0){let e=0;const n=this.context.video._infoList;for(let t=0,i=n.length;t<i;t++)e+=1*n[t].size;if(t+e>i){this.closeLoading();const n="[SUNEDITOR.videoUpload.fail] Size of uploadable total videos: "+i/1e3+"KB";return void(("function"!=typeof this.functions.onVideoUploadError||this.functions.onVideoUploadError(n,{limitSize:i,currentSize:e,uploadSize:t},this))&&this.functions.noticeOpen(n))}}const l=this.context.video;l._uploadFileLength=n.length;const o={inputWidth:l.inputX.value,inputHeight:l.inputY.value,align:l._align,isUpdate:this.context.dialog.updateModal,element:l._element};if("function"==typeof this.functions.onVideoUploadBefore){const e=this.functions.onVideoUploadBefore(n,o,this,function(e){e&&this._w.Array.isArray(e.result)?this.plugins.video.register.call(this,o,e):this.plugins.video.upload.call(this,o,e)}.bind(this));if(void 0===e)return;if(!e)return void this.closeLoading();"object"==typeof e&&e.length>0&&(n=e)}this.plugins.video.upload.call(this,o,n)},error:function(e,t){if(this.closeLoading(),"function"!=typeof this.functions.onVideoUploadError||this.functions.onVideoUploadError(e,t,this))throw this.functions.noticeOpen(e),Error("[SUNEDITOR.plugin.video.error] response: "+e)},upload:function(e,t){if(!t)return void this.closeLoading();if("string"==typeof t)return void this.plugins.video.error.call(this,t,null);const n=this.options.videoUploadUrl,i=this.context.dialog.updateModal?1:t.length;if(!("string"==typeof n&&n.length>0))throw Error('[SUNEDITOR.videoUpload.fail] cause : There is no "videoUploadUrl" option.');{const l=new FormData;for(let e=0;e<i;e++)l.append("file-"+e,t[e]);this.plugins.fileManager.upload.call(this,n,this.options.videoUploadHeader,l,this.plugins.video.callBack_videoUpload.bind(this,e),this.functions.onVideoUploadError)}},callBack_videoUpload:function(e,t){if("function"==typeof this.functions.videoUploadHandler)this.functions.videoUploadHandler(t,e,this);else{const n=JSON.parse(t.responseText);n.errorMessage?this.plugins.video.error.call(this,n.errorMessage,n):this.plugins.video.register.call(this,e,n)}},register:function(e,t){const n=t.result,i=this.plugins.video.createVideoTag.call(this);for(let t,l=0,o=n.length;l<o;l++)t={name:n[l].name,size:n[l].size},this.plugins.video.create_video.call(this,e.isUpdate?e.element:i.cloneNode(!1),n[l].url,e.inputWidth,e.inputHeight,e.align,t,e.isUpdate);this.closeLoading()},setup_url:function(){try{const e=this.context.video;let t=e._linkValue;if(0===t.length)return!1;if(/^<iframe.*\/iframe>$/.test(t)){if(t=(new this._w.DOMParser).parseFromString(t,"text/html").querySelector("iframe").src,0===t.length)return!1}if(/youtu\.?be/.test(t)){if(/^http/.test(t)||(t="https://"+t),t=t.replace("watch?v=",""),/^\/\/.+\/embed\//.test(t)||(t=t.replace(t.match(/\/\/.+\//)[0],"//www.youtube.com/embed/").replace("&","?&")),e._youtubeQuery.length>0)if(/\?/.test(t)){const n=t.split("?");t=n[0]+"?"+e._youtubeQuery+"&"+n[1]}else t+="?"+e._youtubeQuery}else/vimeo\.com/.test(t)&&(t.endsWith("/")&&(t=t.slice(0,-1)),t="https://player.vimeo.com/video/"+t.slice(t.lastIndexOf("/")+1));this.plugins.video.create_video.call(this,this.plugins.video.createIframeTag.call(this),t,e.inputX.value,e.inputY.value,e._align,null,this.context.dialog.updateModal)}catch(e){throw Error('[SUNEDITOR.video.upload.fail] cause : "'+e.message+'"')}finally{this.closeLoading()}},create_video:function(e,t,n,i,l,o,s){this.context.resizing._resize_plugin="video";const a=this.context.video;let r=null,c=null,d=!1;if(s){if((e=a._element).src!==t){d=!0;const n=/youtu\.?be/.test(t),i=/vimeo\.com/.test(t);if(!n&&!i||/^iframe$/i.test(e.nodeName))if(n||i||/^videoo$/i.test(e.nodeName))e.src=t;else{const n=this.plugins.video.createVideoTag.call(this);n.src=t,e.parentNode.replaceChild(n,e),a._element=e=n}else{const n=this.plugins.video.createIframeTag.call(this);n.src=t,e.parentNode.replaceChild(n,e),a._element=e=n}}c=a._container,r=this.util.getParentElement(e,"FIGURE")}else d=!0,e.src=t,a._element=e,r=this.plugins.component.set_cover.call(this,e),c=this.plugins.component.set_container.call(this,r,"se-video-container");a._cover=r,a._container=c;const u=this.plugins.resizing._module_getSizeX.call(this,a)!==(n||a._defaultSizeX)||this.plugins.resizing._module_getSizeY.call(this,a)!==(i||a._videoRatio),h=!s||u;a._resizing&&(this.context.video._proportionChecked=a.proportion.checked,e.setAttribute("data-proportion",a._proportionChecked));let p=!1;h&&(p=this.plugins.video.applySize.call(this)),p&&"center"===l||this.plugins.video.setAlign.call(this,null,e,r,c);let g=!0;if(s)a._resizing&&this.context.resizing._rotateVertical&&h&&this.plugins.resizing.setTransformSize.call(this,e,null,null);else if(g=this.insertComponent(c,!1,!0,!this.options.mediaAutoSelect),!this.options.mediaAutoSelect){const e=this.appendFormatTag(c,null);e&&this.setRange(e,0,e,0)}g&&(d&&this.plugins.fileManager.setInfo.call(this,"video",e,this.functions.onVideoUpload,o,!0),s&&(this.selectComponent(e,"video"),this.history.push(!1))),this.context.resizing._resize_plugin=""},_update_videoCover:function(e){if(!e)return;const t=this.context.video;/^video$/i.test(e.nodeName)?this.plugins.video._setTagAttrs.call(this,e):this.plugins.video._setIframeAttrs.call(this,e);const n=this.util.getParentElement(e,this.util.isMediaComponent)||this.util.getParentElement(e,function(e){return this.isWysiwygDiv(e.parentNode)}.bind(this.util)),i=e;t._element=e=e.cloneNode(!0);const l=t._cover=this.plugins.component.set_cover.call(this,e),o=t._container=this.plugins.component.set_container.call(this,l,"se-video-container");try{const s=n.querySelector("figcaption");let a=null;s&&(a=this.util.createElement("DIV"),a.innerHTML=s.innerHTML,this.util.removeItem(s));const r=(e.getAttribute("data-size")||e.getAttribute("data-origin")||"").split(",");this.plugins.video.applySize.call(this,r[0]||i.style.width||i.width||"",r[1]||i.style.height||i.height||"");const c=this.util.getFormatElement(i);c&&(t._align=c.style.textAlign||c.style.float),this.plugins.video.setAlign.call(this,null,e,l,o),this.util.isFormatElement(n)&&n.childNodes.length>0?(n.parentNode.insertBefore(o,n),this.util.removeItem(i),this.util.removeEmptyNode(n,null),0===n.children.length&&(n.innerHTML=this.util.htmlRemoveWhiteSpace(n.innerHTML))):n.parentNode.replaceChild(o,n),a&&n.parentNode.insertBefore(a,o.nextElementSibling)}catch(e){console.warn("[SUNEDITOR.video.error] Maybe the video tag is nested.",e)}this.plugins.fileManager.setInfo.call(this,"video",e,this.functions.onVideoUpload,null,!0),this.plugins.video.init.call(this)},onModifyMode:function(e,t){const n=this.context.video;n._element=e,n._cover=this.util.getParentElement(e,"FIGURE"),n._container=this.util.getParentElement(e,this.util.isMediaComponent),n._align=e.style.float||e.getAttribute("data-align")||"none",e.style.float="",t&&(n._element_w=t.w,n._element_h=t.h,n._element_t=t.t,n._element_l=t.l);let i,l,o=n._element.getAttribute("data-size")||n._element.getAttribute("data-origin");o?(o=o.split(","),i=o[0],l=o[1]):t&&(i=t.w,l=t.h),n._origin_w=i||e.style.width||e.width||"",n._origin_h=l||e.style.height||e.height||""},openModify:function(e){const t=this.context.video;if(t.videoUrlFile&&(t._linkValue=t.preview.textContent=t.videoUrlFile.value=t._element.src||(t._element.querySelector("source")||"").src||""),t.modal.querySelector('input[name="suneditor_video_radio"][value="'+t._align+'"]').checked=!0,t._resizing){this.plugins.resizing._module_setModifyInputSize.call(this,t,this.plugins.video);const e=t._videoRatio=this.plugins.resizing._module_getSizeY.call(this,t);this.plugins.video.setVideoRatioSelect.call(this,e)||(t.inputY.value=t._onlyPercentage?this.util.getNumber(e,2):e)}e||this.plugins.dialog.open.call(this,"video",!0)},setVideoRatioSelect:function(e){let t=!1;const n=this.context.video,i=n.videoRatioOption.options;/%$/.test(e)||n._onlyPercentage?e=this.util.getNumber(e,2)/100+"":(!this.util.isNumber(e)||1*e>=1)&&(e=""),n.inputY.placeholder="";for(let l=0,o=i.length;l<o;l++)i[l].value===e?(t=i[l].selected=!0,n.inputY.placeholder=e?100*e+"%":""):i[l].selected=!1;return t},checkFileInfo:function(){this.plugins.fileManager.checkInfo.call(this,"video",["iframe","video"],this.functions.onVideoUpload,this.plugins.video._update_videoCover.bind(this),!0)},resetFileInfo:function(){this.plugins.fileManager.resetInfo.call(this,"video",this.functions.onVideoUpload)},applySize:function(e,t){const n=this.context.video;return e||(e=n.inputX.value||this.options.videoWidth),t||(t=n.inputY.value||this.options.videoHeight),n._onlyPercentage||/%$/.test(e)||!e?(this.plugins.video.setPercentSize.call(this,e||"100%",t||(/%$/.test(n._videoRatio)?n._videoRatio:n._defaultRatio)),!0):(e&&"auto"!==e||t&&"auto"!==t?this.plugins.video.setSize.call(this,e,t||n._videoRatio||n._defaultRatio,!1):this.plugins.video.setAutoSize.call(this),!1)},sizeRevert:function(){this.plugins.resizing._module_sizeRevert.call(this,this.context.video)},setSize:function(e,t,n,i){const l=this.context.video,o=/^(rw|lw)$/.test(i),s=/^(th|bh)$/.test(i);s||(e=this.util.getNumber(e,0)),o||(t=this.util.isNumber(t)?t+l.sizeUnit:t||""),s||(l._element.style.width=e?e+l.sizeUnit:""),o||(l._cover.style.paddingBottom=l._cover.style.height=t),s||/%$/.test(e)||(l._cover.style.width="",l._container.style.width=""),o||/%$/.test(t)?l._element.style.height="":l._element.style.height=t,n||l._element.removeAttribute("data-percentage"),this.plugins.resizing._module_saveCurrentSize.call(this,l)},setAutoSize:function(){this.plugins.video.setPercentSize.call(this,100,this.context.video._defaultRatio)},setOriginSize:function(e){const t=this.context.video;t._element.removeAttribute("data-percentage"),this.plugins.resizing.resetTransform.call(this,t._element),this.plugins.video.cancelPercentAttr.call(this);const n=((e?t._element.getAttribute("data-size"):"")||t._element.getAttribute("data-origin")||"").split(",");if(n){const e=n[0],i=n[1];t._onlyPercentage||/%$/.test(e)&&(/%$/.test(i)||!/\d/.test(i))?this.plugins.video.setPercentSize.call(this,e,i):this.plugins.video.setSize.call(this,e,i),this.plugins.resizing._module_saveCurrentSize.call(this,t)}},setPercentSize:function(e,t){const n=this.context.video;t=!t||/%$/.test(t)||this.util.getNumber(t,0)?this.util.isNumber(t)?t+n.sizeUnit:t||n._defaultRatio:this.util.isNumber(t)?t+"%":t,n._container.style.width=this.util.isNumber(e)?e+"%":e,n._container.style.height="",n._cover.style.width="100%",n._cover.style.height=t,n._cover.style.paddingBottom=t,n._element.style.width="100%",n._element.style.height="100%",n._element.style.maxWidth="","center"===n._align&&this.plugins.video.setAlign.call(this,null,null,null,null),n._element.setAttribute("data-percentage",e+","+t),this.plugins.resizing._module_saveCurrentSize.call(this,n)},cancelPercentAttr:function(){const e=this.context.video;e._cover.style.width="",e._cover.style.height="",e._cover.style.paddingBottom="",e._container.style.width="",e._container.style.height="",this.util.removeClass(e._container,this.context.video._floatClassRegExp),this.util.addClass(e._container,"__se__float-"+e._align),"center"===e._align&&this.plugins.video.setAlign.call(this,null,null,null,null)},setAlign:function(e,t,n,i){const l=this.context.video;e||(e=l._align),t||(t=l._element),n||(n=l._cover),i||(i=l._container),n.style.margin=e&&"none"!==e?"auto":"0",/%$/.test(t.style.width)&&"center"===e?(i.style.minWidth="100%",n.style.width=i.style.width,n.style.height=n.style.height,n.style.paddingBottom=/%$/.test(n.style.height)?this.util.getNumber(this.util.getNumber(n.style.height,2)/100*this.util.getNumber(n.style.width,2),2)+"%":n.style.height):(i.style.minWidth="",n.style.width=this.context.resizing._rotateVertical?t.style.height||t.offsetHeight:t.style.width||"100%",n.style.paddingBottom=n.style.height),this.util.hasClass(i,"__se__float-"+e)||(this.util.removeClass(i,l._floatClassRegExp),this.util.addClass(i,"__se__float-"+e)),t.setAttribute("data-align",e)},init:function(){const e=this.context.video;e.videoInputFile&&(e.videoInputFile.value=""),e.videoUrlFile&&(e._linkValue=e.preview.textContent=e.videoUrlFile.value=""),e.videoInputFile&&e.videoUrlFile&&(e.videoUrlFile.removeAttribute("disabled"),e.preview.style.textDecoration=""),e._origin_w=this.options.videoWidth,e._origin_h=this.options.videoHeight,e.modal.querySelector('input[name="suneditor_video_radio"][value="none"]').checked=!0,e._resizing&&(e.inputX.value=this.options.videoWidth===e._defaultSizeX?"":this.options.videoWidth,e.inputY.value=this.options.videoHeight===e._defaultSizeY?"":this.options.videoHeight,e.proportion.checked=!0,e.proportion.disabled=!0,this.plugins.video.setVideoRatioSelect.call(this,e._defaultRatio))}},y={name:"audio",display:"dialog",add:function(e){e.addModule([r.a,p.a,_.a]);const t=e.context,n=t.audio={_infoList:[],_infoIndex:0,_uploadFileLength:0,focusElement:null,targetSelect:null,_origin_w:e.options.audioWidth,_origin_h:e.options.audioHeight,_linkValue:"",_element:null,_cover:null,_container:null};let i=this.setDialog(e);n.modal=i,n.audioInputFile=i.querySelector("._se_audio_files"),n.audioUrlFile=i.querySelector(".se-input-url"),n.focusElement=n.audioInputFile||n.audioUrlFile,n.preview=i.querySelector(".se-link-preview");let l=this.setController(e);n.controller=l,i.querySelector("form").addEventListener("submit",this.submit.bind(e)),n.audioInputFile&&i.querySelector(".se-dialog-files-edge-button").addEventListener("click",this._removeSelectedFiles.bind(n.audioInputFile,n.audioUrlFile,n.preview)),n.audioInputFile&&n.audioUrlFile&&n.audioInputFile.addEventListener("change",this._fileInputChange.bind(n)),l.addEventListener("click",this.onClick_controller.bind(e)),n.audioUrlFile&&n.audioUrlFile.addEventListener("input",this._onLinkPreview.bind(n.preview,n,e.options.linkProtocol)),t.dialog.modal.appendChild(i),t.element.relative.appendChild(l),i=null,l=null},setDialog:function(e){const t=e.options,n=e.lang,i=e.util.createElement("DIV");i.className="se-dialog-content",i.style.display="none";let l='<form method="post" enctype="multipart/form-data"><div class="se-dialog-header"><button type="button" data-command="close" class="se-btn se-dialog-close" aria-label="Close" title="'+n.dialogBox.close+'">'+e.icons.cancel+'</button><span class="se-modal-title">'+n.dialogBox.audioBox.title+'</span></div><div class="se-dialog-body">';return t.audioFileInput&&(l+='<div class="se-dialog-form"><label>'+n.dialogBox.audioBox.file+'</label><div class="se-dialog-form-files"><input class="se-input-form _se_audio_files" type="file" accept="'+t.audioAccept+'"'+(t.audioMultipleFile?' multiple="multiple"':"")+'/><button type="button" data-command="filesRemove" class="se-btn se-dialog-files-edge-button se-file-remove" title="'+n.controller.remove+'">'+e.icons.cancel+"</button></div></div>"),t.audioUrlInput&&(l+='<div class="se-dialog-form"><label>'+n.dialogBox.audioBox.url+'</label><input class="se-input-form se-input-url" type="text" /><pre class="se-link-preview"></pre></div>'),l+='</div><div class="se-dialog-footer"><button type="submit" class="se-btn-primary" title="'+n.dialogBox.submitButton+'"><span>'+n.dialogBox.submitButton+"</span></button></div></form>",i.innerHTML=l,i},setController:function(e){const t=e.lang,n=e.icons,i=e.util.createElement("DIV");return i.className="se-controller se-controller-link",i.innerHTML='<div class="se-arrow se-arrow-up"></div><div class="link-content"><div class="se-btn-group"><button type="button" data-command="update" tabindex="-1" class="se-tooltip">'+n.edit+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.edit+'</span></span></button><button type="button" data-command="delete" tabindex="-1" class="se-tooltip">'+n.delete+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.remove+"</span></span></button></div></div>",i},_fileInputChange:function(){this.audioInputFile.value?(this.audioUrlFile.setAttribute("disabled",!0),this.preview.style.textDecoration="line-through"):(this.audioUrlFile.removeAttribute("disabled"),this.preview.style.textDecoration="")},_removeSelectedFiles:function(e,t){this.value="",e&&(e.removeAttribute("disabled"),t.style.textDecoration="")},_createAudioTag:function(){const e=this.util.createElement("AUDIO");this.plugins.audio._setTagAttrs.call(this,e);const t=this.context.audio._origin_w,n=this.context.audio._origin_h;return e.setAttribute("origin-size",t+","+n),e.style.cssText=(t?"width:"+t+"; ":"")+(n?"height:"+n+";":""),e},_setTagAttrs:function(e){e.setAttribute("controls",!0);const t=this.options.audioTagAttrs;if(t)for(let n in t)this.util.hasOwn(t,n)&&e.setAttribute(n,t[n])},_onLinkPreview:function(e,t,n){const i=n.target.value.trim();e._linkValue=this.textContent=i?t&&-1===i.indexOf("://")&&0!==i.indexOf("#")?t+i:-1===i.indexOf("://")?"/"+i:i:""},fileTags:["audio"],select:function(e){this.plugins.audio.onModifyMode.call(this,e)},destroy:function(e){e=e||this.context.audio._element;const t=this.util.getParentElement(e,this.util.isComponent)||e,n=1*e.getAttribute("data-index"),i=t.previousElementSibling||t.nextElementSibling,l=t.parentNode;this.util.removeItem(t),this.plugins.audio.init.call(this),this.controllersOff(),l!==this.context.element.wysiwyg&&this.util.removeItemAllParents(l,(function(e){return 0===e.childNodes.length}),null),this.focusEdge(i),this.plugins.fileManager.deleteInfo.call(this,"audio",n,this.functions.onAudioUpload),this.history.push(!1)},checkFileInfo:function(){this.plugins.fileManager.checkInfo.call(this,"audio",["audio"],this.functions.onAudioUpload,this.plugins.audio.updateCover.bind(this),!1)},resetFileInfo:function(){this.plugins.fileManager.resetInfo.call(this,"audio",this.functions.onAudioUpload)},on:function(e){const t=this.context.audio;e?t._element?(this.context.dialog.updateModal=!0,t._linkValue=t.preview.textContent=t.audioUrlFile.value=t._element.src,t.audioInputFile&&this.options.audioMultipleFile&&t.audioInputFile.removeAttribute("multiple")):t.audioInputFile&&this.options.audioMultipleFile&&t.audioInputFile.removeAttribute("multiple"):(this.plugins.audio.init.call(this),t.audioInputFile&&this.options.audioMultipleFile&&t.audioInputFile.setAttribute("multiple","multiple"))},open:function(){this.plugins.dialog.open.call(this,"audio","audio"===this.currentControllerName)},submit:function(e){const t=this.context.audio;e.preventDefault(),e.stopPropagation();try{t.audioInputFile&&t.audioInputFile.files.length>0?(this.showLoading(),this.plugins.audio.submitAction.call(this,t.audioInputFile.files)):t.audioUrlFile&&t._linkValue.length>0&&(this.showLoading(),this.plugins.audio.setupUrl.call(this,t._linkValue))}catch(e){throw this.closeLoading(),Error('[SUNEDITOR.audio.submit.fail] cause : "'+e.message+'"')}finally{this.plugins.dialog.close.call(this)}return!1},submitAction:function(e){if(0===e.length)return;let t=0,n=[];for(let i=0,l=e.length;i<l;i++)/audio/i.test(e[i].type)&&(n.push(e[i]),t+=e[i].size);const i=this.options.audioUploadSizeLimit;if(i>0){let e=0;const n=this.context.audio._infoList;for(let t=0,i=n.length;t<i;t++)e+=1*n[t].size;if(t+e>i){this.closeLoading();const n="[SUNEDITOR.audioUpload.fail] Size of uploadable total audios: "+i/1e3+"KB";return void(("function"!=typeof this.functions.onAudioUploadError||this.functions.onAudioUploadError(n,{limitSize:i,currentSize:e,uploadSize:t},this))&&this.functions.noticeOpen(n))}}const l=this.context.audio;l._uploadFileLength=n.length;const o={isUpdate:this.context.dialog.updateModal,element:l._element};if("function"==typeof this.functions.onAudioUploadBefore){const e=this.functions.onAudioUploadBefore(n,o,this,function(e){e&&this._w.Array.isArray(e.result)?this.plugins.audio.register.call(this,o,e):this.plugins.audio.upload.call(this,o,e)}.bind(this));if(void 0===e)return;if(!e)return void this.closeLoading();"object"==typeof e&&e.length>0&&(n=e)}this.plugins.audio.upload.call(this,o,n)},error:function(e,t){if(this.closeLoading(),"function"!=typeof this.functions.onAudioUploadError||this.functions.onAudioUploadError(e,t,this))throw this.functions.noticeOpen(e),Error("[SUNEDITOR.plugin.audio.exception] response: "+e)},upload:function(e,t){if(!t)return void this.closeLoading();if("string"==typeof t)return void this.plugins.audio.error.call(this,t,null);const n=this.options.audioUploadUrl,i=this.context.dialog.updateModal?1:t.length,l=new FormData;for(let e=0;e<i;e++)l.append("file-"+e,t[e]);this.plugins.fileManager.upload.call(this,n,this.options.audioUploadHeader,l,this.plugins.audio.callBack_upload.bind(this,e),this.functions.onAudioUploadError)},callBack_upload:function(e,t){if("function"==typeof this.functions.audioUploadHandler)this.functions.audioUploadHandler(t,e,this);else{const n=JSON.parse(t.responseText);n.errorMessage?this.plugins.audio.error.call(this,n.errorMessage,n):this.plugins.audio.register.call(this,e,n)}},register:function(e,t){const n=t.result;for(let t,i,l=0,o=n.length;l<o;l++)i=e.isUpdate?e.element:this.plugins.audio._createAudioTag.call(this),t={name:n[l].name,size:n[l].size},this.plugins.audio.create_audio.call(this,i,n[l].url,t,e.isUpdate);this.closeLoading()},setupUrl:function(e){try{if(0===e.length)return!1;this.plugins.audio.create_audio.call(this,this.plugins.audio._createAudioTag.call(this),e,null,this.context.dialog.updateModal)}catch(e){throw Error('[SUNEDITOR.audio.audio.fail] cause : "'+e.message+'"')}finally{this.closeLoading()}},create_audio:function(e,t,n,i){const l=this.context.audio;if(i){if(l._element&&(e=l._element),!e||e.src===t)return void this.selectComponent(e,"audio");e.src=t,this.selectComponent(e,"audio")}else{e.src=t;const n=this.plugins.component.set_cover.call(this,e),i=this.plugins.component.set_container.call(this,n,"");if(!this.insertComponent(i,!1,!0,!this.options.mediaAutoSelect))return void this.focus();if(!this.options.mediaAutoSelect){const e=this.appendFormatTag(i,null);e&&this.setRange(e,0,e,0)}}this.plugins.fileManager.setInfo.call(this,"audio",e,this.functions.onAudioUpload,n,!1),i&&this.history.push(!1)},updateCover:function(e){const t=this.context.audio;this.plugins.audio._setTagAttrs.call(this,e);const n=this.util.getParentElement(e,this.util.isMediaComponent)||this.util.getParentElement(e,function(e){return this.isWysiwygDiv(e.parentNode)}.bind(this.util)),i=e;t._element=e=e.cloneNode(!1);const l=this.plugins.component.set_cover.call(this,e),o=this.plugins.component.set_container.call(this,l,"se-audio-container");try{this.util.isFormatElement(n)&&n.childNodes.length>0?(n.parentNode.insertBefore(o,n),this.util.removeItem(i),this.util.removeEmptyNode(n,null),0===n.children.length&&(n.innerHTML=this.util.htmlRemoveWhiteSpace(n.innerHTML))):n.parentNode.replaceChild(o,n)}catch(e){console.warn("[SUNEDITOR.audio.error] Maybe the audio tag is nested.",e)}this.plugins.fileManager.setInfo.call(this,"audio",e,this.functions.onAudioUpload,null,!1),this.plugins.audio.init.call(this)},onModifyMode:function(e){const t=this.context.audio;this.setControllerPosition(t.controller,e,"bottom",{left:0,top:0}),this.controllersOn(t.controller,e,this.plugins.audio.onControllerOff.bind(this,e),"audio"),this.util.addClass(e,"active"),t._element=e,t._cover=this.util.getParentElement(e,"FIGURE"),t._container=this.util.getParentElement(e,this.util.isComponent)},openModify:function(e){if(this.context.audio.audioUrlFile){const e=this.context.audio;e._linkValue=e.preview.textContent=e.audioUrlFile.value=e._element.src}e||this.plugins.dialog.open.call(this,"audio",!0)},onClick_controller:function(e){e.stopPropagation();const t=e.target.getAttribute("data-command");t&&(e.preventDefault(),/update/.test(t)?this.plugins.audio.openModify.call(this,!1):this.plugins.audio.destroy.call(this,this.context.audio._element),this.controllersOff())},onControllerOff:function(e){this.util.removeClass(e,"active"),this.context.audio.controller.style.display="none"},init:function(){if(this.context.dialog.updateModal)return;const e=this.context.audio;e.audioInputFile&&(e.audioInputFile.value=""),e.audioUrlFile&&(e._linkValue=e.preview.textContent=e.audioUrlFile.value=""),e.audioInputFile&&e.audioUrlFile&&(e.audioUrlFile.removeAttribute("disabled"),e.preview.style.textDecoration=""),e._element=null}},C={name:"math",display:"dialog",add:function(e){e.addModule([r.a]);const t=e.context;t.math={focusElement:null,previewElement:null,fontSizeElement:null,defaultFontSize:"",_mathExp:null};let n=this.setDialog(e);t.math.modal=n,t.math.focusElement=n.querySelector(".se-math-exp"),t.math.previewElement=n.querySelector(".se-math-preview"),t.math.fontSizeElement=n.querySelector(".se-math-size"),t.math.focusElement.addEventListener("keyup",this._renderMathExp.bind(e,t.math),!1),t.math.focusElement.addEventListener("change",this._renderMathExp.bind(e,t.math),!1),t.math.fontSizeElement.addEventListener("change",function(e){this.fontSize=e.target.value}.bind(t.math.previewElement.style),!1);let i=this.setController_MathButton(e);t.math.mathController=i,t.math._mathExp=null,n.querySelector("form").addEventListener("submit",this.submit.bind(e),!1),i.addEventListener("click",this.onClick_mathController.bind(e)),t.math.previewElement.style.fontSize=t.math.defaultFontSize,t.dialog.modal.appendChild(n),t.element.relative.appendChild(i),n=null,i=null},setDialog:function(e){const t=e.lang,n=e.util.createElement("DIV"),i=e.options.mathFontSize;let l=i[0].value;n.className="se-dialog-content",n.style.display="none";let o='<form><div class="se-dialog-header"><button type="button" data-command="close" class="se-btn se-dialog-close" aria-label="Close" title="'+t.dialogBox.close+'">'+e.icons.cancel+'</button><span class="se-modal-title">'+t.dialogBox.mathBox.title+'</span></div><div class="se-dialog-body"><div class="se-dialog-form"><label>'+t.dialogBox.mathBox.inputLabel+' (<a href="https://katex.org/docs/supported.html" target="_blank">KaTeX</a>)</label><textarea class="se-input-form se-math-exp" type="text"></textarea></div><div class="se-dialog-form"><label>'+t.dialogBox.mathBox.fontSizeLabel+'</label><select class="se-input-select se-math-size">';for(let e,t=0,n=i.length;t<n;t++)e=i[t],e.default&&(l=e.value),o+='<option value="'+e.value+'"'+(e.default?" selected":"")+">"+e.text+"</option>";return o+='</select></div><div class="se-dialog-form"><label>'+t.dialogBox.mathBox.previewLabel+'</label><p class="se-math-preview"></p></div></div><div class="se-dialog-footer"><button type="submit" class="se-btn-primary" title="'+t.dialogBox.submitButton+'"><span>'+t.dialogBox.submitButton+"</span></button></div></form>",e.context.math.defaultFontSize=l,n.innerHTML=o,n},setController_MathButton:function(e){const t=e.lang,n=e.util.createElement("DIV");return n.className="se-controller se-controller-link",n.innerHTML='<div class="se-arrow se-arrow-up"></div><div class="link-content"><div class="se-btn-group"><button type="button" data-command="update" tabindex="-1" class="se-btn se-tooltip">'+e.icons.edit+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.edit+'</span></span></button><button type="button" data-command="delete" tabindex="-1" class="se-btn se-tooltip">'+e.icons.delete+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.remove+"</span></span></button></div></div>",n},open:function(){this.plugins.dialog.open.call(this,"math","math"===this.currentControllerName)},managedTags:function(){return{className:"katex",method:function(e){if(!e.getAttribute("data-exp")||!this.options.katex)return;const t=this._d.createRange().createContextualFragment(this.plugins.math._renderer.call(this,this.util.HTMLDecoder(e.getAttribute("data-exp"))));e.innerHTML=t.querySelector(".katex").innerHTML}}},_renderer:function(e){const t=this.options.katex;return t.src.renderToString(e,t.options)},_renderMathExp:function(e,t){e.previewElement.innerHTML=this.plugins.math._renderer.call(this,t.target.value)},submit:function(e){this.showLoading(),e.preventDefault(),e.stopPropagation();const t=function(){if(0===this.context.math.focusElement.value.trim().length)return!1;const e=this.context.math,t=e.focusElement.value,n=e.previewElement.querySelector(".katex");if(!n)return!1;if(n.className="__se__katex "+n.className,n.setAttribute("contenteditable",!1),n.setAttribute("data-exp",this.util.HTMLEncoder(t)),n.setAttribute("data-font-size",e.fontSizeElement.value),n.style.fontSize=e.fontSizeElement.value,this.context.dialog.updateModal){const t=this.util.getParentElement(e._mathExp,".katex");t.parentNode.replaceChild(n,t),this.setRange(n,0,n,1)}else{const e=this.getSelectedElements();if(e.length>1){const t=this.util.createElement(e[0].nodeName);if(t.appendChild(n),!this.insertNode(t,null,!0))return!1}else if(!this.insertNode(n,null,!0))return!1;const t=this.util.createTextNode(this.util.zeroWidthSpace);n.parentNode.insertBefore(t,n.nextSibling),this.setRange(n,0,n,1)}return e.focusElement.value="",e.fontSizeElement.value="1em",e.previewElement.style.fontSize="1em",e.previewElement.innerHTML="",!0}.bind(this);try{t()&&(this.plugins.dialog.close.call(this),this.history.push(!1))}catch(e){this.plugins.dialog.close.call(this)}finally{this.closeLoading()}return!1},active:function(e){if(e){if(e.getAttribute("data-exp"))return this.controllerArray.indexOf(this.context.math.mathController)<0&&(this.setRange(e,0,e,1),this.plugins.math.call_controller.call(this,e)),!0}else this.controllerArray.indexOf(this.context.math.mathController)>-1&&this.controllersOff();return!1},on:function(e){if(e){const e=this.context.math;if(e._mathExp){const t=this.util.HTMLDecoder(e._mathExp.getAttribute("data-exp")),n=e._mathExp.getAttribute("data-font-size")||"1em";this.context.dialog.updateModal=!0,e.focusElement.value=t,e.fontSizeElement.value=n,e.previewElement.innerHTML=this.plugins.math._renderer.call(this,t),e.previewElement.style.fontSize=n}}else this.plugins.math.init.call(this)},call_controller:function(e){this.context.math._mathExp=e;const t=this.context.math.mathController;this.setControllerPosition(t,e,"bottom",{left:0,top:0}),this.controllersOn(t,e,"math")},onClick_mathController:function(e){e.stopPropagation();const t=e.target.getAttribute("data-command")||e.target.parentNode.getAttribute("data-command");t&&(e.preventDefault(),/update/.test(t)?(this.context.math.focusElement.value=this.util.HTMLDecoder(this.context.math._mathExp.getAttribute("data-exp")),this.plugins.dialog.open.call(this,"math",!0)):(this.util.removeItem(this.context.math._mathExp),this.context.math._mathExp=null,this.focus(),this.history.push(!1)),this.controllersOff())},init:function(){const e=this.context.math;e.mathController.style.display="none",e._mathExp=null,e.focusElement.value="",e.previewElement.innerHTML=""}},w=n("JhlZ"),x=n.n(w),E={blockquote:{name:"blockquote",display:"command",add:function(e,t){e.context.blockquote={targetButton:t,tag:e.util.createElement("BLOCKQUOTE")}},active:function(e){if(e){if(/blockquote/i.test(e.nodeName))return this.util.addClass(this.context.blockquote.targetButton,"active"),!0}else this.util.removeClass(this.context.blockquote.targetButton,"active");return!1},action:function(){const e=this.util.getParentElement(this.getSelectionNode(),"blockquote");e?this.detachRangeFormatElement(e,null,null,!1,!1):this.applyRangeFormatElement(this.context.blockquote.tag.cloneNode(!1))}},align:{name:"align",display:"submenu",add:function(e,t){const n=e.icons,i=e.context;i.align={targetButton:t,_alignList:null,currentAlign:"",defaultDir:e.options.rtl?"right":"left",icons:{justify:n.align_justify,left:n.align_left,right:n.align_right,center:n.align_center}};let l=this.setSubmenu(e),o=l.querySelector("ul");o.addEventListener("click",this.pickup.bind(e)),i.align._alignList=o.querySelectorAll("li button"),e.initMenuTarget(this.name,t,l),l=null,o=null},setSubmenu:function(e){const t=e.lang,n=e.icons,i=e.util.createElement("DIV"),l="left"===e.context.align.defaultDir,o='<li><button type="button" class="se-btn-list se-btn-align" data-command="justifyleft" data-value="left" title="'+t.toolbar.alignLeft+'"><span class="se-list-icon">'+n.align_left+"</span>"+t.toolbar.alignLeft+"</button></li>",s='<li><button type="button" class="se-btn-list se-btn-align" data-command="justifyright" data-value="right" title="'+t.toolbar.alignRight+'"><span class="se-list-icon">'+n.align_right+"</span>"+t.toolbar.alignRight+"</button></li>";return i.className="se-submenu se-list-layer se-list-align",i.innerHTML='<div class="se-list-inner"><ul class="se-list-basic">'+(l?o:s)+'<li><button type="button" class="se-btn-list se-btn-align" data-command="justifycenter" data-value="center" title="'+t.toolbar.alignCenter+'"><span class="se-list-icon">'+n.align_center+"</span>"+t.toolbar.alignCenter+"</button></li>"+(l?s:o)+'<li><button type="button" class="se-btn-list se-btn-align" data-command="justifyfull" data-value="justify" title="'+t.toolbar.alignJustify+'"><span class="se-list-icon">'+n.align_justify+"</span>"+t.toolbar.alignJustify+"</button></li></ul></div>",i},active:function(e){const t=this.context.align,n=t.targetButton,i=n.firstElementChild;if(e){if(this.util.isFormatElement(e)){const l=e.style.textAlign;if(l)return this.util.changeElement(i,t.icons[l]||t.icons[t.defaultDir]),n.setAttribute("data-focus",l),!0}}else this.util.changeElement(i,t.icons[t.defaultDir]),n.removeAttribute("data-focus");return!1},on:function(){const e=this.context.align,t=e._alignList,n=e.targetButton.getAttribute("data-focus")||e.defaultDir;if(n!==e.currentAlign){for(let e=0,i=t.length;e<i;e++)n===t[e].getAttribute("data-value")?this.util.addClass(t[e],"active"):this.util.removeClass(t[e],"active");e.currentAlign=n}},pickup:function(e){e.preventDefault(),e.stopPropagation();let t=e.target,n=null;for(;!n&&!/UL/i.test(t.tagName);)n=t.getAttribute("data-value"),t=t.parentNode;if(!n)return;const i=this.context.align.defaultDir,l=this.getSelectedElements();for(let e=0,t=l.length;e<t;e++)this.util.setStyle(l[e],"textAlign",n===i?"":n);this.effectNode=null,this.submenuOff(),this.focus(),this.history.push(!1)}},font:{name:"font",display:"submenu",add:function(e,t){const n=e.context;n.font={targetText:t.querySelector(".txt"),targetTooltip:t.parentNode.querySelector(".se-tooltip-text"),_fontList:null,currentFont:""};let i=this.setSubmenu(e);i.querySelector(".se-list-inner").addEventListener("click",this.pickup.bind(e)),n.font._fontList=i.querySelectorAll("ul li button"),e.initMenuTarget(this.name,t,i),i=null},setSubmenu:function(e){const t=e.options,n=e.lang,i=e.util.createElement("DIV");let l,o,s,a;i.className="se-submenu se-list-layer se-list-font-family";let r=t.font?t.font:["Arial","Comic Sans MS","Courier New","Impact","Georgia","tahoma","Trebuchet MS","Verdana"],c='<div class="se-list-inner"><ul class="se-list-basic"><li><button type="button" class="default_value se-btn-list" title="'+n.toolbar.default+'">('+n.toolbar.default+")</button></li>";for(s=0,a=r.length;s<a;s++)l=r[s],o=l.split(",")[0],c+='<li><button type="button" class="se-btn-list" data-value="'+l+'" data-txt="'+o+'" title="'+o+'" style="font-family:'+l+';">'+o+"</button></li>";return c+="</ul></div>",i.innerHTML=c,i},active:function(e){const t=this.context.font.targetText,n=this.context.font.targetTooltip;if(e){if(e.style&&e.style.fontFamily.length>0){const i=e.style.fontFamily.replace(/["']/g,"");return this.util.changeTxt(t,i),this.util.changeTxt(n,this.lang.toolbar.font+" ("+i+")"),!0}}else{const e=this.hasFocus?this.wwComputedStyle.fontFamily:this.lang.toolbar.font;this.util.changeTxt(t,e),this.util.changeTxt(n,this.hasFocus?this.lang.toolbar.font+" ("+e+")":e)}return!1},on:function(){const e=this.context.font,t=e._fontList,n=e.targetText.textContent;if(n!==e.currentFont){for(let e=0,i=t.length;e<i;e++)n===t[e].getAttribute("data-value")?this.util.addClass(t[e],"active"):this.util.removeClass(t[e],"active");e.currentFont=n}},pickup:function(e){if(!/^BUTTON$/i.test(e.target.tagName))return!1;e.preventDefault(),e.stopPropagation();const t=e.target.getAttribute("data-value");if(t){const e=this.util.createElement("SPAN");e.style.fontFamily=t,this.nodeChange(e,["font-family"],null,null)}else this.nodeChange(null,["font-family"],["span"],!0);this.submenuOff()}},fontSize:{name:"fontSize",display:"submenu",add:function(e,t){const n=e.context;n.fontSize={targetText:t.querySelector(".txt"),_sizeList:null,currentSize:""};let i=this.setSubmenu(e),l=i.querySelector("ul");l.addEventListener("click",this.pickup.bind(e)),n.fontSize._sizeList=l.querySelectorAll("li button"),e.initMenuTarget(this.name,t,i),i=null,l=null},setSubmenu:function(e){const t=e.options,n=e.lang,i=e.util.createElement("DIV");i.className="se-submenu se-list-layer se-list-font-size";const l=t.fontSize?t.fontSize:[8,9,10,11,12,14,16,18,20,22,24,26,28,36,48,72];let o='<div class="se-list-inner"><ul class="se-list-basic"><li><button type="button" class="default_value se-btn-list" title="'+n.toolbar.default+'">('+n.toolbar.default+")</button></li>";for(let e,n=0,i=t.fontSizeUnit,s=l.length;n<s;n++)e=l[n],o+='<li><button type="button" class="se-btn-list" data-value="'+e+i+'" title="'+e+i+'" style="font-size:'+e+i+';">'+e+"</button></li>";return o+="</ul></div>",i.innerHTML=o,i},active:function(e){if(e){if(e.style&&e.style.fontSize.length>0)return this.util.changeTxt(this.context.fontSize.targetText,e.style.fontSize),!0}else this.util.changeTxt(this.context.fontSize.targetText,this.hasFocus?this.wwComputedStyle.fontSize:this.lang.toolbar.fontSize);return!1},on:function(){const e=this.context.fontSize,t=e._sizeList,n=e.targetText.textContent;if(n!==e.currentSize){for(let e=0,i=t.length;e<i;e++)n===t[e].getAttribute("data-value")?this.util.addClass(t[e],"active"):this.util.removeClass(t[e],"active");e.currentSize=n}},pickup:function(e){if(!/^BUTTON$/i.test(e.target.tagName))return!1;e.preventDefault(),e.stopPropagation();const t=e.target.getAttribute("data-value");if(t){const e=this.util.createElement("SPAN");e.style.fontSize=t,this.nodeChange(e,["font-size"],null,null)}else this.nodeChange(null,["font-size"],["span"],!0);this.submenuOff()}},fontColor:l,hiliteColor:o,horizontalRule:{name:"horizontalRule",display:"submenu",add:function(e,t){e.context.horizontalRule={currentHR:null};let n=this.setSubmenu(e);n.querySelector("ul").addEventListener("click",this.horizontalRulePick.bind(e)),e.initMenuTarget(this.name,t,n),n=null},setSubmenu:function(e){const t=e.lang,n=e.util.createElement("DIV");return n.className="se-submenu se-list-layer se-list-line",n.innerHTML='<div class="se-list-inner"><ul class="se-list-basic"><li><button type="button" class="se-btn-list btn_line" data-command="horizontalRule" data-value="solid" title="'+t.toolbar.hr_solid+'"><hr style="border-width: 1px 0 0; border-style: solid none none; border-color: black; border-image: initial; height: 1px;" /></button></li><li><button type="button" class="se-btn-list btn_line" data-command="horizontalRule" data-value="dotted" title="'+t.toolbar.hr_dotted+'"><hr style="border-width: 1px 0 0; border-style: dotted none none; border-color: black; border-image: initial; height: 1px;" /></button></li><li><button type="button" class="se-btn-list btn_line" data-command="horizontalRule" data-value="dashed" title="'+t.toolbar.hr_dashed+'"><hr style="border-width: 1px 0 0; border-style: dashed none none; border-color: black; border-image: initial; height: 1px;" /></button></li></ul></div>',n},active:function(e){if(e){if(/HR/i.test(e.nodeName))return this.context.horizontalRule.currentHR=e,this.util.hasClass(e,"on")||(this.util.addClass(e,"on"),this.controllersOn("hr",this.util.removeClass.bind(this.util,e,"on"))),!0}else this.util.hasClass(this.context.horizontalRule.currentHR,"on")&&this.controllersOff();return!1},appendHr:function(e){const t=this.util.createElement("HR");return t.className=e,this.focus(),this.insertComponent(t,!1,!0,!1)},horizontalRulePick:function(e){e.preventDefault(),e.stopPropagation();let t=e.target,n=null;for(;!n&&!/UL/i.test(t.tagName);)n=t.getAttribute("data-value"),t=t.parentNode;if(!n)return;const i=this.plugins.horizontalRule.appendHr.call(this,"__se__"+n);i&&(this.setRange(i,0,i,0),this.submenuOff())}},list:{name:"list",display:"submenu",add:function(e,t){const n=e.context;n.list={targetButton:t,_list:null,currentList:"",icons:{bullets:e.icons.list_bullets,number:e.icons.list_number}};let i=this.setSubmenu(e),l=i.querySelector("ul");l.addEventListener("click",this.pickup.bind(e)),n.list._list=l.querySelectorAll("li button"),e.initMenuTarget(this.name,t,i),i=null,l=null},setSubmenu:function(e){const t=e.lang,n=e.util.createElement("DIV");return n.className="se-submenu se-list-layer",n.innerHTML='<div class="se-list-inner"><ul class="se-list-basic"><li><button type="button" class="se-btn-list se-tooltip" data-command="OL" title="'+t.toolbar.orderList+'">'+e.icons.list_number+'</button></li><li><button type="button" class="se-btn-list se-tooltip" data-command="UL" title="'+t.toolbar.unorderList+'">'+e.icons.list_bullets+"</button></li></ul></div>",n},active:function(e){const t=this.context.list.targetButton,n=t.firstElementChild,i=this.util;if(e){if(i.isList(e)){const l=e.nodeName;return t.setAttribute("data-focus",l),i.addClass(t,"active"),/UL/i.test(l)?i.changeElement(n,this.context.list.icons.bullets):i.changeElement(n,this.context.list.icons.number),!0}}else t.removeAttribute("data-focus"),i.changeElement(n,this.context.list.icons.number),i.removeClass(t,"active");return!1},on:function(){const e=this.context.list,t=e._list,n=e.targetButton.getAttribute("data-focus")||"";if(n!==e.currentList){for(let e=0,i=t.length;e<i;e++)n===t[e].getAttribute("data-command")?this.util.addClass(t[e],"active"):this.util.removeClass(t[e],"active");e.currentList=n}},editList:function(e,t,n){let i=this.getRange(),l=t||this.getSelectedElementsAndComponents(!1);if(0===l.length){if(t)return;if(i=this.getRange_addLine(i,null),l=this.getSelectedElementsAndComponents(!1),0===l.length)return}const o=this.util;o.sortByDepth(l,!0);let s=l[0],a=l[l.length-1],r=!o.isListCell(s)&&!o.isComponent(s)||s.previousElementSibling?s.previousElementSibling:s.parentNode.previousElementSibling,c=!o.isListCell(a)&&!o.isComponent(a)||a.nextElementSibling?a.nextElementSibling:a.parentNode.nextElementSibling;const d={sc:i.startContainer,so:i.startContainer===i.endContainer&&o.onlyZeroWidthSpace(i.startContainer)&&0===i.startOffset&&1===i.endOffset?i.endOffset:i.startOffset,ec:i.endContainer,eo:i.endOffset};let u=!0;for(let e=0,t=l.length;e<t;e++)if(!o.isList(o.getRangeFormatElement(l[e],function(t){return this.getRangeFormatElement(t)&&t!==l[e]}.bind(o)))){u=!1;break}if(!u||r&&s.tagName===r.tagName&&e===r.tagName.toUpperCase()||c&&a.tagName===c.tagName&&e===c.tagName.toUpperCase()){const t=r?r.parentNode:r,n=c?c.parentNode:c;r=t&&!o.isWysiwygDiv(t)&&t.nodeName===e?t:r,c=n&&!o.isWysiwygDiv(n)&&n.nodeName===e?n:c;const i=r&&r.tagName===e,s=c&&c.tagName===e;let a=i?r:o.createElement(e),d=null,u=null,h=null,p=null;const g=function(e){return!this.isComponent(e)&&!this.isList(e)}.bind(o);for(let t,n,s,r,c,p,m,f,_,b=0,v=l.length;b<v;b++)if(n=l[b],0!==n.childNodes.length||o._isIgnoreNodeChange(n)){if(r=l[b+1],c=n.parentNode,p=r?r.parentNode:null,s=o.isListCell(n),_=o.isRangeFormatElement(c)?c:null,m=s&&!o.isWysiwygDiv(c)?c.parentNode:c,f=s&&!o.isWysiwygDiv(c)?!r||o.isListCell(m)?c:c.nextSibling:n.nextSibling,t=o.createElement("LI"),o.copyFormatAttributes(t,n),o.isComponent(n)){const e=/^HR$/i.test(n.nodeName);e||(t.innerHTML="<br>"),t.innerHTML+=n.outerHTML,e&&(t.innerHTML+="<br>")}else{const e=n.childNodes;for(;e[0];)t.appendChild(e[0])}a.appendChild(t),r||(u=a),r&&m===p&&!o.isRangeFormatElement(f)||(d||(d=a),i&&r&&m===p||r&&o.isList(p)&&p===c||a.parentNode!==m&&m.insertBefore(a,f)),o.removeItem(n),i&&null===h&&(h=a.children.length-1),r&&(o.getRangeFormatElement(p,g)!==o.getRangeFormatElement(c,g)||o.isList(p)&&o.isList(c)&&o.getElementDepth(p)!==o.getElementDepth(c))&&(a=o.createElement(e)),_&&0===_.children.length&&o.removeItem(_)}else o.removeItem(n);h&&(d=d.children[h]),s&&(p=a.children.length-1,a.innerHTML+=c.innerHTML,u=a.children[p],o.removeItem(c))}else{if(n)for(let e=0,t=l.length;e<t;e++)for(let n=e-1;n>=0;n--)if(l[n].contains(l[e])){l.splice(e,1),e--,t--;break}const t=o.getRangeFormatElement(s),i=t&&t.tagName===e;let a,r;const c=function(e){return!this.isComponent(e)}.bind(o);i||(r=o.createElement(e));for(let t,s,d=0,u=l.length;d<u;d++)s=o.getRangeFormatElement(l[d],c),s&&o.isList(s)&&(t?t!==s?(n&&o.isListCell(s.parentNode)?this.plugins.list._detachNested.call(this,a.f):this.detachRangeFormatElement(a.f[0].parentNode,a.f,r,!1,!0),s=l[d].parentNode,i||(r=o.createElement(e)),t=s,a={r:t,f:[o.getParentElement(l[d],"LI")]}):a.f.push(o.getParentElement(l[d],"LI")):(t=s,a={r:t,f:[o.getParentElement(l[d],"LI")]}),d===u-1&&(n&&o.isListCell(s.parentNode)?this.plugins.list._detachNested.call(this,a.f):this.detachRangeFormatElement(a.f[0].parentNode,a.f,r,!1,!0)))}return this.effectNode=null,d},_detachNested:function(e){const t=e[0],n=e[e.length-1],i=n.nextElementSibling,l=t.parentNode,o=l.parentNode.nextElementSibling,s=l.parentNode.parentNode;for(let t=0,n=e.length;t<n;t++)s.insertBefore(e[t],o);if(i&&l.children.length>0){const e=l.cloneNode(!1),t=l.childNodes,o=this.util.getPositionIndex(i);for(;t[o];)e.appendChild(t[o]);n.appendChild(e)}0===l.children.length&&this.util.removeItem(l),this.util.mergeSameTags(s);const a=this.util.getEdgeChildNodes(t,n);return{cc:t.parentNode,sc:a.sc,ec:a.ec}},editInsideList:function(e,t){const n=(t=t||this.getSelectedElements().filter(function(e){return this.isListCell(e)}.bind(this.util))).length;if(0===n||!e&&!this.util.isListCell(t[0].previousElementSibling)&&!this.util.isListCell(t[n-1].nextElementSibling))return{sc:t[0],so:0,ec:t[n-1],eo:1};let i=t[0].parentNode,l=t[n-1],o=null;if(e){if(i!==l.parentNode&&this.util.isList(l.parentNode.parentNode)&&l.nextElementSibling)for(l=l.nextElementSibling;l;)t.push(l),l=l.nextElementSibling;o=this.plugins.list.editList.call(this,i.nodeName.toUpperCase(),t,!0)}else{let e=this.util.createElement(i.nodeName),s=t[0].previousElementSibling,a=l.nextElementSibling;const r={s:null,e:null,sl:i,el:i};for(let l,o=0,c=n;o<c;o++)l=t[o],l.parentNode!==i&&(this.plugins.list._insiedList.call(this,i,e,s,a,r),i=l.parentNode,e=this.util.createElement(i.nodeName)),s=l.previousElementSibling,a=l.nextElementSibling,e.appendChild(l);this.plugins.list._insiedList.call(this,i,e,s,a,r);const c=this.util.getNodeFromPath(r.s,r.sl),d=this.util.getNodeFromPath(r.e,r.el);o={sc:c,so:0,ec:d,eo:d.textContent.length}}return o},_insiedList:function(e,t,n,i,l){let o=!1;if(n&&t.tagName===n.tagName){const e=t.children;for(;e[0];)n.appendChild(e[0]);t=n,o=!0}if(i&&t.tagName===i.tagName){const e=i.children;for(;e[0];)t.appendChild(e[0]);const n=i.nextElementSibling;i.parentNode.removeChild(i),i=n}if(!o){this.util.isListCell(n)&&(e=n,i=null),e.insertBefore(t,i),l.s||(l.s=this.util.getNodePath(t.firstElementChild.firstChild,e,null),l.sl=e);const o=e.contains(l.sl)?this.util.getNodePath(l.sl,e):null;l.e=this.util.getNodePath(t.lastElementChild.firstChild,e,null),l.el=e,this.util.mergeSameTags(e,[l.s,l.e,o],!1),this.util.mergeNestedTags(e),o&&(l.sl=this.util.getNodeFromPath(o,e))}return t},pickup:function(e){e.preventDefault(),e.stopPropagation();let t=e.target,n="";for(;!n&&!/^UL$/i.test(t.tagName);)n=t.getAttribute("data-command"),t=t.parentNode;if(!n)return;const i=this.plugins.list.editList.call(this,n,null,!1);i&&this.setRange(i.sc,i.so,i.ec,i.eo),this.submenuOff(),this.history.push(!1)}},table:{name:"table",display:"submenu",add:function(e,t){const n=e.context;let i=n.table={_element:null,_tdElement:null,_trElement:null,_trElements:null,_tableXY:[],_maxWidth:!0,_fixedColumn:!1,_rtl:e.options.rtl,cellControllerTop:"top"===e.options.tableCellControllerPosition,resizeText:null,headerButton:null,mergeButton:null,splitButton:null,splitMenu:null,maxText:e.lang.controller.maxSize,minText:e.lang.controller.minSize,_physical_cellCnt:0,_logical_cellCnt:0,_rowCnt:0,_rowIndex:0,_physical_cellIndex:0,_logical_cellIndex:0,_current_colSpan:0,_current_rowSpan:0,icons:{expansion:e.icons.expansion,reduction:e.icons.reduction}},l=this.setSubmenu(e),o=l.querySelector(".se-controller-table-picker");i.tableHighlight=l.querySelector(".se-table-size-highlighted"),i.tableUnHighlight=l.querySelector(".se-table-size-unhighlighted"),i.tableDisplay=l.querySelector(".se-table-size-display"),e.options.rtl&&(i.tableHighlight.style.left="167px");let s=this.setController_table(e);i.tableController=s,i.resizeButton=s.querySelector("._se_table_resize"),i.resizeText=s.querySelector("._se_table_resize > span > span"),i.columnFixedButton=s.querySelector("._se_table_fixed_column"),i.headerButton=s.querySelector("._se_table_header");let a=this.setController_tableEditor(e,i.cellControllerTop);i.resizeDiv=a,i.splitMenu=a.querySelector(".se-btn-group-sub"),i.mergeButton=a.querySelector("._se_table_merge_button"),i.splitButton=a.querySelector("._se_table_split_button"),i.insertRowAboveButton=a.querySelector("._se_table_insert_row_a"),i.insertRowBelowButton=a.querySelector("._se_table_insert_row_b"),o.addEventListener("mousemove",this.onMouseMove_tablePicker.bind(e,i)),o.addEventListener("click",this.appendTable.bind(e)),a.addEventListener("click",this.onClick_tableController.bind(e)),s.addEventListener("click",this.onClick_tableController.bind(e)),e.initMenuTarget(this.name,t,l),n.element.relative.appendChild(a),n.element.relative.appendChild(s),l=null,o=null,a=null,s=null,i=null},setSubmenu:function(e){const t=e.util.createElement("DIV");return t.className="se-submenu se-selector-table",t.innerHTML='<div class="se-table-size"><div class="se-table-size-picker se-controller-table-picker"></div><div class="se-table-size-highlighted"></div><div class="se-table-size-unhighlighted"></div></div><div class="se-table-size-display">1 x 1</div>',t},setController_table:function(e){const t=e.lang,n=e.icons,i=e.util.createElement("DIV");return i.className="se-controller se-controller-table",i.innerHTML='<div><div class="se-btn-group"><button type="button" data-command="resize" class="se-btn se-tooltip _se_table_resize">'+n.expansion+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.maxSize+'</span></span></button><button type="button" data-command="layout" class="se-btn se-tooltip _se_table_fixed_column">'+n.fixed_column_width+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.fixedColumnWidth+'</span></span></button><button type="button" data-command="header" class="se-btn se-tooltip _se_table_header">'+n.table_header+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.tableHeader+'</span></span></button><button type="button" data-command="remove" class="se-btn se-tooltip">'+n.delete+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.remove+"</span></span></button></div></div>",i},setController_tableEditor:function(e,t){const n=e.lang,i=e.icons,l=e.util.createElement("DIV");return l.className="se-controller se-controller-table-cell",l.innerHTML=(t?"":'<div class="se-arrow se-arrow-up"></div>')+'<div class="se-btn-group"><button type="button" data-command="insert" data-value="row" data-option="up" class="se-btn se-tooltip _se_table_insert_row_a">'+i.insert_row_above+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+n.controller.insertRowAbove+'</span></span></button><button type="button" data-command="insert" data-value="row" data-option="down" class="se-btn se-tooltip _se_table_insert_row_b">'+i.insert_row_below+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+n.controller.insertRowBelow+'</span></span></button><button type="button" data-command="delete" data-value="row" class="se-btn se-tooltip">'+i.delete_row+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+n.controller.deleteRow+'</span></span></button><button type="button" data-command="merge" class="_se_table_merge_button se-btn se-tooltip" disabled>'+i.merge_cell+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+n.controller.mergeCells+'</span></span></button></div><div class="se-btn-group" style="padding-top: 0;"><button type="button" data-command="insert" data-value="cell" data-option="left" class="se-btn se-tooltip">'+i.insert_column_left+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+n.controller.insertColumnBefore+'</span></span></button><button type="button" data-command="insert" data-value="cell" data-option="right" class="se-btn se-tooltip">'+i.insert_column_right+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+n.controller.insertColumnAfter+'</span></span></button><button type="button" data-command="delete" data-value="cell" class="se-btn se-tooltip">'+i.delete_column+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+n.controller.deleteColumn+'</span></span></button><button type="button" data-command="onsplit" class="_se_table_split_button se-btn se-tooltip">'+i.split_cell+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+n.controller.splitCells+'</span></span></button><div class="se-btn-group-sub sun-editor-common se-list-layer se-table-split"><div class="se-list-inner"><ul class="se-list-basic"><li class="se-btn-list" data-command="split" data-value="vertical" style="line-height:32px;" title="'+n.controller.VerticalSplit+'">'+n.controller.VerticalSplit+'</li><li class="se-btn-list" data-command="split" data-value="horizontal" style="line-height:32px;" title="'+n.controller.HorizontalSplit+'">'+n.controller.HorizontalSplit+"</li></ul></div></div></div>",l},appendTable:function(){const e=this.util.createElement("TABLE"),t=this.plugins.table.createCells,n=this.context.table._tableXY[0];let i=this.context.table._tableXY[1],l="<tbody>";for(;i>0;)l+="<tr>"+t.call(this,"td",n)+"</tr>",--i;l+="</tbody>",e.innerHTML=l;if(this.insertComponent(e,!1,!0,!1)){const t=e.querySelector("td div");this.setRange(t,0,t,0),this.plugins.table.reset_table_picker.call(this)}},createCells:function(e,t,n){if(e=e.toLowerCase(),n){const t=this.util.createElement(e);return t.innerHTML="<div><br></div>",t}{let n="";for(;t>0;)n+="<"+e+"><div><br></div></"+e+">",t--;return n}},onMouseMove_tablePicker:function(e,t){t.stopPropagation();let n=this._w.Math.ceil(t.offsetX/18),i=this._w.Math.ceil(t.offsetY/18);n=n<1?1:n,i=i<1?1:i,e._rtl&&(e.tableHighlight.style.left=18*n-13+"px",n=11-n),e.tableHighlight.style.width=n+"em",e.tableHighlight.style.height=i+"em",this.util.changeTxt(e.tableDisplay,n+" x "+i),e._tableXY=[n,i]},reset_table_picker:function(){if(!this.context.table.tableHighlight)return;const e=this.context.table.tableHighlight.style,t=this.context.table.tableUnHighlight.style;e.width="1em",e.height="1em",t.width="10em",t.height="10em",this.util.changeTxt(this.context.table.tableDisplay,"1 x 1"),this.submenuOff()},init:function(){const e=this.context.table,t=this.plugins.table;if(t._removeEvents.call(this),t._selectedTable){const e=t._selectedTable.querySelectorAll(".se-table-selected-cell");for(let t=0,n=e.length;t<n;t++)this.util.removeClass(e[t],"se-table-selected-cell")}t._toggleEditor.call(this,!0),e._element=null,e._tdElement=null,e._trElement=null,e._trElements=null,e._tableXY=[],e._maxWidth=!0,e._fixedColumn=!1,e._physical_cellCnt=0,e._logical_cellCnt=0,e._rowCnt=0,e._rowIndex=0,e._physical_cellIndex=0,e._logical_cellIndex=0,e._current_colSpan=0,e._current_rowSpan=0,t._shift=!1,t._selectedCells=null,t._selectedTable=null,t._ref=null,t._fixedCell=null,t._selectedCell=null,t._fixedCellName=null},call_controller_tableEdit:function(e){const t=this.plugins.table,n=this.context.table;if(!this.getSelection().isCollapsed&&!t._selectedCell)return this.controllersOff(),void this.util.removeClass(e,"se-table-selected-cell");const i=n._element||this.plugins.table._selectedTable||this.util.getParentElement(e,"TABLE");n._maxWidth=this.util.hasClass(i,"se-table-size-100")||"100%"===i.style.width||!i.style.width&&!this.util.hasClass(i,"se-table-size-auto"),n._fixedColumn=this.util.hasClass(i,"se-table-layout-fixed")||"fixed"===i.style.tableLayout,t.setTableStyle.call(this,n._maxWidth?"width|column":"width"),t.setPositionControllerTop.call(this,i),t.setPositionControllerDiv.call(this,e,t._shift),t._shift||this.controllersOn(n.resizeDiv,n.tableController,t.init.bind(this),e,"table")},setPositionControllerTop:function(e){this.setControllerPosition(this.context.table.tableController,e,"top",{left:0,top:0})},setPositionControllerDiv:function(e,t){const n=this.context.table,i=n.resizeDiv;this.plugins.table.setCellInfo.call(this,e,t),n.cellControllerTop?this.setControllerPosition(i,n._element,"top",{left:n.tableController.offsetWidth,top:0}):this.setControllerPosition(i,e,"bottom",{left:0,top:0})},setCellInfo:function(e,t){const n=this.context.table,i=n._element=this.plugins.table._selectedTable||this.util.getParentElement(e,"TABLE");if(/THEAD/i.test(i.firstElementChild.nodeName)?this.util.addClass(n.headerButton,"active"):this.util.removeClass(n.headerButton,"active"),t||0===n._physical_cellCnt){n._tdElement!==e&&(n._tdElement=e,n._trElement=e.parentNode);const t=n._trElements=i.rows,l=e.cellIndex;let o=0;for(let e=0,n=t[0].cells,i=t[0].cells.length;e<i;e++)o+=n[e].colSpan;const s=n._rowIndex=n._trElement.rowIndex;n._rowCnt=t.length,n._physical_cellCnt=n._trElement.cells.length,n._logical_cellCnt=o,n._physical_cellIndex=l,n._current_colSpan=n._tdElement.colSpan-1,n._current_rowSpan,n._trElement.cells[l].rowSpan;let a=[],r=[];for(let e,i,o=0;o<=s;o++){e=t[o].cells,i=0;for(let t,c,d,u,h=0,p=e.length;h<p;h++){if(t=e[h],c=t.colSpan-1,d=t.rowSpan-1,u=h+i,r.length>0)for(let e,t=0;t<r.length;t++)e=r[t],e.row>o||(u>=e.index?(i+=e.cs,u+=e.cs,e.rs-=1,e.row=o+1,e.rs<1&&(r.splice(t,1),t--)):h===p-1&&(e.rs-=1,e.row=o+1,e.rs<1&&(r.splice(t,1),t--)));if(o===s&&h===l){n._logical_cellIndex=u;break}d>0&&a.push({index:u,cs:c+1,rs:d,row:-1}),i+=c}r=r.concat(a).sort((function(e,t){return e.index-t.index})),a=[]}a=null,r=null}},editTable:function(e,t){const n=this.plugins.table,i=this.context.table,l=i._element,o="row"===e;if(o){const e=i._trElement.parentNode;if(/^THEAD$/i.test(e.nodeName)){if("up"===t)return;if(!e.nextElementSibling||!/^TBODY$/i.test(e.nextElementSibling.nodeName))return void(l.innerHTML+="<tbody><tr>"+n.createCells.call(this,"td",i._logical_cellCnt,!1)+"</tr></tbody>")}}if(n._ref){const e=i._tdElement,l=n._selectedCells;if(o)if(t)n.setCellInfo.call(this,"up"===t?l[0]:l[l.length-1],!0),n.editRow.call(this,t,e);else{let e=l[0].parentNode;const i=[l[0]];for(let t,n=1,o=l.length;n<o;n++)t=l[n],e!==t.parentNode&&(i.push(t),e=t.parentNode);for(let e=0,l=i.length;e<l;e++)n.setCellInfo.call(this,i[e],!0),n.editRow.call(this,t)}else{const i=l[0].parentNode;if(t){let o=null;for(let e=0,t=l.length-1;e<t;e++)if(i!==l[e+1].parentNode){o=l[e];break}n.setCellInfo.call(this,"left"===t?l[0]:o||l[0],!0),n.editCell.call(this,t,e)}else{const e=[l[0]];for(let t,n=1,o=l.length;n<o&&(t=l[n],i===t.parentNode);n++)e.push(t);for(let i=0,l=e.length;i<l;i++)n.setCellInfo.call(this,e[i],!0),n.editCell.call(this,t)}}t||n.init.call(this)}else n[o?"editRow":"editCell"].call(this,t);if(!t){const e=l.children;for(let t=0;t<e.length;t++)0===e[t].children.length&&(this.util.removeItem(e[t]),t--);0===l.children.length&&this.util.removeItem(l)}},editRow:function(e,t){const n=this.context.table,i=!e,l="up"===e,o=n._rowIndex,s=i||l?o:o+n._current_rowSpan+1,a=i?-1:1,r=n._trElements;let c=n._logical_cellCnt;for(let e,t=0,n=o+(i?-1:0);t<=n;t++){if(e=r[t].cells,0===e.length)return;for(let n,i,l=0,o=e.length;l<o;l++)n=e[l].rowSpan,i=e[l].colSpan,n<2&&i<2||n+t>s&&s>t&&(e[l].rowSpan=n+a,c-=i)}if(i){const e=r[o+1];if(e){const t=[];let n=r[o].cells,i=0;for(let e,l,o=0,s=n.length;o<s;o++)e=n[o],l=o+i,i+=e.colSpan-1,e.rowSpan>1&&(e.rowSpan-=1,t.push({cell:e.cloneNode(!1),index:l}));if(t.length>0){let l=t.shift();n=e.cells,i=0;for(let o,s,a=0,r=n.length;a<r&&(o=n[a],s=a+i,i+=o.colSpan-1,!(s>=l.index)||(a--,i--,i+=l.cell.colSpan-1,e.insertBefore(l.cell,o),l=t.shift(),l));a++);if(l){e.appendChild(l.cell);for(let n=0,i=t.length;n<i;n++)e.appendChild(t[n].cell)}}}n._element.deleteRow(s)}else{n._element.insertRow(s).innerHTML=this.plugins.table.createCells.call(this,"td",c,!1)}i?this.controllersOff():this.plugins.table.setPositionControllerDiv.call(this,t||n._tdElement,!0)},editCell:function(e,t){const n=this.context.table,i=this.util,l=!e,o="left"===e,s=n._current_colSpan,a=l||o?n._logical_cellIndex:n._logical_cellIndex+s+1,r=n._trElements;let c=[],d=[],u=0;const h=[],p=[];for(let e,t,o,g,m,f,_=0,b=n._rowCnt;_<b;_++){e=r[_],t=a,m=!1,o=e.cells,f=0;for(let e,n,r,g,b=0,v=o.length;b<v&&(e=o[b],e);b++)if(n=e.rowSpan-1,r=e.colSpan-1,l){if(g=b+f,d.length>0){const e=!o[b+1];for(let t,n=0;n<d.length;n++)t=d[n],t.row>_||(g>=t.index?(f+=t.cs,g=b+f,t.rs-=1,t.row=_+1,t.rs<1&&(d.splice(n,1),n--)):e&&(t.rs-=1,t.row=_+1,t.rs<1&&(d.splice(n,1),n--)))}n>0&&c.push({rs:n,cs:r+1,index:g,row:-1}),g>=t&&g+r<=t+s?h.push(e):g<=t+s&&g+r>=t?e.colSpan-=i.getOverlapRangeAtIndex(a,a+s,g,g+r):n>0&&(g<t||g+r>t+s)&&p.push({cell:e,i:_,rs:_+n}),f+=r}else{if(b>=t)break;if(r>0){if(u<1&&r+b>=t){e.colSpan+=1,t=null,u=n+1;break}t-=r}if(!m){for(let e,n=0;n<d.length;n++)e=d[n],t-=e.cs,e.rs-=1,e.rs<1&&(d.splice(n,1),n--);m=!0}}if(d=d.concat(c).sort((function(e,t){return e.index-t.index})),c=[],!l){if(u>0){u-=1;continue}null!==t&&o.length>0&&(g=this.plugins.table.createCells.call(this,o[0].nodeName,0,!0),g=e.insertBefore(g,o[t]))}}if(l){let e,t;for(let n,l=0,o=h.length;l<o;l++)n=h[l].parentNode,i.removeItem(h[l]),0===n.cells.length&&(e||(e=i.getArrayIndex(r,n)),t=i.getArrayIndex(r,n),i.removeItem(n));for(let n,l=0,o=p.length;l<o;l++)n=p[l],n.cell.rowSpan=i.getOverlapRangeAtIndex(e,t,n.i,n.rs);this.controllersOff()}else this.plugins.table.setPositionControllerDiv.call(this,t||n._tdElement,!0)},_closeSplitMenu:null,openSplitMenu:function(){this.util.addClass(this.context.table.splitButton,"on"),this.context.table.splitMenu.style.display="inline-table",this.plugins.table._closeSplitMenu=function(){this.util.removeClass(this.context.table.splitButton,"on"),this.context.table.splitMenu.style.display="none",this.removeDocEvent("click",this.plugins.table._closeSplitMenu),this.plugins.table._closeSplitMenu=null}.bind(this),this.addDocEvent("click",this.plugins.table._closeSplitMenu)},splitCells:function(e){const t=this.util,n="vertical"===e,i=this.context.table,l=i._tdElement,o=i._trElements,s=i._trElement,a=i._logical_cellIndex,r=i._rowIndex,c=this.plugins.table.createCells.call(this,l.nodeName,0,!0);if(n){const e=l.colSpan;if(c.rowSpan=l.rowSpan,e>1)c.colSpan=this._w.Math.floor(e/2),l.colSpan=e-c.colSpan,s.insertBefore(c,l.nextElementSibling);else{let t=[],n=[];for(let s,r,c=0,d=i._rowCnt;c<d;c++){s=o[c].cells,r=0;for(let i,o,d,u,h=0,p=s.length;h<p;h++){if(i=s[h],o=i.colSpan-1,d=i.rowSpan-1,u=h+r,n.length>0)for(let e,t=0;t<n.length;t++)e=n[t],e.row>c||(u>=e.index?(r+=e.cs,u+=e.cs,e.rs-=1,e.row=c+1,e.rs<1&&(n.splice(t,1),t--)):h===p-1&&(e.rs-=1,e.row=c+1,e.rs<1&&(n.splice(t,1),t--)));if(u<=a&&d>0&&t.push({index:u,cs:o+1,rs:d,row:-1}),i!==l&&u<=a&&u+o>=a+e-1){i.colSpan+=1;break}if(u>a)break;r+=o}n=n.concat(t).sort((function(e,t){return e.index-t.index})),t=[]}s.insertBefore(c,l.nextElementSibling)}}else{const e=l.rowSpan;if(c.colSpan=l.colSpan,e>1){c.rowSpan=this._w.Math.floor(e/2);const n=e-c.rowSpan,i=[],r=t.getArrayIndex(o,s)+n;for(let e,t,n=0;n<r;n++){e=o[n].cells,t=0;for(let l,o,s,c=0,d=e.length;c<d&&(s=c+t,!(s>=a));c++)l=e[c],o=l.rowSpan-1,o>0&&o+n>=r&&s<a&&i.push({index:s,cs:l.colSpan}),t+=l.colSpan-1}const d=o[r],u=d.cells;let h=i.shift();for(let e,t,n,l,o=0,s=u.length,r=0;o<s;o++){if(n=o+r,e=u[o],t=e.colSpan-1,l=n+t+1,h&&l>=h.index&&(r+=h.cs,l+=h.cs,h=i.shift()),l>=a||o===s-1){d.insertBefore(c,e.nextElementSibling);break}r+=t}l.rowSpan=n}else{c.rowSpan=l.rowSpan;const e=t.createElement("TR");e.appendChild(c);for(let e,t=0;t<r;t++){if(e=o[t].cells,0===e.length)return;for(let n=0,i=e.length;n<i;n++)t+e[n].rowSpan-1>=r&&(e[n].rowSpan+=1)}const n=i._physical_cellIndex,a=s.cells;for(let e=0,t=a.length;e<t;e++)e!==n&&(a[e].rowSpan+=1);s.parentNode.insertBefore(e,s.nextElementSibling)}}this.focusEdge(l),this.plugins.table.setPositionControllerDiv.call(this,l,!0)},mergeCells:function(){const e=this.plugins.table,t=this.context.table,n=this.util,i=e._ref,l=e._selectedCells,o=l[0];let s=null,a=null,r=i.ce-i.cs+1,c=i.re-i.rs+1,d="",u=null;for(let e,t,i=1,o=l.length;i<o;i++){e=l[i],u!==e.parentNode&&(u=e.parentNode),t=e.children;for(let e=0,i=t.length;e<i;e++)n.isFormatElement(t[e])&&n.onlyZeroWidthSpace(t[e].textContent)&&n.removeItem(t[e]);d+=e.innerHTML,n.removeItem(e),0===u.cells.length&&(s?a=u:s=u,c-=1)}if(s){const e=t._trElements,i=n.getArrayIndex(e,s),l=n.getArrayIndex(e,a||s),o=[];for(let t,s=0;s<=l;s++)if(t=e[s].cells,0!==t.length)for(let e,o,a=0,r=t.length;a<r;a++)e=t[a],o=e.rowSpan-1,o>0&&s+o>=i&&(e.rowSpan-=n.getOverlapRangeAtIndex(i,l,s,s+o));else o.push(e[s]);for(let e=0,t=o.length;e<t;e++)n.removeItem(o[e])}o.innerHTML+=d,o.colSpan=r,o.rowSpan=c,this.controllersOff(),e.setActiveButton.call(this,!0,!1),e.call_controller_tableEdit.call(this,o),n.addClass(o,"se-table-selected-cell"),this.focusEdge(o)},toggleHeader:function(){const e=this.util,t=this.context.table.headerButton,n=e.hasClass(t,"active"),i=this.context.table._element;if(n)e.removeItem(i.querySelector("thead"));else{const t=e.createElement("THEAD");t.innerHTML="<tr>"+this.plugins.table.createCells.call(this,"th",this.context.table._logical_cellCnt,!1)+"</tr>",i.insertBefore(t,i.firstElementChild)}e.toggleClass(t,"active"),/TH/i.test(this.context.table._tdElement.nodeName)?this.controllersOff():this.plugins.table.setPositionControllerDiv.call(this,this.context.table._tdElement,!1)},setTableStyle:function(e){const t=this.context.table,n=t._element;let i,l,o,s;e.indexOf("width")>-1&&(i=t.resizeButton.firstElementChild,l=t.resizeText,t._maxWidth?(o=t.icons.reduction,s=t.minText,t.columnFixedButton.style.display="block",this.util.removeClass(n,"se-table-size-auto"),this.util.addClass(n,"se-table-size-100")):(o=t.icons.expansion,s=t.maxText,t.columnFixedButton.style.display="none",this.util.removeClass(n,"se-table-size-100"),this.util.addClass(n,"se-table-size-auto")),this.util.changeElement(i,o),this.util.changeTxt(l,s)),e.indexOf("column")>-1&&(t._fixedColumn?(this.util.removeClass(n,"se-table-layout-auto"),this.util.addClass(n,"se-table-layout-fixed"),this.util.addClass(t.columnFixedButton,"active")):(this.util.removeClass(n,"se-table-layout-fixed"),this.util.addClass(n,"se-table-layout-auto"),this.util.removeClass(t.columnFixedButton,"active")))},setActiveButton:function(e,t){const n=this.context.table;/^TH$/i.test(e.nodeName)?(n.insertRowAboveButton.setAttribute("disabled",!0),n.insertRowBelowButton.setAttribute("disabled",!0)):(n.insertRowAboveButton.removeAttribute("disabled"),n.insertRowBelowButton.removeAttribute("disabled")),t&&e!==t?(n.splitButton.setAttribute("disabled",!0),n.mergeButton.removeAttribute("disabled")):(n.splitButton.removeAttribute("disabled"),n.mergeButton.setAttribute("disabled",!0))},_bindOnSelect:null,_bindOffSelect:null,_bindOffShift:null,_selectedCells:null,_shift:!1,_fixedCell:null,_fixedCellName:null,_selectedCell:null,_selectedTable:null,_ref:null,_toggleEditor:function(e){this.context.element.wysiwyg.setAttribute("contenteditable",e),e?this.util.removeClass(this.context.element.wysiwyg,"se-disabled"):this.util.addClass(this.context.element.wysiwyg,"se-disabled")},_offCellMultiSelect:function(e){e.stopPropagation();const t=this.plugins.table;t._shift?t._initBind&&(this._wd.removeEventListener("touchmove",t._initBind),t._initBind=null):(t._removeEvents.call(this),t._toggleEditor.call(this,!0)),t._fixedCell&&t._selectedTable&&(t.setActiveButton.call(this,t._fixedCell,t._selectedCell),t.call_controller_tableEdit.call(this,t._selectedCell||t._fixedCell),t._selectedCells=t._selectedTable.querySelectorAll(".se-table-selected-cell"),t._selectedCell&&t._fixedCell&&this.focusEdge(t._selectedCell),t._shift||(t._fixedCell=null,t._selectedCell=null,t._fixedCellName=null))},_onCellMultiSelect:function(e){this._antiBlur=!0;const t=this.plugins.table,n=this.util.getParentElement(e.target,this.util.isCell);if(t._shift)n===t._fixedCell?t._toggleEditor.call(this,!0):t._toggleEditor.call(this,!1);else if(!t._ref){if(n===t._fixedCell)return;t._toggleEditor.call(this,!1)}n&&n!==t._selectedCell&&t._fixedCellName===n.nodeName&&t._selectedTable===this.util.getParentElement(n,"TABLE")&&(t._selectedCell=n,t._setMultiCells.call(this,t._fixedCell,n))},_setMultiCells:function(e,t){const n=this.plugins.table,i=n._selectedTable.rows,l=this.util,o=n._selectedTable.querySelectorAll(".se-table-selected-cell");for(let e=0,t=o.length;e<t;e++)l.removeClass(o[e],"se-table-selected-cell");if(e===t&&(l.addClass(e,"se-table-selected-cell"),!n._shift))return;let s=!0,a=[],r=[];const c=n._ref={_i:0,cs:null,ce:null,rs:null,re:null};for(let n,o,d=0,u=i.length;d<u;d++){n=i[d].cells,o=0;for(let i,u,h,p,g=0,m=n.length;g<m;g++){if(i=n[g],h=i.colSpan-1,p=i.rowSpan-1,u=g+o,a.length>0)for(let e,t=0;t<a.length;t++)e=a[t],e.row>d||(u>=e.index?(o+=e.cs,u+=e.cs,e.rs-=1,e.row=d+1,e.rs<1&&(a.splice(t,1),t--)):g===m-1&&(e.rs-=1,e.row=d+1,e.rs<1&&(a.splice(t,1),t--)));if(s){if(i!==e&&i!==t||(c.cs=null!==c.cs&&c.cs<u?c.cs:u,c.ce=null!==c.ce&&c.ce>u+h?c.ce:u+h,c.rs=null!==c.rs&&c.rs<d?c.rs:d,c.re=null!==c.re&&c.re>d+p?c.re:d+p,c._i+=1),2===c._i){s=!1,a=[],r=[],d=-1;break}}else if(l.getOverlapRangeAtIndex(c.cs,c.ce,u,u+h)&&l.getOverlapRangeAtIndex(c.rs,c.re,d,d+p)){const e=c.cs<u?c.cs:u,t=c.ce>u+h?c.ce:u+h,n=c.rs<d?c.rs:d,o=c.re>d+p?c.re:d+p;if(c.cs!==e||c.ce!==t||c.rs!==n||c.re!==o){c.cs=e,c.ce=t,c.rs=n,c.re=o,d=-1,a=[],r=[];break}l.addClass(i,"se-table-selected-cell")}p>0&&r.push({index:u,cs:h+1,rs:p,row:-1}),o+=i.colSpan-1}a=a.concat(r).sort((function(e,t){return e.index-t.index})),r=[]}},_removeEvents:function(){const e=this.plugins.table;e._initBind&&(this._wd.removeEventListener("touchmove",e._initBind),e._initBind=null),e._bindOnSelect&&(this._wd.removeEventListener("mousedown",e._bindOnSelect),this._wd.removeEventListener("mousemove",e._bindOnSelect),e._bindOnSelect=null),e._bindOffSelect&&(this._wd.removeEventListener("mouseup",e._bindOffSelect),e._bindOffSelect=null),e._bindOffShift&&(this._wd.removeEventListener("keyup",e._bindOffShift),e._bindOffShift=null)},_initBind:null,onTableCellMultiSelect:function(e,t){const n=this.plugins.table;n._removeEvents.call(this),this.controllersOff(),n._shift=t,n._fixedCell=e,n._fixedCellName=e.nodeName,n._selectedTable=this.util.getParentElement(e,"TABLE");const i=n._selectedTable.querySelectorAll(".se-table-selected-cell");for(let e=0,t=i.length;e<t;e++)this.util.removeClass(i[e],"se-table-selected-cell");this.util.addClass(e,"se-table-selected-cell"),n._bindOnSelect=n._onCellMultiSelect.bind(this),n._bindOffSelect=n._offCellMultiSelect.bind(this),t?(n._bindOffShift=function(){this.controllersOn(this.context.table.resizeDiv,this.context.table.tableController,this.plugins.table.init.bind(this),e,"table"),n._ref||this.controllersOff()}.bind(this),this._wd.addEventListener("keyup",n._bindOffShift,!1),this._wd.addEventListener("mousedown",n._bindOnSelect,!1)):this._wd.addEventListener("mousemove",n._bindOnSelect,!1),this._wd.addEventListener("mouseup",n._bindOffSelect,!1),n._initBind=n.init.bind(this),this._wd.addEventListener("touchmove",n._initBind,!1)},onClick_tableController:function(e){e.stopPropagation();const t=e.target.getAttribute("data-command")?e.target:e.target.parentNode;if(t.getAttribute("disabled"))return;const n=t.getAttribute("data-command"),i=t.getAttribute("data-value"),l=t.getAttribute("data-option"),o=this.plugins.table;if("function"==typeof o._closeSplitMenu&&(o._closeSplitMenu(),"onsplit"===n))return;if(!n)return;e.preventDefault();const s=this.context.table;switch(n){case"insert":case"delete":o.editTable.call(this,i,l);break;case"header":o.toggleHeader.call(this);break;case"onsplit":o.openSplitMenu.call(this);break;case"split":o.splitCells.call(this,i);break;case"merge":o.mergeCells.call(this);break;case"resize":s._maxWidth=!s._maxWidth,o.setTableStyle.call(this,"width"),o.setPositionControllerTop.call(this,s._element),o.setPositionControllerDiv.call(this,s._tdElement,o._shift);break;case"layout":s._fixedColumn=!s._fixedColumn,o.setTableStyle.call(this,"column"),o.setPositionControllerTop.call(this,s._element),o.setPositionControllerDiv.call(this,s._tdElement,o._shift);break;case"remove":const e=s._element.parentNode;this.util.removeItem(s._element),this.controllersOff(),e!==this.context.element.wysiwyg&&this.util.removeItemAllParents(e,(function(e){return 0===e.childNodes.length}),null),this.focus()}this.history.push(!1)}},formatBlock:{name:"formatBlock",display:"submenu",add:function(e,t){const n=e.context;n.formatBlock={targetText:t.querySelector(".txt"),targetTooltip:t.parentNode.querySelector(".se-tooltip-text"),_formatList:null,currentFormat:""};let i=this.setSubmenu(e);i.querySelector("ul").addEventListener("click",this.pickUp.bind(e)),n.formatBlock._formatList=i.querySelectorAll("li button"),e.initMenuTarget(this.name,t,i),i=null},setSubmenu:function(e){const t=e.options,n=e.lang.toolbar,i=e.util.createElement("DIV");i.className="se-submenu se-list-layer se-list-format";const l=["p","div","blockquote","pre","h1","h2","h3","h4","h5","h6"],o=t.formats&&0!==t.formats.length?t.formats:l;let s='<div class="se-list-inner"><ul class="se-list-basic">';for(let e,t,i,a,r,c,d,u=0,h=o.length;u<h;u++)e=o[u],"string"==typeof e&&l.indexOf(e)>-1?(t=e.toLowerCase(),i="blockquote"===t?"range":"pre"===t?"free":"replace",r=/^h/.test(t)?t.match(/\d+/)[0]:"",a=n["tag_"+(r?"h":t)]+r,d="",c=""):(t=e.tag.toLowerCase(),i=e.command,a=e.name||t,d=e.class,c=d?' class="'+d+'"':""),s+='<li><button type="button" class="se-btn-list" data-command="'+i+'" data-value="'+t+'" data-class="'+d+'" title="'+a+'"><'+t+c+">"+a+"</"+t+"></button></li>";return s+="</ul></div>",i.innerHTML=s,i},active:function(e){let t=this.lang.toolbar.formats;const n=this.context.formatBlock.targetText;if(e){if(this.util.isFormatElement(e)){const i=this.context.formatBlock._formatList,l=e.nodeName.toLowerCase(),o=(e.className.match(/(\s|^)__se__format__[^\s]+/)||[""])[0].trim();for(let e,n=0,s=i.length;n<s;n++)if(e=i[n],l===e.getAttribute("data-value")&&o===e.getAttribute("data-class")){t=e.title;break}return this.util.changeTxt(n,t),n.setAttribute("data-value",l),n.setAttribute("data-class",o),!0}}else this.util.changeTxt(n,t);return!1},on:function(){const e=this.context.formatBlock,t=e._formatList,n=e.targetText,i=(n.getAttribute("data-value")||"")+(n.getAttribute("data-class")||"");if(i!==e.currentFormat){for(let e,n=0,l=t.length;n<l;n++)e=t[n],i===e.getAttribute("data-value")+e.getAttribute("data-class")?this.util.addClass(e,"active"):this.util.removeClass(e,"active");e.currentFormat=i}},pickUp:function(e){e.preventDefault(),e.stopPropagation();let t=e.target,n=null,i=null,l=null,o="";for(;!n&&!/UL/i.test(t.tagName);){if(n=t.getAttribute("data-command"),i=t.getAttribute("data-value"),o=t.getAttribute("data-class"),n){l=t.firstChild;break}t=t.parentNode}if(n){if("range"===n){const e=l.cloneNode(!1);this.applyRangeFormatElement(e)}else{let e=this.getRange(),t=this.getSelectedElementsAndComponents(!1);if(0===t.length&&(e=this.getRange_addLine(e,null),t=this.getSelectedElementsAndComponents(!1),0===t.length))return;const s=e.startOffset,a=e.endOffset,r=this.util;let c=t[0],d=t[t.length-1];const u=r.getNodePath(e.startContainer,c,null,null),h=r.getNodePath(e.endContainer,d,null,null),p=this.detachList(t,!1);p.sc&&(c=p.sc),p.ec&&(d=p.ec),this.setRange(r.getNodeFromPath(u,c),s,r.getNodeFromPath(h,d),a);const g=this.getSelectedElementsAndComponents(!1);if("free"===n){const e=g.length-1;let t=g[e].parentNode,n=l.cloneNode(!1);const i=n;for(let i,o,s,a,c,d,u=e,h=!0;u>=0;u--)if(i=g[u],i!==(g[u+1]?g[u+1].parentNode:null)){if(d=r.isComponent(i),o=d?"":i.innerHTML.replace(/(?!>)\s+(?=<)|\n/g," "),s=r.getParentElement(i,(function(e){return e.parentNode===t})),(t!==i.parentNode||d)&&(r.isFormatElement(t)?(t.parentNode.insertBefore(n,t.nextSibling),t=t.parentNode):(t.insertBefore(n,s?s.nextSibling:null),t=i.parentNode),a=n.nextSibling,a&&n.nodeName===a.nodeName&&r.isSameAttributes(n,a)&&(n.innerHTML+="<BR>"+a.innerHTML,r.removeItem(a)),n=l.cloneNode(!1),h=!0),c=n.innerHTML,n.innerHTML=(h||!o||!c||/<br>$/i.test(o)?o:o+"<BR>")+c,0===u){t.insertBefore(n,i),a=i.nextSibling,a&&n.nodeName===a.nodeName&&r.isSameAttributes(n,a)&&(n.innerHTML+="<BR>"+a.innerHTML,r.removeItem(a));const e=n.previousSibling;e&&n.nodeName===e.nodeName&&r.isSameAttributes(n,e)&&(e.innerHTML+="<BR>"+n.innerHTML,r.removeItem(n))}d||r.removeItem(i),o&&(h=!1)}this.setRange(i,0,i,0)}else{for(let e,t,n=0,s=g.length;n<s;n++)e=g[n],e.nodeName.toLowerCase()===i.toLowerCase()&&(e.className.match(/(\s|^)__se__format__[^\s]+/)||[""])[0].trim()===o||r.isComponent(e)||(t=l.cloneNode(!1),r.copyFormatAttributes(t,e),t.innerHTML=e.innerHTML,e.parentNode.replaceChild(t,e)),0===n&&(c=t||e),n===s-1&&(d=t||e),t=null;this.setRange(r.getNodeFromPath(u,c),s,r.getNodeFromPath(h,d),a)}this.history.push(!1)}this.submenuOff()}}},lineHeight:{name:"lineHeight",display:"submenu",add:function(e,t){const n=e.context;n.lineHeight={_sizeList:null,currentSize:-1};let i=this.setSubmenu(e),l=i.querySelector("ul");l.addEventListener("click",this.pickup.bind(e)),n.lineHeight._sizeList=l.querySelectorAll("li button"),e.initMenuTarget(this.name,t,i),i=null,l=null},setSubmenu:function(e){const t=e.options,n=e.lang,i=e.util.createElement("DIV");i.className="se-submenu se-list-layer";const l=t.lineHeights?t.lineHeights:[{text:"1",value:1},{text:"1.15",value:1.15},{text:"1.5",value:1.5},{text:"2",value:2}];let o='<div class="se-list-inner"><ul class="se-list-basic"><li><button type="button" class="default_value se-btn-list" title="'+n.toolbar.default+'">('+n.toolbar.default+")</button></li>";for(let e,t=0,n=l.length;t<n;t++)e=l[t],o+='<li><button type="button" class="se-btn-list" data-value="'+e.value+'" title="'+e.text+'">'+e.text+"</button></li>";return o+="</ul></div>",i.innerHTML=o,i},on:function(){const e=this.context.lineHeight,t=e._sizeList,n=this.util.getFormatElement(this.getSelectionNode()),i=n?n.style.lineHeight+"":"";if(i!==e.currentSize){for(let e=0,n=t.length;e<n;e++)i===t[e].getAttribute("data-value")?this.util.addClass(t[e],"active"):this.util.removeClass(t[e],"active");e.currentSize=i}},pickup:function(e){if(!/^BUTTON$/i.test(e.target.tagName))return!1;e.preventDefault(),e.stopPropagation();const t=e.target.getAttribute("data-value")||"",n=this.getSelectedElements();for(let e=0,i=n.length;e<i;e++)n[e].style.lineHeight=t;this.submenuOff(),this.history.push(!1)}},template:s,paragraphStyle:{name:"paragraphStyle",display:"submenu",add:function(e,t){const n=e.context;n.paragraphStyle={_classList:null};let i=this.setSubmenu(e);i.querySelector("ul").addEventListener("click",this.pickUp.bind(e)),n.paragraphStyle._classList=i.querySelectorAll("li button"),e.initMenuTarget(this.name,t,i),i=null},setSubmenu:function(e){const t=e.options,n=e.util.createElement("DIV");n.className="se-submenu se-list-layer se-list-format";const i=e.lang.menu,l={spaced:{name:i.spaced,class:"__se__p-spaced",_class:""},bordered:{name:i.bordered,class:"__se__p-bordered",_class:""},neon:{name:i.neon,class:"__se__p-neon",_class:""}},o=t.paragraphStyles&&0!==t.paragraphStyles.length?t.paragraphStyles:["spaced","bordered","neon"];let s='<div class="se-list-inner"><ul class="se-list-basic">';for(let e,t,n,i,a=0,r=o.length;a<r;a++){if(e=o[a],"string"==typeof e){const t=l[e.toLowerCase()];if(!t)continue;e=t}t=e.name,n=e.class?' class="'+e.class+'"':"",i=e._class,s+='<li><button type="button" class="se-btn-list'+(i?" "+i:"")+'" data-value="'+e.class+'" title="'+t+'"><div'+n+">"+t+"</div></button></li>"}return s+="</ul></div>",n.innerHTML=s,n},on:function(){const e=this.context.paragraphStyle._classList,t=this.util.getFormatElement(this.getSelectionNode());for(let n=0,i=e.length;n<i;n++)this.util.hasClass(t,e[n].getAttribute("data-value"))?this.util.addClass(e[n],"active"):this.util.removeClass(e[n],"active")},pickUp:function(e){e.preventDefault(),e.stopPropagation();let t=e.target,n=null;for(;!/^UL$/i.test(t.tagName)&&(n=t.getAttribute("data-value"),!n);)t=t.parentNode;if(!n)return;let i=this.getSelectedElements();if(0===i.length&&(this.getRange_addLine(this.getRange(),null),i=this.getSelectedElements(),0===i.length))return;const l=this.util.hasClass(t,"active")?this.util.removeClass.bind(this.util):this.util.addClass.bind(this.util);for(let e=0,t=i.length;e<t;e++)l(i[e],n);this.submenuOff(),this.history.push(!1)}},textStyle:{name:"textStyle",display:"submenu",add:function(e,t){const n=e.context;n.textStyle={_styleList:null};let i=this.setSubmenu(e),l=i.querySelector("ul");l.addEventListener("click",this.pickup.bind(e)),n.textStyle._styleList=i.querySelectorAll("li button"),e.initMenuTarget(this.name,t,i),i=null,l=null},setSubmenu:function(e){const t=e.options,n=e.util.createElement("DIV");n.className="se-submenu se-list-layer se-list-format";const i={code:{name:e.lang.menu.code,class:"__se__t-code",tag:"code"},translucent:{name:e.lang.menu.translucent,style:"opacity: 0.5;",tag:"span"},shadow:{name:e.lang.menu.shadow,class:"__se__t-shadow",tag:"span"}},l=t.textStyles?t.textStyles:e._w.Object.keys(i);let o='<div class="se-list-inner"><ul class="se-list-basic">';for(let e,t,n,s,a,r,c,d=0,u=l.length;d<u;d++){if(e=l[d],s="",r="",a=[],"string"==typeof e){const t=i[e.toLowerCase()];if(!t)continue;e=t}n=e.name,t=e.tag||"span",c=e._class,e.style&&(s+=' style="'+e.style+'"',r+=e.style.replace(/:[^;]+(;|$)\s*/g,","),a.push("style")),e.class&&(s+=' class="'+e.class+'"',r+="."+e.class.trim().replace(/\s+/g,",."),a.push("class")),r=r.replace(/,$/,""),o+='<li><button type="button" class="se-btn-list'+(c?" "+c:"")+'" data-command="'+t+'" data-value="'+r+'" title="'+n+'"><'+t+s+">"+n+"</"+t+"></button></li>"}return o+="</ul></div>",n.innerHTML=o,n},on:function(){const e=this.util,t=this.context.textStyle._styleList,n=this.getSelectionNode();for(let i,l,o,s=0,a=t.length;s<a;s++){i=t[s],l=i.getAttribute("data-value").split(",");for(let t,s,a=0;a<l.length;a++){for(t=n,o=!1;t&&!e.isFormatElement(t)&&!e.isComponent(t);){if(t.nodeName.toLowerCase()===i.getAttribute("data-command").toLowerCase()&&(s=l[a],/^\./.test(s)?e.hasClass(t,s.replace(/^\./,"")):t.style[s])){o=!0;break}t=t.parentNode}if(!o)break}o?e.addClass(i,"active"):e.removeClass(i,"active")}},pickup:function(e){e.preventDefault(),e.stopPropagation();let t=e.target,n=null,i=null;for(;!n&&!/UL/i.test(t.tagName);){if(n=t.getAttribute("data-command"),n){i=t.firstChild;break}t=t.parentNode}if(!n)return;const l=i.style.cssText.replace(/:.+(;|$)/g,",").split(",");l.pop();const o=i.classList;for(let e=0,t=o.length;e<t;e++)l.push("."+o[e]);const s=this.util.hasClass(t,"active")?null:i.cloneNode(!1),a=s?null:[i.nodeName];this.nodeChange(s,l,a,!0),this.submenuOff()}},link:u,image:b,video:v,audio:y,math:C,imageGallery:{name:"imageGallery",add:function(e){e.addModule([x.a]);e.context.imageGallery={title:e.lang.toolbar.imageGallery,url:e.options.imageGalleryUrl,header:e.options.imageGalleryHeader,listClass:"se-image-list",itemTemplateHandler:this.drawItems,selectorHandler:this.setImage.bind(e),columnSize:4}},open:function(e){this.plugins.fileBrowser.open.call(this,"imageGallery",e)},drawItems:function(e){const t=e.src.split("/").pop();return'<div class="se-file-item-img"><img src="'+e.src+'" alt="'+(e.alt||t)+'" data-command="pick"><div class="se-file-img-name se-file-name-back"></div><div class="se-file-img-name __se__img_name">'+(e.name||t)+"</div></div>"},setImage:function(e){this.callPlugin("image",function(){const t={name:e.parentNode.querySelector(".__se__img_name").textContent,size:0};this.context.image._altText=e.alt,this.plugins.image.create_image.call(this,e.src,null,this.context.image._origin_w,this.context.image._origin_h,"none",t)}.bind(this),null)}}},S={rtl:{italic:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10.5 15.8" xml:space="preserve"><g><path d="M0.3,0.1c0.3,0,0.5,0,0.7,0c1,0.1,1.7,0.1,2.2,0.1H4L7.2,0l0.2,1.1H7c-0.5,0-1,0.1-1.5,0.3v0.4l0.3,1.9L6,4.4L6.3,6 l0.1,0.4l0.1,0.5c0.1,0.2,0.1,0.4,0.2,0.7s0.1,0.6,0.2,0.9L7,9.1l0.6,2.8l0.3,1.4c0.1,0.4,0.2,0.7,0.4,1c0.4,0.2,0.8,0.3,1.2,0.4 l0.8,0.2l0.2,0.9l-1.1,0c-0.9-0.1-1.5-0.1-1.8-0.1h-2c-0.9,0.1-1.4,0.2-1.5,0.2c-0.1,0-0.2,0-0.3,0H3.4c-0.1,0-0.2,0-0.2,0 l-0.1-0.4c0-0.2-0.1-0.4-0.1-0.6l0.7-0.1c0.4,0,0.8-0.1,1.2-0.2c0-0.1,0-0.2,0-0.3l-0.1-0.5l-0.4-2.4L4,9.6L3.4,6.4 C3.2,5.7,3,4.7,2.7,3.3c0-0.3-0.1-0.5-0.1-0.8C2.5,2.1,2.4,1.9,2.3,1.6C2,1.4,1.6,1.3,1.3,1.2C0.9,1.2,0.5,1.1,0.2,0.9L0,0.4L0,0 L0.3,0.1L0.3,0.1z"/></g></svg>',indent:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.7 12.4" xml:space="preserve"><g><g><path d="M15.5,10.1L15.5,10.1c0.1,0,0.3,0.1,0.3,0.3v1.7c0,0.1,0,0.1-0.1,0.2c-0.1,0.1-0.1,0.1-0.2,0.1l-15.2,0 c-0.1,0-0.1,0-0.2-0.1C0,12.2,0,12.2,0,12.1l0-1.7c0-0.1,0-0.1,0.1-0.2c0.1-0.1,0.1-0.1,0.2-0.1C0.3,10.1,15.5,10.1,15.5,10.1z M9.8,6.7c0.1,0,0.1,0,0.2,0.1C10.1,6.9,10.1,7,10.1,7v1.7c0,0.1,0,0.2-0.1,0.2C10,9,9.9,9,9.8,9L0.3,9C0.2,9,0.1,9,0.1,8.9 C0,8.9,0,8.8,0,8.7V7C0,7,0,6.9,0.1,6.8c0.1-0.1,0.1-0.1,0.2-0.1C0.3,6.7,9.8,6.7,9.8,6.7z M0.3,3.4h9.6h0c0.1,0,0.3,0.1,0.3,0.3 v1.7v0c0,0.1-0.1,0.3-0.3,0.3H0.3c-0.1,0-0.1,0-0.2-0.1C0,5.5,0,5.4,0,5.3V3.6c0-0.1,0-0.1,0.1-0.2C0.1,3.4,0.2,3.4,0.3,3.4 L0.3,3.4z M0.3,0l15.2,0c0.1,0,0.1,0,0.2,0.1c0.1,0.1,0.1,0.1,0.1,0.2V2c0,0.1,0,0.2-0.1,0.2c-0.1,0.1-0.1,0.1-0.2,0.1H0.3 c-0.1,0-0.1,0-0.2-0.1C0,2.1,0,2,0,2l0-1.7c0-0.1,0-0.1,0.1-0.2C0.1,0,0.2,0,0.3,0z"/></g><path d="M13.1,3.5L15.7,6c0.1,0.1,0.1,0.3,0,0.4l-2.5,2.5C13.1,9,13,9,12.9,9c-0.1,0-0.1,0-0.2-0.1c-0.1-0.1-0.1-0.1-0.1-0.2V3.7 c0-0.1,0-0.2,0.1-0.2c0.1-0.1,0.1-0.1,0.2-0.1C13,3.4,13.1,3.4,13.1,3.5z"/></g></svg>',outdent:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.7 12.4" xml:space="preserve"><g><g><path d="M15.5,10.1L15.5,10.1c0.1,0,0.3,0.1,0.3,0.3v1.7c0,0.1,0,0.1-0.1,0.2c-0.1,0.1-0.1,0.1-0.2,0.1l-15.2,0 c-0.1,0-0.1,0-0.2-0.1C0,12.2,0,12.2,0,12.1l0-1.7c0-0.1,0-0.1,0.1-0.2c0.1-0.1,0.1-0.1,0.2-0.1C0.3,10.1,15.5,10.1,15.5,10.1z M9.8,6.7c0.1,0,0.1,0,0.2,0.1C10.1,6.9,10.1,7,10.1,7v1.7c0,0.1,0,0.2-0.1,0.2C10,9,9.9,9,9.8,9L0.3,9C0.2,9,0.1,9,0.1,8.9 C0,8.9,0,8.8,0,8.7V7C0,7,0,6.9,0.1,6.8c0.1-0.1,0.1-0.1,0.2-0.1C0.3,6.7,9.8,6.7,9.8,6.7z M0.3,3.4h9.6h0c0.1,0,0.3,0.1,0.3,0.3 v1.7v0c0,0.1-0.1,0.3-0.3,0.3H0.3c-0.1,0-0.1,0-0.2-0.1C0,5.5,0,5.4,0,5.3V3.6c0-0.1,0-0.1,0.1-0.2C0.1,3.4,0.2,3.4,0.3,3.4 L0.3,3.4z M0.3,0l15.2,0c0.1,0,0.1,0,0.2,0.1c0.1,0.1,0.1,0.1,0.1,0.2V2c0,0.1,0,0.2-0.1,0.2c-0.1,0.1-0.1,0.1-0.2,0.1H0.3 c-0.1,0-0.1,0-0.2-0.1C0,2.1,0,2,0,2l0-1.7c0-0.1,0-0.1,0.1-0.2C0.1,0,0.2,0,0.3,0z"/></g><path d="M15.5,3.4c0.1,0,0.1,0,0.2,0.1c0.1,0.1,0.1,0.1,0.1,0.2v5.1c0,0.1,0,0.1-0.1,0.2C15.6,9,15.5,9,15.5,9 c-0.1,0-0.1,0-0.2-0.1l-2.5-2.5c-0.1-0.1-0.1-0.3,0-0.4l2.5-2.5C15.3,3.4,15.4,3.4,15.5,3.4z"/></g></svg>',list_bullets:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.7 12.4" xml:space="preserve"><g><path d="M12.4,10.7c0,0.9,0.8,1.7,1.7,1.7c0.9,0,1.7-0.8,1.7-1.7C15.7,9.8,15,9,14.1,9c-0.4,0-0.9,0.2-1.2,0.5 C12.5,9.8,12.4,10.2,12.4,10.7C12.4,10.7,12.4,10.7,12.4,10.7z M12.4,6.2c0,0.9,0.8,1.7,1.7,1.7c0.4,0,0.9-0.2,1.2-0.5 c0.3-0.3,0.4-0.7,0.4-1.1c0-0.9-0.7-1.7-1.6-1.7C13.1,4.6,12.4,5.3,12.4,6.2C12.4,6.2,12.4,6.2,12.4,6.2z M0,9.8v1.7 c0,0.1,0,0.1,0.1,0.2c0.1,0.1,0.1,0.1,0.2,0.1l10.7,0c0,0,0,0,0,0c0.1,0,0.3-0.1,0.3-0.3V9.8c0-0.1,0-0.1-0.1-0.2 C11.1,9.6,11,9.6,11,9.6l-10.7,0c-0.1,0-0.1,0-0.2,0.1C0,9.7,0,9.8,0,9.8L0,9.8z M12.9,2.9c0.3,0.3,0.7,0.5,1.2,0.5 c0.4,0,0.9-0.2,1.2-0.5c0.7-0.7,0.7-1.7,0-2.4C14.9,0.2,14.5,0,14.1,0c-0.4,0-0.9,0.2-1.2,0.5c-0.3,0.3-0.5,0.7-0.5,1.2 C12.4,2.1,12.5,2.6,12.9,2.9z M0,5.3V7c0,0.1,0,0.1,0.1,0.2c0.1,0.1,0.1,0.1,0.2,0.1H11c0.1,0,0.1,0,0.2-0.1 c0.1-0.1,0.1-0.1,0.1-0.2V5.3c0,0,0,0,0,0c0-0.1-0.1-0.3-0.3-0.3H0.3c-0.1,0-0.1,0-0.2,0.1C0,5.2,0,5.3,0,5.3L0,5.3z M0,0.8v1.7 c0,0.1,0,0.1,0.1,0.2c0.1,0.1,0.1,0.1,0.2,0.1h10.7c0.1,0,0.1,0,0.2-0.1c0,0,0.1-0.1,0.1-0.2V0.8c0-0.1,0-0.1-0.1-0.2 c0-0.1-0.1-0.1-0.2-0.1H0.3c-0.1,0-0.1,0-0.2,0.1C0,0.7,0,0.8,0,0.8L0,0.8z"/></g></svg>',list_number:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.7 15.7" xml:space="preserve"><g><path d="M0,11.5l0,1.7c0,0.1,0,0.1,0.1,0.2c0.1,0.1,0.1,0.1,0.2,0.1H11c0.1,0,0.2,0,0.2-0.1c0.1-0.1,0.1-0.1,0.1-0.2v-1.7 c0-0.1,0-0.1-0.1-0.2c-0.1-0.1-0.1-0.1-0.2-0.1H0.3c-0.1,0-0.2,0-0.2,0.1C0,11.4,0,11.4,0,11.5L0,11.5z M0,8.7c0,0.1,0,0.1,0.1,0.2 C0.1,8.9,0.2,9,0.3,9H11c0.1,0,0.2,0,0.2-0.1c0.1-0.1,0.1-0.1,0.1-0.2V7c0-0.1,0-0.1-0.1-0.2c-0.1-0.1-0.1-0.1-0.2-0.1l-10.7,0 c-0.1,0-0.2,0-0.2,0.1C0,6.8,0,6.9,0,7C0,7,0,8.7,0,8.7z M0,2.5v1.7c0,0.1,0,0.1,0.1,0.2c0,0,0.1,0.1,0.2,0.1l10.7,0 c0.1,0,0.2,0,0.2-0.1c0.1-0.1,0.1-0.1,0.1-0.2V2.4c0-0.1,0-0.1-0.1-0.2c-0.1,0-0.1,0-0.2,0H0.3c-0.1,0-0.1,0-0.2,0 C0,2.3,0,2.4,0,2.5L0,2.5z"/></g><path d="M15.6,14.2c0-0.3-0.1-0.6-0.3-0.8c-0.2-0.2-0.4-0.4-0.7-0.4l0.9-1v-0.8h-2.9v1.3h0.9v-0.5h0.9l0,0c-0.1,0.1-0.2,0.2-0.3,0.3 s-0.2,0.3-0.4,0.5l-0.3,0.3l0.2,0.5c0.6,0,0.9,0.1,0.9,0.5c0,0.1-0.1,0.3-0.2,0.4c-0.1,0.1-0.3,0.1-0.4,0.1c-0.3,0-0.7-0.1-0.9-0.3 l-0.5,0.8c0.4,0.4,0.9,0.6,1.5,0.6c0.4,0,0.9-0.1,1.2-0.4C15.5,15.1,15.6,14.7,15.6,14.2z"/><path d="M15.6,8.7h-0.9v0.5h-1.1c0-0.2,0.2-0.4,0.4-0.5c0.2-0.2,0.4-0.3,0.7-0.4c0.3-0.2,0.5-0.3,0.7-0.6c0.2-0.2,0.3-0.5,0.3-0.8 c0-0.4-0.2-0.8-0.5-1c-0.6-0.4-1.4-0.5-2-0.1c-0.3,0.2-0.5,0.4-0.6,0.7L13.3,7c0.1-0.3,0.4-0.5,0.7-0.5c0.1,0,0.3,0,0.3,0.1 c0.1,0.1,0.1,0.2,0.1,0.3c0,0.2-0.1,0.3-0.2,0.4c-0.2,0.1-0.3,0.3-0.5,0.4c-0.2,0.1-0.4,0.3-0.6,0.4c-0.2,0.2-0.4,0.4-0.5,0.6 c-0.1,0.2-0.2,0.5-0.2,0.8c0,0.2,0,0.3,0,0.5h3.2L15.6,8.7L15.6,8.7z"/><path d="M15.6,3.6h-1V0h-0.9l-1.2,1.1l0.6,0.7c0.2-0.1,0.3-0.3,0.4-0.5l0,0v2.2h-0.9v0.9h3L15.6,3.6L15.6,3.6z"/></svg>',link:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.7 15.7" xml:space="preserve"><g><path d="M7.4,9.9l3.1,3.1c0.3,0.3,0.8,0.5,1.3,0.5c0.5,0,0.9-0.2,1.3-0.5c0,0,0,0,0,0c0.7-0.7,0.7-1.9,0-2.6L9.9,7.3 c0-0.1,0-0.2,0-0.3C9.9,7,10,7,10.1,7l2.2-0.2c0.1,0,0.1,0,0.2,0.1l2.1,2.1c0.4,0.4,0.7,0.8,0.9,1.3c0.2,0.5,0.3,1,0.3,1.5 c0,0.5-0.1,1-0.3,1.5c-0.8,2-3.2,3-5.2,2.2c-0.5-0.2-0.9-0.5-1.3-0.9l-2.1-2.1c-0.1,0-0.1-0.1-0.1-0.2L7,10.1C7,10,7,9.9,7.1,9.9 C7.2,9.8,7.3,9.9,7.4,9.9z M1.2,1.1C1.6,0.7,2,0.4,2.5,0.3c1-0.4,2.1-0.4,3.1,0C6,0.4,6.5,0.7,6.8,1.1L9,3.2C9,3.3,9.1,3.3,9,3.4 L8.8,5.6c0,0.1-0.1,0.2-0.2,0.2c-0.1,0.1-0.2,0.1-0.3,0L5.3,2.7C5,2.3,4.5,2.1,4,2.1c-0.5,0-0.9,0.2-1.3,0.5c0,0,0,0,0,0 C2,3.4,2,4.5,2.7,5.2l3.1,3.2c0.1,0.1,0.1,0.2,0,0.3c0,0.1-0.1,0.1-0.2,0.1L3.5,9C3.4,9,3.4,9,3.3,8.9L1.2,6.8c0,0,0,0,0,0 C-0.4,5.2-0.4,2.7,1.2,1.1L1.2,1.1z M14.3,6h-2.6c0,0,0,0,0,0c-0.1,0-0.2-0.1-0.2-0.2c0-0.1,0-0.2,0.1-0.3l2.5-0.7 c0.1,0,0.1,0,0.2,0c0.1,0,0.1,0.1,0.1,0.2l0.1,0.8c0,0.1,0,0.1-0.1,0.2C14.5,6,14.4,6,14.3,6L14.3,6z M10.2,4.1 c0,0.1-0.1,0.2-0.2,0.2l0,0c0,0,0,0,0,0C9.8,4.2,9.7,4.1,9.8,4L9.7,1.4c0-0.1,0-0.1,0.1-0.2c0.1,0,0.1,0,0.2,0h0.8 c0.1,0,0.1,0,0.2,0.1c0,0.1,0,0.1,0,0.2L10.2,4.1L10.2,4.1z M1.5,9.7h1.3h1.3c0.1,0,0.2,0.1,0.2,0.2c0,0.1,0,0.2-0.1,0.3l-2.5,0.6 H1.6c0,0-0.1,0-0.1,0c-0.1,0-0.1-0.1-0.1-0.2L1.2,9.9c0-0.1,0-0.1,0.1-0.2c0-0.1,0.1-0.1,0.2-0.1L1.5,9.7z M5.6,11.6 C5.6,11.6,5.6,11.6,5.6,11.6c0-0.1,0.1-0.2,0.3-0.1c0,0,0,0,0,0c0.1,0,0.2,0.1,0.2,0.2v2.6c0,0.1,0,0.1-0.1,0.2 c0,0-0.1,0.1-0.2,0.1L5,14.5c-0.1,0-0.1,0-0.2-0.1c0-0.1,0-0.1,0-0.2L5.6,11.6L5.6,11.6z"/></g></svg>',unlink:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.7 15.7" xml:space="preserve"><g><path d="M14.6,14.6c1.6-1.6,1.6-4.1,0-5.7l0,0l-3.1-3.1l-1.2,1.6l2.9,2.9c0.4,0.4,0.6,0.9,0.6,1.5c0,1.1-0.9,2.1-2.1,2.1l0,0 c-0.6,0-1.1-0.2-1.5-0.6l-0.4-0.4l-1.7,1l0.8,0.8C10.4,16.2,13,16.2,14.6,14.6L14.6,14.6L14.6,14.6z M3.6,6C3,5.9,2.6,5.5,2.3,5 S1.9,4,2.1,3.4C2.3,2.9,2.6,2.5,3,2.2C3.5,2,4.1,1.9,4.6,2l3.3,1.4l0.5-2L5.1,0.1C4-0.1,2.9,0,2,0.5C1.1,1.1,0.4,1.9,0.2,3 C-0.1,4,0,5.1,0.6,6C1.1,6.9,1.9,7.6,3,7.8l5.4,2l0.5-2L6.2,6.9L3.6,6z"/></g></svg>'},redo:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.59 14.18"><g><path d="M11.58,18.48a6.84,6.84,0,1,1,6.85-6.85s0,.26,0,.67a8,8,0,0,1-.22,1.44l.91-.55a.51.51,0,0,1,.36,0,.45.45,0,0,1,.29.22.47.47,0,0,1,.06.36.45.45,0,0,1-.22.29L17.42,15.3l-.12,0h-.25l-.12-.06-.09-.09-.06-.07,0-.06-.87-2.12a.43.43,0,0,1,0-.37.49.49,0,0,1,.27-.26.41.41,0,0,1,.36,0,.53.53,0,0,1,.27.26l.44,1.09a6.51,6.51,0,0,0,.24-1.36,4.58,4.58,0,0,0,0-.64,5.83,5.83,0,0,0-1.73-4.17,5.88,5.88,0,0,0-8.34,0,5.9,5.9,0,0,0,4.17,10.06.51.51,0,0,1,.33.15.48.48,0,0,1,0,.68.53.53,0,0,1-.33.12Z" transform="translate(-4.48 -4.54)"/></g></svg>',undo:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.59 14.18"><g><path d="M5,14a.43.43,0,0,1-.22-.29.46.46,0,0,1,.06-.36.43.43,0,0,1,.29-.22.56.56,0,0,1,.36,0l.91.55a8.27,8.27,0,0,1-.22-1.45,5.07,5.07,0,0,1,0-.67A6.85,6.85,0,1,1,13,18.47a.44.44,0,0,1-.33-.13.48.48,0,0,1,0-.68.51.51,0,0,1,.33-.15A5.89,5.89,0,0,0,17.15,7.45a5.88,5.88,0,0,0-8.33,0,5.84,5.84,0,0,0-1.73,4.17s0,.25,0,.65a6.49,6.49,0,0,0,.24,1.37l.44-1.09a.57.57,0,0,1,.27-.26.41.41,0,0,1,.36,0,.53.53,0,0,1,.27.26.43.43,0,0,1,0,.37L7.82,15l0,.09-.09.09-.1.07-.06,0H7.28l-.13,0-1.09-.63c-.65-.36-1-.57-1.1-.63Z" transform="translate(-4.49 -4.53)"/></g></svg>',bold:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 11.76 15.75"><g><path d="M6.4,3.76V19.5h6.76a5.55,5.55,0,0,0,2-.32,4.93,4.93,0,0,0,1.52-1,4.27,4.27,0,0,0,1.48-3.34,3.87,3.87,0,0,0-.69-2.37,5.74,5.74,0,0,0-.71-.83,3.44,3.44,0,0,0-1.1-.65,3.6,3.6,0,0,0,1.58-1.36,3.66,3.66,0,0,0,.53-1.93,3.7,3.7,0,0,0-1.21-2.87,4.65,4.65,0,0,0-3.25-1.1H6.4Zm2.46,6.65V5.57h3.52a4.91,4.91,0,0,1,1.36.15,2.3,2.3,0,0,1,.85.45,2.06,2.06,0,0,1,.74,1.71,2.3,2.3,0,0,1-.78,1.92,2.54,2.54,0,0,1-.86.46,4.7,4.7,0,0,1-1.32.15H8.86Zm0,7.27V12.15H12.7a4.56,4.56,0,0,1,1.38.17,3.43,3.43,0,0,1,.95.49,2.29,2.29,0,0,1,.92,2,2.73,2.73,0,0,1-.83,2.1,2.66,2.66,0,0,1-.83.58,3.25,3.25,0,0,1-1.26.2H8.86Z" transform="translate(-6.4 -3.75)"/></g></svg>',underline:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 9.78 15.74"><g><path d="M14.64,3.76h2.52v7.72a4.51,4.51,0,0,1-.59,2.31,3.76,3.76,0,0,1-1.71,1.53,6.12,6.12,0,0,1-2.64.53,5,5,0,0,1-3.57-1.18,4.17,4.17,0,0,1-1.27-3.24V3.76H9.9v7.3a3,3,0,0,0,.55,2,2.3,2.3,0,0,0,1.83.65,2.26,2.26,0,0,0,1.8-.65,3.09,3.09,0,0,0,.55-2V3.76Zm2.52,13.31V19.5H7.39V17.08h9.77Z" transform="translate(-7.38 -3.76)"/></g></svg>',italic:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10.49 15.76"><g><path d="M17.16,3.79l.37,0-.06.38-.14.52A10,10,0,0,1,16.21,5a9.37,9.37,0,0,0-1,.32,6.68,6.68,0,0,0-.25.89c-.06.31-.11.59-.14.85-.3,1.36-.52,2.41-.68,3.14l-.61,3.18L13.1,15l-.43,2.4-.12.46a.62.62,0,0,0,0,.28c.44.1.85.17,1.23.22l.68.11a4.51,4.51,0,0,1-.08.6l-.09.42a.92.92,0,0,0-.23,0l-.43,0a1.37,1.37,0,0,1-.29,0c-.13,0-.63-.08-1.49-.16l-2,0c-.28,0-.87,0-1.78.12L7,19.5l.17-.88.8-.2A6.61,6.61,0,0,0,9.19,18,2.62,2.62,0,0,0,9.61,17l.28-1.41.58-2.75.12-.66c.05-.3.11-.58.17-.86s.12-.51.17-.69l.12-.48.12-.43.31-1.6.15-.65.31-1.91V5.14a3.86,3.86,0,0,0-1.48-.29l-.38,0,.2-1.06,3.24.14.75,0c.45,0,1.18,0,2.18-.09.23,0,.46,0,.71,0Z" transform="translate(-7.04 -3.76)"/></g></svg>',strike:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 14.9"><g><path d="M12.94,13a4.27,4.27,0,0,1,1.32.58,1.46,1.46,0,0,1,.55,1.2,1.87,1.87,0,0,1-.88,1.64,4.17,4.17,0,0,1-2.35.59,4.44,4.44,0,0,1-2.74-.71,2.72,2.72,0,0,1-1-2.17H5.57a4.56,4.56,0,0,0,1.55,3.7,7,7,0,0,0,4.47,1.23,6,6,0,0,0,4.07-1.3,4.24,4.24,0,0,0,1.52-3.37,4,4,0,0,0-.26-1.4h-4ZM6.37,10.24A3.27,3.27,0,0,1,6,8.68a4,4,0,0,1,1.48-3.3,5.92,5.92,0,0,1,3.88-1.21,5.58,5.58,0,0,1,3.91,1.24,4.36,4.36,0,0,1,1.45,3.17H14.44a2.12,2.12,0,0,0-.91-1.81,4.45,4.45,0,0,0-2.44-.55,3.69,3.69,0,0,0-2,.51A1.64,1.64,0,0,0,8.3,8.22a1.3,1.3,0,0,0,.48,1.11,7,7,0,0,0,2.1.78l.28.06.28.08H6.37Zm13.09.68a.73.73,0,0,1,.49.21.66.66,0,0,1,.2.48.64.64,0,0,1-.2.48.71.71,0,0,1-.49.19H5.1a.67.67,0,0,1-.49-.19.66.66,0,0,1-.2-.48.64.64,0,0,1,.2-.48.73.73,0,0,1,.49-.21H19.46Z" transform="translate(-4.41 -4.17)"/></g></svg>',subscript:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.75 14.61"><g><path d="M15.38,4.33H12.74L11.19,7c-.28.46-.51.87-.69,1.21L10.07,9h0l-.44-.8c-.22-.4-.45-.81-.71-1.23L7.34,4.33H4.68L8.26,10,4.4,16.08H7.1l1.69-2.83c.38-.63.72-1.22,1-1.78l.25-.46h0l.49.92c.24.45.48.89.74,1.32L13,16.08h2.61L11.84,10l1.77-2.84,1.77-2.85Zm4.77,13.75H17v-.15c0-.4.05-.64.16-.72a4.42,4.42,0,0,1,1.16-.31,3.3,3.3,0,0,0,1.54-.56A1.84,1.84,0,0,0,20.15,15a1.78,1.78,0,0,0-.44-1.41A2.8,2.8,0,0,0,18,13.25a2.71,2.71,0,0,0-1.69.37,1.83,1.83,0,0,0-.44,1.43v.23H17v-.23q0-.63.18-.78a1.62,1.62,0,0,1,.88-.15,1.59,1.59,0,0,1,.88.15q.18.15.18.75t-.18.75a3.58,3.58,0,0,1-1.18.33,3.33,3.33,0,0,0-1.52.51,1.57,1.57,0,0,0-.32,1.18v1.15h4.27v-.86Z" transform="translate(-4.4 -4.33)"/></g></svg>',superscript:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.75 15.42"><g><path d="M12,13.14l3.61-5.81H12.94L11.33,10c-.28.46-.51.88-.69,1.25l-.45.83h0l-.45-.85c-.22-.41-.45-.82-.71-1.24L7.4,7.33H4.68l3.66,5.81L4.4,19.33H7.14l1.74-2.87q.58-1,1-1.83l.25-.48h0l.51.94.75,1.37,1.72,2.87h2.67l-1.92-3.09c-1.12-1.8-1.76-2.83-1.92-3.1Zm4.84-4.41h0l0,.15h3.27v.86H15.77V8.58a1.66,1.66,0,0,1,.33-1.22,3.51,3.51,0,0,1,1.56-.51,3.68,3.68,0,0,0,1.21-.34c.13-.1.19-.36.19-.77S19,5.07,18.87,5A1.63,1.63,0,0,0,18,4.8a1.58,1.58,0,0,0-.91.17c-.13.11-.19.38-.19.8V6H15.78V5.76a1.87,1.87,0,0,1,.45-1.47A2.84,2.84,0,0,1,18,3.91a2.8,2.8,0,0,1,1.72.38,1.84,1.84,0,0,1,.45,1.44,1.91,1.91,0,0,1-.34,1.35,3.24,3.24,0,0,1-1.58.57A3.69,3.69,0,0,0,17,8c-.12.1-.17.35-.17.76Z" transform="translate(-4.4 -3.91)"/></g></svg>',erase:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 13.76"><g><path d="M13.69,17.2h6.46v1.31H8.56L4.41,14.37,14,4.75l6.06,6.06L16.89,14l-3.2,3.19Zm-4.61,0h2.77L14.09,15,9.88,10.75,6.25,14.38l1.41,1.41c.84.82,1.31,1.29,1.42,1.41Z" transform="translate(-4.41 -4.75)"/></g></svg>',indent:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 12.36"><g><path d="M19.87,15.57a.27.27,0,0,1,.19.08.25.25,0,0,1,.08.19v1.69a.27.27,0,0,1-.08.19.25.25,0,0,1-.19.08H4.68a.27.27,0,0,1-.19-.08.25.25,0,0,1-.08-.19V15.84a.27.27,0,0,1,.27-.27H19.87ZM7.5,14.45a.25.25,0,0,1-.2-.09L4.76,11.84a.29.29,0,0,1,0-.4L7.3,8.9a.29.29,0,0,1,.4,0,.31.31,0,0,1,.07.2v5.06a.32.32,0,0,1-.08.21.26.26,0,0,1-.19.08ZM19.87,8.82a.27.27,0,0,1,.19.08.25.25,0,0,1,.08.19v1.69a.27.27,0,0,1-.08.19.25.25,0,0,1-.19.08H10.31a.27.27,0,0,1-.27-.27V9.1a.27.27,0,0,1,.27-.27h9.56Zm0,3.37a.27.27,0,0,1,.19.08.28.28,0,0,1,.08.21v1.68a.32.32,0,0,1-.08.21.25.25,0,0,1-.19.08H10.31a.27.27,0,0,1-.19-.08.3.3,0,0,1-.08-.21V12.48a.32.32,0,0,1,.08-.21.24.24,0,0,1,.19-.08h9.56Zm.2-6.66a.28.28,0,0,1,.08.2V7.41a.32.32,0,0,1-.08.21.25.25,0,0,1-.19.08H4.68a.27.27,0,0,1-.19-.08.3.3,0,0,1-.08-.21V5.73a.32.32,0,0,1,.08-.21.25.25,0,0,1,.19-.08H19.87a.28.28,0,0,1,.2.09Z" transform="translate(-4.41 -5.44)"/></g></svg>',outdent:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 12.36"><g><path d="M4.68,14.45a.27.27,0,0,1-.19-.08.3.3,0,0,1-.08-.21V9.1a.27.27,0,0,1,.08-.19.28.28,0,0,1,.2-.08.25.25,0,0,1,.19.07l2.54,2.54a.29.29,0,0,1,0,.4L4.88,14.36a.24.24,0,0,1-.2.09Zm15.19,1.12a.27.27,0,0,1,.19.08.25.25,0,0,1,.08.19v1.69a.27.27,0,0,1-.08.19.25.25,0,0,1-.19.08H4.68a.27.27,0,0,1-.19-.08.25.25,0,0,1-.08-.19V15.84a.27.27,0,0,1,.27-.27H19.87Zm0-3.38a.27.27,0,0,1,.19.08.28.28,0,0,1,.08.21v1.68a.32.32,0,0,1-.08.21.25.25,0,0,1-.19.08H10.31a.27.27,0,0,1-.19-.08.3.3,0,0,1-.08-.21V12.48a.32.32,0,0,1,.08-.21.24.24,0,0,1,.19-.08h9.56Zm0-3.37a.27.27,0,0,1,.19.08.25.25,0,0,1,.08.19v1.69a.27.27,0,0,1-.08.19.25.25,0,0,1-.19.08H10.31a.27.27,0,0,1-.27-.27V9.1a.27.27,0,0,1,.27-.27h9.56Zm.2-3.29a.28.28,0,0,1,.08.2V7.41a.32.32,0,0,1-.08.21.25.25,0,0,1-.19.08H4.68a.27.27,0,0,1-.19-.08.3.3,0,0,1-.08-.21V5.73a.32.32,0,0,1,.08-.21.25.25,0,0,1,.19-.08H19.87a.28.28,0,0,1,.2.09Z" transform="translate(-4.41 -5.44)"/></g></svg>',expansion:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 15.74"><g><path d="M11.8,13.06l-5.1,5.1H9.51V19.5H4.41V14.4H5.75v2.81L8.3,14.66q2.25-2.23,2.55-2.55Zm8.35-9.3v5.1H18.81V6.05l-5.1,5.1-1-1,5.1-5.1H15.05V3.76Z" transform="translate(-4.41 -3.76)"/></g></svg>',reduction:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 15.74"><g><path d="M14.91,10h2.87v1.38H12.55V6.12h1.38V9l5.24-5.24.48.49.49.48ZM6.77,11.92H12v5.23H10.62V14.26L5.37,19.5l-1-1L9.63,13.3H6.77Z" transform="translate(-4.4 -3.76)"/></g></svg>',code_view:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.73 11.8"><g><path d="M8.09,7.94a.76.76,0,0,1,.53.22.72.72,0,0,1,.21.52.76.76,0,0,1-.22.54L6.18,11.63l2.43,2.44a.69.69,0,0,1,.2.51.66.66,0,0,1-.21.51.75.75,0,0,1-.51.22.63.63,0,0,1-.51-.21h0L4.63,12.15a.7.7,0,0,1-.22-.53.67.67,0,0,1,.25-.55L7.57,8.16a.82.82,0,0,1,.52-.22Zm12.05,3.69a.7.7,0,0,1-.23.52L17,15.1h0a.66.66,0,0,1-.51.21.73.73,0,0,1-.51-.22.75.75,0,0,1-.22-.51.63.63,0,0,1,.21-.51l2.43-2.44L15.92,9.22a.73.73,0,0,1-.22-.53A.74.74,0,0,1,17,8.18h0l2.91,2.91a.67.67,0,0,1,.27.54Zm-5.9-5.9a.73.73,0,0,1,.61.32.71.71,0,0,1,.07.68L11,17a1,1,0,0,1-.22.32.6.6,0,0,1-.35.16.75.75,0,0,1-.69-.26.69.69,0,0,1-.12-.72L13.56,6.23a.75.75,0,0,1,.26-.35.74.74,0,0,1,.42-.15Z" transform="translate(-4.41 -5.73)"/></g></svg>',preview:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.65 15.66"><g><path d="M16.19,14.43l2.49,2.49a.73.73,0,0,1,.21.52.67.67,0,0,1-.22.51.7.7,0,0,1-.52.22.69.69,0,0,1-.51-.21l-2.49-2.48a5.17,5.17,0,0,1-1.34.69,4.64,4.64,0,0,1-1.48.24,4.78,4.78,0,1,1,0-9.56,4.79,4.79,0,0,1,1.84.36,4.9,4.9,0,0,1,1.56,1,4.77,4.77,0,0,1,.46,6.18ZM10,14a3.3,3.3,0,0,0,2.34.93A3.37,3.37,0,0,0,14.7,14a3.3,3.3,0,0,0-1.08-5.41,3.47,3.47,0,0,0-2.56,0A3,3,0,0,0,10,9.28,3.31,3.31,0,0,0,10,14ZM16,4a3.86,3.86,0,0,1,2.77,1.14A3.9,3.9,0,0,1,20,7.85v4a.77.77,0,0,1-.22.53.7.7,0,0,1-.52.21.72.72,0,0,1-.74-.74v-4a2.46,2.46,0,0,0-.72-1.73A2.37,2.37,0,0,0,16,5.45H8.53A2.42,2.42,0,0,0,6.08,7.89v7.52a2.41,2.41,0,0,0,.71,1.73,2.46,2.46,0,0,0,1.74.72h4.08a.73.73,0,0,1,0,1.46H8.53a3.85,3.85,0,0,1-2.78-1.14A3.93,3.93,0,0,1,4.6,15.4V7.87A3.94,3.94,0,0,1,5.76,5.09,3.88,3.88,0,0,1,8.54,4H16Z" transform="translate(-4.45 -3.8)"/></g></svg>',print:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16.05 16.04"><g><path d="M19.76,15.84a1.29,1.29,0,0,0,.39-.92V8.35A2.05,2.05,0,0,0,19.57,7a1.93,1.93,0,0,0-1.38-.57H6.37a1.95,1.95,0,0,0-2,2v6.56a1.23,1.23,0,0,0,.38.92,1.35,1.35,0,0,0,.93.38h2V14.9l-2,0V8.35a.67.67,0,0,1,.18-.47.62.62,0,0,1,.48-.19H18.18a.6.6,0,0,1,.46.19.66.66,0,0,1,.18.47V14.9h-2v1.32h2A1.35,1.35,0,0,0,19.76,15.84ZM17.52,7.69V5.06a1.31,1.31,0,0,0-.38-.92,1.34,1.34,0,0,0-.94-.38H8.34A1.3,1.3,0,0,0,7,5.06V7.69H8.34V5.06h7.87V7.69h1.31ZM8.34,12.93h7.87l0,5.26H8.34V12.93Zm7.87,5.26v0Zm.65,1.31a.6.6,0,0,0,.46-.19.72.72,0,0,0,.2-.47V12.29a.74.74,0,0,0-.2-.47.6.6,0,0,0-.46-.19H7.68a.6.6,0,0,0-.46.19.72.72,0,0,0-.2.47v6.55a.74.74,0,0,0,.2.47.6.6,0,0,0,.46.19h9.18ZM16.67,9.28a.7.7,0,0,0-.94,0,.63.63,0,0,0-.18.46.67.67,0,0,0,.18.47.68.68,0,0,0,.94,0,.66.66,0,0,0,.18-.47A.58.58,0,0,0,16.67,9.28Z" transform="translate(-4.25 -3.61)"/></g></svg>',template:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 14.27 15.64"><g><path d="M18.18,19.16a1,1,0,0,0,1-1V5.73a1,1,0,0,0-1-1h-2v1h2V18.19H6.37V5.73h2v-1h-2A.94.94,0,0,0,5.68,5a1,1,0,0,0-.29.7V18.18a.94.94,0,0,0,.29.69,1,1,0,0,0,.69.29H18.18ZM9.82,10.31h4.92a.49.49,0,0,0,.35-.15.47.47,0,0,0,.15-.35.49.49,0,0,0-.15-.35.47.47,0,0,0-.35-.15H9.82a.49.49,0,0,0-.35.15.47.47,0,0,0-.15.35.49.49,0,0,0,.15.35.47.47,0,0,0,.35.15Zm5.9,4.92H8.83a.49.49,0,0,0-.35.15.47.47,0,0,0-.15.35.49.49,0,0,0,.15.35.47.47,0,0,0,.35.15h6.89a.49.49,0,0,0,.35-.15.47.47,0,0,0,.15-.35.51.51,0,0,0-.5-.5ZM7.36,12.77a.49.49,0,0,0,.15.35.47.47,0,0,0,.35.15h8.85a.49.49,0,0,0,.35-.15.47.47,0,0,0,.15-.35.49.49,0,0,0-.15-.35.47.47,0,0,0-.35-.15H7.85a.49.49,0,0,0-.35.15.52.52,0,0,0-.14.35Z" transform="translate(-5.14 -3.77)"/><path d="M14.24,6.71a1,1,0,0,0,1-1,1,1,0,0,0-1-1,1,1,0,0,0-1-1h-2a.94.94,0,0,0-.69.28,1,1,0,0,0-.29.7A.94.94,0,0,0,9.62,5a.91.91,0,0,0-.29.69,1,1,0,0,0,.29.7,1,1,0,0,0,.69.29h3.93Z" transform="translate(-5.14 -3.77)"/></g></svg>',line_height:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.76 13.56"><g><path d="M4.4,4.88V8.26a2,2,0,0,0,.5.39s.1,0,.18-.12a.62.62,0,0,0,.17-.28c.06-.19.13-.44.21-.74s.14-.52.19-.66a.58.58,0,0,1,.21-.3,2.41,2.41,0,0,1,.63-.21,3.83,3.83,0,0,1,.88-.12,9.15,9.15,0,0,1,1.31.06.16.16,0,0,1,.11,0,.26.26,0,0,1,.06.14,4,4,0,0,1,0,.49v2l.05,3.77c0,1.41,0,2.68-.05,3.81a1.79,1.79,0,0,1-.11.49,10.68,10.68,0,0,1-1.4.45,1.12,1.12,0,0,0-.69.43v.31l0,.22.61,0c.85-.08,1.54-.12,2.06-.12a19.76,19.76,0,0,1,2.09.08,15.08,15.08,0,0,0,1.64.08,1.4,1.4,0,0,0,.29,0,1.58,1.58,0,0,0,0-.26l-.05-.43a2.26,2.26,0,0,0-.43-.17l-.77-.22-.15,0a2.55,2.55,0,0,1-.78-.28,2.56,2.56,0,0,1-.11-.75l0-1.29,0-3.15V7.53a10.51,10.51,0,0,1,.06-1.2,3.83,3.83,0,0,1,.6,0l1.88,0a2.18,2.18,0,0,1,.38,0,.45.45,0,0,1,.23.17.9.9,0,0,1,.05.25c0,.16.06.35.1.58a3.33,3.33,0,0,0,.14.55A6.39,6.39,0,0,0,15,9a2.91,2.91,0,0,0,.6-.15,2.77,2.77,0,0,0,0-.46l0-.51,0-2.95-.25,0-.38,0L15,4.94a.71.71,0,0,1-.18.15.45.45,0,0,1-.25.07l-.29,0H8.75l-.15,0H7.45a17,17,0,0,1-1.86,0L5.36,5l-.25-.13ZM19.75,16.14h-.69v-9h.69A.4.4,0,0,0,20.13,7c.06-.11,0-.24-.1-.39L18.92,5.15a.52.52,0,0,0-.86,0L17,6.58c-.12.15-.16.28-.1.39s.18.16.38.16h.69v9h-.69a.4.4,0,0,0-.38.16c-.06.11,0,.24.1.39l1.11,1.43a.52.52,0,0,0,.86,0L20,16.69c.12-.15.16-.28.1-.39a.4.4,0,0,0-.38-.16Z" transform="translate(-4.4 -4.86)"/></g></svg>',paragraph_style:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 11.81 15.74"><g><path d="M18.18,3.76v2h-2V19.5h-2V5.73h-2V19.5h-2V11.63a3.94,3.94,0,0,1,0-7.87h7.87Z" transform="translate(-6.37 -3.76)"/></g></svg>',text_style:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 13.76 15.74"><g><path d="M17.68,6.71a2.22,2.22,0,0,0,1.06-.22.74.74,0,0,0,.42-.7.73.73,0,0,0-.08-.33.67.67,0,0,0-.17-.22,1,1,0,0,0-.31-.15L18.26,5l-.45-.09A15.27,15.27,0,0,0,13.26,5V4.74c0-.66-.63-1-1.92-1-.24,0-.43.15-.59.46a4,4,0,0,0-.36,1.14h0v0a26.45,26.45,0,0,1-3.5.35A2,2,0,0,0,5.77,6a.84.84,0,0,0-.37.79,2.14,2.14,0,0,0,.41,1.29,1.23,1.23,0,0,0,1.05.63,16.62,16.62,0,0,0,3.29-.45l-.34,3.35c-.16,1.61-.29,2.9-.37,3.86s-.12,1.66-.12,2.09l0,.65a5.15,5.15,0,0,0,.05.6,1.28,1.28,0,0,0,.16.54.34.34,0,0,0,.28.18,1.16,1.16,0,0,0,.79-.46,3.66,3.66,0,0,0,.68-1,22.08,22.08,0,0,0,1-4.33q.49-3.1.78-6.15a24.69,24.69,0,0,1,4.62-.84Z" transform="translate(-5.4 -3.76)"/></g></svg>',save:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 15.74"><g><path d="M18.53,19.5l.2-.05A1.78,1.78,0,0,0,20.13,18l0-.09V7.14a2,2,0,0,0-.28-.64A3.18,3.18,0,0,0,19.43,6c-.5-.52-1-1-1.55-1.54A2.59,2.59,0,0,0,17.37,4a1.83,1.83,0,0,0-.61-.25H6l-.21,0a1.78,1.78,0,0,0-1.4,1.49l0,.1V17.87a2.49,2.49,0,0,0,.09.37,1.79,1.79,0,0,0,1.44,1.23l.09,0Zm-6.25-.6H6.92a.61.61,0,0,1-.68-.48.78.78,0,0,1,0-.22V12.3a.62.62,0,0,1,.69-.68H17.64a.62.62,0,0,1,.69.69V18.2a.64.64,0,0,1-.71.69H12.28ZM12,9.81H8.15a.63.63,0,0,1-.72-.71v-4a.64.64,0,0,1,.72-.72h7.66a.64.64,0,0,1,.72.72v4a.65.65,0,0,1-.74.72ZM13.5,5V9.18h1.78V5Z" transform="translate(-4.41 -3.76)"/></g></svg>',blockquote:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 475.082 475.081"><g><path d="M164.45,219.27h-63.954c-7.614,0-14.087-2.664-19.417-7.994c-5.327-5.33-7.994-11.801-7.994-19.417v-9.132c0-20.177,7.139-37.401,21.416-51.678c14.276-14.272,31.503-21.411,51.678-21.411h18.271c4.948,0,9.229-1.809,12.847-5.424c3.616-3.617,5.424-7.898,5.424-12.847V54.819c0-4.948-1.809-9.233-5.424-12.85c-3.617-3.612-7.898-5.424-12.847-5.424h-18.271c-19.797,0-38.684,3.858-56.673,11.563c-17.987,7.71-33.545,18.132-46.68,31.267c-13.134,13.129-23.553,28.688-31.262,46.677C3.855,144.039,0,162.931,0,182.726v200.991c0,15.235,5.327,28.171,15.986,38.834c10.66,10.657,23.606,15.985,38.832,15.985h109.639c15.225,0,28.167-5.328,38.828-15.985c10.657-10.663,15.987-23.599,15.987-38.834V274.088c0-15.232-5.33-28.168-15.994-38.832C192.622,224.6,179.675,219.27,164.45,219.27z"/><path d="M459.103,235.256c-10.656-10.656-23.599-15.986-38.828-15.986h-63.953c-7.61,0-14.089-2.664-19.41-7.994c-5.332-5.33-7.994-11.801-7.994-19.417v-9.132c0-20.177,7.139-37.401,21.409-51.678c14.271-14.272,31.497-21.411,51.682-21.411h18.267c4.949,0,9.233-1.809,12.848-5.424c3.613-3.617,5.428-7.898,5.428-12.847V54.819c0-4.948-1.814-9.233-5.428-12.85c-3.614-3.612-7.898-5.424-12.848-5.424h-18.267c-19.808,0-38.691,3.858-56.685,11.563c-17.984,7.71-33.537,18.132-46.672,31.267c-13.135,13.129-23.559,28.688-31.265,46.677c-7.707,17.987-11.567,36.879-11.567,56.674v200.991c0,15.235,5.332,28.171,15.988,38.834c10.657,10.657,23.6,15.985,38.828,15.985h109.633c15.229,0,28.171-5.328,38.827-15.985c10.664-10.663,15.985-23.599,15.985-38.834V274.088C475.082,258.855,469.76,245.92,459.103,235.256z"/></g></svg>',arrow_down:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.73 8.67"><g><path d="M18.79,7.52a.8.8,0,0,1,.56-.23.82.82,0,0,1,.79.79.8.8,0,0,1-.23.56l-7.07,7.07a.79.79,0,0,1-.57.25.77.77,0,0,1-.57-.25h0L4.64,8.65a.8.8,0,0,1-.23-.57.82.82,0,0,1,.79-.79.8.8,0,0,1,.56.23L12.28,14l3.26-3.26,3.25-3.26Z" transform="translate(-4.41 -7.29)"/></g></svg>',align_justify:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 13.77"><g><path d="M4.41,4.74v2H20.15v-2H4.41Zm0,5.9H20.15v-2H4.41v2Zm0,3.94H20.15v-2H4.41v2Zm0,3.93h7.87v-2H4.41v2Z" transform="translate(-4.41 -4.74)"/></g></svg>',align_left:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 13.77"><g><path d="M4.41,4.74v2H20.15v-2H4.41Zm11.8,3.94H4.41v2H16.22v-2Zm-11.8,5.9H18.18v-2H4.41v2Zm0,3.93h9.84v-2H4.41v2Z" transform="translate(-4.41 -4.74)"/></g></svg>',align_right:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 13.77"><g><path d="M4.41,4.74v2H20.15v-2H4.41Zm3.93,5.9H20.15v-2H8.34v2Zm-2,3.94H20.14v-2H6.37v2Zm3.94,3.93h9.84v-2H10.31v2Z" transform="translate(-4.41 -4.74)"/></g></svg>',align_center:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 13.77"><g><path d="M4.41,4.74v2H20.15v-2H4.41Zm2,3.94v2H18.18v-2H6.37Zm-1,5.9H19.16v-2H5.39v2Zm2,3.93H17.2v-2H7.36v2Z" transform="translate(-4.41 -4.74)"/></g></svg>',font_color:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 14.61"><g><path d="M18.5,15.57,14.28,4.32h-3.4L6.65,15.57h3l.8-2.26h4.23l.8,2.26h3ZM14,11.07H11.14L12.54,7,13.25,9c.41,1.18.64,1.86.7,2ZM4.41,16.69v2.24H20.15V16.69H4.41Z" transform="translate(-4.41 -4.32)"/></g></svg>',highlight_color:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.66 15.74"><g><path d="M12.32,9.31,13.38,13H11.21l.52-1.83q.46-1.61.54-1.83ZM4.44,3.76H20.1V19.5H4.44V3.76ZM14.71,17.32h2.63L13.7,6H10.89L7.26,17.32H9.89l.63-2.24h3.55l.32,1.12c.18.65.29,1,.32,1.12Z" transform="translate(-4.44 -3.76)"/></g></svg>',list_bullets:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 12.37"><g><path d="M7.77,16.12a1.59,1.59,0,0,0-.49-1.18,1.62,1.62,0,0,0-1.19-.49,1.68,1.68,0,1,0,0,3.36,1.67,1.67,0,0,0,1.68-1.69Zm0-4.48A1.67,1.67,0,0,0,6.09,10,1.68,1.68,0,0,0,4.9,12.82a1.62,1.62,0,0,0,1.19.49,1.67,1.67,0,0,0,1.68-1.67Zm12.38,3.64a.27.27,0,0,0-.08-.19.28.28,0,0,0-.2-.09H9.19a.28.28,0,0,0-.2.08.29.29,0,0,0-.08.19V17a.27.27,0,0,0,.28.28H19.87a.27.27,0,0,0,.19-.08.24.24,0,0,0,.08-.2V15.28ZM7.77,7.13a1.63,1.63,0,0,0-.49-1.2,1.61,1.61,0,0,0-1.19-.49,1.61,1.61,0,0,0-1.19.49,1.71,1.71,0,0,0,0,2.4,1.62,1.62,0,0,0,1.19.49,1.61,1.61,0,0,0,1.19-.49,1.63,1.63,0,0,0,.49-1.2Zm12.38,3.66a.28.28,0,0,0-.08-.2.29.29,0,0,0-.19-.08H9.19a.27.27,0,0,0-.28.28v1.69a.27.27,0,0,0,.08.19.24.24,0,0,0,.2.08H19.87a.27.27,0,0,0,.19-.08.25.25,0,0,0,.08-.19V10.79Zm0-4.5a.27.27,0,0,0-.08-.19A.25.25,0,0,0,19.88,6H9.19A.28.28,0,0,0,9,6.1a.26.26,0,0,0-.08.19V8A.27.27,0,0,0,9,8.17a.24.24,0,0,0,.2.08H19.87a.27.27,0,0,0,.19-.08A.25.25,0,0,0,20.14,8V6.29Z" transform="translate(-4.41 -5.44)"/></g></svg>',list_number:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.69 15.74"><g><path d="M7.66,18a1.24,1.24,0,0,0-.26-.78,1.17,1.17,0,0,0-.72-.42l.85-1V15H4.58v1.34h.94v-.46l.85,0h0c-.11.11-.22.23-.32.35s-.23.27-.37.47L5.39,17l.23.51c.61-.05.92.11.92.49a.42.42,0,0,1-.18.37.79.79,0,0,1-.45.12A1.41,1.41,0,0,1,5,18.15l-.51.77A2.06,2.06,0,0,0,6,19.5a1.8,1.8,0,0,0,1.2-.41A1.38,1.38,0,0,0,7.66,18Zm0-5.54H6.75V13H5.63A.72.72,0,0,1,6,12.51a5.45,5.45,0,0,1,.66-.45,2.71,2.71,0,0,0,.67-.57,1.19,1.19,0,0,0,.31-.81,1.29,1.29,0,0,0-.45-1,1.86,1.86,0,0,0-2-.11,1.51,1.51,0,0,0-.62.7l.74.52A.87.87,0,0,1,6,10.28a.51.51,0,0,1,.35.12.42.42,0,0,1,.13.33.55.55,0,0,1-.21.4,3,3,0,0,1-.5.38c-.19.13-.39.27-.58.42a2,2,0,0,0-.5.6,1.63,1.63,0,0,0-.21.81,3.89,3.89,0,0,0,.05.48h3.2V12.44Zm12.45,2.82a.27.27,0,0,0-.08-.19.28.28,0,0,0-.21-.08H9.1a.32.32,0,0,0-.21.08.24.24,0,0,0-.08.2V17a.27.27,0,0,0,.08.19.3.3,0,0,0,.21.08H19.83a.32.32,0,0,0,.21-.08.25.25,0,0,0,.08-.19V15.26ZM7.69,7.32h-1V3.76H5.8L4.6,4.88l.63.68a1.85,1.85,0,0,0,.43-.48h0l0,2.24H4.74V8.2h3V7.32Zm12.43,3.42a.27.27,0,0,0-.08-.19.28.28,0,0,0-.21-.08H9.1a.32.32,0,0,0-.21.08.24.24,0,0,0-.08.2v1.71a.27.27,0,0,0,.08.19.3.3,0,0,0,.21.08H19.83a.32.32,0,0,0,.21-.08.25.25,0,0,0,.08-.19V10.74Zm0-4.52A.27.27,0,0,0,20,6,.28.28,0,0,0,19.83,6H9.1A.32.32,0,0,0,8.89,6a.24.24,0,0,0-.08.19V7.93a.27.27,0,0,0,.08.19.32.32,0,0,0,.21.08H19.83A.32.32,0,0,0,20,8.12a.26.26,0,0,0,.08-.2V6.22Z" transform="translate(-4.43 -3.76)"/></g></svg>',table:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 15.74"><g><path d="M4.41,8.05V3.76H8.7V8.05H4.41Zm5.71,0V3.76h4.3V8.05h-4.3Zm5.74-4.29h4.29V8.05H15.86V3.76Zm-11.45,10V9.48H8.7v4.3H4.41Zm5.71,0V9.48h4.3v4.3h-4.3Zm5.74,0V9.48h4.29v4.3H15.86ZM4.41,19.5V15.21H8.7V19.5H4.41Zm5.71,0V15.21h4.3V19.5h-4.3Zm5.74,0V15.21h4.29V19.5H15.86Z" transform="translate(-4.41 -3.76)"/></g></svg>',horizontal_rule:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 2.24"><g><path d="M20.15,12.75V10.51H4.41v2.24H20.15Z" transform="translate(-4.41 -10.51)"/></g></svg>',show_blocks:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.66 15.67"><g><path d="M19.72,5.58a1.64,1.64,0,0,0-1.64-1.64H6.23a1.62,1.62,0,0,0-1.16.48,1.63,1.63,0,0,0-.48,1.16V9.63a1.6,1.6,0,0,0,.48,1.16,1.62,1.62,0,0,0,1.16.47H18.09a1.67,1.67,0,0,0,1.16-.47,1.62,1.62,0,0,0,.48-1.16V5.58Zm-.94,4.05a.68.68,0,0,1-.7.7H6.23a.66.66,0,0,1-.48-.2.74.74,0,0,1-.21-.5V5.58a.66.66,0,0,1,.2-.48.71.71,0,0,1,.48-.21H18.08a.74.74,0,0,1,.5.21.66.66,0,0,1,.2.48ZM6.48,7.72a.21.21,0,0,0,.17-.07.22.22,0,0,0,.07-.17V7.06a1.27,1.27,0,0,1,.11-.52.37.37,0,0,1,.36-.23H8.77A.25.25,0,0,0,9,6.17a.19.19,0,0,0,0-.23.27.27,0,0,0-.2-.12H7.19a.88.88,0,0,0-.72.39,1.51,1.51,0,0,0-.23.85v.42a.24.24,0,0,0,.24.24Zm-.19.81a.21.21,0,0,0,.17-.07.26.26,0,0,0,.07-.17.24.24,0,0,0-.24-.24.2.2,0,0,0-.16.09.2.2,0,0,0-.07.16.22.22,0,0,0,.07.17.23.23,0,0,0,.16.06Zm8.46,5.1a1.63,1.63,0,0,0-.47-1.16A1.61,1.61,0,0,0,13.12,12H6.23a1.6,1.6,0,0,0-1.16.46,1.62,1.62,0,0,0-.48,1.16v4.05a1.64,1.64,0,0,0,1.64,1.64h6.89a1.6,1.6,0,0,0,1.16-.48,1.62,1.62,0,0,0,.47-1.16Zm-.94,4a.7.7,0,0,1-.2.49.65.65,0,0,1-.5.2H6.23a.66.66,0,0,1-.48-.2.75.75,0,0,1-.21-.49v-4a.74.74,0,0,1,.21-.5.66.66,0,0,1,.48-.2h6.89a.68.68,0,0,1,.7.7v4Zm6.15,0v-4a1.6,1.6,0,0,0-.48-1.16A1.67,1.67,0,0,0,18.32,12H17.1a1.63,1.63,0,0,0-1.16.47,1.61,1.61,0,0,0-.47,1.16v4a1.67,1.67,0,0,0,.47,1.16,1.62,1.62,0,0,0,1.16.48h1.22A1.64,1.64,0,0,0,20,17.68Zm-.94-4v4a.75.75,0,0,1-.21.49.62.62,0,0,1-.48.2H17.11a.69.69,0,0,1-.5-.2.7.7,0,0,1-.2-.49v-4a.68.68,0,0,1,.7-.7h1.22a.66.66,0,0,1,.48.2.72.72,0,0,1,.21.5Z" transform="translate(-4.44 -3.79)"/></g></svg>',cancel:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 15.74"><g><path d="M14.15,11.63l5.61,5.61a1.29,1.29,0,0,1,.38.93,1.27,1.27,0,0,1-.4.93,1.25,1.25,0,0,1-.92.4,1.31,1.31,0,0,1-.94-.4l-5.61-5.61L6.67,19.1a1.31,1.31,0,0,1-.94.4,1.24,1.24,0,0,1-.92-.4,1.27,1.27,0,0,1-.4-.93,1.33,1.33,0,0,1,.38-.93l5.61-5.63L4.79,6a1.26,1.26,0,0,1-.38-.93,1.22,1.22,0,0,1,.4-.92,1.28,1.28,0,0,1,.92-.39,1.38,1.38,0,0,1,.94.38l5.61,5.61,5.61-5.61a1.33,1.33,0,0,1,.94-.38,1.26,1.26,0,0,1,.92.39,1.24,1.24,0,0,1,.4.92,1.29,1.29,0,0,1-.39.93L17,8.81l-2.8,2.82Z" transform="translate(-4.41 -3.76)"/></g></svg>',image:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.75 15.77"><g><path d="M8.77,8.72a.88.88,0,0,1-.61-.27.82.82,0,0,1-.25-.61.89.89,0,0,1,.25-.62A.82.82,0,0,1,8.77,7a.81.81,0,0,1,.61.25.83.83,0,0,1,.27.62.81.81,0,0,1-.25.61.91.91,0,0,1-.63.27Zm9.62-5a1.74,1.74,0,0,1,1.76,1.76V17.76a1.74,1.74,0,0,1-1.76,1.76H6.16A1.74,1.74,0,0,1,4.4,17.76V5.51A1.74,1.74,0,0,1,6.16,3.75H18.39Zm0,1.75H6.16v8L8.53,11.8a.94.94,0,0,1,.54-.17.86.86,0,0,1,.54.2L11.09,13l3.64-4.55a.78.78,0,0,1,.34-.25.85.85,0,0,1,.42-.07.89.89,0,0,1,.39.12.78.78,0,0,1,.28.29l2.24,3.67V5.51Zm0,12.24V15.6L15.3,10.53,11.89,14.8a.89.89,0,0,1-.59.32.82.82,0,0,1-.64-.18L9,13.62,6.16,15.74v2Z" transform="translate(-4.4 -3.75)"/></g></svg>',video:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 14.55"><g><path d="M20.15,10.26V18.9l-3.94-1.57v1.2H4.41V10.66H16.22v1.23l2-.81,2-.82ZM14.64,17h0V12.54h0v-.31H6V17h8.67Zm3.94-.37v-4l-2.37,1v2l1.18.48,1.19.48ZM7.94,9.86A2.77,2.77,0,0,1,5.19,7.11a2.76,2.76,0,0,1,5.51,0A2.78,2.78,0,0,1,7.94,9.86Zm0-3.93a1.21,1.21,0,0,0-.83.35,1.15,1.15,0,0,0-.34.84A1.09,1.09,0,0,0,7.11,8,1.15,1.15,0,0,0,8,8.28,1.13,1.13,0,0,0,9.11,7.12,1.16,1.16,0,0,0,7.94,5.93Zm5.9,3.93a2.34,2.34,0,0,1-1.67-.68,2.3,2.3,0,0,1-.68-1.67,2.35,2.35,0,0,1,4-1.67,2.37,2.37,0,0,1,0,3.34,2.33,2.33,0,0,1-1.68.68Zm0-3.14a.75.75,0,1,0,.55.22.73.73,0,0,0-.55-.22Z" transform="translate(-4.41 -4.35)"/></g></svg>',link:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 15.72"><g><path d="M13.05,13.63a.24.24,0,0,1,.15.22L13.42,16a.19.19,0,0,1-.08.18l-2.12,2.14a4.08,4.08,0,0,1-1.29.85A4,4,0,0,1,4.71,17a3.92,3.92,0,0,1-.3-1.52A4,4,0,0,1,4.71,14a3.91,3.91,0,0,1,.87-1.3L7.7,10.56a.25.25,0,0,1,.2-.06l2.17.22a.21.21,0,0,1,.19.15.24.24,0,0,1,0,.25L7.12,14.23a1.81,1.81,0,0,0,0,2.58,1.78,1.78,0,0,0,1.29.52,1.74,1.74,0,0,0,1.28-.52L12.8,13.7a.24.24,0,0,1,.25-.07ZM19,4.92a4,4,0,0,1,0,5.66L16.86,12.7a.25.25,0,0,1-.17.08l-2.2-.23a.21.21,0,0,1-.19-.15.22.22,0,0,1,0-.25L17.44,9a1.81,1.81,0,0,0,0-2.58,1.78,1.78,0,0,0-1.29-.52,1.74,1.74,0,0,0-1.28.52L11.76,9.57a.21.21,0,0,1-.25,0,.24.24,0,0,1-.16-.21l-.22-2.17a.19.19,0,0,1,.08-.18l2.12-2.14a4.08,4.08,0,0,1,1.29-.85,4.05,4.05,0,0,1,3.06,0,3.85,3.85,0,0,1,1.3.85ZM5.84,9.82a.25.25,0,0,1-.18-.08.19.19,0,0,1-.07-.19l.11-.77a.2.2,0,0,1,.11-.17.24.24,0,0,1,.2,0l2.5.72a.25.25,0,0,1,.15.27.22.22,0,0,1-.23.21l-2.59,0Zm4.12-2-.73-2.5a.27.27,0,0,1,0-.2A.21.21,0,0,1,9.41,5L10.19,5a.25.25,0,0,1,.19,0,.23.23,0,0,1,.08.18l-.05,2.61a.2.2,0,0,1-.19.23h0A.22.22,0,0,1,10,7.85Zm8.76,5.58a.25.25,0,0,1,.18.08.23.23,0,0,1,.06.2l-.11.77a.25.25,0,0,1-.11.17.21.21,0,0,1-.12,0l-.08,0L16,14a.25.25,0,0,1-.15-.27.22.22,0,0,1,.22-.21l1.29,0,1.33,0Zm-4.12,2,.74,2.51a.28.28,0,0,1,0,.2.23.23,0,0,1-.18.11l-.8.11a.23.23,0,0,1-.17-.07.25.25,0,0,1-.08-.18l0-2.61a.22.22,0,0,1,.22-.22.21.21,0,0,1,.26.15Z" transform="translate(-4.41 -3.77)"/></g></svg>',math:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 11.81 15.73"><g><path d="M17.19,5.73a1,1,0,0,0,.71-.29,1,1,0,0,0,.28-.7,1,1,0,0,0-1-1H7.35a1,1,0,0,0-1,1,.77.77,0,0,0,.13.47h0l4.58,6.43L6.68,17.81a1.25,1.25,0,0,0-.29.71.94.94,0,0,0,.28.7.92.92,0,0,0,.69.28H17.2a1,1,0,0,0,.71-.28,1,1,0,0,0,0-1.39.92.92,0,0,0-.71-.29H9.26l3.87-5.43a.86.86,0,0,0,0-.95L9.26,5.73h7.93Z" transform="translate(-6.38 -3.77)"/></g></svg>',unlink:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 15.72"><g><path d="M19,18.32a4,4,0,0,0,0-5.68L15.85,9.5l-1.17,1.55L17.57,14a2,2,0,0,1,.61,1.47,2.08,2.08,0,0,1-2.09,2.09,2,2,0,0,1-1.47-.61l-.38-.37-1.74,1,.8.78a4,4,0,0,0,5.68,0ZM8,9.77a2,2,0,0,1-1.27-1,1.89,1.89,0,0,1-.21-1.57A2.1,2.1,0,0,1,7.45,6,2,2,0,0,1,9,5.76L12.27,7.2l.49-2L9.48,3.9a4,4,0,0,0-3.06.41A3.82,3.82,0,0,0,4.56,6.73a3.8,3.8,0,0,0,.4,3A3.78,3.78,0,0,0,7.39,11.6l5.38,2,.49-2-2.64-.94L8,9.77Z" transform="translate(-4.41 -3.76)"/></g></svg>',table_header:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.75 15.74"><g><path d="M17,19.5v-.78H15.5v.78H17Zm-3,0v-.78H12.5v.78H14Zm-3,0v-.78H9.53v.78H11Zm-3,0v-.78H6.53v.78H8Zm10.55,0a1.73,1.73,0,0,0,.85-.35,1.67,1.67,0,0,0,.56-.76l-.71-.31a1.21,1.21,0,0,1-.35.4,1.34,1.34,0,0,1-.53.23l.08.38c.06.24.09.38.1.41Zm-13.7-.63.55-.55A.77.77,0,0,1,5.25,18a1.31,1.31,0,0,1-.06-.38v-.38H4.41v.38a2,2,0,0,0,.12.68,1.6,1.6,0,0,0,.35.57Zm15.27-2.12V15.26h-.78v1.49h.78Zm-15-1V14.23H4.41v1.49h.78Zm15-2V12.26h-.78v1.49h.78Zm-15-1V11.22H4.41v1.51h.78Zm15-2V9.26h-.78v1.51h.78Zm-15-1V8.17H4.41V9.74h.78Zm15-2V6.28h-.78V7.77h.78Zm-15-1.11V5.33L4.48,5.1a.77.77,0,0,0-.07.27,2.72,2.72,0,0,0,0,.28v1h.79ZM19.21,5l.63-.4A1.62,1.62,0,0,0,19.16,4a1.94,1.94,0,0,0-.91-.22v.78a1.31,1.31,0,0,1,.56.12.88.88,0,0,1,.4.36ZM6,4.54H7.78V3.76H6a.82.82,0,0,0-.28.06l.12.35c.07.21.1.33.11.36Zm10.8,0V3.76H15.28v.78h1.49Zm-3,0V3.76H12.28v.78h1.49Zm-3,0V3.76H9.28v.78h1.51ZM6,10.84h12.6V6.91H6Z" transform="translate(-4.4 -3.76)"/></g></svg>',merge_cell:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.76 15.74"><g><path d="M18.92,13.5h1.23v4.15A1.84,1.84,0,0,1,18.3,19.5H14V18.27H18.3a.6.6,0,0,0,.44-.18.59.59,0,0,0,.18-.44V13.5ZM18.3,3.76a1.84,1.84,0,0,1,1.85,1.85V9.82H18.92V5.6a.6.6,0,0,0-.18-.44A.59.59,0,0,0,18.3,5H14V3.76H18.3Zm1.85,8.51H15.6L17.26,14l-.86.86-3.14-3.17L16.4,8.51l.86.86L15.62,11h4.54v1.24Zm-13.9,6h4.27V19.5H6.25A1.84,1.84,0,0,1,4.4,17.65V13.5H5.63v4.15a.61.61,0,0,0,.62.62Zm0-14.51h4.27V5H6.25a.6.6,0,0,0-.44.18.57.57,0,0,0-.17.43V9.81H4.41V5.6A1.83,1.83,0,0,1,6.25,3.76Zm5,7.9L8.15,14.83,7.3,14,9,12.27H4.41V11H8.94L7.3,9.38,7.73,9l.43-.43Z" transform="translate(-4.4 -3.76)"/></g></svg>',split_cell:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.75 15.74"><g><path d="M10.37,12.25H6.74L8.4,13.94l-.87.86L4.41,11.63,7.53,8.5l.87.86L6.74,11h3.62v1.23Zm9.78-.61L17,14.81,16.13,14l1.66-1.69H14.16V11h3.63L16.13,9.37l.43-.43A5.24,5.24,0,0,1,17,8.51ZM18.9,8.22V5.61a.57.57,0,0,0-.18-.43A.65.65,0,0,0,18.29,5H12.88V18.28h5.41a.7.7,0,0,0,.44-.18.57.57,0,0,0,.18-.43V15h1.23v2.64a1.84,1.84,0,0,1-1.85,1.83h-12A1.84,1.84,0,0,1,4.94,19a1.81,1.81,0,0,1-.54-1.29V15H5.63v2.64a.57.57,0,0,0,.18.43.67.67,0,0,0,.44.18h5.41V5H6.25a.7.7,0,0,0-.44.18.56.56,0,0,0-.17.43V8.22H4.41V5.61A1.8,1.8,0,0,1,5,4.31a1.91,1.91,0,0,1,1.31-.55h12a1.89,1.89,0,0,1,1.31.55,1.8,1.8,0,0,1,.54,1.3V8.23H18.9Z" transform="translate(-4.4 -3.76)"/></g></svg>',caption:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 13.79"><g><path d="M4.41,18.52H20.15v-2H4.41ZM20,4.73H18.07V6h.65v.65H20V4.73ZM17,6V4.73H14.55V6H17ZM13.49,6V4.73H11V6h2.47ZM10,6V4.73H7.5V6H10ZM5.79,6h.65V4.73H4.5V6.67H5.8V6ZM4.5,11.34H5.79V8.48H4.5ZM6.44,13.8H5.79v-.65H4.5v1.94H6.44ZM17,15.09V13.8H14.55v1.29H17Zm-3.52,0V13.8H11v1.29h2.47Zm-3.53,0V13.8H7.5v1.29H10ZM20,13.16H18.72v.65h-.65V15.1H20Zm-1.29-1.82H20V8.48h-1.3v2.86Z" transform="translate(-4.41 -4.73)"/></g></svg>',edit:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 15.73"><g><path d="M7.51,5.68h6l1.52-1.57H6.94a2.4,2.4,0,0,0-1.79.82A2.8,2.8,0,0,0,4.41,6.8V17a2.55,2.55,0,0,0,.75,1.8A2.48,2.48,0,0,0,7,19.5H17.22a2.57,2.57,0,0,0,1.83-.74,2.52,2.52,0,0,0,.77-1.8V8.83l-1.58,1.54v6a1.54,1.54,0,0,1-1.53,1.53H7.51A1.54,1.54,0,0,1,6,16.41V7.21A1.52,1.52,0,0,1,7.51,5.68Zm5.63,7.47h0L10.7,10.74l-1,3.38,1.71-.48,1.7-.49Zm.34-.34h0l5.36-5.32L16.4,5.08,11,10.4l1.23,1.21,1.21,1.2ZM19.93,6.4a.82.82,0,0,0,.22-.48A.54.54,0,0,0,20,5.47L18.45,4A.67.67,0,0,0,18,3.77a.7.7,0,0,0-.48.21l-.74.72,2.44,2.43.37-.37.35-.36Z" transform="translate(-4.41 -3.77)"/></g></svg>',delete:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.73 15.74"><g><path d="M19.16,6.71a.94.94,0,0,0,.69-.28.91.91,0,0,0,.29-.68A1,1,0,0,0,19.85,5a.93.93,0,0,0-.69-.3H14.24A.94.94,0,0,0,14,4.06a.92.92,0,0,0-.7-.3h-2a1,1,0,0,0-.7.3.93.93,0,0,0-.28.68H5.39A.92.92,0,0,0,4.7,5a1,1,0,0,0-.29.71.91.91,0,0,0,.29.68,1,1,0,0,0,.69.28H19.16Zm-12.79,1a1,1,0,0,0-.7.3.94.94,0,0,0-.28.69v8.85A1.88,1.88,0,0,0,6,18.93a1.9,1.9,0,0,0,1.39.57H17.2a1.87,1.87,0,0,0,1.39-.58,1.91,1.91,0,0,0,.58-1.39V8.68A1,1,0,0,0,18.88,8a.89.89,0,0,0-.7-.29,1,1,0,0,0-.69.29.92.92,0,0,0-.29.68v7.87a1,1,0,0,1-1,1H8.34a.94.94,0,0,1-.69-.28,1,1,0,0,1-.29-.71V8.68a1,1,0,0,0-1-1Z" transform="translate(-4.41 -3.76)"/></g></svg>',modify:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.7 15.74"><g><path d="M19.79,15.23a.66.66,0,0,1,.3.38.59.59,0,0,1-.07.48l-.8,1.38a.66.66,0,0,1-.38.3.59.59,0,0,1-.48-.07l-.68-.38a4.55,4.55,0,0,1-1.34.77v.78a.64.64,0,0,1-.18.45.61.61,0,0,1-.45.18h-1.6a.6.6,0,0,1-.44-.18.66.66,0,0,1-.19-.45v-.78a4.36,4.36,0,0,1-1.32-.77l-.69.38a.58.58,0,0,1-.48.07.66.66,0,0,1-.38-.3l-.38-.66h.83a1.77,1.77,0,0,0,1.23-.52,1.72,1.72,0,0,0,.51-1.23v-.18a3,3,0,0,0,.49-.28l.15.09a1.83,1.83,0,0,0,.88.23A1.75,1.75,0,0,0,15.84,14l.88-1.52a1.7,1.7,0,0,0,.17-1.32,1.66,1.66,0,0,0-.3-.61,1.84,1.84,0,0,0-.51-.45l-.15-.09,0-.29,0-.28.15-.09a1,1,0,0,0,.26-.18l0,.06v.78a4.34,4.34,0,0,1,1.34.77l.68-.38a.68.68,0,0,1,.48-.06.64.64,0,0,1,.38.29l.8,1.38a.58.58,0,0,1,.07.48.63.63,0,0,1-.3.38l-.68.4a3.84,3.84,0,0,1,.08.76,4.13,4.13,0,0,1-.08.78l.34.18.32.2ZM10.17,7.86a1.9,1.9,0,0,1,1.35,3.23,1.85,1.85,0,0,1-1.35.55A1.9,1.9,0,0,1,8.83,8.41a1.92,1.92,0,0,1,1.34-.55Zm1.58,7.2a.73.73,0,0,1-.21.49.66.66,0,0,1-.48.2H9.29a.68.68,0,0,1-.69-.69V14.2a4.75,4.75,0,0,1-1.48-.86l-.75.45a.73.73,0,0,1-.7,0,.63.63,0,0,1-.25-.26L4.54,12a.67.67,0,0,1-.08-.53.71.71,0,0,1,.32-.42l.75-.43a4.8,4.8,0,0,1-.08-.85,4.71,4.71,0,0,1,.08-.85l-.74-.44a.71.71,0,0,1-.32-.42.65.65,0,0,1,.07-.54L5.42,6a.66.66,0,0,1,.42-.32l.18,0a.73.73,0,0,1,.35.09l.75.43A4.68,4.68,0,0,1,8.6,5.33V4.45a.68.68,0,0,1,.69-.69h1.77a.64.64,0,0,1,.48.2.73.73,0,0,1,.21.49v.88a4.75,4.75,0,0,1,1.48.85L14,5.75a.67.67,0,0,1,.34-.09l.18,0a.71.71,0,0,1,.42.32l.89,1.54a.67.67,0,0,1,.06.52.73.73,0,0,1-.32.43l-.75.42a4.8,4.8,0,0,1,.08.85,4.71,4.71,0,0,1-.08.85l.75.43a.66.66,0,0,1,.32.42.73.73,0,0,1-.06.54l-.89,1.52a.69.69,0,0,1-.25.26.7.7,0,0,1-.35.09.64.64,0,0,1-.34-.09l-.75-.45a4.87,4.87,0,0,1-1.48.86v.87ZM7.23,9.75a3,3,0,0,0,.86,2.08,2.94,2.94,0,1,0,4.16-4.16,3,3,0,0,0-2.08-.85A2.94,2.94,0,0,0,7.23,9.75Z" transform="translate(-4.44 -3.76)"/></g></svg>',revert:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.76 14.69"><g><path d="M18.26,15V12.3l1.89-2V15a2.58,2.58,0,0,1-.24,1c-.2.58-.75.92-1.65,1H7.56v2L4.41,15.63,7.56,13v2h10.7ZM6.3,8.28V11L4.41,13V8.28a2.58,2.58,0,0,1,.24-1c.2-.58.75-.92,1.65-1H17v-2l3.15,3.34L17,10.3v-2H6.3Z" transform="translate(-4.4 -4.28)"/></g></svg>',auto_size:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 15.74"><g><path d="M6.71,17.19,6.89,16l1.21-.15A6,6,0,0,1,6.81,13.9a5.78,5.78,0,0,1-.45-2.27A6,6,0,0,1,8.1,7.45a5.83,5.83,0,0,1,4.17-1.73l1-1-1-1A7.89,7.89,0,0,0,5,14.64a7.73,7.73,0,0,0,1.71,2.55Zm5.57,2.31h0A7.86,7.86,0,0,0,17.85,6.07L17.67,7.3l-1.21.15a5.9,5.9,0,0,1,1.29,1.92,5.81,5.81,0,0,1,.45,2.26,5.91,5.91,0,0,1-5.9,5.9l-1,1,.49.49.47.5Z" transform="translate(-4.41 -3.76)"/></g></svg>',insert_row_below:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.8 15.8"><g><path d="M15.7,1.3c-0.1-0.1-0.1-0.2-0.2-0.2L15.3,1H0.4L0.3,1.1c0,0-0.1,0.1-0.1,0.1c0,0-0.1,0.1-0.1,0.1L0,1.4v7.7l0.1,0.1c0,0.1,0.1,0.1,0.2,0.2l0.1,0.1h2.3V9.3l0.1-0.5L3,8.5l0.1-0.2c-0.1,0-0.2,0-0.3,0H1.2v-6h13.3v6h-1.6c-0.1,0-0.2,0-0.3,0l0.1,0.2l0.2,0.4C12.9,9,13,9.2,13,9.3v0.1h2.3l0.2-0.1c0.1,0,0.1-0.1,0.2-0.2l0.1-0.1V1.4L15.7,1.3z"/><path d="M10.5,7.5C9.9,7.1,9.3,6.8,8.6,6.7c-0.2,0-0.5-0.1-0.7,0c-0.2,0-0.5,0-0.7,0C6.6,6.7,6.1,6.9,5.6,7.3C5.2,7.6,4.7,8,4.4,8.4C4.3,8.6,4.2,8.8,4.2,8.9C4.1,9.1,4,9.3,3.9,9.4C3.9,9.6,3.8,9.7,3.8,9.9c0,0.2-0.1,0.3-0.1,0.5v-0.1c-0.1,0.8,0.1,1.6,0.5,2.4c0.4,0.7,1,1.3,1.7,1.7c0.3,0.2,0.6,0.3,0.9,0.3c0.3,0.1,0.7,0.1,1,0.1c0.3,0,0.7,0,1-0.1c0.3-0.1,0.6-0.2,0.9-0.3c0.5-0.3,0.9-0.6,1.3-1c0.3-0.4,0.6-0.8,0.8-1.3c0.1-0.4,0.2-0.9,0.2-1.4c0-0.5-0.1-1-0.3-1.4C11.5,8.6,11.1,8,10.5,7.5z M10.1,11.3H8.5v1.6H8H7.9H7.3v0v-0.1v-1.4H5.7v-0.4v-0.2v-0.6h0h1.5V8.5h1.2v1.6h1.6V11.3z"/></g></svg>',insert_row_above:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.8 15.8"><g><path d="M0.1,14.5c0.1,0.1,0.1,0.2,0.2,0.2l0.1,0.1h14.9l0.1-0.1c0,0,0.1-0.1,0.1-0.1c0,0,0.1-0.1,0.1-0.1l0.1-0.1V6.7l-0.1-0.1c0-0.1-0.1-0.1-0.2-0.2l-0.1-0.1h-2.3v0.1l-0.1,0.5l-0.2,0.4l-0.1,0.2c0.1,0,0.2,0,0.3,0h1.6v6H1.3v-6h1.6c0.1,0,0.2,0,0.3,0L3.1,7.3L2.9,6.9C2.8,6.8,2.8,6.6,2.7,6.5V6.3H0.4L0.3,6.4c-0.1,0-0.1,0.1-0.2,0.2L0,6.7v7.7L0.1,14.5z"/><path d="M5.3,8.3c0.6,0.5,1.2,0.8,1.9,0.9c0.2,0,0.5,0.1,0.7,0c0.2,0,0.5,0,0.7,0c0.6-0.1,1.1-0.3,1.6-0.6c0.5-0.3,0.9-0.7,1.2-1.2c0.1-0.2,0.2-0.3,0.3-0.5c0.1-0.2,0.2-0.4,0.2-0.5c0.1-0.1,0.1-0.3,0.1-0.4C12,5.8,12,5.6,12,5.4v0.1c0.1-0.8-0.1-1.6-0.5-2.4c-0.4-0.7-1-1.3-1.7-1.7C9.5,1.3,9.2,1.2,8.9,1.1C8.5,1,8.2,1,7.9,1c-0.3,0-0.7,0-1,0.1C6.6,1.2,6.3,1.3,6,1.4C5.5,1.7,5.1,2,4.7,2.4C4.4,2.8,4.1,3.3,3.9,3.8C3.8,4.2,3.7,4.7,3.7,5.2c0,0.5,0.1,1,0.3,1.4C4.3,7.2,4.7,7.8,5.3,8.3z M5.7,4.5h1.6V2.9h0.5h0.1h0.6v0v0.1v1.4H10v0.4v0.2v0.6h0H8.5v1.6H7.3V5.7H5.7V4.5z"/></g></svg>',insert_column_left:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.8 15.8"><g><path d="M14.5,15.7c0.1-0.1,0.2-0.1,0.2-0.2l0.1-0.1V0.4l-0.1-0.1c0,0-0.1-0.1-0.1-0.1c0,0-0.1-0.1-0.1-0.1L14.4,0H6.7L6.6,0.1c-0.1,0-0.1,0.1-0.2,0.2L6.3,0.4v2.3h0.1l0.5,0.1L7.3,3l0.2,0.1c0-0.1,0-0.2,0-0.3V1.2h6v13.3h-6v-1.6c0-0.1,0-0.2,0-0.3l-0.2,0.1l-0.4,0.2C6.7,12.9,6.6,13,6.4,13H6.3v2.3l0.1,0.2c0,0.1,0.1,0.1,0.2,0.2l0.1,0.1h7.7L14.5,15.7z"/><path d="M8.3,10.5C8.7,10,9,9.3,9.1,8.6c0-0.2,0.1-0.5,0-0.7c0-0.2,0-0.5,0-0.7C9,6.7,8.8,6.1,8.5,5.7C8.2,5.2,7.8,4.8,7.3,4.5C7.2,4.4,7,4.3,6.9,4.2C6.7,4.1,6.5,4,6.4,4C6.2,3.9,6.1,3.9,5.9,3.8c-0.2,0-0.3-0.1-0.5-0.1h0.1C4.7,3.7,3.8,3.9,3.1,4.3C2.4,4.7,1.8,5.3,1.4,6C1.3,6.3,1.2,6.6,1.1,6.9C1,7.2,1,7.6,1,7.9c0,0.3,0,0.7,0.1,1c0.1,0.3,0.2,0.6,0.3,0.9c0.3,0.5,0.6,0.9,1,1.3c0.4,0.3,0.8,0.6,1.3,0.8C4.2,12,4.7,12.1,5.1,12c0.5,0,1-0.1,1.4-0.3C7.2,11.5,7.8,11.1,8.3,10.5zM4.5,10.1V8.5H2.9V8V7.9V7.3h0H3h1.4V5.7h0.4h0.2h0.6v0v1.5h1.6v1.2H5.7v1.6H4.5z"/></g></svg>',insert_column_right:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.8 15.8"><g><path d="M1.3,0.1C1.2,0.2,1.1,0.2,1.1,0.3L1,0.4v14.9l0.1,0.1c0,0,0.1,0.1,0.1,0.1c0,0,0.1,0.1,0.1,0.1l0.1,0.1h7.7l0.1-0.1c0.1,0,0.1-0.1,0.2-0.2l0.1-0.1v-2.3H9.3l-0.5-0.1l-0.4-0.2l-0.2-0.1c0,0.1,0,0.2,0,0.3v1.6h-6V1.3h6v1.6c0,0.1,0,0.2,0,0.3l0.2-0.1l0.4-0.2C9,2.9,9.2,2.8,9.3,2.8h0.1V0.5L9.4,0.3c0-0.1-0.1-0.1-0.2-0.2L9.1,0H1.4L1.3,0.1z"/><path d="M7.5,5.3C7,5.8,6.7,6.5,6.6,7.2c0,0.2-0.1,0.5,0,0.7c0,0.2,0,0.5,0,0.7c0.1,0.6,0.3,1.1,0.6,1.6c0.3,0.5,0.7,0.9,1.2,1.2c0.2,0.1,0.3,0.2,0.5,0.3c0.2,0.1,0.4,0.2,0.5,0.2c0.1,0.1,0.3,0.1,0.4,0.1c0.2,0,0.3,0.1,0.5,0.1h-0.1c0.8,0.1,1.6-0.1,2.4-0.5c0.7-0.4,1.3-1,1.7-1.7c0.2-0.3,0.3-0.6,0.3-0.9c0.1-0.3,0.1-0.7,0.1-1c0-0.3,0-0.7-0.1-1c-0.1-0.3-0.2-0.6-0.3-0.9c-0.3-0.5-0.6-0.9-1-1.3C13,4.4,12.5,4.2,12,4c-0.4-0.1-0.9-0.2-1.4-0.2c-0.5,0-1,0.1-1.4,0.2C8.5,4.3,7.9,4.7,7.5,5.3z M11.3,5.7v1.6h1.6v0.5v0.1v0.6h0h-0.1h-1.4v1.6h-0.4h-0.2h-0.6v0V8.5H8.5V7.3h1.6V5.7H11.3z"/></g></svg>',delete_row:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.75 13.83"><g><path d="M4.7,18.46l.12.08H19.73l.12-.08a.58.58,0,0,0,.22-.22l.08-.12,0-7.69-.08-.11a.77.77,0,0,0-.18-.18l-.11-.08-2.31,0-.08.28-.1.29a1.58,1.58,0,0,1-.12.29l-.14.34s0,0,.18,0H18.9v6H5.64v-6H7.35c.14,0,.2,0,.18,0l-.14-.34a2.85,2.85,0,0,1-.12-.29l-.1-.29-.07-.27-2.31,0-.11.08a.77.77,0,0,0-.18.18l-.08.11,0,7.69.08.12a.47.47,0,0,0,.09.12l.13.09ZM12.11,13a4,4,0,0,0,1.46-.21,4.51,4.51,0,0,0,1.31-.71A4,4,0,0,0,16.26,10a4.32,4.32,0,0,0-.08-2.54,4.34,4.34,0,0,0-1-1.52,4.15,4.15,0,0,0-1.54-1,4.34,4.34,0,0,0-1.35-.22A4.07,4.07,0,0,0,11,4.93,3.94,3.94,0,0,0,9.24,6.07,3.92,3.92,0,0,0,8.15,8.88a3.91,3.91,0,0,0,.12.95A4.16,4.16,0,0,0,12.11,13Zm2.35-4.14v.58H10.09V8.27h4.37v.58Z" transform="translate(-4.4 -4.71)"/></g></svg>',delete_column:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 13.81 15.74"><g><path d="M5.66,19.42l.12.08,7.69,0,.11-.08a.77.77,0,0,0,.18-.18l.08-.11,0-2.32-.15,0-.45-.15-.42-.18-.17-.07a1,1,0,0,0,0,.27v1.63h-6V5h6V6.62a.9.9,0,0,0,0,.26l.17-.07.42-.17a3.91,3.91,0,0,1,.45-.15l.15,0,0-2.32L13.75,4a.77.77,0,0,0-.18-.18l-.11-.08H5.79l-.13.07a.63.63,0,0,0-.21.22l-.08.12V19.08l.08.12a.47.47,0,0,0,.09.12.35.35,0,0,0,.12.1Zm9-3.67a4.16,4.16,0,0,0,2.36-.51,4.08,4.08,0,0,0,1.67-1.72,4,4,0,0,0,.35-.91,3.79,3.79,0,0,0,.1-1,4.71,4.71,0,0,0-.11-1,5,5,0,0,0-.3-.87,4.25,4.25,0,0,0-1-1.25,4.49,4.49,0,0,0-1.34-.81A4.26,4.26,0,0,0,15,7.48a3.88,3.88,0,0,0-1.41.25A4.32,4.32,0,0,0,11.86,9,4,4,0,0,0,11,10.94a4.4,4.4,0,0,0-.05.68,4.5,4.5,0,0,0,.05.68,3.93,3.93,0,0,0,.61,1.57,4.22,4.22,0,0,0,1.18,1.2,4.59,4.59,0,0,0,.48.27c.2.1.37.17.5.22a2.44,2.44,0,0,0,.45.12,4.61,4.61,0,0,0,.5.07Zm2.54-4.12v.58H12.87V11h4.37v.59Z" transform="translate(-5.37 -3.76)"/></g></svg>',fixed_column_width:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M6,5H18A1,1 0 0,1 19,6A1,1 0 0,1 18,7H6A1,1 0 0,1 5,6A1,1 0 0,1 6,5M21,2V4H3V2H21M15,8H17V22H15V8M7,8H9V22H7V8M11,8H13V22H11V8Z" /></svg>',rotate_left:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.8 15.8"><g><path d="M0.5,10.2c0,0.1,0,0.2,0,0.3v0.2l0,0c0.1,0.3,0.3,0.6,0.4,0.9l0,0C1,11.8,1.3,12,1.5,11.9h0.1h0.2h0.1c0.1-0.1,0.3-0.3,0.4-0.5v-0.2c0-0.1,0-0.2-0.1-0.3l0,0c-0.2-0.2-0.3-0.4-0.3-0.7l0,0C1.8,10,1.7,9.9,1.5,9.8c-0.1,0-0.2,0-0.3,0H0.9C0.7,9.9,0.6,10,0.5,10.2L0.5,10.2z"/><path d="M2.2,11.5L2.2,11.5L2.2,11.5z"/><path d="M5.9,3.6L5.9,3.6L5.9,3.6z"/><path d="M0.1,7.9c0,0.3,0,0.6,0,0.9l0,0l0,0l0,0l0,0c0,0.2,0.1,0.3,0.2,0.4l0,0c0.2,0.1,0.3,0.2,0.5,0.2l0,0l0,0c0.2,0,0.4-0.1,0.5-0.3l0,0c0-0.1,0.1-0.3,0.1-0.4V8.6l0,0c0-0.2,0-0.5,0-0.7l0,0c0-0.2-0.1-0.4-0.2-0.5C1.1,7.3,0.9,7.2,0.7,7.2S0.3,7.3,0.2,7.4C0.1,7.5,0,7.7,0.1,7.9z"/><path d="M1.9,12.7L1.9,12.7c0,0.2,0,0.4,0.2,0.5l0,0l0.2,0.3l0,0c0.2,0.1,0.3,0.2,0.5,0.4l0,0l0,0l0,0l0,0C2.9,14,3,14.1,3.2,14.1s0.4-0.1,0.5-0.2c0.1-0.2,0.2-0.3,0.2-0.5v-0.1c0-0.2-0.1-0.4-0.2-0.5l0,0l-0.4-0.4l-0.2-0.2l0,0C3,12.1,2.8,12,2.6,12l0,0c-0.2,0-0.4,0.1-0.5,0.2l0,0C2,12.3,1.9,12.5,1.9,12.7z"/><path d="M6.6,15c0,0.2,0.1,0.4,0.2,0.5c0.1,0.1,0.2,0.2,0.4,0.3l0,0c0.3,0,0.5,0,0.7,0h0.3l0,0c0.2,0,0.4-0.1,0.5-0.2c0.1-0.2,0.2-0.3,0.2-0.5l0,0l0,0c0-0.2-0.1-0.4-0.2-0.5l0,0c-0.1-0.1-0.3-0.2-0.5-0.2l0,0H7.9c-0.1,0-0.3,0-0.5,0l0,0H7.3c-0.2-0.1-0.3,0-0.5,0.1l0,0C6.7,14.6,6.6,14.8,6.6,15L6.6,15L6.6,15L6.6,15z"/><path d="M4.2,7.4C4,7.5,4,7.7,4,7.9c0,0.2,0,0.4,0.2,0.5l0,0l3.2,3.2l0,0c0.1,0.1,0.3,0.2,0.5,0.2s0.3-0.1,0.5-0.2l0,0l3.2-3.2l0,0c0.1-0.1,0.2-0.3,0.2-0.5c0-0.2-0.1-0.4-0.2-0.5l0,0C11.5,7.3,11,6.7,10,5.8l0,0L8.4,4.2l0,0C8.3,4.1,8.1,4,7.9,4S7.5,4.1,7.4,4.2L4.2,7.4L4.2,7.4z M6.8,9L5.7,7.9l2.2-2.2l2.3,2.2l-2.3,2.2C7.7,9.9,7.3,9.5,6.8,9L6.8,9z"/><path d="M4.1,14.1C4,14.2,4,14.3,4,14.4v0.2l0,0c0.1,0.1,0.2,0.3,0.4,0.4l0,0c0.3,0.1,0.6,0.2,0.9,0.4h0.1h0.1l0,0c0.2,0,0.3-0.1,0.5-0.1l0,0c0.2-0.1,0.3-0.3,0.3-0.4l0,0l0,0l0,0l0,0v-0.2c0-0.1-0.1-0.2-0.1-0.3l0,0C6.1,14.2,6,14.1,5.8,14l0,0c-0.3-0.1-0.5-0.2-0.8-0.2l0,0c-0.1-0.1-0.2-0.1-0.3-0.1H4.5C4.3,13.7,4.2,13.9,4.1,14.1z"/><path d="M9.3,14.4c0,0.1-0.1,0.3,0,0.4V15l0,0c0,0.1,0.1,0.3,0.5,0.4c0.1,0.1,0.3,0.1,0.4,0.1l0,0h0.1l0,0c0.3-0.1,0.6-0.2,0.9-0.3l0,0c0.1-0.1,0.2-0.2,0.3-0.4l0.1-0.3c0-0.1-0.1-0.2-0.1-0.3l0,0c-0.1-0.2-0.2-0.3-0.4-0.4l0,0h-0.3c-0.1,0-0.2,0-0.3,0l0,0c-0.2,0.1-0.5,0.2-0.8,0.3l0,0C9.5,14.1,9.4,14.2,9.3,14.4L9.3,14.4z"/><path d="M11.4,14.7L11.4,14.7L11.4,14.7z"/><path d="M9.5,15.3L9.5,15.3L9.5,15.3z"/><path d="M15.9,7.9c0-1-0.2-2-0.6-3l0,0c-0.4-1-1-1.9-1.7-2.6C12.8,1.6,12,1,11,0.6l0,0C10.1,0.2,9,0,8,0C7.3,0,6.5,0.1,5.8,0.3l0,0C5.2,0.5,4.6,0.8,4,1.1L3.1,0.2l0,0C2.9,0.1,2.8,0,2.6,0H2.4l0,0C2.2,0,2,0.2,1.9,0.4l0,0L0.1,4.9l0,0C0,5,0,5.1,0,5.2c0,0.2,0.1,0.4,0.2,0.5l0,0c0.2,0.1,0.3,0.2,0.5,0.2h0.1H1l0,0l4.7-1.8l0,0C5.9,4,6.1,3.8,6.1,3.6V3.4C6.1,3.2,6,3,5.9,2.9l0,0L5.1,2.1c0.4-0.2,0.8-0.4,1.3-0.5c0.5-0.1,1.1-0.2,1.7-0.2c0.9,0,1.7,0.2,2.5,0.5l0,0c0.8,0.3,1.5,0.8,2.1,1.4c0.6,0.6,1.1,1.3,1.4,2.1l0,0c0.3,0.8,0.5,1.6,0.5,2.5s-0.2,1.7-0.5,2.5l0,0c-0.3,0.8-0.8,1.5-1.4,2.1c-0.2,0.2-0.4,0.3-0.6,0.5l0,0c-0.2,0.1-0.3,0.3-0.3,0.5v0.1c0,0.1,0,0.3,0.1,0.4l0,0c0.1,0.2,0.3,0.3,0.5,0.3l0,0c0.1,0,0.3-0.1,0.4-0.2l0,0l0,0l0,0l0,0c0.2-0.2,0.5-0.4,0.7-0.6l0,0l0,0l0,0l0,0c0.7-0.8,1.3-1.6,1.7-2.6C15.6,10,15.8,9,15.9,7.9z M1.9,4C2,3.8,2.1,3.5,2.3,3.1l0,0L2.7,2l1.2,1.2L1.9,4z"/><path d="M6.8,15.5L6.8,15.5L6.8,15.5z"/></g></svg>',rotate_right:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.8 15.8"><g><path d="M9.9,15.3L9.9,15.3L9.9,15.3z"/><path d="M6.9,15.1L6.9,15.1c0,0.1,0.1,0.3,0.2,0.4l0,0c0.1,0.2,0.3,0.3,0.5,0.3l0,0h0.3c0.2,0,0.4,0,0.7,0l0,0c0.2-0.1,0.3-0.2,0.4-0.3c0.1-0.1,0.2-0.2,0.2-0.4V15c0-0.2-0.1-0.4-0.2-0.4c-0.2-0.1-0.3-0.2-0.5-0.2H8.4l0,0c-0.1,0-0.3,0-0.5,0H7.6l0,0c-0.2,0-0.4,0.1-0.5,0.2C7,14.7,6.9,14.9,6.9,15.1z"/><path d="M6.5,14.4L6.5,14.4L6.5,14.4z"/><path d="M5.8,5.8L5.8,5.8c-1,0.9-1.5,1.5-1.7,1.6l0,0C4,7.5,4,7.7,4,7.9c0,0.2,0,0.4,0.2,0.5l0,0l3.2,3.2l0,0c0.2,0.1,0.3,0.2,0.5,0.2s0.4-0.1,0.5-0.2l0,0l3.2-3.2l0,0c0.1-0.1,0.2-0.3,0.2-0.5c0-0.2-0.1-0.4-0.2-0.5l0,0L8.4,4.2C8.3,4.1,8.1,4,7.9,4C7.7,4,7.5,4.1,7.4,4.2l0,0L5.8,5.8z M5.6,7.9l2.3-2.2l2.2,2.2L9,9l0,0l0,0l0,0l0,0c-0.5,0.6-0.9,0.9-1.1,1.1L5.6,7.9z"/><path d="M9,15.5L9,15.5L9,15.5z"/><path d="M9.6,14.7v0.2l0,0l0,0l0,0l0,0c0.1,0.2,0.1,0.3,0.3,0.3c0.1,0.1,0.3,0.1,0.4,0.1l0,0h0.1h0.1c0.3-0.1,0.6-0.3,0.9-0.4l0,0c0.1-0.1,0.2-0.2,0.3-0.4l0,0v-0.2c0-0.1,0-0.2-0.1-0.3c-0.1-0.2-0.2-0.3-0.4-0.4H11c-0.1,0-0.2,0.1-0.3,0.1l0,0c-0.2,0.1-0.4,0.2-0.7,0.3l0,0l0,0c-0.1,0.1-0.3,0.2-0.4,0.4C9.6,14.5,9.6,14.6,9.6,14.7z"/><path d="M9,14.5L9,14.5L9,14.5z"/><path d="M9.6,14.4L9.6,14.4L9.6,14.4z"/><path d="M11.7,14L11.7,14L11.7,14z"/><path d="M15.6,7.4L15.6,7.4L15.6,7.4z"/><path d="M15,9.4c0.2,0,0.4,0,0.6-0.2l0,0c0.1-0.1,0.2-0.2,0.2-0.4l0,0l0,0l0,0l0,0c0-0.3,0-0.6,0-0.9c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.5-0.2s-0.4,0.1-0.5,0.2c-0.1,0.1-0.2,0.3-0.2,0.5l0,0c0,0.2,0,0.4,0,0.7l0,0v0.1c0,0.1,0,0.3,0.1,0.4l0,0C14.6,9.3,14.8,9.4,15,9.4L15,9.4L15,9.4z"/><path d="M14,12h0.1h0.2h0.1c0.2,0,0.5-0.2,0.6-0.4l0,0c0.2-0.3,0.3-0.6,0.4-0.9l0,0v-0.2c0-0.1-0.1-0.2-0.1-0.3c-0.1-0.2-0.2-0.3-0.4-0.4h-0.3c-0.1,0-0.2,0-0.3,0C14.2,9.9,14,10,14,10.3l0,0c-0.1,0.2-0.2,0.5-0.3,0.7l0,0c-0.1,0.1-0.1,0.2-0.1,0.3v0.2l0,0l0,0C13.6,11.6,13.8,11.8,14,12z"/><path d="M14.6,7.4L14.6,7.4L14.6,7.4z"/><path d="M4.4,14.2c-0.1,0.1-0.1,0.2-0.1,0.3l0.1,0.2c0,0.2,0.2,0.3,0.3,0.4l0,0c0.3,0.1,0.6,0.3,1.1,0.4l0,0h0.1l0,0c0.1,0,0.2-0.1,0.4-0.2c0.1,0,0.2-0.2,0.3-0.3l0,0v-0.2c0-0.1-0.1-0.3-0.2-0.4c-0.1-0.1-0.2-0.2-0.4-0.3l0,0c-0.2-0.1-0.5-0.2-0.7-0.3l0,0c-0.1,0-0.2,0-0.3,0H4.7l0,0C4.6,13.9,4.4,14,4.4,14.2L4.4,14.2z"/><path d="M11.9,13.3c0,0.2,0.1,0.4,0.2,0.6c0.1,0.1,0.3,0.2,0.5,0.2s0.4-0.1,0.5-0.2l0,0l0,0l0,0l0,0c0.1-0.1,0.3-0.3,0.4-0.4l0,0l0.2-0.3l0,0c0.1-0.2,0.2-0.3,0.2-0.5l0,0c0-0.2-0.1-0.4-0.2-0.5l0,0c-0.1-0.1-0.3-0.2-0.5-0.2l0,0c-0.2,0-0.4,0.1-0.5,0.2l0,0l-0.2,0.2l-0.4,0.4l0,0C12,13,11.9,13.1,11.9,13.3L11.9,13.3z"/><path d="M12.1,13.8L12.1,13.8L12.1,13.8z"/><path d="M11.9,13.3L11.9,13.3L11.9,13.3z"/><path d="M15.9,5.2c0-0.1-0.1-0.2-0.1-0.3l0,0L14,0.4l0,0C13.9,0.2,13.7,0,13.5,0l0,0l0,0h-0.2c-0.2,0-0.4,0.1-0.5,0.2l0,0l-0.9,0.9c-0.5-0.3-1.1-0.6-1.8-0.8l0,0C9.4,0.1,8.7,0,7.9,0c-1,0-2,0.2-3,0.6S3,1.6,2.3,2.3C1.6,3.1,1,3.9,0.6,4.9l0,0C0.2,5.8,0,6.8,0,7.9c0,1,0.2,2,0.6,3s0.9,1.8,1.7,2.6l0,0l0,0l0,0l0,0c0.2,0.2,0.5,0.4,0.7,0.6l0,0l0,0l0,0l0,0c0.2,0.1,0.3,0.2,0.5,0.2l0,0c0.2,0,0.4-0.1,0.6-0.3l0,0c0.1-0.1,0.1-0.3,0.1-0.4v-0.1l0,0C4.1,13.3,4,13.1,3.9,13l0,0c-0.2-0.1-0.4-0.3-0.6-0.5c-0.6-0.6-1.1-1.3-1.4-2.1l0,0C1.6,9.6,1.4,8.8,1.4,7.9s0.2-1.7,0.5-2.5l0,0c0.3-0.8,0.8-1.5,1.4-2.1c0.6-0.6,1.3-1.1,2.1-1.4l0,0C6.2,1.6,7,1.4,7.9,1.4c0.6,0,1.1,0.1,1.7,0.2c0.5,0.1,0.9,0.3,1.3,0.5l-0.8,0.8l0,0C10,3.1,9.9,3.2,9.9,3.4v0.2l0,0l0,0c0,0.2,0.2,0.4,0.4,0.5l0,0l4.5,1.8l0,0H15h0.1c0.2,0,0.4-0.1,0.5-0.2l0,0C15.7,5.6,15.8,5.4,15.9,5.2z M11.8,3.2L13,2l0.4,1.1l0,0c0.2,0.4,0.3,0.7,0.4,0.9L11.8,3.2z"/></g></svg>',mirror_horizontal:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 14.75 15.74"><g><path d="M13.75,3.76l5.9,15.74h-5.9V3.76ZM4.9,19.5,10.8,3.76V19.5H4.9Z" transform="translate(-4.9 -3.76)"/></g></svg>',mirror_vertical:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 14.75"><g><path d="M20.15,13.1,4.41,19V13.1H20.15ZM4.41,4.25l15.74,5.9H4.41V4.25Z" transform="translate(-4.41 -4.25)"/></g></svg>',checked:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.75 12.1"><g><path d="M4.59,12.23l.12.18L9.43,17.5a.58.58,0,0,0,.84,0L20,7.45h0a.58.58,0,0,0,0-.84l-.85-.85a.58.58,0,0,0-.84,0H18.2l-8.12,8.41a.29.29,0,0,1-.42,0l-3.4-3.63a.58.58,0,0,0-.84,0l-.85.85a.6.6,0,0,0-.14.21.51.51,0,0,0,0,.44c.05.06.1.13.16.19Z" transform="translate(-4.38 -5.58)"/></g></svg>',line_break:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19,6a1,1,0,0,0-1,1v4a1,1,0,0,1-1,1H7.41l1.3-1.29A1,1,0,0,0,7.29,9.29l-3,3a1,1,0,0,0-.21.33,1,1,0,0,0,0,.76,1,1,0,0,0,.21.33l3,3a1,1,0,0,0,1.42,0,1,1,0,0,0,0-1.42L7.41,14H17a3,3,0,0,0,3-3V7A1,1,0,0,0,19,6Z"/></svg>',audio:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M14,3.23V5.29C16.89,6.15 19,8.83 19,12C19,15.17 16.89,17.84 14,18.7V20.77C18,19.86 21,16.28 21,12C21,7.72 18,4.14 14,3.23M16.5,12C16.5,10.23 15.5,8.71 14,7.97V16C15.5,15.29 16.5,13.76 16.5,12M3,9V15H7L12,20V4L7,9H3Z" /></svg>',image_gallery:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="30 30 150 150"><g><path d="M152.775,120.548V51.651c0-12.271-9.984-22.254-22.254-22.254H43.727c-12.271,0-22.254,9.983-22.254,22.254v68.896c0,12.27,9.983,22.254,22.254,22.254h86.795C142.791,142.802,152.775,132.817,152.775,120.548z M36.394,51.651c0-4.042,3.291-7.333,7.333-7.333h86.795c4.042,0,7.332,3.291,7.332,7.333v23.917l-14.938-17.767c-1.41-1.678-3.487-2.649-5.68-2.658h-0.029c-2.184,0-4.255,0.954-5.674,2.613L76.709,98.519l-9.096-9.398c-1.427-1.474-3.392-2.291-5.448-2.273c-2.052,0.025-4.004,0.893-5.396,2.4L36.394,111.32V51.651z M41.684,127.585l20.697-22.416l9.312,9.622c1.461,1.511,3.489,2.334,5.592,2.27c2.101-0.066,4.075-1.013,5.44-2.612l34.436-40.308l20.693,24.613v21.794c0,4.042-3.29,7.332-7.332,7.332H43.727C43.018,127.88,42.334,127.775,41.684,127.585z M182.616,152.5V75.657c0-4.12-3.34-7.46-7.461-7.46c-4.119,0-7.46,3.34-7.46,7.46V152.5c0,4.112-3.347,7.46-7.461,7.46h-94c-4.119,0-7.46,3.339-7.46,7.459c0,4.123,3.341,7.462,7.46,7.462h94C172.576,174.881,182.616,164.841,182.616,152.5z"/></g></svg>',bookmark:'<svg viewBox="0 0 24 24"><path d="M17,3H7A2,2 0 0,0 5,5V21L12,18L19,21V5C19,3.89 18.1,3 17,3Z" /></svg>',download:'<svg viewBox="0 0 24 24"><path d="M2 12H4V17H20V12H22V17C22 18.11 21.11 19 20 19H4C2.9 19 2 18.11 2 17V12M12 15L17.55 9.54L16.13 8.13L13 11.25V2H11V11.25L7.88 8.13L6.46 9.55L12 15Z" /></svg>',more_text:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="10 10 180 180"><g><path d="M49.711,142.188h49.027c2.328,0.002,4.394,1.492,5.129,3.699l9.742,29.252c0.363,1.092,1.385,1.828,2.537,1.83l15.883,0.01c0.859,0,1.667-0.412,2.17-1.109s0.641-1.594,0.37-2.41l-16.625-50.045L86.503,28.953c-0.36-1.097-1.383-1.839-2.537-1.842H64.532c-1.153-0.001-2.178,0.736-2.542,1.831L13.847,173.457c-0.271,0.816-0.135,1.713,0.369,2.412c0.503,0.697,1.311,1.109,2.171,1.109h15.872c1.151,0,2.173-0.736,2.537-1.828l9.793-29.287C45.325,143.66,47.39,142.18,49.711,142.188L49.711,142.188z M53.493,119.098l15.607-46.9c0.744-2.196,2.806-3.674,5.125-3.674s4.381,1.478,5.125,3.674l15.607,46.904c0.537,1.621,0.263,3.402-0.736,4.789c-1.018,1.408-2.649,2.24-4.386,2.24H58.615c-1.736,0-3.368-0.832-4.386-2.24C53.23,122.504,52.956,120.721,53.493,119.098L53.493,119.098z M190.465,63.32c0-2.919-1.015-5.396-3.059-7.428c-2.029-2.031-4.496-3.047-7.383-3.047c-2.889,0-5.355,1.016-7.388,3.047c-2.029,2.032-3.056,4.498-3.056,7.386c0,2.889,1.026,5.354,3.056,7.385c2.032,2.032,4.499,3.059,7.388,3.059c2.887,0,5.354-1.026,7.383-3.059C189.45,68.633,190.465,66.178,190.465,63.32L190.465,63.32z M190.465,101.994c0-2.858-1.015-5.313-3.059-7.333c-2.029-2.042-4.496-3.047-7.383-3.047c-2.889,0-5.355,1.005-7.388,3.047c-2.029,2.021-3.056,4.486-3.056,7.376c0,2.887,1.026,5.352,3.056,7.395c2.032,2.021,4.499,3.047,7.388,3.047c2.887,0,5.354-1.025,7.383-3.047C189.45,107.389,190.465,104.914,190.465,101.994L190.465,101.994z M190.465,140.76c0-2.918-1.015-5.395-3.059-7.438c-2.029-2.041-4.496-3.047-7.383-3.047c-2.889,0-5.355,1.006-7.388,3.047c-2.029,2.043-3.056,4.52-3.056,7.438c0,2.922,1.026,5.398,3.056,7.439c2.032,2.021,4.499,3.047,7.388,3.047c2.887,0,5.354-1.025,7.383-3.047C189.45,146.158,190.465,143.682,190.465,140.76L190.465,140.76z"/></g></svg>',more_paragraph:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="10 10 180 180"><g><path d="M128.39,28.499H63.493c-25.558,0-46.354,20.796-46.354,46.354c0,25.559,20.796,46.353,46.354,46.353h9.271v55.625h18.542V47.04h9.271V176.83h18.543V47.04h9.271V28.499z M72.764,102.664h-9.271c-15.337,0-27.813-12.475-27.813-27.812c0-15.336,12.476-27.813,27.813-27.813h9.271V102.664z M190.465,63.32c0-2.919-1.015-5.396-3.059-7.428c-2.029-2.031-4.496-3.047-7.383-3.047c-2.889,0-5.355,1.016-7.388,3.047c-2.029,2.032-3.056,4.498-3.056,7.386c0,2.889,1.026,5.354,3.056,7.385c2.032,2.032,4.499,3.059,7.388,3.059c2.887,0,5.354-1.026,7.383-3.059C189.45,68.633,190.465,66.178,190.465,63.32L190.465,63.32z M190.465,101.994c0-2.858-1.015-5.313-3.059-7.333c-2.029-2.042-4.496-3.047-7.383-3.047c-2.889,0-5.355,1.005-7.388,3.047c-2.029,2.021-3.056,4.486-3.056,7.376c0,2.887,1.026,5.352,3.056,7.395c2.032,2.021,4.499,3.047,7.388,3.047c2.887,0,5.354-1.025,7.383-3.047C189.45,107.389,190.465,104.914,190.465,101.994L190.465,101.994z M190.465,140.76c0-2.918-1.015-5.395-3.059-7.438c-2.029-2.041-4.496-3.047-7.383-3.047c-2.889,0-5.355,1.006-7.388,3.047c-2.029,2.043-3.056,4.52-3.056,7.438c0,2.922,1.026,5.398,3.056,7.439c2.032,2.021,4.499,3.047,7.388,3.047c2.887,0,5.354-1.025,7.383-3.047C189.45,146.158,190.465,143.682,190.465,140.76L190.465,140.76z"/></g></svg>',more_plus:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="35 30 140 140"><g><path d="M137.215,102.045c0,3.498-2.835,6.332-6.333,6.332H24.549c-3.498,0-6.334-2.834-6.334-6.332l0,0c0-3.498,2.836-6.333,6.334-6.333h106.333C134.38,95.711,137.215,98.547,137.215,102.045L137.215,102.045z M77.715,161.545c-3.498,0-6.333-2.836-6.333-6.334V48.878c0-3.498,2.836-6.333,6.333-6.333l0,0c3.498,0,6.334,2.835,6.334,6.333v106.333C84.049,158.709,81.213,161.545,77.715,161.545L77.715,161.545z M190.465,63.32c0-2.919-1.015-5.396-3.059-7.428c-2.029-2.031-4.496-3.047-7.383-3.047c-2.889,0-5.355,1.016-7.388,3.047c-2.029,2.032-3.056,4.498-3.056,7.386c0,2.889,1.026,5.354,3.056,7.385c2.032,2.032,4.499,3.059,7.388,3.059c2.887,0,5.354-1.026,7.383-3.059C189.45,68.632,190.465,66.177,190.465,63.32L190.465,63.32z M190.465,101.993c0-2.858-1.015-5.313-3.059-7.333c-2.029-2.042-4.496-3.047-7.383-3.047c-2.889,0-5.355,1.005-7.388,3.047c-2.029,2.021-3.056,4.486-3.056,7.376c0,2.888,1.026,5.353,3.056,7.396c2.032,2.021,4.499,3.047,7.388,3.047c2.887,0,5.354-1.025,7.383-3.047C189.45,107.389,190.465,104.914,190.465,101.993L190.465,101.993z M190.465,140.76c0-2.918-1.015-5.395-3.059-7.438c-2.029-2.041-4.496-3.047-7.383-3.047c-2.889,0-5.355,1.006-7.388,3.047c-2.029,2.043-3.056,4.52-3.056,7.438c0,2.922,1.026,5.398,3.056,7.439c2.032,2.021,4.499,3.047,7.388,3.047c2.887,0,5.354-1.025,7.383-3.047C189.45,146.158,190.465,143.682,190.465,140.76L190.465,140.76z"/></g></svg>',more_horizontal:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.76 3.58"><g><path d="M4.64,10.73a1.84,1.84,0,0,1,.65-.65,1.76,1.76,0,0,1,1.79,0A1.79,1.79,0,0,1,8,11.63a1.84,1.84,0,0,1-.25.9,1.69,1.69,0,0,1-.65.65,1.8,1.8,0,0,1-2.69-1.55A2.08,2.08,0,0,1,4.64,10.73Zm6.09,0a1.84,1.84,0,0,1,.65-.65,1.78,1.78,0,0,1,2.67,1.55,1.73,1.73,0,0,1-.24.9,1.84,1.84,0,0,1-.65.65,1.76,1.76,0,0,1-1.79,0,1.79,1.79,0,0,1-.64-2.44Zm6.08,0a1.69,1.69,0,0,1,.65-.65,1.76,1.76,0,0,1,1.79,0,1.79,1.79,0,0,1,.9,1.54,1.73,1.73,0,0,1-.24.9,1.84,1.84,0,0,1-.65.65,1.8,1.8,0,0,1-2.69-1.55A2,2,0,0,1,16.81,10.73Z" transform="translate(-4.39 -9.84)"/></g></svg>',more_vertical:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 3.94 15.75"><g><path d="M12.28,7.69a1.92,1.92,0,0,1-1.39-.58,2,2,0,0,1-.58-1.39,1.92,1.92,0,0,1,.58-1.39,2,2,0,0,1,1.39-.58,1.92,1.92,0,0,1,1.39.58,2,2,0,0,1,.58,1.39,1.92,1.92,0,0,1-.58,1.39,2,2,0,0,1-1.39.58Zm0,2a1.92,1.92,0,0,1,1.39.58,2,2,0,0,1,.58,1.39A1.92,1.92,0,0,1,13.67,13a2,2,0,0,1-1.39.58A1.92,1.92,0,0,1,10.89,13a2,2,0,0,1-.58-1.39,2,2,0,0,1,2-2Zm0,5.9a1.92,1.92,0,0,1,1.39.58,2,2,0,0,1,.58,1.39,1.92,1.92,0,0,1-.58,1.39,2,2,0,0,1-1.39.58,1.92,1.92,0,0,1-1.39-.58,2,2,0,0,1-.58-1.39,1.92,1.92,0,0,1,.58-1.39,1.94,1.94,0,0,1,1.39-.58Z" transform="translate(-10.31 -3.75)"/></g></svg>',attachment:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 8.38 15.68"><g><path d="M15.23,6h1v9.78a3.88,3.88,0,0,1-1.31,2.45,4,4,0,0,1-6.57-2.45V7A3,3,0,0,1,9.2,4.89a3,3,0,0,1,5,2.09v8.31a1.92,1.92,0,0,1-.58,1.39,2,2,0,0,1-1.39.58,1.92,1.92,0,0,1-1.39-.58,2,2,0,0,1-.58-1.39V8h1v7.32a1,1,0,0,0,.29.69,1,1,0,0,0,.69.28A.9.9,0,0,0,13,16a1,1,0,0,0,.29-.69V7a1.92,1.92,0,0,0-.58-1.39A2,2,0,0,0,11.27,5a1.92,1.92,0,0,0-1.39.58A2,2,0,0,0,9.33,7v8.31a3,3,0,1,0,5.9,0V6Z" transform="translate(-8.08 -3.78)"/></g></svg>',map:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 11.7 15.62"><g><path d="M12.05,12.42a2.93,2.93,0,1,1,2.07-5A2.88,2.88,0,0,1,15,9.49a3,3,0,0,1-.86,2.07,2.89,2.89,0,0,1-2.07.86Zm0-5.36a2.43,2.43,0,0,0-1.72,4.16,2.48,2.48,0,0,0,1.72.72,2.44,2.44,0,0,0,0-4.88Zm0-3.3A5.84,5.84,0,0,1,17.9,9.62a9.94,9.94,0,0,1-1.73,5A33.59,33.59,0,0,1,12.84,19a1.52,1.52,0,0,1-.23.2,1,1,0,0,1-.55.2h0a1,1,0,0,1-.55-.2,1.52,1.52,0,0,1-.23-.2,33.59,33.59,0,0,1-3.33-4.32,9.93,9.93,0,0,1-1.72-5,5.84,5.84,0,0,1,5.85-5.86ZM12,18.34l.08.05.06-.06a35.58,35.58,0,0,0,3.06-3.93,9.35,9.35,0,0,0,1.74-4.77,4.88,4.88,0,0,0-4.88-4.88A4.79,4.79,0,0,0,8.6,6.17,4.84,4.84,0,0,0,7.17,9.62,9.29,9.29,0,0,0,8.91,14.4,36,36,0,0,0,12,18.34Z" transform="translate(-6.2 -3.76)"/></g></svg>',magic_stick:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.73 15.75"><g><path d="M19.86,19.21a1,1,0,0,0,.28-.68,1,1,0,0,0-.28-.7L13,10.93a1,1,0,0,0-.7-.28,1,1,0,0,0-.68,1.65l6.9,6.9a1,1,0,0,0,.69.29.93.93,0,0,0,.69-.28ZM9.19,8.55a3,3,0,0,0,1.68,0,14.12,14.12,0,0,0,1.41-.32A11.26,11.26,0,0,0,10.8,7.06c-.56-.36-.86-.56-.91-.58S10,5.91,10,5.11s0-1.26-.15-1.37a4.35,4.35,0,0,0-1.19.71c-.53.4-.81.62-.87.68a9,9,0,0,0-2-.6,6.84,6.84,0,0,0-.76-.09s0,.27.08.77a8.6,8.6,0,0,0,.61,2q-.09.09-.69.87a3.59,3.59,0,0,0-.68,1.17c.12.17.57.23,1.36.15S7,9.26,7.15,9.23s.21.36.57.91a10.49,10.49,0,0,0,1.14,1.48c0-.1.14-.57.31-1.4a3,3,0,0,0,0-1.67Z" transform="translate(-4.41 -3.74)"/></g></svg>',empty_file:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12.78 15.75"><g><path d="M14.73,3.76,18.67,7.7v9.84a2,2,0,0,1-2,2H7.84a1.89,1.89,0,0,1-1.38-.58,2,2,0,0,1-.57-1.39V5.73a1.93,1.93,0,0,1,.57-1.38,2,2,0,0,1,1.38-.58h6.62l.26,0v0Zm2.95,4.92h-2a1.93,1.93,0,0,1-1.38-.57,2,2,0,0,1-.58-1.4V6.17c0-.36,0-.84,0-1.43H7.85a1,1,0,0,0-.7.29,1,1,0,0,0-.29.7V17.54a1,1,0,0,0,.29.69,1,1,0,0,0,.69.29h8.85a1,1,0,0,0,.71-.29.92.92,0,0,0,.28-.69Zm0-1L14.73,4.74v2A1,1,0,0,0,15,7.4a1,1,0,0,0,.69.29Z" transform="translate(-5.89 -3.76)"/></g></svg>'},N=n("P6u4"),T=n.n(N);const L={_d:null,_w:null,isIE:null,isIE_Edge:null,isOSX_IOS:null,_propertiesInit:function(){this._d||(this._d=document,this._w=window,this.isIE=navigator.userAgent.indexOf("Trident")>-1,this.isIE_Edge=navigator.userAgent.indexOf("Trident")>-1||navigator.appVersion.indexOf("Edge")>-1,this.isOSX_IOS=/(Mac|iPhone|iPod|iPad)/.test(navigator.platform))},_allowedEmptyNodeList:".se-component, pre, blockquote, hr, li, table, img, iframe, video, audio, canvas",_HTMLConvertor:function(e){const t={"&":"&amp;"," ":"&nbsp;","'":"&apos;",'"':"&quot;","<":"&lt;",">":"&gt;"};return e.replace(/&|\u00A0|'|"|<|>/g,(function(e){return"string"==typeof t[e]?t[e]:e}))},zeroWidthSpace:String.fromCharCode(8203),zeroWidthRegExp:new RegExp(String.fromCharCode(8203),"g"),onlyZeroWidthRegExp:new RegExp("^"+String.fromCharCode(8203)+"+$"),onlyZeroWidthSpace:function(e){return"string"!=typeof e&&(e=e.textContent),""===e||this.onlyZeroWidthRegExp.test(e)},getXMLHttpRequest:function(){if(!this._w.ActiveXObject)return this._w.XMLHttpRequest?new XMLHttpRequest:null;try{return new ActiveXObject("Msxml2.XMLHTTP")}catch(e){try{return new ActiveXObject("Microsoft.XMLHTTP")}catch(e){return null}}},createElement:function(e){return this._d.createElement(e)},createTextNode:function(e){return this._d.createTextNode(e||"")},HTMLEncoder:function(e){const t={"<":"$lt;",">":"$gt;"};return e.replace(/<|>/g,(function(e){return"string"==typeof t[e]?t[e]:e}))},HTMLDecoder:function(e){const t={"$lt;":"<","$gt;":">"};return e.replace(/\$lt;|\$gt;/g,(function(e){return"string"==typeof t[e]?t[e]:e}))},hasOwn:function(e,t){return this._hasOwn.call(e,t)},_hasOwn:Object.prototype.hasOwnProperty,getIncludePath:function(e,t){let n="";const i=[],l="js"===t?"script":"link",o="js"===t?"src":"href";let s="(?:";for(let t=0,n=e.length;t<n;t++)s+=e[t]+(t<n-1?"|":")");const a=new this._w.RegExp("(^|.*[\\/])"+s+"(\\.[^\\/]+)?."+t+"(?:\\?.*|;.*)?$","i"),r=new this._w.RegExp(".+\\."+t+"(?:\\?.*|;.*)?$","i");for(let e=this._d.getElementsByTagName(l),t=0;t<e.length;t++)r.test(e[t][o])&&i.push(e[t]);for(let e=0;e<i.length;e++){let t=i[e][o].match(a);if(t){n=t[0];break}}if(""===n&&(n=i.length>0?i[0][o]:""),-1===n.indexOf(":/")&&"//"!==n.slice(0,2)&&(n=0===n.indexOf("/")?location.href.match(/^.*?:\/\/[^\/]*/)[0]+n:location.href.match(/^[^\?]*\/(?:)/)[0]+n),!n)throw"[SUNEDITOR.util.getIncludePath.fail] The SUNEDITOR installation path could not be automatically detected. (name: +"+name+", extension: "+t+")";return n},getPageStyle:function(e){let t="";const n=(e||this._d).styleSheets;for(let e,i=0,l=n.length;i<l;i++){try{e=n[i].cssRules}catch(e){continue}if(e)for(let n=0,i=e.length;n<i;n++)t+=e[n].cssText}return t},getIframeDocument:function(e){let t=e.contentWindow||e.contentDocument;return t.document&&(t=t.document),t},getAttributesToString:function(e,t){if(!e.attributes)return"";const n=e.attributes;let i="";for(let e=0,l=n.length;e<l;e++)t&&t.indexOf(n[e].name)>-1||(i+=n[e].name+'="'+n[e].value+'" ');return i},getByteLength:function(e){if(!e||!e.toString)return 0;e=e.toString();const t=this._w.encodeURIComponent;let n,i;return this.isIE_Edge?(i=this._w.unescape(t(e)).length,n=0,null!==t(e).match(/(%0A|%0D)/gi)&&(n=t(e).match(/(%0A|%0D)/gi).length),i+n):(i=new this._w.TextEncoder("utf-8").encode(e).length,n=0,null!==t(e).match(/(%0A|%0D)/gi)&&(n=t(e).match(/(%0A|%0D)/gi).length),i+n)},isWysiwygDiv:function(e){return e&&1===e.nodeType&&(this.hasClass(e,"se-wrapper-wysiwyg")||/^BODY$/i.test(e.nodeName))},isNonEditable:function(e){return e&&1===e.nodeType&&"false"===e.getAttribute("contenteditable")},isTextStyleElement:function(e){return e&&3!==e.nodeType&&/^(strong|span|font|b|var|i|em|u|ins|s|strike|del|sub|sup|mark|a|label|code|summary)$/i.test(e.nodeName)},isFormatElement:function(e){return e&&1===e.nodeType&&(/^(P|DIV|H[1-6]|PRE|LI|TH|TD|DETAILS)$/i.test(e.nodeName)||this.hasClass(e,"(\\s|^)__se__format__replace_.+(\\s|$)|(\\s|^)__se__format__free_.+(\\s|$)"))&&!this.isComponent(e)&&!this.isWysiwygDiv(e)},isRangeFormatElement:function(e){return e&&1===e.nodeType&&(/^(BLOCKQUOTE|OL|UL|FIGCAPTION|TABLE|THEAD|TBODY|TR|TH|TD|DETAILS)$/i.test(e.nodeName)||this.hasClass(e,"(\\s|^)__se__format__range_.+(\\s|$)"))},isClosureRangeFormatElement:function(e){return e&&1===e.nodeType&&(/^(TH|TD)$/i.test(e.nodeName)||this.hasClass(e,"(\\s|^)__se__format__range__closure_.+(\\s|$)"))},isFreeFormatElement:function(e){return e&&1===e.nodeType&&(/^PRE$/i.test(e.nodeName)||this.hasClass(e,"(\\s|^)__se__format__free_.+(\\s|$)"))&&!this.isComponent(e)&&!this.isWysiwygDiv(e)},isClosureFreeFormatElement:function(e){return e&&1===e.nodeType&&this.hasClass(e,"(\\s|^)__se__format__free__closure_.+(\\s|$)")},isComponent:function(e){return e&&(/se-component/.test(e.className)||/^(TABLE|HR)$/.test(e.nodeName))},isUneditableComponent:function(e){return e&&this.hasClass(e,"__se__uneditable")},isMediaComponent:function(e){return e&&/se-component/.test(e.className)},isNotCheckingNode:function(e){return e&&/katex|__se__tag/.test(e.className)},getFormatElement:function(e,t){if(!e)return null;for(t||(t=function(){return!0});e;){if(this.isWysiwygDiv(e))return null;if(this.isRangeFormatElement(e)&&e.firstElementChild,this.isFormatElement(e)&&t(e))return e;e=e.parentNode}return null},getRangeFormatElement:function(e,t){if(!e)return null;for(t||(t=function(){return!0});e;){if(this.isWysiwygDiv(e))return null;if(this.isRangeFormatElement(e)&&!/^(THEAD|TBODY|TR)$/i.test(e.nodeName)&&t(e))return e;e=e.parentNode}return null},getFreeFormatElement:function(e,t){if(!e)return null;for(t||(t=function(){return!0});e;){if(this.isWysiwygDiv(e))return null;if(this.isFreeFormatElement(e)&&t(e))return e;e=e.parentNode}return null},getClosureFreeFormatElement:function(e,t){if(!e)return null;for(t||(t=function(){return!0});e;){if(this.isWysiwygDiv(e))return null;if(this.isClosureFreeFormatElement(e)&&t(e))return e;e=e.parentNode}return null},copyTagAttributes:function(e,t){t.style.cssText&&(e.style.cssText+=t.style.cssText);const n=t.classList;for(let t=0,i=n.length;t<i;t++)this.addClass(e,n[t]);e.style.cssText||e.removeAttribute("style"),e.className.trim()||e.removeAttribute("class")},copyFormatAttributes:function(e,t){(t=t.cloneNode(!1)).className=t.className.replace(/(\s|^)__se__format__[^\s]+/g,""),this.copyTagAttributes(e,t)},getArrayItem:function(e,t,n){if(!e||0===e.length)return null;t=t||function(){return!0};const i=[];for(let l,o=0,s=e.length;o<s;o++)if(l=e[o],t(l)){if(!n)return l;i.push(l)}return n?i:null},getArrayIndex:function(e,t){let n=-1;for(let i=0,l=e.length;i<l;i++)if(e[i]===t){n=i;break}return n},nextIdx:function(e,t){let n=this.getArrayIndex(e,t);return-1===n?-1:n+1},prevIdx:function(e,t){let n=this.getArrayIndex(e,t);return-1===n?-1:n-1},getPositionIndex:function(e){let t=0;for(;e=e.previousSibling;)t+=1;return t},getNodePath:function(e,t,n){const i=[];let l=!0;return this.getParentElement(e,function(e){if(e===t&&(l=!1),l&&!this.isWysiwygDiv(e)){if(n&&3===e.nodeType){let t=null,i=null;n.s=n.e=0;let l=e.previousSibling;for(;l&&3===l.nodeType;)i=l.textContent.replace(this.zeroWidthRegExp,""),n.s+=i.length,e.textContent=i+e.textContent,t=l,l=l.previousSibling,this.removeItem(t);let o=e.nextSibling;for(;o&&3===o.nodeType;)i=o.textContent.replace(this.zeroWidthRegExp,""),n.e+=i.length,e.textContent+=i,t=o,o=o.nextSibling,this.removeItem(t)}i.push(e)}return!1}.bind(this)),i.map(this.getPositionIndex).reverse()},getNodeFromPath:function(e,t){let n,i=t;for(let t=0,l=e.length;t<l&&(n=i.childNodes,0!==n.length);t++)i=n.length<=e[t]?n[n.length-1]:n[e[t]];return i},isSameAttributes:function(e,t){if(3===e.nodeType&&3===t.nodeType)return!0;if(3===e.nodeType||3===t.nodeType)return!1;const n=e.style,i=t.style;let l=0;for(let e=0,t=n.length;e<t;e++)n[n[e]]===i[n[e]]&&l++;const o=e.classList,s=t.classList,a=this._w.RegExp;let r=0;for(let e=0,t=o.length;e<t;e++)a("(s|^)"+o[e]+"(s|$)").test(s.value)&&r++;return l===i.length&&l===n.length&&r===s.length&&r===o.length},isEmptyLine:function(e){return!e||!e.parentNode||!e.querySelector("IMG, IFRAME, AUDIO, VIDEO, CANVAS, TABLE")&&this.onlyZeroWidthSpace(e.textContent)},isList:function(e){return e&&/^(OL|UL)$/i.test("string"==typeof e?e:e.nodeName)},isListCell:function(e){return e&&/^LI$/i.test("string"==typeof e?e:e.nodeName)},isTable:function(e){return e&&/^(TABLE|THEAD|TBODY|TR|TH|TD)$/i.test("string"==typeof e?e:e.nodeName)},isCell:function(e){return e&&/^(TD|TH)$/i.test("string"==typeof e?e:e.nodeName)},isBreak:function(e){return e&&/^BR$/i.test("string"==typeof e?e:e.nodeName)},isAnchor:function(e){return e&&/^A$/i.test("string"==typeof e?e:e.nodeName)},isMedia:function(e){return e&&/^(IMG|IFRAME|AUDIO|VIDEO|CANVAS)$/i.test("string"==typeof e?e:e.nodeName)},isNumber:function(e){return!!e&&/^-?\d+(\.\d+)?$/.test(e+"")},getNumber:function(e,t){if(!e)return 0;let n=(e+"").match(/-?\d+(\.\d+)?/);return n&&n[0]?(n=n[0],t<0?1*n:0===t?this._w.Math.round(1*n):1*(1*n).toFixed(t)):0},getListChildren:function(e,t){const n=[];return e&&e.children&&0!==e.children.length?(t=t||function(){return!0},function i(l){if(e!==l&&t(l)&&n.push(l),l.children)for(let e=0,t=l.children.length;e<t;e++)i(l.children[e])}(e),n):n},getListChildNodes:function(e,t){const n=[];return e&&0!==e.childNodes.length?(t=t||function(){return!0},function i(l){e!==l&&t(l)&&n.push(l);for(let e=0,t=l.childNodes.length;e<t;e++)i(l.childNodes[e])}(e),n):n},getElementDepth:function(e){if(!e||this.isWysiwygDiv(e))return-1;let t=0;for(e=e.parentNode;e&&!this.isWysiwygDiv(e);)t+=1,e=e.parentNode;return t},compareElements:function(e,t){let n=e,i=t;for(;n&&i&&n.parentNode!==i.parentNode;)n=n.parentNode,i=i.parentNode;if(!n||!i)return{ancestor:null,a:e,b:t,result:0};const l=n.parentNode.childNodes,o=this.getArrayIndex(l,n),s=this.getArrayIndex(l,i);return{ancestor:n.parentNode,a:n,b:i,result:o>s?1:o<s?-1:0}},getParentElement:function(e,t){let n;if("function"==typeof t)n=t;else{let e;/^\./.test(t)?(e="className",t=t.split(".")[1]):/^#/.test(t)?(e="id",t="^"+t.split("#")[1]+"$"):/^:/.test(t)?(e="name",t="^"+t.split(":")[1]+"$"):(e="nodeName",t="^"+t+"$");const i=new this._w.RegExp(t,"i");n=function(t){return i.test(t[e])}}for(;e&&!n(e);){if(this.isWysiwygDiv(e))return null;e=e.parentNode}return e},getChildElement:function(e,t,n){let i;if("function"==typeof t)i=t;else{let e;/^\./.test(t)?(e="className",t=t.split(".")[1]):/^#/.test(t)?(e="id",t="^"+t.split("#")[1]+"$"):/^:/.test(t)?(e="name",t="^"+t.split(":")[1]+"$"):(e="nodeName",t="^"+("text"===t?"#"+t:t)+"$");const n=new this._w.RegExp(t,"i");i=function(t){return n.test(t[e])}}const l=this.getListChildNodes(e,(function(e){return i(e)}));return l[n?l.length-1:0]},getEdgeChildNodes:function(e,t){if(e){for(t||(t=e);e&&1===e.nodeType&&e.childNodes.length>0&&!this.isBreak(e);)e=e.firstChild;for(;t&&1===t.nodeType&&t.childNodes.length>0&&!this.isBreak(t);)t=t.lastChild;return{sc:e,ec:t||e}}},getOffset:function(e,t){let n=0,i=0,l=3===e.nodeType?e.parentElement:e;const o=this.getParentElement(e,this.isWysiwygDiv.bind(this));for(;l&&!this.hasClass(l,"se-container")&&l!==o;)n+=l.offsetLeft,i+=l.offsetTop,l=l.offsetParent;const s=t&&/iframe/i.test(t.nodeName);return{left:n+(s?t.parentElement.offsetLeft:0),top:i-(o?o.scrollTop:0)+(s?t.parentElement.offsetTop:0)}},getOverlapRangeAtIndex:function(e,t,n,i){if(e<=i?t<n:t>n)return 0;const l=(e>n?e:n)-(t<i?t:i);return(l<0?-1*l:l)+1},changeTxt:function(e,t){e&&t&&(e.textContent=t)},changeElement:function(e,t){if("string"==typeof t)if(e.outerHTML)e.outerHTML=t;else{const n=this.createElement("DIV");n.innerHTML=t,t=n.firstChild,e.parentNode.replaceChild(t,e)}else 1===t.nodeType&&e.parentNode.replaceChild(t,e)},setStyle:function(e,t,n){e.style[t]=n,n||e.style.cssText||e.removeAttribute("style")},hasClass:function(e,t){if(e)return new this._w.RegExp(t).test(e.className)},addClass:function(e,t){if(!e)return;new this._w.RegExp("(\\s|^)"+t+"(\\s|$)").test(e.className)||(e.className+=(e.className.length>0?" ":"")+t)},removeClass:function(e,t){if(!e)return;const n=new this._w.RegExp("(\\s|^)"+t+"(\\s|$)");e.className=e.className.replace(n," ").trim(),e.className.trim()||e.removeAttribute("class")},toggleClass:function(e,t){if(!e)return;let n=!1;const i=new this._w.RegExp("(\\s|^)"+t+"(\\s|$)");return i.test(e.className)?e.className=e.className.replace(i," ").trim():(e.className+=" "+t,n=!0),e.className.trim()||e.removeAttribute("class"),n},setDisabledButtons:function(e,t){for(let n=0,i=t.length;n<i;n++)t[n].disabled=e},removeItem:function(e){e&&("function"==typeof e.remove?e.remove():e.parentNode&&e.parentNode.removeChild(e))},removeItemAllParents:function(e,t,n){if(!e)return null;let i=null;return t||(t=function(e){if(e===n||this.isComponent(e))return!1;const t=e.textContent.trim();return 0===t.length||/^(\n|\u200B)+$/.test(t)}.bind(this)),function e(n){if(!L.isWysiwygDiv(n)){const l=n.parentNode;l&&t(n)&&(i={sc:n.previousElementSibling,ec:n.nextElementSibling},L.removeItem(n),e(l))}}(e),i},detachNestedList:function(e,t){const n=this._deleteNestedList(e);let i,l,o;if(n){i=n.cloneNode(!1),l=n.childNodes;const t=this.getPositionIndex(e);for(;l[t];)i.appendChild(l[t])}else i=e;if(t)o=this.getListChildren(i,function(e){return this.isListCell(e)&&!e.previousElementSibling}.bind(this));else{const t=this.getElementDepth(e)+2;o=this.getListChildren(e,function(e){return this.isListCell(e)&&!e.previousElementSibling&&this.getElementDepth(e)===t}.bind(this))}for(let e=0,t=o.length;e<t;e++)this._deleteNestedList(o[e]);return n&&(n.parentNode.insertBefore(i,n.nextSibling),l&&0===l.length&&this.removeItem(n)),i===e?i.parentNode:i},_deleteNestedList:function(e){const t=e.parentNode;let n,i,l,o,s,a=t,r=a.parentNode;for(;this.isListCell(r);){for(o=this.getPositionIndex(e),n=r.nextElementSibling,i=r.parentNode,l=a;l;){if(a=a.nextSibling,this.isList(l)){for(s=l.childNodes;s[o];)i.insertBefore(s[o],n);0===s.length&&this.removeItem(l)}else i.appendChild(l);l=a}a=i,r=i.parentNode}return 0===t.children.length&&this.removeItem(t),i},splitElement:function(e,t,n){const i=e.parentNode;let l,o,s,a=0,r=!0;if((!n||n<0)&&(n=0),3===e.nodeType){if(a=this.getPositionIndex(e),t>=0){e.splitText(t);const n=this.getNodeFromPath([a+1],i);this.onlyZeroWidthSpace(n)&&(n.data=this.zeroWidthSpace)}}else 1===e.nodeType&&(e.previousSibling?e=e.previousSibling:this.getElementDepth(e)===n&&(r=!1));let c=e;for(;this.getElementDepth(c)>n;)for(a=this.getPositionIndex(c)+1,c=c.parentNode,s=l,l=c.cloneNode(!1),o=c.childNodes,s&&(this.isListCell(l)&&this.isList(s)&&s.firstElementChild?(l.innerHTML=s.firstElementChild.innerHTML,L.removeItem(s.firstElementChild),s.children.length>0&&l.appendChild(s)):l.appendChild(s));o[a];)l.appendChild(o[a]);c.childNodes.length<=1&&(!c.firstChild||0===c.firstChild.textContent.length)&&(c.innerHTML="<br>");const d=c.parentNode;return r&&(c=c.nextSibling),l?(this.mergeSameTags(l,null,!1),this.mergeNestedTags(l,function(e){return this.isList(e)}.bind(this)),l.childNodes.length>0?d.insertBefore(l,c):l=c,0===i.childNodes.length&&this.removeItem(i),l):c},mergeSameTags:function(e,t,n){const i=this,l=t?t.length:0;let o=null;return l&&(o=this._w.Array.apply(null,new this._w.Array(l)).map(this._w.Number.prototype.valueOf,0)),function e(s,a,r){const c=s.childNodes;for(let d,u,h=0,p=c.length;h<p&&(d=c[h],u=c[h+1],d);h++)if(n&&i._isIgnoreNodeChange(d)||!n&&(i.isTable(d)||i.isListCell(d)||i.isFormatElement(d)&&!i.isFreeFormatElement(d)))(i.isTable(d)||i.isListCell(d))&&e(d,a+1,h);else{if(1===p&&s.nodeName===d.nodeName&&s.parentNode){if(l){let e,n,o,r,c;for(let u=0;u<l;u++)if(e=t[u],e&&e[a]===h){for(n=d,o=s,r=a,c=!0;r>=0;){if(i.getArrayIndex(o.childNodes,n)!==e[r]){c=!1;break}n=d.parentNode,o=n.parentNode,r--}c&&(e.splice(a,1),e[a]=h)}}i.copyTagAttributes(d,s),s.parentNode.insertBefore(d,s),i.removeItem(s)}if(!u){1===d.nodeType&&e(d,a+1,h);break}if(d.nodeName===u.nodeName&&i.isSameAttributes(d,u)&&d.href===u.href){const e=d.childNodes;let n=0;for(let t=0,i=e.length;t<i;t++)e[t].textContent.length>0&&n++;const s=d.lastChild,c=u.firstChild;let p=0;if(s&&c){const e=3===s.nodeType&&3===c.nodeType;p=s.textContent.length;let i=s.previousSibling;for(;i&&3===i.nodeType;)p+=i.textContent.length,i=i.previousSibling;if(n>0&&3===s.nodeType&&3===c.nodeType&&(s.textContent.length>0||c.textContent.length>0)&&n--,l){let i=null;for(let d=0;d<l;d++)if(i=t[d],i&&i[a]>h){if(a>0&&i[a-1]!==r)continue;i[a]-=1,i[a+1]>=0&&i[a]===h&&(i[a+1]+=n,e&&s&&3===s.nodeType&&c&&3===c.nodeType&&(o[d]+=p))}}}if(3===d.nodeType){if(p=d.textContent.length,d.textContent+=u.textContent,l){let e=null;for(let i=0;i<l;i++)if(e=t[i],e&&e[a]>h){if(a>0&&e[a-1]!==r)continue;e[a]-=1,e[a+1]>=0&&e[a]===h&&(e[a+1]+=n,o[i]+=p)}}}else d.innerHTML+=u.innerHTML;i.removeItem(u),h--}else 1===d.nodeType&&e(d,a+1,h)}}(e,0,0),o},mergeNestedTags:function(e,t){"string"==typeof t?t=function(e){return this.test(e.tagName)}.bind(new this._w.RegExp("^("+(t||".+")+")$","i")):"function"!=typeof t&&(t=function(){return!0}),function e(n){let i=n.children;if(1===i.length&&i[0].nodeName===n.nodeName&&t(n)){const e=i[0];for(i=e.children;i[0];)n.appendChild(i[0]);n.removeChild(e)}for(let t=0,i=n.children.length;t<i;t++)e(n.children[t])}(e)},removeEmptyNode:function(e,t){const n=this;t&&(t=n.getParentElement(t,(function(t){return e===t.parentElement}))),function i(l){if(n._notTextNode(l)||l===t||n.isNonEditable(l))return 0;if(l===e||!n.onlyZeroWidthSpace(l.textContent)||l.firstChild&&n.isBreak(l.firstChild)||l.querySelector(n._allowedEmptyNodeList)){const e=l.children;for(let t=0,l=e.length,o=0;t<l;t++)e[t+o]&&!n.isComponent(e[t+o])&&(o+=i(e[t+o]))}else if(l.parentNode)return l.parentNode.removeChild(l),-1;return 0}(e),0===e.childNodes.length&&(e.innerHTML="<br>")},htmlRemoveWhiteSpace:function(e){return e?e.trim().replace(/<\/?(?!strong|span|font|b|var|i|em|u|ins|s|strike|del|sub|sup|mark|a|label|code|summary)[^>^<]+>\s+(?=<)/gi,(function(e){return e.trim()})):""},sortByDepth:function(e,t){const n=t?1:-1,i=-1*n;e.sort(function(e,t){return this.isListCell(e)&&this.isListCell(t)?(e=this.getElementDepth(e))>(t=this.getElementDepth(t))?n:e<t?i:0:0}.bind(this))},_isIgnoreNodeChange:function(e){return e&&3!==e.nodeType&&(this.isNonEditable(e)||!this.isTextStyleElement(e))},_isMaintainedNode:function(e){return e&&3!==e.nodeType&&/^(a|label|code|summary)$/i.test("string"==typeof e?e:e.nodeName)},_isSizeNode:function(e){return e&&3!==e.nodeType&&this.isTextStyleElement(e)&&!!e.style.fontSize},_notTextNode:function(e){return e&&3!==e.nodeType&&(this.isComponent(e)||/^(br|input|select|canvas|img|iframe|audio|video)$/i.test("string"==typeof e?e:e.nodeName))},_disallowedTags:function(e){return/^(meta|script|link|style|[a-z]+\:[a-z]+)$/i.test(e.nodeName)},createTagsWhitelist:function(e){return new RegExp("<\\/?\\b(?!\\b"+e.replace(/\|/g,"\\b|\\b")+"\\b)[^>]*>","gi")},_consistencyCheckOfHTML:function(e,t,n){const i=[],l=[],o=[],s=[],a=this.getListChildNodes(e,function(a){if(1!==a.nodeType)return!1;if(!t.test(a.nodeName)&&0===a.childNodes.length&&this.isNotCheckingNode(a))return i.push(a),!1;const r=!this.getParentElement(a,this.isNotCheckingNode);if(!this.isTable(a)&&!this.isListCell(a)&&(this.isFormatElement(a)||this.isRangeFormatElement(a)||this.isTextStyleElement(a))&&0===a.childNodes.length&&r)return l.push(a),!1;if(this.isList(a.parentNode)&&!this.isList(a)&&!this.isListCell(a))return o.push(a),!1;if(this.isCell(a)){const e=a.firstElementChild;if(!this.isFormatElement(e)&&!this.isRangeFormatElement(e)&&!this.isComponent(e))return s.push(a),!1}return a.parentNode!==e&&r&&(this.isListCell(a)&&!this.isList(a.parentNode)||n&&(this.isFormatElement(a)||this.isComponent(a))&&!this.isRangeFormatElement(a.parentNode)&&!this.getParentElement(a,this.isComponent))}.bind(this));for(let e=0,t=i.length;e<t;e++)this.removeItem(i[e]);const r=[];for(let e,t,n=0,i=a.length;n<i;n++)if(e=a[n],t=e.parentNode,t&&t.parentNode)if(this.getParentElement(e,this.isListCell)){const n=e.childNodes;for(let l=n.length-1;i>=0;l--)t.insertBefore(e,n[l]);r.push(e)}else t.parentNode.insertBefore(e,t),r.push(t);for(let e,t=0,n=r.length;t<n;t++)e=r[t],this.onlyZeroWidthSpace(e.textContent.trim())&&this.removeItem(e);for(let e=0,t=l.length;e<t;e++)this.removeItem(l[e]);for(let e,t,n,i,l=0,s=o.length;l<s;l++){for(e=o[l],t=this.createElement("LI"),n=e.childNodes;n[0];)t.appendChild(n[0]);i=e.parentNode,i&&(i.insertBefore(t,e),this.removeItem(e))}for(let e,t,n=0,i=s.length;n<i;n++)e=s[n],t=this.createElement("DIV"),t.innerHTML=0===e.textContent.trim().length&&0===e.children.length?"<br>":e.innerHTML,e.innerHTML=t.outerHTML},_setDefaultOptionStyle:function(e,t){let n="";e.height&&(n+="height:"+e.height+";"),e.minHeight&&(n+="min-height:"+e.minHeight+";"),e.maxHeight&&(n+="max-height:"+e.maxHeight+";"),e.position&&(n+="position:"+e.position+";"),e.width&&(n+="width:"+e.width+";"),e.minWidth&&(n+="min-width:"+e.minWidth+";"),e.maxWidth&&(n+="max-width:"+e.maxWidth+";");let i="",l="",o="";const s=(t=n+t).split(";");for(let t,n=0,a=s.length;n<a;n++)t=s[n].trim(),t&&(/^(min-|max-)?width\s*:/.test(t)||/^(z-index|position)\s*:/.test(t)?i+=t+";":/^(min-|max-)?height\s*:/.test(t)?(/^height/.test(t)&&"auto"===t.split(":")[1].trim()&&(e.height="auto"),l+=t+";"):o+=t+";");return{top:i,frame:l,editor:o}},_setIframeDocument:function(e,t){e.setAttribute("scrolling","auto"),e.contentDocument.head.innerHTML='<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1">'+this._setIframeCssTags(t),e.contentDocument.body.className=t._editableClass,e.contentDocument.body.setAttribute("contenteditable",!0)},_setIframeCssTags:function(e){const t=e.iframeCSSFileName,n=this._w.RegExp;let i="";for(let e,l=0,o=t.length;l<o;l++){if(e=[],/(^https?:\/\/)|(^data:text\/css,)/.test(t[l]))e.push(t[l]);else{const i=new n("(^|.*[\\/])"+t[l]+"(\\..+)?\\.css(?:\\?.*|;.*)?$","i");for(let t,n=document.getElementsByTagName("link"),l=0,o=n.length;l<o;l++)t=n[l].href.match(i),t&&e.push(t[0])}if(!e||0===e.length)throw'[SUNEDITOR.constructor.iframe.fail] The suneditor CSS files installation path could not be automatically detected. Please set the option property "iframeCSSFileName" before creating editor instances.';for(let t=0,n=e.length;t<n;t++)i+='<link href="'+e[t]+'" rel="stylesheet">'}return i+("auto"===e.height?"<style>\n/** Iframe height auto */\nbody{height: min-content; overflow: hidden;}\n</style>":"")}};var k=L,B={init:function(e,t){"object"!=typeof t&&(t={});const n=document;this._initOptions(e,t);const i=n.createElement("DIV");i.className="sun-editor"+(t.rtl?" se-rtl":""),e.id&&(i.id="suneditor_"+e.id);const l=n.createElement("DIV");l.className="se-container";const o=this._createToolBar(n,t.buttonList,t.plugins,t);o.element.style.visibility="hidden",o.pluginCallButtons.math&&this._checkKatexMath(t.katex);const s=n.createElement("DIV");s.className="se-arrow";const a=n.createElement("DIV");a.className="se-toolbar-sticky-dummy";const r=n.createElement("DIV");r.className="se-wrapper";const c=this._initElements(t,i,o.element,s),d=c.bottomBar,u=c.wysiwygFrame,h=c.placeholder;let p=c.codeView;const g=d.resizingBar,m=d.navigation,f=d.charWrapper,_=d.charCounter,b=n.createElement("DIV");b.className="se-loading-box sun-editor-common",b.innerHTML='<div class="se-loading-effect"></div>';const v=n.createElement("DIV");v.className="se-line-breaker",v.innerHTML='<button class="se-btn">'+t.icons.line_break+"</button>";const y=n.createElement("DIV");y.className+="se-line-breaker-component";const C=y.cloneNode(!0);y.innerHTML=C.innerHTML=t.icons.line_break;const w=n.createElement("DIV");w.className="se-resizing-back";const x=t.toolbarContainer;return x&&x.appendChild(o.element),r.appendChild(p),h&&r.appendChild(h),x||l.appendChild(o.element),l.appendChild(a),l.appendChild(r),l.appendChild(w),l.appendChild(b),l.appendChild(v),l.appendChild(y),l.appendChild(C),g&&l.appendChild(g),i.appendChild(l),p=this._checkCodeMirror(t,p),{constructed:{_top:i,_relative:l,_toolBar:o.element,_menuTray:o._menuTray,_editorArea:r,_wysiwygArea:u,_codeArea:p,_placeholder:h,_resizingBar:g,_navigation:m,_charWrapper:f,_charCounter:_,_loading:b,_lineBreaker:v,_lineBreaker_t:y,_lineBreaker_b:C,_resizeBack:w,_stickyDummy:a,_arrow:s},options:t,plugins:o.plugins,pluginCallButtons:o.pluginCallButtons,_responsiveButtons:o.responsiveButtons}},_checkCodeMirror:function(e,t){if(e.codeMirror){const n=[{mode:"htmlmixed",htmlMode:!0,lineNumbers:!0,lineWrapping:!0},e.codeMirror.options||{}].reduce((function(e,t){for(let n in t)k.hasOwn(t,n)&&(e[n]=t[n]);return e}),{});"auto"===e.height&&(n.viewportMargin=1/0,n.height="auto");const i=e.codeMirror.src.fromTextArea(t,n);i.display.wrapper.style.cssText=t.style.cssText,e.codeMirrorEditor=i,(t=i.display.wrapper).className+=" se-wrapper-code-mirror"}return t},_checkKatexMath:function(e){if(!e)throw Error('[SUNEDITOR.create.fail] To use the math button you need to add a "katex" object to the options.');const t=[{throwOnError:!1},e.options||{}].reduce((function(e,t){for(let n in t)k.hasOwn(t,n)&&(e[n]=t[n]);return e}),{});e.options=t},_setOptions:function(e,t,n){this._initOptions(t.element.originElement,e);const i=t.element,l=i.relative,o=i.editorArea,s=e.toolbarContainer&&e.toolbarContainer!==n.toolbarContainer,a=e.lang!==n.lang||e.buttonList!==n.buttonList||e.mode!==n.mode||s,r=this._createToolBar(document,a?e.buttonList:n.buttonList,e.plugins,e);r.pluginCallButtons.math&&this._checkKatexMath(e.katex);const c=document.createElement("DIV");c.className="se-arrow",a&&(r.element.style.visibility="hidden",s?(e.toolbarContainer.appendChild(r.element),i.toolbar.parentElement.removeChild(i.toolbar)):i.toolbar.parentElement.replaceChild(r.element,i.toolbar),i.toolbar=r.element,i._menuTray=r._menuTray,i._arrow=c);const d=this._initElements(e,i.topArea,a?r.element:i.toolbar,c),u=d.bottomBar,h=d.wysiwygFrame,p=d.placeholder;let g=d.codeView;return i.resizingBar&&l.removeChild(i.resizingBar),u.resizingBar&&l.appendChild(u.resizingBar),o.innerHTML="",o.appendChild(g),p&&o.appendChild(p),g=this._checkCodeMirror(e,g),i.resizingBar=u.resizingBar,i.navigation=u.navigation,i.charWrapper=u.charWrapper,i.charCounter=u.charCounter,i.wysiwygFrame=h,i.code=g,i.placeholder=p,e.rtl?k.addClass(i.topArea,"se-rtl"):k.removeClass(i.topArea,"se-rtl"),{callButtons:r.pluginCallButtons,plugins:r.plugins,toolbar:r}},_initElements:function(e,t,n,i){t.style.cssText=e._editorStyles.top,/inline/i.test(e.mode)?(n.className+=" se-toolbar-inline",n.style.width=e.toolbarWidth):/balloon/i.test(e.mode)&&(n.className+=" se-toolbar-balloon",n.style.width=e.toolbarWidth,n.appendChild(i));const l=document.createElement(e.iframe?"IFRAME":"DIV");l.className="se-wrapper-inner se-wrapper-wysiwyg",e.iframe?(l.allowFullscreen=!0,l.frameBorder=0,l.style.cssText=e._editorStyles.frame):(l.setAttribute("contenteditable",!0),l.setAttribute("scrolling","auto"),l.className+=" "+e._editableClass,l.style.cssText=e._editorStyles.frame+e._editorStyles.editor);const o=document.createElement("TEXTAREA");o.className="se-wrapper-inner se-wrapper-code",o.style.cssText=e._editorStyles.frame,o.style.display="none","auto"===e.height&&(o.style.overflow="hidden");let s=null,a=null,r=null,c=null;if(e.resizingBar&&(s=document.createElement("DIV"),s.className="se-resizing-bar sun-editor-common",a=document.createElement("DIV"),a.className="se-navigation sun-editor-common",s.appendChild(a),e.charCounter)){if(r=document.createElement("DIV"),r.className="se-char-counter-wrapper",e.charCounterLabel){const t=document.createElement("SPAN");t.className="se-char-label",t.textContent=e.charCounterLabel,r.appendChild(t)}if(c=document.createElement("SPAN"),c.className="se-char-counter",c.textContent="0",r.appendChild(c),e.maxCharCount>0){const t=document.createElement("SPAN");t.textContent=" / "+e.maxCharCount,r.appendChild(t)}s.appendChild(r)}let d=null;return e.placeholder&&(d=document.createElement("SPAN"),d.className="se-placeholder",d.innerText=e.placeholder),{bottomBar:{resizingBar:s,navigation:a,charWrapper:r,charCounter:c},wysiwygFrame:l,codeView:o,placeholder:d}},_initOptions:function(e,t){t.lang=t.lang||T.a,t.defaultTag="string"==typeof t.defaultTag?t.defaultTag:"p";const n=t.textTags=[{bold:"STRONG",underline:"U",italic:"EM",strike:"DEL",sub:"SUB",sup:"SUP"},t.textTags||{}].reduce((function(e,t){for(let n in t)e[n]=t[n];return e}),{});t._textTagsMap={strong:n.bold.toLowerCase(),b:n.bold.toLowerCase(),u:n.underline.toLowerCase(),ins:n.underline.toLowerCase(),em:n.italic.toLowerCase(),i:n.italic.toLowerCase(),del:n.strike.toLowerCase(),strike:n.strike.toLowerCase(),s:n.strike.toLowerCase(),sub:n.sub.toLowerCase(),sup:n.sup.toLowerCase()},t.value="string"==typeof t.value?t.value:null,t.historyStackDelayTime="number"==typeof t.historyStackDelayTime?t.historyStackDelayTime:400;t._defaultTagsWhitelist="string"==typeof t._defaultTagsWhitelist?t._defaultTagsWhitelist:"br|p|div|pre|blockquote|h1|h2|h3|h4|h5|h6|ol|ul|li|hr|figure|figcaption|img|iframe|audio|video|source|table|thead|tbody|tr|th|td|a|b|strong|var|i|em|u|ins|s|span|strike|del|sub|sup|code|svg|path|details|summary",t._editorTagsWhitelist=this._setWhitelist(t._defaultTagsWhitelist+("string"==typeof t.addTagsWhitelist&&t.addTagsWhitelist.length>0?"|"+t.addTagsWhitelist:""),t.tagsBlacklist),t.pasteTagsWhitelist=this._setWhitelist("string"==typeof t.pasteTagsWhitelist?t.pasteTagsWhitelist:t._editorTagsWhitelist,t.pasteTagsBlacklist),t.attributesWhitelist=t.attributesWhitelist&&"object"==typeof t.attributesWhitelist?t.attributesWhitelist:null,t.mode=t.mode||"classic",t.rtl=!!t.rtl,t._editableClass="sun-editor-editable"+(t.rtl?" se-rtl":""),t._printClass="string"==typeof t._printClass?t._printClass:null,t.toolbarWidth=t.toolbarWidth?k.isNumber(t.toolbarWidth)?t.toolbarWidth+"px":t.toolbarWidth:"auto",t.toolbarContainer="string"==typeof t.toolbarContainer?document.querySelector(t.toolbarContainer):t.toolbarContainer,t.stickyToolbar=/balloon/i.test(t.mode)||t.toolbarContainer?-1:void 0===t.stickyToolbar?0:/^\d+/.test(t.stickyToolbar)?k.getNumber(t.stickyToolbar,0):-1,t.fullScreenOffset=void 0===t.fullScreenOffset?0:/^\d+/.test(t.fullScreenOffset)?k.getNumber(t.fullScreenOffset,0):0,t.iframe=t.fullPage||t.iframe,t.fullPage=!!t.fullPage,t.iframeCSSFileName=t.iframe?"string"==typeof t.iframeCSSFileName?[t.iframeCSSFileName]:t.iframeCSSFileName||["suneditor"]:null,t.previewTemplate="string"==typeof t.previewTemplate?t.previewTemplate:null,t.printTemplate="string"==typeof t.printTemplate?t.printTemplate:null,t.codeMirror=t.codeMirror?t.codeMirror.src?t.codeMirror:{src:t.codeMirror}:null,t.katex=t.katex?t.katex.src?t.katex:{src:t.katex}:null,t.mathFontSize=t.mathFontSize?t.mathFontSize:[{text:"1",value:"1em"},{text:"1.5",value:"1.5em"},{text:"2",value:"2em"},{text:"2.5",value:"2.5em"}],t.position="string"==typeof t.position?t.position:null,t.display=t.display||("none"!==e.style.display&&e.style.display?e.style.display:"block"),t.popupDisplay=t.popupDisplay||"full",t.resizingBar=void 0===t.resizingBar?!/inline|balloon/i.test(t.mode):t.resizingBar,t.showPathLabel=!!t.resizingBar&&("boolean"!=typeof t.showPathLabel||t.showPathLabel),t.charCounter=t.maxCharCount>0||"boolean"==typeof t.charCounter&&t.charCounter,t.charCounterType="string"==typeof t.charCounterType?t.charCounterType:"char",t.charCounterLabel="string"==typeof t.charCounterLabel?t.charCounterLabel.trim():null,t.maxCharCount=k.isNumber(t.maxCharCount)&&t.maxCharCount>-1?1*t.maxCharCount:null,t.width=t.width?k.isNumber(t.width)?t.width+"px":t.width:e.clientWidth?e.clientWidth+"px":"100%",t.minWidth=(k.isNumber(t.minWidth)?t.minWidth+"px":t.minWidth)||"",t.maxWidth=(k.isNumber(t.maxWidth)?t.maxWidth+"px":t.maxWidth)||"",t.height=t.height?k.isNumber(t.height)?t.height+"px":t.height:e.clientHeight?e.clientHeight+"px":"auto",t.minHeight=(k.isNumber(t.minHeight)?t.minHeight+"px":t.minHeight)||"",t.maxHeight=(k.isNumber(t.maxHeight)?t.maxHeight+"px":t.maxHeight)||"",t.defaultStyle="string"==typeof t.defaultStyle?t.defaultStyle:"",t.font=t.font?t.font:null,t.fontSize=t.fontSize?t.fontSize:null,t.formats=t.formats?t.formats:null,t.colorList=t.colorList?t.colorList:null,t.lineHeights=t.lineHeights?t.lineHeights:null,t.paragraphStyles=t.paragraphStyles?t.paragraphStyles:null,t.textStyles=t.textStyles?t.textStyles:null,t.fontSizeUnit="string"==typeof t.fontSizeUnit&&t.fontSizeUnit.trim()||"px",t.imageResizing=void 0===t.imageResizing||t.imageResizing,t.imageHeightShow=void 0===t.imageHeightShow||!!t.imageHeightShow,t.imageWidth=t.imageWidth?k.isNumber(t.imageWidth)?t.imageWidth+"px":t.imageWidth:"auto",t.imageHeight=t.imageHeight?k.isNumber(t.imageHeight)?t.imageHeight+"px":t.imageHeight:"auto",t.imageSizeOnlyPercentage=!!t.imageSizeOnlyPercentage,t._imageSizeUnit=t.imageSizeOnlyPercentage?"%":"px",t.imageRotation=void 0!==t.imageRotation?t.imageRotation:!(t.imageSizeOnlyPercentage||!t.imageHeightShow),t.imageFileInput=void 0===t.imageFileInput||t.imageFileInput,t.imageUrlInput=void 0===t.imageUrlInput||!t.imageFileInput||t.imageUrlInput,t.imageUploadHeader=t.imageUploadHeader||null,t.imageUploadUrl="string"==typeof t.imageUploadUrl?t.imageUploadUrl:null,t.imageUploadSizeLimit=/\d+/.test(t.imageUploadSizeLimit)?k.getNumber(t.imageUploadSizeLimit,0):null,t.imageMultipleFile=!!t.imageMultipleFile,t.imageAccept="string"!=typeof t.imageAccept||"*"===t.imageAccept.trim()?"image/*":t.imageAccept.trim()||"image/*",t.imageGalleryUrl="string"==typeof t.imageGalleryUrl?t.imageGalleryUrl:null,t.imageGalleryHeader=t.imageGalleryHeader||null,t.videoResizing=void 0===t.videoResizing||t.videoResizing,t.videoHeightShow=void 0===t.videoHeightShow||!!t.videoHeightShow,t.videoRatioShow=void 0===t.videoRatioShow||!!t.videoRatioShow,t.videoWidth=t.videoWidth&&k.getNumber(t.videoWidth,0)?k.isNumber(t.videoWidth)?t.videoWidth+"px":t.videoWidth:"",t.videoHeight=t.videoHeight&&k.getNumber(t.videoHeight,0)?k.isNumber(t.videoHeight)?t.videoHeight+"px":t.videoHeight:"",t.videoSizeOnlyPercentage=!!t.videoSizeOnlyPercentage,t._videoSizeUnit=t.videoSizeOnlyPercentage?"%":"px",t.videoRotation=void 0!==t.videoRotation?t.videoRotation:!(t.videoSizeOnlyPercentage||!t.videoHeightShow),t.videoRatio=k.getNumber(t.videoRatio,4)||.5625,t.videoRatioList=t.videoRatioList?t.videoRatioList:null,t.youtubeQuery=(t.youtubeQuery||"").replace("?",""),t.videoFileInput=!!t.videoFileInput,t.videoUrlInput=void 0===t.videoUrlInput||!t.videoFileInput||t.videoUrlInput,t.videoUploadHeader=t.videoUploadHeader||null,t.videoUploadUrl="string"==typeof t.videoUploadUrl?t.videoUploadUrl:null,t.videoUploadSizeLimit=/\d+/.test(t.videoUploadSizeLimit)?k.getNumber(t.videoUploadSizeLimit,0):null,t.videoMultipleFile=!!t.videoMultipleFile,t.videoTagAttrs=t.videoTagAttrs||null,t.videoIframeAttrs=t.videoIframeAttrs||null,t.videoAccept="string"!=typeof t.videoAccept||"*"===t.videoAccept.trim()?"video/*":t.videoAccept.trim()||"video/*",t.audioWidth=t.audioWidth?k.isNumber(t.audioWidth)?t.audioWidth+"px":t.audioWidth:"",t.audioHeight=t.audioHeight?k.isNumber(t.audioHeight)?t.audioHeight+"px":t.audioHeight:"",t.audioFileInput=!!t.audioFileInput,t.audioUrlInput=void 0===t.audioUrlInput||!t.audioFileInput||t.audioUrlInput,t.audioUploadHeader=t.audioUploadHeader||null,t.audioUploadUrl="string"==typeof t.audioUploadUrl?t.audioUploadUrl:null,t.audioUploadSizeLimit=/\d+/.test(t.audioUploadSizeLimit)?k.getNumber(t.audioUploadSizeLimit,0):null,t.audioMultipleFile=!!t.audioMultipleFile,t.audioTagAttrs=t.audioTagAttrs||null,t.audioAccept="string"!=typeof t.audioAccept||"*"===t.audioAccept.trim()?"audio/*":t.audioAccept.trim()||"audio/*",t.tableCellControllerPosition="string"==typeof t.tableCellControllerPosition?t.tableCellControllerPosition.toLowerCase():"cell",t.linkProtocol="string"==typeof t.linkProtocol?t.linkProtocol:null,t.linkRel=Array.isArray(t.linkRel)?t.linkRel:[],t.linkRelDefault=t.linkRelDefault||{},t.tabDisable=!!t.tabDisable,t.shortcutsDisable=Array.isArray(t.shortcutsDisable)?t.shortcutsDisable:[],t.shortcutsHint=void 0===t.shortcutsHint||!!t.shortcutsHint,t.callBackSave=t.callBackSave?t.callBackSave:null,t.templates=t.templates?t.templates:null,t.placeholder="string"==typeof t.placeholder?t.placeholder:null,t.mediaAutoSelect=void 0===t.mediaAutoSelect||!!t.mediaAutoSelect,t.buttonList=t.buttonList?t.buttonList:[["undo","redo"],["bold","underline","italic","strike","subscript","superscript"],["removeFormat"],["outdent","indent"],["fullScreen","showBlocks","codeView"],["preview","print"]],t.rtl&&(t.buttonList=t.buttonList.reverse()),t.icons=t.icons&&"object"==typeof t.icons?[S,t.icons].reduce((function(e,t){for(let n in t)k.hasOwn(t,n)&&(e[n]=t[n]);return e}),{}):S,t.icons=t.rtl?[t.icons,t.icons.rtl].reduce((function(e,t){for(let n in t)k.hasOwn(t,n)&&(e[n]=t[n]);return e}),{}):t.icons,t._editorStyles=k._setDefaultOptionStyle(t,t.defaultStyle)},_setWhitelist:function(e,t){if("string"!=typeof t)return e;t=t.split("|"),e=e.split("|");for(let n,i=0,l=t.length;i<l;i++)n=e.indexOf(t[i]),n>-1&&e.splice(n,1);return e.join("|")},_defaultButtons:function(e){const t=e.icons,n=e.lang,i=k.isOSX_IOS?"⌘":"CTRL",l=k.isOSX_IOS?"⇧":"+SHIFT",o=e.shortcutsHint?e.shortcutsDisable:["bold","strike","underline","italic","undo","indent","save"],s=e.rtl?["[","]"]:["]","["];return{bold:["_se_command_bold",n.toolbar.bold+'<span class="se-shortcut">'+(o.indexOf("bold")>-1?"":i+'+<span class="se-shortcut-key">B</span>')+"</span>","bold","",t.bold],underline:["_se_command_underline",n.toolbar.underline+'<span class="se-shortcut">'+(o.indexOf("underline")>-1?"":i+'+<span class="se-shortcut-key">U</span>')+"</span>","underline","",t.underline],italic:["_se_command_italic",n.toolbar.italic+'<span class="se-shortcut">'+(o.indexOf("italic")>-1?"":i+'+<span class="se-shortcut-key">I</span>')+"</span>","italic","",t.italic],strike:["_se_command_strike",n.toolbar.strike+'<span class="se-shortcut">'+(o.indexOf("strike")>-1?"":i+l+'+<span class="se-shortcut-key">S</span>')+"</span>","strike","",t.strike],subscript:["_se_command_subscript",n.toolbar.subscript,"SUB","",t.subscript],superscript:["_se_command_superscript",n.toolbar.superscript,"SUP","",t.superscript],removeFormat:["",n.toolbar.removeFormat,"removeFormat","",t.erase],indent:["_se_command_indent",n.toolbar.indent+'<span class="se-shortcut">'+(o.indexOf("indent")>-1?"":i+'+<span class="se-shortcut-key">'+s[0]+"</span>")+"</span>","indent","",t.outdent],outdent:["_se_command_outdent",n.toolbar.outdent+'<span class="se-shortcut">'+(o.indexOf("indent")>-1?"":i+'+<span class="se-shortcut-key">'+s[1]+"</span>")+"</span>","outdent","",t.indent],fullScreen:["se-code-view-enabled se-resizing-enabled _se_command_fullScreen",n.toolbar.fullScreen,"fullScreen","",t.expansion],showBlocks:["_se_command_showBlocks",n.toolbar.showBlocks,"showBlocks","",t.show_blocks],codeView:["se-code-view-enabled se-resizing-enabled _se_command_codeView",n.toolbar.codeView,"codeView","",t.code_view],undo:["_se_command_undo se-resizing-enabled",n.toolbar.undo+'<span class="se-shortcut">'+(o.indexOf("undo")>-1?"":i+'+<span class="se-shortcut-key">Z</span>')+"</span>","undo","",t.undo],redo:["_se_command_redo se-resizing-enabled",n.toolbar.redo+'<span class="se-shortcut">'+(o.indexOf("undo")>-1?"":i+'+<span class="se-shortcut-key">Y</span> / '+i+l+'+<span class="se-shortcut-key">Z</span>')+"</span>","redo","",t.redo],preview:["se-resizing-enabled",n.toolbar.preview,"preview","",t.preview],print:["se-resizing-enabled",n.toolbar.print,"print","",t.print],save:["_se_command_save se-resizing-enabled",n.toolbar.save+'<span class="se-shortcut">'+(o.indexOf("save")>-1?"":i+'+<span class="se-shortcut-key">S</span>')+"</span>","save","",t.save],blockquote:["",n.toolbar.tag_blockquote,"blockquote","command",t.blockquote],font:["se-btn-select se-btn-tool-font",n.toolbar.font,"font","submenu",'<span class="txt">'+n.toolbar.font+"</span>"+t.arrow_down],formatBlock:["se-btn-select se-btn-tool-format",n.toolbar.formats,"formatBlock","submenu",'<span class="txt">'+n.toolbar.formats+"</span>"+t.arrow_down],fontSize:["se-btn-select se-btn-tool-size",n.toolbar.fontSize,"fontSize","submenu",'<span class="txt">'+n.toolbar.fontSize+"</span>"+t.arrow_down],fontColor:["",n.toolbar.fontColor,"fontColor","submenu",t.font_color],hiliteColor:["",n.toolbar.hiliteColor,"hiliteColor","submenu",t.highlight_color],align:["se-btn-align",n.toolbar.align,"align","submenu",e.rtl?t.align_right:t.align_left],list:["",n.toolbar.list,"list","submenu",t.list_number],horizontalRule:["btn_line",n.toolbar.horizontalRule,"horizontalRule","submenu",t.horizontal_rule],table:["",n.toolbar.table,"table","submenu",t.table],lineHeight:["",n.toolbar.lineHeight,"lineHeight","submenu",t.line_height],template:["",n.toolbar.template,"template","submenu",t.template],paragraphStyle:["",n.toolbar.paragraphStyle,"paragraphStyle","submenu",t.paragraph_style],textStyle:["",n.toolbar.textStyle,"textStyle","submenu",t.text_style],link:["",n.toolbar.link,"link","dialog",t.link],image:["",n.toolbar.image,"image","dialog",t.image],video:["",n.toolbar.video,"video","dialog",t.video],audio:["",n.toolbar.audio,"audio","dialog",t.audio],math:["",n.toolbar.math,"math","dialog",t.math],imageGallery:["",n.toolbar.imageGallery,"imageGallery","fileBrowser",t.image_gallery]}},_createModuleGroup:function(){const e=k.createElement("DIV");e.className="se-btn-module se-btn-module-border";const t=k.createElement("UL");return t.className="se-menu-list",e.appendChild(t),{div:e,ul:t}},_createButton:function(e,t,n,i,l,o,s){const a=k.createElement("LI"),r=k.createElement("BUTTON");return r.setAttribute("type","button"),r.setAttribute("class","se-btn"+(e?" "+e:"")+" se-tooltip"),r.setAttribute("data-command",n),r.setAttribute("data-display",i),r.setAttribute("tabindex","-1"),l||(l='<span class="se-icon-text">!</span>'),/^default\./i.test(l)&&(l=s[l.replace(/^default\./i,"")]),/^text\./i.test(l)&&(l=l.replace(/^text\./i,""),r.className+=" se-btn-more-text"),l+='<span class="se-tooltip-inner"><span class="se-tooltip-text">'+(t||n)+"</span></span>",o&&r.setAttribute("disabled",!0),r.innerHTML=l,a.appendChild(r),{li:a,button:r}},_createToolBar:function(e,t,n,i){const l=e.createElement("DIV");l.className="se-toolbar-separator-vertical";const o=e.createElement("DIV");o.className="se-toolbar sun-editor-common";const s=e.createElement("DIV");s.className="se-btn-tray",o.appendChild(s),t=JSON.parse(JSON.stringify(t));const a=i.icons,r=this._defaultButtons(i),c={},d=[],u={};if(n){const e=n.length?n:Object.keys(n).map((function(e){return n[e]}));for(let t,n=0,i=e.length;n<i;n++)t=e[n].default||e[n],u[t.name]=t}let h=null,p=null,g=null,m=null,f="",_=!1;const b=k.createElement("DIV");b.className="se-toolbar-more-layer";e:for(let n,i,o,v,y,C=0;C<t.length;C++)if(n=!1,y="",v=t[C],g=this._createModuleGroup(),"object"==typeof v){for(let e,l=0;l<v.length;l++){if(p=v[l],e=!1,/^\%\d+/.test(p)&&0===l){v[0]=p.replace(/[^\d]/g,""),d.push(v),t.splice(C--,1);continue e}if("object"==typeof p)"function"==typeof p.add?(f=p.name,h=r[f],u[f]=p):(f=p.name,h=[p.buttonClass,p.title,p.name,p.dataDisplay,p.innerHTML,p._disabled]);else{if(/^\-/.test(p)){y=p.substr(1),g.div.style.float=y;continue}if(/^\:/.test(p)){e=!0;const t=p.match(/^\:([^\-]+)\-([^\-]+)\-([^\-]+)/);o="__se__"+t[1].trim();h=["se-btn-more",t[2].trim(),o,"MORE",t[3].trim()]}else h=r[p];if(f=p,!h){const e=u[f];if(!e)throw Error("[SUNEDITOR.create.toolbar.fail] The button name of a plugin that does not exist. ["+f+"]");h=[e.buttonClass,e.title,e.name,e.display,e.innerHTML,e._disabled]}}m=this._createButton(h[0],h[1],h[2],h[3],h[4],h[5],a),(n?i:g.ul).appendChild(m.li),u[f]&&(c[f]=m.button),e&&(n=!0,i=k.createElement("DIV"),i.className="se-more-layer "+o,i.innerHTML='<div class="se-more-form"><ul class="se-menu-list"'+(y?' style="float: '+y+';"':"")+"></ul></div>",b.appendChild(i),i=i.firstElementChild.firstElementChild)}if(_){const e=l.cloneNode(!1);s.appendChild(e)}s.appendChild(g.div),_=!0}else if(/^\/$/.test(v)){const t=e.createElement("DIV");t.className="se-btn-module-enter",s.appendChild(t),_=!1}switch(s.children.length){case 0:s.style.display="none";break;case 1:k.removeClass(s.firstElementChild,"se-btn-module-border");break;default:if(i.rtl){const e=l.cloneNode(!1);e.style.float=s.lastElementChild.style.float,s.appendChild(e)}}d.length>0&&d.unshift(t),b.children.length>0&&s.appendChild(b);const v=e.createElement("DIV");v.className="se-menu-tray",o.appendChild(v);const y=e.createElement("DIV");return y.className="se-toolbar-cover",o.appendChild(y),{element:o,plugins:u,pluginCallButtons:c,responsiveButtons:d,_menuTray:v,_buttonTray:s}}};var A=function(e,t,n){return{element:{originElement:e,topArea:t._top,relative:t._relative,toolbar:t._toolBar,_buttonTray:t._toolBar.querySelector(".se-btn-tray"),_menuTray:t._menuTray,resizingBar:t._resizingBar,navigation:t._navigation,charWrapper:t._charWrapper,charCounter:t._charCounter,editorArea:t._editorArea,wysiwygFrame:t._wysiwygArea,wysiwyg:t._wysiwygArea,code:t._codeArea,placeholder:t._placeholder,loading:t._loading,lineBreaker:t._lineBreaker,lineBreaker_t:t._lineBreaker_t,lineBreaker_b:t._lineBreaker_b,resizeBackground:t._resizeBack,_stickyDummy:t._stickyDummy,_arrow:t._arrow},tool:{cover:t._toolBar.querySelector(".se-toolbar-cover"),bold:t._toolBar.querySelector("._se_command_bold"),underline:t._toolBar.querySelector("._se_command_underline"),italic:t._toolBar.querySelector("._se_command_italic"),strike:t._toolBar.querySelector("._se_command_strike"),subscript:t._toolBar.querySelector("._se_command_subscript"),superscript:t._toolBar.querySelector("._se_command_superscript"),undo:t._toolBar.querySelector("._se_command_undo"),redo:t._toolBar.querySelector("._se_command_redo"),save:t._toolBar.querySelector("._se_command_save"),outdent:t._toolBar.querySelector("._se_command_outdent"),indent:t._toolBar.querySelector("._se_command_indent"),fullScreen:t._toolBar.querySelector("._se_command_fullScreen"),showBlocks:t._toolBar.querySelector("._se_command_showBlocks"),codeView:t._toolBar.querySelector("._se_command_codeView")},options:n,option:n}},M={name:"notice",add:function(e){const t=e.context;t.notice={};let n=e.util.createElement("DIV"),i=e.util.createElement("SPAN"),l=e.util.createElement("BUTTON");n.className="se-notice",l.className="close",l.setAttribute("aria-label","Close"),l.setAttribute("title",e.lang.dialogBox.close),l.innerHTML=e.icons.cancel,n.appendChild(i),n.appendChild(l),t.notice.modal=n,t.notice.message=i,l.addEventListener("click",this.onClick_cancel.bind(e)),t.element.editorArea.appendChild(n),n=null},onClick_cancel:function(e){e.preventDefault(),e.stopPropagation(),this.plugins.notice.close.call(this)},open:function(e){this.context.notice.message.textContent=e,this.context.notice.modal.style.display="block"},close:function(){this.context.notice.modal.style.display="none"}},z={init:function(e){return{create:function(t,n){return this.create(t,n,e)}.bind(this)}},create:function(e,t,n){k._propertiesInit(),"object"!=typeof t&&(t={}),n&&(t=[n,t].reduce((function(e,t){for(let n in t)if(k.hasOwn(t,n))if("plugins"===n&&t[n]&&e[n]){let i=e[n],l=t[n];i=i.length?i:Object.keys(i).map((function(e){return i[e]})),l=l.length?l:Object.keys(l).map((function(e){return l[e]})),e[n]=l.filter((function(e){return-1===i.indexOf(e)})).concat(i)}else e[n]=t[n];return e}),{}));const i="string"==typeof e?document.getElementById(e):e;if(!i){if("string"==typeof e)throw Error('[SUNEDITOR.create.fail] The element for that id was not found (ID:"'+e+'")');throw Error("[SUNEDITOR.create.fail] suneditor requires textarea's element or id value")}const l=B.init(i,t);if(l.constructed._top.id&&document.getElementById(l.constructed._top.id))throw Error('[SUNEDITOR.create.fail] The ID of the suneditor you are trying to create already exists (ID:"'+l.constructed._top.id+'")');return function(e,t,n,i,l,o){const s=e.element.originElement.ownerDocument||document,a=s.defaultView||window,r=k,c=l.icons,d={_d:s,_w:a,_parser:new a.DOMParser,_wd:null,_ww:null,_shadowRoot:null,_shadowRootControllerEventTarget:null,util:r,functions:null,options:null,wwComputedStyle:a.getComputedStyle(e.element.wysiwyg),notice:M,icons:c,history:null,context:e,pluginCallButtons:t,plugins:n||{},initPlugins:{},_targetPlugins:{},_menuTray:{},lang:i,effectNode:null,submenu:null,container:null,_submenuName:"",_bindedSubmenuOff:null,_bindedContainerOff:null,submenuActiveButton:null,containerActiveButton:null,controllerArray:[],currentControllerName:"",currentControllerTarget:null,currentFileComponentInfo:null,codeViewDisabledButtons:[],resizingDisabledButtons:[],_moreLayerActiveButton:null,_htmlCheckWhitelistRegExp:null,_disallowedTextTagsRegExp:null,editorTagsWhitelistRegExp:null,pasteTagsWhitelistRegExp:null,hasFocus:!1,isDisabled:!1,isReadOnly:!1,_attributesWhitelistRegExp:null,_attributesTagsWhitelist:null,_bindControllersOff:null,_isInline:null,_isBalloon:null,_isBalloonAlways:null,_inlineToolbarAttr:{top:"",width:"",isShow:!1},_notHideToolbar:!1,_sticky:!1,_antiBlur:!1,_lineBreaker:null,_lineBreakerButton:null,_componentsInfoInit:!0,_componentsInfoReset:!1,activePlugins:null,managedTagsInfo:null,_charTypeHTML:!1,_fileInfoPluginsCheck:null,_fileInfoPluginsReset:null,_fileManager:{tags:null,regExp:null,queryString:null,pluginRegExp:null,pluginMap:null},commandMap:null,_styleCommandMap:null,_defaultCommand:{bold:l.textTags.bold,underline:l.textTags.underline,italic:l.textTags.italic,strike:l.textTags.strike,subscript:l.textTags.sub,superscript:l.textTags.sup},_variable:{isChanged:!1,isCodeView:!1,isFullScreen:!1,innerHeight_fullScreen:0,resizeClientY:0,tabSize:4,codeIndent:2,minResizingSize:r.getNumber(e.element.wysiwygFrame.style.minHeight||"65",0),currentNodes:[],currentNodesMap:[],_range:null,_selectionNode:null,_originCssText:e.element.topArea.style.cssText,_bodyOverflow:"",_editorAreaOriginCssText:"",_wysiwygOriginCssText:"",_codeOriginCssText:"",_fullScreenAttrs:{sticky:!1,balloon:!1,inline:!1},_lineBreakComp:null,_lineBreakDir:""},callPlugin:function(e,n,i){if(i=i||t[e],!this.plugins[e])throw Error('[SUNEDITOR.core.callPlugin.fail] The called plugin does not exist or is in an invalid format. (pluginName:"'+e+'")');this.initPlugins[e]?"object"==typeof this._targetPlugins[e]&&i&&this.initMenuTarget(e,i,this._targetPlugins[e]):(this.plugins[e].add(this,i),this.initPlugins[e]=!0),this.plugins[e].active&&!this.commandMap[e]&&i&&(this.commandMap[e]=i,this.activePlugins.push(e)),"function"==typeof n&&n()},addModule:function(e){for(let t,n=0,i=e.length;n<i;n++)t=e[n].name,this.plugins[t]||(this.plugins[t]=e[n]),this.initPlugins[t]||(this.initPlugins[t]=!0,"function"==typeof this.plugins[t].add&&this.plugins[t].add(this))},getGlobalScrollOffset:function(){let t=0,n=0,i=e.element.topArea;for(;i;)t+=i.scrollTop,n+=i.scrollLeft,i=i.parentElement;for(i=this._shadowRoot?this._shadowRoot.host:null;i;)t+=i.scrollTop,n+=i.scrollLeft,i=i.parentElement;return{top:t,left:n}},initMenuTarget:function(t,n,i){n?(e.element._menuTray.appendChild(i),this._targetPlugins[t]=!0,this._menuTray[n.getAttribute("data-command")]=i):this._targetPlugins[t]=i},submenuOn:function(e){this._bindedSubmenuOff&&this._bindedSubmenuOff(),this._bindControllersOff&&this.controllersOff();const t=this._submenuName=e.getAttribute("data-command"),n=this.submenu=this._menuTray[t];this.submenuActiveButton=e,this._setMenuPosition(e,n),this._bindedSubmenuOff=this.submenuOff.bind(this),this.addDocEvent("mousedown",this._bindedSubmenuOff,!1),this.plugins[t].on&&this.plugins[t].on.call(this),this._antiBlur=!0},submenuOff:function(){this.removeDocEvent("mousedown",this._bindedSubmenuOff),this._bindedSubmenuOff=null,this.submenu&&(this._submenuName="",this.submenu.style.display="none",this.submenu=null,r.removeClass(this.submenuActiveButton,"on"),this.submenuActiveButton=null,this._notHideToolbar=!1),this._antiBlur=!1},moreLayerOff:function(){this._moreLayerActiveButton&&(e.element.toolbar.querySelector("."+this._moreLayerActiveButton.getAttribute("data-command")).style.display="none",r.removeClass(this._moreLayerActiveButton,"on"),this._moreLayerActiveButton=null)},containerOn:function(e){this._bindedContainerOff&&this._bindedContainerOff();const t=this._containerName=e.getAttribute("data-command"),n=this.container=this._menuTray[t];this.containerActiveButton=e,this._setMenuPosition(e,n),this._bindedContainerOff=this.containerOff.bind(this),this.addDocEvent("mousedown",this._bindedContainerOff,!1),this.plugins[t].on&&this.plugins[t].on.call(this),this._antiBlur=!0},containerOff:function(){this.removeDocEvent("mousedown",this._bindedContainerOff),this._bindedContainerOff=null,this.container&&(this._containerName="",this.container.style.display="none",this.container=null,r.removeClass(this.containerActiveButton,"on"),this.containerActiveButton=null,this._notHideToolbar=!1),this._antiBlur=!1},_setMenuPosition:function(t,n){n.style.visibility="hidden",n.style.display="block",n.style.height="",r.addClass(t,"on");const i=this.context.element.toolbar,o=i.offsetWidth,s=u._getEditorOffsets(e.element.toolbar),c=n.offsetWidth,d=t.parentElement.offsetLeft+3;if(l.rtl){const e=t.offsetWidth,i=c>e?c-e:0,l=i>0?0:e-c;n.style.left=d-i+l+"px",s.left>u._getEditorOffsets(n).left&&(n.style.left="0px")}else{const e=o<=c?0:o-(d+c);n.style.left=e<0?d+e+"px":d+"px"}let h=0,p=t;for(;p&&p!==i;)h+=p.offsetTop,p=p.offsetParent;const g=h;this._isBalloon?h+=i.offsetTop+t.offsetHeight:h-=t.offsetHeight;const m=s.top,f=n.offsetHeight,_=this.getGlobalScrollOffset().top,b=a.innerHeight-(m-_+g+t.parentElement.offsetHeight);if(b<f){let e=-1*(f-g+3);const i=m-_+e,l=f+(i<0?i:0);l>b?(n.style.height=l+"px",e=-1*(l-g+3)):(n.style.height=b+"px",e=g+t.parentElement.offsetHeight),n.style.top=e+"px"}else n.style.top=g+t.parentElement.offsetHeight+"px";n.style.visibility=""},controllersOn:function(){this._bindControllersOff&&this._bindControllersOff(),this.controllerArray=[];for(let e,t=0;t<arguments.length;t++)e=arguments[t],e&&("string"!=typeof e?"function"!=typeof e?r.hasClass(e,"se-controller")?(e.style&&(e.style.display="block",this._shadowRoot&&-1===this._shadowRootControllerEventTarget.indexOf(e)&&(e.addEventListener("mousedown",(function(e){e.preventDefault(),e.stopPropagation()})),this._shadowRootControllerEventTarget.push(e))),this.controllerArray.push(e)):(this.currentControllerTarget=e,this.currentFileComponentInfo=this.getFileComponent(e)):this.controllerArray.push(e):this.currentControllerName=e);this._bindControllersOff=this.controllersOff.bind(this),this.addDocEvent("mousedown",this._bindControllersOff,!1),this.addDocEvent("keydown",this._bindControllersOff,!1),this._antiBlur=!0,"function"==typeof h.showController&&h.showController(this.currentControllerName,this.controllerArray,this)},controllersOff:function(t){this._lineBreaker.style.display="none";const n=this.controllerArray.length;if(t&&t.target&&n>0)for(let e=0;e<n;e++)if("function"==typeof this.controllerArray[e].contains&&this.controllerArray[e].contains(t.target))return;if((!this._fileManager.pluginRegExp.test(this.currentControllerName)||!t||"keydown"!==t.type||27===t.keyCode)&&(e.element.lineBreaker_t.style.display=e.element.lineBreaker_b.style.display="none",this._variable._lineBreakComp=null,this.currentControllerName="",this.currentControllerTarget=null,this.currentFileComponentInfo=null,this.effectNode=null,this._bindControllersOff)){if(this.removeDocEvent("mousedown",this._bindControllersOff),this.removeDocEvent("keydown",this._bindControllersOff),this._bindControllersOff=null,n>0){for(let e=0;e<n;e++)"function"==typeof this.controllerArray[e]?this.controllerArray[e]():this.controllerArray[e].style.display="none";this.controllerArray=[]}this._antiBlur=!1}},setControllerPosition:function(t,n,i,o){l.rtl&&(o.left*=-1);const s=r.getOffset(n,e.element.wysiwygFrame);t.style.visibility="hidden",t.style.display="block";const a="top"===i?-(t.offsetHeight+2):n.offsetHeight+12;t.style.top=s.top+a+o.top+"px";const c=s.left-e.element.wysiwygFrame.scrollLeft+o.left,d=t.offsetWidth,u=n.offsetWidth,h=r.hasClass(t.firstElementChild,"se-arrow")?t.firstElementChild:null;if(l.rtl){const n=d>u?d-u:0,i=n>0?0:u-d;t.style.left=c-n+i+"px",n>0&&h&&(h.style.left=(d-14<10+n?d-14:10+n)+"px");const l=e.element.wysiwygFrame.offsetLeft-t.offsetLeft;l>0&&(t.style.left="0px",h&&(h.style.left=l+"px"))}else{t.style.left=c+"px";const n=e.element.wysiwygFrame.offsetWidth-(t.offsetLeft+d);n<0?(t.style.left=t.offsetLeft+n+"px",h&&(h.style.left=20-n+"px")):h&&(h.style.left="20px")}t.style.visibility=""},execCommand:function(e,t,n){this._wd.execCommand(e,t,"formatBlock"===e?"<"+n+">":n),this.history.push(!0)},nativeFocus:function(){const t=r.getParentElement(this.getSelectionNode(),"figcaption");t?t.focus():e.element.wysiwyg.focus(),this._editorRange()},focus:function(){if("none"!==e.element.wysiwygFrame.style.display){if(l.iframe)this.nativeFocus();else try{const t=this.getRange();if(t.startContainer===t.endContainer&&r.isWysiwygDiv(t.startContainer)){const n=t.commonAncestorContainer.children[t.startOffset];if(!r.isFormatElement(n)&&!r.isComponent(n)){const t=r.createElement(l.defaultTag),i=r.createElement("BR");return t.appendChild(i),e.element.wysiwyg.insertBefore(t,n),void this.setRange(i,0,i,0)}}this.setRange(t.startContainer,t.startOffset,t.endContainer,t.endOffset)}catch(e){this.nativeFocus()}u._applyTagEffects(),this._isBalloon&&u._toggleToolbarBalloon()}},focusEdge:function(t){t||(t=e.element.wysiwyg.lastElementChild);const n=this.getFileComponent(t);n?this.selectComponent(n.target,n.pluginName):t?(t=r.getChildElement(t,(function(e){return 0===e.childNodes.length||3===e.nodeType}),!0))?this.setRange(t,t.textContent.length,t,t.textContent.length):this.nativeFocus():this.focus()},blur:function(){l.iframe?e.element.wysiwygFrame.blur():e.element.wysiwyg.blur()},setRange:function(e,t,n,i){if(!e||!n)return;t>e.textContent.length&&(t=e.textContent.length),i>n.textContent.length&&(i=n.textContent.length),r.isFormatElement(e)&&(e=e.childNodes[t]||e,t=0),r.isFormatElement(n)&&(n=n.childNodes[i]||n,i=t>1?t:0);const o=this._wd.createRange();try{o.setStart(e,t),o.setEnd(n,i)}catch(e){return console.warn("[SUNEDITOR.core.focus.error] "+e),void this.nativeFocus()}const s=this.getSelection();return s.removeAllRanges&&s.removeAllRanges(),s.addRange(o),this._editorRange(),l.iframe&&this.nativeFocus(),o},removeRange:function(){this._variable._range=null,this._variable._selectionNode=null,this.hasFocus&&this.getSelection().removeAllRanges(),this._setKeyEffect([])},getRange:function(){const t=this._variable._range||this._createDefaultRange(),n=this.getSelection();if(t.collapsed===n.isCollapsed||!e.element.wysiwyg.contains(n.focusNode))return t;if(n.rangeCount>0)return this._variable._range=n.getRangeAt(0),this._variable._range;{const e=n.anchorNode,t=n.focusNode,i=n.anchorOffset,l=n.focusOffset,o=r.compareElements(e,t),s=o.ancestor&&(0===o.result?i<=l:o.result>1);return this.setRange(s?e:t,s?i:l,s?t:e,s?l:i)}},getRange_addLine:function(t,n){if(this._selectionVoid(t)){const i=e.element.wysiwyg,o=r.createElement(l.defaultTag);o.innerHTML="<br>",i.insertBefore(o,n&&n!==i?n.nextElementSibling:i.firstElementChild),this.setRange(o.firstElementChild,0,o.firstElementChild,1),t=this._variable._range}return t},getSelection:function(){return this._shadowRoot&&this._shadowRoot.getSelection?this._shadowRoot.getSelection():this._ww.getSelection()},getSelectionNode:function(){if(e.element.wysiwyg.contains(this._variable._selectionNode)||this._editorRange(),!this._variable._selectionNode){const t=r.getChildElement(e.element.wysiwyg.firstChild,(function(e){return 0===e.childNodes.length||3===e.nodeType}),!1);if(t)return this._variable._selectionNode=t,t;this._editorRange()}return this._variable._selectionNode},_editorRange:function(){const e=this.getSelection();if(!e)return null;let t=null,n=null;t=e.rangeCount>0?e.getRangeAt(0):this._createDefaultRange(),this._variable._range=t,n=t.collapsed?r.isWysiwygDiv(t.commonAncestorContainer)&&t.commonAncestorContainer.children[t.startOffset]||t.commonAncestorContainer:e.extentNode||e.anchorNode,this._variable._selectionNode=n},_createDefaultRange:function(){const t=e.element.wysiwyg;t.focus();const n=this._wd.createRange();let i=t.firstElementChild;return i||(i=r.createElement(l.defaultTag),i.innerHTML="<br>",t.appendChild(i)),n.setStart(i,0),n.setEnd(i,0),n},_selectionVoid:function(e){const t=e.commonAncestorContainer;return r.isWysiwygDiv(e.startContainer)&&r.isWysiwygDiv(e.endContainer)||/FIGURE/i.test(t.nodeName)||this._fileManager.regExp.test(t.nodeName)||r.isMediaComponent(t)},_resetRangeToTextNode:function(){const t=this.getRange();if(this._selectionVoid(t))return!1;let n,i,o,s=t.startContainer,a=t.startOffset,c=t.endContainer,d=t.endOffset;if(r.isFormatElement(s))for(s.childNodes[a]?(s=s.childNodes[a],a=0):(s=s.lastChild,a=s.textContent.length);s&&1===s.nodeType&&s.firstChild;)s=s.firstChild,a=0;if(r.isFormatElement(c)){for(c=c.childNodes[d]||c.lastChild;c&&1===c.nodeType&&c.lastChild;)c=c.lastChild;d=c.textContent.length}if(n=r.isWysiwygDiv(s)?e.element.wysiwyg.firstChild:s,i=a,r.isBreak(n)||1===n.nodeType&&n.childNodes.length>0){const e=r.isBreak(n);if(!e){for(;n&&!r.isBreak(n)&&1===n.nodeType;)n=n.childNodes[i]||n.nextElementSibling||n.nextSibling,i=0;let e=r.getFormatElement(n,null);e===r.getRangeFormatElement(e,null)&&(e=r.createElement(r.getParentElement(n,r.isCell)?"DIV":l.defaultTag),n.parentNode.insertBefore(e,n),e.appendChild(n))}if(r.isBreak(n)){const t=r.createTextNode(r.zeroWidthSpace);n.parentNode.insertBefore(t,n),n=t,e&&s===c&&(c=n,d=1)}}if(s=n,a=i,n=r.isWysiwygDiv(c)?e.element.wysiwyg.lastChild:c,i=d,r.isBreak(n)||1===n.nodeType&&n.childNodes.length>0){const e=r.isBreak(n);if(!e){for(;n&&!r.isBreak(n)&&1===n.nodeType&&(o=n.childNodes,0!==o.length);)n=o[i>0?i-1:i]||!/FIGURE/i.test(o[0].nodeName)?o[0]:n.previousElementSibling||n.previousSibling||s,i=i>0?n.textContent.length:i;let e=r.getFormatElement(n,null);e===r.getRangeFormatElement(e,null)&&(e=r.createElement(r.isCell(e)?"DIV":l.defaultTag),n.parentNode.insertBefore(e,n),e.appendChild(n))}if(r.isBreak(n)){const t=r.createTextNode(r.zeroWidthSpace);n.parentNode.insertBefore(t,n),n=t,i=1,e&&!n.previousSibling&&r.removeItem(c)}}return c=n,d=i,this.setRange(s,a,c,d),!0},getSelectedElements:function(t){if(!this._resetRangeToTextNode())return[];let n=this.getRange();if(r.isWysiwygDiv(n.startContainer)){const t=e.element.wysiwyg.children;if(0===t.length)return[];this.setRange(t[0],0,t[t.length-1],t[t.length-1].textContent.trim().length),n=this.getRange()}const i=n.startContainer,l=n.endContainer,o=n.commonAncestorContainer,s=r.getListChildren(o,(function(e){return t?t(e):r.isFormatElement(e)}));if(r.isWysiwygDiv(o)||r.isRangeFormatElement(o)||s.unshift(r.getFormatElement(o,null)),i===l||1===s.length)return s;let a=r.getFormatElement(i,null),c=r.getFormatElement(l,null),d=null,u=null;const h=function(e){return!r.isTable(e)||/^TABLE$/i.test(e.nodeName)};let p=r.getRangeFormatElement(a,h),g=r.getRangeFormatElement(c,h);r.isTable(p)&&r.isListCell(p.parentNode)&&(p=p.parentNode),r.isTable(g)&&r.isListCell(g.parentNode)&&(g=g.parentNode);const m=p===g;for(let e,t=0,n=s.length;t<n;t++)if(e=s[t],a===e||!m&&e===p)d=t;else if(c===e||!m&&e===g){u=t;break}return null===d&&(d=0),null===u&&(u=s.length-1),s.slice(d,u+1)},getSelectedElementsAndComponents:function(e){const t=this.getRange().commonAncestorContainer,n=r.getParentElement(t,r.isComponent),i=r.isTable(t)?this.getSelectedElements(null):this.getSelectedElements(function(e){const t=this.getParentElement(e,this.isComponent);return this.isFormatElement(e)&&(!t||t===n)||this.isComponent(e)&&!this.getFormatElement(e)}.bind(r));if(e)for(let e=0,t=i.length;e<t;e++)for(let n=e-1;n>=0;n--)if(i[n].contains(i[e])){i.splice(e,1),e--,t--;break}return i},isEdgePoint:function(e,t,n){return"end"!==n&&0===t||(!n||"front"!==n)&&!e.nodeValue&&1===t||(!n||"end"===n)&&!!e.nodeValue&&t===e.nodeValue.length},_isEdgeFormat:function(e,t,n){if(!this.isEdgePoint(e,t,n))return!1;const i=[];for(n="front"===n?"previousSibling":"nextSibling";e&&!r.isFormatElement(e)&&!r.isWysiwygDiv(e);){if(e[n]&&(!r.isBreak(e[n])||e[n][n]))return null;1===e.nodeType&&i.push(e.cloneNode(!1)),e=e.parentNode}return i},showLoading:function(){e.element.loading.style.display="block"},closeLoading:function(){e.element.loading.style.display="none"},appendFormatTag:function(e,t){if(!e.parentNode)return null;const n=r.getFormatElement(this.getSelectionNode(),null);let i=null;if(r.isFreeFormatElement(n||e.parentNode))i=r.createElement("BR");else{const e=t?"string"==typeof t?t:t.nodeName:!r.isFormatElement(n)||r.isRangeFormatElement(n)||r.isFreeFormatElement(n)?l.defaultTag:n.nodeName;i=r.createElement(e),i.innerHTML="<br>",(t&&"string"!=typeof t||!t&&r.isFormatElement(n))&&r.copyTagAttributes(i,t||n)}return r.isCell(e)?e.insertBefore(i,e.nextElementSibling):e.parentNode.insertBefore(i,e.nextElementSibling),i},insertComponent:function(e,t,n,i){if(this.isReadOnly||n&&!this.checkCharCount(e,null))return null;const l=this.removeNode();this.getRange_addLine(this.getRange(),l.container);let o=null,s=this.getSelectionNode(),a=r.getFormatElement(s,null);if(r.isListCell(a))this.insertNode(e,s===a?null:l.container.nextSibling,!1),e.nextSibling||e.parentNode.appendChild(r.createElement("BR"));else{if(this.getRange().collapsed&&(3===l.container.nodeType||r.isBreak(l.container))){const e=r.getParentElement(l.container,function(e){return this.isRangeFormatElement(e)}.bind(r));o=r.splitElement(l.container,l.offset,e?r.getElementDepth(e)+1:0),o&&(a=o.previousSibling)}this.insertNode(e,r.isRangeFormatElement(a)?null:a,!1),a&&r.onlyZeroWidthSpace(a)&&r.removeItem(a)}if(this.setRange(e,0,e,0),!i){const t=this.getFileComponent(e);t?this.selectComponent(t.target,t.pluginName):o&&(o=r.getEdgeChildNodes(o,null).sc||o,this.setRange(o,0,o,0))}return t||this.history.push(1),o||e},getFileComponent:function(e){if(!this._fileManager.queryString||!e)return null;let t,n;return(/^FIGURE$/i.test(e.nodeName)||/se-component/.test(e.className))&&(t=e.querySelector(this._fileManager.queryString)),!t&&e.nodeName&&this._fileManager.regExp.test(e.nodeName)&&(t=e),t&&(n=this._fileManager.pluginMap[t.nodeName.toLowerCase()],n)?{target:t,component:r.getParentElement(t,r.isComponent),pluginName:n}:null},selectComponent:function(e,t){if(r.isUneditableComponent(r.getParentElement(e,r.isComponent))||r.isUneditableComponent(e))return!1;this.hasFocus||this.focus();const n=this.plugins[t];n&&a.setTimeout(function(){"function"==typeof n.select&&this.callPlugin(t,n.select.bind(this,e),null),this._setComponentLineBreaker(e)}.bind(this))},_setComponentLineBreaker:function(t){this._lineBreaker.style.display="none";const n=r.getParentElement(t,r.isComponent),i=e.element.lineBreaker_t.style,l=e.element.lineBreaker_b.style,o="block"===this.context.resizing.resizeContainer.style.display?this.context.resizing.resizeContainer:t,s=r.isListCell(n.parentNode);let a,c,d;(s?n.previousSibling:r.isFormatElement(n.previousElementSibling))?i.display="none":(this._variable._lineBreakComp=n,c=e.element.wysiwyg.scrollTop,a=r.getOffset(t,e.element.wysiwygFrame).top+c,d=o.offsetWidth/2/2,i.top=a-c-12+"px",i.left=r.getOffset(o).left+d+"px",i.display="block"),(s?n.nextSibling:r.isFormatElement(n.nextElementSibling))?l.display="none":(a||(this._variable._lineBreakComp=n,c=e.element.wysiwyg.scrollTop,a=r.getOffset(t,e.element.wysiwygFrame).top+c,d=o.offsetWidth/2/2),l.top=a+o.offsetHeight-c-12+"px",l.left=r.getOffset(o).left+o.offsetWidth-d-24+"px",l.display="block")},insertNode:function(t,n,i){if(this.isReadOnly||i&&!this.checkCharCount(t,null))return null;const o=r.getFreeFormatElement(this.getSelectionNode(),null),s=!o&&(r.isFormatElement(t)||r.isRangeFormatElement(t))||r.isComponent(t);if(!n&&(s||r.isComponent(t)||r.isMedia(t))){const e=this.removeNode();if(3===e.container.nodeType||r.isBreak(e.container)){const t=r.getParentElement(e.container,function(e){return this.isRangeFormatElement(e)||this.isListCell(e)}.bind(r));(n=r.splitElement(e.container,e.offset,t?r.getElementDepth(t)+1:0))&&(n=n.previousSibling)}}const a=n||s?this.getRange():this.getRange_addLine(this.getRange(),null),c=a.commonAncestorContainer,d=a.startOffset,u=a.endOffset,h=a.startContainer===c&&r.isFormatElement(c),p=h?c.childNodes[d]||c.childNodes[0]:a.startContainer,g=h?c.childNodes[u]||c.childNodes[c.childNodes.length-1]:a.endContainer;let m,f=null;if(n)m=n.parentNode,n=n.nextSibling,f=!0;else if(m=p,3===p.nodeType&&(m=p.parentNode),a.collapsed)if(3===c.nodeType)n=c.textContent.length>u?c.splitText(u):c.nextSibling;else if(r.isBreak(m))n=m,m=m.parentNode;else{let e=m.childNodes[d];const i=e&&3===e.nodeType&&r.onlyZeroWidthSpace(e)&&r.isBreak(e.nextSibling)?e.nextSibling:e;i?i.nextSibling?n=r.isBreak(i)&&!r.isBreak(t)?i:i.nextSibling:(m.removeChild(i),n=null):n=null}else{if(p===g){n=this.isEdgePoint(g,u)?g.nextSibling:g.splitText(u);let e=p;this.isEdgePoint(p,d)||(e=p.splitText(d)),m.removeChild(e),0===m.childNodes.length&&s&&(m.innerHTML="<br>")}else{const e=this.removeNode(),t=e.container,i=e.prevContainer;if(t&&0===t.childNodes.length&&s&&(r.isFormatElement(t)?t.innerHTML="<br>":r.isRangeFormatElement(t)&&(t.innerHTML="<"+l.defaultTag+"><br></"+l.defaultTag+">")),!s&&i)if(m=3===i.nodeType?i.parentNode:i,m.contains(t)){let e=!0;for(n=t;n.parentNode!==m;)n=n.parentNode,e=!1;e&&t===i&&(n=n.nextSibling)}else n=null;else m=(n=s?g:t===i?t.nextSibling:t)&&n.parentNode?n.parentNode:c;for(;n&&!r.isFormatElement(n)&&n.parentNode!==c;)n=n.parentNode}}try{if((r.isWysiwygDiv(n)||m===e.element.wysiwyg.parentNode)&&(m=e.element.wysiwyg,n=null),r.isFormatElement(t)||r.isRangeFormatElement(t)||!r.isListCell(m)&&r.isComponent(t)){const e=m;if(r.isList(n))m=n,n=null;else if(r.isListCell(n))m=n.previousElementSibling||n;else if(!f&&!n){const e=this.removeNode(),t=3===e.container.nodeType?r.isListCell(r.getFormatElement(e.container,null))?e.container:r.getFormatElement(e.container,null)||e.container.parentNode:e.container,i=r.isWysiwygDiv(t)||r.isRangeFormatElement(t);m=i?t:t.parentNode,n=i?null:t.nextSibling}0===e.childNodes.length&&m!==e&&r.removeItem(e)}if(!s||o||r.isRangeFormatElement(m)||r.isListCell(m)||r.isWysiwygDiv(m)||(n=m.nextElementSibling,m=m.parentNode),r.isWysiwygDiv(m)&&(3===t.nodeType||r.isBreak(t))){const e=r.createElement(l.defaultTag);e.appendChild(t),t=e}m.insertBefore(t,m===n?m.lastChild:n)}catch(e){m.appendChild(t)}finally{if((r.isFormatElement(t)||r.isComponent(t))&&p===g){const e=r.getFormatElement(c,null);e&&1===e.nodeType&&r.isEmptyLine(e)&&r.removeItem(e)}if(o&&(r.isFormatElement(t)||r.isRangeFormatElement(t))&&(t=this._setIntoFreeFormat(t)),!r.isComponent(t)){let e=1;if(3===t.nodeType){const e=t.previousSibling,n=t.nextSibling,i=!e||1===e.nodeType||r.onlyZeroWidthSpace(e)?"":e.textContent,l=!n||1===n.nodeType||r.onlyZeroWidthSpace(n)?"":n.textContent;e&&i.length>0&&(t.textContent=i+t.textContent,r.removeItem(e)),n&&n.length>0&&(t.textContent+=l,r.removeItem(n));const o={container:t,startOffset:i.length,endOffset:t.textContent.length-l.length};return this.setRange(t,o.startOffset,t,o.endOffset),o}if(!r.isBreak(t)&&r.isFormatElement(m)){let n=null;t.previousSibling&&!r.isBreak(t.previousSibling)||(n=r.createTextNode(r.zeroWidthSpace),t.parentNode.insertBefore(n,t)),t.nextSibling&&!r.isBreak(t.nextSibling)||(n=r.createTextNode(r.zeroWidthSpace),t.parentNode.insertBefore(n,t.nextSibling)),r._isIgnoreNodeChange(t)&&(t=t.nextSibling,e=0)}this.setRange(t,e,t,e)}return this.history.push(!0),t}},_setIntoFreeFormat:function(e){const t=e.parentNode;let n,i;for(;r.isFormatElement(e)||r.isRangeFormatElement(e);){for(n=e.childNodes,i=null;n[0];)if(i=n[0],r.isFormatElement(i)||r.isRangeFormatElement(i)){if(this._setIntoFreeFormat(i),!e.parentNode)break;n=e.childNodes}else t.insertBefore(i,e);0===e.childNodes.length&&r.removeItem(e),e=r.createElement("BR"),t.insertBefore(e,i.nextSibling)}return e},removeNode:function(){this._resetRangeToTextNode();const t=this.getRange();let n,i=0,l=t.startContainer,o=t.endContainer,s=t.startOffset,a=t.endOffset;const c=3===t.commonAncestorContainer.nodeType&&t.commonAncestorContainer.parentNode===l.parentNode?l.parentNode:t.commonAncestorContainer;c===l&&c===o&&(l=c.children[s],o=c.children[a],s=a=0);let d=null,u=null;const h=r.getListChildNodes(c,null);let p=r.getArrayIndex(h,l),g=r.getArrayIndex(h,o);if(h.length>0&&p>-1&&g>-1){for(let e=p+1,t=l;e>=0;e--)h[e]===t.parentNode&&h[e].firstChild===t&&0===s&&(p=e,t=t.parentNode);for(let e=g-1,t=o;e>p;e--)h[e]===t.parentNode&&1===h[e].nodeType&&(h.splice(e,1),t=t.parentNode,--g)}else{if(0===h.length){if(r.isFormatElement(c)||r.isRangeFormatElement(c)||r.isWysiwygDiv(c)||r.isBreak(c)||r.isMedia(c))return{container:c,offset:0};if(3===c.nodeType)return{container:c,offset:a};h.push(c),l=o=c}else if(l=o=h[0],r.isBreak(l)||r.onlyZeroWidthSpace(l))return{container:r.isMedia(c)?c:l,offset:0};p=g=0}function m(e){const t=r.getFormatElement(e,null);if(r.removeItem(e),r.isListCell(t)){const e=r.getArrayItem(t.children,r.isList,!1);if(e){const n=e.firstElementChild,i=n.childNodes;for(;i[0];)t.insertBefore(i[0],e);r.removeItemAllParents(n,null,null)}}}for(let e=p;e<=g;e++){const t=h[e];if(0===t.length||3===t.nodeType&&void 0===t.data)m(t);else if(t!==l)if(t!==o)m(t);else{if(1===o.nodeType){if(r.isComponent(o))continue;u=r.createTextNode(o.textContent)}else u=r.createTextNode(o.substringData(a,o.length-a));u.length>0?o.data=u.data:m(o)}else{if(1===l.nodeType){if(r.isComponent(l))continue;d=r.createTextNode(l.textContent)}else t===o?(d=r.createTextNode(l.substringData(0,s)+o.substringData(a,o.length-a)),i=s):d=r.createTextNode(l.substringData(0,s));if(d.length>0?l.data=d.data:m(l),t===o)break}}if(n=o&&o.parentNode?o:l&&l.parentNode?l:t.endContainer||t.startContainer,!r.isWysiwygDiv(n)&&0===n.childNodes.length){const t=r.removeItemAllParents(n,function(e){if(this.isComponent(e))return!1;const t=e.textContent;return 0===t.length||/^(\n|\u200B)+$/.test(t)}.bind(r),null);t&&(n=t.sc||t.ec||e.element.wysiwyg)}return this.setRange(n,i,n,i),this.history.push(!0),{container:n,offset:i,prevContainer:l&&l.parentNode?l:null}},applyRangeFormatElement:function(e){this.getRange_addLine(this.getRange(),null);const t=this.getSelectedElementsAndComponents(!1);if(!t||0===t.length)return;e:for(let e,n,i,l,o,s,a=0,c=t.length;a<c;a++)if(e=t[a],r.isListCell(e))if(n=e.lastElementChild,n&&r.isListCell(e.nextElementSibling)&&t.indexOf(e.nextElementSibling)>-1&&(l=n.lastElementChild,t.indexOf(l)>-1)){let e=null;for(;e=l.lastElementChild;)if(r.isList(e)){if(!(t.indexOf(e.lastElementChild)>-1))continue e;l=e.lastElementChild}i=n.firstElementChild,o=t.indexOf(i),s=t.indexOf(l),t.splice(o,s-o+1),c=t.length}else;let n,i,l,o=t[t.length-1];n=r.isRangeFormatElement(o)||r.isFormatElement(o)?o:r.getRangeFormatElement(o,null)||r.getFormatElement(o,null),r.isCell(n)?(i=null,l=n):(i=n.nextSibling,l=n.parentNode);let s=r.getElementDepth(n),a=null;const c=[],d=function(e,t,n){let i=null;if(e!==t&&!r.isTable(t)){if(t&&r.getElementDepth(e)===r.getElementDepth(t))return n;i=r.removeItemAllParents(t,null,e)}return i?i.ec:n};for(let n,o,u,h,p,g,m,f=0,_=t.length;f<_;f++)if(n=t[f],o=n.parentNode,o&&!e.contains(o))if(u=r.getElementDepth(n),r.isList(o)){if(null===a&&(g?(a=g,m=!0,g=null):a=o.cloneNode(!1)),c.push(n),p=t[f+1],f===_-1||p&&p.parentNode!==o){p&&n.contains(p.parentNode)&&(g=p.parentNode.cloneNode(!1));let t,f=o.parentNode;for(;r.isList(f);)t=r.createElement(f.nodeName),t.appendChild(a),a=t,f=f.parentNode;const _=this.detachRangeFormatElement(o,c,null,!0,!0);s>=u?(s=u,l=_.cc,i=d(l,o,_.ec),i&&(l=i.parentNode)):l===_.cc&&(i=_.ec),l!==_.cc&&(h=d(l,_.cc,h),i=void 0!==h?h:_.cc);for(let e=0,t=_.removeArray.length;e<t;e++)a.appendChild(_.removeArray[e]);m||e.appendChild(a),g&&_.removeArray[_.removeArray.length-1].appendChild(g),a=null,m=!1}}else s>=u&&(s=u,l=o,i=n.nextSibling),e.appendChild(n),l!==o&&(h=d(l,o),void 0!==h&&(i=h));if(this.effectNode=null,r.mergeSameTags(e,null,!1),r.mergeNestedTags(e,function(e){return this.isList(e)}.bind(r)),i&&r.getElementDepth(i)>0&&(r.isList(i.parentNode)||r.isList(i.parentNode.parentNode))){const t=r.getParentElement(i,function(e){return this.isRangeFormatElement(e)&&!this.isList(e)}.bind(r)),n=r.splitElement(i,null,t?r.getElementDepth(t)+1:0);n.parentNode.insertBefore(e,n)}else l.insertBefore(e,i),d(e,i);const u=r.getEdgeChildNodes(e.firstElementChild,e.lastElementChild);t.length>1?this.setRange(u.sc,0,u.ec,u.ec.textContent.length):this.setRange(u.ec,u.ec.textContent.length,u.ec,u.ec.textContent.length),this.history.push(!1)},detachRangeFormatElement:function(e,t,n,i,o){const s=this.getRange(),a=s.startOffset,c=s.endOffset;let d=r.getListChildNodes(e,(function(t){return t.parentNode===e})),u=e.parentNode,h=null,p=null,g=e.cloneNode(!1);const m=[],f=r.isList(n);let _=!1,b=!1,v=!1;function y(t,n,i,l){if(r.onlyZeroWidthSpace(n)&&(n.innerHTML=r.zeroWidthSpace),3===n.nodeType)return t.insertBefore(n,i),n;const o=(v?n:l).childNodes;let s=n.cloneNode(!1),a=null,c=null;for(;o[0];)c=o[0],!r._notTextNode(c)||r.isBreak(c)||r.isListCell(s)?s.appendChild(c):(s.childNodes.length>0&&(a||(a=s),t.insertBefore(s,i),s=n.cloneNode(!1)),t.insertBefore(c,i),a||(a=c));if(s.childNodes.length>0){if(r.isListCell(t)&&r.isListCell(s)&&r.isList(i))if(f){for(a=i;i;)s.appendChild(i),i=i.nextSibling;t.parentNode.insertBefore(s,t.nextElementSibling)}else{const t=l.nextElementSibling,n=r.detachNestedList(l,!1);if(e!==n||t!==l.nextElementSibling){const t=s.childNodes;for(;t[0];)l.appendChild(t[0]);e=n,b=!0}}else t.insertBefore(s,i);a||(a=s)}return a}for(let o,s,a,c=0,C=d.length;c<C;c++)if(o=d[c],3!==o.nodeType||!r.isList(g))if(v=!1,i&&0===c&&(h=t&&t.length!==C&&t[0]!==o?g:e.previousSibling),t&&(s=t.indexOf(o)),t&&-1===s)g||(g=e.cloneNode(!1)),g.appendChild(o);else{if(t&&(a=t[s+1]),g&&g.children.length>0&&(u.insertBefore(g,e),g=null),!f&&r.isListCell(o))if(a&&r.getElementDepth(o)!==r.getElementDepth(a)&&(r.isListCell(u)||r.getArrayItem(o.children,r.isList,!1))){const t=o.nextElementSibling,n=r.detachNestedList(o,!1);e===n&&t===o.nextElementSibling||(e=n,b=!0)}else{const t=o;o=r.createElement(i?t.nodeName:r.isList(e.parentNode)||r.isListCell(e.parentNode)?"LI":r.isCell(e.parentNode)?"DIV":l.defaultTag);const n=r.isListCell(o),s=t.childNodes;for(;s[0]&&(!r.isList(s[0])||n);)o.appendChild(s[0]);r.copyFormatAttributes(o,t),v=!0}else o=o.cloneNode(!1);if(!b&&(i?(m.push(o),r.removeItem(d[c])):(n?(_||(u.insertBefore(n,e),_=!0),o=y(n,o,null,d[c])):o=y(u,o,e,d[c]),b||(t?(p=o,h||(h=o)):h||(h=p=o))),b)){b=v=!1,d=r.getListChildNodes(e,(function(t){return t.parentNode===e})),g=e.cloneNode(!1),u=e.parentNode,c=-1,C=d.length;continue}}const C=e.parentNode;let w=e.nextSibling;g&&g.children.length>0&&C.insertBefore(g,w),n?h=n.previousSibling:h||(h=e.previousSibling),w=e.nextSibling!==g?e.nextSibling:g?g.nextSibling:null,0===e.children.length||0===e.textContent.length?r.removeItem(e):r.removeEmptyNode(e,null);let x=null;if(i)x={cc:C,sc:h,ec:w,removeArray:m};else{h||(h=p),p||(p=h);const e=r.getEdgeChildNodes(h,p.parentNode?h:p);x={cc:(e.sc||e.ec).parentNode,sc:e.sc,ec:e.ec}}if(this.effectNode=null,o)return x;!i&&x&&(t?this.setRange(x.sc,a,x.ec,c):this.setRange(x.sc,0,x.sc,0)),this.history.push(!1)},detachList:function(e,t){let n={},i=!1,l=!1,o=null,s=null;const a=function(e){return!this.isComponent(e)}.bind(r);for(let c,d,u,h,p=0,g=e.length;p<g;p++){if(u=p===g-1,d=r.getRangeFormatElement(e[p],a),h=r.isList(d),!c&&h)c=d,n={r:c,f:[r.getParentElement(e[p],"LI")]},0===p&&(i=!0);else if(c&&h)if(c!==d){const a=this.detachRangeFormatElement(n.f[0].parentNode,n.f,null,t,!0);d=e[p].parentNode,i&&(o=a.sc,i=!1),u&&(s=a.ec),h?(c=d,n={r:c,f:[r.getParentElement(e[p],"LI")]},u&&(l=!0)):c=null}else n.f.push(r.getParentElement(e[p],"LI")),u&&(l=!0);if(u&&r.isList(c)){const e=this.detachRangeFormatElement(n.f[0].parentNode,n.f,null,t,!0);(l||1===g)&&(s=e.ec),i&&(o=e.sc||s)}}return{sc:o,ec:s}},nodeChange:function(e,t,n,i){this._resetRangeToTextNode();let l=this.getRange_addLine(this.getRange(),null);t=!!(t&&t.length>0)&&t,n=!!(n&&n.length>0)&&n;const o=!e,s=o&&!n&&!t;let c=l.startContainer,d=l.startOffset,u=l.endContainer,h=l.endOffset;if(s&&l.collapsed&&r.isFormatElement(c.parentNode)&&r.isFormatElement(u.parentNode)||c===u&&1===c.nodeType&&r.isNonEditable(c))return;if(l.collapsed&&!s&&1===c.nodeType&&!r.isBreak(c)&&!r.isComponent(c)){let e=null;const t=c.childNodes[d];t&&(e=t.nextSibling?r.isBreak(t)?t:t.nextSibling:null);const n=r.createTextNode(r.zeroWidthSpace);c.insertBefore(n,e),this.setRange(n,1,n,1),l=this.getRange(),c=l.startContainer,d=l.startOffset,u=l.endContainer,h=l.endOffset}r.isFormatElement(c)&&(c=c.childNodes[d]||c.firstChild,d=0),r.isFormatElement(u)&&(u=u.childNodes[h]||u.lastChild,h=u.textContent.length),o&&(e=r.createElement("DIV"));const p=a.RegExp,g=e.nodeName;if(!s&&c===u&&!n&&e){let t=c,n=0;const i=[],l=e.style;for(let e=0,t=l.length;e<t;e++)i.push(l[e]);const s=e.classList;for(let e=0,t=s.length;e<t;e++)i.push("."+s[e]);if(i.length>0){for(;!r.isFormatElement(t)&&!r.isWysiwygDiv(t);){for(let l=0;l<i.length;l++)if(1===t.nodeType){const s=i[l],a=!!/^\./.test(s)&&new p("\\s*"+s.replace(/^\./,"")+"(\\s+|$)","ig"),r=o?!!t.style[s]:!!t.style[s]&&!!e.style[s]&&t.style[s]===e.style[s],c=!1!==a&&(o?!!t.className.match(a):!!t.className.match(a)&&!!e.className.match(a));(r||c)&&n++}t=t.parentNode}if(n>=i.length)return}}let m,f={},_={},b="",v="",y="";if(t){for(let e,n=0,i=t.length;n<i;n++)e=t[n],/^\./.test(e)?v+=(v?"|":"\\s*(?:")+e.replace(/^\./,""):b+=(b?"|":"(?:;|^|\\s)(?:")+e;b&&(b+=")\\s*:[^;]*\\s*(?:;|$)",b=new p(b,"ig")),v&&(v+=")(?=\\s+|$)",v=new p(v,"ig"))}if(n){y="^(?:"+n[0];for(let e=1;e<n.length;e++)y+="|"+n[e];y+=")$",y=new p(y,"i")}const C=a.Boolean,w={v:!1},x=function(e){const t=e.cloneNode(!1);if(3===t.nodeType||r.isBreak(t))return t;if(s)return null;const n=!y&&o||y&&y.test(t.nodeName);if(n&&!i)return w.v=!0,null;const l=t.style.cssText;let a="";b&&l.length>0&&(a=l.replace(b,"").trim(),a!==l&&(w.v=!0));const c=t.className;let d="";return v&&c.length>0&&(d=c.replace(v,"").trim(),d!==c&&(w.v=!0)),(!o||!v&&c||!b&&l||a||d||!n)&&(a||d||t.nodeName!==g||C(b)!==C(l)||C(v)!==C(c))?(b&&l.length>0&&(t.style.cssText=a),t.style.cssText||t.removeAttribute("style"),v&&c.length>0&&(t.className=d.trim()),t.className.trim()||t.removeAttribute("class"),t.style.cssText||t.className||t.nodeName!==g&&!n?t:(w.v=!0,null)):(w.v=!0,null)},E=this.getSelectedElements(null);l=this.getRange(),c=l.startContainer,d=l.startOffset,u=l.endContainer,h=l.endOffset,r.getFormatElement(c,null)||(c=r.getChildElement(E[0],(function(e){return 3===e.nodeType}),!1),d=0),r.getFormatElement(u,null)||(u=r.getChildElement(E[E.length-1],(function(e){return 3===e.nodeType}),!1),h=u.textContent.length);const S=r.getFormatElement(c,null)===r.getFormatElement(u,null),N=E.length-(S?0:1);m=e.cloneNode(!1);const T=s||o&&function(e){for(let t=0,n=e.length;t<n;t++)if(r._isMaintainedNode(e[t])||r._isSizeNode(e[t]))return!0;return!1}(n),L=o||r._isSizeNode(m),k=this._util_getMaintainedNode.bind(r,T,L),B=this._util_isMaintainedNode.bind(r,T,L);if(S){const e=this._nodeChange_oneLine(E[0],m,x,c,d,u,h,s,o,l.collapsed,w,k,B);f.container=e.startContainer,f.offset=e.startOffset,_.container=e.endContainer,_.offset=e.endOffset,f.container===_.container&&r.onlyZeroWidthSpace(f.container)&&(f.offset=_.offset=1),this._setCommonListStyle(e.ancestor,null)}else{N>0&&(m=e.cloneNode(!1),_=this._nodeChange_endLine(E[N],m,x,u,h,s,o,w,k,B));for(let t,n=N-1;n>0;n--)m=e.cloneNode(!1),t=this._nodeChange_middleLine(E[n],m,x,s,o,w,_.container),t.endContainer&&(_.ancestor=null,_.container=t.endContainer),this._setCommonListStyle(t.ancestor,null);m=e.cloneNode(!1),f=this._nodeChange_startLine(E[0],m,x,c,d,s,o,w,k,B,_.container),f.endContainer&&(_.ancestor=null,_.container=f.endContainer),N<=0?_=f:_.container||(_.ancestor=null,_.container=f.container,_.offset=f.container.textContent.length),this._setCommonListStyle(f.ancestor,null),this._setCommonListStyle(_.ancestor||r.getFormatElement(_.container),null)}this.controllersOff(),this.setRange(f.container,f.offset,_.container,_.offset),this.history.push(!1)},_setCommonListStyle:function(e,t){if(!r.isListCell(e))return;t||e.removeAttribute("style");const n=r.getArrayItem((t||e).childNodes,(function(e){return!r.isBreak(e)}),!0);if(n[0]&&1===n.length){if(!(t=n[0])||1!==t.nodeType)return;const i=t.style,o=e.style;l._textTagsMap[t.nodeName.toLowerCase()]===this._defaultCommand.bold.toLowerCase()?o.fontWeight="bold":i.fontWeight&&(o.fontWeight=i.fontWeight),l._textTagsMap[t.nodeName.toLowerCase()]===this._defaultCommand.italic.toLowerCase()?o.fontStyle="italic":i.fontStyle&&(o.fontStyle=i.fontStyle),i.color&&(o.color=i.color),i.fontSize&&(o.fontSize=i.fontSize),this._setCommonListStyle(e,t)}},_stripRemoveNode:function(e){const t=e.parentNode;if(!e||3===e.nodeType||!t)return;const n=e.childNodes;for(;n[0];)t.insertBefore(n[0],e);t.removeChild(e)},_util_getMaintainedNode:function(e,t,n){return!n||e?null:this.getParentElement(n,this._isMaintainedNode.bind(this))||(t?null:this.getParentElement(n,this._isSizeNode.bind(this)))},_util_isMaintainedNode:function(e,t,n){if(!n||e||1!==n.nodeType)return!1;const i=this._isMaintainedNode(n);return this.getParentElement(n,this._isMaintainedNode.bind(this))?i:i||!t&&this._isSizeNode(n)},_nodeChange_oneLine:function(e,t,n,i,l,o,s,c,d,u,h,p,g){let m=i.parentNode;for(;!(m.nextSibling||m.previousSibling||r.isFormatElement(m.parentNode)||r.isWysiwygDiv(m.parentNode))&&m.nodeName!==t.nodeName;)m=m.parentNode;if(!d&&m===o.parentNode&&m.nodeName===t.nodeName&&r.onlyZeroWidthSpace(i.textContent.slice(0,l))&&r.onlyZeroWidthSpace(o.textContent.slice(s))){const e=m.childNodes;let n=!0;for(let t,l,s,a,c=0,d=e.length;c<d;c++)if(t=e[c],a=!r.onlyZeroWidthSpace(t),t!==i)if(t!==o){if(!l&&a||l&&s&&a){n=!1;break}}else s=!0;else l=!0;if(n)return r.copyTagAttributes(m,t),{startContainer:i,startOffset:l,endContainer:o,endOffset:s}}h.v=!1;const f=e,_=[t],b=e.cloneNode(!1),v=i===o;let y,C,w,x,E,S=i,N=l,T=o,L=s,k=!1,B=!1;const A=a.RegExp;function M(e){const t=new A("(?:;|^|\\s)(?:"+x+"null)\\s*:[^;]*\\s*(?:;|$)","ig");let n="";return t&&e.style.cssText.length>0&&(n=t.test(e.style.cssText)),!n}if(function e(i,l){const o=i.childNodes;for(let i,s=0,a=o.length;s<a;s++){let a=o[s];if(!a)continue;let d,h=l;if(!k&&a===S){let e=b;E=p(a);const o=r.createTextNode(1===S.nodeType?"":S.substringData(0,N)),s=r.createTextNode(1===S.nodeType?"":S.substringData(N,v&&L>=N?L-N:S.data.length-N));if(E){const t=p(l);if(t&&t.parentNode!==e){let n=t,i=null;for(;n.parentNode!==e;){for(l=i=n.parentNode.cloneNode(!1);n.childNodes[0];)i.appendChild(n.childNodes[0]);n.appendChild(i),n=n.parentNode}n.parentNode.appendChild(t)}E=E.cloneNode(!1)}r.onlyZeroWidthSpace(o)||l.appendChild(o);const c=p(l);for(c&&(E=c),E&&(e=E),C=a,y=[],x="";C!==e&&C!==f&&null!==C;)i=g(C)?null:n(C),i&&1===C.nodeType&&M(C)&&(y.push(i),x+=C.style.cssText.substr(0,C.style.cssText.indexOf(":"))+"|"),C=C.parentNode;const d=y.pop()||s;for(w=C=d;y.length>0;)C=y.pop(),w.appendChild(C),w=C;if(t.appendChild(d),e.appendChild(t),E&&!p(T)&&(t=t.cloneNode(!1),b.appendChild(t),_.push(t)),S=s,N=0,k=!0,C!==s&&C.appendChild(S),!v)continue}if(B||a!==T){if(k){if(1===a.nodeType&&!r.isBreak(a)){r._isIgnoreNodeChange(a)?(b.appendChild(a.cloneNode(!0)),u||(t=t.cloneNode(!1),b.appendChild(t),_.push(t))):e(a,a);continue}C=a,y=[],x="";const o=[];for(;null!==C.parentNode&&C!==f&&C!==t;)i=B?C.cloneNode(!1):n(C),1===C.nodeType&&!r.isBreak(a)&&i&&M(C)&&(g(C)?E||o.push(i):y.push(i),x+=C.style.cssText.substr(0,C.style.cssText.indexOf(":"))+"|"),C=C.parentNode;y=y.concat(o);const s=y.pop()||a;for(w=C=s;y.length>0;)C=y.pop(),w.appendChild(C),w=C;if(!g(t.parentNode)||g(s)||r.onlyZeroWidthSpace(t)||(t=t.cloneNode(!1),b.appendChild(t),_.push(t)),B||E||!g(s))s===a?l=B?b:t:B?(b.appendChild(s),l=C):(t.appendChild(s),l=C);else{t=t.cloneNode(!1);const e=s.childNodes;for(let n=0,i=e.length;n<i;n++)t.appendChild(e[n]);s.appendChild(t),b.appendChild(s),_.push(t),l=t.children.length>0?C:t}if(E&&3===a.nodeType)if(p(a)){const e=r.getParentElement(l,function(e){return this._isMaintainedNode(e.parentNode)||e.parentNode===b}.bind(r));E.appendChild(e),t=e.cloneNode(!1),_.push(t),b.appendChild(t)}else E=null}d=a.cloneNode(!1),l.appendChild(d),1!==a.nodeType||r.isBreak(a)||(h=d),e(a,h)}else{E=p(a);const e=r.createTextNode(1===T.nodeType?"":T.substringData(L,T.length-L)),l=r.createTextNode(v||1===T.nodeType?"":T.substringData(0,L));if(E?E=E.cloneNode(!1):g(t.parentNode)&&!E&&(t=t.cloneNode(!1),b.appendChild(t),_.push(t)),!r.onlyZeroWidthSpace(e)){C=a,x="",y=[];const t=[];for(;C!==b&&C!==f&&null!==C;)1===C.nodeType&&M(C)&&(g(C)?t.push(C.cloneNode(!1)):y.push(C.cloneNode(!1)),x+=C.style.cssText.substr(0,C.style.cssText.indexOf(":"))+"|"),C=C.parentNode;for(y=y.concat(t),d=w=C=y.pop()||e;y.length>0;)C=y.pop(),w.appendChild(C),w=C;b.appendChild(d),C.textContent=e.data}if(E&&d){const e=p(d);e&&(E=e)}for(C=a,y=[],x="";C!==b&&C!==f&&null!==C;)i=g(C)?null:n(C),i&&1===C.nodeType&&M(C)&&(y.push(i),x+=C.style.cssText.substr(0,C.style.cssText.indexOf(":"))+"|"),C=C.parentNode;const o=y.pop()||l;for(w=C=o;y.length>0;)C=y.pop(),w.appendChild(C),w=C;E?((t=t.cloneNode(!1)).appendChild(o),E.insertBefore(t,E.firstChild),b.appendChild(E),_.push(t),E=null):t.appendChild(o),T=l,L=l.data.length,B=!0,!c&&u&&(t=l,l.textContent=r.zeroWidthSpace),C!==l&&C.appendChild(T)}}}(e,b),d&&!c&&!h.v)return{ancestor:e,startContainer:i,startOffset:l,endContainer:o,endOffset:s};if(c=c&&d)for(let e=0;e<_.length;e++){let t,n,i,l=_[e];if(u)t=r.createTextNode(r.zeroWidthSpace),b.replaceChild(t,l);else{const e=l.childNodes;for(n=e[0];e[0];)i=e[0],b.insertBefore(i,l);r.removeItem(l)}0===e&&(u?S=T=t:(S=n,T=i))}else{if(d)for(let e=0;e<_.length;e++)this._stripRemoveNode(_[e]);u&&(S=T=t)}r.removeEmptyNode(b,t),u&&(N=S.textContent.length,L=T.textContent.length);const z=c||0===T.textContent.length;r.isBreak(T)||0!==T.textContent.length||(r.removeItem(T),T=S),L=z?T.textContent.length:L;const H={s:0,e:0},I=r.getNodePath(S,b,H),R=!T.parentNode;R&&(T=S);const D={s:0,e:0},O=r.getNodePath(T,b,R||z?null:D);N+=H.s,L=u?N:R?S.textContent.length:z?L+H.s:L+D.s;const F=r.mergeSameTags(b,[I,O],!0);return e.parentNode.replaceChild(b,e),S=r.getNodeFromPath(I,b),T=r.getNodeFromPath(O,b),{ancestor:b,startContainer:S,startOffset:N+F[0],endContainer:T,endOffset:L+F[1]}},_nodeChange_startLine:function(e,t,n,i,l,o,s,a,c,d,u){let h=i.parentNode;for(;!(h.nextSibling||h.previousSibling||r.isFormatElement(h.parentNode)||r.isWysiwygDiv(h.parentNode))&&h.nodeName!==t.nodeName;)h=h.parentNode;if(!s&&h.nodeName===t.nodeName&&!r.isFormatElement(h)&&!h.nextSibling&&r.onlyZeroWidthSpace(i.textContent.slice(0,l))){let n=!0,o=i.previousSibling;for(;o;){if(!r.onlyZeroWidthSpace(o)){n=!1;break}o=o.previousSibling}if(n)return r.copyTagAttributes(h,t),{ancestor:e,container:i,offset:l}}a.v=!1;const p=e,g=[t],m=e.cloneNode(!1);let f,_,b,v,y=i,C=l,w=!1;if(function e(i,l){const o=i.childNodes;for(let i,s,a=0,h=o.length;a<h;a++){const h=o[a];if(!h)continue;let x=l;if(w&&!r.isBreak(h)){if(1===h.nodeType){if(r._isIgnoreNodeChange(h)){if(t=t.cloneNode(!1),s=h.cloneNode(!0),m.appendChild(s),m.appendChild(t),g.push(t),u&&h.contains(u)){const e=r.getNodePath(u,h);u=r.getNodeFromPath(e,s)}}else e(h,h);continue}_=h,f=[];const o=[];for(;null!==_.parentNode&&_!==p&&_!==t;)i=n(_),1===_.nodeType&&i&&(d(_)?v||o.push(i):f.push(i)),_=_.parentNode;f=f.concat(o);const a=f.length>0,y=f.pop()||h;for(b=_=y;f.length>0;)_=f.pop(),b.appendChild(_),b=_;if(d(t.parentNode)&&!d(y)&&(t=t.cloneNode(!1),m.appendChild(t),g.push(t)),!v&&d(y)){t=t.cloneNode(!1);const e=y.childNodes;for(let n=0,i=e.length;n<i;n++)t.appendChild(e[n]);y.appendChild(t),m.appendChild(y),l=d(_)?t:_,g.push(t)}else a?(t.appendChild(y),l=_):l=t;if(v&&3===h.nodeType)if(c(h)){const e=r.getParentElement(l,function(e){return this._isMaintainedNode(e.parentNode)||e.parentNode===m}.bind(r));v.appendChild(e),t=e.cloneNode(!1),g.push(t),m.appendChild(t)}else v=null}if(w||h!==y)i=w?n(h):h.cloneNode(!1),i&&(l.appendChild(i),1!==h.nodeType||r.isBreak(h)||(x=i)),e(h,x);else{let e=m;v=c(h);const o=r.createTextNode(1===y.nodeType?"":y.substringData(0,C)),s=r.createTextNode(1===y.nodeType?"":y.substringData(C,y.length-C));if(v){const t=c(l);if(t&&t.parentNode!==e){let n=t,i=null;for(;n.parentNode!==e;){for(l=i=n.parentNode.cloneNode(!1);n.childNodes[0];)i.appendChild(n.childNodes[0]);n.appendChild(i),n=n.parentNode}n.parentNode.appendChild(t)}v=v.cloneNode(!1)}r.onlyZeroWidthSpace(o)||l.appendChild(o);const a=c(l);for(a&&(v=a),v&&(e=v),_=l,f=[];_!==e&&null!==_;)i=n(_),1===_.nodeType&&i&&f.push(i),_=_.parentNode;const d=f.pop()||l;for(b=_=d;f.length>0;)_=f.pop(),b.appendChild(_),b=_;d!==l?(t.appendChild(d),l=_):l=t,r.isBreak(h)&&t.appendChild(h.cloneNode(!1)),e.appendChild(t),y=s,C=0,w=!0,l.appendChild(y)}}}(e,m),s&&!o&&!a.v)return{ancestor:e,container:i,offset:l,endContainer:u};if(o=o&&s)for(let e=0;e<g.length;e++){let t=g[e];const n=t.childNodes,i=n[0];for(;n[0];)m.insertBefore(n[0],t);r.removeItem(t),0===e&&(y=i)}else if(s){t=t.firstChild;for(let e=0;e<g.length;e++)this._stripRemoveNode(g[e])}if(o||0!==m.childNodes.length){r.removeEmptyNode(m,t),r.onlyZeroWidthSpace(m.textContent)&&(y=m.firstChild,C=0);const n={s:0,e:0},i=r.getNodePath(y,m,n);C+=n.s;const l=r.mergeSameTags(m,[i],!0);e.parentNode.replaceChild(m,e),y=r.getNodeFromPath(i,m),C+=l[0]}else e.childNodes?y=e.childNodes[0]:(y=r.createTextNode(r.zeroWidthSpace),e.appendChild(y));return{ancestor:m,container:y,offset:C,endContainer:u}},_nodeChange_middleLine:function(e,t,n,i,l,o,s){if(!l){let n=null;s&&e.contains(s)&&(n=r.getNodePath(s,e));const i=e.cloneNode(!0),l=t.nodeName,o=t.style.cssText,a=t.className;let c,d=i.childNodes,u=0,h=d.length;for(;u<h&&(c=d[u],3!==c.nodeType);u++){if(c.nodeName!==l){if(!r.isBreak(c)&&r._isIgnoreNodeChange(c))continue;if(1===h){d=c.childNodes,h=d.length,u=-1;continue}break}c.style.cssText+=o,r.addClass(c,a)}if(h>0&&u===h)return e.innerHTML=i.innerHTML,{ancestor:e,endContainer:n?r.getNodeFromPath(n,e):null}}o.v=!1;const a=e.cloneNode(!1),c=[t];let d=!0;if(function e(i,l){const o=i.childNodes;for(let i,u,h=0,p=o.length;h<p;h++){let p=o[h];if(!p)continue;let g=l;if(r.isBreak(p)||!r._isIgnoreNodeChange(p))i=n(p),i&&(d=!1,l.appendChild(i),1===p.nodeType&&(g=i)),r.isBreak(p)||e(p,g);else if(t.childNodes.length>0&&(a.appendChild(t),t=t.cloneNode(!1)),u=p.cloneNode(!0),a.appendChild(u),a.appendChild(t),c.push(t),l=t,s&&p.contains(s)){const e=r.getNodePath(s,p);s=r.getNodeFromPath(e,u)}}}(e,t),d||l&&!i&&!o.v)return{ancestor:e,endContainer:s};if(a.appendChild(t),i&&l)for(let e=0;e<c.length;e++){let t=c[e];const n=t.childNodes;for(;n[0];)a.insertBefore(n[0],t);r.removeItem(t)}else if(l){t=t.firstChild;for(let e=0;e<c.length;e++)this._stripRemoveNode(c[e])}return r.removeEmptyNode(a,t),r.mergeSameTags(a,null,!0),e.parentNode.replaceChild(a,e),{ancestor:a,endContainer:s}},_nodeChange_endLine:function(e,t,n,i,l,o,s,a,c,d){let u=i.parentNode;for(;!(u.nextSibling||u.previousSibling||r.isFormatElement(u.parentNode)||r.isWysiwygDiv(u.parentNode))&&u.nodeName!==t.nodeName;)u=u.parentNode;if(!s&&u.nodeName===t.nodeName&&!r.isFormatElement(u)&&!u.previousSibling&&r.onlyZeroWidthSpace(i.textContent.slice(l))){let n=!0,o=i.nextSibling;for(;o;){if(!r.onlyZeroWidthSpace(o)){n=!1;break}o=o.nextSibling}if(n)return r.copyTagAttributes(u,t),{ancestor:e,container:i,offset:l}}a.v=!1;const h=e,p=[t],g=e.cloneNode(!1);let m,f,_,b,v=i,y=l,C=!1;if(function e(i,l){const o=i.childNodes;for(let i,s=o.length-1;0<=s;s--){const a=o[s];if(!a)continue;let u=l;if(C&&!r.isBreak(a)){if(1===a.nodeType){if(r._isIgnoreNodeChange(a)){t=t.cloneNode(!1);const e=a.cloneNode(!0);g.insertBefore(e,l),g.insertBefore(t,e),p.push(t)}else e(a,a);continue}f=a,m=[];const o=[];for(;null!==f.parentNode&&f!==h&&f!==t;)i=n(f),i&&1===f.nodeType&&(d(f)?b||o.push(i):m.push(i)),f=f.parentNode;m=m.concat(o);const s=m.length>0,u=m.pop()||a;for(_=f=u;m.length>0;)f=m.pop(),_.appendChild(f),_=f;if(d(t.parentNode)&&!d(u)&&(t=t.cloneNode(!1),g.insertBefore(t,g.firstChild),p.push(t)),!b&&d(u)){t=t.cloneNode(!1);const e=u.childNodes;for(let n=0,i=e.length;n<i;n++)t.appendChild(e[n]);u.appendChild(t),g.insertBefore(u,g.firstChild),p.push(t),l=t.children.length>0?f:t}else s?(t.insertBefore(u,t.firstChild),l=f):l=t;if(b&&3===a.nodeType)if(c(a)){const e=r.getParentElement(l,function(e){return this._isMaintainedNode(e.parentNode)||e.parentNode===g}.bind(r));b.appendChild(e),t=e.cloneNode(!1),p.push(t),g.insertBefore(t,g.firstChild)}else b=null}if(C||a!==v)i=C?n(a):a.cloneNode(!1),i&&(l.insertBefore(i,l.firstChild),1!==a.nodeType||r.isBreak(a)||(u=i)),e(a,u);else{b=c(a);const e=r.createTextNode(1===v.nodeType?"":v.substringData(y,v.length-y)),o=r.createTextNode(1===v.nodeType?"":v.substringData(0,y));if(b){b=b.cloneNode(!1);const e=c(l);if(e&&e.parentNode!==g){let t=e,n=null;for(;t.parentNode!==g;){for(l=n=t.parentNode.cloneNode(!1);t.childNodes[0];)n.appendChild(t.childNodes[0]);t.appendChild(n),t=t.parentNode}t.parentNode.insertBefore(e,t.parentNode.firstChild)}b=b.cloneNode(!1)}else d(t.parentNode)&&!b&&(t=t.cloneNode(!1),g.appendChild(t),p.push(t));for(r.onlyZeroWidthSpace(e)||l.insertBefore(e,l.firstChild),f=l,m=[];f!==g&&null!==f;)i=d(f)?null:n(f),i&&1===f.nodeType&&m.push(i),f=f.parentNode;const s=m.pop()||l;for(_=f=s;m.length>0;)f=m.pop(),_.appendChild(f),_=f;s!==l?(t.insertBefore(s,t.firstChild),l=f):l=t,r.isBreak(a)&&t.appendChild(a.cloneNode(!1)),b?(b.insertBefore(t,b.firstChild),g.insertBefore(b,g.firstChild),b=null):g.insertBefore(t,g.firstChild),v=o,y=o.data.length,C=!0,l.insertBefore(v,l.firstChild)}}}(e,g),s&&!o&&!a.v)return{ancestor:e,container:i,offset:l};if(o=o&&s)for(let e=0;e<p.length;e++){let t=p[e];const n=t.childNodes;let i=null;for(;n[0];)i=n[0],g.insertBefore(i,t);r.removeItem(t),e===p.length-1&&(v=i,y=i.textContent.length)}else if(s){t=t.firstChild;for(let e=0;e<p.length;e++)this._stripRemoveNode(p[e])}if(o||0!==g.childNodes.length){if(!s&&0===t.textContent.length)return r.removeEmptyNode(g,null),{ancestor:null,container:null,offset:0};r.removeEmptyNode(g,t),r.onlyZeroWidthSpace(g.textContent)?(v=g.firstChild,y=v.textContent.length):r.onlyZeroWidthSpace(v)&&(v=t,y=1);const n={s:0,e:0},i=r.getNodePath(v,g,n);y+=n.s;const l=r.mergeSameTags(g,[i],!0);e.parentNode.replaceChild(g,e),v=r.getNodeFromPath(i,g),y+=l[0]}else e.childNodes?v=e.childNodes[0]:(v=r.createTextNode(r.zeroWidthSpace),e.appendChild(v));return{ancestor:g,container:v,offset:y}},actionCall:function(t,n,i){if(n){if(/more/i.test(n)&&i!==this._moreLayerActiveButton){const n=e.element.toolbar.querySelector("."+t);return void(n&&(this._moreLayerActiveButton&&(e.element.toolbar.querySelector("."+this._moreLayerActiveButton.getAttribute("data-command")).style.display="none",r.removeClass(this._moreLayerActiveButton,"on")),r.addClass(i,"on"),this._moreLayerActiveButton=i,n.style.display="block",u._showToolbarBalloon(),u._showToolbarInline()))}if(/container/.test(n)&&(null===this._menuTray[t]||i!==this.containerActiveButton))return void this.callPlugin(t,this.containerOn.bind(this,i),i);if(this.isReadOnly)return;if(/submenu/.test(n)&&(null===this._menuTray[t]||i!==this.submenuActiveButton))return void this.callPlugin(t,this.submenuOn.bind(this,i),i);if(/dialog/.test(n))return void this.callPlugin(t,this.plugins[t].open.bind(this),i);/command/.test(n)?this.callPlugin(t,this.plugins[t].action.bind(this),i):/fileBrowser/.test(n)&&this.callPlugin(t,this.plugins[t].open.bind(this,null),i)}else t&&this.commandHandler(i,t);if(/more/i.test(n)){const t=e.element.toolbar.querySelector("."+this._moreLayerActiveButton.getAttribute("data-command"));t&&(r.removeClass(this._moreLayerActiveButton,"on"),this._moreLayerActiveButton=null,t.style.display="none",u._showToolbarBalloon(),u._showToolbarInline())}else/submenu/.test(n)?this.submenuOff():/command/.test(n)||(this.submenuOff(),this.containerOff())},commandHandler:function(t,n){if(!d.isReadOnly||/copy|cut|selectAll|codeView|fullScreen|print|preview|showBlocks/.test(n))switch(n){case"copy":case"cut":this.execCommand(n);break;case"paste":break;case"selectAll":const i=e.element.wysiwyg;let o=r.getChildElement(i.firstChild,(function(e){return 0===e.childNodes.length||3===e.nodeType}),!1)||i.firstChild,s=r.getChildElement(i.lastChild,(function(e){return 0===e.childNodes.length||3===e.nodeType}),!0)||i.lastChild;if(!o||!s)return;if(r.isMedia(o)){const e=this.getFileComponent(o),t=r.createElement("BR"),n=r.createElement(l.defaultTag);n.appendChild(t),o=e?e.component:o,o.parentNode.insertBefore(n,o),o=t}if(r.isMedia(s)){const e=r.createElement("BR"),t=r.createElement(l.defaultTag);t.appendChild(e),i.appendChild(t),s=e}this.setRange(o,0,s,s.textContent.length);break;case"codeView":this.toggleCodeView();break;case"fullScreen":this.toggleFullScreen(t);break;case"indent":case"outdent":this.indent(n);break;case"undo":this.history.undo();break;case"redo":this.history.redo();break;case"removeFormat":this.removeFormat(),this.focus();break;case"print":this.print();break;case"preview":this.preview();break;case"showBlocks":this.toggleDisplayBlocks();break;case"save":if("function"==typeof l.callBackSave)l.callBackSave(this.getContents(!1),this._variable.isChanged);else{if(!this._variable.isChanged||"function"!=typeof h.save)throw Error("[SUNEDITOR.core.commandHandler.fail] Please register call back function in creation option. (callBackSave : Function)");h.save()}this._variable.isChanged=!1,e.tool.save&&e.tool.save.setAttribute("disabled",!0);break;default:n=this._defaultCommand[n.toLowerCase()]||n,this.commandMap[n]||(this.commandMap[n]=t);const a=this._variable.currentNodesMap,c=a.indexOf(n)>-1?null:r.createElement(n);let d=n;/^SUB$/i.test(n)&&a.indexOf("SUP")>-1?d="SUP":/^SUP$/i.test(n)&&a.indexOf("SUB")>-1&&(d="SUB"),this.nodeChange(c,null,[d],!1),this.focus()}},removeFormat:function(){this.nodeChange(null,null,null,null)},indent:function(e){const t=this.getRange(),n=this.getSelectedElements(null),i=[],o="indent"!==e,s=l.rtl?"marginRight":"marginLeft";let a=t.startContainer,c=t.endContainer,d=t.startOffset,u=t.endOffset;for(let e,t,l=0,a=n.length;l<a;l++)e=n[l],r.isListCell(e)&&this.plugins.list?(o||e.previousElementSibling)&&i.push(e):(t=/\d+/.test(e.style[s])?r.getNumber(e.style[s],0):0,o?t-=25:t+=25,r.setStyle(e,s,t<=0?"":t+"px"));i.length>0&&this.plugins.list.editInsideList.call(this,o,i),this.effectNode=null,this.setRange(a,d,c,u),this.history.push(!1)},toggleDisplayBlocks:function(){const t=e.element.wysiwyg;r.toggleClass(t,"se-show-block"),r.hasClass(t,"se-show-block")?r.addClass(this._styleCommandMap.showBlocks,"active"):r.removeClass(this._styleCommandMap.showBlocks,"active"),this._resourcesStateChange()},toggleCodeView:function(){const t=this._variable.isCodeView;this.controllersOff(),r.setDisabledButtons(!t,this.codeViewDisabledButtons),t?(this._setCodeDataToEditor(),e.element.wysiwygFrame.scrollTop=0,e.element.code.style.display="none",e.element.wysiwygFrame.style.display="block",this._variable._codeOriginCssText=this._variable._codeOriginCssText.replace(/(\s?display(\s+)?:(\s+)?)[a-zA-Z]+(?=;)/,"display: none"),this._variable._wysiwygOriginCssText=this._variable._wysiwygOriginCssText.replace(/(\s?display(\s+)?:(\s+)?)[a-zA-Z]+(?=;)/,"display: block"),"auto"!==l.height||l.codeMirrorEditor||(e.element.code.style.height="0px"),this._variable.isCodeView=!1,this._variable.isFullScreen||(this._notHideToolbar=!1,/balloon|balloon-always/i.test(l.mode)&&(e.element._arrow.style.display="",this._isInline=!1,this._isBalloon=!0,u._hideToolbar())),this.nativeFocus(),r.removeClass(this._styleCommandMap.codeView,"active"),this.history.push(!1),this.history._resetCachingButton()):(this._setEditorDataToCodeView(),this._variable._codeOriginCssText=this._variable._codeOriginCssText.replace(/(\s?display(\s+)?:(\s+)?)[a-zA-Z]+(?=;)/,"display: block"),this._variable._wysiwygOriginCssText=this._variable._wysiwygOriginCssText.replace(/(\s?display(\s+)?:(\s+)?)[a-zA-Z]+(?=;)/,"display: none"),"auto"!==l.height||l.codeMirrorEditor||(e.element.code.style.height=e.element.code.scrollHeight>0?e.element.code.scrollHeight+"px":"auto"),l.codeMirrorEditor&&l.codeMirrorEditor.refresh(),this._variable.isCodeView=!0,this._variable.isFullScreen||(this._notHideToolbar=!0,this._isBalloon&&(e.element._arrow.style.display="none",e.element.toolbar.style.left="",this._isInline=!0,this._isBalloon=!1,u._showToolbarInline())),this._variable._range=null,e.element.code.focus(),r.addClass(this._styleCommandMap.codeView,"active")),this._checkPlaceholder(),this.isReadOnly&&r.setDisabledButtons(!0,this.resizingDisabledButtons),"function"==typeof h.toggleCodeView&&h.toggleCodeView(this._variable.isCodeView,this)},_setCodeDataToEditor:function(){const t=this._getCodeView();if(l.fullPage){const e=this._parser.parseFromString(t,"text/html"),n=e.head.children;for(let t=0,i=n.length;t<i;t++)/^script$/i.test(n[t].tagName)&&(e.head.removeChild(n[t]),t--,i--);this._wd.head.innerHTML=e.head.innerHTML,this._wd.body.innerHTML=this.convertContentsForEditor(e.body.innerHTML);const i=e.body.attributes;for(let e=0,t=i.length;e<t;e++)"contenteditable"!==i[e].name&&this._wd.body.setAttribute(i[e].name,i[e].value);if(!r.hasClass(this._wd.body,"sun-editor-editable")){const e=l._editableClass.split(" ");for(let t=0;t<e.length;t++)r.addClass(this._wd.body,l._editableClass[t])}}else e.element.wysiwyg.innerHTML=t.length>0?this.convertContentsForEditor(t):"<"+l.defaultTag+"><br></"+l.defaultTag+">"},_setEditorDataToCodeView:function(){const t=this.convertHTMLForCodeView(e.element.wysiwyg);let n="";if(l.fullPage){const e=r.getAttributesToString(this._wd.body,null);n="<!DOCTYPE html>\n<html>\n"+this._wd.head.outerHTML.replace(/>(?!\n)/g,">\n")+"<body "+e+">\n"+t+"</body>\n</html>"}else n=t;e.element.code.style.display="block",e.element.wysiwygFrame.style.display="none",this._setCodeView(n)},toggleFullScreen:function(t){const n=e.element.topArea,i=e.element.toolbar,o=e.element.editorArea,d=e.element.wysiwygFrame,p=e.element.code,g=this._variable;this.controllersOff();const m="none"===i.style.display||this._isInline&&!this._inlineToolbarAttr.isShow;g.isFullScreen?(g.isFullScreen=!1,d.style.cssText=g._wysiwygOriginCssText,p.style.cssText=g._codeOriginCssText,i.style.cssText="",o.style.cssText=g._editorAreaOriginCssText,n.style.cssText=g._originCssText,s.body.style.overflow=g._bodyOverflow,l.toolbarContainer&&l.toolbarContainer.appendChild(i),l.stickyToolbar>-1&&r.removeClass(i,"se-toolbar-sticky"),g._fullScreenAttrs.sticky&&!l.toolbarContainer&&(g._fullScreenAttrs.sticky=!1,e.element._stickyDummy.style.display="block",r.addClass(i,"se-toolbar-sticky")),this._isInline=g._fullScreenAttrs.inline,this._isBalloon=g._fullScreenAttrs.balloon,this._isInline&&u._showToolbarInline(),l.toolbarContainer&&r.removeClass(i,"se-toolbar-balloon"),u.onScroll_window(),t&&r.changeElement(t.firstElementChild,c.expansion),e.element.topArea.style.marginTop="",r.removeClass(this._styleCommandMap.fullScreen,"active")):(g.isFullScreen=!0,g._fullScreenAttrs.inline=this._isInline,g._fullScreenAttrs.balloon=this._isBalloon,(this._isInline||this._isBalloon)&&(this._isInline=!1,this._isBalloon=!1),l.toolbarContainer&&e.element.relative.insertBefore(i,o),n.style.position="fixed",n.style.top="0",n.style.left="0",n.style.width="100%",n.style.maxWidth="100%",n.style.height="100%",n.style.zIndex="2147483647",""!==e.element._stickyDummy.style.display&&(g._fullScreenAttrs.sticky=!0,e.element._stickyDummy.style.display="none",r.removeClass(i,"se-toolbar-sticky")),g._bodyOverflow=s.body.style.overflow,s.body.style.overflow="hidden",g._editorAreaOriginCssText=o.style.cssText,g._wysiwygOriginCssText=d.style.cssText,g._codeOriginCssText=p.style.cssText,o.style.cssText=i.style.cssText="",d.style.cssText=(d.style.cssText.match(/\s?display(\s+)?:(\s+)?[a-zA-Z]+;/)||[""])[0],p.style.cssText=(p.style.cssText.match(/\s?display(\s+)?:(\s+)?[a-zA-Z]+;/)||[""])[0],i.style.width=d.style.height=p.style.height="100%",i.style.position="relative",i.style.display="block",g.innerHeight_fullScreen=a.innerHeight-i.offsetHeight,o.style.height=g.innerHeight_fullScreen-l.fullScreenOffset+"px",t&&r.changeElement(t.firstElementChild,c.reduction),l.iframe&&"auto"===l.height&&(o.style.overflow="auto",this._iframeAutoHeight()),e.element.topArea.style.marginTop=l.fullScreenOffset+"px",r.addClass(this._styleCommandMap.fullScreen,"active")),m&&h.toolbar.hide(),"function"==typeof h.toggleFullScreen&&h.toggleFullScreen(this._variable.isFullScreen,this)},print:function(){const e=r.createElement("IFRAME");e.style.display="none",s.body.appendChild(e);const t=l.printTemplate?l.printTemplate.replace(/\{\{\s*contents\s*\}\}/i,this.getContents(!0)):this.getContents(!0),n=r.getIframeDocument(e),i=this._wd;if(l.iframe){const e=null!==l._printClass?'class="'+l._printClass+'"':l.fullPage?r.getAttributesToString(i.body,["contenteditable"]):'class="'+l._editableClass+'"';n.write("<!DOCTYPE html><html><head>"+i.head.innerHTML+"</head><body "+e+">"+t+"</body></html>")}else{const e=s.head.getElementsByTagName("link"),i=s.head.getElementsByTagName("style");let o="";for(let t=0,n=e.length;t<n;t++)o+=e[t].outerHTML;for(let e=0,t=i.length;e<t;e++)o+=i[e].outerHTML;n.write("<!DOCTYPE html><html><head>"+o+'</head><body class="'+(null!==l._printClass?l._printClass:l._editableClass)+'">'+t+"</body></html>")}this.showLoading(),a.setTimeout((function(){try{if(e.focus(),r.isIE_Edge||s.documentMode||a.StyleMedia)try{e.contentWindow.document.execCommand("print",!1,null)}catch(t){e.contentWindow.print()}else e.contentWindow.print()}catch(e){throw Error("[SUNEDITOR.core.print.fail] error: "+e)}finally{d.closeLoading(),r.removeItem(e)}}),1e3)},preview:function(){d.submenuOff(),d.containerOff(),d.controllersOff();const e=l.previewTemplate?l.previewTemplate.replace(/\{\{\s*contents\s*\}\}/i,this.getContents(!0)):this.getContents(!0),t=a.open("","_blank");t.mimeType="text/html";const n=this._wd;if(l.iframe){const i=null!==l._printClass?'class="'+l._printClass+'"':l.fullPage?r.getAttributesToString(n.body,["contenteditable"]):'class="'+l._editableClass+'"';t.document.write("<!DOCTYPE html><html><head>"+n.head.innerHTML+"<style>body {overflow:auto !important; margin: 10px auto !important; height:auto !important; outline:1px dashed #ccc;}</style></head><body "+i+">"+e+"</body></html>")}else{const n=s.head.getElementsByTagName("link"),o=s.head.getElementsByTagName("style");let a="";for(let e=0,t=n.length;e<t;e++)a+=n[e].outerHTML;for(let e=0,t=o.length;e<t;e++)a+=o[e].outerHTML;t.document.write('<!DOCTYPE html><html><head><meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1"><title>'+i.toolbar.preview+"</title>"+a+'</head><body class="'+(null!==l._printClass?l._printClass:l._editableClass)+'" style="margin:10px auto !important; height:auto !important; outline:1px dashed #ccc;">'+e+"</body></html>")}},setContents:function(t){this.removeRange();const n=null==t?"":this.convertContentsForEditor(t);if(this._resetComponents(),this._variable.isCodeView){const e=this.convertHTMLForCodeView(n);this._setCodeView(e)}else e.element.wysiwyg.innerHTML=n,this.history.push(!1)},setIframeContents:function(e){if(!l.iframe)return!1;e.head&&(this._wd.head.innerHTML=e.head.replace(/<script[\s\S]*>[\s\S]*<\/script>/gi,"")),e.body&&(this._wd.body.innerHTML=this.convertContentsForEditor(e.body))},getContents:function(t){const n=e.element.wysiwyg.innerHTML,i=r.createElement("DIV");i.innerHTML=n;const o=r.getListChildren(i,(function(e){return/FIGCAPTION/i.test(e.nodeName)}));for(let e=0,t=o.length;e<t;e++)o[e].removeAttribute("contenteditable");if(l.fullPage&&!t){const e=r.getAttributesToString(this._wd.body,["contenteditable"]);return"<!DOCTYPE html><html>"+this._wd.head.outerHTML+"<body "+e+">"+i.innerHTML+"</body></html>"}return i.innerHTML},_makeLine:function(e,t){const n=l.defaultTag;if(1===e.nodeType)return r._disallowedTags(e)?"":!t||r.isFormatElement(e)||r.isRangeFormatElement(e)||r.isComponent(e)||r.isMedia(e)||r.isAnchor(e)&&r.isMedia(e.firstElementChild)?e.outerHTML:"<"+n+">"+e.outerHTML+"</"+n+">";if(3===e.nodeType){if(!t)return r._HTMLConvertor(e.textContent);const i=e.textContent.split(/\n/g);let l="";for(let e,t=0,o=i.length;t<o;t++)e=i[t].trim(),e.length>0&&(l+="<"+n+">"+r._HTMLConvertor(e)+"</"+n+">");return l}return 8===e.nodeType&&this._allowHTMLComments?"\x3c!--"+e.textContent.trim()+"--\x3e":""},_tagConvertor:function(e){if(!this._disallowedTextTagsRegExp)return e;const t=l._textTagsMap;return e.replace(this._disallowedTextTagsRegExp,(function(e,n,i,l){return n+("string"==typeof t[i]?t[i]:i)+(l?" "+l:"")}))},_deleteDisallowedTags:function(e){return e.replace(/\n/g,"").replace(/<(script|style)[\s\S]*>[\s\S]*<\/(script|style)>/gi,"").replace(/<[a-z0-9]+\:[a-z0-9]+[^>^\/]*>[^>]*<\/[a-z0-9]+\:[a-z0-9]+>/gi,"").replace(this.editorTagsWhitelistRegExp,"")},_cleanTags:function(e,t,n){if(/^<[a-z0-9]+\:[a-z0-9]+/i.test(t))return t;let i=null;const l=this._attributesTagsWhitelist[n.match(/(?!<)[a-zA-Z0-9\-]+/)[0].toLowerCase()];if(i=l?t.match(l):t.match(this._attributesWhitelistRegExp),!e||/<a\b/i.test(n)){const e=t.match(/id\s*=\s*(?:"|')[^"']*(?:"|')/);e&&(i||(i=[]),i.push(e[0]))}if((!e||/<span/i.test(n))&&(!i||!/style=/i.test(i.toString()))){const e=t.match(/style\s*=\s*(?:"|')[^"']*(?:"|')/);e&&(i||(i=[]),i.push(e[0]))}if(i)for(let t=0,l=i.length;t<l;t++)e&&/^class="(?!(__se__|se-|katex))/.test(i[t])||(n+=" "+(/^(?:href|src)\s*=\s*('|"|\s)*javascript\s*\:/i.test(i[t])?"":i[t]));return n},cleanHTML:function(e,t){e=this._deleteDisallowedTags(this._parser.parseFromString(e,"text/html").body.innerHTML).replace(/(<[a-zA-Z0-9\-]+)[^>]*(?=>)/g,this._cleanTags.bind(this,!0));const n=s.createRange().createContextualFragment(e);try{r._consistencyCheckOfHTML(n,this._htmlCheckWhitelistRegExp,!0)}catch(e){console.warn("[SUNEDITOR.cleanHTML.consistencyCheck.fail] "+e)}if(this.managedTagsInfo&&this.managedTagsInfo.query){const e=n.querySelectorAll(this.managedTagsInfo.query);for(let t,n,i=0,l=e.length;i<l;i++){n=[].slice.call(e[i].classList);for(let l=0,o=n.length;l<o;l++)if(t=this.managedTagsInfo.map[n[l]],t){t(e[i]);break}}}const i=n.childNodes;let l="",o=!1;for(let e,t=0,n=i.length;t<n;t++)if(e=i[t],1===e.nodeType&&!r.isTextStyleElement(e)&&!r.isBreak(e)&&!r._disallowedTags(e)){o=!0;break}for(let e=0,t=i.length;e<t;e++)l+=this._makeLine(i[e],o);return l=r.htmlRemoveWhiteSpace(l),this._tagConvertor(l?t?l.replace("string"==typeof t?r.createTagsWhitelist(t):t,""):l:e)},convertContentsForEditor:function(e){e=this._deleteDisallowedTags(this._parser.parseFromString(e,"text/html").body.innerHTML).replace(/(<[a-zA-Z0-9\-]+)[^>]*(?=>)/g,this._cleanTags.bind(this,!1));const t=s.createRange().createContextualFragment(e);try{r._consistencyCheckOfHTML(t,this._htmlCheckWhitelistRegExp,!1)}catch(e){console.warn("[SUNEDITOR.convertContentsForEditor.consistencyCheck.fail] "+e)}if(this.managedTagsInfo&&this.managedTagsInfo.query){const e=t.querySelectorAll(this.managedTagsInfo.query);for(let t,n,i=0,l=e.length;i<l;i++){n=[].slice.call(e[i].classList);for(let l=0,o=n.length;l<o;l++)if(t=this.managedTagsInfo.map[n[l]],t){t(e[i]);break}}}const n=t.childNodes;let i="";for(let e=0,t=n.length;e<t;e++)i+=this._makeLine(n[e],!0);return 0===i.length?"<"+l.defaultTag+"><br></"+l.defaultTag+">":(i=r.htmlRemoveWhiteSpace(i),this._tagConvertor(i))},convertHTMLForCodeView:function(e){let t="";const n=a.RegExp,i=new n("^(BLOCKQUOTE|PRE|TABLE|THEAD|TBODY|TR|TH|TD|OL|UL|IMG|IFRAME|VIDEO|AUDIO|FIGURE|FIGCAPTION|HR|BR|CANVAS|SELECT)$","i"),l="string"==typeof e?s.createRange().createContextualFragment(e):e,o=function(e){return this.isFormatElement(e)||this.isComponent(e)}.bind(r);let c=1*this._variable.codeIndent;return c=c>0?new a.Array(c+1).join(" "):"",function e(l,s,d){const u=l.childNodes,h=i.test(l.nodeName),p=h?s:"";for(let g,m,f,_,b,v=0,y=u.length;v<y;v++)g=u[v],f=i.test(g.nodeName),m=f?"\n":"",d=!o(g)||h||/^(TH|TD)$/i.test(l.nodeName)?"":"\n",8!==g.nodeType?3!==g.nodeType?0!==g.childNodes.length?g.outerHTML?(_=g.nodeName.toLowerCase(),b=p||f?s:"",t+=(d||(h?"":m))+b+g.outerHTML.match(n("<"+_+"[^>]*>","i"))[0]+m,e(g,s+c,""),t+=(/\n$/.test(t)?b:"")+"</"+_+">"+(d||m||h||/^(TH|TD)$/i.test(g.nodeName)?"\n":"")):t+=(new a.XMLSerializer).serializeToString(g):t+=(/^HR$/i.test(g.nodeName)?"\n":"")+(/^PRE$/i.test(g.parentElement.nodeName)&&/^BR$/i.test(g.nodeName)?"":p)+g.outerHTML+m:r.isList(g.parentElement)||(t+=r._HTMLConvertor(/^\n+$/.test(g.data)?"":g.data)):t+="\n\x3c!-- "+g.textContent.trim()+" --\x3e"+m}(l,"","\n"),t.trim()+"\n"},addDocEvent:function(e,t,n){s.addEventListener(e,t,n),l.iframe&&this._wd.addEventListener(e,t)},removeDocEvent:function(e,t){s.removeEventListener(e,t),l.iframe&&this._wd.removeEventListener(e,t)},_charCount:function(e){const t=l.maxCharCount,n=l.charCounterType;let i=0;if(e&&(i=this.getCharLength(e,n)),this._setCharCount(),t>0){let e=!1;const l=h.getCharCount(n);if(l>t){if(e=!0,i>0){this._editorRange();const e=this.getRange(),n=e.endOffset-1,i=this.getSelectionNode().textContent,o=e.endOffset-(l-t);this.getSelectionNode().textContent=i.slice(0,o<0?0:o)+i.slice(e.endOffset,i.length),this.setRange(e.endContainer,n,e.endContainer,n)}}else l+i>t&&(e=!0);if(e&&(this._callCounterBlink(),i>0))return!1}return!0},checkCharCount:function(e,t){if(l.maxCharCount){const n=t||l.charCounterType,i=this.getCharLength("string"==typeof e?e:this._charTypeHTML&&1===e.nodeType?e.outerHTML:e.textContent,n);if(i>0&&i+h.getCharCount(n)>l.maxCharCount)return this._callCounterBlink(),!1}return!0},getCharLength:function(e,t){return/byte/.test(t)?r.getByteLength(e):e.length},_setCharCount:function(){e.element.charCounter&&a.setTimeout((function(){e.element.charCounter.textContent=h.getCharCount(l.charCounterType)}))},_callCounterBlink:function(){const t=e.element.charWrapper;t&&!r.hasClass(t,"se-blink")&&(r.addClass(t,"se-blink"),a.setTimeout((function(){r.removeClass(t,"se-blink")}),600))},_checkComponents:function(){for(let e=0,t=this._fileInfoPluginsCheck.length;e<t;e++)this._fileInfoPluginsCheck[e]()},_resetComponents:function(){for(let e=0,t=this._fileInfoPluginsReset.length;e<t;e++)this._fileInfoPluginsReset[e]()},_setCodeView:function(t){l.codeMirrorEditor?l.codeMirrorEditor.getDoc().setValue(t):e.element.code.value=t},_getCodeView:function(){return l.codeMirrorEditor?l.codeMirrorEditor.getDoc().getValue():e.element.code.value},_setKeyEffect:function(e){const t=this.commandMap,i=this.activePlugins;for(let l in t)e.indexOf(l)>-1||!r.hasOwn(t,l)||(i.indexOf(l)>-1?n[l].active.call(this,null):t.OUTDENT&&/^OUTDENT$/i.test(l)?this.isReadOnly||t.OUTDENT.setAttribute("disabled",!0):t.INDENT&&/^INDENT$/i.test(l)?this.isReadOnly||t.INDENT.removeAttribute("disabled"):r.removeClass(t[l],"active"))},_init:function(i,o){const c=a.RegExp;if(this._ww=l.iframe?e.element.wysiwygFrame.contentWindow:a,this._wd=s,this._charTypeHTML="byte-html"===l.charCounterType,!l.iframe&&"function"==typeof a.ShadowRoot){let t=e.element.wysiwygFrame;for(;t;){if(t.shadowRoot){this._shadowRoot=t.shadowRoot;break}if(t instanceof a.ShadowRoot){this._shadowRoot=t;break}t=t.parentNode}this._shadowRoot&&(this._shadowRootControllerEventTarget=[])}const d=a.Object.keys(l._textTagsMap),u=l.addTagsWhitelist?l.addTagsWhitelist.split("|").filter((function(e){return/b|i|ins|s|strike/i.test(e)})):[];for(let e=0;e<u.length;e++)d.splice(d.indexOf(u[e].toLowerCase()),1);this._disallowedTextTagsRegExp=0===d.length?null:new c("(<\\/?)("+d.join("|")+")\\b\\s*([^>^<]+)?\\s*(?=>)","gi");const h="contenteditable|colspan|rowspan|target|href|download|rel|src|alt|class|type|controls|data-format|data-size|data-file-size|data-file-name|data-origin|data-align|data-image-link|data-rotate|data-proportion|data-percentage|origin-size|data-exp|data-font-size";this._allowHTMLComments=l._editorTagsWhitelist.indexOf("//")>-1,this._htmlCheckWhitelistRegExp=new c("^("+l._editorTagsWhitelist.replace("|//","")+")$","i"),this.editorTagsWhitelistRegExp=r.createTagsWhitelist(l._editorTagsWhitelist.replace("|//","|\x3c!--|--\x3e")),this.pasteTagsWhitelistRegExp=r.createTagsWhitelist(l.pasteTagsWhitelist);const p=l.attributesWhitelist,g={};let m="";if(p)for(let e in p)r.hasOwn(p,e)&&!/^on[a-z]+$/i.test(p[e])&&("all"===e?m=p[e]+"|":g[e]=new c("(?:"+p[e]+"|"+h+')\\s*=\\s*(")[^"]*\\1',"ig"));this._attributesWhitelistRegExp=new c("(?:"+m+h+')\\s*=\\s*(")[^"]*\\1',"ig"),this._attributesTagsWhitelist=g,this._isInline=/inline/i.test(l.mode),this._isBalloon=/balloon|balloon-always/i.test(l.mode),this._isBalloonAlways=/balloon-always/i.test(l.mode),this._cachingButtons(),this._fileInfoPluginsCheck=[],this._fileInfoPluginsReset=[],this.managedTagsInfo={query:"",map:{}};const f=[];this.activePlugins=[],this._fileManager.tags=[],this._fileManager.pluginMap={};let _,b,v=[];for(let e in n)if(r.hasOwn(n,e)){if(_=n[e],b=t[e],_.active&&b&&this.callPlugin(e,null,b),"function"==typeof _.checkFileInfo&&"function"==typeof _.resetFileInfo&&(this.callPlugin(e,null,b),this._fileInfoPluginsCheck.push(_.checkFileInfo.bind(this)),this._fileInfoPluginsReset.push(_.resetFileInfo.bind(this))),a.Array.isArray(_.fileTags)){const t=_.fileTags;this.callPlugin(e,null,b),this._fileManager.tags=this._fileManager.tags.concat(t),v.push(e);for(let n=0,i=t.length;n<i;n++)this._fileManager.pluginMap[t[n].toLowerCase()]=e}if(_.managedTags){const e=_.managedTags();f.push("."+e.className),this.managedTagsInfo.map[e.className]=e.method.bind(this)}}this.managedTagsInfo.query=f.toString(),this._fileManager.queryString=this._fileManager.tags.join(","),this._fileManager.regExp=new c("^("+this._fileManager.tags.join("|")+")$","i"),this._fileManager.pluginRegExp=new c("^("+(0===v.length?"undefined":v.join("|"))+")$","i"),this._variable._originCssText=e.element.topArea.style.cssText,this._placeholder=e.element.placeholder,this._lineBreaker=e.element.lineBreaker,this._lineBreakerButton=this._lineBreaker.querySelector("button"),this.history=function(e,t){const n=e._w,i=e.util,l=e.options.historyStackDelayTime;let o=e.context.element,s=e.context.tool.undo,a=e.context.tool.redo,r=null,c=0,d=[];function u(){const n=d[c];o.wysiwyg.innerHTML=n.contents,e.setRange(i.getNodeFromPath(n.s.path,o.wysiwyg),n.s.offset,i.getNodeFromPath(n.e.path,o.wysiwyg),n.e.offset),e.focus(),d.length<=1?(s&&s.setAttribute("disabled",!0),a&&a.setAttribute("disabled",!0)):0===c?(s&&s.setAttribute("disabled",!0),a&&a.removeAttribute("disabled")):c===d.length-1?(s&&s.removeAttribute("disabled"),a&&a.setAttribute("disabled",!0)):(s&&s.removeAttribute("disabled"),a&&a.removeAttribute("disabled")),e.controllersOff(),e._checkComponents(),e._setCharCount(),e._resourcesStateChange(),t()}function h(){e._checkComponents();const n=e.getContents(!0);if(!n||d[c]&&n===d[c].contents)return;c++;const l=e._variable._range;d.length>c&&(d=d.slice(0,c),a&&a.setAttribute("disabled",!0)),d[c]=l?{contents:n,s:{path:i.getNodePath(l.startContainer,null,null),offset:l.startOffset},e:{path:i.getNodePath(l.endContainer,null,null),offset:l.endOffset}}:{contents:n,s:{path:[0,0],offset:[0,0]},e:{path:0,offset:0}},1===c&&s&&s.removeAttribute("disabled"),e._setCharCount(),t()}return{stack:d,push:function(t){n.setTimeout(e._resourcesStateChange.bind(e));const i="number"==typeof t?t>0?t:0:t?l:0;i&&!r||(n.clearTimeout(r),i)?r=n.setTimeout((function(){n.clearTimeout(r),r=null,h()}),i):h()},undo:function(){c>0&&(c--,u())},redo:function(){d.length-1>c&&(c++,u())},go:function(e){c=e<0?d.length-1:e,u()},getCurrentIndex:function(){return c},reset:function(n){s&&s.setAttribute("disabled",!0),a&&a.setAttribute("disabled",!0),e._variable.isChanged=!1,e.context.tool.save&&e.context.tool.save.setAttribute("disabled",!0),d.splice(0),c=0,d[c]={contents:e.getContents(!0),s:{path:[0,0],offset:0},e:{path:[0,0],offset:0}},n||t()},_resetCachingButton:function(){o=e.context.element,s=e.context.tool.undo,a=e.context.tool.redo,0===c?(s&&s.setAttribute("disabled",!0),a&&c===d.length-1&&a.setAttribute("disabled",!0),e._variable.isChanged=!1,e.context.tool.save&&e.context.tool.save.setAttribute("disabled",!0)):c===d.length-1&&a&&a.setAttribute("disabled",!0)},_destroy:function(){r&&n.clearTimeout(r),d=null}}}(this,this._onChange_historyStack.bind(this)),this.addModule([M]),l.iframe&&(this._wd=e.element.wysiwygFrame.contentDocument,e.element.wysiwyg=this._wd.body,l._editorStyles.editor&&(e.element.wysiwyg.style.cssText=l._editorStyles.editor),"auto"===l.height&&(this._iframeAuto=this._wd.body)),this._initWysiwygArea(i,o)},_cachingButtons:function(){this.codeViewDisabledButtons=e.element._buttonTray.querySelectorAll('.se-menu-list button[data-display]:not([class~="se-code-view-enabled"])'),this.resizingDisabledButtons=e.element._buttonTray.querySelectorAll('.se-menu-list button[data-display]:not([class~="se-resizing-enabled"]):not([data-display="MORE"])');const t=e.tool;this.commandMap={SUB:t.subscript,SUP:t.superscript,OUTDENT:t.outdent,INDENT:t.indent},this.commandMap[l.textTags.bold.toUpperCase()]=t.bold,this.commandMap[l.textTags.underline.toUpperCase()]=t.underline,this.commandMap[l.textTags.italic.toUpperCase()]=t.italic,this.commandMap[l.textTags.strike.toUpperCase()]=t.strike,this._styleCommandMap={fullScreen:t.fullScreen,showBlocks:t.showBlocks,codeView:t.codeView}},_initWysiwygArea:function(t,n){e.element.wysiwyg.innerHTML=t?n:this.convertContentsForEditor("string"==typeof n?n:e.element.originElement.value)},_resourcesStateChange:function(){this._iframeAutoHeight(),this._checkPlaceholder()},_onChange_historyStack:function(){this.hasFocus&&u._applyTagEffects(),this._variable.isChanged=!0,e.tool.save&&e.tool.save.removeAttribute("disabled"),h.onChange&&h.onChange(this.getContents(!0),this),"block"===e.element.toolbar.style.display&&u._showToolbarBalloon()},_iframeAutoHeight:function(){this._iframeAuto&&a.setTimeout((function(){e.element.wysiwygFrame.style.height=d._iframeAuto.offsetHeight+"px"}))},_checkPlaceholder:function(){if(this._placeholder){if(this._variable.isCodeView)return void(this._placeholder.style.display="none");const t=e.element.wysiwyg;!r.onlyZeroWidthSpace(t.textContent)||t.querySelector(r._allowedEmptyNodeList)||(t.innerText.match(/\n/g)||"").length>1?this._placeholder.style.display="none":this._placeholder.style.display="block"}},_setDefaultFormat:function(e){if(this._fileManager.pluginRegExp.test(this.currentControllerName))return;const t=this.getRange(),n=t.commonAncestorContainer,i=t.startContainer,o=r.getRangeFormatElement(n,null);let s,a,c;const d=r.getParentElement(n,r.isComponent);if((!d||r.isTable(d))&&(!r.isRangeFormatElement(i)&&!r.isWysiwygDiv(i)||!r.isComponent(i.children[t.startOffset])&&!r.isComponent(i.children[t.startOffset-1]))){if(r.getParentElement(n,r.isNotCheckingNode))return null;if(o)return c=r.createElement(e||l.defaultTag),c.innerHTML=o.innerHTML,0===c.childNodes.length&&(c.innerHTML=r.zeroWidthSpace),o.innerHTML=c.outerHTML,c=o.firstChild,s=r.getEdgeChildNodes(c,null).sc,s||(s=r.createTextNode(r.zeroWidthSpace),c.insertBefore(s,c.firstChild)),a=s.textContent.length,void this.setRange(s,a,s,a);if(r.isRangeFormatElement(n)&&n.childNodes.length<=1){let e=null;return 1===n.childNodes.length&&r.isBreak(n.firstChild)?e=n.firstChild:(e=r.createTextNode(r.zeroWidthSpace),n.appendChild(e)),void this.setRange(e,1,e,1)}if(this.execCommand("formatBlock",!1,e||l.defaultTag),s=r.getEdgeChildNodes(n,n),s=s?s.ec:n,c=r.getFormatElement(s,null),!c)return this.removeRange(),void this._editorRange();if(r.isBreak(c.nextSibling)&&r.removeItem(c.nextSibling),r.isBreak(c.previousSibling)&&r.removeItem(c.previousSibling),r.isBreak(s)){const e=r.createTextNode(r.zeroWidthSpace);s.parentNode.insertBefore(e,s),s=e}this.effectNode=null,this.nativeFocus()}},_setOptionsInit:function(t,n){this.context=e=A(t.originElement,this._getConstructed(t),l),this._componentsInfoReset=!0,this._editorInit(!0,n)},_editorInit:function(t,n){this._init(t,n),u._addEvent(),this._setCharCount(),u._offStickyToolbar(),u.onResize_window(),e.element.toolbar.style.visibility="",this._checkComponents(),this._componentsInfoInit=!1,this._componentsInfoReset=!1,this.history.reset(!0),this._resourcesStateChange(),a.setTimeout((function(){"function"==typeof h.onload&&h.onload(d,t)}))},_getConstructed:function(e){return{_top:e.topArea,_relative:e.relative,_toolBar:e.toolbar,_menuTray:e._menuTray,_editorArea:e.editorArea,_wysiwygArea:e.wysiwygFrame,_codeArea:e.code,_placeholder:e.placeholder,_resizingBar:e.resizingBar,_navigation:e.navigation,_charCounter:e.charCounter,_charWrapper:e.charWrapper,_loading:e.loading,_lineBreaker:e.lineBreaker,_lineBreaker_t:e.lineBreaker_t,_lineBreaker_b:e.lineBreaker_b,_resizeBack:e.resizeBackground,_stickyDummy:e._stickyDummy,_arrow:e._arrow}}},u={_IEisComposing:!1,_lineBreakerBind:null,_responsiveCurrentSize:"default",_responsiveButtonSize:null,_responsiveButtons:null,_directionKeyCode:new a.RegExp("^(8|13|3[2-9]|40|46)$"),_nonTextKeyCode:new a.RegExp("^(8|13|1[6-9]|20|27|3[3-9]|40|45|46|11[2-9]|12[0-3]|144|145)$"),_historyIgnoreKeyCode:new a.RegExp("^(1[6-9]|20|27|3[3-9]|40|45|11[2-9]|12[0-3]|144|145)$"),_onButtonsCheck:new a.RegExp("^("+a.Object.keys(l._textTagsMap).join("|")+")$","i"),_frontZeroWidthReg:new a.RegExp(r.zeroWidthSpace+"+",""),_keyCodeShortcut:{65:"A",66:"B",83:"S",85:"U",73:"I",89:"Y",90:"Z",219:"[",221:"]"},_shortcutCommand:function(e,t){let n=null;switch(u._keyCodeShortcut[e]){case"A":n="selectAll";break;case"B":-1===l.shortcutsDisable.indexOf("bold")&&(n="bold");break;case"S":t&&-1===l.shortcutsDisable.indexOf("strike")?n="strike":t||-1!==l.shortcutsDisable.indexOf("save")||(n="save");break;case"U":-1===l.shortcutsDisable.indexOf("underline")&&(n="underline");break;case"I":-1===l.shortcutsDisable.indexOf("italic")&&(n="italic");break;case"Z":-1===l.shortcutsDisable.indexOf("undo")&&(n=t?"redo":"undo");break;case"Y":-1===l.shortcutsDisable.indexOf("undo")&&(n="redo");break;case"[":-1===l.shortcutsDisable.indexOf("indent")&&(n=l.rtl?"indent":"outdent");break;case"]":-1===l.shortcutsDisable.indexOf("indent")&&(n=l.rtl?"outdent":"indent")}return!!n&&(d.commandHandler(d.commandMap[n],n),!0)},_applyTagEffects:function(){let t=d.getSelectionNode();if(t===d.effectNode)return;d.effectNode=t;const i=l.rtl?"marginRight":"marginLeft",o=d.commandMap,s=this._onButtonsCheck,a=[],c=[],u=d.activePlugins,h=u.length;let p="";for(;t.firstChild;)t=t.firstChild;for(let e=t;!r.isWysiwygDiv(e)&&e;e=e.parentNode)if(1===e.nodeType&&!r.isBreak(e)){if(p=e.nodeName.toUpperCase(),c.push(p),!d.isReadOnly)for(let t,i=0;i<h;i++)t=u[i],-1===a.indexOf(t)&&n[t].active.call(d,e)&&a.push(t);d.isReadOnly||!r.isFormatElement(e)?s.test(p)&&(a.push(p),r.addClass(o[p],"active")):(-1===a.indexOf("OUTDENT")&&o.OUTDENT&&(r.isListCell(e)||e.style[i]&&r.getNumber(e.style[i],0)>0)&&(a.push("OUTDENT"),o.OUTDENT.removeAttribute("disabled")),-1===a.indexOf("INDENT")&&o.INDENT&&(a.push("INDENT"),r.isListCell(e)&&!e.previousElementSibling?o.INDENT.setAttribute("disabled",!0):o.INDENT.removeAttribute("disabled")))}d._setKeyEffect(a),d._variable.currentNodes=c.reverse(),d._variable.currentNodesMap=a,l.showPathLabel&&(e.element.navigation.textContent=d._variable.currentNodes.join(" > "))},_cancelCaptionEdit:function(){this.setAttribute("contenteditable",!1),this.removeEventListener("blur",u._cancelCaptionEdit)},_buttonsEventHandler:function(e){let t=e.target;if(d._bindControllersOff&&e.stopPropagation(),/^(input|textarea|select|option)$/i.test(t.nodeName)?d._antiBlur=!1:e.preventDefault(),r.getParentElement(t,".se-submenu"))e.stopPropagation(),d._notHideToolbar=!0;else{let n=t.getAttribute("data-command"),i=t.className;for(;!n&&!/se-menu-list/.test(i)&&!/sun-editor-common/.test(i);)t=t.parentNode,n=t.getAttribute("data-command"),i=t.className;n!==d._submenuName&&n!==d._containerName||e.stopPropagation()}},onClick_toolbar:function(e){let t=e.target,n=t.getAttribute("data-display"),i=t.getAttribute("data-command"),l=t.className;for(d.controllersOff();t.parentNode&&!i&&!/se-menu-list/.test(l)&&!/se-toolbar/.test(l);)t=t.parentNode,i=t.getAttribute("data-command"),n=t.getAttribute("data-display"),l=t.className;(i||n)&&(t.disabled||(d.isReadOnly||d.hasFocus||d.nativeFocus(),d.isReadOnly||d._variable.isCodeView||d._editorRange(),d.actionCall(i,n,t)))},onMouseDown_wysiwyg:function(t){if(d.isReadOnly||r.isNonEditable(e.element.wysiwyg))return;if("function"==typeof h.onMouseDown&&!1===h.onMouseDown(t,d))return;const n=r.getParentElement(t.target,r.isCell);if(n){const e=d.plugins.table;e&&n!==e._fixedCell&&!e._shift&&d.callPlugin("table",(function(){e.onTableCellMultiSelect.call(d,n,!1)}),null)}d._isBalloon&&u._hideToolbar(),/FIGURE/i.test(t.target.nodeName)&&t.preventDefault()},onClick_wysiwyg:function(t){const n=t.target;if(d.isReadOnly)return t.preventDefault(),r.isAnchor(n)&&a.open(n.href,n.target),!1;if(r.isNonEditable(e.element.wysiwyg))return;if("function"==typeof h.onClick&&!1===h.onClick(t,d))return;const i=d.getFileComponent(n);if(i)return t.preventDefault(),void d.selectComponent(i.target,i.pluginName);const o=r.getParentElement(n,"FIGCAPTION");if(r.isNonEditable(o)&&(t.preventDefault(),o.setAttribute("contenteditable",!0),o.focus(),d._isInline&&!d._inlineToolbarAttr.isShow)){u._showToolbarInline();const e=function(){u._hideToolbar(),o.removeEventListener("blur",e)};o.addEventListener("blur",e)}a.setTimeout(d._editorRange.bind(d)),d._editorRange();const s=d.getSelectionNode(),c=r.getFormatElement(s,null),p=r.getRangeFormatElement(s,null);if(c||r.isNonEditable(n)||r.isList(p))u._applyTagEffects();else{const e=d.getRange();if(r.getFormatElement(e.startContainer)===r.getFormatElement(e.endContainer))if(r.isList(p)){t.preventDefault();const e=r.createElement("LI"),n=s.nextElementSibling;e.appendChild(s),p.insertBefore(e,n),d.focus()}else r.isWysiwygDiv(s)||r.isComponent(s)||r.isTable(s)&&!r.isCell(s)||null===d._setDefaultFormat(r.isRangeFormatElement(p)?"DIV":l.defaultTag)?u._applyTagEffects():(t.preventDefault(),d.focus())}d._isBalloon&&a.setTimeout(u._toggleToolbarBalloon)},_balloonDelay:null,_showToolbarBalloonDelay:function(){u._balloonDelay&&a.clearTimeout(u._balloonDelay),u._balloonDelay=a.setTimeout(function(){a.clearTimeout(this._balloonDelay),this._balloonDelay=null,this._showToolbarBalloon()}.bind(u),350)},_toggleToolbarBalloon:function(){d._editorRange();const e=d.getRange();d._bindControllersOff||!d._isBalloonAlways&&e.collapsed?u._hideToolbar():u._showToolbarBalloon(e)},_showToolbarBalloon:function(t){if(!d._isBalloon)return;const n=t||d.getRange(),i=e.element.toolbar,o=e.element.topArea,s=d.getSelection();let c;if(d._isBalloonAlways&&n.collapsed)c=!0;else if(s.focusNode===s.anchorNode)c=s.focusOffset<s.anchorOffset;else{const e=r.getListChildNodes(n.commonAncestorContainer,null);c=r.getArrayIndex(e,s.focusNode)<r.getArrayIndex(e,s.anchorNode)}let h=n.getClientRects();h=h[c?0:h.length-1];const p=d.getGlobalScrollOffset();let g=p.left,m=p.top;const f=o.offsetWidth,_=u._getEditorOffsets(null),b=_.top,v=_.left;if(i.style.top="-10000px",i.style.visibility="hidden",i.style.display="block",!h){const t=d.getSelectionNode();if(r.isFormatElement(t)){const e=r.createTextNode(r.zeroWidthSpace);d.insertNode(e,null,!1),d.setRange(e,1,e,1),d._editorRange(),h=d.getRange().getClientRects(),h=h[c?0:h.length-1]}if(!h){const n=r.getOffset(t,e.element.wysiwygFrame);h={left:n.left,top:n.top,right:n.left,bottom:n.top+t.offsetHeight,noText:!0},g=0,m=0}c=!0}const y=a.Math.round(e.element._arrow.offsetWidth/2),C=i.offsetWidth,w=i.offsetHeight,x=/iframe/i.test(e.element.wysiwygFrame.nodeName)?e.element.wysiwygFrame.getClientRects()[0]:null;if(x&&(h={left:h.left+x.left,top:h.top+x.top,right:h.right+x.right-x.width,bottom:h.bottom+x.bottom-x.height}),u._setToolbarOffset(c,h,i,v,f,g,m,b,y),C===i.offsetWidth&&w===i.offsetHeight||u._setToolbarOffset(c,h,i,v,f,g,m,b,y),l.toolbarContainer){const e=o.parentElement;let t=l.toolbarContainer,n=t.offsetLeft,s=t.offsetTop;for(;!t.parentElement.contains(e)||!/^(BODY|HTML)$/i.test(t.parentElement.nodeName);)t=t.offsetParent,n+=t.offsetLeft,s+=t.offsetTop;i.style.left=i.offsetLeft-n+o.offsetLeft+"px",i.style.top=i.offsetTop-s+o.offsetTop+"px"}i.style.visibility=""},_setToolbarOffset:function(t,n,i,l,o,c,d,h,p){const g=i.offsetWidth,m=n.noText&&!t?0:i.offsetHeight,f=(t?n.left:n.right)-l-g/2+c,_=f+g-o;let b=(t?n.top-m-p:n.bottom+p)-(n.noText?0:h)+d,v=f<0?1:_<0?f:f-_-1-1,y=!1;const C=b+(t?u._getEditorOffsets(null).top:i.offsetHeight-e.element.wysiwyg.offsetHeight);!t&&C>0&&u._getPageBottomSpace()<C?(t=!0,y=!0):t&&s.documentElement.offsetTop>C&&(t=!1,y=!0),y&&(b=(t?n.top-m-p:n.bottom+p)-(n.noText?0:h)+d),i.style.left=a.Math.floor(v)+"px",i.style.top=a.Math.floor(b)+"px",t?(r.removeClass(e.element._arrow,"se-arrow-up"),r.addClass(e.element._arrow,"se-arrow-down"),e.element._arrow.style.top=m+"px"):(r.removeClass(e.element._arrow,"se-arrow-down"),r.addClass(e.element._arrow,"se-arrow-up"),e.element._arrow.style.top=-p+"px");const w=a.Math.floor(g/2+(f-v));e.element._arrow.style.left=(w+p>i.offsetWidth?i.offsetWidth-p:w<p?p:w)+"px"},_showToolbarInline:function(){if(!d._isInline)return;const t=e.element.toolbar;l.toolbarContainer?t.style.position="relative":t.style.position="absolute",t.style.visibility="hidden",t.style.display="block",d._inlineToolbarAttr.width=t.style.width=l.toolbarWidth,d._inlineToolbarAttr.top=t.style.top=(l.toolbarContainer?0:-1-t.offsetHeight)+"px","function"==typeof h.showInline&&h.showInline(t,e,d),u.onScroll_window(),d._inlineToolbarAttr.isShow=!0,t.style.visibility=""},_hideToolbar:function(){d._notHideToolbar||d._variable.isFullScreen||(e.element.toolbar.style.display="none",d._inlineToolbarAttr.isShow=!1)},onInput_wysiwyg:function(e){if(d.isReadOnly||d.isDisabled)return e.preventDefault(),e.stopPropagation(),d.history.go(d.history.getCurrentIndex()),!1;if(d._editorRange(),"function"==typeof h.onInput&&!1===h.onInput(e,d))return;const t=(null===e.data?"":void 0===e.data?" ":e.data)||"";if(!d._charCount(t))return e.preventDefault(),e.stopPropagation(),!1;d.history.push(!0)},_isUneditableNode:function(e,t){const n=t?e.startContainer:e.endContainer,i=t?e.startOffset:e.endOffset,l=t?"previousSibling":"nextSibling";let o;return 1===n.nodeType?(o=u._isUneditableNode_getSibling(n.childNodes[i],l,n),o&&1===o.nodeType&&"false"===o.getAttribute("contenteditable")):(o=u._isUneditableNode_getSibling(n,l,n),d.isEdgePoint(n,i,t?"front":"end")&&o&&1===o.nodeType&&"false"===o.getAttribute("contenteditable"))},_isUneditableNode_getSibling:function(e,t,n){if(!e)return null;let i=e[t];if(!i){if(i=r.getFormatElement(n),i=i?i[t]:null,!i||r.isComponent(i))return null;i="previousSibling"===t?i.firstElementChild:i.lastElementChild}return i},_onShortcutKey:!1,onKeyDown_wysiwyg:function(t){const n=t.keyCode,i=t.shiftKey,o=t.ctrlKey||t.metaKey||91===n||92===n||224===n,s=t.altKey;if(u._IEisComposing=229===n,!o&&d.isReadOnly&&!u._directionKeyCode.test(n))return t.preventDefault(),!1;if(d.submenuOff(),d._isBalloon&&u._hideToolbar(),"function"==typeof h.onKeyDown&&!1===h.onKeyDown(t,d))return;if(o&&u._shortcutCommand(n,i))return u._onShortcutKey=!0,t.preventDefault(),t.stopPropagation(),!1;u._onShortcutKey&&(u._onShortcutKey=!1);let c=d.getSelectionNode();const p=d.getRange(),g=!p.collapsed||p.startContainer!==p.endContainer,m=d._fileManager.pluginRegExp.test(d.currentControllerName)?d.currentControllerName:"";let f=r.getFormatElement(c,null)||c,_=r.getRangeFormatElement(f,null);switch(n){case 8:if(!g&&m){t.preventDefault(),t.stopPropagation(),d.plugins[m].destroy.call(d);break}if(g&&u._hardDelete()){t.preventDefault(),t.stopPropagation();break}if(!r.isFormatElement(f)&&!e.element.wysiwyg.firstElementChild&&!r.isComponent(c)&&null!==d._setDefaultFormat(l.defaultTag))return t.preventDefault(),t.stopPropagation(),!1;if(!g&&!f.previousElementSibling&&0===p.startOffset&&!c.previousSibling&&!r.isListCell(f)&&r.isFormatElement(f)&&(!r.isFreeFormatElement(f)||r.isClosureFreeFormatElement(f))){if(r.isClosureRangeFormatElement(f.parentNode))return t.preventDefault(),t.stopPropagation(),!1;if(r.isWysiwygDiv(f.parentNode)&&f.childNodes.length<=1&&(!f.firstChild||r.onlyZeroWidthSpace(f.textContent))){if(t.preventDefault(),t.stopPropagation(),f.nodeName.toUpperCase()===l.defaultTag.toUpperCase()){f.innerHTML="<br>";const e=f.attributes;for(;e[0];)f.removeAttribute(e[0].name)}else{const e=r.createElement(l.defaultTag);e.innerHTML="<br>",f.parentElement.replaceChild(e,f)}return d.nativeFocus(),!1}}if(f&&p.startContainer===p.endContainer&&3===c.nodeType&&!r.isFormatElement(c.parentNode)&&(p.collapsed?1===c.textContent.length:p.endOffset-p.startOffset===c.textContent.length)){t.preventDefault();let e=null,n=c.parentNode.previousSibling;const i=c.parentNode.nextSibling;n||(i?(n=i,e=0):(n=r.createElement("BR"),f.appendChild(n))),c.textContent="",r.removeItemAllParents(c,null,f),e="number"==typeof e?e:3===n.nodeType?n.textContent.length:1,d.setRange(n,e,n,e);break}if(u._isUneditableNode(p,!0)){t.preventDefault(),t.stopPropagation();break}const n=p.commonAncestorContainer;if(f=r.getFormatElement(p.startContainer,null),_=r.getRangeFormatElement(f,null),_&&f&&!r.isCell(_)&&!/^FIGCAPTION$/i.test(_.nodeName)){if(r.isListCell(f)&&r.isList(_)&&(r.isListCell(_.parentNode)||f.previousElementSibling)&&(c===f||3===c.nodeType&&(!c.previousSibling||r.isList(c.previousSibling)))&&(r.getFormatElement(p.startContainer,null)!==r.getFormatElement(p.endContainer,null)?_.contains(p.startContainer):0===p.startOffset&&p.collapsed)){if(p.startContainer!==p.endContainer)t.preventDefault(),d.removeNode(),3===p.startContainer.nodeType&&d.setRange(p.startContainer,p.startContainer.textContent.length,p.startContainer,p.startContainer.textContent.length),d.history.push(!0);else{let e=f.previousElementSibling||_.parentNode;if(r.isListCell(e)){t.preventDefault();let n=e;if(!e.contains(f)&&r.isListCell(n)&&r.isList(n.lastElementChild)){for(n=n.lastElementChild.lastElementChild;r.isListCell(n)&&r.isList(n.lastElementChild);)n=n.lastElementChild&&n.lastElementChild.lastElementChild;e=n}let i=e===_.parentNode?_.previousSibling:e.lastChild;i||(i=r.createTextNode(r.zeroWidthSpace),_.parentNode.insertBefore(i,_.parentNode.firstChild));const l=3===i.nodeType?i.textContent.length:1,o=f.childNodes;let s=i,a=o[0];for(;a=o[0];)e.insertBefore(a,s.nextSibling),s=a;r.removeItem(f),0===_.children.length&&r.removeItem(_),d.setRange(i,l,i,l),d.history.push(!0)}}break}if(!g&&0===p.startOffset){let e=!0,i=n;for(;i&&i!==_&&!r.isWysiwygDiv(i);){if(i.previousSibling&&(1===i.previousSibling.nodeType||!r.onlyZeroWidthSpace(i.previousSibling.textContent.trim()))){e=!1;break}i=i.parentNode}if(e&&_.parentNode){t.preventDefault(),d.detachRangeFormatElement(_,r.isListCell(f)?[f]:null,null,!1,!1),d.history.push(!0);break}}}if(!g&&f&&(0===p.startOffset||c===f&&f.childNodes[p.startOffset])){const e=c===f?f.childNodes[p.startOffset]:c,i=f.previousSibling,l=(3===n.nodeType||r.isBreak(n))&&!n.previousSibling&&0===p.startOffset;if(!e.previousSibling&&(r.isComponent(n.previousSibling)||l&&r.isComponent(i))){const e=d.getFileComponent(i);e?(t.preventDefault(),t.stopPropagation(),0===f.textContent.length&&r.removeItem(f),!1===d.selectComponent(e.target,e.pluginName)&&d.blur()):r.isComponent(i)&&(t.preventDefault(),t.stopPropagation(),r.removeItem(i));break}if(r.isNonEditable(e.previousSibling)){t.preventDefault(),t.stopPropagation(),r.removeItem(e.previousSibling);break}}break;case 46:if(m){t.preventDefault(),t.stopPropagation(),d.plugins[m].destroy.call(d);break}if(g&&u._hardDelete()){t.preventDefault(),t.stopPropagation();break}if(u._isUneditableNode(p,!1)){t.preventDefault(),t.stopPropagation();break}if((r.isFormatElement(c)||null===c.nextSibling||r.onlyZeroWidthSpace(c.nextSibling)&&null===c.nextSibling.nextSibling)&&p.startOffset===c.textContent.length){const e=f.nextElementSibling;if(!e)break;if(r.isComponent(e)){if(t.preventDefault(),r.onlyZeroWidthSpace(f)&&(r.removeItem(f),r.isTable(e))){let t=r.getChildElement(e,r.isCell,!1);t=t.firstElementChild||t,d.setRange(t,0,t,0);break}const n=d.getFileComponent(e);n?(t.stopPropagation(),!1===d.selectComponent(n.target,n.pluginName)&&d.blur()):r.isComponent(e)&&(t.stopPropagation(),r.removeItem(e));break}}if(!g&&(d.isEdgePoint(p.endContainer,p.endOffset)||c===f&&f.childNodes[p.startOffset])){const e=c===f&&f.childNodes[p.startOffset]||c;if(e&&r.isNonEditable(e.nextSibling)){t.preventDefault(),t.stopPropagation(),r.removeItem(e.nextSibling);break}if(r.isComponent(e)){t.preventDefault(),t.stopPropagation(),r.removeItem(e);break}}if(f=r.getFormatElement(p.startContainer,null),_=r.getRangeFormatElement(f,null),r.isListCell(f)&&r.isList(_)&&(c===f||3===c.nodeType&&(!c.nextSibling||r.isList(c.nextSibling))&&(r.getFormatElement(p.startContainer,null)!==r.getFormatElement(p.endContainer,null)?_.contains(p.endContainer):p.endOffset===c.textContent.length&&p.collapsed))){p.startContainer!==p.endContainer&&d.removeNode();let e=r.getArrayItem(f.children,r.isList,!1);if(e=e||f.nextElementSibling||_.parentNode.nextElementSibling,e&&(r.isList(e)||r.getArrayItem(e.children,r.isList,!1))){let n,i;if(t.preventDefault(),r.isList(e)){const t=e.firstElementChild;for(i=t.childNodes,n=i[0];i[0];)f.insertBefore(i[0],e);r.removeItem(t)}else{for(n=e.firstChild,i=e.childNodes;i[0];)f.appendChild(i[0]);r.removeItem(e)}d.setRange(n,0,n,0),d.history.push(!0)}break}break;case 9:if(m||l.tabDisable)break;if(t.preventDefault(),o||s||r.isWysiwygDiv(c))break;const b=!p.collapsed||d.isEdgePoint(p.startContainer,p.startOffset),v=d.getSelectedElements(null);c=d.getSelectionNode();const y=[];let C=[],w=r.isListCell(v[0]),x=r.isListCell(v[v.length-1]),E={sc:p.startContainer,so:p.startOffset,ec:p.endContainer,eo:p.endOffset};for(let e,t=0,n=v.length;t<n;t++)if(e=v[t],r.isListCell(e)){if(!e.previousElementSibling&&!i)continue;y.push(e)}else C.push(e);if(y.length>0&&b&&d.plugins.list)E=d.plugins.list.editInsideList.call(d,i,y);else{const e=r.getParentElement(c,r.isCell);if(e&&b){const t=r.getParentElement(e,"table"),n=r.getListChildren(t,r.isCell);let l=i?r.prevIdx(n,e):r.nextIdx(n,e);l!==n.length||i||(l=0),-1===l&&i&&(l=n.length-1);let o=n[l];if(!o)break;o=o.firstElementChild||o,d.setRange(o,0,o,0);break}C=C.concat(y),w=x=null}if(C.length>0)if(i){const e=C.length-1;for(let t,n=0;n<=e;n++){t=C[n].childNodes;for(let e,n=0,i=t.length;n<i&&(e=t[n],e);n++)if(!r.onlyZeroWidthSpace(e)){/^\s{1,4}$/.test(e.textContent)?r.removeItem(e):/^\s{1,4}/.test(e.textContent)&&(e.textContent=e.textContent.replace(/^\s{1,4}/,""));break}}const t=r.getChildElement(C[0],"text",!1),n=r.getChildElement(C[e],"text",!0);!w&&t&&(E.sc=t,E.so=0),!x&&n&&(E.ec=n,E.eo=n.textContent.length)}else{const e=r.createTextNode(new a.Array(d._variable.tabSize+1).join(" "));if(1===C.length){const t=d.insertNode(e,null,!0);if(!t)return!1;w||(E.sc=e,E.so=t.endOffset),x||(E.ec=e,E.eo=t.endOffset)}else{const t=C.length-1;for(let n,i=0;i<=t;i++)n=C[i].firstChild,n&&(r.isBreak(n)?C[i].insertBefore(e.cloneNode(!1),n):n.textContent=e.textContent+n.textContent);const n=r.getChildElement(C[0],"text",!1),i=r.getChildElement(C[t],"text",!0);!w&&n&&(E.sc=n,E.so=0),!x&&i&&(E.ec=i,E.eo=i.textContent.length)}}d.setRange(E.sc,E.so,E.ec,E.eo),d.history.push(!1);break;case 13:const S=r.getFreeFormatElement(c,null);if(d._charTypeHTML){let e="";if(e=!i&&S||i?"<br>":"<"+f.nodeName+"><br></"+f.nodeName+">",!d.checkCharCount(e,"byte-html"))return t.preventDefault(),!1}if(!i){const e=d._isEdgeFormat(p.endContainer,p.endOffset,"end");if(e&&/^H[1-6]$/i.test(f.nodeName)||/^HR$/i.test(f.nodeName)){t.preventDefault();let n=null;const i=d.appendFormatTag(f,l.defaultTag);if(e&&e.length>0){n=e.pop();const t=n;for(;e.length>0;)n=n.appendChild(e.pop());i.appendChild(t)}n=n?n.appendChild(i.firstChild):i.firstChild,d.setRange(n,0,n,0);break}if(S){t.preventDefault();const e=c===S,n=d.getSelection(),i=c.childNodes,l=n.focusOffset,o=c.previousElementSibling,s=c.nextSibling;if(!r.isClosureFreeFormatElement(S)&&i&&(e&&p.collapsed&&i.length-1<=l+1&&r.isBreak(i[l])&&(!i[l+1]||(!i[l+2]||r.onlyZeroWidthSpace(i[l+2].textContent))&&3===i[l+1].nodeType&&r.onlyZeroWidthSpace(i[l+1].textContent))&&l>0&&r.isBreak(i[l-1])||!e&&r.onlyZeroWidthSpace(c.textContent)&&r.isBreak(o)&&(r.isBreak(o.previousSibling)||!r.onlyZeroWidthSpace(o.previousSibling.textContent))&&(!s||!r.isBreak(s)&&r.onlyZeroWidthSpace(s.textContent)))){e?r.removeItem(i[l-1]):r.removeItem(c);const t=d.appendFormatTag(S,r.isFormatElement(S.nextElementSibling)&&!r.isRangeFormatElement(S.nextElementSibling)?S.nextElementSibling:null);r.copyFormatAttributes(t,S),d.setRange(t,1,t,1);break}if(e){h.insertHTML(p.collapsed&&r.isBreak(p.startContainer.childNodes[p.startOffset-1])?"<br>":"<br><br>",!0,!1);let e=n.focusNode;const t=n.focusOffset;S===e&&(e=e.childNodes[t-l>1?t-1:t]),d.setRange(e,1,e,1)}else{const e=n.focusNode.nextSibling,t=r.createElement("BR");d.insertNode(t,null,!1);const i=t.previousSibling,l=t.nextSibling;r.isBreak(e)||r.isBreak(i)||l&&!r.onlyZeroWidthSpace(l)?d.setRange(l,0,l,0):(t.parentNode.insertBefore(t.cloneNode(!1),t),d.setRange(t,1,t,1))}u._onShortcutKey=!0;break}}if(g)break;if(_&&f&&!r.isCell(_)&&!/^FIGCAPTION$/i.test(_.nodeName)){const e=d.getRange();if(d.isEdgePoint(e.endContainer,e.endOffset)&&r.isList(c.nextSibling)){t.preventDefault();const e=r.createElement("LI"),n=r.createElement("BR");e.appendChild(n),f.parentNode.insertBefore(e,f.nextElementSibling),e.appendChild(c.nextSibling),d.setRange(n,1,n,1);break}if((3!==e.commonAncestorContainer.nodeType||!e.commonAncestorContainer.nextElementSibling)&&r.onlyZeroWidthSpace(f.innerText.trim())){t.preventDefault();let e=null;if(r.isListCell(_.parentNode)){if(_=f.parentNode.parentNode.parentNode,e=r.splitElement(f,null,r.getElementDepth(f)-2),!e){const t=r.createElement("LI");t.innerHTML="<br>",_.insertBefore(t,e),e=t}}else{const t=r.isCell(_.parentNode)?"DIV":r.isList(_.parentNode)?"LI":r.isFormatElement(_.nextElementSibling)&&!r.isRangeFormatElement(_.nextElementSibling)?_.nextElementSibling.nodeName:r.isFormatElement(_.previousElementSibling)&&!r.isRangeFormatElement(_.previousElementSibling)?_.previousElementSibling.nodeName:l.defaultTag;e=r.createElement(t);const n=d.detachRangeFormatElement(_,[f],null,!0,!0);n.cc.insertBefore(e,n.ec)}e.innerHTML="<br>",r.removeItemAllParents(f,null,null),d.setRange(e,1,e,1);break}}if(_&&r.getParentElement(_,"FIGCAPTION")&&r.getParentElement(_,r.isList)&&(t.preventDefault(),f=d.appendFormatTag(f,null),d.setRange(f,0,f,0)),m){t.preventDefault(),t.stopPropagation();const n=e[m],i=n._container,o=i.previousElementSibling||i.nextElementSibling;let s=null;r.isListCell(i.parentNode)?s=r.createElement("BR"):(s=r.createElement(r.isFormatElement(o)&&!r.isRangeFormatElement(o)?o.nodeName:l.defaultTag),s.innerHTML="<br>"),i.parentNode.insertBefore(s,i),d.callPlugin(m,(function(){!1===d.selectComponent(n._element,m)&&d.blur()}),null)}break;case 27:if(m)return t.preventDefault(),t.stopPropagation(),d.controllersOff(),!1}if(i&&16===n){t.preventDefault(),t.stopPropagation();const e=d.plugins.table;if(e&&!e._shift&&!e._ref){const t=r.getParentElement(f,r.isCell);if(t)return void e.onTableCellMultiSelect.call(d,t,!0)}}else if(i&&(r.isOSX_IOS?s:o)&&32===n){t.preventDefault(),t.stopPropagation();const e=d.insertNode(r.createTextNode(" "));if(e&&e.container)return void d.setRange(e.container,e.endOffset,e.container,e.endOffset)}if(!(o||s||g||u._nonTextKeyCode.test(n))&&p.collapsed&&p.startContainer===p.endContainer&&r.isBreak(p.commonAncestorContainer)){const e=r.createTextNode(r.zeroWidthSpace);d.insertNode(e,null,!1),d.setRange(e,1,e,1)}},onKeyUp_wysiwyg:function(e){if(u._onShortcutKey)return;d._editorRange();const t=e.keyCode,n=e.ctrlKey||e.metaKey||91===t||92===t||224===t,i=e.altKey;if(d.isReadOnly)return void(!n&&u._directionKeyCode.test(t)&&u._applyTagEffects());const o=d.getRange();let s=d.getSelectionNode();if(d._isBalloon&&(d._isBalloonAlways&&27!==t||!o.collapsed)){if(!d._isBalloonAlways)return void u._showToolbarBalloon();27!==t&&u._showToolbarBalloonDelay()}if(8===t&&r.isWysiwygDiv(s)&&""===s.textContent&&0===s.children.length){e.preventDefault(),e.stopPropagation(),s.innerHTML="";const t=r.createElement(r.isFormatElement(d._variable.currentNodes[0])?d._variable.currentNodes[0]:l.defaultTag);return t.innerHTML="<br>",s.appendChild(t),d.setRange(t,0,t,0),u._applyTagEffects(),void d.history.push(!1)}const a=r.getFormatElement(s,null),c=r.getRangeFormatElement(s,null);a||!o.collapsed||r.isComponent(s)||r.isList(s)||null===d._setDefaultFormat(r.isRangeFormatElement(c)?"DIV":l.defaultTag)||(s=d.getSelectionNode()),u._directionKeyCode.test(t)&&u._applyTagEffects();if(!n&&!i&&!u._nonTextKeyCode.test(t)&&3===s.nodeType&&r.zeroWidthRegExp.test(s.textContent)&&!(void 0!==e.isComposing?e.isComposing:u._IEisComposing)){let e=o.startOffset,t=o.endOffset;const n=(s.textContent.substring(0,t).match(u._frontZeroWidthReg)||"").length;e=o.startOffset-n,t=o.endOffset-n,s.textContent=s.textContent.replace(r.zeroWidthRegExp,""),d.setRange(s,e<0?0:e,s,t<0?0:t)}d._charCount(""),"function"==typeof h.onKeyUp&&!1===h.onKeyUp(e,d)||n||i||u._historyIgnoreKeyCode.test(t)||d.history.push(!0)},onScroll_wysiwyg:function(e){d.controllersOff(),d._isBalloon&&u._hideToolbar(),"function"==typeof h.onScroll&&h.onScroll(e,d)},onFocus_wysiwyg:function(e){d._antiBlur||(d.hasFocus=!0,u._applyTagEffects(),d._isInline&&u._showToolbarInline(),"function"==typeof h.onFocus&&h.onFocus(e,d))},onBlur_wysiwyg:function(t){d._antiBlur||d._variable.isCodeView||(d.hasFocus=!1,d.controllersOff(),(d._isInline||d._isBalloon)&&u._hideToolbar(),d._setKeyEffect([]),d._variable.currentNodes=[],d._variable.currentNodesMap=[],l.showPathLabel&&(e.element.navigation.textContent=""),"function"==typeof h.onBlur&&h.onBlur(t,d))},onMouseDown_resizingBar:function(t){t.stopPropagation(),d.submenuOff(),d.controllersOff();const n=r.getNumber(e.element.wysiwygFrame.style.height,0);d._variable.resizeClientY=t.clientY,e.element.resizeBackground.style.display="block",s.addEventListener("mousemove",u._resize_editor),s.addEventListener("mouseup",(function t(){e.element.resizeBackground.style.display="none",s.removeEventListener("mousemove",u._resize_editor),s.removeEventListener("mouseup",t),"function"==typeof h.onResizeEditor&&h.onResizeEditor(r.getNumber(e.element.wysiwygFrame.style.height,0),n,d)}))},_resize_editor:function(t){const n=e.element.editorArea.offsetHeight+(t.clientY-d._variable.resizeClientY);e.element.wysiwygFrame.style.height=e.element.code.style.height=(n<d._variable.minResizingSize?d._variable.minResizingSize:n)+"px",d._variable.resizeClientY=t.clientY},onResize_window:function(){d.controllersOff();const t=u._responsiveButtonSize;if(t){let n=0;n=(d._isBalloon||d._isInline)&&"auto"===l.toolbarWidth?e.element.topArea.offsetWidth:e.element.toolbar.offsetWidth;let i="default";for(let e=1,l=t.length;e<l;e++)if(n<t[e]){i=t[e]+"";break}u._responsiveCurrentSize!==i&&(u._responsiveCurrentSize=i,h.setToolbarButtons(u._responsiveButtons[i]))}if(0!==e.element.toolbar.offsetWidth){if(e.fileBrowser&&"block"===e.fileBrowser.area.style.display&&(e.fileBrowser.body.style.maxHeight=a.innerHeight-e.fileBrowser.header.offsetHeight-50+"px"),d.submenuActiveButton&&d.submenu&&d._setMenuPosition(d.submenuActiveButton,d.submenu),d._variable.isFullScreen)return d._variable.innerHeight_fullScreen+=a.innerHeight-e.element.toolbar.offsetHeight-d._variable.innerHeight_fullScreen,void(e.element.editorArea.style.height=d._variable.innerHeight_fullScreen+"px");d._variable.isCodeView&&d._isInline?u._showToolbarInline():(d._iframeAutoHeight(),d._sticky&&(e.element.toolbar.style.width=e.element.topArea.offsetWidth-2+"px",u.onScroll_window()))}},onScroll_window:function(){if(d._variable.isFullScreen||0===e.element.toolbar.offsetWidth||l.stickyToolbar<0)return;const t=e.element,n=t.editorArea.offsetHeight,i=(this.scrollY||s.documentElement.scrollTop)+l.stickyToolbar,o=u._getEditorOffsets(l.toolbarContainer).top-(d._isInline?t.toolbar.offsetHeight:0),a=d._isInline&&i-o>0?i-o-e.element.toolbar.offsetHeight:0;i<o?u._offStickyToolbar():i+d._variable.minResizingSize>=n+o?(d._sticky||u._onStickyToolbar(a),t.toolbar.style.top=a+n+o+l.stickyToolbar-i-d._variable.minResizingSize+"px"):i>=o&&u._onStickyToolbar(a)},_getEditorOffsets:function(t){let n=t||e.element.topArea,i=0,l=0,o=0;for(;n;)i+=n.offsetTop,l+=n.offsetLeft,o+=n.scrollTop,n=n.offsetParent;return{top:i,left:l,scroll:o}},_getPageBottomSpace:function(){return s.documentElement.scrollHeight-(u._getEditorOffsets(null).top+e.element.topArea.offsetHeight)},_onStickyToolbar:function(t){const n=e.element;d._isInline||l.toolbarContainer||(n._stickyDummy.style.height=n.toolbar.offsetHeight+"px",n._stickyDummy.style.display="block"),n.toolbar.style.top=l.stickyToolbar+t+"px",n.toolbar.style.width=d._isInline?d._inlineToolbarAttr.width:n.toolbar.offsetWidth+"px",r.addClass(n.toolbar,"se-toolbar-sticky"),d._sticky=!0},_offStickyToolbar:function(){const t=e.element;t._stickyDummy.style.display="none",t.toolbar.style.top=d._isInline?d._inlineToolbarAttr.top:"",t.toolbar.style.width=d._isInline?d._inlineToolbarAttr.width:"",t.editorArea.style.marginTop="",r.removeClass(t.toolbar,"se-toolbar-sticky"),d._sticky=!1},_codeViewAutoHeight:function(){e.element.code.style.height=e.element.code.scrollHeight+"px"},_hardDelete:function(){const e=d.getRange(),t=e.startContainer,n=e.endContainer,i=r.getRangeFormatElement(t),l=r.getRangeFormatElement(n),o=r.isCell(i),s=r.isCell(l),a=e.commonAncestorContainer;if((o&&!i.previousElementSibling&&!i.parentElement.previousElementSibling||s&&!l.nextElementSibling&&!l.parentElement.nextElementSibling)&&i!==l)if(o){if(s)return r.removeItem(r.getParentElement(i,(function(e){return a===e.parentNode}))),d.nativeFocus(),!0;r.removeItem(r.getParentElement(i,(function(e){return a===e.parentNode})))}else r.removeItem(r.getParentElement(l,(function(e){return a===e.parentNode})));const c=1===t.nodeType?r.getParentElement(t,".se-component"):null,u=1===n.nodeType?r.getParentElement(n,".se-component"):null;return c&&r.removeItem(c),u&&r.removeItem(u),!1},onPaste_wysiwyg:function(e){const t=r.isIE?a.clipboardData:e.clipboardData;return!t||u._dataTransferAction("paste",e,t)},_setClipboardComponent:function(e,t,n){e.preventDefault(),e.stopPropagation(),n.setData("text/html",t.component.outerHTML)},onCopy_wysiwyg:function(e){const t=r.isIE?a.clipboardData:e.clipboardData;if("function"==typeof h.onCopy&&!h.onCopy(e,t,d))return e.preventDefault(),e.stopPropagation(),!1;const n=d.currentFileComponentInfo;n&&!r.isIE&&(u._setClipboardComponent(e,n,t),r.addClass(n.component,"se-component-copy"),a.setTimeout((function(){r.removeClass(n.component,"se-component-copy")}),150))},onSave_wysiwyg:function(e){"function"!=typeof h.onSave||h.onSave(e,d)},onCut_wysiwyg:function(e){const t=r.isIE?a.clipboardData:e.clipboardData;if("function"==typeof h.onCut&&!h.onCut(e,t,d))return e.preventDefault(),e.stopPropagation(),!1;const n=d.currentFileComponentInfo;n&&!r.isIE&&(u._setClipboardComponent(e,n,t),r.removeItem(n.component),d.controllersOff()),a.setTimeout((function(){d.history.push(!1)}))},onDrop_wysiwyg:function(e){if(d.isReadOnly||r.isIE)return e.preventDefault(),e.stopPropagation(),!1;const t=e.dataTransfer;return!t||(d.removeNode(),u._setDropLocationSelection(e),u._dataTransferAction("drop",e,t))},_setDropLocationSelection:function(e){if(e.rangeParent)d.setRange(e.rangeParent,e.rangeOffset,e.rangeParent,e.rangeOffset);else if(d._wd.caretRangeFromPoint){const t=d._wd.caretRangeFromPoint(e.clientX,e.clientY);d.setRange(t.startContainer,t.startOffset,t.endContainer,t.endOffset)}else{const e=d.getRange();d.setRange(e.startContainer,e.startOffset,e.endContainer,e.endOffset)}},_dataTransferAction:function(t,n,i){let l,o;if(r.isIE){l=i.getData("Text");const s=d.getRange(),c=r.createElement("DIV"),h={sc:s.startContainer,so:s.startOffset,ec:s.endContainer,eo:s.endOffset};return c.setAttribute("contenteditable",!0),c.style.cssText="position:absolute; top:0; left:0; width:1px; height:1px; overflow:hidden;",e.element.relative.appendChild(c),c.focus(),a.setTimeout((function(){o=c.innerHTML,r.removeItem(c),d.setRange(h.sc,h.so,h.ec,h.eo),u._setClipboardData(t,n,l,o,i)})),!0}if(l=i.getData("text/plain"),o=i.getData("text/html"),!1===u._setClipboardData(t,n,l,o,i))return n.preventDefault(),n.stopPropagation(),!1},_setClipboardData:function(e,t,n,i,l){const o=/class=["']*Mso(Normal|List)/i.test(i)||/content=["']*Word.Document/i.test(i)||/content=["']*OneNote.File/i.test(i)||/content=["']*Excel.Sheet/i.test(i);!i?i=r._HTMLConvertor(n).replace(/\n/g,"<br>"):(o?(i=i.replace(/\n/g," "),n=n.replace(/\n/g," ")):i=(n===i?n:i).replace(/\n/g,"<br>"),i=d.cleanHTML(i,d.pasteTagsWhitelistRegExp));const s=d._charCount(d._charTypeHTML?i:n);if("paste"===e&&"function"==typeof h.onPaste){const e=h.onPaste(t,i,s,d);if(!e)return!1;"string"==typeof e&&(i=e)}if("drop"===e&&"function"==typeof h.onDrop){const e=h.onDrop(t,i,s,d);if(!e)return!1;"string"==typeof e&&(i=e)}const a=l.files;return a.length>0&&!o?(/^image/.test(a[0].type)&&d.plugins.image&&h.insertImage(a),!1):!!s&&(i?(h.insertHTML(i,!0,!1),!1):void 0)},onMouseMove_wysiwyg:function(t){if(d.isDisabled||d.isReadOnly)return!1;const n=r.getParentElement(t.target,r.isComponent),i=d._lineBreaker.style;if(n&&!d.currentControllerName){const o=e.element;let s=0,a=o.wysiwyg;do{s+=a.scrollTop,a=a.parentElement}while(a&&!/^(BODY|HTML)$/i.test(a.nodeName));const c=o.wysiwyg.scrollTop,h=u._getEditorOffsets(null),p=r.getOffset(n,o.wysiwygFrame).top+c,g=t.pageY+s+(l.iframe&&!l.toolbarContainer?o.toolbar.offsetHeight:0),m=p+(l.iframe?s:h.top),f=r.isListCell(n.parentNode);let _="",b="";if((f?!n.previousSibling:!r.isFormatElement(n.previousElementSibling))&&g<m+20)b=p,_="t";else{if((f?n.nextSibling:r.isFormatElement(n.nextElementSibling))||!(g>m+n.offsetHeight-20))return void(i.display="none");b=p+n.offsetHeight,_="b"}d._variable._lineBreakComp=n,d._variable._lineBreakDir=_,i.top=b-c+"px",d._lineBreakerButton.style.left=r.getOffset(n).left+n.offsetWidth/2-15+"px",i.display="block"}else"none"!==i.display&&(i.display="none")},_onMouseDown_lineBreak:function(e){e.preventDefault()},_onLineBreak:function(e){e.preventDefault();const t=d._variable._lineBreakComp,n=this?this:d._variable._lineBreakDir,i=r.isListCell(t.parentNode),o=r.createElement(i?"BR":r.isCell(t.parentNode)?"DIV":l.defaultTag);if(i||(o.innerHTML="<br>"),d._charTypeHTML&&!d.checkCharCount(o.outerHTML,"byte-html"))return;t.parentNode.insertBefore(o,"t"===n?t:t.nextSibling),d._lineBreaker.style.display="none",d._variable._lineBreakComp=null;const s=i?o:o.firstChild;d.setRange(s,1,s,1),d.history.push(!1)},_addEvent:function(){const t=l.iframe?d._ww:e.element.wysiwyg;e.element.toolbar.addEventListener("mousedown",u._buttonsEventHandler,!1),e.element._menuTray.addEventListener("mousedown",u._buttonsEventHandler,!1),e.element.toolbar.addEventListener("click",u.onClick_toolbar,!1),t.addEventListener("mousedown",u.onMouseDown_wysiwyg,!1),t.addEventListener("click",u.onClick_wysiwyg,!1),t.addEventListener(r.isIE?"textinput":"input",u.onInput_wysiwyg,!1),t.addEventListener("keydown",u.onKeyDown_wysiwyg,!1),t.addEventListener("keyup",u.onKeyUp_wysiwyg,!1),t.addEventListener("paste",u.onPaste_wysiwyg,!1),t.addEventListener("copy",u.onCopy_wysiwyg,!1),t.addEventListener("cut",u.onCut_wysiwyg,!1),t.addEventListener("drop",u.onDrop_wysiwyg,!1),t.addEventListener("scroll",u.onScroll_wysiwyg,!1),t.addEventListener("focus",u.onFocus_wysiwyg,!1),t.addEventListener("blur",u.onBlur_wysiwyg,!1),u._lineBreakerBind={a:u._onLineBreak.bind(""),t:u._onLineBreak.bind("t"),b:u._onLineBreak.bind("b")},t.addEventListener("mousemove",u.onMouseMove_wysiwyg,!1),d._lineBreakerButton.addEventListener("mousedown",u._onMouseDown_lineBreak,!1),d._lineBreakerButton.addEventListener("click",u._lineBreakerBind.a,!1),e.element.lineBreaker_t.addEventListener("mousedown",u._lineBreakerBind.t,!1),e.element.lineBreaker_b.addEventListener("mousedown",u._lineBreakerBind.b,!1),d.plugins.table&&t.addEventListener("touchstart",u.onMouseDown_wysiwyg,{passive:!0,useCapture:!1}),"auto"!==l.height||l.codeMirrorEditor||(e.element.code.addEventListener("keydown",u._codeViewAutoHeight,!1),e.element.code.addEventListener("keyup",u._codeViewAutoHeight,!1),e.element.code.addEventListener("paste",u._codeViewAutoHeight,!1)),e.element.resizingBar&&(/\d+/.test(l.height)?e.element.resizingBar.addEventListener("mousedown",u.onMouseDown_resizingBar,!1):r.addClass(e.element.resizingBar,"se-resizing-none")),u._setResponsiveToolbar(),a.removeEventListener("resize",u.onResize_window),a.removeEventListener("scroll",u.onScroll_window),a.addEventListener("resize",u.onResize_window,!1),l.stickyToolbar>-1&&a.addEventListener("scroll",u.onScroll_window,!1)},_removeEvent:function(){const t=l.iframe?d._ww:e.element.wysiwyg;e.element.toolbar.removeEventListener("mousedown",u._buttonsEventHandler),e.element._menuTray.removeEventListener("mousedown",u._buttonsEventHandler),e.element.toolbar.removeEventListener("click",u.onClick_toolbar),t.removeEventListener("mousedown",u.onMouseDown_wysiwyg),t.removeEventListener("click",u.onClick_wysiwyg),t.removeEventListener(r.isIE?"textinput":"input",u.onInput_wysiwyg),t.removeEventListener("keydown",u.onKeyDown_wysiwyg),t.removeEventListener("keyup",u.onKeyUp_wysiwyg),t.removeEventListener("paste",u.onPaste_wysiwyg),t.removeEventListener("copy",u.onCopy_wysiwyg),t.removeEventListener("cut",u.onCut_wysiwyg),t.removeEventListener("drop",u.onDrop_wysiwyg),t.removeEventListener("scroll",u.onScroll_wysiwyg),t.removeEventListener("mousemove",u.onMouseMove_wysiwyg),d._lineBreakerButton.removeEventListener("mousedown",u._onMouseDown_lineBreak),d._lineBreakerButton.removeEventListener("click",u._lineBreakerBind.a),e.element.lineBreaker_t.removeEventListener("mousedown",u._lineBreakerBind.t),e.element.lineBreaker_b.removeEventListener("mousedown",u._lineBreakerBind.b),u._lineBreakerBind=null,t.removeEventListener("touchstart",u.onMouseDown_wysiwyg,{passive:!0,useCapture:!1}),t.removeEventListener("focus",u.onFocus_wysiwyg),t.removeEventListener("blur",u.onBlur_wysiwyg),e.element.code.removeEventListener("keydown",u._codeViewAutoHeight),e.element.code.removeEventListener("keyup",u._codeViewAutoHeight),e.element.code.removeEventListener("paste",u._codeViewAutoHeight),e.element.resizingBar&&e.element.resizingBar.removeEventListener("mousedown",u.onMouseDown_resizingBar),a.removeEventListener("resize",u.onResize_window),a.removeEventListener("scroll",u.onScroll_window)},_setResponsiveToolbar:function(){if(0===o.length)return void(o=null);u._responsiveCurrentSize="default";const e=u._responsiveButtonSize=[],t=u._responsiveButtons={default:o[0]};for(let n,i,l=1,s=o.length;l<s;l++)i=o[l],n=1*i[0],e.push(n),t[n]=i[1];e.sort((function(e,t){return e-t})).unshift("default")}},h={core:d,util:r,onload:null,onScroll:null,onMouseDown:null,onClick:null,onInput:null,onKeyDown:null,onKeyUp:null,onCopy:null,onCut:null,onFocus:null,onBlur:null,onChange:null,onSave:null,onDrop:null,onPaste:null,showInline:null,showController:null,toggleCodeView:null,toggleFullScreen:null,imageUploadHandler:null,videoUploadHandler:null,audioUploadHandler:null,onImageUploadBefore:null,onVideoUploadBefore:null,onAudioUploadBefore:null,onImageUpload:null,onVideoUpload:null,onAudioUpload:null,onImageUploadError:null,onVideoUploadError:null,onAudioUploadError:null,onResizeEditor:null,setToolbarButtons:function(i){d.submenuOff(),d.containerOff();const a=B._createToolBar(s,i,d.plugins,l);o=a.responsiveButtons,d._moreLayerActiveButton=null,u._setResponsiveToolbar(),e.element.toolbar.replaceChild(a._buttonTray,e.element._buttonTray);const c=A(e.element.originElement,d._getConstructed(e.element),l);e.element=c.element,e.tool=c.tool,l.iframe&&(e.element.wysiwyg=d._wd.body),d._cachingButtons(),d.history._resetCachingButton(),d.activePlugins=[];const h=t;let p,g,m;t=a.pluginCallButtons;for(let e in t)r.hasOwn(t,e)&&(p=n[e],g=t[e],p.active&&g&&(m=h[e],d.callPlugin(e,null,m||g),m&&(g.parentElement.replaceChild(m,g),t[e]=m)));d.hasFocus&&u._applyTagEffects(),d._variable.isCodeView&&r.addClass(d._styleCommandMap.codeView,"active"),d._variable.isFullScreen&&r.addClass(d._styleCommandMap.fullScreen,"active"),r.hasClass(e.element.wysiwyg,"se-show-block")&&r.addClass(d._styleCommandMap.showBlocks,"active")},setOptions:function(s){u._removeEvent(),d._resetComponents(),r.removeClass(d._styleCommandMap.showBlocks,"active"),r.removeClass(d._styleCommandMap.codeView,"active"),d._variable.isCodeView=!1,d._iframeAuto=null,d.plugins=s.plugins||d.plugins;const c=[l,s].reduce((function(e,t){for(let n in t)if(r.hasOwn(t,n))if("plugins"===n&&t[n]&&e[n]){let i=e[n],l=t[n];i=i.length?i:a.Object.keys(i).map((function(e){return i[e]})),l=l.length?l:a.Object.keys(l).map((function(e){return l[e]})),e[n]=l.filter((function(e){return-1===i.indexOf(e)})).concat(i)}else e[n]=t[n];return e}),{}),h=e.element,p=h.wysiwyg.innerHTML,g=B._setOptions(c,e,l);g.callButtons&&(t=g.callButtons,d.initPlugins={}),g.plugins&&(d.plugins=n=g.plugins),0===h._menuTray.children.length&&(this._menuTray={}),o=g.toolbar.responsiveButtons,d.options=l=c,d.lang=i=l.lang,l.iframe&&h.wysiwygFrame.addEventListener("load",(function(){r._setIframeDocument(this,l),d._setOptionsInit(h,p)})),h.editorArea.appendChild(h.wysiwygFrame),l.iframe||d._setOptionsInit(h,p)},setDefaultStyle:function(t){const n=l._editorStyles=r._setDefaultOptionStyle(l,t),i=e.element;i.topArea.style.cssText=n.top,i.code.style.cssText=l._editorStyles.frame,i.code.style.display="none","auto"===l.height?i.code.style.overflow="hidden":i.code.style.overflow="",l.iframe?(i.wysiwygFrame.style.cssText=n.frame,i.wysiwyg.style.cssText=n.editor):i.wysiwygFrame.style.cssText=n.frame+n.editor},noticeOpen:function(e){d.notice.open.call(d,e)},noticeClose:function(){d.notice.close.call(d)},save:function(){const t=d.getContents(!1);e.element.originElement.value=t,u.onSave_wysiwyg(t,d)},getContext:function(){return e},getContents:function(e){return d.getContents(e)},getText:function(){return e.element.wysiwyg.textContent},getCharCount:function(t){return t="string"==typeof t?t:l.charCounterType,d.getCharLength(d._charTypeHTML?e.element.wysiwyg.innerHTML:e.element.wysiwyg.textContent,t)},getImagesInfo:function(){return e.image?e.image._infoList:[]},getFilesInfo:function(t){return e[t]?e[t]._infoList:[]},insertImage:function(e){d.plugins.image&&e&&(d.initPlugins.image?d.plugins.image.submitAction.call(d,e):d.callPlugin("image",d.plugins.image.submitAction.bind(d,e),null),d.focus())},insertHTML:function(e,t,n,i){if("string"==typeof e){t||(e=d.cleanHTML(e,null));try{const t=s.createRange().createContextualFragment(e).childNodes;if(n){const e=d._charTypeHTML?"outerHTML":"textContent";let n="";for(let i=0,l=t.length;i<l;i++)n+=t[i][e];if(!d.checkCharCount(n,null))return}let l,o,a,c,u;for(;l=t[0];)c&&3===c.nodeType&&o&&1===o.nodeType&&r.isBreak(l)?(c=l,r.removeItem(l)):(a=d.insertNode(l,o,!1),o=a.container||a,u||(u=a),c=l);3===c.nodeType&&1===o.nodeType&&(o=c);const h=3===o.nodeType?a.endOffset||o.textContent.length:o.childNodes.length;i?d.setRange(u.container||u,u.startOffset||0,o,h):d.setRange(o,h,o,h)}catch(t){if(d.isDisabled||d.isReadOnly)return;console.warn("[SUNEDITOR.insertHTML.fail] "+t),d.execCommand("insertHTML",!1,e)}}else if(r.isComponent(e))d.insertComponent(e,!1,n,!1);else{let t=null;(r.isFormatElement(e)||r.isMedia(e))&&(t=r.getFormatElement(d.getSelectionNode(),null)),d.insertNode(e,t,n)}d.effectNode=null,d.focus(),d.history.push(!1)},setContents:function(e){d.setContents(e)},appendContents:function(t){const n=d.convertContentsForEditor(t);if(d._variable.isCodeView)d._setCodeView(d._getCodeView()+"\n"+d.convertHTMLForCodeView(n));else{const t=r.createElement("DIV");t.innerHTML=n;const i=e.element.wysiwyg,l=t.children;for(let e=0,t=l.length;e<t;e++)i.appendChild(l[e])}d.history.push(!1)},readOnly:function(t){d.isReadOnly=t,t?(d.controllersOff(),d.modalForm&&d.plugins.dialog.close.call(d),e.element.code.setAttribute("readOnly","true")):e.element.code.removeAttribute("readOnly"),r.setDisabledButtons(!!t,d.resizingDisabledButtons),l.codeMirrorEditor&&l.codeMirrorEditor.setOption("readOnly",!!t)},disable:function(){this.toolbar.disable(),this.wysiwyg.disable()},disabled:function(){this.disable()},enable:function(){this.toolbar.enable(),this.wysiwyg.enable()},enabled:function(){this.enable()},show:function(){const t=e.element.topArea.style;"none"===t.display&&(t.display=l.display)},hide:function(){e.element.topArea.style.display="none"},destroy:function(){d.submenuOff(),d.containerOff(),d.controllersOff(),d.notice&&d.notice.close.call(d),d.modalForm&&d.plugins.dialog.close.call(d),d.history._destroy(),u._removeEvent(),r.removeItem(e.element.toolbar),r.removeItem(e.element.topArea);for(let e in d.functions)r.hasOwn(d,e)&&delete d.functions[e];for(let e in d)r.hasOwn(d,e)&&delete d[e];for(let e in u)r.hasOwn(u,e)&&delete u[e];for(let t in e)r.hasOwn(e,t)&&delete e[t];for(let e in t)r.hasOwn(t,e)&&delete t[e];for(let e in this)r.hasOwn(this,e)&&delete this[e]},toolbar:{disable:function(){d.submenuOff(),d.moreLayerOff(),d.containerOff(),e.tool.cover.style.display="block"},disabled:function(){this.disable()},enable:function(){e.tool.cover.style.display="none"},enabled:function(){this.enable()},show:function(){d._isInline?u._showToolbarInline():(e.element.toolbar.style.display="",e.element._stickyDummy.style.display="")},hide:function(){d._isInline?u._hideToolbar():(e.element.toolbar.style.display="none",e.element._stickyDummy.style.display="none")}},wysiwyg:{disable:function(){d.controllersOff(),d.modalForm&&d.plugins.dialog.close.call(d),e.element.wysiwyg.setAttribute("contenteditable",!1),d.isDisabled=!0,l.codeMirrorEditor?l.codeMirrorEditor.setOption("readOnly",!0):e.element.code.setAttribute("disabled","disabled")},enable:function(){e.element.wysiwyg.setAttribute("contenteditable",!0),d.isDisabled=!1,l.codeMirrorEditor?l.codeMirrorEditor.setOption("readOnly",!1):e.element.code.removeAttribute("disabled")}}};d.functions=h,d.options=l;let p=e.element,g=p.originElement,m=p.topArea;return g.style.display="none",m.style.display="block",l.iframe&&p.wysiwygFrame.addEventListener("load",(function(){r._setIframeDocument(this,l),d._editorInit(!1,l.value),l.value=null})),"object"==typeof g.nextElementSibling?g.parentNode.insertBefore(m,g.nextElementSibling):g.parentNode.appendChild(m),p.editorArea.appendChild(p.wysiwygFrame),p=g=m=null,l.iframe||(d._editorInit(!1,l.value),l.value=null),h}(A(i,l.constructed,l.options),l.pluginCallButtons,l.plugins,l.options.lang,t,l._responsiveButtons)}};window.SUNEDITOR||Object.defineProperty(window,"SUNEDITOR",{enumerable:!0,writable:!1,configurable:!1,value:z.init({plugins:E})})},ZED3:function(e,t,n){"use strict";var i,l;i="undefined"!=typeof window?window:this,l=function(e,t){const n={name:"component",set_container:function(e,t){const n=this.util.createElement("DIV");return n.className="se-component "+t,n.setAttribute("contenteditable",!1),n.appendChild(e),n},set_cover:function(e){const t=this.util.createElement("FIGURE");return t.appendChild(e),t},create_caption:function(){const e=this.util.createElement("FIGCAPTION");return e.setAttribute("contenteditable",!0),e.innerHTML="<div>"+this.lang.dialogBox.caption+"</div>",e}};return void 0===t&&(e.SUNEDITOR_MODULES||Object.defineProperty(e,"SUNEDITOR_MODULES",{enumerable:!0,writable:!1,configurable:!1,value:{}}),Object.defineProperty(e.SUNEDITOR_MODULES,"component",{enumerable:!0,writable:!1,configurable:!1,value:n})),n},"object"==typeof e.exports?e.exports=i.document?l(i,!0):function(e){if(!e.document)throw new Error("SUNEDITOR_MODULES a window with a document");return l(e)}:l(i)},ee5k:function(e,t,n){"use strict";var i,l;i="undefined"!=typeof window?window:this,l=function(e,t){const n={name:"resizing",add:function(e){const t=e.icons,n=e.context;n.resizing={_resizeClientX:0,_resizeClientY:0,_resize_plugin:"",_resize_w:0,_resize_h:0,_origin_w:0,_origin_h:0,_rotateVertical:!1,_resize_direction:"",_move_path:null,_isChange:!1,alignIcons:{basic:t.align_justify,left:t.align_left,right:t.align_right,center:t.align_center}};let i=this.setController_resize(e);n.resizing.resizeContainer=i,n.resizing.resizeDiv=i.querySelector(".se-modal-resize"),n.resizing.resizeDot=i.querySelector(".se-resize-dot"),n.resizing.resizeDisplay=i.querySelector(".se-resize-display");let l=this.setController_button(e);n.resizing.resizeButton=l;let o=n.resizing.resizeHandles=n.resizing.resizeDot.querySelectorAll("span");n.resizing.resizeButtonGroup=l.querySelector("._se_resizing_btn_group"),n.resizing.rotationButtons=l.querySelectorAll("._se_resizing_btn_group ._se_rotation"),n.resizing.percentageButtons=l.querySelectorAll("._se_resizing_btn_group ._se_percentage"),n.resizing.alignMenu=l.querySelector(".se-resizing-align-list"),n.resizing.alignMenuList=n.resizing.alignMenu.querySelectorAll("button"),n.resizing.alignButton=l.querySelector("._se_resizing_align_button"),n.resizing.autoSizeButton=l.querySelector("._se_resizing_btn_group ._se_auto_size"),n.resizing.captionButton=l.querySelector("._se_resizing_caption_button"),i.addEventListener("mousedown",(function(e){e.preventDefault()})),o[0].addEventListener("mousedown",this.onMouseDown_resize_handle.bind(e)),o[1].addEventListener("mousedown",this.onMouseDown_resize_handle.bind(e)),o[2].addEventListener("mousedown",this.onMouseDown_resize_handle.bind(e)),o[3].addEventListener("mousedown",this.onMouseDown_resize_handle.bind(e)),o[4].addEventListener("mousedown",this.onMouseDown_resize_handle.bind(e)),o[5].addEventListener("mousedown",this.onMouseDown_resize_handle.bind(e)),o[6].addEventListener("mousedown",this.onMouseDown_resize_handle.bind(e)),o[7].addEventListener("mousedown",this.onMouseDown_resize_handle.bind(e)),l.addEventListener("click",this.onClick_resizeButton.bind(e)),n.element.relative.appendChild(i),n.element.relative.appendChild(l),i=null,l=null,o=null},setController_resize:function(e){const t=e.util.createElement("DIV");return t.className="se-controller se-resizing-container",t.style.display="none",t.innerHTML='<div class="se-modal-resize"></div><div class="se-resize-dot"><span class="tl"></span><span class="tr"></span><span class="bl"></span><span class="br"></span><span class="lw"></span><span class="th"></span><span class="rw"></span><span class="bh"></span><div class="se-resize-display"></div></div>',t},setController_button:function(e){const t=e.lang,n=e.icons,i=e.util.createElement("DIV");return i.className="se-controller se-controller-resizing",i.innerHTML='<div class="se-arrow se-arrow-up"></div><div class="se-btn-group _se_resizing_btn_group"><button type="button" data-command="percent" data-value="1" class="se-tooltip _se_percentage"><span>100%</span><span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.resize100+'</span></span></button><button type="button" data-command="percent" data-value="0.75" class="se-tooltip _se_percentage"><span>75%</span><span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.resize75+'</span></span></button><button type="button" data-command="percent" data-value="0.5" class="se-tooltip _se_percentage"><span>50%</span><span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.resize50+'</span></span></button><button type="button" data-command="auto" class="se-btn se-tooltip _se_auto_size">'+n.auto_size+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.autoSize+'</span></span></button><button type="button" data-command="rotate" data-value="-90" class="se-btn se-tooltip _se_rotation">'+n.rotate_left+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.rotateLeft+'</span></span></button><button type="button" data-command="rotate" data-value="90" class="se-btn se-tooltip _se_rotation">'+n.rotate_right+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.rotateRight+'</span></span></button></div><div class="se-btn-group" style="padding-top: 0;"><button type="button" data-command="mirror" data-value="h" class="se-btn se-tooltip">'+n.mirror_horizontal+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.mirrorHorizontal+'</span></span></button><button type="button" data-command="mirror" data-value="v" class="se-btn se-tooltip">'+n.mirror_vertical+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.mirrorVertical+'</span></span></button><button type="button" data-command="onalign" class="se-btn se-tooltip _se_resizing_align_button">'+n.align_justify+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.toolbar.align+'</span></span></button><div class="se-btn-group-sub sun-editor-common se-list-layer se-resizing-align-list"><div class="se-list-inner"><ul class="se-list-basic"><li><button type="button" class="se-btn-list se-tooltip" data-command="align" data-value="basic">'+n.align_justify+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.dialogBox.basic+'</span></span></button></li><li><button type="button" class="se-btn-list se-tooltip" data-command="align" data-value="left">'+n.align_left+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.dialogBox.left+'</span></span></button></li><li><button type="button" class="se-btn-list se-tooltip" data-command="align" data-value="center">'+n.align_center+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.dialogBox.center+'</span></span></button></li><li><button type="button" class="se-btn-list se-tooltip" data-command="align" data-value="right">'+n.align_right+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.dialogBox.right+'</span></span></button></li></ul></div></div><button type="button" data-command="caption" class="se-btn se-tooltip _se_resizing_caption_button">'+n.caption+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.dialogBox.caption+'</span></span></button><button type="button" data-command="revert" class="se-btn se-tooltip">'+n.revert+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.dialogBox.revertButton+'</span></span></button><button type="button" data-command="update" class="se-btn se-tooltip">'+n.modify+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.edit+'</span></span></button><button type="button" data-command="delete" class="se-btn se-tooltip">'+n.delete+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.remove+"</span></span></button></div>",i},_module_getSizeX:function(e,t,n,i){return t||(t=e._element),n||(n=e._cover),i||(i=e._container),t?/%$/.test(t.style.width)?(i&&this.util.getNumber(i.style.width,2)||100)+"%":t.style.width:""},_module_getSizeY:function(e,t,n,i){return t||(t=e._element),n||(n=e._cover),i||(i=e._container),i&&n?this.util.getNumber(n.style.paddingBottom,0)>0&&!this.context.resizing._rotateVertical?n.style.height:/%$/.test(t.style.height)&&/%$/.test(t.style.width)?(i&&this.util.getNumber(i.style.height,2)||100)+"%":t.style.height:t&&t.style.height||""},_module_setModifyInputSize:function(e,t){const n=e._onlyPercentage&&this.context.resizing._rotateVertical;e.proportion.checked=e._proportionChecked="false"!==e._element.getAttribute("data-proportion");let i=n?"":this.plugins.resizing._module_getSizeX.call(this,e);if(i===e._defaultSizeX&&(i=""),e._onlyPercentage&&(i=this.util.getNumber(i,2)),e.inputX.value=i,t.setInputSize.call(this,"x"),!e._onlyPercentage){let t=n?"":this.plugins.resizing._module_getSizeY.call(this,e);t===e._defaultSizeY&&(t=""),e._onlyPercentage&&(t=this.util.getNumber(t,2)),e.inputY.value=t}e.inputX.disabled=!!n,e.inputY.disabled=!!n,e.proportion.disabled=!!n,t.setRatio.call(this)},_module_setInputSize:function(e,t){if(e._onlyPercentage)"x"===t&&e.inputX.value>100&&(e.inputX.value=100);else if(e.proportion.checked&&e._ratio&&/\d/.test(e.inputX.value)&&/\d/.test(e.inputY.value)){const n=e.inputX.value.replace(/\d+|\./g,"")||e.sizeUnit,i=e.inputY.value.replace(/\d+|\./g,"")||e.sizeUnit;if(n!==i)return;const l="%"===n?2:0;"x"===t?e.inputY.value=this.util.getNumber(e._ratioY*this.util.getNumber(e.inputX.value,l),l)+i:e.inputX.value=this.util.getNumber(e._ratioX*this.util.getNumber(e.inputY.value,l),l)+n}},_module_setRatio:function(e){const t=e.inputX.value,n=e.inputY.value;if(e.proportion.checked&&/\d+/.test(t)&&/\d+/.test(n)){if((t.replace(/\d+|\./g,"")||e.sizeUnit)!==(n.replace(/\d+|\./g,"")||e.sizeUnit))e._ratio=!1;else if(!e._ratio){const i=this.util.getNumber(t,0),l=this.util.getNumber(n,0);e._ratio=!0,e._ratioX=i/l,e._ratioY=l/i}}else e._ratio=!1},_module_sizeRevert:function(e){e._onlyPercentage?e.inputX.value=e._origin_w>100?100:e._origin_w:(e.inputX.value=e._origin_w,e.inputY.value=e._origin_h)},_module_saveCurrentSize:function(e){const t=this.plugins.resizing._module_getSizeX.call(this,e),n=this.plugins.resizing._module_getSizeY.call(this,e);e._element.setAttribute("data-size",t+","+n),e._videoRatio&&(e._videoRatio=n)},call_controller_resize:function(e,t){const n=this.context.resizing,i=this.context[t];n._resize_plugin=t;const l=n.resizeContainer,o=n.resizeDiv,s=this.util.getOffset(e,this.context.element.wysiwygFrame),a=n._rotateVertical=/^(90|270)$/.test(Math.abs(e.getAttribute("data-rotate")).toString()),r=a?e.offsetHeight:e.offsetWidth,c=a?e.offsetWidth:e.offsetHeight,d=s.top,u=s.left-this.context.element.wysiwygFrame.scrollLeft;l.style.top=d+"px",l.style.left=u+"px",l.style.width=r+"px",l.style.height=c+"px",o.style.top="0px",o.style.left="0px",o.style.width=r+"px",o.style.height=c+"px";let h=e.getAttribute("data-align")||"basic";h="none"===h?"basic":h;const p=this.util.getParentElement(e,this.util.isComponent),g=this.util.getParentElement(e,"FIGURE"),m=this.plugins.resizing._module_getSizeX.call(this,i,e,g,p)||"auto",f=i._onlyPercentage&&"image"===t?"":", "+(this.plugins.resizing._module_getSizeY.call(this,i,e,g,p)||"auto");this.util.changeTxt(n.resizeDisplay,this.lang.dialogBox[h]+" ("+m+f+")"),n.resizeButtonGroup.style.display=i._resizing?"":"none";const _=!i._resizing||i._resizeDotHide||i._onlyPercentage?"none":"flex",b=n.resizeHandles;for(let e=0,t=b.length;e<t;e++)b[e].style.display=_;if(i._resizing){const e=n.rotationButtons;e[0].style.display=e[1].style.display=i._rotation?"":"none"}const v=n.alignMenuList;this.util.changeElement(n.alignButton.firstElementChild,n.alignIcons[h]);for(let e=0,t=v.length;e<t;e++)v[e].getAttribute("data-value")===h?this.util.addClass(v[e],"on"):this.util.removeClass(v[e],"on");const y=n.percentageButtons,C=/%$/.test(e.style.width)&&/%$/.test(p.style.width)?this.util.getNumber(p.style.width,0)/100+"":"";for(let e=0,t=y.length;e<t;e++)y[e].getAttribute("data-value")===C?this.util.addClass(y[e],"active"):this.util.removeClass(y[e],"active");i._captionShow?(n.captionButton.style.display="",this.util.getChildElement(e.parentNode,"figcaption")?(this.util.addClass(n.captionButton,"active"),i._captionChecked=!0):(this.util.removeClass(n.captionButton,"active"),i._captionChecked=!1)):n.captionButton.style.display="none",l.style.display="block";const w={left:0,top:50};this.options.iframe&&(w.left-=this.context.element.wysiwygFrame.parentElement.offsetLeft,w.top-=this.context.element.wysiwygFrame.parentElement.offsetTop),this.setControllerPosition(n.resizeButton,l,"bottom",w),this.controllersOn(l,n.resizeButton,this.util.setDisabledButtons.bind(this,!1,this.resizingDisabledButtons),e,t),this.util.setDisabledButtons(!0,this.resizingDisabledButtons),n._resize_w=r,n._resize_h=c;const x=(e.getAttribute("origin-size")||"").split(",");return n._origin_w=x[0]||e.naturalWidth,n._origin_h=x[1]||e.naturalHeight,{w:r,h:c,t:d,l:u}},_closeAlignMenu:null,openAlignMenu:function(){const e=this.context.resizing.alignButton;this.util.addClass(e,"on"),this.context.resizing.alignMenu.style.top=e.offsetTop+e.offsetHeight+"px",this.context.resizing.alignMenu.style.left=e.offsetLeft-e.offsetWidth/2+"px",this.context.resizing.alignMenu.style.display="block",this.plugins.resizing._closeAlignMenu=function(){this.util.removeClass(this.context.resizing.alignButton,"on"),this.context.resizing.alignMenu.style.display="none",this.removeDocEvent("click",this.plugins.resizing._closeAlignMenu),this.plugins.resizing._closeAlignMenu=null}.bind(this),this.addDocEvent("click",this.plugins.resizing._closeAlignMenu)},onClick_resizeButton:function(e){e.stopPropagation();const t=e.target,n=t.getAttribute("data-command")||t.parentNode.getAttribute("data-command");if(!n)return;const i=t.getAttribute("data-value")||t.parentNode.getAttribute("data-value"),l=this.context.resizing._resize_plugin,o=this.context[l],s=o._element,a=this.plugins[l];if(e.preventDefault(),"function"!=typeof this.plugins.resizing._closeAlignMenu||(this.plugins.resizing._closeAlignMenu(),"onalign"!==n)){switch(n){case"auto":this.plugins.resizing.resetTransform.call(this,s),a.setAutoSize.call(this),this.selectComponent(s,l);break;case"percent":let e=this.plugins.resizing._module_getSizeY.call(this,o);if(this.context.resizing._rotateVertical){const t=s.getAttribute("data-percentage");t&&(e=t.split(",")[1])}this.plugins.resizing.resetTransform.call(this,s),a.setPercentSize.call(this,100*i,null!==this.util.getNumber(e,0)&&/%$/.test(e)?e:""),this.selectComponent(s,l);break;case"mirror":const t=s.getAttribute("data-rotate")||"0";let n=s.getAttribute("data-rotateX")||"",r=s.getAttribute("data-rotateY")||"";"h"===i&&!this.context.resizing._rotateVertical||"v"===i&&this.context.resizing._rotateVertical?r=r?"":"180":n=n?"":"180",s.setAttribute("data-rotateX",n),s.setAttribute("data-rotateY",r),this.plugins.resizing._setTransForm(s,t,n,r);break;case"rotate":const c=this.context.resizing,d=1*s.getAttribute("data-rotate")+1*i,u=this._w.Math.abs(d)>=360?0:d;s.setAttribute("data-rotate",u),c._rotateVertical=/^(90|270)$/.test(this._w.Math.abs(u).toString()),this.plugins.resizing.setTransformSize.call(this,s,null,null),this.selectComponent(s,l);break;case"onalign":return void this.plugins.resizing.openAlignMenu.call(this);case"align":const h="basic"===i?"none":i;a.setAlign.call(this,h,null,null,null),this.selectComponent(s,l);break;case"caption":const p=!o._captionChecked;if(a.openModify.call(this,!0),o._captionChecked=o.captionCheckEl.checked=p,a.update_image.call(this,!1,!1,!1),p){const e=this.util.getChildElement(o._caption,(function(e){return 3===e.nodeType}));e?this.setRange(e,0,e,e.textContent.length):o._caption.focus(),this.controllersOff()}else this.selectComponent(s,l),a.openModify.call(this,!0);break;case"revert":a.setOriginSize.call(this),this.selectComponent(s,l);break;case"update":a.openModify.call(this),this.controllersOff();break;case"delete":a.destroy.call(this)}this.history.push(!1)}},resetTransform:function(e){const t=(e.getAttribute("data-size")||e.getAttribute("data-origin")||"").split(",");this.context.resizing._rotateVertical=!1,e.style.maxWidth="",e.style.transform="",e.style.transformOrigin="",e.setAttribute("data-rotate",""),e.setAttribute("data-rotateX",""),e.setAttribute("data-rotateY",""),this.plugins[this.context.resizing._resize_plugin].setSize.call(this,t[0]?t[0]:"auto",t[1]?t[1]:"",!0)},setTransformSize:function(e,t,n){let i=e.getAttribute("data-percentage");const l=this.context.resizing._rotateVertical,o=1*e.getAttribute("data-rotate");let s="";if(i&&!l)i=i.split(","),"auto"===i[0]&&"auto"===i[1]?this.plugins[this.context.resizing._resize_plugin].setAutoSize.call(this):this.plugins[this.context.resizing._resize_plugin].setPercentSize.call(this,i[0],i[1]);else{const i=this.util.getParentElement(e,"FIGURE"),a=t||e.offsetWidth,r=n||e.offsetHeight,c=(l?r:a)+"px",d=(l?a:r)+"px";if(this.plugins[this.context.resizing._resize_plugin].cancelPercentAttr.call(this),this.plugins[this.context.resizing._resize_plugin].setSize.call(this,a+"px",r+"px",!0),i.style.width=c,i.style.height=this.context[this.context.resizing._resize_plugin]._caption?"":d,l){let e=a/2+"px "+a/2+"px 0",t=r/2+"px "+r/2+"px 0";s=90===o||-270===o?t:e}}e.style.transformOrigin=s,this.plugins.resizing._setTransForm(e,o.toString(),e.getAttribute("data-rotateX")||"",e.getAttribute("data-rotateY")||""),e.style.maxWidth=l?"none":"",this.plugins.resizing.setCaptionPosition.call(this,e)},_setTransForm:function(e,t,n,i){let l=(e.offsetWidth-e.offsetHeight)*(/-/.test(t)?1:-1),o="";if(/[1-9]/.test(t)&&(n||i))switch(o=n?"Y":"X",t){case"90":o=n&&i?"X":i?o:"";break;case"270":l*=-1,o=n&&i?"Y":n?o:"";break;case"-90":o=n&&i?"Y":n?o:"";break;case"-270":l*=-1,o=n&&i?"X":i?o:"";break;default:o=""}t%180==0&&(e.style.maxWidth=""),e.style.transform="rotate("+t+"deg)"+(n?" rotateX("+n+"deg)":"")+(i?" rotateY("+i+"deg)":"")+(o?" translate"+o+"("+l+"px)":"")},setCaptionPosition:function(e){const t=this.util.getChildElement(this.util.getParentElement(e,"FIGURE"),"FIGCAPTION");t&&(t.style.marginTop=(this.context.resizing._rotateVertical?e.offsetWidth-e.offsetHeight:0)+"px")},onMouseDown_resize_handle:function(e){e.stopPropagation(),e.preventDefault();const t=this.context.resizing,n=t._resize_direction=e.target.classList[0];t._resizeClientX=e.clientX,t._resizeClientY=e.clientY,this.context.element.resizeBackground.style.display="block",t.resizeButton.style.display="none",t.resizeDiv.style.float=/l/.test(n)?"right":/r/.test(n)?"left":"none";const i=function(e){if("keydown"===e.type&&27!==e.keyCode)return;const o=t._isChange;t._isChange=!1,this.removeDocEvent("mousemove",l),this.removeDocEvent("mouseup",i),this.removeDocEvent("keydown",i),"keydown"===e.type?(this.controllersOff(),this.context.element.resizeBackground.style.display="none",this.plugins[this.context.resizing._resize_plugin].init.call(this)):(this.plugins.resizing.cancel_controller_resize.call(this,n),o&&this.history.push(!1))}.bind(this),l=this.plugins.resizing.resizing_element.bind(this,t,n,this.context[t._resize_plugin]);this.addDocEvent("mousemove",l),this.addDocEvent("mouseup",i),this.addDocEvent("keydown",i)},resizing_element:function(e,t,n,i){const l=i.clientX,o=i.clientY;let s=n._element_w,a=n._element_h;const r=n._element_w+(/r/.test(t)?l-e._resizeClientX:e._resizeClientX-l),c=n._element_h+(/b/.test(t)?o-e._resizeClientY:e._resizeClientY-o),d=n._element_h/n._element_w*r;/t/.test(t)&&(e.resizeDiv.style.top=n._element_h-(/h/.test(t)?c:d)+"px"),/l/.test(t)&&(e.resizeDiv.style.left=n._element_w-r+"px"),/r|l/.test(t)&&(e.resizeDiv.style.width=r+"px",s=r),/^(t|b)[^h]$/.test(t)?(e.resizeDiv.style.height=d+"px",a=d):/^(t|b)h$/.test(t)&&(e.resizeDiv.style.height=c+"px",a=c),e._resize_w=s,e._resize_h=a,this.util.changeTxt(e.resizeDisplay,this._w.Math.round(s)+" x "+this._w.Math.round(a)),e._isChange=!0},cancel_controller_resize:function(e){const t=this.context.resizing._rotateVertical;this.controllersOff(),this.context.element.resizeBackground.style.display="none";let n=this._w.Math.round(t?this.context.resizing._resize_h:this.context.resizing._resize_w),i=this._w.Math.round(t?this.context.resizing._resize_w:this.context.resizing._resize_h);if(!t&&!/%$/.test(n)){const e=16,t=this.context.element.wysiwygFrame.clientWidth-2*e-2;this.util.getNumber(n,0)>t&&(i=this._w.Math.round(i/n*t),n=t)}const l=this.context.resizing._resize_plugin;this.plugins[l].setSize.call(this,n,i,!1,e),t&&this.plugins.resizing.setTransformSize.call(this,this.context[this.context.resizing._resize_plugin]._element,n,i),this.selectComponent(this.context[l]._element,l)}};return void 0===t&&(e.SUNEDITOR_MODULES||Object.defineProperty(e,"SUNEDITOR_MODULES",{enumerable:!0,writable:!1,configurable:!1,value:{}}),Object.defineProperty(e.SUNEDITOR_MODULES,"resizing",{enumerable:!0,writable:!1,configurable:!1,value:n})),n},"object"==typeof e.exports?e.exports=i.document?l(i,!0):function(e){if(!e.document)throw new Error("SUNEDITOR_MODULES a window with a document");return l(e)}:l(i)},"gjS+":function(e,t,n){"use strict";var i,l;i="undefined"!=typeof window?window:this,l=function(e,t){const n={name:"fileManager",_xmlHttp:null,_checkMediaComponent:function(e){return/IMG/i.test(e)?!/FIGURE/i.test(e.parentElement.nodeName)||!/FIGURE/i.test(e.parentElement.parentElement.nodeName):!/VIDEO/i.test(e)||!/FIGURE/i.test(e.parentElement.nodeName)},upload:function(e,t,n,i,l){this.showLoading();const o=this.plugins.fileManager,s=o._xmlHttp=this.util.getXMLHttpRequest();if(s.onreadystatechange=o._callBackUpload.bind(this,s,i,l),s.open("post",e,!0),null!==t&&"object"==typeof t&&this._w.Object.keys(t).length>0)for(let e in t)s.setRequestHeader(e,t[e]);s.send(n)},_callBackUpload:function(e,t,n){if(4===e.readyState)if(200===e.status)try{t(e)}catch(e){throw Error('[SUNEDITOR.fileManager.upload.callBack.fail] cause : "'+e.message+'"')}finally{this.closeLoading()}else{this.closeLoading();const t=e.responseText?JSON.parse(e.responseText):e;if("function"!=typeof n||n("",t,this)){const n="[SUNEDITOR.fileManager.upload.serverException] status: "+e.status+", response: "+(t.errorMessage||e.responseText);throw this.functions.noticeOpen(n),Error(n)}}},checkInfo:function(e,t,n,i,l){let o=[];for(let e=0,n=t.length;e<n;e++)o=o.concat([].slice.call(this.context.element.wysiwyg.getElementsByTagName(t[e])));const s=this.plugins.fileManager,a=this.context[e],r=a._infoList,c=s.setInfo.bind(this);if(o.length===r.length){if(this._componentsInfoReset){for(let t=0,i=o.length;t<i;t++)c(e,o[t],n,null,l);return}{let e=!1;for(let t,n=0,i=r.length;n<i;n++)if(t=r[n],0===o.filter((function(e){return t.src===e.src&&t.index.toString()===e.getAttribute("data-index")})).length){e=!0;break}if(!e)return}}const d=l?this.context.resizing._resize_plugin:"";l&&(this.context.resizing._resize_plugin=e);const u=[],h=[];for(let e=0,t=r.length;e<t;e++)h[e]=r[e].index;for(let t,r=0,d=o.length;r<d;r++)t=o[r],this.util.getParentElement(t,this.util.isMediaComponent)&&s._checkMediaComponent(t)?!t.getAttribute("data-index")||h.indexOf(1*t.getAttribute("data-index"))<0?(u.push(a._infoIndex),t.removeAttribute("data-index"),c(e,t,n,null,l)):u.push(1*t.getAttribute("data-index")):(u.push(a._infoIndex),i(t));for(let e,t=0;t<r.length;t++)e=r[t].index,u.indexOf(e)>-1||(r.splice(t,1),"function"==typeof n&&n(null,e,"delete",null,0,this),t--);l&&(this.context.resizing._resize_plugin=d)},setInfo:function(e,t,n,i,l){const o=l?this.context.resizing._resize_plugin:"";l&&(this.context.resizing._resize_plugin=e);const s=this.plugins[e],a=this.context[e],r=a._infoList;let c=t.getAttribute("data-index"),d=null,u="";if(i||(i={name:t.getAttribute("data-file-name")||("string"==typeof t.src?t.src.split("/").pop():""),size:t.getAttribute("data-file-size")||0}),!c||this._componentsInfoInit)u="create",c=a._infoIndex++,t.setAttribute("data-index",c),t.setAttribute("data-file-name",i.name),t.setAttribute("data-file-size",i.size),d={src:t.src,index:1*c,name:i.name,size:i.size},r.push(d);else{u="update",c*=1;for(let e=0,t=r.length;e<t;e++)if(c===r[e].index){d=r[e];break}d||(c=a._infoIndex++,d={index:c},r.push(d)),d.src=t.src,d.name=t.getAttribute("data-file-name"),d.size=1*t.getAttribute("data-file-size")}if(d.element=t,d.delete=s.destroy.bind(this,t),d.select=function(e){e.scrollIntoView(!0),this._w.setTimeout(s.select.bind(this,e))}.bind(this,t),l){if(!t.getAttribute("origin-size")&&t.naturalWidth&&t.setAttribute("origin-size",t.naturalWidth+","+t.naturalHeight),!t.getAttribute("data-origin")){const e=this.util.getParentElement(t,this.util.isMediaComponent),n=this.util.getParentElement(t,"FIGURE"),i=this.plugins.resizing._module_getSizeX.call(this,a,t,n,e),l=this.plugins.resizing._module_getSizeY.call(this,a,t,n,e);t.setAttribute("data-origin",i+","+l),t.setAttribute("data-size",i+","+l)}if(!t.style.width){const e=(t.getAttribute("data-size")||t.getAttribute("data-origin")||"").split(",");s.onModifyMode.call(this,t,null),s.applySize.call(this,e[0],e[1])}this.context.resizing._resize_plugin=o}"function"==typeof n&&n(t,c,u,d,--a._uploadFileLength<0?0:a._uploadFileLength,this)},deleteInfo:function(e,t,n){if(t>=0){const i=this.context[e]._infoList;for(let e=0,l=i.length;e<l;e++)if(t===i[e].index)return i.splice(e,1),void("function"==typeof n&&n(null,t,"delete",null,0,this))}},resetInfo:function(e,t){const n=this.context[e];if("function"==typeof t){const e=n._infoList;for(let n=0,i=e.length;n<i;n++)t(null,e[n].index,"delete",null,0,this)}n._infoList=[],n._infoIndex=0}};return void 0===t&&(e.SUNEDITOR_MODULES||Object.defineProperty(e,"SUNEDITOR_MODULES",{enumerable:!0,writable:!1,configurable:!1,value:{}}),Object.defineProperty(e.SUNEDITOR_MODULES,"fileManager",{enumerable:!0,writable:!1,configurable:!1,value:n})),n},"object"==typeof e.exports?e.exports=i.document?l(i,!0):function(e){if(!e.document)throw new Error("SUNEDITOR_MODULES a window with a document");return l(e)}:l(i)}});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vc3JjL3BsdWdpbnMvbW9kdWxlcy9kaWFsb2cuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3BsdWdpbnMvbW9kdWxlcy9maWxlQnJvd3Nlci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvbGFuZy9lbi5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvcGx1Z2lucy9tb2R1bGVzL19jb2xvclBpY2tlci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvcGx1Z2lucy9zdWJtZW51L2ZvbnRDb2xvci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvcGx1Z2lucy9zdWJtZW51L2hpbGl0ZUNvbG9yLmpzIiwid2VicGFjazovLy8uL3NyYy9wbHVnaW5zL3N1Ym1lbnUvdGVtcGxhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3BsdWdpbnMvbW9kdWxlcy9fc2VsZWN0TWVudS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvcGx1Z2lucy9tb2R1bGVzL19hbmNob3IuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3BsdWdpbnMvZGlhbG9nL2xpbmsuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3BsdWdpbnMvZGlhbG9nL2ltYWdlLmpzIiwid2VicGFjazovLy8uL3NyYy9wbHVnaW5zL2RpYWxvZy92aWRlby5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvcGx1Z2lucy9kaWFsb2cvYXVkaW8uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3BsdWdpbnMvZGlhbG9nL21hdGguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3BsdWdpbnMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3BsdWdpbnMvY29tbWFuZC9ibG9ja3F1b3RlLmpzIiwid2VicGFjazovLy8uL3NyYy9wbHVnaW5zL3N1Ym1lbnUvYWxpZ24uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3BsdWdpbnMvc3VibWVudS9mb250LmpzIiwid2VicGFjazovLy8uL3NyYy9wbHVnaW5zL3N1Ym1lbnUvZm9udFNpemUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3BsdWdpbnMvc3VibWVudS9ob3Jpem9udGFsUnVsZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvcGx1Z2lucy9zdWJtZW51L2xpc3QuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3BsdWdpbnMvc3VibWVudS90YWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvcGx1Z2lucy9zdWJtZW51L2Zvcm1hdEJsb2NrLmpzIiwid2VicGFjazovLy8uL3NyYy9wbHVnaW5zL3N1Ym1lbnUvbGluZUhlaWdodC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvcGx1Z2lucy9zdWJtZW51L3BhcmFncmFwaFN0eWxlLmpzIiwid2VicGFjazovLy8uL3NyYy9wbHVnaW5zL3N1Ym1lbnUvdGV4dFN0eWxlLmpzIiwid2VicGFjazovLy8uL3NyYy9wbHVnaW5zL2ZpbGVCcm93c2VyL2ltYWdlR2FsbGVyeS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXNzZXRzL2RlZmF1bHRJY29ucy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvbGliL3V0aWwuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2xpYi9jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvbGliL2NvbnRleHQuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3BsdWdpbnMvbW9kdWxlcy9fbm90aWNlLmpzIiwid2VicGFjazovLy8uL3NyYy9zdW5lZGl0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2xpYi9jb3JlLmpzIiwid2VicGFjazovLy8uL3NyYy9saWIvaGlzdG9yeS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvc3VuZWRpdG9yX2J1aWxkLmpzIiwid2VicGFjazovLy8uL3NyYy9wbHVnaW5zL21vZHVsZXMvY29tcG9uZW50LmpzIiwid2VicGFjazovLy8uL3NyYy9wbHVnaW5zL21vZHVsZXMvcmVzaXppbmcuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3BsdWdpbnMvbW9kdWxlcy9maWxlTWFuYWdlci5qcyJdLCJuYW1lcyI6WyJpbnN0YWxsZWRNb2R1bGVzIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiZXhwb3J0cyIsIm1vZHVsZSIsImkiLCJsIiwibW9kdWxlcyIsImNhbGwiLCJtIiwiYyIsImQiLCJuYW1lIiwiZ2V0dGVyIiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsInIiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsInZhbHVlIiwidCIsIm1vZGUiLCJfX2VzTW9kdWxlIiwibnMiLCJjcmVhdGUiLCJrZXkiLCJiaW5kIiwibiIsIm9iamVjdCIsInByb3BlcnR5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJwIiwicyIsImdsb2JhbCIsImZhY3RvcnkiLCJ3aW5kb3ciLCJ0aGlzIiwibm9HbG9iYWwiLCJkaWFsb2ciLCJhZGQiLCJjb3JlIiwiY29udGV4dCIsImtpbmQiLCJ1cGRhdGVNb2RhbCIsIl9jbG9zZVNpZ25hbCIsImRpYWxvZ19kaXYiLCJ1dGlsIiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTmFtZSIsImRpYWxvZ19iYWNrIiwic3R5bGUiLCJkaXNwbGF5IiwiZGlhbG9nX2FyZWEiLCJhcHBlbmRDaGlsZCIsIm1vZGFsQXJlYSIsImJhY2siLCJtb2RhbCIsImFkZEV2ZW50TGlzdGVuZXIiLCJfb25Nb3VzZURvd25fZGlhbG9nIiwiX29uQ2xpY2tfZGlhbG9nIiwiZWxlbWVudCIsInJlbGF0aXZlIiwiZSIsInRlc3QiLCJ0YXJnZXQiLCJnZXRBdHRyaWJ1dGUiLCJwbHVnaW5zIiwiY2xvc2UiLCJvcGVuIiwidXBkYXRlIiwibW9kYWxGb3JtIiwiX2JpbmRDbG9zZSIsIl9kIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImtleUNvZGUiLCJvcHRpb25zIiwicG9wdXBEaXNwbGF5IiwicG9zaXRpb24iLCJmb2N1c0VsZW1lbnQiLCJvbiIsImZvY3VzIiwiaW5pdCIsIlNVTkVESVRPUl9NT0RVTEVTIiwid3JpdGFibGUiLCJjb25maWd1cmFibGUiLCJkb2N1bWVudCIsInciLCJFcnJvciIsImZpbGVCcm93c2VyIiwiX3htbEh0dHAiLCJfbG9hZGluZyIsImFyZWEiLCJoZWFkZXIiLCJ0YWdBcmVhIiwiYm9keSIsImxpc3QiLCJ0YWdFbGVtZW50cyIsIml0ZW1zIiwic2VsZWN0ZWRUYWdzIiwic2VsZWN0b3JIYW5kbGVyIiwiY29udGV4dFBsdWdpbiIsImNvbHVtblNpemUiLCJicm93c2VyX2RpdiIsImNvbnRlbnQiLCJpbm5lckhUTUwiLCJzZXRfYnJvd3NlciIsInF1ZXJ5U2VsZWN0b3IiLCJ0aXRsZUFyZWEiLCJvbkNsaWNrVGFnIiwib25DbGlja0ZpbGUiLCJfb25Nb3VzZURvd25fYnJvd3NlciIsIl9vbkNsaWNrX2Jyb3dzZXIiLCJsYW5nIiwiZGlhbG9nQm94IiwiaWNvbnMiLCJjYW5jZWwiLCJzdG9wUHJvcGFnYXRpb24iLCJwbHVnaW5OYW1lIiwiZmlsZUJyb3dzZXJDb250ZXh0IiwicGx1Z2luQ29udGV4dCIsImxpc3RDbGFzc05hbWUiLCJsaXN0Q2xhc3MiLCJoYXNDbGFzcyIsInRleHRDb250ZW50IiwidGl0bGUiLCJfZHJhd0ZpbGVMaXN0IiwidXJsIiwiZmlsZUJyb3dzZXJQbHVnaW4iLCJhYm9ydCIsInNob3dCcm93c2VyTG9hZGluZyIsImNsb3NlQnJvd3NlckxvYWRpbmciLCJicm93c2VySGVhZGVyIiwieG1sSHR0cCIsImdldFhNTEh0dHBSZXF1ZXN0Iiwib25yZWFkeXN0YXRlY2hhbmdlIiwiX2NhbGxCYWNrR2V0IiwiX3ciLCJrZXlzIiwibGVuZ3RoIiwic2V0UmVxdWVzdEhlYWRlciIsInNlbmQiLCJyZWFkeVN0YXRlIiwic3RhdHVzIiwiX2RyYXdMaXN0SXRlbSIsIkpTT04iLCJwYXJzZSIsInJlc3BvbnNlVGV4dCIsInJlc3VsdCIsIm1lc3NhZ2UiLCJtYXhIZWlnaHQiLCJpbm5lckhlaWdodCIsIm9mZnNldEhlaWdodCIsInJlcyIsImVyciIsImVycm9yTWVzc2FnZSIsIl90YWdzIiwibGVuIiwic3BsaXRTaXplIiwiTWF0aCIsInJvdW5kIiwiZHJhd0l0ZW1IYW5kbGVyIiwiaXRlbVRlbXBsYXRlSGFuZGxlciIsInRhZ3NIVE1MIiwibGlzdEhUTUwiLCJjb2x1bW5zIiwiaXRlbSIsInRhZ3MiLCJ0YWciLCJzcGxpdCIsIm1hcCIsInYiLCJ0cmltIiwidExlbiIsImluZGV4T2YiLCJwdXNoIiwicXVlcnlTZWxlY3RvckFsbCIsImlzQW5jaG9yIiwidGFnTmFtZSIsInNlbGVjdFRhZyIsInNUYWdJbmRleCIsInNwbGljZSIsInJlbW92ZUNsYXNzIiwiYWRkQ2xhc3MiLCJmaWx0ZXIiLCJzb21lIiwicHJldmVudERlZmF1bHQiLCJsaXN0RWwiLCJjb21tYW5kIiwicGFyZW50Tm9kZSIsImhhbmRsZXIiLCJjb2RlIiwidG9vbGJhciIsImRlZmF1bHQiLCJzYXZlIiwiZm9udCIsImZvcm1hdHMiLCJmb250U2l6ZSIsImJvbGQiLCJ1bmRlcmxpbmUiLCJpdGFsaWMiLCJzdHJpa2UiLCJzdWJzY3JpcHQiLCJzdXBlcnNjcmlwdCIsInJlbW92ZUZvcm1hdCIsImZvbnRDb2xvciIsImhpbGl0ZUNvbG9yIiwiaW5kZW50Iiwib3V0ZGVudCIsImFsaWduIiwiYWxpZ25MZWZ0IiwiYWxpZ25SaWdodCIsImFsaWduQ2VudGVyIiwiYWxpZ25KdXN0aWZ5Iiwib3JkZXJMaXN0IiwidW5vcmRlckxpc3QiLCJob3Jpem9udGFsUnVsZSIsImhyX3NvbGlkIiwiaHJfZG90dGVkIiwiaHJfZGFzaGVkIiwidGFibGUiLCJsaW5rIiwibWF0aCIsImltYWdlIiwidmlkZW8iLCJhdWRpbyIsImZ1bGxTY3JlZW4iLCJzaG93QmxvY2tzIiwiY29kZVZpZXciLCJ1bmRvIiwicmVkbyIsInByZXZpZXciLCJwcmludCIsInRhZ19wIiwidGFnX2RpdiIsInRhZ19oIiwidGFnX2Jsb2NrcXVvdGUiLCJ0YWdfcHJlIiwidGVtcGxhdGUiLCJsaW5lSGVpZ2h0IiwicGFyYWdyYXBoU3R5bGUiLCJ0ZXh0U3R5bGUiLCJpbWFnZUdhbGxlcnkiLCJtZW50aW9uIiwibGlua0JveCIsInRleHQiLCJuZXdXaW5kb3dDaGVjayIsImRvd25sb2FkTGlua0NoZWNrIiwiYm9va21hcmsiLCJtYXRoQm94IiwiaW5wdXRMYWJlbCIsImZvbnRTaXplTGFiZWwiLCJwcmV2aWV3TGFiZWwiLCJpbWFnZUJveCIsImZpbGUiLCJhbHRUZXh0IiwidmlkZW9Cb3giLCJhdWRpb0JveCIsImJyb3dzZXIiLCJzZWFyY2giLCJjYXB0aW9uIiwic3VibWl0QnV0dG9uIiwicmV2ZXJ0QnV0dG9uIiwicHJvcG9ydGlvbiIsImJhc2ljIiwibGVmdCIsInJpZ2h0IiwiY2VudGVyIiwid2lkdGgiLCJoZWlnaHQiLCJzaXplIiwicmF0aW8iLCJjb250cm9sbGVyIiwiZWRpdCIsInVubGluayIsInJlbW92ZSIsImluc2VydFJvd0Fib3ZlIiwiaW5zZXJ0Um93QmVsb3ciLCJkZWxldGVSb3ciLCJpbnNlcnRDb2x1bW5CZWZvcmUiLCJpbnNlcnRDb2x1bW5BZnRlciIsImRlbGV0ZUNvbHVtbiIsImZpeGVkQ29sdW1uV2lkdGgiLCJyZXNpemUxMDAiLCJyZXNpemU3NSIsInJlc2l6ZTUwIiwicmVzaXplMjUiLCJhdXRvU2l6ZSIsIm1pcnJvckhvcml6b250YWwiLCJtaXJyb3JWZXJ0aWNhbCIsInJvdGF0ZUxlZnQiLCJyb3RhdGVSaWdodCIsIm1heFNpemUiLCJtaW5TaXplIiwidGFibGVIZWFkZXIiLCJtZXJnZUNlbGxzIiwic3BsaXRDZWxscyIsIkhvcml6b250YWxTcGxpdCIsIlZlcnRpY2FsU3BsaXQiLCJtZW51Iiwic3BhY2VkIiwiYm9yZGVyZWQiLCJuZW9uIiwidHJhbnNsdWNlbnQiLCJzaGFkb3ciLCJTVU5FRElUT1JfTEFORyIsImNvbG9yUGlja2VyIiwiY29sb3JMaXN0SFRNTCIsIl9jb2xvcklucHV0IiwiX2RlZmF1bHRDb2xvciIsIl9zdHlsZVByb3BlcnR5IiwiX2N1cnJlbnRDb2xvciIsIl9jb2xvckxpc3QiLCJjcmVhdGVDb2xvckxpc3QiLCJfbWFrZUNvbG9yTGlzdCIsIm1ha2VDb2xvciIsIm9wdGlvbiIsImNvbG9yTGlzdCIsImNvbG9yQXJyIiwiY29sb3IiLCJjaGVja2VkIiwiZXJhc2UiLCJub2RlIiwiZmlsbENvbG9yIiwiZ2V0Q29sb3JJbk5vZGUiLCJpc0hleENvbG9yIiwicmdiMmhleCIsInRvTG93ZXJDYXNlIiwic2V0SW5wdXRUZXh0IiwiY29sb3JOYW1lMmhleCIsInNldEN1cnJlbnRDb2xvciIsImhleENvbG9yU3RyIiwiYm9yZGVyQ29sb3IiLCJmaW5kQ29sb3IiLCJzdHlsZVByb3BlcnR5IiwiaXNXeXNpd3lnRGl2Iiwibm9kZVR5cGUiLCJzdHIiLCJyZ2IiLCJyZ2JNYXRjaCIsIm1hdGNoIiwicGFyc2VJbnQiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29sb3JOYW1lIiwidGVtcCIsImNvbG9ycyIsImdldENvbXB1dGVkU3R5bGUiLCJhIiwicmVtb3ZlSXRlbSIsInN1YnN0ciIsInRhcmdldEVsZW1lbnQiLCJhZGRNb2R1bGUiLCJwcmV2aWV3RWwiLCJjb2xvcklucHV0IiwibGlzdERpdiIsInNldFN1Ym1lbnUiLCJvbkNoYW5nZUlucHV0Iiwic3VibWl0IiwicGlja3VwIiwiaW5pdE1lbnVUYXJnZXQiLCJjb2xvckFyZWEiLCJjb250ZXh0UGlja2VyIiwiY29udGV4dEZvbnRDb2xvciIsInd3Q29tcHV0ZWRTdHlsZSIsImdldFNlbGVjdGlvbk5vZGUiLCJhcHBseUNvbG9yIiwibm9kZUNoYW5nZSIsInN1Ym1lbnVPZmYiLCJuZXdOb2RlIiwiY29udGV4dEhpbGl0ZUNvbG9yIiwiYmFja2dyb3VuZENvbG9yIiwidGVtcGxhdGVEaXYiLCJ0ZW1wbGF0ZUxpc3QiLCJ0ZW1wbGF0ZXMiLCJodG1sIiwic2V0Q29udGVudHMiLCJzZWxlY3RNZW51IiwiY2FsbGVyIiwiY2FsbGVyQ29udGV4dCIsInNldEZvcm0iLCJjcmVhdGVMaXN0IiwibGlzdENvbnRleHQiLCJmb3JtIiwibWVudXMiLCJpbml0RXZlbnQiLCJmb3JtcyIsImluZGV4IiwiY2xpY2tNZXRob2QiLCJjYWxsZXJOYW1lIiwib25Nb3VzZWRvd25fbGlzdCIsIm9uTW91c2VNb3ZlX2xpc3QiLCJvbkNsaWNrX2xpc3QiLCJtb3ZlSXRlbSIsIm51bSIsInNlbGVjdEluZGV4IiwiZ2V0SXRlbSIsInBvc2l0aW9uSGFuZGxlciIsInZpc2liaWxpdHkiLCJhbmNob3IiLCJzZXREaWFsb2dGb3JtIiwiaG9zdCIsImxvY2F0aW9uIiwib3JpZ2luIiwicGF0aG5hbWUiLCJyZXBsYWNlIiwicmVsTGlzdCIsImxpbmtSZWwiLCJkZWZhdWx0UmVsIiwibGlua1JlbERlZmF1bHQiLCJwcm90b2NvbCIsImRvd25sb2FkIiwicmVsIiwiYW5jaG9yUGx1Z2luIiwidXJsSW5wdXQiLCJsaW5rRGVmYXVsdFJlbCIsImN1cnJlbnRSZWwiLCJsaW5rQW5jaG9yIiwibGlua1ZhbHVlIiwiX2NoYW5nZSIsImNoZWNrX25ld193aW5kb3ciLCJjaGVja19ib29rbWFyayIsImFuY2hvclRleHQiLCJkb3dubG9hZENoZWNrIiwiYm9va21hcmtCdXR0b24iLCJyZWxCdXR0b24iLCJyZWxQcmV2aWV3Iiwib25DbGlja19yZWxCdXR0b24iLCJvbkNsaWNrX3JlbExpc3QiLCJvbkNoYW5nZV9uZXdXaW5kb3dDaGVjayIsIm9uQ2hhbmdlX2Rvd25sb2FkQ2hlY2siLCJvbkNoYW5nZUFuY2hvclRleHQiLCJvbkNoYW5nZVVybElucHV0Iiwib25LZXlEb3duVXJsSW5wdXQiLCJvbkZvY3VzVXJsSW5wdXQiLCJvbkJsdXJVcmxJbnB1dCIsIm9uQ2xpY2tfYm9va21hcmtCdXR0b24iLCJjb250ZXh0QW5jaG9yIiwiaHJlZiIsImxhc3RJbmRleE9mIiwiZ2V0U2VsZWN0aW9uIiwic2V0UmVsIiwic2V0TGlua1ByZXZpZXciLCJzZXRIZWFkZXJCb29rbWFyayIsIl9jbG9zZVJlbE1lbnUiLCJ0b2dnbGVSZWxMaXN0Iiwic2hvdyIsInJ0bCIsIm9mZnNldExlZnQiLCJvZmZzZXRXaWR0aCIsInRvcCIsIm9mZnNldFRvcCIsImNvbnRhaW5zIiwiY21kIiwiY3VycmVudCIsInRvZ2dsZUNsYXNzIiwiam9pbiIsInJlbEF0dHIiLCJyZWxMaXN0RWwiLCJyZWxzIiwiY2hlY2tlZFJlbCIsImNyZWF0ZUhlYWRlckxpc3QiLCJjb250ZXh0TGlzdCIsInVybFZhbHVlIiwiaGVhZGVycyIsImdldExpc3RDaGlsZHJlbiIsInd5c2l3eWciLCJub2RlTmFtZSIsInZhbHVlUmVnRXhwIiwiUmVnRXhwIiwiaCIsIl9zZXRNZW51TGlzdFBvc2l0aW9uIiwiaWQiLCJyYW5kb20iLCJjb250ZXh0TGluayIsImxpbmtQcm90b2NvbCIsInJlc2VydmVkUHJvdG9jb2wiLCJzYW1lUHJvdG9jb2wiLCJzZXRDdHgiLCJ1cGRhdGVBbmNob3IiLCJhbHQiLCJub3RUZXh0Iiwic2V0QXR0cmlidXRlIiwicmVtb3ZlQXR0cmlidXRlIiwiY2hpbGRyZW4iLCJjcmVhdGVBbmNob3IiLCJvQSIsIl9yZWxNZXJnZSIsIl9yZWxEZWxldGUiLCJfbGlua0FuY2hvciIsImFuY2hvckN0eCIsImxpbmtfZGlhbG9nIiwic2V0RGlhbG9nIiwibGlua19jb250cm9sbGVyIiwic2V0Q29udHJvbGxlcl9MaW5rQnV0dG9uIiwibGlua0NvbnRyb2xsZXIiLCJvbkNsaWNrX2xpbmtDb250cm9sbGVyIiwibGlua19idG4iLCJkZWxldGUiLCJjdXJyZW50Q29udHJvbGxlck5hbWUiLCJzaG93TG9hZGluZyIsInRleHROb2RlIiwiY2hpbGROb2RlcyIsInNldFJhbmdlIiwic2VsZWN0ZWRGb3JtYXRzIiwiZ2V0U2VsZWN0ZWRFbGVtZW50cyIsIm9Gb3JtYXQiLCJpbnNlcnROb2RlIiwiY2xvc2VMb2FkaW5nIiwiaGlzdG9yeSIsImFjdGl2ZSIsImNvbnRyb2xsZXJBcnJheSIsImNhbGxfY29udHJvbGxlciIsImNvbnRyb2xsZXJzT2ZmIiwic2VsZWN0aW9uQVRhZyIsImVkaXRMaW5rIiwibGlua0J0biIsInNldENvbnRyb2xsZXJQb3NpdGlvbiIsImNvbnRyb2xsZXJzT24iLCJzYyIsImdldENoaWxkRWxlbWVudCIsImVjIiwiY29tcG9uZW50IiwicmVzaXppbmciLCJmaWxlTWFuYWdlciIsImNvbnRleHRJbWFnZSIsIl9pbmZvTGlzdCIsIl9pbmZvSW5kZXgiLCJfdXBsb2FkRmlsZUxlbmd0aCIsInNpemVVbml0IiwiX2ltYWdlU2l6ZVVuaXQiLCJfbGlua0VsZW1lbnQiLCJfYWx0VGV4dCIsIl9hbGlnbiIsIl9mbG9hdENsYXNzUmVnRXhwIiwiX3Zfc3JjIiwiX2xpbmtWYWx1ZSIsInN2Z0RlZmF1bHRTaXplIiwiYmFzZTY0UmVuZGVySW5kZXgiLCJfZWxlbWVudCIsIl9jb3ZlciIsIl9jb250YWluZXIiLCJpbnB1dFgiLCJpbnB1dFkiLCJfZWxlbWVudF93IiwiX2VsZW1lbnRfaCIsIl9lbGVtZW50X2wiLCJfZWxlbWVudF90IiwiX2RlZmF1bHRTaXplWCIsIl9kZWZhdWx0U2l6ZVkiLCJfb3JpZ2luX3ciLCJpbWFnZVdpZHRoIiwiX29yaWdpbl9oIiwiaW1hZ2VIZWlnaHQiLCJfcHJvcG9ydGlvbkNoZWNrZWQiLCJfcmVzaXppbmciLCJpbWFnZVJlc2l6aW5nIiwiX3Jlc2l6ZURvdEhpZGUiLCJpbWFnZUhlaWdodFNob3ciLCJfcm90YXRpb24iLCJpbWFnZVJvdGF0aW9uIiwiX29ubHlQZXJjZW50YWdlIiwiaW1hZ2VTaXplT25seVBlcmNlbnRhZ2UiLCJfcmF0aW8iLCJfcmF0aW9YIiwiX3JhdGlvWSIsIl9jYXB0aW9uU2hvdyIsIl9jYXB0aW9uQ2hlY2tlZCIsIl9jYXB0aW9uIiwiY2FwdGlvbkNoZWNrRWwiLCJpbWFnZV9kaWFsb2ciLCJpbWdJbnB1dEZpbGUiLCJpbWdVcmxGaWxlIiwicHJldmlld1NyYyIsIm9wZW5UYWIiLCJfcmVtb3ZlU2VsZWN0ZWRGaWxlcyIsIl9vbkxpbmtQcmV2aWV3IiwiX2ZpbGVJbnB1dENoYW5nZSIsImltYWdlR2FsbGVyeUJ1dHRvbiIsIl9vcGVuR2FsbGVyeSIsInNldElucHV0U2l6ZSIsInNldFJhdGlvIiwic2l6ZVJldmVydCIsImltYWdlRmlsZUlucHV0IiwiaW1hZ2VBY2NlcHQiLCJpbWFnZU11bHRpcGxlRmlsZSIsImltYWdlVXJsSW5wdXQiLCJpbWFnZUdhbGxlcnlVcmwiLCJpbWFnZV9nYWxsZXJ5Iiwib25seVBlcmNlbnRhZ2UiLCJvbmx5UGVyY2VudERpc3BsYXkiLCJoZWlnaHREaXNwbGF5IiwicmV2ZXJ0IiwidGV4dERlY29yYXRpb24iLCJjYWxsUGx1Z2luIiwiX3NldFVybElucHV0Iiwic3JjIiwiZmlsZVRhZ3MiLCJzZWxlY3QiLCJvbk1vZGlmeU1vZGUiLCJjYWxsX2NvbnRyb2xsZXJfcmVzaXplIiwiZGVzdHJveSIsImltYWdlRWwiLCJpbWFnZUNvbnRhaW5lciIsImdldFBhcmVudEVsZW1lbnQiLCJpc01lZGlhQ29tcG9uZW50IiwiZGF0YUluZGV4IiwiZm9jdXNFbCIsInByZXZpb3VzRWxlbWVudFNpYmxpbmciLCJuZXh0RWxlbWVudFNpYmxpbmciLCJlbXB0eURpdiIsInJlbW92ZUl0ZW1BbGxQYXJlbnRzIiwiZm9jdXNFZGdlIiwiZGVsZXRlSW5mbyIsImZ1bmN0aW9ucyIsIm9uSW1hZ2VVcGxvYWQiLCJ0YWJOYW1lIiwidGFiQ29udGVudCIsInRhYkxpbmtzIiwiZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSIsImltYWdlUGx1Z2luIiwidXBkYXRlX2ltYWdlIiwiZmlsZXMiLCJzdWJtaXRBY3Rpb24iLCJvblJlbmRlcl9pbWdVcmwiLCJlcnJvciIsImZpbGVMaXN0IiwiZmlsZVNpemUiLCJ0eXBlIiwibGltaXRTaXplIiwiaW1hZ2VVcGxvYWRTaXplTGltaXQiLCJpbmZvU2l6ZSIsImltYWdlc0luZm8iLCJvbkltYWdlVXBsb2FkRXJyb3IiLCJub3RpY2VPcGVuIiwiaW5mbyIsImlucHV0V2lkdGgiLCJpbnB1dEhlaWdodCIsImlzVXBkYXRlIiwib25JbWFnZVVwbG9hZEJlZm9yZSIsImRhdGEiLCJBcnJheSIsImlzQXJyYXkiLCJyZWdpc3RlciIsInVwbG9hZCIsInJlc3BvbnNlIiwiaW1hZ2VVcGxvYWRVcmwiLCJmaWxlc0xlbiIsImZvcm1EYXRhIiwiRm9ybURhdGEiLCJhcHBlbmQiLCJpbWFnZVVwbG9hZEhlYWRlciIsImNhbGxCYWNrX2ltZ1VwbG9hZCIsInNldHVwX3JlYWRlciIsImltYWdlVXBsb2FkSGFuZGxlciIsInVwZGF0ZV9zcmMiLCJjcmVhdGVfaW1hZ2UiLCJ3RmlsZVJlYWRlciIsIkZpbGVSZWFkZXIiLCJmaWxlc1N0YWNrIiwicmVhZGVyIiwib25sb2FkIiwidXBkYXRlRWxlbWVudCIsIm9uUmVuZGVyX2ltZ0Jhc2U2NCIsInJlYWRBc0RhdGFVUkwiLCJ1cGRhdGVNZXRob2QiLCJjcmVhdGVNZXRob2QiLCJwb3AiLCJvblJlbmRlcl9saW5rIiwiaW1nVGFnIiwieHkiLCJfbW9kdWxlX3NldElucHV0U2l6ZSIsIl9tb2R1bGVfc2V0UmF0aW8iLCJjaGVja0ZpbGVJbmZvIiwibW9kaWZ5SGFuZGxlciIsIm9wZW5Nb2RpZnkiLCJmb3JtYXQiLCJnZXRGb3JtYXRFbGVtZW50IiwidGV4dEFsaWduIiwiZmxvYXQiLCJjaGVja0luZm8iLCJyZXNldEZpbGVJbmZvIiwicmVzZXRJbmZvIiwiX3Jlc2l6ZV9wbHVnaW4iLCJvSW1nIiwiY292ZXIiLCJzZXRfY292ZXIiLCJjb250YWluZXIiLCJzZXRfY29udGFpbmVyIiwiY3JlYXRlX2NhcHRpb24iLCJhcHBseVNpemUiLCJzZXRBbGlnbiIsIl9pbWFnZV9jcmVhdGVfb25sb2FkIiwiaW5zZXJ0Q29tcG9uZW50Iiwic2V0SW5mbyIsIm1lZGlhQXV0b1NlbGVjdCIsInNlbGVjdENvbXBvbmVudCIsImxpbmUiLCJhcHBlbmRGb3JtYXRUYWciLCJvcGVuQ29udHJvbGxlciIsIm5vdEhpc3RvcnlQdXNoIiwiY2hhbmdlU2l6ZSIsImlzTmV3Q29udGFpbmVyIiwiY2xvbmVOb2RlIiwieCIsImlzTnVtYmVyIiwieSIsIm1vZGlmaWVkQ2FwdGlvbiIsImluc2VydEJlZm9yZSIsImltYWdlRWxlbWVudCIsIm5ld0VsIiwicmVtb3ZlQ2hpbGQiLCJleGlzdEVsZW1lbnQiLCJpc1JhbmdlRm9ybWF0RWxlbWVudCIsImlzRm9ybWF0RWxlbWVudCIsInJlbW92ZUVtcHR5Tm9kZSIsImh0bWxSZW1vdmVXaGl0ZVNwYWNlIiwicHJldmlvdXNTaWJsaW5nIiwicmVwbGFjZUNoaWxkIiwiX3JvdGF0ZVZlcnRpY2FsIiwicmVzZXRUcmFuc2Zvcm0iLCJzZXRUcmFuc2Zvcm1TaXplIiwiZ2V0TnVtYmVyIiwic2V0VGltZW91dCIsInVzZXJTaXplIiwibm90T3BlbiIsIl9tb2R1bGVfc2V0TW9kaWZ5SW5wdXRTaXplIiwic2V0UGVyY2VudFNpemUiLCJzZXRTaXplIiwic2V0QXV0b1NpemUiLCJfbW9kdWxlX3NpemVSZXZlcnQiLCJub3RSZXNldFBlcmNlbnRhZ2UiLCJkaXJlY3Rpb24iLCJvbmx5VyIsImNhbmNlbFBlcmNlbnRBdHRyIiwiX21vZHVsZV9zYXZlQ3VycmVudFNpemUiLCJtYXhXaWR0aCIsInNldE9yaWdpblNpemUiLCJvcmlnaW5TaXplIiwiaGVpZ2h0UGVyY2VudGFnZSIsInNldENhcHRpb25Qb3NpdGlvbiIsIm1hcmdpbiIsIm1pbldpZHRoIiwiY29udGV4dFZpZGVvIiwiX3ZpZGVvU2l6ZVVuaXQiLCJfeW91dHViZVF1ZXJ5IiwieW91dHViZVF1ZXJ5IiwiX3ZpZGVvUmF0aW8iLCJ2aWRlb1JhdGlvIiwiX2RlZmF1bHRSYXRpbyIsInZpZGVvV2lkdGgiLCJ2aWRlb0hlaWdodCIsInZpZGVvUmVzaXppbmciLCJ2aWRlb0hlaWdodFNob3ciLCJ2aWRlb1JvdGF0aW9uIiwidmlkZW9TaXplT25seVBlcmNlbnRhZ2UiLCJ2aWRlb19kaWFsb2ciLCJ2aWRlb0lucHV0RmlsZSIsInZpZGVvVXJsRmlsZSIsInZpZGVvUmF0aW9PcHRpb24iLCJzZXRWaWRlb1JhdGlvIiwidmlkZW9GaWxlSW5wdXQiLCJ2aWRlb0FjY2VwdCIsInZpZGVvTXVsdGlwbGVGaWxlIiwidmlkZW9VcmxJbnB1dCIsInJhdGlvTGlzdCIsInZpZGVvUmF0aW9MaXN0IiwicmF0aW9EaXNwbGF5IiwidmlkZW9SYXRpb1Nob3ciLCJvbmx5V2lkdGhEaXNwbGF5IiwiX3NldFRhZ0F0dHJzIiwiYXR0cnMiLCJ2aWRlb1RhZ0F0dHJzIiwiaGFzT3duIiwiY3JlYXRlVmlkZW9UYWciLCJ2aWRlb1RhZyIsIl9zZXRJZnJhbWVBdHRycyIsImZyYW1lQm9yZGVyIiwiYWxsb3dGdWxsc2NyZWVuIiwidmlkZW9JZnJhbWVBdHRycyIsImNyZWF0ZUlmcmFtZVRhZyIsImlmcmFtZVRhZyIsImZyYW1lIiwib25WaWRlb1VwbG9hZCIsImRpc2FibGVkIiwic2V0VmlkZW9SYXRpb1NlbGVjdCIsInNlbGVjdGVkSW5kZXgiLCJwbGFjZWhvbGRlciIsInZpZGVvUGx1Z2luIiwic2V0dXBfdXJsIiwidmlkZW9VcGxvYWRTaXplTGltaXQiLCJ2aWRlb3NJbmZvIiwib25WaWRlb1VwbG9hZEVycm9yIiwib25WaWRlb1VwbG9hZEJlZm9yZSIsInZpZGVvVXBsb2FkVXJsIiwidmlkZW9VcGxvYWRIZWFkZXIiLCJjYWxsQmFja192aWRlb1VwbG9hZCIsInZpZGVvVXBsb2FkSGFuZGxlciIsImNyZWF0ZV92aWRlbyIsIkRPTVBhcnNlciIsInBhcnNlRnJvbVN0cmluZyIsInNwbGl0VXJsIiwiZW5kc1dpdGgiLCJvRnJhbWUiLCJpc1lvdXR1YmUiLCJpc1ZpbWVvIiwibmV3VGFnIiwiaW5wdXRVcGRhdGUiLCJfbW9kdWxlX2dldFNpemVYIiwiX21vZHVsZV9nZXRTaXplWSIsImlzUGVyY2VudCIsImNoYW5nZWQiLCJfdXBkYXRlX3ZpZGVvQ292ZXIiLCJwcmV2RnJhbWUiLCJmaWdjYXB0aW9uIiwiY29uc29sZSIsIndhcm4iLCJyYXRpb1NlbGVjdGVkIiwicmF0aW9PcHRpb25zIiwic2VsZWN0ZWQiLCJvbmx5SCIsInBhZGRpbmdCb3R0b20iLCJkYXRhU2l6ZSIsImNvbnRleHRBdWRpbyIsInRhcmdldFNlbGVjdCIsImF1ZGlvV2lkdGgiLCJhdWRpb0hlaWdodCIsImF1ZGlvX2RpYWxvZyIsImF1ZGlvSW5wdXRGaWxlIiwiYXVkaW9VcmxGaWxlIiwiYXVkaW9fY29udHJvbGxlciIsInNldENvbnRyb2xsZXIiLCJvbkNsaWNrX2NvbnRyb2xsZXIiLCJhdWRpb0ZpbGVJbnB1dCIsImF1ZGlvQWNjZXB0IiwiYXVkaW9NdWx0aXBsZUZpbGUiLCJhdWRpb1VybElucHV0IiwiX2NyZWF0ZUF1ZGlvVGFnIiwib0F1ZGlvIiwiY3NzVGV4dCIsImF1ZGlvVGFnQXR0cnMiLCJpc0NvbXBvbmVudCIsIm9uQXVkaW9VcGxvYWQiLCJ1cGRhdGVDb3ZlciIsInNldHVwVXJsIiwiYXVkaW9VcGxvYWRTaXplTGltaXQiLCJhdWRpb3NJbmZvIiwib25BdWRpb1VwbG9hZEVycm9yIiwib25BdWRpb1VwbG9hZEJlZm9yZSIsImF1ZGlvVXBsb2FkVXJsIiwiYXVkaW9VcGxvYWRIZWFkZXIiLCJjYWxsQmFja191cGxvYWQiLCJhdWRpb1VwbG9hZEhhbmRsZXIiLCJjcmVhdGVfYXVkaW8iLCJwcmV2RWxlbWVudCIsInNlbGVjdGlvblRhZyIsIm9uQ29udHJvbGxlck9mZiIsInByZXZpZXdFbGVtZW50IiwiZm9udFNpemVFbGVtZW50IiwiZGVmYXVsdEZvbnRTaXplIiwiX21hdGhFeHAiLCJtYXRoX2RpYWxvZyIsIl9yZW5kZXJNYXRoRXhwIiwibWF0aF9jb250cm9sbGVyIiwic2V0Q29udHJvbGxlcl9NYXRoQnV0dG9uIiwibWF0aENvbnRyb2xsZXIiLCJvbkNsaWNrX21hdGhDb250cm9sbGVyIiwibWF0aEZvbnRTaXplIiwiZiIsIm1hdGhfYnRuIiwibWFuYWdlZFRhZ3MiLCJtZXRob2QiLCJrYXRleCIsImRvbSIsImNyZWF0ZVJhbmdlIiwiY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50IiwiX3JlbmRlcmVyIiwiSFRNTERlY29kZXIiLCJleHAiLCJyZW5kZXJUb1N0cmluZyIsImNvbnRleHRNYXRoIiwibWF0aEV4cCIsImthdGV4RWwiLCJIVE1MRW5jb2RlciIsImNvbnRhaW5lckVsIiwiZW1wdHkiLCJjcmVhdGVUZXh0Tm9kZSIsInplcm9XaWR0aFNwYWNlIiwibmV4dFNpYmxpbmciLCJtYXRoVGFnIiwibWF0aEJ0biIsImJsb2NrcXVvdGUiLCJ0YXJnZXRCdXR0b24iLCJhY3Rpb24iLCJjdXJyZW50QmxvY2txdW90ZSIsImRldGFjaFJhbmdlRm9ybWF0RWxlbWVudCIsImFwcGx5UmFuZ2VGb3JtYXRFbGVtZW50IiwiX2FsaWduTGlzdCIsImN1cnJlbnRBbGlnbiIsImRlZmF1bHREaXIiLCJqdXN0aWZ5IiwiYWxpZ25fanVzdGlmeSIsImFsaWduX2xlZnQiLCJhbGlnbl9yaWdodCIsImFsaWduX2NlbnRlciIsImxpc3RVbCIsImxlZnREaXIiLCJsZWZ0TWVudSIsInJpZ2h0TWVudSIsImFsaWduQ29udGV4dCIsImZpcnN0RWxlbWVudENoaWxkIiwiY2hhbmdlRWxlbWVudCIsImFsaWduTGlzdCIsInNlbGVjdGVkRm9ybXN0cyIsInNldFN0eWxlIiwiZWZmZWN0Tm9kZSIsInRhcmdldFRleHQiLCJ0YXJnZXRUb29sdGlwIiwiX2ZvbnRMaXN0IiwiY3VycmVudEZvbnQiLCJmb250TGlzdCIsInRvb2x0aXAiLCJmb250RmFtaWx5Iiwic2VsZWN0Rm9udCIsImNoYW5nZVR4dCIsImhhc0ZvY3VzIiwiZm9udENvbnRleHQiLCJfc2l6ZUxpc3QiLCJjdXJyZW50U2l6ZSIsInNpemVMaXN0IiwidW5pdCIsImZvbnRTaXplVW5pdCIsImZvbnRTaXplQ29udGV4dCIsImN1cnJlbnRIUiIsImhvcml6b250YWxSdWxlUGljayIsImFwcGVuZEhyIiwib0hyIiwib05vZGUiLCJfbGlzdCIsImN1cnJlbnRMaXN0IiwiYnVsbGV0cyIsImxpc3RfYnVsbGV0cyIsIm51bWJlciIsImxpc3RfbnVtYmVyIiwiYnV0dG9uIiwiaWNvbiIsImlzTGlzdCIsImVkaXRMaXN0Iiwic2VsZWN0ZWRDZWxscyIsImRldGFjaCIsInJhbmdlIiwiZ2V0UmFuZ2UiLCJnZXRTZWxlY3RlZEVsZW1lbnRzQW5kQ29tcG9uZW50cyIsImdldFJhbmdlX2FkZExpbmUiLCJzb3J0QnlEZXB0aCIsImZpcnN0U2VsIiwibGFzdFNlbCIsInRvcEVsIiwiaXNMaXN0Q2VsbCIsImJvdHRvbUVsIiwib3JpZ2luUmFuZ2UiLCJzdGFydENvbnRhaW5lciIsInNvIiwiZW5kQ29udGFpbmVyIiwib25seVplcm9XaWR0aFNwYWNlIiwic3RhcnRPZmZzZXQiLCJlbmRPZmZzZXQiLCJlbyIsImlzUmVtb3ZlIiwiZ2V0UmFuZ2VGb3JtYXRFbGVtZW50IiwidG9VcHBlckNhc2UiLCJ0b3BFbFBhcmVudCIsImJvdHRvbUVsUGFyZW50IiwibWVyZ2VUb3AiLCJtZXJnZUJvdHRvbSIsImZpcnN0TGlzdCIsImxhc3RMaXN0IiwidG9wTnVtYmVyIiwiYm90dG9tTnVtYmVyIiwicGFzc0NvbXBvbmVudCIsIm5ld0NlbGwiLCJmVGFnIiwiaXNDZWxsIiwibmV4dCIsIm9yaWdpblBhcmVudCIsIm5leHRQYXJlbnQiLCJwYXJlbnRUYWciLCJzaWJsaW5nVGFnIiwicmFuZ2VUYWciLCJfaXNJZ25vcmVOb2RlQ2hhbmdlIiwiY29weUZvcm1hdEF0dHJpYnV0ZXMiLCJpc0hSIiwib3V0ZXJIVE1MIiwiZkNoaWxkcmVuIiwiZ2V0RWxlbWVudERlcHRoIiwiaiIsImN1cnJlbnRGb3JtYXQiLCJyYW5nZUFyciIsInRlbXBMaXN0IiwiX2RldGFjaE5lc3RlZCIsImNlbGxzIiwiZmlyc3QiLCJsYXN0Iiwib3JpZ2luTGlzdCIsInNpYmxpbmciLCJjTGVuIiwibmV3TGlzdCIsImdldFBvc2l0aW9uSW5kZXgiLCJtZXJnZVNhbWVUYWdzIiwiZWRnZSIsImdldEVkZ2VDaGlsZE5vZGVzIiwiY2MiLCJlZGl0SW5zaWRlTGlzdCIsImNlbGxzTGVuIiwiZWwiLCJsYXN0Q2VsbCIsImlubmVyTGlzdCIsInByZXYiLCJub2RlUGF0aCIsInNsIiwiX2luc2llZExpc3QiLCJnZXROb2RlRnJvbVBhdGgiLCJpbnNlcnRQcmV2IiwiZ2V0Tm9kZVBhdGgiLCJmaXJzdENoaWxkIiwic2xQYXRoIiwibGFzdEVsZW1lbnRDaGlsZCIsIm1lcmdlTmVzdGVkVGFncyIsImNvbnRleHRUYWJsZSIsIl90ZEVsZW1lbnQiLCJfdHJFbGVtZW50IiwiX3RyRWxlbWVudHMiLCJfdGFibGVYWSIsIl9tYXhXaWR0aCIsIl9maXhlZENvbHVtbiIsIl9ydGwiLCJjZWxsQ29udHJvbGxlclRvcCIsInRhYmxlQ2VsbENvbnRyb2xsZXJQb3NpdGlvbiIsInJlc2l6ZVRleHQiLCJoZWFkZXJCdXR0b24iLCJtZXJnZUJ1dHRvbiIsInNwbGl0QnV0dG9uIiwic3BsaXRNZW51IiwibWF4VGV4dCIsIm1pblRleHQiLCJfcGh5c2ljYWxfY2VsbENudCIsIl9sb2dpY2FsX2NlbGxDbnQiLCJfcm93Q250IiwiX3Jvd0luZGV4IiwiX3BoeXNpY2FsX2NlbGxJbmRleCIsIl9sb2dpY2FsX2NlbGxJbmRleCIsIl9jdXJyZW50X2NvbFNwYW4iLCJfY3VycmVudF9yb3dTcGFuIiwiZXhwYW5zaW9uIiwicmVkdWN0aW9uIiwidGFibGVQaWNrZXIiLCJ0YWJsZUhpZ2hsaWdodCIsInRhYmxlVW5IaWdobGlnaHQiLCJ0YWJsZURpc3BsYXkiLCJ0YWJsZUNvbnRyb2xsZXIiLCJzZXRDb250cm9sbGVyX3RhYmxlIiwicmVzaXplQnV0dG9uIiwiY29sdW1uRml4ZWRCdXR0b24iLCJyZXNpemVEaXYiLCJzZXRDb250cm9sbGVyX3RhYmxlRWRpdG9yIiwiaW5zZXJ0Um93QWJvdmVCdXR0b24iLCJpbnNlcnRSb3dCZWxvd0J1dHRvbiIsIm9uTW91c2VNb3ZlX3RhYmxlUGlja2VyIiwiYXBwZW5kVGFibGUiLCJvbkNsaWNrX3RhYmxlQ29udHJvbGxlciIsInRhYmxlUmVzaXplIiwiZml4ZWRfY29sdW1uX3dpZHRoIiwidGFibGVfaGVhZGVyIiwiaW5zZXJ0X3Jvd19hYm92ZSIsImluc2VydF9yb3dfYmVsb3ciLCJkZWxldGVfcm93IiwibWVyZ2VfY2VsbCIsImluc2VydF9jb2x1bW5fbGVmdCIsImluc2VydF9jb2x1bW5fcmlnaHQiLCJkZWxldGVfY29sdW1uIiwic3BsaXRfY2VsbCIsIm9UYWJsZSIsImNyZWF0ZUNlbGxzIiwidGFibGVIVE1MIiwiZmlyc3RUZCIsInJlc2V0X3RhYmxlX3BpY2tlciIsImNudCIsInJldHVybkVsZW1lbnQiLCJjZWxsIiwiY2VsbHNIVE1MIiwiY2VpbCIsIm9mZnNldFgiLCJvZmZzZXRZIiwiaGlnaGxpZ2h0IiwidW5IaWdobGlnaHQiLCJ0YWJsZVBsdWdpbiIsIl9yZW1vdmVFdmVudHMiLCJfc2VsZWN0ZWRUYWJsZSIsIl90b2dnbGVFZGl0b3IiLCJfc2hpZnQiLCJfc2VsZWN0ZWRDZWxscyIsIl9yZWYiLCJfZml4ZWRDZWxsIiwiX3NlbGVjdGVkQ2VsbCIsIl9maXhlZENlbGxOYW1lIiwiY2FsbF9jb250cm9sbGVyX3RhYmxlRWRpdCIsInRkRWxlbWVudCIsImlzQ29sbGFwc2VkIiwidGFibGVFbGVtZW50IiwidGFibGVMYXlvdXQiLCJzZXRUYWJsZVN0eWxlIiwic2V0UG9zaXRpb25Db250cm9sbGVyVG9wIiwic2V0UG9zaXRpb25Db250cm9sbGVyRGl2IiwicmVzZXQiLCJzZXRDZWxsSW5mbyIsInJvd3MiLCJjZWxsSW5kZXgiLCJjZWxsQ250IiwiY29sU3BhbiIsInJvd0luZGV4Iiwicm93U3BhbiIsInJvd1NwYW5BcnIiLCJzcGFuSW5kZXgiLCJjcyIsInJzIiwibG9nY2FsSW5kZXgiLCJhcnIiLCJyb3ciLCJjb25jYXQiLCJzb3J0IiwiYiIsImVkaXRUYWJsZSIsImlzUm93IiwidGFibGVBdHRyIiwicG9zaXRpb25DZWxsIiwiZWRpdFJvdyIsInJlbW92ZUNlbGxzIiwiZmlyc3RSb3ciLCJyaWdodENlbGwiLCJlZGl0Q2VsbCIsInBvc2l0aW9uUmVzZXRFbGVtZW50IiwidXAiLCJvcmlnaW5Sb3dJbmRleCIsInNpZ24iLCJzcGFuQ2VsbHMiLCJzcGFuQ2VsbCIsInNoaWZ0IiwiaW5zZXJ0Um93IiwicGFzc0NlbGwiLCJyZW1vdmVDZWxsIiwicmVtb3ZlU3BhbkFyciIsImluc2VydEluZGV4IiwiYXBwbHlTcGFuIiwiY2VsbENvbFNwYW4iLCJyZW1vdmVJbmRleCIsImdldE92ZXJsYXBSYW5nZUF0SW5kZXgiLCJyZW1vdmVGaXJzdCIsInJlbW92ZUVuZCIsInJMZW4iLCJnZXRBcnJheUluZGV4Iiwicm93U3BhbkNlbGwiLCJfY2xvc2VTcGxpdE1lbnUiLCJvcGVuU3BsaXRNZW51IiwicmVtb3ZlRG9jRXZlbnQiLCJhZGREb2NFdmVudCIsInZlcnRpY2FsIiwiY3VycmVudENlbGwiLCJjdXJyZW50Um93IiwiY3VycmVudENvbFNwYW4iLCJmbG9vciIsImN1cnJlbnRSb3dTcGFuIiwibmV3Um93U3BhbiIsIm5leHRSb3dJbmRleCIsIm5leHRSb3ciLCJuZXh0Q2VsbHMiLCJuZXdSb3ciLCJwaHlzaWNhbEluZGV4IiwicmVmIiwibWVyZ2VDZWxsIiwiZW1wdHlSb3dGaXJzdCIsImVtcHR5Um93TGFzdCIsImNlIiwicmUiLCJtZXJnZUhUTUwiLCJjaCIsInJvd0luZGV4Rmlyc3QiLCJyb3dJbmRleExhc3QiLCJyZW1vdmVSb3dzIiwic2V0QWN0aXZlQnV0dG9uIiwidG9nZ2xlSGVhZGVyIiwic3R5bGVzIiwic3BhbiIsInNpemVJY29uIiwiZml4ZWRDZWxsIiwic2VsZWN0ZWRDZWxsIiwiX2JpbmRPblNlbGVjdCIsIl9iaW5kT2ZmU2VsZWN0IiwiX2JpbmRPZmZTaGlmdCIsImVuYWJsZWQiLCJfb2ZmQ2VsbE11bHRpU2VsZWN0IiwiX2luaXRCaW5kIiwiX3dkIiwiX29uQ2VsbE11bHRpU2VsZWN0IiwiX2FudGlCbHVyIiwiX3NldE11bHRpQ2VsbHMiLCJzdGFydENlbGwiLCJlbmRDZWxsIiwiZmluZFNlbGVjdGVkQ2VsbCIsIl9pIiwibmV3Q3MiLCJuZXdDZSIsIm5ld1JzIiwibmV3UmUiLCJvblRhYmxlQ2VsbE11bHRpU2VsZWN0IiwiZm9ybWF0QmxvY2siLCJfZm9ybWF0TGlzdCIsInBpY2tVcCIsImxhbmdfdG9vbGJhciIsImRlZmF1bHRGb3JtYXRzIiwiZm9ybWF0TGlzdCIsImNsYXNzIiwiZm9ybWF0VGl0bGUiLCJmb3JtYXRDb250ZXh0IiwicmFuZ2VFbGVtZW50IiwiZmlyc3RQYXRoIiwibGFzdFBhdGgiLCJybGlzdCIsImRldGFjaExpc3QiLCJtb2RpZmllZEZvcm1zdHMiLCJmcmVlRWxlbWVudCIsImJlZm9yZSIsImlubmVyIiwiaXNDb21wIiwiaXNTYW1lQXR0cmlidXRlcyIsIm5ld0Zvcm1hdCIsImxpbmVIZWlnaHRzIiwibGluZUhlaWdodENvbnRleHQiLCJfY2xhc3NMaXN0IiwibWVudUxhbmciLCJkZWZhdWx0TGlzdCIsIl9jbGFzcyIsInBhcmFncmFwaFN0eWxlcyIsImRlZmF1bHRTdHlsZSIsInBhcmFncmFwaExpc3QiLCJfc3R5bGVMaXN0Iiwic3R5bGVMaXN0IiwidGV4dFN0eWxlcyIsInN0eWxlQnV0dG9uTGlzdCIsInNlbGVjdGlvbk5vZGUiLCJidG4iLCJjaGVja1N0eWxlcyIsImNsYXNzZXMiLCJjbGFzc0xpc3QiLCJyZW1vdmVOb2RlcyIsImltYWdlR2FsbGVyeUhlYWRlciIsImRyYXdJdGVtcyIsInNldEltYWdlIiwic3JjTmFtZSIsImNvZGVfdmlldyIsImxpbmVfaGVpZ2h0IiwicGFyYWdyYXBoX3N0eWxlIiwidGV4dF9zdHlsZSIsImFycm93X2Rvd24iLCJmb250X2NvbG9yIiwiaGlnaGxpZ2h0X2NvbG9yIiwiaG9yaXpvbnRhbF9ydWxlIiwic2hvd19ibG9ja3MiLCJtb2RpZnkiLCJhdXRvX3NpemUiLCJyb3RhdGVfbGVmdCIsInJvdGF0ZV9yaWdodCIsIm1pcnJvcl9ob3Jpem9udGFsIiwibWlycm9yX3ZlcnRpY2FsIiwibGluZV9icmVhayIsIm1vcmVfdGV4dCIsIm1vcmVfcGFyYWdyYXBoIiwibW9yZV9wbHVzIiwibW9yZV9ob3Jpem9udGFsIiwibW9yZV92ZXJ0aWNhbCIsImF0dGFjaG1lbnQiLCJtYWdpY19zdGljayIsImVtcHR5X2ZpbGUiLCJpc0lFIiwiaXNJRV9FZGdlIiwiaXNPU1hfSU9TIiwiX3Byb3BlcnRpZXNJbml0IiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwiYXBwVmVyc2lvbiIsInBsYXRmb3JtIiwiX2FsbG93ZWRFbXB0eU5vZGVMaXN0IiwiX0hUTUxDb252ZXJ0b3IiLCJjb250ZW50cyIsIiciLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJ6ZXJvV2lkdGhSZWdFeHAiLCJvbmx5WmVyb1dpZHRoUmVnRXhwIiwiQWN0aXZlWE9iamVjdCIsIlhNTEh0dHBSZXF1ZXN0IiwiZTEiLCJlbGVtZW50TmFtZSIsIm9iaiIsIl9oYXNPd24iLCJnZXRJbmNsdWRlUGF0aCIsIm5hbWVBcnJheSIsImV4dGVuc2lvbiIsInBhdGgiLCJwYXRoTGlzdCIsImZpbGVOYW1lIiwicmVnRXhwIiwiZXh0UmVnRXhwIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJlZGl0b3JUYWciLCJnZXRQYWdlU3R5bGUiLCJkb2MiLCJzaGVldHMiLCJzdHlsZVNoZWV0cyIsInJ1bGVzIiwiY3NzUnVsZXMiLCJnZXRJZnJhbWVEb2N1bWVudCIsImlmcmFtZSIsIndEb2N1bWVudCIsImNvbnRlbnRXaW5kb3ciLCJjb250ZW50RG9jdW1lbnQiLCJnZXRBdHRyaWJ1dGVzVG9TdHJpbmciLCJleGNlcHRBdHRycyIsImF0dHJpYnV0ZXMiLCJhdHRyU3RyaW5nIiwiZ2V0Qnl0ZUxlbmd0aCIsImVuY29kZXIiLCJlbmNvZGVVUklDb21wb25lbnQiLCJjciIsImNsIiwidW5lc2NhcGUiLCJUZXh0RW5jb2RlciIsImVuY29kZSIsImlzTm9uRWRpdGFibGUiLCJpc1RleHRTdHlsZUVsZW1lbnQiLCJpc0Nsb3N1cmVSYW5nZUZvcm1hdEVsZW1lbnQiLCJpc0ZyZWVGb3JtYXRFbGVtZW50IiwiaXNDbG9zdXJlRnJlZUZvcm1hdEVsZW1lbnQiLCJpc1VuZWRpdGFibGVDb21wb25lbnQiLCJpc05vdENoZWNraW5nTm9kZSIsInZhbGlkYXRpb24iLCJnZXRGcmVlRm9ybWF0RWxlbWVudCIsImdldENsb3N1cmVGcmVlRm9ybWF0RWxlbWVudCIsImNvcHlUYWdBdHRyaWJ1dGVzIiwib3JpZ2luRWwiLCJjb3B5RWwiLCJnZXRBcnJheUl0ZW0iLCJhcnJheSIsIm11bHRpIiwiaWR4IiwibmV4dElkeCIsInByZXZJZHgiLCJfbmV3T2Zmc2V0cyIsImZpbmRzIiwidGVtcFRleHQiLCJwcmV2aW91cyIsInJldmVyc2UiLCJvZmZzZXRzIiwibm9kZXMiLCJzdHlsZV9hIiwic3R5bGVfYiIsImNvbXBTdHlsZSIsImNsYXNzX2EiLCJjbGFzc19iIiwicmVnIiwiY29tcENsYXNzIiwiaXNFbXB0eUxpbmUiLCJpc1RhYmxlIiwiaXNCcmVhayIsImlzTWVkaWEiLCJtYXhEZWMiLCJ0b0ZpeGVkIiwicmVjdXJzaW9uRnVuYyIsImdldExpc3RDaGlsZE5vZGVzIiwiZGVwdGgiLCJjb21wYXJlRWxlbWVudHMiLCJhTm9kZSIsImJOb2RlIiwiYW5jZXN0b3IiLCJhSW5kZXgiLCJiSW5kZXgiLCJxdWVyeSIsImNoZWNrIiwiYXR0ciIsImNoaWxkTGlzdCIsImxhc3RDaGlsZCIsImdldE9mZnNldCIsInd5c2l3eWdGcmFtZSIsIm9mZnNldEVsZW1lbnQiLCJwYXJlbnRFbGVtZW50Iiwib2Zmc2V0UGFyZW50Iiwic2Nyb2xsVG9wIiwiYVN0YXJ0IiwiYUVuZCIsImJTdGFydCIsImJFbmQiLCJvdmVybGFwIiwidHh0IiwibmV3RWxlbWVudCIsInN0eWxlTmFtZSIsInNldERpc2FibGVkQnV0dG9ucyIsImJ1dHRvbkxpc3QiLCJzdG9wUGFyZW50IiwicGFyZW50IiwiZGV0YWNoTmVzdGVkTGlzdCIsImJhc2VOb2RlIiwiYWxsIiwick5vZGUiLCJfZGVsZXRlTmVzdGVkTGlzdCIsImNOb2RlcyIsInJDaGlsZHJlbiIsImJhc2VQYXJlbnQiLCJsaVNpYmxpbmciLCJsaVBhcmVudCIsImNoaWxkIiwic3BsaXRFbGVtZW50Iiwib2Zmc2V0IiwiYnAiLCJzcGxpdFRleHQiLCJhZnRlciIsImRlcHRoRWwiLCJwRWxlbWVudCIsIm5vZGVQYXRoQXJyYXkiLCJvbmx5VGV4dCIsImluc3QiLCJub2RlUGF0aExlbiIsImFwcGx5IiwiTnVtYmVyIiwidmFsdWVPZiIsImRlcHRoSW5kZXgiLCJjRGVwdGgiLCJzcGxpY2VEZXB0aCIsImNoaWxkcyIsImNoaWxkTGVuZ3RoIiwibkxlbiIsImFkZE9mZnNldCIsInRleHRPZmZzZXQiLCJ0ZW1wTCIsIm5vdFJlbW92ZU5vZGUiLCJfbm90VGV4dE5vZGUiLCJkZXMiLCJfaXNNYWludGFpbmVkTm9kZSIsIl9pc1NpemVOb2RlIiwiX2Rpc2FsbG93ZWRUYWdzIiwiY3JlYXRlVGFnc1doaXRlbGlzdCIsIl9jb25zaXN0ZW5jeUNoZWNrT2ZIVE1MIiwiZG9jdW1lbnRGcmFnbWVudCIsImh0bWxDaGVja1doaXRlbGlzdFJlZ0V4cCIsImxvd0xldmVsQ2hlY2siLCJyZW1vdmVUYWdzIiwiZW1wdHlUYWdzIiwid3JvbmdMaXN0Iiwid2l0aG91dEZvcm1hdENlbGxzIiwid3JvbmdUYWdzIiwibnJ0YWciLCJmZWwiLCJjaGVja1RhZ3MiLCJjZWxsQ2hpbGRyZW4iLCJ0cCIsIl9zZXREZWZhdWx0T3B0aW9uU3R5bGUiLCJvcHRpb25TdHlsZSIsIm1pbkhlaWdodCIsImVkaXRvciIsInN0eWxlQXJyIiwiX3NldElmcmFtZURvY3VtZW50IiwiaGVhZCIsIl9zZXRJZnJhbWVDc3NUYWdzIiwiX2VkaXRhYmxlQ2xhc3MiLCJsaW5rTmFtZXMiLCJpZnJhbWVDU1NGaWxlTmFtZSIsIndSZWdFeHAiLCJ0YWdTdHJpbmciLCJDU1NGaWxlTmFtZSIsInN0eWxlVGFnIiwiX2luaXRPcHRpb25zIiwidG9wX2RpdiIsInRvb2xfYmFyIiwiX2NyZWF0ZVRvb2xCYXIiLCJwbHVnaW5DYWxsQnV0dG9ucyIsIl9jaGVja0thdGV4TWF0aCIsImFycm93Iiwic3RpY2t5X2R1bW15IiwiZWRpdG9yX2RpdiIsImluaXRFbGVtZW50cyIsIl9pbml0RWxlbWVudHMiLCJib3R0b21CYXIiLCJ3eXNpd3lnX2RpdiIsInBsYWNlaG9sZGVyX3NwYW4iLCJ0ZXh0YXJlYSIsInJlc2l6aW5nX2JhciIsInJlc2l6aW5nQmFyIiwibmF2aWdhdGlvbiIsImNoYXJfd3JhcHBlciIsImNoYXJXcmFwcGVyIiwiY2hhcl9jb3VudGVyIiwiY2hhckNvdW50ZXIiLCJsb2FkaW5nX2JveCIsImxpbmVfYnJlYWtlciIsImxpbmVfYnJlYWtlcl90IiwibGluZV9icmVha2VyX2IiLCJyZXNpemVfYmFjayIsInRvb2xiYXJDb250YWluZXIiLCJfY2hlY2tDb2RlTWlycm9yIiwiY29uc3RydWN0ZWQiLCJfdG9wIiwiX3JlbGF0aXZlIiwiX3Rvb2xCYXIiLCJfbWVudVRyYXkiLCJfZWRpdG9yQXJlYSIsIl93eXNpd3lnQXJlYSIsIl9jb2RlQXJlYSIsIl9wbGFjZWhvbGRlciIsIl9yZXNpemluZ0JhciIsIl9uYXZpZ2F0aW9uIiwiX2NoYXJXcmFwcGVyIiwiX2NoYXJDb3VudGVyIiwiX2xpbmVCcmVha2VyIiwiX2xpbmVCcmVha2VyX3QiLCJfbGluZUJyZWFrZXJfYiIsIl9yZXNpemVCYWNrIiwiX3N0aWNreUR1bW15IiwiX2Fycm93IiwiX3Jlc3BvbnNpdmVCdXR0b25zIiwicmVzcG9uc2l2ZUJ1dHRvbnMiLCJjb2RlTWlycm9yIiwiY21PcHRpb25zIiwiaHRtbE1vZGUiLCJsaW5lTnVtYmVycyIsImxpbmVXcmFwcGluZyIsInJlZHVjZSIsInZpZXdwb3J0TWFyZ2luIiwiSW5maW5pdHkiLCJjbSIsImZyb21UZXh0QXJlYSIsIndyYXBwZXIiLCJjb2RlTWlycm9yRWRpdG9yIiwia2F0ZXhPcHRpb25zIiwidGhyb3dPbkVycm9yIiwiX3NldE9wdGlvbnMiLCJtZXJnZU9wdGlvbnMiLCJvcmlnaW5PcHRpb25zIiwib3JpZ2luRWxlbWVudCIsImVkaXRvckFyZWEiLCJpc05ld1Rvb2xiYXJDb250YWluZXIiLCJpc05ld1Rvb2xiYXIiLCJ0b3BBcmVhIiwiY2FsbEJ1dHRvbnMiLCJ0b3BEaXYiLCJ0b29sQmFyIiwidG9vbEJhckFycm93IiwiX2VkaXRvclN0eWxlcyIsInRvb2xiYXJXaWR0aCIsInd5c2l3eWdEaXYiLCJvdmVyZmxvdyIsImNoYXJDb3VudGVyTGFiZWwiLCJjaGFyTGFiZWwiLCJtYXhDaGFyQ291bnQiLCJjaGFyX21heCIsImlubmVyVGV4dCIsIl9kZWZhdWx0TGFuZyIsImRlZmF1bHRUYWciLCJ0ZXh0VGFncyIsInN1YiIsInN1cCIsIl9kZWZhdWx0IiwiX25ldyIsIl90ZXh0VGFnc01hcCIsImhpc3RvcnlTdGFja0RlbGF5VGltZSIsIl9kZWZhdWx0VGFnc1doaXRlbGlzdCIsIl9lZGl0b3JUYWdzV2hpdGVsaXN0IiwiX3NldFdoaXRlbGlzdCIsImFkZFRhZ3NXaGl0ZWxpc3QiLCJ0YWdzQmxhY2tsaXN0IiwicGFzdGVUYWdzV2hpdGVsaXN0IiwicGFzdGVUYWdzQmxhY2tsaXN0IiwiYXR0cmlidXRlc1doaXRlbGlzdCIsIl9wcmludENsYXNzIiwic3RpY2t5VG9vbGJhciIsInVuZGVmaW5lZCIsImZ1bGxTY3JlZW5PZmZzZXQiLCJmdWxsUGFnZSIsInByZXZpZXdUZW1wbGF0ZSIsInByaW50VGVtcGxhdGUiLCJzaG93UGF0aExhYmVsIiwiY2hhckNvdW50ZXJUeXBlIiwiY2xpZW50V2lkdGgiLCJjbGllbnRIZWlnaHQiLCJ0YWJEaXNhYmxlIiwic2hvcnRjdXRzRGlzYWJsZSIsInNob3J0Y3V0c0hpbnQiLCJjYWxsQmFja1NhdmUiLCJfaWNvbnMiLCJ3aGl0ZWxpc3QiLCJibGFja2xpc3QiLCJfZGVmYXVsdEJ1dHRvbnMiLCJhZGRTaGlmdCIsImluZGVudEtleSIsIl9jcmVhdGVNb2R1bGVHcm91cCIsIm9EaXYiLCJvVWwiLCJfY3JlYXRlQnV0dG9uIiwiYnV0dG9uQ2xhc3MiLCJkYXRhQ29tbWFuZCIsImRhdGFEaXNwbGF5IiwiX2Rpc2FibGVkIiwib0xpIiwib0J1dHRvbiIsIl9wbHVnaW5zIiwic2VwYXJhdG9yX3ZlcnRpY2FsIiwiX2J1dHRvblRyYXkiLCJzdHJpbmdpZnkiLCJkZWZhdWx0QnV0dG9uTGlzdCIsInBsdWdpbnNWYWx1ZXMiLCJtb2R1bGVFbGVtZW50IiwiYnV0dG9uRWxlbWVudCIsIm1vcmVMYXllciIsImJ1dHRvbkdyb3VwTG9vcCIsIm1vcmUiLCJtb3JlQ29udGFpbmVyIiwibW9yZUNvbW1hbmQiLCJidXR0b25Hcm91cCIsIm1vcmVCdXR0b24iLCJkaXYiLCJtYXRjaGVkIiwiY3VzdG9tIiwidWwiLCJsaSIsInN2IiwiZW50ZXJEaXYiLCJ1bnNoaWZ0IiwidG9vbF9jb3ZlciIsIl9Db250ZXh0IiwiY29ucyIsImxvYWRpbmciLCJsaW5lQnJlYWtlciIsImxpbmVCcmVha2VyX3QiLCJsaW5lQnJlYWtlcl9iIiwicmVzaXplQmFja2dyb3VuZCIsInRvb2wiLCJub3RpY2UiLCJub3RpY2VfZGl2Iiwibm90aWNlX3NwYW4iLCJub3RpY2VfYnV0dG9uIiwib25DbGlja19jYW5jZWwiLCJpbml0X29wdGlvbnMiLCJpZE9yRWxlbWVudCIsIl9pbml0X29wdGlvbnMiLCJ2YWwiLCJnZXRFbGVtZW50QnlJZCIsIl9Db25zdHJ1Y3RvciIsIm93bmVyRG9jdW1lbnQiLCJkZWZhdWx0VmlldyIsIl91dGlsIiwiX3BhcnNlciIsIl93dyIsIl9zaGFkb3dSb290IiwiX3NoYWRvd1Jvb3RDb250cm9sbGVyRXZlbnRUYXJnZXQiLCJfbm90aWNlIiwiaW5pdFBsdWdpbnMiLCJfdGFyZ2V0UGx1Z2lucyIsInN1Ym1lbnUiLCJfc3VibWVudU5hbWUiLCJfYmluZGVkU3VibWVudU9mZiIsIl9iaW5kZWRDb250YWluZXJPZmYiLCJzdWJtZW51QWN0aXZlQnV0dG9uIiwiY29udGFpbmVyQWN0aXZlQnV0dG9uIiwiY3VycmVudENvbnRyb2xsZXJUYXJnZXQiLCJjdXJyZW50RmlsZUNvbXBvbmVudEluZm8iLCJjb2RlVmlld0Rpc2FibGVkQnV0dG9ucyIsInJlc2l6aW5nRGlzYWJsZWRCdXR0b25zIiwiX21vcmVMYXllckFjdGl2ZUJ1dHRvbiIsIl9odG1sQ2hlY2tXaGl0ZWxpc3RSZWdFeHAiLCJfZGlzYWxsb3dlZFRleHRUYWdzUmVnRXhwIiwiZWRpdG9yVGFnc1doaXRlbGlzdFJlZ0V4cCIsInBhc3RlVGFnc1doaXRlbGlzdFJlZ0V4cCIsImlzRGlzYWJsZWQiLCJpc1JlYWRPbmx5IiwiX2F0dHJpYnV0ZXNXaGl0ZWxpc3RSZWdFeHAiLCJfYXR0cmlidXRlc1RhZ3NXaGl0ZWxpc3QiLCJfYmluZENvbnRyb2xsZXJzT2ZmIiwiX2lzSW5saW5lIiwiX2lzQmFsbG9vbiIsIl9pc0JhbGxvb25BbHdheXMiLCJfaW5saW5lVG9vbGJhckF0dHIiLCJpc1Nob3ciLCJfbm90SGlkZVRvb2xiYXIiLCJfc3RpY2t5IiwiX2xpbmVCcmVha2VyQnV0dG9uIiwiX2NvbXBvbmVudHNJbmZvSW5pdCIsIl9jb21wb25lbnRzSW5mb1Jlc2V0IiwiYWN0aXZlUGx1Z2lucyIsIm1hbmFnZWRUYWdzSW5mbyIsIl9jaGFyVHlwZUhUTUwiLCJfZmlsZUluZm9QbHVnaW5zQ2hlY2siLCJfZmlsZUluZm9QbHVnaW5zUmVzZXQiLCJfZmlsZU1hbmFnZXIiLCJxdWVyeVN0cmluZyIsInBsdWdpblJlZ0V4cCIsInBsdWdpbk1hcCIsImNvbW1hbmRNYXAiLCJfc3R5bGVDb21tYW5kTWFwIiwiX2RlZmF1bHRDb21tYW5kIiwiX3ZhcmlhYmxlIiwiaXNDaGFuZ2VkIiwiaXNDb2RlVmlldyIsImlzRnVsbFNjcmVlbiIsImlubmVySGVpZ2h0X2Z1bGxTY3JlZW4iLCJyZXNpemVDbGllbnRZIiwidGFiU2l6ZSIsImNvZGVJbmRlbnQiLCJtaW5SZXNpemluZ1NpemUiLCJjdXJyZW50Tm9kZXMiLCJjdXJyZW50Tm9kZXNNYXAiLCJfcmFuZ2UiLCJfc2VsZWN0aW9uTm9kZSIsIl9vcmlnaW5Dc3NUZXh0IiwiX2JvZHlPdmVyZmxvdyIsIl9lZGl0b3JBcmVhT3JpZ2luQ3NzVGV4dCIsIl93eXNpd3lnT3JpZ2luQ3NzVGV4dCIsIl9jb2RlT3JpZ2luQ3NzVGV4dCIsIl9mdWxsU2NyZWVuQXR0cnMiLCJzdGlja3kiLCJiYWxsb29uIiwiaW5saW5lIiwiX2xpbmVCcmVha0NvbXAiLCJfbGluZUJyZWFrRGlyIiwiY2FsbEJhY2tGdW5jdGlvbiIsIl90YXJnZXQiLCJtb2R1bGVBcnJheSIsIm1vZHVsZU5hbWUiLCJnZXRHbG9iYWxTY3JvbGxPZmZzZXQiLCJzY3JvbGxMZWZ0Iiwic3VibWVudU9uIiwic3VibWVudU5hbWUiLCJfc2V0TWVudVBvc2l0aW9uIiwibW9yZUxheWVyT2ZmIiwiY29udGFpbmVyT24iLCJjb250YWluZXJOYW1lIiwiX2NvbnRhaW5lck5hbWUiLCJjb250YWluZXJPZmYiLCJ0b29sYmFyVyIsInRvb2xiYXJPZmZzZXQiLCJldmVudCIsIl9nZXRFZGl0b3JPZmZzZXRzIiwibWVudVciLCJlbGVtZW50VyIsInJ0bFciLCJydGxMIiwib3ZlckxlZnQiLCJvZmZzZXRFbCIsImJ0IiwidG9vbGJhclRvcCIsIm1lbnVIZWlnaHQiLCJtZW51SGVpZ2h0X2JvdHRvbSIsIm1lbnVUb3AiLCJpbnNUb3AiLCJtZW51SGVpZ2h0X3RvcCIsImFyZyIsImFyZ3VtZW50cyIsImdldEZpbGVDb21wb25lbnQiLCJzaG93Q29udHJvbGxlciIsInJlZmVyRWwiLCJ0b3BNYXJnaW4iLCJjb250cm9sbGVyVyIsInJlZmVyRWxXIiwiYWxsb3ciLCJvdmVyU2l6ZSIsImV4ZWNDb21tYW5kIiwic2hvd0RlZmF1bHRVSSIsIm5hdGl2ZUZvY3VzIiwiX2VkaXRvclJhbmdlIiwiY3VycmVudE5vZGUiLCJjb21tb25BbmNlc3RvckNvbnRhaW5lciIsImJyIiwiX2FwcGx5VGFnRWZmZWN0cyIsIl90b2dnbGVUb29sYmFyQmFsbG9vbiIsImZpbGVDb21wb25lbnRJbmZvIiwiYmx1ciIsInN0YXJ0Q29uIiwic3RhcnRPZmYiLCJlbmRDb24iLCJlbmRPZmYiLCJzZXRTdGFydCIsInNldEVuZCIsInNlbGVjdGlvbiIsInJlbW92ZUFsbFJhbmdlcyIsImFkZFJhbmdlIiwicmVtb3ZlUmFuZ2UiLCJfc2V0S2V5RWZmZWN0IiwiX2NyZWF0ZURlZmF1bHRSYW5nZSIsImNvbGxhcHNlZCIsImZvY3VzTm9kZSIsInJhbmdlQ291bnQiLCJnZXRSYW5nZUF0IiwiYW5jaG9yTm9kZSIsImFuY2hvck9mZnNldCIsImZvY3VzT2Zmc2V0IiwiY29tcGFyZVZhbHVlIiwicmlnaHREaXIiLCJfc2VsZWN0aW9uVm9pZCIsIm9wIiwiZXh0ZW50Tm9kZSIsImNvbW0iLCJfcmVzZXRSYW5nZVRvVGV4dE5vZGUiLCJ0ZW1wQ29uIiwidGVtcE9mZnNldCIsInRlbXBDaGlsZCIsIm9ubHlCcmVhayIsImVtcHR5VGV4dCIsImNvbW1vbkNvbiIsImxpbmVOb2RlcyIsInN0YXJ0TGluZSIsImVuZExpbmUiLCJzdGFydElkeCIsImVuZElkeCIsIm9ubHlUYWJsZSIsInN0YXJ0UmFuZ2VFbCIsImVuZFJhbmdlRWwiLCJzYW1lUmFuZ2UiLCJyZW1vdmVEdXBsaWNhdGUiLCJteUNvbXBvbmVudCIsInNlbGVjdGVkTGluZXMiLCJpc0VkZ2VQb2ludCIsImRpciIsIm5vZGVWYWx1ZSIsIl9pc0VkZ2VGb3JtYXQiLCJmb3JtYXROb2RlIiwiY3VycmVudEZvcm1hdEVsIiwib0Zvcm1hdE5hbWUiLCJjaGVja0NoYXJDb3VudCIsIm5vdFNlbGVjdCIsInJlbW92ZU5vZGUiLCJmb3JtYXRFbCIsImRlcHRoRm9ybWF0IiwicGx1Z2luIiwiX3NldENvbXBvbmVudExpbmVCcmVha2VyIiwidF9zdHlsZSIsImJfc3R5bGUiLCJyZXNpemVDb250YWluZXIiLCJjb21wb25lbnRUb3AiLCJ3U2Nyb2xsIiwiYWZ0ZXJOb2RlIiwiZnJlZUZvcm1hdCIsImlzRm9ybWF0cyIsImZvcm1hdFJhbmdlIiwib3JpZ2luQWZ0ZXIiLCJyZW1vdmVkVGFnIiwicHJldkNvbnRhaW5lciIsInNhbWVQYXJlbnQiLCJvbGRQYXJlbnQiLCJyYW5nZUNvbiIsImZOb2RlIiwiY0l0ZW0iLCJfc2V0SW50b0ZyZWVGb3JtYXQiLCJwcmV2aW91c1RleHQiLCJuZXh0VGV4dCIsIm5ld1JhbmdlIiwiemVyb1dpZHRoIiwib05vZGVDaGlsZHJlbiIsImxhc3RPTm9kZSIsImJlZm9yZU5vZGUiLCJzdGFydEluZGV4IiwiZW5kSW5kZXgiLCJzdGFydE5vZGUiLCJlbmROb2RlIiwic3Vic3RyaW5nRGF0YSIsInJjIiwicmFuZ2VMaW5lcyIsImxpbmVzTG9vcCIsIm5lc3RlZCIsImZFbCIsImxFbCIsInN0YW5kVGFnIiwiYmVmb3JlVGFnIiwicGFyZW50RGVwdGgiLCJsaXN0UGFyZW50IiwibGluZUFyciIsInJlbW92ZUl0ZW1zIiwibmV4dExpbmUiLCJuZXh0TGlzdCIsInJlbW92ZUFycmF5Iiwic3BsaXRSYW5nZSIsIm5ld1JhbmdlRWxlbWVudCIsImZpcnN0Tm9kZSIsImxhc3ROb2RlIiwicmFuZ2VFbCIsImluc2VydGVkTmV3IiwibW92ZUNvbXBsZXRlIiwiYXBwZW5kTm9kZSIsImluc05vZGUiLCJvcmlnaW5Ob2RlIiwiaW5zQ2hpbGRyZW4iLCJvcmlnaW5OZXh0IiwiZGV0YWNoUmFuZ2UiLCJsaW5lSW5kZXgiLCJpbnNOZXh0IiwiaW5uZXJDaGlsZHJlbiIsInJhbmdlUGFyZW50IiwicmFuZ2VSaWdodCIsImNoaWxkRWRnZSIsImxpc3RGaXJzdCIsImxpc3RMYXN0IiwibGFzdEluZGV4Iiwic3R5bGVBcnJheSIsInJlbW92ZU5vZGVBcnJheSIsInN0cmljdFJlbW92ZSIsImlzUmVtb3ZlTm9kZSIsImlzUmVtb3ZlRm9ybWF0IiwibmV3Tm9kZU5hbWUiLCJzTm9kZSIsImNoZWNrQ250IiwiY2hlY2tBdHRycyIsImNrZWNrQ2xhc3NlcyIsImNsYXNzUmVnIiwic3R5bGVDaGVjayIsImNsYXNzQ2hlY2siLCJzdGFydCIsImVuZCIsInN0eWxlUmVnRXhwIiwiY2xhc3NSZWdFeHAiLCJyZW1vdmVOb2RlUmVnRXhwIiwid0Jvb2xlYW4iLCJCb29sZWFuIiwiX3JlbW92ZUNoZWNrIiwiY2hlY2tOb2RlIiwidk5vZGUiLCJ0YWdSZW1vdmUiLCJvcmlnaW5TdHlsZSIsIm9yaWdpbkNsYXNzZXMiLCJvbmVMaW5lIiwiZW5kTGVuZ3RoIiwiaXNSZW1vdmVBbmNob3IiLCJpc1NpemVOb2RlIiwiX2dldE1haW50YWluZWROb2RlIiwiX3V0aWxfZ2V0TWFpbnRhaW5lZE5vZGUiLCJfdXRpbF9pc01haW50YWluZWROb2RlIiwiX25vZGVDaGFuZ2Vfb25lTGluZSIsIl9zZXRDb21tb25MaXN0U3R5bGUiLCJfbm9kZUNoYW5nZV9lbmRMaW5lIiwiX25vZGVDaGFuZ2VfbWlkZGxlTGluZSIsIl9ub2RlQ2hhbmdlX3N0YXJ0TGluZSIsImNoaWxkU3R5bGUiLCJlbFN0eWxlIiwiZm9udFdlaWdodCIsImZvbnRTdHlsZSIsIl9zdHJpcFJlbW92ZU5vZGUiLCJfaXNSZW1vdmUiLCJuZXdJbm5lck5vZGUiLCJwYXJlbnRDb24iLCJzYW1lVGFnIiwieiIsIm5Ob2RlQXJyYXkiLCJwTm9kZSIsImlzU2FtZU5vZGUiLCJwQ3VycmVudCIsInN0YXJ0UGFzcyIsImVuZFBhc3MiLCJjaGVja0NzcyIsImNvdmVyTm9kZSIsInByZXZOb2RlIiwicHJldkFuY2hvck5vZGUiLCJjaGlsZE5vZGUiLCJhbmNob3JzIiwiYUNoaWxkcmVuIiwiYUxlbiIsImFuY2VzdG9yQW5jaG9yTm9kZSIsImFmdGVyQW5jaG9yTm9kZSIsInRleHROb2RlX3MiLCJ0ZXh0Tm9kZV9lIiwiZW5kQ29uUmVzZXQiLCJuZXdTdGFydE9mZnNldCIsInN0YXJ0UGF0aCIsIm1lcmdlRW5kQ29uIiwibmV3RW5kT2Zmc2V0IiwiZW5kUGF0aCIsIm5ld09mZnNldHMiLCJfZW5kQ29udGFpbmVyIiwicGFzc05vZGUiLCJjbG9uZUNoaWxkIiwiaXNUb3BOb2RlIiwidGVtcE5vZGUiLCJuZXdDc3NUZXh0IiwibmV3Q2xhc3MiLCJub25lQ2hhbmdlIiwiYWN0aW9uQ2FsbCIsImxheWVyIiwiX3Nob3dUb29sYmFyQmFsbG9vbiIsIl9zaG93VG9vbGJhcklubGluZSIsImNvbW1hbmRIYW5kbGVyIiwidG9nZ2xlQ29kZVZpZXciLCJ0b2dnbGVGdWxsU2NyZWVuIiwidG9nZ2xlRGlzcGxheUJsb2NrcyIsImdldENvbnRlbnRzIiwibm9kZXNNYXAiLCJtYXJnaW5EaXIiLCJfcmVzb3VyY2VzU3RhdGVDaGFuZ2UiLCJfc2V0Q29kZURhdGFUb0VkaXRvciIsIl9oaWRlVG9vbGJhciIsIl9yZXNldENhY2hpbmdCdXR0b24iLCJfc2V0RWRpdG9yRGF0YVRvQ29kZVZpZXciLCJzY3JvbGxIZWlnaHQiLCJyZWZyZXNoIiwiX2NoZWNrUGxhY2Vob2xkZXIiLCJjb2RlX2h0bWwiLCJfZ2V0Q29kZVZpZXciLCJwYXJzZURvY3VtZW50IiwiaGVhZENoaWxkcmVuIiwiY29udmVydENvbnRlbnRzRm9yRWRpdG9yIiwiZWRpdGFibGVDbGFzc2VzIiwiY29kZUNvbnRlbnRzIiwiY29udmVydEhUTUxGb3JDb2RlVmlldyIsImNvZGVWYWx1ZSIsIl9zZXRDb2RlVmlldyIsIl92YXIiLCJ3YXNUb29sYmFySGlkZGVuIiwib25TY3JvbGxfd2luZG93IiwibWFyZ2luVG9wIiwiekluZGV4IiwiX2lmcmFtZUF1dG9IZWlnaHQiLCJoaWRlIiwiY29udGVudHNIVE1MIiwicHJpbnREb2N1bWVudCIsIndEb2MiLCJhcnJ0cyIsIndyaXRlIiwibGlua3MiLCJsaW5rSFRNTCIsImRvY3VtZW50TW9kZSIsIlN0eWxlTWVkaWEiLCJ3aW5kb3dPYmplY3QiLCJtaW1lVHlwZSIsImNvbnZlcnRWYWx1ZSIsIl9yZXNldENvbXBvbmVudHMiLCJzZXRJZnJhbWVDb250ZW50cyIsImN0eCIsIm9ubHlDb250ZW50cyIsInJlbmRlckhUTUwiLCJmaWdjYXB0aW9ucyIsIl9tYWtlTGluZSIsInJlcXVpcmVGb3JtYXQiLCJ0ZXh0QXJyYXkiLCJfYWxsb3dIVE1MQ29tbWVudHMiLCJfdGFnQ29udmVydG9yIiwiX2RlbGV0ZURpc2FsbG93ZWRUYWdzIiwiX2NsZWFuVGFncyIsInRBdHRyIiwiY2xlYW5IVE1MIiwidGV4dENvbXBMaXN0IiwiaW5pdE1ldGhvZCIsImRvbVRyZWUiLCJyZXR1cm5IVE1MIiwiYnJSZWciLCJpc0Zvcm1hdCIsImluZGVudFNpemUiLCJsaW5lQlIiLCJlbGVtZW50UmVnVGVzdCIsImVsZW1lbnRJbmRlbnQiLCJub2RlUmVnVGVzdCIsInRhZ0luZGVudCIsIlhNTFNlcmlhbGl6ZXIiLCJzZXJpYWxpemVUb1N0cmluZyIsImxpc3RlbmVyIiwidXNlQ2FwdHVyZSIsIl9jaGFyQ291bnQiLCJpbnB1dFRleHQiLCJjb3VudFR5cGUiLCJuZXh0Q2hhckNvdW50IiwiZ2V0Q2hhckxlbmd0aCIsIl9zZXRDaGFyQ291bnQiLCJvdmVyIiwiY291bnQiLCJnZXRDaGFyQ291bnQiLCJzbGljZVBvc2l0aW9uIiwiX2NhbGxDb3VudGVyQmxpbmsiLCJfY2hlY2tDb21wb25lbnRzIiwiZ2V0RG9jIiwic2V0VmFsdWUiLCJnZXRWYWx1ZSIsImlnbm9yZWRMaXN0IiwiT1VUREVOVCIsIklOREVOVCIsIl9pbml0IiwicmVsb2FkIiwiX2luaXRIVE1MIiwiU2hhZG93Um9vdCIsInNoYWRvd1Jvb3QiLCJkaXNhbGxvd1RleHRUYWdzIiwiYWxsb3dUZXh0VGFncyIsImRlZmF1bHRBdHRyIiwiX2F0dHIiLCJ0YWdzQXR0ciIsImFsbEF0dHIiLCJrIiwiX2NhY2hpbmdCdXR0b25zIiwibWFuYWdlZENsYXNzIiwiZmlsZVBsdWdpblJlZ0V4cCIsImNoYW5nZSIsImRlbGF5VGltZSIsInB1c2hEZWxheSIsInN0YWNrSW5kZXgiLCJzdGFjayIsInNldENvbnRlbnRzRnJvbVN0YWNrIiwicHVzaFN0YWNrIiwiZGVsYXkiLCJ0aW1lIiwiY2xlYXJUaW1lb3V0IiwiZ28iLCJnZXRDdXJyZW50SW5kZXgiLCJpZ25vcmVDaGFuZ2VFdmVudCIsIl9kZXN0cm95IiwiX2hpc3RvcnkiLCJfb25DaGFuZ2VfaGlzdG9yeVN0YWNrIiwiX2lmcmFtZUF1dG8iLCJfaW5pdFd5c2l3eWdBcmVhIiwiU1VCIiwiU1VQIiwib25DaGFuZ2UiLCJfc2V0RGVmYXVsdEZvcm1hdCIsImZvcm1hdE5hbWUiLCJmaWxlQ29tcG9uZW50IiwiX3NldE9wdGlvbnNJbml0IiwiX2dldENvbnN0cnVjdGVkIiwiX2VkaXRvckluaXQiLCJfYWRkRXZlbnQiLCJfb2ZmU3RpY2t5VG9vbGJhciIsIm9uUmVzaXplX3dpbmRvdyIsImNvbnRleHRFbCIsIl9JRWlzQ29tcG9zaW5nIiwiX2xpbmVCcmVha2VyQmluZCIsIl9yZXNwb25zaXZlQ3VycmVudFNpemUiLCJfcmVzcG9uc2l2ZUJ1dHRvblNpemUiLCJfZGlyZWN0aW9uS2V5Q29kZSIsIl9ub25UZXh0S2V5Q29kZSIsIl9oaXN0b3J5SWdub3JlS2V5Q29kZSIsIl9vbkJ1dHRvbnNDaGVjayIsIl9mcm9udFplcm9XaWR0aFJlZyIsIl9rZXlDb2RlU2hvcnRjdXQiLCI2NSIsIjY2IiwiODMiLCI4NSIsIjczIiwiODkiLCI5MCIsIjIxOSIsIjIyMSIsIl9zaG9ydGN1dENvbW1hbmQiLCJjbGFzc09uQ2hlY2siLCJjb21tYW5kTWFwTm9kZXMiLCJfY2FuY2VsQ2FwdGlvbkVkaXQiLCJfYnV0dG9uc0V2ZW50SGFuZGxlciIsIm9uQ2xpY2tfdG9vbGJhciIsIm9uTW91c2VEb3duX3d5c2l3eWciLCJvbk1vdXNlRG93biIsInRhYmxlQ2VsbCIsIm9uQ2xpY2tfd3lzaXd5ZyIsIm9uQ2xpY2siLCJoaWRlVG9vbGJhciIsInByZXZMaSIsIl9iYWxsb29uRGVsYXkiLCJfc2hvd1Rvb2xiYXJCYWxsb29uRGVsYXkiLCJyYW5nZU9iaiIsImlzRGlyVG9wIiwicmVjdHMiLCJnZXRDbGllbnRSZWN0cyIsImdsb2JhbFNjcm9sbCIsImVkaXRvcldpZHRoIiwic3RpY2t5VG9wIiwiZWRpdG9yTGVmdCIsIm5vZGVPZmZzZXQiLCJib3R0b20iLCJub1RleHQiLCJhcnJvd01hcmdpbiIsInRvb2xiYXJIZWlnaHQiLCJpZnJhbWVSZWN0cyIsIl9zZXRUb29sYmFyT2Zmc2V0IiwiZWRpdG9yUGFyZW50IiwiYWJzb2x1dGVMZWZ0Iiwib3ZlclJpZ2h0IiwicmVzZXRUb3AiLCJzcGFjZSIsIl9nZXRQYWdlQm90dG9tU3BhY2UiLCJkb2N1bWVudEVsZW1lbnQiLCJhcnJvd19sZWZ0Iiwic2hvd0lubGluZSIsIm9uSW5wdXRfd3lzaXd5ZyIsIm9uSW5wdXQiLCJfaXNVbmVkaXRhYmxlTm9kZSIsImlzRnJvbnQiLCJzaWJsaW5nS2V5Iiwic2libGluZ05vZGUiLCJfaXNVbmVkaXRhYmxlTm9kZV9nZXRTaWJsaW5nIiwic2VsZWN0Tm9kZSIsIl9vblNob3J0Y3V0S2V5Iiwib25LZXlEb3duX3d5c2l3eWciLCJzaGlmdEtleSIsImN0cmwiLCJjdHJsS2V5IiwibWV0YUtleSIsImFsdEtleSIsIm9uS2V5RG93biIsInNlbGVjdFJhbmdlIiwiZmlsZUNvbXBvbmVudE5hbWUiLCJfaGFyZERlbGV0ZSIsImRlZmF1bHRGb3JtYXQiLCJwcmV2TGFzdCIsImNvbiIsInNlbCIsImlnbm9yZVpXUyIsIm5leHRFbCIsImlzRWRnZSIsImxpbmVzIiwiZmMiLCJsYyIsIm1vdmVDZWxsIiwiZW5kQ2hpbGQiLCJ0YWJUZXh0IiwidGV4dFJhbmdlIiwiZnJlZUZvcm1hdEVsIiwiZW50ZXJIVE1MIiwiZm9ybWF0SW5uZXJzIiwiaW5uZXJOb2RlIiwic2VsZWN0aW9uRm9ybWF0Iiwid1NlbGVjdGlvbiIsImluc2VydEhUTUwiLCJ3T2Zmc2V0IiwiZm9jdXNOZXh0IiwiYnJQcmV2IiwiYnJOZXh0IiwibmV3TGlzdENlbGwiLCJjb21wQ29udGV4dCIsIm5ic3AiLCJvbktleVVwX3d5c2l3eWciLCJvRm9ybWF0VGFnIiwiaXNDb21wb3NpbmciLCJmcm9udFplcm9XaWR0aENudCIsInN1YnN0cmluZyIsIm9uS2V5VXAiLCJvblNjcm9sbF93eXNpd3lnIiwib25TY3JvbGwiLCJvbkZvY3VzX3d5c2l3eWciLCJvbkZvY3VzIiwib25CbHVyX3d5c2l3eWciLCJvbkJsdXIiLCJvbk1vdXNlRG93bl9yZXNpemluZ0JhciIsInByZXZIZWlnaHQiLCJjbGllbnRZIiwiX3Jlc2l6ZV9lZGl0b3IiLCJjbG9zdXJlRnVuYyIsIm9uUmVzaXplRWRpdG9yIiwicmVzaXplSW50ZXJ2YWwiLCJyZXNwb25zaXZlU2l6ZSIsInJlc3BvbnNpdmVXaWR0aCIsInNldFRvb2xiYXJCdXR0b25zIiwiZWRpdG9ySGVpZ2h0Iiwic2Nyb2xsWSIsImVkaXRvclRvcCIsImlubGluZU9mZnNldCIsIl9vblN0aWNreVRvb2xiYXIiLCJzY3JvbGwiLCJfY29kZVZpZXdBdXRvSGVpZ2h0Iiwic0NlbGwiLCJlQ2VsbCIsInNJc0NlbGwiLCJlSXNDZWxsIiwic0NvbXAiLCJlQ29tcCIsIm9uUGFzdGVfd3lzaXd5ZyIsImNsaXBib2FyZERhdGEiLCJfZGF0YVRyYW5zZmVyQWN0aW9uIiwiX3NldENsaXBib2FyZENvbXBvbmVudCIsInNldERhdGEiLCJvbkNvcHlfd3lzaXd5ZyIsIm9uQ29weSIsIm9uU2F2ZV93eXNpd3lnIiwib25TYXZlIiwib25DdXRfd3lzaXd5ZyIsIm9uQ3V0Iiwib25Ecm9wX3d5c2l3eWciLCJkYXRhVHJhbnNmZXIiLCJfc2V0RHJvcExvY2F0aW9uU2VsZWN0aW9uIiwicmFuZ2VPZmZzZXQiLCJjYXJldFJhbmdlRnJvbVBvaW50IiwiY2xpZW50WCIsInBsYWluVGV4dCIsImNsZWFuRGF0YSIsImdldERhdGEiLCJ0ZW1wRGl2IiwidGVtcFJhbmdlIiwiX3NldENsaXBib2FyZERhdGEiLCJNU0RhdGEiLCJvblBhc3RlIiwib25Ecm9wIiwiaW5zZXJ0SW1hZ2UiLCJvbk1vdXNlTW92ZV93eXNpd3lnIiwibGluZUJyZWFrZXJTdHlsZSIsImN0eEVsIiwicGFnZVkiLCJfb25Nb3VzZURvd25fbGluZUJyZWFrIiwiX29uTGluZUJyZWFrIiwiZXZlbnRXeXNpd3lnIiwicGFzc2l2ZSIsIl9zZXRSZXNwb25zaXZlVG9vbGJhciIsIl9yZW1vdmVFdmVudCIsInNpemVBcnJheSIsImJ1dHRvbnNPYmoiLCJuZXdUb29sYmFyIiwibmV3Q29udGV4dCIsIm9sZENhbGxCdXR0b25zIiwib2xkQnV0dG9uIiwic2V0T3B0aW9ucyIsIl9vcHRpb25zIiwic2V0RGVmYXVsdFN0eWxlIiwibmV3U3R5bGVzIiwibm90aWNlQ2xvc2UiLCJnZXRDb250ZXh0IiwiZ2V0VGV4dCIsImdldEltYWdlc0luZm8iLCJnZXRGaWxlc0luZm8iLCJub3RDbGVhbmluZ0RhdGEiLCJyYW5nZVNlbGVjdGlvbiIsImNoZWNrSFRNTCIsImZpcnN0Q29uIiwiYXBwZW5kQ29udGVudHMiLCJyZWFkT25seSIsInNldE9wdGlvbiIsImRpc2FibGUiLCJlbmFibGUiLCJ0b3BBcmVhU3R5bGUiLCJTVU5FRElUT1IiLCJzdW5lZGl0b3IiLCJfcmVzaXplQ2xpZW50WCIsIl9yZXNpemVDbGllbnRZIiwiX3Jlc2l6ZV93IiwiX3Jlc2l6ZV9oIiwiX3Jlc2l6ZV9kaXJlY3Rpb24iLCJfbW92ZV9wYXRoIiwiX2lzQ2hhbmdlIiwiYWxpZ25JY29ucyIsInJlc2l6ZV9kaXZfY29udGFpbmVyIiwic2V0Q29udHJvbGxlcl9yZXNpemUiLCJyZXNpemVEb3QiLCJyZXNpemVEaXNwbGF5IiwicmVzaXplX2J1dHRvbiIsInNldENvbnRyb2xsZXJfYnV0dG9uIiwicmVzaXplX2hhbmRsZXMiLCJyZXNpemVIYW5kbGVzIiwicmVzaXplQnV0dG9uR3JvdXAiLCJyb3RhdGlvbkJ1dHRvbnMiLCJwZXJjZW50YWdlQnV0dG9ucyIsImFsaWduTWVudSIsImFsaWduTWVudUxpc3QiLCJhbGlnbkJ1dHRvbiIsImF1dG9TaXplQnV0dG9uIiwiY2FwdGlvbkJ1dHRvbiIsIm9uTW91c2VEb3duX3Jlc2l6ZV9oYW5kbGUiLCJvbkNsaWNrX3Jlc2l6ZUJ1dHRvbiIsInJlc2l6ZV9jb250YWluZXIiLCJwbHVnaW5PYmoiLCJwZXJjZW50YWdlUm90YXRpb24iLCJ4VW5pdCIsInlVbml0IiwiZGVjIiwieFZhbHVlIiwieVZhbHVlIiwiY29udGV4dFJlc2l6aW5nIiwiaXNWZXJ0aWNhbCIsImFicyIsImRpc3BsYXlYIiwiZGlzcGxheVkiLCJyZXNpemVEb3RTaG93Iiwicm90YXRpb25zIiwicEJ1dHRvbnMiLCJuYXR1cmFsV2lkdGgiLCJuYXR1cmFsSGVpZ2h0IiwiX2Nsb3NlQWxpZ25NZW51Iiwib3BlbkFsaWduTWVudSIsImN1cnJlbnRDb250ZXh0IiwiY3VycmVudE1vZHVsZSIsInBlcmNlbnRZIiwicGVyY2VudGFnZSIsIl9zZXRUcmFuc0Zvcm0iLCJzbG9wZSIsImRlZyIsImFsaWduVmFsdWUiLCJjYXB0aW9uVGV4dCIsInRyYW5zZm9ybSIsInRyYW5zZm9ybU9yaWdpbiIsInRyYW5zT3JpZ2luIiwib2Zmc2V0VyIsIm9mZnNldEgiLCJ0cmFuc1ciLCJ0cmFuc0giLCJ0cmFuc2xhdGUiLCJjbG9zdXJlRnVuY19iaW5kIiwicmVzaXppbmdfZWxlbWVudF9iaW5kIiwiY2FuY2VsX2NvbnRyb2xsZXJfcmVzaXplIiwicmVzaXppbmdfZWxlbWVudCIsInJlc3VsdFciLCJyZXN1bHRIIiwid2giLCJwYWRkaW5nIiwibGltaXQiLCJfY2hlY2tNZWRpYUNvbXBvbmVudCIsInVwbG9hZFVybCIsInVwbG9hZEhlYWRlciIsImNhbGxCYWNrIiwiZXJyb3JDYWxsQmFjayIsImZpbGVQbHVnaW4iLCJfY2FsbEJhY2tVcGxvYWQiLCJ0YWdOYW1lcyIsInVwbG9hZEV2ZW50SGFuZGxlciIsImZpbGVNYW5hZ2VyUGx1Z2luIiwiaW5mb0xpc3QiLCJzZXRGaWxlSW5mbyIsImluZm9VcGRhdGUiLCJjdXJyZW50VGFncyIsImluZm9JbmRleCIsInBsZ3VpbiIsInN0YXRlIiwic2Nyb2xsSW50b1ZpZXciXSwibWFwcGluZ3MiOiJhQUNFLElBQUlBLEVBQW1CLEdBR3ZCLFNBQVNDLEVBQW9CQyxHQUc1QixHQUFHRixFQUFpQkUsR0FDbkIsT0FBT0YsRUFBaUJFLEdBQVVDLFFBR25DLElBQUlDLEVBQVNKLEVBQWlCRSxHQUFZLENBQ3pDRyxFQUFHSCxFQUNISSxHQUFHLEVBQ0hILFFBQVMsSUFVVixPQU5BSSxFQUFRTCxHQUFVTSxLQUFLSixFQUFPRCxRQUFTQyxFQUFRQSxFQUFPRCxRQUFTRixHQUcvREcsRUFBT0UsR0FBSSxFQUdKRixFQUFPRCxRQUtmRixFQUFvQlEsRUFBSUYsRUFHeEJOLEVBQW9CUyxFQUFJVixFQUd4QkMsRUFBb0JVLEVBQUksU0FBU1IsRUFBU1MsRUFBTUMsR0FDM0NaLEVBQW9CYSxFQUFFWCxFQUFTUyxJQUNsQ0csT0FBT0MsZUFBZWIsRUFBU1MsRUFBTSxDQUFFSyxZQUFZLEVBQU1DLElBQUtMLEtBS2hFWixFQUFvQmtCLEVBQUksU0FBU2hCLEdBQ1gsb0JBQVhpQixRQUEwQkEsT0FBT0MsYUFDMUNOLE9BQU9DLGVBQWViLEVBQVNpQixPQUFPQyxZQUFhLENBQUVDLE1BQU8sV0FFN0RQLE9BQU9DLGVBQWViLEVBQVMsYUFB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TUFBTXIwRSxFQUFVTCxLQUFLSyxRQUFRNEUsR0FFN0IsR0FBa0MsbUJBQXZCeXZFLEVBQW1DLENBQzFDLE1BQU1FLEVBQVd2MEUsRUFBUW9lLFVBQ3pCLElBQUssSUFBSTVnQixFQUFJLEVBQUcySixFQUFNb3RFLEVBQVN0dUUsT0FBUXpJLEVBQUkySixFQUFLM0osSUFDNUM2MkUsRUFBbUIsS0FBTUUsRUFBUy8yRSxHQUFHaVksTUFBTyxTQUFVLEtBQU0sRUFBRzlWLE1BSXZFSyxFQUFRb2UsVUFBWSxHQUNwQnBlLEVBQVFxZSxXQUFhLElBc0I3QixZQWxCd0IsSUFBYnplLElBQ0ZGLEVBQU8rQyxtQkFDUnZFLE9BQU9DLGVBQWV1QixFQUFRLG9CQUFxQixDQUMvQ3RCLFlBQVksRUFDWnNFLFVBQVUsRUFDVkMsY0FBYyxFQUNkbEUsTUFBTyxLQUlmUCxPQUFPQyxlQUFldUIsRUFBTytDLGtCQUFtQixjQUFlLENBQzNEckUsWUFBWSxFQUNac0UsVUFBVSxFQUNWQyxjQUFjLEVBQ2RsRSxNQUFPeWYsS0FJUkEsR0EzVHFELGlCQUFuQjNnQixFQUFPRCxRQUM1Q0MsRUFBT0QsUUFBVWtDLEVBQU9vRCxTQUNwQm5ELEVBQVFELEdBQVEsR0FDaEIsU0FBVXFELEdBQ04sSUFBS0EsRUFBRUQsU0FDSCxNQUFNLElBQUlFLE1BQU0sOENBRXBCLE9BQU9yRCxFQUFRb0QsSUFHdkJwRCxFQUFRRCIsImZpbGUiOiJzdW5lZGl0b3IubWluLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiWEpSMVwiKTtcbiIsIi8qXHJcbiAqIHd5c2l3eWcgd2ViIGVkaXRvclxyXG4gKlxyXG4gKiBzdW5lZGl0b3IuanNcclxuICogQ29weXJpZ2h0IDIwMTcgSmlIb25nIExlZS5cclxuICogTUlUIGxpY2Vuc2UuXHJcbiAqL1xyXG4ndXNlIHN0cmljdCc7XHJcblxyXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xyXG4gICAgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUuZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGdsb2JhbC5kb2N1bWVudCA/XHJcbiAgICAgICAgICAgIGZhY3RvcnkoZ2xvYmFsLCB0cnVlKSA6XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICh3KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXcuZG9jdW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NVTkVESVRPUl9NT0RVTEVTIGEgd2luZG93IHdpdGggYSBkb2N1bWVudCcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhY3Rvcnkodyk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZhY3RvcnkoZ2xvYmFsKTtcclxuICAgIH1cclxufSh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IHRoaXMsIGZ1bmN0aW9uICh3aW5kb3csIG5vR2xvYmFsKSB7XHJcbiAgICBjb25zdCBkaWFsb2cgPSB7XHJcbiAgICAgICAgbmFtZTogJ2RpYWxvZycsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIENvbnN0cnVjdG9yXHJcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNvcmUgQ29yZSBvYmplY3QgXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYWRkOiBmdW5jdGlvbiAoY29yZSkge1xyXG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0gY29yZS5jb250ZXh0O1xyXG4gICAgICAgICAgICBjb250ZXh0LmRpYWxvZyA9IHtcclxuICAgICAgICAgICAgICAgIGtpbmQ6ICcnLFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlTW9kYWw6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgX2Nsb3NlU2lnbmFsOiBmYWxzZVxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgLyoqIGRpYWxvZyAqL1xyXG4gICAgICAgICAgICBsZXQgZGlhbG9nX2RpdiA9IGNvcmUudXRpbC5jcmVhdGVFbGVtZW50KCdESVYnKTtcclxuICAgICAgICAgICAgZGlhbG9nX2Rpdi5jbGFzc05hbWUgPSAnc2UtZGlhbG9nIHN1bi1lZGl0b3ItY29tbW9uJztcclxuXHJcbiAgICAgICAgICAgIGxldCBkaWFsb2dfYmFjayA9IGNvcmUudXRpbC5jcmVhdGVFbGVtZW50KCdESVYnKTtcclxuICAgICAgICAgICAgZGlhbG9nX2JhY2suY2xhc3NOYW1lID0gJ3NlLWRpYWxvZy1iYWNrJztcclxuICAgICAgICAgICAgZGlhbG9nX2JhY2suc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuXHJcbiAgICAgICAgICAgIGxldCBkaWFsb2dfYXJlYSA9IGNvcmUudXRpbC5jcmVhdGVFbGVtZW50KCdESVYnKTtcclxuICAgICAgICAgICAgZGlhbG9nX2FyZWEuY2xhc3NOYW1lID0gJ3NlLWRpYWxvZy1pbm5lcic7XHJcbiAgICAgICAgICAgIGRpYWxvZ19hcmVhLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcblxyXG4gICAgICAgICAgICBkaWFsb2dfZGl2LmFwcGVuZENoaWxkKGRpYWxvZ19iYWNrKTtcclxuICAgICAgICAgICAgZGlhbG9nX2Rpdi5hcHBlbmRDaGlsZChkaWFsb2dfYXJlYSk7XHJcblxyXG4gICAgICAgICAgICBjb250ZXh0LmRpYWxvZy5tb2RhbEFyZWEgPSBkaWFsb2dfZGl2O1xyXG4gICAgICAgICAgICBjb250ZXh0LmRpYWxvZy5iYWNrID0gZGlhbG9nX2JhY2s7XHJcbiAgICAgICAgICAgIGNvbnRleHQuZGlhbG9nLm1vZGFsID0gZGlhbG9nX2FyZWE7XHJcblxyXG4gICAgICAgICAgICAvKiogYWRkIGV2ZW50IGxpc3RlbmVycyAqL1xyXG4gICAgICAgICAgICBjb250ZXh0LmRpYWxvZy5tb2RhbC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLl9vbk1vdXNlRG93bl9kaWFsb2cuYmluZChjb3JlKSk7XHJcbiAgICAgICAgICAgIGNvbnRleHQuZGlhbG9nLm1vZGFsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fb25DbGlja19kaWFsb2cuYmluZChjb3JlKSk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvKiogYXBwZW5kIGh0bWwgKi9cclxuICAgICAgICAgICAgY29udGV4dC5lbGVtZW50LnJlbGF0aXZlLmFwcGVuZENoaWxkKGRpYWxvZ19kaXYpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLyoqIGVtcHR5IG1lbW9yeSAqL1xyXG4gICAgICAgICAgICBkaWFsb2dfZGl2ID0gbnVsbCwgZGlhbG9nX2JhY2sgPSBudWxsLCBkaWFsb2dfYXJlYSA9IG51bGw7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEV2ZW50IHRvIGNvbnRyb2wgdGhlIGJlaGF2aW9yIG9mIGNsb3NpbmcgdGhlIGRpYWxvZ1xyXG4gICAgICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZSBFdmVudCBvYmplY3RcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9vbk1vdXNlRG93bl9kaWFsb2c6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGlmICgvc2UtZGlhbG9nLWlubmVyLy50ZXN0KGUudGFyZ2V0LmNsYXNzTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5kaWFsb2cuX2Nsb3NlU2lnbmFsID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5kaWFsb2cuX2Nsb3NlU2lnbmFsID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gRXZlbnQgdG8gY2xvc2UgdGhlIHdpbmRvdyB3aGVuIHRoZSBvdXRzaWRlIGFyZWEgb2YgdGhlIGRpYWxvZyBvciBjbG9zZSBidXR0b24gaXMgY2xpY2tcclxuICAgICAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGUgRXZlbnQgb2JqZWN0XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfb25DbGlja19kaWFsb2c6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGlmICgvY2xvc2UvLnRlc3QoZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLWNvbW1hbmQnKSkgfHwgdGhpcy5jb250ZXh0LmRpYWxvZy5fY2xvc2VTaWduYWwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy5kaWFsb2cuY2xvc2UuY2FsbCh0aGlzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBPcGVuIGEgRGlhbG9nIHBsdWdpblxyXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBraW5kIERpYWxvZyBwbHVnaW4gbmFtZVxyXG4gICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gdXBkYXRlIFdoZXRoZXIgaXQgd2lsbCBvcGVuIGZvciB1cGRhdGUgKCdpbWFnZScgPT09IHRoaXMuY3VycmVudENvbnRyb2xsZXJOYW1lKVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG9wZW46IGZ1bmN0aW9uIChraW5kLCB1cGRhdGUpICB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm1vZGFsRm9ybSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5wbHVnaW5zLmRpYWxvZy5fYmluZENsb3NlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9kLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLnBsdWdpbnMuZGlhbG9nLl9iaW5kQ2xvc2UpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmRpYWxvZy5fYmluZENsb3NlID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmRpYWxvZy5fYmluZENsb3NlID0gZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgIGlmICghLzI3Ly50ZXN0KGUua2V5Q29kZSkpIHJldHVybjtcclxuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy5kaWFsb2cuY2xvc2UuY2FsbCh0aGlzKTtcclxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpO1xyXG4gICAgICAgICAgICB0aGlzLl9kLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLnBsdWdpbnMuZGlhbG9nLl9iaW5kQ2xvc2UpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmRpYWxvZy51cGRhdGVNb2RhbCA9IHVwZGF0ZTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMucG9wdXBEaXNwbGF5ID09PSAnZnVsbCcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5kaWFsb2cubW9kYWxBcmVhLnN0eWxlLnBvc2l0aW9uID0gJ2ZpeGVkJztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5kaWFsb2cubW9kYWxBcmVhLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmRpYWxvZy5raW5kID0ga2luZDtcclxuICAgICAgICAgICAgdGhpcy5tb2RhbEZvcm0gPSB0aGlzLmNvbnRleHRba2luZF0ubW9kYWw7XHJcbiAgICAgICAgICAgIGNvbnN0IGZvY3VzRWxlbWVudCA9IHRoaXMuY29udGV4dFtraW5kXS5mb2N1c0VsZW1lbnQ7XHJcblxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMucGx1Z2luc1traW5kXS5vbiA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5wbHVnaW5zW2tpbmRdLm9uLmNhbGwodGhpcywgdXBkYXRlKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5kaWFsb2cubW9kYWxBcmVhLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZGlhbG9nLmJhY2suc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5kaWFsb2cubW9kYWwuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgIHRoaXMubW9kYWxGb3JtLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cclxuICAgICAgICAgICAgaWYgKGZvY3VzRWxlbWVudCkgZm9jdXNFbGVtZW50LmZvY3VzKCk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX2JpbmRDbG9zZTogbnVsbCxcclxuICAgICAgICBcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQ2xvc2UgYSBEaWFsb2cgcGx1Z2luXHJcbiAgICAgICAgICogVGhlIHBsdWdpbidzIFwiaW5pdFwiIG1ldGhvZCBpcyBjYWxsZWQuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY2xvc2U6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMucGx1Z2lucy5kaWFsb2cuX2JpbmRDbG9zZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5wbHVnaW5zLmRpYWxvZy5fYmluZENsb3NlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy5kaWFsb2cuX2JpbmRDbG9zZSA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGtpbmQgPSB0aGlzLmNvbnRleHQuZGlhbG9nLmtpbmQ7XHJcbiAgICAgICAgICAgIHRoaXMubW9kYWxGb3JtLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5kaWFsb2cuYmFjay5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZGlhbG9nLm1vZGFsQXJlYS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZGlhbG9nLnVwZGF0ZU1vZGFsID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5wbHVnaW5zW2tpbmRdLmluaXQgPT09ICdmdW5jdGlvbicpIHRoaXMucGx1Z2luc1traW5kXS5pbml0LmNhbGwodGhpcyk7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5kaWFsb2cua2luZCA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGFsRm9ybSA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGlmICh0eXBlb2Ygbm9HbG9iYWwgPT09IHR5cGVvZiB1bmRlZmluZWQpIHtcclxuICAgICAgICBpZiAoIXdpbmRvdy5TVU5FRElUT1JfTU9EVUxFUykge1xyXG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCAnU1VORURJVE9SX01PRFVMRVMnLCB7XHJcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHZhbHVlOiB7fVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1VORURJVE9SX01PRFVMRVMsICdkaWFsb2cnLCB7XHJcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXHJcbiAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgdmFsdWU6IGRpYWxvZ1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBkaWFsb2c7XHJcbn0pKTsiLCIvKlxyXG4gKiB3eXNpd3lnIHdlYiBlZGl0b3JcclxuICpcclxuICogc3VuZWRpdG9yLmpzXHJcbiAqIENvcHlyaWdodCAyMDE3IEppSG9uZyBMZWUuXHJcbiAqIE1JVCBsaWNlbnNlLlxyXG4gKi9cclxuJ3VzZSBzdHJpY3QnO1xyXG5cclxuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcclxuICAgIGlmICh0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlLmV4cG9ydHMgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBnbG9iYWwuZG9jdW1lbnQgP1xyXG4gICAgICAgICAgICBmYWN0b3J5KGdsb2JhbCwgdHJ1ZSkgOlxyXG4gICAgICAgICAgICBmdW5jdGlvbiAodykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF3LmRvY3VtZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTVU5FRElUT1JfTU9EVUxFUyBhIHdpbmRvdyB3aXRoIGEgZG9jdW1lbnQnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWN0b3J5KHcpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBmYWN0b3J5KGdsb2JhbCk7XHJcbiAgICB9XHJcbn0odHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiB0aGlzLCBmdW5jdGlvbiAod2luZG93LCBub0dsb2JhbCkge1xyXG4gICAgY29uc3QgZmlsZUJyb3dzZXIgPSB7XHJcbiAgICAgICAgbmFtZTogJ2ZpbGVCcm93c2VyJyxcclxuICAgICAgICBfeG1sSHR0cDogbnVsbCxcclxuICAgICAgICBfbG9hZGluZzogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIENvbnN0cnVjdG9yXHJcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNvcmUgQ29yZSBvYmplY3QgXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYWRkOiBmdW5jdGlvbiAoY29yZSkge1xyXG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0gY29yZS5jb250ZXh0O1xyXG4gICAgICAgICAgICBjb250ZXh0LmZpbGVCcm93c2VyID0ge1xyXG4gICAgICAgICAgICAgICAgX2Nsb3NlU2lnbmFsOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGFyZWE6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBoZWFkZXI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICB0YWdBcmVhOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgYm9keTogbnVsbCxcclxuICAgICAgICAgICAgICAgIGxpc3Q6IG51bGwsXHJcbiAgICAgICAgICAgICAgICB0YWdFbGVtZW50czogbnVsbCxcclxuICAgICAgICAgICAgICAgIGl0ZW1zOiBbXSxcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkVGFnczogW10sXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RvckhhbmRsZXI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBjb250ZXh0UGx1Z2luOiAnJyxcclxuICAgICAgICAgICAgICAgIGNvbHVtblNpemU6IDRcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIC8qKiBmaWxlQnJvd3NlciAqL1xyXG4gICAgICAgICAgICBsZXQgYnJvd3Nlcl9kaXYgPSBjb3JlLnV0aWwuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcbiAgICAgICAgICAgIGJyb3dzZXJfZGl2LmNsYXNzTmFtZSA9ICdzZS1maWxlLWJyb3dzZXIgc3VuLWVkaXRvci1jb21tb24nO1xyXG5cclxuICAgICAgICAgICAgbGV0IGJhY2sgPSBjb3JlLnV0aWwuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcbiAgICAgICAgICAgIGJhY2suY2xhc3NOYW1lID0gJ3NlLWZpbGUtYnJvd3Nlci1iYWNrJztcclxuXHJcbiAgICAgICAgICAgIGxldCBjb250ZW50ID0gY29yZS51dGlsLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xyXG4gICAgICAgICAgICBjb250ZW50LmNsYXNzTmFtZSA9ICdzZS1maWxlLWJyb3dzZXItaW5uZXInO1xyXG4gICAgICAgICAgICBjb250ZW50LmlubmVySFRNTCA9IHRoaXMuc2V0X2Jyb3dzZXIoY29yZSk7XHJcblxyXG4gICAgICAgICAgICBicm93c2VyX2Rpdi5hcHBlbmRDaGlsZChiYWNrKTtcclxuICAgICAgICAgICAgYnJvd3Nlcl9kaXYuYXBwZW5kQ2hpbGQoY29udGVudCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2xvYWRpbmcgPSBicm93c2VyX2Rpdi5xdWVyeVNlbGVjdG9yKCcuc2UtbG9hZGluZy1ib3gnKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnRleHQuZmlsZUJyb3dzZXIuYXJlYSA9IGJyb3dzZXJfZGl2O1xyXG4gICAgICAgICAgICBjb250ZXh0LmZpbGVCcm93c2VyLmhlYWRlciA9IGNvbnRlbnQucXVlcnlTZWxlY3RvcignLnNlLWZpbGUtYnJvd3Nlci1oZWFkZXInKTtcclxuICAgICAgICAgICAgY29udGV4dC5maWxlQnJvd3Nlci50aXRsZUFyZWEgPSBjb250ZW50LnF1ZXJ5U2VsZWN0b3IoJy5zZS1maWxlLWJyb3dzZXItdGl0bGUnKTtcclxuICAgICAgICAgICAgY29udGV4dC5maWxlQnJvd3Nlci50YWdBcmVhID0gY29udGVudC5xdWVyeVNlbGVjdG9yKCcuc2UtZmlsZS1icm93c2VyLXRhZ3MnKTtcclxuICAgICAgICAgICAgY29udGV4dC5maWxlQnJvd3Nlci5ib2R5ID0gY29udGVudC5xdWVyeVNlbGVjdG9yKCcuc2UtZmlsZS1icm93c2VyLWJvZHknKTtcclxuICAgICAgICAgICAgY29udGV4dC5maWxlQnJvd3Nlci5saXN0ID0gY29udGVudC5xdWVyeVNlbGVjdG9yKCcuc2UtZmlsZS1icm93c2VyLWxpc3QnKTtcclxuXHJcbiAgICAgICAgICAgIC8qKiBhZGQgZXZlbnQgbGlzdGVuZXJzICovXHJcbiAgICAgICAgICAgIGNvbnRleHQuZmlsZUJyb3dzZXIudGFnQXJlYS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMub25DbGlja1RhZy5iaW5kKGNvcmUpKTtcclxuICAgICAgICAgICAgY29udGV4dC5maWxlQnJvd3Nlci5saXN0LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbkNsaWNrRmlsZS5iaW5kKGNvcmUpKTtcclxuICAgICAgICAgICAgY29udGVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLl9vbk1vdXNlRG93bl9icm93c2VyLmJpbmQoY29yZSkpO1xyXG4gICAgICAgICAgICBjb250ZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fb25DbGlja19icm93c2VyLmJpbmQoY29yZSkpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLyoqIGFwcGVuZCBodG1sICovXHJcbiAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC5yZWxhdGl2ZS5hcHBlbmRDaGlsZChicm93c2VyX2Rpdik7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvKiogZW1wdHkgbWVtb3J5ICovXHJcbiAgICAgICAgICAgIGJyb3dzZXJfZGl2ID0gbnVsbCwgYmFjayA9IG51bGwsIGNvbnRlbnQgPSBudWxsO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldF9icm93c2VyOiBmdW5jdGlvbiAoY29yZSkge1xyXG4gICAgICAgICAgICBjb25zdCBsYW5nID0gY29yZS5sYW5nO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuICc8ZGl2IGNsYXNzPVwic2UtZmlsZS1icm93c2VyLWNvbnRlbnRcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWZpbGUtYnJvd3Nlci1oZWFkZXJcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtY29tbWFuZD1cImNsb3NlXCIgY2xhc3M9XCJzZS1idG4gc2UtZmlsZS1icm93c2VyLWNsb3NlXCIgY2xhc3M9XCJjbG9zZVwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIHRpdGxlPVwiJyArIGxhbmcuZGlhbG9nQm94LmNsb3NlICsgJ1wiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3JlLmljb25zLmNhbmNlbCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwic2UtZmlsZS1icm93c2VyLXRpdGxlXCI+PC9zcGFuPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWZpbGUtYnJvd3Nlci10YWdzXCI+PC9kaXY+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzwvZGl2PicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtZmlsZS1icm93c2VyLWJvZHlcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1sb2FkaW5nLWJveCBzdW4tZWRpdG9yLWNvbW1vblwiPjxkaXYgY2xhc3M9XCJzZS1sb2FkaW5nLWVmZmVjdFwiPjwvZGl2PjwvZGl2PicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWZpbGUtYnJvd3Nlci1saXN0XCI+PC9kaXY+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzwvZGl2PicgK1xyXG4gICAgICAgICAgICAgICAgJzwvZGl2Pic7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEV2ZW50IHRvIGNvbnRyb2wgdGhlIGJlaGF2aW9yIG9mIGNsb3NpbmcgdGhlIGJyb3dzZXJcclxuICAgICAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGUgRXZlbnQgb2JqZWN0XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfb25Nb3VzZURvd25fYnJvd3NlcjogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgaWYgKC9zZS1maWxlLWJyb3dzZXItaW5uZXIvLnRlc3QoZS50YXJnZXQuY2xhc3NOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGVCcm93c2VyLl9jbG9zZVNpZ25hbCA9IHRydWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsZUJyb3dzZXIuX2Nsb3NlU2lnbmFsID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gRXZlbnQgdG8gY2xvc2UgdGhlIHdpbmRvdyB3aGVuIHRoZSBvdXRzaWRlIGFyZWEgb2YgdGhlIGJyb3dzZXIgb3IgY2xvc2UgYnV0dG9uIGlzIGNsaWNrXHJcbiAgICAgICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBlIEV2ZW50IG9iamVjdFxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX29uQ2xpY2tfYnJvd3NlcjogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICAgICAgICAgIGlmICgvY2xvc2UvLnRlc3QoZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLWNvbW1hbmQnKSkgfHwgdGhpcy5jb250ZXh0LmZpbGVCcm93c2VyLl9jbG9zZVNpZ25hbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmZpbGVCcm93c2VyLmNsb3NlLmNhbGwodGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gT3BlbiBhIGZpbGUgYnJvd3NlciBwbHVnaW5cclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gcGx1Z2luTmFtZSBQbHVnaW4gbmFtZSB1c2luZyB0aGUgZmlsZSBicm93c2VyXHJcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbnxudWxsfSBzZWxlY3RvckhhbmRsZXIgV2hlbiB0aGUgZnVuY3Rpb24gY29tZXMgYXMgYW4gYXJndW1lbnQgdmFsdWUsIGl0IHN1YnN0aXR1dGVzIFwiY29udGV4dC5zZWxlY3RvckhhbmRsZXJcIi5cclxuICAgICAgICAgKi9cclxuICAgICAgICBvcGVuOiBmdW5jdGlvbiAocGx1Z2luTmFtZSwgc2VsZWN0b3JIYW5kbGVyKSAge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5wbHVnaW5zLmZpbGVCcm93c2VyLl9iaW5kQ2xvc2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2QucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMucGx1Z2lucy5maWxlQnJvd3Nlci5fYmluZENsb3NlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy5maWxlQnJvd3Nlci5fYmluZENsb3NlID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmZpbGVCcm93c2VyLl9iaW5kQ2xvc2UgPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCEvMjcvLnRlc3QoZS5rZXlDb2RlKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmZpbGVCcm93c2VyLmNsb3NlLmNhbGwodGhpcyk7XHJcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKTtcclxuICAgICAgICAgICAgdGhpcy5fZC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5wbHVnaW5zLmZpbGVCcm93c2VyLl9iaW5kQ2xvc2UpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZmlsZUJyb3dzZXJDb250ZXh0ID0gdGhpcy5jb250ZXh0LmZpbGVCcm93c2VyO1xyXG4gICAgICAgICAgICBmaWxlQnJvd3NlckNvbnRleHQuY29udGV4dFBsdWdpbiA9IHBsdWdpbk5hbWU7XHJcbiAgICAgICAgICAgIGZpbGVCcm93c2VyQ29udGV4dC5zZWxlY3RvckhhbmRsZXIgPSBzZWxlY3RvckhhbmRsZXI7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjb25zdCBwbHVnaW5Db250ZXh0ID0gdGhpcy5jb250ZXh0W3BsdWdpbk5hbWVdO1xyXG4gICAgICAgICAgICBjb25zdCBsaXN0Q2xhc3NOYW1lID0gcGx1Z2luQ29udGV4dC5saXN0Q2xhc3M7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy51dGlsLmhhc0NsYXNzKGZpbGVCcm93c2VyQ29udGV4dC5saXN0LCBsaXN0Q2xhc3NOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgZmlsZUJyb3dzZXJDb250ZXh0Lmxpc3QuY2xhc3NOYW1lID0gJ3NlLWZpbGUtYnJvd3Nlci1saXN0ICcgKyBsaXN0Q2xhc3NOYW1lO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnBvcHVwRGlzcGxheSA9PT0gJ2Z1bGwnKSB7XHJcbiAgICAgICAgICAgICAgICBmaWxlQnJvd3NlckNvbnRleHQuYXJlYS5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBmaWxlQnJvd3NlckNvbnRleHQuYXJlYS5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGZpbGVCcm93c2VyQ29udGV4dC50aXRsZUFyZWEudGV4dENvbnRlbnQgPSBwbHVnaW5Db250ZXh0LnRpdGxlO1xyXG4gICAgICAgICAgICBmaWxlQnJvd3NlckNvbnRleHQuYXJlYS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuXHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5maWxlQnJvd3Nlci5fZHJhd0ZpbGVMaXN0LmNhbGwodGhpcywgdGhpcy5jb250ZXh0W3BsdWdpbk5hbWVdLnVybCwgdGhpcy5jb250ZXh0W3BsdWdpbk5hbWVdLmhlYWRlcik7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX2JpbmRDbG9zZTogbnVsbCxcclxuICAgICAgICBcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQ2xvc2UgYSBmaWxlQnJvd3NlciBwbHVnaW5cclxuICAgICAgICAgKiBUaGUgcGx1Z2luJ3MgXCJpbml0XCIgbWV0aG9kIGlzIGNhbGxlZC5cclxuICAgICAgICAgKi9cclxuICAgICAgICBjbG9zZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBjb25zdCBmaWxlQnJvd3NlclBsdWdpbiA9IHRoaXMucGx1Z2lucy5maWxlQnJvd3NlcjtcclxuXHJcbiAgICAgICAgICAgIGlmIChmaWxlQnJvd3NlclBsdWdpbi5feG1sSHR0cCkge1xyXG4gICAgICAgICAgICAgICAgZmlsZUJyb3dzZXJQbHVnaW4uX3htbEh0dHAuYWJvcnQoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGZpbGVCcm93c2VyUGx1Z2luLl9iaW5kQ2xvc2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2QucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGZpbGVCcm93c2VyUGx1Z2luLl9iaW5kQ2xvc2UpO1xyXG4gICAgICAgICAgICAgICAgZmlsZUJyb3dzZXJQbHVnaW4uX2JpbmRDbG9zZSA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVCcm93c2VyQ29udGV4dCA9IHRoaXMuY29udGV4dC5maWxlQnJvd3NlcjtcclxuICAgICAgICAgICAgZmlsZUJyb3dzZXJDb250ZXh0LmFyZWEuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgZmlsZUJyb3dzZXJDb250ZXh0LnNlbGVjdG9ySGFuZGxlciA9IG51bGw7XHJcbiAgICAgICAgICAgIGZpbGVCcm93c2VyQ29udGV4dC5zZWxlY3RlZFRhZ3MgPSBbXTtcclxuICAgICAgICAgICAgZmlsZUJyb3dzZXJDb250ZXh0Lml0ZW1zID0gW107XHJcbiAgICAgICAgICAgIGZpbGVCcm93c2VyQ29udGV4dC5saXN0LmlubmVySFRNTCA9IGZpbGVCcm93c2VyQ29udGV4dC50YWdBcmVhLmlubmVySFRNTCA9IGZpbGVCcm93c2VyQ29udGV4dC50aXRsZUFyZWEudGV4dENvbnRlbnQgPSAnJztcclxuXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5wbHVnaW5zW2ZpbGVCcm93c2VyQ29udGV4dC5jb250ZXh0UGx1Z2luXS5pbml0ID09PSAnZnVuY3Rpb24nKSB0aGlzLnBsdWdpbnNbZmlsZUJyb3dzZXJDb250ZXh0LmNvbnRleHRQbHVnaW5dLmluaXQuY2FsbCh0aGlzKTtcclxuICAgICAgICAgICAgZmlsZUJyb3dzZXJDb250ZXh0LmNvbnRleHRQbHVnaW4gPSAnJztcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gU2hvdyBmaWxlIGJyb3dzZXIgbG9hZGluZyBib3hcclxuICAgICAgICAgKi9cclxuICAgICAgICBzaG93QnJvd3NlckxvYWRpbmc6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5fbG9hZGluZy5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQ2xvc2UgZmlsZSBicm93c2VyIGxvYWRpbmcgYm94XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY2xvc2VCcm93c2VyTG9hZGluZzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLl9sb2FkaW5nLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX2RyYXdGaWxlTGlzdDogZnVuY3Rpb24gKHVybCwgYnJvd3NlckhlYWRlcikge1xyXG4gICAgICAgICAgICBjb25zdCBmaWxlQnJvd3NlclBsdWdpbiA9IHRoaXMucGx1Z2lucy5maWxlQnJvd3NlcjtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHhtbEh0dHAgPSBmaWxlQnJvd3NlclBsdWdpbi5feG1sSHR0cCA9IHRoaXMudXRpbC5nZXRYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgICAgICAgICB4bWxIdHRwLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZpbGVCcm93c2VyUGx1Z2luLl9jYWxsQmFja0dldC5iaW5kKHRoaXMsIHhtbEh0dHApO1xyXG4gICAgICAgICAgICB4bWxIdHRwLm9wZW4oJ2dldCcsIHVybCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIGlmKGJyb3dzZXJIZWFkZXIgIT09IG51bGwgJiYgdHlwZW9mIGJyb3dzZXJIZWFkZXIgPT09ICdvYmplY3QnICYmIHRoaXMuX3cuT2JqZWN0LmtleXMoYnJvd3NlckhlYWRlcikubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgICAgICBmb3IobGV0IGtleSBpbiBicm93c2VySGVhZGVyKXtcclxuICAgICAgICAgICAgICAgICAgICB4bWxIdHRwLnNldFJlcXVlc3RIZWFkZXIoa2V5LCBicm93c2VySGVhZGVyW2tleV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHhtbEh0dHAuc2VuZChudWxsKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5maWxlQnJvd3Nlci5zaG93QnJvd3NlckxvYWRpbmcoKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBfY2FsbEJhY2tHZXQ6IGZ1bmN0aW9uICh4bWxIdHRwKSB7XHJcbiAgICAgICAgICAgIGlmICh4bWxIdHRwLnJlYWR5U3RhdGUgPT09IDQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy5maWxlQnJvd3Nlci5feG1sSHR0cCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBpZiAoeG1sSHR0cC5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy5maWxlQnJvd3Nlci5fZHJhd0xpc3RJdGVtLmNhbGwodGhpcywgSlNPTi5wYXJzZSh4bWxIdHRwLnJlc3BvbnNlVGV4dCkucmVzdWx0LCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCdbU1VORURJVE9SLmZpbGVCcm93c2VyLmRyYXdMaXN0LmZhaWxdIGNhdXNlIDogXCInICsgZS5tZXNzYWdlICsgJ1wiJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmZpbGVCcm93c2VyLmNsb3NlQnJvd3NlckxvYWRpbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGVCcm93c2VyLmJvZHkuc3R5bGUubWF4SGVpZ2h0ID0gKHRoaXMuX3cuaW5uZXJIZWlnaHQgLSB0aGlzLmNvbnRleHQuZmlsZUJyb3dzZXIuaGVhZGVyLm9mZnNldEhlaWdodCAtIDUwKSArICdweCc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHsgLy8gZXhjZXB0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmZpbGVCcm93c2VyLmNsb3NlQnJvd3NlckxvYWRpbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoeG1sSHR0cC5zdGF0dXMgIT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gIXhtbEh0dHAucmVzcG9uc2VUZXh0ID8geG1sSHR0cCA6IEpTT04ucGFyc2UoeG1sSHR0cC5yZXNwb25zZVRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnIgPSAnW1NVTkVESVRPUi5maWxlQnJvd3Nlci5nZXQuc2VydmVyRXhjZXB0aW9uXSBzdGF0dXM6ICcgKyB4bWxIdHRwLnN0YXR1cyArICcsIHJlc3BvbnNlOiAnICsgKHJlcy5lcnJvck1lc3NhZ2UgfHwgeG1sSHR0cC5yZXNwb25zZVRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9kcmF3TGlzdEl0ZW06IGZ1bmN0aW9uIChpdGVtcywgdXBkYXRlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVCcm93c2VyQ29udGV4dCA9IHRoaXMuY29udGV4dC5maWxlQnJvd3NlcjtcclxuICAgICAgICAgICAgY29uc3QgcGx1Z2luQ29udGV4dCA9IHRoaXMuY29udGV4dFtmaWxlQnJvd3NlckNvbnRleHQuY29udGV4dFBsdWdpbl07XHJcblxyXG4gICAgICAgICAgICBjb25zdCBfdGFncyA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBsZW4gPSBpdGVtcy5sZW5ndGg7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtblNpemUgPSBwbHVnaW5Db250ZXh0LmNvbHVtblNpemUgfHwgZmlsZUJyb3dzZXJDb250ZXh0LmNvbHVtblNpemU7XHJcbiAgICAgICAgICAgIGNvbnN0IHNwbGl0U2l6ZSA9IGNvbHVtblNpemUgPD0gMSA/IDEgOiAoTWF0aC5yb3VuZChsZW4vY29sdW1uU2l6ZSkgfHwgMSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRyYXdJdGVtSGFuZGxlciA9IHBsdWdpbkNvbnRleHQuaXRlbVRlbXBsYXRlSGFuZGxlcjtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGxldCB0YWdzSFRNTCA9ICcnO1xyXG4gICAgICAgICAgICBsZXQgbGlzdEhUTUwgPSAnPGRpdiBjbGFzcz1cInNlLWZpbGUtaXRlbS1jb2x1bW5cIj4nO1xyXG4gICAgICAgICAgICBsZXQgY29sdW1ucyA9IDE7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBpdGVtLCB0YWdzOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGl0ZW0gPSBpdGVtc1tpXTtcclxuICAgICAgICAgICAgICAgIHRhZ3MgPSAhaXRlbS50YWcgPyBbXSA6IHR5cGVvZiBpdGVtLnRhZyA9PT0gJ3N0cmluZycgPyBpdGVtLnRhZy5zcGxpdCgnLCcpIDogaXRlbS50YWc7XHJcbiAgICAgICAgICAgICAgICB0YWdzID0gaXRlbS50YWcgPSB0YWdzLm1hcChmdW5jdGlvbiAodikgeyByZXR1cm4gdi50cmltKCk7IH0pO1xyXG4gICAgICAgICAgICAgICAgbGlzdEhUTUwgKz0gZHJhd0l0ZW1IYW5kbGVyKGl0ZW0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICgoaSArIDEpICUgc3BsaXRTaXplID09PSAwICYmIGNvbHVtbnMgPCBjb2x1bW5TaXplICYmIChpICsgMSkgPCBsZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb2x1bW5zKys7XHJcbiAgICAgICAgICAgICAgICAgICAgbGlzdEhUTUwgKz0gJzwvZGl2PjxkaXYgY2xhc3M9XCJzZS1maWxlLWl0ZW0tY29sdW1uXCI+JztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgaWYgKHVwZGF0ZSAmJiB0YWdzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCB0ID0gMCwgdExlbiA9IHRhZ3MubGVuZ3RoLCB0YWc7IHQgPCB0TGVuOyB0KyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFnID0gdGFnc1t0XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhZyAmJiBfdGFncy5pbmRleE9mKHRhZykgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGFncy5wdXNoKHRhZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdzSFRNTCArPSAnPGEgdGl0bGU9XCInICsgdGFnICsgJ1wiPicgKyB0YWcgKyAnPC9hPic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGlzdEhUTUwgKz0gJzwvZGl2Pic7XHJcblxyXG4gICAgICAgICAgICBmaWxlQnJvd3NlckNvbnRleHQubGlzdC5pbm5lckhUTUwgPSBsaXN0SFRNTDtcclxuXHJcbiAgICAgICAgICAgIGlmICh1cGRhdGUpIHtcclxuICAgICAgICAgICAgICAgIGZpbGVCcm93c2VyQ29udGV4dC5pdGVtcyA9IGl0ZW1zO1xyXG4gICAgICAgICAgICAgICAgZmlsZUJyb3dzZXJDb250ZXh0LnRhZ0FyZWEuaW5uZXJIVE1MID0gdGFnc0hUTUw7XHJcbiAgICAgICAgICAgICAgICBmaWxlQnJvd3NlckNvbnRleHQudGFnRWxlbWVudHMgPSBmaWxlQnJvd3NlckNvbnRleHQudGFnQXJlYS5xdWVyeVNlbGVjdG9yQWxsKCdBJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBvbkNsaWNrVGFnOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldDtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnV0aWwuaXNBbmNob3IodGFyZ2V0KSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgdGFnTmFtZSA9IHRhcmdldC50ZXh0Q29udGVudDtcclxuICAgICAgICAgICAgY29uc3QgZmlsZUJyb3dzZXJQbHVnaW4gPSB0aGlzLnBsdWdpbnMuZmlsZUJyb3dzZXI7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVCcm93c2VyQ29udGV4dCA9IHRoaXMuY29udGV4dC5maWxlQnJvd3NlcjtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdFRhZyA9IGZpbGVCcm93c2VyQ29udGV4dC50YWdBcmVhLnF1ZXJ5U2VsZWN0b3IoJ2FbdGl0bGU9XCInICsgdGFnTmFtZSArICdcIl0nKTtcclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRUYWdzID0gZmlsZUJyb3dzZXJDb250ZXh0LnNlbGVjdGVkVGFncztcclxuICAgICAgICAgICAgY29uc3Qgc1RhZ0luZGV4ID0gc2VsZWN0ZWRUYWdzLmluZGV4T2YodGFnTmFtZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoc1RhZ0luZGV4ID4gLTEpe1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUYWdzLnNwbGljZShzVGFnSW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51dGlsLnJlbW92ZUNsYXNzKHNlbGVjdFRhZywgJ29uJyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRhZ3MucHVzaCh0YWdOYW1lKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudXRpbC5hZGRDbGFzcyhzZWxlY3RUYWcsICdvbicpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmaWxlQnJvd3NlclBsdWdpbi5fZHJhd0xpc3RJdGVtLmNhbGwodGhpcyxcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkVGFncy5sZW5ndGggPT09IDAgP1xyXG4gICAgICAgICAgICAgICAgZmlsZUJyb3dzZXJDb250ZXh0Lml0ZW1zIDpcclxuICAgICAgICAgICAgICAgIGZpbGVCcm93c2VyQ29udGV4dC5pdGVtcy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS50YWcuc29tZShmdW5jdGlvbiAodGFnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxlY3RlZFRhZ3MuaW5kZXhPZih0YWcpID4gLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KSwgZmFsc2UpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIG9uQ2xpY2tGaWxlOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmaWxlQnJvd3NlckNvbnRleHQgPSB0aGlzLmNvbnRleHQuZmlsZUJyb3dzZXI7XHJcbiAgICAgICAgICAgIGNvbnN0IGxpc3RFbCA9IGZpbGVCcm93c2VyQ29udGV4dC5saXN0O1xyXG4gICAgICAgICAgICBsZXQgdGFyZ2V0ID0gZS50YXJnZXQ7XHJcbiAgICAgICAgICAgIGxldCBjb21tYW5kID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgIGlmICh0YXJnZXQgPT09IGxpc3RFbCkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgd2hpbGUgKGxpc3RFbCAhPT0gdGFyZ2V0LnBhcmVudE5vZGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbW1hbmQgPSB0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLWNvbW1hbmQnKTtcclxuICAgICAgICAgICAgICAgIGlmIChjb21tYW5kKSBicmVhaztcclxuICAgICAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIWNvbW1hbmQpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSAoZmlsZUJyb3dzZXJDb250ZXh0LnNlbGVjdG9ySGFuZGxlciB8fCB0aGlzLmNvbnRleHRbZmlsZUJyb3dzZXJDb250ZXh0LmNvbnRleHRQbHVnaW5dLnNlbGVjdG9ySGFuZGxlcik7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5maWxlQnJvd3Nlci5jbG9zZS5jYWxsKHRoaXMpO1xyXG4gICAgICAgICAgICBoYW5kbGVyKHRhcmdldCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAodHlwZW9mIG5vR2xvYmFsID09PSB0eXBlb2YgdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKCF3aW5kb3cuU1VORURJVE9SX01PRFVMRVMpIHtcclxuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdywgJ1NVTkVESVRPUl9NT0RVTEVTJywge1xyXG4gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZToge31cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNVTkVESVRPUl9NT0RVTEVTLCAnZmlsZUJyb3dzZXInLCB7XHJcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXHJcbiAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgdmFsdWU6IGZpbGVCcm93c2VyXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZpbGVCcm93c2VyO1xyXG59KSk7IiwiLypcclxuICogd3lzaXd5ZyB3ZWIgZWRpdG9yXHJcbiAqXHJcbiAqIHN1bmVkaXRvci5qc1xyXG4gKiBDb3B5cmlnaHQgMjAxNyBKaUhvbmcgTGVlLlxyXG4gKiBNSVQgbGljZW5zZS5cclxuICovXHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XHJcbiAgICBpZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZS5leHBvcnRzID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsLmRvY3VtZW50ID9cclxuICAgICAgICAgICAgZmFjdG9yeShnbG9iYWwsIHRydWUpIDpcclxuICAgICAgICAgICAgZnVuY3Rpb24gKHcpIHtcclxuICAgICAgICAgICAgICAgIGlmICghdy5kb2N1bWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU1VORURJVE9SX0xBTkcgYSB3aW5kb3cgd2l0aCBhIGRvY3VtZW50Jyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFjdG9yeSh3KTtcclxuICAgICAgICAgICAgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZmFjdG9yeShnbG9iYWwpO1xyXG4gICAgfVxyXG59KHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogdGhpcywgZnVuY3Rpb24gKHdpbmRvdywgbm9HbG9iYWwpIHtcclxuICAgIGNvbnN0IGxhbmcgPSB7XHJcbiAgICAgICAgY29kZTogJ2VuJyxcclxuICAgICAgICB0b29sYmFyOiB7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6ICdEZWZhdWx0JyxcclxuICAgICAgICAgICAgc2F2ZTogJ1NhdmUnLFxyXG4gICAgICAgICAgICBmb250OiAnRm9udCcsXHJcbiAgICAgICAgICAgIGZvcm1hdHM6ICdGb3JtYXRzJyxcclxuICAgICAgICAgICAgZm9udFNpemU6ICdTaXplJyxcclxuICAgICAgICAgICAgYm9sZDogJ0JvbGQnLFxyXG4gICAgICAgICAgICB1bmRlcmxpbmU6ICdVbmRlcmxpbmUnLFxyXG4gICAgICAgICAgICBpdGFsaWM6ICdJdGFsaWMnLFxyXG4gICAgICAgICAgICBzdHJpa2U6ICdTdHJpa2UnLFxyXG4gICAgICAgICAgICBzdWJzY3JpcHQ6ICdTdWJzY3JpcHQnLFxyXG4gICAgICAgICAgICBzdXBlcnNjcmlwdDogJ1N1cGVyc2NyaXB0JyxcclxuICAgICAgICAgICAgcmVtb3ZlRm9ybWF0OiAnUmVtb3ZlIEZvcm1hdCcsXHJcbiAgICAgICAgICAgIGZvbnRDb2xvcjogJ0ZvbnQgQ29sb3InLFxyXG4gICAgICAgICAgICBoaWxpdGVDb2xvcjogJ0hpZ2hsaWdodCBDb2xvcicsXHJcbiAgICAgICAgICAgIGluZGVudDogJ0luZGVudCcsXHJcbiAgICAgICAgICAgIG91dGRlbnQ6ICdPdXRkZW50JyxcclxuICAgICAgICAgICAgYWxpZ246ICdBbGlnbicsXHJcbiAgICAgICAgICAgIGFsaWduTGVmdDogJ0FsaWduIGxlZnQnLFxyXG4gICAgICAgICAgICBhbGlnblJpZ2h0OiAnQWxpZ24gcmlnaHQnLFxyXG4gICAgICAgICAgICBhbGlnbkNlbnRlcjogJ0FsaWduIGNlbnRlcicsXHJcbiAgICAgICAgICAgIGFsaWduSnVzdGlmeTogJ0FsaWduIGp1c3RpZnknLFxyXG4gICAgICAgICAgICBsaXN0OiAnTGlzdCcsXHJcbiAgICAgICAgICAgIG9yZGVyTGlzdDogJ09yZGVyZWQgbGlzdCcsXHJcbiAgICAgICAgICAgIHVub3JkZXJMaXN0OiAnVW5vcmRlcmVkIGxpc3QnLFxyXG4gICAgICAgICAgICBob3Jpem9udGFsUnVsZTogJ0hvcml6b250YWwgbGluZScsXHJcbiAgICAgICAgICAgIGhyX3NvbGlkOiAnU29saWQnLFxyXG4gICAgICAgICAgICBocl9kb3R0ZWQ6ICdEb3R0ZWQnLFxyXG4gICAgICAgICAgICBocl9kYXNoZWQ6ICdEYXNoZWQnLFxyXG4gICAgICAgICAgICB0YWJsZTogJ1RhYmxlJyxcclxuICAgICAgICAgICAgbGluazogJ0xpbmsnLFxyXG4gICAgICAgICAgICBtYXRoOiAnTWF0aCcsXHJcbiAgICAgICAgICAgIGltYWdlOiAnSW1hZ2UnLFxyXG4gICAgICAgICAgICB2aWRlbzogJ1ZpZGVvJyxcclxuICAgICAgICAgICAgYXVkaW86ICdBdWRpbycsXHJcbiAgICAgICAgICAgIGZ1bGxTY3JlZW46ICdGdWxsIHNjcmVlbicsXHJcbiAgICAgICAgICAgIHNob3dCbG9ja3M6ICdTaG93IGJsb2NrcycsXHJcbiAgICAgICAgICAgIGNvZGVWaWV3OiAnQ29kZSB2aWV3JyxcclxuICAgICAgICAgICAgdW5kbzogJ1VuZG8nLFxyXG4gICAgICAgICAgICByZWRvOiAnUmVkbycsXHJcbiAgICAgICAgICAgIHByZXZpZXc6ICdQcmV2aWV3JyxcclxuICAgICAgICAgICAgcHJpbnQ6ICdwcmludCcsXHJcbiAgICAgICAgICAgIHRhZ19wOiAnUGFyYWdyYXBoJyxcclxuICAgICAgICAgICAgdGFnX2RpdjogJ05vcm1hbCAoRElWKScsXHJcbiAgICAgICAgICAgIHRhZ19oOiAnSGVhZGVyJyxcclxuICAgICAgICAgICAgdGFnX2Jsb2NrcXVvdGU6ICdRdW90ZScsXHJcbiAgICAgICAgICAgIHRhZ19wcmU6ICdDb2RlJyxcclxuICAgICAgICAgICAgdGVtcGxhdGU6ICdUZW1wbGF0ZScsXHJcbiAgICAgICAgICAgIGxpbmVIZWlnaHQ6ICdMaW5lIGhlaWdodCcsXHJcbiAgICAgICAgICAgIHBhcmFncmFwaFN0eWxlOiAnUGFyYWdyYXBoIHN0eWxlJyxcclxuICAgICAgICAgICAgdGV4dFN0eWxlOiAnVGV4dCBzdHlsZScsXHJcbiAgICAgICAgICAgIGltYWdlR2FsbGVyeTogJ0ltYWdlIGdhbGxlcnknLFxyXG4gICAgICAgICAgICBtZW50aW9uOiAnTWVudGlvbidcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRpYWxvZ0JveDoge1xyXG4gICAgICAgICAgICBsaW5rQm94OiB7XHJcbiAgICAgICAgICAgICAgICB0aXRsZTogJ0luc2VydCBMaW5rJyxcclxuICAgICAgICAgICAgICAgIHVybDogJ1VSTCB0byBsaW5rJyxcclxuICAgICAgICAgICAgICAgIHRleHQ6ICdUZXh0IHRvIGRpc3BsYXknLFxyXG4gICAgICAgICAgICAgICAgbmV3V2luZG93Q2hlY2s6ICdPcGVuIGluIG5ldyB3aW5kb3cnLFxyXG4gICAgICAgICAgICAgICAgZG93bmxvYWRMaW5rQ2hlY2s6ICdEb3dubG9hZCBsaW5rJyxcclxuICAgICAgICAgICAgICAgIGJvb2ttYXJrOiAnQm9va21hcmsnXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG1hdGhCb3g6IHtcclxuICAgICAgICAgICAgICAgIHRpdGxlOiAnTWF0aCcsXHJcbiAgICAgICAgICAgICAgICBpbnB1dExhYmVsOiAnTWF0aGVtYXRpY2FsIE5vdGF0aW9uJyxcclxuICAgICAgICAgICAgICAgIGZvbnRTaXplTGFiZWw6ICdGb250IFNpemUnLFxyXG4gICAgICAgICAgICAgICAgcHJldmlld0xhYmVsOiAnUHJldmlldydcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgaW1hZ2VCb3g6IHtcclxuICAgICAgICAgICAgICAgIHRpdGxlOiAnSW5zZXJ0IGltYWdlJyxcclxuICAgICAgICAgICAgICAgIGZpbGU6ICdTZWxlY3QgZnJvbSBmaWxlcycsXHJcbiAgICAgICAgICAgICAgICB1cmw6ICdJbWFnZSBVUkwnLFxyXG4gICAgICAgICAgICAgICAgYWx0VGV4dDogJ0FsdGVybmF0aXZlIHRleHQnXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHZpZGVvQm94OiB7XHJcbiAgICAgICAgICAgICAgICB0aXRsZTogJ0luc2VydCBWaWRlbycsXHJcbiAgICAgICAgICAgICAgICBmaWxlOiAnU2VsZWN0IGZyb20gZmlsZXMnLFxyXG4gICAgICAgICAgICAgICAgdXJsOiAnTWVkaWEgZW1iZWQgVVJMLCBZb3VUdWJlL1ZpbWVvJ1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBhdWRpb0JveDoge1xyXG4gICAgICAgICAgICAgICAgdGl0bGU6ICdJbnNlcnQgQXVkaW8nLFxyXG4gICAgICAgICAgICAgICAgZmlsZTogJ1NlbGVjdCBmcm9tIGZpbGVzJyxcclxuICAgICAgICAgICAgICAgIHVybDogJ0F1ZGlvIFVSTCdcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgYnJvd3Nlcjoge1xyXG4gICAgICAgICAgICAgICAgdGFnczogJ1RhZ3MnLFxyXG4gICAgICAgICAgICAgICAgc2VhcmNoOiAnU2VhcmNoJyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY2FwdGlvbjogJ0luc2VydCBkZXNjcmlwdGlvbicsXHJcbiAgICAgICAgICAgIGNsb3NlOiAnQ2xvc2UnLFxyXG4gICAgICAgICAgICBzdWJtaXRCdXR0b246ICdTdWJtaXQnLFxyXG4gICAgICAgICAgICByZXZlcnRCdXR0b246ICdSZXZlcnQnLFxyXG4gICAgICAgICAgICBwcm9wb3J0aW9uOiAnQ29uc3RyYWluIHByb3BvcnRpb25zJyxcclxuICAgICAgICAgICAgYmFzaWM6ICdCYXNpYycsXHJcbiAgICAgICAgICAgIGxlZnQ6ICdMZWZ0JyxcclxuICAgICAgICAgICAgcmlnaHQ6ICdSaWdodCcsXHJcbiAgICAgICAgICAgIGNlbnRlcjogJ0NlbnRlcicsXHJcbiAgICAgICAgICAgIHdpZHRoOiAnV2lkdGgnLFxyXG4gICAgICAgICAgICBoZWlnaHQ6ICdIZWlnaHQnLFxyXG4gICAgICAgICAgICBzaXplOiAnU2l6ZScsXHJcbiAgICAgICAgICAgIHJhdGlvOiAnUmF0aW8nXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb250cm9sbGVyOiB7XHJcbiAgICAgICAgICAgIGVkaXQ6ICdFZGl0JyxcclxuICAgICAgICAgICAgdW5saW5rOiAnVW5saW5rJyxcclxuICAgICAgICAgICAgcmVtb3ZlOiAnUmVtb3ZlJyxcclxuICAgICAgICAgICAgaW5zZXJ0Um93QWJvdmU6ICdJbnNlcnQgcm93IGFib3ZlJyxcclxuICAgICAgICAgICAgaW5zZXJ0Um93QmVsb3c6ICdJbnNlcnQgcm93IGJlbG93JyxcclxuICAgICAgICAgICAgZGVsZXRlUm93OiAnRGVsZXRlIHJvdycsXHJcbiAgICAgICAgICAgIGluc2VydENvbHVtbkJlZm9yZTogJ0luc2VydCBjb2x1bW4gYmVmb3JlJyxcclxuICAgICAgICAgICAgaW5zZXJ0Q29sdW1uQWZ0ZXI6ICdJbnNlcnQgY29sdW1uIGFmdGVyJyxcclxuICAgICAgICAgICAgZGVsZXRlQ29sdW1uOiAnRGVsZXRlIGNvbHVtbicsXHJcbiAgICAgICAgICAgIGZpeGVkQ29sdW1uV2lkdGg6ICdGaXhlZCBjb2x1bW4gd2lkdGgnLFxyXG4gICAgICAgICAgICByZXNpemUxMDA6ICdSZXNpemUgMTAwJScsXHJcbiAgICAgICAgICAgIHJlc2l6ZTc1OiAnUmVzaXplIDc1JScsXHJcbiAgICAgICAgICAgIHJlc2l6ZTUwOiAnUmVzaXplIDUwJScsXHJcbiAgICAgICAgICAgIHJlc2l6ZTI1OiAnUmVzaXplIDI1JScsXHJcbiAgICAgICAgICAgIGF1dG9TaXplOiAnQXV0byBzaXplJyxcclxuICAgICAgICAgICAgbWlycm9ySG9yaXpvbnRhbDogJ01pcnJvciwgSG9yaXpvbnRhbCcsXHJcbiAgICAgICAgICAgIG1pcnJvclZlcnRpY2FsOiAnTWlycm9yLCBWZXJ0aWNhbCcsXHJcbiAgICAgICAgICAgIHJvdGF0ZUxlZnQ6ICdSb3RhdGUgbGVmdCcsXHJcbiAgICAgICAgICAgIHJvdGF0ZVJpZ2h0OiAnUm90YXRlIHJpZ2h0JyxcclxuICAgICAgICAgICAgbWF4U2l6ZTogJ01heCBzaXplJyxcclxuICAgICAgICAgICAgbWluU2l6ZTogJ01pbiBzaXplJyxcclxuICAgICAgICAgICAgdGFibGVIZWFkZXI6ICdUYWJsZSBoZWFkZXInLFxyXG4gICAgICAgICAgICBtZXJnZUNlbGxzOiAnTWVyZ2UgY2VsbHMnLFxyXG4gICAgICAgICAgICBzcGxpdENlbGxzOiAnU3BsaXQgQ2VsbHMnLFxyXG4gICAgICAgICAgICBIb3Jpem9udGFsU3BsaXQ6ICdIb3Jpem9udGFsIHNwbGl0JyxcclxuICAgICAgICAgICAgVmVydGljYWxTcGxpdDogJ1ZlcnRpY2FsIHNwbGl0J1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbWVudToge1xyXG4gICAgICAgICAgICBzcGFjZWQ6ICdTcGFjZWQnLFxyXG4gICAgICAgICAgICBib3JkZXJlZDogJ0JvcmRlcmVkJyxcclxuICAgICAgICAgICAgbmVvbjogJ05lb24nLFxyXG4gICAgICAgICAgICB0cmFuc2x1Y2VudDogJ1RyYW5zbHVjZW50JyxcclxuICAgICAgICAgICAgc2hhZG93OiAnU2hhZG93JyxcclxuICAgICAgICAgICAgY29kZTogJ0NvZGUnXHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAodHlwZW9mIG5vR2xvYmFsID09PSB0eXBlb2YgdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKCF3aW5kb3cuU1VORURJVE9SX0xBTkcpIHtcclxuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdywgJ1NVTkVESVRPUl9MQU5HJywge1xyXG4gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZToge31cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNVTkVESVRPUl9MQU5HLCAnZW4nLCB7XHJcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXHJcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXHJcbiAgICAgICAgICAgIHZhbHVlOiBsYW5nXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxhbmc7XHJcbn0pKTsiLCIvKlxyXG4gKiB3eXNpd3lnIHdlYiBlZGl0b3JcclxuICpcclxuICogc3VuZWRpdG9yLmpzXHJcbiAqIENvcHlyaWdodCAyMDE4IEppSG9uZyBMZWUuXHJcbiAqIE1JVCBsaWNlbnNlLlxyXG4gKi9cclxuJ3VzZSBzdHJpY3QnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgbmFtZTogJ2NvbG9yUGlja2VyJyxcclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnN0cnVjdG9yXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gY29yZSBDb3JlIG9iamVjdCBcclxuICAgICAqL1xyXG4gICAgYWRkOiBmdW5jdGlvbiAoY29yZSkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBjb3JlLmNvbnRleHQ7XHJcbiAgICAgICAgY29udGV4dC5jb2xvclBpY2tlciA9IHtcclxuICAgICAgICAgICAgY29sb3JMaXN0SFRNTDogJycsXHJcbiAgICAgICAgICAgIF9jb2xvcklucHV0OiAnJyxcclxuICAgICAgICAgICAgX2RlZmF1bHRDb2xvcjogJyMwMDAnLFxyXG4gICAgICAgICAgICBfc3R5bGVQcm9wZXJ0eTogJ2NvbG9yJyxcclxuICAgICAgICAgICAgX2N1cnJlbnRDb2xvcjogJycsXHJcbiAgICAgICAgICAgIF9jb2xvckxpc3Q6IFtdXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLyoqIHNldCBzdWJtZW51ICovXHJcbiAgICAgICAgY29udGV4dC5jb2xvclBpY2tlci5jb2xvckxpc3RIVE1MID0gdGhpcy5jcmVhdGVDb2xvckxpc3QoY29yZSwgdGhpcy5fbWFrZUNvbG9yTGlzdCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENyZWF0ZSBjb2xvciBsaXN0XHJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gY29yZSBDb3JlIG9iamVjdCBcclxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IG1ha2VDb2xvciB0aGlzLl9tYWtlQ29sb3JMaXN0XHJcbiAgICAgKiBAcmV0dXJucyB7U3RyaW5nfSBIVE1MIHN0cmluZ1xyXG4gICAgICovXHJcbiAgICBjcmVhdGVDb2xvckxpc3Q6IGZ1bmN0aW9uIChjb3JlLCBtYWtlQ29sb3IpIHtcclxuICAgICAgICBjb25zdCBvcHRpb24gPSBjb3JlLm9wdGlvbnM7XHJcbiAgICAgICAgY29uc3QgbGFuZyA9IGNvcmUubGFuZztcclxuICAgICAgICBjb25zdCBjb2xvckxpc3QgPSAhb3B0aW9uLmNvbG9yTGlzdCB8fCBvcHRpb24uY29sb3JMaXN0Lmxlbmd0aCA9PT0gMCA/XHJcbiAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICAgICcjZmYwMDAwJywgJyNmZjVlMDAnLCAnI2ZmZTQwMCcsICcjYWJmMjAwJywgJyMwMGQ4ZmYnLCAnIzAwNTVmZicsICcjNjYwMGZmJywgJyNmZjAwZGQnLCAnIzAwMDAwMCcsXHJcbiAgICAgICAgICAgICAgICAnI2ZmZDhkOCcsICcjZmFlMGQ0JywgJyNmYWY0YzAnLCAnI2U0ZjdiYScsICcjZDRmNGZhJywgJyNkOWU1ZmYnLCAnI2U4ZDlmZicsICcjZmZkOWZhJywgJyNmMWYxZjEnLFxyXG4gICAgICAgICAgICAgICAgJyNmZmE3YTcnLCAnI2ZmYzE5ZScsICcjZmFlZDdkJywgJyNjZWYyNzknLCAnI2IyZWJmNCcsICcjYjJjY2ZmJywgJyNkMWIyZmYnLCAnI2ZmYjJmNScsICcjYmRiZGJkJyxcclxuICAgICAgICAgICAgICAgICcjZjE1ZjVmJywgJyNmMjk2NjEnLCAnI2U1ZDg1YycsICcjYmNlNTVjJywgJyM1Y2QxZTUnLCAnIzY2OTlmZicsICcjYTM2NmZmJywgJyNmMjYxZGYnLCAnIzhjOGM4YycsXHJcbiAgICAgICAgICAgICAgICAnIzk4MDAwMCcsICcjOTkzODAwJywgJyM5OThhMDAnLCAnIzZiOTkwMCcsICcjMDA4Mjk5JywgJyMwMDMzOTknLCAnIzNkMDA5OScsICcjOTkwMDg1JywgJyMzNTM1MzUnLFxyXG4gICAgICAgICAgICAgICAgJyM2NzAwMDAnLCAnIzY2MjUwMCcsICcjNjY1YzAwJywgJyM0NzY2MDAnLCAnIzAwNTc2NicsICcjMDAyMjY2JywgJyMyOTAwNjYnLCAnIzY2MDA1OCcsICcjMjIyMjIyJ1xyXG4gICAgICAgICAgICBdIDogb3B0aW9uLmNvbG9yTGlzdDtcclxuXHJcbiAgICAgICAgbGV0IGNvbG9yQXJyID0gW107XHJcbiAgICAgICAgbGV0IGxpc3QgPSAnPGRpdiBjbGFzcz1cInNlLWxpc3QtaW5uZXJcIj4nO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gY29sb3JMaXN0Lmxlbmd0aCwgY29sb3I7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY29sb3IgPSBjb2xvckxpc3RbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAoIWNvbG9yKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb2xvciA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb2xvckFyci5wdXNoKGNvbG9yKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IGxlbiAtIDEpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGNvbG9yQXJyLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBsaXN0ICs9ICc8ZGl2IGNsYXNzPVwic2Utc2VsZWN0b3ItY29sb3JcIj4nICsgbWFrZUNvbG9yKGNvbG9yQXJyKSArICc8L2Rpdj4nO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yQXJyID0gW107XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbG9yID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxpc3QgKz0gJzxkaXYgY2xhc3M9XCJzZS1zZWxlY3Rvci1jb2xvclwiPicgKyBtYWtlQ29sb3IoY29sb3IpICsgJzwvZGl2Pic7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGlzdCArPSAnJyArXHJcbiAgICAgICAgICAgICc8Zm9ybSBjbGFzcz1cInNlLWZvcm0tZ3JvdXBcIj4nICtcclxuICAgICAgICAgICAgICAgICc8aW5wdXQgdHlwZT1cInRleHRcIiBtYXhsZW5ndGg9XCI5XCIgY2xhc3M9XCJfc2VfY29sb3JfcGlja2VyX2lucHV0IHNlLWNvbG9yLWlucHV0XCIvPicgK1xyXG4gICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwic2UtYnRuLXByaW1hcnkgX3NlX2NvbG9yX3BpY2tlcl9zdWJtaXRcIiB0aXRsZT1cIicgKyBsYW5nLmRpYWxvZ0JveC5zdWJtaXRCdXR0b24gKyAnXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgY29yZS5pY29ucy5jaGVja2VkICtcclxuICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nICtcclxuICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInNlLWJ0biBfc2VfY29sb3JfcGlja2VyX3JlbW92ZVwiIHRpdGxlPVwiJyArIGxhbmcudG9vbGJhci5yZW1vdmVGb3JtYXQgKyAnXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgY29yZS5pY29ucy5lcmFzZSArXHJcbiAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXHJcbiAgICAgICAgICAgICc8L2Zvcm0+JyArXHJcbiAgICAgICAgICAgICc8L2Rpdj4nO1xyXG5cclxuICAgICAgICByZXR1cm4gbGlzdDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gSW50ZXJuYWwgZnVuY3Rpb24gdXNlZCBieSB0aGlzLmNyZWF0ZUNvbG9yTGlzdFxyXG4gICAgICogQHBhcmFtIHtBcnJheX0gY29sb3JMaXN0IENvbG9yIGxpc3RcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIF9tYWtlQ29sb3JMaXN0OiBmdW5jdGlvbiAoY29sb3JMaXN0KSB7XHJcbiAgICAgICAgbGV0IGxpc3QgPSAnJztcclxuXHJcbiAgICAgICAgbGlzdCArPSAnPHVsIGNsYXNzPVwic2UtY29sb3ItcGFsbGV0XCI+JztcclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gY29sb3JMaXN0Lmxlbmd0aCwgY29sb3I7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBjb2xvciA9IGNvbG9yTGlzdFtpXTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjb2xvciA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgIGxpc3QgKz0gJzxsaT4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLXZhbHVlPVwiJyArIGNvbG9yICsgJ1wiIHRpdGxlPVwiJyArIGNvbG9yICsgJ1wiIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjonICsgY29sb3IgKyAnO1wiPjwvYnV0dG9uPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnPC9saT4nO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxpc3QgKz0gJzwvdWw+JztcclxuXHJcbiAgICAgICAgcmV0dXJuIGxpc3Q7XHJcbiAgICB9LFxyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBEaXNwbGF5cyBvciByZXNldHMgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBjb2xvciBhdCBjb2xvciBsaXN0LlxyXG4gICAgICogQHBhcmFtIHtOb2RlfSBub2RlIEN1cnJlbnQgU2VsZWN0ZWQgbm9kZVxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd8bnVsbH0gY29sb3IgQ29sb3IgdmFsdWVcclxuICAgICAqL1xyXG4gICAgaW5pdDogZnVuY3Rpb24gKG5vZGUsIGNvbG9yKSB7XHJcbiAgICAgICAgY29uc3QgY29sb3JQaWNrZXIgPSB0aGlzLnBsdWdpbnMuY29sb3JQaWNrZXI7XHJcbiAgICAgICAgbGV0IGZpbGxDb2xvciA9IGNvbG9yID8gY29sb3IgOiBjb2xvclBpY2tlci5nZXRDb2xvckluTm9kZS5jYWxsKHRoaXMsIG5vZGUpIHx8IHRoaXMuY29udGV4dC5jb2xvclBpY2tlci5fZGVmYXVsdENvbG9yO1xyXG4gICAgICAgIGZpbGxDb2xvciA9IGNvbG9yUGlja2VyLmlzSGV4Q29sb3IoZmlsbENvbG9yKSA/IGZpbGxDb2xvciA6IGNvbG9yUGlja2VyLnJnYjJoZXgoZmlsbENvbG9yKSB8fCBmaWxsQ29sb3I7XHJcblxyXG4gICAgICAgIGNvbnN0IGNvbG9yTGlzdCA9IHRoaXMuY29udGV4dC5jb2xvclBpY2tlci5fY29sb3JMaXN0O1xyXG4gICAgICAgIGlmIChjb2xvckxpc3QpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGNvbG9yTGlzdC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGZpbGxDb2xvci50b0xvd2VyQ2FzZSgpID09PSBjb2xvckxpc3RbaV0uZ2V0QXR0cmlidXRlKCdkYXRhLXZhbHVlJykudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXRpbC5hZGRDbGFzcyhjb2xvckxpc3RbaV0sICdhY3RpdmUnKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51dGlsLnJlbW92ZUNsYXNzKGNvbG9yTGlzdFtpXSwgJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb2xvclBpY2tlci5zZXRJbnB1dFRleHQuY2FsbCh0aGlzLCBjb2xvclBpY2tlci5jb2xvck5hbWUyaGV4LmNhbGwodGhpcywgZmlsbENvbG9yKSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFN0b3JlIGNvbG9yIHZhbHVlc1xyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGhleENvbG9yU3RyIEhheCBjb2xvciB2YWx1ZVxyXG4gICAgICovXHJcbiAgICBzZXRDdXJyZW50Q29sb3I6IGZ1bmN0aW9uIChoZXhDb2xvclN0cikge1xyXG4gICAgICAgIHRoaXMuY29udGV4dC5jb2xvclBpY2tlci5fY3VycmVudENvbG9yID0gaGV4Q29sb3JTdHI7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0LmNvbG9yUGlja2VyLl9jb2xvcklucHV0LnN0eWxlLmJvcmRlckNvbG9yID0gaGV4Q29sb3JTdHI7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFNldCBjb2xvciBhdCBpbnB1dCBlbGVtZW50XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gaGV4Q29sb3JTdHIgSGF4IGNvbG9yIHZhbHVlXHJcbiAgICAgKi9cclxuICAgIHNldElucHV0VGV4dDogZnVuY3Rpb24gKGhleENvbG9yU3RyKSB7XHJcbiAgICAgICAgaGV4Q29sb3JTdHIgPSAvXiMvLnRlc3QoaGV4Q29sb3JTdHIpID8gaGV4Q29sb3JTdHIgOiAnIycgKyBoZXhDb2xvclN0cjtcclxuICAgICAgICB0aGlzLmNvbnRleHQuY29sb3JQaWNrZXIuX2NvbG9ySW5wdXQudmFsdWUgPSBoZXhDb2xvclN0cjtcclxuICAgICAgICB0aGlzLnBsdWdpbnMuY29sb3JQaWNrZXIuc2V0Q3VycmVudENvbG9yLmNhbGwodGhpcywgaGV4Q29sb3JTdHIpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBHZXRzIGNvbG9yIHZhbHVlIGF0IGNvbG9yIHByb3BlcnR5IG9mIG5vZGVcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gbm9kZSBTZWxlY3RlZCBub2RlIFxyXG4gICAgICogQHJldHVybnMge1N0cmluZ31cclxuICAgICAqL1xyXG4gICAgZ2V0Q29sb3JJbk5vZGU6IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICAgICAgbGV0IGZpbmRDb2xvciA9ICcnO1xyXG4gICAgICAgIGNvbnN0IHN0eWxlUHJvcGVydHkgPSB0aGlzLmNvbnRleHQuY29sb3JQaWNrZXIuX3N0eWxlUHJvcGVydHk7XHJcblxyXG4gICAgICAgIHdoaWxlIChub2RlICYmICF0aGlzLnV0aWwuaXNXeXNpd3lnRGl2KG5vZGUpICYmIGZpbmRDb2xvci5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IDEgJiYgbm9kZS5zdHlsZVtzdHlsZVByb3BlcnR5XSkgZmluZENvbG9yID0gbm9kZS5zdHlsZVtzdHlsZVByb3BlcnR5XTtcclxuICAgICAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmaW5kQ29sb3I7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEZ1bmN0aW9uIHRvIGNoZWNrIGhleCBmb3JtYXQgY29sb3JcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgQ29sb3IgdmFsdWVcclxuICAgICAqL1xyXG4gICAgaXNIZXhDb2xvcjogZnVuY3Rpb24gKHN0cikge1xyXG4gICAgICAgIHJldHVybiAvXiNbMC05YS1mXXszfSg/OlswLTlhLWZdezN9KT8kL2kudGVzdChzdHIpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBGdW5jdGlvbiB0byBjb252ZXJ0IGhleCBmb3JtYXQgdG8gYSByZ2IgY29sb3JcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSByZ2IgUkdCIGNvbG9yIGZvcm1hdFxyXG4gICAgICogQHJldHVybnMge1N0cmluZ31cclxuICAgICAqL1xyXG4gICAgcmdiMmhleDogZnVuY3Rpb24gKHJnYikge1xyXG4gICAgICAgIGNvbnN0IHJnYk1hdGNoID0gcmdiLm1hdGNoKC9ecmdiYT9bXFxzK10/XFwoW1xccytdPyhcXGQrKVtcXHMrXT8sW1xccytdPyhcXGQrKVtcXHMrXT8sW1xccytdPyhcXGQrKVtcXHMrXT8vaSk7XHJcblxyXG4gICAgICAgIHJldHVybiAocmdiTWF0Y2ggJiYgcmdiTWF0Y2gubGVuZ3RoID09PSA0KSA/IFwiI1wiICtcclxuICAgICAgICAgICAgKFwiMFwiICsgcGFyc2VJbnQocmdiTWF0Y2hbMV0sMTApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpICtcclxuICAgICAgICAgICAgKFwiMFwiICsgcGFyc2VJbnQocmdiTWF0Y2hbMl0sMTApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpICtcclxuICAgICAgICAgICAgKFwiMFwiICsgcGFyc2VJbnQocmdiTWF0Y2hbM10sMTApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpIDogJyc7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIGNvbG9yIHZhbHVlcyBvZiBvdGhlciBmb3JtYXRzIHRvIGhleCBjb2xvciB2YWx1ZXMgYW5kIHJldHVybnMuXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gY29sb3JOYW1lIENvbG9yIHZhbHVlXHJcbiAgICAgKiBAcmV0dXJucyB7U3RyaW5nfVxyXG4gICAgICovXHJcbiAgICBjb2xvck5hbWUyaGV4OiBmdW5jdGlvbiAoY29sb3JOYW1lKSB7XHJcbiAgICAgICAgaWYgKC9eIy8udGVzdChjb2xvck5hbWUpKSByZXR1cm4gY29sb3JOYW1lO1xyXG4gICAgICAgIHZhciB0ZW1wID0gdGhpcy51dGlsLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgIHRlbXAuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0ZW1wLnN0eWxlLmNvbG9yID0gY29sb3JOYW1lO1xyXG4gICAgICAgIHZhciBjb2xvcnMgPSB0aGlzLl93LmdldENvbXB1dGVkU3R5bGUodGhpcy5fZC5ib2R5LmFwcGVuZENoaWxkKHRlbXApKS5jb2xvci5tYXRjaCgvXFxkKy9nKS5tYXAoZnVuY3Rpb24gKGEpIHsgcmV0dXJuIHBhcnNlSW50KGEsMTApOyB9KTtcclxuICAgICAgICB0aGlzLnV0aWwucmVtb3ZlSXRlbSh0ZW1wKTtcclxuICAgICAgICByZXR1cm4gKGNvbG9ycy5sZW5ndGggPj0gMykgPyAnIycgKyAoKCgxIDw8IDI0KSArIChjb2xvcnNbMF0gPDwgMTYpICsgKGNvbG9yc1sxXSA8PCA4KSArIGNvbG9yc1syXSkudG9TdHJpbmcoMTYpLnN1YnN0cigxKSkgOiBmYWxzZTtcclxuICAgIH1cclxufTsiLCIvKlxyXG4gKiB3eXNpd3lnIHdlYiBlZGl0b3JcclxuICpcclxuICogc3VuZWRpdG9yLmpzXHJcbiAqIENvcHlyaWdodCAyMDE3IEppSG9uZyBMZWUuXHJcbiAqIE1JVCBsaWNlbnNlLlxyXG4gKi9cclxuJ3VzZSBzdHJpY3QnO1xyXG5cclxuaW1wb3J0IGNvbG9yUGlja2VyIGZyb20gJy4uL21vZHVsZXMvX2NvbG9yUGlja2VyJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIG5hbWU6ICdmb250Q29sb3InLFxyXG4gICAgZGlzcGxheTogJ3N1Ym1lbnUnLFxyXG4gICAgYWRkOiBmdW5jdGlvbiAoY29yZSwgdGFyZ2V0RWxlbWVudCkge1xyXG4gICAgICAgIGNvcmUuYWRkTW9kdWxlKFtjb2xvclBpY2tlcl0pO1xyXG5cclxuICAgICAgICBjb25zdCBjb250ZXh0ID0gY29yZS5jb250ZXh0O1xyXG4gICAgICAgIGNvbnRleHQuZm9udENvbG9yID0ge1xyXG4gICAgICAgICAgICBwcmV2aWV3RWw6IG51bGwsXHJcbiAgICAgICAgICAgIGNvbG9ySW5wdXQ6IG51bGwsXHJcbiAgICAgICAgICAgIGNvbG9yTGlzdDogbnVsbFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8qKiBzZXQgc3VibWVudSAqL1xyXG4gICAgICAgIGxldCBsaXN0RGl2ID0gdGhpcy5zZXRTdWJtZW51KGNvcmUpO1xyXG4gICAgICAgIGNvbnRleHQuZm9udENvbG9yLmNvbG9ySW5wdXQgPSBsaXN0RGl2LnF1ZXJ5U2VsZWN0b3IoJy5fc2VfY29sb3JfcGlja2VyX2lucHV0Jyk7XHJcblxyXG4gICAgICAgIC8qKiBhZGQgZXZlbnQgbGlzdGVuZXJzICovXHJcbiAgICAgICAgY29udGV4dC5mb250Q29sb3IuY29sb3JJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMub25DaGFuZ2VJbnB1dC5iaW5kKGNvcmUpKTtcclxuICAgICAgICBsaXN0RGl2LnF1ZXJ5U2VsZWN0b3IoJy5fc2VfY29sb3JfcGlja2VyX3N1Ym1pdCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5zdWJtaXQuYmluZChjb3JlKSk7XHJcbiAgICAgICAgbGlzdERpdi5xdWVyeVNlbGVjdG9yKCcuX3NlX2NvbG9yX3BpY2tlcl9yZW1vdmUnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMucmVtb3ZlLmJpbmQoY29yZSkpO1xyXG4gICAgICAgIGxpc3REaXYuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLnBpY2t1cC5iaW5kKGNvcmUpKTtcclxuICAgICAgICBjb250ZXh0LmZvbnRDb2xvci5jb2xvckxpc3QgPSBsaXN0RGl2LnF1ZXJ5U2VsZWN0b3JBbGwoJ2xpIGJ1dHRvbicpO1xyXG5cclxuICAgICAgICAvKiogYXBwZW5kIHRhcmdldCBidXR0b24gbWVudSAqL1xyXG4gICAgICAgIGNvcmUuaW5pdE1lbnVUYXJnZXQodGhpcy5uYW1lLCB0YXJnZXRFbGVtZW50LCBsaXN0RGl2KTtcclxuXHJcbiAgICAgICAgLyoqIGVtcHR5IG1lbW9yeSAqL1xyXG4gICAgICAgIGxpc3REaXYgPSBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdWJtZW51OiBmdW5jdGlvbiAoY29yZSkge1xyXG4gICAgICAgIGNvbnN0IGNvbG9yQXJlYSA9IGNvcmUuY29udGV4dC5jb2xvclBpY2tlci5jb2xvckxpc3RIVE1MO1xyXG4gICAgICAgIGNvbnN0IGxpc3REaXYgPSBjb3JlLnV0aWwuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcblxyXG4gICAgICAgIGxpc3REaXYuY2xhc3NOYW1lID0gJ3NlLXN1Ym1lbnUgc2UtbGlzdC1sYXllcic7XHJcbiAgICAgICAgbGlzdERpdi5pbm5lckhUTUwgPSBjb2xvckFyZWE7XHJcblxyXG4gICAgICAgIHJldHVybiBsaXN0RGl2O1xyXG4gICAgfSxcclxuXHJcbiAgICAgLyoqXHJcbiAgICAgKiBAT3ZlcnJpZGUgc3VibWVudVxyXG4gICAgICovXHJcbiAgICBvbjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHRQaWNrZXIgPSB0aGlzLmNvbnRleHQuY29sb3JQaWNrZXI7XHJcbiAgICAgICAgY29uc3QgY29udGV4dEZvbnRDb2xvciA9IHRoaXMuY29udGV4dC5mb250Q29sb3I7XHJcblxyXG4gICAgICAgIGNvbnRleHRQaWNrZXIuX2NvbG9ySW5wdXQgPSBjb250ZXh0Rm9udENvbG9yLmNvbG9ySW5wdXQ7XHJcbiAgICAgICAgY29uc3QgY29sb3IgPSB0aGlzLnd3Q29tcHV0ZWRTdHlsZS5jb2xvcjtcclxuICAgICAgICBjb250ZXh0UGlja2VyLl9kZWZhdWx0Q29sb3IgPSBjb2xvciA/IHRoaXMucGx1Z2lucy5jb2xvclBpY2tlci5pc0hleENvbG9yKGNvbG9yKSA/IGNvbG9yIDogdGhpcy5wbHVnaW5zLmNvbG9yUGlja2VyLnJnYjJoZXgoY29sb3IpIDogXCIjMzMzMzMzXCI7XHJcbiAgICAgICAgY29udGV4dFBpY2tlci5fc3R5bGVQcm9wZXJ0eSA9ICdjb2xvcic7XHJcbiAgICAgICAgY29udGV4dFBpY2tlci5fY29sb3JMaXN0ID0gY29udGV4dEZvbnRDb2xvci5jb2xvckxpc3Q7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLmNvbG9yUGlja2VyLmluaXQuY2FsbCh0aGlzLCB0aGlzLmdldFNlbGVjdGlvbk5vZGUoKSwgbnVsbCk7XHJcbiAgICB9LFxyXG5cclxuICAgICAvKipcclxuICAgICAqIEBPdmVycmlkZSBfY29sb3JQaWNrZXJcclxuICAgICAqL1xyXG4gICAgb25DaGFuZ2VJbnB1dDogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICB0aGlzLnBsdWdpbnMuY29sb3JQaWNrZXIuc2V0Q3VycmVudENvbG9yLmNhbGwodGhpcywgZS50YXJnZXQudmFsdWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICBzdWJtaXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLnBsdWdpbnMuZm9udENvbG9yLmFwcGx5Q29sb3IuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQuY29sb3JQaWNrZXIuX2N1cnJlbnRDb2xvcik7XHJcbiAgICB9LFxyXG5cclxuICAgIHBpY2t1cDogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLmZvbnRDb2xvci5hcHBseUNvbG9yLmNhbGwodGhpcywgZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXZhbHVlJykpO1xyXG4gICAgfSxcclxuXHJcbiAgICByZW1vdmU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLm5vZGVDaGFuZ2UobnVsbCwgWydjb2xvciddLCBbJ3NwYW4nXSwgdHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5zdWJtZW51T2ZmKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIGFwcGx5Q29sb3I6IGZ1bmN0aW9uIChjb2xvcikge1xyXG4gICAgICAgIGlmICghY29sb3IpIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3QgbmV3Tm9kZSA9IHRoaXMudXRpbC5jcmVhdGVFbGVtZW50KCdTUEFOJyk7XHJcbiAgICAgICAgbmV3Tm9kZS5zdHlsZS5jb2xvciA9IGNvbG9yO1xyXG4gICAgICAgIHRoaXMubm9kZUNoYW5nZShuZXdOb2RlLCBbJ2NvbG9yJ10sIG51bGwsIG51bGwpO1xyXG5cclxuICAgICAgICB0aGlzLnN1Ym1lbnVPZmYoKTtcclxuICAgIH1cclxufTtcclxuIiwiLypcclxuICogd3lzaXd5ZyB3ZWIgZWRpdG9yXHJcbiAqXHJcbiAqIHN1bmVkaXRvci5qc1xyXG4gKiBDb3B5cmlnaHQgMjAxNyBKaUhvbmcgTGVlLlxyXG4gKiBNSVQgbGljZW5zZS5cclxuICovXHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbmltcG9ydCBjb2xvclBpY2tlciBmcm9tICcuLi9tb2R1bGVzL19jb2xvclBpY2tlcic7XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgICBuYW1lOiAnaGlsaXRlQ29sb3InLFxyXG4gICAgZGlzcGxheTogJ3N1Ym1lbnUnLFxyXG4gICAgYWRkOiBmdW5jdGlvbiAoY29yZSwgdGFyZ2V0RWxlbWVudCkge1xyXG4gICAgICAgIGNvcmUuYWRkTW9kdWxlKFtjb2xvclBpY2tlcl0pO1xyXG5cclxuICAgICAgICBjb25zdCBjb250ZXh0ID0gY29yZS5jb250ZXh0O1xyXG4gICAgICAgIGNvbnRleHQuaGlsaXRlQ29sb3IgPSB7XHJcbiAgICAgICAgICAgIHByZXZpZXdFbDogbnVsbCxcclxuICAgICAgICAgICAgY29sb3JJbnB1dDogbnVsbCxcclxuICAgICAgICAgICAgY29sb3JMaXN0OiBudWxsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLyoqIHNldCBzdWJtZW51ICovXHJcbiAgICAgICAgbGV0IGxpc3REaXYgPSB0aGlzLnNldFN1Ym1lbnUoY29yZSk7XHJcbiAgICAgICAgY29udGV4dC5oaWxpdGVDb2xvci5jb2xvcklucHV0ID0gbGlzdERpdi5xdWVyeVNlbGVjdG9yKCcuX3NlX2NvbG9yX3BpY2tlcl9pbnB1dCcpO1xyXG5cclxuICAgICAgICAvKiogYWRkIGV2ZW50IGxpc3RlbmVycyAqL1xyXG4gICAgICAgIGNvbnRleHQuaGlsaXRlQ29sb3IuY29sb3JJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMub25DaGFuZ2VJbnB1dC5iaW5kKGNvcmUpKTtcclxuICAgICAgICBsaXN0RGl2LnF1ZXJ5U2VsZWN0b3IoJy5fc2VfY29sb3JfcGlja2VyX3N1Ym1pdCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5zdWJtaXQuYmluZChjb3JlKSk7XHJcbiAgICAgICAgbGlzdERpdi5xdWVyeVNlbGVjdG9yKCcuX3NlX2NvbG9yX3BpY2tlcl9yZW1vdmUnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMucmVtb3ZlLmJpbmQoY29yZSkpO1xyXG4gICAgICAgIGxpc3REaXYuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLnBpY2t1cC5iaW5kKGNvcmUpKTtcclxuXHJcbiAgICAgICAgY29udGV4dC5oaWxpdGVDb2xvci5jb2xvckxpc3QgPSBsaXN0RGl2LnF1ZXJ5U2VsZWN0b3JBbGwoJ2xpIGJ1dHRvbicpO1xyXG5cclxuICAgICAgICAvKiogYXBwZW5kIHRhcmdldCBidXR0b24gbWVudSAqL1xyXG4gICAgICAgIGNvcmUuaW5pdE1lbnVUYXJnZXQodGhpcy5uYW1lLCB0YXJnZXRFbGVtZW50LCBsaXN0RGl2KTtcclxuXHJcbiAgICAgICAgLyoqIGVtcHR5IG1lbW9yeSAqL1xyXG4gICAgICAgIGxpc3REaXYgPSBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdWJtZW51OiBmdW5jdGlvbiAoY29yZSkge1xyXG4gICAgICAgIGNvbnN0IGNvbG9yQXJlYSA9IGNvcmUuY29udGV4dC5jb2xvclBpY2tlci5jb2xvckxpc3RIVE1MO1xyXG4gICAgICAgIGNvbnN0IGxpc3REaXYgPSBjb3JlLnV0aWwuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcblxyXG4gICAgICAgIGxpc3REaXYuY2xhc3NOYW1lID0gJ3NlLXN1Ym1lbnUgc2UtbGlzdC1sYXllcic7XHJcbiAgICAgICAgbGlzdERpdi5pbm5lckhUTUwgPSBjb2xvckFyZWE7XHJcblxyXG4gICAgICAgIHJldHVybiBsaXN0RGl2O1xyXG4gICAgfSxcclxuXHJcbiAgICAgLyoqXHJcbiAgICAgKiBAT3ZlcnJpZGUgc3VibWVudVxyXG4gICAgICovXHJcbiAgICBvbjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHRQaWNrZXIgPSB0aGlzLmNvbnRleHQuY29sb3JQaWNrZXI7XHJcbiAgICAgICAgY29uc3QgY29udGV4dEhpbGl0ZUNvbG9yID0gdGhpcy5jb250ZXh0LmhpbGl0ZUNvbG9yO1xyXG5cclxuICAgICAgICBjb250ZXh0UGlja2VyLl9jb2xvcklucHV0ID0gY29udGV4dEhpbGl0ZUNvbG9yLmNvbG9ySW5wdXQ7XHJcbiAgICAgICAgY29uc3QgY29sb3IgPSB0aGlzLnd3Q29tcHV0ZWRTdHlsZS5iYWNrZ3JvdW5kQ29sb3I7XHJcbiAgICAgICAgY29udGV4dFBpY2tlci5fZGVmYXVsdENvbG9yID0gY29sb3IgPyB0aGlzLnBsdWdpbnMuY29sb3JQaWNrZXIuaXNIZXhDb2xvcihjb2xvcikgPyBjb2xvciA6IHRoaXMucGx1Z2lucy5jb2xvclBpY2tlci5yZ2IyaGV4KGNvbG9yKSA6IFwiI2ZmZmZmZlwiO1xyXG4gICAgICAgIGNvbnRleHRQaWNrZXIuX3N0eWxlUHJvcGVydHkgPSAnYmFja2dyb3VuZENvbG9yJztcclxuICAgICAgICBjb250ZXh0UGlja2VyLl9jb2xvckxpc3QgPSBjb250ZXh0SGlsaXRlQ29sb3IuY29sb3JMaXN0O1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMucGx1Z2lucy5jb2xvclBpY2tlci5pbml0LmNhbGwodGhpcywgdGhpcy5nZXRTZWxlY3Rpb25Ob2RlKCksIG51bGwpO1xyXG4gICAgfSxcclxuXHJcbiAgICAgLyoqXHJcbiAgICAgKiBAT3ZlcnJpZGUgX2NvbG9yUGlja2VyXHJcbiAgICAgKi9cclxuICAgIG9uQ2hhbmdlSW5wdXQ6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLmNvbG9yUGlja2VyLnNldEN1cnJlbnRDb2xvci5jYWxsKHRoaXMsIGUudGFyZ2V0LnZhbHVlKTtcclxuICAgIH0sXHJcblxyXG4gICAgc3VibWl0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLmhpbGl0ZUNvbG9yLmFwcGx5Q29sb3IuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQuY29sb3JQaWNrZXIuX2N1cnJlbnRDb2xvcik7XHJcbiAgICB9LFxyXG5cclxuICAgIHBpY2t1cDogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLmhpbGl0ZUNvbG9yLmFwcGx5Q29sb3IuY2FsbCh0aGlzLCBlLnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdmFsdWUnKSk7XHJcbiAgICB9LFxyXG5cclxuICAgIHJlbW92ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMubm9kZUNoYW5nZShudWxsLCBbJ2JhY2tncm91bmQtY29sb3InXSwgWydzcGFuJ10sIHRydWUpO1xyXG4gICAgICAgIHRoaXMuc3VibWVudU9mZigpO1xyXG4gICAgfSxcclxuXHJcbiAgICBhcHBseUNvbG9yOiBmdW5jdGlvbiAoY29sb3IpIHtcclxuICAgICAgICBpZiAoIWNvbG9yKSByZXR1cm47XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3QgbmV3Tm9kZSA9IHRoaXMudXRpbC5jcmVhdGVFbGVtZW50KCdTUEFOJyk7XHJcbiAgICAgICAgbmV3Tm9kZS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBjb2xvcjtcclxuICAgICAgICB0aGlzLm5vZGVDaGFuZ2UobmV3Tm9kZSwgWydiYWNrZ3JvdW5kLWNvbG9yJ10sIG51bGwsIG51bGwpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc3VibWVudU9mZigpO1xyXG4gICAgfVxyXG59O1xyXG4iLCIvKlxyXG4gKiB3eXNpd3lnIHdlYiBlZGl0b3JcclxuICpcclxuICogc3VuZWRpdG9yLmpzXHJcbiAqIENvcHlyaWdodCAyMDE3IEppSG9uZyBMZWUuXHJcbiAqIE1JVCBsaWNlbnNlLlxyXG4gKi9cclxuJ3VzZSBzdHJpY3QnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgbmFtZTogJ3RlbXBsYXRlJyxcclxuICAgIGRpc3BsYXk6ICdzdWJtZW51JyxcclxuICAgIGFkZDogZnVuY3Rpb24gKGNvcmUsIHRhcmdldEVsZW1lbnQpIHtcclxuICAgICAgICBjb25zdCBjb250ZXh0ID0gY29yZS5jb250ZXh0O1xyXG4gICAgICAgIGNvbnRleHQudGVtcGxhdGUgPSB7fTtcclxuXHJcbiAgICAgICAgLyoqIHNldCBzdWJtZW51ICovXHJcbiAgICAgICAgbGV0IHRlbXBsYXRlRGl2ID0gdGhpcy5zZXRTdWJtZW51KGNvcmUpO1xyXG5cclxuICAgICAgICAvKiogYWRkIGV2ZW50IGxpc3RlbmVycyAqL1xyXG4gICAgICAgIHRlbXBsYXRlRGl2LnF1ZXJ5U2VsZWN0b3IoJ3VsJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLnBpY2t1cC5iaW5kKGNvcmUpKTtcclxuXHJcbiAgICAgICAgLyoqIGFwcGVuZCB0YXJnZXQgYnV0dG9uIG1lbnUgKi9cclxuICAgICAgICBjb3JlLmluaXRNZW51VGFyZ2V0KHRoaXMubmFtZSwgdGFyZ2V0RWxlbWVudCwgdGVtcGxhdGVEaXYpO1xyXG5cclxuICAgICAgICAvKiogZW1wdHkgbWVtb3J5ICovXHJcbiAgICAgICAgdGVtcGxhdGVEaXYgPSBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdWJtZW51OiBmdW5jdGlvbiAoY29yZSkge1xyXG4gICAgICAgIGNvbnN0IHRlbXBsYXRlTGlzdCA9IGNvcmUub3B0aW9ucy50ZW1wbGF0ZXM7XHJcbiAgICAgICAgaWYgKCF0ZW1wbGF0ZUxpc3QgfHwgdGVtcGxhdGVMaXN0Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvcignW1NVTkVESVRPUi5wbHVnaW5zLnRlbXBsYXRlLmZhaWxdIFRvIHVzZSB0aGUgXCJ0ZW1wbGF0ZVwiIHBsdWdpbiwgcGxlYXNlIGRlZmluZSB0aGUgXCJ0ZW1wbGF0ZXNcIiBvcHRpb24uJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBsaXN0RGl2ID0gY29yZS51dGlsLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xyXG4gICAgICAgIGxpc3REaXYuY2xhc3NOYW1lID0gJ3NlLWxpc3QtbGF5ZXInO1xyXG5cclxuICAgICAgICBsZXQgbGlzdCA9ICc8ZGl2IGNsYXNzPVwic2Utc3VibWVudSBzZS1saXN0LWlubmVyXCI+JyArXHJcbiAgICAgICAgICAgICAgICAnPHVsIGNsYXNzPVwic2UtbGlzdC1iYXNpY1wiPic7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRlbXBsYXRlTGlzdC5sZW5ndGgsIHQ7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICB0ID0gdGVtcGxhdGVMaXN0W2ldO1xyXG4gICAgICAgICAgICBsaXN0ICs9ICc8bGk+PGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJzZS1idG4tbGlzdFwiIGRhdGEtdmFsdWU9XCInICsgaSArICdcIiB0aXRsZT1cIicgKyB0Lm5hbWUgKyAnXCI+JyArIHQubmFtZSArICc8L2J1dHRvbj48L2xpPic7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxpc3QgKz0gJzwvdWw+PC9kaXY+JztcclxuXHJcbiAgICAgICAgbGlzdERpdi5pbm5lckhUTUwgPSBsaXN0O1xyXG5cclxuICAgICAgICByZXR1cm4gbGlzdERpdjtcclxuICAgIH0sXHJcblxyXG4gICAgcGlja3VwOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgIGlmICghL15CVVRUT04kL2kudGVzdChlLnRhcmdldC50YWdOYW1lKSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICAgICAgY29uc3QgdGVtcCA9IHRoaXMub3B0aW9ucy50ZW1wbGF0ZXNbZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXZhbHVlJyldO1xyXG5cclxuICAgICAgICBpZiAodGVtcC5odG1sKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q29udGVudHModGVtcC5odG1sKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnN1Ym1lbnVPZmYoKTtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ1tTVU5FRElUT1IudGVtcGxhdGUuZmFpbF0gY2F1c2UgOiBcInRlbXBsYXRlc1tpXS5odG1sIG5vdCBmb3VuZFwiJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc3VibWVudU9mZigpO1xyXG4gICAgfVxyXG59OyIsIi8qXHJcbiAqIHd5c2l3eWcgd2ViIGVkaXRvclxyXG4gKlxyXG4gKiBzdW5lZGl0b3IuanNcclxuICogQ29weXJpZ2h0IDIwMTggSmlIb25nIExlZS5cclxuICogTUlUIGxpY2Vuc2UuXHJcbiAqL1xyXG4ndXNlIHN0cmljdCc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgICBuYW1lOiAnc2VsZWN0TWVudScsXHJcbiAgICBhZGQ6IGZ1bmN0aW9uIChjb3JlKSB7XHJcbiAgICAgICAgY29yZS5jb250ZXh0LnNlbGVjdE1lbnUgPSB7XHJcbiAgICAgICAgICAgIGNhbGxlcjoge30sXHJcbiAgICAgICAgICAgIGNhbGxlckNvbnRleHQ6IG51bGxcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXRGb3JtOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuICc8ZGl2IGNsYXNzPVwic2Utc2VsZWN0LWxpc3RcIj48L2Rpdj4nO1xyXG4gICAgfSxcclxuXHJcbiAgICBjcmVhdGVMaXN0OiBmdW5jdGlvbiAobGlzdENvbnRleHQsIGl0ZW1zLCBodG1sKSB7XHJcbiAgICAgICAgbGlzdENvbnRleHQuZm9ybS5pbm5lckhUTUwgPSAnPHVsPicgKyBodG1sICsgJzwvdWw+JztcclxuICAgICAgICBsaXN0Q29udGV4dC5pdGVtcyA9IGl0ZW1zO1xyXG4gICAgICAgIGxpc3RDb250ZXh0Lm1lbnVzID0gbGlzdENvbnRleHQuZm9ybS5xdWVyeVNlbGVjdG9yQWxsKCdsaScpO1xyXG4gICAgfSxcclxuXHJcbiAgICBpbml0RXZlbnQ6IGZ1bmN0aW9uIChwbHVnaW5OYW1lLCBmb3Jtcykge1xyXG4gICAgICAgIGNvbnN0IGZvcm0gPSBmb3Jtcy5xdWVyeVNlbGVjdG9yKCcuc2Utc2VsZWN0LWxpc3QnKTtcclxuICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5jb250ZXh0LnNlbGVjdE1lbnUuY2FsbGVyW3BsdWdpbk5hbWVdID0ge1xyXG4gICAgICAgICAgICBmb3JtOiBmb3JtLFxyXG4gICAgICAgICAgICBpdGVtczogW10sXHJcbiAgICAgICAgICAgIG1lbnVzOiBbXSxcclxuICAgICAgICAgICAgaW5kZXg6IC0xLFxyXG4gICAgICAgICAgICBpdGVtOiBudWxsLFxyXG4gICAgICAgICAgICBjbGlja01ldGhvZDogbnVsbCxcclxuICAgICAgICAgICAgY2FsbGVyTmFtZTogcGx1Z2luTmFtZVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGZvcm0uYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5wbHVnaW5zLnNlbGVjdE1lbnUub25Nb3VzZWRvd25fbGlzdCk7XHJcbiAgICAgICAgZm9ybS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLnBsdWdpbnMuc2VsZWN0TWVudS5vbk1vdXNlTW92ZV9saXN0LmJpbmQodGhpcywgY29udGV4dCkpO1xyXG4gICAgICAgIGZvcm0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLnBsdWdpbnMuc2VsZWN0TWVudS5vbkNsaWNrX2xpc3QuYmluZCh0aGlzLCBjb250ZXh0KSk7XHJcbiAgICB9LFxyXG5cclxuICAgIG9uTW91c2Vkb3duX2xpc3Q6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIG9uTW91c2VNb3ZlX2xpc3Q6IGZ1bmN0aW9uIChjb250ZXh0LCBlKSB7XHJcbiAgICAgICAgdGhpcy51dGlsLmFkZENsYXNzKGNvbnRleHQuZm9ybSwgJ19fc2Vfc2VsZWN0LW1lbnUtbW91c2UtbW92ZScpO1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLWluZGV4Jyk7XHJcbiAgICAgICAgaWYgKCFpbmRleCkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnRleHQuaW5kZXggPSBpbmRleCAqIDE7XHJcbiAgICB9LFxyXG5cclxuICAgIG9uQ2xpY2tfbGlzdDogZnVuY3Rpb24gKGNvbnRleHQsIGUpIHtcclxuICAgICAgICBjb25zdCBpbmRleCA9IGUudGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1pbmRleCcpO1xyXG4gICAgICAgIGlmICghaW5kZXgpIHJldHVybjtcclxuICAgICAgICBjb250ZXh0LmNsaWNrTWV0aG9kLmNhbGwodGhpcywgY29udGV4dC5pdGVtc1tpbmRleF0pO1xyXG4gICAgfSxcclxuXHJcbiAgICBtb3ZlSXRlbTogZnVuY3Rpb24gKGxpc3RDb250ZXh0LCBudW0pIHtcclxuICAgICAgICB0aGlzLnV0aWwucmVtb3ZlQ2xhc3MobGlzdENvbnRleHQuZm9ybSwgJ19fc2Vfc2VsZWN0LW1lbnUtbW91c2UtbW92ZScpO1xyXG4gICAgICAgIG51bSA9IGxpc3RDb250ZXh0LmluZGV4ICsgbnVtO1xyXG4gICAgICAgIGNvbnN0IG1lbnVzID0gbGlzdENvbnRleHQubWVudXM7XHJcbiAgICAgICAgY29uc3QgbGVuID0gbWVudXMubGVuZ3RoO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdEluZGV4ID0gbGlzdENvbnRleHQuaW5kZXggPSBudW0gPj0gbGVuID8gMCA6IG51bSA8IDAgPyBsZW4gLSAxIDogbnVtO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGkgPT09IHNlbGVjdEluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnV0aWwuYWRkQ2xhc3MobWVudXNbaV0sICdhY3RpdmUnKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXRpbC5yZW1vdmVDbGFzcyhtZW51c1tpXSwgJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsaXN0Q29udGV4dC5pdGVtID0gbGlzdENvbnRleHQuaXRlbXNbc2VsZWN0SW5kZXhdO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRJdGVtOiBmdW5jdGlvbiAobGlzdENvbnRleHQsIGluZGV4KSB7XHJcbiAgICAgICAgaW5kZXggPSAoIWluZGV4IHx8IGluZGV4IDwgMCkgPyBsaXN0Q29udGV4dC5pbmRleCA6IGluZGV4O1xyXG4gICAgICAgIHJldHVybiBsaXN0Q29udGV4dC5pdGVtc1tpbmRleF07XHJcbiAgICB9LFxyXG5cclxuICAgIG9uOiBmdW5jdGlvbiAoY2FsbGVyTmFtZSwgY2xpY2tNZXRob2QpIHtcclxuICAgICAgICBjb25zdCBsaXN0Q29udGV4dCA9IHRoaXMuY29udGV4dC5zZWxlY3RNZW51LmNhbGxlcltjYWxsZXJOYW1lXTtcclxuICAgICAgICB0aGlzLmNvbnRleHQuc2VsZWN0TWVudS5jYWxsZXJDb250ZXh0ID0gbGlzdENvbnRleHQ7XHJcbiAgICAgICAgbGlzdENvbnRleHQuY2xpY2tNZXRob2QgPSBjbGlja01ldGhvZDtcclxuICAgICAgICBsaXN0Q29udGV4dC5jYWxsZXJOYW1lID0gY2FsbGVyTmFtZTtcclxuICAgIH0sXHJcblxyXG4gICAgb3BlbjogZnVuY3Rpb24gKGxpc3RDb250ZXh0LCBwb3NpdGlvbkhhbmRsZXIpIHtcclxuICAgICAgICBjb25zdCBmb3JtID0gbGlzdENvbnRleHQuZm9ybTtcclxuICAgICAgICBmb3JtLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcclxuICAgICAgICBmb3JtLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgIHBvc2l0aW9uSGFuZGxlcihmb3JtKTtcclxuICAgICAgICBmb3JtLnN0eWxlLnZpc2liaWxpdHkgPSAnJztcclxuICAgIH0sXHJcblxyXG4gICAgY2xvc2U6IGZ1bmN0aW9uIChsaXN0Q29udGV4dCkge1xyXG4gICAgICAgIGxpc3RDb250ZXh0LmZvcm0uc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICBsaXN0Q29udGV4dC5pdGVtcyA9IFtdO1xyXG4gICAgICAgIGxpc3RDb250ZXh0Lm1lbnVzID0gW107XHJcbiAgICAgICAgbGlzdENvbnRleHQuaW5kZXggPSAtMTtcclxuICAgICAgICBsaXN0Q29udGV4dC5pdGVtID0gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgaW5pdDogZnVuY3Rpb24gKGxpc3RDb250ZXh0KSB7XHJcbiAgICAgICAgaWYgKCFsaXN0Q29udGV4dCkgcmV0dXJuO1xyXG4gICAgICAgIGxpc3RDb250ZXh0Lml0ZW1zID0gW107XHJcbiAgICAgICAgbGlzdENvbnRleHQubWVudXMgPSBbXTtcclxuICAgICAgICBsaXN0Q29udGV4dC5pbmRleCA9IC0xO1xyXG4gICAgICAgIGxpc3RDb250ZXh0Lml0ZW0gPSBudWxsO1xyXG4gICAgICAgIGxpc3RDb250ZXh0LmNhbGxlck5hbWUgPSAnJztcclxuICAgICAgICB0aGlzLmNvbnRleHQuc2VsZWN0TWVudS5jYWxsZXJDb250ZXh0ID0gbnVsbDtcclxuICAgIH1cclxufTsiLCIvKlxyXG4gKiB3eXNpd3lnIHdlYiBlZGl0b3JcclxuICpcclxuICogc3VuZWRpdG9yLmpzXHJcbiAqIENvcHlyaWdodCAyMDE3IEppSG9uZyBMZWUuXHJcbiAqIE1JVCBsaWNlbnNlLlxyXG4gKi9cclxuJ3VzZSBzdHJpY3QnO1xyXG5cclxuaW1wb3J0IHNlbGVjdE1lbnUgZnJvbSAnLi9fc2VsZWN0TWVudSc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgICBuYW1lOiAnYW5jaG9yJyxcclxuICAgIGFkZDogZnVuY3Rpb24gKGNvcmUpIHtcclxuICAgICAgICBjb3JlLmFkZE1vZHVsZShbc2VsZWN0TWVudV0pO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGNvcmUuY29udGV4dC5hbmNob3IgPSB7XHJcbiAgICAgICAgICAgIGNhbGxlcjoge30sXHJcbiAgICAgICAgICAgIGZvcm1zOiB0aGlzLnNldERpYWxvZ0Zvcm0oY29yZSksXHJcbiAgICAgICAgICAgIGhvc3Q6IChjb3JlLl93LmxvY2F0aW9uLm9yaWdpbiArIGNvcmUuX3cubG9jYXRpb24ucGF0aG5hbWUpLnJlcGxhY2UoL1xcLyQvLCAnJyksXHJcbiAgICAgICAgICAgIGNhbGxlckNvbnRleHQ6IG51bGxcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKiogZGlhbG9nICovXHJcbiAgICBzZXREaWFsb2dGb3JtOiBmdW5jdGlvbiAoY29yZSkge1xyXG4gICAgICAgIGNvbnN0IGxhbmcgPSBjb3JlLmxhbmc7XHJcbiAgICAgICAgY29uc3QgcmVsTGlzdCA9IGNvcmUub3B0aW9ucy5saW5rUmVsO1xyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRSZWwgPSAoY29yZS5vcHRpb25zLmxpbmtSZWxEZWZhdWx0LmRlZmF1bHQgfHwgJycpLnNwbGl0KCcgJyk7XHJcbiAgICAgICAgY29uc3QgaWNvbnMgPSBjb3JlLmljb25zO1xyXG4gICAgICAgIGNvbnN0IGZvcm1zID0gY29yZS51dGlsLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xyXG5cclxuICAgICAgICBsZXQgaHRtbCA9ICc8ZGl2IGNsYXNzPVwic2UtZGlhbG9nLWJvZHlcIj4nICtcclxuICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1kaWFsb2ctZm9ybVwiPicgK1xyXG4gICAgICAgICAgICAgICAgJzxsYWJlbD4nICsgbGFuZy5kaWFsb2dCb3gubGlua0JveC51cmwgKyAnPC9sYWJlbD4nICtcclxuICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtZGlhbG9nLWZvcm0tZmlsZXNcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPGlucHV0IGNsYXNzPVwic2UtaW5wdXQtZm9ybSBzZS1pbnB1dC11cmxcIiB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiJyArIChjb3JlLm9wdGlvbnMucHJvdG9jb2wgfHwgJycpICsgJ1wiIC8+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic2UtYnRuIHNlLWRpYWxvZy1maWxlcy1lZGdlLWJ1dHRvbiBfc2VfYm9va21hcmtfYnV0dG9uXCIgdGl0bGU9XCInICsgbGFuZy5kaWFsb2dCb3gubGlua0JveC5ib29rbWFyayArICdcIj4nICsgaWNvbnMuYm9va21hcmsgKyAnPC9idXR0b24+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgY29yZS5wbHVnaW5zLnNlbGVjdE1lbnUuc2V0Rm9ybSgpICtcclxuICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtYW5jaG9yLXByZXZpZXctZm9ybVwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInNlLXN2ZyBzZS1hbmNob3ItcHJldmlldy1pY29uIF9zZV9hbmNob3JfYm9va21hcmtfaWNvblwiPicgKyBpY29ucy5ib29rbWFyayArICc8L3NwYW4+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwic2Utc3ZnIHNlLWFuY2hvci1wcmV2aWV3LWljb24gX3NlX2FuY2hvcl9kb3dubG9hZF9pY29uXCI+JyArIGljb25zLmRvd25sb2FkICsgJzwvc3Bhbj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPHByZSBjbGFzcz1cInNlLWxpbmstcHJldmlld1wiPjwvcHJlPicgK1xyXG4gICAgICAgICAgICAgICAgJzwvZGl2PicgK1xyXG4gICAgICAgICAgICAnPC9kaXY+JyArXHJcbiAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtZGlhbG9nLWZvcm1cIj4nICtcclxuICAgICAgICAgICAgICAgICc8bGFiZWw+JyArIGxhbmcuZGlhbG9nQm94LmxpbmtCb3gudGV4dCArICc8L2xhYmVsPjxpbnB1dCBjbGFzcz1cInNlLWlucHV0LWZvcm0gX3NlX2FuY2hvcl90ZXh0XCIgdHlwZT1cInRleHRcIiAvPicgK1xyXG4gICAgICAgICAgICAnPC9kaXY+JyArXHJcbiAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtZGlhbG9nLWZvcm0tZm9vdGVyXCI+JyArXHJcbiAgICAgICAgICAgICAgICAnPGxhYmVsPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cInNlLWRpYWxvZy1idG4tY2hlY2sgX3NlX2FuY2hvcl9jaGVja1wiIC8+Jm5ic3A7JyArIGxhbmcuZGlhbG9nQm94LmxpbmtCb3gubmV3V2luZG93Q2hlY2sgKyAnPC9sYWJlbD4nICtcclxuICAgICAgICAgICAgICAgICc8bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwic2UtZGlhbG9nLWJ0bi1jaGVjayBfc2VfYW5jaG9yX2Rvd25sb2FkXCIgLz4mbmJzcDsnICsgbGFuZy5kaWFsb2dCb3gubGlua0JveC5kb3dubG9hZExpbmtDaGVjayArICc8L2xhYmVsPic7XHJcbiAgICAgICAgICAgIGlmIChyZWxMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9XCJzZS1hbmNob3ItcmVsXCI+PGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJzZS1idG4gc2UtYnRuLXNlbGVjdCBzZS1hbmNob3ItcmVsLWJ0blwiPiZsdDtyZWwmZ3Q7PC9idXR0b24+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1hbmNob3ItcmVsLXdyYXBwZXJcIj48cHJlIGNsYXNzPVwic2UtbGluay1wcmV2aWV3IHNlLWFuY2hvci1yZWwtcHJldmlld1wiPjwvcHJlPjwvZGl2PicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtbGlzdC1sYXllclwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWxpc3QtaW5uZXJcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8dWwgY2xhc3M9XCJzZS1saXN0LWJhc2ljIHNlLWxpc3QtY2hlY2tlZFwiPic7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gcmVsTGlzdC5sZW5ndGgsIHJlbDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVsID0gcmVsTGlzdFtpXTtcclxuICAgICAgICAgICAgICAgICAgICBodG1sICs9ICc8bGk+PGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJzZS1idG4tbGlzdCcgKyAoZGVmYXVsdFJlbC5pbmRleE9mKHJlbCkgPiAtMSA/ICcgc2UtY2hlY2tlZCcgOiAnJykgKyAnXCIgZGF0YS1jb21tYW5kPVwiJyArIHJlbCArICdcIiB0aXRsZT1cIicgKyByZWwgKyAnXCI+PHNwYW4gY2xhc3M9XCJzZS1zdmdcIj4nICsgaWNvbnMuY2hlY2tlZCArICc8L3NwYW4+JyArIHJlbCArICc8L2J1dHRvbj48L2xpPic7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBodG1sICs9ICc8L3VsPjwvZGl2PjwvZGl2PjwvZGl2Pic7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgaHRtbCArPSAnPC9kaXY+PC9kaXY+JztcclxuXHJcbiAgICAgICAgZm9ybXMuaW5uZXJIVE1MID0gaHRtbDtcclxuICAgICAgICByZXR1cm4gZm9ybXM7XHJcbiAgICB9LFxyXG5cclxuICAgIGluaXRFdmVudDogZnVuY3Rpb24gKHBsdWdpbk5hbWUsIGZvcm1zKSB7XHJcbiAgICAgICAgY29uc3QgYW5jaG9yUGx1Z2luID0gdGhpcy5wbHVnaW5zLmFuY2hvcjtcclxuICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5jb250ZXh0LmFuY2hvci5jYWxsZXJbcGx1Z2luTmFtZV0gPSB7XHJcbiAgICAgICAgICAgIG1vZGFsOiBmb3JtcyxcclxuICAgICAgICAgICAgdXJsSW5wdXQ6IG51bGwsXHJcbiAgICAgICAgICAgIGxpbmtEZWZhdWx0UmVsOiB0aGlzLm9wdGlvbnMubGlua1JlbERlZmF1bHQsXHJcbiAgICAgICAgICAgIGRlZmF1bHRSZWw6IHRoaXMub3B0aW9ucy5saW5rUmVsRGVmYXVsdC5kZWZhdWx0IHx8ICcnLFxyXG4gICAgICAgICAgICBjdXJyZW50UmVsOiBbXSxcclxuICAgICAgICAgICAgbGlua0FuY2hvcjogbnVsbCxcclxuICAgICAgICAgICAgbGlua1ZhbHVlOiAnJyxcclxuICAgICAgICAgICAgX2NoYW5nZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGNhbGxlck5hbWU6IHBsdWdpbk5hbWVcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIGNvbnRleHQubGlua0RlZmF1bHRSZWwuZGVmYXVsdCA9PT0gJ3N0cmluZycpIGNvbnRleHQubGlua0RlZmF1bHRSZWwuZGVmYXVsdCA9IGNvbnRleHQubGlua0RlZmF1bHRSZWwuZGVmYXVsdC50cmltKCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBjb250ZXh0LmxpbmtEZWZhdWx0UmVsLmNoZWNrX25ld193aW5kb3cgPT09ICdzdHJpbmcnKSBjb250ZXh0LmxpbmtEZWZhdWx0UmVsLmNoZWNrX25ld193aW5kb3cgPSBjb250ZXh0LmxpbmtEZWZhdWx0UmVsLmNoZWNrX25ld193aW5kb3cudHJpbSgpO1xyXG4gICAgICAgIGlmICh0eXBlb2YgY29udGV4dC5saW5rRGVmYXVsdFJlbC5jaGVja19ib29rbWFyayA9PT0gJ3N0cmluZycpIGNvbnRleHQubGlua0RlZmF1bHRSZWwuY2hlY2tfYm9va21hcmsgPSBjb250ZXh0LmxpbmtEZWZhdWx0UmVsLmNoZWNrX2Jvb2ttYXJrLnRyaW0oKTtcclxuXHJcbiAgICAgICAgY29udGV4dC51cmxJbnB1dCA9IGZvcm1zLnF1ZXJ5U2VsZWN0b3IoJy5zZS1pbnB1dC11cmwnKTtcclxuICAgICAgICBjb250ZXh0LmFuY2hvclRleHQgPSBmb3Jtcy5xdWVyeVNlbGVjdG9yKCcuX3NlX2FuY2hvcl90ZXh0Jyk7XHJcbiAgICAgICAgY29udGV4dC5uZXdXaW5kb3dDaGVjayA9IGZvcm1zLnF1ZXJ5U2VsZWN0b3IoJy5fc2VfYW5jaG9yX2NoZWNrJyk7XHJcbiAgICAgICAgY29udGV4dC5kb3dubG9hZENoZWNrID0gZm9ybXMucXVlcnlTZWxlY3RvcignLl9zZV9hbmNob3JfZG93bmxvYWQnKTtcclxuICAgICAgICBjb250ZXh0LmRvd25sb2FkID0gZm9ybXMucXVlcnlTZWxlY3RvcignLl9zZV9hbmNob3JfZG93bmxvYWRfaWNvbicpO1xyXG4gICAgICAgIGNvbnRleHQucHJldmlldyA9IGZvcm1zLnF1ZXJ5U2VsZWN0b3IoJy5zZS1saW5rLXByZXZpZXcnKTtcclxuICAgICAgICBjb250ZXh0LmJvb2ttYXJrID0gZm9ybXMucXVlcnlTZWxlY3RvcignLl9zZV9hbmNob3JfYm9va21hcmtfaWNvbicpO1xyXG4gICAgICAgIGNvbnRleHQuYm9va21hcmtCdXR0b24gPSBmb3Jtcy5xdWVyeVNlbGVjdG9yKCcuX3NlX2Jvb2ttYXJrX2J1dHRvbicpO1xyXG5cclxuICAgICAgICB0aGlzLnBsdWdpbnMuc2VsZWN0TWVudS5pbml0RXZlbnQuY2FsbCh0aGlzLCBwbHVnaW5OYW1lLCBmb3Jtcyk7XHJcbiAgICAgICAgY29uc3QgbGlzdENvbnRleHQgPSB0aGlzLmNvbnRleHQuc2VsZWN0TWVudS5jYWxsZXJbcGx1Z2luTmFtZV07XHJcbiAgICAgICAgXHJcbiAgICAgICAgLyoqIHJlbCAqL1xyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubGlua1JlbC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnRleHQucmVsQnV0dG9uID0gZm9ybXMucXVlcnlTZWxlY3RvcignLnNlLWFuY2hvci1yZWwtYnRuJyk7XHJcbiAgICAgICAgICAgIGNvbnRleHQucmVsTGlzdCA9IGZvcm1zLnF1ZXJ5U2VsZWN0b3IoJy5zZS1saXN0LWxheWVyJyk7XHJcbiAgICAgICAgICAgIGNvbnRleHQucmVsUHJldmlldyA9IGZvcm1zLnF1ZXJ5U2VsZWN0b3IoJy5zZS1hbmNob3ItcmVsLXByZXZpZXcnKTtcclxuICAgICAgICAgICAgY29udGV4dC5yZWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhbmNob3JQbHVnaW4ub25DbGlja19yZWxCdXR0b24uYmluZCh0aGlzLCBjb250ZXh0KSk7XHJcbiAgICAgICAgICAgIGNvbnRleHQucmVsTGlzdC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGFuY2hvclBsdWdpbi5vbkNsaWNrX3JlbExpc3QuYmluZCh0aGlzLCBjb250ZXh0KSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb250ZXh0Lm5ld1dpbmRvd0NoZWNrLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGFuY2hvclBsdWdpbi5vbkNoYW5nZV9uZXdXaW5kb3dDaGVjay5iaW5kKHRoaXMsIGNvbnRleHQpKTtcclxuICAgICAgICBjb250ZXh0LmRvd25sb2FkQ2hlY2suYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgYW5jaG9yUGx1Z2luLm9uQ2hhbmdlX2Rvd25sb2FkQ2hlY2suYmluZCh0aGlzLCBjb250ZXh0KSk7XHJcbiAgICAgICAgY29udGV4dC5hbmNob3JUZXh0LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgYW5jaG9yUGx1Z2luLm9uQ2hhbmdlQW5jaG9yVGV4dC5iaW5kKHRoaXMsIGNvbnRleHQpKTtcclxuICAgICAgICBjb250ZXh0LnVybElucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgYW5jaG9yUGx1Z2luLm9uQ2hhbmdlVXJsSW5wdXQuYmluZCh0aGlzLCBjb250ZXh0KSk7XHJcbiAgICAgICAgY29udGV4dC51cmxJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgYW5jaG9yUGx1Z2luLm9uS2V5RG93blVybElucHV0LmJpbmQodGhpcywgbGlzdENvbnRleHQpKTtcclxuICAgICAgICBjb250ZXh0LnVybElucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgYW5jaG9yUGx1Z2luLm9uRm9jdXNVcmxJbnB1dC5iaW5kKHRoaXMsIGNvbnRleHQsIGxpc3RDb250ZXh0KSk7XHJcbiAgICAgICAgY29udGV4dC51cmxJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgYW5jaG9yUGx1Z2luLm9uQmx1clVybElucHV0LmJpbmQodGhpcywgbGlzdENvbnRleHQpKTtcclxuICAgICAgICBjb250ZXh0LmJvb2ttYXJrQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYW5jaG9yUGx1Z2luLm9uQ2xpY2tfYm9va21hcmtCdXR0b24uYmluZCh0aGlzLCBjb250ZXh0KSk7XHJcbiAgICB9LFxyXG5cclxuICAgIG9uOiBmdW5jdGlvbiAoY29udGV4dEFuY2hvciwgdXBkYXRlKSB7XHJcbiAgICAgICAgaWYgKCF1cGRhdGUpIHtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmFuY2hvci5pbml0LmNhbGwodGhpcywgY29udGV4dEFuY2hvcik7XHJcbiAgICAgICAgICAgIGNvbnRleHRBbmNob3IuYW5jaG9yVGV4dC52YWx1ZSA9IHRoaXMuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHRBbmNob3IubGlua0FuY2hvcikge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZGlhbG9nLnVwZGF0ZU1vZGFsID0gdHJ1ZTtcclxuICAgICAgICAgICAgY29uc3QgaHJlZiA9IGNvbnRleHRBbmNob3IubGlua0FuY2hvci5ocmVmO1xyXG4gICAgICAgICAgICBjb250ZXh0QW5jaG9yLmxpbmtWYWx1ZSA9IGNvbnRleHRBbmNob3IucHJldmlldy50ZXh0Q29udGVudCA9IGNvbnRleHRBbmNob3IudXJsSW5wdXQudmFsdWUgPSAvXFwjLiskLy50ZXN0KGhyZWYpID8gaHJlZi5zdWJzdHIoaHJlZi5sYXN0SW5kZXhPZignIycpKSA6IGhyZWY7XHJcbiAgICAgICAgICAgIGNvbnRleHRBbmNob3IuYW5jaG9yVGV4dC52YWx1ZSA9IGNvbnRleHRBbmNob3IubGlua0FuY2hvci50ZXh0Q29udGVudC50cmltKCkgfHwgY29udGV4dEFuY2hvci5saW5rQW5jaG9yLmdldEF0dHJpYnV0ZSgnYWx0Jyk7XHJcbiAgICAgICAgICAgIGNvbnRleHRBbmNob3IubmV3V2luZG93Q2hlY2suY2hlY2tlZCA9ICgvX2JsYW5rL2kudGVzdChjb250ZXh0QW5jaG9yLmxpbmtBbmNob3IudGFyZ2V0KSA/IHRydWUgOiBmYWxzZSk7XHJcbiAgICAgICAgICAgIGNvbnRleHRBbmNob3IuZG93bmxvYWRDaGVjay5jaGVja2VkID0gY29udGV4dEFuY2hvci5saW5rQW5jaG9yLmRvd25sb2FkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jb250ZXh0LmFuY2hvci5jYWxsZXJDb250ZXh0ID0gY29udGV4dEFuY2hvcjtcclxuICAgICAgICB0aGlzLnBsdWdpbnMuYW5jaG9yLnNldFJlbC5jYWxsKHRoaXMsIGNvbnRleHRBbmNob3IsICh1cGRhdGUgJiYgY29udGV4dEFuY2hvci5saW5rQW5jaG9yKSA/IGNvbnRleHRBbmNob3IubGlua0FuY2hvci5yZWwgOiBjb250ZXh0QW5jaG9yLmRlZmF1bHRSZWwpO1xyXG4gICAgICAgIHRoaXMucGx1Z2lucy5hbmNob3Iuc2V0TGlua1ByZXZpZXcuY2FsbCh0aGlzLCBjb250ZXh0QW5jaG9yLCBjb250ZXh0QW5jaG9yLmxpbmtWYWx1ZSk7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLnNlbGVjdE1lbnUub24uY2FsbCh0aGlzLCBjb250ZXh0QW5jaG9yLmNhbGxlck5hbWUsIHRoaXMucGx1Z2lucy5hbmNob3Iuc2V0SGVhZGVyQm9va21hcmspO1xyXG4gICAgfSxcclxuXHJcbiAgICBfY2xvc2VSZWxNZW51OiBudWxsLFxyXG4gICAgdG9nZ2xlUmVsTGlzdDogZnVuY3Rpb24gKGNvbnRleHRBbmNob3IsIHNob3cpIHtcclxuICAgICAgICBpZiAoIXNob3cpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMucGx1Z2lucy5hbmNob3IuX2Nsb3NlUmVsTWVudSkgdGhpcy5wbHVnaW5zLmFuY2hvci5fY2xvc2VSZWxNZW51KCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gY29udGV4dEFuY2hvci5yZWxCdXR0b247XHJcbiAgICAgICAgICAgIGNvbnN0IHJlbExpc3QgPSBjb250ZXh0QW5jaG9yLnJlbExpc3Q7XHJcbiAgICAgICAgICAgIHRoaXMudXRpbC5hZGRDbGFzcyh0YXJnZXQsICdhY3RpdmUnKTtcclxuICAgICAgICAgICAgcmVsTGlzdC5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XHJcbiAgICAgICAgICAgIHJlbExpc3Quc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5vcHRpb25zLnJ0bCkgcmVsTGlzdC5zdHlsZS5sZWZ0ID0gKHRhcmdldC5vZmZzZXRMZWZ0ICsgdGFyZ2V0Lm9mZnNldFdpZHRoICsgMSkgKyAncHgnO1xyXG4gICAgICAgICAgICBlbHNlIHJlbExpc3Quc3R5bGUubGVmdCA9ICh0YXJnZXQub2Zmc2V0TGVmdCAtIHJlbExpc3Qub2Zmc2V0V2lkdGggLSAxKSArICdweCc7XHJcbiAgICAgICAgICAgIHJlbExpc3Quc3R5bGUudG9wID0gKHRhcmdldC5vZmZzZXRUb3AgKyAodGFyZ2V0Lm9mZnNldEhlaWdodCAvIDIpIC0gKHJlbExpc3Qub2Zmc2V0SGVpZ2h0IC8gMikpICsgJ3B4JztcclxuICAgICAgICAgICAgcmVsTGlzdC5zdHlsZS52aXNpYmlsaXR5ID0gJyc7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMuYW5jaG9yLl9jbG9zZVJlbE1lbnUgPSBmdW5jdGlvbiAoY29udGV4dCwgdGFyZ2V0LCBlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZSAmJiAoY29udGV4dC5yZWxCdXR0b24uY29udGFpbnMoZS50YXJnZXQpIHx8IGNvbnRleHQucmVsTGlzdC5jb250YWlucyhlLnRhcmdldCkpKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB0aGlzLnV0aWwucmVtb3ZlQ2xhc3ModGFyZ2V0LCAnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LnJlbExpc3Quc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kYWxGb3JtLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5wbHVnaW5zLmFuY2hvci5fY2xvc2VSZWxNZW51KTtcclxuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy5hbmNob3IuX2Nsb3NlUmVsTWVudSA9IG51bGw7XHJcbiAgICAgICAgICAgIH0uYmluZCh0aGlzLCBjb250ZXh0QW5jaG9yLCB0YXJnZXQpO1xyXG4gICAgXHJcbiAgICAgICAgICAgIHRoaXMubW9kYWxGb3JtLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5wbHVnaW5zLmFuY2hvci5fY2xvc2VSZWxNZW51KTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIG9uQ2xpY2tfcmVsQnV0dG9uOiBmdW5jdGlvbiAoY29udGV4dEFuY2hvciwgZSkge1xyXG4gICAgICAgIHRoaXMucGx1Z2lucy5hbmNob3IudG9nZ2xlUmVsTGlzdC5jYWxsKHRoaXMsIGNvbnRleHRBbmNob3IsICF0aGlzLnV0aWwuaGFzQ2xhc3MoZS50YXJnZXQsICdhY3RpdmUnKSk7XHJcbiAgICB9LFxyXG5cclxuICAgIG9uQ2xpY2tfcmVsTGlzdDogZnVuY3Rpb24gKGNvbnRleHRBbmNob3IsIGUpIHtcclxuICAgICAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldDtcclxuICAgICAgICBjb25zdCBjbWQgPSB0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLWNvbW1hbmQnKTtcclxuICAgICAgICBpZiAoIWNtZCkgcmV0dXJuO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSBjb250ZXh0QW5jaG9yLmN1cnJlbnRSZWw7XHJcbiAgICAgICAgY29uc3QgY2hlY2tlZCA9IHRoaXMudXRpbC50b2dnbGVDbGFzcyh0YXJnZXQsICdzZS1jaGVja2VkJyk7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSBjdXJyZW50LmluZGV4T2YoY21kKTtcclxuICAgICAgICBpZiAoY2hlY2tlZCkge1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IC0xKSBjdXJyZW50LnB1c2goY21kKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkgY3VycmVudC5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29udGV4dEFuY2hvci5yZWxQcmV2aWV3LnRpdGxlID0gY29udGV4dEFuY2hvci5yZWxQcmV2aWV3LnRleHRDb250ZW50ID0gY3VycmVudC5qb2luKCcgJyk7XHJcbiAgICB9LFxyXG5cclxuICAgIHNldFJlbDogZnVuY3Rpb24gKGNvbnRleHRBbmNob3IsIHJlbEF0dHIpIHtcclxuICAgICAgICBjb25zdCByZWxMaXN0RWwgPSBjb250ZXh0QW5jaG9yLnJlbExpc3Q7XHJcbiAgICAgICAgY29uc3QgcmVscyA9IGNvbnRleHRBbmNob3IuY3VycmVudFJlbCA9ICFyZWxBdHRyID8gW10gOiByZWxBdHRyLnNwbGl0KCcgJyk7XHJcbiAgICAgICAgaWYgKCFyZWxMaXN0RWwpIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3QgY2hlY2tlZFJlbCA9IHJlbExpc3RFbC5xdWVyeVNlbGVjdG9yQWxsKCdidXR0b24nKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gY2hlY2tlZFJlbC5sZW5ndGgsIGNtZDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNtZCA9IGNoZWNrZWRSZWxbaV0uZ2V0QXR0cmlidXRlKCdkYXRhLWNvbW1hbmQnKTtcclxuICAgICAgICAgICAgaWYgKHJlbHMuaW5kZXhPZihjbWQpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXRpbC5hZGRDbGFzcyhjaGVja2VkUmVsW2ldLCAnc2UtY2hlY2tlZCcpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51dGlsLnJlbW92ZUNsYXNzKGNoZWNrZWRSZWxbaV0sICdzZS1jaGVja2VkJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnRleHRBbmNob3IucmVsUHJldmlldy50aXRsZSA9IGNvbnRleHRBbmNob3IucmVsUHJldmlldy50ZXh0Q29udGVudCA9IHJlbHMuam9pbignICcpO1xyXG4gICAgfSxcclxuXHJcbiAgICBjcmVhdGVIZWFkZXJMaXN0OiBmdW5jdGlvbiAoY29udGV4dEFuY2hvciwgY29udGV4dExpc3QsIHVybFZhbHVlKSB7XHJcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHRoaXMudXRpbC5nZXRMaXN0Q2hpbGRyZW4odGhpcy5jb250ZXh0LmVsZW1lbnQud3lzaXd5ZywgZnVuY3Rpb24oY3VycmVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4gL2hbMS02XS9pLnRlc3QoY3VycmVudC5ub2RlTmFtZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKGhlYWRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XHJcblxyXG4gICAgICAgIGNvbnN0IHZhbHVlUmVnRXhwID0gbmV3IHRoaXMuX3cuUmVnRXhwKCdeJyArIHVybFZhbHVlLnJlcGxhY2UoL14jLywgJycpLCAnaScpO1xyXG4gICAgICAgIGNvbnN0IGxpc3QgPSBbXTtcclxuICAgICAgICBsZXQgaHRtbCA9ICcnO1xyXG4gICAgICAgIGZvcihsZXQgaSA9IDAsIGxlbiA9IGhlYWRlcnMubGVuZ3RoLCBoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgaCA9IGhlYWRlcnNbaV07XHJcbiAgICAgICAgICAgIGlmICghdmFsdWVSZWdFeHAudGVzdChoLnRleHRDb250ZW50KSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGxpc3QucHVzaChoKTtcclxuICAgICAgICAgICAgaHRtbCArPSAnPGxpIGNsYXNzPVwic2Utc2VsZWN0LWl0ZW1cIiBkYXRhLWluZGV4PVwiJyArIGkgKyAnXCI+JyArIGgudGV4dENvbnRlbnQgKyAnPC9saT4nO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGxpc3QubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5zZWxlY3RNZW51LmNsb3NlLmNhbGwodGhpcywgY29udGV4dExpc3QpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5zZWxlY3RNZW51LmNyZWF0ZUxpc3QoY29udGV4dExpc3QsIGxpc3QsIGh0bWwpO1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMuc2VsZWN0TWVudS5vcGVuLmNhbGwodGhpcywgY29udGV4dExpc3QsIHRoaXMucGx1Z2lucy5hbmNob3IuX3NldE1lbnVMaXN0UG9zaXRpb24uYmluZCh0aGlzLCBjb250ZXh0QW5jaG9yKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBfc2V0TWVudUxpc3RQb3NpdGlvbjogZnVuY3Rpb24gKGNvbnRleHRBbmNob3IsIGxpc3QpIHtcclxuICAgICAgICBsaXN0LnN0eWxlLnRvcCA9IChjb250ZXh0QW5jaG9yLnVybElucHV0Lm9mZnNldEhlaWdodCArIDEpICsgJ3B4JztcclxuICAgIH0sXHJcblxyXG4gICAgb25LZXlEb3duVXJsSW5wdXQ6IGZ1bmN0aW9uIChjb250ZXh0TGlzdCwgZSkge1xyXG4gICAgICAgIGNvbnN0IGtleUNvZGUgPSBlLmtleUNvZGU7XHJcbiAgICAgICAgc3dpdGNoIChrZXlDb2RlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMzg6IC8vIHVwXHJcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLnNlbGVjdE1lbnUubW92ZUl0ZW0uY2FsbCh0aGlzLCBjb250ZXh0TGlzdCwgLTEpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgNDA6IC8vIGRvd25cclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnMuc2VsZWN0TWVudS5tb3ZlSXRlbS5jYWxsKHRoaXMsIGNvbnRleHRMaXN0LCAxKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDEzOiAvLyBlbnRlclxyXG4gICAgICAgICAgICAgICAgaWYgKGNvbnRleHRMaXN0LmluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnMuYW5jaG9yLnNldEhlYWRlckJvb2ttYXJrLmNhbGwodGhpcywgdGhpcy5wbHVnaW5zLnNlbGVjdE1lbnUuZ2V0SXRlbShjb250ZXh0TGlzdCwgbnVsbCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRIZWFkZXJCb29rbWFyazogZnVuY3Rpb24gKGhlYWRlcikge1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHRBbmNob3IgPSB0aGlzLmNvbnRleHQuYW5jaG9yLmNhbGxlckNvbnRleHQ7XHJcbiAgICAgICAgY29uc3QgaWQgPSBoZWFkZXIuaWQgfHwgJ2hfJyArIHRoaXMuX3cuTWF0aC5yYW5kb20oKS50b1N0cmluZygpLnJlcGxhY2UoLy4rXFwuLywgJycpO1xyXG4gICAgICAgIGhlYWRlci5pZCA9IGlkO1xyXG4gICAgICAgIGNvbnRleHRBbmNob3IudXJsSW5wdXQudmFsdWUgPSAnIycgKyBpZDtcclxuXHJcbiAgICAgICAgaWYgKCFjb250ZXh0QW5jaG9yLmFuY2hvclRleHQudmFsdWUudHJpbSgpIHx8ICFjb250ZXh0QW5jaG9yLl9jaGFuZ2UpIHtcclxuICAgICAgICAgICAgY29udGV4dEFuY2hvci5hbmNob3JUZXh0LnZhbHVlID0gaGVhZGVyLnRleHRDb250ZW50O1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnBsdWdpbnMuYW5jaG9yLnNldExpbmtQcmV2aWV3LmNhbGwodGhpcywgY29udGV4dEFuY2hvciwgY29udGV4dEFuY2hvci51cmxJbnB1dC52YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLnNlbGVjdE1lbnUuY2xvc2UuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQuc2VsZWN0TWVudS5jYWxsZXJDb250ZXh0KTtcclxuICAgICAgICB0aGlzLmNvbnRleHQuYW5jaG9yLmNhbGxlckNvbnRleHQudXJsSW5wdXQuZm9jdXMoKTtcclxuICAgIH0sXHJcblxyXG4gICAgb25DaGFuZ2VBbmNob3JUZXh0OiBmdW5jdGlvbiAoY29udGV4dEFuY2hvciwgZSkge1xyXG4gICAgICAgIGNvbnRleHRBbmNob3IuX2NoYW5nZSA9ICEhZS50YXJnZXQudmFsdWUudHJpbSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICBvbkNoYW5nZVVybElucHV0OiBmdW5jdGlvbiAoY29udGV4dEFuY2hvciwgZSkge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gZS50YXJnZXQudmFsdWUudHJpbSgpO1xyXG4gICAgICAgIHRoaXMucGx1Z2lucy5hbmNob3Iuc2V0TGlua1ByZXZpZXcuY2FsbCh0aGlzLCBjb250ZXh0QW5jaG9yLCB2YWx1ZSk7XHJcblxyXG4gICAgICAgIGlmICgvXiMvLnRlc3QodmFsdWUpKSB0aGlzLnBsdWdpbnMuYW5jaG9yLmNyZWF0ZUhlYWRlckxpc3QuY2FsbCh0aGlzLCBjb250ZXh0QW5jaG9yLCB0aGlzLmNvbnRleHQuc2VsZWN0TWVudS5jYWxsZXJDb250ZXh0LCB2YWx1ZSk7XHJcbiAgICAgICAgZWxzZSB0aGlzLnBsdWdpbnMuc2VsZWN0TWVudS5jbG9zZS5jYWxsKHRoaXMsIHRoaXMuY29udGV4dC5zZWxlY3RNZW51LmNhbGxlckNvbnRleHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICBvbkZvY3VzVXJsSW5wdXQ6IGZ1bmN0aW9uIChjb250ZXh0QW5jaG9yLCBjb250ZXh0TGluaykge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gY29udGV4dEFuY2hvci51cmxJbnB1dC52YWx1ZTtcclxuICAgICAgICBpZiAoL14jLy50ZXN0KHZhbHVlKSkgdGhpcy5wbHVnaW5zLmFuY2hvci5jcmVhdGVIZWFkZXJMaXN0LmNhbGwodGhpcywgY29udGV4dEFuY2hvciwgY29udGV4dExpbmssIHZhbHVlKTtcclxuICAgIH0sXHJcblxyXG4gICAgb25CbHVyVXJsSW5wdXQ6IGZ1bmN0aW9uIChjb250ZXh0TGlzdCkge1xyXG4gICAgICAgIHRoaXMucGx1Z2lucy5zZWxlY3RNZW51LmNsb3NlLmNhbGwodGhpcywgY29udGV4dExpc3QpO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXRMaW5rUHJldmlldzogZnVuY3Rpb24gKGNvbnRleHQsIHZhbHVlKSB7XHJcbiAgICAgICAgY29uc3QgcHJldmlldyA9IGNvbnRleHQucHJldmlldztcclxuICAgICAgICBjb25zdCBwcm90b2NvbCA9IHRoaXMub3B0aW9ucy5saW5rUHJvdG9jb2w7XHJcbiAgICAgICAgY29uc3QgcmVzZXJ2ZWRQcm90b2NvbCAgPSAvXihtYWlsdG9cXDp8dGVsXFw6fHNtc1xcOnxodHRwcypcXDpcXC9cXC98IykvLnRlc3QodmFsdWUpO1xyXG4gICAgICAgIGNvbnN0IHNhbWVQcm90b2NvbCA9ICFwcm90b2NvbCA/IGZhbHNlIDogdGhpcy5fdy5SZWdFeHAoJ14nICsgdmFsdWUuc3Vic3RyKDAsIHByb3RvY29sLmxlbmd0aCkpLnRlc3QocHJvdG9jb2wpO1xyXG4gICAgICAgIGNvbnRleHQubGlua1ZhbHVlID0gcHJldmlldy50ZXh0Q29udGVudCA9ICF2YWx1ZSA/ICcnIDogKHByb3RvY29sICYmICFyZXNlcnZlZFByb3RvY29sICYmICFzYW1lUHJvdG9jb2wpID8gcHJvdG9jb2wgKyB2YWx1ZSA6IHJlc2VydmVkUHJvdG9jb2wgPyB2YWx1ZSA6IC9ed3d3XFwuLy50ZXN0KHZhbHVlKSA/ICdodHRwOi8vJyArIHZhbHVlIDogdGhpcy5jb250ZXh0LmFuY2hvci5ob3N0ICsgKC9eXFwvLy50ZXN0KHZhbHVlKSA/ICcnIDogJy8nKSArIHZhbHVlO1xyXG5cclxuICAgICAgICBpZiAodmFsdWUuaW5kZXhPZignIycpID09PSAwKSB7XHJcbiAgICAgICAgICAgIGNvbnRleHQuYm9va21hcmsuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgIHRoaXMudXRpbC5hZGRDbGFzcyhjb250ZXh0LmJvb2ttYXJrQnV0dG9uLCAnYWN0aXZlJyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29udGV4dC5ib29rbWFyay5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLnV0aWwucmVtb3ZlQ2xhc3MoY29udGV4dC5ib29rbWFya0J1dHRvbiwgJ2FjdGl2ZScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHZhbHVlLmluZGV4T2YoJyMnKSA9PT0gLTEgJiYgY29udGV4dC5kb3dubG9hZENoZWNrLmNoZWNrZWQpIHtcclxuICAgICAgICAgICAgY29udGV4dC5kb3dubG9hZC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb250ZXh0LmRvd25sb2FkLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRDdHg6IGZ1bmN0aW9uIChhbmNob3IsIGNvbnRleHRBbmNob3IpIHtcclxuICAgICAgICBpZiAoIWFuY2hvcikgcmV0dXJuO1xyXG4gICAgICAgIGNvbnRleHRBbmNob3IubGlua0FuY2hvciA9IGFuY2hvcjtcclxuICAgICAgICBjb250ZXh0QW5jaG9yLmxpbmtWYWx1ZSA9IGFuY2hvci5ocmVmO1xyXG4gICAgICAgIGNvbnRleHRBbmNob3IuY3VycmVudFJlbCA9IGFuY2hvci5yZWwuc3BsaXQoXCIgXCIpO1xyXG4gICAgfSxcclxuXHJcbiAgICB1cGRhdGVBbmNob3I6IGZ1bmN0aW9uIChhbmNob3IsIHVybCwgYWx0LCBjb250ZXh0QW5jaG9yLCBub3RUZXh0KSB7XHJcbiAgICAgICAgLy8gZG93bmxvYWRcclxuICAgICAgICBpZiAoIS9eXFwjLy50ZXN0KHVybCkgJiYgY29udGV4dEFuY2hvci5kb3dubG9hZENoZWNrLmNoZWNrZWQpIHtcclxuICAgICAgICAgICAgYW5jaG9yLnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnLCBhbHQgfHwgdXJsKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBhbmNob3IucmVtb3ZlQXR0cmlidXRlKCdkb3dubG9hZCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gbmV3IHdpbmRvd1xyXG4gICAgICAgIGlmIChjb250ZXh0QW5jaG9yLm5ld1dpbmRvd0NoZWNrLmNoZWNrZWQpIGFuY2hvci50YXJnZXQgPSAnX2JsYW5rJztcclxuICAgICAgICBlbHNlIGFuY2hvci5yZW1vdmVBdHRyaWJ1dGUoJ3RhcmdldCcpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIHJlbFxyXG4gICAgICAgIGNvbnN0IHJlbCA9IGNvbnRleHRBbmNob3IuY3VycmVudFJlbC5qb2luKCcgJyk7XHJcbiAgICAgICAgaWYgKCFyZWwpIGFuY2hvci5yZW1vdmVBdHRyaWJ1dGUoJ3JlbCcpO1xyXG4gICAgICAgIGVsc2UgYW5jaG9yLnJlbCA9IHJlbDtcclxuXHJcbiAgICAgICAgLy8gZXN0IHVybCwgYWx0XHJcbiAgICAgICAgYW5jaG9yLmhyZWYgPSB1cmw7XHJcbiAgICAgICAgYW5jaG9yLnNldEF0dHJpYnV0ZSgnYWx0JywgYWx0KTtcclxuICAgICAgICBpZiAobm90VGV4dCkge1xyXG4gICAgICAgICAgICBpZiAoYW5jaG9yLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkgYW5jaG9yLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYW5jaG9yLnRleHRDb250ZW50ID0gYWx0O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgY3JlYXRlQW5jaG9yOiBmdW5jdGlvbiAoY29udGV4dEFuY2hvciwgbm90VGV4dCkge1xyXG4gICAgICAgIGlmIChjb250ZXh0QW5jaG9yLmxpbmtWYWx1ZS5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnN0IHVybCA9IGNvbnRleHRBbmNob3IubGlua1ZhbHVlO1xyXG4gICAgICAgIGNvbnN0IGFuY2hvciA9IGNvbnRleHRBbmNob3IuYW5jaG9yVGV4dDtcclxuICAgICAgICBjb25zdCBhbmNob3JUZXh0ID0gYW5jaG9yLnZhbHVlLmxlbmd0aCA9PT0gMCA/IHVybCA6IGFuY2hvci52YWx1ZTtcclxuXHJcbiAgICAgICAgY29uc3Qgb0EgPSBjb250ZXh0QW5jaG9yLmxpbmtBbmNob3IgfHwgdGhpcy51dGlsLmNyZWF0ZUVsZW1lbnQoJ0EnKTtcclxuICAgICAgICB0aGlzLnBsdWdpbnMuYW5jaG9yLnVwZGF0ZUFuY2hvcihvQSwgdXJsLCBhbmNob3JUZXh0LCBjb250ZXh0QW5jaG9yLCBub3RUZXh0KTtcclxuXHJcbiAgICAgICAgY29udGV4dEFuY2hvci5saW5rVmFsdWUgPSBjb250ZXh0QW5jaG9yLnByZXZpZXcudGV4dENvbnRlbnQgPSBjb250ZXh0QW5jaG9yLnVybElucHV0LnZhbHVlID0gY29udGV4dEFuY2hvci5hbmNob3JUZXh0LnZhbHVlID0gJyc7XHJcblxyXG4gICAgICAgIHJldHVybiBvQTtcclxuICAgIH0sXHJcblxyXG4gICAgb25DbGlja19ib29rbWFya0J1dHRvbjogZnVuY3Rpb24gKGNvbnRleHRBbmNob3IpIHtcclxuICAgICAgICBsZXQgdXJsID0gY29udGV4dEFuY2hvci51cmxJbnB1dC52YWx1ZTtcclxuICAgICAgICBpZiAoL15cXCMvLnRlc3QodXJsKSkge1xyXG4gICAgICAgICAgICB1cmwgPSB1cmwuc3Vic3RyKDEpO1xyXG4gICAgICAgICAgICBjb250ZXh0QW5jaG9yLmJvb2ttYXJrLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMudXRpbC5yZW1vdmVDbGFzcyhjb250ZXh0QW5jaG9yLmJvb2ttYXJrQnV0dG9uLCAnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5zZWxlY3RNZW51LmNsb3NlLmNhbGwodGhpcywgdGhpcy5jb250ZXh0LnNlbGVjdE1lbnUuY2FsbGVyQ29udGV4dCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdXJsID0gJyMnICsgdXJsO1xyXG4gICAgICAgICAgICBjb250ZXh0QW5jaG9yLmJvb2ttYXJrLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICB0aGlzLnV0aWwuYWRkQ2xhc3MoY29udGV4dEFuY2hvci5ib29rbWFya0J1dHRvbiwgJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICBjb250ZXh0QW5jaG9yLmRvd25sb2FkQ2hlY2suY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBjb250ZXh0QW5jaG9yLmRvd25sb2FkLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5hbmNob3IuY3JlYXRlSGVhZGVyTGlzdC5jYWxsKHRoaXMsIGNvbnRleHRBbmNob3IsIHRoaXMuY29udGV4dC5zZWxlY3RNZW51LmNhbGxlckNvbnRleHQsIHVybCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb250ZXh0QW5jaG9yLnVybElucHV0LnZhbHVlID0gdXJsO1xyXG4gICAgICAgIHRoaXMucGx1Z2lucy5hbmNob3Iuc2V0TGlua1ByZXZpZXcuY2FsbCh0aGlzLCBjb250ZXh0QW5jaG9yLCB1cmwpO1xyXG4gICAgICAgIGNvbnRleHRBbmNob3IudXJsSW5wdXQuZm9jdXMoKTtcclxuICAgIH0sXHJcblxyXG4gICAgb25DaGFuZ2VfbmV3V2luZG93Q2hlY2s6IGZ1bmN0aW9uIChjb250ZXh0QW5jaG9yLCBlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBjb250ZXh0QW5jaG9yLmxpbmtEZWZhdWx0UmVsLmNoZWNrX25ld193aW5kb3cgIT09ICdzdHJpbmcnKSByZXR1cm47XHJcbiAgICAgICAgaWYgKGUudGFyZ2V0LmNoZWNrZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmFuY2hvci5zZXRSZWwuY2FsbCh0aGlzLCBjb250ZXh0QW5jaG9yLCB0aGlzLnBsdWdpbnMuYW5jaG9yLl9yZWxNZXJnZS5jYWxsKHRoaXMsIGNvbnRleHRBbmNob3IsIGNvbnRleHRBbmNob3IubGlua0RlZmF1bHRSZWwuY2hlY2tfbmV3X3dpbmRvdykpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5hbmNob3Iuc2V0UmVsLmNhbGwodGhpcywgY29udGV4dEFuY2hvciwgdGhpcy5wbHVnaW5zLmFuY2hvci5fcmVsRGVsZXRlLmNhbGwodGhpcywgY29udGV4dEFuY2hvciwgY29udGV4dEFuY2hvci5saW5rRGVmYXVsdFJlbC5jaGVja19uZXdfd2luZG93KSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBvbkNoYW5nZV9kb3dubG9hZENoZWNrOiBmdW5jdGlvbiAoY29udGV4dEFuY2hvciwgZSkge1xyXG4gICAgICAgIGlmIChlLnRhcmdldC5jaGVja2VkKSB7XHJcbiAgICAgICAgICAgIGNvbnRleHRBbmNob3IuZG93bmxvYWQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgIGNvbnRleHRBbmNob3IuYm9va21hcmsuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy51dGlsLnJlbW92ZUNsYXNzKGNvbnRleHRBbmNob3IuYm9va21hcmtCdXR0b24sICdhY3RpdmUnKTtcclxuICAgICAgICAgICAgY29udGV4dEFuY2hvci5saW5rVmFsdWUgPSBjb250ZXh0QW5jaG9yLnByZXZpZXcudGV4dENvbnRlbnQgPSBjb250ZXh0QW5jaG9yLnVybElucHV0LnZhbHVlID0gY29udGV4dEFuY2hvci51cmxJbnB1dC52YWx1ZS5yZXBsYWNlKC9eXFwjKy8sICcnKTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjb250ZXh0QW5jaG9yLmxpbmtEZWZhdWx0UmVsLmNoZWNrX2Jvb2ttYXJrID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmFuY2hvci5zZXRSZWwuY2FsbCh0aGlzLCBjb250ZXh0QW5jaG9yLCB0aGlzLnBsdWdpbnMuYW5jaG9yLl9yZWxNZXJnZS5jYWxsKHRoaXMsIGNvbnRleHRBbmNob3IsIGNvbnRleHRBbmNob3IubGlua0RlZmF1bHRSZWwuY2hlY2tfYm9va21hcmspKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnRleHRBbmNob3IuZG93bmxvYWQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjb250ZXh0QW5jaG9yLmxpbmtEZWZhdWx0UmVsLmNoZWNrX2Jvb2ttYXJrID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmFuY2hvci5zZXRSZWwuY2FsbCh0aGlzLCBjb250ZXh0QW5jaG9yLCB0aGlzLnBsdWdpbnMuYW5jaG9yLl9yZWxEZWxldGUuY2FsbCh0aGlzLCBjb250ZXh0QW5jaG9yLCBjb250ZXh0QW5jaG9yLmxpbmtEZWZhdWx0UmVsLmNoZWNrX2Jvb2ttYXJrKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIF9yZWxNZXJnZTogZnVuY3Rpb24gKGNvbnRleHRBbmNob3IsIHJlbEF0dHIpIHtcclxuICAgICAgICBjb25zdCBjdXJyZW50ID0gY29udGV4dEFuY2hvci5jdXJyZW50UmVsO1xyXG4gICAgICAgIGlmICghcmVsQXR0cikgcmV0dXJuIGN1cnJlbnQuam9pbignICcpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICgvXm9ubHlcXDovLnRlc3QocmVsQXR0cikpIHtcclxuICAgICAgICAgICAgcmVsQXR0ciA9IHJlbEF0dHIucmVwbGFjZSgvXm9ubHlcXDovLCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICBjb250ZXh0QW5jaG9yLmN1cnJlbnRSZWwgPSByZWxBdHRyLnNwbGl0KCcgJyk7XHJcbiAgICAgICAgICAgIHJldHVybiByZWxBdHRyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcmVscyA9IHJlbEF0dHIuc3BsaXQoJyAnKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gcmVscy5sZW5ndGgsIGluZGV4OyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgaW5kZXggPSBjdXJyZW50LmluZGV4T2YocmVsc1tpXSk7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gLTEpIGN1cnJlbnQucHVzaChyZWxzW2ldKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjdXJyZW50LmpvaW4oJyAnKTtcclxuICAgIH0sXHJcblxyXG4gICAgX3JlbERlbGV0ZTogZnVuY3Rpb24gKGNvbnRleHRBbmNob3IsIHJlbEF0dHIpIHtcclxuICAgICAgICBpZiAoIXJlbEF0dHIpIHJldHVybiBjb250ZXh0QW5jaG9yLmN1cnJlbnRSZWwuam9pbignICcpO1xyXG4gICAgICAgIGlmICgvXm9ubHlcXDovLnRlc3QocmVsQXR0cikpIHJlbEF0dHIgPSByZWxBdHRyLnJlcGxhY2UoL15vbmx5XFw6LywgJycpLnRyaW0oKTtcclxuXHJcbiAgICAgICAgY29uc3QgcmVscyA9IGNvbnRleHRBbmNob3IuY3VycmVudFJlbC5qb2luKCcgJykucmVwbGFjZSh0aGlzLl93LlJlZ0V4cChyZWxBdHRyICsgJ1xcXFxzKicpLCAnJyk7XHJcbiAgICAgICAgY29udGV4dEFuY2hvci5jdXJyZW50UmVsID0gcmVscy5zcGxpdCgnICcpO1xyXG4gICAgICAgIHJldHVybiByZWxzO1xyXG4gICAgfSxcclxuXHJcbiAgICBpbml0OiBmdW5jdGlvbiAoY29udGV4dEFuY2hvcikge1xyXG4gICAgICAgIGNvbnRleHRBbmNob3IubGlua0FuY2hvciA9IG51bGw7XHJcbiAgICAgICAgY29udGV4dEFuY2hvci5saW5rVmFsdWUgPSBjb250ZXh0QW5jaG9yLnByZXZpZXcudGV4dENvbnRlbnQgPSBjb250ZXh0QW5jaG9yLnVybElucHV0LnZhbHVlID0gJyc7XHJcbiAgICAgICAgY29udGV4dEFuY2hvci5hbmNob3JUZXh0LnZhbHVlID0gJyc7XHJcbiAgICAgICAgY29udGV4dEFuY2hvci5uZXdXaW5kb3dDaGVjay5jaGVja2VkID0gZmFsc2U7XHJcbiAgICAgICAgY29udGV4dEFuY2hvci5kb3dubG9hZENoZWNrLmNoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgICBjb250ZXh0QW5jaG9yLl9jaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnBsdWdpbnMuYW5jaG9yLnNldFJlbC5jYWxsKHRoaXMsIGNvbnRleHRBbmNob3IsIGNvbnRleHRBbmNob3IuZGVmYXVsdFJlbCk7XHJcbiAgICAgICAgaWYgKGNvbnRleHRBbmNob3IucmVsTGlzdCkge1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMuYW5jaG9yLnRvZ2dsZVJlbExpc3QuY2FsbCh0aGlzLCBjb250ZXh0QW5jaG9yLCBmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY29udGV4dC5hbmNob3IuY2FsbGVyQ29udGV4dCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLnNlbGVjdE1lbnUuaW5pdC5jYWxsKHRoaXMsIHRoaXMuY29udGV4dC5zZWxlY3RNZW51LmNhbGxlckNvbnRleHQpO1xyXG4gICAgfVxyXG59O1xyXG4iLCIvKlxyXG4gKiB3eXNpd3lnIHdlYiBlZGl0b3JcclxuICpcclxuICogc3VuZWRpdG9yLmpzXHJcbiAqIENvcHlyaWdodCAyMDE3IEppSG9uZyBMZWUuXHJcbiAqIE1JVCBsaWNlbnNlLlxyXG4gKi9cclxuJ3VzZSBzdHJpY3QnO1xyXG5cclxuaW1wb3J0IGRpYWxvZyBmcm9tICcuLi9tb2R1bGVzL2RpYWxvZyc7XHJcbmltcG9ydCBhbmNob3IgZnJvbSAnLi4vbW9kdWxlcy9fYW5jaG9yJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIG5hbWU6ICdsaW5rJyxcclxuICAgIGRpc3BsYXk6ICdkaWFsb2cnLFxyXG4gICAgYWRkOiBmdW5jdGlvbiAoY29yZSkge1xyXG4gICAgICAgIGNvcmUuYWRkTW9kdWxlKFtkaWFsb2csIGFuY2hvcl0pO1xyXG5cclxuICAgICAgICBjb25zdCBjb250ZXh0ID0gY29yZS5jb250ZXh0O1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHRMaW5rID0gY29udGV4dC5saW5rID0ge1xyXG4gICAgICAgICAgICBmb2N1c0VsZW1lbnQ6IG51bGwsIC8vIEBPdmVycmlkZSBkaWFsb2cgLy8gVGhpcyBlbGVtZW50IGhhcyBmb2N1cyB3aGVuIHRoZSBkaWFsb2cgaXMgb3BlbmVkLlxyXG4gICAgICAgICAgICBfbGlua0FuY2hvcjogbnVsbCxcclxuICAgICAgICAgICAgYW5jaG9yQ3R4OiBudWxsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLyoqIGxpbmsgZGlhbG9nICovXHJcbiAgICAgICAgbGV0IGxpbmtfZGlhbG9nID0gdGhpcy5zZXREaWFsb2coY29yZSk7XHJcbiAgICAgICAgY29udGV4dExpbmsubW9kYWwgPSBsaW5rX2RpYWxvZztcclxuICAgICAgICBcclxuICAgICAgICAvKiogbGluayBjb250cm9sbGVyICovXHJcbiAgICAgICAgbGV0IGxpbmtfY29udHJvbGxlciA9IHRoaXMuc2V0Q29udHJvbGxlcl9MaW5rQnV0dG9uKGNvcmUpO1xyXG4gICAgICAgIGNvbnRleHRMaW5rLmxpbmtDb250cm9sbGVyID0gbGlua19jb250cm9sbGVyO1xyXG5cclxuICAgICAgICBsaW5rX2RpYWxvZy5xdWVyeVNlbGVjdG9yKCdmb3JtJykuYWRkRXZlbnRMaXN0ZW5lcignc3VibWl0JywgdGhpcy5zdWJtaXQuYmluZChjb3JlKSk7XHJcbiAgICAgICAgbGlua19jb250cm9sbGVyLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbkNsaWNrX2xpbmtDb250cm9sbGVyLmJpbmQoY29yZSkpO1xyXG5cclxuICAgICAgICAvKiogYXBwZW5kIGh0bWwgKi9cclxuICAgICAgICBjb250ZXh0LmRpYWxvZy5tb2RhbC5hcHBlbmRDaGlsZChsaW5rX2RpYWxvZyk7XHJcblxyXG4gICAgICAgIC8qKiBhcHBlbmQgY29udHJvbGxlciAqL1xyXG4gICAgICAgIGNvbnRleHQuZWxlbWVudC5yZWxhdGl2ZS5hcHBlbmRDaGlsZChsaW5rX2NvbnRyb2xsZXIpO1xyXG5cclxuICAgICAgICAvKiogbGluayBldmVudCAqL1xyXG4gICAgICAgIGNvcmUucGx1Z2lucy5hbmNob3IuaW5pdEV2ZW50LmNhbGwoY29yZSwgJ2xpbmsnLCBsaW5rX2RpYWxvZyk7XHJcbiAgICAgICAgY29udGV4dExpbmsuZm9jdXNFbGVtZW50ID0gY29udGV4dC5hbmNob3IuY2FsbGVyLmxpbmsudXJsSW5wdXQ7XHJcblxyXG4gICAgICAgIC8qKiBlbXB0eSBtZW1vcnkgKi9cclxuICAgICAgICBsaW5rX2RpYWxvZyA9IG51bGwsIGxpbmtfY29udHJvbGxlciA9IG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKiBkaWFsb2cgKi9cclxuICAgIHNldERpYWxvZzogZnVuY3Rpb24gKGNvcmUpIHtcclxuICAgICAgICBjb25zdCBsYW5nID0gY29yZS5sYW5nO1xyXG4gICAgICAgIGNvbnN0IGRpYWxvZyA9IGNvcmUudXRpbC5jcmVhdGVFbGVtZW50KCdESVYnKTtcclxuICAgICAgICBjb25zdCBpY29ucyA9IGNvcmUuaWNvbnM7XHJcblxyXG4gICAgICAgIGRpYWxvZy5jbGFzc05hbWUgPSAnc2UtZGlhbG9nLWNvbnRlbnQnO1xyXG4gICAgICAgIGRpYWxvZy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIGxldCBodG1sID0gJycgK1xyXG4gICAgICAgICAgICAnPGZvcm0+JyArXHJcbiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWRpYWxvZy1oZWFkZXJcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1jb21tYW5kPVwiY2xvc2VcIiBjbGFzcz1cInNlLWJ0biBzZS1kaWFsb2ctY2xvc2VcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiB0aXRsZT1cIicgKyBsYW5nLmRpYWxvZ0JveC5jbG9zZSArICdcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbnMuY2FuY2VsICtcclxuICAgICAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwic2UtbW9kYWwtdGl0bGVcIj4nICsgbGFuZy5kaWFsb2dCb3gubGlua0JveC50aXRsZSArICc8L3NwYW4+JyArXHJcbiAgICAgICAgICAgICAgICAnPC9kaXY+JyArXHJcbiAgICAgICAgICAgICAgICBjb3JlLmNvbnRleHQuYW5jaG9yLmZvcm1zLmlubmVySFRNTCArXHJcbiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWRpYWxvZy1mb290ZXJcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJzZS1idG4tcHJpbWFyeVwiIHRpdGxlPVwiJyArIGxhbmcuZGlhbG9nQm94LnN1Ym1pdEJ1dHRvbiArICdcIj48c3Bhbj4nICsgbGFuZy5kaWFsb2dCb3guc3VibWl0QnV0dG9uICsgJzwvc3Bhbj48L2J1dHRvbj4nICtcclxuICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAgICAgJzwvZm9ybT4nO1xyXG5cclxuICAgICAgICBkaWFsb2cuaW5uZXJIVE1MID0gaHRtbDtcclxuICAgICAgICByZXR1cm4gZGlhbG9nO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKiogbW9kaWZ5IGNvbnRyb2xsZXIgYnV0dG9uICovXHJcbiAgICBzZXRDb250cm9sbGVyX0xpbmtCdXR0b246IGZ1bmN0aW9uIChjb3JlKSB7XHJcbiAgICAgICAgY29uc3QgbGFuZyA9IGNvcmUubGFuZztcclxuICAgICAgICBjb25zdCBpY29ucyA9IGNvcmUuaWNvbnM7XHJcbiAgICAgICAgY29uc3QgbGlua19idG4gPSBjb3JlLnV0aWwuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcblxyXG4gICAgICAgIGxpbmtfYnRuLmNsYXNzTmFtZSA9ICdzZS1jb250cm9sbGVyIHNlLWNvbnRyb2xsZXItbGluayc7XHJcbiAgICAgICAgbGlua19idG4uaW5uZXJIVE1MID0gJycgK1xyXG4gICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWFycm93IHNlLWFycm93LXVwXCI+PC9kaXY+JyArXHJcbiAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwibGluay1jb250ZW50XCI+PHNwYW4+PGEgdGFyZ2V0PVwiX2JsYW5rXCIgaHJlZj1cIlwiPjwvYT4mbmJzcDs8L3NwYW4+JyArXHJcbiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWJ0bi1ncm91cFwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWNvbW1hbmQ9XCJ1cGRhdGVcIiB0YWJpbmRleD1cIi0xXCIgY2xhc3M9XCJzZS1idG4gc2UtdG9vbHRpcFwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29ucy5lZGl0ICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC1pbm5lclwiPjxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC10ZXh0XCI+JyArIGxhbmcuY29udHJvbGxlci5lZGl0ICsgJzwvc3Bhbj48L3NwYW4+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzwvYnV0dG9uPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWNvbW1hbmQ9XCJ1bmxpbmtcIiB0YWJpbmRleD1cIi0xXCIgY2xhc3M9XCJzZS1idG4gc2UtdG9vbHRpcFwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29ucy51bmxpbmsgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLWlubmVyXCI+PHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLXRleHRcIj4nICsgbGFuZy5jb250cm9sbGVyLnVubGluayArICc8L3NwYW4+PC9zcGFuPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1jb21tYW5kPVwiZGVsZXRlXCIgdGFiaW5kZXg9XCItMVwiIGNsYXNzPVwic2UtYnRuIHNlLXRvb2x0aXBcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbnMuZGVsZXRlICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC1pbm5lclwiPjxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC10ZXh0XCI+JyArIGxhbmcuY29udHJvbGxlci5yZW1vdmUgKyAnPC9zcGFuPjwvc3Bhbj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXHJcbiAgICAgICAgICAgICAgICAnPC9kaXY+JyArXHJcbiAgICAgICAgICAgICc8L2Rpdj4nO1xyXG5cclxuICAgICAgICByZXR1cm4gbGlua19idG47XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQE92ZXJyaWRlIGRpYWxvZ1xyXG4gICAgICovXHJcbiAgICBvcGVuOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLmRpYWxvZy5vcGVuLmNhbGwodGhpcywgJ2xpbmsnLCAnbGluaycgPT09IHRoaXMuY3VycmVudENvbnRyb2xsZXJOYW1lKTtcclxuICAgIH0sXHJcblxyXG4gICAgc3VibWl0OiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgIHRoaXMuc2hvd0xvYWRpbmcoKTtcclxuXHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9BID0gdGhpcy5wbHVnaW5zLmFuY2hvci5jcmVhdGVBbmNob3IuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQuYW5jaG9yLmNhbGxlci5saW5rLCBmYWxzZSk7XHJcbiAgICBcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNvbnRleHQuZGlhbG9nLnVwZGF0ZU1vZGFsKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZEZvcm1hdHMgPSB0aGlzLmdldFNlbGVjdGVkRWxlbWVudHMoKTtcclxuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZEZvcm1hdHMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9Gb3JtYXQgPSB0aGlzLnV0aWwuY3JlYXRlRWxlbWVudChzZWxlY3RlZEZvcm1hdHNbMF0ubm9kZU5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIG9Gb3JtYXQuYXBwZW5kQ2hpbGQob0EpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5pbnNlcnROb2RlKG9Gb3JtYXQsIG51bGwsIHRydWUpKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5pbnNlcnROb2RlKG9BLCBudWxsLCB0cnVlKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFJhbmdlKG9BLmNoaWxkTm9kZXNbMF0sIDAsIG9BLmNoaWxkTm9kZXNbMF0sIG9BLnRleHRDb250ZW50Lmxlbmd0aCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBzZXQgcmFuZ2VcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRleHROb2RlID0gdGhpcy5jb250ZXh0LmxpbmsuX2xpbmtBbmNob3IuY2hpbGROb2Rlc1swXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2UodGV4dE5vZGUsIDAsIHRleHROb2RlLCB0ZXh0Tm9kZS50ZXh0Q29udGVudC5sZW5ndGgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmRpYWxvZy5jbG9zZS5jYWxsKHRoaXMpO1xyXG4gICAgICAgICAgICB0aGlzLmNsb3NlTG9hZGluZygpO1xyXG4gICAgICAgICAgICAvLyBoaXN0b3J5IHN0YWNrXHJcbiAgICAgICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoKGZhbHNlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAT3ZlcnJpZGUgY29yZVxyXG4gICAgICovXHJcbiAgICBhY3RpdmU6IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICAgICAgaWYgKCFlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2xsZXJBcnJheS5pbmRleE9mKHRoaXMuY29udGV4dC5saW5rLmxpbmtDb250cm9sbGVyKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJzT2ZmKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudXRpbC5pc0FuY2hvcihlbGVtZW50KSAmJiBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1pbWFnZS1saW5rJykgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbGxlckFycmF5LmluZGV4T2YodGhpcy5jb250ZXh0LmxpbmsubGlua0NvbnRyb2xsZXIpIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmxpbmsuY2FsbF9jb250cm9sbGVyLmNhbGwodGhpcywgZWxlbWVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQE92ZXJyaWRlIGRpYWxvZ1xyXG4gICAgICovXHJcbiAgICBvbjogZnVuY3Rpb24gKHVwZGF0ZSkge1xyXG4gICAgICAgIHRoaXMucGx1Z2lucy5hbmNob3Iub24uY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQuYW5jaG9yLmNhbGxlci5saW5rLCB1cGRhdGUpO1xyXG4gICAgfSxcclxuXHJcbiAgICBjYWxsX2NvbnRyb2xsZXI6IGZ1bmN0aW9uIChzZWxlY3Rpb25BVGFnKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0TGluayA9IHRoaXMuY29udGV4dC5saW5rLl9saW5rQW5jaG9yID0gdGhpcy5jb250ZXh0LmFuY2hvci5jYWxsZXIubGluay5saW5rQW5jaG9yID0gc2VsZWN0aW9uQVRhZztcclxuICAgICAgICBjb25zdCBsaW5rQnRuID0gdGhpcy5jb250ZXh0LmxpbmsubGlua0NvbnRyb2xsZXI7XHJcbiAgICAgICAgY29uc3QgbGluayA9IGxpbmtCdG4ucXVlcnlTZWxlY3RvcignYScpO1xyXG5cclxuICAgICAgICBsaW5rLmhyZWYgPSBzZWxlY3Rpb25BVGFnLmhyZWY7XHJcbiAgICAgICAgbGluay50aXRsZSA9IHNlbGVjdGlvbkFUYWcudGV4dENvbnRlbnQ7XHJcbiAgICAgICAgbGluay50ZXh0Q29udGVudCA9IHNlbGVjdGlvbkFUYWcudGV4dENvbnRlbnQ7XHJcblxyXG4gICAgICAgIHRoaXMudXRpbC5hZGRDbGFzcyhzZWxlY3Rpb25BVGFnLCAnb24nKTtcclxuICAgICAgICB0aGlzLnNldENvbnRyb2xsZXJQb3NpdGlvbihsaW5rQnRuLCBzZWxlY3Rpb25BVGFnLCAnYm90dG9tJywge2xlZnQ6IDAsIHRvcDogMH0pO1xyXG4gICAgICAgIHRoaXMuY29udHJvbGxlcnNPbihsaW5rQnRuLCBzZWxlY3Rpb25BVGFnLCAnbGluaycsIHRoaXMudXRpbC5yZW1vdmVDbGFzcy5iaW5kKHRoaXMudXRpbCwgdGhpcy5jb250ZXh0LmxpbmsuX2xpbmtBbmNob3IsICdvbicpKTtcclxuICAgIH0sXHJcblxyXG4gICAgb25DbGlja19saW5rQ29udHJvbGxlcjogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgICAgICBjb25zdCBjb21tYW5kID0gZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLWNvbW1hbmQnKSB8fCBlLnRhcmdldC5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1jb21tYW5kJyk7XHJcbiAgICAgICAgaWYgKCFjb21tYW5kKSByZXR1cm47XHJcblxyXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICAgICAgaWYgKC91cGRhdGUvLnRlc3QoY29tbWFuZCkpIHtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmRpYWxvZy5vcGVuLmNhbGwodGhpcywgJ2xpbmsnLCB0cnVlKTtcclxuICAgICAgICB9IGVsc2UgaWYgKC91bmxpbmsvLnRlc3QoY29tbWFuZCkpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2MgPSB0aGlzLnV0aWwuZ2V0Q2hpbGRFbGVtZW50KHRoaXMuY29udGV4dC5saW5rLl9saW5rQW5jaG9yLCBmdW5jdGlvbiAoY3VycmVudCkgeyByZXR1cm4gY3VycmVudC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMCB8fCBjdXJyZW50Lm5vZGVUeXBlID09PSAzOyB9LCBmYWxzZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVjID0gdGhpcy51dGlsLmdldENoaWxkRWxlbWVudCh0aGlzLmNvbnRleHQubGluay5fbGlua0FuY2hvciwgZnVuY3Rpb24gKGN1cnJlbnQpIHsgcmV0dXJuIGN1cnJlbnQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDAgfHwgY3VycmVudC5ub2RlVHlwZSA9PT0gMzsgfSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2Uoc2MsIDAsIGVjLCBlYy50ZXh0Q29udGVudC5sZW5ndGgpO1xyXG4gICAgICAgICAgICB0aGlzLm5vZGVDaGFuZ2UobnVsbCwgbnVsbCwgWydBJ10sIGZhbHNlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvKiogZGVsZXRlICovXHJcbiAgICAgICAgICAgIHRoaXMudXRpbC5yZW1vdmVJdGVtKHRoaXMuY29udGV4dC5saW5rLl9saW5rQW5jaG9yKTtcclxuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFuY2hvci5jYWxsZXIubGluay5saW5rQW5jaG9yID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5mb2N1cygpO1xyXG5cclxuICAgICAgICAgICAgLy8gaGlzdG9yeSBzdGFja1xyXG4gICAgICAgICAgICB0aGlzLmhpc3RvcnkucHVzaChmYWxzZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNvbnRyb2xsZXJzT2ZmKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQE92ZXJyaWRlIGRpYWxvZ1xyXG4gICAgICovXHJcbiAgICBpbml0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0LmxpbmsubGlua0NvbnRyb2xsZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnBsdWdpbnMuYW5jaG9yLmluaXQuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQuYW5jaG9yLmNhbGxlci5saW5rKTtcclxuICAgIH1cclxufTtcclxuIiwiLypcclxuICogd3lzaXd5ZyB3ZWIgZWRpdG9yXHJcbiAqXHJcbiAqIHN1bmVkaXRvci5qc1xyXG4gKiBDb3B5cmlnaHQgMjAxNyBKaUhvbmcgTGVlLlxyXG4gKiBNSVQgbGljZW5zZS5cclxuICovXHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbmltcG9ydCBkaWFsb2cgZnJvbSAnLi4vbW9kdWxlcy9kaWFsb2cnO1xyXG5pbXBvcnQgYW5jaG9yIGZyb20gJy4uL21vZHVsZXMvX2FuY2hvcic7XHJcbmltcG9ydCBjb21wb25lbnQgZnJvbSAnLi4vbW9kdWxlcy9jb21wb25lbnQnO1xyXG5pbXBvcnQgcmVzaXppbmcgZnJvbSAnLi4vbW9kdWxlcy9yZXNpemluZyc7XHJcbmltcG9ydCBmaWxlTWFuYWdlciBmcm9tICcuLi9tb2R1bGVzL2ZpbGVNYW5hZ2VyJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIG5hbWU6ICdpbWFnZScsXHJcbiAgICBkaXNwbGF5OiAnZGlhbG9nJyxcclxuICAgIGFkZDogZnVuY3Rpb24gKGNvcmUpIHtcclxuICAgICAgICBjb3JlLmFkZE1vZHVsZShbZGlhbG9nLCBhbmNob3IsIGNvbXBvbmVudCwgcmVzaXppbmcsIGZpbGVNYW5hZ2VyXSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGNvcmUub3B0aW9ucztcclxuICAgICAgICBjb25zdCBjb250ZXh0ID0gY29yZS5jb250ZXh0O1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHRJbWFnZSA9IGNvbnRleHQuaW1hZ2UgPSB7XHJcbiAgICAgICAgICAgIF9pbmZvTGlzdDogW10sIC8vIEBPdmVycmlkZSBmaWxlTWFuYWdlclxyXG4gICAgICAgICAgICBfaW5mb0luZGV4OiAwLCAvLyBAT3ZlcnJpZGUgZmlsZU1hbmFnZXJcclxuICAgICAgICAgICAgX3VwbG9hZEZpbGVMZW5ndGg6IDAsIC8vIEBPdmVycmlkZSBmaWxlTWFuYWdlclxyXG4gICAgICAgICAgICBmb2N1c0VsZW1lbnQ6IG51bGwsIC8vIEBPdmVycmlkZSBkaWFsb2cgLy8gVGhpcyBlbGVtZW50IGhhcyBmb2N1cyB3aGVuIHRoZSBkaWFsb2cgaXMgb3BlbmVkLlxyXG4gICAgICAgICAgICBzaXplVW5pdDogb3B0aW9ucy5faW1hZ2VTaXplVW5pdCxcclxuICAgICAgICAgICAgX2xpbmtFbGVtZW50OiAnJyxcclxuICAgICAgICAgICAgX2FsdFRleHQ6ICcnLFxyXG4gICAgICAgICAgICBfYWxpZ246ICdub25lJyxcclxuICAgICAgICAgICAgX2Zsb2F0Q2xhc3NSZWdFeHA6ICdfX3NlX19mbG9hdFxcXFwtW2Etel0rJyxcclxuICAgICAgICAgICAgX3Zfc3JjOiB7X2xpbmtWYWx1ZTogJyd9LFxyXG4gICAgICAgICAgICBzdmdEZWZhdWx0U2l6ZTogJzMwJScsXHJcbiAgICAgICAgICAgIGJhc2U2NFJlbmRlckluZGV4OiAwLFxyXG4gICAgICAgICAgICAvLyBAcmVxdWlyZSBAT3ZlcnJpZGUgY29tcG9uZW50XHJcbiAgICAgICAgICAgIF9lbGVtZW50OiBudWxsLFxyXG4gICAgICAgICAgICBfY292ZXI6IG51bGwsXHJcbiAgICAgICAgICAgIF9jb250YWluZXI6IG51bGwsXHJcbiAgICAgICAgICAgIC8vIEBPdmVycmlkZSByZXNpemluZyBwcm9wZXJ0aWVzXHJcbiAgICAgICAgICAgIGlucHV0WDogbnVsbCxcclxuICAgICAgICAgICAgaW5wdXRZOiBudWxsLFxyXG4gICAgICAgICAgICBfZWxlbWVudF93OiAxLFxyXG4gICAgICAgICAgICBfZWxlbWVudF9oOiAxLFxyXG4gICAgICAgICAgICBfZWxlbWVudF9sOiAwLFxyXG4gICAgICAgICAgICBfZWxlbWVudF90OiAwLFxyXG4gICAgICAgICAgICBfZGVmYXVsdFNpemVYOiAnYXV0bycsXHJcbiAgICAgICAgICAgIF9kZWZhdWx0U2l6ZVk6ICdhdXRvJyxcclxuICAgICAgICAgICAgX29yaWdpbl93OiBvcHRpb25zLmltYWdlV2lkdGggPT09ICdhdXRvJyA/ICcnIDogb3B0aW9ucy5pbWFnZVdpZHRoLFxyXG4gICAgICAgICAgICBfb3JpZ2luX2g6IG9wdGlvbnMuaW1hZ2VIZWlnaHQgPT09ICdhdXRvJyA/ICcnIDogb3B0aW9ucy5pbWFnZUhlaWdodCxcclxuICAgICAgICAgICAgX3Byb3BvcnRpb25DaGVja2VkOiB0cnVlLFxyXG4gICAgICAgICAgICBfcmVzaXppbmc6IG9wdGlvbnMuaW1hZ2VSZXNpemluZyxcclxuICAgICAgICAgICAgX3Jlc2l6ZURvdEhpZGU6ICFvcHRpb25zLmltYWdlSGVpZ2h0U2hvdyxcclxuICAgICAgICAgICAgX3JvdGF0aW9uOiBvcHRpb25zLmltYWdlUm90YXRpb24sXHJcbiAgICAgICAgICAgIF9vbmx5UGVyY2VudGFnZTogb3B0aW9ucy5pbWFnZVNpemVPbmx5UGVyY2VudGFnZSxcclxuICAgICAgICAgICAgX3JhdGlvOiBmYWxzZSxcclxuICAgICAgICAgICAgX3JhdGlvWDogMSxcclxuICAgICAgICAgICAgX3JhdGlvWTogMSxcclxuICAgICAgICAgICAgX2NhcHRpb25TaG93OiB0cnVlLFxyXG4gICAgICAgICAgICBfY2FwdGlvbkNoZWNrZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBfY2FwdGlvbjogbnVsbCxcclxuICAgICAgICAgICAgY2FwdGlvbkNoZWNrRWw6IG51bGxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvKiogaW1hZ2UgZGlhbG9nICovXHJcbiAgICAgICAgbGV0IGltYWdlX2RpYWxvZyA9IHRoaXMuc2V0RGlhbG9nKGNvcmUpO1xyXG4gICAgICAgIGNvbnRleHRJbWFnZS5tb2RhbCA9IGltYWdlX2RpYWxvZztcclxuICAgICAgICBjb250ZXh0SW1hZ2UuaW1nSW5wdXRGaWxlID0gaW1hZ2VfZGlhbG9nLnF1ZXJ5U2VsZWN0b3IoJy5fc2VfaW1hZ2VfZmlsZScpO1xyXG4gICAgICAgIGNvbnRleHRJbWFnZS5pbWdVcmxGaWxlID0gaW1hZ2VfZGlhbG9nLnF1ZXJ5U2VsZWN0b3IoJy5fc2VfaW1hZ2VfdXJsJyk7XHJcbiAgICAgICAgY29udGV4dEltYWdlLmZvY3VzRWxlbWVudCA9IGNvbnRleHRJbWFnZS5pbWdJbnB1dEZpbGUgfHwgY29udGV4dEltYWdlLmltZ1VybEZpbGU7XHJcbiAgICAgICAgY29udGV4dEltYWdlLmFsdFRleHQgPSBpbWFnZV9kaWFsb2cucXVlcnlTZWxlY3RvcignLl9zZV9pbWFnZV9hbHQnKTtcclxuICAgICAgICBjb250ZXh0SW1hZ2UuY2FwdGlvbkNoZWNrRWwgPSBpbWFnZV9kaWFsb2cucXVlcnlTZWxlY3RvcignLl9zZV9pbWFnZV9jaGVja19jYXB0aW9uJyk7XHJcbiAgICAgICAgY29udGV4dEltYWdlLnByZXZpZXdTcmMgPSBpbWFnZV9kaWFsb2cucXVlcnlTZWxlY3RvcignLl9zZV90YWJfY29udGVudF9pbWFnZSAuc2UtbGluay1wcmV2aWV3Jyk7XHJcblxyXG4gICAgICAgIC8qKiBhZGQgZXZlbnQgbGlzdGVuZXJzICovXHJcbiAgICAgICAgaW1hZ2VfZGlhbG9nLnF1ZXJ5U2VsZWN0b3IoJy5zZS1kaWFsb2ctdGFicycpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vcGVuVGFiLmJpbmQoY29yZSkpO1xyXG4gICAgICAgIGltYWdlX2RpYWxvZy5xdWVyeVNlbGVjdG9yKCdmb3JtJykuYWRkRXZlbnRMaXN0ZW5lcignc3VibWl0JywgdGhpcy5zdWJtaXQuYmluZChjb3JlKSk7XHJcbiAgICAgICAgaWYgKGNvbnRleHRJbWFnZS5pbWdJbnB1dEZpbGUpIGltYWdlX2RpYWxvZy5xdWVyeVNlbGVjdG9yKCcuc2UtZmlsZS1yZW1vdmUnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX3JlbW92ZVNlbGVjdGVkRmlsZXMuYmluZChjb250ZXh0SW1hZ2UuaW1nSW5wdXRGaWxlLCBjb250ZXh0SW1hZ2UuaW1nVXJsRmlsZSwgY29udGV4dEltYWdlLnByZXZpZXdTcmMpKTtcclxuICAgICAgICBpZiAoY29udGV4dEltYWdlLmltZ1VybEZpbGUpIGNvbnRleHRJbWFnZS5pbWdVcmxGaWxlLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgdGhpcy5fb25MaW5rUHJldmlldy5iaW5kKGNvbnRleHRJbWFnZS5wcmV2aWV3U3JjLCBjb250ZXh0SW1hZ2UuX3Zfc3JjLCBvcHRpb25zLmxpbmtQcm90b2NvbCkpO1xyXG4gICAgICAgIGlmIChjb250ZXh0SW1hZ2UuaW1nSW5wdXRGaWxlICYmIGNvbnRleHRJbWFnZS5pbWdVcmxGaWxlKSBjb250ZXh0SW1hZ2UuaW1nSW5wdXRGaWxlLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuX2ZpbGVJbnB1dENoYW5nZS5iaW5kKGNvbnRleHRJbWFnZSkpO1xyXG5cclxuICAgICAgICBjb25zdCBpbWFnZUdhbGxlcnlCdXR0b24gPSBpbWFnZV9kaWFsb2cucXVlcnlTZWxlY3RvcignLl9fc2VfX2dhbGxlcnknKTtcclxuICAgICAgICBpZiAoaW1hZ2VHYWxsZXJ5QnV0dG9uKSBpbWFnZUdhbGxlcnlCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9vcGVuR2FsbGVyeS5iaW5kKGNvcmUpKTtcclxuICAgICAgICBcclxuICAgICAgICBjb250ZXh0SW1hZ2UucHJvcG9ydGlvbiA9IHt9O1xyXG4gICAgICAgIGNvbnRleHRJbWFnZS5pbnB1dFggPSB7fTtcclxuICAgICAgICBjb250ZXh0SW1hZ2UuaW5wdXRZID0ge307XHJcbiAgICAgICAgaWYgKG9wdGlvbnMuaW1hZ2VSZXNpemluZykge1xyXG4gICAgICAgICAgICBjb250ZXh0SW1hZ2UucHJvcG9ydGlvbiA9IGltYWdlX2RpYWxvZy5xdWVyeVNlbGVjdG9yKCcuX3NlX2ltYWdlX2NoZWNrX3Byb3BvcnRpb24nKTtcclxuICAgICAgICAgICAgY29udGV4dEltYWdlLmlucHV0WCA9IGltYWdlX2RpYWxvZy5xdWVyeVNlbGVjdG9yKCcuX3NlX2ltYWdlX3NpemVfeCcpO1xyXG4gICAgICAgICAgICBjb250ZXh0SW1hZ2UuaW5wdXRZID0gaW1hZ2VfZGlhbG9nLnF1ZXJ5U2VsZWN0b3IoJy5fc2VfaW1hZ2Vfc2l6ZV95Jyk7XHJcbiAgICAgICAgICAgIGNvbnRleHRJbWFnZS5pbnB1dFgudmFsdWUgPSBvcHRpb25zLmltYWdlV2lkdGg7XHJcbiAgICAgICAgICAgIGNvbnRleHRJbWFnZS5pbnB1dFkudmFsdWUgPSBvcHRpb25zLmltYWdlSGVpZ2h0O1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29udGV4dEltYWdlLmlucHV0WC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuc2V0SW5wdXRTaXplLmJpbmQoY29yZSwgJ3gnKSk7XHJcbiAgICAgICAgICAgIGNvbnRleHRJbWFnZS5pbnB1dFkuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0aGlzLnNldElucHV0U2l6ZS5iaW5kKGNvcmUsICd5JykpO1xyXG5cclxuICAgICAgICAgICAgY29udGV4dEltYWdlLmlucHV0WC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLnNldFJhdGlvLmJpbmQoY29yZSkpO1xyXG4gICAgICAgICAgICBjb250ZXh0SW1hZ2UuaW5wdXRZLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuc2V0UmF0aW8uYmluZChjb3JlKSk7XHJcbiAgICAgICAgICAgIGNvbnRleHRJbWFnZS5wcm9wb3J0aW9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuc2V0UmF0aW8uYmluZChjb3JlKSk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpbWFnZV9kaWFsb2cucXVlcnlTZWxlY3RvcignLnNlLWRpYWxvZy1idG4tcmV2ZXJ0JykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLnNpemVSZXZlcnQuYmluZChjb3JlKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKiogYXBwZW5kIGh0bWwgKi9cclxuICAgICAgICBjb250ZXh0LmRpYWxvZy5tb2RhbC5hcHBlbmRDaGlsZChpbWFnZV9kaWFsb2cpO1xyXG5cclxuICAgICAgICAvKiogbGluayBldmVudCAqL1xyXG4gICAgICAgIGNvcmUucGx1Z2lucy5hbmNob3IuaW5pdEV2ZW50LmNhbGwoY29yZSwgJ2ltYWdlJywgaW1hZ2VfZGlhbG9nLnF1ZXJ5U2VsZWN0b3IoJy5fc2VfdGFiX2NvbnRlbnRfdXJsJykpO1xyXG4gICAgICAgIGNvbnRleHRJbWFnZS5hbmNob3JDdHggPSBjb3JlLmNvbnRleHQuYW5jaG9yLmNhbGxlci5pbWFnZTtcclxuXHJcbiAgICAgICAgLyoqIGVtcHR5IG1lbW9yeSAqL1xyXG4gICAgICAgIGltYWdlX2RpYWxvZyA9IG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKiBkaWFsb2cgKi9cclxuICAgIHNldERpYWxvZzogZnVuY3Rpb24gKGNvcmUpIHtcclxuICAgICAgICBjb25zdCBvcHRpb24gPSBjb3JlLm9wdGlvbnM7XHJcbiAgICAgICAgY29uc3QgbGFuZyA9IGNvcmUubGFuZztcclxuICAgICAgICBjb25zdCBkaWFsb2cgPSBjb3JlLnV0aWwuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcblxyXG4gICAgICAgIGRpYWxvZy5jbGFzc05hbWUgPSAnc2UtZGlhbG9nLWNvbnRlbnQgc2UtZGlhbG9nLWltYWdlJztcclxuICAgICAgICBkaWFsb2cuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuXHJcbiAgICAgICAgbGV0IGh0bWwgPSAnJyArXHJcbiAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtZGlhbG9nLWhlYWRlclwiPicgK1xyXG4gICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtY29tbWFuZD1cImNsb3NlXCIgY2xhc3M9XCJzZS1idG4gc2UtZGlhbG9nLWNsb3NlXCIgY2xhc3M9XCJjbG9zZVwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIHRpdGxlPVwiJyArIGxhbmcuZGlhbG9nQm94LmNsb3NlICsgJ1wiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgIGNvcmUuaWNvbnMuY2FuY2VsICtcclxuICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nICtcclxuICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInNlLW1vZGFsLXRpdGxlXCI+JyArIGxhbmcuZGlhbG9nQm94LmltYWdlQm94LnRpdGxlICsgJzwvc3Bhbj4nICtcclxuICAgICAgICAgICAgJzwvZGl2PicgK1xyXG4gICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWRpYWxvZy10YWJzXCI+JyArXHJcbiAgICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJfc2VfdGFiX2xpbmsgYWN0aXZlXCIgZGF0YS10YWItbGluaz1cImltYWdlXCI+JyArIGxhbmcudG9vbGJhci5pbWFnZSArICc8L2J1dHRvbj4nICtcclxuICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIl9zZV90YWJfbGlua1wiIGRhdGEtdGFiLWxpbms9XCJ1cmxcIj4nICsgbGFuZy50b29sYmFyLmxpbmsgKyAnPC9idXR0b24+JyArXHJcbiAgICAgICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAgICAgJzxmb3JtIG1ldGhvZD1cInBvc3RcIiBlbmN0eXBlPVwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiPicgK1xyXG4gICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJfc2VfdGFiX2NvbnRlbnQgX3NlX3RhYl9jb250ZW50X2ltYWdlXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1kaWFsb2ctYm9keVwiPjxkaXYgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggZGFzaGVkICNjY2M7XCI+JztcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9uLmltYWdlRmlsZUlucHV0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gJycgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1kaWFsb2ctZm9ybVwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8bGFiZWw+JyArIGxhbmcuZGlhbG9nQm94LmltYWdlQm94LmZpbGUgKyAnPC9sYWJlbD4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWRpYWxvZy1mb3JtLWZpbGVzXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8aW5wdXQgY2xhc3M9XCJzZS1pbnB1dC1mb3JtIF9zZV9pbWFnZV9maWxlXCIgdHlwZT1cImZpbGVcIiBhY2NlcHQ9XCInICsgb3B0aW9uLmltYWdlQWNjZXB0ICsgJ1wiJyArIChvcHRpb24uaW1hZ2VNdWx0aXBsZUZpbGUgPyAnIG11bHRpcGxlPVwibXVsdGlwbGVcIicgOiAnJykgKyAnLz4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic2UtYnRuIHNlLWRpYWxvZy1maWxlcy1lZGdlLWJ1dHRvbiBzZS1maWxlLXJlbW92ZVwiIHRpdGxlPVwiJyArIGxhbmcuY29udHJvbGxlci5yZW1vdmUgKyAnXCI+JyArIGNvcmUuaWNvbnMuY2FuY2VsICsgJzwvYnV0dG9uPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L2Rpdj4nIDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbi5pbWFnZVVybElucHV0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gJycgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1kaWFsb2ctZm9ybVwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8bGFiZWw+JyArIGxhbmcuZGlhbG9nQm94LmltYWdlQm94LnVybCArICc8L2xhYmVsPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtZGlhbG9nLWZvcm0tZmlsZXNcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxpbnB1dCBjbGFzcz1cInNlLWlucHV0LWZvcm0gc2UtaW5wdXQtdXJsIF9zZV9pbWFnZV91cmxcIiB0eXBlPVwidGV4dFwiIC8+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgob3B0aW9uLmltYWdlR2FsbGVyeVVybCAmJiBjb3JlLnBsdWdpbnMuaW1hZ2VHYWxsZXJ5KSA/ICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInNlLWJ0biBzZS1kaWFsb2ctZmlsZXMtZWRnZS1idXR0b24gX19zZV9fZ2FsbGVyeVwiIHRpdGxlPVwiJyArIGxhbmcudG9vbGJhci5pbWFnZUdhbGxlcnkgKyAnXCI+JyArIGNvcmUuaWNvbnMuaW1hZ2VfZ2FsbGVyeSArICc8L2J1dHRvbj4nIDogJycpICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9kaXY+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxwcmUgY2xhc3M9XCJzZS1saW5rLXByZXZpZXdcIj48L3ByZT4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L2Rpdj4nO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBodG1sICs9ICc8L2Rpdj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1kaWFsb2ctZm9ybVwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxsYWJlbD4nICsgbGFuZy5kaWFsb2dCb3guaW1hZ2VCb3guYWx0VGV4dCArICc8L2xhYmVsPjxpbnB1dCBjbGFzcz1cInNlLWlucHV0LWZvcm0gX3NlX2ltYWdlX2FsdFwiIHR5cGU9XCJ0ZXh0XCIgLz4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJzwvZGl2Pic7XHJcblxyXG4gICAgICAgICAgICBpZiAob3B0aW9uLmltYWdlUmVzaXppbmcpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9ubHlQZXJjZW50YWdlID0gb3B0aW9uLmltYWdlU2l6ZU9ubHlQZXJjZW50YWdlO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb25seVBlcmNlbnREaXNwbGF5ID0gb25seVBlcmNlbnRhZ2UgPyAnIHN0eWxlPVwiZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1wiJyA6ICcnO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaGVpZ2h0RGlzcGxheSA9ICFvcHRpb24uaW1hZ2VIZWlnaHRTaG93ID8gJyBzdHlsZT1cImRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcIicgOiAnJztcclxuICAgICAgICAgICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9XCJzZS1kaWFsb2ctZm9ybVwiPic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvbmx5UGVyY2VudGFnZSB8fCAhb3B0aW9uLmltYWdlSGVpZ2h0U2hvdykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAnJyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWRpYWxvZy1zaXplLXRleHRcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGxhYmVsIGNsYXNzPVwic2l6ZS13XCI+JyArIGxhbmcuZGlhbG9nQm94LnNpemUgKyAnPC9sYWJlbD4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L2Rpdj4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAnJyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWRpYWxvZy1zaXplLXRleHRcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGxhYmVsIGNsYXNzPVwic2l6ZS13XCI+JyArIGxhbmcuZGlhbG9nQm94LndpZHRoICsgJzwvbGFiZWw+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxsYWJlbCBjbGFzcz1cInNlLWRpYWxvZy1zaXplLXhcIj4mbmJzcDs8L2xhYmVsPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8bGFiZWwgY2xhc3M9XCJzaXplLWhcIj4nICsgbGFuZy5kaWFsb2dCb3guaGVpZ2h0ICsgJzwvbGFiZWw+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9kaXY+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sICs9ICcnICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8aW5wdXQgY2xhc3M9XCJzZS1pbnB1dC1jb250cm9sIF9zZV9pbWFnZV9zaXplX3hcIiBwbGFjZWhvbGRlcj1cImF1dG9cIicgKyAob25seVBlcmNlbnRhZ2UgPyAnIHR5cGU9XCJudW1iZXJcIiBtaW49XCIxXCInIDogJ3R5cGU9XCJ0ZXh0XCInKSArIChvbmx5UGVyY2VudGFnZSA/ICcgbWF4PVwiMTAwXCInIDogJycpICsgJyAvPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxsYWJlbCBjbGFzcz1cInNlLWRpYWxvZy1zaXplLXhcIicgKyBoZWlnaHREaXNwbGF5ICsgJz4nICsgKG9ubHlQZXJjZW50YWdlID8gJyUnIDogJ3gnKSArICc8L2xhYmVsPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwic2UtaW5wdXQtY29udHJvbCBfc2VfaW1hZ2Vfc2l6ZV95XCIgcGxhY2Vob2xkZXI9XCJhdXRvXCInICsgb25seVBlcmNlbnREaXNwbGF5ICsgKG9ubHlQZXJjZW50YWdlID8gJyBtYXg9XCIxMDBcIicgOiAnJykgKyBoZWlnaHREaXNwbGF5ICsgJy8+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGxhYmVsJyArIG9ubHlQZXJjZW50RGlzcGxheSArIGhlaWdodERpc3BsYXkgKyAnPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cInNlLWRpYWxvZy1idG4tY2hlY2sgX3NlX2ltYWdlX2NoZWNrX3Byb3BvcnRpb25cIiBjaGVja2VkLz4mbmJzcDsnICsgbGFuZy5kaWFsb2dCb3gucHJvcG9ydGlvbiArICc8L2xhYmVsPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRpdGxlPVwiJyArIGxhbmcuZGlhbG9nQm94LnJldmVydEJ1dHRvbiArICdcIiBjbGFzcz1cInNlLWJ0biBzZS1kaWFsb2ctYnRuLXJldmVydFwiIHN0eWxlPVwiZmxvYXQ6IHJpZ2h0O1wiPicgKyBjb3JlLmljb25zLnJldmVydCArICc8L2J1dHRvbj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJzwvZGl2PicgO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBodG1sICs9ICcnICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1kaWFsb2ctZm9ybSBzZS1kaWFsb2ctZm9ybS1mb290ZXJcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwic2UtZGlhbG9nLWJ0bi1jaGVjayBfc2VfaW1hZ2VfY2hlY2tfY2FwdGlvblwiIC8+Jm5ic3A7JyArIGxhbmcuZGlhbG9nQm94LmNhcHRpb24gKyAnPC9sYWJlbD4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJzwvZGl2PicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwiX3NlX3RhYl9jb250ZW50IF9zZV90YWJfY29udGVudF91cmxcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICBjb3JlLmNvbnRleHQuYW5jaG9yLmZvcm1zLmlubmVySFRNTCArXHJcbiAgICAgICAgICAgICAgICAnPC9kaXY+JyArXHJcbiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWRpYWxvZy1mb290ZXJcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPGRpdj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJzxsYWJlbD48aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cInN1bmVkaXRvcl9pbWFnZV9yYWRpb1wiIGNsYXNzPVwic2UtZGlhbG9nLWJ0bi1yYWRpb1wiIHZhbHVlPVwibm9uZVwiIGNoZWNrZWQ+JyArIGxhbmcuZGlhbG9nQm94LmJhc2ljICsgJzwvbGFiZWw+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICc8bGFiZWw+PGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJzdW5lZGl0b3JfaW1hZ2VfcmFkaW9cIiBjbGFzcz1cInNlLWRpYWxvZy1idG4tcmFkaW9cIiB2YWx1ZT1cImxlZnRcIj4nICsgbGFuZy5kaWFsb2dCb3gubGVmdCArICc8L2xhYmVsPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnPGxhYmVsPjxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwic3VuZWRpdG9yX2ltYWdlX3JhZGlvXCIgY2xhc3M9XCJzZS1kaWFsb2ctYnRuLXJhZGlvXCIgdmFsdWU9XCJjZW50ZXJcIj4nICsgbGFuZy5kaWFsb2dCb3guY2VudGVyICsgJzwvbGFiZWw+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICc8bGFiZWw+PGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJzdW5lZGl0b3JfaW1hZ2VfcmFkaW9cIiBjbGFzcz1cInNlLWRpYWxvZy1idG4tcmFkaW9cIiB2YWx1ZT1cInJpZ2h0XCI+JyArIGxhbmcuZGlhbG9nQm94LnJpZ2h0ICsgJzwvbGFiZWw+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzwvZGl2PicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cInNlLWJ0bi1wcmltYXJ5XCIgdGl0bGU9XCInICsgbGFuZy5kaWFsb2dCb3guc3VibWl0QnV0dG9uICsgJ1wiPjxzcGFuPicgKyBsYW5nLmRpYWxvZ0JveC5zdWJtaXRCdXR0b24gKyAnPC9zcGFuPjwvYnV0dG9uPicgK1xyXG4gICAgICAgICAgICAgICAgJzwvZGl2PicgK1xyXG4gICAgICAgICAgICAnPC9mb3JtPic7XHJcblxyXG4gICAgICAgIGRpYWxvZy5pbm5lckhUTUwgPSBodG1sO1xyXG5cclxuICAgICAgICByZXR1cm4gZGlhbG9nO1xyXG4gICAgfSxcclxuXHJcbiAgICBfZmlsZUlucHV0Q2hhbmdlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmltZ0lucHV0RmlsZS52YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmltZ1VybEZpbGUucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xyXG4gICAgICAgICAgICB0aGlzLnByZXZpZXdTcmMuc3R5bGUudGV4dERlY29yYXRpb24gPSAnJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmltZ1VybEZpbGUuc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsIHRydWUpO1xyXG4gICAgICAgICAgICB0aGlzLnByZXZpZXdTcmMuc3R5bGUudGV4dERlY29yYXRpb24gPSAnbGluZS10aHJvdWdoJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIF9yZW1vdmVTZWxlY3RlZEZpbGVzOiBmdW5jdGlvbiAodXJsSW5wdXQsIHByZXZpZXdTcmMpIHtcclxuICAgICAgICB0aGlzLnZhbHVlID0gJyc7XHJcbiAgICAgICAgaWYgKHVybElucHV0KSB7XHJcbiAgICAgICAgICAgIHVybElucHV0LnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcclxuICAgICAgICAgICAgcHJldmlld1NyYy5zdHlsZS50ZXh0RGVjb3JhdGlvbiA9ICcnO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX29wZW5HYWxsZXJ5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5jYWxsUGx1Z2luKCdpbWFnZUdhbGxlcnknLCB0aGlzLnBsdWdpbnMuaW1hZ2VHYWxsZXJ5Lm9wZW4uYmluZCh0aGlzLCB0aGlzLnBsdWdpbnMuaW1hZ2UuX3NldFVybElucHV0LmJpbmQodGhpcy5jb250ZXh0LmltYWdlKSksIG51bGwpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfc2V0VXJsSW5wdXQ6IGZ1bmN0aW9uICh0YXJnZXQpIHtcclxuICAgICAgICB0aGlzLmFsdFRleHQudmFsdWUgPSB0YXJnZXQuYWx0O1xyXG4gICAgICAgIHRoaXMuX3Zfc3JjLl9saW5rVmFsdWUgPSB0aGlzLnByZXZpZXdTcmMudGV4dENvbnRlbnQgPSB0aGlzLmltZ1VybEZpbGUudmFsdWUgPSB0YXJnZXQuc3JjO1xyXG4gICAgICAgIHRoaXMuaW1nVXJsRmlsZS5mb2N1cygpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfb25MaW5rUHJldmlldzogZnVuY3Rpb24gKGNvbnRleHQsIHByb3RvY29sLCBlKSB7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSBlLnRhcmdldC52YWx1ZS50cmltKCk7XHJcbiAgICAgICAgY29udGV4dC5fbGlua1ZhbHVlID0gdGhpcy50ZXh0Q29udGVudCA9ICF2YWx1ZSA/ICcnIDogKHByb3RvY29sICYmIHZhbHVlLmluZGV4T2YoJzovLycpID09PSAtMSAmJiB2YWx1ZS5pbmRleE9mKCcjJykgIT09IDApID8gcHJvdG9jb2wgKyB2YWx1ZSA6IHZhbHVlLmluZGV4T2YoJzovLycpID09PSAtMSA/ICcvJyArIHZhbHVlIDogdmFsdWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQE92ZXJyaWRlIEBSZXF1aXJlZCBmaWxlTWFuYWdlclxyXG4gICAgICovXHJcbiAgICBmaWxlVGFnczogWydpbWcnXSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBPdmVycmlkZSBjb3JlLCBmaWxlTWFuYWdlciwgcmVzaXppbmdcclxuICAgICAqIEBkZXNjcmlwdGlvbiBJdCBpcyBjYWxsZWQgZnJvbSBjb3JlLnNlbGVjdENvbXBvbmVudC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCBUYXJnZXQgZWxlbWVudFxyXG4gICAgICovXHJcbiAgICBzZWxlY3Q6IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLmltYWdlLm9uTW9kaWZ5TW9kZS5jYWxsKHRoaXMsIGVsZW1lbnQsIHRoaXMucGx1Z2lucy5yZXNpemluZy5jYWxsX2NvbnRyb2xsZXJfcmVzaXplLmNhbGwodGhpcywgZWxlbWVudCwgJ2ltYWdlJykpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBPdmVycmlkZSBmaWxlTWFuYWdlciwgcmVzaXppbmdcclxuICAgICAqL1xyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICBjb25zdCBpbWFnZUVsID0gZWxlbWVudCB8fCB0aGlzLmNvbnRleHQuaW1hZ2UuX2VsZW1lbnQ7XHJcbiAgICAgICAgY29uc3QgaW1hZ2VDb250YWluZXIgPSB0aGlzLnV0aWwuZ2V0UGFyZW50RWxlbWVudChpbWFnZUVsLCB0aGlzLnV0aWwuaXNNZWRpYUNvbXBvbmVudCkgfHwgaW1hZ2VFbDtcclxuICAgICAgICBjb25zdCBkYXRhSW5kZXggPSBpbWFnZUVsLmdldEF0dHJpYnV0ZSgnZGF0YS1pbmRleCcpICogMTtcclxuICAgICAgICBsZXQgZm9jdXNFbCA9IChpbWFnZUNvbnRhaW5lci5wcmV2aW91c0VsZW1lbnRTaWJsaW5nIHx8IGltYWdlQ29udGFpbmVyLm5leHRFbGVtZW50U2libGluZyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3QgZW1wdHlEaXYgPSBpbWFnZUNvbnRhaW5lci5wYXJlbnROb2RlO1xyXG4gICAgICAgIHRoaXMudXRpbC5yZW1vdmVJdGVtKGltYWdlQ29udGFpbmVyKTtcclxuICAgICAgICB0aGlzLnBsdWdpbnMuaW1hZ2UuaW5pdC5jYWxsKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuY29udHJvbGxlcnNPZmYoKTtcclxuXHJcbiAgICAgICAgaWYgKGVtcHR5RGl2ICE9PSB0aGlzLmNvbnRleHQuZWxlbWVudC53eXNpd3lnKSB0aGlzLnV0aWwucmVtb3ZlSXRlbUFsbFBhcmVudHMoZW1wdHlEaXYsIGZ1bmN0aW9uIChjdXJyZW50KSB7IHJldHVybiBjdXJyZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAwOyB9LCBudWxsKTtcclxuXHJcbiAgICAgICAgLy8gZm9jdXNcclxuICAgICAgICB0aGlzLmZvY3VzRWRnZShmb2N1c0VsKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBldmVudFxyXG4gICAgICAgIHRoaXMucGx1Z2lucy5maWxlTWFuYWdlci5kZWxldGVJbmZvLmNhbGwodGhpcywgJ2ltYWdlJywgZGF0YUluZGV4LCB0aGlzLmZ1bmN0aW9ucy5vbkltYWdlVXBsb2FkKTtcclxuXHJcbiAgICAgICAgLy8gaGlzdG9yeSBzdGFja1xyXG4gICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoKGZhbHNlKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAUmVxdWlyZWQgQE92ZXJyaWRlIGRpYWxvZ1xyXG4gICAgICovXHJcbiAgICBvbjogZnVuY3Rpb24gKHVwZGF0ZSkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHRJbWFnZSA9IHRoaXMuY29udGV4dC5pbWFnZTtcclxuICAgICAgICBcclxuICAgICAgICBpZiAoIXVwZGF0ZSkge1xyXG4gICAgICAgICAgICBjb250ZXh0SW1hZ2UuaW5wdXRYLnZhbHVlID0gY29udGV4dEltYWdlLl9vcmlnaW5fdyA9IHRoaXMub3B0aW9ucy5pbWFnZVdpZHRoID09PSBjb250ZXh0SW1hZ2UuX2RlZmF1bHRTaXplWCA/ICcnIDogdGhpcy5vcHRpb25zLmltYWdlV2lkdGg7XHJcbiAgICAgICAgICAgIGNvbnRleHRJbWFnZS5pbnB1dFkudmFsdWUgPSBjb250ZXh0SW1hZ2UuX29yaWdpbl9oID0gdGhpcy5vcHRpb25zLmltYWdlSGVpZ2h0ID09PSBjb250ZXh0SW1hZ2UuX2RlZmF1bHRTaXplWSA/ICcnIDogdGhpcy5vcHRpb25zLmltYWdlSGVpZ2h0O1xyXG4gICAgICAgICAgICBpZiAoY29udGV4dEltYWdlLmltZ0lucHV0RmlsZSAmJiB0aGlzLm9wdGlvbnMuaW1hZ2VNdWx0aXBsZUZpbGUpIGNvbnRleHRJbWFnZS5pbWdJbnB1dEZpbGUuc2V0QXR0cmlidXRlKCdtdWx0aXBsZScsICdtdWx0aXBsZScpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChjb250ZXh0SW1hZ2UuaW1nSW5wdXRGaWxlICYmIHRoaXMub3B0aW9ucy5pbWFnZU11bHRpcGxlRmlsZSkgY29udGV4dEltYWdlLmltZ0lucHV0RmlsZS5yZW1vdmVBdHRyaWJ1dGUoJ211bHRpcGxlJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucGx1Z2lucy5hbmNob3Iub24uY2FsbCh0aGlzLCBjb250ZXh0SW1hZ2UuYW5jaG9yQ3R4LCB1cGRhdGUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBSZXF1aXJlZCBAT3ZlcnJpZGUgZGlhbG9nXHJcbiAgICAgKi9cclxuICAgIG9wZW46IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLnBsdWdpbnMuZGlhbG9nLm9wZW4uY2FsbCh0aGlzLCAnaW1hZ2UnLCAnaW1hZ2UnID09PSB0aGlzLmN1cnJlbnRDb250cm9sbGVyTmFtZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIG9wZW5UYWI6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgY29uc3QgbW9kYWwgPSB0aGlzLmNvbnRleHQuaW1hZ2UubW9kYWw7XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0RWxlbWVudCA9IChlID09PSAnaW5pdCcgPyBtb2RhbC5xdWVyeVNlbGVjdG9yKCcuX3NlX3RhYl9saW5rJykgOiBlLnRhcmdldCk7XHJcblxyXG4gICAgICAgIGlmICghL15CVVRUT04kL2kudGVzdCh0YXJnZXRFbGVtZW50LnRhZ05hbWUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIERlY2xhcmUgYWxsIHZhcmlhYmxlc1xyXG4gICAgICAgIGNvbnN0IHRhYk5hbWUgPSB0YXJnZXRFbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS10YWItbGluaycpO1xyXG4gICAgICAgIGNvbnN0IGNvbnRlbnRDbGFzc05hbWUgPSAnX3NlX3RhYl9jb250ZW50JztcclxuICAgICAgICBsZXQgaSwgdGFiQ29udGVudCwgdGFiTGlua3M7XHJcblxyXG4gICAgICAgIC8vIEdldCBhbGwgZWxlbWVudHMgd2l0aCBjbGFzcz1cInRhYmNvbnRlbnRcIiBhbmQgaGlkZSB0aGVtXHJcbiAgICAgICAgdGFiQ29udGVudCA9IG1vZGFsLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY29udGVudENsYXNzTmFtZSk7XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRhYkNvbnRlbnQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGFiQ29udGVudFtpXS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gR2V0IGFsbCBlbGVtZW50cyB3aXRoIGNsYXNzPVwidGFibGlua3NcIiBhbmQgcmVtb3ZlIHRoZSBjbGFzcyBcImFjdGl2ZVwiXHJcbiAgICAgICAgdGFiTGlua3MgPSBtb2RhbC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdfc2VfdGFiX2xpbmsnKTtcclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGFiTGlua3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy51dGlsLnJlbW92ZUNsYXNzKHRhYkxpbmtzW2ldLCAnYWN0aXZlJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBTaG93IHRoZSBjdXJyZW50IHRhYiwgYW5kIGFkZCBhbiBcImFjdGl2ZVwiIGNsYXNzIHRvIHRoZSBidXR0b24gdGhhdCBvcGVuZWQgdGhlIHRhYlxyXG4gICAgICAgIG1vZGFsLnF1ZXJ5U2VsZWN0b3IoJy4nICsgY29udGVudENsYXNzTmFtZSArICdfJyArIHRhYk5hbWUpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgIHRoaXMudXRpbC5hZGRDbGFzcyh0YXJnZXRFbGVtZW50LCAnYWN0aXZlJyk7XHJcblxyXG4gICAgICAgIC8vIGZvY3VzXHJcbiAgICAgICAgaWYgKHRhYk5hbWUgPT09ICdpbWFnZScgJiYgdGhpcy5jb250ZXh0LmltYWdlLmZvY3VzRWxlbWVudCkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuaW1hZ2UuZm9jdXNFbGVtZW50LmZvY3VzKCk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0YWJOYW1lID09PSAndXJsJykge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuYW5jaG9yLmNhbGxlci5pbWFnZS51cmxJbnB1dC5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICBzdWJtaXQ6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgY29uc3QgY29udGV4dEltYWdlID0gdGhpcy5jb250ZXh0LmltYWdlO1xyXG4gICAgICAgIGNvbnN0IGltYWdlUGx1Z2luID0gdGhpcy5wbHVnaW5zLmltYWdlO1xyXG5cclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICAgICAgY29udGV4dEltYWdlLl9hbHRUZXh0ID0gY29udGV4dEltYWdlLmFsdFRleHQudmFsdWU7XHJcbiAgICAgICAgY29udGV4dEltYWdlLl9hbGlnbiA9IGNvbnRleHRJbWFnZS5tb2RhbC5xdWVyeVNlbGVjdG9yKCdpbnB1dFtuYW1lPVwic3VuZWRpdG9yX2ltYWdlX3JhZGlvXCJdOmNoZWNrZWQnKS52YWx1ZTtcclxuICAgICAgICBjb250ZXh0SW1hZ2UuX2NhcHRpb25DaGVja2VkID0gY29udGV4dEltYWdlLmNhcHRpb25DaGVja0VsLmNoZWNrZWQ7XHJcbiAgICAgICAgaWYgKGNvbnRleHRJbWFnZS5fcmVzaXppbmcpIGNvbnRleHRJbWFnZS5fcHJvcG9ydGlvbkNoZWNrZWQgPSBjb250ZXh0SW1hZ2UucHJvcG9ydGlvbi5jaGVja2VkO1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0LmRpYWxvZy51cGRhdGVNb2RhbCkge1xyXG4gICAgICAgICAgICAgICAgaW1hZ2VQbHVnaW4udXBkYXRlX2ltYWdlLmNhbGwodGhpcywgZmFsc2UsIHRydWUsIGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYgKGNvbnRleHRJbWFnZS5pbWdJbnB1dEZpbGUgJiYgY29udGV4dEltYWdlLmltZ0lucHV0RmlsZS5maWxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dMb2FkaW5nKCk7XHJcbiAgICAgICAgICAgICAgICBpbWFnZVBsdWdpbi5zdWJtaXRBY3Rpb24uY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQuaW1hZ2UuaW1nSW5wdXRGaWxlLmZpbGVzKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0SW1hZ2UuaW1nVXJsRmlsZSAmJiBjb250ZXh0SW1hZ2UuX3Zfc3JjLl9saW5rVmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93TG9hZGluZygpO1xyXG4gICAgICAgICAgICAgICAgaW1hZ2VQbHVnaW4ub25SZW5kZXJfaW1nVXJsLmNhbGwodGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICB0aGlzLmNsb3NlTG9hZGluZygpO1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvcignW1NVTkVESVRPUi5pbWFnZS5zdWJtaXQuZmFpbF0gY2F1c2UgOiBcIicgKyBlcnJvci5tZXNzYWdlICsgJ1wiJyk7XHJcbiAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmRpYWxvZy5jbG9zZS5jYWxsKHRoaXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICBzdWJtaXRBY3Rpb246IGZ1bmN0aW9uIChmaWxlTGlzdCkge1xyXG4gICAgICAgIGlmIChmaWxlTGlzdC5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IGZpbGVTaXplID0gMDtcclxuICAgICAgICBsZXQgZmlsZXMgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gZmlsZUxpc3QubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKC9pbWFnZS9pLnRlc3QoZmlsZUxpc3RbaV0udHlwZSkpIHtcclxuICAgICAgICAgICAgICAgIGZpbGVzLnB1c2goZmlsZUxpc3RbaV0pO1xyXG4gICAgICAgICAgICAgICAgZmlsZVNpemUgKz0gZmlsZUxpc3RbaV0uc2l6ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbGltaXRTaXplID0gdGhpcy5vcHRpb25zLmltYWdlVXBsb2FkU2l6ZUxpbWl0O1xyXG4gICAgICAgIGlmIChsaW1pdFNpemUgPiAwKSB7XHJcbiAgICAgICAgICAgIGxldCBpbmZvU2l6ZSA9IDA7XHJcbiAgICAgICAgICAgIGNvbnN0IGltYWdlc0luZm8gPSB0aGlzLmNvbnRleHQuaW1hZ2UuX2luZm9MaXN0O1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaW1hZ2VzSW5mby5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaW5mb1NpemUgKz0gaW1hZ2VzSW5mb1tpXS5zaXplICogMTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKChmaWxlU2l6ZSArIGluZm9TaXplKSA+IGxpbWl0U2l6ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZUxvYWRpbmcoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVyciA9ICdbU1VORURJVE9SLmltYWdlVXBsb2FkLmZhaWxdIFNpemUgb2YgdXBsb2FkYWJsZSB0b3RhbCBpbWFnZXM6ICcgKyAobGltaXRTaXplLzEwMDApICsgJ0tCJztcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5mdW5jdGlvbnMub25JbWFnZVVwbG9hZEVycm9yICE9PSAnZnVuY3Rpb24nIHx8IHRoaXMuZnVuY3Rpb25zLm9uSW1hZ2VVcGxvYWRFcnJvcihlcnIsIHsgJ2xpbWl0U2l6ZSc6IGxpbWl0U2l6ZSwgJ2N1cnJlbnRTaXplJzogaW5mb1NpemUsICd1cGxvYWRTaXplJzogZmlsZVNpemUgfSwgdGhpcykpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZ1bmN0aW9ucy5ub3RpY2VPcGVuKGVycik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGNvbnRleHRJbWFnZSA9IHRoaXMuY29udGV4dC5pbWFnZTtcclxuICAgICAgICBjb250ZXh0SW1hZ2UuX3VwbG9hZEZpbGVMZW5ndGggPSBmaWxlcy5sZW5ndGg7XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3QgYW5jaG9yID0gdGhpcy5wbHVnaW5zLmFuY2hvci5jcmVhdGVBbmNob3IuY2FsbCh0aGlzLCBjb250ZXh0SW1hZ2UuYW5jaG9yQ3R4LCB0cnVlKTtcclxuICAgICAgICBjb25zdCBpbmZvID0ge1xyXG4gICAgICAgICAgICBhbmNob3I6IGFuY2hvcixcclxuICAgICAgICAgICAgaW5wdXRXaWR0aDogY29udGV4dEltYWdlLmlucHV0WC52YWx1ZSxcclxuICAgICAgICAgICAgaW5wdXRIZWlnaHQ6IGNvbnRleHRJbWFnZS5pbnB1dFkudmFsdWUsXHJcbiAgICAgICAgICAgIGFsaWduOiBjb250ZXh0SW1hZ2UuX2FsaWduLFxyXG4gICAgICAgICAgICBpc1VwZGF0ZTogdGhpcy5jb250ZXh0LmRpYWxvZy51cGRhdGVNb2RhbCxcclxuICAgICAgICAgICAgZWxlbWVudDogY29udGV4dEltYWdlLl9lbGVtZW50XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZ1bmN0aW9ucy5vbkltYWdlVXBsb2FkQmVmb3JlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZnVuY3Rpb25zLm9uSW1hZ2VVcGxvYWRCZWZvcmUoZmlsZXMsIGluZm8sIHRoaXMsIGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGF0YSAmJiB0aGlzLl93LkFycmF5LmlzQXJyYXkoZGF0YS5yZXN1bHQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmltYWdlLnJlZ2lzdGVyLmNhbGwodGhpcywgaW5mbywgZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy5pbWFnZS51cGxvYWQuY2FsbCh0aGlzLCBpbmZvLCBkYXRhKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAndW5kZWZpbmVkJykgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAoIXJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZUxvYWRpbmcoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5fdy5BcnJheS5pc0FycmF5KHJlc3VsdCkgJiYgcmVzdWx0Lmxlbmd0aCA+IDApIGZpbGVzID0gcmVzdWx0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLmltYWdlLnVwbG9hZC5jYWxsKHRoaXMsIGluZm8sIGZpbGVzKTtcclxuICAgIH0sXHJcblxyXG4gICAgZXJyb3I6IGZ1bmN0aW9uIChtZXNzYWdlLCByZXNwb25zZSkge1xyXG4gICAgICAgIHRoaXMuY2xvc2VMb2FkaW5nKCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZ1bmN0aW9ucy5vbkltYWdlVXBsb2FkRXJyb3IgIT09ICdmdW5jdGlvbicgfHwgdGhpcy5mdW5jdGlvbnMub25JbWFnZVVwbG9hZEVycm9yKG1lc3NhZ2UsIHJlc3BvbnNlLCB0aGlzKSkge1xyXG4gICAgICAgICAgICB0aGlzLmZ1bmN0aW9ucy5ub3RpY2VPcGVuKG1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvcignW1NVTkVESVRPUi5wbHVnaW4uaW1hZ2UuZXJyb3JdIHJlc3BvbnNlOiAnICsgbWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICB1cGxvYWQ6IGZ1bmN0aW9uIChpbmZvLCBmaWxlcykge1xyXG4gICAgICAgIGlmICghZmlsZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5jbG9zZUxvYWRpbmcoKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZW9mIGZpbGVzID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMuaW1hZ2UuZXJyb3IuY2FsbCh0aGlzLCBmaWxlcywgbnVsbCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGltYWdlVXBsb2FkVXJsID0gdGhpcy5vcHRpb25zLmltYWdlVXBsb2FkVXJsO1xyXG4gICAgICAgIGNvbnN0IGZpbGVzTGVuID0gdGhpcy5jb250ZXh0LmRpYWxvZy51cGRhdGVNb2RhbCA/IDEgOiBmaWxlcy5sZW5ndGg7XHJcblxyXG4gICAgICAgIC8vIHNlcnZlciB1cGxvYWRcclxuICAgICAgICBpZiAodHlwZW9mIGltYWdlVXBsb2FkVXJsID09PSAnc3RyaW5nJyAmJiBpbWFnZVVwbG9hZFVybC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsZXNMZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdmaWxlLScgKyBpLCBmaWxlc1tpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmZpbGVNYW5hZ2VyLnVwbG9hZC5jYWxsKHRoaXMsIGltYWdlVXBsb2FkVXJsLCB0aGlzLm9wdGlvbnMuaW1hZ2VVcGxvYWRIZWFkZXIsIGZvcm1EYXRhLCB0aGlzLnBsdWdpbnMuaW1hZ2UuY2FsbEJhY2tfaW1nVXBsb2FkLmJpbmQodGhpcywgaW5mbyksIHRoaXMuZnVuY3Rpb25zLm9uSW1hZ2VVcGxvYWRFcnJvcik7XHJcbiAgICAgICAgfSBlbHNlIHsgLy8gYmFzZTY0XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5pbWFnZS5zZXR1cF9yZWFkZXIuY2FsbCh0aGlzLCBmaWxlcywgaW5mby5hbmNob3IsIGluZm8uaW5wdXRXaWR0aCwgaW5mby5pbnB1dEhlaWdodCwgaW5mby5hbGlnbiwgZmlsZXNMZW4sIGluZm8uaXNVcGRhdGUpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgY2FsbEJhY2tfaW1nVXBsb2FkOiBmdW5jdGlvbiAoaW5mbywgeG1sSHR0cCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5mdW5jdGlvbnMuaW1hZ2VVcGxvYWRIYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnVuY3Rpb25zLmltYWdlVXBsb2FkSGFuZGxlcih4bWxIdHRwLCBpbmZvLCB0aGlzKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IEpTT04ucGFyc2UoeG1sSHR0cC5yZXNwb25zZVRleHQpO1xyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UuZXJyb3JNZXNzYWdlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnMuaW1hZ2UuZXJyb3IuY2FsbCh0aGlzLCByZXNwb25zZS5lcnJvck1lc3NhZ2UsIHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy5pbWFnZS5yZWdpc3Rlci5jYWxsKHRoaXMsIGluZm8sIHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgcmVnaXN0ZXI6IGZ1bmN0aW9uIChpbmZvLCByZXNwb25zZSkge1xyXG4gICAgICAgIGNvbnN0IGZpbGVMaXN0ID0gcmVzcG9uc2UucmVzdWx0O1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gZmlsZUxpc3QubGVuZ3RoLCBmaWxlOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgZmlsZSA9IHsgbmFtZTogZmlsZUxpc3RbaV0ubmFtZSwgc2l6ZTogZmlsZUxpc3RbaV0uc2l6ZSB9O1xyXG4gICAgICAgICAgICBpZiAoaW5mby5pc1VwZGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmltYWdlLnVwZGF0ZV9zcmMuY2FsbCh0aGlzLCBmaWxlTGlzdFtpXS51cmwsIGluZm8uZWxlbWVudCwgZmlsZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy5pbWFnZS5jcmVhdGVfaW1hZ2UuY2FsbCh0aGlzLCBmaWxlTGlzdFtpXS51cmwsIGluZm8uYW5jaG9yLCBpbmZvLmlucHV0V2lkdGgsIGluZm8uaW5wdXRIZWlnaHQsIGluZm8uYWxpZ24sIGZpbGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuY2xvc2VMb2FkaW5nKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIHNldHVwX3JlYWRlcjogZnVuY3Rpb24gKGZpbGVzLCBhbmNob3IsIHdpZHRoLCBoZWlnaHQsIGFsaWduLCBmaWxlc0xlbiwgaXNVcGRhdGUpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuaW1hZ2UuYmFzZTY0UmVuZGVySW5kZXggPSBmaWxlc0xlbjtcclxuICAgICAgICAgICAgY29uc3Qgd0ZpbGVSZWFkZXIgPSB0aGlzLl93LkZpbGVSZWFkZXI7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVzU3RhY2sgPSBbZmlsZXNMZW5dO1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuaW1hZ2UuaW5wdXRYLnZhbHVlID0gd2lkdGg7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5pbWFnZS5pbnB1dFkudmFsdWUgPSBoZWlnaHQ7XHJcbiAgICBcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIHJlYWRlciwgZmlsZTsgaSA8IGZpbGVzTGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHJlYWRlciA9IG5ldyB3RmlsZVJlYWRlcigpO1xyXG4gICAgICAgICAgICAgICAgZmlsZSA9IGZpbGVzW2ldO1xyXG4gICAgXHJcbiAgICAgICAgICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24gKHJlYWRlciwgdXBkYXRlLCB1cGRhdGVFbGVtZW50LCBmaWxlLCBpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZpbGVzU3RhY2tbaW5kZXhdID0geyByZXN1bHQ6IHJlYWRlci5yZXN1bHQsIGZpbGU6IGZpbGUgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKC0tdGhpcy5jb250ZXh0LmltYWdlLmJhc2U2NFJlbmRlckluZGV4ID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy5pbWFnZS5vblJlbmRlcl9pbWdCYXNlNjQuY2FsbCh0aGlzLCB1cGRhdGUsIGZpbGVzU3RhY2ssIHVwZGF0ZUVsZW1lbnQsIGFuY2hvciwgd2lkdGgsIGhlaWdodCwgYWxpZ24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlTG9hZGluZygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzLCByZWFkZXIsIGlzVXBkYXRlLCB0aGlzLmNvbnRleHQuaW1hZ2UuX2VsZW1lbnQsIGZpbGUsIGkpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNsb3NlTG9hZGluZygpO1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvcignW1NVTkVESVRPUi5pbWFnZS5zZXR1cF9yZWFkZXIuZmFpbF0gY2F1c2UgOiBcIicgKyBlLm1lc3NhZ2UgKyAnXCInKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIG9uUmVuZGVyX2ltZ0Jhc2U2NDogZnVuY3Rpb24gKHVwZGF0ZSwgZmlsZXNTdGFjaywgdXBkYXRlRWxlbWVudCwgYW5jaG9yLCB3aWR0aCwgaGVpZ2h0LCBhbGlnbikge1xyXG4gICAgICAgIGNvbnN0IHVwZGF0ZU1ldGhvZCA9IHRoaXMucGx1Z2lucy5pbWFnZS51cGRhdGVfc3JjO1xyXG4gICAgICAgIGNvbnN0IGNyZWF0ZU1ldGhvZCA9IHRoaXMucGx1Z2lucy5pbWFnZS5jcmVhdGVfaW1hZ2U7XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGZpbGVzU3RhY2subGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHVwZGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmltYWdlLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1maWxlLW5hbWUnLCBmaWxlc1N0YWNrW2ldLmZpbGUubmFtZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaW1hZ2UuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLWZpbGUtc2l6ZScsIGZpbGVzU3RhY2tbaV0uZmlsZS5zaXplKTtcclxuICAgICAgICAgICAgICAgIHVwZGF0ZU1ldGhvZC5jYWxsKHRoaXMsIGZpbGVzU3RhY2tbaV0ucmVzdWx0LCB1cGRhdGVFbGVtZW50LCBmaWxlc1N0YWNrW2ldLmZpbGUpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY3JlYXRlTWV0aG9kLmNhbGwodGhpcywgZmlsZXNTdGFja1tpXS5yZXN1bHQsIGFuY2hvciwgd2lkdGgsIGhlaWdodCwgYWxpZ24sIGZpbGVzU3RhY2tbaV0uZmlsZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIG9uUmVuZGVyX2ltZ1VybDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHRJbWFnZSA9IHRoaXMuY29udGV4dC5pbWFnZTtcclxuICAgICAgICBpZiAoY29udGV4dEltYWdlLl92X3NyYy5fbGlua1ZhbHVlLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBmaWxlID0ge25hbWU6IGNvbnRleHRJbWFnZS5fdl9zcmMuX2xpbmtWYWx1ZS5zcGxpdCgnLycpLnBvcCgpLCBzaXplOiAwfTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY29udGV4dC5kaWFsb2cudXBkYXRlTW9kYWwpIHRoaXMucGx1Z2lucy5pbWFnZS51cGRhdGVfc3JjLmNhbGwodGhpcywgY29udGV4dEltYWdlLl92X3NyYy5fbGlua1ZhbHVlLCBjb250ZXh0SW1hZ2UuX2VsZW1lbnQsIGZpbGUpO1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMucGx1Z2lucy5pbWFnZS5jcmVhdGVfaW1hZ2UuY2FsbCh0aGlzLCBjb250ZXh0SW1hZ2UuX3Zfc3JjLl9saW5rVmFsdWUsIHRoaXMucGx1Z2lucy5hbmNob3IuY3JlYXRlQW5jaG9yLmNhbGwodGhpcywgY29udGV4dEltYWdlLmFuY2hvckN0eCwgdHJ1ZSksIGNvbnRleHRJbWFnZS5pbnB1dFgudmFsdWUsIGNvbnRleHRJbWFnZS5pbnB1dFkudmFsdWUsIGNvbnRleHRJbWFnZS5fYWxpZ24sIGZpbGUpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ1tTVU5FRElUT1IuaW1hZ2UuVVJMUmVuZGVyaW5nLmZhaWxdIGNhdXNlIDogXCInICsgZS5tZXNzYWdlICsgJ1wiJyk7XHJcbiAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgdGhpcy5jbG9zZUxvYWRpbmcoKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIG9uUmVuZGVyX2xpbms6IGZ1bmN0aW9uIChpbWdUYWcsIGFuY2hvcikge1xyXG4gICAgICAgIGlmIChhbmNob3IpIHtcclxuICAgICAgICAgICAgYW5jaG9yLnNldEF0dHJpYnV0ZSgnZGF0YS1pbWFnZS1saW5rJywgJ2ltYWdlJyk7XHJcbiAgICAgICAgICAgIGltZ1RhZy5zZXRBdHRyaWJ1dGUoJ2RhdGEtaW1hZ2UtbGluaycsIGFuY2hvci5ocmVmKTtcclxuICAgICAgICAgICAgYW5jaG9yLmFwcGVuZENoaWxkKGltZ1RhZyk7XHJcbiAgICAgICAgICAgIHJldHVybiBhbmNob3I7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gaW1nVGFnO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBPdmVycmlkZSByZXNpemluZ1xyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHh5ICd4Jzogd2lkdGgsICd5JzogaGVpZ2h0XHJcbiAgICAgKiBAcGFyYW0ge0tleWJvYXJkRXZlbnR9IGUgRXZlbnQgb2JqZWN0XHJcbiAgICAgKi9cclxuICAgIHNldElucHV0U2l6ZTogZnVuY3Rpb24gKHh5LCBlKSB7XHJcbiAgICAgICAgaWYgKGUgJiYgZS5rZXlDb2RlID09PSAzMikge1xyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucGx1Z2lucy5yZXNpemluZy5fbW9kdWxlX3NldElucHV0U2l6ZS5jYWxsKHRoaXMsIHRoaXMuY29udGV4dC5pbWFnZSwgeHkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBPdmVycmlkZSByZXNpemluZ1xyXG4gICAgICovXHJcbiAgICBzZXRSYXRpbzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMucGx1Z2lucy5yZXNpemluZy5fbW9kdWxlX3NldFJhdGlvLmNhbGwodGhpcywgdGhpcy5jb250ZXh0LmltYWdlKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAT3ZlcnJpZGUgZmlsZU1hbmFnZXJcclxuICAgICAqL1xyXG4gICAgY2hlY2tGaWxlSW5mbzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnN0IGltYWdlUGx1Z2luID0gdGhpcy5wbHVnaW5zLmltYWdlO1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHRJbWFnZSA9IHRoaXMuY29udGV4dC5pbWFnZTtcclxuXHJcbiAgICAgICAgY29uc3QgbW9kaWZ5SGFuZGxlciA9IGZ1bmN0aW9uICh0YWcpIHtcclxuICAgICAgICAgICAgaW1hZ2VQbHVnaW4ub25Nb2RpZnlNb2RlLmNhbGwodGhpcywgdGFnLCBudWxsKTtcclxuICAgICAgICAgICAgaW1hZ2VQbHVnaW4ub3Blbk1vZGlmeS5jYWxsKHRoaXMsIHRydWUpO1xyXG4gICAgICAgICAgICAvLyBnZXQgc2l6ZVxyXG4gICAgICAgICAgICBjb250ZXh0SW1hZ2UuaW5wdXRYLnZhbHVlID0gY29udGV4dEltYWdlLl9vcmlnaW5fdztcclxuICAgICAgICAgICAgY29udGV4dEltYWdlLmlucHV0WS52YWx1ZSA9IGNvbnRleHRJbWFnZS5fb3JpZ2luX2g7XHJcbiAgICAgICAgICAgIC8vIGdldCBhbGlnblxyXG4gICAgICAgICAgICBjb25zdCBmb3JtYXQgPSB0aGlzLnV0aWwuZ2V0Rm9ybWF0RWxlbWVudCh0YWcpO1xyXG4gICAgICAgICAgICBpZiAoZm9ybWF0KSBjb250ZXh0SW1hZ2UuX2FsaWduID0gZm9ybWF0LnN0eWxlLnRleHRBbGlnbiB8fCBmb3JtYXQuc3R5bGUuZmxvYXQ7XHJcbiAgICAgICAgICAgIC8vIGxpbmtcclxuICAgICAgICAgICAgY29uc3QgbGluayA9IHRoaXMudXRpbC5nZXRQYXJlbnRFbGVtZW50KHRhZywgdGhpcy51dGlsLmlzQW5jaG9yKTtcclxuICAgICAgICAgICAgaWYgKGxpbmsgJiYgIWNvbnRleHRJbWFnZS5hbmNob3JDdHgubGlua1ZhbHVlKSBjb250ZXh0SW1hZ2UuYW5jaG9yQ3R4LmxpbmtWYWx1ZSA9ICcgJztcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGltYWdlUGx1Z2luLnVwZGF0ZV9pbWFnZS5jYWxsKHRoaXMsIHRydWUsIGZhbHNlLCB0cnVlKTtcclxuICAgICAgICAgICAgaW1hZ2VQbHVnaW4uaW5pdC5jYWxsKHRoaXMpO1xyXG4gICAgICAgIH0uYmluZCh0aGlzKTtcclxuXHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLmZpbGVNYW5hZ2VyLmNoZWNrSW5mby5jYWxsKHRoaXMsICdpbWFnZScsIFsnaW1nJ10sIHRoaXMuZnVuY3Rpb25zLm9uSW1hZ2VVcGxvYWQsIG1vZGlmeUhhbmRsZXIsIHRydWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBPdmVycmlkZSBmaWxlTWFuYWdlclxyXG4gICAgICovXHJcbiAgICByZXNldEZpbGVJbmZvOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLmZpbGVNYW5hZ2VyLnJlc2V0SW5mby5jYWxsKHRoaXMsICdpbWFnZScsIHRoaXMuZnVuY3Rpb25zLm9uSW1hZ2VVcGxvYWQpO1xyXG4gICAgfSxcclxuXHJcbiAgICBjcmVhdGVfaW1hZ2U6IGZ1bmN0aW9uIChzcmMsIGFuY2hvciwgd2lkdGgsIGhlaWdodCwgYWxpZ24sIGZpbGUpIHtcclxuICAgICAgICBjb25zdCBpbWFnZVBsdWdpbiA9IHRoaXMucGx1Z2lucy5pbWFnZTtcclxuICAgICAgICBjb25zdCBjb250ZXh0SW1hZ2UgPSB0aGlzLmNvbnRleHQuaW1hZ2U7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0LnJlc2l6aW5nLl9yZXNpemVfcGx1Z2luID0gJ2ltYWdlJztcclxuXHJcbiAgICAgICAgbGV0IG9JbWcgPSB0aGlzLnV0aWwuY3JlYXRlRWxlbWVudCgnSU1HJyk7XHJcbiAgICAgICAgb0ltZy5zcmMgPSBzcmM7XHJcbiAgICAgICAgb0ltZy5hbHQgPSBjb250ZXh0SW1hZ2UuX2FsdFRleHQ7XHJcbiAgICAgICAgb0ltZy5zZXRBdHRyaWJ1dGUoJ2RhdGEtcm90YXRlJywgJzAnKTtcclxuICAgICAgICBhbmNob3IgPSBpbWFnZVBsdWdpbi5vblJlbmRlcl9saW5rLmNhbGwodGhpcywgb0ltZywgYW5jaG9yKTtcclxuXHJcbiAgICAgICAgaWYgKGNvbnRleHRJbWFnZS5fcmVzaXppbmcpIHtcclxuICAgICAgICAgICAgb0ltZy5zZXRBdHRyaWJ1dGUoJ2RhdGEtcHJvcG9ydGlvbicsIGNvbnRleHRJbWFnZS5fcHJvcG9ydGlvbkNoZWNrZWQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgY292ZXIgPSB0aGlzLnBsdWdpbnMuY29tcG9uZW50LnNldF9jb3Zlci5jYWxsKHRoaXMsIGFuY2hvcik7XHJcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5wbHVnaW5zLmNvbXBvbmVudC5zZXRfY29udGFpbmVyLmNhbGwodGhpcywgY292ZXIsICdzZS1pbWFnZS1jb250YWluZXInKTtcclxuXHJcbiAgICAgICAgLy8gY2FwdGlvblxyXG4gICAgICAgIGlmIChjb250ZXh0SW1hZ2UuX2NhcHRpb25DaGVja2VkKSB7XHJcbiAgICAgICAgICAgIGNvbnRleHRJbWFnZS5fY2FwdGlvbiA9IHRoaXMucGx1Z2lucy5jb21wb25lbnQuY3JlYXRlX2NhcHRpb24uY2FsbCh0aGlzKTtcclxuICAgICAgICAgICAgY29udGV4dEltYWdlLl9jYXB0aW9uLnNldEF0dHJpYnV0ZSgnY29udGVudGVkaXRhYmxlJywgZmFsc2UpO1xyXG4gICAgICAgICAgICBjb3Zlci5hcHBlbmRDaGlsZChjb250ZXh0SW1hZ2UuX2NhcHRpb24pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29udGV4dEltYWdlLl9lbGVtZW50ID0gb0ltZztcclxuICAgICAgICBjb250ZXh0SW1hZ2UuX2NvdmVyID0gY292ZXI7XHJcbiAgICAgICAgY29udGV4dEltYWdlLl9jb250YWluZXIgPSBjb250YWluZXI7XHJcblxyXG4gICAgICAgIC8vIHNldCBzaXplXHJcbiAgICAgICAgaW1hZ2VQbHVnaW4uYXBwbHlTaXplLmNhbGwodGhpcywgd2lkdGgsIGhlaWdodCk7XHJcblxyXG4gICAgICAgIC8vIGFsaWduXHJcbiAgICAgICAgaW1hZ2VQbHVnaW4uc2V0QWxpZ24uY2FsbCh0aGlzLCBhbGlnbiwgb0ltZywgY292ZXIsIGNvbnRhaW5lcik7XHJcblxyXG4gICAgICAgIG9JbWcub25sb2FkID0gaW1hZ2VQbHVnaW4uX2ltYWdlX2NyZWF0ZV9vbmxvYWQuYmluZCh0aGlzLCBvSW1nLCBjb250ZXh0SW1hZ2Uuc3ZnRGVmYXVsdFNpemUsIGNvbnRhaW5lcik7XHJcbiAgICAgICAgaWYgKHRoaXMuaW5zZXJ0Q29tcG9uZW50KGNvbnRhaW5lciwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSkpIHRoaXMucGx1Z2lucy5maWxlTWFuYWdlci5zZXRJbmZvLmNhbGwodGhpcywgJ2ltYWdlJywgb0ltZywgdGhpcy5mdW5jdGlvbnMub25JbWFnZVVwbG9hZCwgZmlsZSwgdHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0LnJlc2l6aW5nLl9yZXNpemVfcGx1Z2luID0gJyc7XHJcbiAgICB9LFxyXG5cclxuICAgIF9pbWFnZV9jcmVhdGVfb25sb2FkOiBmdW5jdGlvbiAob0ltZywgc3ZnRGVmYXVsdFNpemUsIGNvbnRhaW5lcikge1xyXG4gICAgICAgIC8vIHN2ZyBleGNlcHRpb24gaGFuZGxpbmdcclxuICAgICAgICBpZiAob0ltZy5vZmZzZXRXaWR0aCA9PT0gMCkgdGhpcy5wbHVnaW5zLmltYWdlLmFwcGx5U2l6ZS5jYWxsKHRoaXMsIHN2Z0RlZmF1bHRTaXplLCAnJyk7XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5tZWRpYUF1dG9TZWxlY3QpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RDb21wb25lbnQob0ltZywgJ2ltYWdlJyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgbGluZSA9IHRoaXMuYXBwZW5kRm9ybWF0VGFnKGNvbnRhaW5lciwgbnVsbCk7XHJcbiAgICAgICAgICAgIGlmIChsaW5lKSB0aGlzLnNldFJhbmdlKGxpbmUsIDAsIGxpbmUsIDApO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgdXBkYXRlX2ltYWdlOiBmdW5jdGlvbiAoaW5pdCwgb3BlbkNvbnRyb2xsZXIsIG5vdEhpc3RvcnlQdXNoKSB7XHJcbiAgICAgICAgY29uc3QgY29udGV4dEltYWdlID0gdGhpcy5jb250ZXh0LmltYWdlO1xyXG4gICAgICAgIGxldCBpbWFnZUVsID0gY29udGV4dEltYWdlLl9lbGVtZW50O1xyXG4gICAgICAgIGxldCBjb3ZlciA9IGNvbnRleHRJbWFnZS5fY292ZXI7XHJcbiAgICAgICAgbGV0IGNvbnRhaW5lciA9IGNvbnRleHRJbWFnZS5fY29udGFpbmVyO1xyXG4gICAgICAgIGxldCBpc05ld0NvbnRhaW5lciA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAoY292ZXIgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgaXNOZXdDb250YWluZXIgPSB0cnVlO1xyXG4gICAgICAgICAgICBpbWFnZUVsID0gY29udGV4dEltYWdlLl9lbGVtZW50LmNsb25lTm9kZSh0cnVlKTtcclxuICAgICAgICAgICAgY292ZXIgPSB0aGlzLnBsdWdpbnMuY29tcG9uZW50LnNldF9jb3Zlci5jYWxsKHRoaXMsIGltYWdlRWwpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNvbnRhaW5lciA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICBjb3ZlciA9IGNvdmVyLmNsb25lTm9kZSh0cnVlKTtcclxuICAgICAgICAgICAgaW1hZ2VFbCA9IGNvdmVyLnF1ZXJ5U2VsZWN0b3IoJ2ltZycpO1xyXG4gICAgICAgICAgICBpc05ld0NvbnRhaW5lciA9IHRydWU7XHJcbiAgICAgICAgICAgIGNvbnRhaW5lciA9IHRoaXMucGx1Z2lucy5jb21wb25lbnQuc2V0X2NvbnRhaW5lci5jYWxsKHRoaXMsIGNvdmVyLCAnc2UtaW1hZ2UtY29udGFpbmVyJyk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpc05ld0NvbnRhaW5lcikge1xyXG4gICAgICAgICAgICBjb250YWluZXIuaW5uZXJIVE1MID0gJyc7XHJcbiAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChjb3Zlcik7XHJcbiAgICAgICAgICAgIGNvbnRleHRJbWFnZS5fY292ZXIgPSBjb3ZlcjtcclxuICAgICAgICAgICAgY29udGV4dEltYWdlLl9lbGVtZW50ID0gaW1hZ2VFbDtcclxuICAgICAgICAgICAgaXNOZXdDb250YWluZXIgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGNoZWNrIHNpemVcclxuICAgICAgICBsZXQgY2hhbmdlU2l6ZTtcclxuICAgICAgICBjb25zdCB4ID0gdGhpcy51dGlsLmlzTnVtYmVyKGNvbnRleHRJbWFnZS5pbnB1dFgudmFsdWUpID8gY29udGV4dEltYWdlLmlucHV0WC52YWx1ZSArIGNvbnRleHRJbWFnZS5zaXplVW5pdCA6IGNvbnRleHRJbWFnZS5pbnB1dFgudmFsdWU7XHJcbiAgICAgICAgY29uc3QgeSA9IHRoaXMudXRpbC5pc051bWJlcihjb250ZXh0SW1hZ2UuaW5wdXRZLnZhbHVlKSA/IGNvbnRleHRJbWFnZS5pbnB1dFkudmFsdWUgKyBjb250ZXh0SW1hZ2Uuc2l6ZVVuaXQgOiBjb250ZXh0SW1hZ2UuaW5wdXRZLnZhbHVlO1xyXG4gICAgICAgIGlmICgvJSQvLnRlc3QoaW1hZ2VFbC5zdHlsZS53aWR0aCkpIHtcclxuICAgICAgICAgICAgY2hhbmdlU2l6ZSA9IHggIT09IGNvbnRhaW5lci5zdHlsZS53aWR0aCB8fCB5ICE9PSBjb250YWluZXIuc3R5bGUuaGVpZ2h0O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNoYW5nZVNpemUgPSB4ICE9PSBpbWFnZUVsLnN0eWxlLndpZHRoIHx8IHkgIT09IGltYWdlRWwuc3R5bGUuaGVpZ2h0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gYWx0XHJcbiAgICAgICAgaW1hZ2VFbC5hbHQgPSBjb250ZXh0SW1hZ2UuX2FsdFRleHQ7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gY2FwdGlvblxyXG4gICAgICAgIGxldCBtb2RpZmllZENhcHRpb24gPSBmYWxzZTtcclxuICAgICAgICBpZiAoY29udGV4dEltYWdlLl9jYXB0aW9uQ2hlY2tlZCkge1xyXG4gICAgICAgICAgICBpZiAoIWNvbnRleHRJbWFnZS5fY2FwdGlvbikge1xyXG4gICAgICAgICAgICAgICAgY29udGV4dEltYWdlLl9jYXB0aW9uID0gdGhpcy5wbHVnaW5zLmNvbXBvbmVudC5jcmVhdGVfY2FwdGlvbi5jYWxsKHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgY292ZXIuYXBwZW5kQ2hpbGQoY29udGV4dEltYWdlLl9jYXB0aW9uKTtcclxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQ2FwdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoY29udGV4dEltYWdlLl9jYXB0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnV0aWwucmVtb3ZlSXRlbShjb250ZXh0SW1hZ2UuX2NhcHRpb24pO1xyXG4gICAgICAgICAgICAgICAgY29udGV4dEltYWdlLl9jYXB0aW9uID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQ2FwdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGxpbmtcclxuICAgICAgICBjb25zdCBhbmNob3IgPSB0aGlzLnBsdWdpbnMuYW5jaG9yLmNyZWF0ZUFuY2hvci5jYWxsKHRoaXMsIGNvbnRleHRJbWFnZS5hbmNob3JDdHgsIHRydWUpO1xyXG4gICAgICAgIGlmIChhbmNob3IpIHtcclxuICAgICAgICAgICAgY29udGV4dEltYWdlLl9saW5rRWxlbWVudCA9IGNvbnRleHRJbWFnZS5fbGlua0VsZW1lbnQgPT09IGFuY2hvciA/IGFuY2hvci5jbG9uZU5vZGUoZmFsc2UpIDogYW5jaG9yO1xyXG4gICAgICAgICAgICBjb3Zlci5pbnNlcnRCZWZvcmUodGhpcy5wbHVnaW5zLmltYWdlLm9uUmVuZGVyX2xpbmsuY2FsbCh0aGlzLCBpbWFnZUVsLCBjb250ZXh0SW1hZ2UuX2xpbmtFbGVtZW50KSwgY29udGV4dEltYWdlLl9jYXB0aW9uKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHRJbWFnZS5fbGlua0VsZW1lbnQgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgY29uc3QgaW1hZ2VFbGVtZW50ID0gaW1hZ2VFbDtcclxuICAgICAgICAgICAgaW1hZ2VFbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1pbWFnZS1saW5rJywgJycpO1xyXG4gICAgICAgICAgICBpZiAoY292ZXIuY29udGFpbnMoY29udGV4dEltYWdlLl9saW5rRWxlbWVudCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0VsID0gaW1hZ2VFbGVtZW50LmNsb25lTm9kZSh0cnVlKTtcclxuICAgICAgICAgICAgICAgIGNvdmVyLnJlbW92ZUNoaWxkKGNvbnRleHRJbWFnZS5fbGlua0VsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgY292ZXIuaW5zZXJ0QmVmb3JlKG5ld0VsLCBjb250ZXh0SW1hZ2UuX2NhcHRpb24pO1xyXG4gICAgICAgICAgICAgICAgaW1hZ2VFbCA9IG5ld0VsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaXNOZXdDb250YWluZXIpIHtcclxuICAgICAgICAgICAgY29uc3QgZXhpc3RFbGVtZW50ID0gKHRoaXMudXRpbC5pc1JhbmdlRm9ybWF0RWxlbWVudChjb250ZXh0SW1hZ2UuX2VsZW1lbnQucGFyZW50Tm9kZSkgfHwgdGhpcy51dGlsLmlzV3lzaXd5Z0Rpdihjb250ZXh0SW1hZ2UuX2VsZW1lbnQucGFyZW50Tm9kZSkpID8gXHJcbiAgICAgICAgICAgICAgICBjb250ZXh0SW1hZ2UuX2VsZW1lbnQgOiBcclxuICAgICAgICAgICAgICAgIC9eQSQvaS50ZXN0KGNvbnRleHRJbWFnZS5fZWxlbWVudC5wYXJlbnROb2RlLm5vZGVOYW1lKSA/IGNvbnRleHRJbWFnZS5fZWxlbWVudC5wYXJlbnROb2RlIDogdGhpcy51dGlsLmdldEZvcm1hdEVsZW1lbnQoY29udGV4dEltYWdlLl9lbGVtZW50KSB8fCBjb250ZXh0SW1hZ2UuX2VsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYgKHRoaXMudXRpbC5pc0Zvcm1hdEVsZW1lbnQoZXhpc3RFbGVtZW50KSAmJiBleGlzdEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBleGlzdEVsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoY29udGFpbmVyLCBleGlzdEVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51dGlsLnJlbW92ZUl0ZW0oY29udGV4dEltYWdlLl9lbGVtZW50KTtcclxuICAgICAgICAgICAgICAgIC8vIGNsZWFuIGZvcm1hdCB0YWdcclxuICAgICAgICAgICAgICAgIHRoaXMudXRpbC5yZW1vdmVFbXB0eU5vZGUoZXhpc3RFbGVtZW50LCBudWxsKTtcclxuICAgICAgICAgICAgICAgIGlmIChleGlzdEVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoID09PSAwKSBleGlzdEVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy51dGlsLmh0bWxSZW1vdmVXaGl0ZVNwYWNlKGV4aXN0RWxlbWVudC5pbm5lckhUTUwpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudXRpbC5pc0Zvcm1hdEVsZW1lbnQoZXhpc3RFbGVtZW50LnBhcmVudE5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0cyA9IGV4aXN0RWxlbWVudC5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdHMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoY29udGFpbmVyLCBleGlzdEVsZW1lbnQucHJldmlvdXNTaWJsaW5nID8gZm9ybWF0cy5uZXh0RWxlbWVudFNpYmxpbmcgOiBmb3JtYXRzKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnV0aWwucmVtb3ZlSXRlbShleGlzdEVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBleGlzdEVsZW1lbnQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoY29udGFpbmVyLCBleGlzdEVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpbWFnZUVsID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ2ltZycpO1xyXG5cclxuICAgICAgICAgICAgY29udGV4dEltYWdlLl9lbGVtZW50ID0gaW1hZ2VFbDtcclxuICAgICAgICAgICAgY29udGV4dEltYWdlLl9jb3ZlciA9IGNvdmVyO1xyXG4gICAgICAgICAgICBjb250ZXh0SW1hZ2UuX2NvbnRhaW5lciA9IGNvbnRhaW5lcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHRyYW5zZm9ybVxyXG4gICAgICAgIGlmIChtb2RpZmllZENhcHRpb24gfHwgKCFjb250ZXh0SW1hZ2UuX29ubHlQZXJjZW50YWdlICYmIGNoYW5nZVNpemUpKSB7XHJcbiAgICAgICAgICAgIGlmICghaW5pdCAmJiAoL1xcZCsvLnRlc3QoaW1hZ2VFbC5zdHlsZS5oZWlnaHQpIHx8ICh0aGlzLmNvbnRleHQucmVzaXppbmcuX3JvdGF0ZVZlcnRpY2FsICYmIGNvbnRleHRJbWFnZS5fY2FwdGlvbkNoZWNrZWQpKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKC8lJC8udGVzdChjb250ZXh0SW1hZ2UuaW5wdXRYLnZhbHVlKSB8fCAvJSQvLnRlc3QoY29udGV4dEltYWdlLmlucHV0WS52YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnMucmVzaXppbmcucmVzZXRUcmFuc2Zvcm0uY2FsbCh0aGlzLCBpbWFnZUVsKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLnJlc2l6aW5nLnNldFRyYW5zZm9ybVNpemUuY2FsbCh0aGlzLCBpbWFnZUVsLCB0aGlzLnV0aWwuZ2V0TnVtYmVyKGNvbnRleHRJbWFnZS5pbnB1dFgudmFsdWUsIDApLCB0aGlzLnV0aWwuZ2V0TnVtYmVyKGNvbnRleHRJbWFnZS5pbnB1dFkudmFsdWUsIDApKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gc2l6ZVxyXG4gICAgICAgIGlmIChjb250ZXh0SW1hZ2UuX3Jlc2l6aW5nKSB7XHJcbiAgICAgICAgICAgIGltYWdlRWwuc2V0QXR0cmlidXRlKCdkYXRhLXByb3BvcnRpb24nLCBjb250ZXh0SW1hZ2UuX3Byb3BvcnRpb25DaGVja2VkKTtcclxuICAgICAgICAgICAgaWYgKGNoYW5nZVNpemUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy5pbWFnZS5hcHBseVNpemUuY2FsbCh0aGlzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gYWxpZ25cclxuICAgICAgICB0aGlzLnBsdWdpbnMuaW1hZ2Uuc2V0QWxpZ24uY2FsbCh0aGlzLCBudWxsLCBpbWFnZUVsLCBudWxsLCBudWxsKTtcclxuXHJcbiAgICAgICAgLy8gc2V0IGltYWdlc0luZm9cclxuICAgICAgICBpZiAoaW5pdCkge1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMuZmlsZU1hbmFnZXIuc2V0SW5mby5jYWxsKHRoaXMsICdpbWFnZScsIGltYWdlRWwsIHRoaXMuZnVuY3Rpb25zLm9uSW1hZ2VVcGxvYWQsIG51bGwsIHRydWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG9wZW5Db250cm9sbGVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0Q29tcG9uZW50KGltYWdlRWwsICdpbWFnZScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gaGlzdG9yeSBzdGFja1xyXG4gICAgICAgIGlmICghbm90SGlzdG9yeVB1c2gpIHRoaXMuaGlzdG9yeS5wdXNoKGZhbHNlKTtcclxuICAgIH0sXHJcblxyXG4gICAgdXBkYXRlX3NyYzogZnVuY3Rpb24gKHNyYywgZWxlbWVudCwgZmlsZSkge1xyXG4gICAgICAgIGVsZW1lbnQuc3JjID0gc3JjO1xyXG4gICAgICAgIHRoaXMuX3cuc2V0VGltZW91dCh0aGlzLnBsdWdpbnMuZmlsZU1hbmFnZXIuc2V0SW5mby5iaW5kKHRoaXMsICdpbWFnZScsIGVsZW1lbnQsIHRoaXMuZnVuY3Rpb25zLm9uSW1hZ2VVcGxvYWQsIGZpbGUsIHRydWUpKTtcclxuICAgICAgICB0aGlzLnNlbGVjdENvbXBvbmVudChlbGVtZW50LCAnaW1hZ2UnKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAUmVxdWlyZWQgQE92ZXJyaWRlIGZpbGVNYW5hZ2VyLCByZXNpemluZ1xyXG4gICAgICovXHJcbiAgICBvbk1vZGlmeU1vZGU6IGZ1bmN0aW9uIChlbGVtZW50LCBzaXplKSB7XHJcbiAgICAgICAgaWYgKCFlbGVtZW50KSByZXR1cm47XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3QgY29udGV4dEltYWdlID0gdGhpcy5jb250ZXh0LmltYWdlO1xyXG4gICAgICAgIGNvbnRleHRJbWFnZS5fbGlua0VsZW1lbnQgPSBjb250ZXh0SW1hZ2UuYW5jaG9yQ3R4LmxpbmtBbmNob3IgPSAvXkEkL2kudGVzdChlbGVtZW50LnBhcmVudE5vZGUubm9kZU5hbWUpID8gZWxlbWVudC5wYXJlbnROb2RlIDogbnVsbDtcclxuICAgICAgICBjb250ZXh0SW1hZ2UuX2VsZW1lbnQgPSBlbGVtZW50O1xyXG4gICAgICAgIGNvbnRleHRJbWFnZS5fY292ZXIgPSB0aGlzLnV0aWwuZ2V0UGFyZW50RWxlbWVudChlbGVtZW50LCAnRklHVVJFJyk7XHJcbiAgICAgICAgY29udGV4dEltYWdlLl9jb250YWluZXIgPSB0aGlzLnV0aWwuZ2V0UGFyZW50RWxlbWVudChlbGVtZW50LCB0aGlzLnV0aWwuaXNNZWRpYUNvbXBvbmVudCk7XHJcbiAgICAgICAgY29udGV4dEltYWdlLl9jYXB0aW9uID0gdGhpcy51dGlsLmdldENoaWxkRWxlbWVudChjb250ZXh0SW1hZ2UuX2NvdmVyLCAnRklHQ0FQVElPTicpO1xyXG4gICAgICAgIGNvbnRleHRJbWFnZS5fYWxpZ24gPSBlbGVtZW50LnN0eWxlLmZsb2F0IHx8IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWFsaWduJykgfHwgJ25vbmUnO1xyXG4gICAgICAgIGVsZW1lbnQuc3R5bGUuZmxvYXQgPSAnJztcclxuICAgICAgICB0aGlzLnBsdWdpbnMuYW5jaG9yLnNldEN0eChjb250ZXh0SW1hZ2UuX2xpbmtFbGVtZW50LCBjb250ZXh0SW1hZ2UuYW5jaG9yQ3R4KTtcclxuXHJcbiAgICAgICAgaWYgKHNpemUpIHtcclxuICAgICAgICAgICAgY29udGV4dEltYWdlLl9lbGVtZW50X3cgPSBzaXplLnc7XHJcbiAgICAgICAgICAgIGNvbnRleHRJbWFnZS5fZWxlbWVudF9oID0gc2l6ZS5oO1xyXG4gICAgICAgICAgICBjb250ZXh0SW1hZ2UuX2VsZW1lbnRfdCA9IHNpemUudDtcclxuICAgICAgICAgICAgY29udGV4dEltYWdlLl9lbGVtZW50X2wgPSBzaXplLmw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgdXNlclNpemUgPSBjb250ZXh0SW1hZ2UuX2VsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXNpemUnKSB8fCBjb250ZXh0SW1hZ2UuX2VsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLW9yaWdpbicpO1xyXG4gICAgICAgIGxldCB3LCBoO1xyXG4gICAgICAgIGlmICh1c2VyU2l6ZSkge1xyXG4gICAgICAgICAgICB1c2VyU2l6ZSA9IHVzZXJTaXplLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgICAgIHcgPSB1c2VyU2l6ZVswXTtcclxuICAgICAgICAgICAgaCA9IHVzZXJTaXplWzFdO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoc2l6ZSkge1xyXG4gICAgICAgICAgICB3ID0gc2l6ZS53O1xyXG4gICAgICAgICAgICBoID0gc2l6ZS5oO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29udGV4dEltYWdlLl9vcmlnaW5fdyA9IHcgfHwgZWxlbWVudC5zdHlsZS53aWR0aCB8fCBlbGVtZW50LndpZHRoIHx8ICcnO1xyXG4gICAgICAgIGNvbnRleHRJbWFnZS5fb3JpZ2luX2ggPSBoIHx8IGVsZW1lbnQuc3R5bGUuaGVpZ2h0IHx8IGVsZW1lbnQuaGVpZ2h0IHx8ICcnO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBSZXF1aXJlZCBAT3ZlcnJpZGUgZmlsZU1hbmFnZXIsIHJlc2l6aW5nXHJcbiAgICAgKi9cclxuICAgIG9wZW5Nb2RpZnk6IGZ1bmN0aW9uIChub3RPcGVuKSB7XHJcbiAgICAgICAgY29uc3QgY29udGV4dEltYWdlID0gdGhpcy5jb250ZXh0LmltYWdlO1xyXG4gICAgICAgIGlmIChjb250ZXh0SW1hZ2UuaW1nVXJsRmlsZSkge1xyXG4gICAgICAgICAgICBjb250ZXh0SW1hZ2UuX3Zfc3JjLl9saW5rVmFsdWUgPSBjb250ZXh0SW1hZ2UucHJldmlld1NyYy50ZXh0Q29udGVudCA9IGNvbnRleHRJbWFnZS5pbWdVcmxGaWxlLnZhbHVlID0gY29udGV4dEltYWdlLl9lbGVtZW50LnNyYztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29udGV4dEltYWdlLl9hbHRUZXh0ID0gY29udGV4dEltYWdlLmFsdFRleHQudmFsdWUgPSBjb250ZXh0SW1hZ2UuX2VsZW1lbnQuYWx0O1xyXG4gICAgICAgIGNvbnRleHRJbWFnZS5tb2RhbC5xdWVyeVNlbGVjdG9yKCdpbnB1dFtuYW1lPVwic3VuZWRpdG9yX2ltYWdlX3JhZGlvXCJdW3ZhbHVlPVwiJyArIGNvbnRleHRJbWFnZS5fYWxpZ24gKyAnXCJdJykuY2hlY2tlZCA9IHRydWU7XHJcbiAgICAgICAgY29udGV4dEltYWdlLl9hbGlnbiA9IGNvbnRleHRJbWFnZS5tb2RhbC5xdWVyeVNlbGVjdG9yKCdpbnB1dFtuYW1lPVwic3VuZWRpdG9yX2ltYWdlX3JhZGlvXCJdOmNoZWNrZWQnKS52YWx1ZTtcclxuICAgICAgICBjb250ZXh0SW1hZ2UuX2NhcHRpb25DaGVja2VkID0gY29udGV4dEltYWdlLmNhcHRpb25DaGVja0VsLmNoZWNrZWQgPSAhIWNvbnRleHRJbWFnZS5fY2FwdGlvbjtcclxuICAgICAgICBcclxuICAgICAgICBpZiAoY29udGV4dEltYWdlLl9yZXNpemluZykge1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMucmVzaXppbmcuX21vZHVsZV9zZXRNb2RpZnlJbnB1dFNpemUuY2FsbCh0aGlzLCBjb250ZXh0SW1hZ2UsIHRoaXMucGx1Z2lucy5pbWFnZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIW5vdE9wZW4pIHRoaXMucGx1Z2lucy5kaWFsb2cub3Blbi5jYWxsKHRoaXMsICdpbWFnZScsIHRydWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBPdmVycmlkZSBmaWxlTWFuYWdlclxyXG4gICAgICovXHJcbiAgICBhcHBseVNpemU6IGZ1bmN0aW9uICh3LCBoKSB7XHJcbiAgICAgICAgY29uc3QgY29udGV4dEltYWdlID0gdGhpcy5jb250ZXh0LmltYWdlO1xyXG5cclxuICAgICAgICBpZiAoIXcpIHcgPSBjb250ZXh0SW1hZ2UuaW5wdXRYLnZhbHVlIHx8IHRoaXMub3B0aW9ucy5pbWFnZVdpZHRoO1xyXG4gICAgICAgIGlmICghaCkgaCA9IGNvbnRleHRJbWFnZS5pbnB1dFkudmFsdWUgfHwgdGhpcy5vcHRpb25zLmltYWdlSGVpZ2h0O1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICgoY29udGV4dEltYWdlLl9vbmx5UGVyY2VudGFnZSAmJiAhIXcpIHx8IC8lJC8udGVzdCh3KSkge1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMuaW1hZ2Uuc2V0UGVyY2VudFNpemUuY2FsbCh0aGlzLCB3LCBoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSBlbHNlIGlmICgoIXcgfHwgdyA9PT0gJ2F1dG8nKSAmJiAoIWggfHwgaCA9PT0gJ2F1dG8nKSkge1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMuaW1hZ2Uuc2V0QXV0b1NpemUuY2FsbCh0aGlzKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMuaW1hZ2Uuc2V0U2l6ZS5jYWxsKHRoaXMsIHcsIGgsIGZhbHNlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAT3ZlcnJpZGUgcmVzaXppbmdcclxuICAgICAqL1xyXG4gICAgc2l6ZVJldmVydDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMucGx1Z2lucy5yZXNpemluZy5fbW9kdWxlX3NpemVSZXZlcnQuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQuaW1hZ2UpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBPdmVycmlkZSByZXNpemluZ1xyXG4gICAgICovXHJcbiAgICBzZXRTaXplOiBmdW5jdGlvbiAodywgaCwgbm90UmVzZXRQZXJjZW50YWdlLCBkaXJlY3Rpb24pIHtcclxuICAgICAgICBjb25zdCBjb250ZXh0SW1hZ2UgPSB0aGlzLmNvbnRleHQuaW1hZ2U7XHJcbiAgICAgICAgY29uc3Qgb25seVcgPSAvXihyd3xsdykkLy50ZXN0KGRpcmVjdGlvbik7XHJcbiAgICAgICAgY29uc3Qgb25seUggPSAvXih0aHxiaCkkLy50ZXN0KGRpcmVjdGlvbik7XHJcblxyXG4gICAgICAgIGlmICghb25seUgpIHtcclxuICAgICAgICAgICAgY29udGV4dEltYWdlLl9lbGVtZW50LnN0eWxlLndpZHRoID0gdGhpcy51dGlsLmlzTnVtYmVyKHcpID8gdyArIGNvbnRleHRJbWFnZS5zaXplVW5pdCA6IHc7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5pbWFnZS5jYW5jZWxQZXJjZW50QXR0ci5jYWxsKHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIW9ubHlXKSB7XHJcbiAgICAgICAgICAgIGNvbnRleHRJbWFnZS5fZWxlbWVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLnV0aWwuaXNOdW1iZXIoaCkgPyBoICsgY29udGV4dEltYWdlLnNpemVVbml0IDogLyUkLy50ZXN0KGgpID8gJycgOiBoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNvbnRleHRJbWFnZS5fYWxpZ24gPT09ICdjZW50ZXInKSB0aGlzLnBsdWdpbnMuaW1hZ2Uuc2V0QWxpZ24uY2FsbCh0aGlzLCBudWxsLCBudWxsLCBudWxsLCBudWxsKTtcclxuICAgICAgICBpZiAoIW5vdFJlc2V0UGVyY2VudGFnZSkgY29udGV4dEltYWdlLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1wZXJjZW50YWdlJyk7XHJcblxyXG4gICAgICAgIC8vIHNhdmUgY3VycmVudCBzaXplXHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLnJlc2l6aW5nLl9tb2R1bGVfc2F2ZUN1cnJlbnRTaXplLmNhbGwodGhpcywgY29udGV4dEltYWdlKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAT3ZlcnJpZGUgcmVzaXppbmdcclxuICAgICAqL1xyXG4gICAgc2V0QXV0b1NpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zdCBjb250ZXh0SW1hZ2UgPSB0aGlzLmNvbnRleHQuaW1hZ2U7XHJcblxyXG4gICAgICAgIHRoaXMucGx1Z2lucy5yZXNpemluZy5yZXNldFRyYW5zZm9ybS5jYWxsKHRoaXMsIGNvbnRleHRJbWFnZS5fZWxlbWVudCk7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLmltYWdlLmNhbmNlbFBlcmNlbnRBdHRyLmNhbGwodGhpcyk7XHJcblxyXG4gICAgICAgIGNvbnRleHRJbWFnZS5fZWxlbWVudC5zdHlsZS5tYXhXaWR0aCA9ICcnO1xyXG4gICAgICAgIGNvbnRleHRJbWFnZS5fZWxlbWVudC5zdHlsZS53aWR0aCA9ICcnO1xyXG4gICAgICAgIGNvbnRleHRJbWFnZS5fZWxlbWVudC5zdHlsZS5oZWlnaHQgPSAnJztcclxuICAgICAgICBjb250ZXh0SW1hZ2UuX2NvdmVyLnN0eWxlLndpZHRoID0gJyc7XHJcbiAgICAgICAgY29udGV4dEltYWdlLl9jb3Zlci5zdHlsZS5oZWlnaHQgPSAnJztcclxuXHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLmltYWdlLnNldEFsaWduLmNhbGwodGhpcywgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCk7XHJcbiAgICAgICAgY29udGV4dEltYWdlLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1wZXJjZW50YWdlJywgJ2F1dG8sYXV0bycpO1xyXG5cclxuICAgICAgICAvLyBzYXZlIGN1cnJlbnQgc2l6ZVxyXG4gICAgICAgIHRoaXMucGx1Z2lucy5yZXNpemluZy5fbW9kdWxlX3NhdmVDdXJyZW50U2l6ZS5jYWxsKHRoaXMsIGNvbnRleHRJbWFnZSk7XHJcbiAgICB9LFxyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIEBPdmVycmlkZSByZXNpemluZ1xyXG4gICAgICovXHJcbiAgICBzZXRPcmlnaW5TaXplOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY29uc3QgY29udGV4dEltYWdlID0gdGhpcy5jb250ZXh0LmltYWdlO1xyXG4gICAgICAgIGNvbnRleHRJbWFnZS5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtcGVyY2VudGFnZScpO1xyXG5cclxuICAgICAgICB0aGlzLnBsdWdpbnMucmVzaXppbmcucmVzZXRUcmFuc2Zvcm0uY2FsbCh0aGlzLCBjb250ZXh0SW1hZ2UuX2VsZW1lbnQpO1xyXG4gICAgICAgIHRoaXMucGx1Z2lucy5pbWFnZS5jYW5jZWxQZXJjZW50QXR0ci5jYWxsKHRoaXMpO1xyXG5cclxuICAgICAgICBjb25zdCBvcmlnaW5TaXplID0gKGNvbnRleHRJbWFnZS5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtb3JpZ2luJykgfHwgJycpLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgY29uc3QgdyA9IG9yaWdpblNpemVbMF07XHJcbiAgICAgICAgY29uc3QgaCA9IG9yaWdpblNpemVbMV07XHJcblxyXG4gICAgICAgIGlmIChvcmlnaW5TaXplKSB7XHJcbiAgICAgICAgICAgIGlmIChjb250ZXh0SW1hZ2UuX29ubHlQZXJjZW50YWdlIHx8ICgvJSQvLnRlc3QodykgJiYgKC8lJC8udGVzdChoKSB8fCAhL1xcZC8udGVzdChoKSkpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnMuaW1hZ2Uuc2V0UGVyY2VudFNpemUuY2FsbCh0aGlzLCB3LCBoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy5pbWFnZS5zZXRTaXplLmNhbGwodGhpcywgdywgaCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIHNhdmUgY3VycmVudCBzaXplXHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5yZXNpemluZy5fbW9kdWxlX3NhdmVDdXJyZW50U2l6ZS5jYWxsKHRoaXMsIGNvbnRleHRJbWFnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBPdmVycmlkZSByZXNpemluZ1xyXG4gICAgICovXHJcbiAgICBzZXRQZXJjZW50U2l6ZTogZnVuY3Rpb24gKHcsIGgpIHtcclxuICAgICAgICBjb25zdCBjb250ZXh0SW1hZ2UgPSB0aGlzLmNvbnRleHQuaW1hZ2U7XHJcbiAgICAgICAgaCA9ICEhaCAmJiAhLyUkLy50ZXN0KGgpICYmICF0aGlzLnV0aWwuZ2V0TnVtYmVyKGgsIDApID8gdGhpcy51dGlsLmlzTnVtYmVyKGgpID8gaCArICclJyA6IGggOiB0aGlzLnV0aWwuaXNOdW1iZXIoaCkgPyBoICsgY29udGV4dEltYWdlLnNpemVVbml0IDogKGggfHwgJycpO1xyXG4gICAgICAgIGNvbnN0IGhlaWdodFBlcmNlbnRhZ2UgPSAvJSQvLnRlc3QoaCk7XHJcblxyXG4gICAgICAgIGNvbnRleHRJbWFnZS5fY29udGFpbmVyLnN0eWxlLndpZHRoID0gdGhpcy51dGlsLmlzTnVtYmVyKHcpID8gdyArICclJyA6IHc7XHJcbiAgICAgICAgY29udGV4dEltYWdlLl9jb250YWluZXIuc3R5bGUuaGVpZ2h0ID0gJyc7XHJcbiAgICAgICAgY29udGV4dEltYWdlLl9jb3Zlci5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuICAgICAgICBjb250ZXh0SW1hZ2UuX2NvdmVyLnN0eWxlLmhlaWdodCA9ICFoZWlnaHRQZXJjZW50YWdlID8gJycgOiBoO1xyXG4gICAgICAgIGNvbnRleHRJbWFnZS5fZWxlbWVudC5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuICAgICAgICBjb250ZXh0SW1hZ2UuX2VsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0UGVyY2VudGFnZSA/ICcnIDogaDtcclxuICAgICAgICBjb250ZXh0SW1hZ2UuX2VsZW1lbnQuc3R5bGUubWF4V2lkdGggPSAnJztcclxuXHJcbiAgICAgICAgaWYgKGNvbnRleHRJbWFnZS5fYWxpZ24gPT09ICdjZW50ZXInKSB0aGlzLnBsdWdpbnMuaW1hZ2Uuc2V0QWxpZ24uY2FsbCh0aGlzLCBudWxsLCBudWxsLCBudWxsLCBudWxsKTtcclxuXHJcbiAgICAgICAgY29udGV4dEltYWdlLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1wZXJjZW50YWdlJywgdyArICcsJyArIGgpO1xyXG4gICAgICAgIHRoaXMucGx1Z2lucy5yZXNpemluZy5zZXRDYXB0aW9uUG9zaXRpb24uY2FsbCh0aGlzLCBjb250ZXh0SW1hZ2UuX2VsZW1lbnQpO1xyXG5cclxuICAgICAgICAvLyBzYXZlIGN1cnJlbnQgc2l6ZVxyXG4gICAgICAgIHRoaXMucGx1Z2lucy5yZXNpemluZy5fbW9kdWxlX3NhdmVDdXJyZW50U2l6ZS5jYWxsKHRoaXMsIGNvbnRleHRJbWFnZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQE92ZXJyaWRlIHJlc2l6aW5nXHJcbiAgICAgKi9cclxuICAgIGNhbmNlbFBlcmNlbnRBdHRyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY29uc3QgY29udGV4dEltYWdlID0gdGhpcy5jb250ZXh0LmltYWdlO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnRleHRJbWFnZS5fY292ZXIuc3R5bGUud2lkdGggPSAnJztcclxuICAgICAgICBjb250ZXh0SW1hZ2UuX2NvdmVyLnN0eWxlLmhlaWdodCA9ICcnO1xyXG4gICAgICAgIGNvbnRleHRJbWFnZS5fY29udGFpbmVyLnN0eWxlLndpZHRoID0gJyc7XHJcbiAgICAgICAgY29udGV4dEltYWdlLl9jb250YWluZXIuc3R5bGUuaGVpZ2h0ID0gJyc7XHJcblxyXG4gICAgICAgIHRoaXMudXRpbC5yZW1vdmVDbGFzcyhjb250ZXh0SW1hZ2UuX2NvbnRhaW5lciwgdGhpcy5jb250ZXh0LmltYWdlLl9mbG9hdENsYXNzUmVnRXhwKTtcclxuICAgICAgICB0aGlzLnV0aWwuYWRkQ2xhc3MoY29udGV4dEltYWdlLl9jb250YWluZXIsICdfX3NlX19mbG9hdC0nICsgY29udGV4dEltYWdlLl9hbGlnbik7XHJcblxyXG4gICAgICAgIGlmIChjb250ZXh0SW1hZ2UuX2FsaWduID09PSAnY2VudGVyJykgdGhpcy5wbHVnaW5zLmltYWdlLnNldEFsaWduLmNhbGwodGhpcywgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQE92ZXJyaWRlIHJlc2l6aW5nXHJcbiAgICAgKi9cclxuICAgIHNldEFsaWduOiBmdW5jdGlvbiAoYWxpZ24sIGVsZW1lbnQsIGNvdmVyLCBjb250YWluZXIpIHtcclxuICAgICAgICBjb25zdCBjb250ZXh0SW1hZ2UgPSB0aGlzLmNvbnRleHQuaW1hZ2U7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKCFhbGlnbikgYWxpZ24gPSBjb250ZXh0SW1hZ2UuX2FsaWduO1xyXG4gICAgICAgIGlmICghZWxlbWVudCkgZWxlbWVudCA9IGNvbnRleHRJbWFnZS5fZWxlbWVudDtcclxuICAgICAgICBpZiAoIWNvdmVyKSBjb3ZlciA9IGNvbnRleHRJbWFnZS5fY292ZXI7XHJcbiAgICAgICAgaWYgKCFjb250YWluZXIpIGNvbnRhaW5lciA9IGNvbnRleHRJbWFnZS5fY29udGFpbmVyO1xyXG5cclxuICAgICAgICBpZiAoYWxpZ24gJiYgYWxpZ24gIT09ICdub25lJykge1xyXG4gICAgICAgICAgICBjb3Zlci5zdHlsZS5tYXJnaW4gPSAnYXV0byc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY292ZXIuc3R5bGUubWFyZ2luID0gJzAnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKC8lJC8udGVzdChlbGVtZW50LnN0eWxlLndpZHRoKSAmJiBhbGlnbiA9PT0gJ2NlbnRlcicpIHtcclxuICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLm1pbldpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICBjb3Zlci5zdHlsZS53aWR0aCA9IGNvbnRhaW5lci5zdHlsZS53aWR0aDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb250YWluZXIuc3R5bGUubWluV2lkdGggPSAnJztcclxuICAgICAgICAgICAgY292ZXIuc3R5bGUud2lkdGggPSB0aGlzLmNvbnRleHQucmVzaXppbmcuX3JvdGF0ZVZlcnRpY2FsID8gKGVsZW1lbnQuc3R5bGUuaGVpZ2h0IHx8IGVsZW1lbnQub2Zmc2V0SGVpZ2h0KSA6ICgoIWVsZW1lbnQuc3R5bGUud2lkdGggfHwgZWxlbWVudC5zdHlsZS53aWR0aCA9PT0gJ2F1dG8nKSA/ICcnIDogZWxlbWVudC5zdHlsZS53aWR0aCB8fCAnMTAwJScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnV0aWwuaGFzQ2xhc3MoY29udGFpbmVyLCAnX19zZV9fZmxvYXQtJyArIGFsaWduKSkge1xyXG4gICAgICAgICAgICB0aGlzLnV0aWwucmVtb3ZlQ2xhc3MoY29udGFpbmVyLCBjb250ZXh0SW1hZ2UuX2Zsb2F0Q2xhc3NSZWdFeHApO1xyXG4gICAgICAgICAgICB0aGlzLnV0aWwuYWRkQ2xhc3MoY29udGFpbmVyLCAnX19zZV9fZmxvYXQtJyArIGFsaWduKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtYWxpZ24nLCBhbGlnbik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQE92ZXJyaWRlIGRpYWxvZ1xyXG4gICAgICovXHJcbiAgICBpbml0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY29uc3QgY29udGV4dEltYWdlID0gdGhpcy5jb250ZXh0LmltYWdlO1xyXG4gICAgICAgIGlmIChjb250ZXh0SW1hZ2UuaW1nSW5wdXRGaWxlKSBjb250ZXh0SW1hZ2UuaW1nSW5wdXRGaWxlLnZhbHVlID0gJyc7XHJcbiAgICAgICAgaWYgKGNvbnRleHRJbWFnZS5pbWdVcmxGaWxlKSBjb250ZXh0SW1hZ2UuX3Zfc3JjLl9saW5rVmFsdWUgPSBjb250ZXh0SW1hZ2UucHJldmlld1NyYy50ZXh0Q29udGVudCA9IGNvbnRleHRJbWFnZS5pbWdVcmxGaWxlLnZhbHVlID0gJyc7XHJcbiAgICAgICAgaWYgKGNvbnRleHRJbWFnZS5pbWdJbnB1dEZpbGUgJiYgY29udGV4dEltYWdlLmltZ1VybEZpbGUpIHtcclxuICAgICAgICAgICAgY29udGV4dEltYWdlLmltZ1VybEZpbGUucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xyXG4gICAgICAgICAgICBjb250ZXh0SW1hZ2UucHJldmlld1NyYy5zdHlsZS50ZXh0RGVjb3JhdGlvbiA9ICcnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29udGV4dEltYWdlLmFsdFRleHQudmFsdWUgPSAnJztcclxuICAgICAgICBjb250ZXh0SW1hZ2UubW9kYWwucXVlcnlTZWxlY3RvcignaW5wdXRbbmFtZT1cInN1bmVkaXRvcl9pbWFnZV9yYWRpb1wiXVt2YWx1ZT1cIm5vbmVcIl0nKS5jaGVja2VkID0gdHJ1ZTtcclxuICAgICAgICBjb250ZXh0SW1hZ2UuY2FwdGlvbkNoZWNrRWwuY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgICAgIGNvbnRleHRJbWFnZS5fZWxlbWVudCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLmltYWdlLm9wZW5UYWIuY2FsbCh0aGlzLCAnaW5pdCcpO1xyXG5cclxuICAgICAgICBpZiAoY29udGV4dEltYWdlLl9yZXNpemluZykge1xyXG4gICAgICAgICAgICBjb250ZXh0SW1hZ2UuaW5wdXRYLnZhbHVlID0gdGhpcy5vcHRpb25zLmltYWdlV2lkdGggPT09IGNvbnRleHRJbWFnZS5fZGVmYXVsdFNpemVYID8gJycgOiB0aGlzLm9wdGlvbnMuaW1hZ2VXaWR0aDtcclxuICAgICAgICAgICAgY29udGV4dEltYWdlLmlucHV0WS52YWx1ZSA9IHRoaXMub3B0aW9ucy5pbWFnZUhlaWdodCA9PT0gY29udGV4dEltYWdlLl9kZWZhdWx0U2l6ZVkgPyAnJyA6IHRoaXMub3B0aW9ucy5pbWFnZUhlaWdodDtcclxuICAgICAgICAgICAgY29udGV4dEltYWdlLnByb3BvcnRpb24uY2hlY2tlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIGNvbnRleHRJbWFnZS5fcmF0aW8gPSBmYWxzZTtcclxuICAgICAgICAgICAgY29udGV4dEltYWdlLl9yYXRpb1ggPSAxO1xyXG4gICAgICAgICAgICBjb250ZXh0SW1hZ2UuX3JhdGlvWSA9IDE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBsdWdpbnMuYW5jaG9yLmluaXQuY2FsbCh0aGlzLCBjb250ZXh0SW1hZ2UuYW5jaG9yQ3R4KTtcclxuICAgIH1cclxufTtcclxuIiwiLypcclxuICogd3lzaXd5ZyB3ZWIgZWRpdG9yXHJcbiAqXHJcbiAqIHN1bmVkaXRvci5qc1xyXG4gKiBDb3B5cmlnaHQgMjAxNyBKaUhvbmcgTGVlLlxyXG4gKiBNSVQgbGljZW5zZS5cclxuICovXHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbmltcG9ydCBkaWFsb2cgZnJvbSAnLi4vbW9kdWxlcy9kaWFsb2cnO1xyXG5pbXBvcnQgY29tcG9uZW50IGZyb20gJy4uL21vZHVsZXMvY29tcG9uZW50JztcclxuaW1wb3J0IHJlc2l6aW5nIGZyb20gJy4uL21vZHVsZXMvcmVzaXppbmcnO1xyXG5pbXBvcnQgZmlsZU1hbmFnZXIgZnJvbSAnLi4vbW9kdWxlcy9maWxlTWFuYWdlcic7XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgICBuYW1lOiAndmlkZW8nLFxyXG4gICAgZGlzcGxheTogJ2RpYWxvZycsXHJcbiAgICBhZGQ6IGZ1bmN0aW9uIChjb3JlKSB7XHJcbiAgICAgICAgY29yZS5hZGRNb2R1bGUoW2RpYWxvZywgY29tcG9uZW50LCByZXNpemluZywgZmlsZU1hbmFnZXJdKTtcclxuXHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGNvcmUub3B0aW9ucztcclxuICAgICAgICBjb25zdCBjb250ZXh0ID0gY29yZS5jb250ZXh0O1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHRWaWRlbyA9IGNvbnRleHQudmlkZW8gPSB7XHJcbiAgICAgICAgICAgIF9pbmZvTGlzdDogW10sIC8vIEBPdmVycmlkZSBmaWxlTWFuYWdlclxyXG4gICAgICAgICAgICBfaW5mb0luZGV4OiAwLCAvLyBAT3ZlcnJpZGUgZmlsZU1hbmFnZXJcclxuICAgICAgICAgICAgX3VwbG9hZEZpbGVMZW5ndGg6IDAsIC8vIEBPdmVycmlkZSBmaWxlTWFuYWdlclxyXG4gICAgICAgICAgICBmb2N1c0VsZW1lbnQ6IG51bGwsIC8vIEBPdmVycmlkZSBkaWFsb2cgLy8gVGhpcyBlbGVtZW50IGhhcyBmb2N1cyB3aGVuIHRoZSBkaWFsb2cgaXMgb3BlbmVkLlxyXG4gICAgICAgICAgICBzaXplVW5pdDogb3B0aW9ucy5fdmlkZW9TaXplVW5pdCxcclxuICAgICAgICAgICAgX2FsaWduOiAnbm9uZScsXHJcbiAgICAgICAgICAgIF9mbG9hdENsYXNzUmVnRXhwOiAnX19zZV9fZmxvYXRcXFxcLVthLXpdKycsXHJcbiAgICAgICAgICAgIF95b3V0dWJlUXVlcnk6IG9wdGlvbnMueW91dHViZVF1ZXJ5LFxyXG4gICAgICAgICAgICBfdmlkZW9SYXRpbzogKG9wdGlvbnMudmlkZW9SYXRpbyAqIDEwMCkgKyAnJScsXHJcbiAgICAgICAgICAgIF9kZWZhdWx0UmF0aW86IChvcHRpb25zLnZpZGVvUmF0aW8gKiAxMDApICsgJyUnLFxyXG4gICAgICAgICAgICBfbGlua1ZhbHVlOiAnJyxcclxuICAgICAgICAgICAgLy8gQHJlcXVpcmUgQE92ZXJyaWRlIGNvbXBvbmVudFxyXG4gICAgICAgICAgICBfZWxlbWVudDogbnVsbCxcclxuICAgICAgICAgICAgX2NvdmVyOiBudWxsLFxyXG4gICAgICAgICAgICBfY29udGFpbmVyOiBudWxsLFxyXG4gICAgICAgICAgICAvLyBAT3ZlcnJpZGUgcmVzaXppbmcgcHJvcGVydGllc1xyXG4gICAgICAgICAgICBpbnB1dFg6IG51bGwsXHJcbiAgICAgICAgICAgIGlucHV0WTogbnVsbCxcclxuICAgICAgICAgICAgX2VsZW1lbnRfdzogMSxcclxuICAgICAgICAgICAgX2VsZW1lbnRfaDogMSxcclxuICAgICAgICAgICAgX2VsZW1lbnRfbDogMCxcclxuICAgICAgICAgICAgX2VsZW1lbnRfdDogMCxcclxuICAgICAgICAgICAgX2RlZmF1bHRTaXplWDogJzEwMCUnLFxyXG4gICAgICAgICAgICBfZGVmYXVsdFNpemVZOiAob3B0aW9ucy52aWRlb1JhdGlvICogMTAwKSArICclJyxcclxuICAgICAgICAgICAgX29yaWdpbl93OiBvcHRpb25zLnZpZGVvV2lkdGggPT09ICcxMDAlJyA/ICcnIDogb3B0aW9ucy52aWRlb1dpZHRoLFxyXG4gICAgICAgICAgICBfb3JpZ2luX2g6IG9wdGlvbnMudmlkZW9IZWlnaHQgPT09ICc1Ni4yNSUnID8gJycgOiBvcHRpb25zLnZpZGVvSGVpZ2h0LFxyXG4gICAgICAgICAgICBfcHJvcG9ydGlvbkNoZWNrZWQ6IHRydWUsXHJcbiAgICAgICAgICAgIF9yZXNpemluZzogb3B0aW9ucy52aWRlb1Jlc2l6aW5nLFxyXG4gICAgICAgICAgICBfcmVzaXplRG90SGlkZTogIW9wdGlvbnMudmlkZW9IZWlnaHRTaG93LFxyXG4gICAgICAgICAgICBfcm90YXRpb246IG9wdGlvbnMudmlkZW9Sb3RhdGlvbixcclxuICAgICAgICAgICAgX29ubHlQZXJjZW50YWdlOiBvcHRpb25zLnZpZGVvU2l6ZU9ubHlQZXJjZW50YWdlLFxyXG4gICAgICAgICAgICBfcmF0aW86IGZhbHNlLFxyXG4gICAgICAgICAgICBfcmF0aW9YOiAxLFxyXG4gICAgICAgICAgICBfcmF0aW9ZOiAxLFxyXG4gICAgICAgICAgICBfY2FwdGlvblNob3c6IGZhbHNlXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLyoqIHZpZGVvIGRpYWxvZyAqL1xyXG4gICAgICAgIGxldCB2aWRlb19kaWFsb2cgPSB0aGlzLnNldERpYWxvZyhjb3JlKTtcclxuICAgICAgICBjb250ZXh0VmlkZW8ubW9kYWwgPSB2aWRlb19kaWFsb2c7XHJcbiAgICAgICAgY29udGV4dFZpZGVvLnZpZGVvSW5wdXRGaWxlID0gdmlkZW9fZGlhbG9nLnF1ZXJ5U2VsZWN0b3IoJy5fc2VfdmlkZW9fZmlsZScpO1xyXG4gICAgICAgIGNvbnRleHRWaWRlby52aWRlb1VybEZpbGUgPSB2aWRlb19kaWFsb2cucXVlcnlTZWxlY3RvcignLnNlLWlucHV0LXVybCcpO1xyXG4gICAgICAgIGNvbnRleHRWaWRlby5mb2N1c0VsZW1lbnQgPSBjb250ZXh0VmlkZW8udmlkZW9VcmxGaWxlIHx8IGNvbnRleHRWaWRlby52aWRlb0lucHV0RmlsZTtcclxuICAgICAgICBjb250ZXh0VmlkZW8ucHJldmlldyA9IHZpZGVvX2RpYWxvZy5xdWVyeVNlbGVjdG9yKCcuc2UtbGluay1wcmV2aWV3Jyk7XHJcblxyXG4gICAgICAgIC8qKiBhZGQgZXZlbnQgbGlzdGVuZXJzICovXHJcbiAgICAgICAgdmlkZW9fZGlhbG9nLnF1ZXJ5U2VsZWN0b3IoJ2Zvcm0nKS5hZGRFdmVudExpc3RlbmVyKCdzdWJtaXQnLCB0aGlzLnN1Ym1pdC5iaW5kKGNvcmUpKTtcclxuICAgICAgICBpZiAoY29udGV4dFZpZGVvLnZpZGVvSW5wdXRGaWxlKSB2aWRlb19kaWFsb2cucXVlcnlTZWxlY3RvcignLnNlLWRpYWxvZy1maWxlcy1lZGdlLWJ1dHRvbicpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fcmVtb3ZlU2VsZWN0ZWRGaWxlcy5iaW5kKGNvbnRleHRWaWRlby52aWRlb0lucHV0RmlsZSwgY29udGV4dFZpZGVvLnZpZGVvVXJsRmlsZSwgY29udGV4dFZpZGVvLnByZXZpZXcpKTtcclxuICAgICAgICBpZiAoY29udGV4dFZpZGVvLnZpZGVvSW5wdXRGaWxlICYmIGNvbnRleHRWaWRlby52aWRlb1VybEZpbGUpIGNvbnRleHRWaWRlby52aWRlb0lucHV0RmlsZS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLl9maWxlSW5wdXRDaGFuZ2UuYmluZChjb250ZXh0VmlkZW8pKTtcclxuICAgICAgICBpZiAoY29udGV4dFZpZGVvLnZpZGVvVXJsRmlsZSkgY29udGV4dFZpZGVvLnZpZGVvVXJsRmlsZS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIHRoaXMuX29uTGlua1ByZXZpZXcuYmluZChjb250ZXh0VmlkZW8ucHJldmlldywgY29udGV4dFZpZGVvLCBvcHRpb25zLmxpbmtQcm90b2NvbCkpO1xyXG5cclxuICAgICAgICBjb250ZXh0VmlkZW8ucHJvcG9ydGlvbiA9IHt9O1xyXG4gICAgICAgIGNvbnRleHRWaWRlby52aWRlb1JhdGlvT3B0aW9uID0ge307XHJcbiAgICAgICAgY29udGV4dFZpZGVvLmlucHV0WCA9IHt9O1xyXG4gICAgICAgIGNvbnRleHRWaWRlby5pbnB1dFkgPSB7fTtcclxuICAgICAgICBpZiAob3B0aW9ucy52aWRlb1Jlc2l6aW5nKSB7XHJcbiAgICAgICAgICAgIGNvbnRleHRWaWRlby5wcm9wb3J0aW9uID0gdmlkZW9fZGlhbG9nLnF1ZXJ5U2VsZWN0b3IoJy5fc2VfdmlkZW9fY2hlY2tfcHJvcG9ydGlvbicpO1xyXG4gICAgICAgICAgICBjb250ZXh0VmlkZW8udmlkZW9SYXRpb09wdGlvbiA9IHZpZGVvX2RpYWxvZy5xdWVyeVNlbGVjdG9yKCcuc2UtdmlkZW8tcmF0aW8nKTtcclxuICAgICAgICAgICAgY29udGV4dFZpZGVvLmlucHV0WCA9IHZpZGVvX2RpYWxvZy5xdWVyeVNlbGVjdG9yKCcuX3NlX3ZpZGVvX3NpemVfeCcpO1xyXG4gICAgICAgICAgICBjb250ZXh0VmlkZW8uaW5wdXRZID0gdmlkZW9fZGlhbG9nLnF1ZXJ5U2VsZWN0b3IoJy5fc2VfdmlkZW9fc2l6ZV95Jyk7XHJcbiAgICAgICAgICAgIGNvbnRleHRWaWRlby5pbnB1dFgudmFsdWUgPSBvcHRpb25zLnZpZGVvV2lkdGg7XHJcbiAgICAgICAgICAgIGNvbnRleHRWaWRlby5pbnB1dFkudmFsdWUgPSBvcHRpb25zLnZpZGVvSGVpZ2h0O1xyXG5cclxuICAgICAgICAgICAgY29udGV4dFZpZGVvLmlucHV0WC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuc2V0SW5wdXRTaXplLmJpbmQoY29yZSwgJ3gnKSk7XHJcbiAgICAgICAgICAgIGNvbnRleHRWaWRlby5pbnB1dFkuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0aGlzLnNldElucHV0U2l6ZS5iaW5kKGNvcmUsICd5JykpO1xyXG5cclxuICAgICAgICAgICAgY29udGV4dFZpZGVvLmlucHV0WC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLnNldFJhdGlvLmJpbmQoY29yZSkpO1xyXG4gICAgICAgICAgICBjb250ZXh0VmlkZW8uaW5wdXRZLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuc2V0UmF0aW8uYmluZChjb3JlKSk7XHJcbiAgICAgICAgICAgIGNvbnRleHRWaWRlby5wcm9wb3J0aW9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuc2V0UmF0aW8uYmluZChjb3JlKSk7XHJcbiAgICAgICAgICAgIGNvbnRleHRWaWRlby52aWRlb1JhdGlvT3B0aW9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuc2V0VmlkZW9SYXRpby5iaW5kKGNvcmUpKTtcclxuXHJcbiAgICAgICAgICAgIHZpZGVvX2RpYWxvZy5xdWVyeVNlbGVjdG9yKCcuc2UtZGlhbG9nLWJ0bi1yZXZlcnQnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuc2l6ZVJldmVydC5iaW5kKGNvcmUpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qKiBhcHBlbmQgaHRtbCAqL1xyXG4gICAgICAgIGNvbnRleHQuZGlhbG9nLm1vZGFsLmFwcGVuZENoaWxkKHZpZGVvX2RpYWxvZyk7XHJcblxyXG4gICAgICAgIC8qKiBlbXB0eSBtZW1vcnkgKi9cclxuICAgICAgICB2aWRlb19kaWFsb2cgPSBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKiogZGlhbG9nICovXHJcbiAgICBzZXREaWFsb2c6IGZ1bmN0aW9uIChjb3JlKSB7XHJcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gY29yZS5vcHRpb25zO1xyXG4gICAgICAgIGNvbnN0IGxhbmcgPSBjb3JlLmxhbmc7XHJcbiAgICAgICAgY29uc3QgZGlhbG9nID0gY29yZS51dGlsLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xyXG5cclxuICAgICAgICBkaWFsb2cuY2xhc3NOYW1lID0gJ3NlLWRpYWxvZy1jb250ZW50JztcclxuICAgICAgICBkaWFsb2cuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICBsZXQgaHRtbCA9ICcnICtcclxuICAgICAgICAgICAgJzxmb3JtIG1ldGhvZD1cInBvc3RcIiBlbmN0eXBlPVwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiPicgK1xyXG4gICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1kaWFsb2ctaGVhZGVyXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtY29tbWFuZD1cImNsb3NlXCIgY2xhc3M9XCJzZS1idG4gc2UtZGlhbG9nLWNsb3NlXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgdGl0bGU9XCInICsgbGFuZy5kaWFsb2dCb3guY2xvc2UgKyAnXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUuaWNvbnMuY2FuY2VsICtcclxuICAgICAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwic2UtbW9kYWwtdGl0bGVcIj4nICsgbGFuZy5kaWFsb2dCb3gudmlkZW9Cb3gudGl0bGUgKyAnPC9zcGFuPicgK1xyXG4gICAgICAgICAgICAgICAgJzwvZGl2PicgK1xyXG4gICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1kaWFsb2ctYm9keVwiPic7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbi52aWRlb0ZpbGVJbnB1dCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gJycgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWRpYWxvZy1mb3JtXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGxhYmVsPicgKyBsYW5nLmRpYWxvZ0JveC52aWRlb0JveC5maWxlICsgJzwvbGFiZWw+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWRpYWxvZy1mb3JtLWZpbGVzXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxpbnB1dCBjbGFzcz1cInNlLWlucHV0LWZvcm0gX3NlX3ZpZGVvX2ZpbGVcIiB0eXBlPVwiZmlsZVwiIGFjY2VwdD1cIicgKyBvcHRpb24udmlkZW9BY2NlcHQgKyAnXCInICsgKG9wdGlvbi52aWRlb011bHRpcGxlRmlsZSA/ICcgbXVsdGlwbGU9XCJtdWx0aXBsZVwiJyA6ICcnKSArICcvPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWNvbW1hbmQ9XCJmaWxlc1JlbW92ZVwiIGNsYXNzPVwic2UtYnRuIHNlLWRpYWxvZy1maWxlcy1lZGdlLWJ1dHRvbiBzZS1maWxlLXJlbW92ZVwiIHRpdGxlPVwiJyArIGxhbmcuY29udHJvbGxlci5yZW1vdmUgKyAnXCI+JyArIGNvcmUuaWNvbnMuY2FuY2VsICsgJzwvYnV0dG9uPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvZGl2PicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnPC9kaXY+JyA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgICAgIGlmIChvcHRpb24udmlkZW9VcmxJbnB1dCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gJycgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWRpYWxvZy1mb3JtXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGxhYmVsPicgKyBsYW5nLmRpYWxvZ0JveC52aWRlb0JveC51cmwgKyAnPC9sYWJlbD4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8aW5wdXQgY2xhc3M9XCJzZS1pbnB1dC1mb3JtIHNlLWlucHV0LXVybFwiIHR5cGU9XCJ0ZXh0XCIgLz4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8cHJlIGNsYXNzPVwic2UtbGluay1wcmV2aWV3XCI+PC9wcmU+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICc8L2Rpdj4nO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKG9wdGlvbi52aWRlb1Jlc2l6aW5nKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByYXRpb0xpc3QgPSBvcHRpb24udmlkZW9SYXRpb0xpc3QgfHwgW3tuYW1lOiAnMTY6OScsIHZhbHVlOiAwLjU2MjV9LCB7bmFtZTogJzQ6MycsIHZhbHVlOiAwLjc1fSwge25hbWU6ICcyMTo5JywgdmFsdWU6IDAuNDI4NX1dO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmF0aW8gPSBvcHRpb24udmlkZW9SYXRpbztcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9ubHlQZXJjZW50YWdlID0gb3B0aW9uLnZpZGVvU2l6ZU9ubHlQZXJjZW50YWdlO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb25seVBlcmNlbnREaXNwbGF5ID0gb25seVBlcmNlbnRhZ2UgPyAnIHN0eWxlPVwiZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1wiJyA6ICcnO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaGVpZ2h0RGlzcGxheSA9ICFvcHRpb24udmlkZW9IZWlnaHRTaG93ID8gJyBzdHlsZT1cImRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcIicgOiAnJztcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJhdGlvRGlzcGxheSA9ICFvcHRpb24udmlkZW9SYXRpb1Nob3cgPyAnIHN0eWxlPVwiZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1wiJyA6ICcnO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb25seVdpZHRoRGlzcGxheSA9ICFvbmx5UGVyY2VudGFnZSAmJiAhb3B0aW9uLnZpZGVvSGVpZ2h0U2hvdyAmJiAhb3B0aW9uLnZpZGVvUmF0aW9TaG93ID8gJyBzdHlsZT1cImRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcIicgOiAnJztcclxuICAgICAgICAgICAgICAgIGh0bWwgKz0gJycgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtZGlhbG9nLWZvcm1cIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1kaWFsb2ctc2l6ZS10ZXh0XCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGxhYmVsIGNsYXNzPVwic2l6ZS13XCI+JyArIGxhbmcuZGlhbG9nQm94LndpZHRoICsgJzwvbGFiZWw+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGxhYmVsIGNsYXNzPVwic2UtZGlhbG9nLXNpemUteFwiPiZuYnNwOzwvbGFiZWw+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGxhYmVsIGNsYXNzPVwic2l6ZS1oXCInICsgaGVpZ2h0RGlzcGxheSArICc+JyArIGxhbmcuZGlhbG9nQm94LmhlaWdodCArICc8L2xhYmVsPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxsYWJlbCBjbGFzcz1cInNpemUtaFwiJyArIHJhdGlvRGlzcGxheSArICc+KCcgKyBsYW5nLmRpYWxvZ0JveC5yYXRpbyArICcpPC9sYWJlbD4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJzwvZGl2PicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnPGlucHV0IGNsYXNzPVwic2UtaW5wdXQtY29udHJvbCBfc2VfdmlkZW9fc2l6ZV94XCIgcGxhY2Vob2xkZXI9XCIxMDAlXCInICsgKG9ubHlQZXJjZW50YWdlID8gJyB0eXBlPVwibnVtYmVyXCIgbWluPVwiMVwiJyA6ICd0eXBlPVwidGV4dFwiJykgKyAob25seVBlcmNlbnRhZ2UgPyAnIG1heD1cIjEwMFwiJyA6ICcnKSArICcvPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnPGxhYmVsIGNsYXNzPVwic2UtZGlhbG9nLXNpemUteFwiJyArIG9ubHlXaWR0aERpc3BsYXkgKyAnPicgKyAob25seVBlcmNlbnRhZ2UgPyAnJScgOiAneCcpICsgJzwvbGFiZWw+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICc8aW5wdXQgY2xhc3M9XCJzZS1pbnB1dC1jb250cm9sIF9zZV92aWRlb19zaXplX3lcIiBwbGFjZWhvbGRlcj1cIicgKyAob3B0aW9uLnZpZGVvUmF0aW8gKiAxMDApICsgJyVcIicgKyAob25seVBlcmNlbnRhZ2UgPyAnIHR5cGU9XCJudW1iZXJcIiBtaW49XCIxXCInIDogJ3R5cGU9XCJ0ZXh0XCInKSArIChvbmx5UGVyY2VudGFnZSA/ICcgbWF4PVwiMTAwXCInIDogJycpICsgaGVpZ2h0RGlzcGxheSArICcvPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnPHNlbGVjdCBjbGFzcz1cInNlLWlucHV0LXNlbGVjdCBzZS12aWRlby1yYXRpb1wiIHRpdGxlPVwiJyArIGxhbmcuZGlhbG9nQm94LnJhdGlvICsgJ1wiJyArIHJhdGlvRGlzcGxheSArICc+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaGVpZ2h0RGlzcGxheSkgaHRtbCArPSAnPG9wdGlvbiB2YWx1ZT1cIlwiPiAtIDwvb3B0aW9uPic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gcmF0aW9MaXN0Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAnPG9wdGlvbiB2YWx1ZT1cIicgKyByYXRpb0xpc3RbaV0udmFsdWUgKyAnXCInICsgKHJhdGlvLnRvU3RyaW5nKCkgPT09IHJhdGlvTGlzdFtpXS52YWx1ZS50b1N0cmluZygpID8gJyBzZWxlY3RlZCcgOiAnJykgKyAnPicgKyByYXRpb0xpc3RbaV0ubmFtZSArICc8L29wdGlvbj4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sICs9ICc8L3NlbGVjdD4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRpdGxlPVwiJyArIGxhbmcuZGlhbG9nQm94LnJldmVydEJ1dHRvbiArICdcIiBjbGFzcz1cInNlLWJ0biBzZS1kaWFsb2ctYnRuLXJldmVydFwiIHN0eWxlPVwiZmxvYXQ6IHJpZ2h0O1wiPicgKyBjb3JlLmljb25zLnJldmVydCArICc8L2J1dHRvbj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPC9kaXY+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1kaWFsb2ctZm9ybSBzZS1kaWFsb2ctZm9ybS1mb290ZXJcIicgKyBvbmx5UGVyY2VudERpc3BsYXkgKyBvbmx5V2lkdGhEaXNwbGF5ICsgJz4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJzxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJzZS1kaWFsb2ctYnRuLWNoZWNrIF9zZV92aWRlb19jaGVja19wcm9wb3J0aW9uXCIgY2hlY2tlZC8+Jm5ic3A7JyArIGxhbmcuZGlhbG9nQm94LnByb3BvcnRpb24gKyAnPC9sYWJlbD4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPC9kaXY+JztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaHRtbCArPSAnJyArXHJcbiAgICAgICAgICAgICAgICAnPC9kaXY+JyArXHJcbiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWRpYWxvZy1mb290ZXJcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPGRpdj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJzxsYWJlbD48aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cInN1bmVkaXRvcl92aWRlb19yYWRpb1wiIGNsYXNzPVwic2UtZGlhbG9nLWJ0bi1yYWRpb1wiIHZhbHVlPVwibm9uZVwiIGNoZWNrZWQ+JyArIGxhbmcuZGlhbG9nQm94LmJhc2ljICsgJzwvbGFiZWw+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICc8bGFiZWw+PGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJzdW5lZGl0b3JfdmlkZW9fcmFkaW9cIiBjbGFzcz1cInNlLWRpYWxvZy1idG4tcmFkaW9cIiB2YWx1ZT1cImxlZnRcIj4nICsgbGFuZy5kaWFsb2dCb3gubGVmdCArICc8L2xhYmVsPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnPGxhYmVsPjxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwic3VuZWRpdG9yX3ZpZGVvX3JhZGlvXCIgY2xhc3M9XCJzZS1kaWFsb2ctYnRuLXJhZGlvXCIgdmFsdWU9XCJjZW50ZXJcIj4nICsgbGFuZy5kaWFsb2dCb3guY2VudGVyICsgJzwvbGFiZWw+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICc8bGFiZWw+PGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJzdW5lZGl0b3JfdmlkZW9fcmFkaW9cIiBjbGFzcz1cInNlLWRpYWxvZy1idG4tcmFkaW9cIiB2YWx1ZT1cInJpZ2h0XCI+JyArIGxhbmcuZGlhbG9nQm94LnJpZ2h0ICsgJzwvbGFiZWw+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzwvZGl2PicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cInNlLWJ0bi1wcmltYXJ5XCIgdGl0bGU9XCInICsgbGFuZy5kaWFsb2dCb3guc3VibWl0QnV0dG9uICsgJ1wiPjxzcGFuPicgKyBsYW5nLmRpYWxvZ0JveC5zdWJtaXRCdXR0b24gKyAnPC9zcGFuPjwvYnV0dG9uPicgK1xyXG4gICAgICAgICAgICAgICAgJzwvZGl2PicgK1xyXG4gICAgICAgICAgICAnPC9mb3JtPic7XHJcblxyXG4gICAgICAgIGRpYWxvZy5pbm5lckhUTUwgPSBodG1sO1xyXG5cclxuICAgICAgICByZXR1cm4gZGlhbG9nO1xyXG4gICAgfSxcclxuXHJcbiAgICBfZmlsZUlucHV0Q2hhbmdlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnZpZGVvSW5wdXRGaWxlLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmlkZW9VcmxGaWxlLnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcclxuICAgICAgICAgICAgdGhpcy5wcmV2aWV3LnN0eWxlLnRleHREZWNvcmF0aW9uID0gJyc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy52aWRlb1VybEZpbGUuc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsIHRydWUpO1xyXG4gICAgICAgICAgICB0aGlzLnByZXZpZXcuc3R5bGUudGV4dERlY29yYXRpb24gPSAnbGluZS10aHJvdWdoJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIF9yZW1vdmVTZWxlY3RlZEZpbGVzOiBmdW5jdGlvbiAodXJsSW5wdXQsIHByZXZpZXcpIHtcclxuICAgICAgICB0aGlzLnZhbHVlID0gJyc7XHJcbiAgICAgICAgaWYgKHVybElucHV0KSB7XHJcbiAgICAgICAgICAgIHVybElucHV0LnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcclxuICAgICAgICAgICAgcHJldmlldy5zdHlsZS50ZXh0RGVjb3JhdGlvbiA9ICcnO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX29uTGlua1ByZXZpZXc6IGZ1bmN0aW9uIChjb250ZXh0LCBwcm90b2NvbCwgZSkge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gZS50YXJnZXQudmFsdWUudHJpbSgpO1xyXG4gICAgICAgIGlmICgvXjxpZnJhbWUuKlxcL2lmcmFtZT4kLy50ZXN0KHZhbHVlKSkge1xyXG4gICAgICAgICAgICBjb250ZXh0Ll9saW5rVmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy50ZXh0Q29udGVudCA9ICc8SUZyYW1lIDpzcmM9XCIuLlwiPjwvSUZyYW1lPic7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29udGV4dC5fbGlua1ZhbHVlID0gdGhpcy50ZXh0Q29udGVudCA9ICF2YWx1ZSA/ICcnIDogKHByb3RvY29sICYmIHZhbHVlLmluZGV4T2YoJzovLycpID09PSAtMSAmJiB2YWx1ZS5pbmRleE9mKCcjJykgIT09IDApID8gcHJvdG9jb2wgKyB2YWx1ZSA6IHZhbHVlLmluZGV4T2YoJzovLycpID09PSAtMSA/ICcvJyArIHZhbHVlIDogdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBfc2V0VGFnQXR0cnM6IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2NvbnRyb2xzJywgdHJ1ZSk7XHJcblxyXG4gICAgICAgIGNvbnN0IGF0dHJzID0gdGhpcy5vcHRpb25zLnZpZGVvVGFnQXR0cnM7XHJcbiAgICAgICAgaWYgKCFhdHRycykgcmV0dXJuO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gYXR0cnMpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnV0aWwuaGFzT3duKGF0dHJzLCBrZXkpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoa2V5LCBhdHRyc1trZXldKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGNyZWF0ZVZpZGVvVGFnOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY29uc3QgdmlkZW9UYWcgPSB0aGlzLnV0aWwuY3JlYXRlRWxlbWVudCgnVklERU8nKTtcclxuICAgICAgICB0aGlzLnBsdWdpbnMudmlkZW8uX3NldFRhZ0F0dHJzLmNhbGwodGhpcywgdmlkZW9UYWcpO1xyXG4gICAgICAgIHJldHVybiB2aWRlb1RhZztcclxuICAgIH0sXHJcblxyXG4gICAgX3NldElmcmFtZUF0dHJzOiBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgIGVsZW1lbnQuZnJhbWVCb3JkZXIgPSAnMCc7XHJcbiAgICAgICAgZWxlbWVudC5hbGxvd0Z1bGxzY3JlZW4gPSB0cnVlO1xyXG5cclxuICAgICAgICBjb25zdCBhdHRycyA9IHRoaXMub3B0aW9ucy52aWRlb0lmcmFtZUF0dHJzO1xyXG4gICAgICAgIGlmICghYXR0cnMpIHJldHVybjtcclxuXHJcbiAgICAgICAgZm9yIChsZXQga2V5IGluIGF0dHJzKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy51dGlsLmhhc093bihhdHRycywga2V5KSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKGtleSwgYXR0cnNba2V5XSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBjcmVhdGVJZnJhbWVUYWc6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zdCBpZnJhbWVUYWcgPSB0aGlzLnV0aWwuY3JlYXRlRWxlbWVudCgnSUZSQU1FJyk7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLnZpZGVvLl9zZXRJZnJhbWVBdHRycy5jYWxsKHRoaXMsIGlmcmFtZVRhZyk7XHJcbiAgICAgICAgcmV0dXJuIGlmcmFtZVRhZztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAT3ZlcnJpZGUgQFJlcXVpcmVkIGZpbGVNYW5hZ2VyXHJcbiAgICAgKi9cclxuICAgIGZpbGVUYWdzOiBbJ2lmcmFtZScsICd2aWRlbyddLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQE92ZXJyaWRlIGNvcmUsIHJlc2l6aW5nLCBmaWxlTWFuYWdlclxyXG4gICAgICogQGRlc2NyaXB0aW9uIEl0IGlzIGNhbGxlZCBmcm9tIGNvcmUuc2VsZWN0Q29tcG9uZW50LlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IFRhcmdldCBlbGVtZW50XHJcbiAgICAgKi9cclxuICAgIHNlbGVjdDogZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICB0aGlzLnBsdWdpbnMudmlkZW8ub25Nb2RpZnlNb2RlLmNhbGwodGhpcywgZWxlbWVudCwgdGhpcy5wbHVnaW5zLnJlc2l6aW5nLmNhbGxfY29udHJvbGxlcl9yZXNpemUuY2FsbCh0aGlzLCBlbGVtZW50LCAndmlkZW8nKSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQE92ZXJyaWRlIGZpbGVNYW5hZ2VyLCByZXNpemluZ1xyXG4gICAgICovXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgIGNvbnN0IGZyYW1lID0gZWxlbWVudCB8fCB0aGlzLmNvbnRleHQudmlkZW8uX2VsZW1lbnQ7XHJcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5jb250ZXh0LnZpZGVvLl9jb250YWluZXI7XHJcbiAgICAgICAgY29uc3QgZGF0YUluZGV4ID0gZnJhbWUuZ2V0QXR0cmlidXRlKCdkYXRhLWluZGV4JykgKiAxO1xyXG4gICAgICAgIGxldCBmb2N1c0VsID0gKGNvbnRhaW5lci5wcmV2aW91c0VsZW1lbnRTaWJsaW5nIHx8IGNvbnRhaW5lci5uZXh0RWxlbWVudFNpYmxpbmcpO1xyXG5cclxuICAgICAgICBjb25zdCBlbXB0eURpdiA9IGNvbnRhaW5lci5wYXJlbnROb2RlO1xyXG4gICAgICAgIHRoaXMudXRpbC5yZW1vdmVJdGVtKGNvbnRhaW5lcik7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLnZpZGVvLmluaXQuY2FsbCh0aGlzKTtcclxuICAgICAgICB0aGlzLmNvbnRyb2xsZXJzT2ZmKCk7XHJcblxyXG4gICAgICAgIGlmIChlbXB0eURpdiAhPT0gdGhpcy5jb250ZXh0LmVsZW1lbnQud3lzaXd5ZykgdGhpcy51dGlsLnJlbW92ZUl0ZW1BbGxQYXJlbnRzKGVtcHR5RGl2LCBmdW5jdGlvbiAoY3VycmVudCkgeyByZXR1cm4gY3VycmVudC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMDsgfSwgbnVsbCk7XHJcblxyXG4gICAgICAgIC8vIGZvY3VzXHJcbiAgICAgICAgdGhpcy5mb2N1c0VkZ2UoZm9jdXNFbCk7XHJcblxyXG4gICAgICAgIC8vIGV2ZW50XHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLmZpbGVNYW5hZ2VyLmRlbGV0ZUluZm8uY2FsbCh0aGlzLCAndmlkZW8nLCBkYXRhSW5kZXgsIHRoaXMuZnVuY3Rpb25zLm9uVmlkZW9VcGxvYWQpO1xyXG5cclxuICAgICAgICAvLyBoaXN0b3J5IHN0YWNrXHJcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2goZmFsc2UpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBSZXF1aXJlZCBAT3ZlcnJpZGUgZGlhbG9nXHJcbiAgICAgKi9cclxuICAgIG9uOiBmdW5jdGlvbiAodXBkYXRlKSB7XHJcbiAgICAgICAgY29uc3QgY29udGV4dFZpZGVvID0gdGhpcy5jb250ZXh0LnZpZGVvO1xyXG5cclxuICAgICAgICBpZiAoIXVwZGF0ZSkge1xyXG4gICAgICAgICAgICBjb250ZXh0VmlkZW8uaW5wdXRYLnZhbHVlID0gY29udGV4dFZpZGVvLl9vcmlnaW5fdyA9IHRoaXMub3B0aW9ucy52aWRlb1dpZHRoID09PSBjb250ZXh0VmlkZW8uX2RlZmF1bHRTaXplWCA/ICcnIDogdGhpcy5vcHRpb25zLnZpZGVvV2lkdGg7XHJcbiAgICAgICAgICAgIGNvbnRleHRWaWRlby5pbnB1dFkudmFsdWUgPSBjb250ZXh0VmlkZW8uX29yaWdpbl9oID0gdGhpcy5vcHRpb25zLnZpZGVvSGVpZ2h0ID09PSBjb250ZXh0VmlkZW8uX2RlZmF1bHRTaXplWSA/ICcnIDogdGhpcy5vcHRpb25zLnZpZGVvSGVpZ2h0O1xyXG4gICAgICAgICAgICBjb250ZXh0VmlkZW8ucHJvcG9ydGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmIChjb250ZXh0VmlkZW8udmlkZW9JbnB1dEZpbGUgJiYgdGhpcy5vcHRpb25zLnZpZGVvTXVsdGlwbGVGaWxlKSBjb250ZXh0VmlkZW8udmlkZW9JbnB1dEZpbGUuc2V0QXR0cmlidXRlKCdtdWx0aXBsZScsICdtdWx0aXBsZScpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChjb250ZXh0VmlkZW8udmlkZW9JbnB1dEZpbGUgJiYgdGhpcy5vcHRpb25zLnZpZGVvTXVsdGlwbGVGaWxlKSBjb250ZXh0VmlkZW8udmlkZW9JbnB1dEZpbGUucmVtb3ZlQXR0cmlidXRlKCdtdWx0aXBsZScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNvbnRleHRWaWRlby5fcmVzaXppbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLnZpZGVvLnNldFZpZGVvUmF0aW9TZWxlY3QuY2FsbCh0aGlzLCBjb250ZXh0VmlkZW8uX29yaWdpbl9oIHx8IGNvbnRleHRWaWRlby5fZGVmYXVsdFJhdGlvKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQFJlcXVpcmVkIEBPdmVycmlkZSBkaWFsb2dcclxuICAgICAqL1xyXG4gICAgb3BlbjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMucGx1Z2lucy5kaWFsb2cub3Blbi5jYWxsKHRoaXMsICd2aWRlbycsICd2aWRlbycgPT09IHRoaXMuY3VycmVudENvbnRyb2xsZXJOYW1lKTtcclxuICAgIH0sXHJcbiAgICBcclxuICAgIHNldFZpZGVvUmF0aW86IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgY29uc3QgY29udGV4dFZpZGVvID0gdGhpcy5jb250ZXh0LnZpZGVvO1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gZS50YXJnZXQub3B0aW9uc1tlLnRhcmdldC5zZWxlY3RlZEluZGV4XS52YWx1ZTtcclxuXHJcbiAgICAgICAgY29udGV4dFZpZGVvLl9kZWZhdWx0U2l6ZVkgPSBjb250ZXh0VmlkZW8uX3ZpZGVvUmF0aW8gPSAhdmFsdWUgPyBjb250ZXh0VmlkZW8uX2RlZmF1bHRTaXplWSA6ICh2YWx1ZSAqIDEwMCkgKyAnJSc7XHJcbiAgICAgICAgY29udGV4dFZpZGVvLmlucHV0WS5wbGFjZWhvbGRlciA9ICF2YWx1ZSA/ICcnIDogKHZhbHVlICogMTAwKSArICclJztcclxuICAgICAgICBjb250ZXh0VmlkZW8uaW5wdXRZLnZhbHVlID0gJyc7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQE92ZXJyaWRlIHJlc2l6aW5nXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30geHkgJ3gnOiB3aWR0aCwgJ3knOiBoZWlnaHRcclxuICAgICAqIEBwYXJhbSB7S2V5Ym9hcmRFdmVudH0gZSBFdmVudCBvYmplY3RcclxuICAgICAqL1xyXG4gICAgc2V0SW5wdXRTaXplOiBmdW5jdGlvbiAoeHksIGUpIHtcclxuICAgICAgICBpZiAoZSAmJiBlLmtleUNvZGUgPT09IDMyKSB7XHJcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgY29udGV4dFZpZGVvID0gdGhpcy5jb250ZXh0LnZpZGVvO1xyXG4gICAgICAgIHRoaXMucGx1Z2lucy5yZXNpemluZy5fbW9kdWxlX3NldElucHV0U2l6ZS5jYWxsKHRoaXMsIGNvbnRleHRWaWRlbywgeHkpO1xyXG5cclxuICAgICAgICBpZiAoeHkgPT09ICd5Jykge1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMudmlkZW8uc2V0VmlkZW9SYXRpb1NlbGVjdC5jYWxsKHRoaXMsIGUudGFyZ2V0LnZhbHVlIHx8IGNvbnRleHRWaWRlby5fZGVmYXVsdFJhdGlvKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQE92ZXJyaWRlIHJlc2l6aW5nXHJcbiAgICAgKi9cclxuICAgIHNldFJhdGlvOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLnJlc2l6aW5nLl9tb2R1bGVfc2V0UmF0aW8uY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQudmlkZW8pO1xyXG4gICAgfSxcclxuXHJcbiAgICBzdWJtaXQ6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgY29uc3QgY29udGV4dFZpZGVvID0gdGhpcy5jb250ZXh0LnZpZGVvO1xyXG4gICAgICAgIGNvbnN0IHZpZGVvUGx1Z2luID0gdGhpcy5wbHVnaW5zLnZpZGVvO1xyXG5cclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICAgICAgY29udGV4dFZpZGVvLl9hbGlnbiA9IGNvbnRleHRWaWRlby5tb2RhbC5xdWVyeVNlbGVjdG9yKCdpbnB1dFtuYW1lPVwic3VuZWRpdG9yX3ZpZGVvX3JhZGlvXCJdOmNoZWNrZWQnKS52YWx1ZTtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGNvbnRleHRWaWRlby52aWRlb0lucHV0RmlsZSAmJiBjb250ZXh0VmlkZW8udmlkZW9JbnB1dEZpbGUuZmlsZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93TG9hZGluZygpO1xyXG4gICAgICAgICAgICAgICAgdmlkZW9QbHVnaW4uc3VibWl0QWN0aW9uLmNhbGwodGhpcywgdGhpcy5jb250ZXh0LnZpZGVvLnZpZGVvSW5wdXRGaWxlLmZpbGVzKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0VmlkZW8udmlkZW9VcmxGaWxlICYmIGNvbnRleHRWaWRlby5fbGlua1ZhbHVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0xvYWRpbmcoKTtcclxuICAgICAgICAgICAgICAgIHZpZGVvUGx1Z2luLnNldHVwX3VybC5jYWxsKHRoaXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgdGhpcy5jbG9zZUxvYWRpbmcoKTtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ1tTVU5FRElUT1IudmlkZW8uc3VibWl0LmZhaWxdIGNhdXNlIDogXCInICsgZXJyb3IubWVzc2FnZSArICdcIicpO1xyXG4gICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5kaWFsb2cuY2xvc2UuY2FsbCh0aGlzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgc3VibWl0QWN0aW9uOiBmdW5jdGlvbiAoZmlsZUxpc3QpIHtcclxuICAgICAgICBpZiAoZmlsZUxpc3QubGVuZ3RoID09PSAwKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBmaWxlU2l6ZSA9IDA7XHJcbiAgICAgICAgbGV0IGZpbGVzID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGZpbGVMaXN0Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICgvdmlkZW8vaS50ZXN0KGZpbGVMaXN0W2ldLnR5cGUpKSB7XHJcbiAgICAgICAgICAgICAgICBmaWxlcy5wdXNoKGZpbGVMaXN0W2ldKTtcclxuICAgICAgICAgICAgICAgIGZpbGVTaXplICs9IGZpbGVMaXN0W2ldLnNpemU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGxpbWl0U2l6ZSA9IHRoaXMub3B0aW9ucy52aWRlb1VwbG9hZFNpemVMaW1pdDtcclxuICAgICAgICBpZiAobGltaXRTaXplID4gMCkge1xyXG4gICAgICAgICAgICBsZXQgaW5mb1NpemUgPSAwO1xyXG4gICAgICAgICAgICBjb25zdCB2aWRlb3NJbmZvID0gdGhpcy5jb250ZXh0LnZpZGVvLl9pbmZvTGlzdDtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHZpZGVvc0luZm8ubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGluZm9TaXplICs9IHZpZGVvc0luZm9baV0uc2l6ZSAqIDE7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICgoZmlsZVNpemUgKyBpbmZvU2l6ZSkgPiBsaW1pdFNpemUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VMb2FkaW5nKCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlcnIgPSAnW1NVTkVESVRPUi52aWRlb1VwbG9hZC5mYWlsXSBTaXplIG9mIHVwbG9hZGFibGUgdG90YWwgdmlkZW9zOiAnICsgKGxpbWl0U2l6ZS8xMDAwKSArICdLQic7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuZnVuY3Rpb25zLm9uVmlkZW9VcGxvYWRFcnJvciAhPT0gJ2Z1bmN0aW9uJyB8fCB0aGlzLmZ1bmN0aW9ucy5vblZpZGVvVXBsb2FkRXJyb3IoZXJyLCB7ICdsaW1pdFNpemUnOiBsaW1pdFNpemUsICdjdXJyZW50U2l6ZSc6IGluZm9TaXplLCAndXBsb2FkU2l6ZSc6IGZpbGVTaXplIH0sIHRoaXMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mdW5jdGlvbnMubm90aWNlT3BlbihlcnIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBjb250ZXh0VmlkZW8gPSB0aGlzLmNvbnRleHQudmlkZW87XHJcbiAgICAgICAgY29udGV4dFZpZGVvLl91cGxvYWRGaWxlTGVuZ3RoID0gZmlsZXMubGVuZ3RoO1xyXG5cclxuICAgICAgICBjb25zdCBpbmZvID0ge1xyXG4gICAgICAgICAgICBpbnB1dFdpZHRoOiBjb250ZXh0VmlkZW8uaW5wdXRYLnZhbHVlLFxyXG4gICAgICAgICAgICBpbnB1dEhlaWdodDogY29udGV4dFZpZGVvLmlucHV0WS52YWx1ZSxcclxuICAgICAgICAgICAgYWxpZ246IGNvbnRleHRWaWRlby5fYWxpZ24sXHJcbiAgICAgICAgICAgIGlzVXBkYXRlOiB0aGlzLmNvbnRleHQuZGlhbG9nLnVwZGF0ZU1vZGFsLFxyXG4gICAgICAgICAgICBlbGVtZW50OiBjb250ZXh0VmlkZW8uX2VsZW1lbnRcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZnVuY3Rpb25zLm9uVmlkZW9VcGxvYWRCZWZvcmUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5mdW5jdGlvbnMub25WaWRlb1VwbG9hZEJlZm9yZShmaWxlcywgaW5mbywgdGhpcywgZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgIGlmIChkYXRhICYmIHRoaXMuX3cuQXJyYXkuaXNBcnJheShkYXRhLnJlc3VsdCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnMudmlkZW8ucmVnaXN0ZXIuY2FsbCh0aGlzLCBpbmZvLCBkYXRhKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLnZpZGVvLnVwbG9hZC5jYWxsKHRoaXMsIGluZm8sIGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LmJpbmQodGhpcykpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICd1bmRlZmluZWQnKSByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICghcmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlTG9hZGluZygpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0JyAmJiByZXN1bHQubGVuZ3RoID4gMCkgZmlsZXMgPSByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBsdWdpbnMudmlkZW8udXBsb2FkLmNhbGwodGhpcywgaW5mbywgZmlsZXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICBlcnJvcjogZnVuY3Rpb24gKG1lc3NhZ2UsIHJlc3BvbnNlKSB7XHJcbiAgICAgICAgdGhpcy5jbG9zZUxvYWRpbmcoKTtcclxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZnVuY3Rpb25zLm9uVmlkZW9VcGxvYWRFcnJvciAhPT0gJ2Z1bmN0aW9uJyB8fCB0aGlzLmZ1bmN0aW9ucy5vblZpZGVvVXBsb2FkRXJyb3IobWVzc2FnZSwgcmVzcG9uc2UsIHRoaXMpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnVuY3Rpb25zLm5vdGljZU9wZW4obWVzc2FnZSk7XHJcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdbU1VORURJVE9SLnBsdWdpbi52aWRlby5lcnJvcl0gcmVzcG9uc2U6ICcgKyBtZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIHVwbG9hZDogZnVuY3Rpb24gKGluZm8sIGZpbGVzKSB7XHJcbiAgICAgICAgaWYgKCFmaWxlcykge1xyXG4gICAgICAgICAgICB0aGlzLmNsb3NlTG9hZGluZygpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2YgZmlsZXMgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy52aWRlby5lcnJvci5jYWxsKHRoaXMsIGZpbGVzLCBudWxsKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgdmlkZW9VcGxvYWRVcmwgPSB0aGlzLm9wdGlvbnMudmlkZW9VcGxvYWRVcmw7XHJcbiAgICAgICAgY29uc3QgZmlsZXNMZW4gPSB0aGlzLmNvbnRleHQuZGlhbG9nLnVwZGF0ZU1vZGFsID8gMSA6IGZpbGVzLmxlbmd0aDtcclxuXHJcbiAgICAgICAgLy8gc2VydmVyIHVwbG9hZFxyXG4gICAgICAgIGlmICh0eXBlb2YgdmlkZW9VcGxvYWRVcmwgPT09ICdzdHJpbmcnICYmIHZpZGVvVXBsb2FkVXJsLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWxlc0xlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUtJyArIGksIGZpbGVzW2ldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMuZmlsZU1hbmFnZXIudXBsb2FkLmNhbGwodGhpcywgdmlkZW9VcGxvYWRVcmwsIHRoaXMub3B0aW9ucy52aWRlb1VwbG9hZEhlYWRlciwgZm9ybURhdGEsIHRoaXMucGx1Z2lucy52aWRlby5jYWxsQmFja192aWRlb1VwbG9hZC5iaW5kKHRoaXMsIGluZm8pLCB0aGlzLmZ1bmN0aW9ucy5vblZpZGVvVXBsb2FkRXJyb3IpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdbU1VORURJVE9SLnZpZGVvVXBsb2FkLmZhaWxdIGNhdXNlIDogVGhlcmUgaXMgbm8gXCJ2aWRlb1VwbG9hZFVybFwiIG9wdGlvbi4nKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGNhbGxCYWNrX3ZpZGVvVXBsb2FkOiBmdW5jdGlvbiAoaW5mbywgeG1sSHR0cCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5mdW5jdGlvbnMudmlkZW9VcGxvYWRIYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnVuY3Rpb25zLnZpZGVvVXBsb2FkSGFuZGxlcih4bWxIdHRwLCBpbmZvLCB0aGlzKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IEpTT04ucGFyc2UoeG1sSHR0cC5yZXNwb25zZVRleHQpO1xyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UuZXJyb3JNZXNzYWdlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnMudmlkZW8uZXJyb3IuY2FsbCh0aGlzLCByZXNwb25zZS5lcnJvck1lc3NhZ2UsIHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy52aWRlby5yZWdpc3Rlci5jYWxsKHRoaXMsIGluZm8sIHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgcmVnaXN0ZXI6IGZ1bmN0aW9uIChpbmZvLCByZXNwb25zZSkge1xyXG4gICAgICAgIGNvbnN0IGZpbGVMaXN0ID0gcmVzcG9uc2UucmVzdWx0O1xyXG4gICAgICAgIGNvbnN0IHZpZGVvVGFnID0gdGhpcy5wbHVnaW5zLnZpZGVvLmNyZWF0ZVZpZGVvVGFnLmNhbGwodGhpcyk7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBmaWxlTGlzdC5sZW5ndGgsIGZpbGU7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBmaWxlID0geyBuYW1lOiBmaWxlTGlzdFtpXS5uYW1lLCBzaXplOiBmaWxlTGlzdFtpXS5zaXplIH07XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy52aWRlby5jcmVhdGVfdmlkZW8uY2FsbCh0aGlzLCAoaW5mby5pc1VwZGF0ZSA/IGluZm8uZWxlbWVudCA6IHZpZGVvVGFnLmNsb25lTm9kZShmYWxzZSkpLCBmaWxlTGlzdFtpXS51cmwsIGluZm8uaW5wdXRXaWR0aCwgaW5mby5pbnB1dEhlaWdodCwgaW5mby5hbGlnbiwgZmlsZSwgaW5mby5pc1VwZGF0ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNsb3NlTG9hZGluZygpO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXR1cF91cmw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBjb250ZXh0VmlkZW8gPSB0aGlzLmNvbnRleHQudmlkZW87XHJcbiAgICAgICAgICAgIGxldCB1cmwgPSBjb250ZXh0VmlkZW8uX2xpbmtWYWx1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmICh1cmwubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAvKiogaWZyYW1lIHNvdXJjZSAqL1xyXG4gICAgICAgICAgICBpZiAoL148aWZyYW1lLipcXC9pZnJhbWU+JC8udGVzdCh1cmwpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvSWZyYW1lID0gKG5ldyB0aGlzLl93LkRPTVBhcnNlcigpKS5wYXJzZUZyb21TdHJpbmcodXJsLCAndGV4dC9odG1sJykucXVlcnlTZWxlY3RvcignaWZyYW1lJyk7XHJcbiAgICAgICAgICAgICAgICB1cmwgPSBvSWZyYW1lLnNyYztcclxuICAgICAgICAgICAgICAgIGlmICh1cmwubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8qKiB5b3V0dWJlICovXHJcbiAgICAgICAgICAgIGlmICgveW91dHVcXC4/YmUvLnRlc3QodXJsKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCEvXmh0dHAvLnRlc3QodXJsKSkgdXJsID0gJ2h0dHBzOi8vJyArIHVybDtcclxuICAgICAgICAgICAgICAgIHVybCA9IHVybC5yZXBsYWNlKCd3YXRjaD92PScsICcnKTtcclxuICAgICAgICAgICAgICAgIGlmICghL15cXC9cXC8uK1xcL2VtYmVkXFwvLy50ZXN0KHVybCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB1cmwgPSB1cmwucmVwbGFjZSh1cmwubWF0Y2goL1xcL1xcLy4rXFwvLylbMF0sICcvL3d3dy55b3V0dWJlLmNvbS9lbWJlZC8nKS5yZXBsYWNlKCcmJywgJz8mJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGNvbnRleHRWaWRlby5feW91dHViZVF1ZXJ5Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoL1xcPy8udGVzdCh1cmwpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwbGl0VXJsID0gdXJsLnNwbGl0KCc/Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IHNwbGl0VXJsWzBdICsgJz8nICsgY29udGV4dFZpZGVvLl95b3V0dWJlUXVlcnkgKyAnJicgKyBzcGxpdFVybFsxXTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmwgKz0gJz8nICsgY29udGV4dFZpZGVvLl95b3V0dWJlUXVlcnk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKC92aW1lb1xcLmNvbS8udGVzdCh1cmwpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodXJsLmVuZHNXaXRoKCcvJykpIHtcclxuICAgICAgICAgICAgICAgICAgICB1cmwgPSB1cmwuc2xpY2UoMCwgLTEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdXJsID0gJ2h0dHBzOi8vcGxheWVyLnZpbWVvLmNvbS92aWRlby8nICsgdXJsLnNsaWNlKHVybC5sYXN0SW5kZXhPZignLycpICsgMSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy52aWRlby5jcmVhdGVfdmlkZW8uY2FsbCh0aGlzLCB0aGlzLnBsdWdpbnMudmlkZW8uY3JlYXRlSWZyYW1lVGFnLmNhbGwodGhpcyksIHVybCwgY29udGV4dFZpZGVvLmlucHV0WC52YWx1ZSwgY29udGV4dFZpZGVvLmlucHV0WS52YWx1ZSwgY29udGV4dFZpZGVvLl9hbGlnbiwgbnVsbCwgdGhpcy5jb250ZXh0LmRpYWxvZy51cGRhdGVNb2RhbCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ1tTVU5FRElUT1IudmlkZW8udXBsb2FkLmZhaWxdIGNhdXNlIDogXCInICsgZXJyb3IubWVzc2FnZSArICdcIicpO1xyXG4gICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xvc2VMb2FkaW5nKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBjcmVhdGVfdmlkZW86IGZ1bmN0aW9uIChvRnJhbWUsIHNyYywgd2lkdGgsIGhlaWdodCwgYWxpZ24sIGZpbGUsIGlzVXBkYXRlKSB7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0LnJlc2l6aW5nLl9yZXNpemVfcGx1Z2luID0gJ3ZpZGVvJztcclxuICAgICAgICBjb25zdCBjb250ZXh0VmlkZW8gPSB0aGlzLmNvbnRleHQudmlkZW87XHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IGNvdmVyID0gbnVsbDtcclxuICAgICAgICBsZXQgY29udGFpbmVyID0gbnVsbDtcclxuICAgICAgICBsZXQgaW5pdCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvKiogdXBkYXRlICovXHJcbiAgICAgICAgaWYgKGlzVXBkYXRlKSB7XHJcbiAgICAgICAgICAgIG9GcmFtZSA9IGNvbnRleHRWaWRlby5fZWxlbWVudDtcclxuICAgICAgICAgICAgaWYgKG9GcmFtZS5zcmMgIT09IHNyYykge1xyXG4gICAgICAgICAgICAgICAgaW5pdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpc1lvdXR1YmUgPSAveW91dHVcXC4/YmUvLnRlc3Qoc3JjKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGlzVmltZW8gPSAvdmltZW9cXC5jb20vLnRlc3Qoc3JjKTtcclxuICAgICAgICAgICAgICAgIGlmICgoaXNZb3V0dWJlIHx8IGlzVmltZW8pICYmICEvXmlmcmFtZSQvaS50ZXN0KG9GcmFtZS5ub2RlTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdUYWcgPSB0aGlzLnBsdWdpbnMudmlkZW8uY3JlYXRlSWZyYW1lVGFnLmNhbGwodGhpcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3VGFnLnNyYyA9IHNyYztcclxuICAgICAgICAgICAgICAgICAgICBvRnJhbWUucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQobmV3VGFnLCBvRnJhbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHRWaWRlby5fZWxlbWVudCA9IG9GcmFtZSA9IG5ld1RhZztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlzWW91dHViZSAmJiAhaXNWaW1lbyAmJiAhL152aWRlb28kL2kudGVzdChvRnJhbWUubm9kZU5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3VGFnID0gdGhpcy5wbHVnaW5zLnZpZGVvLmNyZWF0ZVZpZGVvVGFnLmNhbGwodGhpcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3VGFnLnNyYyA9IHNyYztcclxuICAgICAgICAgICAgICAgICAgICBvRnJhbWUucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQobmV3VGFnLCBvRnJhbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHRWaWRlby5fZWxlbWVudCA9IG9GcmFtZSA9IG5ld1RhZztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb0ZyYW1lLnNyYyA9IHNyYztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb250YWluZXIgPSBjb250ZXh0VmlkZW8uX2NvbnRhaW5lcjtcclxuICAgICAgICAgICAgY292ZXIgPSB0aGlzLnV0aWwuZ2V0UGFyZW50RWxlbWVudChvRnJhbWUsICdGSUdVUkUnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLyoqIGNyZWF0ZSAqL1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpbml0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgb0ZyYW1lLnNyYyA9IHNyYztcclxuICAgICAgICAgICAgY29udGV4dFZpZGVvLl9lbGVtZW50ID0gb0ZyYW1lO1xyXG4gICAgICAgICAgICBjb3ZlciA9IHRoaXMucGx1Z2lucy5jb21wb25lbnQuc2V0X2NvdmVyLmNhbGwodGhpcywgb0ZyYW1lKTtcclxuICAgICAgICAgICAgY29udGFpbmVyID0gdGhpcy5wbHVnaW5zLmNvbXBvbmVudC5zZXRfY29udGFpbmVyLmNhbGwodGhpcywgY292ZXIsICdzZS12aWRlby1jb250YWluZXInKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qKiByZW5kZXJpbmcgKi9cclxuICAgICAgICBjb250ZXh0VmlkZW8uX2NvdmVyID0gY292ZXI7XHJcbiAgICAgICAgY29udGV4dFZpZGVvLl9jb250YWluZXIgPSBjb250YWluZXI7XHJcblxyXG4gICAgICAgIGNvbnN0IGlucHV0VXBkYXRlID0gKHRoaXMucGx1Z2lucy5yZXNpemluZy5fbW9kdWxlX2dldFNpemVYLmNhbGwodGhpcywgY29udGV4dFZpZGVvKSAhPT0gKHdpZHRoIHx8IGNvbnRleHRWaWRlby5fZGVmYXVsdFNpemVYKSkgfHwgKHRoaXMucGx1Z2lucy5yZXNpemluZy5fbW9kdWxlX2dldFNpemVZLmNhbGwodGhpcywgY29udGV4dFZpZGVvKSAhPT0gKGhlaWdodCB8fCBjb250ZXh0VmlkZW8uX3ZpZGVvUmF0aW8pKTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VTaXplID0gIWlzVXBkYXRlIHx8IGlucHV0VXBkYXRlO1xyXG5cclxuICAgICAgICBpZiAoY29udGV4dFZpZGVvLl9yZXNpemluZykge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRleHQudmlkZW8uX3Byb3BvcnRpb25DaGVja2VkID0gY29udGV4dFZpZGVvLnByb3BvcnRpb24uY2hlY2tlZDtcclxuICAgICAgICAgICAgb0ZyYW1lLnNldEF0dHJpYnV0ZSgnZGF0YS1wcm9wb3J0aW9uJywgY29udGV4dFZpZGVvLl9wcm9wb3J0aW9uQ2hlY2tlZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBzaXplXHJcbiAgICAgICAgbGV0IGlzUGVyY2VudCA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChjaGFuZ2VTaXplKSB7XHJcbiAgICAgICAgICAgIGlzUGVyY2VudCA9IHRoaXMucGx1Z2lucy52aWRlby5hcHBseVNpemUuY2FsbCh0aGlzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGFsaWduXHJcbiAgICAgICAgaWYgKCEoaXNQZXJjZW50ICYmIGFsaWduID09PSAnY2VudGVyJykpIHtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLnZpZGVvLnNldEFsaWduLmNhbGwodGhpcywgbnVsbCwgb0ZyYW1lLCBjb3ZlciwgY29udGFpbmVyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2VkID0gdHJ1ZTtcclxuICAgICAgICBpZiAoIWlzVXBkYXRlKSB7XHJcbiAgICAgICAgICAgIGNoYW5nZWQgPSB0aGlzLmluc2VydENvbXBvbmVudChjb250YWluZXIsIGZhbHNlLCB0cnVlLCAhdGhpcy5vcHRpb25zLm1lZGlhQXV0b1NlbGVjdCk7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5vcHRpb25zLm1lZGlhQXV0b1NlbGVjdCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbGluZSA9IHRoaXMuYXBwZW5kRm9ybWF0VGFnKGNvbnRhaW5lciwgbnVsbCk7XHJcbiAgICAgICAgICAgICAgICBpZiAobGluZSkgdGhpcy5zZXRSYW5nZShsaW5lLCAwLCBsaW5lLCAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dFZpZGVvLl9yZXNpemluZyAmJiB0aGlzLmNvbnRleHQucmVzaXppbmcuX3JvdGF0ZVZlcnRpY2FsICYmIGNoYW5nZVNpemUpIHtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLnJlc2l6aW5nLnNldFRyYW5zZm9ybVNpemUuY2FsbCh0aGlzLCBvRnJhbWUsIG51bGwsIG51bGwpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNoYW5nZWQpIHtcclxuICAgICAgICAgICAgaWYgKGluaXQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy5maWxlTWFuYWdlci5zZXRJbmZvLmNhbGwodGhpcywgJ3ZpZGVvJywgb0ZyYW1lLCB0aGlzLmZ1bmN0aW9ucy5vblZpZGVvVXBsb2FkLCBmaWxlLCB0cnVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaXNVcGRhdGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0Q29tcG9uZW50KG9GcmFtZSwgJ3ZpZGVvJyk7XHJcbiAgICAgICAgICAgICAgICAvLyBoaXN0b3J5IHN0YWNrXHJcbiAgICAgICAgICAgICAgICB0aGlzLmhpc3RvcnkucHVzaChmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY29udGV4dC5yZXNpemluZy5fcmVzaXplX3BsdWdpbiA9ICcnO1xyXG4gICAgfSxcclxuXHJcbiAgICBfdXBkYXRlX3ZpZGVvQ292ZXI6IGZ1bmN0aW9uIChvRnJhbWUpIHtcclxuICAgICAgICBpZiAoIW9GcmFtZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCBjb250ZXh0VmlkZW8gPSB0aGlzLmNvbnRleHQudmlkZW87XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKC9edmlkZW8kL2kudGVzdChvRnJhbWUubm9kZU5hbWUpKSB0aGlzLnBsdWdpbnMudmlkZW8uX3NldFRhZ0F0dHJzLmNhbGwodGhpcywgb0ZyYW1lKTtcclxuICAgICAgICBlbHNlIHRoaXMucGx1Z2lucy52aWRlby5fc2V0SWZyYW1lQXR0cnMuY2FsbCh0aGlzLCBvRnJhbWUpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnN0IGV4aXN0RWxlbWVudCA9IHRoaXMudXRpbC5nZXRQYXJlbnRFbGVtZW50KG9GcmFtZSwgdGhpcy51dGlsLmlzTWVkaWFDb21wb25lbnQpIHx8IFxyXG4gICAgICAgICAgICB0aGlzLnV0aWwuZ2V0UGFyZW50RWxlbWVudChvRnJhbWUsIGZ1bmN0aW9uIChjdXJyZW50KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pc1d5c2l3eWdEaXYoY3VycmVudC5wYXJlbnROb2RlKTtcclxuICAgICAgICAgICAgfS5iaW5kKHRoaXMudXRpbCkpO1xyXG5cclxuICAgICAgICBjb25zdCBwcmV2RnJhbWUgPSBvRnJhbWU7XHJcbiAgICAgICAgY29udGV4dFZpZGVvLl9lbGVtZW50ID0gb0ZyYW1lID0gb0ZyYW1lLmNsb25lTm9kZSh0cnVlKTtcclxuICAgICAgICBjb25zdCBjb3ZlciA9IGNvbnRleHRWaWRlby5fY292ZXIgPSB0aGlzLnBsdWdpbnMuY29tcG9uZW50LnNldF9jb3Zlci5jYWxsKHRoaXMsIG9GcmFtZSk7XHJcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gY29udGV4dFZpZGVvLl9jb250YWluZXIgPSB0aGlzLnBsdWdpbnMuY29tcG9uZW50LnNldF9jb250YWluZXIuY2FsbCh0aGlzLCBjb3ZlciwgJ3NlLXZpZGVvLWNvbnRhaW5lcicpO1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBmaWdjYXB0aW9uID0gZXhpc3RFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2ZpZ2NhcHRpb24nKTtcclxuICAgICAgICAgICAgbGV0IGNhcHRpb24gPSBudWxsO1xyXG4gICAgICAgICAgICBpZiAoISFmaWdjYXB0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBjYXB0aW9uID0gdGhpcy51dGlsLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xyXG4gICAgICAgICAgICAgICAgY2FwdGlvbi5pbm5lckhUTUwgPSBmaWdjYXB0aW9uLmlubmVySFRNTDtcclxuICAgICAgICAgICAgICAgIHRoaXMudXRpbC5yZW1vdmVJdGVtKGZpZ2NhcHRpb24pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBzaXplXHJcbiAgICAgICAgICAgIGNvbnN0IHNpemUgPSAob0ZyYW1lLmdldEF0dHJpYnV0ZSgnZGF0YS1zaXplJykgfHwgb0ZyYW1lLmdldEF0dHJpYnV0ZSgnZGF0YS1vcmlnaW4nKSB8fCAnJykuc3BsaXQoJywnKTtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLnZpZGVvLmFwcGx5U2l6ZS5jYWxsKHRoaXMsIChzaXplWzBdIHx8IHByZXZGcmFtZS5zdHlsZS53aWR0aCB8fCBwcmV2RnJhbWUud2lkdGggfHwgJycpLCAoc2l6ZVsxXSB8fCBwcmV2RnJhbWUuc3R5bGUuaGVpZ2h0IHx8IHByZXZGcmFtZS5oZWlnaHQgfHwgJycpKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGFsaWduXHJcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdCA9IHRoaXMudXRpbC5nZXRGb3JtYXRFbGVtZW50KHByZXZGcmFtZSk7XHJcbiAgICAgICAgICAgIGlmIChmb3JtYXQpIGNvbnRleHRWaWRlby5fYWxpZ24gPSBmb3JtYXQuc3R5bGUudGV4dEFsaWduIHx8IGZvcm1hdC5zdHlsZS5mbG9hdDtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLnZpZGVvLnNldEFsaWduLmNhbGwodGhpcywgbnVsbCwgb0ZyYW1lLCBjb3ZlciwgY29udGFpbmVyKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnV0aWwuaXNGb3JtYXRFbGVtZW50KGV4aXN0RWxlbWVudCkgJiYgZXhpc3RFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgZXhpc3RFbGVtZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGNvbnRhaW5lciwgZXhpc3RFbGVtZW50KTtcclxuICAgICAgICAgICAgICAgIHRoaXMudXRpbC5yZW1vdmVJdGVtKHByZXZGcmFtZSk7XHJcbiAgICAgICAgICAgICAgICAvLyBjbGVhbiBmb3JtYXQgdGFnXHJcbiAgICAgICAgICAgICAgICB0aGlzLnV0aWwucmVtb3ZlRW1wdHlOb2RlKGV4aXN0RWxlbWVudCwgbnVsbCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXhpc3RFbGVtZW50LmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkgZXhpc3RFbGVtZW50LmlubmVySFRNTCA9IHRoaXMudXRpbC5odG1sUmVtb3ZlV2hpdGVTcGFjZShleGlzdEVsZW1lbnQuaW5uZXJIVE1MKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGV4aXN0RWxlbWVudC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChjb250YWluZXIsIGV4aXN0RWxlbWVudCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghIWNhcHRpb24pIGV4aXN0RWxlbWVudC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShjYXB0aW9uLCBjb250YWluZXIubmV4dEVsZW1lbnRTaWJsaW5nKTtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1tTVU5FRElUT1IudmlkZW8uZXJyb3JdIE1heWJlIHRoZSB2aWRlbyB0YWcgaXMgbmVzdGVkLicsIGVycm9yKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucGx1Z2lucy5maWxlTWFuYWdlci5zZXRJbmZvLmNhbGwodGhpcywgJ3ZpZGVvJywgb0ZyYW1lLCB0aGlzLmZ1bmN0aW9ucy5vblZpZGVvVXBsb2FkLCBudWxsLCB0cnVlKTtcclxuICAgICAgICB0aGlzLnBsdWdpbnMudmlkZW8uaW5pdC5jYWxsKHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBSZXF1aXJlZCBAT3ZlcnJpZGUgZmlsZU1hbmFnZXIsIHJlc2l6aW5nXHJcbiAgICAgKi9cclxuICAgIG9uTW9kaWZ5TW9kZTogZnVuY3Rpb24gKGVsZW1lbnQsIHNpemUpIHtcclxuICAgICAgICBjb25zdCBjb250ZXh0VmlkZW8gPSB0aGlzLmNvbnRleHQudmlkZW87XHJcbiAgICAgICAgY29udGV4dFZpZGVvLl9lbGVtZW50ID0gZWxlbWVudDtcclxuICAgICAgICBjb250ZXh0VmlkZW8uX2NvdmVyID0gdGhpcy51dGlsLmdldFBhcmVudEVsZW1lbnQoZWxlbWVudCwgJ0ZJR1VSRScpO1xyXG4gICAgICAgIGNvbnRleHRWaWRlby5fY29udGFpbmVyID0gdGhpcy51dGlsLmdldFBhcmVudEVsZW1lbnQoZWxlbWVudCwgdGhpcy51dGlsLmlzTWVkaWFDb21wb25lbnQpO1xyXG4gICAgICAgIGNvbnRleHRWaWRlby5fYWxpZ24gPSBlbGVtZW50LnN0eWxlLmZsb2F0IHx8IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWFsaWduJykgfHwgJ25vbmUnO1xyXG4gICAgICAgIGVsZW1lbnQuc3R5bGUuZmxvYXQgPSAnJztcclxuXHJcbiAgICAgICAgaWYgKHNpemUpIHtcclxuICAgICAgICAgICAgY29udGV4dFZpZGVvLl9lbGVtZW50X3cgPSBzaXplLnc7XHJcbiAgICAgICAgICAgIGNvbnRleHRWaWRlby5fZWxlbWVudF9oID0gc2l6ZS5oO1xyXG4gICAgICAgICAgICBjb250ZXh0VmlkZW8uX2VsZW1lbnRfdCA9IHNpemUudDtcclxuICAgICAgICAgICAgY29udGV4dFZpZGVvLl9lbGVtZW50X2wgPSBzaXplLmw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgb3JpZ2luID0gY29udGV4dFZpZGVvLl9lbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1zaXplJykgfHwgY29udGV4dFZpZGVvLl9lbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1vcmlnaW4nKTtcclxuICAgICAgICBsZXQgdywgaDtcclxuICAgICAgICBpZiAob3JpZ2luKSB7XHJcbiAgICAgICAgICAgIG9yaWdpbiA9IG9yaWdpbi5zcGxpdCgnLCcpO1xyXG4gICAgICAgICAgICB3ID0gb3JpZ2luWzBdO1xyXG4gICAgICAgICAgICBoID0gb3JpZ2luWzFdO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoc2l6ZSkge1xyXG4gICAgICAgICAgICB3ID0gc2l6ZS53O1xyXG4gICAgICAgICAgICBoID0gc2l6ZS5oO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29udGV4dFZpZGVvLl9vcmlnaW5fdyA9IHcgfHwgZWxlbWVudC5zdHlsZS53aWR0aCB8fCBlbGVtZW50LndpZHRoIHx8ICcnO1xyXG4gICAgICAgIGNvbnRleHRWaWRlby5fb3JpZ2luX2ggPSBoIHx8IGVsZW1lbnQuc3R5bGUuaGVpZ2h0IHx8IGVsZW1lbnQuaGVpZ2h0IHx8ICcnO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBSZXF1aXJlZCBAT3ZlcnJpZGUgZmlsZU1hbmFnZXIsIHJlc2l6aW5nXHJcbiAgICAgKi9cclxuICAgIG9wZW5Nb2RpZnk6IGZ1bmN0aW9uIChub3RPcGVuKSB7XHJcbiAgICAgICAgY29uc3QgY29udGV4dFZpZGVvID0gdGhpcy5jb250ZXh0LnZpZGVvO1xyXG5cclxuICAgICAgICBpZiAoY29udGV4dFZpZGVvLnZpZGVvVXJsRmlsZSkgY29udGV4dFZpZGVvLl9saW5rVmFsdWUgPSBjb250ZXh0VmlkZW8ucHJldmlldy50ZXh0Q29udGVudCA9IGNvbnRleHRWaWRlby52aWRlb1VybEZpbGUudmFsdWUgPSAoY29udGV4dFZpZGVvLl9lbGVtZW50LnNyYyB8fCAoY29udGV4dFZpZGVvLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ3NvdXJjZScpIHx8ICcnKS5zcmMgfHwgJycpO1xyXG4gICAgICAgIGNvbnRleHRWaWRlby5tb2RhbC5xdWVyeVNlbGVjdG9yKCdpbnB1dFtuYW1lPVwic3VuZWRpdG9yX3ZpZGVvX3JhZGlvXCJdW3ZhbHVlPVwiJyArIGNvbnRleHRWaWRlby5fYWxpZ24gKyAnXCJdJykuY2hlY2tlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmIChjb250ZXh0VmlkZW8uX3Jlc2l6aW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5yZXNpemluZy5fbW9kdWxlX3NldE1vZGlmeUlucHV0U2l6ZS5jYWxsKHRoaXMsIGNvbnRleHRWaWRlbywgdGhpcy5wbHVnaW5zLnZpZGVvKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNvbnN0IHkgPSBjb250ZXh0VmlkZW8uX3ZpZGVvUmF0aW8gPSB0aGlzLnBsdWdpbnMucmVzaXppbmcuX21vZHVsZV9nZXRTaXplWS5jYWxsKHRoaXMsIGNvbnRleHRWaWRlbyk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJhdGlvU2VsZWN0ZWQgPSB0aGlzLnBsdWdpbnMudmlkZW8uc2V0VmlkZW9SYXRpb1NlbGVjdC5jYWxsKHRoaXMsIHkpO1xyXG4gICAgICAgICAgICBpZiAoIXJhdGlvU2VsZWN0ZWQpIGNvbnRleHRWaWRlby5pbnB1dFkudmFsdWUgPSBjb250ZXh0VmlkZW8uX29ubHlQZXJjZW50YWdlID8gdGhpcy51dGlsLmdldE51bWJlcih5LCAyKSA6IHk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIW5vdE9wZW4pIHRoaXMucGx1Z2lucy5kaWFsb2cub3Blbi5jYWxsKHRoaXMsICd2aWRlbycsIHRydWUpO1xyXG4gICAgfSxcclxuICAgIFxyXG4gICAgc2V0VmlkZW9SYXRpb1NlbGVjdDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgbGV0IHJhdGlvU2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICBjb25zdCBjb250ZXh0VmlkZW8gPSB0aGlzLmNvbnRleHQudmlkZW87XHJcbiAgICAgICAgY29uc3QgcmF0aW9PcHRpb25zID0gY29udGV4dFZpZGVvLnZpZGVvUmF0aW9PcHRpb24ub3B0aW9ucztcclxuXHJcbiAgICAgICAgaWYgKC8lJC8udGVzdCh2YWx1ZSkgfHwgY29udGV4dFZpZGVvLl9vbmx5UGVyY2VudGFnZSkgdmFsdWUgPSAodGhpcy51dGlsLmdldE51bWJlcih2YWx1ZSwgMikgLyAxMDApICsgJyc7XHJcbiAgICAgICAgZWxzZSBpZiAoIXRoaXMudXRpbC5pc051bWJlcih2YWx1ZSkgfHwgKHZhbHVlICogMSkgPj0gMSkgdmFsdWUgPSAnJztcclxuXHJcbiAgICAgICAgY29udGV4dFZpZGVvLmlucHV0WS5wbGFjZWhvbGRlciA9ICcnO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSByYXRpb09wdGlvbnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHJhdGlvT3B0aW9uc1tpXS52YWx1ZSA9PT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJhdGlvU2VsZWN0ZWQgPSByYXRpb09wdGlvbnNbaV0uc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgY29udGV4dFZpZGVvLmlucHV0WS5wbGFjZWhvbGRlciA9ICF2YWx1ZSA/ICcnIDogKHZhbHVlICogMTAwKSArICclJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHJhdGlvT3B0aW9uc1tpXS5zZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJhdGlvU2VsZWN0ZWQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQE92ZXJyaWRlIGZpbGVNYW5hZ2VyXHJcbiAgICAgKi9cclxuICAgIGNoZWNrRmlsZUluZm86IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLnBsdWdpbnMuZmlsZU1hbmFnZXIuY2hlY2tJbmZvLmNhbGwodGhpcywgJ3ZpZGVvJywgWydpZnJhbWUnLCAndmlkZW8nXSwgdGhpcy5mdW5jdGlvbnMub25WaWRlb1VwbG9hZCwgdGhpcy5wbHVnaW5zLnZpZGVvLl91cGRhdGVfdmlkZW9Db3Zlci5iaW5kKHRoaXMpLCB0cnVlKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAT3ZlcnJpZGUgZmlsZU1hbmFnZXJcclxuICAgICAqL1xyXG4gICAgcmVzZXRGaWxlSW5mbzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMucGx1Z2lucy5maWxlTWFuYWdlci5yZXNldEluZm8uY2FsbCh0aGlzLCAndmlkZW8nLCB0aGlzLmZ1bmN0aW9ucy5vblZpZGVvVXBsb2FkKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAT3ZlcnJpZGUgZmlsZU1hbmFnZXJcclxuICAgICAqL1xyXG4gICAgYXBwbHlTaXplOiBmdW5jdGlvbiAodywgaCkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHRWaWRlbyA9IHRoaXMuY29udGV4dC52aWRlbztcclxuXHJcbiAgICAgICAgaWYgKCF3KSB3ID0gY29udGV4dFZpZGVvLmlucHV0WC52YWx1ZSB8fCB0aGlzLm9wdGlvbnMudmlkZW9XaWR0aDtcclxuICAgICAgICBpZiAoIWgpIGggPSBjb250ZXh0VmlkZW8uaW5wdXRZLnZhbHVlIHx8IHRoaXMub3B0aW9ucy52aWRlb0hlaWdodDtcclxuICAgICAgICBcclxuICAgICAgICBpZiAoY29udGV4dFZpZGVvLl9vbmx5UGVyY2VudGFnZSB8fCAvJSQvLnRlc3QodykgfHwgIXcpIHtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLnZpZGVvLnNldFBlcmNlbnRTaXplLmNhbGwodGhpcywgKHcgfHwgJzEwMCUnKSwgKGggfHwgKC8lJC8udGVzdChjb250ZXh0VmlkZW8uX3ZpZGVvUmF0aW8pID8gY29udGV4dFZpZGVvLl92aWRlb1JhdGlvIDogY29udGV4dFZpZGVvLl9kZWZhdWx0UmF0aW8pKSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoKCF3IHx8IHcgPT09ICdhdXRvJykgJiYgKCFoIHx8IGggPT09ICdhdXRvJykpIHtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLnZpZGVvLnNldEF1dG9TaXplLmNhbGwodGhpcyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLnZpZGVvLnNldFNpemUuY2FsbCh0aGlzLCB3LCAoaCB8fCBjb250ZXh0VmlkZW8uX3ZpZGVvUmF0aW8gfHwgY29udGV4dFZpZGVvLl9kZWZhdWx0UmF0aW8pLCBmYWxzZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQE92ZXJyaWRlIHJlc2l6aW5nXHJcbiAgICAgKi9cclxuICAgIHNpemVSZXZlcnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLnBsdWdpbnMucmVzaXppbmcuX21vZHVsZV9zaXplUmV2ZXJ0LmNhbGwodGhpcywgdGhpcy5jb250ZXh0LnZpZGVvKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAT3ZlcnJpZGUgcmVzaXppbmdcclxuICAgICAqL1xyXG4gICAgc2V0U2l6ZTogZnVuY3Rpb24gKHcsIGgsIG5vdFJlc2V0UGVyY2VudGFnZSwgZGlyZWN0aW9uKSB7XHJcbiAgICAgICAgY29uc3QgY29udGV4dFZpZGVvID0gdGhpcy5jb250ZXh0LnZpZGVvO1xyXG4gICAgICAgIGNvbnN0IG9ubHlXID0gL14ocnd8bHcpJC8udGVzdChkaXJlY3Rpb24pO1xyXG4gICAgICAgIGNvbnN0IG9ubHlIID0gL14odGh8YmgpJC8udGVzdChkaXJlY3Rpb24pO1xyXG5cclxuICAgICAgICBpZiAoIW9ubHlIKSB3ID0gdGhpcy51dGlsLmdldE51bWJlcih3LCAwKTtcclxuICAgICAgICBpZiAoIW9ubHlXKSBoID0gdGhpcy51dGlsLmlzTnVtYmVyKGgpID8gaCArIGNvbnRleHRWaWRlby5zaXplVW5pdCA6ICFoID8gJycgOiBoO1xyXG5cclxuICAgICAgICBpZiAoIW9ubHlIKSBjb250ZXh0VmlkZW8uX2VsZW1lbnQuc3R5bGUud2lkdGggPSB3ID8gdyArIGNvbnRleHRWaWRlby5zaXplVW5pdCA6ICcnO1xyXG4gICAgICAgIGlmICghb25seVcpIGNvbnRleHRWaWRlby5fY292ZXIuc3R5bGUucGFkZGluZ0JvdHRvbSA9IGNvbnRleHRWaWRlby5fY292ZXIuc3R5bGUuaGVpZ2h0ID0gaDtcclxuXHJcbiAgICAgICAgaWYgKCFvbmx5SCAmJiAhLyUkLy50ZXN0KHcpKSB7XHJcbiAgICAgICAgICAgIGNvbnRleHRWaWRlby5fY292ZXIuc3R5bGUud2lkdGggPSAnJztcclxuICAgICAgICAgICAgY29udGV4dFZpZGVvLl9jb250YWluZXIuc3R5bGUud2lkdGggPSAnJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghb25seVcgJiYgIS8lJC8udGVzdChoKSkge1xyXG4gICAgICAgICAgICBjb250ZXh0VmlkZW8uX2VsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gaDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb250ZXh0VmlkZW8uX2VsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gJyc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIW5vdFJlc2V0UGVyY2VudGFnZSkgY29udGV4dFZpZGVvLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1wZXJjZW50YWdlJyk7XHJcblxyXG4gICAgICAgIC8vIHNhdmUgY3VycmVudCBzaXplXHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLnJlc2l6aW5nLl9tb2R1bGVfc2F2ZUN1cnJlbnRTaXplLmNhbGwodGhpcywgY29udGV4dFZpZGVvKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAT3ZlcnJpZGUgcmVzaXppbmdcclxuICAgICAqL1xyXG4gICAgc2V0QXV0b1NpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLnBsdWdpbnMudmlkZW8uc2V0UGVyY2VudFNpemUuY2FsbCh0aGlzLCAxMDAsIHRoaXMuY29udGV4dC52aWRlby5fZGVmYXVsdFJhdGlvKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAT3ZlcnJpZGUgcmVzaXppbmdcclxuICAgICAqL1xyXG4gICAgc2V0T3JpZ2luU2l6ZTogZnVuY3Rpb24gKGRhdGFTaXplKSB7XHJcbiAgICAgICAgY29uc3QgY29udGV4dFZpZGVvID0gdGhpcy5jb250ZXh0LnZpZGVvO1xyXG4gICAgICAgIGNvbnRleHRWaWRlby5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtcGVyY2VudGFnZScpO1xyXG5cclxuICAgICAgICB0aGlzLnBsdWdpbnMucmVzaXppbmcucmVzZXRUcmFuc2Zvcm0uY2FsbCh0aGlzLCBjb250ZXh0VmlkZW8uX2VsZW1lbnQpO1xyXG4gICAgICAgIHRoaXMucGx1Z2lucy52aWRlby5jYW5jZWxQZXJjZW50QXR0ci5jYWxsKHRoaXMpO1xyXG5cclxuICAgICAgICBjb25zdCBvcmlnaW5TaXplID0gKChkYXRhU2l6ZSA/IGNvbnRleHRWaWRlby5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtc2l6ZScpIDogJycpIHx8IGNvbnRleHRWaWRlby5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtb3JpZ2luJykgfHwgJycpLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKG9yaWdpblNpemUpIHtcclxuICAgICAgICAgICAgY29uc3QgdyA9IG9yaWdpblNpemVbMF07XHJcbiAgICAgICAgICAgIGNvbnN0IGggPSBvcmlnaW5TaXplWzFdO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNvbnRleHRWaWRlby5fb25seVBlcmNlbnRhZ2UgfHwgKC8lJC8udGVzdCh3KSAmJiAoLyUkLy50ZXN0KGgpIHx8ICEvXFxkLy50ZXN0KGgpKSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy52aWRlby5zZXRQZXJjZW50U2l6ZS5jYWxsKHRoaXMsIHcsIGgpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLnZpZGVvLnNldFNpemUuY2FsbCh0aGlzLCB3LCBoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gc2F2ZSBjdXJyZW50IHNpemVcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLnJlc2l6aW5nLl9tb2R1bGVfc2F2ZUN1cnJlbnRTaXplLmNhbGwodGhpcywgY29udGV4dFZpZGVvKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQE92ZXJyaWRlIHJlc2l6aW5nXHJcbiAgICAgKi9cclxuICAgIHNldFBlcmNlbnRTaXplOiBmdW5jdGlvbiAodywgaCkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHRWaWRlbyA9IHRoaXMuY29udGV4dC52aWRlbztcclxuICAgICAgICBoID0gISFoICYmICEvJSQvLnRlc3QoaCkgJiYgIXRoaXMudXRpbC5nZXROdW1iZXIoaCwgMCkgPyB0aGlzLnV0aWwuaXNOdW1iZXIoaCkgPyBoICsgJyUnIDogaCA6IHRoaXMudXRpbC5pc051bWJlcihoKSA/IGggKyBjb250ZXh0VmlkZW8uc2l6ZVVuaXQgOiAoaCB8fCBjb250ZXh0VmlkZW8uX2RlZmF1bHRSYXRpbyk7XHJcblxyXG4gICAgICAgIGNvbnRleHRWaWRlby5fY29udGFpbmVyLnN0eWxlLndpZHRoID0gdGhpcy51dGlsLmlzTnVtYmVyKHcpID8gdyArICclJyA6IHc7XHJcbiAgICAgICAgY29udGV4dFZpZGVvLl9jb250YWluZXIuc3R5bGUuaGVpZ2h0ID0gJyc7XHJcbiAgICAgICAgY29udGV4dFZpZGVvLl9jb3Zlci5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuICAgICAgICBjb250ZXh0VmlkZW8uX2NvdmVyLnN0eWxlLmhlaWdodCA9IGg7XHJcbiAgICAgICAgY29udGV4dFZpZGVvLl9jb3Zlci5zdHlsZS5wYWRkaW5nQm90dG9tID0gaDtcclxuICAgICAgICBjb250ZXh0VmlkZW8uX2VsZW1lbnQuc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgY29udGV4dFZpZGVvLl9lbGVtZW50LnN0eWxlLmhlaWdodCA9ICcxMDAlJztcclxuICAgICAgICBjb250ZXh0VmlkZW8uX2VsZW1lbnQuc3R5bGUubWF4V2lkdGggPSAnJztcclxuXHJcbiAgICAgICAgaWYgKGNvbnRleHRWaWRlby5fYWxpZ24gPT09ICdjZW50ZXInKSB0aGlzLnBsdWdpbnMudmlkZW8uc2V0QWxpZ24uY2FsbCh0aGlzLCBudWxsLCBudWxsLCBudWxsLCBudWxsKTtcclxuICAgICAgICBjb250ZXh0VmlkZW8uX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLXBlcmNlbnRhZ2UnLCB3ICsgJywnICsgaCk7XHJcblxyXG4gICAgICAgIC8vIHNhdmUgY3VycmVudCBzaXplXHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLnJlc2l6aW5nLl9tb2R1bGVfc2F2ZUN1cnJlbnRTaXplLmNhbGwodGhpcywgY29udGV4dFZpZGVvKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAT3ZlcnJpZGUgcmVzaXppbmdcclxuICAgICAqL1xyXG4gICAgY2FuY2VsUGVyY2VudEF0dHI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zdCBjb250ZXh0VmlkZW8gPSB0aGlzLmNvbnRleHQudmlkZW87XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29udGV4dFZpZGVvLl9jb3Zlci5zdHlsZS53aWR0aCA9ICcnO1xyXG4gICAgICAgIGNvbnRleHRWaWRlby5fY292ZXIuc3R5bGUuaGVpZ2h0ID0gJyc7XHJcbiAgICAgICAgY29udGV4dFZpZGVvLl9jb3Zlci5zdHlsZS5wYWRkaW5nQm90dG9tID0gJyc7XHJcbiAgICAgICAgY29udGV4dFZpZGVvLl9jb250YWluZXIuc3R5bGUud2lkdGggPSAnJztcclxuICAgICAgICBjb250ZXh0VmlkZW8uX2NvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSAnJztcclxuXHJcbiAgICAgICAgdGhpcy51dGlsLnJlbW92ZUNsYXNzKGNvbnRleHRWaWRlby5fY29udGFpbmVyLCB0aGlzLmNvbnRleHQudmlkZW8uX2Zsb2F0Q2xhc3NSZWdFeHApO1xyXG4gICAgICAgIHRoaXMudXRpbC5hZGRDbGFzcyhjb250ZXh0VmlkZW8uX2NvbnRhaW5lciwgJ19fc2VfX2Zsb2F0LScgKyBjb250ZXh0VmlkZW8uX2FsaWduKTtcclxuXHJcbiAgICAgICAgaWYgKGNvbnRleHRWaWRlby5fYWxpZ24gPT09ICdjZW50ZXInKSB0aGlzLnBsdWdpbnMudmlkZW8uc2V0QWxpZ24uY2FsbCh0aGlzLCBudWxsLCBudWxsLCBudWxsLCBudWxsKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAT3ZlcnJpZGUgcmVzaXppbmdcclxuICAgICAqL1xyXG4gICAgc2V0QWxpZ246IGZ1bmN0aW9uIChhbGlnbiwgZWxlbWVudCwgY292ZXIsIGNvbnRhaW5lcikge1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHRWaWRlbyA9IHRoaXMuY29udGV4dC52aWRlbztcclxuICAgICAgICBcclxuICAgICAgICBpZiAoIWFsaWduKSBhbGlnbiA9IGNvbnRleHRWaWRlby5fYWxpZ247XHJcbiAgICAgICAgaWYgKCFlbGVtZW50KSBlbGVtZW50ID0gY29udGV4dFZpZGVvLl9lbGVtZW50O1xyXG4gICAgICAgIGlmICghY292ZXIpIGNvdmVyID0gY29udGV4dFZpZGVvLl9jb3ZlcjtcclxuICAgICAgICBpZiAoIWNvbnRhaW5lcikgY29udGFpbmVyID0gY29udGV4dFZpZGVvLl9jb250YWluZXI7XHJcblxyXG4gICAgICAgIGlmIChhbGlnbiAmJiBhbGlnbiAhPT0gJ25vbmUnKSB7XHJcbiAgICAgICAgICAgIGNvdmVyLnN0eWxlLm1hcmdpbiA9ICdhdXRvJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb3Zlci5zdHlsZS5tYXJnaW4gPSAnMCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoLyUkLy50ZXN0KGVsZW1lbnQuc3R5bGUud2lkdGgpICYmIGFsaWduID09PSAnY2VudGVyJykge1xyXG4gICAgICAgICAgICBjb250YWluZXIuc3R5bGUubWluV2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgIGNvdmVyLnN0eWxlLndpZHRoID0gY29udGFpbmVyLnN0eWxlLndpZHRoO1xyXG4gICAgICAgICAgICBjb3Zlci5zdHlsZS5oZWlnaHQgPSBjb3Zlci5zdHlsZS5oZWlnaHQ7XHJcbiAgICAgICAgICAgIGNvdmVyLnN0eWxlLnBhZGRpbmdCb3R0b20gPSAhLyUkLy50ZXN0KGNvdmVyLnN0eWxlLmhlaWdodCkgPyBjb3Zlci5zdHlsZS5oZWlnaHQgOiB0aGlzLnV0aWwuZ2V0TnVtYmVyKCh0aGlzLnV0aWwuZ2V0TnVtYmVyKGNvdmVyLnN0eWxlLmhlaWdodCwgMikgLyAxMDApICogdGhpcy51dGlsLmdldE51bWJlcihjb3Zlci5zdHlsZS53aWR0aCwgMiksIDIpICsgJyUnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5taW5XaWR0aCA9ICcnO1xyXG4gICAgICAgICAgICBjb3Zlci5zdHlsZS53aWR0aCA9IHRoaXMuY29udGV4dC5yZXNpemluZy5fcm90YXRlVmVydGljYWwgPyAoZWxlbWVudC5zdHlsZS5oZWlnaHQgfHwgZWxlbWVudC5vZmZzZXRIZWlnaHQpIDogKGVsZW1lbnQuc3R5bGUud2lkdGggfHwgJzEwMCUnKTtcclxuICAgICAgICAgICAgY292ZXIuc3R5bGUucGFkZGluZ0JvdHRvbSA9IGNvdmVyLnN0eWxlLmhlaWdodDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy51dGlsLmhhc0NsYXNzKGNvbnRhaW5lciwgJ19fc2VfX2Zsb2F0LScgKyBhbGlnbikpIHtcclxuICAgICAgICAgICAgdGhpcy51dGlsLnJlbW92ZUNsYXNzKGNvbnRhaW5lciwgY29udGV4dFZpZGVvLl9mbG9hdENsYXNzUmVnRXhwKTtcclxuICAgICAgICAgICAgdGhpcy51dGlsLmFkZENsYXNzKGNvbnRhaW5lciwgJ19fc2VfX2Zsb2F0LScgKyBhbGlnbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLWFsaWduJywgYWxpZ24pO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBPdmVycmlkZSBkaWFsb2dcclxuICAgICAqL1xyXG4gICAgaW5pdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHRWaWRlbyA9IHRoaXMuY29udGV4dC52aWRlbztcclxuICAgICAgICBpZiAoY29udGV4dFZpZGVvLnZpZGVvSW5wdXRGaWxlKSBjb250ZXh0VmlkZW8udmlkZW9JbnB1dEZpbGUudmFsdWUgPSAnJztcclxuICAgICAgICBpZiAoY29udGV4dFZpZGVvLnZpZGVvVXJsRmlsZSkgY29udGV4dFZpZGVvLl9saW5rVmFsdWUgPSBjb250ZXh0VmlkZW8ucHJldmlldy50ZXh0Q29udGVudCA9IGNvbnRleHRWaWRlby52aWRlb1VybEZpbGUudmFsdWUgPSAnJztcclxuICAgICAgICBpZiAoY29udGV4dFZpZGVvLnZpZGVvSW5wdXRGaWxlICYmIGNvbnRleHRWaWRlby52aWRlb1VybEZpbGUpIHtcclxuICAgICAgICAgICAgY29udGV4dFZpZGVvLnZpZGVvVXJsRmlsZS5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XHJcbiAgICAgICAgICAgIGNvbnRleHRWaWRlby5wcmV2aWV3LnN0eWxlLnRleHREZWNvcmF0aW9uID0gJyc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb250ZXh0VmlkZW8uX29yaWdpbl93ID0gdGhpcy5vcHRpb25zLnZpZGVvV2lkdGg7XHJcbiAgICAgICAgY29udGV4dFZpZGVvLl9vcmlnaW5faCA9IHRoaXMub3B0aW9ucy52aWRlb0hlaWdodDtcclxuICAgICAgICBjb250ZXh0VmlkZW8ubW9kYWwucXVlcnlTZWxlY3RvcignaW5wdXRbbmFtZT1cInN1bmVkaXRvcl92aWRlb19yYWRpb1wiXVt2YWx1ZT1cIm5vbmVcIl0nKS5jaGVja2VkID0gdHJ1ZTtcclxuICAgICAgICBcclxuICAgICAgICBpZiAoY29udGV4dFZpZGVvLl9yZXNpemluZykge1xyXG4gICAgICAgICAgICBjb250ZXh0VmlkZW8uaW5wdXRYLnZhbHVlID0gdGhpcy5vcHRpb25zLnZpZGVvV2lkdGggPT09IGNvbnRleHRWaWRlby5fZGVmYXVsdFNpemVYID8gJycgOiB0aGlzLm9wdGlvbnMudmlkZW9XaWR0aDtcclxuICAgICAgICAgICAgY29udGV4dFZpZGVvLmlucHV0WS52YWx1ZSA9IHRoaXMub3B0aW9ucy52aWRlb0hlaWdodCA9PT0gY29udGV4dFZpZGVvLl9kZWZhdWx0U2l6ZVkgPyAnJyA6IHRoaXMub3B0aW9ucy52aWRlb0hlaWdodDtcclxuICAgICAgICAgICAgY29udGV4dFZpZGVvLnByb3BvcnRpb24uY2hlY2tlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIGNvbnRleHRWaWRlby5wcm9wb3J0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLnZpZGVvLnNldFZpZGVvUmF0aW9TZWxlY3QuY2FsbCh0aGlzLCBjb250ZXh0VmlkZW8uX2RlZmF1bHRSYXRpbyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG4iLCIvKlxyXG4gKiB3eXNpd3lnIHdlYiBlZGl0b3JcclxuICpcclxuICogc3VuZWRpdG9yLmpzXHJcbiAqIENvcHlyaWdodCAyMDE3IEppSG9uZyBMZWUuXHJcbiAqIE1JVCBsaWNlbnNlLlxyXG4gKi9cclxuJ3VzZSBzdHJpY3QnO1xyXG5cclxuaW1wb3J0IGRpYWxvZyBmcm9tICcuLi9tb2R1bGVzL2RpYWxvZyc7XHJcbmltcG9ydCBjb21wb25lbnQgZnJvbSAnLi4vbW9kdWxlcy9jb21wb25lbnQnO1xyXG5pbXBvcnQgZmlsZU1hbmFnZXIgZnJvbSAnLi4vbW9kdWxlcy9maWxlTWFuYWdlcic7XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgICBuYW1lOiAnYXVkaW8nLFxyXG4gICAgZGlzcGxheTogJ2RpYWxvZycsXHJcbiAgICBhZGQ6IGZ1bmN0aW9uIChjb3JlKSB7XHJcbiAgICAgICAgY29yZS5hZGRNb2R1bGUoW2RpYWxvZywgY29tcG9uZW50LCBmaWxlTWFuYWdlcl0pO1xyXG5cclxuICAgICAgICBjb25zdCBjb250ZXh0ID0gY29yZS5jb250ZXh0O1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHRBdWRpbyA9IGNvbnRleHQuYXVkaW8gPSB7XHJcbiAgICAgICAgICAgIF9pbmZvTGlzdDogW10sIC8vIEBPdmVycmlkZSBmaWxlTWFuYWdlclxyXG4gICAgICAgICAgICBfaW5mb0luZGV4OiAwLCAvLyBAT3ZlcnJpZGUgZmlsZU1hbmFnZXJcclxuICAgICAgICAgICAgX3VwbG9hZEZpbGVMZW5ndGg6IDAsIC8vIEBPdmVycmlkZSBmaWxlTWFuYWdlclxyXG4gICAgICAgICAgICBmb2N1c0VsZW1lbnQ6IG51bGwsIC8vIEBPdmVycmlkZSBkaWFsb2cgLy8gVGhpcyBlbGVtZW50IGhhcyBmb2N1cyB3aGVuIHRoZSBkaWFsb2cgaXMgb3BlbmVkLlxyXG4gICAgICAgICAgICB0YXJnZXRTZWxlY3Q6IG51bGwsXHJcbiAgICAgICAgICAgIF9vcmlnaW5fdzogY29yZS5vcHRpb25zLmF1ZGlvV2lkdGgsXHJcbiAgICAgICAgICAgIF9vcmlnaW5faDogY29yZS5vcHRpb25zLmF1ZGlvSGVpZ2h0LFxyXG4gICAgICAgICAgICBfbGlua1ZhbHVlOiAnJyxcclxuICAgICAgICAgICAgLy8gQHJlcXVpcmUgQE92ZXJyaWRlIGNvbXBvbmVudFxyXG4gICAgICAgICAgICBfZWxlbWVudDogbnVsbCxcclxuICAgICAgICAgICAgX2NvdmVyOiBudWxsLFxyXG4gICAgICAgICAgICBfY29udGFpbmVyOiBudWxsLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8qKiBkaWFsb2cgKi9cclxuICAgICAgICBsZXQgYXVkaW9fZGlhbG9nID0gdGhpcy5zZXREaWFsb2coY29yZSk7XHJcbiAgICAgICAgY29udGV4dEF1ZGlvLm1vZGFsID0gYXVkaW9fZGlhbG9nO1xyXG4gICAgICAgIGNvbnRleHRBdWRpby5hdWRpb0lucHV0RmlsZSA9IGF1ZGlvX2RpYWxvZy5xdWVyeVNlbGVjdG9yKCcuX3NlX2F1ZGlvX2ZpbGVzJyk7XHJcbiAgICAgICAgY29udGV4dEF1ZGlvLmF1ZGlvVXJsRmlsZSA9IGF1ZGlvX2RpYWxvZy5xdWVyeVNlbGVjdG9yKCcuc2UtaW5wdXQtdXJsJyk7XHJcbiAgICAgICAgY29udGV4dEF1ZGlvLmZvY3VzRWxlbWVudCA9IGNvbnRleHRBdWRpby5hdWRpb0lucHV0RmlsZSB8fCBjb250ZXh0QXVkaW8uYXVkaW9VcmxGaWxlO1xyXG4gICAgICAgIGNvbnRleHRBdWRpby5wcmV2aWV3ID0gYXVkaW9fZGlhbG9nLnF1ZXJ5U2VsZWN0b3IoJy5zZS1saW5rLXByZXZpZXcnKTtcclxuXHJcbiAgICAgICAgLyoqIGNvbnRyb2xsZXIgKi9cclxuICAgICAgICBsZXQgYXVkaW9fY29udHJvbGxlciA9IHRoaXMuc2V0Q29udHJvbGxlcihjb3JlKTtcclxuICAgICAgICBjb250ZXh0QXVkaW8uY29udHJvbGxlciA9IGF1ZGlvX2NvbnRyb2xsZXI7XHJcblxyXG4gICAgICAgIC8qKiBhZGQgZXZlbnQgbGlzdGVuZXJzICovXHJcbiAgICAgICAgYXVkaW9fZGlhbG9nLnF1ZXJ5U2VsZWN0b3IoJ2Zvcm0nKS5hZGRFdmVudExpc3RlbmVyKCdzdWJtaXQnLCB0aGlzLnN1Ym1pdC5iaW5kKGNvcmUpKTtcclxuICAgICAgICBpZiAoY29udGV4dEF1ZGlvLmF1ZGlvSW5wdXRGaWxlKSBhdWRpb19kaWFsb2cucXVlcnlTZWxlY3RvcignLnNlLWRpYWxvZy1maWxlcy1lZGdlLWJ1dHRvbicpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fcmVtb3ZlU2VsZWN0ZWRGaWxlcy5iaW5kKGNvbnRleHRBdWRpby5hdWRpb0lucHV0RmlsZSwgY29udGV4dEF1ZGlvLmF1ZGlvVXJsRmlsZSwgY29udGV4dEF1ZGlvLnByZXZpZXcpKTtcclxuICAgICAgICBpZiAoY29udGV4dEF1ZGlvLmF1ZGlvSW5wdXRGaWxlICYmIGNvbnRleHRBdWRpby5hdWRpb1VybEZpbGUpIGNvbnRleHRBdWRpby5hdWRpb0lucHV0RmlsZS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLl9maWxlSW5wdXRDaGFuZ2UuYmluZChjb250ZXh0QXVkaW8pKTtcclxuICAgICAgICBhdWRpb19jb250cm9sbGVyLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbkNsaWNrX2NvbnRyb2xsZXIuYmluZChjb3JlKSk7XHJcbiAgICAgICAgaWYgKGNvbnRleHRBdWRpby5hdWRpb1VybEZpbGUpIGNvbnRleHRBdWRpby5hdWRpb1VybEZpbGUuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCB0aGlzLl9vbkxpbmtQcmV2aWV3LmJpbmQoY29udGV4dEF1ZGlvLnByZXZpZXcsIGNvbnRleHRBdWRpbywgY29yZS5vcHRpb25zLmxpbmtQcm90b2NvbCkpO1xyXG5cclxuICAgICAgICAvKiogYXBwZW5kIGh0bWwgKi9cclxuICAgICAgICBjb250ZXh0LmRpYWxvZy5tb2RhbC5hcHBlbmRDaGlsZChhdWRpb19kaWFsb2cpO1xyXG5cclxuICAgICAgICAvKiogYXBwZW5kIGNvbnRyb2xsZXIgKi9cclxuICAgICAgICBjb250ZXh0LmVsZW1lbnQucmVsYXRpdmUuYXBwZW5kQ2hpbGQoYXVkaW9fY29udHJvbGxlcik7XHJcblxyXG4gICAgICAgIC8qKiBlbXB0eSBtZW1vcnkgKi9cclxuICAgICAgICBhdWRpb19kaWFsb2cgPSBudWxsLCBhdWRpb19jb250cm9sbGVyID0gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqIEhUTUwgLSBkaWFsb2cgKi9cclxuICAgIHNldERpYWxvZzogZnVuY3Rpb24gKGNvcmUpIHtcclxuICAgICAgICBjb25zdCBvcHRpb24gPSBjb3JlLm9wdGlvbnM7XHJcbiAgICAgICAgY29uc3QgbGFuZyA9IGNvcmUubGFuZztcclxuICAgICAgICBjb25zdCBkaWFsb2cgPSBjb3JlLnV0aWwuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcblxyXG4gICAgICAgIGRpYWxvZy5jbGFzc05hbWUgPSAnc2UtZGlhbG9nLWNvbnRlbnQnO1xyXG4gICAgICAgIGRpYWxvZy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIGxldCBodG1sID0gJycgK1xyXG4gICAgICAgICAgICAnPGZvcm0gbWV0aG9kPVwicG9zdFwiIGVuY3R5cGU9XCJtdWx0aXBhcnQvZm9ybS1kYXRhXCI+JyArXHJcbiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWRpYWxvZy1oZWFkZXJcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1jb21tYW5kPVwiY2xvc2VcIiBjbGFzcz1cInNlLWJ0biBzZS1kaWFsb2ctY2xvc2VcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiB0aXRsZT1cIicgKyBsYW5nLmRpYWxvZ0JveC5jbG9zZSArICdcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29yZS5pY29ucy5jYW5jZWwgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzZS1tb2RhbC10aXRsZVwiPicgKyBsYW5nLmRpYWxvZ0JveC5hdWRpb0JveC50aXRsZSArICc8L3NwYW4+JyArXHJcbiAgICAgICAgICAgICAgICAnPC9kaXY+JyArXHJcbiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWRpYWxvZy1ib2R5XCI+JztcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9uLmF1ZGlvRmlsZUlucHV0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAnJyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtZGlhbG9nLWZvcm1cIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8bGFiZWw+JyArIGxhbmcuZGlhbG9nQm94LmF1ZGlvQm94LmZpbGUgKyAnPC9sYWJlbD4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtZGlhbG9nLWZvcm0tZmlsZXNcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGlucHV0IGNsYXNzPVwic2UtaW5wdXQtZm9ybSBfc2VfYXVkaW9fZmlsZXNcIiB0eXBlPVwiZmlsZVwiIGFjY2VwdD1cIicgKyBvcHRpb24uYXVkaW9BY2NlcHQgKyAnXCInICsgKG9wdGlvbi5hdWRpb011bHRpcGxlRmlsZSA/ICcgbXVsdGlwbGU9XCJtdWx0aXBsZVwiJyA6ICcnKSArICcvPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWNvbW1hbmQ9XCJmaWxlc1JlbW92ZVwiIGNsYXNzPVwic2UtYnRuIHNlLWRpYWxvZy1maWxlcy1lZGdlLWJ1dHRvbiBzZS1maWxlLXJlbW92ZVwiIHRpdGxlPVwiJyArIGxhbmcuY29udHJvbGxlci5yZW1vdmUgKyAnXCI+JyArIGNvcmUuaWNvbnMuY2FuY2VsICsgJzwvYnV0dG9uPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvZGl2PicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnPC9kaXY+JztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGlmIChvcHRpb24uYXVkaW9VcmxJbnB1dCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gJycgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWRpYWxvZy1mb3JtXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGxhYmVsPicgKyBsYW5nLmRpYWxvZ0JveC5hdWRpb0JveC51cmwgKyAnPC9sYWJlbD4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8aW5wdXQgY2xhc3M9XCJzZS1pbnB1dC1mb3JtIHNlLWlucHV0LXVybFwiIHR5cGU9XCJ0ZXh0XCIgLz4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8cHJlIGNsYXNzPVwic2UtbGluay1wcmV2aWV3XCI+PC9wcmU+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICc8L2Rpdj4nO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgaHRtbCArPSAnJyArXHJcbiAgICAgICAgICAgICAgICAnPC9kaXY+JyArXHJcbiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWRpYWxvZy1mb290ZXJcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJzZS1idG4tcHJpbWFyeVwiIHRpdGxlPVwiJyArIGxhbmcuZGlhbG9nQm94LnN1Ym1pdEJ1dHRvbiArICdcIj48c3Bhbj4nICsgbGFuZy5kaWFsb2dCb3guc3VibWl0QnV0dG9uICsgJzwvc3Bhbj48L2J1dHRvbj4nICtcclxuICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAgICAgJzwvZm9ybT4nO1xyXG5cclxuICAgICAgICBkaWFsb2cuaW5uZXJIVE1MID0gaHRtbDtcclxuXHJcbiAgICAgICAgcmV0dXJuIGRpYWxvZztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqIEhUTUwgLSBjb250cm9sbGVyICovXHJcbiAgICBzZXRDb250cm9sbGVyOiBmdW5jdGlvbiAoY29yZSkge1xyXG4gICAgICAgIGNvbnN0IGxhbmcgPSBjb3JlLmxhbmc7XHJcbiAgICAgICAgY29uc3QgaWNvbnMgPSBjb3JlLmljb25zO1xyXG4gICAgICAgIGNvbnN0IGxpbmtfYnRuID0gY29yZS51dGlsLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xyXG5cclxuICAgICAgICBsaW5rX2J0bi5jbGFzc05hbWUgPSAnc2UtY29udHJvbGxlciBzZS1jb250cm9sbGVyLWxpbmsnO1xyXG4gICAgICAgIGxpbmtfYnRuLmlubmVySFRNTCA9ICcnICtcclxuICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1hcnJvdyBzZS1hcnJvdy11cFwiPjwvZGl2PicgK1xyXG4gICAgICAgICAgICAnPGRpdiBjbGFzcz1cImxpbmstY29udGVudFwiPicgK1xyXG4gICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1idG4tZ3JvdXBcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1jb21tYW5kPVwidXBkYXRlXCIgdGFiaW5kZXg9XCItMVwiIGNsYXNzPVwic2UtdG9vbHRpcFwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29ucy5lZGl0ICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC1pbm5lclwiPjxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC10ZXh0XCI+JyArIGxhbmcuY29udHJvbGxlci5lZGl0ICsgJzwvc3Bhbj48L3NwYW4+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzwvYnV0dG9uPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWNvbW1hbmQ9XCJkZWxldGVcIiB0YWJpbmRleD1cIi0xXCIgY2xhc3M9XCJzZS10b29sdGlwXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb25zLmRlbGV0ZSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtaW5uZXJcIj48c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtdGV4dFwiPicgKyBsYW5nLmNvbnRyb2xsZXIucmVtb3ZlICsgJzwvc3Bhbj48L3NwYW4+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzwvYnV0dG9uPicgK1xyXG4gICAgICAgICAgICAgICAgJzwvZGl2PicgK1xyXG4gICAgICAgICAgICAnPC9kaXY+JztcclxuXHJcbiAgICAgICAgcmV0dXJuIGxpbmtfYnRuO1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBEaXNhYmxlIHVybCBpbnB1dCB3aGVuIHVwbG9hZGluZyBmaWxlc1xyXG4gICAgX2ZpbGVJbnB1dENoYW5nZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5hdWRpb0lucHV0RmlsZS52YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmF1ZGlvVXJsRmlsZS5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XHJcbiAgICAgICAgICAgIHRoaXMucHJldmlldy5zdHlsZS50ZXh0RGVjb3JhdGlvbiA9ICcnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXVkaW9VcmxGaWxlLnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCB0cnVlKTtcclxuICAgICAgICAgICAgdGhpcy5wcmV2aWV3LnN0eWxlLnRleHREZWNvcmF0aW9uID0gJ2xpbmUtdGhyb3VnaCc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvLyBEaXNhYmxlIHVybCBpbnB1dCB3aGVuIHVwbG9hZGluZyBmaWxlc1xyXG4gICAgX3JlbW92ZVNlbGVjdGVkRmlsZXM6IGZ1bmN0aW9uICh1cmxJbnB1dCwgcHJldmlldykge1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSAnJztcclxuICAgICAgICBpZiAodXJsSW5wdXQpIHtcclxuICAgICAgICAgICAgdXJsSW5wdXQucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xyXG4gICAgICAgICAgICBwcmV2aWV3LnN0eWxlLnRleHREZWNvcmF0aW9uID0gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvLyBjcmVhdGUgbmV3IGF1ZGlvIHRhZ1xyXG4gICAgX2NyZWF0ZUF1ZGlvVGFnOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY29uc3Qgb0F1ZGlvID0gdGhpcy51dGlsLmNyZWF0ZUVsZW1lbnQoJ0FVRElPJyk7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLmF1ZGlvLl9zZXRUYWdBdHRycy5jYWxsKHRoaXMsIG9BdWRpbyk7XHJcblxyXG4gICAgICAgIGNvbnN0IHcgPSB0aGlzLmNvbnRleHQuYXVkaW8uX29yaWdpbl93O1xyXG4gICAgICAgIGNvbnN0IGggPSB0aGlzLmNvbnRleHQuYXVkaW8uX29yaWdpbl9oO1xyXG4gICAgICAgIG9BdWRpby5zZXRBdHRyaWJ1dGUoJ29yaWdpbi1zaXplJywgdyArICcsJyArIGgpO1xyXG4gICAgICAgIG9BdWRpby5zdHlsZS5jc3NUZXh0ID0gKHcgPyAoJ3dpZHRoOicgKyB3ICsgJzsgJykgOiAnJykgKyAoaCA/ICgnaGVpZ2h0OicgKyBoICsgJzsnKSA6ICcnKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG9BdWRpbztcclxuICAgIH0sXHJcblxyXG4gICAgX3NldFRhZ0F0dHJzOiBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdjb250cm9scycsIHRydWUpO1xyXG5cclxuICAgICAgICBjb25zdCBhdHRycyA9IHRoaXMub3B0aW9ucy5hdWRpb1RhZ0F0dHJzO1xyXG4gICAgICAgIGlmICghYXR0cnMpIHJldHVybjtcclxuXHJcbiAgICAgICAgZm9yIChsZXQga2V5IGluIGF0dHJzKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy51dGlsLmhhc093bihhdHRycywga2V5KSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKGtleSwgYXR0cnNba2V5XSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBfb25MaW5rUHJldmlldzogZnVuY3Rpb24gKGNvbnRleHQsIHByb3RvY29sLCBlKSB7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSBlLnRhcmdldC52YWx1ZS50cmltKCk7XHJcbiAgICAgICAgY29udGV4dC5fbGlua1ZhbHVlID0gdGhpcy50ZXh0Q29udGVudCA9ICF2YWx1ZSA/ICcnIDogKHByb3RvY29sICYmIHZhbHVlLmluZGV4T2YoJzovLycpID09PSAtMSAmJiB2YWx1ZS5pbmRleE9mKCcjJykgIT09IDApID8gcHJvdG9jb2wgKyB2YWx1ZSA6IHZhbHVlLmluZGV4T2YoJzovLycpID09PSAtMSA/ICcvJyArIHZhbHVlIDogdmFsdWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQFJlcXVpcmVkIEBPdmVycmlkZSBmaWxlTWFuYWdlclxyXG4gICAgICovXHJcbiAgICBmaWxlVGFnczogWydhdWRpbyddLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQE92ZXJyaWRlIGNvcmUsIGZpbGVNYW5hZ2VyLCByZXNpemluZ1xyXG4gICAgICogQGRlc2NyaXB0aW9uIEl0IGlzIGNhbGxlZCBmcm9tIGNvcmUuc2VsZWN0Q29tcG9uZW50LlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IFRhcmdldCBlbGVtZW50XHJcbiAgICAgKi9cclxuICAgIHNlbGVjdDogZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICB0aGlzLnBsdWdpbnMuYXVkaW8ub25Nb2RpZnlNb2RlLmNhbGwodGhpcywgZWxlbWVudCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQE92ZXJyaWRlIGZpbGVNYW5hZ2VyLCByZXNpemluZyBcclxuICAgICAqL1xyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICBlbGVtZW50ID0gZWxlbWVudCB8fCB0aGlzLmNvbnRleHQuYXVkaW8uX2VsZW1lbnQ7XHJcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy51dGlsLmdldFBhcmVudEVsZW1lbnQoZWxlbWVudCwgdGhpcy51dGlsLmlzQ29tcG9uZW50KSB8fCBlbGVtZW50O1xyXG4gICAgICAgIGNvbnN0IGRhdGFJbmRleCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWluZGV4JykgKiAxO1xyXG4gICAgICAgIGNvbnN0IGZvY3VzRWwgPSAoY29udGFpbmVyLnByZXZpb3VzRWxlbWVudFNpYmxpbmcgfHwgY29udGFpbmVyLm5leHRFbGVtZW50U2libGluZyk7XHJcblxyXG4gICAgICAgIGNvbnN0IGVtcHR5RGl2ID0gY29udGFpbmVyLnBhcmVudE5vZGU7XHJcbiAgICAgICAgdGhpcy51dGlsLnJlbW92ZUl0ZW0oY29udGFpbmVyKTtcclxuICAgICAgICB0aGlzLnBsdWdpbnMuYXVkaW8uaW5pdC5jYWxsKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuY29udHJvbGxlcnNPZmYoKTtcclxuXHJcbiAgICAgICAgaWYgKGVtcHR5RGl2ICE9PSB0aGlzLmNvbnRleHQuZWxlbWVudC53eXNpd3lnKSB0aGlzLnV0aWwucmVtb3ZlSXRlbUFsbFBhcmVudHMoZW1wdHlEaXYsIGZ1bmN0aW9uIChjdXJyZW50KSB7IHJldHVybiBjdXJyZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAwOyB9LCBudWxsKTtcclxuXHJcbiAgICAgICAgLy8gZm9jdXNcclxuICAgICAgICB0aGlzLmZvY3VzRWRnZShmb2N1c0VsKTtcclxuXHJcbiAgICAgICAgLy8gZmlsZU1hbmFnZXIgZXZlbnRcclxuICAgICAgICB0aGlzLnBsdWdpbnMuZmlsZU1hbmFnZXIuZGVsZXRlSW5mby5jYWxsKHRoaXMsICdhdWRpbycsIGRhdGFJbmRleCwgdGhpcy5mdW5jdGlvbnMub25BdWRpb1VwbG9hZCk7XHJcblxyXG4gICAgICAgIC8vIGhpc3Rvcnkgc3RhY2tcclxuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaChmYWxzZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQE92ZXJyaWRlIGZpbGVNYW5hZ2VyXHJcbiAgICAgKi9cclxuICAgIGNoZWNrRmlsZUluZm86IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLnBsdWdpbnMuZmlsZU1hbmFnZXIuY2hlY2tJbmZvLmNhbGwodGhpcywgJ2F1ZGlvJywgWydhdWRpbyddLCB0aGlzLmZ1bmN0aW9ucy5vbkF1ZGlvVXBsb2FkLCB0aGlzLnBsdWdpbnMuYXVkaW8udXBkYXRlQ292ZXIuYmluZCh0aGlzKSwgZmFsc2UpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBPdmVycmlkZSBmaWxlTWFuYWdlclxyXG4gICAgICovXHJcbiAgICByZXNldEZpbGVJbmZvOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLmZpbGVNYW5hZ2VyLnJlc2V0SW5mby5jYWxsKHRoaXMsICdhdWRpbycsIHRoaXMuZnVuY3Rpb25zLm9uQXVkaW9VcGxvYWQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBSZXF1aXJlZCBAT3ZlcnJpZGUgZGlhbG9nXHJcbiAgICAgKi9cclxuICAgIG9uOiBmdW5jdGlvbiAodXBkYXRlKSB7XHJcbiAgICAgICAgY29uc3QgY29udGV4dEF1ZGlvID0gdGhpcy5jb250ZXh0LmF1ZGlvO1xyXG5cclxuICAgICAgICBpZiAoIXVwZGF0ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMuYXVkaW8uaW5pdC5jYWxsKHRoaXMpO1xyXG4gICAgICAgICAgICBpZiAoY29udGV4dEF1ZGlvLmF1ZGlvSW5wdXRGaWxlICYmIHRoaXMub3B0aW9ucy5hdWRpb011bHRpcGxlRmlsZSkgY29udGV4dEF1ZGlvLmF1ZGlvSW5wdXRGaWxlLnNldEF0dHJpYnV0ZSgnbXVsdGlwbGUnLCAnbXVsdGlwbGUnKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHRBdWRpby5fZWxlbWVudCkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZGlhbG9nLnVwZGF0ZU1vZGFsID0gdHJ1ZTtcclxuICAgICAgICAgICAgY29udGV4dEF1ZGlvLl9saW5rVmFsdWUgPSBjb250ZXh0QXVkaW8ucHJldmlldy50ZXh0Q29udGVudCA9IGNvbnRleHRBdWRpby5hdWRpb1VybEZpbGUudmFsdWUgPSBjb250ZXh0QXVkaW8uX2VsZW1lbnQuc3JjO1xyXG4gICAgICAgICAgICBpZiAoY29udGV4dEF1ZGlvLmF1ZGlvSW5wdXRGaWxlICYmIHRoaXMub3B0aW9ucy5hdWRpb011bHRpcGxlRmlsZSkgY29udGV4dEF1ZGlvLmF1ZGlvSW5wdXRGaWxlLnJlbW92ZUF0dHJpYnV0ZSgnbXVsdGlwbGUnKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoY29udGV4dEF1ZGlvLmF1ZGlvSW5wdXRGaWxlICYmIHRoaXMub3B0aW9ucy5hdWRpb011bHRpcGxlRmlsZSkgY29udGV4dEF1ZGlvLmF1ZGlvSW5wdXRGaWxlLnJlbW92ZUF0dHJpYnV0ZSgnbXVsdGlwbGUnKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQFJlcXVpcmVkIEBPdmVycmlkZSBkaWFsb2dcclxuICAgICAqL1xyXG4gICAgb3BlbjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMucGx1Z2lucy5kaWFsb2cub3Blbi5jYWxsKHRoaXMsICdhdWRpbycsICdhdWRpbycgPT09IHRoaXMuY3VycmVudENvbnRyb2xsZXJOYW1lKTtcclxuICAgIH0sXHJcblxyXG4gICAgc3VibWl0OiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHRBdWRpbyA9IHRoaXMuY29udGV4dC5hdWRpbztcclxuXHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChjb250ZXh0QXVkaW8uYXVkaW9JbnB1dEZpbGUgJiYgY29udGV4dEF1ZGlvLmF1ZGlvSW5wdXRGaWxlLmZpbGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0xvYWRpbmcoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy5hdWRpby5zdWJtaXRBY3Rpb24uY2FsbCh0aGlzLCBjb250ZXh0QXVkaW8uYXVkaW9JbnB1dEZpbGUuZmlsZXMpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHRBdWRpby5hdWRpb1VybEZpbGUgJiYgY29udGV4dEF1ZGlvLl9saW5rVmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93TG9hZGluZygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmF1ZGlvLnNldHVwVXJsLmNhbGwodGhpcywgY29udGV4dEF1ZGlvLl9saW5rVmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgdGhpcy5jbG9zZUxvYWRpbmcoKTtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ1tTVU5FRElUT1IuYXVkaW8uc3VibWl0LmZhaWxdIGNhdXNlIDogXCInICsgZXJyb3IubWVzc2FnZSArICdcIicpO1xyXG4gICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5kaWFsb2cuY2xvc2UuY2FsbCh0aGlzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgc3VibWl0QWN0aW9uOiBmdW5jdGlvbiAoZmlsZUxpc3QpIHtcclxuICAgICAgICBpZiAoZmlsZUxpc3QubGVuZ3RoID09PSAwKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBmaWxlU2l6ZSA9IDA7XHJcbiAgICAgICAgbGV0IGZpbGVzID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGZpbGVMaXN0Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICgvYXVkaW8vaS50ZXN0KGZpbGVMaXN0W2ldLnR5cGUpKSB7XHJcbiAgICAgICAgICAgICAgICBmaWxlcy5wdXNoKGZpbGVMaXN0W2ldKTtcclxuICAgICAgICAgICAgICAgIGZpbGVTaXplICs9IGZpbGVMaXN0W2ldLnNpemU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGxpbWl0U2l6ZSA9IHRoaXMub3B0aW9ucy5hdWRpb1VwbG9hZFNpemVMaW1pdDtcclxuICAgICAgICBpZiAobGltaXRTaXplID4gMCkge1xyXG4gICAgICAgICAgICBsZXQgaW5mb1NpemUgPSAwO1xyXG4gICAgICAgICAgICBjb25zdCBhdWRpb3NJbmZvID0gdGhpcy5jb250ZXh0LmF1ZGlvLl9pbmZvTGlzdDtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGF1ZGlvc0luZm8ubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGluZm9TaXplICs9IGF1ZGlvc0luZm9baV0uc2l6ZSAqIDE7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICgoZmlsZVNpemUgKyBpbmZvU2l6ZSkgPiBsaW1pdFNpemUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VMb2FkaW5nKCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlcnIgPSAnW1NVTkVESVRPUi5hdWRpb1VwbG9hZC5mYWlsXSBTaXplIG9mIHVwbG9hZGFibGUgdG90YWwgYXVkaW9zOiAnICsgKGxpbWl0U2l6ZS8xMDAwKSArICdLQic7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuZnVuY3Rpb25zLm9uQXVkaW9VcGxvYWRFcnJvciAhPT0gJ2Z1bmN0aW9uJyB8fCB0aGlzLmZ1bmN0aW9ucy5vbkF1ZGlvVXBsb2FkRXJyb3IoZXJyLCB7ICdsaW1pdFNpemUnOiBsaW1pdFNpemUsICdjdXJyZW50U2l6ZSc6IGluZm9TaXplLCAndXBsb2FkU2l6ZSc6IGZpbGVTaXplIH0sIHRoaXMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mdW5jdGlvbnMubm90aWNlT3BlbihlcnIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBjb250ZXh0QXVkaW8gPSB0aGlzLmNvbnRleHQuYXVkaW87XHJcbiAgICAgICAgY29udGV4dEF1ZGlvLl91cGxvYWRGaWxlTGVuZ3RoID0gZmlsZXMubGVuZ3RoO1xyXG5cclxuICAgICAgICBjb25zdCBpbmZvID0ge1xyXG4gICAgICAgICAgICBpc1VwZGF0ZTogdGhpcy5jb250ZXh0LmRpYWxvZy51cGRhdGVNb2RhbCxcclxuICAgICAgICAgICAgZWxlbWVudDogY29udGV4dEF1ZGlvLl9lbGVtZW50XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZ1bmN0aW9ucy5vbkF1ZGlvVXBsb2FkQmVmb3JlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZnVuY3Rpb25zLm9uQXVkaW9VcGxvYWRCZWZvcmUoZmlsZXMsIGluZm8sIHRoaXMsIGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGF0YSAmJiB0aGlzLl93LkFycmF5LmlzQXJyYXkoZGF0YS5yZXN1bHQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmF1ZGlvLnJlZ2lzdGVyLmNhbGwodGhpcywgaW5mbywgZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy5hdWRpby51cGxvYWQuY2FsbCh0aGlzLCBpbmZvLCBkYXRhKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAndW5kZWZpbmVkJykgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAoIXJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZUxvYWRpbmcoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ29iamVjdCcgJiYgcmVzdWx0Lmxlbmd0aCA+IDApIGZpbGVzID0gcmVzdWx0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLmF1ZGlvLnVwbG9hZC5jYWxsKHRoaXMsIGluZm8sIGZpbGVzKTtcclxuICAgIH0sXHJcblxyXG4gICAgZXJyb3I6IGZ1bmN0aW9uIChtZXNzYWdlLCByZXNwb25zZSkge1xyXG4gICAgICAgIHRoaXMuY2xvc2VMb2FkaW5nKCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZ1bmN0aW9ucy5vbkF1ZGlvVXBsb2FkRXJyb3IgIT09ICdmdW5jdGlvbicgfHwgdGhpcy5mdW5jdGlvbnMub25BdWRpb1VwbG9hZEVycm9yKG1lc3NhZ2UsIHJlc3BvbnNlLCB0aGlzKSkge1xyXG4gICAgICAgICAgICB0aGlzLmZ1bmN0aW9ucy5ub3RpY2VPcGVuKG1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvcignW1NVTkVESVRPUi5wbHVnaW4uYXVkaW8uZXhjZXB0aW9uXSByZXNwb25zZTogJyArIG1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgdXBsb2FkOiBmdW5jdGlvbiAoaW5mbywgZmlsZXMpIHtcclxuICAgICAgICBpZiAoIWZpbGVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xvc2VMb2FkaW5nKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiBmaWxlcyA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmF1ZGlvLmVycm9yLmNhbGwodGhpcywgZmlsZXMsIG51bGwpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBhdWRpb1VwbG9hZFVybCA9IHRoaXMub3B0aW9ucy5hdWRpb1VwbG9hZFVybDtcclxuICAgICAgICBjb25zdCBmaWxlc0xlbiA9IHRoaXMuY29udGV4dC5kaWFsb2cudXBkYXRlTW9kYWwgPyAxIDogZmlsZXMubGVuZ3RoO1xyXG5cclxuICAgICAgICAvLyBjcmVhdGUgZm9ybURhdGFcclxuICAgICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsZXNMZW47IGkrKykge1xyXG4gICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUtJyArIGksIGZpbGVzW2ldKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHNlcnZlciB1cGxvYWRcclxuICAgICAgICB0aGlzLnBsdWdpbnMuZmlsZU1hbmFnZXIudXBsb2FkLmNhbGwodGhpcywgYXVkaW9VcGxvYWRVcmwsIHRoaXMub3B0aW9ucy5hdWRpb1VwbG9hZEhlYWRlciwgZm9ybURhdGEsIHRoaXMucGx1Z2lucy5hdWRpby5jYWxsQmFja191cGxvYWQuYmluZCh0aGlzLCBpbmZvKSwgdGhpcy5mdW5jdGlvbnMub25BdWRpb1VwbG9hZEVycm9yKTtcclxuICAgIH0sXHJcblxyXG4gICAgY2FsbEJhY2tfdXBsb2FkOiBmdW5jdGlvbiAoaW5mbywgeG1sSHR0cCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5mdW5jdGlvbnMuYXVkaW9VcGxvYWRIYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnVuY3Rpb25zLmF1ZGlvVXBsb2FkSGFuZGxlcih4bWxIdHRwLCBpbmZvLCB0aGlzKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IEpTT04ucGFyc2UoeG1sSHR0cC5yZXNwb25zZVRleHQpO1xyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UuZXJyb3JNZXNzYWdlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnMuYXVkaW8uZXJyb3IuY2FsbCh0aGlzLCByZXNwb25zZS5lcnJvck1lc3NhZ2UsIHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy5hdWRpby5yZWdpc3Rlci5jYWxsKHRoaXMsIGluZm8sIHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgcmVnaXN0ZXI6IGZ1bmN0aW9uIChpbmZvLCByZXNwb25zZSkge1xyXG4gICAgICAgIGNvbnN0IGZpbGVMaXN0ID0gcmVzcG9uc2UucmVzdWx0O1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gZmlsZUxpc3QubGVuZ3RoLCBmaWxlLCBvQXVkaW87IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoaW5mby5pc1VwZGF0ZSkgb0F1ZGlvID0gaW5mby5lbGVtZW50O1xyXG4gICAgICAgICAgICBlbHNlIG9BdWRpbyA9IHRoaXMucGx1Z2lucy5hdWRpby5fY3JlYXRlQXVkaW9UYWcuY2FsbCh0aGlzKTtcclxuXHJcbiAgICAgICAgICAgIGZpbGUgPSB7IG5hbWU6IGZpbGVMaXN0W2ldLm5hbWUsIHNpemU6IGZpbGVMaXN0W2ldLnNpemUgfTtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmF1ZGlvLmNyZWF0ZV9hdWRpby5jYWxsKHRoaXMsIG9BdWRpbywgZmlsZUxpc3RbaV0udXJsLCBmaWxlLCBpbmZvLmlzVXBkYXRlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY2xvc2VMb2FkaW5nKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIHNldHVwVXJsOiBmdW5jdGlvbiAoc3JjKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHNyYy5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmF1ZGlvLmNyZWF0ZV9hdWRpby5jYWxsKHRoaXMsIHRoaXMucGx1Z2lucy5hdWRpby5fY3JlYXRlQXVkaW9UYWcuY2FsbCh0aGlzKSwgc3JjLCBudWxsLCB0aGlzLmNvbnRleHQuZGlhbG9nLnVwZGF0ZU1vZGFsKTtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvcignW1NVTkVESVRPUi5hdWRpby5hdWRpby5mYWlsXSBjYXVzZSA6IFwiJyArIGVycm9yLm1lc3NhZ2UgKyAnXCInKTtcclxuICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICB0aGlzLmNsb3NlTG9hZGluZygpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgY3JlYXRlX2F1ZGlvOiBmdW5jdGlvbiAoZWxlbWVudCwgc3JjLCBmaWxlLCBpc1VwZGF0ZSkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHRBdWRpbyA9IHRoaXMuY29udGV4dC5hdWRpbztcclxuICAgICAgICBcclxuICAgICAgICAvLyBjcmVhdGUgbmV3IHRhZ1xyXG4gICAgICAgIGlmICghaXNVcGRhdGUpIHtcclxuICAgICAgICAgICAgZWxlbWVudC5zcmMgPSBzcmM7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvdmVyID0gdGhpcy5wbHVnaW5zLmNvbXBvbmVudC5zZXRfY292ZXIuY2FsbCh0aGlzLCBlbGVtZW50KTtcclxuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5wbHVnaW5zLmNvbXBvbmVudC5zZXRfY29udGFpbmVyLmNhbGwodGhpcywgY292ZXIsICcnKTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmluc2VydENvbXBvbmVudChjb250YWluZXIsIGZhbHNlLCB0cnVlLCAhdGhpcy5vcHRpb25zLm1lZGlhQXV0b1NlbGVjdCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5tZWRpYUF1dG9TZWxlY3QpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxpbmUgPSB0aGlzLmFwcGVuZEZvcm1hdFRhZyhjb250YWluZXIsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGxpbmUpIHRoaXMuc2V0UmFuZ2UobGluZSwgMCwgbGluZSwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IC8vIHVwZGF0ZVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoY29udGV4dEF1ZGlvLl9lbGVtZW50KSBlbGVtZW50ID0gY29udGV4dEF1ZGlvLl9lbGVtZW50O1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LnNyYyAhPT0gc3JjKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50LnNyYyA9IHNyYztcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0Q29tcG9uZW50KGVsZW1lbnQsICdhdWRpbycpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RDb21wb25lbnQoZWxlbWVudCwgJ2F1ZGlvJyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucGx1Z2lucy5maWxlTWFuYWdlci5zZXRJbmZvLmNhbGwodGhpcywgJ2F1ZGlvJywgZWxlbWVudCwgdGhpcy5mdW5jdGlvbnMub25BdWRpb1VwbG9hZCwgZmlsZSwgZmFsc2UpO1xyXG4gICAgICAgIGlmIChpc1VwZGF0ZSkgdGhpcy5oaXN0b3J5LnB1c2goZmFsc2UpO1xyXG4gICAgfSxcclxuXHJcbiAgICB1cGRhdGVDb3ZlcjogZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICBjb25zdCBjb250ZXh0QXVkaW8gPSB0aGlzLmNvbnRleHQuYXVkaW87XHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLmF1ZGlvLl9zZXRUYWdBdHRycy5jYWxsKHRoaXMsIGVsZW1lbnQpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIGZpbmQgY29tcG9uZW50IGVsZW1lbnRcclxuICAgICAgICBjb25zdCBleGlzdEVsZW1lbnQgPSB0aGlzLnV0aWwuZ2V0UGFyZW50RWxlbWVudChlbGVtZW50LCB0aGlzLnV0aWwuaXNNZWRpYUNvbXBvbmVudCkgfHwgXHJcbiAgICAgICAgICAgIHRoaXMudXRpbC5nZXRQYXJlbnRFbGVtZW50KGVsZW1lbnQsIGZ1bmN0aW9uIChjdXJyZW50KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pc1d5c2l3eWdEaXYoY3VycmVudC5wYXJlbnROb2RlKTtcclxuICAgICAgICAgICAgfS5iaW5kKHRoaXMudXRpbCkpO1xyXG5cclxuICAgICAgICAvLyBjbG9uZSBlbGVtZW50XHJcbiAgICAgICAgY29uc3QgcHJldkVsZW1lbnQgPSBlbGVtZW50O1xyXG4gICAgICAgIGNvbnRleHRBdWRpby5fZWxlbWVudCA9IGVsZW1lbnQgPSBlbGVtZW50LmNsb25lTm9kZShmYWxzZSk7XHJcbiAgICAgICAgY29uc3QgY292ZXIgPSB0aGlzLnBsdWdpbnMuY29tcG9uZW50LnNldF9jb3Zlci5jYWxsKHRoaXMsIGVsZW1lbnQpO1xyXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMucGx1Z2lucy5jb21wb25lbnQuc2V0X2NvbnRhaW5lci5jYWxsKHRoaXMsIGNvdmVyLCAnc2UtYXVkaW8tY29udGFpbmVyJyk7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnV0aWwuaXNGb3JtYXRFbGVtZW50KGV4aXN0RWxlbWVudCkgJiYgZXhpc3RFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgZXhpc3RFbGVtZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGNvbnRhaW5lciwgZXhpc3RFbGVtZW50KTtcclxuICAgICAgICAgICAgICAgIHRoaXMudXRpbC5yZW1vdmVJdGVtKHByZXZFbGVtZW50KTtcclxuICAgICAgICAgICAgICAgIC8vIGNsZWFuIGZvcm1hdCB0YWdcclxuICAgICAgICAgICAgICAgIHRoaXMudXRpbC5yZW1vdmVFbXB0eU5vZGUoZXhpc3RFbGVtZW50LCBudWxsKTtcclxuICAgICAgICAgICAgICAgIGlmIChleGlzdEVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoID09PSAwKSBleGlzdEVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy51dGlsLmh0bWxSZW1vdmVXaGl0ZVNwYWNlKGV4aXN0RWxlbWVudC5pbm5lckhUTUwpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZXhpc3RFbGVtZW50LnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGNvbnRhaW5lciwgZXhpc3RFbGVtZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignW1NVTkVESVRPUi5hdWRpby5lcnJvcl0gTWF5YmUgdGhlIGF1ZGlvIHRhZyBpcyBuZXN0ZWQuJywgZXJyb3IpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLmZpbGVNYW5hZ2VyLnNldEluZm8uY2FsbCh0aGlzLCAnYXVkaW8nLCBlbGVtZW50LCB0aGlzLmZ1bmN0aW9ucy5vbkF1ZGlvVXBsb2FkLCBudWxsLCBmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLmF1ZGlvLmluaXQuY2FsbCh0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAUmVxdWlyZWQgQE92ZXJyaWRlIGZpbGVNYW5hZ2VyLCByZXNpemluZ1xyXG4gICAgICovXHJcbiAgICBvbk1vZGlmeU1vZGU6IGZ1bmN0aW9uIChzZWxlY3Rpb25UYWcpIHtcclxuICAgICAgICBjb25zdCBjb250ZXh0QXVkaW8gPSB0aGlzLmNvbnRleHQuYXVkaW87XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zZXRDb250cm9sbGVyUG9zaXRpb24oY29udGV4dEF1ZGlvLmNvbnRyb2xsZXIsIHNlbGVjdGlvblRhZywgJ2JvdHRvbScsIHtsZWZ0OiAwLCB0b3A6IDB9KTtcclxuICAgICAgICB0aGlzLmNvbnRyb2xsZXJzT24oY29udGV4dEF1ZGlvLmNvbnRyb2xsZXIsIHNlbGVjdGlvblRhZywgdGhpcy5wbHVnaW5zLmF1ZGlvLm9uQ29udHJvbGxlck9mZi5iaW5kKHRoaXMsIHNlbGVjdGlvblRhZyksICdhdWRpbycpO1xyXG5cclxuICAgICAgICB0aGlzLnV0aWwuYWRkQ2xhc3Moc2VsZWN0aW9uVGFnLCAnYWN0aXZlJyk7XHJcbiAgICAgICAgY29udGV4dEF1ZGlvLl9lbGVtZW50ID0gc2VsZWN0aW9uVGFnO1xyXG4gICAgICAgIGNvbnRleHRBdWRpby5fY292ZXIgPSB0aGlzLnV0aWwuZ2V0UGFyZW50RWxlbWVudChzZWxlY3Rpb25UYWcsICdGSUdVUkUnKTtcclxuICAgICAgICBjb250ZXh0QXVkaW8uX2NvbnRhaW5lciA9IHRoaXMudXRpbC5nZXRQYXJlbnRFbGVtZW50KHNlbGVjdGlvblRhZywgdGhpcy51dGlsLmlzQ29tcG9uZW50KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAUmVxdWlyZWQgQE92ZXJyaWRlIGZpbGVNYW5hZ2VyLCByZXNpemluZ1xyXG4gICAgICovXHJcbiAgICBvcGVuTW9kaWZ5OiBmdW5jdGlvbiAobm90T3Blbikge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRleHQuYXVkaW8uYXVkaW9VcmxGaWxlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHRBdWRpbyA9IHRoaXMuY29udGV4dC5hdWRpbztcclxuICAgICAgICAgICAgY29udGV4dEF1ZGlvLl9saW5rVmFsdWUgPSBjb250ZXh0QXVkaW8ucHJldmlldy50ZXh0Q29udGVudCA9IGNvbnRleHRBdWRpby5hdWRpb1VybEZpbGUudmFsdWUgPSBjb250ZXh0QXVkaW8uX2VsZW1lbnQuc3JjO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIW5vdE9wZW4pIHRoaXMucGx1Z2lucy5kaWFsb2cub3Blbi5jYWxsKHRoaXMsICdhdWRpbycsIHRydWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICBvbkNsaWNrX2NvbnRyb2xsZXI6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICAgICAgY29uc3QgY29tbWFuZCA9IGUudGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1jb21tYW5kJyk7XHJcbiAgICAgICAgaWYgKCFjb21tYW5kKSByZXR1cm47XHJcblxyXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICAgICAgaWYgKC91cGRhdGUvLnRlc3QoY29tbWFuZCkpIHtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmF1ZGlvLm9wZW5Nb2RpZnkuY2FsbCh0aGlzLCBmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgeyAvKiogZGVsZXRlICovXHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5hdWRpby5kZXN0cm95LmNhbGwodGhpcywgdGhpcy5jb250ZXh0LmF1ZGlvLl9lbGVtZW50KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY29udHJvbGxlcnNPZmYoKTtcclxuICAgIH0sXHJcblxyXG4gICAgb25Db250cm9sbGVyT2ZmOiBmdW5jdGlvbiAoc2VsZWN0aW9uVGFnKSB7XHJcbiAgICAgICAgdGhpcy51dGlsLnJlbW92ZUNsYXNzKHNlbGVjdGlvblRhZywgJ2FjdGl2ZScpO1xyXG4gICAgICAgIHRoaXMuY29udGV4dC5hdWRpby5jb250cm9sbGVyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQFJlcXVpcmVkIEBPdmVycmlkZSBkaWFsb2dcclxuICAgICAqL1xyXG4gICAgaW5pdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRleHQuZGlhbG9nLnVwZGF0ZU1vZGFsKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgY29udGV4dEF1ZGlvID0gdGhpcy5jb250ZXh0LmF1ZGlvO1xyXG5cclxuICAgICAgICBpZiAoY29udGV4dEF1ZGlvLmF1ZGlvSW5wdXRGaWxlKSBjb250ZXh0QXVkaW8uYXVkaW9JbnB1dEZpbGUudmFsdWUgPSAnJztcclxuICAgICAgICBpZiAoY29udGV4dEF1ZGlvLmF1ZGlvVXJsRmlsZSkgY29udGV4dEF1ZGlvLl9saW5rVmFsdWUgPSBjb250ZXh0QXVkaW8ucHJldmlldy50ZXh0Q29udGVudCA9IGNvbnRleHRBdWRpby5hdWRpb1VybEZpbGUudmFsdWUgPSAnJztcclxuICAgICAgICBpZiAoY29udGV4dEF1ZGlvLmF1ZGlvSW5wdXRGaWxlICYmIGNvbnRleHRBdWRpby5hdWRpb1VybEZpbGUpIHtcclxuICAgICAgICAgICAgY29udGV4dEF1ZGlvLmF1ZGlvVXJsRmlsZS5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XHJcbiAgICAgICAgICAgIGNvbnRleHRBdWRpby5wcmV2aWV3LnN0eWxlLnRleHREZWNvcmF0aW9uID0gJyc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb250ZXh0QXVkaW8uX2VsZW1lbnQgPSBudWxsO1xyXG4gICAgfVxyXG59OyIsIid1c2Ugc3RyaWN0JztcclxuXHJcbmltcG9ydCBkaWFsb2cgZnJvbSAnLi4vbW9kdWxlcy9kaWFsb2cnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgbmFtZTogJ21hdGgnLFxyXG4gICAgZGlzcGxheTogJ2RpYWxvZycsXHJcbiAgICBhZGQ6IGZ1bmN0aW9uIChjb3JlKSB7XHJcbiAgICAgICAgY29yZS5hZGRNb2R1bGUoW2RpYWxvZ10pO1xyXG5cclxuICAgICAgICBjb25zdCBjb250ZXh0ID0gY29yZS5jb250ZXh0O1xyXG4gICAgICAgIGNvbnRleHQubWF0aCA9IHtcclxuICAgICAgICAgICAgZm9jdXNFbGVtZW50OiBudWxsLCAvLyBAT3ZlcnJpZGUgZGlhbG9nIC8vIFRoaXMgZWxlbWVudCBoYXMgZm9jdXMgd2hlbiB0aGUgZGlhbG9nIGlzIG9wZW5lZC5cclxuICAgICAgICAgICAgcHJldmlld0VsZW1lbnQ6IG51bGwsXHJcbiAgICAgICAgICAgIGZvbnRTaXplRWxlbWVudDogbnVsbCxcclxuICAgICAgICAgICAgZGVmYXVsdEZvbnRTaXplOiAnJyxcclxuICAgICAgICAgICAgX21hdGhFeHA6IG51bGxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvKiogbWF0aCBkaWFsb2cgKi9cclxuICAgICAgICBsZXQgbWF0aF9kaWFsb2cgPSB0aGlzLnNldERpYWxvZyhjb3JlKTtcclxuICAgICAgICBjb250ZXh0Lm1hdGgubW9kYWwgPSBtYXRoX2RpYWxvZztcclxuICAgICAgICBjb250ZXh0Lm1hdGguZm9jdXNFbGVtZW50ID0gbWF0aF9kaWFsb2cucXVlcnlTZWxlY3RvcignLnNlLW1hdGgtZXhwJyk7XHJcbiAgICAgICAgY29udGV4dC5tYXRoLnByZXZpZXdFbGVtZW50ID0gbWF0aF9kaWFsb2cucXVlcnlTZWxlY3RvcignLnNlLW1hdGgtcHJldmlldycpO1xyXG4gICAgICAgIGNvbnRleHQubWF0aC5mb250U2l6ZUVsZW1lbnQgPSBtYXRoX2RpYWxvZy5xdWVyeVNlbGVjdG9yKCcuc2UtbWF0aC1zaXplJyk7XHJcbiAgICAgICAgY29udGV4dC5tYXRoLmZvY3VzRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuX3JlbmRlck1hdGhFeHAuYmluZChjb3JlLCBjb250ZXh0Lm1hdGgpLCBmYWxzZSk7XHJcbiAgICAgICAgY29udGV4dC5tYXRoLmZvY3VzRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLl9yZW5kZXJNYXRoRXhwLmJpbmQoY29yZSwgY29udGV4dC5tYXRoKSwgZmFsc2UpO1xyXG4gICAgICAgIGNvbnRleHQubWF0aC5mb250U2l6ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24gKGUpIHsgdGhpcy5mb250U2l6ZSA9IGUudGFyZ2V0LnZhbHVlOyB9LmJpbmQoY29udGV4dC5tYXRoLnByZXZpZXdFbGVtZW50LnN0eWxlKSwgZmFsc2UpO1xyXG5cclxuICAgICAgICAvKiogbWF0aCBjb250cm9sbGVyICovXHJcbiAgICAgICAgbGV0IG1hdGhfY29udHJvbGxlciA9IHRoaXMuc2V0Q29udHJvbGxlcl9NYXRoQnV0dG9uKGNvcmUpO1xyXG4gICAgICAgIGNvbnRleHQubWF0aC5tYXRoQ29udHJvbGxlciA9IG1hdGhfY29udHJvbGxlcjtcclxuICAgICAgICBjb250ZXh0Lm1hdGguX21hdGhFeHAgPSBudWxsO1xyXG5cclxuICAgICAgICAvKiogYWRkIGV2ZW50IGxpc3RlbmVycyAqL1xyXG4gICAgICAgIG1hdGhfZGlhbG9nLnF1ZXJ5U2VsZWN0b3IoJ2Zvcm0nKS5hZGRFdmVudExpc3RlbmVyKCdzdWJtaXQnLCB0aGlzLnN1Ym1pdC5iaW5kKGNvcmUpLCBmYWxzZSk7XHJcbiAgICAgICAgbWF0aF9jb250cm9sbGVyLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbkNsaWNrX21hdGhDb250cm9sbGVyLmJpbmQoY29yZSkpO1xyXG4gICAgICAgIGNvbnRleHQubWF0aC5wcmV2aWV3RWxlbWVudC5zdHlsZS5mb250U2l6ZSA9IGNvbnRleHQubWF0aC5kZWZhdWx0Rm9udFNpemU7XHJcblxyXG4gICAgICAgIC8qKiBhcHBlbmQgaHRtbCAqL1xyXG4gICAgICAgIGNvbnRleHQuZGlhbG9nLm1vZGFsLmFwcGVuZENoaWxkKG1hdGhfZGlhbG9nKTtcclxuICAgICAgICBjb250ZXh0LmVsZW1lbnQucmVsYXRpdmUuYXBwZW5kQ2hpbGQobWF0aF9jb250cm9sbGVyKTtcclxuXHJcbiAgICAgICAgLyoqIGVtcHR5IG1lbW9yeSAqL1xyXG4gICAgICAgIG1hdGhfZGlhbG9nID0gbnVsbCwgbWF0aF9jb250cm9sbGVyID0gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqIGRpYWxvZyAqL1xyXG4gICAgc2V0RGlhbG9nOiBmdW5jdGlvbiAoY29yZSkge1xyXG4gICAgICAgIGNvbnN0IGxhbmcgPSBjb3JlLmxhbmc7XHJcbiAgICAgICAgY29uc3QgZGlhbG9nID0gY29yZS51dGlsLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xyXG4gICAgICAgIGNvbnN0IGZvbnRTaXplID0gY29yZS5vcHRpb25zLm1hdGhGb250U2l6ZTtcclxuICAgICAgICBsZXQgZGVmYXVsdEZvbnRTaXplID0gZm9udFNpemVbMF0udmFsdWU7XHJcblxyXG4gICAgICAgIGRpYWxvZy5jbGFzc05hbWUgPSAnc2UtZGlhbG9nLWNvbnRlbnQnO1xyXG4gICAgICAgIGRpYWxvZy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIGxldCBodG1sID0gJycgK1xyXG4gICAgICAgICc8Zm9ybT4nICtcclxuICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1kaWFsb2ctaGVhZGVyXCI+JyArXHJcbiAgICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1jb21tYW5kPVwiY2xvc2VcIiBjbGFzcz1cInNlLWJ0biBzZS1kaWFsb2ctY2xvc2VcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiB0aXRsZT1cIicgKyBsYW5nLmRpYWxvZ0JveC5jbG9zZSArICdcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICBjb3JlLmljb25zLmNhbmNlbCArXHJcbiAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXHJcbiAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzZS1tb2RhbC10aXRsZVwiPicgKyBsYW5nLmRpYWxvZ0JveC5tYXRoQm94LnRpdGxlICsgJzwvc3Bhbj4nICtcclxuICAgICAgICAgICAgJzwvZGl2PicgK1xyXG4gICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWRpYWxvZy1ib2R5XCI+JyArXHJcbiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWRpYWxvZy1mb3JtXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxsYWJlbD4nICsgbGFuZy5kaWFsb2dCb3gubWF0aEJveC5pbnB1dExhYmVsICsgJyAoPGEgaHJlZj1cImh0dHBzOi8va2F0ZXgub3JnL2RvY3Mvc3VwcG9ydGVkLmh0bWxcIiB0YXJnZXQ9XCJfYmxhbmtcIj5LYVRlWDwvYT4pPC9sYWJlbD4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPHRleHRhcmVhIGNsYXNzPVwic2UtaW5wdXQtZm9ybSBzZS1tYXRoLWV4cFwiIHR5cGU9XCJ0ZXh0XCI+PC90ZXh0YXJlYT4nICtcclxuICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtZGlhbG9nLWZvcm1cIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPGxhYmVsPicgKyBsYW5nLmRpYWxvZ0JveC5tYXRoQm94LmZvbnRTaXplTGFiZWwgKyAnPC9sYWJlbD4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPHNlbGVjdCBjbGFzcz1cInNlLWlucHV0LXNlbGVjdCBzZS1tYXRoLXNpemVcIj4nO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBmb250U2l6ZS5sZW5ndGgsIGY7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmID0gZm9udFNpemVbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmLmRlZmF1bHQpIGRlZmF1bHRGb250U2l6ZSA9IGYudmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgZi52YWx1ZSArICdcIicgKyAoZi5kZWZhdWx0ID8gJyBzZWxlY3RlZCcgOiAnJykgKyAnPicgKyBmLnRleHQgKyAnPC9vcHRpb24+JztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBodG1sICs9ICc8L3NlbGVjdD4nICtcclxuICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtZGlhbG9nLWZvcm1cIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPGxhYmVsPicgKyBsYW5nLmRpYWxvZ0JveC5tYXRoQm94LnByZXZpZXdMYWJlbCArICc8L2xhYmVsPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8cCBjbGFzcz1cInNlLW1hdGgtcHJldmlld1wiPjwvcD4nICtcclxuICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAgICAgJzwvZGl2PicgK1xyXG4gICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWRpYWxvZy1mb290ZXJcIj4nICtcclxuICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cInNlLWJ0bi1wcmltYXJ5XCIgdGl0bGU9XCInICsgbGFuZy5kaWFsb2dCb3guc3VibWl0QnV0dG9uICsgJ1wiPjxzcGFuPicgKyBsYW5nLmRpYWxvZ0JveC5zdWJtaXRCdXR0b24gKyAnPC9zcGFuPjwvYnV0dG9uPicgK1xyXG4gICAgICAgICAgICAnPC9kaXY+JyArXHJcbiAgICAgICAgJzwvZm9ybT4nO1xyXG5cclxuICAgICAgICBjb3JlLmNvbnRleHQubWF0aC5kZWZhdWx0Rm9udFNpemUgPSBkZWZhdWx0Rm9udFNpemU7XHJcbiAgICAgICAgZGlhbG9nLmlubmVySFRNTCA9IGh0bWw7XHJcbiAgICAgICAgcmV0dXJuIGRpYWxvZztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqIG1vZGlmeSBjb250cm9sbGVyIGJ1dHRvbiAqL1xyXG4gICAgc2V0Q29udHJvbGxlcl9NYXRoQnV0dG9uOiBmdW5jdGlvbiAoY29yZSkge1xyXG4gICAgICAgIGNvbnN0IGxhbmcgPSBjb3JlLmxhbmc7XHJcbiAgICAgICAgY29uc3QgbWF0aF9idG4gPSBjb3JlLnV0aWwuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcblxyXG4gICAgICAgIG1hdGhfYnRuLmNsYXNzTmFtZSA9ICdzZS1jb250cm9sbGVyIHNlLWNvbnRyb2xsZXItbGluayc7XHJcbiAgICAgICAgbWF0aF9idG4uaW5uZXJIVE1MID0gJycgK1xyXG4gICAgICAgICc8ZGl2IGNsYXNzPVwic2UtYXJyb3cgc2UtYXJyb3ctdXBcIj48L2Rpdj4nICtcclxuICAgICAgICAnPGRpdiBjbGFzcz1cImxpbmstY29udGVudFwiPicgK1xyXG4gICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWJ0bi1ncm91cFwiPicgK1xyXG4gICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtY29tbWFuZD1cInVwZGF0ZVwiIHRhYmluZGV4PVwiLTFcIiBjbGFzcz1cInNlLWJ0biBzZS10b29sdGlwXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgY29yZS5pY29ucy5lZGl0ICtcclxuICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLWlubmVyXCI+PHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLXRleHRcIj4nICsgbGFuZy5jb250cm9sbGVyLmVkaXQgKyAnPC9zcGFuPjwvc3Bhbj4nICtcclxuICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nICtcclxuICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWNvbW1hbmQ9XCJkZWxldGVcIiB0YWJpbmRleD1cIi0xXCIgY2xhc3M9XCJzZS1idG4gc2UtdG9vbHRpcFwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgIGNvcmUuaWNvbnMuZGVsZXRlICtcclxuICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLWlubmVyXCI+PHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLXRleHRcIj4nICsgbGFuZy5jb250cm9sbGVyLnJlbW92ZSArICc8L3NwYW4+PC9zcGFuPicgK1xyXG4gICAgICAgICAgICAgICAgJzwvYnV0dG9uPicgK1xyXG4gICAgICAgICAgICAnPC9kaXY+JyArXHJcbiAgICAgICAgJzwvZGl2PicgK1xyXG4gICAgICAgICcnO1xyXG5cclxuICAgICAgICByZXR1cm4gbWF0aF9idG47XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQFJlcXVpcmVkIEBPdmVycmlkZSBkaWFsb2dcclxuICAgICAqL1xyXG4gICAgb3BlbjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMucGx1Z2lucy5kaWFsb2cub3Blbi5jYWxsKHRoaXMsICdtYXRoJywgJ21hdGgnID09PSB0aGlzLmN1cnJlbnRDb250cm9sbGVyTmFtZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQE92ZXJyaWRlIGNvcmUgLSBtYW5hZ2VkVGFnc0luZm9cclxuICAgICAqL1xyXG4gICAgbWFuYWdlZFRhZ3M6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBjbGFzc05hbWU6ICdrYXRleCcsXHJcbiAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgIGlmICghZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtZXhwJykgfHwgIXRoaXMub3B0aW9ucy5rYXRleCkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZG9tID0gdGhpcy5fZC5jcmVhdGVSYW5nZSgpLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCh0aGlzLnBsdWdpbnMubWF0aC5fcmVuZGVyZXIuY2FsbCh0aGlzLCB0aGlzLnV0aWwuSFRNTERlY29kZXIoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtZXhwJykpKSk7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9IGRvbS5xdWVyeVNlbGVjdG9yKCcua2F0ZXgnKS5pbm5lckhUTUw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBfcmVuZGVyZXI6IGZ1bmN0aW9uIChleHApIHtcclxuICAgICAgICBjb25zdCBrYXRleCA9IHRoaXMub3B0aW9ucy5rYXRleDtcclxuICAgICAgICByZXR1cm4ga2F0ZXguc3JjLnJlbmRlclRvU3RyaW5nKGV4cCwga2F0ZXgub3B0aW9ucyk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9yZW5kZXJNYXRoRXhwOiBmdW5jdGlvbiAoY29udGV4dE1hdGgsIGUpIHtcclxuICAgICAgICBjb250ZXh0TWF0aC5wcmV2aWV3RWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLnBsdWdpbnMubWF0aC5fcmVuZGVyZXIuY2FsbCh0aGlzLCBlLnRhcmdldC52YWx1ZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIHN1Ym1pdDogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICB0aGlzLnNob3dMb2FkaW5nKCk7XHJcblxyXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgICAgICBjb25zdCBzdWJtaXRBY3Rpb24gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQubWF0aC5mb2N1c0VsZW1lbnQudmFsdWUudHJpbSgpLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgY29udGV4dE1hdGggPSB0aGlzLmNvbnRleHQubWF0aDtcclxuICAgICAgICAgICAgY29uc3QgbWF0aEV4cCA9IGNvbnRleHRNYXRoLmZvY3VzRWxlbWVudC52YWx1ZTtcclxuICAgICAgICAgICAgY29uc3Qga2F0ZXhFbCA9IGNvbnRleHRNYXRoLnByZXZpZXdFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5rYXRleCcpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFrYXRleEVsKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIGthdGV4RWwuY2xhc3NOYW1lID0gJ19fc2VfX2thdGV4ICcgKyBrYXRleEVsLmNsYXNzTmFtZTtcclxuICAgICAgICAgICAga2F0ZXhFbC5zZXRBdHRyaWJ1dGUoJ2NvbnRlbnRlZGl0YWJsZScsIGZhbHNlKTtcclxuICAgICAgICAgICAga2F0ZXhFbC5zZXRBdHRyaWJ1dGUoJ2RhdGEtZXhwJywgdGhpcy51dGlsLkhUTUxFbmNvZGVyKG1hdGhFeHApKTtcclxuICAgICAgICAgICAga2F0ZXhFbC5zZXRBdHRyaWJ1dGUoJ2RhdGEtZm9udC1zaXplJywgY29udGV4dE1hdGguZm9udFNpemVFbGVtZW50LnZhbHVlKTtcclxuICAgICAgICAgICAga2F0ZXhFbC5zdHlsZS5mb250U2l6ZSA9IGNvbnRleHRNYXRoLmZvbnRTaXplRWxlbWVudC52YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jb250ZXh0LmRpYWxvZy51cGRhdGVNb2RhbCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRGb3JtYXRzID0gdGhpcy5nZXRTZWxlY3RlZEVsZW1lbnRzKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkRm9ybWF0cy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb0Zvcm1hdCA9IHRoaXMudXRpbC5jcmVhdGVFbGVtZW50KHNlbGVjdGVkRm9ybWF0c1swXS5ub2RlTmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgb0Zvcm1hdC5hcHBlbmRDaGlsZChrYXRleEVsKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaW5zZXJ0Tm9kZShvRm9ybWF0LCBudWxsLCB0cnVlKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaW5zZXJ0Tm9kZShrYXRleEVsLCBudWxsLCB0cnVlKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGVtcHR5ID0gdGhpcy51dGlsLmNyZWF0ZVRleHROb2RlKHRoaXMudXRpbC56ZXJvV2lkdGhTcGFjZSk7XHJcbiAgICAgICAgICAgICAgICBrYXRleEVsLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGVtcHR5LCBrYXRleEVsLm5leHRTaWJsaW5nKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2Uoa2F0ZXhFbCwgMCwga2F0ZXhFbCwgMSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb250YWluZXJFbCA9IHRoaXMudXRpbC5nZXRQYXJlbnRFbGVtZW50KGNvbnRleHRNYXRoLl9tYXRoRXhwLCAnLmthdGV4Jyk7XHJcbiAgICAgICAgICAgICAgICBjb250YWluZXJFbC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChrYXRleEVsLCBjb250YWluZXJFbCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFJhbmdlKGthdGV4RWwsIDAsIGthdGV4RWwsIDEpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb250ZXh0TWF0aC5mb2N1c0VsZW1lbnQudmFsdWUgPSAnJztcclxuICAgICAgICAgICAgY29udGV4dE1hdGguZm9udFNpemVFbGVtZW50LnZhbHVlID0gJzFlbSc7XHJcbiAgICAgICAgICAgIGNvbnRleHRNYXRoLnByZXZpZXdFbGVtZW50LnN0eWxlLmZvbnRTaXplID0gJzFlbSc7XHJcbiAgICAgICAgICAgIGNvbnRleHRNYXRoLnByZXZpZXdFbGVtZW50LmlubmVySFRNTCA9ICcnO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfS5iaW5kKHRoaXMpO1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAoc3VibWl0QWN0aW9uKCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy5kaWFsb2cuY2xvc2UuY2FsbCh0aGlzKTtcclxuICAgICAgICAgICAgICAgIC8vIGhpc3Rvcnkgc3RhY2tcclxuICAgICAgICAgICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoKGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmRpYWxvZy5jbG9zZS5jYWxsKHRoaXMpO1xyXG4gICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xvc2VMb2FkaW5nKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIGFjdGl2ZTogZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICBpZiAoIWVsZW1lbnQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbGxlckFycmF5LmluZGV4T2YodGhpcy5jb250ZXh0Lm1hdGgubWF0aENvbnRyb2xsZXIpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcnNPZmYoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtZXhwJykpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbGxlckFycmF5LmluZGV4T2YodGhpcy5jb250ZXh0Lm1hdGgubWF0aENvbnRyb2xsZXIpIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRSYW5nZShlbGVtZW50LCAwLCBlbGVtZW50LCAxKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy5tYXRoLmNhbGxfY29udHJvbGxlci5jYWxsKHRoaXMsIGVsZW1lbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICBvbjogZnVuY3Rpb24gKHVwZGF0ZSkge1xyXG4gICAgICAgIGlmICghdXBkYXRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5tYXRoLmluaXQuY2FsbCh0aGlzKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBjb250ZXh0TWF0aCA9IHRoaXMuY29udGV4dC5tYXRoO1xyXG4gICAgICAgICAgICBpZiAoY29udGV4dE1hdGguX21hdGhFeHApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGV4cCA9IHRoaXMudXRpbC5IVE1MRGVjb2Rlcihjb250ZXh0TWF0aC5fbWF0aEV4cC5nZXRBdHRyaWJ1dGUoJ2RhdGEtZXhwJykpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZm9udFNpemUgPSBjb250ZXh0TWF0aC5fbWF0aEV4cC5nZXRBdHRyaWJ1dGUoJ2RhdGEtZm9udC1zaXplJykgfHwgJzFlbSc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZGlhbG9nLnVwZGF0ZU1vZGFsID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGNvbnRleHRNYXRoLmZvY3VzRWxlbWVudC52YWx1ZSA9IGV4cDtcclxuICAgICAgICAgICAgICAgIGNvbnRleHRNYXRoLmZvbnRTaXplRWxlbWVudC52YWx1ZSA9IGZvbnRTaXplO1xyXG4gICAgICAgICAgICAgICAgY29udGV4dE1hdGgucHJldmlld0VsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5wbHVnaW5zLm1hdGguX3JlbmRlcmVyLmNhbGwodGhpcywgZXhwKTtcclxuICAgICAgICAgICAgICAgIGNvbnRleHRNYXRoLnByZXZpZXdFbGVtZW50LnN0eWxlLmZvbnRTaXplID0gZm9udFNpemU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGNhbGxfY29udHJvbGxlcjogZnVuY3Rpb24gKG1hdGhUYWcpIHtcclxuICAgICAgICB0aGlzLmNvbnRleHQubWF0aC5fbWF0aEV4cCA9IG1hdGhUYWc7XHJcbiAgICAgICAgY29uc3QgbWF0aEJ0biA9IHRoaXMuY29udGV4dC5tYXRoLm1hdGhDb250cm9sbGVyO1xyXG5cclxuICAgICAgICB0aGlzLnNldENvbnRyb2xsZXJQb3NpdGlvbihtYXRoQnRuLCBtYXRoVGFnLCAnYm90dG9tJywge2xlZnQ6IDAsIHRvcDogMH0pO1xyXG4gICAgICAgIHRoaXMuY29udHJvbGxlcnNPbihtYXRoQnRuLCBtYXRoVGFnLCAnbWF0aCcpO1xyXG4gICAgfSxcclxuXHJcbiAgICBvbkNsaWNrX21hdGhDb250cm9sbGVyOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGNvbW1hbmQgPSBlLnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29tbWFuZCcpIHx8IGUudGFyZ2V0LnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLWNvbW1hbmQnKTtcclxuICAgICAgICBpZiAoIWNvbW1hbmQpIHJldHVybjtcclxuXHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgICAgICBpZiAoL3VwZGF0ZS8udGVzdChjb21tYW5kKSkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRleHQubWF0aC5mb2N1c0VsZW1lbnQudmFsdWUgPSB0aGlzLnV0aWwuSFRNTERlY29kZXIodGhpcy5jb250ZXh0Lm1hdGguX21hdGhFeHAuZ2V0QXR0cmlidXRlKCdkYXRhLWV4cCcpKTtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmRpYWxvZy5vcGVuLmNhbGwodGhpcywgJ21hdGgnLCB0cnVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvKiogZGVsZXRlICovXHJcbiAgICAgICAgICAgIHRoaXMudXRpbC5yZW1vdmVJdGVtKHRoaXMuY29udGV4dC5tYXRoLl9tYXRoRXhwKTtcclxuICAgICAgICAgICAgdGhpcy5jb250ZXh0Lm1hdGguX21hdGhFeHAgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLmZvY3VzKCk7XHJcblxyXG4gICAgICAgICAgICAvLyBoaXN0b3J5IHN0YWNrXHJcbiAgICAgICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoKGZhbHNlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY29udHJvbGxlcnNPZmYoKTtcclxuICAgIH0sXHJcblxyXG4gICAgaW5pdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHRNYXRoID0gdGhpcy5jb250ZXh0Lm1hdGg7XHJcbiAgICAgICAgY29udGV4dE1hdGgubWF0aENvbnRyb2xsZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICBjb250ZXh0TWF0aC5fbWF0aEV4cCA9IG51bGw7XHJcbiAgICAgICAgY29udGV4dE1hdGguZm9jdXNFbGVtZW50LnZhbHVlID0gJyc7XHJcbiAgICAgICAgY29udGV4dE1hdGgucHJldmlld0VsZW1lbnQuaW5uZXJIVE1MID0gJyc7XHJcbiAgICB9XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbi8vIGNvbW1hbmRcclxuaW1wb3J0IGJsb2NrcXVvdGUgZnJvbSAnLi9jb21tYW5kL2Jsb2NrcXVvdGUnO1xyXG5cclxuLy8gc3VibWVudVxyXG5pbXBvcnQgYWxpZ24gZnJvbSAnLi9zdWJtZW51L2FsaWduJztcclxuaW1wb3J0IGZvbnQgZnJvbSAnLi9zdWJtZW51L2ZvbnQnO1xyXG5pbXBvcnQgZm9udFNpemUgZnJvbSAnLi9zdWJtZW51L2ZvbnRTaXplJztcclxuaW1wb3J0IGZvbnRDb2xvciBmcm9tICcuL3N1Ym1lbnUvZm9udENvbG9yJztcclxuaW1wb3J0IGhpbGl0ZUNvbG9yIGZyb20gJy4vc3VibWVudS9oaWxpdGVDb2xvcic7XHJcbmltcG9ydCBob3Jpem9udGFsUnVsZSBmcm9tICcuL3N1Ym1lbnUvaG9yaXpvbnRhbFJ1bGUnO1xyXG5pbXBvcnQgbGlzdCBmcm9tICcuL3N1Ym1lbnUvbGlzdCc7XHJcbmltcG9ydCB0YWJsZSBmcm9tICcuL3N1Ym1lbnUvdGFibGUnO1xyXG5pbXBvcnQgZm9ybWF0QmxvY2sgZnJvbSAnLi9zdWJtZW51L2Zvcm1hdEJsb2NrJztcclxuaW1wb3J0IGxpbmVIZWlnaHQgZnJvbSAnLi9zdWJtZW51L2xpbmVIZWlnaHQnO1xyXG5pbXBvcnQgdGVtcGxhdGUgZnJvbSAnLi9zdWJtZW51L3RlbXBsYXRlJztcclxuaW1wb3J0IHBhcmFncmFwaFN0eWxlIGZyb20gJy4vc3VibWVudS9wYXJhZ3JhcGhTdHlsZSc7XHJcbmltcG9ydCB0ZXh0U3R5bGUgZnJvbSAnLi9zdWJtZW51L3RleHRTdHlsZSc7XHJcblxyXG4vLyBkaWFsb2dcclxuaW1wb3J0IGxpbmsgZnJvbSAnLi9kaWFsb2cvbGluayc7XHJcbmltcG9ydCBpbWFnZSBmcm9tICcuL2RpYWxvZy9pbWFnZSc7XHJcbmltcG9ydCB2aWRlbyBmcm9tICcuL2RpYWxvZy92aWRlbyc7XHJcbmltcG9ydCBhdWRpbyBmcm9tICcuL2RpYWxvZy9hdWRpbyc7XHJcbmltcG9ydCBtYXRoIGZyb20gJy4vZGlhbG9nL21hdGgnO1xyXG5cclxuLy8gZmlsZSBicm93c2VyXHJcbmltcG9ydCBpbWFnZUdhbGxlcnkgZnJvbSAnLi9maWxlQnJvd3Nlci9pbWFnZUdhbGxlcnknO1xyXG5cclxuZXhwb3J0IHsgYmxvY2txdW90ZSwgYWxpZ24sIGZvbnQsIGZvbnRTaXplLCBmb250Q29sb3IsIGhpbGl0ZUNvbG9yLCBob3Jpem9udGFsUnVsZSwgbGlzdCwgdGFibGUsIGZvcm1hdEJsb2NrLCBsaW5lSGVpZ2h0LCB0ZW1wbGF0ZSwgcGFyYWdyYXBoU3R5bGUsIHRleHRTdHlsZSwgbGluaywgaW1hZ2UsIHZpZGVvLCBhdWRpbywgbWF0aCwgaW1hZ2VHYWxsZXJ5IH07XHJcbmV4cG9ydCBkZWZhdWx0IHsgYmxvY2txdW90ZSwgYWxpZ24sIGZvbnQsIGZvbnRTaXplLCBmb250Q29sb3IsIGhpbGl0ZUNvbG9yLCBob3Jpem9udGFsUnVsZSwgbGlzdCwgdGFibGUsIGZvcm1hdEJsb2NrLCBsaW5lSGVpZ2h0LCB0ZW1wbGF0ZSwgcGFyYWdyYXBoU3R5bGUsIHRleHRTdHlsZSwgbGluaywgaW1hZ2UsIHZpZGVvLCBhdWRpbywgbWF0aCwgaW1hZ2VHYWxsZXJ5IH07XHJcbiIsIi8qXHJcbiAqIHd5c2l3eWcgd2ViIGVkaXRvclxyXG4gKlxyXG4gKiBzdW5lZGl0b3IuanNcclxuICogQ29weXJpZ2h0IDIwMTcgSmlIb25nIExlZS5cclxuICogTUlUIGxpY2Vuc2UuXHJcbiAqL1xyXG4ndXNlIHN0cmljdCc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgICBuYW1lOiAnYmxvY2txdW90ZScsXHJcbiAgICBkaXNwbGF5OiAnY29tbWFuZCcsXHJcbiAgICBhZGQ6IGZ1bmN0aW9uIChjb3JlLCB0YXJnZXRFbGVtZW50KSB7XHJcbiAgICAgICAgY29uc3QgY29udGV4dCA9IGNvcmUuY29udGV4dDtcclxuICAgICAgICBjb250ZXh0LmJsb2NrcXVvdGUgPSB7XHJcbiAgICAgICAgICAgIHRhcmdldEJ1dHRvbjogdGFyZ2V0RWxlbWVudCxcclxuICAgICAgICAgICAgdGFnOiBjb3JlLnV0aWwuY3JlYXRlRWxlbWVudCgnQkxPQ0tRVU9URScpXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAT3ZlcnJpZGUgY29yZVxyXG4gICAgICovXHJcbiAgICBhY3RpdmU6IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICAgICAgaWYgKCFlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMudXRpbC5yZW1vdmVDbGFzcyh0aGlzLmNvbnRleHQuYmxvY2txdW90ZS50YXJnZXRCdXR0b24sICdhY3RpdmUnKTtcclxuICAgICAgICB9IGVsc2UgaWYgKC9ibG9ja3F1b3RlL2kudGVzdChlbGVtZW50Lm5vZGVOYW1lKSkge1xyXG4gICAgICAgICAgICB0aGlzLnV0aWwuYWRkQ2xhc3ModGhpcy5jb250ZXh0LmJsb2NrcXVvdGUudGFyZ2V0QnV0dG9uLCAnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQE92ZXJyaWRlIGNvcmVcclxuICAgICAqL1xyXG4gICAgYWN0aW9uOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY29uc3QgY3VycmVudEJsb2NrcXVvdGUgPSB0aGlzLnV0aWwuZ2V0UGFyZW50RWxlbWVudCh0aGlzLmdldFNlbGVjdGlvbk5vZGUoKSwgJ2Jsb2NrcXVvdGUnKTtcclxuXHJcbiAgICAgICAgaWYgKGN1cnJlbnRCbG9ja3F1b3RlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGV0YWNoUmFuZ2VGb3JtYXRFbGVtZW50KGN1cnJlbnRCbG9ja3F1b3RlLCBudWxsLCBudWxsLCBmYWxzZSwgZmFsc2UpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHlSYW5nZUZvcm1hdEVsZW1lbnQodGhpcy5jb250ZXh0LmJsb2NrcXVvdGUudGFnLmNsb25lTm9kZShmYWxzZSkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTsiLCIvKlxyXG4gKiB3eXNpd3lnIHdlYiBlZGl0b3JcclxuICpcclxuICogc3VuZWRpdG9yLmpzXHJcbiAqIENvcHlyaWdodCAyMDE3IEppSG9uZyBMZWUuXHJcbiAqIE1JVCBsaWNlbnNlLlxyXG4gKi9cclxuJ3VzZSBzdHJpY3QnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgbmFtZTogJ2FsaWduJyxcclxuICAgIGRpc3BsYXk6ICdzdWJtZW51JyxcclxuICAgIGFkZDogZnVuY3Rpb24gKGNvcmUsIHRhcmdldEVsZW1lbnQpIHtcclxuICAgICAgICBjb25zdCBpY29ucyA9IGNvcmUuaWNvbnM7XHJcbiAgICAgICAgY29uc3QgY29udGV4dCA9IGNvcmUuY29udGV4dDtcclxuICAgICAgICBjb250ZXh0LmFsaWduID0ge1xyXG4gICAgICAgICAgICB0YXJnZXRCdXR0b246IHRhcmdldEVsZW1lbnQsXHJcbiAgICAgICAgICAgIF9hbGlnbkxpc3Q6IG51bGwsXHJcbiAgICAgICAgICAgIGN1cnJlbnRBbGlnbjogJycsXHJcbiAgICAgICAgICAgIGRlZmF1bHREaXI6IGNvcmUub3B0aW9ucy5ydGwgPyAncmlnaHQnIDogJ2xlZnQnLCBcclxuICAgICAgICAgICAgaWNvbnM6IHtcclxuICAgICAgICAgICAgICAgIGp1c3RpZnk6IGljb25zLmFsaWduX2p1c3RpZnksXHJcbiAgICAgICAgICAgICAgICBsZWZ0OiBpY29ucy5hbGlnbl9sZWZ0LFxyXG4gICAgICAgICAgICAgICAgcmlnaHQ6IGljb25zLmFsaWduX3JpZ2h0LFxyXG4gICAgICAgICAgICAgICAgY2VudGVyOiBpY29ucy5hbGlnbl9jZW50ZXJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8qKiBzZXQgc3VibWVudSAqL1xyXG4gICAgICAgIGxldCBsaXN0RGl2ID0gdGhpcy5zZXRTdWJtZW51KGNvcmUpO1xyXG4gICAgICAgIGxldCBsaXN0VWwgPSBsaXN0RGl2LnF1ZXJ5U2VsZWN0b3IoJ3VsJyk7XHJcblxyXG4gICAgICAgIC8qKiBhZGQgZXZlbnQgbGlzdGVuZXJzICovXHJcbiAgICAgICAgbGlzdFVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5waWNrdXAuYmluZChjb3JlKSk7XHJcbiAgICAgICAgY29udGV4dC5hbGlnbi5fYWxpZ25MaXN0ID0gbGlzdFVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ2xpIGJ1dHRvbicpO1xyXG5cclxuICAgICAgICAvKiogYXBwZW5kIHRhcmdldCBidXR0b24gbWVudSAqL1xyXG4gICAgICAgIGNvcmUuaW5pdE1lbnVUYXJnZXQodGhpcy5uYW1lLCB0YXJnZXRFbGVtZW50LCBsaXN0RGl2KTtcclxuXHJcbiAgICAgICAgLyoqIGVtcHR5IG1lbW9yeSAqL1xyXG4gICAgICAgIGxpc3REaXYgPSBudWxsLCBsaXN0VWwgPSBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdWJtZW51OiBmdW5jdGlvbiAoY29yZSkge1xyXG4gICAgICAgIGNvbnN0IGxhbmcgPSBjb3JlLmxhbmc7XHJcbiAgICAgICAgY29uc3QgaWNvbnMgPSBjb3JlLmljb25zO1xyXG4gICAgICAgIGNvbnN0IGxpc3REaXYgPSBjb3JlLnV0aWwuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcbiAgICAgICAgY29uc3QgbGVmdERpciA9IGNvcmUuY29udGV4dC5hbGlnbi5kZWZhdWx0RGlyID09PSAnbGVmdCc7XHJcblxyXG4gICAgICAgIGNvbnN0IGxlZnRNZW51ID0gJzxsaT4nICtcclxuICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic2UtYnRuLWxpc3Qgc2UtYnRuLWFsaWduXCIgZGF0YS1jb21tYW5kPVwianVzdGlmeWxlZnRcIiBkYXRhLXZhbHVlPVwibGVmdFwiIHRpdGxlPVwiJyArIGxhbmcudG9vbGJhci5hbGlnbkxlZnQgKyAnXCI+JyArXHJcbiAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzZS1saXN0LWljb25cIj4nICsgaWNvbnMuYWxpZ25fbGVmdCArICc8L3NwYW4+JyArIGxhbmcudG9vbGJhci5hbGlnbkxlZnQgK1xyXG4gICAgICAgICAgICAnPC9idXR0b24+JyArXHJcbiAgICAgICAgJzwvbGk+JztcclxuXHJcbiAgICAgICAgY29uc3QgcmlnaHRNZW51ID0gJzxsaT4nICtcclxuICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic2UtYnRuLWxpc3Qgc2UtYnRuLWFsaWduXCIgZGF0YS1jb21tYW5kPVwianVzdGlmeXJpZ2h0XCIgZGF0YS12YWx1ZT1cInJpZ2h0XCIgdGl0bGU9XCInICsgbGFuZy50b29sYmFyLmFsaWduUmlnaHQgKyAnXCI+JyArXHJcbiAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzZS1saXN0LWljb25cIj4nICsgaWNvbnMuYWxpZ25fcmlnaHQgKyc8L3NwYW4+JyArIGxhbmcudG9vbGJhci5hbGlnblJpZ2h0ICtcclxuICAgICAgICAgICAgJzwvYnV0dG9uPicgK1xyXG4gICAgICAgICc8L2xpPic7XHJcblxyXG4gICAgICAgIGxpc3REaXYuY2xhc3NOYW1lID0gJ3NlLXN1Ym1lbnUgc2UtbGlzdC1sYXllciBzZS1saXN0LWFsaWduJztcclxuICAgICAgICBsaXN0RGl2LmlubmVySFRNTCA9ICcnICtcclxuICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1saXN0LWlubmVyXCI+JyArXHJcbiAgICAgICAgICAgICAgICAnPHVsIGNsYXNzPVwic2UtbGlzdC1iYXNpY1wiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgIChsZWZ0RGlyID8gbGVmdE1lbnUgOiByaWdodE1lbnUpICtcclxuICAgICAgICAgICAgICAgICAgICAnPGxpPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJzZS1idG4tbGlzdCBzZS1idG4tYWxpZ25cIiBkYXRhLWNvbW1hbmQ9XCJqdXN0aWZ5Y2VudGVyXCIgZGF0YS12YWx1ZT1cImNlbnRlclwiIHRpdGxlPVwiJyArIGxhbmcudG9vbGJhci5hbGlnbkNlbnRlciArICdcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInNlLWxpc3QtaWNvblwiPicgKyBpY29ucy5hbGlnbl9jZW50ZXIgKyAnPC9zcGFuPicgKyBsYW5nLnRvb2xiYXIuYWxpZ25DZW50ZXIgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzwvbGk+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgKGxlZnREaXI/IHJpZ2h0TWVudSA6IGxlZnRNZW51KSArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxsaT4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic2UtYnRuLWxpc3Qgc2UtYnRuLWFsaWduXCIgZGF0YS1jb21tYW5kPVwianVzdGlmeWZ1bGxcIiBkYXRhLXZhbHVlPVwianVzdGlmeVwiIHRpdGxlPVwiJyArIGxhbmcudG9vbGJhci5hbGlnbkp1c3RpZnkgKyAnXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzZS1saXN0LWljb25cIj4nICsgaWNvbnMuYWxpZ25fanVzdGlmeSArICc8L3NwYW4+JyArIGxhbmcudG9vbGJhci5hbGlnbkp1c3RpZnkgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzwvbGk+JyArXHJcbiAgICAgICAgICAgICAgICAnPC91bD4nICtcclxuICAgICAgICAgICAgJzwvZGl2Pic7XHJcblxyXG4gICAgICAgIHJldHVybiBsaXN0RGl2O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBPdmVycmlkZSBjb3JlXHJcbiAgICAgKi9cclxuICAgIGFjdGl2ZTogZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICBjb25zdCBhbGlnbkNvbnRleHQgPSB0aGlzLmNvbnRleHQuYWxpZ247XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0QnV0dG9uID0gYWxpZ25Db250ZXh0LnRhcmdldEJ1dHRvbjtcclxuICAgICAgICBjb25zdCB0YXJnZXQgPSB0YXJnZXRCdXR0b24uZmlyc3RFbGVtZW50Q2hpbGQ7XHJcblxyXG4gICAgICAgIGlmICghZWxlbWVudCkge1xyXG4gICAgICAgICAgICB0aGlzLnV0aWwuY2hhbmdlRWxlbWVudCh0YXJnZXQsIGFsaWduQ29udGV4dC5pY29uc1thbGlnbkNvbnRleHQuZGVmYXVsdERpcl0pO1xyXG4gICAgICAgICAgICB0YXJnZXRCdXR0b24ucmVtb3ZlQXR0cmlidXRlKCdkYXRhLWZvY3VzJyk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnV0aWwuaXNGb3JtYXRFbGVtZW50KGVsZW1lbnQpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRleHRBbGlnbiA9IGVsZW1lbnQuc3R5bGUudGV4dEFsaWduO1xyXG4gICAgICAgICAgICBpZiAodGV4dEFsaWduKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnV0aWwuY2hhbmdlRWxlbWVudCh0YXJnZXQsIGFsaWduQ29udGV4dC5pY29uc1t0ZXh0QWxpZ25dIHx8IGFsaWduQ29udGV4dC5pY29uc1thbGlnbkNvbnRleHQuZGVmYXVsdERpcl0pO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0QnV0dG9uLnNldEF0dHJpYnV0ZSgnZGF0YS1mb2N1cycsIHRleHRBbGlnbik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBPdmVycmlkZSBzdWJtZW51XHJcbiAgICAgKi9cclxuICAgIG9uOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY29uc3QgYWxpZ25Db250ZXh0ID0gdGhpcy5jb250ZXh0LmFsaWduO1xyXG4gICAgICAgIGNvbnN0IGFsaWduTGlzdCA9IGFsaWduQ29udGV4dC5fYWxpZ25MaXN0O1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRBbGlnbiA9IGFsaWduQ29udGV4dC50YXJnZXRCdXR0b24uZ2V0QXR0cmlidXRlKCdkYXRhLWZvY3VzJykgfHwgYWxpZ25Db250ZXh0LmRlZmF1bHREaXI7XHJcblxyXG4gICAgICAgIGlmIChjdXJyZW50QWxpZ24gIT09IGFsaWduQ29udGV4dC5jdXJyZW50QWxpZ24pIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGFsaWduTGlzdC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRBbGlnbiA9PT0gYWxpZ25MaXN0W2ldLmdldEF0dHJpYnV0ZSgnZGF0YS12YWx1ZScpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51dGlsLmFkZENsYXNzKGFsaWduTGlzdFtpXSwgJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnV0aWwucmVtb3ZlQ2xhc3MoYWxpZ25MaXN0W2ldLCAnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGFsaWduQ29udGV4dC5jdXJyZW50QWxpZ24gPSBjdXJyZW50QWxpZ247XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBwaWNrdXA6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgICAgIGxldCB0YXJnZXQgPSBlLnRhcmdldDtcclxuICAgICAgICBsZXQgdmFsdWUgPSBudWxsO1xyXG5cclxuICAgICAgICB3aGlsZSAoIXZhbHVlICYmICEvVUwvaS50ZXN0KHRhcmdldC50YWdOYW1lKSkge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdmFsdWUnKTtcclxuICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGNvbnN0IGRlZmF1bHREaXIgPSB0aGlzLmNvbnRleHQuYWxpZ24uZGVmYXVsdERpcjtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZEZvcm1zdHMgPSB0aGlzLmdldFNlbGVjdGVkRWxlbWVudHMoKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gc2VsZWN0ZWRGb3Jtc3RzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXRpbC5zZXRTdHlsZShzZWxlY3RlZEZvcm1zdHNbaV0sICd0ZXh0QWxpZ24nLCAodmFsdWUgPT09IGRlZmF1bHREaXIgPyAnJyA6IHZhbHVlKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmVmZmVjdE5vZGUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc3VibWVudU9mZigpO1xyXG4gICAgICAgIHRoaXMuZm9jdXMoKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBoaXN0b3J5IHN0YWNrXHJcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2goZmFsc2UpO1xyXG4gICAgfVxyXG59O1xyXG4iLCIvKlxyXG4gKiB3eXNpd3lnIHdlYiBlZGl0b3JcclxuICpcclxuICogc3VuZWRpdG9yLmpzXHJcbiAqIENvcHlyaWdodCAyMDE3IEppSG9uZyBMZWUuXHJcbiAqIE1JVCBsaWNlbnNlLlxyXG4gKi9cclxuJ3VzZSBzdHJpY3QnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgbmFtZTogJ2ZvbnQnLFxyXG4gICAgZGlzcGxheTogJ3N1Ym1lbnUnLFxyXG4gICAgYWRkOiBmdW5jdGlvbiAoY29yZSwgdGFyZ2V0RWxlbWVudCkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBjb3JlLmNvbnRleHQ7XHJcbiAgICAgICAgY29udGV4dC5mb250ID0ge1xyXG4gICAgICAgICAgICB0YXJnZXRUZXh0OiB0YXJnZXRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy50eHQnKSxcclxuICAgICAgICAgICAgdGFyZ2V0VG9vbHRpcDogdGFyZ2V0RWxlbWVudC5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3IoJy5zZS10b29sdGlwLXRleHQnKSxcclxuICAgICAgICAgICAgX2ZvbnRMaXN0OiBudWxsLFxyXG4gICAgICAgICAgICBjdXJyZW50Rm9udDogJydcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvKiogc2V0IHN1Ym1lbnUgKi9cclxuICAgICAgICBsZXQgbGlzdERpdiA9IHRoaXMuc2V0U3VibWVudShjb3JlKTtcclxuXHJcbiAgICAgICAgLyoqIGFkZCBldmVudCBsaXN0ZW5lcnMgKi9cclxuICAgICAgICBsaXN0RGl2LnF1ZXJ5U2VsZWN0b3IoJy5zZS1saXN0LWlubmVyJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLnBpY2t1cC5iaW5kKGNvcmUpKTtcclxuXHJcbiAgICAgICAgY29udGV4dC5mb250Ll9mb250TGlzdCA9IGxpc3REaXYucXVlcnlTZWxlY3RvckFsbCgndWwgbGkgYnV0dG9uJyk7XHJcblxyXG4gICAgICAgIC8qKiBhcHBlbmQgdGFyZ2V0IGJ1dHRvbiBtZW51ICovXHJcbiAgICAgICAgY29yZS5pbml0TWVudVRhcmdldCh0aGlzLm5hbWUsIHRhcmdldEVsZW1lbnQsIGxpc3REaXYpO1xyXG5cclxuICAgICAgICAvKiogZW1wdHkgbWVtb3J5ICovXHJcbiAgICAgICAgbGlzdERpdiA9IG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIHNldFN1Ym1lbnU6IGZ1bmN0aW9uIChjb3JlKSB7XHJcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gY29yZS5vcHRpb25zO1xyXG4gICAgICAgIGNvbnN0IGxhbmcgPSBjb3JlLmxhbmc7XHJcbiAgICAgICAgY29uc3QgbGlzdERpdiA9IGNvcmUudXRpbC5jcmVhdGVFbGVtZW50KCdESVYnKTtcclxuXHJcbiAgICAgICAgbGlzdERpdi5jbGFzc05hbWUgPSAnc2Utc3VibWVudSBzZS1saXN0LWxheWVyIHNlLWxpc3QtZm9udC1mYW1pbHknO1xyXG5cclxuICAgICAgICBsZXQgZm9udCwgdGV4dCwgaSwgbGVuO1xyXG4gICAgICAgIGxldCBmb250TGlzdCA9ICFvcHRpb24uZm9udCA/XHJcbiAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICAgICdBcmlhbCcsXHJcbiAgICAgICAgICAgICAgICAnQ29taWMgU2FucyBNUycsXHJcbiAgICAgICAgICAgICAgICAnQ291cmllciBOZXcnLFxyXG4gICAgICAgICAgICAgICAgJ0ltcGFjdCcsXHJcbiAgICAgICAgICAgICAgICAnR2VvcmdpYScsXHJcbiAgICAgICAgICAgICAgICAndGFob21hJyxcclxuICAgICAgICAgICAgICAgICdUcmVidWNoZXQgTVMnLFxyXG4gICAgICAgICAgICAgICAgJ1ZlcmRhbmEnXHJcbiAgICAgICAgICAgIF0gOiBvcHRpb24uZm9udDtcclxuXHJcbiAgICAgICAgbGV0IGxpc3QgPSAnPGRpdiBjbGFzcz1cInNlLWxpc3QtaW5uZXJcIj4nICtcclxuICAgICAgICAgICAgICAgICc8dWwgY2xhc3M9XCJzZS1saXN0LWJhc2ljXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxsaT48YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImRlZmF1bHRfdmFsdWUgc2UtYnRuLWxpc3RcIiB0aXRsZT1cIicgKyBsYW5nLnRvb2xiYXIuZGVmYXVsdCArICdcIj4oJyArIGxhbmcudG9vbGJhci5kZWZhdWx0ICsgJyk8L2J1dHRvbj48L2xpPic7XHJcbiAgICAgICAgZm9yIChpID0gMCwgbGVuID0gZm9udExpc3QubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgZm9udCA9IGZvbnRMaXN0W2ldO1xyXG4gICAgICAgICAgICB0ZXh0ID0gZm9udC5zcGxpdCgnLCcpWzBdO1xyXG4gICAgICAgICAgICBsaXN0ICs9ICc8bGk+PGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJzZS1idG4tbGlzdFwiIGRhdGEtdmFsdWU9XCInICsgZm9udCArICdcIiBkYXRhLXR4dD1cIicgKyB0ZXh0ICsgJ1wiIHRpdGxlPVwiJyArIHRleHQgKyAnXCIgc3R5bGU9XCJmb250LWZhbWlseTonICsgZm9udCArICc7XCI+JyArIHRleHQgKyAnPC9idXR0b24+PC9saT4nO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsaXN0ICs9ICc8L3VsPjwvZGl2Pic7XHJcbiAgICAgICAgbGlzdERpdi5pbm5lckhUTUwgPSBsaXN0O1xyXG5cclxuICAgICAgICByZXR1cm4gbGlzdERpdjtcclxuICAgIH0sXHJcblxyXG4gICAgIC8qKlxyXG4gICAgICogQE92ZXJyaWRlIGNvcmVcclxuICAgICAqL1xyXG4gICAgYWN0aXZlOiBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuY29udGV4dC5mb250LnRhcmdldFRleHQ7XHJcbiAgICAgICAgY29uc3QgdG9vbHRpcCA9IHRoaXMuY29udGV4dC5mb250LnRhcmdldFRvb2x0aXA7XHJcblxyXG4gICAgICAgIGlmICghZWxlbWVudCkge1xyXG4gICAgICAgICAgICBjb25zdCBmb250ID0gdGhpcy5oYXNGb2N1cyA/IHRoaXMud3dDb21wdXRlZFN0eWxlLmZvbnRGYW1pbHkgOiB0aGlzLmxhbmcudG9vbGJhci5mb250O1xyXG4gICAgICAgICAgICB0aGlzLnV0aWwuY2hhbmdlVHh0KHRhcmdldCwgZm9udCk7XHJcbiAgICAgICAgICAgIHRoaXMudXRpbC5jaGFuZ2VUeHQodG9vbHRpcCwgdGhpcy5oYXNGb2N1cyA/IHRoaXMubGFuZy50b29sYmFyLmZvbnQgKyAnICgnICsgZm9udCArICcpJyA6IGZvbnQpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5zdHlsZSAmJiBlbGVtZW50LnN0eWxlLmZvbnRGYW1pbHkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RGb250ID0gZWxlbWVudC5zdHlsZS5mb250RmFtaWx5LnJlcGxhY2UoL1tcIiddL2csJycpO1xyXG4gICAgICAgICAgICB0aGlzLnV0aWwuY2hhbmdlVHh0KHRhcmdldCwgc2VsZWN0Rm9udCk7XHJcbiAgICAgICAgICAgIHRoaXMudXRpbC5jaGFuZ2VUeHQodG9vbHRpcCwgdGhpcy5sYW5nLnRvb2xiYXIuZm9udCArICcgKCcgKyBzZWxlY3RGb250ICsgJyknKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgICAvKipcclxuICAgICAqIEBPdmVycmlkZSBzdWJtZW51XHJcbiAgICAgKi9cclxuICAgIG9uOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY29uc3QgZm9udENvbnRleHQgPSB0aGlzLmNvbnRleHQuZm9udDtcclxuICAgICAgICBjb25zdCBmb250TGlzdCA9IGZvbnRDb250ZXh0Ll9mb250TGlzdDtcclxuICAgICAgICBjb25zdCBjdXJyZW50Rm9udCA9IGZvbnRDb250ZXh0LnRhcmdldFRleHQudGV4dENvbnRlbnQ7XHJcblxyXG4gICAgICAgIGlmIChjdXJyZW50Rm9udCAhPT0gZm9udENvbnRleHQuY3VycmVudEZvbnQpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGZvbnRMaXN0Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudEZvbnQgPT09IGZvbnRMaXN0W2ldLmdldEF0dHJpYnV0ZSgnZGF0YS12YWx1ZScpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51dGlsLmFkZENsYXNzKGZvbnRMaXN0W2ldLCAnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXRpbC5yZW1vdmVDbGFzcyhmb250TGlzdFtpXSwgJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmb250Q29udGV4dC5jdXJyZW50Rm9udCA9IGN1cnJlbnRGb250O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgcGlja3VwOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgIGlmICghL15CVVRUT04kL2kudGVzdChlLnRhcmdldC50YWdOYW1lKSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSBlLnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdmFsdWUnKTtcclxuXHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld05vZGUgPSB0aGlzLnV0aWwuY3JlYXRlRWxlbWVudCgnU1BBTicpO1xyXG4gICAgICAgICAgICBuZXdOb2RlLnN0eWxlLmZvbnRGYW1pbHkgPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5ub2RlQ2hhbmdlKG5ld05vZGUsIFsnZm9udC1mYW1pbHknXSwgbnVsbCwgbnVsbCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5ub2RlQ2hhbmdlKG51bGwsIFsnZm9udC1mYW1pbHknXSwgWydzcGFuJ10sIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnN1Ym1lbnVPZmYoKTtcclxuICAgIH1cclxufTtcclxuIiwiLypcclxuICogd3lzaXd5ZyB3ZWIgZWRpdG9yXHJcbiAqXHJcbiAqIHN1bmVkaXRvci5qc1xyXG4gKiBDb3B5cmlnaHQgMjAxNyBKaUhvbmcgTGVlLlxyXG4gKiBNSVQgbGljZW5zZS5cclxuICovXHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIG5hbWU6ICdmb250U2l6ZScsXHJcbiAgICBkaXNwbGF5OiAnc3VibWVudScsXHJcbiAgICBhZGQ6IGZ1bmN0aW9uIChjb3JlLCB0YXJnZXRFbGVtZW50KSB7XHJcbiAgICAgICAgY29uc3QgY29udGV4dCA9IGNvcmUuY29udGV4dDtcclxuICAgICAgICBjb250ZXh0LmZvbnRTaXplID0ge1xyXG4gICAgICAgICAgICB0YXJnZXRUZXh0OiB0YXJnZXRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy50eHQnKSxcclxuICAgICAgICAgICAgX3NpemVMaXN0OiBudWxsLFxyXG4gICAgICAgICAgICBjdXJyZW50U2l6ZTogJydcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvKiogc2V0IHN1Ym1lbnUgKi9cclxuICAgICAgICBsZXQgbGlzdERpdiA9IHRoaXMuc2V0U3VibWVudShjb3JlKTtcclxuICAgICAgICBsZXQgbGlzdFVsID0gbGlzdERpdi5xdWVyeVNlbGVjdG9yKCd1bCcpO1xyXG5cclxuICAgICAgICAvKiogYWRkIGV2ZW50IGxpc3RlbmVycyAqL1xyXG4gICAgICAgIGxpc3RVbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMucGlja3VwLmJpbmQoY29yZSkpO1xyXG4gICAgICAgIGNvbnRleHQuZm9udFNpemUuX3NpemVMaXN0ID0gbGlzdFVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ2xpIGJ1dHRvbicpO1xyXG5cclxuICAgICAgICAvKiogYXBwZW5kIHRhcmdldCBidXR0b24gbWVudSAqL1xyXG4gICAgICAgIGNvcmUuaW5pdE1lbnVUYXJnZXQodGhpcy5uYW1lLCB0YXJnZXRFbGVtZW50LCBsaXN0RGl2KTtcclxuXHJcbiAgICAgICAgLyoqIGVtcHR5IG1lbW9yeSAqL1xyXG4gICAgICAgIGxpc3REaXYgPSBudWxsLCBsaXN0VWwgPSBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdWJtZW51OiBmdW5jdGlvbiAoY29yZSkge1xyXG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IGNvcmUub3B0aW9ucztcclxuICAgICAgICBjb25zdCBsYW5nID0gY29yZS5sYW5nO1xyXG4gICAgICAgIGNvbnN0IGxpc3REaXYgPSBjb3JlLnV0aWwuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcblxyXG4gICAgICAgIGxpc3REaXYuY2xhc3NOYW1lID0gJ3NlLXN1Ym1lbnUgc2UtbGlzdC1sYXllciBzZS1saXN0LWZvbnQtc2l6ZSc7XHJcblxyXG4gICAgICAgIGNvbnN0IHNpemVMaXN0ID0gIW9wdGlvbi5mb250U2l6ZSA/IFs4LCA5LCAxMCwgMTEsIDEyLCAxNCwgMTYsIDE4LCAyMCwgMjIsIDI0LCAyNiwgMjgsIDM2LCA0OCwgNzJdIDogb3B0aW9uLmZvbnRTaXplO1xyXG5cclxuICAgICAgICBsZXQgbGlzdCA9ICc8ZGl2IGNsYXNzPVwic2UtbGlzdC1pbm5lclwiPicgK1xyXG4gICAgICAgICAgICAgICAgJzx1bCBjbGFzcz1cInNlLWxpc3QtYmFzaWNcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPGxpPjxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiZGVmYXVsdF92YWx1ZSBzZS1idG4tbGlzdFwiIHRpdGxlPVwiJyArIGxhbmcudG9vbGJhci5kZWZhdWx0ICsgJ1wiPignICsgbGFuZy50b29sYmFyLmRlZmF1bHQgKyAnKTwvYnV0dG9uPjwvbGk+JztcclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgdW5pdCA9IG9wdGlvbi5mb250U2l6ZVVuaXQsIGxlbiA9IHNpemVMaXN0Lmxlbmd0aCwgc2l6ZTsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHNpemUgPSBzaXplTGlzdFtpXTtcclxuICAgICAgICAgICAgbGlzdCArPSAnPGxpPjxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic2UtYnRuLWxpc3RcIiBkYXRhLXZhbHVlPVwiJyArIHNpemUgKyB1bml0ICsgJ1wiIHRpdGxlPVwiJyArIHNpemUgKyB1bml0ICsgJ1wiIHN0eWxlPVwiZm9udC1zaXplOicgKyBzaXplICsgdW5pdCArICc7XCI+JyArIHNpemUgKyAnPC9idXR0b24+PC9saT4nO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsaXN0ICs9ICc8L3VsPjwvZGl2Pic7XHJcblxyXG4gICAgICAgIGxpc3REaXYuaW5uZXJIVE1MID0gbGlzdDtcclxuXHJcbiAgICAgICAgcmV0dXJuIGxpc3REaXY7XHJcbiAgICB9LFxyXG5cclxuICAgICAvKipcclxuICAgICAqIEBPdmVycmlkZSBjb3JlXHJcbiAgICAgKi9cclxuICAgIGFjdGl2ZTogZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICBpZiAoIWVsZW1lbnQpIHtcclxuICAgICAgICAgICAgdGhpcy51dGlsLmNoYW5nZVR4dCh0aGlzLmNvbnRleHQuZm9udFNpemUudGFyZ2V0VGV4dCwgdGhpcy5oYXNGb2N1cyA/IHRoaXMud3dDb21wdXRlZFN0eWxlLmZvbnRTaXplIDogdGhpcy5sYW5nLnRvb2xiYXIuZm9udFNpemUpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5zdHlsZSAmJiBlbGVtZW50LnN0eWxlLmZvbnRTaXplLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy51dGlsLmNoYW5nZVR4dCh0aGlzLmNvbnRleHQuZm9udFNpemUudGFyZ2V0VGV4dCwgZWxlbWVudC5zdHlsZS5mb250U2l6ZSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICAgLyoqXHJcbiAgICAgKiBAT3ZlcnJpZGUgc3VibWVudVxyXG4gICAgICovXHJcbiAgICBvbjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnN0IGZvbnRTaXplQ29udGV4dCA9IHRoaXMuY29udGV4dC5mb250U2l6ZTtcclxuICAgICAgICBjb25zdCBzaXplTGlzdCA9IGZvbnRTaXplQ29udGV4dC5fc2l6ZUxpc3Q7XHJcbiAgICAgICAgY29uc3QgY3VycmVudFNpemUgPSBmb250U2l6ZUNvbnRleHQudGFyZ2V0VGV4dC50ZXh0Q29udGVudDtcclxuXHJcbiAgICAgICAgaWYgKGN1cnJlbnRTaXplICE9PSBmb250U2l6ZUNvbnRleHQuY3VycmVudFNpemUpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHNpemVMaXN0Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFNpemUgPT09IHNpemVMaXN0W2ldLmdldEF0dHJpYnV0ZSgnZGF0YS12YWx1ZScpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51dGlsLmFkZENsYXNzKHNpemVMaXN0W2ldLCAnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXRpbC5yZW1vdmVDbGFzcyhzaXplTGlzdFtpXSwgJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmb250U2l6ZUNvbnRleHQuY3VycmVudFNpemUgPSBjdXJyZW50U2l6ZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIHBpY2t1cDogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBpZiAoIS9eQlVUVE9OJC9pLnRlc3QoZS50YXJnZXQudGFnTmFtZSkpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSBlLnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdmFsdWUnKTtcclxuXHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld05vZGUgPSB0aGlzLnV0aWwuY3JlYXRlRWxlbWVudCgnU1BBTicpO1xyXG4gICAgICAgICAgICBuZXdOb2RlLnN0eWxlLmZvbnRTaXplID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMubm9kZUNoYW5nZShuZXdOb2RlLCBbJ2ZvbnQtc2l6ZSddLCBudWxsLCBudWxsKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm5vZGVDaGFuZ2UobnVsbCwgWydmb250LXNpemUnXSwgWydzcGFuJ10sIHRydWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zdWJtZW51T2ZmKCk7XHJcbiAgICB9XHJcbn07XHJcbiIsIi8qXHJcbiAqIHd5c2l3eWcgd2ViIGVkaXRvclxyXG4gKlxyXG4gKiBzdW5lZGl0b3IuanNcclxuICogQ29weXJpZ2h0IDIwMTcgSmlIb25nIExlZS5cclxuICogTUlUIGxpY2Vuc2UuXHJcbiAqL1xyXG4ndXNlIHN0cmljdCc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgICBuYW1lOiAnaG9yaXpvbnRhbFJ1bGUnLFxyXG4gICAgZGlzcGxheTogJ3N1Ym1lbnUnLFxyXG4gICAgYWRkOiBmdW5jdGlvbiAoY29yZSwgdGFyZ2V0RWxlbWVudCkge1xyXG4gICAgICAgIGNvcmUuY29udGV4dC5ob3Jpem9udGFsUnVsZSA9IHtcclxuICAgICAgICAgICAgY3VycmVudEhSOiBudWxsLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8qKiBzZXQgc3VibWVudSAqL1xyXG4gICAgICAgIGxldCBsaXN0RGl2ID0gdGhpcy5zZXRTdWJtZW51KGNvcmUpO1xyXG5cclxuICAgICAgICAvKiogYWRkIGV2ZW50IGxpc3RlbmVycyAqL1xyXG4gICAgICAgIGxpc3REaXYucXVlcnlTZWxlY3RvcigndWwnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuaG9yaXpvbnRhbFJ1bGVQaWNrLmJpbmQoY29yZSkpO1xyXG5cclxuICAgICAgICAvKiogYXBwZW5kIHRhcmdldCBidXR0b24gbWVudSAqL1xyXG4gICAgICAgIGNvcmUuaW5pdE1lbnVUYXJnZXQodGhpcy5uYW1lLCB0YXJnZXRFbGVtZW50LCBsaXN0RGl2KTtcclxuXHJcbiAgICAgICAgLyoqIGVtcHR5IG1lbW9yeSAqL1xyXG4gICAgICAgIGxpc3REaXYgPSBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdWJtZW51OiBmdW5jdGlvbiAoY29yZSkge1xyXG4gICAgICAgIGNvbnN0IGxhbmcgPSBjb3JlLmxhbmc7XHJcbiAgICAgICAgY29uc3QgbGlzdERpdiA9IGNvcmUudXRpbC5jcmVhdGVFbGVtZW50KCdESVYnKTtcclxuXHJcbiAgICAgICAgbGlzdERpdi5jbGFzc05hbWUgPSAnc2Utc3VibWVudSBzZS1saXN0LWxheWVyIHNlLWxpc3QtbGluZSc7XHJcbiAgICAgICAgbGlzdERpdi5pbm5lckhUTUwgPSAnJyArXHJcbiAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtbGlzdC1pbm5lclwiPicgK1xyXG4gICAgICAgICAgICAgICAgJzx1bCBjbGFzcz1cInNlLWxpc3QtYmFzaWNcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPGxpPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJzZS1idG4tbGlzdCBidG5fbGluZVwiIGRhdGEtY29tbWFuZD1cImhvcml6b250YWxSdWxlXCIgZGF0YS12YWx1ZT1cInNvbGlkXCIgdGl0bGU9XCInICsgbGFuZy50b29sYmFyLmhyX3NvbGlkICsgJ1wiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxociBzdHlsZT1cImJvcmRlci13aWR0aDogMXB4IDAgMDsgYm9yZGVyLXN0eWxlOiBzb2xpZCBub25lIG5vbmU7IGJvcmRlci1jb2xvcjogYmxhY2s7IGJvcmRlci1pbWFnZTogaW5pdGlhbDsgaGVpZ2h0OiAxcHg7XCIgLz4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJzwvYnV0dG9uPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8L2xpPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8bGk+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInNlLWJ0bi1saXN0IGJ0bl9saW5lXCIgZGF0YS1jb21tYW5kPVwiaG9yaXpvbnRhbFJ1bGVcIiBkYXRhLXZhbHVlPVwiZG90dGVkXCIgdGl0bGU9XCInICsgbGFuZy50b29sYmFyLmhyX2RvdHRlZCArICdcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8aHIgc3R5bGU9XCJib3JkZXItd2lkdGg6IDFweCAwIDA7IGJvcmRlci1zdHlsZTogZG90dGVkIG5vbmUgbm9uZTsgYm9yZGVyLWNvbG9yOiBibGFjazsgYm9yZGVyLWltYWdlOiBpbml0aWFsOyBoZWlnaHQ6IDFweDtcIiAvPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzwvbGk+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxsaT4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic2UtYnRuLWxpc3QgYnRuX2xpbmVcIiBkYXRhLWNvbW1hbmQ9XCJob3Jpem9udGFsUnVsZVwiIGRhdGEtdmFsdWU9XCJkYXNoZWRcIiB0aXRsZT1cIicgKyBsYW5nLnRvb2xiYXIuaHJfZGFzaGVkICsgJ1wiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxociBzdHlsZT1cImJvcmRlci13aWR0aDogMXB4IDAgMDsgYm9yZGVyLXN0eWxlOiBkYXNoZWQgbm9uZSBub25lOyBib3JkZXItY29sb3I6IGJsYWNrOyBib3JkZXItaW1hZ2U6IGluaXRpYWw7IGhlaWdodDogMXB4O1wiIC8+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPC9saT4nICtcclxuICAgICAgICAgICAgICAgICc8L3VsPicgK1xyXG4gICAgICAgICAgICAnPC9kaXY+JztcclxuXHJcbiAgICAgICAgcmV0dXJuIGxpc3REaXY7XHJcbiAgICB9LFxyXG5cclxuICAgIGFjdGl2ZTogZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICBpZiAoIWVsZW1lbnQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudXRpbC5oYXNDbGFzcyh0aGlzLmNvbnRleHQuaG9yaXpvbnRhbFJ1bGUuY3VycmVudEhSLCAnb24nKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyc09mZigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICgvSFIvaS50ZXN0KGVsZW1lbnQubm9kZU5hbWUpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5ob3Jpem9udGFsUnVsZS5jdXJyZW50SFIgPSBlbGVtZW50O1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMudXRpbC5oYXNDbGFzcyhlbGVtZW50LCAnb24nKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51dGlsLmFkZENsYXNzKGVsZW1lbnQsICdvbicpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyc09uKCdocicsIHRoaXMudXRpbC5yZW1vdmVDbGFzcy5iaW5kKHRoaXMudXRpbCwgZWxlbWVudCwgJ29uJykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICBhcHBlbmRIcjogZnVuY3Rpb24gKGNsYXNzTmFtZSkge1xyXG4gICAgICAgIGNvbnN0IG9IciA9IHRoaXMudXRpbC5jcmVhdGVFbGVtZW50KCdIUicpO1xyXG4gICAgICAgIG9Ici5jbGFzc05hbWUgPSBjbGFzc05hbWU7XHJcbiAgICAgICAgdGhpcy5mb2N1cygpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmluc2VydENvbXBvbmVudChvSHIsIGZhbHNlLCB0cnVlLCBmYWxzZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIGhvcml6b250YWxSdWxlUGljazogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICAgICAgbGV0IHRhcmdldCA9IGUudGFyZ2V0O1xyXG4gICAgICAgIGxldCB2YWx1ZSA9IG51bGw7XHJcbiAgICAgICAgXHJcbiAgICAgICAgd2hpbGUgKCF2YWx1ZSAmJiAhL1VML2kudGVzdCh0YXJnZXQudGFnTmFtZSkpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSB0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXZhbHVlJyk7XHJcbiAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCBvTm9kZSA9IHRoaXMucGx1Z2lucy5ob3Jpem9udGFsUnVsZS5hcHBlbmRIci5jYWxsKHRoaXMsICdfX3NlX18nICsgdmFsdWUpO1xyXG4gICAgICAgIGlmIChvTm9kZSkge1xyXG4gICAgICAgICAgICB0aGlzLnNldFJhbmdlKG9Ob2RlLCAwLCBvTm9kZSwgMCk7XHJcbiAgICAgICAgICAgIHRoaXMuc3VibWVudU9mZigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuIiwiLypcclxuICogd3lzaXd5ZyB3ZWIgZWRpdG9yXHJcbiAqXHJcbiAqIHN1bmVkaXRvci5qc1xyXG4gKiBDb3B5cmlnaHQgMjAxNyBKaUhvbmcgTGVlLlxyXG4gKiBNSVQgbGljZW5zZS5cclxuICovXHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIG5hbWU6ICdsaXN0JyxcclxuICAgIGRpc3BsYXk6ICdzdWJtZW51JyxcclxuICAgIGFkZDogZnVuY3Rpb24gKGNvcmUsIHRhcmdldEVsZW1lbnQpIHtcclxuICAgICAgICBjb25zdCBjb250ZXh0ID0gY29yZS5jb250ZXh0O1xyXG4gICAgICAgIGNvbnRleHQubGlzdCA9IHtcclxuICAgICAgICAgICAgdGFyZ2V0QnV0dG9uOiB0YXJnZXRFbGVtZW50LFxyXG4gICAgICAgICAgICBfbGlzdDogbnVsbCxcclxuICAgICAgICAgICAgY3VycmVudExpc3Q6ICcnLFxyXG4gICAgICAgICAgICBpY29uczoge1xyXG4gICAgICAgICAgICAgICAgYnVsbGV0czogY29yZS5pY29ucy5saXN0X2J1bGxldHMsXHJcbiAgICAgICAgICAgICAgICBudW1iZXI6IGNvcmUuaWNvbnMubGlzdF9udW1iZXJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8qKiBzZXQgc3VibWVudSAqL1xyXG4gICAgICAgIGxldCBsaXN0RGl2ID0gdGhpcy5zZXRTdWJtZW51KGNvcmUpO1xyXG4gICAgICAgIGxldCBsaXN0VWwgPSBsaXN0RGl2LnF1ZXJ5U2VsZWN0b3IoJ3VsJyk7XHJcblxyXG4gICAgICAgIC8qKiBhZGQgZXZlbnQgbGlzdGVuZXJzICovXHJcbiAgICAgICAgbGlzdFVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5waWNrdXAuYmluZChjb3JlKSk7XHJcbiAgICAgICAgY29udGV4dC5saXN0Ll9saXN0ID0gbGlzdFVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ2xpIGJ1dHRvbicpO1xyXG5cclxuICAgICAgICAvKiogYXBwZW5kIHRhcmdldCBidXR0b24gbWVudSAqL1xyXG4gICAgICAgIGNvcmUuaW5pdE1lbnVUYXJnZXQodGhpcy5uYW1lLCB0YXJnZXRFbGVtZW50LCBsaXN0RGl2KTtcclxuXHJcbiAgICAgICAgLyoqIGVtcHR5IG1lbW9yeSAqL1xyXG4gICAgICAgIGxpc3REaXYgPSBudWxsLCBsaXN0VWwgPSBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdWJtZW51OiBmdW5jdGlvbiAoY29yZSkge1xyXG4gICAgICAgIGNvbnN0IGxhbmcgPSBjb3JlLmxhbmc7XHJcbiAgICAgICAgY29uc3QgbGlzdERpdiA9IGNvcmUudXRpbC5jcmVhdGVFbGVtZW50KCdESVYnKTtcclxuXHJcbiAgICAgICAgbGlzdERpdi5jbGFzc05hbWUgPSAnc2Utc3VibWVudSBzZS1saXN0LWxheWVyJztcclxuICAgICAgICBsaXN0RGl2LmlubmVySFRNTCA9ICcnICtcclxuICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1saXN0LWlubmVyXCI+JyArXHJcbiAgICAgICAgICAgICAgICAnPHVsIGNsYXNzPVwic2UtbGlzdC1iYXNpY1wiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8bGk+PGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJzZS1idG4tbGlzdCBzZS10b29sdGlwXCIgZGF0YS1jb21tYW5kPVwiT0xcIiB0aXRsZT1cIicgKyBsYW5nLnRvb2xiYXIub3JkZXJMaXN0ICsgJ1wiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3JlLmljb25zLmxpc3RfbnVtYmVyICtcclxuICAgICAgICAgICAgICAgICAgICAnPC9idXR0b24+PC9saT4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPGxpPjxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic2UtYnRuLWxpc3Qgc2UtdG9vbHRpcFwiIGRhdGEtY29tbWFuZD1cIlVMXCIgdGl0bGU9XCInICsgbGFuZy50b29sYmFyLnVub3JkZXJMaXN0ICsgJ1wiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3JlLmljb25zLmxpc3RfYnVsbGV0cyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzwvYnV0dG9uPjwvbGk+JyArXHJcbiAgICAgICAgICAgICAgICAnPC91bD4nICtcclxuICAgICAgICAgICAgJzwvZGl2Pic7XHJcblxyXG4gICAgICAgIHJldHVybiBsaXN0RGl2O1xyXG4gICAgfSxcclxuXHJcbiAgICAgLyoqXHJcbiAgICAgKiBAT3ZlcnJpZGUgY29yZVxyXG4gICAgICovXHJcbiAgICBhY3RpdmU6IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICAgICAgY29uc3QgYnV0dG9uID0gdGhpcy5jb250ZXh0Lmxpc3QudGFyZ2V0QnV0dG9uO1xyXG4gICAgICAgIGNvbnN0IGljb24gPSBidXR0b24uZmlyc3RFbGVtZW50Q2hpbGQ7XHJcbiAgICAgICAgY29uc3QgdXRpbCA9IHRoaXMudXRpbDtcclxuXHJcbiAgICAgICAgaWYgKCFlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGJ1dHRvbi5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtZm9jdXMnKTtcclxuICAgICAgICAgICAgdXRpbC5jaGFuZ2VFbGVtZW50KGljb24sIHRoaXMuY29udGV4dC5saXN0Lmljb25zLm51bWJlcik7XHJcbiAgICAgICAgICAgIHV0aWwucmVtb3ZlQ2xhc3MoYnV0dG9uLCAnYWN0aXZlJyk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh1dGlsLmlzTGlzdChlbGVtZW50KSkge1xyXG4gICAgICAgICAgICBjb25zdCBub2RlTmFtZSA9IGVsZW1lbnQubm9kZU5hbWU7XHJcbiAgICAgICAgICAgIGJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ2RhdGEtZm9jdXMnLCBub2RlTmFtZSk7XHJcbiAgICAgICAgICAgIHV0aWwuYWRkQ2xhc3MoYnV0dG9uLCAnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgIGlmICgvVUwvaS50ZXN0KG5vZGVOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgdXRpbC5jaGFuZ2VFbGVtZW50KGljb24sIHRoaXMuY29udGV4dC5saXN0Lmljb25zLmJ1bGxldHMpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdXRpbC5jaGFuZ2VFbGVtZW50KGljb24sIHRoaXMuY29udGV4dC5saXN0Lmljb25zLm51bWJlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICAgLyoqXHJcbiAgICAgKiBAT3ZlcnJpZGUgc3VibWVudVxyXG4gICAgICovXHJcbiAgICBvbjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnN0IGxpc3RDb250ZXh0ID0gdGhpcy5jb250ZXh0Lmxpc3Q7XHJcbiAgICAgICAgY29uc3QgbGlzdCA9IGxpc3RDb250ZXh0Ll9saXN0O1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRMaXN0ID0gbGlzdENvbnRleHQudGFyZ2V0QnV0dG9uLmdldEF0dHJpYnV0ZSgnZGF0YS1mb2N1cycpIHx8ICcnO1xyXG5cclxuICAgICAgICBpZiAoY3VycmVudExpc3QgIT09IGxpc3RDb250ZXh0LmN1cnJlbnRMaXN0KSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBsaXN0Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudExpc3QgPT09IGxpc3RbaV0uZ2V0QXR0cmlidXRlKCdkYXRhLWNvbW1hbmQnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXRpbC5hZGRDbGFzcyhsaXN0W2ldLCAnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXRpbC5yZW1vdmVDbGFzcyhsaXN0W2ldLCAnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxpc3RDb250ZXh0LmN1cnJlbnRMaXN0ID0gY3VycmVudExpc3Q7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBlZGl0TGlzdDogZnVuY3Rpb24gKGNvbW1hbmQsIHNlbGVjdGVkQ2VsbHMsIGRldGFjaCkge1xyXG4gICAgICAgIGxldCByYW5nZSA9IHRoaXMuZ2V0UmFuZ2UoKTtcclxuICAgICAgICBsZXQgc2VsZWN0ZWRGb3JtYXRzID0gIXNlbGVjdGVkQ2VsbHMgPyB0aGlzLmdldFNlbGVjdGVkRWxlbWVudHNBbmRDb21wb25lbnRzKGZhbHNlKSA6IHNlbGVjdGVkQ2VsbHM7XHJcblxyXG4gICAgICAgIGlmIChzZWxlY3RlZEZvcm1hdHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZENlbGxzKSByZXR1cm47XHJcbiAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRSYW5nZV9hZGRMaW5lKHJhbmdlLCBudWxsKTtcclxuICAgICAgICAgICAgc2VsZWN0ZWRGb3JtYXRzID0gdGhpcy5nZXRTZWxlY3RlZEVsZW1lbnRzQW5kQ29tcG9uZW50cyhmYWxzZSk7XHJcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZEZvcm1hdHMubGVuZ3RoID09PSAwKSByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnN0IHV0aWwgPSB0aGlzLnV0aWw7XHJcbiAgICAgICAgdXRpbC5zb3J0QnlEZXB0aChzZWxlY3RlZEZvcm1hdHMsIHRydWUpO1xyXG5cclxuICAgICAgICAvLyBtZXJnZVxyXG4gICAgICAgIGxldCBmaXJzdFNlbCA9IHNlbGVjdGVkRm9ybWF0c1swXTtcclxuICAgICAgICBsZXQgbGFzdFNlbCA9IHNlbGVjdGVkRm9ybWF0c1tzZWxlY3RlZEZvcm1hdHMubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgbGV0IHRvcEVsID0gKHV0aWwuaXNMaXN0Q2VsbChmaXJzdFNlbCkgfHwgdXRpbC5pc0NvbXBvbmVudChmaXJzdFNlbCkpICYmICFmaXJzdFNlbC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nID8gZmlyc3RTZWwucGFyZW50Tm9kZS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nIDogZmlyc3RTZWwucHJldmlvdXNFbGVtZW50U2libGluZztcclxuICAgICAgICBsZXQgYm90dG9tRWwgPSAodXRpbC5pc0xpc3RDZWxsKGxhc3RTZWwpIHx8IHV0aWwuaXNDb21wb25lbnQobGFzdFNlbCkpICYmICFsYXN0U2VsLm5leHRFbGVtZW50U2libGluZyA/IGxhc3RTZWwucGFyZW50Tm9kZS5uZXh0RWxlbWVudFNpYmxpbmcgOiBsYXN0U2VsLm5leHRFbGVtZW50U2libGluZztcclxuXHJcbiAgICAgICAgY29uc3Qgb3JpZ2luUmFuZ2UgPSB7XHJcbiAgICAgICAgICAgIHNjOiByYW5nZS5zdGFydENvbnRhaW5lcixcclxuICAgICAgICAgICAgc286IChyYW5nZS5zdGFydENvbnRhaW5lciA9PT0gcmFuZ2UuZW5kQ29udGFpbmVyICYmIHV0aWwub25seVplcm9XaWR0aFNwYWNlKHJhbmdlLnN0YXJ0Q29udGFpbmVyKSAmJiByYW5nZS5zdGFydE9mZnNldCA9PT0gMCAmJiByYW5nZS5lbmRPZmZzZXQgPT09IDEpID8gcmFuZ2UuZW5kT2Zmc2V0IDogcmFuZ2Uuc3RhcnRPZmZzZXQsXHJcbiAgICAgICAgICAgIGVjOiByYW5nZS5lbmRDb250YWluZXIsXHJcbiAgICAgICAgICAgIGVvOiByYW5nZS5lbmRPZmZzZXRcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBsZXQgaXNSZW1vdmUgPSB0cnVlO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gc2VsZWN0ZWRGb3JtYXRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICghdXRpbC5pc0xpc3QodXRpbC5nZXRSYW5nZUZvcm1hdEVsZW1lbnQoc2VsZWN0ZWRGb3JtYXRzW2ldLCBmdW5jdGlvbiAoY3VycmVudCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmFuZ2VGb3JtYXRFbGVtZW50KGN1cnJlbnQpICYmIGN1cnJlbnQgIT09IHNlbGVjdGVkRm9ybWF0c1tpXTtcclxuICAgICAgICAgICAgfS5iaW5kKHV0aWwpKSkpIHtcclxuICAgICAgICAgICAgICAgIGlzUmVtb3ZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlzUmVtb3ZlICYmICghdG9wRWwgfHwgKGZpcnN0U2VsLnRhZ05hbWUgIT09IHRvcEVsLnRhZ05hbWUgfHwgY29tbWFuZCAhPT0gdG9wRWwudGFnTmFtZS50b1VwcGVyQ2FzZSgpKSkgJiYgKCFib3R0b21FbCB8fCAobGFzdFNlbC50YWdOYW1lICE9PSBib3R0b21FbC50YWdOYW1lIHx8IGNvbW1hbmQgIT09IGJvdHRvbUVsLnRhZ05hbWUudG9VcHBlckNhc2UoKSkpKSB7XHJcbiAgICAgICAgICAgIGlmIChkZXRhY2gpIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBzZWxlY3RlZEZvcm1hdHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gaSAtIDE7IGogPj0gMDsgai0tKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZEZvcm1hdHNbal0uY29udGFpbnMoc2VsZWN0ZWRGb3JtYXRzW2ldKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRGb3JtYXRzLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGktLTsgbGVuLS07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgY3VycmVudEZvcm1hdCA9IHV0aWwuZ2V0UmFuZ2VGb3JtYXRFbGVtZW50KGZpcnN0U2VsKTtcclxuICAgICAgICAgICAgY29uc3QgY2FuY2VsID0gY3VycmVudEZvcm1hdCAmJiBjdXJyZW50Rm9ybWF0LnRhZ05hbWUgPT09IGNvbW1hbmQ7XHJcbiAgICAgICAgICAgIGxldCByYW5nZUFyciwgdGVtcExpc3Q7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhc3NDb21wb25lbnQgPSBmdW5jdGlvbiAoY3VycmVudCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICF0aGlzLmlzQ29tcG9uZW50KGN1cnJlbnQpO1xyXG4gICAgICAgICAgICB9LmJpbmQodXRpbCk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiAoIWNhbmNlbCkgdGVtcExpc3QgPSB1dGlsLmNyZWF0ZUVsZW1lbnQoY29tbWFuZCk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gc2VsZWN0ZWRGb3JtYXRzLmxlbmd0aCwgciwgbzsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBvID0gdXRpbC5nZXRSYW5nZUZvcm1hdEVsZW1lbnQoc2VsZWN0ZWRGb3JtYXRzW2ldLCBwYXNzQ29tcG9uZW50KTtcclxuICAgICAgICAgICAgICAgIGlmICghbyB8fCAhdXRpbC5pc0xpc3QobykpIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICghcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHIgPSBvO1xyXG4gICAgICAgICAgICAgICAgICAgIHJhbmdlQXJyID0ge3I6IHIsIGY6IFt1dGlsLmdldFBhcmVudEVsZW1lbnQoc2VsZWN0ZWRGb3JtYXRzW2ldLCAnTEknKV19O1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAociAhPT0gbykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGV0YWNoICYmIHV0aWwuaXNMaXN0Q2VsbChvLnBhcmVudE5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnMubGlzdC5fZGV0YWNoTmVzdGVkLmNhbGwodGhpcywgcmFuZ2VBcnIuZik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldGFjaFJhbmdlRm9ybWF0RWxlbWVudChyYW5nZUFyci5mWzBdLnBhcmVudE5vZGUsIHJhbmdlQXJyLmYsIHRlbXBMaXN0LCBmYWxzZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG8gPSBzZWxlY3RlZEZvcm1hdHNbaV0ucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjYW5jZWwpIHRlbXBMaXN0ID0gdXRpbC5jcmVhdGVFbGVtZW50KGNvbW1hbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgciA9IG87XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlQXJyID0ge3I6IHIsIGY6IFt1dGlsLmdldFBhcmVudEVsZW1lbnQoc2VsZWN0ZWRGb3JtYXRzW2ldLCAnTEknKV19O1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlQXJyLmYucHVzaCh1dGlsLmdldFBhcmVudEVsZW1lbnQoc2VsZWN0ZWRGb3JtYXRzW2ldLCAnTEknKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBpZiAoaSA9PT0gbGVuIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkZXRhY2ggJiYgdXRpbC5pc0xpc3RDZWxsKG8ucGFyZW50Tm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmxpc3QuX2RldGFjaE5lc3RlZC5jYWxsKHRoaXMsIHJhbmdlQXJyLmYpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV0YWNoUmFuZ2VGb3JtYXRFbGVtZW50KHJhbmdlQXJyLmZbMF0ucGFyZW50Tm9kZSwgcmFuZ2VBcnIuZiwgdGVtcExpc3QsIGZhbHNlLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCB0b3BFbFBhcmVudCA9IHRvcEVsID8gdG9wRWwucGFyZW50Tm9kZSA6IHRvcEVsO1xyXG4gICAgICAgICAgICBjb25zdCBib3R0b21FbFBhcmVudCA9IGJvdHRvbUVsID8gYm90dG9tRWwucGFyZW50Tm9kZSA6IGJvdHRvbUVsO1xyXG4gICAgICAgICAgICB0b3BFbCA9IHRvcEVsUGFyZW50ICYmICF1dGlsLmlzV3lzaXd5Z0Rpdih0b3BFbFBhcmVudCkgJiYgdG9wRWxQYXJlbnQubm9kZU5hbWUgPT09IGNvbW1hbmQgPyB0b3BFbFBhcmVudCA6IHRvcEVsO1xyXG4gICAgICAgICAgICBib3R0b21FbCA9IGJvdHRvbUVsUGFyZW50ICYmICF1dGlsLmlzV3lzaXd5Z0Rpdihib3R0b21FbFBhcmVudCkgJiYgYm90dG9tRWxQYXJlbnQubm9kZU5hbWUgPT09IGNvbW1hbmQgPyBib3R0b21FbFBhcmVudCA6IGJvdHRvbUVsO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgbWVyZ2VUb3AgPSB0b3BFbCAmJiB0b3BFbC50YWdOYW1lID09PSBjb21tYW5kO1xyXG4gICAgICAgICAgICBjb25zdCBtZXJnZUJvdHRvbSA9IGJvdHRvbUVsICYmIGJvdHRvbUVsLnRhZ05hbWUgPT09IGNvbW1hbmQ7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBsZXQgbGlzdCA9IG1lcmdlVG9wID8gdG9wRWwgOiB1dGlsLmNyZWF0ZUVsZW1lbnQoY29tbWFuZCk7XHJcbiAgICAgICAgICAgIGxldCBmaXJzdExpc3QgPSBudWxsO1xyXG4gICAgICAgICAgICBsZXQgbGFzdExpc3QgPSBudWxsO1xyXG4gICAgICAgICAgICBsZXQgdG9wTnVtYmVyID0gbnVsbDtcclxuICAgICAgICAgICAgbGV0IGJvdHRvbU51bWJlciA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBwYXNzQ29tcG9uZW50ID0gZnVuY3Rpb24gKGN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAhdGhpcy5pc0NvbXBvbmVudChjdXJyZW50KSAmJiAhdGhpcy5pc0xpc3QoY3VycmVudCk7XHJcbiAgICAgICAgICAgIH0uYmluZCh1dGlsKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBzZWxlY3RlZEZvcm1hdHMubGVuZ3RoLCBuZXdDZWxsLCBmVGFnLCBpc0NlbGwsIG5leHQsIG9yaWdpblBhcmVudCwgbmV4dFBhcmVudCwgcGFyZW50VGFnLCBzaWJsaW5nVGFnLCByYW5nZVRhZzsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBmVGFnID0gc2VsZWN0ZWRGb3JtYXRzW2ldO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZUYWcuY2hpbGROb2Rlcy5sZW5ndGggPT09IDAgJiYgIXV0aWwuX2lzSWdub3JlTm9kZUNoYW5nZShmVGFnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlSXRlbShmVGFnKTtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIG5leHQgPSBzZWxlY3RlZEZvcm1hdHNbaSArIDFdO1xyXG4gICAgICAgICAgICAgICAgb3JpZ2luUGFyZW50ID0gZlRhZy5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgbmV4dFBhcmVudCA9IG5leHQgPyBuZXh0LnBhcmVudE5vZGUgOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgaXNDZWxsID0gdXRpbC5pc0xpc3RDZWxsKGZUYWcpO1xyXG4gICAgICAgICAgICAgICAgcmFuZ2VUYWcgPSB1dGlsLmlzUmFuZ2VGb3JtYXRFbGVtZW50KG9yaWdpblBhcmVudCkgPyBvcmlnaW5QYXJlbnQgOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgcGFyZW50VGFnID0gaXNDZWxsICYmICF1dGlsLmlzV3lzaXd5Z0RpdihvcmlnaW5QYXJlbnQpID8gb3JpZ2luUGFyZW50LnBhcmVudE5vZGUgOiBvcmlnaW5QYXJlbnQ7XHJcbiAgICAgICAgICAgICAgICBzaWJsaW5nVGFnID0gaXNDZWxsICYmICF1dGlsLmlzV3lzaXd5Z0RpdihvcmlnaW5QYXJlbnQpID8gKCFuZXh0IHx8IHV0aWwuaXNMaXN0Q2VsbChwYXJlbnRUYWcpKSA/IG9yaWdpblBhcmVudCA6IG9yaWdpblBhcmVudC5uZXh0U2libGluZyA6IGZUYWcubmV4dFNpYmxpbmc7XHJcblxyXG4gICAgICAgICAgICAgICAgbmV3Q2VsbCA9IHV0aWwuY3JlYXRlRWxlbWVudCgnTEknKTtcclxuICAgICAgICAgICAgICAgIHV0aWwuY29weUZvcm1hdEF0dHJpYnV0ZXMobmV3Q2VsbCwgZlRhZyk7XHJcbiAgICAgICAgICAgICAgICBpZiAodXRpbC5pc0NvbXBvbmVudChmVGFnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzSFIgPSAvXkhSJC9pLnRlc3QoZlRhZy5ub2RlTmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0hSKSBuZXdDZWxsLmlubmVySFRNTCA9ICc8YnI+JztcclxuICAgICAgICAgICAgICAgICAgICBuZXdDZWxsLmlubmVySFRNTCArPSBmVGFnLm91dGVySFRNTDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNIUikgbmV3Q2VsbC5pbm5lckhUTUwgKz0gJzxicj4nO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmQ2hpbGRyZW4gPSBmVGFnLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGZDaGlsZHJlblswXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdDZWxsLmFwcGVuZENoaWxkKGZDaGlsZHJlblswXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbGlzdC5hcHBlbmRDaGlsZChuZXdDZWxsKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIW5leHQpIGxhc3RMaXN0ID0gbGlzdDtcclxuICAgICAgICAgICAgICAgIGlmICghbmV4dCB8fCBwYXJlbnRUYWcgIT09IG5leHRQYXJlbnQgfHwgdXRpbC5pc1JhbmdlRm9ybWF0RWxlbWVudChzaWJsaW5nVGFnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZmlyc3RMaXN0KSBmaXJzdExpc3QgPSBsaXN0O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgoIW1lcmdlVG9wIHx8ICFuZXh0IHx8IHBhcmVudFRhZyAhPT0gbmV4dFBhcmVudCkgJiYgIShuZXh0ICYmIHV0aWwuaXNMaXN0KG5leHRQYXJlbnQpICYmIG5leHRQYXJlbnQgPT09IG9yaWdpblBhcmVudCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3QucGFyZW50Tm9kZSAhPT0gcGFyZW50VGFnKSBwYXJlbnRUYWcuaW5zZXJ0QmVmb3JlKGxpc3QsIHNpYmxpbmdUYWcpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUl0ZW0oZlRhZyk7XHJcbiAgICAgICAgICAgICAgICBpZiAobWVyZ2VUb3AgJiYgdG9wTnVtYmVyID09PSBudWxsKSB0b3BOdW1iZXIgPSBsaXN0LmNoaWxkcmVuLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgICAgICBpZiAobmV4dCAmJiAodXRpbC5nZXRSYW5nZUZvcm1hdEVsZW1lbnQobmV4dFBhcmVudCwgcGFzc0NvbXBvbmVudCkgIT09IHV0aWwuZ2V0UmFuZ2VGb3JtYXRFbGVtZW50KG9yaWdpblBhcmVudCwgcGFzc0NvbXBvbmVudCkgfHwgKHV0aWwuaXNMaXN0KG5leHRQYXJlbnQpICYmIHV0aWwuaXNMaXN0KG9yaWdpblBhcmVudCkgJiYgdXRpbC5nZXRFbGVtZW50RGVwdGgobmV4dFBhcmVudCkgIT09IHV0aWwuZ2V0RWxlbWVudERlcHRoKG9yaWdpblBhcmVudCkpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxpc3QgPSB1dGlsLmNyZWF0ZUVsZW1lbnQoY29tbWFuZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHJhbmdlVGFnICYmIHJhbmdlVGFnLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkgdXRpbC5yZW1vdmVJdGVtKHJhbmdlVGFnKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRvcE51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgZmlyc3RMaXN0ID0gZmlyc3RMaXN0LmNoaWxkcmVuW3RvcE51bWJlcl07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChtZXJnZUJvdHRvbSkge1xyXG4gICAgICAgICAgICAgICAgYm90dG9tTnVtYmVyID0gbGlzdC5jaGlsZHJlbi5sZW5ndGggLSAxO1xyXG4gICAgICAgICAgICAgICAgbGlzdC5pbm5lckhUTUwgKz0gYm90dG9tRWwuaW5uZXJIVE1MO1xyXG4gICAgICAgICAgICAgICAgbGFzdExpc3QgPSBsaXN0LmNoaWxkcmVuW2JvdHRvbU51bWJlcl07XHJcbiAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUl0ZW0oYm90dG9tRWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuZWZmZWN0Tm9kZSA9IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIG9yaWdpblJhbmdlO1xyXG4gICAgfSxcclxuXHJcbiAgICBfZGV0YWNoTmVzdGVkOiBmdW5jdGlvbiAoY2VsbHMpIHtcclxuICAgICAgICBjb25zdCBmaXJzdCA9IGNlbGxzWzBdO1xyXG4gICAgICAgIGNvbnN0IGxhc3QgPSBjZWxsc1tjZWxscy5sZW5ndGggLSAxXTtcclxuICAgICAgICBjb25zdCBuZXh0ID0gbGFzdC5uZXh0RWxlbWVudFNpYmxpbmc7XHJcbiAgICAgICAgY29uc3Qgb3JpZ2luTGlzdCA9IGZpcnN0LnBhcmVudE5vZGU7XHJcbiAgICAgICAgY29uc3Qgc2libGluZyA9IG9yaWdpbkxpc3QucGFyZW50Tm9kZS5uZXh0RWxlbWVudFNpYmxpbmc7XHJcbiAgICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IG9yaWdpbkxpc3QucGFyZW50Tm9kZS5wYXJlbnROb2RlO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBjID0gMCwgY0xlbiA9IGNlbGxzLmxlbmd0aDsgYyA8IGNMZW47IGMrKykge1xyXG4gICAgICAgICAgICBwYXJlbnROb2RlLmluc2VydEJlZm9yZShjZWxsc1tjXSwgc2libGluZyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAobmV4dCAmJiBvcmlnaW5MaXN0LmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgbmV3TGlzdCA9IG9yaWdpbkxpc3QuY2xvbmVOb2RlKGZhbHNlKTtcclxuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBvcmlnaW5MaXN0LmNoaWxkTm9kZXM7XHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy51dGlsLmdldFBvc2l0aW9uSW5kZXgobmV4dCk7XHJcbiAgICAgICAgICAgIHdoaWxlIChjaGlsZHJlbltpbmRleF0pIHtcclxuICAgICAgICAgICAgICAgIG5ld0xpc3QuYXBwZW5kQ2hpbGQoY2hpbGRyZW5baW5kZXhdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsYXN0LmFwcGVuZENoaWxkKG5ld0xpc3QpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG9yaWdpbkxpc3QuY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB0aGlzLnV0aWwucmVtb3ZlSXRlbShvcmlnaW5MaXN0KTtcclxuICAgICAgICB0aGlzLnV0aWwubWVyZ2VTYW1lVGFncyhwYXJlbnROb2RlKTtcclxuXHJcbiAgICAgICAgY29uc3QgZWRnZSA9IHRoaXMudXRpbC5nZXRFZGdlQ2hpbGROb2RlcyhmaXJzdCwgbGFzdCk7XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGNjOiBmaXJzdC5wYXJlbnROb2RlLFxyXG4gICAgICAgICAgICBzYzogZWRnZS5zYyxcclxuICAgICAgICAgICAgZWM6IGVkZ2UuZWNcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBlZGl0SW5zaWRlTGlzdDogZnVuY3Rpb24gKHJlbW92ZSwgc2VsZWN0ZWRDZWxscykge1xyXG4gICAgICAgIHNlbGVjdGVkQ2VsbHMgPSAhc2VsZWN0ZWRDZWxscyA/IHRoaXMuZ2V0U2VsZWN0ZWRFbGVtZW50cygpLmZpbHRlcihmdW5jdGlvbiAoZWwpIHsgcmV0dXJuIHRoaXMuaXNMaXN0Q2VsbChlbCk7IH0uYmluZCh0aGlzLnV0aWwpKSA6IHNlbGVjdGVkQ2VsbHM7XHJcbiAgICAgICAgY29uc3QgY2VsbHNMZW4gPSBzZWxlY3RlZENlbGxzLmxlbmd0aDtcclxuICAgICAgICBpZiAoY2VsbHNMZW4gPT09IDAgfHwgKCFyZW1vdmUgJiYgKCF0aGlzLnV0aWwuaXNMaXN0Q2VsbChzZWxlY3RlZENlbGxzWzBdLnByZXZpb3VzRWxlbWVudFNpYmxpbmcpICYmICF0aGlzLnV0aWwuaXNMaXN0Q2VsbChzZWxlY3RlZENlbGxzW2NlbGxzTGVuIC0gMV0ubmV4dEVsZW1lbnRTaWJsaW5nKSkpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBzYzogc2VsZWN0ZWRDZWxsc1swXSxcclxuICAgICAgICAgICAgICAgIHNvOiAwLFxyXG4gICAgICAgICAgICAgICAgZWM6IHNlbGVjdGVkQ2VsbHNbY2VsbHNMZW4gLSAxXSxcclxuICAgICAgICAgICAgICAgIGVvOiAxXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgb3JpZ2luTGlzdCA9IHNlbGVjdGVkQ2VsbHNbMF0ucGFyZW50Tm9kZTtcclxuICAgICAgICBsZXQgbGFzdENlbGwgPSBzZWxlY3RlZENlbGxzW2NlbGxzTGVuIC0gMV07XHJcbiAgICAgICAgbGV0IHJhbmdlID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKHJlbW92ZSkge1xyXG4gICAgICAgICAgICBpZiAob3JpZ2luTGlzdCAhPT0gbGFzdENlbGwucGFyZW50Tm9kZSAmJiB0aGlzLnV0aWwuaXNMaXN0KGxhc3RDZWxsLnBhcmVudE5vZGUucGFyZW50Tm9kZSkgJiYgbGFzdENlbGwubmV4dEVsZW1lbnRTaWJsaW5nKSB7XHJcbiAgICAgICAgICAgICAgICBsYXN0Q2VsbCA9IGxhc3RDZWxsLm5leHRFbGVtZW50U2libGluZztcclxuICAgICAgICAgICAgICAgIHdoaWxlIChsYXN0Q2VsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkQ2VsbHMucHVzaChsYXN0Q2VsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGFzdENlbGwgPSBsYXN0Q2VsbC5uZXh0RWxlbWVudFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmFuZ2UgPSB0aGlzLnBsdWdpbnMubGlzdC5lZGl0TGlzdC5jYWxsKHRoaXMsIG9yaWdpbkxpc3Qubm9kZU5hbWUudG9VcHBlckNhc2UoKSwgc2VsZWN0ZWRDZWxscywgdHJ1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IGlubmVyTGlzdCA9IHRoaXMudXRpbC5jcmVhdGVFbGVtZW50KG9yaWdpbkxpc3Qubm9kZU5hbWUpO1xyXG4gICAgICAgICAgICBsZXQgcHJldiA9IHNlbGVjdGVkQ2VsbHNbMF0ucHJldmlvdXNFbGVtZW50U2libGluZztcclxuICAgICAgICAgICAgbGV0IG5leHQgPSBsYXN0Q2VsbC5uZXh0RWxlbWVudFNpYmxpbmc7XHJcbiAgICAgICAgICAgIGNvbnN0IG5vZGVQYXRoID0geyBzOiBudWxsLCBlOiBudWxsLCBzbDogb3JpZ2luTGlzdCwgZWw6IG9yaWdpbkxpc3QgfTtcclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBjZWxsc0xlbiwgYzsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBjID0gc2VsZWN0ZWRDZWxsc1tpXTtcclxuICAgICAgICAgICAgICAgIGlmIChjLnBhcmVudE5vZGUgIT09IG9yaWdpbkxpc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnMubGlzdC5faW5zaWVkTGlzdC5jYWxsKHRoaXMsIG9yaWdpbkxpc3QsIGlubmVyTGlzdCwgcHJldiwgbmV4dCwgbm9kZVBhdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbkxpc3QgPSBjLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5uZXJMaXN0ID0gdGhpcy51dGlsLmNyZWF0ZUVsZW1lbnQob3JpZ2luTGlzdC5ub2RlTmFtZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHByZXYgPSBjLnByZXZpb3VzRWxlbWVudFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICBuZXh0ID0gYy5uZXh0RWxlbWVudFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICBpbm5lckxpc3QuYXBwZW5kQ2hpbGQoYyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5saXN0Ll9pbnNpZWRMaXN0LmNhbGwodGhpcywgb3JpZ2luTGlzdCwgaW5uZXJMaXN0LCBwcmV2LCBuZXh0LCBub2RlUGF0aCk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBzYyA9IHRoaXMudXRpbC5nZXROb2RlRnJvbVBhdGgobm9kZVBhdGgucywgbm9kZVBhdGguc2wpO1xyXG4gICAgICAgICAgICBjb25zdCBlYyA9IHRoaXMudXRpbC5nZXROb2RlRnJvbVBhdGgobm9kZVBhdGguZSwgbm9kZVBhdGguZWwpO1xyXG4gICAgICAgICAgICByYW5nZSA9IHtcclxuICAgICAgICAgICAgICAgIHNjOiBzYyxcclxuICAgICAgICAgICAgICAgIHNvOiAwLFxyXG4gICAgICAgICAgICAgICAgZWM6IGVjLFxyXG4gICAgICAgICAgICAgICAgZW86IGVjLnRleHRDb250ZW50Lmxlbmd0aFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJhbmdlO1xyXG4gICAgfSxcclxuXHJcbiAgICBfaW5zaWVkTGlzdDogZnVuY3Rpb24gKG9yaWdpbkxpc3QsIGlubmVyTGlzdCwgcHJldiwgbmV4dCwgbm9kZVBhdGgpIHtcclxuICAgICAgICBsZXQgaW5zZXJ0UHJldiA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAocHJldiAmJiBpbm5lckxpc3QudGFnTmFtZSA9PT0gcHJldi50YWdOYW1lKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gaW5uZXJMaXN0LmNoaWxkcmVuO1xyXG4gICAgICAgICAgICB3aGlsZSAoY2hpbGRyZW5bMF0pIHtcclxuICAgICAgICAgICAgICAgIHByZXYuYXBwZW5kQ2hpbGQoY2hpbGRyZW5bMF0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpbm5lckxpc3QgPSBwcmV2O1xyXG4gICAgICAgICAgICBpbnNlcnRQcmV2ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChuZXh0ICYmIGlubmVyTGlzdC50YWdOYW1lID09PSBuZXh0LnRhZ05hbWUpIHtcclxuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBuZXh0LmNoaWxkcmVuO1xyXG4gICAgICAgICAgICB3aGlsZSAoY2hpbGRyZW5bMF0pIHtcclxuICAgICAgICAgICAgICAgIGlubmVyTGlzdC5hcHBlbmRDaGlsZChjaGlsZHJlblswXSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHRlbXAgPSBuZXh0Lm5leHRFbGVtZW50U2libGluZztcclxuICAgICAgICAgICAgbmV4dC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5leHQpO1xyXG4gICAgICAgICAgICBuZXh0ID0gdGVtcDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghaW5zZXJ0UHJldikge1xyXG4gICAgICAgICAgICBpZiAodGhpcy51dGlsLmlzTGlzdENlbGwocHJldikpIHtcclxuICAgICAgICAgICAgICAgIG9yaWdpbkxpc3QgPSBwcmV2O1xyXG4gICAgICAgICAgICAgICAgbmV4dCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIG9yaWdpbkxpc3QuaW5zZXJ0QmVmb3JlKGlubmVyTGlzdCwgbmV4dCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIW5vZGVQYXRoLnMpIHtcclxuICAgICAgICAgICAgICAgIG5vZGVQYXRoLnMgPSB0aGlzLnV0aWwuZ2V0Tm9kZVBhdGgoaW5uZXJMaXN0LmZpcnN0RWxlbWVudENoaWxkLmZpcnN0Q2hpbGQsIG9yaWdpbkxpc3QsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgbm9kZVBhdGguc2wgPSBvcmlnaW5MaXN0O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBzbFBhdGggPSBvcmlnaW5MaXN0LmNvbnRhaW5zKG5vZGVQYXRoLnNsKSA/IHRoaXMudXRpbC5nZXROb2RlUGF0aChub2RlUGF0aC5zbCwgb3JpZ2luTGlzdCkgOiBudWxsO1xyXG4gICAgICAgICAgICBub2RlUGF0aC5lID0gdGhpcy51dGlsLmdldE5vZGVQYXRoKGlubmVyTGlzdC5sYXN0RWxlbWVudENoaWxkLmZpcnN0Q2hpbGQsIG9yaWdpbkxpc3QsIG51bGwpO1xyXG4gICAgICAgICAgICBub2RlUGF0aC5lbCA9IG9yaWdpbkxpc3Q7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnV0aWwubWVyZ2VTYW1lVGFncyhvcmlnaW5MaXN0LCBbbm9kZVBhdGgucywgbm9kZVBhdGguZSwgc2xQYXRoXSwgZmFsc2UpO1xyXG4gICAgICAgICAgICB0aGlzLnV0aWwubWVyZ2VOZXN0ZWRUYWdzKG9yaWdpbkxpc3QpO1xyXG4gICAgICAgICAgICBpZiAoc2xQYXRoKSBub2RlUGF0aC5zbCA9IHRoaXMudXRpbC5nZXROb2RlRnJvbVBhdGgoc2xQYXRoLCBvcmlnaW5MaXN0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBpbm5lckxpc3Q7XHJcbiAgICB9LFxyXG5cclxuICAgIHBpY2t1cDogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICAgICAgbGV0IHRhcmdldCA9IGUudGFyZ2V0O1xyXG4gICAgICAgIGxldCBjb21tYW5kID0gJyc7XHJcblxyXG4gICAgICAgIHdoaWxlICghY29tbWFuZCAmJiAhL15VTCQvaS50ZXN0KHRhcmdldC50YWdOYW1lKSkge1xyXG4gICAgICAgICAgICBjb21tYW5kID0gdGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1jb21tYW5kJyk7XHJcbiAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFjb21tYW5kKSByZXR1cm47XHJcblxyXG4gICAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5wbHVnaW5zLmxpc3QuZWRpdExpc3QuY2FsbCh0aGlzLCBjb21tYW5kLCBudWxsLCBmYWxzZSk7XHJcbiAgICAgICAgaWYgKHJhbmdlKSB0aGlzLnNldFJhbmdlKHJhbmdlLnNjLCByYW5nZS5zbywgcmFuZ2UuZWMsIHJhbmdlLmVvKTtcclxuXHJcbiAgICAgICAgdGhpcy5zdWJtZW51T2ZmKCk7XHJcblxyXG4gICAgICAgIC8vIGhpc3Rvcnkgc3RhY2tcclxuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaChmYWxzZSk7XHJcbiAgICB9XHJcbn07XHJcbiIsIi8qXHJcbiAqIHd5c2l3eWcgd2ViIGVkaXRvclxyXG4gKlxyXG4gKiBzdW5lZGl0b3IuanNcclxuICogQ29weXJpZ2h0IDIwMTcgSmlIb25nIExlZS5cclxuICogTUlUIGxpY2Vuc2UuXHJcbiAqL1xyXG4ndXNlIHN0cmljdCc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgICBuYW1lOiAndGFibGUnLFxyXG4gICAgZGlzcGxheTogJ3N1Ym1lbnUnLFxyXG4gICAgYWRkOiBmdW5jdGlvbiAoY29yZSwgdGFyZ2V0RWxlbWVudCkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBjb3JlLmNvbnRleHQ7XHJcbiAgICAgICAgbGV0IGNvbnRleHRUYWJsZSA9IGNvbnRleHQudGFibGUgPSB7XHJcbiAgICAgICAgICAgIF9lbGVtZW50OiBudWxsLFxyXG4gICAgICAgICAgICBfdGRFbGVtZW50OiBudWxsLFxyXG4gICAgICAgICAgICBfdHJFbGVtZW50OiBudWxsLFxyXG4gICAgICAgICAgICBfdHJFbGVtZW50czogbnVsbCxcclxuICAgICAgICAgICAgX3RhYmxlWFk6IFtdLFxyXG4gICAgICAgICAgICBfbWF4V2lkdGg6IHRydWUsXHJcbiAgICAgICAgICAgIF9maXhlZENvbHVtbjogZmFsc2UsXHJcbiAgICAgICAgICAgIF9ydGw6IGNvcmUub3B0aW9ucy5ydGwsXHJcbiAgICAgICAgICAgIGNlbGxDb250cm9sbGVyVG9wOiBjb3JlLm9wdGlvbnMudGFibGVDZWxsQ29udHJvbGxlclBvc2l0aW9uID09PSAndG9wJyxcclxuICAgICAgICAgICAgcmVzaXplVGV4dDogbnVsbCxcclxuICAgICAgICAgICAgaGVhZGVyQnV0dG9uOiBudWxsLFxyXG4gICAgICAgICAgICBtZXJnZUJ1dHRvbjogbnVsbCxcclxuICAgICAgICAgICAgc3BsaXRCdXR0b246IG51bGwsXHJcbiAgICAgICAgICAgIHNwbGl0TWVudTogbnVsbCxcclxuICAgICAgICAgICAgbWF4VGV4dDogY29yZS5sYW5nLmNvbnRyb2xsZXIubWF4U2l6ZSxcclxuICAgICAgICAgICAgbWluVGV4dDogY29yZS5sYW5nLmNvbnRyb2xsZXIubWluU2l6ZSxcclxuICAgICAgICAgICAgX3BoeXNpY2FsX2NlbGxDbnQ6IDAsXHJcbiAgICAgICAgICAgIF9sb2dpY2FsX2NlbGxDbnQ6IDAsXHJcbiAgICAgICAgICAgIF9yb3dDbnQ6IDAsXHJcbiAgICAgICAgICAgIF9yb3dJbmRleDogMCxcclxuICAgICAgICAgICAgX3BoeXNpY2FsX2NlbGxJbmRleDogMCxcclxuICAgICAgICAgICAgX2xvZ2ljYWxfY2VsbEluZGV4OiAwLFxyXG4gICAgICAgICAgICBfY3VycmVudF9jb2xTcGFuOiAwLFxyXG4gICAgICAgICAgICBfY3VycmVudF9yb3dTcGFuOiAwLFxyXG4gICAgICAgICAgICBpY29uczoge1xyXG4gICAgICAgICAgICAgICAgZXhwYW5zaW9uOiBjb3JlLmljb25zLmV4cGFuc2lvbixcclxuICAgICAgICAgICAgICAgIHJlZHVjdGlvbjogY29yZS5pY29ucy5yZWR1Y3Rpb25cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8qKiBzZXQgc3VibWVudSAqL1xyXG4gICAgICAgIGxldCBsaXN0RGl2ID0gdGhpcy5zZXRTdWJtZW51KGNvcmUpO1xyXG4gICAgICAgIGxldCB0YWJsZVBpY2tlciA9IGxpc3REaXYucXVlcnlTZWxlY3RvcignLnNlLWNvbnRyb2xsZXItdGFibGUtcGlja2VyJyk7XHJcblxyXG4gICAgICAgIGNvbnRleHRUYWJsZS50YWJsZUhpZ2hsaWdodCA9IGxpc3REaXYucXVlcnlTZWxlY3RvcignLnNlLXRhYmxlLXNpemUtaGlnaGxpZ2h0ZWQnKTtcclxuICAgICAgICBjb250ZXh0VGFibGUudGFibGVVbkhpZ2hsaWdodCA9IGxpc3REaXYucXVlcnlTZWxlY3RvcignLnNlLXRhYmxlLXNpemUtdW5oaWdobGlnaHRlZCcpO1xyXG4gICAgICAgIGNvbnRleHRUYWJsZS50YWJsZURpc3BsYXkgPSBsaXN0RGl2LnF1ZXJ5U2VsZWN0b3IoJy5zZS10YWJsZS1zaXplLWRpc3BsYXknKTtcclxuICAgICAgICBpZiAoY29yZS5vcHRpb25zLnJ0bCkgY29udGV4dFRhYmxlLnRhYmxlSGlnaGxpZ2h0LnN0eWxlLmxlZnQgPSAoMTAgKiAxOCAtIDEzKSArICdweCc7XHJcblxyXG4gICAgICAgIC8qKiBzZXQgdGFibGUgY29udHJvbGxlciAqL1xyXG4gICAgICAgIGxldCB0YWJsZUNvbnRyb2xsZXIgPSB0aGlzLnNldENvbnRyb2xsZXJfdGFibGUoY29yZSk7XHJcbiAgICAgICAgY29udGV4dFRhYmxlLnRhYmxlQ29udHJvbGxlciA9IHRhYmxlQ29udHJvbGxlcjtcclxuICAgICAgICBjb250ZXh0VGFibGUucmVzaXplQnV0dG9uID0gdGFibGVDb250cm9sbGVyLnF1ZXJ5U2VsZWN0b3IoJy5fc2VfdGFibGVfcmVzaXplJyk7XHJcbiAgICAgICAgY29udGV4dFRhYmxlLnJlc2l6ZVRleHQgPSB0YWJsZUNvbnRyb2xsZXIucXVlcnlTZWxlY3RvcignLl9zZV90YWJsZV9yZXNpemUgPiBzcGFuID4gc3BhbicpO1xyXG4gICAgICAgIGNvbnRleHRUYWJsZS5jb2x1bW5GaXhlZEJ1dHRvbiA9IHRhYmxlQ29udHJvbGxlci5xdWVyeVNlbGVjdG9yKCcuX3NlX3RhYmxlX2ZpeGVkX2NvbHVtbicpO1xyXG4gICAgICAgIGNvbnRleHRUYWJsZS5oZWFkZXJCdXR0b24gPSB0YWJsZUNvbnRyb2xsZXIucXVlcnlTZWxlY3RvcignLl9zZV90YWJsZV9oZWFkZXInKTtcclxuXHJcbiAgICAgICAgLyoqIHNldCByZXNpemluZyAqL1xyXG4gICAgICAgIGxldCByZXNpemVEaXYgPSB0aGlzLnNldENvbnRyb2xsZXJfdGFibGVFZGl0b3IoY29yZSwgY29udGV4dFRhYmxlLmNlbGxDb250cm9sbGVyVG9wKTtcclxuICAgICAgICBjb250ZXh0VGFibGUucmVzaXplRGl2ID0gcmVzaXplRGl2O1xyXG4gICAgICAgIGNvbnRleHRUYWJsZS5zcGxpdE1lbnUgPSByZXNpemVEaXYucXVlcnlTZWxlY3RvcignLnNlLWJ0bi1ncm91cC1zdWInKTtcclxuICAgICAgICBjb250ZXh0VGFibGUubWVyZ2VCdXR0b24gPSByZXNpemVEaXYucXVlcnlTZWxlY3RvcignLl9zZV90YWJsZV9tZXJnZV9idXR0b24nKTtcclxuICAgICAgICBjb250ZXh0VGFibGUuc3BsaXRCdXR0b24gPSByZXNpemVEaXYucXVlcnlTZWxlY3RvcignLl9zZV90YWJsZV9zcGxpdF9idXR0b24nKTtcclxuICAgICAgICBjb250ZXh0VGFibGUuaW5zZXJ0Um93QWJvdmVCdXR0b24gPSByZXNpemVEaXYucXVlcnlTZWxlY3RvcignLl9zZV90YWJsZV9pbnNlcnRfcm93X2EnKTtcclxuICAgICAgICBjb250ZXh0VGFibGUuaW5zZXJ0Um93QmVsb3dCdXR0b24gPSByZXNpemVEaXYucXVlcnlTZWxlY3RvcignLl9zZV90YWJsZV9pbnNlcnRfcm93X2InKTtcclxuICAgICAgICBcclxuICAgICAgICAvKiogYWRkIGV2ZW50IGxpc3RlbmVycyAqL1xyXG4gICAgICAgIHRhYmxlUGlja2VyLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMub25Nb3VzZU1vdmVfdGFibGVQaWNrZXIuYmluZChjb3JlLCBjb250ZXh0VGFibGUpKTtcclxuICAgICAgICB0YWJsZVBpY2tlci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuYXBwZW5kVGFibGUuYmluZChjb3JlKSk7XHJcbiAgICAgICAgcmVzaXplRGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbkNsaWNrX3RhYmxlQ29udHJvbGxlci5iaW5kKGNvcmUpKTtcclxuICAgICAgICB0YWJsZUNvbnRyb2xsZXIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLm9uQ2xpY2tfdGFibGVDb250cm9sbGVyLmJpbmQoY29yZSkpO1xyXG5cclxuICAgICAgICAvKiogYXBwZW5kIHRhcmdldCBidXR0b24gbWVudSAqL1xyXG4gICAgICAgIGNvcmUuaW5pdE1lbnVUYXJnZXQodGhpcy5uYW1lLCB0YXJnZXRFbGVtZW50LCBsaXN0RGl2KTtcclxuXHJcbiAgICAgICAgLyoqIGFwcGVuZCBjb250cm9sbGVyICovXHJcbiAgICAgICAgY29udGV4dC5lbGVtZW50LnJlbGF0aXZlLmFwcGVuZENoaWxkKHJlc2l6ZURpdik7XHJcbiAgICAgICAgY29udGV4dC5lbGVtZW50LnJlbGF0aXZlLmFwcGVuZENoaWxkKHRhYmxlQ29udHJvbGxlcik7XHJcblxyXG4gICAgICAgIC8qKiBlbXB0eSBtZW1vcnkgKi9cclxuICAgICAgICBsaXN0RGl2ID0gbnVsbCwgdGFibGVQaWNrZXIgPSBudWxsLCByZXNpemVEaXYgPSBudWxsLCB0YWJsZUNvbnRyb2xsZXIgPSBudWxsLCBjb250ZXh0VGFibGUgPSBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdWJtZW51OiBmdW5jdGlvbiAoY29yZSkge1xyXG4gICAgICAgIGNvbnN0IGxpc3REaXYgPSBjb3JlLnV0aWwuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcbiAgICAgICAgbGlzdERpdi5jbGFzc05hbWUgPSAnc2Utc3VibWVudSBzZS1zZWxlY3Rvci10YWJsZSc7XHJcbiAgICAgICAgbGlzdERpdi5pbm5lckhUTUwgPSAnJyArXHJcbiAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtdGFibGUtc2l6ZVwiPicgK1xyXG4gICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS10YWJsZS1zaXplLXBpY2tlciBzZS1jb250cm9sbGVyLXRhYmxlLXBpY2tlclwiPjwvZGl2PicgK1xyXG4gICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS10YWJsZS1zaXplLWhpZ2hsaWdodGVkXCI+PC9kaXY+JyArXHJcbiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLXRhYmxlLXNpemUtdW5oaWdobGlnaHRlZFwiPjwvZGl2PicgK1xyXG4gICAgICAgICAgICAnPC9kaXY+JyArXHJcbiAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtdGFibGUtc2l6ZS1kaXNwbGF5XCI+MSB4IDE8L2Rpdj4nO1xyXG5cclxuICAgICAgICByZXR1cm4gbGlzdERpdjtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0Q29udHJvbGxlcl90YWJsZTogZnVuY3Rpb24gKGNvcmUpIHtcclxuICAgICAgICBjb25zdCBsYW5nID0gY29yZS5sYW5nO1xyXG4gICAgICAgIGNvbnN0IGljb25zID0gY29yZS5pY29ucztcclxuICAgICAgICBjb25zdCB0YWJsZVJlc2l6ZSA9IGNvcmUudXRpbC5jcmVhdGVFbGVtZW50KCdESVYnKTtcclxuXHJcbiAgICAgICAgdGFibGVSZXNpemUuY2xhc3NOYW1lID0gJ3NlLWNvbnRyb2xsZXIgc2UtY29udHJvbGxlci10YWJsZSc7XHJcbiAgICAgICAgdGFibGVSZXNpemUuaW5uZXJIVE1MID0gJycgK1xyXG4gICAgICAgICAgICAnPGRpdj4nICtcclxuICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtYnRuLWdyb3VwXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtY29tbWFuZD1cInJlc2l6ZVwiIGNsYXNzPVwic2UtYnRuIHNlLXRvb2x0aXAgX3NlX3RhYmxlX3Jlc2l6ZVwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29ucy5leHBhbnNpb24gK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLWlubmVyXCI+PHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLXRleHRcIj4nICsgbGFuZy5jb250cm9sbGVyLm1heFNpemUgKyAnPC9zcGFuPjwvc3Bhbj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtY29tbWFuZD1cImxheW91dFwiIGNsYXNzPVwic2UtYnRuIHNlLXRvb2x0aXAgX3NlX3RhYmxlX2ZpeGVkX2NvbHVtblwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29ucy5maXhlZF9jb2x1bW5fd2lkdGggK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLWlubmVyXCI+PHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLXRleHRcIj4nICsgbGFuZy5jb250cm9sbGVyLmZpeGVkQ29sdW1uV2lkdGggKyAnPC9zcGFuPjwvc3Bhbj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtY29tbWFuZD1cImhlYWRlclwiIGNsYXNzPVwic2UtYnRuIHNlLXRvb2x0aXAgX3NlX3RhYmxlX2hlYWRlclwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29ucy50YWJsZV9oZWFkZXIgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLWlubmVyXCI+PHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLXRleHRcIj4nICsgbGFuZy5jb250cm9sbGVyLnRhYmxlSGVhZGVyICsgJzwvc3Bhbj48L3NwYW4+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzwvYnV0dG9uPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWNvbW1hbmQ9XCJyZW1vdmVcIiBjbGFzcz1cInNlLWJ0biBzZS10b29sdGlwXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb25zLmRlbGV0ZSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtaW5uZXJcIj48c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtdGV4dFwiPicgKyBsYW5nLmNvbnRyb2xsZXIucmVtb3ZlICsgJzwvc3Bhbj48L3NwYW4+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzwvYnV0dG9uPicgK1xyXG4gICAgICAgICAgICAgICAgJzwvZGl2PicgK1xyXG4gICAgICAgICAgICAnPC9kaXY+JztcclxuXHJcbiAgICAgICAgcmV0dXJuIHRhYmxlUmVzaXplO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXRDb250cm9sbGVyX3RhYmxlRWRpdG9yOiBmdW5jdGlvbiAoY29yZSwgY2VsbENvbnRyb2xsZXJUb3ApIHtcclxuICAgICAgICBjb25zdCBsYW5nID0gY29yZS5sYW5nO1xyXG4gICAgICAgIGNvbnN0IGljb25zID0gY29yZS5pY29ucztcclxuICAgICAgICBjb25zdCB0YWJsZVJlc2l6ZSA9IGNvcmUudXRpbC5jcmVhdGVFbGVtZW50KCdESVYnKTtcclxuXHJcbiAgICAgICAgdGFibGVSZXNpemUuY2xhc3NOYW1lID0gJ3NlLWNvbnRyb2xsZXIgc2UtY29udHJvbGxlci10YWJsZS1jZWxsJztcclxuICAgICAgICB0YWJsZVJlc2l6ZS5pbm5lckhUTUwgPSAoY2VsbENvbnRyb2xsZXJUb3AgPyAnJyA6ICc8ZGl2IGNsYXNzPVwic2UtYXJyb3cgc2UtYXJyb3ctdXBcIj48L2Rpdj4nKSArXHJcbiAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtYnRuLWdyb3VwXCI+JyArXHJcbiAgICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1jb21tYW5kPVwiaW5zZXJ0XCIgZGF0YS12YWx1ZT1cInJvd1wiIGRhdGEtb3B0aW9uPVwidXBcIiBjbGFzcz1cInNlLWJ0biBzZS10b29sdGlwIF9zZV90YWJsZV9pbnNlcnRfcm93X2FcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICBpY29ucy5pbnNlcnRfcm93X2Fib3ZlICtcclxuICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLWlubmVyXCI+PHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLXRleHRcIj4nICsgbGFuZy5jb250cm9sbGVyLmluc2VydFJvd0Fib3ZlICsgJzwvc3Bhbj48L3NwYW4+JyArXHJcbiAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXHJcbiAgICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1jb21tYW5kPVwiaW5zZXJ0XCIgZGF0YS12YWx1ZT1cInJvd1wiIGRhdGEtb3B0aW9uPVwiZG93blwiIGNsYXNzPVwic2UtYnRuIHNlLXRvb2x0aXAgX3NlX3RhYmxlX2luc2VydF9yb3dfYlwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgIGljb25zLmluc2VydF9yb3dfYmVsb3cgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtaW5uZXJcIj48c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtdGV4dFwiPicgKyBsYW5nLmNvbnRyb2xsZXIuaW5zZXJ0Um93QmVsb3cgKyAnPC9zcGFuPjwvc3Bhbj4nICtcclxuICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nICtcclxuICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWNvbW1hbmQ9XCJkZWxldGVcIiBkYXRhLXZhbHVlPVwicm93XCIgY2xhc3M9XCJzZS1idG4gc2UtdG9vbHRpcFwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgIGljb25zLmRlbGV0ZV9yb3cgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtaW5uZXJcIj48c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtdGV4dFwiPicgKyBsYW5nLmNvbnRyb2xsZXIuZGVsZXRlUm93ICsgJzwvc3Bhbj48L3NwYW4+JyArXHJcbiAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXHJcbiAgICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1jb21tYW5kPVwibWVyZ2VcIiBjbGFzcz1cIl9zZV90YWJsZV9tZXJnZV9idXR0b24gc2UtYnRuIHNlLXRvb2x0aXBcIiBkaXNhYmxlZD4nICtcclxuICAgICAgICAgICAgICAgICAgICBpY29ucy5tZXJnZV9jZWxsICtcclxuICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLWlubmVyXCI+PHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLXRleHRcIj4nICsgbGFuZy5jb250cm9sbGVyLm1lcmdlQ2VsbHMgKyAnPC9zcGFuPjwvc3Bhbj4nICtcclxuICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nICtcclxuICAgICAgICAgICAgJzwvZGl2PicgK1xyXG4gICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWJ0bi1ncm91cFwiIHN0eWxlPVwicGFkZGluZy10b3A6IDA7XCI+JyArXHJcbiAgICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1jb21tYW5kPVwiaW5zZXJ0XCIgZGF0YS12YWx1ZT1cImNlbGxcIiBkYXRhLW9wdGlvbj1cImxlZnRcIiBjbGFzcz1cInNlLWJ0biBzZS10b29sdGlwXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgaWNvbnMuaW5zZXJ0X2NvbHVtbl9sZWZ0ICtcclxuICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLWlubmVyXCI+PHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLXRleHRcIj4nICsgbGFuZy5jb250cm9sbGVyLmluc2VydENvbHVtbkJlZm9yZSArICc8L3NwYW4+PC9zcGFuPicgK1xyXG4gICAgICAgICAgICAgICAgJzwvYnV0dG9uPicgK1xyXG4gICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtY29tbWFuZD1cImluc2VydFwiIGRhdGEtdmFsdWU9XCJjZWxsXCIgZGF0YS1vcHRpb249XCJyaWdodFwiIGNsYXNzPVwic2UtYnRuIHNlLXRvb2x0aXBcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICBpY29ucy5pbnNlcnRfY29sdW1uX3JpZ2h0ICtcclxuICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLWlubmVyXCI+PHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLXRleHRcIj4nICsgbGFuZy5jb250cm9sbGVyLmluc2VydENvbHVtbkFmdGVyICsgJzwvc3Bhbj48L3NwYW4+JyArXHJcbiAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXHJcbiAgICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1jb21tYW5kPVwiZGVsZXRlXCIgZGF0YS12YWx1ZT1cImNlbGxcIiBjbGFzcz1cInNlLWJ0biBzZS10b29sdGlwXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgaWNvbnMuZGVsZXRlX2NvbHVtbiArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC1pbm5lclwiPjxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC10ZXh0XCI+JyArIGxhbmcuY29udHJvbGxlci5kZWxldGVDb2x1bW4gKyAnPC9zcGFuPjwvc3Bhbj4nICtcclxuICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nICtcclxuICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWNvbW1hbmQ9XCJvbnNwbGl0XCIgY2xhc3M9XCJfc2VfdGFibGVfc3BsaXRfYnV0dG9uIHNlLWJ0biBzZS10b29sdGlwXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgaWNvbnMuc3BsaXRfY2VsbCArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC1pbm5lclwiPjxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC10ZXh0XCI+JyArIGxhbmcuY29udHJvbGxlci5zcGxpdENlbGxzICsgJzwvc3Bhbj48L3NwYW4+JyArXHJcbiAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXHJcbiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWJ0bi1ncm91cC1zdWIgc3VuLWVkaXRvci1jb21tb24gc2UtbGlzdC1sYXllciBzZS10YWJsZS1zcGxpdFwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtbGlzdC1pbm5lclwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnPHVsIGNsYXNzPVwic2UtbGlzdC1iYXNpY1wiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxsaSBjbGFzcz1cInNlLWJ0bi1saXN0XCIgZGF0YS1jb21tYW5kPVwic3BsaXRcIiBkYXRhLXZhbHVlPVwidmVydGljYWxcIiBzdHlsZT1cImxpbmUtaGVpZ2h0OjMycHg7XCIgdGl0bGU9XCInICsgbGFuZy5jb250cm9sbGVyLlZlcnRpY2FsU3BsaXQgKyAnXCI+JyArIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmcuY29udHJvbGxlci5WZXJ0aWNhbFNwbGl0ICsgJzwvbGk+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGxpIGNsYXNzPVwic2UtYnRuLWxpc3RcIiBkYXRhLWNvbW1hbmQ9XCJzcGxpdFwiIGRhdGEtdmFsdWU9XCJob3Jpem9udGFsXCIgc3R5bGU9XCJsaW5lLWhlaWdodDozMnB4O1wiIHRpdGxlPVwiJyArIGxhbmcuY29udHJvbGxlci5Ib3Jpem9udGFsU3BsaXQgKyAnXCI+JyArIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmcuY29udHJvbGxlci5Ib3Jpem9udGFsU3BsaXQgKyAnPC9saT4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJzwvdWw+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzwvZGl2PicgK1xyXG4gICAgICAgICAgICAgICAgJzwvZGl2PicgK1xyXG4gICAgICAgICAgICAnPC9kaXY+JztcclxuXHJcbiAgICAgICAgcmV0dXJuIHRhYmxlUmVzaXplO1xyXG4gICAgfSxcclxuXHJcbiAgICBhcHBlbmRUYWJsZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnN0IG9UYWJsZSA9IHRoaXMudXRpbC5jcmVhdGVFbGVtZW50KCdUQUJMRScpO1xyXG4gICAgICAgIGNvbnN0IGNyZWF0ZUNlbGxzID0gdGhpcy5wbHVnaW5zLnRhYmxlLmNyZWF0ZUNlbGxzO1xyXG5cclxuICAgICAgICBjb25zdCB4ID0gdGhpcy5jb250ZXh0LnRhYmxlLl90YWJsZVhZWzBdO1xyXG4gICAgICAgIGxldCB5ID0gdGhpcy5jb250ZXh0LnRhYmxlLl90YWJsZVhZWzFdO1xyXG4gICAgICAgIGxldCB0YWJsZUhUTUwgPSAnPHRib2R5Pic7XHJcbiAgICAgICAgd2hpbGUgKHkgPiAwKSB7XHJcbiAgICAgICAgICAgIHRhYmxlSFRNTCArPSAnPHRyPicgKyBjcmVhdGVDZWxscy5jYWxsKHRoaXMsICd0ZCcsIHgpICsgJzwvdHI+JztcclxuICAgICAgICAgICAgLS15O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0YWJsZUhUTUwgKz0gJzwvdGJvZHk+JztcclxuICAgICAgICBvVGFibGUuaW5uZXJIVE1MID0gdGFibGVIVE1MO1xyXG5cclxuICAgICAgICBjb25zdCBjaGFuZ2VkID0gdGhpcy5pbnNlcnRDb21wb25lbnQob1RhYmxlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChjaGFuZ2VkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0VGQgPSBvVGFibGUucXVlcnlTZWxlY3RvcigndGQgZGl2Jyk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2UoZmlyc3RUZCwgMCwgZmlyc3RUZCwgMCk7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy50YWJsZS5yZXNldF90YWJsZV9waWNrZXIuY2FsbCh0aGlzKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGNyZWF0ZUNlbGxzOiBmdW5jdGlvbiAobm9kZU5hbWUsIGNudCwgcmV0dXJuRWxlbWVudCkge1xyXG4gICAgICAgIG5vZGVOYW1lID0gbm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcclxuXHJcbiAgICAgICAgaWYgKCFyZXR1cm5FbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGxldCBjZWxsc0hUTUwgPSAnJztcclxuICAgICAgICAgICAgd2hpbGUgKGNudCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGNlbGxzSFRNTCArPSAnPCcgK25vZGVOYW1lICsgJz48ZGl2Pjxicj48L2Rpdj48LycgKyBub2RlTmFtZSArICc+JztcclxuICAgICAgICAgICAgICAgIGNudC0tO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBjZWxsc0hUTUw7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgY2VsbCA9IHRoaXMudXRpbC5jcmVhdGVFbGVtZW50KG5vZGVOYW1lKTtcclxuICAgICAgICAgICAgY2VsbC5pbm5lckhUTUwgPSAnPGRpdj48YnI+PC9kaXY+JztcclxuICAgICAgICAgICAgcmV0dXJuIGNlbGw7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBvbk1vdXNlTW92ZV90YWJsZVBpY2tlcjogZnVuY3Rpb24gKGNvbnRleHRUYWJsZSwgZSkge1xyXG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgICAgIGxldCB4ID0gdGhpcy5fdy5NYXRoLmNlaWwoZS5vZmZzZXRYIC8gMTgpO1xyXG4gICAgICAgIGxldCB5ID0gdGhpcy5fdy5NYXRoLmNlaWwoZS5vZmZzZXRZIC8gMTgpO1xyXG4gICAgICAgIHggPSB4IDwgMSA/IDEgOiB4O1xyXG4gICAgICAgIHkgPSB5IDwgMSA/IDEgOiB5O1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChjb250ZXh0VGFibGUuX3J0bCkge1xyXG4gICAgICAgICAgICBjb250ZXh0VGFibGUudGFibGVIaWdobGlnaHQuc3R5bGUubGVmdCA9ICh4ICogMTggLSAxMykgKyAncHgnO1xyXG4gICAgICAgICAgICB4ID0gMTEgLSB4O1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICBjb250ZXh0VGFibGUudGFibGVIaWdobGlnaHQuc3R5bGUud2lkdGggPSB4ICsgJ2VtJztcclxuICAgICAgICBjb250ZXh0VGFibGUudGFibGVIaWdobGlnaHQuc3R5bGUuaGVpZ2h0ID0geSArICdlbSc7XHJcblxyXG4gICAgICAgIC8vIGxldCB4X3UgPSB4IDwgNSA/IDUgOiAoeCA+IDkgPyAxMCA6IHggKyAxKTtcclxuICAgICAgICAvLyBsZXQgeV91ID0geSA8IDUgPyA1IDogKHkgPiA5ID8gMTAgOiB5ICsgMSk7XHJcbiAgICAgICAgLy8gY29udGV4dFRhYmxlLnRhYmxlVW5IaWdobGlnaHQuc3R5bGUud2lkdGggPSB4X3UgKyAnZW0nO1xyXG4gICAgICAgIC8vIGNvbnRleHRUYWJsZS50YWJsZVVuSGlnaGxpZ2h0LnN0eWxlLmhlaWdodCA9IHlfdSArICdlbSc7XHJcblxyXG4gICAgICAgIHRoaXMudXRpbC5jaGFuZ2VUeHQoY29udGV4dFRhYmxlLnRhYmxlRGlzcGxheSwgeCArICcgeCAnICsgeSk7XHJcbiAgICAgICAgY29udGV4dFRhYmxlLl90YWJsZVhZID0gW3gsIHldO1xyXG4gICAgfSxcclxuXHJcbiAgICByZXNldF90YWJsZV9waWNrZXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY29udGV4dC50YWJsZS50YWJsZUhpZ2hsaWdodCkgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCBoaWdobGlnaHQgPSB0aGlzLmNvbnRleHQudGFibGUudGFibGVIaWdobGlnaHQuc3R5bGU7XHJcbiAgICAgICAgY29uc3QgdW5IaWdobGlnaHQgPSB0aGlzLmNvbnRleHQudGFibGUudGFibGVVbkhpZ2hsaWdodC5zdHlsZTtcclxuXHJcbiAgICAgICAgaGlnaGxpZ2h0LndpZHRoID0gJzFlbSc7XHJcbiAgICAgICAgaGlnaGxpZ2h0LmhlaWdodCA9ICcxZW0nO1xyXG4gICAgICAgIHVuSGlnaGxpZ2h0LndpZHRoID0gJzEwZW0nO1xyXG4gICAgICAgIHVuSGlnaGxpZ2h0LmhlaWdodCA9ICcxMGVtJztcclxuXHJcbiAgICAgICAgdGhpcy51dGlsLmNoYW5nZVR4dCh0aGlzLmNvbnRleHQudGFibGUudGFibGVEaXNwbGF5LCAnMSB4IDEnKTtcclxuICAgICAgICB0aGlzLnN1Ym1lbnVPZmYoKTtcclxuICAgIH0sXHJcblxyXG4gICAgaW5pdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHRUYWJsZSA9IHRoaXMuY29udGV4dC50YWJsZTtcclxuICAgICAgICBjb25zdCB0YWJsZVBsdWdpbiA9IHRoaXMucGx1Z2lucy50YWJsZTtcclxuXHJcbiAgICAgICAgdGFibGVQbHVnaW4uX3JlbW92ZUV2ZW50cy5jYWxsKHRoaXMpO1xyXG5cclxuICAgICAgICBpZiAodGFibGVQbHVnaW4uX3NlbGVjdGVkVGFibGUpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRDZWxscyA9IHRhYmxlUGx1Z2luLl9zZWxlY3RlZFRhYmxlLnF1ZXJ5U2VsZWN0b3JBbGwoJy5zZS10YWJsZS1zZWxlY3RlZC1jZWxsJyk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBzZWxlY3RlZENlbGxzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnV0aWwucmVtb3ZlQ2xhc3Moc2VsZWN0ZWRDZWxsc1tpXSwgJ3NlLXRhYmxlLXNlbGVjdGVkLWNlbGwnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGFibGVQbHVnaW4uX3RvZ2dsZUVkaXRvci5jYWxsKHRoaXMsIHRydWUpO1xyXG5cclxuICAgICAgICBjb250ZXh0VGFibGUuX2VsZW1lbnQgPSBudWxsO1xyXG4gICAgICAgIGNvbnRleHRUYWJsZS5fdGRFbGVtZW50ID0gbnVsbDtcclxuICAgICAgICBjb250ZXh0VGFibGUuX3RyRWxlbWVudCA9IG51bGw7XHJcbiAgICAgICAgY29udGV4dFRhYmxlLl90ckVsZW1lbnRzID0gbnVsbDtcclxuICAgICAgICBjb250ZXh0VGFibGUuX3RhYmxlWFkgPSBbXTtcclxuICAgICAgICBjb250ZXh0VGFibGUuX21heFdpZHRoID0gdHJ1ZTtcclxuICAgICAgICBjb250ZXh0VGFibGUuX2ZpeGVkQ29sdW1uID0gZmFsc2U7XHJcbiAgICAgICAgY29udGV4dFRhYmxlLl9waHlzaWNhbF9jZWxsQ250ID0gMDtcclxuICAgICAgICBjb250ZXh0VGFibGUuX2xvZ2ljYWxfY2VsbENudCA9IDA7XHJcbiAgICAgICAgY29udGV4dFRhYmxlLl9yb3dDbnQgPSAwO1xyXG4gICAgICAgIGNvbnRleHRUYWJsZS5fcm93SW5kZXggPSAwO1xyXG4gICAgICAgIGNvbnRleHRUYWJsZS5fcGh5c2ljYWxfY2VsbEluZGV4ID0gMDtcclxuICAgICAgICBjb250ZXh0VGFibGUuX2xvZ2ljYWxfY2VsbEluZGV4ID0gMDtcclxuICAgICAgICBjb250ZXh0VGFibGUuX2N1cnJlbnRfY29sU3BhbiA9IDA7XHJcbiAgICAgICAgY29udGV4dFRhYmxlLl9jdXJyZW50X3Jvd1NwYW4gPSAwO1xyXG5cclxuICAgICAgICB0YWJsZVBsdWdpbi5fc2hpZnQgPSBmYWxzZTtcclxuICAgICAgICB0YWJsZVBsdWdpbi5fc2VsZWN0ZWRDZWxscyA9IG51bGw7XHJcbiAgICAgICAgdGFibGVQbHVnaW4uX3NlbGVjdGVkVGFibGUgPSBudWxsO1xyXG4gICAgICAgIHRhYmxlUGx1Z2luLl9yZWYgPSBudWxsO1xyXG5cclxuICAgICAgICB0YWJsZVBsdWdpbi5fZml4ZWRDZWxsID0gbnVsbDtcclxuICAgICAgICB0YWJsZVBsdWdpbi5fc2VsZWN0ZWRDZWxsID0gbnVsbDtcclxuICAgICAgICB0YWJsZVBsdWdpbi5fZml4ZWRDZWxsTmFtZSA9IG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKiB0YWJsZSBlZGl0IGNvbnRyb2xsZXIgKi9cclxuICAgIGNhbGxfY29udHJvbGxlcl90YWJsZUVkaXQ6IGZ1bmN0aW9uICh0ZEVsZW1lbnQpIHtcclxuICAgICAgICBjb25zdCB0YWJsZVBsdWdpbiA9IHRoaXMucGx1Z2lucy50YWJsZTtcclxuICAgICAgICBjb25zdCBjb250ZXh0VGFibGUgPSB0aGlzLmNvbnRleHQudGFibGU7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5nZXRTZWxlY3Rpb24oKS5pc0NvbGxhcHNlZCAmJiAhdGFibGVQbHVnaW4uX3NlbGVjdGVkQ2VsbCkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJzT2ZmKCk7XHJcbiAgICAgICAgICAgIHRoaXMudXRpbC5yZW1vdmVDbGFzcyh0ZEVsZW1lbnQsICdzZS10YWJsZS1zZWxlY3RlZC1jZWxsJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHRhYmxlRWxlbWVudCA9IGNvbnRleHRUYWJsZS5fZWxlbWVudCB8fCB0aGlzLnBsdWdpbnMudGFibGUuX3NlbGVjdGVkVGFibGUgfHwgdGhpcy51dGlsLmdldFBhcmVudEVsZW1lbnQodGRFbGVtZW50LCAnVEFCTEUnKTtcclxuICAgICAgICBjb250ZXh0VGFibGUuX21heFdpZHRoID0gdGhpcy51dGlsLmhhc0NsYXNzKHRhYmxlRWxlbWVudCwgJ3NlLXRhYmxlLXNpemUtMTAwJykgfHwgdGFibGVFbGVtZW50LnN0eWxlLndpZHRoID09PSAnMTAwJScgfHwgKCF0YWJsZUVsZW1lbnQuc3R5bGUud2lkdGggJiYgIXRoaXMudXRpbC5oYXNDbGFzcyh0YWJsZUVsZW1lbnQsICdzZS10YWJsZS1zaXplLWF1dG8nKSk7XHJcbiAgICAgICAgY29udGV4dFRhYmxlLl9maXhlZENvbHVtbiA9IHRoaXMudXRpbC5oYXNDbGFzcyh0YWJsZUVsZW1lbnQsICdzZS10YWJsZS1sYXlvdXQtZml4ZWQnKSB8fCB0YWJsZUVsZW1lbnQuc3R5bGUudGFibGVMYXlvdXQgPT09ICdmaXhlZCc7XHJcbiAgICAgICAgdGFibGVQbHVnaW4uc2V0VGFibGVTdHlsZS5jYWxsKHRoaXMsIGNvbnRleHRUYWJsZS5fbWF4V2lkdGggPyAnd2lkdGh8Y29sdW1uJyA6ICd3aWR0aCcpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRhYmxlUGx1Z2luLnNldFBvc2l0aW9uQ29udHJvbGxlclRvcC5jYWxsKHRoaXMsIHRhYmxlRWxlbWVudCk7XHJcbiAgICAgICAgdGFibGVQbHVnaW4uc2V0UG9zaXRpb25Db250cm9sbGVyRGl2LmNhbGwodGhpcywgdGRFbGVtZW50LCB0YWJsZVBsdWdpbi5fc2hpZnQpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICghdGFibGVQbHVnaW4uX3NoaWZ0KSB0aGlzLmNvbnRyb2xsZXJzT24oY29udGV4dFRhYmxlLnJlc2l6ZURpdiwgY29udGV4dFRhYmxlLnRhYmxlQ29udHJvbGxlciwgdGFibGVQbHVnaW4uaW5pdC5iaW5kKHRoaXMpLCB0ZEVsZW1lbnQsICd0YWJsZScpO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXRQb3NpdGlvbkNvbnRyb2xsZXJUb3A6IGZ1bmN0aW9uICh0YWJsZUVsZW1lbnQpIHtcclxuICAgICAgICB0aGlzLnNldENvbnRyb2xsZXJQb3NpdGlvbih0aGlzLmNvbnRleHQudGFibGUudGFibGVDb250cm9sbGVyLCB0YWJsZUVsZW1lbnQsICd0b3AnLCB7bGVmdDogMCwgdG9wOiAwfSk7XHJcbiAgICB9LFxyXG5cclxuICAgIHNldFBvc2l0aW9uQ29udHJvbGxlckRpdjogZnVuY3Rpb24gKHRkRWxlbWVudCwgcmVzZXQpIHtcclxuICAgICAgICBjb25zdCBjb250ZXh0VGFibGUgPSB0aGlzLmNvbnRleHQudGFibGU7XHJcbiAgICAgICAgY29uc3QgcmVzaXplRGl2ID0gY29udGV4dFRhYmxlLnJlc2l6ZURpdjtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnBsdWdpbnMudGFibGUuc2V0Q2VsbEluZm8uY2FsbCh0aGlzLCB0ZEVsZW1lbnQsIHJlc2V0KTtcclxuICAgICAgICBcclxuICAgICAgICBpZiAoY29udGV4dFRhYmxlLmNlbGxDb250cm9sbGVyVG9wKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q29udHJvbGxlclBvc2l0aW9uKHJlc2l6ZURpdiwgY29udGV4dFRhYmxlLl9lbGVtZW50LCAndG9wJywge2xlZnQ6IGNvbnRleHRUYWJsZS50YWJsZUNvbnRyb2xsZXIub2Zmc2V0V2lkdGgsIHRvcDogMH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q29udHJvbGxlclBvc2l0aW9uKHJlc2l6ZURpdiwgdGRFbGVtZW50LCAnYm90dG9tJywge2xlZnQ6IDAsIHRvcDogMH0pO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgc2V0Q2VsbEluZm86IGZ1bmN0aW9uICh0ZEVsZW1lbnQsIHJlc2V0KSB7XHJcbiAgICAgICAgY29uc3QgY29udGV4dFRhYmxlID0gdGhpcy5jb250ZXh0LnRhYmxlO1xyXG4gICAgICAgIGNvbnN0IHRhYmxlID0gY29udGV4dFRhYmxlLl9lbGVtZW50ID0gdGhpcy5wbHVnaW5zLnRhYmxlLl9zZWxlY3RlZFRhYmxlIHx8IHRoaXMudXRpbC5nZXRQYXJlbnRFbGVtZW50KHRkRWxlbWVudCwgJ1RBQkxFJyk7XHJcblxyXG4gICAgICAgIGlmICgvVEhFQUQvaS50ZXN0KHRhYmxlLmZpcnN0RWxlbWVudENoaWxkLm5vZGVOYW1lKSkge1xyXG4gICAgICAgICAgICB0aGlzLnV0aWwuYWRkQ2xhc3MoY29udGV4dFRhYmxlLmhlYWRlckJ1dHRvbiwgJ2FjdGl2ZScpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudXRpbC5yZW1vdmVDbGFzcyhjb250ZXh0VGFibGUuaGVhZGVyQnV0dG9uLCAnYWN0aXZlJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocmVzZXQgfHwgY29udGV4dFRhYmxlLl9waHlzaWNhbF9jZWxsQ250ID09PSAwKSB7XHJcbiAgICAgICAgICAgIGlmIChjb250ZXh0VGFibGUuX3RkRWxlbWVudCAhPT0gdGRFbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0VGFibGUuX3RkRWxlbWVudCA9IHRkRWxlbWVudDtcclxuICAgICAgICAgICAgICAgIGNvbnRleHRUYWJsZS5fdHJFbGVtZW50ID0gdGRFbGVtZW50LnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHJvd3MgPSBjb250ZXh0VGFibGUuX3RyRWxlbWVudHMgPSB0YWJsZS5yb3dzO1xyXG4gICAgICAgICAgICBjb25zdCBjZWxsSW5kZXggPSB0ZEVsZW1lbnQuY2VsbEluZGV4O1xyXG5cclxuICAgICAgICAgICAgbGV0IGNlbGxDbnQgPSAwO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgY2VsbHMgPSByb3dzWzBdLmNlbGxzLCBsZW4gPSByb3dzWzBdLmNlbGxzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBjZWxsQ250ICs9IGNlbGxzW2ldLmNvbFNwYW47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIHJvdyBjbnQsIHJvdyBpbmRleFxyXG4gICAgICAgICAgICBjb25zdCByb3dJbmRleCA9IGNvbnRleHRUYWJsZS5fcm93SW5kZXggPSBjb250ZXh0VGFibGUuX3RyRWxlbWVudC5yb3dJbmRleDtcclxuICAgICAgICAgICAgY29udGV4dFRhYmxlLl9yb3dDbnQgPSByb3dzLmxlbmd0aDtcclxuXHJcbiAgICAgICAgICAgIC8vIGNlbGwgY250LCBwaHlzaWNhbCBjZWxsIGluZGV4XHJcbiAgICAgICAgICAgIGNvbnRleHRUYWJsZS5fcGh5c2ljYWxfY2VsbENudCA9IGNvbnRleHRUYWJsZS5fdHJFbGVtZW50LmNlbGxzLmxlbmd0aDtcclxuICAgICAgICAgICAgY29udGV4dFRhYmxlLl9sb2dpY2FsX2NlbGxDbnQgPSBjZWxsQ250O1xyXG4gICAgICAgICAgICBjb250ZXh0VGFibGUuX3BoeXNpY2FsX2NlbGxJbmRleCA9IGNlbGxJbmRleDtcclxuXHJcbiAgICAgICAgICAgIC8vIHNwYW5cclxuICAgICAgICAgICAgY29udGV4dFRhYmxlLl9jdXJyZW50X2NvbFNwYW4gPSBjb250ZXh0VGFibGUuX3RkRWxlbWVudC5jb2xTcGFuIC0gMTtcclxuICAgICAgICAgICAgY29udGV4dFRhYmxlLl9jdXJyZW50X3Jvd1NwYW4gLSBjb250ZXh0VGFibGUuX3RyRWxlbWVudC5jZWxsc1tjZWxsSW5kZXhdLnJvd1NwYW4gLSAxO1xyXG5cclxuICAgICAgICAgICAgLy8gZmluZCBsb2djYWwgY2VsbCBpbmRleFxyXG4gICAgICAgICAgICBsZXQgcm93U3BhbkFyciA9IFtdO1xyXG4gICAgICAgICAgICBsZXQgc3BhbkluZGV4ID0gW107XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBjZWxscywgY29sU3BhbjsgaSA8PSByb3dJbmRleDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBjZWxscyA9IHJvd3NbaV0uY2VsbHM7XHJcbiAgICAgICAgICAgICAgICBjb2xTcGFuID0gMDtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGMgPSAwLCBjTGVuID0gY2VsbHMubGVuZ3RoLCBjZWxsLCBjcywgcnMsIGxvZ2NhbEluZGV4OyBjIDwgY0xlbjsgYysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2VsbCA9IGNlbGxzW2NdO1xyXG4gICAgICAgICAgICAgICAgICAgIGNzID0gY2VsbC5jb2xTcGFuIC0gMTtcclxuICAgICAgICAgICAgICAgICAgICBycyA9IGNlbGwucm93U3BhbiAtIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9nY2FsSW5kZXggPSBjICsgY29sU3BhbjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNwYW5JbmRleC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHIgPSAwLCBhcnI7IHIgPCBzcGFuSW5kZXgubGVuZ3RoOyByKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyciA9IHNwYW5JbmRleFtyXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcnIucm93ID4gaSkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9nY2FsSW5kZXggPj0gYXJyLmluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sU3BhbiArPSBhcnIuY3M7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nY2FsSW5kZXggKz0gYXJyLmNzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyci5ycyAtPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyci5yb3cgPSBpICsgMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJyLnJzIDwgMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFuSW5kZXguc3BsaWNlKHIsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLS07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT09IGNMZW4gLSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnJzIC09IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnJvdyA9IGkgKyAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcnIucnMgPCAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYW5JbmRleC5zcGxpY2UociwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHItLTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGxvZ2NhbCBjZWxsIGluZGV4XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IHJvd0luZGV4ICYmIGMgPT09IGNlbGxJbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0VGFibGUuX2xvZ2ljYWxfY2VsbEluZGV4ID0gbG9nY2FsSW5kZXg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJzID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByb3dTcGFuQXJyLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGxvZ2NhbEluZGV4LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3M6IGNzICsgMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzOiBycyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdzogLTFcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbFNwYW4gKz0gY3M7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgc3BhbkluZGV4ID0gc3BhbkluZGV4LmNvbmNhdChyb3dTcGFuQXJyKS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7cmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O30pO1xyXG4gICAgICAgICAgICAgICAgcm93U3BhbkFyciA9IFtdO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByb3dTcGFuQXJyID0gbnVsbDtcclxuICAgICAgICAgICAgc3BhbkluZGV4ID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGVkaXRUYWJsZTogZnVuY3Rpb24gKHR5cGUsIG9wdGlvbikge1xyXG4gICAgICAgIGNvbnN0IHRhYmxlUGx1Z2luID0gdGhpcy5wbHVnaW5zLnRhYmxlO1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHRUYWJsZSA9IHRoaXMuY29udGV4dC50YWJsZTtcclxuICAgICAgICBjb25zdCB0YWJsZSA9IGNvbnRleHRUYWJsZS5fZWxlbWVudDtcclxuICAgICAgICBjb25zdCBpc1JvdyA9IHR5cGUgPT09ICdyb3cnO1xyXG5cclxuICAgICAgICBpZiAoaXNSb3cpIHtcclxuICAgICAgICAgICAgY29uc3QgdGFibGVBdHRyID0gY29udGV4dFRhYmxlLl90ckVsZW1lbnQucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgaWYgKC9eVEhFQUQkL2kudGVzdCh0YWJsZUF0dHIubm9kZU5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9uID09PSAndXAnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghdGFibGVBdHRyLm5leHRFbGVtZW50U2libGluZyB8fCAhL15UQk9EWSQvaS50ZXN0KHRhYmxlQXR0ci5uZXh0RWxlbWVudFNpYmxpbmcubm9kZU5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFibGUuaW5uZXJIVE1MICs9ICc8dGJvZHk+PHRyPicgKyB0YWJsZVBsdWdpbi5jcmVhdGVDZWxscy5jYWxsKHRoaXMsICd0ZCcsIGNvbnRleHRUYWJsZS5fbG9naWNhbF9jZWxsQ250LCBmYWxzZSkgKyAnPC90cj48L3Rib2R5Pic7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBtdWx0aVxyXG4gICAgICAgIGlmICh0YWJsZVBsdWdpbi5fcmVmKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uQ2VsbCA9IGNvbnRleHRUYWJsZS5fdGRFbGVtZW50O1xyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZENlbGxzID0gdGFibGVQbHVnaW4uX3NlbGVjdGVkQ2VsbHM7XHJcbiAgICAgICAgICAgIC8vIG11bHRpIC0gcm93XHJcbiAgICAgICAgICAgIGlmIChpc1Jvdykge1xyXG4gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIHJvd1xyXG4gICAgICAgICAgICAgICAgaWYgKCFvcHRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcm93ID0gc2VsZWN0ZWRDZWxsc1swXS5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbW92ZUNlbGxzID0gW3NlbGVjdGVkQ2VsbHNbMF1dO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMSwgbGVuID0gc2VsZWN0ZWRDZWxscy5sZW5ndGgsIGNlbGw7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjZWxsID0gc2VsZWN0ZWRDZWxsc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvdyAhPT0gY2VsbC5wYXJlbnROb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVDZWxscy5wdXNoKGNlbGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93ID0gY2VsbC5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gcmVtb3ZlQ2VsbHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVQbHVnaW4uc2V0Q2VsbEluZm8uY2FsbCh0aGlzLCByZW1vdmVDZWxsc1tpXSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlUGx1Z2luLmVkaXRSb3cuY2FsbCh0aGlzLCBvcHRpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7IC8vIGVkaXQgcm93XHJcbiAgICAgICAgICAgICAgICAgICAgdGFibGVQbHVnaW4uc2V0Q2VsbEluZm8uY2FsbCh0aGlzLCBvcHRpb24gPT09ICd1cCcgPyBzZWxlY3RlZENlbGxzWzBdIDogc2VsZWN0ZWRDZWxsc1tzZWxlY3RlZENlbGxzLmxlbmd0aCAtIDFdLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICB0YWJsZVBsdWdpbi5lZGl0Um93LmNhbGwodGhpcywgb3B0aW9uLCBwb3NpdGlvbkNlbGwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgeyAvLyBtdWx0aSAtIGNlbGxcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0Um93ID0gc2VsZWN0ZWRDZWxsc1swXS5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIGNlbGxcclxuICAgICAgICAgICAgICAgIGlmICghb3B0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVtb3ZlQ2VsbHMgPSBbc2VsZWN0ZWRDZWxsc1swXV07XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDEsIGxlbiA9IHNlbGVjdGVkQ2VsbHMubGVuZ3RoLCBjZWxsOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2VsbCA9IHNlbGVjdGVkQ2VsbHNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdFJvdyA9PT0gY2VsbC5wYXJlbnROb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVDZWxscy5wdXNoKGNlbGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSByZW1vdmVDZWxscy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJsZVBsdWdpbi5zZXRDZWxsSW5mby5jYWxsKHRoaXMsIHJlbW92ZUNlbGxzW2ldLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVQbHVnaW4uZWRpdENlbGwuY2FsbCh0aGlzLCBvcHRpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7IC8vIGVkaXQgY2VsbFxyXG4gICAgICAgICAgICAgICAgICAgIGxldCByaWdodENlbGwgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gc2VsZWN0ZWRDZWxscy5sZW5ndGggLSAxOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0Um93ICE9PSBzZWxlY3RlZENlbGxzW2kgKyAxXS5wYXJlbnROb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByaWdodENlbGwgPSBzZWxlY3RlZENlbGxzW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRhYmxlUGx1Z2luLnNldENlbGxJbmZvLmNhbGwodGhpcywgb3B0aW9uID09PSAnbGVmdCcgPyBzZWxlY3RlZENlbGxzWzBdIDogcmlnaHRDZWxsIHx8IHNlbGVjdGVkQ2VsbHNbMF0sIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRhYmxlUGx1Z2luLmVkaXRDZWxsLmNhbGwodGhpcywgb3B0aW9uLCBwb3NpdGlvbkNlbGwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIW9wdGlvbikgdGFibGVQbHVnaW4uaW5pdC5jYWxsKHRoaXMpO1xyXG4gICAgICAgIH0gLy8gb25lXHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRhYmxlUGx1Z2luW2lzUm93ID8gJ2VkaXRSb3cnIDogJ2VkaXRDZWxsJ10uY2FsbCh0aGlzLCBvcHRpb24pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gYWZ0ZXIgcmVtb3ZlXHJcbiAgICAgICAgaWYgKCFvcHRpb24pIHtcclxuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0YWJsZS5jaGlsZHJlbjtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuW2ldLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXRpbC5yZW1vdmVJdGVtKGNoaWxkcmVuW2ldKTtcclxuICAgICAgICAgICAgICAgICAgICBpLS07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0YWJsZS5jaGlsZHJlbi5sZW5ndGggPT09IDApIHRoaXMudXRpbC5yZW1vdmVJdGVtKHRhYmxlKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGVkaXRSb3c6IGZ1bmN0aW9uIChvcHRpb24sIHBvc2l0aW9uUmVzZXRFbGVtZW50KSB7XHJcbiAgICAgICAgY29uc3QgY29udGV4dFRhYmxlID0gdGhpcy5jb250ZXh0LnRhYmxlO1xyXG4gICAgICAgIGNvbnN0IHJlbW92ZSA9ICFvcHRpb247XHJcblxyXG4gICAgICAgIGNvbnN0IHVwID0gb3B0aW9uID09PSAndXAnO1xyXG4gICAgICAgIGNvbnN0IG9yaWdpblJvd0luZGV4ID0gY29udGV4dFRhYmxlLl9yb3dJbmRleDtcclxuICAgICAgICBjb25zdCByb3dJbmRleCA9IHJlbW92ZSB8fCB1cCA/IG9yaWdpblJvd0luZGV4IDogb3JpZ2luUm93SW5kZXggKyBjb250ZXh0VGFibGUuX2N1cnJlbnRfcm93U3BhbiArIDE7XHJcbiAgICAgICAgY29uc3Qgc2lnbiA9IHJlbW92ZSA/IC0xIDogMTtcclxuICAgICAgICBcclxuICAgICAgICBjb25zdCByb3dzID0gY29udGV4dFRhYmxlLl90ckVsZW1lbnRzO1xyXG4gICAgICAgIGxldCBjZWxsQ250ID0gY29udGV4dFRhYmxlLl9sb2dpY2FsX2NlbGxDbnQ7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBvcmlnaW5Sb3dJbmRleCArIChyZW1vdmUgPyAtMSA6IDApLCBjZWxsOyBpIDw9IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNlbGwgPSByb3dzW2ldLmNlbGxzO1xyXG4gICAgICAgICAgICBpZiAoY2VsbC5sZW5ndGggPT09IDApIHJldHVybjtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGZvciAobGV0IGMgPSAwLCBjTGVuID0gY2VsbC5sZW5ndGgsIHJzLCBjczsgYyA8IGNMZW47IGMrKykge1xyXG4gICAgICAgICAgICAgICAgcnMgPSBjZWxsW2NdLnJvd1NwYW47XHJcbiAgICAgICAgICAgICAgICBjcyA9IGNlbGxbY10uY29sU3BhbjtcclxuICAgICAgICAgICAgICAgIGlmIChycyA8IDIgJiYgY3MgPCAyKSBjb250aW51ZTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocnMgKyBpID4gcm93SW5kZXggJiYgcm93SW5kZXggPiBpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2VsbFtjXS5yb3dTcGFuID0gcnMgKyBzaWduO1xyXG4gICAgICAgICAgICAgICAgICAgIGNlbGxDbnQgLT0gY3M7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChyZW1vdmUpIHtcclxuICAgICAgICAgICAgY29uc3QgbmV4dCA9IHJvd3Nbb3JpZ2luUm93SW5kZXggKyAxXTtcclxuICAgICAgICAgICAgaWYgKG5leHQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNwYW5DZWxscyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgbGV0IGNlbGxzID0gcm93c1tvcmlnaW5Sb3dJbmRleF0uY2VsbHM7XHJcbiAgICAgICAgICAgICAgICBsZXQgY29sU3BhbiA9IDA7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGNlbGxzLmxlbmd0aCwgY2VsbCwgbG9nY2FsSW5kZXg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNlbGwgPSBjZWxsc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICBsb2djYWxJbmRleCA9IGkgKyBjb2xTcGFuO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbFNwYW4gKz0gY2VsbC5jb2xTcGFuIC0gMTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNlbGwucm93U3BhbiA+IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5yb3dTcGFuIC09IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwYW5DZWxscy5wdXNoKHtjZWxsOiBjZWxsLmNsb25lTm9kZShmYWxzZSksIGluZGV4OiBsb2djYWxJbmRleH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoc3BhbkNlbGxzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgc3BhbkNlbGwgPSBzcGFuQ2VsbHMuc2hpZnQoKTtcclxuICAgICAgICAgICAgICAgICAgICBjZWxscyA9IG5leHQuY2VsbHM7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sU3BhbiA9IDA7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBjZWxscy5sZW5ndGgsIGNlbGwsIGxvZ2NhbEluZGV4OyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2VsbCA9IGNlbGxzW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2djYWxJbmRleCA9IGkgKyBjb2xTcGFuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xTcGFuICs9IGNlbGwuY29sU3BhbiAtIDE7XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvZ2NhbEluZGV4ID49IHNwYW5DZWxsLmluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLS0sIGNvbFNwYW4tLTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbFNwYW4gKz0gc3BhbkNlbGwuY2VsbC5jb2xTcGFuIC0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQuaW5zZXJ0QmVmb3JlKHNwYW5DZWxsLmNlbGwsIGNlbGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhbkNlbGwgPSBzcGFuQ2VsbHMuc2hpZnQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3BhbkNlbGwpIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoc3BhbkNlbGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dC5hcHBlbmRDaGlsZChzcGFuQ2VsbC5jZWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHNwYW5DZWxscy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dC5hcHBlbmRDaGlsZChzcGFuQ2VsbHNbaV0uY2VsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnRleHRUYWJsZS5fZWxlbWVudC5kZWxldGVSb3cocm93SW5kZXgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld1JvdyA9IGNvbnRleHRUYWJsZS5fZWxlbWVudC5pbnNlcnRSb3cocm93SW5kZXgpO1xyXG4gICAgICAgICAgICBuZXdSb3cuaW5uZXJIVE1MID0gdGhpcy5wbHVnaW5zLnRhYmxlLmNyZWF0ZUNlbGxzLmNhbGwodGhpcywgJ3RkJywgY2VsbENudCwgZmFsc2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFyZW1vdmUpIHtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLnRhYmxlLnNldFBvc2l0aW9uQ29udHJvbGxlckRpdi5jYWxsKHRoaXMsIHBvc2l0aW9uUmVzZXRFbGVtZW50IHx8IGNvbnRleHRUYWJsZS5fdGRFbGVtZW50LCB0cnVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJzT2ZmKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBlZGl0Q2VsbDogZnVuY3Rpb24gKG9wdGlvbiwgcG9zaXRpb25SZXNldEVsZW1lbnQpIHtcclxuICAgICAgICBjb25zdCBjb250ZXh0VGFibGUgPSB0aGlzLmNvbnRleHQudGFibGU7XHJcbiAgICAgICAgY29uc3QgdXRpbCA9IHRoaXMudXRpbDtcclxuICAgICAgICBjb25zdCByZW1vdmUgPSAhb3B0aW9uO1xyXG5cclxuICAgICAgICBjb25zdCBsZWZ0ID0gb3B0aW9uID09PSAnbGVmdCc7XHJcbiAgICAgICAgY29uc3QgY29sU3BhbiA9IGNvbnRleHRUYWJsZS5fY3VycmVudF9jb2xTcGFuO1xyXG4gICAgICAgIGNvbnN0IGNlbGxJbmRleCA9IHJlbW92ZSB8fCBsZWZ0ID8gY29udGV4dFRhYmxlLl9sb2dpY2FsX2NlbGxJbmRleCA6IGNvbnRleHRUYWJsZS5fbG9naWNhbF9jZWxsSW5kZXggKyBjb2xTcGFuICsgMTtcclxuXHJcbiAgICAgICAgY29uc3Qgcm93cyA9IGNvbnRleHRUYWJsZS5fdHJFbGVtZW50cztcclxuICAgICAgICBsZXQgcm93U3BhbkFyciA9IFtdO1xyXG4gICAgICAgIGxldCBzcGFuSW5kZXggPSBbXTtcclxuICAgICAgICBsZXQgcGFzc0NlbGwgPSAwO1xyXG4gICAgICAgIGNvbnN0IHJlbW92ZUNlbGwgPSBbXTtcclxuICAgICAgICBjb25zdCByZW1vdmVTcGFuQXJyID0gW107XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBjb250ZXh0VGFibGUuX3Jvd0NudCwgcm93LCBpbnNlcnRJbmRleCwgY2VsbHMsIG5ld0NlbGwsIGFwcGx5U3BhbiwgY2VsbENvbFNwYW47IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICByb3cgPSByb3dzW2ldO1xyXG4gICAgICAgICAgICBpbnNlcnRJbmRleCA9IGNlbGxJbmRleDtcclxuICAgICAgICAgICAgYXBwbHlTcGFuID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGNlbGxzID0gcm93LmNlbGxzO1xyXG4gICAgICAgICAgICBjZWxsQ29sU3BhbiA9IDA7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBjID0gMCwgY2VsbCwgY0xlbiA9IGNlbGxzLmxlbmd0aCwgcnMsIGNzLCByZW1vdmVJbmRleDsgYyA8IGNMZW47IGMrKykge1xyXG4gICAgICAgICAgICAgICAgY2VsbCA9IGNlbGxzW2NdO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFjZWxsKSBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICBycyA9IGNlbGwucm93U3BhbiAtIDE7XHJcbiAgICAgICAgICAgICAgICBjcyA9IGNlbGwuY29sU3BhbiAtIDE7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFyZW1vdmUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYyA+PSBpbnNlcnRJbmRleCkgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNzID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFzc0NlbGwgPCAxICYmIGNzICsgYyA+PSBpbnNlcnRJbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jb2xTcGFuICs9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRJbmRleCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzQ2VsbCA9IHJzICsgMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRJbmRleCAtPSBjcztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghYXBwbHlTcGFuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHIgPSAwLCBhcnI7IHIgPCBzcGFuSW5kZXgubGVuZ3RoOyByKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyciA9IHNwYW5JbmRleFtyXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydEluZGV4IC09IGFyci5jcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyci5ycyAtPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyci5ycyA8IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFuSW5kZXguc3BsaWNlKHIsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHItLTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGx5U3BhbiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZW1vdmVJbmRleCA9IGMgKyBjZWxsQ29sU3BhbjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNwYW5JbmRleC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RDZWxsID0gIWNlbGxzW2MgKyAxXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgciA9IDAsIGFycjsgciA8IHNwYW5JbmRleC5sZW5ndGg7IHIrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyID0gc3BhbkluZGV4W3JdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyci5yb3cgPiBpKSBjb250aW51ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVtb3ZlSW5kZXggPj0gYXJyLmluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbENvbFNwYW4gKz0gYXJyLmNzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUluZGV4ID0gYyArIGNlbGxDb2xTcGFuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyci5ycyAtPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyci5yb3cgPSBpICsgMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJyLnJzIDwgMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFuSW5kZXguc3BsaWNlKHIsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLS07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxhc3RDZWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnJzIC09IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnJvdyA9IGkgKyAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcnIucnMgPCAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYW5JbmRleC5zcGxpY2UociwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHItLTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChycyA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm93U3BhbkFyci5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzOiBycyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzOiBjcyArIDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogcmVtb3ZlSW5kZXgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3c6IC0xXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlbW92ZUluZGV4ID49IGluc2VydEluZGV4ICYmIHJlbW92ZUluZGV4ICsgY3MgPD0gaW5zZXJ0SW5kZXggKyBjb2xTcGFuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUNlbGwucHVzaChjZWxsKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlbW92ZUluZGV4IDw9IGluc2VydEluZGV4ICsgY29sU3BhbiAmJiByZW1vdmVJbmRleCArIGNzID49IGluc2VydEluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY29sU3BhbiAtPSB1dGlsLmdldE92ZXJsYXBSYW5nZUF0SW5kZXgoY2VsbEluZGV4LCBjZWxsSW5kZXggKyBjb2xTcGFuLCByZW1vdmVJbmRleCwgcmVtb3ZlSW5kZXggKyBjcyk7IFxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocnMgPiAwICYmIChyZW1vdmVJbmRleCA8IGluc2VydEluZGV4IHx8IHJlbW92ZUluZGV4ICsgY3MgPiBpbnNlcnRJbmRleCArIGNvbFNwYW4pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZVNwYW5BcnIucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsOiBjZWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaTogaSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzOiBpICsgcnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBjZWxsQ29sU3BhbiArPSBjcztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgc3BhbkluZGV4ID0gc3BhbkluZGV4LmNvbmNhdChyb3dTcGFuQXJyKS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7cmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O30pO1xyXG4gICAgICAgICAgICByb3dTcGFuQXJyID0gW107XHJcblxyXG4gICAgICAgICAgICBpZiAoIXJlbW92ZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhc3NDZWxsID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhc3NDZWxsIC09IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGluc2VydEluZGV4ICE9PSBudWxsICYmIGNlbGxzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBuZXdDZWxsID0gdGhpcy5wbHVnaW5zLnRhYmxlLmNyZWF0ZUNlbGxzLmNhbGwodGhpcywgY2VsbHNbMF0ubm9kZU5hbWUsIDAsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld0NlbGwgPSByb3cuaW5zZXJ0QmVmb3JlKG5ld0NlbGwsIGNlbGxzW2luc2VydEluZGV4XSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChyZW1vdmUpIHtcclxuICAgICAgICAgICAgbGV0IHJlbW92ZUZpcnN0LCByZW1vdmVFbmQ7XHJcbiAgICAgICAgICAgIGZvciAobGV0IHIgPSAwLCByTGVuID0gcmVtb3ZlQ2VsbC5sZW5ndGgsIHJvdzsgciA8IHJMZW47IHIrKykge1xyXG4gICAgICAgICAgICAgICAgcm93ID0gcmVtb3ZlQ2VsbFtyXS5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtKHJlbW92ZUNlbGxbcl0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJvdy5jZWxscy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXJlbW92ZUZpcnN0KSByZW1vdmVGaXJzdCA9IHV0aWwuZ2V0QXJyYXlJbmRleChyb3dzLCByb3cpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUVuZCA9IHV0aWwuZ2V0QXJyYXlJbmRleChyb3dzLCByb3cpO1xyXG4gICAgICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlSXRlbShyb3cpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBjID0gMCwgY0xlbiA9IHJlbW92ZVNwYW5BcnIubGVuZ3RoLCByb3dTcGFuQ2VsbDsgYyA8IGNMZW47IGMrKykge1xyXG4gICAgICAgICAgICAgICAgcm93U3BhbkNlbGwgPSByZW1vdmVTcGFuQXJyW2NdO1xyXG4gICAgICAgICAgICAgICAgcm93U3BhbkNlbGwuY2VsbC5yb3dTcGFuID0gdXRpbC5nZXRPdmVybGFwUmFuZ2VBdEluZGV4KHJlbW92ZUZpcnN0LCByZW1vdmVFbmQsIHJvd1NwYW5DZWxsLmksIHJvd1NwYW5DZWxsLnJzKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyc09mZigpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy50YWJsZS5zZXRQb3NpdGlvbkNvbnRyb2xsZXJEaXYuY2FsbCh0aGlzLCBwb3NpdGlvblJlc2V0RWxlbWVudCB8fCBjb250ZXh0VGFibGUuX3RkRWxlbWVudCwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBfY2xvc2VTcGxpdE1lbnU6IG51bGwsXHJcbiAgICBvcGVuU3BsaXRNZW51OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy51dGlsLmFkZENsYXNzKHRoaXMuY29udGV4dC50YWJsZS5zcGxpdEJ1dHRvbiwgJ29uJyk7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0LnRhYmxlLnNwbGl0TWVudS5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZS10YWJsZSc7XHJcblxyXG4gICAgICAgIHRoaXMucGx1Z2lucy50YWJsZS5fY2xvc2VTcGxpdE1lbnUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXRpbC5yZW1vdmVDbGFzcyh0aGlzLmNvbnRleHQudGFibGUuc3BsaXRCdXR0b24sICdvbicpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRleHQudGFibGUuc3BsaXRNZW51LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlRG9jRXZlbnQoJ2NsaWNrJywgdGhpcy5wbHVnaW5zLnRhYmxlLl9jbG9zZVNwbGl0TWVudSk7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy50YWJsZS5fY2xvc2VTcGxpdE1lbnUgPSBudWxsO1xyXG4gICAgICAgIH0uYmluZCh0aGlzKTtcclxuXHJcbiAgICAgICAgdGhpcy5hZGREb2NFdmVudCgnY2xpY2snLCB0aGlzLnBsdWdpbnMudGFibGUuX2Nsb3NlU3BsaXRNZW51KTtcclxuICAgIH0sXHJcblxyXG4gICAgc3BsaXRDZWxsczogZnVuY3Rpb24gKGRpcmVjdGlvbikge1xyXG4gICAgICAgIGNvbnN0IHV0aWwgPSB0aGlzLnV0aWw7XHJcbiAgICAgICAgY29uc3QgdmVydGljYWwgPSBkaXJlY3Rpb24gPT09ICd2ZXJ0aWNhbCc7XHJcbiAgICAgICAgY29uc3QgY29udGV4dFRhYmxlID0gdGhpcy5jb250ZXh0LnRhYmxlO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRDZWxsID0gY29udGV4dFRhYmxlLl90ZEVsZW1lbnQ7XHJcbiAgICAgICAgY29uc3Qgcm93cyA9IGNvbnRleHRUYWJsZS5fdHJFbGVtZW50cztcclxuICAgICAgICBjb25zdCBjdXJyZW50Um93ID0gY29udGV4dFRhYmxlLl90ckVsZW1lbnQ7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSBjb250ZXh0VGFibGUuX2xvZ2ljYWxfY2VsbEluZGV4O1xyXG4gICAgICAgIGNvbnN0IHJvd0luZGV4ID0gY29udGV4dFRhYmxlLl9yb3dJbmRleDtcclxuICAgICAgICBjb25zdCBuZXdDZWxsID0gdGhpcy5wbHVnaW5zLnRhYmxlLmNyZWF0ZUNlbGxzLmNhbGwodGhpcywgY3VycmVudENlbGwubm9kZU5hbWUsIDAsIHRydWUpO1xyXG5cclxuICAgICAgICAvLyB2ZXJ0aWNhbFxyXG4gICAgICAgIGlmICh2ZXJ0aWNhbCkge1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Q29sU3BhbiA9IGN1cnJlbnRDZWxsLmNvbFNwYW47XHJcbiAgICAgICAgICAgIG5ld0NlbGwucm93U3BhbiA9IGN1cnJlbnRDZWxsLnJvd1NwYW47XHJcblxyXG4gICAgICAgICAgICAvLyBjb2xzcGFuID4gMVxyXG4gICAgICAgICAgICBpZiAoY3VycmVudENvbFNwYW4gPiAxKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdDZWxsLmNvbFNwYW4gPSB0aGlzLl93Lk1hdGguZmxvb3IoY3VycmVudENvbFNwYW4vMik7XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50Q2VsbC5jb2xTcGFuID0gY3VycmVudENvbFNwYW4gLSBuZXdDZWxsLmNvbFNwYW47XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50Um93Lmluc2VydEJlZm9yZShuZXdDZWxsLCBjdXJyZW50Q2VsbC5uZXh0RWxlbWVudFNpYmxpbmcpO1xyXG4gICAgICAgICAgICB9IGVsc2UgeyAvLyBjb2xzcGFuIC0gMVxyXG4gICAgICAgICAgICAgICAgbGV0IHJvd1NwYW5BcnIgPSBbXTtcclxuICAgICAgICAgICAgICAgIGxldCBzcGFuSW5kZXggPSBbXTtcclxuXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gY29udGV4dFRhYmxlLl9yb3dDbnQsIGNlbGxzLCBjb2xTcGFuOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjZWxscyA9IHJvd3NbaV0uY2VsbHM7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sU3BhbiA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgYyA9IDAsIGNMZW4gPSBjZWxscy5sZW5ndGgsIGNlbGwsIGNzLCBycywgbG9nY2FsSW5kZXg7IGMgPCBjTGVuOyBjKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2VsbCA9IGNlbGxzW2NdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjcyA9IGNlbGwuY29sU3BhbiAtIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJzID0gY2VsbC5yb3dTcGFuIC0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbG9nY2FsSW5kZXggPSBjICsgY29sU3BhbjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcGFuSW5kZXgubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgciA9IDAsIGFycjsgciA8IHNwYW5JbmRleC5sZW5ndGg7IHIrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyciA9IHNwYW5JbmRleFtyXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJyLnJvdyA+IGkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2djYWxJbmRleCA+PSBhcnIuaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sU3BhbiArPSBhcnIuY3M7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2NhbEluZGV4ICs9IGFyci5jcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnJzIC09IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyci5yb3cgPSBpICsgMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyci5ycyA8IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYW5JbmRleC5zcGxpY2UociwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLS07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PT0gY0xlbiAtIDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnJzIC09IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyci5yb3cgPSBpICsgMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyci5ycyA8IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYW5JbmRleC5zcGxpY2UociwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLS07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2djYWxJbmRleCA8PSBpbmRleCAmJiBycyA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd1NwYW5BcnIucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGxvZ2NhbEluZGV4LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzOiBjcyArIDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnM6IHJzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdzogLTFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2VsbCAhPT0gY3VycmVudENlbGwgJiYgbG9nY2FsSW5kZXggPD0gaW5kZXggJiYgbG9nY2FsSW5kZXggKyBjcyA+PSBpbmRleCArIGN1cnJlbnRDb2xTcGFuIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jb2xTcGFuICs9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvZ2NhbEluZGV4ID4gaW5kZXgpIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sU3BhbiArPSBjcztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHNwYW5JbmRleCA9IHNwYW5JbmRleC5jb25jYXQocm93U3BhbkFycikuc29ydChmdW5jdGlvbiAoYSwgYikge3JldHVybiBhLmluZGV4IC0gYi5pbmRleDt9KTtcclxuICAgICAgICAgICAgICAgICAgICByb3dTcGFuQXJyID0gW107XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY3VycmVudFJvdy5pbnNlcnRCZWZvcmUobmV3Q2VsbCwgY3VycmVudENlbGwubmV4dEVsZW1lbnRTaWJsaW5nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7IC8vIGhvcml6b250YWxcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudFJvd1NwYW4gPSBjdXJyZW50Q2VsbC5yb3dTcGFuO1xyXG4gICAgICAgICAgICBuZXdDZWxsLmNvbFNwYW4gPSBjdXJyZW50Q2VsbC5jb2xTcGFuO1xyXG5cclxuICAgICAgICAgICAgLy8gcm93c3BhbiA+IDFcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnRSb3dTcGFuID4gMSkge1xyXG4gICAgICAgICAgICAgICAgbmV3Q2VsbC5yb3dTcGFuID0gdGhpcy5fdy5NYXRoLmZsb29yKGN1cnJlbnRSb3dTcGFuLzIpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Um93U3BhbiA9IGN1cnJlbnRSb3dTcGFuIC0gbmV3Q2VsbC5yb3dTcGFuO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHJvd1NwYW5BcnIgPSBbXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHRSb3dJbmRleCA9IHV0aWwuZ2V0QXJyYXlJbmRleChyb3dzLCBjdXJyZW50Um93KSArIG5ld1Jvd1NwYW47XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGNlbGxzLCBjb2xTcGFuOyBpIDwgbmV4dFJvd0luZGV4OyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjZWxscyA9IHJvd3NbaV0uY2VsbHM7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sU3BhbiA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgYyA9IDAsIGNMZW4gPSBjZWxscy5sZW5ndGgsIGNlbGwsIGNzLCBsb2djYWxJbmRleDsgYyA8IGNMZW47IGMrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2djYWxJbmRleCA9IGMgKyBjb2xTcGFuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9nY2FsSW5kZXggPj0gaW5kZXgpIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY2VsbCA9IGNlbGxzW2NdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjcyA9IGNlbGwucm93U3BhbiAtIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjcyA+IDAgJiYgY3MgKyBpID49IG5leHRSb3dJbmRleCAmJiBsb2djYWxJbmRleCA8IGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dTcGFuQXJyLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBsb2djYWxJbmRleCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjczogY2VsbC5jb2xTcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xTcGFuICs9IGNlbGwuY29sU3BhbiAtIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHRSb3cgPSByb3dzW25leHRSb3dJbmRleF07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0Q2VsbHMgPSBuZXh0Um93LmNlbGxzO1xyXG4gICAgICAgICAgICAgICAgbGV0IHJzID0gcm93U3BhbkFyci5zaGlmdCgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGMgPSAwLCBjTGVuID0gbmV4dENlbGxzLmxlbmd0aCwgY29sU3BhbiA9IDAsIGNlbGwsIGNzLCBsb2djYWxJbmRleCwgaW5zZXJ0SW5kZXg7IGMgPCBjTGVuOyBjKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2djYWxJbmRleCA9IGMgKyBjb2xTcGFuO1xyXG4gICAgICAgICAgICAgICAgICAgIGNlbGwgPSBuZXh0Q2VsbHNbY107XHJcbiAgICAgICAgICAgICAgICAgICAgY3MgPSBjZWxsLmNvbFNwYW4gLSAxO1xyXG4gICAgICAgICAgICAgICAgICAgIGluc2VydEluZGV4ID0gbG9nY2FsSW5kZXggKyBjcyArIDE7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChycyAmJiBpbnNlcnRJbmRleCA+PSBycy5pbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xTcGFuICs9IHJzLmNzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRJbmRleCArPSBycy5jcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgcnMgPSByb3dTcGFuQXJyLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnNlcnRJbmRleCA+PSBpbmRleCB8fCBjID09PSBjTGVuIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0Um93Lmluc2VydEJlZm9yZShuZXdDZWxsLCBjZWxsLm5leHRFbGVtZW50U2libGluZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29sU3BhbiArPSBjcztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50Q2VsbC5yb3dTcGFuID0gbmV3Um93U3BhbjtcclxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gcm93c3BhbiAtIDFcclxuICAgICAgICAgICAgICAgIG5ld0NlbGwucm93U3BhbiA9IGN1cnJlbnRDZWxsLnJvd1NwYW47XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdSb3cgPSB1dGlsLmNyZWF0ZUVsZW1lbnQoJ1RSJyk7XHJcbiAgICAgICAgICAgICAgICBuZXdSb3cuYXBwZW5kQ2hpbGQobmV3Q2VsbCk7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGNlbGxzOyBpIDwgcm93SW5kZXg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNlbGxzID0gcm93c1tpXS5jZWxscztcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2VsbHMubGVuZ3RoID09PSAwKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGMgPSAwLCBjTGVuID0gY2VsbHMubGVuZ3RoOyBjIDwgY0xlbjsgYysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpICsgY2VsbHNbY10ucm93U3BhbiAtIDEgPj0gcm93SW5kZXgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxzW2NdLnJvd1NwYW4gKz0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBwaHlzaWNhbEluZGV4ID0gY29udGV4dFRhYmxlLl9waHlzaWNhbF9jZWxsSW5kZXg7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjZWxscyA9IGN1cnJlbnRSb3cuY2VsbHM7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgYyA9IDAsIGNMZW4gPSBjZWxscy5sZW5ndGg7IGMgPCBjTGVuOyBjKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PT0gcGh5c2ljYWxJbmRleCkgY29udGludWU7ICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGNlbGxzW2NdLnJvd1NwYW4gKz0gMTsgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGN1cnJlbnRSb3cucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobmV3Um93LCBjdXJyZW50Um93Lm5leHRFbGVtZW50U2libGluZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZm9jdXNFZGdlKGN1cnJlbnRDZWxsKTtcclxuICAgICAgICB0aGlzLnBsdWdpbnMudGFibGUuc2V0UG9zaXRpb25Db250cm9sbGVyRGl2LmNhbGwodGhpcywgY3VycmVudENlbGwsIHRydWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICBtZXJnZUNlbGxzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY29uc3QgdGFibGVQbHVnaW4gPSB0aGlzLnBsdWdpbnMudGFibGU7XHJcbiAgICAgICAgY29uc3QgY29udGV4dFRhYmxlID0gdGhpcy5jb250ZXh0LnRhYmxlO1xyXG4gICAgICAgIGNvbnN0IHV0aWwgPSB0aGlzLnV0aWw7XHJcblxyXG4gICAgICAgIGNvbnN0IHJlZiA9IHRhYmxlUGx1Z2luLl9yZWY7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRDZWxscyA9IHRhYmxlUGx1Z2luLl9zZWxlY3RlZENlbGxzO1xyXG4gICAgICAgIGNvbnN0IG1lcmdlQ2VsbCA9IHNlbGVjdGVkQ2VsbHNbMF07XHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IGVtcHR5Um93Rmlyc3QgPSBudWxsO1xyXG4gICAgICAgIGxldCBlbXB0eVJvd0xhc3QgPSBudWxsO1xyXG4gICAgICAgIGxldCBjcyA9IChyZWYuY2UgLSByZWYuY3MpICsgMTtcclxuICAgICAgICBsZXQgcnMgPSAocmVmLnJlIC0gcmVmLnJzKSArIDE7XHJcbiAgICAgICAgbGV0IG1lcmdlSFRNTCA9ICcnO1xyXG4gICAgICAgIGxldCByb3cgPSBudWxsO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMSwgbGVuID0gc2VsZWN0ZWRDZWxscy5sZW5ndGgsIGNlbGwsIGNoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgY2VsbCA9IHNlbGVjdGVkQ2VsbHNbaV07XHJcbiAgICAgICAgICAgIGlmIChyb3cgIT09IGNlbGwucGFyZW50Tm9kZSkgcm93ID0gY2VsbC5wYXJlbnROb2RlO1xyXG5cclxuICAgICAgICAgICAgY2ggPSBjZWxsLmNoaWxkcmVuO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBjID0gMCwgY0xlbiA9IGNoLmxlbmd0aDsgYyA8IGNMZW47IGMrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNGb3JtYXRFbGVtZW50KGNoW2NdKSAmJiB1dGlsLm9ubHlaZXJvV2lkdGhTcGFjZShjaFtjXS50ZXh0Q29udGVudCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUl0ZW0oY2hbY10pO1xyXG4gICAgICAgICAgICAgICAgfSAgXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIG1lcmdlSFRNTCArPSBjZWxsLmlubmVySFRNTDtcclxuICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtKGNlbGwpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHJvdy5jZWxscy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIGlmICghZW1wdHlSb3dGaXJzdCkgZW1wdHlSb3dGaXJzdCA9IHJvdztcclxuICAgICAgICAgICAgICAgIGVsc2UgZW1wdHlSb3dMYXN0ID0gcm93O1xyXG4gICAgICAgICAgICAgICAgcnMgLT0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVtcHR5Um93Rmlyc3QpIHtcclxuICAgICAgICAgICAgY29uc3Qgcm93cyA9IGNvbnRleHRUYWJsZS5fdHJFbGVtZW50cztcclxuICAgICAgICAgICAgY29uc3Qgcm93SW5kZXhGaXJzdCA9IHV0aWwuZ2V0QXJyYXlJbmRleChyb3dzLCBlbXB0eVJvd0ZpcnN0KTtcclxuICAgICAgICAgICAgY29uc3Qgcm93SW5kZXhMYXN0ID0gdXRpbC5nZXRBcnJheUluZGV4KHJvd3MsIGVtcHR5Um93TGFzdCB8fCBlbXB0eVJvd0ZpcnN0KTtcclxuICAgICAgICAgICAgY29uc3QgcmVtb3ZlUm93cyA9IFtdO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBjZWxsczsgaSA8PSByb3dJbmRleExhc3Q7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY2VsbHMgPSByb3dzW2ldLmNlbGxzO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNlbGxzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZVJvd3MucHVzaChyb3dzW2ldKTtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgYyA9IDAsIGNMZW4gPSBjZWxscy5sZW5ndGgsIGNlbGwsIHJzOyBjIDwgY0xlbjsgYysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2VsbCA9IGNlbGxzW2NdO1xyXG4gICAgICAgICAgICAgICAgICAgIHJzID0gY2VsbC5yb3dTcGFuIC0gMTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocnMgPiAwICYmIGkgKyBycyA+PSByb3dJbmRleEZpcnN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwucm93U3BhbiAtPSB1dGlsLmdldE92ZXJsYXBSYW5nZUF0SW5kZXgocm93SW5kZXhGaXJzdCwgcm93SW5kZXhMYXN0LCBpLCBpICsgcnMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHJlbW92ZVJvd3MubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlSXRlbShyZW1vdmVSb3dzW2ldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbWVyZ2VDZWxsLmlubmVySFRNTCArPSBtZXJnZUhUTUw7XHJcbiAgICAgICAgbWVyZ2VDZWxsLmNvbFNwYW4gPSBjcztcclxuICAgICAgICBtZXJnZUNlbGwucm93U3BhbiA9IHJzO1xyXG5cclxuICAgICAgICB0aGlzLmNvbnRyb2xsZXJzT2ZmKCk7XHJcbiAgICAgICAgdGFibGVQbHVnaW4uc2V0QWN0aXZlQnV0dG9uLmNhbGwodGhpcywgdHJ1ZSwgZmFsc2UpO1xyXG4gICAgICAgIHRhYmxlUGx1Z2luLmNhbGxfY29udHJvbGxlcl90YWJsZUVkaXQuY2FsbCh0aGlzLCBtZXJnZUNlbGwpO1xyXG5cclxuICAgICAgICB1dGlsLmFkZENsYXNzKG1lcmdlQ2VsbCwgJ3NlLXRhYmxlLXNlbGVjdGVkLWNlbGwnKTtcclxuICAgICAgICB0aGlzLmZvY3VzRWRnZShtZXJnZUNlbGwpO1xyXG4gICAgfSxcclxuXHJcbiAgICB0b2dnbGVIZWFkZXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zdCB1dGlsID0gdGhpcy51dGlsO1xyXG4gICAgICAgIGNvbnN0IGhlYWRlckJ1dHRvbiA9IHRoaXMuY29udGV4dC50YWJsZS5oZWFkZXJCdXR0b247XHJcbiAgICAgICAgY29uc3QgYWN0aXZlID0gdXRpbC5oYXNDbGFzcyhoZWFkZXJCdXR0b24sICdhY3RpdmUnKTtcclxuICAgICAgICBjb25zdCB0YWJsZSA9IHRoaXMuY29udGV4dC50YWJsZS5fZWxlbWVudDtcclxuXHJcbiAgICAgICAgaWYgKCFhY3RpdmUpIHtcclxuICAgICAgICAgICAgY29uc3QgaGVhZGVyID0gdXRpbC5jcmVhdGVFbGVtZW50KCdUSEVBRCcpO1xyXG4gICAgICAgICAgICBoZWFkZXIuaW5uZXJIVE1MID0gJzx0cj4nICsgdGhpcy5wbHVnaW5zLnRhYmxlLmNyZWF0ZUNlbGxzLmNhbGwodGhpcywgJ3RoJywgdGhpcy5jb250ZXh0LnRhYmxlLl9sb2dpY2FsX2NlbGxDbnQsIGZhbHNlKSArICc8L3RyPic7XHJcbiAgICAgICAgICAgIHRhYmxlLmluc2VydEJlZm9yZShoZWFkZXIsIHRhYmxlLmZpcnN0RWxlbWVudENoaWxkKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB1dGlsLnJlbW92ZUl0ZW0odGFibGUucXVlcnlTZWxlY3RvcigndGhlYWQnKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB1dGlsLnRvZ2dsZUNsYXNzKGhlYWRlckJ1dHRvbiwgJ2FjdGl2ZScpO1xyXG5cclxuICAgICAgICBpZiAoL1RIL2kudGVzdCh0aGlzLmNvbnRleHQudGFibGUuX3RkRWxlbWVudC5ub2RlTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyc09mZigpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy50YWJsZS5zZXRQb3NpdGlvbkNvbnRyb2xsZXJEaXYuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQudGFibGUuX3RkRWxlbWVudCwgZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgc2V0VGFibGVTdHlsZTogZnVuY3Rpb24gKHN0eWxlcykge1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHRUYWJsZSA9IHRoaXMuY29udGV4dC50YWJsZTtcclxuICAgICAgICBjb25zdCB0YWJsZUVsZW1lbnQgPSBjb250ZXh0VGFibGUuX2VsZW1lbnQ7XHJcbiAgICAgICAgbGV0IGljb24sIHNwYW4sIHNpemVJY29uLCB0ZXh0O1xyXG5cclxuICAgICAgICBpZiAoc3R5bGVzLmluZGV4T2YoJ3dpZHRoJykgPiAtMSkge1xyXG4gICAgICAgICAgICBpY29uID0gIGNvbnRleHRUYWJsZS5yZXNpemVCdXR0b24uZmlyc3RFbGVtZW50Q2hpbGQ7XHJcbiAgICAgICAgICAgIHNwYW4gPSBjb250ZXh0VGFibGUucmVzaXplVGV4dDtcclxuXHJcbiAgICAgICAgICAgIGlmICghY29udGV4dFRhYmxlLl9tYXhXaWR0aCkge1xyXG4gICAgICAgICAgICAgICAgc2l6ZUljb24gPSBjb250ZXh0VGFibGUuaWNvbnMuZXhwYW5zaW9uO1xyXG4gICAgICAgICAgICAgICAgdGV4dCA9IGNvbnRleHRUYWJsZS5tYXhUZXh0O1xyXG4gICAgICAgICAgICAgICAgY29udGV4dFRhYmxlLmNvbHVtbkZpeGVkQnV0dG9uLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnV0aWwucmVtb3ZlQ2xhc3ModGFibGVFbGVtZW50LCAnc2UtdGFibGUtc2l6ZS0xMDAnKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudXRpbC5hZGRDbGFzcyh0YWJsZUVsZW1lbnQsICdzZS10YWJsZS1zaXplLWF1dG8nKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHNpemVJY29uID0gY29udGV4dFRhYmxlLmljb25zLnJlZHVjdGlvbjtcclxuICAgICAgICAgICAgICAgIHRleHQgPSBjb250ZXh0VGFibGUubWluVGV4dDtcclxuICAgICAgICAgICAgICAgIGNvbnRleHRUYWJsZS5jb2x1bW5GaXhlZEJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICAgICAgICAgIHRoaXMudXRpbC5yZW1vdmVDbGFzcyh0YWJsZUVsZW1lbnQsICdzZS10YWJsZS1zaXplLWF1dG8nKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudXRpbC5hZGRDbGFzcyh0YWJsZUVsZW1lbnQsICdzZS10YWJsZS1zaXplLTEwMCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLnV0aWwuY2hhbmdlRWxlbWVudChpY29uLCBzaXplSWNvbik7XHJcbiAgICAgICAgICAgIHRoaXMudXRpbC5jaGFuZ2VUeHQoc3BhbiwgdGV4dCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc3R5bGVzLmluZGV4T2YoJ2NvbHVtbicpID4gLTEpIHtcclxuICAgICAgICAgICAgaWYgKCFjb250ZXh0VGFibGUuX2ZpeGVkQ29sdW1uKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnV0aWwucmVtb3ZlQ2xhc3ModGFibGVFbGVtZW50LCAnc2UtdGFibGUtbGF5b3V0LWZpeGVkJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnV0aWwuYWRkQ2xhc3ModGFibGVFbGVtZW50LCAnc2UtdGFibGUtbGF5b3V0LWF1dG8nKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudXRpbC5yZW1vdmVDbGFzcyhjb250ZXh0VGFibGUuY29sdW1uRml4ZWRCdXR0b24sICdhY3RpdmUnKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXRpbC5yZW1vdmVDbGFzcyh0YWJsZUVsZW1lbnQsICdzZS10YWJsZS1sYXlvdXQtYXV0bycpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51dGlsLmFkZENsYXNzKHRhYmxlRWxlbWVudCwgJ3NlLXRhYmxlLWxheW91dC1maXhlZCcpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51dGlsLmFkZENsYXNzKGNvbnRleHRUYWJsZS5jb2x1bW5GaXhlZEJ1dHRvbiwgJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgc2V0QWN0aXZlQnV0dG9uOiBmdW5jdGlvbiAoZml4ZWRDZWxsLCBzZWxlY3RlZENlbGwpIHtcclxuICAgICAgICBjb25zdCBjb250ZXh0VGFibGUgPSB0aGlzLmNvbnRleHQudGFibGU7XHJcblxyXG4gICAgICAgIGlmICgvXlRIJC9pLnRlc3QoZml4ZWRDZWxsLm5vZGVOYW1lKSkge1xyXG4gICAgICAgICAgICBjb250ZXh0VGFibGUuaW5zZXJ0Um93QWJvdmVCdXR0b24uc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsIHRydWUpO1xyXG4gICAgICAgICAgICBjb250ZXh0VGFibGUuaW5zZXJ0Um93QmVsb3dCdXR0b24uc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsIHRydWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnRleHRUYWJsZS5pbnNlcnRSb3dBYm92ZUJ1dHRvbi5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XHJcbiAgICAgICAgICAgIGNvbnRleHRUYWJsZS5pbnNlcnRSb3dCZWxvd0J1dHRvbi5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXNlbGVjdGVkQ2VsbCB8fCBmaXhlZENlbGwgPT09IHNlbGVjdGVkQ2VsbCkge1xyXG4gICAgICAgICAgICBjb250ZXh0VGFibGUuc3BsaXRCdXR0b24ucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xyXG4gICAgICAgICAgICBjb250ZXh0VGFibGUubWVyZ2VCdXR0b24uc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsIHRydWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnRleHRUYWJsZS5zcGxpdEJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgdHJ1ZSk7XHJcbiAgICAgICAgICAgIGNvbnRleHRUYWJsZS5tZXJnZUJ1dHRvbi5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvLyBtdWx0aSBzZWxlY3RlXHJcbiAgICBfYmluZE9uU2VsZWN0OiBudWxsLFxyXG4gICAgX2JpbmRPZmZTZWxlY3Q6IG51bGwsXHJcbiAgICBfYmluZE9mZlNoaWZ0OiBudWxsLFxyXG4gICAgX3NlbGVjdGVkQ2VsbHM6IG51bGwsXHJcbiAgICBfc2hpZnQ6IGZhbHNlLFxyXG4gICAgX2ZpeGVkQ2VsbDogbnVsbCxcclxuICAgIF9maXhlZENlbGxOYW1lOiBudWxsLFxyXG4gICAgX3NlbGVjdGVkQ2VsbDogbnVsbCxcclxuICAgIF9zZWxlY3RlZFRhYmxlOiBudWxsLFxyXG4gICAgX3JlZjogbnVsbCxcclxuICAgIF90b2dnbGVFZGl0b3I6IGZ1bmN0aW9uIChlbmFibGVkKSB7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0LmVsZW1lbnQud3lzaXd5Zy5zZXRBdHRyaWJ1dGUoJ2NvbnRlbnRlZGl0YWJsZScsIGVuYWJsZWQpO1xyXG4gICAgICAgIGlmIChlbmFibGVkKSB0aGlzLnV0aWwucmVtb3ZlQ2xhc3ModGhpcy5jb250ZXh0LmVsZW1lbnQud3lzaXd5ZywgJ3NlLWRpc2FibGVkJyk7XHJcbiAgICAgICAgZWxzZSB0aGlzLnV0aWwuYWRkQ2xhc3ModGhpcy5jb250ZXh0LmVsZW1lbnQud3lzaXd5ZywgJ3NlLWRpc2FibGVkJyk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9vZmZDZWxsTXVsdGlTZWxlY3Q6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICBjb25zdCB0YWJsZVBsdWdpbiA9IHRoaXMucGx1Z2lucy50YWJsZTtcclxuXHJcbiAgICAgICAgaWYgKCF0YWJsZVBsdWdpbi5fc2hpZnQpIHtcclxuICAgICAgICAgICAgdGFibGVQbHVnaW4uX3JlbW92ZUV2ZW50cy5jYWxsKHRoaXMpO1xyXG4gICAgICAgICAgICB0YWJsZVBsdWdpbi5fdG9nZ2xlRWRpdG9yLmNhbGwodGhpcywgdHJ1ZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0YWJsZVBsdWdpbi5faW5pdEJpbmQpIHtcclxuICAgICAgICAgICAgdGhpcy5fd2QucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGFibGVQbHVnaW4uX2luaXRCaW5kKTtcclxuICAgICAgICAgICAgdGFibGVQbHVnaW4uX2luaXRCaW5kID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGFibGVQbHVnaW4uX2ZpeGVkQ2VsbCB8fCAhdGFibGVQbHVnaW4uX3NlbGVjdGVkVGFibGUpIHJldHVybjtcclxuICAgICAgICBcclxuICAgICAgICB0YWJsZVBsdWdpbi5zZXRBY3RpdmVCdXR0b24uY2FsbCh0aGlzLCB0YWJsZVBsdWdpbi5fZml4ZWRDZWxsLCB0YWJsZVBsdWdpbi5fc2VsZWN0ZWRDZWxsKTtcclxuICAgICAgICB0YWJsZVBsdWdpbi5jYWxsX2NvbnRyb2xsZXJfdGFibGVFZGl0LmNhbGwodGhpcywgdGFibGVQbHVnaW4uX3NlbGVjdGVkQ2VsbCB8fCB0YWJsZVBsdWdpbi5fZml4ZWRDZWxsKTtcclxuXHJcbiAgICAgICAgdGFibGVQbHVnaW4uX3NlbGVjdGVkQ2VsbHMgPSB0YWJsZVBsdWdpbi5fc2VsZWN0ZWRUYWJsZS5xdWVyeVNlbGVjdG9yQWxsKCcuc2UtdGFibGUtc2VsZWN0ZWQtY2VsbCcpO1xyXG4gICAgICAgIGlmICh0YWJsZVBsdWdpbi5fc2VsZWN0ZWRDZWxsICYmIHRhYmxlUGx1Z2luLl9maXhlZENlbGwpIHRoaXMuZm9jdXNFZGdlKHRhYmxlUGx1Z2luLl9zZWxlY3RlZENlbGwpO1xyXG5cclxuICAgICAgICBpZiAoIXRhYmxlUGx1Z2luLl9zaGlmdCkge1xyXG4gICAgICAgICAgICB0YWJsZVBsdWdpbi5fZml4ZWRDZWxsID0gbnVsbDtcclxuICAgICAgICAgICAgdGFibGVQbHVnaW4uX3NlbGVjdGVkQ2VsbCA9IG51bGw7XHJcbiAgICAgICAgICAgIHRhYmxlUGx1Z2luLl9maXhlZENlbGxOYW1lID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIF9vbkNlbGxNdWx0aVNlbGVjdDogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICB0aGlzLl9hbnRpQmx1ciA9IHRydWU7XHJcbiAgICAgICAgY29uc3QgdGFibGVQbHVnaW4gPSB0aGlzLnBsdWdpbnMudGFibGU7XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy51dGlsLmdldFBhcmVudEVsZW1lbnQoZS50YXJnZXQsIHRoaXMudXRpbC5pc0NlbGwpO1xyXG5cclxuICAgICAgICBpZiAodGFibGVQbHVnaW4uX3NoaWZ0KSB7XHJcbiAgICAgICAgICAgIGlmICh0YXJnZXQgPT09IHRhYmxlUGx1Z2luLl9maXhlZENlbGwpIHRhYmxlUGx1Z2luLl90b2dnbGVFZGl0b3IuY2FsbCh0aGlzLCB0cnVlKTtcclxuICAgICAgICAgICAgZWxzZSB0YWJsZVBsdWdpbi5fdG9nZ2xlRWRpdG9yLmNhbGwodGhpcywgZmFsc2UpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoIXRhYmxlUGx1Z2luLl9yZWYpIHtcclxuICAgICAgICAgICAgaWYgKHRhcmdldCA9PT0gdGFibGVQbHVnaW4uX2ZpeGVkQ2VsbCkgcmV0dXJuO1xyXG4gICAgICAgICAgICBlbHNlIHRhYmxlUGx1Z2luLl90b2dnbGVFZGl0b3IuY2FsbCh0aGlzLCBmYWxzZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRhcmdldCB8fCB0YXJnZXQgPT09IHRhYmxlUGx1Z2luLl9zZWxlY3RlZENlbGwgfHwgdGFibGVQbHVnaW4uX2ZpeGVkQ2VsbE5hbWUgIT09IHRhcmdldC5ub2RlTmFtZSB8fCBcclxuICAgICAgICAgICAgdGFibGVQbHVnaW4uX3NlbGVjdGVkVGFibGUgIT09IHRoaXMudXRpbC5nZXRQYXJlbnRFbGVtZW50KHRhcmdldCwgJ1RBQkxFJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGFibGVQbHVnaW4uX3NlbGVjdGVkQ2VsbCA9IHRhcmdldDtcclxuICAgICAgICB0YWJsZVBsdWdpbi5fc2V0TXVsdGlDZWxscy5jYWxsKHRoaXMsIHRhYmxlUGx1Z2luLl9maXhlZENlbGwsIHRhcmdldCk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9zZXRNdWx0aUNlbGxzOiBmdW5jdGlvbiAoc3RhcnRDZWxsLCBlbmRDZWxsKSB7XHJcbiAgICAgICAgY29uc3QgdGFibGVQbHVnaW4gPSB0aGlzLnBsdWdpbnMudGFibGU7XHJcbiAgICAgICAgY29uc3Qgcm93cyA9IHRhYmxlUGx1Z2luLl9zZWxlY3RlZFRhYmxlLnJvd3M7XHJcbiAgICAgICAgY29uc3QgdXRpbCA9IHRoaXMudXRpbDtcclxuXHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRDZWxscyA9IHRhYmxlUGx1Z2luLl9zZWxlY3RlZFRhYmxlLnF1ZXJ5U2VsZWN0b3JBbGwoJy5zZS10YWJsZS1zZWxlY3RlZC1jZWxsJyk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHNlbGVjdGVkQ2VsbHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgdXRpbC5yZW1vdmVDbGFzcyhzZWxlY3RlZENlbGxzW2ldLCAnc2UtdGFibGUtc2VsZWN0ZWQtY2VsbCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHN0YXJ0Q2VsbCA9PT0gZW5kQ2VsbCkge1xyXG4gICAgICAgICAgICB1dGlsLmFkZENsYXNzKHN0YXJ0Q2VsbCwgJ3NlLXRhYmxlLXNlbGVjdGVkLWNlbGwnKTtcclxuICAgICAgICAgICAgaWYgKCF0YWJsZVBsdWdpbi5fc2hpZnQpIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBmaW5kU2VsZWN0ZWRDZWxsID0gdHJ1ZTtcclxuICAgICAgICBsZXQgc3BhbkluZGV4ID0gW107XHJcbiAgICAgICAgbGV0IHJvd1NwYW5BcnIgPSBbXTtcclxuICAgICAgICBjb25zdCByZWYgPSB0YWJsZVBsdWdpbi5fcmVmID0ge19pOiAwLCBjczogbnVsbCwgY2U6IG51bGwsIHJzOiBudWxsLCByZTogbnVsbH07XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSByb3dzLmxlbmd0aCwgY2VsbHMsIGNvbFNwYW47IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBjZWxscyA9IHJvd3NbaV0uY2VsbHM7XHJcbiAgICAgICAgICAgIGNvbFNwYW4gPSAwO1xyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgYyA9IDAsIGNMZW4gPSBjZWxscy5sZW5ndGgsIGNlbGwsIGxvZ2NhbEluZGV4LCBjcywgcnM7IGMgPCBjTGVuOyBjKyspIHtcclxuICAgICAgICAgICAgICAgIGNlbGwgPSBjZWxsc1tjXTtcclxuICAgICAgICAgICAgICAgIGNzID0gY2VsbC5jb2xTcGFuIC0gMTtcclxuICAgICAgICAgICAgICAgIHJzID0gY2VsbC5yb3dTcGFuIC0gMTtcclxuICAgICAgICAgICAgICAgIGxvZ2NhbEluZGV4ID0gYyArIGNvbFNwYW47XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHNwYW5JbmRleC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgciA9IDAsIGFycjsgciA8IHNwYW5JbmRleC5sZW5ndGg7IHIrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcnIgPSBzcGFuSW5kZXhbcl07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcnIucm93ID4gaSkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2djYWxJbmRleCA+PSBhcnIuaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbFNwYW4gKz0gYXJyLmNzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nY2FsSW5kZXggKz0gYXJyLmNzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnJzIC09IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIucm93ID0gaSArIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJyLnJzIDwgMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYW5JbmRleC5zcGxpY2UociwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci0tO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT09IGNMZW4gLSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIucnMgLT0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyci5yb3cgPSBpICsgMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcnIucnMgPCAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhbkluZGV4LnNwbGljZShyLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLS07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGZpbmRTZWxlY3RlZENlbGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2VsbCA9PT0gc3RhcnRDZWxsIHx8IGNlbGwgPT09IGVuZENlbGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmLmNzID0gcmVmLmNzICE9PSBudWxsICYmIHJlZi5jcyA8IGxvZ2NhbEluZGV4ID8gcmVmLmNzIDogbG9nY2FsSW5kZXg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZi5jZSA9IHJlZi5jZSAhPT0gbnVsbCAmJiByZWYuY2UgPiBsb2djYWxJbmRleCArIGNzID8gcmVmLmNlIDogbG9nY2FsSW5kZXggKyBjcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmLnJzID0gcmVmLnJzICE9PSBudWxsICYmIHJlZi5ycyA8IGkgPyByZWYucnMgOiBpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWYucmUgPSByZWYucmUgIT09IG51bGwgJiYgcmVmLnJlID4gaSArIHJzID8gcmVmLnJlIDogaSArIHJzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWYuX2kgKz0gMTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZi5faSA9PT0gMikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5kU2VsZWN0ZWRDZWxsID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwYW5JbmRleCA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByb3dTcGFuQXJyID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAtMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh1dGlsLmdldE92ZXJsYXBSYW5nZUF0SW5kZXgocmVmLmNzLCByZWYuY2UsIGxvZ2NhbEluZGV4LCBsb2djYWxJbmRleCArIGNzKSAmJiB1dGlsLmdldE92ZXJsYXBSYW5nZUF0SW5kZXgocmVmLnJzLCByZWYucmUsIGksIGkgKyBycykpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdDcyA9IHJlZi5jcyA8IGxvZ2NhbEluZGV4ID8gcmVmLmNzIDogbG9nY2FsSW5kZXg7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3Q2UgPSByZWYuY2UgPiBsb2djYWxJbmRleCArIGNzID8gcmVmLmNlIDogbG9nY2FsSW5kZXggKyBjcztcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdScyA9IHJlZi5ycyA8IGkgPyByZWYucnMgOiBpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1JlID0gcmVmLnJlID4gaSArIHJzID8gcmVmLnJlIDogaSArIHJzO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVmLmNzICE9PSBuZXdDcyB8fCByZWYuY2UgIT09IG5ld0NlIHx8IHJlZi5ycyAhPT0gbmV3UnMgfHwgcmVmLnJlICE9PSBuZXdSZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWYuY3MgPSBuZXdDcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmLmNlID0gbmV3Q2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZi5ycyA9IG5ld1JzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWYucmUgPSBuZXdSZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaSA9IC0xO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgc3BhbkluZGV4ID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd1NwYW5BcnIgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICB1dGlsLmFkZENsYXNzKGNlbGwsICdzZS10YWJsZS1zZWxlY3RlZC1jZWxsJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHJzID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJvd1NwYW5BcnIucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBsb2djYWxJbmRleCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3M6IGNzICsgMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcnM6IHJzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByb3c6IC0xXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY29sU3BhbiArPSBjZWxsLmNvbFNwYW4gLSAxO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBzcGFuSW5kZXggPSBzcGFuSW5kZXguY29uY2F0KHJvd1NwYW5BcnIpLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtyZXR1cm4gYS5pbmRleCAtIGIuaW5kZXg7fSk7XHJcbiAgICAgICAgICAgIHJvd1NwYW5BcnIgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIF9yZW1vdmVFdmVudHM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zdCB0YWJsZVBsdWdpbiA9IHRoaXMucGx1Z2lucy50YWJsZTtcclxuXHJcbiAgICAgICAgaWYgKHRhYmxlUGx1Z2luLl9pbml0QmluZCkge1xyXG4gICAgICAgICAgICB0aGlzLl93ZC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCB0YWJsZVBsdWdpbi5faW5pdEJpbmQpO1xyXG4gICAgICAgICAgICB0YWJsZVBsdWdpbi5faW5pdEJpbmQgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRhYmxlUGx1Z2luLl9iaW5kT25TZWxlY3QpIHtcclxuICAgICAgICAgICAgdGhpcy5fd2QucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGFibGVQbHVnaW4uX2JpbmRPblNlbGVjdCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3dkLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRhYmxlUGx1Z2luLl9iaW5kT25TZWxlY3QpO1xyXG4gICAgICAgICAgICB0YWJsZVBsdWdpbi5fYmluZE9uU2VsZWN0ID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0YWJsZVBsdWdpbi5fYmluZE9mZlNlbGVjdCkge1xyXG4gICAgICAgICAgICB0aGlzLl93ZC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGFibGVQbHVnaW4uX2JpbmRPZmZTZWxlY3QpO1xyXG4gICAgICAgICAgICB0YWJsZVBsdWdpbi5fYmluZE9mZlNlbGVjdCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGFibGVQbHVnaW4uX2JpbmRPZmZTaGlmdCkge1xyXG4gICAgICAgICAgICB0aGlzLl93ZC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRhYmxlUGx1Z2luLl9iaW5kT2ZmU2hpZnQpO1xyXG4gICAgICAgICAgICB0YWJsZVBsdWdpbi5fYmluZE9mZlNoaWZ0ID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIF9pbml0QmluZDogbnVsbCxcclxuICAgIG9uVGFibGVDZWxsTXVsdGlTZWxlY3Q6IGZ1bmN0aW9uICh0ZEVsZW1lbnQsIHNoaWZ0KSB7XHJcbiAgICAgICAgY29uc3QgdGFibGVQbHVnaW4gPSB0aGlzLnBsdWdpbnMudGFibGU7XHJcblxyXG4gICAgICAgIHRhYmxlUGx1Z2luLl9yZW1vdmVFdmVudHMuY2FsbCh0aGlzKTtcclxuICAgICAgICB0aGlzLmNvbnRyb2xsZXJzT2ZmKCk7XHJcblxyXG4gICAgICAgIHRhYmxlUGx1Z2luLl9zaGlmdCA9IHNoaWZ0O1xyXG4gICAgICAgIHRhYmxlUGx1Z2luLl9maXhlZENlbGwgPSB0ZEVsZW1lbnQ7XHJcbiAgICAgICAgdGFibGVQbHVnaW4uX2ZpeGVkQ2VsbE5hbWUgPSB0ZEVsZW1lbnQubm9kZU5hbWU7XHJcbiAgICAgICAgdGFibGVQbHVnaW4uX3NlbGVjdGVkVGFibGUgPSB0aGlzLnV0aWwuZ2V0UGFyZW50RWxlbWVudCh0ZEVsZW1lbnQsICdUQUJMRScpO1xyXG5cclxuICAgICAgICBjb25zdCBzZWxlY3RlZENlbGxzID0gdGFibGVQbHVnaW4uX3NlbGVjdGVkVGFibGUucXVlcnlTZWxlY3RvckFsbCgnLnNlLXRhYmxlLXNlbGVjdGVkLWNlbGwnKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gc2VsZWN0ZWRDZWxscy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLnV0aWwucmVtb3ZlQ2xhc3Moc2VsZWN0ZWRDZWxsc1tpXSwgJ3NlLXRhYmxlLXNlbGVjdGVkLWNlbGwnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXRpbC5hZGRDbGFzcyh0ZEVsZW1lbnQsICdzZS10YWJsZS1zZWxlY3RlZC1jZWxsJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGFibGVQbHVnaW4uX2JpbmRPblNlbGVjdCA9IHRhYmxlUGx1Z2luLl9vbkNlbGxNdWx0aVNlbGVjdC5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRhYmxlUGx1Z2luLl9iaW5kT2ZmU2VsZWN0ID0gdGFibGVQbHVnaW4uX29mZkNlbGxNdWx0aVNlbGVjdC5iaW5kKHRoaXMpO1xyXG5cclxuICAgICAgICBpZiAoIXNoaWZ0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3dkLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRhYmxlUGx1Z2luLl9iaW5kT25TZWxlY3QsIGZhbHNlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0YWJsZVBsdWdpbi5fYmluZE9mZlNoaWZ0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyc09uKHRoaXMuY29udGV4dC50YWJsZS5yZXNpemVEaXYsIHRoaXMuY29udGV4dC50YWJsZS50YWJsZUNvbnRyb2xsZXIsIHRoaXMucGx1Z2lucy50YWJsZS5pbml0LmJpbmQodGhpcyksIHRkRWxlbWVudCwgJ3RhYmxlJyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRhYmxlUGx1Z2luLl9yZWYpIHRoaXMuY29udHJvbGxlcnNPZmYoKTtcclxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fd2QuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0YWJsZVBsdWdpbi5fYmluZE9mZlNoaWZ0LCBmYWxzZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3dkLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRhYmxlUGx1Z2luLl9iaW5kT25TZWxlY3QsIGZhbHNlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3dkLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0YWJsZVBsdWdpbi5fYmluZE9mZlNlbGVjdCwgZmFsc2UpO1xyXG4gICAgICAgIHRhYmxlUGx1Z2luLl9pbml0QmluZCA9IHRhYmxlUGx1Z2luLmluaXQuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLl93ZC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCB0YWJsZVBsdWdpbi5faW5pdEJpbmQsIGZhbHNlKTtcclxuICAgIH0sXHJcblxyXG4gICAgb25DbGlja190YWJsZUNvbnRyb2xsZXI6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29tbWFuZCcpID8gZS50YXJnZXQgOiBlLnRhcmdldC5wYXJlbnROb2RlO1xyXG5cclxuICAgICAgICBpZiAodGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGlzYWJsZWQnKSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCBjb21tYW5kID0gdGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1jb21tYW5kJyk7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXZhbHVlJyk7XHJcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gdGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1vcHRpb24nKTtcclxuICAgICAgICBjb25zdCB0YWJsZVBsdWdpbiA9IHRoaXMucGx1Z2lucy50YWJsZTtcclxuICAgICAgICBcclxuICAgICAgICBpZiAodHlwZW9mIHRhYmxlUGx1Z2luLl9jbG9zZVNwbGl0TWVudSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB0YWJsZVBsdWdpbi5fY2xvc2VTcGxpdE1lbnUoKTtcclxuICAgICAgICAgICAgaWYgKGNvbW1hbmQgPT09ICdvbnNwbGl0JykgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFjb21tYW5kKSByZXR1cm47XHJcblxyXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBjb25zdCBjb250ZXh0VGFibGUgPSB0aGlzLmNvbnRleHQudGFibGU7XHJcblxyXG4gICAgICAgIHN3aXRjaCAoY29tbWFuZCkge1xyXG4gICAgICAgICAgICBjYXNlICdpbnNlcnQnOlxyXG4gICAgICAgICAgICBjYXNlICdkZWxldGUnOlxyXG4gICAgICAgICAgICAgICAgdGFibGVQbHVnaW4uZWRpdFRhYmxlLmNhbGwodGhpcywgdmFsdWUsIG9wdGlvbik7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaGVhZGVyJzpcclxuICAgICAgICAgICAgICAgIHRhYmxlUGx1Z2luLnRvZ2dsZUhlYWRlci5jYWxsKHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ29uc3BsaXQnOlxyXG4gICAgICAgICAgICAgICAgdGFibGVQbHVnaW4ub3BlblNwbGl0TWVudS5jYWxsKHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NwbGl0JzpcclxuICAgICAgICAgICAgICAgIHRhYmxlUGx1Z2luLnNwbGl0Q2VsbHMuY2FsbCh0aGlzLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbWVyZ2UnOlxyXG4gICAgICAgICAgICAgICAgdGFibGVQbHVnaW4ubWVyZ2VDZWxscy5jYWxsKHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3Jlc2l6ZSc6XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0VGFibGUuX21heFdpZHRoID0gIWNvbnRleHRUYWJsZS5fbWF4V2lkdGg7XHJcbiAgICAgICAgICAgICAgICB0YWJsZVBsdWdpbi5zZXRUYWJsZVN0eWxlLmNhbGwodGhpcywgJ3dpZHRoJyk7XHJcbiAgICAgICAgICAgICAgICB0YWJsZVBsdWdpbi5zZXRQb3NpdGlvbkNvbnRyb2xsZXJUb3AuY2FsbCh0aGlzLCBjb250ZXh0VGFibGUuX2VsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgdGFibGVQbHVnaW4uc2V0UG9zaXRpb25Db250cm9sbGVyRGl2LmNhbGwodGhpcywgY29udGV4dFRhYmxlLl90ZEVsZW1lbnQsIHRhYmxlUGx1Z2luLl9zaGlmdCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbGF5b3V0JzpcclxuICAgICAgICAgICAgICAgIGNvbnRleHRUYWJsZS5fZml4ZWRDb2x1bW4gPSAhY29udGV4dFRhYmxlLl9maXhlZENvbHVtbjtcclxuICAgICAgICAgICAgICAgIHRhYmxlUGx1Z2luLnNldFRhYmxlU3R5bGUuY2FsbCh0aGlzLCAnY29sdW1uJyk7XHJcbiAgICAgICAgICAgICAgICB0YWJsZVBsdWdpbi5zZXRQb3NpdGlvbkNvbnRyb2xsZXJUb3AuY2FsbCh0aGlzLCBjb250ZXh0VGFibGUuX2VsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgdGFibGVQbHVnaW4uc2V0UG9zaXRpb25Db250cm9sbGVyRGl2LmNhbGwodGhpcywgY29udGV4dFRhYmxlLl90ZEVsZW1lbnQsIHRhYmxlUGx1Z2luLl9zaGlmdCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAncmVtb3ZlJzpcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVtcHR5RGl2ID0gY29udGV4dFRhYmxlLl9lbGVtZW50LnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnV0aWwucmVtb3ZlSXRlbShjb250ZXh0VGFibGUuX2VsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyc09mZigpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChlbXB0eURpdiAhPT0gdGhpcy5jb250ZXh0LmVsZW1lbnQud3lzaXd5ZykgdGhpcy51dGlsLnJlbW92ZUl0ZW1BbGxQYXJlbnRzKGVtcHR5RGl2LCBmdW5jdGlvbiAoY3VycmVudCkgeyByZXR1cm4gY3VycmVudC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMDsgfSwgbnVsbCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBoaXN0b3J5IHN0YWNrXHJcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2goZmFsc2UpO1xyXG4gICAgfVxyXG59O1xyXG4iLCIvKlxyXG4gKiB3eXNpd3lnIHdlYiBlZGl0b3JcclxuICpcclxuICogc3VuZWRpdG9yLmpzXHJcbiAqIENvcHlyaWdodCAyMDE3IEppSG9uZyBMZWUuXHJcbiAqIE1JVCBsaWNlbnNlLlxyXG4gKi9cclxuJ3VzZSBzdHJpY3QnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgbmFtZTogJ2Zvcm1hdEJsb2NrJyxcclxuICAgIGRpc3BsYXk6ICdzdWJtZW51JyxcclxuICAgIGFkZDogZnVuY3Rpb24gKGNvcmUsIHRhcmdldEVsZW1lbnQpIHtcclxuICAgICAgICBjb25zdCBjb250ZXh0ID0gY29yZS5jb250ZXh0O1xyXG4gICAgICAgIGNvbnRleHQuZm9ybWF0QmxvY2sgPSB7XHJcbiAgICAgICAgICAgIHRhcmdldFRleHQ6IHRhcmdldEVsZW1lbnQucXVlcnlTZWxlY3RvcignLnR4dCcpLFxyXG4gICAgICAgICAgICB0YXJnZXRUb29sdGlwOiB0YXJnZXRFbGVtZW50LnBhcmVudE5vZGUucXVlcnlTZWxlY3RvcignLnNlLXRvb2x0aXAtdGV4dCcpLFxyXG4gICAgICAgICAgICBfZm9ybWF0TGlzdDogbnVsbCxcclxuICAgICAgICAgICAgY3VycmVudEZvcm1hdDogJydcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvKiogc2V0IHN1Ym1lbnUgKi9cclxuICAgICAgICBsZXQgbGlzdERpdiA9IHRoaXMuc2V0U3VibWVudShjb3JlKTtcclxuXHJcbiAgICAgICAgLyoqIGFkZCBldmVudCBsaXN0ZW5lcnMgKi9cclxuICAgICAgICBsaXN0RGl2LnF1ZXJ5U2VsZWN0b3IoJ3VsJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLnBpY2tVcC5iaW5kKGNvcmUpKTtcclxuICAgICAgICBjb250ZXh0LmZvcm1hdEJsb2NrLl9mb3JtYXRMaXN0ID0gbGlzdERpdi5xdWVyeVNlbGVjdG9yQWxsKCdsaSBidXR0b24nKTtcclxuXHJcbiAgICAgICAgLyoqIGFwcGVuZCB0YXJnZXQgYnV0dG9uIG1lbnUgKi9cclxuICAgICAgICBjb3JlLmluaXRNZW51VGFyZ2V0KHRoaXMubmFtZSwgdGFyZ2V0RWxlbWVudCwgbGlzdERpdik7XHJcblxyXG4gICAgICAgIC8qKiBlbXB0eSBtZW1vcnkgKi9cclxuICAgICAgICBsaXN0RGl2ID0gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0U3VibWVudTogZnVuY3Rpb24gKGNvcmUpIHtcclxuICAgICAgICBjb25zdCBvcHRpb24gPSBjb3JlLm9wdGlvbnM7XHJcbiAgICAgICAgY29uc3QgbGFuZ190b29sYmFyID0gY29yZS5sYW5nLnRvb2xiYXI7XHJcbiAgICAgICAgY29uc3QgbGlzdERpdiA9IGNvcmUudXRpbC5jcmVhdGVFbGVtZW50KCdESVYnKTtcclxuICAgICAgICBsaXN0RGl2LmNsYXNzTmFtZSA9ICdzZS1zdWJtZW51IHNlLWxpc3QtbGF5ZXIgc2UtbGlzdC1mb3JtYXQnO1xyXG5cclxuICAgICAgICBjb25zdCBkZWZhdWx0Rm9ybWF0cyA9IFsncCcsICdkaXYnLCAnYmxvY2txdW90ZScsICdwcmUnLCAnaDEnLCAnaDInLCAnaDMnLCAnaDQnLCAnaDUnLCAnaDYnXTtcclxuICAgICAgICBjb25zdCBmb3JtYXRMaXN0ID0gIW9wdGlvbi5mb3JtYXRzIHx8IG9wdGlvbi5mb3JtYXRzLmxlbmd0aCA9PT0gMCA/IGRlZmF1bHRGb3JtYXRzIDogb3B0aW9uLmZvcm1hdHM7XHJcblxyXG4gICAgICAgIGxldCBsaXN0ID0gJzxkaXYgY2xhc3M9XCJzZS1saXN0LWlubmVyXCI+PHVsIGNsYXNzPVwic2UtbGlzdC1iYXNpY1wiPic7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGZvcm1hdExpc3QubGVuZ3RoLCBmb3JtYXQsIHRhZ05hbWUsIGNvbW1hbmQsIG5hbWUsIGgsIGF0dHJzLCBjbGFzc05hbWU7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXRMaXN0W2ldO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBmb3JtYXQgPT09ICdzdHJpbmcnICYmIGRlZmF1bHRGb3JtYXRzLmluZGV4T2YoZm9ybWF0KSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICB0YWdOYW1lID0gZm9ybWF0LnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgICAgICBjb21tYW5kID0gdGFnTmFtZSA9PT0gJ2Jsb2NrcXVvdGUnID8gJ3JhbmdlJyA6IHRhZ05hbWUgPT09ICdwcmUnID8gJ2ZyZWUnIDogJ3JlcGxhY2UnO1xyXG4gICAgICAgICAgICAgICAgaCA9IC9eaC8udGVzdCh0YWdOYW1lKSA/IHRhZ05hbWUubWF0Y2goL1xcZCsvKVswXSA6ICcnO1xyXG4gICAgICAgICAgICAgICAgbmFtZSA9IGxhbmdfdG9vbGJhclsndGFnXycgKyAoaCA/ICdoJyA6IHRhZ05hbWUpXSArIGg7XHJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSAnJztcclxuICAgICAgICAgICAgICAgIGF0dHJzID0gJyc7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0YWdOYW1lID0gZm9ybWF0LnRhZy50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgICAgY29tbWFuZCA9IGZvcm1hdC5jb21tYW5kO1xyXG4gICAgICAgICAgICAgICAgbmFtZSA9IGZvcm1hdC5uYW1lIHx8IHRhZ05hbWU7XHJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSBmb3JtYXQuY2xhc3M7XHJcbiAgICAgICAgICAgICAgICBhdHRycyA9IGNsYXNzTmFtZSA/ICcgY2xhc3M9XCInICsgY2xhc3NOYW1lICsgJ1wiJyA6ICcnO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsaXN0ICs9ICc8bGk+JyArXHJcbiAgICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJzZS1idG4tbGlzdFwiIGRhdGEtY29tbWFuZD1cIicgKyBjb21tYW5kICsgJ1wiIGRhdGEtdmFsdWU9XCInICsgdGFnTmFtZSArICdcIiBkYXRhLWNsYXNzPVwiJyArIGNsYXNzTmFtZSArICdcIiB0aXRsZT1cIicgKyBuYW1lICsgJ1wiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8JyArIHRhZ05hbWUgKyBhdHRycyArICc+JyArIG5hbWUgKyAnPC8nICsgdGFnTmFtZSArICc+JyArXHJcbiAgICAgICAgICAgICAgICAnPC9idXR0b24+PC9saT4nO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsaXN0ICs9ICc8L3VsPjwvZGl2Pic7XHJcblxyXG4gICAgICAgIGxpc3REaXYuaW5uZXJIVE1MID0gbGlzdDtcclxuXHJcbiAgICAgICAgcmV0dXJuIGxpc3REaXY7XHJcbiAgICB9LFxyXG5cclxuICAgICAvKipcclxuICAgICAqIEBPdmVycmlkZSBjb3JlXHJcbiAgICAgKi9cclxuICAgIGFjdGl2ZTogZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICBsZXQgZm9ybWF0VGl0bGUgPSB0aGlzLmxhbmcudG9vbGJhci5mb3JtYXRzO1xyXG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuY29udGV4dC5mb3JtYXRCbG9jay50YXJnZXRUZXh0O1xyXG5cclxuICAgICAgICBpZiAoIWVsZW1lbnQpIHtcclxuICAgICAgICAgICAgdGhpcy51dGlsLmNoYW5nZVR4dCh0YXJnZXQsIGZvcm1hdFRpdGxlKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudXRpbC5pc0Zvcm1hdEVsZW1lbnQoZWxlbWVudCkpIHtcclxuICAgICAgICAgICAgY29uc3QgZm9ybWF0Q29udGV4dCA9IHRoaXMuY29udGV4dC5mb3JtYXRCbG9jaztcclxuICAgICAgICAgICAgY29uc3QgZm9ybWF0TGlzdCA9IGZvcm1hdENvbnRleHQuX2Zvcm1hdExpc3Q7XHJcbiAgICAgICAgICAgIGNvbnN0IG5vZGVOYW1lID0gZWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICBjb25zdCBjbGFzc05hbWUgPSAoZWxlbWVudC5jbGFzc05hbWUubWF0Y2goLyhcXHN8XilfX3NlX19mb3JtYXRfX1teXFxzXSsvKSB8fCBbJyddKVswXS50cmltKCk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gZm9ybWF0TGlzdC5sZW5ndGgsIGY7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgZiA9IGZvcm1hdExpc3RbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZU5hbWUgPT09IGYuZ2V0QXR0cmlidXRlKCdkYXRhLXZhbHVlJykgJiYgY2xhc3NOYW1lID09PSBmLmdldEF0dHJpYnV0ZSgnZGF0YS1jbGFzcycpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0VGl0bGUgPSBmLnRpdGxlO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnV0aWwuY2hhbmdlVHh0KHRhcmdldCwgZm9ybWF0VGl0bGUpO1xyXG4gICAgICAgICAgICB0YXJnZXQuc2V0QXR0cmlidXRlKCdkYXRhLXZhbHVlJywgbm9kZU5hbWUpO1xyXG4gICAgICAgICAgICB0YXJnZXQuc2V0QXR0cmlidXRlKCdkYXRhLWNsYXNzJywgY2xhc3NOYW1lKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICAgLyoqXHJcbiAgICAgKiBAT3ZlcnJpZGUgc3VibWVudVxyXG4gICAgICovXHJcbiAgICBvbjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnN0IGZvcm1hdENvbnRleHQgPSB0aGlzLmNvbnRleHQuZm9ybWF0QmxvY2s7XHJcbiAgICAgICAgY29uc3QgZm9ybWF0TGlzdCA9IGZvcm1hdENvbnRleHQuX2Zvcm1hdExpc3Q7XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZm9ybWF0Q29udGV4dC50YXJnZXRUZXh0O1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRGb3JtYXQgPSAodGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS12YWx1ZScpIHx8ICcnKSArICh0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLWNsYXNzJykgfHwgJycpO1xyXG5cclxuICAgICAgICBpZiAoY3VycmVudEZvcm1hdCAhPT0gZm9ybWF0Q29udGV4dC5jdXJyZW50Rm9ybWF0KSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBmb3JtYXRMaXN0Lmxlbmd0aCwgZjsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBmID0gZm9ybWF0TGlzdFtpXTtcclxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Rm9ybWF0ID09PSBmLmdldEF0dHJpYnV0ZSgnZGF0YS12YWx1ZScpICsgZi5nZXRBdHRyaWJ1dGUoJ2RhdGEtY2xhc3MnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXRpbC5hZGRDbGFzcyhmLCAnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXRpbC5yZW1vdmVDbGFzcyhmLCAnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZvcm1hdENvbnRleHQuY3VycmVudEZvcm1hdCA9IGN1cnJlbnRGb3JtYXQ7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBwaWNrVXA6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgICAgIGxldCB0YXJnZXQgPSBlLnRhcmdldDtcclxuICAgICAgICBsZXQgY29tbWFuZCA9IG51bGwsIHZhbHVlID0gbnVsbCwgdGFnID0gbnVsbCwgY2xhc3NOYW1lID0gJyc7XHJcbiAgICAgICAgXHJcbiAgICAgICAgd2hpbGUgKCFjb21tYW5kICYmICEvVUwvaS50ZXN0KHRhcmdldC50YWdOYW1lKSkge1xyXG4gICAgICAgICAgICBjb21tYW5kID0gdGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1jb21tYW5kJyk7XHJcbiAgICAgICAgICAgIHZhbHVlID0gdGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS12YWx1ZScpO1xyXG4gICAgICAgICAgICBjbGFzc05hbWUgPSB0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLWNsYXNzJyk7XHJcbiAgICAgICAgICAgIGlmIChjb21tYW5kKSB7XHJcbiAgICAgICAgICAgICAgICB0YWcgPSB0YXJnZXQuZmlyc3RDaGlsZDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFjb21tYW5kKSByZXR1cm47XHJcblxyXG4gICAgICAgIC8vIGJsb2NrcXVvdGVcclxuICAgICAgICBpZiAoY29tbWFuZCA9PT0gJ3JhbmdlJykge1xyXG4gICAgICAgICAgICBjb25zdCByYW5nZUVsZW1lbnQgPSB0YWcuY2xvbmVOb2RlKGZhbHNlKTtcclxuICAgICAgICAgICAgdGhpcy5hcHBseVJhbmdlRm9ybWF0RWxlbWVudChyYW5nZUVsZW1lbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBmcmVlLCByZXBsYWNlXHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCByYW5nZSA9IHRoaXMuZ2V0UmFuZ2UoKTtcclxuICAgICAgICAgICAgbGV0IHNlbGVjdGVkRm9ybXN0cyA9IHRoaXMuZ2V0U2VsZWN0ZWRFbGVtZW50c0FuZENvbXBvbmVudHMoZmFsc2UpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHNlbGVjdGVkRm9ybXN0cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRSYW5nZV9hZGRMaW5lKHJhbmdlLCBudWxsKTtcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkRm9ybXN0cyA9IHRoaXMuZ2V0U2VsZWN0ZWRFbGVtZW50c0FuZENvbXBvbmVudHMoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkRm9ybXN0cy5sZW5ndGggPT09IDApIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3Qgc3RhcnRPZmZzZXQgPSByYW5nZS5zdGFydE9mZnNldDtcclxuICAgICAgICAgICAgY29uc3QgZW5kT2Zmc2V0ID0gcmFuZ2UuZW5kT2Zmc2V0O1xyXG5cclxuICAgICAgICAgICAgY29uc3QgdXRpbCA9IHRoaXMudXRpbDtcclxuICAgICAgICAgICAgbGV0IGZpcnN0ID0gc2VsZWN0ZWRGb3Jtc3RzWzBdO1xyXG4gICAgICAgICAgICBsZXQgbGFzdCA9IHNlbGVjdGVkRm9ybXN0c1tzZWxlY3RlZEZvcm1zdHMubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0UGF0aCA9IHV0aWwuZ2V0Tm9kZVBhdGgocmFuZ2Uuc3RhcnRDb250YWluZXIsIGZpcnN0LCBudWxsLCBudWxsKTtcclxuICAgICAgICAgICAgY29uc3QgbGFzdFBhdGggPSB1dGlsLmdldE5vZGVQYXRoKHJhbmdlLmVuZENvbnRhaW5lciwgbGFzdCwgbnVsbCwgbnVsbCk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyByZW1vdmUgc2VsZWN0ZWQgbGlzdFxyXG4gICAgICAgICAgICBjb25zdCBybGlzdCA9IHRoaXMuZGV0YWNoTGlzdChzZWxlY3RlZEZvcm1zdHMsIGZhbHNlKTtcclxuICAgICAgICAgICAgaWYgKHJsaXN0LnNjKSBmaXJzdCA9IHJsaXN0LnNjO1xyXG4gICAgICAgICAgICBpZiAocmxpc3QuZWMpIGxhc3QgPSBybGlzdC5lYztcclxuXHJcbiAgICAgICAgICAgIC8vIGNoYW5nZSBmb3JtYXQgdGFnXHJcbiAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2UodXRpbC5nZXROb2RlRnJvbVBhdGgoZmlyc3RQYXRoLCBmaXJzdCksIHN0YXJ0T2Zmc2V0LCB1dGlsLmdldE5vZGVGcm9tUGF0aChsYXN0UGF0aCwgbGFzdCksIGVuZE9mZnNldCk7XHJcbiAgICAgICAgICAgIGNvbnN0IG1vZGlmaWVkRm9ybXN0cyA9IHRoaXMuZ2V0U2VsZWN0ZWRFbGVtZW50c0FuZENvbXBvbmVudHMoZmFsc2UpO1xyXG5cclxuICAgICAgICAgICAgLy8gZnJlZSBmb3JtYXRcclxuICAgICAgICAgICAgaWYgKGNvbW1hbmQgPT09ICdmcmVlJykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbGVuID0gbW9kaWZpZWRGb3Jtc3RzLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgICAgICBsZXQgcGFyZW50Tm9kZSA9IG1vZGlmaWVkRm9ybXN0c1tsZW5dLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgICAgICBsZXQgZnJlZUVsZW1lbnQgPSB0YWcuY2xvbmVOb2RlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZvY3VzRWxlbWVudCA9IGZyZWVFbGVtZW50O1xyXG4gICAgXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gbGVuLCBmLCBodG1sLCBiZWZvcmUsIG5leHQsIGlubmVyLCBpc0NvbXAsIGZpcnN0ID0gdHJ1ZTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICAgICAgICAgICAgICBmID0gbW9kaWZpZWRGb3Jtc3RzW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmID09PSAoIW1vZGlmaWVkRm9ybXN0c1tpICsgMV0gPyBudWxsIDogbW9kaWZpZWRGb3Jtc3RzW2kgKyAxXS5wYXJlbnROb2RlKSkgY29udGludWU7XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICBpc0NvbXAgPSB1dGlsLmlzQ29tcG9uZW50KGYpO1xyXG4gICAgICAgICAgICAgICAgICAgIGh0bWwgPSBpc0NvbXAgPyAnJyA6IGYuaW5uZXJIVE1MLnJlcGxhY2UoLyg/IT4pXFxzKyg/PTwpfFxcbi9nLCAnICcpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJlZm9yZSA9IHV0aWwuZ2V0UGFyZW50RWxlbWVudChmLCBmdW5jdGlvbiAoY3VycmVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudC5wYXJlbnROb2RlID09PSBwYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudE5vZGUgIT09IGYucGFyZW50Tm9kZSB8fCBpc0NvbXApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNGb3JtYXRFbGVtZW50KHBhcmVudE5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnROb2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGZyZWVFbGVtZW50LCBwYXJlbnROb2RlLm5leHRTaWJsaW5nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE5vZGUgPSBwYXJlbnROb2RlLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnROb2RlLmluc2VydEJlZm9yZShmcmVlRWxlbWVudCwgYmVmb3JlID8gYmVmb3JlLm5leHRTaWJsaW5nIDogbnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnROb2RlID0gZi5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0ID0gZnJlZUVsZW1lbnQubmV4dFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0ICYmIGZyZWVFbGVtZW50Lm5vZGVOYW1lID09PSBuZXh0Lm5vZGVOYW1lICYmIHV0aWwuaXNTYW1lQXR0cmlidXRlcyhmcmVlRWxlbWVudCwgbmV4dCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWVFbGVtZW50LmlubmVySFRNTCArPSAnPEJSPicgKyBuZXh0LmlubmVySFRNTDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlSXRlbShuZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJlZUVsZW1lbnQgPSB0YWcuY2xvbmVOb2RlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGlubmVyID0gZnJlZUVsZW1lbnQuaW5uZXJIVE1MO1xyXG4gICAgICAgICAgICAgICAgICAgIGZyZWVFbGVtZW50LmlubmVySFRNTCA9ICgoZmlyc3QgfHwgIWh0bWwgfHwgIWlubmVyIHx8IC88YnI+JC9pLnRlc3QoaHRtbCkpID8gaHRtbCA6IGh0bWwgKyAnPEJSPicpICsgaW5uZXI7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGZyZWVFbGVtZW50LCBmKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCA9IGYubmV4dFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0ICYmIGZyZWVFbGVtZW50Lm5vZGVOYW1lID09PSBuZXh0Lm5vZGVOYW1lICYmIHV0aWwuaXNTYW1lQXR0cmlidXRlcyhmcmVlRWxlbWVudCwgbmV4dCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWVFbGVtZW50LmlubmVySFRNTCArPSAnPEJSPicgKyBuZXh0LmlubmVySFRNTDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlSXRlbShuZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldiA9IGZyZWVFbGVtZW50LnByZXZpb3VzU2libGluZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXYgJiYgZnJlZUVsZW1lbnQubm9kZU5hbWUgPT09IHByZXYubm9kZU5hbWUgJiYgdXRpbC5pc1NhbWVBdHRyaWJ1dGVzKGZyZWVFbGVtZW50LCBwcmV2KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldi5pbm5lckhUTUwgKz0gJzxCUj4nICsgZnJlZUVsZW1lbnQuaW5uZXJIVE1MO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtKGZyZWVFbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0NvbXApIHV0aWwucmVtb3ZlSXRlbShmKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISFodG1sKSBmaXJzdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFJhbmdlKGZvY3VzRWxlbWVudCwgMCwgZm9jdXNFbGVtZW50LCAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyByZXBsYWNlIGZvcm1hdFxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBtb2RpZmllZEZvcm1zdHMubGVuZ3RoLCBub2RlLCBuZXdGb3JtYXQ7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUgPSBtb2RpZmllZEZvcm1zdHNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKChub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgIT09IHZhbHVlLnRvTG93ZXJDYXNlKCkgfHwgKG5vZGUuY2xhc3NOYW1lLm1hdGNoKC8oXFxzfF4pX19zZV9fZm9ybWF0X19bXlxcc10rLykgfHwgWycnXSlbMF0udHJpbSgpICE9PSBjbGFzc05hbWUpICYmICF1dGlsLmlzQ29tcG9uZW50KG5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0Zvcm1hdCA9IHRhZy5jbG9uZU5vZGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1dGlsLmNvcHlGb3JtYXRBdHRyaWJ1dGVzKG5ld0Zvcm1hdCwgbm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0Zvcm1hdC5pbm5lckhUTUwgPSBub2RlLmlubmVySFRNTDtcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKG5ld0Zvcm1hdCwgbm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IDApIGZpcnN0ID0gbmV3Rm9ybWF0IHx8IG5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IGxlbiAtIDEpIGxhc3QgPSBuZXdGb3JtYXQgfHwgbm9kZTtcclxuICAgICAgICAgICAgICAgICAgICBuZXdGb3JtYXQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFJhbmdlKHV0aWwuZ2V0Tm9kZUZyb21QYXRoKGZpcnN0UGF0aCwgZmlyc3QpLCBzdGFydE9mZnNldCwgdXRpbC5nZXROb2RlRnJvbVBhdGgobGFzdFBhdGgsIGxhc3QpLCBlbmRPZmZzZXQpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBoaXN0b3J5IHN0YWNrXHJcbiAgICAgICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoKGZhbHNlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc3VibWVudU9mZigpO1xyXG4gICAgfVxyXG59O1xyXG4iLCIvKlxyXG4gKiB3eXNpd3lnIHdlYiBlZGl0b3JcclxuICpcclxuICogc3VuZWRpdG9yLmpzXHJcbiAqIENvcHlyaWdodCAyMDE5NyBKaUhvbmcgTGVlLlxyXG4gKiBNSVQgbGljZW5zZS5cclxuICovXHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIG5hbWU6ICdsaW5lSGVpZ2h0JyxcclxuICAgIGRpc3BsYXk6ICdzdWJtZW51JyxcclxuICAgIGFkZDogZnVuY3Rpb24gKGNvcmUsIHRhcmdldEVsZW1lbnQpIHtcclxuICAgICAgICBjb25zdCBjb250ZXh0ID0gY29yZS5jb250ZXh0O1xyXG4gICAgICAgIGNvbnRleHQubGluZUhlaWdodCA9IHtcclxuICAgICAgICAgICAgX3NpemVMaXN0OiBudWxsLFxyXG4gICAgICAgICAgICBjdXJyZW50U2l6ZTogLTFcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvKiogc2V0IHN1Ym1lbnUgKi9cclxuICAgICAgICBsZXQgbGlzdERpdiA9IHRoaXMuc2V0U3VibWVudShjb3JlKTtcclxuICAgICAgICBsZXQgbGlzdFVsID0gbGlzdERpdi5xdWVyeVNlbGVjdG9yKCd1bCcpO1xyXG5cclxuICAgICAgICAvKiogYWRkIGV2ZW50IGxpc3RlbmVycyAqL1xyXG4gICAgICAgIGxpc3RVbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMucGlja3VwLmJpbmQoY29yZSkpO1xyXG5cclxuICAgICAgICBjb250ZXh0LmxpbmVIZWlnaHQuX3NpemVMaXN0ID0gbGlzdFVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ2xpIGJ1dHRvbicpO1xyXG5cclxuICAgICAgICAvKiogYXBwZW5kIHRhcmdldCBidXR0b24gbWVudSAqL1xyXG4gICAgICAgIGNvcmUuaW5pdE1lbnVUYXJnZXQodGhpcy5uYW1lLCB0YXJnZXRFbGVtZW50LCBsaXN0RGl2KTtcclxuXHJcbiAgICAgICAgLyoqIGVtcHR5IG1lbW9yeSAqL1xyXG4gICAgICAgIGxpc3REaXYgPSBudWxsLCBsaXN0VWwgPSBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdWJtZW51OiBmdW5jdGlvbiAoY29yZSkge1xyXG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IGNvcmUub3B0aW9ucztcclxuICAgICAgICBjb25zdCBsYW5nID0gY29yZS5sYW5nO1xyXG4gICAgICAgIGNvbnN0IGxpc3REaXYgPSBjb3JlLnV0aWwuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcblxyXG4gICAgICAgIGxpc3REaXYuY2xhc3NOYW1lID0gJ3NlLXN1Ym1lbnUgc2UtbGlzdC1sYXllcic7XHJcblxyXG4gICAgICAgIGNvbnN0IHNpemVMaXN0ID0gIW9wdGlvbi5saW5lSGVpZ2h0cyA/IFtcclxuICAgICAgICAgICAge3RleHQ6ICcxJywgdmFsdWU6IDF9LFxyXG4gICAgICAgICAgICB7dGV4dDogJzEuMTUnLCB2YWx1ZTogMS4xNX0sXHJcbiAgICAgICAgICAgIHt0ZXh0OiAnMS41JywgdmFsdWU6IDEuNX0sXHJcbiAgICAgICAgICAgIHt0ZXh0OiAnMicsIHZhbHVlOiAyfVxyXG4gICAgICAgIF0gOiBvcHRpb24ubGluZUhlaWdodHM7XHJcblxyXG4gICAgICAgIGxldCBsaXN0ID0gJzxkaXYgY2xhc3M9XCJzZS1saXN0LWlubmVyXCI+JyArXHJcbiAgICAgICAgICAgICAgICAnPHVsIGNsYXNzPVwic2UtbGlzdC1iYXNpY1wiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8bGk+PGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJkZWZhdWx0X3ZhbHVlIHNlLWJ0bi1saXN0XCIgdGl0bGU9XCInICsgbGFuZy50b29sYmFyLmRlZmF1bHQgKyAnXCI+KCcgKyBsYW5nLnRvb2xiYXIuZGVmYXVsdCArICcpPC9idXR0b24+PC9saT4nO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBzaXplTGlzdC5sZW5ndGgsIHNpemU7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBzaXplID0gc2l6ZUxpc3RbaV07XHJcbiAgICAgICAgICAgIGxpc3QgKz0gJzxsaT48YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInNlLWJ0bi1saXN0XCIgZGF0YS12YWx1ZT1cIicgKyBzaXplLnZhbHVlICsgJ1wiIHRpdGxlPVwiJyArIHNpemUudGV4dCArICdcIj4nICsgc2l6ZS50ZXh0ICsgJzwvYnV0dG9uPjwvbGk+JztcclxuICAgICAgICB9XHJcbiAgICAgICAgbGlzdCArPSAnPC91bD48L2Rpdj4nO1xyXG5cclxuICAgICAgICBsaXN0RGl2LmlubmVySFRNTCA9IGxpc3Q7XHJcblxyXG4gICAgICAgIHJldHVybiBsaXN0RGl2O1xyXG4gICAgfSxcclxuXHJcbiAgICAgLyoqXHJcbiAgICAgKiBAT3ZlcnJpZGUgc3VibWVudVxyXG4gICAgICovXHJcbiAgICBvbjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnN0IGxpbmVIZWlnaHRDb250ZXh0ID0gdGhpcy5jb250ZXh0LmxpbmVIZWlnaHQ7XHJcbiAgICAgICAgY29uc3Qgc2l6ZUxpc3QgPSBsaW5lSGVpZ2h0Q29udGV4dC5fc2l6ZUxpc3Q7XHJcbiAgICAgICAgY29uc3QgZm9ybWF0ID0gdGhpcy51dGlsLmdldEZvcm1hdEVsZW1lbnQodGhpcy5nZXRTZWxlY3Rpb25Ob2RlKCkpO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRTaXplID0gIWZvcm1hdCA/ICcnIDogZm9ybWF0LnN0eWxlLmxpbmVIZWlnaHQgKyAnJztcclxuXHJcbiAgICAgICAgaWYgKGN1cnJlbnRTaXplICE9PSBsaW5lSGVpZ2h0Q29udGV4dC5jdXJyZW50U2l6ZSkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gc2l6ZUxpc3QubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50U2l6ZSA9PT0gc2l6ZUxpc3RbaV0uZ2V0QXR0cmlidXRlKCdkYXRhLXZhbHVlJykpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnV0aWwuYWRkQ2xhc3Moc2l6ZUxpc3RbaV0sICdhY3RpdmUnKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51dGlsLnJlbW92ZUNsYXNzKHNpemVMaXN0W2ldLCAnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxpbmVIZWlnaHRDb250ZXh0LmN1cnJlbnRTaXplID0gY3VycmVudFNpemU7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBwaWNrdXA6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgaWYgKCEvXkJVVFRPTiQvaS50ZXN0KGUudGFyZ2V0LnRhZ05hbWUpKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgXHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXZhbHVlJykgfHwgJyc7XHJcbiAgICAgICAgY29uc3QgZm9ybWF0cyA9IHRoaXMuZ2V0U2VsZWN0ZWRFbGVtZW50cygpO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gZm9ybWF0cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBmb3JtYXRzW2ldLnN0eWxlLmxpbmVIZWlnaHQgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc3VibWVudU9mZigpO1xyXG5cclxuICAgICAgICAvLyBoaXN0b3J5IHN0YWNrXHJcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2goZmFsc2UpO1xyXG4gICAgfVxyXG59O1xyXG4iLCIvKlxyXG4gKiB3eXNpd3lnIHdlYiBlZGl0b3JcclxuICpcclxuICogc3VuZWRpdG9yLmpzXHJcbiAqIENvcHlyaWdodCAyMDE3IEppSG9uZyBMZWUuXHJcbiAqIE1JVCBsaWNlbnNlLlxyXG4gKi9cclxuJ3VzZSBzdHJpY3QnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgbmFtZTogJ3BhcmFncmFwaFN0eWxlJyxcclxuICAgIGRpc3BsYXk6ICdzdWJtZW51JyxcclxuICAgIGFkZDogZnVuY3Rpb24gKGNvcmUsIHRhcmdldEVsZW1lbnQpIHtcclxuICAgICAgICBjb25zdCBjb250ZXh0ID0gY29yZS5jb250ZXh0O1xyXG4gICAgICAgIGNvbnRleHQucGFyYWdyYXBoU3R5bGUgPSB7XHJcbiAgICAgICAgICAgIF9jbGFzc0xpc3Q6IG51bGxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvKiogc2V0IHN1Ym1lbnUgKi9cclxuICAgICAgICBsZXQgbGlzdERpdiA9IHRoaXMuc2V0U3VibWVudShjb3JlKTtcclxuXHJcbiAgICAgICAgLyoqIGFkZCBldmVudCBsaXN0ZW5lcnMgKi9cclxuICAgICAgICBsaXN0RGl2LnF1ZXJ5U2VsZWN0b3IoJ3VsJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLnBpY2tVcC5iaW5kKGNvcmUpKTtcclxuXHJcbiAgICAgICAgY29udGV4dC5wYXJhZ3JhcGhTdHlsZS5fY2xhc3NMaXN0ID0gbGlzdERpdi5xdWVyeVNlbGVjdG9yQWxsKCdsaSBidXR0b24nKTtcclxuXHJcbiAgICAgICAgLyoqIGFwcGVuZCB0YXJnZXQgYnV0dG9uIG1lbnUgKi9cclxuICAgICAgICBjb3JlLmluaXRNZW51VGFyZ2V0KHRoaXMubmFtZSwgdGFyZ2V0RWxlbWVudCwgbGlzdERpdik7XHJcblxyXG4gICAgICAgIC8qKiBlbXB0eSBtZW1vcnkgKi9cclxuICAgICAgICBsaXN0RGl2ID0gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0U3VibWVudTogZnVuY3Rpb24gKGNvcmUpIHtcclxuICAgICAgICBjb25zdCBvcHRpb24gPSBjb3JlLm9wdGlvbnM7XHJcbiAgICAgICAgY29uc3QgbGlzdERpdiA9IGNvcmUudXRpbC5jcmVhdGVFbGVtZW50KCdESVYnKTtcclxuICAgICAgICBsaXN0RGl2LmNsYXNzTmFtZSA9ICdzZS1zdWJtZW51IHNlLWxpc3QtbGF5ZXIgc2UtbGlzdC1mb3JtYXQnO1xyXG5cclxuICAgICAgICBjb25zdCBtZW51TGFuZyA9IGNvcmUubGFuZy5tZW51O1xyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRMaXN0ID0ge1xyXG4gICAgICAgICAgICBzcGFjZWQ6IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IG1lbnVMYW5nLnNwYWNlZCxcclxuICAgICAgICAgICAgICAgIGNsYXNzOiAnX19zZV9fcC1zcGFjZWQnLFxyXG4gICAgICAgICAgICAgICAgX2NsYXNzOiAnJ1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBib3JkZXJlZDoge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogbWVudUxhbmcuYm9yZGVyZWQsXHJcbiAgICAgICAgICAgICAgICBjbGFzczogJ19fc2VfX3AtYm9yZGVyZWQnLFxyXG4gICAgICAgICAgICAgICAgX2NsYXNzOiAnJ1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBuZW9uOiB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBtZW51TGFuZy5uZW9uLFxyXG4gICAgICAgICAgICAgICAgY2xhc3M6ICdfX3NlX19wLW5lb24nLFxyXG4gICAgICAgICAgICAgICAgX2NsYXNzOiAnJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBwYXJhZ3JhcGhTdHlsZXMgPSAhb3B0aW9uLnBhcmFncmFwaFN0eWxlcyB8fCBvcHRpb24ucGFyYWdyYXBoU3R5bGVzLmxlbmd0aCA9PT0gMCA/IFsnc3BhY2VkJywgJ2JvcmRlcmVkJywgJ25lb24nXSA6IG9wdGlvbi5wYXJhZ3JhcGhTdHlsZXM7XHJcblxyXG4gICAgICAgIGxldCBsaXN0ID0gJzxkaXYgY2xhc3M9XCJzZS1saXN0LWlubmVyXCI+PHVsIGNsYXNzPVwic2UtbGlzdC1iYXNpY1wiPic7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHBhcmFncmFwaFN0eWxlcy5sZW5ndGgsIHAsIG5hbWUsIGF0dHJzLCBfY2xhc3M7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBwID0gcGFyYWdyYXBoU3R5bGVzW2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBwID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGVmYXVsdFN0eWxlID0gZGVmYXVsdExpc3RbcC50b0xvd2VyQ2FzZSgpXTtcclxuICAgICAgICAgICAgICAgIGlmICghZGVmYXVsdFN0eWxlKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIHAgPSBkZWZhdWx0U3R5bGU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIG5hbWUgPSBwLm5hbWU7XHJcbiAgICAgICAgICAgIGF0dHJzID0gcC5jbGFzcyA/ICcgY2xhc3M9XCInICsgcC5jbGFzcyArICdcIicgOiAnJztcclxuICAgICAgICAgICAgX2NsYXNzID0gcC5fY2xhc3M7XHJcblxyXG4gICAgICAgICAgICBsaXN0ICs9ICc8bGk+JyArXHJcbiAgICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJzZS1idG4tbGlzdCcgKyAoX2NsYXNzID8gJyAnICsgX2NsYXNzOiAnJykgKyAnXCIgZGF0YS12YWx1ZT1cIicgKyBwLmNsYXNzICsgJ1wiIHRpdGxlPVwiJyArIG5hbWUgKyAnXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxkaXYnICsgYXR0cnMgKyAnPicgKyBuYW1lICsgJzwvZGl2PicgK1xyXG4gICAgICAgICAgICAgICAgJzwvYnV0dG9uPjwvbGk+JztcclxuICAgICAgICB9XHJcbiAgICAgICAgbGlzdCArPSAnPC91bD48L2Rpdj4nO1xyXG5cclxuICAgICAgICBsaXN0RGl2LmlubmVySFRNTCA9IGxpc3Q7XHJcblxyXG4gICAgICAgIHJldHVybiBsaXN0RGl2O1xyXG4gICAgfSxcclxuXHJcbiAgICAgLyoqXHJcbiAgICAgKiBAT3ZlcnJpZGUgc3VibWVudVxyXG4gICAgICovXHJcbiAgICBvbjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnN0IHBhcmFncmFwaENvbnRleHQgPSB0aGlzLmNvbnRleHQucGFyYWdyYXBoU3R5bGU7XHJcbiAgICAgICAgY29uc3QgcGFyYWdyYXBoTGlzdCA9IHBhcmFncmFwaENvbnRleHQuX2NsYXNzTGlzdDtcclxuICAgICAgICBjb25zdCBjdXJyZW50Rm9ybWF0ID0gdGhpcy51dGlsLmdldEZvcm1hdEVsZW1lbnQodGhpcy5nZXRTZWxlY3Rpb25Ob2RlKCkpO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gcGFyYWdyYXBoTGlzdC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy51dGlsLmhhc0NsYXNzKGN1cnJlbnRGb3JtYXQsIHBhcmFncmFwaExpc3RbaV0uZ2V0QXR0cmlidXRlKCdkYXRhLXZhbHVlJykpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnV0aWwuYWRkQ2xhc3MocGFyYWdyYXBoTGlzdFtpXSwgJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51dGlsLnJlbW92ZUNsYXNzKHBhcmFncmFwaExpc3RbaV0sICdhY3RpdmUnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgcGlja1VwOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgICAgICBsZXQgdGFyZ2V0ID0gZS50YXJnZXQ7XHJcbiAgICAgICAgbGV0IHZhbHVlID0gbnVsbDtcclxuICAgICAgICBcclxuICAgICAgICB3aGlsZSAoIS9eVUwkL2kudGVzdCh0YXJnZXQudGFnTmFtZSkpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSB0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXZhbHVlJyk7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSkgYnJlYWs7XHJcbiAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgc2VsZWN0ZWRGb3Jtc3RzID0gdGhpcy5nZXRTZWxlY3RlZEVsZW1lbnRzKCk7XHJcbiAgICAgICAgaWYgKHNlbGVjdGVkRm9ybXN0cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRSYW5nZV9hZGRMaW5lKHRoaXMuZ2V0UmFuZ2UoKSwgbnVsbCk7XHJcbiAgICAgICAgICAgIHNlbGVjdGVkRm9ybXN0cyA9IHRoaXMuZ2V0U2VsZWN0ZWRFbGVtZW50cygpO1xyXG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWRGb3Jtc3RzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gY2hhbmdlIGZvcm1hdCBjbGFzc1xyXG4gICAgICAgIGNvbnN0IHRvZ2dsZUNsYXNzID0gdGhpcy51dGlsLmhhc0NsYXNzKHRhcmdldCwgJ2FjdGl2ZScpID8gdGhpcy51dGlsLnJlbW92ZUNsYXNzLmJpbmQodGhpcy51dGlsKSA6IHRoaXMudXRpbC5hZGRDbGFzcy5iaW5kKHRoaXMudXRpbCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHNlbGVjdGVkRm9ybXN0cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICB0b2dnbGVDbGFzcyhzZWxlY3RlZEZvcm1zdHNbaV0sIHZhbHVlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc3VibWVudU9mZigpO1xyXG5cclxuICAgICAgICAvLyBoaXN0b3J5IHN0YWNrXHJcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2goZmFsc2UpO1xyXG4gICAgfVxyXG59O1xyXG4iLCIvKlxyXG4gKiB3eXNpd3lnIHdlYiBlZGl0b3JcclxuICpcclxuICogc3VuZWRpdG9yLmpzXHJcbiAqIENvcHlyaWdodCAyMDE3IEppSG9uZyBMZWUuXHJcbiAqIE1JVCBsaWNlbnNlLlxyXG4gKi9cclxuJ3VzZSBzdHJpY3QnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgbmFtZTogJ3RleHRTdHlsZScsXHJcbiAgICBkaXNwbGF5OiAnc3VibWVudScsXHJcbiAgICBhZGQ6IGZ1bmN0aW9uIChjb3JlLCB0YXJnZXRFbGVtZW50KSB7XHJcbiAgICAgICAgY29uc3QgY29udGV4dCA9IGNvcmUuY29udGV4dDtcclxuICAgICAgICBjb250ZXh0LnRleHRTdHlsZSA9IHtcclxuICAgICAgICAgICAgX3N0eWxlTGlzdDogbnVsbFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8qKiBzZXQgc3VibWVudSAqL1xyXG4gICAgICAgIGxldCBsaXN0RGl2ID0gdGhpcy5zZXRTdWJtZW51KGNvcmUpO1xyXG4gICAgICAgIGxldCBsaXN0VWwgPSBsaXN0RGl2LnF1ZXJ5U2VsZWN0b3IoJ3VsJyk7XHJcblxyXG4gICAgICAgIC8qKiBhZGQgZXZlbnQgbGlzdGVuZXJzICovXHJcbiAgICAgICAgbGlzdFVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5waWNrdXAuYmluZChjb3JlKSk7XHJcblxyXG4gICAgICAgIGNvbnRleHQudGV4dFN0eWxlLl9zdHlsZUxpc3QgPSBsaXN0RGl2LnF1ZXJ5U2VsZWN0b3JBbGwoJ2xpIGJ1dHRvbicpO1xyXG5cclxuICAgICAgICAvKiogYXBwZW5kIHRhcmdldCBidXR0b24gbWVudSAqL1xyXG4gICAgICAgIGNvcmUuaW5pdE1lbnVUYXJnZXQodGhpcy5uYW1lLCB0YXJnZXRFbGVtZW50LCBsaXN0RGl2KTtcclxuXHJcbiAgICAgICAgLyoqIGVtcHR5IG1lbW9yeSAqL1xyXG4gICAgICAgIGxpc3REaXYgPSBudWxsLCBsaXN0VWwgPSBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdWJtZW51OiBmdW5jdGlvbiAoY29yZSkge1xyXG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IGNvcmUub3B0aW9ucztcclxuICAgICAgICBjb25zdCBsaXN0RGl2ID0gY29yZS51dGlsLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xyXG4gICAgICAgIGxpc3REaXYuY2xhc3NOYW1lID0gJ3NlLXN1Ym1lbnUgc2UtbGlzdC1sYXllciBzZS1saXN0LWZvcm1hdCc7XHJcblxyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRMaXN0ID0ge1xyXG4gICAgICAgICAgICBjb2RlOiB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBjb3JlLmxhbmcubWVudS5jb2RlLFxyXG4gICAgICAgICAgICAgICAgY2xhc3M6ICdfX3NlX190LWNvZGUnLFxyXG4gICAgICAgICAgICAgICAgdGFnOiAnY29kZScsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHRyYW5zbHVjZW50OiB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBjb3JlLmxhbmcubWVudS50cmFuc2x1Y2VudCxcclxuICAgICAgICAgICAgICAgIHN0eWxlOiAnb3BhY2l0eTogMC41OycsXHJcbiAgICAgICAgICAgICAgICB0YWc6ICdzcGFuJyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2hhZG93OiB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBjb3JlLmxhbmcubWVudS5zaGFkb3csXHJcbiAgICAgICAgICAgICAgICBjbGFzczogJ19fc2VfX3Qtc2hhZG93JyxcclxuICAgICAgICAgICAgICAgIHRhZzogJ3NwYW4nLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBzdHlsZUxpc3QgPSAhb3B0aW9uLnRleHRTdHlsZXMgPyBjb3JlLl93Lk9iamVjdC5rZXlzKGRlZmF1bHRMaXN0KSA6IG9wdGlvbi50ZXh0U3R5bGVzO1xyXG5cclxuICAgICAgICBsZXQgbGlzdCA9ICc8ZGl2IGNsYXNzPVwic2UtbGlzdC1pbm5lclwiPjx1bCBjbGFzcz1cInNlLWxpc3QtYmFzaWNcIj4nO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBzdHlsZUxpc3QubGVuZ3RoLCB0LCB0YWcsIG5hbWUsIGF0dHJzLCBjb21tYW5kLCB2YWx1ZSwgX2NsYXNzOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgdCA9IHN0eWxlTGlzdFtpXTtcclxuICAgICAgICAgICAgYXR0cnMgPSAnJywgdmFsdWUgPSAnJywgY29tbWFuZCA9IFtdO1xyXG5cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0ID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGVmYXVsdFN0eWxlID0gZGVmYXVsdExpc3RbdC50b0xvd2VyQ2FzZSgpXTtcclxuICAgICAgICAgICAgICAgIGlmICghZGVmYXVsdFN0eWxlKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIHQgPSBkZWZhdWx0U3R5bGU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIG5hbWUgPSB0Lm5hbWU7XHJcbiAgICAgICAgICAgIHRhZyA9IHQudGFnIHx8ICdzcGFuJztcclxuICAgICAgICAgICAgX2NsYXNzID0gdC5fY2xhc3M7XHJcblxyXG4gICAgICAgICAgICBpZiAodC5zdHlsZSkge1xyXG4gICAgICAgICAgICAgICAgYXR0cnMgKz0gJyBzdHlsZT1cIicgKyB0LnN0eWxlICsgJ1wiJztcclxuICAgICAgICAgICAgICAgIHZhbHVlICs9IHQuc3R5bGUucmVwbGFjZSgvOlteO10rKDt8JClcXHMqL2csICcsJyk7XHJcbiAgICAgICAgICAgICAgICBjb21tYW5kLnB1c2goJ3N0eWxlJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHQuY2xhc3MpIHtcclxuICAgICAgICAgICAgICAgIGF0dHJzICs9ICcgY2xhc3M9XCInICsgdC5jbGFzcyArICdcIic7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSArPSAnLicgKyB0LmNsYXNzLnRyaW0oKS5yZXBsYWNlKC9cXHMrL2csICcsLicpO1xyXG4gICAgICAgICAgICAgICAgY29tbWFuZC5wdXNoKCdjbGFzcycpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoLywkLywgJycpO1xyXG5cclxuICAgICAgICAgICAgbGlzdCArPSAnPGxpPicgK1xyXG4gICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic2UtYnRuLWxpc3QnICsgKF9jbGFzcyA/ICcgJyArIF9jbGFzczogJycpICsgJ1wiIGRhdGEtY29tbWFuZD1cIicgKyB0YWcgKyAnXCIgZGF0YS12YWx1ZT1cIicgKyB2YWx1ZSArICdcIiB0aXRsZT1cIicgKyBuYW1lICsgJ1wiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8JyArIHRhZyArIGF0dHJzICsgJz4nICsgbmFtZSArICAnPC8nICsgdGFnICsgJz4nICtcclxuICAgICAgICAgICAgICAgICc8L2J1dHRvbj48L2xpPic7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxpc3QgKz0gJzwvdWw+PC9kaXY+JztcclxuXHJcbiAgICAgICAgbGlzdERpdi5pbm5lckhUTUwgPSBsaXN0O1xyXG5cclxuICAgICAgICByZXR1cm4gbGlzdERpdjtcclxuICAgIH0sXHJcblxyXG4gICAgIC8qKlxyXG4gICAgICogQE92ZXJyaWRlIHN1Ym1lbnVcclxuICAgICAqL1xyXG4gICAgb246IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zdCB1dGlsID0gdGhpcy51dGlsO1xyXG4gICAgICAgIGNvbnN0IHRleHRTdHlsZUNvbnRleHQgPSB0aGlzLmNvbnRleHQudGV4dFN0eWxlO1xyXG4gICAgICAgIGNvbnN0IHN0eWxlQnV0dG9uTGlzdCA9IHRleHRTdHlsZUNvbnRleHQuX3N0eWxlTGlzdDtcclxuICAgICAgICBjb25zdCBzZWxlY3Rpb25Ob2RlID0gdGhpcy5nZXRTZWxlY3Rpb25Ob2RlKCk7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBzdHlsZUJ1dHRvbkxpc3QubGVuZ3RoLCBidG4sIGRhdGEsIGFjdGl2ZTsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGJ0biA9IHN0eWxlQnV0dG9uTGlzdFtpXTtcclxuICAgICAgICAgICAgZGF0YSA9IGJ0bi5nZXRBdHRyaWJ1dGUoJ2RhdGEtdmFsdWUnKS5zcGxpdCgnLCcpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgZm9yIChsZXQgdiA9IDAsIG5vZGUsIHZhbHVlOyB2IDwgZGF0YS5sZW5ndGg7IHYrKykge1xyXG4gICAgICAgICAgICAgICAgbm9kZSA9IHNlbGVjdGlvbk5vZGU7XHJcbiAgICAgICAgICAgICAgICBhY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgd2hpbGUgKG5vZGUgJiYgIXV0aWwuaXNGb3JtYXRFbGVtZW50KG5vZGUpICYmICF1dGlsLmlzQ29tcG9uZW50KG5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gYnRuLmdldEF0dHJpYnV0ZSgnZGF0YS1jb21tYW5kJykudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGRhdGFbdl07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgvXlxcLi8udGVzdCh2YWx1ZSkgPyB1dGlsLmhhc0NsYXNzKG5vZGUsIHZhbHVlLnJlcGxhY2UoL15cXC4vLCAnJykpIDogISFub2RlLnN0eWxlW3ZhbHVlXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFhY3RpdmUpIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBhY3RpdmUgPyB1dGlsLmFkZENsYXNzKGJ0biwgJ2FjdGl2ZScpIDogdXRpbC5yZW1vdmVDbGFzcyhidG4sICdhY3RpdmUnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwaWNrdXA6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgICAgIGxldCB0YXJnZXQgPSBlLnRhcmdldDtcclxuICAgICAgICBsZXQgY29tbWFuZCA9IG51bGwsIHRhZyA9IG51bGw7XHJcbiAgICAgICAgXHJcbiAgICAgICAgd2hpbGUgKCFjb21tYW5kICYmICEvVUwvaS50ZXN0KHRhcmdldC50YWdOYW1lKSkge1xyXG4gICAgICAgICAgICBjb21tYW5kID0gdGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1jb21tYW5kJyk7XHJcbiAgICAgICAgICAgIGlmIChjb21tYW5kKSB7XHJcbiAgICAgICAgICAgICAgICB0YWcgPSB0YXJnZXQuZmlyc3RDaGlsZDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFjb21tYW5kKSByZXR1cm47XHJcblxyXG4gICAgICAgIGNvbnN0IGNoZWNrU3R5bGVzID0gdGFnLnN0eWxlLmNzc1RleHQucmVwbGFjZSgvOi4rKDt8JCkvZywgJywnKS5zcGxpdCgnLCcpO1xyXG4gICAgICAgIGNoZWNrU3R5bGVzLnBvcCgpO1xyXG5cclxuICAgICAgICBjb25zdCBjbGFzc2VzID0gdGFnLmNsYXNzTGlzdDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gY2xhc3Nlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBjaGVja1N0eWxlcy5wdXNoKCcuJyArIGNsYXNzZXNbaV0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbmV3Tm9kZSA9IHRoaXMudXRpbC5oYXNDbGFzcyh0YXJnZXQsICdhY3RpdmUnKSA/IG51bGwgOiB0YWcuY2xvbmVOb2RlKGZhbHNlKTtcclxuICAgICAgICBjb25zdCByZW1vdmVOb2RlcyA9IG5ld05vZGUgPyBudWxsIDogW3RhZy5ub2RlTmFtZV07XHJcbiAgICAgICAgdGhpcy5ub2RlQ2hhbmdlKG5ld05vZGUsIGNoZWNrU3R5bGVzLCByZW1vdmVOb2RlcywgdHJ1ZSk7XHJcblxyXG4gICAgICAgIHRoaXMuc3VibWVudU9mZigpO1xyXG4gICAgfVxyXG59O1xyXG4iLCIvKlxyXG4gKiB3eXNpd3lnIHdlYiBlZGl0b3JcclxuICpcclxuICogc3VuZWRpdG9yLmpzXHJcbiAqIENvcHlyaWdodCAyMDE3IEppSG9uZyBMZWUuXHJcbiAqIE1JVCBsaWNlbnNlLlxyXG4gKi9cclxuJ3VzZSBzdHJpY3QnO1xyXG5cclxuaW1wb3J0IGZpbGVCcm93c2VyIGZyb20gJy4uL21vZHVsZXMvZmlsZUJyb3dzZXInO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgbmFtZTogJ2ltYWdlR2FsbGVyeScsXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBDb25zdHJ1Y3RvclxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGNvcmUgQ29yZSBvYmplY3QgXHJcbiAgICAgKi9cclxuICAgIGFkZDogZnVuY3Rpb24gKGNvcmUpIHtcclxuICAgICAgICBjb3JlLmFkZE1vZHVsZShbZmlsZUJyb3dzZXJdKTtcclxuXHJcbiAgICAgICAgY29uc3QgY29udGV4dCA9IGNvcmUuY29udGV4dDtcclxuICAgICAgICBjb250ZXh0LmltYWdlR2FsbGVyeSA9IHtcclxuICAgICAgICAgICAgdGl0bGU6IGNvcmUubGFuZy50b29sYmFyLmltYWdlR2FsbGVyeSwgLy8gQFJlcXVpcmVkIEBPdmVycmlkZSBmaWxlQnJvd3NlciAtIEZpbGUgYnJvd3NlciB3aW5kb3cgdGl0bGUuXHJcbiAgICAgICAgICAgIHVybDogY29yZS5vcHRpb25zLmltYWdlR2FsbGVyeVVybCwgLy8gQFJlcXVpcmVkIEBPdmVycmlkZSBmaWxlQnJvd3NlciAtIEZpbGUgc2VydmVyIHVybC5cclxuICAgICAgICAgICAgaGVhZGVyOiBjb3JlLm9wdGlvbnMuaW1hZ2VHYWxsZXJ5SGVhZGVyLCAvLyBAUmVxdWlyZWQgQE92ZXJyaWRlIGZpbGVCcm93c2VyIC0gRmlsZSBzZXJ2ZXIgaHR0cCBoZWFkZXIuXHJcbiAgICAgICAgICAgIGxpc3RDbGFzczogJ3NlLWltYWdlLWxpc3QnLCAvLyBAUmVxdWlyZWQgQE92ZXJyaWRlIGZpbGVCcm93c2VyIC0gQ2xhc3MgbmFtZSBvZiBsaXN0IGRpdi5cclxuICAgICAgICAgICAgaXRlbVRlbXBsYXRlSGFuZGxlcjogdGhpcy5kcmF3SXRlbXMsIC8vIEBSZXF1aXJlZCBAT3ZlcnJpZGUgZmlsZUJyb3dzZXIgLSBGdW5jdGlvbiB0aGF0IGRlZmluZXMgdGhlIEhUTUwgb2YgYW4gZmlsZSBpdGVtLlxyXG4gICAgICAgICAgICBzZWxlY3RvckhhbmRsZXI6IHRoaXMuc2V0SW1hZ2UuYmluZChjb3JlKSwgLy8gQFJlcXVpcmVkIEBPdmVycmlkZSBmaWxlQnJvd3NlciAtIEZ1bmN0aW9uIHRoYXQgYWN0aW9uIHdoZW4gaXRlbSBjbGljay5cclxuICAgICAgICAgICAgY29sdW1uU2l6ZTogNCAvLyBAT3B0aW9uIEBPdmVycmlkZSBmaWxlQnJvd3NlciAtIE51bWJlciBvZiBcImRpdi5zZS1maWxlLWl0ZW0tY29sdW1uXCIgdG8gYmUgY3JlYXRlZCAoZGVmYXVsdDogNClcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBAUmVxdWlyZWQgQE92ZXJyaWRlIGZpbGVCcm93c2VyXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT3BlbiBhIGZpbGUgYnJvd3Nlci5cclxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb258bnVsbH0gc2VsZWN0b3JIYW5kbGVyIFdoZW4gdGhlIGZ1bmN0aW9uIGNvbWVzIGFzIGFuIGFyZ3VtZW50IHZhbHVlLCBpdCBzdWJzdGl0dXRlcyBcImNvbnRleHQuc2VsZWN0b3JIYW5kbGVyXCIuXHJcbiAgICAgKi9cclxuICAgIG9wZW46IGZ1bmN0aW9uIChzZWxlY3RvckhhbmRsZXIpIHtcclxuICAgICAgICB0aGlzLnBsdWdpbnMuZmlsZUJyb3dzZXIub3Blbi5jYWxsKHRoaXMsICdpbWFnZUdhbGxlcnknLCBzZWxlY3RvckhhbmRsZXIpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBSZXF1aXJlZCBAT3ZlcnJpZGUgZmlsZUJyb3dzZXJcclxuICAgICAqIEBkZXNjcmlwdGlvbiBEZWZpbmUgdGhlIEhUTUwgb2YgdGhlIGl0ZW0gdG8gYmUgcHV0IGluIFwiZGl2LnNlLWZpbGUtaXRlbS1jb2x1bW5cIi5cclxuICAgICAqIEZvcm1hdDogW1xyXG4gICAgICogICAgICB7IHNyYzogXCJpbWFnZSBzcmNcIiwgbmFtZTogXCJuYW1lKEBvcHRpb24pXCIsIGFsdDogXCJpbWFnZSBhbHQoQG9wdGlvbilcIiwgdGFnOiBcInRhZyBuYW1lKEBvcHRpb24pXCIgfVxyXG4gICAgICogXVxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGl0ZW0gSXRlbSBvZiB0aGUgcmVzcG9uc2UgZGF0YSdzIGFycmF5XHJcbiAgICAgKi9cclxuICAgIGRyYXdJdGVtczogZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICBjb25zdCBzcmNOYW1lID0gaXRlbS5zcmMuc3BsaXQoJy8nKS5wb3AoKTtcclxuICAgICAgICByZXR1cm4gICc8ZGl2IGNsYXNzPVwic2UtZmlsZS1pdGVtLWltZ1wiPjxpbWcgc3JjPVwiJyArIGl0ZW0uc3JjICsgJ1wiIGFsdD1cIicgKyAoaXRlbS5hbHQgfHwgc3JjTmFtZSkgKyAnXCIgZGF0YS1jb21tYW5kPVwicGlja1wiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtZmlsZS1pbWctbmFtZSBzZS1maWxlLW5hbWUtYmFja1wiPjwvZGl2PicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtZmlsZS1pbWctbmFtZSBfX3NlX19pbWdfbmFtZVwiPicgKyAoaXRlbS5uYW1lIHx8IHNyY05hbWUpICsgJzwvZGl2PicgK1xyXG4gICAgICAgICAgICAgICAgJzwvZGl2Pic7XHJcbiAgICB9LFxyXG5cclxuICAgIHNldEltYWdlOiBmdW5jdGlvbiAodGFyZ2V0KSB7XHJcbiAgICAgICAgdGhpcy5jYWxsUGx1Z2luKCdpbWFnZScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IHtuYW1lOiB0YXJnZXQucGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yKCcuX19zZV9faW1nX25hbWUnKS50ZXh0Q29udGVudCwgc2l6ZTogMH07XHJcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5pbWFnZS5fYWx0VGV4dCA9IHRhcmdldC5hbHQ7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5pbWFnZS5jcmVhdGVfaW1hZ2UuY2FsbCh0aGlzLCB0YXJnZXQuc3JjLCBudWxsLCB0aGlzLmNvbnRleHQuaW1hZ2UuX29yaWdpbl93LCB0aGlzLmNvbnRleHQuaW1hZ2UuX29yaWdpbl9oLCAnbm9uZScsIGZpbGUpO1xyXG4gICAgICAgIH0uYmluZCh0aGlzKSwgbnVsbCk7XHJcbiAgICB9XHJcbn07IiwiLypcclxuICogd3lzaXd5ZyB3ZWIgZWRpdG9yXHJcbiAqXHJcbiAqIHN1bmVkaXRvci5qc1xyXG4gKiBDb3B5cmlnaHQgMjAyMCBKaUhvbmcgTGVlLlxyXG4gKiBNSVQgbGljZW5zZS5cclxuICovXHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgLy8gcnRsIGljb25cclxuICAgcnRsOiB7XHJcbiAgICAgIGl0YWxpYzogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTAuNSAxNS44XCIgeG1sOnNwYWNlPVwicHJlc2VydmVcIj48Zz48cGF0aCBkPVwiTTAuMywwLjFjMC4zLDAsMC41LDAsMC43LDBjMSwwLjEsMS43LDAuMSwyLjIsMC4xSDRMNy4yLDBsMC4yLDEuMUg3Yy0wLjUsMC0xLDAuMS0xLjUsMC4zdjAuNGwwLjMsMS45TDYsNC40TDYuMyw2IGwwLjEsMC40bDAuMSwwLjVjMC4xLDAuMiwwLjEsMC40LDAuMiwwLjdzMC4xLDAuNiwwLjIsMC45TDcsOS4xbDAuNiwyLjhsMC4zLDEuNGMwLjEsMC40LDAuMiwwLjcsMC40LDFjMC40LDAuMiwwLjgsMC4zLDEuMiwwLjQgbDAuOCwwLjJsMC4yLDAuOWwtMS4xLDBjLTAuOS0wLjEtMS41LTAuMS0xLjgtMC4xaC0yYy0wLjksMC4xLTEuNCwwLjItMS41LDAuMmMtMC4xLDAtMC4yLDAtMC4zLDBIMy40Yy0wLjEsMC0wLjIsMC0wLjIsMCBsLTAuMS0wLjRjMC0wLjItMC4xLTAuNC0wLjEtMC42bDAuNy0wLjFjMC40LDAsMC44LTAuMSwxLjItMC4yYzAtMC4xLDAtMC4yLDAtMC4zbC0wLjEtMC41bC0wLjQtMi40TDQsOS42TDMuNCw2LjQgQzMuMiw1LjcsMyw0LjcsMi43LDMuM2MwLTAuMy0wLjEtMC41LTAuMS0wLjhDMi41LDIuMSwyLjQsMS45LDIuMywxLjZDMiwxLjQsMS42LDEuMywxLjMsMS4yQzAuOSwxLjIsMC41LDEuMSwwLjIsMC45TDAsMC40TDAsMCBMMC4zLDAuMUwwLjMsMC4xelwiLz48L2c+PC9zdmc+JyxcclxuICAgICAgaW5kZW50OiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS43IDEyLjRcIiB4bWw6c3BhY2U9XCJwcmVzZXJ2ZVwiPjxnPjxnPjxwYXRoIGQ9XCJNMTUuNSwxMC4xTDE1LjUsMTAuMWMwLjEsMCwwLjMsMC4xLDAuMywwLjN2MS43YzAsMC4xLDAsMC4xLTAuMSwwLjJjLTAuMSwwLjEtMC4xLDAuMS0wLjIsMC4xbC0xNS4yLDAgYy0wLjEsMC0wLjEsMC0wLjItMC4xQzAsMTIuMiwwLDEyLjIsMCwxMi4xbDAtMS43YzAtMC4xLDAtMC4xLDAuMS0wLjJjMC4xLTAuMSwwLjEtMC4xLDAuMi0wLjFDMC4zLDEwLjEsMTUuNSwxMC4xLDE1LjUsMTAuMXogTTkuOCw2LjdjMC4xLDAsMC4xLDAsMC4yLDAuMUMxMC4xLDYuOSwxMC4xLDcsMTAuMSw3djEuN2MwLDAuMSwwLDAuMi0wLjEsMC4yQzEwLDksOS45LDksOS44LDlMMC4zLDlDMC4yLDksMC4xLDksMC4xLDguOSBDMCw4LjksMCw4LjgsMCw4LjdWN0MwLDcsMCw2LjksMC4xLDYuOGMwLjEtMC4xLDAuMS0wLjEsMC4yLTAuMUMwLjMsNi43LDkuOCw2LjcsOS44LDYuN3ogTTAuMywzLjRoOS42aDBjMC4xLDAsMC4zLDAuMSwwLjMsMC4zIHYxLjd2MGMwLDAuMS0wLjEsMC4zLTAuMywwLjNIMC4zYy0wLjEsMC0wLjEsMC0wLjItMC4xQzAsNS41LDAsNS40LDAsNS4zVjMuNmMwLTAuMSwwLTAuMSwwLjEtMC4yQzAuMSwzLjQsMC4yLDMuNCwwLjMsMy40IEwwLjMsMy40eiBNMC4zLDBsMTUuMiwwYzAuMSwwLDAuMSwwLDAuMiwwLjFjMC4xLDAuMSwwLjEsMC4xLDAuMSwwLjJWMmMwLDAuMSwwLDAuMi0wLjEsMC4yYy0wLjEsMC4xLTAuMSwwLjEtMC4yLDAuMUgwLjMgYy0wLjEsMC0wLjEsMC0wLjItMC4xQzAsMi4xLDAsMiwwLDJsMC0xLjdjMC0wLjEsMC0wLjEsMC4xLTAuMkMwLjEsMCwwLjIsMCwwLjMsMHpcIi8+PC9nPjxwYXRoIGQ9XCJNMTMuMSwzLjVMMTUuNyw2YzAuMSwwLjEsMC4xLDAuMywwLDAuNGwtMi41LDIuNUMxMy4xLDksMTMsOSwxMi45LDljLTAuMSwwLTAuMSwwLTAuMi0wLjFjLTAuMS0wLjEtMC4xLTAuMS0wLjEtMC4yVjMuNyBjMC0wLjEsMC0wLjIsMC4xLTAuMmMwLjEtMC4xLDAuMS0wLjEsMC4yLTAuMUMxMywzLjQsMTMuMSwzLjQsMTMuMSwzLjV6XCIvPjwvZz48L3N2Zz4nLFxyXG4gICAgICBvdXRkZW50OiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS43IDEyLjRcIiB4bWw6c3BhY2U9XCJwcmVzZXJ2ZVwiPjxnPjxnPjxwYXRoIGQ9XCJNMTUuNSwxMC4xTDE1LjUsMTAuMWMwLjEsMCwwLjMsMC4xLDAuMywwLjN2MS43YzAsMC4xLDAsMC4xLTAuMSwwLjJjLTAuMSwwLjEtMC4xLDAuMS0wLjIsMC4xbC0xNS4yLDAgYy0wLjEsMC0wLjEsMC0wLjItMC4xQzAsMTIuMiwwLDEyLjIsMCwxMi4xbDAtMS43YzAtMC4xLDAtMC4xLDAuMS0wLjJjMC4xLTAuMSwwLjEtMC4xLDAuMi0wLjFDMC4zLDEwLjEsMTUuNSwxMC4xLDE1LjUsMTAuMXogTTkuOCw2LjdjMC4xLDAsMC4xLDAsMC4yLDAuMUMxMC4xLDYuOSwxMC4xLDcsMTAuMSw3djEuN2MwLDAuMSwwLDAuMi0wLjEsMC4yQzEwLDksOS45LDksOS44LDlMMC4zLDlDMC4yLDksMC4xLDksMC4xLDguOSBDMCw4LjksMCw4LjgsMCw4LjdWN0MwLDcsMCw2LjksMC4xLDYuOGMwLjEtMC4xLDAuMS0wLjEsMC4yLTAuMUMwLjMsNi43LDkuOCw2LjcsOS44LDYuN3ogTTAuMywzLjRoOS42aDBjMC4xLDAsMC4zLDAuMSwwLjMsMC4zIHYxLjd2MGMwLDAuMS0wLjEsMC4zLTAuMywwLjNIMC4zYy0wLjEsMC0wLjEsMC0wLjItMC4xQzAsNS41LDAsNS40LDAsNS4zVjMuNmMwLTAuMSwwLTAuMSwwLjEtMC4yQzAuMSwzLjQsMC4yLDMuNCwwLjMsMy40IEwwLjMsMy40eiBNMC4zLDBsMTUuMiwwYzAuMSwwLDAuMSwwLDAuMiwwLjFjMC4xLDAuMSwwLjEsMC4xLDAuMSwwLjJWMmMwLDAuMSwwLDAuMi0wLjEsMC4yYy0wLjEsMC4xLTAuMSwwLjEtMC4yLDAuMUgwLjMgYy0wLjEsMC0wLjEsMC0wLjItMC4xQzAsMi4xLDAsMiwwLDJsMC0xLjdjMC0wLjEsMC0wLjEsMC4xLTAuMkMwLjEsMCwwLjIsMCwwLjMsMHpcIi8+PC9nPjxwYXRoIGQ9XCJNMTUuNSwzLjRjMC4xLDAsMC4xLDAsMC4yLDAuMWMwLjEsMC4xLDAuMSwwLjEsMC4xLDAuMnY1LjFjMCwwLjEsMCwwLjEtMC4xLDAuMkMxNS42LDksMTUuNSw5LDE1LjUsOSBjLTAuMSwwLTAuMSwwLTAuMi0wLjFsLTIuNS0yLjVjLTAuMS0wLjEtMC4xLTAuMywwLTAuNGwyLjUtMi41QzE1LjMsMy40LDE1LjQsMy40LDE1LjUsMy40elwiLz48L2c+PC9zdmc+JyxcclxuICAgICAgbGlzdF9idWxsZXRzOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS43IDEyLjRcIiB4bWw6c3BhY2U9XCJwcmVzZXJ2ZVwiPjxnPjxwYXRoIGQ9XCJNMTIuNCwxMC43YzAsMC45LDAuOCwxLjcsMS43LDEuN2MwLjksMCwxLjctMC44LDEuNy0xLjdDMTUuNyw5LjgsMTUsOSwxNC4xLDljLTAuNCwwLTAuOSwwLjItMS4yLDAuNSBDMTIuNSw5LjgsMTIuNCwxMC4yLDEyLjQsMTAuN0MxMi40LDEwLjcsMTIuNCwxMC43LDEyLjQsMTAuN3ogTTEyLjQsNi4yYzAsMC45LDAuOCwxLjcsMS43LDEuN2MwLjQsMCwwLjktMC4yLDEuMi0wLjUgYzAuMy0wLjMsMC40LTAuNywwLjQtMS4xYzAtMC45LTAuNy0xLjctMS42LTEuN0MxMy4xLDQuNiwxMi40LDUuMywxMi40LDYuMkMxMi40LDYuMiwxMi40LDYuMiwxMi40LDYuMnogTTAsOS44djEuNyBjMCwwLjEsMCwwLjEsMC4xLDAuMmMwLjEsMC4xLDAuMSwwLjEsMC4yLDAuMWwxMC43LDBjMCwwLDAsMCwwLDBjMC4xLDAsMC4zLTAuMSwwLjMtMC4zVjkuOGMwLTAuMSwwLTAuMS0wLjEtMC4yIEMxMS4xLDkuNiwxMSw5LjYsMTEsOS42bC0xMC43LDBjLTAuMSwwLTAuMSwwLTAuMiwwLjFDMCw5LjcsMCw5LjgsMCw5LjhMMCw5Ljh6IE0xMi45LDIuOWMwLjMsMC4zLDAuNywwLjUsMS4yLDAuNSBjMC40LDAsMC45LTAuMiwxLjItMC41YzAuNy0wLjcsMC43LTEuNywwLTIuNEMxNC45LDAuMiwxNC41LDAsMTQuMSwwYy0wLjQsMC0wLjksMC4yLTEuMiwwLjVjLTAuMywwLjMtMC41LDAuNy0wLjUsMS4yIEMxMi40LDIuMSwxMi41LDIuNiwxMi45LDIuOXogTTAsNS4zVjdjMCwwLjEsMCwwLjEsMC4xLDAuMmMwLjEsMC4xLDAuMSwwLjEsMC4yLDAuMUgxMWMwLjEsMCwwLjEsMCwwLjItMC4xIGMwLjEtMC4xLDAuMS0wLjEsMC4xLTAuMlY1LjNjMCwwLDAsMCwwLDBjMC0wLjEtMC4xLTAuMy0wLjMtMC4zSDAuM2MtMC4xLDAtMC4xLDAtMC4yLDAuMUMwLDUuMiwwLDUuMywwLDUuM0wwLDUuM3ogTTAsMC44djEuNyBjMCwwLjEsMCwwLjEsMC4xLDAuMmMwLjEsMC4xLDAuMSwwLjEsMC4yLDAuMWgxMC43YzAuMSwwLDAuMSwwLDAuMi0wLjFjMCwwLDAuMS0wLjEsMC4xLTAuMlYwLjhjMC0wLjEsMC0wLjEtMC4xLTAuMiBjMC0wLjEtMC4xLTAuMS0wLjItMC4xSDAuM2MtMC4xLDAtMC4xLDAtMC4yLDAuMUMwLDAuNywwLDAuOCwwLDAuOEwwLDAuOHpcIi8+PC9nPjwvc3ZnPicsXHJcbiAgICAgIGxpc3RfbnVtYmVyOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS43IDE1LjdcIiB4bWw6c3BhY2U9XCJwcmVzZXJ2ZVwiPjxnPjxwYXRoIGQ9XCJNMCwxMS41bDAsMS43YzAsMC4xLDAsMC4xLDAuMSwwLjJjMC4xLDAuMSwwLjEsMC4xLDAuMiwwLjFIMTFjMC4xLDAsMC4yLDAsMC4yLTAuMWMwLjEtMC4xLDAuMS0wLjEsMC4xLTAuMnYtMS43IGMwLTAuMSwwLTAuMS0wLjEtMC4yYy0wLjEtMC4xLTAuMS0wLjEtMC4yLTAuMUgwLjNjLTAuMSwwLTAuMiwwLTAuMiwwLjFDMCwxMS40LDAsMTEuNCwwLDExLjVMMCwxMS41eiBNMCw4LjdjMCwwLjEsMCwwLjEsMC4xLDAuMiBDMC4xLDguOSwwLjIsOSwwLjMsOUgxMWMwLjEsMCwwLjIsMCwwLjItMC4xYzAuMS0wLjEsMC4xLTAuMSwwLjEtMC4yVjdjMC0wLjEsMC0wLjEtMC4xLTAuMmMtMC4xLTAuMS0wLjEtMC4xLTAuMi0wLjFsLTEwLjcsMCBjLTAuMSwwLTAuMiwwLTAuMiwwLjFDMCw2LjgsMCw2LjksMCw3QzAsNywwLDguNywwLDguN3ogTTAsMi41djEuN2MwLDAuMSwwLDAuMSwwLjEsMC4yYzAsMCwwLjEsMC4xLDAuMiwwLjFsMTAuNywwIGMwLjEsMCwwLjIsMCwwLjItMC4xYzAuMS0wLjEsMC4xLTAuMSwwLjEtMC4yVjIuNGMwLTAuMSwwLTAuMS0wLjEtMC4yYy0wLjEsMC0wLjEsMC0wLjIsMEgwLjNjLTAuMSwwLTAuMSwwLTAuMiwwIEMwLDIuMywwLDIuNCwwLDIuNUwwLDIuNXpcIi8+PC9nPjxwYXRoIGQ9XCJNMTUuNiwxNC4yYzAtMC4zLTAuMS0wLjYtMC4zLTAuOGMtMC4yLTAuMi0wLjQtMC40LTAuNy0wLjRsMC45LTF2LTAuOGgtMi45djEuM2gwLjl2LTAuNWgwLjlsMCwwYy0wLjEsMC4xLTAuMiwwLjItMC4zLDAuMyBzLTAuMiwwLjMtMC40LDAuNWwtMC4zLDAuM2wwLjIsMC41YzAuNiwwLDAuOSwwLjEsMC45LDAuNWMwLDAuMS0wLjEsMC4zLTAuMiwwLjRjLTAuMSwwLjEtMC4zLDAuMS0wLjQsMC4xYy0wLjMsMC0wLjctMC4xLTAuOS0wLjMgbC0wLjUsMC44YzAuNCwwLjQsMC45LDAuNiwxLjUsMC42YzAuNCwwLDAuOS0wLjEsMS4yLTAuNEMxNS41LDE1LjEsMTUuNiwxNC43LDE1LjYsMTQuMnpcIi8+PHBhdGggZD1cIk0xNS42LDguN2gtMC45djAuNWgtMS4xYzAtMC4yLDAuMi0wLjQsMC40LTAuNWMwLjItMC4yLDAuNC0wLjMsMC43LTAuNGMwLjMtMC4yLDAuNS0wLjMsMC43LTAuNmMwLjItMC4yLDAuMy0wLjUsMC4zLTAuOCBjMC0wLjQtMC4yLTAuOC0wLjUtMWMtMC42LTAuNC0xLjQtMC41LTItMC4xYy0wLjMsMC4yLTAuNSwwLjQtMC42LDAuN0wxMy4zLDdjMC4xLTAuMywwLjQtMC41LDAuNy0wLjVjMC4xLDAsMC4zLDAsMC4zLDAuMSBjMC4xLDAuMSwwLjEsMC4yLDAuMSwwLjNjMCwwLjItMC4xLDAuMy0wLjIsMC40Yy0wLjIsMC4xLTAuMywwLjMtMC41LDAuNGMtMC4yLDAuMS0wLjQsMC4zLTAuNiwwLjRjLTAuMiwwLjItMC40LDAuNC0wLjUsMC42IGMtMC4xLDAuMi0wLjIsMC41LTAuMiwwLjhjMCwwLjIsMCwwLjMsMCwwLjVoMy4yTDE1LjYsOC43TDE1LjYsOC43elwiLz48cGF0aCBkPVwiTTE1LjYsMy42aC0xVjBoLTAuOWwtMS4yLDEuMWwwLjYsMC43YzAuMi0wLjEsMC4zLTAuMywwLjQtMC41bDAsMHYyLjJoLTAuOXYwLjloM0wxNS42LDMuNkwxNS42LDMuNnpcIi8+PC9zdmc+JyxcclxuICAgICAgbGluazogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuNyAxNS43XCIgeG1sOnNwYWNlPVwicHJlc2VydmVcIj48Zz48cGF0aCBkPVwiTTcuNCw5LjlsMy4xLDMuMWMwLjMsMC4zLDAuOCwwLjUsMS4zLDAuNWMwLjUsMCwwLjktMC4yLDEuMy0wLjVjMCwwLDAsMCwwLDBjMC43LTAuNywwLjctMS45LDAtMi42TDkuOSw3LjMgYzAtMC4xLDAtMC4yLDAtMC4zQzkuOSw3LDEwLDcsMTAuMSw3bDIuMi0wLjJjMC4xLDAsMC4xLDAsMC4yLDAuMWwyLjEsMi4xYzAuNCwwLjQsMC43LDAuOCwwLjksMS4zYzAuMiwwLjUsMC4zLDEsMC4zLDEuNSBjMCwwLjUtMC4xLDEtMC4zLDEuNWMtMC44LDItMy4yLDMtNS4yLDIuMmMtMC41LTAuMi0wLjktMC41LTEuMy0wLjlsLTIuMS0yLjFjLTAuMSwwLTAuMS0wLjEtMC4xLTAuMkw3LDEwLjFDNywxMCw3LDkuOSw3LjEsOS45IEM3LjIsOS44LDcuMyw5LjksNy40LDkuOXogTTEuMiwxLjFDMS42LDAuNywyLDAuNCwyLjUsMC4zYzEtMC40LDIuMS0wLjQsMy4xLDBDNiwwLjQsNi41LDAuNyw2LjgsMS4xTDksMy4yQzksMy4zLDkuMSwzLjMsOSwzLjQgTDguOCw1LjZjMCwwLjEtMC4xLDAuMi0wLjIsMC4yYy0wLjEsMC4xLTAuMiwwLjEtMC4zLDBMNS4zLDIuN0M1LDIuMyw0LjUsMi4xLDQsMi4xYy0wLjUsMC0wLjksMC4yLTEuMywwLjVjMCwwLDAsMCwwLDAgQzIsMy40LDIsNC41LDIuNyw1LjJsMy4xLDMuMmMwLjEsMC4xLDAuMSwwLjIsMCwwLjNjMCwwLjEtMC4xLDAuMS0wLjIsMC4xTDMuNSw5QzMuNCw5LDMuNCw5LDMuMyw4LjlMMS4yLDYuOGMwLDAsMCwwLDAsMCBDLTAuNCw1LjItMC40LDIuNywxLjIsMS4xTDEuMiwxLjF6IE0xNC4zLDZoLTIuNmMwLDAsMCwwLDAsMGMtMC4xLDAtMC4yLTAuMS0wLjItMC4yYzAtMC4xLDAtMC4yLDAuMS0wLjNsMi41LTAuNyBjMC4xLDAsMC4xLDAsMC4yLDBjMC4xLDAsMC4xLDAuMSwwLjEsMC4ybDAuMSwwLjhjMCwwLjEsMCwwLjEtMC4xLDAuMkMxNC41LDYsMTQuNCw2LDE0LjMsNkwxNC4zLDZ6IE0xMC4yLDQuMSBjMCwwLjEtMC4xLDAuMi0wLjIsMC4ybDAsMGMwLDAsMCwwLDAsMEM5LjgsNC4yLDkuNyw0LjEsOS44LDRMOS43LDEuNGMwLTAuMSwwLTAuMSwwLjEtMC4yYzAuMSwwLDAuMSwwLDAuMiwwaDAuOCBjMC4xLDAsMC4xLDAsMC4yLDAuMWMwLDAuMSwwLDAuMSwwLDAuMkwxMC4yLDQuMUwxMC4yLDQuMXogTTEuNSw5LjdoMS4zaDEuM2MwLjEsMCwwLjIsMC4xLDAuMiwwLjJjMCwwLjEsMCwwLjItMC4xLDAuM2wtMi41LDAuNiBIMS42YzAsMC0wLjEsMC0wLjEsMGMtMC4xLDAtMC4xLTAuMS0wLjEtMC4yTDEuMiw5LjljMC0wLjEsMC0wLjEsMC4xLTAuMmMwLTAuMSwwLjEtMC4xLDAuMi0wLjFMMS41LDkuN3ogTTUuNiwxMS42IEM1LjYsMTEuNiw1LjYsMTEuNiw1LjYsMTEuNmMwLTAuMSwwLjEtMC4yLDAuMy0wLjFjMCwwLDAsMCwwLDBjMC4xLDAsMC4yLDAuMSwwLjIsMC4ydjIuNmMwLDAuMSwwLDAuMS0wLjEsMC4yIGMwLDAtMC4xLDAuMS0wLjIsMC4xTDUsMTQuNWMtMC4xLDAtMC4xLDAtMC4yLTAuMWMwLTAuMSwwLTAuMSwwLTAuMkw1LjYsMTEuNkw1LjYsMTEuNnpcIi8+PC9nPjwvc3ZnPicsXHJcbiAgICAgIHVubGluazogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuNyAxNS43XCIgeG1sOnNwYWNlPVwicHJlc2VydmVcIj48Zz48cGF0aCBkPVwiTTE0LjYsMTQuNmMxLjYtMS42LDEuNi00LjEsMC01LjdsMCwwbC0zLjEtMy4xbC0xLjIsMS42bDIuOSwyLjljMC40LDAuNCwwLjYsMC45LDAuNiwxLjVjMCwxLjEtMC45LDIuMS0yLjEsMi4xbDAsMCBjLTAuNiwwLTEuMS0wLjItMS41LTAuNmwtMC40LTAuNGwtMS43LDFsMC44LDAuOEMxMC40LDE2LjIsMTMsMTYuMiwxNC42LDE0LjZMMTQuNiwxNC42TDE0LjYsMTQuNnogTTMuNiw2QzMsNS45LDIuNiw1LjUsMi4zLDUgUzEuOSw0LDIuMSwzLjRDMi4zLDIuOSwyLjYsMi41LDMsMi4yQzMuNSwyLDQuMSwxLjksNC42LDJsMy4zLDEuNGwwLjUtMkw1LjEsMC4xQzQtMC4xLDIuOSwwLDIsMC41QzEuMSwxLjEsMC40LDEuOSwwLjIsMyBDLTAuMSw0LDAsNS4xLDAuNiw2QzEuMSw2LjksMS45LDcuNiwzLDcuOGw1LjQsMmwwLjUtMkw2LjIsNi45TDMuNiw2elwiLz48L2c+PC9zdmc+J1xyXG4gICB9LFxyXG4gICAvLyBjb21tb24sIGx0ciBpY29uXHJcbiAgIHJlZG86ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1LjU5IDE0LjE4XCI+PGc+PHBhdGggZD1cIk0xMS41OCwxOC40OGE2Ljg0LDYuODQsMCwxLDEsNi44NS02Ljg1czAsLjI2LDAsLjY3YTgsOCwwLDAsMS0uMjIsMS40NGwuOTEtLjU1YS41MS41MSwwLDAsMSwuMzYsMCwuNDUuNDUsMCwwLDEsLjI5LjIyLjQ3LjQ3LDAsMCwxLC4wNi4zNi40NS40NSwwLDAsMS0uMjIuMjlMMTcuNDIsMTUuM2wtLjEyLDBoLS4yNWwtLjEyLS4wNi0uMDktLjA5LS4wNi0uMDcsMC0uMDYtLjg3LTIuMTJhLjQzLjQzLDAsMCwxLDAtLjM3LjQ5LjQ5LDAsMCwxLC4yNy0uMjYuNDEuNDEsMCwwLDEsLjM2LDAsLjUzLjUzLDAsMCwxLC4yNy4yNmwuNDQsMS4wOWE2LjUxLDYuNTEsMCwwLDAsLjI0LTEuMzYsNC41OCw0LjU4LDAsMCwwLDAtLjY0LDUuODMsNS44MywwLDAsMC0xLjczLTQuMTcsNS44OCw1Ljg4LDAsMCwwLTguMzQsMCw1LjksNS45LDAsMCwwLDQuMTcsMTAuMDYuNTEuNTEsMCwwLDEsLjMzLjE1LjQ4LjQ4LDAsMCwxLDAsLjY4LjUzLjUzLDAsMCwxLS4zMy4xMlpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTQuNDggLTQuNTQpXCIvPjwvZz48L3N2Zz4nLFxyXG4gICB1bmRvOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS41OSAxNC4xOFwiPjxnPjxwYXRoIGQ9XCJNNSwxNGEuNDMuNDMsMCwwLDEtLjIyLS4yOS40Ni40NiwwLDAsMSwuMDYtLjM2LjQzLjQzLDAsMCwxLC4yOS0uMjIuNTYuNTYsMCwwLDEsLjM2LDBsLjkxLjU1YTguMjcsOC4yNywwLDAsMS0uMjItMS40NSw1LjA3LDUuMDcsMCwwLDEsMC0uNjdBNi44NSw2Ljg1LDAsMSwxLDEzLDE4LjQ3YS40NC40NCwwLDAsMS0uMzMtLjEzLjQ4LjQ4LDAsMCwxLDAtLjY4LjUxLjUxLDAsMCwxLC4zMy0uMTVBNS44OSw1Ljg5LDAsMCwwLDE3LjE1LDcuNDVhNS44OCw1Ljg4LDAsMCwwLTguMzMsMCw1Ljg0LDUuODQsMCwwLDAtMS43Myw0LjE3czAsLjI1LDAsLjY1YTYuNDksNi40OSwwLDAsMCwuMjQsMS4zN2wuNDQtMS4wOWEuNTcuNTcsMCwwLDEsLjI3LS4yNi40MS40MSwwLDAsMSwuMzYsMCwuNTMuNTMsMCwwLDEsLjI3LjI2LjQzLjQzLDAsMCwxLDAsLjM3TDcuODIsMTVsMCwuMDktLjA5LjA5LS4xLjA3LS4wNiwwSDcuMjhsLS4xMywwLTEuMDktLjYzYy0uNjUtLjM2LTEtLjU3LTEuMS0uNjNaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC00LjQ5IC00LjUzKVwiLz48L2c+PC9zdmc+JyxcclxuICAgYm9sZDogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTEuNzYgMTUuNzVcIj48Zz48cGF0aCBkPVwiTTYuNCwzLjc2VjE5LjVoNi43NmE1LjU1LDUuNTUsMCwwLDAsMi0uMzIsNC45Myw0LjkzLDAsMCwwLDEuNTItMSw0LjI3LDQuMjcsMCwwLDAsMS40OC0zLjM0LDMuODcsMy44NywwLDAsMC0uNjktMi4zNyw1Ljc0LDUuNzQsMCwwLDAtLjcxLS44MywzLjQ0LDMuNDQsMCwwLDAtMS4xLS42NSwzLjYsMy42LDAsMCwwLDEuNTgtMS4zNiwzLjY2LDMuNjYsMCwwLDAsLjUzLTEuOTMsMy43LDMuNywwLDAsMC0xLjIxLTIuODcsNC42NSw0LjY1LDAsMCwwLTMuMjUtMS4xSDYuNFptMi40Niw2LjY1VjUuNTdoMy41MmE0LjkxLDQuOTEsMCwwLDEsMS4zNi4xNSwyLjMsMi4zLDAsMCwxLC44NS40NSwyLjA2LDIuMDYsMCwwLDEsLjc0LDEuNzEsMi4zLDIuMywwLDAsMS0uNzgsMS45MiwyLjU0LDIuNTQsMCwwLDEtLjg2LjQ2LDQuNyw0LjcsMCwwLDEtMS4zMi4xNUg4Ljg2Wm0wLDcuMjdWMTIuMTVIMTIuN2E0LjU2LDQuNTYsMCwwLDEsMS4zOC4xNywzLjQzLDMuNDMsMCwwLDEsLjk1LjQ5LDIuMjksMi4yOSwwLDAsMSwuOTIsMiwyLjczLDIuNzMsMCwwLDEtLjgzLDIuMSwyLjY2LDIuNjYsMCwwLDEtLjgzLjU4LDMuMjUsMy4yNSwwLDAsMS0xLjI2LjJIOC44NlpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTYuNCAtMy43NSlcIi8+PC9nPjwvc3ZnPicsXHJcbiAgIHVuZGVybGluZTogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgOS43OCAxNS43NFwiPjxnPjxwYXRoIGQ9XCJNMTQuNjQsMy43NmgyLjUydjcuNzJhNC41MSw0LjUxLDAsMCwxLS41OSwyLjMxLDMuNzYsMy43NiwwLDAsMS0xLjcxLDEuNTMsNi4xMiw2LjEyLDAsMCwxLTIuNjQuNTMsNSw1LDAsMCwxLTMuNTctMS4xOCw0LjE3LDQuMTcsMCwwLDEtMS4yNy0zLjI0VjMuNzZIOS45djcuM2EzLDMsMCwwLDAsLjU1LDIsMi4zLDIuMywwLDAsMCwxLjgzLjY1LDIuMjYsMi4yNiwwLDAsMCwxLjgtLjY1LDMuMDksMy4wOSwwLDAsMCwuNTUtMlYzLjc2Wm0yLjUyLDEzLjMxVjE5LjVINy4zOVYxNy4wOGg5Ljc3WlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNy4zOCAtMy43NilcIi8+PC9nPjwvc3ZnPicsXHJcbiAgIGl0YWxpYzogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTAuNDkgMTUuNzZcIj48Zz48cGF0aCBkPVwiTTE3LjE2LDMuNzlsLjM3LDAtLjA2LjM4LS4xNC41MkExMCwxMCwwLDAsMSwxNi4yMSw1YTkuMzcsOS4zNywwLDAsMC0xLC4zMiw2LjY4LDYuNjgsMCwwLDAtLjI1Ljg5Yy0uMDYuMzEtLjExLjU5LS4xNC44NS0uMywxLjM2LS41MiwyLjQxLS42OCwzLjE0bC0uNjEsMy4xOEwxMy4xLDE1bC0uNDMsMi40LS4xMi40NmEuNjIuNjIsMCwwLDAsMCwuMjhjLjQ0LjEuODUuMTcsMS4yMy4yMmwuNjguMTFhNC41MSw0LjUxLDAsMCwxLS4wOC42bC0uMDkuNDJhLjkyLjkyLDAsMCwwLS4yMywwbC0uNDMsMGExLjM3LDEuMzcsMCwwLDEtLjI5LDBjLS4xMywwLS42My0uMDgtMS40OS0uMTZsLTIsMGMtLjI4LDAtLjg3LDAtMS43OC4xMkw3LDE5LjVsLjE3LS44OC44LS4yQTYuNjEsNi42MSwwLDAsMCw5LjE5LDE4LDIuNjIsMi42MiwwLDAsMCw5LjYxLDE3bC4yOC0xLjQxLjU4LTIuNzUuMTItLjY2Yy4wNS0uMy4xMS0uNTguMTctLjg2cy4xMi0uNTEuMTctLjY5bC4xMi0uNDguMTItLjQzLjMxLTEuNi4xNS0uNjUuMzEtMS45MVY1LjE0YTMuODYsMy44NiwwLDAsMC0xLjQ4LS4yOWwtLjM4LDAsLjItMS4wNiwzLjI0LjE0Ljc1LDBjLjQ1LDAsMS4xOCwwLDIuMTgtLjA5LjIzLDAsLjQ2LDAsLjcxLDBaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC03LjA0IC0zLjc2KVwiLz48L2c+PC9zdmc+JyxcclxuICAgc3RyaWtlOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS43NCAxNC45XCI+PGc+PHBhdGggZD1cIk0xMi45NCwxM2E0LjI3LDQuMjcsMCwwLDEsMS4zMi41OCwxLjQ2LDEuNDYsMCwwLDEsLjU1LDEuMiwxLjg3LDEuODcsMCwwLDEtLjg4LDEuNjQsNC4xNyw0LjE3LDAsMCwxLTIuMzUuNTksNC40NCw0LjQ0LDAsMCwxLTIuNzQtLjcxLDIuNzIsMi43MiwwLDAsMS0xLTIuMTdINS41N2E0LjU2LDQuNTYsMCwwLDAsMS41NSwzLjcsNyw3LDAsMCwwLDQuNDcsMS4yMyw2LDYsMCwwLDAsNC4wNy0xLjMsNC4yNCw0LjI0LDAsMCwwLDEuNTItMy4zNyw0LDQsMCwwLDAtLjI2LTEuNGgtNFpNNi4zNywxMC4yNEEzLjI3LDMuMjcsMCwwLDEsNiw4LjY4YTQsNCwwLDAsMSwxLjQ4LTMuMyw1LjkyLDUuOTIsMCwwLDEsMy44OC0xLjIxLDUuNTgsNS41OCwwLDAsMSwzLjkxLDEuMjQsNC4zNiw0LjM2LDAsMCwxLDEuNDUsMy4xN0gxNC40NGEyLjEyLDIuMTIsMCwwLDAtLjkxLTEuODEsNC40NSw0LjQ1LDAsMCwwLTIuNDQtLjU1LDMuNjksMy42OSwwLDAsMC0yLC41MUExLjY0LDEuNjQsMCwwLDAsOC4zLDguMjJhMS4zLDEuMywwLDAsMCwuNDgsMS4xMSw3LDcsMCwwLDAsMi4xLjc4bC4yOC4wNi4yOC4wOEg2LjM3Wm0xMy4wOS42OGEuNzMuNzMsMCwwLDEsLjQ5LjIxLjY2LjY2LDAsMCwxLC4yLjQ4LjY0LjY0LDAsMCwxLS4yLjQ4LjcxLjcxLDAsMCwxLS40OS4xOUg1LjFhLjY3LjY3LDAsMCwxLS40OS0uMTkuNjYuNjYsMCwwLDEtLjItLjQ4LjY0LjY0LDAsMCwxLC4yLS40OC43My43MywwLDAsMSwuNDktLjIxSDE5LjQ2WlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNC40MSAtNC4xNylcIi8+PC9nPjwvc3ZnPicsXHJcbiAgIHN1YnNjcmlwdDogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuNzUgMTQuNjFcIj48Zz48cGF0aCBkPVwiTTE1LjM4LDQuMzNIMTIuNzRMMTEuMTksN2MtLjI4LjQ2LS41MS44Ny0uNjksMS4yMUwxMC4wNyw5aDBsLS40NC0uOGMtLjIyLS40LS40NS0uODEtLjcxLTEuMjNMNy4zNCw0LjMzSDQuNjhMOC4yNiwxMCw0LjQsMTYuMDhINy4xbDEuNjktMi44M2MuMzgtLjYzLjcyLTEuMjIsMS0xLjc4bC4yNS0uNDZoMGwuNDkuOTJjLjI0LjQ1LjQ4Ljg5Ljc0LDEuMzJMMTMsMTYuMDhoMi42MUwxMS44NCwxMGwxLjc3LTIuODQsMS43Ny0yLjg1Wm00Ljc3LDEzLjc1SDE3di0uMTVjMC0uNC4wNS0uNjQuMTYtLjcyYTQuNDIsNC40MiwwLDAsMSwxLjE2LS4zMSwzLjMsMy4zLDAsMCwwLDEuNTQtLjU2QTEuODQsMS44NCwwLDAsMCwyMC4xNSwxNWExLjc4LDEuNzgsMCwwLDAtLjQ0LTEuNDFBMi44LDIuOCwwLDAsMCwxOCwxMy4yNWEyLjcxLDIuNzEsMCwwLDAtMS42OS4zNywxLjgzLDEuODMsMCwwLDAtLjQ0LDEuNDN2LjIzSDE3di0uMjNxMC0uNjMuMTgtLjc4YTEuNjIsMS42MiwwLDAsMSwuODgtLjE1LDEuNTksMS41OSwwLDAsMSwuODguMTVxLjE4LjE1LjE4Ljc1dC0uMTguNzVhMy41OCwzLjU4LDAsMCwxLTEuMTguMzMsMy4zMywzLjMzLDAsMCwwLTEuNTIuNTEsMS41NywxLjU3LDAsMCwwLS4zMiwxLjE4djEuMTVoNC4yN3YtLjg2WlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNC40IC00LjMzKVwiLz48L2c+PC9zdmc+JyxcclxuICAgc3VwZXJzY3JpcHQ6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1Ljc1IDE1LjQyXCI+PGc+PHBhdGggZD1cIk0xMiwxMy4xNGwzLjYxLTUuODFIMTIuOTRMMTEuMzMsMTBjLS4yOC40Ni0uNTEuODgtLjY5LDEuMjVsLS40NS44M2gwbC0uNDUtLjg1Yy0uMjItLjQxLS40NS0uODItLjcxLTEuMjRMNy40LDcuMzNINC42OGwzLjY2LDUuODFMNC40LDE5LjMzSDcuMTRsMS43NC0yLjg3cS41OC0xLDEtMS44M2wuMjUtLjQ4aDBsLjUxLjk0Ljc1LDEuMzcsMS43MiwyLjg3aDIuNjdsLTEuOTItMy4wOWMtMS4xMi0xLjgtMS43Ni0yLjgzLTEuOTItMy4xWm00Ljg0LTQuNDFoMGwwLC4xNWgzLjI3di44NkgxNS43N1Y4LjU4YTEuNjYsMS42NiwwLDAsMSwuMzMtMS4yMiwzLjUxLDMuNTEsMCwwLDEsMS41Ni0uNTEsMy42OCwzLjY4LDAsMCwwLDEuMjEtLjM0Yy4xMy0uMS4xOS0uMzYuMTktLjc3UzE5LDUuMDcsMTguODcsNUExLjYzLDEuNjMsMCwwLDAsMTgsNC44YTEuNTgsMS41OCwwLDAsMC0uOTEuMTdjLS4xMy4xMS0uMTkuMzgtLjE5LjhWNkgxNS43OFY1Ljc2YTEuODcsMS44NywwLDAsMSwuNDUtMS40N0EyLjg0LDIuODQsMCwwLDEsMTgsMy45MWEyLjgsMi44LDAsMCwxLDEuNzIuMzgsMS44NCwxLjg0LDAsMCwxLC40NSwxLjQ0LDEuOTEsMS45MSwwLDAsMS0uMzQsMS4zNSwzLjI0LDMuMjQsMCwwLDEtMS41OC41N0EzLjY5LDMuNjksMCwwLDAsMTcsOGMtLjEyLjEtLjE3LjM1LS4xNy43NlpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTQuNCAtMy45MSlcIi8+PC9nPjwvc3ZnPicsXHJcbiAgIGVyYXNlOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS43NCAxMy43NlwiPjxnPjxwYXRoIGQ9XCJNMTMuNjksMTcuMmg2LjQ2djEuMzFIOC41Nkw0LjQxLDE0LjM3LDE0LDQuNzVsNi4wNiw2LjA2TDE2Ljg5LDE0bC0zLjIsMy4xOVptLTQuNjEsMGgyLjc3TDE0LjA5LDE1LDkuODgsMTAuNzUsNi4yNSwxNC4zOGwxLjQxLDEuNDFjLjg0LjgyLDEuMzEsMS4yOSwxLjQyLDEuNDFaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC00LjQxIC00Ljc1KVwiLz48L2c+PC9zdmc+JyxcclxuICAgaW5kZW50OiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS43NCAxMi4zNlwiPjxnPjxwYXRoIGQ9XCJNMTkuODcsMTUuNTdhLjI3LjI3LDAsMCwxLC4xOS4wOC4yNS4yNSwwLDAsMSwuMDguMTl2MS42OWEuMjcuMjcsMCwwLDEtLjA4LjE5LjI1LjI1LDAsMCwxLS4xOS4wOEg0LjY4YS4yNy4yNywwLDAsMS0uMTktLjA4LjI1LjI1LDAsMCwxLS4wOC0uMTlWMTUuODRhLjI3LjI3LDAsMCwxLC4yNy0uMjdIMTkuODdaTTcuNSwxNC40NWEuMjUuMjUsMCwwLDEtLjItLjA5TDQuNzYsMTEuODRhLjI5LjI5LDAsMCwxLDAtLjRMNy4zLDguOWEuMjkuMjksMCwwLDEsLjQsMCwuMzEuMzEsMCwwLDEsLjA3LjJ2NS4wNmEuMzIuMzIsMCwwLDEtLjA4LjIxLjI2LjI2LDAsMCwxLS4xOS4wOFpNMTkuODcsOC44MmEuMjcuMjcsMCwwLDEsLjE5LjA4LjI1LjI1LDAsMCwxLC4wOC4xOXYxLjY5YS4yNy4yNywwLDAsMS0uMDguMTkuMjUuMjUsMCwwLDEtLjE5LjA4SDEwLjMxYS4yNy4yNywwLDAsMS0uMjctLjI3VjkuMWEuMjcuMjcsMCwwLDEsLjI3LS4yN2g5LjU2Wm0wLDMuMzdhLjI3LjI3LDAsMCwxLC4xOS4wOC4yOC4yOCwwLDAsMSwuMDguMjF2MS42OGEuMzIuMzIsMCwwLDEtLjA4LjIxLjI1LjI1LDAsMCwxLS4xOS4wOEgxMC4zMWEuMjcuMjcsMCwwLDEtLjE5LS4wOC4zLjMsMCwwLDEtLjA4LS4yMVYxMi40OGEuMzIuMzIsMCwwLDEsLjA4LS4yMS4yNC4yNCwwLDAsMSwuMTktLjA4aDkuNTZabS4yLTYuNjZhLjI4LjI4LDAsMCwxLC4wOC4yVjcuNDFhLjMyLjMyLDAsMCwxLS4wOC4yMS4yNS4yNSwwLDAsMS0uMTkuMDhINC42OGEuMjcuMjcsMCwwLDEtLjE5LS4wOC4zLjMsMCwwLDEtLjA4LS4yMVY1LjczYS4zMi4zMiwwLDAsMSwuMDgtLjIxLjI1LjI1LDAsMCwxLC4xOS0uMDhIMTkuODdhLjI4LjI4LDAsMCwxLC4yLjA5WlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNC40MSAtNS40NClcIi8+PC9nPjwvc3ZnPicsXHJcbiAgIG91dGRlbnQ6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1Ljc0IDEyLjM2XCI+PGc+PHBhdGggZD1cIk00LjY4LDE0LjQ1YS4yNy4yNywwLDAsMS0uMTktLjA4LjMuMywwLDAsMS0uMDgtLjIxVjkuMWEuMjcuMjcsMCwwLDEsLjA4LS4xOS4yOC4yOCwwLDAsMSwuMi0uMDguMjUuMjUsMCwwLDEsLjE5LjA3bDIuNTQsMi41NGEuMjkuMjksMCwwLDEsMCwuNEw0Ljg4LDE0LjM2YS4yNC4yNCwwLDAsMS0uMi4wOVptMTUuMTksMS4xMmEuMjcuMjcsMCwwLDEsLjE5LjA4LjI1LjI1LDAsMCwxLC4wOC4xOXYxLjY5YS4yNy4yNywwLDAsMS0uMDguMTkuMjUuMjUsMCwwLDEtLjE5LjA4SDQuNjhhLjI3LjI3LDAsMCwxLS4xOS0uMDguMjUuMjUsMCwwLDEtLjA4LS4xOVYxNS44NGEuMjcuMjcsMCwwLDEsLjI3LS4yN0gxOS44N1ptMC0zLjM4YS4yNy4yNywwLDAsMSwuMTkuMDguMjguMjgsMCwwLDEsLjA4LjIxdjEuNjhhLjMyLjMyLDAsMCwxLS4wOC4yMS4yNS4yNSwwLDAsMS0uMTkuMDhIMTAuMzFhLjI3LjI3LDAsMCwxLS4xOS0uMDguMy4zLDAsMCwxLS4wOC0uMjFWMTIuNDhhLjMyLjMyLDAsMCwxLC4wOC0uMjEuMjQuMjQsMCwwLDEsLjE5LS4wOGg5LjU2Wm0wLTMuMzdhLjI3LjI3LDAsMCwxLC4xOS4wOC4yNS4yNSwwLDAsMSwuMDguMTl2MS42OWEuMjcuMjcsMCwwLDEtLjA4LjE5LjI1LjI1LDAsMCwxLS4xOS4wOEgxMC4zMWEuMjcuMjcsMCwwLDEtLjI3LS4yN1Y5LjFhLjI3LjI3LDAsMCwxLC4yNy0uMjdoOS41NlptLjItMy4yOWEuMjguMjgsMCwwLDEsLjA4LjJWNy40MWEuMzIuMzIsMCwwLDEtLjA4LjIxLjI1LjI1LDAsMCwxLS4xOS4wOEg0LjY4YS4yNy4yNywwLDAsMS0uMTktLjA4LjMuMywwLDAsMS0uMDgtLjIxVjUuNzNhLjMyLjMyLDAsMCwxLC4wOC0uMjEuMjUuMjUsMCwwLDEsLjE5LS4wOEgxOS44N2EuMjguMjgsMCwwLDEsLjIuMDlaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC00LjQxIC01LjQ0KVwiLz48L2c+PC9zdmc+JyxcclxuICAgZXhwYW5zaW9uOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS43NCAxNS43NFwiPjxnPjxwYXRoIGQ9XCJNMTEuOCwxMy4wNmwtNS4xLDUuMUg5LjUxVjE5LjVINC40MVYxNC40SDUuNzV2Mi44MUw4LjMsMTQuNjZxMi4yNS0yLjIzLDIuNTUtMi41NVptOC4zNS05LjN2NS4xSDE4LjgxVjYuMDVsLTUuMSw1LjEtMS0xLDUuMS01LjFIMTUuMDVWMy43NlpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTQuNDEgLTMuNzYpXCIvPjwvZz48L3N2Zz4nLFxyXG4gICByZWR1Y3Rpb246ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1Ljc0IDE1Ljc0XCI+PGc+PHBhdGggZD1cIk0xNC45MSwxMGgyLjg3djEuMzhIMTIuNTVWNi4xMmgxLjM4VjlsNS4yNC01LjI0LjQ4LjQ5LjQ5LjQ4Wk02Ljc3LDExLjkySDEydjUuMjNIMTAuNjJWMTQuMjZMNS4zNywxOS41bC0xLTFMOS42MywxMy4zSDYuNzdaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC00LjQgLTMuNzYpXCIvPjwvZz48L3N2Zz4nLFxyXG4gICBjb2RlX3ZpZXc6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1LjczIDExLjhcIj48Zz48cGF0aCBkPVwiTTguMDksNy45NGEuNzYuNzYsMCwwLDEsLjUzLjIyLjcyLjcyLDAsMCwxLC4yMS41Mi43Ni43NiwwLDAsMS0uMjIuNTRMNi4xOCwxMS42M2wyLjQzLDIuNDRhLjY5LjY5LDAsMCwxLC4yLjUxLjY2LjY2LDAsMCwxLS4yMS41MS43NS43NSwwLDAsMS0uNTEuMjIuNjMuNjMsMCwwLDEtLjUxLS4yMWgwTDQuNjMsMTIuMTVhLjcuNywwLDAsMS0uMjItLjUzLjY3LjY3LDAsMCwxLC4yNS0uNTVMNy41Nyw4LjE2YS44Mi44MiwwLDAsMSwuNTItLjIyWm0xMi4wNSwzLjY5YS43LjcsMCwwLDEtLjIzLjUyTDE3LDE1LjFoMGEuNjYuNjYsMCwwLDEtLjUxLjIxLjczLjczLDAsMCwxLS41MS0uMjIuNzUuNzUsMCwwLDEtLjIyLS41MS42My42MywwLDAsMSwuMjEtLjUxbDIuNDMtMi40NEwxNS45Miw5LjIyYS43My43MywwLDAsMS0uMjItLjUzQS43NC43NCwwLDAsMSwxNyw4LjE4aDBsMi45MSwyLjkxYS42Ny42NywwLDAsMSwuMjcuNTRabS01LjktNS45YS43My43MywwLDAsMSwuNjEuMzIuNzEuNzEsMCwwLDEsLjA3LjY4TDExLDE3YTEsMSwwLDAsMS0uMjIuMzIuNi42LDAsMCwxLS4zNS4xNi43NS43NSwwLDAsMS0uNjktLjI2LjY5LjY5LDAsMCwxLS4xMi0uNzJMMTMuNTYsNi4yM2EuNzUuNzUsMCwwLDEsLjI2LS4zNS43NC43NCwwLDAsMSwuNDItLjE1WlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNC40MSAtNS43MylcIi8+PC9nPjwvc3ZnPicsXHJcbiAgIHByZXZpZXc6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1LjY1IDE1LjY2XCI+PGc+PHBhdGggZD1cIk0xNi4xOSwxNC40M2wyLjQ5LDIuNDlhLjczLjczLDAsMCwxLC4yMS41Mi42Ny42NywwLDAsMS0uMjIuNTEuNy43LDAsMCwxLS41Mi4yMi42OS42OSwwLDAsMS0uNTEtLjIxbC0yLjQ5LTIuNDhhNS4xNyw1LjE3LDAsMCwxLTEuMzQuNjksNC42NCw0LjY0LDAsMCwxLTEuNDguMjQsNC43OCw0Ljc4LDAsMSwxLDAtOS41Niw0Ljc5LDQuNzksMCwwLDEsMS44NC4zNiw0LjksNC45LDAsMCwxLDEuNTYsMSw0Ljc3LDQuNzcsMCwwLDEsLjQ2LDYuMThaTTEwLDE0YTMuMywzLjMsMCwwLDAsMi4zNC45M0EzLjM3LDMuMzcsMCwwLDAsMTQuNywxNGEzLjMsMy4zLDAsMCwwLTEuMDgtNS40MSwzLjQ3LDMuNDcsMCwwLDAtMi41NiwwQTMsMywwLDAsMCwxMCw5LjI4LDMuMzEsMy4zMSwwLDAsMCwxMCwxNFpNMTYsNGEzLjg2LDMuODYsMCwwLDEsMi43NywxLjE0QTMuOSwzLjksMCwwLDEsMjAsNy44NXY0YS43Ny43NywwLDAsMS0uMjIuNTMuNy43LDAsMCwxLS41Mi4yMS43Mi43MiwwLDAsMS0uNzQtLjc0di00YTIuNDYsMi40NiwwLDAsMC0uNzItMS43M0EyLjM3LDIuMzcsMCwwLDAsMTYsNS40NUg4LjUzQTIuNDIsMi40MiwwLDAsMCw2LjA4LDcuODl2Ny41MmEyLjQxLDIuNDEsMCwwLDAsLjcxLDEuNzMsMi40NiwyLjQ2LDAsMCwwLDEuNzQuNzJoNC4wOGEuNzMuNzMsMCwwLDEsMCwxLjQ2SDguNTNhMy44NSwzLjg1LDAsMCwxLTIuNzgtMS4xNEEzLjkzLDMuOTMsMCwwLDEsNC42LDE1LjRWNy44N0EzLjk0LDMuOTQsMCwwLDEsNS43Niw1LjA5LDMuODgsMy44OCwwLDAsMSw4LjU0LDRIMTZaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC00LjQ1IC0zLjgpXCIvPjwvZz48L3N2Zz4nLFxyXG4gICBwcmludDogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTYuMDUgMTYuMDRcIj48Zz48cGF0aCBkPVwiTTE5Ljc2LDE1Ljg0YTEuMjksMS4yOSwwLDAsMCwuMzktLjkyVjguMzVBMi4wNSwyLjA1LDAsMCwwLDE5LjU3LDdhMS45MywxLjkzLDAsMCwwLTEuMzgtLjU3SDYuMzdhMS45NSwxLjk1LDAsMCwwLTIsMnY2LjU2YTEuMjMsMS4yMywwLDAsMCwuMzguOTIsMS4zNSwxLjM1LDAsMCwwLC45My4zOGgyVjE0LjlsLTIsMFY4LjM1YS42Ny42NywwLDAsMSwuMTgtLjQ3LjYyLjYyLDAsMCwxLC40OC0uMTlIMTguMThhLjYuNiwwLDAsMSwuNDYuMTkuNjYuNjYsMCwwLDEsLjE4LjQ3VjE0LjloLTJ2MS4zMmgyQTEuMzUsMS4zNSwwLDAsMCwxOS43NiwxNS44NFpNMTcuNTIsNy42OVY1LjA2YTEuMzEsMS4zMSwwLDAsMC0uMzgtLjkyLDEuMzQsMS4zNCwwLDAsMC0uOTQtLjM4SDguMzRBMS4zLDEuMywwLDAsMCw3LDUuMDZWNy42OUg4LjM0VjUuMDZoNy44N1Y3LjY5aDEuMzFaTTguMzQsMTIuOTNoNy44N2wwLDUuMjZIOC4zNFYxMi45M1ptNy44Nyw1LjI2djBabS42NSwxLjMxYS42LjYsMCwwLDAsLjQ2LS4xOS43Mi43MiwwLDAsMCwuMi0uNDdWMTIuMjlhLjc0Ljc0LDAsMCwwLS4yLS40Ny42LjYsMCwwLDAtLjQ2LS4xOUg3LjY4YS42LjYsMCwwLDAtLjQ2LjE5LjcyLjcyLDAsMCwwLS4yLjQ3djYuNTVhLjc0Ljc0LDAsMCwwLC4yLjQ3LjYuNiwwLDAsMCwuNDYuMTloOS4xOFpNMTYuNjcsOS4yOGEuNy43LDAsMCwwLS45NCwwLC42My42MywwLDAsMC0uMTguNDYuNjcuNjcsMCwwLDAsLjE4LjQ3LjY4LjY4LDAsMCwwLC45NCwwLC42Ni42NiwwLDAsMCwuMTgtLjQ3QS41OC41OCwwLDAsMCwxNi42Nyw5LjI4WlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNC4yNSAtMy42MSlcIi8+PC9nPjwvc3ZnPicsXHJcbiAgIHRlbXBsYXRlOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNC4yNyAxNS42NFwiPjxnPjxwYXRoIGQ9XCJNMTguMTgsMTkuMTZhMSwxLDAsMCwwLDEtMVY1LjczYTEsMSwwLDAsMC0xLTFoLTJ2MWgyVjE4LjE5SDYuMzdWNS43M2gydi0xaC0yQS45NC45NCwwLDAsMCw1LjY4LDVhMSwxLDAsMCwwLS4yOS43VjE4LjE4YS45NC45NCwwLDAsMCwuMjkuNjksMSwxLDAsMCwwLC42OS4yOUgxOC4xOFpNOS44MiwxMC4zMWg0LjkyYS40OS40OSwwLDAsMCwuMzUtLjE1LjQ3LjQ3LDAsMCwwLC4xNS0uMzUuNDkuNDksMCwwLDAtLjE1LS4zNS40Ny40NywwLDAsMC0uMzUtLjE1SDkuODJhLjQ5LjQ5LDAsMCwwLS4zNS4xNS40Ny40NywwLDAsMC0uMTUuMzUuNDkuNDksMCwwLDAsLjE1LjM1LjQ3LjQ3LDAsMCwwLC4zNS4xNVptNS45LDQuOTJIOC44M2EuNDkuNDksMCwwLDAtLjM1LjE1LjQ3LjQ3LDAsMCwwLS4xNS4zNS40OS40OSwwLDAsMCwuMTUuMzUuNDcuNDcsMCwwLDAsLjM1LjE1aDYuODlhLjQ5LjQ5LDAsMCwwLC4zNS0uMTUuNDcuNDcsMCwwLDAsLjE1LS4zNS41MS41MSwwLDAsMC0uNS0uNVpNNy4zNiwxMi43N2EuNDkuNDksMCwwLDAsLjE1LjM1LjQ3LjQ3LDAsMCwwLC4zNS4xNWg4Ljg1YS40OS40OSwwLDAsMCwuMzUtLjE1LjQ3LjQ3LDAsMCwwLC4xNS0uMzUuNDkuNDksMCwwLDAtLjE1LS4zNS40Ny40NywwLDAsMC0uMzUtLjE1SDcuODVhLjQ5LjQ5LDAsMCwwLS4zNS4xNS41Mi41MiwwLDAsMC0uMTQuMzVaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC01LjE0IC0zLjc3KVwiLz48cGF0aCBkPVwiTTE0LjI0LDYuNzFhMSwxLDAsMCwwLDEtMSwxLDEsMCwwLDAtMS0xLDEsMSwwLDAsMC0xLTFoLTJhLjk0Ljk0LDAsMCwwLS42OS4yOCwxLDEsMCwwLDAtLjI5LjdBLjk0Ljk0LDAsMCwwLDkuNjIsNWEuOTEuOTEsMCwwLDAtLjI5LjY5LDEsMSwwLDAsMCwuMjkuNywxLDEsMCwwLDAsLjY5LjI5aDMuOTNaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC01LjE0IC0zLjc3KVwiLz48L2c+PC9zdmc+JyxcclxuICAgbGluZV9oZWlnaHQ6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1Ljc2IDEzLjU2XCI+PGc+PHBhdGggZD1cIk00LjQsNC44OFY4LjI2YTIsMiwwLDAsMCwuNS4zOXMuMSwwLC4xOC0uMTJhLjYyLjYyLDAsMCwwLC4xNy0uMjhjLjA2LS4xOS4xMy0uNDQuMjEtLjc0cy4xNC0uNTIuMTktLjY2YS41OC41OCwwLDAsMSwuMjEtLjMsMi40MSwyLjQxLDAsMCwxLC42My0uMjEsMy44MywzLjgzLDAsMCwxLC44OC0uMTIsOS4xNSw5LjE1LDAsMCwxLDEuMzEuMDYuMTYuMTYsMCwwLDEsLjExLDAsLjI2LjI2LDAsMCwxLC4wNi4xNCw0LDQsMCwwLDEsMCwuNDl2MmwuMDUsMy43N2MwLDEuNDEsMCwyLjY4LS4wNSwzLjgxYTEuNzksMS43OSwwLDAsMS0uMTEuNDksMTAuNjgsMTAuNjgsMCwwLDEtMS40LjQ1LDEuMTIsMS4xMiwwLDAsMC0uNjkuNDN2LjMxbDAsLjIyLjYxLDBjLjg1LS4wOCwxLjU0LS4xMiwyLjA2LS4xMmExOS43NiwxOS43NiwwLDAsMSwyLjA5LjA4LDE1LjA4LDE1LjA4LDAsMCwwLDEuNjQuMDgsMS40LDEuNCwwLDAsMCwuMjksMCwxLjU4LDEuNTgsMCwwLDAsMC0uMjZsLS4wNS0uNDNhMi4yNiwyLjI2LDAsMCwwLS40My0uMTdsLS43Ny0uMjItLjE1LDBhMi41NSwyLjU1LDAsMCwxLS43OC0uMjgsMi41NiwyLjU2LDAsMCwxLS4xMS0uNzVsMC0xLjI5LDAtMy4xNVY3LjUzYTEwLjUxLDEwLjUxLDAsMCwxLC4wNi0xLjIsMy44MywzLjgzLDAsMCwxLC42LDBsMS44OCwwYTIuMTgsMi4xOCwwLDAsMSwuMzgsMCwuNDUuNDUsMCwwLDEsLjIzLjE3LjkuOSwwLDAsMSwuMDUuMjVjMCwuMTYuMDYuMzUuMS41OGEzLjMzLDMuMzMsMCwwLDAsLjE0LjU1QTYuMzksNi4zOSwwLDAsMCwxNSw5YTIuOTEsMi45MSwwLDAsMCwuNi0uMTUsMi43NywyLjc3LDAsMCwwLDAtLjQ2bDAtLjUxLDAtMi45NS0uMjUsMC0uMzgsMEwxNSw0Ljk0YS43MS43MSwwLDAsMS0uMTguMTUuNDUuNDUsMCwwLDEtLjI1LjA3bC0uMjksMEg4Ljc1bC0uMTUsMEg3LjQ1YTE3LDE3LDAsMCwxLTEuODYsMEw1LjM2LDVsLS4yNS0uMTNaTTE5Ljc1LDE2LjE0aC0uNjl2LTloLjY5QS40LjQsMCwwLDAsMjAuMTMsN2MuMDYtLjExLDAtLjI0LS4xLS4zOUwxOC45Miw1LjE1YS41Mi41MiwwLDAsMC0uODYsMEwxNyw2LjU4Yy0uMTIuMTUtLjE2LjI4LS4xLjM5cy4xOC4xNi4zOC4xNmguNjl2OWgtLjY5YS40LjQsMCwwLDAtLjM4LjE2Yy0uMDYuMTEsMCwuMjQuMS4zOWwxLjExLDEuNDNhLjUyLjUyLDAsMCwwLC44NiwwTDIwLDE2LjY5Yy4xMi0uMTUuMTYtLjI4LjEtLjM5YS40LjQsMCwwLDAtLjM4LS4xNlpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTQuNCAtNC44NilcIi8+PC9nPjwvc3ZnPicsXHJcbiAgIHBhcmFncmFwaF9zdHlsZTogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTEuODEgMTUuNzRcIj48Zz48cGF0aCBkPVwiTTE4LjE4LDMuNzZ2MmgtMlYxOS41aC0yVjUuNzNoLTJWMTkuNWgtMlYxMS42M2EzLjk0LDMuOTQsMCwwLDEsMC03Ljg3aDcuODdaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC02LjM3IC0zLjc2KVwiLz48L2c+PC9zdmc+JyxcclxuICAgdGV4dF9zdHlsZTogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTMuNzYgMTUuNzRcIj48Zz48cGF0aCBkPVwiTTE3LjY4LDYuNzFhMi4yMiwyLjIyLDAsMCwwLDEuMDYtLjIyLjc0Ljc0LDAsMCwwLC40Mi0uNy43My43MywwLDAsMC0uMDgtLjMzLjY3LjY3LDAsMCwwLS4xNy0uMjIsMSwxLDAsMCwwLS4zMS0uMTVMMTguMjYsNWwtLjQ1LS4wOUExNS4yNywxNS4yNywwLDAsMCwxMy4yNiw1VjQuNzRjMC0uNjYtLjYzLTEtMS45Mi0xLS4yNCwwLS40My4xNS0uNTkuNDZhNCw0LDAsMCwwLS4zNiwxLjE0aDB2MGEyNi40NSwyNi40NSwwLDAsMS0zLjUuMzVBMiwyLDAsMCwwLDUuNzcsNmEuODQuODQsMCwwLDAtLjM3Ljc5LDIuMTQsMi4xNCwwLDAsMCwuNDEsMS4yOSwxLjIzLDEuMjMsMCwwLDAsMS4wNS42MywxNi42MiwxNi42MiwwLDAsMCwzLjI5LS40NWwtLjM0LDMuMzVjLS4xNiwxLjYxLS4yOSwyLjktLjM3LDMuODZzLS4xMiwxLjY2LS4xMiwyLjA5bDAsLjY1YTUuMTUsNS4xNSwwLDAsMCwuMDUuNiwxLjI4LDEuMjgsMCwwLDAsLjE2LjU0LjM0LjM0LDAsMCwwLC4yOC4xOCwxLjE2LDEuMTYsMCwwLDAsLjc5LS40NiwzLjY2LDMuNjYsMCwwLDAsLjY4LTEsMjIuMDgsMjIuMDgsMCwwLDAsMS00LjMzcS40OS0zLjEuNzgtNi4xNWEyNC42OSwyNC42OSwwLDAsMSw0LjYyLS44NFpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTUuNCAtMy43NilcIi8+PC9nPjwvc3ZnPicsXHJcbiAgIHNhdmU6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1Ljc0IDE1Ljc0XCI+PGc+PHBhdGggZD1cIk0xOC41MywxOS41bC4yLS4wNUExLjc4LDEuNzgsMCwwLDAsMjAuMTMsMThsMC0uMDlWNy4xNGEyLDIsMCwwLDAtLjI4LS42NEEzLjE4LDMuMTgsMCwwLDAsMTkuNDMsNmMtLjUtLjUyLTEtMS0xLjU1LTEuNTRBMi41OSwyLjU5LDAsMCwwLDE3LjM3LDRhMS44MywxLjgzLDAsMCwwLS42MS0uMjVINmwtLjIxLDBhMS43OCwxLjc4LDAsMCwwLTEuNCwxLjQ5bDAsLjFWMTcuODdhMi40OSwyLjQ5LDAsMCwwLC4wOS4zNywxLjc5LDEuNzksMCwwLDAsMS40NCwxLjIzbC4wOSwwWm0tNi4yNS0uNkg2LjkyYS42MS42MSwwLDAsMS0uNjgtLjQ4Ljc4Ljc4LDAsMCwxLDAtLjIyVjEyLjNhLjYyLjYyLDAsMCwxLC42OS0uNjhIMTcuNjRhLjYyLjYyLDAsMCwxLC42OS42OVYxOC4yYS42NC42NCwwLDAsMS0uNzEuNjlIMTIuMjhaTTEyLDkuODFIOC4xNWEuNjMuNjMsMCwwLDEtLjcyLS43MXYtNGEuNjQuNjQsMCwwLDEsLjcyLS43Mmg3LjY2YS42NC42NCwwLDAsMSwuNzIuNzJ2NGEuNjUuNjUsMCwwLDEtLjc0LjcyWk0xMy41LDVWOS4xOGgxLjc4VjVaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC00LjQxIC0zLjc2KVwiLz48L2c+PC9zdmc+JyxcclxuICAgYmxvY2txdW90ZTogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgNDc1LjA4MiA0NzUuMDgxXCI+PGc+PHBhdGggZD1cIk0xNjQuNDUsMjE5LjI3aC02My45NTRjLTcuNjE0LDAtMTQuMDg3LTIuNjY0LTE5LjQxNy03Ljk5NGMtNS4zMjctNS4zMy03Ljk5NC0xMS44MDEtNy45OTQtMTkuNDE3di05LjEzMmMwLTIwLjE3Nyw3LjEzOS0zNy40MDEsMjEuNDE2LTUxLjY3OGMxNC4yNzYtMTQuMjcyLDMxLjUwMy0yMS40MTEsNTEuNjc4LTIxLjQxMWgxOC4yNzFjNC45NDgsMCw5LjIyOS0xLjgwOSwxMi44NDctNS40MjRjMy42MTYtMy42MTcsNS40MjQtNy44OTgsNS40MjQtMTIuODQ3VjU0LjgxOWMwLTQuOTQ4LTEuODA5LTkuMjMzLTUuNDI0LTEyLjg1Yy0zLjYxNy0zLjYxMi03Ljg5OC01LjQyNC0xMi44NDctNS40MjRoLTE4LjI3MWMtMTkuNzk3LDAtMzguNjg0LDMuODU4LTU2LjY3MywxMS41NjNjLTE3Ljk4Nyw3LjcxLTMzLjU0NSwxOC4xMzItNDYuNjgsMzEuMjY3Yy0xMy4xMzQsMTMuMTI5LTIzLjU1MywyOC42ODgtMzEuMjYyLDQ2LjY3N0MzLjg1NSwxNDQuMDM5LDAsMTYyLjkzMSwwLDE4Mi43MjZ2MjAwLjk5MWMwLDE1LjIzNSw1LjMyNywyOC4xNzEsMTUuOTg2LDM4LjgzNGMxMC42NiwxMC42NTcsMjMuNjA2LDE1Ljk4NSwzOC44MzIsMTUuOTg1aDEwOS42MzljMTUuMjI1LDAsMjguMTY3LTUuMzI4LDM4LjgyOC0xNS45ODVjMTAuNjU3LTEwLjY2MywxNS45ODctMjMuNTk5LDE1Ljk4Ny0zOC44MzRWMjc0LjA4OGMwLTE1LjIzMi01LjMzLTI4LjE2OC0xNS45OTQtMzguODMyQzE5Mi42MjIsMjI0LjYsMTc5LjY3NSwyMTkuMjcsMTY0LjQ1LDIxOS4yN3pcIi8+PHBhdGggZD1cIk00NTkuMTAzLDIzNS4yNTZjLTEwLjY1Ni0xMC42NTYtMjMuNTk5LTE1Ljk4Ni0zOC44MjgtMTUuOTg2aC02My45NTNjLTcuNjEsMC0xNC4wODktMi42NjQtMTkuNDEtNy45OTRjLTUuMzMyLTUuMzMtNy45OTQtMTEuODAxLTcuOTk0LTE5LjQxN3YtOS4xMzJjMC0yMC4xNzcsNy4xMzktMzcuNDAxLDIxLjQwOS01MS42NzhjMTQuMjcxLTE0LjI3MiwzMS40OTctMjEuNDExLDUxLjY4Mi0yMS40MTFoMTguMjY3YzQuOTQ5LDAsOS4yMzMtMS44MDksMTIuODQ4LTUuNDI0YzMuNjEzLTMuNjE3LDUuNDI4LTcuODk4LDUuNDI4LTEyLjg0N1Y1NC44MTljMC00Ljk0OC0xLjgxNC05LjIzMy01LjQyOC0xMi44NWMtMy42MTQtMy42MTItNy44OTgtNS40MjQtMTIuODQ4LTUuNDI0aC0xOC4yNjdjLTE5LjgwOCwwLTM4LjY5MSwzLjg1OC01Ni42ODUsMTEuNTYzYy0xNy45ODQsNy43MS0zMy41MzcsMTguMTMyLTQ2LjY3MiwzMS4yNjdjLTEzLjEzNSwxMy4xMjktMjMuNTU5LDI4LjY4OC0zMS4yNjUsNDYuNjc3Yy03LjcwNywxNy45ODctMTEuNTY3LDM2Ljg3OS0xMS41NjcsNTYuNjc0djIwMC45OTFjMCwxNS4yMzUsNS4zMzIsMjguMTcxLDE1Ljk4OCwzOC44MzRjMTAuNjU3LDEwLjY1NywyMy42LDE1Ljk4NSwzOC44MjgsMTUuOTg1aDEwOS42MzNjMTUuMjI5LDAsMjguMTcxLTUuMzI4LDM4LjgyNy0xNS45ODVjMTAuNjY0LTEwLjY2MywxNS45ODUtMjMuNTk5LDE1Ljk4NS0zOC44MzRWMjc0LjA4OEM0NzUuMDgyLDI1OC44NTUsNDY5Ljc2LDI0NS45Miw0NTkuMTAzLDIzNS4yNTZ6XCIvPjwvZz48L3N2Zz4nLFxyXG4gICBhcnJvd19kb3duOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS43MyA4LjY3XCI+PGc+PHBhdGggZD1cIk0xOC43OSw3LjUyYS44LjgsMCwwLDEsLjU2LS4yMy44Mi44MiwwLDAsMSwuNzkuNzkuOC44LDAsMCwxLS4yMy41NmwtNy4wNyw3LjA3YS43OS43OSwwLDAsMS0uNTcuMjUuNzcuNzcsMCwwLDEtLjU3LS4yNWgwTDQuNjQsOC42NWEuOC44LDAsMCwxLS4yMy0uNTcuODIuODIsMCwwLDEsLjc5LS43OS44LjgsMCwwLDEsLjU2LjIzTDEyLjI4LDE0bDMuMjYtMy4yNiwzLjI1LTMuMjZaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC00LjQxIC03LjI5KVwiLz48L2c+PC9zdmc+JyxcclxuICAgYWxpZ25fanVzdGlmeTogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuNzQgMTMuNzdcIj48Zz48cGF0aCBkPVwiTTQuNDEsNC43NHYySDIwLjE1di0ySDQuNDFabTAsNS45SDIwLjE1di0ySDQuNDF2MlptMCwzLjk0SDIwLjE1di0ySDQuNDF2MlptMCwzLjkzaDcuODd2LTJINC40MXYyWlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNC40MSAtNC43NClcIi8+PC9nPjwvc3ZnPicsXHJcbiAgIGFsaWduX2xlZnQ6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1Ljc0IDEzLjc3XCI+PGc+PHBhdGggZD1cIk00LjQxLDQuNzR2MkgyMC4xNXYtMkg0LjQxWm0xMS44LDMuOTRINC40MXYySDE2LjIydi0yWm0tMTEuOCw1LjlIMTguMTh2LTJINC40MXYyWm0wLDMuOTNoOS44NHYtMkg0LjQxdjJaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC00LjQxIC00Ljc0KVwiLz48L2c+PC9zdmc+JyxcclxuICAgYWxpZ25fcmlnaHQ6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1Ljc0IDEzLjc3XCI+PGc+PHBhdGggZD1cIk00LjQxLDQuNzR2MkgyMC4xNXYtMkg0LjQxWm0zLjkzLDUuOUgyMC4xNXYtMkg4LjM0djJabS0yLDMuOTRIMjAuMTR2LTJINi4zN3YyWm0zLjk0LDMuOTNoOS44NHYtMkgxMC4zMXYyWlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNC40MSAtNC43NClcIi8+PC9nPjwvc3ZnPicsXHJcbiAgIGFsaWduX2NlbnRlcjogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuNzQgMTMuNzdcIj48Zz48cGF0aCBkPVwiTTQuNDEsNC43NHYySDIwLjE1di0ySDQuNDFabTIsMy45NHYySDE4LjE4di0ySDYuMzdabS0xLDUuOUgxOS4xNnYtMkg1LjM5djJabTIsMy45M0gxNy4ydi0ySDcuMzZ2MlpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTQuNDEgLTQuNzQpXCIvPjwvZz48L3N2Zz4nLFxyXG4gICBmb250X2NvbG9yOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS43NCAxNC42MVwiPjxnPjxwYXRoIGQ9XCJNMTguNSwxNS41NywxNC4yOCw0LjMyaC0zLjRMNi42NSwxNS41N2gzbC44LTIuMjZoNC4yM2wuOCwyLjI2aDNaTTE0LDExLjA3SDExLjE0TDEyLjU0LDcsMTMuMjUsOWMuNDEsMS4xOC42NCwxLjg2LjcsMlpNNC40MSwxNi42OXYyLjI0SDIwLjE1VjE2LjY5SDQuNDFaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC00LjQxIC00LjMyKVwiLz48L2c+PC9zdmc+JyxcclxuICAgaGlnaGxpZ2h0X2NvbG9yOic8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1LjY2IDE1Ljc0XCI+PGc+PHBhdGggZD1cIk0xMi4zMiw5LjMxLDEzLjM4LDEzSDExLjIxbC41Mi0xLjgzcS40Ni0xLjYxLjU0LTEuODNaTTQuNDQsMy43NkgyMC4xVjE5LjVINC40NFYzLjc2Wk0xNC43MSwxNy4zMmgyLjYzTDEzLjcsNkgxMC44OUw3LjI2LDE3LjMySDkuODlsLjYzLTIuMjRoMy41NWwuMzIsMS4xMmMuMTguNjUuMjksMSwuMzIsMS4xMlpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTQuNDQgLTMuNzYpXCIvPjwvZz48L3N2Zz4nLFxyXG4gICBsaXN0X2J1bGxldHM6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1Ljc0IDEyLjM3XCI+PGc+PHBhdGggZD1cIk03Ljc3LDE2LjEyYTEuNTksMS41OSwwLDAsMC0uNDktMS4xOCwxLjYyLDEuNjIsMCwwLDAtMS4xOS0uNDksMS42OCwxLjY4LDAsMSwwLDAsMy4zNiwxLjY3LDEuNjcsMCwwLDAsMS42OC0xLjY5Wm0wLTQuNDhBMS42NywxLjY3LDAsMCwwLDYuMDksMTAsMS42OCwxLjY4LDAsMCwwLDQuOSwxMi44MmExLjYyLDEuNjIsMCwwLDAsMS4xOS40OSwxLjY3LDEuNjcsMCwwLDAsMS42OC0xLjY3Wm0xMi4zOCwzLjY0YS4yNy4yNywwLDAsMC0uMDgtLjE5LjI4LjI4LDAsMCwwLS4yLS4wOUg5LjE5YS4yOC4yOCwwLDAsMC0uMi4wOC4yOS4yOSwwLDAsMC0uMDguMTlWMTdhLjI3LjI3LDAsMCwwLC4yOC4yOEgxOS44N2EuMjcuMjcsMCwwLDAsLjE5LS4wOC4yNC4yNCwwLDAsMCwuMDgtLjJWMTUuMjhaTTcuNzcsNy4xM2ExLjYzLDEuNjMsMCwwLDAtLjQ5LTEuMiwxLjYxLDEuNjEsMCwwLDAtMS4xOS0uNDksMS42MSwxLjYxLDAsMCwwLTEuMTkuNDksMS43MSwxLjcxLDAsMCwwLDAsMi40LDEuNjIsMS42MiwwLDAsMCwxLjE5LjQ5LDEuNjEsMS42MSwwLDAsMCwxLjE5LS40OSwxLjYzLDEuNjMsMCwwLDAsLjQ5LTEuMlptMTIuMzgsMy42NmEuMjguMjgsMCwwLDAtLjA4LS4yLjI5LjI5LDAsMCwwLS4xOS0uMDhIOS4xOWEuMjcuMjcsMCwwLDAtLjI4LjI4djEuNjlhLjI3LjI3LDAsMCwwLC4wOC4xOS4yNC4yNCwwLDAsMCwuMi4wOEgxOS44N2EuMjcuMjcsMCwwLDAsLjE5LS4wOC4yNS4yNSwwLDAsMCwuMDgtLjE5VjEwLjc5Wm0wLTQuNWEuMjcuMjcsMCwwLDAtLjA4LS4xOUEuMjUuMjUsMCwwLDAsMTkuODgsNkg5LjE5QS4yOC4yOCwwLDAsMCw5LDYuMWEuMjYuMjYsMCwwLDAtLjA4LjE5VjhBLjI3LjI3LDAsMCwwLDksOC4xN2EuMjQuMjQsMCwwLDAsLjIuMDhIMTkuODdhLjI3LjI3LDAsMCwwLC4xOS0uMDhBLjI1LjI1LDAsMCwwLDIwLjE0LDhWNi4yOVpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTQuNDEgLTUuNDQpXCIvPjwvZz48L3N2Zz4nLFxyXG4gICBsaXN0X251bWJlcjogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuNjkgMTUuNzRcIj48Zz48cGF0aCBkPVwiTTcuNjYsMThhMS4yNCwxLjI0LDAsMCwwLS4yNi0uNzgsMS4xNywxLjE3LDAsMCwwLS43Mi0uNDJsLjg1LTFWMTVINC41OHYxLjM0aC45NHYtLjQ2bC44NSwwaDBjLS4xMS4xMS0uMjIuMjMtLjMyLjM1cy0uMjMuMjctLjM3LjQ3TDUuMzksMTdsLjIzLjUxYy42MS0uMDUuOTIuMTEuOTIuNDlhLjQyLjQyLDAsMCwxLS4xOC4zNy43OS43OSwwLDAsMS0uNDUuMTJBMS40MSwxLjQxLDAsMCwxLDUsMTguMTVsLS41MS43N0EyLjA2LDIuMDYsMCwwLDAsNiwxOS41YTEuOCwxLjgsMCwwLDAsMS4yLS40MUExLjM4LDEuMzgsMCwwLDAsNy42NiwxOFptMC01LjU0SDYuNzVWMTNINS42M0EuNzIuNzIsMCwwLDEsNiwxMi41MWE1LjQ1LDUuNDUsMCwwLDEsLjY2LS40NSwyLjcxLDIuNzEsMCwwLDAsLjY3LS41NywxLjE5LDEuMTksMCwwLDAsLjMxLS44MSwxLjI5LDEuMjksMCwwLDAtLjQ1LTEsMS44NiwxLjg2LDAsMCwwLTItLjExLDEuNTEsMS41MSwwLDAsMC0uNjIuN2wuNzQuNTJBLjg3Ljg3LDAsMCwxLDYsMTAuMjhhLjUxLjUxLDAsMCwxLC4zNS4xMi40Mi40MiwwLDAsMSwuMTMuMzMuNTUuNTUsMCwwLDEtLjIxLjQsMywzLDAsMCwxLS41LjM4Yy0uMTkuMTMtLjM5LjI3LS41OC40MmEyLDIsMCwwLDAtLjUuNiwxLjYzLDEuNjMsMCwwLDAtLjIxLjgxLDMuODksMy44OSwwLDAsMCwuMDUuNDhoMy4yVjEyLjQ0Wm0xMi40NSwyLjgyYS4yNy4yNywwLDAsMC0uMDgtLjE5LjI4LjI4LDAsMCwwLS4yMS0uMDhIOS4xYS4zMi4zMiwwLDAsMC0uMjEuMDguMjQuMjQsMCwwLDAtLjA4LjJWMTdhLjI3LjI3LDAsMCwwLC4wOC4xOS4zLjMsMCwwLDAsLjIxLjA4SDE5LjgzYS4zMi4zMiwwLDAsMCwuMjEtLjA4LjI1LjI1LDAsMCwwLC4wOC0uMTlWMTUuMjZaTTcuNjksNy4zMmgtMVYzLjc2SDUuOEw0LjYsNC44OGwuNjMuNjhhMS44NSwxLjg1LDAsMCwwLC40My0uNDhoMGwwLDIuMjRINC43NFY4LjJoM1Y3LjMyWm0xMi40MywzLjQyYS4yNy4yNywwLDAsMC0uMDgtLjE5LjI4LjI4LDAsMCwwLS4yMS0uMDhIOS4xYS4zMi4zMiwwLDAsMC0uMjEuMDguMjQuMjQsMCwwLDAtLjA4LjJ2MS43MWEuMjcuMjcsMCwwLDAsLjA4LjE5LjMuMywwLDAsMCwuMjEuMDhIMTkuODNhLjMyLjMyLDAsMCwwLC4yMS0uMDguMjUuMjUsMCwwLDAsLjA4LS4xOVYxMC43NFptMC00LjUyQS4yNy4yNywwLDAsMCwyMCw2LC4yOC4yOCwwLDAsMCwxOS44Myw2SDkuMUEuMzIuMzIsMCwwLDAsOC44OSw2YS4yNC4yNCwwLDAsMC0uMDguMTlWNy45M2EuMjcuMjcsMCwwLDAsLjA4LjE5LjMyLjMyLDAsMCwwLC4yMS4wOEgxOS44M0EuMzIuMzIsMCwwLDAsMjAsOC4xMmEuMjYuMjYsMCwwLDAsLjA4LS4yVjYuMjJaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC00LjQzIC0zLjc2KVwiLz48L2c+PC9zdmc+JyxcclxuICAgdGFibGU6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1Ljc0IDE1Ljc0XCI+PGc+PHBhdGggZD1cIk00LjQxLDguMDVWMy43Nkg4LjdWOC4wNUg0LjQxWm01LjcxLDBWMy43Nmg0LjNWOC4wNWgtNC4zWm01Ljc0LTQuMjloNC4yOVY4LjA1SDE1Ljg2VjMuNzZabS0xMS40NSwxMFY5LjQ4SDguN3Y0LjNINC40MVptNS43MSwwVjkuNDhoNC4zdjQuM2gtNC4zWm01Ljc0LDBWOS40OGg0LjI5djQuM0gxNS44NlpNNC40MSwxOS41VjE1LjIxSDguN1YxOS41SDQuNDFabTUuNzEsMFYxNS4yMWg0LjNWMTkuNWgtNC4zWm01Ljc0LDBWMTUuMjFoNC4yOVYxOS41SDE1Ljg2WlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNC40MSAtMy43NilcIi8+PC9nPjwvc3ZnPicsXHJcbiAgIGhvcml6b250YWxfcnVsZTogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuNzQgMi4yNFwiPjxnPjxwYXRoIGQ9XCJNMjAuMTUsMTIuNzVWMTAuNTFINC40MXYyLjI0SDIwLjE1WlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNC40MSAtMTAuNTEpXCIvPjwvZz48L3N2Zz4nLFxyXG4gICBzaG93X2Jsb2NrczogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuNjYgMTUuNjdcIj48Zz48cGF0aCBkPVwiTTE5LjcyLDUuNThhMS42NCwxLjY0LDAsMCwwLTEuNjQtMS42NEg2LjIzYTEuNjIsMS42MiwwLDAsMC0xLjE2LjQ4LDEuNjMsMS42MywwLDAsMC0uNDgsMS4xNlY5LjYzYTEuNiwxLjYsMCwwLDAsLjQ4LDEuMTYsMS42MiwxLjYyLDAsMCwwLDEuMTYuNDdIMTguMDlhMS42NywxLjY3LDAsMCwwLDEuMTYtLjQ3LDEuNjIsMS42MiwwLDAsMCwuNDgtMS4xNlY1LjU4Wm0tLjk0LDQuMDVhLjY4LjY4LDAsMCwxLS43LjdINi4yM2EuNjYuNjYsMCwwLDEtLjQ4LS4yLjc0Ljc0LDAsMCwxLS4yMS0uNVY1LjU4YS42Ni42NiwwLDAsMSwuMi0uNDguNzEuNzEsMCwwLDEsLjQ4LS4yMUgxOC4wOGEuNzQuNzQsMCwwLDEsLjUuMjEuNjYuNjYsMCwwLDEsLjIuNDhaTTYuNDgsNy43MmEuMjEuMjEsMCwwLDAsLjE3LS4wNy4yMi4yMiwwLDAsMCwuMDctLjE3VjcuMDZhMS4yNywxLjI3LDAsMCwxLC4xMS0uNTIuMzcuMzcsMCwwLDEsLjM2LS4yM0g4Ljc3QS4yNS4yNSwwLDAsMCw5LDYuMTdhLjE5LjE5LDAsMCwwLDAtLjIzLjI3LjI3LDAsMCwwLS4yLS4xMkg3LjE5YS44OC44OCwwLDAsMC0uNzIuMzksMS41MSwxLjUxLDAsMCwwLS4yMy44NXYuNDJhLjI0LjI0LDAsMCwwLC4yNC4yNFptLS4xOS44MWEuMjEuMjEsMCwwLDAsLjE3LS4wNy4yNi4yNiwwLDAsMCwuMDctLjE3LjI0LjI0LDAsMCwwLS4yNC0uMjQuMi4yLDAsMCwwLS4xNi4wOS4yLjIsMCwwLDAtLjA3LjE2LjIyLjIyLDAsMCwwLC4wNy4xNy4yMy4yMywwLDAsMCwuMTYuMDZabTguNDYsNS4xYTEuNjMsMS42MywwLDAsMC0uNDctMS4xNkExLjYxLDEuNjEsMCwwLDAsMTMuMTIsMTJINi4yM2ExLjYsMS42LDAsMCwwLTEuMTYuNDYsMS42MiwxLjYyLDAsMCwwLS40OCwxLjE2djQuMDVhMS42NCwxLjY0LDAsMCwwLDEuNjQsMS42NGg2Ljg5YTEuNiwxLjYsMCwwLDAsMS4xNi0uNDgsMS42MiwxLjYyLDAsMCwwLC40Ny0xLjE2Wm0tLjk0LDRhLjcuNywwLDAsMS0uMi40OS42NS42NSwwLDAsMS0uNS4ySDYuMjNhLjY2LjY2LDAsMCwxLS40OC0uMi43NS43NSwwLDAsMS0uMjEtLjQ5di00YS43NC43NCwwLDAsMSwuMjEtLjUuNjYuNjYsMCwwLDEsLjQ4LS4yaDYuODlhLjY4LjY4LDAsMCwxLC43Ljd2NFptNi4xNSwwdi00YTEuNiwxLjYsMCwwLDAtLjQ4LTEuMTZBMS42NywxLjY3LDAsMCwwLDE4LjMyLDEySDE3LjFhMS42MywxLjYzLDAsMCwwLTEuMTYuNDcsMS42MSwxLjYxLDAsMCwwLS40NywxLjE2djRhMS42NywxLjY3LDAsMCwwLC40NywxLjE2LDEuNjIsMS42MiwwLDAsMCwxLjE2LjQ4aDEuMjJBMS42NCwxLjY0LDAsMCwwLDIwLDE3LjY4Wm0tLjk0LTR2NGEuNzUuNzUsMCwwLDEtLjIxLjQ5LjYyLjYyLDAsMCwxLS40OC4ySDE3LjExYS42OS42OSwwLDAsMS0uNS0uMi43LjcsMCwwLDEtLjItLjQ5di00YS42OC42OCwwLDAsMSwuNy0uN2gxLjIyYS42Ni42NiwwLDAsMSwuNDguMi43Mi43MiwwLDAsMSwuMjEuNVpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTQuNDQgLTMuNzkpXCIvPjwvZz48L3N2Zz4nLFxyXG4gICBjYW5jZWw6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1Ljc0IDE1Ljc0XCI+PGc+PHBhdGggZD1cIk0xNC4xNSwxMS42M2w1LjYxLDUuNjFhMS4yOSwxLjI5LDAsMCwxLC4zOC45MywxLjI3LDEuMjcsMCwwLDEtLjQuOTMsMS4yNSwxLjI1LDAsMCwxLS45Mi40LDEuMzEsMS4zMSwwLDAsMS0uOTQtLjRsLTUuNjEtNS42MUw2LjY3LDE5LjFhMS4zMSwxLjMxLDAsMCwxLS45NC40LDEuMjQsMS4yNCwwLDAsMS0uOTItLjQsMS4yNywxLjI3LDAsMCwxLS40LS45MywxLjMzLDEuMzMsMCwwLDEsLjM4LS45M2w1LjYxLTUuNjNMNC43OSw2YTEuMjYsMS4yNiwwLDAsMS0uMzgtLjkzLDEuMjIsMS4yMiwwLDAsMSwuNC0uOTIsMS4yOCwxLjI4LDAsMCwxLC45Mi0uMzksMS4zOCwxLjM4LDAsMCwxLC45NC4zOGw1LjYxLDUuNjEsNS42MS01LjYxYTEuMzMsMS4zMywwLDAsMSwuOTQtLjM4LDEuMjYsMS4yNiwwLDAsMSwuOTIuMzksMS4yNCwxLjI0LDAsMCwxLC40LjkyLDEuMjksMS4yOSwwLDAsMS0uMzkuOTNMMTcsOC44MWwtMi44LDIuODJaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC00LjQxIC0zLjc2KVwiLz48L2c+PC9zdmc+JyxcclxuICAgaW1hZ2U6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1Ljc1IDE1Ljc3XCI+PGc+PHBhdGggZD1cIk04Ljc3LDguNzJhLjg4Ljg4LDAsMCwxLS42MS0uMjcuODIuODIsMCwwLDEtLjI1LS42MS44OS44OSwwLDAsMSwuMjUtLjYyQS44Mi44MiwwLDAsMSw4Ljc3LDdhLjgxLjgxLDAsMCwxLC42MS4yNS44My44MywwLDAsMSwuMjcuNjIuODEuODEsMCwwLDEtLjI1LjYxLjkxLjkxLDAsMCwxLS42My4yN1ptOS42Mi01YTEuNzQsMS43NCwwLDAsMSwxLjc2LDEuNzZWMTcuNzZhMS43NCwxLjc0LDAsMCwxLTEuNzYsMS43Nkg2LjE2QTEuNzQsMS43NCwwLDAsMSw0LjQsMTcuNzZWNS41MUExLjc0LDEuNzQsMCwwLDEsNi4xNiwzLjc1SDE4LjM5Wm0wLDEuNzVINi4xNnY4TDguNTMsMTEuOGEuOTQuOTQsMCwwLDEsLjU0LS4xNy44Ni44NiwwLDAsMSwuNTQuMkwxMS4wOSwxM2wzLjY0LTQuNTVhLjc4Ljc4LDAsMCwxLC4zNC0uMjUuODUuODUsMCwwLDEsLjQyLS4wNy44OS44OSwwLDAsMSwuMzkuMTIuNzguNzgsMCwwLDEsLjI4LjI5bDIuMjQsMy42N1Y1LjUxWm0wLDEyLjI0VjE1LjZMMTUuMywxMC41MywxMS44OSwxNC44YS44OS44OSwwLDAsMS0uNTkuMzIuODIuODIsMCwwLDEtLjY0LS4xOEw5LDEzLjYyLDYuMTYsMTUuNzR2MlpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTQuNCAtMy43NSlcIi8+PC9nPjwvc3ZnPicsXHJcbiAgIHZpZGVvOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS43NCAxNC41NVwiPjxnPjxwYXRoIGQ9XCJNMjAuMTUsMTAuMjZWMTguOWwtMy45NC0xLjU3djEuMkg0LjQxVjEwLjY2SDE2LjIydjEuMjNsMi0uODEsMi0uODJaTTE0LjY0LDE3aDBWMTIuNTRoMHYtLjMxSDZWMTdoOC42N1ptMy45NC0uMzd2LTRsLTIuMzcsMXYybDEuMTguNDgsMS4xOS40OFpNNy45NCw5Ljg2QTIuNzcsMi43NywwLDAsMSw1LjE5LDcuMTFhMi43NiwyLjc2LDAsMCwxLDUuNTEsMEEyLjc4LDIuNzgsMCwwLDEsNy45NCw5Ljg2Wm0wLTMuOTNhMS4yMSwxLjIxLDAsMCwwLS44My4zNSwxLjE1LDEuMTUsMCwwLDAtLjM0Ljg0QTEuMDksMS4wOSwwLDAsMCw3LjExLDgsMS4xNSwxLjE1LDAsMCwwLDgsOC4yOCwxLjEzLDEuMTMsMCwwLDAsOS4xMSw3LjEyLDEuMTYsMS4xNiwwLDAsMCw3Ljk0LDUuOTNabTUuOSwzLjkzYTIuMzQsMi4zNCwwLDAsMS0xLjY3LS42OCwyLjMsMi4zLDAsMCwxLS42OC0xLjY3LDIuMzUsMi4zNSwwLDAsMSw0LTEuNjcsMi4zNywyLjM3LDAsMCwxLDAsMy4zNCwyLjMzLDIuMzMsMCwwLDEtMS42OC42OFptMC0zLjE0YS43NS43NSwwLDEsMCwuNTUuMjIuNzMuNzMsMCwwLDAtLjU1LS4yMlpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTQuNDEgLTQuMzUpXCIvPjwvZz48L3N2Zz4nLFxyXG4gICBsaW5rOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS43NCAxNS43MlwiPjxnPjxwYXRoIGQ9XCJNMTMuMDUsMTMuNjNhLjI0LjI0LDAsMCwxLC4xNS4yMkwxMy40MiwxNmEuMTkuMTksMCwwLDEtLjA4LjE4bC0yLjEyLDIuMTRhNC4wOCw0LjA4LDAsMCwxLTEuMjkuODVBNCw0LDAsMCwxLDQuNzEsMTdhMy45MiwzLjkyLDAsMCwxLS4zLTEuNTJBNCw0LDAsMCwxLDQuNzEsMTRhMy45MSwzLjkxLDAsMCwxLC44Ny0xLjNMNy43LDEwLjU2YS4yNS4yNSwwLDAsMSwuMi0uMDZsMi4xNy4yMmEuMjEuMjEsMCwwLDEsLjE5LjE1LjI0LjI0LDAsMCwxLDAsLjI1TDcuMTIsMTQuMjNhMS44MSwxLjgxLDAsMCwwLDAsMi41OCwxLjc4LDEuNzgsMCwwLDAsMS4yOS41MiwxLjc0LDEuNzQsMCwwLDAsMS4yOC0uNTJMMTIuOCwxMy43YS4yNC4yNCwwLDAsMSwuMjUtLjA3Wk0xOSw0LjkyYTQsNCwwLDAsMSwwLDUuNjZMMTYuODYsMTIuN2EuMjUuMjUsMCwwLDEtLjE3LjA4bC0yLjItLjIzYS4yMS4yMSwwLDAsMS0uMTktLjE1LjIyLjIyLDAsMCwxLDAtLjI1TDE3LjQ0LDlhMS44MSwxLjgxLDAsMCwwLDAtMi41OCwxLjc4LDEuNzgsMCwwLDAtMS4yOS0uNTIsMS43NCwxLjc0LDAsMCwwLTEuMjguNTJMMTEuNzYsOS41N2EuMjEuMjEsMCwwLDEtLjI1LDAsLjI0LjI0LDAsMCwxLS4xNi0uMjFsLS4yMi0yLjE3YS4xOS4xOSwwLDAsMSwuMDgtLjE4bDIuMTItMi4xNGE0LjA4LDQuMDgsMCwwLDEsMS4yOS0uODUsNC4wNSw0LjA1LDAsMCwxLDMuMDYsMCwzLjg1LDMuODUsMCwwLDEsMS4zLjg1Wk01Ljg0LDkuODJhLjI1LjI1LDAsMCwxLS4xOC0uMDguMTkuMTksMCwwLDEtLjA3LS4xOWwuMTEtLjc3YS4yLjIsMCwwLDEsLjExLS4xNy4yNC4yNCwwLDAsMSwuMiwwbDIuNS43MmEuMjUuMjUsMCwwLDEsLjE1LjI3LjIyLjIyLDAsMCwxLS4yMy4yMWwtMi41OSwwWm00LjEyLTItLjczLTIuNWEuMjcuMjcsMCwwLDEsMC0uMkEuMjEuMjEsMCwwLDEsOS40MSw1TDEwLjE5LDVhLjI1LjI1LDAsMCwxLC4xOSwwLC4yMy4yMywwLDAsMSwuMDguMThsLS4wNSwyLjYxYS4yLjIsMCwwLDEtLjE5LjIzaDBBLjIyLjIyLDAsMCwxLDEwLDcuODVabTguNzYsNS41OGEuMjUuMjUsMCwwLDEsLjE4LjA4LjIzLjIzLDAsMCwxLC4wNi4ybC0uMTEuNzdhLjI1LjI1LDAsMCwxLS4xMS4xNy4yMS4yMSwwLDAsMS0uMTIsMGwtLjA4LDBMMTYsMTRhLjI1LjI1LDAsMCwxLS4xNS0uMjcuMjIuMjIsMCwwLDEsLjIyLS4yMWwxLjI5LDAsMS4zMywwWm0tNC4xMiwyLC43NCwyLjUxYS4yOC4yOCwwLDAsMSwwLC4yLjIzLjIzLDAsMCwxLS4xOC4xMWwtLjguMTFhLjIzLjIzLDAsMCwxLS4xNy0uMDcuMjUuMjUsMCwwLDEtLjA4LS4xOGwwLTIuNjFhLjIyLjIyLDAsMCwxLC4yMi0uMjIuMjEuMjEsMCwwLDEsLjI2LjE1WlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNC40MSAtMy43NylcIi8+PC9nPjwvc3ZnPicsXHJcbiAgIG1hdGg6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDExLjgxIDE1LjczXCI+PGc+PHBhdGggZD1cIk0xNy4xOSw1LjczYTEsMSwwLDAsMCwuNzEtLjI5LDEsMSwwLDAsMCwuMjgtLjcsMSwxLDAsMCwwLTEtMUg3LjM1YTEsMSwwLDAsMC0xLDEsLjc3Ljc3LDAsMCwwLC4xMy40N2gwbDQuNTgsNi40M0w2LjY4LDE3LjgxYTEuMjUsMS4yNSwwLDAsMC0uMjkuNzEuOTQuOTQsMCwwLDAsLjI4LjcuOTIuOTIsMCwwLDAsLjY5LjI4SDE3LjJhMSwxLDAsMCwwLC43MS0uMjgsMSwxLDAsMCwwLDAtMS4zOS45Mi45MiwwLDAsMC0uNzEtLjI5SDkuMjZsMy44Ny01LjQzYS44Ni44NiwwLDAsMCwwLS45NUw5LjI2LDUuNzNoNy45M1pcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTYuMzggLTMuNzcpXCIvPjwvZz48L3N2Zz4nLFxyXG4gICB1bmxpbms6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1Ljc0IDE1LjcyXCI+PGc+PHBhdGggZD1cIk0xOSwxOC4zMmE0LDQsMCwwLDAsMC01LjY4TDE1Ljg1LDkuNWwtMS4xNywxLjU1TDE3LjU3LDE0YTIsMiwwLDAsMSwuNjEsMS40NywyLjA4LDIuMDgsMCwwLDEtMi4wOSwyLjA5LDIsMiwwLDAsMS0xLjQ3LS42MWwtLjM4LS4zNy0xLjc0LDEsLjguNzhhNCw0LDAsMCwwLDUuNjgsMFpNOCw5Ljc3YTIsMiwwLDAsMS0xLjI3LTEsMS44OSwxLjg5LDAsMCwxLS4yMS0xLjU3QTIuMSwyLjEsMCwwLDEsNy40NSw2LDIsMiwwLDAsMSw5LDUuNzZMMTIuMjcsNy4ybC40OS0yTDkuNDgsMy45YTQsNCwwLDAsMC0zLjA2LjQxQTMuODIsMy44MiwwLDAsMCw0LjU2LDYuNzNhMy44LDMuOCwwLDAsMCwuNCwzQTMuNzgsMy43OCwwLDAsMCw3LjM5LDExLjZsNS4zOCwyLC40OS0yLTIuNjQtLjk0TDgsOS43N1pcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTQuNDEgLTMuNzYpXCIvPjwvZz48L3N2Zz4nLFxyXG4gICB0YWJsZV9oZWFkZXI6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1Ljc1IDE1Ljc0XCI+PGc+PHBhdGggZD1cIk0xNywxOS41di0uNzhIMTUuNXYuNzhIMTdabS0zLDB2LS43OEgxMi41di43OEgxNFptLTMsMHYtLjc4SDkuNTN2Ljc4SDExWm0tMywwdi0uNzhINi41M3YuNzhIOFptMTAuNTUsMGExLjczLDEuNzMsMCwwLDAsLjg1LS4zNSwxLjY3LDEuNjcsMCwwLDAsLjU2LS43NmwtLjcxLS4zMWExLjIxLDEuMjEsMCwwLDEtLjM1LjQsMS4zNCwxLjM0LDAsMCwxLS41My4yM2wuMDguMzhjLjA2LjI0LjA5LjM4LjEuNDFabS0xMy43LS42My41NS0uNTVBLjc3Ljc3LDAsMCwxLDUuMjUsMThhMS4zMSwxLjMxLDAsMCwxLS4wNi0uMzh2LS4zOEg0LjQxdi4zOGEyLDIsMCwwLDAsLjEyLjY4LDEuNiwxLjYsMCwwLDAsLjM1LjU3Wm0xNS4yNy0yLjEyVjE1LjI2aC0uNzh2MS40OWguNzhabS0xNS0xVjE0LjIzSDQuNDF2MS40OWguNzhabTE1LTJWMTIuMjZoLS43OHYxLjQ5aC43OFptLTE1LTFWMTEuMjJINC40MXYxLjUxaC43OFptMTUtMlY5LjI2aC0uNzh2MS41MWguNzhabS0xNS0xVjguMTdINC40MVY5Ljc0aC43OFptMTUtMlY2LjI4aC0uNzhWNy43N2guNzhabS0xNS0xLjExVjUuMzNMNC40OCw1LjFhLjc3Ljc3LDAsMCwwLS4wNy4yNywyLjcyLDIuNzIsMCwwLDAsMCwuMjh2MWguNzlaTTE5LjIxLDVsLjYzLS40QTEuNjIsMS42MiwwLDAsMCwxOS4xNiw0YTEuOTQsMS45NCwwLDAsMC0uOTEtLjIydi43OGExLjMxLDEuMzEsMCwwLDEsLjU2LjEyLjg4Ljg4LDAsMCwxLC40LjM2Wk02LDQuNTRINy43OFYzLjc2SDZhLjgyLjgyLDAsMCwwLS4yOC4wNmwuMTIuMzVjLjA3LjIxLjEuMzMuMTEuMzZabTEwLjgsMFYzLjc2SDE1LjI4di43OGgxLjQ5Wm0tMywwVjMuNzZIMTIuMjh2Ljc4aDEuNDlabS0zLDBWMy43Nkg5LjI4di43OGgxLjUxWk02LDEwLjg0aDEyLjZWNi45MUg2WlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNC40IC0zLjc2KVwiLz48L2c+PC9zdmc+JyxcclxuICAgbWVyZ2VfY2VsbDogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuNzYgMTUuNzRcIj48Zz48cGF0aCBkPVwiTTE4LjkyLDEzLjVoMS4yM3Y0LjE1QTEuODQsMS44NCwwLDAsMSwxOC4zLDE5LjVIMTRWMTguMjdIMTguM2EuNi42LDAsMCwwLC40NC0uMTguNTkuNTksMCwwLDAsLjE4LS40NFYxMy41Wk0xOC4zLDMuNzZhMS44NCwxLjg0LDAsMCwxLDEuODUsMS44NVY5LjgySDE4LjkyVjUuNmEuNi42LDAsMCwwLS4xOC0uNDRBLjU5LjU5LDAsMCwwLDE4LjMsNUgxNFYzLjc2SDE4LjNabTEuODUsOC41MUgxNS42TDE3LjI2LDE0bC0uODYuODYtMy4xNC0zLjE3TDE2LjQsOC41MWwuODYuODZMMTUuNjIsMTFoNC41NHYxLjI0Wm0tMTMuOSw2aDQuMjdWMTkuNUg2LjI1QTEuODQsMS44NCwwLDAsMSw0LjQsMTcuNjVWMTMuNUg1LjYzdjQuMTVhLjYxLjYxLDAsMCwwLC42Mi42MlptMC0xNC41MWg0LjI3VjVINi4yNWEuNi42LDAsMCwwLS40NC4xOC41Ny41NywwLDAsMC0uMTcuNDNWOS44MUg0LjQxVjUuNkExLjgzLDEuODMsMCwwLDEsNi4yNSwzLjc2Wm01LDcuOUw4LjE1LDE0LjgzLDcuMywxNCw5LDEyLjI3SDQuNDFWMTFIOC45NEw3LjMsOS4zOCw3LjczLDlsLjQzLS40M1pcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTQuNCAtMy43NilcIi8+PC9nPjwvc3ZnPicsXHJcbiAgIHNwbGl0X2NlbGw6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1Ljc1IDE1Ljc0XCI+PGc+PHBhdGggZD1cIk0xMC4zNywxMi4yNUg2Ljc0TDguNCwxMy45NGwtLjg3Ljg2TDQuNDEsMTEuNjMsNy41Myw4LjVsLjg3Ljg2TDYuNzQsMTFoMy42MnYxLjIzWm05Ljc4LS42MUwxNywxNC44MSwxNi4xMywxNGwxLjY2LTEuNjlIMTQuMTZWMTFoMy42M0wxNi4xMyw5LjM3bC40My0uNDNBNS4yNCw1LjI0LDAsMCwxLDE3LDguNTFaTTE4LjksOC4yMlY1LjYxYS41Ny41NywwLDAsMC0uMTgtLjQzQS42NS42NSwwLDAsMCwxOC4yOSw1SDEyLjg4VjE4LjI4aDUuNDFhLjcuNywwLDAsMCwuNDQtLjE4LjU3LjU3LDAsMCwwLC4xOC0uNDNWMTVoMS4yM3YyLjY0YTEuODQsMS44NCwwLDAsMS0xLjg1LDEuODNoLTEyQTEuODQsMS44NCwwLDAsMSw0Ljk0LDE5YTEuODEsMS44MSwwLDAsMS0uNTQtMS4yOVYxNUg1LjYzdjIuNjRhLjU3LjU3LDAsMCwwLC4xOC40My42Ny42NywwLDAsMCwuNDQuMThoNS40MVY1SDYuMjVhLjcuNywwLDAsMC0uNDQuMTguNTYuNTYsMCwwLDAtLjE3LjQzVjguMjJINC40MVY1LjYxQTEuOCwxLjgsMCwwLDEsNSw0LjMxYTEuOTEsMS45MSwwLDAsMSwxLjMxLS41NWgxMmExLjg5LDEuODksMCwwLDEsMS4zMS41NSwxLjgsMS44LDAsMCwxLC41NCwxLjNWOC4yM0gxOC45WlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNC40IC0zLjc2KVwiLz48L2c+PC9zdmc+JyxcclxuICAgY2FwdGlvbjogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuNzQgMTMuNzlcIj48Zz48cGF0aCBkPVwiTTQuNDEsMTguNTJIMjAuMTV2LTJINC40MVpNMjAsNC43M0gxOC4wN1Y2aC42NXYuNjVIMjBWNC43M1pNMTcsNlY0LjczSDE0LjU1VjZIMTdaTTEzLjQ5LDZWNC43M0gxMVY2aDIuNDdaTTEwLDZWNC43M0g3LjVWNkgxMFpNNS43OSw2aC42NVY0LjczSDQuNVY2LjY3SDUuOFY2Wk00LjUsMTEuMzRINS43OVY4LjQ4SDQuNVpNNi40NCwxMy44SDUuNzl2LS42NUg0LjV2MS45NEg2LjQ0Wk0xNywxNS4wOVYxMy44SDE0LjU1djEuMjlIMTdabS0zLjUyLDBWMTMuOEgxMXYxLjI5aDIuNDdabS0zLjUzLDBWMTMuOEg3LjV2MS4yOUgxMFpNMjAsMTMuMTZIMTguNzJ2LjY1aC0uNjVWMTUuMUgyMFptLTEuMjktMS44MkgyMFY4LjQ4aC0xLjN2Mi44NlpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTQuNDEgLTQuNzMpXCIvPjwvZz48L3N2Zz4nLFxyXG4gICBlZGl0OiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS43NCAxNS43M1wiPjxnPjxwYXRoIGQ9XCJNNy41MSw1LjY4aDZsMS41Mi0xLjU3SDYuOTRhMi40LDIuNCwwLDAsMC0xLjc5LjgyQTIuOCwyLjgsMCwwLDAsNC40MSw2LjhWMTdhMi41NSwyLjU1LDAsMCwwLC43NSwxLjhBMi40OCwyLjQ4LDAsMCwwLDcsMTkuNUgxNy4yMmEyLjU3LDIuNTcsMCwwLDAsMS44My0uNzQsMi41MiwyLjUyLDAsMCwwLC43Ny0xLjhWOC44M2wtMS41OCwxLjU0djZhMS41NCwxLjU0LDAsMCwxLTEuNTMsMS41M0g3LjUxQTEuNTQsMS41NCwwLDAsMSw2LDE2LjQxVjcuMjFBMS41MiwxLjUyLDAsMCwxLDcuNTEsNS42OFptNS42Myw3LjQ3aDBMMTAuNywxMC43NGwtMSwzLjM4LDEuNzEtLjQ4LDEuNy0uNDlabS4zNC0uMzRoMGw1LjM2LTUuMzJMMTYuNCw1LjA4LDExLDEwLjRsMS4yMywxLjIxLDEuMjEsMS4yWk0xOS45Myw2LjRhLjgyLjgyLDAsMCwwLC4yMi0uNDhBLjU0LjU0LDAsMCwwLDIwLDUuNDdMMTguNDUsNEEuNjcuNjcsMCwwLDAsMTgsMy43N2EuNy43LDAsMCwwLS40OC4yMWwtLjc0LjcyLDIuNDQsMi40My4zNy0uMzcuMzUtLjM2WlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNC40MSAtMy43NylcIi8+PC9nPjwvc3ZnPicsXHJcbiAgIGRlbGV0ZTogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuNzMgMTUuNzRcIj48Zz48cGF0aCBkPVwiTTE5LjE2LDYuNzFhLjk0Ljk0LDAsMCwwLC42OS0uMjguOTEuOTEsMCwwLDAsLjI5LS42OEExLDEsMCwwLDAsMTkuODUsNWEuOTMuOTMsMCwwLDAtLjY5LS4zSDE0LjI0QS45NC45NCwwLDAsMCwxNCw0LjA2YS45Mi45MiwwLDAsMC0uNy0uM2gtMmExLDEsMCwwLDAtLjcuMy45My45MywwLDAsMC0uMjguNjhINS4zOUEuOTIuOTIsMCwwLDAsNC43LDVhMSwxLDAsMCwwLS4yOS43MS45MS45MSwwLDAsMCwuMjkuNjgsMSwxLDAsMCwwLC42OS4yOEgxOS4xNlptLTEyLjc5LDFhMSwxLDAsMCwwLS43LjMuOTQuOTQsMCwwLDAtLjI4LjY5djguODVBMS44OCwxLjg4LDAsMCwwLDYsMTguOTNhMS45LDEuOSwwLDAsMCwxLjM5LjU3SDE3LjJhMS44NywxLjg3LDAsMCwwLDEuMzktLjU4LDEuOTEsMS45MSwwLDAsMCwuNTgtMS4zOVY4LjY4QTEsMSwwLDAsMCwxOC44OCw4YS44OS44OSwwLDAsMC0uNy0uMjksMSwxLDAsMCwwLS42OS4yOS45Mi45MiwwLDAsMC0uMjkuNjh2Ny44N2ExLDEsMCwwLDEtMSwxSDguMzRhLjk0Ljk0LDAsMCwxLS42OS0uMjgsMSwxLDAsMCwxLS4yOS0uNzFWOC42OGExLDEsMCwwLDAtMS0xWlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNC40MSAtMy43NilcIi8+PC9nPjwvc3ZnPicsXHJcbiAgIG1vZGlmeTogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuNyAxNS43NFwiPjxnPjxwYXRoIGQ9XCJNMTkuNzksMTUuMjNhLjY2LjY2LDAsMCwxLC4zLjM4LjU5LjU5LDAsMCwxLS4wNy40OGwtLjgsMS4zOGEuNjYuNjYsMCwwLDEtLjM4LjMuNTkuNTksMCwwLDEtLjQ4LS4wN2wtLjY4LS4zOGE0LjU1LDQuNTUsMCwwLDEtMS4zNC43N3YuNzhhLjY0LjY0LDAsMCwxLS4xOC40NS42MS42MSwwLDAsMS0uNDUuMThoLTEuNmEuNi42LDAsMCwxLS40NC0uMTguNjYuNjYsMCwwLDEtLjE5LS40NXYtLjc4YTQuMzYsNC4zNiwwLDAsMS0xLjMyLS43N2wtLjY5LjM4YS41OC41OCwwLDAsMS0uNDguMDcuNjYuNjYsMCwwLDEtLjM4LS4zbC0uMzgtLjY2aC44M2ExLjc3LDEuNzcsMCwwLDAsMS4yMy0uNTIsMS43MiwxLjcyLDAsMCwwLC41MS0xLjIzdi0uMThhMywzLDAsMCwwLC40OS0uMjhsLjE1LjA5YTEuODMsMS44MywwLDAsMCwuODguMjNBMS43NSwxLjc1LDAsMCwwLDE1Ljg0LDE0bC44OC0xLjUyYTEuNywxLjcsMCwwLDAsLjE3LTEuMzIsMS42NiwxLjY2LDAsMCwwLS4zLS42MSwxLjg0LDEuODQsMCwwLDAtLjUxLS40NWwtLjE1LS4wOSwwLS4yOSwwLS4yOC4xNS0uMDlhMSwxLDAsMCwwLC4yNi0uMThsMCwuMDZ2Ljc4YTQuMzQsNC4zNCwwLDAsMSwxLjM0Ljc3bC42OC0uMzhhLjY4LjY4LDAsMCwxLC40OC0uMDYuNjQuNjQsMCwwLDEsLjM4LjI5bC44LDEuMzhhLjU4LjU4LDAsMCwxLC4wNy40OC42My42MywwLDAsMS0uMy4zOGwtLjY4LjRhMy44NCwzLjg0LDAsMCwxLC4wOC43Niw0LjEzLDQuMTMsMCwwLDEtLjA4Ljc4bC4zNC4xOC4zMi4yWk0xMC4xNyw3Ljg2YTEuOSwxLjksMCwwLDEsMS4zNSwzLjIzLDEuODUsMS44NSwwLDAsMS0xLjM1LjU1QTEuOSwxLjksMCwwLDEsOC44Myw4LjQxYTEuOTIsMS45MiwwLDAsMSwxLjM0LS41NVptMS41OCw3LjJhLjczLjczLDAsMCwxLS4yMS40OS42Ni42NiwwLDAsMS0uNDguMkg5LjI5YS42OC42OCwwLDAsMS0uNjktLjY5VjE0LjJhNC43NSw0Ljc1LDAsMCwxLTEuNDgtLjg2bC0uNzUuNDVhLjczLjczLDAsMCwxLS43LDAsLjYzLjYzLDAsMCwxLS4yNS0uMjZMNC41NCwxMmEuNjcuNjcsMCwwLDEtLjA4LS41My43MS43MSwwLDAsMSwuMzItLjQybC43NS0uNDNhNC44LDQuOCwwLDAsMS0uMDgtLjg1LDQuNzEsNC43MSwwLDAsMSwuMDgtLjg1bC0uNzQtLjQ0YS43MS43MSwwLDAsMS0uMzItLjQyLjY1LjY1LDAsMCwxLC4wNy0uNTRMNS40Miw2YS42Ni42NiwwLDAsMSwuNDItLjMybC4xOCwwYS43My43MywwLDAsMSwuMzUuMDlsLjc1LjQzQTQuNjgsNC42OCwwLDAsMSw4LjYsNS4zM1Y0LjQ1YS42OC42OCwwLDAsMSwuNjktLjY5aDEuNzdhLjY0LjY0LDAsMCwxLC40OC4yLjczLjczLDAsMCwxLC4yMS40OXYuODhhNC43NSw0Ljc1LDAsMCwxLDEuNDguODVMMTQsNS43NWEuNjcuNjcsMCwwLDEsLjM0LS4wOWwuMTgsMGEuNzEuNzEsMCwwLDEsLjQyLjMybC44OSwxLjU0YS42Ny42NywwLDAsMSwuMDYuNTIuNzMuNzMsMCwwLDEtLjMyLjQzbC0uNzUuNDJhNC44LDQuOCwwLDAsMSwuMDguODUsNC43MSw0LjcxLDAsMCwxLS4wOC44NWwuNzUuNDNhLjY2LjY2LDAsMCwxLC4zMi40Mi43My43MywwLDAsMS0uMDYuNTRsLS44OSwxLjUyYS42OS42OSwwLDAsMS0uMjUuMjYuNy43LDAsMCwxLS4zNS4wOS42NC42NCwwLDAsMS0uMzQtLjA5bC0uNzUtLjQ1YTQuODcsNC44NywwLDAsMS0xLjQ4Ljg2di44N1pNNy4yMyw5Ljc1YTMsMywwLDAsMCwuODYsMi4wOCwyLjk0LDIuOTQsMCwxLDAsNC4xNi00LjE2LDMsMywwLDAsMC0yLjA4LS44NUEyLjk0LDIuOTQsMCwwLDAsNy4yMyw5Ljc1WlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNC40NCAtMy43NilcIi8+PC9nPjwvc3ZnPicsXHJcbiAgIHJldmVydDogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuNzYgMTQuNjlcIj48Zz48cGF0aCBkPVwiTTE4LjI2LDE1VjEyLjNsMS44OS0yVjE1YTIuNTgsMi41OCwwLDAsMS0uMjQsMWMtLjIuNTgtLjc1LjkyLTEuNjUsMUg3LjU2djJMNC40MSwxNS42Myw3LjU2LDEzdjJoMTAuN1pNNi4zLDguMjhWMTFMNC40MSwxM1Y4LjI4YTIuNTgsMi41OCwwLDAsMSwuMjQtMWMuMi0uNTguNzUtLjkyLDEuNjUtMUgxN3YtMmwzLjE1LDMuMzRMMTcsMTAuM3YtMkg2LjNaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC00LjQgLTQuMjgpXCIvPjwvZz48L3N2Zz4nLFxyXG4gICBhdXRvX3NpemU6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1Ljc0IDE1Ljc0XCI+PGc+PHBhdGggZD1cIk02LjcxLDE3LjE5LDYuODksMTZsMS4yMS0uMTVBNiw2LDAsMCwxLDYuODEsMTMuOWE1Ljc4LDUuNzgsMCwwLDEtLjQ1LTIuMjdBNiw2LDAsMCwxLDguMSw3LjQ1YTUuODMsNS44MywwLDAsMSw0LjE3LTEuNzNsMS0xLTEtMUE3Ljg5LDcuODksMCwwLDAsNSwxNC42NGE3LjczLDcuNzMsMCwwLDAsMS43MSwyLjU1Wm01LjU3LDIuMzFoMEE3Ljg2LDcuODYsMCwwLDAsMTcuODUsNi4wN0wxNy42Nyw3LjNsLTEuMjEuMTVhNS45LDUuOSwwLDAsMSwxLjI5LDEuOTIsNS44MSw1LjgxLDAsMCwxLC40NSwyLjI2LDUuOTEsNS45MSwwLDAsMS01LjksNS45bC0xLDEsLjQ5LjQ5LjQ3LjVaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC00LjQxIC0zLjc2KVwiLz48L2c+PC9zdmc+JyxcclxuICAgaW5zZXJ0X3Jvd19iZWxvdzogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuOCAxNS44XCI+PGc+PHBhdGggZD1cIk0xNS43LDEuM2MtMC4xLTAuMS0wLjEtMC4yLTAuMi0wLjJMMTUuMywxSDAuNEwwLjMsMS4xYzAsMC0wLjEsMC4xLTAuMSwwLjFjMCwwLTAuMSwwLjEtMC4xLDAuMUwwLDEuNHY3LjdsMC4xLDAuMWMwLDAuMSwwLjEsMC4xLDAuMiwwLjJsMC4xLDAuMWgyLjNWOS4zbDAuMS0wLjVMMyw4LjVsMC4xLTAuMmMtMC4xLDAtMC4yLDAtMC4zLDBIMS4ydi02aDEzLjN2NmgtMS42Yy0wLjEsMC0wLjIsMC0wLjMsMGwwLjEsMC4ybDAuMiwwLjRDMTIuOSw5LDEzLDkuMiwxMyw5LjN2MC4xaDIuM2wwLjItMC4xYzAuMSwwLDAuMS0wLjEsMC4yLTAuMmwwLjEtMC4xVjEuNEwxNS43LDEuM3pcIi8+PHBhdGggZD1cIk0xMC41LDcuNUM5LjksNy4xLDkuMyw2LjgsOC42LDYuN2MtMC4yLDAtMC41LTAuMS0wLjcsMGMtMC4yLDAtMC41LDAtMC43LDBDNi42LDYuNyw2LjEsNi45LDUuNiw3LjNDNS4yLDcuNiw0LjcsOCw0LjQsOC40QzQuMyw4LjYsNC4yLDguOCw0LjIsOC45QzQuMSw5LjEsNCw5LjMsMy45LDkuNEMzLjksOS42LDMuOCw5LjcsMy44LDkuOWMwLDAuMi0wLjEsMC4zLTAuMSwwLjV2LTAuMWMtMC4xLDAuOCwwLjEsMS42LDAuNSwyLjRjMC40LDAuNywxLDEuMywxLjcsMS43YzAuMywwLjIsMC42LDAuMywwLjksMC4zYzAuMywwLjEsMC43LDAuMSwxLDAuMWMwLjMsMCwwLjcsMCwxLTAuMWMwLjMtMC4xLDAuNi0wLjIsMC45LTAuM2MwLjUtMC4zLDAuOS0wLjYsMS4zLTFjMC4zLTAuNCwwLjYtMC44LDAuOC0xLjNjMC4xLTAuNCwwLjItMC45LDAuMi0xLjRjMC0wLjUtMC4xLTEtMC4zLTEuNEMxMS41LDguNiwxMS4xLDgsMTAuNSw3LjV6IE0xMC4xLDExLjNIOC41djEuNkg4SDcuOUg3LjN2MHYtMC4xdi0xLjRINS43di0wLjR2LTAuMnYtMC42aDBoMS41VjguNWgxLjJ2MS42aDEuNlYxMS4zelwiLz48L2c+PC9zdmc+JyxcclxuICAgaW5zZXJ0X3Jvd19hYm92ZTogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuOCAxNS44XCI+PGc+PHBhdGggZD1cIk0wLjEsMTQuNWMwLjEsMC4xLDAuMSwwLjIsMC4yLDAuMmwwLjEsMC4xaDE0LjlsMC4xLTAuMWMwLDAsMC4xLTAuMSwwLjEtMC4xYzAsMCwwLjEtMC4xLDAuMS0wLjFsMC4xLTAuMVY2LjdsLTAuMS0wLjFjMC0wLjEtMC4xLTAuMS0wLjItMC4ybC0wLjEtMC4xaC0yLjN2MC4xbC0wLjEsMC41bC0wLjIsMC40bC0wLjEsMC4yYzAuMSwwLDAuMiwwLDAuMywwaDEuNnY2SDEuM3YtNmgxLjZjMC4xLDAsMC4yLDAsMC4zLDBMMy4xLDcuM0wyLjksNi45QzIuOCw2LjgsMi44LDYuNiwyLjcsNi41VjYuM0gwLjRMMC4zLDYuNGMtMC4xLDAtMC4xLDAuMS0wLjIsMC4yTDAsNi43djcuN0wwLjEsMTQuNXpcIi8+PHBhdGggZD1cIk01LjMsOC4zYzAuNiwwLjUsMS4yLDAuOCwxLjksMC45YzAuMiwwLDAuNSwwLjEsMC43LDBjMC4yLDAsMC41LDAsMC43LDBjMC42LTAuMSwxLjEtMC4zLDEuNi0wLjZjMC41LTAuMywwLjktMC43LDEuMi0xLjJjMC4xLTAuMiwwLjItMC4zLDAuMy0wLjVjMC4xLTAuMiwwLjItMC40LDAuMi0wLjVjMC4xLTAuMSwwLjEtMC4zLDAuMS0wLjRDMTIsNS44LDEyLDUuNiwxMiw1LjR2MC4xYzAuMS0wLjgtMC4xLTEuNi0wLjUtMi40Yy0wLjQtMC43LTEtMS4zLTEuNy0xLjdDOS41LDEuMyw5LjIsMS4yLDguOSwxLjFDOC41LDEsOC4yLDEsNy45LDFjLTAuMywwLTAuNywwLTEsMC4xQzYuNiwxLjIsNi4zLDEuMyw2LDEuNEM1LjUsMS43LDUuMSwyLDQuNywyLjRDNC40LDIuOCw0LjEsMy4zLDMuOSwzLjhDMy44LDQuMiwzLjcsNC43LDMuNyw1LjJjMCwwLjUsMC4xLDEsMC4zLDEuNEM0LjMsNy4yLDQuNyw3LjgsNS4zLDguM3ogTTUuNyw0LjVoMS42VjIuOWgwLjVoMC4xaDAuNnYwdjAuMXYxLjRIMTB2MC40djAuMnYwLjZoMEg4LjV2MS42SDcuM1Y1LjdINS43VjQuNXpcIi8+PC9nPjwvc3ZnPicsXHJcbiAgIGluc2VydF9jb2x1bW5fbGVmdDogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuOCAxNS44XCI+PGc+PHBhdGggZD1cIk0xNC41LDE1LjdjMC4xLTAuMSwwLjItMC4xLDAuMi0wLjJsMC4xLTAuMVYwLjRsLTAuMS0wLjFjMCwwLTAuMS0wLjEtMC4xLTAuMWMwLDAtMC4xLTAuMS0wLjEtMC4xTDE0LjQsMEg2LjdMNi42LDAuMWMtMC4xLDAtMC4xLDAuMS0wLjIsMC4yTDYuMywwLjR2Mi4zaDAuMWwwLjUsMC4xTDcuMywzbDAuMiwwLjFjMC0wLjEsMC0wLjIsMC0wLjNWMS4yaDZ2MTMuM2gtNnYtMS42YzAtMC4xLDAtMC4yLDAtMC4zbC0wLjIsMC4xbC0wLjQsMC4yQzYuNywxMi45LDYuNiwxMyw2LjQsMTNINi4zdjIuM2wwLjEsMC4yYzAsMC4xLDAuMSwwLjEsMC4yLDAuMmwwLjEsMC4xaDcuN0wxNC41LDE1Ljd6XCIvPjxwYXRoIGQ9XCJNOC4zLDEwLjVDOC43LDEwLDksOS4zLDkuMSw4LjZjMC0wLjIsMC4xLTAuNSwwLTAuN2MwLTAuMiwwLTAuNSwwLTAuN0M5LDYuNyw4LjgsNi4xLDguNSw1LjdDOC4yLDUuMiw3LjgsNC44LDcuMyw0LjVDNy4yLDQuNCw3LDQuMyw2LjksNC4yQzYuNyw0LjEsNi41LDQsNi40LDRDNi4yLDMuOSw2LjEsMy45LDUuOSwzLjhjLTAuMiwwLTAuMy0wLjEtMC41LTAuMWgwLjFDNC43LDMuNywzLjgsMy45LDMuMSw0LjNDMi40LDQuNywxLjgsNS4zLDEuNCw2QzEuMyw2LjMsMS4yLDYuNiwxLjEsNi45QzEsNy4yLDEsNy42LDEsNy45YzAsMC4zLDAsMC43LDAuMSwxYzAuMSwwLjMsMC4yLDAuNiwwLjMsMC45YzAuMywwLjUsMC42LDAuOSwxLDEuM2MwLjQsMC4zLDAuOCwwLjYsMS4zLDAuOEM0LjIsMTIsNC43LDEyLjEsNS4xLDEyYzAuNSwwLDEtMC4xLDEuNC0wLjNDNy4yLDExLjUsNy44LDExLjEsOC4zLDEwLjV6TTQuNSwxMC4xVjguNUgyLjlWOFY3LjlWNy4zaDBIM2gxLjRWNS43aDAuNGgwLjJoMC42djB2MS41aDEuNnYxLjJINS43djEuNkg0LjV6XCIvPjwvZz48L3N2Zz4nLFxyXG4gICBpbnNlcnRfY29sdW1uX3JpZ2h0OiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS44IDE1LjhcIj48Zz48cGF0aCBkPVwiTTEuMywwLjFDMS4yLDAuMiwxLjEsMC4yLDEuMSwwLjNMMSwwLjR2MTQuOWwwLjEsMC4xYzAsMCwwLjEsMC4xLDAuMSwwLjFjMCwwLDAuMSwwLjEsMC4xLDAuMWwwLjEsMC4xaDcuN2wwLjEtMC4xYzAuMSwwLDAuMS0wLjEsMC4yLTAuMmwwLjEtMC4xdi0yLjNIOS4zbC0wLjUtMC4xbC0wLjQtMC4ybC0wLjItMC4xYzAsMC4xLDAsMC4yLDAsMC4zdjEuNmgtNlYxLjNoNnYxLjZjMCwwLjEsMCwwLjIsMCwwLjNsMC4yLTAuMWwwLjQtMC4yQzksMi45LDkuMiwyLjgsOS4zLDIuOGgwLjFWMC41TDkuNCwwLjNjMC0wLjEtMC4xLTAuMS0wLjItMC4yTDkuMSwwSDEuNEwxLjMsMC4xelwiLz48cGF0aCBkPVwiTTcuNSw1LjNDNyw1LjgsNi43LDYuNSw2LjYsNy4yYzAsMC4yLTAuMSwwLjUsMCwwLjdjMCwwLjIsMCwwLjUsMCwwLjdjMC4xLDAuNiwwLjMsMS4xLDAuNiwxLjZjMC4zLDAuNSwwLjcsMC45LDEuMiwxLjJjMC4yLDAuMSwwLjMsMC4yLDAuNSwwLjNjMC4yLDAuMSwwLjQsMC4yLDAuNSwwLjJjMC4xLDAuMSwwLjMsMC4xLDAuNCwwLjFjMC4yLDAsMC4zLDAuMSwwLjUsMC4xaC0wLjFjMC44LDAuMSwxLjYtMC4xLDIuNC0wLjVjMC43LTAuNCwxLjMtMSwxLjctMS43YzAuMi0wLjMsMC4zLTAuNiwwLjMtMC45YzAuMS0wLjMsMC4xLTAuNywwLjEtMWMwLTAuMywwLTAuNy0wLjEtMWMtMC4xLTAuMy0wLjItMC42LTAuMy0wLjljLTAuMy0wLjUtMC42LTAuOS0xLTEuM0MxMyw0LjQsMTIuNSw0LjIsMTIsNGMtMC40LTAuMS0wLjktMC4yLTEuNC0wLjJjLTAuNSwwLTEsMC4xLTEuNCwwLjJDOC41LDQuMyw3LjksNC43LDcuNSw1LjN6IE0xMS4zLDUuN3YxLjZoMS42djAuNXYwLjF2MC42aDBoLTAuMWgtMS40djEuNmgtMC40aC0wLjJoLTAuNnYwVjguNUg4LjVWNy4zaDEuNlY1LjdIMTEuM3pcIi8+PC9nPjwvc3ZnPicsXHJcbiAgIGRlbGV0ZV9yb3c6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1Ljc1IDEzLjgzXCI+PGc+PHBhdGggZD1cIk00LjcsMTguNDZsLjEyLjA4SDE5LjczbC4xMi0uMDhhLjU4LjU4LDAsMCwwLC4yMi0uMjJsLjA4LS4xMiwwLTcuNjktLjA4LS4xMWEuNzcuNzcsMCwwLDAtLjE4LS4xOGwtLjExLS4wOC0yLjMxLDAtLjA4LjI4LS4xLjI5YTEuNTgsMS41OCwwLDAsMS0uMTIuMjlsLS4xNC4zNHMwLDAsLjE4LDBIMTguOXY2SDUuNjR2LTZINy4zNWMuMTQsMCwuMiwwLC4xOCwwbC0uMTQtLjM0YTIuODUsMi44NSwwLDAsMS0uMTItLjI5bC0uMS0uMjktLjA3LS4yNy0yLjMxLDAtLjExLjA4YS43Ny43NywwLDAsMC0uMTguMThsLS4wOC4xMSwwLDcuNjkuMDguMTJhLjQ3LjQ3LDAsMCwwLC4wOS4xMmwuMTMuMDlaTTEyLjExLDEzYTQsNCwwLDAsMCwxLjQ2LS4yMSw0LjUxLDQuNTEsMCwwLDAsMS4zMS0uNzFBNCw0LDAsMCwwLDE2LjI2LDEwYTQuMzIsNC4zMiwwLDAsMC0uMDgtMi41NCw0LjM0LDQuMzQsMCwwLDAtMS0xLjUyLDQuMTUsNC4xNSwwLDAsMC0xLjU0LTEsNC4zNCw0LjM0LDAsMCwwLTEuMzUtLjIyQTQuMDcsNC4wNywwLDAsMCwxMSw0LjkzLDMuOTQsMy45NCwwLDAsMCw5LjI0LDYuMDcsMy45MiwzLjkyLDAsMCwwLDguMTUsOC44OGEzLjkxLDMuOTEsMCwwLDAsLjEyLjk1QTQuMTYsNC4xNiwwLDAsMCwxMi4xMSwxM1ptMi4zNS00LjE0di41OEgxMC4wOVY4LjI3aDQuMzd2LjU4WlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNC40IC00LjcxKVwiLz48L2c+PC9zdmc+JyxcclxuICAgZGVsZXRlX2NvbHVtbjogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTMuODEgMTUuNzRcIj48Zz48cGF0aCBkPVwiTTUuNjYsMTkuNDJsLjEyLjA4LDcuNjksMCwuMTEtLjA4YS43Ny43NywwLDAsMCwuMTgtLjE4bC4wOC0uMTEsMC0yLjMyLS4xNSwwLS40NS0uMTUtLjQyLS4xOC0uMTctLjA3YTEsMSwwLDAsMCwwLC4yN3YxLjYzaC02VjVoNlY2LjYyYS45LjksMCwwLDAsMCwuMjZsLjE3LS4wNy40Mi0uMTdhMy45MSwzLjkxLDAsMCwxLC40NS0uMTVsLjE1LDAsMC0yLjMyTDEzLjc1LDRhLjc3Ljc3LDAsMCwwLS4xOC0uMThsLS4xMS0uMDhINS43OWwtLjEzLjA3YS42My42MywwLDAsMC0uMjEuMjJsLS4wOC4xMlYxOS4wOGwuMDguMTJhLjQ3LjQ3LDAsMCwwLC4wOS4xMi4zNS4zNSwwLDAsMCwuMTIuMVptOS0zLjY3YTQuMTYsNC4xNiwwLDAsMCwyLjM2LS41MSw0LjA4LDQuMDgsMCwwLDAsMS42Ny0xLjcyLDQsNCwwLDAsMCwuMzUtLjkxLDMuNzksMy43OSwwLDAsMCwuMS0xLDQuNzEsNC43MSwwLDAsMC0uMTEtMSw1LDUsMCwwLDAtLjMtLjg3LDQuMjUsNC4yNSwwLDAsMC0xLTEuMjUsNC40OSw0LjQ5LDAsMCwwLTEuMzQtLjgxQTQuMjYsNC4yNiwwLDAsMCwxNSw3LjQ4YTMuODgsMy44OCwwLDAsMC0xLjQxLjI1QTQuMzIsNC4zMiwwLDAsMCwxMS44Niw5LDQsNCwwLDAsMCwxMSwxMC45NGE0LjQsNC40LDAsMCwwLS4wNS42OCw0LjUsNC41LDAsMCwwLC4wNS42OCwzLjkzLDMuOTMsMCwwLDAsLjYxLDEuNTcsNC4yMiw0LjIyLDAsMCwwLDEuMTgsMS4yLDQuNTksNC41OSwwLDAsMCwuNDguMjdjLjIuMS4zNy4xNy41LjIyYTIuNDQsMi40NCwwLDAsMCwuNDUuMTIsNC42MSw0LjYxLDAsMCwwLC41LjA3Wm0yLjU0LTQuMTJ2LjU4SDEyLjg3VjExaDQuMzd2LjU5WlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNS4zNyAtMy43NilcIi8+PC9nPjwvc3ZnPicsXHJcbiAgIGZpeGVkX2NvbHVtbl93aWR0aDogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj48cGF0aCBkPVwiTTYsNUgxOEExLDEgMCAwLDEgMTksNkExLDEgMCAwLDEgMTgsN0g2QTEsMSAwIDAsMSA1LDZBMSwxIDAgMCwxIDYsNU0yMSwyVjRIM1YySDIxTTE1LDhIMTdWMjJIMTVWOE03LDhIOVYyMkg3VjhNMTEsOEgxM1YyMkgxMVY4WlwiIC8+PC9zdmc+JyxcclxuICAgcm90YXRlX2xlZnQ6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1LjggMTUuOFwiPjxnPjxwYXRoIGQ9XCJNMC41LDEwLjJjMCwwLjEsMCwwLjIsMCwwLjN2MC4ybDAsMGMwLjEsMC4zLDAuMywwLjYsMC40LDAuOWwwLDBDMSwxMS44LDEuMywxMiwxLjUsMTEuOWgwLjFoMC4yaDAuMWMwLjEtMC4xLDAuMy0wLjMsMC40LTAuNXYtMC4yYzAtMC4xLDAtMC4yLTAuMS0wLjNsMCwwYy0wLjItMC4yLTAuMy0wLjQtMC4zLTAuN2wwLDBDMS44LDEwLDEuNyw5LjksMS41LDkuOGMtMC4xLDAtMC4yLDAtMC4zLDBIMC45QzAuNyw5LjksMC42LDEwLDAuNSwxMC4yTDAuNSwxMC4yelwiLz48cGF0aCBkPVwiTTIuMiwxMS41TDIuMiwxMS41TDIuMiwxMS41elwiLz48cGF0aCBkPVwiTTUuOSwzLjZMNS45LDMuNkw1LjksMy42elwiLz48cGF0aCBkPVwiTTAuMSw3LjljMCwwLjMsMCwwLjYsMCwwLjlsMCwwbDAsMGwwLDBsMCwwYzAsMC4yLDAuMSwwLjMsMC4yLDAuNGwwLDBjMC4yLDAuMSwwLjMsMC4yLDAuNSwwLjJsMCwwbDAsMGMwLjIsMCwwLjQtMC4xLDAuNS0wLjNsMCwwYzAtMC4xLDAuMS0wLjMsMC4xLTAuNFY4LjZsMCwwYzAtMC4yLDAtMC41LDAtMC43bDAsMGMwLTAuMi0wLjEtMC40LTAuMi0wLjVDMS4xLDcuMywwLjksNy4yLDAuNyw3LjJTMC4zLDcuMywwLjIsNy40QzAuMSw3LjUsMCw3LjcsMC4xLDcuOXpcIi8+PHBhdGggZD1cIk0xLjksMTIuN0wxLjksMTIuN2MwLDAuMiwwLDAuNCwwLjIsMC41bDAsMGwwLjIsMC4zbDAsMGMwLjIsMC4xLDAuMywwLjIsMC41LDAuNGwwLDBsMCwwbDAsMGwwLDBDMi45LDE0LDMsMTQuMSwzLjIsMTQuMXMwLjQtMC4xLDAuNS0wLjJjMC4xLTAuMiwwLjItMC4zLDAuMi0wLjV2LTAuMWMwLTAuMi0wLjEtMC40LTAuMi0wLjVsMCwwbC0wLjQtMC40bC0wLjItMC4ybDAsMEMzLDEyLjEsMi44LDEyLDIuNiwxMmwwLDBjLTAuMiwwLTAuNCwwLjEtMC41LDAuMmwwLDBDMiwxMi4zLDEuOSwxMi41LDEuOSwxMi43elwiLz48cGF0aCBkPVwiTTYuNiwxNWMwLDAuMiwwLjEsMC40LDAuMiwwLjVjMC4xLDAuMSwwLjIsMC4yLDAuNCwwLjNsMCwwYzAuMywwLDAuNSwwLDAuNywwaDAuM2wwLDBjMC4yLDAsMC40LTAuMSwwLjUtMC4yYzAuMS0wLjIsMC4yLTAuMywwLjItMC41bDAsMGwwLDBjMC0wLjItMC4xLTAuNC0wLjItMC41bDAsMGMtMC4xLTAuMS0wLjMtMC4yLTAuNS0wLjJsMCwwSDcuOWMtMC4xLDAtMC4zLDAtMC41LDBsMCwwSDcuM2MtMC4yLTAuMS0wLjMsMC0wLjUsMC4xbDAsMEM2LjcsMTQuNiw2LjYsMTQuOCw2LjYsMTVMNi42LDE1TDYuNiwxNUw2LjYsMTV6XCIvPjxwYXRoIGQ9XCJNNC4yLDcuNEM0LDcuNSw0LDcuNyw0LDcuOWMwLDAuMiwwLDAuNCwwLjIsMC41bDAsMGwzLjIsMy4ybDAsMGMwLjEsMC4xLDAuMywwLjIsMC41LDAuMnMwLjMtMC4xLDAuNS0wLjJsMCwwbDMuMi0zLjJsMCwwYzAuMS0wLjEsMC4yLTAuMywwLjItMC41YzAtMC4yLTAuMS0wLjQtMC4yLTAuNWwwLDBDMTEuNSw3LjMsMTEsNi43LDEwLDUuOGwwLDBMOC40LDQuMmwwLDBDOC4zLDQuMSw4LjEsNCw3LjksNFM3LjUsNC4xLDcuNCw0LjJMNC4yLDcuNEw0LjIsNy40eiBNNi44LDlMNS43LDcuOWwyLjItMi4ybDIuMywyLjJsLTIuMywyLjJDNy43LDkuOSw3LjMsOS41LDYuOCw5TDYuOCw5elwiLz48cGF0aCBkPVwiTTQuMSwxNC4xQzQsMTQuMiw0LDE0LjMsNCwxNC40djAuMmwwLDBjMC4xLDAuMSwwLjIsMC4zLDAuNCwwLjRsMCwwYzAuMywwLjEsMC42LDAuMiwwLjksMC40aDAuMWgwLjFsMCwwYzAuMiwwLDAuMy0wLjEsMC41LTAuMWwwLDBjMC4yLTAuMSwwLjMtMC4zLDAuMy0wLjRsMCwwbDAsMGwwLDBsMCwwdi0wLjJjMC0wLjEtMC4xLTAuMi0wLjEtMC4zbDAsMEM2LjEsMTQuMiw2LDE0LjEsNS44LDE0bDAsMGMtMC4zLTAuMS0wLjUtMC4yLTAuOC0wLjJsMCwwYy0wLjEtMC4xLTAuMi0wLjEtMC4zLTAuMUg0LjVDNC4zLDEzLjcsNC4yLDEzLjksNC4xLDE0LjF6XCIvPjxwYXRoIGQ9XCJNOS4zLDE0LjRjMCwwLjEtMC4xLDAuMywwLDAuNFYxNWwwLDBjMCwwLjEsMC4xLDAuMywwLjUsMC40YzAuMSwwLjEsMC4zLDAuMSwwLjQsMC4xbDAsMGgwLjFsMCwwYzAuMy0wLjEsMC42LTAuMiwwLjktMC4zbDAsMGMwLjEtMC4xLDAuMi0wLjIsMC4zLTAuNGwwLjEtMC4zYzAtMC4xLTAuMS0wLjItMC4xLTAuM2wwLDBjLTAuMS0wLjItMC4yLTAuMy0wLjQtMC40bDAsMGgtMC4zYy0wLjEsMC0wLjIsMC0wLjMsMGwwLDBjLTAuMiwwLjEtMC41LDAuMi0wLjgsMC4zbDAsMEM5LjUsMTQuMSw5LjQsMTQuMiw5LjMsMTQuNEw5LjMsMTQuNHpcIi8+PHBhdGggZD1cIk0xMS40LDE0LjdMMTEuNCwxNC43TDExLjQsMTQuN3pcIi8+PHBhdGggZD1cIk05LjUsMTUuM0w5LjUsMTUuM0w5LjUsMTUuM3pcIi8+PHBhdGggZD1cIk0xNS45LDcuOWMwLTEtMC4yLTItMC42LTNsMCwwYy0wLjQtMS0xLTEuOS0xLjctMi42QzEyLjgsMS42LDEyLDEsMTEsMC42bDAsMEMxMC4xLDAuMiw5LDAsOCwwQzcuMywwLDYuNSwwLjEsNS44LDAuM2wwLDBDNS4yLDAuNSw0LjYsMC44LDQsMS4xTDMuMSwwLjJsMCwwQzIuOSwwLjEsMi44LDAsMi42LDBIMi40bDAsMEMyLjIsMCwyLDAuMiwxLjksMC40bDAsMEwwLjEsNC45bDAsMEMwLDUsMCw1LjEsMCw1LjJjMCwwLjIsMC4xLDAuNCwwLjIsMC41bDAsMGMwLjIsMC4xLDAuMywwLjIsMC41LDAuMmgwLjFIMWwwLDBsNC43LTEuOGwwLDBDNS45LDQsNi4xLDMuOCw2LjEsMy42VjMuNEM2LjEsMy4yLDYsMyw1LjksMi45bDAsMEw1LjEsMi4xYzAuNC0wLjIsMC44LTAuNCwxLjMtMC41YzAuNS0wLjEsMS4xLTAuMiwxLjctMC4yYzAuOSwwLDEuNywwLjIsMi41LDAuNWwwLDBjMC44LDAuMywxLjUsMC44LDIuMSwxLjRjMC42LDAuNiwxLjEsMS4zLDEuNCwyLjFsMCwwYzAuMywwLjgsMC41LDEuNiwwLjUsMi41cy0wLjIsMS43LTAuNSwyLjVsMCwwYy0wLjMsMC44LTAuOCwxLjUtMS40LDIuMWMtMC4yLDAuMi0wLjQsMC4zLTAuNiwwLjVsMCwwYy0wLjIsMC4xLTAuMywwLjMtMC4zLDAuNXYwLjFjMCwwLjEsMCwwLjMsMC4xLDAuNGwwLDBjMC4xLDAuMiwwLjMsMC4zLDAuNSwwLjNsMCwwYzAuMSwwLDAuMy0wLjEsMC40LTAuMmwwLDBsMCwwbDAsMGwwLDBjMC4yLTAuMiwwLjUtMC40LDAuNy0wLjZsMCwwbDAsMGwwLDBsMCwwYzAuNy0wLjgsMS4zLTEuNiwxLjctMi42QzE1LjYsMTAsMTUuOCw5LDE1LjksNy45eiBNMS45LDRDMiwzLjgsMi4xLDMuNSwyLjMsMy4xbDAsMEwyLjcsMmwxLjIsMS4yTDEuOSw0elwiLz48cGF0aCBkPVwiTTYuOCwxNS41TDYuOCwxNS41TDYuOCwxNS41elwiLz48L2c+PC9zdmc+JyxcclxuICAgcm90YXRlX3JpZ2h0OiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS44IDE1LjhcIj48Zz48cGF0aCBkPVwiTTkuOSwxNS4zTDkuOSwxNS4zTDkuOSwxNS4zelwiLz48cGF0aCBkPVwiTTYuOSwxNS4xTDYuOSwxNS4xYzAsMC4xLDAuMSwwLjMsMC4yLDAuNGwwLDBjMC4xLDAuMiwwLjMsMC4zLDAuNSwwLjNsMCwwaDAuM2MwLjIsMCwwLjQsMCwwLjcsMGwwLDBjMC4yLTAuMSwwLjMtMC4yLDAuNC0wLjNjMC4xLTAuMSwwLjItMC4yLDAuMi0wLjRWMTVjMC0wLjItMC4xLTAuNC0wLjItMC40Yy0wLjItMC4xLTAuMy0wLjItMC41LTAuMkg4LjRsMCwwYy0wLjEsMC0wLjMsMC0wLjUsMEg3LjZsMCwwYy0wLjIsMC0wLjQsMC4xLTAuNSwwLjJDNywxNC43LDYuOSwxNC45LDYuOSwxNS4xelwiLz48cGF0aCBkPVwiTTYuNSwxNC40TDYuNSwxNC40TDYuNSwxNC40elwiLz48cGF0aCBkPVwiTTUuOCw1LjhMNS44LDUuOGMtMSwwLjktMS41LDEuNS0xLjcsMS42bDAsMEM0LDcuNSw0LDcuNyw0LDcuOWMwLDAuMiwwLDAuNCwwLjIsMC41bDAsMGwzLjIsMy4ybDAsMGMwLjIsMC4xLDAuMywwLjIsMC41LDAuMnMwLjQtMC4xLDAuNS0wLjJsMCwwbDMuMi0zLjJsMCwwYzAuMS0wLjEsMC4yLTAuMywwLjItMC41YzAtMC4yLTAuMS0wLjQtMC4yLTAuNWwwLDBMOC40LDQuMkM4LjMsNC4xLDguMSw0LDcuOSw0QzcuNyw0LDcuNSw0LjEsNy40LDQuMmwwLDBMNS44LDUuOHogTTUuNiw3LjlsMi4zLTIuMmwyLjIsMi4yTDksOWwwLDBsMCwwbDAsMGwwLDBjLTAuNSwwLjYtMC45LDAuOS0xLjEsMS4xTDUuNiw3Ljl6XCIvPjxwYXRoIGQ9XCJNOSwxNS41TDksMTUuNUw5LDE1LjV6XCIvPjxwYXRoIGQ9XCJNOS42LDE0Ljd2MC4ybDAsMGwwLDBsMCwwbDAsMGMwLjEsMC4yLDAuMSwwLjMsMC4zLDAuM2MwLjEsMC4xLDAuMywwLjEsMC40LDAuMWwwLDBoMC4xaDAuMWMwLjMtMC4xLDAuNi0wLjMsMC45LTAuNGwwLDBjMC4xLTAuMSwwLjItMC4yLDAuMy0wLjRsMCwwdi0wLjJjMC0wLjEsMC0wLjItMC4xLTAuM2MtMC4xLTAuMi0wLjItMC4zLTAuNC0wLjRIMTFjLTAuMSwwLTAuMiwwLjEtMC4zLDAuMWwwLDBjLTAuMiwwLjEtMC40LDAuMi0wLjcsMC4zbDAsMGwwLDBjLTAuMSwwLjEtMC4zLDAuMi0wLjQsMC40QzkuNiwxNC41LDkuNiwxNC42LDkuNiwxNC43elwiLz48cGF0aCBkPVwiTTksMTQuNUw5LDE0LjVMOSwxNC41elwiLz48cGF0aCBkPVwiTTkuNiwxNC40TDkuNiwxNC40TDkuNiwxNC40elwiLz48cGF0aCBkPVwiTTExLjcsMTRMMTEuNywxNEwxMS43LDE0elwiLz48cGF0aCBkPVwiTTE1LjYsNy40TDE1LjYsNy40TDE1LjYsNy40elwiLz48cGF0aCBkPVwiTTE1LDkuNGMwLjIsMCwwLjQsMCwwLjYtMC4ybDAsMGMwLjEtMC4xLDAuMi0wLjIsMC4yLTAuNGwwLDBsMCwwbDAsMGwwLDBjMC0wLjMsMC0wLjYsMC0wLjljMC0wLjItMC4xLTAuNC0wLjItMC41Yy0wLjEtMC4xLTAuMy0wLjItMC41LTAuMnMtMC40LDAuMS0wLjUsMC4yYy0wLjEsMC4xLTAuMiwwLjMtMC4yLDAuNWwwLDBjMCwwLjIsMCwwLjQsMCwwLjdsMCwwdjAuMWMwLDAuMSwwLDAuMywwLjEsMC40bDAsMEMxNC42LDkuMywxNC44LDkuNCwxNSw5LjRMMTUsOS40TDE1LDkuNHpcIi8+PHBhdGggZD1cIk0xNCwxMmgwLjFoMC4yaDAuMWMwLjIsMCwwLjUtMC4yLDAuNi0wLjRsMCwwYzAuMi0wLjMsMC4zLTAuNiwwLjQtMC45bDAsMHYtMC4yYzAtMC4xLTAuMS0wLjItMC4xLTAuM2MtMC4xLTAuMi0wLjItMC4zLTAuNC0wLjRoLTAuM2MtMC4xLDAtMC4yLDAtMC4zLDBDMTQuMiw5LjksMTQsMTAsMTQsMTAuM2wwLDBjLTAuMSwwLjItMC4yLDAuNS0wLjMsMC43bDAsMGMtMC4xLDAuMS0wLjEsMC4yLTAuMSwwLjN2MC4ybDAsMGwwLDBDMTMuNiwxMS42LDEzLjgsMTEuOCwxNCwxMnpcIi8+PHBhdGggZD1cIk0xNC42LDcuNEwxNC42LDcuNEwxNC42LDcuNHpcIi8+PHBhdGggZD1cIk00LjQsMTQuMmMtMC4xLDAuMS0wLjEsMC4yLTAuMSwwLjNsMC4xLDAuMmMwLDAuMiwwLjIsMC4zLDAuMywwLjRsMCwwYzAuMywwLjEsMC42LDAuMywxLjEsMC40bDAsMGgwLjFsMCwwYzAuMSwwLDAuMi0wLjEsMC40LTAuMmMwLjEsMCwwLjItMC4yLDAuMy0wLjNsMCwwdi0wLjJjMC0wLjEtMC4xLTAuMy0wLjItMC40Yy0wLjEtMC4xLTAuMi0wLjItMC40LTAuM2wwLDBjLTAuMi0wLjEtMC41LTAuMi0wLjctMC4zbDAsMGMtMC4xLDAtMC4yLDAtMC4zLDBINC43bDAsMEM0LjYsMTMuOSw0LjQsMTQsNC40LDE0LjJMNC40LDE0LjJ6XCIvPjxwYXRoIGQ9XCJNMTEuOSwxMy4zYzAsMC4yLDAuMSwwLjQsMC4yLDAuNmMwLjEsMC4xLDAuMywwLjIsMC41LDAuMnMwLjQtMC4xLDAuNS0wLjJsMCwwbDAsMGwwLDBsMCwwYzAuMS0wLjEsMC4zLTAuMywwLjQtMC40bDAsMGwwLjItMC4zbDAsMGMwLjEtMC4yLDAuMi0wLjMsMC4yLTAuNWwwLDBjMC0wLjItMC4xLTAuNC0wLjItMC41bDAsMGMtMC4xLTAuMS0wLjMtMC4yLTAuNS0wLjJsMCwwYy0wLjIsMC0wLjQsMC4xLTAuNSwwLjJsMCwwbC0wLjIsMC4ybC0wLjQsMC40bDAsMEMxMiwxMywxMS45LDEzLjEsMTEuOSwxMy4zTDExLjksMTMuM3pcIi8+PHBhdGggZD1cIk0xMi4xLDEzLjhMMTIuMSwxMy44TDEyLjEsMTMuOHpcIi8+PHBhdGggZD1cIk0xMS45LDEzLjNMMTEuOSwxMy4zTDExLjksMTMuM3pcIi8+PHBhdGggZD1cIk0xNS45LDUuMmMwLTAuMS0wLjEtMC4yLTAuMS0wLjNsMCwwTDE0LDAuNGwwLDBDMTMuOSwwLjIsMTMuNywwLDEzLjUsMGwwLDBsMCwwaC0wLjJjLTAuMiwwLTAuNCwwLjEtMC41LDAuMmwwLDBsLTAuOSwwLjljLTAuNS0wLjMtMS4xLTAuNi0xLjgtMC44bDAsMEM5LjQsMC4xLDguNywwLDcuOSwwYy0xLDAtMiwwLjItMywwLjZTMywxLjYsMi4zLDIuM0MxLjYsMy4xLDEsMy45LDAuNiw0LjlsMCwwQzAuMiw1LjgsMCw2LjgsMCw3LjljMCwxLDAuMiwyLDAuNiwzczAuOSwxLjgsMS43LDIuNmwwLDBsMCwwbDAsMGwwLDBjMC4yLDAuMiwwLjUsMC40LDAuNywwLjZsMCwwbDAsMGwwLDBsMCwwYzAuMiwwLjEsMC4zLDAuMiwwLjUsMC4ybDAsMGMwLjIsMCwwLjQtMC4xLDAuNi0wLjNsMCwwYzAuMS0wLjEsMC4xLTAuMywwLjEtMC40di0wLjFsMCwwQzQuMSwxMy4zLDQsMTMuMSwzLjksMTNsMCwwYy0wLjItMC4xLTAuNC0wLjMtMC42LTAuNWMtMC42LTAuNi0xLjEtMS4zLTEuNC0yLjFsMCwwQzEuNiw5LjYsMS40LDguOCwxLjQsNy45czAuMi0xLjcsMC41LTIuNWwwLDBjMC4zLTAuOCwwLjgtMS41LDEuNC0yLjFjMC42LTAuNiwxLjMtMS4xLDIuMS0xLjRsMCwwQzYuMiwxLjYsNywxLjQsNy45LDEuNGMwLjYsMCwxLjEsMC4xLDEuNywwLjJjMC41LDAuMSwwLjksMC4zLDEuMywwLjVsLTAuOCwwLjhsMCwwQzEwLDMuMSw5LjksMy4yLDkuOSwzLjR2MC4ybDAsMGwwLDBjMCwwLjIsMC4yLDAuNCwwLjQsMC41bDAsMGw0LjUsMS44bDAsMEgxNWgwLjFjMC4yLDAsMC40LTAuMSwwLjUtMC4ybDAsMEMxNS43LDUuNiwxNS44LDUuNCwxNS45LDUuMnogTTExLjgsMy4yTDEzLDJsMC40LDEuMWwwLDBjMC4yLDAuNCwwLjMsMC43LDAuNCwwLjlMMTEuOCwzLjJ6XCIvPjwvZz48L3N2Zz4nLFxyXG4gICBtaXJyb3JfaG9yaXpvbnRhbDogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTQuNzUgMTUuNzRcIj48Zz48cGF0aCBkPVwiTTEzLjc1LDMuNzZsNS45LDE1Ljc0aC01LjlWMy43NlpNNC45LDE5LjUsMTAuOCwzLjc2VjE5LjVINC45WlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNC45IC0zLjc2KVwiLz48L2c+PC9zdmc+JyxcclxuICAgbWlycm9yX3ZlcnRpY2FsOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS43NCAxNC43NVwiPjxnPjxwYXRoIGQ9XCJNMjAuMTUsMTMuMSw0LjQxLDE5VjEzLjFIMjAuMTVaTTQuNDEsNC4yNWwxNS43NCw1LjlINC40MVY0LjI1WlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNC40MSAtNC4yNSlcIi8+PC9nPjwvc3ZnPicsXHJcbiAgIGNoZWNrZWQ6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1Ljc1IDEyLjFcIj48Zz48cGF0aCBkPVwiTTQuNTksMTIuMjNsLjEyLjE4TDkuNDMsMTcuNWEuNTguNTgsMCwwLDAsLjg0LDBMMjAsNy40NWgwYS41OC41OCwwLDAsMCwwLS44NGwtLjg1LS44NWEuNTguNTgsMCwwLDAtLjg0LDBIMTguMmwtOC4xMiw4LjQxYS4yOS4yOSwwLDAsMS0uNDIsMGwtMy40LTMuNjNhLjU4LjU4LDAsMCwwLS44NCwwbC0uODUuODVhLjYuNiwwLDAsMC0uMTQuMjEuNTEuNTEsMCwwLDAsMCwuNDRjLjA1LjA2LjEuMTMuMTYuMTlaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC00LjM4IC01LjU4KVwiLz48L2c+PC9zdmc+JyxcclxuICAgbGluZV9icmVhazogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj48cGF0aCBkPVwiTTE5LDZhMSwxLDAsMCwwLTEsMXY0YTEsMSwwLDAsMS0xLDFINy40MWwxLjMtMS4yOUExLDEsMCwwLDAsNy4yOSw5LjI5bC0zLDNhMSwxLDAsMCwwLS4yMS4zMywxLDEsMCwwLDAsMCwuNzYsMSwxLDAsMCwwLC4yMS4zM2wzLDNhMSwxLDAsMCwwLDEuNDIsMCwxLDEsMCwwLDAsMC0xLjQyTDcuNDEsMTRIMTdhMywzLDAsMCwwLDMtM1Y3QTEsMSwwLDAsMCwxOSw2WlwiLz48L3N2Zz4nLFxyXG4gICBhdWRpbzogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj48cGF0aCBkPVwiTTE0LDMuMjNWNS4yOUMxNi44OSw2LjE1IDE5LDguODMgMTksMTJDMTksMTUuMTcgMTYuODksMTcuODQgMTQsMTguN1YyMC43N0MxOCwxOS44NiAyMSwxNi4yOCAyMSwxMkMyMSw3LjcyIDE4LDQuMTQgMTQsMy4yM00xNi41LDEyQzE2LjUsMTAuMjMgMTUuNSw4LjcxIDE0LDcuOTdWMTZDMTUuNSwxNS4yOSAxNi41LDEzLjc2IDE2LjUsMTJNMyw5VjE1SDdMMTIsMjBWNEw3LDlIM1pcIiAvPjwvc3ZnPicsXHJcbiAgIGltYWdlX2dhbGxlcnk6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMzAgMzAgMTUwIDE1MFwiPjxnPjxwYXRoIGQ9XCJNMTUyLjc3NSwxMjAuNTQ4VjUxLjY1MWMwLTEyLjI3MS05Ljk4NC0yMi4yNTQtMjIuMjU0LTIyLjI1NEg0My43MjdjLTEyLjI3MSwwLTIyLjI1NCw5Ljk4My0yMi4yNTQsMjIuMjU0djY4Ljg5NmMwLDEyLjI3LDkuOTgzLDIyLjI1NCwyMi4yNTQsMjIuMjU0aDg2Ljc5NUMxNDIuNzkxLDE0Mi44MDIsMTUyLjc3NSwxMzIuODE3LDE1Mi43NzUsMTIwLjU0OHogTTM2LjM5NCw1MS42NTFjMC00LjA0MiwzLjI5MS03LjMzMyw3LjMzMy03LjMzM2g4Ni43OTVjNC4wNDIsMCw3LjMzMiwzLjI5MSw3LjMzMiw3LjMzM3YyMy45MTdsLTE0LjkzOC0xNy43NjdjLTEuNDEtMS42NzgtMy40ODctMi42NDktNS42OC0yLjY1OGgtMC4wMjljLTIuMTg0LDAtNC4yNTUsMC45NTQtNS42NzQsMi42MTNMNzYuNzA5LDk4LjUxOWwtOS4wOTYtOS4zOThjLTEuNDI3LTEuNDc0LTMuMzkyLTIuMjkxLTUuNDQ4LTIuMjczYy0yLjA1MiwwLjAyNS00LjAwNCwwLjg5My01LjM5NiwyLjRMMzYuMzk0LDExMS4zMlY1MS42NTF6IE00MS42ODQsMTI3LjU4NWwyMC42OTctMjIuNDE2bDkuMzEyLDkuNjIyYzEuNDYxLDEuNTExLDMuNDg5LDIuMzM0LDUuNTkyLDIuMjdjMi4xMDEtMC4wNjYsNC4wNzUtMS4wMTMsNS40NC0yLjYxMmwzNC40MzYtNDAuMzA4bDIwLjY5MywyNC42MTN2MjEuNzk0YzAsNC4wNDItMy4yOSw3LjMzMi03LjMzMiw3LjMzMkg0My43MjdDNDMuMDE4LDEyNy44OCw0Mi4zMzQsMTI3Ljc3NSw0MS42ODQsMTI3LjU4NXogTTE4Mi42MTYsMTUyLjVWNzUuNjU3YzAtNC4xMi0zLjM0LTcuNDYtNy40NjEtNy40NmMtNC4xMTksMC03LjQ2LDMuMzQtNy40Niw3LjQ2VjE1Mi41YzAsNC4xMTItMy4zNDcsNy40Ni03LjQ2MSw3LjQ2aC05NGMtNC4xMTksMC03LjQ2LDMuMzM5LTcuNDYsNy40NTljMCw0LjEyMywzLjM0MSw3LjQ2Miw3LjQ2LDcuNDYyaDk0QzE3Mi41NzYsMTc0Ljg4MSwxODIuNjE2LDE2NC44NDEsMTgyLjYxNiwxNTIuNXpcIi8+PC9nPjwvc3ZnPicsXHJcbiAgIGJvb2ttYXJrOiAnPHN2ZyB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+PHBhdGggZD1cIk0xNywzSDdBMiwyIDAgMCwwIDUsNVYyMUwxMiwxOEwxOSwyMVY1QzE5LDMuODkgMTguMSwzIDE3LDNaXCIgLz48L3N2Zz4nLFxyXG4gICBkb3dubG9hZDogJzxzdmcgdmlld0JveD1cIjAgMCAyNCAyNFwiPjxwYXRoIGQ9XCJNMiAxMkg0VjE3SDIwVjEySDIyVjE3QzIyIDE4LjExIDIxLjExIDE5IDIwIDE5SDRDMi45IDE5IDIgMTguMTEgMiAxN1YxMk0xMiAxNUwxNy41NSA5LjU0TDE2LjEzIDguMTNMMTMgMTEuMjVWMkgxMVYxMS4yNUw3Ljg4IDguMTNMNi40NiA5LjU1TDEyIDE1WlwiIC8+PC9zdmc+JyxcclxuICAgLy8gTW9yZSBpY29uc1xyXG4gICBtb3JlX3RleHQ6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMTAgMTAgMTgwIDE4MFwiPjxnPjxwYXRoIGQ9XCJNNDkuNzExLDE0Mi4xODhoNDkuMDI3YzIuMzI4LDAuMDAyLDQuMzk0LDEuNDkyLDUuMTI5LDMuNjk5bDkuNzQyLDI5LjI1MmMwLjM2MywxLjA5MiwxLjM4NSwxLjgyOCwyLjUzNywxLjgzbDE1Ljg4MywwLjAxYzAuODU5LDAsMS42NjctMC40MTIsMi4xNy0xLjEwOXMwLjY0MS0xLjU5NCwwLjM3LTIuNDFsLTE2LjYyNS01MC4wNDVMODYuNTAzLDI4Ljk1M2MtMC4zNi0xLjA5Ny0xLjM4My0xLjgzOS0yLjUzNy0xLjg0Mkg2NC41MzJjLTEuMTUzLTAuMDAxLTIuMTc4LDAuNzM2LTIuNTQyLDEuODMxTDEzLjg0NywxNzMuNDU3Yy0wLjI3MSwwLjgxNi0wLjEzNSwxLjcxMywwLjM2OSwyLjQxMmMwLjUwMywwLjY5NywxLjMxMSwxLjEwOSwyLjE3MSwxLjEwOWgxNS44NzJjMS4xNTEsMCwyLjE3My0wLjczNiwyLjUzNy0xLjgyOGw5Ljc5My0yOS4yODdDNDUuMzI1LDE0My42Niw0Ny4zOSwxNDIuMTgsNDkuNzExLDE0Mi4xODhMNDkuNzExLDE0Mi4xODh6IE01My40OTMsMTE5LjA5OGwxNS42MDctNDYuOWMwLjc0NC0yLjE5NiwyLjgwNi0zLjY3NCw1LjEyNS0zLjY3NHM0LjM4MSwxLjQ3OCw1LjEyNSwzLjY3NGwxNS42MDcsNDYuOTA0YzAuNTM3LDEuNjIxLDAuMjYzLDMuNDAyLTAuNzM2LDQuNzg5Yy0xLjAxOCwxLjQwOC0yLjY0OSwyLjI0LTQuMzg2LDIuMjRINTguNjE1Yy0xLjczNiwwLTMuMzY4LTAuODMyLTQuMzg2LTIuMjRDNTMuMjMsMTIyLjUwNCw1Mi45NTYsMTIwLjcyMSw1My40OTMsMTE5LjA5OEw1My40OTMsMTE5LjA5OHogTTE5MC40NjUsNjMuMzJjMC0yLjkxOS0xLjAxNS01LjM5Ni0zLjA1OS03LjQyOGMtMi4wMjktMi4wMzEtNC40OTYtMy4wNDctNy4zODMtMy4wNDdjLTIuODg5LDAtNS4zNTUsMS4wMTYtNy4zODgsMy4wNDdjLTIuMDI5LDIuMDMyLTMuMDU2LDQuNDk4LTMuMDU2LDcuMzg2YzAsMi44ODksMS4wMjYsNS4zNTQsMy4wNTYsNy4zODVjMi4wMzIsMi4wMzIsNC40OTksMy4wNTksNy4zODgsMy4wNTljMi44ODcsMCw1LjM1NC0xLjAyNiw3LjM4My0zLjA1OUMxODkuNDUsNjguNjMzLDE5MC40NjUsNjYuMTc4LDE5MC40NjUsNjMuMzJMMTkwLjQ2NSw2My4zMnogTTE5MC40NjUsMTAxLjk5NGMwLTIuODU4LTEuMDE1LTUuMzEzLTMuMDU5LTcuMzMzYy0yLjAyOS0yLjA0Mi00LjQ5Ni0zLjA0Ny03LjM4My0zLjA0N2MtMi44ODksMC01LjM1NSwxLjAwNS03LjM4OCwzLjA0N2MtMi4wMjksMi4wMjEtMy4wNTYsNC40ODYtMy4wNTYsNy4zNzZjMCwyLjg4NywxLjAyNiw1LjM1MiwzLjA1Niw3LjM5NWMyLjAzMiwyLjAyMSw0LjQ5OSwzLjA0Nyw3LjM4OCwzLjA0N2MyLjg4NywwLDUuMzU0LTEuMDI1LDcuMzgzLTMuMDQ3QzE4OS40NSwxMDcuMzg5LDE5MC40NjUsMTA0LjkxNCwxOTAuNDY1LDEwMS45OTRMMTkwLjQ2NSwxMDEuOTk0eiBNMTkwLjQ2NSwxNDAuNzZjMC0yLjkxOC0xLjAxNS01LjM5NS0zLjA1OS03LjQzOGMtMi4wMjktMi4wNDEtNC40OTYtMy4wNDctNy4zODMtMy4wNDdjLTIuODg5LDAtNS4zNTUsMS4wMDYtNy4zODgsMy4wNDdjLTIuMDI5LDIuMDQzLTMuMDU2LDQuNTItMy4wNTYsNy40MzhjMCwyLjkyMiwxLjAyNiw1LjM5OCwzLjA1Niw3LjQzOWMyLjAzMiwyLjAyMSw0LjQ5OSwzLjA0Nyw3LjM4OCwzLjA0N2MyLjg4NywwLDUuMzU0LTEuMDI1LDcuMzgzLTMuMDQ3QzE4OS40NSwxNDYuMTU4LDE5MC40NjUsMTQzLjY4MiwxOTAuNDY1LDE0MC43NkwxOTAuNDY1LDE0MC43NnpcIi8+PC9nPjwvc3ZnPicsXHJcbiAgIG1vcmVfcGFyYWdyYXBoOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjEwIDEwIDE4MCAxODBcIj48Zz48cGF0aCBkPVwiTTEyOC4zOSwyOC40OTlINjMuNDkzYy0yNS41NTgsMC00Ni4zNTQsMjAuNzk2LTQ2LjM1NCw0Ni4zNTRjMCwyNS41NTksMjAuNzk2LDQ2LjM1Myw0Ni4zNTQsNDYuMzUzaDkuMjcxdjU1LjYyNWgxOC41NDJWNDcuMDRoOS4yNzFWMTc2LjgzaDE4LjU0M1Y0Ny4wNGg5LjI3MVYyOC40OTl6IE03Mi43NjQsMTAyLjY2NGgtOS4yNzFjLTE1LjMzNywwLTI3LjgxMy0xMi40NzUtMjcuODEzLTI3LjgxMmMwLTE1LjMzNiwxMi40NzYtMjcuODEzLDI3LjgxMy0yNy44MTNoOS4yNzFWMTAyLjY2NHogTTE5MC40NjUsNjMuMzJjMC0yLjkxOS0xLjAxNS01LjM5Ni0zLjA1OS03LjQyOGMtMi4wMjktMi4wMzEtNC40OTYtMy4wNDctNy4zODMtMy4wNDdjLTIuODg5LDAtNS4zNTUsMS4wMTYtNy4zODgsMy4wNDdjLTIuMDI5LDIuMDMyLTMuMDU2LDQuNDk4LTMuMDU2LDcuMzg2YzAsMi44ODksMS4wMjYsNS4zNTQsMy4wNTYsNy4zODVjMi4wMzIsMi4wMzIsNC40OTksMy4wNTksNy4zODgsMy4wNTljMi44ODcsMCw1LjM1NC0xLjAyNiw3LjM4My0zLjA1OUMxODkuNDUsNjguNjMzLDE5MC40NjUsNjYuMTc4LDE5MC40NjUsNjMuMzJMMTkwLjQ2NSw2My4zMnogTTE5MC40NjUsMTAxLjk5NGMwLTIuODU4LTEuMDE1LTUuMzEzLTMuMDU5LTcuMzMzYy0yLjAyOS0yLjA0Mi00LjQ5Ni0zLjA0Ny03LjM4My0zLjA0N2MtMi44ODksMC01LjM1NSwxLjAwNS03LjM4OCwzLjA0N2MtMi4wMjksMi4wMjEtMy4wNTYsNC40ODYtMy4wNTYsNy4zNzZjMCwyLjg4NywxLjAyNiw1LjM1MiwzLjA1Niw3LjM5NWMyLjAzMiwyLjAyMSw0LjQ5OSwzLjA0Nyw3LjM4OCwzLjA0N2MyLjg4NywwLDUuMzU0LTEuMDI1LDcuMzgzLTMuMDQ3QzE4OS40NSwxMDcuMzg5LDE5MC40NjUsMTA0LjkxNCwxOTAuNDY1LDEwMS45OTRMMTkwLjQ2NSwxMDEuOTk0eiBNMTkwLjQ2NSwxNDAuNzZjMC0yLjkxOC0xLjAxNS01LjM5NS0zLjA1OS03LjQzOGMtMi4wMjktMi4wNDEtNC40OTYtMy4wNDctNy4zODMtMy4wNDdjLTIuODg5LDAtNS4zNTUsMS4wMDYtNy4zODgsMy4wNDdjLTIuMDI5LDIuMDQzLTMuMDU2LDQuNTItMy4wNTYsNy40MzhjMCwyLjkyMiwxLjAyNiw1LjM5OCwzLjA1Niw3LjQzOWMyLjAzMiwyLjAyMSw0LjQ5OSwzLjA0Nyw3LjM4OCwzLjA0N2MyLjg4NywwLDUuMzU0LTEuMDI1LDcuMzgzLTMuMDQ3QzE4OS40NSwxNDYuMTU4LDE5MC40NjUsMTQzLjY4MiwxOTAuNDY1LDE0MC43NkwxOTAuNDY1LDE0MC43NnpcIi8+PC9nPjwvc3ZnPicsXHJcbiAgIG1vcmVfcGx1czogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIzNSAzMCAxNDAgMTQwXCI+PGc+PHBhdGggZD1cIk0xMzcuMjE1LDEwMi4wNDVjMCwzLjQ5OC0yLjgzNSw2LjMzMi02LjMzMyw2LjMzMkgyNC41NDljLTMuNDk4LDAtNi4zMzQtMi44MzQtNi4zMzQtNi4zMzJsMCwwYzAtMy40OTgsMi44MzYtNi4zMzMsNi4zMzQtNi4zMzNoMTA2LjMzM0MxMzQuMzgsOTUuNzExLDEzNy4yMTUsOTguNTQ3LDEzNy4yMTUsMTAyLjA0NUwxMzcuMjE1LDEwMi4wNDV6IE03Ny43MTUsMTYxLjU0NWMtMy40OTgsMC02LjMzMy0yLjgzNi02LjMzMy02LjMzNFY0OC44NzhjMC0zLjQ5OCwyLjgzNi02LjMzMyw2LjMzMy02LjMzM2wwLDBjMy40OTgsMCw2LjMzNCwyLjgzNSw2LjMzNCw2LjMzM3YxMDYuMzMzQzg0LjA0OSwxNTguNzA5LDgxLjIxMywxNjEuNTQ1LDc3LjcxNSwxNjEuNTQ1TDc3LjcxNSwxNjEuNTQ1eiBNMTkwLjQ2NSw2My4zMmMwLTIuOTE5LTEuMDE1LTUuMzk2LTMuMDU5LTcuNDI4Yy0yLjAyOS0yLjAzMS00LjQ5Ni0zLjA0Ny03LjM4My0zLjA0N2MtMi44ODksMC01LjM1NSwxLjAxNi03LjM4OCwzLjA0N2MtMi4wMjksMi4wMzItMy4wNTYsNC40OTgtMy4wNTYsNy4zODZjMCwyLjg4OSwxLjAyNiw1LjM1NCwzLjA1Niw3LjM4NWMyLjAzMiwyLjAzMiw0LjQ5OSwzLjA1OSw3LjM4OCwzLjA1OWMyLjg4NywwLDUuMzU0LTEuMDI2LDcuMzgzLTMuMDU5QzE4OS40NSw2OC42MzIsMTkwLjQ2NSw2Ni4xNzcsMTkwLjQ2NSw2My4zMkwxOTAuNDY1LDYzLjMyeiBNMTkwLjQ2NSwxMDEuOTkzYzAtMi44NTgtMS4wMTUtNS4zMTMtMy4wNTktNy4zMzNjLTIuMDI5LTIuMDQyLTQuNDk2LTMuMDQ3LTcuMzgzLTMuMDQ3Yy0yLjg4OSwwLTUuMzU1LDEuMDA1LTcuMzg4LDMuMDQ3Yy0yLjAyOSwyLjAyMS0zLjA1Niw0LjQ4Ni0zLjA1Niw3LjM3NmMwLDIuODg4LDEuMDI2LDUuMzUzLDMuMDU2LDcuMzk2YzIuMDMyLDIuMDIxLDQuNDk5LDMuMDQ3LDcuMzg4LDMuMDQ3YzIuODg3LDAsNS4zNTQtMS4wMjUsNy4zODMtMy4wNDdDMTg5LjQ1LDEwNy4zODksMTkwLjQ2NSwxMDQuOTE0LDE5MC40NjUsMTAxLjk5M0wxOTAuNDY1LDEwMS45OTN6IE0xOTAuNDY1LDE0MC43NmMwLTIuOTE4LTEuMDE1LTUuMzk1LTMuMDU5LTcuNDM4Yy0yLjAyOS0yLjA0MS00LjQ5Ni0zLjA0Ny03LjM4My0zLjA0N2MtMi44ODksMC01LjM1NSwxLjAwNi03LjM4OCwzLjA0N2MtMi4wMjksMi4wNDMtMy4wNTYsNC41Mi0zLjA1Niw3LjQzOGMwLDIuOTIyLDEuMDI2LDUuMzk4LDMuMDU2LDcuNDM5YzIuMDMyLDIuMDIxLDQuNDk5LDMuMDQ3LDcuMzg4LDMuMDQ3YzIuODg3LDAsNS4zNTQtMS4wMjUsNy4zODMtMy4wNDdDMTg5LjQ1LDE0Ni4xNTgsMTkwLjQ2NSwxNDMuNjgyLDE5MC40NjUsMTQwLjc2TDE5MC40NjUsMTQwLjc2elwiLz48L2c+PC9zdmc+JyxcclxuICAgbW9yZV9ob3Jpem9udGFsOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS43NiAzLjU4XCI+PGc+PHBhdGggZD1cIk00LjY0LDEwLjczYTEuODQsMS44NCwwLDAsMSwuNjUtLjY1LDEuNzYsMS43NiwwLDAsMSwxLjc5LDBBMS43OSwxLjc5LDAsMCwxLDgsMTEuNjNhMS44NCwxLjg0LDAsMCwxLS4yNS45LDEuNjksMS42OSwwLDAsMS0uNjUuNjUsMS44LDEuOCwwLDAsMS0yLjY5LTEuNTVBMi4wOCwyLjA4LDAsMCwxLDQuNjQsMTAuNzNabTYuMDksMGExLjg0LDEuODQsMCwwLDEsLjY1LS42NSwxLjc4LDEuNzgsMCwwLDEsMi42NywxLjU1LDEuNzMsMS43MywwLDAsMS0uMjQuOSwxLjg0LDEuODQsMCwwLDEtLjY1LjY1LDEuNzYsMS43NiwwLDAsMS0xLjc5LDAsMS43OSwxLjc5LDAsMCwxLS42NC0yLjQ0Wm02LjA4LDBhMS42OSwxLjY5LDAsMCwxLC42NS0uNjUsMS43NiwxLjc2LDAsMCwxLDEuNzksMCwxLjc5LDEuNzksMCwwLDEsLjksMS41NCwxLjczLDEuNzMsMCwwLDEtLjI0LjksMS44NCwxLjg0LDAsMCwxLS42NS42NSwxLjgsMS44LDAsMCwxLTIuNjktMS41NUEyLDIsMCwwLDEsMTYuODEsMTAuNzNaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC00LjM5IC05Ljg0KVwiLz48L2c+PC9zdmc+JyxcclxuICAgbW9yZV92ZXJ0aWNhbDogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMy45NCAxNS43NVwiPjxnPjxwYXRoIGQ9XCJNMTIuMjgsNy42OWExLjkyLDEuOTIsMCwwLDEtMS4zOS0uNTgsMiwyLDAsMCwxLS41OC0xLjM5LDEuOTIsMS45MiwwLDAsMSwuNTgtMS4zOSwyLDIsMCwwLDEsMS4zOS0uNTgsMS45MiwxLjkyLDAsMCwxLDEuMzkuNTgsMiwyLDAsMCwxLC41OCwxLjM5LDEuOTIsMS45MiwwLDAsMS0uNTgsMS4zOSwyLDIsMCwwLDEtMS4zOS41OFptMCwyYTEuOTIsMS45MiwwLDAsMSwxLjM5LjU4LDIsMiwwLDAsMSwuNTgsMS4zOUExLjkyLDEuOTIsMCwwLDEsMTMuNjcsMTNhMiwyLDAsMCwxLTEuMzkuNThBMS45MiwxLjkyLDAsMCwxLDEwLjg5LDEzYTIsMiwwLDAsMS0uNTgtMS4zOSwyLDIsMCwwLDEsMi0yWm0wLDUuOWExLjkyLDEuOTIsMCwwLDEsMS4zOS41OCwyLDIsMCwwLDEsLjU4LDEuMzksMS45MiwxLjkyLDAsMCwxLS41OCwxLjM5LDIsMiwwLDAsMS0xLjM5LjU4LDEuOTIsMS45MiwwLDAsMS0xLjM5LS41OCwyLDIsMCwwLDEtLjU4LTEuMzksMS45MiwxLjkyLDAsMCwxLC41OC0xLjM5LDEuOTQsMS45NCwwLDAsMSwxLjM5LS41OFpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTEwLjMxIC0zLjc1KVwiLz48L2c+PC9zdmc+JyxcclxuICAgLy8gTm90IGN1cnJlbnRseSB1c2VkXHJcbiAgIGF0dGFjaG1lbnQ6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDguMzggMTUuNjhcIj48Zz48cGF0aCBkPVwiTTE1LjIzLDZoMXY5Ljc4YTMuODgsMy44OCwwLDAsMS0xLjMxLDIuNDUsNCw0LDAsMCwxLTYuNTctMi40NVY3QTMsMywwLDAsMSw5LjIsNC44OWEzLDMsMCwwLDEsNSwyLjA5djguMzFhMS45MiwxLjkyLDAsMCwxLS41OCwxLjM5LDIsMiwwLDAsMS0xLjM5LjU4LDEuOTIsMS45MiwwLDAsMS0xLjM5LS41OCwyLDIsMCwwLDEtLjU4LTEuMzlWOGgxdjcuMzJhMSwxLDAsMCwwLC4yOS42OSwxLDEsMCwwLDAsLjY5LjI4QS45LjksMCwwLDAsMTMsMTZhMSwxLDAsMCwwLC4yOS0uNjlWN2ExLjkyLDEuOTIsMCwwLDAtLjU4LTEuMzlBMiwyLDAsMCwwLDExLjI3LDVhMS45MiwxLjkyLDAsMCwwLTEuMzkuNThBMiwyLDAsMCwwLDkuMzMsN3Y4LjMxYTMsMywwLDEsMCw1LjksMFY2WlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtOC4wOCAtMy43OClcIi8+PC9nPjwvc3ZnPicsXHJcbiAgIG1hcDogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTEuNyAxNS42MlwiPjxnPjxwYXRoIGQ9XCJNMTIuMDUsMTIuNDJhMi45MywyLjkzLDAsMSwxLDIuMDctNUEyLjg4LDIuODgsMCwwLDEsMTUsOS40OWEzLDMsMCwwLDEtLjg2LDIuMDcsMi44OSwyLjg5LDAsMCwxLTIuMDcuODZabTAtNS4zNmEyLjQzLDIuNDMsMCwwLDAtMS43Miw0LjE2LDIuNDgsMi40OCwwLDAsMCwxLjcyLjcyLDIuNDQsMi40NCwwLDAsMCwwLTQuODhabTAtMy4zQTUuODQsNS44NCwwLDAsMSwxNy45LDkuNjJhOS45NCw5Ljk0LDAsMCwxLTEuNzMsNUEzMy41OSwzMy41OSwwLDAsMSwxMi44NCwxOWExLjUyLDEuNTIsMCwwLDEtLjIzLjIsMSwxLDAsMCwxLS41NS4yaDBhMSwxLDAsMCwxLS41NS0uMiwxLjUyLDEuNTIsMCwwLDEtLjIzLS4yLDMzLjU5LDMzLjU5LDAsMCwxLTMuMzMtNC4zMiw5LjkzLDkuOTMsMCwwLDEtMS43Mi01LDUuODQsNS44NCwwLDAsMSw1Ljg1LTUuODZaTTEyLDE4LjM0bC4wOC4wNS4wNi0uMDZhMzUuNTgsMzUuNTgsMCwwLDAsMy4wNi0zLjkzLDkuMzUsOS4zNSwwLDAsMCwxLjc0LTQuNzcsNC44OCw0Ljg4LDAsMCwwLTQuODgtNC44OEE0Ljc5LDQuNzksMCwwLDAsOC42LDYuMTcsNC44NCw0Ljg0LDAsMCwwLDcuMTcsOS42Miw5LjI5LDkuMjksMCwwLDAsOC45MSwxNC40LDM2LDM2LDAsMCwwLDEyLDE4LjM0WlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNi4yIC0zLjc2KVwiLz48L2c+PC9zdmc+JyxcclxuICAgbWFnaWNfc3RpY2s6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1LjczIDE1Ljc1XCI+PGc+PHBhdGggZD1cIk0xOS44NiwxOS4yMWExLDEsMCwwLDAsLjI4LS42OCwxLDEsMCwwLDAtLjI4LS43TDEzLDEwLjkzYTEsMSwwLDAsMC0uNy0uMjgsMSwxLDAsMCwwLS42OCwxLjY1bDYuOSw2LjlhMSwxLDAsMCwwLC42OS4yOS45My45MywwLDAsMCwuNjktLjI4Wk05LjE5LDguNTVhMywzLDAsMCwwLDEuNjgsMCwxNC4xMiwxNC4xMiwwLDAsMCwxLjQxLS4zMkExMS4yNiwxMS4yNiwwLDAsMCwxMC44LDcuMDZjLS41Ni0uMzYtLjg2LS41Ni0uOTEtLjU4UzEwLDUuOTEsMTAsNS4xMXMwLTEuMjYtLjE1LTEuMzdhNC4zNSw0LjM1LDAsMCwwLTEuMTkuNzFjLS41My40LS44MS42Mi0uODcuNjhhOSw5LDAsMCwwLTItLjYsNi44NCw2Ljg0LDAsMCwwLS43Ni0uMDlzMCwuMjcuMDguNzdhOC42LDguNiwwLDAsMCwuNjEsMnEtLjA5LjA5LS42OS44N2EzLjU5LDMuNTksMCwwLDAtLjY4LDEuMTdjLjEyLjE3LjU3LjIzLDEuMzYuMTVTNyw5LjI2LDcuMTUsOS4yM3MuMjEuMzYuNTcuOTFhMTAuNDksMTAuNDksMCwwLDAsMS4xNCwxLjQ4YzAtLjEuMTQtLjU3LjMxLTEuNGEzLDMsMCwwLDAsMC0xLjY3WlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNC40MSAtMy43NClcIi8+PC9nPjwvc3ZnPicsXHJcbiAgIGVtcHR5X2ZpbGU6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDEyLjc4IDE1Ljc1XCI+PGc+PHBhdGggZD1cIk0xNC43MywzLjc2LDE4LjY3LDcuN3Y5Ljg0YTIsMiwwLDAsMS0yLDJINy44NGExLjg5LDEuODksMCwwLDEtMS4zOC0uNTgsMiwyLDAsMCwxLS41Ny0xLjM5VjUuNzNhMS45MywxLjkzLDAsMCwxLC41Ny0xLjM4LDIsMiwwLDAsMSwxLjM4LS41OGg2LjYybC4yNiwwdjBabTIuOTUsNC45MmgtMmExLjkzLDEuOTMsMCwwLDEtMS4zOC0uNTcsMiwyLDAsMCwxLS41OC0xLjRWNi4xN2MwLS4zNiwwLS44NCwwLTEuNDNINy44NWExLDEsMCwwLDAtLjcuMjksMSwxLDAsMCwwLS4yOS43VjE3LjU0YTEsMSwwLDAsMCwuMjkuNjksMSwxLDAsMCwwLC42OS4yOWg4Ljg1YTEsMSwwLDAsMCwuNzEtLjI5LjkyLjkyLDAsMCwwLC4yOC0uNjlabTAtMUwxNC43Myw0Ljc0djJBMSwxLDAsMCwwLDE1LDcuNGExLDEsMCwwLDAsLjY5LjI5WlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNS44OSAtMy43NilcIi8+PC9nPjwvc3ZnPidcclxufTtcclxuIiwiLypcclxuICogd3lzaXd5ZyB3ZWIgZWRpdG9yXHJcbiAqXHJcbiAqIHN1bmVkaXRvci5qc1xyXG4gKiBDb3B5cmlnaHQgMjAxNyBKaUhvbmcgTGVlLlxyXG4gKiBNSVQgbGljZW5zZS5cclxuICovXHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbi8qKlxyXG4gKiBAZGVzY3JpcHRpb24gdXRpbGl0eSBmdW5jdGlvblxyXG4gKi9cclxuY29uc3QgdXRpbCA9IHtcclxuICAgIF9kOiBudWxsLFxyXG4gICAgX3c6IG51bGwsXHJcbiAgICBpc0lFOiBudWxsLFxyXG4gICAgaXNJRV9FZGdlOiBudWxsLFxyXG4gICAgaXNPU1hfSU9TOiBudWxsLFxyXG4gICAgX3Byb3BlcnRpZXNJbml0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2QpIHJldHVybjtcclxuICAgICAgICB0aGlzLl9kID0gIGRvY3VtZW50O1xyXG4gICAgICAgIHRoaXMuX3cgPSB3aW5kb3c7XHJcbiAgICAgICAgdGhpcy5pc0lFID0gbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdUcmlkZW50JykgPiAtMTtcclxuICAgICAgICB0aGlzLmlzSUVfRWRnZSA9IChuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ1RyaWRlbnQnKSA+IC0xKSB8fCAobmF2aWdhdG9yLmFwcFZlcnNpb24uaW5kZXhPZignRWRnZScpID4gLTEpO1xyXG4gICAgICAgIHRoaXMuaXNPU1hfSU9TID0gLyhNYWN8aVBob25lfGlQb2R8aVBhZCkvLnRlc3QobmF2aWdhdG9yLnBsYXRmb3JtKTtcclxuICAgIH0sXHJcblxyXG4gICAgX2FsbG93ZWRFbXB0eU5vZGVMaXN0OiAnLnNlLWNvbXBvbmVudCwgcHJlLCBibG9ja3F1b3RlLCBociwgbGksIHRhYmxlLCBpbWcsIGlmcmFtZSwgdmlkZW8sIGF1ZGlvLCBjYW52YXMnLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEhUTUwgUmVzZXJ2ZWQgV29yZCBDb252ZXJ0ZXIuXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gY29udGVudHMgXHJcbiAgICAgKiBAcmV0dXJucyB7U3RyaW5nfSBIVE1MIHN0cmluZ1xyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqL1xyXG4gICAgX0hUTUxDb252ZXJ0b3I6IGZ1bmN0aW9uIChjb250ZW50cykge1xyXG4gICAgICAgIGNvbnN0IGVjID0geycmJzogJyZhbXA7JywgJ1xcdTAwQTAnOiAnJm5ic3A7JywgJ1xcJyc6ICcmYXBvczsnLCAnXCInOiAnJnF1b3Q7JywgJzwnOsKgJyZsdDsnLMKgJz4nOsKgJyZndDsnfTtcclxuICAgICAgICByZXR1cm4gY29udGVudHMucmVwbGFjZSgvJnxcXHUwMEEwfCd8XCJ8PHw+L2csIGZ1bmN0aW9uIChtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAodHlwZW9mIGVjW21dID09PSAnc3RyaW5nJykgPyBlY1ttXSA6IG07XHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFVuaWNvZGUgQ2hhcmFjdGVyICdaRVJPIFdJRFRIIFNQQUNFJyAoXFx1MjAwQilcclxuICAgICAqL1xyXG4gICAgemVyb1dpZHRoU3BhY2U6IFN0cmluZy5mcm9tQ2hhckNvZGUoODIwMyksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gUmVndWxhciBleHByZXNzaW9uIHRvIGZpbmQgJ3plcm8gd2lkdGggc3BhY2UnICgvXFx1MjAwQi9nKVxyXG4gICAgICovXHJcbiAgICB6ZXJvV2lkdGhSZWdFeHA6IG5ldyBSZWdFeHAoU3RyaW5nLmZyb21DaGFyQ29kZSg4MjAzKSwgJ2cnKSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBSZWd1bGFyIGV4cHJlc3Npb24gdG8gZmluZCBvbmx5ICd6ZXJvIHdpZHRoIHNwYWNlJyAoL15cXHUyMDBCKyQvKVxyXG4gICAgICovXHJcbiAgICBvbmx5WmVyb1dpZHRoUmVnRXhwOiBuZXcgUmVnRXhwKCdeJyArIFN0cmluZy5mcm9tQ2hhckNvZGUoODIwMykgKyAnKyQnKSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBIG1ldGhvZCB0aGF0IGNoZWNrcyBJZiB0aGUgdGV4dCBpcyBibGFuayBvciB0byBzZWUgaWYgaXQgY29udGFpbnMgJ1pFUk8gV0lEVEggU1BBQ0UnIG9yIGVtcHR5ICh1dGlsLnplcm9XaWR0aFNwYWNlKVxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd8Tm9kZX0gdGV4dCBTdHJpbmcgdmFsdWUgb3IgTm9kZVxyXG4gICAgICogQHJldHVybnMge0Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIG9ubHlaZXJvV2lkdGhTcGFjZTogZnVuY3Rpb24gKHRleHQpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHRleHQgIT09ICdzdHJpbmcnKSB0ZXh0ID0gdGV4dC50ZXh0Q29udGVudDtcclxuICAgICAgICByZXR1cm4gdGV4dCA9PT0gJycgfHwgdGhpcy5vbmx5WmVyb1dpZHRoUmVnRXhwLnRlc3QodGV4dCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEdldHMgWE1MSHR0cFJlcXVlc3Qgb2JqZWN0XHJcbiAgICAgKiBAcmV0dXJucyB7WE1MSHR0cFJlcXVlc3R8QWN0aXZlWE9iamVjdH1cclxuICAgICAqL1xyXG4gICAgZ2V0WE1MSHR0cFJlcXVlc3Q6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAvKiogSUUgKi9cclxuICAgICAgICBpZiAodGhpcy5fdy5BY3RpdmVYT2JqZWN0KSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3QoJ01zeG1sMi5YTUxIVFRQJyk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBY3RpdmVYT2JqZWN0KCdNaWNyb3NvZnQuWE1MSFRUUCcpO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZTEpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvKiogbmV0c2NhcGUgKi9cclxuICAgICAgICBlbHNlIGlmICh0aGlzLl93LlhNTEh0dHBSZXF1ZXN0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLyoqIGZhaWwgKi9cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBDcmVhdGUgRWxlbWVudCBub2RlXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gZWxlbWVudE5hbWUgRWxlbWVudCBuYW1lXHJcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudH1cclxuICAgICAqL1xyXG4gICAgY3JlYXRlRWxlbWVudDogZnVuY3Rpb24gKGVsZW1lbnROYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2QuY3JlYXRlRWxlbWVudChlbGVtZW50TmFtZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENyZWF0ZSB0ZXh0IG5vZGVcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0IHRleHQgY29udGVudHNcclxuICAgICAqIEByZXR1cm5zIHtOb2RlfVxyXG4gICAgICovXHJcbiAgICBjcmVhdGVUZXh0Tm9kZTogZnVuY3Rpb24gKHRleHQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZC5jcmVhdGVUZXh0Tm9kZSh0ZXh0IHx8ICcnKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIGVkaXRvciBjaGVja3MgdGFncyBieSBzdHJpbmcuXHJcbiAgICAgKiBJZiB0aGVyZSBpcyBcIjxcIiBvciBcIj5cIiBpbiB0aGUgYXR0cmlidXRlIG9mIHRhZywgSFRNTCBpcyBicm9rZW4gd2hlbiBjaGVja2luZyB0aGUgdGFnLlxyXG4gICAgICogV2hlbiB1c2luZyBhbiBhdHRyaWJ1dGUgd2l0aCBcIjxcIiBvciBcIj5cIiwgdXNlIFwiSFRNTEVuY29kZXJcIiB0byBzYXZlLiAoZXg6IG1hdGgoa2F0ZXgpKVxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGNvbnRlbnRzIEhUTUwgb3IgVGV4dCBzdHJpbmdcclxuICAgICAqIEByZXR1cm5zIHtTdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIEhUTUxFbmNvZGVyOiBmdW5jdGlvbiAoY29udGVudHMpIHtcclxuICAgICAgICBjb25zdCBlYyA9IHsnPCc6wqAnJGx0OycswqAnPic6wqAnJGd0Oyd9O1xyXG4gICAgICAgIHJldHVybiBjb250ZW50cy5yZXBsYWNlKC88fD4vZywgZnVuY3Rpb24gKG0pIHtcclxuICAgICAgICAgICAgcmV0dXJuICh0eXBlb2YgZWNbbV0gPT09ICdzdHJpbmcnKSA/IGVjW21dIDogbTtcclxuICAgICAgICB9KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIGVkaXRvciBjaGVja3MgdGFncyBieSBzdHJpbmcuXHJcbiAgICAgKiBJZiB0aGVyZSBpcyBcIjxcIiBvciBcIj5cIiBpbiB0aGUgYXR0cmlidXRlIG9mIHRhZywgSFRNTCBpcyBicm9rZW4gd2hlbiBjaGVja2luZyB0aGUgdGFnLlxyXG4gICAgICogRGVjb2RlciBvZiBkYXRhIHN0b3JlZCBhcyBcIkhUTUxFbmNvZGVyXCIgKGV4OiBtYXRoKGthdGV4KSlcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBjb250ZW50cyBIVE1MIG9yIFRleHQgc3RyaW5nXHJcbiAgICAgKiBAcmV0dXJucyB7U3RyaW5nfVxyXG4gICAgICovXHJcbiAgICBIVE1MRGVjb2RlcjogZnVuY3Rpb24gKGNvbnRlbnRzKSB7XHJcbiAgICAgICAgY29uc3QgZWMgPSB7JyRsdDsnOsKgJzwnLMKgJyRndDsnOsKgJz4nfTtcclxuICAgICAgICByZXR1cm4gY29udGVudHMucmVwbGFjZSgvXFwkbHQ7fFxcJGd0Oy9nLCBmdW5jdGlvbiAobSkge1xyXG4gICAgICAgICAgICByZXR1cm4gKHR5cGVvZiBlY1ttXSA9PT0gJ3N0cmluZycpID8gZWNbbV0gOiBtO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGlzIG1ldGhvZCBydW4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KVxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iaiBPYmplY3RcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBrZXkgb2JqLmtleVxyXG4gICAgICogQHJldHVybnMge0Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGhhc093bjogZnVuY3Rpb24gKG9iaiwga2V5KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc093bi5jYWxsKG9iaiwga2V5KTtcclxuICAgIH0sXHJcbiAgICBfaGFzT3duOiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlcHJlY2F0ZWRcclxuICAgICAqIEBkZXNjcmlwdGlvbiBHZXQgdGhlIHRoZSB0YWcgcGF0aCBvZiB0aGUgYXJndW1lbnRzIHZhbHVlXHJcbiAgICAgKiBJZiBub3QgZm91bmQsIHJldHVybiB0aGUgZmlyc3QgZm91bmQgdmFsdWVcclxuICAgICAqIEBwYXJhbSB7QXJyYXl9IG5hbWVBcnJheSBGaWxlIG5hbWUgYXJyYXlcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBleHRlbnNpb24ganMsIGNzc1xyXG4gICAgICogQHJldHVybnMge1N0cmluZ31cclxuICAgICAqL1xyXG4gICAgZ2V0SW5jbHVkZVBhdGg6IGZ1bmN0aW9uIChuYW1lQXJyYXksIGV4dGVuc2lvbikge1xyXG4gICAgICAgIGxldCBwYXRoID0gJyc7XHJcbiAgICAgICAgY29uc3QgcGF0aExpc3QgPSBbXTtcclxuICAgICAgICBjb25zdCB0YWdOYW1lID0gZXh0ZW5zaW9uID09PSAnanMnID8gJ3NjcmlwdCcgOiAnbGluayc7XHJcbiAgICAgICAgY29uc3Qgc3JjID0gZXh0ZW5zaW9uID09PSAnanMnID8gJ3NyYycgOiAnaHJlZic7XHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IGZpbGVOYW1lID0gJyg/Oic7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IG5hbWVBcnJheS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBmaWxlTmFtZSArPSBuYW1lQXJyYXlbaV0gKyAoaSA8IGxlbiAtIDEgPyAnfCcgOiAnKScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcmVnRXhwID0gbmV3IHRoaXMuX3cuUmVnRXhwKCcoXnwuKltcXFxcL10pJyArIGZpbGVOYW1lICsgJyhcXFxcLlteXFxcXC9dKyk/XFwuJyArIGV4dGVuc2lvbiArICcoPzpcXFxcPy4qfDsuKik/JCcsICdpJyk7XHJcbiAgICAgICAgY29uc3QgZXh0UmVnRXhwID0gbmV3IHRoaXMuX3cuUmVnRXhwKCcuK1xcXFwuJyArIGV4dGVuc2lvbiArICcoPzpcXFxcPy4qfDsuKik/JCcsICdpJyk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIGZvciAobGV0IGMgPSB0aGlzLl9kLmdldEVsZW1lbnRzQnlUYWdOYW1lKHRhZ05hbWUpLCBpID0gMDsgaSA8IGMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGV4dFJlZ0V4cC50ZXN0KGNbaV1bc3JjXSkpIHtcclxuICAgICAgICAgICAgICAgIHBhdGhMaXN0LnB1c2goY1tpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aExpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IGVkaXRvclRhZyA9IHBhdGhMaXN0W2ldW3NyY10ubWF0Y2gocmVnRXhwKTtcclxuICAgICAgICAgICAgaWYgKGVkaXRvclRhZykge1xyXG4gICAgICAgICAgICAgICAgcGF0aCA9IGVkaXRvclRhZ1swXTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocGF0aCA9PT0gJycpIHBhdGggPSBwYXRoTGlzdC5sZW5ndGggPiAwID8gcGF0aExpc3RbMF1bc3JjXSA6ICcnO1xyXG5cclxuICAgICAgICAtMSA9PT0gcGF0aC5pbmRleE9mKCc6LycpICYmICcvLycgIT09IHBhdGguc2xpY2UoMCwgMikgJiYgKHBhdGggPSAwID09PSBwYXRoLmluZGV4T2YoJy8nKSA/IGxvY2F0aW9uLmhyZWYubWF0Y2goL14uKj86XFwvXFwvW15cXC9dKi8pWzBdICsgcGF0aCA6IGxvY2F0aW9uLmhyZWYubWF0Y2goL15bXlxcP10qXFwvKD86KS8pWzBdICsgcGF0aCk7XHJcblxyXG4gICAgICAgIGlmICghcGF0aCkgdGhyb3cgJ1tTVU5FRElUT1IudXRpbC5nZXRJbmNsdWRlUGF0aC5mYWlsXSBUaGUgU1VORURJVE9SIGluc3RhbGxhdGlvbiBwYXRoIGNvdWxkIG5vdCBiZSBhdXRvbWF0aWNhbGx5IGRldGVjdGVkLiAobmFtZTogKycgKyBuYW1lICsgJywgZXh0ZW5zaW9uOiAnICsgZXh0ZW5zaW9uICsgJyknO1xyXG5cclxuICAgICAgICByZXR1cm4gcGF0aDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVwcmVjYXRlZFxyXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIENTUyB0ZXh0IHRoYXQgaGFzIGJlZW4gYXBwbGllZCB0byB0aGUgY3VycmVudCBwYWdlLlxyXG4gICAgICogQHBhcmFtIHtEb2N1bWVudHxudWxsfSBkb2MgVG8gZ2V0IHRoZSBDU1MgdGV4dCBvZiBhbiBkb2N1bWVudChjb3JlLl93ZCkuIElmIG51bGwgZ2V0IHRoZSBjdXJyZW50IGRvY3VtZW50LlxyXG4gICAgICogQHJldHVybnMge1N0cmluZ30gU3R5bGVzIHN0cmluZ1xyXG4gICAgICovXHJcbiAgICBnZXRQYWdlU3R5bGU6IGZ1bmN0aW9uIChkb2MpIHtcclxuICAgICAgICBsZXQgY3NzVGV4dCA9ICcnO1xyXG4gICAgICAgIGNvbnN0IHNoZWV0cyA9IChkb2MgfHwgdGhpcy5fZCkuc3R5bGVTaGVldHM7XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHNoZWV0cy5sZW5ndGgsIHJ1bGVzOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHJ1bGVzID0gc2hlZXRzW2ldLmNzc1J1bGVzO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYgKHJ1bGVzKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBjID0gMCwgY0xlbiA9IHJ1bGVzLmxlbmd0aDsgYyA8IGNMZW47IGMrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNzc1RleHQgKz0gcnVsZXNbY10uY3NzVGV4dDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNzc1RleHQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEdldCB0aGUgYXJndW1lbnQgaWZyYW1lJ3MgZG9jdW1lbnQgb2JqZWN0XHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGlmcmFtZSBJZnJhbWUgZWxlbWVudCAoY29udGV4dC5lbGVtZW50Lnd5c2l3eWdGcmFtZSlcclxuICAgICAqIEByZXR1cm5zIHtEb2N1bWVudH1cclxuICAgICAqL1xyXG4gICAgZ2V0SWZyYW1lRG9jdW1lbnQ6IGZ1bmN0aW9uIChpZnJhbWUpIHtcclxuICAgICAgICBsZXQgd0RvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cgfHwgaWZyYW1lLmNvbnRlbnREb2N1bWVudDtcclxuICAgICAgICBpZiAod0RvY3VtZW50LmRvY3VtZW50KSB3RG9jdW1lbnQgPSB3RG9jdW1lbnQuZG9jdW1lbnQ7XHJcbiAgICAgICAgcmV0dXJuIHdEb2N1bWVudDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gR2V0IGF0dHJpYnV0ZXMgb2YgYXJndW1lbnQgZWxlbWVudCB0byBzdHJpbmcgKCdjbGFzcz1cIi0tLVwiIG5hbWU9XCItLS1cIiAnKVxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IEVsZW1lbnQgb2JqZWN0XHJcbiAgICAgKiBAcGFyYW0ge0FycmF5fG51bGx9IGV4Y2VwdEF0dHJzIEFycmF5IG9mIGF0dHJpYnV0ZSBuYW1lcyB0byBleGNsdWRlIGZyb20gdGhlIHJlc3VsdFxyXG4gICAgICogQHJldHVybnMge1N0cmluZ31cclxuICAgICAqL1xyXG4gICAgZ2V0QXR0cmlidXRlc1RvU3RyaW5nOiBmdW5jdGlvbiAoZWxlbWVudCwgZXhjZXB0QXR0cnMpIHtcclxuICAgICAgICBpZiAoIWVsZW1lbnQuYXR0cmlidXRlcykgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBjb25zdCBhdHRycyA9IGVsZW1lbnQuYXR0cmlidXRlcztcclxuICAgICAgICBsZXQgYXR0clN0cmluZyA9ICcnO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gYXR0cnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGV4Y2VwdEF0dHJzICYmIGV4Y2VwdEF0dHJzLmluZGV4T2YoYXR0cnNbaV0ubmFtZSkgPiAtMSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGF0dHJTdHJpbmcgKz0gYXR0cnNbaV0ubmFtZSArICc9XCInICsgYXR0cnNbaV0udmFsdWUgKyAnXCIgJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBhdHRyU3RyaW5nO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbkdldHMgR2V0IHRoZSBsZW5ndGggaW4gYnl0ZXMgb2YgYSBzdHJpbmcuXHJcbiAgICAgKiByZWZlcmVuY2luZyBjb2RlOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9zaGFhbjE5NzQvbXlyZGluL2Jsb2IvbWFzdGVyL2V4cHJlc3Npb25zL3N0cmluZy5qcyNMMTFcIlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHRleHQgU3RyaW5nIHRleHRcclxuICAgICAqIEByZXR1cm5zIHtOdW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGdldEJ5dGVMZW5ndGg6IGZ1bmN0aW9uKHRleHQpIHtcclxuICAgICAgICBpZiAoIXRleHQgfHwgIXRleHQudG9TdHJpbmcpIHJldHVybiAwO1xyXG4gICAgICAgIHRleHQgPSB0ZXh0LnRvU3RyaW5nKCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGVuY29kZXIgPSB0aGlzLl93LmVuY29kZVVSSUNvbXBvbmVudDtcclxuICAgICAgICBsZXQgY3IsIGNsO1xyXG4gICAgICAgIGlmICh0aGlzLmlzSUVfRWRnZSkge1xyXG4gICAgICAgICAgICBjbCA9IHRoaXMuX3cudW5lc2NhcGUoZW5jb2Rlcih0ZXh0KSkubGVuZ3RoO1xyXG4gICAgICAgICAgICBjciA9IDA7XHJcblxyXG4gICAgICAgICAgICBpZiAoZW5jb2Rlcih0ZXh0KS5tYXRjaCgvKCUwQXwlMEQpL2dpKSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgY3IgPSBlbmNvZGVyKHRleHQpLm1hdGNoKC8oJTBBfCUwRCkvZ2kpLmxlbmd0aDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGNsICsgY3I7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY2wgPSAobmV3IHRoaXMuX3cuVGV4dEVuY29kZXIoJ3V0Zi04JykuZW5jb2RlKHRleHQpKS5sZW5ndGg7XHJcbiAgICAgICAgICAgIGNyID0gMDtcclxuXHJcbiAgICAgICAgICAgIGlmIChlbmNvZGVyKHRleHQpLm1hdGNoKC8oJTBBfCUwRCkvZ2kpICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBjciA9IGVuY29kZXIodGV4dCkubWF0Y2goLyglMEF8JTBEKS9naSkubGVuZ3RoO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gY2wgKyBjcjtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEl0IGlzIGp1ZGdlZCB3aGV0aGVyIGl0IGlzIHRoZSBlZGl0IHJlZ2lvbiB0b3AgZGl2IGVsZW1lbnQgb3IgaWZyYW1lJ3MgYm9keSB0YWcuXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IGVsZW1lbnQgVGhlIG5vZGUgdG8gY2hlY2tcclxuICAgICAqIEByZXR1cm5zIHtCb29sZWFufVxyXG4gICAgICovXHJcbiAgICBpc1d5c2l3eWdEaXY6IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQgJiYgZWxlbWVudC5ub2RlVHlwZSA9PT0gMSAmJiAodGhpcy5oYXNDbGFzcyhlbGVtZW50LCAnc2Utd3JhcHBlci13eXNpd3lnJykgfHwgL15CT0RZJC9pLnRlc3QoZWxlbWVudC5ub2RlTmFtZSkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBJdCBpcyBqdWRnZWQgd2hldGhlciBpdCBpcyB0aGUgY29udGVudGVkaXRhYmxlIHByb3BlcnR5IGlzIGZhbHNlLlxyXG4gICAgICogQHBhcmFtIHtOb2RlfSBlbGVtZW50IFRoZSBub2RlIHRvIGNoZWNrXHJcbiAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaXNOb25FZGl0YWJsZTogZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudCAmJiBlbGVtZW50Lm5vZGVUeXBlID09PSAxICYmIGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnKSA9PT0gJ2ZhbHNlJztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gSXQgaXMganVkZ2VkIHdoZXRoZXIgaXQgaXMgYSBub2RlIHJlbGF0ZWQgdG8gdGhlIHRleHQgc3R5bGUuXHJcbiAgICAgKiAoc3Ryb25nfHNwYW58Zm9udHxifHZhcnxpfGVtfHV8aW5zfHN8c3RyaWtlfGRlbHxzdWJ8c3VwfG1hcmt8YXxsYWJlbHxjb2RlKVxyXG4gICAgICogQHBhcmFtIHtOb2RlfSBlbGVtZW50IFRoZSBub2RlIHRvIGNoZWNrXHJcbiAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaXNUZXh0U3R5bGVFbGVtZW50OiBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50ICYmIGVsZW1lbnQubm9kZVR5cGUgIT09IDMgJiYgL14oc3Ryb25nfHNwYW58Zm9udHxifHZhcnxpfGVtfHV8aW5zfHN8c3RyaWtlfGRlbHxzdWJ8c3VwfG1hcmt8YXxsYWJlbHxjb2RlfHN1bW1hcnkpJC9pLnRlc3QoZWxlbWVudC5ub2RlTmFtZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEl0IGlzIGp1ZGdlZCB3aGV0aGVyIGl0IGlzIHRoZSBmb3JtYXQgZWxlbWVudCAoUCwgRElWLCBIWzEtNl0sIFBSRSwgTEkgfCBjbGFzcz1cIl9fc2VfX2Zvcm1hdF9fcmVwbGFjZV94eHhcIilcclxuICAgICAqIEZvcm1hdCBlbGVtZW50IGFsc28gY29udGFpbiBcImZyZWUgZm9ybWF0IEVsZW1lbnRcIlxyXG4gICAgICogQHBhcmFtIHtOb2RlfSBlbGVtZW50IFRoZSBub2RlIHRvIGNoZWNrXHJcbiAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaXNGb3JtYXRFbGVtZW50OiBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50ICYmIGVsZW1lbnQubm9kZVR5cGUgPT09IDEgJiYgKC9eKFB8RElWfEhbMS02XXxQUkV8TEl8VEh8VER8REVUQUlMUykkL2kudGVzdChlbGVtZW50Lm5vZGVOYW1lKSB8fCB0aGlzLmhhc0NsYXNzKGVsZW1lbnQsICcoXFxcXHN8XilfX3NlX19mb3JtYXRfX3JlcGxhY2VfLisoXFxcXHN8JCl8KFxcXFxzfF4pX19zZV9fZm9ybWF0X19mcmVlXy4rKFxcXFxzfCQpJykpICYmICF0aGlzLmlzQ29tcG9uZW50KGVsZW1lbnQpICYmICF0aGlzLmlzV3lzaXd5Z0RpdihlbGVtZW50KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gSXQgaXMganVkZ2VkIHdoZXRoZXIgaXQgaXMgdGhlIHJhbmdlIGZvcm1hdCBlbGVtZW50LiAoQkxPQ0tRVU9URSwgT0wsIFVMLCBGSUdDQVBUSU9OLCBUQUJMRSwgVEhFQUQsIFRCT0RZLCBUUiwgVEgsIFREIHwgY2xhc3M9XCJfX3NlX19mb3JtYXRfX3JhbmdlX3h4eFwiKVxyXG4gICAgICogUmFuZ2UgZm9ybWF0IGVsZW1lbnQgaXMgd3JhcCB0aGUgXCJmb3JtYXQgZWxlbWVudFwiIGFuZCBcImNvbXBvbmVudFwiXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IGVsZW1lbnQgVGhlIG5vZGUgdG8gY2hlY2tcclxuICAgICAqIEByZXR1cm5zIHtCb29sZWFufVxyXG4gICAgICovXHJcbiAgICBpc1JhbmdlRm9ybWF0RWxlbWVudDogZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudCAmJiBlbGVtZW50Lm5vZGVUeXBlID09PSAxICYmICgvXihCTE9DS1FVT1RFfE9MfFVMfEZJR0NBUFRJT058VEFCTEV8VEhFQUR8VEJPRFl8VFJ8VEh8VER8REVUQUlMUykkL2kudGVzdChlbGVtZW50Lm5vZGVOYW1lKSB8fCB0aGlzLmhhc0NsYXNzKGVsZW1lbnQsICcoXFxcXHN8XilfX3NlX19mb3JtYXRfX3JhbmdlXy4rKFxcXFxzfCQpJykpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBJdCBpcyBqdWRnZWQgd2hldGhlciBpdCBpcyB0aGUgY2xvc3VyZSByYW5nZSBmb3JtYXQgZWxlbWVudC4gKFRILCBURCB8IGNsYXNzPVwiX19zZV9fZm9ybWF0X19yYW5nZV9fY2xvc3VyZV94eHhcIilcclxuICAgICAqIENsb3N1cmUgcmFuZ2UgZm9ybWF0IGVsZW1lbnRzIGlzIGluY2x1ZGVkIGluIHRoZSByYW5nZSBmb3JtYXQgZWxlbWVudC5cclxuICAgICAqICAtIENsb3N1cmUgcmFuZ2UgZm9ybWF0IGVsZW1lbnQgaXMgd3JhcCB0aGUgXCJmb3JtYXQgZWxlbWVudFwiIGFuZCBcImNvbXBvbmVudFwiXHJcbiAgICAgKiDigLsgWW91IGNhbm5vdCBleGl0IHRoaXMgZm9ybWF0IHdpdGggdGhlIEVudGVyIGtleSBvciBCYWNrc3BhY2Uga2V5LlxyXG4gICAgICog4oC7IFVzZSBpdCBvbmx5IGluIHNwZWNpYWwgY2FzZXMuIChbZXhdIGZvcm1hdCBvZiB0YWJsZSBjZWxscylcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gZWxlbWVudCBUaGUgbm9kZSB0byBjaGVja1xyXG4gICAgICogQHJldHVybnMge0Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzQ2xvc3VyZVJhbmdlRm9ybWF0RWxlbWVudDogZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudCAmJiBlbGVtZW50Lm5vZGVUeXBlID09PSAxICYmICgvXihUSHxURCkkL2kudGVzdChlbGVtZW50Lm5vZGVOYW1lKSB8fCB0aGlzLmhhc0NsYXNzKGVsZW1lbnQsICcoXFxcXHN8XilfX3NlX19mb3JtYXRfX3JhbmdlX19jbG9zdXJlXy4rKFxcXFxzfCQpJykpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBJdCBpcyBqdWRnZWQgd2hldGhlciBpdCBpcyB0aGUgZnJlZSBmb3JtYXQgZWxlbWVudC4gKFBSRSB8IGNsYXNzPVwiX19zZV9fZm9ybWF0X19mcmVlX3h4eFwiKVxyXG4gICAgICogRnJlZSBmb3JtYXQgZWxlbWVudHMgaXMgaW5jbHVkZWQgaW4gdGhlIGZvcm1hdCBlbGVtZW50LlxyXG4gICAgICogRnJlZSBmb3JtYXQgZWxlbWVudHMncyBsaW5lIGJyZWFrIGlzIFwiQlJcIiB0YWcuXHJcbiAgICAgKiDigLsgRW50ZXJpbmcgdGhlIEVudGVyIGtleSBpbiB0aGUgc3BhY2Ugb24gdGhlIGxhc3QgbGluZSBlbmRzIFwiRnJlZSBGb3JtYXRcIiBhbmQgYXBwZW5kcyBcIkZvcm1hdFwiLlxyXG4gICAgICogQHBhcmFtIHtOb2RlfSBlbGVtZW50IFRoZSBub2RlIHRvIGNoZWNrXHJcbiAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaXNGcmVlRm9ybWF0RWxlbWVudDogZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudCAmJiBlbGVtZW50Lm5vZGVUeXBlID09PSAxICYmICgvXlBSRSQvaS50ZXN0KGVsZW1lbnQubm9kZU5hbWUpIHx8IHRoaXMuaGFzQ2xhc3MoZWxlbWVudCwgJyhcXFxcc3xeKV9fc2VfX2Zvcm1hdF9fZnJlZV8uKyhcXFxcc3wkKScpKSAmJiAhdGhpcy5pc0NvbXBvbmVudChlbGVtZW50KSAmJiAhdGhpcy5pc1d5c2l3eWdEaXYoZWxlbWVudCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEl0IGlzIGp1ZGdlZCB3aGV0aGVyIGl0IGlzIHRoZSBjbG9zdXJlIGZyZWUgZm9ybWF0IGVsZW1lbnQuIChjbGFzcz1cIl9fc2VfX2Zvcm1hdF9fZnJlZV9fY2xvc3VyZV94eHhcIilcclxuICAgICAqIENsb3N1cmUgZnJlZSBmb3JtYXQgZWxlbWVudHMgaXMgaW5jbHVkZWQgaW4gdGhlIGZyZWUgZm9ybWF0IGVsZW1lbnQuXHJcbiAgICAgKiAgLSBDbG9zdXJlIGZyZWUgZm9ybWF0IGVsZW1lbnRzJ3MgbGluZSBicmVhayBpcyBcIkJSXCIgdGFnLlxyXG4gICAgICog4oC7IFlvdSBjYW5ub3QgZXhpdCB0aGlzIGZvcm1hdCB3aXRoIHRoZSBFbnRlciBrZXkgb3IgQmFja3NwYWNlIGtleS5cclxuICAgICAqIOKAuyBVc2UgaXQgb25seSBpbiBzcGVjaWFsIGNhc2VzLiAoW2V4XSBmb3JtYXQgb2YgdGFibGUgY2VsbHMpXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IGVsZW1lbnQgVGhlIG5vZGUgdG8gY2hlY2tcclxuICAgICAqIEByZXR1cm5zIHtCb29sZWFufVxyXG4gICAgICovXHJcbiAgICBpc0Nsb3N1cmVGcmVlRm9ybWF0RWxlbWVudDogZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudCAmJiBlbGVtZW50Lm5vZGVUeXBlID09PSAxICYmIHRoaXMuaGFzQ2xhc3MoZWxlbWVudCwgJyhcXFxcc3xeKV9fc2VfX2Zvcm1hdF9fZnJlZV9fY2xvc3VyZV8uKyhcXFxcc3wkKScpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBJdCBpcyBqdWRnZWQgd2hldGhlciBpdCBpcyB0aGUgY29tcG9uZW50W2ltZywgaWZyYW1lLCB2aWRlbywgYXVkaW8sIHRhYmxlXSBjb3ZlcihjbGFzcz1cInNlLWNvbXBvbmVudFwiKSBhbmQgdGFibGUsIGhyXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IGVsZW1lbnQgVGhlIG5vZGUgdG8gY2hlY2tcclxuICAgICAqIEByZXR1cm5zIHtCb29sZWFufVxyXG4gICAgICovXHJcbiAgICBpc0NvbXBvbmVudDogZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudCAmJiAoL3NlLWNvbXBvbmVudC8udGVzdChlbGVtZW50LmNsYXNzTmFtZSkgfHwgL14oVEFCTEV8SFIpJC8udGVzdChlbGVtZW50Lm5vZGVOYW1lKSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENoZWNrcyBmb3IgXCJfX3NlX191bmVkaXRhYmxlXCIgaW4gdGhlIGNsYXNzIGxpc3QuXHJcbiAgICAgKiBDb21wb25lbnRzIHdpdGggY2xhc3MgXCJfX3NlX191bmVkaXRhYmxlXCIgY2Fubm90IGJlIG1vZGlmaWVkLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IFRoZSBlbGVtZW50IHRvIGNoZWNrXHJcbiAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaXNVbmVkaXRhYmxlQ29tcG9uZW50OiBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50ICYmIHRoaXMuaGFzQ2xhc3MoZWxlbWVudCwgJ19fc2VfX3VuZWRpdGFibGUnKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gSXQgaXMganVkZ2VkIHdoZXRoZXIgaXQgaXMgdGhlIGNvbXBvbmVudCBbaW1nLCBpZnJhbWVdIGNvdmVyKGNsYXNzPVwic2UtY29tcG9uZW50XCIpXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IGVsZW1lbnQgVGhlIG5vZGUgdG8gY2hlY2tcclxuICAgICAqIEByZXR1cm5zIHtCb29sZWFufVxyXG4gICAgICovXHJcbiAgICBpc01lZGlhQ29tcG9uZW50OiBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50ICYmIC9zZS1jb21wb25lbnQvLnRlc3QoZWxlbWVudC5jbGFzc05hbWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBJdCBpcyBqdWRnZWQgd2hldGhlciBpdCBpcyB0aGUgbm90IGNoZWNraW5nIG5vZGUuIChjbGFzcz1cImthdGV4XCIsIFwiX19zZV9fdGFnXCIpXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IGVsZW1lbnQgVGhlIG5vZGUgdG8gY2hlY2tcclxuICAgICAqIEByZXR1cm5zIHtCb29sZWFufVxyXG4gICAgICovXHJcbiAgICBpc05vdENoZWNraW5nTm9kZTogZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudCAmJiAva2F0ZXh8X19zZV9fdGFnLy50ZXN0KGVsZW1lbnQuY2xhc3NOYW1lKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gSWYgYSBwYXJlbnQgbm9kZSB0aGF0IGNvbnRhaW5zIGFuIGFyZ3VtZW50IG5vZGUgZmluZHMgYSBmb3JtYXQgbm9kZSAodXRpbC5pc0Zvcm1hdEVsZW1lbnQpLCBpdCByZXR1cm5zIHRoYXQgbm9kZS5cclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gZWxlbWVudCBSZWZlcmVuY2Ugbm9kZS5cclxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb258bnVsbH0gdmFsaWRhdGlvbiBBZGRpdGlvbmFsIHZhbGlkYXRpb24gZnVuY3Rpb24uXHJcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudHxudWxsfVxyXG4gICAgICovXHJcbiAgICBnZXRGb3JtYXRFbGVtZW50OiBmdW5jdGlvbiAoZWxlbWVudCwgdmFsaWRhdGlvbikge1xyXG4gICAgICAgIGlmICghZWxlbWVudCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgaWYgKCF2YWxpZGF0aW9uKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb24gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0cnVlOyB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgd2hpbGUgKGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNXeXNpd3lnRGl2KGVsZW1lbnQpKSByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNSYW5nZUZvcm1hdEVsZW1lbnQoZWxlbWVudCkpIGVsZW1lbnQuZmlyc3RFbGVtZW50Q2hpbGQ7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRm9ybWF0RWxlbWVudChlbGVtZW50KSAmJiB2YWxpZGF0aW9uKGVsZW1lbnQpKSByZXR1cm4gZWxlbWVudDtcclxuXHJcbiAgICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBJZiBhIHBhcmVudCBub2RlIHRoYXQgY29udGFpbnMgYW4gYXJndW1lbnQgbm9kZSBmaW5kcyBhIGZvcm1hdCBub2RlICh1dGlsLmlzUmFuZ2VGb3JtYXRFbGVtZW50KSwgaXQgcmV0dXJucyB0aGF0IG5vZGUuXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IGVsZW1lbnQgUmVmZXJlbmNlIG5vZGUuXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufG51bGx9IHZhbGlkYXRpb24gQWRkaXRpb25hbCB2YWxpZGF0aW9uIGZ1bmN0aW9uLlxyXG4gICAgICogQHJldHVybnMge0VsZW1lbnR8bnVsbH1cclxuICAgICAqL1xyXG4gICAgZ2V0UmFuZ2VGb3JtYXRFbGVtZW50OiBmdW5jdGlvbiAoZWxlbWVudCwgdmFsaWRhdGlvbikge1xyXG4gICAgICAgIGlmICghZWxlbWVudCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgaWYgKCF2YWxpZGF0aW9uKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb24gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0cnVlOyB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgd2hpbGUgKGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNXeXNpd3lnRGl2KGVsZW1lbnQpKSByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNSYW5nZUZvcm1hdEVsZW1lbnQoZWxlbWVudCkgJiYgIS9eKFRIRUFEfFRCT0RZfFRSKSQvaS50ZXN0KGVsZW1lbnQubm9kZU5hbWUpICYmIHZhbGlkYXRpb24oZWxlbWVudCkpIHJldHVybiBlbGVtZW50O1xyXG4gICAgICAgICAgICBlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIElmIGEgcGFyZW50IG5vZGUgdGhhdCBjb250YWlucyBhbiBhcmd1bWVudCBub2RlIGZpbmRzIGEgZnJlZSBmb3JtYXQgbm9kZSAodXRpbC5pc0ZyZWVGb3JtYXRFbGVtZW50KSwgaXQgcmV0dXJucyB0aGF0IG5vZGUuXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IGVsZW1lbnQgUmVmZXJlbmNlIG5vZGUuXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufG51bGx9IHZhbGlkYXRpb24gQWRkaXRpb25hbCB2YWxpZGF0aW9uIGZ1bmN0aW9uLlxyXG4gICAgICogQHJldHVybnMge0VsZW1lbnR8bnVsbH1cclxuICAgICAqL1xyXG4gICAgZ2V0RnJlZUZvcm1hdEVsZW1lbnQ6IGZ1bmN0aW9uIChlbGVtZW50LCB2YWxpZGF0aW9uKSB7XHJcbiAgICAgICAgaWYgKCFlbGVtZW50KSByZXR1cm4gbnVsbDtcclxuICAgICAgICBpZiAoIXZhbGlkYXRpb24pIHtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbiA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRydWU7IH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB3aGlsZSAoZWxlbWVudCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc1d5c2l3eWdEaXYoZWxlbWVudCkpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0ZyZWVGb3JtYXRFbGVtZW50KGVsZW1lbnQpICYmIHZhbGlkYXRpb24oZWxlbWVudCkpIHJldHVybiBlbGVtZW50O1xyXG5cclxuICAgICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIElmIGEgcGFyZW50IG5vZGUgdGhhdCBjb250YWlucyBhbiBhcmd1bWVudCBub2RlIGZpbmRzIGEgY2xvc3VyZSBmcmVlIGZvcm1hdCBub2RlICh1dGlsLmlzQ2xvc3VyZUZyZWVGb3JtYXRFbGVtZW50KSwgaXQgcmV0dXJucyB0aGF0IG5vZGUuXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IGVsZW1lbnQgUmVmZXJlbmNlIG5vZGUuXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufG51bGx9IHZhbGlkYXRpb24gQWRkaXRpb25hbCB2YWxpZGF0aW9uIGZ1bmN0aW9uLlxyXG4gICAgICogQHJldHVybnMge0VsZW1lbnR8bnVsbH1cclxuICAgICAqL1xyXG4gICAgZ2V0Q2xvc3VyZUZyZWVGb3JtYXRFbGVtZW50OiBmdW5jdGlvbiAoZWxlbWVudCwgdmFsaWRhdGlvbikge1xyXG4gICAgICAgIGlmICghZWxlbWVudCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgaWYgKCF2YWxpZGF0aW9uKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb24gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0cnVlOyB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgd2hpbGUgKGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNXeXNpd3lnRGl2KGVsZW1lbnQpKSByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNDbG9zdXJlRnJlZUZvcm1hdEVsZW1lbnQoZWxlbWVudCkgJiYgdmFsaWRhdGlvbihlbGVtZW50KSkgcmV0dXJuIGVsZW1lbnQ7XHJcblxyXG4gICAgICAgICAgICBlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWRkIHN0eWxlIGFuZCBjbGFzc05hbWUgb2YgY29weUVsIHRvIG9yaWdpbkVsXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IG9yaWdpbkVsIE9yaWdpbiBlbGVtZW50XHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGNvcHlFbCBFbGVtZW50IHRvIGNvcHlcclxuICAgICAqL1xyXG4gICAgY29weVRhZ0F0dHJpYnV0ZXM6IGZ1bmN0aW9uIChvcmlnaW5FbCwgY29weUVsKSB7XHJcbiAgICAgICAgaWYgKGNvcHlFbC5zdHlsZS5jc3NUZXh0KSB7XHJcbiAgICAgICAgICAgIG9yaWdpbkVsLnN0eWxlLmNzc1RleHQgKz0gY29weUVsLnN0eWxlLmNzc1RleHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBjbGFzc2VzID0gY29weUVsLmNsYXNzTGlzdDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gY2xhc3Nlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLmFkZENsYXNzKG9yaWdpbkVsLCBjbGFzc2VzW2ldKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghb3JpZ2luRWwuc3R5bGUuY3NzVGV4dCkgb3JpZ2luRWwucmVtb3ZlQXR0cmlidXRlKCdzdHlsZScpO1xyXG4gICAgICAgIGlmICghb3JpZ2luRWwuY2xhc3NOYW1lLnRyaW0oKSkgb3JpZ2luRWwucmVtb3ZlQXR0cmlidXRlKCdjbGFzcycpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBDb3B5IGFuZCBhcHBseSBhdHRyaWJ1dGVzIG9mIGZvcm1hdCB0YWcgdGhhdCBzaG91bGQgYmUgbWFpbnRhaW5lZC4gKHN0eWxlLCBjbGFzcykgSWdub3JlIFwiX19zZV9fZm9ybWF0X19cIiBjbGFzc1xyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBvcmlnaW5FbCBPcmlnaW4gZWxlbWVudFxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBjb3B5RWwgRWxlbWVudCB0byBjb3B5XHJcbiAgICAgKi9cclxuICAgIGNvcHlGb3JtYXRBdHRyaWJ1dGVzOiBmdW5jdGlvbiAob3JpZ2luRWwsIGNvcHlFbCkge1xyXG4gICAgICAgIGNvcHlFbCA9IGNvcHlFbC5jbG9uZU5vZGUoZmFsc2UpO1xyXG4gICAgICAgIGNvcHlFbC5jbGFzc05hbWUgPSBjb3B5RWwuY2xhc3NOYW1lLnJlcGxhY2UoLyhcXHN8XilfX3NlX19mb3JtYXRfX1teXFxzXSsvZywgJycpO1xyXG4gICAgICAgIHRoaXMuY29weVRhZ0F0dHJpYnV0ZXMob3JpZ2luRWwsIGNvcHlFbCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEdldCB0aGUgaXRlbSBmcm9tIHRoZSBhcnJheSB0aGF0IG1hdGNoZXMgdGhlIGNvbmRpdGlvbi5cclxuICAgICAqIEBwYXJhbSB7QXJyYXl8SFRNTENvbGxlY3Rpb258Tm9kZUxpc3R9IGFycmF5IEFycmF5IHRvIGdldCBpdGVtXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufG51bGx9IHZhbGlkYXRpb24gQ29uZGl0aW9uYWwgZnVuY3Rpb25cclxuICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gbXVsdGkgSWYgdHJ1ZSwgcmV0dXJucyBhbGwgaXRlbXMgdGhhdCBtZWV0IHRoZSBjcml0ZXJpYSBvdGhlcndpc2UsIHJldHVybnMgYW4gZW1wdHkgYXJyYXkuXHJcbiAgICAgKiBJZiBmYWxzZSwgcmV0dXJucyBvbmx5IG9uZSBpdGVtIHRoYXQgbWVldCB0aGUgY3JpdGVyaWEgb3RoZXJ3aXNlIHJldHVybiBudWxsLlxyXG4gICAgICogQHJldHVybnMge0FycmF5fE5vZGV8bnVsbH1cclxuICAgICAqL1xyXG4gICAgZ2V0QXJyYXlJdGVtOiBmdW5jdGlvbiAoYXJyYXksIHZhbGlkYXRpb24sIG11bHRpKSB7XHJcbiAgICAgICAgaWYgKCFhcnJheSB8fCBhcnJheS5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xyXG5cclxuICAgICAgICB2YWxpZGF0aW9uID0gdmFsaWRhdGlvbiB8fCBmdW5jdGlvbiAoKSB7IHJldHVybiB0cnVlOyB9O1xyXG4gICAgICAgIGNvbnN0IGFyciA9IFtdO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBhcnJheS5sZW5ndGgsIGE7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBhID0gYXJyYXlbaV07XHJcbiAgICAgICAgICAgIGlmICh2YWxpZGF0aW9uKGEpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIW11bHRpKSByZXR1cm4gYTtcclxuICAgICAgICAgICAgICAgIGVsc2UgYXJyLnB1c2goYSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAhbXVsdGkgPyBudWxsIDogYXJyO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBHZXQgdGhlIGluZGV4IG9mIHRoZSBhcmd1bWVudCB2YWx1ZSBpbiB0aGUgZWxlbWVudCBhcnJheVxyXG4gICAgICogQHBhcmFtIHtBcnJheXxIVE1MQ29sbGVjdGlvbnxOb2RlTGlzdH0gYXJyYXkgZWxlbWVudCBhcnJheVxyXG4gICAgICogQHBhcmFtIHtOb2RlfSBlbGVtZW50IFRoZSBlbGVtZW50IHRvIGZpbmQgaW5kZXhcclxuICAgICAqIEByZXR1cm5zIHtOdW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGdldEFycmF5SW5kZXg6IGZ1bmN0aW9uIChhcnJheSwgZWxlbWVudCkge1xyXG4gICAgICAgIGxldCBpZHggPSAtMTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gYXJyYXkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGFycmF5W2ldID09PSBlbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICBpZHggPSBpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBpZHg7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEdldCB0aGUgbmV4dCBpbmRleCBvZiB0aGUgYXJndW1lbnQgdmFsdWUgaW4gdGhlIGVsZW1lbnQgYXJyYXlcclxuICAgICAqIEBwYXJhbSB7QXJyYXl8SFRNTENvbGxlY3Rpb258Tm9kZUxpc3R9IGFycmF5IGVsZW1lbnQgYXJyYXlcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gaXRlbSBUaGUgZWxlbWVudCB0byBmaW5kIGluZGV4XHJcbiAgICAgKiBAcmV0dXJucyB7TnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBuZXh0SWR4OiBmdW5jdGlvbiAoYXJyYXksIGl0ZW0pIHtcclxuICAgICAgICBsZXQgaWR4ID0gdGhpcy5nZXRBcnJheUluZGV4KGFycmF5LCBpdGVtKTtcclxuICAgICAgICBpZiAoaWR4ID09PSAtMSkgcmV0dXJuIC0xO1xyXG4gICAgICAgIHJldHVybiBpZHggKyAxO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBHZXQgdGhlIHByZXZpb3VzIGluZGV4IG9mIHRoZSBhcmd1bWVudCB2YWx1ZSBpbiB0aGUgZWxlbWVudCBhcnJheVxyXG4gICAgICogQHBhcmFtIHtBcnJheXxIVE1MQ29sbGVjdGlvbnxOb2RlTGlzdH0gYXJyYXkgRWxlbWVudCBhcnJheVxyXG4gICAgICogQHBhcmFtIHtOb2RlfSBpdGVtIFRoZSBlbGVtZW50IHRvIGZpbmQgaW5kZXhcclxuICAgICAqIEByZXR1cm5zIHtOdW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHByZXZJZHg6IGZ1bmN0aW9uIChhcnJheSwgaXRlbSkge1xyXG4gICAgICAgIGxldCBpZHggPSB0aGlzLmdldEFycmF5SW5kZXgoYXJyYXksIGl0ZW0pO1xyXG4gICAgICAgIGlmIChpZHggPT09IC0xKSByZXR1cm4gLTE7XHJcbiAgICAgICAgcmV0dXJuIGlkeCAtIDE7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIGluZGV4IGNvbXBhcmVkIHRvIG90aGVyIHNpYmxpbmcgbm9kZXMuXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IG5vZGUgVGhlIE5vZGUgdG8gZmluZCBpbmRleFxyXG4gICAgICogQHJldHVybnMge051bWJlcn1cclxuICAgICAqL1xyXG4gICAgZ2V0UG9zaXRpb25JbmRleDogZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgICAgICBsZXQgaWR4ID0gMDtcclxuICAgICAgICB3aGlsZSAoKG5vZGUgPSBub2RlLnByZXZpb3VzU2libGluZykpIHtcclxuICAgICAgICAgICAgaWR4ICs9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpZHg7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIHBvc2l0aW9uIG9mIHRoZSBcIm5vZGVcIiBpbiB0aGUgXCJwYXJlbnROb2RlXCIgaW4gYSBudW1lcmljYWwgYXJyYXkuXHJcbiAgICAgKiBleCkgPHA+PHNwYW4+YWE8L3NwYW4+PHNwYW4+YmI8L3NwYW4+PC9wPiA6IGdldE5vZGVQYXRoKG5vZGU6IFwiYmJcIiwgcGFyZW50Tm9kZTogXCI8UD5cIikgLT4gWzEsIDBdXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IG5vZGUgVGhlIE5vZGUgdG8gZmluZCBwb3NpdGlvbiBwYXRoXHJcbiAgICAgKiBAcGFyYW0ge05vZGV8bnVsbH0gcGFyZW50Tm9kZSBQYXJlbnQgbm9kZS4gSWYgbnVsbCwgd3lzaXd5ZyBkaXYgYXJlYVxyXG4gICAgICogQHBhcmFtIHtPYmplY3R8bnVsbH0gX25ld09mZnNldHMgSWYgeW91IHNlbmQgYW4gb2JqZWN0IG9mIHRoZSBmb3JtIFwie3M6IDAsIGU6IDB9XCIsIHRoZSB0ZXh0IG5vZGVzIHRoYXQgYXJlIGF0dGFjaGVkIHRvZ2V0aGVyIGFyZSBtZXJnZWQgaW50byBvbmUsIGNlbnRlcmVkIG9uIHRoZSBcIm5vZGVcIiBhcmd1bWVudC5cclxuICAgICAqIFwiX25ld09mZnNldHMuc1wiIHN0b3JlcyB0aGUgbGVuZ3RoIG9mIHRoZSBjb21iaW5lZCBjaGFyYWN0ZXJzIGFmdGVyIFwibm9kZVwiIGFuZCBcIl9uZXdPZmZzZXRzLmVcIiBzdG9yZXMgdGhlIGxlbmd0aCBvZiB0aGUgY29tYmluZWQgY2hhcmFjdGVycyBiZWZvcmUgXCJub2RlXCIuXHJcbiAgICAgKiBEbyBub3QgdXNlIHVubGVzcyBhYnNvbHV0ZWx5IG5lY2Vzc2FyeS5cclxuICAgICAqIEByZXR1cm5zIHtBcnJheX1cclxuICAgICAqL1xyXG4gICAgZ2V0Tm9kZVBhdGg6IGZ1bmN0aW9uIChub2RlLCBwYXJlbnROb2RlLCBfbmV3T2Zmc2V0cykge1xyXG4gICAgICAgIGNvbnN0IHBhdGggPSBbXTtcclxuICAgICAgICBsZXQgZmluZHMgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLmdldFBhcmVudEVsZW1lbnQobm9kZSwgZnVuY3Rpb24gKGVsKSB7XHJcbiAgICAgICAgICAgIGlmIChlbCA9PT0gcGFyZW50Tm9kZSkgZmluZHMgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKGZpbmRzICYmICF0aGlzLmlzV3lzaXd5Z0RpdihlbCkpIHtcclxuICAgICAgICAgICAgICAgIC8vIG1lcmdlIHRleHQgbm9kZXNcclxuICAgICAgICAgICAgICAgIGlmIChfbmV3T2Zmc2V0cyAmJiBlbC5ub2RlVHlwZSA9PT0gMykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB0ZW1wID0gbnVsbCwgdGVtcFRleHQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIF9uZXdPZmZzZXRzLnMgPSBfbmV3T2Zmc2V0cy5lID0gMDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHByZXZpb3VzID0gZWwucHJldmlvdXNTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChwcmV2aW91cyAmJiBwcmV2aW91cy5ub2RlVHlwZSA9PT0gMykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wVGV4dCA9IHByZXZpb3VzLnRleHRDb250ZW50LnJlcGxhY2UodGhpcy56ZXJvV2lkdGhSZWdFeHAsICcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX25ld09mZnNldHMucyArPSB0ZW1wVGV4dC5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsLnRleHRDb250ZW50ID0gdGVtcFRleHQgKyBlbC50ZXh0Q29udGVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCA9IHByZXZpb3VzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91cyA9IHByZXZpb3VzLnByZXZpb3VzU2libGluZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKHRlbXApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG5leHQgPSBlbC5uZXh0U2libGluZztcclxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAobmV4dCAmJiBuZXh0Lm5vZGVUeXBlID09PSAzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBUZXh0ID0gbmV4dC50ZXh0Q29udGVudC5yZXBsYWNlKHRoaXMuemVyb1dpZHRoUmVnRXhwLCAnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9uZXdPZmZzZXRzLmUgKz0gdGVtcFRleHQubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbC50ZXh0Q29udGVudCArPSB0ZW1wVGV4dDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCA9IG5leHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgPSBuZXh0Lm5leHRTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUl0ZW0odGVtcCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIGluZGV4IHB1c2hcclxuICAgICAgICAgICAgICAgIHBhdGgucHVzaChlbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH0uYmluZCh0aGlzKSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIHBhdGgubWFwKHRoaXMuZ2V0UG9zaXRpb25JbmRleCkucmV2ZXJzZSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBub2RlIGluIHRoZSBsb2NhdGlvbiBvZiB0aGUgcGF0aCBhcnJheSBvYnRhaW5lZCBmcm9tIFwidXRpbC5nZXROb2RlUGF0aFwiLlxyXG4gICAgICogQHBhcmFtIHtBcnJheX0gb2Zmc2V0cyBQb3NpdGlvbiBhcnJheSwgYXJyYXkgb2J0YWluZWQgZnJvbSBcInV0aWwuZ2V0Tm9kZVBhdGhcIlxyXG4gICAgICogQHBhcmFtIHtOb2RlfSBwYXJlbnROb2RlIEJhc2UgcGFyZW50IGVsZW1lbnRcclxuICAgICAqIEByZXR1cm5zIHtOb2RlfVxyXG4gICAgICovXHJcbiAgICBnZXROb2RlRnJvbVBhdGg6IGZ1bmN0aW9uIChvZmZzZXRzLCBwYXJlbnROb2RlKSB7XHJcbiAgICAgICAgbGV0IGN1cnJlbnQgPSBwYXJlbnROb2RlO1xyXG4gICAgICAgIGxldCBub2RlcztcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IG9mZnNldHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgbm9kZXMgPSBjdXJyZW50LmNoaWxkTm9kZXM7XHJcbiAgICAgICAgICAgIGlmIChub2Rlcy5sZW5ndGggPT09IDApIGJyZWFrO1xyXG4gICAgICAgICAgICBpZiAobm9kZXMubGVuZ3RoIDw9IG9mZnNldHNbaV0pIHtcclxuICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBub2Rlc1tub2Rlcy5sZW5ndGggLSAxXTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBub2Rlc1tvZmZzZXRzW2ldXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENvbXBhcmVzIHRoZSBzdHlsZSBhbmQgY2xhc3MgZm9yIGVxdWFsIHZhbHVlcy5cclxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiBib3RoIGFyZSB0ZXh0IG5vZGVzLlxyXG4gICAgICogQHBhcmFtIHtOb2RlfSBhIE5vZGUgdG8gY29tcGFyZVxyXG4gICAgICogQHBhcmFtIHtOb2RlfSBiIE5vZGUgdG8gY29tcGFyZVxyXG4gICAgICogQHJldHVybnMge0Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzU2FtZUF0dHJpYnV0ZXM6IGZ1bmN0aW9uIChhLCBiKSB7XHJcbiAgICAgICAgaWYgKGEubm9kZVR5cGUgPT09IDMgJiYgYi5ub2RlVHlwZSA9PT0gMykgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgaWYgKGEubm9kZVR5cGUgPT09IDMgfHwgYi5ub2RlVHlwZSA9PT0gMykgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBjb25zdCBzdHlsZV9hID0gYS5zdHlsZTtcclxuICAgICAgICBjb25zdCBzdHlsZV9iID0gYi5zdHlsZTtcclxuICAgICAgICBsZXQgY29tcFN0eWxlID0gMDtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHN0eWxlX2EubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHN0eWxlX2Fbc3R5bGVfYVtpXV0gPT09IHN0eWxlX2Jbc3R5bGVfYVtpXV0pIGNvbXBTdHlsZSsrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgY2xhc3NfYSA9IGEuY2xhc3NMaXN0O1xyXG4gICAgICAgIGNvbnN0IGNsYXNzX2IgPSBiLmNsYXNzTGlzdDtcclxuICAgICAgICBjb25zdCByZWcgPSB0aGlzLl93LlJlZ0V4cDtcclxuICAgICAgICBsZXQgY29tcENsYXNzID0gMDtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGNsYXNzX2EubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHJlZygnKFxcc3xeKScgKyBjbGFzc19hW2ldICsgJyhcXHN8JCknKS50ZXN0KGNsYXNzX2IudmFsdWUpKSBjb21wQ2xhc3MrKztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAoY29tcFN0eWxlID09PSBzdHlsZV9iLmxlbmd0aCAmJiBjb21wU3R5bGUgPT09IHN0eWxlX2EubGVuZ3RoKSAmJiAoY29tcENsYXNzID09PSBjbGFzc19iLmxlbmd0aCAmJiBjb21wQ2xhc3MgPT09IGNsYXNzX2EubGVuZ3RoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ2hlY2sgdGhlIGxpbmUgZWxlbWVudCh1dGlsLmlzRm9ybWF0RWxlbWVudCkgaXMgZW1wdHkuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgRm9ybWF0IGVsZW1lbnQgbm9kZVxyXG4gICAgICogQHJldHVybnMge0Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzRW1wdHlMaW5lOiBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiAhZWxlbWVudCB8fCAhZWxlbWVudC5wYXJlbnROb2RlIHx8ICghZWxlbWVudC5xdWVyeVNlbGVjdG9yKCdJTUcsIElGUkFNRSwgQVVESU8sIFZJREVPLCBDQU5WQVMsIFRBQkxFJykgJiYgdGhpcy5vbmx5WmVyb1dpZHRoU3BhY2UoZWxlbWVudC50ZXh0Q29udGVudCkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBDaGVjayB0aGUgbm9kZSBpcyBhIGxpc3QgKG9sLCB1bClcclxuICAgICAqIEBwYXJhbSB7Tm9kZXxTdHJpbmd9IG5vZGUgVGhlIGVsZW1lbnQgb3IgZWxlbWVudCBuYW1lIHRvIGNoZWNrXHJcbiAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaXNMaXN0OiBmdW5jdGlvbiAobm9kZSkge1xyXG4gICAgICAgIHJldHVybiBub2RlICYmIC9eKE9MfFVMKSQvaS50ZXN0KHR5cGVvZiBub2RlID09PSAnc3RyaW5nJyA/IG5vZGUgOiBub2RlLm5vZGVOYW1lKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ2hlY2sgdGhlIG5vZGUgaXMgYSBsaXN0IGNlbGwgKGxpKVxyXG4gICAgICogQHBhcmFtIHtOb2RlfFN0cmluZ30gbm9kZSBUaGUgZWxlbWVudCBvciBlbGVtZW50IG5hbWUgdG8gY2hlY2tcclxuICAgICAqIEByZXR1cm5zIHtCb29sZWFufVxyXG4gICAgICovXHJcbiAgICBpc0xpc3RDZWxsOiBmdW5jdGlvbiAobm9kZSkge1xyXG4gICAgICAgIHJldHVybiBub2RlICYmIC9eTEkkL2kudGVzdCh0eXBlb2Ygbm9kZSA9PT0gJ3N0cmluZycgPyBub2RlIDogbm9kZS5ub2RlTmFtZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENoZWNrIHRoZSBub2RlIGlzIGEgdGFibGUgKHRhYmxlLCB0aGVhZCwgdGJvZHksIHRyLCB0aCwgdGQpXHJcbiAgICAgKiBAcGFyYW0ge05vZGV8U3RyaW5nfSBub2RlIFRoZSBlbGVtZW50IG9yIGVsZW1lbnQgbmFtZSB0byBjaGVja1xyXG4gICAgICogQHJldHVybnMge0Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzVGFibGU6IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICAgICAgcmV0dXJuIG5vZGUgJiYgL14oVEFCTEV8VEhFQUR8VEJPRFl8VFJ8VEh8VEQpJC9pLnRlc3QodHlwZW9mIG5vZGUgPT09ICdzdHJpbmcnID8gbm9kZSA6IG5vZGUubm9kZU5hbWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBDaGVjayB0aGUgbm9kZSBpcyBhIHRhYmxlIGNlbGwgKHRkLCB0aClcclxuICAgICAqIEBwYXJhbSB7Tm9kZXxTdHJpbmd9IG5vZGUgVGhlIGVsZW1lbnQgb3IgZWxlbWVudCBuYW1lIHRvIGNoZWNrXHJcbiAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaXNDZWxsOiBmdW5jdGlvbiAobm9kZSkge1xyXG4gICAgICAgIHJldHVybiBub2RlICYmIC9eKFREfFRIKSQvaS50ZXN0KHR5cGVvZiBub2RlID09PSAnc3RyaW5nJyA/IG5vZGUgOiBub2RlLm5vZGVOYW1lKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ2hlY2sgdGhlIG5vZGUgaXMgYSBicmVhayBub2RlIChCUilcclxuICAgICAqIEBwYXJhbSB7Tm9kZXxTdHJpbmd9IG5vZGUgVGhlIGVsZW1lbnQgb3IgZWxlbWVudCBuYW1lIHRvIGNoZWNrXHJcbiAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaXNCcmVhazogZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgICAgICByZXR1cm4gbm9kZSAmJiAvXkJSJC9pLnRlc3QodHlwZW9mIG5vZGUgPT09ICdzdHJpbmcnID8gbm9kZSA6IG5vZGUubm9kZU5hbWUpO1xyXG4gICAgfSxcclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ2hlY2sgdGhlIG5vZGUgaXMgYSBhbmNob3Igbm9kZSAoQSlcclxuICAgICAqIEBwYXJhbSB7Tm9kZXxTdHJpbmd9IG5vZGUgVGhlIGVsZW1lbnQgb3IgZWxlbWVudCBuYW1lIHRvIGNoZWNrXHJcbiAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaXNBbmNob3I6IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICAgICAgcmV0dXJuIG5vZGUgJiYgL15BJC9pLnRlc3QodHlwZW9mIG5vZGUgPT09ICdzdHJpbmcnID8gbm9kZSA6IG5vZGUubm9kZU5hbWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBDaGVjayB0aGUgbm9kZSBpcyBhIG1lZGlhIG5vZGUgKGltZywgaWZyYW1lLCBhdWRpbywgdmlkZW8sIGNhbnZhcylcclxuICAgICAqIEBwYXJhbSB7Tm9kZXxTdHJpbmd9IG5vZGUgVGhlIGVsZW1lbnQgb3IgZWxlbWVudCBuYW1lIHRvIGNoZWNrXHJcbiAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaXNNZWRpYTogZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgICAgICByZXR1cm4gbm9kZSAmJiAvXihJTUd8SUZSQU1FfEFVRElPfFZJREVPfENBTlZBUykkL2kudGVzdCh0eXBlb2Ygbm9kZSA9PT0gJ3N0cmluZycgPyBub2RlIDogbm9kZS5ub2RlTmFtZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENoZWNrcyBmb3IgbnVtZXJpYyAod2l0aCBkZWNpbWFsIHBvaW50KS5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0gdGV4dCBUZXh0IHN0cmluZyBvciBudW1iZXJcclxuICAgICAqIEByZXR1cm5zIHtCb29sZWFufVxyXG4gICAgICovXHJcbiAgICBpc051bWJlcjogZnVuY3Rpb24gKHRleHQpIHtcclxuICAgICAgICByZXR1cm4gISF0ZXh0ICYmIC9eLT9cXGQrKFxcLlxcZCspPyQvLnRlc3QodGV4dCArICcnKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gR2V0IGEgbnVtYmVyLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSB0ZXh0IFRleHQgc3RyaW5nIG9yIG51bWJlclxyXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IG1heERlYyBNYXhpbXVtIG51bWJlciBvZiBkZWNpbWFsIHBsYWNlcyAoLTEgOiBJbmZpbml0eSlcclxuICAgICAqIEByZXR1cm5zIHtOdW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGdldE51bWJlcjogZnVuY3Rpb24gKHRleHQsIG1heERlYykge1xyXG4gICAgICAgIGlmICghdGV4dCkgcmV0dXJuIDA7XHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IG51bWJlciA9ICh0ZXh0ICsgJycpLm1hdGNoKC8tP1xcZCsoXFwuXFxkKyk/Lyk7XHJcbiAgICAgICAgaWYgKCFudW1iZXIgfHwgIW51bWJlclswXSkgcmV0dXJuIDA7XHJcblxyXG4gICAgICAgIG51bWJlciA9IG51bWJlclswXTtcclxuICAgICAgICByZXR1cm4gbWF4RGVjIDwgMCA/IG51bWJlciAqIDEgOiBtYXhEZWMgPT09IDAgPyB0aGlzLl93Lk1hdGgucm91bmQobnVtYmVyICogMSkgOiAobnVtYmVyICogMSkudG9GaXhlZChtYXhEZWMpICogMTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gR2V0IGFsbCBcImNoaWxkcmVuXCIgb2YgdGhlIGFyZ3VtZW50IHZhbHVlIGVsZW1lbnQgKFdpdGhvdXQgdGV4dCBub2RlcylcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCBlbGVtZW50IHRvIGdldCBjaGlsZCBub2RlXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufG51bGx9IHZhbGlkYXRpb24gQ29uZGl0aW9uYWwgZnVuY3Rpb25cclxuICAgICAqIEByZXR1cm5zIHtBcnJheX1cclxuICAgICAqL1xyXG4gICAgZ2V0TGlzdENoaWxkcmVuOiBmdW5jdGlvbiAoZWxlbWVudCwgdmFsaWRhdGlvbikge1xyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gW107XHJcbiAgICAgICAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50LmNoaWxkcmVuIHx8IGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoID09PSAwKSByZXR1cm4gY2hpbGRyZW47XHJcblxyXG4gICAgICAgIHZhbGlkYXRpb24gPSB2YWxpZGF0aW9uIHx8IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRydWU7IH07XHJcblxyXG4gICAgICAgIChmdW5jdGlvbiByZWN1cnNpb25GdW5jKGN1cnJlbnQpIHtcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnQgIT09IGN1cnJlbnQgJiYgdmFsaWRhdGlvbihjdXJyZW50KSkge1xyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChjdXJyZW50KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCEhY3VycmVudC5jaGlsZHJlbikge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGN1cnJlbnQuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICByZWN1cnNpb25GdW5jKGN1cnJlbnQuY2hpbGRyZW5baV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkoZWxlbWVudCk7XHJcblxyXG4gICAgICAgIHJldHVybiBjaGlsZHJlbjtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gR2V0IGFsbCBcImNoaWxkTm9kZXNcIiBvZiB0aGUgYXJndW1lbnQgdmFsdWUgZWxlbWVudCAoSW5jbHVkZSB0ZXh0IG5vZGVzKVxyXG4gICAgICogQHBhcmFtIHtOb2RlfSBlbGVtZW50IGVsZW1lbnQgdG8gZ2V0IGNoaWxkIG5vZGVcclxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb258bnVsbH0gdmFsaWRhdGlvbiBDb25kaXRpb25hbCBmdW5jdGlvblxyXG4gICAgICogQHJldHVybnMge0FycmF5fVxyXG4gICAgICovXHJcbiAgICBnZXRMaXN0Q2hpbGROb2RlczogZnVuY3Rpb24gKGVsZW1lbnQsIHZhbGlkYXRpb24pIHtcclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IFtdO1xyXG4gICAgICAgIGlmICghZWxlbWVudCB8fCBlbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAwKSByZXR1cm4gY2hpbGRyZW47XHJcblxyXG4gICAgICAgIHZhbGlkYXRpb24gPSB2YWxpZGF0aW9uIHx8IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRydWU7IH07XHJcblxyXG4gICAgICAgIChmdW5jdGlvbiByZWN1cnNpb25GdW5jKGN1cnJlbnQpIHtcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnQgIT09IGN1cnJlbnQgJiYgdmFsaWRhdGlvbihjdXJyZW50KSkge1xyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChjdXJyZW50KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGN1cnJlbnQuY2hpbGROb2Rlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgcmVjdXJzaW9uRnVuYyhjdXJyZW50LmNoaWxkTm9kZXNbaV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkoZWxlbWVudCk7XHJcblxyXG4gICAgICAgIHJldHVybiBjaGlsZHJlbjtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgbnVtYmVyIG9mIHBhcmVudHMgbm9kZXMuXHJcbiAgICAgKiBcIjBcIiB3aGVuIHRoZSBwYXJlbnQgbm9kZSBpcyB0aGUgV1lTSVdZRyBhcmVhLlxyXG4gICAgICogXCItMVwiIHdoZW4gdGhlIGVsZW1lbnQgYXJndW1lbnQgaXMgdGhlIFdZU0lXWUcgYXJlYS5cclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gZWxlbWVudCBUaGUgZWxlbWVudCB0byBjaGVja1xyXG4gICAgICogQHJldHVybnMge051bWJlcn1cclxuICAgICAqL1xyXG4gICAgZ2V0RWxlbWVudERlcHRoOiBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgIGlmICghZWxlbWVudCB8fCB0aGlzLmlzV3lzaXd5Z0RpdihlbGVtZW50KSkgcmV0dXJuIC0xO1xyXG5cclxuICAgICAgICBsZXQgZGVwdGggPSAwO1xyXG4gICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XHJcblxyXG4gICAgICAgIHdoaWxlIChlbGVtZW50ICYmICF0aGlzLmlzV3lzaXd5Z0RpdihlbGVtZW50KSkge1xyXG4gICAgICAgICAgICBkZXB0aCArPSAxO1xyXG4gICAgICAgICAgICBlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGRlcHRoO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBDb21wYXJlcyB0d28gZWxlbWVudHMgdG8gZmluZCBhIGNvbW1vbiBhbmNlc3RvciwgYW5kIHJldHVybnMgdGhlIG9yZGVyIG9mIHRoZSB0d28gZWxlbWVudHMuXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IGEgTm9kZSB0byBjb21wYXJlLlxyXG4gICAgICogQHBhcmFtIHtOb2RlfSBiIE5vZGUgdG8gY29tcGFyZS5cclxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IHsgYW5jZXNzdG9yLCBhLCBiLCByZXN1bHQ6IChhID4gYiA/IDEgOiBhIDwgYiA/IC0xIDogMCkgfTtcclxuICAgICAqL1xyXG4gICAgY29tcGFyZUVsZW1lbnRzOiBmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgIGxldCBhTm9kZSA9IGEsIGJOb2RlID0gYjtcclxuICAgICAgICB3aGlsZSAoYU5vZGUgJiYgYk5vZGUgJiYgYU5vZGUucGFyZW50Tm9kZSAhPT0gYk5vZGUucGFyZW50Tm9kZSkge1xyXG4gICAgICAgICAgICBhTm9kZSA9IGFOb2RlLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgIGJOb2RlID0gYk5vZGUucGFyZW50Tm9kZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghYU5vZGUgfHwgIWJOb2RlKSByZXR1cm4geyBhbmNlc3RvcjogbnVsbCwgYTogYSwgYjogYiwgcmVzdWx0OiAwIH07XHJcblxyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gYU5vZGUucGFyZW50Tm9kZS5jaGlsZE5vZGVzO1xyXG4gICAgICAgIGNvbnN0IGFJbmRleCA9IHRoaXMuZ2V0QXJyYXlJbmRleChjaGlsZHJlbiwgYU5vZGUpO1xyXG4gICAgICAgIGNvbnN0IGJJbmRleCA9IHRoaXMuZ2V0QXJyYXlJbmRleChjaGlsZHJlbiwgYk5vZGUpO1xyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhbmNlc3RvcjogYU5vZGUucGFyZW50Tm9kZSxcclxuICAgICAgICAgICAgYTogYU5vZGUsXHJcbiAgICAgICAgICAgIGI6IGJOb2RlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IGFJbmRleCA+IGJJbmRleCA/IDEgOiBhSW5kZXggPCBiSW5kZXggPyAtMSA6IDBcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBHZXQgdGhlIHBhcmVudCBlbGVtZW50IG9mIHRoZSBhcmd1bWVudCB2YWx1ZS5cclxuICAgICAqIEEgdGFnIHRoYXQgc2F0aXNmaWVzIHRoZSBxdWVyeSBjb25kaXRpb24gaXMgaW1wb3J0ZWQuXHJcbiAgICAgKiBSZXR1cm5zIG51bGwgaWYgbm90IGZvdW5kLlxyXG4gICAgICogQHBhcmFtIHtOb2RlfSBlbGVtZW50IFJlZmVyZW5jZSBlbGVtZW50XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ3xGdW5jdGlvbn0gcXVlcnkgUXVlcnkgU3RyaW5nIChub2RlTmFtZSwgLmNsYXNzTmFtZSwgI0lELCA6bmFtZSkgb3IgdmFsaWRhdGlvbiBmdW5jdGlvbi5cclxuICAgICAqIE5vdCB1c2UgaXQgbGlrZSBqcXVlcnkuXHJcbiAgICAgKiBPbmx5IG9uZSBjb25kaXRpb24gY2FuIGJlIGVudGVyZWQgYXQgYSB0aW1lLlxyXG4gICAgICogQHJldHVybnMge0VsZW1lbnR8bnVsbH1cclxuICAgICAqL1xyXG4gICAgZ2V0UGFyZW50RWxlbWVudDogZnVuY3Rpb24gKGVsZW1lbnQsIHF1ZXJ5KSB7XHJcbiAgICAgICAgbGV0IGNoZWNrO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHF1ZXJ5ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIGNoZWNrID0gcXVlcnk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IGF0dHI7XHJcbiAgICAgICAgICAgIGlmICgvXlxcLi8udGVzdChxdWVyeSkpIHtcclxuICAgICAgICAgICAgICAgIGF0dHIgPSAnY2xhc3NOYW1lJztcclxuICAgICAgICAgICAgICAgIHF1ZXJ5ID0gcXVlcnkuc3BsaXQoJy4nKVsxXTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICgvXiMvLnRlc3QocXVlcnkpKSB7XHJcbiAgICAgICAgICAgICAgICBhdHRyID0gJ2lkJztcclxuICAgICAgICAgICAgICAgIHF1ZXJ5ID0gJ14nICsgcXVlcnkuc3BsaXQoJyMnKVsxXSArICckJztcclxuICAgICAgICAgICAgfSBlbHNlIGlmICgvXjovLnRlc3QocXVlcnkpKSB7XHJcbiAgICAgICAgICAgICAgICBhdHRyID0gJ25hbWUnO1xyXG4gICAgICAgICAgICAgICAgcXVlcnkgPSAnXicgKyBxdWVyeS5zcGxpdCgnOicpWzFdICsgJyQnO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYXR0ciA9ICdub2RlTmFtZSc7XHJcbiAgICAgICAgICAgICAgICBxdWVyeSA9ICdeJyArIHF1ZXJ5ICsgJyQnO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCByZWdFeHAgPSBuZXcgdGhpcy5fdy5SZWdFeHAocXVlcnksICdpJyk7XHJcbiAgICAgICAgICAgIGNoZWNrID0gZnVuY3Rpb24gKGVsKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVnRXhwLnRlc3QoZWxbYXR0cl0pO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgd2hpbGUgKGVsZW1lbnQgJiYgIWNoZWNrKGVsZW1lbnQpKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzV3lzaXd5Z0RpdihlbGVtZW50KSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBlbGVtZW50O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBHZXQgdGhlIGNoaWxkIGVsZW1lbnQgb2YgdGhlIGFyZ3VtZW50IHZhbHVlLlxyXG4gICAgICogQSB0YWcgdGhhdCBzYXRpc2ZpZXMgdGhlIHF1ZXJ5IGNvbmRpdGlvbiBpcyBpbXBvcnRlZC5cclxuICAgICAqIFJldHVybnMgbnVsbCBpZiBub3QgZm91bmQuXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IGVsZW1lbnQgUmVmZXJlbmNlIGVsZW1lbnRcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfEZ1bmN0aW9ufSBxdWVyeSBRdWVyeSBTdHJpbmcgKG5vZGVOYW1lLCAuY2xhc3NOYW1lLCAjSUQsIDpuYW1lKSBvciB2YWxpZGF0aW9uIGZ1bmN0aW9uLlxyXG4gICAgICogQHBhcmFtIHtCb29sZWFufSBsYXN0IElmIHRydWUgcmV0dXJucyB0aGUgbGFzdCBub2RlIGFtb25nIHRoZSBmb3VuZCBjaGlsZCBub2Rlcy4gKGRlZmF1bHQ6IGZpcnN0IG5vZGUpXHJcbiAgICAgKiBOb3QgdXNlIGl0IGxpa2UganF1ZXJ5LlxyXG4gICAgICogT25seSBvbmUgY29uZGl0aW9uIGNhbiBiZSBlbnRlcmVkIGF0IGEgdGltZS5cclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fG51bGx9XHJcbiAgICAgKi9cclxuICAgIGdldENoaWxkRWxlbWVudDogZnVuY3Rpb24gKGVsZW1lbnQsIHF1ZXJ5LCBsYXN0KSB7XHJcbiAgICAgICAgbGV0IGNoZWNrO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHF1ZXJ5ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIGNoZWNrID0gcXVlcnk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IGF0dHI7XHJcbiAgICAgICAgICAgIGlmICgvXlxcLi8udGVzdChxdWVyeSkpIHtcclxuICAgICAgICAgICAgICAgIGF0dHIgPSAnY2xhc3NOYW1lJztcclxuICAgICAgICAgICAgICAgIHF1ZXJ5ID0gcXVlcnkuc3BsaXQoJy4nKVsxXTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICgvXiMvLnRlc3QocXVlcnkpKSB7XHJcbiAgICAgICAgICAgICAgICBhdHRyID0gJ2lkJztcclxuICAgICAgICAgICAgICAgIHF1ZXJ5ID0gJ14nICsgcXVlcnkuc3BsaXQoJyMnKVsxXSArICckJztcclxuICAgICAgICAgICAgfSBlbHNlIGlmICgvXjovLnRlc3QocXVlcnkpKSB7XHJcbiAgICAgICAgICAgICAgICBhdHRyID0gJ25hbWUnO1xyXG4gICAgICAgICAgICAgICAgcXVlcnkgPSAnXicgKyBxdWVyeS5zcGxpdCgnOicpWzFdICsgJyQnO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYXR0ciA9ICdub2RlTmFtZSc7XHJcbiAgICAgICAgICAgICAgICBxdWVyeSA9ICdeJyArIChxdWVyeSA9PT0gJ3RleHQnID8gJyMnICsgcXVlcnkgOiBxdWVyeSkgKyAnJCc7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHJlZ0V4cCA9IG5ldyB0aGlzLl93LlJlZ0V4cChxdWVyeSwgJ2knKTtcclxuICAgICAgICAgICAgY2hlY2sgPSBmdW5jdGlvbiAoZWwpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZWdFeHAudGVzdChlbFthdHRyXSk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBjaGlsZExpc3QgPSB0aGlzLmdldExpc3RDaGlsZE5vZGVzKGVsZW1lbnQsIGZ1bmN0aW9uIChjdXJyZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjaGVjayhjdXJyZW50KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNoaWxkTGlzdFtsYXN0ID8gY2hpbGRMaXN0Lmxlbmd0aCAtIDEgOiAwXTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gMS4gVGhlIGZpcnN0IG5vZGUgb2YgYWxsIHRoZSBjaGlsZCBub2RlcyBvZiB0aGUgXCJmaXJzdFwiIGVsZW1lbnQgaXMgcmV0dXJuZWQuXHJcbiAgICAgKiAyLiBUaGUgbGFzdCBub2RlIG9mIGFsbCB0aGUgY2hpbGQgbm9kZXMgb2YgdGhlIFwibGFzdFwiIGVsZW1lbnQgaXMgcmV0dXJuZWQuXHJcbiAgICAgKiAzLiBXaGVuIHRoZXJlIGlzIG5vIFwibGFzdFwiIGVsZW1lbnQsIHRoZSBmaXJzdCBhbmQgbGFzdCBub2RlcyBvZiBhbGwgdGhlIGNoaWxkcmVuIG9mIHRoZSBcImZpcnN0XCIgZWxlbWVudCBhcmUgcmV0dXJuZWQuXHJcbiAgICAgKiB7IHNjOiBcImZpcnN0XCIsIGVjOiBcImxhc3RcIiB9XHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IGZpcnN0IEZpcnN0IGVsZW1lbnRcclxuICAgICAqIEBwYXJhbSB7Tm9kZXxudWxsfSBsYXN0IExhc3QgZWxlbWVudFxyXG4gICAgICogQHJldHVybnMge09iamVjdH1cclxuICAgICAqL1xyXG4gICAgZ2V0RWRnZUNoaWxkTm9kZXM6IGZ1bmN0aW9uIChmaXJzdCwgbGFzdCkge1xyXG4gICAgICAgIGlmICghZmlyc3QpIHJldHVybjtcclxuICAgICAgICBpZiAoIWxhc3QpIGxhc3QgPSBmaXJzdDtcclxuXHJcbiAgICAgICAgd2hpbGUgKGZpcnN0ICYmIGZpcnN0Lm5vZGVUeXBlID09PSAxICYmIGZpcnN0LmNoaWxkTm9kZXMubGVuZ3RoID4gMCAmJiAhdGhpcy5pc0JyZWFrKGZpcnN0KSkgZmlyc3QgPSBmaXJzdC5maXJzdENoaWxkO1xyXG4gICAgICAgIHdoaWxlIChsYXN0ICYmIGxhc3Qubm9kZVR5cGUgPT09IDEgJiYgbGFzdC5jaGlsZE5vZGVzLmxlbmd0aCA+IDAgJiYgICF0aGlzLmlzQnJlYWsobGFzdCkpIGxhc3QgPSBsYXN0Lmxhc3RDaGlsZDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgc2M6IGZpcnN0LFxyXG4gICAgICAgICAgICBlYzogbGFzdCB8fCBmaXJzdFxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIHBvc2l0aW9uIG9mIHRoZSBsZWZ0IGFuZCB0b3Agb2YgYXJndW1lbnQuIHtsZWZ0OjAsIHRvcDowfVxyXG4gICAgICogQHBhcmFtIHtOb2RlfSBlbGVtZW50IFRhcmdldCBub2RlXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR8bnVsbH0gd3lzaXd5Z0ZyYW1lIFdoZW4gdXNlIGlmcmFtZSBvcHRpb24sIGlmcmFtZSBvYmplY3Qgc2hvdWxkIGJlIHNlbnQgKGNvbnRleHQuZWxlbWVudC53eXNpd3lnRnJhbWUpXHJcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fVxyXG4gICAgICovXHJcbiAgICBnZXRPZmZzZXQ6IGZ1bmN0aW9uIChlbGVtZW50LCB3eXNpd3lnRnJhbWUpIHtcclxuICAgICAgICBsZXQgb2Zmc2V0TGVmdCA9IDA7XHJcbiAgICAgICAgbGV0IG9mZnNldFRvcCA9IDA7XHJcbiAgICAgICAgbGV0IG9mZnNldEVsZW1lbnQgPSBlbGVtZW50Lm5vZGVUeXBlID09PSAzID8gZWxlbWVudC5wYXJlbnRFbGVtZW50IDogZWxlbWVudDtcclxuICAgICAgICBjb25zdCB3eXNpd3lnID0gdGhpcy5nZXRQYXJlbnRFbGVtZW50KGVsZW1lbnQsIHRoaXMuaXNXeXNpd3lnRGl2LmJpbmQodGhpcykpO1xyXG5cclxuICAgICAgICB3aGlsZSAob2Zmc2V0RWxlbWVudCAmJiAhdGhpcy5oYXNDbGFzcyhvZmZzZXRFbGVtZW50LCAnc2UtY29udGFpbmVyJykgJiYgb2Zmc2V0RWxlbWVudCAhPT0gd3lzaXd5Zykge1xyXG4gICAgICAgICAgICBvZmZzZXRMZWZ0ICs9IG9mZnNldEVsZW1lbnQub2Zmc2V0TGVmdDtcclxuICAgICAgICAgICAgb2Zmc2V0VG9wICs9IG9mZnNldEVsZW1lbnQub2Zmc2V0VG9wO1xyXG4gICAgICAgICAgICBvZmZzZXRFbGVtZW50ID0gb2Zmc2V0RWxlbWVudC5vZmZzZXRQYXJlbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBpZnJhbWUgPSB3eXNpd3lnRnJhbWUgJiYgL2lmcmFtZS9pLnRlc3Qod3lzaXd5Z0ZyYW1lLm5vZGVOYW1lKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgbGVmdDogb2Zmc2V0TGVmdCArIChpZnJhbWUgPyB3eXNpd3lnRnJhbWUucGFyZW50RWxlbWVudC5vZmZzZXRMZWZ0IDogMCksXHJcbiAgICAgICAgICAgIHRvcDogKG9mZnNldFRvcCAtICh3eXNpd3lnID8gd3lzaXd5Zy5zY3JvbGxUb3AgOiAwKSkgKyAoaWZyYW1lID8gd3lzaXd5Z0ZyYW1lLnBhcmVudEVsZW1lbnQub2Zmc2V0VG9wIDogMClcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBJdCBjb21wYXJlcyB0aGUgc3RhcnQgYW5kIGVuZCBpbmRleGVzIG9mIFwiYVwiIGFuZCBcImJcIiBhbmQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIG92ZXJsYXBwaW5nIGluZGV4ZXMgaW4gdGhlIHJhbmdlLlxyXG4gICAgICogZXgpIDEsIDUsIDQsIDYgPT4gXCIyXCIgKDQgfiA1KVxyXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IGFTdGFydCBTdGFydCBpbmRleCBvZiBcImFcIlxyXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IGFFbmQgRW5kIGluZGV4IG9mIFwiYVwiXHJcbiAgICAgKiBAcGFyYW0ge051bWJlcn0gYlN0YXJ0IFN0YXJ0IGluZGV4IG9mIFwiYlwiXHJcbiAgICAgKiBAcGFyYW0ge051bWJlcn0gYkVuZCBTdGFydCBpbmRleCBvZiBcImJcIlxyXG4gICAgICogQHJldHVybnMge051bWJlcn1cclxuICAgICAqL1xyXG4gICAgZ2V0T3ZlcmxhcFJhbmdlQXRJbmRleDogZnVuY3Rpb24gKGFTdGFydCwgYUVuZCwgYlN0YXJ0LCBiRW5kKSB7XHJcbiAgICAgICAgaWYgKGFTdGFydCA8PSBiRW5kID8gYUVuZCA8IGJTdGFydCA6IGFFbmQgPiBiU3RhcnQpIHJldHVybiAwO1xyXG5cclxuICAgICAgICBjb25zdCBvdmVybGFwID0gKGFTdGFydCA+IGJTdGFydCA/IGFTdGFydCA6IGJTdGFydCkgLSAoYUVuZCA8IGJFbmQgPyBhRW5kIDogYkVuZCk7XHJcbiAgICAgICAgcmV0dXJuIChvdmVybGFwIDwgMCA/IG92ZXJsYXAgKiAtMSA6IG92ZXJsYXApICsgMTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gU2V0IHRoZSB0ZXh0IGNvbnRlbnQgdmFsdWUgb2YgdGhlIGFyZ3VtZW50IHZhbHVlIGVsZW1lbnRcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gZWxlbWVudCBFbGVtZW50IHRvIHJlcGxhY2UgdGV4dCBjb250ZW50XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdHh0IFRleHQgdG8gYmUgYXBwbGllZFxyXG4gICAgICovXHJcbiAgICBjaGFuZ2VUeHQ6IGZ1bmN0aW9uIChlbGVtZW50LCB0eHQpIHtcclxuICAgICAgICBpZiAoIWVsZW1lbnQgfHwgIXR4dCkgcmV0dXJuO1xyXG4gICAgICAgIGVsZW1lbnQudGV4dENvbnRlbnQgPSB0eHQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFJlcGxhY2UgZWxlbWVudFxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IFRhcmdldCBlbGVtZW50XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ3xFbGVtZW50fSBuZXdFbGVtZW50IFN0cmluZyBvciBlbGVtZW50IG9mIHRoZSBuZXcgZWxlbWVudCB0byBhcHBseVxyXG4gICAgICovXHJcbiAgICBjaGFuZ2VFbGVtZW50OiBmdW5jdGlvbiAoZWxlbWVudCwgbmV3RWxlbWVudCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgbmV3RWxlbWVudCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnQub3V0ZXJIVE1MKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50Lm91dGVySFRNTCA9IG5ld0VsZW1lbnQ7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkb2MgPSB0aGlzLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xyXG4gICAgICAgICAgICAgICAgZG9jLmlubmVySFRNTCA9IG5ld0VsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50ID0gZG9jLmZpcnN0Q2hpbGQ7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50LnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKG5ld0VsZW1lbnQsIGVsZW1lbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChuZXdFbGVtZW50Lm5vZGVUeXBlID09PSAxKSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQobmV3RWxlbWVudCwgZWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBTZXQgc3R5bGUsIGlmIGFsbCBzdHlsZXMgYXJlIGRlbGV0ZWQsIHRoZSBzdHlsZSBwcm9wZXJ0aWVzIGFyZSBkZWxldGVkLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IEVsZW1lbnQgdG8gc2V0IHN0eWxlXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gc3R5bGVOYW1lIFN0eWxlIGF0dHJpYnV0ZSBuYW1lIChtYXJnaW5MZWZ0LCB0ZXh0QWxpZ24uLi4pXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ3xOdW1iZXJ9IHZhbHVlIFN0eWxlIHZhbHVlXHJcbiAgICAgKi9cclxuICAgIHNldFN0eWxlOiBmdW5jdGlvbiAoZWxlbWVudCwgc3R5bGVOYW1lLCB2YWx1ZSkge1xyXG4gICAgICAgIGVsZW1lbnQuc3R5bGVbc3R5bGVOYW1lXSA9IHZhbHVlO1xyXG5cclxuICAgICAgICBpZiAoIXZhbHVlICYmICFlbGVtZW50LnN0eWxlLmNzc1RleHQpIHtcclxuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ3N0eWxlJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBEZXRlcm1pbmUgd2hldGhlciBhbnkgb2YgdGhlIG1hdGNoZWQgZWxlbWVudHMgYXJlIGFzc2lnbmVkIHRoZSBnaXZlbiBjbGFzc1xyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IEVsZW1lbnRzIHRvIHNlYXJjaCBjbGFzcyBuYW1lXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gY2xhc3NOYW1lIENsYXNzIG5hbWUgdG8gc2VhcmNoIGZvclxyXG4gICAgICogQHJldHVybnMge0Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGhhc0NsYXNzOiBmdW5jdGlvbiAoZWxlbWVudCwgY2xhc3NOYW1lKSB7XHJcbiAgICAgICAgaWYgKCFlbGVtZW50KSByZXR1cm47XHJcblxyXG4gICAgICAgIHJldHVybiAobmV3IHRoaXMuX3cuUmVnRXhwKGNsYXNzTmFtZSkpLnRlc3QoZWxlbWVudC5jbGFzc05hbWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBcHBlbmQgdGhlIGNsYXNzTmFtZSB2YWx1ZSBvZiB0aGUgYXJndW1lbnQgdmFsdWUgZWxlbWVudFxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IEVsZW1lbnRzIHRvIGFkZCBjbGFzcyBuYW1lXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gY2xhc3NOYW1lIENsYXNzIG5hbWUgdG8gYmUgYWRkXHJcbiAgICAgKi9cclxuICAgIGFkZENsYXNzOiBmdW5jdGlvbiAoZWxlbWVudCwgY2xhc3NOYW1lKSB7XHJcbiAgICAgICAgaWYgKCFlbGVtZW50KSByZXR1cm47XHJcblxyXG4gICAgICAgIGNvbnN0IGNoZWNrID0gbmV3IHRoaXMuX3cuUmVnRXhwKCcoXFxcXHN8XiknICsgY2xhc3NOYW1lICsgJyhcXFxcc3wkKScpO1xyXG4gICAgICAgIGlmIChjaGVjay50ZXN0KGVsZW1lbnQuY2xhc3NOYW1lKSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSArPSAoZWxlbWVudC5jbGFzc05hbWUubGVuZ3RoID4gMCA/ICcgJyA6ICcnKSArIGNsYXNzTmFtZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gRGVsZXRlIHRoZSBjbGFzc05hbWUgdmFsdWUgb2YgdGhlIGFyZ3VtZW50IHZhbHVlIGVsZW1lbnRcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCBFbGVtZW50cyB0byByZW1vdmUgY2xhc3MgbmFtZVxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGNsYXNzTmFtZSBDbGFzcyBuYW1lIHRvIGJlIHJlbW92ZVxyXG4gICAgICovXHJcbiAgICByZW1vdmVDbGFzczogZnVuY3Rpb24gKGVsZW1lbnQsIGNsYXNzTmFtZSkge1xyXG4gICAgICAgIGlmICghZWxlbWVudCkgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCBjaGVjayA9IG5ldyB0aGlzLl93LlJlZ0V4cCgnKFxcXFxzfF4pJyArIGNsYXNzTmFtZSArICcoXFxcXHN8JCknKTtcclxuICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9IGVsZW1lbnQuY2xhc3NOYW1lLnJlcGxhY2UoY2hlY2ssICcgJykudHJpbSgpO1xyXG5cclxuICAgICAgICBpZiAoIWVsZW1lbnQuY2xhc3NOYW1lLnRyaW0oKSkgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2NsYXNzJyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFyZ3VtZW50IHZhbHVlIElmIHRoZXJlIGlzIG5vIGNsYXNzIG5hbWUsIGluc2VydCBpdCBhbmQgZGVsZXRlIHRoZSBjbGFzcyBuYW1lIGlmIGl0IGV4aXN0c1xyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IEVsZW1lbnRzIHRvIHJlcGxhY2UgY2xhc3MgbmFtZVxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGNsYXNzTmFtZSBDbGFzcyBuYW1lIHRvIGJlIGNoYW5nZVxyXG4gICAgICogQHJldHVybnMge0Jvb2xlYW58dW5kZWZpbmVkfVxyXG4gICAgICovXHJcbiAgICB0b2dnbGVDbGFzczogZnVuY3Rpb24gKGVsZW1lbnQsIGNsYXNzTmFtZSkge1xyXG4gICAgICAgIGlmICghZWxlbWVudCkgcmV0dXJuO1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgY29uc3QgY2hlY2sgPSBuZXcgdGhpcy5fdy5SZWdFeHAoJyhcXFxcc3xeKScgKyBjbGFzc05hbWUgKyAnKFxcXFxzfCQpJyk7XHJcbiAgICAgICAgaWYgKGNoZWNrLnRlc3QoZWxlbWVudC5jbGFzc05hbWUpKSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gZWxlbWVudC5jbGFzc05hbWUucmVwbGFjZShjaGVjaywgJyAnKS50cmltKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZWxlbWVudC5jbGFzc05hbWUgKz0gJyAnICsgY2xhc3NOYW1lO1xyXG4gICAgICAgICAgICByZXN1bHQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFlbGVtZW50LmNsYXNzTmFtZS50cmltKCkpIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdjbGFzcycpO1xyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBJbiB0aGUgcHJlZGVmaW5lZCBjb2RlIHZpZXcgbW9kZSwgdGhlIGJ1dHRvbnMgZXhjZXB0IHRoZSBleGVjdXRhYmxlIGJ1dHRvbiBhcmUgY2hhbmdlZCB0byB0aGUgJ2Rpc2FibGVkJyBzdGF0ZS5cclxuICAgICAqIGNvcmUuY29kZVZpZXdEaXNhYmxlZEJ1dHRvbnMgKEFuIGFycmF5IG9mIGJ1dHRvbnMgd2hvc2UgY2xhc3MgbmFtZSBpcyBub3QgXCJzZS1jb2RlLXZpZXctZW5hYmxlZFwiKVxyXG4gICAgICogY29yZS5yZXNpemluZ0Rpc2FibGVkQnV0dG9ucyAoQW4gYXJyYXkgb2YgYnV0dG9ucyB3aG9zZSBjbGFzcyBuYW1lIGlzIG5vdCBcInNlLXJlc2l6aW5nLWVuYWJsZWRcIilcclxuICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gZGlzYWJsZWQgRGlzYWJsZWQgdmFsdWVcclxuICAgICAqIEBwYXJhbSB7QXJyYXl8SFRNTENvbGxlY3Rpb258Tm9kZUxpc3R9IGJ1dHRvbkxpc3QgQnV0dG9uIGFycmF5XHJcbiAgICAgKi9cclxuICAgIHNldERpc2FibGVkQnV0dG9uczogZnVuY3Rpb24gKGRpc2FibGVkLCBidXR0b25MaXN0KSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGJ1dHRvbkxpc3QubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgYnV0dG9uTGlzdFtpXS5kaXNhYmxlZCA9IGRpc2FibGVkO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gRGVsZXRlIGFyZ3VtZW51IHZhbHVlIGVsZW1lbnRcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gaXRlbSBOb2RlIHRvIGJlIHJlbW92ZVxyXG4gICAgICovXHJcbiAgICByZW1vdmVJdGVtOiBmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgIGlmICghaXRlbSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBpZih0eXBlb2YgaXRlbS5yZW1vdmUgPT09ICdmdW5jdGlvbicpIGl0ZW0ucmVtb3ZlKCk7XHJcbiAgICAgICAgZWxzZSBpZiAoaXRlbS5wYXJlbnROb2RlKSBpdGVtLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaXRlbSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIERlbGV0ZSBhbGwgcGFyZW50IG5vZGVzIHRoYXQgbWF0Y2ggdGhlIGNvbmRpdGlvbi5cclxuICAgICAqIFJldHVybnMgYW4ge3NjOiBwcmV2aW91c1NpYmxpbmcsIGVjOiBuZXh0U2libGluZ30odGhlIGRlbGV0ZWQgbm9kZSByZWZlcmVuY2UpIG9yIG51bGwuXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IGl0ZW0gTm9kZSB0byBiZSByZW1vdmVcclxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb258bnVsbH0gdmFsaWRhdGlvbiBWYWxpZGF0aW9uIGZ1bmN0aW9uLiBkZWZhdWx0KERlbGV0ZWQgaWYgaXQgb25seSBoYXZlIGJyZWFrTGluZSBhbmQgYmxhbmtzKVxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fG51bGx9IHN0b3BQYXJlbnQgU3RvcCB3aGVuIHRoZSBwYXJlbnQgbm9kZSByZWFjaGVzIHN0b3BQYXJlbnRcclxuICAgICAqIEByZXR1cm5zIHtPYmplY3R8bnVsbH0ge3NjOiBwcmV2aW91c1NpYmxpbmcsIGVjOiBuZXh0U2libGluZ31cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlSXRlbUFsbFBhcmVudHM6IGZ1bmN0aW9uIChpdGVtLCB2YWxpZGF0aW9uLCBzdG9wUGFyZW50KSB7XHJcbiAgICAgICAgaWYgKCFpdGVtKSByZXR1cm4gbnVsbDtcclxuICAgICAgICBsZXQgY2MgPSBudWxsO1xyXG4gICAgICAgIGlmICghdmFsaWRhdGlvbikge1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9uID0gZnVuY3Rpb24gKGN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50ID09PSBzdG9wUGFyZW50IHx8IHRoaXMuaXNDb21wb25lbnQoY3VycmVudCkpIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRleHQgPSBjdXJyZW50LnRleHRDb250ZW50LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0Lmxlbmd0aCA9PT0gMCB8fCAvXihcXG58XFx1MjAwQikrJC8udGVzdCh0ZXh0KTtcclxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgKGZ1bmN0aW9uIHJlY3Vyc2lvbkZ1bmMgKGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgaWYgKCF1dGlsLmlzV3lzaXd5Z0RpdihlbGVtZW50KSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudCAmJiB2YWxpZGF0aW9uKGVsZW1lbnQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2MgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjOiBlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVjOiBlbGVtZW50Lm5leHRFbGVtZW50U2libGluZ1xyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlY3Vyc2lvbkZ1bmMocGFyZW50KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0oaXRlbSkpO1xyXG5cclxuICAgICAgICByZXR1cm4gY2M7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIERldGFjaCBOZXN0ZWQgYWxsIG5lc3RlZCBsaXN0cyB1bmRlciB0aGUgXCJiYXNlTm9kZVwiLlxyXG4gICAgICogUmV0dXJucyBhIGxpc3Qgd2l0aCBuZXN0ZWQgcmVtb3ZlZC5cclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gYmFzZU5vZGUgRWxlbWVudCBvbiB3aGljaCB0byBiYXNlLlxyXG4gICAgICogQHBhcmFtIHtCb29sZWFufSBhbGwgSWYgdHJ1ZSwgaXQgYWxzbyBkZXRhY2ggYWxsIG5lc3RlZCBsaXN0cyBvZiBhIHJldHVybmVkIGxpc3QuXHJcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudH1cclxuICAgICAqL1xyXG4gICAgZGV0YWNoTmVzdGVkTGlzdDogZnVuY3Rpb24gKGJhc2VOb2RlLCBhbGwpIHtcclxuICAgICAgICBjb25zdCByTm9kZSA9IHRoaXMuX2RlbGV0ZU5lc3RlZExpc3QoYmFzZU5vZGUpO1xyXG4gICAgICAgIGxldCByYW5nZUVsZW1lbnQsIGNOb2RlcztcclxuXHJcbiAgICAgICAgaWYgKHJOb2RlKSB7XHJcbiAgICAgICAgICAgIHJhbmdlRWxlbWVudCA9IHJOb2RlLmNsb25lTm9kZShmYWxzZSk7XHJcbiAgICAgICAgICAgIGNOb2RlcyA9IHJOb2RlLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRQb3NpdGlvbkluZGV4KGJhc2VOb2RlKTtcclxuICAgICAgICAgICAgd2hpbGUgKGNOb2Rlc1tpbmRleF0pIHtcclxuICAgICAgICAgICAgICAgIHJhbmdlRWxlbWVudC5hcHBlbmRDaGlsZChjTm9kZXNbaW5kZXhdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJhbmdlRWxlbWVudCA9IGJhc2VOb2RlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICBsZXQgckNoaWxkcmVuO1xyXG4gICAgICAgIGlmICghYWxsKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRlcHRoID0gdGhpcy5nZXRFbGVtZW50RGVwdGgoYmFzZU5vZGUpICsgMjtcclxuICAgICAgICAgICAgckNoaWxkcmVuID0gdGhpcy5nZXRMaXN0Q2hpbGRyZW4oYmFzZU5vZGUsIGZ1bmN0aW9uIChjdXJyZW50KSB7IHJldHVybiB0aGlzLmlzTGlzdENlbGwoY3VycmVudCkgJiYgIWN1cnJlbnQucHJldmlvdXNFbGVtZW50U2libGluZyAmJiB0aGlzLmdldEVsZW1lbnREZXB0aChjdXJyZW50KSA9PT0gZGVwdGg7IH0uYmluZCh0aGlzKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgckNoaWxkcmVuID0gdGhpcy5nZXRMaXN0Q2hpbGRyZW4ocmFuZ2VFbGVtZW50LCBmdW5jdGlvbiAoY3VycmVudCkgeyByZXR1cm4gdGhpcy5pc0xpc3RDZWxsKGN1cnJlbnQpICYmICFjdXJyZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmc7IH0uYmluZCh0aGlzKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gckNoaWxkcmVuLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2RlbGV0ZU5lc3RlZExpc3QockNoaWxkcmVuW2ldKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKHJOb2RlKSB7XHJcbiAgICAgICAgICAgIHJOb2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHJhbmdlRWxlbWVudCwgck5vZGUubmV4dFNpYmxpbmcpO1xyXG4gICAgICAgICAgICBpZiAoY05vZGVzICYmIGNOb2Rlcy5sZW5ndGggPT09IDApIHRoaXMucmVtb3ZlSXRlbShyTm9kZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmFuZ2VFbGVtZW50ID09PSBiYXNlTm9kZSA/IHJhbmdlRWxlbWVudC5wYXJlbnROb2RlIDogcmFuZ2VFbGVtZW50O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBTdWIgZnVuY3Rpb24gb2YgdXRpbC5kZXRhY2hOZXN0ZWRMaXN0IG1ldGhvZC5cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIF9kZWxldGVOZXN0ZWRMaXN0OiBmdW5jdGlvbiAoYmFzZU5vZGUpIHtcclxuICAgICAgICBjb25zdCBiYXNlUGFyZW50ID0gYmFzZU5vZGUucGFyZW50Tm9kZTtcclxuICAgICAgICBsZXQgc2libGluZyA9IGJhc2VQYXJlbnQ7XHJcbiAgICAgICAgbGV0IHBhcmVudCA9IHNpYmxpbmcucGFyZW50Tm9kZTtcclxuICAgICAgICBsZXQgbGlTaWJsaW5nLCBsaVBhcmVudCwgY2hpbGQsIGluZGV4LCBjO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHdoaWxlICh0aGlzLmlzTGlzdENlbGwocGFyZW50KSkge1xyXG4gICAgICAgICAgICBpbmRleCA9IHRoaXMuZ2V0UG9zaXRpb25JbmRleChiYXNlTm9kZSk7XHJcbiAgICAgICAgICAgIGxpU2libGluZyA9IHBhcmVudC5uZXh0RWxlbWVudFNpYmxpbmc7XHJcbiAgICAgICAgICAgIGxpUGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgIGNoaWxkID0gc2libGluZztcclxuICAgICAgICAgICAgd2hpbGUoY2hpbGQpIHtcclxuICAgICAgICAgICAgICAgIHNpYmxpbmcgPSBzaWJsaW5nLm5leHRTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNMaXN0KGNoaWxkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGMgPSBjaGlsZC5jaGlsZE5vZGVzO1xyXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChjW2luZGV4XSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaVBhcmVudC5pbnNlcnRCZWZvcmUoY1tpbmRleF0sIGxpU2libGluZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjLmxlbmd0aCA9PT0gMCkgdGhpcy5yZW1vdmVJdGVtKGNoaWxkKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGlQYXJlbnQuYXBwZW5kQ2hpbGQoY2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2hpbGQgPSBzaWJsaW5nO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNpYmxpbmcgPSBsaVBhcmVudDtcclxuICAgICAgICAgICAgcGFyZW50ID0gbGlQYXJlbnQucGFyZW50Tm9kZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChiYXNlUGFyZW50LmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkgdGhpcy5yZW1vdmVJdGVtKGJhc2VQYXJlbnQpO1xyXG5cclxuICAgICAgICByZXR1cm4gbGlQYXJlbnQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFNwbGl0IGFsbCB0YWdzIGJhc2VkIG9uIFwiYmFzZU5vZGVcIlxyXG4gICAgICogUmV0dXJucyB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBzcGxpdGVkIHRhZy5cclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gYmFzZU5vZGUgRWxlbWVudCBvciB0ZXh0IG5vZGUgb24gd2hpY2ggdG8gYmFzZVxyXG4gICAgICogQHBhcmFtIHtOdW1iZXJ8bnVsbH0gb2Zmc2V0IFRleHQgb2Zmc2V0IG9mIFwiYmFzZU5vZGVcIiAoT25seSB2YWxpZCB3aGVuIFwiYmFzZU5vZGVcIiBpcyBhIHRleHQgbm9kZSlcclxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSBkZXB0aCBUaGUgbmVzdGluZyBkZXB0aCBvZiB0aGUgZWxlbWVudCBiZWluZyBzcGxpdC4gKGRlZmF1bHQ6IDApXHJcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudH1cclxuICAgICAqL1xyXG4gICAgc3BsaXRFbGVtZW50OiBmdW5jdGlvbiAoYmFzZU5vZGUsIG9mZnNldCwgZGVwdGgpIHtcclxuICAgICAgICBjb25zdCBicCA9IGJhc2VOb2RlLnBhcmVudE5vZGU7XHJcbiAgICAgICAgbGV0IGluZGV4ID0gMCwgbmV3RWwsIGNoaWxkcmVuLCB0ZW1wO1xyXG4gICAgICAgIGxldCBuZXh0ID0gdHJ1ZTtcclxuICAgICAgICBpZiAoIWRlcHRoIHx8IGRlcHRoIDwgMCkgZGVwdGggPSAwO1xyXG5cclxuICAgICAgICBpZiAoYmFzZU5vZGUubm9kZVR5cGUgPT09IDMpIHtcclxuICAgICAgICAgICAgaW5kZXggPSB0aGlzLmdldFBvc2l0aW9uSW5kZXgoYmFzZU5vZGUpO1xyXG4gICAgICAgICAgICBpZiAob2Zmc2V0ID49IDApIHtcclxuICAgICAgICAgICAgICAgIGJhc2VOb2RlLnNwbGl0VGV4dChvZmZzZXQpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYWZ0ZXIgPSB0aGlzLmdldE5vZGVGcm9tUGF0aChbaW5kZXggKyAxXSwgYnApO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub25seVplcm9XaWR0aFNwYWNlKGFmdGVyKSkgYWZ0ZXIuZGF0YSA9IHRoaXMuemVyb1dpZHRoU3BhY2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKGJhc2VOb2RlLm5vZGVUeXBlID09PSAxKSB7XHJcbiAgICAgICAgICAgIGlmICghYmFzZU5vZGUucHJldmlvdXNTaWJsaW5nKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5nZXRFbGVtZW50RGVwdGgoYmFzZU5vZGUpID09PSBkZXB0aCkgbmV4dCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYmFzZU5vZGUgPSBiYXNlTm9kZS5wcmV2aW91c1NpYmxpbmc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBkZXB0aEVsID0gYmFzZU5vZGU7XHJcbiAgICAgICAgd2hpbGUgKHRoaXMuZ2V0RWxlbWVudERlcHRoKGRlcHRoRWwpID4gZGVwdGgpIHtcclxuICAgICAgICAgICAgaW5kZXggPSB0aGlzLmdldFBvc2l0aW9uSW5kZXgoZGVwdGhFbCkgKyAxO1xyXG4gICAgICAgICAgICBkZXB0aEVsID0gZGVwdGhFbC5wYXJlbnROb2RlO1xyXG5cclxuICAgICAgICAgICAgdGVtcCA9IG5ld0VsO1xyXG4gICAgICAgICAgICBuZXdFbCA9IGRlcHRoRWwuY2xvbmVOb2RlKGZhbHNlKTtcclxuICAgICAgICAgICAgY2hpbGRyZW4gPSBkZXB0aEVsLmNoaWxkTm9kZXM7XHJcblxyXG4gICAgICAgICAgICBpZiAodGVtcCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNMaXN0Q2VsbChuZXdFbCkgJiYgdGhpcy5pc0xpc3QodGVtcCkgJiYgdGVtcC5maXJzdEVsZW1lbnRDaGlsZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld0VsLmlubmVySFRNTCA9IHRlbXAuZmlyc3RFbGVtZW50Q2hpbGQuaW5uZXJIVE1MO1xyXG4gICAgICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlSXRlbSh0ZW1wLmZpcnN0RWxlbWVudENoaWxkKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGVtcC5jaGlsZHJlbi5sZW5ndGggPiAwKSBuZXdFbC5hcHBlbmRDaGlsZCh0ZW1wKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3RWwuYXBwZW5kQ2hpbGQodGVtcCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHdoaWxlIChjaGlsZHJlbltpbmRleF0pIHtcclxuICAgICAgICAgICAgICAgIG5ld0VsLmFwcGVuZENoaWxkKGNoaWxkcmVuW2luZGV4XSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChkZXB0aEVsLmNoaWxkTm9kZXMubGVuZ3RoIDw9IDEgJiYgKCFkZXB0aEVsLmZpcnN0Q2hpbGQgfHwgZGVwdGhFbC5maXJzdENoaWxkLnRleHRDb250ZW50Lmxlbmd0aCA9PT0gMCkpIGRlcHRoRWwuaW5uZXJIVE1MID0gJzxicj4nO1xyXG5cclxuICAgICAgICBjb25zdCBwRWxlbWVudCA9IGRlcHRoRWwucGFyZW50Tm9kZTtcclxuICAgICAgICBpZiAobmV4dCkgZGVwdGhFbCA9IGRlcHRoRWwubmV4dFNpYmxpbmc7XHJcbiAgICAgICAgaWYgKCFuZXdFbCkgcmV0dXJuIGRlcHRoRWw7XHJcblxyXG4gICAgICAgIHRoaXMubWVyZ2VTYW1lVGFncyhuZXdFbCwgbnVsbCwgZmFsc2UpO1xyXG4gICAgICAgIHRoaXMubWVyZ2VOZXN0ZWRUYWdzKG5ld0VsLCBmdW5jdGlvbiAoY3VycmVudCkgeyByZXR1cm4gdGhpcy5pc0xpc3QoY3VycmVudCk7IH0uYmluZCh0aGlzKSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKG5ld0VsLmNoaWxkTm9kZXMubGVuZ3RoID4gMCkgcEVsZW1lbnQuaW5zZXJ0QmVmb3JlKG5ld0VsLCBkZXB0aEVsKTtcclxuICAgICAgICBlbHNlIG5ld0VsID0gZGVwdGhFbDtcclxuXHJcbiAgICAgICAgaWYgKGJwLmNoaWxkTm9kZXMubGVuZ3RoID09PSAwKSB0aGlzLnJlbW92ZUl0ZW0oYnApO1xyXG5cclxuICAgICAgICByZXR1cm4gbmV3RWw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFVzZSB3aXRoIFwibnBkZVBhdGggKHV0aWwuZ2V0Tm9kZVBhdGgpXCIgdG8gbWVyZ2UgdGhlIHNhbWUgYXR0cmlidXRlcyBhbmQgdGFncyBpZiB0aGV5IGFyZSBwcmVzZW50IGFuZCBtb2RpZnkgdGhlIG5vZGVwYXRoLlxyXG4gICAgICogSWYgXCJvZmZzZXRcIiBoYXMgYmVlbiBjaGFuZ2VkLCBpdCB3aWxsIHJldHVybiBhcyBtdWNoIFwib2Zmc2V0XCIgYXMgaXQgaGFzIGJlZW4gbW9kaWZpZWQuXHJcbiAgICAgKiBBbiBhcnJheSBjb250YWluaW5nIGNoYW5nZSBvZmZzZXRzIGlzIHJldHVybmVkIGluIHRoZSBvcmRlciBvZiB0aGUgXCJub2RlUGF0aEFycmF5XCIgYXJyYXkuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgRWxlbWVudFxyXG4gICAgICogQHBhcmFtIHtBcnJheXxudWxsfSBub2RlUGF0aEFycmF5IEFycmF5IG9mIE5vZGVQYXRoIG9iamVjdCAoW3V0aWwuZ2V0Tm9kZVBhdGgoKSwgLi5dKVxyXG4gICAgICogQHBhcmFtIHtCb29sZWFufSBvbmx5VGV4dCBJZiB0cnVlLCBub24tdGV4dCBub2RlcyghdXRpbC5faXNJZ25vcmVOb2RlQ2hhbmdlKSBsaWtlICdzcGFuJywgJ3N0cm9uZycuLiBhcmUgaWdub3JlZC5cclxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gW29mZnNldCwgLi5dXHJcbiAgICAgKi9cclxuICAgIG1lcmdlU2FtZVRhZ3M6IGZ1bmN0aW9uIChlbGVtZW50LCBub2RlUGF0aEFycmF5LCBvbmx5VGV4dCkge1xyXG4gICAgICAgIGNvbnN0IGluc3QgPSB0aGlzO1xyXG4gICAgICAgIGNvbnN0IG5vZGVQYXRoTGVuID0gbm9kZVBhdGhBcnJheSA/IG5vZGVQYXRoQXJyYXkubGVuZ3RoIDogMDtcclxuICAgICAgICBsZXQgb2Zmc2V0cyA9IG51bGw7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKG5vZGVQYXRoTGVuKSB7XHJcbiAgICAgICAgICAgIG9mZnNldHMgPSB0aGlzLl93LkFycmF5LmFwcGx5KG51bGwsIG5ldyB0aGlzLl93LkFycmF5KG5vZGVQYXRoTGVuKSkubWFwKHRoaXMuX3cuTnVtYmVyLnByb3RvdHlwZS52YWx1ZU9mLCAwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIChmdW5jdGlvbiByZWN1cnNpb25GdW5jKGN1cnJlbnQsIGRlcHRoLCBkZXB0aEluZGV4KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gY3VycmVudC5jaGlsZE5vZGVzO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGNoaWxkcmVuLmxlbmd0aCwgY2hpbGQsIG5leHQ7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY2hpbGQgPSBjaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgICAgIG5leHQgPSBjaGlsZHJlbltpICsgMV07XHJcbiAgICAgICAgICAgICAgICBpZiAoIWNoaWxkKSBicmVhaztcclxuICAgICAgICAgICAgICAgIGlmKChvbmx5VGV4dCAmJiBpbnN0Ll9pc0lnbm9yZU5vZGVDaGFuZ2UoY2hpbGQpKSB8fCAoIW9ubHlUZXh0ICYmIChpbnN0LmlzVGFibGUoY2hpbGQpIHx8IGluc3QuaXNMaXN0Q2VsbChjaGlsZCkgfHwgKGluc3QuaXNGb3JtYXRFbGVtZW50KGNoaWxkKSAmJiAhaW5zdC5pc0ZyZWVGb3JtYXRFbGVtZW50KGNoaWxkKSkpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnN0LmlzVGFibGUoY2hpbGQpIHx8IGluc3QuaXNMaXN0Q2VsbChjaGlsZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVjdXJzaW9uRnVuYyhjaGlsZCwgZGVwdGggKyAxLCBpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAobGVuID09PSAxICYmIGN1cnJlbnQubm9kZU5hbWUgPT09IGNoaWxkLm5vZGVOYW1lICYmIGN1cnJlbnQucGFyZW50Tm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSBub2RlUGF0aFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChub2RlUGF0aExlbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGF0aCwgYywgcCwgY0RlcHRoLCBzcGxpY2VEZXB0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBub2RlUGF0aExlbjsgbisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoID0gbm9kZVBhdGhBcnJheVtuXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXRoICYmIHBhdGhbZGVwdGhdID09PSBpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IGNoaWxkLCBwID0gY3VycmVudCwgY0RlcHRoID0gZGVwdGgsIHNwbGljZURlcHRoID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY0RlcHRoID49IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc3QuZ2V0QXJyYXlJbmRleChwLmNoaWxkTm9kZXMsIGMpICE9PSBwYXRoW2NEZXB0aF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwbGljZURlcHRoID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0gY2hpbGQucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCA9IGMucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY0RlcHRoLS07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcGxpY2VEZXB0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLnNwbGljZShkZXB0aCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhbZGVwdGhdID0gaTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIG1lcmdlIHRhZ1xyXG4gICAgICAgICAgICAgICAgICAgIGluc3QuY29weVRhZ0F0dHJpYnV0ZXMoY2hpbGQsIGN1cnJlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoY2hpbGQsIGN1cnJlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGluc3QucmVtb3ZlSXRlbShjdXJyZW50KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghbmV4dCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC5ub2RlVHlwZSA9PT0gMSkgcmVjdXJzaW9uRnVuYyhjaGlsZCwgZGVwdGggKyAxLCBpKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGQubm9kZU5hbWUgPT09IG5leHQubm9kZU5hbWUgJiYgaW5zdC5pc1NhbWVBdHRyaWJ1dGVzKGNoaWxkLCBuZXh0KSAmJiBjaGlsZC5ocmVmID09PSBuZXh0LmhyZWYpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZHMgPSBjaGlsZC5jaGlsZE5vZGVzO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjaGlsZExlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgbiA9IDAsIG5MZW4gPSBjaGlsZHMubGVuZ3RoOyBuIDwgbkxlbjsgbisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZHNbbl0udGV4dENvbnRlbnQubGVuZ3RoID4gMCkgY2hpbGRMZW5ndGgrKztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGwgPSBjaGlsZC5sYXN0Q2hpbGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgciA9IG5leHQuZmlyc3RDaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgYWRkT2Zmc2V0ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobCAmJiByKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRleHRPZmZzZXQgPSBsLm5vZGVUeXBlID09PSAzICYmIHIubm9kZVR5cGUgPT09IDM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZE9mZnNldCA9IGwudGV4dENvbnRlbnQubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGVtcEwgPSBsLnByZXZpb3VzU2libGluZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUodGVtcEwgJiYgdGVtcEwubm9kZVR5cGUgPT09IDMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZE9mZnNldCArPSB0ZW1wTC50ZXh0Q29udGVudC5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wTCA9IHRlbXBMLnByZXZpb3VzU2libGluZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkTGVuZ3RoID4gMCAmJiBsLm5vZGVUeXBlID09PSAzICYmIHIubm9kZVR5cGUgPT09IDMgJiYgKGwudGV4dENvbnRlbnQubGVuZ3RoID4gMCB8fCByLnRleHRDb250ZW50Lmxlbmd0aCA+IDApKSBjaGlsZExlbmd0aC0tO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGVQYXRoTGVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGF0aCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBuID0gMDsgbiA8IG5vZGVQYXRoTGVuOyBuKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoID0gbm9kZVBhdGhBcnJheVtuXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGF0aCAmJiBwYXRoW2RlcHRoXSA+IGkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlcHRoID4gMCAmJiBwYXRoW2RlcHRoIC0gMV0gIT09IGRlcHRoSW5kZXgpIGNvbnRpbnVlO1xyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhbZGVwdGhdIC09IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXRoW2RlcHRoICsgMV0gPj0gMCAmJiBwYXRoW2RlcHRoXSA9PT0gaSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aFtkZXB0aCArIDFdICs9IGNoaWxkTGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHRPZmZzZXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCAmJiBsLm5vZGVUeXBlID09PSAzICYmIHIgJiYgci5ub2RlVHlwZSA9PT0gMykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRzW25dICs9IGFkZE9mZnNldDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC5ub2RlVHlwZSA9PT0gMykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRPZmZzZXQgPSBjaGlsZC50ZXh0Q29udGVudC5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLnRleHRDb250ZW50ICs9IG5leHQudGV4dENvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlUGF0aExlbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBhdGggPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBub2RlUGF0aExlbjsgbisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCA9IG5vZGVQYXRoQXJyYXlbbl07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhdGggJiYgcGF0aFtkZXB0aF0gPiBpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXB0aCA+IDAgJiYgcGF0aFtkZXB0aCAtIDFdICE9PSBkZXB0aEluZGV4KSBjb250aW51ZTtcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoW2RlcHRoXSAtPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGF0aFtkZXB0aCArIDFdID49IDAgJiYgcGF0aFtkZXB0aF0gPT09IGkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhbZGVwdGggKyAxXSArPSBjaGlsZExlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldHNbbl0gKz0gYWRkT2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuaW5uZXJIVE1MICs9IG5leHQuaW5uZXJIVE1MO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBpbnN0LnJlbW92ZUl0ZW0obmV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaS0tO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZC5ub2RlVHlwZSA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlY3Vyc2lvbkZ1bmMoY2hpbGQsIGRlcHRoICsgMSwgaSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KShlbGVtZW50LCAwLCAwKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG9mZnNldHM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFJlbW92ZSBuZXN0ZWQgdGFncyB3aXRob3V0IG90aGVyIGNoaWxkIG5vZGVzLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IEVsZW1lbnQgb2JqZWN0XHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufFN0cmluZ3xudWxsfSB2YWxpZGF0aW9uIFZhbGlkYXRpb24gZnVuY3Rpb24gLyBTdHJpbmcoXCJ0YWcxfHRhZzIuLlwiKSAvIElmIG51bGwsIGFsbCB0YWdzIGFyZSBhcHBsaWNhYmxlLlxyXG4gICAgICovXHJcbiAgICBtZXJnZU5lc3RlZFRhZ3M6IGZ1bmN0aW9uIChlbGVtZW50LCB2YWxpZGF0aW9uKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWxpZGF0aW9uID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9uID0gZnVuY3Rpb24gKGN1cnJlbnQpIHsgcmV0dXJuIHRoaXMudGVzdChjdXJyZW50LnRhZ05hbWUpOyB9LmJpbmQobmV3IHRoaXMuX3cuUmVnRXhwKCdeKCcgKyAodmFsaWRhdGlvbiA/IHZhbGlkYXRpb24gOiAnLisnKSArICcpJCcsICdpJykpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbGlkYXRpb24gIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbiA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRydWU7IH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIChmdW5jdGlvbiByZWN1cnNpb25GdW5jKGN1cnJlbnQpIHtcclxuICAgICAgICAgICAgbGV0IGNoaWxkcmVuID0gY3VycmVudC5jaGlsZHJlbjtcclxuICAgICAgICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA9PT0gMSAmJiBjaGlsZHJlblswXS5ub2RlTmFtZSA9PT0gY3VycmVudC5ub2RlTmFtZSAmJiB2YWxpZGF0aW9uKGN1cnJlbnQpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0ZW1wID0gY2hpbGRyZW5bMF07XHJcbiAgICAgICAgICAgICAgICBjaGlsZHJlbiA9IHRlbXAuY2hpbGRyZW47XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoY2hpbGRyZW5bMF0pIHtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50LmFwcGVuZENoaWxkKGNoaWxkcmVuWzBdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGN1cnJlbnQucmVtb3ZlQ2hpbGQodGVtcCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBjdXJyZW50LmNoaWxkcmVuLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICByZWN1cnNpb25GdW5jKGN1cnJlbnQuY2hpbGRyZW5baV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkoZWxlbWVudCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIERlbGV0ZSBhIGVtcHR5IGNoaWxkIG5vZGUgb2YgYXJndW1lbnQgZWxlbWVudFxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IEVsZW1lbnQgbm9kZVxyXG4gICAgICogQHBhcmFtIHtOb2RlfG51bGx9IG5vdFJlbW92ZU5vZGUgRG8gbm90IHJlbW92ZSBub2RlXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZUVtcHR5Tm9kZTogZnVuY3Rpb24gKGVsZW1lbnQsIG5vdFJlbW92ZU5vZGUpIHtcclxuICAgICAgICBjb25zdCBpbnN0ID0gdGhpcztcclxuXHJcbiAgICAgICAgaWYgKG5vdFJlbW92ZU5vZGUpIHtcclxuICAgICAgICAgICAgbm90UmVtb3ZlTm9kZSA9IGluc3QuZ2V0UGFyZW50RWxlbWVudChub3RSZW1vdmVOb2RlLCBmdW5jdGlvbiAoY3VycmVudCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQgPT09IGN1cnJlbnQucGFyZW50RWxlbWVudDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIChmdW5jdGlvbiByZWN1cnNpb25GdW5jKGN1cnJlbnQpIHtcclxuICAgICAgICAgICAgaWYgKGluc3QuX25vdFRleHROb2RlKGN1cnJlbnQpIHx8IGN1cnJlbnQgPT09IG5vdFJlbW92ZU5vZGUgfHwgaW5zdC5pc05vbkVkaXRhYmxlKGN1cnJlbnQpKSByZXR1cm4gMDtcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnQgIT09IGVsZW1lbnQgJiYgaW5zdC5vbmx5WmVyb1dpZHRoU3BhY2UoY3VycmVudC50ZXh0Q29udGVudCkgJiYgKCFjdXJyZW50LmZpcnN0Q2hpbGQgfHwgIWluc3QuaXNCcmVhayhjdXJyZW50LmZpcnN0Q2hpbGQpKSAmJiAhY3VycmVudC5xdWVyeVNlbGVjdG9yKGluc3QuX2FsbG93ZWRFbXB0eU5vZGVMaXN0KSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQucGFyZW50Tm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjdXJyZW50KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGN1cnJlbnQuY2hpbGRyZW47XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gY2hpbGRyZW4ubGVuZ3RoLCByID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjaGlsZHJlbltpICsgcl0gfHwgaW5zdC5pc0NvbXBvbmVudChjaGlsZHJlbltpICsgcl0pKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICByICs9IHJlY3Vyc2lvbkZ1bmMoY2hpbGRyZW5baSArIHJdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfSkoZWxlbWVudCk7XHJcblxyXG4gICAgICAgIGlmIChlbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAwKSBlbGVtZW50LmlubmVySFRNTCA9ICc8YnI+JztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gUmVtb3ZlIHdoaXRlc3BhY2UgYmV0d2VlbiB0YWdzIGluIEhUTUwgc3RyaW5nLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGh0bWwgSFRNTCBzdHJpbmdcclxuICAgICAqIEByZXR1cm5zIHtTdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIGh0bWxSZW1vdmVXaGl0ZVNwYWNlOiBmdW5jdGlvbiAoaHRtbCkge1xyXG4gICAgICAgIGlmICghaHRtbCkgcmV0dXJuICcnO1xyXG4gICAgICAgIHJldHVybiBodG1sLnRyaW0oKS5yZXBsYWNlKC88XFwvPyg/IXN0cm9uZ3xzcGFufGZvbnR8Ynx2YXJ8aXxlbXx1fGluc3xzfHN0cmlrZXxkZWx8c3VifHN1cHxtYXJrfGF8bGFiZWx8Y29kZXxzdW1tYXJ5KVtePl48XSs+XFxzKyg/PTwpL2lnLCBmdW5jdGlvbiAobSkgeyByZXR1cm4gbS50cmltKCk7IH0pO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBTb3J0IGEgZWxlbWVudCBhcnJheSBieSBkZXB0aCBvZiBlbGVtZW50LlxyXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgQXJyYXkgb2JqZWN0XHJcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGRlcyB0cnVlOiBkZXNjZW5kaW5nIG9yZGVyIC8gZmFsc2U6IGFzY2VuZGluZyBvcmRlclxyXG4gICAgICovXHJcbiAgICBzb3J0QnlEZXB0aDogZnVuY3Rpb24gKGFycmF5LCBkZXMpIHtcclxuICAgICAgICBjb25zdCB0ID0gIWRlcyA/IC0xIDogMTtcclxuICAgICAgICBjb25zdCBmID0gdCAqIC0xO1xyXG5cclxuICAgICAgICBhcnJheS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pc0xpc3RDZWxsKGEpIHx8ICF0aGlzLmlzTGlzdENlbGwoYikpIHJldHVybiAwO1xyXG4gICAgICAgICAgICBhID0gdGhpcy5nZXRFbGVtZW50RGVwdGgoYSk7XHJcbiAgICAgICAgICAgIGIgPSB0aGlzLmdldEVsZW1lbnREZXB0aChiKTtcclxuICAgICAgICAgICAgcmV0dXJuIGEgPiBiID8gdCA6IGEgPCBiID8gZiA6IDA7XHJcbiAgICAgICAgfS5iaW5kKHRoaXMpKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gTm9kZXMgdGhhdCBuZWVkIHRvIGJlIGFkZGVkIHdpdGhvdXQgbW9kaWZpY2F0aW9uIHdoZW4gY2hhbmdpbmcgdGV4dCBub2Rlc1xyXG4gICAgICogQHBhcmFtIHtOb2RlfSBlbGVtZW50IEVsZW1lbnQgdG8gY2hlY2tcclxuICAgICAqIEByZXR1cm5zIHtCb29sZWFufVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqL1xyXG4gICAgX2lzSWdub3JlTm9kZUNoYW5nZTogZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudCAmJiBlbGVtZW50Lm5vZGVUeXBlICE9PSAzICYmICh0aGlzLmlzTm9uRWRpdGFibGUoZWxlbWVudCkgfHwgIXRoaXMuaXNUZXh0U3R5bGVFbGVtZW50KGVsZW1lbnQpKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gTm9kZXMgdGhhdCBtdXN0IHJlbWFpbiB1bmRldGFjaGVkIHdoZW4gY2hhbmdpbmcgdGV4dCBub2RlcyAoQSwgTGFiZWwsIENvZGUsIFNwYW46Zm9udC1zaXplKVxyXG4gICAgICogQHBhcmFtIHtOb2RlfFN0cmluZ30gZWxlbWVudCBFbGVtZW50IHRvIGNoZWNrXHJcbiAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIF9pc01haW50YWluZWROb2RlOiBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50ICYmIGVsZW1lbnQubm9kZVR5cGUgIT09IDMgJiYgL14oYXxsYWJlbHxjb2RlfHN1bW1hcnkpJC9pLnRlc3QodHlwZW9mIGVsZW1lbnQgPT09ICdzdHJpbmcnID8gZWxlbWVudCA6IGVsZW1lbnQubm9kZU5hbWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBOb2RlIHdpdGggZm9udC1zaXplIHN0eWxlXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IGVsZW1lbnQgRWxlbWVudCB0byBjaGVja1xyXG4gICAgICogQHJldHVybnMge0Jvb2xlYW59XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICBfaXNTaXplTm9kZTogZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudCAmJiBlbGVtZW50Lm5vZGVUeXBlICE9PSAzICYmIHRoaXMuaXNUZXh0U3R5bGVFbGVtZW50KGVsZW1lbnQpICYmICEhZWxlbWVudC5zdHlsZS5mb250U2l6ZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gTm9kZXMgd2l0aG91dCB0ZXh0XHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IGVsZW1lbnQgRWxlbWVudCB0byBjaGVja1xyXG4gICAgICogQHJldHVybnMge0Jvb2xlYW59XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICBfbm90VGV4dE5vZGU6IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQgJiYgZWxlbWVudC5ub2RlVHlwZSAhPT0gMyAmJiAodGhpcy5pc0NvbXBvbmVudChlbGVtZW50KSB8fCAvXihicnxpbnB1dHxzZWxlY3R8Y2FudmFzfGltZ3xpZnJhbWV8YXVkaW98dmlkZW8pJC9pLnRlc3QodHlwZW9mIGVsZW1lbnQgPT09ICdzdHJpbmcnID8gZWxlbWVudCA6IGVsZW1lbnQubm9kZU5hbWUpKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ2hlY2sgZGlzYWxsb3dlZCB0YWdzXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IGVsZW1lbnQgRWxlbWVudCB0byBjaGVja1xyXG4gICAgICogQHJldHVybnMge0Jvb2xlYW59XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICBfZGlzYWxsb3dlZFRhZ3M6IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIC9eKG1ldGF8c2NyaXB0fGxpbmt8c3R5bGV8W2Etel0rXFw6W2Etel0rKSQvaS50ZXN0KGVsZW1lbnQubm9kZU5hbWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBDcmVhdGUgd2hpdGVsaXN0IFJlZ0V4cCBvYmplY3QuXHJcbiAgICAgKiBSZXR1cm4gUmVnRXhwIGZvcm1hdDogbmV3IFJlZ0V4cChcIjxcXFxcLz9cXFxcYig/IVwiICsgbGlzdCArIFwiKVxcXFxiW14+XjxdKis+XCIsIFwiZ2lcIilcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBsaXN0IFRhZ3MgbGlzdCAoXCJicnxwfGRpdnxwcmUuLi5cIilcclxuICAgICAqIEByZXR1cm5zIHtSZWdFeHB9XHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZVRhZ3NXaGl0ZWxpc3Q6IGZ1bmN0aW9uIChsaXN0KSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoJzxcXFxcLz9cXFxcYig/IVxcXFxiJyArIGxpc3QucmVwbGFjZSgvXFx8L2csICdcXFxcYnxcXFxcYicpICsgJ1xcXFxiKVtePl0qPicsICdnaScpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBGaXggdGFncyB0aGF0IGRvIG5vdCBmaXQgdGhlIGVkaXRvciBmb3JtYXQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGRvY3VtZW50RnJhZ21lbnQgRG9jdW1lbnQgZnJhZ21lbnQgXCJET0NVTUVOVF9GUkFHTUVOVF9OT0RFXCIgKG5vZGVUeXBlID09PSAxMSlcclxuICAgICAqIEBwYXJhbSB7UmVnRXhwfSBodG1sQ2hlY2tXaGl0ZWxpc3RSZWdFeHAgRWRpdG9yIHRhZ3Mgd2hpdGVsaXN0IChjb3JlLl9odG1sQ2hlY2tXaGl0ZWxpc3RSZWdFeHApXHJcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGxvd0xldmVsQ2hlY2sgUm93IGxldmVsIGNoZWNrXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICBfY29uc2lzdGVuY3lDaGVja09mSFRNTDogZnVuY3Rpb24gKGRvY3VtZW50RnJhZ21lbnQsIGh0bWxDaGVja1doaXRlbGlzdFJlZ0V4cCwgbG93TGV2ZWxDaGVjaykge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEl0IGlzIGNhbiB1c2UgXCIuY2hpbGRyZW4odXRpbC5nZXRMaXN0Q2hpbGRyZW4pXCIgdG8gZXhjbHVkZSB0ZXh0IG5vZGVzLCBidXQgXCJkb2N1bWVudEZyYWdtZW50LmNoaWxkcmVuXCIgaXMgbm90IHN1cHBvcnRlZCBpbiBJRS5cclxuICAgICAgICAgKiBTbyBjaGVjayB0aGUgbm9kZSB0eXBlIGFuZCBleGNsdWRlIHRoZSB0ZXh0IG5vIChjdXJyZW50Lm5vZGVUeXBlICE9PSAxKVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvbnN0IHJlbW92ZVRhZ3MgPSBbXSwgZW1wdHlUYWdzID0gW10sIHdyb25nTGlzdCA9IFtdLCB3aXRob3V0Rm9ybWF0Q2VsbHMgPSBbXTtcclxuXHJcbiAgICAgICAgLy8gd3JvbmcgcG9zaXRpb25cclxuICAgICAgICBjb25zdCB3cm9uZ1RhZ3MgPSB0aGlzLmdldExpc3RDaGlsZE5vZGVzKGRvY3VtZW50RnJhZ21lbnQsIGZ1bmN0aW9uIChjdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50Lm5vZGVUeXBlICE9PSAxKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAvLyB3aGl0ZSBsaXN0XHJcbiAgICAgICAgICAgIGlmICghaHRtbENoZWNrV2hpdGVsaXN0UmVnRXhwLnRlc3QoY3VycmVudC5ub2RlTmFtZSkgJiYgY3VycmVudC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMCAmJiB0aGlzLmlzTm90Q2hlY2tpbmdOb2RlKGN1cnJlbnQpKSB7XHJcbiAgICAgICAgICAgICAgICByZW1vdmVUYWdzLnB1c2goY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG5ydGFnID0gIXRoaXMuZ2V0UGFyZW50RWxlbWVudChjdXJyZW50LCB0aGlzLmlzTm90Q2hlY2tpbmdOb2RlKTtcclxuICAgICAgICAgICAgLy8gZW1wdHkgdGFnc1xyXG4gICAgICAgICAgICBpZiAoKCF0aGlzLmlzVGFibGUoY3VycmVudCkgJiYgIXRoaXMuaXNMaXN0Q2VsbChjdXJyZW50KSkgJiYgKHRoaXMuaXNGb3JtYXRFbGVtZW50KGN1cnJlbnQpIHx8IHRoaXMuaXNSYW5nZUZvcm1hdEVsZW1lbnQoY3VycmVudCkgfHwgdGhpcy5pc1RleHRTdHlsZUVsZW1lbnQoY3VycmVudCkpICYmIGN1cnJlbnQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDAgJiYgbnJ0YWcpIHtcclxuICAgICAgICAgICAgICAgIGVtcHR5VGFncy5wdXNoKGN1cnJlbnQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyB3cm9uZyBsaXN0XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTGlzdChjdXJyZW50LnBhcmVudE5vZGUpICYmICF0aGlzLmlzTGlzdChjdXJyZW50KSAmJiAhdGhpcy5pc0xpc3RDZWxsKGN1cnJlbnQpKSB7XHJcbiAgICAgICAgICAgICAgICB3cm9uZ0xpc3QucHVzaChjdXJyZW50KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gdGFibGUgY2VsbHNcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNDZWxsKGN1cnJlbnQpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmZWwgPSBjdXJyZW50LmZpcnN0RWxlbWVudENoaWxkO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzRm9ybWF0RWxlbWVudChmZWwpICYmICF0aGlzLmlzUmFuZ2VGb3JtYXRFbGVtZW50KGZlbCkgJiYgIXRoaXMuaXNDb21wb25lbnQoZmVsKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHdpdGhvdXRGb3JtYXRDZWxscy5wdXNoKGN1cnJlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY3VycmVudC5wYXJlbnROb2RlICE9PSBkb2N1bWVudEZyYWdtZW50ICYmIG5ydGFnICYmXHJcbiAgICAgICAgICAgICAoKHRoaXMuaXNMaXN0Q2VsbChjdXJyZW50KSAmJiAhdGhpcy5pc0xpc3QoY3VycmVudC5wYXJlbnROb2RlKSkgfHxcclxuICAgICAgICAgICAgICAobG93TGV2ZWxDaGVjayAmJiAodGhpcy5pc0Zvcm1hdEVsZW1lbnQoY3VycmVudCkgfHwgdGhpcy5pc0NvbXBvbmVudChjdXJyZW50KSkgJiYgIXRoaXMuaXNSYW5nZUZvcm1hdEVsZW1lbnQoY3VycmVudC5wYXJlbnROb2RlKSAmJiAhdGhpcy5nZXRQYXJlbnRFbGVtZW50KGN1cnJlbnQsIHRoaXMuaXNDb21wb25lbnQpKSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH0uYmluZCh0aGlzKSk7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSByZW1vdmVUYWdzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlSXRlbShyZW1vdmVUYWdzW2ldKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3QgY2hlY2tUYWdzID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHdyb25nVGFncy5sZW5ndGgsIHQsIHA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICB0ID0gd3JvbmdUYWdzW2ldO1xyXG4gICAgICAgICAgICBwID0gdC5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICBpZiAoIXAgfHwgIXAucGFyZW50Tm9kZSkgY29udGludWU7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5nZXRQYXJlbnRFbGVtZW50KHQsIHRoaXMuaXNMaXN0Q2VsbCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxDaGlsZHJlbiA9IHQuY2hpbGROb2RlcztcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSBjZWxsQ2hpbGRyZW4ubGVuZ3RoIC0gMTsgbGVuID49IDA7IGotLSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHAuaW5zZXJ0QmVmb3JlKHQsIGNlbGxDaGlsZHJlbltqXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjaGVja1RhZ3MucHVzaCh0KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHAucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodCwgcCk7XHJcbiAgICAgICAgICAgICAgICBjaGVja1RhZ3MucHVzaChwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGNoZWNrVGFncy5sZW5ndGgsIHQ7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICB0ID0gY2hlY2tUYWdzW2ldO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5vbmx5WmVyb1dpZHRoU3BhY2UodC50ZXh0Q29udGVudC50cmltKCkpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUl0ZW0odCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBlbXB0eVRhZ3MubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKGVtcHR5VGFnc1tpXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gd3JvbmdMaXN0Lmxlbmd0aCwgdCwgdHAsIGNoaWxkcmVuLCBwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgdCA9IHdyb25nTGlzdFtpXTtcclxuXHJcbiAgICAgICAgICAgIHRwID0gdGhpcy5jcmVhdGVFbGVtZW50KCdMSScpO1xyXG4gICAgICAgICAgICBjaGlsZHJlbiA9IHQuY2hpbGROb2RlcztcclxuICAgICAgICAgICAgd2hpbGUgKGNoaWxkcmVuWzBdKSB7XHJcbiAgICAgICAgICAgICAgICB0cC5hcHBlbmRDaGlsZChjaGlsZHJlblswXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHAgPSB0LnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgIGlmICghcCkgY29udGludWU7XHJcbiAgICAgICAgICAgIHAuaW5zZXJ0QmVmb3JlKHRwLCB0KTtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKHQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHdpdGhvdXRGb3JtYXRDZWxscy5sZW5ndGgsIHQsIGY7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICB0ID0gd2l0aG91dEZvcm1hdENlbGxzW2ldO1xyXG4gICAgICAgICAgICBmID0gdGhpcy5jcmVhdGVFbGVtZW50KCdESVYnKTtcclxuICAgICAgICAgICAgZi5pbm5lckhUTUwgPSAodC50ZXh0Q29udGVudC50cmltKCkubGVuZ3RoID09PSAwICYmIHQuY2hpbGRyZW4ubGVuZ3RoID09PSAwKSA/ICc8YnI+JyA6IHQuaW5uZXJIVE1MO1xyXG4gICAgICAgICAgICB0LmlubmVySFRNTCA9IGYub3V0ZXJIVE1MO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX3NldERlZmF1bHRPcHRpb25TdHlsZTogZnVuY3Rpb24gKG9wdGlvbnMsIGRlZmF1bHRTdHlsZSkge1xyXG4gICAgICAgIGxldCBvcHRpb25TdHlsZSA9ICcnO1xyXG4gICAgICAgIGlmIChvcHRpb25zLmhlaWdodCkgb3B0aW9uU3R5bGUgKz0gJ2hlaWdodDonICsgb3B0aW9ucy5oZWlnaHQgKyAnOyc7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMubWluSGVpZ2h0KSBvcHRpb25TdHlsZSArPSAnbWluLWhlaWdodDonICsgb3B0aW9ucy5taW5IZWlnaHQgKyAnOyc7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMubWF4SGVpZ2h0KSBvcHRpb25TdHlsZSArPSAnbWF4LWhlaWdodDonICsgb3B0aW9ucy5tYXhIZWlnaHQgKyAnOyc7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMucG9zaXRpb24pIG9wdGlvblN0eWxlICs9ICdwb3NpdGlvbjonICsgb3B0aW9ucy5wb3NpdGlvbiArICc7JztcclxuICAgICAgICBpZiAob3B0aW9ucy53aWR0aCkgb3B0aW9uU3R5bGUgKz0gJ3dpZHRoOicgKyBvcHRpb25zLndpZHRoICsgJzsnO1xyXG4gICAgICAgIGlmIChvcHRpb25zLm1pbldpZHRoKSBvcHRpb25TdHlsZSArPSAnbWluLXdpZHRoOicgKyBvcHRpb25zLm1pbldpZHRoICsgJzsnO1xyXG4gICAgICAgIGlmIChvcHRpb25zLm1heFdpZHRoKSBvcHRpb25TdHlsZSArPSAnbWF4LXdpZHRoOicgKyBvcHRpb25zLm1heFdpZHRoICsgJzsnO1xyXG5cclxuICAgICAgICBsZXQgdG9wID0gJycsIGZyYW1lID0gJycsIGVkaXRvciA9ICcnO1xyXG4gICAgICAgIGRlZmF1bHRTdHlsZSA9IG9wdGlvblN0eWxlICsgZGVmYXVsdFN0eWxlO1xyXG4gICAgICAgIGNvbnN0IHN0eWxlQXJyID0gZGVmYXVsdFN0eWxlLnNwbGl0KCc7Jyk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHN0eWxlQXJyLmxlbmd0aCwgczsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHMgPSBzdHlsZUFycltpXS50cmltKCk7XHJcbiAgICAgICAgICAgIGlmICghcykgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmICgvXihtaW4tfG1heC0pP3dpZHRoXFxzKjovLnRlc3QocykgfHwgL14oei1pbmRleHxwb3NpdGlvbilcXHMqOi8udGVzdChzKSkge1xyXG4gICAgICAgICAgICAgICAgdG9wICs9IHMgKyAnOyc7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoL14obWluLXxtYXgtKT9oZWlnaHRcXHMqOi8udGVzdChzKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKC9eaGVpZ2h0Ly50ZXN0KHMpICYmIHMuc3BsaXQoJzonKVsxXS50cmltKCkgPT09ICdhdXRvJykge1xyXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuaGVpZ2h0ID0gJ2F1dG8nO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZnJhbWUgKz0gcyArICc7JztcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVkaXRvciArPSBzICsgJzsnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdG9wOiB0b3AsXHJcbiAgICAgICAgICAgIGZyYW1lOiBmcmFtZSxcclxuICAgICAgICAgICAgZWRpdG9yOiBlZGl0b3JcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBfc2V0SWZyYW1lRG9jdW1lbnQ6IGZ1bmN0aW9uIChmcmFtZSwgb3B0aW9ucykge1xyXG4gICAgICAgIGZyYW1lLnNldEF0dHJpYnV0ZSgnc2Nyb2xsaW5nJywgJ2F1dG8nKTtcclxuICAgICAgICBmcmFtZS5jb250ZW50RG9jdW1lbnQuaGVhZC5pbm5lckhUTUwgPSAnJyArXHJcbiAgICAgICAgICAgICc8bWV0YSBjaGFyc2V0PVwidXRmLThcIiAvPicgK1xyXG4gICAgICAgICAgICAnPG1ldGEgbmFtZT1cInZpZXdwb3J0XCIgY29udGVudD1cIndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xXCI+JyArXHJcbiAgICAgICAgICAgIHRoaXMuX3NldElmcmFtZUNzc1RhZ3Mob3B0aW9ucyk7XHJcbiAgICAgICAgZnJhbWUuY29udGVudERvY3VtZW50LmJvZHkuY2xhc3NOYW1lID0gb3B0aW9ucy5fZWRpdGFibGVDbGFzcztcclxuICAgICAgICBmcmFtZS5jb250ZW50RG9jdW1lbnQuYm9keS5zZXRBdHRyaWJ1dGUoJ2NvbnRlbnRlZGl0YWJsZScsIHRydWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfc2V0SWZyYW1lQ3NzVGFnczogZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICAgICAgICBjb25zdCBsaW5rTmFtZXMgPSBvcHRpb25zLmlmcmFtZUNTU0ZpbGVOYW1lO1xyXG4gICAgICAgIGNvbnN0IHdSZWdFeHAgPSB0aGlzLl93LlJlZ0V4cDtcclxuICAgICAgICBsZXQgdGFnU3RyaW5nID0gJyc7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGYgPSAwLCBsZW4gPSBsaW5rTmFtZXMubGVuZ3RoLCBwYXRoOyBmIDwgbGVuOyBmKyspIHtcclxuICAgICAgICAgICAgcGF0aCA9IFtdO1xyXG5cclxuICAgICAgICAgICAgaWYgKC8oXmh0dHBzPzpcXC9cXC8pfCheZGF0YTp0ZXh0XFwvY3NzLCkvLnRlc3QobGlua05hbWVzW2ZdKSkge1xyXG4gICAgICAgICAgICAgICAgcGF0aC5wdXNoKGxpbmtOYW1lc1tmXSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBDU1NGaWxlTmFtZSA9IG5ldyB3UmVnRXhwKCcoXnwuKltcXFxcL10pJyArIGxpbmtOYW1lc1tmXSArICcoXFxcXC4uKyk/XFxcXC5jc3MoPzpcXFxcPy4qfDsuKik/JCcsICdpJyk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBjID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2xpbmsnKSwgaSA9IDAsIGxlbiA9IGMubGVuZ3RoLCBzdHlsZVRhZzsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGVUYWcgPSBjW2ldLmhyZWYubWF0Y2goQ1NTRmlsZU5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdHlsZVRhZykgcGF0aC5wdXNoKHN0eWxlVGFnWzBdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFwYXRoIHx8IHBhdGgubGVuZ3RoID09PSAwKSB0aHJvdyAnW1NVTkVESVRPUi5jb25zdHJ1Y3Rvci5pZnJhbWUuZmFpbF0gVGhlIHN1bmVkaXRvciBDU1MgZmlsZXMgaW5zdGFsbGF0aW9uIHBhdGggY291bGQgbm90IGJlIGF1dG9tYXRpY2FsbHkgZGV0ZWN0ZWQuIFBsZWFzZSBzZXQgdGhlIG9wdGlvbiBwcm9wZXJ0eSBcImlmcmFtZUNTU0ZpbGVOYW1lXCIgYmVmb3JlIGNyZWF0aW5nIGVkaXRvciBpbnN0YW5jZXMuJztcclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBwYXRoLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB0YWdTdHJpbmcgKz0gJzxsaW5rIGhyZWY9XCInICsgcGF0aFtpXSArICdcIiByZWw9XCJzdHlsZXNoZWV0XCI+JztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRhZ1N0cmluZyArIChvcHRpb25zLmhlaWdodCA9PT0gJ2F1dG8nID8gJzxzdHlsZT5cXG4vKiogSWZyYW1lIGhlaWdodCBhdXRvICovXFxuYm9keXtoZWlnaHQ6IG1pbi1jb250ZW50OyBvdmVyZmxvdzogaGlkZGVuO31cXG48L3N0eWxlPicgOiAnJyk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCB1dGlsOyIsIi8qXHJcbiAqIHd5c2l3eWcgd2ViIGVkaXRvclxyXG4gKlxyXG4gKiBzdW5lZGl0b3IuanNcclxuICogQ29weXJpZ2h0IDIwMTcgSmlIb25nIExlZS5cclxuICogTUlUIGxpY2Vuc2UuXHJcbiAqL1xyXG4ndXNlIHN0cmljdCc7XHJcblxyXG5pbXBvcnQgX2ljb25zIGZyb20gJy4uL2Fzc2V0cy9kZWZhdWx0SWNvbnMnO1xyXG5pbXBvcnQgX2RlZmF1bHRMYW5nIGZyb20gJy4uL2xhbmcvZW4nO1xyXG5pbXBvcnQgdXRpbCBmcm9tICcuL3V0aWwnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gZG9jdW1lbnQgY3JlYXRlXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgVGV4dGFyZWFcclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIE9wdGlvbnNcclxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9XHJcbiAgICAgKi9cclxuICAgIGluaXQ6IGZ1bmN0aW9uIChlbGVtZW50LCBvcHRpb25zKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykgb3B0aW9ucyA9IHt9O1xyXG5cclxuICAgICAgICBjb25zdCBkb2MgPSBkb2N1bWVudDtcclxuXHJcbiAgICAgICAgLyoqIC0tLSBpbml0IG9wdGlvbnMgLS0tICovXHJcbiAgICAgICAgdGhpcy5faW5pdE9wdGlvbnMoZWxlbWVudCwgb3B0aW9ucyk7XHJcbiAgICBcclxuICAgICAgICAvLyBzdW5lZGl0b3IgZGl2XHJcbiAgICAgICAgY29uc3QgdG9wX2RpdiA9IGRvYy5jcmVhdGVFbGVtZW50KCdESVYnKTtcclxuICAgICAgICB0b3BfZGl2LmNsYXNzTmFtZSA9ICdzdW4tZWRpdG9yJyArIChvcHRpb25zLnJ0bCA/ICcgc2UtcnRsJyA6ICcnKTtcclxuICAgICAgICBpZiAoZWxlbWVudC5pZCkgdG9wX2Rpdi5pZCA9ICdzdW5lZGl0b3JfJyArIGVsZW1lbnQuaWQ7XHJcbiAgICBcclxuICAgICAgICAvLyByZWxhdGl2ZSBkaXZcclxuICAgICAgICBjb25zdCByZWxhdGl2ZSA9IGRvYy5jcmVhdGVFbGVtZW50KCdESVYnKTtcclxuICAgICAgICByZWxhdGl2ZS5jbGFzc05hbWUgPSAnc2UtY29udGFpbmVyJztcclxuICAgIFxyXG4gICAgICAgIC8vIHRvb2xiYXJcclxuICAgICAgICBjb25zdCB0b29sX2JhciA9IHRoaXMuX2NyZWF0ZVRvb2xCYXIoZG9jLCBvcHRpb25zLmJ1dHRvbkxpc3QsIG9wdGlvbnMucGx1Z2lucywgb3B0aW9ucyk7XHJcbiAgICAgICAgdG9vbF9iYXIuZWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XHJcbiAgICAgICAgaWYgKHRvb2xfYmFyLnBsdWdpbkNhbGxCdXR0b25zLm1hdGgpIHRoaXMuX2NoZWNrS2F0ZXhNYXRoKG9wdGlvbnMua2F0ZXgpO1xyXG4gICAgICAgIGNvbnN0IGFycm93ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xyXG4gICAgICAgIGFycm93LmNsYXNzTmFtZSA9ICdzZS1hcnJvdyc7XHJcblxyXG4gICAgICAgIC8vIHN0aWNreSB0b29sYmFyIGR1bW15XHJcbiAgICAgICAgY29uc3Qgc3RpY2t5X2R1bW15ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xyXG4gICAgICAgIHN0aWNreV9kdW1teS5jbGFzc05hbWUgPSAnc2UtdG9vbGJhci1zdGlja3ktZHVtbXknO1xyXG4gICAgXHJcbiAgICAgICAgLy8gaW5uZXIgZWRpdG9yIGRpdlxyXG4gICAgICAgIGNvbnN0IGVkaXRvcl9kaXYgPSBkb2MuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcbiAgICAgICAgZWRpdG9yX2Rpdi5jbGFzc05hbWUgPSAnc2Utd3JhcHBlcic7XHJcblxyXG4gICAgICAgIC8qKiAtLS0gaW5pdCBlbGVtZW50cyBhbmQgY3JlYXRlIGJvdHRvbSBiYXIgLS0tICovXHJcbiAgICAgICAgY29uc3QgaW5pdEVsZW1lbnRzID0gdGhpcy5faW5pdEVsZW1lbnRzKG9wdGlvbnMsIHRvcF9kaXYsIHRvb2xfYmFyLmVsZW1lbnQsIGFycm93KTtcclxuXHJcbiAgICAgICAgY29uc3QgYm90dG9tQmFyID0gaW5pdEVsZW1lbnRzLmJvdHRvbUJhcjtcclxuICAgICAgICBjb25zdCB3eXNpd3lnX2RpdiA9IGluaXRFbGVtZW50cy53eXNpd3lnRnJhbWU7XHJcbiAgICAgICAgY29uc3QgcGxhY2Vob2xkZXJfc3BhbiA9IGluaXRFbGVtZW50cy5wbGFjZWhvbGRlcjtcclxuICAgICAgICBsZXQgdGV4dGFyZWEgPSBpbml0RWxlbWVudHMuY29kZVZpZXc7XHJcblxyXG4gICAgICAgIC8vIHJlc2l6aW5nIGJhclxyXG4gICAgICAgIGNvbnN0IHJlc2l6aW5nX2JhciA9IGJvdHRvbUJhci5yZXNpemluZ0JhcjtcclxuICAgICAgICBjb25zdCBuYXZpZ2F0aW9uID0gYm90dG9tQmFyLm5hdmlnYXRpb247XHJcbiAgICAgICAgY29uc3QgY2hhcl93cmFwcGVyID0gYm90dG9tQmFyLmNoYXJXcmFwcGVyO1xyXG4gICAgICAgIGNvbnN0IGNoYXJfY291bnRlciA9IGJvdHRvbUJhci5jaGFyQ291bnRlcjtcclxuICAgIFxyXG4gICAgICAgIC8vIGxvYWRpbmcgYm94XHJcbiAgICAgICAgY29uc3QgbG9hZGluZ19ib3ggPSBkb2MuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcbiAgICAgICAgbG9hZGluZ19ib3guY2xhc3NOYW1lID0gJ3NlLWxvYWRpbmctYm94IHN1bi1lZGl0b3ItY29tbW9uJztcclxuICAgICAgICBsb2FkaW5nX2JveC5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cInNlLWxvYWRpbmctZWZmZWN0XCI+PC9kaXY+JztcclxuXHJcbiAgICAgICAgLy8gZW50ZXIgbGluZVxyXG4gICAgICAgIGNvbnN0IGxpbmVfYnJlYWtlciA9IGRvYy5jcmVhdGVFbGVtZW50KCdESVYnKTtcclxuICAgICAgICBsaW5lX2JyZWFrZXIuY2xhc3NOYW1lID0gJ3NlLWxpbmUtYnJlYWtlcic7XHJcbiAgICAgICAgbGluZV9icmVha2VyLmlubmVySFRNTCA9ICc8YnV0dG9uIGNsYXNzPVwic2UtYnRuXCI+JyArIG9wdGlvbnMuaWNvbnMubGluZV9icmVhayArICc8L2J1dHRvbj4nO1xyXG4gICAgICAgIGNvbnN0IGxpbmVfYnJlYWtlcl90ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xyXG4gICAgICAgIGxpbmVfYnJlYWtlcl90LmNsYXNzTmFtZSArPSAnc2UtbGluZS1icmVha2VyLWNvbXBvbmVudCc7XHJcbiAgICAgICAgY29uc3QgbGluZV9icmVha2VyX2IgPSBsaW5lX2JyZWFrZXJfdC5jbG9uZU5vZGUodHJ1ZSk7XHJcbiAgICAgICAgbGluZV9icmVha2VyX3QuaW5uZXJIVE1MID0gbGluZV9icmVha2VyX2IuaW5uZXJIVE1MID0gb3B0aW9ucy5pY29ucy5saW5lX2JyZWFrO1xyXG4gICAgXHJcbiAgICAgICAgLy8gcmVzaXplIG9wZXJhdGlvbiBiYWNrZ3JvdW5kXHJcbiAgICAgICAgY29uc3QgcmVzaXplX2JhY2sgPSBkb2MuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcbiAgICAgICAgcmVzaXplX2JhY2suY2xhc3NOYW1lID0gJ3NlLXJlc2l6aW5nLWJhY2snO1xyXG5cclxuICAgICAgICAvLyB0b29sYmFyIGNvbnRhaW5lclxyXG4gICAgICAgIGNvbnN0IHRvb2xiYXJDb250YWluZXIgPSBvcHRpb25zLnRvb2xiYXJDb250YWluZXI7XHJcbiAgICAgICAgaWYgKHRvb2xiYXJDb250YWluZXIpIHtcclxuICAgICAgICAgICAgdG9vbGJhckNvbnRhaW5lci5hcHBlbmRDaGlsZCh0b29sX2Jhci5lbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAvKiogYXBwZW5kIGh0bWwgKi9cclxuICAgICAgICBlZGl0b3JfZGl2LmFwcGVuZENoaWxkKHRleHRhcmVhKTtcclxuICAgICAgICBpZiAocGxhY2Vob2xkZXJfc3BhbikgZWRpdG9yX2Rpdi5hcHBlbmRDaGlsZChwbGFjZWhvbGRlcl9zcGFuKTtcclxuICAgICAgICBpZiAoIXRvb2xiYXJDb250YWluZXIpIHJlbGF0aXZlLmFwcGVuZENoaWxkKHRvb2xfYmFyLmVsZW1lbnQpO1xyXG4gICAgICAgIHJlbGF0aXZlLmFwcGVuZENoaWxkKHN0aWNreV9kdW1teSk7XHJcbiAgICAgICAgcmVsYXRpdmUuYXBwZW5kQ2hpbGQoZWRpdG9yX2Rpdik7XHJcbiAgICAgICAgcmVsYXRpdmUuYXBwZW5kQ2hpbGQocmVzaXplX2JhY2spO1xyXG4gICAgICAgIHJlbGF0aXZlLmFwcGVuZENoaWxkKGxvYWRpbmdfYm94KTtcclxuICAgICAgICByZWxhdGl2ZS5hcHBlbmRDaGlsZChsaW5lX2JyZWFrZXIpO1xyXG4gICAgICAgIHJlbGF0aXZlLmFwcGVuZENoaWxkKGxpbmVfYnJlYWtlcl90KTtcclxuICAgICAgICByZWxhdGl2ZS5hcHBlbmRDaGlsZChsaW5lX2JyZWFrZXJfYik7XHJcbiAgICAgICAgaWYgKHJlc2l6aW5nX2JhcikgcmVsYXRpdmUuYXBwZW5kQ2hpbGQocmVzaXppbmdfYmFyKTtcclxuICAgICAgICB0b3BfZGl2LmFwcGVuZENoaWxkKHJlbGF0aXZlKTtcclxuXHJcbiAgICAgICAgdGV4dGFyZWEgPSB0aGlzLl9jaGVja0NvZGVNaXJyb3Iob3B0aW9ucywgdGV4dGFyZWEpO1xyXG4gICAgXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgY29uc3RydWN0ZWQ6IHtcclxuICAgICAgICAgICAgICAgIF90b3A6IHRvcF9kaXYsXHJcbiAgICAgICAgICAgICAgICBfcmVsYXRpdmU6IHJlbGF0aXZlLFxyXG4gICAgICAgICAgICAgICAgX3Rvb2xCYXI6IHRvb2xfYmFyLmVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICBfbWVudVRyYXk6IHRvb2xfYmFyLl9tZW51VHJheSxcclxuICAgICAgICAgICAgICAgIF9lZGl0b3JBcmVhOiBlZGl0b3JfZGl2LFxyXG4gICAgICAgICAgICAgICAgX3d5c2l3eWdBcmVhOiB3eXNpd3lnX2RpdixcclxuICAgICAgICAgICAgICAgIF9jb2RlQXJlYTogdGV4dGFyZWEsXHJcbiAgICAgICAgICAgICAgICBfcGxhY2Vob2xkZXI6IHBsYWNlaG9sZGVyX3NwYW4sXHJcbiAgICAgICAgICAgICAgICBfcmVzaXppbmdCYXI6IHJlc2l6aW5nX2JhcixcclxuICAgICAgICAgICAgICAgIF9uYXZpZ2F0aW9uOiBuYXZpZ2F0aW9uLFxyXG4gICAgICAgICAgICAgICAgX2NoYXJXcmFwcGVyOiBjaGFyX3dyYXBwZXIsXHJcbiAgICAgICAgICAgICAgICBfY2hhckNvdW50ZXI6IGNoYXJfY291bnRlcixcclxuICAgICAgICAgICAgICAgIF9sb2FkaW5nOiBsb2FkaW5nX2JveCxcclxuICAgICAgICAgICAgICAgIF9saW5lQnJlYWtlcjogbGluZV9icmVha2VyLFxyXG4gICAgICAgICAgICAgICAgX2xpbmVCcmVha2VyX3Q6IGxpbmVfYnJlYWtlcl90LFxyXG4gICAgICAgICAgICAgICAgX2xpbmVCcmVha2VyX2I6IGxpbmVfYnJlYWtlcl9iLFxyXG4gICAgICAgICAgICAgICAgX3Jlc2l6ZUJhY2s6IHJlc2l6ZV9iYWNrLFxyXG4gICAgICAgICAgICAgICAgX3N0aWNreUR1bW15OiBzdGlja3lfZHVtbXksXHJcbiAgICAgICAgICAgICAgICBfYXJyb3c6IGFycm93XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXHJcbiAgICAgICAgICAgIHBsdWdpbnM6IHRvb2xfYmFyLnBsdWdpbnMsXHJcbiAgICAgICAgICAgIHBsdWdpbkNhbGxCdXR0b25zOiB0b29sX2Jhci5wbHVnaW5DYWxsQnV0dG9ucyxcclxuICAgICAgICAgICAgX3Jlc3BvbnNpdmVCdXR0b25zOiB0b29sX2Jhci5yZXNwb25zaXZlQnV0dG9uc1xyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENoZWNrIHRoZSBDb2RlTWlycm9yIG9wdGlvbiB0byBhcHBseSB0aGUgQ29kZU1pcnJvciBhbmQgcmV0dXJuIHRoZSBDb2RlTWlycm9yIGVsZW1lbnQuXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBvcHRpb25zXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IHRleHRhcmVhIHRleHRhcmVhIGVsZW1lbnRcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIF9jaGVja0NvZGVNaXJyb3I6IGZ1bmN0aW9uIChvcHRpb25zLCB0ZXh0YXJlYSkge1xyXG4gICAgICAgIGlmIChvcHRpb25zLmNvZGVNaXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc3QgY21PcHRpb25zID0gW3tcclxuICAgICAgICAgICAgICAgIG1vZGU6ICdodG1sbWl4ZWQnLFxyXG4gICAgICAgICAgICAgICAgaHRtbE1vZGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGxpbmVXcmFwcGluZzogdHJ1ZVxyXG4gICAgICAgICAgICB9LCAob3B0aW9ucy5jb2RlTWlycm9yLm9wdGlvbnMgfHwge30pXS5yZWR1Y2UoZnVuY3Rpb24gKGluaXQsIG9wdGlvbikge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIG9wdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh1dGlsLmhhc093bihvcHRpb24sIGtleSkpIGluaXRba2V5XSA9IG9wdGlvbltrZXldO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluaXQ7XHJcbiAgICAgICAgICAgIH0sIHt9KTtcclxuXHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmhlaWdodCA9PT0gJ2F1dG8nKSB7XHJcbiAgICAgICAgICAgICAgICBjbU9wdGlvbnMudmlld3BvcnRNYXJnaW4gPSBJbmZpbml0eTtcclxuICAgICAgICAgICAgICAgIGNtT3B0aW9ucy5oZWlnaHQgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNvbnN0IGNtID0gb3B0aW9ucy5jb2RlTWlycm9yLnNyYy5mcm9tVGV4dEFyZWEodGV4dGFyZWEsIGNtT3B0aW9ucyk7XHJcbiAgICAgICAgICAgIGNtLmRpc3BsYXkud3JhcHBlci5zdHlsZS5jc3NUZXh0ID0gdGV4dGFyZWEuc3R5bGUuY3NzVGV4dDtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIG9wdGlvbnMuY29kZU1pcnJvckVkaXRvciA9IGNtO1xyXG4gICAgICAgICAgICB0ZXh0YXJlYSA9IGNtLmRpc3BsYXkud3JhcHBlcjtcclxuICAgICAgICAgICAgdGV4dGFyZWEuY2xhc3NOYW1lICs9ICcgc2Utd3JhcHBlci1jb2RlLW1pcnJvcic7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGV4dGFyZWE7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENoZWNrIGZvciBhIGthdGV4IG9iamVjdC5cclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBrYXRleCBrYXRleCBvYmplY3RcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIF9jaGVja0thdGV4TWF0aDogZnVuY3Rpb24gKGthdGV4KSB7XHJcbiAgICAgICAgaWYgKCFrYXRleCkgdGhyb3cgRXJyb3IoJ1tTVU5FRElUT1IuY3JlYXRlLmZhaWxdIFRvIHVzZSB0aGUgbWF0aCBidXR0b24geW91IG5lZWQgdG8gYWRkIGEgXCJrYXRleFwiIG9iamVjdCB0byB0aGUgb3B0aW9ucy4nKTtcclxuXHJcbiAgICAgICAgY29uc3Qga2F0ZXhPcHRpb25zID0gW3tcclxuICAgICAgICAgICAgdGhyb3dPbkVycm9yOiBmYWxzZSxcclxuICAgICAgICB9LCAoa2F0ZXgub3B0aW9ucyB8fCB7fSldLnJlZHVjZShmdW5jdGlvbiAoaW5pdCwgb3B0aW9uKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBvcHRpb24pIHtcclxuICAgICAgICAgICAgICAgIGlmICh1dGlsLmhhc093bihvcHRpb24sIGtleSkpIGluaXRba2V5XSA9IG9wdGlvbltrZXldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBpbml0O1xyXG4gICAgICAgIH0sIHt9KTtcclxuXHJcbiAgICAgICAga2F0ZXgub3B0aW9ucyA9IGthdGV4T3B0aW9ucztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWRkIG9yIHJlc2V0IG9wdGlvbnNcclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBtZXJnZU9wdGlvbnMgTmV3IG9wdGlvbnMgcHJvcGVydHlcclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0IENvbnRleHQgb2JqZWN0IG9mIGNvcmVcclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcmlnaW5PcHRpb25zIE9yaWdpbiBvcHRpb25zXHJcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBwbHVnaW5DYWxsQnV0dG9uc1xyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqL1xyXG4gICAgX3NldE9wdGlvbnM6IGZ1bmN0aW9uIChtZXJnZU9wdGlvbnMsIGNvbnRleHQsIG9yaWdpbk9wdGlvbnMpIHtcclxuICAgICAgICB0aGlzLl9pbml0T3B0aW9ucyhjb250ZXh0LmVsZW1lbnQub3JpZ2luRWxlbWVudCwgbWVyZ2VPcHRpb25zKTtcclxuXHJcbiAgICAgICAgY29uc3QgZWwgPSBjb250ZXh0LmVsZW1lbnQ7XHJcbiAgICAgICAgY29uc3QgcmVsYXRpdmUgPSBlbC5yZWxhdGl2ZTtcclxuICAgICAgICBjb25zdCBlZGl0b3JBcmVhID0gZWwuZWRpdG9yQXJlYTtcclxuICAgICAgICBjb25zdCBpc05ld1Rvb2xiYXJDb250YWluZXIgPSBtZXJnZU9wdGlvbnMudG9vbGJhckNvbnRhaW5lciAmJiBtZXJnZU9wdGlvbnMudG9vbGJhckNvbnRhaW5lciAhPT0gb3JpZ2luT3B0aW9ucy50b29sYmFyQ29udGFpbmVyO1xyXG4gICAgICAgIGNvbnN0IGlzTmV3VG9vbGJhciA9IG1lcmdlT3B0aW9ucy5sYW5nICE9PSBvcmlnaW5PcHRpb25zLmxhbmcgfHwgbWVyZ2VPcHRpb25zLmJ1dHRvbkxpc3QgIT09IG9yaWdpbk9wdGlvbnMuYnV0dG9uTGlzdCB8fCBtZXJnZU9wdGlvbnMubW9kZSAhPT0gb3JpZ2luT3B0aW9ucy5tb2RlIHx8IGlzTmV3VG9vbGJhckNvbnRhaW5lcjtcclxuXHJcbiAgICAgICAgY29uc3QgdG9vbF9iYXIgPSB0aGlzLl9jcmVhdGVUb29sQmFyKGRvY3VtZW50LCAoaXNOZXdUb29sYmFyID8gbWVyZ2VPcHRpb25zLmJ1dHRvbkxpc3QgOiBvcmlnaW5PcHRpb25zLmJ1dHRvbkxpc3QpLCBtZXJnZU9wdGlvbnMucGx1Z2lucywgbWVyZ2VPcHRpb25zKTtcclxuICAgICAgICBpZiAodG9vbF9iYXIucGx1Z2luQ2FsbEJ1dHRvbnMubWF0aCkgdGhpcy5fY2hlY2tLYXRleE1hdGgobWVyZ2VPcHRpb25zLmthdGV4KTtcclxuICAgICAgICBjb25zdCBhcnJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xyXG4gICAgICAgIGFycm93LmNsYXNzTmFtZSA9ICdzZS1hcnJvdyc7XHJcblxyXG4gICAgICAgIGlmIChpc05ld1Rvb2xiYXIpIHtcclxuICAgICAgICAgICAgdG9vbF9iYXIuZWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XHJcbiAgICAgICAgICAgIC8vIHRvb2xiYXIgY29udGFpbmVyXHJcbiAgICAgICAgICAgIGlmIChpc05ld1Rvb2xiYXJDb250YWluZXIpIHtcclxuICAgICAgICAgICAgICAgIG1lcmdlT3B0aW9ucy50b29sYmFyQ29udGFpbmVyLmFwcGVuZENoaWxkKHRvb2xfYmFyLmVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgZWwudG9vbGJhci5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKGVsLnRvb2xiYXIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZWwudG9vbGJhci5wYXJlbnRFbGVtZW50LnJlcGxhY2VDaGlsZCh0b29sX2Jhci5lbGVtZW50LCBlbC50b29sYmFyKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZWwudG9vbGJhciA9IHRvb2xfYmFyLmVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGVsLl9tZW51VHJheSA9IHRvb2xfYmFyLl9tZW51VHJheTtcclxuICAgICAgICAgICAgZWwuX2Fycm93ID0gYXJyb3c7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnN0IGluaXRFbGVtZW50cyA9IHRoaXMuX2luaXRFbGVtZW50cyhtZXJnZU9wdGlvbnMsIGVsLnRvcEFyZWEsIChpc05ld1Rvb2xiYXIgPyB0b29sX2Jhci5lbGVtZW50IDogZWwudG9vbGJhciksIGFycm93KTtcclxuXHJcbiAgICAgICAgY29uc3QgYm90dG9tQmFyID0gaW5pdEVsZW1lbnRzLmJvdHRvbUJhcjtcclxuICAgICAgICBjb25zdCB3eXNpd3lnRnJhbWUgPSBpbml0RWxlbWVudHMud3lzaXd5Z0ZyYW1lO1xyXG4gICAgICAgIGNvbnN0IHBsYWNlaG9sZGVyX3NwYW4gPSBpbml0RWxlbWVudHMucGxhY2Vob2xkZXI7XHJcbiAgICAgICAgbGV0IGNvZGUgPSBpbml0RWxlbWVudHMuY29kZVZpZXc7XHJcblxyXG4gICAgICAgIGlmIChlbC5yZXNpemluZ0JhcikgcmVsYXRpdmUucmVtb3ZlQ2hpbGQoZWwucmVzaXppbmdCYXIpO1xyXG4gICAgICAgIGlmIChib3R0b21CYXIucmVzaXppbmdCYXIpIHJlbGF0aXZlLmFwcGVuZENoaWxkKGJvdHRvbUJhci5yZXNpemluZ0Jhcik7XHJcblxyXG4gICAgICAgIGVkaXRvckFyZWEuaW5uZXJIVE1MID0gJyc7XHJcbiAgICAgICAgZWRpdG9yQXJlYS5hcHBlbmRDaGlsZChjb2RlKTtcclxuICAgICAgICBpZiAocGxhY2Vob2xkZXJfc3BhbikgZWRpdG9yQXJlYS5hcHBlbmRDaGlsZChwbGFjZWhvbGRlcl9zcGFuKTtcclxuXHJcbiAgICAgICAgY29kZSA9IHRoaXMuX2NoZWNrQ29kZU1pcnJvcihtZXJnZU9wdGlvbnMsIGNvZGUpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGVsLnJlc2l6aW5nQmFyID0gYm90dG9tQmFyLnJlc2l6aW5nQmFyO1xyXG4gICAgICAgIGVsLm5hdmlnYXRpb24gPSBib3R0b21CYXIubmF2aWdhdGlvbjtcclxuICAgICAgICBlbC5jaGFyV3JhcHBlciA9IGJvdHRvbUJhci5jaGFyV3JhcHBlcjtcclxuICAgICAgICBlbC5jaGFyQ291bnRlciA9IGJvdHRvbUJhci5jaGFyQ291bnRlcjtcclxuICAgICAgICBlbC53eXNpd3lnRnJhbWUgPSB3eXNpd3lnRnJhbWU7XHJcbiAgICAgICAgZWwuY29kZSA9IGNvZGU7XHJcbiAgICAgICAgZWwucGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlcl9zcGFuO1xyXG5cclxuICAgICAgICBpZiAobWVyZ2VPcHRpb25zLnJ0bCkgdXRpbC5hZGRDbGFzcyhlbC50b3BBcmVhLCAnc2UtcnRsJyk7XHJcbiAgICAgICAgZWxzZSB1dGlsLnJlbW92ZUNsYXNzKGVsLnRvcEFyZWEsICdzZS1ydGwnKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgY2FsbEJ1dHRvbnM6IHRvb2xfYmFyLnBsdWdpbkNhbGxCdXR0b25zLFxyXG4gICAgICAgICAgICBwbHVnaW5zOiB0b29sX2Jhci5wbHVnaW5zLFxyXG4gICAgICAgICAgICB0b29sYmFyOiB0b29sX2JhclxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEluaXRpYWxpemUgcHJvcGVydHkgb2Ygc3VuZWRpdG9yIGVsZW1lbnRzXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBPcHRpb25zXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IHRvcERpdiBTdW5lZGl0b3IgdG9wIGRpdlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSB0b29sQmFyIFRvb2wgYmFyXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IHRvb2xCYXJBcnJvdyBUb29sIGJhciBhcnJvdyAoYmFsbG9vbiBlZGl0b3IpXHJcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBCb3R0b20gYmFyIGVsZW1lbnRzIChyZXNpemluZ0JhciwgbmF2aWdhdGlvbiwgY2hhcldyYXBwZXIsIGNoYXJDb3VudGVyKVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqL1xyXG4gICAgX2luaXRFbGVtZW50czogZnVuY3Rpb24gKG9wdGlvbnMsIHRvcERpdiwgdG9vbEJhciwgdG9vbEJhckFycm93KSB7XHJcbiAgICAgICAgLyoqIHRvcCBkaXYgKi9cclxuICAgICAgICB0b3BEaXYuc3R5bGUuY3NzVGV4dCA9IG9wdGlvbnMuX2VkaXRvclN0eWxlcy50b3A7XHJcblxyXG4gICAgICAgIC8qKiB0b29sYmFyICovXHJcbiAgICAgICAgaWYgKC9pbmxpbmUvaS50ZXN0KG9wdGlvbnMubW9kZSkpIHtcclxuICAgICAgICAgICAgdG9vbEJhci5jbGFzc05hbWUgKz0gJyBzZS10b29sYmFyLWlubGluZSc7XHJcbiAgICAgICAgICAgIHRvb2xCYXIuc3R5bGUud2lkdGggPSBvcHRpb25zLnRvb2xiYXJXaWR0aDtcclxuICAgICAgICB9IGVsc2UgaWYgKC9iYWxsb29uL2kudGVzdChvcHRpb25zLm1vZGUpKSB7XHJcbiAgICAgICAgICAgIHRvb2xCYXIuY2xhc3NOYW1lICs9ICcgc2UtdG9vbGJhci1iYWxsb29uJztcclxuICAgICAgICAgICAgdG9vbEJhci5zdHlsZS53aWR0aCA9IG9wdGlvbnMudG9vbGJhcldpZHRoO1xyXG4gICAgICAgICAgICB0b29sQmFyLmFwcGVuZENoaWxkKHRvb2xCYXJBcnJvdyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKiogZWRpdG9yICovXHJcbiAgICAgICAgLy8gd3lzaXd5ZyBkaXYgb3IgaWZyYW1lXHJcbiAgICAgICAgY29uc3Qgd3lzaXd5Z0RpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIW9wdGlvbnMuaWZyYW1lID8gJ0RJVicgOiAnSUZSQU1FJyk7XHJcbiAgICAgICAgd3lzaXd5Z0Rpdi5jbGFzc05hbWUgPSAnc2Utd3JhcHBlci1pbm5lciBzZS13cmFwcGVyLXd5c2l3eWcnO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICghb3B0aW9ucy5pZnJhbWUpIHtcclxuICAgICAgICAgICAgd3lzaXd5Z0Rpdi5zZXRBdHRyaWJ1dGUoJ2NvbnRlbnRlZGl0YWJsZScsIHRydWUpO1xyXG4gICAgICAgICAgICB3eXNpd3lnRGl2LnNldEF0dHJpYnV0ZSgnc2Nyb2xsaW5nJywgJ2F1dG8nKTtcclxuICAgICAgICAgICAgd3lzaXd5Z0Rpdi5jbGFzc05hbWUgKz0gJyAnICsgb3B0aW9ucy5fZWRpdGFibGVDbGFzcztcclxuICAgICAgICAgICAgd3lzaXd5Z0Rpdi5zdHlsZS5jc3NUZXh0ID0gb3B0aW9ucy5fZWRpdG9yU3R5bGVzLmZyYW1lICsgb3B0aW9ucy5fZWRpdG9yU3R5bGVzLmVkaXRvcjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB3eXNpd3lnRGl2LmFsbG93RnVsbHNjcmVlbiA9IHRydWU7XHJcbiAgICAgICAgICAgIHd5c2l3eWdEaXYuZnJhbWVCb3JkZXIgPSAwO1xyXG4gICAgICAgICAgICB3eXNpd3lnRGl2LnN0eWxlLmNzc1RleHQgPSBvcHRpb25zLl9lZGl0b3JTdHlsZXMuZnJhbWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0ZXh0YXJlYSBmb3IgY29kZSB2aWV3XHJcbiAgICAgICAgY29uc3QgdGV4dGFyZWEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdURVhUQVJFQScpO1xyXG4gICAgICAgIHRleHRhcmVhLmNsYXNzTmFtZSA9ICdzZS13cmFwcGVyLWlubmVyIHNlLXdyYXBwZXItY29kZSc7XHJcbiAgICAgICAgdGV4dGFyZWEuc3R5bGUuY3NzVGV4dCA9IG9wdGlvbnMuX2VkaXRvclN0eWxlcy5mcmFtZTtcclxuICAgICAgICB0ZXh0YXJlYS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIGlmIChvcHRpb25zLmhlaWdodCA9PT0gJ2F1dG8nKSB0ZXh0YXJlYS5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xyXG5cclxuICAgICAgICAvKiogcmVzaXplIGJhciAqL1xyXG4gICAgICAgIGxldCByZXNpemluZ0JhciA9IG51bGw7XHJcbiAgICAgICAgbGV0IG5hdmlnYXRpb24gPSBudWxsO1xyXG4gICAgICAgIGxldCBjaGFyV3JhcHBlciA9IG51bGw7XHJcbiAgICAgICAgbGV0IGNoYXJDb3VudGVyID0gbnVsbDtcclxuICAgICAgICBpZiAob3B0aW9ucy5yZXNpemluZ0Jhcikge1xyXG4gICAgICAgICAgICByZXNpemluZ0JhciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xyXG4gICAgICAgICAgICByZXNpemluZ0Jhci5jbGFzc05hbWUgPSAnc2UtcmVzaXppbmctYmFyIHN1bi1lZGl0b3ItY29tbW9uJztcclxuXHJcbiAgICAgICAgICAgIC8qKiBuYXZpZ2F0aW9uICovXHJcbiAgICAgICAgICAgIG5hdmlnYXRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdESVYnKTtcclxuICAgICAgICAgICAgbmF2aWdhdGlvbi5jbGFzc05hbWUgPSAnc2UtbmF2aWdhdGlvbiBzdW4tZWRpdG9yLWNvbW1vbic7XHJcbiAgICAgICAgICAgIHJlc2l6aW5nQmFyLmFwcGVuZENoaWxkKG5hdmlnYXRpb24pO1xyXG5cclxuICAgICAgICAgICAgLyoqIGNoYXIgY291bnRlciAqL1xyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5jaGFyQ291bnRlcikge1xyXG4gICAgICAgICAgICAgICAgY2hhcldyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdESVYnKTtcclxuICAgICAgICAgICAgICAgIGNoYXJXcmFwcGVyLmNsYXNzTmFtZSA9ICdzZS1jaGFyLWNvdW50ZXItd3JhcHBlcic7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuY2hhckNvdW50ZXJMYWJlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJMYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ1NQQU4nKTtcclxuICAgICAgICAgICAgICAgICAgICBjaGFyTGFiZWwuY2xhc3NOYW1lID0gJ3NlLWNoYXItbGFiZWwnO1xyXG4gICAgICAgICAgICAgICAgICAgIGNoYXJMYWJlbC50ZXh0Q29udGVudCA9IG9wdGlvbnMuY2hhckNvdW50ZXJMYWJlbDtcclxuICAgICAgICAgICAgICAgICAgICBjaGFyV3JhcHBlci5hcHBlbmRDaGlsZChjaGFyTGFiZWwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICBjaGFyQ291bnRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ1NQQU4nKTtcclxuICAgICAgICAgICAgICAgIGNoYXJDb3VudGVyLmNsYXNzTmFtZSA9ICdzZS1jaGFyLWNvdW50ZXInO1xyXG4gICAgICAgICAgICAgICAgY2hhckNvdW50ZXIudGV4dENvbnRlbnQgPSAnMCc7XHJcbiAgICAgICAgICAgICAgICBjaGFyV3JhcHBlci5hcHBlbmRDaGlsZChjaGFyQ291bnRlcik7XHJcbiAgICBcclxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm1heENoYXJDb3VudCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX21heCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ1NQQU4nKTtcclxuICAgICAgICAgICAgICAgICAgICBjaGFyX21heC50ZXh0Q29udGVudCA9ICcgLyAnICsgb3B0aW9ucy5tYXhDaGFyQ291bnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hhcldyYXBwZXIuYXBwZW5kQ2hpbGQoY2hhcl9tYXgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJlc2l6aW5nQmFyLmFwcGVuZENoaWxkKGNoYXJXcmFwcGVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICBsZXQgcGxhY2Vob2xkZXIgPSBudWxsO1xyXG4gICAgICAgIGlmIChvcHRpb25zLnBsYWNlaG9sZGVyKSB7XHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnU1BBTicpO1xyXG4gICAgICAgICAgICBwbGFjZWhvbGRlci5jbGFzc05hbWUgPSAnc2UtcGxhY2Vob2xkZXInO1xyXG4gICAgICAgICAgICBwbGFjZWhvbGRlci5pbm5lclRleHQgPSBvcHRpb25zLnBsYWNlaG9sZGVyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgYm90dG9tQmFyOiB7XHJcbiAgICAgICAgICAgICAgICByZXNpemluZ0JhcjogcmVzaXppbmdCYXIsXHJcbiAgICAgICAgICAgICAgICBuYXZpZ2F0aW9uOiBuYXZpZ2F0aW9uLFxyXG4gICAgICAgICAgICAgICAgY2hhcldyYXBwZXI6IGNoYXJXcmFwcGVyLFxyXG4gICAgICAgICAgICAgICAgY2hhckNvdW50ZXI6IGNoYXJDb3VudGVyXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHd5c2l3eWdGcmFtZTogd3lzaXd5Z0RpdixcclxuICAgICAgICAgICAgY29kZVZpZXc6IHRleHRhcmVhLFxyXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXJcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBJbml0aWFsaXplIG9wdGlvbnNcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCBPcHRpb25zIG9iamVjdFxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgT3B0aW9ucyBvYmplY3RcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIF9pbml0T3B0aW9uczogZnVuY3Rpb24gKGVsZW1lbnQsIG9wdGlvbnMpIHtcclxuICAgICAgICAvKiogVmFsdWVzICovXHJcbiAgICAgICAgb3B0aW9ucy5sYW5nID0gb3B0aW9ucy5sYW5nIHx8IF9kZWZhdWx0TGFuZztcclxuICAgICAgICBvcHRpb25zLmRlZmF1bHRUYWcgPSB0eXBlb2Ygb3B0aW9ucy5kZWZhdWx0VGFnID09PSAnc3RyaW5nJyA/IG9wdGlvbnMuZGVmYXVsdFRhZyA6ICdwJztcclxuICAgICAgICBjb25zdCB0ZXh0VGFncyA9IG9wdGlvbnMudGV4dFRhZ3MgPSBbe2JvbGQ6ICdTVFJPTkcnLCB1bmRlcmxpbmU6ICdVJywgaXRhbGljOiAnRU0nLCBzdHJpa2U6ICdERUwnLCBzdWI6ICdTVUInLCBzdXA6ICdTVVAnfSwgKG9wdGlvbnMudGV4dFRhZ3MgfHwge30pXS5yZWR1Y2UoZnVuY3Rpb24gKF9kZWZhdWx0LCBfbmV3KSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBfbmV3KSB7XHJcbiAgICAgICAgICAgICAgICBfZGVmYXVsdFtrZXldID0gX25ld1trZXldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBfZGVmYXVsdDtcclxuICAgICAgICB9LCB7fSk7XHJcbiAgICAgICAgb3B0aW9ucy5fdGV4dFRhZ3NNYXAgPSB7XHJcbiAgICAgICAgICAgICdzdHJvbmcnOiB0ZXh0VGFncy5ib2xkLnRvTG93ZXJDYXNlKCksXHJcbiAgICAgICAgICAgICdiJzogdGV4dFRhZ3MuYm9sZC50b0xvd2VyQ2FzZSgpLFxyXG4gICAgICAgICAgICAndSc6IHRleHRUYWdzLnVuZGVybGluZS50b0xvd2VyQ2FzZSgpLFxyXG4gICAgICAgICAgICAnaW5zJzogdGV4dFRhZ3MudW5kZXJsaW5lLnRvTG93ZXJDYXNlKCksXHJcbiAgICAgICAgICAgICdlbSc6IHRleHRUYWdzLml0YWxpYy50b0xvd2VyQ2FzZSgpLFxyXG4gICAgICAgICAgICAnaSc6IHRleHRUYWdzLml0YWxpYy50b0xvd2VyQ2FzZSgpLFxyXG4gICAgICAgICAgICAnZGVsJzogdGV4dFRhZ3Muc3RyaWtlLnRvTG93ZXJDYXNlKCksXHJcbiAgICAgICAgICAgICdzdHJpa2UnOiB0ZXh0VGFncy5zdHJpa2UudG9Mb3dlckNhc2UoKSxcclxuICAgICAgICAgICAgJ3MnOiB0ZXh0VGFncy5zdHJpa2UudG9Mb3dlckNhc2UoKSxcclxuICAgICAgICAgICAgJ3N1Yic6IHRleHRUYWdzLnN1Yi50b0xvd2VyQ2FzZSgpLFxyXG4gICAgICAgICAgICAnc3VwJzogdGV4dFRhZ3Muc3VwLnRvTG93ZXJDYXNlKClcclxuICAgICAgICB9O1xyXG4gICAgICAgIG9wdGlvbnMudmFsdWUgPSB0eXBlb2Ygb3B0aW9ucy52YWx1ZSA9PT0gJ3N0cmluZycgPyBvcHRpb25zLnZhbHVlIDogbnVsbDtcclxuICAgICAgICBvcHRpb25zLmhpc3RvcnlTdGFja0RlbGF5VGltZSA9IHR5cGVvZiBvcHRpb25zLmhpc3RvcnlTdGFja0RlbGF5VGltZSA9PT0gJ251bWJlcicgPyBvcHRpb25zLmhpc3RvcnlTdGFja0RlbGF5VGltZSA6IDQwMDtcclxuICAgICAgICAvKiogV2hpdGVsaXN0ICovXHJcbiAgICAgICAgY29uc3Qgd2hpdGVsaXN0ID0gJ2JyfHB8ZGl2fHByZXxibG9ja3F1b3RlfGgxfGgyfGgzfGg0fGg1fGg2fG9sfHVsfGxpfGhyfGZpZ3VyZXxmaWdjYXB0aW9ufGltZ3xpZnJhbWV8YXVkaW98dmlkZW98c291cmNlfHRhYmxlfHRoZWFkfHRib2R5fHRyfHRofHRkfGF8YnxzdHJvbmd8dmFyfGl8ZW18dXxpbnN8c3xzcGFufHN0cmlrZXxkZWx8c3VifHN1cHxjb2RlfHN2Z3xwYXRofGRldGFpbHN8c3VtbWFyeSc7XHJcbiAgICAgICAgb3B0aW9ucy5fZGVmYXVsdFRhZ3NXaGl0ZWxpc3QgPSB0eXBlb2Ygb3B0aW9ucy5fZGVmYXVsdFRhZ3NXaGl0ZWxpc3QgPT09ICdzdHJpbmcnID8gb3B0aW9ucy5fZGVmYXVsdFRhZ3NXaGl0ZWxpc3QgOiB3aGl0ZWxpc3Q7XHJcbiAgICAgICAgb3B0aW9ucy5fZWRpdG9yVGFnc1doaXRlbGlzdCA9IHRoaXMuX3NldFdoaXRlbGlzdChvcHRpb25zLl9kZWZhdWx0VGFnc1doaXRlbGlzdCArICh0eXBlb2Ygb3B0aW9ucy5hZGRUYWdzV2hpdGVsaXN0ID09PSAnc3RyaW5nJyAmJiBvcHRpb25zLmFkZFRhZ3NXaGl0ZWxpc3QubGVuZ3RoID4gMCA/ICd8JyArIG9wdGlvbnMuYWRkVGFnc1doaXRlbGlzdCA6ICcnKSwgb3B0aW9ucy50YWdzQmxhY2tsaXN0KTtcclxuICAgICAgICBvcHRpb25zLnBhc3RlVGFnc1doaXRlbGlzdCA9IHRoaXMuX3NldFdoaXRlbGlzdCh0eXBlb2Ygb3B0aW9ucy5wYXN0ZVRhZ3NXaGl0ZWxpc3QgPT09ICdzdHJpbmcnID8gb3B0aW9ucy5wYXN0ZVRhZ3NXaGl0ZWxpc3QgOiBvcHRpb25zLl9lZGl0b3JUYWdzV2hpdGVsaXN0LCBvcHRpb25zLnBhc3RlVGFnc0JsYWNrbGlzdCk7XHJcbiAgICAgICAgb3B0aW9ucy5hdHRyaWJ1dGVzV2hpdGVsaXN0ID0gKCFvcHRpb25zLmF0dHJpYnV0ZXNXaGl0ZWxpc3QgfHwgdHlwZW9mIG9wdGlvbnMuYXR0cmlidXRlc1doaXRlbGlzdCAhPT0gJ29iamVjdCcpID8gbnVsbCA6IG9wdGlvbnMuYXR0cmlidXRlc1doaXRlbGlzdDtcclxuICAgICAgICAvKiogTGF5b3V0ICovXHJcbiAgICAgICAgb3B0aW9ucy5tb2RlID0gb3B0aW9ucy5tb2RlIHx8ICdjbGFzc2ljJzsgLy8gY2xhc3NpYywgaW5saW5lLCBiYWxsb29uLCBiYWxsb29uLWFsd2F5c1xyXG4gICAgICAgIG9wdGlvbnMucnRsID0gISFvcHRpb25zLnJ0bDtcclxuICAgICAgICBvcHRpb25zLl9lZGl0YWJsZUNsYXNzID0gJ3N1bi1lZGl0b3ItZWRpdGFibGUnICsgKG9wdGlvbnMucnRsID8gJyBzZS1ydGwnIDogJycpO1xyXG4gICAgICAgIG9wdGlvbnMuX3ByaW50Q2xhc3MgPSB0eXBlb2Ygb3B0aW9ucy5fcHJpbnRDbGFzcyA9PT0gJ3N0cmluZycgPyBvcHRpb25zLl9wcmludENsYXNzIDogbnVsbDtcclxuICAgICAgICBvcHRpb25zLnRvb2xiYXJXaWR0aCA9IG9wdGlvbnMudG9vbGJhcldpZHRoID8gKHV0aWwuaXNOdW1iZXIob3B0aW9ucy50b29sYmFyV2lkdGgpID8gb3B0aW9ucy50b29sYmFyV2lkdGggKyAncHgnIDogb3B0aW9ucy50b29sYmFyV2lkdGgpIDogJ2F1dG8nO1xyXG4gICAgICAgIG9wdGlvbnMudG9vbGJhckNvbnRhaW5lciA9IHR5cGVvZiBvcHRpb25zLnRvb2xiYXJDb250YWluZXIgPT09ICdzdHJpbmcnID8gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihvcHRpb25zLnRvb2xiYXJDb250YWluZXIpIDogb3B0aW9ucy50b29sYmFyQ29udGFpbmVyO1xyXG4gICAgICAgIG9wdGlvbnMuc3RpY2t5VG9vbGJhciA9ICgvYmFsbG9vbi9pLnRlc3Qob3B0aW9ucy5tb2RlKSB8fCAhIW9wdGlvbnMudG9vbGJhckNvbnRhaW5lcikgPyAtMSA6IG9wdGlvbnMuc3RpY2t5VG9vbGJhciA9PT0gdW5kZWZpbmVkID8gMCA6ICgvXlxcZCsvLnRlc3Qob3B0aW9ucy5zdGlja3lUb29sYmFyKSA/IHV0aWwuZ2V0TnVtYmVyKG9wdGlvbnMuc3RpY2t5VG9vbGJhciwgMCkgOiAtMSk7XHJcbiAgICAgICAgb3B0aW9ucy5mdWxsU2NyZWVuT2Zmc2V0ID0gb3B0aW9ucy5mdWxsU2NyZWVuT2Zmc2V0ID09PSB1bmRlZmluZWQgPyAwIDogKC9eXFxkKy8udGVzdChvcHRpb25zLmZ1bGxTY3JlZW5PZmZzZXQpID8gdXRpbC5nZXROdW1iZXIob3B0aW9ucy5mdWxsU2NyZWVuT2Zmc2V0LCAwKSA6IDApO1xyXG4gICAgICAgIG9wdGlvbnMuaWZyYW1lID0gb3B0aW9ucy5mdWxsUGFnZSB8fCBvcHRpb25zLmlmcmFtZTtcclxuICAgICAgICBvcHRpb25zLmZ1bGxQYWdlID0gISFvcHRpb25zLmZ1bGxQYWdlO1xyXG4gICAgICAgIG9wdGlvbnMuaWZyYW1lQ1NTRmlsZU5hbWUgPSBvcHRpb25zLmlmcmFtZSA/IHR5cGVvZiBvcHRpb25zLmlmcmFtZUNTU0ZpbGVOYW1lID09PSAnc3RyaW5nJyA/IFtvcHRpb25zLmlmcmFtZUNTU0ZpbGVOYW1lXSA6IChvcHRpb25zLmlmcmFtZUNTU0ZpbGVOYW1lIHx8IFsnc3VuZWRpdG9yJ10pIDogbnVsbDtcclxuICAgICAgICBvcHRpb25zLnByZXZpZXdUZW1wbGF0ZSA9IHR5cGVvZiBvcHRpb25zLnByZXZpZXdUZW1wbGF0ZSA9PT0gJ3N0cmluZycgPyBvcHRpb25zLnByZXZpZXdUZW1wbGF0ZSA6IG51bGw7XHJcbiAgICAgICAgb3B0aW9ucy5wcmludFRlbXBsYXRlID0gdHlwZW9mIG9wdGlvbnMucHJpbnRUZW1wbGF0ZSA9PT0gJ3N0cmluZycgPyBvcHRpb25zLnByaW50VGVtcGxhdGUgOiBudWxsO1xyXG4gICAgICAgIC8qKiBDb2RlTWlycm9yIG9iamVjdCAqL1xyXG4gICAgICAgIG9wdGlvbnMuY29kZU1pcnJvciA9IG9wdGlvbnMuY29kZU1pcnJvciA/IG9wdGlvbnMuY29kZU1pcnJvci5zcmMgPyBvcHRpb25zLmNvZGVNaXJyb3IgOiB7c3JjOiBvcHRpb25zLmNvZGVNaXJyb3J9IDogbnVsbDtcclxuICAgICAgICAvKioga2F0ZXggb2JqZWN0IChNYXRoIHBsdWdpbikgKi9cclxuICAgICAgICBvcHRpb25zLmthdGV4ID0gb3B0aW9ucy5rYXRleCA/IG9wdGlvbnMua2F0ZXguc3JjID8gb3B0aW9ucy5rYXRleCA6IHtzcmM6IG9wdGlvbnMua2F0ZXh9IDogbnVsbDtcclxuICAgICAgICBvcHRpb25zLm1hdGhGb250U2l6ZSA9ICEhb3B0aW9ucy5tYXRoRm9udFNpemUgPyBvcHRpb25zLm1hdGhGb250U2l6ZSA6IFtcclxuICAgICAgICAgICAge3RleHQ6ICcxJywgdmFsdWU6ICcxZW0nfSxcclxuICAgICAgICAgICAge3RleHQ6ICcxLjUnLCB2YWx1ZTogJzEuNWVtJ30sXHJcbiAgICAgICAgICAgIHt0ZXh0OiAnMicsIHZhbHVlOiAnMmVtJ30sXHJcbiAgICAgICAgICAgIHt0ZXh0OiAnMi41JywgdmFsdWU6ICcyLjVlbSd9XHJcbiAgICAgICAgXTtcclxuICAgICAgICAvKiogRGlzcGxheSAqL1xyXG4gICAgICAgIG9wdGlvbnMucG9zaXRpb24gPSB0eXBlb2Ygb3B0aW9ucy5wb3NpdGlvbiA9PT0gJ3N0cmluZycgPyBvcHRpb25zLnBvc2l0aW9uIDogbnVsbDtcclxuICAgICAgICBvcHRpb25zLmRpc3BsYXkgPSBvcHRpb25zLmRpc3BsYXkgfHwgKGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnIHx8ICFlbGVtZW50LnN0eWxlLmRpc3BsYXkgPyAnYmxvY2snIDogZWxlbWVudC5zdHlsZS5kaXNwbGF5KTtcclxuICAgICAgICBvcHRpb25zLnBvcHVwRGlzcGxheSA9IG9wdGlvbnMucG9wdXBEaXNwbGF5IHx8ICdmdWxsJztcclxuICAgICAgICAvKiogQm90dG9tIHJlc2l6aW5nIGJhciAqL1xyXG4gICAgICAgIG9wdGlvbnMucmVzaXppbmdCYXIgPSBvcHRpb25zLnJlc2l6aW5nQmFyID09PSB1bmRlZmluZWQgPyAoL2lubGluZXxiYWxsb29uL2kudGVzdChvcHRpb25zLm1vZGUpID8gZmFsc2UgOiB0cnVlKSA6IG9wdGlvbnMucmVzaXppbmdCYXI7XHJcbiAgICAgICAgb3B0aW9ucy5zaG93UGF0aExhYmVsID0gIW9wdGlvbnMucmVzaXppbmdCYXIgPyBmYWxzZSA6IHR5cGVvZiBvcHRpb25zLnNob3dQYXRoTGFiZWwgPT09ICdib29sZWFuJyA/IG9wdGlvbnMuc2hvd1BhdGhMYWJlbCA6IHRydWU7XHJcbiAgICAgICAgLyoqIENoYXJhY3RlciBjb3VudCAqL1xyXG4gICAgICAgIG9wdGlvbnMuY2hhckNvdW50ZXIgPSBvcHRpb25zLm1heENoYXJDb3VudCA+IDAgPyB0cnVlIDogdHlwZW9mIG9wdGlvbnMuY2hhckNvdW50ZXIgPT09ICdib29sZWFuJyA/IG9wdGlvbnMuY2hhckNvdW50ZXIgOiBmYWxzZTtcclxuICAgICAgICBvcHRpb25zLmNoYXJDb3VudGVyVHlwZSA9IHR5cGVvZiBvcHRpb25zLmNoYXJDb3VudGVyVHlwZSA9PT0gJ3N0cmluZycgPyBvcHRpb25zLmNoYXJDb3VudGVyVHlwZSA6ICdjaGFyJztcclxuICAgICAgICBvcHRpb25zLmNoYXJDb3VudGVyTGFiZWwgPSB0eXBlb2Ygb3B0aW9ucy5jaGFyQ291bnRlckxhYmVsID09PSAnc3RyaW5nJyA/IG9wdGlvbnMuY2hhckNvdW50ZXJMYWJlbC50cmltKCkgOiBudWxsO1xyXG4gICAgICAgIG9wdGlvbnMubWF4Q2hhckNvdW50ID0gdXRpbC5pc051bWJlcihvcHRpb25zLm1heENoYXJDb3VudCkgJiYgb3B0aW9ucy5tYXhDaGFyQ291bnQgPiAtMSA/IG9wdGlvbnMubWF4Q2hhckNvdW50ICogMSA6IG51bGw7XHJcbiAgICAgICAgLyoqIFdpZHRoIHNpemUgKi9cclxuICAgICAgICBvcHRpb25zLndpZHRoID0gb3B0aW9ucy53aWR0aCA/ICh1dGlsLmlzTnVtYmVyKG9wdGlvbnMud2lkdGgpID8gb3B0aW9ucy53aWR0aCArICdweCcgOiBvcHRpb25zLndpZHRoKSA6IChlbGVtZW50LmNsaWVudFdpZHRoID8gZWxlbWVudC5jbGllbnRXaWR0aCArICdweCcgOiAnMTAwJScpO1xyXG4gICAgICAgIG9wdGlvbnMubWluV2lkdGggPSAodXRpbC5pc051bWJlcihvcHRpb25zLm1pbldpZHRoKSA/IG9wdGlvbnMubWluV2lkdGggKyAncHgnIDogb3B0aW9ucy5taW5XaWR0aCkgfHwgJyc7XHJcbiAgICAgICAgb3B0aW9ucy5tYXhXaWR0aCA9ICh1dGlsLmlzTnVtYmVyKG9wdGlvbnMubWF4V2lkdGgpID8gb3B0aW9ucy5tYXhXaWR0aCArICdweCcgOiBvcHRpb25zLm1heFdpZHRoKSB8fCAnJztcclxuICAgICAgICAvKiogSGVpZ2h0IHNpemUgKi9cclxuICAgICAgICBvcHRpb25zLmhlaWdodCA9IG9wdGlvbnMuaGVpZ2h0ID8gKHV0aWwuaXNOdW1iZXIob3B0aW9ucy5oZWlnaHQpID8gb3B0aW9ucy5oZWlnaHQgKyAncHgnIDogb3B0aW9ucy5oZWlnaHQpIDogKGVsZW1lbnQuY2xpZW50SGVpZ2h0ID8gZWxlbWVudC5jbGllbnRIZWlnaHQgKyAncHgnIDogJ2F1dG8nKTtcclxuICAgICAgICBvcHRpb25zLm1pbkhlaWdodCA9ICh1dGlsLmlzTnVtYmVyKG9wdGlvbnMubWluSGVpZ2h0KSA/IG9wdGlvbnMubWluSGVpZ2h0ICsgJ3B4JyA6IG9wdGlvbnMubWluSGVpZ2h0KSB8fCAnJztcclxuICAgICAgICBvcHRpb25zLm1heEhlaWdodCA9ICh1dGlsLmlzTnVtYmVyKG9wdGlvbnMubWF4SGVpZ2h0KSA/IG9wdGlvbnMubWF4SGVpZ2h0ICsgJ3B4JyA6IG9wdGlvbnMubWF4SGVpZ2h0KSB8fCAnJztcclxuICAgICAgICAvKiogRWRpdGluZyBhcmVhIGRlZmF1bHQgc3R5bGUgKi9cclxuICAgICAgICBvcHRpb25zLmRlZmF1bHRTdHlsZSA9IHR5cGVvZiBvcHRpb25zLmRlZmF1bHRTdHlsZSA9PT0gJ3N0cmluZycgPyBvcHRpb25zLmRlZmF1bHRTdHlsZSA6ICcnO1xyXG4gICAgICAgIC8qKiBEZWZpbmluZyBtZW51IGl0ZW1zICovXHJcbiAgICAgICAgb3B0aW9ucy5mb250ID0gIW9wdGlvbnMuZm9udCA/IG51bGwgOiBvcHRpb25zLmZvbnQ7XHJcbiAgICAgICAgb3B0aW9ucy5mb250U2l6ZSA9ICFvcHRpb25zLmZvbnRTaXplID8gbnVsbCA6IG9wdGlvbnMuZm9udFNpemU7XHJcbiAgICAgICAgb3B0aW9ucy5mb3JtYXRzID0gIW9wdGlvbnMuZm9ybWF0cyA/IG51bGwgOiBvcHRpb25zLmZvcm1hdHM7XHJcbiAgICAgICAgb3B0aW9ucy5jb2xvckxpc3QgPSAhb3B0aW9ucy5jb2xvckxpc3QgPyBudWxsIDogb3B0aW9ucy5jb2xvckxpc3Q7XHJcbiAgICAgICAgb3B0aW9ucy5saW5lSGVpZ2h0cyA9ICFvcHRpb25zLmxpbmVIZWlnaHRzID8gbnVsbCA6IG9wdGlvbnMubGluZUhlaWdodHM7XHJcbiAgICAgICAgb3B0aW9ucy5wYXJhZ3JhcGhTdHlsZXMgPSAhb3B0aW9ucy5wYXJhZ3JhcGhTdHlsZXMgPyBudWxsIDogb3B0aW9ucy5wYXJhZ3JhcGhTdHlsZXM7XHJcbiAgICAgICAgb3B0aW9ucy50ZXh0U3R5bGVzID0gIW9wdGlvbnMudGV4dFN0eWxlcyA/IG51bGwgOiBvcHRpb25zLnRleHRTdHlsZXM7XHJcbiAgICAgICAgb3B0aW9ucy5mb250U2l6ZVVuaXQgPSB0eXBlb2Ygb3B0aW9ucy5mb250U2l6ZVVuaXQgPT09ICdzdHJpbmcnID8gKG9wdGlvbnMuZm9udFNpemVVbml0LnRyaW0oKSB8fCAncHgnKSA6ICdweCc7XHJcbiAgICAgICAgLyoqIEltYWdlICovXHJcbiAgICAgICAgb3B0aW9ucy5pbWFnZVJlc2l6aW5nID0gb3B0aW9ucy5pbWFnZVJlc2l6aW5nID09PSB1bmRlZmluZWQgPyB0cnVlIDogb3B0aW9ucy5pbWFnZVJlc2l6aW5nO1xyXG4gICAgICAgIG9wdGlvbnMuaW1hZ2VIZWlnaHRTaG93ID0gb3B0aW9ucy5pbWFnZUhlaWdodFNob3cgPT09IHVuZGVmaW5lZCA/IHRydWUgOiAhIW9wdGlvbnMuaW1hZ2VIZWlnaHRTaG93O1xyXG4gICAgICAgIG9wdGlvbnMuaW1hZ2VXaWR0aCA9ICFvcHRpb25zLmltYWdlV2lkdGggPyAnYXV0bycgOiB1dGlsLmlzTnVtYmVyKG9wdGlvbnMuaW1hZ2VXaWR0aCkgPyBvcHRpb25zLmltYWdlV2lkdGggKyAncHgnIDogb3B0aW9ucy5pbWFnZVdpZHRoO1xyXG4gICAgICAgIG9wdGlvbnMuaW1hZ2VIZWlnaHQgPSAhb3B0aW9ucy5pbWFnZUhlaWdodCA/ICdhdXRvJyA6IHV0aWwuaXNOdW1iZXIob3B0aW9ucy5pbWFnZUhlaWdodCkgPyBvcHRpb25zLmltYWdlSGVpZ2h0ICsgJ3B4JyA6IG9wdGlvbnMuaW1hZ2VIZWlnaHQ7XHJcbiAgICAgICAgb3B0aW9ucy5pbWFnZVNpemVPbmx5UGVyY2VudGFnZSA9ICEhb3B0aW9ucy5pbWFnZVNpemVPbmx5UGVyY2VudGFnZTtcclxuICAgICAgICBvcHRpb25zLl9pbWFnZVNpemVVbml0ID0gb3B0aW9ucy5pbWFnZVNpemVPbmx5UGVyY2VudGFnZSA/ICclJyA6ICdweCc7XHJcbiAgICAgICAgb3B0aW9ucy5pbWFnZVJvdGF0aW9uID0gb3B0aW9ucy5pbWFnZVJvdGF0aW9uICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmltYWdlUm90YXRpb24gOiAhKG9wdGlvbnMuaW1hZ2VTaXplT25seVBlcmNlbnRhZ2UgfHwgIW9wdGlvbnMuaW1hZ2VIZWlnaHRTaG93KTtcclxuICAgICAgICBvcHRpb25zLmltYWdlRmlsZUlucHV0ID0gb3B0aW9ucy5pbWFnZUZpbGVJbnB1dCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IG9wdGlvbnMuaW1hZ2VGaWxlSW5wdXQ7XHJcbiAgICAgICAgb3B0aW9ucy5pbWFnZVVybElucHV0ID0gKG9wdGlvbnMuaW1hZ2VVcmxJbnB1dCA9PT0gdW5kZWZpbmVkIHx8ICFvcHRpb25zLmltYWdlRmlsZUlucHV0KSA/IHRydWUgOiBvcHRpb25zLmltYWdlVXJsSW5wdXQ7XHJcbiAgICAgICAgb3B0aW9ucy5pbWFnZVVwbG9hZEhlYWRlciA9IG9wdGlvbnMuaW1hZ2VVcGxvYWRIZWFkZXIgfHwgbnVsbDtcclxuICAgICAgICBvcHRpb25zLmltYWdlVXBsb2FkVXJsID0gdHlwZW9mIG9wdGlvbnMuaW1hZ2VVcGxvYWRVcmwgPT09ICdzdHJpbmcnID8gb3B0aW9ucy5pbWFnZVVwbG9hZFVybCA6IG51bGw7XHJcbiAgICAgICAgb3B0aW9ucy5pbWFnZVVwbG9hZFNpemVMaW1pdCA9IC9cXGQrLy50ZXN0KG9wdGlvbnMuaW1hZ2VVcGxvYWRTaXplTGltaXQpID8gdXRpbC5nZXROdW1iZXIob3B0aW9ucy5pbWFnZVVwbG9hZFNpemVMaW1pdCwgMCkgOiBudWxsO1xyXG4gICAgICAgIG9wdGlvbnMuaW1hZ2VNdWx0aXBsZUZpbGUgPSAhIW9wdGlvbnMuaW1hZ2VNdWx0aXBsZUZpbGU7XHJcbiAgICAgICAgb3B0aW9ucy5pbWFnZUFjY2VwdCA9ICh0eXBlb2Ygb3B0aW9ucy5pbWFnZUFjY2VwdCAhPT0gJ3N0cmluZycgfHwgb3B0aW9ucy5pbWFnZUFjY2VwdC50cmltKCkgPT09IFwiKlwiKSA/ICdpbWFnZS8qJyA6IG9wdGlvbnMuaW1hZ2VBY2NlcHQudHJpbSgpIHx8ICdpbWFnZS8qJztcclxuICAgICAgICAvKiogSW1hZ2UgLSBpbWFnZSBnYWxsZXJ5ICovXHJcbiAgICAgICAgb3B0aW9ucy5pbWFnZUdhbGxlcnlVcmwgPSB0eXBlb2Ygb3B0aW9ucy5pbWFnZUdhbGxlcnlVcmwgPT09ICdzdHJpbmcnID8gb3B0aW9ucy5pbWFnZUdhbGxlcnlVcmwgOiBudWxsO1xyXG4gICAgICAgIG9wdGlvbnMuaW1hZ2VHYWxsZXJ5SGVhZGVyID0gb3B0aW9ucy5pbWFnZUdhbGxlcnlIZWFkZXIgfHwgbnVsbDtcclxuICAgICAgICAvKiogVmlkZW8gKi9cclxuICAgICAgICBvcHRpb25zLnZpZGVvUmVzaXppbmcgPSBvcHRpb25zLnZpZGVvUmVzaXppbmcgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBvcHRpb25zLnZpZGVvUmVzaXppbmc7XHJcbiAgICAgICAgb3B0aW9ucy52aWRlb0hlaWdodFNob3cgPSBvcHRpb25zLnZpZGVvSGVpZ2h0U2hvdyA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6ICEhb3B0aW9ucy52aWRlb0hlaWdodFNob3c7XHJcbiAgICAgICAgb3B0aW9ucy52aWRlb1JhdGlvU2hvdyA9IG9wdGlvbnMudmlkZW9SYXRpb1Nob3cgPT09IHVuZGVmaW5lZCA/IHRydWUgOiAhIW9wdGlvbnMudmlkZW9SYXRpb1Nob3c7XHJcbiAgICAgICAgb3B0aW9ucy52aWRlb1dpZHRoID0gIW9wdGlvbnMudmlkZW9XaWR0aCB8fCAhdXRpbC5nZXROdW1iZXIob3B0aW9ucy52aWRlb1dpZHRoLCAwKSA/ICcnIDogdXRpbC5pc051bWJlcihvcHRpb25zLnZpZGVvV2lkdGgpID8gb3B0aW9ucy52aWRlb1dpZHRoICsgJ3B4JyA6IG9wdGlvbnMudmlkZW9XaWR0aDtcclxuICAgICAgICBvcHRpb25zLnZpZGVvSGVpZ2h0ID0gIW9wdGlvbnMudmlkZW9IZWlnaHQgfHwgIXV0aWwuZ2V0TnVtYmVyKG9wdGlvbnMudmlkZW9IZWlnaHQsIDApID8gJycgOiB1dGlsLmlzTnVtYmVyKG9wdGlvbnMudmlkZW9IZWlnaHQpID8gb3B0aW9ucy52aWRlb0hlaWdodCArICdweCcgOiBvcHRpb25zLnZpZGVvSGVpZ2h0O1xyXG4gICAgICAgIG9wdGlvbnMudmlkZW9TaXplT25seVBlcmNlbnRhZ2UgPSAhIW9wdGlvbnMudmlkZW9TaXplT25seVBlcmNlbnRhZ2U7XHJcbiAgICAgICAgb3B0aW9ucy5fdmlkZW9TaXplVW5pdCA9IG9wdGlvbnMudmlkZW9TaXplT25seVBlcmNlbnRhZ2UgPyAnJScgOiAncHgnO1xyXG4gICAgICAgIG9wdGlvbnMudmlkZW9Sb3RhdGlvbiA9IG9wdGlvbnMudmlkZW9Sb3RhdGlvbiAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy52aWRlb1JvdGF0aW9uIDogIShvcHRpb25zLnZpZGVvU2l6ZU9ubHlQZXJjZW50YWdlIHx8ICFvcHRpb25zLnZpZGVvSGVpZ2h0U2hvdyk7XHJcbiAgICAgICAgb3B0aW9ucy52aWRlb1JhdGlvID0gKHV0aWwuZ2V0TnVtYmVyKG9wdGlvbnMudmlkZW9SYXRpbywgNCkgfHwgMC41NjI1KTtcclxuICAgICAgICBvcHRpb25zLnZpZGVvUmF0aW9MaXN0ID0gIW9wdGlvbnMudmlkZW9SYXRpb0xpc3QgPyBudWxsIDogb3B0aW9ucy52aWRlb1JhdGlvTGlzdDtcclxuICAgICAgICBvcHRpb25zLnlvdXR1YmVRdWVyeSA9IChvcHRpb25zLnlvdXR1YmVRdWVyeSB8fCAnJykucmVwbGFjZSgnPycsICcnKTtcclxuICAgICAgICBvcHRpb25zLnZpZGVvRmlsZUlucHV0ID0gISFvcHRpb25zLnZpZGVvRmlsZUlucHV0O1xyXG4gICAgICAgIG9wdGlvbnMudmlkZW9VcmxJbnB1dCA9IChvcHRpb25zLnZpZGVvVXJsSW5wdXQgPT09IHVuZGVmaW5lZCB8fCAhb3B0aW9ucy52aWRlb0ZpbGVJbnB1dCkgPyB0cnVlIDogb3B0aW9ucy52aWRlb1VybElucHV0O1xyXG4gICAgICAgIG9wdGlvbnMudmlkZW9VcGxvYWRIZWFkZXIgPSBvcHRpb25zLnZpZGVvVXBsb2FkSGVhZGVyIHx8IG51bGw7XHJcbiAgICAgICAgb3B0aW9ucy52aWRlb1VwbG9hZFVybCA9IHR5cGVvZiBvcHRpb25zLnZpZGVvVXBsb2FkVXJsID09PSAnc3RyaW5nJyA/IG9wdGlvbnMudmlkZW9VcGxvYWRVcmwgOiBudWxsO1xyXG4gICAgICAgIG9wdGlvbnMudmlkZW9VcGxvYWRTaXplTGltaXQgPSAvXFxkKy8udGVzdChvcHRpb25zLnZpZGVvVXBsb2FkU2l6ZUxpbWl0KSA/IHV0aWwuZ2V0TnVtYmVyKG9wdGlvbnMudmlkZW9VcGxvYWRTaXplTGltaXQsIDApIDogbnVsbDtcclxuICAgICAgICBvcHRpb25zLnZpZGVvTXVsdGlwbGVGaWxlID0gISFvcHRpb25zLnZpZGVvTXVsdGlwbGVGaWxlO1xyXG4gICAgICAgIG9wdGlvbnMudmlkZW9UYWdBdHRycyA9IG9wdGlvbnMudmlkZW9UYWdBdHRycyB8fCBudWxsO1xyXG4gICAgICAgIG9wdGlvbnMudmlkZW9JZnJhbWVBdHRycyA9IG9wdGlvbnMudmlkZW9JZnJhbWVBdHRycyB8fCBudWxsO1xyXG4gICAgICAgIG9wdGlvbnMudmlkZW9BY2NlcHQgPSAodHlwZW9mIG9wdGlvbnMudmlkZW9BY2NlcHQgIT09ICdzdHJpbmcnIHx8IG9wdGlvbnMudmlkZW9BY2NlcHQudHJpbSgpID09PSBcIipcIikgPyAndmlkZW8vKicgOiBvcHRpb25zLnZpZGVvQWNjZXB0LnRyaW0oKSB8fCAndmlkZW8vKic7XHJcbiAgICAgICAgLyoqIEF1ZGlvICovXHJcbiAgICAgICAgb3B0aW9ucy5hdWRpb1dpZHRoID0gIW9wdGlvbnMuYXVkaW9XaWR0aCA/ICcnIDogdXRpbC5pc051bWJlcihvcHRpb25zLmF1ZGlvV2lkdGgpID8gb3B0aW9ucy5hdWRpb1dpZHRoICsgJ3B4JyA6IG9wdGlvbnMuYXVkaW9XaWR0aDtcclxuICAgICAgICBvcHRpb25zLmF1ZGlvSGVpZ2h0ID0gIW9wdGlvbnMuYXVkaW9IZWlnaHQgPyAnJyA6IHV0aWwuaXNOdW1iZXIob3B0aW9ucy5hdWRpb0hlaWdodCkgPyBvcHRpb25zLmF1ZGlvSGVpZ2h0ICsgJ3B4JyA6IG9wdGlvbnMuYXVkaW9IZWlnaHQ7XHJcbiAgICAgICAgb3B0aW9ucy5hdWRpb0ZpbGVJbnB1dCA9ICEhb3B0aW9ucy5hdWRpb0ZpbGVJbnB1dDtcclxuICAgICAgICBvcHRpb25zLmF1ZGlvVXJsSW5wdXQgPSAob3B0aW9ucy5hdWRpb1VybElucHV0ID09PSB1bmRlZmluZWQgfHwgIW9wdGlvbnMuYXVkaW9GaWxlSW5wdXQpID8gdHJ1ZSA6IG9wdGlvbnMuYXVkaW9VcmxJbnB1dDtcclxuICAgICAgICBvcHRpb25zLmF1ZGlvVXBsb2FkSGVhZGVyID0gb3B0aW9ucy5hdWRpb1VwbG9hZEhlYWRlciB8fCBudWxsO1xyXG4gICAgICAgIG9wdGlvbnMuYXVkaW9VcGxvYWRVcmwgPSB0eXBlb2Ygb3B0aW9ucy5hdWRpb1VwbG9hZFVybCA9PT0gJ3N0cmluZycgPyBvcHRpb25zLmF1ZGlvVXBsb2FkVXJsIDogbnVsbDtcclxuICAgICAgICBvcHRpb25zLmF1ZGlvVXBsb2FkU2l6ZUxpbWl0ID0gL1xcZCsvLnRlc3Qob3B0aW9ucy5hdWRpb1VwbG9hZFNpemVMaW1pdCkgPyB1dGlsLmdldE51bWJlcihvcHRpb25zLmF1ZGlvVXBsb2FkU2l6ZUxpbWl0LCAwKSA6IG51bGw7XHJcbiAgICAgICAgb3B0aW9ucy5hdWRpb011bHRpcGxlRmlsZSA9ICEhb3B0aW9ucy5hdWRpb011bHRpcGxlRmlsZTtcclxuICAgICAgICBvcHRpb25zLmF1ZGlvVGFnQXR0cnMgPSBvcHRpb25zLmF1ZGlvVGFnQXR0cnMgfHwgbnVsbDtcclxuICAgICAgICBvcHRpb25zLmF1ZGlvQWNjZXB0ID0gKHR5cGVvZiBvcHRpb25zLmF1ZGlvQWNjZXB0ICE9PSAnc3RyaW5nJyB8fCBvcHRpb25zLmF1ZGlvQWNjZXB0LnRyaW0oKSA9PT0gXCIqXCIpID8gJ2F1ZGlvLyonIDogb3B0aW9ucy5hdWRpb0FjY2VwdC50cmltKCkgfHwgJ2F1ZGlvLyonO1xyXG4gICAgICAgIC8qKiBUYWJsZSAqL1xyXG4gICAgICAgIG9wdGlvbnMudGFibGVDZWxsQ29udHJvbGxlclBvc2l0aW9uID0gdHlwZW9mIG9wdGlvbnMudGFibGVDZWxsQ29udHJvbGxlclBvc2l0aW9uID09PSAnc3RyaW5nJyA/IG9wdGlvbnMudGFibGVDZWxsQ29udHJvbGxlclBvc2l0aW9uLnRvTG93ZXJDYXNlKCkgOiAnY2VsbCc7XHJcbiAgICAgICAgLyoqIExpbmsgKi9cclxuICAgICAgICBvcHRpb25zLmxpbmtQcm90b2NvbCA9IHR5cGVvZiBvcHRpb25zLmxpbmtQcm90b2NvbCA9PT0gJ3N0cmluZycgPyBvcHRpb25zLmxpbmtQcm90b2NvbCA6IG51bGw7XHJcbiAgICAgICAgb3B0aW9ucy5saW5rUmVsID0gQXJyYXkuaXNBcnJheShvcHRpb25zLmxpbmtSZWwpID8gb3B0aW9ucy5saW5rUmVsIDogW107XHJcbiAgICAgICAgb3B0aW9ucy5saW5rUmVsRGVmYXVsdCA9IG9wdGlvbnMubGlua1JlbERlZmF1bHQgfHwge307XHJcbiAgICAgICAgLyoqIEtleSBhY3Rpb25zICovXHJcbiAgICAgICAgb3B0aW9ucy50YWJEaXNhYmxlID0gISFvcHRpb25zLnRhYkRpc2FibGU7XHJcbiAgICAgICAgb3B0aW9ucy5zaG9ydGN1dHNEaXNhYmxlID0gQXJyYXkuaXNBcnJheShvcHRpb25zLnNob3J0Y3V0c0Rpc2FibGUpID8gb3B0aW9ucy5zaG9ydGN1dHNEaXNhYmxlIDogW107XHJcbiAgICAgICAgb3B0aW9ucy5zaG9ydGN1dHNIaW50ID0gb3B0aW9ucy5zaG9ydGN1dHNIaW50ID09PSB1bmRlZmluZWQgPyB0cnVlIDogISFvcHRpb25zLnNob3J0Y3V0c0hpbnQ7XHJcbiAgICAgICAgLyoqIERlZmluaW5nIHNhdmUgYnV0dG9uICovXHJcbiAgICAgICAgb3B0aW9ucy5jYWxsQmFja1NhdmUgPSAhb3B0aW9ucy5jYWxsQmFja1NhdmUgPyBudWxsIDogb3B0aW9ucy5jYWxsQmFja1NhdmU7XHJcbiAgICAgICAgLyoqIFRlbXBsYXRlcyBBcnJheSAqL1xyXG4gICAgICAgIG9wdGlvbnMudGVtcGxhdGVzID0gIW9wdGlvbnMudGVtcGxhdGVzID8gbnVsbCA6IG9wdGlvbnMudGVtcGxhdGVzO1xyXG4gICAgICAgIC8qKiBFVEMgKi9cclxuICAgICAgICBvcHRpb25zLnBsYWNlaG9sZGVyID0gdHlwZW9mIG9wdGlvbnMucGxhY2Vob2xkZXIgPT09ICdzdHJpbmcnID8gb3B0aW9ucy5wbGFjZWhvbGRlciA6IG51bGw7XHJcbiAgICAgICAgb3B0aW9ucy5tZWRpYUF1dG9TZWxlY3QgPSBvcHRpb25zLm1lZGlhQXV0b1NlbGVjdCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6ICEhb3B0aW9ucy5tZWRpYUF1dG9TZWxlY3Q7XHJcbiAgICAgICAgLyoqIEJ1dHRvbnMgKi9cclxuICAgICAgICBvcHRpb25zLmJ1dHRvbkxpc3QgPSAhIW9wdGlvbnMuYnV0dG9uTGlzdCA/IG9wdGlvbnMuYnV0dG9uTGlzdCA6IFtcclxuICAgICAgICAgICAgWyd1bmRvJywgJ3JlZG8nXSxcclxuICAgICAgICAgICAgWydib2xkJywgJ3VuZGVybGluZScsICdpdGFsaWMnLCAnc3RyaWtlJywgJ3N1YnNjcmlwdCcsICdzdXBlcnNjcmlwdCddLFxyXG4gICAgICAgICAgICBbJ3JlbW92ZUZvcm1hdCddLFxyXG4gICAgICAgICAgICBbJ291dGRlbnQnLCAnaW5kZW50J10sXHJcbiAgICAgICAgICAgIFsnZnVsbFNjcmVlbicsICdzaG93QmxvY2tzJywgJ2NvZGVWaWV3J10sXHJcbiAgICAgICAgICAgIFsncHJldmlldycsICdwcmludCddXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgLyoqIFJUTCAtIGJ1dHRvbnMgKi9cclxuICAgICAgICBpZiAob3B0aW9ucy5ydGwpIHtcclxuICAgICAgICAgICAgb3B0aW9ucy5idXR0b25MaXN0ID0gb3B0aW9ucy5idXR0b25MaXN0LnJldmVyc2UoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qKiAtLS0gRGVmaW5lIGljb25zIC0tLSAqL1xyXG4gICAgICAgIC8vIGN1c3RvbSBpY29uc1xyXG4gICAgICAgIG9wdGlvbnMuaWNvbnMgPSAoIW9wdGlvbnMuaWNvbnMgfHwgdHlwZW9mIG9wdGlvbnMuaWNvbnMgIT09ICdvYmplY3QnKSA/IF9pY29ucyA6IFtfaWNvbnMsIG9wdGlvbnMuaWNvbnNdLnJlZHVjZShmdW5jdGlvbiAoX2RlZmF1bHQsIF9uZXcpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIF9uZXcpIHtcclxuICAgICAgICAgICAgICAgIGlmICh1dGlsLmhhc093bihfbmV3LCBrZXkpKSBfZGVmYXVsdFtrZXldID0gX25ld1trZXldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBfZGVmYXVsdDtcclxuICAgICAgICB9LCB7fSk7XHJcbiAgICAgICAgLy8gcnRsIGljb25zXHJcbiAgICAgICAgb3B0aW9ucy5pY29ucyA9ICFvcHRpb25zLnJ0bCA/IG9wdGlvbnMuaWNvbnMgOiBbb3B0aW9ucy5pY29ucywgb3B0aW9ucy5pY29ucy5ydGxdLnJlZHVjZShmdW5jdGlvbiAoX2RlZmF1bHQsIF9uZXcpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIF9uZXcpIHtcclxuICAgICAgICAgICAgICAgIGlmICh1dGlsLmhhc093bihfbmV3LCBrZXkpKSBfZGVmYXVsdFtrZXldID0gX25ld1trZXldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBfZGVmYXVsdDtcclxuICAgICAgICB9LCB7fSk7XHJcblxyXG4gICAgICAgIC8qKiBfaW5pdCBvcHRpb25zICovXHJcbiAgICAgICAgb3B0aW9ucy5fZWRpdG9yU3R5bGVzID0gdXRpbC5fc2V0RGVmYXVsdE9wdGlvblN0eWxlKG9wdGlvbnMsIG9wdGlvbnMuZGVmYXVsdFN0eWxlKTtcclxuICAgIH0sXHJcblxyXG4gICAgX3NldFdoaXRlbGlzdDogZnVuY3Rpb24gKHdoaXRlbGlzdCwgYmxhY2tsaXN0KSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBibGFja2xpc3QgIT09ICdzdHJpbmcnKSByZXR1cm4gd2hpdGVsaXN0O1xyXG4gICAgICAgIGJsYWNrbGlzdCA9IGJsYWNrbGlzdC5zcGxpdCgnfCcpO1xyXG4gICAgICAgIHdoaXRlbGlzdCA9IHdoaXRlbGlzdC5zcGxpdCgnfCcpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBibGFja2xpc3QubGVuZ3RoLCBpbmRleDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGluZGV4ID0gd2hpdGVsaXN0LmluZGV4T2YoYmxhY2tsaXN0W2ldKTtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHdoaXRlbGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gd2hpdGVsaXN0LmpvaW4oJ3wnKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gU3VuZWRpdG9yJ3MgRGVmYXVsdCBidXR0b24gbGlzdFxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgb3B0aW9uc1xyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqL1xyXG4gICAgX2RlZmF1bHRCdXR0b25zOiBmdW5jdGlvbiAob3B0aW9ucykge1xyXG4gICAgICAgIGNvbnN0IGljb25zID0gb3B0aW9ucy5pY29ucztcclxuICAgICAgICBjb25zdCBsYW5nID0gb3B0aW9ucy5sYW5nO1xyXG4gICAgICAgIGNvbnN0IGNtZCA9IHV0aWwuaXNPU1hfSU9TID8gJ+KMmCcgOiAnQ1RSTCc7XHJcbiAgICAgICAgY29uc3QgYWRkU2hpZnQgPSB1dGlsLmlzT1NYX0lPUyA/ICfih6cnIDogJytTSElGVCc7XHJcbiAgICAgICAgY29uc3Qgc2hvcnRjdXRzRGlzYWJsZSA9ICFvcHRpb25zLnNob3J0Y3V0c0hpbnQgPyBbJ2JvbGQnLCAnc3RyaWtlJywgJ3VuZGVybGluZScsICdpdGFsaWMnLCAndW5kbycsICdpbmRlbnQnLCAnc2F2ZSddIDogb3B0aW9ucy5zaG9ydGN1dHNEaXNhYmxlO1xyXG4gICAgICAgIGNvbnN0IGluZGVudEtleSA9IG9wdGlvbnMucnRsID8gWydbJywnXSddIDogWyddJywnWyddO1xyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAvKiogZGVmYXVsdCBjb21tYW5kICovXHJcbiAgICAgICAgICAgIGJvbGQ6IFsnX3NlX2NvbW1hbmRfYm9sZCcsIGxhbmcudG9vbGJhci5ib2xkICsgJzxzcGFuIGNsYXNzPVwic2Utc2hvcnRjdXRcIj4nICsgKHNob3J0Y3V0c0Rpc2FibGUuaW5kZXhPZignYm9sZCcpID4gLTEgPyAnJyA6IGNtZCArICcrPHNwYW4gY2xhc3M9XCJzZS1zaG9ydGN1dC1rZXlcIj5CPC9zcGFuPicpICsgJzwvc3Bhbj4nLCAnYm9sZCcsICcnLCBpY29ucy5ib2xkXSxcclxuICAgICAgICAgICAgdW5kZXJsaW5lOiBbJ19zZV9jb21tYW5kX3VuZGVybGluZScsIGxhbmcudG9vbGJhci51bmRlcmxpbmUgKyAnPHNwYW4gY2xhc3M9XCJzZS1zaG9ydGN1dFwiPicgKyAoc2hvcnRjdXRzRGlzYWJsZS5pbmRleE9mKCd1bmRlcmxpbmUnKSA+IC0xID8gJycgOiBjbWQgKyAnKzxzcGFuIGNsYXNzPVwic2Utc2hvcnRjdXQta2V5XCI+VTwvc3Bhbj4nKSArICc8L3NwYW4+JywgJ3VuZGVybGluZScsICcnLCBpY29ucy51bmRlcmxpbmVdLFxyXG4gICAgICAgICAgICBpdGFsaWM6IFsnX3NlX2NvbW1hbmRfaXRhbGljJywgbGFuZy50b29sYmFyLml0YWxpYyArICc8c3BhbiBjbGFzcz1cInNlLXNob3J0Y3V0XCI+JyArIChzaG9ydGN1dHNEaXNhYmxlLmluZGV4T2YoJ2l0YWxpYycpID4gLTEgPyAnJyA6IGNtZCArICcrPHNwYW4gY2xhc3M9XCJzZS1zaG9ydGN1dC1rZXlcIj5JPC9zcGFuPicpICsgJzwvc3Bhbj4nLCAnaXRhbGljJywgJycsIGljb25zLml0YWxpY10sXHJcbiAgICAgICAgICAgIHN0cmlrZTogWydfc2VfY29tbWFuZF9zdHJpa2UnLCBsYW5nLnRvb2xiYXIuc3RyaWtlICsgJzxzcGFuIGNsYXNzPVwic2Utc2hvcnRjdXRcIj4nICsgKHNob3J0Y3V0c0Rpc2FibGUuaW5kZXhPZignc3RyaWtlJykgPiAtMSA/ICcnIDogY21kICsgYWRkU2hpZnQgKyAnKzxzcGFuIGNsYXNzPVwic2Utc2hvcnRjdXQta2V5XCI+Uzwvc3Bhbj4nKSArICc8L3NwYW4+JywgJ3N0cmlrZScsICcnLCBpY29ucy5zdHJpa2VdLFxyXG4gICAgICAgICAgICBzdWJzY3JpcHQ6IFsnX3NlX2NvbW1hbmRfc3Vic2NyaXB0JywgbGFuZy50b29sYmFyLnN1YnNjcmlwdCwgJ1NVQicsICcnLCBpY29ucy5zdWJzY3JpcHRdLFxyXG4gICAgICAgICAgICBzdXBlcnNjcmlwdDogWydfc2VfY29tbWFuZF9zdXBlcnNjcmlwdCcsIGxhbmcudG9vbGJhci5zdXBlcnNjcmlwdCwgJ1NVUCcsICcnLCBpY29ucy5zdXBlcnNjcmlwdF0sXHJcbiAgICAgICAgICAgIHJlbW92ZUZvcm1hdDogWycnLCBsYW5nLnRvb2xiYXIucmVtb3ZlRm9ybWF0LCAncmVtb3ZlRm9ybWF0JywgJycsIGljb25zLmVyYXNlXSxcclxuICAgICAgICAgICAgaW5kZW50OiBbJ19zZV9jb21tYW5kX2luZGVudCcsIGxhbmcudG9vbGJhci5pbmRlbnQgKyAnPHNwYW4gY2xhc3M9XCJzZS1zaG9ydGN1dFwiPicgKyAoc2hvcnRjdXRzRGlzYWJsZS5pbmRleE9mKCdpbmRlbnQnKSA+IC0xID8gJycgOiBjbWQgKyAnKzxzcGFuIGNsYXNzPVwic2Utc2hvcnRjdXQta2V5XCI+JyArIGluZGVudEtleVswXSArICc8L3NwYW4+JykgKyAnPC9zcGFuPicsICdpbmRlbnQnLCAnJywgaWNvbnMub3V0ZGVudF0sXHJcbiAgICAgICAgICAgIG91dGRlbnQ6IFsnX3NlX2NvbW1hbmRfb3V0ZGVudCcsIGxhbmcudG9vbGJhci5vdXRkZW50ICsgJzxzcGFuIGNsYXNzPVwic2Utc2hvcnRjdXRcIj4nICsgKHNob3J0Y3V0c0Rpc2FibGUuaW5kZXhPZignaW5kZW50JykgPiAtMSA/ICcnIDogY21kICsgJys8c3BhbiBjbGFzcz1cInNlLXNob3J0Y3V0LWtleVwiPicgKyBpbmRlbnRLZXlbMV0gKyAnPC9zcGFuPicpICsgJzwvc3Bhbj4nLCAnb3V0ZGVudCcsICcnLCBpY29ucy5pbmRlbnRdLFxyXG4gICAgICAgICAgICBmdWxsU2NyZWVuOiBbJ3NlLWNvZGUtdmlldy1lbmFibGVkIHNlLXJlc2l6aW5nLWVuYWJsZWQgX3NlX2NvbW1hbmRfZnVsbFNjcmVlbicsIGxhbmcudG9vbGJhci5mdWxsU2NyZWVuLCAnZnVsbFNjcmVlbicsICcnLCBpY29ucy5leHBhbnNpb25dLFxyXG4gICAgICAgICAgICBzaG93QmxvY2tzOiBbJ19zZV9jb21tYW5kX3Nob3dCbG9ja3MnLCBsYW5nLnRvb2xiYXIuc2hvd0Jsb2NrcywgJ3Nob3dCbG9ja3MnLCAnJywgaWNvbnMuc2hvd19ibG9ja3NdLFxyXG4gICAgICAgICAgICBjb2RlVmlldzogWydzZS1jb2RlLXZpZXctZW5hYmxlZCBzZS1yZXNpemluZy1lbmFibGVkIF9zZV9jb21tYW5kX2NvZGVWaWV3JywgbGFuZy50b29sYmFyLmNvZGVWaWV3LCAnY29kZVZpZXcnLCAnJywgaWNvbnMuY29kZV92aWV3XSxcclxuICAgICAgICAgICAgdW5kbzogWydfc2VfY29tbWFuZF91bmRvIHNlLXJlc2l6aW5nLWVuYWJsZWQnLCBsYW5nLnRvb2xiYXIudW5kbyArICc8c3BhbiBjbGFzcz1cInNlLXNob3J0Y3V0XCI+JyArIChzaG9ydGN1dHNEaXNhYmxlLmluZGV4T2YoJ3VuZG8nKSA+IC0xID8gJycgOiBjbWQgKyAnKzxzcGFuIGNsYXNzPVwic2Utc2hvcnRjdXQta2V5XCI+Wjwvc3Bhbj4nKSArICc8L3NwYW4+JywgJ3VuZG8nLCAnJywgaWNvbnMudW5kb10sXHJcbiAgICAgICAgICAgIHJlZG86IFsnX3NlX2NvbW1hbmRfcmVkbyBzZS1yZXNpemluZy1lbmFibGVkJywgbGFuZy50b29sYmFyLnJlZG8gKyAnPHNwYW4gY2xhc3M9XCJzZS1zaG9ydGN1dFwiPicgKyAoc2hvcnRjdXRzRGlzYWJsZS5pbmRleE9mKCd1bmRvJykgPiAtMSA/ICcnIDogY21kICsgJys8c3BhbiBjbGFzcz1cInNlLXNob3J0Y3V0LWtleVwiPlk8L3NwYW4+IC8gJyArIGNtZCArIGFkZFNoaWZ0ICsgJys8c3BhbiBjbGFzcz1cInNlLXNob3J0Y3V0LWtleVwiPlo8L3NwYW4+JykgKyAnPC9zcGFuPicsICdyZWRvJywgJycsIGljb25zLnJlZG9dLFxyXG4gICAgICAgICAgICBwcmV2aWV3OiBbJ3NlLXJlc2l6aW5nLWVuYWJsZWQnLCBsYW5nLnRvb2xiYXIucHJldmlldywgJ3ByZXZpZXcnLCAnJywgaWNvbnMucHJldmlld10sXHJcbiAgICAgICAgICAgIHByaW50OiBbJ3NlLXJlc2l6aW5nLWVuYWJsZWQnLCBsYW5nLnRvb2xiYXIucHJpbnQsICdwcmludCcsICcnLCBpY29ucy5wcmludF0sXHJcbiAgICAgICAgICAgIHNhdmU6IFsnX3NlX2NvbW1hbmRfc2F2ZSBzZS1yZXNpemluZy1lbmFibGVkJywgbGFuZy50b29sYmFyLnNhdmUgKyAnPHNwYW4gY2xhc3M9XCJzZS1zaG9ydGN1dFwiPicgKyAoc2hvcnRjdXRzRGlzYWJsZS5pbmRleE9mKCdzYXZlJykgPiAtMSA/ICcnIDogY21kICsgJys8c3BhbiBjbGFzcz1cInNlLXNob3J0Y3V0LWtleVwiPlM8L3NwYW4+JykgKyAnPC9zcGFuPicsICdzYXZlJywgJycsIGljb25zLnNhdmVdLFxyXG4gICAgICAgICAgICAvKiogcGx1Z2lucyAtIGNvbW1hbmQgKi9cclxuICAgICAgICAgICAgYmxvY2txdW90ZTogWycnLCBsYW5nLnRvb2xiYXIudGFnX2Jsb2NrcXVvdGUsICdibG9ja3F1b3RlJywgJ2NvbW1hbmQnLCBpY29ucy5ibG9ja3F1b3RlXSxcclxuICAgICAgICAgICAgLyoqIHBsdWdpbnMgLSBzdWJtZW51ICovXHJcbiAgICAgICAgICAgIGZvbnQ6IFsnc2UtYnRuLXNlbGVjdCBzZS1idG4tdG9vbC1mb250JywgbGFuZy50b29sYmFyLmZvbnQsICdmb250JywgJ3N1Ym1lbnUnLCAnPHNwYW4gY2xhc3M9XCJ0eHRcIj4nICsgbGFuZy50b29sYmFyLmZvbnQgKyAnPC9zcGFuPicgKyBpY29ucy5hcnJvd19kb3duXSxcclxuICAgICAgICAgICAgZm9ybWF0QmxvY2s6IFsnc2UtYnRuLXNlbGVjdCBzZS1idG4tdG9vbC1mb3JtYXQnLCBsYW5nLnRvb2xiYXIuZm9ybWF0cywgJ2Zvcm1hdEJsb2NrJywgJ3N1Ym1lbnUnLCAnPHNwYW4gY2xhc3M9XCJ0eHRcIj4nICsgbGFuZy50b29sYmFyLmZvcm1hdHMgKyAnPC9zcGFuPicgKyBpY29ucy5hcnJvd19kb3duXSxcclxuICAgICAgICAgICAgZm9udFNpemU6IFsnc2UtYnRuLXNlbGVjdCBzZS1idG4tdG9vbC1zaXplJywgbGFuZy50b29sYmFyLmZvbnRTaXplLCAnZm9udFNpemUnLCAnc3VibWVudScsICc8c3BhbiBjbGFzcz1cInR4dFwiPicgKyBsYW5nLnRvb2xiYXIuZm9udFNpemUgKyAnPC9zcGFuPicgKyBpY29ucy5hcnJvd19kb3duXSxcclxuICAgICAgICAgICAgZm9udENvbG9yOiBbJycsIGxhbmcudG9vbGJhci5mb250Q29sb3IsICdmb250Q29sb3InLCAnc3VibWVudScsIGljb25zLmZvbnRfY29sb3JdLFxyXG4gICAgICAgICAgICBoaWxpdGVDb2xvcjogWycnLCBsYW5nLnRvb2xiYXIuaGlsaXRlQ29sb3IsICdoaWxpdGVDb2xvcicsICdzdWJtZW51JywgaWNvbnMuaGlnaGxpZ2h0X2NvbG9yXSxcclxuICAgICAgICAgICAgYWxpZ246IFsnc2UtYnRuLWFsaWduJywgbGFuZy50b29sYmFyLmFsaWduLCAnYWxpZ24nLCAnc3VibWVudScsIChvcHRpb25zLnJ0bCA/IGljb25zLmFsaWduX3JpZ2h0IDogaWNvbnMuYWxpZ25fbGVmdCldLFxyXG4gICAgICAgICAgICBsaXN0OiBbJycsIGxhbmcudG9vbGJhci5saXN0LCAnbGlzdCcsICdzdWJtZW51JywgaWNvbnMubGlzdF9udW1iZXJdLFxyXG4gICAgICAgICAgICBob3Jpem9udGFsUnVsZTogWydidG5fbGluZScsIGxhbmcudG9vbGJhci5ob3Jpem9udGFsUnVsZSwgJ2hvcml6b250YWxSdWxlJywgJ3N1Ym1lbnUnLCBpY29ucy5ob3Jpem9udGFsX3J1bGVdLFxyXG4gICAgICAgICAgICB0YWJsZTogWycnLCBsYW5nLnRvb2xiYXIudGFibGUsICd0YWJsZScsICdzdWJtZW51JywgaWNvbnMudGFibGVdLFxyXG4gICAgICAgICAgICBsaW5lSGVpZ2h0OiBbJycsIGxhbmcudG9vbGJhci5saW5lSGVpZ2h0LCAnbGluZUhlaWdodCcsICdzdWJtZW51JywgaWNvbnMubGluZV9oZWlnaHRdLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZTogWycnLCBsYW5nLnRvb2xiYXIudGVtcGxhdGUsICd0ZW1wbGF0ZScsICdzdWJtZW51JywgaWNvbnMudGVtcGxhdGVdLFxyXG4gICAgICAgICAgICBwYXJhZ3JhcGhTdHlsZTogWycnLCBsYW5nLnRvb2xiYXIucGFyYWdyYXBoU3R5bGUsICdwYXJhZ3JhcGhTdHlsZScsICdzdWJtZW51JywgaWNvbnMucGFyYWdyYXBoX3N0eWxlXSxcclxuICAgICAgICAgICAgdGV4dFN0eWxlOiBbJycsIGxhbmcudG9vbGJhci50ZXh0U3R5bGUsICd0ZXh0U3R5bGUnLCAnc3VibWVudScsIGljb25zLnRleHRfc3R5bGVdLFxyXG4gICAgICAgICAgICAvKiogcGx1Z2lucyAtIGRpYWxvZyAqL1xyXG4gICAgICAgICAgICBsaW5rOiBbJycsIGxhbmcudG9vbGJhci5saW5rLCAnbGluaycsICdkaWFsb2cnLCBpY29ucy5saW5rXSxcclxuICAgICAgICAgICAgaW1hZ2U6IFsnJywgbGFuZy50b29sYmFyLmltYWdlLCAnaW1hZ2UnLCAnZGlhbG9nJywgaWNvbnMuaW1hZ2VdLFxyXG4gICAgICAgICAgICB2aWRlbzogWycnLCBsYW5nLnRvb2xiYXIudmlkZW8sICd2aWRlbycsICdkaWFsb2cnLCBpY29ucy52aWRlb10sXHJcbiAgICAgICAgICAgIGF1ZGlvOiBbJycsIGxhbmcudG9vbGJhci5hdWRpbywgJ2F1ZGlvJywgJ2RpYWxvZycsIGljb25zLmF1ZGlvXSxcclxuICAgICAgICAgICAgbWF0aDogWycnLCBsYW5nLnRvb2xiYXIubWF0aCwgJ21hdGgnLCAnZGlhbG9nJywgaWNvbnMubWF0aF0sXHJcbiAgICAgICAgICAgIC8qKiBwbHVnaW5zIC0gZmlsZUJyb3dzZXIgKi9cclxuICAgICAgICAgICAgaW1hZ2VHYWxsZXJ5OiBbJycsIGxhbmcudG9vbGJhci5pbWFnZUdhbGxlcnksICdpbWFnZUdhbGxlcnknLCAnZmlsZUJyb3dzZXInLCBpY29ucy5pbWFnZV9nYWxsZXJ5XVxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENyZWF0ZSBhIGdyb3VwIGRpdiBjb250YWluaW5nIGVhY2ggbW9kdWxlXHJcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqL1xyXG4gICAgX2NyZWF0ZU1vZHVsZUdyb3VwOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY29uc3Qgb0RpdiA9IHV0aWwuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcbiAgICAgICAgb0Rpdi5jbGFzc05hbWUgPSAnc2UtYnRuLW1vZHVsZSBzZS1idG4tbW9kdWxlLWJvcmRlcic7XHJcblxyXG4gICAgICAgIGNvbnN0IG9VbCA9IHV0aWwuY3JlYXRlRWxlbWVudCgnVUwnKTtcclxuICAgICAgICBvVWwuY2xhc3NOYW1lID0gJ3NlLW1lbnUtbGlzdCc7XHJcbiAgICAgICAgb0Rpdi5hcHBlbmRDaGlsZChvVWwpO1xyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAnZGl2Jzogb0RpdixcclxuICAgICAgICAgICAgJ3VsJzogb1VsXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlIGEgYnV0dG9uIGVsZW1lbnRcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBidXR0b25DbGFzcyBjbGFzc05hbWUgaW4gYnV0dG9uXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGl0bGUgVGl0bGUgaW4gYnV0dG9uXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZGF0YUNvbW1hbmQgVGhlIGRhdGEtY29tbWFuZCBwcm9wZXJ0eSBvZiB0aGUgYnV0dG9uXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZGF0YURpc3BsYXkgVGhlIGRhdGEtZGlzcGxheSBwcm9wZXJ0eSBvZiB0aGUgYnV0dG9uICgnZGlhbG9nJywgJ3N1Ym1lbnUnLCAnY29tbWFuZCcpXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaW5uZXJIVE1MIEh0bWwgaW4gYnV0dG9uXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gX2Rpc2FibGVkIEJ1dHRvbiBkaXNhYmxlZFxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IF9pY29ucyBJY29uc1xyXG4gICAgICogQHJldHVybnMge09iamVjdH1cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIF9jcmVhdGVCdXR0b246IGZ1bmN0aW9uIChidXR0b25DbGFzcywgdGl0bGUsIGRhdGFDb21tYW5kLCBkYXRhRGlzcGxheSwgaW5uZXJIVE1MLCBfZGlzYWJsZWQsIF9pY29ucykge1xyXG4gICAgICAgIGNvbnN0IG9MaSA9IHV0aWwuY3JlYXRlRWxlbWVudCgnTEknKTtcclxuICAgICAgICBjb25zdCBvQnV0dG9uID0gdXRpbC5jcmVhdGVFbGVtZW50KCdCVVRUT04nKTtcclxuXHJcbiAgICAgICAgb0J1dHRvbi5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnYnV0dG9uJyk7XHJcbiAgICAgICAgb0J1dHRvbi5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ3NlLWJ0bicgKyAoYnV0dG9uQ2xhc3MgPyAnICcgKyBidXR0b25DbGFzcyA6ICcnKSArICcgc2UtdG9vbHRpcCcpO1xyXG4gICAgICAgIG9CdXR0b24uc2V0QXR0cmlidXRlKCdkYXRhLWNvbW1hbmQnLCBkYXRhQ29tbWFuZCk7XHJcbiAgICAgICAgb0J1dHRvbi5zZXRBdHRyaWJ1dGUoJ2RhdGEtZGlzcGxheScsIGRhdGFEaXNwbGF5KTtcclxuICAgICAgICBvQnV0dG9uLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnLTEnKTtcclxuICAgICAgICBcclxuICAgICAgICBpZiAoIWlubmVySFRNTCkgaW5uZXJIVE1MID0gJzxzcGFuIGNsYXNzPVwic2UtaWNvbi10ZXh0XCI+ITwvc3Bhbj4nO1xyXG4gICAgICAgIGlmICgvXmRlZmF1bHRcXC4vaS50ZXN0KGlubmVySFRNTCkpIHtcclxuICAgICAgICAgICAgaW5uZXJIVE1MID0gX2ljb25zW2lubmVySFRNTC5yZXBsYWNlKC9eZGVmYXVsdFxcLi9pLCAnJyldO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoL150ZXh0XFwuL2kudGVzdChpbm5lckhUTUwpKSB7XHJcbiAgICAgICAgICAgIGlubmVySFRNTCA9IGlubmVySFRNTC5yZXBsYWNlKC9edGV4dFxcLi9pLCAnJyk7XHJcbiAgICAgICAgICAgIG9CdXR0b24uY2xhc3NOYW1lICs9ICcgc2UtYnRuLW1vcmUtdGV4dCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpbm5lckhUTUwgKz0gJzxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC1pbm5lclwiPjxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC10ZXh0XCI+JyArICh0aXRsZSB8fCBkYXRhQ29tbWFuZCkgKyAnPC9zcGFuPjwvc3Bhbj4nO1xyXG5cclxuICAgICAgICBpZiAoX2Rpc2FibGVkKSBvQnV0dG9uLnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCB0cnVlKTtcclxuICAgICAgICBcclxuICAgICAgICBvQnV0dG9uLmlubmVySFRNTCA9IGlubmVySFRNTDtcclxuICAgICAgICBvTGkuYXBwZW5kQ2hpbGQob0J1dHRvbik7XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICdsaSc6IG9MaSxcclxuICAgICAgICAgICAgJ2J1dHRvbic6IG9CdXR0b25cclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBDcmVhdGUgZWRpdG9yIEhUTUxcclxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGRvYyBkb2N1bWVudCBvYmplY3RcclxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGJ1dHRvbkxpc3Qgb3B0aW9uLmJ1dHRvbkxpc3RcclxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fG51bGx9IF9wbHVnaW5zIFBsdWdpbnNcclxuICAgICAqIEBwYXJhbSB7QXJyYXl9IG9wdGlvbnMgb3B0aW9uc1xyXG4gICAgICogQHJldHVybnMge09iamVjdH0geyBlbGVtZW50OiAoRWxlbWVudCkgVG9vbGJhciBlbGVtZW50LCBwbHVnaW5zOiAoQXJyYXl8bnVsbCkgUGx1Z2lucyBBcnJheSwgcGx1Z2luQ2FsbEJ1dHRvbnM6IChPYmplY3QpLCByZXNwb25zaXZlQnV0dG9uczogKEFycmF5KSB9XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICBfY3JlYXRlVG9vbEJhcjogZnVuY3Rpb24gKGRvYywgYnV0dG9uTGlzdCwgX3BsdWdpbnMsIG9wdGlvbnMpIHtcclxuICAgICAgICBjb25zdCBzZXBhcmF0b3JfdmVydGljYWwgPSBkb2MuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcbiAgICAgICAgc2VwYXJhdG9yX3ZlcnRpY2FsLmNsYXNzTmFtZSA9ICdzZS10b29sYmFyLXNlcGFyYXRvci12ZXJ0aWNhbCc7XHJcblxyXG4gICAgICAgIGNvbnN0IHRvb2xfYmFyID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xyXG4gICAgICAgIHRvb2xfYmFyLmNsYXNzTmFtZSA9ICdzZS10b29sYmFyIHN1bi1lZGl0b3ItY29tbW9uJztcclxuXHJcbiAgICAgICAgY29uc3QgX2J1dHRvblRyYXkgPSBkb2MuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcbiAgICAgICAgX2J1dHRvblRyYXkuY2xhc3NOYW1lID0gJ3NlLWJ0bi10cmF5JztcclxuICAgICAgICB0b29sX2Jhci5hcHBlbmRDaGlsZChfYnV0dG9uVHJheSk7XHJcblxyXG4gICAgICAgIC8qKiBjcmVhdGUgYnV0dG9uIGxpc3QgKi9cclxuICAgICAgICBidXR0b25MaXN0ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShidXR0b25MaXN0KSk7XHJcbiAgICAgICAgY29uc3QgaWNvbnMgPSBvcHRpb25zLmljb25zO1xyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRCdXR0b25MaXN0ID0gdGhpcy5fZGVmYXVsdEJ1dHRvbnMob3B0aW9ucyk7XHJcbiAgICAgICAgY29uc3QgcGx1Z2luQ2FsbEJ1dHRvbnMgPSB7fTtcclxuICAgICAgICBjb25zdCByZXNwb25zaXZlQnV0dG9ucyA9IFtdO1xyXG4gICAgICAgIGNvbnN0IHBsdWdpbnMgPSB7fTtcclxuICAgICAgICBpZiAoX3BsdWdpbnMpIHtcclxuICAgICAgICAgICAgY29uc3QgcGx1Z2luc1ZhbHVlcyA9IF9wbHVnaW5zLmxlbmd0aCA/IF9wbHVnaW5zIDogT2JqZWN0LmtleXMoX3BsdWdpbnMpLm1hcChmdW5jdGlvbihuYW1lKSB7IHJldHVybiBfcGx1Z2luc1tuYW1lXTsgfSk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBwbHVnaW5zVmFsdWVzLmxlbmd0aCwgcDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBwID0gcGx1Z2luc1ZhbHVlc1tpXS5kZWZhdWx0IHx8IHBsdWdpbnNWYWx1ZXNbaV07XHJcbiAgICAgICAgICAgICAgICBwbHVnaW5zW3AubmFtZV0gPSBwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgbW9kdWxlID0gbnVsbDtcclxuICAgICAgICBsZXQgYnV0dG9uID0gbnVsbDtcclxuICAgICAgICBsZXQgbW9kdWxlRWxlbWVudCA9IG51bGw7XHJcbiAgICAgICAgbGV0IGJ1dHRvbkVsZW1lbnQgPSBudWxsO1xyXG4gICAgICAgIGxldCBwbHVnaW5OYW1lID0gJyc7XHJcbiAgICAgICAgbGV0IHZlcnRpY2FsID0gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgbW9yZUxheWVyID0gdXRpbC5jcmVhdGVFbGVtZW50KCdESVYnKTtcclxuICAgICAgICBtb3JlTGF5ZXIuY2xhc3NOYW1lID0gJ3NlLXRvb2xiYXItbW9yZS1sYXllcic7XHJcblxyXG4gICAgICAgIGJ1dHRvbkdyb3VwTG9vcDpcclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbW9yZSwgbW9yZUNvbnRhaW5lciwgbW9yZUNvbW1hbmQsIGJ1dHRvbkdyb3VwLCBhbGlnbjsgaSA8IGJ1dHRvbkxpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbW9yZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBhbGlnbiA9ICcnO1xyXG4gICAgICAgICAgICBidXR0b25Hcm91cCA9IGJ1dHRvbkxpc3RbaV07XHJcbiAgICAgICAgICAgIG1vZHVsZUVsZW1lbnQgPSB0aGlzLl9jcmVhdGVNb2R1bGVHcm91cCgpO1xyXG5cclxuICAgICAgICAgICAgLy8gYnV0dG9uIG9iamVjdFxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGJ1dHRvbkdyb3VwID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICAgICAgLy8gYnV0dG9ucyBsb29wXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMCwgbW9yZUJ1dHRvbjsgaiA8IGJ1dHRvbkdyb3VwLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uID0gYnV0dG9uR3JvdXBbal07XHJcbiAgICAgICAgICAgICAgICAgICAgbW9yZUJ1dHRvbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoL15cXCVcXGQrLy50ZXN0KGJ1dHRvbikgJiYgaiA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidXR0b25Hcm91cFswXSA9IGJ1dHRvbi5yZXBsYWNlKC9bXlxcZF0vZywgJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zaXZlQnV0dG9ucy5wdXNoKGJ1dHRvbkdyb3VwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uTGlzdC5zcGxpY2UoaS0tLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUgYnV0dG9uR3JvdXBMb29wO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGJ1dHRvbiA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBidXR0b24uYWRkID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5OYW1lID0gYnV0dG9uLm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUgPSBkZWZhdWx0QnV0dG9uTGlzdFtwbHVnaW5OYW1lXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbnNbcGx1Z2luTmFtZV0gPSBidXR0b247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5OYW1lID0gYnV0dG9uLm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUgPSBbYnV0dG9uLmJ1dHRvbkNsYXNzLCBidXR0b24udGl0bGUsIGJ1dHRvbi5uYW1lLCBidXR0b24uZGF0YURpc3BsYXksIGJ1dHRvbi5pbm5lckhUTUwsIGJ1dHRvbi5fZGlzYWJsZWRdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWxpZ25cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC9eXFwtLy50ZXN0KGJ1dHRvbikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduID0gYnV0dG9uLnN1YnN0cigxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZUVsZW1lbnQuZGl2LnN0eWxlLmZsb2F0ID0gYWxpZ247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbW9yZSBidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC9eXFw6Ly50ZXN0KGJ1dHRvbikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vcmVCdXR0b24gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0Y2hlZCA9IGJ1dHRvbi5tYXRjaCgvXlxcOihbXlxcLV0rKVxcLShbXlxcLV0rKVxcLShbXlxcLV0rKS8pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9yZUNvbW1hbmQgPSAnX19zZV9fJyArIG1hdGNoZWRbMV0udHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGl0bGUgPSBtYXRjaGVkWzJdLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlubmVySFRNTCA9IG1hdGNoZWRbM10udHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlID0gWydzZS1idG4tbW9yZScsIHRpdGxlLCBtb3JlQ29tbWFuZCwgJ01PUkUnLCBpbm5lckhUTUxdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ1dHRvbnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUgPSBkZWZhdWx0QnV0dG9uTGlzdFtidXR0b25dO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5OYW1lID0gYnV0dG9uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1vZHVsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VzdG9tID0gcGx1Z2luc1twbHVnaW5OYW1lXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY3VzdG9tKSB0aHJvdyBFcnJvcignW1NVTkVESVRPUi5jcmVhdGUudG9vbGJhci5mYWlsXSBUaGUgYnV0dG9uIG5hbWUgb2YgYSBwbHVnaW4gdGhhdCBkb2VzIG5vdCBleGlzdC4gWycgKyBwbHVnaW5OYW1lICsgJ10nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZSA9IFtjdXN0b20uYnV0dG9uQ2xhc3MsIGN1c3RvbS50aXRsZSwgY3VzdG9tLm5hbWUsIGN1c3RvbS5kaXNwbGF5LCBjdXN0b20uaW5uZXJIVE1MLCBjdXN0b20uX2Rpc2FibGVkXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uRWxlbWVudCA9IHRoaXMuX2NyZWF0ZUJ1dHRvbihtb2R1bGVbMF0sIG1vZHVsZVsxXSwgbW9kdWxlWzJdLCBtb2R1bGVbM10sIG1vZHVsZVs0XSwgbW9kdWxlWzVdLCBpY29ucyk7XHJcbiAgICAgICAgICAgICAgICAgICAgKG1vcmUgPyBtb3JlQ29udGFpbmVyIDogbW9kdWxlRWxlbWVudC51bCkuYXBwZW5kQ2hpbGQoYnV0dG9uRWxlbWVudC5saSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwbHVnaW5zW3BsdWdpbk5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbkNhbGxCdXR0b25zW3BsdWdpbk5hbWVdID0gYnV0dG9uRWxlbWVudC5idXR0b247XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBtb3JlIGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtb3JlQnV0dG9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vcmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb3JlQ29udGFpbmVyID0gdXRpbC5jcmVhdGVFbGVtZW50KCdESVYnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW9yZUNvbnRhaW5lci5jbGFzc05hbWUgPSAnc2UtbW9yZS1sYXllciAnICsgbW9yZUNvbW1hbmQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vcmVDb250YWluZXIuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJzZS1tb3JlLWZvcm1cIj48dWwgY2xhc3M9XCJzZS1tZW51LWxpc3RcIicgKyAoYWxpZ24gPyAnIHN0eWxlPVwiZmxvYXQ6ICcgKyBhbGlnbiArICc7XCInIDogJycpICsgJz48L3VsPjwvZGl2Pic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vcmVMYXllci5hcHBlbmRDaGlsZChtb3JlQ29udGFpbmVyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW9yZUNvbnRhaW5lciA9IG1vcmVDb250YWluZXIuZmlyc3RFbGVtZW50Q2hpbGQuZmlyc3RFbGVtZW50Q2hpbGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh2ZXJ0aWNhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN2ID0gIHNlcGFyYXRvcl92ZXJ0aWNhbC5jbG9uZU5vZGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIF9idXR0b25UcmF5LmFwcGVuZENoaWxkKHN2KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgX2J1dHRvblRyYXkuYXBwZW5kQ2hpbGQobW9kdWxlRWxlbWVudC5kaXYpO1xyXG4gICAgICAgICAgICAgICAgdmVydGljYWwgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8qKiBsaW5lIGJyZWFrICAqL1xyXG4gICAgICAgICAgICBlbHNlIGlmICgvXlxcLyQvLnRlc3QoYnV0dG9uR3JvdXApKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRlckRpdiA9IGRvYy5jcmVhdGVFbGVtZW50KCdESVYnKTtcclxuICAgICAgICAgICAgICAgIGVudGVyRGl2LmNsYXNzTmFtZSA9ICdzZS1idG4tbW9kdWxlLWVudGVyJztcclxuICAgICAgICAgICAgICAgIF9idXR0b25UcmF5LmFwcGVuZENoaWxkKGVudGVyRGl2KTtcclxuICAgICAgICAgICAgICAgIHZlcnRpY2FsID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN3aXRjaCAoX2J1dHRvblRyYXkuY2hpbGRyZW4ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgICAgIF9idXR0b25UcmF5LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVDbGFzcyhfYnV0dG9uVHJheS5maXJzdEVsZW1lbnRDaGlsZCwgJ3NlLWJ0bi1tb2R1bGUtYm9yZGVyJyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnJ0bCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN2ID0gIHNlcGFyYXRvcl92ZXJ0aWNhbC5jbG9uZU5vZGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIHN2LnN0eWxlLmZsb2F0ID0gX2J1dHRvblRyYXkubGFzdEVsZW1lbnRDaGlsZC5zdHlsZS5mbG9hdDtcclxuICAgICAgICAgICAgICAgICAgICBfYnV0dG9uVHJheS5hcHBlbmRDaGlsZChzdik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocmVzcG9uc2l2ZUJ1dHRvbnMubGVuZ3RoID4gMCkgcmVzcG9uc2l2ZUJ1dHRvbnMudW5zaGlmdChidXR0b25MaXN0KTtcclxuICAgICAgICBpZiAobW9yZUxheWVyLmNoaWxkcmVuLmxlbmd0aCA+IDApIF9idXR0b25UcmF5LmFwcGVuZENoaWxkKG1vcmVMYXllcik7XHJcblxyXG4gICAgICAgIC8vIG1lbnUgdHJheVxyXG4gICAgICAgIGNvbnN0IF9tZW51VHJheSA9IGRvYy5jcmVhdGVFbGVtZW50KCdESVYnKTtcclxuICAgICAgICBfbWVudVRyYXkuY2xhc3NOYW1lID0gJ3NlLW1lbnUtdHJheSc7XHJcbiAgICAgICAgdG9vbF9iYXIuYXBwZW5kQ2hpbGQoX21lbnVUcmF5KTtcclxuXHJcbiAgICAgICAgLy8gY292ZXJcclxuICAgICAgICBjb25zdCB0b29sX2NvdmVyID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xyXG4gICAgICAgIHRvb2xfY292ZXIuY2xhc3NOYW1lID0gJ3NlLXRvb2xiYXItY292ZXInO1xyXG4gICAgICAgIHRvb2xfYmFyLmFwcGVuZENoaWxkKHRvb2xfY292ZXIpO1xyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAnZWxlbWVudCc6IHRvb2xfYmFyLFxyXG4gICAgICAgICAgICAncGx1Z2lucyc6IHBsdWdpbnMsXHJcbiAgICAgICAgICAgICdwbHVnaW5DYWxsQnV0dG9ucyc6IHBsdWdpbkNhbGxCdXR0b25zLFxyXG4gICAgICAgICAgICAncmVzcG9uc2l2ZUJ1dHRvbnMnOiByZXNwb25zaXZlQnV0dG9ucyxcclxuICAgICAgICAgICAgJ19tZW51VHJheSc6IF9tZW51VHJheSxcclxuICAgICAgICAgICAgJ19idXR0b25UcmF5JzogX2J1dHRvblRyYXlcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59OyIsIi8qXHJcbiAqIHd5c2l3eWcgd2ViIGVkaXRvclxyXG4gKlxyXG4gKiBzdW5lZGl0b3IuanNcclxuICogQ29weXJpZ2h0IDIwMTcgSmlIb25nIExlZS5cclxuICogTUlUIGxpY2Vuc2UuXHJcbiAqL1xyXG4ndXNlIHN0cmljdCc7XHJcblxyXG4vKipcclxuICogQGRlc2NyaXB0aW9uIEVsZW1lbnRzIGFuZCB2YXJpYWJsZXMgeW91IHNob3VsZCBoYXZlXHJcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCB0ZXh0YXJlYSBlbGVtZW50XHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25zIFRvb2xiYXIgZWxlbWVudCB5b3UgY3JlYXRlZFxyXG4gKiBAcGFyYW0ge0pTT058T2JqZWN0fSBvcHRpb25zIEluc2VydGVkIG9wdGlvbnNcclxuICogQHJldHVybnMge09iamVjdH0ge0VsZW1lbnRzLCB2YXJpYWJsZXMgb2YgdGhlIGVkaXRvciwgb3B0aW9ufVxyXG4gKiBAcHJpdmF0ZVxyXG4gKi9cclxuY29uc3QgX0NvbnRleHQgPSBmdW5jdGlvbiAoZWxlbWVudCwgY29ucywgb3B0aW9ucykge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBlbGVtZW50OiB7XHJcbiAgICAgICAgICAgIG9yaWdpbkVsZW1lbnQ6IGVsZW1lbnQsXHJcbiAgICAgICAgICAgIHRvcEFyZWE6IGNvbnMuX3RvcCxcclxuICAgICAgICAgICAgcmVsYXRpdmU6IGNvbnMuX3JlbGF0aXZlLFxyXG4gICAgICAgICAgICB0b29sYmFyOiBjb25zLl90b29sQmFyLFxyXG4gICAgICAgICAgICBfYnV0dG9uVHJheTogY29ucy5fdG9vbEJhci5xdWVyeVNlbGVjdG9yKCcuc2UtYnRuLXRyYXknKSxcclxuICAgICAgICAgICAgX21lbnVUcmF5OiBjb25zLl9tZW51VHJheSxcclxuICAgICAgICAgICAgcmVzaXppbmdCYXI6IGNvbnMuX3Jlc2l6aW5nQmFyLFxyXG4gICAgICAgICAgICBuYXZpZ2F0aW9uOiBjb25zLl9uYXZpZ2F0aW9uLFxyXG4gICAgICAgICAgICBjaGFyV3JhcHBlcjogY29ucy5fY2hhcldyYXBwZXIsXHJcbiAgICAgICAgICAgIGNoYXJDb3VudGVyOiBjb25zLl9jaGFyQ291bnRlcixcclxuICAgICAgICAgICAgZWRpdG9yQXJlYTogY29ucy5fZWRpdG9yQXJlYSxcclxuICAgICAgICAgICAgd3lzaXd5Z0ZyYW1lOiBjb25zLl93eXNpd3lnQXJlYSxcclxuICAgICAgICAgICAgd3lzaXd5ZzogY29ucy5fd3lzaXd5Z0FyZWEsIC8vIGlmIChvcHRpb25zLmlmcmFtZSkgY29ucy5fd3lzaXd5Z0FyZWEuY29udGVudERvY3VtZW50LmJvZHlcclxuICAgICAgICAgICAgY29kZTogY29ucy5fY29kZUFyZWEsXHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBjb25zLl9wbGFjZWhvbGRlcixcclxuICAgICAgICAgICAgbG9hZGluZzogY29ucy5fbG9hZGluZyxcclxuICAgICAgICAgICAgbGluZUJyZWFrZXI6IGNvbnMuX2xpbmVCcmVha2VyLFxyXG4gICAgICAgICAgICBsaW5lQnJlYWtlcl90OiBjb25zLl9saW5lQnJlYWtlcl90LFxyXG4gICAgICAgICAgICBsaW5lQnJlYWtlcl9iOiBjb25zLl9saW5lQnJlYWtlcl9iLFxyXG4gICAgICAgICAgICByZXNpemVCYWNrZ3JvdW5kOiBjb25zLl9yZXNpemVCYWNrLFxyXG4gICAgICAgICAgICBfc3RpY2t5RHVtbXk6IGNvbnMuX3N0aWNreUR1bW15LFxyXG4gICAgICAgICAgICBfYXJyb3c6IGNvbnMuX2Fycm93XHJcbiAgICAgICAgfSxcclxuICAgICAgICB0b29sOiB7XHJcbiAgICAgICAgICAgIGNvdmVyOiBjb25zLl90b29sQmFyLnF1ZXJ5U2VsZWN0b3IoJy5zZS10b29sYmFyLWNvdmVyJyksXHJcbiAgICAgICAgICAgIGJvbGQ6IGNvbnMuX3Rvb2xCYXIucXVlcnlTZWxlY3RvcignLl9zZV9jb21tYW5kX2JvbGQnKSxcclxuICAgICAgICAgICAgdW5kZXJsaW5lOiBjb25zLl90b29sQmFyLnF1ZXJ5U2VsZWN0b3IoJy5fc2VfY29tbWFuZF91bmRlcmxpbmUnKSxcclxuICAgICAgICAgICAgaXRhbGljOiBjb25zLl90b29sQmFyLnF1ZXJ5U2VsZWN0b3IoJy5fc2VfY29tbWFuZF9pdGFsaWMnKSxcclxuICAgICAgICAgICAgc3RyaWtlOiBjb25zLl90b29sQmFyLnF1ZXJ5U2VsZWN0b3IoJy5fc2VfY29tbWFuZF9zdHJpa2UnKSxcclxuICAgICAgICAgICAgc3Vic2NyaXB0OiBjb25zLl90b29sQmFyLnF1ZXJ5U2VsZWN0b3IoJy5fc2VfY29tbWFuZF9zdWJzY3JpcHQnKSxcclxuICAgICAgICAgICAgc3VwZXJzY3JpcHQ6IGNvbnMuX3Rvb2xCYXIucXVlcnlTZWxlY3RvcignLl9zZV9jb21tYW5kX3N1cGVyc2NyaXB0JyksXHJcbiAgICAgICAgICAgIHVuZG86IGNvbnMuX3Rvb2xCYXIucXVlcnlTZWxlY3RvcignLl9zZV9jb21tYW5kX3VuZG8nKSxcclxuICAgICAgICAgICAgcmVkbzogY29ucy5fdG9vbEJhci5xdWVyeVNlbGVjdG9yKCcuX3NlX2NvbW1hbmRfcmVkbycpLFxyXG4gICAgICAgICAgICBzYXZlOiBjb25zLl90b29sQmFyLnF1ZXJ5U2VsZWN0b3IoJy5fc2VfY29tbWFuZF9zYXZlJyksXHJcbiAgICAgICAgICAgIG91dGRlbnQ6IGNvbnMuX3Rvb2xCYXIucXVlcnlTZWxlY3RvcignLl9zZV9jb21tYW5kX291dGRlbnQnKSxcclxuICAgICAgICAgICAgaW5kZW50OiBjb25zLl90b29sQmFyLnF1ZXJ5U2VsZWN0b3IoJy5fc2VfY29tbWFuZF9pbmRlbnQnKSxcclxuICAgICAgICAgICAgZnVsbFNjcmVlbjogY29ucy5fdG9vbEJhci5xdWVyeVNlbGVjdG9yKCcuX3NlX2NvbW1hbmRfZnVsbFNjcmVlbicpLFxyXG4gICAgICAgICAgICBzaG93QmxvY2tzOiBjb25zLl90b29sQmFyLnF1ZXJ5U2VsZWN0b3IoJy5fc2VfY29tbWFuZF9zaG93QmxvY2tzJyksXHJcbiAgICAgICAgICAgIGNvZGVWaWV3OiBjb25zLl90b29sQmFyLnF1ZXJ5U2VsZWN0b3IoJy5fc2VfY29tbWFuZF9jb2RlVmlldycpXHJcbiAgICAgICAgfSxcclxuICAgICAgICBvcHRpb25zOiBvcHRpb25zLFxyXG4gICAgICAgIG9wdGlvbjogb3B0aW9uc1xyXG4gICAgfTtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IF9Db250ZXh0OyIsIi8qXHJcbiAqIHd5c2l3eWcgd2ViIGVkaXRvclxyXG4gKlxyXG4gKiBzdW5lZGl0b3IuanNcclxuICogQ29weXJpZ2h0IDIwMTcgSmlIb25nIExlZS5cclxuICogTUlUIGxpY2Vuc2UuXHJcbiAqL1xyXG4ndXNlIHN0cmljdCc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgICBuYW1lOiAnbm90aWNlJyxcclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnN0cnVjdG9yXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gY29yZSBDb3JlIG9iamVjdCBcclxuICAgICAqL1xyXG4gICAgYWRkOiBmdW5jdGlvbiAoY29yZSkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBjb3JlLmNvbnRleHQ7XHJcbiAgICAgICAgY29udGV4dC5ub3RpY2UgPSB7fTtcclxuXHJcbiAgICAgICAgLyoqIGRpYWxvZyAqL1xyXG4gICAgICAgIGxldCBub3RpY2VfZGl2ID0gY29yZS51dGlsLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xyXG4gICAgICAgIGxldCBub3RpY2Vfc3BhbiA9IGNvcmUudXRpbC5jcmVhdGVFbGVtZW50KCdTUEFOJyk7XHJcbiAgICAgICAgbGV0IG5vdGljZV9idXR0b24gPSBjb3JlLnV0aWwuY3JlYXRlRWxlbWVudCgnQlVUVE9OJyk7XHJcblxyXG4gICAgICAgIG5vdGljZV9kaXYuY2xhc3NOYW1lID0gJ3NlLW5vdGljZSc7XHJcbiAgICAgICAgbm90aWNlX2J1dHRvbi5jbGFzc05hbWUgPSAnY2xvc2UnO1xyXG4gICAgICAgIG5vdGljZV9idXR0b24uc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgJ0Nsb3NlJyk7XHJcbiAgICAgICAgbm90aWNlX2J1dHRvbi5zZXRBdHRyaWJ1dGUoJ3RpdGxlJywgY29yZS5sYW5nLmRpYWxvZ0JveC5jbG9zZSk7XHJcbiAgICAgICAgbm90aWNlX2J1dHRvbi5pbm5lckhUTUwgPSBjb3JlLmljb25zLmNhbmNlbDtcclxuICAgICAgICBcclxuICAgICAgICBub3RpY2VfZGl2LmFwcGVuZENoaWxkKG5vdGljZV9zcGFuKTtcclxuICAgICAgICBub3RpY2VfZGl2LmFwcGVuZENoaWxkKG5vdGljZV9idXR0b24pO1xyXG5cclxuICAgICAgICBjb250ZXh0Lm5vdGljZS5tb2RhbCA9IG5vdGljZV9kaXY7XHJcbiAgICAgICAgY29udGV4dC5ub3RpY2UubWVzc2FnZSA9IG5vdGljZV9zcGFuO1xyXG5cclxuICAgICAgICAvKiogYWRkIGV2ZW50IGxpc3RlbmVycyAqL1xyXG4gICAgICAgIG5vdGljZV9idXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLm9uQ2xpY2tfY2FuY2VsLmJpbmQoY29yZSkpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8qKiBhcHBlbmQgaHRtbCAqL1xyXG4gICAgICAgIGNvbnRleHQuZWxlbWVudC5lZGl0b3JBcmVhLmFwcGVuZENoaWxkKG5vdGljZV9kaXYpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8qKiBlbXB0eSBtZW1vcnkgKi9cclxuICAgICAgICBub3RpY2VfZGl2ID0gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gRXZlbnQgd2hlbiBjbGlja2luZyB0aGUgY2FuY2VsIGJ1dHRvblxyXG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBlIEV2ZW50IG9iamVjdFxyXG4gICAgICovXHJcbiAgICBvbkNsaWNrX2NhbmNlbDogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICB0aGlzLnBsdWdpbnMubm90aWNlLmNsb3NlLmNhbGwodGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uICBPcGVuIHRoZSBub3RpY2UgcGFuZWxcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0IE5vdGljZSBtZXNzYWdlXHJcbiAgICAgKi9cclxuICAgIG9wZW46IGZ1bmN0aW9uICh0ZXh0KSAge1xyXG4gICAgICAgIHRoaXMuY29udGV4dC5ub3RpY2UubWVzc2FnZS50ZXh0Q29udGVudCA9IHRleHQ7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0Lm5vdGljZS5tb2RhbC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gIE9wZW4gdGhlIG5vdGljZSBwYW5lbFxyXG4gICAgICovXHJcbiAgICBjbG9zZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuY29udGV4dC5ub3RpY2UubW9kYWwuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgIH1cclxufTtcclxuIiwiLypcclxuICogd3lzaXd5ZyB3ZWIgZWRpdG9yXHJcbiAqXHJcbiAqIHN1bmVkaXRvci5qc1xyXG4gKiBDb3B5cmlnaHQgMjAxNyBKaUhvbmcgTGVlLlxyXG4gKiBNSVQgbGljZW5zZS5cclxuICovXHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbmltcG9ydCBjb3JlIGZyb20gJy4vbGliL2NvcmUnO1xyXG5pbXBvcnQgdXRpbCBmcm9tICcuL2xpYi91dGlsJztcclxuaW1wb3J0IF9Db25zdHJ1Y3RvciBmcm9tICcuL2xpYi9jb25zdHJ1Y3Rvcic7XHJcbmltcG9ydCBfQ29udGV4dCBmcm9tICcuL2xpYi9jb250ZXh0JztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIGNyZWF0ZSBmdW5jdGlvbiB3aXRoIHByZXNldCBvcHRpb25zLlxyXG4gICAgICogSWYgdGhlIG9wdGlvbnMgb3ZlcmxhcCwgdGhlIG9wdGlvbnMgb2YgdGhlICdjcmVhdGUnIGZ1bmN0aW9uIHRha2UgcHJlY2VkZW5jZS5cclxuICAgICAqIEBwYXJhbSB7SnNvbn0gb3B0aW9ucyBJbml0aWFsaXphdGlvbiBvcHRpb25zXHJcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fVxyXG4gICAgICovXHJcbiAgICBpbml0OiBmdW5jdGlvbiAoaW5pdF9vcHRpb25zKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgY3JlYXRlOiBmdW5jdGlvbiAoaWRPckVsZW1lbnQsIG9wdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZShpZE9yRWxlbWVudCwgb3B0aW9ucywgaW5pdF9vcHRpb25zKTtcclxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlIHRoZSBzdW5lZGl0b3JcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfEVsZW1lbnR9IGlkT3JFbGVtZW50IHRleHRhcmVhIElkIG9yIHRleHRhcmVhIGVsZW1lbnRcclxuICAgICAqIEBwYXJhbSB7SlNPTnxPYmplY3R9IG9wdGlvbnMgdXNlciBvcHRpb25zXHJcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fVxyXG4gICAgICovXHJcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIChpZE9yRWxlbWVudCwgb3B0aW9ucywgX2luaXRfb3B0aW9ucykge1xyXG4gICAgICAgIHV0aWwuX3Byb3BlcnRpZXNJbml0KCk7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIG9wdGlvbnMgPSB7fTtcclxuICAgICAgICBpZiAoX2luaXRfb3B0aW9ucykge1xyXG4gICAgICAgICAgICBvcHRpb25zID0gIFtfaW5pdF9vcHRpb25zLCBvcHRpb25zXS5yZWR1Y2UoZnVuY3Rpb24gKGluaXQsIG9wdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIG9wdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdXRpbC5oYXNPd24ob3B0aW9uLCBrZXkpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSAncGx1Z2lucycgJiYgb3B0aW9uW2tleV0gJiYgaW5pdFtrZXldKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpID0gaW5pdFtrZXldLCBvID0gb3B0aW9uW2tleV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBpLmxlbmd0aCA/IGkgOiBPYmplY3Qua2V5cyhpKS5tYXAoZnVuY3Rpb24obmFtZSkgeyByZXR1cm4gaVtuYW1lXTsgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gPSBvLmxlbmd0aCA/IG8gOiBPYmplY3Qua2V5cyhvKS5tYXAoZnVuY3Rpb24obmFtZSkgeyByZXR1cm4gb1tuYW1lXTsgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRba2V5XSA9IChvLmZpbHRlcihmdW5jdGlvbih2YWwpIHsgcmV0dXJuIGkuaW5kZXhPZih2YWwpID09PSAtMTsgfSkpLmNvbmNhdChpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0W2tleV0gPSBvcHRpb25ba2V5XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5pdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge30pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICBjb25zdCBlbGVtZW50ID0gdHlwZW9mIGlkT3JFbGVtZW50ID09PSAnc3RyaW5nJyA/IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkT3JFbGVtZW50KSA6IGlkT3JFbGVtZW50O1xyXG5cclxuICAgICAgICBpZiAoIWVsZW1lbnQpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBpZE9yRWxlbWVudCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCdbU1VORURJVE9SLmNyZWF0ZS5mYWlsXSBUaGUgZWxlbWVudCBmb3IgdGhhdCBpZCB3YXMgbm90IGZvdW5kIChJRDpcIicgKyBpZE9yRWxlbWVudCArICdcIiknKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ1tTVU5FRElUT1IuY3JlYXRlLmZhaWxdIHN1bmVkaXRvciByZXF1aXJlcyB0ZXh0YXJlYVxcJ3MgZWxlbWVudCBvciBpZCB2YWx1ZScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgY29ucyA9IF9Db25zdHJ1Y3Rvci5pbml0KGVsZW1lbnQsIG9wdGlvbnMpO1xyXG5cclxuICAgICAgICBpZiAoY29ucy5jb25zdHJ1Y3RlZC5fdG9wLmlkICYmIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNvbnMuY29uc3RydWN0ZWQuX3RvcC5pZCkpIHtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ1tTVU5FRElUT1IuY3JlYXRlLmZhaWxdIFRoZSBJRCBvZiB0aGUgc3VuZWRpdG9yIHlvdSBhcmUgdHJ5aW5nIHRvIGNyZWF0ZSBhbHJlYWR5IGV4aXN0cyAoSUQ6XCInICsgY29ucy5jb25zdHJ1Y3RlZC5fdG9wLmlkICsgJ1wiKScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNvcmUoX0NvbnRleHQoZWxlbWVudCwgY29ucy5jb25zdHJ1Y3RlZCwgY29ucy5vcHRpb25zKSwgY29ucy5wbHVnaW5DYWxsQnV0dG9ucywgY29ucy5wbHVnaW5zLCBjb25zLm9wdGlvbnMubGFuZywgb3B0aW9ucywgY29ucy5fcmVzcG9uc2l2ZUJ1dHRvbnMpO1xyXG4gICAgfVxyXG59O1xyXG4iLCIvKlxyXG4gKiB3eXNpd3lnIHdlYiBlZGl0b3JcclxuICpcclxuICogc3VuZWRpdG9yLmpzXHJcbiAqIENvcHlyaWdodCAyMDE3IEppSG9uZyBMZWUuXHJcbiAqIE1JVCBsaWNlbnNlLlxyXG4gKi9cclxuJ3VzZSBzdHJpY3QnO1xyXG5cclxuaW1wb3J0IF9Db25zdHJ1Y3RvciBmcm9tICcuL2NvbnN0cnVjdG9yJztcclxuaW1wb3J0IF9Db250ZXh0IGZyb20gJy4vY29udGV4dCc7XHJcbmltcG9ydCBfaGlzdG9yeSBmcm9tICcuL2hpc3RvcnknO1xyXG5pbXBvcnQgX3V0aWwgZnJvbSAnLi91dGlsJztcclxuaW1wb3J0IF9ub3RpY2UgZnJvbSAnLi4vcGx1Z2lucy9tb2R1bGVzL19ub3RpY2UnO1xyXG5cclxuLyoqXHJcbiAqIEBkZXNjcmlwdGlvbiBTdW5FZGl0b3IgY29uc3R1Y3RvciBmdW5jdGlvbi5cclxuICogY3JlYXRlIGNvcmUgb2JqZWN0IGFuZCBldmVudCByZWdpc3RyYXRpb24uXHJcbiAqIGNvcmUsIGV2ZW50LCBmdW5jdGlvbnNcclxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcclxuICogQHBhcmFtIHtPYmplY3R9IHBsdWdpbkNhbGxCdXR0b25zXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBwbHVnaW5zIFxyXG4gKiBAcGFyYW0ge09iamVjdH0gbGFuZ1xyXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xyXG4gKiBAcGFyYW0ge09iamVjdH0gX3Jlc3BvbnNpdmVCdXR0b25zXHJcbiAqIEByZXR1cm5zIHtPYmplY3R9IGZ1bmN0aW9ucyBPYmplY3RcclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChjb250ZXh0LCBwbHVnaW5DYWxsQnV0dG9ucywgcGx1Z2lucywgbGFuZywgb3B0aW9ucywgX3Jlc3BvbnNpdmVCdXR0b25zKSB7XHJcbiAgICBjb25zdCBfZCA9IGNvbnRleHQuZWxlbWVudC5vcmlnaW5FbGVtZW50Lm93bmVyRG9jdW1lbnQgfHwgZG9jdW1lbnQ7XHJcbiAgICBjb25zdCBfdyA9IF9kLmRlZmF1bHRWaWV3IHx8IHdpbmRvdztcclxuICAgIGNvbnN0IHV0aWwgPSBfdXRpbDtcclxuICAgIGNvbnN0IGljb25zID0gb3B0aW9ucy5pY29ucztcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBlZGl0b3IgY29yZSBvYmplY3RcclxuICAgICAqIHNob3VsZCBhbHdheXMgYmluZCB0aGlzIG9iamVjdCB3aGVuIHJlZ2lzdGVyaW5nIGFuIGV2ZW50IGluIHRoZSBwbHVnLWluLlxyXG4gICAgICovXHJcbiAgICBjb25zdCBjb3JlID0ge1xyXG4gICAgICAgIF9kOiBfZCxcclxuICAgICAgICBfdzogX3csXHJcbiAgICAgICAgX3BhcnNlcjogbmV3IF93LkRPTVBhcnNlcigpLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gRG9jdW1lbnQgb2JqZWN0IG9mIHRoZSBpZnJhbWUgaWYgY3JlYXRlZCBhcyBhbiBpZnJhbWUgfHwgX2RcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF93ZDogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFdpbmRvdyBvYmplY3Qgb2YgdGhlIGlmcmFtZSBpZiBjcmVhdGVkIGFzIGFuIGlmcmFtZSB8fCBfd1xyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX3d3OiBudWxsLFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBDbG9zZXN0IFNoYWRvd1Jvb3QgdG8gZWRpdG9yIGlmIGZvdW5kXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfc2hhZG93Um9vdDogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEJsb2NrIGNvbnRyb2xsZXIgbW91c2Vkb3duIGV2ZW50cyBpbiBcInNoYWRvd1Jvb3RcIiBlbnZpcm9ubWVudFxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX3NoYWRvd1Jvb3RDb250cm9sbGVyRXZlbnRUYXJnZXQ6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBVdGlsIG9iamVjdFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHV0aWw6IHV0aWwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBGdW5jdGlvbnMgb2JqZWN0XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZnVuY3Rpb25zOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gRWRpdG9yIG9wdGlvbnNcclxuICAgICAgICAgKi9cclxuICAgICAgICBvcHRpb25zOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQ29tcHV0ZWQgc3R5bGUgb2YgdGhlIHd5c2l3eWcgYXJlYSAod2luZG93LmdldENvbXB1dGVkU3R5bGUoY29udGV4dC5lbGVtZW50Lnd5c2l3eWcpKVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHd3Q29tcHV0ZWRTdHlsZTogX3cuZ2V0Q29tcHV0ZWRTdHlsZShjb250ZXh0LmVsZW1lbnQud3lzaXd5ZyksXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBOb3RpY2Ugb2JqZWN0XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbm90aWNlOiBfbm90aWNlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gRGVmYXVsdCBpY29ucyBvYmplY3RcclxuICAgICAgICAgKi9cclxuICAgICAgICBpY29uczogaWNvbnMsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBIaXN0b3J5IG9iamVjdCBmb3IgdW5kbywgcmVkb1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGhpc3Rvcnk6IG51bGwsXHJcbiAgICAgICAgXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEVsZW1lbnRzIGFuZCB1c2VyIG9wdGlvbnMgcGFyYW1ldGVycyBvZiB0aGUgc3VuZWRpdG9yXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY29udGV4dDogY29udGV4dCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFBsdWdpbiBidXR0b25zXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcGx1Z2luQ2FsbEJ1dHRvbnM6IHBsdWdpbkNhbGxCdXR0b25zLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gTG9hZGVkIHBsdWdpbnNcclxuICAgICAgICAgKi9cclxuICAgICAgICBwbHVnaW5zOiBwbHVnaW5zIHx8IHt9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gV2hldGhlciB0aGUgcGx1Z2luIGlzIGluaXRpYWxpemVkXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaW5pdFBsdWdpbnM6IHt9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gT2JqZWN0IGZvciBtYW5hZ2luZyBzdWJtZW51IGVsZW1lbnRzXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfdGFyZ2V0UGx1Z2luczoge30sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBTYXZlIHJlbmRlcmVkIHN1Ym1lbnVzIGFuZCBjb250YWluZXJzXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfbWVudVRyYXk6IHt9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gbG9hZGVkIGxhbmd1YWdlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbGFuZzogbGFuZyxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFRoZSBzZWxlY3Rpb24gbm9kZSAoY29yZS5nZXRTZWxlY3Rpb25Ob2RlKCkpIHRvIHdoaWNoIHRoZSBlZmZlY3Qgd2FzIGxhc3QgYXBwbGllZFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGVmZmVjdE5vZGU6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBzdWJtZW51IGVsZW1lbnRcclxuICAgICAgICAgKi9cclxuICAgICAgICBzdWJtZW51OiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gY29udGFpbmVyIGVsZW1lbnRcclxuICAgICAgICAgKi9cclxuICAgICAgICBjb250YWluZXI6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBjdXJyZW50IHN1Ym1lbnQgbmFtZVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX3N1Ym1lbnVOYW1lOiAnJyxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIGJpbmRlZCBzdWJtZW51T2ZmIG1ldGhvZFxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX2JpbmRlZFN1Ym1lbnVPZmY6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBiaW5kZWQgY29udGFpbmVyT2ZmIG1ldGhvZFxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX2JpbmRlZENvbnRhaW5lck9mZjogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIGFjdGl2ZSBidXR0b24gZWxlbWVudCBpbiBzdWJtZW51XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgc3VibWVudUFjdGl2ZUJ1dHRvbjogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIGFjdGl2ZSBidXR0b24gZWxlbWVudCBpbiBjb250YWluZXJcclxuICAgICAgICAgKi9cclxuICAgICAgICBjb250YWluZXJBY3RpdmVCdXR0b246IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgZWxlbWVudHMgYXJyYXkgdG8gYmUgcHJvY2Vzc2VkIHVudmlzaWJsZSB3aGVuIHRoZSBjb250cm9sbGVyc09mZiBmdW5jdGlvbiBpcyBleGVjdXRlZCAocmVzaXppbmcsIGxpbmsgbW9kaWZpZWQgYnV0dG9uLCB0YWJsZSBjb250cm9sbGVyKVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvbnRyb2xsZXJBcnJheTogW10sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgbmFtZSBvZiB0aGUgcGx1Z2luIHRoYXQgY2FsbGVkIHRoZSBjdXJyZW50bHkgYWN0aXZlIGNvbnRyb2xsZXJcclxuICAgICAgICAgKi9cclxuICAgICAgICBjdXJyZW50Q29udHJvbGxlck5hbWU6ICcnLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gVGhlIHRhcmdldCBlbGVtZW50IG9mIGN1cnJlbnQgY29udHJvbGxlclxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGN1cnJlbnRDb250cm9sbGVyVGFyZ2V0OiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gVGhlIGZpbGUgY29tcG9uZW50IG9iamVjdCBvZiBjdXJyZW50IHNlbGVjdGVkIGZpbGUgdGFnIChnZXRGaWxlQ29tcG9uZW50KVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGN1cnJlbnRGaWxlQ29tcG9uZW50SW5mbzogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEFuIGFycmF5IG9mIGJ1dHRvbnMgd2hvc2UgY2xhc3MgbmFtZSBpcyBub3QgXCJzZS1jb2RlLXZpZXctZW5hYmxlZFwiXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY29kZVZpZXdEaXNhYmxlZEJ1dHRvbnM6IFtdLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQW4gYXJyYXkgb2YgYnV0dG9ucyB3aG9zZSBjbGFzcyBuYW1lIGlzIG5vdCBcInNlLXJlc2l6aW5nLWVuYWJsZWRcIlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHJlc2l6aW5nRGlzYWJsZWRCdXR0b25zOiBbXSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIGFjdGl2ZSBtb3JlIGxheWVyIGVsZW1lbnQgaW4gc3VibWVudVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX21vcmVMYXllckFjdGl2ZUJ1dHRvbjogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFRhZyB3aGl0ZWxpc3QgUmVnRXhwIG9iamVjdCB1c2VkIGluIFwiX2NvbnNpc3RlbmN5Q2hlY2tPZkhUTUxcIiBtZXRob2RcclxuICAgICAgICAgKiBeKG9wdGlvbnMuX2VkaXRvclRhZ3NXaGl0ZWxpc3QpJFxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX2h0bWxDaGVja1doaXRlbGlzdFJlZ0V4cDogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFJlZ0V4cCB3aGVuIHVzaW5nIGNoZWNrIGRpc2FsbG93ZCB0YWdzLiAoYiwgaSwgaW5zLCBzdHJpa2UsIHMpXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfZGlzYWxsb3dlZFRleHRUYWdzUmVnRXhwOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gRWRpdG9yIHRhZ3Mgd2hpdGVsaXN0IChSZWdFeHAgb2JqZWN0KVxyXG4gICAgICAgICAqIHV0aWwuY3JlYXRlVGFnc1doaXRlbGlzdChvcHRpb25zLl9lZGl0b3JUYWdzV2hpdGVsaXN0KVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGVkaXRvclRhZ3NXaGl0ZWxpc3RSZWdFeHA6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBUYWcgd2hpdGVsaXN0IHdoZW4gcGFzdGluZyAoUmVnRXhwIG9iamVjdClcclxuICAgICAgICAgKiB1dGlsLmNyZWF0ZVRhZ3NXaGl0ZWxpc3Qob3B0aW9ucy5wYXN0ZVRhZ3NXaGl0ZWxpc3QpXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcGFzdGVUYWdzV2hpdGVsaXN0UmVnRXhwOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQm9vbGVhbiB2YWx1ZSBvZiB3aGV0aGVyIHRoZSBlZGl0b3IgaGFzIGZvY3VzXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaGFzRm9jdXM6IGZhbHNlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQm9vbGVhbiB2YWx1ZSBvZiB3aGV0aGVyIHRoZSBlZGl0b3IgaXMgZGlzYWJsZWRcclxuICAgICAgICAgKi9cclxuICAgICAgICBpc0Rpc2FibGVkOiBmYWxzZSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEJvb2xlYW4gdmFsdWUgb2Ygd2hldGhlciB0aGUgZWRpdG9yIGlzIHJlYWRPbmx5XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaXNSZWFkT25seTogZmFsc2UsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBBdHRyaWJ1dGVzIHdoaXRlbGlzdCB1c2VkIGJ5IHRoZSBjbGVhbkhUTUwgbWV0aG9kXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfYXR0cmlidXRlc1doaXRlbGlzdFJlZ0V4cDogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEF0dHJpYnV0ZXMgb2YgdGFncyB3aGl0ZWxpc3QgdXNlZCBieSB0aGUgY2xlYW5IVE1MIG1ldGhvZFxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX2F0dHJpYnV0ZXNUYWdzV2hpdGVsaXN0OiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gYmluZGVkIGNvbnRyb2xsZXJzT2ZmIG1ldGhvZFxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX2JpbmRDb250cm9sbGVyc09mZjogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIElzIGlubGluZSBtb2RlP1xyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX2lzSW5saW5lOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gSXMgYmFsbG9vbnxiYWxsb29uLWFsd2F5cyBtb2RlP1xyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX2lzQmFsbG9vbjogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIElzIGJhbGxvb24tYWx3YXlzIG1vZGU/XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfaXNCYWxsb29uQWx3YXlzOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gUmVxdWlyZWQgdmFsdWUgd2hlbiB1c2luZyBpbmxpbmUgbW9kZSB0byBzdGlja3kgdG9vbGJhclxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX2lubGluZVRvb2xiYXJBdHRyOiB7dG9wOiAnJywgd2lkdGg6ICcnLCBpc1Nob3c6IGZhbHNlfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFZhcmlhYmxlIHRoYXQgY29udHJvbHMgdGhlIFwiYmx1clwiIGV2ZW50IGluIHRoZSBlZGl0b3Igb2YgaW5saW5lIG9yIGJhbGxvb24gbW9kZSB3aGVuIHRoZSBmb2N1cyBpcyBtb3ZlZCB0byBzdWJtZW51XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfbm90SGlkZVRvb2xiYXI6IGZhbHNlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gVmFyaWFibGUgdmFsdWUgdGhhdCBzdGlja3kgdG9vbGJhciBtb2RlXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfc3RpY2t5OiBmYWxzZSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFZhcmlhYmxlcyBmb3IgY29udHJvbGxpbmcgZm9jdXMgYW5kIGJsdXIgZXZlbnRzXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfYW50aUJsdXI6IGZhbHNlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQ29tcG9uZW50IGxpbmUgYnJlYWtlciBlbGVtZW50XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfbGluZUJyZWFrZXI6IG51bGwsXHJcbiAgICAgICAgX2xpbmVCcmVha2VyQnV0dG9uOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gSWYgdHJ1ZSwgKGluaXRpYWxpemUsIHJlc2V0KSBhbGwgaW5kZXhlcyBvZiBpbWFnZSwgdmlkZW8gaW5mb3JtYXRpb25cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9jb21wb25lbnRzSW5mb0luaXQ6IHRydWUsXHJcbiAgICAgICAgX2NvbXBvbmVudHNJbmZvUmVzZXQ6IGZhbHNlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gUGx1Z2lucyBhcnJheSB3aXRoIFwiYWN0aXZlXCIgbWV0aG9kLlxyXG4gICAgICAgICAqIFwiYWN0aXZlUGx1Z2luc1wiIHJ1bnMgdGhlIFwiYWRkXCIgbWV0aG9kIHdoZW4gY3JlYXRpbmcgdGhlIGVkaXRvci5cclxuICAgICAgICAgKi9cclxuICAgICAgICBhY3RpdmVQbHVnaW5zOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gSW5mb3JtYXRpb24gb2YgdGFncyB0aGF0IHNob3VsZCBtYWludGFpbiBIVE1MIHN0cnVjdHVyZSwgc3R5bGUsIGNsYXNzIG5hbWUsIGV0Yy4gKEluIHVzZSBieSBcIm1hdGhcIiBwbHVnaW4pXHJcbiAgICAgICAgICogV2hlbiBpbnNlcnRpbmcgXCJodG1sXCIgc3VjaCBhcyBwYXN0ZSwgaXQgaXMgZXhlY3V0ZWQgb24gdGhlIFwiaHRtbFwiIHRvIGJlIGluc2VydGVkLiAoY29yZS5jbGVhbkhUTUwpXHJcbiAgICAgICAgICogQmFzaWMgRWRpdG9yIEFjdGlvbnM6XHJcbiAgICAgICAgICogMS4gQWxsIGNsYXNzZXMgbm90IHN0YXJ0aW5nIHdpdGggXCJfX3NlX19cIiBvciBcInNlLVwiIGluIHRoZSBlZGl0b3IgYXJlIHJlbW92ZWQuXHJcbiAgICAgICAgICogMi4gVGhlIHN0eWxlIG9mIGFsbCB0YWdzIGV4Y2VwdCB0aGUgXCJzcGFuXCIgdGFnIGlzIHJlbW92ZWQgZnJvbSB0aGUgZWRpdG9yLlxyXG4gICAgICAgICAqIFwibWFuYWdlZFRhZ3NJbmZvXCIgc3RydWN0dXJlIGV4OlxyXG4gICAgICAgICAqIG1hbmFnZWRUYWdzSW5mbzoge1xyXG4gICAgICAgICAqICAgcXVlcnk6ICcuX19zZV9feHh4LCBzZS14eHgnXHJcbiAgICAgICAgICogICBtYXA6IHtcclxuICAgICAgICAgKiAgICAgJ19fc2VfX3h4eCc6IG1ldGhvZC5iaW5kKGNvcmUpLFxyXG4gICAgICAgICAqICAgICAnc2UteHh4JzogbWV0aG9kLmJpbmQoY29yZSksXHJcbiAgICAgICAgICogICB9XHJcbiAgICAgICAgICogfVxyXG4gICAgICAgICAqIEBleGFtcGxlXHJcbiAgICAgICAgICogRGVmaW5lIGluIHRoZSBmb2xsb3dpbmcgcmV0dXJuIGZvcm1hdCBpbiB0aGUgXCJtYW5hZ2VkVGFnSW5mb1wiIGZ1bmN0aW9uIG9mIHRoZSBwbHVnaW4uXHJcbiAgICAgICAgICogbWFuYWdlZFRhZ0luZm8oKSA9PiB7XHJcbiAgICAgICAgICogIHJldHVybiB7XHJcbiAgICAgICAgICogICAgY2xhc3NOYW1lOiAnc3RyaW5nJywgLy8gQ2xhc3MgbmFtZSB0byBpZGVudGlmeSB0aGUgdGFnLiAoXCJfX3NlX194eHhcIiwgXCJzZS14eHhcIilcclxuICAgICAgICAgKiAgICAvLyBDaGFuZ2UgdGhlIGh0bWwgb2YgdGhlIFwiZWxlbWVudFwiLiAoXCJlbGVtZW50XCIgaXMgdGhlIGVsZW1lbnQgZm91bmQgd2l0aCBcImNsYXNzTmFtZVwiLilcclxuICAgICAgICAgKiAgICAvLyBcIm1ldGhvZFwiIGlzIGV4ZWN1dGVkIGJ5IGJpbmRpbmcgXCJjb3JlXCIuXHJcbiAgICAgICAgICogICAgbWV0aG9kOiBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgICAqICAgICAgLy8gdGhpcyA9PT0gY29yZVxyXG4gICAgICAgICAqICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSAvLyAocmVuZGVyZWQgaHRtbCk7XHJcbiAgICAgICAgICogICAgfVxyXG4gICAgICAgICAqICB9XHJcbiAgICAgICAgICogfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG1hbmFnZWRUYWdzSW5mbzogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIGNhc2hpbmc6IG9wdGlvbnMuY2hhckNvdW50ZXJUeXBlID09PSAnYnl0ZS1odG1sJ1xyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX2NoYXJUeXBlSFRNTDogZmFsc2UsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBBcnJheSBvZiBcImNoZWNrRmlsZUluZm9cIiBmdW5jdGlvbnMgd2l0aCB0aGUgY29yZSBib3VuZFxyXG4gICAgICAgICAqIChQbHVnaW5zIHdpdGggXCJjaGVja0ZpbGVJbmZvXCIgYW5kIFwicmVzZXRGaWxlSW5mb1wiIG1ldGhvZHMpXHJcbiAgICAgICAgICogXCJmaWxlSW5mb1BsdWdpbnNcIiBydW5zIHRoZSBcImFkZFwiIG1ldGhvZCB3aGVuIGNyZWF0aW5nIHRoZSBlZGl0b3IuXHJcbiAgICAgICAgICogXCJjaGVja0ZpbGVJbmZvXCIgbWV0aG9kIGlzIGFsd2F5cyBjYWxsIGp1c3QgYmVmb3JlIHRoZSBcImNoYW5nZVwiIGV2ZW50LlxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX2ZpbGVJbmZvUGx1Z2luc0NoZWNrOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQXJyYXkgb2YgXCJyZXNldEZpbGVJbmZvXCIgZnVuY3Rpb25zIHdpdGggdGhlIGNvcmUgYm91bmRcclxuICAgICAgICAgKiAoUGx1Z2lucyB3aXRoIFwiY2hlY2tGaWxlSW5mb1wiIGFuZCBcInJlc2V0RmlsZUluZm9cIiBtZXRob2RzKVxyXG4gICAgICAgICAqIFwiY2hlY2tGaWxlSW5mb1wiIG1ldGhvZCBpcyBhbHdheXMgY2FsbCBqdXN0IGJlZm9yZSB0aGUgXCJmdW5jdGlvbnMuc2V0T3B0aW9uc1wiIG1ldGhvZC5cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9maWxlSW5mb1BsdWdpbnNSZXNldDogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFZhcmlhYmxlcyBmb3IgZmlsZSBjb21wb25lbnQgbWFuYWdlbWVudFxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX2ZpbGVNYW5hZ2VyOiB7XHJcbiAgICAgICAgICAgIHRhZ3M6IG51bGwsXHJcbiAgICAgICAgICAgIHJlZ0V4cDogbnVsbCxcclxuICAgICAgICAgICAgcXVlcnlTdHJpbmc6IG51bGwsXHJcbiAgICAgICAgICAgIHBsdWdpblJlZ0V4cDogbnVsbCxcclxuICAgICAgICAgICAgcGx1Z2luTWFwOiBudWxsXHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEVsZW1lbnRzIHRoYXQgbmVlZCB0byBjaGFuZ2UgdGV4dCBvciBjbGFzc05hbWUgZm9yIGVhY2ggc2VsZWN0aW9uIGNoYW5nZVxyXG4gICAgICAgICAqIEFmdGVyIGNyZWF0aW5nIHRoZSBlZGl0b3IsIFwiYWN0aXZlUGx1Z2luc1wiIGFyZSBhZGRlZC5cclxuICAgICAgICAgKiBAcHJvcGVydHkge0VsZW1lbnR9IFNUUk9ORyBib2xkIGJ1dHRvblxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7RWxlbWVudH0gVSB1bmRlcmxpbmUgYnV0dG9uXHJcbiAgICAgICAgICogQHByb3BlcnR5IHtFbGVtZW50fSBFTSBpdGFsaWMgYnV0dG9uXHJcbiAgICAgICAgICogQHByb3BlcnR5IHtFbGVtZW50fSBERUwgc3RyaWtlIGJ1dHRvblxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7RWxlbWVudH0gU1VCIHN1YnNjcmlwdCBidXR0b25cclxuICAgICAgICAgKiBAcHJvcGVydHkge0VsZW1lbnR9IFNVUCBzdXBlcnNjcmlwdCBidXR0b25cclxuICAgICAgICAgKiBAcHJvcGVydHkge0VsZW1lbnR9IE9VVERFTlQgb3V0ZGVudCBidXR0b25cclxuICAgICAgICAgKiBAcHJvcGVydHkge0VsZW1lbnR9IElOREVOVCBpbmRlbnQgYnV0dG9uXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY29tbWFuZE1hcDogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFN0eWxlIGJ1dHRvbiByZWxhdGVkIHRvIGVkaXQgYXJlYVxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7RWxlbWVudH0gZnVsbFNjcmVlbiBmdWxsU2NyZWVuIGJ1dHRvbiBlbGVtZW50XHJcbiAgICAgICAgICogQHByb3BlcnR5IHtFbGVtZW50fSBzaG93QmxvY2tzIHNob3dCbG9ja3MgYnV0dG9uIGVsZW1lbnRcclxuICAgICAgICAgKiBAcHJvcGVydHkge0VsZW1lbnR9IGNvZGVWaWV3IGNvZGVWaWV3IGJ1dHRvbiBlbGVtZW50XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfc3R5bGVDb21tYW5kTWFwOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gTWFwIG9mIGRlZmF1bHQgY29tbWFuZFxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX2RlZmF1bHRDb21tYW5kOiB7XHJcbiAgICAgICAgICAgIGJvbGQ6IG9wdGlvbnMudGV4dFRhZ3MuYm9sZCxcclxuICAgICAgICAgICAgdW5kZXJsaW5lOiBvcHRpb25zLnRleHRUYWdzLnVuZGVybGluZSxcclxuICAgICAgICAgICAgaXRhbGljOiBvcHRpb25zLnRleHRUYWdzLml0YWxpYyxcclxuICAgICAgICAgICAgc3RyaWtlOiBvcHRpb25zLnRleHRUYWdzLnN0cmlrZSxcclxuICAgICAgICAgICAgc3Vic2NyaXB0OiBvcHRpb25zLnRleHRUYWdzLnN1YixcclxuICAgICAgICAgICAgc3VwZXJzY3JpcHQ6IG9wdGlvbnMudGV4dFRhZ3Muc3VwXHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFZhcmlhYmxlcyB1c2VkIGludGVybmFsbHkgaW4gZWRpdG9yIG9wZXJhdGlvblxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gaXNDb2RlVmlldyBTdGF0ZSBvZiBjb2RlIHZpZXdcclxuICAgICAgICAgKiBAcHJvcGVydHkge0Jvb2xlYW59IGlzRnVsbFNjcmVlbiBTdGF0ZSBvZiBmdWxsIHNjcmVlblxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBpbm5lckhlaWdodF9mdWxsU2NyZWVuIElubmVySGVpZ2h0IGluIGVkaXRvciB3aGVuIGluIGZ1bGwgc2NyZWVuXHJcbiAgICAgICAgICogQHByb3BlcnR5IHtOdW1iZXJ9IHJlc2l6ZUNsaWVudFkgUmVtZW1iZXIgdGhlIHZlcnRpY2FsIHNpemUgb2YgdGhlIGVkaXRvciBiZWZvcmUgcmVzaXppbmcgdGhlIGVkaXRvciAoVXNlZCB3aGVuIGNhbGN1bGF0aW5nIGR1cmluZyByZXNpemUgb3BlcmF0aW9uKVxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7TnVtYmVyfSB0YWJTaXplIEluZGVudCBzaXplIG9mIHRhYiAoNClcclxuICAgICAgICAgKiBAcHJvcGVydHkge051bWJlcn0gY29kZUluZGVudCBJbmRlbnQgc2l6ZSBvZiBDb2RlIHZpZXcgbW9kZSAoMilcclxuICAgICAgICAgKiBAcHJvcGVydHkge051bWJlcn0gbWluUmVzaXppbmdTaXplIE1pbmltdW0gc2l6ZSBvZiBlZGl0aW5nIGFyZWEgd2hlbiByZXNpemVkIHtOdW1iZXJ9ICguc2Utd3JhcHBlci1pbm5lciB7bWluLWhlaWdodDogNjVweDt9IHx8IDY1KVxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7QXJyYXl9IGN1cnJlbnROb2RlcyAgQW4gYXJyYXkgb2YgdGhlIGN1cnJlbnQgY3Vyc29yJ3Mgbm9kZSBzdHJ1Y3R1cmVcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF92YXJpYWJsZToge1xyXG4gICAgICAgICAgICBpc0NoYW5nZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBpc0NvZGVWaWV3OiBmYWxzZSxcclxuICAgICAgICAgICAgaXNGdWxsU2NyZWVuOiBmYWxzZSxcclxuICAgICAgICAgICAgaW5uZXJIZWlnaHRfZnVsbFNjcmVlbjogMCxcclxuICAgICAgICAgICAgcmVzaXplQ2xpZW50WTogMCxcclxuICAgICAgICAgICAgdGFiU2l6ZTogNCxcclxuICAgICAgICAgICAgY29kZUluZGVudDogMixcclxuICAgICAgICAgICAgbWluUmVzaXppbmdTaXplOiB1dGlsLmdldE51bWJlcigoY29udGV4dC5lbGVtZW50Lnd5c2l3eWdGcmFtZS5zdHlsZS5taW5IZWlnaHQgfHwgJzY1JyksIDApLFxyXG4gICAgICAgICAgICBjdXJyZW50Tm9kZXM6IFtdLFxyXG4gICAgICAgICAgICBjdXJyZW50Tm9kZXNNYXA6IFtdLFxyXG4gICAgICAgICAgICBfcmFuZ2U6IG51bGwsXHJcbiAgICAgICAgICAgIF9zZWxlY3Rpb25Ob2RlOiBudWxsLFxyXG4gICAgICAgICAgICBfb3JpZ2luQ3NzVGV4dDogY29udGV4dC5lbGVtZW50LnRvcEFyZWEuc3R5bGUuY3NzVGV4dCxcclxuICAgICAgICAgICAgX2JvZHlPdmVyZmxvdzogJycsXHJcbiAgICAgICAgICAgIF9lZGl0b3JBcmVhT3JpZ2luQ3NzVGV4dDogJycsXHJcbiAgICAgICAgICAgIF93eXNpd3lnT3JpZ2luQ3NzVGV4dDogJycsXHJcbiAgICAgICAgICAgIF9jb2RlT3JpZ2luQ3NzVGV4dDogJycsXHJcbiAgICAgICAgICAgIF9mdWxsU2NyZWVuQXR0cnM6IHtzdGlja3k6IGZhbHNlLCBiYWxsb29uOiBmYWxzZSwgaW5saW5lOiBmYWxzZX0sXHJcbiAgICAgICAgICAgIF9saW5lQnJlYWtDb21wOiBudWxsLFxyXG4gICAgICAgICAgICBfbGluZUJyZWFrRGlyOiAnJ1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBJZiB0aGUgcGx1Z2luIGlzIG5vdCBhZGRlZCwgYWRkIHRoZSBwbHVnaW4gYW5kIGNhbGwgdGhlICdhZGQnIGZ1bmN0aW9uLlxyXG4gICAgICAgICAqIElmIHRoZSBwbHVnaW4gaXMgYWRkZWQgY2FsbCBjYWxsQmFjayBmdW5jdGlvbi5cclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gcGx1Z2luTmFtZSBUaGUgbmFtZSBvZiB0aGUgcGx1Z2luIHRvIGNhbGxcclxuICAgICAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsQmFja0Z1bmN0aW9uIEZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGltbWVkaWF0ZWx5IGFmdGVyIG1vZHVsZSBjYWxsXHJcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fG51bGx9IF90YXJnZXQgUGx1Z2luIHRhcmdldCBidXR0b24gKFRoaXMgaXMgbm90IG5lY2Vzc2FyeSBpZiB5b3UgaGF2ZSBhIGJ1dHRvbiBsaXN0IHdoZW4gY3JlYXRpbmcgdGhlIGVkaXRvcilcclxuICAgICAgICAgKi9cclxuICAgICAgICBjYWxsUGx1Z2luOiBmdW5jdGlvbiAocGx1Z2luTmFtZSwgY2FsbEJhY2tGdW5jdGlvbiwgX3RhcmdldCkge1xyXG4gICAgICAgICAgICBfdGFyZ2V0ID0gX3RhcmdldCB8fCBwbHVnaW5DYWxsQnV0dG9uc1twbHVnaW5OYW1lXTtcclxuXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5wbHVnaW5zW3BsdWdpbk5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcignW1NVTkVESVRPUi5jb3JlLmNhbGxQbHVnaW4uZmFpbF0gVGhlIGNhbGxlZCBwbHVnaW4gZG9lcyBub3QgZXhpc3Qgb3IgaXMgaW4gYW4gaW52YWxpZCBmb3JtYXQuIChwbHVnaW5OYW1lOlwiJyArIHBsdWdpbk5hbWUgKyAnXCIpJyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuaW5pdFBsdWdpbnNbcGx1Z2luTmFtZV0pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luc1twbHVnaW5OYW1lXS5hZGQodGhpcywgX3RhcmdldCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRQbHVnaW5zW3BsdWdpbk5hbWVdID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5fdGFyZ2V0UGx1Z2luc1twbHVnaW5OYW1lXSA9PT0gJ29iamVjdCcgJiYgISFfdGFyZ2V0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRNZW51VGFyZ2V0KHBsdWdpbk5hbWUsIF90YXJnZXQsIHRoaXMuX3RhcmdldFBsdWdpbnNbcGx1Z2luTmFtZV0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5wbHVnaW5zW3BsdWdpbk5hbWVdLmFjdGl2ZSAmJiAhdGhpcy5jb21tYW5kTWFwW3BsdWdpbk5hbWVdICYmICEhX3RhcmdldCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tYW5kTWFwW3BsdWdpbk5hbWVdID0gX3RhcmdldDtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlUGx1Z2lucy5wdXNoKHBsdWdpbk5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsQmFja0Z1bmN0aW9uID09PSAnZnVuY3Rpb24nKSBjYWxsQmFja0Z1bmN0aW9uKCk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIElmIHRoZSBtb2R1bGUgaXMgbm90IGFkZGVkLCBhZGQgdGhlIG1vZHVsZSBhbmQgY2FsbCB0aGUgJ2FkZCcgZnVuY3Rpb25cclxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBtb2R1bGVBcnJheSBtb2R1bGUgb2JqZWN0J3MgQXJyYXkgW2RpYWxvZywgcmVzaXppbmddXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYWRkTW9kdWxlOiBmdW5jdGlvbiAobW9kdWxlQXJyYXkpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IG1vZHVsZUFycmF5Lmxlbmd0aCwgbW9kdWxlTmFtZTsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBtb2R1bGVOYW1lID0gbW9kdWxlQXJyYXlbaV0ubmFtZTtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5wbHVnaW5zW21vZHVsZU5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zW21vZHVsZU5hbWVdID0gbW9kdWxlQXJyYXlbaV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaW5pdFBsdWdpbnNbbW9kdWxlTmFtZV0pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRQbHVnaW5zW21vZHVsZU5hbWVdID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMucGx1Z2luc1ttb2R1bGVOYW1lXS5hZGQgPT09ICdmdW5jdGlvbicpIHRoaXMucGx1Z2luc1ttb2R1bGVOYW1lXS5hZGQodGhpcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gR2V0cyB0aGUgY3VycmVudCBlZGl0b3ItcmVsYXRpdmUgc2Nyb2xsIG9mZnNldC5cclxuICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSB7dG9wLCBsZWZ0fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGdldEdsb2JhbFNjcm9sbE9mZnNldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBsZXQgdCA9IDAsIGwgPSAwO1xyXG4gICAgICAgICAgICBsZXQgZWwgPSBjb250ZXh0LmVsZW1lbnQudG9wQXJlYTtcclxuICAgICAgICAgICAgd2hpbGUgKGVsKSB7XHJcbiAgICAgICAgICAgICAgICB0ICs9IGVsLnNjcm9sbFRvcDtcclxuICAgICAgICAgICAgICAgIGwgKz0gZWwuc2Nyb2xsTGVmdDtcclxuICAgICAgICAgICAgICAgIGVsID0gZWwucGFyZW50RWxlbWVudDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgZWwgPSB0aGlzLl9zaGFkb3dSb290ID8gdGhpcy5fc2hhZG93Um9vdC5ob3N0IDogbnVsbDtcclxuICAgICAgICAgICAgd2hpbGUgKGVsKSB7XHJcbiAgICAgICAgICAgICAgICB0ICs9IGVsLnNjcm9sbFRvcDtcclxuICAgICAgICAgICAgICAgIGwgKz0gZWwuc2Nyb2xsTGVmdDtcclxuICAgICAgICAgICAgICAgIGVsID0gZWwucGFyZW50RWxlbWVudDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHRvcDogdCxcclxuICAgICAgICAgICAgICAgIGxlZnQ6IGxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gTWV0aG9kIGZvciBtYW5hZ2luZyBzdWJtZW51IGVsZW1lbnQuXHJcbiAgICAgICAgICogWW91IG11c3QgYWRkIHRoZSBcInN1Ym1lbnVcIiBlbGVtZW50IHVzaW5nIHRoZSB0aGlzIG1ldGhvZCBhdCBjdXN0b20gcGx1Z2luLlxyXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBwbHVnaW5OYW1lIFBsdWdpbiBuYW1lXHJcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fG51bGx9IHRhcmdldCBUYXJnZXQgYnV0dG9uXHJcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSBtZW51IFN1Ym1lbnUgZWxlbWVudFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGluaXRNZW51VGFyZ2V0OiBmdW5jdGlvbiAocGx1Z2luTmFtZSwgdGFyZ2V0LCBtZW51KSB7XHJcbiAgICAgICAgICAgIGlmICghdGFyZ2V0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl90YXJnZXRQbHVnaW5zW3BsdWdpbk5hbWVdID0gbWVudTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC5fbWVudVRyYXkuYXBwZW5kQ2hpbGQobWVudSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl90YXJnZXRQbHVnaW5zW3BsdWdpbk5hbWVdID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX21lbnVUcmF5W3RhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29tbWFuZCcpXSA9IG1lbnU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gRW5hYmxlIHN1Ym1lbnVcclxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgU3VibWVudSdzIGJ1dHRvbiBlbGVtZW50IHRvIGNhbGxcclxuICAgICAgICAgKi9cclxuICAgICAgICBzdWJtZW51T246IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9iaW5kZWRTdWJtZW51T2ZmKSB0aGlzLl9iaW5kZWRTdWJtZW51T2ZmKCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9iaW5kQ29udHJvbGxlcnNPZmYpIHRoaXMuY29udHJvbGxlcnNPZmYoKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHN1Ym1lbnVOYW1lID0gdGhpcy5fc3VibWVudU5hbWUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1jb21tYW5kJyk7XHJcbiAgICAgICAgICAgIGNvbnN0IG1lbnUgPSB0aGlzLnN1Ym1lbnUgPSB0aGlzLl9tZW51VHJheVtzdWJtZW51TmFtZV07XHJcbiAgICAgICAgICAgIHRoaXMuc3VibWVudUFjdGl2ZUJ1dHRvbiA9IGVsZW1lbnQ7XHJcbiAgICAgICAgICAgIHRoaXMuX3NldE1lbnVQb3NpdGlvbihlbGVtZW50LCBtZW51KTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMuX2JpbmRlZFN1Ym1lbnVPZmYgPSB0aGlzLnN1Ym1lbnVPZmYuYmluZCh0aGlzKTtcclxuICAgICAgICAgICAgdGhpcy5hZGREb2NFdmVudCgnbW91c2Vkb3duJywgdGhpcy5fYmluZGVkU3VibWVudU9mZiwgZmFsc2UpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMucGx1Z2luc1tzdWJtZW51TmFtZV0ub24pIHRoaXMucGx1Z2luc1tzdWJtZW51TmFtZV0ub24uY2FsbCh0aGlzKTtcclxuICAgICAgICAgICAgdGhpcy5fYW50aUJsdXIgPSB0cnVlO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBEaXNhYmxlIHN1Ym1lbnVcclxuICAgICAgICAgKi9cclxuICAgICAgICBzdWJtZW51T2ZmOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlRG9jRXZlbnQoJ21vdXNlZG93bicsIHRoaXMuX2JpbmRlZFN1Ym1lbnVPZmYpO1xyXG4gICAgICAgICAgICB0aGlzLl9iaW5kZWRTdWJtZW51T2ZmID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnN1Ym1lbnUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3N1Ym1lbnVOYW1lID0gJyc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN1Ym1lbnUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgICAgIHRoaXMuc3VibWVudSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUNsYXNzKHRoaXMuc3VibWVudUFjdGl2ZUJ1dHRvbiwgJ29uJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN1Ym1lbnVBY3RpdmVCdXR0b24gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbm90SGlkZVRvb2xiYXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5fYW50aUJsdXIgPSBmYWxzZTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gRGlzYWJsZSBtb3JlIGxheWVyXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbW9yZUxheWVyT2ZmOiBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX21vcmVMYXllckFjdGl2ZUJ1dHRvbikge1xyXG4gICAgICAgICAgICAgICAgKGNvbnRleHQuZWxlbWVudC50b29sYmFyLnF1ZXJ5U2VsZWN0b3IoJy4nICsgdGhpcy5fbW9yZUxheWVyQWN0aXZlQnV0dG9uLmdldEF0dHJpYnV0ZSgnZGF0YS1jb21tYW5kJykpKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVDbGFzcyh0aGlzLl9tb3JlTGF5ZXJBY3RpdmVCdXR0b24sICdvbicpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbW9yZUxheWVyQWN0aXZlQnV0dG9uID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBFbmFibGUgY29udGFpbmVyXHJcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IENvbnRhaW5lcidzIGJ1dHRvbiBlbGVtZW50IHRvIGNhbGxcclxuICAgICAgICAgKi9cclxuICAgICAgICBjb250YWluZXJPbjogZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2JpbmRlZENvbnRhaW5lck9mZikgdGhpcy5fYmluZGVkQ29udGFpbmVyT2ZmKCk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJOYW1lID0gdGhpcy5fY29udGFpbmVyTmFtZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWNvbW1hbmQnKTtcclxuICAgICAgICAgICAgY29uc3QgbWVudSA9IHRoaXMuY29udGFpbmVyID0gdGhpcy5fbWVudVRyYXlbY29udGFpbmVyTmFtZV07XHJcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyQWN0aXZlQnV0dG9uID0gZWxlbWVudDtcclxuICAgICAgICAgICAgdGhpcy5fc2V0TWVudVBvc2l0aW9uKGVsZW1lbnQsIG1lbnUpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy5fYmluZGVkQ29udGFpbmVyT2ZmID0gdGhpcy5jb250YWluZXJPZmYuYmluZCh0aGlzKTtcclxuICAgICAgICAgICAgdGhpcy5hZGREb2NFdmVudCgnbW91c2Vkb3duJywgdGhpcy5fYmluZGVkQ29udGFpbmVyT2ZmLCBmYWxzZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5wbHVnaW5zW2NvbnRhaW5lck5hbWVdLm9uKSB0aGlzLnBsdWdpbnNbY29udGFpbmVyTmFtZV0ub24uY2FsbCh0aGlzKTtcclxuICAgICAgICAgICAgdGhpcy5fYW50aUJsdXIgPSB0cnVlO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBEaXNhYmxlIGNvbnRhaW5lclxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvbnRhaW5lck9mZjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZURvY0V2ZW50KCdtb3VzZWRvd24nLCB0aGlzLl9iaW5kZWRDb250YWluZXJPZmYpO1xyXG4gICAgICAgICAgICB0aGlzLl9iaW5kZWRDb250YWluZXJPZmYgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuY29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jb250YWluZXJOYW1lID0gJyc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVDbGFzcyh0aGlzLmNvbnRhaW5lckFjdGl2ZUJ1dHRvbiwgJ29uJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lckFjdGl2ZUJ1dHRvbiA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RIaWRlVG9vbGJhciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9hbnRpQmx1ciA9IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBTZXQgdGhlIG1lbnUgcG9zaXRpb24uIChzdWJtZW51LCBjb250YWluZXIpXHJcbiAgICAgICAgICogQHBhcmFtIHsqfSBlbGVtZW50IEJ1dHRvbiBlbGVtZW50XHJcbiAgICAgICAgICogQHBhcmFtIHsqfSBtZW51IE1lbnUgZWxlbWVudFxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX3NldE1lbnVQb3NpdGlvbjogZnVuY3Rpb24gKGVsZW1lbnQsIG1lbnUpIHtcclxuICAgICAgICAgICAgbWVudS5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XHJcbiAgICAgICAgICAgIG1lbnUuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgIG1lbnUuc3R5bGUuaGVpZ2h0ID0gJyc7XHJcbiAgICAgICAgICAgIHV0aWwuYWRkQ2xhc3MoZWxlbWVudCwgJ29uJyk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCB0b29sYmFyID0gdGhpcy5jb250ZXh0LmVsZW1lbnQudG9vbGJhcjtcclxuICAgICAgICAgICAgY29uc3QgdG9vbGJhclcgPSB0b29sYmFyLm9mZnNldFdpZHRoO1xyXG4gICAgICAgICAgICBjb25zdCB0b29sYmFyT2Zmc2V0ID0gZXZlbnQuX2dldEVkaXRvck9mZnNldHMoY29udGV4dC5lbGVtZW50LnRvb2xiYXIpO1xyXG4gICAgICAgICAgICBjb25zdCBtZW51VyA9IG1lbnUub2Zmc2V0V2lkdGg7XHJcbiAgICAgICAgICAgIGNvbnN0IGwgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQub2Zmc2V0TGVmdCArIDM7XHJcblxyXG4gICAgICAgICAgICAvLyBydGxcclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMucnRsKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50VyA9IGVsZW1lbnQub2Zmc2V0V2lkdGg7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBydGxXID0gbWVudVcgPiBlbGVtZW50VyA/IG1lbnVXIC0gZWxlbWVudFcgOiAwO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcnRsTCA9IHJ0bFcgPiAwID8gMCA6IGVsZW1lbnRXIC0gbWVudVc7XHJcbiAgICAgICAgICAgICAgICBtZW51LnN0eWxlLmxlZnQgPSAobCAtIHJ0bFcgKyBydGxMKSArICdweCc7XHJcbiAgICAgICAgICAgICAgICBpZiAodG9vbGJhck9mZnNldC5sZWZ0ID4gZXZlbnQuX2dldEVkaXRvck9mZnNldHMobWVudSkubGVmdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1lbnUuc3R5bGUubGVmdCA9ICcwcHgnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb3ZlckxlZnQgPSB0b29sYmFyVyA8PSBtZW51VyA/IDAgOiB0b29sYmFyVyAtIChsICsgbWVudVcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKG92ZXJMZWZ0IDwgMCkgbWVudS5zdHlsZS5sZWZ0ID0gKGwgKyBvdmVyTGVmdCkgKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBtZW51LnN0eWxlLmxlZnQgPSBsICsgJ3B4JztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gZ2V0IGVsZW1lbnQgdG9wXHJcbiAgICAgICAgICAgIGxldCB0ID0gMDtcclxuICAgICAgICAgICAgbGV0IG9mZnNldEVsID0gZWxlbWVudDtcclxuICAgICAgICAgICAgd2hpbGUgKG9mZnNldEVsICYmIG9mZnNldEVsICE9PSB0b29sYmFyKSB7XHJcbiAgICAgICAgICAgICAgICB0ICs9IG9mZnNldEVsLm9mZnNldFRvcDtcclxuICAgICAgICAgICAgICAgIG9mZnNldEVsID0gb2Zmc2V0RWwub2Zmc2V0UGFyZW50O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBidCA9IHQ7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc0JhbGxvb24pIHtcclxuICAgICAgICAgICAgICAgIHQgKz0gdG9vbGJhci5vZmZzZXRUb3AgKyBlbGVtZW50Lm9mZnNldEhlaWdodDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHQgLT0gZWxlbWVudC5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIHNldCBtZW51IHBvc2l0aW9uXHJcbiAgICAgICAgICAgIGNvbnN0IHRvb2xiYXJUb3AgPSB0b29sYmFyT2Zmc2V0LnRvcDtcclxuICAgICAgICAgICAgY29uc3QgbWVudUhlaWdodCA9IG1lbnUub2Zmc2V0SGVpZ2h0O1xyXG4gICAgICAgICAgICBjb25zdCBzY3JvbGxUb3AgPSB0aGlzLmdldEdsb2JhbFNjcm9sbE9mZnNldCgpLnRvcDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG1lbnVIZWlnaHRfYm90dG9tID0gX3cuaW5uZXJIZWlnaHQgLSAodG9vbGJhclRvcCAtIHNjcm9sbFRvcCArIGJ0ICsgZWxlbWVudC5wYXJlbnRFbGVtZW50Lm9mZnNldEhlaWdodCk7XHJcbiAgICAgICAgICAgIGlmIChtZW51SGVpZ2h0X2JvdHRvbSA8IG1lbnVIZWlnaHQpIHtcclxuICAgICAgICAgICAgICAgIGxldCBtZW51VG9wID0gLTEgKiAobWVudUhlaWdodCAtIGJ0ICsgMyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpbnNUb3AgPSB0b29sYmFyVG9wIC0gc2Nyb2xsVG9wICsgbWVudVRvcDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1lbnVIZWlnaHRfdG9wID0gbWVudUhlaWdodCArIChpbnNUb3AgPCAwID8gaW5zVG9wIDogMCk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGlmIChtZW51SGVpZ2h0X3RvcCA+IG1lbnVIZWlnaHRfYm90dG9tKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVudS5zdHlsZS5oZWlnaHQgPSBtZW51SGVpZ2h0X3RvcCArICdweCc7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVudVRvcCA9IC0xICogKG1lbnVIZWlnaHRfdG9wIC0gYnQgKyAzKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVudS5zdHlsZS5oZWlnaHQgPSBtZW51SGVpZ2h0X2JvdHRvbSArICdweCc7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVudVRvcCA9IGJ0ICsgZWxlbWVudC5wYXJlbnRFbGVtZW50Lm9mZnNldEhlaWdodDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBtZW51LnN0eWxlLnRvcCA9IG1lbnVUb3AgKyAncHgnO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbWVudS5zdHlsZS50b3AgPSAoYnQgKyBlbGVtZW50LnBhcmVudEVsZW1lbnQub2Zmc2V0SGVpZ2h0KSArICdweCc7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIG1lbnUuc3R5bGUudmlzaWJpbGl0eSA9ICcnO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBTaG93IGNvbnRyb2xsZXIgYXQgZWRpdG9yIGFyZWEgKGNvbnRyb2xsZXIgZWxlbWVudHMsIGZ1bmN0aW9uLCBcImNvbnRyb2xsZXIgdGFyZ2V0IGVsZW1lbnQoQFJlcXVpcmVkKVwiLCBcImNvbnRyb2xsZXIgbmFtZShAUmVxdWlyZWQpXCIsIGV0Yy4uKVxyXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gYXJndW1lbnRzIGNvbnRyb2xsZXIgZWxlbWVudHMsIGZ1bmN0aW9ucy4uXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY29udHJvbGxlcnNPbjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fYmluZENvbnRyb2xsZXJzT2ZmKSB0aGlzLl9iaW5kQ29udHJvbGxlcnNPZmYoKTtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyQXJyYXkgPSBbXTtcclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBhcmc7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGFyZyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICAgICAgICAgIGlmICghYXJnKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Q29udHJvbGxlck5hbWUgPSBhcmc7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFyZyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbGxlckFycmF5LnB1c2goYXJnKTtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghdXRpbC5oYXNDbGFzcyhhcmcsICdzZS1jb250cm9sbGVyJykpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRDb250cm9sbGVyVGFyZ2V0ID0gYXJnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEZpbGVDb21wb25lbnRJbmZvID0gdGhpcy5nZXRGaWxlQ29tcG9uZW50KGFyZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoYXJnLnN0eWxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJnLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zaGFkb3dSb290ICYmIHRoaXMuX3NoYWRvd1Jvb3RDb250cm9sbGVyRXZlbnRUYXJnZXQuaW5kZXhPZihhcmcpID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgZnVuY3Rpb24gKGUpIHsgZS5wcmV2ZW50RGVmYXVsdCgpOyBlLnN0b3BQcm9wYWdhdGlvbigpOyB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hhZG93Um9vdENvbnRyb2xsZXJFdmVudFRhcmdldC5wdXNoKGFyZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyQXJyYXkucHVzaChhcmcpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9iaW5kQ29udHJvbGxlcnNPZmYgPSB0aGlzLmNvbnRyb2xsZXJzT2ZmLmJpbmQodGhpcyk7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkRG9jRXZlbnQoJ21vdXNlZG93bicsIHRoaXMuX2JpbmRDb250cm9sbGVyc09mZiwgZmFsc2UpO1xyXG4gICAgICAgICAgICB0aGlzLmFkZERvY0V2ZW50KCdrZXlkb3duJywgdGhpcy5fYmluZENvbnRyb2xsZXJzT2ZmLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX2FudGlCbHVyID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZnVuY3Rpb25zLnNob3dDb250cm9sbGVyID09PSAnZnVuY3Rpb24nKSBmdW5jdGlvbnMuc2hvd0NvbnRyb2xsZXIodGhpcy5jdXJyZW50Q29udHJvbGxlck5hbWUsIHRoaXMuY29udHJvbGxlckFycmF5LCB0aGlzKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gSGlkZSBjb250cm9sbGVyIGF0IGVkaXRvciBhcmVhIChsaW5rIGJ1dHRvbiwgaW1hZ2UgcmVzaXplIGJ1dHRvbi4uKVxyXG4gICAgICAgICAqIEBwYXJhbSB7S2V5Ym9hcmRFdmVudHxNb3VzZUV2ZW50fG51bGx9IGUgRXZlbnQgb2JqZWN0IHdoZW4gY2FsbGVkIGZyb20gbW91c2Vkb3duIGFuZCBrZXlkb3duIGV2ZW50cyByZWdpc3RlcmVkIGluIFwiY29yZS5jb250cm9sbGVyc09uXCJcclxuICAgICAgICAgKi9cclxuICAgICAgICBjb250cm9sbGVyc09mZjogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgdGhpcy5fbGluZUJyZWFrZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgY29uc3QgbGVuID0gdGhpcy5jb250cm9sbGVyQXJyYXkubGVuZ3RoO1xyXG5cclxuICAgICAgICAgICAgaWYgKGUgJiYgZS50YXJnZXQgJiYgbGVuID4gMCkge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb250cm9sbGVyQXJyYXlbaV0uY29udGFpbnMgPT09ICdmdW5jdGlvbicgJiYgdGhpcy5jb250cm9sbGVyQXJyYXlbaV0uY29udGFpbnMoZS50YXJnZXQpKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9maWxlTWFuYWdlci5wbHVnaW5SZWdFeHAudGVzdCh0aGlzLmN1cnJlbnRDb250cm9sbGVyTmFtZSkgJiYgZSAmJiBlLnR5cGUgPT09ICdrZXlkb3duJyAmJiBlLmtleUNvZGUgIT09IDI3KSByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC5saW5lQnJlYWtlcl90LnN0eWxlLmRpc3BsYXkgPSBjb250ZXh0LmVsZW1lbnQubGluZUJyZWFrZXJfYi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLl92YXJpYWJsZS5fbGluZUJyZWFrQ29tcCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRDb250cm9sbGVyTmFtZSA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRDb250cm9sbGVyVGFyZ2V0ID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50RmlsZUNvbXBvbmVudEluZm8gPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLmVmZmVjdE5vZGUgPSBudWxsO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuX2JpbmRDb250cm9sbGVyc09mZikgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVEb2NFdmVudCgnbW91c2Vkb3duJywgdGhpcy5fYmluZENvbnRyb2xsZXJzT2ZmKTtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVEb2NFdmVudCgna2V5ZG93bicsIHRoaXMuX2JpbmRDb250cm9sbGVyc09mZik7XHJcbiAgICAgICAgICAgIHRoaXMuX2JpbmRDb250cm9sbGVyc09mZiA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICBpZiAobGVuID4gMCkge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb250cm9sbGVyQXJyYXlbaV0gPT09ICdmdW5jdGlvbicpIHRoaXMuY29udHJvbGxlckFycmF5W2ldKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB0aGlzLmNvbnRyb2xsZXJBcnJheVtpXS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbGxlckFycmF5ID0gW107XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2FudGlCbHVyID0gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFNwZWNpZnkgdGhlIHBvc2l0aW9uIG9mIHRoZSBjb250cm9sbGVyLlxyXG4gICAgICAgICAqIEBwYXJhbSB7RWxlbWVudH0gY29udHJvbGxlciBDb250cm9sbGVyIGVsZW1lbnQuXHJcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSByZWZlckVsIEVsZW1lbnQgdGhhdCBpcyB0aGUgYmFzaXMgb2YgdGhlIGNvbnRyb2xsZXIncyBwb3NpdGlvbi5cclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gcG9zaXRpb24gVHlwZSBvZiBwb3NpdGlvbiAoXCJ0b3BcIiB8IFwiYm90dG9tXCIpXHJcbiAgICAgICAgICogV2hlbiB1c2luZyB0aGUgXCJ0b3BcIiBwb3NpdGlvbiwgdGhlcmUgc2hvdWxkIG5vdCBiZSBhbiBhcnJvdyBvbiB0aGUgY29udHJvbGxlci5cclxuICAgICAgICAgKiBXaGVuIHVzaW5nIHRoZSBcImJvdHRvbVwiIHBvc2l0aW9uIHRoZXJlIHNob3VsZCBiZSBhbiBhcnJvdyBvbiB0aGUgY29udHJvbGxlci5cclxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gYWRkT2Zmc2V0IFRoZXNlIGFyZSB0aGUgbGVmdCBhbmQgdG9wIHZhbHVlcyB0aGF0IG5lZWQgdG8gYmUgYWRkZWQgc3BlY2lhbGx5LiBcclxuICAgICAgICAgKiBUaGlzIGFyZ3VtZW50IGlzIHJlcXVpcmVkLiAtIHtsZWZ0OiAwLCB0b3A6IDB9XHJcbiAgICAgICAgICogUGxlYXNlIGVudGVyIHRoZSB2YWx1ZSBiYXNlZCBvbiBsdHIgbW9kZS5cclxuICAgICAgICAgKiBDYWxjdWxhdGVkIGF1dG9tYXRpY2FsbHkgaW4gcnRsIG1vZGUuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgc2V0Q29udHJvbGxlclBvc2l0aW9uOiBmdW5jdGlvbiAoY29udHJvbGxlciwgcmVmZXJFbCwgcG9zaXRpb24sIGFkZE9mZnNldCkge1xyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5ydGwpIGFkZE9mZnNldC5sZWZ0ICo9IC0xO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gdXRpbC5nZXRPZmZzZXQocmVmZXJFbCwgY29udGV4dC5lbGVtZW50Lnd5c2l3eWdGcmFtZSk7XHJcbiAgICAgICAgICAgIGNvbnRyb2xsZXIuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xyXG4gICAgICAgICAgICBjb250cm9sbGVyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cclxuICAgICAgICAgICAgLy8gSGVpZ2h0IHZhbHVlIG9mIHRoZSBhcnJvdyBlbGVtZW50IGlzIDExcHhcclxuICAgICAgICAgICAgY29uc3QgdG9wTWFyZ2luID0gcG9zaXRpb24gPT09ICd0b3AnID8gLShjb250cm9sbGVyLm9mZnNldEhlaWdodCArIDIpIDogKHJlZmVyRWwub2Zmc2V0SGVpZ2h0ICsgMTIpO1xyXG4gICAgICAgICAgICBjb250cm9sbGVyLnN0eWxlLnRvcCA9IChvZmZzZXQudG9wICsgdG9wTWFyZ2luICsgYWRkT2Zmc2V0LnRvcCkgKyAncHgnO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgbCA9IG9mZnNldC5sZWZ0IC0gY29udGV4dC5lbGVtZW50Lnd5c2l3eWdGcmFtZS5zY3JvbGxMZWZ0ICsgYWRkT2Zmc2V0LmxlZnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2xsZXJXID0gY29udHJvbGxlci5vZmZzZXRXaWR0aDtcclxuICAgICAgICAgICAgY29uc3QgcmVmZXJFbFcgPSByZWZlckVsLm9mZnNldFdpZHRoO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29uc3QgYWxsb3cgPSB1dGlsLmhhc0NsYXNzKGNvbnRyb2xsZXIuZmlyc3RFbGVtZW50Q2hpbGQsICdzZS1hcnJvdycpID8gY29udHJvbGxlci5maXJzdEVsZW1lbnRDaGlsZCA6IG51bGw7XHJcblxyXG4gICAgICAgICAgICAvLyBydGwgKFdpZHRoIHZhbHVlIG9mIHRoZSBhcnJvdyBlbGVtZW50IGlzIDIycHgpXHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnJ0bCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcnRsVyA9IChjb250cm9sbGVyVyA+IHJlZmVyRWxXKSA/IGNvbnRyb2xsZXJXIC0gcmVmZXJFbFcgOiAwO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcnRsTCA9IHJ0bFcgPiAwID8gMCA6IHJlZmVyRWxXIC0gY29udHJvbGxlclc7XHJcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyLnN0eWxlLmxlZnQgPSAobCAtIHJ0bFcgKyBydGxMKSArICdweCc7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGlmIChydGxXID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhbGxvdykgYWxsb3cuc3R5bGUubGVmdCA9ICgoY29udHJvbGxlclcgLSAxNCA8IDEwICsgcnRsVykgPyAoY29udHJvbGxlclcgLSAxNCkgOiAoMTAgKyBydGxXKSkgKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBjb25zdCBvdmVyU2l6ZSA9IGNvbnRleHQuZWxlbWVudC53eXNpd3lnRnJhbWUub2Zmc2V0TGVmdCAtIGNvbnRyb2xsZXIub2Zmc2V0TGVmdDtcclxuICAgICAgICAgICAgICAgIGlmIChvdmVyU2l6ZSA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLnN0eWxlLmxlZnQgPSAnMHB4JztcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYWxsb3cpIGFsbG93LnN0eWxlLmxlZnQgPSBvdmVyU2l6ZSArICdweCc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyLnN0eWxlLmxlZnQgPSBsICsgJ3B4JztcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBvdmVyU2l6ZSA9IGNvbnRleHQuZWxlbWVudC53eXNpd3lnRnJhbWUub2Zmc2V0V2lkdGggLSAoY29udHJvbGxlci5vZmZzZXRMZWZ0ICsgY29udHJvbGxlclcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKG92ZXJTaXplIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuc3R5bGUubGVmdCA9IChjb250cm9sbGVyLm9mZnNldExlZnQgKyBvdmVyU2l6ZSkgKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhbGxvdykgYWxsb3cuc3R5bGUubGVmdCA9ICgyMCAtIG92ZXJTaXplKSArICdweCc7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhbGxvdykgYWxsb3cuc3R5bGUubGVmdCA9ICcyMHB4JztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29udHJvbGxlci5zdHlsZS52aXNpYmlsaXR5ID0gJyc7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIGphdmFzY3JpcHQgZXhlY0NvbW1hbmRcclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gY29tbWFuZCBqYXZhc2NyaXB0IGV4ZWNDb21tYW5kIGZ1bmN0aW9uIHByb3BlcnR5XHJcbiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufHVuZGVmaW5lZH0gc2hvd0RlZmF1bHRVSSBqYXZhc2NyaXB0IGV4ZWNDb21tYW5kIGZ1bmN0aW9uIHByb3BlcnR5XHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd8dW5kZWZpbmVkfSB2YWx1ZSBqYXZhc2NyaXB0IGV4ZWNDb21tYW5kIGZ1bmN0aW9uIHByb3BlcnR5XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZXhlY0NvbW1hbmQ6IGZ1bmN0aW9uIChjb21tYW5kLCBzaG93RGVmYXVsdFVJLCB2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLl93ZC5leGVjQ29tbWFuZChjb21tYW5kLCBzaG93RGVmYXVsdFVJLCAoY29tbWFuZCA9PT0gJ2Zvcm1hdEJsb2NrJyA/ICc8JyArIHZhbHVlICsgJz4nIDogdmFsdWUpKTtcclxuICAgICAgICAgICAgLy8gaGlzdG9yeSBzdGFja1xyXG4gICAgICAgICAgICB0aGlzLmhpc3RvcnkucHVzaCh0cnVlKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gRm9jdXMgdG8gd3lzaXd5ZyBhcmVhIHVzaW5nIFwibmF0aXZlIGZvY3VzIGZ1bmN0aW9uXCJcclxuICAgICAgICAgKi9cclxuICAgICAgICBuYXRpdmVGb2N1czogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBjb25zdCBjYXB0aW9uID0gdXRpbC5nZXRQYXJlbnRFbGVtZW50KHRoaXMuZ2V0U2VsZWN0aW9uTm9kZSgpLCAnZmlnY2FwdGlvbicpO1xyXG4gICAgICAgICAgICBpZiAoY2FwdGlvbikge1xyXG4gICAgICAgICAgICAgICAgY2FwdGlvbi5mb2N1cygpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50Lnd5c2l3eWcuZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5fZWRpdG9yUmFuZ2UoKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gRm9jdXMgdG8gd3lzaXd5ZyBhcmVhXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZm9jdXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKGNvbnRleHQuZWxlbWVudC53eXNpd3lnRnJhbWUuc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5pZnJhbWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlRm9jdXMoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLmdldFJhbmdlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmdlLnN0YXJ0Q29udGFpbmVyID09PSByYW5nZS5lbmRDb250YWluZXIgJiYgdXRpbC5pc1d5c2l3eWdEaXYocmFuZ2Uuc3RhcnRDb250YWluZXIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnROb2RlID0gcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIuY2hpbGRyZW5bcmFuZ2Uuc3RhcnRPZmZzZXRdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXV0aWwuaXNGb3JtYXRFbGVtZW50KGN1cnJlbnROb2RlKSAmJiAhdXRpbC5pc0NvbXBvbmVudChjdXJyZW50Tm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdCA9IHV0aWwuY3JlYXRlRWxlbWVudChvcHRpb25zLmRlZmF1bHRUYWcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnIgPSB1dGlsLmNyZWF0ZUVsZW1lbnQoJ0JSJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQuYXBwZW5kQ2hpbGQoYnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50Lnd5c2l3eWcuaW5zZXJ0QmVmb3JlKGZvcm1hdCwgY3VycmVudE5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRSYW5nZShiciwgMCwgYnIsIDApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2UocmFuZ2Uuc3RhcnRDb250YWluZXIsIHJhbmdlLnN0YXJ0T2Zmc2V0LCByYW5nZS5lbmRDb250YWluZXIsIHJhbmdlLmVuZE9mZnNldCk7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uYXRpdmVGb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBldmVudC5fYXBwbHlUYWdFZmZlY3RzKCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc0JhbGxvb24pIGV2ZW50Ll90b2dnbGVUb29sYmFyQmFsbG9vbigpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBJZiBcImZvY3VzRWxcIiBpcyBhIGNvbXBvbmVudCwgdGhlbiB0aGF0IGNvbXBvbmVudCBpcyBzZWxlY3RlZDsgaWYgaXQgaXMgYSBmb3JtYXQgZWxlbWVudCwgdGhlIGxhc3QgdGV4dCBpcyBzZWxlY3RlZFxyXG4gICAgICAgICAqIElmIFwiZm9jdXNFZGdlXCIgaXMgbnVsbCwgdGhlbiBzZWxlY3RlZCBsYXN0IGVsZW1lbnRcclxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR8bnVsbH0gZm9jdXNFbCBGb2N1cyBlbGVtZW50XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZm9jdXNFZGdlOiBmdW5jdGlvbiAoZm9jdXNFbCkge1xyXG4gICAgICAgICAgICBpZiAoIWZvY3VzRWwpIGZvY3VzRWwgPSBjb250ZXh0LmVsZW1lbnQud3lzaXd5Zy5sYXN0RWxlbWVudENoaWxkO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZmlsZUNvbXBvbmVudEluZm8gPSB0aGlzLmdldEZpbGVDb21wb25lbnQoZm9jdXNFbCk7XHJcbiAgICAgICAgICAgIGlmIChmaWxlQ29tcG9uZW50SW5mbykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RDb21wb25lbnQoZmlsZUNvbXBvbmVudEluZm8udGFyZ2V0LCBmaWxlQ29tcG9uZW50SW5mby5wbHVnaW5OYW1lKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChmb2N1c0VsKSB7XHJcbiAgICAgICAgICAgICAgICBmb2N1c0VsID0gdXRpbC5nZXRDaGlsZEVsZW1lbnQoZm9jdXNFbCwgZnVuY3Rpb24gKGN1cnJlbnQpIHsgcmV0dXJuIGN1cnJlbnQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDAgfHwgY3VycmVudC5ub2RlVHlwZSA9PT0gMzsgfSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWZvY3VzRWwpIHRoaXMubmF0aXZlRm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIGVsc2UgdGhpcy5zZXRSYW5nZShmb2N1c0VsLCBmb2N1c0VsLnRleHRDb250ZW50Lmxlbmd0aCwgZm9jdXNFbCwgZm9jdXNFbC50ZXh0Q29udGVudC5sZW5ndGgpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1cygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEZvY3Vzb3V0IHRvIHd5c2l3eWcgYXJlYSAoLmJsdXIoKSlcclxuICAgICAgICAgKi9cclxuICAgICAgICBibHVyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmlmcmFtZSkge1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50Lnd5c2l3eWdGcmFtZS5ibHVyKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQud3lzaXd5Zy5ibHVyKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gU2V0IGN1cnJlbnQgZWRpdG9yJ3MgcmFuZ2Ugb2JqZWN0IGFuZCByZXR1cm4uXHJcbiAgICAgICAgICogQHBhcmFtIHtOb2RlfSBzdGFydENvbiBUaGUgc3RhcnRDb250YWluZXIgcHJvcGVydHkgb2YgdGhlIHNlbGVjdGlvbiBvYmplY3QuXHJcbiAgICAgICAgICogQHBhcmFtIHtOdW1iZXJ9IHN0YXJ0T2ZmIFRoZSBzdGFydE9mZnNldCBwcm9wZXJ0eSBvZiB0aGUgc2VsZWN0aW9uIG9iamVjdC5cclxuICAgICAgICAgKiBAcGFyYW0ge05vZGV9IGVuZENvbiBUaGUgZW5kQ29udGFpbmVyIHByb3BlcnR5IG9mIHRoZSBzZWxlY3Rpb24gb2JqZWN0LlxyXG4gICAgICAgICAqIEBwYXJhbSB7TnVtYmVyfSBlbmRPZmYgVGhlIGVuZE9mZnNldCBwcm9wZXJ0eSBvZiB0aGUgc2VsZWN0aW9uIG9iamVjdC5cclxuICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSYW5nZSBvYmplY3QuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgc2V0UmFuZ2U6IGZ1bmN0aW9uIChzdGFydENvbiwgc3RhcnRPZmYsIGVuZENvbiwgZW5kT2ZmKSB7XHJcbiAgICAgICAgICAgIGlmICghc3RhcnRDb24gfHwgIWVuZENvbikgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnRPZmYgPiBzdGFydENvbi50ZXh0Q29udGVudC5sZW5ndGgpIHN0YXJ0T2ZmID0gc3RhcnRDb24udGV4dENvbnRlbnQubGVuZ3RoO1xyXG4gICAgICAgICAgICBpZiAoZW5kT2ZmID4gZW5kQ29uLnRleHRDb250ZW50Lmxlbmd0aCkgZW5kT2ZmID0gZW5kQ29uLnRleHRDb250ZW50Lmxlbmd0aDtcclxuICAgICAgICAgICAgaWYgKHV0aWwuaXNGb3JtYXRFbGVtZW50KHN0YXJ0Q29uKSkge1xyXG4gICAgICAgICAgICAgICAgc3RhcnRDb24gPSBzdGFydENvbi5jaGlsZE5vZGVzW3N0YXJ0T2ZmXSB8fCBzdGFydENvbjtcclxuICAgICAgICAgICAgICAgIHN0YXJ0T2ZmID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodXRpbC5pc0Zvcm1hdEVsZW1lbnQoZW5kQ29uKSkge1xyXG4gICAgICAgICAgICAgICAgZW5kQ29uID0gZW5kQ29uLmNoaWxkTm9kZXNbZW5kT2ZmXSB8fCBlbmRDb247XHJcbiAgICAgICAgICAgICAgICBlbmRPZmYgPSBzdGFydE9mZiA+IDEgPyBzdGFydE9mZiA6IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5fd2QuY3JlYXRlUmFuZ2UoKTtcclxuXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICByYW5nZS5zZXRTdGFydChzdGFydENvbiwgc3RhcnRPZmYpO1xyXG4gICAgICAgICAgICAgICAgcmFuZ2Uuc2V0RW5kKGVuZENvbiwgZW5kT2ZmKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignW1NVTkVESVRPUi5jb3JlLmZvY3VzLmVycm9yXSAnICsgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uYXRpdmVGb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvbigpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMpIHtcclxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTtcclxuICAgICAgICAgICAgdGhpcy5fZWRpdG9yUmFuZ2UoKTtcclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuaWZyYW1lKSB0aGlzLm5hdGl2ZUZvY3VzKCk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcmFuZ2U7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFJlbW92ZSByYW5nZSBvYmplY3QgYW5kIGJ1dHRvbiBlZmZlY3RcclxuICAgICAgICAgKi9cclxuICAgICAgICByZW1vdmVSYW5nZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLl92YXJpYWJsZS5fcmFuZ2UgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLl92YXJpYWJsZS5fc2VsZWN0aW9uTm9kZSA9IG51bGw7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmhhc0ZvY3VzKSB0aGlzLmdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpO1xyXG4gICAgICAgICAgICB0aGlzLl9zZXRLZXlFZmZlY3QoW10pO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBHZXQgY3VycmVudCBlZGl0b3IncyByYW5nZSBvYmplY3RcclxuICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGdldFJhbmdlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5fdmFyaWFibGUuX3JhbmdlIHx8IHRoaXMuX2NyZWF0ZURlZmF1bHRSYW5nZSgpO1xyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvbigpO1xyXG4gICAgICAgICAgICBpZiAocmFuZ2UuY29sbGFwc2VkID09PSBzZWxlY3Rpb24uaXNDb2xsYXBzZWQgfHwgIWNvbnRleHQuZWxlbWVudC53eXNpd3lnLmNvbnRhaW5zKHNlbGVjdGlvbi5mb2N1c05vZGUpKSByZXR1cm4gcmFuZ2U7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiAoc2VsZWN0aW9uLnJhbmdlQ291bnQgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl92YXJpYWJsZS5fcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl92YXJpYWJsZS5fcmFuZ2U7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzYyA9IHNlbGVjdGlvbi5hbmNob3JOb2RlLCBlYyA9IHNlbGVjdGlvbi5mb2N1c05vZGUsIHNvID0gc2VsZWN0aW9uLmFuY2hvck9mZnNldCwgZW8gPSBzZWxlY3Rpb24uZm9jdXNPZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb21wYXJlVmFsdWUgPSB1dGlsLmNvbXBhcmVFbGVtZW50cyhzYywgZWMpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmlnaHREaXIgPSBjb21wYXJlVmFsdWUuYW5jZXN0b3IgJiYgKGNvbXBhcmVWYWx1ZS5yZXN1bHQgPT09IDAgPyBzbyA8PSBlbyA6IGNvbXBhcmVWYWx1ZS5yZXN1bHQgPiAxID8gdHJ1ZSA6IGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNldFJhbmdlKFxyXG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0RGlyID8gc2MgOiBlYyxcclxuICAgICAgICAgICAgICAgICAgICByaWdodERpciA/IHNvIDogZW8sXHJcbiAgICAgICAgICAgICAgICAgICAgcmlnaHREaXIgPyBlYyA6IHNjLFxyXG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0RGlyID8gZW8gOiBzb1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBJZiB0aGUgXCJyYW5nZVwiIG9iamVjdCBpcyBhIG5vbi1lZGl0YWJsZSBhcmVhLCBhZGQgYSBsaW5lIGF0IHRoZSB0b3Agb2YgdGhlIGVkaXRvciBhbmQgdXBkYXRlIHRoZSBcInJhbmdlXCIgb2JqZWN0LlxyXG4gICAgICAgICAqIFJldHVybnMgYSBuZXcgXCJyYW5nZVwiIG9yIGFyZ3VtZW50IFwicmFuZ2VcIi5cclxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcmFuZ2UgY29yZS5nZXRSYW5nZSgpXHJcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fG51bGx9IGNvbnRhaW5lciBJZiB0aGVyZSBpcyBcImNvbnRhaW5lclwiIGFyZ3VtZW50LCBpdCBjcmVhdGVzIGEgbGluZSBpbiBmcm9udCBvZiB0aGUgY29udGFpbmVyLlxyXG4gICAgICAgICAqIEByZXR1cm5zIHtPYmplY3R9IHJhbmdlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZ2V0UmFuZ2VfYWRkTGluZTogZnVuY3Rpb24gKHJhbmdlLCBjb250YWluZXIpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX3NlbGVjdGlvblZvaWQocmFuZ2UpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB3eXNpd3lnID0gY29udGV4dC5lbGVtZW50Lnd5c2l3eWc7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvcCA9IHV0aWwuY3JlYXRlRWxlbWVudChvcHRpb25zLmRlZmF1bHRUYWcpO1xyXG4gICAgICAgICAgICAgICAgb3AuaW5uZXJIVE1MID0gJzxicj4nO1xyXG4gICAgICAgICAgICAgICAgd3lzaXd5Zy5pbnNlcnRCZWZvcmUob3AsIGNvbnRhaW5lciAmJiBjb250YWluZXIgIT09IHd5c2l3eWcgPyBjb250YWluZXIubmV4dEVsZW1lbnRTaWJsaW5nIDogd3lzaXd5Zy5maXJzdEVsZW1lbnRDaGlsZCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFJhbmdlKG9wLmZpcnN0RWxlbWVudENoaWxkLCAwLCBvcC5maXJzdEVsZW1lbnRDaGlsZCwgMSk7XHJcbiAgICAgICAgICAgICAgICByYW5nZSA9IHRoaXMuX3ZhcmlhYmxlLl9yYW5nZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmFuZ2U7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEdldCB3aW5kb3cgc2VsZWN0aW9uIG9iZWpjdFxyXG4gICAgICAgICAqIEByZXR1cm5zIHtPYmplY3R9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZ2V0U2VsZWN0aW9uOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zaGFkb3dSb290ICYmIHRoaXMuX3NoYWRvd1Jvb3QuZ2V0U2VsZWN0aW9uID8gdGhpcy5fc2hhZG93Um9vdC5nZXRTZWxlY3Rpb24oKSA6IHRoaXMuX3d3LmdldFNlbGVjdGlvbigpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBHZXQgY3VycmVudCBzZWxlY3Qgbm9kZVxyXG4gICAgICAgICAqIEByZXR1cm5zIHtOb2RlfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGdldFNlbGVjdGlvbk5vZGU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWbCoCghY29udGV4dC5lbGVtZW50Lnd5c2l3eWcuY29udGFpbnModGhpcy5fdmFyaWFibGUuX3NlbGVjdGlvbk5vZGUpKcKgdGhpcy5fZWRpdG9yUmFuZ2UoKTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLl92YXJpYWJsZS5fc2VsZWN0aW9uTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uTm9kZSA9IHV0aWwuZ2V0Q2hpbGRFbGVtZW50KGNvbnRleHQuZWxlbWVudC53eXNpd3lnLmZpcnN0Q2hpbGQsIGZ1bmN0aW9uIChjdXJyZW50KSB7IHJldHVybiBjdXJyZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAwIHx8IGN1cnJlbnQubm9kZVR5cGUgPT09IDM7IH0sIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIGlmICghc2VsZWN0aW9uTm9kZSnCoHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lZGl0b3JSYW5nZSgpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl92YXJpYWJsZS5fc2VsZWN0aW9uTm9kZSA9IHNlbGVjdGlvbk5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGVjdGlvbk5vZGU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhcmlhYmxlLl9zZWxlY3Rpb25Ob2RlO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBTYXZpbmcgdGhlIHJhbmdlIG9iamVjdCBhbmQgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBub2RlIG9mIGVkaXRvclxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX2VkaXRvclJhbmdlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICAgICAgICAgIGlmICghc2VsZWN0aW9uKSByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgbGV0IHJhbmdlID0gbnVsbDtcclxuICAgICAgICAgICAgbGV0IHNlbGVjdGlvbk5vZGUgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgaWYgKHNlbGVjdGlvbi5yYW5nZUNvdW50ID4gMCkge1xyXG4gICAgICAgICAgICAgICAgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5fY3JlYXRlRGVmYXVsdFJhbmdlKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3ZhcmlhYmxlLl9yYW5nZSA9IHJhbmdlO1xyXG5cclxuICAgICAgICAgICAgaWYgKHJhbmdlLmNvbGxhcHNlZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNXeXNpd3lnRGl2KHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKSkgc2VsZWN0aW9uTm9kZSA9IHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLmNoaWxkcmVuW3JhbmdlLnN0YXJ0T2Zmc2V0XSB8fCByYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lcjtcclxuICAgICAgICAgICAgICAgIGVsc2Ugc2VsZWN0aW9uTm9kZSA9IHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uTm9kZSA9IHNlbGVjdGlvbi5leHRlbnROb2RlIHx8IHNlbGVjdGlvbi5hbmNob3JOb2RlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLl92YXJpYWJsZS5fc2VsZWN0aW9uTm9kZSA9IHNlbGVjdGlvbk5vZGU7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFJldHVybiB0aGUgcmFuZ2Ugb2JqZWN0IG9mIGVkaXRvcidzIGZpcnN0IGNoaWxkIG5vZGVcclxuICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX2NyZWF0ZURlZmF1bHRSYW5nZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBjb25zdCB3eXNpd3lnID0gY29udGV4dC5lbGVtZW50Lnd5c2l3eWc7XHJcbiAgICAgICAgICAgIHd5c2l3eWcuZm9jdXMoKTtcclxuICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLl93ZC5jcmVhdGVSYW5nZSgpO1xyXG5cclxuICAgICAgICAgICAgbGV0IGZvY3VzRWwgPSB3eXNpd3lnLmZpcnN0RWxlbWVudENoaWxkO1xyXG4gICAgICAgICAgICBpZiAoIWZvY3VzRWwpIHtcclxuICAgICAgICAgICAgICAgIGZvY3VzRWwgPSB1dGlsLmNyZWF0ZUVsZW1lbnQob3B0aW9ucy5kZWZhdWx0VGFnKTtcclxuICAgICAgICAgICAgICAgIGZvY3VzRWwuaW5uZXJIVE1MID0gJzxicj4nO1xyXG4gICAgICAgICAgICAgICAgd3lzaXd5Zy5hcHBlbmRDaGlsZChmb2N1c0VsKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmFuZ2Uuc2V0U3RhcnQoZm9jdXNFbCwgMCk7XHJcbiAgICAgICAgICAgIHJhbmdlLnNldEVuZChmb2N1c0VsLCAwKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHJldHVybiByYW5nZTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIG5vIHZhbGlkIFwic2VsZWN0aW9uXCIuXHJcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHJhbmdlIGNvcmUuZ2V0UmFuZ2UoKVxyXG4gICAgICAgICAqIEByZXR1cm5zIHtPYmplY3R9IHJhbmdlXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfc2VsZWN0aW9uVm9pZDogZnVuY3Rpb24gKHJhbmdlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbW0gPSByYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lcjtcclxuICAgICAgICAgICAgcmV0dXJuICh1dGlsLmlzV3lzaXd5Z0RpdihyYW5nZS5zdGFydENvbnRhaW5lcikgJiYgdXRpbC5pc1d5c2l3eWdEaXYocmFuZ2UuZW5kQ29udGFpbmVyKSkgfHwgL0ZJR1VSRS9pLnRlc3QoY29tbS5ub2RlTmFtZSkgfHwgdGhpcy5fZmlsZU1hbmFnZXIucmVnRXhwLnRlc3QoY29tbS5ub2RlTmFtZSkgfHwgdXRpbC5pc01lZGlhQ29tcG9uZW50KGNvbW0pO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBSZXNldCByYW5nZSBvYmplY3QgdG8gdGV4dCBub2RlIHNlbGVjdGVkIHN0YXR1cy5cclxuICAgICAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gUmV0dXJucyBmYWxzZSBpZiB0aGVyZSBpcyBubyB2YWxpZCBzZWxlY3Rpb24uXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfcmVzZXRSYW5nZVRvVGV4dE5vZGU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLmdldFJhbmdlKCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9zZWxlY3Rpb25Wb2lkKHJhbmdlKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgbGV0IHN0YXJ0Q29uID0gcmFuZ2Uuc3RhcnRDb250YWluZXI7XHJcbiAgICAgICAgICAgIGxldCBzdGFydE9mZiA9IHJhbmdlLnN0YXJ0T2Zmc2V0O1xyXG4gICAgICAgICAgICBsZXQgZW5kQ29uID0gcmFuZ2UuZW5kQ29udGFpbmVyO1xyXG4gICAgICAgICAgICBsZXQgZW5kT2ZmID0gcmFuZ2UuZW5kT2Zmc2V0O1xyXG4gICAgICAgICAgICBsZXQgdGVtcENvbiwgdGVtcE9mZnNldCwgdGVtcENoaWxkO1xyXG5cclxuICAgICAgICAgICAgaWYgKHV0aWwuaXNGb3JtYXRFbGVtZW50KHN0YXJ0Q29uKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFzdGFydENvbi5jaGlsZE5vZGVzW3N0YXJ0T2ZmXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0Q29uID0gc3RhcnRDb24ubGFzdENoaWxkO1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0T2ZmID0gc3RhcnRDb24udGV4dENvbnRlbnQubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBzdGFydENvbiA9IHN0YXJ0Q29uLmNoaWxkTm9kZXNbc3RhcnRPZmZdO1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0T2ZmID0gMDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHdoaWxlIChzdGFydENvbiAmJiBzdGFydENvbi5ub2RlVHlwZSA9PT0gMSAmJiBzdGFydENvbi5maXJzdENoaWxkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRDb24gPSBzdGFydENvbi5maXJzdENoaWxkO1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0T2ZmID0gMDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodXRpbC5pc0Zvcm1hdEVsZW1lbnQoZW5kQ29uKSkge1xyXG4gICAgICAgICAgICAgICAgZW5kQ29uID0gZW5kQ29uLmNoaWxkTm9kZXNbZW5kT2ZmXSB8fCBlbmRDb24ubGFzdENoaWxkO1xyXG4gICAgICAgICAgICAgICAgd2hpbGUgKGVuZENvbiAmJiBlbmRDb24ubm9kZVR5cGUgPT09IDEgJiYgZW5kQ29uLmxhc3RDaGlsZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVuZENvbiA9IGVuZENvbi5sYXN0Q2hpbGQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbmRPZmYgPSBlbmRDb24udGV4dENvbnRlbnQubGVuZ3RoO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBzdGFydENvbnRhaW5lclxyXG4gICAgICAgICAgICB0ZW1wQ29uID0gdXRpbC5pc1d5c2l3eWdEaXYoc3RhcnRDb24pID8gY29udGV4dC5lbGVtZW50Lnd5c2l3eWcuZmlyc3RDaGlsZCA6IHN0YXJ0Q29uO1xyXG4gICAgICAgICAgICB0ZW1wT2Zmc2V0ID0gc3RhcnRPZmY7XHJcblxyXG4gICAgICAgICAgICBpZiAodXRpbC5pc0JyZWFrKHRlbXBDb24pIHx8ICh0ZW1wQ29uLm5vZGVUeXBlID09PSAxICYmIHRlbXBDb24uY2hpbGROb2Rlcy5sZW5ndGggPiAwKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb25seUJyZWFrID0gdXRpbC5pc0JyZWFrKHRlbXBDb24pO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFvbmx5QnJlYWspIHtcclxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAodGVtcENvbiAmJiAhdXRpbC5pc0JyZWFrKHRlbXBDb24pICYmIHRlbXBDb24ubm9kZVR5cGUgPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbiA9IHRlbXBDb24uY2hpbGROb2Rlc1t0ZW1wT2Zmc2V0XSB8fCB0ZW1wQ29uLm5leHRFbGVtZW50U2libGluZyB8fCB0ZW1wQ29uLm5leHRTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wT2Zmc2V0ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZm9ybWF0ID0gdXRpbC5nZXRGb3JtYXRFbGVtZW50KHRlbXBDb24sIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmb3JtYXQgPT09IHV0aWwuZ2V0UmFuZ2VGb3JtYXRFbGVtZW50KGZvcm1hdCwgbnVsbCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0ID0gdXRpbC5jcmVhdGVFbGVtZW50KHV0aWwuZ2V0UGFyZW50RWxlbWVudCh0ZW1wQ29uLCB1dGlsLmlzQ2VsbCkgPyAnRElWJyA6IG9wdGlvbnMuZGVmYXVsdFRhZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb24ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZm9ybWF0LCB0ZW1wQ29uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LmFwcGVuZENoaWxkKHRlbXBDb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodXRpbC5pc0JyZWFrKHRlbXBDb24pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW1wdHlUZXh0ID0gdXRpbC5jcmVhdGVUZXh0Tm9kZSh1dGlsLnplcm9XaWR0aFNwYWNlKTtcclxuICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGVtcHR5VGV4dCwgdGVtcENvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcENvbiA9IGVtcHR5VGV4dDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25seUJyZWFrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFydENvbiA9PT0gZW5kQ29uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRDb24gPSB0ZW1wQ29uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kT2ZmID0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gc2V0IHN0YXJ0Q29udGFpbmVyXHJcbiAgICAgICAgICAgIHN0YXJ0Q29uID0gdGVtcENvbjtcclxuICAgICAgICAgICAgc3RhcnRPZmYgPSB0ZW1wT2Zmc2V0O1xyXG5cclxuICAgICAgICAgICAgLy8gZW5kQ29udGFpbmVyXHJcbiAgICAgICAgICAgIHRlbXBDb24gPSB1dGlsLmlzV3lzaXd5Z0RpdihlbmRDb24pID8gY29udGV4dC5lbGVtZW50Lnd5c2l3eWcubGFzdENoaWxkIDogZW5kQ29uO1xyXG4gICAgICAgICAgICB0ZW1wT2Zmc2V0ID0gZW5kT2ZmO1xyXG5cclxuICAgICAgICAgICAgaWYgKHV0aWwuaXNCcmVhayh0ZW1wQ29uKSB8fCAodGVtcENvbi5ub2RlVHlwZSA9PT0gMSAmJiB0ZW1wQ29uLmNoaWxkTm9kZXMubGVuZ3RoID4gMCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9ubHlCcmVhayA9IHV0aWwuaXNCcmVhayh0ZW1wQ29uKTtcclxuICAgICAgICAgICAgICAgIGlmICghb25seUJyZWFrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRlbXBDb24gJiYgIXV0aWwuaXNCcmVhayh0ZW1wQ29uKSAmJiB0ZW1wQ29uLm5vZGVUeXBlID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDaGlsZCA9IHRlbXBDb24uY2hpbGROb2RlcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRlbXBDaGlsZC5sZW5ndGggPT09IDApIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uID0gdGVtcENoaWxkW3RlbXBPZmZzZXQgPiAwID8gdGVtcE9mZnNldCAtIDEgOiB0ZW1wT2Zmc2V0XSB8fCAhL0ZJR1VSRS9pLnRlc3QodGVtcENoaWxkWzBdLm5vZGVOYW1lKSA/IHRlbXBDaGlsZFswXSA6ICh0ZW1wQ29uLnByZXZpb3VzRWxlbWVudFNpYmxpbmcgfHwgdGVtcENvbi5wcmV2aW91c1NpYmxpbmcgfHwgc3RhcnRDb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wT2Zmc2V0ID0gdGVtcE9mZnNldCA+IDAgPyB0ZW1wQ29uLnRleHRDb250ZW50Lmxlbmd0aCA6IHRlbXBPZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZvcm1hdCA9IHV0aWwuZ2V0Rm9ybWF0RWxlbWVudCh0ZW1wQ29uLCBudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybWF0ID09PSB1dGlsLmdldFJhbmdlRm9ybWF0RWxlbWVudChmb3JtYXQsIG51bGwpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCA9IHV0aWwuY3JlYXRlRWxlbWVudCh1dGlsLmlzQ2VsbChmb3JtYXQpID8gJ0RJVicgOiBvcHRpb25zLmRlZmF1bHRUYWcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGZvcm1hdCwgdGVtcENvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdC5hcHBlbmRDaGlsZCh0ZW1wQ29uKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNCcmVhayh0ZW1wQ29uKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVtcHR5VGV4dCA9IHV0aWwuY3JlYXRlVGV4dE5vZGUodXRpbC56ZXJvV2lkdGhTcGFjZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcENvbi5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlbXB0eVRleHQsIHRlbXBDb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBDb24gPSBlbXB0eVRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcE9mZnNldCA9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9ubHlCcmVhayAmJiAhdGVtcENvbi5wcmV2aW91c1NpYmxpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtKGVuZENvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBzZXQgZW5kQ29udGFpbmVyXHJcbiAgICAgICAgICAgIGVuZENvbiA9IHRlbXBDb247XHJcbiAgICAgICAgICAgIGVuZE9mZiA9IHRlbXBPZmZzZXQ7XHJcblxyXG4gICAgICAgICAgICAvLyBzZXQgUmFuZ2VcclxuICAgICAgICAgICAgdGhpcy5zZXRSYW5nZShzdGFydENvbiwgc3RhcnRPZmYsIGVuZENvbiwgZW5kT2ZmKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgYSBcImZvcm1hdEVsZW1lbnRcIih1dGlsLmlzRm9ybWF0RWxlbWVudCkgYXJyYXkgZnJvbSB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHJhbmdlLlxyXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb258bnVsbH0gdmFsaWRhdGlvbiBUaGUgdmFsaWRhdGlvbiBmdW5jdGlvbi4gKFJlcGxhY2VzIHRoZSBkZWZhdWx0IHZhbGlkYXRpb24gZnVuY3Rpb24tdXRpbC5pc0Zvcm1hdEVsZW1lbnQoY3VycmVudCkpXHJcbiAgICAgICAgICogQHJldHVybnMge0FycmF5fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGdldFNlbGVjdGVkRWxlbWVudHM6IGZ1bmN0aW9uICh2YWxpZGF0aW9uKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5fcmVzZXRSYW5nZVRvVGV4dE5vZGUoKSkgcmV0dXJuIFtdO1xyXG4gICAgICAgICAgICBsZXQgcmFuZ2UgPSB0aGlzLmdldFJhbmdlKCk7XHJcblxyXG4gICAgICAgICAgICBpZiAodXRpbC5pc1d5c2l3eWdEaXYocmFuZ2Uuc3RhcnRDb250YWluZXIpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGNvbnRleHQuZWxlbWVudC53eXNpd3lnLmNoaWxkcmVuO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFtdO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2UoY2hpbGRyZW5bMF0sIDAsIGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDFdLCBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXS50ZXh0Q29udGVudC50cmltKCkubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRSYW5nZSgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBzdGFydENvbiA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyO1xyXG4gICAgICAgICAgICBjb25zdCBlbmRDb24gPSByYW5nZS5lbmRDb250YWluZXI7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbW1vbkNvbiA9IHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyO1xyXG5cclxuICAgICAgICAgICAgLy8gZ2V0IGxpbmUgbm9kZXNcclxuICAgICAgICAgICAgY29uc3QgbGluZU5vZGVzID0gdXRpbC5nZXRMaXN0Q2hpbGRyZW4oY29tbW9uQ29uLCBmdW5jdGlvbiAoY3VycmVudCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRpb24gPyB2YWxpZGF0aW9uKGN1cnJlbnQpIDogdXRpbC5pc0Zvcm1hdEVsZW1lbnQoY3VycmVudCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKCF1dGlsLmlzV3lzaXd5Z0Rpdihjb21tb25Db24pICYmICF1dGlsLmlzUmFuZ2VGb3JtYXRFbGVtZW50KGNvbW1vbkNvbikpIGxpbmVOb2Rlcy51bnNoaWZ0KHV0aWwuZ2V0Rm9ybWF0RWxlbWVudChjb21tb25Db24sIG51bGwpKTtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0Q29uID09PSBlbmRDb24gfHwgbGluZU5vZGVzLmxlbmd0aCA9PT0gMSkgcmV0dXJuIGxpbmVOb2RlcztcclxuXHJcbiAgICAgICAgICAgIGxldCBzdGFydExpbmUgPSB1dGlsLmdldEZvcm1hdEVsZW1lbnQoc3RhcnRDb24sIG51bGwpO1xyXG4gICAgICAgICAgICBsZXQgZW5kTGluZSA9IHV0aWwuZ2V0Rm9ybWF0RWxlbWVudChlbmRDb24sIG51bGwpO1xyXG4gICAgICAgICAgICBsZXQgc3RhcnRJZHggPSBudWxsO1xyXG4gICAgICAgICAgICBsZXQgZW5kSWR4ID0gbnVsbDtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNvbnN0IG9ubHlUYWJsZSA9IGZ1bmN0aW9uIChjdXJyZW50KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdXRpbC5pc1RhYmxlKGN1cnJlbnQpID8gL15UQUJMRSQvaS50ZXN0KGN1cnJlbnQubm9kZU5hbWUpIDogdHJ1ZTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGxldCBzdGFydFJhbmdlRWwgPSB1dGlsLmdldFJhbmdlRm9ybWF0RWxlbWVudChzdGFydExpbmUsIG9ubHlUYWJsZSk7XHJcbiAgICAgICAgICAgIGxldCBlbmRSYW5nZUVsID0gdXRpbC5nZXRSYW5nZUZvcm1hdEVsZW1lbnQoZW5kTGluZSwgb25seVRhYmxlKTtcclxuICAgICAgICAgICAgaWYgKHV0aWwuaXNUYWJsZShzdGFydFJhbmdlRWwpICYmIHV0aWwuaXNMaXN0Q2VsbChzdGFydFJhbmdlRWwucGFyZW50Tm9kZSkpIHN0YXJ0UmFuZ2VFbCA9IHN0YXJ0UmFuZ2VFbC5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICBpZiAodXRpbC5pc1RhYmxlKGVuZFJhbmdlRWwpICYmIHV0aWwuaXNMaXN0Q2VsbChlbmRSYW5nZUVsLnBhcmVudE5vZGUpKSBlbmRSYW5nZUVsID0gZW5kUmFuZ2VFbC5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29uc3Qgc2FtZVJhbmdlID0gc3RhcnRSYW5nZUVsID09PSBlbmRSYW5nZUVsO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gbGluZU5vZGVzLmxlbmd0aCwgbGluZTsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBsaW5lID0gbGluZU5vZGVzW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChzdGFydExpbmUgPT09IGxpbmUgfHwgKCFzYW1lUmFuZ2UgJiYgbGluZSA9PT0gc3RhcnRSYW5nZUVsKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0SWR4ID0gaTtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZW5kTGluZSA9PT0gbGluZSB8fCAoIXNhbWVSYW5nZSAmJiBsaW5lID09PSBlbmRSYW5nZUVsKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVuZElkeCA9IGk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChzdGFydElkeCA9PT0gbnVsbCkgc3RhcnRJZHggPSAwO1xyXG4gICAgICAgICAgICBpZiAoZW5kSWR4ID09PSBudWxsKSBlbmRJZHggPSBsaW5lTm9kZXMubGVuZ3RoIC0gMTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBsaW5lTm9kZXMuc2xpY2Uoc3RhcnRJZHgsIGVuZElkeCArIDEpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBHZXQgZm9ybWF0IGVsZW1lbnRzIGFuZCBjb21wb25lbnRzIGZyb20gdGhlIHNlbGVjdGVkIGFyZWEuIChQLCBESVYsIEhbMS02XSwgT0wsIFVMLCBUQUJMRS4uKVxyXG4gICAgICAgICAqIElmIHNvbWUgb2YgdGhlIGNvbXBvbmVudCBhcmUgaW5jbHVkZWQgaW4gdGhlIHNlbGVjdGlvbiwgZ2V0IHRoZSBlbnRpcmUgdGhhdCBjb21wb25lbnQuXHJcbiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSByZW1vdmVEdXBsaWNhdGUgSWYgdHJ1ZSwgaWYgdGhlcmUgaXMgYSBwYXJlbnQgYW5kIGNoaWxkIHRhZyBhbW9uZyB0aGUgc2VsZWN0ZWQgZWxlbWVudHMsIHRoZSBjaGlsZCB0YWcgaXMgZXhjbHVkZWQuXHJcbiAgICAgICAgICogQHJldHVybnMge0FycmF5fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGdldFNlbGVjdGVkRWxlbWVudHNBbmRDb21wb25lbnRzOiBmdW5jdGlvbiAocmVtb3ZlRHVwbGljYXRlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbW1vbkNvbiA9IHRoaXMuZ2V0UmFuZ2UoKS5jb21tb25BbmNlc3RvckNvbnRhaW5lcjtcclxuICAgICAgICAgICAgY29uc3QgbXlDb21wb25lbnQgPSB1dGlsLmdldFBhcmVudEVsZW1lbnQoY29tbW9uQ29uLCB1dGlsLmlzQ29tcG9uZW50KTtcclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRMaW5lcyA9IHV0aWwuaXNUYWJsZShjb21tb25Db24pID8gXHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldFNlbGVjdGVkRWxlbWVudHMobnVsbCkgOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRTZWxlY3RlZEVsZW1lbnRzKGZ1bmN0aW9uIChjdXJyZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5nZXRQYXJlbnRFbGVtZW50KGN1cnJlbnQsIHRoaXMuaXNDb21wb25lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAodGhpcy5pc0Zvcm1hdEVsZW1lbnQoY3VycmVudCkgJiYgKCFjb21wb25lbnQgfHwgY29tcG9uZW50ID09PSBteUNvbXBvbmVudCkpIHx8ICh0aGlzLmlzQ29tcG9uZW50KGN1cnJlbnQpICYmICF0aGlzLmdldEZvcm1hdEVsZW1lbnQoY3VycmVudCkpO1xyXG4gICAgICAgICAgICAgICAgfS5iaW5kKHV0aWwpKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmIChyZW1vdmVEdXBsaWNhdGUpIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBzZWxlY3RlZExpbmVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IGkgLSAxOyBqID49IDA7IGotLSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRMaW5lc1tqXS5jb250YWlucyhzZWxlY3RlZExpbmVzW2ldKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRMaW5lcy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLS07IGxlbi0tO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBzZWxlY3RlZExpbmVzO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBEZXRlcm1pbmUgaWYgdGhpcyBvZmZzZXQgaXMgdGhlIGVkZ2Ugb2Zmc2V0IG9mIGNvbnRhaW5lclxyXG4gICAgICAgICAqIEBwYXJhbSB7Tm9kZX0gY29udGFpbmVyIFRoZSBub2RlIG9mIHRoZSBzZWxlY3Rpb24gb2JqZWN0LiAocmFuZ2Uuc3RhcnRDb250YWluZXIuLilcclxuICAgICAgICAgKiBAcGFyYW0ge051bWJlcn0gb2Zmc2V0IFRoZSBvZmZzZXQgb2YgdGhlIHNlbGVjdGlvbiBvYmplY3QuIChjb3JlLmdldFJhbmdlKCkuc3RhcnRPZmZzZXQuLi4pXHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd8dW5kZWZpbmVkfSBkaXIgU2VsZWN0IGNoZWNrIHBvaW50IC0gQm90aCBlZGdlLCBGcm9udCBlZGdlIG9yIEVuZCBlZGdlLiAoXCJmcm9udFwiOiBGcm9udCBlZGdlLCBcImVuZFwiOiBFbmQgZWRnZSwgdW5kZWZpbmVkOiBCb3RoIGVkZ2UpXHJcbiAgICAgICAgICogQHJldHVybnMge0Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaXNFZGdlUG9pbnQ6IGZ1bmN0aW9uIChjb250YWluZXIsIG9mZnNldCwgZGlyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAoZGlyICE9PSAnZW5kJyAmJiBvZmZzZXQgPT09IDApIHx8ICgoIWRpciB8fCBkaXIgIT09ICdmcm9udCcpICYmICFjb250YWluZXIubm9kZVZhbHVlICYmIG9mZnNldCA9PT0gMSkgfHwgKCghZGlyIHx8IGRpciA9PT0gJ2VuZCcpICYmICEhY29udGFpbmVyLm5vZGVWYWx1ZSAmJiBvZmZzZXQgPT09IGNvbnRhaW5lci5ub2RlVmFsdWUubGVuZ3RoKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQ2hlY2sgaWYgdGhlIGNvbnRhaW5lciBhbmQgb2Zmc2V0IHZhbHVlcyBhcmUgdGhlIGVkZ2VzIG9mIHRoZSBmb3JtYXQgdGFnXHJcbiAgICAgICAgICogQHBhcmFtIHtOb2RlfSBjb250YWluZXIgVGhlIG5vZGUgb2YgdGhlIHNlbGVjdGlvbiBvYmplY3QuIChyYW5nZS5zdGFydENvbnRhaW5lci4uKVxyXG4gICAgICAgICAqIEBwYXJhbSB7TnVtYmVyfSBvZmZzZXQgVGhlIG9mZnNldCBvZiB0aGUgc2VsZWN0aW9uIG9iamVjdC4gKGNvcmUuZ2V0UmFuZ2UoKS5zdGFydE9mZnNldC4uLilcclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gZGlyIFNlbGVjdCBjaGVjayBwb2ludCAtIFwiZnJvbnRcIjogRnJvbnQgZWRnZSwgXCJlbmRcIjogRW5kIGVkZ2UsIHVuZGVmaW5lZDogQm90aCBlZGdlLlxyXG4gICAgICAgICAqIEByZXR1cm5zIHtBcnJheXxudWxsfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX2lzRWRnZUZvcm1hdDogZnVuY3Rpb24gKG5vZGUsIG9mZnNldCwgZGlyKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pc0VkZ2VQb2ludChub2RlLCBvZmZzZXQsIGRpcikpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xyXG4gICAgICAgICAgICBkaXIgPSBkaXIgPT09ICdmcm9udCcgPyAncHJldmlvdXNTaWJsaW5nJyA6ICduZXh0U2libGluZyc7XHJcbiAgICAgICAgICAgIHdoaWxlIChub2RlICYmICF1dGlsLmlzRm9ybWF0RWxlbWVudChub2RlKSAmJiAhdXRpbC5pc1d5c2l3eWdEaXYobm9kZSkpIHtcclxuICAgICAgICAgICAgICAgIGlmICghbm9kZVtkaXJdIHx8ICh1dGlsLmlzQnJlYWsobm9kZVtkaXJdKSAmJiAhbm9kZVtkaXJdW2Rpcl0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IDEpIHJlc3VsdC5wdXNoKG5vZGUuY2xvbmVOb2RlKGZhbHNlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFNob3cgbG9hZGluZyBib3hcclxuICAgICAgICAgKi9cclxuICAgICAgICBzaG93TG9hZGluZzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQubG9hZGluZy5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQ2xvc2UgbG9hZGluZyBib3hcclxuICAgICAgICAgKi9cclxuICAgICAgICBjbG9zZUxvYWRpbmc6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgY29udGV4dC5lbGVtZW50LmxvYWRpbmcuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQXBwZW5kIGZvcm1hdCBlbGVtZW50IHRvIHNpYmxpbmcgbm9kZSBvZiBhcmd1bWVudCBlbGVtZW50LlxyXG4gICAgICAgICAqIElmIHRoZSBcImZvcm1hdE5vZGVOYW1lXCIgYXJndW1lbnQgdmFsdWUgaXMgcHJlc2VudCwgdGhlIHRhZyBvZiB0aGF0IGFyZ3VtZW50IHZhbHVlIGlzIGluc2VydGVkLFxyXG4gICAgICAgICAqIElmIG5vdCwgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBmb3JtYXQgdGFnIGlzIGluc2VydGVkLlxyXG4gICAgICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCBJbnNlcnQgYXMgc2libGluZ3Mgb2YgdGhhdCBlbGVtZW50XHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd8RWxlbWVudHxudWxsfSBmb3JtYXROb2RlIE5vZGUgbmFtZSBvciBub2RlIG9iZWpjdCB0byBiZSBpbnNlcnRlZFxyXG4gICAgICAgICAqIEByZXR1cm5zIHtFbGVtZW50fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGFwcGVuZEZvcm1hdFRhZzogZnVuY3Rpb24gKGVsZW1lbnQsIGZvcm1hdE5vZGUpIHtcclxuICAgICAgICAgICAgaWYgKCFlbGVtZW50LnBhcmVudE5vZGUpIHJldHVybiBudWxsO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgY3VycmVudEZvcm1hdEVsID0gdXRpbC5nZXRGb3JtYXRFbGVtZW50KHRoaXMuZ2V0U2VsZWN0aW9uTm9kZSgpLCBudWxsKTtcclxuICAgICAgICAgICAgbGV0IG9Gb3JtYXQgPSBudWxsO1xyXG4gICAgICAgICAgICBpZiAodXRpbC5pc0ZyZWVGb3JtYXRFbGVtZW50KGN1cnJlbnRGb3JtYXRFbCB8fCBlbGVtZW50LnBhcmVudE5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICBvRm9ybWF0ID0gdXRpbC5jcmVhdGVFbGVtZW50KCdCUicpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb0Zvcm1hdE5hbWUgPSBmb3JtYXROb2RlID8gKHR5cGVvZiBmb3JtYXROb2RlID09PSAnc3RyaW5nJyA/IGZvcm1hdE5vZGUgOiBmb3JtYXROb2RlLm5vZGVOYW1lKSA6ICh1dGlsLmlzRm9ybWF0RWxlbWVudChjdXJyZW50Rm9ybWF0RWwpICYmICF1dGlsLmlzUmFuZ2VGb3JtYXRFbGVtZW50KGN1cnJlbnRGb3JtYXRFbCkgJiYgIXV0aWwuaXNGcmVlRm9ybWF0RWxlbWVudChjdXJyZW50Rm9ybWF0RWwpKSA/IGN1cnJlbnRGb3JtYXRFbC5ub2RlTmFtZSA6IG9wdGlvbnMuZGVmYXVsdFRhZztcclxuICAgICAgICAgICAgICAgIG9Gb3JtYXQgPSB1dGlsLmNyZWF0ZUVsZW1lbnQob0Zvcm1hdE5hbWUpO1xyXG4gICAgICAgICAgICAgICAgb0Zvcm1hdC5pbm5lckhUTUwgPSAnPGJyPic7XHJcbiAgICAgICAgICAgICAgICBpZiAoKGZvcm1hdE5vZGUgJiYgdHlwZW9mIGZvcm1hdE5vZGUgIT09ICdzdHJpbmcnKSB8fCAoIWZvcm1hdE5vZGUgJiYgdXRpbC5pc0Zvcm1hdEVsZW1lbnQoY3VycmVudEZvcm1hdEVsKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB1dGlsLmNvcHlUYWdBdHRyaWJ1dGVzKG9Gb3JtYXQsIGZvcm1hdE5vZGUgfHwgY3VycmVudEZvcm1hdEVsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHV0aWwuaXNDZWxsKGVsZW1lbnQpKSBlbGVtZW50Lmluc2VydEJlZm9yZShvRm9ybWF0LCBlbGVtZW50Lm5leHRFbGVtZW50U2libGluZyk7XHJcbiAgICAgICAgICAgIGVsc2UgZWxlbWVudC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShvRm9ybWF0LCBlbGVtZW50Lm5leHRFbGVtZW50U2libGluZyk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gb0Zvcm1hdDtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gVGhlIG1ldGhvZCB0byBpbnNlcnQgYSBlbGVtZW50IGFuZCByZXR1cm4uICh1c2VkIGVsZW1lbnRzIDogdGFibGUsIGhyLCBpbWFnZSwgdmlkZW8pXHJcbiAgICAgICAgICogSWYgXCJlbGVtZW50XCIgaXMgXCJIUlwiLCBpbnNlcnQgYW5kIHJldHVybiB0aGUgbmV3IGxpbmUuXHJcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IEVsZW1lbnQgdG8gYmUgaW5zZXJ0ZWRcclxuICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IG5vdEhpc3RvcnlQdXNoIFdoZW4gdHJ1ZSwgaXQgZG9lcyBub3QgdXBkYXRlIHRoZSBoaXN0b3J5IHN0YWNrIGFuZCB0aGUgc2VsZWN0aW9uIG9iamVjdCBhbmQgcmV0dXJuIEVkZ2VOb2RlcyAodXRpbC5nZXRFZGdlQ2hpbGROb2RlcylcclxuICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGNoZWNrQ2hhckNvdW50IElmIHRydWUsIGlmIFwib3B0aW9ucy5tYXhDaGFyQ291bnRcIiBpcyBleGNlZWRlZCB3aGVuIFwiZWxlbWVudFwiIGlzIGFkZGVkLCBudWxsIGlzIHJldHVybmVkIHdpdGhvdXQgYWRkaXRpb24uXHJcbiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSBub3RTZWxlY3QgSWYgdHJ1ZSwgRG8gbm90IGF1dG9tYXRpY2FsbHkgc2VsZWN0IHRoZSBpbnNlcnRlZCBjb21wb25lbnQuXHJcbiAgICAgICAgICogQHJldHVybnMge0VsZW1lbnR9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaW5zZXJ0Q29tcG9uZW50OiBmdW5jdGlvbiAoZWxlbWVudCwgbm90SGlzdG9yeVB1c2gsIGNoZWNrQ2hhckNvdW50LCBub3RTZWxlY3QpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNSZWFkT25seSB8fCAoY2hlY2tDaGFyQ291bnQgJiYgIXRoaXMuY2hlY2tDaGFyQ291bnQoZWxlbWVudCwgbnVsbCkpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgciA9IHRoaXMucmVtb3ZlTm9kZSgpO1xyXG4gICAgICAgICAgICB0aGlzLmdldFJhbmdlX2FkZExpbmUodGhpcy5nZXRSYW5nZSgpLCByLmNvbnRhaW5lcik7XHJcbiAgICAgICAgICAgIGxldCBvTm9kZSA9IG51bGw7XHJcbiAgICAgICAgICAgIGxldCBzZWxlY3Rpb25Ob2RlID0gdGhpcy5nZXRTZWxlY3Rpb25Ob2RlKCk7XHJcbiAgICAgICAgICAgIGxldCBmb3JtYXRFbCA9IHV0aWwuZ2V0Rm9ybWF0RWxlbWVudChzZWxlY3Rpb25Ob2RlLCBudWxsKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh1dGlsLmlzTGlzdENlbGwoZm9ybWF0RWwpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluc2VydE5vZGUoZWxlbWVudCwgc2VsZWN0aW9uTm9kZSA9PT0gZm9ybWF0RWwgPyBudWxsIDogci5jb250YWluZXIubmV4dFNpYmxpbmcsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIGlmICghZWxlbWVudC5uZXh0U2libGluZykgZWxlbWVudC5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHV0aWwuY3JlYXRlRWxlbWVudCgnQlInKSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5nZXRSYW5nZSgpLmNvbGxhcHNlZCAmJiAoci5jb250YWluZXIubm9kZVR5cGUgPT09IDMgfHwgdXRpbC5pc0JyZWFrKHIuY29udGFpbmVyKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkZXB0aEZvcm1hdCA9IHV0aWwuZ2V0UGFyZW50RWxlbWVudChyLmNvbnRhaW5lciwgZnVuY3Rpb24gKGN1cnJlbnQpIHsgcmV0dXJuIHRoaXMuaXNSYW5nZUZvcm1hdEVsZW1lbnQoY3VycmVudCk7IH0uYmluZCh1dGlsKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgb05vZGUgPSB1dGlsLnNwbGl0RWxlbWVudChyLmNvbnRhaW5lciwgci5vZmZzZXQsICFkZXB0aEZvcm1hdCA/IDAgOiB1dGlsLmdldEVsZW1lbnREZXB0aChkZXB0aEZvcm1hdCkgKyAxKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAob05vZGUpIGZvcm1hdEVsID0gb05vZGUucHJldmlvdXNTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pbnNlcnROb2RlKGVsZW1lbnQsIHV0aWwuaXNSYW5nZUZvcm1hdEVsZW1lbnQoZm9ybWF0RWwpID8gbnVsbCA6IGZvcm1hdEVsLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZm9ybWF0RWwgJiYgdXRpbC5vbmx5WmVyb1dpZHRoU3BhY2UoZm9ybWF0RWwpKSB1dGlsLnJlbW92ZUl0ZW0oZm9ybWF0RWwpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFJhbmdlKGVsZW1lbnQsIDAsIGVsZW1lbnQsIDApO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFub3RTZWxlY3QpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVDb21wb25lbnRJbmZvID0gdGhpcy5nZXRGaWxlQ29tcG9uZW50KGVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZpbGVDb21wb25lbnRJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RDb21wb25lbnQoZmlsZUNvbXBvbmVudEluZm8udGFyZ2V0LCBmaWxlQ29tcG9uZW50SW5mby5wbHVnaW5OYW1lKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob05vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBvTm9kZSA9IHV0aWwuZ2V0RWRnZUNoaWxkTm9kZXMob05vZGUsIG51bGwpLnNjIHx8IG9Ob2RlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2Uob05vZGUsIDAsIG9Ob2RlLCAwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gaGlzdG9yeSBzdGFja1xyXG4gICAgICAgICAgICBpZiAoIW5vdEhpc3RvcnlQdXNoKSB0aGlzLmhpc3RvcnkucHVzaCgxKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBvTm9kZSB8fCBlbGVtZW50O1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBHZXRzIHRoZSBmaWxlIGNvbXBvbmVudCBhbmQgdGhhdCBwbHVnaW4gbmFtZVxyXG4gICAgICAgICAqIHJldHVybjoge3RhcmdldCwgY29tcG9uZW50LCBwbHVnaW5OYW1lfSB8IG51bGxcclxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgVGFyZ2V0IGVsZW1lbnQgKGZpZ3VyZSB0YWcsIGNvbXBvbmVudCBkaXYsIGZpbGUgdGFnKVxyXG4gICAgICAgICAqIEByZXR1cm5zIHtPYmplY3R8bnVsbH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBnZXRGaWxlQ29tcG9uZW50OiBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuX2ZpbGVNYW5hZ2VyLnF1ZXJ5U3RyaW5nIHx8ICFlbGVtZW50KSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICAgICAgICAgIGxldCB0YXJnZXQsIHBsdWdpbk5hbWU7XHJcbiAgICAgICAgICAgIGlmICgvXkZJR1VSRSQvaS50ZXN0KGVsZW1lbnQubm9kZU5hbWUpIHx8IC9zZS1jb21wb25lbnQvLnRlc3QoZWxlbWVudC5jbGFzc05hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5fZmlsZU1hbmFnZXIucXVlcnlTdHJpbmcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghdGFyZ2V0ICYmIGVsZW1lbnQubm9kZU5hbWUgJiYgdGhpcy5fZmlsZU1hbmFnZXIucmVnRXhwLnRlc3QoZWxlbWVudC5ub2RlTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldCA9IGVsZW1lbnQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0YXJnZXQpIHtcclxuICAgICAgICAgICAgICAgIHBsdWdpbk5hbWUgPSB0aGlzLl9maWxlTWFuYWdlci5wbHVnaW5NYXBbdGFyZ2V0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldO1xyXG4gICAgICAgICAgICAgICAgaWYgKHBsdWdpbk5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IHRhcmdldCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50OiB1dGlsLmdldFBhcmVudEVsZW1lbnQodGFyZ2V0LCB1dGlsLmlzQ29tcG9uZW50KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luTmFtZTogcGx1Z2luTmFtZVxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgY29tcG9uZW50KGltYWdlLCB2aWRlbykgaXMgc2VsZWN0ZWQgYW5kIHRoZSByZXNpemluZyBtb2R1bGUgaXMgY2FsbGVkLlxyXG4gICAgICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCBFbGVtZW50IHRhZyAoaW1nLCBpZnJhbWUsIHZpZGVvKVxyXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBwbHVnaW5OYW1lIFBsdWdpbiBuYW1lIChpbWFnZSwgdmlkZW8pXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgc2VsZWN0Q29tcG9uZW50OiBmdW5jdGlvbiAoZWxlbWVudCwgcGx1Z2luTmFtZSkge1xyXG4gICAgICAgICAgICBpZiAodXRpbC5pc1VuZWRpdGFibGVDb21wb25lbnQodXRpbC5nZXRQYXJlbnRFbGVtZW50KGVsZW1lbnQsIHV0aWwuaXNDb21wb25lbnQpKSB8fCB1dGlsLmlzVW5lZGl0YWJsZUNvbXBvbmVudChlbGVtZW50KSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuaGFzRm9jdXMpIHRoaXMuZm9jdXMoKTtcclxuICAgICAgICAgICAgY29uc3QgcGx1Z2luID0gdGhpcy5wbHVnaW5zW3BsdWdpbk5hbWVdO1xyXG4gICAgICAgICAgICBpZiAoIXBsdWdpbikgcmV0dXJuO1xyXG4gICAgICAgICAgICBfdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcGx1Z2luLnNlbGVjdCA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5jYWxsUGx1Z2luKHBsdWdpbk5hbWUsIHBsdWdpbi5zZWxlY3QuYmluZCh0aGlzLCBlbGVtZW50KSwgbnVsbCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRDb21wb25lbnRMaW5lQnJlYWtlcihlbGVtZW50KTtcclxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gU2V0IGxpbmUgYnJlYWtlciBvZiBjb21wb25lbnRcclxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgRWxlbWVudCB0YWcgKGltZywgaWZyYW1lLCB2aWRlbylcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9zZXRDb21wb25lbnRMaW5lQnJlYWtlcjogZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgLy8gbGluZSBicmVha2VyXHJcbiAgICAgICAgICAgIHRoaXMuX2xpbmVCcmVha2VyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHV0aWwuZ2V0UGFyZW50RWxlbWVudChlbGVtZW50LCB1dGlsLmlzQ29tcG9uZW50KTtcclxuICAgICAgICAgICAgY29uc3QgdF9zdHlsZSA9IGNvbnRleHQuZWxlbWVudC5saW5lQnJlYWtlcl90LnN0eWxlO1xyXG4gICAgICAgICAgICBjb25zdCBiX3N0eWxlID0gY29udGV4dC5lbGVtZW50LmxpbmVCcmVha2VyX2Iuc3R5bGU7XHJcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuY29udGV4dC5yZXNpemluZy5yZXNpemVDb250YWluZXIuc3R5bGUuZGlzcGxheSA9PT0gJ2Jsb2NrJyA/IHRoaXMuY29udGV4dC5yZXNpemluZy5yZXNpemVDb250YWluZXIgOiBlbGVtZW50O1xyXG5cclxuICAgICAgICAgICAgY29uc3QgaXNMaXN0ID0gdXRpbC5pc0xpc3RDZWxsKGNvbnRhaW5lci5wYXJlbnROb2RlKTtcclxuICAgICAgICAgICAgbGV0IGNvbXBvbmVudFRvcCwgd1Njcm9sbCwgdztcclxuICAgICAgICAgICAgLy8gdG9wXHJcbiAgICAgICAgICAgIGlmIChpc0xpc3QgPyAhY29udGFpbmVyLnByZXZpb3VzU2libGluZyA6ICF1dGlsLmlzRm9ybWF0RWxlbWVudChjb250YWluZXIucHJldmlvdXNFbGVtZW50U2libGluZykpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3ZhcmlhYmxlLl9saW5lQnJlYWtDb21wID0gY29udGFpbmVyO1xyXG4gICAgICAgICAgICAgICAgd1Njcm9sbCA9IGNvbnRleHQuZWxlbWVudC53eXNpd3lnLnNjcm9sbFRvcDtcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudFRvcCA9IHV0aWwuZ2V0T2Zmc2V0KGVsZW1lbnQsIGNvbnRleHQuZWxlbWVudC53eXNpd3lnRnJhbWUpLnRvcCArIHdTY3JvbGw7XHJcbiAgICAgICAgICAgICAgICB3ID0gKHRhcmdldC5vZmZzZXRXaWR0aCAvIDIpIC8gMjtcclxuXHJcbiAgICAgICAgICAgICAgICB0X3N0eWxlLnRvcCA9IChjb21wb25lbnRUb3AgLSB3U2Nyb2xsIC0gMTIpICsgJ3B4JztcclxuICAgICAgICAgICAgICAgIHRfc3R5bGUubGVmdCA9ICh1dGlsLmdldE9mZnNldCh0YXJnZXQpLmxlZnQgKyB3KSArICdweCc7XHJcbiAgICAgICAgICAgICAgICB0X3N0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdF9zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGJvdHRvbVxyXG4gICAgICAgICAgICBpZiAoaXNMaXN0ID8gIWNvbnRhaW5lci5uZXh0U2libGluZyA6ICF1dGlsLmlzRm9ybWF0RWxlbWVudChjb250YWluZXIubmV4dEVsZW1lbnRTaWJsaW5nKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFjb21wb25lbnRUb3ApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl92YXJpYWJsZS5fbGluZUJyZWFrQ29tcCA9IGNvbnRhaW5lcjtcclxuICAgICAgICAgICAgICAgICAgICB3U2Nyb2xsID0gY29udGV4dC5lbGVtZW50Lnd5c2l3eWcuc2Nyb2xsVG9wO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudFRvcCA9IHV0aWwuZ2V0T2Zmc2V0KGVsZW1lbnQsIGNvbnRleHQuZWxlbWVudC53eXNpd3lnRnJhbWUpLnRvcCArIHdTY3JvbGw7XHJcbiAgICAgICAgICAgICAgICAgICAgdyA9ICh0YXJnZXQub2Zmc2V0V2lkdGggLyAyKSAvIDI7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgYl9zdHlsZS50b3AgPSAoY29tcG9uZW50VG9wICsgdGFyZ2V0Lm9mZnNldEhlaWdodCAtIHdTY3JvbGwgLSAxMikgKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgYl9zdHlsZS5sZWZ0ID0gKHV0aWwuZ2V0T2Zmc2V0KHRhcmdldCkubGVmdCArIHRhcmdldC5vZmZzZXRXaWR0aCAtIHcgLSAyNCkgKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgYl9zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGJfc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBEZWxldGUgc2VsZWN0ZWQgbm9kZSBhbmQgaW5zZXJ0IGFyZ3VtZW50IHZhbHVlIG5vZGUgYW5kIHJldHVybi5cclxuICAgICAgICAgKiBJZiB0aGUgXCJhZnRlck5vZGVcIiBleGlzdHMsIGl0IGlzIGluc2VydGVkIGFmdGVyIHRoZSBcImFmdGVyTm9kZVwiXHJcbiAgICAgICAgICogSW5zZXJ0aW5nIGEgdGV4dCBub2RlIG1lcmdlcyB3aXRoIGJvdGggdGV4dCBub2RlcyBvbiBib3RoIHNpZGVzIGFuZCByZXR1cm5zIGEgbmV3IFwieyBjb250YWluZXIsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgfVwiLlxyXG4gICAgICAgICAqIEBwYXJhbSB7Tm9kZX0gb05vZGUgRWxlbWVudCB0byBiZSBpbnNlcnRlZFxyXG4gICAgICAgICAqIEBwYXJhbSB7Tm9kZXxudWxsfSBhZnRlck5vZGUgSWYgdGhlIG5vZGUgZXhpc3RzLCBpdCBpcyBpbnNlcnRlZCBhZnRlciB0aGUgbm9kZVxyXG4gICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gY2hlY2tDaGFyQ291bnQgSWYgdHJ1ZSwgaWYgXCJvcHRpb25zLm1heENoYXJDb3VudFwiIGlzIGV4Y2VlZGVkIHdoZW4gXCJlbGVtZW50XCIgaXMgYWRkZWQsIG51bGwgaXMgcmV0dXJuZWQgd2l0aG91dCBhZGRpdGlvbi5cclxuICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fE5vZGV8bnVsbH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBpbnNlcnROb2RlOiBmdW5jdGlvbiAob05vZGUsIGFmdGVyTm9kZSwgY2hlY2tDaGFyQ291bnQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNSZWFkT25seSB8fCAoY2hlY2tDaGFyQ291bnQgJiYgIXRoaXMuY2hlY2tDaGFyQ291bnQob05vZGUsIG51bGwpKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGZyZWVGb3JtYXQgPSB1dGlsLmdldEZyZWVGb3JtYXRFbGVtZW50KHRoaXMuZ2V0U2VsZWN0aW9uTm9kZSgpLCBudWxsKTtcclxuICAgICAgICAgICAgY29uc3QgaXNGb3JtYXRzID0gKCFmcmVlRm9ybWF0ICYmICh1dGlsLmlzRm9ybWF0RWxlbWVudChvTm9kZSkgfHwgdXRpbC5pc1JhbmdlRm9ybWF0RWxlbWVudChvTm9kZSkpKSB8fCB1dGlsLmlzQ29tcG9uZW50KG9Ob2RlKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghYWZ0ZXJOb2RlICYmIChpc0Zvcm1hdHMgfHwgdXRpbC5pc0NvbXBvbmVudChvTm9kZSkgfHwgdXRpbC5pc01lZGlhKG9Ob2RlKSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHIgPSB0aGlzLnJlbW92ZU5vZGUoKTtcclxuICAgICAgICAgICAgICAgIGlmIChyLmNvbnRhaW5lci5ub2RlVHlwZSA9PT0gMyB8fCB1dGlsLmlzQnJlYWsoci5jb250YWluZXIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVwdGhGb3JtYXQgPSB1dGlsLmdldFBhcmVudEVsZW1lbnQoci5jb250YWluZXIsIGZ1bmN0aW9uIChjdXJyZW50KSB7IHJldHVybiB0aGlzLmlzUmFuZ2VGb3JtYXRFbGVtZW50KGN1cnJlbnQpIHx8IHRoaXMuaXNMaXN0Q2VsbChjdXJyZW50KTsgfS5iaW5kKHV0aWwpKTtcclxuICAgICAgICAgICAgICAgICAgICBhZnRlck5vZGUgPSB1dGlsLnNwbGl0RWxlbWVudChyLmNvbnRhaW5lciwgci5vZmZzZXQsICFkZXB0aEZvcm1hdCA/IDAgOiB1dGlsLmdldEVsZW1lbnREZXB0aChkZXB0aEZvcm1hdCkgKyAxKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYWZ0ZXJOb2RlKSBhZnRlck5vZGUgPSBhZnRlck5vZGUucHJldmlvdXNTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCByYW5nZSA9ICghYWZ0ZXJOb2RlICYmICFpc0Zvcm1hdHMpID8gdGhpcy5nZXRSYW5nZV9hZGRMaW5lKHRoaXMuZ2V0UmFuZ2UoKSwgbnVsbCkgOiB0aGlzLmdldFJhbmdlKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbW1vbkNvbiA9IHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyO1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydE9mZiA9IHJhbmdlLnN0YXJ0T2Zmc2V0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmRPZmYgPSByYW5nZS5lbmRPZmZzZXQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdFJhbmdlID0gcmFuZ2Uuc3RhcnRDb250YWluZXIgPT09IGNvbW1vbkNvbiAmJiB1dGlsLmlzRm9ybWF0RWxlbWVudChjb21tb25Db24pO1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydENvbiA9IGZvcm1hdFJhbmdlID8gKGNvbW1vbkNvbi5jaGlsZE5vZGVzW3N0YXJ0T2ZmXSB8fCBjb21tb25Db24uY2hpbGROb2Rlc1swXSkgOiByYW5nZS5zdGFydENvbnRhaW5lcjtcclxuICAgICAgICAgICAgY29uc3QgZW5kQ29uID0gZm9ybWF0UmFuZ2UgPyAoY29tbW9uQ29uLmNoaWxkTm9kZXNbZW5kT2ZmXSB8fCBjb21tb25Db24uY2hpbGROb2Rlc1tjb21tb25Db24uY2hpbGROb2Rlcy5sZW5ndGggLSAxXSkgOiByYW5nZS5lbmRDb250YWluZXI7XHJcbiAgICAgICAgICAgIGxldCBwYXJlbnROb2RlLCBvcmlnaW5BZnRlciA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICBpZiAoIWFmdGVyTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgcGFyZW50Tm9kZSA9IHN0YXJ0Q29uO1xyXG4gICAgICAgICAgICAgICAgaWYgKHN0YXJ0Q29uLm5vZGVUeXBlID09PSAzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZSA9IHN0YXJ0Q29uLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLyoqIE5vIFNlbGVjdCByYW5nZSBub2RlICovXHJcbiAgICAgICAgICAgICAgICBpZiAocmFuZ2UuY29sbGFwc2VkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1vbkNvbi5ub2RlVHlwZSA9PT0gMykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tbW9uQ29uLnRleHRDb250ZW50Lmxlbmd0aCA+IGVuZE9mZikgYWZ0ZXJOb2RlID0gY29tbW9uQ29uLnNwbGl0VGV4dChlbmRPZmYpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGFmdGVyTm9kZSA9IGNvbW1vbkNvbi5uZXh0U2libGluZztcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXV0aWwuaXNCcmVhayhwYXJlbnROb2RlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGMgPSBwYXJlbnROb2RlLmNoaWxkTm9kZXNbc3RhcnRPZmZdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9jdXNOb2RlID0gKGMgJiYgYy5ub2RlVHlwZSA9PT0gMyAmJiB1dGlsLm9ubHlaZXJvV2lkdGhTcGFjZShjKSAmJiB1dGlsLmlzQnJlYWsoYy5uZXh0U2libGluZykpID8gYy5uZXh0U2libGluZyA6IGM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9jdXNOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmb2N1c05vZGUubmV4dFNpYmxpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZS5yZW1vdmVDaGlsZChmb2N1c05vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlck5vZGUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyTm9kZSA9ICh1dGlsLmlzQnJlYWsoZm9jdXNOb2RlKSAmJiAhdXRpbC5pc0JyZWFrKG9Ob2RlKSkgPyBmb2N1c05vZGUgOiBmb2N1c05vZGUubmV4dFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlck5vZGUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJOb2RlID0gcGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE5vZGUgPSBwYXJlbnROb2RlLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgeyAvKiogU2VsZWN0IHJhbmdlIG5vZGVzICovXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNTYW1lQ29udGFpbmVyID0gc3RhcnRDb24gPT09IGVuZENvbjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzU2FtZUNvbnRhaW5lcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0VkZ2VQb2ludChlbmRDb24sIGVuZE9mZikpIGFmdGVyTm9kZSA9IGVuZENvbi5uZXh0U2libGluZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBhZnRlck5vZGUgPSBlbmRDb24uc3BsaXRUZXh0KGVuZE9mZik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVtb3ZlTm9kZSA9IHN0YXJ0Q29uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNFZGdlUG9pbnQoc3RhcnRDb24sIHN0YXJ0T2ZmKSkgcmVtb3ZlTm9kZSA9IHN0YXJ0Q29uLnNwbGl0VGV4dChzdGFydE9mZik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnROb2RlLnJlbW92ZUNoaWxkKHJlbW92ZU5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50Tm9kZS5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMCAmJiBpc0Zvcm1hdHMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE5vZGUuaW5uZXJIVE1MID0gJzxicj4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZW1vdmVkVGFnID0gdGhpcy5yZW1vdmVOb2RlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHJlbW92ZWRUYWcuY29udGFpbmVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2Q29udGFpbmVyID0gcmVtb3ZlZFRhZy5wcmV2Q29udGFpbmVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGFpbmVyICYmIGNvbnRhaW5lci5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMCAmJiBpc0Zvcm1hdHMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzRm9ybWF0RWxlbWVudChjb250YWluZXIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLmlubmVySFRNTCA9ICc8YnI+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodXRpbC5pc1JhbmdlRm9ybWF0RWxlbWVudChjb250YWluZXIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLmlubmVySFRNTCA9ICc8JyArIG9wdGlvbnMuZGVmYXVsdFRhZyArICc+PGJyPjwvJyArIG9wdGlvbnMuZGVmYXVsdFRhZyArICc+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0Zvcm1hdHMgJiYgcHJldkNvbnRhaW5lcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZSA9IHByZXZDb250YWluZXIubm9kZVR5cGUgPT09IDMgPyBwcmV2Q29udGFpbmVyLnBhcmVudE5vZGUgOiBwcmV2Q29udGFpbmVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudE5vZGUuY29udGFpbnMoY29udGFpbmVyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzYW1lUGFyZW50ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlck5vZGUgPSBjb250YWluZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGFmdGVyTm9kZS5wYXJlbnROb2RlICE9PSBwYXJlbnROb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyTm9kZSA9IGFmdGVyTm9kZS5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1lUGFyZW50ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzYW1lUGFyZW50ICYmIGNvbnRhaW5lciA9PT0gcHJldkNvbnRhaW5lcikgYWZ0ZXJOb2RlID0gYWZ0ZXJOb2RlLm5leHRTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlck5vZGUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJOb2RlID0gaXNGb3JtYXRzID8gZW5kQ29uIDogY29udGFpbmVyID09PSBwcmV2Q29udGFpbmVyID8gY29udGFpbmVyLm5leHRTaWJsaW5nIDogY29udGFpbmVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZSA9ICghYWZ0ZXJOb2RlIHx8ICFhZnRlck5vZGUucGFyZW50Tm9kZSkgPyBjb21tb25Db24gOiBhZnRlck5vZGUucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGFmdGVyTm9kZSAmJiAhdXRpbC5pc0Zvcm1hdEVsZW1lbnQoYWZ0ZXJOb2RlKSAmJiBhZnRlck5vZGUucGFyZW50Tm9kZSAhPT0gY29tbW9uQ29uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlck5vZGUgPSBhZnRlck5vZGUucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBoYXMgYWZ0ZXJOb2RlXHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcGFyZW50Tm9kZSA9IGFmdGVyTm9kZS5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgYWZ0ZXJOb2RlID0gYWZ0ZXJOb2RlLm5leHRTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgb3JpZ2luQWZ0ZXIgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyAtLS0gaW5zZXJ0IG5vZGUgLS0tXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodXRpbC5pc1d5c2l3eWdEaXYoYWZ0ZXJOb2RlKSB8fCBwYXJlbnROb2RlID09PSBjb250ZXh0LmVsZW1lbnQud3lzaXd5Zy5wYXJlbnROb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZSA9IGNvbnRleHQuZWxlbWVudC53eXNpd3lnO1xyXG4gICAgICAgICAgICAgICAgICAgIGFmdGVyTm9kZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNGb3JtYXRFbGVtZW50KG9Ob2RlKSB8fCB1dGlsLmlzUmFuZ2VGb3JtYXRFbGVtZW50KG9Ob2RlKSB8fCAoIXV0aWwuaXNMaXN0Q2VsbChwYXJlbnROb2RlKSAmJiB1dGlsLmlzQ29tcG9uZW50KG9Ob2RlKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBvbGRQYXJlbnQgPSBwYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzTGlzdChhZnRlck5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE5vZGUgPSBhZnRlck5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyTm9kZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh1dGlsLmlzTGlzdENlbGwoYWZ0ZXJOb2RlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnROb2RlID0gYWZ0ZXJOb2RlLnByZXZpb3VzRWxlbWVudFNpYmxpbmcgfHwgYWZ0ZXJOb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIW9yaWdpbkFmdGVyICYmICFhZnRlck5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgciA9IHRoaXMucmVtb3ZlTm9kZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSByLmNvbnRhaW5lci5ub2RlVHlwZSA9PT0gMyA/ICh1dGlsLmlzTGlzdENlbGwodXRpbC5nZXRGb3JtYXRFbGVtZW50KHIuY29udGFpbmVyLCBudWxsKSkgPyByLmNvbnRhaW5lciA6ICh1dGlsLmdldEZvcm1hdEVsZW1lbnQoci5jb250YWluZXIsIG51bGwpIHx8IHIuY29udGFpbmVyLnBhcmVudE5vZGUpKSA6IHIuY29udGFpbmVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByYW5nZUNvbiA9IHV0aWwuaXNXeXNpd3lnRGl2KGNvbnRhaW5lcikgfHwgdXRpbC5pc1JhbmdlRm9ybWF0RWxlbWVudChjb250YWluZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnROb2RlID0gcmFuZ2VDb24gPyBjb250YWluZXIgOiBjb250YWluZXIucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJOb2RlID0gcmFuZ2VDb24gPyBudWxsIDogY29udGFpbmVyLm5leHRTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9sZFBhcmVudC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMCAmJiBwYXJlbnROb2RlICE9PSBvbGRQYXJlbnQpIHV0aWwucmVtb3ZlSXRlbShvbGRQYXJlbnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChpc0Zvcm1hdHMgJiYgIWZyZWVGb3JtYXQgJiYgIXV0aWwuaXNSYW5nZUZvcm1hdEVsZW1lbnQocGFyZW50Tm9kZSkgJiYgIXV0aWwuaXNMaXN0Q2VsbChwYXJlbnROb2RlKSAmJiAhdXRpbC5pc1d5c2l3eWdEaXYocGFyZW50Tm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBhZnRlck5vZGUgPSBwYXJlbnROb2RlLm5leHRFbGVtZW50U2libGluZztcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnROb2RlID0gcGFyZW50Tm9kZS5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzV3lzaXd5Z0RpdihwYXJlbnROb2RlKSAmJiAob05vZGUubm9kZVR5cGUgPT09IDMgfHwgdXRpbC5pc0JyZWFrKG9Ob2RlKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmTm9kZSA9IHV0aWwuY3JlYXRlRWxlbWVudChvcHRpb25zLmRlZmF1bHRUYWcpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZOb2RlLmFwcGVuZENoaWxkKG9Ob2RlKTtcclxuICAgICAgICAgICAgICAgICAgICBvTm9kZSA9IGZOb2RlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG9Ob2RlLCBwYXJlbnROb2RlID09PSBhZnRlck5vZGUgPyBwYXJlbnROb2RlLmxhc3RDaGlsZCA6IGFmdGVyTm9kZSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHBhcmVudE5vZGUuYXBwZW5kQ2hpbGQob05vZGUpO1xyXG4gICAgICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCh1dGlsLmlzRm9ybWF0RWxlbWVudChvTm9kZSkgfHwgdXRpbC5pc0NvbXBvbmVudChvTm9kZSkpICYmIHN0YXJ0Q29uID09PSBlbmRDb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjSXRlbSA9IHV0aWwuZ2V0Rm9ybWF0RWxlbWVudChjb21tb25Db24sIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjSXRlbSAmJiBjSXRlbS5ub2RlVHlwZSA9PT0gMSAmJiB1dGlsLmlzRW1wdHlMaW5lKGNJdGVtKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUl0ZW0oY0l0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZnJlZUZvcm1hdCAmJiAodXRpbC5pc0Zvcm1hdEVsZW1lbnQob05vZGUpIHx8IHV0aWwuaXNSYW5nZUZvcm1hdEVsZW1lbnQob05vZGUpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG9Ob2RlID0gdGhpcy5fc2V0SW50b0ZyZWVGb3JtYXQob05vZGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICghdXRpbC5pc0NvbXBvbmVudChvTm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgb2Zmc2V0ID0gMTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAob05vZGUubm9kZVR5cGUgPT09IDMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXMgPSBvTm9kZS5wcmV2aW91c1NpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSBvTm9kZS5uZXh0U2libGluZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNUZXh0ID0gKCFwcmV2aW91cyB8fCAgcHJldmlvdXMubm9kZVR5cGUgPT09IDEgfHwgdXRpbC5vbmx5WmVyb1dpZHRoU3BhY2UocHJldmlvdXMpKSA/ICcnIDogcHJldmlvdXMudGV4dENvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRUZXh0ID0gKCFuZXh0IHx8IG5leHQubm9kZVR5cGUgPT09IDEgfHwgdXRpbC5vbmx5WmVyb1dpZHRoU3BhY2UobmV4dCkpID8gJycgOiBuZXh0LnRleHRDb250ZW50O1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldmlvdXMgJiYgcHJldmlvdXNUZXh0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9Ob2RlLnRleHRDb250ZW50ID0gcHJldmlvdXNUZXh0ICsgb05vZGUudGV4dENvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUl0ZW0ocHJldmlvdXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0ICYmIG5leHQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb05vZGUudGV4dENvbnRlbnQgKz0gbmV4dFRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUl0ZW0obmV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1JhbmdlID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyOiBvTm9kZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0T2Zmc2V0OiBwcmV2aW91c1RleHQubGVuZ3RoLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kT2Zmc2V0OiBvTm9kZS50ZXh0Q29udGVudC5sZW5ndGggLSBuZXh0VGV4dC5sZW5ndGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2Uob05vZGUsIG5ld1JhbmdlLnN0YXJ0T2Zmc2V0LCBvTm9kZSwgbmV3UmFuZ2UuZW5kT2Zmc2V0KTtcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3UmFuZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghdXRpbC5pc0JyZWFrKG9Ob2RlKSAmJiB1dGlsLmlzRm9ybWF0RWxlbWVudChwYXJlbnROb2RlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgemVyb1dpZHRoID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvTm9kZS5wcmV2aW91c1NpYmxpbmcgfHwgdXRpbC5pc0JyZWFrKG9Ob2RlLnByZXZpb3VzU2libGluZykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHplcm9XaWR0aCA9IHV0aWwuY3JlYXRlVGV4dE5vZGUodXRpbC56ZXJvV2lkdGhTcGFjZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvTm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh6ZXJvV2lkdGgsIG9Ob2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvTm9kZS5uZXh0U2libGluZyB8fCB1dGlsLmlzQnJlYWsob05vZGUubmV4dFNpYmxpbmcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZXJvV2lkdGggPSB1dGlsLmNyZWF0ZVRleHROb2RlKHV0aWwuemVyb1dpZHRoU3BhY2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb05vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoemVyb1dpZHRoLCBvTm9kZS5uZXh0U2libGluZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXRpbC5faXNJZ25vcmVOb2RlQ2hhbmdlKG9Ob2RlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb05vZGUgPSBvTm9kZS5uZXh0U2libGluZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFJhbmdlKG9Ob2RlLCBvZmZzZXQsIG9Ob2RlLCBvZmZzZXQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIGhpc3Rvcnkgc3RhY2tcclxuICAgICAgICAgICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoKHRydWUpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiBvTm9kZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9zZXRJbnRvRnJlZUZvcm1hdDogZnVuY3Rpb24gKG9Ob2RlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSBvTm9kZS5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICBsZXQgb05vZGVDaGlsZHJlbiwgbGFzdE9Ob2RlO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgd2hpbGUgKHV0aWwuaXNGb3JtYXRFbGVtZW50KG9Ob2RlKSB8fCB1dGlsLmlzUmFuZ2VGb3JtYXRFbGVtZW50KG9Ob2RlKSkge1xyXG4gICAgICAgICAgICAgICAgb05vZGVDaGlsZHJlbiA9IG9Ob2RlLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgICAgICAgICBsYXN0T05vZGUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB3aGlsZSAob05vZGVDaGlsZHJlblswXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxhc3RPTm9kZSA9IG9Ob2RlQ2hpbGRyZW5bMF07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNGb3JtYXRFbGVtZW50KGxhc3RPTm9kZSkgfHwgdXRpbC5pc1JhbmdlRm9ybWF0RWxlbWVudChsYXN0T05vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldEludG9GcmVlRm9ybWF0KGxhc3RPTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb05vZGUucGFyZW50Tm9kZSkgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9Ob2RlQ2hpbGRyZW4gPSBvTm9kZS5jaGlsZE5vZGVzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobGFzdE9Ob2RlLCBvTm9kZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGlmIChvTm9kZS5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMCkgdXRpbC5yZW1vdmVJdGVtKG9Ob2RlKTtcclxuICAgICAgICAgICAgICAgIG9Ob2RlID0gdXRpbC5jcmVhdGVFbGVtZW50KCdCUicpO1xyXG4gICAgICAgICAgICAgICAgcGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUob05vZGUsIGxhc3RPTm9kZS5uZXh0U2libGluZyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBvTm9kZTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gRGVsZXRlIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgbm9kZXMgYW5kIHJlc2V0IHNlbGVjdGlvbiByYW5nZVxyXG4gICAgICAgICAqIFJldHVybnMge2NvbnRhaW5lcjogXCJ0aGUgbGFzdCBlbGVtZW50IGFmdGVyIGRlbGV0aW9uXCIsIG9mZnNldDogXCJvZmZzZXRcIiwgcHJldkNvbnRhaW5lcjogXCJwcmV2aW91c0VsZW1lbnRTaWJsaW5nIE9mIHRoZSBkZWxldGVkIGFyZWFcIn1cclxuICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHJlbW92ZU5vZGU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5fcmVzZXRSYW5nZVRvVGV4dE5vZGUoKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5nZXRSYW5nZSgpO1xyXG4gICAgICAgICAgICBsZXQgY29udGFpbmVyLCBvZmZzZXQgPSAwO1xyXG4gICAgICAgICAgICBsZXQgc3RhcnRDb24gPSByYW5nZS5zdGFydENvbnRhaW5lcjtcclxuICAgICAgICAgICAgbGV0IGVuZENvbiA9IHJhbmdlLmVuZENvbnRhaW5lcjtcclxuICAgICAgICAgICAgbGV0IHN0YXJ0T2ZmID0gcmFuZ2Uuc3RhcnRPZmZzZXQ7XHJcbiAgICAgICAgICAgIGxldCBlbmRPZmYgPSByYW5nZS5lbmRPZmZzZXQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbW1vbkNvbiA9IChyYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lci5ub2RlVHlwZSA9PT0gMyAmJiByYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lci5wYXJlbnROb2RlID09PSBzdGFydENvbi5wYXJlbnROb2RlKSA/IHN0YXJ0Q29uLnBhcmVudE5vZGUgOiByYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lcjtcclxuICAgICAgICAgICAgaWYgKGNvbW1vbkNvbiA9PT0gc3RhcnRDb24gJiYgY29tbW9uQ29uID09PSBlbmRDb24pIHtcclxuICAgICAgICAgICAgICAgIHN0YXJ0Q29uID0gY29tbW9uQ29uLmNoaWxkcmVuW3N0YXJ0T2ZmXTtcclxuICAgICAgICAgICAgICAgIGVuZENvbiA9IGNvbW1vbkNvbi5jaGlsZHJlbltlbmRPZmZdO1xyXG4gICAgICAgICAgICAgICAgc3RhcnRPZmYgPSBlbmRPZmYgPSAwO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgYmVmb3JlTm9kZSA9IG51bGw7XHJcbiAgICAgICAgICAgIGxldCBhZnRlck5vZGUgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgY2hpbGROb2RlcyA9IHV0aWwuZ2V0TGlzdENoaWxkTm9kZXMoY29tbW9uQ29uLCBudWxsKTtcclxuICAgICAgICAgICAgbGV0IHN0YXJ0SW5kZXggPSB1dGlsLmdldEFycmF5SW5kZXgoY2hpbGROb2Rlcywgc3RhcnRDb24pO1xyXG4gICAgICAgICAgICBsZXQgZW5kSW5kZXggPSB1dGlsLmdldEFycmF5SW5kZXgoY2hpbGROb2RlcywgZW5kQ29uKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjaGlsZE5vZGVzLmxlbmd0aCA+IDAgJiYgc3RhcnRJbmRleCA+IC0xICYmIGVuZEluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBzdGFydEluZGV4ICsgMSwgc3RhcnROb2RlID0gc3RhcnRDb247IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkTm9kZXNbaV0gPT09IHN0YXJ0Tm9kZS5wYXJlbnROb2RlICYmIGNoaWxkTm9kZXNbaV0uZmlyc3RDaGlsZCA9PT0gc3RhcnROb2RlICYmIHN0YXJ0T2ZmID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXggPSBpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydE5vZGUgPSBzdGFydE5vZGUucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBlbmRJbmRleCAtIDEsIGVuZE5vZGUgPSBlbmRDb247IGkgPiBzdGFydEluZGV4OyBpLS0pIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGROb2Rlc1tpXSA9PT0gZW5kTm9kZS5wYXJlbnROb2RlICYmIGNoaWxkTm9kZXNbaV0ubm9kZVR5cGUgPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGROb2Rlcy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZE5vZGUgPSBlbmROb2RlLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC0tZW5kSW5kZXg7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkTm9kZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNGb3JtYXRFbGVtZW50KGNvbW1vbkNvbikgfHwgdXRpbC5pc1JhbmdlRm9ybWF0RWxlbWVudChjb21tb25Db24pIHx8IHV0aWwuaXNXeXNpd3lnRGl2KGNvbW1vbkNvbikgfHwgdXRpbC5pc0JyZWFrKGNvbW1vbkNvbikgfHwgdXRpbC5pc01lZGlhKGNvbW1vbkNvbikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogY29tbW9uQ29uLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb21tb25Db24ubm9kZVR5cGUgPT09IDMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogY29tbW9uQ29uLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiBlbmRPZmZcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGROb2Rlcy5wdXNoKGNvbW1vbkNvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRDb24gPSBlbmRDb24gPSBjb21tb25Db247XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0Q29uID0gZW5kQ29uID0gY2hpbGROb2Rlc1swXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodXRpbC5pc0JyZWFrKHN0YXJ0Q29uKSB8fCB1dGlsLm9ubHlaZXJvV2lkdGhTcGFjZShzdGFydENvbikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogdXRpbC5pc01lZGlhKGNvbW1vbkNvbikgPyBjb21tb25Db24gOiBzdGFydENvbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBzdGFydEluZGV4ID0gZW5kSW5kZXggPSAwO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmdW5jdGlvbiByZW1vdmUgKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdCA9IHV0aWwuZ2V0Rm9ybWF0RWxlbWVudChpdGVtLCBudWxsKTtcclxuICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlSXRlbShpdGVtKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZih1dGlsLmlzTGlzdENlbGwoZm9ybWF0KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpc3QgPSB1dGlsLmdldEFycmF5SXRlbShmb3JtYXQuY2hpbGRyZW4sIHV0aWwuaXNMaXN0LCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBsaXN0LmZpcnN0RWxlbWVudENoaWxkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGNoaWxkLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChjaGlsZHJlblswXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0Lmluc2VydEJlZm9yZShjaGlsZHJlblswXSwgbGlzdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtQWxsUGFyZW50cyhjaGlsZCwgbnVsbCwgbnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gc3RhcnRJbmRleDsgaSA8PSBlbmRJbmRleDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gY2hpbGROb2Rlc1tpXTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5sZW5ndGggPT09IDAgfHwgKGl0ZW0ubm9kZVR5cGUgPT09IDMgJiYgaXRlbS5kYXRhID09PSB1bmRlZmluZWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChpdGVtID09PSBzdGFydENvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGFydENvbi5ub2RlVHlwZSA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXRpbC5pc0NvbXBvbmVudChzdGFydENvbikpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGJlZm9yZU5vZGUgPSB1dGlsLmNyZWF0ZVRleHROb2RlKHN0YXJ0Q29uLnRleHRDb250ZW50KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbSA9PT0gZW5kQ29uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVOb2RlID0gdXRpbC5jcmVhdGVUZXh0Tm9kZShzdGFydENvbi5zdWJzdHJpbmdEYXRhKDAsIHN0YXJ0T2ZmKSArIGVuZENvbi5zdWJzdHJpbmdEYXRhKGVuZE9mZiwgKGVuZENvbi5sZW5ndGggLSBlbmRPZmYpKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBzdGFydE9mZjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZU5vZGUgPSB1dGlsLmNyZWF0ZVRleHROb2RlKHN0YXJ0Q29uLnN1YnN0cmluZ0RhdGEoMCwgc3RhcnRPZmYpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJlZm9yZU5vZGUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydENvbi5kYXRhID0gYmVmb3JlTm9kZS5kYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZShzdGFydENvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbSA9PT0gZW5kQ29uKSBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbSA9PT0gZW5kQ29uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVuZENvbi5ub2RlVHlwZSA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXRpbC5pc0NvbXBvbmVudChlbmRDb24pKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBhZnRlck5vZGUgPSB1dGlsLmNyZWF0ZVRleHROb2RlKGVuZENvbi50ZXh0Q29udGVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJOb2RlID0gdXRpbC5jcmVhdGVUZXh0Tm9kZShlbmRDb24uc3Vic3RyaW5nRGF0YShlbmRPZmYsIChlbmRDb24ubGVuZ3RoIC0gZW5kT2ZmKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFmdGVyTm9kZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZENvbi5kYXRhID0gYWZ0ZXJOb2RlLmRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlKGVuZENvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZW1vdmUoaXRlbSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnRhaW5lciA9IGVuZENvbiAmJiBlbmRDb24ucGFyZW50Tm9kZSA/IGVuZENvbiA6IHN0YXJ0Q29uICYmIHN0YXJ0Q29uLnBhcmVudE5vZGUgPyBzdGFydENvbiA6IChyYW5nZS5lbmRDb250YWluZXIgfHwgcmFuZ2Uuc3RhcnRDb250YWluZXIpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYgKCF1dGlsLmlzV3lzaXd5Z0Rpdihjb250YWluZXIpICYmIGNvbnRhaW5lci5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmMgPSB1dGlsLnJlbW92ZUl0ZW1BbGxQYXJlbnRzKGNvbnRhaW5lciwgZnVuY3Rpb24gKGN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0NvbXBvbmVudChjdXJyZW50KSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRleHQgPSBjdXJyZW50LnRleHRDb250ZW50O1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0Lmxlbmd0aCA9PT0gMCB8fCAvXihcXG58XFx1MjAwQikrJC8udGVzdCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIH0uYmluZCh1dGlsKSwgbnVsbCk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGlmIChyYykgY29udGFpbmVyID0gcmMuc2MgfHwgcmMuZWMgfHwgY29udGV4dC5lbGVtZW50Lnd5c2l3eWc7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIHNldCByYW5nZVxyXG4gICAgICAgICAgICB0aGlzLnNldFJhbmdlKGNvbnRhaW5lciwgb2Zmc2V0LCBjb250YWluZXIsIG9mZnNldCk7XHJcbiAgICAgICAgICAgIC8vIGhpc3Rvcnkgc3RhY2tcclxuICAgICAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2godHJ1ZSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgY29udGFpbmVyOiBjb250YWluZXIsXHJcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IG9mZnNldCxcclxuICAgICAgICAgICAgICAgIHByZXZDb250YWluZXI6IHN0YXJ0Q29uICYmIHN0YXJ0Q29uLnBhcmVudE5vZGUgPyBzdGFydENvbiA6IG51bGxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQXBwZW5kZWQgYWxsIHNlbGVjdGVkIGZvcm1hdCBFbGVtZW50IHRvIHRoZSBhcmd1bWVudCBlbGVtZW50IGFuZCBpbnNlcnRcclxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJhbmdlRWxlbWVudCBFbGVtZW50IG9mIHdyYXAgdGhlIGFyZ3VtZW50cyAoQkxPQ0tRVU9URS4uLilcclxuICAgICAgICAgKi9cclxuICAgICAgICBhcHBseVJhbmdlRm9ybWF0RWxlbWVudDogZnVuY3Rpb24gKHJhbmdlRWxlbWVudCkge1xyXG4gICAgICAgICAgICB0aGlzLmdldFJhbmdlX2FkZExpbmUodGhpcy5nZXRSYW5nZSgpLCBudWxsKTtcclxuICAgICAgICAgICAgY29uc3QgcmFuZ2VMaW5lcyA9IHRoaXMuZ2V0U2VsZWN0ZWRFbGVtZW50c0FuZENvbXBvbmVudHMoZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAoIXJhbmdlTGluZXMgfHwgcmFuZ2VMaW5lcy5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGxpbmVzTG9vcDpcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHJhbmdlTGluZXMubGVuZ3RoLCBsaW5lLCBuZXN0ZWQsIGZFbCwgbEVsLCBmLCBsOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGxpbmUgPSByYW5nZUxpbmVzW2ldO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF1dGlsLmlzTGlzdENlbGwobGluZSkpIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAgICAgICAgIG5lc3RlZCA9IGxpbmUubGFzdEVsZW1lbnRDaGlsZDtcclxuICAgICAgICAgICAgICAgIGlmIChuZXN0ZWQgJiYgdXRpbC5pc0xpc3RDZWxsKGxpbmUubmV4dEVsZW1lbnRTaWJsaW5nKSAmJiByYW5nZUxpbmVzLmluZGV4T2YobGluZS5uZXh0RWxlbWVudFNpYmxpbmcpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBsRWwgPSBuZXN0ZWQubGFzdEVsZW1lbnRDaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmFuZ2VMaW5lcy5pbmRleE9mKGxFbCkgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbGlzdCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgobGlzdCA9IGxFbC5sYXN0RWxlbWVudENoaWxkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNMaXN0KGxpc3QpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmdlTGluZXMuaW5kZXhPZihsaXN0Lmxhc3RFbGVtZW50Q2hpbGQpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEVsID0gbGlzdC5sYXN0RWxlbWVudENoaWxkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIGxpbmVzTG9vcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZFbCA9IG5lc3RlZC5maXJzdEVsZW1lbnRDaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZiA9IHJhbmdlTGluZXMuaW5kZXhPZihmRWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsID0gcmFuZ2VMaW5lcy5pbmRleE9mKGxFbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlTGluZXMuc3BsaWNlKGYsIChsIC0gZikgKyAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVuID0gcmFuZ2VMaW5lcy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGxhc3QgID0gcmFuZ2VMaW5lc1tyYW5nZUxpbmVzLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgICAgICBsZXQgc3RhbmRUYWcsIGJlZm9yZVRhZywgcEVsZW1lbnQ7XHJcblxyXG4gICAgICAgICAgICBpZiAodXRpbC5pc1JhbmdlRm9ybWF0RWxlbWVudChsYXN0KSB8fCB1dGlsLmlzRm9ybWF0RWxlbWVudChsYXN0KSkge1xyXG4gICAgICAgICAgICAgICAgc3RhbmRUYWcgPSBsYXN0O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc3RhbmRUYWcgPSB1dGlsLmdldFJhbmdlRm9ybWF0RWxlbWVudChsYXN0LCBudWxsKSB8fCB1dGlsLmdldEZvcm1hdEVsZW1lbnQobGFzdCwgbnVsbCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh1dGlsLmlzQ2VsbChzdGFuZFRhZykpIHtcclxuICAgICAgICAgICAgICAgIGJlZm9yZVRhZyA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBwRWxlbWVudCA9IHN0YW5kVGFnO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYmVmb3JlVGFnID0gc3RhbmRUYWcubmV4dFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICBwRWxlbWVudCA9IHN0YW5kVGFnLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGxldCBwYXJlbnREZXB0aCA9IHV0aWwuZ2V0RWxlbWVudERlcHRoKHN0YW5kVGFnKTtcclxuICAgICAgICAgICAgbGV0IGxpc3RQYXJlbnQgPSBudWxsO1xyXG4gICAgICAgICAgICBjb25zdCBsaW5lQXJyID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IHJlbW92ZUl0ZW1zID0gZnVuY3Rpb24gKHBhcmVudCwgb3JpZ2luLCBiZWZvcmUpIHtcclxuICAgICAgICAgICAgICAgIGxldCBjYyA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50ICE9PSBvcmlnaW4gJiYgIXV0aWwuaXNUYWJsZShvcmlnaW4pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9yaWdpbiAmJiB1dGlsLmdldEVsZW1lbnREZXB0aChwYXJlbnQpID09PSB1dGlsLmdldEVsZW1lbnREZXB0aChvcmlnaW4pKSByZXR1cm4gYmVmb3JlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNjID0gdXRpbC5yZW1vdmVJdGVtQWxsUGFyZW50cyhvcmlnaW4sIG51bGwsIHBhcmVudCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNjID8gY2MuZWMgOiBiZWZvcmU7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gcmFuZ2VMaW5lcy5sZW5ndGgsIGxpbmUsIG9yaWdpblBhcmVudCwgZGVwdGgsIGJlZm9yZSwgbmV4dExpbmUsIG5leHRMaXN0LCBuZXN0ZWQ7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbGluZSA9IHJhbmdlTGluZXNbaV07XHJcbiAgICAgICAgICAgICAgICBvcmlnaW5QYXJlbnQgPSBsaW5lLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgICAgICBpZiAoIW9yaWdpblBhcmVudCB8fCByYW5nZUVsZW1lbnQuY29udGFpbnMob3JpZ2luUGFyZW50KSkgY29udGludWU7XHJcblxyXG4gICAgICAgICAgICAgICAgZGVwdGggPSB1dGlsLmdldEVsZW1lbnREZXB0aChsaW5lKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodXRpbC5pc0xpc3Qob3JpZ2luUGFyZW50KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChsaXN0UGFyZW50ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0TGlzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFBhcmVudCA9IG5leHRMaXN0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVzdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRMaXN0ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RQYXJlbnQgPSBvcmlnaW5QYXJlbnQuY2xvbmVOb2RlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbGluZUFyci5wdXNoKGxpbmUpO1xyXG4gICAgICAgICAgICAgICAgICAgIG5leHRMaW5lID0gcmFuZ2VMaW5lc1tpICsgMV07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpID09PSBsZW4gLSAxIHx8IChuZXh0TGluZSAmJiBuZXh0TGluZS5wYXJlbnROb2RlICE9PSBvcmlnaW5QYXJlbnQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5lc3RlZCBsaXN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0TGluZSAmJiBsaW5lLmNvbnRhaW5zKG5leHRMaW5lLnBhcmVudE5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0TGlzdCA9IG5leHRMaW5lLnBhcmVudE5vZGUuY2xvbmVOb2RlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGxpc3QgPSBvcmlnaW5QYXJlbnQucGFyZW50Tm9kZSwgcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHV0aWwuaXNMaXN0KGxpc3QpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwID0gdXRpbC5jcmVhdGVFbGVtZW50KGxpc3Qubm9kZU5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcC5hcHBlbmRDaGlsZChsaXN0UGFyZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RQYXJlbnQgPSBwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IGxpc3QucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWRnZSA9IHRoaXMuZGV0YWNoUmFuZ2VGb3JtYXRFbGVtZW50KG9yaWdpblBhcmVudCwgbGluZUFyciwgbnVsbCwgdHJ1ZSwgdHJ1ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50RGVwdGggPj0gZGVwdGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudERlcHRoID0gZGVwdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwRWxlbWVudCA9IGVkZ2UuY2M7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVUYWcgPSByZW1vdmVJdGVtcyhwRWxlbWVudCwgb3JpZ2luUGFyZW50LCBlZGdlLmVjKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiZWZvcmVUYWcpIHBFbGVtZW50ID0gYmVmb3JlVGFnLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocEVsZW1lbnQgPT09IGVkZ2UuY2MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZVRhZyA9IGVkZ2UuZWM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwRWxlbWVudCAhPT0gZWRnZS5jYykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlID0gcmVtb3ZlSXRlbXMocEVsZW1lbnQsIGVkZ2UuY2MsIGJlZm9yZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmVmb3JlICE9PSB1bmRlZmluZWQpIGJlZm9yZVRhZyA9IGJlZm9yZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgYmVmb3JlVGFnID0gZWRnZS5jYztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgYyA9IDAsIGNMZW4gPSBlZGdlLnJlbW92ZUFycmF5Lmxlbmd0aDsgYyA8IGNMZW47IGMrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFBhcmVudC5hcHBlbmRDaGlsZChlZGdlLnJlbW92ZUFycmF5W2NdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFuZXN0ZWQpIHJhbmdlRWxlbWVudC5hcHBlbmRDaGlsZChsaXN0UGFyZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRMaXN0KSBlZGdlLnJlbW92ZUFycmF5W2VkZ2UucmVtb3ZlQXJyYXkubGVuZ3RoIC0gMV0uYXBwZW5kQ2hpbGQobmV4dExpc3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0UGFyZW50ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmVzdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50RGVwdGggPj0gZGVwdGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50RGVwdGggPSBkZXB0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcEVsZW1lbnQgPSBvcmlnaW5QYXJlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZVRhZyA9IGxpbmUubmV4dFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHJhbmdlRWxlbWVudC5hcHBlbmRDaGlsZChsaW5lKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBFbGVtZW50ICE9PSBvcmlnaW5QYXJlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlID0gcmVtb3ZlSXRlbXMocEVsZW1lbnQsIG9yaWdpblBhcmVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiZWZvcmUgIT09IHVuZGVmaW5lZCkgYmVmb3JlVGFnID0gYmVmb3JlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5lZmZlY3ROb2RlID0gbnVsbDtcclxuICAgICAgICAgICAgdXRpbC5tZXJnZVNhbWVUYWdzKHJhbmdlRWxlbWVudCwgbnVsbCwgZmFsc2UpO1xyXG4gICAgICAgICAgICB1dGlsLm1lcmdlTmVzdGVkVGFncyhyYW5nZUVsZW1lbnQsIGZ1bmN0aW9uIChjdXJyZW50KSB7IHJldHVybiB0aGlzLmlzTGlzdChjdXJyZW50KTsgfS5iaW5kKHV0aWwpKTtcclxuXHJcbiAgICAgICAgICAgIC8vIE5lc3RlZCBsaXN0XHJcbiAgICAgICAgICAgIGlmIChiZWZvcmVUYWcgJiYgdXRpbC5nZXRFbGVtZW50RGVwdGgoYmVmb3JlVGFnKSA+IDAgJiYgKHV0aWwuaXNMaXN0KGJlZm9yZVRhZy5wYXJlbnROb2RlKSB8fCB1dGlsLmlzTGlzdChiZWZvcmVUYWcucGFyZW50Tm9kZS5wYXJlbnROb2RlKSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRlcHRoRm9ybWF0ID0gdXRpbC5nZXRQYXJlbnRFbGVtZW50KGJlZm9yZVRhZywgZnVuY3Rpb24gKGN1cnJlbnQpIHsgcmV0dXJuIHRoaXMuaXNSYW5nZUZvcm1hdEVsZW1lbnQoY3VycmVudCkgJiYgIXRoaXMuaXNMaXN0KGN1cnJlbnQpOyB9LmJpbmQodXRpbCkpO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3BsaXRSYW5nZSA9IHV0aWwuc3BsaXRFbGVtZW50KGJlZm9yZVRhZywgbnVsbCwgIWRlcHRoRm9ybWF0ID8gMCA6IHV0aWwuZ2V0RWxlbWVudERlcHRoKGRlcHRoRm9ybWF0KSArIDEpO1xyXG4gICAgICAgICAgICAgICAgc3BsaXRSYW5nZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShyYW5nZUVsZW1lbnQsIHNwbGl0UmFuZ2UpO1xyXG4gICAgICAgICAgICB9IGVsc2UgeyAvLyBiYXNpY1xyXG4gICAgICAgICAgICAgICAgcEVsZW1lbnQuaW5zZXJ0QmVmb3JlKHJhbmdlRWxlbWVudCwgYmVmb3JlVGFnKTtcclxuICAgICAgICAgICAgICAgIHJlbW92ZUl0ZW1zKHJhbmdlRWxlbWVudCwgYmVmb3JlVGFnKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgZWRnZSA9IHV0aWwuZ2V0RWRnZUNoaWxkTm9kZXMocmFuZ2VFbGVtZW50LmZpcnN0RWxlbWVudENoaWxkLCByYW5nZUVsZW1lbnQubGFzdEVsZW1lbnRDaGlsZCk7XHJcbiAgICAgICAgICAgIGlmIChyYW5nZUxpbmVzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2UoZWRnZS5zYywgMCwgZWRnZS5lYywgZWRnZS5lYy50ZXh0Q29udGVudC5sZW5ndGgpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRSYW5nZShlZGdlLmVjLCBlZGdlLmVjLnRleHRDb250ZW50Lmxlbmd0aCwgZWRnZS5lYywgZWRnZS5lYy50ZXh0Q29udGVudC5sZW5ndGgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBoaXN0b3J5IHN0YWNrXHJcbiAgICAgICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoKGZhbHNlKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gVGhlIGVsZW1lbnRzIG9mIHRoZSBcInNlbGVjdGVkRm9ybWF0c1wiIGFycmF5IGFyZSBkZXRhY2hlZCBmcm9tIHRoZSBcInJhbmdlRWxlbWVudFwiIGVsZW1lbnQuIChcIkxJXCIgdGFncyBhcmUgY29udmVydGVkIHRvIFwiUFwiIHRhZ3MpXHJcbiAgICAgICAgICogV2hlbiBcInNlbGVjdGVkRm9ybWF0c1wiIGlzIG51bGwsIGFsbCBlbGVtZW50cyBhcmUgZGV0YWNoZWQgYW5kIHJldHVybiB7Y2M6IHBhcmVudE5vZGUsIHNjOiBuZXh0U2libGluZywgZWM6IHByZXZpb3VzU2libGluZywgcmVtb3ZlQXJyYXk6IFtBcnJheSBvZiByZW1vdmVkIGVsZW1lbnRzXX0uXHJcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSByYW5nZUVsZW1lbnQgUmFuZ2UgZm9ybWF0IGVsZW1lbnQgKFBSRSwgQkxPQ0tRVU9URSwgT0wsIFVMLi4uKVxyXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl8bnVsbH0gc2VsZWN0ZWRGb3JtYXRzIEFycmF5IG9mIGZvcm1hdCBlbGVtZW50cyAoUCwgRElWLCBMSS4uLikgdG8gcmVtb3ZlLlxyXG4gICAgICAgICAqIElmIG51bGwsIEFwcGxpZXMgdG8gYWxsIGVsZW1lbnRzIGFuZCByZXR1cm4ge2NjOiBwYXJlbnROb2RlLCBzYzogbmV4dFNpYmxpbmcsIGVjOiBwcmV2aW91c1NpYmxpbmd9XHJcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fG51bGx9IG5ld1JhbmdlRWxlbWVudCBUaGUgbm9kZShyYW5nZUVsZW1lbnQpIHRvIHJlcGxhY2UgdGhlIGN1cnJlbnRseSB3cmFwcGVkIG5vZGUuXHJcbiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSByZW1vdmUgSWYgdHJ1ZSwgZGVsZXRlZCB3aXRob3V0IGRldGFjaGVkLlxyXG4gICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gbm90SGlzdG9yeVB1c2ggV2hlbiB0cnVlLCBpdCBkb2VzIG5vdCB1cGRhdGUgdGhlIGhpc3Rvcnkgc3RhY2sgYW5kIHRoZSBzZWxlY3Rpb24gb2JqZWN0IGFuZCByZXR1cm4gRWRnZU5vZGVzICh1dGlsLmdldEVkZ2VDaGlsZE5vZGVzKVxyXG4gICAgICAgICAqIEByZXR1cm5zIHtPYmplY3R9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZGV0YWNoUmFuZ2VGb3JtYXRFbGVtZW50OiBmdW5jdGlvbiAocmFuZ2VFbGVtZW50LCBzZWxlY3RlZEZvcm1hdHMsIG5ld1JhbmdlRWxlbWVudCwgcmVtb3ZlLCBub3RIaXN0b3J5UHVzaCkge1xyXG4gICAgICAgICAgICBjb25zdCByYW5nZSA9IHRoaXMuZ2V0UmFuZ2UoKTtcclxuICAgICAgICAgICAgY29uc3Qgc28gPSByYW5nZS5zdGFydE9mZnNldDtcclxuICAgICAgICAgICAgY29uc3QgZW8gPSByYW5nZS5lbmRPZmZzZXQ7XHJcblxyXG4gICAgICAgICAgICBsZXQgY2hpbGRyZW4gPSB1dGlsLmdldExpc3RDaGlsZE5vZGVzKHJhbmdlRWxlbWVudCwgZnVuY3Rpb24gKGN1cnJlbnQpIHsgcmV0dXJuIGN1cnJlbnQucGFyZW50Tm9kZSA9PT0gcmFuZ2VFbGVtZW50OyB9KTtcclxuICAgICAgICAgICAgbGV0IHBhcmVudCA9IHJhbmdlRWxlbWVudC5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICBsZXQgZmlyc3ROb2RlID0gbnVsbDtcclxuICAgICAgICAgICAgbGV0IGxhc3ROb2RlID0gbnVsbDtcclxuICAgICAgICAgICAgbGV0IHJhbmdlRWwgPSByYW5nZUVsZW1lbnQuY2xvbmVOb2RlKGZhbHNlKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNvbnN0IHJlbW92ZUFycmF5ID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld0xpc3QgPSB1dGlsLmlzTGlzdChuZXdSYW5nZUVsZW1lbnQpO1xyXG4gICAgICAgICAgICBsZXQgaW5zZXJ0ZWROZXcgPSBmYWxzZTtcclxuICAgICAgICAgICAgbGV0IHJlc2V0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGxldCBtb3ZlQ29tcGxldGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIGFwcGVuZE5vZGUgKHBhcmVudCwgaW5zTm9kZSwgc2libGluZywgb3JpZ2luTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHV0aWwub25seVplcm9XaWR0aFNwYWNlKGluc05vZGUpKSBpbnNOb2RlLmlubmVySFRNTCA9IHV0aWwuemVyb1dpZHRoU3BhY2U7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGluc05vZGUubm9kZVR5cGUgPT09IDMpIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKGluc05vZGUsIHNpYmxpbmcpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnNOb2RlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBjb25zdCBpbnNDaGlsZHJlbiA9IChtb3ZlQ29tcGxldGUgPyBpbnNOb2RlIDogb3JpZ2luTm9kZSkuY2hpbGROb2RlcztcclxuICAgICAgICAgICAgICAgIGxldCBmb3JtYXQgPSBpbnNOb2RlLmNsb25lTm9kZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICBsZXQgZmlyc3QgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgbGV0IGMgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgICAgIHdoaWxlIChpbnNDaGlsZHJlblswXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGMgPSBpbnNDaGlsZHJlblswXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodXRpbC5fbm90VGV4dE5vZGUoYykgJiYgIXV0aWwuaXNCcmVhayhjKSAmJiAhdXRpbC5pc0xpc3RDZWxsKGZvcm1hdCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1hdC5jaGlsZE5vZGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZmlyc3QpIGZpcnN0ID0gZm9ybWF0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Lmluc2VydEJlZm9yZShmb3JtYXQsIHNpYmxpbmcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0ID0gaW5zTm9kZS5jbG9uZU5vZGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUoYywgc2libGluZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZmlyc3QpIGZpcnN0ID0gYztcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQuYXBwZW5kQ2hpbGQoYyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChmb3JtYXQuY2hpbGROb2Rlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNMaXN0Q2VsbChwYXJlbnQpICYmIHV0aWwuaXNMaXN0Q2VsbChmb3JtYXQpICYmIHV0aWwuaXNMaXN0KHNpYmxpbmcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdMaXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IHNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZShzaWJsaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LmFwcGVuZENoaWxkKHNpYmxpbmcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpYmxpbmcgPSBzaWJsaW5nLm5leHRTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGZvcm1hdCwgcGFyZW50Lm5leHRFbGVtZW50U2libGluZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcmlnaW5OZXh0ID0gb3JpZ2luTm9kZS5uZXh0RWxlbWVudFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZXRhY2hSYW5nZSA9IHV0aWwuZGV0YWNoTmVzdGVkTGlzdChvcmlnaW5Ob2RlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHJhbmdlRWxlbWVudCAhPT0gZGV0YWNoUmFuZ2UpIHx8IChvcmlnaW5OZXh0ICE9PSBvcmlnaW5Ob2RlLm5leHRFbGVtZW50U2libGluZykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmQ2hpbGRyZW4gPSBmb3JtYXQuY2hpbGROb2RlcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoZkNoaWxkcmVuWzBdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbk5vZGUuYXBwZW5kQ2hpbGQoZkNoaWxkcmVuWzBdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlRWxlbWVudCA9IGRldGFjaFJhbmdlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUoZm9ybWF0LCBzaWJsaW5nKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZmlyc3QpIGZpcnN0ID0gZm9ybWF0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gZGV0YWNoIGxvb3BcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGNoaWxkcmVuLmxlbmd0aCwgaW5zTm9kZSwgbGluZUluZGV4LCBuZXh0OyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGluc05vZGUgPSBjaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgICAgIGlmIChpbnNOb2RlLm5vZGVUeXBlID09PSAzICYmIHV0aWwuaXNMaXN0KHJhbmdlRWwpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgbW92ZUNvbXBsZXRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVtb3ZlICYmIGkgPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXNlbGVjdGVkRm9ybWF0cyB8fCBzZWxlY3RlZEZvcm1hdHMubGVuZ3RoID09PSBsZW4gfHwgc2VsZWN0ZWRGb3JtYXRzWzBdID09PSBpbnNOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0Tm9kZSA9IHJhbmdlRWxlbWVudC5wcmV2aW91c1NpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3ROb2RlID0gcmFuZ2VFbDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkRm9ybWF0cykgbGluZUluZGV4ID0gc2VsZWN0ZWRGb3JtYXRzLmluZGV4T2YoaW5zTm9kZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRGb3JtYXRzICYmIGxpbmVJbmRleCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXJhbmdlRWwpIHJhbmdlRWwgPSByYW5nZUVsZW1lbnQuY2xvbmVOb2RlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICByYW5nZUVsLmFwcGVuZENoaWxkKGluc05vZGUpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRGb3JtYXRzKSBuZXh0ID0gc2VsZWN0ZWRGb3JtYXRzW2xpbmVJbmRleCArIDFdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyYW5nZUVsICYmIHJhbmdlRWwuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKHJhbmdlRWwsIHJhbmdlRWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlRWwgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFuZXdMaXN0ICYmIHV0aWwuaXNMaXN0Q2VsbChpbnNOb2RlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCAmJiB1dGlsLmdldEVsZW1lbnREZXB0aChpbnNOb2RlKSAhPT0gdXRpbC5nZXRFbGVtZW50RGVwdGgobmV4dCkgJiYgKHV0aWwuaXNMaXN0Q2VsbChwYXJlbnQpIHx8IHV0aWwuZ2V0QXJyYXlJdGVtKGluc05vZGUuY2hpbGRyZW4sIHV0aWwuaXNMaXN0LCBmYWxzZSkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnNOZXh0ID0gaW5zTm9kZS5uZXh0RWxlbWVudFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZXRhY2hSYW5nZSA9IHV0aWwuZGV0YWNoTmVzdGVkTGlzdChpbnNOb2RlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHJhbmdlRWxlbWVudCAhPT0gZGV0YWNoUmFuZ2UpIHx8IGluc05leHQgIT09IGluc05vZGUubmV4dEVsZW1lbnRTaWJsaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VFbGVtZW50ID0gZGV0YWNoUmFuZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5uZXIgPSBpbnNOb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zTm9kZSA9IHV0aWwuY3JlYXRlRWxlbWVudChyZW1vdmUgPyBpbm5lci5ub2RlTmFtZSA6ICh1dGlsLmlzTGlzdChyYW5nZUVsZW1lbnQucGFyZW50Tm9kZSkgfHwgdXRpbC5pc0xpc3RDZWxsKHJhbmdlRWxlbWVudC5wYXJlbnROb2RlKSkgPyAnTEknIDogdXRpbC5pc0NlbGwocmFuZ2VFbGVtZW50LnBhcmVudE5vZGUpID8gJ0RJVicgOiBvcHRpb25zLmRlZmF1bHRUYWcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNDZWxsID0gdXRpbC5pc0xpc3RDZWxsKGluc05vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5uZXJDaGlsZHJlbiA9IGlubmVyLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaW5uZXJDaGlsZHJlblswXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzTGlzdChpbm5lckNoaWxkcmVuWzBdKSAmJiAhaXNDZWxsKSBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNOb2RlLmFwcGVuZENoaWxkKGlubmVyQ2hpbGRyZW5bMF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5jb3B5Rm9ybWF0QXR0cmlidXRlcyhpbnNOb2RlLCBpbm5lcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZlQ29tcGxldGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5zTm9kZSA9IGluc05vZGUuY2xvbmVOb2RlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghcmVzZXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZW1vdmUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdSYW5nZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWluc2VydGVkTmV3KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUobmV3UmFuZ2VFbGVtZW50LCByYW5nZUVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRlZE5ldyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc05vZGUgPSBhcHBlbmROb2RlKG5ld1JhbmdlRWxlbWVudCwgaW5zTm9kZSwgbnVsbCwgY2hpbGRyZW5baV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNOb2RlID0gYXBwZW5kTm9kZShwYXJlbnQsIGluc05vZGUsIHJhbmdlRWxlbWVudCwgY2hpbGRyZW5baV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc2V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkRm9ybWF0cykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0Tm9kZSA9IGluc05vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZmlyc3ROb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdE5vZGUgPSBpbnNOb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghZmlyc3ROb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0Tm9kZSA9IGxhc3ROb2RlID0gaW5zTm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVBcnJheS5wdXNoKGluc05vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtKGNoaWxkcmVuW2ldKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc2V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNldCA9IG1vdmVDb21wbGV0ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4gPSB1dGlsLmdldExpc3RDaGlsZE5vZGVzKHJhbmdlRWxlbWVudCwgZnVuY3Rpb24gKGN1cnJlbnQpIHsgcmV0dXJuIGN1cnJlbnQucGFyZW50Tm9kZSA9PT0gcmFuZ2VFbGVtZW50OyB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlRWwgPSByYW5nZUVsZW1lbnQuY2xvbmVOb2RlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IHJhbmdlRWxlbWVudC5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IC0xO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuID0gY2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlUGFyZW50ID0gcmFuZ2VFbGVtZW50LnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgIGxldCByYW5nZVJpZ2h0ID0gcmFuZ2VFbGVtZW50Lm5leHRTaWJsaW5nO1xyXG4gICAgICAgICAgICBpZiAocmFuZ2VFbCAmJiByYW5nZUVsLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHJhbmdlUGFyZW50Lmluc2VydEJlZm9yZShyYW5nZUVsLCByYW5nZVJpZ2h0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYgKG5ld1JhbmdlRWxlbWVudCkgZmlyc3ROb2RlID0gbmV3UmFuZ2VFbGVtZW50LnByZXZpb3VzU2libGluZztcclxuICAgICAgICAgICAgZWxzZSBpZiAoIWZpcnN0Tm9kZSkgZmlyc3ROb2RlID0gcmFuZ2VFbGVtZW50LnByZXZpb3VzU2libGluZztcclxuICAgICAgICAgICAgcmFuZ2VSaWdodCA9IHJhbmdlRWxlbWVudC5uZXh0U2libGluZyAhPT0gcmFuZ2VFbCA/IHJhbmdlRWxlbWVudC5uZXh0U2libGluZyA6IHJhbmdlRWwgPyByYW5nZUVsLm5leHRTaWJsaW5nIDogbnVsbDtcclxuXHJcbiAgICAgICAgICAgIGlmIChyYW5nZUVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoID09PSAwIHx8IHJhbmdlRWxlbWVudC50ZXh0Q29udGVudC5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlSXRlbShyYW5nZUVsZW1lbnQpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVFbXB0eU5vZGUocmFuZ2VFbGVtZW50LCBudWxsKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGVkZ2UgPSBudWxsO1xyXG4gICAgICAgICAgICBpZiAocmVtb3ZlKSB7XHJcbiAgICAgICAgICAgICAgICBlZGdlID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNjOiByYW5nZVBhcmVudCxcclxuICAgICAgICAgICAgICAgICAgICBzYzogZmlyc3ROb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgIGVjOiByYW5nZVJpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUFycmF5OiByZW1vdmVBcnJheVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmICghZmlyc3ROb2RlKSBmaXJzdE5vZGUgPSBsYXN0Tm9kZTtcclxuICAgICAgICAgICAgICAgIGlmICghbGFzdE5vZGUpIGxhc3ROb2RlID0gZmlyc3ROb2RlO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGRFZGdlID0gdXRpbC5nZXRFZGdlQ2hpbGROb2RlcyhmaXJzdE5vZGUsIChsYXN0Tm9kZS5wYXJlbnROb2RlID8gZmlyc3ROb2RlIDogbGFzdE5vZGUpKTtcclxuICAgICAgICAgICAgICAgIGVkZ2UgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2M6IChjaGlsZEVkZ2Uuc2MgfHwgY2hpbGRFZGdlLmVjKS5wYXJlbnROb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgIHNjOiBjaGlsZEVkZ2Uuc2MsXHJcbiAgICAgICAgICAgICAgICAgICAgZWM6IGNoaWxkRWRnZS5lY1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5lZmZlY3ROb2RlID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKG5vdEhpc3RvcnlQdXNoKSByZXR1cm4gZWRnZTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmICghcmVtb3ZlICYmIGVkZ2UpIHtcclxuICAgICAgICAgICAgICAgIGlmICghc2VsZWN0ZWRGb3JtYXRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRSYW5nZShlZGdlLnNjLCAwLCBlZGdlLnNjLCAwKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRSYW5nZShlZGdlLnNjLCBzbywgZWRnZS5lYywgZW8pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBoaXN0b3J5IHN0YWNrXHJcbiAgICAgICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoKGZhbHNlKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gXCJzZWxlY3RlZEZvcm1hdHNcIiBhcnJheSBhcmUgZGV0YWNoZWQgZnJvbSB0aGUgbGlzdCBlbGVtZW50LlxyXG4gICAgICAgICAqIFRoZSByZXR1cm4gdmFsdWUgaXMgYXBwbGllZCB3aGVuIHRoZSBmaXJzdCBhbmQgbGFzdCBsaW5lcyBvZiBcInNlbGVjdGVkRm9ybWF0c1wiIGFyZSBcIkxJXCIgcmVzcGVjdGl2ZWx5LlxyXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IHNlbGVjdGVkRm9ybWF0cyBBcnJheSBvZiBmb3JtYXQgZWxlbWVudHMgKExJLCBQLi4uKSB0byByZW1vdmUuXHJcbiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSByZW1vdmUgSWYgdHJ1ZSwgZGVsZXRlZCB3aXRob3V0IGRldGFjaGVkLlxyXG4gICAgICAgICAqIEByZXR1cm5zIHtPYmplY3R9IHtzYzogPExJPiwgZWM6IDxMST59LlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGRldGFjaExpc3Q6IGZ1bmN0aW9uIChzZWxlY3RlZEZvcm1hdHMsIHJlbW92ZSkge1xyXG4gICAgICAgICAgICBsZXQgcmFuZ2VBcnIgPSB7fTtcclxuICAgICAgICAgICAgbGV0IGxpc3RGaXJzdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBsZXQgbGlzdExhc3QgPSBmYWxzZTtcclxuICAgICAgICAgICAgbGV0IGZpcnN0ID0gbnVsbDtcclxuICAgICAgICAgICAgbGV0IGxhc3QgPSBudWxsO1xyXG4gICAgICAgICAgICBjb25zdCBwYXNzQ29tcG9uZW50ID0gZnVuY3Rpb24gKGN1cnJlbnQpIHsgcmV0dXJuICF0aGlzLmlzQ29tcG9uZW50KGN1cnJlbnQpOyB9LmJpbmQodXRpbCk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gc2VsZWN0ZWRGb3JtYXRzLmxlbmd0aCwgciwgbywgbGFzdEluZGV4LCBpc0xpc3Q7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gaSA9PT0gbGVuIC0gMTtcclxuICAgICAgICAgICAgICAgIG8gPSB1dGlsLmdldFJhbmdlRm9ybWF0RWxlbWVudChzZWxlY3RlZEZvcm1hdHNbaV0sIHBhc3NDb21wb25lbnQpO1xyXG4gICAgICAgICAgICAgICAgaXNMaXN0ID0gdXRpbC5pc0xpc3Qobyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXIgJiYgaXNMaXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgciA9IG87XHJcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2VBcnIgPSB7cjogciwgZjogW3V0aWwuZ2V0UGFyZW50RWxlbWVudChzZWxlY3RlZEZvcm1hdHNbaV0sICdMSScpXX07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IDApIGxpc3RGaXJzdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHIgJiYgaXNMaXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHIgIT09IG8pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWRnZSA9IHRoaXMuZGV0YWNoUmFuZ2VGb3JtYXRFbGVtZW50KHJhbmdlQXJyLmZbMF0ucGFyZW50Tm9kZSwgcmFuZ2VBcnIuZiwgbnVsbCwgcmVtb3ZlLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbyA9IHNlbGVjdGVkRm9ybWF0c1tpXS5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobGlzdEZpcnN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IGVkZ2Uuc2M7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0Rmlyc3QgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobGFzdEluZGV4KSBsYXN0ID0gZWRnZS5lYztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0xpc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBvO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VBcnIgPSB7cjogciwgZjogW3V0aWwuZ2V0UGFyZW50RWxlbWVudChzZWxlY3RlZEZvcm1hdHNbaV0sICdMSScpXX07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGFzdEluZGV4KSBsaXN0TGFzdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlQXJyLmYucHVzaCh1dGlsLmdldFBhcmVudEVsZW1lbnQoc2VsZWN0ZWRGb3JtYXRzW2ldLCAnTEknKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0SW5kZXgpIGxpc3RMYXN0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGxhc3RJbmRleCAmJiB1dGlsLmlzTGlzdChyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVkZ2UgPSB0aGlzLmRldGFjaFJhbmdlRm9ybWF0RWxlbWVudChyYW5nZUFyci5mWzBdLnBhcmVudE5vZGUsIHJhbmdlQXJyLmYsIG51bGwsIHJlbW92ZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3RMYXN0IHx8IGxlbiA9PT0gMSkgbGFzdCA9IGVkZ2UuZWM7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3RGaXJzdCkgZmlyc3QgPSBlZGdlLnNjIHx8IGxhc3Q7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBzYzogZmlyc3QsXHJcbiAgICAgICAgICAgICAgICBlYzogbGFzdFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBBZGQsIHVwZGF0ZSwgYW5kIGRlbGV0ZSBub2RlcyBmcm9tIHNlbGVjdGVkIHRleHQuXHJcbiAgICAgICAgICogMS4gSWYgdGhlcmUgaXMgYSBub2RlIGluIHRoZSBcImFwcGVuZE5vZGVcIiBhcmd1bWVudCwgYSBub2RlIHdpdGggdGhlIHNhbWUgdGFncyBhbmQgYXR0cmlidXRlcyBhcyBcImFwcGVuZE5vZGVcIiBpcyBhZGRlZCB0byB0aGUgc2VsZWN0aW9uIHRleHQuXHJcbiAgICAgICAgICogMi4gSWYgaXQgaXMgaW4gdGhlIHNhbWUgdGFnLCBvbmx5IHRoZSB0YWcncyBhdHRyaWJ1dGVzIGFyZSBjaGFuZ2VkIHdpdGhvdXQgYWRkaW5nIGEgdGFnLlxyXG4gICAgICAgICAqIDMuIElmIHRoZSBcImFwcGVuZE5vZGVcIiBhcmd1bWVudCBpcyBudWxsLCB0aGUgbm9kZSBvZiB0aGUgc2VsZWN0aW9uIGlzIHVwZGF0ZSBvciByZW1vdmUgd2l0aG91dCBhZGRpbmcgYSBuZXcgbm9kZS5cclxuICAgICAgICAgKiA0LiBUaGUgc2FtZSBzdHlsZSBhcyB0aGUgc3R5bGUgYXR0cmlidXRlIG9mIHRoZSBcInN0eWxlQXJyYXlcIiBhcmd1bWVudCBpcyBkZWxldGVkLlxyXG4gICAgICAgICAqICAgIChTdHlsZXMgc2hvdWxkIGJlIHB1dCB3aXRoIGF0dHJpYnV0ZSBuYW1lcyBmcm9tIGNzcy4gW1wiYmFja2dyb3VuZC1jb2xvclwiXSlcclxuICAgICAgICAgKiA1LiBUaGUgc2FtZSBjbGFzcyBuYW1lIGFzIHRoZSBjbGFzcyBhdHRyaWJ1dGUgb2YgdGhlIFwic3R5bGVBcnJheVwiIGFyZ3VtZW50IGlzIGRlbGV0ZWQuXHJcbiAgICAgICAgICogICAgKFRoZSBjbGFzcyBuYW1lIGlzIHByZWNlZGVkIGJ5IFwiLlwiIFtcIi5jbGFzc05hbWVcIl0pXHJcbiAgICAgICAgICogNi4gVXNlIGEgbGlzdCBvZiBzdHlsZXMgYW5kIGNsYXNzZXMgb2YgXCJhcHBlbmROb2RlXCIgaW4gXCJzdHlsZUFycmF5XCIgdG8gYXZvaWQgZHVwbGljYXRlIHByb3BlcnR5IHZhbHVlcy5cclxuICAgICAgICAgKiA3LiBJZiBhIG5vZGUgd2l0aCBhbGwgc3R5bGVzIGFuZCBjbGFzc2VzIHJlbW92ZWQgaGFzIHRoZSBzYW1lIHRhZyBuYW1lIGFzIFwiYXBwZW5kTm9kZVwiIG9yIFwicmVtb3ZlTm9kZUFycmF5XCIsIG9yIFwiYXBwZW5kTm9kZVwiIGlzIG51bGwsIHRoYXQgbm9kZSBpcyBkZWxldGVkLlxyXG4gICAgICAgICAqIDguIFJlZ2FyZGxlc3Mgb2YgdGhlIHN0eWxlIGFuZCBjbGFzcyBvZiB0aGUgbm9kZSwgdGhlIHRhZyB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIFwicmVtb3ZlTm9kZUFycmF5XCIgYXJndW1lbnQgdmFsdWUgaXMgZGVsZXRlZC5cclxuICAgICAgICAgKiA5LiBJZiB0aGUgXCJzdHJpY3RSZW1vdmVcIiBhcmd1bWVudCBpcyB0cnVlLCBvbmx5IG5vZGVzIHdpdGggYWxsIHN0eWxlcyBhbmQgY2xhc3NlcyByZW1vdmVkIGZyb20gdGhlIG5vZGVzIG9mIFwicmVtb3ZlTm9kZUFycmF5XCIgYXJlIHJlbW92ZWQuXHJcbiAgICAgICAgICoxMC4gSXQgd29uJ3Qgd29yayBpZiB0aGUgcGFyZW50IG5vZGUgaGFzIHRoZSBzYW1lIGNsYXNzIGFuZCBzYW1lIHZhbHVlIHN0eWxlLlxyXG4gICAgICAgICAqICAgIEhvd2V2ZXIsIGlmIHRoZXJlIGlzIGEgdmFsdWUgaW4gXCJyZW1vdmVOb2RlQXJyYXlcIiwgaXQgd29ya3MgYW5kIHRoZSB0ZXh0IG5vZGUgaXMgc2VwYXJhdGVkIGV2ZW4gaWYgdGhlcmUgaXMgbm8gbm9kZSB0byByZXBsYWNlLlxyXG4gICAgICAgICAqIEBwYXJhbSB7RWxlbWVudHxudWxsfSBhcHBlbmROb2RlIFRoZSBlbGVtZW50IHRvIGJlIGFkZGVkIHRvIHRoZSBzZWxlY3Rpb24uIElmIGl0IGlzIG51bGwsIG9ubHkgZGVsZXRlIHRoZSBub2RlLlxyXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl8bnVsbH0gc3R5bGVBcnJheSBUaGUgc3R5bGUgb3IgY2xhc3NOYW1lIGF0dHJpYnV0ZSBuYW1lIEFycmF5IHRvIGNoZWNrIChbJ2ZvbnQtc2l6ZSddLCBbJy5jbGFzc05hbWUnXSwgWydmb250LWZhbWlseScsICdjb2xvcicsICcuY2xhc3NOYW1lJ10uLi5dKVxyXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl8bnVsbH0gcmVtb3ZlTm9kZUFycmF5IEFuIGFycmF5IG9mIG5vZGUgbmFtZXMgdG8gcmVtb3ZlIHR5cGVzIGZyb20sIHJlbW92ZSBhbGwgZm9ybWF0cyB3aGVuIFwiYXBwZW5kTm9kZVwiIGlzIG51bGwgYW5kIHRoZXJlIGlzIGFuIGVtcHR5IGFycmF5IG9yIG51bGwgdmFsdWUuIChbJ3NwYW4nXSwgWydzdHJvbmcnLCAnZW0nXSAuLi5dKVxyXG4gICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbnxudWxsfSBzdHJpY3RSZW1vdmUgSWYgdHJ1ZSwgb25seSBub2RlcyB3aXRoIGFsbCBzdHlsZXMgYW5kIGNsYXNzZXMgcmVtb3ZlZCBmcm9tIHRoZSBub2RlcyBvZiBcInJlbW92ZU5vZGVBcnJheVwiIGFyZSByZW1vdmVkLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG5vZGVDaGFuZ2U6IGZ1bmN0aW9uIChhcHBlbmROb2RlLCBzdHlsZUFycmF5LCByZW1vdmVOb2RlQXJyYXksIHN0cmljdFJlbW92ZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9yZXNldFJhbmdlVG9UZXh0Tm9kZSgpO1xyXG4gICAgICAgICAgICBsZXQgcmFuZ2UgPSB0aGlzLmdldFJhbmdlX2FkZExpbmUodGhpcy5nZXRSYW5nZSgpLCBudWxsKTtcclxuICAgICAgICAgICAgc3R5bGVBcnJheSA9IHN0eWxlQXJyYXkgJiYgc3R5bGVBcnJheS5sZW5ndGggPiAwID8gc3R5bGVBcnJheSA6IGZhbHNlO1xyXG4gICAgICAgICAgICByZW1vdmVOb2RlQXJyYXkgPSByZW1vdmVOb2RlQXJyYXkgJiYgcmVtb3ZlTm9kZUFycmF5Lmxlbmd0aCA+IDAgPyByZW1vdmVOb2RlQXJyYXkgOiBmYWxzZTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNvbnN0IGlzUmVtb3ZlTm9kZSA9ICFhcHBlbmROb2RlO1xyXG4gICAgICAgICAgICBjb25zdCBpc1JlbW92ZUZvcm1hdCA9IGlzUmVtb3ZlTm9kZSAmJiAhcmVtb3ZlTm9kZUFycmF5ICYmICFzdHlsZUFycmF5O1xyXG4gICAgICAgICAgICBsZXQgc3RhcnRDb24gPSByYW5nZS5zdGFydENvbnRhaW5lcjtcclxuICAgICAgICAgICAgbGV0IHN0YXJ0T2ZmID0gcmFuZ2Uuc3RhcnRPZmZzZXQ7XHJcbiAgICAgICAgICAgIGxldCBlbmRDb24gPSByYW5nZS5lbmRDb250YWluZXI7XHJcbiAgICAgICAgICAgIGxldCBlbmRPZmYgPSByYW5nZS5lbmRPZmZzZXQ7XHJcblxyXG4gICAgICAgICAgICBpZiAoKGlzUmVtb3ZlRm9ybWF0ICYmIHJhbmdlLmNvbGxhcHNlZCAmJiB1dGlsLmlzRm9ybWF0RWxlbWVudChzdGFydENvbi5wYXJlbnROb2RlKSAmJiB1dGlsLmlzRm9ybWF0RWxlbWVudChlbmRDb24ucGFyZW50Tm9kZSkpIHx8IChzdGFydENvbiA9PT0gZW5kQ29uICYmIHN0YXJ0Q29uLm5vZGVUeXBlID09PSAxICYmIHV0aWwuaXNOb25FZGl0YWJsZShzdGFydENvbikpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChyYW5nZS5jb2xsYXBzZWQgJiYgIWlzUmVtb3ZlRm9ybWF0KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3RhcnRDb24ubm9kZVR5cGUgPT09IDEgJiYgIXV0aWwuaXNCcmVhayhzdGFydENvbikgJiYgIXV0aWwuaXNDb21wb25lbnQoc3RhcnRDb24pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGFmdGVyTm9kZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9jdXNOb2RlID0gc3RhcnRDb24uY2hpbGROb2Rlc1tzdGFydE9mZl07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmb2N1c05vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmb2N1c05vZGUubmV4dFNpYmxpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyTm9kZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlck5vZGUgPSB1dGlsLmlzQnJlYWsoZm9jdXNOb2RlKSA/IGZvY3VzTm9kZSA6IGZvY3VzTm9kZS5uZXh0U2libGluZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgemVyb1dpZHRoID0gdXRpbC5jcmVhdGVUZXh0Tm9kZSh1dGlsLnplcm9XaWR0aFNwYWNlKTtcclxuICAgICAgICAgICAgICAgICAgICBzdGFydENvbi5pbnNlcnRCZWZvcmUoemVyb1dpZHRoLCBhZnRlck5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2UoemVyb1dpZHRoLCAxLCB6ZXJvV2lkdGgsIDEpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICByYW5nZSA9IHRoaXMuZ2V0UmFuZ2UoKTtcclxuICAgICAgICAgICAgICAgICAgICBzdGFydENvbiA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyO1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0T2ZmID0gcmFuZ2Uuc3RhcnRPZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgZW5kQ29uID0gcmFuZ2UuZW5kQ29udGFpbmVyO1xyXG4gICAgICAgICAgICAgICAgICAgIGVuZE9mZiA9IHJhbmdlLmVuZE9mZnNldDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHV0aWwuaXNGb3JtYXRFbGVtZW50KHN0YXJ0Q29uKSkge1xyXG4gICAgICAgICAgICAgICAgc3RhcnRDb24gPSBzdGFydENvbi5jaGlsZE5vZGVzW3N0YXJ0T2ZmXSB8fCBzdGFydENvbi5maXJzdENoaWxkO1xyXG4gICAgICAgICAgICAgICAgc3RhcnRPZmYgPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh1dGlsLmlzRm9ybWF0RWxlbWVudChlbmRDb24pKSB7XHJcbiAgICAgICAgICAgICAgICBlbmRDb24gPSBlbmRDb24uY2hpbGROb2Rlc1tlbmRPZmZdIHx8IGVuZENvbi5sYXN0Q2hpbGQ7XHJcbiAgICAgICAgICAgICAgICBlbmRPZmYgPSBlbmRDb24udGV4dENvbnRlbnQubGVuZ3RoO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoaXNSZW1vdmVOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICBhcHBlbmROb2RlID0gdXRpbC5jcmVhdGVFbGVtZW50KCdESVYnKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3Qgd1JlZ0V4cCA9IF93LlJlZ0V4cDtcclxuICAgICAgICAgICAgY29uc3QgbmV3Tm9kZU5hbWUgPSBhcHBlbmROb2RlLm5vZGVOYW1lO1xyXG5cclxuICAgICAgICAgICAgLyogY2hlY2tlZCBzYW1lIHN0eWxlIHByb3BlcnR5ICovXHJcbiAgICAgICAgICAgIGlmICghaXNSZW1vdmVGb3JtYXQgJiYgc3RhcnRDb24gPT09IGVuZENvbiAmJiAhcmVtb3ZlTm9kZUFycmF5ICYmIGFwcGVuZE5vZGUpIHtcclxuICAgICAgICAgICAgICAgIGxldCBzTm9kZSA9IHN0YXJ0Q29uO1xyXG4gICAgICAgICAgICAgICAgbGV0IGNoZWNrQ250ID0gMDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNoZWNrQXR0cnMgPSBbXTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgY29uc3QgY2hlY2tTdHlsZXMgPSBhcHBlbmROb2RlLnN0eWxlO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGNoZWNrU3R5bGVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tBdHRycy5wdXNoKGNoZWNrU3R5bGVzW2ldKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBja2Vja0NsYXNzZXMgPSBhcHBlbmROb2RlLmNsYXNzTGlzdDtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBja2Vja0NsYXNzZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjaGVja0F0dHJzLnB1c2goJy4nICsgY2tlY2tDbGFzc2VzW2ldKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoY2hlY2tBdHRycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUoIXV0aWwuaXNGb3JtYXRFbGVtZW50KHNOb2RlKSAmJiAhdXRpbC5pc1d5c2l3eWdEaXYoc05vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hlY2tBdHRycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNOb2RlLm5vZGVUeXBlID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcyA9IGNoZWNrQXR0cnNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2xhc3NSZWcgPSAvXlxcLi8udGVzdChzKSA/IG5ldyB3UmVnRXhwKCdcXFxccyonICsgcy5yZXBsYWNlKC9eXFwuLywgJycpICsgJyhcXFxccyt8JCknLCAnaWcnKSA6IGZhbHNlO1xyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3R5bGVDaGVjayA9IGlzUmVtb3ZlTm9kZSA/ICEhc05vZGUuc3R5bGVbc10gOiAoISFzTm9kZS5zdHlsZVtzXSAmJiAhIWFwcGVuZE5vZGUuc3R5bGVbc10gJiYgc05vZGUuc3R5bGVbc10gPT09IGFwcGVuZE5vZGUuc3R5bGVbc10pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNsYXNzQ2hlY2sgPSBjbGFzc1JlZyA9PT0gZmFsc2UgPyBmYWxzZSA6IGlzUmVtb3ZlTm9kZSA/ICEhc05vZGUuY2xhc3NOYW1lLm1hdGNoKGNsYXNzUmVnKSA6ICEhc05vZGUuY2xhc3NOYW1lLm1hdGNoKGNsYXNzUmVnKSAmJiAhIWFwcGVuZE5vZGUuY2xhc3NOYW1lLm1hdGNoKGNsYXNzUmVnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3R5bGVDaGVjayB8fCBjbGFzc0NoZWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrQ250Kys7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNOb2RlID0gc05vZGUucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2tDbnQgPj0gY2hlY2tBdHRycy5sZW5ndGgpIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IHN0YXJ0ID0ge30sIGVuZCA9IHt9O1xyXG4gICAgICAgICAgICBsZXQgbmV3Tm9kZSwgc3R5bGVSZWdFeHAgPSAnJywgY2xhc3NSZWdFeHAgPSAnJywgcmVtb3ZlTm9kZVJlZ0V4cCA9ICcnO1xyXG5cclxuICAgICAgICAgICAgaWYgKHN0eWxlQXJyYXkpIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBzdHlsZUFycmF5Lmxlbmd0aCwgczsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcyA9IHN0eWxlQXJyYXlbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKC9eXFwuLy50ZXN0KHMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzUmVnRXhwICs9IChjbGFzc1JlZ0V4cCA/ICd8JyA6ICdcXFxccyooPzonKSArIHMucmVwbGFjZSgvXlxcLi8sICcnKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZVJlZ0V4cCArPSAoc3R5bGVSZWdFeHAgPyAnfCcgOiAnKD86O3xefFxcXFxzKSg/OicpICsgcztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHN0eWxlUmVnRXhwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGVSZWdFeHAgKz0gJylcXFxccyo6W147XSpcXFxccyooPzo7fCQpJztcclxuICAgICAgICAgICAgICAgICAgICBzdHlsZVJlZ0V4cCA9IG5ldyB3UmVnRXhwKHN0eWxlUmVnRXhwLCAnaWcnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoY2xhc3NSZWdFeHApIHtcclxuICAgICAgICAgICAgICAgICAgICBjbGFzc1JlZ0V4cCArPSAnKSg/PVxcXFxzK3wkKSc7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NSZWdFeHAgPSBuZXcgd1JlZ0V4cChjbGFzc1JlZ0V4cCwgJ2lnJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChyZW1vdmVOb2RlQXJyYXkpIHtcclxuICAgICAgICAgICAgICAgIHJlbW92ZU5vZGVSZWdFeHAgPSAnXig/OicgKyByZW1vdmVOb2RlQXJyYXlbMF07XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHJlbW92ZU5vZGVBcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZU5vZGVSZWdFeHAgKz0gJ3wnICsgcmVtb3ZlTm9kZUFycmF5W2ldO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVtb3ZlTm9kZVJlZ0V4cCArPSAnKSQnO1xyXG4gICAgICAgICAgICAgICAgcmVtb3ZlTm9kZVJlZ0V4cCA9IG5ldyB3UmVnRXhwKHJlbW92ZU5vZGVSZWdFeHAsICdpJyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8qKiB2YWxpZGF0aW9uIGNoZWNrIGZ1bmN0aW9uKi9cclxuICAgICAgICAgICAgY29uc3Qgd0Jvb2xlYW4gPSBfdy5Cb29sZWFuO1xyXG4gICAgICAgICAgICBjb25zdCBfcmVtb3ZlQ2hlY2sgPSB7djogZmFsc2V9O1xyXG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0aW9uID0gZnVuY3Rpb24gKGNoZWNrTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgdk5vZGUgPSBjaGVja05vZGUuY2xvbmVOb2RlKGZhbHNlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBhbGwgcGF0aFxyXG4gICAgICAgICAgICAgICAgaWYgKHZOb2RlLm5vZGVUeXBlID09PSAzIHx8IHV0aWwuaXNCcmVhayh2Tm9kZSkpIHJldHVybiB2Tm9kZTtcclxuICAgICAgICAgICAgICAgIC8vIGFsbCByZW1vdmVcclxuICAgICAgICAgICAgICAgIGlmIChpc1JlbW92ZUZvcm1hdCkgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIG5vZGUgY2hlY2tcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRhZ1JlbW92ZSA9ICghcmVtb3ZlTm9kZVJlZ0V4cCAmJiBpc1JlbW92ZU5vZGUpIHx8IChyZW1vdmVOb2RlUmVnRXhwICYmIHJlbW92ZU5vZGVSZWdFeHAudGVzdCh2Tm9kZS5ub2RlTmFtZSkpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIHRhZyByZW1vdmVcclxuICAgICAgICAgICAgICAgIGlmICh0YWdSZW1vdmUgJiYgIXN0cmljdFJlbW92ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIF9yZW1vdmVDaGVjay52ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBzdHlsZSByZWdleHBcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9yaWdpblN0eWxlID0gdk5vZGUuc3R5bGUuY3NzVGV4dDtcclxuICAgICAgICAgICAgICAgIGxldCBzdHlsZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgaWYgKHN0eWxlUmVnRXhwICYmIG9yaWdpblN0eWxlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBzdHlsZSA9IG9yaWdpblN0eWxlLnJlcGxhY2Uoc3R5bGVSZWdFeHAsICcnKS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0eWxlICE9PSBvcmlnaW5TdHlsZSkgX3JlbW92ZUNoZWNrLnYgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIGNsYXNzIGNoZWNrXHJcbiAgICAgICAgICAgICAgICBjb25zdCBvcmlnaW5DbGFzc2VzID0gdk5vZGUuY2xhc3NOYW1lO1xyXG4gICAgICAgICAgICAgICAgbGV0IGNsYXNzZXMgPSAnJztcclxuICAgICAgICAgICAgICAgIGlmIChjbGFzc1JlZ0V4cCAmJiBvcmlnaW5DbGFzc2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBjbGFzc2VzID0gb3JpZ2luQ2xhc3Nlcy5yZXBsYWNlKGNsYXNzUmVnRXhwLCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjbGFzc2VzICE9PSBvcmlnaW5DbGFzc2VzKSBfcmVtb3ZlQ2hlY2sudiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIG9ubHlcclxuICAgICAgICAgICAgICAgIGlmIChpc1JlbW92ZU5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoKGNsYXNzUmVnRXhwIHx8ICFvcmlnaW5DbGFzc2VzKSAmJiAoc3R5bGVSZWdFeHAgfHwgIW9yaWdpblN0eWxlKSAmJiAhc3R5bGUgJiYgIWNsYXNzZXMgJiYgdGFnUmVtb3ZlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9yZW1vdmVDaGVjay52ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIGNoYW5nZVxyXG4gICAgICAgICAgICAgICAgaWYgKHN0eWxlIHx8IGNsYXNzZXMgfHwgdk5vZGUubm9kZU5hbWUgIT09IG5ld05vZGVOYW1lIHx8ICh3Qm9vbGVhbihzdHlsZVJlZ0V4cCkgIT09IHdCb29sZWFuKG9yaWdpblN0eWxlKSkgfHwgKHdCb29sZWFuKGNsYXNzUmVnRXhwKSAhPT0gd0Jvb2xlYW4ob3JpZ2luQ2xhc3NlcykpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0eWxlUmVnRXhwICYmIG9yaWdpblN0eWxlLmxlbmd0aCA+IDApIHZOb2RlLnN0eWxlLmNzc1RleHQgPSBzdHlsZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXZOb2RlLnN0eWxlLmNzc1RleHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdk5vZGUucmVtb3ZlQXR0cmlidXRlKCdzdHlsZScpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNsYXNzUmVnRXhwICYmIG9yaWdpbkNsYXNzZXMubGVuZ3RoID4gMCkgdk5vZGUuY2xhc3NOYW1lID0gY2xhc3Nlcy50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF2Tm9kZS5jbGFzc05hbWUudHJpbSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZOb2RlLnJlbW92ZUF0dHJpYnV0ZSgnY2xhc3MnKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdk5vZGUuc3R5bGUuY3NzVGV4dCAmJiAhdk5vZGUuY2xhc3NOYW1lICYmICh2Tm9kZS5ub2RlTmFtZSA9PT0gbmV3Tm9kZU5hbWUgfHwgdGFnUmVtb3ZlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfcmVtb3ZlQ2hlY2sudiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZOb2RlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIF9yZW1vdmVDaGVjay52ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgLy8gZ2V0IGxpbmUgbm9kZXNcclxuICAgICAgICAgICAgY29uc3QgbGluZU5vZGVzID0gdGhpcy5nZXRTZWxlY3RlZEVsZW1lbnRzKG51bGwpO1xyXG4gICAgICAgICAgICByYW5nZSA9IHRoaXMuZ2V0UmFuZ2UoKTtcclxuICAgICAgICAgICAgc3RhcnRDb24gPSByYW5nZS5zdGFydENvbnRhaW5lcjtcclxuICAgICAgICAgICAgc3RhcnRPZmYgPSByYW5nZS5zdGFydE9mZnNldDtcclxuICAgICAgICAgICAgZW5kQ29uID0gcmFuZ2UuZW5kQ29udGFpbmVyO1xyXG4gICAgICAgICAgICBlbmRPZmYgPSByYW5nZS5lbmRPZmZzZXQ7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXV0aWwuZ2V0Rm9ybWF0RWxlbWVudChzdGFydENvbiwgbnVsbCkpIHtcclxuICAgICAgICAgICAgICAgIHN0YXJ0Q29uID0gdXRpbC5nZXRDaGlsZEVsZW1lbnQobGluZU5vZGVzWzBdLCBmdW5jdGlvbiAoY3VycmVudCkgeyByZXR1cm4gY3VycmVudC5ub2RlVHlwZSA9PT0gMzsgfSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgc3RhcnRPZmYgPSAwO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIXV0aWwuZ2V0Rm9ybWF0RWxlbWVudChlbmRDb24sIG51bGwpKSB7XHJcbiAgICAgICAgICAgICAgICBlbmRDb24gPSB1dGlsLmdldENoaWxkRWxlbWVudChsaW5lTm9kZXNbbGluZU5vZGVzLmxlbmd0aCAtIDFdLCBmdW5jdGlvbiAoY3VycmVudCkgeyByZXR1cm4gY3VycmVudC5ub2RlVHlwZSA9PT0gMzsgfSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgZW5kT2ZmID0gZW5kQ29uLnRleHRDb250ZW50Lmxlbmd0aDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNvbnN0IG9uZUxpbmUgPSB1dGlsLmdldEZvcm1hdEVsZW1lbnQoc3RhcnRDb24sIG51bGwpID09PSB1dGlsLmdldEZvcm1hdEVsZW1lbnQoZW5kQ29uLCBudWxsKTtcclxuICAgICAgICAgICAgY29uc3QgZW5kTGVuZ3RoID0gbGluZU5vZGVzLmxlbmd0aCAtIChvbmVMaW5lID8gMCA6IDEpO1xyXG5cclxuICAgICAgICAgICAgLy8gbm9kZSBDaGFuZ2VzXHJcbiAgICAgICAgICAgIG5ld05vZGUgPSBhcHBlbmROb2RlLmNsb25lTm9kZShmYWxzZSk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBpc1JlbW92ZUFuY2hvciA9IGlzUmVtb3ZlRm9ybWF0IHx8IChpc1JlbW92ZU5vZGUgJiYgKGZ1bmN0aW9uIChhcnIpIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IG4gPSAwLCBsZW4gPSBhcnIubGVuZ3RoOyBuIDwgbGVuOyBuKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodXRpbC5faXNNYWludGFpbmVkTm9kZShhcnJbbl0pIHx8IHV0aWwuX2lzU2l6ZU5vZGUoYXJyW25dKSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pKHJlbW92ZU5vZGVBcnJheSkpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgaXNTaXplTm9kZSA9IGlzUmVtb3ZlTm9kZSB8fCB1dGlsLl9pc1NpemVOb2RlKG5ld05vZGUpO1xyXG4gICAgICAgICAgICBjb25zdCBfZ2V0TWFpbnRhaW5lZE5vZGUgPSB0aGlzLl91dGlsX2dldE1haW50YWluZWROb2RlLmJpbmQodXRpbCwgaXNSZW1vdmVBbmNob3IsIGlzU2l6ZU5vZGUpO1xyXG4gICAgICAgICAgICBjb25zdCBfaXNNYWludGFpbmVkTm9kZSA9IHRoaXMuX3V0aWxfaXNNYWludGFpbmVkTm9kZS5iaW5kKHV0aWwsIGlzUmVtb3ZlQW5jaG9yLCBpc1NpemVOb2RlKTtcclxuXHJcbiAgICAgICAgICAgIC8vIG9uZSBsaW5lXHJcbiAgICAgICAgICAgIGlmIChvbmVMaW5lKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdSYW5nZSA9IHRoaXMuX25vZGVDaGFuZ2Vfb25lTGluZShsaW5lTm9kZXNbMF0sIG5ld05vZGUsIHZhbGlkYXRpb24sIHN0YXJ0Q29uLCBzdGFydE9mZiwgZW5kQ29uLCBlbmRPZmYsIGlzUmVtb3ZlRm9ybWF0LCBpc1JlbW92ZU5vZGUsIHJhbmdlLmNvbGxhcHNlZCwgX3JlbW92ZUNoZWNrLCBfZ2V0TWFpbnRhaW5lZE5vZGUsIF9pc01haW50YWluZWROb2RlKTtcclxuICAgICAgICAgICAgICAgIHN0YXJ0LmNvbnRhaW5lciA9IG5ld1JhbmdlLnN0YXJ0Q29udGFpbmVyO1xyXG4gICAgICAgICAgICAgICAgc3RhcnQub2Zmc2V0ID0gbmV3UmFuZ2Uuc3RhcnRPZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICBlbmQuY29udGFpbmVyID0gbmV3UmFuZ2UuZW5kQ29udGFpbmVyO1xyXG4gICAgICAgICAgICAgICAgZW5kLm9mZnNldCA9IG5ld1JhbmdlLmVuZE9mZnNldDtcclxuICAgICAgICAgICAgICAgIGlmIChzdGFydC5jb250YWluZXIgPT09IGVuZC5jb250YWluZXIgJiYgdXRpbC5vbmx5WmVyb1dpZHRoU3BhY2Uoc3RhcnQuY29udGFpbmVyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0Lm9mZnNldCA9IGVuZC5vZmZzZXQgPSAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0Q29tbW9uTGlzdFN0eWxlKG5ld1JhbmdlLmFuY2VzdG9yLCBudWxsKTtcclxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gbXVsdGkgbGluZSBcclxuICAgICAgICAgICAgICAgIC8vIGVuZFxyXG4gICAgICAgICAgICAgICAgaWYgKGVuZExlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBuZXdOb2RlID0gYXBwZW5kTm9kZS5jbG9uZU5vZGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVuZCA9IHRoaXMuX25vZGVDaGFuZ2VfZW5kTGluZShsaW5lTm9kZXNbZW5kTGVuZ3RoXSwgbmV3Tm9kZSwgdmFsaWRhdGlvbiwgZW5kQ29uLCBlbmRPZmYsIGlzUmVtb3ZlRm9ybWF0LCBpc1JlbW92ZU5vZGUsIF9yZW1vdmVDaGVjaywgX2dldE1haW50YWluZWROb2RlLCBfaXNNYWludGFpbmVkTm9kZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gbWlkXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gZW5kTGVuZ3RoIC0gMSwgbmV3UmFuZ2U7IGkgPiAwOyBpLS0pIHtcclxuICAgICAgICAgICAgICAgICAgICBuZXdOb2RlID0gYXBwZW5kTm9kZS5jbG9uZU5vZGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld1JhbmdlID0gdGhpcy5fbm9kZUNoYW5nZV9taWRkbGVMaW5lKGxpbmVOb2Rlc1tpXSwgbmV3Tm9kZSwgdmFsaWRhdGlvbiwgaXNSZW1vdmVGb3JtYXQsIGlzUmVtb3ZlTm9kZSwgX3JlbW92ZUNoZWNrLCBlbmQuY29udGFpbmVyKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobmV3UmFuZ2UuZW5kQ29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZC5hbmNlc3RvciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZC5jb250YWluZXIgPSBuZXdSYW5nZS5lbmRDb250YWluZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldENvbW1vbkxpc3RTdHlsZShuZXdSYW5nZS5hbmNlc3RvciwgbnVsbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gc3RhcnRcclxuICAgICAgICAgICAgICAgIG5ld05vZGUgPSBhcHBlbmROb2RlLmNsb25lTm9kZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICBzdGFydCA9IHRoaXMuX25vZGVDaGFuZ2Vfc3RhcnRMaW5lKGxpbmVOb2Rlc1swXSwgbmV3Tm9kZSwgdmFsaWRhdGlvbiwgc3RhcnRDb24sIHN0YXJ0T2ZmLCBpc1JlbW92ZUZvcm1hdCwgaXNSZW1vdmVOb2RlLCBfcmVtb3ZlQ2hlY2ssIF9nZXRNYWludGFpbmVkTm9kZSwgX2lzTWFpbnRhaW5lZE5vZGUsIGVuZC5jb250YWluZXIpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChzdGFydC5lbmRDb250YWluZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBlbmQuYW5jZXN0b3IgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGVuZC5jb250YWluZXIgPSBzdGFydC5lbmRDb250YWluZXI7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGVuZExlbmd0aCA8PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW5kID0gc3RhcnQ7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFlbmQuY29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW5kLmFuY2VzdG9yID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBlbmQuY29udGFpbmVyID0gc3RhcnQuY29udGFpbmVyO1xyXG4gICAgICAgICAgICAgICAgICAgIGVuZC5vZmZzZXQgPSBzdGFydC5jb250YWluZXIudGV4dENvbnRlbnQubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuX3NldENvbW1vbkxpc3RTdHlsZShzdGFydC5hbmNlc3RvciwgbnVsbCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRDb21tb25MaXN0U3R5bGUoZW5kLmFuY2VzdG9yIHx8IHV0aWwuZ2V0Rm9ybWF0RWxlbWVudChlbmQuY29udGFpbmVyKSwgbnVsbCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIHNldCByYW5nZVxyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJzT2ZmKCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2Uoc3RhcnQuY29udGFpbmVyLCBzdGFydC5vZmZzZXQsIGVuZC5jb250YWluZXIsIGVuZC5vZmZzZXQpO1xyXG5cclxuICAgICAgICAgICAgLy8gaGlzdG9yeSBzdGFja1xyXG4gICAgICAgICAgICB0aGlzLmhpc3RvcnkucHVzaChmYWxzZSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIElmIGNlcnRhaW4gc3R5bGVzIGFyZSBhcHBsaWVkIHRvIGFsbCBjaGlsZCBub2RlcyBvZiB0aGUgbGlzdCBjZWxsLCB0aGUgc3R5bGUgb2YgdGhlIGxpc3QgY2VsbCBpcyBhbHNvIGNoYW5nZWQuIChib2xkLCBjb2xvciwgc2l6ZSlcclxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsIExpc3QgY2VsbCBlbGVtZW50LiA8bGk+XHJcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fG51bGx9IGNoaWxkIFZhcmlhYmxlIGZvciByZWN1cnNpdmUgY2FsbC4gKFwibnVsbFwiIG9uIHRoZSBmaXJzdCBjYWxsKVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX3NldENvbW1vbkxpc3RTdHlsZTogZnVuY3Rpb24gKGVsLCBjaGlsZCkge1xyXG4gICAgICAgICAgICBpZiAoIXV0aWwuaXNMaXN0Q2VsbChlbCkpIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKCFjaGlsZCkgZWwucmVtb3ZlQXR0cmlidXRlKCdzdHlsZScpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB1dGlsLmdldEFycmF5SXRlbSgoY2hpbGQgfHwgZWwpLmNoaWxkTm9kZXMsIGZ1bmN0aW9uIChjdXJyZW50KSB7IHJldHVybiAhdXRpbC5pc0JyZWFrKGN1cnJlbnQpOyB9LCB0cnVlKTtcclxuICAgICAgICAgICAgaWYgKGNoaWxkcmVuWzBdICYmIGNoaWxkcmVuLmxlbmd0aCA9PT0gMSl7XHJcbiAgICAgICAgICAgICAgICBjaGlsZCA9IGNoaWxkcmVuWzBdO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFjaGlsZCB8fCBjaGlsZC5ub2RlVHlwZSAhPT0gMSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkU3R5bGUgPSBjaGlsZC5zdHlsZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVsU3R5bGUgPSBlbC5zdHlsZTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBib2xkLCBpdGFsaWNcclxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLl90ZXh0VGFnc01hcFtjaGlsZC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSA9PT0gdGhpcy5fZGVmYXVsdENvbW1hbmQuYm9sZC50b0xvd2VyQ2FzZSgpKSBlbFN0eWxlLmZvbnRXZWlnaHQgPSAnYm9sZCc7IC8vIGJvbGRcclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoaWxkU3R5bGUuZm9udFdlaWdodCkgZWxTdHlsZS5mb250V2VpZ2h0ID0gY2hpbGRTdHlsZS5mb250V2VpZ2h0O1xyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuX3RleHRUYWdzTWFwW2NoaWxkLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldID09PSB0aGlzLl9kZWZhdWx0Q29tbWFuZC5pdGFsaWMudG9Mb3dlckNhc2UoKSkgZWxTdHlsZS5mb250U3R5bGUgPSAnaXRhbGljJzsgLy8gaXRhbGljXHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGlsZFN0eWxlLmZvbnRTdHlsZSkgZWxTdHlsZS5mb250U3R5bGUgPSBjaGlsZFN0eWxlLmZvbnRTdHlsZTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBzdHlsZXNcclxuICAgICAgICAgICAgICAgIGlmIChjaGlsZFN0eWxlLmNvbG9yKSBlbFN0eWxlLmNvbG9yID0gY2hpbGRTdHlsZS5jb2xvcjsgLy8gY29sb3JcclxuICAgICAgICAgICAgICAgIGlmIChjaGlsZFN0eWxlLmZvbnRTaXplKSBlbFN0eWxlLmZvbnRTaXplID0gY2hpbGRTdHlsZS5mb250U2l6ZTsgLy8gc2l6ZVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuX3NldENvbW1vbkxpc3RTdHlsZShlbCwgY2hpbGQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFN0cmlwIHJlbW92ZSBub2RlXHJcbiAgICAgICAgICogQHBhcmFtIHtOb2RlfSByZW1vdmVOb2RlIFRoZSByZW1vdmUgbm9kZVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX3N0cmlwUmVtb3ZlTm9kZTogZnVuY3Rpb24gKHJlbW92ZU5vZGUpIHtcclxuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IHJlbW92ZU5vZGUucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgaWYgKCFyZW1vdmVOb2RlIHx8IHJlbW92ZU5vZGUubm9kZVR5cGUgPT09IDMgfHwgIWVsZW1lbnQpIHJldHVybjtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gcmVtb3ZlTm9kZS5jaGlsZE5vZGVzO1xyXG4gICAgICAgICAgICB3aGlsZSAoY2hpbGRyZW5bMF0pIHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQuaW5zZXJ0QmVmb3JlKGNoaWxkcmVuWzBdLCByZW1vdmVOb2RlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVDaGlsZChyZW1vdmVOb2RlKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJuIHRoZSBwYXJlbnQgbWFpbnRhaW5lZCB0YWcuIChiaW5kIGFuZCB1c2UgYSB1dGlsIG9iamVjdClcclxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgRWxlbWVudFxyXG4gICAgICAgICAqIEByZXR1cm5zIHtFbGVtZW50fVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX3V0aWxfZ2V0TWFpbnRhaW5lZE5vZGU6IGZ1bmN0aW9uIChfaXNSZW1vdmUsIF9pc1NpemVOb2RlLCBlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGlmICghZWxlbWVudCB8fCBfaXNSZW1vdmUpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQYXJlbnRFbGVtZW50KGVsZW1lbnQsIHRoaXMuX2lzTWFpbnRhaW5lZE5vZGUuYmluZCh0aGlzKSkgfHwgKCFfaXNTaXplTm9kZSA/IHRoaXMuZ2V0UGFyZW50RWxlbWVudChlbGVtZW50LCB0aGlzLl9pc1NpemVOb2RlLmJpbmQodGhpcykpIDogbnVsbCk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIENoZWNrIGlmIGVsZW1lbnQgaXMgYSB0YWcgdGhhdCBzaG91bGQgYmUgcGVyc2lzdGVkLiAoYmluZCBhbmQgdXNlIGEgdXRpbCBvYmplY3QpXHJcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IEVsZW1lbnRcclxuICAgICAgICAgKiBAcmV0dXJucyB7RWxlbWVudH1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF91dGlsX2lzTWFpbnRhaW5lZE5vZGU6IGZ1bmN0aW9uIChfaXNSZW1vdmUsIF9pc1NpemVOb2RlLCBlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGlmICghZWxlbWVudCB8fCBfaXNSZW1vdmUgfHwgZWxlbWVudC5ub2RlVHlwZSAhPT0gMSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICBjb25zdCBhbmNob3IgPSB0aGlzLl9pc01haW50YWluZWROb2RlKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQYXJlbnRFbGVtZW50KGVsZW1lbnQsIHRoaXMuX2lzTWFpbnRhaW5lZE5vZGUuYmluZCh0aGlzKSkgPyBhbmNob3IgOiAoYW5jaG9yIHx8ICghX2lzU2l6ZU5vZGUgPyB0aGlzLl9pc1NpemVOb2RlKGVsZW1lbnQpIDogZmFsc2UpKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gd3JhcHMgdGV4dCBub2RlcyBvZiBsaW5lIHNlbGVjdGVkIHRleHQuXHJcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IFRoZSBub2RlIG9mIHRoZSBsaW5lIHRoYXQgY29udGFpbnMgdGhlIHNlbGVjdGVkIHRleHQgbm9kZS5cclxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IG5ld0lubmVyTm9kZSBUaGUgZG9tIHRoYXQgd2lsbCB3cmFwIHRoZSBzZWxlY3RlZCB0ZXh0IGFyZWFcclxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSB2YWxpZGF0aW9uIENoZWNrIGlmIHRoZSBub2RlIHNob3VsZCBiZSBzdHJpcHBlZC5cclxuICAgICAgICAgKiBAcGFyYW0ge05vZGV9IHN0YXJ0Q29uIFRoZSBzdGFydENvbnRhaW5lciBwcm9wZXJ0eSBvZiB0aGUgc2VsZWN0aW9uIG9iamVjdC5cclxuICAgICAgICAgKiBAcGFyYW0ge051bWJlcn0gc3RhcnRPZmYgVGhlIHN0YXJ0T2Zmc2V0IHByb3BlcnR5IG9mIHRoZSBzZWxlY3Rpb24gb2JqZWN0LlxyXG4gICAgICAgICAqIEBwYXJhbSB7Tm9kZX0gZW5kQ29uIFRoZSBlbmRDb250YWluZXIgcHJvcGVydHkgb2YgdGhlIHNlbGVjdGlvbiBvYmplY3QuXHJcbiAgICAgICAgICogQHBhcmFtIHtOdW1iZXJ9IGVuZE9mZiBUaGUgZW5kT2Zmc2V0IHByb3BlcnR5IG9mIHRoZSBzZWxlY3Rpb24gb2JqZWN0LlxyXG4gICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gaXNSZW1vdmVGb3JtYXQgSXMgdGhlIHJlbW92ZSBhbGwgZm9ybWF0cyBjb21tYW5kP1xyXG4gICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gaXNSZW1vdmVOb2RlIFwibmV3SW5uZXJOb2RlXCIgaXMgcmVtb3ZlIG5vZGU/XHJcbiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSBjb2xsYXBzZWQgcmFuZ2UuY29sbGFwc2VkXHJcbiAgICAgICAgICogQHJldHVybnMge3thbmNlc3RvcjogKiwgc3RhcnRDb250YWluZXI6ICosIHN0YXJ0T2Zmc2V0OiAqLCBlbmRDb250YWluZXI6ICosIGVuZE9mZnNldDogKn19XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfbm9kZUNoYW5nZV9vbmVMaW5lOiBmdW5jdGlvbiAoZWxlbWVudCwgbmV3SW5uZXJOb2RlLCB2YWxpZGF0aW9uLCBzdGFydENvbiwgc3RhcnRPZmYsIGVuZENvbiwgZW5kT2ZmLCBpc1JlbW92ZUZvcm1hdCwgaXNSZW1vdmVOb2RlLCBjb2xsYXBzZWQsIF9yZW1vdmVDaGVjaywgX2dldE1haW50YWluZWROb2RlLCBfaXNNYWludGFpbmVkTm9kZSkge1xyXG4gICAgICAgICAgICAvLyBub3QgYWRkIHRhZ1xyXG4gICAgICAgICAgICBsZXQgcGFyZW50Q29uID0gc3RhcnRDb24ucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgd2hpbGUgKCFwYXJlbnRDb24ubmV4dFNpYmxpbmcgJiYgIXBhcmVudENvbi5wcmV2aW91c1NpYmxpbmcgJiYgIXV0aWwuaXNGb3JtYXRFbGVtZW50KHBhcmVudENvbi5wYXJlbnROb2RlKSAmJiAhdXRpbC5pc1d5c2l3eWdEaXYocGFyZW50Q29uLnBhcmVudE5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50Q29uLm5vZGVOYW1lID09PSBuZXdJbm5lck5vZGUubm9kZU5hbWUpIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgcGFyZW50Q29uID0gcGFyZW50Q29uLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghaXNSZW1vdmVOb2RlICYmIHBhcmVudENvbiA9PT0gZW5kQ29uLnBhcmVudE5vZGUgJiYgcGFyZW50Q29uLm5vZGVOYW1lID09PSBuZXdJbm5lck5vZGUubm9kZU5hbWUpIHtcclxuICAgICAgICAgICAgICAgIGlmICh1dGlsLm9ubHlaZXJvV2lkdGhTcGFjZShzdGFydENvbi50ZXh0Q29udGVudC5zbGljZSgwLCBzdGFydE9mZikpICYmIHV0aWwub25seVplcm9XaWR0aFNwYWNlKGVuZENvbi50ZXh0Q29udGVudC5zbGljZShlbmRPZmYpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gcGFyZW50Q29uLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHNhbWVUYWcgPSB0cnVlO1xyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGNoaWxkcmVuLmxlbmd0aCwgYywgcywgZSwgejsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBjaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgeiA9ICF1dGlsLm9ubHlaZXJvV2lkdGhTcGFjZShjKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09IHN0YXJ0Q29uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID09PSBlbmRDb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCghcyAmJiB6KSB8fCAocyAmJiBlICYmIHopKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1lVGFnID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzYW1lVGFnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwuY29weVRhZ0F0dHJpYnV0ZXMocGFyZW50Q29uLCBuZXdJbm5lck5vZGUpO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRDb250YWluZXI6IHN0YXJ0Q29uLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRPZmZzZXQ6IHN0YXJ0T2ZmLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kQ29udGFpbmVyOiBlbmRDb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRPZmZzZXQ6IGVuZE9mZlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gYWRkIHRhZ1xyXG4gICAgICAgICAgICBfcmVtb3ZlQ2hlY2sudiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBjb25zdCBlbCA9IGVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IG5Ob2RlQXJyYXkgPSBbbmV3SW5uZXJOb2RlXTtcclxuICAgICAgICAgICAgY29uc3QgcE5vZGUgPSBlbGVtZW50LmNsb25lTm9kZShmYWxzZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzU2FtZU5vZGUgPSBzdGFydENvbiA9PT0gZW5kQ29uO1xyXG4gICAgICAgICAgICBsZXQgc3RhcnRDb250YWluZXIgPSBzdGFydENvbjtcclxuICAgICAgICAgICAgbGV0IHN0YXJ0T2Zmc2V0ID0gc3RhcnRPZmY7XHJcbiAgICAgICAgICAgIGxldCBlbmRDb250YWluZXIgPSBlbmRDb247XHJcbiAgICAgICAgICAgIGxldCBlbmRPZmZzZXQgPSBlbmRPZmY7XHJcbiAgICAgICAgICAgIGxldCBzdGFydFBhc3MgPSBmYWxzZTtcclxuICAgICAgICAgICAgbGV0IGVuZFBhc3MgPSBmYWxzZTtcclxuICAgICAgICAgICAgbGV0IHBDdXJyZW50LCBuZXdOb2RlLCBhcHBlbmROb2RlLCBjc3NUZXh0LCBhbmNob3JOb2RlO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgd1JlZ0V4cCA9IF93LlJlZ0V4cDtcclxuICAgICAgICAgICAgZnVuY3Rpb24gY2hlY2tDc3MgKHZOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZWdFeHAgPSBuZXcgd1JlZ0V4cCgnKD86O3xefFxcXFxzKSg/OicgKyBjc3NUZXh0ICsgJ251bGwpXFxcXHMqOlteO10qXFxcXHMqKD86O3wkKScsICdpZycpO1xyXG4gICAgICAgICAgICAgICAgbGV0IHN0eWxlID0gJyc7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHJlZ0V4cCAmJiB2Tm9kZS5zdHlsZS5jc3NUZXh0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBzdHlsZSA9IHJlZ0V4cC50ZXN0KHZOb2RlLnN0eWxlLmNzc1RleHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHJldHVybiAhc3R5bGU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIChmdW5jdGlvbiByZWN1cnNpb25GdW5jKGN1cnJlbnQsIGFuY2VzdG9yKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZE5vZGVzID0gY3VycmVudC5jaGlsZE5vZGVzO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBjaGlsZE5vZGVzLmxlbmd0aCwgdk5vZGU7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjaGlsZCA9IGNoaWxkTm9kZXNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjaGlsZCkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvdmVyTm9kZSA9IGFuY2VzdG9yO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjbG9uZU5vZGU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHN0YXJ0Q29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGFydFBhc3MgJiYgY2hpbGQgPT09IHN0YXJ0Q29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBsaW5lID0gcE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvck5vZGUgPSBfZ2V0TWFpbnRhaW5lZE5vZGUoY2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2Tm9kZSA9IHV0aWwuY3JlYXRlVGV4dE5vZGUoc3RhcnRDb250YWluZXIubm9kZVR5cGUgPT09IDEgPyAnJyA6IHN0YXJ0Q29udGFpbmVyLnN1YnN0cmluZ0RhdGEoMCwgc3RhcnRPZmZzZXQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGV4dE5vZGUgPSB1dGlsLmNyZWF0ZVRleHROb2RlKHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlID09PSAxID8gJycgOiBzdGFydENvbnRhaW5lci5zdWJzdHJpbmdEYXRhKHN0YXJ0T2Zmc2V0LCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NhbWVOb2RlID8gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVuZE9mZnNldCA+PSBzdGFydE9mZnNldCA/IGVuZE9mZnNldCAtIHN0YXJ0T2Zmc2V0IDogc3RhcnRDb250YWluZXIuZGF0YS5sZW5ndGggLSBzdGFydE9mZnNldCkgOiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydENvbnRhaW5lci5kYXRhLmxlbmd0aCAtIHN0YXJ0T2Zmc2V0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbmNob3JOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhID0gX2dldE1haW50YWluZWROb2RlKGFuY2VzdG9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhICYmIGEucGFyZW50Tm9kZSAhPT0gbGluZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtID0gYTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG0ucGFyZW50Tm9kZSAhPT0gbGluZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNlc3RvciA9IHAgPSBtLnBhcmVudE5vZGUuY2xvbmVOb2RlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUobS5jaGlsZE5vZGVzWzBdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLmFwcGVuZENoaWxkKG0uY2hpbGROb2Rlc1swXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbS5hcHBlbmRDaGlsZChwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbSA9IG0ucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbS5wYXJlbnROb2RlLmFwcGVuZENoaWxkKGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yTm9kZSA9IGFuY2hvck5vZGUuY2xvbmVOb2RlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF1dGlsLm9ubHlaZXJvV2lkdGhTcGFjZShwcmV2Tm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yLmFwcGVuZENoaWxkKHByZXZOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldkFuY2hvck5vZGUgPSBfZ2V0TWFpbnRhaW5lZE5vZGUoYW5jZXN0b3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFwcmV2QW5jaG9yTm9kZSkgYW5jaG9yTm9kZSA9IHByZXZBbmNob3JOb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYW5jaG9yTm9kZSkgbGluZSA9IGFuY2hvck5vZGU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdOb2RlID0gY2hpbGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBDdXJyZW50ID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNzc1RleHQgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG5ld05vZGUgIT09IGxpbmUgJiYgbmV3Tm9kZSAhPT0gZWwgJiYgbmV3Tm9kZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdk5vZGUgPSBfaXNNYWludGFpbmVkTm9kZShuZXdOb2RlKSA/IG51bGwgOiB2YWxpZGF0aW9uKG5ld05vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZOb2RlICYmIG5ld05vZGUubm9kZVR5cGUgPT09IDEgJiYgY2hlY2tDc3MobmV3Tm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQ3VycmVudC5wdXNoKHZOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3NUZXh0ICs9IG5ld05vZGUuc3R5bGUuY3NzVGV4dC5zdWJzdHIoMCwgbmV3Tm9kZS5zdHlsZS5jc3NUZXh0LmluZGV4T2YoJzonKSkgKyAnfCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdOb2RlID0gbmV3Tm9kZS5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZE5vZGUgPSBwQ3VycmVudC5wb3AoKSB8fCB0ZXh0Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kTm9kZSA9IG5ld05vZGUgPSBjaGlsZE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwQ3VycmVudC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdOb2RlID0gcEN1cnJlbnQucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmROb2RlLmFwcGVuZENoaWxkKG5ld05vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kTm9kZSA9IG5ld05vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0lubmVyTm9kZS5hcHBlbmRDaGlsZChjaGlsZE5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lLmFwcGVuZENoaWxkKG5ld0lubmVyTm9kZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYW5jaG9yTm9kZSAmJiAhX2dldE1haW50YWluZWROb2RlKGVuZENvbnRhaW5lcikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0lubmVyTm9kZSA9IG5ld0lubmVyTm9kZS5jbG9uZU5vZGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcE5vZGUuYXBwZW5kQ2hpbGQobmV3SW5uZXJOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5Ob2RlQXJyYXkucHVzaChuZXdJbm5lck5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydENvbnRhaW5lciA9IHRleHROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydE9mZnNldCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0UGFzcyA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3Tm9kZSAhPT0gdGV4dE5vZGUpIG5ld05vZGUuYXBwZW5kQ2hpbGQoc3RhcnRDb250YWluZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzU2FtZU5vZGUpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZW5kQ29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFlbmRQYXNzICYmIGNoaWxkID09PSBlbmRDb250YWluZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yTm9kZSA9IF9nZXRNYWludGFpbmVkTm9kZShjaGlsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFmdGVyTm9kZSA9IHV0aWwuY3JlYXRlVGV4dE5vZGUoZW5kQ29udGFpbmVyLm5vZGVUeXBlID09PSAxID8gJycgOiBlbmRDb250YWluZXIuc3Vic3RyaW5nRGF0YShlbmRPZmZzZXQsIChlbmRDb250YWluZXIubGVuZ3RoIC0gZW5kT2Zmc2V0KSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXh0Tm9kZSA9IHV0aWwuY3JlYXRlVGV4dE5vZGUoaXNTYW1lTm9kZSB8fCBlbmRDb250YWluZXIubm9kZVR5cGUgPT09IDEgPyAnJyA6IGVuZENvbnRhaW5lci5zdWJzdHJpbmdEYXRhKDAsIGVuZE9mZnNldCkpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFuY2hvck5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvck5vZGUgPSBhbmNob3JOb2RlLmNsb25lTm9kZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoX2lzTWFpbnRhaW5lZE5vZGUobmV3SW5uZXJOb2RlLnBhcmVudE5vZGUpICYmICFhbmNob3JOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdJbm5lck5vZGUgPSBuZXdJbm5lck5vZGUuY2xvbmVOb2RlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBOb2RlLmFwcGVuZENoaWxkKG5ld0lubmVyTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuTm9kZUFycmF5LnB1c2gobmV3SW5uZXJOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF1dGlsLm9ubHlaZXJvV2lkdGhTcGFjZShhZnRlck5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdOb2RlID0gY2hpbGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3NUZXh0ID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQ3VycmVudCA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYW5jaG9ycyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG5ld05vZGUgIT09IHBOb2RlICYmIG5ld05vZGUgIT09IGVsICYmIG5ld05vZGUgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3Tm9kZS5ub2RlVHlwZSA9PT0gMSAmJiBjaGVja0NzcyhuZXdOb2RlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2lzTWFpbnRhaW5lZE5vZGUobmV3Tm9kZSkpIGFuY2hvcnMucHVzaChuZXdOb2RlLmNsb25lTm9kZShmYWxzZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHBDdXJyZW50LnB1c2gobmV3Tm9kZS5jbG9uZU5vZGUoZmFsc2UpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzVGV4dCArPSBuZXdOb2RlLnN0eWxlLmNzc1RleHQuc3Vic3RyKDAsIG5ld05vZGUuc3R5bGUuY3NzVGV4dC5pbmRleE9mKCc6JykpICsgJ3wnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdOb2RlID0gbmV3Tm9kZS5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcEN1cnJlbnQgPSBwQ3VycmVudC5jb25jYXQoYW5jaG9ycyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvbmVOb2RlID0gYXBwZW5kTm9kZSA9IG5ld05vZGUgPSBwQ3VycmVudC5wb3AoKSB8fCBhZnRlck5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocEN1cnJlbnQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld05vZGUgPSBwQ3VycmVudC5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmROb2RlLmFwcGVuZENoaWxkKG5ld05vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZE5vZGUgPSBuZXdOb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBOb2RlLmFwcGVuZENoaWxkKGNsb25lTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdOb2RlLnRleHRDb250ZW50ID0gYWZ0ZXJOb2RlLmRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbmNob3JOb2RlICYmIGNsb25lTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYWZ0ZXJBbmNob3JOb2RlID0gX2dldE1haW50YWluZWROb2RlKGNsb25lTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWZ0ZXJBbmNob3JOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yTm9kZSA9IGFmdGVyQW5jaG9yTm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Tm9kZSA9IGNoaWxkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwQ3VycmVudCA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjc3NUZXh0ID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChuZXdOb2RlICE9PSBwTm9kZSAmJiBuZXdOb2RlICE9PSBlbCAmJiBuZXdOb2RlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2Tm9kZSA9IF9pc01haW50YWluZWROb2RlKG5ld05vZGUpID8gbnVsbCA6IHZhbGlkYXRpb24obmV3Tm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodk5vZGUgJiYgbmV3Tm9kZS5ub2RlVHlwZSA9PT0gMSAmJiBjaGVja0NzcyhuZXdOb2RlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBDdXJyZW50LnB1c2godk5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzc1RleHQgKz0gbmV3Tm9kZS5zdHlsZS5jc3NUZXh0LnN1YnN0cigwLCBuZXdOb2RlLnN0eWxlLmNzc1RleHQuaW5kZXhPZignOicpKSArICd8JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld05vZGUgPSBuZXdOb2RlLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IHBDdXJyZW50LnBvcCgpIHx8IHRleHROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmROb2RlID0gbmV3Tm9kZSA9IGNoaWxkTm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHBDdXJyZW50Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld05vZGUgPSBwQ3VycmVudC5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZE5vZGUuYXBwZW5kQ2hpbGQobmV3Tm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmROb2RlID0gbmV3Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFuY2hvck5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0lubmVyTm9kZSA9IG5ld0lubmVyTm9kZS5jbG9uZU5vZGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3SW5uZXJOb2RlLmFwcGVuZENoaWxkKGNoaWxkTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3JOb2RlLmluc2VydEJlZm9yZShuZXdJbm5lck5vZGUsIGFuY2hvck5vZGUuZmlyc3RDaGlsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTm9kZS5hcHBlbmRDaGlsZChhbmNob3JOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5Ob2RlQXJyYXkucHVzaChuZXdJbm5lck5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yTm9kZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdJbm5lck5vZGUuYXBwZW5kQ2hpbGQoY2hpbGROb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kQ29udGFpbmVyID0gdGV4dE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZE9mZnNldCA9IHRleHROb2RlLmRhdGEubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRQYXNzID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNSZW1vdmVGb3JtYXQgJiYgY29sbGFwc2VkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdJbm5lck5vZGUgPSB0ZXh0Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHROb2RlLnRleHRDb250ZW50ID0gdXRpbC56ZXJvV2lkdGhTcGFjZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld05vZGUgIT09IHRleHROb2RlKSBuZXdOb2RlLmFwcGVuZENoaWxkKGVuZENvbnRhaW5lcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gb3RoZXJcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnRQYXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC5ub2RlVHlwZSA9PT0gMSAmJiAhdXRpbC5pc0JyZWFrKGNoaWxkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWwuX2lzSWdub3JlTm9kZUNoYW5nZShjaGlsZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTm9kZS5hcHBlbmRDaGlsZChjaGlsZC5jbG9uZU5vZGUodHJ1ZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29sbGFwc2VkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0lubmVyTm9kZSA9IG5ld0lubmVyTm9kZS5jbG9uZU5vZGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTm9kZS5hcHBlbmRDaGlsZChuZXdJbm5lck5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuTm9kZUFycmF5LnB1c2gobmV3SW5uZXJOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Vyc2lvbkZ1bmMoY2hpbGQsIGNoaWxkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdOb2RlID0gY2hpbGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBDdXJyZW50ID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNzc1RleHQgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYW5jaG9ycyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobmV3Tm9kZS5wYXJlbnROb2RlICE9PSBudWxsICYmIG5ld05vZGUgIT09IGVsICYmIG5ld05vZGUgIT09IG5ld0lubmVyTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdk5vZGUgPSBlbmRQYXNzID8gbmV3Tm9kZS5jbG9uZU5vZGUoZmFsc2UpIDogdmFsaWRhdGlvbihuZXdOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdOb2RlLm5vZGVUeXBlID09PSAxICYmICF1dGlsLmlzQnJlYWsoY2hpbGQpICYmIHZOb2RlICYmIGNoZWNrQ3NzKG5ld05vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9pc01haW50YWluZWROb2RlKG5ld05vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYW5jaG9yTm9kZSkgYW5jaG9ycy5wdXNoKHZOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQ3VycmVudC5wdXNoKHZOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzVGV4dCArPSBuZXdOb2RlLnN0eWxlLmNzc1RleHQuc3Vic3RyKDAsIG5ld05vZGUuc3R5bGUuY3NzVGV4dC5pbmRleE9mKCc6JykpICsgJ3wnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Tm9kZSA9IG5ld05vZGUucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwQ3VycmVudCA9IHBDdXJyZW50LmNvbmNhdChhbmNob3JzKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IHBDdXJyZW50LnBvcCgpIHx8IGNoaWxkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmROb2RlID0gbmV3Tm9kZSA9IGNoaWxkTm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHBDdXJyZW50Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld05vZGUgPSBwQ3VycmVudC5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZE5vZGUuYXBwZW5kQ2hpbGQobmV3Tm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmROb2RlID0gbmV3Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9pc01haW50YWluZWROb2RlKG5ld0lubmVyTm9kZS5wYXJlbnROb2RlKSAmJiAhX2lzTWFpbnRhaW5lZE5vZGUoY2hpbGROb2RlKSAmJiAhdXRpbC5vbmx5WmVyb1dpZHRoU3BhY2UobmV3SW5uZXJOb2RlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3SW5uZXJOb2RlID0gbmV3SW5uZXJOb2RlLmNsb25lTm9kZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTm9kZS5hcHBlbmRDaGlsZChuZXdJbm5lck5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbk5vZGVBcnJheS5wdXNoKG5ld0lubmVyTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZW5kUGFzcyAmJiAhYW5jaG9yTm9kZSAmJiBfaXNNYWludGFpbmVkTm9kZShjaGlsZE5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdJbm5lck5vZGUgPSBuZXdJbm5lck5vZGUuY2xvbmVOb2RlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFDaGlsZHJlbiA9IGNoaWxkTm9kZS5jaGlsZE5vZGVzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgYSA9IDAsIGFMZW4gPSBhQ2hpbGRyZW4ubGVuZ3RoOyBhIDwgYUxlbjsgYSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3SW5uZXJOb2RlLmFwcGVuZENoaWxkKGFDaGlsZHJlblthXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZE5vZGUuYXBwZW5kQ2hpbGQobmV3SW5uZXJOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBOb2RlLmFwcGVuZENoaWxkKGNoaWxkTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuTm9kZUFycmF5LnB1c2gobmV3SW5uZXJOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdJbm5lck5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkgYW5jZXN0b3IgPSBuZXdOb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBhbmNlc3RvciA9IG5ld0lubmVyTm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZE5vZGUgPT09IGNoaWxkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWVuZFBhc3MpIGFuY2VzdG9yID0gbmV3SW5uZXJOb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBhbmNlc3RvciA9IHBOb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVuZFBhc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBOb2RlLmFwcGVuZENoaWxkKGNoaWxkTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNlc3RvciA9IG5ld05vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdJbm5lck5vZGUuYXBwZW5kQ2hpbGQoY2hpbGROb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yID0gbmV3Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFuY2hvck5vZGUgJiYgY2hpbGQubm9kZVR5cGUgPT09IDMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfZ2V0TWFpbnRhaW5lZE5vZGUoY2hpbGQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYW5jZXN0b3JBbmNob3JOb2RlID0gdXRpbC5nZXRQYXJlbnRFbGVtZW50KGFuY2VzdG9yLCBmdW5jdGlvbiAoY3VycmVudCkge3JldHVybiB0aGlzLl9pc01haW50YWluZWROb2RlKGN1cnJlbnQucGFyZW50Tm9kZSkgfHwgY3VycmVudC5wYXJlbnROb2RlID09PSBwTm9kZTt9LmJpbmQodXRpbCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvck5vZGUuYXBwZW5kQ2hpbGQoYW5jZXN0b3JBbmNob3JOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdJbm5lck5vZGUgPSBhbmNlc3RvckFuY2hvck5vZGUuY2xvbmVOb2RlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuTm9kZUFycmF5LnB1c2gobmV3SW5uZXJOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTm9kZS5hcHBlbmRDaGlsZChuZXdJbm5lck5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3JOb2RlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2xvbmVOb2RlID0gY2hpbGQuY2xvbmVOb2RlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICBhbmNlc3Rvci5hcHBlbmRDaGlsZChjbG9uZU5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC5ub2RlVHlwZSA9PT0gMSAmJiAhdXRpbC5pc0JyZWFrKGNoaWxkKSkgY292ZXJOb2RlID0gY2xvbmVOb2RlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICByZWN1cnNpb25GdW5jKGNoaWxkLCBjb3Zlck5vZGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KShlbGVtZW50LCBwTm9kZSk7XHJcblxyXG4gICAgICAgICAgICAvLyBub3QgcmVtb3ZlIHRhZ1xyXG4gICAgICAgICAgICBpZiAoaXNSZW1vdmVOb2RlICYmICFpc1JlbW92ZUZvcm1hdCAmJiAhX3JlbW92ZUNoZWNrLnYpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYW5jZXN0b3I6IGVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRDb250YWluZXI6IHN0YXJ0Q29uLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0T2Zmc2V0OiBzdGFydE9mZixcclxuICAgICAgICAgICAgICAgICAgICBlbmRDb250YWluZXI6IGVuZENvbixcclxuICAgICAgICAgICAgICAgICAgICBlbmRPZmZzZXQ6IGVuZE9mZlxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaXNSZW1vdmVGb3JtYXQgPSBpc1JlbW92ZUZvcm1hdCAmJiBpc1JlbW92ZU5vZGU7XHJcblxyXG4gICAgICAgICAgICBpZiAoaXNSZW1vdmVGb3JtYXQpIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbk5vZGVBcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCByZW1vdmVOb2RlID0gbk5vZGVBcnJheVtpXTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdGV4dE5vZGUsIHRleHROb2RlX3MsIHRleHROb2RlX2U7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbGxhcHNlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0Tm9kZSA9IHV0aWwuY3JlYXRlVGV4dE5vZGUodXRpbC56ZXJvV2lkdGhTcGFjZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBOb2RlLnJlcGxhY2VDaGlsZCh0ZXh0Tm9kZSwgcmVtb3ZlTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgckNoaWxkcmVuID0gcmVtb3ZlTm9kZS5jaGlsZE5vZGVzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0Tm9kZV9zID0gckNoaWxkcmVuWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAockNoaWxkcmVuWzBdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0Tm9kZV9lID0gckNoaWxkcmVuWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcE5vZGUuaW5zZXJ0QmVmb3JlKHRleHROb2RlX2UsIHJlbW92ZU5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlSXRlbShyZW1vdmVOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2xsYXBzZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0Q29udGFpbmVyID0gZW5kQ29udGFpbmVyID0gdGV4dE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydENvbnRhaW5lciA9IHRleHROb2RlX3M7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRDb250YWluZXIgPSB0ZXh0Tm9kZV9lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzUmVtb3ZlTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbk5vZGVBcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdHJpcFJlbW92ZU5vZGUobk5vZGVBcnJheVtpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBpZiAoY29sbGFwc2VkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRDb250YWluZXIgPSBlbmRDb250YWluZXIgPSBuZXdJbm5lck5vZGU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHV0aWwucmVtb3ZlRW1wdHlOb2RlKHBOb2RlLCBuZXdJbm5lck5vZGUpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNvbGxhcHNlZCkge1xyXG4gICAgICAgICAgICAgICAgc3RhcnRPZmZzZXQgPSBzdGFydENvbnRhaW5lci50ZXh0Q29udGVudC5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICBlbmRPZmZzZXQgPSBlbmRDb250YWluZXIudGV4dENvbnRlbnQubGVuZ3RoO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBlbmRDb250YWluZXIgcmVzZXRcclxuICAgICAgICAgICAgY29uc3QgZW5kQ29uUmVzZXQgPSBpc1JlbW92ZUZvcm1hdCB8fCBlbmRDb250YWluZXIudGV4dENvbnRlbnQubGVuZ3RoID09PSAwO1xyXG5cclxuICAgICAgICAgICAgaWYgKCF1dGlsLmlzQnJlYWsoZW5kQ29udGFpbmVyKSAmJiBlbmRDb250YWluZXIudGV4dENvbnRlbnQubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUl0ZW0oZW5kQ29udGFpbmVyKTtcclxuICAgICAgICAgICAgICAgIGVuZENvbnRhaW5lciA9IHN0YXJ0Q29udGFpbmVyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVuZE9mZnNldCA9IGVuZENvblJlc2V0ID8gZW5kQ29udGFpbmVyLnRleHRDb250ZW50Lmxlbmd0aCA6IGVuZE9mZnNldDtcclxuXHJcbiAgICAgICAgICAgIC8vIG5vZGUgY2hhbmdlXHJcbiAgICAgICAgICAgIGNvbnN0IG5ld1N0YXJ0T2Zmc2V0ID0ge3M6IDAsIGU6IDB9O1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydFBhdGggPSB1dGlsLmdldE5vZGVQYXRoKHN0YXJ0Q29udGFpbmVyLCBwTm9kZSwgbmV3U3RhcnRPZmZzZXQpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgbWVyZ2VFbmRDb24gPSAhZW5kQ29udGFpbmVyLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgIGlmIChtZXJnZUVuZENvbikgZW5kQ29udGFpbmVyID0gc3RhcnRDb250YWluZXI7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld0VuZE9mZnNldCA9IHtzOiAwLCBlOiAwfTtcclxuICAgICAgICAgICAgY29uc3QgZW5kUGF0aCA9IHV0aWwuZ2V0Tm9kZVBhdGgoZW5kQ29udGFpbmVyICwgcE5vZGUsICghbWVyZ2VFbmRDb24gJiYgIWVuZENvblJlc2V0KSA/IG5ld0VuZE9mZnNldCA6IG51bGwpO1xyXG5cclxuICAgICAgICAgICAgc3RhcnRPZmZzZXQgKz0gbmV3U3RhcnRPZmZzZXQucztcclxuICAgICAgICAgICAgZW5kT2Zmc2V0ID0gKGNvbGxhcHNlZCA/IHN0YXJ0T2Zmc2V0IDogbWVyZ2VFbmRDb24gPyBzdGFydENvbnRhaW5lci50ZXh0Q29udGVudC5sZW5ndGggOiBlbmRDb25SZXNldCA/IGVuZE9mZnNldCArIG5ld1N0YXJ0T2Zmc2V0LnMgOiBlbmRPZmZzZXQgKyBuZXdFbmRPZmZzZXQucyk7XHJcblxyXG4gICAgICAgICAgICAvLyB0YWcgbWVyZ2VcclxuICAgICAgICAgICAgY29uc3QgbmV3T2Zmc2V0cyA9IHV0aWwubWVyZ2VTYW1lVGFncyhwTm9kZSwgW3N0YXJ0UGF0aCwgZW5kUGF0aF0sIHRydWUpO1xyXG5cclxuICAgICAgICAgICAgZWxlbWVudC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChwTm9kZSwgZWxlbWVudCk7XHJcblxyXG4gICAgICAgICAgICBzdGFydENvbnRhaW5lciA9IHV0aWwuZ2V0Tm9kZUZyb21QYXRoKHN0YXJ0UGF0aCwgcE5vZGUpO1xyXG4gICAgICAgICAgICBlbmRDb250YWluZXIgPSB1dGlsLmdldE5vZGVGcm9tUGF0aChlbmRQYXRoLCBwTm9kZSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgYW5jZXN0b3I6IHBOb2RlLFxyXG4gICAgICAgICAgICAgICAgc3RhcnRDb250YWluZXI6IHN0YXJ0Q29udGFpbmVyLFxyXG4gICAgICAgICAgICAgICAgc3RhcnRPZmZzZXQ6IHN0YXJ0T2Zmc2V0ICsgbmV3T2Zmc2V0c1swXSxcclxuICAgICAgICAgICAgICAgIGVuZENvbnRhaW5lcjogZW5kQ29udGFpbmVyLFxyXG4gICAgICAgICAgICAgICAgZW5kT2Zmc2V0OiBlbmRPZmZzZXQgKyBuZXdPZmZzZXRzWzFdXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIHdyYXBzIGZpcnN0IGxpbmUgc2VsZWN0ZWQgdGV4dC5cclxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgVGhlIG5vZGUgb2YgdGhlIGxpbmUgdGhhdCBjb250YWlucyB0aGUgc2VsZWN0ZWQgdGV4dCBub2RlLlxyXG4gICAgICAgICAqIEBwYXJhbSB7RWxlbWVudH0gbmV3SW5uZXJOb2RlIFRoZSBkb20gdGhhdCB3aWxsIHdyYXAgdGhlIHNlbGVjdGVkIHRleHQgYXJlYVxyXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHZhbGlkYXRpb24gQ2hlY2sgaWYgdGhlIG5vZGUgc2hvdWxkIGJlIHN0cmlwcGVkLlxyXG4gICAgICAgICAqIEBwYXJhbSB7Tm9kZX0gc3RhcnRDb24gVGhlIHN0YXJ0Q29udGFpbmVyIHByb3BlcnR5IG9mIHRoZSBzZWxlY3Rpb24gb2JqZWN0LlxyXG4gICAgICAgICAqIEBwYXJhbSB7TnVtYmVyfSBzdGFydE9mZiBUaGUgc3RhcnRPZmZzZXQgcHJvcGVydHkgb2YgdGhlIHNlbGVjdGlvbiBvYmplY3QuXHJcbiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSBpc1JlbW92ZUZvcm1hdCBJcyB0aGUgcmVtb3ZlIGFsbCBmb3JtYXRzIGNvbW1hbmQ/XHJcbiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSBpc1JlbW92ZU5vZGUgXCJuZXdJbm5lck5vZGVcIiBpcyByZW1vdmUgbm9kZT9cclxuICAgICAgICAgKiBAcmV0dXJucyB7bnVsbHxOb2RlfSBJZiBlbmQgY29udGFpbmVyIGlzIHJlbmV3ZWQsIHJldHVybmVkIHJlbmV3ZWQgbm9kZVxyXG4gICAgICAgICAqIEByZXR1cm5zIHtPYmplY3R9IHsgYW5jZXN0b3IsIGNvbnRhaW5lciwgb2Zmc2V0LCBlbmRDb250YWluZXIgfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX25vZGVDaGFuZ2Vfc3RhcnRMaW5lOiBmdW5jdGlvbiAoZWxlbWVudCwgbmV3SW5uZXJOb2RlLCB2YWxpZGF0aW9uLCBzdGFydENvbiwgc3RhcnRPZmYsIGlzUmVtb3ZlRm9ybWF0LCBpc1JlbW92ZU5vZGUsIF9yZW1vdmVDaGVjaywgX2dldE1haW50YWluZWROb2RlLCBfaXNNYWludGFpbmVkTm9kZSwgX2VuZENvbnRhaW5lcikge1xyXG4gICAgICAgICAgICAvLyBub3QgYWRkIHRhZ1xyXG4gICAgICAgICAgICBsZXQgcGFyZW50Q29uID0gc3RhcnRDb24ucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgd2hpbGUgKCFwYXJlbnRDb24ubmV4dFNpYmxpbmcgJiYgIXBhcmVudENvbi5wcmV2aW91c1NpYmxpbmcgJiYgIXV0aWwuaXNGb3JtYXRFbGVtZW50KHBhcmVudENvbi5wYXJlbnROb2RlKSAmJiAhdXRpbC5pc1d5c2l3eWdEaXYocGFyZW50Q29uLnBhcmVudE5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50Q29uLm5vZGVOYW1lID09PSBuZXdJbm5lck5vZGUubm9kZU5hbWUpIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgcGFyZW50Q29uID0gcGFyZW50Q29uLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghaXNSZW1vdmVOb2RlICYmIHBhcmVudENvbi5ub2RlTmFtZSA9PT0gbmV3SW5uZXJOb2RlLm5vZGVOYW1lICYmICF1dGlsLmlzRm9ybWF0RWxlbWVudChwYXJlbnRDb24pICYmICFwYXJlbnRDb24ubmV4dFNpYmxpbmcgJiYgdXRpbC5vbmx5WmVyb1dpZHRoU3BhY2Uoc3RhcnRDb24udGV4dENvbnRlbnQuc2xpY2UoMCwgc3RhcnRPZmYpKSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHNhbWVUYWcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgbGV0IHMgPSBzdGFydENvbi5wcmV2aW91c1NpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAocykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdXRpbC5vbmx5WmVyb1dpZHRoU3BhY2UocykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2FtZVRhZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcyA9IHMucHJldmlvdXNTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChzYW1lVGFnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXRpbC5jb3B5VGFnQXR0cmlidXRlcyhwYXJlbnRDb24sIG5ld0lubmVyTm9kZSk7XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbmNlc3RvcjogZWxlbWVudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyOiBzdGFydENvbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiBzdGFydE9mZlxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGFkZCB0YWdcclxuICAgICAgICAgICAgX3JlbW92ZUNoZWNrLnYgPSBmYWxzZTtcclxuICAgICAgICAgICAgY29uc3QgZWwgPSBlbGVtZW50O1xyXG4gICAgICAgICAgICBjb25zdCBuTm9kZUFycmF5ID0gW25ld0lubmVyTm9kZV07XHJcbiAgICAgICAgICAgIGNvbnN0IHBOb2RlID0gZWxlbWVudC5jbG9uZU5vZGUoZmFsc2UpO1xyXG5cclxuICAgICAgICAgICAgbGV0IGNvbnRhaW5lciA9IHN0YXJ0Q29uO1xyXG4gICAgICAgICAgICBsZXQgb2Zmc2V0ID0gc3RhcnRPZmY7XHJcbiAgICAgICAgICAgIGxldCBwYXNzTm9kZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBsZXQgcEN1cnJlbnQsIG5ld05vZGUsIGFwcGVuZE5vZGUsIGFuY2hvck5vZGU7XHJcblxyXG4gICAgICAgICAgICAoZnVuY3Rpb24gcmVjdXJzaW9uRnVuYyhjdXJyZW50LCBhbmNlc3Rvcikge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGROb2RlcyA9IGN1cnJlbnQuY2hpbGROb2RlcztcclxuXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gY2hpbGROb2Rlcy5sZW5ndGgsIHZOb2RlLCBjbG9uZUNoaWxkOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZCA9IGNoaWxkTm9kZXNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjaGlsZCkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvdmVyTm9kZSA9IGFuY2VzdG9yO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAocGFzc05vZGUgJiYgIXV0aWwuaXNCcmVhayhjaGlsZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLm5vZGVUeXBlID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXRpbC5faXNJZ25vcmVOb2RlQ2hhbmdlKGNoaWxkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0lubmVyTm9kZSA9IG5ld0lubmVyTm9kZS5jbG9uZU5vZGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb25lQ2hpbGQgPSBjaGlsZC5jbG9uZU5vZGUodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcE5vZGUuYXBwZW5kQ2hpbGQoY2xvbmVDaGlsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcE5vZGUuYXBwZW5kQ2hpbGQobmV3SW5uZXJOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuTm9kZUFycmF5LnB1c2gobmV3SW5uZXJOb2RlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZW5kIGNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfZW5kQ29udGFpbmVyICYmIGNoaWxkLmNvbnRhaW5zKF9lbmRDb250YWluZXIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZFBhdGggPSB1dGlsLmdldE5vZGVQYXRoKF9lbmRDb250YWluZXIsIGNoaWxkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VuZENvbnRhaW5lciA9IHV0aWwuZ2V0Tm9kZUZyb21QYXRoKGVuZFBhdGgsIGNsb25lQ2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdXJzaW9uRnVuYyhjaGlsZCwgY2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld05vZGUgPSBjaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcEN1cnJlbnQgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYW5jaG9ycyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobmV3Tm9kZS5wYXJlbnROb2RlICE9PSBudWxsICYmIG5ld05vZGUgIT09IGVsICYmIG5ld05vZGUgIT09IG5ld0lubmVyTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdk5vZGUgPSB2YWxpZGF0aW9uKG5ld05vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld05vZGUubm9kZVR5cGUgPT09IDEgJiYgdk5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2lzTWFpbnRhaW5lZE5vZGUobmV3Tm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhbmNob3JOb2RlKSBhbmNob3JzLnB1c2godk5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBDdXJyZW50LnB1c2godk5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld05vZGUgPSBuZXdOb2RlLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcEN1cnJlbnQgPSBwQ3VycmVudC5jb25jYXQoYW5jaG9ycyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc1RvcE5vZGUgPSBwQ3VycmVudC5sZW5ndGggPiAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZE5vZGUgPSBwQ3VycmVudC5wb3AoKSB8fCBjaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kTm9kZSA9IG5ld05vZGUgPSBjaGlsZE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwQ3VycmVudC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdOb2RlID0gcEN1cnJlbnQucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmROb2RlLmFwcGVuZENoaWxkKG5ld05vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kTm9kZSA9IG5ld05vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfaXNNYWludGFpbmVkTm9kZShuZXdJbm5lck5vZGUucGFyZW50Tm9kZSkgJiYgIV9pc01haW50YWluZWROb2RlKGNoaWxkTm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0lubmVyTm9kZSA9IG5ld0lubmVyTm9kZS5jbG9uZU5vZGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcE5vZGUuYXBwZW5kQ2hpbGQobmV3SW5uZXJOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5Ob2RlQXJyYXkucHVzaChuZXdJbm5lck5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFuY2hvck5vZGUgJiYgX2lzTWFpbnRhaW5lZE5vZGUoY2hpbGROb2RlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3SW5uZXJOb2RlID0gbmV3SW5uZXJOb2RlLmNsb25lTm9kZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhQ2hpbGRyZW4gPSBjaGlsZE5vZGUuY2hpbGROb2RlcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGEgPSAwLCBhTGVuID0gYUNoaWxkcmVuLmxlbmd0aDsgYSA8IGFMZW47IGErKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0lubmVyTm9kZS5hcHBlbmRDaGlsZChhQ2hpbGRyZW5bYV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGROb2RlLmFwcGVuZENoaWxkKG5ld0lubmVyTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTm9kZS5hcHBlbmRDaGlsZChjaGlsZE5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jZXN0b3IgPSAhX2lzTWFpbnRhaW5lZE5vZGUobmV3Tm9kZSkgPyBuZXdOb2RlIDogbmV3SW5uZXJOb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbk5vZGVBcnJheS5wdXNoKG5ld0lubmVyTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNUb3BOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdJbm5lck5vZGUuYXBwZW5kQ2hpbGQoY2hpbGROb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yID0gbmV3Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yID0gbmV3SW5uZXJOb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYW5jaG9yTm9kZSAmJiBjaGlsZC5ub2RlVHlwZSA9PT0gMykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9nZXRNYWludGFpbmVkTm9kZShjaGlsZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhbmNlc3RvckFuY2hvck5vZGUgPSB1dGlsLmdldFBhcmVudEVsZW1lbnQoYW5jZXN0b3IsIGZ1bmN0aW9uIChjdXJyZW50KSB7cmV0dXJuIHRoaXMuX2lzTWFpbnRhaW5lZE5vZGUoY3VycmVudC5wYXJlbnROb2RlKSB8fCBjdXJyZW50LnBhcmVudE5vZGUgPT09IHBOb2RlO30uYmluZCh1dGlsKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yTm9kZS5hcHBlbmRDaGlsZChhbmNlc3RvckFuY2hvck5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0lubmVyTm9kZSA9IGFuY2VzdG9yQW5jaG9yTm9kZS5jbG9uZU5vZGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5Ob2RlQXJyYXkucHVzaChuZXdJbm5lck5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBOb2RlLmFwcGVuZENoaWxkKG5ld0lubmVyTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvck5vZGUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBzdGFydENvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghcGFzc05vZGUgJiYgY2hpbGQgPT09IGNvbnRhaW5lcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbGluZSA9IHBOb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbmNob3JOb2RlID0gX2dldE1haW50YWluZWROb2RlKGNoaWxkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldk5vZGUgPSB1dGlsLmNyZWF0ZVRleHROb2RlKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gMSA/ICcnIDogY29udGFpbmVyLnN1YnN0cmluZ0RhdGEoMCwgb2Zmc2V0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRleHROb2RlID0gdXRpbC5jcmVhdGVUZXh0Tm9kZShjb250YWluZXIubm9kZVR5cGUgPT09IDEgPyAnJyA6IGNvbnRhaW5lci5zdWJzdHJpbmdEYXRhKG9mZnNldCwgKGNvbnRhaW5lci5sZW5ndGggLSBvZmZzZXQpKSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYW5jaG9yTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYSA9IF9nZXRNYWludGFpbmVkTm9kZShhbmNlc3Rvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSAmJiBhLnBhcmVudE5vZGUgIT09IGxpbmUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbSA9IGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHAgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChtLnBhcmVudE5vZGUgIT09IGxpbmUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jZXN0b3IgPSBwID0gbS5wYXJlbnROb2RlLmNsb25lTm9kZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlKG0uY2hpbGROb2Rlc1swXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC5hcHBlbmRDaGlsZChtLmNoaWxkTm9kZXNbMF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0uYXBwZW5kQ2hpbGQocCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0gPSBtLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0ucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvck5vZGUgPSBhbmNob3JOb2RlLmNsb25lTm9kZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdXRpbC5vbmx5WmVyb1dpZHRoU3BhY2UocHJldk5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNlc3Rvci5hcHBlbmRDaGlsZChwcmV2Tm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXZBbmNob3JOb2RlID0gX2dldE1haW50YWluZWROb2RlKGFuY2VzdG9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhcHJldkFuY2hvck5vZGUpIGFuY2hvck5vZGUgPSBwcmV2QW5jaG9yTm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFuY2hvck5vZGUpIGxpbmUgPSBhbmNob3JOb2RlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Tm9kZSA9IGFuY2VzdG9yO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwQ3VycmVudCA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobmV3Tm9kZSAhPT0gbGluZSAmJiBuZXdOb2RlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2Tm9kZSA9IHZhbGlkYXRpb24obmV3Tm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3Tm9kZS5ub2RlVHlwZSA9PT0gMSAmJiB2Tm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBDdXJyZW50LnB1c2godk5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Tm9kZSA9IG5ld05vZGUucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGROb2RlID0gcEN1cnJlbnQucG9wKCkgfHwgYW5jZXN0b3I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZE5vZGUgPSBuZXdOb2RlID0gY2hpbGROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocEN1cnJlbnQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Tm9kZSA9IHBDdXJyZW50LnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kTm9kZS5hcHBlbmRDaGlsZChuZXdOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZE5vZGUgPSBuZXdOb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGROb2RlICE9PSBhbmNlc3Rvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3SW5uZXJOb2RlLmFwcGVuZENoaWxkKGNoaWxkTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNlc3RvciA9IG5ld05vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNlc3RvciA9IG5ld0lubmVyTm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNCcmVhayhjaGlsZCkpIG5ld0lubmVyTm9kZS5hcHBlbmRDaGlsZChjaGlsZC5jbG9uZU5vZGUoZmFsc2UpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGluZS5hcHBlbmRDaGlsZChuZXdJbm5lck5vZGUpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyID0gdGV4dE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3NOb2RlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yLmFwcGVuZENoaWxkKGNvbnRhaW5lcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdk5vZGUgPSAhcGFzc05vZGUgPyBjaGlsZC5jbG9uZU5vZGUoZmFsc2UpIDogdmFsaWRhdGlvbihjaGlsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yLmFwcGVuZENoaWxkKHZOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLm5vZGVUeXBlID09PSAxICYmICF1dGlsLmlzQnJlYWsoY2hpbGQpKSBjb3Zlck5vZGUgPSB2Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJlY3Vyc2lvbkZ1bmMoY2hpbGQsIGNvdmVyTm9kZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pKGVsZW1lbnQsIHBOb2RlKTtcclxuXHJcbiAgICAgICAgICAgIC8vIG5vdCByZW1vdmUgdGFnXHJcbiAgICAgICAgICAgIGlmIChpc1JlbW92ZU5vZGUgJiYgIWlzUmVtb3ZlRm9ybWF0ICYmICFfcmVtb3ZlQ2hlY2sudikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBhbmNlc3RvcjogZWxlbWVudCxcclxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXI6IHN0YXJ0Q29uLFxyXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldDogc3RhcnRPZmYsXHJcbiAgICAgICAgICAgICAgICAgICAgZW5kQ29udGFpbmVyOiBfZW5kQ29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpc1JlbW92ZUZvcm1hdCA9IGlzUmVtb3ZlRm9ybWF0ICYmIGlzUmVtb3ZlTm9kZTtcclxuXHJcbiAgICAgICAgICAgIGlmIChpc1JlbW92ZUZvcm1hdCkge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuTm9kZUFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlbW92ZU5vZGUgPSBuTm9kZUFycmF5W2ldO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByQ2hpbGRyZW4gPSByZW1vdmVOb2RlLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGV4dE5vZGUgPSByQ2hpbGRyZW5bMF07XHJcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHJDaGlsZHJlblswXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwTm9kZS5pbnNlcnRCZWZvcmUockNoaWxkcmVuWzBdLCByZW1vdmVOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtKHJlbW92ZU5vZGUpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gMCkgY29udGFpbmVyID0gdGV4dE5vZGU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNSZW1vdmVOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdJbm5lck5vZGUgPSBuZXdJbm5lck5vZGUuZmlyc3RDaGlsZDtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbk5vZGVBcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0cmlwUmVtb3ZlTm9kZShuTm9kZUFycmF5W2ldKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFpc1JlbW92ZUZvcm1hdCAmJiBwTm9kZS5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuY2hpbGROb2Rlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lciA9IGVsZW1lbnQuY2hpbGROb2Rlc1swXTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyID0gdXRpbC5jcmVhdGVUZXh0Tm9kZSh1dGlsLnplcm9XaWR0aFNwYWNlKTtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUVtcHR5Tm9kZShwTm9kZSwgbmV3SW5uZXJOb2RlKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodXRpbC5vbmx5WmVyb1dpZHRoU3BhY2UocE5vZGUudGV4dENvbnRlbnQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyID0gcE5vZGUuZmlyc3RDaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSAwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIG5vZGUgY2hhbmdlXHJcbiAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXRzID0ge3M6IDAsIGU6IDB9O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IHV0aWwuZ2V0Tm9kZVBhdGgoY29udGFpbmVyLCBwTm9kZSwgb2Zmc2V0cyk7XHJcbiAgICAgICAgICAgICAgICBvZmZzZXQgKz0gb2Zmc2V0cy5zO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIHRhZyBtZXJnZVxyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3T2Zmc2V0cyA9IHV0aWwubWVyZ2VTYW1lVGFncyhwTm9kZSwgW3BhdGhdLCB0cnVlKTtcclxuXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50LnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKHBOb2RlLCBlbGVtZW50KTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb250YWluZXIgPSB1dGlsLmdldE5vZGVGcm9tUGF0aChwYXRoLCBwTm9kZSk7XHJcbiAgICAgICAgICAgICAgICBvZmZzZXQgKz0gbmV3T2Zmc2V0c1swXTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGFuY2VzdG9yOiBwTm9kZSxcclxuICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogY29udGFpbmVyLFxyXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiBvZmZzZXQsXHJcbiAgICAgICAgICAgICAgICBlbmRDb250YWluZXI6IF9lbmRDb250YWluZXJcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gd3JhcHMgbWlkIGxpbmVzIHNlbGVjdGVkIHRleHQuXHJcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IFRoZSBub2RlIG9mIHRoZSBsaW5lIHRoYXQgY29udGFpbnMgdGhlIHNlbGVjdGVkIHRleHQgbm9kZS5cclxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IG5ld0lubmVyTm9kZSBUaGUgZG9tIHRoYXQgd2lsbCB3cmFwIHRoZSBzZWxlY3RlZCB0ZXh0IGFyZWFcclxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSB2YWxpZGF0aW9uIENoZWNrIGlmIHRoZSBub2RlIHNob3VsZCBiZSBzdHJpcHBlZC5cclxuICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGlzUmVtb3ZlRm9ybWF0IElzIHRoZSByZW1vdmUgYWxsIGZvcm1hdHMgY29tbWFuZD9cclxuICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGlzUmVtb3ZlTm9kZSBcIm5ld0lubmVyTm9kZVwiIGlzIHJlbW92ZSBub2RlP1xyXG4gICAgICAgICAqIEBwYXJhbSB7Tm9kZX0gX2VuZENvbnRhaW5lciBPZmZzZXQgbm9kZSBvZiBsYXN0IGxpbmUgYWxyZWFkeSBtb2RpZmllZCAoZW5kLmNvbnRhaW5lcilcclxuICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSB7IGFuY2VzdG9yLCBlbmRDb250YWluZXI6IFwiSWYgZW5kIGNvbnRhaW5lciBpcyByZW5ld2VkLCByZXR1cm5lZCByZW5ld2VkIG5vZGVcIiB9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfbm9kZUNoYW5nZV9taWRkbGVMaW5lOiBmdW5jdGlvbiAoZWxlbWVudCwgbmV3SW5uZXJOb2RlLCB2YWxpZGF0aW9uLCBpc1JlbW92ZUZvcm1hdCwgaXNSZW1vdmVOb2RlLCBfcmVtb3ZlQ2hlY2ssIF9lbmRDb250YWluZXIpIHtcclxuICAgICAgICAgICAgLy8gbm90IGFkZCB0YWdcclxuICAgICAgICAgICAgaWYgKCFpc1JlbW92ZU5vZGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIGVuZCBjb250YWluZXIgcGF0aFxyXG4gICAgICAgICAgICAgICAgbGV0IGVuZFBhdGggPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgaWYgKF9lbmRDb250YWluZXIgJiYgZWxlbWVudC5jb250YWlucyhfZW5kQ29udGFpbmVyKSkgZW5kUGF0aCA9IHV0aWwuZ2V0Tm9kZVBhdGgoX2VuZENvbnRhaW5lciwgZWxlbWVudCk7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgdGVtcE5vZGUgPSBlbGVtZW50LmNsb25lTm9kZSh0cnVlKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld05vZGVOYW1lID0gbmV3SW5uZXJOb2RlLm5vZGVOYW1lO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Q3NzVGV4dCA9IG5ld0lubmVyTm9kZS5zdHlsZS5jc3NUZXh0O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Q2xhc3MgPSBuZXdJbm5lck5vZGUuY2xhc3NOYW1lO1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBjaGlsZHJlbiA9IHRlbXBOb2RlLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgICAgICAgICBsZXQgaSA9IDAsIGxlbiA9IGNoaWxkcmVuLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGNoaWxkOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjaGlsZCA9IGNoaWxkcmVuW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC5ub2RlVHlwZSA9PT0gMykgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLm5vZGVOYW1lID09PSBuZXdOb2RlTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC5zdHlsZS5jc3NUZXh0ICs9IG5ld0Nzc1RleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwuYWRkQ2xhc3MoY2hpbGQsIG5ld0NsYXNzKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF1dGlsLmlzQnJlYWsoY2hpbGQpICYmIHV0aWwuX2lzSWdub3JlTm9kZUNoYW5nZShjaGlsZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsZW4gPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4gPSBjaGlsZC5jaGlsZE5vZGVzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZW4gPSBjaGlsZHJlbi5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAtMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChsZW4gPiAwICYmIGkgPT09IGxlbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gdGVtcE5vZGUuaW5uZXJIVE1MO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yOiBlbGVtZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRDb250YWluZXI6IGVuZFBhdGggPyB1dGlsLmdldE5vZGVGcm9tUGF0aChlbmRQYXRoLCBlbGVtZW50KSA6IG51bGxcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBhZGQgdGFnXHJcbiAgICAgICAgICAgIF9yZW1vdmVDaGVjay52ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGNvbnN0IHBOb2RlID0gZWxlbWVudC5jbG9uZU5vZGUoZmFsc2UpO1xyXG4gICAgICAgICAgICBjb25zdCBuTm9kZUFycmF5ID0gW25ld0lubmVyTm9kZV07XHJcbiAgICAgICAgICAgIGxldCBub25lQ2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIChmdW5jdGlvbiByZWN1cnNpb25GdW5jKGN1cnJlbnQsIGFuY2VzdG9yKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZE5vZGVzID0gY3VycmVudC5jaGlsZE5vZGVzO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBjaGlsZE5vZGVzLmxlbmd0aCwgdk5vZGUsIGNsb25lQ2hpbGQ7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjaGlsZCA9IGNoaWxkTm9kZXNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjaGlsZCkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvdmVyTm9kZSA9IGFuY2VzdG9yO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXV0aWwuaXNCcmVhayhjaGlsZCkgJiYgdXRpbC5faXNJZ25vcmVOb2RlQ2hhbmdlKGNoaWxkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3SW5uZXJOb2RlLmNoaWxkTm9kZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcE5vZGUuYXBwZW5kQ2hpbGQobmV3SW5uZXJOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0lubmVyTm9kZSA9IG5ld0lubmVyTm9kZS5jbG9uZU5vZGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbG9uZUNoaWxkID0gY2hpbGQuY2xvbmVOb2RlKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwTm9kZS5hcHBlbmRDaGlsZChjbG9uZUNoaWxkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcE5vZGUuYXBwZW5kQ2hpbGQobmV3SW5uZXJOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbk5vZGVBcnJheS5wdXNoKG5ld0lubmVyTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yID0gbmV3SW5uZXJOb2RlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZW5kIGNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2VuZENvbnRhaW5lciAmJiBjaGlsZC5jb250YWlucyhfZW5kQ29udGFpbmVyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kUGF0aCA9IHV0aWwuZ2V0Tm9kZVBhdGgoX2VuZENvbnRhaW5lciwgY2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VuZENvbnRhaW5lciA9IHV0aWwuZ2V0Tm9kZUZyb21QYXRoKGVuZFBhdGgsIGNsb25lQ2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2Tm9kZSA9IHZhbGlkYXRpb24oY2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodk5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbmVDaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yLmFwcGVuZENoaWxkKHZOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC5ub2RlVHlwZSA9PT0gMSkgY292ZXJOb2RlID0gdk5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdXRpbC5pc0JyZWFrKGNoaWxkKSkgcmVjdXJzaW9uRnVuYyhjaGlsZCwgY292ZXJOb2RlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSkoZWxlbWVudCwgbmV3SW5uZXJOb2RlKTtcclxuXHJcbiAgICAgICAgICAgIC8vIG5vdCByZW1vdmUgdGFnXHJcbiAgICAgICAgICAgIGlmIChub25lQ2hhbmdlIHx8IChpc1JlbW92ZU5vZGUgJiYgIWlzUmVtb3ZlRm9ybWF0ICYmICFfcmVtb3ZlQ2hlY2sudikpIHJldHVybiB7IGFuY2VzdG9yOiBlbGVtZW50LCBlbmRDb250YWluZXI6IF9lbmRDb250YWluZXIgfTtcclxuXHJcbiAgICAgICAgICAgIHBOb2RlLmFwcGVuZENoaWxkKG5ld0lubmVyTm9kZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoaXNSZW1vdmVGb3JtYXQgJiYgaXNSZW1vdmVOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5Ob2RlQXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcmVtb3ZlTm9kZSA9IG5Ob2RlQXJyYXlbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgckNoaWxkcmVuID0gcmVtb3ZlTm9kZS5jaGlsZE5vZGVzO1xyXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChyQ2hpbGRyZW5bMF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcE5vZGUuaW5zZXJ0QmVmb3JlKHJDaGlsZHJlblswXSwgcmVtb3ZlTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlSXRlbShyZW1vdmVOb2RlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChpc1JlbW92ZU5vZGUpIHtcclxuICAgICAgICAgICAgICAgIG5ld0lubmVyTm9kZSA9IG5ld0lubmVyTm9kZS5maXJzdENoaWxkO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuTm9kZUFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RyaXBSZW1vdmVOb2RlKG5Ob2RlQXJyYXlbaV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB1dGlsLnJlbW92ZUVtcHR5Tm9kZShwTm9kZSwgbmV3SW5uZXJOb2RlKTtcclxuICAgICAgICAgICAgdXRpbC5tZXJnZVNhbWVUYWdzKHBOb2RlLCBudWxsLCB0cnVlKTtcclxuXHJcbiAgICAgICAgICAgIC8vIG5vZGUgY2hhbmdlXHJcbiAgICAgICAgICAgIGVsZW1lbnQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQocE5vZGUsIGVsZW1lbnQpO1xyXG4gICAgICAgICAgICByZXR1cm4geyBhbmNlc3RvcjogcE5vZGUsIGVuZENvbnRhaW5lcjogX2VuZENvbnRhaW5lciB9O1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiB3cmFwcyBsYXN0IGxpbmUgc2VsZWN0ZWQgdGV4dC5cclxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgVGhlIG5vZGUgb2YgdGhlIGxpbmUgdGhhdCBjb250YWlucyB0aGUgc2VsZWN0ZWQgdGV4dCBub2RlLlxyXG4gICAgICAgICAqIEBwYXJhbSB7RWxlbWVudH0gbmV3SW5uZXJOb2RlIFRoZSBkb20gdGhhdCB3aWxsIHdyYXAgdGhlIHNlbGVjdGVkIHRleHQgYXJlYVxyXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHZhbGlkYXRpb24gQ2hlY2sgaWYgdGhlIG5vZGUgc2hvdWxkIGJlIHN0cmlwcGVkLlxyXG4gICAgICAgICAqIEBwYXJhbSB7Tm9kZX0gZW5kQ29uIFRoZSBlbmRDb250YWluZXIgcHJvcGVydHkgb2YgdGhlIHNlbGVjdGlvbiBvYmplY3QuXHJcbiAgICAgICAgICogQHBhcmFtIHtOdW1iZXJ9IGVuZE9mZiBUaGUgZW5kT2Zmc2V0IHByb3BlcnR5IG9mIHRoZSBzZWxlY3Rpb24gb2JqZWN0LlxyXG4gICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gaXNSZW1vdmVGb3JtYXQgSXMgdGhlIHJlbW92ZSBhbGwgZm9ybWF0cyBjb21tYW5kP1xyXG4gICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gaXNSZW1vdmVOb2RlIFwibmV3SW5uZXJOb2RlXCIgaXMgcmVtb3ZlIG5vZGU/XHJcbiAgICAgICAgICogQHJldHVybnMge09iamVjdH0geyBhbmNlc3RvciwgY29udGFpbmVyLCBvZmZzZXQgfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX25vZGVDaGFuZ2VfZW5kTGluZTogZnVuY3Rpb24gKGVsZW1lbnQsIG5ld0lubmVyTm9kZSwgdmFsaWRhdGlvbiwgZW5kQ29uLCBlbmRPZmYsIGlzUmVtb3ZlRm9ybWF0LCBpc1JlbW92ZU5vZGUsIF9yZW1vdmVDaGVjaywgX2dldE1haW50YWluZWROb2RlLCBfaXNNYWludGFpbmVkTm9kZSkge1xyXG4gICAgICAgICAgICAvLyBub3QgYWRkIHRhZ1xyXG4gICAgICAgICAgICBsZXQgcGFyZW50Q29uID0gZW5kQ29uLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgIHdoaWxlICghcGFyZW50Q29uLm5leHRTaWJsaW5nICYmICFwYXJlbnRDb24ucHJldmlvdXNTaWJsaW5nICYmICF1dGlsLmlzRm9ybWF0RWxlbWVudChwYXJlbnRDb24ucGFyZW50Tm9kZSkgJiYgIXV0aWwuaXNXeXNpd3lnRGl2KHBhcmVudENvbi5wYXJlbnROb2RlKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudENvbi5ub2RlTmFtZSA9PT0gbmV3SW5uZXJOb2RlLm5vZGVOYW1lKSBicmVhaztcclxuICAgICAgICAgICAgICAgIHBhcmVudENvbiA9IHBhcmVudENvbi5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiAoIWlzUmVtb3ZlTm9kZSAmJiBwYXJlbnRDb24ubm9kZU5hbWUgPT09IG5ld0lubmVyTm9kZS5ub2RlTmFtZSAmJiAhdXRpbC5pc0Zvcm1hdEVsZW1lbnQocGFyZW50Q29uKSAmJiAhcGFyZW50Q29uLnByZXZpb3VzU2libGluZyAmJiB1dGlsLm9ubHlaZXJvV2lkdGhTcGFjZShlbmRDb24udGV4dENvbnRlbnQuc2xpY2UoZW5kT2ZmKSkpIHtcclxuICAgICAgICAgICAgICAgIGxldCBzYW1lVGFnID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGxldCBlID0gZW5kQ29uLm5leHRTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgd2hpbGUgKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXV0aWwub25seVplcm9XaWR0aFNwYWNlKGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNhbWVUYWcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGUgPSBlLm5leHRTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChzYW1lVGFnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXRpbC5jb3B5VGFnQXR0cmlidXRlcyhwYXJlbnRDb24sIG5ld0lubmVyTm9kZSk7XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbmNlc3RvcjogZWxlbWVudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyOiBlbmRDb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogZW5kT2ZmXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gYWRkIHRhZ1xyXG4gICAgICAgICAgICBfcmVtb3ZlQ2hlY2sudiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBjb25zdCBlbCA9IGVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IG5Ob2RlQXJyYXkgPSBbbmV3SW5uZXJOb2RlXTtcclxuICAgICAgICAgICAgY29uc3QgcE5vZGUgPSBlbGVtZW50LmNsb25lTm9kZShmYWxzZSk7XHJcblxyXG4gICAgICAgICAgICBsZXQgY29udGFpbmVyID0gZW5kQ29uO1xyXG4gICAgICAgICAgICBsZXQgb2Zmc2V0ID0gZW5kT2ZmO1xyXG4gICAgICAgICAgICBsZXQgcGFzc05vZGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgbGV0IHBDdXJyZW50LCBuZXdOb2RlLCBhcHBlbmROb2RlLCBhbmNob3JOb2RlO1xyXG5cclxuICAgICAgICAgICAgKGZ1bmN0aW9uIHJlY3Vyc2lvbkZ1bmMoY3VycmVudCwgYW5jZXN0b3IpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZXMgPSBjdXJyZW50LmNoaWxkTm9kZXM7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IGNoaWxkTm9kZXMubGVuZ3RoIC0gMSwgdk5vZGU7IDAgPD0gaTsgaS0tKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBjaGlsZE5vZGVzW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghY2hpbGQpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb3Zlck5vZGUgPSBhbmNlc3RvcjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhc3NOb2RlICYmICF1dGlsLmlzQnJlYWsoY2hpbGQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC5ub2RlVHlwZSA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWwuX2lzSWdub3JlTm9kZUNoYW5nZShjaGlsZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdJbm5lck5vZGUgPSBuZXdJbm5lck5vZGUuY2xvbmVOb2RlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjbG9uZUNoaWxkID0gY2hpbGQuY2xvbmVOb2RlKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBOb2RlLmluc2VydEJlZm9yZShjbG9uZUNoaWxkLCBhbmNlc3Rvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcE5vZGUuaW5zZXJ0QmVmb3JlKG5ld0lubmVyTm9kZSwgY2xvbmVDaGlsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbk5vZGVBcnJheS5wdXNoKG5ld0lubmVyTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Vyc2lvbkZ1bmMoY2hpbGQsIGNoaWxkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdOb2RlID0gY2hpbGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBDdXJyZW50ID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFuY2hvcnMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG5ld05vZGUucGFyZW50Tm9kZSAhPT0gbnVsbCAmJiBuZXdOb2RlICE9PSBlbCAmJiBuZXdOb2RlICE9PSBuZXdJbm5lck5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZOb2RlID0gdmFsaWRhdGlvbihuZXdOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2Tm9kZSAmJiBuZXdOb2RlLm5vZGVUeXBlID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9pc01haW50YWluZWROb2RlKG5ld05vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYW5jaG9yTm9kZSkgYW5jaG9ycy5wdXNoKHZOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQ3VycmVudC5wdXNoKHZOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdOb2RlID0gbmV3Tm9kZS5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBDdXJyZW50ID0gcEN1cnJlbnQuY29uY2F0KGFuY2hvcnMpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNUb3BOb2RlID0gcEN1cnJlbnQubGVuZ3RoID4gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGROb2RlID0gcEN1cnJlbnQucG9wKCkgfHwgY2hpbGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZE5vZGUgPSBuZXdOb2RlID0gY2hpbGROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocEN1cnJlbnQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Tm9kZSA9IHBDdXJyZW50LnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kTm9kZS5hcHBlbmRDaGlsZChuZXdOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZE5vZGUgPSBuZXdOb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2lzTWFpbnRhaW5lZE5vZGUobmV3SW5uZXJOb2RlLnBhcmVudE5vZGUpICYmICFfaXNNYWludGFpbmVkTm9kZShjaGlsZE5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdJbm5lck5vZGUgPSBuZXdJbm5lck5vZGUuY2xvbmVOb2RlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBOb2RlLmluc2VydEJlZm9yZShuZXdJbm5lck5vZGUsIHBOb2RlLmZpcnN0Q2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbk5vZGVBcnJheS5wdXNoKG5ld0lubmVyTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYW5jaG9yTm9kZSAmJiBfaXNNYWludGFpbmVkTm9kZShjaGlsZE5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdJbm5lck5vZGUgPSBuZXdJbm5lck5vZGUuY2xvbmVOb2RlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFDaGlsZHJlbiA9IGNoaWxkTm9kZS5jaGlsZE5vZGVzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgYSA9IDAsIGFMZW4gPSBhQ2hpbGRyZW4ubGVuZ3RoOyBhIDwgYUxlbjsgYSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3SW5uZXJOb2RlLmFwcGVuZENoaWxkKGFDaGlsZHJlblthXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZE5vZGUuYXBwZW5kQ2hpbGQobmV3SW5uZXJOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBOb2RlLmluc2VydEJlZm9yZShjaGlsZE5vZGUsIHBOb2RlLmZpcnN0Q2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbk5vZGVBcnJheS5wdXNoKG5ld0lubmVyTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3SW5uZXJOb2RlLmNoaWxkcmVuLmxlbmd0aCA+IDApIGFuY2VzdG9yID0gbmV3Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgYW5jZXN0b3IgPSBuZXdJbm5lck5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNUb3BOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdJbm5lck5vZGUuaW5zZXJ0QmVmb3JlKGNoaWxkTm9kZSwgbmV3SW5uZXJOb2RlLmZpcnN0Q2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jZXN0b3IgPSBuZXdOb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jZXN0b3IgPSBuZXdJbm5lck5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbmNob3JOb2RlICYmIGNoaWxkLm5vZGVUeXBlID09PSAzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2dldE1haW50YWluZWROb2RlKGNoaWxkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFuY2VzdG9yQW5jaG9yTm9kZSA9IHV0aWwuZ2V0UGFyZW50RWxlbWVudChhbmNlc3RvciwgZnVuY3Rpb24gKGN1cnJlbnQpIHtyZXR1cm4gdGhpcy5faXNNYWludGFpbmVkTm9kZShjdXJyZW50LnBhcmVudE5vZGUpIHx8IGN1cnJlbnQucGFyZW50Tm9kZSA9PT0gcE5vZGU7fS5iaW5kKHV0aWwpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3JOb2RlLmFwcGVuZENoaWxkKGFuY2VzdG9yQW5jaG9yTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3SW5uZXJOb2RlID0gYW5jZXN0b3JBbmNob3JOb2RlLmNsb25lTm9kZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbk5vZGVBcnJheS5wdXNoKG5ld0lubmVyTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcE5vZGUuaW5zZXJ0QmVmb3JlKG5ld0lubmVyTm9kZSwgcE5vZGUuZmlyc3RDaGlsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvck5vZGUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBlbmRDb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXBhc3NOb2RlICYmIGNoaWxkID09PSBjb250YWluZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yTm9kZSA9IF9nZXRNYWludGFpbmVkTm9kZShjaGlsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFmdGVyTm9kZSA9IHV0aWwuY3JlYXRlVGV4dE5vZGUoY29udGFpbmVyLm5vZGVUeXBlID09PSAxID8gJycgOiBjb250YWluZXIuc3Vic3RyaW5nRGF0YShvZmZzZXQsIChjb250YWluZXIubGVuZ3RoIC0gb2Zmc2V0KSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXh0Tm9kZSA9IHV0aWwuY3JlYXRlVGV4dE5vZGUoY29udGFpbmVyLm5vZGVUeXBlID09PSAxID8gJycgOiBjb250YWluZXIuc3Vic3RyaW5nRGF0YSgwLCBvZmZzZXQpKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbmNob3JOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3JOb2RlID0gYW5jaG9yTm9kZS5jbG9uZU5vZGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYSA9IF9nZXRNYWludGFpbmVkTm9kZShhbmNlc3Rvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSAmJiBhLnBhcmVudE5vZGUgIT09IHBOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG0gPSBhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobS5wYXJlbnROb2RlICE9PSBwTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNlc3RvciA9IHAgPSBtLnBhcmVudE5vZGUuY2xvbmVOb2RlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUobS5jaGlsZE5vZGVzWzBdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLmFwcGVuZENoaWxkKG0uY2hpbGROb2Rlc1swXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbS5hcHBlbmRDaGlsZChwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbSA9IG0ucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhLCBtLnBhcmVudE5vZGUuZmlyc3RDaGlsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3JOb2RlID0gYW5jaG9yTm9kZS5jbG9uZU5vZGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKF9pc01haW50YWluZWROb2RlKG5ld0lubmVyTm9kZS5wYXJlbnROb2RlKSAmJiAhYW5jaG9yTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3SW5uZXJOb2RlID0gbmV3SW5uZXJOb2RlLmNsb25lTm9kZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTm9kZS5hcHBlbmRDaGlsZChuZXdJbm5lck5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbk5vZGVBcnJheS5wdXNoKG5ld0lubmVyTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdXRpbC5vbmx5WmVyb1dpZHRoU3BhY2UoYWZ0ZXJOb2RlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jZXN0b3IuaW5zZXJ0QmVmb3JlKGFmdGVyTm9kZSwgYW5jZXN0b3IuZmlyc3RDaGlsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld05vZGUgPSBhbmNlc3RvcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcEN1cnJlbnQgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG5ld05vZGUgIT09IHBOb2RlICYmIG5ld05vZGUgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZOb2RlID0gX2lzTWFpbnRhaW5lZE5vZGUobmV3Tm9kZSkgPyBudWxsIDogdmFsaWRhdGlvbihuZXdOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2Tm9kZSAmJiBuZXdOb2RlLm5vZGVUeXBlID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEN1cnJlbnQucHVzaCh2Tm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdOb2RlID0gbmV3Tm9kZS5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZE5vZGUgPSBwQ3VycmVudC5wb3AoKSB8fCBhbmNlc3RvcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kTm9kZSA9IG5ld05vZGUgPSBjaGlsZE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwQ3VycmVudC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdOb2RlID0gcEN1cnJlbnQucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmROb2RlLmFwcGVuZENoaWxkKG5ld05vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kTm9kZSA9IG5ld05vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZE5vZGUgIT09IGFuY2VzdG9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdJbm5lck5vZGUuaW5zZXJ0QmVmb3JlKGNoaWxkTm9kZSwgbmV3SW5uZXJOb2RlLmZpcnN0Q2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jZXN0b3IgPSBuZXdOb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jZXN0b3IgPSBuZXdJbm5lck5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzQnJlYWsoY2hpbGQpKSBuZXdJbm5lck5vZGUuYXBwZW5kQ2hpbGQoY2hpbGQuY2xvbmVOb2RlKGZhbHNlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYW5jaG9yTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yTm9kZS5pbnNlcnRCZWZvcmUobmV3SW5uZXJOb2RlLCBhbmNob3JOb2RlLmZpcnN0Q2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcE5vZGUuaW5zZXJ0QmVmb3JlKGFuY2hvck5vZGUsIHBOb2RlLmZpcnN0Q2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yTm9kZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTm9kZS5pbnNlcnRCZWZvcmUobmV3SW5uZXJOb2RlLCBwTm9kZS5maXJzdENoaWxkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyID0gdGV4dE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IHRleHROb2RlLmRhdGEubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNzTm9kZSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbmNlc3Rvci5pbnNlcnRCZWZvcmUoY29udGFpbmVyLCBhbmNlc3Rvci5maXJzdENoaWxkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICB2Tm9kZSA9ICFwYXNzTm9kZSA/IGNoaWxkLmNsb25lTm9kZShmYWxzZSkgOiB2YWxpZGF0aW9uKGNoaWxkKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodk5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYW5jZXN0b3IuaW5zZXJ0QmVmb3JlKHZOb2RlLCBhbmNlc3Rvci5maXJzdENoaWxkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLm5vZGVUeXBlID09PSAxICYmICF1dGlsLmlzQnJlYWsoY2hpbGQpKSBjb3Zlck5vZGUgPSB2Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJlY3Vyc2lvbkZ1bmMoY2hpbGQsIGNvdmVyTm9kZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pKGVsZW1lbnQsIHBOb2RlKTtcclxuXHJcbiAgICAgICAgICAgIC8vIG5vdCByZW1vdmUgdGFnXHJcbiAgICAgICAgICAgIGlmIChpc1JlbW92ZU5vZGUgJiYgIWlzUmVtb3ZlRm9ybWF0ICYmICFfcmVtb3ZlQ2hlY2sudikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBhbmNlc3RvcjogZWxlbWVudCxcclxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXI6IGVuZENvbixcclxuICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IGVuZE9mZlxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaXNSZW1vdmVGb3JtYXQgPSBpc1JlbW92ZUZvcm1hdCAmJiBpc1JlbW92ZU5vZGU7XHJcblxyXG4gICAgICAgICAgICBpZiAoaXNSZW1vdmVGb3JtYXQpIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbk5vZGVBcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCByZW1vdmVOb2RlID0gbk5vZGVBcnJheVtpXTtcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByQ2hpbGRyZW4gPSByZW1vdmVOb2RlLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRleHROb2RlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAockNoaWxkcmVuWzBdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHROb2RlID0gckNoaWxkcmVuWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwTm9kZS5pbnNlcnRCZWZvcmUodGV4dE5vZGUsIHJlbW92ZU5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUl0ZW0ocmVtb3ZlTm9kZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpID09PSBuTm9kZUFycmF5Lmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyID0gdGV4dE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IHRleHROb2RlLnRleHRDb250ZW50Lmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNSZW1vdmVOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdJbm5lck5vZGUgPSBuZXdJbm5lck5vZGUuZmlyc3RDaGlsZDtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbk5vZGVBcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0cmlwUmVtb3ZlTm9kZShuTm9kZUFycmF5W2ldKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFpc1JlbW92ZUZvcm1hdCAmJiBwTm9kZS5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuY2hpbGROb2Rlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lciA9IGVsZW1lbnQuY2hpbGROb2Rlc1swXTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyID0gdXRpbC5jcmVhdGVUZXh0Tm9kZSh1dGlsLnplcm9XaWR0aFNwYWNlKTtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWlzUmVtb3ZlTm9kZSAmJiBuZXdJbm5lck5vZGUudGV4dENvbnRlbnQubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVFbXB0eU5vZGUocE5vZGUsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogMFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVFbXB0eU5vZGUocE5vZGUsIG5ld0lubmVyTm9kZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHV0aWwub25seVplcm9XaWR0aFNwYWNlKHBOb2RlLnRleHRDb250ZW50KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lciA9IHBOb2RlLmZpcnN0Q2hpbGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gY29udGFpbmVyLnRleHRDb250ZW50Lmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodXRpbC5vbmx5WmVyb1dpZHRoU3BhY2UoY29udGFpbmVyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lciA9IG5ld0lubmVyTm9kZTtcclxuICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAvLyBub2RlIGNoYW5nZVxyXG4gICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2V0cyA9IHtzOiAwLCBlOiAwfTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGggPSB1dGlsLmdldE5vZGVQYXRoKGNvbnRhaW5lciwgcE5vZGUsIG9mZnNldHMpO1xyXG4gICAgICAgICAgICAgICAgb2Zmc2V0ICs9IG9mZnNldHMucztcclxuXHJcbiAgICAgICAgICAgICAgICAvLyB0YWcgbWVyZ2VcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld09mZnNldHMgPSB1dGlsLm1lcmdlU2FtZVRhZ3MocE5vZGUsIFtwYXRoXSwgdHJ1ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgZWxlbWVudC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChwTm9kZSwgZWxlbWVudCk7XHJcblxyXG4gICAgICAgICAgICAgICAgY29udGFpbmVyID0gdXRpbC5nZXROb2RlRnJvbVBhdGgocGF0aCwgcE5vZGUpO1xyXG4gICAgICAgICAgICAgICAgb2Zmc2V0ICs9IG5ld09mZnNldHNbMF07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBhbmNlc3RvcjogcE5vZGUsXHJcbiAgICAgICAgICAgICAgICBjb250YWluZXI6IGNvbnRhaW5lcixcclxuICAgICAgICAgICAgICAgIG9mZnNldDogb2Zmc2V0XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFJ1biBwbHVnaW4gY2FsbHMgYW5kIGJhc2ljIGNvbW1hbmRzLlxyXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBjb21tYW5kIENvbW1hbmQgc3RyaW5nXHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGRpc3BsYXkgRGlzcGxheSB0eXBlIHN0cmluZyAoJ2NvbW1hbmQnLCAnc3VibWVudScsICdkaWFsb2cnLCAnY29udGFpbmVyJylcclxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IHRhcmdldCBUaGUgZWxlbWVudCBvZiBjb21tYW5kIGJ1dHRvblxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGFjdGlvbkNhbGw6IGZ1bmN0aW9uIChjb21tYW5kLCBkaXNwbGF5LCB0YXJnZXQpIHtcclxuICAgICAgICAgICAgLy8gY2FsbCBwbHVnaW5zXHJcbiAgICAgICAgICAgIGlmIChkaXNwbGF5KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoL21vcmUvaS50ZXN0KGRpc3BsYXkpICYmIHRhcmdldCAhPT0gdGhpcy5fbW9yZUxheWVyQWN0aXZlQnV0dG9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGF5ZXIgPSBjb250ZXh0LmVsZW1lbnQudG9vbGJhci5xdWVyeVNlbGVjdG9yKCcuJyArIGNvbW1hbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChsYXllcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fbW9yZUxheWVyQWN0aXZlQnV0dG9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29udGV4dC5lbGVtZW50LnRvb2xiYXIucXVlcnlTZWxlY3RvcignLicgKyB0aGlzLl9tb3JlTGF5ZXJBY3RpdmVCdXR0b24uZ2V0QXR0cmlidXRlKCdkYXRhLWNvbW1hbmQnKSkpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUNsYXNzKHRoaXMuX21vcmVMYXllckFjdGl2ZUJ1dHRvbiwgJ29uJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5hZGRDbGFzcyh0YXJnZXQsICdvbicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tb3JlTGF5ZXJBY3RpdmVCdXR0b24gPSB0YXJnZXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuX3Nob3dUb29sYmFyQmFsbG9vbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5fc2hvd1Rvb2xiYXJJbmxpbmUoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBpZiAoL2NvbnRhaW5lci8udGVzdChkaXNwbGF5KSAmJiAodGhpcy5fbWVudVRyYXlbY29tbWFuZF0gPT09IG51bGwgfHwgdGFyZ2V0ICE9PSB0aGlzLmNvbnRhaW5lckFjdGl2ZUJ1dHRvbikpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGxQbHVnaW4oY29tbWFuZCwgdGhpcy5jb250YWluZXJPbi5iaW5kKHRoaXMsIHRhcmdldCksIHRhcmdldCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfSBcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNSZWFkT25seSkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgaWYgKC9zdWJtZW51Ly50ZXN0KGRpc3BsYXkpICYmICh0aGlzLl9tZW51VHJheVtjb21tYW5kXSA9PT0gbnVsbCB8fCB0YXJnZXQgIT09IHRoaXMuc3VibWVudUFjdGl2ZUJ1dHRvbikpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGxQbHVnaW4oY29tbWFuZCwgdGhpcy5zdWJtZW51T24uYmluZCh0aGlzLCB0YXJnZXQpLCB0YXJnZXQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoL2RpYWxvZy8udGVzdChkaXNwbGF5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsbFBsdWdpbihjb21tYW5kLCB0aGlzLnBsdWdpbnNbY29tbWFuZF0ub3Blbi5iaW5kKHRoaXMpLCB0YXJnZXQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoL2NvbW1hbmQvLnRlc3QoZGlzcGxheSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGxQbHVnaW4oY29tbWFuZCwgdGhpcy5wbHVnaW5zW2NvbW1hbmRdLmFjdGlvbi5iaW5kKHRoaXMpLCB0YXJnZXQpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgvZmlsZUJyb3dzZXIvLnRlc3QoZGlzcGxheSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGxQbHVnaW4oY29tbWFuZCwgdGhpcy5wbHVnaW5zW2NvbW1hbmRdLm9wZW4uYmluZCh0aGlzLCBudWxsKSwgdGFyZ2V0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSAvLyBkZWZhdWx0IGNvbW1hbmRcclxuICAgICAgICAgICAgZWxzZSBpZiAoY29tbWFuZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tYW5kSGFuZGxlcih0YXJnZXQsIGNvbW1hbmQpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoL21vcmUvaS50ZXN0KGRpc3BsYXkpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsYXllciA9IGNvbnRleHQuZWxlbWVudC50b29sYmFyLnF1ZXJ5U2VsZWN0b3IoJy4nICsgdGhpcy5fbW9yZUxheWVyQWN0aXZlQnV0dG9uLmdldEF0dHJpYnV0ZSgnZGF0YS1jb21tYW5kJykpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGxheWVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVDbGFzcyh0aGlzLl9tb3JlTGF5ZXJBY3RpdmVCdXR0b24sICdvbicpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21vcmVMYXllckFjdGl2ZUJ1dHRvbiA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgbGF5ZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQuX3Nob3dUb29sYmFyQmFsbG9vbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50Ll9zaG93VG9vbGJhcklubGluZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKC9zdWJtZW51Ly50ZXN0KGRpc3BsYXkpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN1Ym1lbnVPZmYoKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICghL2NvbW1hbmQvLnRlc3QoZGlzcGxheSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3VibWVudU9mZigpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXJPZmYoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBFeGVjdXRlIGNvbW1hbmQgb2YgY29tbWFuZCBidXR0b24oQWxsIEJ1dHRvbnMgZXhjZXB0IHN1Ym1lbnUgYW5kIGRpYWxvZylcclxuICAgICAgICAgKiAoc2VsZWN0QWxsLCBjb2RlVmlldywgZnVsbFNjcmVlbiwgaW5kZW50LCBvdXRkZW50LCB1bmRvLCByZWRvLCByZW1vdmVGb3JtYXQsIHByaW50LCBwcmV2aWV3LCBzaG93QmxvY2tzLCBzYXZlLCBib2xkLCB1bmRlcmxpbmUsIGl0YWxpYywgc3RyaWtlLCBzdWJzY3JpcHQsIHN1cGVyc2NyaXB0LCBjb3B5LCBjdXQsIHBhc3RlKVxyXG4gICAgICAgICAqIEBwYXJhbSB7RWxlbWVudHxudWxsfSB0YXJnZXQgVGhlIGVsZW1lbnQgb2YgY29tbWFuZCBidXR0b25cclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gY29tbWFuZCBQcm9wZXJ0eSBvZiBjb21tYW5kIGJ1dHRvbiAoZGF0YS12YWx1ZSlcclxuICAgICAgICAgKi9cclxuICAgICAgICBjb21tYW5kSGFuZGxlcjogZnVuY3Rpb24gKHRhcmdldCwgY29tbWFuZCkge1xyXG4gICAgICAgICAgICBpZiAoY29yZS5pc1JlYWRPbmx5ICYmICEvY29weXxjdXR8c2VsZWN0QWxsfGNvZGVWaWV3fGZ1bGxTY3JlZW58cHJpbnR8cHJldmlld3xzaG93QmxvY2tzLy50ZXN0KGNvbW1hbmQpKSByZXR1cm47XHJcbiAgICAgICAgICAgIHN3aXRjaCAoY29tbWFuZCkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnY29weSc6XHJcbiAgICAgICAgICAgICAgICBjYXNlICdjdXQnOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXhlY0NvbW1hbmQoY29tbWFuZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdwYXN0ZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdzZWxlY3RBbGwnOlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHd5c2l3eWcgPSBjb250ZXh0LmVsZW1lbnQud3lzaXd5ZztcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZmlyc3QgPSB1dGlsLmdldENoaWxkRWxlbWVudCh3eXNpd3lnLmZpcnN0Q2hpbGQsIGZ1bmN0aW9uIChjdXJyZW50KSB7IHJldHVybiBjdXJyZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAwIHx8IGN1cnJlbnQubm9kZVR5cGUgPT09IDM7IH0sIGZhbHNlKSB8fCB3eXNpd3lnLmZpcnN0Q2hpbGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGxhc3QgPSB1dGlsLmdldENoaWxkRWxlbWVudCh3eXNpd3lnLmxhc3RDaGlsZCwgZnVuY3Rpb24gKGN1cnJlbnQpIHsgcmV0dXJuIGN1cnJlbnQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDAgfHwgY3VycmVudC5ub2RlVHlwZSA9PT0gMzsgfSwgdHJ1ZSkgfHwgd3lzaXd5Zy5sYXN0Q2hpbGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmaXJzdCB8fCAhbGFzdCkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzTWVkaWEoZmlyc3QpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZm8gPSB0aGlzLmdldEZpbGVDb21wb25lbnQoZmlyc3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBiciA9IHV0aWwuY3JlYXRlRWxlbWVudCgnQlInKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0ID0gdXRpbC5jcmVhdGVFbGVtZW50KG9wdGlvbnMuZGVmYXVsdFRhZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdC5hcHBlbmRDaGlsZChicik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0ID0gaW5mbyA/IGluZm8uY29tcG9uZW50IDogZmlyc3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGZvcm1hdCwgZmlyc3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IGJyO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodXRpbC5pc01lZGlhKGxhc3QpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJyID0gdXRpbC5jcmVhdGVFbGVtZW50KCdCUicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXQgPSB1dGlsLmNyZWF0ZUVsZW1lbnQob3B0aW9ucy5kZWZhdWx0VGFnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LmFwcGVuZENoaWxkKGJyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd3lzaXd5Zy5hcHBlbmRDaGlsZChmb3JtYXQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0ID0gYnI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2UoZmlyc3QsIDAsIGxhc3QsIGxhc3QudGV4dENvbnRlbnQubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ2NvZGVWaWV3JzpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZUNvZGVWaWV3KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdmdWxsU2NyZWVuJzpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZUZ1bGxTY3JlZW4odGFyZ2V0KTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ2luZGVudCc6XHJcbiAgICAgICAgICAgICAgICBjYXNlICdvdXRkZW50JzpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmluZGVudChjb21tYW5kKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ3VuZG8nOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGlzdG9yeS51bmRvKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdyZWRvJzpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhpc3RvcnkucmVkbygpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAncmVtb3ZlRm9ybWF0JzpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUZvcm1hdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ3ByaW50JzpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByaW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdwcmV2aWV3JzpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByZXZpZXcoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ3Nob3dCbG9ja3MnOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlRGlzcGxheUJsb2NrcygpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnc2F2ZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmNhbGxCYWNrU2F2ZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmNhbGxCYWNrU2F2ZSh0aGlzLmdldENvbnRlbnRzKGZhbHNlKSwgdGhpcy5fdmFyaWFibGUuaXNDaGFuZ2VkKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3ZhcmlhYmxlLmlzQ2hhbmdlZCAmJiB0eXBlb2YgZnVuY3Rpb25zLnNhdmUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25zLnNhdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcignW1NVTkVESVRPUi5jb3JlLmNvbW1hbmRIYW5kbGVyLmZhaWxdIFBsZWFzZSByZWdpc3RlciBjYWxsIGJhY2sgZnVuY3Rpb24gaW4gY3JlYXRpb24gb3B0aW9uLiAoY2FsbEJhY2tTYXZlIDogRnVuY3Rpb24pJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl92YXJpYWJsZS5pc0NoYW5nZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dC50b29sLnNhdmUpIGNvbnRleHQudG9vbC5zYXZlLnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQgOiAvLyAnU1RST05HJywgJ1UnLCAnRU0nLCAnREVMJywgJ1NVQicsICdTVVAnLi5cclxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kID0gdGhpcy5fZGVmYXVsdENvbW1hbmRbY29tbWFuZC50b0xvd2VyQ2FzZSgpXSB8fCBjb21tYW5kO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5jb21tYW5kTWFwW2NvbW1hbmRdKSB0aGlzLmNvbW1hbmRNYXBbY29tbWFuZF0gPSB0YXJnZXQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVzTWFwID0gdGhpcy5fdmFyaWFibGUuY3VycmVudE5vZGVzTWFwO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNtZCA9IG5vZGVzTWFwLmluZGV4T2YoY29tbWFuZCkgPiAtMSA/IG51bGwgOiB1dGlsLmNyZWF0ZUVsZW1lbnQoY29tbWFuZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlbW92ZU5vZGUgPSBjb21tYW5kO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoL15TVUIkL2kudGVzdChjb21tYW5kKSAmJiBub2Rlc01hcC5pbmRleE9mKCdTVVAnKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZU5vZGUgPSAnU1VQJztcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKC9eU1VQJC9pLnRlc3QoY29tbWFuZCkgJiYgbm9kZXNNYXAuaW5kZXhPZignU1VCJykgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVOb2RlID0gJ1NVQic7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vZGVDaGFuZ2UoY21kLCBudWxsLCBbcmVtb3ZlTm9kZV0sIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gUmVtb3ZlIGZvcm1hdCBvZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHJhbmdlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcmVtb3ZlRm9ybWF0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMubm9kZUNoYW5nZShudWxsLCBudWxsLCBudWxsLCBudWxsKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gVGhpcyBtZXRob2QgaW1wbGVtZW50cyBpbmRlbnRhdGlvbiB0byBzZWxlY3RlZCByYW5nZS5cclxuICAgICAgICAgKiBTZXR0ZWQgXCJtYXJnaW4tbGVmdFwiIHRvIFwiMjVweFwiIGluIHRoZSB0b3AgXCJQXCIgdGFnIG9mIHRoZSBwYXJhbWV0ZXIgbm9kZS5cclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gY29tbWFuZCBTZXBhcmF0b3IgKFwiaW5kZW50XCIgb3IgXCJvdXRkZW50XCIpXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaW5kZW50OiBmdW5jdGlvbiAoY29tbWFuZCkge1xyXG4gICAgICAgICAgICBjb25zdCByYW5nZSA9IHRoaXMuZ2V0UmFuZ2UoKTtcclxuICAgICAgICAgICAgY29uc3QgcmFuZ2VMaW5lcyA9IHRoaXMuZ2V0U2VsZWN0ZWRFbGVtZW50cyhudWxsKTtcclxuICAgICAgICAgICAgY29uc3QgY2VsbHMgPSBbXTtcclxuICAgICAgICAgICAgY29uc3Qgc2hpZnQgPSAnaW5kZW50JyAhPT0gY29tbWFuZDtcclxuICAgICAgICAgICAgY29uc3QgbWFyZ2luRGlyID0gb3B0aW9ucy5ydGwgPyAnbWFyZ2luUmlnaHQnIDogJ21hcmdpbkxlZnQnO1xyXG4gICAgICAgICAgICBsZXQgc2MgPSByYW5nZS5zdGFydENvbnRhaW5lcjtcclxuICAgICAgICAgICAgbGV0IGVjID0gcmFuZ2UuZW5kQ29udGFpbmVyO1xyXG4gICAgICAgICAgICBsZXQgc28gPSByYW5nZS5zdGFydE9mZnNldDtcclxuICAgICAgICAgICAgbGV0IGVvID0gcmFuZ2UuZW5kT2Zmc2V0O1xyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHJhbmdlTGluZXMubGVuZ3RoLCBmLCBtYXJnaW47IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgZiA9IHJhbmdlTGluZXNbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAoIXV0aWwuaXNMaXN0Q2VsbChmKSB8fCAhdGhpcy5wbHVnaW5zLmxpc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXJnaW4gPSAvXFxkKy8udGVzdChmLnN0eWxlW21hcmdpbkRpcl0pID8gdXRpbC5nZXROdW1iZXIoZi5zdHlsZVttYXJnaW5EaXJdLCAwKSA6IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNoaWZ0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbiAtPSAyNTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4gKz0gMjU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHV0aWwuc2V0U3R5bGUoZiwgbWFyZ2luRGlyLCAobWFyZ2luIDw9IDAgPyAnJyA6IG1hcmdpbiArICdweCcpKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNoaWZ0IHx8IGYucHJldmlvdXNFbGVtZW50U2libGluZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjZWxscy5wdXNoKGYpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gbGlzdCBjZWxsc1xyXG4gICAgICAgICAgICBpZiAoY2VsbHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmxpc3QuZWRpdEluc2lkZUxpc3QuY2FsbCh0aGlzLCBzaGlmdCwgY2VsbHMpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmVmZmVjdE5vZGUgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLnNldFJhbmdlKHNjLCBzbywgZWMsIGVvKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGhpc3Rvcnkgc3RhY2tcclxuICAgICAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2goZmFsc2UpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBBZGQgb3IgcmVtb3ZlIHRoZSBjbGFzcyBuYW1lIG9mIFwiYm9keVwiIHNvIHRoYXQgdGhlIGNvZGUgYmxvY2sgaXMgdmlzaWJsZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRvZ2dsZURpc3BsYXlCbG9ja3M6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgY29uc3Qgd3lzaXd5ZyA9IGNvbnRleHQuZWxlbWVudC53eXNpd3lnO1xyXG4gICAgICAgICAgICB1dGlsLnRvZ2dsZUNsYXNzKHd5c2l3eWcsICdzZS1zaG93LWJsb2NrJyk7XHJcbiAgICAgICAgICAgIGlmICh1dGlsLmhhc0NsYXNzKHd5c2l3eWcsICdzZS1zaG93LWJsb2NrJykpIHtcclxuICAgICAgICAgICAgICAgIHV0aWwuYWRkQ2xhc3ModGhpcy5fc3R5bGVDb21tYW5kTWFwLnNob3dCbG9ja3MsICdhY3RpdmUnKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlQ2xhc3ModGhpcy5fc3R5bGVDb21tYW5kTWFwLnNob3dCbG9ja3MsICdhY3RpdmUnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9yZXNvdXJjZXNTdGF0ZUNoYW5nZSgpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBDaGFuZ2VzIHRvIGNvZGUgdmlldyBvciB3eXNpd3lnIHZpZXdcclxuICAgICAgICAgKi9cclxuICAgICAgICB0b2dnbGVDb2RlVmlldzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBjb25zdCBpc0NvZGVWaWV3ID0gdGhpcy5fdmFyaWFibGUuaXNDb2RlVmlldztcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyc09mZigpO1xyXG4gICAgICAgICAgICB1dGlsLnNldERpc2FibGVkQnV0dG9ucyghaXNDb2RlVmlldywgdGhpcy5jb2RlVmlld0Rpc2FibGVkQnV0dG9ucyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoaXNDb2RlVmlldykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0Q29kZURhdGFUb0VkaXRvcigpO1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50Lnd5c2l3eWdGcmFtZS5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50LmNvZGUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC53eXNpd3lnRnJhbWUuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5fdmFyaWFibGUuX2NvZGVPcmlnaW5Dc3NUZXh0ID0gdGhpcy5fdmFyaWFibGUuX2NvZGVPcmlnaW5Dc3NUZXh0LnJlcGxhY2UoLyhcXHM/ZGlzcGxheShcXHMrKT86KFxccyspPylbYS16QS1aXSsoPz07KS8sICdkaXNwbGF5OiBub25lJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl92YXJpYWJsZS5fd3lzaXd5Z09yaWdpbkNzc1RleHQgPSB0aGlzLl92YXJpYWJsZS5fd3lzaXd5Z09yaWdpbkNzc1RleHQucmVwbGFjZSgvKFxccz9kaXNwbGF5KFxccyspPzooXFxzKyk/KVthLXpBLVpdKyg/PTspLywgJ2Rpc3BsYXk6IGJsb2NrJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuaGVpZ2h0ID09PSAnYXV0bycgJiYgIW9wdGlvbnMuY29kZU1pcnJvckVkaXRvcikgY29udGV4dC5lbGVtZW50LmNvZGUuc3R5bGUuaGVpZ2h0ID0gJzBweCc7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHRoaXMuX3ZhcmlhYmxlLmlzQ29kZVZpZXcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl92YXJpYWJsZS5pc0Z1bGxTY3JlZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RIaWRlVG9vbGJhciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgvYmFsbG9vbnxiYWxsb29uLWFsd2F5cy9pLnRlc3Qob3B0aW9ucy5tb2RlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQuX2Fycm93LnN0eWxlLmRpc3BsYXkgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faXNJbmxpbmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faXNCYWxsb29uID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuX2hpZGVUb29sYmFyKCk7ICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm5hdGl2ZUZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUNsYXNzKHRoaXMuX3N0eWxlQ29tbWFuZE1hcC5jb2RlVmlldywgJ2FjdGl2ZScpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIGhpc3Rvcnkgc3RhY2tcclxuICAgICAgICAgICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGlzdG9yeS5fcmVzZXRDYWNoaW5nQnV0dG9uKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRFZGl0b3JEYXRhVG9Db2RlVmlldygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdmFyaWFibGUuX2NvZGVPcmlnaW5Dc3NUZXh0ID0gdGhpcy5fdmFyaWFibGUuX2NvZGVPcmlnaW5Dc3NUZXh0LnJlcGxhY2UoLyhcXHM/ZGlzcGxheShcXHMrKT86KFxccyspPylbYS16QS1aXSsoPz07KS8sICdkaXNwbGF5OiBibG9jaycpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdmFyaWFibGUuX3d5c2l3eWdPcmlnaW5Dc3NUZXh0ID0gdGhpcy5fdmFyaWFibGUuX3d5c2l3eWdPcmlnaW5Dc3NUZXh0LnJlcGxhY2UoLyhcXHM/ZGlzcGxheShcXHMrKT86KFxccyspPylbYS16QS1aXSsoPz07KS8sICdkaXNwbGF5OiBub25lJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuaGVpZ2h0ID09PSAnYXV0bycgJiYgIW9wdGlvbnMuY29kZU1pcnJvckVkaXRvcikgY29udGV4dC5lbGVtZW50LmNvZGUuc3R5bGUuaGVpZ2h0ID0gY29udGV4dC5lbGVtZW50LmNvZGUuc2Nyb2xsSGVpZ2h0ID4gMCA/IChjb250ZXh0LmVsZW1lbnQuY29kZS5zY3JvbGxIZWlnaHQgKyAncHgnKSA6ICdhdXRvJztcclxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmNvZGVNaXJyb3JFZGl0b3IpIG9wdGlvbnMuY29kZU1pcnJvckVkaXRvci5yZWZyZXNoKCk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHRoaXMuX3ZhcmlhYmxlLmlzQ29kZVZpZXcgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fdmFyaWFibGUuaXNGdWxsU2NyZWVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90SGlkZVRvb2xiYXIgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pc0JhbGxvb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50Ll9hcnJvdy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQudG9vbGJhci5zdHlsZS5sZWZ0ID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2lzSW5saW5lID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faXNCYWxsb29uID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Ll9zaG93VG9vbGJhcklubGluZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fdmFyaWFibGUuX3JhbmdlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC5jb2RlLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICB1dGlsLmFkZENsYXNzKHRoaXMuX3N0eWxlQ29tbWFuZE1hcC5jb2RlVmlldywgJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9jaGVja1BsYWNlaG9sZGVyKCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzUmVhZE9ubHkpIHV0aWwuc2V0RGlzYWJsZWRCdXR0b25zKHRydWUsIHRoaXMucmVzaXppbmdEaXNhYmxlZEJ1dHRvbnMpO1xyXG5cclxuICAgICAgICAgICAgLy8gdXNlciBldmVudFxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGZ1bmN0aW9ucy50b2dnbGVDb2RlVmlldyA9PT0gJ2Z1bmN0aW9uJykgZnVuY3Rpb25zLnRvZ2dsZUNvZGVWaWV3KHRoaXMuX3ZhcmlhYmxlLmlzQ29kZVZpZXcsIHRoaXMpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0IHRoZSBkYXRhIG9mIHRoZSBjb2RlIHZpZXcgYW5kIHB1dCBpdCBpbiB0aGUgV1lTSVdZRyBhcmVhLlxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX3NldENvZGVEYXRhVG9FZGl0b3I6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgY29uc3QgY29kZV9odG1sID0gdGhpcy5fZ2V0Q29kZVZpZXcoKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmZ1bGxQYWdlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJzZURvY3VtZW50ID0gdGhpcy5fcGFyc2VyLnBhcnNlRnJvbVN0cmluZyhjb2RlX2h0bWwsICd0ZXh0L2h0bWwnKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRDaGlsZHJlbiA9IHBhcnNlRG9jdW1lbnQuaGVhZC5jaGlsZHJlbjtcclxuXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaGVhZENoaWxkcmVuLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKC9ec2NyaXB0JC9pLnRlc3QoaGVhZENoaWxkcmVuW2ldLnRhZ05hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRG9jdW1lbnQuaGVhZC5yZW1vdmVDaGlsZChoZWFkQ2hpbGRyZW5baV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpLS0sIGxlbi0tO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLl93ZC5oZWFkLmlubmVySFRNTCA9IHBhcnNlRG9jdW1lbnQuaGVhZC5pbm5lckhUTUw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl93ZC5ib2R5LmlubmVySFRNTCA9IHRoaXMuY29udmVydENvbnRlbnRzRm9yRWRpdG9yKHBhcnNlRG9jdW1lbnQuYm9keS5pbm5lckhUTUwpO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGF0dHJzID0gcGFyc2VEb2N1bWVudC5ib2R5LmF0dHJpYnV0ZXM7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gYXR0cnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYXR0cnNbaV0ubmFtZSA9PT0gJ2NvbnRlbnRlZGl0YWJsZScpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3dkLmJvZHkuc2V0QXR0cmlidXRlKGF0dHJzW2ldLm5hbWUsIGF0dHJzW2ldLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghdXRpbC5oYXNDbGFzcyh0aGlzLl93ZC5ib2R5LCAnc3VuLWVkaXRvci1lZGl0YWJsZScpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZWRpdGFibGVDbGFzc2VzID0gb3B0aW9ucy5fZWRpdGFibGVDbGFzcy5zcGxpdCgnICcpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWRpdGFibGVDbGFzc2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwuYWRkQ2xhc3ModGhpcy5fd2QuYm9keSwgb3B0aW9ucy5fZWRpdGFibGVDbGFzc1tpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50Lnd5c2l3eWcuaW5uZXJIVE1MID0gY29kZV9odG1sLmxlbmd0aCA+IDAgPyB0aGlzLmNvbnZlcnRDb250ZW50c0ZvckVkaXRvcihjb2RlX2h0bWwpIDogJzwnICsgb3B0aW9ucy5kZWZhdWx0VGFnICsgJz48YnI+PC8nICsgb3B0aW9ucy5kZWZhdWx0VGFnICsgJz4nO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIENvbnZlcnQgdGhlIGRhdGEgb2YgdGhlIFdZU0lXWUcgYXJlYSBhbmQgcHV0IGl0IGluIHRoZSBjb2RlIHZpZXcgYXJlYS5cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9zZXRFZGl0b3JEYXRhVG9Db2RlVmlldzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBjb25zdCBjb2RlQ29udGVudHMgPSB0aGlzLmNvbnZlcnRIVE1MRm9yQ29kZVZpZXcoY29udGV4dC5lbGVtZW50Lnd5c2l3eWcpO1xyXG4gICAgICAgICAgICBsZXQgY29kZVZhbHVlID0gJyc7XHJcblxyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5mdWxsUGFnZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYXR0cnMgPSB1dGlsLmdldEF0dHJpYnV0ZXNUb1N0cmluZyh0aGlzLl93ZC5ib2R5LCBudWxsKTtcclxuICAgICAgICAgICAgICAgIGNvZGVWYWx1ZSA9ICc8IURPQ1RZUEUgaHRtbD5cXG48aHRtbD5cXG4nICsgdGhpcy5fd2QuaGVhZC5vdXRlckhUTUwucmVwbGFjZSgvPig/IVxcbikvZywgJz5cXG4nKSArICc8Ym9keSAnICsgYXR0cnMgKyAnPlxcbicgKyBjb2RlQ29udGVudHMgKyAnPC9ib2R5PlxcbjwvaHRtbD4nO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29kZVZhbHVlID0gY29kZUNvbnRlbnRzO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQuY29kZS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICAgICAgY29udGV4dC5lbGVtZW50Lnd5c2l3eWdGcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fc2V0Q29kZVZpZXcoY29kZVZhbHVlKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQ2hhbmdlcyB0byBmdWxsIHNjcmVlbiBvciBkZWZhdWx0IHNjcmVlblxyXG4gICAgICAgICAqIEBwYXJhbSB7RWxlbWVudHxudWxsfSBlbGVtZW50IGZ1bGwgc2NyZWVuIGJ1dHRvblxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRvZ2dsZUZ1bGxTY3JlZW46IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRvcEFyZWEgPSBjb250ZXh0LmVsZW1lbnQudG9wQXJlYTtcclxuICAgICAgICAgICAgY29uc3QgdG9vbGJhciA9IGNvbnRleHQuZWxlbWVudC50b29sYmFyO1xyXG4gICAgICAgICAgICBjb25zdCBlZGl0b3JBcmVhID0gY29udGV4dC5lbGVtZW50LmVkaXRvckFyZWE7XHJcbiAgICAgICAgICAgIGNvbnN0IHd5c2l3eWdGcmFtZSA9IGNvbnRleHQuZWxlbWVudC53eXNpd3lnRnJhbWU7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvZGUgPSBjb250ZXh0LmVsZW1lbnQuY29kZTtcclxuICAgICAgICAgICAgY29uc3QgX3ZhciA9IHRoaXMuX3ZhcmlhYmxlO1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJzT2ZmKCk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjb25zdCB3YXNUb29sYmFySGlkZGVuID0gKHRvb2xiYXIuc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnIHx8ICh0aGlzLl9pc0lubGluZSAmJiAhdGhpcy5faW5saW5lVG9vbGJhckF0dHIuaXNTaG93KSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIV92YXIuaXNGdWxsU2NyZWVuKSB7XHJcbiAgICAgICAgICAgICAgICBfdmFyLmlzRnVsbFNjcmVlbiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIF92YXIuX2Z1bGxTY3JlZW5BdHRycy5pbmxpbmUgPSB0aGlzLl9pc0lubGluZTtcclxuICAgICAgICAgICAgICAgIF92YXIuX2Z1bGxTY3JlZW5BdHRycy5iYWxsb29uID0gdGhpcy5faXNCYWxsb29uO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pc0lubGluZSB8fCB0aGlzLl9pc0JhbGxvb24pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pc0lubGluZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2lzQmFsbG9vbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBpZiAoISFvcHRpb25zLnRvb2xiYXJDb250YWluZXIpIGNvbnRleHQuZWxlbWVudC5yZWxhdGl2ZS5pbnNlcnRCZWZvcmUodG9vbGJhciwgZWRpdG9yQXJlYSk7XHJcblxyXG4gICAgICAgICAgICAgICAgdG9wQXJlYS5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7XHJcbiAgICAgICAgICAgICAgICB0b3BBcmVhLnN0eWxlLnRvcCA9ICcwJztcclxuICAgICAgICAgICAgICAgIHRvcEFyZWEuc3R5bGUubGVmdCA9ICcwJztcclxuICAgICAgICAgICAgICAgIHRvcEFyZWEuc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgICAgICB0b3BBcmVhLnN0eWxlLm1heFdpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICAgICAgdG9wQXJlYS5zdHlsZS5oZWlnaHQgPSAnMTAwJSc7XHJcbiAgICAgICAgICAgICAgICB0b3BBcmVhLnN0eWxlLnpJbmRleCA9ICcyMTQ3NDgzNjQ3JztcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5lbGVtZW50Ll9zdGlja3lEdW1teS5zdHlsZS5kaXNwbGF5ICE9PSAoJ25vbmUnICYmICcnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIF92YXIuX2Z1bGxTY3JlZW5BdHRycy5zdGlja3kgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC5fc3RpY2t5RHVtbXkuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUNsYXNzKHRvb2xiYXIsICdzZS10b29sYmFyLXN0aWNreScpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIF92YXIuX2JvZHlPdmVyZmxvdyA9IF9kLmJvZHkuc3R5bGUub3ZlcmZsb3c7XHJcbiAgICAgICAgICAgICAgICBfZC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XHJcblxyXG4gICAgICAgICAgICAgICAgX3Zhci5fZWRpdG9yQXJlYU9yaWdpbkNzc1RleHQgPSBlZGl0b3JBcmVhLnN0eWxlLmNzc1RleHQ7XHJcbiAgICAgICAgICAgICAgICBfdmFyLl93eXNpd3lnT3JpZ2luQ3NzVGV4dCA9IHd5c2l3eWdGcmFtZS5zdHlsZS5jc3NUZXh0O1xyXG4gICAgICAgICAgICAgICAgX3Zhci5fY29kZU9yaWdpbkNzc1RleHQgPSBjb2RlLnN0eWxlLmNzc1RleHQ7XHJcblxyXG4gICAgICAgICAgICAgICAgZWRpdG9yQXJlYS5zdHlsZS5jc3NUZXh0ID0gdG9vbGJhci5zdHlsZS5jc3NUZXh0ID0gJyc7XHJcbiAgICAgICAgICAgICAgICB3eXNpd3lnRnJhbWUuc3R5bGUuY3NzVGV4dCA9ICh3eXNpd3lnRnJhbWUuc3R5bGUuY3NzVGV4dC5tYXRjaCgvXFxzP2Rpc3BsYXkoXFxzKyk/OihcXHMrKT9bYS16QS1aXSs7LykgfHwgWycnXSlbMF07XHJcbiAgICAgICAgICAgICAgICBjb2RlLnN0eWxlLmNzc1RleHQgPSAoY29kZS5zdHlsZS5jc3NUZXh0Lm1hdGNoKC9cXHM/ZGlzcGxheShcXHMrKT86KFxccyspP1thLXpBLVpdKzsvKSB8fCBbJyddKVswXTtcclxuICAgICAgICAgICAgICAgIHRvb2xiYXIuc3R5bGUud2lkdGggPSB3eXNpd3lnRnJhbWUuc3R5bGUuaGVpZ2h0ID0gY29kZS5zdHlsZS5oZWlnaHQgPSAnMTAwJSc7XHJcbiAgICAgICAgICAgICAgICB0b29sYmFyLnN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJztcclxuICAgICAgICAgICAgICAgIHRvb2xiYXIuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcblxyXG4gICAgICAgICAgICAgICAgX3Zhci5pbm5lckhlaWdodF9mdWxsU2NyZWVuID0gKF93LmlubmVySGVpZ2h0IC0gdG9vbGJhci5vZmZzZXRIZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgZWRpdG9yQXJlYS5zdHlsZS5oZWlnaHQgPSAoX3Zhci5pbm5lckhlaWdodF9mdWxsU2NyZWVuIC0gb3B0aW9ucy5mdWxsU2NyZWVuT2Zmc2V0KSArICdweCc7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQpIHV0aWwuY2hhbmdlRWxlbWVudChlbGVtZW50LmZpcnN0RWxlbWVudENoaWxkLCBpY29ucy5yZWR1Y3Rpb24pO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmlmcmFtZSAmJiBvcHRpb25zLmhlaWdodCA9PT0gJ2F1dG8nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWRpdG9yQXJlYS5zdHlsZS5vdmVyZmxvdyA9ICdhdXRvJztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pZnJhbWVBdXRvSGVpZ2h0KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50LnRvcEFyZWEuc3R5bGUubWFyZ2luVG9wID0gb3B0aW9ucy5mdWxsU2NyZWVuT2Zmc2V0ICsgJ3B4JztcclxuICAgICAgICAgICAgICAgIHV0aWwuYWRkQ2xhc3ModGhpcy5fc3R5bGVDb21tYW5kTWFwLmZ1bGxTY3JlZW4sICdhY3RpdmUnKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIF92YXIuaXNGdWxsU2NyZWVuID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgd3lzaXd5Z0ZyYW1lLnN0eWxlLmNzc1RleHQgPSBfdmFyLl93eXNpd3lnT3JpZ2luQ3NzVGV4dDtcclxuICAgICAgICAgICAgICAgIGNvZGUuc3R5bGUuY3NzVGV4dCA9IF92YXIuX2NvZGVPcmlnaW5Dc3NUZXh0O1xyXG4gICAgICAgICAgICAgICAgdG9vbGJhci5zdHlsZS5jc3NUZXh0ID0gJyc7XHJcbiAgICAgICAgICAgICAgICBlZGl0b3JBcmVhLnN0eWxlLmNzc1RleHQgPSBfdmFyLl9lZGl0b3JBcmVhT3JpZ2luQ3NzVGV4dDtcclxuICAgICAgICAgICAgICAgIHRvcEFyZWEuc3R5bGUuY3NzVGV4dCA9IF92YXIuX29yaWdpbkNzc1RleHQ7XHJcbiAgICAgICAgICAgICAgICBfZC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gX3Zhci5fYm9keU92ZXJmbG93O1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICghIW9wdGlvbnMudG9vbGJhckNvbnRhaW5lcikgb3B0aW9ucy50b29sYmFyQ29udGFpbmVyLmFwcGVuZENoaWxkKHRvb2xiYXIpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnN0aWNreVRvb2xiYXIgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlQ2xhc3ModG9vbGJhciwgJ3NlLXRvb2xiYXItc3RpY2t5Jyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKF92YXIuX2Z1bGxTY3JlZW5BdHRycy5zdGlja3kgJiYgIW9wdGlvbnMudG9vbGJhckNvbnRhaW5lcikge1xyXG4gICAgICAgICAgICAgICAgICAgIF92YXIuX2Z1bGxTY3JlZW5BdHRycy5zdGlja3kgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQuX3N0aWNreUR1bW15LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICAgICAgICAgIHV0aWwuYWRkQ2xhc3ModG9vbGJhciwgXCJzZS10b29sYmFyLXN0aWNreVwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9pc0lubGluZSA9IF92YXIuX2Z1bGxTY3JlZW5BdHRycy5pbmxpbmU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9pc0JhbGxvb24gPSBfdmFyLl9mdWxsU2NyZWVuQXR0cnMuYmFsbG9vbjtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pc0lubGluZSkgZXZlbnQuX3Nob3dUb29sYmFySW5saW5lKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoISFvcHRpb25zLnRvb2xiYXJDb250YWluZXIpIHV0aWwucmVtb3ZlQ2xhc3ModG9vbGJhciwgJ3NlLXRvb2xiYXItYmFsbG9vbicpO1xyXG5cclxuICAgICAgICAgICAgICAgIGV2ZW50Lm9uU2Nyb2xsX3dpbmRvdygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQpIHV0aWwuY2hhbmdlRWxlbWVudChlbGVtZW50LmZpcnN0RWxlbWVudENoaWxkLCBpY29ucy5leHBhbnNpb24pO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC50b3BBcmVhLnN0eWxlLm1hcmdpblRvcCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVDbGFzcyh0aGlzLl9zdHlsZUNvbW1hbmRNYXAuZnVsbFNjcmVlbiwgJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAod2FzVG9vbGJhckhpZGRlbikgZnVuY3Rpb25zLnRvb2xiYXIuaGlkZSgpO1xyXG5cclxuICAgICAgICAgICAgLy8gdXNlciBldmVudFxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGZ1bmN0aW9ucy50b2dnbGVGdWxsU2NyZWVuID09PSAnZnVuY3Rpb24nKSBmdW5jdGlvbnMudG9nZ2xlRnVsbFNjcmVlbih0aGlzLl92YXJpYWJsZS5pc0Z1bGxTY3JlZW4sIHRoaXMpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBQcmludHMgdGhlIGN1cnJlbnQgY29udGVudHMgb2YgdGhlIGVkaXRvci5cclxuICAgICAgICAgKi9cclxuICAgICAgICBwcmludDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBjb25zdCBpZnJhbWUgPSB1dGlsLmNyZWF0ZUVsZW1lbnQoJ0lGUkFNRScpO1xyXG4gICAgICAgICAgICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgX2QuYm9keS5hcHBlbmRDaGlsZChpZnJhbWUpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgY29udGVudHNIVE1MID0gb3B0aW9ucy5wcmludFRlbXBsYXRlID8gb3B0aW9ucy5wcmludFRlbXBsYXRlLnJlcGxhY2UoL1xce1xce1xccypjb250ZW50c1xccypcXH1cXH0vaSwgdGhpcy5nZXRDb250ZW50cyh0cnVlKSkgOiB0aGlzLmdldENvbnRlbnRzKHRydWUpO1xyXG4gICAgICAgICAgICBjb25zdCBwcmludERvY3VtZW50ID0gdXRpbC5nZXRJZnJhbWVEb2N1bWVudChpZnJhbWUpO1xyXG4gICAgICAgICAgICBjb25zdCB3RG9jID0gdGhpcy5fd2Q7XHJcblxyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5pZnJhbWUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFycnRzID0gb3B0aW9ucy5fcHJpbnRDbGFzcyAhPT0gbnVsbCA/ICdjbGFzcz1cIicgKyBvcHRpb25zLl9wcmludENsYXNzICsgJ1wiJyA6IG9wdGlvbnMuZnVsbFBhZ2UgPyB1dGlsLmdldEF0dHJpYnV0ZXNUb1N0cmluZyh3RG9jLmJvZHksIFsnY29udGVudGVkaXRhYmxlJ10pIDogJ2NsYXNzPVwiJyArIG9wdGlvbnMuX2VkaXRhYmxlQ2xhc3MgKyAnXCInO1xyXG5cclxuICAgICAgICAgICAgICAgIHByaW50RG9jdW1lbnQud3JpdGUoJycgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8IURPQ1RZUEUgaHRtbD48aHRtbD4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPGhlYWQ+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgd0RvYy5oZWFkLmlubmVySFRNTCArXHJcbiAgICAgICAgICAgICAgICAgICAgJzwvaGVhZD4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPGJvZHkgJyArIGFycnRzICsgJz4nICsgY29udGVudHNIVE1MICsgJzwvYm9keT4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPC9odG1sPidcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsaW5rcyA9IF9kLmhlYWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2xpbmsnKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN0eWxlcyA9IF9kLmhlYWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3N0eWxlJyk7XHJcbiAgICAgICAgICAgICAgICBsZXQgbGlua0hUTUwgPSAnJztcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBsaW5rcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxpbmtIVE1MICs9IGxpbmtzW2ldLm91dGVySFRNTDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBzdHlsZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBsaW5rSFRNTCArPSBzdHlsZXNbaV0ub3V0ZXJIVE1MO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHByaW50RG9jdW1lbnQud3JpdGUoJycgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8IURPQ1RZUEUgaHRtbD48aHRtbD4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPGhlYWQ+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgbGlua0hUTUwgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8L2hlYWQ+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxib2R5IGNsYXNzPVwiJyArIChvcHRpb25zLl9wcmludENsYXNzICE9PSBudWxsID8gb3B0aW9ucy5fcHJpbnRDbGFzcyA6IG9wdGlvbnMuX2VkaXRhYmxlQ2xhc3MpICsgJ1wiPicgKyBjb250ZW50c0hUTUwgKyAnPC9ib2R5PicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8L2h0bWw+J1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5zaG93TG9hZGluZygpO1xyXG4gICAgICAgICAgICBfdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWZyYW1lLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gSUUgb3IgRWRnZVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzSUVfRWRnZSB8fCAhIV9kLmRvY3VtZW50TW9kZSB8fCAhIV93LlN0eWxlTWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50LmV4ZWNDb21tYW5kKCdwcmludCcsIGZhbHNlLCBudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZyYW1lLmNvbnRlbnRXaW5kb3cucHJpbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE90aGVyIGJyb3dzZXJzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmcmFtZS5jb250ZW50V2luZG93LnByaW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcignW1NVTkVESVRPUi5jb3JlLnByaW50LmZhaWxdIGVycm9yOiAnICsgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgICAgICAgICBjb3JlLmNsb3NlTG9hZGluZygpO1xyXG4gICAgICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlSXRlbShpZnJhbWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCAxMDAwKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gT3BlbiB0aGUgcHJldmlldyB3aW5kb3cuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcHJldmlldzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBjb3JlLnN1Ym1lbnVPZmYoKTtcclxuICAgICAgICAgICAgY29yZS5jb250YWluZXJPZmYoKTtcclxuICAgICAgICAgICAgY29yZS5jb250cm9sbGVyc09mZigpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29uc3QgY29udGVudHNIVE1MID0gb3B0aW9ucy5wcmV2aWV3VGVtcGxhdGUgPyBvcHRpb25zLnByZXZpZXdUZW1wbGF0ZS5yZXBsYWNlKC9cXHtcXHtcXHMqY29udGVudHNcXHMqXFx9XFx9L2ksIHRoaXMuZ2V0Q29udGVudHModHJ1ZSkpIDogdGhpcy5nZXRDb250ZW50cyh0cnVlKTtcclxuICAgICAgICAgICAgY29uc3Qgd2luZG93T2JqZWN0ID0gX3cub3BlbignJywgJ19ibGFuaycpO1xyXG4gICAgICAgICAgICB3aW5kb3dPYmplY3QubWltZVR5cGUgPSAndGV4dC9odG1sJztcclxuICAgICAgICAgICAgY29uc3Qgd0RvYyA9IHRoaXMuX3dkO1xyXG5cclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuaWZyYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhcnJ0cyA9IG9wdGlvbnMuX3ByaW50Q2xhc3MgIT09IG51bGwgPyAnY2xhc3M9XCInICsgb3B0aW9ucy5fcHJpbnRDbGFzcyArICdcIicgOiBvcHRpb25zLmZ1bGxQYWdlID8gdXRpbC5nZXRBdHRyaWJ1dGVzVG9TdHJpbmcod0RvYy5ib2R5LCBbJ2NvbnRlbnRlZGl0YWJsZSddKSA6ICdjbGFzcz1cIicgKyBvcHRpb25zLl9lZGl0YWJsZUNsYXNzICsgJ1wiJztcclxuXHJcbiAgICAgICAgICAgICAgICB3aW5kb3dPYmplY3QuZG9jdW1lbnQud3JpdGUoJycgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8IURPQ1RZUEUgaHRtbD48aHRtbD4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPGhlYWQ+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgd0RvYy5oZWFkLmlubmVySFRNTCArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxzdHlsZT5ib2R5IHtvdmVyZmxvdzphdXRvICFpbXBvcnRhbnQ7IG1hcmdpbjogMTBweCBhdXRvICFpbXBvcnRhbnQ7IGhlaWdodDphdXRvICFpbXBvcnRhbnQ7IG91dGxpbmU6MXB4IGRhc2hlZCAjY2NjO308L3N0eWxlPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8L2hlYWQ+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxib2R5ICcgKyBhcnJ0cyArICc+JyArIGNvbnRlbnRzSFRNTCArICc8L2JvZHk+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzwvaHRtbD4nXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbGlua3MgPSBfZC5oZWFkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdsaW5rJyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdHlsZXMgPSBfZC5oZWFkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzdHlsZScpO1xyXG4gICAgICAgICAgICAgICAgbGV0IGxpbmtIVE1MID0gJyc7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gbGlua3MubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBsaW5rSFRNTCArPSBsaW5rc1tpXS5vdXRlckhUTUw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gc3R5bGVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGlua0hUTUwgKz0gc3R5bGVzW2ldLm91dGVySFRNTDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgd2luZG93T2JqZWN0LmRvY3VtZW50LndyaXRlKCcnICtcclxuICAgICAgICAgICAgICAgICAgICAnPCFET0NUWVBFIGh0bWw+PGh0bWw+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxoZWFkPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8bWV0YSBjaGFyc2V0PVwidXRmLThcIiAvPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8bWV0YSBuYW1lPVwidmlld3BvcnRcIiBjb250ZW50PVwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTFcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPHRpdGxlPicgKyBsYW5nLnRvb2xiYXIucHJldmlldyArICc8L3RpdGxlPicgK1xyXG4gICAgICAgICAgICAgICAgICAgIGxpbmtIVE1MICtcclxuICAgICAgICAgICAgICAgICAgICAnPC9oZWFkPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8Ym9keSBjbGFzcz1cIicgKyAob3B0aW9ucy5fcHJpbnRDbGFzcyAhPT0gbnVsbCA/IG9wdGlvbnMuX3ByaW50Q2xhc3MgOiBvcHRpb25zLl9lZGl0YWJsZUNsYXNzKSArICdcIiBzdHlsZT1cIm1hcmdpbjoxMHB4IGF1dG8gIWltcG9ydGFudDsgaGVpZ2h0OmF1dG8gIWltcG9ydGFudDsgb3V0bGluZToxcHggZGFzaGVkICNjY2M7XCI+JyArIGNvbnRlbnRzSFRNTCArICc8L2JvZHk+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzwvaHRtbD4nXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIEhUTUwgc3RyaW5nXHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd8dW5kZWZpbmVkfSBodG1sIEhUTUwgc3RyaW5nXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgc2V0Q29udGVudHM6IGZ1bmN0aW9uIChodG1sKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlUmFuZ2UoKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnZlcnRWYWx1ZSA9IChodG1sID09PSBudWxsIHx8IGh0bWwgPT09IHVuZGVmaW5lZCkgPyAnJyA6IHRoaXMuY29udmVydENvbnRlbnRzRm9yRWRpdG9yKGh0bWwpO1xyXG4gICAgICAgICAgICB0aGlzLl9yZXNldENvbXBvbmVudHMoKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5fdmFyaWFibGUuaXNDb2RlVmlldykge1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50Lnd5c2l3eWcuaW5uZXJIVE1MID0gY29udmVydFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgLy8gaGlzdG9yeSBzdGFja1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2goZmFsc2UpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmNvbnZlcnRIVE1MRm9yQ29kZVZpZXcoY29udmVydFZhbHVlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NldENvZGVWaWV3KHZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBjb250ZW50cyBvZiB0aGUgaWZyYW1lJ3MgaGVhZCB0YWcgYW5kIGJvZHkgdGFnIHdoZW4gdXNpbmcgdGhlIFwiaWZyYW1lXCIgb3IgXCJmdWxsUGFnZVwiIG9wdGlvbi5cclxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY3R4IHsgaGVhZDogSFRNTCBzdHJpbmcsIGJvZHk6IEhUTUwgc3RyaW5nfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNldElmcmFtZUNvbnRlbnRzOiBmdW5jdGlvbiAoY3R4KSB7XHJcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5pZnJhbWUpIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKGN0eC5oZWFkKSB0aGlzLl93ZC5oZWFkLmlubmVySFRNTCA9IGN0eC5oZWFkLnJlcGxhY2UoLzxzY3JpcHRbXFxzXFxTXSo+W1xcc1xcU10qPFxcL3NjcmlwdD4vZ2ksICcnKTtcclxuICAgICAgICAgICAgaWYgKGN0eC5ib2R5KSB0aGlzLl93ZC5ib2R5LmlubmVySFRNTCA9IHRoaXMuY29udmVydENvbnRlbnRzRm9yRWRpdG9yKGN0eC5ib2R5KTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gR2V0cyB0aGUgY3VycmVudCBjb250ZW50c1xyXG4gICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gb25seUNvbnRlbnRzIFJldHVybiBvbmx5IHRoZSBjb250ZW50cyBvZiB0aGUgYm9keSB3aXRob3V0IGhlYWRlcnMgd2hlbiB0aGUgXCJmdWxsUGFnZVwiIG9wdGlvbiBpcyB0cnVlXHJcbiAgICAgICAgICogQHJldHVybnMge09iamVjdH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBnZXRDb250ZW50czogZnVuY3Rpb24gKG9ubHlDb250ZW50cykge1xyXG4gICAgICAgICAgICBjb25zdCBjb250ZW50cyA9IGNvbnRleHQuZWxlbWVudC53eXNpd3lnLmlubmVySFRNTDtcclxuICAgICAgICAgICAgY29uc3QgcmVuZGVySFRNTCA9IHV0aWwuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcbiAgICAgICAgICAgIHJlbmRlckhUTUwuaW5uZXJIVE1MID0gY29udGVudHM7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmaWdjYXB0aW9ucyA9IHV0aWwuZ2V0TGlzdENoaWxkcmVuKHJlbmRlckhUTUwsIGZ1bmN0aW9uIChjdXJyZW50KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gL0ZJR0NBUFRJT04vaS50ZXN0KGN1cnJlbnQubm9kZU5hbWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBmaWdjYXB0aW9ucy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgZmlnY2FwdGlvbnNbaV0ucmVtb3ZlQXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuZnVsbFBhZ2UgJiYgIW9ubHlDb250ZW50cykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYXR0cnMgPSB1dGlsLmdldEF0dHJpYnV0ZXNUb1N0cmluZyh0aGlzLl93ZC5ib2R5LCBbJ2NvbnRlbnRlZGl0YWJsZSddKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnPCFET0NUWVBFIGh0bWw+PGh0bWw+JyArIHRoaXMuX3dkLmhlYWQub3V0ZXJIVE1MICsgJzxib2R5ICcgKyBhdHRycyArICc+JyArIHJlbmRlckhUTUwuaW5uZXJIVE1MICsgJzwvYm9keT48L2h0bWw+JztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJIVE1MLmlubmVySFRNTDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIEhUTUwgc3RyaW5nIGFjY29yZGluZyB0byB0YWcgdHlwZSBhbmQgY29uZmlndXJhdGlvbi5cclxuICAgICAgICAgKiBVc2Ugb25seSBcImNsZWFuSFRNTFwiXHJcbiAgICAgICAgICogQHBhcmFtIHtOb2RlfSBub2RlIE5vZGVcclxuICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IHJlcXVpcmVGb3JtYXQgSWYgdHJ1ZSwgdGV4dCBub2RlcyB0aGF0IGRvIG5vdCBoYXZlIGEgZm9ybWF0IG5vZGUgaXMgd3JhcHBlZCB3aXRoIHRoZSBmb3JtYXQgdGFnLlxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX21ha2VMaW5lOiBmdW5jdGlvbiAobm9kZSwgcmVxdWlyZUZvcm1hdCkge1xyXG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0VGFnID0gb3B0aW9ucy5kZWZhdWx0VGFnO1xyXG4gICAgICAgICAgICAvLyBlbGVtZW50XHJcbiAgICAgICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodXRpbC5fZGlzYWxsb3dlZFRhZ3Mobm9kZSkpIHJldHVybiAnJztcclxuICAgICAgICAgICAgICAgIGlmICghcmVxdWlyZUZvcm1hdCB8fCAodXRpbC5pc0Zvcm1hdEVsZW1lbnQobm9kZSkgfHwgdXRpbC5pc1JhbmdlRm9ybWF0RWxlbWVudChub2RlKSB8fCB1dGlsLmlzQ29tcG9uZW50KG5vZGUpIHx8IHV0aWwuaXNNZWRpYShub2RlKSB8fCAodXRpbC5pc0FuY2hvcihub2RlKSAmJiB1dGlsLmlzTWVkaWEobm9kZS5maXJzdEVsZW1lbnRDaGlsZCkpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlLm91dGVySFRNTDtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICc8JyArIGRlZmF1bHRUYWcgKyAnPicgKyBub2RlLm91dGVySFRNTCArICc8LycgKyBkZWZhdWx0VGFnICsgJz4nO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIHRleHRcclxuICAgICAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IDMpIHtcclxuICAgICAgICAgICAgICAgIGlmICghcmVxdWlyZUZvcm1hdCkgcmV0dXJuIHV0aWwuX0hUTUxDb252ZXJ0b3Iobm9kZS50ZXh0Q29udGVudCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXh0QXJyYXkgPSBub2RlLnRleHRDb250ZW50LnNwbGl0KC9cXG4vZyk7XHJcbiAgICAgICAgICAgICAgICBsZXQgaHRtbCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIHRMZW4gPSB0ZXh0QXJyYXkubGVuZ3RoLCB0ZXh0OyBpIDwgdExlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHRleHRBcnJheVtpXS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRleHQubGVuZ3RoID4gMCkgaHRtbCArPSAnPCcgKyBkZWZhdWx0VGFnICsgJz4nICsgdXRpbC5fSFRNTENvbnZlcnRvcih0ZXh0KSArICc8LycgKyBkZWZhdWx0VGFnICsgJz4nO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGh0bWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gY29tbWVudHNcclxuICAgICAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IDggJiYgdGhpcy5fYWxsb3dIVE1MQ29tbWVudHMpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnPCEtLScgKyBub2RlLnRleHRDb250ZW50LnRyaW0oKSArICctLT4nO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFJlbW92ZXMgYXR0cmlidXRlIHZhbHVlcyBzdWNoIGFzIHN0eWxlIGFuZCBjb252ZXJ0cyB0YWdzIHRoYXQgZG8gbm90IGNvbmZvcm0gdG8gdGhlIFwiaHRtbDVcIiBzdGFuZGFyZC5cclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gdGV4dCBcclxuICAgICAgICAgKiBAcmV0dXJucyB7U3RyaW5nfSBIVE1MIHN0cmluZ1xyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX3RhZ0NvbnZlcnRvcjogZnVuY3Rpb24gKHRleHQpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLl9kaXNhbGxvd2VkVGV4dFRhZ3NSZWdFeHApIHJldHVybiB0ZXh0O1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZWMgPSBvcHRpb25zLl90ZXh0VGFnc01hcDtcclxuICAgICAgICAgICAgcmV0dXJuIHRleHQucmVwbGFjZSh0aGlzLl9kaXNhbGxvd2VkVGV4dFRhZ3NSZWdFeHAsIGZ1bmN0aW9uIChtLCB0LCBuLCBwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdCArICh0eXBlb2YgZWNbbl0gPT09ICdzdHJpbmcnID8gZWNbbl0gOiBuKSArIChwID8gJyAnICsgcCA6ICcnKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIERlbGV0ZSBkaXNhbGxvd2VkIHRhZ3NcclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gaHRtbCBIVE1MIHN0cmluZ1xyXG4gICAgICAgICAqIEByZXR1cm5zIHtTdHJpbmd9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfZGVsZXRlRGlzYWxsb3dlZFRhZ3M6IGZ1bmN0aW9uIChodG1sKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBodG1sXHJcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxuL2csICcnKVxyXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoLzwoc2NyaXB0fHN0eWxlKVtcXHNcXFNdKj5bXFxzXFxTXSo8XFwvKHNjcmlwdHxzdHlsZSk+L2dpLCAnJylcclxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC88W2EtejAtOV0rXFw6W2EtejAtOV0rW14+XlxcL10qPltePl0qPFxcL1thLXowLTldK1xcOlthLXowLTldKz4vZ2ksICcnKVxyXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UodGhpcy5lZGl0b3JUYWdzV2hpdGVsaXN0UmVnRXhwLCAnJyk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFRhZyBhbmQgdGFnIGF0dHJpYnV0ZSBjaGVjayBSZWdFeHAgZnVuY3Rpb24uICh1c2VkIGJ5IFwiY2xlYW5IVE1MXCIgYW5kIFwiY29udmVydENvbnRlbnRzRm9yRWRpdG9yXCIpXHJcbiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSBsb3dMZXZlbENoZWNrIFJvdyBsZXZlbCBjaGVja1xyXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBtIFJlZ0V4cCB2YWx1ZVxyXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0IFJlZ0V4cCB2YWx1ZVxyXG4gICAgICAgICAqIEByZXR1cm5zIHtTdHJpbmd9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfY2xlYW5UYWdzOiBmdW5jdGlvbiAobG93TGV2ZWxDaGVjaywgbSwgdCkge1xyXG4gICAgICAgICAgICBpZiAoL148W2EtejAtOV0rXFw6W2EtejAtOV0rL2kudGVzdChtKSkgcmV0dXJuIG07XHJcblxyXG4gICAgICAgICAgICBsZXQgdiA9IG51bGw7XHJcbiAgICAgICAgICAgIGNvbnN0IHRBdHRyID0gdGhpcy5fYXR0cmlidXRlc1RhZ3NXaGl0ZWxpc3RbdC5tYXRjaCgvKD8hPClbYS16QS1aMC05XFwtXSsvKVswXS50b0xvd2VyQ2FzZSgpXTtcclxuICAgICAgICAgICAgaWYgKHRBdHRyKSB2ID0gbS5tYXRjaCh0QXR0cik7XHJcbiAgICAgICAgICAgIGVsc2UgdiA9IG0ubWF0Y2godGhpcy5fYXR0cmlidXRlc1doaXRlbGlzdFJlZ0V4cCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIWxvd0xldmVsQ2hlY2sgfHwgLzxhXFxiL2kudGVzdCh0KSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3YgPSBtLm1hdGNoKC9pZFxccyo9XFxzKig/OlwifCcpW15cIiddKig/OlwifCcpLyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3YpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXYpIHYgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICB2LnB1c2goc3ZbMF0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoKCFsb3dMZXZlbENoZWNrIHx8IC88c3Bhbi9pLnRlc3QodCkpICYmICghdiB8fCAhL3N0eWxlPS9pLnRlc3Qodi50b1N0cmluZygpKSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN2ID0gbS5tYXRjaCgvc3R5bGVcXHMqPVxccyooPzpcInwnKVteXCInXSooPzpcInwnKS8pO1xyXG4gICAgICAgICAgICAgICAgaWYgKHN2KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF2KSB2ID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgdi5wdXNoKHN2WzBdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHYpIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB2Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxvd0xldmVsQ2hlY2sgJiYgL15jbGFzcz1cIig/IShfX3NlX198c2UtfGthdGV4KSkvLnRlc3QodltpXSkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHQgKz0gJyAnICsgKC9eKD86aHJlZnxzcmMpXFxzKj1cXHMqKCd8XCJ8XFxzKSpqYXZhc2NyaXB0XFxzKlxcOi9pLnRlc3QodltpXSkgPyAnJyA6IHZbaV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdDtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gR2V0cyB0aGUgY2xlYW4gSFRNTCBjb2RlIGZvciBlZGl0b3JcclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gaHRtbCBIVE1MIHN0cmluZ1xyXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfFJlZ0V4cHxudWxsfSB3aGl0ZWxpc3QgUmVndWxhciBleHByZXNzaW9uIG9mIGFsbG93ZWQgdGFncy5cclxuICAgICAgICAgKiBSZWdFeHAgb2JqZWN0IGlzIGNyZWF0ZSBieSB1dGlsLmNyZWF0ZVRhZ3NXaGl0ZWxpc3QgbWV0aG9kLiAoY29yZS5wYXN0ZVRhZ3NXaGl0ZWxpc3RSZWdFeHApXHJcbiAgICAgICAgICogQHJldHVybnMge1N0cmluZ31cclxuICAgICAgICAgKi9cclxuICAgICAgICBjbGVhbkhUTUw6IGZ1bmN0aW9uIChodG1sLCB3aGl0ZWxpc3QpIHtcclxuICAgICAgICAgICAgaHRtbCA9IHRoaXMuX2RlbGV0ZURpc2FsbG93ZWRUYWdzKHRoaXMuX3BhcnNlci5wYXJzZUZyb21TdHJpbmcoaHRtbCwgJ3RleHQvaHRtbCcpLmJvZHkuaW5uZXJIVE1MKS5yZXBsYWNlKC8oPFthLXpBLVowLTlcXC1dKylbXj5dKig/PT4pL2csIHRoaXMuX2NsZWFuVGFncy5iaW5kKHRoaXMsIHRydWUpKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGRvbSA9IF9kLmNyZWF0ZVJhbmdlKCkuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGh0bWwpO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgdXRpbC5fY29uc2lzdGVuY3lDaGVja09mSFRNTChkb20sIHRoaXMuX2h0bWxDaGVja1doaXRlbGlzdFJlZ0V4cCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1tTVU5FRElUT1IuY2xlYW5IVE1MLmNvbnNpc3RlbmN5Q2hlY2suZmFpbF0gJyArIGVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYgKHRoaXMubWFuYWdlZFRhZ3NJbmZvICYmIHRoaXMubWFuYWdlZFRhZ3NJbmZvLnF1ZXJ5KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXh0Q29tcExpc3QgPSBkb20ucXVlcnlTZWxlY3RvckFsbCh0aGlzLm1hbmFnZWRUYWdzSW5mby5xdWVyeSk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdGV4dENvbXBMaXN0Lmxlbmd0aCwgaW5pdE1ldGhvZCwgY2xhc3NMaXN0OyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjbGFzc0xpc3QgPSBbXS5zbGljZS5jYWxsKHRleHRDb21wTGlzdFtpXS5jbGFzc0xpc3QpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGMgPSAwLCBjTGVuID0gY2xhc3NMaXN0Lmxlbmd0aDsgYyA8IGNMZW47IGMrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbml0TWV0aG9kID0gdGhpcy5tYW5hZ2VkVGFnc0luZm8ubWFwW2NsYXNzTGlzdFtjXV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbml0TWV0aG9kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0TWV0aG9kKHRleHRDb21wTGlzdFtpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgZG9tVHJlZSA9IGRvbS5jaGlsZE5vZGVzO1xyXG4gICAgICAgICAgICBsZXQgY2xlYW5IVE1MID0gJyc7XHJcbiAgICAgICAgICAgIGxldCByZXF1aXJlRm9ybWF0ID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gZG9tVHJlZS5sZW5ndGgsIHQ7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdCA9IGRvbVRyZWVbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAodC5ub2RlVHlwZSA9PT0gMSAmJiAhdXRpbC5pc1RleHRTdHlsZUVsZW1lbnQodCkgJiYgIXV0aWwuaXNCcmVhayh0KSAmJiAhdXRpbC5fZGlzYWxsb3dlZFRhZ3ModCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXF1aXJlRm9ybWF0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGRvbVRyZWUubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGNsZWFuSFRNTCArPSB0aGlzLl9tYWtlTGluZShkb21UcmVlW2ldLCByZXF1aXJlRm9ybWF0KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2xlYW5IVE1MID0gdXRpbC5odG1sUmVtb3ZlV2hpdGVTcGFjZShjbGVhbkhUTUwpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGFnQ29udmVydG9yKCFjbGVhbkhUTUwgPyBodG1sIDogIXdoaXRlbGlzdCA/IGNsZWFuSFRNTCA6IGNsZWFuSFRNTC5yZXBsYWNlKHR5cGVvZiB3aGl0ZWxpc3QgPT09ICdzdHJpbmcnID8gdXRpbC5jcmVhdGVUYWdzV2hpdGVsaXN0KHdoaXRlbGlzdCkgOiB3aGl0ZWxpc3QsICcnKSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIGNvbnRlbnRzIGludG8gYSBmb3JtYXQgdGhhdCBjYW4gYmUgcGxhY2VkIGluIGFuIGVkaXRvclxyXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBjb250ZW50cyBjb250ZW50c1xyXG4gICAgICAgICAqIEByZXR1cm5zIHtTdHJpbmd9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY29udmVydENvbnRlbnRzRm9yRWRpdG9yOiBmdW5jdGlvbiAoY29udGVudHMpIHtcclxuICAgICAgICAgICAgY29udGVudHMgPSB0aGlzLl9kZWxldGVEaXNhbGxvd2VkVGFncyh0aGlzLl9wYXJzZXIucGFyc2VGcm9tU3RyaW5nKGNvbnRlbnRzLCAndGV4dC9odG1sJykuYm9keS5pbm5lckhUTUwpLnJlcGxhY2UoLyg8W2EtekEtWjAtOVxcLV0rKVtePl0qKD89PikvZywgdGhpcy5fY2xlYW5UYWdzLmJpbmQodGhpcywgZmFsc2UpKTtcclxuICAgICAgICAgICAgY29uc3QgZG9tID0gX2QuY3JlYXRlUmFuZ2UoKS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoY29udGVudHMpO1xyXG5cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHV0aWwuX2NvbnNpc3RlbmN5Q2hlY2tPZkhUTUwoZG9tLCB0aGlzLl9odG1sQ2hlY2tXaGl0ZWxpc3RSZWdFeHAsIGZhbHNlKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignW1NVTkVESVRPUi5jb252ZXJ0Q29udGVudHNGb3JFZGl0b3IuY29uc2lzdGVuY3lDaGVjay5mYWlsXSAnICsgZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5tYW5hZ2VkVGFnc0luZm8gJiYgdGhpcy5tYW5hZ2VkVGFnc0luZm8ucXVlcnkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRleHRDb21wTGlzdCA9IGRvbS5xdWVyeVNlbGVjdG9yQWxsKHRoaXMubWFuYWdlZFRhZ3NJbmZvLnF1ZXJ5KTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0ZXh0Q29tcExpc3QubGVuZ3RoLCBpbml0TWV0aG9kLCBjbGFzc0xpc3Q7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTGlzdCA9IFtdLnNsaWNlLmNhbGwodGV4dENvbXBMaXN0W2ldLmNsYXNzTGlzdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgYyA9IDAsIGNMZW4gPSBjbGFzc0xpc3QubGVuZ3RoOyBjIDwgY0xlbjsgYysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluaXRNZXRob2QgPSB0aGlzLm1hbmFnZWRUYWdzSW5mby5tYXBbY2xhc3NMaXN0W2NdXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluaXRNZXRob2QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRNZXRob2QodGV4dENvbXBMaXN0W2ldKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjb25zdCBkb21UcmVlID0gZG9tLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgICAgIGxldCBjbGVhbkhUTUwgPSAnJztcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGRvbVRyZWUubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGNsZWFuSFRNTCArPSB0aGlzLl9tYWtlTGluZShkb21UcmVlW2ldLCB0cnVlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNsZWFuSFRNTC5sZW5ndGggPT09IDApIHJldHVybiAnPCcgKyBvcHRpb25zLmRlZmF1bHRUYWcgKyAnPjxicj48LycgKyBvcHRpb25zLmRlZmF1bHRUYWcgKyAnPic7XHJcblxyXG4gICAgICAgICAgICBjbGVhbkhUTUwgPSB1dGlsLmh0bWxSZW1vdmVXaGl0ZVNwYWNlKGNsZWFuSFRNTCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90YWdDb252ZXJ0b3IoY2xlYW5IVE1MKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgd3lzaXd5ZyBhcmVhIGVsZW1lbnQgaW50byBhIGZvcm1hdCB0aGF0IGNhbiBiZSBwbGFjZWQgaW4gYW4gZWRpdG9yIG9mIGNvZGUgdmlldyBtb2RlXHJcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fFN0cmluZ30gaHRtbCBXWVNJV1lHIGVsZW1lbnQgKGNvbnRleHQuZWxlbWVudC53eXNpd3lnKSBvciBIVE1MIHN0cmluZy5cclxuICAgICAgICAgKiBAcmV0dXJucyB7U3RyaW5nfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvbnZlcnRIVE1MRm9yQ29kZVZpZXc6IGZ1bmN0aW9uIChodG1sKSB7XHJcbiAgICAgICAgICAgIGxldCByZXR1cm5IVE1MID0gJyc7XHJcbiAgICAgICAgICAgIGNvbnN0IHdSZWdFeHAgPSBfdy5SZWdFeHA7XHJcbiAgICAgICAgICAgIGNvbnN0IGJyUmVnID0gbmV3IHdSZWdFeHAoJ14oQkxPQ0tRVU9URXxQUkV8VEFCTEV8VEhFQUR8VEJPRFl8VFJ8VEh8VER8T0x8VUx8SU1HfElGUkFNRXxWSURFT3xBVURJT3xGSUdVUkV8RklHQ0FQVElPTnxIUnxCUnxDQU5WQVN8U0VMRUNUKSQnLCAnaScpO1xyXG4gICAgICAgICAgICBjb25zdCB3RG9jID0gdHlwZW9mIGh0bWwgPT09ICdzdHJpbmcnID8gX2QuY3JlYXRlUmFuZ2UoKS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoaHRtbCkgOiBodG1sO1xyXG4gICAgICAgICAgICBjb25zdCBpc0Zvcm1hdCA9IGZ1bmN0aW9uIChjdXJyZW50KSB7IHJldHVybiB0aGlzLmlzRm9ybWF0RWxlbWVudChjdXJyZW50KSB8fCB0aGlzLmlzQ29tcG9uZW50KGN1cnJlbnQpOyB9LmJpbmQodXRpbCk7XHJcblxyXG4gICAgICAgICAgICBsZXQgaW5kZW50U2l6ZSA9IHRoaXMuX3ZhcmlhYmxlLmNvZGVJbmRlbnQgKiAxO1xyXG4gICAgICAgICAgICBpbmRlbnRTaXplID0gaW5kZW50U2l6ZSA+IDAgPyBuZXcgX3cuQXJyYXkoaW5kZW50U2l6ZSArIDEpLmpvaW4oJyAnKSA6ICcnO1xyXG5cclxuICAgICAgICAgICAgKGZ1bmN0aW9uIHJlY3Vyc2lvbkZ1bmMgKGVsZW1lbnQsIGluZGVudCwgbGluZUJSKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGVsZW1lbnQuY2hpbGROb2RlcztcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRSZWdUZXN0ID0gYnJSZWcudGVzdChlbGVtZW50Lm5vZGVOYW1lKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRJbmRlbnQgPSAoZWxlbWVudFJlZ1Rlc3QgPyBpbmRlbnQgOiAnJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGNoaWxkcmVuLmxlbmd0aCwgbm9kZSwgYnIsIG5vZGVSZWdUZXN0LCB0YWcsIHRhZ0luZGVudDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZSA9IGNoaWxkcmVuW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGVSZWdUZXN0ID0gYnJSZWcudGVzdChub2RlLm5vZGVOYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICBiciA9IG5vZGVSZWdUZXN0ID8gJ1xcbicgOiAnJztcclxuICAgICAgICAgICAgICAgICAgICBsaW5lQlIgPSBpc0Zvcm1hdChub2RlKSAmJiAhZWxlbWVudFJlZ1Rlc3QgJiYgIS9eKFRIfFREKSQvaS50ZXN0KGVsZW1lbnQubm9kZU5hbWUpID8gJ1xcbicgOiAnJztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IDgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuSFRNTCArPSAnXFxuPCEtLSAnICsgbm9kZS50ZXh0Q29udGVudC50cmltKCkgKyAnIC0tPicgKyBicjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSAzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdXRpbC5pc0xpc3Qobm9kZS5wYXJlbnRFbGVtZW50KSkgcmV0dXJuSFRNTCArPSB1dGlsLl9IVE1MQ29udmVydG9yKC9eXFxuKyQvLnRlc3Qobm9kZS5kYXRhKSA/ICcnIDogbm9kZS5kYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkTm9kZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybkhUTUwgKz0gKC9eSFIkL2kudGVzdChub2RlLm5vZGVOYW1lKSA/ICdcXG4nIDogJycpICsgKC9eUFJFJC9pLnRlc3Qobm9kZS5wYXJlbnRFbGVtZW50Lm5vZGVOYW1lKSAmJiAvXkJSJC9pLnRlc3Qobm9kZS5ub2RlTmFtZSkgPyAnJyA6IGVsZW1lbnRJbmRlbnQpICsgbm9kZS5vdXRlckhUTUwgKyBicjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUub3V0ZXJIVE1MKSB7IC8vIElFXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybkhUTUwgKz0gbmV3IF93LlhNTFNlcmlhbGl6ZXIoKS5zZXJpYWxpemVUb1N0cmluZyhub2RlKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWcgPSBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhZ0luZGVudCA9IGVsZW1lbnRJbmRlbnQgfHwgbm9kZVJlZ1Rlc3QgPyBpbmRlbnQgOiAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuSFRNTCArPSAobGluZUJSIHx8IChlbGVtZW50UmVnVGVzdCA/ICcnIDogYnIpKSArIHRhZ0luZGVudCArIG5vZGUub3V0ZXJIVE1MLm1hdGNoKHdSZWdFeHAoJzwnICsgdGFnICsgJ1tePl0qPicsICdpJykpWzBdICsgYnI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Vyc2lvbkZ1bmMobm9kZSwgaW5kZW50ICsgaW5kZW50U2l6ZSwgJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5IVE1MICs9ICgvXFxuJC8udGVzdChyZXR1cm5IVE1MKSA/IHRhZ0luZGVudCA6ICcnKSArICc8LycgKyB0YWcgKyAnPicgKyAobGluZUJSIHx8IGJyIHx8IGVsZW1lbnRSZWdUZXN0ID8gJ1xcbicgOiAnJyB8fCAvXihUSHxURCkkL2kudGVzdChub2RlLm5vZGVOYW1lKSA/ICdcXG4nIDogJycpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSh3RG9jLCAnJywgJ1xcbicpKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiByZXR1cm5IVE1MLnRyaW0oKSArICdcXG4nO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBBZGQgYW4gZXZlbnQgdG8gZG9jdW1lbnQuXHJcbiAgICAgICAgICogV2hlbiBjcmVhdGVkIGFzIGFuIElmcmFtZSwgdGhlIHNhbWUgZXZlbnQgaXMgYWRkZWQgdG8gdGhlIGRvY3VtZW50IGluIHRoZSBJZnJhbWUuXHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgRXZlbnQgdHlwZVxyXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIEV2ZW50IGxpc3RlbmVyXHJcbiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSB1c2VDYXB0dXJlIFVzZSBldmVudCBjYXB0dXJlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYWRkRG9jRXZlbnQ6IGZ1bmN0aW9uICh0eXBlLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSkge1xyXG4gICAgICAgICAgICBfZC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKTtcclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuaWZyYW1lKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl93ZC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBSZW1vdmUgZXZlbnRzIGZyb20gZG9jdW1lbnQuXHJcbsKgICAgICAgICAqIFdoZW4gY3JlYXRlZCBhcyBhbiBJZnJhbWUsIHRoZSBldmVudCBvZiB0aGUgZG9jdW1lbnQgaW5zaWRlIHRoZSBJZnJhbWUgaXMgYWxzbyByZW1vdmVkLlxyXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIEV2ZW50IHR5cGVcclxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciBFdmVudCBsaXN0ZW5lclxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHJlbW92ZURvY0V2ZW50OiBmdW5jdGlvbiAodHlwZSwgbGlzdGVuZXIpIHtcclxuICAgICAgICAgICAgX2QucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcik7XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmlmcmFtZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fd2QucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gVGhlIGN1cnJlbnQgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaXMgY291bnRlZCBhbmQgZGlzcGxheWVkLlxyXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dFRleHQgVGV4dCBhZGRlZC5cclxuICAgICAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9jaGFyQ291bnQ6IGZ1bmN0aW9uIChpbnB1dFRleHQpIHtcclxuICAgICAgICAgICAgY29uc3QgbWF4Q2hhckNvdW50ID0gb3B0aW9ucy5tYXhDaGFyQ291bnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvdW50VHlwZSA9IG9wdGlvbnMuY2hhckNvdW50ZXJUeXBlO1xyXG4gICAgICAgICAgICBsZXQgbmV4dENoYXJDb3VudCA9IDA7XHJcbiAgICAgICAgICAgIGlmICghIWlucHV0VGV4dCkgbmV4dENoYXJDb3VudCA9IHRoaXMuZ2V0Q2hhckxlbmd0aChpbnB1dFRleHQsIGNvdW50VHlwZSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9zZXRDaGFyQ291bnQoKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChtYXhDaGFyQ291bnQgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgb3ZlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY291bnQgPSBmdW5jdGlvbnMuZ2V0Q2hhckNvdW50KGNvdW50VHlwZSk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGlmIChjb3VudCA+IG1heENoYXJDb3VudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG92ZXIgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0Q2hhckNvdW50ID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lZGl0b3JSYW5nZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByYW5nZSA9IHRoaXMuZ2V0UmFuZ2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kT2ZmID0gcmFuZ2UuZW5kT2Zmc2V0IC0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGV4dCA9IHRoaXMuZ2V0U2VsZWN0aW9uTm9kZSgpLnRleHRDb250ZW50O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzbGljZVBvc2l0aW9uID0gcmFuZ2UuZW5kT2Zmc2V0IC0gKGNvdW50IC0gbWF4Q2hhckNvdW50KTtcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFNlbGVjdGlvbk5vZGUoKS50ZXh0Q29udGVudCA9IHRleHQuc2xpY2UoMCwgc2xpY2VQb3NpdGlvbiA8IDAgPyAwIDogc2xpY2VQb3NpdGlvbikgKyB0ZXh0LnNsaWNlKHJhbmdlLmVuZE9mZnNldCwgdGV4dC5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFJhbmdlKHJhbmdlLmVuZENvbnRhaW5lciwgZW5kT2ZmLCByYW5nZS5lbmRDb250YWluZXIsIGVuZE9mZik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoY291bnQgKyBuZXh0Q2hhckNvdW50KSA+IG1heENoYXJDb3VudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG92ZXIgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChvdmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FsbENvdW50ZXJCbGluaygpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0Q2hhckNvdW50ID4gMCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gV2hlbiBcImVsZW1lbnRcIiBpcyBhZGRlZCwgaWYgaXQgaXMgZ3JlYXRlciB0aGFuIFwib3B0aW9ucy5tYXhDaGFyQ291bnRcIiwgZmFsc2UgaXMgcmV0dXJuZWQuXHJcbiAgICAgICAgICogQHBhcmFtIHtOb2RlfFN0cmluZ30gZWxlbWVudCBFbGVtZW50IG5vZGUgb3IgU3RyaW5nLlxyXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfG51bGx9IGNoYXJDb3VudGVyVHlwZSBjaGFyQ291bnRlclR5cGUuIElmIGl0IGlzIG51bGwsIHRoZSBvcHRpb25zLmNoYXJDb3VudGVyVHlwZVxyXG4gICAgICAgICAqIEByZXR1cm5zIHtCb29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNoZWNrQ2hhckNvdW50OiBmdW5jdGlvbiAoZWxlbWVudCwgY2hhckNvdW50ZXJUeXBlKSB7XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLm1heENoYXJDb3VudCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY291bnRUeXBlID0gY2hhckNvdW50ZXJUeXBlIHx8IG9wdGlvbnMuY2hhckNvdW50ZXJUeXBlO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbGVuZ3RoID0gdGhpcy5nZXRDaGFyTGVuZ3RoKCh0eXBlb2YgZWxlbWVudCA9PT0gJ3N0cmluZycgPyBlbGVtZW50IDogKHRoaXMuX2NoYXJUeXBlSFRNTCAmJiBlbGVtZW50Lm5vZGVUeXBlID09PSAxKSA/IGVsZW1lbnQub3V0ZXJIVE1MIDogZWxlbWVudC50ZXh0Q29udGVudCksIGNvdW50VHlwZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAobGVuZ3RoID4gMCAmJiBsZW5ndGggKyBmdW5jdGlvbnMuZ2V0Q2hhckNvdW50KGNvdW50VHlwZSkgPiBvcHRpb25zLm1heENoYXJDb3VudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NhbGxDb3VudGVyQmxpbmsoKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEdldCB0aGUgbGVuZ3RoIG9mIHRoZSBjb250ZW50LlxyXG4gICAgICAgICAqIERlcGVuZGluZyBvbiB0aGUgb3B0aW9uLCB0aGUgbGVuZ3RoIG9mIHRoZSBjaGFyYWN0ZXIgaXMgdGFrZW4uIChjaGFyQ291bnRlclR5cGUpXHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGNvbnRlbnQgQ29udGVudCB0byBjb3VudFxyXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBjaGFyQ291bnRlclR5cGUgb3B0aW9ucy5jaGFyQ291bnRlclR5cGVcclxuICAgICAgICAgKiBAcmV0dXJucyB7TnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGdldENoYXJMZW5ndGg6IGZ1bmN0aW9uIChjb250ZW50LCBjaGFyQ291bnRlclR5cGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIC9ieXRlLy50ZXN0KGNoYXJDb3VudGVyVHlwZSkgPyB1dGlsLmdldEJ5dGVMZW5ndGgoY29udGVudCkgOiBjb250ZW50Lmxlbmd0aDtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gU2V0IHRoZSBjaGFyIGNvdW50IHRvIGNoYXJDb3VudGVyIGVsZW1lbnQgdGV4dENvbnRlbnQuXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfc2V0Q2hhckNvdW50OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChjb250ZXh0LmVsZW1lbnQuY2hhckNvdW50ZXIpIHtcclxuICAgICAgICAgICAgICAgIF93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyBjb250ZXh0LmVsZW1lbnQuY2hhckNvdW50ZXIudGV4dENvbnRlbnQgPSBmdW5jdGlvbnMuZ2V0Q2hhckNvdW50KG9wdGlvbnMuY2hhckNvdW50ZXJUeXBlKTsgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gVGhlIGNoYXJhY3RlciBjb3VudGVyIGJsaW5rcy5cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9jYWxsQ291bnRlckJsaW5rOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoYXJXcmFwcGVyID0gY29udGV4dC5lbGVtZW50LmNoYXJXcmFwcGVyO1xyXG4gICAgICAgICAgICBpZiAoY2hhcldyYXBwZXIgJiYgIXV0aWwuaGFzQ2xhc3MoY2hhcldyYXBwZXIsICdzZS1ibGluaycpKSB7XHJcbiAgICAgICAgICAgICAgICB1dGlsLmFkZENsYXNzKGNoYXJXcmFwcGVyLCAnc2UtYmxpbmsnKTtcclxuICAgICAgICAgICAgICAgIF93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlQ2xhc3MoY2hhcldyYXBwZXIsICdzZS1ibGluaycpO1xyXG4gICAgICAgICAgICAgICAgfSwgNjAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBDaGVjayB0aGUgY29tcG9uZW50cyBzdWNoIGFzIGltYWdlIGFuZCB2aWRlbyBhbmQgbW9kaWZ5IHRoZW0gYWNjb3JkaW5nIHRvIHRoZSBmb3JtYXQuXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfY2hlY2tDb21wb25lbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0aGlzLl9maWxlSW5mb1BsdWdpbnNDaGVjay5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZmlsZUluZm9QbHVnaW5zQ2hlY2tbaV0oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBJbml0aWFsaXplIHRoZSBpbmZvcm1hdGlvbiBvZiB0aGUgY29tcG9uZW50cy5cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9yZXNldENvbXBvbmVudHM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRoaXMuX2ZpbGVJbmZvUGx1Z2luc1Jlc2V0Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9maWxlSW5mb1BsdWdpbnNSZXNldFtpXSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFNldCBtZXRob2QgaW4gdGhlIGNvZGUgdmlldyBhcmVhXHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlIEhUTUwgc3RyaW5nXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfc2V0Q29kZVZpZXc6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5jb2RlTWlycm9yRWRpdG9yKSB7XHJcbiAgICAgICAgICAgICAgICBvcHRpb25zLmNvZGVNaXJyb3JFZGl0b3IuZ2V0RG9jKCkuc2V0VmFsdWUodmFsdWUpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50LmNvZGUudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBHZXQgbWV0aG9kIGluIHRoZSBjb2RlIHZpZXcgYXJlYVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX2dldENvZGVWaWV3OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25zLmNvZGVNaXJyb3JFZGl0b3IgPyBvcHRpb25zLmNvZGVNaXJyb3JFZGl0b3IuZ2V0RG9jKCkuZ2V0VmFsdWUoKSA6IGNvbnRleHQuZWxlbWVudC5jb2RlLnZhbHVlO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiByZW1vdmUgY2xhc3MsIGRpc3BsYXkgdGV4dC5cclxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fG51bGx9IGlnbm9yZWRMaXN0IElnb25yZWQgYnV0dG9uIGxpc3RcclxuICAgICAgICAgKi9cclxuICAgICAgICBfc2V0S2V5RWZmZWN0OiBmdW5jdGlvbiAoaWdub3JlZExpc3QpIHtcclxuICAgICAgICAgICAgY29uc3QgY29tbWFuZE1hcCA9IHRoaXMuY29tbWFuZE1hcDtcclxuICAgICAgICAgICAgY29uc3QgYWN0aXZlUGx1Z2lucyA9IHRoaXMuYWN0aXZlUGx1Z2lucztcclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBjb21tYW5kTWFwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaWdub3JlZExpc3QuaW5kZXhPZihrZXkpID4gLTEgfHwgIXV0aWwuaGFzT3duKGNvbW1hbmRNYXAsIGtleSkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFjdGl2ZVBsdWdpbnMuaW5kZXhPZihrZXkpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBwbHVnaW5zW2tleV0uYWN0aXZlLmNhbGwodGhpcywgbnVsbCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbW1hbmRNYXAuT1VUREVOVCAmJiAvXk9VVERFTlQkL2kudGVzdChrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzUmVhZE9ubHkpIGNvbW1hbmRNYXAuT1VUREVOVC5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbW1hbmRNYXAuSU5ERU5UICYmIC9eSU5ERU5UJC9pLnRlc3Qoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc1JlYWRPbmx5KSBjb21tYW5kTWFwLklOREVOVC5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlQ2xhc3MoY29tbWFuZE1hcFtrZXldLCAnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gSW5pdGlhbGl6IGNvcmUgdmFyaWFibGVcclxuICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IHJlbG9hZCBJcyByZWxvb2FkP1xyXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBfaW5pdEhUTUwgaW5pdGlhbCBodG1sIHN0cmluZ1xyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX2luaXQ6IGZ1bmN0aW9uIChyZWxvYWQsIF9pbml0SFRNTCkge1xyXG4gICAgICAgICAgICBjb25zdCB3UmVnRXhwID0gX3cuUmVnRXhwO1xyXG4gICAgICAgICAgICB0aGlzLl93dyA9IG9wdGlvbnMuaWZyYW1lID8gY29udGV4dC5lbGVtZW50Lnd5c2l3eWdGcmFtZS5jb250ZW50V2luZG93IDogX3c7XHJcbiAgICAgICAgICAgIHRoaXMuX3dkID0gX2Q7XHJcbiAgICAgICAgICAgIHRoaXMuX2NoYXJUeXBlSFRNTCA9IG9wdGlvbnMuY2hhckNvdW50ZXJUeXBlID09PSAnYnl0ZS1odG1sJztcclxuXHJcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5pZnJhbWUgJiYgdHlwZW9mIF93LlNoYWRvd1Jvb3QgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIGxldCBjaGlsZCA9IGNvbnRleHQuZWxlbWVudC53eXNpd3lnRnJhbWU7XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoY2hpbGQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQuc2hhZG93Um9vdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGFkb3dSb290ID0gY2hpbGQuc2hhZG93Um9vdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZCBpbnN0YW5jZW9mIF93LlNoYWRvd1Jvb3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hhZG93Um9vdCA9IGNoaWxkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3NoYWRvd1Jvb3QpIHRoaXMuX3NoYWRvd1Jvb3RDb250cm9sbGVyRXZlbnRUYXJnZXQgPSBbXTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gc2V0IGRpc2FsbG93IHRleHQgbm9kZXNcclxuICAgICAgICAgICAgY29uc3QgZGlzYWxsb3dUZXh0VGFncyA9IF93Lk9iamVjdC5rZXlzKG9wdGlvbnMuX3RleHRUYWdzTWFwKTtcclxuICAgICAgICAgICAgY29uc3QgYWxsb3dUZXh0VGFncyA9ICFvcHRpb25zLmFkZFRhZ3NXaGl0ZWxpc3QgPyBbXSA6IG9wdGlvbnMuYWRkVGFnc1doaXRlbGlzdC5zcGxpdCgnfCcpLmZpbHRlcihmdW5jdGlvbiAodikgeyByZXR1cm4gL2J8aXxpbnN8c3xzdHJpa2UvaS50ZXN0KHYpOyB9KTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbGxvd1RleHRUYWdzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBkaXNhbGxvd1RleHRUYWdzLnNwbGljZShkaXNhbGxvd1RleHRUYWdzLmluZGV4T2YoYWxsb3dUZXh0VGFnc1tpXS50b0xvd2VyQ2FzZSgpKSwgMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fZGlzYWxsb3dlZFRleHRUYWdzUmVnRXhwID0gZGlzYWxsb3dUZXh0VGFncy5sZW5ndGggPT09IDAgPyBudWxsIDogbmV3IHdSZWdFeHAoJyg8XFxcXC8/KSgnICsgZGlzYWxsb3dUZXh0VGFncy5qb2luKCd8JykgKyAnKVxcXFxiXFxcXHMqKFtePl48XSspP1xcXFxzKig/PT4pJywgJ2dpJyk7XHJcblxyXG4gICAgICAgICAgICAvLyBzZXQgd2hpdGVsaXN0XHJcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRBdHRyID0gJ2NvbnRlbnRlZGl0YWJsZXxjb2xzcGFufHJvd3NwYW58dGFyZ2V0fGhyZWZ8ZG93bmxvYWR8cmVsfHNyY3xhbHR8Y2xhc3N8dHlwZXxjb250cm9sc3xkYXRhLWZvcm1hdHxkYXRhLXNpemV8ZGF0YS1maWxlLXNpemV8ZGF0YS1maWxlLW5hbWV8ZGF0YS1vcmlnaW58ZGF0YS1hbGlnbnxkYXRhLWltYWdlLWxpbmt8ZGF0YS1yb3RhdGV8ZGF0YS1wcm9wb3J0aW9ufGRhdGEtcGVyY2VudGFnZXxvcmlnaW4tc2l6ZXxkYXRhLWV4cHxkYXRhLWZvbnQtc2l6ZSc7XHJcbiAgICAgICAgICAgIHRoaXMuX2FsbG93SFRNTENvbW1lbnRzID0gb3B0aW9ucy5fZWRpdG9yVGFnc1doaXRlbGlzdC5pbmRleE9mKCcvLycpID4gLTE7XHJcbiAgICAgICAgICAgIHRoaXMuX2h0bWxDaGVja1doaXRlbGlzdFJlZ0V4cCA9IG5ldyB3UmVnRXhwKCdeKCcgKyBvcHRpb25zLl9lZGl0b3JUYWdzV2hpdGVsaXN0LnJlcGxhY2UoJ3wvLycsICcnKSArICcpJCcsICdpJyk7XHJcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yVGFnc1doaXRlbGlzdFJlZ0V4cCA9IHV0aWwuY3JlYXRlVGFnc1doaXRlbGlzdChvcHRpb25zLl9lZGl0b3JUYWdzV2hpdGVsaXN0LnJlcGxhY2UoJ3wvLycsICd8PCEtLXwtLT4nKSk7XHJcbiAgICAgICAgICAgIHRoaXMucGFzdGVUYWdzV2hpdGVsaXN0UmVnRXhwID0gdXRpbC5jcmVhdGVUYWdzV2hpdGVsaXN0KG9wdGlvbnMucGFzdGVUYWdzV2hpdGVsaXN0KTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHJlZ0VuZFN0ciA9ICdcXFxccyo9XFxcXHMqKFxcXCIpW15cXFwiXSpcXFxcMSc7XHJcbiAgICAgICAgICAgIGNvbnN0IF9hdHRyID0gb3B0aW9ucy5hdHRyaWJ1dGVzV2hpdGVsaXN0O1xyXG4gICAgICAgICAgICBjb25zdCB0YWdzQXR0ciA9IHt9O1xyXG4gICAgICAgICAgICBsZXQgYWxsQXR0ciA9ICcnO1xyXG4gICAgICAgICAgICBpZiAoISFfYXR0cikge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgayBpbiBfYXR0cikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdXRpbC5oYXNPd24oX2F0dHIsIGspIHx8IC9eb25bYS16XSskL2kudGVzdChfYXR0cltrXSkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChrID09PSAnYWxsJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGxBdHRyID0gX2F0dHJba10gKyAnfCc7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFnc0F0dHJba10gPSBuZXcgd1JlZ0V4cCgnKD86JyArIF9hdHRyW2tdICsgJ3wnICsgZGVmYXVsdEF0dHIgKyAnKScgKyByZWdFbmRTdHIsICdpZycpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5fYXR0cmlidXRlc1doaXRlbGlzdFJlZ0V4cCA9IG5ldyB3UmVnRXhwKCcoPzonICsgYWxsQXR0ciArIGRlZmF1bHRBdHRyICsgJyknICsgcmVnRW5kU3RyLCAnaWcnKTtcclxuICAgICAgICAgICAgdGhpcy5fYXR0cmlidXRlc1RhZ3NXaGl0ZWxpc3QgPSB0YWdzQXR0cjtcclxuXHJcbiAgICAgICAgICAgIC8vIHNldCBtb2Rlc1xyXG4gICAgICAgICAgICB0aGlzLl9pc0lubGluZSA9IC9pbmxpbmUvaS50ZXN0KG9wdGlvbnMubW9kZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX2lzQmFsbG9vbiA9IC9iYWxsb29ufGJhbGxvb24tYWx3YXlzL2kudGVzdChvcHRpb25zLm1vZGUpO1xyXG4gICAgICAgICAgICB0aGlzLl9pc0JhbGxvb25BbHdheXMgPSAvYmFsbG9vbi1hbHdheXMvaS50ZXN0KG9wdGlvbnMubW9kZSk7XHJcblxyXG4gICAgICAgICAgICAvLyBjYWNoaW5nIGJ1dHRvbnNcclxuICAgICAgICAgICAgdGhpcy5fY2FjaGluZ0J1dHRvbnMoKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGZpbGUgY29tcG9uZW50c1xyXG4gICAgICAgICAgICB0aGlzLl9maWxlSW5mb1BsdWdpbnNDaGVjayA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLl9maWxlSW5mb1BsdWdpbnNSZXNldCA9IFtdO1xyXG5cclxuICAgICAgICAgICAgLy8gdGV4dCBjb21wb25lbnRzXHJcbiAgICAgICAgICAgIHRoaXMubWFuYWdlZFRhZ3NJbmZvID0geyBxdWVyeTogJycsIG1hcDoge30gfTtcclxuICAgICAgICAgICAgY29uc3QgbWFuYWdlZENsYXNzID0gW107XHJcblxyXG4gICAgICAgICAgICAvLyBDb21tYW5kIGFuZCBmaWxlIHBsdWdpbnMgcmVnaXN0cmF0aW9uXHJcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlUGx1Z2lucyA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLl9maWxlTWFuYWdlci50YWdzID0gW107XHJcbiAgICAgICAgICAgIHRoaXMuX2ZpbGVNYW5hZ2VyLnBsdWdpbk1hcCA9IHt9O1xyXG5cclxuICAgICAgICAgICAgbGV0IGZpbGVQbHVnaW5SZWdFeHAgPSBbXTtcclxuICAgICAgICAgICAgbGV0IHBsdWdpbiwgYnV0dG9uO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBrZXkgaW4gcGx1Z2lucykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF1dGlsLmhhc093bihwbHVnaW5zLCBrZXkpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIHBsdWdpbiA9IHBsdWdpbnNba2V5XTtcclxuICAgICAgICAgICAgICAgIGJ1dHRvbiA9IHBsdWdpbkNhbGxCdXR0b25zW2tleV07XHJcbiAgICAgICAgICAgICAgICBpZiAocGx1Z2luLmFjdGl2ZSAmJiBidXR0b24pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGxQbHVnaW4oa2V5LCBudWxsLCBidXR0b24pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwbHVnaW4uY2hlY2tGaWxlSW5mbyA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgcGx1Z2luLnJlc2V0RmlsZUluZm8gPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGxQbHVnaW4oa2V5LCBudWxsLCBidXR0b24pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZpbGVJbmZvUGx1Z2luc0NoZWNrLnB1c2gocGx1Z2luLmNoZWNrRmlsZUluZm8uYmluZCh0aGlzKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmlsZUluZm9QbHVnaW5zUmVzZXQucHVzaChwbHVnaW4ucmVzZXRGaWxlSW5mby5iaW5kKHRoaXMpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChfdy5BcnJheS5pc0FycmF5KHBsdWdpbi5maWxlVGFncykpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWxlVGFncyA9IHBsdWdpbi5maWxlVGFncztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGxQbHVnaW4oa2V5LCBudWxsLCBidXR0b24pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZpbGVNYW5hZ2VyLnRhZ3MgPSB0aGlzLl9maWxlTWFuYWdlci50YWdzLmNvbmNhdChmaWxlVGFncyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZmlsZVBsdWdpblJlZ0V4cC5wdXNoKGtleSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgdGFnID0gMCwgdExlbiA9IGZpbGVUYWdzLmxlbmd0aDsgdGFnIDwgdExlbjsgdGFnKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmlsZU1hbmFnZXIucGx1Z2luTWFwW2ZpbGVUYWdzW3RhZ10udG9Mb3dlckNhc2UoKV0gPSBrZXk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHBsdWdpbi5tYW5hZ2VkVGFncykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZm8gPSBwbHVnaW4ubWFuYWdlZFRhZ3MoKTtcclxuICAgICAgICAgICAgICAgICAgICBtYW5hZ2VkQ2xhc3MucHVzaCgnLicgKyBpbmZvLmNsYXNzTmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYW5hZ2VkVGFnc0luZm8ubWFwW2luZm8uY2xhc3NOYW1lXSA9IGluZm8ubWV0aG9kLmJpbmQodGhpcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMubWFuYWdlZFRhZ3NJbmZvLnF1ZXJ5ID0gbWFuYWdlZENsYXNzLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZpbGVNYW5hZ2VyLnF1ZXJ5U3RyaW5nID0gdGhpcy5fZmlsZU1hbmFnZXIudGFncy5qb2luKCcsJyk7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZpbGVNYW5hZ2VyLnJlZ0V4cCA9IG5ldyB3UmVnRXhwKCdeKCcgKyAgdGhpcy5fZmlsZU1hbmFnZXIudGFncy5qb2luKCd8JykgKyAnKSQnLCAnaScpO1xyXG4gICAgICAgICAgICB0aGlzLl9maWxlTWFuYWdlci5wbHVnaW5SZWdFeHAgPSBuZXcgd1JlZ0V4cCgnXignICsgIChmaWxlUGx1Z2luUmVnRXhwLmxlbmd0aCA9PT0gMCA/ICd1bmRlZmluZWQnIDogZmlsZVBsdWdpblJlZ0V4cC5qb2luKCd8JykpICsgJykkJywgJ2knKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIGNhY2hlIGVkaXRvcidzIGVsZW1lbnRcclxuICAgICAgICAgICAgdGhpcy5fdmFyaWFibGUuX29yaWdpbkNzc1RleHQgPSBjb250ZXh0LmVsZW1lbnQudG9wQXJlYS5zdHlsZS5jc3NUZXh0O1xyXG4gICAgICAgICAgICB0aGlzLl9wbGFjZWhvbGRlciA9IGNvbnRleHQuZWxlbWVudC5wbGFjZWhvbGRlcjtcclxuICAgICAgICAgICAgdGhpcy5fbGluZUJyZWFrZXIgPSBjb250ZXh0LmVsZW1lbnQubGluZUJyZWFrZXI7XHJcbiAgICAgICAgICAgIHRoaXMuX2xpbmVCcmVha2VyQnV0dG9uID0gdGhpcy5fbGluZUJyZWFrZXIucXVlcnlTZWxlY3RvcignYnV0dG9uJyk7XHJcblxyXG4gICAgICAgICAgICAvLyBFeGN1dGUgaGlzdG9yeSBmdW5jdGlvblxyXG4gICAgICAgICAgICB0aGlzLmhpc3RvcnkgPSBfaGlzdG9yeSh0aGlzLCB0aGlzLl9vbkNoYW5nZV9oaXN0b3J5U3RhY2suYmluZCh0aGlzKSk7XHJcblxyXG4gICAgICAgICAgICAvLyByZWdpc3RlciBub3RpY2UgbW9kdWxlXHJcbiAgICAgICAgICAgIHRoaXMuYWRkTW9kdWxlKFtfbm90aWNlXSk7XHJcblxyXG4gICAgICAgICAgICAvLyBJbml0LCB2YWxpZGF0ZVxyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5pZnJhbWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3dkID0gY29udGV4dC5lbGVtZW50Lnd5c2l3eWdGcmFtZS5jb250ZW50RG9jdW1lbnQ7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQud3lzaXd5ZyA9IHRoaXMuX3dkLmJvZHk7XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5fZWRpdG9yU3R5bGVzLmVkaXRvcikgY29udGV4dC5lbGVtZW50Lnd5c2l3eWcuc3R5bGUuY3NzVGV4dCA9IG9wdGlvbnMuX2VkaXRvclN0eWxlcy5lZGl0b3I7XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5oZWlnaHQgPT09ICdhdXRvJykgdGhpcy5faWZyYW1lQXV0byA9IHRoaXMuX3dkLmJvZHk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMuX2luaXRXeXNpd3lnQXJlYShyZWxvYWQsIF9pbml0SFRNTCk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIENhY2hpbmcgYmFzaWMgYnV0dG9ucyB0byB1c2VcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9jYWNoaW5nQnV0dG9uczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLmNvZGVWaWV3RGlzYWJsZWRCdXR0b25zID0gY29udGV4dC5lbGVtZW50Ll9idXR0b25UcmF5LnF1ZXJ5U2VsZWN0b3JBbGwoJy5zZS1tZW51LWxpc3QgYnV0dG9uW2RhdGEtZGlzcGxheV06bm90KFtjbGFzc349XCJzZS1jb2RlLXZpZXctZW5hYmxlZFwiXSknKTtcclxuICAgICAgICAgICAgdGhpcy5yZXNpemluZ0Rpc2FibGVkQnV0dG9ucyA9IGNvbnRleHQuZWxlbWVudC5fYnV0dG9uVHJheS5xdWVyeVNlbGVjdG9yQWxsKCcuc2UtbWVudS1saXN0IGJ1dHRvbltkYXRhLWRpc3BsYXldOm5vdChbY2xhc3N+PVwic2UtcmVzaXppbmctZW5hYmxlZFwiXSk6bm90KFtkYXRhLWRpc3BsYXk9XCJNT1JFXCJdKScpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgdG9vbCA9IGNvbnRleHQudG9vbDtcclxuICAgICAgICAgICAgdGhpcy5jb21tYW5kTWFwID0ge1xyXG4gICAgICAgICAgICAgICAgU1VCOiB0b29sLnN1YnNjcmlwdCxcclxuICAgICAgICAgICAgICAgIFNVUDogdG9vbC5zdXBlcnNjcmlwdCxcclxuICAgICAgICAgICAgICAgIE9VVERFTlQ6IHRvb2wub3V0ZGVudCxcclxuICAgICAgICAgICAgICAgIElOREVOVDogdG9vbC5pbmRlbnRcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5jb21tYW5kTWFwW29wdGlvbnMudGV4dFRhZ3MuYm9sZC50b1VwcGVyQ2FzZSgpXSA9IHRvb2wuYm9sZDtcclxuICAgICAgICAgICAgdGhpcy5jb21tYW5kTWFwW29wdGlvbnMudGV4dFRhZ3MudW5kZXJsaW5lLnRvVXBwZXJDYXNlKCldID0gdG9vbC51bmRlcmxpbmU7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbWFuZE1hcFtvcHRpb25zLnRleHRUYWdzLml0YWxpYy50b1VwcGVyQ2FzZSgpXSA9IHRvb2wuaXRhbGljO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1hbmRNYXBbb3B0aW9ucy50ZXh0VGFncy5zdHJpa2UudG9VcHBlckNhc2UoKV0gPSB0b29sLnN0cmlrZTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMuX3N0eWxlQ29tbWFuZE1hcCA9IHtcclxuICAgICAgICAgICAgICAgIGZ1bGxTY3JlZW46IHRvb2wuZnVsbFNjcmVlbixcclxuICAgICAgICAgICAgICAgIHNob3dCbG9ja3M6IHRvb2wuc2hvd0Jsb2NrcyxcclxuICAgICAgICAgICAgICAgIGNvZGVWaWV3OiB0b29sLmNvZGVWaWV3XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEluaXRpYWxpeiB3eXNpd3lnIGFyZWEgKE9ubHkgY2FsbGVkIGZyb20gY29yZS5faW5pdClcclxuICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IHJlbG9hZCBJcyByZWxvb2FkP1xyXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBfaW5pdEhUTUwgaW5pdGlhbCBodG1sIHN0cmluZ1xyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX2luaXRXeXNpd3lnQXJlYTogZnVuY3Rpb24gKHJlbG9hZCwgX2luaXRIVE1MKSB7XHJcbiAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC53eXNpd3lnLmlubmVySFRNTCA9IHJlbG9hZCA/IF9pbml0SFRNTCA6IHRoaXMuY29udmVydENvbnRlbnRzRm9yRWRpdG9yKHR5cGVvZiBfaW5pdEhUTUwgPT09ICdzdHJpbmcnID8gX2luaXRIVE1MIDogY29udGV4dC5lbGVtZW50Lm9yaWdpbkVsZW1lbnQudmFsdWUpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBDYWxsZWQgd2hlbiB0aGVyZSBhcmUgY2hhbmdlcyB0byB0YWdzIGluIHRoZSB3eXNpd3lnIHJlZ2lvbi5cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9yZXNvdXJjZXNTdGF0ZUNoYW5nZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLl9pZnJhbWVBdXRvSGVpZ2h0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2NoZWNrUGxhY2Vob2xkZXIoKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQ2FsbGVkIHdoZW4gYWZ0ZXIgZXhlY3V0ZSBcImhpc3RvcnkucHVzaFwiXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfb25DaGFuZ2VfaGlzdG9yeVN0YWNrOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmhhc0ZvY3VzKSBldmVudC5fYXBwbHlUYWdFZmZlY3RzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3ZhcmlhYmxlLmlzQ2hhbmdlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmIChjb250ZXh0LnRvb2wuc2F2ZSkgY29udGV4dC50b29sLnNhdmUucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xyXG4gICAgICAgICAgICAvLyB1c2VyIGV2ZW50XHJcbiAgICAgICAgICAgIGlmIChmdW5jdGlvbnMub25DaGFuZ2UpIGZ1bmN0aW9ucy5vbkNoYW5nZSh0aGlzLmdldENvbnRlbnRzKHRydWUpLCB0aGlzKTtcclxuICAgICAgICAgICAgaWYgKGNvbnRleHQuZWxlbWVudC50b29sYmFyLnN0eWxlLmRpc3BsYXkgPT09ICdibG9jaycpIGV2ZW50Ll9zaG93VG9vbGJhckJhbGxvb24oKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gTW9kaWZ5IHRoZSBoZWlnaHQgdmFsdWUgb2YgdGhlIGlmcmFtZSB3aGVuIHRoZSBoZWlnaHQgb2YgdGhlIGlmcmFtZSBpcyBhdXRvbWF0aWMuXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfaWZyYW1lQXV0b0hlaWdodDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5faWZyYW1lQXV0bykge1xyXG4gICAgICAgICAgICAgICAgX3cuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IGNvbnRleHQuZWxlbWVudC53eXNpd3lnRnJhbWUuc3R5bGUuaGVpZ2h0ID0gY29yZS5faWZyYW1lQXV0by5vZmZzZXRIZWlnaHQgKyAncHgnOyB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBTZXQgZGlzcGxheSBwcm9wZXJ0eSB3aGVuIHRoZXJlIGlzIHBsYWNlaG9sZGVyLlxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX2NoZWNrUGxhY2Vob2xkZXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX3BsYWNlaG9sZGVyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fdmFyaWFibGUuaXNDb2RlVmlldykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3BsYWNlaG9sZGVyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHd5c2l3eWcgPSBjb250ZXh0LmVsZW1lbnQud3lzaXd5ZztcclxuICAgICAgICAgICAgICAgIGlmICghdXRpbC5vbmx5WmVyb1dpZHRoU3BhY2Uod3lzaXd5Zy50ZXh0Q29udGVudCkgfHwgd3lzaXd5Zy5xdWVyeVNlbGVjdG9yKHV0aWwuX2FsbG93ZWRFbXB0eU5vZGVMaXN0KSB8fCAod3lzaXd5Zy5pbm5lclRleHQubWF0Y2goL1xcbi9nKSB8fCAnJykubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3BsYWNlaG9sZGVyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3BsYWNlaG9sZGVyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIElmIHRoZXJlIGlzIG5vIGRlZmF1bHQgZm9ybWF0LCBhZGQgYSBmb3JtYXQgYW5kIG1vdmUgXCJzZWxlY3Rpb25cIi5cclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ3xudWxsfSBmb3JtYXROYW1lIEZvcm1hdCB0YWcgbmFtZSAoZGVmYXVsdDogJ1AnKVxyXG4gICAgICAgICAqIEByZXR1cm5zIHt1bmRlZmluZWR8bnVsbH1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9zZXREZWZhdWx0Rm9ybWF0OiBmdW5jdGlvbiAoZm9ybWF0TmFtZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fZmlsZU1hbmFnZXIucGx1Z2luUmVnRXhwLnRlc3QodGhpcy5jdXJyZW50Q29udHJvbGxlck5hbWUpKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBjb25zdCByYW5nZSA9IHRoaXMuZ2V0UmFuZ2UoKTtcclxuICAgICAgICAgICAgY29uc3QgY29tbW9uQ29uID0gcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXI7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0Q29uID0gcmFuZ2Uuc3RhcnRDb250YWluZXI7XHJcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlRWwgPSB1dGlsLmdldFJhbmdlRm9ybWF0RWxlbWVudChjb21tb25Db24sIG51bGwpO1xyXG4gICAgICAgICAgICBsZXQgZm9jdXNOb2RlLCBvZmZzZXQsIGZvcm1hdDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVDb21wb25lbnQgPSB1dGlsLmdldFBhcmVudEVsZW1lbnQoY29tbW9uQ29uLCB1dGlsLmlzQ29tcG9uZW50KTtcclxuICAgICAgICAgICAgaWYgKGZpbGVDb21wb25lbnQgJiYgIXV0aWwuaXNUYWJsZShmaWxlQ29tcG9uZW50KSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAoKHV0aWwuaXNSYW5nZUZvcm1hdEVsZW1lbnQoc3RhcnRDb24pIHx8IHV0aWwuaXNXeXNpd3lnRGl2KHN0YXJ0Q29uKSkgJiYgKHV0aWwuaXNDb21wb25lbnQoc3RhcnRDb24uY2hpbGRyZW5bcmFuZ2Uuc3RhcnRPZmZzZXRdKSB8fCB1dGlsLmlzQ29tcG9uZW50KHN0YXJ0Q29uLmNoaWxkcmVuW3JhbmdlLnN0YXJ0T2Zmc2V0IC0gMV0pKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAodXRpbC5nZXRQYXJlbnRFbGVtZW50KGNvbW1vbkNvbiwgdXRpbC5pc05vdENoZWNraW5nTm9kZSkpIHJldHVybiBudWxsO1xyXG5cclxuICAgICAgICAgICAgaWYgKHJhbmdlRWwpIHtcclxuICAgICAgICAgICAgICAgIGZvcm1hdCA9IHV0aWwuY3JlYXRlRWxlbWVudChmb3JtYXROYW1lIHx8IG9wdGlvbnMuZGVmYXVsdFRhZyk7XHJcbiAgICAgICAgICAgICAgICBmb3JtYXQuaW5uZXJIVE1MID0gcmFuZ2VFbC5pbm5lckhUTUw7XHJcbiAgICAgICAgICAgICAgICBpZiAoZm9ybWF0LmNoaWxkTm9kZXMubGVuZ3RoID09PSAwKSBmb3JtYXQuaW5uZXJIVE1MID0gdXRpbC56ZXJvV2lkdGhTcGFjZTtcclxuXHJcbiAgICAgICAgICAgICAgICByYW5nZUVsLmlubmVySFRNTCA9IGZvcm1hdC5vdXRlckhUTUw7XHJcbiAgICAgICAgICAgICAgICBmb3JtYXQgPSByYW5nZUVsLmZpcnN0Q2hpbGQ7XHJcbiAgICAgICAgICAgICAgICBmb2N1c05vZGUgPSB1dGlsLmdldEVkZ2VDaGlsZE5vZGVzKGZvcm1hdCwgbnVsbCkuc2M7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFmb2N1c05vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c05vZGUgPSB1dGlsLmNyZWF0ZVRleHROb2RlKHV0aWwuemVyb1dpZHRoU3BhY2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdC5pbnNlcnRCZWZvcmUoZm9jdXNOb2RlLCBmb3JtYXQuZmlyc3RDaGlsZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIG9mZnNldCA9IGZvY3VzTm9kZS50ZXh0Q29udGVudC5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFJhbmdlKGZvY3VzTm9kZSwgb2Zmc2V0LCBmb2N1c05vZGUsIG9mZnNldCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKHV0aWwuaXNSYW5nZUZvcm1hdEVsZW1lbnQoY29tbW9uQ29uKSAmJiAoY29tbW9uQ29uLmNoaWxkTm9kZXMubGVuZ3RoIDw9IDEpKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgYnIgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbW1vbkNvbi5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMSAmJiB1dGlsLmlzQnJlYWsoY29tbW9uQ29uLmZpcnN0Q2hpbGQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnIgPSBjb21tb25Db24uZmlyc3RDaGlsZDtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnIgPSB1dGlsLmNyZWF0ZVRleHROb2RlKHV0aWwuemVyb1dpZHRoU3BhY2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1vbkNvbi5hcHBlbmRDaGlsZChicik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRSYW5nZShiciwgMSwgYnIsIDEpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmV4ZWNDb21tYW5kKCdmb3JtYXRCbG9jaycsIGZhbHNlLCAoZm9ybWF0TmFtZSB8fCBvcHRpb25zLmRlZmF1bHRUYWcpKTtcclxuICAgICAgICAgICAgZm9jdXNOb2RlID0gdXRpbC5nZXRFZGdlQ2hpbGROb2Rlcyhjb21tb25Db24sIGNvbW1vbkNvbik7XHJcbiAgICAgICAgICAgIGZvY3VzTm9kZSA9IGZvY3VzTm9kZSA/IGZvY3VzTm9kZS5lYyA6IGNvbW1vbkNvbjtcclxuXHJcbiAgICAgICAgICAgIGZvcm1hdCA9IHV0aWwuZ2V0Rm9ybWF0RWxlbWVudChmb2N1c05vZGUsIG51bGwpO1xyXG4gICAgICAgICAgICBpZiAoIWZvcm1hdCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVSYW5nZSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZWRpdG9yUmFuZ2UoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYgKHV0aWwuaXNCcmVhayhmb3JtYXQubmV4dFNpYmxpbmcpKSB1dGlsLnJlbW92ZUl0ZW0oZm9ybWF0Lm5leHRTaWJsaW5nKTtcclxuICAgICAgICAgICAgaWYgKHV0aWwuaXNCcmVhayhmb3JtYXQucHJldmlvdXNTaWJsaW5nKSkgdXRpbC5yZW1vdmVJdGVtKGZvcm1hdC5wcmV2aW91c1NpYmxpbmcpO1xyXG4gICAgICAgICAgICBpZiAodXRpbC5pc0JyZWFrKGZvY3VzTm9kZSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHplcm9XaWR0aCA9IHV0aWwuY3JlYXRlVGV4dE5vZGUodXRpbC56ZXJvV2lkdGhTcGFjZSk7XHJcbiAgICAgICAgICAgICAgICBmb2N1c05vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoemVyb1dpZHRoLCBmb2N1c05vZGUpO1xyXG4gICAgICAgICAgICAgICAgZm9jdXNOb2RlID0gemVyb1dpZHRoO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmVmZmVjdE5vZGUgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLm5hdGl2ZUZvY3VzKCk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEluaXRpYWxpemF0aW9uIGFmdGVyIFwic2V0T3B0aW9uc1wiXHJcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGVsIGNvbnRleHQuZWxlbWVudFxyXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBfaW5pdEhUTUwgSW5pdGlhbCBodG1sIHN0cmluZ1xyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX3NldE9wdGlvbnNJbml0OiBmdW5jdGlvbiAoZWwsIF9pbml0SFRNTCkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0ID0gX0NvbnRleHQoZWwub3JpZ2luRWxlbWVudCwgdGhpcy5fZ2V0Q29uc3RydWN0ZWQoZWwpLCBvcHRpb25zKTtcclxuICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50c0luZm9SZXNldCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuX2VkaXRvckluaXQodHJ1ZSwgX2luaXRIVE1MKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gSW5pdGlhbGl6IGVkaXRvclxyXG4gICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gcmVsb2FkIElzIHJlbG9vYWQ/XHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IF9pbml0SFRNTCBpbml0aWFsIGh0bWwgc3RyaW5nXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfZWRpdG9ySW5pdDogZnVuY3Rpb24gKHJlbG9hZCwgX2luaXRIVE1MKSB7XHJcbiAgICAgICAgICAgIC8vIGluaXRpYWxpemUgY29yZSBhbmQgYWRkIGV2ZW50IGxpc3RlbmVyc1xyXG4gICAgICAgICAgICB0aGlzLl9pbml0KHJlbG9hZCwgX2luaXRIVE1MKTtcclxuICAgICAgICAgICAgZXZlbnQuX2FkZEV2ZW50KCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3NldENoYXJDb3VudCgpO1xyXG4gICAgICAgICAgICBldmVudC5fb2ZmU3RpY2t5VG9vbGJhcigpO1xyXG4gICAgICAgICAgICBldmVudC5vblJlc2l6ZV93aW5kb3coKTtcclxuXHJcbiAgICAgICAgICAgIC8vIHRvb2xiYXIgdmlzaWJpbGl0eVxyXG4gICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQudG9vbGJhci5zdHlsZS52aXNpYmlsaXR5ID0gJyc7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9jaGVja0NvbXBvbmVudHMoKTtcclxuICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50c0luZm9Jbml0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudHNJbmZvUmVzZXQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaGlzdG9yeS5yZXNldCh0cnVlKTtcclxuICAgICAgICAgICAgdGhpcy5fcmVzb3VyY2VzU3RhdGVDaGFuZ2UoKTtcclxuXHJcbiAgICAgICAgICAgIF93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgLy8gdXNlciBldmVudFxyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmdW5jdGlvbnMub25sb2FkID09PSAnZnVuY3Rpb24nKSBmdW5jdGlvbnMub25sb2FkKGNvcmUsIHJlbG9hZCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBDcmVhdGUgYW5kIHJldHVybiBhbiBvYmplY3QgdG8gY2FjaGUgdGhlIG5ldyBjb250ZXh0LlxyXG4gICAgICAgICAqIEBwYXJhbSB7RWxlbWVudH0gY29udGV4dEVsIGNvbnRleHQuZWxlbWVudFxyXG4gICAgICAgICAqIEByZXR1cm5zIHtPYmplY3R9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfZ2V0Q29uc3RydWN0ZWQ6IGZ1bmN0aW9uIChjb250ZXh0RWwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIF90b3A6IGNvbnRleHRFbC50b3BBcmVhLFxyXG4gICAgICAgICAgICAgICAgX3JlbGF0aXZlOiBjb250ZXh0RWwucmVsYXRpdmUsXHJcbiAgICAgICAgICAgICAgICBfdG9vbEJhcjogY29udGV4dEVsLnRvb2xiYXIsXHJcbiAgICAgICAgICAgICAgICBfbWVudVRyYXk6IGNvbnRleHRFbC5fbWVudVRyYXksXHJcbiAgICAgICAgICAgICAgICBfZWRpdG9yQXJlYTogY29udGV4dEVsLmVkaXRvckFyZWEsXHJcbiAgICAgICAgICAgICAgICBfd3lzaXd5Z0FyZWE6IGNvbnRleHRFbC53eXNpd3lnRnJhbWUsXHJcbiAgICAgICAgICAgICAgICBfY29kZUFyZWE6IGNvbnRleHRFbC5jb2RlLFxyXG4gICAgICAgICAgICAgICAgX3BsYWNlaG9sZGVyOiBjb250ZXh0RWwucGxhY2Vob2xkZXIsXHJcbiAgICAgICAgICAgICAgICBfcmVzaXppbmdCYXI6IGNvbnRleHRFbC5yZXNpemluZ0JhcixcclxuICAgICAgICAgICAgICAgIF9uYXZpZ2F0aW9uOiBjb250ZXh0RWwubmF2aWdhdGlvbixcclxuICAgICAgICAgICAgICAgIF9jaGFyQ291bnRlcjogY29udGV4dEVsLmNoYXJDb3VudGVyLFxyXG4gICAgICAgICAgICAgICAgX2NoYXJXcmFwcGVyOiBjb250ZXh0RWwuY2hhcldyYXBwZXIsXHJcbiAgICAgICAgICAgICAgICBfbG9hZGluZzogY29udGV4dEVsLmxvYWRpbmcsXHJcbiAgICAgICAgICAgICAgICBfbGluZUJyZWFrZXI6IGNvbnRleHRFbC5saW5lQnJlYWtlcixcclxuICAgICAgICAgICAgICAgIF9saW5lQnJlYWtlcl90OiBjb250ZXh0RWwubGluZUJyZWFrZXJfdCxcclxuICAgICAgICAgICAgICAgIF9saW5lQnJlYWtlcl9iOiBjb250ZXh0RWwubGluZUJyZWFrZXJfYixcclxuICAgICAgICAgICAgICAgIF9yZXNpemVCYWNrOiBjb250ZXh0RWwucmVzaXplQmFja2dyb3VuZCxcclxuICAgICAgICAgICAgICAgIF9zdGlja3lEdW1teTogY29udGV4dEVsLl9zdGlja3lEdW1teSxcclxuICAgICAgICAgICAgICAgIF9hcnJvdzogY29udGV4dEVsLl9hcnJvd1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gZXZlbnQgZnVuY3Rpb25cclxuICAgICAqL1xyXG4gICAgY29uc3QgZXZlbnQgPSB7XHJcbiAgICAgICAgX0lFaXNDb21wb3Npbmc6IGZhbHNlLCAvLyBJbiBJRSwgdGhlcmUgaXMgbm8gXCJlLmlzQ29tcG9zaW5nXCIgaW4gdGhlIGtleS11cCBldmVudC5cclxuICAgICAgICBfbGluZUJyZWFrZXJCaW5kOiBudWxsLFxyXG4gICAgICAgIF9yZXNwb25zaXZlQ3VycmVudFNpemU6ICdkZWZhdWx0JyxcclxuICAgICAgICBfcmVzcG9uc2l2ZUJ1dHRvblNpemU6IG51bGwsXHJcbiAgICAgICAgX3Jlc3BvbnNpdmVCdXR0b25zOiBudWxsLFxyXG4gICAgICAgIF9kaXJlY3Rpb25LZXlDb2RlOiBuZXcgX3cuUmVnRXhwKCdeKDh8MTN8M1syLTldfDQwfDQ2KSQnKSxcclxuICAgICAgICBfbm9uVGV4dEtleUNvZGU6IG5ldyBfdy5SZWdFeHAoJ14oOHwxM3wxWzYtOV18MjB8Mjd8M1szLTldfDQwfDQ1fDQ2fDExWzItOV18MTJbMC0zXXwxNDR8MTQ1KSQnKSxcclxuICAgICAgICBfaGlzdG9yeUlnbm9yZUtleUNvZGU6IG5ldyBfdy5SZWdFeHAoJ14oMVs2LTldfDIwfDI3fDNbMy05XXw0MHw0NXwxMVsyLTldfDEyWzAtM118MTQ0fDE0NSkkJyksXHJcbiAgICAgICAgX29uQnV0dG9uc0NoZWNrOiBuZXcgX3cuUmVnRXhwKCdeKCcgKyBfdy5PYmplY3Qua2V5cyhvcHRpb25zLl90ZXh0VGFnc01hcCkuam9pbignfCcpICsgJykkJywgJ2knKSxcclxuICAgICAgICBfZnJvbnRaZXJvV2lkdGhSZWc6IG5ldyBfdy5SZWdFeHAodXRpbC56ZXJvV2lkdGhTcGFjZSArICcrJywgJycpLFxyXG4gICAgICAgIF9rZXlDb2RlU2hvcnRjdXQ6IHtcclxuICAgICAgICAgICAgNjU6ICdBJyxcclxuICAgICAgICAgICAgNjY6ICdCJyxcclxuICAgICAgICAgICAgODM6ICdTJyxcclxuICAgICAgICAgICAgODU6ICdVJyxcclxuICAgICAgICAgICAgNzM6ICdJJyxcclxuICAgICAgICAgICAgODk6ICdZJyxcclxuICAgICAgICAgICAgOTA6ICdaJyxcclxuICAgICAgICAgICAgMjE5OiAnWycsXHJcbiAgICAgICAgICAgIDIyMTogJ10nXHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX3Nob3J0Y3V0Q29tbWFuZDogZnVuY3Rpb24gKGtleUNvZGUsIHNoaWZ0KSB7XHJcbiAgICAgICAgICAgIGxldCBjb21tYW5kID0gbnVsbDtcclxuICAgICAgICAgICAgY29uc3Qga2V5U3RyID0gZXZlbnQuX2tleUNvZGVTaG9ydGN1dFtrZXlDb2RlXTtcclxuXHJcbiAgICAgICAgICAgIHN3aXRjaCAoa2V5U3RyKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdBJzpcclxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kID0gJ3NlbGVjdEFsbCc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdCJzpcclxuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5zaG9ydGN1dHNEaXNhYmxlLmluZGV4T2YoJ2JvbGQnKSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCA9ICdib2xkJztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdTJzpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2hpZnQgJiYgb3B0aW9ucy5zaG9ydGN1dHNEaXNhYmxlLmluZGV4T2YoJ3N0cmlrZScpID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kID0gJ3N0cmlrZSc7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc2hpZnQgJiYgb3B0aW9ucy5zaG9ydGN1dHNEaXNhYmxlLmluZGV4T2YoJ3NhdmUnKSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCA9ICdzYXZlJztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdVJzpcclxuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5zaG9ydGN1dHNEaXNhYmxlLmluZGV4T2YoJ3VuZGVybGluZScpID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kID0gJ3VuZGVybGluZSc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnSSc6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc2hvcnRjdXRzRGlzYWJsZS5pbmRleE9mKCdpdGFsaWMnKSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCA9ICdpdGFsaWMnO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ1onOlxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnNob3J0Y3V0c0Rpc2FibGUuaW5kZXhPZigndW5kbycpID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hpZnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgPSAncmVkbyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kID0gJ3VuZG8nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnWSc6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc2hvcnRjdXRzRGlzYWJsZS5pbmRleE9mKCd1bmRvJykgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgPSAncmVkbyc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnWyc6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc2hvcnRjdXRzRGlzYWJsZS5pbmRleE9mKCdpbmRlbnQnKSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCA9IG9wdGlvbnMucnRsID8gJ2luZGVudCcgOiAnb3V0ZGVudCc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnXSc6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc2hvcnRjdXRzRGlzYWJsZS5pbmRleE9mKCdpbmRlbnQnKSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCA9IG9wdGlvbnMucnRsID8gJ291dGRlbnQnIDogJ2luZGVudCc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIWNvbW1hbmQpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIGNvcmUuY29tbWFuZEhhbmRsZXIoY29yZS5jb21tYW5kTWFwW2NvbW1hbmRdLCBjb21tYW5kKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX2FwcGx5VGFnRWZmZWN0czogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBsZXQgc2VsZWN0aW9uTm9kZSA9IGNvcmUuZ2V0U2VsZWN0aW9uTm9kZSgpO1xyXG4gICAgICAgICAgICBpZiAoc2VsZWN0aW9uTm9kZSA9PT0gY29yZS5lZmZlY3ROb2RlKSByZXR1cm47XHJcbiAgICAgICAgICAgIGNvcmUuZWZmZWN0Tm9kZSA9IHNlbGVjdGlvbk5vZGU7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBtYXJnaW5EaXIgPSBvcHRpb25zLnJ0bCA/ICdtYXJnaW5SaWdodCcgOiAnbWFyZ2luTGVmdCc7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbW1hbmRNYXAgPSBjb3JlLmNvbW1hbmRNYXA7XHJcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzT25DaGVjayA9IHRoaXMuX29uQnV0dG9uc0NoZWNrO1xyXG4gICAgICAgICAgICBjb25zdCBjb21tYW5kTWFwTm9kZXMgPSBbXTtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudE5vZGVzID0gW107XHJcblxyXG4gICAgICAgICAgICBjb25zdCBhY3RpdmVQbHVnaW5zID0gY29yZS5hY3RpdmVQbHVnaW5zO1xyXG4gICAgICAgICAgICBjb25zdCBjTGVuID0gYWN0aXZlUGx1Z2lucy5sZW5ndGg7XHJcbiAgICAgICAgICAgIGxldCBub2RlTmFtZSA9ICcnO1xyXG5cclxuICAgICAgICAgICAgd2hpbGUgKHNlbGVjdGlvbk5vZGUuZmlyc3RDaGlsZCkge1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uTm9kZSA9IHNlbGVjdGlvbk5vZGUuZmlyc3RDaGlsZDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgZWxlbWVudCA9IHNlbGVjdGlvbk5vZGU7ICF1dGlsLmlzV3lzaXd5Z0RpdihlbGVtZW50KTsgZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFlbGVtZW50KSBicmVhaztcclxuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50Lm5vZGVUeXBlICE9PSAxIHx8IHV0aWwuaXNCcmVhayhlbGVtZW50KSkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBub2RlTmFtZSA9IGVsZW1lbnQubm9kZU5hbWUudG9VcHBlckNhc2UoKTtcclxuICAgICAgICAgICAgICAgIGN1cnJlbnROb2Rlcy5wdXNoKG5vZGVOYW1lKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvKiBBY3RpdmUgcGx1Z2lucyAqL1xyXG4gICAgICAgICAgICAgICAgaWYgKCFjb3JlLmlzUmVhZE9ubHkpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBjID0gMCwgbmFtZTsgYyA8IGNMZW47IGMrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gYWN0aXZlUGx1Z2luc1tjXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1hbmRNYXBOb2Rlcy5pbmRleE9mKG5hbWUpID09PSAtMSAmJiBwbHVnaW5zW25hbWVdLmFjdGl2ZS5jYWxsKGNvcmUsIGVsZW1lbnQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kTWFwTm9kZXMucHVzaChuYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIWNvcmUuaXNSZWFkT25seSAmJiB1dGlsLmlzRm9ybWF0RWxlbWVudChlbGVtZW50KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8qIE91dGRlbnQgKi9cclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWFuZE1hcE5vZGVzLmluZGV4T2YoJ09VVERFTlQnKSA9PT0gLTEgJiYgY29tbWFuZE1hcC5PVVRERU5UKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzTGlzdENlbGwoZWxlbWVudCkgfHwgKGVsZW1lbnQuc3R5bGVbbWFyZ2luRGlyXSAmJiB1dGlsLmdldE51bWJlcihlbGVtZW50LnN0eWxlW21hcmdpbkRpcl0sIDApID4gMCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRNYXBOb2Rlcy5wdXNoKCdPVVRERU5UJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kTWFwLk9VVERFTlQucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvKiBJbmRlbnQgKi9cclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWFuZE1hcE5vZGVzLmluZGV4T2YoJ0lOREVOVCcpID09PSAtMSAmJiBjb21tYW5kTWFwLklOREVOVCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kTWFwTm9kZXMucHVzaCgnSU5ERU5UJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzTGlzdENlbGwoZWxlbWVudCkgJiYgIWVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZE1hcC5JTkRFTlQuc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZE1hcC5JTkRFTlQucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvKiogZGVmYXVsdCBhY3RpdmUgYnV0dG9ucyBbc3Ryb25nLCBpbnMsIGVtLCBkZWwsIHN1Yiwgc3VwXSAqL1xyXG4gICAgICAgICAgICAgICAgaWYgKGNsYXNzT25DaGVjay50ZXN0KG5vZGVOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRNYXBOb2Rlcy5wdXNoKG5vZGVOYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICB1dGlsLmFkZENsYXNzKGNvbW1hbmRNYXBbbm9kZU5hbWVdLCAnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvcmUuX3NldEtleUVmZmVjdChjb21tYW5kTWFwTm9kZXMpO1xyXG5cclxuICAgICAgICAgICAgLyoqIHNhdmUgY3VycmVudCBub2RlcyAqL1xyXG4gICAgICAgICAgICBjb3JlLl92YXJpYWJsZS5jdXJyZW50Tm9kZXMgPSBjdXJyZW50Tm9kZXMucmV2ZXJzZSgpO1xyXG4gICAgICAgICAgICBjb3JlLl92YXJpYWJsZS5jdXJyZW50Tm9kZXNNYXAgPSBjb21tYW5kTWFwTm9kZXM7XHJcblxyXG4gICAgICAgICAgICAvKiogIERpc3BsYXlzIHRoZSBjdXJyZW50IG5vZGUgc3RydWN0dXJlIHRvIHJlc2l6aW5nQmFyICovXHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnNob3dQYXRoTGFiZWwpIGNvbnRleHQuZWxlbWVudC5uYXZpZ2F0aW9uLnRleHRDb250ZW50ID0gY29yZS5fdmFyaWFibGUuY3VycmVudE5vZGVzLmpvaW4oJyA+ICcpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9jYW5jZWxDYXB0aW9uRWRpdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZSgnY29udGVudGVkaXRhYmxlJywgZmFsc2UpO1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2JsdXInLCBldmVudC5fY2FuY2VsQ2FwdGlvbkVkaXQpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9idXR0b25zRXZlbnRIYW5kbGVyOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICBsZXQgdGFyZ2V0ID0gZS50YXJnZXQ7XHJcbiAgICAgICAgICAgIGlmIChjb3JlLl9iaW5kQ29udHJvbGxlcnNPZmYpIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoL14oaW5wdXR8dGV4dGFyZWF8c2VsZWN0fG9wdGlvbikkL2kudGVzdCh0YXJnZXQubm9kZU5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICBjb3JlLl9hbnRpQmx1ciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodXRpbC5nZXRQYXJlbnRFbGVtZW50KHRhcmdldCwgJy5zZS1zdWJtZW51JykpIHtcclxuICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICBjb3JlLl9ub3RIaWRlVG9vbGJhciA9IHRydWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgY29tbWFuZCA9IHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29tbWFuZCcpO1xyXG4gICAgICAgICAgICAgICAgbGV0IGNsYXNzTmFtZSA9IHRhcmdldC5jbGFzc05hbWU7XHJcbiAgICBcclxuICAgICAgICAgICAgICAgIHdoaWxlICghY29tbWFuZCAmJiAhL3NlLW1lbnUtbGlzdC8udGVzdChjbGFzc05hbWUpICYmICEvc3VuLWVkaXRvci1jb21tb24vLnRlc3QoY2xhc3NOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgPSB0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLWNvbW1hbmQnKTtcclxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSB0YXJnZXQuY2xhc3NOYW1lO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICBpZiAoY29tbWFuZCA9PT0gY29yZS5fc3VibWVudU5hbWUgfHwgY29tbWFuZCA9PT0gY29yZS5fY29udGFpbmVyTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBvbkNsaWNrX3Rvb2xiYXI6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGxldCB0YXJnZXQgPSBlLnRhcmdldDtcclxuICAgICAgICAgICAgbGV0IGRpc3BsYXkgPSB0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLWRpc3BsYXknKTtcclxuICAgICAgICAgICAgbGV0IGNvbW1hbmQgPSB0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLWNvbW1hbmQnKTtcclxuICAgICAgICAgICAgbGV0IGNsYXNzTmFtZSA9IHRhcmdldC5jbGFzc05hbWU7XHJcbiAgICAgICAgICAgIGNvcmUuY29udHJvbGxlcnNPZmYoKTtcclxuXHJcbiAgICAgICAgICAgIHdoaWxlICh0YXJnZXQucGFyZW50Tm9kZSAmJiAhY29tbWFuZCAmJiAhL3NlLW1lbnUtbGlzdC8udGVzdChjbGFzc05hbWUpICYmICEvc2UtdG9vbGJhci8udGVzdChjbGFzc05hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQgPSB0YXJnZXQucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgIGNvbW1hbmQgPSB0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLWNvbW1hbmQnKTtcclxuICAgICAgICAgICAgICAgIGRpc3BsYXkgPSB0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLWRpc3BsYXknKTtcclxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZSA9IHRhcmdldC5jbGFzc05hbWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghY29tbWFuZCAmJiAhZGlzcGxheSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAodGFyZ2V0LmRpc2FibGVkKSByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICghY29yZS5pc1JlYWRPbmx5ICYmICFjb3JlLmhhc0ZvY3VzKSBjb3JlLm5hdGl2ZUZvY3VzKCk7XHJcbiAgICAgICAgICAgIGlmICghY29yZS5pc1JlYWRPbmx5ICYmICFjb3JlLl92YXJpYWJsZS5pc0NvZGVWaWV3KSBjb3JlLl9lZGl0b3JSYW5nZSgpO1xyXG5cclxuICAgICAgICAgICAgY29yZS5hY3Rpb25DYWxsKGNvbW1hbmQsIGRpc3BsYXksIHRhcmdldCk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgb25Nb3VzZURvd25fd3lzaXd5ZzogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgaWYgKGNvcmUuaXNSZWFkT25seSB8fCB1dGlsLmlzTm9uRWRpdGFibGUoY29udGV4dC5lbGVtZW50Lnd5c2l3eWcpKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAvLyB1c2VyIGV2ZW50XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZnVuY3Rpb25zLm9uTW91c2VEb3duID09PSAnZnVuY3Rpb24nICYmIGZ1bmN0aW9ucy5vbk1vdXNlRG93bihlLCBjb3JlKSA9PT0gZmFsc2UpIHJldHVybjtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNvbnN0IHRhYmxlQ2VsbCA9IHV0aWwuZ2V0UGFyZW50RWxlbWVudChlLnRhcmdldCwgdXRpbC5pc0NlbGwpO1xyXG4gICAgICAgICAgICBpZiAodGFibGVDZWxsKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0YWJsZVBsdWdpbiA9IGNvcmUucGx1Z2lucy50YWJsZTtcclxuICAgICAgICAgICAgICAgIGlmICh0YWJsZVBsdWdpbiAmJiB0YWJsZUNlbGwgIT09IHRhYmxlUGx1Z2luLl9maXhlZENlbGwgJiYgIXRhYmxlUGx1Z2luLl9zaGlmdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvcmUuY2FsbFBsdWdpbigndGFibGUnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlUGx1Z2luLm9uVGFibGVDZWxsTXVsdGlTZWxlY3QuY2FsbChjb3JlLCB0YWJsZUNlbGwsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9LCBudWxsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNvcmUuX2lzQmFsbG9vbikge1xyXG4gICAgICAgICAgICAgICAgZXZlbnQuX2hpZGVUb29sYmFyKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICgvRklHVVJFL2kudGVzdChlLnRhcmdldC5ub2RlTmFtZSkpIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBvbkNsaWNrX3d5c2l3eWc6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldEVsZW1lbnQgPSBlLnRhcmdldDtcclxuXHJcbiAgICAgICAgICAgIGlmIChjb3JlLmlzUmVhZE9ubHkpIHtcclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzQW5jaG9yKHRhcmdldEVsZW1lbnQpKXtcclxuICAgICAgICAgICAgICAgICAgICBfdy5vcGVuKHRhcmdldEVsZW1lbnQuaHJlZiwgdGFyZ2V0RWxlbWVudC50YXJnZXQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodXRpbC5pc05vbkVkaXRhYmxlKGNvbnRleHQuZWxlbWVudC53eXNpd3lnKSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgLy8gdXNlciBldmVudFxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGZ1bmN0aW9ucy5vbkNsaWNrID09PSAnZnVuY3Rpb24nICYmIGZ1bmN0aW9ucy5vbkNsaWNrKGUsIGNvcmUpID09PSBmYWxzZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZmlsZUNvbXBvbmVudEluZm8gPSBjb3JlLmdldEZpbGVDb21wb25lbnQodGFyZ2V0RWxlbWVudCk7XHJcbiAgICAgICAgICAgIGlmIChmaWxlQ29tcG9uZW50SW5mbykge1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgY29yZS5zZWxlY3RDb21wb25lbnQoZmlsZUNvbXBvbmVudEluZm8udGFyZ2V0LCBmaWxlQ29tcG9uZW50SW5mby5wbHVnaW5OYW1lKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgZmlnY2FwdGlvbiA9IHV0aWwuZ2V0UGFyZW50RWxlbWVudCh0YXJnZXRFbGVtZW50LCAnRklHQ0FQVElPTicpO1xyXG4gICAgICAgICAgICBpZiAodXRpbC5pc05vbkVkaXRhYmxlKGZpZ2NhcHRpb24pKSB7XHJcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICBmaWdjYXB0aW9uLnNldEF0dHJpYnV0ZSgnY29udGVudGVkaXRhYmxlJywgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICBmaWdjYXB0aW9uLmZvY3VzKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGNvcmUuX2lzSW5saW5lICYmICFjb3JlLl9pbmxpbmVUb29sYmFyQXR0ci5pc1Nob3cpIHtcclxuICAgICAgICAgICAgICAgICAgICBldmVudC5fc2hvd1Rvb2xiYXJJbmxpbmUoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGlkZVRvb2xiYXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Ll9oaWRlVG9vbGJhcigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWdjYXB0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2JsdXInLCBoaWRlVG9vbGJhcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZmlnY2FwdGlvbi5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgaGlkZVRvb2xiYXIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBfdy5zZXRUaW1lb3V0KGNvcmUuX2VkaXRvclJhbmdlLmJpbmQoY29yZSkpO1xyXG4gICAgICAgICAgICBjb3JlLl9lZGl0b3JSYW5nZSgpO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uTm9kZSA9IGNvcmUuZ2V0U2VsZWN0aW9uTm9kZSgpO1xyXG4gICAgICAgICAgICBjb25zdCBmb3JtYXRFbCA9IHV0aWwuZ2V0Rm9ybWF0RWxlbWVudChzZWxlY3Rpb25Ob2RlLCBudWxsKTtcclxuICAgICAgICAgICAgY29uc3QgcmFuZ2VFbCA9IHV0aWwuZ2V0UmFuZ2VGb3JtYXRFbGVtZW50KHNlbGVjdGlvbk5vZGUsIG51bGwpO1xyXG4gICAgICAgICAgICBpZiAoIWZvcm1hdEVsICYmICF1dGlsLmlzTm9uRWRpdGFibGUodGFyZ2V0RWxlbWVudCkgJiYgIXV0aWwuaXNMaXN0KHJhbmdlRWwpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByYW5nZSA9IGNvcmUuZ2V0UmFuZ2UoKTtcclxuICAgICAgICAgICAgICAgIGlmICh1dGlsLmdldEZvcm1hdEVsZW1lbnQocmFuZ2Uuc3RhcnRDb250YWluZXIpID09PSB1dGlsLmdldEZvcm1hdEVsZW1lbnQocmFuZ2UuZW5kQ29udGFpbmVyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzTGlzdChyYW5nZUVsKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9MaSA9IHV0aWwuY3JlYXRlRWxlbWVudCgnTEknKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldkxpID0gc2VsZWN0aW9uTm9kZS5uZXh0RWxlbWVudFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9MaS5hcHBlbmRDaGlsZChzZWxlY3Rpb25Ob2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VFbC5pbnNlcnRCZWZvcmUob0xpLCBwcmV2TGkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3JlLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghdXRpbC5pc1d5c2l3eWdEaXYoc2VsZWN0aW9uTm9kZSkgJiYgIXV0aWwuaXNDb21wb25lbnQoc2VsZWN0aW9uTm9kZSkgJiYgKCF1dGlsLmlzVGFibGUoc2VsZWN0aW9uTm9kZSkgfHwgdXRpbC5pc0NlbGwoc2VsZWN0aW9uTm9kZSkpICYmIGNvcmUuX3NldERlZmF1bHRGb3JtYXQodXRpbC5pc1JhbmdlRm9ybWF0RWxlbWVudChyYW5nZUVsKSA/ICdESVYnIDogb3B0aW9ucy5kZWZhdWx0VGFnKSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5fYXBwbHlUYWdFZmZlY3RzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZXZlbnQuX2FwcGx5VGFnRWZmZWN0cygpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoY29yZS5faXNCYWxsb29uKSBfdy5zZXRUaW1lb3V0KGV2ZW50Ll90b2dnbGVUb29sYmFyQmFsbG9vbik7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX2JhbGxvb25EZWxheTogbnVsbCxcclxuICAgICAgICBfc2hvd1Rvb2xiYXJCYWxsb29uRGVsYXk6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKGV2ZW50Ll9iYWxsb29uRGVsYXkpIHtcclxuICAgICAgICAgICAgICAgIF93LmNsZWFyVGltZW91dChldmVudC5fYmFsbG9vbkRlbGF5KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZXZlbnQuX2JhbGxvb25EZWxheSA9IF93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgX3cuY2xlYXJUaW1lb3V0KHRoaXMuX2JhbGxvb25EZWxheSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9iYWxsb29uRGVsYXkgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvd1Rvb2xiYXJCYWxsb29uKCk7XHJcbiAgICAgICAgICAgIH0uYmluZChldmVudCksIDM1MCk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX3RvZ2dsZVRvb2xiYXJCYWxsb29uOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGNvcmUuX2VkaXRvclJhbmdlKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gY29yZS5nZXRSYW5nZSgpO1xyXG4gICAgICAgICAgICBpZiAoY29yZS5fYmluZENvbnRyb2xsZXJzT2ZmIHx8ICghY29yZS5faXNCYWxsb29uQWx3YXlzICYmIHJhbmdlLmNvbGxhcHNlZCkpIGV2ZW50Ll9oaWRlVG9vbGJhcigpO1xyXG4gICAgICAgICAgICBlbHNlIGV2ZW50Ll9zaG93VG9vbGJhckJhbGxvb24ocmFuZ2UpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9zaG93VG9vbGJhckJhbGxvb246IGZ1bmN0aW9uIChyYW5nZU9iaikge1xyXG4gICAgICAgICAgICBpZiAoIWNvcmUuX2lzQmFsbG9vbikgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSByYW5nZU9iaiB8fCBjb3JlLmdldFJhbmdlKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHRvb2xiYXIgPSBjb250ZXh0LmVsZW1lbnQudG9vbGJhcjtcclxuICAgICAgICAgICAgY29uc3QgdG9wQXJlYSA9IGNvbnRleHQuZWxlbWVudC50b3BBcmVhO1xyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSBjb3JlLmdldFNlbGVjdGlvbigpO1xyXG5cclxuICAgICAgICAgICAgbGV0IGlzRGlyVG9wO1xyXG4gICAgICAgICAgICBpZiAoY29yZS5faXNCYWxsb29uQWx3YXlzICYmIHJhbmdlLmNvbGxhcHNlZCkge1xyXG4gICAgICAgICAgICAgICAgaXNEaXJUb3AgPSB0cnVlO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGlvbi5mb2N1c05vZGUgPT09IHNlbGVjdGlvbi5hbmNob3JOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICBpc0RpclRvcCA9IHNlbGVjdGlvbi5mb2N1c09mZnNldCA8IHNlbGVjdGlvbi5hbmNob3JPZmZzZXQ7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZE5vZGVzID0gdXRpbC5nZXRMaXN0Q2hpbGROb2RlcyhyYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lciwgbnVsbCk7XHJcbiAgICAgICAgICAgICAgICBpc0RpclRvcCA9IHV0aWwuZ2V0QXJyYXlJbmRleChjaGlsZE5vZGVzLCBzZWxlY3Rpb24uZm9jdXNOb2RlKSA8IHV0aWwuZ2V0QXJyYXlJbmRleChjaGlsZE5vZGVzLCBzZWxlY3Rpb24uYW5jaG9yTm9kZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCByZWN0cyA9IHJhbmdlLmdldENsaWVudFJlY3RzKCk7XHJcbiAgICAgICAgICAgIHJlY3RzID0gcmVjdHNbaXNEaXJUb3AgPyAwIDogcmVjdHMubGVuZ3RoIC0gMV07XHJcblxyXG4gICAgICAgICAgICBjb25zdCBnbG9iYWxTY3JvbGwgPSBjb3JlLmdldEdsb2JhbFNjcm9sbE9mZnNldCgpO1xyXG4gICAgICAgICAgICBsZXQgc2Nyb2xsTGVmdCA9IGdsb2JhbFNjcm9sbC5sZWZ0O1xyXG4gICAgICAgICAgICBsZXQgc2Nyb2xsVG9wID0gZ2xvYmFsU2Nyb2xsLnRvcDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGVkaXRvcldpZHRoID0gdG9wQXJlYS5vZmZzZXRXaWR0aDtcclxuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0cyA9IGV2ZW50Ll9nZXRFZGl0b3JPZmZzZXRzKG51bGwpO1xyXG4gICAgICAgICAgICBjb25zdCBzdGlja3lUb3AgPSBvZmZzZXRzLnRvcDtcclxuICAgICAgICAgICAgY29uc3QgZWRpdG9yTGVmdCA9IG9mZnNldHMubGVmdDtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRvb2xiYXIuc3R5bGUudG9wID0gJy0xMDAwMHB4JztcclxuICAgICAgICAgICAgdG9vbGJhci5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XHJcbiAgICAgICAgICAgIHRvb2xiYXIuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXJlY3RzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlID0gY29yZS5nZXRTZWxlY3Rpb25Ob2RlKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAodXRpbC5pc0Zvcm1hdEVsZW1lbnQobm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB6ZXJvV2lkdGggPSB1dGlsLmNyZWF0ZVRleHROb2RlKHV0aWwuemVyb1dpZHRoU3BhY2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvcmUuaW5zZXJ0Tm9kZSh6ZXJvV2lkdGgsIG51bGwsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICBjb3JlLnNldFJhbmdlKHplcm9XaWR0aCwgMSwgemVyb1dpZHRoLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICBjb3JlLl9lZGl0b3JSYW5nZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlY3RzID0gY29yZS5nZXRSYW5nZSgpLmdldENsaWVudFJlY3RzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVjdHMgPSByZWN0c1tpc0RpclRvcCA/IDAgOiByZWN0cy5sZW5ndGggLSAxXTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIXJlY3RzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm9kZU9mZnNldCA9IHV0aWwuZ2V0T2Zmc2V0KG5vZGUsIGNvbnRleHQuZWxlbWVudC53eXNpd3lnRnJhbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlY3RzID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiBub2RlT2Zmc2V0LmxlZnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogbm9kZU9mZnNldC50b3AsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0OiBub2RlT2Zmc2V0LmxlZnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvdHRvbTogbm9kZU9mZnNldC50b3AgKyBub2RlLm9mZnNldEhlaWdodCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm9UZXh0OiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICBzY3JvbGxMZWZ0ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICBzY3JvbGxUb3AgPSAwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlzRGlyVG9wID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgYXJyb3dNYXJnaW4gPSBfdy5NYXRoLnJvdW5kKGNvbnRleHQuZWxlbWVudC5fYXJyb3cub2Zmc2V0V2lkdGggLyAyKTtcclxuICAgICAgICAgICAgY29uc3QgdG9vbGJhcldpZHRoID0gdG9vbGJhci5vZmZzZXRXaWR0aDtcclxuICAgICAgICAgICAgY29uc3QgdG9vbGJhckhlaWdodCA9IHRvb2xiYXIub2Zmc2V0SGVpZ2h0O1xyXG4gICAgICAgICAgICBjb25zdCBpZnJhbWVSZWN0cyA9IC9pZnJhbWUvaS50ZXN0KGNvbnRleHQuZWxlbWVudC53eXNpd3lnRnJhbWUubm9kZU5hbWUpID8gY29udGV4dC5lbGVtZW50Lnd5c2l3eWdGcmFtZS5nZXRDbGllbnRSZWN0cygpWzBdIDogbnVsbDtcclxuICAgICAgICAgICAgaWYgKGlmcmFtZVJlY3RzKSB7XHJcbiAgICAgICAgICAgICAgICByZWN0cyA9IHtcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0OiByZWN0cy5sZWZ0ICsgaWZyYW1lUmVjdHMubGVmdCxcclxuICAgICAgICAgICAgICAgICAgICB0b3A6IHJlY3RzLnRvcCArIGlmcmFtZVJlY3RzLnRvcCxcclxuICAgICAgICAgICAgICAgICAgICByaWdodDogcmVjdHMucmlnaHQgKyBpZnJhbWVSZWN0cy5yaWdodCAtIGlmcmFtZVJlY3RzLndpZHRoLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogcmVjdHMuYm90dG9tICsgaWZyYW1lUmVjdHMuYm90dG9tIC0gaWZyYW1lUmVjdHMuaGVpZ2h0XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBldmVudC5fc2V0VG9vbGJhck9mZnNldChpc0RpclRvcCwgcmVjdHMsIHRvb2xiYXIsIGVkaXRvckxlZnQsIGVkaXRvcldpZHRoLCBzY3JvbGxMZWZ0LCBzY3JvbGxUb3AsIHN0aWNreVRvcCwgYXJyb3dNYXJnaW4pO1xyXG4gICAgICAgICAgICBpZiAodG9vbGJhcldpZHRoICE9PSB0b29sYmFyLm9mZnNldFdpZHRoIHx8IHRvb2xiYXJIZWlnaHQgIT09IHRvb2xiYXIub2Zmc2V0SGVpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICBldmVudC5fc2V0VG9vbGJhck9mZnNldChpc0RpclRvcCwgcmVjdHMsIHRvb2xiYXIsIGVkaXRvckxlZnQsIGVkaXRvcldpZHRoLCBzY3JvbGxMZWZ0LCBzY3JvbGxUb3AsIHN0aWNreVRvcCwgYXJyb3dNYXJnaW4pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy50b29sYmFyQ29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlZGl0b3JQYXJlbnQgPSB0b3BBcmVhLnBhcmVudEVsZW1lbnQ7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGNvbnRhaW5lciA9IG9wdGlvbnMudG9vbGJhckNvbnRhaW5lcjtcclxuICAgICAgICAgICAgICAgIGxldCBsZWZ0ID0gY29udGFpbmVyLm9mZnNldExlZnQ7XHJcbiAgICAgICAgICAgICAgICBsZXQgdG9wID0gY29udGFpbmVyLm9mZnNldFRvcDtcclxuXHJcbiAgICAgICAgICAgICAgICB3aGlsZSghY29udGFpbmVyLnBhcmVudEVsZW1lbnQuY29udGFpbnMoZWRpdG9yUGFyZW50KSB8fCAhL14oQk9EWXxIVE1MKSQvaS50ZXN0KGNvbnRhaW5lci5wYXJlbnRFbGVtZW50Lm5vZGVOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lciA9IGNvbnRhaW5lci5vZmZzZXRQYXJlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdCArPSBjb250YWluZXIub2Zmc2V0TGVmdDtcclxuICAgICAgICAgICAgICAgICAgICB0b3AgKz0gY29udGFpbmVyLm9mZnNldFRvcDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0b29sYmFyLnN0eWxlLmxlZnQgPSAodG9vbGJhci5vZmZzZXRMZWZ0IC0gbGVmdCArIHRvcEFyZWEub2Zmc2V0TGVmdCkgKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgdG9vbGJhci5zdHlsZS50b3AgPSAodG9vbGJhci5vZmZzZXRUb3AgLSB0b3AgKyB0b3BBcmVhLm9mZnNldFRvcCkgKyAncHgnO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0b29sYmFyLnN0eWxlLnZpc2liaWxpdHkgPSAnJztcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBfc2V0VG9vbGJhck9mZnNldDogZnVuY3Rpb24gKGlzRGlyVG9wLCByZWN0cywgdG9vbGJhciwgZWRpdG9yTGVmdCwgZWRpdG9yV2lkdGgsIHNjcm9sbExlZnQsIHNjcm9sbFRvcCwgc3RpY2t5VG9wLCBhcnJvd01hcmdpbikge1xyXG4gICAgICAgICAgICBjb25zdCBwYWRkaW5nID0gMTtcclxuICAgICAgICAgICAgY29uc3QgdG9vbGJhcldpZHRoID0gdG9vbGJhci5vZmZzZXRXaWR0aDtcclxuICAgICAgICAgICAgY29uc3QgdG9vbGJhckhlaWdodCA9IHJlY3RzLm5vVGV4dCAmJiAhaXNEaXJUb3AgPyAwIDogdG9vbGJhci5vZmZzZXRIZWlnaHQ7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBhYnNvbHV0ZUxlZnQgPSAoaXNEaXJUb3AgPyByZWN0cy5sZWZ0IDogcmVjdHMucmlnaHQpIC0gZWRpdG9yTGVmdCAtICh0b29sYmFyV2lkdGggLyAyKSArIHNjcm9sbExlZnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IG92ZXJSaWdodCA9IGFic29sdXRlTGVmdCArIHRvb2xiYXJXaWR0aCAtIGVkaXRvcldpZHRoO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgbGV0IHQgPSAoaXNEaXJUb3AgPyByZWN0cy50b3AgLSB0b29sYmFySGVpZ2h0IC0gYXJyb3dNYXJnaW4gOiByZWN0cy5ib3R0b20gKyBhcnJvd01hcmdpbikgLSAocmVjdHMubm9UZXh0ID8gMCA6IHN0aWNreVRvcCkgKyBzY3JvbGxUb3A7XHJcbiAgICAgICAgICAgIGxldCBsID0gYWJzb2x1dGVMZWZ0IDwgMCA/IHBhZGRpbmcgOiBvdmVyUmlnaHQgPCAwID8gYWJzb2x1dGVMZWZ0IDogYWJzb2x1dGVMZWZ0IC0gb3ZlclJpZ2h0IC0gcGFkZGluZyAtIDE7XHJcblxyXG4gICAgICAgICAgICBsZXQgcmVzZXRUb3AgPSBmYWxzZTtcclxuICAgICAgICAgICAgY29uc3Qgc3BhY2UgPSB0ICsgKGlzRGlyVG9wID8gKGV2ZW50Ll9nZXRFZGl0b3JPZmZzZXRzKG51bGwpLnRvcCkgOiAodG9vbGJhci5vZmZzZXRIZWlnaHQgLSBjb250ZXh0LmVsZW1lbnQud3lzaXd5Zy5vZmZzZXRIZWlnaHQpKTtcclxuICAgICAgICAgICAgaWYgKCFpc0RpclRvcCAmJiBzcGFjZSA+IDAgJiYgZXZlbnQuX2dldFBhZ2VCb3R0b21TcGFjZSgpIDwgc3BhY2UpIHtcclxuICAgICAgICAgICAgICAgIGlzRGlyVG9wID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHJlc2V0VG9wID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChpc0RpclRvcCAmJiBfZC5kb2N1bWVudEVsZW1lbnQub2Zmc2V0VG9wID4gc3BhY2UpIHtcclxuICAgICAgICAgICAgICAgIGlzRGlyVG9wID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICByZXNldFRvcCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChyZXNldFRvcCkgdCA9IChpc0RpclRvcCA/IHJlY3RzLnRvcCAtIHRvb2xiYXJIZWlnaHQgLSBhcnJvd01hcmdpbiA6IHJlY3RzLmJvdHRvbSArIGFycm93TWFyZ2luKSAtIChyZWN0cy5ub1RleHQgPyAwIDogc3RpY2t5VG9wKSArIHNjcm9sbFRvcDtcclxuXHJcbiAgICAgICAgICAgIHRvb2xiYXIuc3R5bGUubGVmdCA9IF93Lk1hdGguZmxvb3IobCkgKyAncHgnO1xyXG4gICAgICAgICAgICB0b29sYmFyLnN0eWxlLnRvcCA9IF93Lk1hdGguZmxvb3IodCkgKyAncHgnO1xyXG5cclxuICAgICAgICAgICAgaWYgKGlzRGlyVG9wKSB7XHJcbiAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUNsYXNzKGNvbnRleHQuZWxlbWVudC5fYXJyb3csICdzZS1hcnJvdy11cCcpO1xyXG4gICAgICAgICAgICAgICAgdXRpbC5hZGRDbGFzcyhjb250ZXh0LmVsZW1lbnQuX2Fycm93LCAnc2UtYXJyb3ctZG93bicpO1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50Ll9hcnJvdy5zdHlsZS50b3AgPSB0b29sYmFySGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlQ2xhc3MoY29udGV4dC5lbGVtZW50Ll9hcnJvdywgJ3NlLWFycm93LWRvd24nKTtcclxuICAgICAgICAgICAgICAgIHV0aWwuYWRkQ2xhc3MoY29udGV4dC5lbGVtZW50Ll9hcnJvdywgJ3NlLWFycm93LXVwJyk7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQuX2Fycm93LnN0eWxlLnRvcCA9IC1hcnJvd01hcmdpbiArICdweCc7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGFycm93X2xlZnQgPSBfdy5NYXRoLmZsb29yKCh0b29sYmFyV2lkdGggLyAyKSArIChhYnNvbHV0ZUxlZnQgLSBsKSk7XHJcbiAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC5fYXJyb3cuc3R5bGUubGVmdCA9IChhcnJvd19sZWZ0ICsgYXJyb3dNYXJnaW4gPiB0b29sYmFyLm9mZnNldFdpZHRoID8gdG9vbGJhci5vZmZzZXRXaWR0aCAtIGFycm93TWFyZ2luIDogYXJyb3dfbGVmdCA8IGFycm93TWFyZ2luID8gYXJyb3dNYXJnaW4gOiBhcnJvd19sZWZ0KSArICdweCc7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX3Nob3dUb29sYmFySW5saW5lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICghY29yZS5faXNJbmxpbmUpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHRvb2xiYXIgPSBjb250ZXh0LmVsZW1lbnQudG9vbGJhcjtcclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMudG9vbGJhckNvbnRhaW5lcikgdG9vbGJhci5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7XHJcbiAgICAgICAgICAgIGVsc2UgdG9vbGJhci5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0b29sYmFyLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcclxuICAgICAgICAgICAgdG9vbGJhci5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICAgICAgY29yZS5faW5saW5lVG9vbGJhckF0dHIud2lkdGggPSB0b29sYmFyLnN0eWxlLndpZHRoID0gb3B0aW9ucy50b29sYmFyV2lkdGg7XHJcbiAgICAgICAgICAgIGNvcmUuX2lubGluZVRvb2xiYXJBdHRyLnRvcCA9IHRvb2xiYXIuc3R5bGUudG9wID0gKG9wdGlvbnMudG9vbGJhckNvbnRhaW5lciA/IDAgOiAoLTEgLSB0b29sYmFyLm9mZnNldEhlaWdodCkpICsgJ3B4JztcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZnVuY3Rpb25zLnNob3dJbmxpbmUgPT09ICdmdW5jdGlvbicpIGZ1bmN0aW9ucy5zaG93SW5saW5lKHRvb2xiYXIsIGNvbnRleHQsIGNvcmUpO1xyXG5cclxuICAgICAgICAgICAgZXZlbnQub25TY3JvbGxfd2luZG93KCk7XHJcbiAgICAgICAgICAgIGNvcmUuX2lubGluZVRvb2xiYXJBdHRyLmlzU2hvdyA9IHRydWU7XHJcbiAgICAgICAgICAgIHRvb2xiYXIuc3R5bGUudmlzaWJpbGl0eSA9ICcnO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9oaWRlVG9vbGJhcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAoIWNvcmUuX25vdEhpZGVUb29sYmFyICYmICFjb3JlLl92YXJpYWJsZS5pc0Z1bGxTY3JlZW4pIHtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC50b29sYmFyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgICAgICBjb3JlLl9pbmxpbmVUb29sYmFyQXR0ci5pc1Nob3cgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIG9uSW5wdXRfd3lzaXd5ZzogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgaWYgKGNvcmUuaXNSZWFkT25seSB8fCBjb3JlLmlzRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICBjb3JlLmhpc3RvcnkuZ28oY29yZS5oaXN0b3J5LmdldEN1cnJlbnRJbmRleCgpKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29yZS5fZWRpdG9yUmFuZ2UoKTtcclxuXHJcbiAgICAgICAgICAgIC8vIHVzZXIgZXZlbnRcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBmdW5jdGlvbnMub25JbnB1dCA9PT0gJ2Z1bmN0aW9uJyAmJiBmdW5jdGlvbnMub25JbnB1dChlLCBjb3JlKSA9PT0gZmFsc2UpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSAoZS5kYXRhID09PSBudWxsID8gJycgOiBlLmRhdGEgPT09IHVuZGVmaW5lZCA/ICcgJyA6IGUuZGF0YSkgfHwgJyc7ICAgICAgIFxyXG4gICAgICAgICAgICBpZiAoIWNvcmUuX2NoYXJDb3VudChkYXRhKSkge1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gaGlzdG9yeSBzdGFja1xyXG4gICAgICAgICAgICBjb3JlLmhpc3RvcnkucHVzaCh0cnVlKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBfaXNVbmVkaXRhYmxlTm9kZTogZnVuY3Rpb24gKHJhbmdlLCBpc0Zyb250KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGlzRnJvbnQgPyByYW5nZS5zdGFydENvbnRhaW5lciA6IHJhbmdlLmVuZENvbnRhaW5lcjtcclxuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gaXNGcm9udCA/IHJhbmdlLnN0YXJ0T2Zmc2V0IDogcmFuZ2UuZW5kT2Zmc2V0O1xyXG4gICAgICAgICAgICBjb25zdCBzaWJsaW5nS2V5ID0gaXNGcm9udCA/ICdwcmV2aW91c1NpYmxpbmcnIDogJ25leHRTaWJsaW5nJztcclxuICAgICAgICAgICAgY29uc3QgaXNFbGVtZW50ID0gY29udGFpbmVyLm5vZGVUeXBlID09PSAxO1xyXG4gICAgICAgICAgICBsZXQgc2libGluZ05vZGU7XHJcblxyXG4gICAgICAgICAgICBpZiAoaXNFbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICBzaWJsaW5nTm9kZSA9IGV2ZW50Ll9pc1VuZWRpdGFibGVOb2RlX2dldFNpYmxpbmcoY29udGFpbmVyLmNoaWxkTm9kZXNbb2Zmc2V0XSwgc2libGluZ0tleSwgY29udGFpbmVyKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBzaWJsaW5nTm9kZSAmJiBzaWJsaW5nTm9kZS5ub2RlVHlwZSA9PT0gMSAmJiBzaWJsaW5nTm9kZS5nZXRBdHRyaWJ1dGUoJ2NvbnRlbnRlZGl0YWJsZScpID09PSAnZmFsc2UnO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc2libGluZ05vZGUgPSBldmVudC5faXNVbmVkaXRhYmxlTm9kZV9nZXRTaWJsaW5nKGNvbnRhaW5lciwgc2libGluZ0tleSwgY29udGFpbmVyKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjb3JlLmlzRWRnZVBvaW50KGNvbnRhaW5lciwgb2Zmc2V0LCBpc0Zyb250ID8gJ2Zyb250JyA6ICdlbmQnKSAmJiAoc2libGluZ05vZGUgJiYgc2libGluZ05vZGUubm9kZVR5cGUgPT09IDEgJiYgc2libGluZ05vZGUuZ2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnKSA9PT0gJ2ZhbHNlJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBfaXNVbmVkaXRhYmxlTm9kZV9nZXRTaWJsaW5nOiBmdW5jdGlvbiAoc2VsZWN0Tm9kZSwgc2libGluZ0tleSwgY29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgIGlmICghc2VsZWN0Tm9kZSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIGxldCBzaWJsaW5nTm9kZSA9IHNlbGVjdE5vZGVbc2libGluZ0tleV07XHJcblxyXG4gICAgICAgICAgICBpZiAoIXNpYmxpbmdOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICBzaWJsaW5nTm9kZSA9IHV0aWwuZ2V0Rm9ybWF0RWxlbWVudChjb250YWluZXIpO1xyXG4gICAgICAgICAgICAgICAgc2libGluZ05vZGUgPSBzaWJsaW5nTm9kZSA/IHNpYmxpbmdOb2RlW3NpYmxpbmdLZXldIDogbnVsbDtcclxuICAgICAgICAgICAgICAgIGlmIChzaWJsaW5nTm9kZSAmJiAhdXRpbC5pc0NvbXBvbmVudChzaWJsaW5nTm9kZSkpIHNpYmxpbmdOb2RlID0gc2libGluZ0tleSA9PT0gJ3ByZXZpb3VzU2libGluZycgPyBzaWJsaW5nTm9kZS5maXJzdEVsZW1lbnRDaGlsZCA6IHNpYmxpbmdOb2RlLmxhc3RFbGVtZW50Q2hpbGQ7XHJcbiAgICAgICAgICAgICAgICBlbHNlIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gc2libGluZ05vZGU7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX29uU2hvcnRjdXRLZXk6IGZhbHNlLFxyXG4gICAgICAgIG9uS2V5RG93bl93eXNpd3lnOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICBjb25zdCBrZXlDb2RlID0gZS5rZXlDb2RlO1xyXG4gICAgICAgICAgICBjb25zdCBzaGlmdCA9IGUuc2hpZnRLZXk7XHJcbiAgICAgICAgICAgIGNvbnN0IGN0cmwgPSBlLmN0cmxLZXkgfHwgZS5tZXRhS2V5IHx8IGtleUNvZGUgPT09IDkxIHx8IGtleUNvZGUgPT09IDkyIHx8IGtleUNvZGUgPT09IDIyNDtcclxuICAgICAgICAgICAgY29uc3QgYWx0ID0gZS5hbHRLZXk7XHJcbiAgICAgICAgICAgIGV2ZW50Ll9JRWlzQ29tcG9zaW5nID0ga2V5Q29kZSA9PT0gMjI5O1xyXG5cclxuICAgICAgICAgICAgaWYgKCFjdHJsICYmIGNvcmUuaXNSZWFkT25seSAmJiAhZXZlbnQuX2RpcmVjdGlvbktleUNvZGUudGVzdChrZXlDb2RlKSkge1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb3JlLnN1Ym1lbnVPZmYoKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjb3JlLl9pc0JhbGxvb24pIHtcclxuICAgICAgICAgICAgICAgIGV2ZW50Ll9oaWRlVG9vbGJhcigpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyB1c2VyIGV2ZW50XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZnVuY3Rpb25zLm9uS2V5RG93biA9PT0gJ2Z1bmN0aW9uJyAmJiBmdW5jdGlvbnMub25LZXlEb3duKGUsIGNvcmUpID09PSBmYWxzZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgLyoqIFNob3J0Y3V0cyAqL1xyXG4gICAgICAgICAgICBpZiAoY3RybCAmJiBldmVudC5fc2hvcnRjdXRDb21tYW5kKGtleUNvZGUsIHNoaWZ0KSkge1xyXG4gICAgICAgICAgICAgICAgZXZlbnQuX29uU2hvcnRjdXRLZXkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5fb25TaG9ydGN1dEtleSkge1xyXG4gICAgICAgICAgICAgICAgZXZlbnQuX29uU2hvcnRjdXRLZXkgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLyoqIGRlZmF1bHQga2V5IGFjdGlvbiAqL1xyXG4gICAgICAgICAgICBsZXQgc2VsZWN0aW9uTm9kZSA9IGNvcmUuZ2V0U2VsZWN0aW9uTm9kZSgpO1xyXG4gICAgICAgICAgICBjb25zdCByYW5nZSA9IGNvcmUuZ2V0UmFuZ2UoKTtcclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0UmFuZ2UgPSAhcmFuZ2UuY29sbGFwc2VkIHx8IHJhbmdlLnN0YXJ0Q29udGFpbmVyICE9PSByYW5nZS5lbmRDb250YWluZXI7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVDb21wb25lbnROYW1lID0gY29yZS5fZmlsZU1hbmFnZXIucGx1Z2luUmVnRXhwLnRlc3QoY29yZS5jdXJyZW50Q29udHJvbGxlck5hbWUpID8gY29yZS5jdXJyZW50Q29udHJvbGxlck5hbWUgOiAnJztcclxuICAgICAgICAgICAgbGV0IGZvcm1hdEVsID0gdXRpbC5nZXRGb3JtYXRFbGVtZW50KHNlbGVjdGlvbk5vZGUsIG51bGwpIHx8IHNlbGVjdGlvbk5vZGU7XHJcbiAgICAgICAgICAgIGxldCByYW5nZUVsID0gdXRpbC5nZXRSYW5nZUZvcm1hdEVsZW1lbnQoZm9ybWF0RWwsIG51bGwpO1xyXG5cclxuICAgICAgICAgICAgc3dpdGNoIChrZXlDb2RlKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDg6IC8qKiBiYWNrc3BhY2Uga2V5ICovXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzZWxlY3RSYW5nZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZUNvbXBvbmVudE5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlLnBsdWdpbnNbZmlsZUNvbXBvbmVudE5hbWVdLmRlc3Ryb3kuY2FsbChjb3JlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0UmFuZ2UgJiYgZXZlbnQuX2hhcmREZWxldGUoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF1dGlsLmlzRm9ybWF0RWxlbWVudChmb3JtYXRFbCkgJiYgIWNvbnRleHQuZWxlbWVudC53eXNpd3lnLmZpcnN0RWxlbWVudENoaWxkICYmICF1dGlsLmlzQ29tcG9uZW50KHNlbGVjdGlvbk5vZGUpICYmIGNvcmUuX3NldERlZmF1bHRGb3JtYXQob3B0aW9ucy5kZWZhdWx0VGFnKSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghc2VsZWN0UmFuZ2UgJiYgIWZvcm1hdEVsLnByZXZpb3VzRWxlbWVudFNpYmxpbmcgJiYgKHJhbmdlLnN0YXJ0T2Zmc2V0ID09PSAwICYmICFzZWxlY3Rpb25Ob2RlLnByZXZpb3VzU2libGluZyAmJiAhdXRpbC5pc0xpc3RDZWxsKGZvcm1hdEVsKSAmJiBcclxuICAgICAgICAgICAgICAgICAgICAgKHV0aWwuaXNGb3JtYXRFbGVtZW50KGZvcm1hdEVsKSAmJiAoIXV0aWwuaXNGcmVlRm9ybWF0RWxlbWVudChmb3JtYXRFbCkgfHwgdXRpbC5pc0Nsb3N1cmVGcmVlRm9ybWF0RWxlbWVudChmb3JtYXRFbCkpKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2xvc3VyZSByYW5nZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXRpbC5pc0Nsb3N1cmVSYW5nZUZvcm1hdEVsZW1lbnQoZm9ybWF0RWwucGFyZW50Tm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWFpbnRhaW4gZGVmYXVsdCBmb3JtYXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNXeXNpd3lnRGl2KGZvcm1hdEVsLnBhcmVudE5vZGUpICYmIGZvcm1hdEVsLmNoaWxkTm9kZXMubGVuZ3RoIDw9IDEgJiYgKCFmb3JtYXRFbC5maXJzdENoaWxkIHx8IHV0aWwub25seVplcm9XaWR0aFNwYWNlKGZvcm1hdEVsLnRleHRDb250ZW50KSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1hdEVsLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCkgPT09IG9wdGlvbnMuZGVmYXVsdFRhZy50b1VwcGVyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0RWwuaW5uZXJIVE1MID0gJzxicj4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGF0dHJzID0gZm9ybWF0RWwuYXR0cmlidXRlcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoYXR0cnNbMF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0RWwucmVtb3ZlQXR0cmlidXRlKGF0dHJzWzBdLm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVmYXVsdEZvcm1hdCA9IHV0aWwuY3JlYXRlRWxlbWVudChvcHRpb25zLmRlZmF1bHRUYWcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRGb3JtYXQuaW5uZXJIVE1MID0gJzxicj4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdEVsLnBhcmVudEVsZW1lbnQucmVwbGFjZUNoaWxkKGRlZmF1bHRGb3JtYXQsIGZvcm1hdEVsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlLm5hdGl2ZUZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNsZWFuIHJlbW92ZSB0YWdcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybWF0RWwgJiYgcmFuZ2Uuc3RhcnRDb250YWluZXIgPT09IHJhbmdlLmVuZENvbnRhaW5lciAmJiBzZWxlY3Rpb25Ob2RlLm5vZGVUeXBlID09PSAzICYmICF1dGlsLmlzRm9ybWF0RWxlbWVudChzZWxlY3Rpb25Ob2RlLnBhcmVudE5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyYW5nZS5jb2xsYXBzZWQgPyBzZWxlY3Rpb25Ob2RlLnRleHRDb250ZW50Lmxlbmd0aCA9PT0gMSA6IChyYW5nZS5lbmRPZmZzZXQgLSByYW5nZS5zdGFydE9mZnNldCkgPT09IHNlbGVjdGlvbk5vZGUudGV4dENvbnRlbnQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG9mZnNldCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcHJldiA9IHNlbGVjdGlvbk5vZGUucGFyZW50Tm9kZS5wcmV2aW91c1NpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0ID0gc2VsZWN0aW9uTm9kZS5wYXJlbnROb2RlLm5leHRTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcmV2KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFuZXh0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXYgPSB1dGlsLmNyZWF0ZUVsZW1lbnQoJ0JSJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdEVsLmFwcGVuZENoaWxkKHByZXYpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXYgPSBuZXh0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25Ob2RlLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUl0ZW1BbGxQYXJlbnRzKHNlbGVjdGlvbk5vZGUsIG51bGwsIGZvcm1hdEVsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IHR5cGVvZiBvZmZzZXQgPT09ICdudW1iZXInID8gb2Zmc2V0IDogcHJldi5ub2RlVHlwZSA9PT0gMyA/IHByZXYudGV4dENvbnRlbnQubGVuZ3RoIDogMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUuc2V0UmFuZ2UocHJldiwgb2Zmc2V0LCBwcmV2LCBvZmZzZXQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHRhZ1tjb250ZW50ZWRpdGFibGU9XCJmYWxzZVwiXVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5faXNVbmVkaXRhYmxlTm9kZShyYW5nZSwgdHJ1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIG5lc3RlZCBsaXN0XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tbW9uQ29uID0gcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0RWwgPSB1dGlsLmdldEZvcm1hdEVsZW1lbnQocmFuZ2Uuc3RhcnRDb250YWluZXIsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJhbmdlRWwgPSB1dGlsLmdldFJhbmdlRm9ybWF0RWxlbWVudChmb3JtYXRFbCwgbnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmdlRWwgJiYgZm9ybWF0RWwgJiYgIXV0aWwuaXNDZWxsKHJhbmdlRWwpICYmICEvXkZJR0NBUFRJT04kL2kudGVzdChyYW5nZUVsLm5vZGVOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXRpbC5pc0xpc3RDZWxsKGZvcm1hdEVsKSAmJiB1dGlsLmlzTGlzdChyYW5nZUVsKSAmJiAodXRpbC5pc0xpc3RDZWxsKHJhbmdlRWwucGFyZW50Tm9kZSkgfHwgZm9ybWF0RWwucHJldmlvdXNFbGVtZW50U2libGluZykgJiYgKHNlbGVjdGlvbk5vZGUgPT09IGZvcm1hdEVsIHx8IChzZWxlY3Rpb25Ob2RlLm5vZGVUeXBlID09PSAzICYmICghc2VsZWN0aW9uTm9kZS5wcmV2aW91c1NpYmxpbmcgfHwgdXRpbC5pc0xpc3Qoc2VsZWN0aW9uTm9kZS5wcmV2aW91c1NpYmxpbmcpKSkpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAodXRpbC5nZXRGb3JtYXRFbGVtZW50KHJhbmdlLnN0YXJ0Q29udGFpbmVyLCBudWxsKSAhPT0gdXRpbC5nZXRGb3JtYXRFbGVtZW50KHJhbmdlLmVuZENvbnRhaW5lciwgbnVsbCkgPyByYW5nZUVsLmNvbnRhaW5zKHJhbmdlLnN0YXJ0Q29udGFpbmVyKSA6IChyYW5nZS5zdGFydE9mZnNldCA9PT0gMCAgJiYgcmFuZ2UuY29sbGFwc2VkKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyYW5nZS5zdGFydENvbnRhaW5lciAhPT0gcmFuZ2UuZW5kQ29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlLnJlbW92ZU5vZGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmFuZ2Uuc3RhcnRDb250YWluZXIubm9kZVR5cGUgPT09IDMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZS5zZXRSYW5nZShyYW5nZS5zdGFydENvbnRhaW5lciwgcmFuZ2Uuc3RhcnRDb250YWluZXIudGV4dENvbnRlbnQubGVuZ3RoLCByYW5nZS5zdGFydENvbnRhaW5lciwgcmFuZ2Uuc3RhcnRDb250YWluZXIudGV4dENvbnRlbnQubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGlzdG9yeSBzdGFja1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUuaGlzdG9yeS5wdXNoKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcHJldiA9IGZvcm1hdEVsLnByZXZpb3VzRWxlbWVudFNpYmxpbmcgfHwgcmFuZ2VFbC5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzTGlzdENlbGwocHJldikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHByZXZMYXN0ID0gcHJldjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcmV2LmNvbnRhaW5zKGZvcm1hdEVsKSAmJiB1dGlsLmlzTGlzdENlbGwocHJldkxhc3QpICYmIHV0aWwuaXNMaXN0KHByZXZMYXN0Lmxhc3RFbGVtZW50Q2hpbGQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2TGFzdCA9IHByZXZMYXN0Lmxhc3RFbGVtZW50Q2hpbGQubGFzdEVsZW1lbnRDaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh1dGlsLmlzTGlzdENlbGwocHJldkxhc3QpICYmIHV0aWwuaXNMaXN0KHByZXZMYXN0Lmxhc3RFbGVtZW50Q2hpbGQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldkxhc3QgPSBwcmV2TGFzdC5sYXN0RWxlbWVudENoaWxkICYmIHByZXZMYXN0Lmxhc3RFbGVtZW50Q2hpbGQubGFzdEVsZW1lbnRDaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXYgPSBwcmV2TGFzdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbiA9IHByZXYgPT09IHJhbmdlRWwucGFyZW50Tm9kZSA/IHJhbmdlRWwucHJldmlvdXNTaWJsaW5nIDogcHJldi5sYXN0Q2hpbGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb24gPSB1dGlsLmNyZWF0ZVRleHROb2RlKHV0aWwuemVyb1dpZHRoU3BhY2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VFbC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShjb24sIHJhbmdlRWwucGFyZW50Tm9kZS5maXJzdENoaWxkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXQgPSBjb24ubm9kZVR5cGUgPT09IDMgPyBjb24udGV4dENvbnRlbnQubGVuZ3RoIDogMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBmb3JtYXRFbC5jaGlsZE5vZGVzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYWZ0ZXIgPSBjb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjaGlsZCA9IGNoaWxkcmVuWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKGNoaWxkID0gY2hpbGRyZW5bMF0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2Lmluc2VydEJlZm9yZShjaGlsZCwgYWZ0ZXIubmV4dFNpYmxpbmcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgPSBjaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtKGZvcm1hdEVsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmdlRWwuY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB1dGlsLnJlbW92ZUl0ZW0ocmFuZ2VFbCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlLnNldFJhbmdlKGNvbiwgb2Zmc2V0LCBjb24sIG9mZnNldCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhpc3Rvcnkgc3RhY2tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZS5oaXN0b3J5LnB1c2godHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGV0YWNoIHJhbmdlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2VsZWN0UmFuZ2UgJiYgcmFuZ2Uuc3RhcnRPZmZzZXQgPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkZXRhY2ggPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbW0gPSBjb21tb25Db247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY29tbSAmJiBjb21tICE9PSByYW5nZUVsICYmICF1dGlsLmlzV3lzaXd5Z0Rpdihjb21tKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21tLnByZXZpb3VzU2libGluZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tbS5wcmV2aW91c1NpYmxpbmcubm9kZVR5cGUgPT09IDEgfHwgIXV0aWwub25seVplcm9XaWR0aFNwYWNlKGNvbW0ucHJldmlvdXNTaWJsaW5nLnRleHRDb250ZW50LnRyaW0oKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFjaCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbSA9IGNvbW0ucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRldGFjaCAmJiByYW5nZUVsLnBhcmVudE5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZS5kZXRhY2hSYW5nZUZvcm1hdEVsZW1lbnQocmFuZ2VFbCwgKHV0aWwuaXNMaXN0Q2VsbChmb3JtYXRFbCkgPyBbZm9ybWF0RWxdIDogbnVsbCksIG51bGwsIGZhbHNlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGlzdG9yeSBzdGFja1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUuaGlzdG9yeS5wdXNoKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBjb21wb25lbnRcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXNlbGVjdFJhbmdlICYmIGZvcm1hdEVsICYmIChyYW5nZS5zdGFydE9mZnNldCA9PT0gMCB8fCAoc2VsZWN0aW9uTm9kZSA9PT0gZm9ybWF0RWwgPyAhIWZvcm1hdEVsLmNoaWxkTm9kZXNbcmFuZ2Uuc3RhcnRPZmZzZXRdIDogZmFsc2UpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWwgPSBzZWxlY3Rpb25Ob2RlID09PSBmb3JtYXRFbCA/IGZvcm1hdEVsLmNoaWxkTm9kZXNbcmFuZ2Uuc3RhcnRPZmZzZXRdIDogc2VsZWN0aW9uTm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldiA9IGZvcm1hdEVsLnByZXZpb3VzU2libGluZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2VsZWN0IGZpbGUgY29tcG9uZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlnbm9yZVpXUyA9IChjb21tb25Db24ubm9kZVR5cGUgPT09IDMgfHwgdXRpbC5pc0JyZWFrKGNvbW1vbkNvbikpICYmICFjb21tb25Db24ucHJldmlvdXNTaWJsaW5nICYmIHJhbmdlLnN0YXJ0T2Zmc2V0ID09PSAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNlbC5wcmV2aW91c1NpYmxpbmcgJiYgKHV0aWwuaXNDb21wb25lbnQoY29tbW9uQ29uLnByZXZpb3VzU2libGluZykgfHwgKGlnbm9yZVpXUyAmJiB1dGlsLmlzQ29tcG9uZW50KHByZXYpKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVDb21wb25lbnRJbmZvID0gY29yZS5nZXRGaWxlQ29tcG9uZW50KHByZXYpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbGVDb21wb25lbnRJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1hdEVsLnRleHRDb250ZW50Lmxlbmd0aCA9PT0gMCkgdXRpbC5yZW1vdmVJdGVtKGZvcm1hdEVsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29yZS5zZWxlY3RDb21wb25lbnQoZmlsZUNvbXBvbmVudEluZm8udGFyZ2V0LCBmaWxlQ29tcG9uZW50SW5mby5wbHVnaW5OYW1lKSA9PT0gZmFsc2UpIGNvcmUuYmx1cigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh1dGlsLmlzQ29tcG9uZW50KHByZXYpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtKHByZXYpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVsZXRlIG5vbkVkaXRhYmxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzTm9uRWRpdGFibGUoc2VsLnByZXZpb3VzU2libGluZykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUl0ZW0oc2VsLnByZXZpb3VzU2libGluZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ2OiAvKiogZGVsZXRlIGtleSAqL1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWxlQ29tcG9uZW50TmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUucGx1Z2luc1tmaWxlQ29tcG9uZW50TmFtZV0uZGVzdHJveS5jYWxsKGNvcmUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RSYW5nZSAmJiBldmVudC5faGFyZERlbGV0ZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyB0YWdbY29udGVudGVkaXRhYmxlPVwiZmFsc2VcIl1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuX2lzVW5lZGl0YWJsZU5vZGUocmFuZ2UsIGZhbHNlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY29tcG9uZW50XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCh1dGlsLmlzRm9ybWF0RWxlbWVudChzZWxlY3Rpb25Ob2RlKSB8fCBzZWxlY3Rpb25Ob2RlLm5leHRTaWJsaW5nID09PSBudWxsIHx8ICh1dGlsLm9ubHlaZXJvV2lkdGhTcGFjZShzZWxlY3Rpb25Ob2RlLm5leHRTaWJsaW5nKSAmJiBzZWxlY3Rpb25Ob2RlLm5leHRTaWJsaW5nLm5leHRTaWJsaW5nID09PSBudWxsKSkgJiYgcmFuZ2Uuc3RhcnRPZmZzZXQgPT09IHNlbGVjdGlvbk5vZGUudGV4dENvbnRlbnQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRFbCA9IGZvcm1hdEVsLm5leHRFbGVtZW50U2libGluZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFuZXh0RWwpIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXRpbC5pc0NvbXBvbmVudChuZXh0RWwpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWwub25seVplcm9XaWR0aFNwYWNlKGZvcm1hdEVsKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlSXRlbShmb3JtYXRFbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGFibGUgY29tcG9uZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNUYWJsZShuZXh0RWwpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjZWxsID0gdXRpbC5nZXRDaGlsZEVsZW1lbnQobmV4dEVsLCB1dGlsLmlzQ2VsbCwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsID0gY2VsbC5maXJzdEVsZW1lbnRDaGlsZCB8fCBjZWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlLnNldFJhbmdlKGNlbGwsIDAsIGNlbGwsIDApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2VsZWN0IGZpbGUgY29tcG9uZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWxlQ29tcG9uZW50SW5mbyA9IGNvcmUuZ2V0RmlsZUNvbXBvbmVudChuZXh0RWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbGVDb21wb25lbnRJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29yZS5zZWxlY3RDb21wb25lbnQoZmlsZUNvbXBvbmVudEluZm8udGFyZ2V0LCBmaWxlQ29tcG9uZW50SW5mby5wbHVnaW5OYW1lKSA9PT0gZmFsc2UpIGNvcmUuYmx1cigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh1dGlsLmlzQ29tcG9uZW50KG5leHRFbCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlSXRlbShuZXh0RWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXNlbGVjdFJhbmdlICYmIChjb3JlLmlzRWRnZVBvaW50KHJhbmdlLmVuZENvbnRhaW5lciwgcmFuZ2UuZW5kT2Zmc2V0KSB8fCAoc2VsZWN0aW9uTm9kZSA9PT0gZm9ybWF0RWwgPyAhIWZvcm1hdEVsLmNoaWxkTm9kZXNbcmFuZ2Uuc3RhcnRPZmZzZXRdIDogZmFsc2UpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWwgPSBzZWxlY3Rpb25Ob2RlID09PSBmb3JtYXRFbCA/IGZvcm1hdEVsLmNoaWxkTm9kZXNbcmFuZ2Uuc3RhcnRPZmZzZXRdIHx8IHNlbGVjdGlvbk5vZGUgOiBzZWxlY3Rpb25Ob2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBkZWxldGUgbm9uRWRpdGFibGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbCAmJiB1dGlsLmlzTm9uRWRpdGFibGUoc2VsLm5leHRTaWJsaW5nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlSXRlbShzZWwubmV4dFNpYmxpbmcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodXRpbC5pc0NvbXBvbmVudChzZWwpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtKHNlbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gbmVzdGVkIGxpc3RcclxuICAgICAgICAgICAgICAgICAgICBmb3JtYXRFbCA9IHV0aWwuZ2V0Rm9ybWF0RWxlbWVudChyYW5nZS5zdGFydENvbnRhaW5lciwgbnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2VFbCA9IHV0aWwuZ2V0UmFuZ2VGb3JtYXRFbGVtZW50KGZvcm1hdEVsLCBudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodXRpbC5pc0xpc3RDZWxsKGZvcm1hdEVsKSAmJiB1dGlsLmlzTGlzdChyYW5nZUVsKSAmJiAoc2VsZWN0aW9uTm9kZSA9PT0gZm9ybWF0RWwgfHwgKHNlbGVjdGlvbk5vZGUubm9kZVR5cGUgPT09IDMgJiYgKCFzZWxlY3Rpb25Ob2RlLm5leHRTaWJsaW5nIHx8IHV0aWwuaXNMaXN0KHNlbGVjdGlvbk5vZGUubmV4dFNpYmxpbmcpKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAodXRpbC5nZXRGb3JtYXRFbGVtZW50KHJhbmdlLnN0YXJ0Q29udGFpbmVyLCBudWxsKSAhPT0gdXRpbC5nZXRGb3JtYXRFbGVtZW50KHJhbmdlLmVuZENvbnRhaW5lciwgbnVsbCkgPyByYW5nZUVsLmNvbnRhaW5zKHJhbmdlLmVuZENvbnRhaW5lcikgOiAocmFuZ2UuZW5kT2Zmc2V0ID09PSBzZWxlY3Rpb25Ob2RlLnRleHRDb250ZW50Lmxlbmd0aCAmJiByYW5nZS5jb2xsYXBzZWQpKSkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyYW5nZS5zdGFydENvbnRhaW5lciAhPT0gcmFuZ2UuZW5kQ29udGFpbmVyKSBjb3JlLnJlbW92ZU5vZGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXh0ID0gdXRpbC5nZXRBcnJheUl0ZW0oZm9ybWF0RWwuY2hpbGRyZW4sIHV0aWwuaXNMaXN0LCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgPSBuZXh0IHx8IGZvcm1hdEVsLm5leHRFbGVtZW50U2libGluZyB8fCByYW5nZUVsLnBhcmVudE5vZGUubmV4dEVsZW1lbnRTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCAmJiAodXRpbC5pc0xpc3QobmV4dCkgfHwgdXRpbC5nZXRBcnJheUl0ZW0obmV4dC5jaGlsZHJlbiwgdXRpbC5pc0xpc3QsIGZhbHNlKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29uLCBjaGlsZHJlbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzTGlzdChuZXh0KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gbmV4dC5maXJzdEVsZW1lbnRDaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbiA9IGNoaWxkLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uID0gY2hpbGRyZW5bMF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGNoaWxkcmVuWzBdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdEVsLmluc2VydEJlZm9yZShjaGlsZHJlblswXSwgbmV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlSXRlbShjaGlsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbiA9IG5leHQuZmlyc3RDaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbiA9IG5leHQuY2hpbGROb2RlcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY2hpbGRyZW5bMF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0RWwuYXBwZW5kQ2hpbGQoY2hpbGRyZW5bMF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUl0ZW0obmV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlLnNldFJhbmdlKGNvbiwgMCwgY29uLCAwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhpc3Rvcnkgc3RhY2tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUuaGlzdG9yeS5wdXNoKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDk6IC8qKiB0YWIga2V5ICovXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbGVDb21wb25lbnROYW1lIHx8IG9wdGlvbnMudGFiRGlzYWJsZSkgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdHJsIHx8IGFsdCB8fCB1dGlsLmlzV3lzaXd5Z0RpdihzZWxlY3Rpb25Ob2RlKSkgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzRWRnZSA9ICghcmFuZ2UuY29sbGFwc2VkIHx8IGNvcmUuaXNFZGdlUG9pbnQocmFuZ2Uuc3RhcnRDb250YWluZXIsIHJhbmdlLnN0YXJ0T2Zmc2V0KSk7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRGb3JtYXRzID0gY29yZS5nZXRTZWxlY3RlZEVsZW1lbnRzKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbk5vZGUgPSBjb3JlLmdldFNlbGVjdGlvbk5vZGUoKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjZWxscyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBsaW5lcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBmYyA9IHV0aWwuaXNMaXN0Q2VsbChzZWxlY3RlZEZvcm1hdHNbMF0pLCBsYyA9IHV0aWwuaXNMaXN0Q2VsbChzZWxlY3RlZEZvcm1hdHNbc2VsZWN0ZWRGb3JtYXRzLmxlbmd0aCAtIDFdKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgciA9IHtzYzogcmFuZ2Uuc3RhcnRDb250YWluZXIsIHNvOiByYW5nZS5zdGFydE9mZnNldCwgZWM6IHJhbmdlLmVuZENvbnRhaW5lciwgZW86IHJhbmdlLmVuZE9mZnNldH07XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHNlbGVjdGVkRm9ybWF0cy5sZW5ndGgsIGY7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmID0gc2VsZWN0ZWRGb3JtYXRzW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXRpbC5pc0xpc3RDZWxsKGYpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWYucHJldmlvdXNFbGVtZW50U2libGluZyAmJiAhc2hpZnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbHMucHVzaChmKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzLnB1c2goZik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gTmVzdGVkIGxpc3RcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2VsbHMubGVuZ3RoID4gMCAmJiBpc0VkZ2UgJiYgY29yZS5wbHVnaW5zLmxpc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgciA9IGNvcmUucGx1Z2lucy5saXN0LmVkaXRJbnNpZGVMaXN0LmNhbGwoY29yZSwgc2hpZnQsIGNlbGxzKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0YWJsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0YWJsZUNlbGwgPSB1dGlsLmdldFBhcmVudEVsZW1lbnQoc2VsZWN0aW9uTm9kZSwgdXRpbC5pc0NlbGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFibGVDZWxsICYmIGlzRWRnZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFibGUgPSB1dGlsLmdldFBhcmVudEVsZW1lbnQodGFibGVDZWxsLCAndGFibGUnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxzID0gdXRpbC5nZXRMaXN0Q2hpbGRyZW4odGFibGUsIHV0aWwuaXNDZWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpZHggPSBzaGlmdCA/IHV0aWwucHJldklkeChjZWxscywgdGFibGVDZWxsKSA6IHV0aWwubmV4dElkeChjZWxscywgdGFibGVDZWxsKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaWR4ID09PSBjZWxscy5sZW5ndGggJiYgIXNoaWZ0KSBpZHggPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlkeCA9PT0gLTEgJiYgc2hpZnQpIGlkeCA9IGNlbGxzLmxlbmd0aCAtIDE7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG1vdmVDZWxsID0gY2VsbHNbaWR4XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbW92ZUNlbGwpIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92ZUNlbGwgPSBtb3ZlQ2VsbC5maXJzdEVsZW1lbnRDaGlsZCB8fCBtb3ZlQ2VsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUuc2V0UmFuZ2UobW92ZUNlbGwsIDAsIG1vdmVDZWxsLCAwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lcyA9IGxpbmVzLmNvbmNhdChjZWxscyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZjID0gbGMgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gTGluZXMgdGFiKDQpXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzaGlmdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFiVGV4dCA9IHV0aWwuY3JlYXRlVGV4dE5vZGUobmV3IF93LkFycmF5KGNvcmUuX3ZhcmlhYmxlLnRhYlNpemUgKyAxKS5qb2luKCdcXHUwMEEwJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRleHRSYW5nZSA9IGNvcmUuaW5zZXJ0Tm9kZSh0YWJUZXh0LCBudWxsLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRleHRSYW5nZSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZmMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci5zYyA9IHRhYlRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIuc28gPSB0ZXh0UmFuZ2UuZW5kT2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWxjKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIuZWMgPSB0YWJUZXh0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLmVvID0gdGV4dFJhbmdlLmVuZE9mZnNldDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxlbiA9IGxpbmVzLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGNoaWxkOyBpIDw9IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkID0gbGluZXNbaV0uZmlyc3RDaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjaGlsZCkgY29udGludWU7XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNCcmVhayhjaGlsZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzW2ldLmluc2VydEJlZm9yZSh0YWJUZXh0LmNsb25lTm9kZShmYWxzZSksIGNoaWxkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLnRleHRDb250ZW50ID0gdGFiVGV4dC50ZXh0Q29udGVudCArIGNoaWxkLnRleHRDb250ZW50O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlyc3RDaGlsZCA9IHV0aWwuZ2V0Q2hpbGRFbGVtZW50KGxpbmVzWzBdLCAndGV4dCcsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmRDaGlsZCA9IHV0aWwuZ2V0Q2hpbGRFbGVtZW50KGxpbmVzW2xlbl0sICd0ZXh0JywgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmYyAmJiBmaXJzdENoaWxkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIuc2MgPSBmaXJzdENoaWxkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLnNvID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsYyAmJiBlbmRDaGlsZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLmVjID0gZW5kQ2hpbGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIuZW8gPSBlbmRDaGlsZC50ZXh0Q29udGVudC5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGVuID0gbGluZXMubGVuZ3RoIC0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsaW5lOyBpIDw9IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVzW2ldLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgYyA9IDAsIGNMZW4gPSBsaW5lLmxlbmd0aCwgY2hpbGQ7IGMgPCBjTGVuOyBjKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQgPSBsaW5lW2NdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNoaWxkKSBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWwub25seVplcm9XaWR0aFNwYWNlKGNoaWxkKSkgY29udGludWU7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgvXlxcc3sxLDR9JC8udGVzdChjaGlsZC50ZXh0Q29udGVudCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlSXRlbShjaGlsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoL15cXHN7MSw0fS8udGVzdChjaGlsZC50ZXh0Q29udGVudCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLnRleHRDb250ZW50ID0gY2hpbGQudGV4dENvbnRlbnQucmVwbGFjZSgvXlxcc3sxLDR9LywgJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0Q2hpbGQgPSB1dGlsLmdldENoaWxkRWxlbWVudChsaW5lc1swXSwgJ3RleHQnLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmRDaGlsZCA9IHV0aWwuZ2V0Q2hpbGRFbGVtZW50KGxpbmVzW2xlbl0sICd0ZXh0JywgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZjICYmIGZpcnN0Q2hpbGQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLnNjID0gZmlyc3RDaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLnNvID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbGMgJiYgZW5kQ2hpbGQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLmVjID0gZW5kQ2hpbGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci5lbyA9IGVuZENoaWxkLnRleHRDb250ZW50Lmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29yZS5zZXRSYW5nZShyLnNjLCByLnNvLCByLmVjLCByLmVvKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBoaXN0b3J5IHN0YWNrXHJcbiAgICAgICAgICAgICAgICAgICAgY29yZS5oaXN0b3J5LnB1c2goZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMzogLyoqIGVudGVyIGtleSAqL1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZyZWVGb3JtYXRFbCA9IHV0aWwuZ2V0RnJlZUZvcm1hdEVsZW1lbnQoc2VsZWN0aW9uTm9kZSwgbnVsbCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb3JlLl9jaGFyVHlwZUhUTUwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGVudGVySFRNTCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKCFzaGlmdCAmJiBmcmVlRm9ybWF0RWwpIHx8IHNoaWZ0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRlckhUTUwgPSAnPGJyPic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRlckhUTUwgPSAnPCcgKyBmb3JtYXRFbC5ub2RlTmFtZSArICc+PGJyPjwvJyArIGZvcm1hdEVsLm5vZGVOYW1lICsgJz4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvcmUuY2hlY2tDaGFyQ291bnQoZW50ZXJIVE1MLCAnYnl0ZS1odG1sJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzaGlmdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXRJbm5lcnMgPSBjb3JlLl9pc0VkZ2VGb3JtYXQocmFuZ2UuZW5kQ29udGFpbmVyLCByYW5nZS5lbmRPZmZzZXQsICdlbmQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChmb3JtYXRJbm5lcnMgJiYgL15IWzEtNl0kL2kudGVzdChmb3JtYXRFbC5ub2RlTmFtZSkpIHx8IC9eSFIkL2kudGVzdChmb3JtYXRFbC5ub2RlTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0ZW1wID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0Zvcm1hdCA9IGNvcmUuYXBwZW5kRm9ybWF0VGFnKGZvcm1hdEVsLCBvcHRpb25zLmRlZmF1bHRUYWcpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3JtYXRJbm5lcnMgJiYgZm9ybWF0SW5uZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wID0gZm9ybWF0SW5uZXJzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlubmVyTm9kZSA9IHRlbXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUoZm9ybWF0SW5uZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCA9IHRlbXAuYXBwZW5kQ2hpbGQoZm9ybWF0SW5uZXJzLnBvcCgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Rm9ybWF0LmFwcGVuZENoaWxkKGlubmVyTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCA9ICF0ZW1wID8gbmV3Rm9ybWF0LmZpcnN0Q2hpbGQgOiB0ZW1wLmFwcGVuZENoaWxkKG5ld0Zvcm1hdC5maXJzdENoaWxkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUuc2V0UmFuZ2UodGVtcCwgMCwgdGVtcCwgMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZyZWVGb3JtYXRFbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uRm9ybWF0ID0gc2VsZWN0aW9uTm9kZSA9PT0gZnJlZUZvcm1hdEVsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd1NlbGVjdGlvbiA9IGNvcmUuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHNlbGVjdGlvbk5vZGUuY2hpbGROb2Rlcywgb2Zmc2V0ID0gd1NlbGVjdGlvbi5mb2N1c09mZnNldCwgcHJldiA9IHNlbGVjdGlvbk5vZGUucHJldmlvdXNFbGVtZW50U2libGluZywgbmV4dCA9IHNlbGVjdGlvbk5vZGUubmV4dFNpYmxpbmc7XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdXRpbC5pc0Nsb3N1cmVGcmVlRm9ybWF0RWxlbWVudChmcmVlRm9ybWF0RWwpICYmICEhY2hpbGRyZW4gJiYgKChzZWxlY3Rpb25Gb3JtYXQgJiYgcmFuZ2UuY29sbGFwc2VkICYmIGNoaWxkcmVuLmxlbmd0aCAtIDEgPD0gb2Zmc2V0ICsgMSAmJiB1dGlsLmlzQnJlYWsoY2hpbGRyZW5bb2Zmc2V0XSkgJiYgKCFjaGlsZHJlbltvZmZzZXQgKyAxXSB8fCAoKCFjaGlsZHJlbltvZmZzZXQgKyAyXSB8fCB1dGlsLm9ubHlaZXJvV2lkdGhTcGFjZShjaGlsZHJlbltvZmZzZXQgKyAyXS50ZXh0Q29udGVudCkpICYmIGNoaWxkcmVuW29mZnNldCArIDFdLm5vZGVUeXBlID09PSAzICYmIHV0aWwub25seVplcm9XaWR0aFNwYWNlKGNoaWxkcmVuW29mZnNldCArIDFdLnRleHRDb250ZW50KSkpICYmICBvZmZzZXQgPiAwICYmIHV0aWwuaXNCcmVhayhjaGlsZHJlbltvZmZzZXQgLSAxXSkpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICghc2VsZWN0aW9uRm9ybWF0ICYmIHV0aWwub25seVplcm9XaWR0aFNwYWNlKHNlbGVjdGlvbk5vZGUudGV4dENvbnRlbnQpICYmIHV0aWwuaXNCcmVhayhwcmV2KSAmJiAodXRpbC5pc0JyZWFrKHByZXYucHJldmlvdXNTaWJsaW5nKSB8fCAhdXRpbC5vbmx5WmVyb1dpZHRoU3BhY2UocHJldi5wcmV2aW91c1NpYmxpbmcudGV4dENvbnRlbnQpKSAmJiAoIW5leHQgfHwgKCF1dGlsLmlzQnJlYWsobmV4dCkgJiYgdXRpbC5vbmx5WmVyb1dpZHRoU3BhY2UobmV4dC50ZXh0Q29udGVudCkpKSkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbkZvcm1hdCkgdXRpbC5yZW1vdmVJdGVtKGNoaWxkcmVuW29mZnNldCAtIDFdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHV0aWwucmVtb3ZlSXRlbShzZWxlY3Rpb25Ob2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdFbCA9IGNvcmUuYXBwZW5kRm9ybWF0VGFnKGZyZWVGb3JtYXRFbCwgKHV0aWwuaXNGb3JtYXRFbGVtZW50KGZyZWVGb3JtYXRFbC5uZXh0RWxlbWVudFNpYmxpbmcpICYmICF1dGlsLmlzUmFuZ2VGb3JtYXRFbGVtZW50KGZyZWVGb3JtYXRFbC5uZXh0RWxlbWVudFNpYmxpbmcpKSA/IGZyZWVGb3JtYXRFbC5uZXh0RWxlbWVudFNpYmxpbmcgOiBudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGlsLmNvcHlGb3JtYXRBdHRyaWJ1dGVzKG5ld0VsLCBmcmVlRm9ybWF0RWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUuc2V0UmFuZ2UobmV3RWwsIDEsIG5ld0VsLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbkZvcm1hdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9ucy5pbnNlcnRIVE1MKCgocmFuZ2UuY29sbGFwc2VkICYmIHV0aWwuaXNCcmVhayhyYW5nZS5zdGFydENvbnRhaW5lci5jaGlsZE5vZGVzW3JhbmdlLnN0YXJ0T2Zmc2V0IC0gMV0pKSA/ICc8YnI+JyA6ICc8YnI+PGJyPicpLCB0cnVlLCBmYWxzZSk7XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZm9jdXNOb2RlID0gd1NlbGVjdGlvbi5mb2N1c05vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd09mZnNldCA9IHdTZWxlY3Rpb24uZm9jdXNPZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZyZWVGb3JtYXRFbCA9PT0gZm9jdXNOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzTm9kZSA9IGZvY3VzTm9kZS5jaGlsZE5vZGVzW3dPZmZzZXQgLSBvZmZzZXQgPiAxID8gd09mZnNldCAtIDEgOiB3T2Zmc2V0XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlLnNldFJhbmdlKGZvY3VzTm9kZSwgMSwgZm9jdXNOb2RlLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9jdXNOZXh0ID0gd1NlbGVjdGlvbi5mb2N1c05vZGUubmV4dFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnIgPSB1dGlsLmNyZWF0ZUVsZW1lbnQoJ0JSJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZS5pbnNlcnROb2RlKGJyLCBudWxsLCBmYWxzZSk7XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBiclByZXYgPSBici5wcmV2aW91c1NpYmxpbmcsIGJyTmV4dCA9IGJyLm5leHRTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdXRpbC5pc0JyZWFrKGZvY3VzTmV4dCkgJiYgIXV0aWwuaXNCcmVhayhiclByZXYpICYmICghYnJOZXh0IHx8IHV0aWwub25seVplcm9XaWR0aFNwYWNlKGJyTmV4dCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGJyLmNsb25lTm9kZShmYWxzZSksIGJyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZS5zZXRSYW5nZShiciwgMSwgYnIsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUuc2V0UmFuZ2UoYnJOZXh0LCAwLCBick5leHQsIDApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuX29uU2hvcnRjdXRLZXkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RSYW5nZSkgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmdlRWwgJiYgZm9ybWF0RWwgJiYgIXV0aWwuaXNDZWxsKHJhbmdlRWwpICYmICEvXkZJR0NBUFRJT04kL2kudGVzdChyYW5nZUVsLm5vZGVOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByYW5nZSA9IGNvcmUuZ2V0UmFuZ2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29yZS5pc0VkZ2VQb2ludChyYW5nZS5lbmRDb250YWluZXIsIHJhbmdlLmVuZE9mZnNldCkgJiYgdXRpbC5pc0xpc3Qoc2VsZWN0aW9uTm9kZS5uZXh0U2libGluZykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0VsID0gdXRpbC5jcmVhdGVFbGVtZW50KCdMSScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnIgPSB1dGlsLmNyZWF0ZUVsZW1lbnQoJ0JSJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdFbC5hcHBlbmRDaGlsZChicik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0RWwucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobmV3RWwsIGZvcm1hdEVsLm5leHRFbGVtZW50U2libGluZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdFbC5hcHBlbmRDaGlsZChzZWxlY3Rpb25Ob2RlLm5leHRTaWJsaW5nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZS5zZXRSYW5nZShiciwgMSwgYnIsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgocmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIubm9kZVR5cGUgPT09IDMgPyAhcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIubmV4dEVsZW1lbnRTaWJsaW5nIDogdHJ1ZSkgJiYgdXRpbC5vbmx5WmVyb1dpZHRoU3BhY2UoZm9ybWF0RWwuaW5uZXJUZXh0LnRyaW0oKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXdFbCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNMaXN0Q2VsbChyYW5nZUVsLnBhcmVudE5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VFbCA9IGZvcm1hdEVsLnBhcmVudE5vZGUucGFyZW50Tm9kZS5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0VsID0gdXRpbC5zcGxpdEVsZW1lbnQoZm9ybWF0RWwsIG51bGwsIHV0aWwuZ2V0RWxlbWVudERlcHRoKGZvcm1hdEVsKSAtIDIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbmV3RWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3TGlzdENlbGwgPSB1dGlsLmNyZWF0ZUVsZW1lbnQoJ0xJJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0xpc3RDZWxsLmlubmVySFRNTCA9ICc8YnI+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VFbC5pbnNlcnRCZWZvcmUobmV3TGlzdENlbGwsIG5ld0VsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3RWwgPSBuZXdMaXN0Q2VsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0Zvcm1hdCA9IHV0aWwuaXNDZWxsKHJhbmdlRWwucGFyZW50Tm9kZSkgPyAnRElWJyA6IHV0aWwuaXNMaXN0KHJhbmdlRWwucGFyZW50Tm9kZSkgPyAnTEknIDogKHV0aWwuaXNGb3JtYXRFbGVtZW50KHJhbmdlRWwubmV4dEVsZW1lbnRTaWJsaW5nKSAmJiAhdXRpbC5pc1JhbmdlRm9ybWF0RWxlbWVudChyYW5nZUVsLm5leHRFbGVtZW50U2libGluZykpID8gcmFuZ2VFbC5uZXh0RWxlbWVudFNpYmxpbmcubm9kZU5hbWUgOiAodXRpbC5pc0Zvcm1hdEVsZW1lbnQocmFuZ2VFbC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKSAmJiAhdXRpbC5pc1JhbmdlRm9ybWF0RWxlbWVudChyYW5nZUVsLnByZXZpb3VzRWxlbWVudFNpYmxpbmcpKSA/IHJhbmdlRWwucHJldmlvdXNFbGVtZW50U2libGluZy5ub2RlTmFtZSA6IG9wdGlvbnMuZGVmYXVsdFRhZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdFbCA9IHV0aWwuY3JlYXRlRWxlbWVudChuZXdGb3JtYXQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVkZ2UgPSBjb3JlLmRldGFjaFJhbmdlRm9ybWF0RWxlbWVudChyYW5nZUVsLCBbZm9ybWF0RWxdLCBudWxsLCB0cnVlLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGdlLmNjLmluc2VydEJlZm9yZShuZXdFbCwgZWRnZS5lYyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0VsLmlubmVySFRNTCA9ICc8YnI+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlSXRlbUFsbFBhcmVudHMoZm9ybWF0RWwsIG51bGwsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZS5zZXRSYW5nZShuZXdFbCwgMSwgbmV3RWwsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyYW5nZUVsICYmIHV0aWwuZ2V0UGFyZW50RWxlbWVudChyYW5nZUVsLCAnRklHQ0FQVElPTicpICYmIHV0aWwuZ2V0UGFyZW50RWxlbWVudChyYW5nZUVsLCB1dGlsLmlzTGlzdCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRFbCA9IGNvcmUuYXBwZW5kRm9ybWF0VGFnKGZvcm1hdEVsLCBudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29yZS5zZXRSYW5nZShmb3JtYXRFbCwgMCwgZm9ybWF0RWwsIDApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbGVDb21wb25lbnROYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tcENvbnRleHQgPSBjb250ZXh0W2ZpbGVDb21wb25lbnROYW1lXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGFpbmVyID0gY29tcENvbnRleHQuX2NvbnRhaW5lcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2libGluZyA9IGNvbnRhaW5lci5wcmV2aW91c0VsZW1lbnRTaWJsaW5nIHx8IGNvbnRhaW5lci5uZXh0RWxlbWVudFNpYmxpbmc7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmV3RWwgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXRpbC5pc0xpc3RDZWxsKGNvbnRhaW5lci5wYXJlbnROb2RlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3RWwgPSB1dGlsLmNyZWF0ZUVsZW1lbnQoJ0JSJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdFbCA9IHV0aWwuY3JlYXRlRWxlbWVudCgodXRpbC5pc0Zvcm1hdEVsZW1lbnQoc2libGluZykgJiYgIXV0aWwuaXNSYW5nZUZvcm1hdEVsZW1lbnQoc2libGluZykpID8gc2libGluZy5ub2RlTmFtZSA6IG9wdGlvbnMuZGVmYXVsdFRhZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdFbC5pbm5lckhUTUwgPSAnPGJyPic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5wYXJlbnROb2RlLmluc2VydEJlZm9yZShuZXdFbCwgY29udGFpbmVyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUuY2FsbFBsdWdpbihmaWxlQ29tcG9uZW50TmFtZSwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvcmUuc2VsZWN0Q29tcG9uZW50KGNvbXBDb250ZXh0Ll9lbGVtZW50LCBmaWxlQ29tcG9uZW50TmFtZSkgPT09IGZhbHNlKSBjb3JlLmJsdXIoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgbnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyNzpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZUNvbXBvbmVudE5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3JlLmNvbnRyb2xsZXJzT2ZmKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChzaGlmdCAmJiBrZXlDb2RlID09PSAxNikge1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRhYmxlUGx1Z2luID0gY29yZS5wbHVnaW5zLnRhYmxlO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRhYmxlUGx1Z2luICYmICF0YWJsZVBsdWdpbi5fc2hpZnQgJiYgIXRhYmxlUGx1Z2luLl9yZWYpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjZWxsID0gdXRpbC5nZXRQYXJlbnRFbGVtZW50KGZvcm1hdEVsLCB1dGlsLmlzQ2VsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNlbGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVQbHVnaW4ub25UYWJsZUNlbGxNdWx0aVNlbGVjdC5jYWxsKGNvcmUsIGNlbGwsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNoaWZ0ICYmICh1dGlsLmlzT1NYX0lPUyA/IGFsdCA6IGN0cmwpICYmIGtleUNvZGUgPT09IDMyKSB7XHJcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmJzcCA9IGNvcmUuaW5zZXJ0Tm9kZSh1dGlsLmNyZWF0ZVRleHROb2RlKCdcXHUwMGEwJykpO1xyXG4gICAgICAgICAgICAgICAgaWYgKG5ic3AgJiYgbmJzcC5jb250YWluZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb3JlLnNldFJhbmdlKG5ic3AuY29udGFpbmVyLCBuYnNwLmVuZE9mZnNldCwgbmJzcC5jb250YWluZXIsIG5ic3AuZW5kT2Zmc2V0KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHRleHRLZXkgPSAhY3RybCAmJiAhYWx0ICYmICFzZWxlY3RSYW5nZSAmJiAhZXZlbnQuX25vblRleHRLZXlDb2RlLnRlc3Qoa2V5Q29kZSk7XHJcbiAgICAgICAgICAgIGlmICh0ZXh0S2V5ICYmIHJhbmdlLmNvbGxhcHNlZCAmJiByYW5nZS5zdGFydENvbnRhaW5lciA9PT0gcmFuZ2UuZW5kQ29udGFpbmVyICYmIHV0aWwuaXNCcmVhayhyYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lcikpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHplcm9XaWR0aCA9IHV0aWwuY3JlYXRlVGV4dE5vZGUodXRpbC56ZXJvV2lkdGhTcGFjZSk7XHJcbiAgICAgICAgICAgICAgICBjb3JlLmluc2VydE5vZGUoemVyb1dpZHRoLCBudWxsLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICBjb3JlLnNldFJhbmdlKHplcm9XaWR0aCwgMSwgemVyb1dpZHRoLCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIG9uS2V5VXBfd3lzaXd5ZzogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgaWYgKGV2ZW50Ll9vblNob3J0Y3V0S2V5KSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBjb3JlLl9lZGl0b3JSYW5nZSgpO1xyXG4gICAgICAgICAgICBjb25zdCBrZXlDb2RlID0gZS5rZXlDb2RlO1xyXG4gICAgICAgICAgICBjb25zdCBjdHJsID0gZS5jdHJsS2V5IHx8IGUubWV0YUtleSB8fCBrZXlDb2RlID09PSA5MSB8fCBrZXlDb2RlID09PSA5MiB8fCBrZXlDb2RlID09PSAyMjQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGFsdCA9IGUuYWx0S2V5O1xyXG5cclxuICAgICAgICAgICAgaWYgKGNvcmUuaXNSZWFkT25seSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFjdHJsICYmIGV2ZW50Ll9kaXJlY3Rpb25LZXlDb2RlLnRlc3Qoa2V5Q29kZSkpIGV2ZW50Ll9hcHBseVRhZ0VmZmVjdHMoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSBjb3JlLmdldFJhbmdlKCk7XHJcbiAgICAgICAgICAgIGxldCBzZWxlY3Rpb25Ob2RlID0gY29yZS5nZXRTZWxlY3Rpb25Ob2RlKCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoY29yZS5faXNCYWxsb29uICYmICgoY29yZS5faXNCYWxsb29uQWx3YXlzICYmIGtleUNvZGUgIT09IDI3KSB8fCAhcmFuZ2UuY29sbGFwc2VkKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvcmUuX2lzQmFsbG9vbkFsd2F5cykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXlDb2RlICE9PSAyNykgZXZlbnQuX3Nob3dUb29sYmFyQmFsbG9vbkRlbGF5KCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50Ll9zaG93VG9vbGJhckJhbGxvb24oKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8qKiB3aGVuIGZvcm1hdCB0YWcgZGVsZXRlZCAqL1xyXG4gICAgICAgICAgICBpZiAoa2V5Q29kZSA9PT0gOCAmJiB1dGlsLmlzV3lzaXd5Z0RpdihzZWxlY3Rpb25Ob2RlKSAmJiBzZWxlY3Rpb25Ob2RlLnRleHRDb250ZW50ID09PSAnJyAmJiBzZWxlY3Rpb25Ob2RlLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb25Ob2RlLmlubmVySFRNTCA9ICcnO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IG9Gb3JtYXRUYWcgPSB1dGlsLmNyZWF0ZUVsZW1lbnQodXRpbC5pc0Zvcm1hdEVsZW1lbnQoY29yZS5fdmFyaWFibGUuY3VycmVudE5vZGVzWzBdKSA/IGNvcmUuX3ZhcmlhYmxlLmN1cnJlbnROb2Rlc1swXSA6IG9wdGlvbnMuZGVmYXVsdFRhZyk7XHJcbiAgICAgICAgICAgICAgICBvRm9ybWF0VGFnLmlubmVySFRNTCA9ICc8YnI+JztcclxuXHJcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb25Ob2RlLmFwcGVuZENoaWxkKG9Gb3JtYXRUYWcpO1xyXG4gICAgICAgICAgICAgICAgY29yZS5zZXRSYW5nZShvRm9ybWF0VGFnLCAwLCBvRm9ybWF0VGFnLCAwKTtcclxuICAgICAgICAgICAgICAgIGV2ZW50Ll9hcHBseVRhZ0VmZmVjdHMoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb3JlLmhpc3RvcnkucHVzaChmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdEVsID0gdXRpbC5nZXRGb3JtYXRFbGVtZW50KHNlbGVjdGlvbk5vZGUsIG51bGwpO1xyXG4gICAgICAgICAgICBjb25zdCByYW5nZUVsID0gdXRpbC5nZXRSYW5nZUZvcm1hdEVsZW1lbnQoc2VsZWN0aW9uTm9kZSwgbnVsbCk7XHJcbiAgICAgICAgICAgIGlmICghZm9ybWF0RWwgJiYgcmFuZ2UuY29sbGFwc2VkICYmICF1dGlsLmlzQ29tcG9uZW50KHNlbGVjdGlvbk5vZGUpICYmICF1dGlsLmlzTGlzdChzZWxlY3Rpb25Ob2RlKSAmJiBjb3JlLl9zZXREZWZhdWx0Rm9ybWF0KHV0aWwuaXNSYW5nZUZvcm1hdEVsZW1lbnQocmFuZ2VFbCkgPyAnRElWJyA6IG9wdGlvbnMuZGVmYXVsdFRhZykgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbk5vZGUgPSBjb3JlLmdldFNlbGVjdGlvbk5vZGUoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGV2ZW50Ll9kaXJlY3Rpb25LZXlDb2RlLnRlc3Qoa2V5Q29kZSkpIHtcclxuICAgICAgICAgICAgICAgIGV2ZW50Ll9hcHBseVRhZ0VmZmVjdHMoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgdGV4dEtleSA9ICFjdHJsICYmICFhbHQgJiYgIWV2ZW50Ll9ub25UZXh0S2V5Q29kZS50ZXN0KGtleUNvZGUpO1xyXG4gICAgICAgICAgICBpZiAodGV4dEtleSAmJiBzZWxlY3Rpb25Ob2RlLm5vZGVUeXBlID09PSAzICYmIHV0aWwuemVyb1dpZHRoUmVnRXhwLnRlc3Qoc2VsZWN0aW9uTm9kZS50ZXh0Q29udGVudCkgJiYgIShlLmlzQ29tcG9zaW5nICE9PSB1bmRlZmluZWQgPyBlLmlzQ29tcG9zaW5nIDogZXZlbnQuX0lFaXNDb21wb3NpbmcpKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgc28gPSByYW5nZS5zdGFydE9mZnNldCwgZW8gPSByYW5nZS5lbmRPZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmcm9udFplcm9XaWR0aENudCA9IChzZWxlY3Rpb25Ob2RlLnRleHRDb250ZW50LnN1YnN0cmluZygwLCBlbykubWF0Y2goZXZlbnQuX2Zyb250WmVyb1dpZHRoUmVnKSB8fCAnJykubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgc28gPSByYW5nZS5zdGFydE9mZnNldCAtIGZyb250WmVyb1dpZHRoQ250O1xyXG4gICAgICAgICAgICAgICAgZW8gPSByYW5nZS5lbmRPZmZzZXQgLSBmcm9udFplcm9XaWR0aENudDtcclxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbk5vZGUudGV4dENvbnRlbnQgPSBzZWxlY3Rpb25Ob2RlLnRleHRDb250ZW50LnJlcGxhY2UodXRpbC56ZXJvV2lkdGhSZWdFeHAsICcnKTtcclxuICAgICAgICAgICAgICAgIGNvcmUuc2V0UmFuZ2Uoc2VsZWN0aW9uTm9kZSwgc28gPCAwID8gMCA6IHNvLCBzZWxlY3Rpb25Ob2RlLCBlbyA8IDAgPyAwIDogZW8pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb3JlLl9jaGFyQ291bnQoJycpO1xyXG5cclxuICAgICAgICAgICAgLy8gdXNlciBldmVudFxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGZ1bmN0aW9ucy5vbktleVVwID09PSAnZnVuY3Rpb24nICYmIGZ1bmN0aW9ucy5vbktleVVwKGUsIGNvcmUpID09PSBmYWxzZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgLy8gaGlzdG9yeSBzdGFja1xyXG4gICAgICAgICAgICBpZiAoIWN0cmwgJiYgIWFsdCAmJiAhZXZlbnQuX2hpc3RvcnlJZ25vcmVLZXlDb2RlLnRlc3Qoa2V5Q29kZSkpIHtcclxuICAgICAgICAgICAgICAgIGNvcmUuaGlzdG9yeS5wdXNoKHRydWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgb25TY3JvbGxfd3lzaXd5ZzogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgY29yZS5jb250cm9sbGVyc09mZigpO1xyXG4gICAgICAgICAgICBpZiAoY29yZS5faXNCYWxsb29uKSBldmVudC5faGlkZVRvb2xiYXIoKTtcclxuXHJcbiAgICAgICAgICAgIC8vIHVzZXIgZXZlbnRcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBmdW5jdGlvbnMub25TY3JvbGwgPT09ICdmdW5jdGlvbicpIGZ1bmN0aW9ucy5vblNjcm9sbChlLCBjb3JlKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBvbkZvY3VzX3d5c2l3eWc6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGlmIChjb3JlLl9hbnRpQmx1cikgcmV0dXJuO1xyXG4gICAgICAgICAgICBjb3JlLmhhc0ZvY3VzID0gdHJ1ZTtcclxuICAgICAgICAgICAgZXZlbnQuX2FwcGx5VGFnRWZmZWN0cygpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYgKGNvcmUuX2lzSW5saW5lKSBldmVudC5fc2hvd1Rvb2xiYXJJbmxpbmUoKTtcclxuXHJcbiAgICAgICAgICAgIC8vIHVzZXIgZXZlbnRcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBmdW5jdGlvbnMub25Gb2N1cyA9PT0gJ2Z1bmN0aW9uJykgZnVuY3Rpb25zLm9uRm9jdXMoZSwgY29yZSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgb25CbHVyX3d5c2l3eWc6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGlmIChjb3JlLl9hbnRpQmx1ciB8fCBjb3JlLl92YXJpYWJsZS5pc0NvZGVWaWV3KSByZXR1cm47XHJcbiAgICAgICAgICAgIGNvcmUuaGFzRm9jdXMgPSBmYWxzZTtcclxuICAgICAgICAgICAgY29yZS5jb250cm9sbGVyc09mZigpO1xyXG4gICAgICAgICAgICBpZiAoY29yZS5faXNJbmxpbmUgfHwgY29yZS5faXNCYWxsb29uKSBldmVudC5faGlkZVRvb2xiYXIoKTtcclxuXHJcbiAgICAgICAgICAgIGNvcmUuX3NldEtleUVmZmVjdChbXSk7XHJcblxyXG4gICAgICAgICAgICBjb3JlLl92YXJpYWJsZS5jdXJyZW50Tm9kZXMgPSBbXTtcclxuICAgICAgICAgICAgY29yZS5fdmFyaWFibGUuY3VycmVudE5vZGVzTWFwID0gW107XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnNob3dQYXRoTGFiZWwpIGNvbnRleHQuZWxlbWVudC5uYXZpZ2F0aW9uLnRleHRDb250ZW50ID0gJyc7XHJcblxyXG4gICAgICAgICAgICAvLyB1c2VyIGV2ZW50XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZnVuY3Rpb25zLm9uQmx1ciA9PT0gJ2Z1bmN0aW9uJykgZnVuY3Rpb25zLm9uQmx1cihlLCBjb3JlKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBvbk1vdXNlRG93bl9yZXNpemluZ0JhcjogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICAgICAgICAgIGNvcmUuc3VibWVudU9mZigpO1xyXG4gICAgICAgICAgICBjb3JlLmNvbnRyb2xsZXJzT2ZmKCk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBwcmV2SGVpZ2h0ID0gdXRpbC5nZXROdW1iZXIoY29udGV4dC5lbGVtZW50Lnd5c2l3eWdGcmFtZS5zdHlsZS5oZWlnaHQsIDApO1xyXG4gICAgICAgICAgICBjb3JlLl92YXJpYWJsZS5yZXNpemVDbGllbnRZID0gZS5jbGllbnRZO1xyXG4gICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQucmVzaXplQmFja2dyb3VuZC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIGNsb3N1cmVGdW5jKCkge1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50LnJlc2l6ZUJhY2tncm91bmQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgICAgIF9kLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIGV2ZW50Ll9yZXNpemVfZWRpdG9yKTtcclxuICAgICAgICAgICAgICAgIF9kLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBjbG9zdXJlRnVuYyk7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZ1bmN0aW9ucy5vblJlc2l6ZUVkaXRvciA9PT0gJ2Z1bmN0aW9uJykgZnVuY3Rpb25zLm9uUmVzaXplRWRpdG9yKHV0aWwuZ2V0TnVtYmVyKGNvbnRleHQuZWxlbWVudC53eXNpd3lnRnJhbWUuc3R5bGUuaGVpZ2h0LCAwKSwgcHJldkhlaWdodCwgY29yZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIF9kLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIGV2ZW50Ll9yZXNpemVfZWRpdG9yKTtcclxuICAgICAgICAgICAgX2QuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIGNsb3N1cmVGdW5jKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBfcmVzaXplX2VkaXRvcjogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgY29uc3QgcmVzaXplSW50ZXJ2YWwgPSBjb250ZXh0LmVsZW1lbnQuZWRpdG9yQXJlYS5vZmZzZXRIZWlnaHQgKyAoZS5jbGllbnRZIC0gY29yZS5fdmFyaWFibGUucmVzaXplQ2xpZW50WSk7XHJcbiAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC53eXNpd3lnRnJhbWUuc3R5bGUuaGVpZ2h0ID0gY29udGV4dC5lbGVtZW50LmNvZGUuc3R5bGUuaGVpZ2h0ID0gKHJlc2l6ZUludGVydmFsIDwgY29yZS5fdmFyaWFibGUubWluUmVzaXppbmdTaXplID8gY29yZS5fdmFyaWFibGUubWluUmVzaXppbmdTaXplIDogcmVzaXplSW50ZXJ2YWwpICsgJ3B4JztcclxuICAgICAgICAgICAgY29yZS5fdmFyaWFibGUucmVzaXplQ2xpZW50WSA9IGUuY2xpZW50WTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBvblJlc2l6ZV93aW5kb3c6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgY29yZS5jb250cm9sbGVyc09mZigpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2l2ZVNpemUgPSBldmVudC5fcmVzcG9uc2l2ZUJ1dHRvblNpemU7XHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zaXZlU2l6ZSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHcgPSAwO1xyXG4gICAgICAgICAgICAgICAgaWYgKChjb3JlLl9pc0JhbGxvb24gfHwgY29yZS5faXNJbmxpbmUpICYmIG9wdGlvbnMudG9vbGJhcldpZHRoID09PSAnYXV0bycpIHtcclxuICAgICAgICAgICAgICAgICAgICB3ID0gY29udGV4dC5lbGVtZW50LnRvcEFyZWEub2Zmc2V0V2lkdGg7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHcgPSBjb250ZXh0LmVsZW1lbnQudG9vbGJhci5vZmZzZXRXaWR0aDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2l2ZVdpZHRoID0gJ2RlZmF1bHQnO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDEsIGxlbiA9IHJlc3BvbnNpdmVTaXplLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHcgPCByZXNwb25zaXZlU2l6ZVtpXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zaXZlV2lkdGggPSByZXNwb25zaXZlU2l6ZVtpXSArICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50Ll9yZXNwb25zaXZlQ3VycmVudFNpemUgIT09IHJlc3BvbnNpdmVXaWR0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50Ll9yZXNwb25zaXZlQ3VycmVudFNpemUgPSByZXNwb25zaXZlV2lkdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25zLnNldFRvb2xiYXJCdXR0b25zKGV2ZW50Ll9yZXNwb25zaXZlQnV0dG9uc1tyZXNwb25zaXZlV2lkdGhdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNvbnRleHQuZWxlbWVudC50b29sYmFyLm9mZnNldFdpZHRoID09PSAwKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBpZiAoY29udGV4dC5maWxlQnJvd3NlciAmJiBjb250ZXh0LmZpbGVCcm93c2VyLmFyZWEuc3R5bGUuZGlzcGxheSA9PT0gJ2Jsb2NrJykge1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxlQnJvd3Nlci5ib2R5LnN0eWxlLm1heEhlaWdodCA9IChfdy5pbm5lckhlaWdodCAtIGNvbnRleHQuZmlsZUJyb3dzZXIuaGVhZGVyLm9mZnNldEhlaWdodCAtIDUwKSArICdweCc7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjb3JlLnN1Ym1lbnVBY3RpdmVCdXR0b24gJiYgY29yZS5zdWJtZW51KSB7XHJcbiAgICAgICAgICAgICAgICBjb3JlLl9zZXRNZW51UG9zaXRpb24oY29yZS5zdWJtZW51QWN0aXZlQnV0dG9uLCBjb3JlLnN1Ym1lbnUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoY29yZS5fdmFyaWFibGUuaXNGdWxsU2NyZWVuKSB7XHJcbiAgICAgICAgICAgICAgICBjb3JlLl92YXJpYWJsZS5pbm5lckhlaWdodF9mdWxsU2NyZWVuICs9IChfdy5pbm5lckhlaWdodCAtIGNvbnRleHQuZWxlbWVudC50b29sYmFyLm9mZnNldEhlaWdodCkgLSBjb3JlLl92YXJpYWJsZS5pbm5lckhlaWdodF9mdWxsU2NyZWVuO1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50LmVkaXRvckFyZWEuc3R5bGUuaGVpZ2h0ID0gY29yZS5fdmFyaWFibGUuaW5uZXJIZWlnaHRfZnVsbFNjcmVlbiArICdweCc7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjb3JlLl92YXJpYWJsZS5pc0NvZGVWaWV3ICYmIGNvcmUuX2lzSW5saW5lKSB7XHJcbiAgICAgICAgICAgICAgICBldmVudC5fc2hvd1Rvb2xiYXJJbmxpbmUoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29yZS5faWZyYW1lQXV0b0hlaWdodCgpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNvcmUuX3N0aWNreSkge1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50LnRvb2xiYXIuc3R5bGUud2lkdGggPSAoY29udGV4dC5lbGVtZW50LnRvcEFyZWEub2Zmc2V0V2lkdGggLSAyKSArICdweCc7XHJcbiAgICAgICAgICAgICAgICBldmVudC5vblNjcm9sbF93aW5kb3coKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIG9uU2Nyb2xsX3dpbmRvdzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAoY29yZS5fdmFyaWFibGUuaXNGdWxsU2NyZWVuIHx8IGNvbnRleHQuZWxlbWVudC50b29sYmFyLm9mZnNldFdpZHRoID09PSAwIHx8IG9wdGlvbnMuc3RpY2t5VG9vbGJhciA8IDApIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVkaXRvckhlaWdodCA9IGVsZW1lbnQuZWRpdG9yQXJlYS5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHkgPSAodGhpcy5zY3JvbGxZIHx8IF9kLmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3ApICsgb3B0aW9ucy5zdGlja3lUb29sYmFyO1xyXG4gICAgICAgICAgICBjb25zdCBlZGl0b3JUb3AgPSBldmVudC5fZ2V0RWRpdG9yT2Zmc2V0cyhvcHRpb25zLnRvb2xiYXJDb250YWluZXIpLnRvcCAtIChjb3JlLl9pc0lubGluZSA/IGVsZW1lbnQudG9vbGJhci5vZmZzZXRIZWlnaHQgOiAwKTtcclxuICAgICAgICAgICAgY29uc3QgaW5saW5lT2Zmc2V0ID0gY29yZS5faXNJbmxpbmUgJiYgKHkgLSBlZGl0b3JUb3ApID4gMCA/IHkgLSBlZGl0b3JUb3AgLSBjb250ZXh0LmVsZW1lbnQudG9vbGJhci5vZmZzZXRIZWlnaHQgOiAwO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYgKHkgPCBlZGl0b3JUb3ApIHtcclxuICAgICAgICAgICAgICAgIGV2ZW50Ll9vZmZTdGlja3lUb29sYmFyKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoeSArIGNvcmUuX3ZhcmlhYmxlLm1pblJlc2l6aW5nU2l6ZSA+PSBlZGl0b3JIZWlnaHQgKyBlZGl0b3JUb3ApIHtcclxuICAgICAgICAgICAgICAgIGlmICghY29yZS5fc3RpY2t5KSBldmVudC5fb25TdGlja3lUb29sYmFyKGlubGluZU9mZnNldCk7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50LnRvb2xiYXIuc3R5bGUudG9wID0gKGlubGluZU9mZnNldCArIGVkaXRvckhlaWdodCArIGVkaXRvclRvcCArIG9wdGlvbnMuc3RpY2t5VG9vbGJhciAtIHkgLSBjb3JlLl92YXJpYWJsZS5taW5SZXNpemluZ1NpemUpICsgJ3B4JztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh5ID49IGVkaXRvclRvcCkge1xyXG4gICAgICAgICAgICAgICAgZXZlbnQuX29uU3RpY2t5VG9vbGJhcihpbmxpbmVPZmZzZXQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX2dldEVkaXRvck9mZnNldHM6IGZ1bmN0aW9uIChjb250YWluZXIpIHtcclxuICAgICAgICAgICAgbGV0IG9mZnNldEVsID0gY29udGFpbmVyIHx8IGNvbnRleHQuZWxlbWVudC50b3BBcmVhO1xyXG4gICAgICAgICAgICBsZXQgdCA9IDAsIGwgPSAwLCBzID0gMDtcclxuXHJcbiAgICAgICAgICAgIHdoaWxlIChvZmZzZXRFbCkge1xyXG4gICAgICAgICAgICAgICAgdCArPSBvZmZzZXRFbC5vZmZzZXRUb3A7XHJcbiAgICAgICAgICAgICAgICBsICs9IG9mZnNldEVsLm9mZnNldExlZnQ7XHJcbiAgICAgICAgICAgICAgICBzICs9IG9mZnNldEVsLnNjcm9sbFRvcDtcclxuICAgICAgICAgICAgICAgIG9mZnNldEVsID0gb2Zmc2V0RWwub2Zmc2V0UGFyZW50O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdG9wOiB0LFxyXG4gICAgICAgICAgICAgICAgbGVmdDogbCxcclxuICAgICAgICAgICAgICAgIHNjcm9sbDogc1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9nZXRQYWdlQm90dG9tU3BhY2U6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIF9kLmRvY3VtZW50RWxlbWVudC5zY3JvbGxIZWlnaHQgLSAoZXZlbnQuX2dldEVkaXRvck9mZnNldHMobnVsbCkudG9wICsgY29udGV4dC5lbGVtZW50LnRvcEFyZWEub2Zmc2V0SGVpZ2h0KTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBfb25TdGlja3lUb29sYmFyOiBmdW5jdGlvbiAoaW5saW5lT2Zmc2V0KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQ7XHJcblxyXG4gICAgICAgICAgICBpZiAoIWNvcmUuX2lzSW5saW5lICYmICFvcHRpb25zLnRvb2xiYXJDb250YWluZXIpIHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQuX3N0aWNreUR1bW15LnN0eWxlLmhlaWdodCA9IGVsZW1lbnQudG9vbGJhci5vZmZzZXRIZWlnaHQgKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudC5fc3RpY2t5RHVtbXkuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGVsZW1lbnQudG9vbGJhci5zdHlsZS50b3AgPSAob3B0aW9ucy5zdGlja3lUb29sYmFyICsgaW5saW5lT2Zmc2V0KSArICdweCc7XHJcbiAgICAgICAgICAgIGVsZW1lbnQudG9vbGJhci5zdHlsZS53aWR0aCA9IGNvcmUuX2lzSW5saW5lID8gY29yZS5faW5saW5lVG9vbGJhckF0dHIud2lkdGggOiBlbGVtZW50LnRvb2xiYXIub2Zmc2V0V2lkdGggKyAncHgnO1xyXG4gICAgICAgICAgICB1dGlsLmFkZENsYXNzKGVsZW1lbnQudG9vbGJhciwgJ3NlLXRvb2xiYXItc3RpY2t5Jyk7XHJcbiAgICAgICAgICAgIGNvcmUuX3N0aWNreSA9IHRydWU7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX29mZlN0aWNreVRvb2xiYXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudDtcclxuXHJcbiAgICAgICAgICAgIGVsZW1lbnQuX3N0aWNreUR1bW15LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIGVsZW1lbnQudG9vbGJhci5zdHlsZS50b3AgPSBjb3JlLl9pc0lubGluZSA/IGNvcmUuX2lubGluZVRvb2xiYXJBdHRyLnRvcCA6ICcnO1xyXG4gICAgICAgICAgICBlbGVtZW50LnRvb2xiYXIuc3R5bGUud2lkdGggPSBjb3JlLl9pc0lubGluZSA/IGNvcmUuX2lubGluZVRvb2xiYXJBdHRyLndpZHRoIDogJyc7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuZWRpdG9yQXJlYS5zdHlsZS5tYXJnaW5Ub3AgPSAnJztcclxuXHJcbiAgICAgICAgICAgIHV0aWwucmVtb3ZlQ2xhc3MoZWxlbWVudC50b29sYmFyLCAnc2UtdG9vbGJhci1zdGlja3knKTtcclxuICAgICAgICAgICAgY29yZS5fc3RpY2t5ID0gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX2NvZGVWaWV3QXV0b0hlaWdodDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQuY29kZS5zdHlsZS5oZWlnaHQgPSBjb250ZXh0LmVsZW1lbnQuY29kZS5zY3JvbGxIZWlnaHQgKyAncHgnO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8vIEZpcmVGb3ggLSB0YWJsZSBkZWxldGUsIENocm9tZSAtIGltYWdlLCB2aWRlbywgYXVkaW9cclxuICAgICAgICBfaGFyZERlbGV0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBjb25zdCByYW5nZSA9IGNvcmUuZ2V0UmFuZ2UoKTtcclxuICAgICAgICAgICAgY29uc3Qgc2MgPSByYW5nZS5zdGFydENvbnRhaW5lcjtcclxuICAgICAgICAgICAgY29uc3QgZWMgPSByYW5nZS5lbmRDb250YWluZXI7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyB0YWJsZVxyXG4gICAgICAgICAgICBjb25zdCBzQ2VsbCA9IHV0aWwuZ2V0UmFuZ2VGb3JtYXRFbGVtZW50KHNjKTtcclxuICAgICAgICAgICAgY29uc3QgZUNlbGwgPSB1dGlsLmdldFJhbmdlRm9ybWF0RWxlbWVudChlYyk7XHJcbiAgICAgICAgICAgIGNvbnN0IHNJc0NlbGwgPSB1dGlsLmlzQ2VsbChzQ2VsbCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVJc0NlbGwgPSB1dGlsLmlzQ2VsbChlQ2VsbCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGFuY2VzdG9yID0gcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXI7XHJcbiAgICAgICAgICAgIGlmICgoKHNJc0NlbGwgJiYgIXNDZWxsLnByZXZpb3VzRWxlbWVudFNpYmxpbmcgJiYgIXNDZWxsLnBhcmVudEVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZykgfHwgKGVJc0NlbGwgJiYgIWVDZWxsLm5leHRFbGVtZW50U2libGluZyAmJiAhZUNlbGwucGFyZW50RWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmcpKSAmJiBzQ2VsbCAhPT0gZUNlbGwpIHtcclxuICAgICAgICAgICAgICAgIGlmICghc0lzQ2VsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlSXRlbSh1dGlsLmdldFBhcmVudEVsZW1lbnQoZUNlbGwsIGZ1bmN0aW9uKGN1cnJlbnQpIHtyZXR1cm4gYW5jZXN0b3IgPT09IGN1cnJlbnQucGFyZW50Tm9kZTt9KSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFlSXNDZWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtKHV0aWwuZ2V0UGFyZW50RWxlbWVudChzQ2VsbCwgZnVuY3Rpb24oY3VycmVudCkge3JldHVybiBhbmNlc3RvciA9PT0gY3VycmVudC5wYXJlbnROb2RlO30pKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtKHV0aWwuZ2V0UGFyZW50RWxlbWVudChzQ2VsbCwgZnVuY3Rpb24oY3VycmVudCkge3JldHVybiBhbmNlc3RvciA9PT0gY3VycmVudC5wYXJlbnROb2RlO30pKTtcclxuICAgICAgICAgICAgICAgICAgICBjb3JlLm5hdGl2ZUZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGNvbXBvbmVudFxyXG4gICAgICAgICAgICBjb25zdCBzQ29tcCA9IHNjLm5vZGVUeXBlID09PSAxID8gdXRpbC5nZXRQYXJlbnRFbGVtZW50KHNjLCAnLnNlLWNvbXBvbmVudCcpIDogbnVsbDtcclxuICAgICAgICAgICAgY29uc3QgZUNvbXAgPSBlYy5ub2RlVHlwZSA9PT0gMSA/IHV0aWwuZ2V0UGFyZW50RWxlbWVudChlYywgJy5zZS1jb21wb25lbnQnKSA6IG51bGw7XHJcbiAgICAgICAgICAgIGlmIChzQ29tcCkgdXRpbC5yZW1vdmVJdGVtKHNDb21wKTtcclxuICAgICAgICAgICAgaWYgKGVDb21wKSB1dGlsLnJlbW92ZUl0ZW0oZUNvbXApO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIG9uUGFzdGVfd3lzaXd5ZzogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgY29uc3QgY2xpcGJvYXJkRGF0YSA9IHV0aWwuaXNJRSA/IF93LmNsaXBib2FyZERhdGEgOiBlLmNsaXBib2FyZERhdGE7XHJcbiAgICAgICAgICAgIGlmICghY2xpcGJvYXJkRGF0YSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIHJldHVybiBldmVudC5fZGF0YVRyYW5zZmVyQWN0aW9uKCdwYXN0ZScsIGUsIGNsaXBib2FyZERhdGEpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9zZXRDbGlwYm9hcmRDb21wb25lbnQ6IGZ1bmN0aW9uIChlLCBpbmZvLCBjbGlwYm9hcmREYXRhKSB7XHJcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgY2xpcGJvYXJkRGF0YS5zZXREYXRhKCd0ZXh0L2h0bWwnLCBpbmZvLmNvbXBvbmVudC5vdXRlckhUTUwpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIG9uQ29weV93eXNpd3lnOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICBjb25zdCBjbGlwYm9hcmREYXRhID0gdXRpbC5pc0lFID8gX3cuY2xpcGJvYXJkRGF0YSA6IGUuY2xpcGJvYXJkRGF0YTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIHVzZXIgZXZlbnRcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBmdW5jdGlvbnMub25Db3B5ID09PSAnZnVuY3Rpb24nICYmICFmdW5jdGlvbnMub25Db3B5KGUsIGNsaXBib2FyZERhdGEsIGNvcmUpKSB7XHJcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBpbmZvID0gY29yZS5jdXJyZW50RmlsZUNvbXBvbmVudEluZm87XHJcbiAgICAgICAgICAgIGlmIChpbmZvICYmICF1dGlsLmlzSUUpIHtcclxuICAgICAgICAgICAgICAgIGV2ZW50Ll9zZXRDbGlwYm9hcmRDb21wb25lbnQoZSwgaW5mbywgY2xpcGJvYXJkRGF0YSk7XHJcbiAgICAgICAgICAgICAgICB1dGlsLmFkZENsYXNzKGluZm8uY29tcG9uZW50LCAnc2UtY29tcG9uZW50LWNvcHknKTtcclxuICAgICAgICAgICAgICAgIC8vIGNvcHkgZWZmZWN0XHJcbiAgICAgICAgICAgICAgICBfdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUNsYXNzKGluZm8uY29tcG9uZW50LCAnc2UtY29tcG9uZW50LWNvcHknKTtcclxuICAgICAgICAgICAgICAgIH0sIDE1MCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBvblNhdmVfd3lzaXd5ZzogZnVuY3Rpb24gKGNvbnRlbnQpIHtcclxuICAgICAgICAgICAgLy8gdXNlciBldmVudFxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGZ1bmN0aW9ucy5vblNhdmUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIGZ1bmN0aW9ucy5vblNhdmUoY29udGVudCwgY29yZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBvbkN1dF93eXNpd3lnOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICBjb25zdCBjbGlwYm9hcmREYXRhID0gdXRpbC5pc0lFID8gX3cuY2xpcGJvYXJkRGF0YSA6IGUuY2xpcGJvYXJkRGF0YTtcclxuXHJcbiAgICAgICAgICAgIC8vIHVzZXIgZXZlbnRcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBmdW5jdGlvbnMub25DdXQgPT09ICdmdW5jdGlvbicgJiYgIWZ1bmN0aW9ucy5vbkN1dChlLCBjbGlwYm9hcmREYXRhLCBjb3JlKSkge1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgaW5mbyA9IGNvcmUuY3VycmVudEZpbGVDb21wb25lbnRJbmZvO1xyXG4gICAgICAgICAgICBpZiAoaW5mbyAmJiAhdXRpbC5pc0lFKSB7XHJcbiAgICAgICAgICAgICAgICBldmVudC5fc2V0Q2xpcGJvYXJkQ29tcG9uZW50KGUsIGluZm8sIGNsaXBib2FyZERhdGEpO1xyXG4gICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtKGluZm8uY29tcG9uZW50KTtcclxuICAgICAgICAgICAgICAgIGNvcmUuY29udHJvbGxlcnNPZmYoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgX3cuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBoaXN0b3J5IHN0YWNrXHJcbiAgICAgICAgICAgICAgICBjb3JlLmhpc3RvcnkucHVzaChmYWxzZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIG9uRHJvcF93eXNpd3lnOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICBpZiAoY29yZS5pc1JlYWRPbmx5IHx8IHV0aWwuaXNJRSkge1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgZGF0YVRyYW5zZmVyID0gZS5kYXRhVHJhbnNmZXI7XHJcbiAgICAgICAgICAgIGlmICghZGF0YVRyYW5zZmVyKSByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIGNvcmUucmVtb3ZlTm9kZSgpO1xyXG4gICAgICAgICAgICBldmVudC5fc2V0RHJvcExvY2F0aW9uU2VsZWN0aW9uKGUpO1xyXG4gICAgICAgICAgICByZXR1cm4gZXZlbnQuX2RhdGFUcmFuc2ZlckFjdGlvbignZHJvcCcsIGUsIGRhdGFUcmFuc2Zlcik7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX3NldERyb3BMb2NhdGlvblNlbGVjdGlvbjogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgaWYgKGUucmFuZ2VQYXJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNvcmUuc2V0UmFuZ2UoZS5yYW5nZVBhcmVudCwgZS5yYW5nZU9mZnNldCwgZS5yYW5nZVBhcmVudCwgZS5yYW5nZU9mZnNldCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29yZS5fd2QuY2FyZXRSYW5nZUZyb21Qb2ludCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgciA9IGNvcmUuX3dkLmNhcmV0UmFuZ2VGcm9tUG9pbnQoZS5jbGllbnRYLCBlLmNsaWVudFkpO1xyXG4gICAgICAgICAgICAgICAgY29yZS5zZXRSYW5nZShyLnN0YXJ0Q29udGFpbmVyLCByLnN0YXJ0T2Zmc2V0LCByLmVuZENvbnRhaW5lciwgci5lbmRPZmZzZXQpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgciA9IGNvcmUuZ2V0UmFuZ2UoKTtcclxuICAgICAgICAgICAgICAgIGNvcmUuc2V0UmFuZ2Uoci5zdGFydENvbnRhaW5lciwgci5zdGFydE9mZnNldCwgci5lbmRDb250YWluZXIsIHIuZW5kT2Zmc2V0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9kYXRhVHJhbnNmZXJBY3Rpb246IGZ1bmN0aW9uICh0eXBlLCBlLCBkYXRhKSB7XHJcbiAgICAgICAgICAgIGxldCBwbGFpblRleHQsIGNsZWFuRGF0YTtcclxuICAgICAgICAgICAgaWYgKHV0aWwuaXNJRSkge1xyXG4gICAgICAgICAgICAgICAgcGxhaW5UZXh0ID0gZGF0YS5nZXREYXRhKCdUZXh0Jyk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gY29yZS5nZXRSYW5nZSgpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdGVtcERpdiA9IHV0aWwuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0ZW1wUmFuZ2UgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2M6IHJhbmdlLnN0YXJ0Q29udGFpbmVyLFxyXG4gICAgICAgICAgICAgICAgICAgIHNvOiByYW5nZS5zdGFydE9mZnNldCxcclxuICAgICAgICAgICAgICAgICAgICBlYzogcmFuZ2UuZW5kQ29udGFpbmVyLFxyXG4gICAgICAgICAgICAgICAgICAgIGVvOiByYW5nZS5lbmRPZmZzZXRcclxuICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgdGVtcERpdi5zZXRBdHRyaWJ1dGUoJ2NvbnRlbnRlZGl0YWJsZScsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgdGVtcERpdi5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOmFic29sdXRlOyB0b3A6MDsgbGVmdDowOyB3aWR0aDoxcHg7IGhlaWdodDoxcHg7IG92ZXJmbG93OmhpZGRlbjsnO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQucmVsYXRpdmUuYXBwZW5kQ2hpbGQodGVtcERpdik7XHJcbiAgICAgICAgICAgICAgICB0ZW1wRGl2LmZvY3VzKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgX3cuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xlYW5EYXRhID0gdGVtcERpdi5pbm5lckhUTUw7XHJcbiAgICAgICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtKHRlbXBEaXYpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvcmUuc2V0UmFuZ2UodGVtcFJhbmdlLnNjLCB0ZW1wUmFuZ2Uuc28sIHRlbXBSYW5nZS5lYywgdGVtcFJhbmdlLmVvKTtcclxuICAgICAgICAgICAgICAgICAgICBldmVudC5fc2V0Q2xpcGJvYXJkRGF0YSh0eXBlLCBlLCBwbGFpblRleHQsIGNsZWFuRGF0YSwgZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHBsYWluVGV4dCA9IGRhdGEuZ2V0RGF0YSgndGV4dC9wbGFpbicpO1xyXG4gICAgICAgICAgICAgICAgY2xlYW5EYXRhID0gZGF0YS5nZXREYXRhKCd0ZXh0L2h0bWwnKTtcclxuICAgICAgICAgICAgICAgIGlmIChldmVudC5fc2V0Q2xpcGJvYXJkRGF0YSh0eXBlLCBlLCBwbGFpblRleHQsIGNsZWFuRGF0YSwgZGF0YSkgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX3NldENsaXBib2FyZERhdGE6IGZ1bmN0aW9uICh0eXBlLCBlLCBwbGFpblRleHQsIGNsZWFuRGF0YSwgZGF0YSkge1xyXG4gICAgICAgICAgICAvLyBNUyB3b3JkLCBPbmVOb2RlLCBFeGNlbFxyXG4gICAgICAgICAgICBjb25zdCBNU0RhdGEgPSAvY2xhc3M9W1wiJ10qTXNvKE5vcm1hbHxMaXN0KS9pLnRlc3QoY2xlYW5EYXRhKSB8fCAvY29udGVudD1bXCInXSpXb3JkLkRvY3VtZW50L2kudGVzdChjbGVhbkRhdGEpIHx8IC9jb250ZW50PVtcIiddKk9uZU5vdGUuRmlsZS9pLnRlc3QoY2xlYW5EYXRhKSB8fCAvY29udGVudD1bXCInXSpFeGNlbC5TaGVldC9pLnRlc3QoY2xlYW5EYXRhKTtcclxuICAgICAgICAgICAgY29uc3Qgb25seVRleHQgPSAhY2xlYW5EYXRhO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFvbmx5VGV4dCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKE1TRGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNsZWFuRGF0YSA9IGNsZWFuRGF0YS5yZXBsYWNlKC9cXG4vZywgJyAnKTtcclxuICAgICAgICAgICAgICAgICAgICBwbGFpblRleHQgPSBwbGFpblRleHQucmVwbGFjZSgvXFxuL2csICcgJyk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNsZWFuRGF0YSA9IChwbGFpblRleHQgPT09IGNsZWFuRGF0YSA/IHBsYWluVGV4dCA6IGNsZWFuRGF0YSkucmVwbGFjZSgvXFxuL2csICc8YnI+Jyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjbGVhbkRhdGEgPSBjb3JlLmNsZWFuSFRNTChjbGVhbkRhdGEsIGNvcmUucGFzdGVUYWdzV2hpdGVsaXN0UmVnRXhwKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNsZWFuRGF0YSA9IHV0aWwuX0hUTUxDb252ZXJ0b3IocGxhaW5UZXh0KS5yZXBsYWNlKC9cXG4vZywgJzxicj4nKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgbWF4Q2hhckNvdW50ID0gY29yZS5fY2hhckNvdW50KGNvcmUuX2NoYXJUeXBlSFRNTCA/IGNsZWFuRGF0YSA6IHBsYWluVGV4dCk7XHJcbiAgICAgICAgICAgIC8vIHVzZXIgZXZlbnQgLSBwYXN0ZVxyXG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gJ3Bhc3RlJyAmJiB0eXBlb2YgZnVuY3Rpb25zLm9uUGFzdGUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZnVuY3Rpb25zLm9uUGFzdGUoZSwgY2xlYW5EYXRhLCBtYXhDaGFyQ291bnQsIGNvcmUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIGNsZWFuRGF0YSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIHVzZXIgZXZlbnQgLSBkcm9wXHJcbiAgICAgICAgICAgIGlmICh0eXBlID09PSAnZHJvcCcgJiYgdHlwZW9mIGZ1bmN0aW9ucy5vbkRyb3AgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZnVuY3Rpb25zLm9uRHJvcChlLCBjbGVhbkRhdGEsIG1heENoYXJDb3VudCwgY29yZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgY2xlYW5EYXRhID0gdmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGZpbGVzXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gZGF0YS5maWxlcztcclxuICAgICAgICAgICAgaWYgKGZpbGVzLmxlbmd0aCA+IDAgJiYgIU1TRGF0YSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKC9eaW1hZ2UvLnRlc3QoZmlsZXNbMF0udHlwZSkgJiYgY29yZS5wbHVnaW5zLmltYWdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25zLmluc2VydEltYWdlKGZpbGVzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFtYXhDaGFyQ291bnQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNsZWFuRGF0YSkge1xyXG4gICAgICAgICAgICAgICAgZnVuY3Rpb25zLmluc2VydEhUTUwoY2xlYW5EYXRhLCB0cnVlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBvbk1vdXNlTW92ZV93eXNpd3lnOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICBpZiAoY29yZS5pc0Rpc2FibGVkIHx8IGNvcmUuaXNSZWFkT25seSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnQgPSB1dGlsLmdldFBhcmVudEVsZW1lbnQoZS50YXJnZXQsIHV0aWwuaXNDb21wb25lbnQpO1xyXG4gICAgICAgICAgICBjb25zdCBsaW5lQnJlYWtlclN0eWxlID0gY29yZS5fbGluZUJyZWFrZXIuc3R5bGU7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiAoY29tcG9uZW50ICYmICFjb3JlLmN1cnJlbnRDb250cm9sbGVyTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY3R4RWwgPSBjb250ZXh0LmVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICBsZXQgc2Nyb2xsVG9wID0gMDtcclxuICAgICAgICAgICAgICAgIGxldCBlbCA9IGN0eEVsLnd5c2l3eWc7XHJcbiAgICAgICAgICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsVG9wICs9IGVsLnNjcm9sbFRvcDtcclxuICAgICAgICAgICAgICAgICAgICBlbCA9IGVsLnBhcmVudEVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICB9IHdoaWxlIChlbCAmJiAhL14oQk9EWXxIVE1MKSQvaS50ZXN0KGVsLm5vZGVOYW1lKSk7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3Qgd1Njcm9sbCA9IGN0eEVsLnd5c2l3eWcuc2Nyb2xsVG9wO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2V0cyA9IGV2ZW50Ll9nZXRFZGl0b3JPZmZzZXRzKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY29tcG9uZW50VG9wID0gdXRpbC5nZXRPZmZzZXQoY29tcG9uZW50LCBjdHhFbC53eXNpd3lnRnJhbWUpLnRvcCArIHdTY3JvbGw7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB5ID0gZS5wYWdlWSArIHNjcm9sbFRvcCArIChvcHRpb25zLmlmcmFtZSAmJiAhb3B0aW9ucy50b29sYmFyQ29udGFpbmVyID8gY3R4RWwudG9vbGJhci5vZmZzZXRIZWlnaHQgOiAwKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGMgPSBjb21wb25lbnRUb3AgKyAob3B0aW9ucy5pZnJhbWUgPyBzY3JvbGxUb3AgOiBvZmZzZXRzLnRvcCk7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgaXNMaXN0ID0gdXRpbC5pc0xpc3RDZWxsKGNvbXBvbmVudC5wYXJlbnROb2RlKTtcclxuICAgICAgICAgICAgICAgIGxldCBkaXIgPSAnJywgdG9wID0gJyc7XHJcbiAgICAgICAgICAgICAgICBpZiAoKGlzTGlzdCA/ICFjb21wb25lbnQucHJldmlvdXNTaWJsaW5nIDogIXV0aWwuaXNGb3JtYXRFbGVtZW50KGNvbXBvbmVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKSkgJiYgeSA8IChjICsgMjApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdG9wID0gY29tcG9uZW50VG9wO1xyXG4gICAgICAgICAgICAgICAgICAgIGRpciA9ICd0JztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKGlzTGlzdCA/ICFjb21wb25lbnQubmV4dFNpYmxpbmcgOiAhdXRpbC5pc0Zvcm1hdEVsZW1lbnQoY29tcG9uZW50Lm5leHRFbGVtZW50U2libGluZykpICYmIHkgPiAoYyArIGNvbXBvbmVudC5vZmZzZXRIZWlnaHQgLSAyMCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0b3AgPSBjb21wb25lbnRUb3AgKyBjb21wb25lbnQub2Zmc2V0SGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgICAgIGRpciA9ICdiJztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGluZUJyZWFrZXJTdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb3JlLl92YXJpYWJsZS5fbGluZUJyZWFrQ29tcCA9IGNvbXBvbmVudDtcclxuICAgICAgICAgICAgICAgIGNvcmUuX3ZhcmlhYmxlLl9saW5lQnJlYWtEaXIgPSBkaXI7XHJcbiAgICAgICAgICAgICAgICBsaW5lQnJlYWtlclN0eWxlLnRvcCA9ICh0b3AgLSB3U2Nyb2xsKSArICdweCc7XHJcbiAgICAgICAgICAgICAgICBjb3JlLl9saW5lQnJlYWtlckJ1dHRvbi5zdHlsZS5sZWZ0ID0gKHV0aWwuZ2V0T2Zmc2V0KGNvbXBvbmVudCkubGVmdCArIChjb21wb25lbnQub2Zmc2V0V2lkdGggLyAyKSAtIDE1KSArICdweCc7XHJcbiAgICAgICAgICAgICAgICBsaW5lQnJlYWtlclN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICB9IC8vIG9mZiBsaW5lIGJyZWFrZXJcclxuICAgICAgICAgICAgZWxzZSBpZiAobGluZUJyZWFrZXJTdHlsZS5kaXNwbGF5ICE9PSAnbm9uZScpIHtcclxuICAgICAgICAgICAgICAgIGxpbmVCcmVha2VyU3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9vbk1vdXNlRG93bl9saW5lQnJlYWs6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBfb25MaW5lQnJlYWs6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNvcmUuX3ZhcmlhYmxlLl9saW5lQnJlYWtDb21wO1xyXG4gICAgICAgICAgICBjb25zdCBkaXIgPSAhdGhpcyA/IGNvcmUuX3ZhcmlhYmxlLl9saW5lQnJlYWtEaXIgOiB0aGlzO1xyXG4gICAgICAgICAgICBjb25zdCBpc0xpc3QgPSB1dGlsLmlzTGlzdENlbGwoY29tcG9uZW50LnBhcmVudE5vZGUpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZm9ybWF0ID0gdXRpbC5jcmVhdGVFbGVtZW50KGlzTGlzdCA/ICdCUicgOiB1dGlsLmlzQ2VsbChjb21wb25lbnQucGFyZW50Tm9kZSkgPyAnRElWJyA6IG9wdGlvbnMuZGVmYXVsdFRhZyk7XHJcbiAgICAgICAgICAgIGlmICghaXNMaXN0KSBmb3JtYXQuaW5uZXJIVE1MID0gJzxicj4nO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNvcmUuX2NoYXJUeXBlSFRNTCAmJiAhY29yZS5jaGVja0NoYXJDb3VudChmb3JtYXQub3V0ZXJIVE1MLCAnYnl0ZS1odG1sJykpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGNvbXBvbmVudC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShmb3JtYXQsIGRpciA9PT0gJ3QnID8gY29tcG9uZW50IDogY29tcG9uZW50Lm5leHRTaWJsaW5nKTtcclxuICAgICAgICAgICAgY29yZS5fbGluZUJyZWFrZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgY29yZS5fdmFyaWFibGUuX2xpbmVCcmVha0NvbXAgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZm9jdXNFbCA9IGlzTGlzdCA/IGZvcm1hdCA6IGZvcm1hdC5maXJzdENoaWxkO1xyXG4gICAgICAgICAgICBjb3JlLnNldFJhbmdlKGZvY3VzRWwsIDEsIGZvY3VzRWwsIDEpO1xyXG4gICAgICAgICAgICAvLyBoaXN0b3J5IHN0YWNrXHJcbiAgICAgICAgICAgIGNvcmUuaGlzdG9yeS5wdXNoKGZhbHNlKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBfYWRkRXZlbnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgY29uc3QgZXZlbnRXeXNpd3lnID0gb3B0aW9ucy5pZnJhbWUgPyBjb3JlLl93dyA6IGNvbnRleHQuZWxlbWVudC53eXNpd3lnO1xyXG5cclxuICAgICAgICAgICAgLyoqIHRvb2xiYXIgZXZlbnQgKi9cclxuICAgICAgICAgICAgY29udGV4dC5lbGVtZW50LnRvb2xiYXIuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgZXZlbnQuX2J1dHRvbnNFdmVudEhhbmRsZXIsIGZhbHNlKTtcclxuICAgICAgICAgICAgY29udGV4dC5lbGVtZW50Ll9tZW51VHJheS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBldmVudC5fYnV0dG9uc0V2ZW50SGFuZGxlciwgZmFsc2UpO1xyXG4gICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQudG9vbGJhci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGV2ZW50Lm9uQ2xpY2tfdG9vbGJhciwgZmFsc2UpO1xyXG4gICAgICAgICAgICAvKiogZWRpdG9yIGFyZWEgKi9cclxuICAgICAgICAgICAgZXZlbnRXeXNpd3lnLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGV2ZW50Lm9uTW91c2VEb3duX3d5c2l3eWcsIGZhbHNlKTtcclxuICAgICAgICAgICAgZXZlbnRXeXNpd3lnLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZXZlbnQub25DbGlja193eXNpd3lnLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIGV2ZW50V3lzaXd5Zy5hZGRFdmVudExpc3RlbmVyKHV0aWwuaXNJRSA/ICd0ZXh0aW5wdXQnIDogJ2lucHV0JywgZXZlbnQub25JbnB1dF93eXNpd3lnLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIGV2ZW50V3lzaXd5Zy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZXZlbnQub25LZXlEb3duX3d5c2l3eWcsIGZhbHNlKTtcclxuICAgICAgICAgICAgZXZlbnRXeXNpd3lnLmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgZXZlbnQub25LZXlVcF93eXNpd3lnLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIGV2ZW50V3lzaXd5Zy5hZGRFdmVudExpc3RlbmVyKCdwYXN0ZScsIGV2ZW50Lm9uUGFzdGVfd3lzaXd5ZywgZmFsc2UpO1xyXG4gICAgICAgICAgICBldmVudFd5c2l3eWcuYWRkRXZlbnRMaXN0ZW5lcignY29weScsIGV2ZW50Lm9uQ29weV93eXNpd3lnLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIGV2ZW50V3lzaXd5Zy5hZGRFdmVudExpc3RlbmVyKCdjdXQnLCBldmVudC5vbkN1dF93eXNpd3lnLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIGV2ZW50V3lzaXd5Zy5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgZXZlbnQub25Ecm9wX3d5c2l3eWcsIGZhbHNlKTtcclxuICAgICAgICAgICAgZXZlbnRXeXNpd3lnLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGV2ZW50Lm9uU2Nyb2xsX3d5c2l3eWcsIGZhbHNlKTtcclxuICAgICAgICAgICAgZXZlbnRXeXNpd3lnLmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgZXZlbnQub25Gb2N1c193eXNpd3lnLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIGV2ZW50V3lzaXd5Zy5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgZXZlbnQub25CbHVyX3d5c2l3eWcsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgICAgIC8qKiBsaW5lIGJyZWFrZXIgKi9cclxuICAgICAgICAgICAgZXZlbnQuX2xpbmVCcmVha2VyQmluZCA9IHsgYTogZXZlbnQuX29uTGluZUJyZWFrLmJpbmQoJycpLCB0OiBldmVudC5fb25MaW5lQnJlYWsuYmluZCgndCcpLCBiOiBldmVudC5fb25MaW5lQnJlYWsuYmluZCgnYicpIH07XHJcbiAgICAgICAgICAgIGV2ZW50V3lzaXd5Zy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBldmVudC5vbk1vdXNlTW92ZV93eXNpd3lnLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIGNvcmUuX2xpbmVCcmVha2VyQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGV2ZW50Ll9vbk1vdXNlRG93bl9saW5lQnJlYWssIGZhbHNlKTtcclxuICAgICAgICAgICAgY29yZS5fbGluZUJyZWFrZXJCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBldmVudC5fbGluZUJyZWFrZXJCaW5kLmEsIGZhbHNlKTtcclxuICAgICAgICAgICAgY29udGV4dC5lbGVtZW50LmxpbmVCcmVha2VyX3QuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgZXZlbnQuX2xpbmVCcmVha2VyQmluZC50LCBmYWxzZSk7XHJcbiAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC5saW5lQnJlYWtlcl9iLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGV2ZW50Ll9saW5lQnJlYWtlckJpbmQuYiwgZmFsc2UpO1xyXG5cclxuICAgICAgICAgICAgLyoqIEV2ZW50cyBhcmUgcmVnaXN0ZXJlZCBvbmx5IHdoZW4gdGhlcmUgaXMgYSB0YWJsZSBwbHVnaW4uICAqL1xyXG4gICAgICAgICAgICBpZiAoY29yZS5wbHVnaW5zLnRhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICBldmVudFd5c2l3eWcuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIGV2ZW50Lm9uTW91c2VEb3duX3d5c2l3eWcsIHtwYXNzaXZlOiB0cnVlLCB1c2VDYXB0dXJlOiBmYWxzZX0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvKiogY29kZSB2aWV3IGFyZWEgYXV0byBsaW5lICovXHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmhlaWdodCA9PT0gJ2F1dG8nICYmICFvcHRpb25zLmNvZGVNaXJyb3JFZGl0b3IpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC5jb2RlLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBldmVudC5fY29kZVZpZXdBdXRvSGVpZ2h0LCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQuY29kZS5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIGV2ZW50Ll9jb2RlVmlld0F1dG9IZWlnaHQsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC5jb2RlLmFkZEV2ZW50TGlzdGVuZXIoJ3Bhc3RlJywgZXZlbnQuX2NvZGVWaWV3QXV0b0hlaWdodCwgZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvKiogcmVzaXppbmdCYXIgKi9cclxuICAgICAgICAgICAgaWYgKGNvbnRleHQuZWxlbWVudC5yZXNpemluZ0Jhcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKC9cXGQrLy50ZXN0KG9wdGlvbnMuaGVpZ2h0KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC5yZXNpemluZ0Jhci5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBldmVudC5vbk1vdXNlRG93bl9yZXNpemluZ0JhciwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB1dGlsLmFkZENsYXNzKGNvbnRleHQuZWxlbWVudC5yZXNpemluZ0JhciwgJ3NlLXJlc2l6aW5nLW5vbmUnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLyoqIHdpbmRvdyBldmVudCAqL1xyXG4gICAgICAgICAgICBldmVudC5fc2V0UmVzcG9uc2l2ZVRvb2xiYXIoKTtcclxuICAgICAgICAgICAgX3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgZXZlbnQub25SZXNpemVfd2luZG93KTtcclxuICAgICAgICAgICAgX3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgZXZlbnQub25TY3JvbGxfd2luZG93KTtcclxuXHJcbiAgICAgICAgICAgIF93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGV2ZW50Lm9uUmVzaXplX3dpbmRvdywgZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5zdGlja3lUb29sYmFyID4gLTEpIHtcclxuICAgICAgICAgICAgICAgIF93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGV2ZW50Lm9uU2Nyb2xsX3dpbmRvdywgZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX3JlbW92ZUV2ZW50OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50V3lzaXd5ZyA9IG9wdGlvbnMuaWZyYW1lID8gY29yZS5fd3cgOiBjb250ZXh0LmVsZW1lbnQud3lzaXd5ZztcclxuXHJcbiAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC50b29sYmFyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGV2ZW50Ll9idXR0b25zRXZlbnRIYW5kbGVyKTtcclxuICAgICAgICAgICAgY29udGV4dC5lbGVtZW50Ll9tZW51VHJheS5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBldmVudC5fYnV0dG9uc0V2ZW50SGFuZGxlcik7XHJcbiAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC50b29sYmFyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZXZlbnQub25DbGlja190b29sYmFyKTtcclxuXHJcbiAgICAgICAgICAgIGV2ZW50V3lzaXd5Zy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBldmVudC5vbk1vdXNlRG93bl93eXNpd3lnKTtcclxuICAgICAgICAgICAgZXZlbnRXeXNpd3lnLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZXZlbnQub25DbGlja193eXNpd3lnKTtcclxuICAgICAgICAgICAgZXZlbnRXeXNpd3lnLnJlbW92ZUV2ZW50TGlzdGVuZXIodXRpbC5pc0lFID8gJ3RleHRpbnB1dCcgOiAnaW5wdXQnLCBldmVudC5vbklucHV0X3d5c2l3eWcpO1xyXG4gICAgICAgICAgICBldmVudFd5c2l3eWcucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGV2ZW50Lm9uS2V5RG93bl93eXNpd3lnKTtcclxuICAgICAgICAgICAgZXZlbnRXeXNpd3lnLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywgZXZlbnQub25LZXlVcF93eXNpd3lnKTtcclxuICAgICAgICAgICAgZXZlbnRXeXNpd3lnLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Bhc3RlJywgZXZlbnQub25QYXN0ZV93eXNpd3lnKTtcclxuICAgICAgICAgICAgZXZlbnRXeXNpd3lnLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NvcHknLCBldmVudC5vbkNvcHlfd3lzaXd5Zyk7XHJcbiAgICAgICAgICAgIGV2ZW50V3lzaXd5Zy5yZW1vdmVFdmVudExpc3RlbmVyKCdjdXQnLCBldmVudC5vbkN1dF93eXNpd3lnKTtcclxuICAgICAgICAgICAgZXZlbnRXeXNpd3lnLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCBldmVudC5vbkRyb3Bfd3lzaXd5Zyk7XHJcbiAgICAgICAgICAgIGV2ZW50V3lzaXd5Zy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBldmVudC5vblNjcm9sbF93eXNpd3lnKTtcclxuXHJcbiAgICAgICAgICAgIGV2ZW50V3lzaXd5Zy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBldmVudC5vbk1vdXNlTW92ZV93eXNpd3lnKTtcclxuICAgICAgICAgICAgY29yZS5fbGluZUJyZWFrZXJCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgZXZlbnQuX29uTW91c2VEb3duX2xpbmVCcmVhayk7XHJcbiAgICAgICAgICAgIGNvcmUuX2xpbmVCcmVha2VyQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZXZlbnQuX2xpbmVCcmVha2VyQmluZC5hKTtcclxuICAgICAgICAgICAgY29udGV4dC5lbGVtZW50LmxpbmVCcmVha2VyX3QucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgZXZlbnQuX2xpbmVCcmVha2VyQmluZC50KTtcclxuICAgICAgICAgICAgY29udGV4dC5lbGVtZW50LmxpbmVCcmVha2VyX2IucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgZXZlbnQuX2xpbmVCcmVha2VyQmluZC5iKTtcclxuICAgICAgICAgICAgZXZlbnQuX2xpbmVCcmVha2VyQmluZCA9IG51bGw7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBldmVudFd5c2l3eWcucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIGV2ZW50Lm9uTW91c2VEb3duX3d5c2l3eWcsIHtwYXNzaXZlOiB0cnVlLCB1c2VDYXB0dXJlOiBmYWxzZX0pO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgZXZlbnRXeXNpd3lnLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgZXZlbnQub25Gb2N1c193eXNpd3lnKTtcclxuICAgICAgICAgICAgZXZlbnRXeXNpd3lnLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2JsdXInLCBldmVudC5vbkJsdXJfd3lzaXd5Zyk7XHJcblxyXG4gICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQuY29kZS5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZXZlbnQuX2NvZGVWaWV3QXV0b0hlaWdodCk7XHJcbiAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC5jb2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywgZXZlbnQuX2NvZGVWaWV3QXV0b0hlaWdodCk7XHJcbiAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC5jb2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Bhc3RlJywgZXZlbnQuX2NvZGVWaWV3QXV0b0hlaWdodCk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiAoY29udGV4dC5lbGVtZW50LnJlc2l6aW5nQmFyKSB7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQucmVzaXppbmdCYXIucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgZXZlbnQub25Nb3VzZURvd25fcmVzaXppbmdCYXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBfdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBldmVudC5vblJlc2l6ZV93aW5kb3cpO1xyXG4gICAgICAgICAgICBfdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBldmVudC5vblNjcm9sbF93aW5kb3cpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9zZXRSZXNwb25zaXZlVG9vbGJhcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAoX3Jlc3BvbnNpdmVCdXR0b25zLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgX3Jlc3BvbnNpdmVCdXR0b25zID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZXZlbnQuX3Jlc3BvbnNpdmVDdXJyZW50U2l6ZSA9ICdkZWZhdWx0JztcclxuICAgICAgICAgICAgY29uc3Qgc2l6ZUFycmF5ID0gZXZlbnQuX3Jlc3BvbnNpdmVCdXR0b25TaXplID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IGJ1dHRvbnNPYmogPSBldmVudC5fcmVzcG9uc2l2ZUJ1dHRvbnMgPSB7ZGVmYXVsdDogX3Jlc3BvbnNpdmVCdXR0b25zWzBdfTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDEsIGxlbiA9IF9yZXNwb25zaXZlQnV0dG9ucy5sZW5ndGgsIHNpemUsIGJ1dHRvbkdyb3VwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGJ1dHRvbkdyb3VwID0gX3Jlc3BvbnNpdmVCdXR0b25zW2ldO1xyXG4gICAgICAgICAgICAgICAgc2l6ZSA9IGJ1dHRvbkdyb3VwWzBdICogMTtcclxuICAgICAgICAgICAgICAgIHNpemVBcnJheS5wdXNoKHNpemUpO1xyXG4gICAgICAgICAgICAgICAgYnV0dG9uc09ialtzaXplXSA9IGJ1dHRvbkdyb3VwWzFdO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBzaXplQXJyYXkuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYSAtIGI7IH0pLnVuc2hpZnQoJ2RlZmF1bHQnKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKiBmdW5jdGlvbnMgKi9cclxuICAgIGNvbnN0IGZ1bmN0aW9ucyA9IHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQ29yZSwgVXRpbCBvYmplY3RcclxuICAgICAgICAgKi9cclxuICAgICAgICBjb3JlOiBjb3JlLFxyXG4gICAgICAgIHV0aWw6IHV0aWwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBFdmVudCBmdW5jdGlvbnNcclxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gZSBFdmVudCBPYmplY3RcclxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY29yZSBDb3JlIG9iamVjdFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG9ubG9hZDogbnVsbCxcclxuICAgICAgICBvblNjcm9sbDogbnVsbCxcclxuICAgICAgICBvbk1vdXNlRG93bjogbnVsbCxcclxuICAgICAgICBvbkNsaWNrOiBudWxsLFxyXG4gICAgICAgIG9uSW5wdXQ6IG51bGwsXHJcbiAgICAgICAgb25LZXlEb3duOiBudWxsLFxyXG4gICAgICAgIG9uS2V5VXA6IG51bGwsXHJcbiAgICAgICAgb25Db3B5OiBudWxsLFxyXG4gICAgICAgIG9uQ3V0OiBudWxsLFxyXG4gICAgICAgIG9uRm9jdXM6IG51bGwsXHJcbiAgICAgICAgb25CbHVyOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gRXZlbnQgZnVuY3Rpb25zXHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGNvbnRlbnRzIEN1cnJlbnQgY29udGVudHNcclxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY29yZSBDb3JlIG9iamVjdFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG9uQ2hhbmdlOiBudWxsLFxyXG5cclxuICAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEV2ZW50IGZ1bmN0aW9uc1xyXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBjb250ZW50cyBDdXJyZW50IGNvbnRlbnRzXHJcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNvcmUgQ29yZSBvYmplY3RcclxuICAgICAgICAgKi9cclxuICAgICAgICAgIG9uU2F2ZTogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEV2ZW50IGZ1bmN0aW9ucyAoZHJvcCwgcGFzdGUpXHJcbiAgICAgICAgICogV2hlbiBmYWxzZSBpcyByZXR1cm5lZCwgdGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgc3RvcHBlZC5cclxuICAgICAgICAgKiBJZiB0aGUgc3RyaW5nIGlzIHJldHVybmVkLCB0aGUgY2xlYW5EYXRhIHZhbHVlIGlzIG1vZGlmaWVkIHRvIHRoZSByZXR1cm4gdmFsdWUuXHJcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGUgRXZlbnQgb2JqZWN0LlxyXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBjbGVhbkRhdGEgSFRNTCBzdHJpbmcgbW9kaWZpZWQgZm9yIGVkaXRvciBmb3JtYXQuXHJcbiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSBtYXhDaGFydENvdW50IG9wdGlvbiAodHJ1ZSBpZiBtYXggY2hhcmFjdGVyIGlzIGV4Y2VlZGVkKVxyXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjb3JlIENvcmUgb2JqZWN0XHJcbiAgICAgICAgICogQHJldHVybnMge0Jvb2xlYW58U3RyaW5nfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG9uRHJvcDogbnVsbCxcclxuICAgICAgICBvblBhc3RlOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQ2FsbGVkIGp1c3QgYmVmb3JlIHRoZSBpbmxpbmUgdG9vbGJhciBpcyBwb3NpdGlvbmVkIGFuZCBkaXNwbGF5ZWQgb24gdGhlIHNjcmVlbi5cclxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IHRvb2xiYXIgVG9vbGJhciBFbGVtZW50XHJcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHQgVGhlIGVkaXRvcidzIGNvbnRleHQgb2JqZWN0IChlZGl0b3IuZ2V0Q29udGV4dCgpKVxyXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjb3JlIENvcmUgb2JqZWN0XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgc2hvd0lubGluZTogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIENhbGxlZCBqdXN0IGFmdGVyIHRoZSBjb250cm9sbGVyIGlzIHBvc2l0aW9uZWQgYW5kIGRpc3BsYXllZCBvbiB0aGUgc2NyZWVuLlxyXG4gICAgICAgICAqIGNvbnRyb2xsZXIgLSBlZGl0aW5nIGVsZW1lbnRzIGRpc3BsYXllZCBvbiB0aGUgc2NyZWVuIFtpbWFnZSByZXNpemluZywgdGFibGUgZWRpdG9yLCBsaW5rIGVkaXRvci4uXV1cclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcGx1Z2luIHRoYXQgY2FsbGVkIHRoZSBjb250cm9sbGVyXHJcbiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gY29udHJvbGxlcnMgQXJyYXkgb2YgQ29udHJvbGxlciBlbGVtZW50c1xyXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjb3JlIENvcmUgb2JqZWN0XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgc2hvd0NvbnRyb2xsZXI6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBBbiBldmVudCB3aGVuIHRvZ2dsaW5nIGJldHdlZW4gY29kZSB2aWV3IGFuZCB3eXNpd3lnIHZpZXcuXHJcbiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSBpc0NvZGVWaWV3IFdoZXRoZXIgdGhlIGN1cnJlbnQgY29kZSB2aWV3IG1vZGVcclxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY29yZSBDb3JlIG9iamVjdFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRvZ2dsZUNvZGVWaWV3OiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQW4gZXZlbnQgd2hlbiB0b2dnbGluZyBmdWxsIHNjcmVlbi5cclxuICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGlzRnVsbFNjcmVlbiBXaGV0aGVyIHRoZSBjdXJyZW50IGZ1bGwgc2NyZWVuIG1vZGVcclxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY29yZSBDb3JlIG9iamVjdFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRvZ2dsZUZ1bGxTY3JlZW46IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBJdCByZXBsYWNlcyB0aGUgZGVmYXVsdCBjYWxsYmFjayBmdW5jdGlvbiBvZiB0aGUgaW1hZ2UgdXBsb2FkXHJcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHJlc3BvbnNlIFJlc3BvbnNlIG9iamVjdFxyXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBpbmZvIElucHV0IGluZm9ybWF0aW9uXHJcbiAgICAgICAgICogLSBsaW5rVmFsdWU6IExpbmsgdXJsIHZhbHVlXHJcbiAgICAgICAgICogLSBsaW5rTmV3V2luZG93OiBPcGVuIGluIG5ldyB3aW5kb3cgQ2hlY2sgVmFsdWVcclxuICAgICAgICAgKiAtIGlucHV0V2lkdGg6IFZhbHVlIG9mIHdpZHRoIGlucHV0XHJcbiAgICAgICAgICogLSBpbnB1dEhlaWdodDogVmFsdWUgb2YgaGVpZ2h0IGlucHV0XHJcbiAgICAgICAgICogLSBhbGlnbjogQWxpZ24gQ2hlY2sgVmFsdWVcclxuICAgICAgICAgKiAtIGlzVXBkYXRlOiBVcGRhdGUgaW1hZ2UgaWYgdHJ1ZSwgY3JlYXRlIGltYWdlIGlmIGZhbHNlXHJcbiAgICAgICAgICogLSBlbGVtZW50OiBJZiBpc1VwZGF0ZSBpcyB0cnVlLCB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGltYWdlLlxyXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjb3JlIENvcmUgb2JqZWN0XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaW1hZ2VVcGxvYWRIYW5kbGVyOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gSXQgcmVwbGFjZXMgdGhlIGRlZmF1bHQgY2FsbGJhY2sgZnVuY3Rpb24gb2YgdGhlIHZpZGVvIHVwbG9hZFxyXG4gICAgICAgICAqIEBwYXJhbSB4bWxIdHRwIHhtbEh0dHBSZXF1ZXN0IG9iamVjdFxyXG4gICAgICAgICAqIEBwYXJhbSBpbmZvIElucHV0IGluZm9ybWF0aW9uXHJcbiAgICAgICAgICogLSBpbnB1dFdpZHRoOiBWYWx1ZSBvZiB3aWR0aCBpbnB1dFxyXG4gICAgICAgICAqIC0gaW5wdXRIZWlnaHQ6IFZhbHVlIG9mIGhlaWdodCBpbnB1dFxyXG4gICAgICAgICAqIC0gYWxpZ246IEFsaWduIENoZWNrIFZhbHVlXHJcbiAgICAgICAgICogLSBpc1VwZGF0ZTogVXBkYXRlIHZpZGVvIGlmIHRydWUsIGNyZWF0ZSB2aWRlbyBpZiBmYWxzZVxyXG4gICAgICAgICAqIC0gZWxlbWVudDogSWYgaXNVcGRhdGUgaXMgdHJ1ZSwgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCB2aWRlby5cclxuICAgICAgICAgKiBAcGFyYW0gY29yZSBDb3JlIG9iamVjdFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHZpZGVvVXBsb2FkSGFuZGxlcjogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEl0IHJlcGxhY2VzIHRoZSBkZWZhdWx0IGNhbGxiYWNrIGZ1bmN0aW9uIG9mIHRoZSBhdWRpbyB1cGxvYWRcclxuICAgICAgICAgKiBAcGFyYW0geG1sSHR0cCB4bWxIdHRwUmVxdWVzdCBvYmplY3RcclxuICAgICAgICAgKiBAcGFyYW0gaW5mbyBJbnB1dCBpbmZvcm1hdGlvblxyXG4gICAgICAgICAqIC0gaXNVcGRhdGU6IFVwZGF0ZSBhdWRpbyBpZiB0cnVlLCBjcmVhdGUgYXVkaW8gaWYgZmFsc2VcclxuICAgICAgICAgKiAtIGVsZW1lbnQ6IElmIGlzVXBkYXRlIGlzIHRydWUsIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgYXVkaW8uXHJcbiAgICAgICAgICogQHBhcmFtIGNvcmUgQ29yZSBvYmplY3RcclxuICAgICAgICAgKi9cclxuICAgICAgICBhdWRpb1VwbG9hZEhhbmRsZXI6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBDYWxsZWQgYmVmb3JlIHRoZSBpbWFnZSBpcyB1cGxvYWRlZFxyXG4gICAgICAgICAqIElmIHRydWUgaXMgcmV0dXJuZWQsIHRoZSBpbnRlcm5hbCB1cGxvYWQgcHJvY2VzcyBydW5zIG5vcm1hbGx5LlxyXG4gICAgICAgICAqIElmIGZhbHNlIGlzIHJldHVybmVkLCBubyBpbWFnZSB1cGxvYWQgaXMgcGVyZm9ybWVkLlxyXG4gICAgICAgICAqIElmIG5ldyBmaWxlTGlzdCBhcmUgcmV0dXJuZWQsICByZXBsYWNlZCB0aGUgcHJldmlvdXMgZmlsZUxpc3RcclxuICAgICAgICAgKiBJZiB1bmRlZmluZWQgaXMgcmV0dXJuZWQsIGl0IHdhaXRzIHVudGlsIFwidXBsb2FkSGFuZGxlclwiIGlzIGV4ZWN1dGVkLlxyXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGZpbGVzIEZpbGVzIGFycmF5XHJcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGluZm8gaW5mbzoge1xyXG4gICAgICAgICAqIC0gbGlua1ZhbHVlOiBMaW5rIHVybCB2YWx1ZVxyXG4gICAgICAgICAqIC0gbGlua05ld1dpbmRvdzogT3BlbiBpbiBuZXcgd2luZG93IENoZWNrIFZhbHVlXHJcbiAgICAgICAgICogLSBpbnB1dFdpZHRoOiBWYWx1ZSBvZiB3aWR0aCBpbnB1dFxyXG4gICAgICAgICAqIC0gaW5wdXRIZWlnaHQ6IFZhbHVlIG9mIGhlaWdodCBpbnB1dFxyXG4gICAgICAgICAqIC0gYWxpZ246IEFsaWduIENoZWNrIFZhbHVlXHJcbiAgICAgICAgICogLSBpc1VwZGF0ZTogVXBkYXRlIGltYWdlIGlmIHRydWUsIGNyZWF0ZSBpbWFnZSBpZiBmYWxzZVxyXG4gICAgICAgICAqIC0gZWxlbWVudDogSWYgaXNVcGRhdGUgaXMgdHJ1ZSwgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBpbWFnZS5cclxuICAgICAgICAgKiB9XHJcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNvcmUgQ29yZSBvYmplY3RcclxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSB1cGxvYWRIYW5kbGVyIElmIHVuZGVmaW5lZCBpcyByZXR1cm5lZCwgaXQgd2FpdHMgdW50aWwgXCJ1cGxvYWRIYW5kbGVyXCIgaXMgZXhlY3V0ZWQuXHJcbiAgICAgICAgICogICAgICAgICAgICAgICAgXCJ1cGxvYWRIYW5kbGVyXCIgaXMgYW4gdXBsb2FkIGZ1bmN0aW9uIHdpdGggXCJjb3JlXCIgYW5kIFwiaW5mb1wiIGJvdW5kLlxyXG4gICAgICAgICAqICAgICAgICAgICAgICAgIFt1cGxvYWQgZmlsZXNdIDogdXBsb2FkSGFuZGxlcihmaWxlcyBvciBbbmV3IEZpbGUoLi4uKSxdKVxyXG4gICAgICAgICAqICAgICAgICAgICAgICAgIFtlcnJvcl0gICAgICAgIDogdXBsb2FkSGFuZGxlcihcIkVycm9yIG1lc3NhZ2VcIilcclxuICAgICAgICAgKiAgICAgICAgICAgICAgICBbSnVzdCBmaW5pc2hdICA6IHVwbG9hZEhhbmRsZXIoKVxyXG4gICAgICAgICAqICAgICAgICAgICAgICAgIFtkaXJlY3RseSByZWdpc3Rlcl0gOiB1cGxvYWRIYW5kbGVyKHJlc3BvbnNlKSAvLyBTYW1lIGZvcm1hdCBhcyBcImltYWdlVXBsb2FkVXJsXCIgcmVzcG9uc2VcclxuICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXgpIHtcclxuICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gXCJlcnJvck1lc3NhZ2VcIjogXCJpbnNlcnQgZXJyb3IgbWVzc2FnZVwiLFxyXG4gICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInJlc3VsdFwiOiBbIHsgXCJ1cmxcIjogXCIuLi5cIiwgXCJuYW1lXCI6IFwiLi4uXCIsIFwic2l6ZVwiOiBcIjk5OVwiIH0sIF1cclxuICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAqIEByZXR1cm5zIHtCb29sZWFufEFycmF5fHVuZGVmaW5lZH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBvbkltYWdlVXBsb2FkQmVmb3JlOiBudWxsLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBDYWxsZWQgYmVmb3JlIHRoZSB2aWRlbyBpcyB1cGxvYWRlZFxyXG4gICAgICAgICAqIElmIHRydWUgaXMgcmV0dXJuZWQsIHRoZSBpbnRlcm5hbCB1cGxvYWQgcHJvY2VzcyBydW5zIG5vcm1hbGx5LlxyXG4gICAgICAgICAqIElmIGZhbHNlIGlzIHJldHVybmVkLCBubyB2aWRlbyhpZnJhbWUsIHZpZGVvKSB1cGxvYWQgaXMgcGVyZm9ybWVkLlxyXG4gICAgICAgICAqIElmIG5ldyBmaWxlTGlzdCBhcmUgcmV0dXJuZWQsICByZXBsYWNlZCB0aGUgcHJldmlvdXMgZmlsZUxpc3RcclxuICAgICAgICAgKiBJZiB1bmRlZmluZWQgaXMgcmV0dXJuZWQsIGl0IHdhaXRzIHVudGlsIFwidXBsb2FkSGFuZGxlclwiIGlzIGV4ZWN1dGVkLlxyXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGZpbGVzIEZpbGVzIGFycmF5XHJcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGluZm8gaW5mbzoge1xyXG4gICAgICAgICAqIC0gaW5wdXRXaWR0aDogVmFsdWUgb2Ygd2lkdGggaW5wdXRcclxuICAgICAgICAgKiAtIGlucHV0SGVpZ2h0OiBWYWx1ZSBvZiBoZWlnaHQgaW5wdXRcclxuICAgICAgICAgKiAtIGFsaWduOiBBbGlnbiBDaGVjayBWYWx1ZVxyXG4gICAgICAgICAqIC0gaXNVcGRhdGU6IFVwZGF0ZSB2aWRlbyBpZiB0cnVlLCBjcmVhdGUgdmlkZW8gaWYgZmFsc2VcclxuICAgICAgICAgKiAtIGVsZW1lbnQ6IElmIGlzVXBkYXRlIGlzIHRydWUsIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgdmlkZW8uXHJcbiAgICAgICAgICogfVxyXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjb3JlIENvcmUgb2JqZWN0XHJcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gdXBsb2FkSGFuZGxlciBJZiB1bmRlZmluZWQgaXMgcmV0dXJuZWQsIGl0IHdhaXRzIHVudGlsIFwidXBsb2FkSGFuZGxlclwiIGlzIGV4ZWN1dGVkLlxyXG4gICAgICAgICAqICAgICAgICAgICAgICAgIFwidXBsb2FkSGFuZGxlclwiIGlzIGFuIHVwbG9hZCBmdW5jdGlvbiB3aXRoIFwiY29yZVwiIGFuZCBcImluZm9cIiBib3VuZC5cclxuICAgICAgICAgKiAgICAgICAgICAgICAgICBbdXBsb2FkIGZpbGVzXSA6IHVwbG9hZEhhbmRsZXIoZmlsZXMgb3IgW25ldyBGaWxlKC4uLiksXSlcclxuICAgICAgICAgKiAgICAgICAgICAgICAgICBbZXJyb3JdICAgICAgICA6IHVwbG9hZEhhbmRsZXIoXCJFcnJvciBtZXNzYWdlXCIpXHJcbiAgICAgICAgICogICAgICAgICAgICAgICAgW0p1c3QgZmluaXNoXSAgOiB1cGxvYWRIYW5kbGVyKClcclxuICAgICAgICAgKiAgICAgICAgICAgICAgICBbZGlyZWN0bHkgcmVnaXN0ZXJdIDogdXBsb2FkSGFuZGxlcihyZXNwb25zZSkgLy8gU2FtZSBmb3JtYXQgYXMgXCJ2aWRlb1VwbG9hZFVybFwiIHJlc3BvbnNlXHJcbiAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4KSB7XHJcbiAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFwiZXJyb3JNZXNzYWdlXCI6IFwiaW5zZXJ0IGVycm9yIG1lc3NhZ2VcIixcclxuICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyZXN1bHRcIjogWyB7IFwidXJsXCI6IFwiLi4uXCIsIFwibmFtZVwiOiBcIi4uLlwiLCBcInNpemVcIjogXCI5OTlcIiB9LCBdXHJcbiAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbnxBcnJheXx1bmRlZmluZWR9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgb25WaWRlb1VwbG9hZEJlZm9yZTogbnVsbCxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQ2FsbGVkIGJlZm9yZSB0aGUgYXVkaW8gaXMgdXBsb2FkZWRcclxuICAgICAgICAgKiBJZiB0cnVlIGlzIHJldHVybmVkLCB0aGUgaW50ZXJuYWwgdXBsb2FkIHByb2Nlc3MgcnVucyBub3JtYWxseS5cclxuICAgICAgICAgKiBJZiBmYWxzZSBpcyByZXR1cm5lZCwgbm8gYXVkaW8gdXBsb2FkIGlzIHBlcmZvcm1lZC5cclxuICAgICAgICAgKiBJZiBuZXcgZmlsZUxpc3QgYXJlIHJldHVybmVkLCAgcmVwbGFjZWQgdGhlIHByZXZpb3VzIGZpbGVMaXN0XHJcbiAgICAgICAgICogSWYgdW5kZWZpbmVkIGlzIHJldHVybmVkLCBpdCB3YWl0cyB1bnRpbCBcInVwbG9hZEhhbmRsZXJcIiBpcyBleGVjdXRlZC5cclxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBmaWxlcyBGaWxlcyBhcnJheVxyXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBpbmZvIGluZm86IHtcclxuICAgICAgICAgKiAtIGlzVXBkYXRlOiBVcGRhdGUgYXVkaW8gaWYgdHJ1ZSwgY3JlYXRlIGF1ZGlvIGlmIGZhbHNlXHJcbiAgICAgICAgICogLSBlbGVtZW50OiBJZiBpc1VwZGF0ZSBpcyB0cnVlLCB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGF1ZGlvLlxyXG4gICAgICAgICAqIH1cclxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY29yZSBDb3JlIG9iamVjdFxyXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHVwbG9hZEhhbmRsZXIgSWYgdW5kZWZpbmVkIGlzIHJldHVybmVkLCBpdCB3YWl0cyB1bnRpbCBcInVwbG9hZEhhbmRsZXJcIiBpcyBleGVjdXRlZC5cclxuICAgICAgICAgKiAgICAgICAgICAgICAgICBcInVwbG9hZEhhbmRsZXJcIiBpcyBhbiB1cGxvYWQgZnVuY3Rpb24gd2l0aCBcImNvcmVcIiBhbmQgXCJpbmZvXCIgYm91bmQuXHJcbiAgICAgICAgICogICAgICAgICAgICAgICAgW3VwbG9hZCBmaWxlc10gOiB1cGxvYWRIYW5kbGVyKGZpbGVzIG9yIFtuZXcgRmlsZSguLi4pLF0pXHJcbiAgICAgICAgICogICAgICAgICAgICAgICAgW2Vycm9yXSAgICAgICAgOiB1cGxvYWRIYW5kbGVyKFwiRXJyb3IgbWVzc2FnZVwiKVxyXG4gICAgICAgICAqICAgICAgICAgICAgICAgIFtKdXN0IGZpbmlzaF0gIDogdXBsb2FkSGFuZGxlcigpXHJcbiAgICAgICAgICogICAgICAgICAgICAgICAgW2RpcmVjdGx5IHJlZ2lzdGVyXSA6IHVwbG9hZEhhbmRsZXIocmVzcG9uc2UpIC8vIFNhbWUgZm9ybWF0IGFzIFwiYXVkaW9VcGxvYWRVcmxcIiByZXNwb25zZVxyXG4gICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleCkge1xyXG4gICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBcImVycm9yTWVzc2FnZVwiOiBcImluc2VydCBlcnJvciBtZXNzYWdlXCIsXHJcbiAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicmVzdWx0XCI6IFsgeyBcInVybFwiOiBcIi4uLlwiLCBcIm5hbWVcIjogXCIuLi5cIiwgXCJzaXplXCI6IFwiOTk5XCIgfSwgXVxyXG4gICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICogQHJldHVybnMge0Jvb2xlYW58QXJyYXl8dW5kZWZpbmVkfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG9uQXVkaW9VcGxvYWRCZWZvcmU6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBDYWxsZWQgd2hlbiB0aGUgaW1hZ2UgaXMgdXBsb2FkZWQsIHVwZGF0ZWQsIGRlbGV0ZWRcclxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IHRhcmdldEVsZW1lbnQgVGFyZ2V0IGVsZW1lbnRcclxuICAgICAgICAgKiBAcGFyYW0ge051bWJlcn0gaW5kZXggVXBsb2FkZWQgaW5kZXhcclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gc3RhdGUgVXBsb2FkIHN0YXR1cyAoJ2NyZWF0ZScsICd1cGRhdGUnLCAnZGVsZXRlJylcclxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gaW5mbyBJbWFnZSBpbmZvIG9iamVjdFxyXG4gICAgICAgICAqIC0gaW5kZXg6IGRhdGEgaW5kZXhcclxuICAgICAgICAgKiAtIG5hbWU6IGZpbGUgbmFtZVxyXG4gICAgICAgICAqIC0gc2l6ZTogZmlsZSBzaXplXHJcbiAgICAgICAgICogLSBzZWxlY3Q6IHNlbGVjdCBmdW5jdGlvblxyXG4gICAgICAgICAqIC0gZGVsZXRlOiBkZWxldGUgZnVuY3Rpb25cclxuICAgICAgICAgKiAtIGVsZW1lbnQ6IHRhcmdldCBlbGVtZW50XHJcbiAgICAgICAgICogLSBzcmM6IHNyYyBhdHRyaWJ1dGUgb2YgdGFnXHJcbiAgICAgICAgICogQHBhcmFtIHtOdW1iZXJ9IHJlbWFpbmluZ0ZpbGVzQ291bnQgQ291bnQgb2YgcmVtYWluaW5nIGZpbGVzIHRvIHVwbG9hZCAoMCB3aGVuIGFkZGVkIGFzIGEgdXJsKVxyXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjb3JlIENvcmUgb2JqZWN0XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgb25JbWFnZVVwbG9hZDogbnVsbCxcclxuICAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIENhbGxlZCB3aGVuIHRoZSB2aWRlbyhpZnJhbWUsIHZpZGVvKSBpcyBpcyB1cGxvYWRlZCwgdXBkYXRlZCwgZGVsZXRlZFxyXG4gICAgICAgICAqIC0tIGFyZ3VtZW50cyBpcyBzYW1lIFwib25JbWFnZVVwbG9hZFwiIC0tXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgb25WaWRlb1VwbG9hZDogbnVsbCxcclxuICAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIENhbGxlZCB3aGVuIHRoZSBhdWRpbyBpcyBpcyB1cGxvYWRlZCwgdXBkYXRlZCwgZGVsZXRlZFxyXG4gICAgICAgICAqIC0tIGFyZ3VtZW50cyBpcyBzYW1lIFwib25JbWFnZVVwbG9hZFwiIC0tXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgb25BdWRpb1VwbG9hZDogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIENhbGxlZCB3aGVuIHRoZSBpbWFnZSBpcyB1cGxvYWQgZmFpbGVkXHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGVycm9yTWVzc2FnZSBFcnJvciBtZXNzYWdlXHJcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHJlc3VsdCBSZXNwb25zZSBPYmplY3RcclxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY29yZSBDb3JlIG9iamVjdFxyXG4gICAgICAgICAqIEByZXR1cm5zIHtCb29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG9uSW1hZ2VVcGxvYWRFcnJvcjogbnVsbCxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQ2FsbGVkIHdoZW4gdGhlIHZpZGVvKGlmcmFtZSwgdmlkZW8pIHVwbG9hZCBmYWlsZWRcclxuICAgICAgICAgKiAtLSBhcmd1bWVudHMgaXMgc2FtZSBcIm9uSW1hZ2VVcGxvYWRFcnJvclwiIC0tXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgb25WaWRlb1VwbG9hZEVycm9yOiBudWxsLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBDYWxsZWQgd2hlbiB0aGUgYXVkaW8gdXBsb2FkIGZhaWxlZFxyXG4gICAgICAgICAqIC0tIGFyZ3VtZW50cyBpcyBzYW1lIFwib25JbWFnZVVwbG9hZEVycm9yXCIgLS1cclxuICAgICAgICAgKi9cclxuICAgICAgICBvbkF1ZGlvVXBsb2FkRXJyb3I6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBDYWxsZWQgd2hlbiB0aGUgZWRpdG9yIGlzIHJlc2l6ZWQgdXNpbmcgdGhlIGJvdHRvbSBiYXJcclxuICAgICAgICAgKi9cclxuICAgICAgICBvblJlc2l6ZUVkaXRvcjogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFJlc2V0IHRoZSBidXR0b25zIG9uIHRoZSB0b29sYmFyLiAoRWRpdG9yIGlzIG5vdCByZWxvYWRlZClcclxuICAgICAgICAgKiBZb3UgY2Fubm90IHNldCBhIG5ldyBwbHVnaW4gZm9yIHRoZSBidXR0b24uXHJcbiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gYnV0dG9uTGlzdCBCdXR0b24gbGlzdCBcclxuICAgICAgICAgKi9cclxuICAgICAgICBzZXRUb29sYmFyQnV0dG9uczogZnVuY3Rpb24gKGJ1dHRvbkxpc3QpIHtcclxuICAgICAgICAgICAgY29yZS5zdWJtZW51T2ZmKCk7XHJcbiAgICAgICAgICAgIGNvcmUuY29udGFpbmVyT2ZmKCk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjb25zdCBuZXdUb29sYmFyID0gX0NvbnN0cnVjdG9yLl9jcmVhdGVUb29sQmFyKF9kLCBidXR0b25MaXN0LCBjb3JlLnBsdWdpbnMsIG9wdGlvbnMpO1xyXG4gICAgICAgICAgICBfcmVzcG9uc2l2ZUJ1dHRvbnMgPSBuZXdUb29sYmFyLnJlc3BvbnNpdmVCdXR0b25zO1xyXG4gICAgICAgICAgICBjb3JlLl9tb3JlTGF5ZXJBY3RpdmVCdXR0b24gPSBudWxsO1xyXG4gICAgICAgICAgICBldmVudC5fc2V0UmVzcG9uc2l2ZVRvb2xiYXIoKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC50b29sYmFyLnJlcGxhY2VDaGlsZChuZXdUb29sYmFyLl9idXR0b25UcmF5LCBjb250ZXh0LmVsZW1lbnQuX2J1dHRvblRyYXkpO1xyXG4gICAgICAgICAgICBjb25zdCBuZXdDb250ZXh0ID0gX0NvbnRleHQoY29udGV4dC5lbGVtZW50Lm9yaWdpbkVsZW1lbnQsIGNvcmUuX2dldENvbnN0cnVjdGVkKGNvbnRleHQuZWxlbWVudCksIG9wdGlvbnMpO1xyXG5cclxuICAgICAgICAgICAgY29udGV4dC5lbGVtZW50ID0gbmV3Q29udGV4dC5lbGVtZW50O1xyXG4gICAgICAgICAgICBjb250ZXh0LnRvb2wgPSBuZXdDb250ZXh0LnRvb2w7XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmlmcmFtZSkgY29udGV4dC5lbGVtZW50Lnd5c2l3eWcgPSBjb3JlLl93ZC5ib2R5O1xyXG4gICAgICAgICAgICBjb3JlLl9jYWNoaW5nQnV0dG9ucygpO1xyXG4gICAgICAgICAgICBjb3JlLmhpc3RvcnkuX3Jlc2V0Q2FjaGluZ0J1dHRvbigpO1xyXG5cclxuICAgICAgICAgICAgY29yZS5hY3RpdmVQbHVnaW5zID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IG9sZENhbGxCdXR0b25zID0gcGx1Z2luQ2FsbEJ1dHRvbnM7XHJcbiAgICAgICAgICAgIHBsdWdpbkNhbGxCdXR0b25zID0gbmV3VG9vbGJhci5wbHVnaW5DYWxsQnV0dG9ucztcclxuICAgICAgICAgICAgbGV0IHBsdWdpbiwgYnV0dG9uLCBvbGRCdXR0b247XHJcbiAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBwbHVnaW5DYWxsQnV0dG9ucykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF1dGlsLmhhc093bihwbHVnaW5DYWxsQnV0dG9ucywga2V5KSkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBwbHVnaW4gPSBwbHVnaW5zW2tleV07XHJcbiAgICAgICAgICAgICAgICBidXR0b24gPSBwbHVnaW5DYWxsQnV0dG9uc1trZXldO1xyXG4gICAgICAgICAgICAgICAgaWYgKHBsdWdpbi5hY3RpdmUgJiYgYnV0dG9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2xkQnV0dG9uID0gb2xkQ2FsbEJ1dHRvbnNba2V5XTtcclxuICAgICAgICAgICAgICAgICAgICBjb3JlLmNhbGxQbHVnaW4oa2V5LCBudWxsLCBvbGRCdXR0b24gfHwgYnV0dG9uKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAob2xkQnV0dG9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5wYXJlbnRFbGVtZW50LnJlcGxhY2VDaGlsZChvbGRCdXR0b24sIGJ1dHRvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbkNhbGxCdXR0b25zW2tleV0gPSBvbGRCdXR0b247XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoY29yZS5oYXNGb2N1cykgZXZlbnQuX2FwcGx5VGFnRWZmZWN0cygpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNvcmUuX3ZhcmlhYmxlLmlzQ29kZVZpZXcpIHV0aWwuYWRkQ2xhc3MoY29yZS5fc3R5bGVDb21tYW5kTWFwLmNvZGVWaWV3LCAnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgIGlmIChjb3JlLl92YXJpYWJsZS5pc0Z1bGxTY3JlZW4pIHV0aWwuYWRkQ2xhc3MoY29yZS5fc3R5bGVDb21tYW5kTWFwLmZ1bGxTY3JlZW4sICdhY3RpdmUnKTtcclxuICAgICAgICAgICAgaWYgKHV0aWwuaGFzQ2xhc3MoY29udGV4dC5lbGVtZW50Lnd5c2l3eWcsICdzZS1zaG93LWJsb2NrJykpIHV0aWwuYWRkQ2xhc3MoY29yZS5fc3R5bGVDb21tYW5kTWFwLnNob3dCbG9ja3MsICdhY3RpdmUnKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQWRkIG9yIHJlc2V0IG9wdGlvbiBwcm9wZXJ0eSAoRWRpdG9yIGlzIHJlbG9hZGVkKVxyXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBfb3B0aW9ucyBPcHRpb25zXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgc2V0T3B0aW9uczogZnVuY3Rpb24gKF9vcHRpb25zKSB7XHJcbiAgICAgICAgICAgIGV2ZW50Ll9yZW1vdmVFdmVudCgpO1xyXG4gICAgICAgICAgICBjb3JlLl9yZXNldENvbXBvbmVudHMoKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHV0aWwucmVtb3ZlQ2xhc3MoY29yZS5fc3R5bGVDb21tYW5kTWFwLnNob3dCbG9ja3MsICdhY3RpdmUnKTtcclxuICAgICAgICAgICAgdXRpbC5yZW1vdmVDbGFzcyhjb3JlLl9zdHlsZUNvbW1hbmRNYXAuY29kZVZpZXcsICdhY3RpdmUnKTtcclxuICAgICAgICAgICAgY29yZS5fdmFyaWFibGUuaXNDb2RlVmlldyA9IGZhbHNlO1xyXG4gICAgICAgICAgICBjb3JlLl9pZnJhbWVBdXRvID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgIGNvcmUucGx1Z2lucyA9IF9vcHRpb25zLnBsdWdpbnMgfHwgY29yZS5wbHVnaW5zO1xyXG4gICAgICAgICAgICBjb25zdCBtZXJnZU9wdGlvbnMgPSBbb3B0aW9ucywgX29wdGlvbnNdLnJlZHVjZShmdW5jdGlvbiAoaW5pdCwgb3B0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBrZXkgaW4gb3B0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF1dGlsLmhhc093bihvcHRpb24sIGtleSkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT09ICdwbHVnaW5zJyAmJiBvcHRpb25ba2V5XSAmJiBpbml0W2tleV0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGkgPSBpbml0W2tleV0sIG8gPSBvcHRpb25ba2V5XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGkubGVuZ3RoID8gaSA6IF93Lk9iamVjdC5rZXlzKGkpLm1hcChmdW5jdGlvbihuYW1lKSB7IHJldHVybiBpW25hbWVdOyB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbyA9IG8ubGVuZ3RoID8gbyA6IF93Lk9iamVjdC5rZXlzKG8pLm1hcChmdW5jdGlvbihuYW1lKSB7IHJldHVybiBvW25hbWVdOyB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5pdFtrZXldID0gKG8uZmlsdGVyKGZ1bmN0aW9uKHZhbCkgeyByZXR1cm4gaS5pbmRleE9mKHZhbCkgPT09IC0xOyB9KSkuY29uY2F0KGkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluaXRba2V5XSA9IG9wdGlvbltrZXldO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBpbml0O1xyXG4gICAgICAgICAgICB9LCB7fSk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBlbCA9IGNvbnRleHQuZWxlbWVudDtcclxuICAgICAgICAgICAgY29uc3QgX2luaXRIVE1MID0gZWwud3lzaXd5Zy5pbm5lckhUTUw7XHJcblxyXG4gICAgICAgICAgICAvLyBzZXQgb3B0aW9uXHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnMgPSBfQ29uc3RydWN0b3IuX3NldE9wdGlvbnMobWVyZ2VPcHRpb25zLCBjb250ZXh0LCBvcHRpb25zKTsgICAgICAgIFxyXG5cclxuICAgICAgICAgICAgaWYgKGNvbnMuY2FsbEJ1dHRvbnMpIHtcclxuICAgICAgICAgICAgICAgIHBsdWdpbkNhbGxCdXR0b25zID0gY29ucy5jYWxsQnV0dG9ucztcclxuICAgICAgICAgICAgICAgIGNvcmUuaW5pdFBsdWdpbnMgPSB7fTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNvbnMucGx1Z2lucykge1xyXG4gICAgICAgICAgICAgICAgY29yZS5wbHVnaW5zID0gcGx1Z2lucyA9IGNvbnMucGx1Z2lucztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gcmVzZXQgY29udGV4dFxyXG4gICAgICAgICAgICBpZiAoZWwuX21lbnVUcmF5LmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkgdGhpcy5fbWVudVRyYXkgPSB7fTtcclxuICAgICAgICAgICAgX3Jlc3BvbnNpdmVCdXR0b25zID0gY29ucy50b29sYmFyLnJlc3BvbnNpdmVCdXR0b25zO1xyXG4gICAgICAgICAgICBjb3JlLm9wdGlvbnMgPSBvcHRpb25zID0gbWVyZ2VPcHRpb25zO1xyXG4gICAgICAgICAgICBjb3JlLmxhbmcgPSBsYW5nID0gb3B0aW9ucy5sYW5nO1xyXG5cclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuaWZyYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBlbC53eXNpd3lnRnJhbWUuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICB1dGlsLl9zZXRJZnJhbWVEb2N1bWVudCh0aGlzLCBvcHRpb25zKTtcclxuICAgICAgICAgICAgICAgICAgICBjb3JlLl9zZXRPcHRpb25zSW5pdChlbCwgX2luaXRIVE1MKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBlbC5lZGl0b3JBcmVhLmFwcGVuZENoaWxkKGVsLnd5c2l3eWdGcmFtZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMuaWZyYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBjb3JlLl9zZXRPcHRpb25zSW5pdChlbCwgX2luaXRIVE1MKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBTZXQgXCJvcHRpb25zLmRlZmF1bHRTdHlsZVwiIHN0eWxlLlxyXG4gICAgICAgICAqIERlZmluZSB0aGUgc3R5bGUgb2YgdGhlIGVkaXQgYXJlYVxyXG4gICAgICAgICAqIEl0IGNhbiBhbHNvIGJlIGRlZmluZWQgd2l0aCB0aGUgXCJzZXRPcHRpb25zXCIgbWV0aG9kLCBidXQgdGhlIFwic2V0RGVmYXVsdFN0eWxlXCIgbWV0aG9kIGRvZXMgbm90IHJlbmRlciB0aGUgZWRpdG9yIGFnYWluLlxyXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBzdHlsZSBTdHlsZSBzdHJpbmdcclxuICAgICAgICAgKi9cclxuICAgICAgICBzZXREZWZhdWx0U3R5bGU6IGZ1bmN0aW9uIChzdHlsZSkge1xyXG4gICAgICAgICAgICBjb25zdCBuZXdTdHlsZXMgPSBvcHRpb25zLl9lZGl0b3JTdHlsZXMgPSB1dGlsLl9zZXREZWZhdWx0T3B0aW9uU3R5bGUob3B0aW9ucywgc3R5bGUpO1xyXG4gICAgICAgICAgICBjb25zdCBlbCA9IGNvbnRleHQuZWxlbWVudDtcclxuXHJcbiAgICAgICAgICAgIC8vIHRvcCBhcmVhXHJcbiAgICAgICAgICAgIGVsLnRvcEFyZWEuc3R5bGUuY3NzVGV4dCA9IG5ld1N0eWxlcy50b3A7XHJcbiAgICAgICAgICAgIC8vIGNvZGUgdmlld1xyXG4gICAgICAgICAgICBlbC5jb2RlLnN0eWxlLmNzc1RleHQgPSBvcHRpb25zLl9lZGl0b3JTdHlsZXMuZnJhbWU7XHJcbiAgICAgICAgICAgIGVsLmNvZGUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuaGVpZ2h0ID09PSAnYXV0bycpIHtcclxuICAgICAgICAgICAgICAgIGVsLmNvZGUuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGVsLmNvZGUuc3R5bGUub3ZlcmZsb3cgPSAnJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyB3eXNpd3lnIGZyYW1lXHJcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5pZnJhbWUpIHtcclxuICAgICAgICAgICAgICAgIGVsLnd5c2l3eWdGcmFtZS5zdHlsZS5jc3NUZXh0ID0gbmV3U3R5bGVzLmZyYW1lICsgbmV3U3R5bGVzLmVkaXRvcjtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGVsLnd5c2l3eWdGcmFtZS5zdHlsZS5jc3NUZXh0ID0gbmV3U3R5bGVzLmZyYW1lO1xyXG4gICAgICAgICAgICAgICAgZWwud3lzaXd5Zy5zdHlsZS5jc3NUZXh0ID0gbmV3U3R5bGVzLmVkaXRvcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBPcGVuIGEgbm90aWNlIGFyZWFcclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBOb3RpY2UgbWVzc2FnZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG5vdGljZU9wZW46IGZ1bmN0aW9uIChtZXNzYWdlKSB7XHJcbiAgICAgICAgICAgIGNvcmUubm90aWNlLm9wZW4uY2FsbChjb3JlLCBtZXNzYWdlKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQ2xvc2UgYSBub3RpY2UgYXJlYVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG5vdGljZUNsb3NlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGNvcmUubm90aWNlLmNsb3NlLmNhbGwoY29yZSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIENvcHlpbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSBlZGl0b3IgdG8gdGhlIG9yaWdpbmFsIHRleHRhcmVhIGFuZCBleGVjdXRlIG9uU2F2ZSBjYWxsYmFja1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNhdmU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgY29uc3QgY29udGVudHMgPSBjb3JlLmdldENvbnRlbnRzKGZhbHNlKTtcclxuICAgICAgICAgICAgY29udGV4dC5lbGVtZW50Lm9yaWdpbkVsZW1lbnQudmFsdWUgPSBjb250ZW50c1xyXG4gICAgICAgICAgICBldmVudC5vblNhdmVfd3lzaXd5Zyhjb250ZW50cywgY29yZSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEdldHMgdGhlIHN1bmVkaXRvcidzIGNvbnRleHQgb2JqZWN0LiBDb250YWlucyBzZXR0aW5ncywgcGx1Z2lucywgYW5kIGNhY2hlZCBlbGVtZW50IG9iamVjdHNcclxuICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGdldENvbnRleHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQ7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEdldHMgdGhlIGNvbnRlbnRzIG9mIHRoZSBzdW5lZGl0b3JcclxuICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IG9ubHlDb250ZW50cyAtIFJldHVybiBvbmx5IHRoZSBjb250ZW50cyBvZiB0aGUgYm9keSB3aXRob3V0IGhlYWRlcnMgd2hlbiB0aGUgXCJmdWxsUGFnZVwiIG9wdGlvbiBpcyB0cnVlXHJcbiAgICAgICAgICogQHJldHVybnMge1N0cmluZ31cclxuICAgICAgICAgKi9cclxuICAgICAgICBnZXRDb250ZW50czogZnVuY3Rpb24gKG9ubHlDb250ZW50cykge1xyXG4gICAgICAgICAgICByZXR1cm4gY29yZS5nZXRDb250ZW50cyhvbmx5Q29udGVudHMpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBHZXRzIG9ubHkgdGhlIHRleHQgb2YgdGhlIHN1bmVkaXRvciBjb250ZW50c1xyXG4gICAgICAgICAqIEByZXR1cm5zIHtTdHJpbmd9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZ2V0VGV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lbGVtZW50Lnd5c2l3eWcudGV4dENvbnRlbnQ7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEdldCB0aGUgZWRpdG9yJ3MgbnVtYmVyIG9mIGNoYXJhY3RlcnMgb3IgYmluYXJ5IGRhdGEgc2l6ZS5cclxuICAgICAgICAgKiBZb3UgY2FuIHVzZSB0aGUgXCJjaGFyQ291bnRlclR5cGVcIiBvcHRpb24gZm9ybWF0LlxyXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfG51bGx9IGNoYXJDb3VudGVyVHlwZSBvcHRpb25zIC0gY2hhckNvdW50ZXJUeXBlICgnY2hhcicsICdieXRlJywgJ2J5dGUtaHRtbCcpXHJcbiAgICAgICAgICogSWYgYXJndW1lbnQgaXMgbm8gdmFsdWUsIHRoZSBjdXJyZW50bHkgc2V0IFwiY2hhckNvdW50ZXJUeXBlXCIgb3B0aW9uIGlzIHVzZWQuXHJcbiAgICAgICAgICogQHJldHVybnMge051bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBnZXRDaGFyQ291bnQ6IGZ1bmN0aW9uIChjaGFyQ291bnRlclR5cGUpIHtcclxuICAgICAgICAgICAgY2hhckNvdW50ZXJUeXBlID0gdHlwZW9mIGNoYXJDb3VudGVyVHlwZSA9PT0gJ3N0cmluZycgPyBjaGFyQ291bnRlclR5cGUgOiBvcHRpb25zLmNoYXJDb3VudGVyVHlwZTtcclxuICAgICAgICAgICAgcmV0dXJuIGNvcmUuZ2V0Q2hhckxlbmd0aCgoY29yZS5fY2hhclR5cGVIVE1MID8gY29udGV4dC5lbGVtZW50Lnd5c2l3eWcuaW5uZXJIVE1MIDogY29udGV4dC5lbGVtZW50Lnd5c2l3eWcudGV4dENvbnRlbnQpLCBjaGFyQ291bnRlclR5cGUpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBHZXRzIHVwbG9hZGVkIGltYWdlcyBpbmZvcm1hdGlvbnNcclxuICAgICAgICAgKiAtIGluZGV4OiBkYXRhIGluZGV4XHJcbiAgICAgICAgICogLSBuYW1lOiBmaWxlIG5hbWVcclxuICAgICAgICAgKiAtIHNpemU6IGZpbGUgc2l6ZVxyXG4gICAgICAgICAqIC0gc2VsZWN0OiBzZWxlY3QgZnVuY3Rpb25cclxuICAgICAgICAgKiAtIGRlbGV0ZTogZGVsZXRlIGZ1bmN0aW9uXHJcbiAgICAgICAgICogLSBlbGVtZW50OiB0YXJnZXQgZWxlbWVudFxyXG4gICAgICAgICAqIC0gc3JjOiBzcmMgYXR0cmlidXRlIG9mIHRhZ1xyXG4gICAgICAgICAqIEByZXR1cm5zIHtBcnJheX1cclxuICAgICAgICAgKi9cclxuICAgICAgICBnZXRJbWFnZXNJbmZvOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmltYWdlID8gY29udGV4dC5pbWFnZS5faW5mb0xpc3QgOiBbXTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBHZXRzIHVwbG9hZGVkIGZpbGVzKHBsdWdpbiB1c2luZyBmaWxlTWFuYWdlcikgaW5mb3JtYXRpb24gbGlzdC5cclxuICAgICAgICAgKiBpbWFnZTogW2ltZ10sIHZpZGVvOiBbdmlkZW8sIGlmcmFtZV0sIGF1ZGlvOiBbYXVkaW9dXHJcbiAgICAgICAgICogV2hlbiB0aGUgYXJndW1lbnQgdmFsdWUgaXMgJ2ltYWdlJywgaXQgaXMgdGhlIHNhbWUgZnVuY3Rpb24gYXMgXCJnZXRJbWFnZXNJbmZvXCIuXHJcbiAgICAgICAgICogLSBpbmRleDogZGF0YSBpbmRleFxyXG4gICAgICAgICAqIC0gbmFtZTogZmlsZSBuYW1lXHJcbiAgICAgICAgICogLSBzaXplOiBmaWxlIHNpemVcclxuICAgICAgICAgKiAtIHNlbGVjdDogc2VsZWN0IGZ1bmN0aW9uXHJcbiAgICAgICAgICogLSBkZWxldGU6IGRlbGV0ZSBmdW5jdGlvblxyXG4gICAgICAgICAqIC0gZWxlbWVudDogdGFyZ2V0IGVsZW1lbnRcclxuICAgICAgICAgKiAtIHNyYzogc3JjIGF0dHJpYnV0ZSBvZiB0YWdcclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gcGx1Z2luTmFtZSBQbHVnaW4gbmFtZSAoaW1hZ2UsIHZpZGVvLCBhdWRpbylcclxuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZ2V0RmlsZXNJbmZvOiBmdW5jdGlvbiAocGx1Z2luTmFtZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dFtwbHVnaW5OYW1lXSA/IGNvbnRleHRbcGx1Z2luTmFtZV0uX2luZm9MaXN0IDogW107XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFVwbG9hZCBpbWFnZXMgdXNpbmcgaW1hZ2UgcGx1Z2luXHJcbiAgICAgICAgICogQHBhcmFtIHtGaWxlTGlzdH0gZmlsZXMgRmlsZUxpc3RcclxuICAgICAgICAgKi9cclxuICAgICAgICBpbnNlcnRJbWFnZTogZnVuY3Rpb24gKGZpbGVzKSB7XHJcbiAgICAgICAgICAgIGlmICghY29yZS5wbHVnaW5zLmltYWdlIHx8ICFmaWxlcykgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFjb3JlLmluaXRQbHVnaW5zLmltYWdlKSBjb3JlLmNhbGxQbHVnaW4oJ2ltYWdlJywgY29yZS5wbHVnaW5zLmltYWdlLnN1Ym1pdEFjdGlvbi5iaW5kKGNvcmUsIGZpbGVzKSwgbnVsbCk7XHJcbiAgICAgICAgICAgIGVsc2UgY29yZS5wbHVnaW5zLmltYWdlLnN1Ym1pdEFjdGlvbi5jYWxsKGNvcmUsIGZpbGVzKTtcclxuICAgICAgICAgICAgY29yZS5mb2N1cygpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBJbnNlcnRzIGFuIEhUTUwgZWxlbWVudCBvciBIVE1MIHN0cmluZyBvciBwbGFpbiBzdHJpbmcgYXQgdGhlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uXHJcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fFN0cmluZ30gaHRtbCBIVE1MIEVsZW1lbnQgb3IgSFRNTCBzdHJpbmcgb3IgcGxhaW4gc3RyaW5nXHJcbiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSBub3RDbGVhbmluZ0RhdGEgSWYgdHJ1ZSwgaW5zZXJ0cyB0aGUgSFRNTCBzdHJpbmcgd2l0aG91dCByZWZpbmluZyBpdCB3aXRoIGNvcmUuY2xlYW5IVE1MLlxyXG4gICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gY2hlY2tDaGFyQ291bnQgSWYgdHJ1ZSwgaWYgXCJvcHRpb25zLm1heENoYXJDb3VudFwiIGlzIGV4Y2VlZGVkIHdoZW4gXCJlbGVtZW50XCIgaXMgYWRkZWQsIG51bGwgaXMgcmV0dXJuZWQgd2l0aG91dCBhZGRpdGlvbi5cclxuICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IHJhbmdlU2VsZWN0aW9uIElmIHRydWUsIHJhbmdlIHNlbGVjdCB0aGUgaW5zZXJ0ZWQgbm9kZS5cclxuICAgICAgICAgKi9cclxuICAgICAgICBpbnNlcnRIVE1MOiBmdW5jdGlvbiAoaHRtbCwgbm90Q2xlYW5pbmdEYXRhLCBjaGVja0NoYXJDb3VudCwgcmFuZ2VTZWxlY3Rpb24pIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBodG1sID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFub3RDbGVhbmluZ0RhdGEpIGh0bWwgPSBjb3JlLmNsZWFuSFRNTChodG1sLCBudWxsKTtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZG9tID0gX2QuY3JlYXRlUmFuZ2UoKS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoaHRtbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZG9tVHJlZSA9IGRvbS5jaGlsZE5vZGVzO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2tDaGFyQ291bnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHlwZSA9IGNvcmUuX2NoYXJUeXBlSFRNTCA/ICdvdXRlckhUTUwnIDogJ3RleHRDb250ZW50JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNoZWNrSFRNTCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gZG9tVHJlZS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tIVE1MICs9IGRvbVRyZWVbaV1bdHlwZV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb3JlLmNoZWNrQ2hhckNvdW50KGNoZWNrSFRNTCwgbnVsbCkpIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjLCBhLCB0LCBwcmV2LCBmaXJzdENvbjtcclxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKGMgPSBkb21UcmVlWzBdKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldiAmJiBwcmV2Lm5vZGVUeXBlID09PSAzICYmIGEgJiYgYS5ub2RlVHlwZSA9PT0gMSAmJiB1dGlsLmlzQnJlYWsoYykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXYgPSBjO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtKGMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdCA9IGNvcmUuaW5zZXJ0Tm9kZShjLCBhLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGEgPSB0LmNvbnRhaW5lciB8fCB0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZpcnN0Q29uKSBmaXJzdENvbiA9IHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXYgPSBjO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZXYubm9kZVR5cGUgPT09IDMgJiYgYS5ub2RlVHlwZSA9PT0gMSkgYSA9IHByZXY7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gYS5ub2RlVHlwZSA9PT0gMyA/ICh0LmVuZE9mZnNldCB8fCBhLnRleHRDb250ZW50Lmxlbmd0aCk6IGEuY2hpbGROb2Rlcy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmdlU2VsZWN0aW9uKSBjb3JlLnNldFJhbmdlKGZpcnN0Q29uLmNvbnRhaW5lciB8fCBmaXJzdENvbiwgZmlyc3RDb24uc3RhcnRPZmZzZXQgfHwgMCwgYSwgb2Zmc2V0KTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGNvcmUuc2V0UmFuZ2UoYSwgb2Zmc2V0LCBhLCBvZmZzZXQpO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29yZS5pc0Rpc2FibGVkIHx8IGNvcmUuaXNSZWFkT25seSkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignW1NVTkVESVRPUi5pbnNlcnRIVE1MLmZhaWxdICcgKyBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgY29yZS5leGVjQ29tbWFuZCgnaW5zZXJ0SFRNTCcsIGZhbHNlLCBodG1sKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzQ29tcG9uZW50KGh0bWwpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29yZS5pbnNlcnRDb21wb25lbnQoaHRtbCwgZmFsc2UsIGNoZWNrQ2hhckNvdW50LCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBhZnRlck5vZGUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzRm9ybWF0RWxlbWVudChodG1sKSB8fCB1dGlsLmlzTWVkaWEoaHRtbCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJOb2RlID0gdXRpbC5nZXRGb3JtYXRFbGVtZW50KGNvcmUuZ2V0U2VsZWN0aW9uTm9kZSgpLCBudWxsKTtcdFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb3JlLmluc2VydE5vZGUoaHRtbCwgYWZ0ZXJOb2RlLCBjaGVja0NoYXJDb3VudCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNvcmUuZWZmZWN0Tm9kZSA9IG51bGw7XHJcbiAgICAgICAgICAgIGNvcmUuZm9jdXMoKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGhpc3Rvcnkgc3RhY2tcclxuICAgICAgICAgICAgY29yZS5oaXN0b3J5LnB1c2goZmFsc2UpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBDaGFuZ2UgdGhlIGNvbnRlbnRzIG9mIHRoZSBzdW5lZGl0b3JcclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ3x1bmRlZmluZWR9IGNvbnRlbnRzIENvbnRlbnRzIHRvIElucHV0XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgc2V0Q29udGVudHM6IGZ1bmN0aW9uIChjb250ZW50cykge1xyXG4gICAgICAgICAgICBjb3JlLnNldENvbnRlbnRzKGNvbnRlbnRzKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQWRkIGNvbnRlbnRzIHRvIHRoZSBzdW5lZGl0b3JcclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gY29udGVudHMgQ29udGVudHMgdG8gSW5wdXRcclxuICAgICAgICAgKi9cclxuICAgICAgICBhcHBlbmRDb250ZW50czogZnVuY3Rpb24gKGNvbnRlbnRzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnZlcnRWYWx1ZSA9IGNvcmUuY29udmVydENvbnRlbnRzRm9yRWRpdG9yKGNvbnRlbnRzKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmICghY29yZS5fdmFyaWFibGUuaXNDb2RlVmlldykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdGVtcCA9IHV0aWwuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcbiAgICAgICAgICAgICAgICB0ZW1wLmlubmVySFRNTCA9IGNvbnZlcnRWYWx1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCB3eXNpd3lnID0gY29udGV4dC5lbGVtZW50Lnd5c2l3eWc7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRlbXAuY2hpbGRyZW47XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB3eXNpd3lnLmFwcGVuZENoaWxkKGNoaWxkcmVuW2ldKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvcmUuX3NldENvZGVWaWV3KGNvcmUuX2dldENvZGVWaWV3KCkgKyAnXFxuJyArIGNvcmUuY29udmVydEhUTUxGb3JDb2RlVmlldyhjb252ZXJ0VmFsdWUpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gaGlzdG9yeSBzdGFja1xyXG4gICAgICAgICAgICBjb3JlLmhpc3RvcnkucHVzaChmYWxzZSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFN3aXRjaCB0byBvciBvZmYgXCJSZWFkT25seVwiIG1vZGUuXHJcbiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSB2YWx1ZSBcInJlYWRPbmx5XCIgYm9vbGVhbiB2YWx1ZS5cclxuICAgICAgICAgKi9cclxuICAgICAgICByZWFkT25seTogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIGNvcmUuaXNSZWFkT25seSA9IHZhbHVlO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAvKiogb2ZmIG1lbnVzICovXHJcbiAgICAgICAgICAgICAgICBjb3JlLmNvbnRyb2xsZXJzT2ZmKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29yZS5tb2RhbEZvcm0pIGNvcmUucGx1Z2lucy5kaWFsb2cuY2xvc2UuY2FsbChjb3JlKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQuY29kZS5zZXRBdHRyaWJ1dGUoXCJyZWFkT25seVwiLCBcInRydWVcIik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQuY29kZS5yZW1vdmVBdHRyaWJ1dGUoXCJyZWFkT25seVwiKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdXRpbC5zZXREaXNhYmxlZEJ1dHRvbnMoISF2YWx1ZSwgY29yZS5yZXNpemluZ0Rpc2FibGVkQnV0dG9ucyk7XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmNvZGVNaXJyb3JFZGl0b3IpIG9wdGlvbnMuY29kZU1pcnJvckVkaXRvci5zZXRPcHRpb24oJ3JlYWRPbmx5JywgISF2YWx1ZSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIERpc2FibGUgdGhlIHN1bmVkaXRvclxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGRpc2FibGU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy50b29sYmFyLmRpc2FibGUoKTtcclxuICAgICAgICAgICAgdGhpcy53eXNpd3lnLmRpc2FibGUoKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gUHJvdmlkZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAzLjAuMCB2ZXJzaW9uXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgIGRpc2FibGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZSgpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBFbmFibGUgdGhlIHN1bmVkaXRvclxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGVuYWJsZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLnRvb2xiYXIuZW5hYmxlKCk7XHJcbiAgICAgICAgICAgIHRoaXMud3lzaXd5Zy5lbmFibGUoKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gUHJvdmlkZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAzLjAuMCB2ZXJzaW9uXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgIGVuYWJsZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5lbmFibGUoKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gU2hvdyB0aGUgc3VuZWRpdG9yXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgc2hvdzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBjb25zdCB0b3BBcmVhU3R5bGUgPSBjb250ZXh0LmVsZW1lbnQudG9wQXJlYS5zdHlsZTtcclxuICAgICAgICAgICAgaWYgKHRvcEFyZWFTdHlsZS5kaXNwbGF5ID09PSAnbm9uZScpIHRvcEFyZWFTdHlsZS5kaXNwbGF5ID0gb3B0aW9ucy5kaXNwbGF5O1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBIaWRlIHRoZSBzdW5lZGl0b3JcclxuICAgICAgICAgKi9cclxuICAgICAgICBoaWRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC50b3BBcmVhLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIERlc3Ryb3kgdGhlIHN1bmVkaXRvclxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgLyoqIG9mZiBtZW51cyAqL1xyXG4gICAgICAgICAgICBjb3JlLnN1Ym1lbnVPZmYoKTtcclxuICAgICAgICAgICAgY29yZS5jb250YWluZXJPZmYoKTtcclxuICAgICAgICAgICAgY29yZS5jb250cm9sbGVyc09mZigpO1xyXG4gICAgICAgICAgICBpZiAoY29yZS5ub3RpY2UpIGNvcmUubm90aWNlLmNsb3NlLmNhbGwoY29yZSk7XHJcbiAgICAgICAgICAgIGlmIChjb3JlLm1vZGFsRm9ybSkgY29yZS5wbHVnaW5zLmRpYWxvZy5jbG9zZS5jYWxsKGNvcmUpO1xyXG5cclxuICAgICAgICAgICAgLyoqIHJlbW92ZSBoaXN0b3J5ICovXHJcbiAgICAgICAgICAgIGNvcmUuaGlzdG9yeS5fZGVzdHJveSgpO1xyXG5cclxuICAgICAgICAgICAgLyoqIHJlbW92ZSBldmVudCBsaXN0ZW5lcnMgKi9cclxuICAgICAgICAgICAgZXZlbnQuX3JlbW92ZUV2ZW50KCk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvKiogcmVtb3ZlIGVsZW1lbnQgKi9cclxuICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtKGNvbnRleHQuZWxlbWVudC50b29sYmFyKTtcclxuICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtKGNvbnRleHQuZWxlbWVudC50b3BBcmVhKTtcclxuXHJcbiAgICAgICAgICAgIC8qKiByZW1vdmUgb2JqZWN0IHJlZmVyZW5jZSAqL1xyXG4gICAgICAgICAgICBmb3IgKGxldCBrIGluIGNvcmUuZnVuY3Rpb25zKSB7IGlmICh1dGlsLmhhc093bihjb3JlLCBrKSkgZGVsZXRlIGNvcmUuZnVuY3Rpb25zW2tdOyB9XHJcbiAgICAgICAgICAgIGZvciAobGV0IGsgaW4gY29yZSkgeyBpZiAodXRpbC5oYXNPd24oY29yZSwgaykpIGRlbGV0ZSBjb3JlW2tdOyB9XHJcbiAgICAgICAgICAgIGZvciAobGV0IGsgaW4gZXZlbnQpIHsgaWYgKHV0aWwuaGFzT3duKGV2ZW50LCBrKSkgZGVsZXRlIGV2ZW50W2tdOyB9XHJcbiAgICAgICAgICAgIGZvciAobGV0IGsgaW4gY29udGV4dCkgeyBpZiAodXRpbC5oYXNPd24oY29udGV4dCwgaykpIGRlbGV0ZSBjb250ZXh0W2tdOyB9XHJcbiAgICAgICAgICAgIGZvciAobGV0IGsgaW4gcGx1Z2luQ2FsbEJ1dHRvbnMpIHsgaWYgKHV0aWwuaGFzT3duKHBsdWdpbkNhbGxCdXR0b25zLCBrKSkgZGVsZXRlIHBsdWdpbkNhbGxCdXR0b25zW2tdOyB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvKiogcmVtb3ZlIHVzZXIgb2JqZWN0ICovXHJcbiAgICAgICAgICAgIGZvciAobGV0IGsgaW4gdGhpcykgeyBpZiAodXRpbC5oYXNPd24odGhpcywgaykpIGRlbGV0ZSB0aGlzW2tdOyB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFRvb2xiYXIgbWV0aG9kc1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRvb2xiYXI6IHtcclxuICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAqIEBkZXNjcmlwdGlvbiBEaXNhYmxlIHRoZSB0b29sYmFyXHJcbiAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICBkaXNhYmxlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAvKiogb2ZmIG1lbnVzICovXHJcbiAgICAgICAgICAgICAgICBjb3JlLnN1Ym1lbnVPZmYoKTtcclxuICAgICAgICAgICAgICAgIGNvcmUubW9yZUxheWVyT2ZmKCk7XHJcbiAgICAgICAgICAgICAgICBjb3JlLmNvbnRhaW5lck9mZigpO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnRleHQudG9vbC5jb3Zlci5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgKiBAZGVzY3JpcHRpb24gUHJvdmlkZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAzLjAuMCB2ZXJzaW9uXHJcbiAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICBkaXNhYmxlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlKCk7XHJcbiAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICogQGRlc2NyaXB0aW9uIEVuYWJsZSB0aGUgdG9vbGJhclxyXG4gICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgZW5hYmxlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LnRvb2wuY292ZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgKiBAZGVzY3JpcHRpb24gUHJvdmlkZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAzLjAuMCB2ZXJzaW9uXHJcbiAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgZW5hYmxlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbmFibGUoKTtcclxuICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgKiBAZGVzY3JpcHRpb24gU2hvdyB0aGUgdG9vbGJhclxyXG4gICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgc2hvdzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvcmUuX2lzSW5saW5lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQuX3Nob3dUb29sYmFySW5saW5lKCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC50b29sYmFyLnN0eWxlLmRpc3BsYXkgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQuX3N0aWNreUR1bW15LnN0eWxlLmRpc3BsYXkgPSAnJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgKiBAZGVzY3JpcHRpb24gSGlkZSB0aGUgdG9vbGJhclxyXG4gICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgaGlkZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvcmUuX2lzSW5saW5lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQuX2hpZGVUb29sYmFyKCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC50b29sYmFyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50Ll9zdGlja3lEdW1teS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBXeXNpd3lnIG1ldGhvZHNcclxuICAgICAgICAgKi9cclxuICAgICAgICAgd3lzaXd5Zzoge1xyXG4gICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICogQGRlc2NyaXB0aW9uIERpc2FibGUgdGhlIHd5c2l3eWcgYXJlYVxyXG4gICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgZGlzYWJsZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAvKiogb2ZmIG1lbnVzICovXHJcbiAgICAgICAgICAgICAgICBjb3JlLmNvbnRyb2xsZXJzT2ZmKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29yZS5tb2RhbEZvcm0pIGNvcmUucGx1Z2lucy5kaWFsb2cuY2xvc2UuY2FsbChjb3JlKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQud3lzaXd5Zy5zZXRBdHRyaWJ1dGUoJ2NvbnRlbnRlZGl0YWJsZScsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIGNvcmUuaXNEaXNhYmxlZCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuY29kZU1pcnJvckVkaXRvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuY29kZU1pcnJvckVkaXRvci5zZXRPcHRpb24oJ3JlYWRPbmx5JywgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC5jb2RlLnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCAnZGlzYWJsZWQnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgKiBAZGVzY3JpcHRpb24gRW5hYmxlIHRoZSB3eXNpd3lnIGFyZWFcclxuICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgIGVuYWJsZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50Lnd5c2l3eWcuc2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIGNvcmUuaXNEaXNhYmxlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmNvZGVNaXJyb3JFZGl0b3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmNvZGVNaXJyb3JFZGl0b3Iuc2V0T3B0aW9uKCdyZWFkT25seScsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50LmNvZGUucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKioqKioqKioqKiogQ29yZSBpbml0ICoqKioqKioqKioqKi9cclxuICAgIC8vIGZ1bmN0aW9uc1xyXG4gICAgY29yZS5mdW5jdGlvbnMgPSBmdW5jdGlvbnM7XHJcbiAgICBjb3JlLm9wdGlvbnMgPSBvcHRpb25zO1xyXG5cclxuICAgIC8vIENyZWF0ZSB0byBzaWJsaW5nIG5vZGVcclxuICAgIGxldCBjb250ZXh0RWwgPSBjb250ZXh0LmVsZW1lbnQ7XHJcbiAgICBsZXQgb3JpZ2luRWwgPSBjb250ZXh0RWwub3JpZ2luRWxlbWVudDtcclxuICAgIGxldCB0b3BFbCA9IGNvbnRleHRFbC50b3BBcmVhO1xyXG4gICAgb3JpZ2luRWwuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgIHRvcEVsLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cclxuICAgIC8vIGluaXRcclxuICAgIGlmIChvcHRpb25zLmlmcmFtZSkge1xyXG4gICAgICAgIGNvbnRleHRFbC53eXNpd3lnRnJhbWUuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdXRpbC5fc2V0SWZyYW1lRG9jdW1lbnQodGhpcywgb3B0aW9ucyk7XHJcbiAgICAgICAgICAgIGNvcmUuX2VkaXRvckluaXQoZmFsc2UsIG9wdGlvbnMudmFsdWUpO1xyXG4gICAgICAgICAgICBvcHRpb25zLnZhbHVlID0gbnVsbDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBpbnNlcnQgZWRpdG9yIGVsZW1lbnRcclxuICAgIGlmICh0eXBlb2Ygb3JpZ2luRWwubmV4dEVsZW1lbnRTaWJsaW5nID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgIG9yaWdpbkVsLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRvcEVsLCBvcmlnaW5FbC5uZXh0RWxlbWVudFNpYmxpbmcpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBvcmlnaW5FbC5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRvcEVsKTtcclxuICAgIH1cclxuXHJcbiAgICBjb250ZXh0RWwuZWRpdG9yQXJlYS5hcHBlbmRDaGlsZChjb250ZXh0RWwud3lzaXd5Z0ZyYW1lKTtcclxuICAgIGNvbnRleHRFbCA9IG9yaWdpbkVsID0gdG9wRWwgPSBudWxsO1xyXG5cclxuICAgIC8vIGluaXRcclxuICAgIGlmICghb3B0aW9ucy5pZnJhbWUpIHtcclxuICAgICAgICBjb3JlLl9lZGl0b3JJbml0KGZhbHNlLCBvcHRpb25zLnZhbHVlKTtcclxuICAgICAgICBvcHRpb25zLnZhbHVlID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZnVuY3Rpb25zO1xyXG59XHJcbiIsIi8qXHJcbiAqIHd5c2l3eWcgd2ViIGVkaXRvclxyXG4gKlxyXG4gKiBzdW5lZGl0b3IuanNcclxuICogQ29weXJpZ2h0IDIwMTkgSmlIb25nIExlZS5cclxuICogTUlUIGxpY2Vuc2UuXHJcbiAqL1xyXG4ndXNlIHN0cmljdCc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoY29yZSwgY2hhbmdlKSB7XHJcbiAgICBjb25zdCBfdyA9IGNvcmUuX3c7XHJcbiAgICBjb25zdCB1dGlsID0gY29yZS51dGlsO1xyXG4gICAgY29uc3QgZGVsYXlUaW1lID0gY29yZS5vcHRpb25zLmhpc3RvcnlTdGFja0RlbGF5VGltZTtcclxuICAgIGxldCBlZGl0b3IgPSBjb3JlLmNvbnRleHQuZWxlbWVudDtcclxuICAgIGxldCB1bmRvID0gY29yZS5jb250ZXh0LnRvb2wudW5kbztcclxuICAgIGxldCByZWRvID0gY29yZS5jb250ZXh0LnRvb2wucmVkbztcclxuXHJcbiAgICBsZXQgcHVzaERlbGF5ID0gbnVsbDtcclxuICAgIGxldCBzdGFja0luZGV4ID0gMDtcclxuICAgIGxldCBzdGFjayA9IFtdO1xyXG5cclxuICAgIGZ1bmN0aW9uIHNldENvbnRlbnRzRnJvbVN0YWNrICgpIHtcclxuICAgICAgICBjb25zdCBpdGVtID0gc3RhY2tbc3RhY2tJbmRleF07XHJcbiAgICAgICAgZWRpdG9yLnd5c2l3eWcuaW5uZXJIVE1MID0gaXRlbS5jb250ZW50cztcclxuXHJcbiAgICAgICAgY29yZS5zZXRSYW5nZSh1dGlsLmdldE5vZGVGcm9tUGF0aChpdGVtLnMucGF0aCwgZWRpdG9yLnd5c2l3eWcpLCBpdGVtLnMub2Zmc2V0LCB1dGlsLmdldE5vZGVGcm9tUGF0aChpdGVtLmUucGF0aCwgZWRpdG9yLnd5c2l3eWcpLCBpdGVtLmUub2Zmc2V0KTtcclxuICAgICAgICBjb3JlLmZvY3VzKCk7XHJcblxyXG4gICAgICAgIGlmIChzdGFjay5sZW5ndGggPD0gMSkge1xyXG4gICAgICAgICAgICBpZiAodW5kbykgdW5kby5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgdHJ1ZSk7XHJcbiAgICAgICAgICAgIGlmIChyZWRvKSByZWRvLnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCB0cnVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoc3RhY2tJbmRleCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHVuZG8pIHVuZG8uc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlZG8pIHJlZG8ucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN0YWNrSW5kZXggPT09IHN0YWNrLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgIGlmICh1bmRvKSB1bmRvLnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcclxuICAgICAgICAgICAgICAgIGlmIChyZWRvKSByZWRvLnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCB0cnVlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmICh1bmRvKSB1bmRvLnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcclxuICAgICAgICAgICAgICAgIGlmIChyZWRvKSByZWRvLnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29yZS5jb250cm9sbGVyc09mZigpO1xyXG4gICAgICAgIGNvcmUuX2NoZWNrQ29tcG9uZW50cygpO1xyXG4gICAgICAgIGNvcmUuX3NldENoYXJDb3VudCgpO1xyXG4gICAgICAgIGNvcmUuX3Jlc291cmNlc1N0YXRlQ2hhbmdlKCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gb25DaGFuZ2VcclxuICAgICAgICBjaGFuZ2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBwdXNoU3RhY2sgKCkge1xyXG4gICAgICAgIGNvcmUuX2NoZWNrQ29tcG9uZW50cygpO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSBjb3JlLmdldENvbnRlbnRzKHRydWUpO1xyXG4gICAgICAgIGlmICghY3VycmVudCB8fCAoISFzdGFja1tzdGFja0luZGV4XSAmJiBjdXJyZW50ID09PSBzdGFja1tzdGFja0luZGV4XS5jb250ZW50cykpIHJldHVybjtcclxuXHJcbiAgICAgICAgc3RhY2tJbmRleCsrO1xyXG4gICAgICAgIGNvbnN0IHJhbmdlID0gY29yZS5fdmFyaWFibGUuX3JhbmdlO1xyXG5cclxuICAgICAgICBpZiAoc3RhY2subGVuZ3RoID4gc3RhY2tJbmRleCkge1xyXG4gICAgICAgICAgICBzdGFjayA9IHN0YWNrLnNsaWNlKDAsIHN0YWNrSW5kZXgpO1xyXG4gICAgICAgICAgICBpZiAocmVkbykgcmVkby5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXJhbmdlKSB7XHJcbiAgICAgICAgICAgIHN0YWNrW3N0YWNrSW5kZXhdID0ge1xyXG4gICAgICAgICAgICAgICAgY29udGVudHM6IGN1cnJlbnQsXHJcbiAgICAgICAgICAgICAgICBzOiB7IHBhdGg6IFswLCAwXSwgb2Zmc2V0OiBbMCwgMF0gfSxcclxuICAgICAgICAgICAgICAgIGU6IHsgcGF0aDogMCwgb2Zmc2V0OiAwIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzdGFja1tzdGFja0luZGV4XSA9IHtcclxuICAgICAgICAgICAgICAgIGNvbnRlbnRzOiBjdXJyZW50LFxyXG4gICAgICAgICAgICAgICAgczoge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IHV0aWwuZ2V0Tm9kZVBhdGgocmFuZ2Uuc3RhcnRDb250YWluZXIsIG51bGwsIG51bGwpLFxyXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldDogcmFuZ2Uuc3RhcnRPZmZzZXRcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogdXRpbC5nZXROb2RlUGF0aChyYW5nZS5lbmRDb250YWluZXIsIG51bGwsIG51bGwpLFxyXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldDogcmFuZ2UuZW5kT2Zmc2V0XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc3RhY2tJbmRleCA9PT0gMSAmJiB1bmRvKSB1bmRvLnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcclxuXHJcbiAgICAgICAgY29yZS5fc2V0Q2hhckNvdW50KCk7XHJcbiAgICAgICAgLy8gb25DaGFuZ2VcclxuICAgICAgICBjaGFuZ2UoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBIaXN0b3J5IHN0YWNrXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgc3RhY2s6IHN0YWNrLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gU2F2aW5nIHRoZSBjdXJyZW50IHN0YXR1cyB0byB0aGUgaGlzdG9yeSBvYmplY3Qgc3RhY2tcclxuICAgICAgICAgKiBJZiBcImRlbGF5XCIgaXMgdHJ1ZSwgaXQgd2lsbCBiZSBzYXZlZCBhZnRlciAob3B0aW9ucy5oaXN0b3J5U3RhY2tEZWxheVRpbWUgfHwgNDAwKSBtaWxpc2Vjb25kc1xyXG4gICAgICAgICAqIElmIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgYWdhaW4gd2l0aCB0aGUgXCJkZWxheVwiIGFyZ3VtZW50IHRydWUgYmVmb3JlIGl0IGlzIHNhdmVkLCB0aGUgZGVsYXkgdGltZSBpcyByZW5ld2FsXHJcbiAgICAgICAgICogWW91IGNhbiBzcGVjaWZ5IHRoZSBkZWxheSB0aW1lIGJ5IHNlbmRpbmcgYSBudW1iZXIuXHJcbiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufE51bWJlcn0gZGVsYXkgSWYgdHJ1ZSwgQWRkIHN0YWNrIHdpdGhvdXQgZGVsYXkgdGltZS5cclxuICAgICAgICAgKi9cclxuICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGVsYXkpIHtcclxuICAgICAgICAgICAgX3cuc2V0VGltZW91dChjb3JlLl9yZXNvdXJjZXNTdGF0ZUNoYW5nZS5iaW5kKGNvcmUpKTtcclxuICAgICAgICAgICAgY29uc3QgdGltZSA9IHR5cGVvZiBkZWxheSA9PT0gJ251bWJlcicgPyAoZGVsYXkgPiAwID8gZGVsYXkgOiAwKSA6ICghZGVsYXkgPyAwIDogZGVsYXlUaW1lKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmICghdGltZSB8fCBwdXNoRGVsYXkpIHtcclxuICAgICAgICAgICAgICAgIF93LmNsZWFyVGltZW91dChwdXNoRGVsYXkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHVzaFN0YWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBwdXNoRGVsYXkgPSBfdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIF93LmNsZWFyVGltZW91dChwdXNoRGVsYXkpO1xyXG4gICAgICAgICAgICAgICAgcHVzaERlbGF5ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIHB1c2hTdGFjaygpO1xyXG4gICAgICAgICAgICB9LCB0aW1lKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gVW5kbyBmdW5jdGlvblxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHVuZG86IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKHN0YWNrSW5kZXggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBzdGFja0luZGV4LS07XHJcbiAgICAgICAgICAgICAgICBzZXRDb250ZW50c0Zyb21TdGFjaygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFJlZG8gZnVuY3Rpb25cclxuICAgICAgICAgKi9cclxuICAgICAgICByZWRvOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggLSAxID4gc3RhY2tJbmRleCkge1xyXG4gICAgICAgICAgICAgICAgc3RhY2tJbmRleCsrO1xyXG4gICAgICAgICAgICAgICAgc2V0Q29udGVudHNGcm9tU3RhY2soKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBHbyB0byB0aGUgaGlzdG9yeSBzdGFjayBmb3IgdGhhdCBpbmRleC5cclxuICAgICAgICAgKiBJZiBcImluZGV4XCIgaXMgLTEsIGdvIHRvIHRoZSBsYXN0IHN0YWNrXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZ286IGZ1bmN0aW9uIChpbmRleCkge1xyXG4gICAgICAgICAgICBzdGFja0luZGV4ID0gaW5kZXggPCAwID8gKHN0YWNrLmxlbmd0aCAtIDEpIDogaW5kZXg7XHJcbiAgICAgICAgICAgIHNldENvbnRlbnRzRnJvbVN0YWNrKCk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEdldCB0aGUgY3VycmVudCBoaXN0b3J5IHN0YWNrIGluZGV4LlxyXG4gICAgICAgICAqIEByZXR1cm5zIHtOdW1iZXJ9IEN1cnJlbnQgU3RhY2sgaW5kZXhcclxuICAgICAgICAgKi9cclxuICAgICAgICBnZXRDdXJyZW50SW5kZXg6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHN0YWNrSW5kZXg7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gUmVzZXQgdGhlIGhpc3Rvcnkgb2JqZWN0XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcmVzZXQ6IGZ1bmN0aW9uIChpZ25vcmVDaGFuZ2VFdmVudCkge1xyXG4gICAgICAgICAgICBpZiAodW5kbykgdW5kby5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgdHJ1ZSk7XHJcbiAgICAgICAgICAgIGlmIChyZWRvKSByZWRvLnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCB0cnVlKTtcclxuICAgICAgICAgICAgY29yZS5fdmFyaWFibGUuaXNDaGFuZ2VkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmIChjb3JlLmNvbnRleHQudG9vbC5zYXZlKSBjb3JlLmNvbnRleHQudG9vbC5zYXZlLnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCB0cnVlKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHN0YWNrLnNwbGljZSgwKTtcclxuICAgICAgICAgICAgc3RhY2tJbmRleCA9IDA7XHJcblxyXG4gICAgICAgICAgICAvLyBwdXNoU3RhY2tcclxuICAgICAgICAgICAgc3RhY2tbc3RhY2tJbmRleF0gPSB7XHJcbiAgICAgICAgICAgICAgICBjb250ZW50czogY29yZS5nZXRDb250ZW50cyh0cnVlKSxcclxuICAgICAgICAgICAgICAgIHM6IHtcclxuICAgICAgICAgICAgICAgICAgICBwYXRoOiBbMCwgMF0sXHJcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiAwXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZToge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IFswLCAwXSxcclxuICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IDBcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGlmICghaWdub3JlQ2hhbmdlRXZlbnQpIGNoYW5nZSgpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBSZXNldCB0aGUgZGlzYWJsZWQgc3RhdGUgb2YgdGhlIGJ1dHRvbnMgdG8gZml0IHRoZSBjdXJyZW50IHN0YWNrLlxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX3Jlc2V0Q2FjaGluZ0J1dHRvbjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBlZGl0b3IgPSBjb3JlLmNvbnRleHQuZWxlbWVudDtcclxuICAgICAgICAgICAgdW5kbyA9IGNvcmUuY29udGV4dC50b29sLnVuZG87XHJcbiAgICAgICAgICAgIHJlZG8gPSBjb3JlLmNvbnRleHQudG9vbC5yZWRvO1xyXG5cclxuICAgICAgICAgICAgaWYgKHN0YWNrSW5kZXggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIGlmICh1bmRvKSB1bmRvLnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIGlmIChyZWRvICYmIHN0YWNrSW5kZXggPT09IHN0YWNrLmxlbmd0aCAtIDEpIHJlZG8uc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgY29yZS5fdmFyaWFibGUuaXNDaGFuZ2VkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29yZS5jb250ZXh0LnRvb2wuc2F2ZSkgY29yZS5jb250ZXh0LnRvb2wuc2F2ZS5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhY2tJbmRleCA9PT0gc3RhY2subGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlZG8pIHJlZG8uc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsIHRydWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFJlbW92ZSBhbGwgc3RhY2tzIGFuZCByZW1vdmUgdGhlIHRpbWVvdXQgZnVuY3Rpb24uXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfZGVzdHJveTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAocHVzaERlbGF5KSBfdy5jbGVhclRpbWVvdXQocHVzaERlbGF5KTtcclxuICAgICAgICAgICAgc3RhY2sgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn0iLCIndXNlIHN0cmljdCc7XHJcblxyXG5pbXBvcnQgJy4vYXNzZXRzL2Nzcy9zdW5lZGl0b3IuY3NzJztcclxuaW1wb3J0ICcuL2Fzc2V0cy9jc3Mvc3VuZWRpdG9yLWNvbnRlbnRzLmNzcyc7XHJcblxyXG5pbXBvcnQgcGx1Z2lucyBmcm9tICcuL3BsdWdpbnMnO1xyXG5pbXBvcnQgc3VuZWRpdG9yIGZyb20gJy4vc3VuZWRpdG9yJztcclxuXHJcbmlmICghd2luZG93LlNVTkVESVRPUikge1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdywgJ1NVTkVESVRPUicsIHtcclxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxyXG4gICAgICAgIHZhbHVlOiBzdW5lZGl0b3IuaW5pdCh7XHJcbiAgICAgICAgICAgIHBsdWdpbnM6IHBsdWdpbnNcclxuICAgICAgICB9KVxyXG4gICAgfSk7XHJcbn0iLCIvKlxyXG4gKiB3eXNpd3lnIHdlYiBlZGl0b3JcclxuICpcclxuICogc3VuZWRpdG9yLmpzXHJcbiAqIENvcHlyaWdodCAyMDE3IEppSG9uZyBMZWUuXHJcbiAqIE1JVCBsaWNlbnNlLlxyXG4gKi9cclxuJ3VzZSBzdHJpY3QnO1xyXG5cclxuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcclxuICAgIGlmICh0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlLmV4cG9ydHMgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBnbG9iYWwuZG9jdW1lbnQgP1xyXG4gICAgICAgICAgICBmYWN0b3J5KGdsb2JhbCwgdHJ1ZSkgOlxyXG4gICAgICAgICAgICBmdW5jdGlvbiAodykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF3LmRvY3VtZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTVU5FRElUT1JfTU9EVUxFUyBhIHdpbmRvdyB3aXRoIGEgZG9jdW1lbnQnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWN0b3J5KHcpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBmYWN0b3J5KGdsb2JhbCk7XHJcbiAgICB9XHJcbn0odHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiB0aGlzLCBmdW5jdGlvbiAod2luZG93LCBub0dsb2JhbCkge1xyXG4gICAgY29uc3QgY29tcG9uZW50ID0ge1xyXG4gICAgICAgIG5hbWU6ICdjb21wb25lbnQnLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBDcmVhdGUgYSBjb250YWluZXIgZm9yIHRoZSByZXNpemluZyBjb21wb25lbnQgYW5kIGluc2VydCB0aGUgZWxlbWVudC5cclxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGNvdmVyIENvdmVyIGVsZW1lbnQgKEZJR1VSRSlcclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gY2xhc3NOYW1lIENsYXNzIG5hbWUgb2YgY29udGFpbmVyIChmaXhlZDogc2UtY29tcG9uZW50KVxyXG4gICAgICAgICAqIEByZXR1cm5zIHtFbGVtZW50fSBDcmVhdGVkIGNvbnRhaW5lciBlbGVtZW50XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgc2V0X2NvbnRhaW5lcjogZnVuY3Rpb24gKGNvdmVyLCBjbGFzc05hbWUpIHtcclxuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy51dGlsLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xyXG4gICAgICAgICAgICBjb250YWluZXIuY2xhc3NOYW1lID0gJ3NlLWNvbXBvbmVudCAnICsgY2xhc3NOYW1lO1xyXG4gICAgICAgICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChjb3Zlcik7XHJcbiAgICBcclxuICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lcjtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQ292ZXIgdGhlIHRhcmdldCBlbGVtZW50IHdpdGggYSBGSUdVUkUgZWxlbWVudC5cclxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgVGFyZ2V0IGVsZW1lbnRcclxuICAgICAgICAgKi9cclxuICAgICAgICBzZXRfY292ZXI6IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvdmVyID0gdGhpcy51dGlsLmNyZWF0ZUVsZW1lbnQoJ0ZJR1VSRScpO1xyXG4gICAgICAgICAgICBjb3Zlci5hcHBlbmRDaGlsZChlbGVtZW50KTtcclxuICAgIFxyXG4gICAgICAgICAgICByZXR1cm4gY292ZXI7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFJldHVybiBIVE1MIHN0cmluZyBvZiBjYXB0aW9uKEZJR0NBUFRJT04pIGVsZW1lbnRcclxuICAgICAgICAgKiBAcmV0dXJucyB7U3RyaW5nfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNyZWF0ZV9jYXB0aW9uOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhcHRpb24gPSB0aGlzLnV0aWwuY3JlYXRlRWxlbWVudCgnRklHQ0FQVElPTicpO1xyXG4gICAgICAgICAgICBjYXB0aW9uLnNldEF0dHJpYnV0ZSgnY29udGVudGVkaXRhYmxlJywgdHJ1ZSk7XHJcbiAgICAgICAgICAgIGNhcHRpb24uaW5uZXJIVE1MID0gJzxkaXY+JyArIHRoaXMubGFuZy5kaWFsb2dCb3guY2FwdGlvbiArICc8L2Rpdj4nO1xyXG4gICAgICAgICAgICByZXR1cm4gY2FwdGlvbjtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGlmICh0eXBlb2Ygbm9HbG9iYWwgPT09IHR5cGVvZiB1bmRlZmluZWQpIHtcclxuICAgICAgICBpZiAoIXdpbmRvdy5TVU5FRElUT1JfTU9EVUxFUykge1xyXG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCAnU1VORURJVE9SX01PRFVMRVMnLCB7XHJcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHZhbHVlOiB7fVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1VORURJVE9SX01PRFVMRVMsICdjb21wb25lbnQnLCB7XHJcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXHJcbiAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgdmFsdWU6IGNvbXBvbmVudFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjb21wb25lbnQ7XHJcbn0pKTsiLCIvKlxyXG4gKiB3eXNpd3lnIHdlYiBlZGl0b3JcclxuICpcclxuICogc3VuZWRpdG9yLmpzXHJcbiAqIENvcHlyaWdodCAyMDE3IEppSG9uZyBMZWUuXHJcbiAqIE1JVCBsaWNlbnNlLlxyXG4gKi9cclxuJ3VzZSBzdHJpY3QnO1xyXG5cclxuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcclxuICAgIGlmICh0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlLmV4cG9ydHMgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBnbG9iYWwuZG9jdW1lbnQgP1xyXG4gICAgICAgICAgICBmYWN0b3J5KGdsb2JhbCwgdHJ1ZSkgOlxyXG4gICAgICAgICAgICBmdW5jdGlvbiAodykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF3LmRvY3VtZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTVU5FRElUT1JfTU9EVUxFUyBhIHdpbmRvdyB3aXRoIGEgZG9jdW1lbnQnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWN0b3J5KHcpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBmYWN0b3J5KGdsb2JhbCk7XHJcbiAgICB9XHJcbn0odHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiB0aGlzLCBmdW5jdGlvbiAod2luZG93LCBub0dsb2JhbCkge1xyXG4gICAgY29uc3QgcmVzaXppbmcgPSB7XHJcbiAgICAgICAgbmFtZTogJ3Jlc2l6aW5nJyxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQ29uc3RydWN0b3JcclxuICAgICAgICAgKiBSZXF1aXJlIGNvbnRleHQgcHJvcGVydGllcyB3aGVuIHJlc2l6aW5nIG1vZHVsZVxyXG4gICAgICAgICAgICBpbnB1dFg6IEVsZW1lbnQsXHJcbiAgICAgICAgICAgIGlucHV0WTogRWxlbWVudCxcclxuICAgICAgICAgICAgX2NvbnRhaW5lcjogbnVsbCxcclxuICAgICAgICAgICAgX2NvdmVyOiBudWxsLFxyXG4gICAgICAgICAgICBfZWxlbWVudDogbnVsbCxcclxuICAgICAgICAgICAgX2VsZW1lbnRfdzogMSxcclxuICAgICAgICAgICAgX2VsZW1lbnRfaDogMSxcclxuICAgICAgICAgICAgX2VsZW1lbnRfbDogMCxcclxuICAgICAgICAgICAgX2VsZW1lbnRfdDogMCxcclxuICAgICAgICAgICAgX2RlZmF1bHRTaXplWDogJ2F1dG8nLFxyXG4gICAgICAgICAgICBfZGVmYXVsdFNpemVZOiAnYXV0bycsXHJcbiAgICAgICAgICAgIF9vcmlnaW5fdzogY29yZS5vcHRpb25zLmltYWdlV2lkdGggPT09ICdhdXRvJyA/ICcnIDogY29yZS5vcHRpb25zLmltYWdlV2lkdGgsXHJcbiAgICAgICAgICAgIF9vcmlnaW5faDogY29yZS5vcHRpb25zLmltYWdlSGVpZ2h0ID09PSAnYXV0bycgPyAnJyA6IGNvcmUub3B0aW9ucy5pbWFnZUhlaWdodCxcclxuICAgICAgICAgICAgX3Byb3BvcnRpb25DaGVja2VkOiB0cnVlLFxyXG4gICAgICAgICAgICAvLyAtLSBzZWxlY3QgZnVuY3Rpb24gLS1cclxuICAgICAgICAgICAgX3Jlc2l6aW5nOiBjb3JlLm9wdGlvbnMuaW1hZ2VSZXNpemluZyxcclxuICAgICAgICAgICAgX3Jlc2l6ZURvdEhpZGU6ICFjb3JlLm9wdGlvbnMuaW1hZ2VIZWlnaHRTaG93LFxyXG4gICAgICAgICAgICBfcm90YXRpb246IGNvcmUub3B0aW9ucy5pbWFnZVJvdGF0aW9uLFxyXG4gICAgICAgICAgICBfb25seVBlcmNlbnRhZ2U6IGNvcmUub3B0aW9ucy5pbWFnZVNpemVPbmx5UGVyY2VudGFnZSxcclxuICAgICAgICAgICAgX3JhdGlvOiBmYWxzZSxcclxuICAgICAgICAgICAgX3JhdGlvWDogMSxcclxuICAgICAgICAgICAgX3JhdGlvWTogMVxyXG4gICAgICAgICAgICBfY2FwdGlvblNob3c6IHRydWUsXHJcbiAgICAgICAgICAgIC8vIC0tIHdoZW4gdXNlZCBjYXB0aW9uIChfY2FwdGlvblNob3c6IHRydWUpIC0tXHJcbiAgICAgICAgICAgIF9jYXB0aW9uOiBudWxsLFxyXG4gICAgICAgICAgICBfY2FwdGlvbkNoZWNrZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBjYXB0aW9uQ2hlY2tFbDogbnVsbCxcclxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY29yZSBDb3JlIG9iamVjdCBcclxuICAgICAgICAgKi9cclxuICAgICAgICBhZGQ6IGZ1bmN0aW9uIChjb3JlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGljb25zID0gY29yZS5pY29ucztcclxuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IGNvcmUuY29udGV4dDtcclxuICAgICAgICAgICAgY29udGV4dC5yZXNpemluZyA9IHtcclxuICAgICAgICAgICAgICAgIF9yZXNpemVDbGllbnRYOiAwLFxyXG4gICAgICAgICAgICAgICAgX3Jlc2l6ZUNsaWVudFk6IDAsXHJcbiAgICAgICAgICAgICAgICBfcmVzaXplX3BsdWdpbjogJycsXHJcbiAgICAgICAgICAgICAgICBfcmVzaXplX3c6IDAsXHJcbiAgICAgICAgICAgICAgICBfcmVzaXplX2g6IDAsXHJcbiAgICAgICAgICAgICAgICBfb3JpZ2luX3c6IDAsXHJcbiAgICAgICAgICAgICAgICBfb3JpZ2luX2g6IDAsXHJcbiAgICAgICAgICAgICAgICBfcm90YXRlVmVydGljYWw6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgX3Jlc2l6ZV9kaXJlY3Rpb246ICcnLFxyXG4gICAgICAgICAgICAgICAgX21vdmVfcGF0aDogbnVsbCxcclxuICAgICAgICAgICAgICAgIF9pc0NoYW5nZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBhbGlnbkljb25zOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFzaWM6IGljb25zLmFsaWduX2p1c3RpZnksXHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogaWNvbnMuYWxpZ25fbGVmdCxcclxuICAgICAgICAgICAgICAgICAgICByaWdodDogaWNvbnMuYWxpZ25fcmlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgY2VudGVyOiBpY29ucy5hbGlnbl9jZW50ZXJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgIFxyXG4gICAgICAgICAgICAvKiogcmVzaXplIGNvbnRyb2xsZXIsIGJ1dHRvbiAqL1xyXG4gICAgICAgICAgICBsZXQgcmVzaXplX2Rpdl9jb250YWluZXIgPSB0aGlzLnNldENvbnRyb2xsZXJfcmVzaXplKGNvcmUpO1xyXG4gICAgICAgICAgICBjb250ZXh0LnJlc2l6aW5nLnJlc2l6ZUNvbnRhaW5lciA9IHJlc2l6ZV9kaXZfY29udGFpbmVyO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGNvbnRleHQucmVzaXppbmcucmVzaXplRGl2ID0gcmVzaXplX2Rpdl9jb250YWluZXIucXVlcnlTZWxlY3RvcignLnNlLW1vZGFsLXJlc2l6ZScpO1xyXG4gICAgICAgICAgICBjb250ZXh0LnJlc2l6aW5nLnJlc2l6ZURvdCA9IHJlc2l6ZV9kaXZfY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy5zZS1yZXNpemUtZG90Jyk7XHJcbiAgICAgICAgICAgIGNvbnRleHQucmVzaXppbmcucmVzaXplRGlzcGxheSA9IHJlc2l6ZV9kaXZfY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy5zZS1yZXNpemUtZGlzcGxheScpO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGxldCByZXNpemVfYnV0dG9uID0gdGhpcy5zZXRDb250cm9sbGVyX2J1dHRvbihjb3JlKTtcclxuICAgICAgICAgICAgY29udGV4dC5yZXNpemluZy5yZXNpemVCdXR0b24gPSByZXNpemVfYnV0dG9uO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGxldCByZXNpemVfaGFuZGxlcyA9IGNvbnRleHQucmVzaXppbmcucmVzaXplSGFuZGxlcyA9IGNvbnRleHQucmVzaXppbmcucmVzaXplRG90LnF1ZXJ5U2VsZWN0b3JBbGwoJ3NwYW4nKTtcclxuICAgICAgICAgICAgY29udGV4dC5yZXNpemluZy5yZXNpemVCdXR0b25Hcm91cCA9IHJlc2l6ZV9idXR0b24ucXVlcnlTZWxlY3RvcignLl9zZV9yZXNpemluZ19idG5fZ3JvdXAnKTtcclxuICAgICAgICAgICAgY29udGV4dC5yZXNpemluZy5yb3RhdGlvbkJ1dHRvbnMgPSByZXNpemVfYnV0dG9uLnF1ZXJ5U2VsZWN0b3JBbGwoJy5fc2VfcmVzaXppbmdfYnRuX2dyb3VwIC5fc2Vfcm90YXRpb24nKTtcclxuICAgICAgICAgICAgY29udGV4dC5yZXNpemluZy5wZXJjZW50YWdlQnV0dG9ucyA9IHJlc2l6ZV9idXR0b24ucXVlcnlTZWxlY3RvckFsbCgnLl9zZV9yZXNpemluZ19idG5fZ3JvdXAgLl9zZV9wZXJjZW50YWdlJyk7XHJcbiAgICBcclxuICAgICAgICAgICAgY29udGV4dC5yZXNpemluZy5hbGlnbk1lbnUgPSByZXNpemVfYnV0dG9uLnF1ZXJ5U2VsZWN0b3IoJy5zZS1yZXNpemluZy1hbGlnbi1saXN0Jyk7XHJcbiAgICAgICAgICAgIGNvbnRleHQucmVzaXppbmcuYWxpZ25NZW51TGlzdCA9IGNvbnRleHQucmVzaXppbmcuYWxpZ25NZW51LnF1ZXJ5U2VsZWN0b3JBbGwoJ2J1dHRvbicpO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGNvbnRleHQucmVzaXppbmcuYWxpZ25CdXR0b24gPSByZXNpemVfYnV0dG9uLnF1ZXJ5U2VsZWN0b3IoJy5fc2VfcmVzaXppbmdfYWxpZ25fYnV0dG9uJyk7XHJcbiAgICAgICAgICAgIGNvbnRleHQucmVzaXppbmcuYXV0b1NpemVCdXR0b24gPSByZXNpemVfYnV0dG9uLnF1ZXJ5U2VsZWN0b3IoJy5fc2VfcmVzaXppbmdfYnRuX2dyb3VwIC5fc2VfYXV0b19zaXplJyk7XHJcbiAgICAgICAgICAgIGNvbnRleHQucmVzaXppbmcuY2FwdGlvbkJ1dHRvbiA9IHJlc2l6ZV9idXR0b24ucXVlcnlTZWxlY3RvcignLl9zZV9yZXNpemluZ19jYXB0aW9uX2J1dHRvbicpO1xyXG4gICAgXHJcbiAgICAgICAgICAgIC8qKiBhZGQgZXZlbnQgbGlzdGVuZXJzICovXHJcbiAgICAgICAgICAgIHJlc2l6ZV9kaXZfY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGZ1bmN0aW9uIChlKSB7IGUucHJldmVudERlZmF1bHQoKTsgfSk7XHJcbiAgICAgICAgICAgIHJlc2l6ZV9oYW5kbGVzWzBdLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMub25Nb3VzZURvd25fcmVzaXplX2hhbmRsZS5iaW5kKGNvcmUpKTtcclxuICAgICAgICAgICAgcmVzaXplX2hhbmRsZXNbMV0uYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5vbk1vdXNlRG93bl9yZXNpemVfaGFuZGxlLmJpbmQoY29yZSkpO1xyXG4gICAgICAgICAgICByZXNpemVfaGFuZGxlc1syXS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLm9uTW91c2VEb3duX3Jlc2l6ZV9oYW5kbGUuYmluZChjb3JlKSk7XHJcbiAgICAgICAgICAgIHJlc2l6ZV9oYW5kbGVzWzNdLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMub25Nb3VzZURvd25fcmVzaXplX2hhbmRsZS5iaW5kKGNvcmUpKTtcclxuICAgICAgICAgICAgcmVzaXplX2hhbmRsZXNbNF0uYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5vbk1vdXNlRG93bl9yZXNpemVfaGFuZGxlLmJpbmQoY29yZSkpO1xyXG4gICAgICAgICAgICByZXNpemVfaGFuZGxlc1s1XS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLm9uTW91c2VEb3duX3Jlc2l6ZV9oYW5kbGUuYmluZChjb3JlKSk7XHJcbiAgICAgICAgICAgIHJlc2l6ZV9oYW5kbGVzWzZdLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMub25Nb3VzZURvd25fcmVzaXplX2hhbmRsZS5iaW5kKGNvcmUpKTtcclxuICAgICAgICAgICAgcmVzaXplX2hhbmRsZXNbN10uYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5vbk1vdXNlRG93bl9yZXNpemVfaGFuZGxlLmJpbmQoY29yZSkpO1xyXG4gICAgICAgICAgICByZXNpemVfYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbkNsaWNrX3Jlc2l6ZUJ1dHRvbi5iaW5kKGNvcmUpKTtcclxuICAgIFxyXG4gICAgICAgICAgICAvKiogYXBwZW5kIGh0bWwgKi9cclxuICAgICAgICAgICAgY29udGV4dC5lbGVtZW50LnJlbGF0aXZlLmFwcGVuZENoaWxkKHJlc2l6ZV9kaXZfY29udGFpbmVyKTtcclxuICAgICAgICAgICAgY29udGV4dC5lbGVtZW50LnJlbGF0aXZlLmFwcGVuZENoaWxkKHJlc2l6ZV9idXR0b24pO1xyXG4gICAgXHJcbiAgICAgICAgICAgIC8qKiBlbXB0eSBtZW1vcnkgKi9cclxuICAgICAgICAgICAgcmVzaXplX2Rpdl9jb250YWluZXIgPSBudWxsLCByZXNpemVfYnV0dG9uID0gbnVsbCwgcmVzaXplX2hhbmRsZXMgPSBudWxsO1xyXG4gICAgICAgIH0sXHJcbiAgICBcclxuICAgICAgICAvKiogcmVzaXplIGNvbnRyb2xsZXIsIGJ1dHRvbiAoaW1hZ2UsIGlmcmFtZSwgdmlkZW8pICovXHJcbiAgICAgICAgc2V0Q29udHJvbGxlcl9yZXNpemU6IGZ1bmN0aW9uIChjb3JlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc2l6ZV9jb250YWluZXIgPSBjb3JlLnV0aWwuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXNpemVfY29udGFpbmVyLmNsYXNzTmFtZSA9ICdzZS1jb250cm9sbGVyIHNlLXJlc2l6aW5nLWNvbnRhaW5lcic7XHJcbiAgICAgICAgICAgIHJlc2l6ZV9jb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgcmVzaXplX2NvbnRhaW5lci5pbm5lckhUTUwgPSAnJyArXHJcbiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLW1vZGFsLXJlc2l6ZVwiPjwvZGl2PicgK1xyXG4gICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1yZXNpemUtZG90XCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwidGxcIj48L3NwYW4+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwidHJcIj48L3NwYW4+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwiYmxcIj48L3NwYW4+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwiYnJcIj48L3NwYW4+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwibHdcIj48L3NwYW4+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwidGhcIj48L3NwYW4+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwicndcIj48L3NwYW4+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwiYmhcIj48L3NwYW4+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1yZXNpemUtZGlzcGxheVwiPjwvZGl2PicgK1xyXG4gICAgICAgICAgICAgICAgJzwvZGl2Pic7XHJcbiAgICBcclxuICAgICAgICAgICAgcmV0dXJuIHJlc2l6ZV9jb250YWluZXI7XHJcbiAgICAgICAgfSxcclxuICAgIFxyXG4gICAgICAgIHNldENvbnRyb2xsZXJfYnV0dG9uOiBmdW5jdGlvbiAoY29yZSkge1xyXG4gICAgICAgICAgICBjb25zdCBsYW5nID0gY29yZS5sYW5nO1xyXG4gICAgICAgICAgICBjb25zdCBpY29ucyA9IGNvcmUuaWNvbnM7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc2l6ZV9idXR0b24gPSBjb3JlLnV0aWwuY3JlYXRlRWxlbWVudChcIkRJVlwiKTtcclxuICAgIFxyXG4gICAgICAgICAgICByZXNpemVfYnV0dG9uLmNsYXNzTmFtZSA9IFwic2UtY29udHJvbGxlciBzZS1jb250cm9sbGVyLXJlc2l6aW5nXCI7XHJcbiAgICAgICAgICAgIHJlc2l6ZV9idXR0b24uaW5uZXJIVE1MID0gJycgK1xyXG4gICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1hcnJvdyBzZS1hcnJvdy11cFwiPjwvZGl2PicgK1xyXG4gICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1idG4tZ3JvdXAgX3NlX3Jlc2l6aW5nX2J0bl9ncm91cFwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWNvbW1hbmQ9XCJwZXJjZW50XCIgZGF0YS12YWx1ZT1cIjFcIiBjbGFzcz1cInNlLXRvb2x0aXAgX3NlX3BlcmNlbnRhZ2VcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJzxzcGFuPjEwMCU8L3NwYW4+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtaW5uZXJcIj48c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtdGV4dFwiPicgKyBsYW5nLmNvbnRyb2xsZXIucmVzaXplMTAwICsgJzwvc3Bhbj48L3NwYW4+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzwvYnV0dG9uPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWNvbW1hbmQ9XCJwZXJjZW50XCIgZGF0YS12YWx1ZT1cIjAuNzVcIiBjbGFzcz1cInNlLXRvb2x0aXAgX3NlX3BlcmNlbnRhZ2VcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJzxzcGFuPjc1JTwvc3Bhbj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC1pbm5lclwiPjxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC10ZXh0XCI+JyArIGxhbmcuY29udHJvbGxlci5yZXNpemU3NSArICc8L3NwYW4+PC9zcGFuPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1jb21tYW5kPVwicGVyY2VudFwiIGRhdGEtdmFsdWU9XCIwLjVcIiBjbGFzcz1cInNlLXRvb2x0aXAgX3NlX3BlcmNlbnRhZ2VcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJzxzcGFuPjUwJTwvc3Bhbj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC1pbm5lclwiPjxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC10ZXh0XCI+JyArIGxhbmcuY29udHJvbGxlci5yZXNpemU1MCArICc8L3NwYW4+PC9zcGFuPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1jb21tYW5kPVwiYXV0b1wiIGNsYXNzPVwic2UtYnRuIHNlLXRvb2x0aXAgX3NlX2F1dG9fc2l6ZVwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29ucy5hdXRvX3NpemUgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLWlubmVyXCI+PHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLXRleHRcIj4nICsgbGFuZy5jb250cm9sbGVyLmF1dG9TaXplICsgJzwvc3Bhbj48L3NwYW4+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzwvYnV0dG9uPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWNvbW1hbmQ9XCJyb3RhdGVcIiBkYXRhLXZhbHVlPVwiLTkwXCIgY2xhc3M9XCJzZS1idG4gc2UtdG9vbHRpcCBfc2Vfcm90YXRpb25cIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbnMucm90YXRlX2xlZnQgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLWlubmVyXCI+PHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLXRleHRcIj4nICsgbGFuZy5jb250cm9sbGVyLnJvdGF0ZUxlZnQgKyAnPC9zcGFuPjwvc3Bhbj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtY29tbWFuZD1cInJvdGF0ZVwiIGRhdGEtdmFsdWU9XCI5MFwiIGNsYXNzPVwic2UtYnRuIHNlLXRvb2x0aXAgX3NlX3JvdGF0aW9uXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb25zLnJvdGF0ZV9yaWdodCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtaW5uZXJcIj48c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtdGV4dFwiPicgKyBsYW5nLmNvbnRyb2xsZXIucm90YXRlUmlnaHQgKyAnPC9zcGFuPjwvc3Bhbj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXHJcbiAgICAgICAgICAgICAgICAnPC9kaXY+JyArXHJcbiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWJ0bi1ncm91cFwiIHN0eWxlPVwicGFkZGluZy10b3A6IDA7XCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtY29tbWFuZD1cIm1pcnJvclwiIGRhdGEtdmFsdWU9XCJoXCIgY2xhc3M9XCJzZS1idG4gc2UtdG9vbHRpcFwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29ucy5taXJyb3JfaG9yaXpvbnRhbCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtaW5uZXJcIj48c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtdGV4dFwiPicgKyBsYW5nLmNvbnRyb2xsZXIubWlycm9ySG9yaXpvbnRhbCArICc8L3NwYW4+PC9zcGFuPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1jb21tYW5kPVwibWlycm9yXCIgZGF0YS12YWx1ZT1cInZcIiBjbGFzcz1cInNlLWJ0biBzZS10b29sdGlwXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb25zLm1pcnJvcl92ZXJ0aWNhbCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtaW5uZXJcIj48c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtdGV4dFwiPicgKyBsYW5nLmNvbnRyb2xsZXIubWlycm9yVmVydGljYWwgKyAnPC9zcGFuPjwvc3Bhbj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtY29tbWFuZD1cIm9uYWxpZ25cIiBjbGFzcz1cInNlLWJ0biBzZS10b29sdGlwIF9zZV9yZXNpemluZ19hbGlnbl9idXR0b25cIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbnMuYWxpZ25fanVzdGlmeSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtaW5uZXJcIj48c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtdGV4dFwiPicgKyBsYW5nLnRvb2xiYXIuYWxpZ24gKyAnPC9zcGFuPjwvc3Bhbj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1idG4tZ3JvdXAtc3ViIHN1bi1lZGl0b3ItY29tbW9uIHNlLWxpc3QtbGF5ZXIgc2UtcmVzaXppbmctYWxpZ24tbGlzdFwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWxpc3QtaW5uZXJcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8dWwgY2xhc3M9XCJzZS1saXN0LWJhc2ljXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxsaT48YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInNlLWJ0bi1saXN0IHNlLXRvb2x0aXBcIiBkYXRhLWNvbW1hbmQ9XCJhbGlnblwiIGRhdGEtdmFsdWU9XCJiYXNpY1wiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29ucy5hbGlnbl9qdXN0aWZ5ICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC1pbm5lclwiPjxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC10ZXh0XCI+JyArIGxhbmcuZGlhbG9nQm94LmJhc2ljICsgJzwvc3Bhbj48L3NwYW4+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvYnV0dG9uPjwvbGk+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxsaT48YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInNlLWJ0bi1saXN0IHNlLXRvb2x0aXBcIiBkYXRhLWNvbW1hbmQ9XCJhbGlnblwiIGRhdGEtdmFsdWU9XCJsZWZ0XCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25zLmFsaWduX2xlZnQgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLWlubmVyXCI+PHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLXRleHRcIj4nICsgbGFuZy5kaWFsb2dCb3gubGVmdCArICc8L3NwYW4+PC9zcGFuPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L2J1dHRvbj48L2xpPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8bGk+PGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJzZS1idG4tbGlzdCBzZS10b29sdGlwXCIgZGF0YS1jb21tYW5kPVwiYWxpZ25cIiBkYXRhLXZhbHVlPVwiY2VudGVyXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25zLmFsaWduX2NlbnRlciArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtaW5uZXJcIj48c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtdGV4dFwiPicgKyBsYW5nLmRpYWxvZ0JveC5jZW50ZXIgKyAnPC9zcGFuPjwvc3Bhbj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9idXR0b24+PC9saT4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGxpPjxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic2UtYnRuLWxpc3Qgc2UtdG9vbHRpcFwiIGRhdGEtY29tbWFuZD1cImFsaWduXCIgZGF0YS12YWx1ZT1cInJpZ2h0XCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25zLmFsaWduX3JpZ2h0ICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC1pbm5lclwiPjxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC10ZXh0XCI+JyArIGxhbmcuZGlhbG9nQm94LnJpZ2h0ICsgJzwvc3Bhbj48L3NwYW4+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvYnV0dG9uPjwvbGk+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC91bD4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJzwvZGl2PicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1jb21tYW5kPVwiY2FwdGlvblwiIGNsYXNzPVwic2UtYnRuIHNlLXRvb2x0aXAgX3NlX3Jlc2l6aW5nX2NhcHRpb25fYnV0dG9uXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb25zLmNhcHRpb24gK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLWlubmVyXCI+PHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLXRleHRcIj4nICsgbGFuZy5kaWFsb2dCb3guY2FwdGlvbiArICc8L3NwYW4+PC9zcGFuPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1jb21tYW5kPVwicmV2ZXJ0XCIgY2xhc3M9XCJzZS1idG4gc2UtdG9vbHRpcFwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29ucy5yZXZlcnQgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLWlubmVyXCI+PHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLXRleHRcIj4nICsgbGFuZy5kaWFsb2dCb3gucmV2ZXJ0QnV0dG9uICsgJzwvc3Bhbj48L3NwYW4+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzwvYnV0dG9uPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWNvbW1hbmQ9XCJ1cGRhdGVcIiBjbGFzcz1cInNlLWJ0biBzZS10b29sdGlwXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb25zLm1vZGlmeSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtaW5uZXJcIj48c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtdGV4dFwiPicgKyBsYW5nLmNvbnRyb2xsZXIuZWRpdCArICc8L3NwYW4+PC9zcGFuPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1jb21tYW5kPVwiZGVsZXRlXCIgY2xhc3M9XCJzZS1idG4gc2UtdG9vbHRpcFwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29ucy5kZWxldGUgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLWlubmVyXCI+PHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLXRleHRcIj4nICsgbGFuZy5jb250cm9sbGVyLnJlbW92ZSArICc8L3NwYW4+PC9zcGFuPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nICtcclxuICAgICAgICAgICAgICAgICc8L2Rpdj4nO1xyXG4gICAgXHJcbiAgICAgICAgICAgIHJldHVybiByZXNpemVfYnV0dG9uO1xyXG4gICAgICAgIH0sXHJcbiAgICBcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gR2V0cyB0aGUgd2lkdGggc2l6ZVxyXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0UGx1Z2luIGNvbnRleHQgb2JqZWN0IG9mIHBsdWdpbiAoY29yZS5jb250ZXh0W3BsdWdpbl0pXHJcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IFRhcmdldCBlbGVtZW50XHJcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSBjb3ZlciBDb3ZlciBlbGVtZW50IChGSUdVUkUpXHJcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSBjb250YWluZXIgQ29udGFpbmVyIGVsZW1lbnQgKERJVi5zZS1jb21wb25lbnQpXHJcbiAgICAgICAgICogQHJldHVybnMge1N0cmluZ31cclxuICAgICAgICAgKi9cclxuICAgICAgICBfbW9kdWxlX2dldFNpemVYOiBmdW5jdGlvbiAoY29udGV4dFBsdWdpbiwgZWxlbWVudCwgY292ZXIsIGNvbnRhaW5lcikge1xyXG4gICAgICAgICAgICBpZiAoIWVsZW1lbnQpIGVsZW1lbnQgPSBjb250ZXh0UGx1Z2luLl9lbGVtZW50O1xyXG4gICAgICAgICAgICBpZiAoIWNvdmVyKSBjb3ZlciA9IGNvbnRleHRQbHVnaW4uX2NvdmVyO1xyXG4gICAgICAgICAgICBpZiAoIWNvbnRhaW5lcikgY29udGFpbmVyID0gY29udGV4dFBsdWdpbi5fY29udGFpbmVyO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGlmICghZWxlbWVudCkgcmV0dXJuICcnO1xyXG4gICAgXHJcbiAgICAgICAgICAgIHJldHVybiAhLyUkLy50ZXN0KGVsZW1lbnQuc3R5bGUud2lkdGgpID8gZWxlbWVudC5zdHlsZS53aWR0aCA6ICgoY29udGFpbmVyICYmIHRoaXMudXRpbC5nZXROdW1iZXIoY29udGFpbmVyLnN0eWxlLndpZHRoLCAyKSkgfHwgMTAwKSArICclJztcclxuICAgICAgICB9LFxyXG4gICAgXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEdldHMgdGhlIGhlaWdodCBzaXplXHJcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRQbHVnaW4gY29udGV4dCBvYmplY3Qgb2YgcGx1Z2luIChjb3JlLmNvbnRleHRbcGx1Z2luXSlcclxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgVGFyZ2V0IGVsZW1lbnRcclxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGNvdmVyIENvdmVyIGVsZW1lbnQgKEZJR1VSRSlcclxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGNvbnRhaW5lciBDb250YWluZXIgZWxlbWVudCAoRElWLnNlLWNvbXBvbmVudClcclxuICAgICAgICAgKiBAcmV0dXJucyB7U3RyaW5nfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9tb2R1bGVfZ2V0U2l6ZVk6IGZ1bmN0aW9uIChjb250ZXh0UGx1Z2luLCBlbGVtZW50LCBjb3ZlciwgY29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgIGlmICghZWxlbWVudCkgZWxlbWVudCA9IGNvbnRleHRQbHVnaW4uX2VsZW1lbnQ7XHJcbiAgICAgICAgICAgIGlmICghY292ZXIpIGNvdmVyID0gY29udGV4dFBsdWdpbi5fY292ZXI7XHJcbiAgICAgICAgICAgIGlmICghY29udGFpbmVyKSBjb250YWluZXIgPSBjb250ZXh0UGx1Z2luLl9jb250YWluZXI7XHJcbiAgICBcclxuICAgICAgICAgICAgaWYgKCFjb250YWluZXIgfHwgIWNvdmVyKSByZXR1cm4gKGVsZW1lbnQgJiYgZWxlbWVudC5zdHlsZS5oZWlnaHQpIHx8ICcnO1xyXG4gICAgXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnV0aWwuZ2V0TnVtYmVyKGNvdmVyLnN0eWxlLnBhZGRpbmdCb3R0b20sIDApID4gMCAmJiAhdGhpcy5jb250ZXh0LnJlc2l6aW5nLl9yb3RhdGVWZXJ0aWNhbCA/IGNvdmVyLnN0eWxlLmhlaWdodCA6ICghLyUkLy50ZXN0KGVsZW1lbnQuc3R5bGUuaGVpZ2h0KSB8fCAhLyUkLy50ZXN0KGVsZW1lbnQuc3R5bGUud2lkdGgpID8gZWxlbWVudC5zdHlsZS5oZWlnaHQgOiAoKGNvbnRhaW5lciAmJiB0aGlzLnV0aWwuZ2V0TnVtYmVyKGNvbnRhaW5lci5zdHlsZS5oZWlnaHQsIDIpKSB8fCAxMDApICsgJyUnKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQ2FsbGVkIGF0IHRoZSBcIm9wZW5Nb2RpZnlcIiB0byBwdXQgdGhlIHNpemUgb2YgdGhlIGN1cnJlbnQgdGFyZ2V0IGludG8gdGhlIHNpemUgaW5wdXQgZWxlbWVudC5cclxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFBsdWdpbiBjb250ZXh0IG9iamVjdCBvZiBwbHVnaW4gKGNvcmUuY29udGV4dFtwbHVnaW5dKVxyXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwbHVnaW5PYmogUGx1Z2luIG9iamVjdFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9tb2R1bGVfc2V0TW9kaWZ5SW5wdXRTaXplOiBmdW5jdGlvbiAoY29udGV4dFBsdWdpbiwgcGx1Z2luT2JqKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBlcmNlbnRhZ2VSb3RhdGlvbiA9IGNvbnRleHRQbHVnaW4uX29ubHlQZXJjZW50YWdlICYmIHRoaXMuY29udGV4dC5yZXNpemluZy5fcm90YXRlVmVydGljYWw7XHJcbiAgICAgICAgICAgIGNvbnRleHRQbHVnaW4ucHJvcG9ydGlvbi5jaGVja2VkID0gY29udGV4dFBsdWdpbi5fcHJvcG9ydGlvbkNoZWNrZWQgPSBjb250ZXh0UGx1Z2luLl9lbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1wcm9wb3J0aW9uJykgIT09ICdmYWxzZSc7XHJcbiAgICBcclxuICAgICAgICAgICAgbGV0IHggPSBwZXJjZW50YWdlUm90YXRpb24gPyAnJyA6IHRoaXMucGx1Z2lucy5yZXNpemluZy5fbW9kdWxlX2dldFNpemVYLmNhbGwodGhpcywgY29udGV4dFBsdWdpbik7XHJcbiAgICAgICAgICAgIGlmICh4ID09PSBjb250ZXh0UGx1Z2luLl9kZWZhdWx0U2l6ZVgpIHggPSAnJztcclxuICAgICAgICAgICAgaWYgKGNvbnRleHRQbHVnaW4uX29ubHlQZXJjZW50YWdlKSB4ID0gdGhpcy51dGlsLmdldE51bWJlcih4LCAyKTtcclxuICAgICAgICAgICAgY29udGV4dFBsdWdpbi5pbnB1dFgudmFsdWUgPSB4O1xyXG4gICAgICAgICAgICBwbHVnaW5PYmouc2V0SW5wdXRTaXplLmNhbGwodGhpcywgJ3gnKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmICghY29udGV4dFBsdWdpbi5fb25seVBlcmNlbnRhZ2UpIHtcclxuICAgICAgICAgICAgICAgIGxldCB5ID0gcGVyY2VudGFnZVJvdGF0aW9uID8gJycgOiB0aGlzLnBsdWdpbnMucmVzaXppbmcuX21vZHVsZV9nZXRTaXplWS5jYWxsKHRoaXMsIGNvbnRleHRQbHVnaW4pO1xyXG4gICAgICAgICAgICAgICAgaWYgKHkgPT09IGNvbnRleHRQbHVnaW4uX2RlZmF1bHRTaXplWSkgeSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbnRleHRQbHVnaW4uX29ubHlQZXJjZW50YWdlKSB5ID0gdGhpcy51dGlsLmdldE51bWJlcih5LCAyKTtcclxuICAgICAgICAgICAgICAgIGNvbnRleHRQbHVnaW4uaW5wdXRZLnZhbHVlID0geTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29udGV4dFBsdWdpbi5pbnB1dFguZGlzYWJsZWQgPSBwZXJjZW50YWdlUm90YXRpb24gPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgICAgICAgIGNvbnRleHRQbHVnaW4uaW5wdXRZLmRpc2FibGVkID0gcGVyY2VudGFnZVJvdGF0aW9uID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICAgICAgICBjb250ZXh0UGx1Z2luLnByb3BvcnRpb24uZGlzYWJsZWQgPSBwZXJjZW50YWdlUm90YXRpb24gPyB0cnVlIDogZmFsc2U7XHJcbiAgICBcclxuICAgICAgICAgICAgcGx1Z2luT2JqLnNldFJhdGlvLmNhbGwodGhpcyk7XHJcbiAgICAgICAgfSxcclxuICAgIFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBJdCBpcyBjYWxsZWQgaW4gXCJzZXRJbnB1dFNpemVcIiAoaW5wdXQgdGFnIGtleXVwRXZlbnQpLCBcclxuICAgICAgICAgKiBjaGVja3MgdGhlIHZhbHVlIGVudGVyZWQgaW4gdGhlIGlucHV0IHRhZywgXHJcbiAgICAgICAgICogY2FsY3VsYXRlcyB0aGUgcmF0aW8sIGFuZCBzZXRzIHRoZSBjYWxjdWxhdGVkIHZhbHVlIGluIHRoZSBpbnB1dCB0YWcgb2YgdGhlIG9wcG9zaXRlIHNpemUuXHJcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRQbHVnaW4gY29udGV4dCBvYmplY3Qgb2YgcGx1Z2luIChjb3JlLmNvbnRleHRbcGx1Z2luXSlcclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30geHkgJ3gnOiB3aWR0aCwgJ3knOiBoZWlnaHRcclxuICAgICAgICAgKi9cclxuICAgICAgICBfbW9kdWxlX3NldElucHV0U2l6ZTogZnVuY3Rpb24gKGNvbnRleHRQbHVnaW4sIHh5KSB7XHJcbiAgICAgICAgICAgIGlmIChjb250ZXh0UGx1Z2luLl9vbmx5UGVyY2VudGFnZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHh5ID09PSAneCcgJiYgY29udGV4dFBsdWdpbi5pbnB1dFgudmFsdWUgPiAxMDApIGNvbnRleHRQbHVnaW4uaW5wdXRYLnZhbHVlID0gMTAwO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgaWYgKGNvbnRleHRQbHVnaW4ucHJvcG9ydGlvbi5jaGVja2VkICYmIGNvbnRleHRQbHVnaW4uX3JhdGlvICYmIC9cXGQvLnRlc3QoY29udGV4dFBsdWdpbi5pbnB1dFgudmFsdWUpICYmIC9cXGQvLnRlc3QoY29udGV4dFBsdWdpbi5pbnB1dFkudmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB4VW5pdCA9IGNvbnRleHRQbHVnaW4uaW5wdXRYLnZhbHVlLnJlcGxhY2UoL1xcZCt8XFwuL2csICcnKSB8fCBjb250ZXh0UGx1Z2luLnNpemVVbml0O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeVVuaXQgPSBjb250ZXh0UGx1Z2luLmlucHV0WS52YWx1ZS5yZXBsYWNlKC9cXGQrfFxcLi9nLCAnJykgfHwgY29udGV4dFBsdWdpbi5zaXplVW5pdDtcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgaWYgKHhVbml0ICE9PSB5VW5pdCkgcmV0dXJuO1xyXG4gICAgXHJcbiAgICAgICAgICAgICAgICBjb25zdCBkZWMgPSB4VW5pdCA9PT0gJyUnID8gMiA6IDA7XHJcbiAgICBcclxuICAgICAgICAgICAgICAgIGlmICh4eSA9PT0gJ3gnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dFBsdWdpbi5pbnB1dFkudmFsdWUgPSB0aGlzLnV0aWwuZ2V0TnVtYmVyKGNvbnRleHRQbHVnaW4uX3JhdGlvWSAqIHRoaXMudXRpbC5nZXROdW1iZXIoY29udGV4dFBsdWdpbi5pbnB1dFgudmFsdWUsIGRlYyksIGRlYykgKyB5VW5pdDtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dFBsdWdpbi5pbnB1dFgudmFsdWUgPSB0aGlzLnV0aWwuZ2V0TnVtYmVyKGNvbnRleHRQbHVnaW4uX3JhdGlvWCAqIHRoaXMudXRpbC5nZXROdW1iZXIoY29udGV4dFBsdWdpbi5pbnB1dFkudmFsdWUsIGRlYyksIGRlYykgKyB4VW5pdDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICBcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gSXQgaXMgY2FsbGVkIGluIFwic2V0UmF0aW9cIiAoaW5wdXQgYW5kIHByb3BvcnRpb25DaGVjayB0YWdzIGNoYW5nZUV2ZW50KSwgXHJcbiAgICAgICAgICogY2hlY2tzIHRoZSB2YWx1ZSBvZiB0aGUgaW5wdXQgdGFnLCBjYWxjdWxhdGVzIHRoZSByYXRpbywgYW5kIHJlc2V0cyBpdCBpbiB0aGUgaW5wdXQgdGFnLlxyXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0UGx1Z2luIGNvbnRleHQgb2JqZWN0IG9mIHBsdWdpbiAoY29yZS5jb250ZXh0W3BsdWdpbl0pXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX21vZHVsZV9zZXRSYXRpbzogZnVuY3Rpb24gKGNvbnRleHRQbHVnaW4pIHtcclxuICAgICAgICAgICAgY29uc3QgeFZhbHVlID0gY29udGV4dFBsdWdpbi5pbnB1dFgudmFsdWU7XHJcbiAgICAgICAgICAgIGNvbnN0IHlWYWx1ZSA9IGNvbnRleHRQbHVnaW4uaW5wdXRZLnZhbHVlO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGlmIChjb250ZXh0UGx1Z2luLnByb3BvcnRpb24uY2hlY2tlZCAmJiAvXFxkKy8udGVzdCh4VmFsdWUpICYmIC9cXGQrLy50ZXN0KHlWYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHhVbml0ID0geFZhbHVlLnJlcGxhY2UoL1xcZCt8XFwuL2csICcnKSB8fCBjb250ZXh0UGx1Z2luLnNpemVVbml0O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeVVuaXQgPSB5VmFsdWUucmVwbGFjZSgvXFxkK3xcXC4vZywgJycpIHx8IGNvbnRleHRQbHVnaW4uc2l6ZVVuaXQ7XHJcbiAgICBcclxuICAgICAgICAgICAgICAgIGlmICh4VW5pdCAhPT0geVVuaXQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0UGx1Z2luLl9yYXRpbyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghY29udGV4dFBsdWdpbi5fcmF0aW8pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB4ID0gdGhpcy51dGlsLmdldE51bWJlcih4VmFsdWUsIDApO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHkgPSB0aGlzLnV0aWwuZ2V0TnVtYmVyKHlWYWx1ZSwgMCk7XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0UGx1Z2luLl9yYXRpbyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dFBsdWdpbi5fcmF0aW9YID0geCAvIHk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dFBsdWdpbi5fcmF0aW9ZID0geSAvIHg7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0UGx1Z2luLl9yYXRpbyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgIFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBSZXZlcnQgc2l6ZSBvZiBlbGVtZW50IHRvIG9yaWdpbiBzaXplIChwbHVnaW4uX29yaWdpbl93LCBwbHVnaW4uX29yaWdpbl9oKVxyXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0UGx1Z2luIGNvbnRleHQgb2JqZWN0IG9mIHBsdWdpbiAoY29yZS5jb250ZXh0W3BsdWdpbl0pXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX21vZHVsZV9zaXplUmV2ZXJ0OiBmdW5jdGlvbiAoY29udGV4dFBsdWdpbikge1xyXG4gICAgICAgICAgICBpZiAoY29udGV4dFBsdWdpbi5fb25seVBlcmNlbnRhZ2UpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRleHRQbHVnaW4uaW5wdXRYLnZhbHVlID0gY29udGV4dFBsdWdpbi5fb3JpZ2luX3cgPiAxMDAgPyAxMDAgOiBjb250ZXh0UGx1Z2luLl9vcmlnaW5fdztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnRleHRQbHVnaW4uaW5wdXRYLnZhbHVlID0gY29udGV4dFBsdWdpbi5fb3JpZ2luX3c7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0UGx1Z2luLmlucHV0WS52YWx1ZSA9IGNvbnRleHRQbHVnaW4uX29yaWdpbl9oO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgIFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBTYXZlIHRoZSBzaXplIGRhdGEgKGVsZW1lbnQuc2V0QXR0cmlidXRlKFwiZGF0YS1zaXplXCIpKVxyXG4gICAgICAgICAqIFVzZWQgYXQgdGhlIFwic2V0U2l6ZVwiIG1ldGhvZFxyXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0UGx1Z2luIGNvbnRleHQgb2JqZWN0IG9mIHBsdWdpbiAoY29yZS5jb250ZXh0W3BsdWdpbl0pXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX21vZHVsZV9zYXZlQ3VycmVudFNpemU6IGZ1bmN0aW9uIChjb250ZXh0UGx1Z2luKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHggPSB0aGlzLnBsdWdpbnMucmVzaXppbmcuX21vZHVsZV9nZXRTaXplWC5jYWxsKHRoaXMsIGNvbnRleHRQbHVnaW4pO1xyXG4gICAgICAgICAgICBjb25zdCB5ID0gdGhpcy5wbHVnaW5zLnJlc2l6aW5nLl9tb2R1bGVfZ2V0U2l6ZVkuY2FsbCh0aGlzLCBjb250ZXh0UGx1Z2luKTtcclxuICAgICAgICAgICAgY29udGV4dFBsdWdpbi5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtc2l6ZScsIHggKyAnLCcgKyB5KTtcclxuICAgICAgICAgICAgaWYgKCEhY29udGV4dFBsdWdpbi5fdmlkZW9SYXRpbykgY29udGV4dFBsdWdpbi5fdmlkZW9SYXRpbyA9IHk7XHJcbiAgICAgICAgfSxcclxuICAgIFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBDYWxsIHRoZSByZXNpemluZyBtb2R1bGVcclxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IHRhcmdldEVsZW1lbnQgUmVzaXppbmcgdGFyZ2V0IGVsZW1lbnRcclxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcGx1Z2luIFBsdWdpbiBuYW1lXHJcbiAgICAgICAgICogQHJldHVybnMge09iamVjdH0gU2l6ZSBvZiByZXNpemluZyBkaXYge3csIGgsIHQsIGx9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY2FsbF9jb250cm9sbGVyX3Jlc2l6ZTogZnVuY3Rpb24gKHRhcmdldEVsZW1lbnQsIHBsdWdpbikge1xyXG4gICAgICAgICAgICBjb25zdCBjb250ZXh0UmVzaXppbmcgPSB0aGlzLmNvbnRleHQucmVzaXppbmc7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHRQbHVnaW4gPSB0aGlzLmNvbnRleHRbcGx1Z2luXTtcclxuICAgICAgICAgICAgY29udGV4dFJlc2l6aW5nLl9yZXNpemVfcGx1Z2luID0gcGx1Z2luO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGNvbnN0IHJlc2l6ZUNvbnRhaW5lciA9IGNvbnRleHRSZXNpemluZy5yZXNpemVDb250YWluZXI7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc2l6ZURpdiA9IGNvbnRleHRSZXNpemluZy5yZXNpemVEaXY7XHJcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IHRoaXMudXRpbC5nZXRPZmZzZXQodGFyZ2V0RWxlbWVudCwgdGhpcy5jb250ZXh0LmVsZW1lbnQud3lzaXd5Z0ZyYW1lKTtcclxuICAgIFxyXG4gICAgICAgICAgICBjb25zdCBpc1ZlcnRpY2FsID0gY29udGV4dFJlc2l6aW5nLl9yb3RhdGVWZXJ0aWNhbCA9IC9eKDkwfDI3MCkkLy50ZXN0KE1hdGguYWJzKHRhcmdldEVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXJvdGF0ZScpKS50b1N0cmluZygpKTtcclxuICAgIFxyXG4gICAgICAgICAgICBjb25zdCB3ID0gaXNWZXJ0aWNhbCA/IHRhcmdldEVsZW1lbnQub2Zmc2V0SGVpZ2h0IDogdGFyZ2V0RWxlbWVudC5vZmZzZXRXaWR0aDtcclxuICAgICAgICAgICAgY29uc3QgaCA9IGlzVmVydGljYWwgPyB0YXJnZXRFbGVtZW50Lm9mZnNldFdpZHRoIDogdGFyZ2V0RWxlbWVudC5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHQgPSBvZmZzZXQudG9wO1xyXG4gICAgICAgICAgICBjb25zdCBsID0gb2Zmc2V0LmxlZnQgLSB0aGlzLmNvbnRleHQuZWxlbWVudC53eXNpd3lnRnJhbWUuc2Nyb2xsTGVmdDtcclxuICAgIFxyXG4gICAgICAgICAgICByZXNpemVDb250YWluZXIuc3R5bGUudG9wID0gdCArICdweCc7XHJcbiAgICAgICAgICAgIHJlc2l6ZUNvbnRhaW5lci5zdHlsZS5sZWZ0ID0gbCArICdweCc7XHJcbiAgICAgICAgICAgIHJlc2l6ZUNvbnRhaW5lci5zdHlsZS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgICAgICByZXNpemVDb250YWluZXIuc3R5bGUuaGVpZ2h0ID0gaCArICdweCc7XHJcbiAgICBcclxuICAgICAgICAgICAgcmVzaXplRGl2LnN0eWxlLnRvcCA9ICcwcHgnO1xyXG4gICAgICAgICAgICByZXNpemVEaXYuc3R5bGUubGVmdCA9ICcwcHgnO1xyXG4gICAgICAgICAgICByZXNpemVEaXYuc3R5bGUud2lkdGggPSAgdyArICdweCc7XHJcbiAgICAgICAgICAgIHJlc2l6ZURpdi5zdHlsZS5oZWlnaHQgPSAgaCArICdweCc7XHJcbiAgICBcclxuICAgICAgICAgICAgbGV0IGFsaWduID0gdGFyZ2V0RWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtYWxpZ24nKSB8fCAnYmFzaWMnO1xyXG4gICAgICAgICAgICBhbGlnbiA9IGFsaWduID09PSAnbm9uZScgPyAnYmFzaWMnIDogYWxpZ247XHJcbiAgICBcclxuICAgICAgICAgICAgLy8gdGV4dFxyXG4gICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnV0aWwuZ2V0UGFyZW50RWxlbWVudCh0YXJnZXRFbGVtZW50LCB0aGlzLnV0aWwuaXNDb21wb25lbnQpO1xyXG4gICAgICAgICAgICBjb25zdCBjb3ZlciA9IHRoaXMudXRpbC5nZXRQYXJlbnRFbGVtZW50KHRhcmdldEVsZW1lbnQsICdGSUdVUkUnKTtcclxuICAgICAgICAgICAgY29uc3QgZGlzcGxheVggPSB0aGlzLnBsdWdpbnMucmVzaXppbmcuX21vZHVsZV9nZXRTaXplWC5jYWxsKHRoaXMsIGNvbnRleHRQbHVnaW4sIHRhcmdldEVsZW1lbnQsIGNvdmVyLCBjb250YWluZXIpIHx8ICdhdXRvJztcclxuICAgICAgICAgICAgY29uc3QgZGlzcGxheVkgPSBjb250ZXh0UGx1Z2luLl9vbmx5UGVyY2VudGFnZSAmJiBwbHVnaW4gPT09ICdpbWFnZScgPyAnJyA6ICcsICcgKyAodGhpcy5wbHVnaW5zLnJlc2l6aW5nLl9tb2R1bGVfZ2V0U2l6ZVkuY2FsbCh0aGlzLCBjb250ZXh0UGx1Z2luLCB0YXJnZXRFbGVtZW50LCBjb3ZlciwgY29udGFpbmVyKSB8fCAnYXV0bycpO1xyXG4gICAgICAgICAgICB0aGlzLnV0aWwuY2hhbmdlVHh0KGNvbnRleHRSZXNpemluZy5yZXNpemVEaXNwbGF5LCB0aGlzLmxhbmcuZGlhbG9nQm94W2FsaWduXSArICcgKCcgKyBkaXNwbGF5WCArIGRpc3BsYXlZICsgJyknKTtcclxuICAgIFxyXG4gICAgICAgICAgICAvLyByZXNpemluZyBkaXNwbGF5XHJcbiAgICAgICAgICAgIGNvbnRleHRSZXNpemluZy5yZXNpemVCdXR0b25Hcm91cC5zdHlsZS5kaXNwbGF5ID0gY29udGV4dFBsdWdpbi5fcmVzaXppbmcgPyAnJyA6ICdub25lJztcclxuICAgICAgICAgICAgY29uc3QgcmVzaXplRG90U2hvdyA9IGNvbnRleHRQbHVnaW4uX3Jlc2l6aW5nICYmICFjb250ZXh0UGx1Z2luLl9yZXNpemVEb3RIaWRlICYmICFjb250ZXh0UGx1Z2luLl9vbmx5UGVyY2VudGFnZSA/ICdmbGV4JyA6ICdub25lJztcclxuICAgICAgICAgICAgY29uc3QgcmVzaXplSGFuZGxlcyA9IGNvbnRleHRSZXNpemluZy5yZXNpemVIYW5kbGVzO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gcmVzaXplSGFuZGxlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgcmVzaXplSGFuZGxlc1tpXS5zdHlsZS5kaXNwbGF5ID0gcmVzaXplRG90U2hvdztcclxuICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgIGlmIChjb250ZXh0UGx1Z2luLl9yZXNpemluZykge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgcm90YXRpb25zID0gY29udGV4dFJlc2l6aW5nLnJvdGF0aW9uQnV0dG9ucztcclxuICAgICAgICAgICAgICAgIHJvdGF0aW9uc1swXS5zdHlsZS5kaXNwbGF5ID0gcm90YXRpb25zWzFdLnN0eWxlLmRpc3BsYXkgPSBjb250ZXh0UGx1Z2luLl9yb3RhdGlvbiA/ICcnIDogJ25vbmUnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgLy8gYWxpZ24gaWNvblxyXG4gICAgICAgICAgICBjb25zdCBhbGlnbkxpc3QgPSBjb250ZXh0UmVzaXppbmcuYWxpZ25NZW51TGlzdDtcclxuICAgICAgICAgICAgdGhpcy51dGlsLmNoYW5nZUVsZW1lbnQoY29udGV4dFJlc2l6aW5nLmFsaWduQnV0dG9uLmZpcnN0RWxlbWVudENoaWxkLCBjb250ZXh0UmVzaXppbmcuYWxpZ25JY29uc1thbGlnbl0pO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gYWxpZ25MaXN0Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWxpZ25MaXN0W2ldLmdldEF0dHJpYnV0ZSgnZGF0YS12YWx1ZScpID09PSBhbGlnbikgdGhpcy51dGlsLmFkZENsYXNzKGFsaWduTGlzdFtpXSwgJ29uJyk7XHJcbiAgICAgICAgICAgICAgICBlbHNlIHRoaXMudXRpbC5yZW1vdmVDbGFzcyhhbGlnbkxpc3RbaV0sICdvbicpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgLy8gcGVyY2VudGFnZSBhY3RpdmVcclxuICAgICAgICAgICAgY29uc3QgcEJ1dHRvbnMgPSBjb250ZXh0UmVzaXppbmcucGVyY2VudGFnZUJ1dHRvbnM7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gLyUkLy50ZXN0KHRhcmdldEVsZW1lbnQuc3R5bGUud2lkdGgpICYmIC8lJC8udGVzdChjb250YWluZXIuc3R5bGUud2lkdGgpID8gKHRoaXMudXRpbC5nZXROdW1iZXIoY29udGFpbmVyLnN0eWxlLndpZHRoLCAwKSAvIDEwMCkgKyAnJyA6ICcnIDtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHBCdXR0b25zLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocEJ1dHRvbnNbaV0uZ2V0QXR0cmlidXRlKCdkYXRhLXZhbHVlJykgPT09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51dGlsLmFkZENsYXNzKHBCdXR0b25zW2ldLCAnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXRpbC5yZW1vdmVDbGFzcyhwQnV0dG9uc1tpXSwgJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgLy8gY2FwdGlvbiBkaXNwbGF5LCBhY3RpdmVcclxuICAgICAgICAgICAgaWYgKCFjb250ZXh0UGx1Z2luLl9jYXB0aW9uU2hvdykge1xyXG4gICAgICAgICAgICAgICAgY29udGV4dFJlc2l6aW5nLmNhcHRpb25CdXR0b24uc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnRleHRSZXNpemluZy5jYXB0aW9uQnV0dG9uLnN0eWxlLmRpc3BsYXkgPSAnJztcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnV0aWwuZ2V0Q2hpbGRFbGVtZW50KHRhcmdldEVsZW1lbnQucGFyZW50Tm9kZSwgJ2ZpZ2NhcHRpb24nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXRpbC5hZGRDbGFzcyhjb250ZXh0UmVzaXppbmcuY2FwdGlvbkJ1dHRvbiwgJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHRQbHVnaW4uX2NhcHRpb25DaGVja2VkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51dGlsLnJlbW92ZUNsYXNzKGNvbnRleHRSZXNpemluZy5jYXB0aW9uQnV0dG9uLCAnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dFBsdWdpbi5fY2FwdGlvbkNoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmVzaXplQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgYWRkT2Zmc2V0ID0ge2xlZnQ6IDAsIHRvcDogNTB9O1xyXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmlmcmFtZSkge1xyXG4gICAgICAgICAgICAgICAgYWRkT2Zmc2V0LmxlZnQgLT0gdGhpcy5jb250ZXh0LmVsZW1lbnQud3lzaXd5Z0ZyYW1lLnBhcmVudEVsZW1lbnQub2Zmc2V0TGVmdDtcclxuICAgICAgICAgICAgICAgIGFkZE9mZnNldC50b3AgLT0gdGhpcy5jb250ZXh0LmVsZW1lbnQud3lzaXd5Z0ZyYW1lLnBhcmVudEVsZW1lbnQub2Zmc2V0VG9wO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldENvbnRyb2xsZXJQb3NpdGlvbihjb250ZXh0UmVzaXppbmcucmVzaXplQnV0dG9uLCByZXNpemVDb250YWluZXIsICdib3R0b20nLCBhZGRPZmZzZXQpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJzT24ocmVzaXplQ29udGFpbmVyLCBjb250ZXh0UmVzaXppbmcucmVzaXplQnV0dG9uLCB0aGlzLnV0aWwuc2V0RGlzYWJsZWRCdXR0b25zLmJpbmQodGhpcywgZmFsc2UsIHRoaXMucmVzaXppbmdEaXNhYmxlZEJ1dHRvbnMpLCB0YXJnZXRFbGVtZW50LCBwbHVnaW4pO1xyXG4gICAgICAgICAgICB0aGlzLnV0aWwuc2V0RGlzYWJsZWRCdXR0b25zKHRydWUsIHRoaXMucmVzaXppbmdEaXNhYmxlZEJ1dHRvbnMpO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGNvbnRleHRSZXNpemluZy5fcmVzaXplX3cgPSB3O1xyXG4gICAgICAgICAgICBjb250ZXh0UmVzaXppbmcuX3Jlc2l6ZV9oID0gaDtcclxuICAgIFxyXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5TaXplID0gKHRhcmdldEVsZW1lbnQuZ2V0QXR0cmlidXRlKCdvcmlnaW4tc2l6ZScpIHx8ICcnKS5zcGxpdCgnLCcpO1xyXG4gICAgICAgICAgICBjb250ZXh0UmVzaXppbmcuX29yaWdpbl93ID0gb3JpZ2luU2l6ZVswXSB8fCB0YXJnZXRFbGVtZW50Lm5hdHVyYWxXaWR0aDtcclxuICAgICAgICAgICAgY29udGV4dFJlc2l6aW5nLl9vcmlnaW5faCA9IG9yaWdpblNpemVbMV0gfHwgdGFyZ2V0RWxlbWVudC5uYXR1cmFsSGVpZ2h0O1xyXG4gICAgXHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICB3OiB3LFxyXG4gICAgICAgICAgICAgICAgaDogaCxcclxuICAgICAgICAgICAgICAgIHQ6IHQsXHJcbiAgICAgICAgICAgICAgICBsOiBsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSxcclxuICAgIFxyXG4gICAgICAgIF9jbG9zZUFsaWduTWVudTogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIE9wZW4gYWxpZ24gc3VibWVudSBvZiBtb2R1bGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBvcGVuQWxpZ25NZW51OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFsaWduQnV0dG9uID0gdGhpcy5jb250ZXh0LnJlc2l6aW5nLmFsaWduQnV0dG9uO1xyXG4gICAgICAgICAgICB0aGlzLnV0aWwuYWRkQ2xhc3MoYWxpZ25CdXR0b24sICdvbicpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRleHQucmVzaXppbmcuYWxpZ25NZW51LnN0eWxlLnRvcCA9IChhbGlnbkJ1dHRvbi5vZmZzZXRUb3AgKyBhbGlnbkJ1dHRvbi5vZmZzZXRIZWlnaHQpICsgJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnJlc2l6aW5nLmFsaWduTWVudS5zdHlsZS5sZWZ0ID0gKGFsaWduQnV0dG9uLm9mZnNldExlZnQgLSBhbGlnbkJ1dHRvbi5vZmZzZXRXaWR0aCAvIDIpICsgJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnJlc2l6aW5nLmFsaWduTWVudS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMucmVzaXppbmcuX2Nsb3NlQWxpZ25NZW51ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51dGlsLnJlbW92ZUNsYXNzKHRoaXMuY29udGV4dC5yZXNpemluZy5hbGlnbkJ1dHRvbiwgJ29uJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQucmVzaXppbmcuYWxpZ25NZW51LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZURvY0V2ZW50KCdjbGljaycsIHRoaXMucGx1Z2lucy5yZXNpemluZy5fY2xvc2VBbGlnbk1lbnUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLnJlc2l6aW5nLl9jbG9zZUFsaWduTWVudSA9IG51bGw7XHJcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKTtcclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLmFkZERvY0V2ZW50KCdjbGljaycsIHRoaXMucGx1Z2lucy5yZXNpemluZy5fY2xvc2VBbGlnbk1lbnUpO1xyXG4gICAgICAgIH0sXHJcbiAgICBcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQ2xpY2sgZXZlbnQgb2YgcmVzaXppbmcgdG9vbGJhclxyXG4gICAgICAgICAqIFBlcmZvcm1zIHRoZSBhY3Rpb24gb2YgdGhlIGNsaWNrZWQgdG9vbGJhciBidXR0b24uXHJcbiAgICAgICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBlIEV2ZW50IG9iamVjdFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG9uQ2xpY2tfcmVzaXplQnV0dG9uOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGUudGFyZ2V0O1xyXG4gICAgICAgICAgICBjb25zdCBjb21tYW5kID0gdGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1jb21tYW5kJykgfHwgdGFyZ2V0LnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLWNvbW1hbmQnKTtcclxuICAgIFxyXG4gICAgICAgICAgICBpZiAoIWNvbW1hbmQpIHJldHVybjtcclxuICAgIFxyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdmFsdWUnKSB8fCB0YXJnZXQucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtdmFsdWUnKTtcclxuICAgIFxyXG4gICAgICAgICAgICBjb25zdCBwbHVnaW5OYW1lID0gdGhpcy5jb250ZXh0LnJlc2l6aW5nLl9yZXNpemVfcGx1Z2luO1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Q29udGV4dCA9IHRoaXMuY29udGV4dFtwbHVnaW5OYW1lXTtcclxuICAgICAgICAgICAgY29uc3QgY29udGV4dEVsID0gY3VycmVudENvbnRleHQuX2VsZW1lbnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRNb2R1bGUgPSB0aGlzLnBsdWdpbnNbcGx1Z2luTmFtZV07XHJcbiAgICBcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5wbHVnaW5zLnJlc2l6aW5nLl9jbG9zZUFsaWduTWVudSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLnJlc2l6aW5nLl9jbG9zZUFsaWduTWVudSgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbW1hbmQgPT09ICdvbmFsaWduJykgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgc3dpdGNoIChjb21tYW5kKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdhdXRvJzpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnMucmVzaXppbmcucmVzZXRUcmFuc2Zvcm0uY2FsbCh0aGlzLCBjb250ZXh0RWwpO1xyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRNb2R1bGUuc2V0QXV0b1NpemUuY2FsbCh0aGlzKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdENvbXBvbmVudChjb250ZXh0RWwsIHBsdWdpbk5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAncGVyY2VudCc6XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBlcmNlbnRZID0gdGhpcy5wbHVnaW5zLnJlc2l6aW5nLl9tb2R1bGVfZ2V0U2l6ZVkuY2FsbCh0aGlzLCBjdXJyZW50Q29udGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udGV4dC5yZXNpemluZy5fcm90YXRlVmVydGljYWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGVyY2VudGFnZSA9IGNvbnRleHRFbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcGVyY2VudGFnZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGVyY2VudGFnZSkgcGVyY2VudFkgPSBwZXJjZW50YWdlLnNwbGl0KCcsJylbMV07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLnJlc2l6aW5nLnJlc2V0VHJhbnNmb3JtLmNhbGwodGhpcywgY29udGV4dEVsKTtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50TW9kdWxlLnNldFBlcmNlbnRTaXplLmNhbGwodGhpcywgKHZhbHVlICogMTAwKSwgKHRoaXMudXRpbC5nZXROdW1iZXIocGVyY2VudFksIDApID09PSBudWxsIHx8ICEvJSQvLnRlc3QocGVyY2VudFkpKSA/ICcnIDogcGVyY2VudFkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0Q29tcG9uZW50KGNvbnRleHRFbCwgcGx1Z2luTmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdtaXJyb3InOlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHIgPSBjb250ZXh0RWwuZ2V0QXR0cmlidXRlKCdkYXRhLXJvdGF0ZScpIHx8ICcwJztcclxuICAgICAgICAgICAgICAgICAgICBsZXQgeCA9IGNvbnRleHRFbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcm90YXRlWCcpIHx8ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB5ID0gY29udGV4dEVsLmdldEF0dHJpYnV0ZSgnZGF0YS1yb3RhdGVZJykgfHwgJyc7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCh2YWx1ZSA9PT0gJ2gnICYmICF0aGlzLmNvbnRleHQucmVzaXppbmcuX3JvdGF0ZVZlcnRpY2FsKSB8fCAodmFsdWUgPT09ICd2JyAmJiB0aGlzLmNvbnRleHQucmVzaXppbmcuX3JvdGF0ZVZlcnRpY2FsKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB5ID0geSA/ICcnIDogJzE4MCc7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgeCA9IHggPyAnJyA6ICcxODAnO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0RWwuc2V0QXR0cmlidXRlKCdkYXRhLXJvdGF0ZVgnLCB4KTtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0RWwuc2V0QXR0cmlidXRlKCdkYXRhLXJvdGF0ZVknLCB5KTtcclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnMucmVzaXppbmcuX3NldFRyYW5zRm9ybShjb250ZXh0RWwsIHIsIHgsIHkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAncm90YXRlJzpcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250ZXh0UmVzaXppbmcgPSB0aGlzLmNvbnRleHQucmVzaXppbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2xvcGUgPSAoY29udGV4dEVsLmdldEF0dHJpYnV0ZSgnZGF0YS1yb3RhdGUnKSAqIDEpICsgKHZhbHVlICogMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVnID0gdGhpcy5fdy5NYXRoLmFicyhzbG9wZSkgPj0gMzYwID8gMCA6IHNsb3BlO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHRFbC5zZXRBdHRyaWJ1dGUoJ2RhdGEtcm90YXRlJywgZGVnKTtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0UmVzaXppbmcuX3JvdGF0ZVZlcnRpY2FsID0gL14oOTB8MjcwKSQvLnRlc3QodGhpcy5fdy5NYXRoLmFicyhkZWcpLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy5yZXNpemluZy5zZXRUcmFuc2Zvcm1TaXplLmNhbGwodGhpcywgY29udGV4dEVsLCBudWxsLCBudWxsKTtcclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdENvbXBvbmVudChjb250ZXh0RWwsIHBsdWdpbk5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnb25hbGlnbic6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLnJlc2l6aW5nLm9wZW5BbGlnbk1lbnUuY2FsbCh0aGlzKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBjYXNlICdhbGlnbic6XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWxpZ25WYWx1ZSA9IHZhbHVlID09PSAnYmFzaWMnID8gJ25vbmUnIDogdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudE1vZHVsZS5zZXRBbGlnbi5jYWxsKHRoaXMsIGFsaWduVmFsdWUsIG51bGwsIG51bGwsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0Q29tcG9uZW50KGNvbnRleHRFbCwgcGx1Z2luTmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdjYXB0aW9uJzpcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYXB0aW9uID0gIWN1cnJlbnRDb250ZXh0Ll9jYXB0aW9uQ2hlY2tlZDtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50TW9kdWxlLm9wZW5Nb2RpZnkuY2FsbCh0aGlzLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q29udGV4dC5fY2FwdGlvbkNoZWNrZWQgPSBjdXJyZW50Q29udGV4dC5jYXB0aW9uQ2hlY2tFbC5jaGVja2VkID0gY2FwdGlvbjtcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRNb2R1bGUudXBkYXRlX2ltYWdlLmNhbGwodGhpcywgZmFsc2UsIGZhbHNlLCBmYWxzZSk7XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2FwdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjYXB0aW9uVGV4dCA9IHRoaXMudXRpbC5nZXRDaGlsZEVsZW1lbnQoY3VycmVudENvbnRleHQuX2NhcHRpb24sIGZ1bmN0aW9uIChjdXJyZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudC5ub2RlVHlwZSA9PT0gMztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjYXB0aW9uVGV4dCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudENvbnRleHQuX2NhcHRpb24uZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2UoY2FwdGlvblRleHQsIDAsIGNhcHRpb25UZXh0LCBjYXB0aW9uVGV4dC50ZXh0Q29udGVudC5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyc09mZigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0Q29tcG9uZW50KGNvbnRleHRFbCwgcGx1Z2luTmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRNb2R1bGUub3Blbk1vZGlmeS5jYWxsKHRoaXMsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAncmV2ZXJ0JzpcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50TW9kdWxlLnNldE9yaWdpblNpemUuY2FsbCh0aGlzKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdENvbXBvbmVudChjb250ZXh0RWwsIHBsdWdpbk5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAndXBkYXRlJzpcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50TW9kdWxlLm9wZW5Nb2RpZnkuY2FsbCh0aGlzKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJzT2ZmKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdkZWxldGUnOlxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRNb2R1bGUuZGVzdHJveS5jYWxsKHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgLy8gaGlzdG9yeSBzdGFja1xyXG4gICAgICAgICAgICB0aGlzLmhpc3RvcnkucHVzaChmYWxzZSk7XHJcbiAgICAgICAgfSxcclxuICAgIFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBJbml0aWFsaXplIHRoZSB0cmFuc2Zvcm0gc3R5bGUgKHJvdGF0aW9uKSBvZiB0aGUgZWxlbWVudC5cclxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgVGFyZ2V0IGVsZW1lbnRcclxuICAgICAgICAgKi9cclxuICAgICAgICByZXNldFRyYW5zZm9ybTogZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2l6ZSA9IChlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1zaXplJykgfHwgZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtb3JpZ2luJykgfHwgJycpLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5yZXNpemluZy5fcm90YXRlVmVydGljYWwgPSBmYWxzZTtcclxuICAgIFxyXG4gICAgICAgICAgICBlbGVtZW50LnN0eWxlLm1heFdpZHRoID0gJyc7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gJyc7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUudHJhbnNmb3JtT3JpZ2luID0gJyc7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLXJvdGF0ZScsICcnKTtcclxuICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtcm90YXRlWCcsICcnKTtcclxuICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtcm90YXRlWScsICcnKTtcclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbdGhpcy5jb250ZXh0LnJlc2l6aW5nLl9yZXNpemVfcGx1Z2luXS5zZXRTaXplLmNhbGwodGhpcywgc2l6ZVswXSA/IHNpemVbMF0gOiAnYXV0bycsIHNpemVbMV0gPyBzaXplWzFdIDogJycsIHRydWUpO1xyXG4gICAgICAgIH0sXHJcbiAgICBcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gU2V0IHRoZSB0cmFuc2Zvcm0gc3R5bGUgKHJvdGF0aW9uKSBvZiB0aGUgZWxlbWVudC5cclxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgVGFyZ2V0IGVsZW1lbnRcclxuICAgICAgICAgKiBAcGFyYW0ge051bWJlcnxudWxsfSB3aWR0aCBFbGVtZW50J3Mgd2lkdGggc2l6ZVxyXG4gICAgICAgICAqIEBwYXJhbSB7TnVtYmVyfG51bGx9IGhlaWdodCBFbGVtZW50J3MgaGVpZ2h0IHNpemVcclxuICAgICAgICAgKi9cclxuICAgICAgICBzZXRUcmFuc2Zvcm1TaXplOiBmdW5jdGlvbiAoZWxlbWVudCwgd2lkdGgsIGhlaWdodCkge1xyXG4gICAgICAgICAgICBsZXQgcGVyY2VudGFnZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXBlcmNlbnRhZ2UnKTtcclxuICAgICAgICAgICAgY29uc3QgaXNWZXJ0aWNhbCA9IHRoaXMuY29udGV4dC5yZXNpemluZy5fcm90YXRlVmVydGljYWw7XHJcbiAgICAgICAgICAgIGNvbnN0IGRlZyA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXJvdGF0ZScpICogMTtcclxuICAgICAgICAgICAgbGV0IHRyYW5zT3JpZ2luID0gJyc7XHJcbiAgICBcclxuICAgICAgICAgICAgaWYgKHBlcmNlbnRhZ2UgJiYgIWlzVmVydGljYWwpIHtcclxuICAgICAgICAgICAgICAgIHBlcmNlbnRhZ2UgPSBwZXJjZW50YWdlLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgICAgICAgICBpZiAocGVyY2VudGFnZVswXSA9PT0gJ2F1dG8nICYmIHBlcmNlbnRhZ2VbMV0gPT09ICdhdXRvJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luc1t0aGlzLmNvbnRleHQucmVzaXppbmcuX3Jlc2l6ZV9wbHVnaW5dLnNldEF1dG9TaXplLmNhbGwodGhpcyk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luc1t0aGlzLmNvbnRleHQucmVzaXppbmcuX3Jlc2l6ZV9wbHVnaW5dLnNldFBlcmNlbnRTaXplLmNhbGwodGhpcywgcGVyY2VudGFnZVswXSwgcGVyY2VudGFnZVsxXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb3ZlciA9IHRoaXMudXRpbC5nZXRQYXJlbnRFbGVtZW50KGVsZW1lbnQsICdGSUdVUkUnKTtcclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9mZnNldFcgPSB3aWR0aCB8fCBlbGVtZW50Lm9mZnNldFdpZHRoO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2V0SCA9IGhlaWdodCB8fCBlbGVtZW50Lm9mZnNldEhlaWdodDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHcgPSAoaXNWZXJ0aWNhbCA/IG9mZnNldEggOiBvZmZzZXRXKSArICdweCc7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBoID0gKGlzVmVydGljYWwgPyBvZmZzZXRXIDogb2Zmc2V0SCkgKyAncHgnO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zW3RoaXMuY29udGV4dC5yZXNpemluZy5fcmVzaXplX3BsdWdpbl0uY2FuY2VsUGVyY2VudEF0dHIuY2FsbCh0aGlzKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luc1t0aGlzLmNvbnRleHQucmVzaXppbmcuX3Jlc2l6ZV9wbHVnaW5dLnNldFNpemUuY2FsbCh0aGlzLCBvZmZzZXRXICsgJ3B4Jywgb2Zmc2V0SCArICdweCcsIHRydWUpO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICAgICAgY292ZXIuc3R5bGUud2lkdGggPSB3O1xyXG4gICAgICAgICAgICAgICAgY292ZXIuc3R5bGUuaGVpZ2h0ID0gKCEhdGhpcy5jb250ZXh0W3RoaXMuY29udGV4dC5yZXNpemluZy5fcmVzaXplX3BsdWdpbl0uX2NhcHRpb24gPyAnJyA6IGgpO1xyXG4gICAgXHJcbiAgICAgICAgICAgICAgICBpZiAoaXNWZXJ0aWNhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB0cmFuc1cgPSAob2Zmc2V0Vy8yKSArICdweCAnICsgKG9mZnNldFcvMikgKyAncHggMCc7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRyYW5zSCA9IChvZmZzZXRILzIpICsgJ3B4ICcgKyAob2Zmc2V0SC8yKSArICdweCAwJztcclxuICAgICAgICAgICAgICAgICAgICB0cmFuc09yaWdpbiA9IGRlZyA9PT0gOTAgfHwgZGVnID09PSAtMjcwID8gdHJhbnNIIDogdHJhbnNXO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgZWxlbWVudC5zdHlsZS50cmFuc2Zvcm1PcmlnaW4gPSB0cmFuc09yaWdpbjtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLnJlc2l6aW5nLl9zZXRUcmFuc0Zvcm0oZWxlbWVudCwgZGVnLnRvU3RyaW5nKCksIGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXJvdGF0ZVgnKSB8fCAnJywgZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcm90YXRlWScpIHx8ICcnKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmIChpc1ZlcnRpY2FsKSBlbGVtZW50LnN0eWxlLm1heFdpZHRoID0gJ25vbmUnO1xyXG4gICAgICAgICAgICBlbHNlIGVsZW1lbnQuc3R5bGUubWF4V2lkdGggPSAnJztcclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMucmVzaXppbmcuc2V0Q2FwdGlvblBvc2l0aW9uLmNhbGwodGhpcywgZWxlbWVudCk7XHJcbiAgICAgICAgfSxcclxuICAgIFxyXG4gICAgICAgIF9zZXRUcmFuc0Zvcm06IGZ1bmN0aW9uIChlbGVtZW50LCByLCB4LCB5KSB7XHJcbiAgICAgICAgICAgIGxldCB3aWR0aCA9IChlbGVtZW50Lm9mZnNldFdpZHRoIC0gZWxlbWVudC5vZmZzZXRIZWlnaHQpICogKC8tLy50ZXN0KHIpID8gMSA6IC0xKTtcclxuICAgICAgICAgICAgbGV0IHRyYW5zbGF0ZSA9ICcnO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGlmICgvWzEtOV0vLnRlc3QocikgJiYgKHggfHwgeSkpIHtcclxuICAgICAgICAgICAgICAgIHRyYW5zbGF0ZSA9IHggPyAnWScgOiAnWCc7XHJcbiAgICBcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAocikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJzkwJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlID0geCAmJiB5ID8gJ1gnIDogeSA/IHRyYW5zbGF0ZSA6ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICcyNzAnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCAqPSAtMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlID0geCAmJiB5ID8gJ1knIDogeCA/IHRyYW5zbGF0ZSA6ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICctOTAnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGUgPSB4ICYmIHkgPyAnWScgOiB4ID8gdHJhbnNsYXRlIDogJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJy0yNzAnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCAqPSAtMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlID0geCAmJiB5ID8gJ1gnIDogeSA/IHRyYW5zbGF0ZSA6ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGUgPSAnJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgIGlmIChyICUgMTgwID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50LnN0eWxlLm1heFdpZHRoID0gJyc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gJ3JvdGF0ZSgnICsgciArICdkZWcpJyArICh4ID8gJyByb3RhdGVYKCcgKyB4ICsgJ2RlZyknIDogJycpICsgKHkgPyAnIHJvdGF0ZVkoJyArIHkgKyAnZGVnKScgOiAnJykgKyAodHJhbnNsYXRlID8gJyB0cmFuc2xhdGUnICsgdHJhbnNsYXRlICsgJygnICsgd2lkdGggKyAncHgpJyA6ICcnKTtcclxuICAgICAgICB9LFxyXG4gICAgXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFRoZSBwb3NpdGlvbiBvZiB0aGUgY2FwdGlvbiBpcyBzZXQgYXV0b21hdGljYWxseS5cclxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgVGFyZ2V0IGVsZW1lbnQgKG5vdCBjYXB0aW9uIGVsZW1lbnQpXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgc2V0Q2FwdGlvblBvc2l0aW9uOiBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgICAgICBjb25zdCBmaWdjYXB0aW9uID0gdGhpcy51dGlsLmdldENoaWxkRWxlbWVudCh0aGlzLnV0aWwuZ2V0UGFyZW50RWxlbWVudChlbGVtZW50LCAnRklHVVJFJyksICdGSUdDQVBUSU9OJyk7XHJcbiAgICAgICAgICAgIGlmIChmaWdjYXB0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBmaWdjYXB0aW9uLnN0eWxlLm1hcmdpblRvcCA9ICh0aGlzLmNvbnRleHQucmVzaXppbmcuX3JvdGF0ZVZlcnRpY2FsID8gZWxlbWVudC5vZmZzZXRXaWR0aCAtIGVsZW1lbnQub2Zmc2V0SGVpZ2h0IDogMCkgKyAncHgnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgIFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBNb3VzZSBkb3duIGV2ZW50IG9mIHJlc2l6ZSBoYW5kbGVzXHJcbiAgICAgICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBlIEV2ZW50IG9iamVjdCBcclxuICAgICAgICAgKi9cclxuICAgICAgICBvbk1vdXNlRG93bl9yZXNpemVfaGFuZGxlOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjb25zdCBjb250ZXh0UmVzaXppbmcgPSB0aGlzLmNvbnRleHQucmVzaXppbmc7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IGNvbnRleHRSZXNpemluZy5fcmVzaXplX2RpcmVjdGlvbiA9IGUudGFyZ2V0LmNsYXNzTGlzdFswXTtcclxuICAgIFxyXG4gICAgICAgICAgICBjb250ZXh0UmVzaXppbmcuX3Jlc2l6ZUNsaWVudFggPSBlLmNsaWVudFg7XHJcbiAgICAgICAgICAgIGNvbnRleHRSZXNpemluZy5fcmVzaXplQ2xpZW50WSA9IGUuY2xpZW50WTtcclxuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmVsZW1lbnQucmVzaXplQmFja2dyb3VuZC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICAgICAgY29udGV4dFJlc2l6aW5nLnJlc2l6ZUJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICBjb250ZXh0UmVzaXppbmcucmVzaXplRGl2LnN0eWxlLmZsb2F0ID0gL2wvLnRlc3QoZGlyZWN0aW9uKSA/ICdyaWdodCcgOiAvci8udGVzdChkaXJlY3Rpb24pID8gJ2xlZnQnIDogJ25vbmUnO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGNvbnN0IGNsb3N1cmVGdW5jX2JpbmQgPSBmdW5jdGlvbiBjbG9zdXJlRnVuYyhlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZS50eXBlID09PSAna2V5ZG93bicgJiYgZS5rZXlDb2RlICE9PSAyNykgcmV0dXJuO1xyXG4gICAgXHJcbiAgICAgICAgICAgICAgICBjb25zdCBjaGFuZ2UgPSBjb250ZXh0UmVzaXppbmcuX2lzQ2hhbmdlO1xyXG4gICAgICAgICAgICAgICAgY29udGV4dFJlc2l6aW5nLl9pc0NoYW5nZSA9IGZhbHNlO1xyXG4gICAgXHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZURvY0V2ZW50KCdtb3VzZW1vdmUnLCByZXNpemluZ19lbGVtZW50X2JpbmQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVEb2NFdmVudCgnbW91c2V1cCcsIGNsb3N1cmVGdW5jX2JpbmQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVEb2NFdmVudCgna2V5ZG93bicsIGNsb3N1cmVGdW5jX2JpbmQpO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBpZiAoZS50eXBlID09PSAna2V5ZG93bicpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJzT2ZmKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmVsZW1lbnQucmVzaXplQmFja2dyb3VuZC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luc1t0aGlzLmNvbnRleHQucmVzaXppbmcuX3Jlc2l6ZV9wbHVnaW5dLmluaXQuY2FsbCh0aGlzKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZWxlbWVudCByZXNpemVcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnMucmVzaXppbmcuY2FuY2VsX2NvbnRyb2xsZXJfcmVzaXplLmNhbGwodGhpcywgZGlyZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBoaXN0b3J5IHN0YWNrXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoYW5nZSkgdGhpcy5oaXN0b3J5LnB1c2goZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LmJpbmQodGhpcyk7XHJcbiAgICBcclxuICAgICAgICAgICAgY29uc3QgcmVzaXppbmdfZWxlbWVudF9iaW5kID0gdGhpcy5wbHVnaW5zLnJlc2l6aW5nLnJlc2l6aW5nX2VsZW1lbnQuYmluZCh0aGlzLCBjb250ZXh0UmVzaXppbmcsIGRpcmVjdGlvbiwgdGhpcy5jb250ZXh0W2NvbnRleHRSZXNpemluZy5fcmVzaXplX3BsdWdpbl0pO1xyXG4gICAgICAgICAgICB0aGlzLmFkZERvY0V2ZW50KCdtb3VzZW1vdmUnLCByZXNpemluZ19lbGVtZW50X2JpbmQpO1xyXG4gICAgICAgICAgICB0aGlzLmFkZERvY0V2ZW50KCdtb3VzZXVwJywgY2xvc3VyZUZ1bmNfYmluZCk7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkRG9jRXZlbnQoJ2tleWRvd24nLCBjbG9zdXJlRnVuY19iaW5kKTtcclxuICAgICAgICB9LFxyXG4gICAgXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIE1vdXNlIG1vdmUgZXZlbnQgYWZ0ZXIgY2FsbCBcIm9uTW91c2VEb3duX3Jlc2l6ZV9oYW5kbGVcIiBvZiByZXNpemUgaGFuZGxlc1xyXG4gICAgICAgICAqIFRoZSBzaXplIG9mIHRoZSBtb2R1bGUncyBcImRpdlwiIGlzIGFkanVzdGVkIGFjY29yZGluZyB0byB0aGUgbW91c2UgbW92ZSBldmVudC5cclxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFJlc2l6aW5nIFwiY29yZS5jb250ZXh0LnJlc2l6aW5nXCIgb2JqZWN0IChiaW5kaW5nIGFyZ3VtZW50KVxyXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBkaXJlY3Rpb24gRGlyZWN0aW9uIChcInRsXCIsIFwidHJcIiwgXCJibFwiLCBcImJyXCIsIFwibHdcIiwgXCJ0aFwiLCBcInJ3XCIsIFwiYmhcIikgKGJpbmRpbmcgYXJndW1lbnQpXHJcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHBsdWdpbiBcImNvcmUuY29udGV4dFtjdXJyZW50UGx1Z2luXVwiIG9iamVjdCAoYmluZGluZyBhcmd1bWVudClcclxuICAgICAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGUgRXZlbnQgb2JqZWN0XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcmVzaXppbmdfZWxlbWVudDogZnVuY3Rpb24gKGNvbnRleHRSZXNpemluZywgZGlyZWN0aW9uLCBwbHVnaW4sIGUpIHtcclxuICAgICAgICAgICAgY29uc3QgY2xpZW50WCA9IGUuY2xpZW50WDtcclxuICAgICAgICAgICAgY29uc3QgY2xpZW50WSA9IGUuY2xpZW50WTtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgcmVzdWx0VyA9IHBsdWdpbi5fZWxlbWVudF93O1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0SCA9IHBsdWdpbi5fZWxlbWVudF9oO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGNvbnN0IHcgPSBwbHVnaW4uX2VsZW1lbnRfdyArICgvci8udGVzdChkaXJlY3Rpb24pID8gY2xpZW50WCAtIGNvbnRleHRSZXNpemluZy5fcmVzaXplQ2xpZW50WCA6IGNvbnRleHRSZXNpemluZy5fcmVzaXplQ2xpZW50WCAtIGNsaWVudFgpO1xyXG4gICAgICAgICAgICBjb25zdCBoID0gcGx1Z2luLl9lbGVtZW50X2ggKyAoL2IvLnRlc3QoZGlyZWN0aW9uKSA/IGNsaWVudFkgLSBjb250ZXh0UmVzaXppbmcuX3Jlc2l6ZUNsaWVudFkgOiBjb250ZXh0UmVzaXppbmcuX3Jlc2l6ZUNsaWVudFkgLSBjbGllbnRZKTtcclxuICAgICAgICAgICAgY29uc3Qgd2ggPSAoKHBsdWdpbi5fZWxlbWVudF9oIC8gcGx1Z2luLl9lbGVtZW50X3cpICogdyk7XHJcbiAgICBcclxuICAgICAgICAgICAgaWYgKC90Ly50ZXN0KGRpcmVjdGlvbikpIGNvbnRleHRSZXNpemluZy5yZXNpemVEaXYuc3R5bGUudG9wID0gKHBsdWdpbi5fZWxlbWVudF9oIC0gKC9oLy50ZXN0KGRpcmVjdGlvbikgPyBoIDogd2gpKSArICdweCc7XHJcbiAgICAgICAgICAgIGlmICgvbC8udGVzdChkaXJlY3Rpb24pKSBjb250ZXh0UmVzaXppbmcucmVzaXplRGl2LnN0eWxlLmxlZnQgPSAocGx1Z2luLl9lbGVtZW50X3cgLSB3KSArICdweCc7XHJcbiAgICBcclxuICAgICAgICAgICAgaWYgKC9yfGwvLnRlc3QoZGlyZWN0aW9uKSkge1xyXG4gICAgICAgICAgICAgICAgY29udGV4dFJlc2l6aW5nLnJlc2l6ZURpdi5zdHlsZS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0VyA9IHc7XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICBpZiAoL14odHxiKVteaF0kLy50ZXN0KGRpcmVjdGlvbikpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRleHRSZXNpemluZy5yZXNpemVEaXYuc3R5bGUuaGVpZ2h0ID0gd2ggKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0SCA9IHdoO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKC9eKHR8YiloJC8udGVzdChkaXJlY3Rpb24pKSB7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0UmVzaXppbmcucmVzaXplRGl2LnN0eWxlLmhlaWdodCA9IGggKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0SCA9IGg7XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICBjb250ZXh0UmVzaXppbmcuX3Jlc2l6ZV93ID0gcmVzdWx0VztcclxuICAgICAgICAgICAgY29udGV4dFJlc2l6aW5nLl9yZXNpemVfaCA9IHJlc3VsdEg7XHJcbiAgICAgICAgICAgIHRoaXMudXRpbC5jaGFuZ2VUeHQoY29udGV4dFJlc2l6aW5nLnJlc2l6ZURpc3BsYXksIHRoaXMuX3cuTWF0aC5yb3VuZChyZXN1bHRXKSArICcgeCAnICsgdGhpcy5fdy5NYXRoLnJvdW5kKHJlc3VsdEgpKTtcclxuICAgICAgICAgICAgY29udGV4dFJlc2l6aW5nLl9pc0NoYW5nZSA9IHRydWU7XHJcbiAgICAgICAgfSxcclxuICAgIFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBSZXNpemUgdGhlIGVsZW1lbnQgdG8gdGhlIHNpemUgb2YgdGhlIFwiZGl2XCIgYWRqdXN0ZWQgaW4gdGhlIFwicmVzaXppbmdfZWxlbWVudFwiIG1ldGhvZC5cclxuICAgICAgICAgKiBDYWxsZWQgYXQgdGhlIG1vdXNlLXVwIGV2ZW50IHJlZ2lzdGVyZWQgaW4gXCJvbk1vdXNlRG93bl9yZXNpemVfaGFuZGxlXCIuXHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGRpcmVjdGlvbiBEaXJlY3Rpb24gKFwidGxcIiwgXCJ0clwiLCBcImJsXCIsIFwiYnJcIiwgXCJsd1wiLCBcInRoXCIsIFwicndcIiwgXCJiaFwiKVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNhbmNlbF9jb250cm9sbGVyX3Jlc2l6ZTogZnVuY3Rpb24gKGRpcmVjdGlvbikge1xyXG4gICAgICAgICAgICBjb25zdCBpc1ZlcnRpY2FsID0gdGhpcy5jb250ZXh0LnJlc2l6aW5nLl9yb3RhdGVWZXJ0aWNhbDtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyc09mZigpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZWxlbWVudC5yZXNpemVCYWNrZ3JvdW5kLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICBcclxuICAgICAgICAgICAgbGV0IHcgPSB0aGlzLl93Lk1hdGgucm91bmQoaXNWZXJ0aWNhbCA/IHRoaXMuY29udGV4dC5yZXNpemluZy5fcmVzaXplX2ggOiB0aGlzLmNvbnRleHQucmVzaXppbmcuX3Jlc2l6ZV93KTtcclxuICAgICAgICAgICAgbGV0IGggPSB0aGlzLl93Lk1hdGgucm91bmQoaXNWZXJ0aWNhbCA/IHRoaXMuY29udGV4dC5yZXNpemluZy5fcmVzaXplX3cgOiB0aGlzLmNvbnRleHQucmVzaXppbmcuX3Jlc2l6ZV9oKTtcclxuICAgIFxyXG4gICAgICAgICAgICBpZiAoIWlzVmVydGljYWwgJiYgIS8lJC8udGVzdCh3KSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGFkZGluZyA9IDE2O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbGltaXQgPSB0aGlzLmNvbnRleHQuZWxlbWVudC53eXNpd3lnRnJhbWUuY2xpZW50V2lkdGggLSAocGFkZGluZyAqIDIpIC0gMjtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudXRpbC5nZXROdW1iZXIodywgMCkgPiBsaW1pdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGggPSB0aGlzLl93Lk1hdGgucm91bmQoKGggLyB3KSAqIGxpbWl0KTtcclxuICAgICAgICAgICAgICAgICAgICB3ID0gbGltaXQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICBjb25zdCBwbHVnaW5OYW1lID0gdGhpcy5jb250ZXh0LnJlc2l6aW5nLl9yZXNpemVfcGx1Z2luO1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbcGx1Z2luTmFtZV0uc2V0U2l6ZS5jYWxsKHRoaXMsIHcsIGgsIGZhbHNlLCBkaXJlY3Rpb24pO1xyXG4gICAgICAgICAgICBpZiAoaXNWZXJ0aWNhbCkgdGhpcy5wbHVnaW5zLnJlc2l6aW5nLnNldFRyYW5zZm9ybVNpemUuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHRbdGhpcy5jb250ZXh0LnJlc2l6aW5nLl9yZXNpemVfcGx1Z2luXS5fZWxlbWVudCwgdywgaCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdENvbXBvbmVudCh0aGlzLmNvbnRleHRbcGx1Z2luTmFtZV0uX2VsZW1lbnQsIHBsdWdpbk5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgaWYgKHR5cGVvZiBub0dsb2JhbCA9PT0gdHlwZW9mIHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGlmICghd2luZG93LlNVTkVESVRPUl9NT0RVTEVTKSB7XHJcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3csICdTVU5FRElUT1JfTU9EVUxFUycsIHtcclxuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgdmFsdWU6IHt9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVU5FRElUT1JfTU9EVUxFUywgJ3Jlc2l6aW5nJywge1xyXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIHZhbHVlOiByZXNpemluZ1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXNpemluZztcclxufSkpOyIsIi8qXHJcbiAqIHd5c2l3eWcgd2ViIGVkaXRvclxyXG4gKlxyXG4gKiBzdW5lZGl0b3IuanNcclxuICogQ29weXJpZ2h0IDIwMTcgSmlIb25nIExlZS5cclxuICogTUlUIGxpY2Vuc2UuXHJcbiAqL1xyXG4ndXNlIHN0cmljdCc7XHJcblxyXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xyXG4gICAgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUuZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGdsb2JhbC5kb2N1bWVudCA/XHJcbiAgICAgICAgICAgIGZhY3RvcnkoZ2xvYmFsLCB0cnVlKSA6XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICh3KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXcuZG9jdW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NVTkVESVRPUl9NT0RVTEVTIGEgd2luZG93IHdpdGggYSBkb2N1bWVudCcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhY3Rvcnkodyk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZhY3RvcnkoZ2xvYmFsKTtcclxuICAgIH1cclxufSh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IHRoaXMsIGZ1bmN0aW9uICh3aW5kb3csIG5vR2xvYmFsKSB7XHJcbiAgICBjb25zdCBmaWxlTWFuYWdlciA9IHtcclxuICAgICAgICBuYW1lOiAnZmlsZU1hbmFnZXInLFxyXG4gICAgICAgIF94bWxIdHRwOiBudWxsLFxyXG5cclxuICAgICAgICBfY2hlY2tNZWRpYUNvbXBvbmVudDogZnVuY3Rpb24gKHRhZykge1xyXG4gICAgICAgICAgICBpZiAoL0lNRy9pLnRlc3QodGFnKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICEvRklHVVJFL2kudGVzdCh0YWcucGFyZW50RWxlbWVudC5ub2RlTmFtZSkgfHwgIS9GSUdVUkUvaS50ZXN0KHRhZy5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQubm9kZU5hbWUpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKC9WSURFTy9pLnRlc3QodGFnKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICEvRklHVVJFL2kudGVzdCh0YWcucGFyZW50RWxlbWVudC5ub2RlTmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFVwbG9hZCB0aGUgZmlsZSB0byB0aGUgc2VydmVyLlxyXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cGxvYWRVcmwgVXBsb2FkIHNlcnZlciB1cmxcclxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdHxudWxsfSB1cGxvYWRIZWFkZXIgUmVxdWVzdCBoZWFkZXJcclxuICAgICAgICAgKiBAcGFyYW0ge0Zvcm1EYXRhfSBmb3JtRGF0YSBGb3JtRGF0YSBpbiBib2R5XHJcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbnxudWxsfSBjYWxsQmFjayBTdWNjZXNzIGNhbGwgYmFjayBmdW5jdGlvblxyXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb258bnVsbH0gZXJyb3JDYWxsQmFjayBFcnJvciBjYWxsIGJhY2sgZnVuY3Rpb25cclxuICAgICAgICAgKiBAZXhhbXBsZSB0aGlzLnBsdWdpbnMuZmlsZU1hbmFnZXIudXBsb2FkLmNhbGwodGhpcywgaW1hZ2VVcGxvYWRVcmwsIHRoaXMub3B0aW9ucy5pbWFnZVVwbG9hZEhlYWRlciwgZm9ybURhdGEsIHRoaXMucGx1Z2lucy5pbWFnZS5jYWxsQmFja19pbWdVcGxvYWQuYmluZCh0aGlzLCBpbmZvKSwgdGhpcy5mdW5jdGlvbnMub25JbWFnZVVwbG9hZEVycm9yKTtcclxuICAgICAgICAgKi9cclxuICAgICAgICB1cGxvYWQ6IGZ1bmN0aW9uICh1cGxvYWRVcmwsIHVwbG9hZEhlYWRlciwgZm9ybURhdGEsIGNhbGxCYWNrLCBlcnJvckNhbGxCYWNrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0xvYWRpbmcoKTtcclxuICAgICAgICAgICAgY29uc3QgZmlsZVBsdWdpbiA9IHRoaXMucGx1Z2lucy5maWxlTWFuYWdlcjtcclxuICAgICAgICAgICAgY29uc3QgeG1sSHR0cCA9IGZpbGVQbHVnaW4uX3htbEh0dHAgPSB0aGlzLnV0aWwuZ2V0WE1MSHR0cFJlcXVlc3QoKTtcclxuXHJcbiAgICAgICAgICAgIHhtbEh0dHAub25yZWFkeXN0YXRlY2hhbmdlID0gZmlsZVBsdWdpbi5fY2FsbEJhY2tVcGxvYWQuYmluZCh0aGlzLCB4bWxIdHRwLCBjYWxsQmFjaywgZXJyb3JDYWxsQmFjayk7XHJcbiAgICAgICAgICAgIHhtbEh0dHAub3BlbigncG9zdCcsIHVwbG9hZFVybCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIGlmKHVwbG9hZEhlYWRlciAhPT0gbnVsbCAmJiB0eXBlb2YgdXBsb2FkSGVhZGVyID09PSAnb2JqZWN0JyAmJiB0aGlzLl93Lk9iamVjdC5rZXlzKHVwbG9hZEhlYWRlcikubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgICAgICBmb3IobGV0IGtleSBpbiB1cGxvYWRIZWFkZXIpe1xyXG4gICAgICAgICAgICAgICAgICAgIHhtbEh0dHAuc2V0UmVxdWVzdEhlYWRlcihrZXksIHVwbG9hZEhlYWRlcltrZXldKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB4bWxIdHRwLnNlbmQoZm9ybURhdGEpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9jYWxsQmFja1VwbG9hZDogZnVuY3Rpb24gKHhtbEh0dHAsIGNhbGxCYWNrLCBlcnJvckNhbGxCYWNrKSB7XHJcbiAgICAgICAgICAgIGlmICh4bWxIdHRwLnJlYWR5U3RhdGUgPT09IDQpIHtcclxuICAgICAgICAgICAgICAgIGlmICh4bWxIdHRwLnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbEJhY2soeG1sSHR0cCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcignW1NVTkVESVRPUi5maWxlTWFuYWdlci51cGxvYWQuY2FsbEJhY2suZmFpbF0gY2F1c2UgOiBcIicgKyBlLm1lc3NhZ2UgKyAnXCInKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlTG9hZGluZygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7IC8vIGV4Y2VwdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VMb2FkaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gIXhtbEh0dHAucmVzcG9uc2VUZXh0ID8geG1sSHR0cCA6IEpTT04ucGFyc2UoeG1sSHR0cC5yZXNwb25zZVRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZXJyb3JDYWxsQmFjayAhPT0gJ2Z1bmN0aW9uJyB8fCBlcnJvckNhbGxCYWNrKCcnLCByZXMsIHRoaXMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVyciA9ICdbU1VORURJVE9SLmZpbGVNYW5hZ2VyLnVwbG9hZC5zZXJ2ZXJFeGNlcHRpb25dIHN0YXR1czogJyArIHhtbEh0dHAuc3RhdHVzICsgJywgcmVzcG9uc2U6ICcgKyAocmVzLmVycm9yTWVzc2FnZSB8fCB4bWxIdHRwLnJlc3BvbnNlVGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZnVuY3Rpb25zLm5vdGljZU9wZW4oZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBDaGVja2UgdGhlIGZpbGUncyBpbmZvcm1hdGlvbiBhbmQgbW9kaWZ5IHRoZSB0YWcgdGhhdCBkb2VzIG5vdCBmaXQgdGhlIGZvcm1hdC5cclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gcGx1Z2luTmFtZSBQbHVnaW4gbmFtZVxyXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IHRhZ05hbWVzIFRhZyBhcnJheSB0byBjaGVja1xyXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb258bnVsbH0gdXBsb2FkRXZlbnRIYW5kbGVyIEV2ZW50IGhhbmRsZXIgdG8gcHJvY2VzcyB1cGRhdGVkIGZpbGUgaW5mbyBhZnRlciBjaGVja2luZyAodXNlZCBpbiBcInNldEluZm9cIilcclxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBtb2RpZnlIYW5kbGVyIEEgZnVuY3Rpb24gdG8gbW9kaWZ5IGEgdGFnIHRoYXQgZG9lcyBub3QgZml0IHRoZSBmb3JtYXQgKEFyZ3VtZW50IHZhbHVlOiBUYWcgZWxlbWVudClcclxuICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IHJlc2l6aW5nIFRydWUgaWYgdGhlIHBsdWdpbiBpcyB1c2luZyBhIHJlc2l6aW5nIG1vZHVsZVxyXG4gICAgICAgICAqIEBleGFtcGxlIFxyXG4gICAgICAgICAqIGNvbnN0IG1vZGlmeUhhbmRsZXIgPSBmdW5jdGlvbiAodGFnKSB7XHJcbiAgICAgICAgICogICAgICBpbWFnZVBsdWdpbi5vbk1vZGlmeU1vZGUuY2FsbCh0aGlzLCB0YWcsIG51bGwpO1xyXG4gICAgICAgICAqICAgICAgaW1hZ2VQbHVnaW4ub3Blbk1vZGlmeS5jYWxsKHRoaXMsIHRydWUpO1xyXG4gICAgICAgICAqICAgICAgaW1hZ2VQbHVnaW4udXBkYXRlX2ltYWdlLmNhbGwodGhpcywgdHJ1ZSwgZmFsc2UsIHRydWUpO1xyXG4gICAgICAgICAqICB9LmJpbmQodGhpcyk7XHJcbiAgICAgICAgICogIHRoaXMucGx1Z2lucy5maWxlTWFuYWdlci5jaGVja0luZm8uY2FsbCh0aGlzLCAnaW1hZ2UnLCBbJ2ltZyddLCB0aGlzLmZ1bmN0aW9ucy5vbkltYWdlVXBsb2FkLCBtb2RpZnlIYW5kbGVyLCB0cnVlKTtcclxuICAgICAgICAgKi9cclxuICAgICAgICBjaGVja0luZm86IGZ1bmN0aW9uIChwbHVnaW5OYW1lLCB0YWdOYW1lcywgdXBsb2FkRXZlbnRIYW5kbGVyLCBtb2RpZnlIYW5kbGVyLCByZXNpemluZykge1xyXG4gICAgICAgICAgICBsZXQgdGFncyA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdGFnTmFtZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHRhZ3MgPSB0YWdzLmNvbmNhdChbXS5zbGljZS5jYWxsKHRoaXMuY29udGV4dC5lbGVtZW50Lnd5c2l3eWcuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFnTmFtZXNbaV0pKSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVNYW5hZ2VyUGx1Z2luID0gdGhpcy5wbHVnaW5zLmZpbGVNYW5hZ2VyO1xyXG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5jb250ZXh0W3BsdWdpbk5hbWVdO1xyXG4gICAgICAgICAgICBjb25zdCBpbmZvTGlzdCA9IGNvbnRleHQuX2luZm9MaXN0O1xyXG4gICAgICAgICAgICBjb25zdCBzZXRGaWxlSW5mbyA9IGZpbGVNYW5hZ2VyUGx1Z2luLnNldEluZm8uYmluZCh0aGlzKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0YWdzLmxlbmd0aCA9PT0gaW5mb0xpc3QubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAvLyByZXNldFxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NvbXBvbmVudHNJbmZvUmVzZXQpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdGFncy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRGaWxlSW5mbyhwbHVnaW5OYW1lLCB0YWdzW2ldLCB1cGxvYWRFdmVudEhhbmRsZXIsIG51bGwsIHJlc2l6aW5nKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGluZm9VcGRhdGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaW5mb0xpc3QubGVuZ3RoLCBpbmZvOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5mbyA9IGluZm9MaXN0W2ldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFncy5maWx0ZXIoZnVuY3Rpb24gKHQpIHsgcmV0dXJuIGluZm8uc3JjID09PSB0LnNyYyAmJiBpbmZvLmluZGV4LnRvU3RyaW5nKCkgPT09IHQuZ2V0QXR0cmlidXRlKCdkYXRhLWluZGV4Jyk7IH0pLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAvLyBwYXNzXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmZvVXBkYXRlKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGNoZWNrXHJcbiAgICAgICAgICAgIGNvbnN0IF9yZXNpemVfcGx1Z2luID0gcmVzaXppbmcgPyB0aGlzLmNvbnRleHQucmVzaXppbmcuX3Jlc2l6ZV9wbHVnaW4gOiAnJztcclxuICAgICAgICAgICAgaWYgKHJlc2l6aW5nKSB0aGlzLmNvbnRleHQucmVzaXppbmcuX3Jlc2l6ZV9wbHVnaW4gPSBwbHVnaW5OYW1lO1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50VGFncyA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBpbmZvSW5kZXggPSBbXTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGluZm9MaXN0Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpbmZvSW5kZXhbaV0gPSBpbmZvTGlzdFtpXS5pbmRleDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRhZ3MubGVuZ3RoLCB0YWc7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdGFnID0gdGFnc1tpXTtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy51dGlsLmdldFBhcmVudEVsZW1lbnQodGFnLCB0aGlzLnV0aWwuaXNNZWRpYUNvbXBvbmVudCkgfHwgIWZpbGVNYW5hZ2VyUGx1Z2luLl9jaGVja01lZGlhQ29tcG9uZW50KHRhZykpIHtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGFncy5wdXNoKGNvbnRleHQuX2luZm9JbmRleCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbW9kaWZ5SGFuZGxlcih0YWcpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghdGFnLmdldEF0dHJpYnV0ZSgnZGF0YS1pbmRleCcpIHx8IGluZm9JbmRleC5pbmRleE9mKHRhZy5nZXRBdHRyaWJ1dGUoJ2RhdGEtaW5kZXgnKSAqIDEpIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUYWdzLnB1c2goY29udGV4dC5faW5mb0luZGV4KTtcclxuICAgICAgICAgICAgICAgICAgICB0YWcucmVtb3ZlQXR0cmlidXRlKCdkYXRhLWluZGV4Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0RmlsZUluZm8ocGx1Z2luTmFtZSwgdGFnLCB1cGxvYWRFdmVudEhhbmRsZXIsIG51bGwsIHJlc2l6aW5nKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRhZ3MucHVzaCh0YWcuZ2V0QXR0cmlidXRlKCdkYXRhLWluZGV4JykgKiAxKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGRhdGFJbmRleDsgaSA8IGluZm9MaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBkYXRhSW5kZXggPSBpbmZvTGlzdFtpXS5pbmRleDtcclxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50VGFncy5pbmRleE9mKGRhdGFJbmRleCkgPiAtMSkgY29udGludWU7XHJcblxyXG4gICAgICAgICAgICAgICAgaW5mb0xpc3Quc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB1cGxvYWRFdmVudEhhbmRsZXIgPT09ICdmdW5jdGlvbicpIHVwbG9hZEV2ZW50SGFuZGxlcihudWxsLCBkYXRhSW5kZXgsICdkZWxldGUnLCBudWxsLCAwLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIGktLTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHJlc2l6aW5nKSB0aGlzLmNvbnRleHQucmVzaXppbmcuX3Jlc2l6ZV9wbHVnaW4gPSBfcmVzaXplX3BsdWdpbjtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlIGluZm8gb2JqZWN0IG9mIGZpbGUgYW5kIGFkZCBpdCB0byBcIl9pbmZvTGlzdFwiICh0aGlzLmNvbnRleHRbcGx1Z2luTmFtZV0uX2luZm9MaXN0W10pXHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHBsdWdpbk5hbWUgUGx1Z2luIG5hbWUgXHJcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IFxyXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb258bnVsbH0gdXBsb2FkRXZlbnRIYW5kbGVyIEV2ZW50IGhhbmRsZXIgdG8gcHJvY2VzcyB1cGRhdGVkIGZpbGUgaW5mbyAoY3JlYXRlZCBpbiBzZXRJbmZvKVxyXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fG51bGx9IGZpbGUgXHJcbiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSByZXNpemluZyBUcnVlIGlmIHRoZSBwbHVnaW4gaXMgdXNpbmcgYSByZXNpemluZyBtb2R1bGVcclxuICAgICAgICAgKiBAZXhhbXBsZSBcclxuICAgICAgICAgKiB1cGxvYWRDYWxsQmFjayB7Li4gZmlsZSA9IHsgbmFtZTogZmlsZUxpc3RbaV0ubmFtZSwgc2l6ZTogZmlsZUxpc3RbaV0uc2l6ZSB9O1xyXG4gICAgICAgICAqIHRoaXMucGx1Z2lucy5maWxlTWFuYWdlci5zZXRJbmZvLmNhbGwodGhpcywgJ2ltYWdlJywgb0ltZywgdGhpcy5mdW5jdGlvbnMub25JbWFnZVVwbG9hZCwgZmlsZSwgdHJ1ZSk7XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgc2V0SW5mbzogZnVuY3Rpb24gKHBsdWdpbk5hbWUsIGVsZW1lbnQsIHVwbG9hZEV2ZW50SGFuZGxlciwgZmlsZSwgcmVzaXppbmcpIHtcclxuICAgICAgICAgICAgY29uc3QgX3Jlc2l6ZV9wbHVnaW4gPSByZXNpemluZyA/IHRoaXMuY29udGV4dC5yZXNpemluZy5fcmVzaXplX3BsdWdpbiA6ICcnO1xyXG4gICAgICAgICAgICBpZiAocmVzaXppbmcpIHRoaXMuY29udGV4dC5yZXNpemluZy5fcmVzaXplX3BsdWdpbiA9IHBsdWdpbk5hbWU7XHJcbiAgICBcclxuICAgICAgICAgICAgY29uc3QgcGxndWluID0gdGhpcy5wbHVnaW5zW3BsdWdpbk5hbWVdO1xyXG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5jb250ZXh0W3BsdWdpbk5hbWVdO1xyXG4gICAgICAgICAgICBjb25zdCBpbmZvTGlzdCA9IGNvbnRleHQuX2luZm9MaXN0O1xyXG4gICAgICAgICAgICBsZXQgZGF0YUluZGV4ID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtaW5kZXgnKTtcclxuICAgICAgICAgICAgbGV0IGluZm8gPSBudWxsO1xyXG4gICAgICAgICAgICBsZXQgc3RhdGUgPSAnJztcclxuXHJcbiAgICAgICAgICAgIGlmICghZmlsZSkge1xyXG4gICAgICAgICAgICAgICAgZmlsZSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAnbmFtZSc6IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWZpbGUtbmFtZScpIHx8ICh0eXBlb2YgZWxlbWVudC5zcmMgPT09ICdzdHJpbmcnID8gZWxlbWVudC5zcmMuc3BsaXQoJy8nKS5wb3AoKSA6ICcnKSxcclxuICAgICAgICAgICAgICAgICAgICAnc2l6ZSc6IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWZpbGUtc2l6ZScpIHx8IDBcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICAvLyBjcmVhdGVcclxuICAgICAgICAgICAgaWYgKCFkYXRhSW5kZXggfHwgdGhpcy5fY29tcG9uZW50c0luZm9Jbml0KSB7XHJcbiAgICAgICAgICAgICAgICBzdGF0ZSA9ICdjcmVhdGUnO1xyXG4gICAgICAgICAgICAgICAgZGF0YUluZGV4ID0gY29udGV4dC5faW5mb0luZGV4Kys7XHJcbiAgICBcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLWluZGV4JywgZGF0YUluZGV4KTtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLWZpbGUtbmFtZScsIGZpbGUubmFtZSk7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1maWxlLXNpemUnLCBmaWxlLnNpemUpO1xyXG4gICAgXHJcbiAgICAgICAgICAgICAgICBpbmZvID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNyYzogZWxlbWVudC5zcmMsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGRhdGFJbmRleCAqIDEsXHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogZmlsZS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIHNpemU6IGZpbGUuc2l6ZVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgaW5mb0xpc3QucHVzaChpbmZvKTtcclxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gdXBkYXRlXHJcbiAgICAgICAgICAgICAgICBzdGF0ZSA9ICd1cGRhdGUnO1xyXG4gICAgICAgICAgICAgICAgZGF0YUluZGV4ICo9IDE7XHJcbiAgICBcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpbmZvTGlzdC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhSW5kZXggPT09IGluZm9MaXN0W2ldLmluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZm8gPSBpbmZvTGlzdFtpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICBpZiAoIWluZm8pIHtcclxuICAgICAgICAgICAgICAgICAgICBkYXRhSW5kZXggPSBjb250ZXh0Ll9pbmZvSW5kZXgrKztcclxuICAgICAgICAgICAgICAgICAgICBpbmZvID0geyBpbmRleDogZGF0YUluZGV4IH07XHJcbiAgICAgICAgICAgICAgICAgICAgaW5mb0xpc3QucHVzaChpbmZvKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgaW5mby5zcmMgPSBlbGVtZW50LnNyYztcclxuICAgICAgICAgICAgICAgIGluZm8ubmFtZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiZGF0YS1maWxlLW5hbWVcIik7XHJcbiAgICAgICAgICAgICAgICBpbmZvLnNpemUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShcImRhdGEtZmlsZS1zaXplXCIpICogMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgIC8vIG1ldGhvZCBiaW5kXHJcbiAgICAgICAgICAgIGluZm8uZWxlbWVudCA9IGVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGluZm8uZGVsZXRlID0gcGxndWluLmRlc3Ryb3kuYmluZCh0aGlzLCBlbGVtZW50KTtcclxuICAgICAgICAgICAgaW5mby5zZWxlY3QgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudC5zY3JvbGxJbnRvVmlldyh0cnVlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3cuc2V0VGltZW91dChwbGd1aW4uc2VsZWN0LmJpbmQodGhpcywgZWxlbWVudCkpO1xyXG4gICAgICAgICAgICB9LmJpbmQodGhpcywgZWxlbWVudCk7XHJcbiAgICBcclxuICAgICAgICAgICAgaWYgKHJlc2l6aW5nKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWVsZW1lbnQuZ2V0QXR0cmlidXRlKCdvcmlnaW4tc2l6ZScpICYmIGVsZW1lbnQubmF0dXJhbFdpZHRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ29yaWdpbi1zaXplJywgZWxlbWVudC5uYXR1cmFsV2lkdGggKyAnLCcgKyBlbGVtZW50Lm5hdHVyYWxIZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICBpZiAoIWVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLW9yaWdpbicpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy51dGlsLmdldFBhcmVudEVsZW1lbnQoZWxlbWVudCwgdGhpcy51dGlsLmlzTWVkaWFDb21wb25lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvdmVyID0gdGhpcy51dGlsLmdldFBhcmVudEVsZW1lbnQoZWxlbWVudCwgJ0ZJR1VSRScpO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHcgPSB0aGlzLnBsdWdpbnMucmVzaXppbmcuX21vZHVsZV9nZXRTaXplWC5jYWxsKHRoaXMsIGNvbnRleHQsIGVsZW1lbnQsIGNvdmVyLCBjb250YWluZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGggPSB0aGlzLnBsdWdpbnMucmVzaXppbmcuX21vZHVsZV9nZXRTaXplWS5jYWxsKHRoaXMsIGNvbnRleHQsIGVsZW1lbnQsIGNvdmVyLCBjb250YWluZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLW9yaWdpbicsIHcgKyAnLCcgKyBoKTtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1zaXplJywgdyArICcsJyArIGgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgICAgICAgICAgaWYgKCFlbGVtZW50LnN0eWxlLndpZHRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZSA9IChlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1zaXplJykgfHwgZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtb3JpZ2luJykgfHwgJycpLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgcGxndWluLm9uTW9kaWZ5TW9kZS5jYWxsKHRoaXMsIGVsZW1lbnQsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIHBsZ3Vpbi5hcHBseVNpemUuY2FsbCh0aGlzLCBzaXplWzBdLCBzaXplWzFdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5yZXNpemluZy5fcmVzaXplX3BsdWdpbiA9IF9yZXNpemVfcGx1Z2luO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHVwbG9hZEV2ZW50SGFuZGxlciA9PT0gJ2Z1bmN0aW9uJykgdXBsb2FkRXZlbnRIYW5kbGVyKGVsZW1lbnQsIGRhdGFJbmRleCwgc3RhdGUsIGluZm8sIC0tY29udGV4dC5fdXBsb2FkRmlsZUxlbmd0aCA8IDAgPyAwIDogY29udGV4dC5fdXBsb2FkRmlsZUxlbmd0aCwgdGhpcyk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIERlbGV0ZSBpbmZvIG9iamVjdCBhdCBcIl9pbmZvTGlzdFwiXHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHBsdWdpbk5hbWUgUGx1Z2luIG5hbWUgXHJcbiAgICAgICAgICogQHBhcmFtIHtOdW1iZXJ9IGluZGV4IGluZGV4IG9mIGluZm8gb2JqZWN0ICh0aGlzLmNvbnRleHRbcGx1Z2luTmFtZV0uX2luZm9MaXN0W10uaW5kZXgpXHJcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbnxudWxsfSB1cGxvYWRFdmVudEhhbmRsZXIgRXZlbnQgaGFuZGxlciB0byBwcm9jZXNzIHVwZGF0ZWQgZmlsZSBpbmZvIChjcmVhdGVkIGluIHNldEluZm8pXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZGVsZXRlSW5mbzogZnVuY3Rpb24gKHBsdWdpbk5hbWUsIGluZGV4LCB1cGxvYWRFdmVudEhhbmRsZXIpIHtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGluZm9MaXN0ID0gdGhpcy5jb250ZXh0W3BsdWdpbk5hbWVdLl9pbmZvTGlzdDtcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGluZm9MaXN0Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSBpbmZvTGlzdFtpXS5pbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmZvTGlzdC5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdXBsb2FkRXZlbnRIYW5kbGVyID09PSAnZnVuY3Rpb24nKSB1cGxvYWRFdmVudEhhbmRsZXIobnVsbCwgaW5kZXgsICdkZWxldGUnLCBudWxsLCAwLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBSZXNldCBpbmZvIG9iamVjdCBhbmQgXCJfaW5mb0xpc3QgPSBbXVwiLCBcIl9pbmZvSW5kZXggPSAwXCJcclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gcGx1Z2luTmFtZSBQbHVnaW4gbmFtZSBcclxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufG51bGx9IHVwbG9hZEV2ZW50SGFuZGxlciBFdmVudCBoYW5kbGVyIHRvIHByb2Nlc3MgdXBkYXRlZCBmaWxlIGluZm8gKGNyZWF0ZWQgaW4gc2V0SW5mbylcclxuICAgICAgICAgKi9cclxuICAgICAgICByZXNldEluZm86IGZ1bmN0aW9uIChwbHVnaW5OYW1lLCB1cGxvYWRFdmVudEhhbmRsZXIpIHtcclxuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuY29udGV4dFtwbHVnaW5OYW1lXTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdXBsb2FkRXZlbnRIYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpbmZvTGlzdCA9IGNvbnRleHQuX2luZm9MaXN0O1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGluZm9MaXN0Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXBsb2FkRXZlbnRIYW5kbGVyKG51bGwsIGluZm9MaXN0W2ldLmluZGV4LCAnZGVsZXRlJywgbnVsbCwgMCwgdGhpcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnRleHQuX2luZm9MaXN0ID0gW107XHJcbiAgICAgICAgICAgIGNvbnRleHQuX2luZm9JbmRleCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAodHlwZW9mIG5vR2xvYmFsID09PSB0eXBlb2YgdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKCF3aW5kb3cuU1VORURJVE9SX01PRFVMRVMpIHtcclxuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdywgJ1NVTkVESVRPUl9NT0RVTEVTJywge1xyXG4gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZToge31cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNVTkVESVRPUl9NT0RVTEVTLCAnZmlsZU1hbmFnZXInLCB7XHJcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXHJcbiAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgdmFsdWU6IGZpbGVNYW5hZ2VyXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZpbGVNYW5hZ2VyO1xyXG59KSk7Il0sInNvdXJjZVJvb3QiOiIifQ==