HEX
Server: nginx/1.20.2
System: Linux racknerd-d3d1ff4 3.10.0-693.11.6.el7.x86_64 #1 SMP Thu Jan 4 01:06:37 UTC 2018 x86_64
User: www (1000)
PHP: 7.4.33
Disabled: passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Upload Files
File: /www/wwwroot/www.movieloversky.com/wp-content/plugins/the-paste/js/admin/the-paste.js
!function i(n,r,o){function s(t,e){if(!r[t]){if(!n[t]){var a="function"==typeof require&&require;if(!e&&a)return a(t,!0);if(l)return l(t,!0);throw(a=new Error("Cannot find module '"+t+"'")).code="MODULE_NOT_FOUND",a}a=r[t]={exports:{}},n[t][0].call(a.exports,function(e){return s(n[t][1][e]||e)},a,a.exports,i,n,r,o)}return r[t].exports}for(var l="function"==typeof require&&require,e=0;e<o.length;e++)s(o[e]);return s}({1:[function(e,t,a){!function(){var l,i,n,s,a;function o(e,t){var _;this._container=e,this._target=t,this._container=l(this._container),this._target=l(this._target).addClass("pastable"),this._container.on("paste",(_=this,function(e){var t,a,i,n,r,o,s,l,p,d,u,h,c,g,m,f,b,w,v;if(_.originalEvent=null!==e.originalEvent?e.originalEvent:null,_._paste_event_fired=!0,null!=(null!=(g=e.originalEvent)?g.clipboardData:void 0))if((a=e.originalEvent.clipboardData).items){for(h=null,_.originalEvent.pastedTypes=[],o=0,p=(m=a.items).length;o<p;o++)(r=m[o]).type.match(/^text\/(plain|rtf|html)/)&&_.originalEvent.pastedTypes.push(r.type);for(t=s=0,d=(f=a.items).length;s<d;t=++s){if((r=f[t]).type.match(/^image\//)){(c=new FileReader).onload=function(e){return _._handleImage(e.target.result,_.originalEvent,h)};try{c.readAsDataURL(r.getAsFile())}catch(e){}e.preventDefault();break}"text/plain"===r.type&&(0===t&&1<a.items.length&&a.items[1].type.match(/^image\//)&&(w=!0,n=a.items[1].type),r.getAsString(function(e){return w?(h=e,_._target.trigger("pasteText",{text:e,isFilename:!0,fileType:n,originalEvent:_.originalEvent})):_._target.trigger("pasteText",{text:e,originalEvent:_.originalEvent})})),"text/rtf"===r.type&&r.getAsString(function(e){return _._target.trigger("pasteTextRich",{text:e,originalEvent:_.originalEvent})}),"text/html"===r.type&&r.getAsString(function(e){return _._target.trigger("pasteTextHtml",{text:e,originalEvent:_.originalEvent})})}}else-1!==Array.prototype.indexOf.call(a.types,"text/plain")&&(v=a.getData("Text"),setTimeout(function(){return _._target.trigger("pasteText",{text:v,originalEvent:_.originalEvent})},1)),_._checkImagesInContainer(function(e){return _._handleImage(e,_.originalEvent)});if(a=window.clipboardData)if(null!=(v=a.getData("Text"))&&v.length)setTimeout(function(){return _._target.trigger("pasteText",{text:v,originalEvent:_.originalEvent}),_._target.trigger("_pasteCheckContainerDone")},1);else{for(l=0,u=(b=a.files).length;l<u;l++)i=b[l],_._handleImage(URL.createObjectURL(i),_.originalEvent);_._checkImagesInContainer(function(e){return _._handleImage(e,_.originalEvent)})}return null}))}(l=window.jQuery).paste=function(e){return"undefined"!=typeof console&&null!==console&&console.log("DEPRECATED: This method is deprecated. Please use $.fn.pastableNonInputable() instead."),i.mountNonInputable(e)._container},l.fn.pastableNonInputable=function(){for(var e,t=0,a=this.length;t<a;t++)(e=this[t])._pastable||l(e).is("textarea, input:text, [contenteditable]")||(i.mountNonInputable(e),e._pastable=!0);return this},l.fn.pastableTextarea=function(){for(var e,t=0,a=this.length;t<a;t++)(e=this[t])._pastable||l(e).is(":not(textarea, input:text)")||(i.mountTextarea(e),e._pastable=!0);return this},l.fn.pastableContenteditable=function(){for(var e,t=0,a=this.length;t<a;t++)(e=this[t])._pastable||l(e).is(":not([contenteditable])")||(i.mountContenteditable(e),e._pastable=!0);return this},s=function(e,t){var a,i,n,r,o,s,l,p;if(null==t&&(t=512),!(s=e.match(/^data\:([^\;]+)\;base64\,(.+)$/)))return null;for((e=s)[0],s=e[1],e=e[2],n=atob(e),i=[],l=0;l<n.length;){for(p=n.slice(l,l+t),r=new Array(p.length),o=0;o<p.length;)r[o]=p.charCodeAt(o),o++;a=new Uint8Array(r),i.push(a),l+=t}return new Blob(i,{type:s})},n=function(){return l(document.createElement("div")).attr("contenteditable",!0).attr("aria-hidden",!0).attr("tabindex",-1).css({width:1,height:1,position:"fixed",left:-100,overflow:"hidden",opacity:1e-17})},a=function(e,t){var a,i,n=void 0,r=void 0,o=void 0,s=e.nodeName.toLowerCase();return"area"===s?(a=(n=e.parentNode).name,!(!e.href||!a||"map"!==n.nodeName.toLowerCase())&&(0<(r=l("img[usemap='#"+a+"']")).length&&r.is(":visible"))):(/^(input|select|textarea|button|object)$/.test(s)?(o=!e.disabled)&&(i=l(e).closest("fieldset")[0])&&(o=!i.disabled):o="a"===s&&e.href||t,(o=o||l(e).is("[contenteditable]"))&&l(e).is(":visible"))},o.prototype._target=null,o.prototype._container=null,o.mountNonInputable=function(e){var t=new o(n().appendTo(e),e);return l(e).on("click",function(e){if(!a(e.target,!1)&&!window.getSelection().toString())return t._container.focus()}),t._container.on("focus",function(){return l(e).addClass("pastable-focus")}),t._container.on("blur",function(){return l(e).removeClass("pastable-focus")})},o.mountTextarea=function(r){var a,i,e;return"undefined"!=typeof DataTransfer&&null!==DataTransfer&&DataTransfer.prototype&&null!=(e=Object.getOwnPropertyDescriptor)&&(null!=(e=e.call(Object,DataTransfer.prototype,"items"))&&e.get)?this.mountContenteditable(r):(i=new o(n().insertBefore(r),r),a=!1,l(r).on("keyup",function(e){return 17!==(e=e.keyCode)&&224!==e||(a=!1),null}),l(r).on("keydown",function(e){var t;return 17!==(t=e.keyCode)&&224!==t||(a=!0),(a=null!=e.ctrlKey&&null!=e.metaKey?e.ctrlKey||e.metaKey:a)&&86===e.keyCode&&(i._textarea_focus_stolen=!0,i._container.focus(),i._paste_event_fired=!1,setTimeout(function(){if(!i._paste_event_fired)return l(r).focus(),i._textarea_focus_stolen=!1},1)),null}),l(r).on("paste",function(){}),l(r).on("focus",function(){if(!i._textarea_focus_stolen)return l(r).addClass("pastable-focus")}),l(r).on("blur",function(){if(!i._textarea_focus_stolen)return l(r).removeClass("pastable-focus")}),l(i._target).on("_pasteCheckContainerDone",function(){return l(r).focus(),i._textarea_focus_stolen=!1}),l(i._target).on("pasteText",function(e,t){var a=l(r).prop("selectionStart"),i=l(r).prop("selectionEnd"),n=l(r).val();return l(r).val(""+n.slice(0,a)+t.text+n.slice(i)),l(r)[0].setSelectionRange(a+t.text.length,a+t.text.length),l(r).trigger("change")}))},o.mountContenteditable=function(e){new o(e,e);return l(e).on("focus",function(){return l(e).addClass("pastable-focus")}),l(e).on("blur",function(){return l(e).removeClass("pastable-focus")})},o.prototype._handleImage=function(e,i,n){var r,o,t;return e.match(/^webkit\-fake\-url\:\/\//)?this._target.trigger("pasteImageError",{message:"You are trying to paste an image in Safari, however we are unable to retieve its data."}):(this._target.trigger("pasteImageStart"),(r=new Image).crossOrigin="anonymous",r.onload=(o=this,function(){var e,t,a=document.createElement("canvas");a.width=r.width,a.height=r.height,a.getContext("2d").drawImage(r,0,0,a.width,a.height),t=null;try{t=a.toDataURL("image/png"),e=s(t)}catch(e){}return t&&o._target.trigger("pasteImage",{blob:e,dataURL:t,width:r.width,height:r.height,originalEvent:i,name:n}),o._target.trigger("pasteImageEnd")}),r.onerror=(t=this,function(){return t._target.trigger("pasteImageError",{message:"Failed to get image from: "+e,url:e}),t._target.trigger("pasteImageEnd")}),r.src=e)},o.prototype._checkImagesInContainer=function(i){for(var n,r,o=Math.floor(1e3*Math.random()),e=this._container.find("img"),t=0,a=e.length;t<a;t++)(n=e[t])["_paste_marked_"+o]=!0;return setTimeout((r=this,function(){for(var e=r._container.find("img"),t=0,a=e.length;t<a;t++)(n=e[t])["_paste_marked_"+o]||(i(n.src),l(n).remove());return r._target.trigger("_pasteCheckContainerDone")}),1)},i=o}.call(this)},{}],2:[function(e,t,a){"use strict";e("paste.js/paste.js"),e("the-paste-base.js"),e("media-view.js"),e("the-paste.js")},{"media-view.js":3,"paste.js/paste.js":1,"the-paste-base.js":4,"the-paste.js":5}],3:[function(e,t,a){"use strict";var n,r,o,s;n=jQuery,window,r=mOxie,o=wp.media.thepaste,wp.media.view.Button,wp.media.view.Modal,s=o.l10n,wp.media.thepaste.view.DataSourceImageUploader=wp.media.View.extend({template:wp.template("thepaste-uploader"),className:"thepaste-uploader",controller:null,image:null,$discardBtn:null,$uploadBtn:null,uploader:null,events:{'click [data-action="upload"]':"uploadImage",'click [data-action="discard"]':"discardImage"},initialize:function(){wp.media.View.prototype.initialize.apply(this,arguments),_.defaults(this.options,{defaultFileName:s.image});new wp.media.View({tagName:"div",className:"instruments",controller:this.controller});this.uploader=this.options.uploder},setImageData:function(e){var a=this.$imageContainer.html("").get(0),i=this,t=e.match(/data:(image\/(\w+));/)[1];return o.options.mime_types.convert[t]||(t=this.options.defaultFileFormat),this.image&&this.image.destroy(),this.image=new r.Image,this.image.onload=function(){var e=i.getUploader().getOption("resize"),t=Math.max(e.width/this.width,e.height/this.height);e&&t<1&&this.downsize(this.width*t,this.height*t),this.embed(a)},this.image.load(e),this.$imageContainer&&this.$imageContainer.append(this.image),this.$('[data-setting="format"] input[value="'+t+'"]').prop("checked",!0),this.disabled(!1),this},render:function(){return wp.media.View.prototype.render.apply(this,arguments),this.$imageContainer=this.$(".image-container"),this.$discardBtn=this.$('[data-action="discard"]'),this.$uploadBtn=this.$('[data-action="upload"]'),this.$('[data-setting="title"]').val(o.getFilename()),this},discardImage:function(){this.trigger("action:discard:dataimage",this),this.unbindUploaderEvents()},uploadImage:function(){var e=this.$('[data-setting="format"] :checked').val(),t=o.options.mime_types.convert[e],a=this.$('input[data-setting="title"]').val()+"."+t,t=this.image.getAsBlob(e,o.options.jpeg_quality);this.bindUploaderEvents(),t.detach(t.getSource()),t.name=a,t.type=e,this.getUploader().addFile(t,a),this.disabled(!0),this.trigger("action:upload:dataimage",this)},show:function(){return this.$el.show(),this},hide:function(){return this.$el.hide(),this},disabled:function(e){this.$discardBtn.prop("disabled",e),this.$uploadBtn.prop("disabled",e)},_uploadSuccessHandler:function(){this.trigger("action:uploaded:dataimage"),this.disabled(!1),this.unbindUploaderEvents()},_uploadErrorHandler:function(e,t){this.trigger("error:uploaded:dataimage",t),this.disabled(!1),this.unbindUploaderEvents()},bindUploaderEvents:function(){this.getUploader().bind("FileUploaded",this._uploadSuccessHandler,this),this.getUploader().bind("Error",this._uploadErrorHandler,this)},unbindUploaderEvents:function(){this.getUploader().unbind("FileUploaded",this._uploadSuccessHandler,this),this.getUploader().unbind("Error",this._uploadErrorHandler,this)},getUploader:function(){return this.controller.uploader.uploader.uploader}}),wp.media.thepaste.view.Pasteboard=wp.media.View.extend({template:wp.template("thepaste-pasteboard"),className:"thepaste-pasteboard",controller:null,action:"paste",$pasteboard:null,render:function(){var e=this;return wp.media.View.prototype.render.apply(this,arguments),console.log(this.$(".injector")),this.$pasteboard=this.$(".injector").pastableContenteditable(),this.$message=this.$(".message"),this.$pasteboard.on("click",function(){e.show_message("")}),this},start:function(){var a,i=this;return this.imagePasted=!1,this.$pasteboard.on("paste",function(e){a=wp.media.thepaste.clipboardHasImage(e.originalEvent.clipboardData)}).on("pasteText",function(e,t){a||i.imagePasted||(i.show_message(s.paste_error_no_image),n(this).html(""))}).on("pasteImage",function(e,t){i.imagePasted||(i.trigger("action:create:dataimage",this,t.dataURL),i.imagePasted=!0)}).on("pasteImageError",function(e,t){i.show_message(s.paste_error),n(this).html("")}),setTimeout(function(){i.$pasteboard.get(0).focus()},1),this},stop:function(){return this.$pasteboard.off("pasteImage").off("pasteImageError").off("pasteText"),this},show:function(){return this.$el.show(),this},hide:function(){return this.$el.hide(),this},show_message:function(e){this.$message.text(e)}}),wp.media.thepaste.view.DataSourceImageGrabber=wp.media.View.extend({template:wp.template("thepaste-grabber"),className:"thepaste-grabber",grabber:null,uploader:null,initialize:function(){var e=wp.media.View.prototype.initialize.apply(this,arguments);return _.defaults(this.options,{wpuploader:null,defaultFileName:this.options.default_filename,defaultFileFormat:"image/png",title:s.copy_paste}),this.grabber=new this.options.grabber({controller:this.controller}),this.uploader=new wp.media.thepaste.view.DataSourceImageUploader({controller:this.controller,uploder:this.options.wpuploader,defaultFileName:this.options.defaultFileName,defaultFileFormat:this.options.defaultFileFormat}),this.render(),this.listenTo(this.grabber,"action:create:dataimage",this.imageCreated),this.listenTo(this.uploader,"action:discard:dataimage",this.startGrabbing),e},render:function(){return wp.media.View.prototype.render.apply(this,arguments),this.$(".content").append(this.grabber.render().$el).append(this.uploader.render().$el),this},imageCreated:function(e,t){this.grabber.stop().hide(),this.uploader.show().setImageData(t)},startGrabbing:function(){return this.uploader.hide(),this.grabber.show().start(),this},stopGrabbing:function(){return this.grabber.stop(),this},getAction:function(){return this.grabber.action},dismiss:function(){return this.grabber.stop(),this}})},{}],4:[function(e,t,a){"use strict";function i(e){return(i="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(p,e,d){navigator.userAgent.indexOf("Chrome");var u=0;function r(e){return("00"+e.toString()).substr(-2)}thepaste=e.thepaste=p.extend({supports:{paste:"paste"in document||"onpaste"in document||"object"===i(window.onpaste)||"onpaste"in document.createElement("DIV")},view:{},uploadImage:function(e,n,t){var r="__thepaste_box_"+u++,a=p(e).wrap('<div id="'+r+'" data-progress="0" class="thepaste-image-placeholder" contenteditable="false"></div>').parent();e.onload=function(){p(n.$("#"+r)).width(this.naturalWidth),p(n.$("#"+r)).height(this.naturalHeight)};function i(e){var t=e.match(/^data\:([^\;]+)\;/)[1],a=new d.Blob(null,{data:e});void 0===(e=thepaste.options.mime_types.convert[t])&&console.trace("Won't upload, bad mime type: "+t),a.name=thepaste.getFilename(e),a.type=t,t=function(){s.uploader.uploader.uploader.addFile(a)},s?(s.state().reset(),t()):((s=wp.media.editor.open(window.wpActiveEditor,{frame:"post",state:"insert",title:thepaste.l10n.copy_paste,multiple:!1})).close(),s.uploader.uploader&&s.uploader.uploader.ready?t():s.on("uploader:ready",t)),s.uploader.uploader.uploader.bind("UploadProgress",function(e){n.$("#"+r).attr("data-progress",e.total.percent)}),s.uploader.uploader.uploader.bind("FileUploaded",function(e,t){var a=n.$("#"+r),i='<img class="alignnone wp-image-'+t.attachment.id+' size-full" src="'+t.attachment.changed.url+'" />';a.replaceWith(i),n.$('img[src="'+l+'"]').each(function(){p(this).replaceWith(i)})}),s.uploader.uploader.uploader.bind("Error",function(e,t){console.log(e,t)})}var o,s,l=e.src,e=l.substr(0,5);return"blob:"===e?((o=new XMLHttpRequest).responseType="blob",o.onreadystatechange=function(){var e;4==o.readyState&&((e=new FileReader).onload=function(){i(e.result)},e.readAsDataURL(new Blob([o.response],{type:"image/png"})))},o.open("GET",l),o.send(null)):"data:"===e&&i(l),a},getFilename:function(e){var t=thepaste.options.default_filename,a=new Date,i=p('#post [name="post_title"]#title').val(),n=p(".display-name:first").text(),a=[{s:"%Y",r:a.getFullYear()},{s:"%y",r:a.getFullYear()%100},{s:"%m",r:r(a.getMonth()+1)},{s:"%d",r:r(a.getDate())},{s:"%e",r:a.getDate()},{s:"%H",r:r(a.getHours())},{s:"%I",r:r(a.getHours()%12)},{s:"%M",r:r(a.getMinutes())},{s:"%S",r:r(a.getSeconds())},{s:"%s",r:Math.floor(a.getTime()/1e3)}];return void 0!==i?a.push({s:"<postname>",r:i}):a.push({s:"<postname>",r:""}),void 0!==n?a.push({s:"<username>",r:n}):a.push({s:"<username>",r:""}),a.forEach(function(e){t=t.replace(e.s,e.r)}),"string"==typeof e&&(t+="."+e),t},clipboardHasImage:function(a){var i=!1;return a.items?(p.each(a.items,function(e,t){if(t.type in thepaste.options.mime_types.paste)return!(i=!0)}),i):a.types?(p.each(thepaste.options.mime_types.paste,function(e,t){if(-1<a.types.indexOf(e))return!(i=!0)}),i):null}},thepaste)}(jQuery,wp.media,mOxie)},{}],5:[function(e,t,a){"use strict";var i,n;i=jQuery,window,n=wp.media.thepaste.l10n,i.extend(wp.Uploader.prototype,{success:function(e){}}),_.extend(wp.media.view.MediaFrame.Select.prototype,{_parentInitialize:wp.media.view.MediaFrame.Select.prototype.initialize,initialize:function(){this._parentInitialize.apply(this,arguments),this.bindPasteHandlers()},_parentBrowseRouter:wp.media.view.MediaFrame.Select.prototype.browseRouter,browseRouter:function(e){this._parentBrowseRouter.apply(this,arguments),wp.media.thepaste.supports.paste&&e.set({pasteboard:{text:n.copy_paste,priority:35}})},bindPasteHandlers:function(){var t=!1;this.on("content:render close",function(e){t&&"function"==typeof t.dismiss&&t.dismiss(),void 0!==e&&(t=e)},this),this.on("content:create:pasteboard",this.contentCreatePasteboard,this),this.on("content:render:pasteboard",this.contentRenderGrabber,this),this.on("content:create:dataimage",this.contentRenderGrabber,this)},contentCreatePasteboard:function(e){this.state();this.currentPasteView=e.view=new wp.media.thepaste.view.DataSourceImageGrabber({controller:this,grabber:wp.media.thepaste.view.Pasteboard}),this.listenTo(this.currentPasteView.uploader,"action:uploaded:dataimage",this.uploadedDataImage)},contentRenderGrabber:function(e){e.startGrabbing()},uploadedDataImage:function(e){this.stopListening(this.currentPasteView.uploader,"action:uploaded:dataimage");var t={view:null};this.browseContent(t),this.content.set(t.view),this.router.get().select("browse")},imagePasted:function(){console.log(this)}}),_.extend(wp.media.view.AttachmentsBrowser.prototype,{_parentInitialize:wp.media.view.AttachmentsBrowser.prototype.initialize,initialize:function(){var e,t=this;this._parentInitialize.apply(this,arguments),this.thepaste={paste:{grabber:!1,modal:!1,mode:"paste"},current:!1},this.controller instanceof wp.media.view.MediaFrame.Select||wp.media.thepaste.supports.paste&&(e=new wp.media.view.Button({text:n.copy_paste,className:"grabber-button",priority:-64,click:function(){t.thepaste.active=t.thepaste.paste,t.thepasteOpen(n.copy_paste)}}),this.thepaste.paste.grabber=new wp.media.thepaste.view.DataSourceImageGrabber({controller:this.controller,grabber:wp.media.thepaste.view.Pasteboard,wpuploader:this.controller.uploader.uploader.uploader}),this.toolbar.set("pasteModeButton",e.render()))},thepasteOpen:function(e){var t=this;this.thepaste.modal=new wp.media.view.Modal({controller:this,title:e}),this.thepaste.modal.content(this.thepaste.active.grabber),this.thepaste.modal.open(),this.thepaste.modal.on("close",function(){t.thepasteClose(),t.thepaste.active.grabber.stopGrabbing()}),this.thepaste.active.grabber.startGrabbing(),this.listenTo(this.thepaste.active.grabber.uploader,"action:upload:dataimage",this.thepasteClose)},thepasteClose:function(){this.thepaste.modal.close(),this.stopListening(this.thepaste.active.grabber.uploader,"action:upload:dataimage")}})},{}]},{},[2]);
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFkbWluL25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJhZG1pbi9ub2RlX21vZHVsZXMvcGFzdGUuanMvcGFzdGUuanMiLCJhZG1pbi9zcmMvanMvYWRtaW4vdGhlLXBhc3RlL2luZGV4LmpzIiwiYWRtaW4vc3JjL2pzL2xpYi9tZWRpYS12aWV3LmpzIiwiYWRtaW4vc3JjL2pzL2xpYi90aGUtcGFzdGUtYmFzZS5qcyIsImFkbWluL3NyYy9qcy9saWIvdGhlLXBhc3RlLmpzIl0sIm5hbWVzIjpbInIiLCJlIiwibiIsInQiLCJvIiwiaSIsImYiLCJjIiwicmVxdWlyZSIsInUiLCJhIiwiRXJyb3IiLCJjb2RlIiwicCIsImV4cG9ydHMiLCJjYWxsIiwibGVuZ3RoIiwiMSIsIm1vZHVsZSIsIiQiLCJQYXN0ZSIsImNyZWF0ZUhpZGRlbkVkaXRhYmxlIiwiZGF0YVVSTHRvQmxvYiIsImlzRm9jdXNhYmxlIiwiX2NvbnRhaW5lciIsIl90YXJnZXQiLCJfdGhpcyIsInRoaXMiLCJhZGRDbGFzcyIsIm9uIiwiZXYiLCJfaSIsImNsaXBib2FyZERhdGEiLCJmaWxlIiwiZmlsZVR5cGUiLCJpdGVtIiwiaiIsImsiLCJsIiwibGVuIiwibGVuMSIsImxlbjIiLCJwYXN0ZWRGaWxlbmFtZSIsInJlYWRlciIsInJlZiIsInJlZjEiLCJyZWYyIiwicmVmNCIsInN0cmluZ0lzRmlsZW5hbWUiLCJ0ZXh0Iiwib3JpZ2luYWxFdmVudCIsIl9wYXN0ZV9ldmVudF9maXJlZCIsIml0ZW1zIiwicGFzdGVkVHlwZXMiLCJ0eXBlIiwibWF0Y2giLCJwdXNoIiwiRmlsZVJlYWRlciIsIm9ubG9hZCIsImV2ZW50IiwiX2hhbmRsZUltYWdlIiwidGFyZ2V0IiwicmVzdWx0IiwicmVhZEFzRGF0YVVSTCIsImdldEFzRmlsZSIsImVycm9yIiwicHJldmVudERlZmF1bHQiLCJnZXRBc1N0cmluZyIsInN0cmluZyIsInRyaWdnZXIiLCJpc0ZpbGVuYW1lIiwiQXJyYXkiLCJwcm90b3R5cGUiLCJpbmRleE9mIiwidHlwZXMiLCJnZXREYXRhIiwic2V0VGltZW91dCIsIl9jaGVja0ltYWdlc0luQ29udGFpbmVyIiwic3JjIiwid2luZG93IiwiZmlsZXMiLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJqUXVlcnkiLCJwYXN0ZSIsInBhc3RlQ29udGFpbmVyIiwiY29uc29sZSIsImxvZyIsIm1vdW50Tm9uSW5wdXRhYmxlIiwiZm4iLCJwYXN0YWJsZU5vbklucHV0YWJsZSIsImVsIiwiX3Bhc3RhYmxlIiwiaXMiLCJwYXN0YWJsZVRleHRhcmVhIiwibW91bnRUZXh0YXJlYSIsInBhc3RhYmxlQ29udGVudGVkaXRhYmxlIiwibW91bnRDb250ZW50ZWRpdGFibGUiLCJkYXRhVVJMIiwic2xpY2VTaXplIiwiYnl0ZUFycmF5IiwiYnl0ZUFycmF5cyIsImJ5dGVDaGFyYWN0ZXJzIiwiYnl0ZU51bWJlcnMiLCJtIiwib2Zmc2V0Iiwic2xpY2UiLCJjb250ZW50VHlwZSIsImI2NERhdGEiLCJhdG9iIiwiY2hhckNvZGVBdCIsIlVpbnQ4QXJyYXkiLCJCbG9iIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiYXR0ciIsImNzcyIsIndpZHRoIiwiaGVpZ2h0IiwicG9zaXRpb24iLCJsZWZ0Iiwib3ZlcmZsb3ciLCJvcGFjaXR5IiwiZWxlbWVudCIsImhhc1RhYmluZGV4IiwibWFwTmFtZSIsImZpZWxkc2V0IiwibWFwIiwiaW1nIiwiZm9jdXNhYmxlSWZWaXNpYmxlIiwibm9kZU5hbWUiLCJ0b0xvd2VyQ2FzZSIsInBhcmVudE5vZGUiLCJuYW1lIiwiaHJlZiIsInRlc3QiLCJkaXNhYmxlZCIsImNsb3Nlc3QiLCJub25JbnB1dGFibGUiLCJhcHBlbmRUbyIsImdldFNlbGVjdGlvbiIsInRvU3RyaW5nIiwiZm9jdXMiLCJyZW1vdmVDbGFzcyIsInRleHRhcmVhIiwiY3RsRG93biIsIkRhdGFUcmFuc2ZlciIsIk9iamVjdCIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImdldCIsImluc2VydEJlZm9yZSIsImtleUNvZGUiLCJjdHJsS2V5IiwibWV0YUtleSIsIl90ZXh0YXJlYV9mb2N1c19zdG9sZW4iLCJkYXRhIiwiY3VyU3RhcnQiLCJwcm9wIiwiY3VyRW5kIiwiY29udGVudCIsInZhbCIsInNldFNlbGVjdGlvblJhbmdlIiwiY29udGVudGVkaXRhYmxlIiwibG9hZGVyIiwibWVzc2FnZSIsIkltYWdlIiwiY3Jvc3NPcmlnaW4iLCJibG9iIiwiY2FudmFzIiwiZ2V0Q29udGV4dCIsImRyYXdJbWFnZSIsInRvRGF0YVVSTCIsIm9uZXJyb3IiLCJ1cmwiLCJjYiIsInRpbWVzcGFuIiwiTWF0aCIsImZsb29yIiwicmFuZG9tIiwiZmluZCIsInJlbW92ZSIsInRoZXBhc3RlIiwibDEwbiIsIm1PeGllIiwid3AiLCJtZWRpYSIsInZpZXciLCJCdXR0b24iLCJNb2RhbCIsIkRhdGFTb3VyY2VJbWFnZVVwbG9hZGVyIiwiVmlldyIsImV4dGVuZCIsInRlbXBsYXRlIiwiY2xhc3NOYW1lIiwiY29udHJvbGxlciIsImltYWdlIiwiJGRpc2NhcmRCdG4iLCIkdXBsb2FkQnRuIiwidXBsb2FkZXIiLCJldmVudHMiLCJjbGljayBbZGF0YS1hY3Rpb249XCJ1cGxvYWRcIl0iLCJjbGljayBbZGF0YS1hY3Rpb249XCJkaXNjYXJkXCJdIiwiaW5pdGlhbGl6ZSIsImFwcGx5IiwiYXJndW1lbnRzIiwiXyIsImRlZmF1bHRzIiwib3B0aW9ucyIsImRlZmF1bHRGaWxlTmFtZSIsInRhZ05hbWUiLCJ1cGxvZGVyIiwic2V0SW1hZ2VEYXRhIiwiY29udGFpbmVyIiwiJGltYWdlQ29udGFpbmVyIiwiaHRtbCIsInNlbGYiLCJmb3JtYXQiLCJtaW1lX3R5cGVzIiwiY29udmVydCIsImRlZmF1bHRGaWxlRm9ybWF0IiwiZGVzdHJveSIsIm9wdHMiLCJnZXRVcGxvYWRlciIsImdldE9wdGlvbiIsInNjYWxlIiwibWF4IiwiZG93bnNpemUiLCJlbWJlZCIsImxvYWQiLCJhcHBlbmQiLCJyZW5kZXIiLCJnZXRGaWxlbmFtZSIsImRpc2NhcmRJbWFnZSIsInVuYmluZFVwbG9hZGVyRXZlbnRzIiwidXBsb2FkSW1hZ2UiLCJzdWZmaXgiLCJnZXRBc0Jsb2IiLCJqcGVnX3F1YWxpdHkiLCJiaW5kVXBsb2FkZXJFdmVudHMiLCJkZXRhY2giLCJnZXRTb3VyY2UiLCJhZGRGaWxlIiwic2hvdyIsIiRlbCIsImhpZGUiLCJfZGlzYWJsZWQiLCJfdXBsb2FkU3VjY2Vzc0hhbmRsZXIiLCJfdXBsb2FkRXJyb3JIYW5kbGVyIiwidXAiLCJlcnIiLCJiaW5kIiwidW5iaW5kIiwiUGFzdGVib2FyZCIsImFjdGlvbiIsIiRwYXN0ZWJvYXJkIiwiJG1lc3NhZ2UiLCJzaG93X21lc3NhZ2UiLCJzdGFydCIsImNsaXBib2FyZEhhc0ltYWdlIiwiaW1hZ2VQYXN0ZWQiLCJwYXN0ZV9lcnJvcl9ub19pbWFnZSIsInBhc3RlX2Vycm9yIiwic3RvcCIsIm9mZiIsIm1zZyIsIkRhdGFTb3VyY2VJbWFnZUdyYWJiZXIiLCJncmFiYmVyIiwicmV0Iiwid3B1cGxvYWRlciIsImRlZmF1bHRfZmlsZW5hbWUiLCJ0aXRsZSIsImNvcHlfcGFzdGUiLCJsaXN0ZW5UbyIsImltYWdlQ3JlYXRlZCIsInN0YXJ0R3JhYmJpbmciLCJpbWFnZURhdGEiLCJzdG9wR3JhYmJpbmciLCJnZXRBY3Rpb24iLCJkaXNtaXNzIiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwiY291bnRlciIsInplcm9maWxsIiwic3Vic3RyIiwic3VwcG9ydHMiLCJfdHlwZW9mIiwib25wYXN0ZSIsImVkaXRvciIsInVwbG9hZF9wbGFjZWhvbGRlciIsImlkIiwiJGNvbnRhaW5lciIsIndyYXAiLCJwYXJlbnQiLCJuYXR1cmFsV2lkdGgiLCJuYXR1cmFsSGVpZ2h0IiwidXBsb2FkIiwidHJhY2UiLCJ3b3JrZmxvdyIsInN0YXRlIiwicmVzZXQiLCJvcGVuIiwid3BBY3RpdmVFZGl0b3IiLCJmcmFtZSIsIm11bHRpcGxlIiwiY2xvc2UiLCJyZWFkeSIsInRvdGFsIiwicGVyY2VudCIsImFyZ3MiLCJpbWdIVE1MIiwiYXR0YWNobWVudCIsImNoYW5nZWQiLCJyZXBsYWNlV2l0aCIsImVhY2giLCJ4aHIiLCJzdWIiLCJYTUxIdHRwUmVxdWVzdCIsInJlc3BvbnNlVHlwZSIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJyZXNwb25zZSIsInNlbmQiLCJub3ciLCJEYXRlIiwicG9zdG5hbWUiLCJ1c2VybmFtZSIsInMiLCJnZXRGdWxsWWVhciIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsImdldEhvdXJzIiwiZ2V0TWludXRlcyIsImdldFNlY29uZHMiLCJnZXRUaW1lIiwiZm9yRWFjaCIsInJlcGxhY2UiLCJoYXNJbWFnZSIsImV4dCIsIlVwbG9hZGVyIiwic3VjY2VzcyIsImZpbGVfYXR0YWNobWVudCIsIk1lZGlhRnJhbWUiLCJTZWxlY3QiLCJfcGFyZW50SW5pdGlhbGl6ZSIsImJpbmRQYXN0ZUhhbmRsZXJzIiwiX3BhcmVudEJyb3dzZVJvdXRlciIsImJyb3dzZVJvdXRlciIsInNldCIsInBhc3RlYm9hcmQiLCJwcmlvcml0eSIsInByZXZpb3VzQ29udGVudCIsImNvbnRlbnRDcmVhdGVQYXN0ZWJvYXJkIiwiY29udGVudFJlbmRlckdyYWJiZXIiLCJjdXJyZW50UGFzdGVWaWV3IiwidXBsb2FkZWREYXRhSW1hZ2UiLCJzdG9wTGlzdGVuaW5nIiwib2JqIiwiYnJvd3NlQ29udGVudCIsInJvdXRlciIsInNlbGVjdCIsIkF0dGFjaG1lbnRzQnJvd3NlciIsInBhc3RlQnRuIiwibW9kYWwiLCJtb2RlIiwiY3VycmVudCIsImNsaWNrIiwiYWN0aXZlIiwidGhlcGFzdGVPcGVuIiwidG9vbGJhciIsInRoZXBhc3RlQ2xvc2UiXSwibWFwcGluZ3MiOiJDQUFBLFNBQUFBLEVBQUFDLEVBQUFDLEVBQUFDLEdBQUEsU0FBQUMsRUFBQUMsRUFBQUMsR0FBQSxJQUFBSixFQUFBRyxHQUFBLENBQUEsSUFBQUosRUFBQUksR0FBQSxDQUFBLElBQUFFLEVBQUEsbUJBQUFDLFNBQUFBLFFBQUEsSUFBQUYsR0FBQUMsRUFBQSxPQUFBQSxFQUFBRixHQUFBLEdBQUEsR0FBQUksRUFBQSxPQUFBQSxFQUFBSixHQUFBLEdBQUEsTUFBQUssRUFBQSxJQUFBQyxNQUFBLHVCQUFBTixFQUFBLE1BQUFPLEtBQUEsbUJBQUFGLEVBQUFHLEVBQUFYLEVBQUFHLEdBQUEsQ0FBQVMsUUFBQSxJQUFBYixFQUFBSSxHQUFBLEdBQUFVLEtBQUFGLEVBQUFDLFFBQUEsU0FBQWQsR0FBQSxPQUFBSSxFQUFBSCxFQUFBSSxHQUFBLEdBQUFMLElBQUFBLElBQUFhLEVBQUFBLEVBQUFDLFFBQUFkLEVBQUFDLEVBQUFDLEVBQUFDLEdBQUEsT0FBQUQsRUFBQUcsR0FBQVMsUUFBQSxJQUFBLElBQUFMLEVBQUEsbUJBQUFELFNBQUFBLFFBQUFILEVBQUEsRUFBQUEsRUFBQUYsRUFBQWEsT0FBQVgsSUFBQUQsRUFBQUQsRUFBQUUsSUFBQSxPQUFBRCxFQUFBLENBQUEsQ0FBQWEsRUFBQSxDQUFBLFNBQUFULEVBQUFVLEVBQUFKLElDUUEsV0FDQSxJQUFBSyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQW9QQSxTQUFBSCxFQUFBSSxFQUFBQyxHQUtBLElBQUFDLEVBSkFDLEtBQUFILFdBQUFBLEVBQ0FHLEtBQUFGLFFBQUFBLEVBQ0FFLEtBQUFILFdBQUFMLEVBQUFRLEtBQUFILFlBQ0FHLEtBQUFGLFFBQUFOLEVBQUFRLEtBQUFGLFNBQUFHLFNBQUEsWUFDQUQsS0FBQUgsV0FBQUssR0FBQSxTQUFBSCxFQTJHQUMsS0ExR0EsU0FBQUcsR0FDQSxJQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUdBLEdBRkF2QixFQUFBd0IsY0FBQSxPQUFBcEIsRUFBQW9CLGNBQUFwQixFQUFBb0IsY0FBQSxLQUNBeEIsRUFBQXlCLG9CQUFBLEVBQ0EsT0FBQSxPQUFBUCxFQUFBZCxFQUFBb0IsZUFBQU4sRUFBQVosbUJBQUEsR0FFQSxJQURBQSxFQUFBRixFQUFBb0IsY0FBQWxCLGVBQ0FvQixNQUFBLENBSUEsSUFIQVYsRUFBQSxLQUNBaEIsRUFBQXdCLGNBQUFHLFlBQUEsR0FFQWpCLEVBQUEsRUFBQUcsR0FEQU0sRUFBQWIsRUFBQW9CLE9BQ0FwQyxPQUFBb0IsRUFBQUcsRUFBQUgsS0FDQUQsRUFBQVUsRUFBQVQsSUFDQWtCLEtBQUFDLE1BQUEsNEJBQ0E3QixFQUFBd0IsY0FBQUcsWUFBQUcsS0FBQXJCLEVBQUFtQixNQUlBLElBQUF2QixFQUFBTSxFQUFBLEVBQUFHLEdBREFNLEVBQUFkLEVBQUFvQixPQUNBcEMsT0FBQXFCLEVBQUFHLEVBQUFULElBQUFNLEVBQUEsQ0FFQSxJQURBRixFQUFBVyxFQUFBZixJQUNBdUIsS0FBQUMsTUFBQSxZQUFBLEVBQ0FaLEVBQUEsSUFBQWMsWUFDQUMsT0FBQSxTQUFBQyxHQUNBLE9BQUFqQyxFQUFBa0MsYUFBQUQsRUFBQUUsT0FBQUMsT0FBQXBDLEVBQUF3QixjQUFBUixJQUVBLElBQ0FDLEVBQUFvQixjQUFBNUIsRUFBQTZCLGFBQ0EsTUFBQUMsSUFDQW5DLEVBQUFvQyxpQkFDQSxNQUVBLGVBQUEvQixFQUFBbUIsT0FDQSxJQUFBdkIsR0FBQSxFQUFBQyxFQUFBb0IsTUFBQXBDLFFBQUFnQixFQUFBb0IsTUFBQSxHQUFBRSxLQUFBQyxNQUFBLGNBQ0FQLEdBQUEsRUFDQWQsRUFBQUYsRUFBQW9CLE1BQUEsR0FBQUUsTUFFQW5CLEVBQUFnQyxZQUFBLFNBQUFDLEdBQ0EsT0FBQXBCLEdBQ0FOLEVBQUEwQixFQUNBMUMsRUFBQUQsUUFBQTRDLFFBQUEsWUFBQSxDQUNBcEIsS0FBQW1CLEVBQ0FFLFlBQUEsRUFDQXBDLFNBQUFBLEVBQ0FnQixjQUFBeEIsRUFBQXdCLGlCQUdBeEIsRUFBQUQsUUFBQTRDLFFBQUEsWUFBQSxDQUNBcEIsS0FBQW1CLEVBQ0FsQixjQUFBeEIsRUFBQXdCLG1CQUtBLGFBQUFmLEVBQUFtQixNQUNBbkIsRUFBQWdDLFlBQUEsU0FBQUMsR0FDQSxPQUFBMUMsRUFBQUQsUUFBQTRDLFFBQUEsZ0JBQUEsQ0FDQXBCLEtBQUFtQixFQUNBbEIsY0FBQXhCLEVBQUF3QixrQkFJQSxjQUFBZixFQUFBbUIsTUFDQW5CLEVBQUFnQyxZQUFBLFNBQUFDLEdBQ0EsT0FBQTFDLEVBQUFELFFBQUE0QyxRQUFBLGdCQUFBLENBQ0FwQixLQUFBbUIsRUFDQWxCLGNBQUF4QixFQUFBd0Isd0JBTUEsSUFBQXFCLE1BQUFDLFVBQUFDLFFBQUExRCxLQUFBaUIsRUFBQTBDLE1BQUEsZ0JBQ0F6QixFQUFBakIsRUFBQTJDLFFBQUEsUUFDQUMsV0FBQSxXQUNBLE9BQUFsRCxFQUFBRCxRQUFBNEMsUUFBQSxZQUFBLENBQ0FwQixLQUFBQSxFQUNBQyxjQUFBeEIsRUFBQXdCLGlCQUVBLElBRUF4QixFQUFBbUQsd0JBQUEsU0FBQUMsR0FDQSxPQUFBcEQsRUFBQWtDLGFBQUFrQixFQUFBcEQsRUFBQXdCLGlCQUlBLEdBQUFsQixFQUFBK0MsT0FBQS9DLGNBQ0EsR0FBQSxPQUFBaUIsRUFBQWpCLEVBQUEyQyxRQUFBLFVBQUExQixFQUFBakMsT0FDQTRELFdBQUEsV0FLQSxPQUpBbEQsRUFBQUQsUUFBQTRDLFFBQUEsWUFBQSxDQUNBcEIsS0FBQUEsRUFDQUMsY0FBQXhCLEVBQUF3QixnQkFFQXhCLEVBQUFELFFBQUE0QyxRQUFBLDZCQUNBLE9BQ0EsQ0FFQSxJQUFBL0IsRUFBQSxFQUFBRyxHQURBTSxFQUFBZixFQUFBZ0QsT0FDQWhFLE9BQUFzQixFQUFBRyxFQUFBSCxJQUNBTCxFQUFBYyxFQUFBVCxHQUNBWixFQUFBa0MsYUFBQXFCLElBQUFDLGdCQUFBakQsR0FBQVAsRUFBQXdCLGVBRUF4QixFQUFBbUQsd0JBQUEsU0FBQUMsR0FDQSxPQUFBcEQsRUFBQWtDLGFBQUFrQixFQUFBcEQsRUFBQXdCLGlCQUlBLE9BQUEsU0FoV0EvQixFQUFBNEQsT0FBQUksUUFFQUMsTUFBQSxTQUFBQyxHQU1BLE1BSkEsb0JBQUFDLFNBQUEsT0FBQUEsU0FDQUEsUUFBQUMsSUFBQSwwRkFFQW5FLEVBQUFvRSxrQkFBQUgsR0FDQTdELFlBR0FMLEVBQUFzRSxHQUFBQyxxQkFBQSxXQUdBLElBRkEsSUFBQUMsRUFFQXZELEVBQUEsRUFBQUcsRUFEQVosS0FDQVgsT0FBQW9CLEVBQUFHLEVBQUFILEtBQ0F1RCxFQUZBaEUsS0FFQVMsSUFDQXdELFdBQUF6RSxFQUFBd0UsR0FBQUUsR0FBQSw2Q0FHQXpFLEVBQUFvRSxrQkFBQUcsR0FDQUEsRUFBQUMsV0FBQSxHQUVBLE9BQUFqRSxNQUdBUixFQUFBc0UsR0FBQUssaUJBQUEsV0FHQSxJQUZBLElBQUFILEVBRUF2RCxFQUFBLEVBQUFHLEVBREFaLEtBQ0FYLE9BQUFvQixFQUFBRyxFQUFBSCxLQUNBdUQsRUFGQWhFLEtBRUFTLElBQ0F3RCxXQUFBekUsRUFBQXdFLEdBQUFFLEdBQUEsZ0NBR0F6RSxFQUFBMkUsY0FBQUosR0FDQUEsRUFBQUMsV0FBQSxHQUVBLE9BQUFqRSxNQUdBUixFQUFBc0UsR0FBQU8sd0JBQUEsV0FHQSxJQUZBLElBQUFMLEVBRUF2RCxFQUFBLEVBQUFHLEVBREFaLEtBQ0FYLE9BQUFvQixFQUFBRyxFQUFBSCxLQUNBdUQsRUFGQWhFLEtBRUFTLElBQ0F3RCxXQUFBekUsRUFBQXdFLEdBQUFFLEdBQUEsNkJBR0F6RSxFQUFBNkUscUJBQUFOLEdBQ0FBLEVBQUFDLFdBQUEsR0FFQSxPQUFBakUsTUFHQUwsRUFBQSxTQUFBNEUsRUFBQUMsR0FDQSxJQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBbEcsRUFBQW1HLEVBQUFDLEVBQUFDLEVBSUEsR0FIQSxNQUFBUCxJQUNBQSxFQUFBLE9BRUFLLEVBQUFOLEVBQUEzQyxNQUFBLG1DQUNBLE9BQUEsS0FNQSxLQUpBWCxFQUFBNEQsR0FBQSxHQUFBRyxFQUFBL0QsRUFBQSxHQUFBZ0UsRUFBQWhFLEVBQUEsR0FDQTBELEVBQUFPLEtBQUFELEdBQ0FQLEVBQUEsR0FDQUksRUFBQSxFQUNBQSxFQUFBSCxFQUFBdEYsUUFBQSxDQUlBLElBSEEwRixFQUFBSixFQUFBSSxNQUFBRCxFQUFBQSxFQUFBTixHQUNBSSxFQUFBLElBQUFoQyxNQUFBbUMsRUFBQTFGLFFBQ0FYLEVBQUEsRUFDQUEsRUFBQXFHLEVBQUExRixRQUNBdUYsRUFBQWxHLEdBQUFxRyxFQUFBSSxXQUFBekcsR0FDQUEsSUFFQStGLEVBQUEsSUFBQVcsV0FBQVIsR0FDQUYsRUFBQTdDLEtBQUE0QyxHQUNBSyxHQUFBTixFQUVBLE9BQUEsSUFBQWEsS0FBQVgsRUFBQSxDQUNBL0MsS0FBQXFELEtBSUF0RixFQUFBLFdBQ0EsT0FBQUYsRUFBQThGLFNBQUFDLGNBQUEsUUFBQUMsS0FBQSxtQkFBQSxHQUFBQSxLQUFBLGVBQUEsR0FBQUEsS0FBQSxZQUFBLEdBQUFDLElBQUEsQ0FDQUMsTUFBQSxFQUNBQyxPQUFBLEVBQ0FDLFNBQUEsUUFDQUMsTUFBQSxJQUNBQyxTQUFBLFNBQ0FDLFFBQUEsU0FJQW5HLEVBQUEsU0FBQW9HLEVBQUFDLEdBQ0EsSUFFQUMsRUFHQUMsRUFKQUMsT0FBQSxFQUVBQyxPQUFBLEVBQ0FDLE9BQUEsRUFFQUMsRUFBQVAsRUFBQU8sU0FBQUMsY0FDQSxNQUFBLFNBQUFELEdBRUFMLEdBREFFLEVBQUFKLEVBQUFTLFlBQ0FDLFFBQ0FWLEVBQUFXLE9BQUFULEdBQUEsUUFBQUUsRUFBQUcsU0FBQUMsaUJBSUEsR0FEQUgsRUFBQTdHLEVBQUEsZ0JBQUEwRyxFQUFBLE9BQ0E3RyxRQUFBZ0gsRUFBQW5DLEdBQUEsZUFFQSwwQ0FBQTBDLEtBQUFMLElBQ0FELEdBQUFOLEVBQUFhLFlBRUFWLEVBQUEzRyxFQUFBd0csR0FBQWMsUUFBQSxZQUFBLE1BRUFSLEdBQUFILEVBQUFVLFVBSUFQLEVBREEsTUFBQUMsR0FDQVAsRUFBQVcsTUFFQVYsR0FFQUssRUFBQUEsR0FBQTlHLEVBQUF3RyxHQUFBOUIsR0FBQSx1QkFDQTFFLEVBQUF3RyxHQUFBOUIsR0FBQSxjQUlBekUsRUFBQW9ELFVBQUEvQyxRQUFBLEtBRUFMLEVBQUFvRCxVQUFBaEQsV0FBQSxLQUVBSixFQUFBb0Usa0JBQUEsU0FBQWtELEdBQ0EsSUFDQXRELEVBQUEsSUFBQWhFLEVBQUFDLElBQUFzSCxTQUFBRCxHQUFBQSxHQWFBLE9BWkF2SCxFQUFBdUgsR0FBQTdHLEdBQUEsUUFDQSxTQUFBQyxHQUNBLElBQUFQLEVBQUFPLEVBQUErQixRQUFBLEtBQUFrQixPQUFBNkQsZUFBQUMsV0FDQSxPQUFBekQsRUFBQTVELFdBQUFzSCxVQUlBMUQsRUFBQTVELFdBQUFLLEdBQUEsUUFDQSxXQUNBLE9BQUFWLEVBQUF1SCxHQUFBOUcsU0FBQSxvQkFHQXdELEVBQUE1RCxXQUFBSyxHQUFBLE9BQ0EsV0FDQSxPQUFBVixFQUFBdUgsR0FBQUssWUFBQSxxQkFLQTNILEVBQUEyRSxjQUFBLFNBQUFpRCxHQUNBLElBQUFDLEVBQUE3RCxFQUFBdkMsRUFDQSxNQUFBLG9CQUFBcUcsY0FBQSxPQUFBQSxjQUFBQSxhQUFBMUUsV0FBQSxPQUFBNUIsRUFBQXVHLE9BQUFDLDRCQUFBLE9BQUF2RyxFQUFBRCxFQUFBN0IsS0FBQW9JLE9BQUFELGFBQUExRSxVQUFBLFdBQUEzQixFQUFBd0csS0FDQTFILEtBQUFzRSxxQkFBQStDLElBRUE1RCxFQUFBLElBQUFoRSxFQUFBQyxJQUFBaUksYUFBQU4sR0FBQUEsR0FDQUMsR0FBQSxFQUNBOUgsRUFBQTZILEdBQUFuSCxHQUFBLFFBQUEsU0FBQUMsR0FLQSxPQUhBLE1BQUFnQixFQUFBaEIsRUFBQXlILFVBQUEsTUFBQXpHLElBQ0FtRyxHQUFBLEdBRUEsT0FFQTlILEVBQUE2SCxHQUFBbkgsR0FBQSxVQUFBLFNBQUFDLEdBQ0EsSUFBQWdCLEVBb0JBLE9BbkJBLE1BQUFBLEVBQUFoQixFQUFBeUgsVUFBQSxNQUFBekcsSUFDQW1HLEdBQUEsSUFHQUEsRUFEQSxNQUFBbkgsRUFBQTBILFNBQUEsTUFBQTFILEVBQUEySCxRQUNBM0gsRUFBQTBILFNBQUExSCxFQUFBMkgsUUFFQVIsSUFBQSxLQUFBbkgsRUFBQXlILFVBQ0FuRSxFQUFBc0Usd0JBQUEsRUFDQXRFLEVBQUE1RCxXQUFBc0gsUUFDQTFELEVBQUFqQyxvQkFBQSxFQUNBeUIsV0FDQSxXQUNBLElBQUFRLEVBQUFqQyxtQkFFQSxPQURBaEMsRUFBQTZILEdBQUFGLFFBQ0ExRCxFQUFBc0Usd0JBQUEsR0FHQSxJQUVBLE9BRUF2SSxFQUFBNkgsR0FBQW5ILEdBQUEsUUFDQSxjQUVBVixFQUFBNkgsR0FBQW5ILEdBQUEsUUFDQSxXQUNBLElBQUF1RCxFQUFBc0UsdUJBQ0EsT0FBQXZJLEVBQUE2SCxHQUFBcEgsU0FBQSxvQkFJQVQsRUFBQTZILEdBQUFuSCxHQUFBLE9BQ0EsV0FDQSxJQUFBdUQsRUFBQXNFLHVCQUNBLE9BQUF2SSxFQUFBNkgsR0FBQUQsWUFBQSxvQkFJQTVILEVBQUFpRSxFQUFBM0QsU0FBQUksR0FBQSwyQkFDQSxXQUVBLE9BREFWLEVBQUE2SCxHQUFBRixRQUNBMUQsRUFBQXNFLHdCQUFBLElBR0F2SSxFQUFBaUUsRUFBQTNELFNBQUFJLEdBQUEsWUFDQSxTQUFBQyxFQUFBNkgsR0FDQSxJQUNBQyxFQUFBekksRUFBQTZILEdBQUFhLEtBQUEsa0JBQ0FDLEVBQUEzSSxFQUFBNkgsR0FBQWEsS0FBQSxnQkFDQUUsRUFBQTVJLEVBQUE2SCxHQUFBZ0IsTUFHQSxPQUZBN0ksRUFBQTZILEdBQUFnQixJQUFBLEdBQUFELEVBQUFyRCxNQUFBLEVBQUFrRCxHQUFBRCxFQUFBMUcsS0FBQThHLEVBQUFyRCxNQUFBb0QsSUFDQTNJLEVBQUE2SCxHQUFBLEdBQUFpQixrQkFBQUwsRUFBQUQsRUFBQTFHLEtBQUFqQyxPQUFBNEksRUFBQUQsRUFBQTFHLEtBQUFqQyxRQUNBRyxFQUFBNkgsR0FBQTNFLFFBQUEsY0FLQWpELEVBQUE2RSxxQkFBQSxTQUFBaUUsR0FFQSxJQUFBOUksRUFBQThJLEVBQUFBLEdBTUEsT0FMQS9JLEVBQUErSSxHQUFBckksR0FBQSxRQUNBLFdBQ0EsT0FBQVYsRUFBQStJLEdBQUF0SSxTQUFBLG9CQUdBVCxFQUFBK0ksR0FBQXJJLEdBQUEsT0FDQSxXQUNBLE9BQUFWLEVBQUErSSxHQUFBbkIsWUFBQSxxQkF3SEEzSCxFQUFBb0QsVUFBQVosYUFBQSxTQUFBa0IsRUFBQTdFLEVBQUFvSSxHQUNBLElBQUE4QixFQVNBekksRUEwQkFBLEVBbENBLE9BQUFvRCxFQUFBdkIsTUFBQSw0QkFDQTVCLEtBQUFGLFFBQUE0QyxRQUFBLGtCQUFBLENBQ0ErRixRQUFBLDRGQUdBekksS0FBQUYsUUFBQTRDLFFBQUEsb0JBQ0E4RixFQUFBLElBQUFFLE9BQ0FDLFlBQUEsWUFDQUgsRUFBQXpHLFFBQUFoQyxFQXlCQUMsS0F4QkEsV0FDQSxJQUFBNEksRUFBQXJFLEVBQ0FzRSxFQUFBdkQsU0FBQUMsY0FBQSxVQUNBc0QsRUFBQW5ELE1BQUE4QyxFQUFBOUMsTUFDQW1ELEVBQUFsRCxPQUFBNkMsRUFBQTdDLE9BQ0FrRCxFQUFBQyxXQUFBLE1BQ0FDLFVBQUFQLEVBQUEsRUFBQSxFQUFBSyxFQUFBbkQsTUFBQW1ELEVBQUFsRCxRQUNBcEIsRUFBQSxLQUNBLElBQ0FBLEVBQUFzRSxFQUFBRyxVQUFBLGFBQ0FKLEVBQUFqSixFQUFBNEUsR0FDQSxNQUFBakMsSUFXQSxPQVZBaUMsR0FDQXhFLEVBQUFELFFBQUE0QyxRQUFBLGFBQUEsQ0FDQWtHLEtBQUFBLEVBQ0FyRSxRQUFBQSxFQUNBbUIsTUFBQThDLEVBQUE5QyxNQUNBQyxPQUFBNkMsRUFBQTdDLE9BQ0FwRSxjQUFBakQsRUFDQW9JLEtBQUFBLElBR0EzRyxFQUFBRCxRQUFBNEMsUUFBQSxtQkFHQThGLEVBQUFTLFNBQUFsSixFQVFBQyxLQVBBLFdBS0EsT0FKQUQsRUFBQUQsUUFBQTRDLFFBQUEsa0JBQUEsQ0FDQStGLFFBQUEsNkJBQUF0RixFQUNBK0YsSUFBQS9GLElBRUFwRCxFQUFBRCxRQUFBNEMsUUFBQSxtQkFHQThGLEVBQUFyRixJQUFBQSxJQUdBMUQsRUFBQW9ELFVBQUFLLHdCQUFBLFNBQUFpRyxHQUlBLElBSEEsSUFBQTlDLEVBT0F0RyxFQU5BcUosRUFBQUMsS0FBQUMsTUFBQSxJQUFBRCxLQUFBRSxVQUNBdEksRUFBQWpCLEtBQUFILFdBQUEySixLQUFBLE9BQ0EvSSxFQUFBLEVBQUFHLEVBQUFLLEVBQUE1QixPQUFBb0IsRUFBQUcsRUFBQUgsS0FDQTRGLEVBQUFwRixFQUFBUixJQUNBLGlCQUFBMkksSUFBQSxFQUVBLE9BQUFuRyxZQUFBbEQsRUFhQUMsS0FaQSxXQUdBLElBRkEsSUFDQWtCLEVBQUFuQixFQUFBRixXQUFBMkosS0FBQSxPQUNBOUksRUFBQSxFQUFBRyxFQUFBSyxFQUFBN0IsT0FBQXFCLEVBQUFHLEVBQUFILEtBQ0EyRixFQUFBbkYsRUFBQVIsSUFDQSxpQkFBQTBJLEtBQ0FELEVBQUE5QyxFQUFBbEQsS0FDQTNELEVBQUE2RyxHQUFBb0QsVUFHQSxPQUFBMUosRUFBQUQsUUFBQTRDLFFBQUEsOEJBRUEsSUEzU0FqRCxFQThTQUEsR0FJQUwsS0FBQVksTyxvQ0M1YkFuQixFQUFRLHFCQUNSQSxFQUFRLHFCQUNSQSxFQUFRLGlCQUNSQSxFQUFRLGlCLGtIQ0hSLElBQVVXLEVBQVNmLEVBQ2RpTCxFQUdIQyxFQUpRbkssRUFxUlBnRSxPQUFPSixPQXJSUzNFLEVBcVJGbUwsTUFwUlpGLEVBQVdHLEdBQUdDLE1BQU1KLFNBQ2RHLEdBQUdDLE1BQU1DLEtBQUtDLE9BQ2RILEdBQUdDLE1BQU1DLEtBQUtFLE1BQ3ZCTixFQUFTRCxFQUFTQyxLQUduQkUsR0FBR0MsTUFBTUosU0FBU0ssS0FBS0csd0JBQTBCTCxHQUFHQyxNQUFNSyxLQUFLQyxPQUFPLENBQ3JFQyxTQUFVUixHQUFHUSxTQUFTLHFCQUN0QkMsVUFBVyxvQkFDWEMsV0FBVyxLQUNYQyxNQUFRLEtBQ1JDLFlBQWMsS0FDZEMsV0FBYSxLQUViQyxTQUFXLEtBRVhDLE9BQVMsQ0FDUkMsK0JBQWlDLGNBQ2pDQyxnQ0FBa0MsZ0JBRW5DQyxXQUFhLFdBRVpsQixHQUFHQyxNQUFNSyxLQUFLdEgsVUFBVWtJLFdBQVdDLE1BQU9oTCxLQUFNaUwsV0FFaERDLEVBQUVDLFNBQVVuTCxLQUFLb0wsUUFBUyxDQUN6QkMsZ0JBQWtCMUIsRUFBS2EsUUFHZixJQUFJWCxHQUFHQyxNQUFNSyxLQUFLLENBQzFCbUIsUUFBYSxNQUNiaEIsVUFBYSxjQUNiQyxXQUFhdkssS0FBS3VLLGFBR25CdkssS0FBSzJLLFNBQVczSyxLQUFLb0wsUUFBUUcsU0FFOUJDLGFBQWUsU0FBVXhELEdBQ3hCLElBQUl5RCxFQUFZekwsS0FBSzBMLGdCQUFnQkMsS0FBSyxJQUFJakUsSUFBSSxHQUNqRGtFLEVBQU81TCxLQUNQNkwsRUFBUzdELEVBQUtwRyxNQUFNLHdCQUF3QixHQTRCN0MsT0ExQk84SCxFQUFTMEIsUUFBUVUsV0FBV0MsUUFBUUYsS0FDMUNBLEVBQVM3TCxLQUFLb0wsUUFBUVksbUJBR2xCaE0sS0FBS3dLLE9BQ1R4SyxLQUFLd0ssTUFBTXlCLFVBR1pqTSxLQUFLd0ssTUFBUSxJQUFJL0wsRUFBRWlLLE1BQ25CMUksS0FBS3dLLE1BQU16SSxPQUFTLFdBQ25CLElBQUltSyxFQUFPTixFQUFLTyxjQUFjQyxVQUFVLFVBQ3ZDQyxFQUFRaEQsS0FBS2lELElBQUtKLEVBQUt4RyxNQUFRMUYsS0FBSzBGLE1BQU93RyxFQUFLdkcsT0FBUzNGLEtBQUsyRixRQUU3RHVHLEdBQVNHLEVBQVEsR0FBTXJNLEtBQUt1TSxTQUFVdk0sS0FBSzBGLE1BQU0yRyxFQUFPck0sS0FBSzJGLE9BQU8wRyxHQUV0RXJNLEtBQUt3TSxNQUFPZixJQUdiekwsS0FBS3dLLE1BQU1pQyxLQUFNekUsR0FDWmhJLEtBQUswTCxpQkFDVDFMLEtBQUswTCxnQkFBZ0JnQixPQUFPMU0sS0FBS3dLLE9BRWxDeEssS0FBS1IsRUFBRSx3Q0FBd0NxTSxFQUFPLE1BQU0zRCxLQUFNLFdBQVcsR0FHN0VsSSxLQUFLNkcsVUFBUyxHQUNQN0csTUFFUjJNLE9BQVMsV0FNUixPQUxBOUMsR0FBR0MsTUFBTUssS0FBS3RILFVBQVU4SixPQUFPM0IsTUFBTWhMLEtBQUtpTCxXQUMxQ2pMLEtBQUswTCxnQkFBa0IxTCxLQUFLUixFQUFFLG9CQUM5QlEsS0FBS3lLLFlBQWN6SyxLQUFLUixFQUFFLDJCQUMxQlEsS0FBSzBLLFdBQWExSyxLQUFLUixFQUFFLDBCQUN6QlEsS0FBS1IsRUFBRSwwQkFBMEI2SSxJQUFLcUIsRUFBU2tELGVBQ3hDNU0sTUFFUjZNLGFBQWUsV0FDZDdNLEtBQUswQyxRQUFTLDJCQUE2QjFDLE1BQzNDQSxLQUFLOE0sd0JBRU5DLFlBQWMsV0FFYixJQUFJcEwsRUFBTzNCLEtBQUtSLEVBQUUsb0NBQW9DNkksTUFDckQyRSxFQUFTdEQsRUFBUzBCLFFBQVFVLFdBQVdDLFFBQVNwSyxHQUM5QytFLEVBQU8xRyxLQUFLUixFQUFFLCtCQUErQjZJLE1BQVEsSUFBTTJFLEVBQzNEcEUsRUFBTzVJLEtBQUt3SyxNQUFNeUMsVUFBV3RMLEVBQU0rSCxFQUFTMEIsUUFBUThCLGNBRXJEbE4sS0FBS21OLHFCQUVMdkUsRUFBS3dFLE9BQVF4RSxFQUFLeUUsYUFDbEJ6RSxFQUFLbEMsS0FBT0EsRUFDWmtDLEVBQUtqSCxLQUFPQSxFQUNaM0IsS0FBS21NLGNBQWNtQixRQUFTMUUsRUFBT2xDLEdBRW5DMUcsS0FBSzZHLFVBQVUsR0FFZjdHLEtBQUswQyxRQUFTLDBCQUE0QjFDLE9BRTNDdU4sS0FBSyxXQUVKLE9BREF2TixLQUFLd04sSUFBSUQsT0FDRnZOLE1BRVJ5TixLQUFLLFdBRUosT0FEQXpOLEtBQUt3TixJQUFJQyxPQUNGek4sTUFFUjZHLFNBQVcsU0FBVTZHLEdBQ3BCMU4sS0FBS3lLLFlBQVl2QyxLQUFNLFdBQVl3RixHQUNuQzFOLEtBQUswSyxXQUFXeEMsS0FBTSxXQUFZd0YsSUFFbkNDLHNCQUF3QixXQUN2QjNOLEtBQUswQyxRQUFTLDZCQUNkMUMsS0FBSzZHLFVBQVMsR0FDZDdHLEtBQUs4TSx3QkFFTmMsb0JBQXNCLFNBQVNDLEVBQUdDLEdBQ2pDOU4sS0FBSzBDLFFBQVMsMkJBQTRCb0wsR0FDMUM5TixLQUFLNkcsVUFBUyxHQUNkN0csS0FBSzhNLHdCQUVOSyxtQkFBcUIsV0FDcEJuTixLQUFLbU0sY0FBYzRCLEtBQU0sZUFBZ0IvTixLQUFLMk4sc0JBQXVCM04sTUFDckVBLEtBQUttTSxjQUFjNEIsS0FBTSxRQUFXL04sS0FBSzROLG9CQUFxQjVOLE9BRS9EOE0scUJBQXVCLFdBQ3RCOU0sS0FBS21NLGNBQWM2QixPQUFRLGVBQWdCaE8sS0FBSzJOLHNCQUF1QjNOLE1BQ3ZFQSxLQUFLbU0sY0FBYzZCLE9BQVEsUUFBV2hPLEtBQUs0TixvQkFBcUI1TixPQUVqRW1NLFlBQWEsV0FDWixPQUFPbk0sS0FBS3VLLFdBQVdJLFNBQVNBLFNBQVNBLFlBSzNDZCxHQUFHQyxNQUFNSixTQUFTSyxLQUFLa0UsV0FBYXBFLEdBQUdDLE1BQU1LLEtBQUtDLE9BQU8sQ0FDeERDLFNBQVVSLEdBQUdRLFNBQVMsdUJBQ3RCQyxVQUFXLHNCQUNYQyxXQUFXLEtBQ1gyRCxPQUFPLFFBQ1BDLFlBQWMsS0FFZHhCLE9BQVEsV0FDUCxJQUFJZixFQUFPNUwsS0FRWCxPQVBBNkosR0FBR0MsTUFBTUssS0FBS3RILFVBQVU4SixPQUFPM0IsTUFBTWhMLEtBQUtpTCxXQUMxQ3RILFFBQVFDLElBQUs1RCxLQUFLUixFQUFHLGNBQ3JCUSxLQUFLbU8sWUFBY25PLEtBQUtSLEVBQUcsYUFBYzZFLDBCQUN6Q3JFLEtBQUtvTyxTQUFXcE8sS0FBS1IsRUFBRyxZQUN4QlEsS0FBS21PLFlBQVlqTyxHQUFHLFFBQVMsV0FDNUIwTCxFQUFLeUMsYUFBYSxNQUVack8sTUFFUnNPLE1BQVEsV0FDUCxJQUNDQyxFQURHM0MsRUFBTzVMLEtBa0NYLE9BL0JBQSxLQUFLd08sYUFBYyxFQUVuQnhPLEtBQUttTyxZQUNIak8sR0FBRyxRQUFRLFNBQVM1QixHQUNwQmlRLEVBQW9CMUUsR0FBR0MsTUFBTUosU0FBUzZFLGtCQUFrQmpRLEVBQUVpRCxjQUFjbEIsaUJBRXhFSCxHQUFHLFlBQWMsU0FBVTVCLEVBQUcwSixHQUV6QnVHLEdBQXFCM0MsRUFBSzRDLGNBRy9CNUMsRUFBS3lDLGFBQWMxRSxFQUFLOEUsc0JBQ3hCalAsRUFBR1EsTUFBTzJMLEtBQUssT0FFZnpMLEdBQUcsYUFBZSxTQUFVNUIsRUFBRzBKLEdBQzFCNEQsRUFBSzRDLGNBR1Y1QyxFQUFLbEosUUFBUywwQkFBMkIxQyxLQUFPZ0ksRUFBS3pELFNBQ3JEcUgsRUFBSzRDLGFBQWMsS0FFbkJ0TyxHQUFHLGtCQUFvQixTQUFVNUIsRUFBRzBKLEdBQ3BDNEQsRUFBS3lDLGFBQWMxRSxFQUFLK0UsYUFDeEJsUCxFQUFHUSxNQUFPMkwsS0FBSyxNQUlqQjFJLFdBQVcsV0FDVjJJLEVBQUt1QyxZQUFZekcsSUFBSSxHQUFHUCxTQUN2QixHQUVLbkgsTUFFUjJPLEtBQU8sV0FLTixPQUpBM08sS0FBS21PLFlBQ0hTLElBQUksY0FDSkEsSUFBSSxtQkFDSkEsSUFBSSxhQUNDNU8sTUFFUnVOLEtBQUssV0FFSixPQURBdk4sS0FBS3dOLElBQUlELE9BQ0Z2TixNQUVSeU4sS0FBSyxXQUVKLE9BREF6TixLQUFLd04sSUFBSUMsT0FDRnpOLE1BRVJxTyxhQUFhLFNBQVVRLEdBQ3RCN08sS0FBS29PLFNBQVM5TSxLQUFNdU4sTUFJdEJoRixHQUFHQyxNQUFNSixTQUFTSyxLQUFLK0UsdUJBQXlCakYsR0FBR0MsTUFBTUssS0FBS0MsT0FBTyxDQUVwRUMsU0FBVVIsR0FBR1EsU0FBUyxvQkFDdEJDLFVBQVksbUJBRVp5RSxRQUFVLEtBQ1ZwRSxTQUFXLEtBRVhJLFdBQWEsV0FDWixJQUFJaUUsRUFBTW5GLEdBQUdDLE1BQU1LLEtBQUt0SCxVQUFVa0ksV0FBV0MsTUFBT2hMLEtBQU1pTCxXQXNCMUQsT0FwQkFDLEVBQUVDLFNBQVVuTCxLQUFLb0wsUUFBUyxDQUN6QjZELFdBQWMsS0FDZDVELGdCQUFrQnJMLEtBQUtvTCxRQUFROEQsaUJBQy9CbEQsa0JBQW9CLFlBQ3BCbUQsTUFBVXhGLEVBQUt5RixhQUdoQnBQLEtBQUsrTyxRQUFXLElBQUkvTyxLQUFLb0wsUUFBUTJELFFBQVMsQ0FBRXhFLFdBQWF2SyxLQUFLdUssYUFFOUR2SyxLQUFLMkssU0FBVyxJQUFJZCxHQUFHQyxNQUFNSixTQUFTSyxLQUFLRyx3QkFBeUIsQ0FDOURLLFdBQWV2SyxLQUFLdUssV0FDcEJnQixRQUFhdkwsS0FBS29MLFFBQVE2RCxXQUMxQjVELGdCQUFtQnJMLEtBQUtvTCxRQUFRQyxnQkFDaENXLGtCQUFvQmhNLEtBQUtvTCxRQUFRWSxvQkFFdkNoTSxLQUFLMk0sU0FFTDNNLEtBQUtxUCxTQUFVclAsS0FBSytPLFFBQVMsMEJBQTJCL08sS0FBS3NQLGNBQzdEdFAsS0FBS3FQLFNBQVVyUCxLQUFLMkssU0FBVSwyQkFBNEIzSyxLQUFLdVAsZUFFeERQLEdBRVJyQyxPQUFPLFdBU04sT0FOQTlDLEdBQUdDLE1BQU1LLEtBQUt0SCxVQUFVOEosT0FBTzNCLE1BQU9oTCxLQUFNaUwsV0FFNUNqTCxLQUFLUixFQUFFLFlBQ0xrTixPQUFRMU0sS0FBSytPLFFBQVFwQyxTQUFTYSxLQUM5QmQsT0FBUTFNLEtBQUsySyxTQUFTZ0MsU0FBU2EsS0FFMUJ4TixNQUVSc1AsYUFBZSxTQUFVUCxFQUFVUyxHQUNsQ3hQLEtBQUsrTyxRQUFRSixPQUFPbEIsT0FDcEJ6TixLQUFLMkssU0FBUzRDLE9BQU8vQixhQUFjZ0UsSUFFcENELGNBQWMsV0FHYixPQUZBdlAsS0FBSzJLLFNBQVM4QyxPQUNkek4sS0FBSytPLFFBQVF4QixPQUFPZSxRQUNidE8sTUFFUnlQLGFBQWEsV0FFWixPQURBelAsS0FBSytPLFFBQVFKLE9BQ04zTyxNQUVSMFAsVUFBWSxXQUNYLE9BQU8xUCxLQUFLK08sUUFBUWIsUUFFckJ5QixRQUFRLFdBRVAsT0FEQTNQLEtBQUsrTyxRQUFRSixPQUNOM08sUywwUUNqUlYsU0FBV1IsRUFBR0wsRUFBU1YsR0FFTm1SLFVBQVVDLFVBQVUvTSxRQUFRLFVBQTVDLElBQ0NnTixFQUFVLEVBR1gsU0FBU0MsRUFBU3hSLEdBQ2pCLE9BQVEsS0FBT0EsRUFBRTJJLFlBQVk4SSxRQUFRLEdBR3RDdEcsU0FBV3ZLLEVBQVF1SyxTQUFXbEssRUFBRTRLLE9BQVEsQ0FDdkM2RixTQUFXLENBQ1Z4TSxNQUFVLFVBQVc2QixVQUFjLFlBQWFBLFVBQXdDLFdBQTNCNEssRUFBTzlNLE9BQU8rTSxVQUEyQixZQUFhN0ssU0FBU0MsY0FBYyxRQUUzSXdFLEtBQUssR0FFTGdELFlBQWEsU0FBVXZDLEVBQU80RixFQUFRQyxHQUVyQyxJQUFJQyxFQUFLLGtCQUFtQlIsSUFDM0JTLEVBQWEvUSxFQUFFZ0wsR0FDYmdHLEtBQUssWUFBWUYsRUFBRyx5RkFDcEJHLFNBR0ZqRyxFQUFNekksT0FBUyxXQUNkdkMsRUFBRzRRLEVBQU81USxFQUFFLElBQUk4USxJQUFNNUssTUFBTzFGLEtBQUswUSxjQUNsQ2xSLEVBQUc0USxFQUFPNVEsRUFBRSxJQUFJOFEsSUFBTTNLLE9BQVEzRixLQUFLMlEsZ0JBTzNCLFNBQVRDLEVBQW1Cck0sR0FDbEIsSUFBSTVDLEVBQU80QyxFQUFRM0MsTUFBTSxxQkFBcUIsR0FDN0N0QixFQUFPLElBQUk3QixFQUFFNEcsS0FBTSxLQUFNLENBQUUyQyxLQUFNekQsU0FFN0IsS0FESnlJLEVBQVN0RCxTQUFTMEIsUUFBUVUsV0FBV0MsUUFBU3BLLEtBRTlDZ0MsUUFBUWtOLE1BQU8sZ0NBQW1DbFAsR0FHbkRyQixFQUFLb0csS0FBT2dELFNBQVNrRCxZQUFZSSxHQUNqQzFNLEVBQUtxQixLQUFPQSxFQUVSMkwsRUFBVSxXQUNid0QsRUFBU25HLFNBQVNBLFNBQVNBLFNBQVMyQyxRQUFTaE4sSUFFdkN3USxHQWdCTkEsRUFBU0MsUUFBUUMsUUFDakIxRCxPQWhCQXdELEVBQVdqSCxHQUFHQyxNQUFNc0csT0FBT2EsS0FBTTdOLE9BQU84TixlQUFnQixDQUN2REMsTUFBUSxPQUNSSixNQUFRLFNBQ1I1QixNQUFRekYsU0FBU0MsS0FBS3lGLFdBQ3RCZ0MsVUFBVSxLQUdGQyxRQUVKUCxFQUFTbkcsU0FBU0EsVUFBWW1HLEVBQVNuRyxTQUFTQSxTQUFTMkcsTUFDN0RoRSxJQUVBd0QsRUFBUzVRLEdBQUksaUJBQWtCb04sSUFNakN3RCxFQUFTbkcsU0FBU0EsU0FBU0EsU0FBU29ELEtBQUssaUJBQWlCLFNBQVV6UCxHQUNuRThSLEVBQU81USxFQUFFLElBQUk4USxHQUFJOUssS0FBSyxnQkFBZ0JsSCxFQUFFaVQsTUFBTUMsV0FFL0NWLEVBQVNuRyxTQUFTQSxTQUFTQSxTQUFTb0QsS0FBSyxlQUFlLFNBQVVGLEVBQUk0RCxHQUVyRSxJQUFJbEIsRUFBYUgsRUFBTzVRLEVBQUUsSUFBSThRLEdBQzdCb0IsRUFBVSxrQ0FBa0NELEVBQUtFLFdBQVdyQixHQUFHLG9CQUFvQm1CLEVBQUtFLFdBQVdDLFFBQVExSSxJQUFJLE9BR2hIcUgsRUFBV3NCLFlBQWFILEdBR3hCdEIsRUFBTzVRLEVBQUUsWUFBWTJELEVBQUksTUFBTTJPLEtBQUssV0FDbkN0UyxFQUFFUSxNQUFNNlIsWUFBYUgsT0FHdkJaLEVBQVNuRyxTQUFTQSxTQUFTQSxTQUFTb0QsS0FBSyxRQUFRLFNBQVVGLEVBQUk0RCxHQUM5RDlOLFFBQVFDLElBQUlpSyxFQUFHNEQsS0F0RGxCLElBQUlNLEVBQ0hqQixFQUNBM04sRUFBTXFILEVBQU1ySCxJQUNaNk8sRUFBTTdPLEVBQUk2TSxPQUFPLEVBQUUsR0EyRXBCLE1BcEJhLFVBQVJnQyxJQUVKRCxFQUFNLElBQUlFLGdCQUNOQyxhQUFlLE9BQ25CSCxFQUFJSSxtQkFBcUIsV0FDeEIsSUFBSW5SLEVBQ21CLEdBQWxCK1EsRUFBSUssY0FDUnBSLEVBQVMsSUFBSWMsWUFDTkMsT0FBUyxXQUNmNk8sRUFBUTVQLEVBQU9tQixTQUVoQm5CLEVBQU9vQixjQUFlLElBQUlpRCxLQUFNLENBQUUwTSxFQUFJTSxVQUFZLENBQUUxUSxLQUFNLGlCQUc1RG9RLEVBQUlkLEtBQU0sTUFBTzlOLEdBQ2pCNE8sRUFBSU8sS0FBTSxPQUVTLFVBQVJOLEdBQ1hwQixFQUFRek4sR0FFRm9OLEdBR1IzRCxZQUFhLFNBQVVJLEdBQ3RCLElBQUl0RyxFQUFPZ0QsU0FBUzBCLFFBQVE4RCxpQkFDM0JxRCxFQUFNLElBQUlDLEtBRVZDLEVBQVdqVCxFQUFFLG1DQUFtQzZJLE1BQ2hEcUssRUFBV2xULEVBQUUsdUJBQXVCOEIsT0FDcEM4RSxFQUFNLENBQ0wsQ0FBRXVNLEVBQUcsS0FBTXRVLEVBQUdrVSxFQUFJSyxlQUNsQixDQUFFRCxFQUFHLEtBQU10VSxFQUFHa1UsRUFBSUssY0FBZ0IsS0FDbEMsQ0FBRUQsRUFBRyxLQUFNdFUsRUFBRzBSLEVBQVN3QyxFQUFJTSxXQUFhLElBQ3hDLENBQUVGLEVBQUcsS0FBTXRVLEVBQUcwUixFQUFTd0MsRUFBSU8sWUFDM0IsQ0FBRUgsRUFBRyxLQUFNdFUsRUFBR2tVLEVBQUlPLFdBQ2xCLENBQUVILEVBQUcsS0FBTXRVLEVBQUcwUixFQUFTd0MsRUFBSVEsYUFDM0IsQ0FBRUosRUFBRyxLQUFNdFUsRUFBRzBSLEVBQVN3QyxFQUFJUSxXQUFhLEtBQ3hDLENBQUVKLEVBQUcsS0FBTXRVLEVBQUcwUixFQUFTd0MsRUFBSVMsZUFDM0IsQ0FBRUwsRUFBRyxLQUFNdFUsRUFBRzBSLEVBQVN3QyxFQUFJVSxlQUMzQixDQUFFTixFQUFHLEtBQU10VSxFQUFHZ0wsS0FBS0MsTUFBT2lKLEVBQUlXLFVBQVksT0FrQjVDLFlBaEJLLElBQXVCVCxFQUMzQnJNLEVBQUl2RSxLQUFNLENBQUU4USxFQUFHLGFBQWN0VSxFQUFHb1UsSUFFaENyTSxFQUFJdkUsS0FBTSxDQUFFOFEsRUFBRyxhQUFjdFUsRUFBRyxVQUU1QixJQUF1QnFVLEVBQzNCdE0sRUFBSXZFLEtBQU0sQ0FBRThRLEVBQUcsYUFBY3RVLEVBQUdxVSxJQUVoQ3RNLEVBQUl2RSxLQUFNLENBQUU4USxFQUFHLGFBQWN0VSxFQUFHLEtBRWpDK0gsRUFBSStNLFFBQVEsU0FBU25QLEdBQ3BCMEMsRUFBT0EsRUFBSzBNLFFBQVNwUCxFQUFHMk8sRUFBRzNPLEVBQUczRixLQUUxQixpQkFBb0IyTyxJQUN4QnRHLEdBQVEsSUFBTXNHLEdBRVJ0RyxHQU1SNkgsa0JBQWtCLFNBQVVsTyxHQUMzQixJQUFJZ1QsR0FBVyxFQUNmLE9BQUtoVCxFQUFjb0IsT0FDbEJqQyxFQUFFc1MsS0FBTXpSLEVBQWNvQixNQUFPLFNBQVMvQyxFQUFFOEIsR0FDdkMsR0FBS0EsRUFBS21CLFFBQVErSCxTQUFTMEIsUUFBUVUsV0FBV3JJLE1BRTdDLFFBREE0UCxHQUFXLEtBSU5BLEdBR0hoVCxFQUFjMEMsT0FDbEJ2RCxFQUFFc1MsS0FBTXBJLFNBQVMwQixRQUFRVSxXQUFXckksTUFBTyxTQUFTOUIsRUFBSzJSLEdBQ3hELElBQTBDLEVBQXJDalQsRUFBYzBDLE1BQU1ELFFBQVFuQixHQUVoQyxRQURBMFIsR0FBVyxLQUlOQSxHQUVELE9BSU4zSixVQS9LSixDQWlMSWxHLE9BQVFxRyxHQUFHQyxNQUFPRixRLG9DQ2pMdEIsSUFBVXBLLEVBR1JtSyxFQUhRbkssRUF1SlBnRSxPQUFPSixPQXBKUnVHLEVBQU9FLEdBQUdDLE1BQU1KLFNBQVNDLEtBRTFCbkssRUFBRTRLLE9BQVFQLEdBQUcwSixTQUFTMVEsVUFBVyxDQUNoQzJRLFFBQVUsU0FBVUMsT0FTckJ2SSxFQUFFZCxPQUFRUCxHQUFHQyxNQUFNQyxLQUFLMkosV0FBV0MsT0FBTzlRLFVBQVcsQ0FDcEQrUSxrQkFBbUIvSixHQUFHQyxNQUFNQyxLQUFLMkosV0FBV0MsT0FBTzlRLFVBQVVrSSxXQUM3REEsV0FBWSxXQUNYL0ssS0FBSzRULGtCQUFrQjVJLE1BQU9oTCxLQUFNaUwsV0FDcENqTCxLQUFLNlQscUJBRU5DLG9CQUFxQmpLLEdBQUdDLE1BQU1DLEtBQUsySixXQUFXQyxPQUFPOVEsVUFBVWtSLGFBQy9EQSxhQUFlLFNBQVVoSyxHQUN4Qi9KLEtBQUs4VCxvQkFBb0I5SSxNQUFNaEwsS0FBS2lMLFdBRS9CcEIsR0FBR0MsTUFBTUosU0FBU3VHLFNBQVN4TSxPQUMvQnNHLEVBQUtpSyxJQUFJLENBQUNDLFdBQVcsQ0FDcEIzUyxLQUFVcUksRUFBS3lGLFdBQ2Y4RSxTQUFVLE9BS2JMLGtCQUFtQixXQUNsQixJQUFJTSxHQUFrQixFQUd0Qm5VLEtBQUtFLEdBQUksdUJBQXlCLFNBQVNrSSxHQUNyQytMLEdBQW1CLG1CQUFzQkEsRUFBZ0J4RSxTQUM3RHdFLEVBQWdCeEUsZUFFWixJQUF1QnZILElBQzNCK0wsRUFBa0IvTCxJQUNoQnBJLE1BRUpBLEtBQUtFLEdBQUksNEJBQTZCRixLQUFLb1Usd0JBQXlCcFUsTUFDcEVBLEtBQUtFLEdBQUksNEJBQTZCRixLQUFLcVUscUJBQXNCclUsTUFDakVBLEtBQUtFLEdBQUksMkJBQTRCRixLQUFLcVUscUJBQXNCclUsT0FLakVvVSx3QkFBeUIsU0FBVWhNLEdBQ3RCcEksS0FBSytRLFFBRWpCL1EsS0FBS3NVLGlCQUFtQmxNLEVBQVEyQixLQUFPLElBQUlGLEdBQUdDLE1BQU1KLFNBQVNLLEtBQUsrRSx1QkFBd0IsQ0FDekZ2RSxXQUFhdkssS0FDYitPLFFBQVdsRixHQUFHQyxNQUFNSixTQUFTSyxLQUFLa0UsYUFFbkNqTyxLQUFLcVAsU0FBVXJQLEtBQUtzVSxpQkFBaUIzSixTQUFVLDRCQUE2QjNLLEtBQUt1VSxvQkFFbEZGLHFCQUFzQixTQUFVak0sR0FDL0JBLEVBQVFtSCxpQkFFVGdGLGtCQUFtQixTQUFVbk0sR0FDNUJwSSxLQUFLd1UsY0FBZXhVLEtBQUtzVSxpQkFBaUIzSixTQUFVLDZCQUNwRCxJQUFJOEosRUFBTSxDQUFFMUssS0FBTSxNQUNsQi9KLEtBQUswVSxjQUFjRCxHQUNuQnpVLEtBQUtvSSxRQUFRNEwsSUFBS1MsRUFBSTFLLE1BQ3RCL0osS0FBSzJVLE9BQU9qTixNQUFNa04sT0FBTyxXQUUxQnBHLFlBQVksV0FHWDdLLFFBQVFDLElBQUk1RCxTQVVka0wsRUFBRWQsT0FBUVAsR0FBR0MsTUFBTUMsS0FBSzhLLG1CQUFtQmhTLFVBQVcsQ0FDckQrUSxrQkFBbUIvSixHQUFHQyxNQUFNQyxLQUFLOEssbUJBQW1CaFMsVUFBVWtJLFdBQzlEQSxXQUFZLFdBQ1gsSUFDQytKLEVBREdsSixFQUFPNUwsS0FHWEEsS0FBSzRULGtCQUFrQjVJLE1BQU1oTCxLQUFLaUwsV0FFbENqTCxLQUFLMEosU0FBVyxDQUNmakcsTUFBUSxDQUVQc0wsU0FBVSxFQUNWZ0csT0FBUSxFQUNSQyxLQUFPLFNBRVJDLFNBQVcsR0FHSGpWLEtBQUt1SyxzQkFBc0JWLEdBQUdDLE1BQU1DLEtBQUsySixXQUFXQyxRQUV2RDlKLEdBQUdDLE1BQU1KLFNBQVN1RyxTQUFTeE0sUUFFL0JxUixFQUFXLElBQUlqTCxHQUFHQyxNQUFNQyxLQUFLQyxPQUFRLENBQ3BDMUksS0FBUXFJLEVBQUt5RixXQUNiOUUsVUFBWSxpQkFDWjRKLFVBQVksR0FDWmdCLE1BQU8sV0FDTnRKLEVBQUtsQyxTQUFTeUwsT0FBU3ZKLEVBQUtsQyxTQUFTakcsTUFDckNtSSxFQUFLd0osYUFBY3pMLEVBQUt5RixlQUcxQnBQLEtBQUswSixTQUFTakcsTUFBTXNMLFFBQVUsSUFBSWxGLEdBQUdDLE1BQU1KLFNBQVNLLEtBQUsrRSx1QkFBd0IsQ0FDaEZ2RSxXQUFhdkssS0FBS3VLLFdBQ2xCd0UsUUFBV2xGLEdBQUdDLE1BQU1KLFNBQVNLLEtBQUtrRSxXQUNsQ2dCLFdBQWFqUCxLQUFLdUssV0FBV0ksU0FBU0EsU0FBU0EsV0FHaEQzSyxLQUFLcVYsUUFBUXJCLElBQUssa0JBQW1CYyxFQUFTbkksWUFJakR5SSxhQUFjLFNBQVVqRyxHQUN2QixJQUFJdkQsRUFBTzVMLEtBRVhBLEtBQUswSixTQUFTcUwsTUFBVSxJQUFJbEwsR0FBR0MsTUFBTUMsS0FBS0UsTUFBTyxDQUNoRE0sV0FBYXZLLEtBQ2JtUCxNQUFhQSxJQUVkblAsS0FBSzBKLFNBQVNxTCxNQUFNM00sUUFBU3BJLEtBQUswSixTQUFTeUwsT0FBT3BHLFNBQ2xEL08sS0FBSzBKLFNBQVNxTCxNQUFNOUQsT0FFcEJqUixLQUFLMEosU0FBU3FMLE1BQU03VSxHQUFJLFFBQVMsV0FDaEMwTCxFQUFLMEosZ0JBQ0wxSixFQUFLbEMsU0FBU3lMLE9BQU9wRyxRQUFRVSxpQkFHOUJ6UCxLQUFLMEosU0FBU3lMLE9BQU9wRyxRQUFRUSxnQkFFN0J2UCxLQUFLcVAsU0FBVXJQLEtBQUswSixTQUFTeUwsT0FBT3BHLFFBQVFwRSxTQUFVLDBCQUEyQjNLLEtBQUtzVixnQkFFdkZBLGNBQWUsV0FDZHRWLEtBQUswSixTQUFTcUwsTUFBTTFELFFBRXBCclIsS0FBS3dVLGNBQWV4VSxLQUFLMEosU0FBU3lMLE9BQU9wRyxRQUFRcEUsU0FBVSIsImZpbGUiOiJhZG1pbi90aGUtcGFzdGUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsbix0KXtmdW5jdGlvbiBvKGksZil7aWYoIW5baV0pe2lmKCFlW2ldKXt2YXIgYz1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFmJiZjKXJldHVybiBjKGksITApO2lmKHUpcmV0dXJuIHUoaSwhMCk7dmFyIGE9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitpK1wiJ1wiKTt0aHJvdyBhLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsYX12YXIgcD1uW2ldPXtleHBvcnRzOnt9fTtlW2ldWzBdLmNhbGwocC5leHBvcnRzLGZ1bmN0aW9uKHIpe3ZhciBuPWVbaV1bMV1bcl07cmV0dXJuIG8obnx8cil9LHAscC5leHBvcnRzLHIsZSxuLHQpfXJldHVybiBuW2ldLmV4cG9ydHN9Zm9yKHZhciB1PVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsaT0wO2k8dC5sZW5ndGg7aSsrKW8odFtpXSk7cmV0dXJuIG99cmV0dXJuIHJ9KSgpIiwiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjEyLjdcblxuLypcbnBhc3RlLmpzIGlzIGFuIGludGVyZmFjZSB0byByZWFkIGRhdGEgKCB0ZXh0IC8gaW1hZ2UgKSBmcm9tIGNsaXBib2FyZCBpbiBkaWZmZXJlbnQgYnJvd3NlcnMuIEl0IGFsc28gY29udGFpbnMgc2V2ZXJhbCBoYWNrcy5cblxuaHR0cHM6Ly9naXRodWIuY29tL2xheWVyc3Nzcy9wYXN0ZS5qc1xuICovXG5cbihmdW5jdGlvbigpIHtcbiAgdmFyICQsIFBhc3RlLCBjcmVhdGVIaWRkZW5FZGl0YWJsZSwgZGF0YVVSTHRvQmxvYiwgaXNGb2N1c2FibGU7XG5cbiAgJCA9IHdpbmRvdy5qUXVlcnk7XG5cbiAgJC5wYXN0ZSA9IGZ1bmN0aW9uKHBhc3RlQ29udGFpbmVyKSB7XG4gICAgdmFyIHBtO1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBjb25zb2xlICE9PSBudWxsKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIkRFUFJFQ0FURUQ6IFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgJC5mbi5wYXN0YWJsZU5vbklucHV0YWJsZSgpIGluc3RlYWQuXCIpO1xuICAgIH1cbiAgICBwbSA9IFBhc3RlLm1vdW50Tm9uSW5wdXRhYmxlKHBhc3RlQ29udGFpbmVyKTtcbiAgICByZXR1cm4gcG0uX2NvbnRhaW5lcjtcbiAgfTtcblxuICAkLmZuLnBhc3RhYmxlTm9uSW5wdXRhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGVsLCBqLCBsZW4sIHJlZjtcbiAgICByZWYgPSB0aGlzO1xuICAgIGZvciAoaiA9IDAsIGxlbiA9IHJlZi5sZW5ndGg7IGogPCBsZW47IGorKykge1xuICAgICAgZWwgPSByZWZbal07XG4gICAgICBpZiAoZWwuX3Bhc3RhYmxlIHx8ICQoZWwpLmlzKCd0ZXh0YXJlYSwgaW5wdXQ6dGV4dCwgW2NvbnRlbnRlZGl0YWJsZV0nKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIFBhc3RlLm1vdW50Tm9uSW5wdXRhYmxlKGVsKTtcbiAgICAgIGVsLl9wYXN0YWJsZSA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gICQuZm4ucGFzdGFibGVUZXh0YXJlYSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBlbCwgaiwgbGVuLCByZWY7XG4gICAgcmVmID0gdGhpcztcbiAgICBmb3IgKGogPSAwLCBsZW4gPSByZWYubGVuZ3RoOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgIGVsID0gcmVmW2pdO1xuICAgICAgaWYgKGVsLl9wYXN0YWJsZSB8fCAkKGVsKS5pcygnOm5vdCh0ZXh0YXJlYSwgaW5wdXQ6dGV4dCknKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIFBhc3RlLm1vdW50VGV4dGFyZWEoZWwpO1xuICAgICAgZWwuX3Bhc3RhYmxlID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgJC5mbi5wYXN0YWJsZUNvbnRlbnRlZGl0YWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBlbCwgaiwgbGVuLCByZWY7XG4gICAgcmVmID0gdGhpcztcbiAgICBmb3IgKGogPSAwLCBsZW4gPSByZWYubGVuZ3RoOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgIGVsID0gcmVmW2pdO1xuICAgICAgaWYgKGVsLl9wYXN0YWJsZSB8fCAkKGVsKS5pcygnOm5vdChbY29udGVudGVkaXRhYmxlXSknKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIFBhc3RlLm1vdW50Q29udGVudGVkaXRhYmxlKGVsKTtcbiAgICAgIGVsLl9wYXN0YWJsZSA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIGRhdGFVUkx0b0Jsb2IgPSBmdW5jdGlvbihkYXRhVVJMLCBzbGljZVNpemUpIHtcbiAgICB2YXIgYjY0RGF0YSwgYnl0ZUFycmF5LCBieXRlQXJyYXlzLCBieXRlQ2hhcmFjdGVycywgYnl0ZU51bWJlcnMsIGNvbnRlbnRUeXBlLCBpLCBtLCBvZmZzZXQsIHJlZiwgc2xpY2U7XG4gICAgaWYgKHNsaWNlU2l6ZSA9PSBudWxsKSB7XG4gICAgICBzbGljZVNpemUgPSA1MTI7XG4gICAgfVxuICAgIGlmICghKG0gPSBkYXRhVVJMLm1hdGNoKC9eZGF0YVxcOihbXlxcO10rKVxcO2Jhc2U2NFxcLCguKykkLykpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmVmID0gbSwgbSA9IHJlZlswXSwgY29udGVudFR5cGUgPSByZWZbMV0sIGI2NERhdGEgPSByZWZbMl07XG4gICAgYnl0ZUNoYXJhY3RlcnMgPSBhdG9iKGI2NERhdGEpO1xuICAgIGJ5dGVBcnJheXMgPSBbXTtcbiAgICBvZmZzZXQgPSAwO1xuICAgIHdoaWxlIChvZmZzZXQgPCBieXRlQ2hhcmFjdGVycy5sZW5ndGgpIHtcbiAgICAgIHNsaWNlID0gYnl0ZUNoYXJhY3RlcnMuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBzbGljZVNpemUpO1xuICAgICAgYnl0ZU51bWJlcnMgPSBuZXcgQXJyYXkoc2xpY2UubGVuZ3RoKTtcbiAgICAgIGkgPSAwO1xuICAgICAgd2hpbGUgKGkgPCBzbGljZS5sZW5ndGgpIHtcbiAgICAgICAgYnl0ZU51bWJlcnNbaV0gPSBzbGljZS5jaGFyQ29kZUF0KGkpO1xuICAgICAgICBpKys7XG4gICAgICB9XG4gICAgICBieXRlQXJyYXkgPSBuZXcgVWludDhBcnJheShieXRlTnVtYmVycyk7XG4gICAgICBieXRlQXJyYXlzLnB1c2goYnl0ZUFycmF5KTtcbiAgICAgIG9mZnNldCArPSBzbGljZVNpemU7XG4gICAgfVxuICAgIHJldHVybiBuZXcgQmxvYihieXRlQXJyYXlzLCB7XG4gICAgICB0eXBlOiBjb250ZW50VHlwZVxuICAgIH0pO1xuICB9O1xuXG4gIGNyZWF0ZUhpZGRlbkVkaXRhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpLmF0dHIoJ2NvbnRlbnRlZGl0YWJsZScsIHRydWUpLmF0dHIoJ2FyaWEtaGlkZGVuJywgdHJ1ZSkuYXR0cigndGFiaW5kZXgnLCAtMSkuY3NzKHtcbiAgICAgIHdpZHRoOiAxLFxuICAgICAgaGVpZ2h0OiAxLFxuICAgICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgICBsZWZ0OiAtMTAwLFxuICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgICAgb3BhY2l0eTogMWUtMTdcbiAgICB9KTtcbiAgfTtcblxuICBpc0ZvY3VzYWJsZSA9IGZ1bmN0aW9uKGVsZW1lbnQsIGhhc1RhYmluZGV4KSB7XG4gICAgdmFyIGZpZWxkc2V0LCBmb2N1c2FibGVJZlZpc2libGUsIGltZywgbWFwLCBtYXBOYW1lLCBub2RlTmFtZTtcbiAgICBtYXAgPSB2b2lkIDA7XG4gICAgbWFwTmFtZSA9IHZvaWQgMDtcbiAgICBpbWcgPSB2b2lkIDA7XG4gICAgZm9jdXNhYmxlSWZWaXNpYmxlID0gdm9pZCAwO1xuICAgIGZpZWxkc2V0ID0gdm9pZCAwO1xuICAgIG5vZGVOYW1lID0gZWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICgnYXJlYScgPT09IG5vZGVOYW1lKSB7XG4gICAgICBtYXAgPSBlbGVtZW50LnBhcmVudE5vZGU7XG4gICAgICBtYXBOYW1lID0gbWFwLm5hbWU7XG4gICAgICBpZiAoIWVsZW1lbnQuaHJlZiB8fCAhbWFwTmFtZSB8fCBtYXAubm9kZU5hbWUudG9Mb3dlckNhc2UoKSAhPT0gJ21hcCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaW1nID0gJCgnaW1nW3VzZW1hcD1cXCcjJyArIG1hcE5hbWUgKyAnXFwnXScpO1xuICAgICAgcmV0dXJuIGltZy5sZW5ndGggPiAwICYmIGltZy5pcygnOnZpc2libGUnKTtcbiAgICB9XG4gICAgaWYgKC9eKGlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b258b2JqZWN0KSQvLnRlc3Qobm9kZU5hbWUpKSB7XG4gICAgICBmb2N1c2FibGVJZlZpc2libGUgPSAhZWxlbWVudC5kaXNhYmxlZDtcbiAgICAgIGlmIChmb2N1c2FibGVJZlZpc2libGUpIHtcbiAgICAgICAgZmllbGRzZXQgPSAkKGVsZW1lbnQpLmNsb3Nlc3QoJ2ZpZWxkc2V0JylbMF07XG4gICAgICAgIGlmIChmaWVsZHNldCkge1xuICAgICAgICAgIGZvY3VzYWJsZUlmVmlzaWJsZSA9ICFmaWVsZHNldC5kaXNhYmxlZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoJ2EnID09PSBub2RlTmFtZSkge1xuICAgICAgZm9jdXNhYmxlSWZWaXNpYmxlID0gZWxlbWVudC5ocmVmIHx8IGhhc1RhYmluZGV4O1xuICAgIH0gZWxzZSB7XG4gICAgICBmb2N1c2FibGVJZlZpc2libGUgPSBoYXNUYWJpbmRleDtcbiAgICB9XG4gICAgZm9jdXNhYmxlSWZWaXNpYmxlID0gZm9jdXNhYmxlSWZWaXNpYmxlIHx8ICQoZWxlbWVudCkuaXMoJ1tjb250ZW50ZWRpdGFibGVdJyk7XG4gICAgcmV0dXJuIGZvY3VzYWJsZUlmVmlzaWJsZSAmJiAkKGVsZW1lbnQpLmlzKCc6dmlzaWJsZScpO1xuICB9O1xuXG4gIFBhc3RlID0gKGZ1bmN0aW9uKCkge1xuICAgIFBhc3RlLnByb3RvdHlwZS5fdGFyZ2V0ID0gbnVsbDtcblxuICAgIFBhc3RlLnByb3RvdHlwZS5fY29udGFpbmVyID0gbnVsbDtcblxuICAgIFBhc3RlLm1vdW50Tm9uSW5wdXRhYmxlID0gZnVuY3Rpb24obm9uSW5wdXRhYmxlKSB7XG4gICAgICB2YXIgcGFzdGU7XG4gICAgICBwYXN0ZSA9IG5ldyBQYXN0ZShjcmVhdGVIaWRkZW5FZGl0YWJsZSgpLmFwcGVuZFRvKG5vbklucHV0YWJsZSksIG5vbklucHV0YWJsZSk7XG4gICAgICAkKG5vbklucHV0YWJsZSkub24oJ2NsaWNrJywgKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihldikge1xuICAgICAgICAgIGlmICghKGlzRm9jdXNhYmxlKGV2LnRhcmdldCwgZmFsc2UpIHx8IHdpbmRvdy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhc3RlLl9jb250YWluZXIuZm9jdXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKSk7XG4gICAgICBwYXN0ZS5fY29udGFpbmVyLm9uKCdmb2N1cycsIChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuICQobm9uSW5wdXRhYmxlKS5hZGRDbGFzcygncGFzdGFibGUtZm9jdXMnKTtcbiAgICAgICAgfTtcbiAgICAgIH0pKHRoaXMpKTtcbiAgICAgIHJldHVybiBwYXN0ZS5fY29udGFpbmVyLm9uKCdibHVyJywgKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gJChub25JbnB1dGFibGUpLnJlbW92ZUNsYXNzKCdwYXN0YWJsZS1mb2N1cycpO1xuICAgICAgICB9O1xuICAgICAgfSkodGhpcykpO1xuICAgIH07XG5cbiAgICBQYXN0ZS5tb3VudFRleHRhcmVhID0gZnVuY3Rpb24odGV4dGFyZWEpIHtcbiAgICAgIHZhciBjdGxEb3duLCBwYXN0ZSwgcmVmLCByZWYxO1xuICAgICAgaWYgKCh0eXBlb2YgRGF0YVRyYW5zZmVyICE9PSBcInVuZGVmaW5lZFwiICYmIERhdGFUcmFuc2ZlciAhPT0gbnVsbCA/IERhdGFUcmFuc2Zlci5wcm90b3R5cGUgOiB2b2lkIDApICYmICgocmVmID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcikgIT0gbnVsbCA/IChyZWYxID0gcmVmLmNhbGwoT2JqZWN0LCBEYXRhVHJhbnNmZXIucHJvdG90eXBlLCAnaXRlbXMnKSkgIT0gbnVsbCA/IHJlZjEuZ2V0IDogdm9pZCAwIDogdm9pZCAwKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb3VudENvbnRlbnRlZGl0YWJsZSh0ZXh0YXJlYSk7XG4gICAgICB9XG4gICAgICBwYXN0ZSA9IG5ldyBQYXN0ZShjcmVhdGVIaWRkZW5FZGl0YWJsZSgpLmluc2VydEJlZm9yZSh0ZXh0YXJlYSksIHRleHRhcmVhKTtcbiAgICAgIGN0bERvd24gPSBmYWxzZTtcbiAgICAgICQodGV4dGFyZWEpLm9uKCdrZXl1cCcsIGZ1bmN0aW9uKGV2KSB7XG4gICAgICAgIHZhciByZWYyO1xuICAgICAgICBpZiAoKHJlZjIgPSBldi5rZXlDb2RlKSA9PT0gMTcgfHwgcmVmMiA9PT0gMjI0KSB7XG4gICAgICAgICAgY3RsRG93biA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSk7XG4gICAgICAkKHRleHRhcmVhKS5vbigna2V5ZG93bicsIGZ1bmN0aW9uKGV2KSB7XG4gICAgICAgIHZhciByZWYyO1xuICAgICAgICBpZiAoKHJlZjIgPSBldi5rZXlDb2RlKSA9PT0gMTcgfHwgcmVmMiA9PT0gMjI0KSB7XG4gICAgICAgICAgY3RsRG93biA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKChldi5jdHJsS2V5ICE9IG51bGwpICYmIChldi5tZXRhS2V5ICE9IG51bGwpKSB7XG4gICAgICAgICAgY3RsRG93biA9IGV2LmN0cmxLZXkgfHwgZXYubWV0YUtleTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3RsRG93biAmJiBldi5rZXlDb2RlID09PSA4Nikge1xuICAgICAgICAgIHBhc3RlLl90ZXh0YXJlYV9mb2N1c19zdG9sZW4gPSB0cnVlO1xuICAgICAgICAgIHBhc3RlLl9jb250YWluZXIuZm9jdXMoKTtcbiAgICAgICAgICBwYXN0ZS5fcGFzdGVfZXZlbnRfZmlyZWQgPSBmYWxzZTtcbiAgICAgICAgICBzZXRUaW1lb3V0KChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICBpZiAoIXBhc3RlLl9wYXN0ZV9ldmVudF9maXJlZCkge1xuICAgICAgICAgICAgICAgICQodGV4dGFyZWEpLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhc3RlLl90ZXh0YXJlYV9mb2N1c19zdG9sZW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KSh0aGlzKSwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9KTtcbiAgICAgICQodGV4dGFyZWEpLm9uKCdwYXN0ZScsIChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7fTtcbiAgICAgIH0pKHRoaXMpKTtcbiAgICAgICQodGV4dGFyZWEpLm9uKCdmb2N1cycsIChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgaWYgKCFwYXN0ZS5fdGV4dGFyZWFfZm9jdXNfc3RvbGVuKSB7XG4gICAgICAgICAgICByZXR1cm4gJCh0ZXh0YXJlYSkuYWRkQ2xhc3MoJ3Bhc3RhYmxlLWZvY3VzJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfSkodGhpcykpO1xuICAgICAgJCh0ZXh0YXJlYSkub24oJ2JsdXInLCAoZnVuY3Rpb24oX3RoaXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGlmICghcGFzdGUuX3RleHRhcmVhX2ZvY3VzX3N0b2xlbikge1xuICAgICAgICAgICAgcmV0dXJuICQodGV4dGFyZWEpLnJlbW92ZUNsYXNzKCdwYXN0YWJsZS1mb2N1cycpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0pKHRoaXMpKTtcbiAgICAgICQocGFzdGUuX3RhcmdldCkub24oJ19wYXN0ZUNoZWNrQ29udGFpbmVyRG9uZScsIChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgJCh0ZXh0YXJlYSkuZm9jdXMoKTtcbiAgICAgICAgICByZXR1cm4gcGFzdGUuX3RleHRhcmVhX2ZvY3VzX3N0b2xlbiA9IGZhbHNlO1xuICAgICAgICB9O1xuICAgICAgfSkodGhpcykpO1xuICAgICAgcmV0dXJuICQocGFzdGUuX3RhcmdldCkub24oJ3Bhc3RlVGV4dCcsIChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oZXYsIGRhdGEpIHtcbiAgICAgICAgICB2YXIgY29udGVudCwgY3VyRW5kLCBjdXJTdGFydDtcbiAgICAgICAgICBjdXJTdGFydCA9ICQodGV4dGFyZWEpLnByb3AoJ3NlbGVjdGlvblN0YXJ0Jyk7XG4gICAgICAgICAgY3VyRW5kID0gJCh0ZXh0YXJlYSkucHJvcCgnc2VsZWN0aW9uRW5kJyk7XG4gICAgICAgICAgY29udGVudCA9ICQodGV4dGFyZWEpLnZhbCgpO1xuICAgICAgICAgICQodGV4dGFyZWEpLnZhbChcIlwiICsgY29udGVudC5zbGljZSgwLCBjdXJTdGFydCkgKyBkYXRhLnRleHQgKyBjb250ZW50LnNsaWNlKGN1ckVuZCkpO1xuICAgICAgICAgICQodGV4dGFyZWEpWzBdLnNldFNlbGVjdGlvblJhbmdlKGN1clN0YXJ0ICsgZGF0YS50ZXh0Lmxlbmd0aCwgY3VyU3RhcnQgKyBkYXRhLnRleHQubGVuZ3RoKTtcbiAgICAgICAgICByZXR1cm4gJCh0ZXh0YXJlYSkudHJpZ2dlcignY2hhbmdlJyk7XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKSk7XG4gICAgfTtcblxuICAgIFBhc3RlLm1vdW50Q29udGVudGVkaXRhYmxlID0gZnVuY3Rpb24oY29udGVudGVkaXRhYmxlKSB7XG4gICAgICB2YXIgcGFzdGU7XG4gICAgICBwYXN0ZSA9IG5ldyBQYXN0ZShjb250ZW50ZWRpdGFibGUsIGNvbnRlbnRlZGl0YWJsZSk7XG4gICAgICAkKGNvbnRlbnRlZGl0YWJsZSkub24oJ2ZvY3VzJywgKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gJChjb250ZW50ZWRpdGFibGUpLmFkZENsYXNzKCdwYXN0YWJsZS1mb2N1cycpO1xuICAgICAgICB9O1xuICAgICAgfSkodGhpcykpO1xuICAgICAgcmV0dXJuICQoY29udGVudGVkaXRhYmxlKS5vbignYmx1cicsIChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuICQoY29udGVudGVkaXRhYmxlKS5yZW1vdmVDbGFzcygncGFzdGFibGUtZm9jdXMnKTtcbiAgICAgICAgfTtcbiAgICAgIH0pKHRoaXMpKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gUGFzdGUoX2NvbnRhaW5lciwgX3RhcmdldCkge1xuICAgICAgdGhpcy5fY29udGFpbmVyID0gX2NvbnRhaW5lcjtcbiAgICAgIHRoaXMuX3RhcmdldCA9IF90YXJnZXQ7XG4gICAgICB0aGlzLl9jb250YWluZXIgPSAkKHRoaXMuX2NvbnRhaW5lcik7XG4gICAgICB0aGlzLl90YXJnZXQgPSAkKHRoaXMuX3RhcmdldCkuYWRkQ2xhc3MoJ3Bhc3RhYmxlJyk7XG4gICAgICB0aGlzLl9jb250YWluZXIub24oJ3Bhc3RlJywgKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihldikge1xuICAgICAgICAgIHZhciBfaSwgY2xpcGJvYXJkRGF0YSwgZmlsZSwgZmlsZVR5cGUsIGl0ZW0sIGosIGssIGwsIGxlbiwgbGVuMSwgbGVuMiwgcGFzdGVkRmlsZW5hbWUsIHJlYWRlciwgcmVmLCByZWYxLCByZWYyLCByZWYzLCByZWY0LCBzdHJpbmdJc0ZpbGVuYW1lLCB0ZXh0O1xuICAgICAgICAgIF90aGlzLm9yaWdpbmFsRXZlbnQgPSAoZXYub3JpZ2luYWxFdmVudCAhPT0gbnVsbCA/IGV2Lm9yaWdpbmFsRXZlbnQgOiBudWxsKTtcbiAgICAgICAgICBfdGhpcy5fcGFzdGVfZXZlbnRfZmlyZWQgPSB0cnVlO1xuICAgICAgICAgIGlmICgoKHJlZiA9IGV2Lm9yaWdpbmFsRXZlbnQpICE9IG51bGwgPyByZWYuY2xpcGJvYXJkRGF0YSA6IHZvaWQgMCkgIT0gbnVsbCkge1xuICAgICAgICAgICAgY2xpcGJvYXJkRGF0YSA9IGV2Lm9yaWdpbmFsRXZlbnQuY2xpcGJvYXJkRGF0YTtcbiAgICAgICAgICAgIGlmIChjbGlwYm9hcmREYXRhLml0ZW1zKSB7XG4gICAgICAgICAgICAgIHBhc3RlZEZpbGVuYW1lID0gbnVsbDtcbiAgICAgICAgICAgICAgX3RoaXMub3JpZ2luYWxFdmVudC5wYXN0ZWRUeXBlcyA9IFtdO1xuICAgICAgICAgICAgICByZWYxID0gY2xpcGJvYXJkRGF0YS5pdGVtcztcbiAgICAgICAgICAgICAgZm9yIChqID0gMCwgbGVuID0gcmVmMS5sZW5ndGg7IGogPCBsZW47IGorKykge1xuICAgICAgICAgICAgICAgIGl0ZW0gPSByZWYxW2pdO1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLnR5cGUubWF0Y2goL150ZXh0XFwvKHBsYWlufHJ0ZnxodG1sKS8pKSB7XG4gICAgICAgICAgICAgICAgICBfdGhpcy5vcmlnaW5hbEV2ZW50LnBhc3RlZFR5cGVzLnB1c2goaXRlbS50eXBlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmVmMiA9IGNsaXBib2FyZERhdGEuaXRlbXM7XG4gICAgICAgICAgICAgIGZvciAoX2kgPSBrID0gMCwgbGVuMSA9IHJlZjIubGVuZ3RoOyBrIDwgbGVuMTsgX2kgPSArK2spIHtcbiAgICAgICAgICAgICAgICBpdGVtID0gcmVmMltfaV07XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0udHlwZS5tYXRjaCgvXmltYWdlXFwvLykpIHtcbiAgICAgICAgICAgICAgICAgIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgICAgICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLl9oYW5kbGVJbWFnZShldmVudC50YXJnZXQucmVzdWx0LCBfdGhpcy5vcmlnaW5hbEV2ZW50LCBwYXN0ZWRGaWxlbmFtZSk7XG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoaXRlbS5nZXRBc0ZpbGUoKSk7XG4gICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge31cbiAgICAgICAgICAgICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gJ3RleHQvcGxhaW4nKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoX2kgPT09IDAgJiYgY2xpcGJvYXJkRGF0YS5pdGVtcy5sZW5ndGggPiAxICYmIGNsaXBib2FyZERhdGEuaXRlbXNbMV0udHlwZS5tYXRjaCgvXmltYWdlXFwvLykpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nSXNGaWxlbmFtZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGZpbGVUeXBlID0gY2xpcGJvYXJkRGF0YS5pdGVtc1sxXS50eXBlO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaXRlbS5nZXRBc1N0cmluZyhmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmluZ0lzRmlsZW5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICBwYXN0ZWRGaWxlbmFtZSA9IHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMuX3RhcmdldC50cmlnZ2VyKCdwYXN0ZVRleHQnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0ZpbGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZVR5cGU6IGZpbGVUeXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogX3RoaXMub3JpZ2luYWxFdmVudFxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5fdGFyZ2V0LnRyaWdnZXIoJ3Bhc3RlVGV4dCcsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IF90aGlzLm9yaWdpbmFsRXZlbnRcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICd0ZXh0L3J0ZicpIHtcbiAgICAgICAgICAgICAgICAgIGl0ZW0uZ2V0QXNTdHJpbmcoZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5fdGFyZ2V0LnRyaWdnZXIoJ3Bhc3RlVGV4dFJpY2gnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgdGV4dDogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IF90aGlzLm9yaWdpbmFsRXZlbnRcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gJ3RleHQvaHRtbCcpIHtcbiAgICAgICAgICAgICAgICAgIGl0ZW0uZ2V0QXNTdHJpbmcoZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5fdGFyZ2V0LnRyaWdnZXIoJ3Bhc3RlVGV4dEh0bWwnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgdGV4dDogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IF90aGlzLm9yaWdpbmFsRXZlbnRcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmICgtMSAhPT0gQXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChjbGlwYm9hcmREYXRhLnR5cGVzLCAndGV4dC9wbGFpbicpKSB7XG4gICAgICAgICAgICAgICAgdGV4dCA9IGNsaXBib2FyZERhdGEuZ2V0RGF0YSgnVGV4dCcpO1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMuX3RhcmdldC50cmlnZ2VyKCdwYXN0ZVRleHQnLCB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IHRleHQsXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IF90aGlzLm9yaWdpbmFsRXZlbnRcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sIDEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF90aGlzLl9jaGVja0ltYWdlc0luQ29udGFpbmVyKGZ1bmN0aW9uKHNyYykge1xuICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5faGFuZGxlSW1hZ2Uoc3JjLCBfdGhpcy5vcmlnaW5hbEV2ZW50KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjbGlwYm9hcmREYXRhID0gd2luZG93LmNsaXBib2FyZERhdGEpIHtcbiAgICAgICAgICAgIGlmICgocmVmMyA9ICh0ZXh0ID0gY2xpcGJvYXJkRGF0YS5nZXREYXRhKCdUZXh0JykpKSAhPSBudWxsID8gcmVmMy5sZW5ndGggOiB2b2lkIDApIHtcbiAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5fdGFyZ2V0LnRyaWdnZXIoJ3Bhc3RlVGV4dCcsIHtcbiAgICAgICAgICAgICAgICAgIHRleHQ6IHRleHQsXG4gICAgICAgICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBfdGhpcy5vcmlnaW5hbEV2ZW50XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLl90YXJnZXQudHJpZ2dlcignX3Bhc3RlQ2hlY2tDb250YWluZXJEb25lJyk7XG4gICAgICAgICAgICAgIH0sIDEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVmNCA9IGNsaXBib2FyZERhdGEuZmlsZXM7XG4gICAgICAgICAgICAgIGZvciAobCA9IDAsIGxlbjIgPSByZWY0Lmxlbmd0aDsgbCA8IGxlbjI7IGwrKykge1xuICAgICAgICAgICAgICAgIGZpbGUgPSByZWY0W2xdO1xuICAgICAgICAgICAgICAgIF90aGlzLl9oYW5kbGVJbWFnZShVUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGUpLCBfdGhpcy5vcmlnaW5hbEV2ZW50KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBfdGhpcy5fY2hlY2tJbWFnZXNJbkNvbnRhaW5lcihmdW5jdGlvbihzcmMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMuX2hhbmRsZUltYWdlKHNyYywgX3RoaXMub3JpZ2luYWxFdmVudCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfTtcbiAgICAgIH0pKHRoaXMpKTtcbiAgICB9XG5cbiAgICBQYXN0ZS5wcm90b3R5cGUuX2hhbmRsZUltYWdlID0gZnVuY3Rpb24oc3JjLCBlLCBuYW1lKSB7XG4gICAgICB2YXIgbG9hZGVyO1xuICAgICAgaWYgKHNyYy5tYXRjaCgvXndlYmtpdFxcLWZha2VcXC11cmxcXDpcXC9cXC8vKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFyZ2V0LnRyaWdnZXIoJ3Bhc3RlSW1hZ2VFcnJvcicsIHtcbiAgICAgICAgICBtZXNzYWdlOiBcIllvdSBhcmUgdHJ5aW5nIHRvIHBhc3RlIGFuIGltYWdlIGluIFNhZmFyaSwgaG93ZXZlciB3ZSBhcmUgdW5hYmxlIHRvIHJldGlldmUgaXRzIGRhdGEuXCJcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLl90YXJnZXQudHJpZ2dlcigncGFzdGVJbWFnZVN0YXJ0Jyk7XG4gICAgICBsb2FkZXIgPSBuZXcgSW1hZ2UoKTtcbiAgICAgIGxvYWRlci5jcm9zc09yaWdpbiA9IFwiYW5vbnltb3VzXCI7XG4gICAgICBsb2FkZXIub25sb2FkID0gKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgYmxvYiwgY2FudmFzLCBjdHgsIGRhdGFVUkw7XG4gICAgICAgICAgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICAgICAgY2FudmFzLndpZHRoID0gbG9hZGVyLndpZHRoO1xuICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSBsb2FkZXIuaGVpZ2h0O1xuICAgICAgICAgIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICAgIGN0eC5kcmF3SW1hZ2UobG9hZGVyLCAwLCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpO1xuICAgICAgICAgIGRhdGFVUkwgPSBudWxsO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBkYXRhVVJMID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvcG5nJyk7XG4gICAgICAgICAgICBibG9iID0gZGF0YVVSTHRvQmxvYihkYXRhVVJMKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge31cbiAgICAgICAgICBpZiAoZGF0YVVSTCkge1xuICAgICAgICAgICAgX3RoaXMuX3RhcmdldC50cmlnZ2VyKCdwYXN0ZUltYWdlJywge1xuICAgICAgICAgICAgICBibG9iOiBibG9iLFxuICAgICAgICAgICAgICBkYXRhVVJMOiBkYXRhVVJMLFxuICAgICAgICAgICAgICB3aWR0aDogbG9hZGVyLndpZHRoLFxuICAgICAgICAgICAgICBoZWlnaHQ6IGxvYWRlci5oZWlnaHQsXG4gICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGUsXG4gICAgICAgICAgICAgIG5hbWU6IG5hbWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gX3RoaXMuX3RhcmdldC50cmlnZ2VyKCdwYXN0ZUltYWdlRW5kJyk7XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKTtcbiAgICAgIGxvYWRlci5vbmVycm9yID0gKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBfdGhpcy5fdGFyZ2V0LnRyaWdnZXIoJ3Bhc3RlSW1hZ2VFcnJvcicsIHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IFwiRmFpbGVkIHRvIGdldCBpbWFnZSBmcm9tOiBcIiArIHNyYyxcbiAgICAgICAgICAgIHVybDogc3JjXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIF90aGlzLl90YXJnZXQudHJpZ2dlcigncGFzdGVJbWFnZUVuZCcpO1xuICAgICAgICB9O1xuICAgICAgfSkodGhpcyk7XG4gICAgICByZXR1cm4gbG9hZGVyLnNyYyA9IHNyYztcbiAgICB9O1xuXG4gICAgUGFzdGUucHJvdG90eXBlLl9jaGVja0ltYWdlc0luQ29udGFpbmVyID0gZnVuY3Rpb24oY2IpIHtcbiAgICAgIHZhciBpbWcsIGosIGxlbiwgcmVmLCB0aW1lc3BhbjtcbiAgICAgIHRpbWVzcGFuID0gTWF0aC5mbG9vcigxMDAwICogTWF0aC5yYW5kb20oKSk7XG4gICAgICByZWYgPSB0aGlzLl9jb250YWluZXIuZmluZCgnaW1nJyk7XG4gICAgICBmb3IgKGogPSAwLCBsZW4gPSByZWYubGVuZ3RoOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgaW1nID0gcmVmW2pdO1xuICAgICAgICBpbWdbXCJfcGFzdGVfbWFya2VkX1wiICsgdGltZXNwYW5dID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZXRUaW1lb3V0KChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIGssIGxlbjEsIHJlZjE7XG4gICAgICAgICAgcmVmMSA9IF90aGlzLl9jb250YWluZXIuZmluZCgnaW1nJyk7XG4gICAgICAgICAgZm9yIChrID0gMCwgbGVuMSA9IHJlZjEubGVuZ3RoOyBrIDwgbGVuMTsgaysrKSB7XG4gICAgICAgICAgICBpbWcgPSByZWYxW2tdO1xuICAgICAgICAgICAgaWYgKCFpbWdbXCJfcGFzdGVfbWFya2VkX1wiICsgdGltZXNwYW5dKSB7XG4gICAgICAgICAgICAgIGNiKGltZy5zcmMpO1xuICAgICAgICAgICAgICAkKGltZykucmVtb3ZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBfdGhpcy5fdGFyZ2V0LnRyaWdnZXIoJ19wYXN0ZUNoZWNrQ29udGFpbmVyRG9uZScpO1xuICAgICAgICB9O1xuICAgICAgfSkodGhpcyksIDEpO1xuICAgIH07XG5cbiAgICByZXR1cm4gUGFzdGU7XG5cbiAgfSkoKTtcblxufSkuY2FsbCh0aGlzKTtcbiIsInJlcXVpcmUoJ3Bhc3RlLmpzL3Bhc3RlLmpzJyk7XG5yZXF1aXJlKCd0aGUtcGFzdGUtYmFzZS5qcycpO1xucmVxdWlyZSgnbWVkaWEtdmlldy5qcycpO1xucmVxdWlyZSgndGhlLXBhc3RlLmpzJyk7XG4iLCIoZnVuY3Rpb24oJCx3aW5kb3csbyl7XG5cdHZhciB0aGVwYXN0ZSA9IHdwLm1lZGlhLnRoZXBhc3RlLFxuXHRcdEJ1dHRvbiA9IHdwLm1lZGlhLnZpZXcuQnV0dG9uLFxuXHRcdE1vZGFsICA9IHdwLm1lZGlhLnZpZXcuTW9kYWwsXG5cdFx0bDEwbiAgID0gdGhlcGFzdGUubDEwbjtcblxuXG5cdHdwLm1lZGlhLnRoZXBhc3RlLnZpZXcuRGF0YVNvdXJjZUltYWdlVXBsb2FkZXIgPSB3cC5tZWRpYS5WaWV3LmV4dGVuZCh7XG5cdFx0dGVtcGxhdGU6IHdwLnRlbXBsYXRlKCd0aGVwYXN0ZS11cGxvYWRlcicpLFxuXHRcdGNsYXNzTmFtZTogJ3RoZXBhc3RlLXVwbG9hZGVyJyxcblx0XHRjb250cm9sbGVyOm51bGwsXG5cdFx0aW1hZ2UgOiBudWxsLFxuXHRcdCRkaXNjYXJkQnRuIDogbnVsbCxcblx0XHQkdXBsb2FkQnRuIDogbnVsbCxcblxuXHRcdHVwbG9hZGVyIDogbnVsbCxcblxuXHRcdGV2ZW50cyA6IHtcblx0XHRcdCdjbGljayBbZGF0YS1hY3Rpb249XCJ1cGxvYWRcIl0nXHQ6ICd1cGxvYWRJbWFnZScsXG5cdFx0XHQnY2xpY2sgW2RhdGEtYWN0aW9uPVwiZGlzY2FyZFwiXSdcdDogJ2Rpc2NhcmRJbWFnZScsXG5cdFx0fSxcblx0XHRpbml0aWFsaXplIDogZnVuY3Rpb24oKSB7XG5cblx0XHRcdHdwLm1lZGlhLlZpZXcucHJvdG90eXBlLmluaXRpYWxpemUuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXG5cdFx0XHRfLmRlZmF1bHRzKCB0aGlzLm9wdGlvbnMsIHtcblx0XHRcdFx0ZGVmYXVsdEZpbGVOYW1lIDogbDEwbi5pbWFnZVxuXHRcdFx0fSk7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsXG5cdFx0XHRcdGluc3RyID0gbmV3IHdwLm1lZGlhLlZpZXcoe1xuXHRcdFx0XHR0YWdOYW1lICAgIDogJ2RpdicsXG5cdFx0XHRcdGNsYXNzTmFtZSAgOiAnaW5zdHJ1bWVudHMnLFxuXHRcdFx0XHRjb250cm9sbGVyIDogdGhpcy5jb250cm9sbGVyXG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy51cGxvYWRlciA9IHRoaXMub3B0aW9ucy51cGxvZGVyO1xuXHRcdH0sXG5cdFx0c2V0SW1hZ2VEYXRhIDogZnVuY3Rpb24oIGRhdGEgKSB7XG5cdFx0XHR2YXIgY29udGFpbmVyID0gdGhpcy4kaW1hZ2VDb250YWluZXIuaHRtbCgnJykuZ2V0KDApLFxuXHRcdFx0XHRzZWxmID0gdGhpcyxcblx0XHRcdFx0Zm9ybWF0ID0gZGF0YS5tYXRjaCgvZGF0YTooaW1hZ2VcXC8oXFx3KykpOy8pWzFdO1xuXG5cdFx0XHRpZiAoICEgdGhlcGFzdGUub3B0aW9ucy5taW1lX3R5cGVzLmNvbnZlcnRbZm9ybWF0XSApIHtcblx0XHRcdFx0Zm9ybWF0ID0gdGhpcy5vcHRpb25zLmRlZmF1bHRGaWxlRm9ybWF0O1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHRoaXMuaW1hZ2UgKSB7XG5cdFx0XHRcdHRoaXMuaW1hZ2UuZGVzdHJveSgpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLmltYWdlID0gbmV3IG8uSW1hZ2UoKTtcblx0XHRcdHRoaXMuaW1hZ2Uub25sb2FkID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBvcHRzID0gc2VsZi5nZXRVcGxvYWRlcigpLmdldE9wdGlvbigncmVzaXplJyksXG5cdFx0XHRcdFx0c2NhbGUgPSBNYXRoLm1heCggb3B0cy53aWR0aCAvIHRoaXMud2lkdGgsIG9wdHMuaGVpZ2h0IC8gdGhpcy5oZWlnaHQgKTtcblxuXHRcdFx0XHQhIW9wdHMgJiYgKHNjYWxlIDwgMSkgJiYgdGhpcy5kb3duc2l6ZSggdGhpcy53aWR0aCpzY2FsZSwgdGhpcy5oZWlnaHQqc2NhbGUgKTtcblxuXHRcdFx0XHR0aGlzLmVtYmVkKCBjb250YWluZXIgKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5pbWFnZS5sb2FkKCBkYXRhICk7XG5cdFx0XHRpZiAoIHRoaXMuJGltYWdlQ29udGFpbmVyICkge1xuXHRcdFx0XHR0aGlzLiRpbWFnZUNvbnRhaW5lci5hcHBlbmQodGhpcy5pbWFnZSk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLiQoJ1tkYXRhLXNldHRpbmc9XCJmb3JtYXRcIl0gaW5wdXRbdmFsdWU9XCInK2Zvcm1hdCsnXCJdJykucHJvcCggJ2NoZWNrZWQnLCB0cnVlICk7XG5cblxuXHRcdFx0dGhpcy5kaXNhYmxlZChmYWxzZSk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9LFxuXHRcdHJlbmRlciA6IGZ1bmN0aW9uKCkge1xuXHRcdFx0d3AubWVkaWEuVmlldy5wcm90b3R5cGUucmVuZGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtcblx0XHRcdHRoaXMuJGltYWdlQ29udGFpbmVyID0gdGhpcy4kKCcuaW1hZ2UtY29udGFpbmVyJyk7XG5cdFx0XHR0aGlzLiRkaXNjYXJkQnRuID0gdGhpcy4kKCdbZGF0YS1hY3Rpb249XCJkaXNjYXJkXCJdJyk7XG5cdFx0XHR0aGlzLiR1cGxvYWRCdG4gPSB0aGlzLiQoJ1tkYXRhLWFjdGlvbj1cInVwbG9hZFwiXScpO1xuXHRcdFx0dGhpcy4kKCdbZGF0YS1zZXR0aW5nPVwidGl0bGVcIl0nKS52YWwoIHRoZXBhc3RlLmdldEZpbGVuYW1lKCkgKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0ZGlzY2FyZEltYWdlIDogZnVuY3Rpb24oKXtcblx0XHRcdHRoaXMudHJpZ2dlciggJ2FjdGlvbjpkaXNjYXJkOmRhdGFpbWFnZScgLCB0aGlzICk7XG5cdFx0XHR0aGlzLnVuYmluZFVwbG9hZGVyRXZlbnRzKCk7XG5cdFx0fSxcblx0XHR1cGxvYWRJbWFnZSA6IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHR2YXIgdHlwZSA9IHRoaXMuJCgnW2RhdGEtc2V0dGluZz1cImZvcm1hdFwiXSA6Y2hlY2tlZCcpLnZhbCgpLFxuXHRcdFx0XHRzdWZmaXggPSB0aGVwYXN0ZS5vcHRpb25zLm1pbWVfdHlwZXMuY29udmVydFsgdHlwZSBdLFxuXHRcdFx0XHRuYW1lID0gdGhpcy4kKCdpbnB1dFtkYXRhLXNldHRpbmc9XCJ0aXRsZVwiXScpLnZhbCgpICsgJy4nICsgc3VmZml4LFxuXHRcdFx0XHRibG9iID0gdGhpcy5pbWFnZS5nZXRBc0Jsb2IoIHR5cGUsIHRoZXBhc3RlLm9wdGlvbnMuanBlZ19xdWFsaXR5ICk7XG5cblx0XHRcdHRoaXMuYmluZFVwbG9hZGVyRXZlbnRzKCk7XG5cblx0XHRcdGJsb2IuZGV0YWNoKCBibG9iLmdldFNvdXJjZSgpICk7XG5cdFx0XHRibG9iLm5hbWUgPSBuYW1lO1xuXHRcdFx0YmxvYi50eXBlID0gdHlwZTtcblx0XHRcdHRoaXMuZ2V0VXBsb2FkZXIoKS5hZGRGaWxlKCBibG9iICwgbmFtZSApO1xuXG5cdFx0XHR0aGlzLmRpc2FibGVkKCB0cnVlICk7XG5cblx0XHRcdHRoaXMudHJpZ2dlciggJ2FjdGlvbjp1cGxvYWQ6ZGF0YWltYWdlJyAsIHRoaXMgKTtcblx0XHR9LFxuXHRcdHNob3c6ZnVuY3Rpb24oKXtcblx0XHRcdHRoaXMuJGVsLnNob3coKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0aGlkZTpmdW5jdGlvbigpe1xuXHRcdFx0dGhpcy4kZWwuaGlkZSgpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblx0XHRkaXNhYmxlZCA6IGZ1bmN0aW9uKCBkaXNhYmxlZCApIHtcblx0XHRcdHRoaXMuJGRpc2NhcmRCdG4ucHJvcCggJ2Rpc2FibGVkJywgZGlzYWJsZWQgKTtcblx0XHRcdHRoaXMuJHVwbG9hZEJ0bi5wcm9wKCAnZGlzYWJsZWQnLCBkaXNhYmxlZCApO1xuXHRcdH0sXG5cdFx0X3VwbG9hZFN1Y2Nlc3NIYW5kbGVyIDogZnVuY3Rpb24oKSB7XG5cdFx0XHR0aGlzLnRyaWdnZXIoICdhY3Rpb246dXBsb2FkZWQ6ZGF0YWltYWdlJyApO1xuXHRcdFx0dGhpcy5kaXNhYmxlZChmYWxzZSk7XG5cdFx0XHR0aGlzLnVuYmluZFVwbG9hZGVyRXZlbnRzKCk7XG5cdFx0fSxcblx0XHRfdXBsb2FkRXJyb3JIYW5kbGVyIDogZnVuY3Rpb24odXAsZXJyKSB7XG5cdFx0XHR0aGlzLnRyaWdnZXIoICdlcnJvcjp1cGxvYWRlZDpkYXRhaW1hZ2UnLCBlcnIgKTtcblx0XHRcdHRoaXMuZGlzYWJsZWQoZmFsc2UpO1xuXHRcdFx0dGhpcy51bmJpbmRVcGxvYWRlckV2ZW50cygpO1xuXHRcdH0sXG5cdFx0YmluZFVwbG9hZGVyRXZlbnRzIDogZnVuY3Rpb24oKSB7XG5cdFx0XHR0aGlzLmdldFVwbG9hZGVyKCkuYmluZCggJ0ZpbGVVcGxvYWRlZCcsXHR0aGlzLl91cGxvYWRTdWNjZXNzSGFuZGxlcixcdHRoaXMgKTtcblx0XHRcdHRoaXMuZ2V0VXBsb2FkZXIoKS5iaW5kKCAnRXJyb3InLFx0XHRcdHRoaXMuX3VwbG9hZEVycm9ySGFuZGxlcixcdHRoaXMgKTtcblx0XHR9LFxuXHRcdHVuYmluZFVwbG9hZGVyRXZlbnRzIDogZnVuY3Rpb24oKSB7XG5cdFx0XHR0aGlzLmdldFVwbG9hZGVyKCkudW5iaW5kKCAnRmlsZVVwbG9hZGVkJyxcdHRoaXMuX3VwbG9hZFN1Y2Nlc3NIYW5kbGVyLFx0dGhpcyApO1xuXHRcdFx0dGhpcy5nZXRVcGxvYWRlcigpLnVuYmluZCggJ0Vycm9yJyxcdFx0XHR0aGlzLl91cGxvYWRFcnJvckhhbmRsZXIsXHR0aGlzICk7XG5cdFx0fSxcblx0XHRnZXRVcGxvYWRlcjogZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5jb250cm9sbGVyLnVwbG9hZGVyLnVwbG9hZGVyLnVwbG9hZGVyO1xuXHRcdH1cblx0fSk7XG5cblxuXHR3cC5tZWRpYS50aGVwYXN0ZS52aWV3LlBhc3RlYm9hcmQgPSB3cC5tZWRpYS5WaWV3LmV4dGVuZCh7XG5cdFx0dGVtcGxhdGU6IHdwLnRlbXBsYXRlKCd0aGVwYXN0ZS1wYXN0ZWJvYXJkJyksXG5cdFx0Y2xhc3NOYW1lOiAndGhlcGFzdGUtcGFzdGVib2FyZCcsXG5cdFx0Y29udHJvbGxlcjpudWxsLFxuXHRcdGFjdGlvbjoncGFzdGUnLFxuXHRcdCRwYXN0ZWJvYXJkIDogbnVsbCxcblxuXHRcdHJlbmRlcjogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cdFx0XHR3cC5tZWRpYS5WaWV3LnByb3RvdHlwZS5yZW5kZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpO1xuXHRcdFx0Y29uc29sZS5sb2coIHRoaXMuJCggJy5pbmplY3RvcicgKSk7XG5cdFx0XHR0aGlzLiRwYXN0ZWJvYXJkID0gdGhpcy4kKCAnLmluamVjdG9yJyApLnBhc3RhYmxlQ29udGVudGVkaXRhYmxlKCk7XG5cdFx0XHR0aGlzLiRtZXNzYWdlID0gdGhpcy4kKCAnLm1lc3NhZ2UnICk7XG5cdFx0XHR0aGlzLiRwYXN0ZWJvYXJkLm9uKCdjbGljaycsIGZ1bmN0aW9uKCl7XG5cdFx0XHRcdHNlbGYuc2hvd19tZXNzYWdlKCcnKTtcblx0XHRcdH0gKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0c3RhcnQgOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcyxcblx0XHRcdFx0Y2xpcGJvYXJkSGFzSW1hZ2U7XG5cblx0XHRcdHRoaXMuaW1hZ2VQYXN0ZWQgPSBmYWxzZTtcblxuXHRcdFx0dGhpcy4kcGFzdGVib2FyZFxuXHRcdFx0XHQub24oJ3Bhc3RlJyxmdW5jdGlvbihlKXtcblx0XHRcdFx0XHRjbGlwYm9hcmRIYXNJbWFnZSA9IHdwLm1lZGlhLnRoZXBhc3RlLmNsaXBib2FyZEhhc0ltYWdlKGUub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0Lm9uKCdwYXN0ZVRleHQnICwgZnVuY3Rpb24oIGUsIGRhdGEgKSB7XG5cblx0XHRcdFx0XHRpZiAoIGNsaXBib2FyZEhhc0ltYWdlIHx8IHNlbGYuaW1hZ2VQYXN0ZWQgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHNlbGYuc2hvd19tZXNzYWdlKCBsMTBuLnBhc3RlX2Vycm9yX25vX2ltYWdlICk7XG5cdFx0XHRcdFx0JCggdGhpcyApLmh0bWwoJycpO1xuXHRcdFx0XHR9IClcblx0XHRcdFx0Lm9uKCdwYXN0ZUltYWdlJyAsIGZ1bmN0aW9uKCBlLCBkYXRhICkge1xuXHRcdFx0XHRcdGlmICggc2VsZi5pbWFnZVBhc3RlZCApIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0c2VsZi50cmlnZ2VyKCAnYWN0aW9uOmNyZWF0ZTpkYXRhaW1hZ2UnLCB0aGlzICwgZGF0YS5kYXRhVVJMICk7XG5cdFx0XHRcdFx0c2VsZi5pbWFnZVBhc3RlZCA9IHRydWU7XG5cdFx0XHRcdH0gKVxuXHRcdFx0XHQub24oJ3Bhc3RlSW1hZ2VFcnJvcicgLCBmdW5jdGlvbiggZSwgZGF0YSApIHtcblx0XHRcdFx0XHRzZWxmLnNob3dfbWVzc2FnZSggbDEwbi5wYXN0ZV9lcnJvciApO1xuXHRcdFx0XHRcdCQoIHRoaXMgKS5odG1sKCcnKTtcblx0XHRcdFx0fSApXG5cdFx0XHRcdDtcblxuXHRcdFx0c2V0VGltZW91dChmdW5jdGlvbigpe1xuXHRcdFx0XHRzZWxmLiRwYXN0ZWJvYXJkLmdldCgwKS5mb2N1cygpO1xuXHRcdFx0fSwxKTtcblxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblx0XHRzdG9wIDogZnVuY3Rpb24oKSB7XG5cdFx0XHR0aGlzLiRwYXN0ZWJvYXJkXG5cdFx0XHRcdC5vZmYoJ3Bhc3RlSW1hZ2UnKVxuXHRcdFx0XHQub2ZmKCdwYXN0ZUltYWdlRXJyb3InKVxuXHRcdFx0XHQub2ZmKCdwYXN0ZVRleHQnKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0c2hvdzpmdW5jdGlvbigpIHtcblx0XHRcdHRoaXMuJGVsLnNob3coKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0aGlkZTpmdW5jdGlvbigpIHtcblx0XHRcdHRoaXMuJGVsLmhpZGUoKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0c2hvd19tZXNzYWdlOmZ1bmN0aW9uKCBtc2cgKSB7XG5cdFx0XHR0aGlzLiRtZXNzYWdlLnRleHQoIG1zZyApO1xuXHRcdH1cblx0fSk7XG5cblx0d3AubWVkaWEudGhlcGFzdGUudmlldy5EYXRhU291cmNlSW1hZ2VHcmFiYmVyID0gd3AubWVkaWEuVmlldy5leHRlbmQoe1xuLy9cdFx0dGFnTmFtZTogICAnZGl2Jyxcblx0XHR0ZW1wbGF0ZTogd3AudGVtcGxhdGUoJ3RoZXBhc3RlLWdyYWJiZXInKSxcblx0XHRjbGFzc05hbWUgOiAndGhlcGFzdGUtZ3JhYmJlcicsXG5cblx0XHRncmFiYmVyIDogbnVsbCxcblx0XHR1cGxvYWRlciA6IG51bGwsXG5cblx0XHRpbml0aWFsaXplIDogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgcmV0ID0gd3AubWVkaWEuVmlldy5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cblx0XHRcdF8uZGVmYXVsdHMoIHRoaXMub3B0aW9ucywge1xuXHRcdFx0XHR3cHVwbG9hZGVyXHRcdDogbnVsbCxcblx0XHRcdFx0ZGVmYXVsdEZpbGVOYW1lXHQ6IHRoaXMub3B0aW9ucy5kZWZhdWx0X2ZpbGVuYW1lLFxuXHRcdFx0XHRkZWZhdWx0RmlsZUZvcm1hdCA6ICdpbWFnZS9wbmcnLFxuXHRcdFx0XHR0aXRsZVx0XHRcdDogbDEwbi5jb3B5X3Bhc3RlXG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5ncmFiYmVyICA9IG5ldyB0aGlzLm9wdGlvbnMuZ3JhYmJlciggeyBjb250cm9sbGVyXHQ6IHRoaXMuY29udHJvbGxlciB9ICk7XG5cblx0XHRcdHRoaXMudXBsb2FkZXIgPSBuZXcgd3AubWVkaWEudGhlcGFzdGUudmlldy5EYXRhU291cmNlSW1hZ2VVcGxvYWRlcigge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29udHJvbGxlclx0XHRcdDogdGhpcy5jb250cm9sbGVyLFxuXHRcdFx0XHRcdFx0XHRcdFx0dXBsb2Rlclx0XHRcdFx0OiB0aGlzLm9wdGlvbnMud3B1cGxvYWRlcixcblx0XHRcdFx0XHRcdFx0XHRcdGRlZmF1bHRGaWxlTmFtZVx0XHQ6IHRoaXMub3B0aW9ucy5kZWZhdWx0RmlsZU5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRkZWZhdWx0RmlsZUZvcm1hdFx0OiB0aGlzLm9wdGlvbnMuZGVmYXVsdEZpbGVGb3JtYXRcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdHRoaXMucmVuZGVyKCk7XG5cblx0XHRcdHRoaXMubGlzdGVuVG8oIHRoaXMuZ3JhYmJlciwgJ2FjdGlvbjpjcmVhdGU6ZGF0YWltYWdlJyxcdHRoaXMuaW1hZ2VDcmVhdGVkICk7XG5cdFx0XHR0aGlzLmxpc3RlblRvKCB0aGlzLnVwbG9hZGVyLCAnYWN0aW9uOmRpc2NhcmQ6ZGF0YWltYWdlJyxcdHRoaXMuc3RhcnRHcmFiYmluZyApO1xuXG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH0sXG5cdFx0cmVuZGVyOmZ1bmN0aW9uKCl7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0XHRcdHdwLm1lZGlhLlZpZXcucHJvdG90eXBlLnJlbmRlci5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cblx0XHRcdHRoaXMuJCgnLmNvbnRlbnQnKVxuXHRcdFx0XHQuYXBwZW5kKCB0aGlzLmdyYWJiZXIucmVuZGVyKCkuJGVsIClcblx0XHRcdFx0LmFwcGVuZCggdGhpcy51cGxvYWRlci5yZW5kZXIoKS4kZWwgKTtcblxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblx0XHRpbWFnZUNyZWF0ZWQgOiBmdW5jdGlvbiggZ3JhYmJlciAsIGltYWdlRGF0YSApIHtcblx0XHRcdHRoaXMuZ3JhYmJlci5zdG9wKCkuaGlkZSgpO1xuXHRcdFx0dGhpcy51cGxvYWRlci5zaG93KCkuc2V0SW1hZ2VEYXRhKCBpbWFnZURhdGEgKTtcblx0XHR9LFxuXHRcdHN0YXJ0R3JhYmJpbmc6ZnVuY3Rpb24oKSB7XG5cdFx0XHR0aGlzLnVwbG9hZGVyLmhpZGUoKTtcblx0XHRcdHRoaXMuZ3JhYmJlci5zaG93KCkuc3RhcnQoKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0c3RvcEdyYWJiaW5nOmZ1bmN0aW9uKCkge1xuXHRcdFx0dGhpcy5ncmFiYmVyLnN0b3AoKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0Z2V0QWN0aW9uIDogZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5ncmFiYmVyLmFjdGlvbjtcblx0XHR9LFxuXHRcdGRpc21pc3M6ZnVuY3Rpb24oKSB7XG5cdFx0XHR0aGlzLmdyYWJiZXIuc3RvcCgpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHR9KTtcblxufSkoalF1ZXJ5LHdpbmRvdyxtT3hpZSk7XG4iLCIoZnVuY3Rpb24oICQsIGV4cG9ydHMsIG8gKSB7XG5cblx0dmFyIGlzX2Nocm9tZVx0PSBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ0Nocm9tZScpID4gLTEsXG5cdFx0Y291bnRlciA9IDAsXG5cdFx0d29ya2Zsb3c7XG5cblx0ZnVuY3Rpb24gemVyb2ZpbGwobikge1xuXHRcdHJldHVybiAoJzAwJyArIG4udG9TdHJpbmcoKSkuc3Vic3RyKC0yKVxuXHR9XG5cblx0dGhlcGFzdGUgPSBleHBvcnRzLnRoZXBhc3RlID0gJC5leHRlbmQoIHtcblx0XHRzdXBwb3J0cyA6IHtcblx0XHRcdHBhc3RlOiAoICgncGFzdGUnIGluIGRvY3VtZW50KSB8fCAoJ29ucGFzdGUnIGluIGRvY3VtZW50KSB8fCB0eXBlb2Yod2luZG93Lm9ucGFzdGUpID09PSAnb2JqZWN0JyB8fCAoICdvbnBhc3RlJyBpbiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdESVYnKSApICksIC8vIGJyb3dzZXJcblx0XHR9LFxuXHRcdHZpZXc6e30sXG5cblx0XHR1cGxvYWRJbWFnZTogZnVuY3Rpb24oIGltYWdlLCBlZGl0b3IsIHVwbG9hZF9wbGFjZWhvbGRlciApIHtcblxuXHRcdFx0dmFyIGlkID0gJ19fdGhlcGFzdGVfYm94XycrKGNvdW50ZXIrKyksXG5cdFx0XHRcdCRjb250YWluZXIgPSAkKGltYWdlKVxuXHRcdFx0XHRcdC53cmFwKCc8ZGl2IGlkPVwiJytpZCsnXCIgZGF0YS1wcm9ncmVzcz1cIjBcIiBjbGFzcz1cInRoZXBhc3RlLWltYWdlLXBsYWNlaG9sZGVyXCIgY29udGVudGVkaXRhYmxlPVwiZmFsc2VcIj48L2Rpdj4nKVxuXHRcdFx0XHRcdC5wYXJlbnQoKTtcblxuXHRcdFx0XHQvLyBzZXQgJGNvbnRhaW5lciBzaXplIG9uY2Uga25vd25cblx0XHRcdFx0aW1hZ2Uub25sb2FkID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0JCggZWRpdG9yLiQoJyMnK2lkKSApLndpZHRoKCB0aGlzLm5hdHVyYWxXaWR0aCApO1xuXHRcdFx0XHRcdCQoIGVkaXRvci4kKCcjJytpZCkgKS5oZWlnaHQoIHRoaXMubmF0dXJhbEhlaWdodCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdHZhciB4aHIsXG5cdFx0XHRcdHdvcmtmbG93LFxuXHRcdFx0XHRzcmMgPSBpbWFnZS5zcmMsXG5cdFx0XHRcdHN1YiA9IHNyYy5zdWJzdHIoMCw1KSxcblx0XHRcdFx0dXBsb2FkID0gZnVuY3Rpb24oIGRhdGFVUkwgKXtcblx0XHRcdFx0XHR2YXIgdHlwZSA9IGRhdGFVUkwubWF0Y2goL15kYXRhXFw6KFteXFw7XSspXFw7LylbMV0sXG5cdFx0XHRcdFx0XHRmaWxlID0gbmV3IG8uQmxvYiggbnVsbCwgeyBkYXRhOiBkYXRhVVJMIH0gKSxcblx0XHRcdFx0XHRcdHN1ZmZpeCA9IHRoZXBhc3RlLm9wdGlvbnMubWltZV90eXBlcy5jb252ZXJ0WyB0eXBlIF07XG5cdFx0XHRcdFx0aWYgKCAndW5kZWZpbmVkJyA9PT0gdHlwZW9mIHN1ZmZpeCApIHtcblx0XHRcdFx0XHRcdGNvbnNvbGUudHJhY2UoICdXb25cXCd0IHVwbG9hZCwgYmFkIG1pbWUgdHlwZTogJyArIHR5cGUgKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRmaWxlLm5hbWUgPSB0aGVwYXN0ZS5nZXRGaWxlbmFtZShzdWZmaXgpXG5cdFx0XHRcdFx0ZmlsZS50eXBlID0gdHlwZTtcblxuXHRcdFx0XHRcdHZhciBhZGRGaWxlID0gZnVuY3Rpb24oKXtcblx0XHRcdFx0XHRcdHdvcmtmbG93LnVwbG9hZGVyLnVwbG9hZGVyLnVwbG9hZGVyLmFkZEZpbGUoIGZpbGUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCAhIHdvcmtmbG93ICkge1xuXHRcdFx0XHRcdFx0d29ya2Zsb3cgPSB3cC5tZWRpYS5lZGl0b3Iub3Blbiggd2luZG93LndwQWN0aXZlRWRpdG9yLCB7XG5cdFx0XHRcdFx0XHRcdGZyYW1lOlx0XHQncG9zdCcsXG5cdFx0XHRcdFx0XHRcdHN0YXRlOlx0XHQnaW5zZXJ0Jyxcblx0XHRcdFx0XHRcdFx0dGl0bGU6XHRcdHRoZXBhc3RlLmwxMG4uY29weV9wYXN0ZSxcblx0XHRcdFx0XHRcdFx0bXVsdGlwbGU6XHRmYWxzZVxuXHRcdFx0XHRcdFx0fSApO1xuXG5cdFx0XHRcdFx0XHR3b3JrZmxvdy5jbG9zZSgpO1xuXG5cdFx0XHRcdFx0XHRpZiAoIHdvcmtmbG93LnVwbG9hZGVyLnVwbG9hZGVyICYmIHdvcmtmbG93LnVwbG9hZGVyLnVwbG9hZGVyLnJlYWR5ICkge1xuXHRcdFx0XHRcdFx0XHRhZGRGaWxlKCk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR3b3JrZmxvdy5vbiggJ3VwbG9hZGVyOnJlYWR5JywgYWRkRmlsZSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR3b3JrZmxvdy5zdGF0ZSgpLnJlc2V0KCk7XG5cdFx0XHRcdFx0XHRhZGRGaWxlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHdvcmtmbG93LnVwbG9hZGVyLnVwbG9hZGVyLnVwbG9hZGVyLmJpbmQoJ1VwbG9hZFByb2dyZXNzJyxmdW5jdGlvbiggZSApe1xuXHRcdFx0XHRcdFx0ZWRpdG9yLiQoJyMnK2lkKS5hdHRyKCdkYXRhLXByb2dyZXNzJyxlLnRvdGFsLnBlcmNlbnQpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdHdvcmtmbG93LnVwbG9hZGVyLnVwbG9hZGVyLnVwbG9hZGVyLmJpbmQoJ0ZpbGVVcGxvYWRlZCcsZnVuY3Rpb24oIHVwLCBhcmdzICl7XG5cblx0XHRcdFx0XHRcdHZhciAkY29udGFpbmVyID0gZWRpdG9yLiQoJyMnK2lkKSxcblx0XHRcdFx0XHRcdFx0aW1nSFRNTCA9ICc8aW1nIGNsYXNzPVwiYWxpZ25ub25lIHdwLWltYWdlLScrYXJncy5hdHRhY2htZW50LmlkKycgc2l6ZS1mdWxsXCIgc3JjPVwiJythcmdzLmF0dGFjaG1lbnQuY2hhbmdlZC51cmwrJ1wiIC8+JztcblxuXHRcdFx0XHRcdFx0Ly8gcmVwbGFjZSBpbWFnZVxuXHRcdFx0XHRcdFx0JGNvbnRhaW5lci5yZXBsYWNlV2l0aCggaW1nSFRNTCApO1xuXG5cdFx0XHRcdFx0XHQvLyByZXBsYWNlIG90aGVyIGluc3RhbmNlc1xuXHRcdFx0XHRcdFx0ZWRpdG9yLiQoJ2ltZ1tzcmM9XCInK3NyYysnXCJdJykuZWFjaChmdW5jdGlvbigpe1xuXHRcdFx0XHRcdFx0XHQkKHRoaXMpLnJlcGxhY2VXaXRoKCBpbWdIVE1MICk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR3b3JrZmxvdy51cGxvYWRlci51cGxvYWRlci51cGxvYWRlci5iaW5kKCdFcnJvcicsZnVuY3Rpb24oIHVwLCBhcmdzICl7XG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyh1cCxhcmdzKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fTtcblxuXHRcdFx0aWYgKCBzdWIgPT09ICdibG9iOicgKSB7XG5cblx0XHRcdFx0eGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cdFx0XHRcdHhoci5yZXNwb25zZVR5cGUgPSAnYmxvYic7XG5cdFx0XHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpe1xuXHRcdFx0XHRcdHZhciByZWFkZXI7XG5cdFx0XHRcdFx0aWYgKCB4aHIucmVhZHlTdGF0ZSA9PSA0ICkge1xuXHRcdFx0XHRcdFx0cmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcblx0XHRcdFx0XHRcdHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0dXBsb2FkKCByZWFkZXIucmVzdWx0ICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZWFkZXIucmVhZEFzRGF0YVVSTCggbmV3IEJsb2IoIFsgeGhyLnJlc3BvbnNlIF0sIHsgdHlwZTogJ2ltYWdlL3BuZycgfSApICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHhoci5vcGVuKCAnR0VUJywgc3JjICk7XG5cdFx0XHRcdHhoci5zZW5kKCBudWxsICk7XG5cblx0XHRcdH0gZWxzZSBpZiAoIHN1YiA9PT0gJ2RhdGE6JyApIHtcblx0XHRcdFx0dXBsb2FkKCBzcmMgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiAkY29udGFpbmVyO1xuXHRcdH0sXG5cblx0XHRnZXRGaWxlbmFtZTogZnVuY3Rpb24oIHN1ZmZpeCApIHtcblx0XHRcdHZhciBuYW1lID0gdGhlcGFzdGUub3B0aW9ucy5kZWZhdWx0X2ZpbGVuYW1lLFxuXHRcdFx0XHRub3cgPSBuZXcgRGF0ZSgpLFxuXHRcdFx0XHRwLFxuXHRcdFx0XHRwb3N0bmFtZSA9ICQoJyNwb3N0IFtuYW1lPVwicG9zdF90aXRsZVwiXSN0aXRsZScpLnZhbCgpLFxuXHRcdFx0XHR1c2VybmFtZSA9ICQoJy5kaXNwbGF5LW5hbWU6Zmlyc3QnKS50ZXh0KCksXG5cdFx0XHRcdG1hcCA9IFtcblx0XHRcdFx0XHR7IHM6ICclWScsIHI6IG5vdy5nZXRGdWxsWWVhcigpIH0sXG5cdFx0XHRcdFx0eyBzOiAnJXknLCByOiBub3cuZ2V0RnVsbFllYXIoKSAlIDEwMCB9LFxuXHRcdFx0XHRcdHsgczogJyVtJywgcjogemVyb2ZpbGwobm93LmdldE1vbnRoKCkgKyAxKSB9LFxuXHRcdFx0XHRcdHsgczogJyVkJywgcjogemVyb2ZpbGwobm93LmdldERhdGUoKSkgfSxcblx0XHRcdFx0XHR7IHM6ICclZScsIHI6IG5vdy5nZXREYXRlKCkgfSxcblx0XHRcdFx0XHR7IHM6ICclSCcsIHI6IHplcm9maWxsKG5vdy5nZXRIb3VycygpKSB9LFxuXHRcdFx0XHRcdHsgczogJyVJJywgcjogemVyb2ZpbGwobm93LmdldEhvdXJzKCkgJSAxMiApIH0sXG5cdFx0XHRcdFx0eyBzOiAnJU0nLCByOiB6ZXJvZmlsbChub3cuZ2V0TWludXRlcygpKSB9LFxuXHRcdFx0XHRcdHsgczogJyVTJywgcjogemVyb2ZpbGwobm93LmdldFNlY29uZHMoKSkgfSxcblx0XHRcdFx0XHR7IHM6ICclcycsIHI6IE1hdGguZmxvb3IoIG5vdy5nZXRUaW1lKCkgLyAxMDAwICkgfVxuXHRcdFx0XHRdO1xuXHRcdFx0aWYgKCAndW5kZWZpbmVkJyAhPT0gdHlwZW9mIHBvc3RuYW1lICkge1xuXHRcdFx0XHRtYXAucHVzaCggeyBzOiAnPHBvc3RuYW1lPicsIHI6IHBvc3RuYW1lIH0gKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1hcC5wdXNoKCB7IHM6ICc8cG9zdG5hbWU+JywgcjogJycgfSApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCAndW5kZWZpbmVkJyAhPT0gdHlwZW9mIHVzZXJuYW1lICkge1xuXHRcdFx0XHRtYXAucHVzaCggeyBzOiAnPHVzZXJuYW1lPicsIHI6IHVzZXJuYW1lIH0gKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1hcC5wdXNoKCB7IHM6ICc8dXNlcm5hbWU+JywgcjogJycgfSApO1xuXHRcdFx0fVxuXHRcdFx0bWFwLmZvckVhY2goZnVuY3Rpb24oZWwpe1xuXHRcdFx0XHRuYW1lID0gbmFtZS5yZXBsYWNlKCBlbC5zLCBlbC5yIClcblx0XHRcdH0pXG5cdFx0XHRpZiAoICdzdHJpbmcnID09PSB0eXBlb2Ygc3VmZml4KSB7XG5cdFx0XHRcdG5hbWUgKz0gJy4nICsgc3VmZml4O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG5hbWU7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqXHRAcmV0dXJuOiBudWxsfHRydWV8ZmFsc2Vcblx0XHQgKi9cblx0XHRjbGlwYm9hcmRIYXNJbWFnZTpmdW5jdGlvbiggY2xpcGJvYXJkRGF0YSApIHtcblx0XHRcdHZhciBoYXNJbWFnZSA9IGZhbHNlO1xuXHRcdFx0aWYgKCBjbGlwYm9hcmREYXRhLml0ZW1zICkge1xuXHRcdFx0XHQkLmVhY2goIGNsaXBib2FyZERhdGEuaXRlbXMsIGZ1bmN0aW9uKGksaXRlbSl7XG5cdFx0XHRcdFx0aWYgKCBpdGVtLnR5cGUgaW4gdGhlcGFzdGUub3B0aW9ucy5taW1lX3R5cGVzLnBhc3RlICkge1xuXHRcdFx0XHRcdFx0aGFzSW1hZ2UgPSB0cnVlO1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApO1xuXHRcdFx0XHRyZXR1cm4gaGFzSW1hZ2U7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggY2xpcGJvYXJkRGF0YS50eXBlcyApIHtcblx0XHRcdFx0JC5lYWNoKCB0aGVwYXN0ZS5vcHRpb25zLm1pbWVfdHlwZXMucGFzdGUsIGZ1bmN0aW9uKHR5cGUsZXh0KXtcblx0XHRcdFx0XHRpZiAoIGNsaXBib2FyZERhdGEudHlwZXMuaW5kZXhPZih0eXBlKSA+IC0xICkge1xuXHRcdFx0XHRcdFx0aGFzSW1hZ2UgPSB0cnVlO1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApO1xuXHRcdFx0XHRyZXR1cm4gaGFzSW1hZ2U7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblxuXHR9LCB0aGVwYXN0ZSApO1xuXG59KSggalF1ZXJ5LCB3cC5tZWRpYSwgbU94aWUgKTtcbiIsIihmdW5jdGlvbigkLGV4cG9ydHMpe1xuXG5cdHZhciBjb3VudGVyICAgICAgPSAwLFxuXHRcdGwxMG4gPSB3cC5tZWRpYS50aGVwYXN0ZS5sMTBuO1xuXG5cdCQuZXh0ZW5kKCB3cC5VcGxvYWRlci5wcm90b3R5cGUsIHtcblx0XHRzdWNjZXNzIDogZnVuY3Rpb24oIGZpbGVfYXR0YWNobWVudCApe1xuXHRcdH1cblx0fSk7XG5cblxuXHQvKipcblx0ICpcdEludGVncmF0ZSBpbnRvIG1lZGlhIGxpYnJhcnkgbW9kYWxcblx0ICovXG5cdC8vIGFkZCBzdGF0ZXMgdG8gYnJvd3NlIHJvdXRlclxuXHRfLmV4dGVuZCggd3AubWVkaWEudmlldy5NZWRpYUZyYW1lLlNlbGVjdC5wcm90b3R5cGUsIHtcblx0XHRfcGFyZW50SW5pdGlhbGl6ZTogd3AubWVkaWEudmlldy5NZWRpYUZyYW1lLlNlbGVjdC5wcm90b3R5cGUuaW5pdGlhbGl6ZSxcblx0XHRpbml0aWFsaXplOiBmdW5jdGlvbigpIHtcblx0XHRcdHRoaXMuX3BhcmVudEluaXRpYWxpemUuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0dGhpcy5iaW5kUGFzdGVIYW5kbGVycygpO1xuXHRcdH0sXG5cdFx0X3BhcmVudEJyb3dzZVJvdXRlcjogd3AubWVkaWEudmlldy5NZWRpYUZyYW1lLlNlbGVjdC5wcm90b3R5cGUuYnJvd3NlUm91dGVyLFxuXHRcdGJyb3dzZVJvdXRlciA6IGZ1bmN0aW9uKCB2aWV3ICkge1xuXHRcdFx0dGhpcy5fcGFyZW50QnJvd3NlUm91dGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtcblxuXHRcdFx0aWYgKCB3cC5tZWRpYS50aGVwYXN0ZS5zdXBwb3J0cy5wYXN0ZSApIHtcblx0XHRcdFx0dmlldy5zZXQoe3Bhc3RlYm9hcmQ6e1xuXHRcdFx0XHRcdHRleHQ6ICAgICBsMTBuLmNvcHlfcGFzdGUsXG5cdFx0XHRcdFx0cHJpb3JpdHk6IDM1XG5cdFx0XHRcdH19KTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0YmluZFBhc3RlSGFuZGxlcnM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHByZXZpb3VzQ29udGVudCA9IGZhbHNlLCBmcmFtZTtcblxuXHRcdFx0Ly8gZGlzbWlzcyBjb250ZW50IG9uIGNsb3NlXG5cdFx0XHR0aGlzLm9uKCAnY29udGVudDpyZW5kZXIgY2xvc2UnICwgZnVuY3Rpb24oY29udGVudCl7XG5cdFx0XHRcdGlmICggcHJldmlvdXNDb250ZW50ICYmICdmdW5jdGlvbicgPT09IHR5cGVvZiBwcmV2aW91c0NvbnRlbnQuZGlzbWlzcyApIHtcblx0XHRcdFx0XHRwcmV2aW91c0NvbnRlbnQuZGlzbWlzcygpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiBjb250ZW50IClcblx0XHRcdFx0XHRwcmV2aW91c0NvbnRlbnQgPSBjb250ZW50O1xuXHRcdFx0fSAsIHRoaXMgKTtcblxuXHRcdFx0dGhpcy5vbiggJ2NvbnRlbnQ6Y3JlYXRlOnBhc3RlYm9hcmQnLCB0aGlzLmNvbnRlbnRDcmVhdGVQYXN0ZWJvYXJkLCB0aGlzICk7XG5cdFx0XHR0aGlzLm9uKCAnY29udGVudDpyZW5kZXI6cGFzdGVib2FyZCcsIHRoaXMuY29udGVudFJlbmRlckdyYWJiZXIsIHRoaXMgKTtcblx0XHRcdHRoaXMub24oICdjb250ZW50OmNyZWF0ZTpkYXRhaW1hZ2UnLCB0aGlzLmNvbnRlbnRSZW5kZXJHcmFiYmVyLCB0aGlzICk7XG5cblx0XHRcdGZyYW1lID0gdGhpcztcblx0XHR9LFxuXHRcdC8vIGFkZCBoYW5kbGVyc1xuXHRcdGNvbnRlbnRDcmVhdGVQYXN0ZWJvYXJkOiBmdW5jdGlvbiggY29udGVudCApIHtcblx0XHRcdHZhciBzdGF0ZSA9IHRoaXMuc3RhdGUoKTtcblxuXHRcdFx0dGhpcy5jdXJyZW50UGFzdGVWaWV3ID0gY29udGVudC52aWV3ID0gbmV3IHdwLm1lZGlhLnRoZXBhc3RlLnZpZXcuRGF0YVNvdXJjZUltYWdlR3JhYmJlcigge1xuXHRcdFx0XHRjb250cm9sbGVyXHQ6IHRoaXMsXG5cdFx0XHRcdGdyYWJiZXJcdFx0OiB3cC5tZWRpYS50aGVwYXN0ZS52aWV3LlBhc3RlYm9hcmRcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5saXN0ZW5UbyggdGhpcy5jdXJyZW50UGFzdGVWaWV3LnVwbG9hZGVyLCAnYWN0aW9uOnVwbG9hZGVkOmRhdGFpbWFnZScsIHRoaXMudXBsb2FkZWREYXRhSW1hZ2UgKTtcblx0XHR9LFxuXHRcdGNvbnRlbnRSZW5kZXJHcmFiYmVyOiBmdW5jdGlvbiggY29udGVudCApIHtcblx0XHRcdGNvbnRlbnQuc3RhcnRHcmFiYmluZygpO1xuXHRcdH0sXG5cdFx0dXBsb2FkZWREYXRhSW1hZ2U6IGZ1bmN0aW9uKCBjb250ZW50ICkge1xuXHRcdFx0dGhpcy5zdG9wTGlzdGVuaW5nKCB0aGlzLmN1cnJlbnRQYXN0ZVZpZXcudXBsb2FkZXIsICdhY3Rpb246dXBsb2FkZWQ6ZGF0YWltYWdlJyApO1xuXHRcdFx0dmFyIG9iaiA9IHsgdmlldzogbnVsbCB9O1xuXHRcdFx0dGhpcy5icm93c2VDb250ZW50KG9iaik7XG5cdFx0XHR0aGlzLmNvbnRlbnQuc2V0KCBvYmoudmlldyApO1xuXHRcdFx0dGhpcy5yb3V0ZXIuZ2V0KCkuc2VsZWN0KCdicm93c2UnKVxuXHRcdH0sXG5cdFx0aW1hZ2VQYXN0ZWQ6ZnVuY3Rpb24oKXtcblx0XHRcdC8vIGVuYWJsZSBpbnNlcnQgYnRuXG5cdFx0XHQvLyBjbGVhciBzZWxlY3Rpb25cblx0XHRcdGNvbnNvbGUubG9nKHRoaXMpXG5cblx0XHR9XG5cdH0pO1xuXG5cblxuXHQvKipcblx0ICpcdEFkZCBwYXN0ZSBidXR0b24gdG8gdG9vbGJhciBvbiB1cGxvYWQucGhwXG5cdCAqL1xuXHRfLmV4dGVuZCggd3AubWVkaWEudmlldy5BdHRhY2htZW50c0Jyb3dzZXIucHJvdG90eXBlLCB7XG5cdFx0X3BhcmVudEluaXRpYWxpemU6XHR3cC5tZWRpYS52aWV3LkF0dGFjaG1lbnRzQnJvd3Nlci5wcm90b3R5cGUuaW5pdGlhbGl6ZSxcblx0XHRpbml0aWFsaXplOlx0ZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsXG5cdFx0XHRcdHBhc3RlQnRuO1xuXG5cdFx0XHR0aGlzLl9wYXJlbnRJbml0aWFsaXplLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtcblxuXHRcdFx0dGhpcy50aGVwYXN0ZSA9IHtcblx0XHRcdFx0cGFzdGVcdDoge1xuLy9cdFx0XHRcdFx0YnV0dG9uXHQ6IGZhbHNlLFxuXHRcdFx0XHRcdGdyYWJiZXJcdDogZmFsc2UsXG5cdFx0XHRcdFx0bW9kYWxcdDogZmFsc2UsXG5cdFx0XHRcdFx0bW9kZVx0OiAncGFzdGUnLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjdXJyZW50XHRcdDogZmFsc2Vcblx0XHRcdH1cblxuXHRcdFx0aWYgKCAhICggdGhpcy5jb250cm9sbGVyIGluc3RhbmNlb2Ygd3AubWVkaWEudmlldy5NZWRpYUZyYW1lLlNlbGVjdCApICkge1xuXG5cdFx0XHRcdGlmICggd3AubWVkaWEudGhlcGFzdGUuc3VwcG9ydHMucGFzdGUgKSB7XG5cblx0XHRcdFx0XHRwYXN0ZUJ0biA9IG5ldyB3cC5tZWRpYS52aWV3LkJ1dHRvbigge1xuXHRcdFx0XHRcdFx0dGV4dFx0XHQ6IGwxMG4uY29weV9wYXN0ZSxcblx0XHRcdFx0XHRcdGNsYXNzTmFtZTogICdncmFiYmVyLWJ1dHRvbicsXG5cdFx0XHRcdFx0XHRwcmlvcml0eVx0OiAtNjQsXG5cdFx0XHRcdFx0XHRjbGljazogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdHNlbGYudGhlcGFzdGUuYWN0aXZlID0gc2VsZi50aGVwYXN0ZS5wYXN0ZTtcblx0XHRcdFx0XHRcdFx0c2VsZi50aGVwYXN0ZU9wZW4oIGwxMG4uY29weV9wYXN0ZSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHR0aGlzLnRoZXBhc3RlLnBhc3RlLmdyYWJiZXIgPSBuZXcgd3AubWVkaWEudGhlcGFzdGUudmlldy5EYXRhU291cmNlSW1hZ2VHcmFiYmVyKCB7XG5cdFx0XHRcdFx0XHRjb250cm9sbGVyXHQ6IHRoaXMuY29udHJvbGxlcixcblx0XHRcdFx0XHRcdGdyYWJiZXJcdFx0OiB3cC5tZWRpYS50aGVwYXN0ZS52aWV3LlBhc3RlYm9hcmQsXG5cdFx0XHRcdFx0XHR3cHVwbG9hZGVyXHQ6IHRoaXMuY29udHJvbGxlci51cGxvYWRlci51cGxvYWRlci51cGxvYWRlclxuXHRcdFx0XHRcdH0gKTtcblxuXHRcdFx0XHRcdHRoaXMudG9vbGJhci5zZXQoICdwYXN0ZU1vZGVCdXR0b24nLCBwYXN0ZUJ0bi5yZW5kZXIoKSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHR0aGVwYXN0ZU9wZW46IGZ1bmN0aW9uKCB0aXRsZSApIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcztcblxuXHRcdFx0dGhpcy50aGVwYXN0ZS5tb2RhbCAgPSAgbmV3IHdwLm1lZGlhLnZpZXcuTW9kYWwoIHtcblx0XHRcdFx0Y29udHJvbGxlciA6IHRoaXMsXG5cdFx0XHRcdHRpdGxlICAgICAgOiB0aXRsZVxuXHRcdFx0fSApO1xuXHRcdFx0dGhpcy50aGVwYXN0ZS5tb2RhbC5jb250ZW50KCB0aGlzLnRoZXBhc3RlLmFjdGl2ZS5ncmFiYmVyICk7XG5cdFx0XHR0aGlzLnRoZXBhc3RlLm1vZGFsLm9wZW4oKTtcblxuXHRcdFx0dGhpcy50aGVwYXN0ZS5tb2RhbC5vbiggJ2Nsb3NlJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHNlbGYudGhlcGFzdGVDbG9zZSgpO1xuXHRcdFx0XHRzZWxmLnRoZXBhc3RlLmFjdGl2ZS5ncmFiYmVyLnN0b3BHcmFiYmluZygpO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMudGhlcGFzdGUuYWN0aXZlLmdyYWJiZXIuc3RhcnRHcmFiYmluZygpO1xuXG5cdFx0XHR0aGlzLmxpc3RlblRvKCB0aGlzLnRoZXBhc3RlLmFjdGl2ZS5ncmFiYmVyLnVwbG9hZGVyLCAnYWN0aW9uOnVwbG9hZDpkYXRhaW1hZ2UnLCB0aGlzLnRoZXBhc3RlQ2xvc2UgKTtcblx0XHR9LFxuXHRcdHRoZXBhc3RlQ2xvc2U6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dGhpcy50aGVwYXN0ZS5tb2RhbC5jbG9zZSgpO1xuXG5cdFx0XHR0aGlzLnN0b3BMaXN0ZW5pbmcoIHRoaXMudGhlcGFzdGUuYWN0aXZlLmdyYWJiZXIudXBsb2FkZXIsICdhY3Rpb246dXBsb2FkOmRhdGFpbWFnZScgKTtcblx0XHR9XG5cdH0pO1xuXG59KShqUXVlcnksd2luZG93KTtcbiJdfQ==