(()=>{"use strict";const e=function(e){return"string"!=typeof e||""===e?(console.error("The namespace must be a non-empty string."),!1):!!/^[a-zA-Z][a-zA-Z0-9_.\-\/]*$/.test(e)||(console.error("The namespace can only contain numbers, letters, dashes, periods, underscores and slashes."),!1)},t=function(e){return"string"!=typeof e||""===e?(console.error("The hook name must be a non-empty string."),!1):/^__/.test(e)?(console.error("The hook name cannot begin with `__`."),!1):!!/^[a-zA-Z][a-zA-Z0-9_.-]*$/.test(e)||(console.error("The hook name can only contain numbers, letters, dashes, periods and underscores."),!1)},o=function(o,n){return function(i,s,r){let c=arguments.length>3&&void 0!==arguments[3]?arguments[3]:10;const a=o[n];if(!t(i))return;if(!e(s))return;if("function"!=typeof r)return void console.error("The hook callback must be a function.");if("number"!=typeof c)return void console.error("If specified, the hook priority must be a number.");const l={callback:r,priority:c,namespace:s};if(a[i]){const e=a[i].handlers;let t;for(t=e.length;t>0&&!(c>=e[t-1].priority);t--);t===e.length?e[t]=l:e.splice(t,0,l),a.__current.forEach((e=>{e.name===i&&e.currentIndex>=t&&e.currentIndex++}))}else a[i]={handlers:[l],runs:0};"hookAdded"!==i&&o.doAction("hookAdded",i,s,r,c)}},n=function(o,n){let i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return function(s,r){const c=o[n];if(!t(s))return;if(!i&&!e(r))return;if(!c[s])return 0;let a=0;if(i)a=c[s].handlers.length,c[s]={runs:c[s].runs,handlers:[]};else{const e=c[s].handlers;for(let t=e.length-1;t>=0;t--)e[t].namespace===r&&(e.splice(t,1),a++,c.__current.forEach((e=>{e.name===s&&e.currentIndex>=t&&e.currentIndex--})))}return"hookRemoved"!==s&&o.doAction("hookRemoved",s,r),a}},i=function(e,t){return function(o,n){const i=e[t];return void 0!==n?o in i&&i[o].handlers.some((e=>e.namespace===n)):o in i}},s=function(e,t){let o=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return function(n){const i=e[t];i[n]||(i[n]={handlers:[],runs:0}),i[n].runs++;const s=i[n].handlers;for(var r=arguments.length,c=new Array(r>1?r-1:0),a=1;a<r;a++)c[a-1]=arguments[a];if(!s||!s.length)return o?c[0]:void 0;const l={name:n,currentIndex:0};for(i.__current.push(l);l.currentIndex<s.length;){const e=s[l.currentIndex].callback.apply(null,c);o&&(c[0]=e),l.currentIndex++}return i.__current.pop(),o?c[0]:void 0}},r=function(e,t){return function(){var o,n;const i=e[t];return null!==(o=null===(n=i.__current[i.__current.length-1])||void 0===n?void 0:n.name)&&void 0!==o?o:null}},c=function(e,t){return function(o){const n=e[t];return void 0===o?void 0!==n.__current[0]:!!n.__current[0]&&o===n.__current[0].name}},a=function(e,o){return function(n){const i=e[o];if(t(n))return i[n]&&i[n].runs?i[n].runs:0}};class l{constructor(){this.actions=Object.create(null),this.actions.__current=[],this.filters=Object.create(null),this.filters.__current=[],this.addAction=o(this,"actions"),this.addFilter=o(this,"filters"),this.removeAction=n(this,"actions"),this.removeFilter=n(this,"filters"),this.hasAction=i(this,"actions"),this.hasFilter=i(this,"filters"),this.removeAllActions=n(this,"actions",!0),this.removeAllFilters=n(this,"filters",!0),this.doAction=s(this,"actions"),this.applyFilters=s(this,"filters",!0),this.currentAction=r(this,"actions"),this.currentFilter=r(this,"filters"),this.doingAction=c(this,"actions"),this.doingFilter=c(this,"filters"),this.didAction=a(this,"actions"),this.didFilter=a(this,"filters")}}const u=new l,{addAction:d,addFilter:h,removeAction:f,removeFilter:m,hasAction:p,hasFilter:g,removeAllActions:b,removeAllFilters:_,doAction:y,applyFilters:v,currentAction:F,currentFilter:w,doingAction:S,doingFilter:A,didAction:P,didFilter:k,actions:z,filters:D}=u;function x(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,n)}return o}function C(e){for(var t=1;t<arguments.length;t++){var o=null!=arguments[t]?arguments[t]:{};t%2?x(Object(o),!0).forEach((function(t){E(e,t,o[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):x(Object(o)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(o,t))}))}return e}function E(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}SB_Customizer.initPromise=new Promise((function(e){SB_Customizer.extraData=C(C({},SB_Customizer.extraData),{},{allFeedsScreen:sbc_builder.allFeedsScreen,feedsList:sbc_builder.feeds,legacyFeedsList:sbc_builder.legacyFeeds,tooltipContent:sbc_builder.feedtypesTooltipContent,feedSettingsDomOptions:null,selectedFeedModel:{channel:sbc_builder.prefilledChannelId,playlist:"",favorites:sbc_builder.prefilledChannelId,search:"",live:sbc_builder.prefilledChannelId,single:"",apiKey:"",accessToken:""},youtubeAccountConnectURL:sbc_builder.youtubeAccountConnectURL,connectSiteParameters:sbc_builder.youtubeAccountConnectParameters,prefilledChannelId:sbc_builder.prefilledChannelId,dismissLite:sbc_builder.youtube_feed_dismiss_lite,shouldShowFeedAPIForm:!1,shouldShowManualConnect:!1,showShowYTAccountWarning:!1,sw_feed:!1,sw_feed_id:!1}),SB_Customizer.extraMethods=C(C({},SB_Customizer.extraMethods),{},{changeSettingValue:function(e,t){var o=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],n=arguments.length>3&&void 0!==arguments[3]&&arguments[3],i=this;o&&(i.customizerFeedData.settings[e]=t),!1!==n&&i.customizerControlAjaxAction(n,e),i.regenerateLayout(e)},checkExtensionActive:function(e){return this.activeExtensions[e]},shouldShowOverlay:function(e){var t=this;return t.sbyIsPro&&!t.sbyLicenseNoticeActive&&("call_to_action"!=e.checkExtensionPopup&&"advancedFilters"!=e.checkExtensionPopup||t.hasFeature("call_to_actions")&&t.hasFeature("advancedFilters"))?(null!=e.condition||null!=e.checkExtension||null!=e.checkExtensionDimmed)&&!t.checkControlCondition(e.condition,e.checkExtension,e.checkExtensionDimmed):null!=e.checkExtensionPopup||(null!=e.condition||null!=e.checkExtension||null!=e.checkExtensionDimmed)&&!t.checkControlCondition(e.condition,e.checkExtension,e.checkExtensionDimmed)},shouldShowTogglesetCover:function(e){var t=this;return!(t.sbyIsPro&&!t.sbyLicenseNoticeActive||null==e.checkExtension||t.checkExtensionActive(e.checkExtension))},togglesetExtPopup:function(e){this.viewsActive.extensionsPopupElement=e.checkExtension},regenerateLayout:function(e){var t=this;["layout","carouselarrows","carouselpag","carouselautoplay","carouseltime","carouselloop","carouselrows","cols","colstablet","colsmobile","imagepadding"].includes(e)&&setTimeout((function(){t.setShortcodeGlobalSettings(!0)}),200)},backToAllFeeds:function(){var e=this;JSON.stringify(e.customizerFeedDataInitial)===JSON.stringify(e.customizerFeedData)?window.location=e.builderUrl:e.openDialogBox("backAllToFeed")},openDialogBox:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],o=this,n=o.dialogBoxPopupScreen[e].heading,i=o.dialogBoxPopupScreen[e].description,s=o.dialogBoxPopupScreen[e].customButtons;"deleteSingleFeed"===e&&(o.feedToDelete=t,n=n.replace("#",o.feedToDelete.feed_name)),o.dialogBox={active:!0,type:e,heading:n,description:i,customButtons:s},window.event.stopPropagation()},confirmDialogAction:function(){var e=this;switch(e.dialogBox.type){case"deleteSingleFeed":e.feedActionDelete([e.feedToDelete.id]);break;case"deleteMultipleFeeds":e.feedActionDelete(e.feedsSelected);break;case"backAllToFeed":window.location=e.builderUrl}},feedActionDelete:function(e){var t=this,o={action:"sby_feed_saver_manager_delete_feeds",feeds_ids:e};t.ajaxPost(o,(function(e){var o=e.data;t.feedsList=Object.values(Object.assign({},o)),t.feedsSelected=[]}))},showColorPickerPospup:function(e){this.customizerScreens.activeColorPicker=e},hideColorPickerPopup:function(){this.customizerScreens.activeColorPicker=null},getPaletteClass:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=this,o=t.customizerFeedData.settings.colorpalette;if(t.checkNotEmpty(o)){var n="custom"===o?"_"+t.customizerFeedData.feed_info.id:"";return console.log("inherit"!==o?" sby"+e+"_palette_"+o+n:""),"inherit"!==o?" sby"+e+"_palette_"+o+n:""}return""},checkNotEmpty:function(e){return null!=e&&""!=e.replace(/ /gi,"")},getFeedContainerClasses:function(){var e=this;return["sb_youtube","sby_layout_"+e.customizerFeedData.settings.layout,"sby_col_"+e.getColSettings(),"sby_mob_col_"+e.getMobColSettings(),"sby_palette_"+e.getColorPaletteClass()].join(" ")},getColorPaletteClass:function(){var e=this;return"custom"==e.customizerFeedData.settings.colorpalette?e.customizerFeedData.settings.colorpalette+"_"+e.customizerFeedData.feed_info.id:e.customizerFeedData.settings.colorpalette},getColSettings:function(){var e=this;return"list"==e.customizerFeedData.settings.layout||"mobile"===e.customizerScreens.previewScreen?0:e.customizerFeedData.settings.cols?e.customizerFeedData.settings.cols:0},getMobColSettings:function(){var e=this;return"list"==e.customizerFeedData.settings.layout?0:e.customizerFeedData.settings.colsmobile?e.customizerFeedData.settings.colsmobile:0},checkShouldShowSubscribers:function(){return 1==this.customizerFeedData.settings.showsubscribe?"shown":""},valueIsEnabled:function(e){return 1==e||1==e||"true"==e||"on"==e},changeSwitcherSettingValue:function(e,t,o){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3],i=arguments.length>4?arguments[4]:void 0,s=this;console.log(i),Object.keys(s.inActiveExtensions).includes(e)&&(s.viewsActive.extensionsPopupElement=s.inActiveExtensions[e]),s.customizerFeedData.settings[e]=s.customizerFeedData.settings[e]==t?o:t,!1!==n&&s.customizerControlAjaxAction(n),s.regenerateLayout(e)},jsonParse:function(e){try{return JSON.parse(e)}catch(e){return!1}},getCustomHeaderText:function(){return this.customizerFeedData.settings.customheadertext},shouldShowStandardHeader:function(){return this.customizerFeedData.settings.showheader&&"standard"===this.customizerFeedData.settings.headerstyle},shouldShowTextHeader:function(){return this.customizerFeedData.settings.showheader&&"text"===this.customizerFeedData.settings.headerstyle},getFlagsAttr:function(){var e=this,t=[];return e.customizerFeedData.settings.disable_resize&&t.push("resizeDisable"),e.customizerFeedData.settings.favor_local&&t.push("favorLocal"),e.customizerFeedData.settings.disable_js_image_loading&&t.push("imageLoadDisable"),e.customizerFeedData.settings.ajax_post_load&&t.push("ajaxPostLoad"),"3:4"===e.customizerFeedData.settings.playerratio&&t.push("narrowPlayer"),e.customizerFeedData.settings.disablecdn&&t.push("disablecdn"),t.toString()},shouldShowPlayer:function(){if("gallery"==this.customizerFeedData.settings.layout)return!0},switchToVideosSection:function(){var e=this;e.customizerScreens.parentActiveSection=null,e.customizerScreens.parentActiveSectionData=null,e.customizerScreens.activeSection="customize_videos",e.customizerScreens.activeSectionData=e.customizerSidebarBuilder.customize.sections.customize_videos},setShortcodeGlobalSettings:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=this,o=jQuery("html").find(".sb_youtube"),n=t.jsonParse(o.attr("data-options")),i=t.customizerFeedData.settings;if(o.length){if("carousel"===i.layout){var s=t.valueIsEnabled(i.carouselarrows),r=t.valueIsEnabled(i.carouselpag),c=t.valueIsEnabled(i.carouselautoplay),a=!!c&&parseInt(i.carouseltime),l=!t.checkNotEmpty(i.carouselloop)||"rewind"===i.carouselloop,u=i.carouselrows?Math.min(parseInt(i.carouselrows),2):1;delete n.gallery,delete n.masonry,delete n.grid,n.carousel=[s,r,c,a,l,u]}else"grid"==i.layout?(delete n.gallery,delete n.masonry):"masonry"==i.layout?(delete n.gallery,delete n.grid):"gallery"==i.layout&&(delete n.masonry,delete n.grid);"carousel"!==i.layout&&delete n.carousel,o.attr("data-options",JSON.stringify(n)),void 0!==window.sby_init&&e&&window.sby_init()}},showManualConnect:function(){this.shouldShowManualConnect=!0,this.shouldShowFeedAPIBackBtn=!0},showFeedSourceManualConnect:function(){this.viewsActive.accountAPIPopup=!0,this.shouldShowManualConnect=!0},showAPIConnectForm:function(){this.shouldShowFeedAPIForm=!0,this.shouldShowFeedAPIBackBtn=!0},showYTAccountLimitations:function(){this.showShowYTAccountWarning=!0},backToApiPopup:function(){var e=this;e.showShowYTAccountWarning=!1,e.shouldShowManualConnect=!1,e.shouldShowFeedAPIForm=!1,e.shouldShowFeedAPIBackBtn=!1},hideAPIConnectForm:function(){var e=this;e.shouldShowManualConnect=!1,e.shouldShowFeedAPIForm=!1,e.shouldShowFeedAPIBackBtn=!1},addAPIKey:function(){if((e=this).selectedFeedModel.apiKey){var e,t={action:"sby_add_api_key",api:(e=this).selectedFeedModel.apiKey};e.apiKeyBtnLoader=!0,e.ajaxPost(t,(function(t){t.data,e.apiKeyBtnLoader=!1,e.apiKeyError=!1,e.apiKeyStatus=!0,e.activateView("accountAPIPopup")}))}else e.apiKeyError=!0},addAccessToken:function(){if((e=this).selectedFeedModel.accessToken){var e,t={action:"sby_manual_access_token",sby_access_token:(e=this).selectedFeedModel.accessToken};e.apiKeyBtnLoader=!0,e.ajaxPost(t,(function(t){t.data,e.apiKeyBtnLoader=!1,e.accessTokenError=!1,e.apiKeyStatus=!0,e.activateView("accountAPIPopup")}))}else e.accessTokenError=!0},submitNewFeed:function(){var e=this,t={action:"sby_feed_saver_manager_builder_update",feedtype:e.selectedFeed,feedtemplate:e.selectedFeedTemplate,selectedFeedModel:e.selectedFeedModel,new_insert:"true"};e.fullScreenLoader=!0,e.ajaxPost(t,(function(t){var o=t.data;o.feed_id&&o.success&&(window.location=e.builderUrl+"&feed_id="+o.feed_id+e.sw_feed_params())}))}}),e(SB_Customizer)}))})();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QWEsa0JBQ2xCLEdBZEEsTUFGQTVJLEVBQUsrSSxrQkFBbUIsQ0FpQnpCLEVBT0RDLGNBQWdCLFdBQ2YsSUFBSWhKLEVBQU83RCxLQUNWOE0sRUFBYyxDQUNiN0YsT0FBUyx3Q0FDVDhGLFNBQVdsSixFQUFLbUosYUFDaEJDLGFBQWVwSixFQUFLcUoscUJBQ3BCL0ssa0JBQW9CMEIsRUFBSzFCLGtCQUN6QmdMLFdBQWEsUUFFZnRKLEVBQUt1SixrQkFBbUIsRUFDeEJ2SixFQUFLcUQsU0FBUzRGLEdBQWEsU0FBUzNGLEdBQ25DLElBQUlDLEVBQU9ELEVBQUtDLEtBQ2JBLEVBQUtpRyxTQUFXakcsRUFBS2tHLFVBQ3ZCM0gsT0FBT0MsU0FBVy9CLEVBQUtnQyxXQUFhLFlBQWN1QixFQUFLaUcsUUFBVXhKLEVBQUswSixpQkFFdkUsR0FDRCxJQUVGL0wsRUFBUUgsY0FDUixHIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8veW91dHViZS1mZWVkLXByby8uL25vZGVfbW9kdWxlcy9Ad29yZHByZXNzL2hvb2tzL2J1aWxkLW1vZHVsZS92YWxpZGF0ZU5hbWVzcGFjZS5qcyIsIndlYnBhY2s6Ly95b3V0dWJlLWZlZWQtcHJvLy4vbm9kZV9tb2R1bGVzL0B3b3JkcHJlc3MvaG9va3MvYnVpbGQtbW9kdWxlL3ZhbGlkYXRlSG9va05hbWUuanMiLCJ3ZWJwYWNrOi8veW91dHViZS1mZWVkLXByby8uL25vZGVfbW9kdWxlcy9Ad29yZHByZXNzL2hvb2tzL2J1aWxkLW1vZHVsZS9jcmVhdGVBZGRIb29rLmpzIiwid2VicGFjazovL3lvdXR1YmUtZmVlZC1wcm8vLi9ub2RlX21vZHVsZXMvQHdvcmRwcmVzcy9ob29rcy9idWlsZC1tb2R1bGUvY3JlYXRlUmVtb3ZlSG9vay5qcyIsIndlYnBhY2s6Ly95b3V0dWJlLWZlZWQtcHJvLy4vbm9kZV9tb2R1bGVzL0B3b3JkcHJlc3MvaG9va3MvYnVpbGQtbW9kdWxlL2NyZWF0ZUhhc0hvb2suanMiLCJ3ZWJwYWNrOi8veW91dHViZS1mZWVkLXByby8uL25vZGVfbW9kdWxlcy9Ad29yZHByZXNzL2hvb2tzL2J1aWxkLW1vZHVsZS9jcmVhdGVSdW5Ib29rLmpzIiwid2VicGFjazovL3lvdXR1YmUtZmVlZC1wcm8vLi9ub2RlX21vZHVsZXMvQHdvcmRwcmVzcy9ob29rcy9idWlsZC1tb2R1bGUvY3JlYXRlQ3VycmVudEhvb2suanMiLCJ3ZWJwYWNrOi8veW91dHViZS1mZWVkLXByby8uL25vZGVfbW9kdWxlcy9Ad29yZHByZXNzL2hvb2tzL2J1aWxkLW1vZHVsZS9jcmVhdGVEb2luZ0hvb2suanMiLCJ3ZWJwYWNrOi8veW91dHViZS1mZWVkLXByby8uL25vZGVfbW9kdWxlcy9Ad29yZHByZXNzL2hvb2tzL2J1aWxkLW1vZHVsZS9jcmVhdGVEaWRIb29rLmpzIiwid2VicGFjazovL3lvdXR1YmUtZmVlZC1wcm8vLi9ub2RlX21vZHVsZXMvQHdvcmRwcmVzcy9ob29rcy9idWlsZC1tb2R1bGUvY3JlYXRlSG9va3MuanMiLCJ3ZWJwYWNrOi8veW91dHViZS1mZWVkLXByby8uL25vZGVfbW9kdWxlcy9Ad29yZHByZXNzL2hvb2tzL2J1aWxkLW1vZHVsZS9pbmRleC5qcyIsIndlYnBhY2s6Ly95b3V0dWJlLWZlZWQtcHJvLy4vanMvY3VzdG9taXplci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFZhbGlkYXRlIGEgbmFtZXNwYWNlIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZXNwYWNlIFRoZSBuYW1lc3BhY2UgdG8gdmFsaWRhdGUgLSBzaG91bGQgdGFrZSB0aGUgZm9ybVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICBgdmVuZG9yL3BsdWdpbi9mdW5jdGlvbmAuXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgbmFtZXNwYWNlIGlzIHZhbGlkLlxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZU5hbWVzcGFjZShuYW1lc3BhY2UpIHtcbiAgaWYgKCdzdHJpbmcnICE9PSB0eXBlb2YgbmFtZXNwYWNlIHx8ICcnID09PSBuYW1lc3BhY2UpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBuYW1lc3BhY2UgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcuJyk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCEvXlthLXpBLVpdW2EtekEtWjAtOV8uXFwtXFwvXSokLy50ZXN0KG5hbWVzcGFjZSkpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBuYW1lc3BhY2UgY2FuIG9ubHkgY29udGFpbiBudW1iZXJzLCBsZXR0ZXJzLCBkYXNoZXMsIHBlcmlvZHMsIHVuZGVyc2NvcmVzIGFuZCBzbGFzaGVzLicpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZGVmYXVsdCB2YWxpZGF0ZU5hbWVzcGFjZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXZhbGlkYXRlTmFtZXNwYWNlLmpzLm1hcCIsIi8qKlxuICogVmFsaWRhdGUgYSBob29rTmFtZSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGhvb2tOYW1lIFRoZSBob29rIG5hbWUgdG8gdmFsaWRhdGUuIFNob3VsZCBiZSBhIG5vbiBlbXB0eSBzdHJpbmcgY29udGFpbmluZ1xuICogICAgICAgICAgICAgICAgICAgICAgICAgIG9ubHkgbnVtYmVycywgbGV0dGVycywgZGFzaGVzLCBwZXJpb2RzIGFuZCB1bmRlcnNjb3Jlcy4gQWxzbyxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgaG9vayBuYW1lIGNhbm5vdCBiZWdpbiB3aXRoIGBfX2AuXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgaG9vayBuYW1lIGlzIHZhbGlkLlxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUhvb2tOYW1lKGhvb2tOYW1lKSB7XG4gIGlmICgnc3RyaW5nJyAhPT0gdHlwZW9mIGhvb2tOYW1lIHx8ICcnID09PSBob29rTmFtZSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgY29uc29sZS5lcnJvcignVGhlIGhvb2sgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZy4nKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoL15fXy8udGVzdChob29rTmFtZSkpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBob29rIG5hbWUgY2Fubm90IGJlZ2luIHdpdGggYF9fYC4nKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIS9eW2EtekEtWl1bYS16QS1aMC05Xy4tXSokLy50ZXN0KGhvb2tOYW1lKSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgY29uc29sZS5lcnJvcignVGhlIGhvb2sgbmFtZSBjYW4gb25seSBjb250YWluIG51bWJlcnMsIGxldHRlcnMsIGRhc2hlcywgcGVyaW9kcyBhbmQgdW5kZXJzY29yZXMuJyk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHZhbGlkYXRlSG9va05hbWU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD12YWxpZGF0ZUhvb2tOYW1lLmpzLm1hcCIsIi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB2YWxpZGF0ZU5hbWVzcGFjZSBmcm9tICcuL3ZhbGlkYXRlTmFtZXNwYWNlLmpzJztcbmltcG9ydCB2YWxpZGF0ZUhvb2tOYW1lIGZyb20gJy4vdmFsaWRhdGVIb29rTmFtZS5qcyc7XG4vKipcbiAqIEBjYWxsYmFjayBBZGRIb29rXG4gKlxuICogQWRkcyB0aGUgaG9vayB0byB0aGUgYXBwcm9wcmlhdGUgaG9va3MgY29udGFpbmVyLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICAgICAgIGhvb2tOYW1lICAgICAgTmFtZSBvZiBob29rIHRvIGFkZFxuICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICAgbmFtZXNwYWNlICAgICBUaGUgdW5pcXVlIG5hbWVzcGFjZSBpZGVudGlmeWluZyB0aGUgY2FsbGJhY2sgaW4gdGhlIGZvcm0gYHZlbmRvci9wbHVnaW4vZnVuY3Rpb25gLlxuICogQHBhcmFtIHtpbXBvcnQoJy4nKS5DYWxsYmFja30gY2FsbGJhY2sgICAgICBGdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIGhvb2sgaXMgcnVuXG4gKiBAcGFyYW0ge251bWJlcn0gICAgICAgICAgICAgICBbcHJpb3JpdHk9MTBdIFByaW9yaXR5IG9mIHRoaXMgaG9va1xuICovXG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoLCB3aGVuIGludm9rZWQsIHdpbGwgYWRkIGEgaG9vay5cbiAqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLicpLkhvb2tzfSAgICBob29rcyAgICBIb29rcyBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7aW1wb3J0KCcuJykuU3RvcmVLZXl9IHN0b3JlS2V5XG4gKlxuICogQHJldHVybiB7QWRkSG9va30gRnVuY3Rpb24gdGhhdCBhZGRzIGEgbmV3IGhvb2suXG4gKi9cblxuZnVuY3Rpb24gY3JlYXRlQWRkSG9vayhob29rcywgc3RvcmVLZXkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGFkZEhvb2soaG9va05hbWUsIG5hbWVzcGFjZSwgY2FsbGJhY2spIHtcbiAgICBsZXQgcHJpb3JpdHkgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IDEwO1xuICAgIGNvbnN0IGhvb2tzU3RvcmUgPSBob29rc1tzdG9yZUtleV07XG5cbiAgICBpZiAoIXZhbGlkYXRlSG9va05hbWUoaG9va05hbWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF2YWxpZGF0ZU5hbWVzcGFjZShuYW1lc3BhY2UpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCdmdW5jdGlvbicgIT09IHR5cGVvZiBjYWxsYmFjaykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBob29rIGNhbGxiYWNrIG11c3QgYmUgYSBmdW5jdGlvbi4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFZhbGlkYXRlIG51bWVyaWMgcHJpb3JpdHlcblxuXG4gICAgaWYgKCdudW1iZXInICE9PSB0eXBlb2YgcHJpb3JpdHkpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLmVycm9yKCdJZiBzcGVjaWZpZWQsIHRoZSBob29rIHByaW9yaXR5IG11c3QgYmUgYSBudW1iZXIuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlciA9IHtcbiAgICAgIGNhbGxiYWNrLFxuICAgICAgcHJpb3JpdHksXG4gICAgICBuYW1lc3BhY2VcbiAgICB9O1xuXG4gICAgaWYgKGhvb2tzU3RvcmVbaG9va05hbWVdKSB7XG4gICAgICAvLyBGaW5kIHRoZSBjb3JyZWN0IGluc2VydCBpbmRleCBvZiB0aGUgbmV3IGhvb2suXG4gICAgICBjb25zdCBoYW5kbGVycyA9IGhvb2tzU3RvcmVbaG9va05hbWVdLmhhbmRsZXJzO1xuICAgICAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG5cbiAgICAgIGxldCBpO1xuXG4gICAgICBmb3IgKGkgPSBoYW5kbGVycy5sZW5ndGg7IGkgPiAwOyBpLS0pIHtcbiAgICAgICAgaWYgKHByaW9yaXR5ID49IGhhbmRsZXJzW2kgLSAxXS5wcmlvcml0eSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpID09PSBoYW5kbGVycy5sZW5ndGgpIHtcbiAgICAgICAgLy8gSWYgYXBwZW5kLCBvcGVyYXRlIHZpYSBkaXJlY3QgYXNzaWdubWVudC5cbiAgICAgICAgaGFuZGxlcnNbaV0gPSBoYW5kbGVyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gT3RoZXJ3aXNlLCBpbnNlcnQgYmVmb3JlIGluZGV4IHZpYSBzcGxpY2UuXG4gICAgICAgIGhhbmRsZXJzLnNwbGljZShpLCAwLCBoYW5kbGVyKTtcbiAgICAgIH0gLy8gV2UgbWF5IGFsc28gYmUgY3VycmVudGx5IGV4ZWN1dGluZyB0aGlzIGhvb2suICBJZiB0aGUgY2FsbGJhY2tcbiAgICAgIC8vIHdlJ3JlIGFkZGluZyB3b3VsZCBjb21lIGFmdGVyIHRoZSBjdXJyZW50IGNhbGxiYWNrLCB0aGVyZSdzIG5vXG4gICAgICAvLyBwcm9ibGVtOyBvdGhlcndpc2Ugd2UgbmVlZCB0byBpbmNyZWFzZSB0aGUgZXhlY3V0aW9uIGluZGV4IG9mXG4gICAgICAvLyBhbnkgb3RoZXIgcnVucyBieSAxIHRvIGFjY291bnQgZm9yIHRoZSBhZGRlZCBlbGVtZW50LlxuXG5cbiAgICAgIGhvb2tzU3RvcmUuX19jdXJyZW50LmZvckVhY2goaG9va0luZm8gPT4ge1xuICAgICAgICBpZiAoaG9va0luZm8ubmFtZSA9PT0gaG9va05hbWUgJiYgaG9va0luZm8uY3VycmVudEluZGV4ID49IGkpIHtcbiAgICAgICAgICBob29rSW5mby5jdXJyZW50SW5kZXgrKztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IGhvb2sgb2YgaXRzIHR5cGUuXG4gICAgICBob29rc1N0b3JlW2hvb2tOYW1lXSA9IHtcbiAgICAgICAgaGFuZGxlcnM6IFtoYW5kbGVyXSxcbiAgICAgICAgcnVuczogMFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoaG9va05hbWUgIT09ICdob29rQWRkZWQnKSB7XG4gICAgICBob29rcy5kb0FjdGlvbignaG9va0FkZGVkJywgaG9va05hbWUsIG5hbWVzcGFjZSwgY2FsbGJhY2ssIHByaW9yaXR5KTtcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUFkZEhvb2s7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jcmVhdGVBZGRIb29rLmpzLm1hcCIsIi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB2YWxpZGF0ZU5hbWVzcGFjZSBmcm9tICcuL3ZhbGlkYXRlTmFtZXNwYWNlLmpzJztcbmltcG9ydCB2YWxpZGF0ZUhvb2tOYW1lIGZyb20gJy4vdmFsaWRhdGVIb29rTmFtZS5qcyc7XG4vKipcbiAqIEBjYWxsYmFjayBSZW1vdmVIb29rXG4gKiBSZW1vdmVzIHRoZSBzcGVjaWZpZWQgY2FsbGJhY2sgKG9yIGFsbCBjYWxsYmFja3MpIGZyb20gdGhlIGhvb2sgd2l0aCBhIGdpdmVuIGhvb2tOYW1lXG4gKiBhbmQgbmFtZXNwYWNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBob29rTmFtZSAgVGhlIG5hbWUgb2YgdGhlIGhvb2sgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVzcGFjZSBUaGUgdW5pcXVlIG5hbWVzcGFjZSBpZGVudGlmeWluZyB0aGUgY2FsbGJhY2sgaW4gdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0gYHZlbmRvci9wbHVnaW4vZnVuY3Rpb25gLlxuICpcbiAqIEByZXR1cm4ge251bWJlciB8IHVuZGVmaW5lZH0gVGhlIG51bWJlciBvZiBjYWxsYmFja3MgcmVtb3ZlZC5cbiAqL1xuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB3aGljaCwgd2hlbiBpbnZva2VkLCB3aWxsIHJlbW92ZSBhIHNwZWNpZmllZCBob29rIG9yIGFsbFxuICogaG9va3MgYnkgdGhlIGdpdmVuIG5hbWUuXG4gKlxuICogQHBhcmFtIHtpbXBvcnQoJy4nKS5Ib29rc30gICAgaG9va3MgICAgICAgICAgICAgSG9va3MgaW5zdGFuY2UuXG4gKiBAcGFyYW0ge2ltcG9ydCgnLicpLlN0b3JlS2V5fSBzdG9yZUtleVxuICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgICAgW3JlbW92ZUFsbD1mYWxzZV0gV2hldGhlciB0byByZW1vdmUgYWxsIGNhbGxiYWNrcyBmb3IgYSBob29rTmFtZSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhvdXQgcmVnYXJkIHRvIG5hbWVzcGFjZS4gVXNlZCB0byBjcmVhdGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGByZW1vdmVBbGwqYCBmdW5jdGlvbnMuXG4gKlxuICogQHJldHVybiB7UmVtb3ZlSG9va30gRnVuY3Rpb24gdGhhdCByZW1vdmVzIGhvb2tzLlxuICovXG5cbmZ1bmN0aW9uIGNyZWF0ZVJlbW92ZUhvb2soaG9va3MsIHN0b3JlS2V5KSB7XG4gIGxldCByZW1vdmVBbGwgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IGZhbHNlO1xuICByZXR1cm4gZnVuY3Rpb24gcmVtb3ZlSG9vayhob29rTmFtZSwgbmFtZXNwYWNlKSB7XG4gICAgY29uc3QgaG9va3NTdG9yZSA9IGhvb2tzW3N0b3JlS2V5XTtcblxuICAgIGlmICghdmFsaWRhdGVIb29rTmFtZShob29rTmFtZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXJlbW92ZUFsbCAmJiAhdmFsaWRhdGVOYW1lc3BhY2UobmFtZXNwYWNlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gQmFpbCBpZiBubyBob29rcyBleGlzdCBieSB0aGlzIG5hbWUuXG5cblxuICAgIGlmICghaG9va3NTdG9yZVtob29rTmFtZV0pIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGxldCBoYW5kbGVyc1JlbW92ZWQgPSAwO1xuXG4gICAgaWYgKHJlbW92ZUFsbCkge1xuICAgICAgaGFuZGxlcnNSZW1vdmVkID0gaG9va3NTdG9yZVtob29rTmFtZV0uaGFuZGxlcnMubGVuZ3RoO1xuICAgICAgaG9va3NTdG9yZVtob29rTmFtZV0gPSB7XG4gICAgICAgIHJ1bnM6IGhvb2tzU3RvcmVbaG9va05hbWVdLnJ1bnMsXG4gICAgICAgIGhhbmRsZXJzOiBbXVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVHJ5IHRvIGZpbmQgdGhlIHNwZWNpZmllZCBjYWxsYmFjayB0byByZW1vdmUuXG4gICAgICBjb25zdCBoYW5kbGVycyA9IGhvb2tzU3RvcmVbaG9va05hbWVdLmhhbmRsZXJzO1xuXG4gICAgICBmb3IgKGxldCBpID0gaGFuZGxlcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgaWYgKGhhbmRsZXJzW2ldLm5hbWVzcGFjZSA9PT0gbmFtZXNwYWNlKSB7XG4gICAgICAgICAgaGFuZGxlcnMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgIGhhbmRsZXJzUmVtb3ZlZCsrOyAvLyBUaGlzIGNhbGxiYWNrIG1heSBhbHNvIGJlIHBhcnQgb2YgYSBob29rIHRoYXQgaXNcbiAgICAgICAgICAvLyBjdXJyZW50bHkgZXhlY3V0aW5nLiAgSWYgdGhlIGNhbGxiYWNrIHdlJ3JlIHJlbW92aW5nXG4gICAgICAgICAgLy8gY29tZXMgYWZ0ZXIgdGhlIGN1cnJlbnQgY2FsbGJhY2ssIHRoZXJlJ3Mgbm8gcHJvYmxlbTtcbiAgICAgICAgICAvLyBvdGhlcndpc2Ugd2UgbmVlZCB0byBkZWNyZWFzZSB0aGUgZXhlY3V0aW9uIGluZGV4IG9mIGFueVxuICAgICAgICAgIC8vIG90aGVyIHJ1bnMgYnkgMSB0byBhY2NvdW50IGZvciB0aGUgcmVtb3ZlZCBlbGVtZW50LlxuXG4gICAgICAgICAgaG9va3NTdG9yZS5fX2N1cnJlbnQuZm9yRWFjaChob29rSW5mbyA9PiB7XG4gICAgICAgICAgICBpZiAoaG9va0luZm8ubmFtZSA9PT0gaG9va05hbWUgJiYgaG9va0luZm8uY3VycmVudEluZGV4ID49IGkpIHtcbiAgICAgICAgICAgICAgaG9va0luZm8uY3VycmVudEluZGV4LS07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaG9va05hbWUgIT09ICdob29rUmVtb3ZlZCcpIHtcbiAgICAgIGhvb2tzLmRvQWN0aW9uKCdob29rUmVtb3ZlZCcsIGhvb2tOYW1lLCBuYW1lc3BhY2UpO1xuICAgIH1cblxuICAgIHJldHVybiBoYW5kbGVyc1JlbW92ZWQ7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVJlbW92ZUhvb2s7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jcmVhdGVSZW1vdmVIb29rLmpzLm1hcCIsIi8qKlxuICogQGNhbGxiYWNrIEhhc0hvb2tcbiAqXG4gKiBSZXR1cm5zIHdoZXRoZXIgYW55IGhhbmRsZXJzIGFyZSBhdHRhY2hlZCBmb3IgdGhlIGdpdmVuIGhvb2tOYW1lIGFuZCBvcHRpb25hbCBuYW1lc3BhY2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGhvb2tOYW1lICAgIFRoZSBuYW1lIG9mIHRoZSBob29rIHRvIGNoZWNrIGZvci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZXNwYWNlXSBPcHRpb25hbC4gVGhlIHVuaXF1ZSBuYW1lc3BhY2UgaWRlbnRpZnlpbmcgdGhlIGNhbGxiYWNrXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGZvcm0gYHZlbmRvci9wbHVnaW4vZnVuY3Rpb25gLlxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlcmUgYXJlIGhhbmRsZXJzIHRoYXQgYXJlIGF0dGFjaGVkIHRvIHRoZSBnaXZlbiBob29rLlxuICovXG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoLCB3aGVuIGludm9rZWQsIHdpbGwgcmV0dXJuIHdoZXRoZXIgYW55IGhhbmRsZXJzIGFyZVxuICogYXR0YWNoZWQgdG8gYSBwYXJ0aWN1bGFyIGhvb2suXG4gKlxuICogQHBhcmFtIHtpbXBvcnQoJy4nKS5Ib29rc30gICAgaG9va3MgICAgSG9va3MgaW5zdGFuY2UuXG4gKiBAcGFyYW0ge2ltcG9ydCgnLicpLlN0b3JlS2V5fSBzdG9yZUtleVxuICpcbiAqIEByZXR1cm4ge0hhc0hvb2t9IEZ1bmN0aW9uIHRoYXQgcmV0dXJucyB3aGV0aGVyIGFueSBoYW5kbGVycyBhcmVcbiAqICAgICAgICAgICAgICAgICAgIGF0dGFjaGVkIHRvIGEgcGFydGljdWxhciBob29rIGFuZCBvcHRpb25hbCBuYW1lc3BhY2UuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUhhc0hvb2soaG9va3MsIHN0b3JlS2V5KSB7XG4gIHJldHVybiBmdW5jdGlvbiBoYXNIb29rKGhvb2tOYW1lLCBuYW1lc3BhY2UpIHtcbiAgICBjb25zdCBob29rc1N0b3JlID0gaG9va3Nbc3RvcmVLZXldOyAvLyBVc2UgdGhlIG5hbWVzcGFjZSBpZiBwcm92aWRlZC5cblxuICAgIGlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIG5hbWVzcGFjZSkge1xuICAgICAgcmV0dXJuIGhvb2tOYW1lIGluIGhvb2tzU3RvcmUgJiYgaG9va3NTdG9yZVtob29rTmFtZV0uaGFuZGxlcnMuc29tZShob29rID0+IGhvb2submFtZXNwYWNlID09PSBuYW1lc3BhY2UpO1xuICAgIH1cblxuICAgIHJldHVybiBob29rTmFtZSBpbiBob29rc1N0b3JlO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVIYXNIb29rO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y3JlYXRlSGFzSG9vay5qcy5tYXAiLCIvKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB3aGljaCwgd2hlbiBpbnZva2VkLCB3aWxsIGV4ZWN1dGUgYWxsIGNhbGxiYWNrc1xuICogcmVnaXN0ZXJlZCB0byBhIGhvb2sgb2YgdGhlIHNwZWNpZmllZCB0eXBlLCBvcHRpb25hbGx5IHJldHVybmluZyB0aGUgZmluYWxcbiAqIHZhbHVlIG9mIHRoZSBjYWxsIGNoYWluLlxuICpcbiAqIEBwYXJhbSB7aW1wb3J0KCcuJykuSG9va3N9ICAgIGhvb2tzICAgICAgICAgICAgICAgICAgSG9va3MgaW5zdGFuY2UuXG4gKiBAcGFyYW0ge2ltcG9ydCgnLicpLlN0b3JlS2V5fSBzdG9yZUtleVxuICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgICAgW3JldHVybkZpcnN0QXJnPWZhbHNlXSBXaGV0aGVyIGVhY2ggaG9vayBjYWxsYmFjayBpcyBleHBlY3RlZCB0b1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRzIGZpcnN0IGFyZ3VtZW50LlxuICpcbiAqIEByZXR1cm4geyhob29rTmFtZTpzdHJpbmcsIC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93bn0gRnVuY3Rpb24gdGhhdCBydW5zIGhvb2sgY2FsbGJhY2tzLlxuICovXG5mdW5jdGlvbiBjcmVhdGVSdW5Ib29rKGhvb2tzLCBzdG9yZUtleSkge1xuICBsZXQgcmV0dXJuRmlyc3RBcmcgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IGZhbHNlO1xuICByZXR1cm4gZnVuY3Rpb24gcnVuSG9va3MoaG9va05hbWUpIHtcbiAgICBjb25zdCBob29rc1N0b3JlID0gaG9va3Nbc3RvcmVLZXldO1xuXG4gICAgaWYgKCFob29rc1N0b3JlW2hvb2tOYW1lXSkge1xuICAgICAgaG9va3NTdG9yZVtob29rTmFtZV0gPSB7XG4gICAgICAgIGhhbmRsZXJzOiBbXSxcbiAgICAgICAgcnVuczogMFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBob29rc1N0b3JlW2hvb2tOYW1lXS5ydW5zKys7XG4gICAgY29uc3QgaGFuZGxlcnMgPSBob29rc1N0b3JlW2hvb2tOYW1lXS5oYW5kbGVyczsgLy8gVGhlIGZvbGxvd2luZyBjb2RlIGlzIHN0cmlwcGVkIGZyb20gcHJvZHVjdGlvbiBidWlsZHMuXG5cbiAgICBpZiAoJ3Byb2R1Y3Rpb24nICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgLy8gSGFuZGxlIGFueSAnYWxsJyBob29rcyByZWdpc3RlcmVkLlxuICAgICAgaWYgKCdob29rQWRkZWQnICE9PSBob29rTmFtZSAmJiBob29rc1N0b3JlLmFsbCkge1xuICAgICAgICBoYW5kbGVycy5wdXNoKC4uLmhvb2tzU3RvcmUuYWxsLmhhbmRsZXJzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBpZiAoIWhhbmRsZXJzIHx8ICFoYW5kbGVycy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiByZXR1cm5GaXJzdEFyZyA/IGFyZ3NbMF0gOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgaG9va0luZm8gPSB7XG4gICAgICBuYW1lOiBob29rTmFtZSxcbiAgICAgIGN1cnJlbnRJbmRleDogMFxuICAgIH07XG5cbiAgICBob29rc1N0b3JlLl9fY3VycmVudC5wdXNoKGhvb2tJbmZvKTtcblxuICAgIHdoaWxlIChob29rSW5mby5jdXJyZW50SW5kZXggPCBoYW5kbGVycy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGhhbmRsZXIgPSBoYW5kbGVyc1tob29rSW5mby5jdXJyZW50SW5kZXhdO1xuICAgICAgY29uc3QgcmVzdWx0ID0gaGFuZGxlci5jYWxsYmFjay5hcHBseShudWxsLCBhcmdzKTtcblxuICAgICAgaWYgKHJldHVybkZpcnN0QXJnKSB7XG4gICAgICAgIGFyZ3NbMF0gPSByZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIGhvb2tJbmZvLmN1cnJlbnRJbmRleCsrO1xuICAgIH1cblxuICAgIGhvb2tzU3RvcmUuX19jdXJyZW50LnBvcCgpO1xuXG4gICAgaWYgKHJldHVybkZpcnN0QXJnKSB7XG4gICAgICByZXR1cm4gYXJnc1swXTtcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVJ1bkhvb2s7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jcmVhdGVSdW5Ib29rLmpzLm1hcCIsIi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoLCB3aGVuIGludm9rZWQsIHdpbGwgcmV0dXJuIHRoZSBuYW1lIG9mIHRoZVxuICogY3VycmVudGx5IHJ1bm5pbmcgaG9vaywgb3IgYG51bGxgIGlmIG5vIGhvb2sgb2YgdGhlIGdpdmVuIHR5cGUgaXMgY3VycmVudGx5XG4gKiBydW5uaW5nLlxuICpcbiAqIEBwYXJhbSB7aW1wb3J0KCcuJykuSG9va3N9ICAgIGhvb2tzICAgIEhvb2tzIGluc3RhbmNlLlxuICogQHBhcmFtIHtpbXBvcnQoJy4nKS5TdG9yZUtleX0gc3RvcmVLZXlcbiAqXG4gKiBAcmV0dXJuIHsoKSA9PiBzdHJpbmcgfCBudWxsfSBGdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGN1cnJlbnQgaG9vayBuYW1lIG9yIG51bGwuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUN1cnJlbnRIb29rKGhvb2tzLCBzdG9yZUtleSkge1xuICByZXR1cm4gZnVuY3Rpb24gY3VycmVudEhvb2soKSB7XG4gICAgdmFyIF9ob29rc1N0b3JlJF9fY3VycmVudCwgX2hvb2tzU3RvcmUkX19jdXJyZW50MjtcblxuICAgIGNvbnN0IGhvb2tzU3RvcmUgPSBob29rc1tzdG9yZUtleV07XG4gICAgcmV0dXJuIChfaG9va3NTdG9yZSRfX2N1cnJlbnQgPSAoX2hvb2tzU3RvcmUkX19jdXJyZW50MiA9IGhvb2tzU3RvcmUuX19jdXJyZW50W2hvb2tzU3RvcmUuX19jdXJyZW50Lmxlbmd0aCAtIDFdKSA9PT0gbnVsbCB8fCBfaG9va3NTdG9yZSRfX2N1cnJlbnQyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfaG9va3NTdG9yZSRfX2N1cnJlbnQyLm5hbWUpICE9PSBudWxsICYmIF9ob29rc1N0b3JlJF9fY3VycmVudCAhPT0gdm9pZCAwID8gX2hvb2tzU3RvcmUkX19jdXJyZW50IDogbnVsbDtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlQ3VycmVudEhvb2s7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jcmVhdGVDdXJyZW50SG9vay5qcy5tYXAiLCIvKipcbiAqIEBjYWxsYmFjayBEb2luZ0hvb2tcbiAqIFJldHVybnMgd2hldGhlciBhIGhvb2sgaXMgY3VycmVudGx5IGJlaW5nIGV4ZWN1dGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbaG9va05hbWVdIFRoZSBuYW1lIG9mIHRoZSBob29rIHRvIGNoZWNrIGZvci4gIElmXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbWl0dGVkLCB3aWxsIGNoZWNrIGZvciBhbnkgaG9vayBiZWluZyBleGVjdXRlZC5cbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSBob29rIGlzIGJlaW5nIGV4ZWN1dGVkLlxuICovXG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoLCB3aGVuIGludm9rZWQsIHdpbGwgcmV0dXJuIHdoZXRoZXIgYSBob29rIGlzXG4gKiBjdXJyZW50bHkgYmVpbmcgZXhlY3V0ZWQuXG4gKlxuICogQHBhcmFtIHtpbXBvcnQoJy4nKS5Ib29rc30gICAgaG9va3MgICAgSG9va3MgaW5zdGFuY2UuXG4gKiBAcGFyYW0ge2ltcG9ydCgnLicpLlN0b3JlS2V5fSBzdG9yZUtleVxuICpcbiAqIEByZXR1cm4ge0RvaW5nSG9va30gRnVuY3Rpb24gdGhhdCByZXR1cm5zIHdoZXRoZXIgYSBob29rIGlzIGN1cnJlbnRseVxuICogICAgICAgICAgICAgICAgICAgICBiZWluZyBleGVjdXRlZC5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRG9pbmdIb29rKGhvb2tzLCBzdG9yZUtleSkge1xuICByZXR1cm4gZnVuY3Rpb24gZG9pbmdIb29rKGhvb2tOYW1lKSB7XG4gICAgY29uc3QgaG9va3NTdG9yZSA9IGhvb2tzW3N0b3JlS2V5XTsgLy8gSWYgdGhlIGhvb2tOYW1lIHdhcyBub3QgcGFzc2VkLCBjaGVjayBmb3IgYW55IGN1cnJlbnQgaG9vay5cblxuICAgIGlmICgndW5kZWZpbmVkJyA9PT0gdHlwZW9mIGhvb2tOYW1lKSB7XG4gICAgICByZXR1cm4gJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiBob29rc1N0b3JlLl9fY3VycmVudFswXTtcbiAgICB9IC8vIFJldHVybiB0aGUgX19jdXJyZW50IGhvb2suXG5cblxuICAgIHJldHVybiBob29rc1N0b3JlLl9fY3VycmVudFswXSA/IGhvb2tOYW1lID09PSBob29rc1N0b3JlLl9fY3VycmVudFswXS5uYW1lIDogZmFsc2U7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZURvaW5nSG9vaztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNyZWF0ZURvaW5nSG9vay5qcy5tYXAiLCIvKipcbiAqIEludGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgdmFsaWRhdGVIb29rTmFtZSBmcm9tICcuL3ZhbGlkYXRlSG9va05hbWUuanMnO1xuLyoqXG4gKiBAY2FsbGJhY2sgRGlkSG9va1xuICpcbiAqIFJldHVybnMgdGhlIG51bWJlciBvZiB0aW1lcyBhbiBhY3Rpb24gaGFzIGJlZW4gZmlyZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGhvb2tOYW1lIFRoZSBob29rIG5hbWUgdG8gY2hlY2suXG4gKlxuICogQHJldHVybiB7bnVtYmVyIHwgdW5kZWZpbmVkfSBUaGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBob29rIGhhcyBydW4uXG4gKi9cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gd2hpY2gsIHdoZW4gaW52b2tlZCwgd2lsbCByZXR1cm4gdGhlIG51bWJlciBvZiB0aW1lcyBhXG4gKiBob29rIGhhcyBiZWVuIGNhbGxlZC5cbiAqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLicpLkhvb2tzfSAgICBob29rcyAgICBIb29rcyBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7aW1wb3J0KCcuJykuU3RvcmVLZXl9IHN0b3JlS2V5XG4gKlxuICogQHJldHVybiB7RGlkSG9va30gRnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgaG9vaydzIGNhbGwgY291bnQuXG4gKi9cblxuZnVuY3Rpb24gY3JlYXRlRGlkSG9vayhob29rcywgc3RvcmVLZXkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGRpZEhvb2soaG9va05hbWUpIHtcbiAgICBjb25zdCBob29rc1N0b3JlID0gaG9va3Nbc3RvcmVLZXldO1xuXG4gICAgaWYgKCF2YWxpZGF0ZUhvb2tOYW1lKGhvb2tOYW1lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBob29rc1N0b3JlW2hvb2tOYW1lXSAmJiBob29rc1N0b3JlW2hvb2tOYW1lXS5ydW5zID8gaG9va3NTdG9yZVtob29rTmFtZV0ucnVucyA6IDA7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZURpZEhvb2s7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jcmVhdGVEaWRIb29rLmpzLm1hcCIsIi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCBjcmVhdGVBZGRIb29rIGZyb20gJy4vY3JlYXRlQWRkSG9vayc7XG5pbXBvcnQgY3JlYXRlUmVtb3ZlSG9vayBmcm9tICcuL2NyZWF0ZVJlbW92ZUhvb2snO1xuaW1wb3J0IGNyZWF0ZUhhc0hvb2sgZnJvbSAnLi9jcmVhdGVIYXNIb29rJztcbmltcG9ydCBjcmVhdGVSdW5Ib29rIGZyb20gJy4vY3JlYXRlUnVuSG9vayc7XG5pbXBvcnQgY3JlYXRlQ3VycmVudEhvb2sgZnJvbSAnLi9jcmVhdGVDdXJyZW50SG9vayc7XG5pbXBvcnQgY3JlYXRlRG9pbmdIb29rIGZyb20gJy4vY3JlYXRlRG9pbmdIb29rJztcbmltcG9ydCBjcmVhdGVEaWRIb29rIGZyb20gJy4vY3JlYXRlRGlkSG9vayc7XG4vKipcbiAqIEludGVybmFsIGNsYXNzIGZvciBjb25zdHJ1Y3RpbmcgaG9va3MuIFVzZSBgY3JlYXRlSG9va3MoKWAgZnVuY3Rpb25cbiAqXG4gKiBOb3RlLCBpdCBpcyBuZWNlc3NhcnkgdG8gZXhwb3NlIHRoaXMgY2xhc3MgdG8gbWFrZSBpdHMgdHlwZSBwdWJsaWMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuXG5leHBvcnQgY2xhc3MgX0hvb2tzIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLyoqIEB0eXBlIHtpbXBvcnQoJy4nKS5TdG9yZX0gYWN0aW9ucyAqL1xuICAgIHRoaXMuYWN0aW9ucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy5hY3Rpb25zLl9fY3VycmVudCA9IFtdO1xuICAgIC8qKiBAdHlwZSB7aW1wb3J0KCcuJykuU3RvcmV9IGZpbHRlcnMgKi9cblxuICAgIHRoaXMuZmlsdGVycyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy5maWx0ZXJzLl9fY3VycmVudCA9IFtdO1xuICAgIHRoaXMuYWRkQWN0aW9uID0gY3JlYXRlQWRkSG9vayh0aGlzLCAnYWN0aW9ucycpO1xuICAgIHRoaXMuYWRkRmlsdGVyID0gY3JlYXRlQWRkSG9vayh0aGlzLCAnZmlsdGVycycpO1xuICAgIHRoaXMucmVtb3ZlQWN0aW9uID0gY3JlYXRlUmVtb3ZlSG9vayh0aGlzLCAnYWN0aW9ucycpO1xuICAgIHRoaXMucmVtb3ZlRmlsdGVyID0gY3JlYXRlUmVtb3ZlSG9vayh0aGlzLCAnZmlsdGVycycpO1xuICAgIHRoaXMuaGFzQWN0aW9uID0gY3JlYXRlSGFzSG9vayh0aGlzLCAnYWN0aW9ucycpO1xuICAgIHRoaXMuaGFzRmlsdGVyID0gY3JlYXRlSGFzSG9vayh0aGlzLCAnZmlsdGVycycpO1xuICAgIHRoaXMucmVtb3ZlQWxsQWN0aW9ucyA9IGNyZWF0ZVJlbW92ZUhvb2sodGhpcywgJ2FjdGlvbnMnLCB0cnVlKTtcbiAgICB0aGlzLnJlbW92ZUFsbEZpbHRlcnMgPSBjcmVhdGVSZW1vdmVIb29rKHRoaXMsICdmaWx0ZXJzJywgdHJ1ZSk7XG4gICAgdGhpcy5kb0FjdGlvbiA9IGNyZWF0ZVJ1bkhvb2sodGhpcywgJ2FjdGlvbnMnKTtcbiAgICB0aGlzLmFwcGx5RmlsdGVycyA9IGNyZWF0ZVJ1bkhvb2sodGhpcywgJ2ZpbHRlcnMnLCB0cnVlKTtcbiAgICB0aGlzLmN1cnJlbnRBY3Rpb24gPSBjcmVhdGVDdXJyZW50SG9vayh0aGlzLCAnYWN0aW9ucycpO1xuICAgIHRoaXMuY3VycmVudEZpbHRlciA9IGNyZWF0ZUN1cnJlbnRIb29rKHRoaXMsICdmaWx0ZXJzJyk7XG4gICAgdGhpcy5kb2luZ0FjdGlvbiA9IGNyZWF0ZURvaW5nSG9vayh0aGlzLCAnYWN0aW9ucycpO1xuICAgIHRoaXMuZG9pbmdGaWx0ZXIgPSBjcmVhdGVEb2luZ0hvb2sodGhpcywgJ2ZpbHRlcnMnKTtcbiAgICB0aGlzLmRpZEFjdGlvbiA9IGNyZWF0ZURpZEhvb2sodGhpcywgJ2FjdGlvbnMnKTtcbiAgICB0aGlzLmRpZEZpbHRlciA9IGNyZWF0ZURpZEhvb2sodGhpcywgJ2ZpbHRlcnMnKTtcbiAgfVxuXG59XG4vKiogQHR5cGVkZWYge19Ib29rc30gSG9va3MgKi9cblxuLyoqXG4gKiBSZXR1cm5zIGFuIGluc3RhbmNlIG9mIHRoZSBob29rcyBvYmplY3QuXG4gKlxuICogQHJldHVybiB7SG9va3N9IEEgSG9va3MgaW5zdGFuY2UuXG4gKi9cblxuZnVuY3Rpb24gY3JlYXRlSG9va3MoKSB7XG4gIHJldHVybiBuZXcgX0hvb2tzKCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUhvb2tzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y3JlYXRlSG9va3MuanMubWFwIiwiLyoqXG4gKiBJbnRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IGNyZWF0ZUhvb2tzIGZyb20gJy4vY3JlYXRlSG9va3MnO1xuLyoqIEB0eXBlZGVmIHsoLi4uYXJnczogYW55W10pPT5hbnl9IENhbGxiYWNrICovXG5cbi8qKlxuICogQHR5cGVkZWYgSGFuZGxlclxuICogQHByb3BlcnR5IHtDYWxsYmFja30gY2FsbGJhY2sgIFRoZSBjYWxsYmFja1xuICogQHByb3BlcnR5IHtzdHJpbmd9ICAgbmFtZXNwYWNlIFRoZSBuYW1lc3BhY2VcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSAgIHByaW9yaXR5ICBUaGUgbmFtZXNwYWNlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBIb29rXG4gKiBAcHJvcGVydHkge0hhbmRsZXJbXX0gaGFuZGxlcnMgQXJyYXkgb2YgaGFuZGxlcnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSAgICBydW5zICAgICBSdW4gY291bnRlclxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgQ3VycmVudFxuICogQHByb3BlcnR5IHtzdHJpbmd9IG5hbWUgICAgICAgICBIb29rIG5hbWVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBjdXJyZW50SW5kZXggVGhlIGluZGV4XG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7UmVjb3JkPHN0cmluZywgSG9vaz4gJiB7X19jdXJyZW50OiBDdXJyZW50W119fSBTdG9yZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgeydhY3Rpb25zJyB8ICdmaWx0ZXJzJ30gU3RvcmVLZXlcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4vY3JlYXRlSG9va3MnKS5Ib29rc30gSG9va3NcbiAqL1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdEhvb2tzID0gY3JlYXRlSG9va3MoKTtcbmNvbnN0IHtcbiAgYWRkQWN0aW9uLFxuICBhZGRGaWx0ZXIsXG4gIHJlbW92ZUFjdGlvbixcbiAgcmVtb3ZlRmlsdGVyLFxuICBoYXNBY3Rpb24sXG4gIGhhc0ZpbHRlcixcbiAgcmVtb3ZlQWxsQWN0aW9ucyxcbiAgcmVtb3ZlQWxsRmlsdGVycyxcbiAgZG9BY3Rpb24sXG4gIGFwcGx5RmlsdGVycyxcbiAgY3VycmVudEFjdGlvbixcbiAgY3VycmVudEZpbHRlcixcbiAgZG9pbmdBY3Rpb24sXG4gIGRvaW5nRmlsdGVyLFxuICBkaWRBY3Rpb24sXG4gIGRpZEZpbHRlcixcbiAgYWN0aW9ucyxcbiAgZmlsdGVyc1xufSA9IGRlZmF1bHRIb29rcztcbmV4cG9ydCB7IGNyZWF0ZUhvb2tzLCBhZGRBY3Rpb24sIGFkZEZpbHRlciwgcmVtb3ZlQWN0aW9uLCByZW1vdmVGaWx0ZXIsIGhhc0FjdGlvbiwgaGFzRmlsdGVyLCByZW1vdmVBbGxBY3Rpb25zLCByZW1vdmVBbGxGaWx0ZXJzLCBkb0FjdGlvbiwgYXBwbHlGaWx0ZXJzLCBjdXJyZW50QWN0aW9uLCBjdXJyZW50RmlsdGVyLCBkb2luZ0FjdGlvbiwgZG9pbmdGaWx0ZXIsIGRpZEFjdGlvbiwgZGlkRmlsdGVyLCBhY3Rpb25zLCBmaWx0ZXJzIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJpbXBvcnQge2FkZEZpbHRlciwgYWRkQWN0aW9ufSBmcm9tIFwiQHdvcmRwcmVzcy9ob29rc1wiO1xyXG5cclxuXHJcblNCX0N1c3RvbWl6ZXIuaW5pdFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG5cdFNCX0N1c3RvbWl6ZXIuZXh0cmFEYXRhID0ge1xyXG5cdFx0Li4uU0JfQ3VzdG9taXplci5leHRyYURhdGEsXHJcblx0XHRhbGxGZWVkc1NjcmVlbiA6IHNiY19idWlsZGVyLmFsbEZlZWRzU2NyZWVuLFxyXG5cdFx0ZmVlZHNMaXN0IDogc2JjX2J1aWxkZXIuZmVlZHMsXHJcblx0XHRsZWdhY3lGZWVkc0xpc3Q6IHNiY19idWlsZGVyLmxlZ2FjeUZlZWRzLFxyXG5cdFx0dG9vbHRpcENvbnRlbnQgOiBzYmNfYnVpbGRlci5mZWVkdHlwZXNUb29sdGlwQ29udGVudCxcclxuXHRcdGZlZWRTZXR0aW5nc0RvbU9wdGlvbnMgOiBudWxsLFxyXG5cdFx0c2VsZWN0ZWRGZWVkTW9kZWwgOiB7XHJcblx0XHRcdGNoYW5uZWw6IHNiY19idWlsZGVyLnByZWZpbGxlZENoYW5uZWxJZCxcclxuXHRcdFx0cGxheWxpc3Q6ICcnLFxyXG5cdFx0XHRmYXZvcml0ZXM6IHNiY19idWlsZGVyLnByZWZpbGxlZENoYW5uZWxJZCxcclxuXHRcdFx0c2VhcmNoOiAnJyxcclxuXHRcdFx0bGl2ZTogc2JjX2J1aWxkZXIucHJlZmlsbGVkQ2hhbm5lbElkLFxyXG5cdFx0XHRzaW5nbGU6ICcnLFxyXG5cdFx0XHRhcGlLZXk6ICcnLFxyXG5cdFx0XHRhY2Nlc3NUb2tlbjogJydcclxuXHRcdH0sXHJcblx0XHR5b3V0dWJlQWNjb3VudENvbm5lY3RVUkwgOiBzYmNfYnVpbGRlci55b3V0dWJlQWNjb3VudENvbm5lY3RVUkwsXHJcblx0XHRjb25uZWN0U2l0ZVBhcmFtZXRlcnM6IHNiY19idWlsZGVyLnlvdXR1YmVBY2NvdW50Q29ubmVjdFBhcmFtZXRlcnMsXHJcblx0XHRwcmVmaWxsZWRDaGFubmVsSWQ6IHNiY19idWlsZGVyLnByZWZpbGxlZENoYW5uZWxJZCxcclxuXHRcdGRpc21pc3NMaXRlOiBzYmNfYnVpbGRlci55b3V0dWJlX2ZlZWRfZGlzbWlzc19saXRlLFxyXG5cdFx0c2hvdWxkU2hvd0ZlZWRBUElGb3JtIDogZmFsc2UsXHJcblx0XHRzaG91bGRTaG93TWFudWFsQ29ubmVjdCA6IGZhbHNlLFxyXG5cdFx0c2hvd1Nob3dZVEFjY291bnRXYXJuaW5nIDogZmFsc2UsXHJcblxyXG5cdFx0c3dfZmVlZDogZmFsc2UsXHJcblx0XHRzd19mZWVkX2lkOiBmYWxzZVxyXG5cdH1cclxuXHJcblx0U0JfQ3VzdG9taXplci5leHRyYU1ldGhvZHMgPSB7XHJcblx0XHQuLi5TQl9DdXN0b21pemVyLmV4dHJhTWV0aG9kcyxcclxuXHRcdC8qKlxyXG5cdFx0ICogQ2hhbmdlIFNldHRpbmdzIFZhbHVlXHJcblx0XHQgKlxyXG5cdFx0ICogQHNpbmNlIDIuMFxyXG5cdFx0ICovXHJcblx0XHRjaGFuZ2VTZXR0aW5nVmFsdWUgOiBmdW5jdGlvbihzZXR0aW5nSUQsIHZhbHVlLCBkb1Byb2Nlc3MgPSB0cnVlLCBhamF4QWN0aW9uID0gZmFsc2UpIHtcclxuXHRcdFx0dmFyIHNlbGYgPSB0aGlzO1xyXG5cdFx0XHRpZihkb1Byb2Nlc3Mpe1xyXG5cdFx0XHRcdHNlbGYuY3VzdG9taXplckZlZWREYXRhLnNldHRpbmdzW3NldHRpbmdJRF0gPSB2YWx1ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZihhamF4QWN0aW9uICE9PSBmYWxzZSl7XHJcblx0XHRcdFx0c2VsZi5jdXN0b21pemVyQ29udHJvbEFqYXhBY3Rpb24oYWpheEFjdGlvbiwgc2V0dGluZ0lEKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRzZWxmLnJlZ2VuZXJhdGVMYXlvdXQoc2V0dGluZ0lEKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0Y2hlY2tFeHRlbnNpb25BY3RpdmUgOiBmdW5jdGlvbihleHRlbnNpb24pe1xyXG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XHJcblx0XHRcdHJldHVybiBzZWxmLmFjdGl2ZUV4dGVuc2lvbnNbZXh0ZW5zaW9uXTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBTaG91bGQgc2hvdyBvdmVybGF5IGZvciB0aGUgc2lkZWJhciBlbGVtZW50cyBvbiB0b3BcclxuXHRcdCAqIFxyXG5cdFx0ICogQHNpbmNlIDIuMFxyXG5cdFx0ICovXHJcblx0XHRzaG91bGRTaG93T3ZlcmxheShjb250cm9sKSB7XHJcblx0XHRcdHZhciBzZWxmID0gdGhpcztcclxuXHRcdFx0aWYgKCAhc2VsZi5zYnlJc1BybyB8fCBcclxuXHRcdFx0XHRcdHNlbGYuc2J5TGljZW5zZU5vdGljZUFjdGl2ZSB8fCBcclxuXHRcdFx0XHRcdCggKCBjb250cm9sLmNoZWNrRXh0ZW5zaW9uUG9wdXAgPT0gJ2NhbGxfdG9fYWN0aW9uJyB8fCBjb250cm9sLmNoZWNrRXh0ZW5zaW9uUG9wdXAgPT0gJ2FkdmFuY2VkRmlsdGVycycgKSAmJiBcclxuXHRcdFx0XHRcdCggIXNlbGYuaGFzRmVhdHVyZSgnY2FsbF90b19hY3Rpb25zJykgfHwgIXNlbGYuaGFzRmVhdHVyZSgnYWR2YW5jZWRGaWx0ZXJzJykgKVxyXG5cdFx0XHRcdFx0KSBcclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRyZXR1cm4gY29udHJvbC5jaGVja0V4dGVuc2lvblBvcHVwICE9IHVuZGVmaW5lZCB8fCAoXHJcblx0XHRcdFx0XHRjb250cm9sLmNvbmRpdGlvbiAhPSB1bmRlZmluZWQgfHwgXHJcblx0XHRcdFx0XHRjb250cm9sLmNoZWNrRXh0ZW5zaW9uICE9IHVuZGVmaW5lZCB8fCBcclxuXHRcdFx0XHRcdGNvbnRyb2wuY2hlY2tFeHRlbnNpb25EaW1tZWQgIT0gdW5kZWZpbmVkICA/IFxyXG5cdFx0XHRcdFx0IXNlbGYuY2hlY2tDb250cm9sQ29uZGl0aW9uKGNvbnRyb2wuY29uZGl0aW9uLCBjb250cm9sLmNoZWNrRXh0ZW5zaW9uLCBjb250cm9sLmNoZWNrRXh0ZW5zaW9uRGltbWVkKSA6IFxyXG5cdFx0XHRcdFx0ZmFsc2VcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0cmV0dXJuIGNvbnRyb2wuY29uZGl0aW9uICE9IHVuZGVmaW5lZCB8fCBcclxuXHRcdFx0XHRcdGNvbnRyb2wuY2hlY2tFeHRlbnNpb24gIT0gdW5kZWZpbmVkIHx8IFxyXG5cdFx0XHRcdFx0Y29udHJvbC5jaGVja0V4dGVuc2lvbkRpbW1lZCAhPSB1bmRlZmluZWQgID8gXHJcblx0XHRcdFx0XHQhc2VsZi5jaGVja0NvbnRyb2xDb25kaXRpb24oY29udHJvbC5jb25kaXRpb24sIGNvbnRyb2wuY2hlY2tFeHRlbnNpb24sIGNvbnRyb2wuY2hlY2tFeHRlbnNpb25EaW1tZWQpIDogXHJcblx0XHRcdFx0XHRmYWxzZTtcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFNob3VsZCBzaG93IHRvZ2dsZXNldCB0eXBlIGNvdmVyXHJcblx0XHQgKiBcclxuXHRcdCAqIEBzaW5jZSAyLjBcclxuXHRcdCAqL1xyXG5cdFx0c2hvdWxkU2hvd1RvZ2dsZXNldENvdmVyIDogZnVuY3Rpb24odG9nZ2xlKSB7XHJcblx0XHRcdHZhciBzZWxmID0gdGhpcztcclxuXHRcdFx0aWYgKCAhc2VsZi5zYnlJc1BybyB8fCBzZWxmLnNieUxpY2Vuc2VOb3RpY2VBY3RpdmUgKSB7XHJcblx0XHRcdFx0cmV0dXJuIHRvZ2dsZS5jaGVja0V4dGVuc2lvbiAhPSB1bmRlZmluZWQgJiYgIXNlbGYuY2hlY2tFeHRlbnNpb25BY3RpdmUodG9nZ2xlLmNoZWNrRXh0ZW5zaW9uKVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHJldHVybiBmYWxzZVxyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogT3BlbiBleHRlbnNpb24gcG9wdXAgZnJvbSB0b2dnbGVzZXQgY292ZXJcclxuXHRcdCAqIFxyXG5cdFx0ICogQHNpbmNlIDIuMFxyXG5cdFx0ICovXHJcblx0XHR0b2dnbGVzZXRFeHRQb3B1cCA6IGZ1bmN0aW9uKHRvZ2dsZSkge1xyXG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XHJcblx0XHRcdHNlbGYudmlld3NBY3RpdmUuZXh0ZW5zaW9uc1BvcHVwRWxlbWVudCA9IHRvZ2dsZS5jaGVja0V4dGVuc2lvbjtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBTaG9ydGNvZGUgR2xvYmFsIExheW91dCBTZXR0aW5nc1xyXG5cdFx0ICpcclxuXHRcdCAqIEBzaW5jZSAyLjBcclxuXHRcdCAqL1xyXG5cdFx0cmVnZW5lcmF0ZUxheW91dCA6IGZ1bmN0aW9uKHNldHRpbmdJRCkge1xyXG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsXHJcblx0XHRcdFx0cmVnZW5lcmF0ZUZlZWRIVE1MID0gXHRbXHJcblx0XHRcdFx0XHQnbGF5b3V0J1xyXG5cdFx0XHRcdF0sXHJcblx0XHRcdFx0cmVsYXlvdXRGZWVkID0gW1xyXG5cdFx0XHRcdFx0J2xheW91dCcsXHJcblx0XHRcdFx0XHQnY2Fyb3VzZWxhcnJvd3MnLFxyXG5cdFx0XHRcdFx0J2Nhcm91c2VscGFnJyxcclxuXHRcdFx0XHRcdCdjYXJvdXNlbGF1dG9wbGF5JyxcclxuXHRcdFx0XHRcdCdjYXJvdXNlbHRpbWUnLFxyXG5cdFx0XHRcdFx0J2Nhcm91c2VsbG9vcCcsXHJcblx0XHRcdFx0XHQnY2Fyb3VzZWxyb3dzJyxcclxuXHRcdFx0XHRcdCdjb2xzJyxcclxuXHRcdFx0XHRcdCdjb2xzdGFibGV0JyxcclxuXHRcdFx0XHRcdCdjb2xzbW9iaWxlJyxcclxuXHRcdFx0XHRcdCdpbWFnZXBhZGRpbmcnXHJcblx0XHRcdFx0XTtcclxuXHRcdFx0aWYoIHJlbGF5b3V0RmVlZC5pbmNsdWRlcyggc2V0dGluZ0lEICkgKXtcclxuXHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XHJcblx0XHRcdFx0XHRzZWxmLnNldFNob3J0Y29kZUdsb2JhbFNldHRpbmdzKHRydWUpO1xyXG5cdFx0XHRcdH0sIDIwMClcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEJhY2sgdG8gYWxsIGZlZWRzXHJcblx0XHQgKlxyXG5cdFx0ICogQHNpbmNlIDIuMFxyXG5cdFx0ICovXHJcblx0XHRiYWNrVG9BbGxGZWVkcyA6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XHJcblx0XHRcdGlmICggSlNPTi5zdHJpbmdpZnkoc2VsZi5jdXN0b21pemVyRmVlZERhdGFJbml0aWFsKSA9PT0gSlNPTi5zdHJpbmdpZnkoc2VsZi5jdXN0b21pemVyRmVlZERhdGEpICkge1xyXG5cdFx0XHRcdHdpbmRvdy5sb2NhdGlvbiA9IHNlbGYuYnVpbGRlclVybDtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRzZWxmLm9wZW5EaWFsb2dCb3goJ2JhY2tBbGxUb0ZlZWQnKTtcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIE9wZW4gRGlhbG9nIEJveFxyXG5cdFx0ICpcclxuXHRcdCAqIEBzaW5jZSAyLjBcclxuXHRcdCAqL1xyXG5cdFx0b3BlbkRpYWxvZ0JveCA6IGZ1bmN0aW9uKHR5cGUsIGFyZ3MgPSBbXSl7XHJcblx0XHRcdHZhciBzZWxmID0gdGhpcyxcclxuXHRcdFx0XHRoZWFkaW5nID0gc2VsZi5kaWFsb2dCb3hQb3B1cFNjcmVlblt0eXBlXS5oZWFkaW5nLFxyXG5cdFx0XHRcdGRlc2NyaXB0aW9uID0gc2VsZi5kaWFsb2dCb3hQb3B1cFNjcmVlblt0eXBlXS5kZXNjcmlwdGlvbixcclxuXHRcdFx0XHRjdXN0b21CdXR0b25zID0gc2VsZi5kaWFsb2dCb3hQb3B1cFNjcmVlblt0eXBlXS5jdXN0b21CdXR0b25zO1xyXG5cdFx0XHRzd2l0Y2ggKHR5cGUpIHtcclxuXHRcdFx0XHRjYXNlIFwiZGVsZXRlU2luZ2xlRmVlZFwiOlxyXG5cdFx0XHRcdFx0c2VsZi5mZWVkVG9EZWxldGUgPSBhcmdzO1xyXG5cdFx0XHRcdFx0aGVhZGluZyA9IGhlYWRpbmcucmVwbGFjZShcIiNcIiwgc2VsZi5mZWVkVG9EZWxldGUuZmVlZF9uYW1lKTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHRcdHNlbGYuZGlhbG9nQm94ID0ge1xyXG5cdFx0XHRcdGFjdGl2ZSA6IHRydWUsXHJcblx0XHRcdFx0dHlwZSA6IHR5cGUsXHJcblx0XHRcdFx0aGVhZGluZyA6IGhlYWRpbmcsXHJcblx0XHRcdFx0ZGVzY3JpcHRpb24gOiBkZXNjcmlwdGlvbixcclxuXHRcdFx0XHRjdXN0b21CdXR0b25zIDogY3VzdG9tQnV0dG9uc1xyXG5cdFx0XHR9O1xyXG5cdFx0XHR3aW5kb3cuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQ29uZmlybSBEaWFsb2cgQm94IEFjdGlvbnNcclxuXHRcdCAqXHJcblx0XHQgKiBAc2luY2UgMi4wXHJcblx0XHQgKi9cclxuXHRcdGNvbmZpcm1EaWFsb2dBY3Rpb24gOiBmdW5jdGlvbigpe1xyXG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XHJcblx0XHRcdHN3aXRjaCAoc2VsZi5kaWFsb2dCb3gudHlwZSkge1xyXG5cdFx0XHRcdGNhc2UgJ2RlbGV0ZVNpbmdsZUZlZWQnOlxyXG5cdFx0XHRcdFx0c2VsZi5mZWVkQWN0aW9uRGVsZXRlKFtzZWxmLmZlZWRUb0RlbGV0ZS5pZF0pO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSAnZGVsZXRlTXVsdGlwbGVGZWVkcyc6XHJcblx0XHRcdFx0XHRzZWxmLmZlZWRBY3Rpb25EZWxldGUoc2VsZi5mZWVkc1NlbGVjdGVkKTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgJ2JhY2tBbGxUb0ZlZWQnOlxyXG5cdFx0XHRcdFx0d2luZG93LmxvY2F0aW9uID0gc2VsZi5idWlsZGVyVXJsO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBEZWxldGUgRmVlZFxyXG5cdFx0ICpcclxuXHRcdCAqIEBzaW5jZSAyLjBcclxuXHRcdCAqL1xyXG5cdFx0ZmVlZEFjdGlvbkRlbGV0ZSA6IGZ1bmN0aW9uKGZlZWRzX2lkcyl7XHJcblx0XHRcdHZhciBzZWxmID0gdGhpcyxcclxuXHRcdFx0XHRmZWVkc0RlbGV0ZURhdGEgPSB7XHJcblx0XHRcdFx0XHRhY3Rpb24gOiAnc2J5X2ZlZWRfc2F2ZXJfbWFuYWdlcl9kZWxldGVfZmVlZHMnLFxyXG5cdFx0XHRcdFx0ZmVlZHNfaWRzIDogZmVlZHNfaWRzXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0c2VsZi5hamF4UG9zdChmZWVkc0RlbGV0ZURhdGEsIGZ1bmN0aW9uKF9yZWYpe1xyXG5cdFx0XHRcdHZhciBkYXRhID0gX3JlZi5kYXRhO1xyXG5cdFx0XHRcdHNlbGYuZmVlZHNMaXN0ID0gT2JqZWN0LnZhbHVlcyhPYmplY3QuYXNzaWduKHt9LCBkYXRhKSk7XHJcblx0XHRcdFx0c2VsZi5mZWVkc1NlbGVjdGVkID0gW107XHJcblx0XHRcdH0pO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEVuYWJsZSAmIFNob3cgQ29sb3IgUGlja2VyXHJcblx0XHQgKlxyXG5cdFx0ICogQHNpbmNlIDIuMFxyXG5cdFx0ICovXHJcblx0XHRzaG93Q29sb3JQaWNrZXJQb3NwdXAgOiBmdW5jdGlvbihjb250cm9sSWQpe1xyXG5cdFx0XHR0aGlzLmN1c3RvbWl6ZXJTY3JlZW5zLmFjdGl2ZUNvbG9yUGlja2VyID0gY29udHJvbElkO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEhpZGUgQ29sb3IgUGlja2VyXHJcblx0XHQgKlxyXG5cdFx0ICogQHNpbmNlIDIuMFxyXG5cdFx0ICovXHJcblx0XHRoaWRlQ29sb3JQaWNrZXJQb3B1cCA6IGZ1bmN0aW9uKCl7XHJcblx0XHRcdHRoaXMuY3VzdG9taXplclNjcmVlbnMuYWN0aXZlQ29sb3JQaWNrZXIgPSBudWxsO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEdldCBGZWVkIFByZXZpZXcgR2xvYmFsIENTUyBDbGFzc1xyXG5cdFx0ICpcclxuXHRcdCAqIEBzaW5jZSAyLjBcclxuXHRcdCAqIEByZXR1cm4gU3RyaW5nXHJcblx0XHQgKi9cclxuXHRcdGdldFBhbGV0dGVDbGFzcyA6IGZ1bmN0aW9uKGNvbnRleHQgPSAnJyl7XHJcblx0XHRcdHZhciBzZWxmID0gdGhpcyxcclxuXHRcdFx0XHRjb2xvclBhbGV0dGUgPSBzZWxmLmN1c3RvbWl6ZXJGZWVkRGF0YS5zZXR0aW5ncy5jb2xvcnBhbGV0dGU7XHJcblxyXG5cdFx0XHRpZihzZWxmLmNoZWNrTm90RW1wdHkoIGNvbG9yUGFsZXR0ZSApKXtcclxuXHRcdFx0XHR2YXIgZmVlZElEID0gY29sb3JQYWxldHRlID09PSAnY3VzdG9tJyAgPyAoJ18nICsgc2VsZi5jdXN0b21pemVyRmVlZERhdGEuZmVlZF9pbmZvLmlkKSAgOiAnJztcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhjb2xvclBhbGV0dGUgIT09ICdpbmhlcml0JyA/ICcgc2J5JyArIGNvbnRleHQgKyAnX3BhbGV0dGVfJyArIGNvbG9yUGFsZXR0ZSArIGZlZWRJRDogJycpO1xyXG5cdFx0XHRcdHJldHVybiBjb2xvclBhbGV0dGUgIT09ICdpbmhlcml0JyA/ICcgc2J5JyArIGNvbnRleHQgKyAnX3BhbGV0dGVfJyArIGNvbG9yUGFsZXR0ZSArIGZlZWRJRDogJyc7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuICcnO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIENoZWNrIGlmIFZhbHVlIGlzIEVtcHR5XHJcblx0XHQgKlxyXG5cdFx0ICogQHNpbmNlIDIuMFxyXG5cdFx0ICpcclxuXHRcdCAqIEByZXR1cm4gYm9vbGVhblxyXG5cdFx0ICovXHJcblx0XHRjaGVja05vdEVtcHR5IDogZnVuY3Rpb24odmFsdWUpe1xyXG5cdFx0XHRyZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiB2YWx1ZS5yZXBsYWNlKC8gL2dpLCcnKSAhPSAnJztcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBHZXQgZmVlZCBjb250YWluZXIgY2xhc3NcclxuXHRcdCAqXHJcblx0XHQgKiBAc2luY2UgMi4wXHJcblx0XHQgKlxyXG5cdFx0ICogQHJldHVybnMgc3RyaW5nXHJcblx0XHQgKi9cclxuXHRcdGdldEZlZWRDb250YWluZXJDbGFzc2VzOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0bGV0IHNlbGYgPSB0aGlzO1xyXG5cdFx0XHRsZXQgY2xhc3NlcyA9IFtcclxuXHRcdFx0XHQnc2JfeW91dHViZScsXHJcblx0XHRcdFx0J3NieV9sYXlvdXRfJyArIHNlbGYuY3VzdG9taXplckZlZWREYXRhLnNldHRpbmdzLmxheW91dCxcclxuXHRcdFx0XHQnc2J5X2NvbF8nICsgc2VsZi5nZXRDb2xTZXR0aW5ncygpLFxyXG5cdFx0XHRcdCdzYnlfbW9iX2NvbF8nICsgc2VsZi5nZXRNb2JDb2xTZXR0aW5ncygpLFxyXG5cdFx0XHRcdCdzYnlfcGFsZXR0ZV8nICsgc2VsZi5nZXRDb2xvclBhbGV0dGVDbGFzcygpLFxyXG5cdFx0XHRdO1xyXG5cdFx0XHRyZXR1cm4gY2xhc3Nlcy5qb2luKCcgJyk7XHJcblx0XHR9LFxyXG5cclxuXHRcdGdldENvbG9yUGFsZXR0ZUNsYXNzIDogZnVuY3Rpb24oKSB7XHJcblx0XHRcdGxldCBzZWxmID0gdGhpcztcclxuXHRcdFx0aWYgKCBzZWxmLmN1c3RvbWl6ZXJGZWVkRGF0YS5zZXR0aW5ncy5jb2xvcnBhbGV0dGUgPT0gJ2N1c3RvbScgKSB7XHJcblx0XHRcdFx0cmV0dXJuIHNlbGYuY3VzdG9taXplckZlZWREYXRhLnNldHRpbmdzLmNvbG9ycGFsZXR0ZSArICdfJyArIHNlbGYuY3VzdG9taXplckZlZWREYXRhLmZlZWRfaW5mby5pZDtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRyZXR1cm4gc2VsZi5jdXN0b21pemVyRmVlZERhdGEuc2V0dGluZ3MuY29sb3JwYWxldHRlO1xyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogR2V0IENvbCBTZXR0aW5nc1xyXG5cdFx0ICpcclxuXHRcdCAqIEBzaW5jZSAyLjBcclxuXHRcdCAqL1xyXG5cdFx0Z2V0Q29sU2V0dGluZ3M6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRsZXQgc2VsZiA9IHRoaXM7XHJcblxyXG5cdFx0XHRpZiAoIHNlbGYuY3VzdG9taXplckZlZWREYXRhLnNldHRpbmdzWydsYXlvdXQnXSA9PSAnbGlzdCcgfHwgc2VsZi5jdXN0b21pemVyU2NyZWVucy5wcmV2aWV3U2NyZWVuID09PSAnbW9iaWxlJyApIHtcclxuXHRcdFx0XHRyZXR1cm4gMDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKCBzZWxmLmN1c3RvbWl6ZXJGZWVkRGF0YS5zZXR0aW5nc1snY29scyddICkge1xyXG5cdFx0XHRcdHJldHVybiBzZWxmLmN1c3RvbWl6ZXJGZWVkRGF0YS5zZXR0aW5nc1snY29scyddO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gMDtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBHZXQgTW9iIENvbCBTZXR0aW5nc1xyXG5cdFx0ICpcclxuXHRcdCAqIEBzaW5jZSAyLjBcclxuXHRcdCAqL1xyXG5cdFx0Z2V0TW9iQ29sU2V0dGluZ3M6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRsZXQgc2VsZiA9IHRoaXM7XHJcblxyXG5cdFx0XHRpZiAoIHNlbGYuY3VzdG9taXplckZlZWREYXRhLnNldHRpbmdzWydsYXlvdXQnXSA9PSAnbGlzdCcgKSB7XHJcblx0XHRcdFx0cmV0dXJuIDA7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCBzZWxmLmN1c3RvbWl6ZXJGZWVkRGF0YS5zZXR0aW5nc1snY29sc21vYmlsZSddICkge1xyXG5cdFx0XHRcdHJldHVybiBzZWxmLmN1c3RvbWl6ZXJGZWVkRGF0YS5zZXR0aW5nc1snY29sc21vYmlsZSddO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gMDtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBDaGVjayBpZiBoZWFkZXIgc3Vic2NyaWJlcnMgbmVlZHMgdG8gc2hvd1xyXG5cdFx0ICpcclxuXHRcdCAqIEBzaW5jZSAyLjBcclxuXHRcdCAqL1xyXG5cdFx0Y2hlY2tTaG91bGRTaG93U3Vic2NyaWJlcnM6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5jdXN0b21pemVyRmVlZERhdGEuc2V0dGluZ3Muc2hvd3N1YnNjcmliZSA9PSB0cnVlID8gXCJzaG93blwiIDogJyc7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQ2hlY2sgaWYgRGF0YSBTZXR0aW5nIGlzIEVuYWJsZWRcclxuXHRcdCAqXHJcblx0XHQgKiBAc2luY2UgMi4wXHJcblx0XHQgKlxyXG5cdFx0ICogQHJldHVybiBib29sZWFuXHJcblx0XHQgKi9cclxuXHRcdHZhbHVlSXNFbmFibGVkIDogZnVuY3Rpb24odmFsdWUpe1xyXG5cdFx0XHRyZXR1cm4gdmFsdWUgPT0gMSB8fCB2YWx1ZSA9PSB0cnVlIHx8IHZhbHVlID09ICd0cnVlJyB8fCB2YWx1ZSA9PSAnb24nO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvL0NoYW5nZSBTd2l0Y2hlciBTZXR0aW5nc1xyXG5cdFx0Y2hhbmdlU3dpdGNoZXJTZXR0aW5nVmFsdWUgOiBmdW5jdGlvbihzZXR0aW5nSUQsIG9uVmFsdWUsIG9mZlZhbHVlLCBhamF4QWN0aW9uID0gZmFsc2UsIGV4dGVuc2lvbikge1xyXG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XHJcblx0XHRcdGNvbnNvbGUubG9nKGV4dGVuc2lvbik7XHJcblx0XHRcdGlmIChPYmplY3Qua2V5cyhzZWxmLmluQWN0aXZlRXh0ZW5zaW9ucykuaW5jbHVkZXMoc2V0dGluZ0lEKSkge1xyXG5cdFx0XHRcdHNlbGYudmlld3NBY3RpdmUuZXh0ZW5zaW9uc1BvcHVwRWxlbWVudCA9IHNlbGYuaW5BY3RpdmVFeHRlbnNpb25zW3NldHRpbmdJRF07XHJcblx0XHRcdH1cclxuXHRcdFx0c2VsZi5jdXN0b21pemVyRmVlZERhdGEuc2V0dGluZ3Nbc2V0dGluZ0lEXSA9IHNlbGYuY3VzdG9taXplckZlZWREYXRhLnNldHRpbmdzW3NldHRpbmdJRF0gPT0gb25WYWx1ZSA/IG9mZlZhbHVlIDogb25WYWx1ZTtcclxuXHRcdFx0aWYoYWpheEFjdGlvbiAhPT0gZmFsc2Upe1xyXG5cdFx0XHRcdHNlbGYuY3VzdG9taXplckNvbnRyb2xBamF4QWN0aW9uKGFqYXhBY3Rpb24pO1xyXG5cdFx0XHR9XHJcblx0XHRcdHNlbGYucmVnZW5lcmF0ZUxheW91dChzZXR0aW5nSUQpO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFBhcnNlIEpTT05cclxuXHRcdCAqXHJcblx0XHQgKiBAc2luY2UgMi4wXHJcblx0XHQgKlxyXG5cdFx0ICogQHJldHVybiBqc29uT2JqZWN0IC8gQm9vbGVhblxyXG5cdFx0ICovXHJcblx0XHRqc29uUGFyc2UgOiBmdW5jdGlvbihqc29uU3RyaW5nKXtcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRyZXR1cm4gSlNPTi5wYXJzZShqc29uU3RyaW5nKTtcclxuXHRcdFx0fSBjYXRjaChlKSB7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogR2V0IGN1c3RvbSBoZWFkZXIgdGV4dFxyXG5cdFx0ICpcclxuXHRcdCAqIEBzaW5jZSAyLjBcclxuXHRcdCAqL1xyXG5cdFx0Z2V0Q3VzdG9tSGVhZGVyVGV4dCA6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5jdXN0b21pemVyRmVlZERhdGEuc2V0dGluZ3MuY3VzdG9taGVhZGVydGV4dDtcclxuXHRcdH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFNob3VsZCBzaG93IHRoZSBzdGFuZGFyZCBoZWFkZXJcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBzaW5jZSAyLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICBzaG91bGRTaG93U3RhbmRhcmRIZWFkZXI6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICBsZXQgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgICAgIHJldHVybiBzZWxmLmN1c3RvbWl6ZXJGZWVkRGF0YS5zZXR0aW5ncy5zaG93aGVhZGVyICYmIHNlbGYuY3VzdG9taXplckZlZWREYXRhLnNldHRpbmdzLmhlYWRlcnN0eWxlID09PSAnc3RhbmRhcmQnO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFNob3VsZCBzaG93IHRoZSB0ZXh0IHN0eWxlIGhlYWRlclxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQHNpbmNlIDIuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNob3VsZFNob3dUZXh0SGVhZGVyOiBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgbGV0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICAgICByZXR1cm4gc2VsZi5jdXN0b21pemVyRmVlZERhdGEuc2V0dGluZ3Muc2hvd2hlYWRlciAmJiBzZWxmLmN1c3RvbWl6ZXJGZWVkRGF0YS5zZXR0aW5ncy5oZWFkZXJzdHlsZSA9PT0gJ3RleHQnO1xyXG4gICAgICAgIH0sXHJcblxyXG5cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEdldCBmbGFncyBhdHRyaWJ1dGVzXHJcblx0XHQgKlxyXG5cdFx0ICogQHNpbmNlIDIuMFxyXG5cdFx0ICovXHJcblx0XHRnZXRGbGFnc0F0dHIgOiBmdW5jdGlvbiggKSB7XHJcblx0XHRcdGxldCBzZWxmID0gdGhpcyxcclxuXHRcdFx0XHRmbGFncyA9IFtdO1xyXG5cclxuXHRcdFx0aWYgKCBzZWxmLmN1c3RvbWl6ZXJGZWVkRGF0YS5zZXR0aW5nc1snZGlzYWJsZV9yZXNpemUnXSApIHtcclxuXHRcdFx0XHRmbGFncy5wdXNoKCdyZXNpemVEaXNhYmxlJyk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCBzZWxmLmN1c3RvbWl6ZXJGZWVkRGF0YS5zZXR0aW5nc1snZmF2b3JfbG9jYWwnXSApIHtcclxuXHRcdFx0XHRmbGFncy5wdXNoKCdmYXZvckxvY2FsJyk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCBzZWxmLmN1c3RvbWl6ZXJGZWVkRGF0YS5zZXR0aW5nc1snZGlzYWJsZV9qc19pbWFnZV9sb2FkaW5nJ10gKSB7XHJcblx0XHRcdFx0ZmxhZ3MucHVzaCgnaW1hZ2VMb2FkRGlzYWJsZScpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICggc2VsZi5jdXN0b21pemVyRmVlZERhdGEuc2V0dGluZ3NbJ2FqYXhfcG9zdF9sb2FkJ10gKSB7XHJcblx0XHRcdFx0ZmxhZ3MucHVzaCgnYWpheFBvc3RMb2FkJyk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCBzZWxmLmN1c3RvbWl6ZXJGZWVkRGF0YS5zZXR0aW5nc1sncGxheWVycmF0aW8nXSA9PT0gJzM6NCcgKSB7XHJcblx0XHRcdFx0ZmxhZ3MucHVzaCgnbmFycm93UGxheWVyJyk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCBzZWxmLmN1c3RvbWl6ZXJGZWVkRGF0YS5zZXR0aW5nc1snZGlzYWJsZWNkbiddICkge1xyXG5cdFx0XHRcdGZsYWdzLnB1c2goJ2Rpc2FibGVjZG4nKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIGZsYWdzLnRvU3RyaW5nKCk7XHJcblx0XHR9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBTaG91bGQgc2hvdyBnYWxsZXJ5IGxheW91dCBwbGF5ZXJcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBzaW5jZSAyLjBcclxuICAgICAgICAgKi9cclxuICAgICAgICBzaG91bGRTaG93UGxheWVyIDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICAgICAgaWYgKCBzZWxmLmN1c3RvbWl6ZXJGZWVkRGF0YS5zZXR0aW5ncy5sYXlvdXQgIT0gJ2dhbGxlcnknICkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0sXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBTd2l0Y2ggdG8gVmlkZW9zIHNlY3Rpb25zXHJcblx0XHQgKiBGcm9tIEZlZWQgTGF5b3V0IHNlY3Rpb24gYm90dG9tIGxpbmtcclxuXHRcdCAqXHJcblx0XHQgKiBAc2luY2UgMi4wXHJcblx0XHQgKi9cclxuXHRcdHN3aXRjaFRvVmlkZW9zU2VjdGlvbjogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHZhciBzZWxmID0gdGhpcztcclxuXHRcdFx0c2VsZi5jdXN0b21pemVyU2NyZWVucy5wYXJlbnRBY3RpdmVTZWN0aW9uID0gbnVsbDtcclxuXHRcdFx0c2VsZi5jdXN0b21pemVyU2NyZWVucy5wYXJlbnRBY3RpdmVTZWN0aW9uRGF0YSA9IG51bGw7XHJcblx0XHRcdHNlbGYuY3VzdG9taXplclNjcmVlbnMuYWN0aXZlU2VjdGlvbiA9ICdjdXN0b21pemVfdmlkZW9zJztcclxuXHRcdFx0c2VsZi5jdXN0b21pemVyU2NyZWVucy5hY3RpdmVTZWN0aW9uRGF0YSA9IHNlbGYuY3VzdG9taXplclNpZGViYXJCdWlsZGVyLmN1c3RvbWl6ZS5zZWN0aW9ucy5jdXN0b21pemVfdmlkZW9zO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFNob3J0Y29kZSBHbG9iYWwgTGF5b3V0IFNldHRpbmdzXHJcblx0XHQgKlxyXG5cdFx0ICogQHNpbmNlIDIuMFxyXG5cdFx0ICovXHJcblx0XHRzZXRTaG9ydGNvZGVHbG9iYWxTZXR0aW5ncyA6IGZ1bmN0aW9uKGZseVByZXZpZXcgPSBmYWxzZSl7XHJcblx0XHRcdGxldCBzZWxmID0gdGhpcyxcclxuXHRcdFx0XHR5b3V0dWJlRmVlZCA9IGpRdWVyeShcImh0bWxcIikuZmluZChcIi5zYl95b3V0dWJlXCIpLFxyXG5cdFx0XHRcdGZlZWRTZXR0aW5ncyA9IHNlbGYuanNvblBhcnNlKHlvdXR1YmVGZWVkLmF0dHIoJ2RhdGEtb3B0aW9ucycpKSxcclxuXHRcdFx0XHRjdXN0b21pemVyU2V0dGluZ3MgPSBzZWxmLmN1c3RvbWl6ZXJGZWVkRGF0YS5zZXR0aW5ncztcclxuXHJcblx0XHRcdFx0aWYgKCAheW91dHViZUZlZWQubGVuZ3RoICkge1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0aWYoIGN1c3RvbWl6ZXJTZXR0aW5ncy5sYXlvdXQgPT09ICdjYXJvdXNlbCcgKXtcclxuXHRcdFx0XHRsZXQgYXJyb3dzIFx0XHQ9IHNlbGYudmFsdWVJc0VuYWJsZWQoIGN1c3RvbWl6ZXJTZXR0aW5nc1snY2Fyb3VzZWxhcnJvd3MnXSApLFxyXG5cdFx0XHRcdFx0cGFnIFx0XHQ9IHNlbGYudmFsdWVJc0VuYWJsZWQoIGN1c3RvbWl6ZXJTZXR0aW5nc1snY2Fyb3VzZWxwYWcnXSApLFxyXG5cdFx0XHRcdFx0YXV0b3BsYXkgXHQ9IHNlbGYudmFsdWVJc0VuYWJsZWQoIGN1c3RvbWl6ZXJTZXR0aW5nc1snY2Fyb3VzZWxhdXRvcGxheSddICksXHJcblx0XHRcdFx0XHR0aW1lIFx0XHQ9IGF1dG9wbGF5ID8gcGFyc2VJbnQoY3VzdG9taXplclNldHRpbmdzWydjYXJvdXNlbHRpbWUnXSkgOiBmYWxzZSxcclxuXHRcdFx0XHRcdGxvb3AgXHRcdD0gc2VsZi5jaGVja05vdEVtcHR5KGN1c3RvbWl6ZXJTZXR0aW5nc1snY2Fyb3VzZWxsb29wJ10pICYmIGN1c3RvbWl6ZXJTZXR0aW5nc1snY2Fyb3VzZWxsb29wJ10gIT09ICdyZXdpbmQnID8gZmFsc2UgOiB0cnVlLFxyXG5cdFx0XHRcdFx0cm93cyBcdFx0PSBjdXN0b21pemVyU2V0dGluZ3NbJ2Nhcm91c2Vscm93cyddICA/IE1hdGgubWluKCBwYXJzZUludChjdXN0b21pemVyU2V0dGluZ3NbJ2Nhcm91c2Vscm93cyddKSwgMikgOiAxO1xyXG5cdFx0XHRcdGRlbGV0ZSBmZWVkU2V0dGluZ3NbJ2dhbGxlcnknXTtcclxuXHRcdFx0XHRkZWxldGUgZmVlZFNldHRpbmdzWydtYXNvbnJ5J107XHJcblx0XHRcdFx0ZGVsZXRlIGZlZWRTZXR0aW5nc1snZ3JpZCddO1xyXG5cdFx0XHRcdGZlZWRTZXR0aW5nc1snY2Fyb3VzZWwnXSA9IFthcnJvd3MsIHBhZywgYXV0b3BsYXksIHRpbWUsIGxvb3AsIHJvd3NdO1xyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2UgaWYoY3VzdG9taXplclNldHRpbmdzLmxheW91dCA9PSAnZ3JpZCcpe1xyXG5cdFx0XHRcdGRlbGV0ZSBmZWVkU2V0dGluZ3NbJ2dhbGxlcnknXTtcclxuXHRcdFx0XHRkZWxldGUgZmVlZFNldHRpbmdzWydtYXNvbnJ5J107XHJcblx0XHRcdH1cclxuXHRcdFx0ZWxzZSBpZihjdXN0b21pemVyU2V0dGluZ3MubGF5b3V0ID09ICdtYXNvbnJ5Jyl7XHJcblx0XHRcdFx0ZGVsZXRlIGZlZWRTZXR0aW5nc1snZ2FsbGVyeSddO1xyXG5cdFx0XHRcdGRlbGV0ZSBmZWVkU2V0dGluZ3NbJ2dyaWQnXTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIGlmKGN1c3RvbWl6ZXJTZXR0aW5ncy5sYXlvdXQgPT0gJ2dhbGxlcnknKXtcclxuXHRcdFx0XHRkZWxldGUgZmVlZFNldHRpbmdzWydtYXNvbnJ5J107XHJcblx0XHRcdFx0ZGVsZXRlIGZlZWRTZXR0aW5nc1snZ3JpZCddO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZihjdXN0b21pemVyU2V0dGluZ3MubGF5b3V0ICE9PSAnY2Fyb3VzZWwnKXtcclxuXHRcdFx0XHRkZWxldGUgZmVlZFNldHRpbmdzWydjYXJvdXNlbCddO1xyXG5cdFx0XHR9XHJcblx0XHRcdHlvdXR1YmVGZWVkLmF0dHIoXCJkYXRhLW9wdGlvbnNcIiwgSlNPTi5zdHJpbmdpZnkoZmVlZFNldHRpbmdzKSk7XHJcblxyXG5cdFx0XHRpZiAoIHR5cGVvZiB3aW5kb3cuc2J5X2luaXQgIT09ICd1bmRlZmluZWQnICYmIGZseVByZXZpZXcgKSB7XHJcblx0XHRcdFx0Ly9zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XHJcblx0XHRcdFx0XHR3aW5kb3cuc2J5X2luaXQoKTtcclxuXHRcdFx0XHQvL30sIDIwMDApXHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBTaG91bGQgU2hvdyBNYW51YWwgQ29ubmVjdFxyXG5cdFx0ICogXHJcblx0XHQgKiBAc2luY2UgMi4wXHJcblx0XHQgKi9cclxuXHRcdHNob3dNYW51YWxDb25uZWN0IDogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHZhciBzZWxmID0gdGhpcztcclxuXHRcdFx0c2VsZi5zaG91bGRTaG93TWFudWFsQ29ubmVjdCA9IHRydWU7XHJcblx0XHRcdHNlbGYuc2hvdWxkU2hvd0ZlZWRBUElCYWNrQnRuID0gdHJ1ZTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBTaG91bGQgU2hvdyBNYW51YWwgQ29ubmVjdFxyXG5cdFx0ICogXHJcblx0XHQgKiBAc2luY2UgMi4wXHJcblx0XHQgKi9cclxuXHRcdHNob3dGZWVkU291cmNlTWFudWFsQ29ubmVjdCA6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XHJcblx0XHRcdHNlbGYudmlld3NBY3RpdmUuYWNjb3VudEFQSVBvcHVwID0gdHJ1ZTtcclxuXHRcdFx0c2VsZi5zaG91bGRTaG93TWFudWFsQ29ubmVjdCA9IHRydWU7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogU2hvdyBBUEkgY29ubmVjdCBmb3JtIGluIGZlZWQgY3JlYXRpb24gZmxvd1xyXG5cdFx0ICovXHJcblx0XHRzaG93QVBJQ29ubmVjdEZvcm0gOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0dmFyIHNlbGYgPSB0aGlzO1xyXG5cdFx0XHRzZWxmLnNob3VsZFNob3dGZWVkQVBJRm9ybSA9IHRydWU7XHJcblx0XHRcdHNlbGYuc2hvdWxkU2hvd0ZlZWRBUElCYWNrQnRuID0gdHJ1ZTtcclxuXHRcdH0sXHJcblx0XHJcblx0XHQvKipcclxuXHRcdCAqIFNob3cgdGhlIGxpbWl0YXRpb25zIG9mIGNvbm5lY3Rpbmcgd2l0aCBZb3VUdWJlIEFjY291bnRcclxuXHRcdCAqIEBzaW5jZSAyLjNcclxuXHRcdCAqL1xyXG5cdFx0c2hvd1lUQWNjb3VudExpbWl0YXRpb25zIDogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHZhciBzZWxmID0gdGhpcztcclxuXHRcdFx0c2VsZi5zaG93U2hvd1lUQWNjb3VudFdhcm5pbmcgPSB0cnVlO1xyXG5cdFx0fSxcclxuXHJcblx0XHRiYWNrVG9BcGlQb3B1cCA6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XHJcblx0XHRcdHNlbGYuc2hvd1Nob3dZVEFjY291bnRXYXJuaW5nID0gZmFsc2U7XHJcblx0XHRcdHNlbGYuc2hvdWxkU2hvd01hbnVhbENvbm5lY3QgPSBmYWxzZTtcclxuXHRcdFx0c2VsZi5zaG91bGRTaG93RmVlZEFQSUZvcm0gPSBmYWxzZTtcclxuXHRcdFx0c2VsZi5zaG91bGRTaG93RmVlZEFQSUJhY2tCdG4gPSBmYWxzZTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBTaG93IEFQSSBjb25uZWN0IGZvcm0gaW4gZmVlZCBjcmVhdGlvbiBmbG93XHJcblx0XHQgKi9cclxuXHRcdGhpZGVBUElDb25uZWN0Rm9ybSA6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XHJcblx0XHRcdHNlbGYuc2hvdWxkU2hvd01hbnVhbENvbm5lY3QgPSBmYWxzZTtcclxuXHRcdFx0c2VsZi5zaG91bGRTaG93RmVlZEFQSUZvcm0gPSBmYWxzZTtcclxuXHRcdFx0c2VsZi5zaG91bGRTaG93RmVlZEFQSUJhY2tCdG4gPSBmYWxzZTtcclxuXHRcdH0sXHJcblxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQWRkIEFQSSBLZXkgZnJvbSB0aGUgc2VsZWN0IGZlZWQgZmxvd1xyXG5cdFx0ICogXHJcblx0XHQgKiBAc2luY2UgMi4wXHJcblx0XHQgKi9cclxuXHRcdGFkZEFQSUtleSA6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG5cdFx0XHRpZiAoICFzZWxmLnNlbGVjdGVkRmVlZE1vZGVsLmFwaUtleSApIHtcclxuXHRcdFx0XHRzZWxmLmFwaUtleUVycm9yID0gdHJ1ZTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHZhciBzZWxmID0gdGhpcyxcclxuXHRcdFx0XHRhZGRBUElLZXlEYXRhID0ge1xyXG5cdFx0XHRcdFx0YWN0aW9uIDogJ3NieV9hZGRfYXBpX2tleScsXHJcblx0XHRcdFx0XHRhcGkgOiBzZWxmLnNlbGVjdGVkRmVlZE1vZGVsLmFwaUtleVxyXG5cdFx0XHRcdH07XHJcblx0XHRcdHNlbGYuYXBpS2V5QnRuTG9hZGVyID0gdHJ1ZTtcclxuXHRcdFx0c2VsZi5hamF4UG9zdChhZGRBUElLZXlEYXRhLCBmdW5jdGlvbihfcmVmKXtcclxuXHRcdFx0XHR2YXIgZGF0YSA9IF9yZWYuZGF0YTtcclxuXHRcdFx0XHRzZWxmLmFwaUtleUJ0bkxvYWRlciA9IGZhbHNlO1xyXG5cdFx0XHRcdHNlbGYuYXBpS2V5RXJyb3IgPSBmYWxzZTtcclxuXHRcdFx0XHRzZWxmLmFwaUtleVN0YXR1cyA9IHRydWU7XHJcblx0XHRcdFx0c2VsZi5hY3RpdmF0ZVZpZXcoJ2FjY291bnRBUElQb3B1cCcpO1xyXG5cdFx0XHR9KTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBBZGQgQWNjZXNzIFRva29lbiBmcm9tIHRoZSBzZWxlY3QgZmVlZCBmbG93XHJcblx0XHQgKiBcclxuXHRcdCAqIEBzaW5jZSAyLjBcclxuXHRcdCAqL1xyXG5cdFx0YWRkQWNjZXNzVG9rZW4gOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0dmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuXHRcdFx0aWYgKCAhc2VsZi5zZWxlY3RlZEZlZWRNb2RlbC5hY2Nlc3NUb2tlbiApIHtcclxuXHRcdFx0XHRzZWxmLmFjY2Vzc1Rva2VuRXJyb3IgPSB0cnVlO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLFxyXG5cdFx0XHRcdGFkZEFQSUtleURhdGEgPSB7XHJcblx0XHRcdFx0XHRhY3Rpb24gOiAnc2J5X21hbnVhbF9hY2Nlc3NfdG9rZW4nLFxyXG5cdFx0XHRcdFx0c2J5X2FjY2Vzc190b2tlbiA6IHNlbGYuc2VsZWN0ZWRGZWVkTW9kZWwuYWNjZXNzVG9rZW5cclxuXHRcdFx0XHR9O1xyXG5cdFx0XHRzZWxmLmFwaUtleUJ0bkxvYWRlciA9IHRydWU7XHJcblx0XHRcdHNlbGYuYWpheFBvc3QoYWRkQVBJS2V5RGF0YSwgZnVuY3Rpb24oX3JlZil7XHJcblx0XHRcdFx0dmFyIGRhdGEgPSBfcmVmLmRhdGE7XHJcblx0XHRcdFx0c2VsZi5hcGlLZXlCdG5Mb2FkZXIgPSBmYWxzZTtcclxuXHRcdFx0XHRzZWxmLmFjY2Vzc1Rva2VuRXJyb3IgPSBmYWxzZTtcclxuXHRcdFx0XHRzZWxmLmFwaUtleVN0YXR1cyA9IHRydWU7XHJcblx0XHRcdFx0c2VsZi5hY3RpdmF0ZVZpZXcoJ2FjY291bnRBUElQb3B1cCcpO1xyXG5cdFx0XHR9KTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBDcmVhdGUgJiBTdWJtaXQgTmV3IEZlZWRcclxuXHRcdCAqXHJcblx0XHQgKiBAc2luY2UgMi4wXHJcblx0XHQgKi9cclxuXHRcdHN1Ym1pdE5ld0ZlZWQgOiBmdW5jdGlvbigpe1xyXG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsXHJcblx0XHRcdFx0bmV3RmVlZERhdGEgPSB7XHJcblx0XHRcdFx0XHRhY3Rpb24gOiAnc2J5X2ZlZWRfc2F2ZXJfbWFuYWdlcl9idWlsZGVyX3VwZGF0ZScsXHJcblx0XHRcdFx0XHRmZWVkdHlwZSA6IHNlbGYuc2VsZWN0ZWRGZWVkLFxyXG5cdFx0XHRcdFx0ZmVlZHRlbXBsYXRlIDogc2VsZi5zZWxlY3RlZEZlZWRUZW1wbGF0ZSxcclxuXHRcdFx0XHRcdHNlbGVjdGVkRmVlZE1vZGVsIDogc2VsZi5zZWxlY3RlZEZlZWRNb2RlbCxcclxuXHRcdFx0XHRcdG5ld19pbnNlcnQgOiAndHJ1ZScsXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0c2VsZi5mdWxsU2NyZWVuTG9hZGVyID0gdHJ1ZTtcclxuXHRcdFx0c2VsZi5hamF4UG9zdChuZXdGZWVkRGF0YSwgZnVuY3Rpb24oX3JlZil7XHJcblx0XHRcdFx0dmFyIGRhdGEgPSBfcmVmLmRhdGE7XHJcblx0XHRcdFx0aWYoZGF0YS5mZWVkX2lkICYmIGRhdGEuc3VjY2Vzcyl7XHJcblx0XHRcdFx0XHR3aW5kb3cubG9jYXRpb24gPSBzZWxmLmJ1aWxkZXJVcmwgKyAnJmZlZWRfaWQ9JyArIGRhdGEuZmVlZF9pZCArIHNlbGYuc3dfZmVlZF9wYXJhbXMoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0fSxcclxuXHR9XHJcblx0cmVzb2x2ZShTQl9DdXN0b21pemVyKTtcclxufSk7Il0sIm5hbWVzIjpbIm5hbWVzcGFjZSIsImNvbnNvbGUiLCJlcnJvciIsInRlc3QiLCJob29rTmFtZSIsImhvb2tzIiwic3RvcmVLZXkiLCJjYWxsYmFjayIsInByaW9yaXR5IiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiaG9va3NTdG9yZSIsImhhbmRsZXIiLCJoYW5kbGVycyIsImkiLCJzcGxpY2UiLCJfX2N1cnJlbnQiLCJmb3JFYWNoIiwiaG9va0luZm8iLCJuYW1lIiwiY3VycmVudEluZGV4IiwicnVucyIsImRvQWN0aW9uIiwicmVtb3ZlQWxsIiwiaGFuZGxlcnNSZW1vdmVkIiwic29tZSIsImhvb2siLCJyZXR1cm5GaXJzdEFyZyIsIl9sZW4iLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwicHVzaCIsInJlc3VsdCIsImFwcGx5IiwicG9wIiwiX2hvb2tzU3RvcmUkX19jdXJyZW50IiwiX2hvb2tzU3RvcmUkX19jdXJyZW50MiIsIl9Ib29rcyIsImNvbnN0cnVjdG9yIiwidGhpcyIsImFjdGlvbnMiLCJPYmplY3QiLCJjcmVhdGUiLCJmaWx0ZXJzIiwiYWRkQWN0aW9uIiwiYWRkRmlsdGVyIiwicmVtb3ZlQWN0aW9uIiwicmVtb3ZlRmlsdGVyIiwiaGFzQWN0aW9uIiwiaGFzRmlsdGVyIiwicmVtb3ZlQWxsQWN0aW9ucyIsInJlbW92ZUFsbEZpbHRlcnMiLCJhcHBseUZpbHRlcnMiLCJjdXJyZW50QWN0aW9uIiwiY3VycmVudEZpbHRlciIsImRvaW5nQWN0aW9uIiwiZG9pbmdGaWx0ZXIiLCJkaWRBY3Rpb24iLCJkaWRGaWx0ZXIiLCJkZWZhdWx0SG9va3MiLCJTQl9DdXN0b21pemVyIiwiaW5pdFByb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsImV4dHJhRGF0YSIsImFsbEZlZWRzU2NyZWVuIiwic2JjX2J1aWxkZXIiLCJmZWVkc0xpc3QiLCJmZWVkcyIsImxlZ2FjeUZlZWRzTGlzdCIsImxlZ2FjeUZlZWRzIiwidG9vbHRpcENvbnRlbnQiLCJmZWVkdHlwZXNUb29sdGlwQ29udGVudCIsImZlZWRTZXR0aW5nc0RvbU9wdGlvbnMiLCJzZWxlY3RlZEZlZWRNb2RlbCIsImNoYW5uZWwiLCJwcmVmaWxsZWRDaGFubmVsSWQiLCJwbGF5bGlzdCIsImZhdm9yaXRlcyIsInNlYXJjaCIsImxpdmUiLCJzaW5nbGUiLCJhcGlLZXkiLCJhY2Nlc3NUb2tlbiIsInlvdXR1YmVBY2NvdW50Q29ubmVjdFVSTCIsImNvbm5lY3RTaXRlUGFyYW1ldGVycyIsInlvdXR1YmVBY2NvdW50Q29ubmVjdFBhcmFtZXRlcnMiLCJkaXNtaXNzTGl0ZSIsInlvdXR1YmVfZmVlZF9kaXNtaXNzX2xpdGUiLCJzaG91bGRTaG93RmVlZEFQSUZvcm0iLCJzaG91bGRTaG93TWFudWFsQ29ubmVjdCIsInNob3dTaG93WVRBY2NvdW50V2FybmluZyIsInN3X2ZlZWQiLCJzd19mZWVkX2lkIiwiZXh0cmFNZXRob2RzIiwiY2hhbmdlU2V0dGluZ1ZhbHVlIiwic2V0dGluZ0lEIiwidmFsdWUiLCJkb1Byb2Nlc3MiLCJhamF4QWN0aW9uIiwic2VsZiIsImN1c3RvbWl6ZXJGZWVkRGF0YSIsInNldHRpbmdzIiwiY3VzdG9taXplckNvbnRyb2xBamF4QWN0aW9uIiwicmVnZW5lcmF0ZUxheW91dCIsImNoZWNrRXh0ZW5zaW9uQWN0aXZlIiwiZXh0ZW5zaW9uIiwiYWN0aXZlRXh0ZW5zaW9ucyIsInNob3VsZFNob3dPdmVybGF5IiwiY29udHJvbCIsInNieUlzUHJvIiwic2J5TGljZW5zZU5vdGljZUFjdGl2ZSIsImNoZWNrRXh0ZW5zaW9uUG9wdXAiLCJoYXNGZWF0dXJlIiwiY29uZGl0aW9uIiwiY2hlY2tFeHRlbnNpb24iLCJjaGVja0V4dGVuc2lvbkRpbW1lZCIsImNoZWNrQ29udHJvbENvbmRpdGlvbiIsInNob3VsZFNob3dUb2dnbGVzZXRDb3ZlciIsInRvZ2dsZSIsInRvZ2dsZXNldEV4dFBvcHVwIiwidmlld3NBY3RpdmUiLCJleHRlbnNpb25zUG9wdXBFbGVtZW50IiwiaW5jbHVkZXMiLCJzZXRUaW1lb3V0Iiwic2V0U2hvcnRjb2RlR2xvYmFsU2V0dGluZ3MiLCJiYWNrVG9BbGxGZWVkcyIsIkpTT04iLCJzdHJpbmdpZnkiLCJjdXN0b21pemVyRmVlZERhdGFJbml0aWFsIiwid2luZG93IiwibG9jYXRpb24iLCJidWlsZGVyVXJsIiwib3BlbkRpYWxvZ0JveCIsInR5cGUiLCJoZWFkaW5nIiwiZGlhbG9nQm94UG9wdXBTY3JlZW4iLCJkZXNjcmlwdGlvbiIsImN1c3RvbUJ1dHRvbnMiLCJmZWVkVG9EZWxldGUiLCJyZXBsYWNlIiwiZmVlZF9uYW1lIiwiZGlhbG9nQm94IiwiYWN0aXZlIiwiZXZlbnQiLCJzdG9wUHJvcGFnYXRpb24iLCJjb25maXJtRGlhbG9nQWN0aW9uIiwiZmVlZEFjdGlvbkRlbGV0ZSIsImlkIiwiZmVlZHNTZWxlY3RlZCIsImZlZWRzX2lkcyIsImZlZWRzRGVsZXRlRGF0YSIsImFjdGlvbiIsImFqYXhQb3N0IiwiX3JlZiIsImRhdGEiLCJ2YWx1ZXMiLCJhc3NpZ24iLCJzaG93Q29sb3JQaWNrZXJQb3NwdXAiLCJjb250cm9sSWQiLCJjdXN0b21pemVyU2NyZWVucyIsImFjdGl2ZUNvbG9yUGlja2VyIiwiaGlkZUNvbG9yUGlja2VyUG9wdXAiLCJnZXRQYWxldHRlQ2xhc3MiLCJjb250ZXh0IiwiY29sb3JQYWxldHRlIiwiY29sb3JwYWxldHRlIiwiY2hlY2tOb3RFbXB0eSIsImZlZWRJRCIsImZlZWRfaW5mbyIsImxvZyIsImdldEZlZWRDb250YWluZXJDbGFzc2VzIiwibGF5b3V0IiwiZ2V0Q29sU2V0dGluZ3MiLCJnZXRNb2JDb2xTZXR0aW5ncyIsImdldENvbG9yUGFsZXR0ZUNsYXNzIiwiam9pbiIsInByZXZpZXdTY3JlZW4iLCJjaGVja1Nob3VsZFNob3dTdWJzY3JpYmVycyIsInNob3dzdWJzY3JpYmUiLCJ2YWx1ZUlzRW5hYmxlZCIsImNoYW5nZVN3aXRjaGVyU2V0dGluZ1ZhbHVlIiwib25WYWx1ZSIsIm9mZlZhbHVlIiwia2V5cyIsImluQWN0aXZlRXh0ZW5zaW9ucyIsImpzb25QYXJzZSIsImpzb25TdHJpbmciLCJwYXJzZSIsImUiLCJnZXRDdXN0b21IZWFkZXJUZXh0IiwiY3VzdG9taGVhZGVydGV4dCIsInNob3VsZFNob3dTdGFuZGFyZEhlYWRlciIsInNob3doZWFkZXIiLCJoZWFkZXJzdHlsZSIsInNob3VsZFNob3dUZXh0SGVhZGVyIiwiZ2V0RmxhZ3NBdHRyIiwiZmxhZ3MiLCJ0b1N0cmluZyIsInNob3VsZFNob3dQbGF5ZXIiLCJzd2l0Y2hUb1ZpZGVvc1NlY3Rpb24iLCJwYXJlbnRBY3RpdmVTZWN0aW9uIiwicGFyZW50QWN0aXZlU2VjdGlvbkRhdGEiLCJhY3RpdmVTZWN0aW9uIiwiYWN0aXZlU2VjdGlvbkRhdGEiLCJjdXN0b21pemVyU2lkZWJhckJ1aWxkZXIiLCJjdXN0b21pemUiLCJzZWN0aW9ucyIsImN1c3RvbWl6ZV92aWRlb3MiLCJmbHlQcmV2aWV3IiwieW91dHViZUZlZWQiLCJqUXVlcnkiLCJmaW5kIiwiZmVlZFNldHRpbmdzIiwiYXR0ciIsImN1c3RvbWl6ZXJTZXR0aW5ncyIsImFycm93cyIsInBhZyIsImF1dG9wbGF5IiwidGltZSIsInBhcnNlSW50IiwibG9vcCIsInJvd3MiLCJNYXRoIiwibWluIiwic2J5X2luaXQiLCJzaG93TWFudWFsQ29ubmVjdCIsInNob3VsZFNob3dGZWVkQVBJQmFja0J0biIsInNob3dGZWVkU291cmNlTWFudWFsQ29ubmVjdCIsImFjY291bnRBUElQb3B1cCIsInNob3dBUElDb25uZWN0Rm9ybSIsInNob3dZVEFjY291bnRMaW1pdGF0aW9ucyIsImJhY2tUb0FwaVBvcHVwIiwiaGlkZUFQSUNvbm5lY3RGb3JtIiwiYWRkQVBJS2V5IiwiYWRkQVBJS2V5RGF0YSIsImFwaSIsImFwaUtleUJ0bkxvYWRlciIsImFwaUtleUVycm9yIiwiYXBpS2V5U3RhdHVzIiwiYWN0aXZhdGVWaWV3IiwiYWRkQWNjZXNzVG9rZW4iLCJzYnlfYWNjZXNzX3Rva2VuIiwiYWNjZXNzVG9rZW5FcnJvciIsInN1Ym1pdE5ld0ZlZWQiLCJuZXdGZWVkRGF0YSIsImZlZWR0eXBlIiwic2VsZWN0ZWRGZWVkIiwiZmVlZHRlbXBsYXRlIiwic2VsZWN0ZWRGZWVkVGVtcGxhdGUiLCJuZXdfaW5zZXJ0IiwiZnVsbFNjcmVlbkxvYWRlciIsImZlZWRfaWQiLCJzdWNjZXNzIiwic3dfZmVlZF9wYXJhbXMiXSwic291cmNlUm9vdCI6IiJ9