ninesurvey/src/ninesurvey-1.0/public/build/vendors~dropzone.js

61 lines
125 KiB
JavaScript

(window["webpackJsonp"] = window["webpackJsonp"] || []).push([["vendors~dropzone"],{
/***/ "./node_modules/dropzone/dist/min/dropzone.min.css":
/*!*********************************************************!*\
!*** ./node_modules/dropzone/dist/min/dropzone.min.css ***!
\*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
// extracted by mini-css-extract-plugin
/***/ }),
/***/ "./node_modules/dropzone/dist/min/dropzone.min.js":
/*!********************************************************!*\
!*** ./node_modules/dropzone/dist/min/dropzone.min.js ***!
\********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
/* WEBPACK VAR INJECTION */(function(module) {function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function _possibleConstructorReturn(e,t){return!t||"object"!==_typeof(t)&&"function"!=typeof t?_assertThisInitialized(e):t}function _getPrototypeOf(e){return(_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function _inherits(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&_setPrototypeOf(e,t)}function _setPrototypeOf(e,t){return(_setPrototypeOf=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}function _createClass(e,t,n){return t&&_defineProperties(e.prototype,t),n&&_defineProperties(e,n),e}var Emitter=function(){function e(){_classCallCheck(this,e)}return _createClass(e,[{key:"on",value:function(e,t){return this._callbacks=this._callbacks||{},this._callbacks[e]||(this._callbacks[e]=[]),this._callbacks[e].push(t),this}},{key:"emit",value:function(e){this._callbacks=this._callbacks||{};var t=this._callbacks[e];if(t){for(var n=arguments.length,i=new Array(1<n?n-1:0),r=1;r<n;r++)i[r-1]=arguments[r];var o=!0,a=!1,l=void 0;try{for(var s,u=t[Symbol.iterator]();!(o=(s=u.next()).done);o=!0){s.value.apply(this,i)}}catch(e){a=!0,l=e}finally{try{o||null==u.return||u.return()}finally{if(a)throw l}}}return this}},{key:"off",value:function(e,t){if(!this._callbacks||0===arguments.length)return this._callbacks={},this;var n=this._callbacks[e];if(!n)return this;if(1===arguments.length)return delete this._callbacks[e],this;for(var i=0;i<n.length;i++){if(n[i]===t){n.splice(i,1);break}}return this}}]),e}(),Dropzone=function(){function C(e,t){var n,i,r;if(_classCallCheck(this,C),(n=_possibleConstructorReturn(this,_getPrototypeOf(C).call(this))).element=e,n.version=C.version,n.defaultOptions.previewTemplate=n.defaultOptions.previewTemplate.replace(/\n*/g,""),n.clickableElements=[],n.listeners=[],n.files=[],"string"==typeof n.element&&(n.element=document.querySelector(n.element)),!n.element||null==n.element.nodeType)throw new Error("Invalid dropzone element.");if(n.element.dropzone)throw new Error("Dropzone already attached.");C.instances.push(_assertThisInitialized(n)),n.element.dropzone=_assertThisInitialized(n);var o=null!=(r=C.optionsForElement(n.element))?r:{};if(n.options=C.extend({},n.defaultOptions,o,null!=t?t:{}),n.options.forceFallback||!C.isBrowserSupported())return _possibleConstructorReturn(n,n.options.fallback.call(_assertThisInitialized(n)));if(null==n.options.url&&(n.options.url=n.element.getAttribute("action")),!n.options.url)throw new Error("No URL provided.");if(n.options.acceptedFiles&&n.options.acceptedMimeTypes)throw new Error("You can't provide both 'acceptedFiles' and 'acceptedMimeTypes'. 'acceptedMimeTypes' is deprecated.");if(n.options.uploadMultiple&&n.options.chunking)throw new Error("You cannot set both: uploadMultiple and chunking.");return n.options.acceptedMimeTypes&&(n.options.acceptedFiles=n.options.acceptedMimeTypes,delete n.options.acceptedMimeTypes),null!=n.options.renameFilename&&(n.options.renameFile=function(e){return n.options.renameFilename.call(_assertThisInitialized(n),e.name,e)}),n.options.method=n.options.method.toUpperCase(),(i=n.getExistingFallback())&&i.parentNode&&i.parentNode.removeChild(i),!1!==n.options.previewsContainer&&(n.options.previewsContainer?n.previewsContainer=C.getElement(n.options.previewsContainer,"previewsContainer"):n.previewsContainer=n.element),n.options.clickable&&(!0===n.options.clickable?n.clickableElements=[n.element]:n.clickableElements=C.getElements(n.options.clickable,"clickable")),n.init(),n}return _inherits(C,Emitter),_createClass(C,null,[{key:"initClass",value:function(){this.prototype.Emitter=Emitter,this.prototype.events=["drop","dragstart","dragend","dragenter","dragover","dragleave","addedfile","addedfiles","removedfile","thumbnail","error","errormultiple","processing","processingmultiple","uploadprogress","totaluploadprogress","sending","sendingmultiple","success","successmultiple","canceled","canceledmultiple","complete","completemultiple","reset","maxfilesexceeded","maxfilesreached","queuecomplete"],this.prototype.defaultOptions={url:null,method:"post",withCredentials:!1,timeout:3e4,parallelUploads:2,uploadMultiple:!1,chunking:!1,forceChunking:!1,chunkSize:2e6,parallelChunkUploads:!1,retryChunks:!1,retryChunksLimit:3,maxFilesize:256,paramName:"file",createImageThumbnails:!0,maxThumbnailFilesize:10,thumbnailWidth:120,thumbnailHeight:120,thumbnailMethod:"crop",resizeWidth:null,resizeHeight:null,resizeMimeType:null,resizeQuality:.8,resizeMethod:"contain",filesizeBase:1e3,maxFiles:null,headers:null,clickable:!0,ignoreHiddenFiles:!0,acceptedFiles:null,acceptedMimeTypes:null,autoProcessQueue:!0,autoQueue:!0,addRemoveLinks:!1,previewsContainer:null,hiddenInputContainer:"body",capture:null,renameFilename:null,renameFile:null,forceFallback:!1,dictDefaultMessage:"Drop files here to upload",dictFallbackMessage:"Your browser does not support drag'n'drop file uploads.",dictFallbackText:"Please use the fallback form below to upload your files like in the olden days.",dictFileTooBig:"File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.",dictInvalidFileType:"You can't upload files of this type.",dictResponseError:"Server responded with {{statusCode}} code.",dictCancelUpload:"Cancel upload",dictUploadCanceled:"Upload canceled.",dictCancelUploadConfirmation:"Are you sure you want to cancel this upload?",dictRemoveFile:"Remove file",dictRemoveFileConfirmation:null,dictMaxFilesExceeded:"You can not upload any more files.",dictFileSizeUnits:{tb:"TB",gb:"GB",mb:"MB",kb:"KB",b:"b"},init:function(){},params:function(e,t,n){if(n)return{dzuuid:n.file.upload.uuid,dzchunkindex:n.index,dztotalfilesize:n.file.size,dzchunksize:this.options.chunkSize,dztotalchunkcount:n.file.upload.totalChunkCount,dzchunkbyteoffset:n.index*this.options.chunkSize}},accept:function(e,t){return t()},chunksUploaded:function(e,t){t()},fallback:function(){var e;this.element.className="".concat(this.element.className," dz-browser-not-supported");var t=!0,n=!1,i=void 0;try{for(var r,o=this.element.getElementsByTagName("div")[Symbol.iterator]();!(t=(r=o.next()).done);t=!0){var a=r.value;if(/(^| )dz-message($| )/.test(a.className)){(e=a).className="dz-message";break}}}catch(e){n=!0,i=e}finally{try{t||null==o.return||o.return()}finally{if(n)throw i}}e||(e=C.createElement('<div class="dz-message"><span></span></div>'),this.element.appendChild(e));var l=e.getElementsByTagName("span")[0];return l&&(null!=l.textContent?l.textContent=this.options.dictFallbackMessage:null!=l.innerText&&(l.innerText=this.options.dictFallbackMessage)),this.element.appendChild(this.getFallbackForm())},resize:function(e,t,n,i){var r={srcX:0,srcY:0,srcWidth:e.width,srcHeight:e.height},o=e.width/e.height;null==t&&null==n?(t=r.srcWidth,n=r.srcHeight):null==t?t=n*o:null==n&&(n=t/o);var a=(t=Math.min(t,r.srcWidth))/(n=Math.min(n,r.srcHeight));if(r.srcWidth>t||r.srcHeight>n)if("crop"===i)a<o?(r.srcHeight=e.height,r.srcWidth=r.srcHeight*a):(r.srcWidth=e.width,r.srcHeight=r.srcWidth/a);else{if("contain"!==i)throw new Error("Unknown resizeMethod '".concat(i,"'"));a<o?n=t/o:t=n*o}return r.srcX=(e.width-r.srcWidth)/2,r.srcY=(e.height-r.srcHeight)/2,r.trgWidth=t,r.trgHeight=n,r},transformFile:function(e,t){return(this.options.resizeWidth||this.options.resizeHeight)&&e.type.match(/image.*/)?this.resizeImage(e,this.options.resizeWidth,this.options.resizeHeight,this.options.resizeMethod,t):t(e)},previewTemplate:'<div class="dz-preview dz-file-preview">\n <div class="dz-image"><img data-dz-thumbnail /></div>\n <div class="dz-details">\n <div class="dz-size"><span data-dz-size></span></div>\n <div class="dz-filename"><span data-dz-name></span></div>\n </div>\n <div class="dz-progress"><span class="dz-upload" data-dz-uploadprogress></span></div>\n <div class="dz-error-message"><span data-dz-errormessage></span></div>\n <div class="dz-success-mark">\n <svg width="54px" height="54px" viewBox="0 0 54 54" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\n <title>Check</title>\n <g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">\n <path d="M23.5,31.8431458 L17.5852419,25.9283877 C16.0248253,24.3679711 13.4910294,24.366835 11.9289322,25.9289322 C10.3700136,27.4878508 10.3665912,30.0234455 11.9283877,31.5852419 L20.4147581,40.0716123 C20.5133999,40.1702541 20.6159315,40.2626649 20.7218615,40.3488435 C22.2835669,41.8725651 24.794234,41.8626202 26.3461564,40.3106978 L43.3106978,23.3461564 C44.8771021,21.7797521 44.8758057,19.2483887 43.3137085,17.6862915 C41.7547899,16.1273729 39.2176035,16.1255422 37.6538436,17.6893022 L23.5,31.8431458 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z" stroke-opacity="0.198794158" stroke="#747474" fill-opacity="0.816519475" fill="#FFFFFF"></path>\n </g>\n </svg>\n </div>\n <div class="dz-error-mark">\n <svg width="54px" height="54px" viewBox="0 0 54 54" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\n <title>Error</title>\n <g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">\n <g stroke="#747474" stroke-opacity="0.198794158" fill="#FFFFFF" fill-opacity="0.816519475">\n <path d="M32.6568542,29 L38.3106978,23.3461564 C39.8771021,21.7797521 39.8758057,19.2483887 38.3137085,17.6862915 C36.7547899,16.1273729 34.2176035,16.1255422 32.6538436,17.6893022 L27,23.3431458 L21.3461564,17.6893022 C19.7823965,16.1255422 17.2452101,16.1273729 15.6862915,17.6862915 C14.1241943,19.2483887 14.1228979,21.7797521 15.6893022,23.3461564 L21.3431458,29 L15.6893022,34.6538436 C14.1228979,36.2202479 14.1241943,38.7516113 15.6862915,40.3137085 C17.2452101,41.8726271 19.7823965,41.8744578 21.3461564,40.3106978 L27,34.6568542 L32.6538436,40.3106978 C34.2176035,41.8744578 36.7547899,41.8726271 38.3137085,40.3137085 C39.8758057,38.7516113 39.8771021,36.2202479 38.3106978,34.6538436 L32.6568542,29 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z"></path>\n </g>\n </g>\n </svg>\n </div>\n</div>',drop:function(){return this.element.classList.remove("dz-drag-hover")},dragstart:function(){},dragend:function(){return this.element.classList.remove("dz-drag-hover")},dragenter:function(){return this.element.classList.add("dz-drag-hover")},dragover:function(){return this.element.classList.add("dz-drag-hover")},dragleave:function(){return this.element.classList.remove("dz-drag-hover")},paste:function(){},reset:function(){return this.element.classList.remove("dz-started")},addedfile:function(t){var n=this;if(this.element===this.previewsContainer&&this.element.classList.add("dz-started"),this.previewsContainer){t.previewElement=C.createElement(this.options.previewTemplate.trim()),t.previewTemplate=t.previewElement,this.previewsContainer.appendChild(t.previewElement);var e=!0,i=!1,r=void 0;try{for(var o,a=t.previewElement.querySelectorAll("[data-dz-name]")[Symbol.iterator]();!(e=(o=a.next()).done);e=!0){var l=o.value;l.textContent=t.name}}catch(e){i=!0,r=e}finally{try{e||null==a.return||a.return()}finally{if(i)throw r}}var s=!0,u=!1,c=void 0;try{for(var d,p=t.previewElement.querySelectorAll("[data-dz-size]")[Symbol.iterator]();!(s=(d=p.next()).done);s=!0)(l=d.value).innerHTML=this.filesize(t.size)}catch(e){u=!0,c=e}finally{try{s||null==p.return||p.return()}finally{if(u)throw c}}this.options.addRemoveLinks&&(t._removeLink=C.createElement('<a class="dz-remove" href="javascript:undefined;" data-dz-remove>'.concat(this.options.dictRemoveFile,"</a>")),t.previewElement.appendChild(t._removeLink));var h=function(e){return e.preventDefault(),e.stopPropagation(),t.status===C.UPLOADING?C.confirm(n.options.dictCancelUploadConfirmation,function(){return n.removeFile(t)}):n.options.dictRemoveFileConfirmation?C.confirm(n.options.dictRemoveFileConfirmation,function(){return n.removeFile(t)}):n.removeFile(t)},f=!0,v=!1,m=void 0;try{for(var y,g=t.previewElement.querySelectorAll("[data-dz-remove]")[Symbol.iterator]();!(f=(y=g.next()).done);f=!0){y.value.addEventListener("click",h)}}catch(e){v=!0,m=e}finally{try{f||null==g.return||g.return()}finally{if(v)throw m}}}},removedfile:function(e){return null!=e.previewElement&&null!=e.previewElement.parentNode&&e.previewElement.parentNode.removeChild(e.previewElement),this._updateMaxFilesReachedClass()},thumbnail:function(e,t){if(e.previewElement){e.previewElement.classList.remove("dz-file-preview");var n=!0,i=!1,r=void 0;try{for(var o,a=e.previewElement.querySelectorAll("[data-dz-thumbnail]")[Symbol.iterator]();!(n=(o=a.next()).done);n=!0){var l=o.value;l.alt=e.name,l.src=t}}catch(e){i=!0,r=e}finally{try{n||null==a.return||a.return()}finally{if(i)throw r}}return setTimeout(function(){return e.previewElement.classList.add("dz-image-preview")},1)}},error:function(e,t){if(e.previewElement){e.previewElement.classList.add("dz-error"),"String"!=typeof t&&t.error&&(t=t.error);var n=!0,i=!1,r=void 0;try{for(var o,a=e.previewElement.querySelectorAll("[data-dz-errormessage]")[Symbol.iterator]();!(n=(o=a.next()).done);n=!0){o.value.textContent=t}}catch(e){i=!0,r=e}finally{try{n||null==a.return||a.return()}finally{if(i)throw r}}}},errormultiple:function(){},processing:function(e){if(e.previewElement&&(e.previewElement.classList.add("dz-processing"),e._removeLink))return e._removeLink.innerHTML=this.options.dictCancelUpload},processingmultiple:function(){},uploadprogress:function(e,t){if(e.previewElement){var n=!0,i=!1,r=void 0;try{for(var o,a=e.previewElement.querySelectorAll("[data-dz-uploadprogress]")[Symbol.iterator]();!(n=(o=a.next()).done);n=!0){var l=o.value;"PROGRESS"===l.nodeName?l.value=t:l.style.width="".concat(t,"%")}}catch(e){i=!0,r=e}finally{try{n||null==a.return||a.return()}finally{if(i)throw r}}}},totaluploadprogress:function(){},sending:function(){},sendingmultiple:function(){},success:function(e){if(e.previewElement)return e.previewElement.classList.add("dz-success")},successmultiple:function(){},canceled:function(e){return this.emit("error",e,this.options.dictUploadCanceled)},canceledmultiple:function(){},complete:function(e){if(e._removeLink&&(e._removeLink.innerHTML=this.options.dictRemoveFile),e.previewElement)return e.previewElement.classList.add("dz-complete")},completemultiple:function(){},maxfilesexceeded:function(){},maxfilesreached:function(){},queuecomplete:function(){},addedfiles:function(){}},this.prototype._thumbnailQueue=[],this.prototype._processingThumbnail=!1}},{key:"extend",value:function(e){for(var t=arguments.length,n=new Array(1<t?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];for(var r=0,o=n;r<o.length;r++){var a=o[r];for(var l in a){var s=a[l];e[l]=s}}return e}}]),_createClass(C,[{key:"getAcceptedFiles",value:function(){return this.files.filter(function(e){return e.accepted}).map(function(e){return e})}},{key:"getRejectedFiles",value:function(){return this.files.filter(function(e){return!e.accepted}).map(function(e){return e})}},{key:"getFilesWithStatus",value:function(t){return this.files.filter(function(e){return e.status===t}).map(function(e){return e})}},{key:"getQueuedFiles",value:function(){return this.getFilesWithStatus(C.QUEUED)}},{key:"getUploadingFiles",value:function(){return this.getFilesWithStatus(C.UPLOADING)}},{key:"getAddedFiles",value:function(){return this.getFilesWithStatus(C.ADDED)}},{key:"getActiveFiles",value:function(){return this.files.filter(function(e){return e.status===C.UPLOADING||e.status===C.QUEUED}).map(function(e){return e})}},{key:"init",value:function(){var s=this;if("form"===this.element.tagName&&this.element.setAttribute("enctype","multipart/form-data"),this.element.classList.contains("dropzone")&&!this.element.querySelector(".dz-message")&&this.element.appendChild(C.createElement('<div class="dz-default dz-message"><button class="dz-button" type="button">'.concat(this.options.dictDefaultMessage,"</button></div>"))),this.clickableElements.length){!function l(){return s.hiddenFileInput&&s.hiddenFileInput.parentNode.removeChild(s.hiddenFileInput),s.hiddenFileInput=document.createElement("input"),s.hiddenFileInput.setAttribute("type","file"),(null===s.options.maxFiles||1<s.options.maxFiles)&&s.hiddenFileInput.setAttribute("multiple","multiple"),s.hiddenFileInput.className="dz-hidden-input",null!==s.options.acceptedFiles&&s.hiddenFileInput.setAttribute("accept",s.options.acceptedFiles),null!==s.options.capture&&s.hiddenFileInput.setAttribute("capture",s.options.capture),s.hiddenFileInput.style.visibility="hidden",s.hiddenFileInput.style.position="absolute",s.hiddenFileInput.style.top="0",s.hiddenFileInput.style.left="0",s.hiddenFileInput.style.height="0",s.hiddenFileInput.style.width="0",C.getElement(s.options.hiddenInputContainer,"hiddenInputContainer").appendChild(s.hiddenFileInput),s.hiddenFileInput.addEventListener("change",function(){var e=s.hiddenFileInput.files;if(e.length){var t=!0,n=!1,i=void 0;try{for(var r,o=e[Symbol.iterator]();!(t=(r=o.next()).done);t=!0){var a=r.value;s.addFile(a)}}catch(e){n=!0,i=e}finally{try{t||null==o.return||o.return()}finally{if(n)throw i}}}return s.emit("addedfiles",e),l()})}()}this.URL=null!==window.URL?window.URL:window.webkitURL;var e=!0,t=!1,n=void 0;try{for(var i,r=this.events[Symbol.iterator]();!(e=(i=r.next()).done);e=!0){var o=i.value;this.on(o,this.options[o])}}catch(e){t=!0,n=e}finally{try{e||null==r.return||r.return()}finally{if(t)throw n}}this.on("uploadprogress",function(){return s.updateTotalUploadProgress()}),this.on("removedfile",function(){return s.updateTotalUploadProgress()}),this.on("canceled",function(e){return s.emit("complete",e)}),this.on("complete",function(e){if(0===s.getAddedFiles().length&&0===s.getUploadingFiles().length&&0===s.getQueuedFiles().length)return setTimeout(function(){return s.emit("queuecomplete")},0)});function a(e){return function(e){if(e.dataTransfer.types)for(var t=0;t<e.dataTransfer.types.length;t++)if("Files"===e.dataTransfer.types[t])return!0;return!1}(e)&&(e.stopPropagation(),e.preventDefault?e.preventDefault():e.returnValue=!1)}return this.listeners=[{element:this.element,events:{dragstart:function(e){return s.emit("dragstart",e)},dragenter:function(e){return a(e),s.emit("dragenter",e)},dragover:function(e){var t;try{t=e.dataTransfer.effectAllowed}catch(e){}return e.dataTransfer.dropEffect="move"===t||"linkMove"===t?"move":"copy",a(e),s.emit("dragover",e)},dragleave:function(e){return s.emit("dragleave",e)},drop:function(e){return a(e),s.drop(e)},dragend:function(e){return s.emit("dragend",e)}}}],this.clickableElements.forEach(function(t){return s.listeners.push({element:t,events:{click:function(e){return t===s.element&&e.target!==s.element&&!C.elementInside(e.target,s.element.querySelector(".dz-message"))||s.hiddenFileInput.click(),!0}}})}),this.enable(),this.options.init.call(this)}},{key:"destroy",value:function(){return this.disable(),this.removeAllFiles(!0),null!=this.hiddenFileInput&&this.hiddenFileInput.parentNode&&(this.hiddenFileInput.parentNode.removeChild(this.hiddenFileInput),this.hiddenFileInput=null),delete this.element.dropzone,C.instances.splice(C.instances.indexOf(this),1)}},{key:"updateTotalUploadProgress",value:function(){var e,t=0,n=0;if(this.getActiveFiles().length){var i=!0,r=!1,o=void 0;try{for(var a,l=this.getActiveFiles()[Symbol.iterator]();!(i=(a=l.next()).done);i=!0){var s=a.value;t+=s.upload.bytesSent,n+=s.upload.total}}catch(e){r=!0,o=e}finally{try{i||null==l.return||l.return()}finally{if(r)throw o}}e=100*t/n}else e=100;return this.emit("totaluploadprogress",e,n,t)}},{key:"_getParamName",value:function(e){return"function"==typeof this.options.paramName?this.options.paramName(e):"".concat(this.options.paramName).concat(this.options.uploadMultiple?"[".concat(e,"]"):"")}},{key:"_renameFile",value:function(e){return"function"!=typeof this.options.renameFile?e.name:this.options.renameFile(e)}},{key:"getFallbackForm",value:function(){var e,t;if(e=this.getExistingFallback())return e;var n='<div class="dz-fallback">';this.options.dictFallbackText&&(n+="<p>".concat(this.options.dictFallbackText,"</p>")),n+='<input type="file" name="'.concat(this._getParamName(0),'" ').concat(this.options.uploadMultiple?'multiple="multiple"':void 0,' /><input type="submit" value="Upload!"></div>');var i=C.createElement(n);return"FORM"!==this.element.tagName?(t=C.createElement('<form action="'.concat(this.options.url,'" enctype="multipart/form-data" method="').concat(this.options.method,'"></form>'))).appendChild(i):(this.element.setAttribute("enctype","multipart/form-data"),this.element.setAttribute("method",this.options.method)),null!=t?t:i}},{key:"getExistingFallback",value:function(){for(var e=function(e){var t=!0,n=!1,i=void 0;try{for(var r,o=e[Symbol.iterator]();!(t=(r=o.next()).done);t=!0){var a=r.value;if(/(^| )fallback($| )/.test(a.className))return a}}catch(e){n=!0,i=e}finally{try{t||null==o.return||o.return()}finally{if(n)throw i}}},t=0,n=["div","form"];t<n.length;t++){var i,r=n[t];if(i=e(this.element.getElementsByTagName(r)))return i}}},{key:"setupEventListeners",value:function(){return this.listeners.map(function(i){return function(){var e=[];for(var t in i.events){var n=i.events[t];e.push(i.element.addEventListener(t,n,!1))}return e}()})}},{key:"removeEventListeners",value:function(){return this.listeners.map(function(i){return function(){var e=[];for(var t in i.events){var n=i.events[t];e.push(i.element.removeEventListener(t,n,!1))}return e}()})}},{key:"disable",value:function(){var t=this;return this.clickableElements.forEach(function(e){return e.classList.remove("dz-clickable")}),this.removeEventListeners(),this.disabled=!0,this.files.map(function(e){return t.cancelUpload(e)})}},{key:"enable",value:function(){return delete this.disabled,this.clickableElements.forEach(function(e){return e.classList.add("dz-clickable")}),this.setupEventListeners()}},{key:"filesize",value:function(e){var t=0,n="b";if(0<e){for(var i=["tb","gb","mb","kb","b"],r=0;r<i.length;r++){var o=i[r];if(Math.pow(this.options.filesizeBase,4-r)/10<=e){t=e/Math.pow(this.options.filesizeBase,4-r),n=o;break}}t=Math.round(10*t)/10}return"<strong>".concat(t,"</strong> ").concat(this.options.dictFileSizeUnits[n])}},{key:"_updateMaxFilesReachedClass",value:function(){return null!=this.options.maxFiles&&this.getAcceptedFiles().length>=this.options.maxFiles?(this.getAcceptedFiles().length===this.options.maxFiles&&this.emit("maxfilesreached",this.files),this.element.classList.add("dz-max-files-reached")):this.element.classList.remove("dz-max-files-reached")}},{key:"drop",value:function(e){if(e.dataTransfer){this.emit("drop",e);for(var t=[],n=0;n<e.dataTransfer.files.length;n++)t[n]=e.dataTransfer.files[n];if(t.length){var i=e.dataTransfer.items;i&&i.length&&null!=i[0].webkitGetAsEntry?this._addFilesFromItems(i):this.handleFiles(t)}this.emit("addedfiles",t)}}},{key:"paste",value:function(e){if(null!=__guard__(null!=e?e.clipboardData:void 0,function(e){return e.items})){this.emit("paste",e);var t=e.clipboardData.items;return t.length?this._addFilesFromItems(t):void 0}}},{key:"handleFiles",value:function(e){var t=!0,n=!1,i=void 0;try{for(var r,o=e[Symbol.iterator]();!(t=(r=o.next()).done);t=!0){var a=r.value;this.addFile(a)}}catch(e){n=!0,i=e}finally{try{t||null==o.return||o.return()}finally{if(n)throw i}}}},{key:"_addFilesFromItems",value:function(s){var u=this;return function(){var e=[],t=!0,n=!1,i=void 0;try{for(var r,o=s[Symbol.iterator]();!(t=(r=o.next()).done);t=!0){var a,l=r.value;null!=l.webkitGetAsEntry&&(a=l.webkitGetAsEntry())?a.isFile?e.push(u.addFile(l.getAsFile())):a.isDirectory?e.push(u._addFilesFromDirectory(a,a.name)):e.push(void 0):null!=l.getAsFile&&(null==l.kind||"file"===l.kind)?e.push(u.addFile(l.getAsFile())):e.push(void 0)}}catch(e){n=!0,i=e}finally{try{t||null==o.return||o.return()}finally{if(n)throw i}}return e}()}},{key:"_addFilesFromDirectory",value:function(e,s){function t(t){return __guardMethod__(console,"log",function(e){return e.log(t)})}var u=this,n=e.createReader();return function l(){return n.readEntries(function(e){if(0<e.length){var t=!0,n=!1,i=void 0;try{for(var r,o=e[Symbol.iterator]();!(t=(r=o.next()).done);t=!0){var a=r.value;a.isFile?a.file(function(e){if(!u.options.ignoreHiddenFiles||"."!==e.name.substring(0,1))return e.fullPath="".concat(s,"/").concat(e.name),u.addFile(e)}):a.isDirectory&&u._addFilesFromDirectory(a,"".concat(s,"/").concat(a.name))}}catch(e){n=!0,i=e}finally{try{t||null==o.return||o.return()}finally{if(n)throw i}}l()}return null},t)}()}},{key:"accept",value:function(e,t){this.options.maxFilesize&&e.size>1024*this.options.maxFilesize*1024?t(this.options.dictFileTooBig.replace("{{filesize}}",Math.round(e.size/1024/10.24)/100).replace("{{maxFilesize}}",this.options.maxFilesize)):C.isValidFile(e,this.options.acceptedFiles)?null!=this.options.maxFiles&&this.getAcceptedFiles().length>=this.options.maxFiles?(t(this.options.dictMaxFilesExceeded.replace("{{maxFiles}}",this.options.maxFiles)),this.emit("maxfilesexceeded",e)):this.options.accept.call(this,e,t):t(this.options.dictInvalidFileType)}},{key:"addFile",value:function(t){var n=this;t.upload={uuid:C.uuidv4(),progress:0,total:t.size,bytesSent:0,filename:this._renameFile(t)},this.files.push(t),t.status=C.ADDED,this.emit("addedfile",t),this._enqueueThumbnail(t),this.accept(t,function(e){e?(t.accepted=!1,n._errorProcessing([t],e)):(t.accepted=!0,n.options.autoQueue&&n.enqueueFile(t)),n._updateMaxFilesReachedClass()})}},{key:"enqueueFiles",value:function(e){var t=!0,n=!1,i=void 0;try{for(var r,o=e[Symbol.iterator]();!(t=(r=o.next()).done);t=!0){var a=r.value;this.enqueueFile(a)}}catch(e){n=!0,i=e}finally{try{t||null==o.return||o.return()}finally{if(n)throw i}}return null}},{key:"enqueueFile",value:function(e){var t=this;if(e.status!==C.ADDED||!0!==e.accepted)throw new Error("This file can't be queued because it has already been processed or was rejected.");if(e.status=C.QUEUED,this.options.autoProcessQueue)return setTimeout(function(){return t.processQueue()},0)}},{key:"_enqueueThumbnail",value:function(e){var t=this;if(this.options.createImageThumbnails&&e.type.match(/image.*/)&&e.size<=1024*this.options.maxThumbnailFilesize*1024)return this._thumbnailQueue.push(e),setTimeout(function(){return t._processThumbnailQueue()},0)}},{key:"_processThumbnailQueue",value:function(){var t=this;if(!this._processingThumbnail&&0!==this._thumbnailQueue.length){this._processingThumbnail=!0;var n=this._thumbnailQueue.shift();return this.createThumbnail(n,this.options.thumbnailWidth,this.options.thumbnailHeight,this.options.thumbnailMethod,!0,function(e){return t.emit("thumbnail",n,e),t._processingThumbnail=!1,t._processThumbnailQueue()})}}},{key:"removeFile",value:function(e){if(e.status===C.UPLOADING&&this.cancelUpload(e),this.files=without(this.files,e),this.emit("removedfile",e),0===this.files.length)return this.emit("reset")}},{key:"removeAllFiles",value:function(e){null==e&&(e=!1);var t=!0,n=!1,i=void 0;try{for(var r,o=this.files.slice()[Symbol.iterator]();!(t=(r=o.next()).done);t=!0){var a=r.value;a.status===C.UPLOADING&&!e||this.removeFile(a)}}catch(e){n=!0,i=e}finally{try{t||null==o.return||o.return()}finally{if(n)throw i}}return null}},{key:"resizeImage",value:function(r,e,t,n,o){var a=this;return this.createThumbnail(r,e,t,n,!0,function(e,t){if(null==t)return o(r);var n=a.options.resizeMimeType;null==n&&(n=r.type);var i=t.toDataURL(n,a.options.resizeQuality);return"image/jpeg"!==n&&"image/jpg"!==n||(i=ExifRestore.restore(r.dataURL,i)),o(C.dataURItoBlob(i))})}},{key:"createThumbnail",value:function(e,t,n,i,r,o){var a=this,l=new FileReader;l.onload=function(){e.dataURL=l.result,"image/svg+xml"!==e.type?a.createThumbnailFromUrl(e,t,n,i,r,o):null!=o&&o(l.result)},l.readAsDataURL(e)}},{key:"displayExistingFile",value:function(t,e,n,i,r){var o=this,a=!(4<arguments.length&&void 0!==r)||r;if(this.emit("addedfile",t),this.emit("complete",t),a){t.dataURL=e,this.createThumbnailFromUrl(t,this.options.thumbnailWidth,this.options.thumbnailHeight,this.options.resizeMethod,this.options.fixOrientation,function(e){o.emit("thumbnail",t,e),n&&n()},i)}else this.emit("thumbnail",t,e),n&&n()}},{key:"createThumbnailFromUrl",value:function(o,a,l,s,t,u,e){var c=this,d=document.createElement("img");return e&&(d.crossOrigin=e),d.onload=function(){var e=function(e){return e(1)};return"undefined"!=typeof EXIF&&null!==EXIF&&t&&(e=function(e){return EXIF.getData(d,function(){return e(EXIF.getTag(this,"Orientation"))})}),e(function(e){o.width=d.width,o.height=d.height;var t=c.options.resize.call(c,o,a,l,s),n=document.createElement("canvas"),i=n.getContext("2d");switch(n.width=t.trgWidth,n.height=t.trgHeight,4<e&&(n.width=t.trgHeight,n.height=t.trgWidth),e){case 2:i.translate(n.width,0),i.scale(-1,1);break;case 3:i.translate(n.width,n.height),i.rotate(Math.PI);break;case 4:i.translate(0,n.height),i.scale(1,-1);break;case 5:i.rotate(.5*Math.PI),i.scale(1,-1);break;case 6:i.rotate(.5*Math.PI),i.translate(0,-n.width);break;case 7:i.rotate(.5*Math.PI),i.translate(n.height,-n.width),i.scale(-1,1);break;case 8:i.rotate(-.5*Math.PI),i.translate(-n.height,0)}drawImageIOSFix(i,d,null!=t.srcX?t.srcX:0,null!=t.srcY?t.srcY:0,t.srcWidth,t.srcHeight,null!=t.trgX?t.trgX:0,null!=t.trgY?t.trgY:0,t.trgWidth,t.trgHeight);var r=n.toDataURL("image/png");if(null!=u)return u(r,n)})},null!=u&&(d.onerror=u),d.src=o.dataURL}},{key:"processQueue",value:function(){var e=this.options.parallelUploads,t=this.getUploadingFiles().length,n=t;if(!(e<=t)){var i=this.getQueuedFiles();if(0<i.length){if(this.options.uploadMultiple)return this.processFiles(i.slice(0,e-t));for(;n<e;){if(!i.length)return;this.processFile(i.shift()),n++}}}}},{key:"processFile",value:function(e){return this.processFiles([e])}},{key:"processFiles",value:function(e){var t=!0,n=!1,i=void 0;try{for(var r,o=e[Symbol.iterator]();!(t=(r=o.next()).done);t=!0){var a=r.value;a.processing=!0,a.status=C.UPLOADING,this.emit("processing",a)}}catch(e){n=!0,i=e}finally{try{t||null==o.return||o.return()}finally{if(n)throw i}}return this.options.uploadMultiple&&this.emit("processingmultiple",e),this.uploadFiles(e)}},{key:"_getFilesWithXhr",value:function(t){return this.files.filter(function(e){return e.xhr===t}).map(function(e){return e})}},{key:"cancelUpload",value:function(e){if(e.status===C.UPLOADING){var t=this._getFilesWithXhr(e.xhr),n=!0,i=!1,r=void 0;try{for(var o,a=t[Symbol.iterator]();!(n=(o=a.next()).done);n=!0){o.value.status=C.CANCELED}}catch(e){i=!0,r=e}finally{try{n||null==a.return||a.return()}finally{if(i)throw r}}void 0!==e.xhr&&e.xhr.abort();var l=!0,s=!1,u=void 0;try{for(var c,d=t[Symbol.iterator]();!(l=(c=d.next()).done);l=!0){var p=c.value;this.emit("canceled",p)}}catch(e){s=!0,u=e}finally{try{l||null==d.return||d.return()}finally{if(s)throw u}}this.options.uploadMultiple&&this.emit("canceledmultiple",t)}else e.status!==C.ADDED&&e.status!==C.QUEUED||(e.status=C.CANCELED,this.emit("canceled",e),this.options.uploadMultiple&&this.emit("canceledmultiple",[e]));if(this.options.autoProcessQueue)return this.processQueue()}},{key:"resolveOption",value:function(e){if("function"!=typeof e)return e;for(var t=arguments.length,n=new Array(1<t?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];return e.apply(this,n)}},{key:"uploadFile",value:function(e){return this.uploadFiles([e])}},{key:"uploadFiles",value:function(s){var u=this;this._transformFiles(s,function(e){if(u.options.chunking){var t=e[0];s[0].upload.chunked=u.options.chunking&&(u.options.forceChunking||t.size>u.options.chunkSize),s[0].upload.totalChunkCount=Math.ceil(t.size/u.options.chunkSize)}if(s[0].upload.chunked){var r=s[0],o=e[0];r.upload.chunks=[];var i=function(){for(var e=0;void 0!==r.upload.chunks[e];)e++;if(!(e>=r.upload.totalChunkCount)){0;var t=e*u.options.chunkSize,n=Math.min(t+u.options.chunkSize,r.size),i={name:u._getParamName(0),data:o.webkitSlice?o.webkitSlice(t,n):o.slice(t,n),filename:r.upload.filename,chunkIndex:e};r.upload.chunks[e]={file:r,index:e,dataBlock:i,status:C.UPLOADING,progress:0,retries:0},u._uploadData(s,[i])}};if(r.upload.finishedChunkUpload=function(e){var t=!0;e.status=C.SUCCESS,e.dataBlock=null,e.xhr=null;for(var n=0;n<r.upload.totalChunkCount;n++){if(void 0===r.upload.chunks[n])return i();r.upload.chunks[n].status!==C.SUCCESS&&(t=!1)}t&&u.options.chunksUploaded(r,function(){u._finished(s,"",null)})},u.options.parallelChunkUploads)for(var n=0;n<r.upload.totalChunkCount;n++)i();else i()}else{for(var a=[],l=0;l<s.length;l++)a[l]={name:u._getParamName(l),data:e[l],filename:s[l].upload.filename};u._uploadData(s,a)}})}},{key:"_getChunk",value:function(e,t){for(var n=0;n<e.upload.totalChunkCount;n++)if(void 0!==e.upload.chunks[n]&&e.upload.chunks[n].xhr===t)return e.upload.chunks[n]}},{key:"_uploadData",value:function(t,e){var n=this,i=new XMLHttpRequest,r=!0,o=!1,a=void 0;try{for(var l,s=t[Symbol.iterator]();!(r=(l=s.next()).done);r=!0){l.value.xhr=i}}catch(e){o=!0,a=e}finally{try{r||null==s.return||s.return()}finally{if(o)throw a}}t[0].upload.chunked&&(t[0].upload.chunks[e[0].chunkIndex].xhr=i);var u=this.resolveOption(this.options.method,t),c=this.resolveOption(this.options.url,t);i.open(u,c,!0),i.timeout=this.resolveOption(this.options.timeout,t),i.withCredentials=!!this.options.withCredentials,i.onload=function(e){n._finishedUploading(t,i,e)},i.ontimeout=function(){n._handleUploadError(t,i,"Request timedout after ".concat(n.options.timeout," seconds"))},i.onerror=function(){n._handleUploadError(t,i)},(null!=i.upload?i.upload:i).onprogress=function(e){return n._updateFilesUploadProgress(t,i,e)};var d={Accept:"application/json","Cache-Control":"no-cache","X-Requested-With":"XMLHttpRequest"};for(var p in this.options.headers&&C.extend(d,this.options.headers),d){var h=d[p];h&&i.setRequestHeader(p,h)}var f=new FormData;if(this.options.params){var v=this.options.params;for(var m in"function"==typeof v&&(v=v.call(this,t,i,t[0].upload.chunked?this._getChunk(t[0],i):null)),v){var y=v[m];f.append(m,y)}}var g=!0,b=!1,k=void 0;try{for(var w,F=t[Symbol.iterator]();!(g=(w=F.next()).done);g=!0){var z=w.value;this.emit("sending",z,i,f)}}catch(e){b=!0,k=e}finally{try{g||null==F.return||F.return()}finally{if(b)throw k}}this.options.uploadMultiple&&this.emit("sendingmultiple",t,i,f),this._addFormElementData(f);for(var x=0;x<e.length;x++){var E=e[x];f.append(E.name,E.data,E.filename)}this.submitRequest(i,f,t)}},{key:"_transformFiles",value:function(n,i){for(var e=this,r=[],o=0,t=function(t){e.options.transformFile.call(e,n[t],function(e){r[t]=e,++o===n.length&&i(r)})},a=0;a<n.length;a++)t(a)}},{key:"_addFormElementData",value:function(e){if("FORM"===this.element.tagName){var t=!0,n=!1,i=void 0;try{for(var r,o=this.element.querySelectorAll("input, textarea, select, button")[Symbol.iterator]();!(t=(r=o.next()).done);t=!0){var a=r.value,l=a.getAttribute("name"),s=a.getAttribute("type");if(s=s&&s.toLowerCase(),null!=l)if("SELECT"===a.tagName&&a.hasAttribute("multiple")){var u=!0,c=!1,d=void 0;try{for(var p,h=a.options[Symbol.iterator]();!(u=(p=h.next()).done);u=!0){var f=p.value;f.selected&&e.append(l,f.value)}}catch(e){c=!0,d=e}finally{try{u||null==h.return||h.return()}finally{if(c)throw d}}}else(!s||"checkbox"!==s&&"radio"!==s||a.checked)&&e.append(l,a.value)}}catch(e){n=!0,i=e}finally{try{t||null==o.return||o.return()}finally{if(n)throw i}}}}},{key:"_updateFilesUploadProgress",value:function(e,t,n){var i;if(void 0!==n){if(i=100*n.loaded/n.total,e[0].upload.chunked){var r=e[0],o=this._getChunk(r,t);o.progress=i,o.total=n.total,o.bytesSent=n.loaded;r.upload.progress=0,r.upload.total=0;for(var a=r.upload.bytesSent=0;a<r.upload.totalChunkCount;a++)void 0!==r.upload.chunks[a]&&void 0!==r.upload.chunks[a].progress&&(r.upload.progress+=r.upload.chunks[a].progress,r.upload.total+=r.upload.chunks[a].total,r.upload.bytesSent+=r.upload.chunks[a].bytesSent);r.upload.progress=r.upload.progress/r.upload.totalChunkCount}else{var l=!0,s=!1,u=void 0;try{for(var c,d=e[Symbol.iterator]();!(l=(c=d.next()).done);l=!0){var p=c.value;p.upload.progress=i,p.upload.total=n.total,p.upload.bytesSent=n.loaded}}catch(e){s=!0,u=e}finally{try{l||null==d.return||d.return()}finally{if(s)throw u}}}var h=!0,f=!1,v=void 0;try{for(var m,y=e[Symbol.iterator]();!(h=(m=y.next()).done);h=!0){var g=m.value;this.emit("uploadprogress",g,g.upload.progress,g.upload.bytesSent)}}catch(e){f=!0,v=e}finally{try{h||null==y.return||y.return()}finally{if(f)throw v}}}else{var b=!0,k=!0,w=!(i=100),F=void 0;try{for(var z,x=e[Symbol.iterator]();!(k=(z=x.next()).done);k=!0){var E=z.value;100===E.upload.progress&&E.upload.bytesSent===E.upload.total||(b=!1),E.upload.progress=i,E.upload.bytesSent=E.upload.total}}catch(e){w=!0,F=e}finally{try{k||null==x.return||x.return()}finally{if(w)throw F}}if(b)return;var C=!0,_=!1,S=void 0;try{for(var D,T=e[Symbol.iterator]();!(C=(D=T.next()).done);C=!0){var L=D.value;this.emit("uploadprogress",L,i,L.upload.bytesSent)}}catch(e){_=!0,S=e}finally{try{C||null==T.return||T.return()}finally{if(_)throw S}}}}},{key:"_finishedUploading",value:function(e,t,n){var i;if(e[0].status!==C.CANCELED&&4===t.readyState){if("arraybuffer"!==t.responseType&&"blob"!==t.responseType&&(i=t.responseText,t.getResponseHeader("content-type")&&~t.getResponseHeader("content-type").indexOf("application/json")))try{i=JSON.parse(i)}catch(e){n=e,i="Invalid JSON response from server."}this._updateFilesUploadProgress(e),200<=t.status&&t.status<300?e[0].upload.chunked?e[0].upload.finishedChunkUpload(this._getChunk(e[0],t)):this._finished(e,i,n):this._handleUploadError(e,t,i)}}},{key:"_handleUploadError",value:function(e,t,n){if(e[0].status!==C.CANCELED){if(e[0].upload.chunked&&this.options.retryChunks){var i=this._getChunk(e[0],t);if(i.retries++<this.options.retryChunksLimit)return void this._uploadData(e,[i.dataBlock]);console.warn("Retried this chunk too often. Giving up.")}this._errorProcessing(e,n||this.options.dictResponseError.replace("{{statusCode}}",t.status),t)}}},{key:"submitRequest",value:function(e,t){e.send(t)}},{key:"_finished",value:function(e,t,n){var i=!0,r=!1,o=void 0;try{for(var a,l=e[Symbol.iterator]();!(i=(a=l.next()).done);i=!0){var s=a.value;s.status=C.SUCCESS,this.emit("success",s,t,n),this.emit("complete",s)}}catch(e){r=!0,o=e}finally{try{i||null==l.return||l.return()}finally{if(r)throw o}}if(this.options.uploadMultiple&&(this.emit("successmultiple",e,t,n),this.emit("completemultiple",e)),this.options.autoProcessQueue)return this.processQueue()}},{key:"_errorProcessing",value:function(e,t,n){var i=!0,r=!1,o=void 0;try{for(var a,l=e[Symbol.iterator]();!(i=(a=l.next()).done);i=!0){var s=a.value;s.status=C.ERROR,this.emit("error",s,t,n),this.emit("complete",s)}}catch(e){r=!0,o=e}finally{try{i||null==l.return||l.return()}finally{if(r)throw o}}if(this.options.uploadMultiple&&(this.emit("errormultiple",e,t,n),this.emit("completemultiple",e)),this.options.autoProcessQueue)return this.processQueue()}}],[{key:"uuidv4",value:function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){var t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)})}}]),C}();Dropzone.initClass(),Dropzone.version="5.7.1",Dropzone.options={},Dropzone.optionsForElement=function(e){return e.getAttribute("id")?Dropzone.options[camelize(e.getAttribute("id"))]:void 0},Dropzone.instances=[],Dropzone.forElement=function(e){if("string"==typeof e&&(e=document.querySelector(e)),null==(null!=e?e.dropzone:void 0))throw new Error("No Dropzone found for given element. This is probably because you're trying to access it before Dropzone had the time to initialize. Use the `init` option to setup any additional observers on your Dropzone.");return e.dropzone},Dropzone.autoDiscover=!0,Dropzone.discover=function(){var s;if(document.querySelectorAll)s=document.querySelectorAll(".dropzone");else{s=[];var e=function(l){return function(){var e=[],t=!0,n=!1,i=void 0;try{for(var r,o=l[Symbol.iterator]();!(t=(r=o.next()).done);t=!0){var a=r.value;/(^| )dropzone($| )/.test(a.className)?e.push(s.push(a)):e.push(void 0)}}catch(e){n=!0,i=e}finally{try{t||null==o.return||o.return()}finally{if(n)throw i}}return e}()};e(document.getElementsByTagName("div")),e(document.getElementsByTagName("form"))}return function(){var e=[],t=!0,n=!1,i=void 0;try{for(var r,o=s[Symbol.iterator]();!(t=(r=o.next()).done);t=!0){var a=r.value;!1!==Dropzone.optionsForElement(a)?e.push(new Dropzone(a)):e.push(void 0)}}catch(e){n=!0,i=e}finally{try{t||null==o.return||o.return()}finally{if(n)throw i}}return e}()},Dropzone.blacklistedBrowsers=[/opera.*(Macintosh|Windows Phone).*version\/12/i],Dropzone.isBrowserSupported=function(){var e=!0;if(window.File&&window.FileReader&&window.FileList&&window.Blob&&window.FormData&&document.querySelector)if("classList"in document.createElement("a")){var t=!0,n=!1,i=void 0;try{for(var r,o=Dropzone.blacklistedBrowsers[Symbol.iterator]();!(t=(r=o.next()).done);t=!0){r.value.test(navigator.userAgent)&&(e=!1)}}catch(e){n=!0,i=e}finally{try{t||null==o.return||o.return()}finally{if(n)throw i}}}else e=!1;else e=!1;return e},Dropzone.dataURItoBlob=function(e){for(var t=atob(e.split(",")[1]),n=e.split(",")[0].split(":")[1].split(";")[0],i=new ArrayBuffer(t.length),r=new Uint8Array(i),o=0,a=t.length,l=0<=a;l?o<=a:a<=o;l?o++:o--)r[o]=t.charCodeAt(o);return new Blob([i],{type:n})};var without=function(e,t){return e.filter(function(e){return e!==t}).map(function(e){return e})},camelize=function(e){return e.replace(/[\-_](\w)/g,function(e){return e.charAt(1).toUpperCase()})};Dropzone.createElement=function(e){var t=document.createElement("div");return t.innerHTML=e,t.childNodes[0]},Dropzone.elementInside=function(e,t){if(e===t)return!0;for(;e=e.parentNode;)if(e===t)return!0;return!1},Dropzone.getElement=function(e,t){var n;if("string"==typeof e?n=document.querySelector(e):null!=e.nodeType&&(n=e),null==n)throw new Error("Invalid `".concat(t,"` option provided. Please provide a CSS selector or a plain HTML element."));return n},Dropzone.getElements=function(e,t){var n,i;if(e instanceof Array){i=[];try{var r=!0,o=!1,a=void 0;try{for(var l,s=e[Symbol.iterator]();!(r=(l=s.next()).done);r=!0)n=l.value,i.push(this.getElement(n,t))}catch(e){o=!0,a=e}finally{try{r||null==s.return||s.return()}finally{if(o)throw a}}}catch(e){i=null}}else if("string"==typeof e){var u=!0,c=!(i=[]),d=void 0;try{for(var p,h=document.querySelectorAll(e)[Symbol.iterator]();!(u=(p=h.next()).done);u=!0)n=p.value,i.push(n)}catch(e){c=!0,d=e}finally{try{u||null==h.return||h.return()}finally{if(c)throw d}}}else null!=e.nodeType&&(i=[e]);if(null==i||!i.length)throw new Error("Invalid `".concat(t,"` option provided. Please provide a CSS selector, a plain HTML element or a list of those."));return i},Dropzone.confirm=function(e,t,n){return window.confirm(e)?t():null!=n?n():void 0},Dropzone.isValidFile=function(e,t){if(!t)return!0;t=t.split(",");var n=e.type,i=n.replace(/\/.*$/,""),r=!0,o=!1,a=void 0;try{for(var l,s=t[Symbol.iterator]();!(r=(l=s.next()).done);r=!0){var u=l.value;if("."===(u=u.trim()).charAt(0)){if(-1!==e.name.toLowerCase().indexOf(u.toLowerCase(),e.name.length-u.length))return!0}else if(/\/\*$/.test(u)){if(i===u.replace(/\/.*$/,""))return!0}else if(n===u)return!0}}catch(e){o=!0,a=e}finally{try{r||null==s.return||s.return()}finally{if(o)throw a}}return!1},"undefined"!=typeof jQuery&&null!==jQuery&&(jQuery.fn.dropzone=function(e){return this.each(function(){return new Dropzone(this,e)})}), true&&null!==module?module.exports=Dropzone:window.Dropzone=Dropzone,Dropzone.ADDED="added",Dropzone.QUEUED="queued",Dropzone.ACCEPTED=Dropzone.QUEUED,Dropzone.UPLOADING="uploading",Dropzone.PROCESSING=Dropzone.UPLOADING,Dropzone.CANCELED="canceled",Dropzone.ERROR="error",Dropzone.SUCCESS="success";var detectVerticalSquash=function(e){e.naturalWidth;var t=e.naturalHeight,n=document.createElement("canvas");n.width=1,n.height=t;var i=n.getContext("2d");i.drawImage(e,0,0);for(var r=i.getImageData(1,0,1,t).data,o=0,a=t,l=t;o<l;){0===r[4*(l-1)+3]?a=l:o=l,l=a+o>>1}var s=l/t;return 0==s?1:s},drawImageIOSFix=function(e,t,n,i,r,o,a,l,s,u){var c=detectVerticalSquash(t);return e.drawImage(t,n,i,r,o,a,l,s,u/c)},ExifRestore=function(){function e(){_classCallCheck(this,e)}return _createClass(e,null,[{key:"initClass",value:function(){this.KEY_STR="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}},{key:"encode64",value:function(e){for(var t="",n=void 0,i=void 0,r="",o=void 0,a=void 0,l=void 0,s="",u=0;o=(n=e[u++])>>2,a=(3&n)<<4|(i=e[u++])>>4,l=(15&i)<<2|(r=e[u++])>>6,s=63&r,isNaN(i)?l=s=64:isNaN(r)&&(s=64),t=t+this.KEY_STR.charAt(o)+this.KEY_STR.charAt(a)+this.KEY_STR.charAt(l)+this.KEY_STR.charAt(s),n=i=r="",o=a=l=s="",u<e.length;);return t}},{key:"restore",value:function(e,t){if(!e.match("data:image/jpeg;base64,"))return t;var n=this.decode64(e.replace("data:image/jpeg;base64,","")),i=this.slice2Segments(n),r=this.exifManipulation(t,i);return"data:image/jpeg;base64,".concat(this.encode64(r))}},{key:"exifManipulation",value:function(e,t){var n=this.getExifArray(t),i=this.insertExif(e,n);return new Uint8Array(i)}},{key:"getExifArray",value:function(e){for(var t=void 0,n=0;n<e.length;){if(255===(t=e[n])[0]&225===t[1])return t;n++}return[]}},{key:"insertExif",value:function(e,t){var n=e.replace("data:image/jpeg;base64,",""),i=this.decode64(n),r=i.indexOf(255,3),o=i.slice(0,r),a=i.slice(r),l=o;return l=(l=l.concat(t)).concat(a)}},{key:"slice2Segments",value:function(e){for(var t=0,n=[];;){if(255===e[t]&218===e[t+1])break;if(255===e[t]&216===e[t+1])t+=2;else{var i=t+(256*e[t+2]+e[t+3])+2,r=e.slice(t,i);n.push(r),t=i}if(t>e.length)break}return n}},{key:"decode64",value:function(e){var t=void 0,n=void 0,i="",r=void 0,o=void 0,a="",l=0,s=[];for(/[^A-Za-z0-9\+\/\=]/g.exec(e)&&console.warn("There were invalid base64 characters in the input text.\nValid base64 characters are A-Z, a-z, 0-9, '+', '/',and '='\nExpect errors in decoding."),e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");t=this.KEY_STR.indexOf(e.charAt(l++))<<2|(r=this.KEY_STR.indexOf(e.charAt(l++)))>>4,n=(15&r)<<4|(o=this.KEY_STR.indexOf(e.charAt(l++)))>>2,i=(3&o)<<6|(a=this.KEY_STR.indexOf(e.charAt(l++))),s.push(t),64!==o&&s.push(n),64!==a&&s.push(i),t=n=i="",r=o=a="",l<e.length;);return s}}]),e}();ExifRestore.initClass();var contentLoaded=function(t,n){function i(e){if("readystatechange"!==e.type||"complete"===o.readyState)return("load"===e.type?t:o)[s](u+e.type,i,!1),!r&&(r=!0)?n.call(t,e.type||e):void 0}var r=!1,e=!0,o=t.document,a=o.documentElement,l=o.addEventListener?"addEventListener":"attachEvent",s=o.addEventListener?"removeEventListener":"detachEvent",u=o.addEventListener?"":"on";if("complete"!==o.readyState){if(o.createEventObject&&a.doScroll){try{e=!t.frameElement}catch(e){}e&&!function t(){try{a.doScroll("left")}catch(e){return void setTimeout(t,50)}return i("poll")}()}return o[l](u+"DOMContentLoaded",i,!1),o[l](u+"readystatechange",i,!1),t[l](u+"load",i,!1)}};function __guard__(e,t){return null!=e?t(e):void 0}function __guardMethod__(e,t,n){return null!=e&&"function"==typeof e[t]?n(e,t):void 0}Dropzone._autoDiscoverFunction=function(){if(Dropzone.autoDiscover)return Dropzone.discover()},contentLoaded(window,Dropzone._autoDiscoverFunction);
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/module.js */ "./node_modules/webpack/buildin/module.js")(module)))
/***/ }),
/***/ "./node_modules/webpack/buildin/module.js":
/*!***********************************!*\
!*** (webpack)/buildin/module.js ***!
\***********************************/
/*! no static exports found */
/***/ (function(module, exports) {
module.exports = function(module) {
if (!module.webpackPolyfill) {
module.deprecate = function() {};
module.paths = [];
// module.parent = undefined by default
if (!module.children) module.children = [];
Object.defineProperty(module, "loaded", {
enumerable: true,
get: function() {
return module.l;
}
});
Object.defineProperty(module, "id", {
enumerable: true,
get: function() {
return module.i;
}
});
module.webpackPolyfill = 1;
}
return module;
};
/***/ })
}]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZHJvcHpvbmUvZGlzdC9taW4vZHJvcHpvbmUubWluLmNzcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZHJvcHpvbmUvZGlzdC9taW4vZHJvcHpvbmUubWluLmpzIiwid2VicGFjazovLy8od2VicGFjaykvYnVpbGRpbi9tb2R1bGUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsdUM7Ozs7Ozs7Ozs7OztBQ0FBLDhDQUFhLG9CQUFvQix1RkFBdUYsZ0JBQWdCLGFBQWEsb0dBQW9HLEtBQUsseUNBQXlDLGtGQUFrRiw0QkFBNEIsK0VBQStFLDZDQUE2QyxLQUFLLG1DQUFtQyxvR0FBb0csU0FBUyx3QkFBd0IsNEdBQTRHLDBDQUEwQyxhQUFhLHFDQUFxQywwQkFBMEIsOEJBQThCLDREQUE0RCx1QkFBdUIsT0FBTyw4QkFBOEIsOEVBQThFLGdDQUFnQyxZQUFZLFdBQVcsS0FBSyxXQUFXLCtHQUErRyw2QkFBNkIsdUVBQXVFLHVCQUF1QixhQUFhLHdCQUF3Qix3QkFBd0IsNkJBQTZCLDBDQUEwQyw4RUFBOEUsRUFBRSw2QkFBNkIsb0NBQW9DLHlCQUF5QixNQUFNLHNEQUFzRCxJQUFJLHdCQUF3Qix1QkFBdUIsSUFBSSxpQ0FBaUMsdUJBQXVCLE1BQU0sdUJBQXVCLFNBQVMsU0FBUyxRQUFRLElBQUksOEJBQThCLFFBQVEsZUFBZSxhQUFhLEVBQUUsOEJBQThCLG1FQUFtRSxNQUFNLHlCQUF5QixrQkFBa0IsOERBQThELFlBQVksV0FBVyxLQUFLLGFBQWEsY0FBYyxPQUFPLGFBQWEsS0FBSyx1QkFBdUIsZ0JBQWdCLFVBQVUsOFpBQThaLG9FQUFvRSx5RkFBeUYsb0RBQW9ELHdCQUF3QixnQ0FBZ0MsMklBQTJJLDRIQUE0SCw4S0FBOEsscUhBQXFILCtMQUErTCx5RUFBeUUsdWNBQXVjLGtEQUFrRCxpQ0FBaUMsMmRBQTJkLGk5QkFBaTlCLFVBQVUsc0JBQXNCLGFBQWEsNEdB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bURBQW1ELElBQUksRUFBRSxrQ0FBa0MsVUFBVSxnQkFBZ0IsK0NBQStDLDhCQUE4Qix3Q0FBd0Msd0JBQXdCLGFBQWEsd0JBQXdCLDZCQUE2QixpQ0FBaUMsa0ZBQWtGLEVBQUUsaUNBQWlDLHdFQUF3RSwwT0FBME8sRUFBRSxVQUFVLEVBQUUsa0NBQWtDLDZCQUE2QixtQkFBbUIsK0NBQStDLG9FQUFvRSx1QkFBdUIsbUNBQW1DLEVBQUUsMkNBQTJDLGtEQUFrRCwwQkFBMEIsRUFBRSxxQ0FBcUMscUJBQXFCLFdBQVcsRUFBRSx5Q0FBeUMsSUFBSSxVQUFVLEVBQUUscUNBQXFDLGlDQUFpQyxtRkFBbUYsb0NBQW9DLEVBQUUsdUNBQXVDLGtCQUFrQixFQUFFLGlDQUFpQyxnQ0FBZ0MsS0FBSyw2Q0FBNkMsY0FBYyxvQkFBb0IsVUFBVSxFQUFFLGlDQUFpQywyREFBMkQsME9BQTBPLHlRQUF5USxFQUFFLFVBQVUsS0FBSyxHQUFHLHdCQUF3QixnQ0FBZ0MsY0FBYyw4SUFBOEksMkxBQTJMLDhCQUE4QixvQ0FBb0MsSUFBSSxrQkFBa0IsVUFBVSxpQkFBaUIsSUFBSSxtQkFBbUIsU0FBUyw2QkFBNkIsaUJBQWlCLEdBQUcsNkZBQTZGLHdCQUF3QiwyQkFBMkIsZ0NBQWdDLHNEQUFzRCwwQ0FBMEMsb0RBQW9ELHNEOzs7Ozs7Ozs7Ozs7QUNBcGgrQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoidmVuZG9yc35kcm9wem9uZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpbiIsIlwidXNlIHN0cmljdFwiO2Z1bmN0aW9uIF90eXBlb2YoZSl7cmV0dXJuKF90eXBlb2Y9XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/XCJzeW1ib2xcIjp0eXBlb2YgZX0pKGUpfWZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKGUsdCl7cmV0dXJuIXR8fFwib2JqZWN0XCIhPT1fdHlwZW9mKHQpJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiB0P19hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSk6dH1mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YoZSl7cmV0dXJuKF9nZXRQcm90b3R5cGVPZj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSkoZSl9ZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtyZXR1cm4gZX1mdW5jdGlvbiBfaW5oZXJpdHMoZSx0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJl9zZXRQcm90b3R5cGVPZihlLHQpfWZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihlLHQpe3JldHVybihfc2V0UHJvdG90eXBlT2Y9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9KShlLHQpfWZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9ZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXTtpLmVudW1lcmFibGU9aS5lbnVtZXJhYmxlfHwhMSxpLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiBpJiYoaS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsaS5rZXksaSl9fWZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLHQsbil7cmV0dXJuIHQmJl9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLHQpLG4mJl9kZWZpbmVQcm9wZXJ0aWVzKGUsbiksZX12YXIgRW1pdHRlcj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtfY2xhc3NDYWxsQ2hlY2sodGhpcyxlKX1yZXR1cm4gX2NyZWF0ZUNsYXNzKGUsW3trZXk6XCJvblwiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2NhbGxiYWNrcz10aGlzLl9jYWxsYmFja3N8fHt9LHRoaXMuX2NhbGxiYWNrc1tlXXx8KHRoaXMuX2NhbGxiYWNrc1tlXT1bXSksdGhpcy5fY2FsbGJhY2tzW2VdLnB1c2godCksdGhpc319LHtrZXk6XCJlbWl0XCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5fY2FsbGJhY2tzPXRoaXMuX2NhbGxiYWNrc3x8e307dmFyIHQ9dGhpcy5fY2FsbGJhY2tzW2VdO2lmKHQpe2Zvcih2YXIgbj1hcmd1bWVudHMubGVuZ3RoLGk9bmV3IEFycmF5KDE8bj9uLTE6MCkscj0xO3I8bjtyKyspaVtyLTFdPWFyZ3VtZW50c1tyXTt2YXIgbz0hMCxhPSExLGw9dm9pZCAwO3RyeXtmb3IodmFyIHMsdT10W1N5bWJvbC5pdGVyYXRvcl0oKTshKG89KHM9dS5uZXh0KCkpLmRvbmUpO289ITApe3MudmFsdWUuYXBwbHkodGhpcyxpKX19Y2F0Y2goZSl7YT0hMCxsPWV9ZmluYWxseXt0cnl7b3x8bnVsbD09dS5yZXR1cm58fHUucmV0dXJuKCl9ZmluYWxseXtpZihhKXRocm93IGx9fX1yZXR1cm4gdGhpc319LHtrZXk6XCJvZmZcIix2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKCF0aGlzLl9jYWxsYmFja3N8fDA9PT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiB0aGlzLl9jYWxsYmFja3M9e30sdGhpczt2YXIgbj10aGlzLl9jYWxsYmFja3NbZV07aWYoIW4pcmV0dXJuIHRoaXM7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGRlbGV0ZSB0aGlzLl9jYWxsYmFja3NbZV0sdGhpcztmb3IodmFyIGk9MDtpPG4ubGVuZ3RoO2krKyl7aWYobltpXT09PXQpe24uc3BsaWNlKGksMSk7YnJlYWt9fXJldHVybiB0aGlzfX1dKSxlfSgpLERyb3B6b25lPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gQyhlLHQpe3ZhciBuLGkscjtpZihfY2xhc3NDYWxsQ2hlY2sodGhpcyxDKSwobj1fcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLF9nZXRQcm90b3R5cGVPZihDKS5jYWxsKHRoaXMpKSkuZWxlbWVudD1lLG4udmVyc2lvbj1DLnZlcnNpb24sbi5kZWZhdWx0T3B0aW9ucy5wcmV2aWV3VGVtcGxhdGU9bi5kZWZhdWx0T3B0aW9ucy5wcmV2aWV3VGVtcGxhdGUucmVwbGFjZSgvXFxuKi9nLFwiXCIpLG4uY2xpY2thYmxlRWxlbWVudHM9W10sbi5saXN0ZW5lcnM9W10sbi5maWxlcz1bXSxcInN0cmluZ1wiPT10eXBlb2Ygbi5lbGVtZW50JiYobi5lbGVtZW50PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Iobi5lbGVtZW50KSksIW4uZWxlbWVudHx8bnVsbD09bi5lbGVtZW50Lm5vZGVUeXBlKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgZHJvcHpvbmUgZWxlbWVudC5cIik7aWYobi5lbGVtZW50LmRyb3B6b25lKXRocm93IG5ldyBFcnJvcihcIkRyb3B6b25lIGFscmVhZHkgYXR0YWNoZWQuXCIpO0MuaW5zdGFuY2VzLnB1c2goX2Fzc2VydFRoaXNJbml0aWFsaXplZChuKSksbi5lbGVtZW50LmRyb3B6b25lPV9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQobik7dmFyIG89bnVsbCE9KHI9Qy5vcHRpb25zRm9yRWxlbWVudChuLmVsZW1lbnQpKT9yOnt9O2lmKG4ub3B0aW9ucz1DLmV4dGVuZCh7fSxuLmRlZmF1bHRPcHRpb25zLG8sbnVsbCE9dD90Ont9KSxuLm9wdGlvbnMuZm9yY2VGYWxsYmFja3x8IUMuaXNCcm93c2VyU3VwcG9ydGVkKCkpcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKG4sbi5vcHRpb25zLmZhbGxiYWNrLmNhbGwoX2Fzc2VydFRoaXNJbml0aWFsaXplZChuKSkpO2lmKG51bGw9PW4ub3B0aW9ucy51cmwmJihuLm9wdGlvbnMudXJsPW4uZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJhY3Rpb25cIikpLCFuLm9wdGlvbnMudXJsKXRocm93IG5ldyBFcnJvcihcIk5vIFVSTCBwcm92aWRlZC5cIik7aWYobi5vcHRpb25zLmFjY2VwdGVkRmlsZXMmJm4ub3B0aW9ucy5hY2NlcHRlZE1pbWVUeXBlcyl0aHJvdyBuZXcgRXJyb3IoXCJZb3UgY2FuJ3QgcHJvdmlkZSBib3RoICdhY2NlcHRlZEZpbGVzJyBhbmQgJ2FjY2VwdGVkTWltZVR5cGVzJy4gJ2FjY2VwdGVkTWltZVR5cGVzJyBpcyBkZXByZWNhdGVkLlwiKTtpZihuLm9wdGlvbnMudXBsb2FkTXVsdGlwbGUmJm4ub3B0aW9ucy5jaHVua2luZyl0aHJvdyBuZXcgRXJyb3IoXCJZb3UgY2Fubm90IHNldCBib3RoOiB1cGxvYWRNdWx0aXBsZSBhbmQgY2h1bmtpbmcuXCIpO3JldHVybiBuLm9wdGlvbnMuYWNjZXB0ZWRNaW1lVHlwZXMmJihuLm9wdGlvbnMuYWNjZXB0ZWRGaWxlcz1uLm9wdGlvbnMuYWNjZXB0ZWRNaW1lVHlwZXMsZGVsZXRlIG4ub3B0aW9ucy5hY2NlcHRlZE1pbWVUeXBlcyksbnVsbCE9bi5vcHRpb25zLnJlbmFtZUZpbGVuYW1lJiYobi5vcHRpb25zLnJlbmFtZUZpbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIG4ub3B0aW9ucy5yZW5hbWVGaWxlbmFtZS5jYWxsKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQobiksZS5uYW1lLGUpfSksbi5vcHRpb25zLm1ldGhvZD1uLm9wdGlvbnMubWV0aG9kLnRvVXBwZXJDYXNlKCksKGk9bi5nZXRFeGlzdGluZ0ZhbGxiYWNrKCkpJiZpLnBhcmVudE5vZGUmJmkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChpKSwhMSE9PW4ub3B0aW9ucy5wcmV2aWV3c0NvbnRhaW5lciYmKG4ub3B0aW9ucy5wcmV2aWV3c0NvbnRhaW5lcj9uLnByZXZpZXdzQ29udGFpbmVyPUMuZ2V0RWxlbWVudChuLm9wdGlvbnMucHJldmlld3NDb250YWluZXIsXCJwcmV2aWV3c0NvbnRhaW5lclwiKTpuLnByZXZpZXdzQ29udGFpbmVyPW4uZWxlbWVudCksbi5vcHRpb25zLmNsaWNrYWJsZSYmKCEwPT09bi5vcHRpb25zLmNsaWNrYWJsZT9uLmNsaWNrYWJsZUVsZW1lbnRzPVtuLmVsZW1lbnRdOm4uY2xpY2thYmxlRWxlbWVudHM9Qy5nZXRFbGVtZW50cyhuLm9wdGlvbnMuY2xpY2thYmxlLFwiY2xpY2thYmxlXCIpKSxuLmluaXQoKSxufXJldHVybiBfaW5oZXJpdHMoQyxFbWl0dGVyKSxfY3JlYXRlQ2xhc3MoQyxudWxsLFt7a2V5OlwiaW5pdENsYXNzXCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnByb3RvdHlwZS5FbWl0dGVyPUVtaXR0ZXIsdGhpcy5wcm90b3R5cGUuZXZlbnRzPVtcImRyb3BcIixcImRyYWdzdGFydFwiLFwiZHJhZ2VuZFwiLFwiZHJhZ2VudGVyXCIsXCJkcmFnb3ZlclwiLFwiZHJhZ2xlYXZlXCIsXCJhZGRlZGZpbGVcIixcImFkZGVkZmlsZXNcIixcInJlbW92ZWRmaWxlXCIsXCJ0aHVtYm5haWxcIixcImVycm9yXCIsXCJlcnJvcm11bHRpcGxlXCIsXCJwcm9jZXNzaW5nXCIsXCJwcm9jZXNzaW5nbXVsdGlwbGVcIixcInVwbG9hZHByb2dyZXNzXCIsXCJ0b3RhbHVwbG9hZHByb2dyZXNzXCIsXCJzZW5kaW5nXCIsXCJzZW5kaW5nbXVsdGlwbGVcIixcInN1Y2Nlc3NcIixcInN1Y2Nlc3NtdWx0aXBsZVwiLFwiY2FuY2VsZWRcIixcImNhbmNlbGVkbXVsdGlwbGVcIixcImNvbXBsZXRlXCIsXCJjb21wbGV0ZW11bHRpcGxlXCIsXCJyZXNldFwiLFwibWF4ZmlsZXNleGNlZWRlZFwiLFwibWF4ZmlsZXNyZWFjaGVkXCIsXCJxdWV1ZWNvbXBsZXRlXCJdLHRoaXMucHJvdG90eXBlLmRlZmF1bHRPcHRpb25zPXt1cmw6bnVsbCxtZXRob2Q6XCJwb3N0XCIsd2l0aENyZWRlbnRpYWxzOiExLHRpbWVvdXQ6M2U0LHBhcmFsbGVsVXBsb2FkczoyLHVwbG9hZE11bHRpcGxlOiExLGNodW5raW5nOiExLGZvcmNlQ2h1bmtpbmc6ITEsY2h1bmtTaXplOjJlNixwYXJhbGxlbENodW5rVXBsb2FkczohMSxyZXRyeUNodW5rczohMSxyZXRyeUNodW5rc0xpbWl0OjMsbWF4RmlsZXNpemU6MjU2LHBhcmFtTmFtZTpcImZpbGVcIixjcmVhdGVJbWFnZVRodW1ibmFpbHM6ITAsbWF4VGh1bWJuYWlsRmlsZXNpemU6MTAsdGh1bWJuYWlsV2lkdGg6MTIwLHRodW1ibmFpbEhlaWdodDoxMjAsdGh1bWJuYWlsTWV0aG9kOlwiY3JvcFwiLHJlc2l6ZVdpZHRoOm51bGwscmVzaXplSGVpZ2h0Om51bGwscmVzaXplTWltZVR5cGU6bnVsbCxyZXNpemVRdWFsaXR5Oi44LHJlc2l6ZU1ldGhvZDpcImNvbnRhaW5cIixmaWxlc2l6ZUJhc2U6MWUzLG1heEZpbGVzOm51bGwsaGVhZGVyczpudWxsLGNsaWNrYWJsZTohMCxpZ25vcmVIaWRkZW5GaWxlczohMCxhY2NlcHRlZEZpbGVzOm51bGwsYWNjZXB0ZWRNaW1lVHlwZXM6bnVsbCxhdXRvUHJvY2Vzc1F1ZXVlOiEwLGF1dG9RdWV1ZTohMCxhZGRSZW1vdmVMaW5rczohMSxwcmV2aWV3c0NvbnRhaW5lcjpudWxsLGhpZGRlbklucHV0Q29udGFpbmVyOlwiYm9keVwiLGNhcHR1cmU6bnVsbCxyZW5hbWVGaWxlbmFtZTpudWxsLHJlbmFtZUZpbGU6bnVsbCxmb3JjZUZhbGxiYWNrOiExLGRpY3REZWZhdWx0TWVzc2FnZTpcIkRyb3AgZmlsZXMgaGVyZSB0byB1cGxvYWRcIixkaWN0RmFsbGJhY2tNZXNzYWdlOlwiWW91ciBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgZHJhZyduJ2Ryb3AgZmlsZSB1cGxvYWRzLlwiLGRpY3RGYWxsYmFja1RleHQ6XCJQbGVhc2UgdXNlIHRoZSBmYWxsYmFjayBmb3JtIGJlbG93IHRvIHVwbG9hZCB5b3VyIGZpbGVzIGxpa2UgaW4gdGhlIG9sZGVuIGRheXMuXCIsZGljdEZpbGVUb29CaWc6XCJGaWxlIGlzIHRvbyBiaWcgKHt7ZmlsZXNpemV9fU1pQikuIE1heCBmaWxlc2l6ZToge3ttYXhGaWxlc2l6ZX19TWlCLlwiLGRpY3RJbnZhbGlkRmlsZVR5cGU6XCJZb3UgY2FuJ3QgdXBsb2FkIGZpbGVzIG9mIHRoaXMgdHlwZS5cIixkaWN0UmVzcG9uc2VFcnJvcjpcIlNlcnZlciByZXNwb25kZWQgd2l0aCB7e3N0YXR1c0NvZGV9fSBjb2RlLlwiLGRpY3RDYW5jZWxVcGxvYWQ6XCJDYW5jZWwgdXBsb2FkXCIsZGljdFVwbG9hZENhbmNlbGVkOlwiVXBsb2FkIGNhbmNlbGVkLlwiLGRpY3RDYW5jZWxVcGxvYWRDb25maXJtYXRpb246XCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gY2FuY2VsIHRoaXMgdXBsb2FkP1wiLGRpY3RSZW1vdmVGaWxlOlwiUmVtb3ZlIGZpbGVcIixkaWN0UmVtb3ZlRmlsZUNvbmZpcm1hdGlvbjpudWxsLGRpY3RNYXhGaWxlc0V4Y2VlZGVkOlwiWW91IGNhbiBub3QgdXBsb2FkIGFueSBtb3JlIGZpbGVzLlwiLGRpY3RGaWxlU2l6ZVVuaXRzOnt0YjpcIlRCXCIsZ2I6XCJHQlwiLG1iOlwiTUJcIixrYjpcIktCXCIsYjpcImJcIn0saW5pdDpmdW5jdGlvbigpe30scGFyYW1zOmZ1bmN0aW9uKGUsdCxuKXtpZihuKXJldHVybntkenV1aWQ6bi5maWxlLnVwbG9hZC51dWlkLGR6Y2h1bmtpbmRleDpuLmluZGV4LGR6dG90YWxmaWxlc2l6ZTpuLmZpbGUuc2l6ZSxkemNodW5rc2l6ZTp0aGlzLm9wdGlvbnMuY2h1bmtTaXplLGR6dG90YWxjaHVua2NvdW50Om4uZmlsZS51cGxvYWQudG90YWxDaHVua0NvdW50LGR6Y2h1bmtieXRlb2Zmc2V0Om4uaW5kZXgqdGhpcy5vcHRpb25zLmNodW5rU2l6ZX19LGFjY2VwdDpmdW5jdGlvbihlLHQpe3JldHVybiB0KCl9LGNodW5rc1VwbG9hZGVkOmZ1bmN0aW9uKGUsdCl7dCgpfSxmYWxsYmFjazpmdW5jdGlvbigpe3ZhciBlO3RoaXMuZWxlbWVudC5jbGFzc05hbWU9XCJcIi5jb25jYXQodGhpcy5lbGVtZW50LmNsYXNzTmFtZSxcIiBkei1icm93c2VyLW5vdC1zdXBwb3J0ZWRcIik7dmFyIHQ9ITAsbj0hMSxpPXZvaWQgMDt0cnl7Zm9yKHZhciByLG89dGhpcy5lbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiZGl2XCIpW1N5bWJvbC5pdGVyYXRvcl0oKTshKHQ9KHI9by5uZXh0KCkpLmRvbmUpO3Q9ITApe3ZhciBhPXIudmFsdWU7aWYoLyhefCApZHotbWVzc2FnZSgkfCApLy50ZXN0KGEuY2xhc3NOYW1lKSl7KGU9YSkuY2xhc3NOYW1lPVwiZHotbWVzc2FnZVwiO2JyZWFrfX19Y2F0Y2goZSl7bj0hMCxpPWV9ZmluYWxseXt0cnl7dHx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihuKXRocm93IGl9fWV8fChlPUMuY3JlYXRlRWxlbWVudCgnPGRpdiBjbGFzcz1cImR6LW1lc3NhZ2VcIj48c3Bhbj48L3NwYW4+PC9kaXY+JyksdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGUpKTt2YXIgbD1lLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwic3BhblwiKVswXTtyZXR1cm4gbCYmKG51bGwhPWwudGV4dENvbnRlbnQ/bC50ZXh0Q29udGVudD10aGlzLm9wdGlvbnMuZGljdEZhbGxiYWNrTWVzc2FnZTpudWxsIT1sLmlubmVyVGV4dCYmKGwuaW5uZXJUZXh0PXRoaXMub3B0aW9ucy5kaWN0RmFsbGJhY2tNZXNzYWdlKSksdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZ2V0RmFsbGJhY2tGb3JtKCkpfSxyZXNpemU6ZnVuY3Rpb24oZSx0LG4saSl7dmFyIHI9e3NyY1g6MCxzcmNZOjAsc3JjV2lkdGg6ZS53aWR0aCxzcmNIZWlnaHQ6ZS5oZWlnaHR9LG89ZS53aWR0aC9lLmhlaWdodDtudWxsPT10JiZudWxsPT1uPyh0PXIuc3JjV2lkdGgsbj1yLnNyY0hlaWdodCk6bnVsbD09dD90PW4qbzpudWxsPT1uJiYobj10L28pO3ZhciBhPSh0PU1hdGgubWluKHQsci5zcmNXaWR0aCkpLyhuPU1hdGgubWluKG4sci5zcmNIZWlnaHQpKTtpZihyLnNyY1dpZHRoPnR8fHIuc3JjSGVpZ2h0Pm4paWYoXCJjcm9wXCI9PT1pKWE8bz8oci5zcmNIZWlnaHQ9ZS5oZWlnaHQsci5zcmNXaWR0aD1yLnNyY0hlaWdodCphKTooci5zcmNXaWR0aD1lLndpZHRoLHIuc3JjSGVpZ2h0PXIuc3JjV2lkdGgvYSk7ZWxzZXtpZihcImNvbnRhaW5cIiE9PWkpdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biByZXNpemVNZXRob2QgJ1wiLmNvbmNhdChpLFwiJ1wiKSk7YTxvP249dC9vOnQ9bipvfXJldHVybiByLnNyY1g9KGUud2lkdGgtci5zcmNXaWR0aCkvMixyLnNyY1k9KGUuaGVpZ2h0LXIuc3JjSGVpZ2h0KS8yLHIudHJnV2lkdGg9dCxyLnRyZ0hlaWdodD1uLHJ9LHRyYW5zZm9ybUZpbGU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4odGhpcy5vcHRpb25zLnJlc2l6ZVdpZHRofHx0aGlzLm9wdGlvbnMucmVzaXplSGVpZ2h0KSYmZS50eXBlLm1hdGNoKC9pbWFnZS4qLyk/dGhpcy5yZXNpemVJbWFnZShlLHRoaXMub3B0aW9ucy5yZXNpemVXaWR0aCx0aGlzLm9wdGlvbnMucmVzaXplSGVpZ2h0LHRoaXMub3B0aW9ucy5yZXNpemVNZXRob2QsdCk6dChlKX0scHJldmlld1RlbXBsYXRlOic8ZGl2IGNsYXNzPVwiZHotcHJldmlldyBkei1maWxlLXByZXZpZXdcIj5cXG4gIDxkaXYgY2xhc3M9XCJkei1pbWFnZVwiPjxpbWcgZGF0YS1kei10aHVtYm5haWwgLz48L2Rpdj5cXG4gIDxkaXYgY2xhc3M9XCJkei1kZXRhaWxzXCI+XFxuICAgIDxkaXYgY2xhc3M9XCJkei1zaXplXCI+PHNwYW4gZGF0YS1kei1zaXplPjwvc3Bhbj48L2Rpdj5cXG4gICAgPGRpdiBjbGFzcz1cImR6LWZpbGVuYW1lXCI+PHNwYW4gZGF0YS1kei1uYW1lPjwvc3Bhbj48L2Rpdj5cXG4gIDwvZGl2PlxcbiAgPGRpdiBjbGFzcz1cImR6LXByb2dyZXNzXCI+PHNwYW4gY2xhc3M9XCJkei11cGxvYWRcIiBkYXRhLWR6LXVwbG9hZHByb2dyZXNzPjwvc3Bhbj48L2Rpdj5cXG4gIDxkaXYgY2xhc3M9XCJkei1lcnJvci1tZXNzYWdlXCI+PHNwYW4gZGF0YS1kei1lcnJvcm1lc3NhZ2U+PC9zcGFuPjwvZGl2PlxcbiAgPGRpdiBjbGFzcz1cImR6LXN1Y2Nlc3MtbWFya1wiPlxcbiAgICA8c3ZnIHdpZHRoPVwiNTRweFwiIGhlaWdodD1cIjU0cHhcIiB2aWV3Qm94PVwiMCAwIDU0IDU0XCIgdmVyc2lvbj1cIjEuMVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIj5cXG4gICAgICA8dGl0bGU+Q2hlY2s8L3RpdGxlPlxcbiAgICAgIDxnIHN0cm9rZT1cIm5vbmVcIiBzdHJva2Utd2lkdGg9XCIxXCIgZmlsbD1cIm5vbmVcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCI+XFxuICAgICAgICA8cGF0aCBkPVwiTTIzLjUsMzEuODQzMTQ1OCBMMTcuNTg1MjQxOSwyNS45MjgzODc3IEMxNi4wMjQ4MjUzLDI0LjM2Nzk3MTEgMTMuNDkxMDI5NCwyNC4zNjY4MzUgMTEuOTI4OTMyMiwyNS45Mjg5MzIyIEMxMC4zNzAwMTM2LDI3LjQ4Nzg1MDggMTAuMzY2NTkxMiwzMC4wMjM0NDU1IDExLjkyODM4NzcsMzEuNTg1MjQxOSBMMjAuNDE0NzU4MSw0MC4wNzE2MTIzIEMyMC41MTMzOTk5LDQwLjE3MDI1NDEgMjAuNjE1OTMxNSw0MC4yNjI2NjQ5IDIwLjcyMTg2MTUsNDAuMzQ4ODQzNSBDMjIuMjgzNTY2OSw0MS44NzI1NjUxIDI0Ljc5NDIzNCw0MS44NjI2MjAyIDI2LjM0NjE1NjQsNDAuMzEwNjk3OCBMNDMuMzEwNjk3OCwyMy4zNDYxNTY0IEM0NC44NzcxMDIxLDIxLjc3OTc1MjEgNDQuODc1ODA1NywxOS4yNDgzODg3IDQzLjMxMzcwODUsMTcuNjg2MjkxNSBDNDEuNzU0Nzg5OSwxNi4xMjczNzI5IDM5LjIxNzYwMzUsMTYuMTI1NTQyMiAzNy42NTM4NDM2LDE3LjY4OTMwMjIgTDIzLjUsMzEuODQzMTQ1OCBaIE0yNyw1MyBDNDEuMzU5NDAzNSw1MyA1Myw0MS4zNTk0MDM1IDUzLDI3IEM1MywxMi42NDA1OTY1IDQxLjM1OTQwMzUsMSAyNywxIEMxMi42NDA1OTY1LDEgMSwxMi42NDA1OTY1IDEsMjcgQzEsNDEuMzU5NDAzNSAxMi42NDA1OTY1LDUzIDI3LDUzIFpcIiBzdHJva2Utb3BhY2l0eT1cIjAuMTk4Nzk0MTU4XCIgc3Ryb2tlPVwiIzc0NzQ3NFwiIGZpbGwtb3BhY2l0eT1cIjAuODE2NTE5NDc1XCIgZmlsbD1cIiNGRkZGRkZcIj48L3BhdGg+XFxuICAgICAgPC9nPlxcbiAgICA8L3N2Zz5cXG4gIDwvZGl2PlxcbiAgPGRpdiBjbGFzcz1cImR6LWVycm9yLW1hcmtcIj5cXG4gICAgPHN2ZyB3aWR0aD1cIjU0cHhcIiBoZWlnaHQ9XCI1NHB4XCIgdmlld0JveD1cIjAgMCA1NCA1NFwiIHZlcnNpb249XCIxLjFcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCI+XFxuICAgICAgPHRpdGxlPkVycm9yPC90aXRsZT5cXG4gICAgICA8ZyBzdHJva2U9XCJub25lXCIgc3Ryb2tlLXdpZHRoPVwiMVwiIGZpbGw9XCJub25lXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiPlxcbiAgICAgICAgPGcgc3Ryb2tlPVwiIzc0NzQ3NFwiIHN0cm9rZS1vcGFjaXR5PVwiMC4xOTg3OTQxNThcIiBmaWxsPVwiI0ZGRkZGRlwiIGZpbGwtb3BhY2l0eT1cIjAuODE2NTE5NDc1XCI+XFxuICAgICAgICAgIDxwYXRoIGQ9XCJNMzIuNjU2ODU0MiwyOSBMMzguMzEwNjk3OCwyMy4zNDYxNTY0IEMzOS44NzcxMDIxLDIxLjc3OTc1MjEgMzkuODc1ODA1NywxOS4yNDgzODg3IDM4LjMxMzcwODUsMTcuNjg2MjkxNSBDMzYuNzU0Nzg5OSwxNi4xMjczNzI5IDM0LjIxNzYwMzUsMTYuMTI1NTQyMiAzMi42NTM4NDM2LDE3LjY4OTMwMjIgTDI3LDIzLjM0MzE0NTggTDIxLjM0NjE1NjQsMTcuNjg5MzAyMiBDMTkuNzgyMzk2NSwxNi4xMjU1NDIyIDE3LjI0NTIxMDEsMTYuMTI3MzcyOSAxNS42ODYyOTE1LDE3LjY4NjI5MTUgQzE0LjEyNDE5NDMsMTkuMjQ4Mzg4NyAxNC4xMjI4OTc5LDIxLjc3OTc1MjEgMTUuNjg5MzAyMiwyMy4zNDYxNTY0IEwyMS4zNDMxNDU4LDI5IEwxNS42ODkzMDIyLDM0LjY1Mzg0MzYgQzE0LjEyMjg5NzksMzYuMjIwMjQ3OSAxNC4xMjQxOTQzLDM4Ljc1MTYxMTMgMTUuNjg2MjkxNSw0MC4zMTM3MDg1IEMxNy4yNDUyMTAxLDQxLjg3MjYyNzEgMTkuNzgyMzk2NSw0MS44NzQ0NTc4IDIxLjM0NjE1NjQsNDAuMzEwNjk3OCBMMjcsMzQuNjU2ODU0MiBMMzIuNjUzODQzNiw0MC4zMTA2OTc4IEMzNC4yMTc2MDM1LDQxLjg3NDQ1NzggMzYuNzU0Nzg5OSw0MS44NzI2MjcxIDM4LjMxMzcwODUsNDAuMzEzNzA4NSBDMzkuODc1ODA1NywzOC43NTE2MTEzIDM5Ljg3NzEwMjEsMzYuMjIwMjQ3OSAzOC4zMTA2OTc4LDM0LjY1Mzg0MzYgTDMyLjY1Njg1NDIsMjkgWiBNMjcsNTMgQzQxLjM1OTQwMzUsNTMgNTMsNDEuMzU5NDAzNSA1MywyNyBDNTMsMTIuNjQwNTk2NSA0MS4zNTk0MDM1LDEgMjcsMSBDMTIuNjQwNTk2NSwxIDEsMTIuNjQwNTk2NSAxLDI3IEMxLDQxLjM1OTQwMzUgMTIuNjQwNTk2NSw1MyAyNyw1MyBaXCI+PC9wYXRoPlxcbiAgICAgICAgPC9nPlxcbiAgICAgIDwvZz5cXG4gICAgPC9zdmc+XFxuICA8L2Rpdj5cXG48L2Rpdj4nLGRyb3A6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJkei1kcmFnLWhvdmVyXCIpfSxkcmFnc3RhcnQ6ZnVuY3Rpb24oKXt9LGRyYWdlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJkei1kcmFnLWhvdmVyXCIpfSxkcmFnZW50ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJkei1kcmFnLWhvdmVyXCIpfSxkcmFnb3ZlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChcImR6LWRyYWctaG92ZXJcIil9LGRyYWdsZWF2ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShcImR6LWRyYWctaG92ZXJcIil9LHBhc3RlOmZ1bmN0aW9uKCl7fSxyZXNldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShcImR6LXN0YXJ0ZWRcIil9LGFkZGVkZmlsZTpmdW5jdGlvbih0KXt2YXIgbj10aGlzO2lmKHRoaXMuZWxlbWVudD09PXRoaXMucHJldmlld3NDb250YWluZXImJnRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKFwiZHotc3RhcnRlZFwiKSx0aGlzLnByZXZpZXdzQ29udGFpbmVyKXt0LnByZXZpZXdFbGVtZW50PUMuY3JlYXRlRWxlbWVudCh0aGlzLm9wdGlvbnMucHJldmlld1RlbXBsYXRlLnRyaW0oKSksdC5wcmV2aWV3VGVtcGxhdGU9dC5wcmV2aWV3RWxlbWVudCx0aGlzLnByZXZpZXdzQ29udGFpbmVyLmFwcGVuZENoaWxkKHQucHJldmlld0VsZW1lbnQpO3ZhciBlPSEwLGk9ITEscj12b2lkIDA7dHJ5e2Zvcih2YXIgbyxhPXQucHJldmlld0VsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLWR6LW5hbWVdXCIpW1N5bWJvbC5pdGVyYXRvcl0oKTshKGU9KG89YS5uZXh0KCkpLmRvbmUpO2U9ITApe3ZhciBsPW8udmFsdWU7bC50ZXh0Q29udGVudD10Lm5hbWV9fWNhdGNoKGUpe2k9ITAscj1lfWZpbmFsbHl7dHJ5e2V8fG51bGw9PWEucmV0dXJufHxhLnJldHVybigpfWZpbmFsbHl7aWYoaSl0aHJvdyByfX12YXIgcz0hMCx1PSExLGM9dm9pZCAwO3RyeXtmb3IodmFyIGQscD10LnByZXZpZXdFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1kei1zaXplXVwiKVtTeW1ib2wuaXRlcmF0b3JdKCk7IShzPShkPXAubmV4dCgpKS5kb25lKTtzPSEwKShsPWQudmFsdWUpLmlubmVySFRNTD10aGlzLmZpbGVzaXplKHQuc2l6ZSl9Y2F0Y2goZSl7dT0hMCxjPWV9ZmluYWxseXt0cnl7c3x8bnVsbD09cC5yZXR1cm58fHAucmV0dXJuKCl9ZmluYWxseXtpZih1KXRocm93IGN9fXRoaXMub3B0aW9ucy5hZGRSZW1vdmVMaW5rcyYmKHQuX3JlbW92ZUxpbms9Qy5jcmVhdGVFbGVtZW50KCc8YSBjbGFzcz1cImR6LXJlbW92ZVwiIGhyZWY9XCJqYXZhc2NyaXB0OnVuZGVmaW5lZDtcIiBkYXRhLWR6LXJlbW92ZT4nLmNvbmNhdCh0aGlzLm9wdGlvbnMuZGljdFJlbW92ZUZpbGUsXCI8L2E+XCIpKSx0LnByZXZpZXdFbGVtZW50LmFwcGVuZENoaWxkKHQuX3JlbW92ZUxpbmspKTt2YXIgaD1mdW5jdGlvbihlKXtyZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCksdC5zdGF0dXM9PT1DLlVQTE9BRElORz9DLmNvbmZpcm0obi5vcHRpb25zLmRpY3RDYW5jZWxVcGxvYWRDb25maXJtYXRpb24sZnVuY3Rpb24oKXtyZXR1cm4gbi5yZW1vdmVGaWxlKHQpfSk6bi5vcHRpb25zLmRpY3RSZW1vdmVGaWxlQ29uZmlybWF0aW9uP0MuY29uZmlybShuLm9wdGlvbnMuZGljdFJlbW92ZUZpbGVDb25maXJtYXRpb24sZnVuY3Rpb24oKXtyZXR1cm4gbi5yZW1vdmVGaWxlKHQpfSk6bi5yZW1vdmVGaWxlKHQpfSxmPSEwLHY9ITEsbT12b2lkIDA7dHJ5e2Zvcih2YXIgeSxnPXQucHJldmlld0VsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLWR6LXJlbW92ZV1cIilbU3ltYm9sLml0ZXJhdG9yXSgpOyEoZj0oeT1nLm5leHQoKSkuZG9uZSk7Zj0hMCl7eS52YWx1ZS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIixoKX19Y2F0Y2goZSl7dj0hMCxtPWV9ZmluYWxseXt0cnl7Znx8bnVsbD09Zy5yZXR1cm58fGcucmV0dXJuKCl9ZmluYWxseXtpZih2KXRocm93IG19fX19LHJlbW92ZWRmaWxlOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lLnByZXZpZXdFbGVtZW50JiZudWxsIT1lLnByZXZpZXdFbGVtZW50LnBhcmVudE5vZGUmJmUucHJldmlld0VsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlLnByZXZpZXdFbGVtZW50KSx0aGlzLl91cGRhdGVNYXhGaWxlc1JlYWNoZWRDbGFzcygpfSx0aHVtYm5haWw6ZnVuY3Rpb24oZSx0KXtpZihlLnByZXZpZXdFbGVtZW50KXtlLnByZXZpZXdFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJkei1maWxlLXByZXZpZXdcIik7dmFyIG49ITAsaT0hMSxyPXZvaWQgMDt0cnl7Zm9yKHZhciBvLGE9ZS5wcmV2aWV3RWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtZHotdGh1bWJuYWlsXVwiKVtTeW1ib2wuaXRlcmF0b3JdKCk7IShuPShvPWEubmV4dCgpKS5kb25lKTtuPSEwKXt2YXIgbD1vLnZhbHVlO2wuYWx0PWUubmFtZSxsLnNyYz10fX1jYXRjaChlKXtpPSEwLHI9ZX1maW5hbGx5e3RyeXtufHxudWxsPT1hLnJldHVybnx8YS5yZXR1cm4oKX1maW5hbGx5e2lmKGkpdGhyb3cgcn19cmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gZS5wcmV2aWV3RWxlbWVudC5jbGFzc0xpc3QuYWRkKFwiZHotaW1hZ2UtcHJldmlld1wiKX0sMSl9fSxlcnJvcjpmdW5jdGlvbihlLHQpe2lmKGUucHJldmlld0VsZW1lbnQpe2UucHJldmlld0VsZW1lbnQuY2xhc3NMaXN0LmFkZChcImR6LWVycm9yXCIpLFwiU3RyaW5nXCIhPXR5cGVvZiB0JiZ0LmVycm9yJiYodD10LmVycm9yKTt2YXIgbj0hMCxpPSExLHI9dm9pZCAwO3RyeXtmb3IodmFyIG8sYT1lLnByZXZpZXdFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1kei1lcnJvcm1lc3NhZ2VdXCIpW1N5bWJvbC5pdGVyYXRvcl0oKTshKG49KG89YS5uZXh0KCkpLmRvbmUpO249ITApe28udmFsdWUudGV4dENvbnRlbnQ9dH19Y2F0Y2goZSl7aT0hMCxyPWV9ZmluYWxseXt0cnl7bnx8bnVsbD09YS5yZXR1cm58fGEucmV0dXJuKCl9ZmluYWxseXtpZihpKXRocm93IHJ9fX19LGVycm9ybXVsdGlwbGU6ZnVuY3Rpb24oKXt9LHByb2Nlc3Npbmc6ZnVuY3Rpb24oZSl7aWYoZS5wcmV2aWV3RWxlbWVudCYmKGUucHJldmlld0VsZW1lbnQuY2xhc3NMaXN0LmFkZChcImR6LXByb2Nlc3NpbmdcIiksZS5fcmVtb3ZlTGluaykpcmV0dXJuIGUuX3JlbW92ZUxpbmsuaW5uZXJIVE1MPXRoaXMub3B0aW9ucy5kaWN0Q2FuY2VsVXBsb2FkfSxwcm9jZXNzaW5nbXVsdGlwbGU6ZnVuY3Rpb24oKXt9LHVwbG9hZHByb2dyZXNzOmZ1bmN0aW9uKGUsdCl7aWYoZS5wcmV2aWV3RWxlbWVudCl7dmFyIG49ITAsaT0hMSxyPXZvaWQgMDt0cnl7Zm9yKHZhciBvLGE9ZS5wcmV2aWV3RWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtZHotdXBsb2FkcHJvZ3Jlc3NdXCIpW1N5bWJvbC5pdGVyYXRvcl0oKTshKG49KG89YS5uZXh0KCkpLmRvbmUpO249ITApe3ZhciBsPW8udmFsdWU7XCJQUk9HUkVTU1wiPT09bC5ub2RlTmFtZT9sLnZhbHVlPXQ6bC5zdHlsZS53aWR0aD1cIlwiLmNvbmNhdCh0LFwiJVwiKX19Y2F0Y2goZSl7aT0hMCxyPWV9ZmluYWxseXt0cnl7bnx8bnVsbD09YS5yZXR1cm58fGEucmV0dXJuKCl9ZmluYWxseXtpZihpKXRocm93IHJ9fX19LHRvdGFsdXBsb2FkcHJvZ3Jlc3M6ZnVuY3Rpb24oKXt9LHNlbmRpbmc6ZnVuY3Rpb24oKXt9LHNlbmRpbmdtdWx0aXBsZTpmdW5jdGlvbigpe30sc3VjY2VzczpmdW5jdGlvbihlKXtpZihlLnByZXZpZXdFbGVtZW50KXJldHVybiBlLnByZXZpZXdFbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJkei1zdWNjZXNzXCIpfSxzdWNjZXNzbXVsdGlwbGU6ZnVuY3Rpb24oKXt9LGNhbmNlbGVkOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVtaXQoXCJlcnJvclwiLGUsdGhpcy5vcHRpb25zLmRpY3RVcGxvYWRDYW5jZWxlZCl9LGNhbmNlbGVkbXVsdGlwbGU6ZnVuY3Rpb24oKXt9LGNvbXBsZXRlOmZ1bmN0aW9uKGUpe2lmKGUuX3JlbW92ZUxpbmsmJihlLl9yZW1vdmVMaW5rLmlubmVySFRNTD10aGlzLm9wdGlvbnMuZGljdFJlbW92ZUZpbGUpLGUucHJldmlld0VsZW1lbnQpcmV0dXJuIGUucHJldmlld0VsZW1lbnQuY2xhc3NMaXN0LmFkZChcImR6LWNvbXBsZXRlXCIpfSxjb21wbGV0ZW11bHRpcGxlOmZ1bmN0aW9uKCl7fSxtYXhmaWxlc2V4Y2VlZGVkOmZ1bmN0aW9uKCl7fSxtYXhmaWxlc3JlYWNoZWQ6ZnVuY3Rpb24oKXt9LHF1ZXVlY29tcGxldGU6ZnVuY3Rpb24oKXt9LGFkZGVkZmlsZXM6ZnVuY3Rpb24oKXt9fSx0aGlzLnByb3RvdHlwZS5fdGh1bWJuYWlsUXVldWU9W10sdGhpcy5wcm90b3R5cGUuX3Byb2Nlc3NpbmdUaHVtYm5haWw9ITF9fSx7a2V5OlwiZXh0ZW5kXCIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcgQXJyYXkoMTx0P3QtMTowKSxpPTE7aTx0O2krKyluW2ktMV09YXJndW1lbnRzW2ldO2Zvcih2YXIgcj0wLG89bjtyPG8ubGVuZ3RoO3IrKyl7dmFyIGE9b1tyXTtmb3IodmFyIGwgaW4gYSl7dmFyIHM9YVtsXTtlW2xdPXN9fXJldHVybiBlfX1dKSxfY3JlYXRlQ2xhc3MoQyxbe2tleTpcImdldEFjY2VwdGVkRmlsZXNcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbGVzLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS5hY2NlcHRlZH0pLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZX0pfX0se2tleTpcImdldFJlamVjdGVkRmlsZXNcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbGVzLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5hY2NlcHRlZH0pLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZX0pfX0se2tleTpcImdldEZpbGVzV2l0aFN0YXR1c1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmZpbGVzLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS5zdGF0dXM9PT10fSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlfSl9fSx7a2V5OlwiZ2V0UXVldWVkRmlsZXNcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEZpbGVzV2l0aFN0YXR1cyhDLlFVRVVFRCl9fSx7a2V5OlwiZ2V0VXBsb2FkaW5nRmlsZXNcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEZpbGVzV2l0aFN0YXR1cyhDLlVQTE9BRElORyl9fSx7a2V5OlwiZ2V0QWRkZWRGaWxlc1wiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0RmlsZXNXaXRoU3RhdHVzKEMuQURERUQpfX0se2tleTpcImdldEFjdGl2ZUZpbGVzXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxlcy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3RhdHVzPT09Qy5VUExPQURJTkd8fGUuc3RhdHVzPT09Qy5RVUVVRUR9KS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KX19LHtrZXk6XCJpbml0XCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgcz10aGlzO2lmKFwiZm9ybVwiPT09dGhpcy5lbGVtZW50LnRhZ05hbWUmJnRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJlbmN0eXBlXCIsXCJtdWx0aXBhcnQvZm9ybS1kYXRhXCIpLHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoXCJkcm9wem9uZVwiKSYmIXRoaXMuZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiLmR6LW1lc3NhZ2VcIikmJnRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChDLmNyZWF0ZUVsZW1lbnQoJzxkaXYgY2xhc3M9XCJkei1kZWZhdWx0IGR6LW1lc3NhZ2VcIj48YnV0dG9uIGNsYXNzPVwiZHotYnV0dG9uXCIgdHlwZT1cImJ1dHRvblwiPicuY29uY2F0KHRoaXMub3B0aW9ucy5kaWN0RGVmYXVsdE1lc3NhZ2UsXCI8L2J1dHRvbj48L2Rpdj5cIikpKSx0aGlzLmNsaWNrYWJsZUVsZW1lbnRzLmxlbmd0aCl7IWZ1bmN0aW9uIGwoKXtyZXR1cm4gcy5oaWRkZW5GaWxlSW5wdXQmJnMuaGlkZGVuRmlsZUlucHV0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocy5oaWRkZW5GaWxlSW5wdXQpLHMuaGlkZGVuRmlsZUlucHV0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKSxzLmhpZGRlbkZpbGVJbnB1dC5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsXCJmaWxlXCIpLChudWxsPT09cy5vcHRpb25zLm1heEZpbGVzfHwxPHMub3B0aW9ucy5tYXhGaWxlcykmJnMuaGlkZGVuRmlsZUlucHV0LnNldEF0dHJpYnV0ZShcIm11bHRpcGxlXCIsXCJtdWx0aXBsZVwiKSxzLmhpZGRlbkZpbGVJbnB1dC5jbGFzc05hbWU9XCJkei1oaWRkZW4taW5wdXRcIixudWxsIT09cy5vcHRpb25zLmFjY2VwdGVkRmlsZXMmJnMuaGlkZGVuRmlsZUlucHV0LnNldEF0dHJpYnV0ZShcImFjY2VwdFwiLHMub3B0aW9ucy5hY2NlcHRlZEZpbGVzKSxudWxsIT09cy5vcHRpb25zLmNhcHR1cmUmJnMuaGlkZGVuRmlsZUlucHV0LnNldEF0dHJpYnV0ZShcImNhcHR1cmVcIixzLm9wdGlvbnMuY2FwdHVyZSkscy5oaWRkZW5GaWxlSW5wdXQuc3R5bGUudmlzaWJpbGl0eT1cImhpZGRlblwiLHMuaGlkZGVuRmlsZUlucHV0LnN0eWxlLnBvc2l0aW9uPVwiYWJzb2x1dGVcIixzLmhpZGRlbkZpbGVJbnB1dC5zdHlsZS50b3A9XCIwXCIscy5oaWRkZW5GaWxlSW5wdXQuc3R5bGUubGVmdD1cIjBcIixzLmhpZGRlbkZpbGVJbnB1dC5zdHlsZS5oZWlnaHQ9XCIwXCIscy5oaWRkZW5GaWxlSW5wdXQuc3R5bGUud2lkdGg9XCIwXCIsQy5nZXRFbGVtZW50KHMub3B0aW9ucy5oaWRkZW5JbnB1dENvbnRhaW5lcixcImhpZGRlbklucHV0Q29udGFpbmVyXCIpLmFwcGVuZENoaWxkKHMuaGlkZGVuRmlsZUlucHV0KSxzLmhpZGRlbkZpbGVJbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsZnVuY3Rpb24oKXt2YXIgZT1zLmhpZGRlbkZpbGVJbnB1dC5maWxlcztpZihlLmxlbmd0aCl7dmFyIHQ9ITAsbj0hMSxpPXZvaWQgMDt0cnl7Zm9yKHZhciByLG89ZVtTeW1ib2wuaXRlcmF0b3JdKCk7ISh0PShyPW8ubmV4dCgpKS5kb25lKTt0PSEwKXt2YXIgYT1yLnZhbHVlO3MuYWRkRmlsZShhKX19Y2F0Y2goZSl7bj0hMCxpPWV9ZmluYWxseXt0cnl7dHx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihuKXRocm93IGl9fX1yZXR1cm4gcy5lbWl0KFwiYWRkZWRmaWxlc1wiLGUpLGwoKX0pfSgpfXRoaXMuVVJMPW51bGwhPT13aW5kb3cuVVJMP3dpbmRvdy5VUkw6d2luZG93LndlYmtpdFVSTDt2YXIgZT0hMCx0PSExLG49dm9pZCAwO3RyeXtmb3IodmFyIGkscj10aGlzLmV2ZW50c1tTeW1ib2wuaXRlcmF0b3JdKCk7IShlPShpPXIubmV4dCgpKS5kb25lKTtlPSEwKXt2YXIgbz1pLnZhbHVlO3RoaXMub24obyx0aGlzLm9wdGlvbnNbb10pfX1jYXRjaChlKXt0PSEwLG49ZX1maW5hbGx5e3RyeXtlfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHQpdGhyb3cgbn19dGhpcy5vbihcInVwbG9hZHByb2dyZXNzXCIsZnVuY3Rpb24oKXtyZXR1cm4gcy51cGRhdGVUb3RhbFVwbG9hZFByb2dyZXNzKCl9KSx0aGlzLm9uKFwicmVtb3ZlZGZpbGVcIixmdW5jdGlvbigpe3JldHVybiBzLnVwZGF0ZVRvdGFsVXBsb2FkUHJvZ3Jlc3MoKX0pLHRoaXMub24oXCJjYW5jZWxlZFwiLGZ1bmN0aW9uKGUpe3JldHVybiBzLmVtaXQoXCJjb21wbGV0ZVwiLGUpfSksdGhpcy5vbihcImNvbXBsZXRlXCIsZnVuY3Rpb24oZSl7aWYoMD09PXMuZ2V0QWRkZWRGaWxlcygpLmxlbmd0aCYmMD09PXMuZ2V0VXBsb2FkaW5nRmlsZXMoKS5sZW5ndGgmJjA9PT1zLmdldFF1ZXVlZEZpbGVzKCkubGVuZ3RoKXJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIHMuZW1pdChcInF1ZXVlY29tcGxldGVcIil9LDApfSk7ZnVuY3Rpb24gYShlKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoZS5kYXRhVHJhbnNmZXIudHlwZXMpZm9yKHZhciB0PTA7dDxlLmRhdGFUcmFuc2Zlci50eXBlcy5sZW5ndGg7dCsrKWlmKFwiRmlsZXNcIj09PWUuZGF0YVRyYW5zZmVyLnR5cGVzW3RdKXJldHVybiEwO3JldHVybiExfShlKSYmKGUuc3RvcFByb3BhZ2F0aW9uKCksZS5wcmV2ZW50RGVmYXVsdD9lLnByZXZlbnREZWZhdWx0KCk6ZS5yZXR1cm5WYWx1ZT0hMSl9cmV0dXJuIHRoaXMubGlzdGVuZXJzPVt7ZWxlbWVudDp0aGlzLmVsZW1lbnQsZXZlbnRzOntkcmFnc3RhcnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHMuZW1pdChcImRyYWdzdGFydFwiLGUpfSxkcmFnZW50ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGEoZSkscy5lbWl0KFwiZHJhZ2VudGVyXCIsZSl9LGRyYWdvdmVyOmZ1bmN0aW9uKGUpe3ZhciB0O3RyeXt0PWUuZGF0YVRyYW5zZmVyLmVmZmVjdEFsbG93ZWR9Y2F0Y2goZSl7fXJldHVybiBlLmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0PVwibW92ZVwiPT09dHx8XCJsaW5rTW92ZVwiPT09dD9cIm1vdmVcIjpcImNvcHlcIixhKGUpLHMuZW1pdChcImRyYWdvdmVyXCIsZSl9LGRyYWdsZWF2ZTpmdW5jdGlvbihlKXtyZXR1cm4gcy5lbWl0KFwiZHJhZ2xlYXZlXCIsZSl9LGRyb3A6ZnVuY3Rpb24oZSl7cmV0dXJuIGEoZSkscy5kcm9wKGUpfSxkcmFnZW5kOmZ1bmN0aW9uKGUpe3JldHVybiBzLmVtaXQoXCJkcmFnZW5kXCIsZSl9fX1dLHRoaXMuY2xpY2thYmxlRWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gcy5saXN0ZW5lcnMucHVzaCh7ZWxlbWVudDp0LGV2ZW50czp7Y2xpY2s6ZnVuY3Rpb24oZSl7cmV0dXJuIHQ9PT1zLmVsZW1lbnQmJmUudGFyZ2V0IT09cy5lbGVtZW50JiYhQy5lbGVtZW50SW5zaWRlKGUudGFyZ2V0LHMuZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiLmR6LW1lc3NhZ2VcIikpfHxzLmhpZGRlbkZpbGVJbnB1dC5jbGljaygpLCEwfX19KX0pLHRoaXMuZW5hYmxlKCksdGhpcy5vcHRpb25zLmluaXQuY2FsbCh0aGlzKX19LHtrZXk6XCJkZXN0cm95XCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNhYmxlKCksdGhpcy5yZW1vdmVBbGxGaWxlcyghMCksbnVsbCE9dGhpcy5oaWRkZW5GaWxlSW5wdXQmJnRoaXMuaGlkZGVuRmlsZUlucHV0LnBhcmVudE5vZGUmJih0aGlzLmhpZGRlbkZpbGVJbnB1dC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuaGlkZGVuRmlsZUlucHV0KSx0aGlzLmhpZGRlbkZpbGVJbnB1dD1udWxsKSxkZWxldGUgdGhpcy5lbGVtZW50LmRyb3B6b25lLEMuaW5zdGFuY2VzLnNwbGljZShDLmluc3RhbmNlcy5pbmRleE9mKHRoaXMpLDEpfX0se2tleTpcInVwZGF0ZVRvdGFsVXBsb2FkUHJvZ3Jlc3NcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQ9MCxuPTA7aWYodGhpcy5nZXRBY3RpdmVGaWxlcygpLmxlbmd0aCl7dmFyIGk9ITAscj0hMSxvPXZvaWQgMDt0cnl7Zm9yKHZhciBhLGw9dGhpcy5nZXRBY3RpdmVGaWxlcygpW1N5bWJvbC5pdGVyYXRvcl0oKTshKGk9KGE9bC5uZXh0KCkpLmRvbmUpO2k9ITApe3ZhciBzPWEudmFsdWU7dCs9cy51cGxvYWQuYnl0ZXNTZW50LG4rPXMudXBsb2FkLnRvdGFsfX1jYXRjaChlKXtyPSEwLG89ZX1maW5hbGx5e3RyeXtpfHxudWxsPT1sLnJldHVybnx8bC5yZXR1cm4oKX1maW5hbGx5e2lmKHIpdGhyb3cgb319ZT0xMDAqdC9ufWVsc2UgZT0xMDA7cmV0dXJuIHRoaXMuZW1pdChcInRvdGFsdXBsb2FkcHJvZ3Jlc3NcIixlLG4sdCl9fSx7a2V5OlwiX2dldFBhcmFtTmFtZVwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXMub3B0aW9ucy5wYXJhbU5hbWU/dGhpcy5vcHRpb25zLnBhcmFtTmFtZShlKTpcIlwiLmNvbmNhdCh0aGlzLm9wdGlvbnMucGFyYW1OYW1lKS5jb25jYXQodGhpcy5vcHRpb25zLnVwbG9hZE11bHRpcGxlP1wiW1wiLmNvbmNhdChlLFwiXVwiKTpcIlwiKX19LHtrZXk6XCJfcmVuYW1lRmlsZVwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVyblwiZnVuY3Rpb25cIiE9dHlwZW9mIHRoaXMub3B0aW9ucy5yZW5hbWVGaWxlP2UubmFtZTp0aGlzLm9wdGlvbnMucmVuYW1lRmlsZShlKX19LHtrZXk6XCJnZXRGYWxsYmFja0Zvcm1cIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQ7aWYoZT10aGlzLmdldEV4aXN0aW5nRmFsbGJhY2soKSlyZXR1cm4gZTt2YXIgbj0nPGRpdiBjbGFzcz1cImR6LWZhbGxiYWNrXCI+Jzt0aGlzLm9wdGlvbnMuZGljdEZhbGxiYWNrVGV4dCYmKG4rPVwiPHA+XCIuY29uY2F0KHRoaXMub3B0aW9ucy5kaWN0RmFsbGJhY2tUZXh0LFwiPC9wPlwiKSksbis9JzxpbnB1dCB0eXBlPVwiZmlsZVwiIG5hbWU9XCInLmNvbmNhdCh0aGlzLl9nZXRQYXJhbU5hbWUoMCksJ1wiICcpLmNvbmNhdCh0aGlzLm9wdGlvbnMudXBsb2FkTXVsdGlwbGU/J211bHRpcGxlPVwibXVsdGlwbGVcIic6dm9pZCAwLCcgLz48aW5wdXQgdHlwZT1cInN1Ym1pdFwiIHZhbHVlPVwiVXBsb2FkIVwiPjwvZGl2PicpO3ZhciBpPUMuY3JlYXRlRWxlbWVudChuKTtyZXR1cm5cIkZPUk1cIiE9PXRoaXMuZWxlbWVudC50YWdOYW1lPyh0PUMuY3JlYXRlRWxlbWVudCgnPGZvcm0gYWN0aW9uPVwiJy5jb25jYXQodGhpcy5vcHRpb25zLnVybCwnXCIgZW5jdHlwZT1cIm11bHRpcGFydC9mb3JtLWRhdGFcIiBtZXRob2Q9XCInKS5jb25jYXQodGhpcy5vcHRpb25zLm1ldGhvZCwnXCI+PC9mb3JtPicpKSkuYXBwZW5kQ2hpbGQoaSk6KHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJlbmN0eXBlXCIsXCJtdWx0aXBhcnQvZm9ybS1kYXRhXCIpLHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJtZXRob2RcIix0aGlzLm9wdGlvbnMubWV0aG9kKSksbnVsbCE9dD90Oml9fSx7a2V5OlwiZ2V0RXhpc3RpbmdGYWxsYmFja1wiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPWZ1bmN0aW9uKGUpe3ZhciB0PSEwLG49ITEsaT12b2lkIDA7dHJ5e2Zvcih2YXIgcixvPWVbU3ltYm9sLml0ZXJhdG9yXSgpOyEodD0ocj1vLm5leHQoKSkuZG9uZSk7dD0hMCl7dmFyIGE9ci52YWx1ZTtpZigvKF58IClmYWxsYmFjaygkfCApLy50ZXN0KGEuY2xhc3NOYW1lKSlyZXR1cm4gYX19Y2F0Y2goZSl7bj0hMCxpPWV9ZmluYWxseXt0cnl7dHx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihuKXRocm93IGl9fX0sdD0wLG49W1wiZGl2XCIsXCJmb3JtXCJdO3Q8bi5sZW5ndGg7dCsrKXt2YXIgaSxyPW5bdF07aWYoaT1lKHRoaXMuZWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShyKSkpcmV0dXJuIGl9fX0se2tleTpcInNldHVwRXZlbnRMaXN0ZW5lcnNcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxpc3RlbmVycy5tYXAoZnVuY3Rpb24oaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIGkuZXZlbnRzKXt2YXIgbj1pLmV2ZW50c1t0XTtlLnB1c2goaS5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIodCxuLCExKSl9cmV0dXJuIGV9KCl9KX19LHtrZXk6XCJyZW1vdmVFdmVudExpc3RlbmVyc1wiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGlzdGVuZXJzLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1bXTtmb3IodmFyIHQgaW4gaS5ldmVudHMpe3ZhciBuPWkuZXZlbnRzW3RdO2UucHVzaChpLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4sITEpKX1yZXR1cm4gZX0oKX0pfX0se2tleTpcImRpc2FibGVcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMuY2xpY2thYmxlRWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gZS5jbGFzc0xpc3QucmVtb3ZlKFwiZHotY2xpY2thYmxlXCIpfSksdGhpcy5yZW1vdmVFdmVudExpc3RlbmVycygpLHRoaXMuZGlzYWJsZWQ9ITAsdGhpcy5maWxlcy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHQuY2FuY2VsVXBsb2FkKGUpfSl9fSx7a2V5OlwiZW5hYmxlXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZGVsZXRlIHRoaXMuZGlzYWJsZWQsdGhpcy5jbGlja2FibGVFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmNsYXNzTGlzdC5hZGQoXCJkei1jbGlja2FibGVcIil9KSx0aGlzLnNldHVwRXZlbnRMaXN0ZW5lcnMoKX19LHtrZXk6XCJmaWxlc2l6ZVwiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PTAsbj1cImJcIjtpZigwPGUpe2Zvcih2YXIgaT1bXCJ0YlwiLFwiZ2JcIixcIm1iXCIsXCJrYlwiLFwiYlwiXSxyPTA7cjxpLmxlbmd0aDtyKyspe3ZhciBvPWlbcl07aWYoTWF0aC5wb3codGhpcy5vcHRpb25zLmZpbGVzaXplQmFzZSw0LXIpLzEwPD1lKXt0PWUvTWF0aC5wb3codGhpcy5vcHRpb25zLmZpbGVzaXplQmFzZSw0LXIpLG49bzticmVha319dD1NYXRoLnJvdW5kKDEwKnQpLzEwfXJldHVyblwiPHN0cm9uZz5cIi5jb25jYXQodCxcIjwvc3Ryb25nPiBcIikuY29uY2F0KHRoaXMub3B0aW9ucy5kaWN0RmlsZVNpemVVbml0c1tuXSl9fSx7a2V5OlwiX3VwZGF0ZU1heEZpbGVzUmVhY2hlZENsYXNzXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9dGhpcy5vcHRpb25zLm1heEZpbGVzJiZ0aGlzLmdldEFjY2VwdGVkRmlsZXMoKS5sZW5ndGg+PXRoaXMub3B0aW9ucy5tYXhGaWxlcz8odGhpcy5nZXRBY2NlcHRlZEZpbGVzKCkubGVuZ3RoPT09dGhpcy5vcHRpb25zLm1heEZpbGVzJiZ0aGlzLmVtaXQoXCJtYXhmaWxlc3JlYWNoZWRcIix0aGlzLmZpbGVzKSx0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChcImR6LW1heC1maWxlcy1yZWFjaGVkXCIpKTp0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShcImR6LW1heC1maWxlcy1yZWFjaGVkXCIpfX0se2tleTpcImRyb3BcIix2YWx1ZTpmdW5jdGlvbihlKXtpZihlLmRhdGFUcmFuc2Zlcil7dGhpcy5lbWl0KFwiZHJvcFwiLGUpO2Zvcih2YXIgdD1bXSxuPTA7bjxlLmRhdGFUcmFuc2Zlci5maWxlcy5sZW5ndGg7bisrKXRbbl09ZS5kYXRhVHJhbnNmZXIuZmlsZXNbbl07aWYodC5sZW5ndGgpe3ZhciBpPWUuZGF0YVRyYW5zZmVyLml0ZW1zO2kmJmkubGVuZ3RoJiZudWxsIT1pWzBdLndlYmtpdEdldEFzRW50cnk/dGhpcy5fYWRkRmlsZXNGcm9tSXRlbXMoaSk6dGhpcy5oYW5kbGVGaWxlcyh0KX10aGlzLmVtaXQoXCJhZGRlZGZpbGVzXCIsdCl9fX0se2tleTpcInBhc3RlXCIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYobnVsbCE9X19ndWFyZF9fKG51bGwhPWU/ZS5jbGlwYm9hcmREYXRhOnZvaWQgMCxmdW5jdGlvbihlKXtyZXR1cm4gZS5pdGVtc30pKXt0aGlzLmVtaXQoXCJwYXN0ZVwiLGUpO3ZhciB0PWUuY2xpcGJvYXJkRGF0YS5pdGVtcztyZXR1cm4gdC5sZW5ndGg/dGhpcy5fYWRkRmlsZXNGcm9tSXRlbXModCk6dm9pZCAwfX19LHtrZXk6XCJoYW5kbGVGaWxlc1wiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PSEwLG49ITEsaT12b2lkIDA7dHJ5e2Zvcih2YXIgcixvPWVbU3ltYm9sLml0ZXJhdG9yXSgpOyEodD0ocj1vLm5leHQoKSkuZG9uZSk7dD0hMCl7dmFyIGE9ci52YWx1ZTt0aGlzLmFkZEZpbGUoYSl9fWNhdGNoKGUpe249ITAsaT1lfWZpbmFsbHl7dHJ5e3R8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobil0aHJvdyBpfX19fSx7a2V5OlwiX2FkZEZpbGVzRnJvbUl0ZW1zXCIsdmFsdWU6ZnVuY3Rpb24ocyl7dmFyIHU9dGhpcztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1bXSx0PSEwLG49ITEsaT12b2lkIDA7dHJ5e2Zvcih2YXIgcixvPXNbU3ltYm9sLml0ZXJhdG9yXSgpOyEodD0ocj1vLm5leHQoKSkuZG9uZSk7dD0hMCl7dmFyIGEsbD1yLnZhbHVlO251bGwhPWwud2Via2l0R2V0QXNFbnRyeSYmKGE9bC53ZWJraXRHZXRBc0VudHJ5KCkpP2EuaXNGaWxlP2UucHVzaCh1LmFkZEZpbGUobC5nZXRBc0ZpbGUoKSkpOmEuaXNEaXJlY3Rvcnk/ZS5wdXNoKHUuX2FkZEZpbGVzRnJvbURpcmVjdG9yeShhLGEubmFtZSkpOmUucHVzaCh2b2lkIDApOm51bGwhPWwuZ2V0QXNGaWxlJiYobnVsbD09bC5raW5kfHxcImZpbGVcIj09PWwua2luZCk/ZS5wdXNoKHUuYWRkRmlsZShsLmdldEFzRmlsZSgpKSk6ZS5wdXNoKHZvaWQgMCl9fWNhdGNoKGUpe249ITAsaT1lfWZpbmFsbHl7dHJ5e3R8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobil0aHJvdyBpfX1yZXR1cm4gZX0oKX19LHtrZXk6XCJfYWRkRmlsZXNGcm9tRGlyZWN0b3J5XCIsdmFsdWU6ZnVuY3Rpb24oZSxzKXtmdW5jdGlvbiB0KHQpe3JldHVybiBfX2d1YXJkTWV0aG9kX18oY29uc29sZSxcImxvZ1wiLGZ1bmN0aW9uKGUpe3JldHVybiBlLmxvZyh0KX0pfXZhciB1PXRoaXMsbj1lLmNyZWF0ZVJlYWRlcigpO3JldHVybiBmdW5jdGlvbiBsKCl7cmV0dXJuIG4ucmVhZEVudHJpZXMoZnVuY3Rpb24oZSl7aWYoMDxlLmxlbmd0aCl7dmFyIHQ9ITAsbj0hMSxpPXZvaWQgMDt0cnl7Zm9yKHZhciByLG89ZVtTeW1ib2wuaXRlcmF0b3JdKCk7ISh0PShyPW8ubmV4dCgpKS5kb25lKTt0PSEwKXt2YXIgYT1yLnZhbHVlO2EuaXNGaWxlP2EuZmlsZShmdW5jdGlvbihlKXtpZighdS5vcHRpb25zLmlnbm9yZUhpZGRlbkZpbGVzfHxcIi5cIiE9PWUubmFtZS5zdWJzdHJpbmcoMCwxKSlyZXR1cm4gZS5mdWxsUGF0aD1cIlwiLmNvbmNhdChzLFwiL1wiKS5jb25jYXQoZS5uYW1lKSx1LmFkZEZpbGUoZSl9KTphLmlzRGlyZWN0b3J5JiZ1Ll9hZGRGaWxlc0Zyb21EaXJlY3RvcnkoYSxcIlwiLmNvbmNhdChzLFwiL1wiKS5jb25jYXQoYS5uYW1lKSl9fWNhdGNoKGUpe249ITAsaT1lfWZpbmFsbHl7dHJ5e3R8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobil0aHJvdyBpfX1sKCl9cmV0dXJuIG51bGx9LHQpfSgpfX0se2tleTpcImFjY2VwdFwiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5vcHRpb25zLm1heEZpbGVzaXplJiZlLnNpemU+MTAyNCp0aGlzLm9wdGlvbnMubWF4RmlsZXNpemUqMTAyND90KHRoaXMub3B0aW9ucy5kaWN0RmlsZVRvb0JpZy5yZXBsYWNlKFwie3tmaWxlc2l6ZX19XCIsTWF0aC5yb3VuZChlLnNpemUvMTAyNC8xMC4yNCkvMTAwKS5yZXBsYWNlKFwie3ttYXhGaWxlc2l6ZX19XCIsdGhpcy5vcHRpb25zLm1heEZpbGVzaXplKSk6Qy5pc1ZhbGlkRmlsZShlLHRoaXMub3B0aW9ucy5hY2NlcHRlZEZpbGVzKT9udWxsIT10aGlzLm9wdGlvbnMubWF4RmlsZXMmJnRoaXMuZ2V0QWNjZXB0ZWRGaWxlcygpLmxlbmd0aD49dGhpcy5vcHRpb25zLm1heEZpbGVzPyh0KHRoaXMub3B0aW9ucy5kaWN0TWF4RmlsZXNFeGNlZWRlZC5yZXBsYWNlKFwie3ttYXhGaWxlc319XCIsdGhpcy5vcHRpb25zLm1heEZpbGVzKSksdGhpcy5lbWl0KFwibWF4ZmlsZXNleGNlZWRlZFwiLGUpKTp0aGlzLm9wdGlvbnMuYWNjZXB0LmNhbGwodGhpcyxlLHQpOnQodGhpcy5vcHRpb25zLmRpY3RJbnZhbGlkRmlsZVR5cGUpfX0se2tleTpcImFkZEZpbGVcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgbj10aGlzO3QudXBsb2FkPXt1dWlkOkMudXVpZHY0KCkscHJvZ3Jlc3M6MCx0b3RhbDp0LnNpemUsYnl0ZXNTZW50OjAsZmlsZW5hbWU6dGhpcy5fcmVuYW1lRmlsZSh0KX0sdGhpcy5maWxlcy5wdXNoKHQpLHQuc3RhdHVzPUMuQURERUQsdGhpcy5lbWl0KFwiYWRkZWRmaWxlXCIsdCksdGhpcy5fZW5xdWV1ZVRodW1ibmFpbCh0KSx0aGlzLmFjY2VwdCh0LGZ1bmN0aW9uKGUpe2U/KHQuYWNjZXB0ZWQ9ITEsbi5fZXJyb3JQcm9jZXNzaW5nKFt0XSxlKSk6KHQuYWNjZXB0ZWQ9ITAsbi5vcHRpb25zLmF1dG9RdWV1ZSYmbi5lbnF1ZXVlRmlsZSh0KSksbi5fdXBkYXRlTWF4RmlsZXNSZWFjaGVkQ2xhc3MoKX0pfX0se2tleTpcImVucXVldWVGaWxlc1wiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PSEwLG49ITEsaT12b2lkIDA7dHJ5e2Zvcih2YXIgcixvPWVbU3ltYm9sLml0ZXJhdG9yXSgpOyEodD0ocj1vLm5leHQoKSkuZG9uZSk7dD0hMCl7dmFyIGE9ci52YWx1ZTt0aGlzLmVucXVldWVGaWxlKGEpfX1jYXRjaChlKXtuPSEwLGk9ZX1maW5hbGx5e3RyeXt0fHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKG4pdGhyb3cgaX19cmV0dXJuIG51bGx9fSx7a2V5OlwiZW5xdWV1ZUZpbGVcIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzO2lmKGUuc3RhdHVzIT09Qy5BRERFRHx8ITAhPT1lLmFjY2VwdGVkKXRocm93IG5ldyBFcnJvcihcIlRoaXMgZmlsZSBjYW4ndCBiZSBxdWV1ZWQgYmVjYXVzZSBpdCBoYXMgYWxyZWFkeSBiZWVuIHByb2Nlc3NlZCBvciB3YXMgcmVqZWN0ZWQuXCIpO2lmKGUuc3RhdHVzPUMuUVVFVUVELHRoaXMub3B0aW9ucy5hdXRvUHJvY2Vzc1F1ZXVlKXJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIHQucHJvY2Vzc1F1ZXVlKCl9LDApfX0se2tleTpcIl9lbnF1ZXVlVGh1bWJuYWlsXCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztpZih0aGlzLm9wdGlvbnMuY3JlYXRlSW1hZ2VUaHVtYm5haWxzJiZlLnR5cGUubWF0Y2goL2ltYWdlLiovKSYmZS5zaXplPD0xMDI0KnRoaXMub3B0aW9ucy5tYXhUaHVtYm5haWxGaWxlc2l6ZSoxMDI0KXJldHVybiB0aGlzLl90aHVtYm5haWxRdWV1ZS5wdXNoKGUpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gdC5fcHJvY2Vzc1RodW1ibmFpbFF1ZXVlKCl9LDApfX0se2tleTpcIl9wcm9jZXNzVGh1bWJuYWlsUXVldWVcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7aWYoIXRoaXMuX3Byb2Nlc3NpbmdUaHVtYm5haWwmJjAhPT10aGlzLl90aHVtYm5haWxRdWV1ZS5sZW5ndGgpe3RoaXMuX3Byb2Nlc3NpbmdUaHVtYm5haWw9ITA7dmFyIG49dGhpcy5fdGh1bWJuYWlsUXVldWUuc2hpZnQoKTtyZXR1cm4gdGhpcy5jcmVhdGVUaHVtYm5haWwobix0aGlzLm9wdGlvbnMudGh1bWJuYWlsV2lkdGgsdGhpcy5vcHRpb25zLnRodW1ibmFpbEhlaWdodCx0aGlzLm9wdGlvbnMudGh1bWJuYWlsTWV0aG9kLCEwLGZ1bmN0aW9uKGUpe3JldHVybiB0LmVtaXQoXCJ0aHVtYm5haWxcIixuLGUpLHQuX3Byb2Nlc3NpbmdUaHVtYm5haWw9ITEsdC5fcHJvY2Vzc1RodW1ibmFpbFF1ZXVlKCl9KX19fSx7a2V5OlwicmVtb3ZlRmlsZVwiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKGUuc3RhdHVzPT09Qy5VUExPQURJTkcmJnRoaXMuY2FuY2VsVXBsb2FkKGUpLHRoaXMuZmlsZXM9d2l0aG91dCh0aGlzLmZpbGVzLGUpLHRoaXMuZW1pdChcInJlbW92ZWRmaWxlXCIsZSksMD09PXRoaXMuZmlsZXMubGVuZ3RoKXJldHVybiB0aGlzLmVtaXQoXCJyZXNldFwiKX19LHtrZXk6XCJyZW1vdmVBbGxGaWxlc1wiLHZhbHVlOmZ1bmN0aW9uKGUpe251bGw9PWUmJihlPSExKTt2YXIgdD0hMCxuPSExLGk9dm9pZCAwO3RyeXtmb3IodmFyIHIsbz10aGlzLmZpbGVzLnNsaWNlKClbU3ltYm9sLml0ZXJhdG9yXSgpOyEodD0ocj1vLm5leHQoKSkuZG9uZSk7dD0hMCl7dmFyIGE9ci52YWx1ZTthLnN0YXR1cz09PUMuVVBMT0FESU5HJiYhZXx8dGhpcy5yZW1vdmVGaWxlKGEpfX1jYXRjaChlKXtuPSEwLGk9ZX1maW5hbGx5e3RyeXt0fHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKG4pdGhyb3cgaX19cmV0dXJuIG51bGx9fSx7a2V5OlwicmVzaXplSW1hZ2VcIix2YWx1ZTpmdW5jdGlvbihyLGUsdCxuLG8pe3ZhciBhPXRoaXM7cmV0dXJuIHRoaXMuY3JlYXRlVGh1bWJuYWlsKHIsZSx0LG4sITAsZnVuY3Rpb24oZSx0KXtpZihudWxsPT10KXJldHVybiBvKHIpO3ZhciBuPWEub3B0aW9ucy5yZXNpemVNaW1lVHlwZTtudWxsPT1uJiYobj1yLnR5cGUpO3ZhciBpPXQudG9EYXRhVVJMKG4sYS5vcHRpb25zLnJlc2l6ZVF1YWxpdHkpO3JldHVyblwiaW1hZ2UvanBlZ1wiIT09biYmXCJpbWFnZS9qcGdcIiE9PW58fChpPUV4aWZSZXN0b3JlLnJlc3RvcmUoci5kYXRhVVJMLGkpKSxvKEMuZGF0YVVSSXRvQmxvYihpKSl9KX19LHtrZXk6XCJjcmVhdGVUaHVtYm5haWxcIix2YWx1ZTpmdW5jdGlvbihlLHQsbixpLHIsbyl7dmFyIGE9dGhpcyxsPW5ldyBGaWxlUmVhZGVyO2wub25sb2FkPWZ1bmN0aW9uKCl7ZS5kYXRhVVJMPWwucmVzdWx0LFwiaW1hZ2Uvc3ZnK3htbFwiIT09ZS50eXBlP2EuY3JlYXRlVGh1bWJuYWlsRnJvbVVybChlLHQsbixpLHIsbyk6bnVsbCE9byYmbyhsLnJlc3VsdCl9LGwucmVhZEFzRGF0YVVSTChlKX19LHtrZXk6XCJkaXNwbGF5RXhpc3RpbmdGaWxlXCIsdmFsdWU6ZnVuY3Rpb24odCxlLG4saSxyKXt2YXIgbz10aGlzLGE9ISg0PGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PXIpfHxyO2lmKHRoaXMuZW1pdChcImFkZGVkZmlsZVwiLHQpLHRoaXMuZW1pdChcImNvbXBsZXRlXCIsdCksYSl7dC5kYXRhVVJMPWUsdGhpcy5jcmVhdGVUaHVtYm5haWxGcm9tVXJsKHQsdGhpcy5vcHRpb25zLnRodW1ibmFpbFdpZHRoLHRoaXMub3B0aW9ucy50aHVtYm5haWxIZWlnaHQsdGhpcy5vcHRpb25zLnJlc2l6ZU1ldGhvZCx0aGlzLm9wdGlvbnMuZml4T3JpZW50YXRpb24sZnVuY3Rpb24oZSl7by5lbWl0KFwidGh1bWJuYWlsXCIsdCxlKSxuJiZuKCl9LGkpfWVsc2UgdGhpcy5lbWl0KFwidGh1bWJuYWlsXCIsdCxlKSxuJiZuKCl9fSx7a2V5OlwiY3JlYXRlVGh1bWJuYWlsRnJvbVVybFwiLHZhbHVlOmZ1bmN0aW9uKG8sYSxsLHMsdCx1LGUpe3ZhciBjPXRoaXMsZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW1nXCIpO3JldHVybiBlJiYoZC5jcm9zc09yaWdpbj1lKSxkLm9ubG9hZD1mdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKGUpe3JldHVybiBlKDEpfTtyZXR1cm5cInVuZGVmaW5lZFwiIT10eXBlb2YgRVhJRiYmbnVsbCE9PUVYSUYmJnQmJihlPWZ1bmN0aW9uKGUpe3JldHVybiBFWElGLmdldERhdGEoZCxmdW5jdGlvbigpe3JldHVybiBlKEVYSUYuZ2V0VGFnKHRoaXMsXCJPcmllbnRhdGlvblwiKSl9KX0pLGUoZnVuY3Rpb24oZSl7by53aWR0aD1kLndpZHRoLG8uaGVpZ2h0PWQuaGVpZ2h0O3ZhciB0PWMub3B0aW9ucy5yZXNpemUuY2FsbChjLG8sYSxsLHMpLG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKSxpPW4uZ2V0Q29udGV4dChcIjJkXCIpO3N3aXRjaChuLndpZHRoPXQudHJnV2lkdGgsbi5oZWlnaHQ9dC50cmdIZWlnaHQsNDxlJiYobi53aWR0aD10LnRyZ0hlaWdodCxuLmhlaWdodD10LnRyZ1dpZHRoKSxlKXtjYXNlIDI6aS50cmFuc2xhdGUobi53aWR0aCwwKSxpLnNjYWxlKC0xLDEpO2JyZWFrO2Nhc2UgMzppLnRyYW5zbGF0ZShuLndpZHRoLG4uaGVpZ2h0KSxpLnJvdGF0ZShNYXRoLlBJKTticmVhaztjYXNlIDQ6aS50cmFuc2xhdGUoMCxuLmhlaWdodCksaS5zY2FsZSgxLC0xKTticmVhaztjYXNlIDU6aS5yb3RhdGUoLjUqTWF0aC5QSSksaS5zY2FsZSgxLC0xKTticmVhaztjYXNlIDY6aS5yb3RhdGUoLjUqTWF0aC5QSSksaS50cmFuc2xhdGUoMCwtbi53aWR0aCk7YnJlYWs7Y2FzZSA3Omkucm90YXRlKC41Kk1hdGguUEkpLGkudHJhbnNsYXRlKG4uaGVpZ2h0LC1uLndpZHRoKSxpLnNjYWxlKC0xLDEpO2JyZWFrO2Nhc2UgODppLnJvdGF0ZSgtLjUqTWF0aC5QSSksaS50cmFuc2xhdGUoLW4uaGVpZ2h0LDApfWRyYXdJbWFnZUlPU0ZpeChpLGQsbnVsbCE9dC5zcmNYP3Quc3JjWDowLG51bGwhPXQuc3JjWT90LnNyY1k6MCx0LnNyY1dpZHRoLHQuc3JjSGVpZ2h0LG51bGwhPXQudHJnWD90LnRyZ1g6MCxudWxsIT10LnRyZ1k/dC50cmdZOjAsdC50cmdXaWR0aCx0LnRyZ0hlaWdodCk7dmFyIHI9bi50b0RhdGFVUkwoXCJpbWFnZS9wbmdcIik7aWYobnVsbCE9dSlyZXR1cm4gdShyLG4pfSl9LG51bGwhPXUmJihkLm9uZXJyb3I9dSksZC5zcmM9by5kYXRhVVJMfX0se2tleTpcInByb2Nlc3NRdWV1ZVwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zLnBhcmFsbGVsVXBsb2Fkcyx0PXRoaXMuZ2V0VXBsb2FkaW5nRmlsZXMoKS5sZW5ndGgsbj10O2lmKCEoZTw9dCkpe3ZhciBpPXRoaXMuZ2V0UXVldWVkRmlsZXMoKTtpZigwPGkubGVuZ3RoKXtpZih0aGlzLm9wdGlvbnMudXBsb2FkTXVsdGlwbGUpcmV0dXJuIHRoaXMucHJvY2Vzc0ZpbGVzKGkuc2xpY2UoMCxlLXQpKTtmb3IoO248ZTspe2lmKCFpLmxlbmd0aClyZXR1cm47dGhpcy5wcm9jZXNzRmlsZShpLnNoaWZ0KCkpLG4rK319fX19LHtrZXk6XCJwcm9jZXNzRmlsZVwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnByb2Nlc3NGaWxlcyhbZV0pfX0se2tleTpcInByb2Nlc3NGaWxlc1wiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PSEwLG49ITEsaT12b2lkIDA7dHJ5e2Zvcih2YXIgcixvPWVbU3ltYm9sLml0ZXJhdG9yXSgpOyEodD0ocj1vLm5leHQoKSkuZG9uZSk7dD0hMCl7dmFyIGE9ci52YWx1ZTthLnByb2Nlc3Npbmc9ITAsYS5zdGF0dXM9Qy5VUExPQURJTkcsdGhpcy5lbWl0KFwicHJvY2Vzc2luZ1wiLGEpfX1jYXRjaChlKXtuPSEwLGk9ZX1maW5hbGx5e3RyeXt0fHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKG4pdGhyb3cgaX19cmV0dXJuIHRoaXMub3B0aW9ucy51cGxvYWRNdWx0aXBsZSYmdGhpcy5lbWl0KFwicHJvY2Vzc2luZ211bHRpcGxlXCIsZSksdGhpcy51cGxvYWRGaWxlcyhlKX19LHtrZXk6XCJfZ2V0RmlsZXNXaXRoWGhyXCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZmlsZXMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnhocj09PXR9KS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KX19LHtrZXk6XCJjYW5jZWxVcGxvYWRcIix2YWx1ZTpmdW5jdGlvbihlKXtpZihlLnN0YXR1cz09PUMuVVBMT0FESU5HKXt2YXIgdD10aGlzLl9nZXRGaWxlc1dpdGhYaHIoZS54aHIpLG49ITAsaT0hMSxyPXZvaWQgMDt0cnl7Zm9yKHZhciBvLGE9dFtTeW1ib2wuaXRlcmF0b3JdKCk7IShuPShvPWEubmV4dCgpKS5kb25lKTtuPSEwKXtvLnZhbHVlLnN0YXR1cz1DLkNBTkNFTEVEfX1jYXRjaChlKXtpPSEwLHI9ZX1maW5hbGx5e3RyeXtufHxudWxsPT1hLnJldHVybnx8YS5yZXR1cm4oKX1maW5hbGx5e2lmKGkpdGhyb3cgcn19dm9pZCAwIT09ZS54aHImJmUueGhyLmFib3J0KCk7dmFyIGw9ITAscz0hMSx1PXZvaWQgMDt0cnl7Zm9yKHZhciBjLGQ9dFtTeW1ib2wuaXRlcmF0b3JdKCk7IShsPShjPWQubmV4dCgpKS5kb25lKTtsPSEwKXt2YXIgcD1jLnZhbHVlO3RoaXMuZW1pdChcImNhbmNlbGVkXCIscCl9fWNhdGNoKGUpe3M9ITAsdT1lfWZpbmFsbHl7dHJ5e2x8fG51bGw9PWQucmV0dXJufHxkLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyB1fX10aGlzLm9wdGlvbnMudXBsb2FkTXVsdGlwbGUmJnRoaXMuZW1pdChcImNhbmNlbGVkbXVsdGlwbGVcIix0KX1lbHNlIGUuc3RhdHVzIT09Qy5BRERFRCYmZS5zdGF0dXMhPT1DLlFVRVVFRHx8KGUuc3RhdHVzPUMuQ0FOQ0VMRUQsdGhpcy5lbWl0KFwiY2FuY2VsZWRcIixlKSx0aGlzLm9wdGlvbnMudXBsb2FkTXVsdGlwbGUmJnRoaXMuZW1pdChcImNhbmNlbGVkbXVsdGlwbGVcIixbZV0pKTtpZih0aGlzLm9wdGlvbnMuYXV0b1Byb2Nlc3NRdWV1ZSlyZXR1cm4gdGhpcy5wcm9jZXNzUXVldWUoKX19LHtrZXk6XCJyZXNvbHZlT3B0aW9uXCIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSlyZXR1cm4gZTtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxuPW5ldyBBcnJheSgxPHQ/dC0xOjApLGk9MTtpPHQ7aSsrKW5baS0xXT1hcmd1bWVudHNbaV07cmV0dXJuIGUuYXBwbHkodGhpcyxuKX19LHtrZXk6XCJ1cGxvYWRGaWxlXCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudXBsb2FkRmlsZXMoW2VdKX19LHtrZXk6XCJ1cGxvYWRGaWxlc1wiLHZhbHVlOmZ1bmN0aW9uKHMpe3ZhciB1PXRoaXM7dGhpcy5fdHJhbnNmb3JtRmlsZXMocyxmdW5jdGlvbihlKXtpZih1Lm9wdGlvbnMuY2h1bmtpbmcpe3ZhciB0PWVbMF07c1swXS51cGxvYWQuY2h1bmtlZD11Lm9wdGlvbnMuY2h1bmtpbmcmJih1Lm9wdGlvbnMuZm9yY2VDaHVua2luZ3x8dC5zaXplPnUub3B0aW9ucy5jaHVua1NpemUpLHNbMF0udXBsb2FkLnRvdGFsQ2h1bmtDb3VudD1NYXRoLmNlaWwodC5zaXplL3Uub3B0aW9ucy5jaHVua1NpemUpfWlmKHNbMF0udXBsb2FkLmNodW5rZWQpe3ZhciByPXNbMF0sbz1lWzBdO3IudXBsb2FkLmNodW5rcz1bXTt2YXIgaT1mdW5jdGlvbigpe2Zvcih2YXIgZT0wO3ZvaWQgMCE9PXIudXBsb2FkLmNodW5rc1tlXTspZSsrO2lmKCEoZT49ci51cGxvYWQudG90YWxDaHVua0NvdW50KSl7MDt2YXIgdD1lKnUub3B0aW9ucy5jaHVua1NpemUsbj1NYXRoLm1pbih0K3Uub3B0aW9ucy5jaHVua1NpemUsci5zaXplKSxpPXtuYW1lOnUuX2dldFBhcmFtTmFtZSgwKSxkYXRhOm8ud2Via2l0U2xpY2U/by53ZWJraXRTbGljZSh0LG4pOm8uc2xpY2UodCxuKSxmaWxlbmFtZTpyLnVwbG9hZC5maWxlbmFtZSxjaHVua0luZGV4OmV9O3IudXBsb2FkLmNodW5rc1tlXT17ZmlsZTpyLGluZGV4OmUsZGF0YUJsb2NrOmksc3RhdHVzOkMuVVBMT0FESU5HLHByb2dyZXNzOjAscmV0cmllczowfSx1Ll91cGxvYWREYXRhKHMsW2ldKX19O2lmKHIudXBsb2FkLmZpbmlzaGVkQ2h1bmtVcGxvYWQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ITA7ZS5zdGF0dXM9Qy5TVUNDRVNTLGUuZGF0YUJsb2NrPW51bGwsZS54aHI9bnVsbDtmb3IodmFyIG49MDtuPHIudXBsb2FkLnRvdGFsQ2h1bmtDb3VudDtuKyspe2lmKHZvaWQgMD09PXIudXBsb2FkLmNodW5rc1tuXSlyZXR1cm4gaSgpO3IudXBsb2FkLmNodW5rc1tuXS5zdGF0dXMhPT1DLlNVQ0NFU1MmJih0PSExKX10JiZ1Lm9wdGlvbnMuY2h1bmtzVXBsb2FkZWQocixmdW5jdGlvbigpe3UuX2ZpbmlzaGVkKHMsXCJcIixudWxsKX0pfSx1Lm9wdGlvbnMucGFyYWxsZWxDaHVua1VwbG9hZHMpZm9yKHZhciBuPTA7bjxyLnVwbG9hZC50b3RhbENodW5rQ291bnQ7bisrKWkoKTtlbHNlIGkoKX1lbHNle2Zvcih2YXIgYT1bXSxsPTA7bDxzLmxlbmd0aDtsKyspYVtsXT17bmFtZTp1Ll9nZXRQYXJhbU5hbWUobCksZGF0YTplW2xdLGZpbGVuYW1lOnNbbF0udXBsb2FkLmZpbGVuYW1lfTt1Ll91cGxvYWREYXRhKHMsYSl9fSl9fSx7a2V5OlwiX2dldENodW5rXCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MDtuPGUudXBsb2FkLnRvdGFsQ2h1bmtDb3VudDtuKyspaWYodm9pZCAwIT09ZS51cGxvYWQuY2h1bmtzW25dJiZlLnVwbG9hZC5jaHVua3Nbbl0ueGhyPT09dClyZXR1cm4gZS51cGxvYWQuY2h1bmtzW25dfX0se2tleTpcIl91cGxvYWREYXRhXCIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLGk9bmV3IFhNTEh0dHBSZXF1ZXN0LHI9ITAsbz0hMSxhPXZvaWQgMDt0cnl7Zm9yKHZhciBsLHM9dFtTeW1ib2wuaXRlcmF0b3JdKCk7IShyPShsPXMubmV4dCgpKS5kb25lKTtyPSEwKXtsLnZhbHVlLnhocj1pfX1jYXRjaChlKXtvPSEwLGE9ZX1maW5hbGx5e3RyeXtyfHxudWxsPT1zLnJldHVybnx8cy5yZXR1cm4oKX1maW5hbGx5e2lmKG8pdGhyb3cgYX19dFswXS51cGxvYWQuY2h1bmtlZCYmKHRbMF0udXBsb2FkLmNodW5rc1tlWzBdLmNodW5rSW5kZXhdLnhocj1pKTt2YXIgdT10aGlzLnJlc29sdmVPcHRpb24odGhpcy5vcHRpb25zLm1ldGhvZCx0KSxjPXRoaXMucmVzb2x2ZU9wdGlvbih0aGlzLm9wdGlvbnMudXJsLHQpO2kub3Blbih1LGMsITApLGkudGltZW91dD10aGlzLnJlc29sdmVPcHRpb24odGhpcy5vcHRpb25zLnRpbWVvdXQsdCksaS53aXRoQ3JlZGVudGlhbHM9ISF0aGlzLm9wdGlvbnMud2l0aENyZWRlbnRpYWxzLGkub25sb2FkPWZ1bmN0aW9uKGUpe24uX2ZpbmlzaGVkVXBsb2FkaW5nKHQsaSxlKX0saS5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXtuLl9oYW5kbGVVcGxvYWRFcnJvcih0LGksXCJSZXF1ZXN0IHRpbWVkb3V0IGFmdGVyIFwiLmNvbmNhdChuLm9wdGlvbnMudGltZW91dCxcIiBzZWNvbmRzXCIpKX0saS5vbmVycm9yPWZ1bmN0aW9uKCl7bi5faGFuZGxlVXBsb2FkRXJyb3IodCxpKX0sKG51bGwhPWkudXBsb2FkP2kudXBsb2FkOmkpLm9ucHJvZ3Jlc3M9ZnVuY3Rpb24oZSl7cmV0dXJuIG4uX3VwZGF0ZUZpbGVzVXBsb2FkUHJvZ3Jlc3ModCxpLGUpfTt2YXIgZD17QWNjZXB0OlwiYXBwbGljYXRpb24vanNvblwiLFwiQ2FjaGUtQ29udHJvbFwiOlwibm8tY2FjaGVcIixcIlgtUmVxdWVzdGVkLVdpdGhcIjpcIlhNTEh0dHBSZXF1ZXN0XCJ9O2Zvcih2YXIgcCBpbiB0aGlzLm9wdGlvbnMuaGVhZGVycyYmQy5leHRlbmQoZCx0aGlzLm9wdGlvbnMuaGVhZGVycyksZCl7dmFyIGg9ZFtwXTtoJiZpLnNldFJlcXVlc3RIZWFkZXIocCxoKX12YXIgZj1uZXcgRm9ybURhdGE7aWYodGhpcy5vcHRpb25zLnBhcmFtcyl7dmFyIHY9dGhpcy5vcHRpb25zLnBhcmFtcztmb3IodmFyIG0gaW5cImZ1bmN0aW9uXCI9PXR5cGVvZiB2JiYodj12LmNhbGwodGhpcyx0LGksdFswXS51cGxvYWQuY2h1bmtlZD90aGlzLl9nZXRDaHVuayh0WzBdLGkpOm51bGwpKSx2KXt2YXIgeT12W21dO2YuYXBwZW5kKG0seSl9fXZhciBnPSEwLGI9ITEsaz12b2lkIDA7dHJ5e2Zvcih2YXIgdyxGPXRbU3ltYm9sLml0ZXJhdG9yXSgpOyEoZz0odz1GLm5leHQoKSkuZG9uZSk7Zz0hMCl7dmFyIHo9dy52YWx1ZTt0aGlzLmVtaXQoXCJzZW5kaW5nXCIseixpLGYpfX1jYXRjaChlKXtiPSEwLGs9ZX1maW5hbGx5e3RyeXtnfHxudWxsPT1GLnJldHVybnx8Ri5yZXR1cm4oKX1maW5hbGx5e2lmKGIpdGhyb3cga319dGhpcy5vcHRpb25zLnVwbG9hZE11bHRpcGxlJiZ0aGlzLmVtaXQoXCJzZW5kaW5nbXVsdGlwbGVcIix0LGksZiksdGhpcy5fYWRkRm9ybUVsZW1lbnREYXRhKGYpO2Zvcih2YXIgeD0wO3g8ZS5sZW5ndGg7eCsrKXt2YXIgRT1lW3hdO2YuYXBwZW5kKEUubmFtZSxFLmRhdGEsRS5maWxlbmFtZSl9dGhpcy5zdWJtaXRSZXF1ZXN0KGksZix0KX19LHtrZXk6XCJfdHJhbnNmb3JtRmlsZXNcIix2YWx1ZTpmdW5jdGlvbihuLGkpe2Zvcih2YXIgZT10aGlzLHI9W10sbz0wLHQ9ZnVuY3Rpb24odCl7ZS5vcHRpb25zLnRyYW5zZm9ybUZpbGUuY2FsbChlLG5bdF0sZnVuY3Rpb24oZSl7clt0XT1lLCsrbz09PW4ubGVuZ3RoJiZpKHIpfSl9LGE9MDthPG4ubGVuZ3RoO2ErKyl0KGEpfX0se2tleTpcIl9hZGRGb3JtRWxlbWVudERhdGFcIix2YWx1ZTpmdW5jdGlvbihlKXtpZihcIkZPUk1cIj09PXRoaXMuZWxlbWVudC50YWdOYW1lKXt2YXIgdD0hMCxuPSExLGk9dm9pZCAwO3RyeXtmb3IodmFyIHIsbz10aGlzLmVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcImlucHV0LCB0ZXh0YXJlYSwgc2VsZWN0LCBidXR0b25cIilbU3ltYm9sLml0ZXJhdG9yXSgpOyEodD0ocj1vLm5leHQoKSkuZG9uZSk7dD0hMCl7dmFyIGE9ci52YWx1ZSxsPWEuZ2V0QXR0cmlidXRlKFwibmFtZVwiKSxzPWEuZ2V0QXR0cmlidXRlKFwidHlwZVwiKTtpZihzPXMmJnMudG9Mb3dlckNhc2UoKSxudWxsIT1sKWlmKFwiU0VMRUNUXCI9PT1hLnRhZ05hbWUmJmEuaGFzQXR0cmlidXRlKFwibXVsdGlwbGVcIikpe3ZhciB1PSEwLGM9ITEsZD12b2lkIDA7dHJ5e2Zvcih2YXIgcCxoPWEub3B0aW9uc1tTeW1ib2wuaXRlcmF0b3JdKCk7ISh1PShwPWgubmV4dCgpKS5kb25lKTt1PSEwKXt2YXIgZj1wLnZhbHVlO2Yuc2VsZWN0ZWQmJmUuYXBwZW5kKGwsZi52YWx1ZSl9fWNhdGNoKGUpe2M9ITAsZD1lfWZpbmFsbHl7dHJ5e3V8fG51bGw9PWgucmV0dXJufHxoLnJldHVybigpfWZpbmFsbHl7aWYoYyl0aHJvdyBkfX19ZWxzZSghc3x8XCJjaGVja2JveFwiIT09cyYmXCJyYWRpb1wiIT09c3x8YS5jaGVja2VkKSYmZS5hcHBlbmQobCxhLnZhbHVlKX19Y2F0Y2goZSl7bj0hMCxpPWV9ZmluYWxseXt0cnl7dHx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihuKXRocm93IGl9fX19fSx7a2V5OlwiX3VwZGF0ZUZpbGVzVXBsb2FkUHJvZ3Jlc3NcIix2YWx1ZTpmdW5jdGlvbihlLHQsbil7dmFyIGk7aWYodm9pZCAwIT09bil7aWYoaT0xMDAqbi5sb2FkZWQvbi50b3RhbCxlWzBdLnVwbG9hZC5jaHVua2VkKXt2YXIgcj1lWzBdLG89dGhpcy5fZ2V0Q2h1bmsocix0KTtvLnByb2dyZXNzPWksby50b3RhbD1uLnRvdGFsLG8uYnl0ZXNTZW50PW4ubG9hZGVkO3IudXBsb2FkLnByb2dyZXNzPTAsci51cGxvYWQudG90YWw9MDtmb3IodmFyIGE9ci51cGxvYWQuYnl0ZXNTZW50PTA7YTxyLnVwbG9hZC50b3RhbENodW5rQ291bnQ7YSsrKXZvaWQgMCE9PXIudXBsb2FkLmNodW5rc1thXSYmdm9pZCAwIT09ci51cGxvYWQuY2h1bmtzW2FdLnByb2dyZXNzJiYoci51cGxvYWQucHJvZ3Jlc3MrPXIudXBsb2FkLmNodW5rc1thXS5wcm9ncmVzcyxyLnVwbG9hZC50b3RhbCs9ci51cGxvYWQuY2h1bmtzW2FdLnRvdGFsLHIudXBsb2FkLmJ5dGVzU2VudCs9ci51cGxvYWQuY2h1bmtzW2FdLmJ5dGVzU2VudCk7ci51cGxvYWQucHJvZ3Jlc3M9ci51cGxvYWQucHJvZ3Jlc3Mvci51cGxvYWQudG90YWxDaHVua0NvdW50fWVsc2V7dmFyIGw9ITAscz0hMSx1PXZvaWQgMDt0cnl7Zm9yKHZhciBjLGQ9ZVtTeW1ib2wuaXRlcmF0b3JdKCk7IShsPShjPWQubmV4dCgpKS5kb25lKTtsPSEwKXt2YXIgcD1jLnZhbHVlO3AudXBsb2FkLnByb2dyZXNzPWkscC51cGxvYWQudG90YWw9bi50b3RhbCxwLnVwbG9hZC5ieXRlc1NlbnQ9bi5sb2FkZWR9fWNhdGNoKGUpe3M9ITAsdT1lfWZpbmFsbHl7dHJ5e2x8fG51bGw9PWQucmV0dXJufHxkLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyB1fX19dmFyIGg9ITAsZj0hMSx2PXZvaWQgMDt0cnl7Zm9yKHZhciBtLHk9ZVtTeW1ib2wuaXRlcmF0b3JdKCk7IShoPShtPXkubmV4dCgpKS5kb25lKTtoPSEwKXt2YXIgZz1tLnZhbHVlO3RoaXMuZW1pdChcInVwbG9hZHByb2dyZXNzXCIsZyxnLnVwbG9hZC5wcm9ncmVzcyxnLnVwbG9hZC5ieXRlc1NlbnQpfX1jYXRjaChlKXtmPSEwLHY9ZX1maW5hbGx5e3RyeXtofHxudWxsPT15LnJldHVybnx8eS5yZXR1cm4oKX1maW5hbGx5e2lmKGYpdGhyb3cgdn19fWVsc2V7dmFyIGI9ITAsaz0hMCx3PSEoaT0xMDApLEY9dm9pZCAwO3RyeXtmb3IodmFyIHoseD1lW1N5bWJvbC5pdGVyYXRvcl0oKTshKGs9KHo9eC5uZXh0KCkpLmRvbmUpO2s9ITApe3ZhciBFPXoudmFsdWU7MTAwPT09RS51cGxvYWQucHJvZ3Jlc3MmJkUudXBsb2FkLmJ5dGVzU2VudD09PUUudXBsb2FkLnRvdGFsfHwoYj0hMSksRS51cGxvYWQucHJvZ3Jlc3M9aSxFLnVwbG9hZC5ieXRlc1NlbnQ9RS51cGxvYWQudG90YWx9fWNhdGNoKGUpe3c9ITAsRj1lfWZpbmFsbHl7dHJ5e2t8fG51bGw9PXgucmV0dXJufHx4LnJldHVybigpfWZpbmFsbHl7aWYodyl0aHJvdyBGfX1pZihiKXJldHVybjt2YXIgQz0hMCxfPSExLFM9dm9pZCAwO3RyeXtmb3IodmFyIEQsVD1lW1N5bWJvbC5pdGVyYXRvcl0oKTshKEM9KEQ9VC5uZXh0KCkpLmRvbmUpO0M9ITApe3ZhciBMPUQudmFsdWU7dGhpcy5lbWl0KFwidXBsb2FkcHJvZ3Jlc3NcIixMLGksTC51cGxvYWQuYnl0ZXNTZW50KX19Y2F0Y2goZSl7Xz0hMCxTPWV9ZmluYWxseXt0cnl7Q3x8bnVsbD09VC5yZXR1cm58fFQucmV0dXJuKCl9ZmluYWxseXtpZihfKXRocm93IFN9fX19fSx7a2V5OlwiX2ZpbmlzaGVkVXBsb2FkaW5nXCIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpO2lmKGVbMF0uc3RhdHVzIT09Qy5DQU5DRUxFRCYmND09PXQucmVhZHlTdGF0ZSl7aWYoXCJhcnJheWJ1ZmZlclwiIT09dC5yZXNwb25zZVR5cGUmJlwiYmxvYlwiIT09dC5yZXNwb25zZVR5cGUmJihpPXQucmVzcG9uc2VUZXh0LHQuZ2V0UmVzcG9uc2VIZWFkZXIoXCJjb250ZW50LXR5cGVcIikmJn50LmdldFJlc3BvbnNlSGVhZGVyKFwiY29udGVudC10eXBlXCIpLmluZGV4T2YoXCJhcHBsaWNhdGlvbi9qc29uXCIpKSl0cnl7aT1KU09OLnBhcnNlKGkpfWNhdGNoKGUpe249ZSxpPVwiSW52YWxpZCBKU09OIHJlc3BvbnNlIGZyb20gc2VydmVyLlwifXRoaXMuX3VwZGF0ZUZpbGVzVXBsb2FkUHJvZ3Jlc3MoZSksMjAwPD10LnN0YXR1cyYmdC5zdGF0dXM8MzAwP2VbMF0udXBsb2FkLmNodW5rZWQ/ZVswXS51cGxvYWQuZmluaXNoZWRDaHVua1VwbG9hZCh0aGlzLl9nZXRDaHVuayhlWzBdLHQpKTp0aGlzLl9maW5pc2hlZChlLGksbik6dGhpcy5faGFuZGxlVXBsb2FkRXJyb3IoZSx0LGkpfX19LHtrZXk6XCJfaGFuZGxlVXBsb2FkRXJyb3JcIix2YWx1ZTpmdW5jdGlvbihlLHQsbil7aWYoZVswXS5zdGF0dXMhPT1DLkNBTkNFTEVEKXtpZihlWzBdLnVwbG9hZC5jaHVua2VkJiZ0aGlzLm9wdGlvbnMucmV0cnlDaHVua3Mpe3ZhciBpPXRoaXMuX2dldENodW5rKGVbMF0sdCk7aWYoaS5yZXRyaWVzKys8dGhpcy5vcHRpb25zLnJldHJ5Q2h1bmtzTGltaXQpcmV0dXJuIHZvaWQgdGhpcy5fdXBsb2FkRGF0YShlLFtpLmRhdGFCbG9ja10pO2NvbnNvbGUud2FybihcIlJldHJpZWQgdGhpcyBjaHVuayB0b28gb2Z0ZW4uIEdpdmluZyB1cC5cIil9dGhpcy5fZXJyb3JQcm9jZXNzaW5nKGUsbnx8dGhpcy5vcHRpb25zLmRpY3RSZXNwb25zZUVycm9yLnJlcGxhY2UoXCJ7e3N0YXR1c0NvZGV9fVwiLHQuc3RhdHVzKSx0KX19fSx7a2V5Olwic3VibWl0UmVxdWVzdFwiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7ZS5zZW5kKHQpfX0se2tleTpcIl9maW5pc2hlZFwiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT0hMCxyPSExLG89dm9pZCAwO3RyeXtmb3IodmFyIGEsbD1lW1N5bWJvbC5pdGVyYXRvcl0oKTshKGk9KGE9bC5uZXh0KCkpLmRvbmUpO2k9ITApe3ZhciBzPWEudmFsdWU7cy5zdGF0dXM9Qy5TVUNDRVNTLHRoaXMuZW1pdChcInN1Y2Nlc3NcIixzLHQsbiksdGhpcy5lbWl0KFwiY29tcGxldGVcIixzKX19Y2F0Y2goZSl7cj0hMCxvPWV9ZmluYWxseXt0cnl7aXx8bnVsbD09bC5yZXR1cm58fGwucmV0dXJuKCl9ZmluYWxseXtpZihyKXRocm93IG99fWlmKHRoaXMub3B0aW9ucy51cGxvYWRNdWx0aXBsZSYmKHRoaXMuZW1pdChcInN1Y2Nlc3NtdWx0aXBsZVwiLGUsdCxuKSx0aGlzLmVtaXQoXCJjb21wbGV0ZW11bHRpcGxlXCIsZSkpLHRoaXMub3B0aW9ucy5hdXRvUHJvY2Vzc1F1ZXVlKXJldHVybiB0aGlzLnByb2Nlc3NRdWV1ZSgpfX0se2tleTpcIl9lcnJvclByb2Nlc3NpbmdcIix2YWx1ZTpmdW5jdGlvbihlLHQsbil7dmFyIGk9ITAscj0hMSxvPXZvaWQgMDt0cnl7Zm9yKHZhciBhLGw9ZVtTeW1ib2wuaXRlcmF0b3JdKCk7IShpPShhPWwubmV4dCgpKS5kb25lKTtpPSEwKXt2YXIgcz1hLnZhbHVlO3Muc3RhdHVzPUMuRVJST1IsdGhpcy5lbWl0KFwiZXJyb3JcIixzLHQsbiksdGhpcy5lbWl0KFwiY29tcGxldGVcIixzKX19Y2F0Y2goZSl7cj0hMCxvPWV9ZmluYWxseXt0cnl7aXx8bnVsbD09bC5yZXR1cm58fGwucmV0dXJuKCl9ZmluYWxseXtpZihyKXRocm93IG99fWlmKHRoaXMub3B0aW9ucy51cGxvYWRNdWx0aXBsZSYmKHRoaXMuZW1pdChcImVycm9ybXVsdGlwbGVcIixlLHQsbiksdGhpcy5lbWl0KFwiY29tcGxldGVtdWx0aXBsZVwiLGUpKSx0aGlzLm9wdGlvbnMuYXV0b1Byb2Nlc3NRdWV1ZSlyZXR1cm4gdGhpcy5wcm9jZXNzUXVldWUoKX19XSxbe2tleTpcInV1aWR2NFwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuXCJ4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14eHh4eHh4eHh4eHhcIi5yZXBsYWNlKC9beHldL2csZnVuY3Rpb24oZSl7dmFyIHQ9MTYqTWF0aC5yYW5kb20oKXwwO3JldHVybihcInhcIj09PWU/dDozJnR8OCkudG9TdHJpbmcoMTYpfSl9fV0pLEN9KCk7RHJvcHpvbmUuaW5pdENsYXNzKCksRHJvcHpvbmUudmVyc2lvbj1cIjUuNy4xXCIsRHJvcHpvbmUub3B0aW9ucz17fSxEcm9wem9uZS5vcHRpb25zRm9yRWxlbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRBdHRyaWJ1dGUoXCJpZFwiKT9Ecm9wem9uZS5vcHRpb25zW2NhbWVsaXplKGUuZ2V0QXR0cmlidXRlKFwiaWRcIikpXTp2b2lkIDB9LERyb3B6b25lLmluc3RhbmNlcz1bXSxEcm9wem9uZS5mb3JFbGVtZW50PWZ1bmN0aW9uKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlJiYoZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGUpKSxudWxsPT0obnVsbCE9ZT9lLmRyb3B6b25lOnZvaWQgMCkpdGhyb3cgbmV3IEVycm9yKFwiTm8gRHJvcHpvbmUgZm91bmQgZm9yIGdpdmVuIGVsZW1lbnQuIFRoaXMgaXMgcHJvYmFibHkgYmVjYXVzZSB5b3UncmUgdHJ5aW5nIHRvIGFjY2VzcyBpdCBiZWZvcmUgRHJvcHpvbmUgaGFkIHRoZSB0aW1lIHRvIGluaXRpYWxpemUuIFVzZSB0aGUgYGluaXRgIG9wdGlvbiB0byBzZXR1cCBhbnkgYWRkaXRpb25hbCBvYnNlcnZlcnMgb24geW91ciBEcm9wem9uZS5cIik7cmV0dXJuIGUuZHJvcHpvbmV9LERyb3B6b25lLmF1dG9EaXNjb3Zlcj0hMCxEcm9wem9uZS5kaXNjb3Zlcj1mdW5jdGlvbigpe3ZhciBzO2lmKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwpcz1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLmRyb3B6b25lXCIpO2Vsc2V7cz1bXTt2YXIgZT1mdW5jdGlvbihsKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1bXSx0PSEwLG49ITEsaT12b2lkIDA7dHJ5e2Zvcih2YXIgcixvPWxbU3ltYm9sLml0ZXJhdG9yXSgpOyEodD0ocj1vLm5leHQoKSkuZG9uZSk7dD0hMCl7dmFyIGE9ci52YWx1ZTsvKF58IClkcm9wem9uZSgkfCApLy50ZXN0KGEuY2xhc3NOYW1lKT9lLnB1c2gocy5wdXNoKGEpKTplLnB1c2godm9pZCAwKX19Y2F0Y2goZSl7bj0hMCxpPWV9ZmluYWxseXt0cnl7dHx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihuKXRocm93IGl9fXJldHVybiBlfSgpfTtlKGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiZGl2XCIpKSxlKGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiZm9ybVwiKSl9cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9W10sdD0hMCxuPSExLGk9dm9pZCAwO3RyeXtmb3IodmFyIHIsbz1zW1N5bWJvbC5pdGVyYXRvcl0oKTshKHQ9KHI9by5uZXh0KCkpLmRvbmUpO3Q9ITApe3ZhciBhPXIudmFsdWU7ITEhPT1Ecm9wem9uZS5vcHRpb25zRm9yRWxlbWVudChhKT9lLnB1c2gobmV3IERyb3B6b25lKGEpKTplLnB1c2godm9pZCAwKX19Y2F0Y2goZSl7bj0hMCxpPWV9ZmluYWxseXt0cnl7dHx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihuKXRocm93IGl9fXJldHVybiBlfSgpfSxEcm9wem9uZS5ibGFja2xpc3RlZEJyb3dzZXJzPVsvb3BlcmEuKihNYWNpbnRvc2h8V2luZG93cyBQaG9uZSkuKnZlcnNpb25cXC8xMi9pXSxEcm9wem9uZS5pc0Jyb3dzZXJTdXBwb3J0ZWQ9ZnVuY3Rpb24oKXt2YXIgZT0hMDtpZih3aW5kb3cuRmlsZSYmd2luZG93LkZpbGVSZWFkZXImJndpbmRvdy5GaWxlTGlzdCYmd2luZG93LkJsb2ImJndpbmRvdy5Gb3JtRGF0YSYmZG9jdW1lbnQucXVlcnlTZWxlY3RvcilpZihcImNsYXNzTGlzdFwiaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIikpe3ZhciB0PSEwLG49ITEsaT12b2lkIDA7dHJ5e2Zvcih2YXIgcixvPURyb3B6b25lLmJsYWNrbGlzdGVkQnJvd3NlcnNbU3ltYm9sLml0ZXJhdG9yXSgpOyEodD0ocj1vLm5leHQoKSkuZG9uZSk7dD0hMCl7ci52YWx1ZS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYoZT0hMSl9fWNhdGNoKGUpe249ITAsaT1lfWZpbmFsbHl7dHJ5e3R8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobil0aHJvdyBpfX19ZWxzZSBlPSExO2Vsc2UgZT0hMTtyZXR1cm4gZX0sRHJvcHpvbmUuZGF0YVVSSXRvQmxvYj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9YXRvYihlLnNwbGl0KFwiLFwiKVsxXSksbj1lLnNwbGl0KFwiLFwiKVswXS5zcGxpdChcIjpcIilbMV0uc3BsaXQoXCI7XCIpWzBdLGk9bmV3IEFycmF5QnVmZmVyKHQubGVuZ3RoKSxyPW5ldyBVaW50OEFycmF5KGkpLG89MCxhPXQubGVuZ3RoLGw9MDw9YTtsP288PWE6YTw9bztsP28rKzpvLS0pcltvXT10LmNoYXJDb2RlQXQobyk7cmV0dXJuIG5ldyBCbG9iKFtpXSx7dHlwZTpufSl9O3ZhciB3aXRob3V0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlIT09dH0pLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZX0pfSxjYW1lbGl6ZT1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9bXFwtX10oXFx3KS9nLGZ1bmN0aW9uKGUpe3JldHVybiBlLmNoYXJBdCgxKS50b1VwcGVyQ2FzZSgpfSl9O0Ryb3B6b25lLmNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtyZXR1cm4gdC5pbm5lckhUTUw9ZSx0LmNoaWxkTm9kZXNbMF19LERyb3B6b25lLmVsZW1lbnRJbnNpZGU9ZnVuY3Rpb24oZSx0KXtpZihlPT09dClyZXR1cm4hMDtmb3IoO2U9ZS5wYXJlbnROb2RlOylpZihlPT09dClyZXR1cm4hMDtyZXR1cm4hMX0sRHJvcHpvbmUuZ2V0RWxlbWVudD1mdW5jdGlvbihlLHQpe3ZhciBuO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlP249ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlKTpudWxsIT1lLm5vZGVUeXBlJiYobj1lKSxudWxsPT1uKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYFwiLmNvbmNhdCh0LFwiYCBvcHRpb24gcHJvdmlkZWQuIFBsZWFzZSBwcm92aWRlIGEgQ1NTIHNlbGVjdG9yIG9yIGEgcGxhaW4gSFRNTCBlbGVtZW50LlwiKSk7cmV0dXJuIG59LERyb3B6b25lLmdldEVsZW1lbnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG4saTtpZihlIGluc3RhbmNlb2YgQXJyYXkpe2k9W107dHJ5e3ZhciByPSEwLG89ITEsYT12b2lkIDA7dHJ5e2Zvcih2YXIgbCxzPWVbU3ltYm9sLml0ZXJhdG9yXSgpOyEocj0obD1zLm5leHQoKSkuZG9uZSk7cj0hMCluPWwudmFsdWUsaS5wdXNoKHRoaXMuZ2V0RWxlbWVudChuLHQpKX1jYXRjaChlKXtvPSEwLGE9ZX1maW5hbGx5e3RyeXtyfHxudWxsPT1zLnJldHVybnx8cy5yZXR1cm4oKX1maW5hbGx5e2lmKG8pdGhyb3cgYX19fWNhdGNoKGUpe2k9bnVsbH19ZWxzZSBpZihcInN0cmluZ1wiPT10eXBlb2YgZSl7dmFyIHU9ITAsYz0hKGk9W10pLGQ9dm9pZCAwO3RyeXtmb3IodmFyIHAsaD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGUpW1N5bWJvbC5pdGVyYXRvcl0oKTshKHU9KHA9aC5uZXh0KCkpLmRvbmUpO3U9ITApbj1wLnZhbHVlLGkucHVzaChuKX1jYXRjaChlKXtjPSEwLGQ9ZX1maW5hbGx5e3RyeXt1fHxudWxsPT1oLnJldHVybnx8aC5yZXR1cm4oKX1maW5hbGx5e2lmKGMpdGhyb3cgZH19fWVsc2UgbnVsbCE9ZS5ub2RlVHlwZSYmKGk9W2VdKTtpZihudWxsPT1pfHwhaS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBgXCIuY29uY2F0KHQsXCJgIG9wdGlvbiBwcm92aWRlZC4gUGxlYXNlIHByb3ZpZGUgYSBDU1Mgc2VsZWN0b3IsIGEgcGxhaW4gSFRNTCBlbGVtZW50IG9yIGEgbGlzdCBvZiB0aG9zZS5cIikpO3JldHVybiBpfSxEcm9wem9uZS5jb25maXJtPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gd2luZG93LmNvbmZpcm0oZSk/dCgpOm51bGwhPW4/bigpOnZvaWQgMH0sRHJvcHpvbmUuaXNWYWxpZEZpbGU9ZnVuY3Rpb24oZSx0KXtpZighdClyZXR1cm4hMDt0PXQuc3BsaXQoXCIsXCIpO3ZhciBuPWUudHlwZSxpPW4ucmVwbGFjZSgvXFwvLiokLyxcIlwiKSxyPSEwLG89ITEsYT12b2lkIDA7dHJ5e2Zvcih2YXIgbCxzPXRbU3ltYm9sLml0ZXJhdG9yXSgpOyEocj0obD1zLm5leHQoKSkuZG9uZSk7cj0hMCl7dmFyIHU9bC52YWx1ZTtpZihcIi5cIj09PSh1PXUudHJpbSgpKS5jaGFyQXQoMCkpe2lmKC0xIT09ZS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZih1LnRvTG93ZXJDYXNlKCksZS5uYW1lLmxlbmd0aC11Lmxlbmd0aCkpcmV0dXJuITB9ZWxzZSBpZigvXFwvXFwqJC8udGVzdCh1KSl7aWYoaT09PXUucmVwbGFjZSgvXFwvLiokLyxcIlwiKSlyZXR1cm4hMH1lbHNlIGlmKG49PT11KXJldHVybiEwfX1jYXRjaChlKXtvPSEwLGE9ZX1maW5hbGx5e3RyeXtyfHxudWxsPT1zLnJldHVybnx8cy5yZXR1cm4oKX1maW5hbGx5e2lmKG8pdGhyb3cgYX19cmV0dXJuITF9LFwidW5kZWZpbmVkXCIhPXR5cGVvZiBqUXVlcnkmJm51bGwhPT1qUXVlcnkmJihqUXVlcnkuZm4uZHJvcHpvbmU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3JldHVybiBuZXcgRHJvcHpvbmUodGhpcyxlKX0pfSksXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZSYmbnVsbCE9PW1vZHVsZT9tb2R1bGUuZXhwb3J0cz1Ecm9wem9uZTp3aW5kb3cuRHJvcHpvbmU9RHJvcHpvbmUsRHJvcHpvbmUuQURERUQ9XCJhZGRlZFwiLERyb3B6b25lLlFVRVVFRD1cInF1ZXVlZFwiLERyb3B6b25lLkFDQ0VQVEVEPURyb3B6b25lLlFVRVVFRCxEcm9wem9uZS5VUExPQURJTkc9XCJ1cGxvYWRpbmdcIixEcm9wem9uZS5QUk9DRVNTSU5HPURyb3B6b25lLlVQTE9BRElORyxEcm9wem9uZS5DQU5DRUxFRD1cImNhbmNlbGVkXCIsRHJvcHpvbmUuRVJST1I9XCJlcnJvclwiLERyb3B6b25lLlNVQ0NFU1M9XCJzdWNjZXNzXCI7dmFyIGRldGVjdFZlcnRpY2FsU3F1YXNoPWZ1bmN0aW9uKGUpe2UubmF0dXJhbFdpZHRoO3ZhciB0PWUubmF0dXJhbEhlaWdodCxuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7bi53aWR0aD0xLG4uaGVpZ2h0PXQ7dmFyIGk9bi5nZXRDb250ZXh0KFwiMmRcIik7aS5kcmF3SW1hZ2UoZSwwLDApO2Zvcih2YXIgcj1pLmdldEltYWdlRGF0YSgxLDAsMSx0KS5kYXRhLG89MCxhPXQsbD10O288bDspezA9PT1yWzQqKGwtMSkrM10/YT1sOm89bCxsPWErbz4+MX12YXIgcz1sL3Q7cmV0dXJuIDA9PXM/MTpzfSxkcmF3SW1hZ2VJT1NGaXg9ZnVuY3Rpb24oZSx0LG4saSxyLG8sYSxsLHMsdSl7dmFyIGM9ZGV0ZWN0VmVydGljYWxTcXVhc2godCk7cmV0dXJuIGUuZHJhd0ltYWdlKHQsbixpLHIsbyxhLGwscyx1L2MpfSxFeGlmUmVzdG9yZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtfY2xhc3NDYWxsQ2hlY2sodGhpcyxlKX1yZXR1cm4gX2NyZWF0ZUNsYXNzKGUsbnVsbCxbe2tleTpcImluaXRDbGFzc1wiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5LRVlfU1RSPVwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cIn19LHtrZXk6XCJlbmNvZGU2NFwiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1cIlwiLG49dm9pZCAwLGk9dm9pZCAwLHI9XCJcIixvPXZvaWQgMCxhPXZvaWQgMCxsPXZvaWQgMCxzPVwiXCIsdT0wO289KG49ZVt1KytdKT4+MixhPSgzJm4pPDw0fChpPWVbdSsrXSk+PjQsbD0oMTUmaSk8PDJ8KHI9ZVt1KytdKT4+NixzPTYzJnIsaXNOYU4oaSk/bD1zPTY0OmlzTmFOKHIpJiYocz02NCksdD10K3RoaXMuS0VZX1NUUi5jaGFyQXQobykrdGhpcy5LRVlfU1RSLmNoYXJBdChhKSt0aGlzLktFWV9TVFIuY2hhckF0KGwpK3RoaXMuS0VZX1NUUi5jaGFyQXQocyksbj1pPXI9XCJcIixvPWE9bD1zPVwiXCIsdTxlLmxlbmd0aDspO3JldHVybiB0fX0se2tleTpcInJlc3RvcmVcIix2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKCFlLm1hdGNoKFwiZGF0YTppbWFnZS9qcGVnO2Jhc2U2NCxcIikpcmV0dXJuIHQ7dmFyIG49dGhpcy5kZWNvZGU2NChlLnJlcGxhY2UoXCJkYXRhOmltYWdlL2pwZWc7YmFzZTY0LFwiLFwiXCIpKSxpPXRoaXMuc2xpY2UyU2VnbWVudHMobikscj10aGlzLmV4aWZNYW5pcHVsYXRpb24odCxpKTtyZXR1cm5cImRhdGE6aW1hZ2UvanBlZztiYXNlNjQsXCIuY29uY2F0KHRoaXMuZW5jb2RlNjQocikpfX0se2tleTpcImV4aWZNYW5pcHVsYXRpb25cIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuZ2V0RXhpZkFycmF5KHQpLGk9dGhpcy5pbnNlcnRFeGlmKGUsbik7cmV0dXJuIG5ldyBVaW50OEFycmF5KGkpfX0se2tleTpcImdldEV4aWZBcnJheVwiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD12b2lkIDAsbj0wO248ZS5sZW5ndGg7KXtpZigyNTU9PT0odD1lW25dKVswXSYyMjU9PT10WzFdKXJldHVybiB0O24rK31yZXR1cm5bXX19LHtrZXk6XCJpbnNlcnRFeGlmXCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLnJlcGxhY2UoXCJkYXRhOmltYWdlL2pwZWc7YmFzZTY0LFwiLFwiXCIpLGk9dGhpcy5kZWNvZGU2NChuKSxyPWkuaW5kZXhPZigyNTUsMyksbz1pLnNsaWNlKDAsciksYT1pLnNsaWNlKHIpLGw9bztyZXR1cm4gbD0obD1sLmNvbmNhdCh0KSkuY29uY2F0KGEpfX0se2tleTpcInNsaWNlMlNlZ21lbnRzXCIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTAsbj1bXTs7KXtpZigyNTU9PT1lW3RdJjIxOD09PWVbdCsxXSlicmVhaztpZigyNTU9PT1lW3RdJjIxNj09PWVbdCsxXSl0Kz0yO2Vsc2V7dmFyIGk9dCsoMjU2KmVbdCsyXStlW3QrM10pKzIscj1lLnNsaWNlKHQsaSk7bi5wdXNoKHIpLHQ9aX1pZih0PmUubGVuZ3RoKWJyZWFrfXJldHVybiBufX0se2tleTpcImRlY29kZTY0XCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dm9pZCAwLG49dm9pZCAwLGk9XCJcIixyPXZvaWQgMCxvPXZvaWQgMCxhPVwiXCIsbD0wLHM9W107Zm9yKC9bXkEtWmEtejAtOVxcK1xcL1xcPV0vZy5leGVjKGUpJiZjb25zb2xlLndhcm4oXCJUaGVyZSB3ZXJlIGludmFsaWQgYmFzZTY0IGNoYXJhY3RlcnMgaW4gdGhlIGlucHV0IHRleHQuXFxuVmFsaWQgYmFzZTY0IGNoYXJhY3RlcnMgYXJlIEEtWiwgYS16LCAwLTksICcrJywgJy8nLGFuZCAnPSdcXG5FeHBlY3QgZXJyb3JzIGluIGRlY29kaW5nLlwiKSxlPWUucmVwbGFjZSgvW15BLVphLXowLTlcXCtcXC9cXD1dL2csXCJcIik7dD10aGlzLktFWV9TVFIuaW5kZXhPZihlLmNoYXJBdChsKyspKTw8Mnwocj10aGlzLktFWV9TVFIuaW5kZXhPZihlLmNoYXJBdChsKyspKSk+PjQsbj0oMTUmcik8PDR8KG89dGhpcy5LRVlfU1RSLmluZGV4T2YoZS5jaGFyQXQobCsrKSkpPj4yLGk9KDMmbyk8PDZ8KGE9dGhpcy5LRVlfU1RSLmluZGV4T2YoZS5jaGFyQXQobCsrKSkpLHMucHVzaCh0KSw2NCE9PW8mJnMucHVzaChuKSw2NCE9PWEmJnMucHVzaChpKSx0PW49aT1cIlwiLHI9bz1hPVwiXCIsbDxlLmxlbmd0aDspO3JldHVybiBzfX1dKSxlfSgpO0V4aWZSZXN0b3JlLmluaXRDbGFzcygpO3ZhciBjb250ZW50TG9hZGVkPWZ1bmN0aW9uKHQsbil7ZnVuY3Rpb24gaShlKXtpZihcInJlYWR5c3RhdGVjaGFuZ2VcIiE9PWUudHlwZXx8XCJjb21wbGV0ZVwiPT09by5yZWFkeVN0YXRlKXJldHVybihcImxvYWRcIj09PWUudHlwZT90Om8pW3NdKHUrZS50eXBlLGksITEpLCFyJiYocj0hMCk/bi5jYWxsKHQsZS50eXBlfHxlKTp2b2lkIDB9dmFyIHI9ITEsZT0hMCxvPXQuZG9jdW1lbnQsYT1vLmRvY3VtZW50RWxlbWVudCxsPW8uYWRkRXZlbnRMaXN0ZW5lcj9cImFkZEV2ZW50TGlzdGVuZXJcIjpcImF0dGFjaEV2ZW50XCIscz1vLmFkZEV2ZW50TGlzdGVuZXI/XCJyZW1vdmVFdmVudExpc3RlbmVyXCI6XCJkZXRhY2hFdmVudFwiLHU9by5hZGRFdmVudExpc3RlbmVyP1wiXCI6XCJvblwiO2lmKFwiY29tcGxldGVcIiE9PW8ucmVhZHlTdGF0ZSl7aWYoby5jcmVhdGVFdmVudE9iamVjdCYmYS5kb1Njcm9sbCl7dHJ5e2U9IXQuZnJhbWVFbGVtZW50fWNhdGNoKGUpe31lJiYhZnVuY3Rpb24gdCgpe3RyeXthLmRvU2Nyb2xsKFwibGVmdFwiKX1jYXRjaChlKXtyZXR1cm4gdm9pZCBzZXRUaW1lb3V0KHQsNTApfXJldHVybiBpKFwicG9sbFwiKX0oKX1yZXR1cm4gb1tsXSh1K1wiRE9NQ29udGVudExvYWRlZFwiLGksITEpLG9bbF0odStcInJlYWR5c3RhdGVjaGFuZ2VcIixpLCExKSx0W2xdKHUrXCJsb2FkXCIsaSwhMSl9fTtmdW5jdGlvbiBfX2d1YXJkX18oZSx0KXtyZXR1cm4gbnVsbCE9ZT90KGUpOnZvaWQgMH1mdW5jdGlvbiBfX2d1YXJkTWV0aG9kX18oZSx0LG4pe3JldHVybiBudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlW3RdP24oZSx0KTp2b2lkIDB9RHJvcHpvbmUuX2F1dG9EaXNjb3ZlckZ1bmN0aW9uPWZ1bmN0aW9uKCl7aWYoRHJvcHpvbmUuYXV0b0Rpc2NvdmVyKXJldHVybiBEcm9wem9uZS5kaXNjb3ZlcigpfSxjb250ZW50TG9hZGVkKHdpbmRvdyxEcm9wem9uZS5fYXV0b0Rpc2NvdmVyRnVuY3Rpb24pOyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24obW9kdWxlKSB7XG5cdGlmICghbW9kdWxlLndlYnBhY2tQb2x5ZmlsbCkge1xuXHRcdG1vZHVsZS5kZXByZWNhdGUgPSBmdW5jdGlvbigpIHt9O1xuXHRcdG1vZHVsZS5wYXRocyA9IFtdO1xuXHRcdC8vIG1vZHVsZS5wYXJlbnQgPSB1bmRlZmluZWQgYnkgZGVmYXVsdFxuXHRcdGlmICghbW9kdWxlLmNoaWxkcmVuKSBtb2R1bGUuY2hpbGRyZW4gPSBbXTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcImxvYWRlZFwiLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIG1vZHVsZS5sO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsIFwiaWRcIiwge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGdldDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBtb2R1bGUuaTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRtb2R1bGUud2VicGFja1BvbHlmaWxsID0gMTtcblx0fVxuXHRyZXR1cm4gbW9kdWxlO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=