Help
RSS
API
Feed
Maltego
Contact
Domain > eventivemeetings.com
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2019-09-28
107.191.51.79
(
ClassC
)
2024-10-23
67.225.191.147
(
ClassC
)
Port 80
HTTP/1.1 301 Moved PermanentlyServer: nginxDate: Wed, 23 Oct 2024 13:00:46 GMTContent-Type: text/htmlContent-Length: 162Connection: keep-aliveLocation: https://eventivemeetings.com/ html>head>title>301 Moved Permanently/title>/head>body>center>h1>301 Moved Permanently/h1>/center>hr>center>nginx/center>/body>/html>
Port 443
HTTP/1.1 200 OKServer: nginxDate: Wed, 23 Oct 2024 13:00:48 GMTContent-Type: text/html; charsetUTF-8Content-Length: 101434Connection: keep-aliveLink: https://eventivemeetings.com/wp-json/>; relhttps://api.w.org/, https://eventivemeetings.com/wp-json/wp/v2/pages/8>; relalternate; titleJSON; typeapplication/json, https://eventivemeetings.com/>; relshortlinkVary: Accept-Encoding,User-AgentX-Content-Type-Options: nosniffX-XSS-Protection: 1; modeblockX-Frame-Options: DENYContent-Security-Policy: frame-ancestors self; !DOCTYPE html>html langen-US>head> script>var gform;gform||(document.addEventListener(gform_main_scripts_loaded,function(){gform.scriptsLoaded!0}),window.addEventListener(DOMContentLoaded,function(){gform.domLoaded!0}),gform{domLoaded:!1,scriptsLoaded:!1,initializeOnLoaded:function(o){gform.domLoaded&&gform.scriptsLoaded?o():!gform.domLoaded&&gform.scriptsLoaded?window.addEventListener(DOMContentLoaded,o):document.addEventListener(gform_main_scripts_loaded,o)},hooks:{action:{},filter:{}},addAction:function(o,n,r,t){gform.addHook(action,o,n,r,t)},addFilter:function(o,n,r,t){gform.addHook(filter,o,n,r,t)},doAction:function(o){gform.doHook(action,o,arguments)},applyFilters:function(o){return gform.doHook(filter,o,arguments)},removeAction:function(o,n){gform.removeHook(action,o,n)},removeFilter:function(o,n,r){gform.removeHook(filter,o,n,r)},addHook:function(o,n,r,t,i){nullgform.hookson&&(gform.hookson);var egform.hookson;nulli&&(in+_+e.length),gform.hookson.push({tag:i,callable:r,priority:tnullt?10:t})},doHook:function(n,o,r){var t;if(rArray.prototype.slice.call(r,1),null!gform.hooksno&&((ogform.hooksno).sort(function(o,n){return o.priority-n.priority}),o.forEach(function(o){function!typeof(to.callable)&&(twindowt),actionn?t.apply(null,r):r0t.apply(null,r)})),filtern)return r0},removeHook:function(o,n,t,i){var r;null!gform.hookson&&(r(rgform.hookson).filter(function(o,n,r){return!!(null!i&&i!o.tag||null!t&&t!o.priority)}),gform.hooksonr)}});/script>meta charsetUTF-8>meta nameviewport contentwidthdevice-width, initial-scale1>link relstylesheet mediaprint onloadthis.onloadnull;this.mediaall; idao_optimized_gfonts hrefhttps://fonts.googleapis.com/css?familyRoboto%3A300%7CLato%3A700%2C900&displayswap>link relprofile hrefhttp://gmpg.org/xfn/11>meta namerobots contentindex, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1 /> !-- This site is optimized with the Yoast SEO plugin v23.7 - https://yoast.com/wordpress/plugins/seo/ -->link mediaall hrefhttps://eventivemeetings.com/wp-content/cache/autoptimize/css/autoptimize_9716cf267bf3db200a93689a0ad86d97.css relstylesheet>link mediascreen hrefhttps://eventivemeetings.com/wp-content/cache/autoptimize/css/autoptimize_43a172e34b4aa2a76201c5890ab4fd81.css relstylesheet>title>Full-Service Event and Conference Planning - Eventive Meetings/title>link relcanonical hrefhttps://eventivemeetings.com/ />meta propertyog:locale contenten_US />meta propertyog:type contentwebsite />meta propertyog:title contentFull-Service Event and Conference Planning - Eventive Meetings />meta propertyog:description contentAre You Ready to Take Your Event To the Next Level? Event & Meeting Experts Eventive Meetings is your partner in comprehensive event, virtual and conference planning. We utilize innovative marketing, sound budget management, and detailed logistics planning. The result is flawless execution and a lasting impact. We’ve Been Busy See More Posts Get Started … />meta propertyog:url contenthttps://eventivemeetings.com/ />meta propertyog:site_name contentEventive Meetings />meta propertyarticle:publisher contenthttps://www.facebook.com/eventivemeetings/ />meta propertyarticle:modified_time content2021-04-21T17:03:25+00:00 />meta nametwitter:card contentsummary_large_image />meta nametwitter:site content@eventivemeeting /> script typeapplication/ld+json classyoast-schema-graph>{@context:https://schema.org,@graph:{@type:WebPage,@id:https://eventivemeetings.com/,url:https://eventivemeetings.com/,name:Full-Service Event and Conference Planning - Eventive Meetings,isPartOf:{@id:https://eventivemeetings.com/#website},about:{@id:https://eventivemeetings.com/#organization},datePublished:2021-02-02T18:37:41+00:00,dateModified:2021-04-21T17:03:25+00:00,breadcrumb:{@id:https://eventivemeetings.com/#breadcrumb},inLanguage:en-US,potentialAction:{@type:ReadAction,target:https://eventivemeetings.com/}},{@type:BreadcrumbList,@id:https://eventivemeetings.com/#breadcrumb,itemListElement:{@type:ListItem,position:1,name:Home}},{@type:WebSite,@id:https://eventivemeetings.com/#website,url:https://eventivemeetings.com/,name:Eventive Meetings,description:Full-Service Event and Conference Planning,publisher:{@id:https://eventivemeetings.com/#organization},potentialAction:{@type:SearchAction,target:{@type:EntryPoint,urlTemplate:https://eventivemeetings.com/?s{search_term_string}},query-input:{@type:PropertyValueSpecification,valueRequired:true,valueName:search_term_string}},inLanguage:en-US},{@type:Organization,@id:https://eventivemeetings.com/#organization,name:Eventive Meetings,url:https://eventivemeetings.com/,logo:{@type:ImageObject,inLanguage:en-US,@id:https://eventivemeetings.com/#/schema/logo/image/,url:https://eventivemeetings.com/wp-content/uploads/files/2021/logo.png,contentUrl:https://eventivemeetings.com/wp-content/uploads/files/2021/logo.png,width:177,height:67,caption:Eventive Meetings},image:{@id:https://eventivemeetings.com/#/schema/logo/image/},sameAs:https://www.facebook.com/eventivemeetings/,https://x.com/eventivemeeting,http://www.pinterest.com/eventive/}}/script> !-- / Yoast SEO plugin. -->link hrefhttps://fonts.gstatic.com crossorigin relpreconnect />link relalternate typeapplication/rss+xml titleEventive Meetings » Feed hrefhttps://eventivemeetings.com/feed/ />link relalternate typeapplication/rss+xml titleEventive Meetings » Comments Feed hrefhttps://eventivemeetings.com/comments/feed/ />link relpreload hrefhttps://eventivemeetings.com/wp-content/plugins/bb-plugin/fonts/fontawesome/5.15.4/webfonts/fa-solid-900.woff2 asfont typefont/woff2 crossoriginanonymous>link relstylesheet idfl-builder-layout-8-css hrefhttps://eventivemeetings.com/wp-content/cache/autoptimize/css/autoptimize_single_6617b500a9b3885bbb0198e7d1c20e5a.css mediaall /> script srchttps://eventivemeetings.com/wp-includes/js/jquery/jquery.min.js idjquery-core-js>/script> script defer srchttps://eventivemeetings.com/wp-includes/js/jquery/jquery-migrate.min.js idjquery-migrate-js>/script> link relhttps://api.w.org/ hrefhttps://eventivemeetings.com/wp-json/ />link relalternate titleJSON typeapplication/json hrefhttps://eventivemeetings.com/wp-json/wp/v2/pages/8 />link relEditURI typeapplication/rsd+xml titleRSD hrefhttps://eventivemeetings.com/xmlrpc.php?rsd />link relshortlink hrefhttps://eventivemeetings.com/ />link relalternate titleoEmbed (JSON) typeapplication/json+oembed hrefhttps://eventivemeetings.com/wp-json/oembed/1.0/embed?urlhttps%3A%2F%2Feventivemeetings.com%2F />link relalternate titleoEmbed (XML) typetext/xml+oembed hrefhttps://eventivemeetings.com/wp-json/oembed/1.0/embed?urlhttps%3A%2F%2Feventivemeetings.com%2F&formatxml /> !-- Global site tag (gtag.js) - Google Analytics --> script defer srchttps://www.googletagmanager.com/gtag/js?idG-FQMRM2WT78>/script> script defer srcdata:text/javascript;base64,CiAgd2luZG93LmRhdGFMYXllciA9IHdpbmRvdy5kYXRhTGF5ZXIgfHwgW107CiAgZnVuY3Rpb24gZ3RhZygpe2RhdGFMYXllci5wdXNoKGFyZ3VtZW50cyk7fQogIGd0YWcoJ2pzJywgbmV3IERhdGUoKSk7CgogIGd0YWcoJ2NvbmZpZycsICdHLUZRTVJNMldUNzgnKTsK>/script>meta nametheme-color content#00a9cc>link relicon hrefhttps://eventivemeetings.com/wp-content/uploads/files/2021/cropped-favicon-32x32.png sizes32x32 />link relicon hrefhttps://eventivemeetings.com/wp-content/uploads/files/2021/cropped-favicon-192x192.png sizes192x192 />link relapple-touch-icon hrefhttps://eventivemeetings.com/wp-content/uploads/files/2021/cropped-favicon-180x180.png />meta namemsapplication-TileImage contenthttps://eventivemeetings.com/wp-content/uploads/files/2021/cropped-favicon-270x270.png />/head>body classhome page-template-default page page-id-8 custom-background wp-custom-logo fl-builder fl-builder-2-8-4-1 wpbf wpbf-home wpbf-no-sidebar wpbf-full-width itemscopeitemscope itemtypehttps://schema.org/WebPage> a classscreen-reader-text skip-link href#content titleSkip to content>Skip to content/a>div idcontainer classhfeed wpbf-page>header idheader classwpbf-page-header itemscopeitemscope itemtypehttps://schema.org/WPHeader>div classwpbf-navigation data-sub-menu-animation-duration250 data-stickytrue data-sticky-delay1 data-sticky-animationnone data-sticky-animation-duration50>div classwpbf-container wpbf-container-center wpbf-visible-large wpbf-nav-wrapper wpbf-menu-right>div classwpbf-grid wpbf-grid-collapse>div classwpbf-1-4 wpbf-logo-container>div classwpbf-logo itemscopeitemscope itemtypehttps://schema.org/Organization>a hrefhttps://eventivemeetings.com itempropurl>img srchttps://eventivemeetings.com/wp-content/uploads/files/2021/desktop-logo.svg altEventive Meetings titleEventive Meetings itemproplogo />/a>/div>/div>div classwpbf-3-4 wpbf-menu-container>nav idnavigation classwpbf-clearfix itemscopeitemscope itemtypehttps://schema.org/SiteNavigationElement aria-labelSite Navigation>ul idmenu-main-menu classwpbf-menu wpbf-sub-menu wpbf-sub-menu-align-left wpbf-sub-menu-animation-fade wpbf-menu-effect-underlined wpbf-menu-animation-fade wpbf-menu-align-center>li idmenu-item-29 classmenu-item menu-item-type-post_type menu-item-object-page menu-item-29>a hrefhttps://eventivemeetings.com/virtual/>Virtual/a>/li>li idmenu-item-27 classmenu-item menu-item-type-post_type menu-item-object-page menu-item-27>a hrefhttps://eventivemeetings.com/events/>Events & Conferences/a>/li>li idmenu-item-28 classmenu-item menu-item-type-post_type menu-item-object-page menu-item-28>a hrefhttps://eventivemeetings.com/incentive/>Incentive/a>/li>li idmenu-item-25 classmenu-item menu-item-type-post_type menu-item-object-page menu-item-25>a hrefhttps://eventivemeetings.com/blog/>Blog/a>/li>li idmenu-item-26 classmenu-item menu-item-type-post_type menu-item-object-page menu-item-26>a hrefhttps://eventivemeetings.com/contact/>Contact Us/a>/li>/ul>/nav>/div>/div>/div>div classwpbf-mobile-menu-overlay>/div>div classwpbf-mobile-menu-off-canvas wpbf-hidden-large>div classwpbf-mobile-nav-wrapper wpbf-container wpbf-container-center>div classwpbf-mobile-logo-container wpbf-2-3>div classwpbf-mobile-logo itemscopeitemscope itemtypehttps://schema.org/Organization>a hrefhttps://eventivemeetings.com itempropurl>img srchttps://eventivemeetings.com/wp-content/uploads/files/2021/desktop-logo.svg altEventive Meetings titleEventive Meetings itemproplogo />/a>/div>/div>div classwpbf-menu-toggle-container wpbf-1-3> button idwpbf-mobile-menu-toggle classwpbf-mobile-nav-item wpbf-mobile-menu-toggle wpbff wpbff-hamburger aria-labelMobile Site Navigation aria-controlsnavigation aria-expandedfalse aria-haspopuptrue> span classscreen-reader-text>Menu Toggle/span> /button>/div>/div>div classwpbf-mobile-menu-container>nav idmobile-navigation itemscopeitemscope itemtypehttps://schema.org/SiteNavigationElement aria-labelledbywpbf-mobile-menu-toggle>ul idmenu-mobile-menu classwpbf-mobile-menu>li idmenu-item-154 classmenu-item menu-item-type-post_type menu-item-object-page menu-item-home current-menu-item page_item page-item-8 current_page_item menu-item-154>a hrefhttps://eventivemeetings.com/ aria-currentpage>Home/a>/li>li idmenu-item-162 classmenu-item menu-item-type-post_type menu-item-object-page menu-item-162>a hrefhttps://eventivemeetings.com/virtual/>Virtual/a>/li>li idmenu-item-159 classmenu-item menu-item-type-post_type menu-item-object-page menu-item-159>a hrefhttps://eventivemeetings.com/events/>Events & Conferences/a>/li>li idmenu-item-160 classmenu-item menu-item-type-post_type menu-item-object-page menu-item-160>a hrefhttps://eventivemeetings.com/incentive/>Incentive Travel/a>/li>li idmenu-item-155 classmenu-item menu-item-type-post_type menu-item-object-page menu-item-155>a hrefhttps://eventivemeetings.com/blog/>Blog/a>/li>li idmenu-item-157 classmenu-item menu-item-type-post_type menu-item-object-page menu-item-157>a hrefhttps://eventivemeetings.com/contact/>Contact Us/a>/li>li idmenu-item-158 classmenu-item menu-item-type-post_type menu-item-object-page menu-item-158>a hrefhttps://eventivemeetings.com/portal/>Event Portal/a>/li>li idmenu-item-156 classmenu-item menu-item-type-post_type menu-item-object-page menu-item-privacy-policy menu-item-156>a relprivacy-policy hrefhttps://eventivemeetings.com/privacy/>Privacy Statement/a>/li>li idmenu-item-161 classmenu-item menu-item-type-post_type menu-item-object-page menu-item-161>a hrefhttps://eventivemeetings.com/sitemap/>Sitemap/a>/li>li idmenu-item-182 classmobile-socials menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-182>a href#>Socials/a>button classwpbf-submenu-toggle aria-expandedfalse>span classscreen-reader-text>Menu Toggle/span>i classwpbff wpbff-arrow-down aria-hiddentrue>/i>/button>ul classsub-menu>li idmenu-item-183 classmenu-item menu-item-type-custom menu-item-object-custom menu-item-183>a hrefhttps://www.facebook.com/eventivemeetings>i classfab fa-facebook-f aria-labelFacebook>/i>/a>/li>li idmenu-item-184 classmenu-item menu-item-type-custom menu-item-object-custom menu-item-184>a hrefhttps://twitter.com/EventiveMeeting>i classfab fa-twitter aria-labelTwitter>/i>/a>/li>li idmenu-item-185 classmenu-item menu-item-type-custom menu-item-object-custom menu-item-185>a hrefhttp://www.pinterest.com/eventive/>i classfab fa-pinterest aria-labelPinterest>/i>/a>/li>/ul>/li>/ul>/nav> i classwpbf-close wpbff wpbff-times aria-hiddentrue>/i>/div>/div>/div>/header>div idcontent>div classwpbf-grid wpbf-main-grid wpbf-grid-medium>main idmain classwpbf-main wpbf-medium-2-3 wpbf-single-content wpbf-page-content>div classentry-content itemproptext>div classfl-builder-content fl-builder-content-8 fl-builder-content-primary fl-builder-global-templates-locked data-post-id8>div classfl-row fl-row-full-width fl-row-bg-photo fl-node-601b10e43966b fl-row-custom-height fl-row-align-center data-node601b10e43966b>div classfl-row-content-wrap>div classfl-row-content fl-row-fixed-width fl-node-content>div classfl-col-group fl-node-601b10e43c371 fl-col-group-equal-height fl-col-group-align-center data-node601b10e43c371>div classfl-col fl-node-601b10e43c3e8 fl-col-bg-color data-node601b10e43c3e8>div classfl-col-content fl-node-content>div classfl-module fl-module-heading fl-node-6047ca8a9f993 data-node6047ca8a9f993>div classfl-module-content fl-node-content>h2 classfl-heading> span classfl-heading-text>Are You Ready to Take Your Event To/span>/h2>/div>/div>div classfl-module fl-module-heading fl-node-6047caa6cbb59 data-node6047caa6cbb59>div classfl-module-content fl-node-content>h2 classfl-heading> span classfl-heading-text>the Next Level?/span>/h2>/div>/div>/div>/div>/div>/div>/div>/div>div classfl-row fl-row-full-width fl-row-bg-uabb_gradient fl-node-601b142399b1f fl-row-default-height fl-row-align-center data-node601b142399b1f>div classfl-row-content-wrap>div classfl-row-content fl-row-fixed-width fl-node-content>div classfl-col-group fl-node-601b142399b1a data-node601b142399b1a>div classfl-col fl-node-601b142399b1c fl-col-bg-photo data-node601b142399b1c>div classfl-col-content fl-node-content>div classfl-module fl-module-heading fl-node-601b142399b1e data-node601b142399b1e>div classfl-module-content fl-node-content>h1 classfl-heading> span classfl-heading-text>Event & Meeting Experts/span>/h1>/div>/div>div classfl-module fl-module-rich-text fl-node-601b142399b1d data-node601b142399b1d>div classfl-module-content fl-node-content>div classfl-rich-text>p>Eventive Meetings is your partner in comprehensive event, virtual and conference planning. We utilize innovative marketing, sound budget management, and detailed logistics planning. The result is flawless execution and a lasting impact./p>/div>/div>/div>/div>/div>/div>/div>/div>/div>div classfl-row fl-row-full-width fl-row-bg-photo fl-node-601b14675e4fe fl-row-custom-height fl-row-align-center fl-row-bg-fixed data-node601b14675e4fe>div classfl-row-content-wrap>div classfl-row-content fl-row-fixed-width fl-node-content>div classfl-col-group fl-node-601b1467627ed data-node601b1467627ed>div classfl-col fl-node-601b146762869 fl-col-bg-color data-node601b146762869>div classfl-col-content fl-node-content>/div>/div>/div>/div>/div>/div>div classfl-row fl-row-full-width fl-row-bg-none fl-node-601b162ee1bbf fl-row-default-height fl-row-align-center data-node601b162ee1bbf>div classfl-row-content-wrap>div classfl-row-content fl-row-fixed-width fl-node-content>div classfl-col-group fl-node-601b162ee66c2 data-node601b162ee66c2>div classfl-col fl-node-601b162ee6746 fl-col-bg-color data-node601b162ee6746>div classfl-col-content fl-node-content>div classfl-module fl-module-heading fl-node-601b1996be517 data-node601b1996be517>div classfl-module-content fl-node-content>h2 classfl-heading> span classfl-heading-text>Weve Been Busy/span>/h2>/div>/div>div classfl-module fl-module-post-grid fl-node-601b162ee1824 fl-animation fl-slide-in-right customPosts data-node601b162ee1824 data-animation-delay0 data-animation-duration1>div classfl-module-content fl-node-content>div classfl-post-grid itemscopeitemscope itemtypehttps://schema.org/Blog>div classfl-post-column>div classfl-post-grid-post fl-post-grid-image-above-title fl-post-columns-post fl-post-align-center post-411 post type-post status-publish format-standard has-post-thumbnail hentry category-virtual-events wpbf-post itemscope itemtypehttps://schema.org/BlogPosting>meta itemscope itempropmainEntityOfPage itemtypehttps://schema.org/WebPage itemidhttps://eventivemeetings.com/blog/virtual-rule-of-3/ content“Virtual” Rule of 3 />meta itempropdatePublished content2021-04-01 />meta itempropdateModified content2021-04-02 />div itemproppublisher itemscope itemtypehttps://schema.org/Organization>meta itempropname contentEventive Meetings>div itemproplogo itemscope itemtypehttps://schema.org/ImageObject>meta itempropurl contenthttps://eventivemeetings.com/wp-content/uploads/files/2021/desktop-logo.svg>/div>/div>div itemscope itempropauthor itemtypehttps://schema.org/Person>meta itempropurl contenthttps://eventivemeetings.com/blog/author/eventive-admin/ />meta itempropname contenteventive-admin />/div>div itemscope itempropimage itemtypehttps://schema.org/ImageObject>meta itempropurl contenthttps://eventivemeetings.com/wp-content/uploads/post/411/virtual-rule-of-3.jpg />meta itempropwidth content1920 />meta itempropheight content1280 />/div>div itempropinteractionStatistic itemscope itemtypehttps://schema.org/InteractionCounter>meta itempropinteractionType contenthttps://schema.org/CommentAction />meta itempropuserInteractionCount content0 />/div>div classfl-post-grid-image> a hrefhttps://eventivemeetings.com/blog/virtual-rule-of-3/ relbookmark title“Virtual” Rule of 3> img fetchpriorityhigh decodingasync width300 height190 srchttps://eventivemeetings.com/wp-content/uploads/post/411/virtual-rule-of-3-300x190.jpg classattachment-medium-thumbnail size-medium-thumbnail wp-post-image alt /> /a>/div>div classfl-post-grid-text>h5 classfl-post-grid-title itempropheadline> a hrefhttps://eventivemeetings.com/blog/virtual-rule-of-3/ title“Virtual” Rule of 3>“Virtual” Rule of 3/a>/h5>div classfl-post-grid-content> a classfl-post-grid-more hrefhttps://eventivemeetings.com/blog/virtual-rule-of-3/ title“Virtual” Rule of 3>Read more/a>/div>/div>/div>/div>div classfl-post-column>div classfl-post-grid-post fl-post-grid-image-above-title fl-post-columns-post fl-post-align-center post-409 post type-post status-publish format-standard has-post-thumbnail hentry category-meetings wpbf-post itemscope itemtypehttps://schema.org/BlogPosting>meta itemscope itempropmainEntityOfPage itemtypehttps://schema.org/WebPage itemidhttps://eventivemeetings.com/blog/13-events-in-30-days/ content13 Events in 30 Days />meta itempropdatePublished content2021-03-15 />meta itempropdateModified content2021-04-21 />div itemproppublisher itemscope itemtypehttps://schema.org/Organization>meta itempropname contentEventive Meetings>div itemproplogo itemscope itemtypehttps://schema.org/ImageObject>meta itempropurl contenthttps://eventivemeetings.com/wp-content/uploads/files/2021/desktop-logo.svg>/div>/div>div itemscope itempropauthor itemtypehttps://schema.org/Person>meta itempropurl contenthttps://eventivemeetings.com/blog/author/eventive-admin/ />meta itempropname contenteventive-admin />/div>div itemscope itempropimage itemtypehttps://schema.org/ImageObject>meta itempropurl contenthttps://eventivemeetings.com/wp-content/uploads/post/409/13-events-in-30-days.jpg />meta itempropwidth content1920 />meta itempropheight content1440 />/div>div itempropinteractionStatistic itemscope itemtypehttps://schema.org/InteractionCounter>meta itempropinteractionType contenthttps://schema.org/CommentAction />meta itempropuserInteractionCount content0 />/div>div classfl-post-grid-image> a hrefhttps://eventivemeetings.com/blog/13-events-in-30-days/ relbookmark title13 Events in 30 Days> img loadinglazy decodingasync width300 height190 srchttps://eventivemeetings.com/wp-content/uploads/post/409/13-events-in-30-days-300x190.jpg classattachment-medium-thumbnail size-medium-thumbnail wp-post-image alt /> /a>/div>div classfl-post-grid-text>h5 classfl-post-grid-title itempropheadline> a hrefhttps://eventivemeetings.com/blog/13-events-in-30-days/ title13 Events in 30 Days>13 Events in 30 Days/a>/h5>div classfl-post-grid-content> a classfl-post-grid-more hrefhttps://eventivemeetings.com/blog/13-events-in-30-days/ title13 Events in 30 Days>Read more/a>/div>/div>/div>/div>div classfl-post-column>div classfl-post-grid-post fl-post-grid-image-above-title fl-post-columns-post fl-post-align-center post-413 post type-post status-publish format-standard has-post-thumbnail hentry category-virtual-events wpbf-post itemscope itemtypehttps://schema.org/BlogPosting>meta itemscope itempropmainEntityOfPage itemtypehttps://schema.org/WebPage itemidhttps://eventivemeetings.com/blog/a-proud-designation/ contentA Proud DESignation />meta itempropdatePublished content2021-02-12 />meta itempropdateModified content2021-04-02 />div itemproppublisher itemscope itemtypehttps://schema.org/Organization>meta itempropname contentEventive Meetings>div itemproplogo itemscope itemtypehttps://schema.org/ImageObject>meta itempropurl contenthttps://eventivemeetings.com/wp-content/uploads/files/2021/desktop-logo.svg>/div>/div>div itemscope itempropauthor itemtypehttps://schema.org/Person>meta itempropurl contenthttps://eventivemeetings.com/blog/author/eventive-admin/ />meta itempropname contenteventive-admin />/div>div itemscope itempropimage itemtypehttps://schema.org/ImageObject>meta itempropurl contenthttps://eventivemeetings.com/wp-content/uploads/post/413/a-proud-designation.jpg />meta itempropwidth content1920 />meta itempropheight content1381 />/div>div itempropinteractionStatistic itemscope itemtypehttps://schema.org/InteractionCounter>meta itempropinteractionType contenthttps://schema.org/CommentAction />meta itempropuserInteractionCount content0 />/div>div classfl-post-grid-image> a hrefhttps://eventivemeetings.com/blog/a-proud-designation/ relbookmark titleA Proud DESignation> img loadinglazy decodingasync width300 height190 srchttps://eventivemeetings.com/wp-content/uploads/post/413/a-proud-designation-300x190.jpg classattachment-medium-thumbnail size-medium-thumbnail wp-post-image alt /> /a>/div>div classfl-post-grid-text>h5 classfl-post-grid-title itempropheadline> a hrefhttps://eventivemeetings.com/blog/a-proud-designation/ titleA Proud DESignation>A Proud DESignation/a>/h5>div classfl-post-grid-content> a classfl-post-grid-more hrefhttps://eventivemeetings.com/blog/a-proud-designation/ titleA Proud DESignation>Read more/a>/div>/div>/div>/div>div classfl-post-column>div classfl-post-grid-post fl-post-grid-image-above-title fl-post-columns-post fl-post-align-center post-415 post type-post status-publish format-standard has-post-thumbnail hentry category-industry-insights wpbf-post itemscope itemtypehttps://schema.org/BlogPosting>meta itemscope itempropmainEntityOfPage itemtypehttps://schema.org/WebPage itemidhttps://eventivemeetings.com/blog/spotlight-on-liza-lampi-of-eventive-meetings/ contentSpotlight on Liza Lampi of Eventive Meetings />meta itempropdatePublished content2021-01-17 />meta itempropdateModified content2021-04-02 />div itemproppublisher itemscope itemtypehttps://schema.org/Organization>meta itempropname contentEventive Meetings>div itemproplogo itemscope itemtypehttps://schema.org/ImageObject>meta itempropurl contenthttps://eventivemeetings.com/wp-content/uploads/files/2021/desktop-logo.svg>/div>/div>div itemscope itempropauthor itemtypehttps://schema.org/Person>meta itempropurl contenthttps://eventivemeetings.com/blog/author/eventive-admin/ />meta itempropname contenteventive-admin />/div>div itemscope itempropimage itemtypehttps://schema.org/ImageObject>meta itempropurl contenthttps://eventivemeetings.com/wp-content/uploads/post/415/spotlight-on-liza-lampi-of-eventive-meetings.jpg />meta itempropwidth content1920 />meta itempropheight content1280 />/div>div itempropinteractionStatistic itemscope itemtypehttps://schema.org/InteractionCounter>meta itempropinteractionType contenthttps://schema.org/CommentAction />meta itempropuserInteractionCount content0 />/div>div classfl-post-grid-image> a hrefhttps://eventivemeetings.com/blog/spotlight-on-liza-lampi-of-eventive-meetings/ relbookmark titleSpotlight on Liza Lampi of Eventive Meetings> img loadinglazy decodingasync width300 height190 srchttps://eventivemeetings.com/wp-content/uploads/post/415/spotlight-on-liza-lampi-of-eventive-meetings-300x190.jpg classattachment-medium-thumbnail size-medium-thumbnail wp-post-image alt /> /a>/div>div classfl-post-grid-text>h5 classfl-post-grid-title itempropheadline> a hrefhttps://eventivemeetings.com/blog/spotlight-on-liza-lampi-of-eventive-meetings/ titleSpotlight on Liza Lampi of Eventive Meetings>Spotlight on Liza Lampi of Eventive Meetings/a>/h5>div classfl-post-grid-content> a classfl-post-grid-more hrefhttps://eventivemeetings.com/blog/spotlight-on-liza-lampi-of-eventive-meetings/ titleSpotlight on Liza Lampi of Eventive Meetings>Read more/a>/div>/div>/div>/div>/div>div classfl-clear>/div>/div>/div>div classfl-module fl-module-button-group fl-node-601b1d29650cb data-node601b1d29650cb>div classfl-module-content fl-node-content>div classfl-button-group fl-button-group-layout-horizontal fl-button-group-width->div classfl-button-group-buttons rolegroup aria-label>div idfl-button-group-button-601b1d29650cb-0 classfl-button-group-button fl-button-group-button-601b1d29650cb-0>div classfl-button-wrap fl-button-width-full fl-button-center> a hrefhttps://eventivemeetings.com/blog/ target_self classfl-button> span classfl-button-text>See More Posts/span> /a>/div>/div>div idfl-button-group-button-601b1d29650cb-1 classfl-button-group-button fl-button-group-button-601b1d29650cb-1>div classfl-button-wrap fl-button-width-full fl-button-center> a hrefhttps://eventivemeetings.com/contact/ target_self classfl-button> span classfl-button-text>Get Started/span> /a>/div>/div>/div>/div>/div>/div>/div>/div>/div>/div>/div>/div>div classfl-row fl-row-full-width fl-row-bg-none fl-node-601b2090b5f67 fl-row-default-height fl-row-align-center data-node601b2090b5f67>div classfl-row-content-wrap>div classfl-row-content fl-row-fixed-width fl-node-content>div classfl-col-group fl-node-601b2090bb882 data-node601b2090bb882>div classfl-col fl-node-601b2090bb907 fl-col-bg-color data-node601b2090bb907>div classfl-col-content fl-node-content>div classfl-module fl-module-adv-testimonials fl-node-601b211f1258e data-node601b211f1258e>div classfl-module-content fl-node-content>div classuabb-module-content uabb-testimonials-wrap wide>div classuabb-testimonials uabb-testimonial-top>div classuabb-testimonial uabb-testimonial0>div classuabb-testimonial-photo uabb-testimonial-top testimonial-photo601b211f1258e circle>div classuabb-module-content uabb-imgicon-wrap> span classuabb-icon-wrap> span classuabb-icon> i classfas fa-quote-left>/i> /span> /span>/div>/div>div classuabb-testimonial-info uabb-testimonial-top testimonial-info601b211f1258e style >div classuabb-testimonial-author-description uabb-text-editor testimonial-author-description601b211f1258e>p>“Our organization has had the pleasure of working with Eventive Meetings for more than 10 years on many events. All I can say is that they make us better! They do a wonderful job of helping us avoid the tough issues that surface that can derail a success event.”/p>/div>div classuabb-testimonial-author testimonial-author601b211f1258e>div classuabb-testimonial-author-name testimonial-author-name601b211f1258e>Bob/div>div classuabb-testimonial-author-designation testimonial-author-designation601b211f1258e> President & CEO/div>/div>/div>/div>/div>div classuabb-slider-prev>/div>div classuabb-slider-next>/div>/div>/div>/div>/div>/div>/div>/div>/div>/div>/div>div classuabb-js-breakpoint styledisplay: none;>/div>/div>/main>/div>/div>div classwpbf-custom-section wpbf-custom-section-footer-main>link relstylesheet idultimate-icons-css hrefhttps://eventivemeetings.com/wp-content/cache/autoptimize/css/autoptimize_single_f553fbb2b753450e2ba5d3b51f97b48c.css mediaall />div classfl-builder-content fl-builder-content-71 fl-builder-global-templates-locked data-post-id71>div classfl-row fl-row-full-width fl-row-bg-none fl-node-601ae6b49d38c fl-row-default-height fl-row-align-center data-node601ae6b49d38c>div classfl-row-content-wrap>div classfl-row-content fl-row-fixed-width fl-node-content>div classfl-col-group fl-node-601ae6b4a02fe data-node601ae6b4a02fe>div classfl-col fl-node-601ae6b4a037b fl-col-bg-color fl-col-small data-node601ae6b4a037b>div classfl-col-content fl-node-content>div classfl-module fl-module-photo fl-node-601ae6ba14b54 data-node601ae6ba14b54>div classfl-module-content fl-node-content>div classfl-photo fl-photo-align-left itemscope itemtypehttps://schema.org/ImageObject>div classfl-photo-content fl-photo-img-png> a hrefhttps://eventivemeetings.com/ target_self itempropurl> img loadinglazy decodingasync classfl-photo-img wp-image-79 size-full srchttps://eventivemeetings.com/wp-content/uploads/wpbf_hooks/71/eventive-meetings.png alteventive-meetings itempropimage height111 width124 titleeventive-meetings /> /a>/div>/div>/div>/div>/div>/div>div classfl-col fl-node-601ae6b4a037e fl-col-bg-color fl-col-small data-node601ae6b4a037e>div classfl-col-content fl-node-content>div classfl-module fl-module-heading fl-node-601aedab306d4 data-node601aedab306d4>div classfl-module-content fl-node-content>h5 classfl-heading> span classfl-heading-text>Quick Links/span>/h5>/div>/div>div classfl-module fl-module-menu fl-node-601ae7e4915a0 menu-cols-2 data-node601ae7e4915a0>div classfl-module-content fl-node-content>div classfl-menu>div classfl-clear>/div>nav aria-labelMenu itemscopeitemscope itemtypehttps://schema.org/SiteNavigationElement>ul idmenu-footer-quick-links classmenu fl-menu-vertical fl-toggle-none>li idmenu-item-80 classmenu-item menu-item-type-post_type menu-item-object-page menu-item-home current-menu-item page_item page-item-8 current_page_item>a hrefhttps://eventivemeetings.com/>Home/a>/li>li idmenu-item-88 classmenu-item menu-item-type-post_type menu-item-object-page>a hrefhttps://eventivemeetings.com/virtual/>Virtual Event Services/a>/li>li idmenu-item-85 classmenu-item menu-item-type-post_type menu-item-object-page>a hrefhttps://eventivemeetings.com/events/>Events & Conferences/a>/li>li idmenu-item-86 classmenu-item menu-item-type-post_type menu-item-object-page>a hrefhttps://eventivemeetings.com/incentive/>Incentive Travel/a>/li>li idmenu-item-81 classmenu-item menu-item-type-post_type menu-item-object-page>a hrefhttps://eventivemeetings.com/blog/>Blog/a>/li>li idmenu-item-83 classmenu-item menu-item-type-post_type menu-item-object-page>a hrefhttps://eventivemeetings.com/contact/>Contact Us/a>/li>li idmenu-item-84 classmenu-item menu-item-type-post_type menu-item-object-page>a hrefhttps://eventivemeetings.com/portal/>Event Portal/a>/li>li idmenu-item-87 classmenu-item menu-item-type-post_type menu-item-object-page>a hrefhttps://eventivemeetings.com/sitemap/>Sitemap/a>/li>li idmenu-item-82 classmenu-item menu-item-type-post_type menu-item-object-page menu-item-privacy-policy>a hrefhttps://eventivemeetings.com/privacy/>Privacy Statement/a>/li>/ul>/nav>/div>/div>/div>/div>/div>div classfl-col fl-node-601af36524adc fl-col-bg-color fl-col-small fl-visible-desktop fl-visible-large data-node601af36524adc>div classfl-col-content fl-node-content>/div>/div>div classfl-col fl-node-601ae6b4a0380 fl-col-bg-color fl-col-small data-node601ae6b4a0380>div classfl-col-content fl-node-content>div classfl-module fl-module-heading fl-node-601aedd27ec3a data-node601aedd27ec3a>div classfl-module-content fl-node-content>h5 classfl-heading> span classfl-heading-text>Follow us/span>/h5>/div>/div>div classfl-module fl-module-icon-group fl-node-601aec72c83db data-node601aec72c83db>div classfl-module-content fl-node-content>div classfl-icon-group> span classfl-icon> a hrefhttps://www.facebook.com/eventivemeetings/ target_blank relnoopener > i classua-icon ua-icon-facebook22 aria-hiddentrue>/i> span classsr-only>Eventive Meetings on Facebook/span> /a> /span> span classfl-icon> a hrefhttps://twitter.com/eventivemeeting target_blank relnoopener > i classua-icon ua-icon-twitter2 aria-hiddentrue>/i> span classsr-only>Eventive Meetings on Twitter/span> /a> /span> span classfl-icon> a hrefhttp://www.pinterest.com/eventive/ target_blank relnoopener > i classua-icon ua-icon-pinterest aria-hiddentrue>/i> span classsr-only>Eventive Meetings on Pinterest/span> /a> /span>/div>/div>/div>/div>/div>/div>/div>/div>/div>/div>div classuabb-js-breakpoint styledisplay: none;>/div>/div>footer idfooter classwpbf-page-footer itemscopeitemscope itemtypehttps://schema.org/WPFooter>div classwpbf-inner-footer wpbf-container wpbf-container-center wpbf-footer-two-columns>div classwpbf-inner-footer-left> © 2024 - Eventive Meetings. All Rights Reserved./div>div classwpbf-inner-footer-right> a relnofollow hrefhttps://www.iqcomputing.com/>St. Louis Web Design/a> by IQComputing/div>/div>/footer>/div> a classscrolltop relnofollow hrefjavascript:void(0) data-scrolltop-value400>span classscreen-reader-text>Scroll to Top/span>i classwpbff wpbff-arrow-up>/i>/a> script defer srchttps://eventivemeetings.com/wp-content/plugins/bb-plugin/js/jquery.easing.min.js idjquery-easing-js>/script> script defer srchttps://eventivemeetings.com/wp-content/plugins/bb-plugin/js/jquery.fitvids.min.js idjquery-fitvids-js>/script> script defer srchttps://eventivemeetings.com/wp-content/cache/autoptimize/js/autoptimize_single_8090b1cf85db916b974f163ab54755f0.js idjquery-bxslider-js>/script> script defer srchttps://eventivemeetings.com/wp-content/plugins/bb-plugin/js/jquery.imagesloaded.min.js idimagesloaded-js>/script> script defer srchttps://eventivemeetings.com/wp-content/plugins/bb-plugin/js/jquery.waypoints.min.js idjquery-waypoints-js>/script> script defer srchttps://eventivemeetings.com/wp-content/cache/autoptimize/js/autoptimize_single_ac0d07fdd7b3bae8c9f6ab08434eb28a.js idjquery-magnificpopup-js>/script> script defer srchttps://eventivemeetings.com/wp-content/cache/autoptimize/js/autoptimize_single_bc3190ccc50b8566730fa034a32ee3ff.js idfl-builder-layout-8-js>/script> script defer idwpbf-site-js-before srcdata:text/javascript;base64,CnZhciBXcGJmT2JqID0gewoJCQlhamF4dXJsOiAiaHR0cHM6Ly9ldmVudGl2ZW1lZXRpbmdzLmNvbS93cC1hZG1pbi9hZG1pbi1hamF4LnBocCIKCQl9Owo>/script> script defer srchttps://eventivemeetings.com/wp-content/themes/page-builder-framework/js/min/site-jquery-min.js idwpbf-site-js>/script> script defer srchttps://eventivemeetings.com/wp-includes/js/comment-reply.min.js idcomment-reply-js data-wp-strategyasync>/script> script defer srchttps://eventivemeetings.com/wp-content/plugins/easy-fancybox/vendor/purify.min.js idfancybox-purify-js>/script> script defer srchttps://eventivemeetings.com/wp-content/cache/autoptimize/js/autoptimize_single_be604286ac90c7ad40c832308f036750.js idjquery-fancybox-js>/script> script defer idjquery-fancybox-js-after srcdata:text/javascript;base64,CnZhciBmYl90aW1lb3V0LCBmYl9vcHRzPXsnYXV0b1NjYWxlJzp0cnVlLCdzaG93Q2xvc2VCdXR0b24nOnRydWUsJ3dpZHRoJzo1NjAsJ2hlaWdodCc6MzQwLCdtYXJnaW4nOjIwLCdwaXhlbFJhdGlvJzonZmFsc2UnLCdwYWRkaW5nJzoxMCwnY2VudGVyT25TY3JvbGwnOmZhbHNlLCdlbmFibGVFc2NhcGVCdXR0b24nOnRydWUsJ3NwZWVkSW4nOjMwMCwnc3BlZWRPdXQnOjMwMCwnb3ZlcmxheVNob3cnOnRydWUsJ2hpZGVPbk92ZXJsYXlDbGljayc6dHJ1ZSwnb3ZlcmxheUNvbG9yJzonIzAwMCcsJ292ZXJsYXlPcGFjaXR5JzowLjYsJ21pblZpZXdwb3J0V2lkdGgnOjMyMCwnbWluVnBIZWlnaHQnOjMyMCwnZGlzYWJsZUNvcmVMaWdodGJveCc6J3RydWUnLCdlbmFibGVCbG9ja0NvbnRyb2xzJzondHJ1ZScsJ2ZhbmN5Ym94X29wZW5CbG9ja0NvbnRyb2xzJzondHJ1ZScgfTsKaWYodHlwZW9mIGVhc3lfZmFuY3lib3hfaGFuZGxlcj09PSd1bmRlZmluZWQnKXsKdmFyIGVhc3lfZmFuY3lib3hfaGFuZGxlcj1mdW5jdGlvbigpewpqUXVlcnkoWyIubm9saWdodGJveCIsImEud3AtYmxvY2stZmlsZV9fYnV0dG9uIiwiYS5waW4taXQtYnV0dG9uIiwiYVtocmVmKj0ncGludGVyZXN0LmNvbVwvcGluXC9jcmVhdGUnXSIsImFbaHJlZio9J2ZhY2Vib29rLmNvbVwvc2hhcmUnXSIsImFbaHJlZio9J3R3aXR0ZXIuY29tXC9zaGFyZSddIl0uam9pbignLCcpKS5hZGRDbGFzcygnbm9mYW5jeWJveCcpOwpqUXVlcnkoJ2EuZmFuY3lib3gtY2xvc2UnKS5vbignY2xpY2snLGZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKTtqUXVlcnkuZmFuY3lib3guY2xvc2UoKX0pOwovKiBJTUcgKi8KCQkJCQkJdmFyIHVubGlua2VkSW1hZ2VCbG9ja3M9alF1ZXJ5KCIud3AtYmxvY2staW1hZ2UgPiBpbWc6bm90KC5ub2ZhbmN5Ym94LGZpZ3VyZS5ub2ZhbmN5Ym94PmltZykiKTsKCQkJCQkJdW5saW5rZWRJbWFnZUJsb2Nrcy53cmFwKGZ1bmN0aW9uKCkgewoJCQkJCQkJdmFyIGhyZWYgPSBqUXVlcnkoIHRoaXMgKS5hdHRyKCAic3JjIiApOwoJCQkJCQkJcmV0dXJuICI8YSBocmVmPSciICsgaHJlZiArICInPjwvYT4iOwoJCQkJCQl9KTsKdmFyIGZiX0lNR19zZWxlY3Q9alF1ZXJ5KCdhW2hyZWYqPSIuanBnIiBpXTpub3QoLm5vZmFuY3lib3gsbGkubm9mYW5jeWJveD5hLGZpZ3VyZS5ub2ZhbmN5Ym94PmEpLGFyZWFbaHJlZio9Ii5qcGciIGldOm5vdCgubm9mYW5jeWJveCksYVtocmVmKj0iLnBuZyIgaV06bm90KC5ub2ZhbmN5Ym94LGxpLm5vZmFuY3lib3g+YSxmaWd1cmUubm9mYW5jeWJveD5hKSxhcmVhW2hyZWYqPSIucG5nIiBpXTpub3QoLm5vZmFuY3lib3gpLGFbaHJlZio9Ii53ZWJwIiBpXTpub3QoLm5vZmFuY3lib3gsbGkubm9mYW5jeWJveD5hLGZpZ3VyZS5ub2ZhbmN5Ym94PmEpLGFyZWFbaHJlZio9Ii53ZWJwIiBpXTpub3QoLm5vZmFuY3lib3gpLGFbaHJlZio9Ii5qcGVnIiBpXTpub3QoLm5vZmFuY3lib3gsbGkubm9mYW5jeWJveD5hLGZpZ3VyZS5ub2ZhbmN5Ym94PmEpLGFyZWFbaHJlZio9Ii5qcGVnIiBpXTpub3QoLm5vZmFuY3lib3gpJyk7CmZiX0lNR19zZWxlY3QuYWRkQ2xhc3MoJ2ZhbmN5Ym94IGltYWdlJyk7CnZhciBmYl9JTUdfc2VjdGlvbnM9alF1ZXJ5KCcuZ2FsbGVyeSwud3AtYmxvY2stZ2FsbGVyeSwudGlsZWQtZ2FsbGVyeSwud3AtYmxvY2stamV0cGFjay10aWxlZC1nYWxsZXJ5LC5uZ2ctZ2FsbGVyeW92ZXJ2aWV3LC5uZ2ctaW1hZ2Vicm93c2VyLC5uZXh0Z2VuX3Byb19ibG9nX2dhbGxlcnksLm5leHRnZW5fcHJvX2ZpbG0sLm5leHRnZW5fcHJvX2hvcml6b250YWxfZmlsbXN0cmlwLC5uZ2ctcHJvLW1hc29ucnktd3JhcHBlciwubmdnLXByby1tb3NhaWMtY29udGFpbmVyLC5uZXh0Z2VuX3Byb19zaWRlc2Nyb2xsLC5uZXh0Z2VuX3Byb19zbGlkZXNob3csLm5leHRnZW5fcHJvX3RodW1ibmFpbF9ncmlkLC50aWxlZC1nYWxsZXJ5Jyk7CmZiX0lNR19zZWN0aW9ucy5lYWNoKGZ1bmN0aW9uKCl7alF1ZXJ5KHRoaXMpLmZpbmQoZmJfSU1HX3NlbGVjdCkuYXR0cigncmVsJywnZ2FsbGVyeS0nK2ZiX0lNR19zZWN0aW9ucy5pbmRleCh0aGlzKSk7fSk7CmpRdWVyeSgnYS5mYW5jeWJveCxhcmVhLmZhbmN5Ym94LC5mYW5jeWJveD5hJykuZWFjaChmdW5jdGlvbigpe2pRdWVyeSh0aGlzKS5mYW5jeWJveChqUXVlcnkuZXh0ZW5kKHRydWUse30sZmJfb3B0cyx7J3RyYW5zaXRpb24nOidlbGFzdGljJywndHJhbnNpdGlvbkluJzonZWxhc3RpYycsJ3RyYW5zaXRpb25PdXQnOidlbGFzdGljJywnb3BhY2l0eSc6ZmFsc2UsJ2hpZGVPbkNvbnRlbnRDbGljayc6ZmFsc2UsJ3RpdGxlU2hvdyc6dHJ1ZSwndGl0bGVQb3NpdGlvbic6J292ZXInLCd0aXRsZUZyb21BbHQnOnRydWUsJ3Nob3dOYXZBcnJvd3MnOnRydWUsJ2VuYWJsZUtleWJvYXJkTmF2Jzp0cnVlLCdjeWNsaWMnOmZhbHNlLCdtb3VzZVdoZWVsJzondHJ1ZScsJ2NoYW5nZVNwZWVkJzoyNTAsJ2NoYW5nZUZhZGUnOjMwMH0pKX0pOwp9O307CnZhciBlYXN5X2ZhbmN5Ym94X2F1dG89ZnVuY3Rpb24oKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7alF1ZXJ5KCdhI2ZhbmN5Ym94LWF1dG8sI2ZhbmN5Ym94LWF1dG8+YScpLmZpcnN0KCkudHJpZ2dlcignY2xpY2snKX0sMTAwMCk7fTsKalF1ZXJ5KGVhc3lfZmFuY3lib3hfaGFuZGxlcik7alF1ZXJ5KGRvY3VtZW50KS5vbigncG9zdC1sb2FkJyxlYXN5X2ZhbmN5Ym94X2hhbmRsZXIpOwpqUXVlcnkoZWFzeV9mYW5jeWJveF9hdXRvKTsK>/script> script defer srchttps://eventivemeetings.com/wp-content/cache/autoptimize/js/autoptimize_single_409ac3648bba069c079fedc1ca107913.js idjquery-mousewheel-js>/script> script defer srchttps://eventivemeetings.com/wp-content/cache/autoptimize/js/autoptimize_single_c6812768b861186725f7edafc9d47056.js idwpbf-premium-js>/script> script defer srcdata:text/javascript;base64,LyohCiAqIEJvd3NlciAtIGEgYnJvd3NlciBkZXRlY3RvcgogKiBodHRwczovL2dpdGh1Yi5jb20vZGVkL2Jvd3NlcgogKiBNSVQgTGljZW5zZSB8IChjKSBEdXN0aW4gRGlheiAyMDE1CiAqLwoKIWZ1bmN0aW9uIChuYW1lLCBkZWZpbml0aW9uKSB7CiAgaWYgKHR5cGVvZiBtb2R1bGUgIT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIG1vZHVsZS5leHBvcnRzID0gZGVmaW5pdGlvbigpCiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIGRlZmluZShuYW1lLCBkZWZpbml0aW9uKQogIGVsc2UgdGhpc1tuYW1lXSA9IGRlZmluaXRpb24oKQp9KCdib3dzZXInLCBmdW5jdGlvbiAoKSB7CiAgLyoqCiAgICAqIFNlZSB1c2VyYWdlbnRzLmpzIGZvciBleGFtcGxlcyBvZiBuYXZpZ2F0b3IudXNlckFnZW50CiAgICAqLwoKICB2YXIgdCA9IHRydWUKCiAgZnVuY3Rpb24gZGV0ZWN0KHVhKSB7CgogICAgZnVuY3Rpb24gZ2V0Rmlyc3RNYXRjaChyZWdleCkgewogICAgICB2YXIgbWF0Y2ggPSB1YS5tYXRjaChyZWdleCk7CiAgICAgIHJldHVybiAobWF0Y2ggJiYgbWF0Y2gubGVuZ3RoID4gMSAmJiBtYXRjaFsxXSkgfHwgJyc7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0U2Vjb25kTWF0Y2gocmVnZXgpIHsKICAgICAgdmFyIG1hdGNoID0gdWEubWF0Y2gocmVnZXgpOwogICAgICByZXR1cm4gKG1hdGNoICYmIG1hdGNoLmxlbmd0aCA+IDEgJiYgbWF0Y2hbMl0pIHx8ICcnOwogICAgfQoKICAgIHZhciBpb3NkZXZpY2UgPSBnZXRGaXJzdE1hdGNoKC8oaXBvZHxpcGhvbmV8aXBhZCkvaSkudG9Mb3dlckNhc2UoKQogICAgICAsIGxpa2VBbmRyb2lkID0gL2xpa2UgYW5kcm9pZC9pLnRlc3QodWEpCiAgICAgICwgYW5kcm9pZCA9ICFsaWtlQW5kcm9pZCAmJiAvYW5kcm9pZC9pLnRlc3QodWEpCiAgICAgICwgbmV4dXNNb2JpbGUgPSAvbmV4dXNccypbMC02XVxzKi9pLnRlc3QodWEpCiAgICAgICwgbmV4dXNUYWJsZXQgPSAhbmV4dXNNb2JpbGUgJiYgL25leHVzXHMqWzAtOV0rL2kudGVzdCh1YSkKICAgICAgLCBjaHJvbWVvcyA9IC9Dck9TLy50ZXN0KHVhKQogICAgICAsIHNpbGsgPSAvc2lsay9pLnRlc3QodWEpCiAgICAgICwgc2FpbGZpc2ggPSAvc2FpbGZpc2gvaS50ZXN0KHVhKQogICAgICAsIHRpemVuID0gL3RpemVuL2kudGVzdCh1YSkKICAgICAgLCB3ZWJvcyA9IC8od2VifGhwdylvcy9pLnRlc3QodWEpCiAgICAgICwgd2luZG93c3Bob25lID0gL3dpbmRvd3MgcGhvbmUvaS50ZXN0KHVhKQogICAgICAsIHdpbmRvd3MgPSAhd2luZG93c3Bob25lICYmIC93aW5kb3dzL2kudGVzdCh1YSkKICAgICAgLCBtYWMgPSAhaW9zZGV2aWNlICYmICFzaWxrICYmIC9tYWNpbnRvc2gvaS50ZXN0KHVhKQogICAgICAsIGxpbnV4ID0gIWFuZHJvaWQgJiYgIXNhaWxmaXNoICYmICF0aXplbiAmJiAhd2Vib3MgJiYgL2xpbnV4L2kudGVzdCh1YSkKICAgICAgLCBlZGdlVmVyc2lvbiA9IGdldEZpcnN0TWF0Y2goL2VkZ2VcLyhcZCsoXC5cZCspPykvaSkKICAgICAgLCB2ZXJzaW9uSWRlbnRpZmllciA9IGdldEZpcnN0TWF0Y2goL3ZlcnNpb25cLyhcZCsoXC5cZCspPykvaSkKICAgICAgLCB0YWJsZXQgPSAvdGFibGV0L2kudGVzdCh1YSkKICAgICAgLCBtb2JpbGUgPSAhdGFibGV0ICYmIC9bXi1dbW9iaS9pLnRlc3QodWEpCiAgICAgICwgeGJveCA9IC94Ym94L2kudGVzdCh1YSkKICAgICAgLCByZXN1bHQKCiAgICBpZiAoL29wZXJhfG9wcnxvcGlvcy9pLnRlc3QodWEpKSB7CiAgICAgIHJlc3VsdCA9IHsKICAgICAgICBuYW1lOiAnT3BlcmEnCiAgICAgICwgb3BlcmE6IHQKICAgICAgLCB2ZXJzaW9uOiB2ZXJzaW9uSWRlbnRpZmllciB8fCBnZXRGaXJzdE1hdGNoKC8oPzpvcGVyYXxvcHJ8b3Bpb3MpW1xzXC9dKFxkKyhcLlxkKyk/KS9pKQogICAgICB9CiAgICB9CiAgICBlbHNlIGlmICgvY29hc3QvaS50ZXN0KHVhKSkgewogICAgICByZXN1bHQgPSB7CiAgICAgICAgbmFtZTogJ09wZXJhIENvYXN0JwogICAgICAgICwgY29hc3Q6IHQKICAgICAgICAsIHZlcnNpb246IHZlcnNpb25JZGVudGlmaWVyIHx8IGdldEZpcnN0TWF0Y2goLyg/OmNvYXN0KVtcc1wvXShcZCsoXC5cZCspPykvaSkKICAgICAgfQogICAgfQogICAgZWxzZSBpZiAoL3lhYnJvd3Nlci9pLnRlc3QodWEpKSB7CiAgICAgIHJlc3VsdCA9IHsKICAgICAgICBuYW1lOiAnWWFuZGV4IEJyb3dzZXInCiAgICAgICwgeWFuZGV4YnJvd3NlcjogdAogICAgICAsIHZlcnNpb246IHZlcnNpb25JZGVudGlmaWVyIHx8IGdldEZpcnN0TWF0Y2goLyg/OnlhYnJvd3NlcilbXHNcL10oXGQrKFwuXGQrKT8pL2kpCiAgICAgIH0KICAgIH0KICAgIGVsc2UgaWYgKC91Y2Jyb3dzZXIvaS50ZXN0KHVhKSkgewogICAgICByZXN1bHQgPSB7CiAgICAgICAgICBuYW1lOiAnVUMgQnJvd3NlcicKICAgICAgICAsIHVjYnJvd3NlcjogdAogICAgICAgICwgdmVyc2lvbjogZ2V0Rmlyc3RNYXRjaCgvKD86dWNicm93c2VyKVtcc1wvXShcZCsoPzpcLlxkKykrKS9pKQogICAgICB9CiAgICB9CiAgICBlbHNlIGlmICgvbXhpb3MvaS50ZXN0KHVhKSkgewogICAgICByZXN1bHQgPSB7CiAgICAgICAgbmFtZTogJ01heHRob24nCiAgICAgICAgLCBtYXh0aG9uOiB0CiAgICAgICAgLCB2ZXJzaW9uOiBnZXRGaXJzdE1hdGNoKC8oPzpteGlvcylbXHNcL10oXGQrKD86XC5cZCspKykvaSkKICAgICAgfQogICAgfQogICAgZWxzZSBpZiAoL2VwaXBoYW55L2kudGVzdCh1YSkpIHsKICAgICAgcmVzdWx0ID0gewogICAgICAgIG5hbWU6ICdFcGlwaGFueScKICAgICAgICAsIGVwaXBoYW55OiB0CiAgICAgICAgLCB2ZXJzaW9uOiBnZXRGaXJzdE1hdGNoKC8oPzplcGlwaGFueSlbXHNcL10oXGQrKD86XC5cZCspKykvaSkKICAgICAgfQogICAgfQogICAgZWxzZSBpZiAoL3B1ZmZpbi9pLnRlc3QodWEpKSB7CiAgICAgIHJlc3VsdCA9IHsKICAgICAgICBuYW1lOiAnUHVmZmluJwogICAgICAgICwgcHVmZmluOiB0CiAgICAgICAgLCB2ZXJzaW9uOiBnZXRGaXJzdE1hdGNoKC8oPzpwdWZmaW4pW1xzXC9dKFxkKyg/OlwuXGQrKT8pL2kpCiAgICAgIH0KICAgIH0KICAgIGVsc2UgaWYgKC9zbGVpcG5pci9pLnRlc3QodWEpKSB7CiAgICAgIHJlc3VsdCA9IHsKICAgICAgICBuYW1lOiAnU2xlaXBuaXInCiAgICAgICAgLCBzbGVpcG5pcjogdAogICAgICAgICwgdmVyc2lvbjogZ2V0Rmlyc3RNYXRjaCgvKD86c2xlaXBuaXIpW1xzXC9dKFxkKyg/OlwuXGQrKSspL2kpCiAgICAgIH0KICAgIH0KICAgIGVsc2UgaWYgKC9rLW1lbGVvbi9pLnRlc3QodWEpKSB7CiAgICAgIHJlc3VsdCA9IHsKICAgICAgICBuYW1lOiAnSy1NZWxlb24nCiAgICAgICAgLCBrTWVsZW9uOiB0CiAgICAgICAgLCB2ZXJzaW9uOiBnZXRGaXJzdE1hdGNoKC8oPzprLW1lbGVvbilbXHNcL10oXGQrKD86XC5cZCspKykvaSkKICAgICAgfQogICAgfQogICAgZWxzZSBpZiAod2luZG93c3Bob25lKSB7CiAgICAgIHJlc3VsdCA9IHsKICAgICAgICBuYW1lOiAnV2luZG93cyBQaG9uZScKICAgICAgLCB3aW5kb3dzcGhvbmU6IHQKICAgICAgfQogICAgICBpZiAoZWRnZVZlcnNpb24pIHsKICAgICAgICByZXN1bHQubXNlZGdlID0gdAogICAgICAgIHJlc3VsdC52ZXJzaW9uID0gZWRnZVZlcnNpb24KICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICByZXN1bHQubXNpZSA9IHQKICAgICAgICByZXN1bHQudmVyc2lvbiA9IGdldEZpcnN0TWF0Y2goL2llbW9iaWxlXC8oXGQrKFwuXGQrKT8pL2kpCiAgICAgIH0KICAgIH0KICAgIGVsc2UgaWYgKC9tc2llfHRyaWRlbnQvaS50ZXN0KHVhKSkgewogICAgICByZXN1bHQgPSB7CiAgICAgICAgbmFtZTogJ0ludGVybmV0IEV4cGxvcmVyJwogICAgICAsIG1zaWU6IHQKICAgICAgLCB2ZXJzaW9uOiBnZXRGaXJzdE1hdGNoKC8oPzptc2llIHxydjopKFxkKyhcLlxkKyk/KS9pKQogICAgICB9CiAgICB9IGVsc2UgaWYgKGNocm9tZW9zKSB7CiAgICAgIHJlc3VsdCA9IHsKICAgICAgICBuYW1lOiAnQ2hyb21lJwogICAgICAsIGNocm9tZW9zOiB0CiAgICAgICwgY2hyb21lQm9vazogdAogICAgICAsIGNocm9tZTogdAogICAgICAsIHZlcnNpb246IGdldEZpcnN0TWF0Y2goLyg/OmNocm9tZXxjcmlvc3xjcm1vKVwvKFxkKyhcLlxkKyk/KS9pKQogICAgICB9CiAgICB9IGVsc2UgaWYgKC9jaHJvbWUuKz8gZWRnZS9pLnRlc3QodWEpKSB7CiAgICAgIHJlc3VsdCA9IHsKICAgICAgICBuYW1lOiAnTWljcm9zb2Z0IEVkZ2UnCiAgICAgICwgbXNlZGdlOiB0CiAgICAgICwgdmVyc2lvbjogZWRnZVZlcnNpb24KICAgICAgfQogICAgfQogICAgZWxzZSBpZiAoL3ZpdmFsZGkvaS50ZXN0KHVhKSkgewogICAgICByZXN1bHQgPSB7CiAgICAgICAgbmFtZTogJ1ZpdmFsZGknCiAgICAgICAgLCB2aXZhbGRpOiB0CiAgICAgICAgLCB2ZXJzaW9uOiBnZXRGaXJzdE1hdGNoKC92aXZhbGRpXC8oXGQrKFwuXGQrKT8pL2kpIHx8IHZlcnNpb25JZGVudGlmaWVyCiAgICAgIH0KICAgIH0KICAgIGVsc2UgaWYgKHNhaWxmaXNoKSB7CiAgICAgIHJlc3VsdCA9IHsKICAgICAgICBuYW1lOiAnU2FpbGZpc2gnCiAgICAgICwgc2FpbGZpc2g6IHQKICAgICAgLCB2ZXJzaW9uOiBnZXRGaXJzdE1hdGNoKC9zYWlsZmlzaFxzP2Jyb3dzZXJcLyhcZCsoXC5cZCspPykvaSkKICAgICAgfQogICAgfQogICAgZWxzZSBpZiAoL3NlYW1vbmtleVwvL2kudGVzdCh1YSkpIHsKICAgICAgcmVzdWx0ID0gewogICAgICAgIG5hbWU6ICdTZWFNb25rZXknCiAgICAgICwgc2VhbW9ua2V5OiB0CiAgICAgICwgdmVyc2lvbjogZ2V0Rmlyc3RNYXRjaCgvc2VhbW9ua2V5XC8oXGQrKFwuXGQrKT8pL2kpCiAgICAgIH0KICAgIH0KICAgIGVsc2UgaWYgKC9maXJlZm94fGljZXdlYXNlbHxmeGlvcy9pLnRlc3QodWEpKSB7CiAgICAgIHJlc3VsdCA9IHsKICAgICAgICBuYW1lOiAnRmlyZWZveCcKICAgICAgLCBmaXJlZm94OiB0CiAgICAgICwgdmVyc2lvbjogZ2V0Rmlyc3RNYXRjaCgvKD86ZmlyZWZveHxpY2V3ZWFzZWx8Znhpb3MpWyBcL10oXGQrKFwuXGQrKT8pL2kpCiAgICAgIH0KICAgICAgaWYgKC9cKChtb2JpbGV8dGFibGV0KTtbXlwpXSpydjpbXGRcLl0rXCkvaS50ZXN0KHVhKSkgewogICAgICAgIHJlc3VsdC5maXJlZm94b3MgPSB0CiAgICAgIH0KICAgIH0KICAgIGVsc2UgaWYgKHNpbGspIHsKICAgICAgcmVzdWx0ID0gIHsKICAgICAgICBuYW1lOiAnQW1hem9uIFNpbGsnCiAgICAgICwgc2lsazogdAogICAgICAsIHZlcnNpb24gOiBnZXRGaXJzdE1hdGNoKC9zaWxrXC8oXGQrKFwuXGQrKT8pL2kpCiAgICAgIH0KICAgIH0KICAgIGVsc2UgaWYgKC9waGFudG9tL2kudGVzdCh1YSkpIHsKICAgICAgcmVzdWx0ID0gewogICAgICAgIG5hbWU6ICdQaGFudG9tSlMnCiAgICAgICwgcGhhbnRvbTogdAogICAgICAsIHZlcnNpb246IGdldEZpcnN0TWF0Y2goL3BoYW50b21qc1wvKFxkKyhcLlxkKyk/KS9pKQogICAgICB9CiAgICB9CiAgICBlbHNlIGlmICgvc2xpbWVyanMvaS50ZXN0KHVhKSkgewogICAgICByZXN1bHQgPSB7CiAgICAgICAgbmFtZTogJ1NsaW1lckpTJwogICAgICAgICwgc2xpbWVyOiB0CiAgICAgICAgLCB2ZXJzaW9uOiBnZXRGaXJzdE1hdGNoKC9zbGltZXJqc1wvKFxkKyhcLlxkKyk/KS9pKQogICAgICB9CiAgICB9CiAgICBlbHNlIGlmICgvYmxhY2tiZXJyeXxcYmJiXGQrL2kudGVzdCh1YSkgfHwgL3JpbVxzdGFibGV0L2kudGVzdCh1YSkpIHsKICAgICAgcmVzdWx0ID0gewogICAgICAgIG5hbWU6ICdCbGFja0JlcnJ5JwogICAgICAsIGJsYWNrYmVycnk6IHQKICAgICAgLCB2ZXJzaW9uOiB2ZXJzaW9uSWRlbnRpZmllciB8fCBnZXRGaXJzdE1hdGNoKC9ibGFja2JlcnJ5W1xkXStcLyhcZCsoXC5cZCspPykvaSkKICAgICAgfQogICAgfQogICAgZWxzZSBpZiAod2Vib3MpIHsKICAgICAgcmVzdWx0ID0gewogICAgICAgIG5hbWU6ICdXZWJPUycKICAgICAgLCB3ZWJvczogdAogICAgICAsIHZlcnNpb246IHZlcnNpb25JZGVudGlmaWVyIHx8IGdldEZpcnN0TWF0Y2goL3coPzplYik/b3Nicm93c2VyXC8oXGQrKFwuXGQrKT8pL2kpCiAgICAgIH07CiAgICAgIGlmKCAvdG91Y2hwYWRcLy9pLnRlc3QodWEpICl7CiAgICAgICAgcmVzdWx0LnRvdWNocGFkID0gdDsKICAgICAgfQogICAgfQogICAgZWxzZSBpZiAoL2JhZGEvaS50ZXN0KHVhKSkgewogICAgICByZXN1bHQgPSB7CiAgICAgICAgbmFtZTogJ0JhZGEnCiAgICAgICwgYmFkYTogdAogICAgICAsIHZlcnNpb246IGdldEZpcnN0TWF0Y2goL2RvbGZpblwvKFxkKyhcLlxkKyk/KS9pKQogICAgICB9OwogICAgfQogICAgZWxzZSBpZiAodGl6ZW4pIHsKICAgICAgcmVzdWx0ID0gewogICAgICAgIG5hbWU6ICdUaXplbicKICAgICAgLCB0aXplbjogdAogICAgICAsIHZlcnNpb246IGdldEZpcnN0TWF0Y2goLyg/OnRpemVuXHM/KT9icm93c2VyXC8oXGQrKFwuXGQrKT8pL2kpIHx8IHZlcnNpb25JZGVudGlmaWVyCiAgICAgIH07CiAgICB9CiAgICBlbHNlIGlmICgvcXVwemlsbGEvaS50ZXN0KHVhKSkgewogICAgICByZXN1bHQgPSB7CiAgICAgICAgbmFtZTogJ1F1cFppbGxhJwogICAgICAgICwgcXVwemlsbGE6IHQKICAgICAgICAsIHZlcnNpb246IGdldEZpcnN0TWF0Y2goLyg/OnF1cHppbGxhKVtcc1wvXShcZCsoPzpcLlxkKykrKS9pKSB8fCB2ZXJzaW9uSWRlbnRpZmllcgogICAgICB9CiAgICB9CiAgICBlbHNlIGlmICgvY2hyb21pdW0vaS50ZXN0KHVhKSkgewogICAgICByZXN1bHQgPSB7CiAgICAgICAgbmFtZTogJ0Nocm9taXVtJwogICAgICAgICwgY2hyb21pdW06IHQKICAgICAgICAsIHZlcnNpb246IGdldEZpcnN0TWF0Y2goLyg/OmNocm9taXVtKVtcc1wvXShcZCsoPzpcLlxkKyk/KS9pKSB8fCB2ZXJzaW9uSWRlbnRpZmllcgogICAgICB9CiAgICB9CiAgICBlbHNlIGlmICgvY2hyb21lfGNyaW9zfGNybW8vaS50ZXN0KHVhKSkgewogICAgICByZXN1bHQgPSB7CiAgICAgICAgbmFtZTogJ0Nocm9tZScKICAgICAgICAsIGNocm9tZTogdAogICAgICAgICwgdmVyc2lvbjogZ2V0Rmlyc3RNYXRjaCgvKD86Y2hyb21lfGNyaW9zfGNybW8pXC8oXGQrKFwuXGQrKT8pL2kpCiAgICAgIH0KICAgIH0KICAgIGVsc2UgaWYgKGFuZHJvaWQpIHsKICAgICAgcmVzdWx0ID0gewogICAgICAgIG5hbWU6ICdBbmRyb2lkJwogICAgICAgICwgdmVyc2lvbjogdmVyc2lvbklkZW50aWZpZXIKICAgICAgfQogICAgfQogICAgZWxzZSBpZiAoL3NhZmFyaXxhcHBsZXdlYmtpdC9pLnRlc3QodWEpKSB7CiAgICAgIHJlc3VsdCA9IHsKICAgICAgICBuYW1lOiAnU2FmYXJpJwogICAgICAsIHNhZmFyaTogdAogICAgICB9CiAgICAgIGlmICh2ZXJzaW9uSWRlbnRpZmllcikgewogICAgICAgIHJlc3VsdC52ZXJzaW9uID0gdmVyc2lvbklkZW50aWZpZXIKICAgICAgfQogICAgfQogICAgZWxzZSBpZiAoaW9zZGV2aWNlKSB7CiAgICAgIHJlc3VsdCA9IHsKICAgICAgICBuYW1lIDogaW9zZGV2aWNlID09ICdpcGhvbmUnID8gJ2lQaG9uZScgOiBpb3NkZXZpY2UgPT0gJ2lwYWQnID8gJ2lQYWQnIDogJ2lQb2QnCiAgICAgIH0KICAgICAgLy8gV1RGOiB2ZXJzaW9uIGlzIG5vdCBwYXJ0IG9mIHVzZXIgYWdlbnQgaW4gd2ViIGFwcHMKICAgICAgaWYgKHZlcnNpb25JZGVudGlmaWVyKSB7CiAgICAgICAgcmVzdWx0LnZlcnNpb24gPSB2ZXJzaW9uSWRlbnRpZmllcgogICAgICB9CiAgICB9CiAgICBlbHNlIGlmKC9nb29nbGVib3QvaS50ZXN0KHVhKSkgewogICAgICByZXN1bHQgPSB7CiAgICAgICAgbmFtZTogJ0dvb2dsZWJvdCcKICAgICAgLCBnb29nbGVib3Q6IHQKICAgICAgLCB2ZXJzaW9uOiBnZXRGaXJzdE1hdGNoKC9nb29nbGVib3RcLyhcZCsoXC5cZCspKS9pKSB8fCB2ZXJzaW9uSWRlbnRpZmllcgogICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgcmVzdWx0ID0gewogICAgICAgIG5hbWU6IGdldEZpcnN0TWF0Y2goL14oLiopXC8oLiopIC8pLAogICAgICAgIHZlcnNpb246IGdldFNlY29uZE1hdGNoKC9eKC4qKVwvKC4qKSAvKQogICAgIH07CiAgIH0KCiAgICAvLyBzZXQgd2Via2l0IG9yIGdlY2tvIGZsYWcgZm9yIGJyb3dzZXJzIGJhc2VkIG9uIHRoZXNlIGVuZ2luZXMKICAgIGlmICghcmVzdWx0Lm1zZWRnZSAmJiAvKGFwcGxlKT93ZWJraXQvaS50ZXN0KHVhKSkgewogICAgICBpZiAoLyhhcHBsZSk/d2Via2l0XC81MzdcLjM2L2kudGVzdCh1YSkpIHsKICAgICAgICByZXN1bHQubmFtZSA9IHJlc3VsdC5uYW1lIHx8ICJCbGluayIKICAgICAgICByZXN1bHQuYmxpbmsgPSB0CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVzdWx0Lm5hbWUgPSByZXN1bHQubmFtZSB8fCAiV2Via2l0IgogICAgICAgIHJlc3VsdC53ZWJraXQgPSB0CiAgICAgIH0KICAgICAgaWYgKCFyZXN1bHQudmVyc2lvbiAmJiB2ZXJzaW9uSWRlbnRpZmllcikgewogICAgICAgIHJlc3VsdC52ZXJzaW9uID0gdmVyc2lvbklkZW50aWZpZXIKICAgICAgfQogICAgfSBlbHNlIGlmICghcmVzdWx0Lm9wZXJhICYmIC9nZWNrb1wvL2kudGVzdCh1YSkpIHsKICAgICAgcmVzdWx0Lm5hbWUgPSByZXN1bHQubmFtZSB8fCAiR2Vja28iCiAgICAgIHJlc3VsdC5nZWNrbyA9IHQKICAgICAgcmVzdWx0LnZlcnNpb24gPSByZXN1bHQudmVyc2lvbiB8fCBnZXRGaXJzdE1hdGNoKC9nZWNrb1wvKFxkKyhcLlxkKyk/KS9pKQogICAgfQoKICAgIC8vIHNldCBPUyBmbGFncyBmb3IgcGxhdGZvcm1zIHRoYXQgaGF2ZSBtdWx0aXBsZSBicm93c2VycwogICAgaWYgKCFyZXN1bHQubXNlZGdlICYmIChhbmRyb2lkIHx8IHJlc3VsdC5zaWxrKSkgewogICAgICByZXN1bHQuYW5kcm9pZCA9IHQKICAgIH0gZWxzZSBpZiAoaW9zZGV2aWNlKSB7CiAgICAgIHJlc3VsdFtpb3NkZXZpY2VdID0gdAogICAgICByZXN1bHQuaW9zID0gdAogICAgfSBlbHNlIGlmIChtYWMpIHsKICAgICAgcmVzdWx0Lm1hYyA9IHQKICAgIH0gZWxzZSBpZiAoeGJveCkgewogICAgICByZXN1bHQueGJveCA9IHQKICAgIH0gZWxzZSBpZiAod2luZG93cykgewogICAgICByZXN1bHQud2luZG93cyA9IHQKICAgIH0gZWxzZSBpZiAobGludXgpIHsKICAgICAgcmVzdWx0LmxpbnV4ID0gdAogICAgfQoKICAgIC8vIE9TIHZlcnNpb24gZXh0cmFjdGlvbgogICAgdmFyIG9zVmVyc2lvbiA9ICcnOwogICAgaWYgKHJlc3VsdC53aW5kb3dzcGhvbmUpIHsKICAgICAgb3NWZXJzaW9uID0gZ2V0Rmlyc3RNYXRjaCgvd2luZG93cyBwaG9uZSAoPzpvcyk/XHM/KFxkKyhcLlxkKykqKS9pKTsKICAgIH0gZWxzZSBpZiAoaW9zZGV2aWNlKSB7CiAgICAgIG9zVmVyc2lvbiA9IGdldEZpcnN0TWF0Y2goL29zIChcZCsoW19cc11cZCspKikgbGlrZSBtYWMgb3MgeC9pKTsKICAgICAgb3NWZXJzaW9uID0gb3NWZXJzaW9uLnJlcGxhY2UoL1tfXHNdL2csICcuJyk7CiAgICB9IGVsc2UgaWYgKGFuZHJvaWQpIHsKICAgICAgb3NWZXJzaW9uID0gZ2V0Rmlyc3RNYXRjaCgvYW5kcm9pZFsgXC8tXShcZCsoXC5cZCspKikvaSk7CiAgICB9IGVsc2UgaWYgKHJlc3VsdC53ZWJvcykgewogICAgICBvc1ZlcnNpb24gPSBnZXRGaXJzdE1hdGNoKC8oPzp3ZWJ8aHB3KW9zXC8oXGQrKFwuXGQrKSopL2kpOwogICAgfSBlbHNlIGlmIChyZXN1bHQuYmxhY2tiZXJyeSkgewogICAgICBvc1ZlcnNpb24gPSBnZXRGaXJzdE1hdGNoKC9yaW1cc3RhYmxldFxzb3NccyhcZCsoXC5cZCspKikvaSk7CiAgICB9IGVsc2UgaWYgKHJlc3VsdC5iYWRhKSB7CiAgICAgIG9zVmVyc2lvbiA9IGdldEZpcnN0TWF0Y2goL2JhZGFcLyhcZCsoXC5cZCspKikvaSk7CiAgICB9IGVsc2UgaWYgKHJlc3VsdC50aXplbikgewogICAgICBvc1ZlcnNpb24gPSBnZXRGaXJzdE1hdGNoKC90aXplbltcL1xzXShcZCsoXC5cZCspKikvaSk7CiAgICB9CiAgICBpZiAob3NWZXJzaW9uKSB7CiAgICAgIHJlc3VsdC5vc3ZlcnNpb24gPSBvc1ZlcnNpb247CiAgICB9CgogICAgLy8gZGV2aWNlIHR5cGUgZXh0cmFjdGlvbgogICAgdmFyIG9zTWFqb3JWZXJzaW9uID0gb3NWZXJzaW9uLnNwbGl0KCcuJylbMF07CiAgICBpZiAoCiAgICAgICAgIHRhYmxldAogICAgICB8fCBuZXh1c1RhYmxldAogICAgICB8fCBpb3NkZXZpY2UgPT0gJ2lwYWQnCiAgICAgIHx8IChhbmRyb2lkICYmIChvc01ham9yVmVyc2lvbiA9PSAzIHx8IChvc01ham9yVmVyc2lvbiA+PSA0ICYmICFtb2JpbGUpKSkKICAgICAgfHwgcmVzdWx0LnNpbGsKICAgICkgewogICAgICByZXN1bHQudGFibGV0ID0gdAogICAgfSBlbHNlIGlmICgKICAgICAgICAgbW9iaWxlCiAgICAgIHx8IGlvc2RldmljZSA9PSAnaXBob25lJwogICAgICB8fCBpb3NkZXZpY2UgPT0gJ2lwb2QnCiAgICAgIHx8IGFuZHJvaWQKICAgICAgfHwgbmV4dXNNb2JpbGUKICAgICAgfHwgcmVzdWx0LmJsYWNrYmVycnkKICAgICAgfHwgcmVzdWx0LndlYm9zCiAgICAgIHx8IHJlc3VsdC5iYWRhCiAgICApIHsKICAgICAgcmVzdWx0Lm1vYmlsZSA9IHQKICAgIH0KCiAgICAvLyBHcmFkZWQgQnJvd3NlciBTdXBwb3J0CiAgICAvLyBodHRwOi8vZGV2ZWxvcGVyLnlhaG9vLmNvbS95dWkvYXJ0aWNsZXMvZ2JzCiAgICBpZiAocmVzdWx0Lm1zZWRnZSB8fAogICAgICAgIChyZXN1bHQubXNpZSAmJiByZXN1bHQudmVyc2lvbiA+PSAxMCkgfHwKICAgICAgICAocmVzdWx0LnlhbmRleGJyb3dzZXIgJiYgcmVzdWx0LnZlcnNpb24gPj0gMTUpIHx8CgkJICAgIChyZXN1bHQudml2YWxkaSAmJiByZXN1bHQudmVyc2lvbiA+PSAxLjApIHx8CiAgICAgICAgKHJlc3VsdC5jaHJvbWUgJiYgcmVzdWx0LnZlcnNpb24gPj0gMjApIHx8CiAgICAgICAgKHJlc3VsdC5maXJlZm94ICYmIHJlc3VsdC52ZXJzaW9uID49IDIwLjApIHx8CiAgICAgICAgKHJlc3VsdC5zYWZhcmkgJiYgcmVzdWx0LnZlcnNpb24gPj0gNikgfHwKICAgICAgICAocmVzdWx0Lm9wZXJhICYmIHJlc3VsdC52ZXJzaW9uID49IDEwLjApIHx8CiAgICAgICAgKHJlc3VsdC5pb3MgJiYgcmVzdWx0Lm9zdmVyc2lvbiAmJiByZXN1bHQub3N2ZXJzaW9uLnNwbGl0KCIuIilbMF0gPj0gNikgfHwKICAgICAgICAocmVzdWx0LmJsYWNrYmVycnkgJiYgcmVzdWx0LnZlcnNpb24gPj0gMTAuMSkKICAgICAgICB8fCAocmVzdWx0LmNocm9taXVtICYmIHJlc3VsdC52ZXJzaW9uID49IDIwKQogICAgICAgICkgewogICAgICByZXN1bHQuYSA9IHQ7CiAgICB9CiAgICBlbHNlIGlmICgocmVzdWx0Lm1zaWUgJiYgcmVzdWx0LnZlcnNpb24gPCAxMCkgfHwKICAgICAgICAocmVzdWx0LmNocm9tZSAmJiByZXN1bHQudmVyc2lvbiA8IDIwKSB8fAogICAgICAgIChyZXN1bHQuZmlyZWZveCAmJiByZXN1bHQudmVyc2lvbiA8IDIwLjApIHx8CiAgICAgICAgKHJlc3VsdC5zYWZhcmkgJiYgcmVzdWx0LnZlcnNpb24gPCA2KSB8fAogICAgICAgIChyZXN1bHQub3BlcmEgJiYgcmVzdWx0LnZlcnNpb24gPCAxMC4wKSB8fAogICAgICAgIChyZXN1bHQuaW9zICYmIHJlc3VsdC5vc3ZlcnNpb24gJiYgcmVzdWx0Lm9zdmVyc2lvbi5zcGxpdCgiLiIpWzBdIDwgNikKICAgICAgICB8fCAocmVzdWx0LmNocm9taXVtICYmIHJlc3VsdC52ZXJzaW9uIDwgMjApCiAgICAgICAgKSB7CiAgICAgIHJlc3VsdC5jID0gdAogICAgfSBlbHNlIHJlc3VsdC54ID0gdAoKICAgIHJldHVybiByZXN1bHQKICB9CgogIHZhciBib3dzZXIgPSBkZXRlY3QodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgPyBuYXZpZ2F0b3IudXNlckFnZW50IDogJycpCgogIGJvd3Nlci50ZXN0ID0gZnVuY3Rpb24gKGJyb3dzZXJMaXN0KSB7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJyb3dzZXJMaXN0Lmxlbmd0aDsgKytpKSB7CiAgICAgIHZhciBicm93c2VySXRlbSA9IGJyb3dzZXJMaXN0W2ldOwogICAgICBpZiAodHlwZW9mIGJyb3dzZXJJdGVtPT09ICdzdHJpbmcnKSB7CiAgICAgICAgaWYgKGJyb3dzZXJJdGVtIGluIGJvd3NlcikgewogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICAvKioKICAgKiBHZXQgdmVyc2lvbiBwcmVjaXNpb25zIGNvdW50CiAgICoKICAgKiBAZXhhbXBsZQogICAqICAgZ2V0VmVyc2lvblByZWNpc2lvbigiMS4xMC4zIikgLy8gMwogICAqCiAgICogQHBhcmFtICB7c3RyaW5nfSB2ZXJzaW9uCiAgICogQHJldHVybiB7bnVtYmVyfQogICAqLwogIGZ1bmN0aW9uIGdldFZlcnNpb25QcmVjaXNpb24odmVyc2lvbikgewogICAgcmV0dXJuIHZlcnNpb24uc3BsaXQoIi4iKS5sZW5ndGg7CiAgfQoKICAvKioKICAgKiBBcnJheTo6bWFwIHBvbHlmaWxsCiAgICoKICAgKiBAcGFyYW0gIHtBcnJheX0gYXJyCiAgICogQHBhcmFtICB7RnVuY3Rpb259IGl0ZXJhdG9yCiAgICogQHJldHVybiB7QXJyYXl9CiAgICovCiAgZnVuY3Rpb24gbWFwKGFyciwgaXRlcmF0b3IpIHsKICAgIHZhciByZXN1bHQgPSBbXSwgaTsKICAgIGlmIChBcnJheS5wcm90b3R5cGUubWFwKSB7CiAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUubWFwLmNhbGwoYXJyLCBpdGVyYXRvcik7CiAgICB9CiAgICBmb3IgKGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7CiAgICAgIHJlc3VsdC5wdXNoKGl0ZXJhdG9yKGFycltpXSkpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8qKgogICAqIENhbGN1bGF0ZSBicm93c2VyIHZlcnNpb24gd2VpZ2h0CiAgICoKICAgKiBAZXhhbXBsZQogICAqICAgY29tcGFyZVZlcnNpb25zKFsnMS4xMC4yLjEnLCAgJzEuOC4yLjEuOTAnXSkgICAgLy8gMQogICAqICAgY29tcGFyZVZlcnNpb25zKFsnMS4wMTAuMi4xJywgJzEuMDkuMi4xLjkwJ10pOyAgLy8gMQogICAqICAgY29tcGFyZVZlcnNpb25zKFsnMS4xMC4yLjEnLCAgJzEuMTAuMi4xJ10pOyAgICAgLy8gMAogICAqICAgY29tcGFyZVZlcnNpb25zKFsnMS4xMC4yLjEnLCAgJzEuMDgwMC4yJ10pOyAgICAgLy8gLTEKICAgKgogICAqIEBwYXJhbSAge0FycmF5PFN0cmluZz59IHZlcnNpb25zIHZlcnNpb25zIHRvIGNvbXBhcmUKICAgKiBAcmV0dXJuIHtOdW1iZXJ9IGNvbXBhcmlzb24gcmVzdWx0CiAgICovCiAgZnVuY3Rpb24gY29tcGFyZVZlcnNpb25zKHZlcnNpb25zKSB7CiAgICAvLyAxKSBnZXQgY29tbW9uIHByZWNpc2lvbiBmb3IgYm90aCB2ZXJzaW9ucywgZm9yIGV4YW1wbGUgZm9yICIxMC4wIiBhbmQgIjkiIGl0IHNob3VsZCBiZSAyCiAgICB2YXIgcHJlY2lzaW9uID0gTWF0aC5tYXgoZ2V0VmVyc2lvblByZWNpc2lvbih2ZXJzaW9uc1swXSksIGdldFZlcnNpb25QcmVjaXNpb24odmVyc2lvbnNbMV0pKTsKICAgIHZhciBjaHVua3MgPSBtYXAodmVyc2lvbnMsIGZ1bmN0aW9uICh2ZXJzaW9uKSB7CiAgICAgIHZhciBkZWx0YSA9IHByZWNpc2lvbiAtIGdldFZlcnNpb25QcmVjaXNpb24odmVyc2lvbik7CgogICAgICAvLyAyKSAiOSIgLT4gIjkuMCIgKGZvciBwcmVjaXNpb24gPSAyKQogICAgICB2ZXJzaW9uID0gdmVyc2lvbiArIG5ldyBBcnJheShkZWx0YSArIDEpLmpvaW4oIi4wIik7CgogICAgICAvLyAzKSAiOS4wIiAtPiBbIjAwMDAwMDAwMCIiLCAiMDAwMDAwMDA5Il0KICAgICAgcmV0dXJuIG1hcCh2ZXJzaW9uLnNwbGl0KCIuIiksIGZ1bmN0aW9uIChjaHVuaykgewogICAgICAgIHJldHVybiBuZXcgQXJyYXkoMjAgLSBjaHVuay5sZW5ndGgpLmpvaW4oIjAiKSArIGNodW5rOwogICAgICB9KS5yZXZlcnNlKCk7CiAgICB9KTsKCiAgICAvLyBpdGVyYXRlIGluIHJldmVyc2Ugb3JkZXIgYnkgcmV2ZXJzZWQgY2h1bmtzIGFycmF5CiAgICB3aGlsZSAoLS1wcmVjaXNpb24gPj0gMCkgewogICAgICAvLyA0KSBjb21wYXJlOiAiMDAwMDAwMDA5IiA+ICIwMDAwMDAwMTAiID0gZmFsc2UgKGJ1dCAiOSIgPiAiMTAiID0gdHJ1ZSkKICAgICAgaWYgKGNodW5rc1swXVtwcmVjaXNpb25dID4gY2h1bmtzWzFdW3ByZWNpc2lvbl0pIHsKICAgICAgICByZXR1cm4gMTsKICAgICAgfQogICAgICBlbHNlIGlmIChjaHVua3NbMF1bcHJlY2lzaW9uXSA9PT0gY2h1bmtzWzFdW3ByZWNpc2lvbl0pIHsKICAgICAgICBpZiAocHJlY2lzaW9uID09PSAwKSB7CiAgICAgICAgICAvLyBhbGwgdmVyc2lvbiBjaHVua3MgYXJlIHNhbWUKICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICByZXR1cm4gLTE7CiAgICAgIH0KICAgIH0KICB9CgogIC8qKgogICAqIENoZWNrIGlmIGJyb3dzZXIgaXMgdW5zdXBwb3J0ZWQKICAgKgogICAqIEBleGFtcGxlCiAgICogICBib3dzZXIuaXNVbnN1cHBvcnRlZEJyb3dzZXIoewogICAqICAgICBtc2llOiAiMTAiLAogICAqICAgICBmaXJlZm94OiAiMjMiLAogICAqICAgICBjaHJvbWU6ICIyOSIsCiAgICogICAgIHNhZmFyaTogIjUuMSIsCiAgICogICAgIG9wZXJhOiAiMTYiLAogICAqICAgICBwaGFudG9tOiAiNTM0IgogICAqICAgfSk7CiAgICoKICAgKiBAcGFyYW0gIHtPYmplY3R9ICBtaW5WZXJzaW9ucyBtYXAgb2YgbWluaW1hbCB2ZXJzaW9uIHRvIGJyb3dzZXIKICAgKiBAcGFyYW0gIHtCb29sZWFufSBbc3RyaWN0TW9kZSA9IGZhbHNlXSBmbGFnIHRvIHJldHVybiBmYWxzZSBpZiBicm93c2VyIHdhc24ndCBmb3VuZCBpbiBtYXAKICAgKiBAcGFyYW0gIHtTdHJpbmd9ICBbdWFdIHVzZXIgYWdlbnQgc3RyaW5nCiAgICogQHJldHVybiB7Qm9vbGVhbn0KICAgKi8KICBmdW5jdGlvbiBpc1Vuc3VwcG9ydGVkQnJvd3NlcihtaW5WZXJzaW9ucywgc3RyaWN0TW9kZSwgdWEpIHsKICAgIHZhciBfYm93c2VyID0gYm93c2VyOwoKICAgIC8vIG1ha2Ugc3RyaWN0TW9kZSBwYXJhbSBvcHRpb25hbCB3aXRoIHVhIHBhcmFtIHVzYWdlCiAgICBpZiAodHlwZW9mIHN0cmljdE1vZGUgPT09ICdzdHJpbmcnKSB7CiAgICAgIHVhID0gc3RyaWN0TW9kZTsKICAgICAgc3RyaWN0TW9kZSA9IHZvaWQoMCk7CiAgICB9CgogICAgaWYgKHN0cmljdE1vZGUgPT09IHZvaWQoMCkpIHsKICAgICAgc3RyaWN0TW9kZSA9IGZhbHNlOwogICAgfQogICAgaWYgKHVhKSB7CiAgICAgIF9ib3dzZXIgPSBkZXRlY3QodWEpOwogICAgfQoKICAgIHZhciB2ZXJzaW9uID0gIiIgKyBfYm93c2VyLnZlcnNpb247CiAgICBmb3IgKHZhciBicm93c2VyIGluIG1pblZlcnNpb25zKSB7CiAgICAgIGlmIChtaW5WZXJzaW9ucy5oYXNPd25Qcm9wZXJ0eShicm93c2VyKSkgewogICAgICAgIGlmIChfYm93c2VyW2Jyb3dzZXJdKSB7CiAgICAgICAgICAvLyBicm93c2VyIHZlcnNpb24gYW5kIG1pbiBzdXBwb3J0ZWQgdmVyc2lvbi4KICAgICAgICAgIHJldHVybiBjb21wYXJlVmVyc2lvbnMoW3ZlcnNpb24sIG1pblZlcnNpb25zW2Jyb3dzZXJdXSkgPCAwOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIHJldHVybiBzdHJpY3RNb2RlOyAvLyBub3QgZm91bmQKICB9CgogIC8qKgogICAqIENoZWNrIGlmIGJyb3dzZXIgaXMgc3VwcG9ydGVkCiAgICoKICAgKiBAcGFyYW0gIHtPYmplY3R9IG1pblZlcnNpb25zIG1hcCBvZiBtaW5pbWFsIHZlcnNpb24gdG8gYnJvd3NlcgogICAqIEBwYXJhbSAge0Jvb2xlYW59IFtzdHJpY3RNb2RlID0gZmFsc2VdIGZsYWcgdG8gcmV0dXJuIGZhbHNlIGlmIGJyb3dzZXIgd2Fzbid0IGZvdW5kIGluIG1hcAogICAqIEBwYXJhbSAge1N0cmluZ30gIFt1YV0gdXNlciBhZ2VudCBzdHJpbmcKICAgKiBAcmV0dXJuIHtCb29sZWFufQogICAqLwogIGZ1bmN0aW9uIGNoZWNrKG1pblZlcnNpb25zLCBzdHJpY3RNb2RlLCB1YSkgewogICAgcmV0dXJuICFpc1Vuc3VwcG9ydGVkQnJvd3NlcihtaW5WZXJzaW9ucywgc3RyaWN0TW9kZSwgdWEpOwogIH0KCiAgYm93c2VyLmlzVW5zdXBwb3J0ZWRCcm93c2VyID0gaXNVbnN1cHBvcnRlZEJyb3dzZXI7CiAgYm93c2VyLmNvbXBhcmVWZXJzaW9ucyA9IGNvbXBhcmVWZXJzaW9uczsKICBib3dzZXIuY2hlY2sgPSBjaGVjazsKCiAgLyoKICAgKiBTZXQgb3VyIGRldGVjdCBtZXRob2QgdG8gdGhlIG1haW4gYm93c2VyIG9iamVjdCBzbyB3ZSBjYW4KICAgKiByZXVzZSBpdCB0byB0ZXN0IG90aGVyIHVzZXIgYWdlbnRzLgogICAqIFRoaXMgaXMgbmVlZGVkIHRvIGltcGxlbWVudCBmdXR1cmUgdGVzdHMuCiAgICovCiAgYm93c2VyLl9kZXRlY3QgPSBkZXRlY3Q7CgogIHJldHVybiBib3dzZXIKfSk7CgooZnVuY3Rpb24oJCl7CiAgVUFCQlRyaWdnZXIgPSB7CgogICAgICAvKioKICAgICAgICogVHJpZ2dlciBhIGhvb2suCiAgICAgICAqCiAgICAgICAqIEBzaW5jZSAxLjEuMC4zCiAgICAgICAqIEBtZXRob2QgdHJpZ2dlckhvb2sKICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGhvb2sgVGhlIGhvb2sgdG8gdHJpZ2dlci4KICAgICAgICogQHBhcmFtIHtBcnJheX0gYXJncyBBbiBhcnJheSBvZiBhcmdzIHRvIHBhc3MgdG8gdGhlIGhvb2suCiAgICAgICAqLwogICAgICB0cmlnZ2VySG9vazogZnVuY3Rpb24oIGhvb2ssIGFyZ3MgKQogICAgICB7CiAgICAgICAgJCggJ2JvZHknICkudHJpZ2dlciggJ3VhYmItdHJpZ2dlci4nICsgaG9vaywgYXJncyApOwogICAgICB9LAogICAgCiAgICAgIC8qKgogICAgICAgKiBBZGQgYSBob29rLgogICAgICAgKgogICAgICAgKiBAc2luY2UgMS4xLjAuMwogICAgICAgKiBAbWV0aG9kIGFkZEhvb2sKICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGhvb2sgVGhlIGhvb2sgdG8gYWRkLgogICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgaG9vayBpcyB0cmlnZ2VyZWQuCiAgICAgICAqLwogICAgICBhZGRIb29rOiBmdW5jdGlvbiggaG9vaywgY2FsbGJhY2sgKQogICAgICB7CiAgICAgICAgJCggJ2JvZHknICkub24oICd1YWJiLXRyaWdnZXIuJyArIGhvb2ssIGNhbGxiYWNrICk7CiAgICAgIH0sCiAgICAKICAgICAgLyoqCiAgICAgICAqIFJlbW92ZSBhIGhvb2suCiAgICAgICAqCiAgICAgICAqIEBzaW5jZSAxLjEuMC4zCiAgICAgICAqIEBtZXRob2QgcmVtb3ZlSG9vawogICAgICAgKiBAcGFyYW0ge1N0cmluZ30gaG9vayBUaGUgaG9vayB0byByZW1vdmUuCiAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byByZW1vdmUuCiAgICAgICAqLwogICAgICByZW1vdmVIb29rOiBmdW5jdGlvbiggaG9vaywgY2FsbGJhY2sgKQogICAgICB7CiAgICAgICAgJCggJ2JvZHknICkub2ZmKCAndWFiYi10cmlnZ2VyLicgKyBob29rLCBjYWxsYmFjayApOwogICAgICB9LAogIH07Cn0pKGpRdWVyeSk7CgpqUXVlcnkoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCAkICkgewoKICAgIGlmKCB0eXBlb2YgYm93c2VyICE9PSAndW5kZWZpbmVkJyAmJiBib3dzZXIgIT09IG51bGwgKSB7CgogICAgICB2YXIgdWFiYl9icm93c2VyICAgPSBib3dzZXIubmFtZSwKICAgICAgICAgIHVhYmJfYnJvd3Nlcl92ID0gYm93c2VyLnZlcnNpb24sCiAgICAgICAgICB1YWJiX2Jyb3dzZXJfY2xhc3MgPSB1YWJiX2Jyb3dzZXIucmVwbGFjZSgvXHMrL2csICctJykudG9Mb3dlckNhc2UoKSwKICAgICAgICAgIHVhYmJfYnJvd3Nlcl92X2NsYXNzID0gdWFiYl9icm93c2VyX2NsYXNzICsgcGFyc2VJbnQoIHVhYmJfYnJvd3Nlcl92ICk7CiAgICAgIAogICAgICAkKCdodG1sJykuYWRkQ2xhc3ModWFiYl9icm93c2VyX2NsYXNzKS5hZGRDbGFzcyh1YWJiX2Jyb3dzZXJfdl9jbGFzcyk7CiAgICAgIAogICAgfQoKICAgICQoJy51YWJiLXJvdy1zZXBhcmF0b3InKS5wYXJlbnRzKCdodG1sJykuY3NzKCdvdmVyZmxvdy14JywgJ2hpZGRlbicpOwp9KTsKO2pRdWVyeShmdW5jdGlvbigkKSB7CgkKCQkkKGZ1bmN0aW9uKCkgewoJCSQoICcuZmwtbm9kZS02MDFhZTZiYTE0YjU0IC5mbC1waG90by1pbWcnICkKCQkJLm9uKCAnbW91c2VlbnRlcicsIGZ1bmN0aW9uKCBlICkgewoJCQkJJCggdGhpcyApLmRhdGEoICd0aXRsZScsICQoIHRoaXMgKS5hdHRyKCAndGl0bGUnICkgKS5yZW1vdmVBdHRyKCAndGl0bGUnICk7CgkJCX0gKQoJCQkub24oICdtb3VzZWxlYXZlJywgZnVuY3Rpb24oIGUgKXsKCQkJCSQoIHRoaXMgKS5hdHRyKCAndGl0bGUnLCAkKCB0aGlzICkuZGF0YSggJ3RpdGxlJyApICkuZGF0YSggJ3RpdGxlJywgbnVsbCApOwoJCQl9ICk7Cgl9KTsKCQl3aW5kb3cuX2ZsX3N0cmluZ190b19zbHVnX3JlZ2V4ID0gJ2EtekEtWjAtOSc7Cn0pOwoKOyhmdW5jdGlvbigkKSB7CgoJLyoqCgkgKiBDbGFzcyBmb3IgTWVudSBNb2R1bGUKCSAqCgkgKiBAc2luY2UgMS42LjEKCSAqLwoJRkxCdWlsZGVyTWVudSA9IGZ1bmN0aW9uKCBzZXR0aW5ncyApewoKCQkvLyBzZXQgcGFyYW1zCgkJdGhpcy5ub2RlSWQgICAgICAgICAgICAgID0gc2V0dGluZ3MuaWQ7CgkJdGhpcy5ub2RlQ2xhc3MgICAgICAgICAgID0gJy5mbC1ub2RlLScgKyBzZXR0aW5ncy5pZDsKCQl0aGlzLndyYXBwZXJDbGFzcyAgICAgICAgPSB0aGlzLm5vZGVDbGFzcyArICcgLmZsLW1lbnUnOwoJCXRoaXMudHlwZQkJCQkgPSBzZXR0aW5ncy50eXBlOwoJCXRoaXMubW9iaWxlVG9nZ2xlCQkgPSBzZXR0aW5ncy5tb2JpbGU7CgkJdGhpcy5tb2JpbGVCZWxvd1JvdwkJID0gc2V0dGluZ3MubW9iaWxlQmVsb3dSb3c7CgkJdGhpcy5tb2JpbGVGbHlvdXQJCSA9IHNldHRpbmdzLm1vYmlsZUZseW91dDsKCQl0aGlzLmJyZWFrUG9pbnRzICAgICAgICAgPSBzZXR0aW5ncy5icmVha1BvaW50czsKCQl0aGlzLm1vYmlsZUJyZWFrcG9pbnQJID0gc2V0dGluZ3MubW9iaWxlQnJlYWtwb2ludDsKCQl0aGlzLmN1cnJlbnRCcm93c2VyV2lkdGggPSAkKCB3aW5kb3cgKS53aWR0aCgpOwoJCXRoaXMucG9zdElkICAgICAgICAgICAgICA9IHNldHRpbmdzLnBvc3RJZDsKCQl0aGlzLm1vYmlsZVN0YWNrZWQgICAgICAgPSBzZXR0aW5ncy5tb2JpbGVTdGFja2VkOwoKCQkvLyBpbml0aWFsaXplIHRoZSBtZW51CgkJdGhpcy5faW5pdE1lbnUoKTsKCgkJLy8gY2hlY2sgaWYgdmlld3BvcnQgaXMgcmVzaXppbmcKCQkkKCB3aW5kb3cgKS5vbiggJ3Jlc2l6ZScsICQucHJveHkoIGZ1bmN0aW9uKCBlICkgewoKCQkJdmFyIHdpZHRoID0gJCggd2luZG93ICkud2lkdGgoKTsKCgkJCS8vIGlmIHNjcmVlbiB3aWR0aCBpcyByZXNpemVkLCByZWxvYWQgdGhlIG1lbnUKCQkgICAgaWYoIHdpZHRoICE9IHRoaXMuY3VycmVudEJyb3dzZXJXaWR0aCApewoKCQkJCXRoaXMuY3VycmVudEJyb3dzZXJXaWR0aCA9IHdpZHRoOwoJCQkJdGhpcy5faW5pdE1lbnUoKTsKIAkJCQl0aGlzLl9jbGlja09ySG92ZXIoKTsKCQkJfQoKCQkJdGhpcy5fcmVzaXplRmx5b3V0TWVudVBhbmVsKCk7CgkJfSwgdGhpcyApICk7CgoJCSQoIHdpbmRvdyApLm9uKCAnc2Nyb2xsJywgJC5wcm94eSggZnVuY3Rpb24oIGUgKSB7CgkJCXRoaXMuX3Jlc2l6ZUZseW91dE1lbnVQYW5lbCgpOwoJCX0sIHRoaXMgKSApOwoKCQkkKCAnYm9keScgKS5vbiggJ2NsaWNrJywgJC5wcm94eSggZnVuY3Rpb24oIGUgKSB7CgkJCWlmICggJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiBGTEJ1aWxkZXJDb25maWcgKXsKCQkJCXJldHVybjsKCQkJfQoKCQkJdmFyIGFjdGl2ZU1vYmlsZU1lbnUgPSAkKHRoaXMud3JhcHBlckNsYXNzICsgJyAuZmwtbWVudS1tb2JpbGUtdG9nZ2xlLmZsLWFjdGl2ZScgKTsKCQkJaWYgKCBhY3RpdmVNb2JpbGVNZW51Lmxlbmd0aCAmJiAoICdleHBhbmRlZCcgIT09IHRoaXMubW9iaWxlVG9nZ2xlICkgKXsKCQkJCSQoIGFjdGl2ZU1vYmlsZU1lbnUgKS50cmlnZ2VyKCdjbGljaycpOwoJCQl9CgoJCQkkKCB0aGlzLndyYXBwZXJDbGFzcyApLmZpbmQoICcuZmwtaGFzLXN1Ym1lbnUnICkucmVtb3ZlQ2xhc3MoICdmb2N1cycgKTsKCQkJJCggdGhpcy53cmFwcGVyQ2xhc3MgKS5maW5kKCAnLmZsLWhhcy1zdWJtZW51IC5zdWItbWVudScgKS5yZW1vdmVDbGFzcyggJ2ZvY3VzJyApOwoKCQl9LCB0aGlzICkgKTsKCgkJLy8gQ2xvc2UgTW9iaWxlIG1lbnUgd2hlbiB0YWJiaW5nIG91dCBmcm9tIHRoZSBsYXN0IG1lbnUgaXRlbS4KCQkkKCB0aGlzLndyYXBwZXJDbGFzcyArICcgdWwubWVudSA+IGxpOmxhc3QtY2hpbGQnICkub24oICdmb2N1c291dCcsICQucHJveHkoZnVuY3Rpb24gKGUpIHsKCQkJaWYgKCAkKCB0aGlzLndyYXBwZXJDbGFzcyApLmZpbmQoICcuZmwtbWVudS1tb2JpbGUtdG9nZ2xlJyApLmhhc0NsYXNzKCAnZmwtYWN0aXZlJyApICYmICggJ2V4cGFuZGVkJyAhPT0gdGhpcy5tb2JpbGVUb2dnbGUgKSApIHsKCQkJCWlmICggISAkKCBlLnJlbGF0ZWRUYXJnZXQgKS5wYXJlbnQoKS5oYXNDbGFzcyggJ21lbnUtaXRlbScgKSApIHsKCQkJCQkkKCB0aGlzLndyYXBwZXJDbGFzcyApLmZpbmQoICcuZmwtbWVudS1tb2JpbGUtdG9nZ2xlJyApLnRyaWdnZXIoICdjbGljaycgKTsJCgkJCQl9CgkJCX0KCQl9LCB0aGlzICkgKTsKCgl9OwoKCUZMQnVpbGRlck1lbnUucHJvdG90eXBlID0gewoJCW5vZGVDbGFzcyAgICAgICAgICAgICAgIDogJycsCgkJd3JhcHBlckNsYXNzICAgICAgICAgICAgOiAnJywKCQl0eXBlIAkgICAgICAgICAgICAgICAgOiAnJywKCQlicmVha1BvaW50cyAJCQk6IHt9LAoJCSRzdWJtZW51cwkJCQk6IG51bGwsCgoJCS8qKgoJCSAqIENoZWNrIGlmIHRoZSBzY3JlZW4gc2l6ZSBmaXRzIGEgbW9iaWxlIHZpZXdwb3J0LgoJCSAqCgkJICogQHNpbmNlICAxLjYuMQoJCSAqIEByZXR1cm4gYm9vbAoJCSAqLwoJCV9pc01vYmlsZTogZnVuY3Rpb24oKXsKCQkJcmV0dXJuIHRoaXMuY3VycmVudEJyb3dzZXJXaWR0aCA8PSB0aGlzLmJyZWFrUG9pbnRzLnNtYWxsID8gdHJ1ZSA6IGZhbHNlOwoJCX0sCgoJCS8qKgoJCSAqIENoZWNrIGlmIHRoZSBzY3JlZW4gc2l6ZSBmaXRzIGEgbWVkaXVtIHZpZXdwb3J0LgoJCSAqCgkJICogQHNpbmNlICAxLjEwLjUKCQkgKiBAcmV0dXJuIGJvb2wKCQkgKi8KCQlfaXNNZWRpdW06IGZ1bmN0aW9uKCl7CgkJCXJldHVybiB0aGlzLmN1cnJlbnRCcm93c2VyV2lkdGggPD0gdGhpcy5icmVha1BvaW50cy5tZWRpdW0gPyB0cnVlIDogZmFsc2U7CgkJfSwKCgkJLyoqCgkJICogQ2hlY2sgaWYgdGhlIHNjcmVlbiBzaXplIGZpdHMgYSBsYXJnZSB2aWV3cG9ydC4KCQkgKgoJCSAqIEBzaW5jZSAgMS4xMC41CgkJICogQHJldHVybiBib29sCgkJICovCgkJX2lzTGFyZ2U6IGZ1bmN0aW9uKCl7CgkJCXJldHVybiB0aGlzLmN1cnJlbnRCcm93c2VyV2lkdGggPD0gdGhpcy5icmVha1BvaW50cy5sYXJnZSA/IHRydWUgOiBmYWxzZTsKCQl9LAoKCQkvKioKCQkgKiBDaGVjayBpZiB0aGUgbWVudSBzaG91bGQgdG9nZ2xlIGZvciB0aGUgY3VycmVudCB2aWV3cG9ydCBiYXNlIG9uIHRoZSBzZWxlY3RlZCBicmVha3BvaW50CgkJICoKCQkgKiBAc2VlIAl0aGlzLl9pc01vYmlsZSgpCgkJICogQHNlZSAJdGhpcy5faXNNZWRpdW0oKQoJCSAqIEBzaW5jZSAgCTEuMTAuNQoJCSAqIEByZXR1cm4gYm9vbAoJCSAqLwoJCV9pc01lbnVUb2dnbGU6IGZ1bmN0aW9uKCl7CgkJCWlmICggKCAnYWx3YXlzJyA9PSB0aGlzLm1vYmlsZUJyZWFrcG9pbnQKCQkJCXx8ICggdGhpcy5faXNNb2JpbGUoKSAmJiAnbW9iaWxlJyA9PSB0aGlzLm1vYmlsZUJyZWFrcG9pbnQgKQoJCQkJfHwgKCB0aGlzLl9pc01lZGl1bSgpICYmICdtZWRpdW0tbW9iaWxlJyA9PSB0aGlzLm1vYmlsZUJyZWFrcG9pbnQgKQoJCQkJfHwgKCB0aGlzLl9pc0xhcmdlKCkgJiYgJ2xhcmdlLW1vYmlsZScgPT0gdGhpcy5tb2JpbGVCcmVha3BvaW50ICkKCQkJKSAmJiAoICQoIHRoaXMud3JhcHBlckNsYXNzICkuZmluZCggJy5mbC1tZW51LW1vYmlsZS10b2dnbGUnICkuaXMoJzp2aXNpYmxlJykgfHwgJ2V4cGFuZGVkJyA9PSB0aGlzLm1vYmlsZVRvZ2dsZSApICkgewoJCQkJcmV0dXJuIHRydWU7CgkJCX0KCgkJCXJldHVybiBmYWxzZTsKCQl9LAoKCQkvKioKCQkgKiBJbml0aWFsaXplIHRoZSB0b2dnbGUgbG9naWMgZm9yIHRoZSBtZW51LgoJCSAqCgkJICogQHNlZSAgICB0aGlzLl9pc01lbnVUb2dnbGUoKQoJCSAqIEBzZWUgICAgdGhpcy5fbWVudU9uQ0xpY2soKQoJCSAqIEBzZWUgICAgdGhpcy5fY2xpY2tPckhvdmVyKCkKCQkgKiBAc2VlICAgIHRoaXMuX3N1Ym1lbnVPblJpZ2h0KCkKCQkgKiBAc2VlICAgIHRoaXMuX3N1Ym1lbnVSb3daaW5kZXhGaXgoKQoJCSAqIEBzZWUgICAgdGhpcy5fdG9nZ2xlRm9yTW9iaWxlKCkKCQkgKiBAc2luY2UgIDEuNi4xCgkJICogQHJldHVybiB2b2lkCgkJICovCgkJX2luaXRNZW51OiBmdW5jdGlvbigpewoJCQl0aGlzLl9zZXR1cFN1Ym1lbnUoKTsKCQkJdGhpcy5fbWVudU9uRm9jdXMoKTsKCQkJdGhpcy5fbWVudU9uRXNjYXBlKCk7CgkJCXRoaXMuX3N1Ym1lbnVPbkNsaWNrKCk7CgkJCWlmICggJCggdGhpcy5ub2RlQ2xhc3MgKS5sZW5ndGggJiYgdGhpcy50eXBlID09ICdob3Jpem9udGFsJyApIHsKCQkJCXRoaXMuX2luaXRNZWdhTWVudXMoKTsKCQkJfQoKCQkJaWYoIHRoaXMuX2lzTWVudVRvZ2dsZSgpIHx8IHRoaXMudHlwZSA9PSAnYWNjb3JkaW9uJyApewoKCQkJCSQoIHRoaXMud3JhcHBlckNsYXNzICkub2ZmKCAnbW91c2VlbnRlciBtb3VzZWxlYXZlJyApOwoJCQkJdGhpcy5fbWVudU9uQ2xpY2soKTsKCQkJCXRoaXMuX2NsaWNrT3JIb3ZlcigpOwoKCQkJfSBlbHNlIHsKCQkJCSQoIHRoaXMud3JhcHBlckNsYXNzICkub2ZmKCAnY2xpY2snICk7CgkJCQl0aGlzLl9zdWJtZW51T25SaWdodCgpOwoJCQkJdGhpcy5fc3VibWVudVJvd1ppbmRleEZpeCgpOwoJCQl9CgoJCQlpZiggdGhpcy5tb2JpbGVUb2dnbGUgIT0gJ2V4cGFuZGVkJyApewoJCQkJdGhpcy5fdG9nZ2xlRm9yTW9iaWxlKCk7CgkJCX0KCgkJCWlmKCAkKCB0aGlzLndyYXBwZXJDbGFzcyApLmZpbmQoICcuZmwtbWVudS1zZWFyY2gtaXRlbScgKS5sZW5ndGggKXsKCQkJCXRoaXMuX3RvZ2dsZU1lbnVTZWFyY2goKTsKCQkJfQoKCQkJaWYoICQoIHRoaXMud3JhcHBlckNsYXNzICkuZmluZCggJy5mbC1tZW51LWNhcnQtaXRlbScpLmxlbmd0aCApewoJCQkJdGhpcy5fd29vVXBkYXRlUGFyYW1zKCk7CgkJCX0KCQl9LAoKCQkvKioKCQkgKiBJbml0aWFsaXplcyBzdWJtZW51IGRyb3Bkb3ducy4KCQkgKgoJCSAqIEBzaW5jZSAzLjAKCQkgKiBAcmV0dXJuIHZvaWQKCQkgKi8KCQlfc2V0dXBTdWJtZW51OiBmdW5jdGlvbigpIHsKCQkJJCggdGhpcy53cmFwcGVyQ2xhc3MgKyAnIHVsLnN1Yi1tZW51JyApLmVhY2goIGZ1bmN0aW9uKCl7CgkJCQkkKCB0aGlzICkuY2xvc2VzdCggJ2xpJyApLmF0dHIoICdhcmlhLWhhc3BvcHVwJywgJ3RydWUnICk7CgkJCX0pOwoJCX0sCgoJCS8qKgoJCSAqIEFkZHMgYSBmb2N1cyBjbGFzcyB0byBtZW51IGVsZW1lbnRzIHNpbWlsYXIgdG8gYmUgdXNlZCBzaW1pbGFyIHRvIENTUyA6aG92ZXIgcHN1ZWRvIGV2ZW50CgkJICoKCQkgKiBAc2luY2UgIDEuOS4wCgkJICogQHJldHVybiB2b2lkCgkJICovCgkJX21lbnVPbkZvY3VzOiBmdW5jdGlvbigpewoJCQl2YXIgY0tleSAgICAgID0gMCwKCQkJICAgIGlzU2hpZnRlZCA9IGZhbHNlOwoKCQkJJCggdGhpcy5ub2RlQ2xhc3MgKS5vZmYoJ2tleWRvd24nKS5vbiggJ2tleWRvd24nLCAnYScsIGZ1bmN0aW9uKCBlICl7CgkJCQljS2V5ICAgICAgPSBlLndoaWNoOwoJCQkJaXNTaGlmdGVkID0gZS5zaGlmdEtleTsKCQkJfSk7CgoJCQkkKCB0aGlzLm5vZGVDbGFzcyApLm9mZignZm9jdXMnKS5vbiggJ2ZvY3VzJywgJ2EnLCAkLnByb3h5KCBmdW5jdGlvbiggZSApewoJCQkJdmFyICRtZW51SXRlbQk9ICQoIGUudGFyZ2V0ICkucGFyZW50cyggJy5tZW51LWl0ZW0nICkuZmlyc3QoKSwKCQkJCQkkcGFyZW50cwk9ICQoIGUudGFyZ2V0ICkucGFyZW50c1VudGlsKCB0aGlzLndyYXBwZXJDbGFzcyApOwoKCQkJCSQoJy5mbC1tZW51IC5mb2N1cycpLnJlbW92ZUNsYXNzKCdmb2N1cycpOwoKCQkJCSRwYXJlbnRzLmFkZENsYXNzKCdmb2N1cycpCgoJCQkJaWYgKCAhICRtZW51SXRlbS5jbG9zZXN0KCcuZmwtaGFzLXN1Ym1lbnUnKS5oYXNDbGFzcygnZXNjYXBlZCcpICkgewoJCQkJCSRtZW51SXRlbS5hZGRDbGFzcygnZm9jdXMnKQoJCQkJfQoJCQkJZWxzZSB7CgkJCQkJJG1lbnVJdGVtLmNsb3Nlc3QoJy5mbC1oYXMtc3VibWVudScpLnJlbW92ZUNsYXNzKCdmb2N1cyBlc2NhcGVkJykKCQkJCX0KCQkJfSwgdGhpcyApICkub24oICdmb2N1c291dCcsICdhJywgJC5wcm94eSggZnVuY3Rpb24oIGUgKXsKCQkJCXZhciBlbCAgICAgICAgICAgID0gJChlLnRhcmdldCkucGFyZW50KCksCgkJICAgICAgICAgICAgJG1lZ2FNZW51ICAgICA9IGVsLmNsb3Nlc3QoICcubWVnYS1tZW51JyApLAoJCSAgICAgICAgICAgICRtZWdhTGFzdEl0ZW0gPSAkbWVnYU1lbnUuZmluZCgnPiAuc3ViLW1lbnUgPiAubWVudS1pdGVtOmxhc3QtY2hpbGQnKSwKCQkJCQkkbGFzdEl0ZW0gICAgID0gZWwucGFyZW50cygnLmZsLWhhcy1zdWJtZW51Omxhc3QnKS5maW5kKCcubWVudS1pdGVtOmxhc3QnKSwKCQkJCQlpc0xhc3RDaGlsZCAgID0gISAkbWVnYU1lbnUubGVuZ3RoICYmIGVsLmlzKCAkbGFzdEl0ZW0gKTsKCgkJICAgICAgICBpZiggJG1lZ2FNZW51Lmxlbmd0aCApIHsKCQkJCQlpc0xhc3RDaGlsZCA9IGVsLmlzKCAkbWVnYUxhc3RJdGVtICkgfHwgZWwuaXMoICRtZWdhTGFzdEl0ZW0uZmluZCggJy5tZW51LWl0ZW06bGFzdC1jaGlsZCcgKSApOwoJCQkJfQoKCQkJCWlmICggaXNMYXN0Q2hpbGQgJiYgY0tleSA9PT0gOSAmJiBpc1NoaWZ0ZWQgKSB7CgkJCQkJaXNMYXN0Q2hpbGQgPSBmYWxzZTsKCQkJCQljS2V5ICAgICAgID0gMDsKCQkJCQlpc1NoaWZ0ZWQgID0gZmFsc2U7CgkJCQl9CgkJCQllbHNlIGlmICggY0tleSA9PT0gMjcgKSB7CgkJCQkJaXNMYXN0Q2hpbGQgPSBmYWxzZTsKCQkJCX0KCgkJCQlpZiAoIGlzTGFzdENoaWxkICkgewoJCQkJCSQoIGUudGFyZ2V0ICkucGFyZW50c1VudGlsKCB0aGlzLndyYXBwZXJDbGFzcyApLnJlbW92ZUNsYXNzKCAnZm9jdXMnICk7CgkJCQl9CgoJCQl9LCB0aGlzICkgKTsKCQl9LAoKCQkvKioKCQkgKiBMb2dpYyBmb3Igc3VibWVudSBpdGVtcyB3aGVuIEVzY2FwZSBrZXkgaXMgcHJlc3NlZC4KCQkgKgoJCSAqIEBzaW5jZSAgMi43LjEKCQkgKiBAcmV0dXJuIHZvaWQKCQkgKi8KCQlfbWVudU9uRXNjYXBlOiBmdW5jdGlvbigpewoJCQkkKCAnYm9keScgKS5vZmYoJ2tleWRvd24nKS5vbiggJ2tleWRvd24nLCAkLnByb3h5KCBmdW5jdGlvbiggZSApewoJCQkJaWYgKCBlLndoaWNoICE9PSAyNyApIHsKCQkJCQlyZXR1cm47CgkJCQl9CgoJCQkJaWYgKCAkKCBlLnRhcmdldCApLmNsb3Nlc3QoJy5tZW51LWl0ZW0nKS5sZW5ndGggKSB7CgkJCQkJdmFyIGFjdGl2ZVN1Ym1lbnUgPSBudWxsLAoJCQkJCQltZW51SXRlbSAgICAgID0gJCggZS50YXJnZXQgKS5jbG9zZXN0KCcubWVudS1pdGVtJyksCgkJCQkJCXR5cGUgICAgICAgICAgPSBtZW51SXRlbS5jbG9zZXN0KCcuZmwtbWVudS1hY2NvcmRpb24nKS5sZW5ndGggPyAnYWNjb3JkaW9uJyA6ICdob3Jpem9udGFsJzsKCgkJCQkJaWYgKCAnaG9yaXpvbnRhbCcgPT09IHR5cGUgKSB7CgkJCQkJCWlmICggbWVudUl0ZW0uaGFzQ2xhc3MoICdmbC1oYXMtc3VibWVudScgKSAmJiBtZW51SXRlbS5oYXNDbGFzcyggJ2ZvY3VzJyApICkgewoJCQkJCQkJYWN0aXZlU3VibWVudSA9IG1lbnVJdGVtLmZpbmQoJz4gdWwuc3ViLW1lbnUnKTsKCQkJCQkJfQoJCQkJCQllbHNlIHsKCQkJCQkJCWFjdGl2ZVN1Ym1lbnUgPSBtZW51SXRlbS5jbG9zZXN0KCd1bC5zdWItbWVudScpOwoJCQkJCQl9CgkJCQkJCWFjdGl2ZVN1Ym1lbnUucGFyZW50KCkuYWRkQ2xhc3MoJ2VzY2FwZWQnKTsKCQkJCQkJYWN0aXZlU3VibWVudS5wYXJlbnQoKS5maW5kKCdhOmZpcnN0JykuZm9jdXMoKTsKCQkJCQl9CgkJCQkJZWxzZSB7CgkJCQkJCWlmICggbWVudUl0ZW0uaGFzQ2xhc3MoICdmbC1oYXMtc3VibWVudScgKSAmJiAnYWNjb3JkaW9uJyA9PT0gdHlwZSAmJiBtZW51SXRlbS5oYXNDbGFzcyggJ2ZsLWFjdGl2ZScgKSApIHsKCQkJCQkJCWFjdGl2ZVN1Ym1lbnUgPSBtZW51SXRlbS5maW5kKCc+IHVsLnN1Yi1tZW51Jyk7CgkJCQkJCX0KCQkJCQkJZWxzZSB7CgkJCQkJCQlhY3RpdmVTdWJtZW51ID0gbWVudUl0ZW0uY2xvc2VzdCgndWwuc3ViLW1lbnUnKTsKCQkJCQkJfQoKCQkJCQkJYWN0aXZlU3VibWVudS5zbGlkZVVwKDQwMCwgZnVuY3Rpb24oKXsKCQkJCQkJCWlmICggbWVudUl0ZW0uaGFzQ2xhc3MoICdmbC1oYXMtc3VibWVudScgKSAmJiBtZW51SXRlbS5oYXNDbGFzcyggJ2ZsLWFjdGl2ZScgKSApIHsKCQkJCQkJCQlhY3RpdmVTdWJtZW51LnBhcmVudCgpLmxhc3QoKS5maW5kKCdhOmZpcnN0JykuZm9jdXMoKTsKCQkJCQkJCX0KCQkJCQkJCWVsc2UgewoJCQkJCQkJCW1lbnVJdGVtLnJlbW92ZUNsYXNzKCdmb2N1cycpOwoJCQkJCQkJCW1lbnVJdGVtLnBhcmVudHMoJy5tZW51LWl0ZW0nKS5maXJzdCgpLmZpbmQoJ2E6Zmlyc3QnKS5mb2N1cygpOwoJCQkJCQkJfQoJCQkJCQkJYWN0aXZlU3VibWVudS5wYXJlbnQoKS5sYXN0KCkucmVtb3ZlQ2xhc3MoICdmbC1hY3RpdmUnICk7CgkJCQkJCX0pOwoKCQkJCQl9CgkJCQl9CgkJCQllbHNlIHsKCQkJCQkkKCcuZmwtbWVudScpLmZpbmQoICdsaS5tZW51LWl0ZW0uZm9jdXMnICkubGFzdCgpLnJlbW92ZUNsYXNzKCdmb2N1cycpOwoJCQkJfQoJCQl9LCB0aGlzICkgKTsKCQl9LAoKCQkvKioKCQkgKiBMb2dpYyBmb3Igc3VibWVudSB0b2dnbGluZyBvbiBhY2NvcmRpb25zIG9yIG1vYmlsZSBtZW51cyAodmVydGljYWwsIGhvcml6b250YWwpCgkJICoKCQkgKiBAc2luY2UgIDEuNi4xCgkJICogQHJldHVybiB2b2lkCgkJICovCgkJX21lbnVPbkNsaWNrOiBmdW5jdGlvbigpewoJCQkkKCB0aGlzLndyYXBwZXJDbGFzcyApLm9mZigpLm9uKCAnY2xpY2snLCAnLmZsLWhhcy1zdWJtZW51LWNvbnRhaW5lcicsICQucHJveHkoIGZ1bmN0aW9uKCBlICl7CgoJCQkJdmFyICRsaW5rCQkJPSAkKCBlLnRhcmdldCApLnBhcmVudHMoICcuZmwtaGFzLXN1Ym1lbnUnICkuZmlyc3QoKSwKCQkJCQkkc3ViTWVudSAJCT0gJGxpbmsuY2hpbGRyZW4oICcuc3ViLW1lbnUnICkuZmlyc3QoKSwKCQkJCQkkaHJlZgkgCQk9ICRsaW5rLmNoaWxkcmVuKCcuZmwtaGFzLXN1Ym1lbnUtY29udGFpbmVyJykuZmlyc3QoKS5maW5kKCc+IGEnKS5hdHRyKCdocmVmJyksCgkJCQkJJHN1Yk1lbnVQYXJlbnRzID0gJCggZS50YXJnZXQgKS5wYXJlbnRzKCAnLnN1Yi1tZW51JyApLAoJCQkJCSRhY3RpdmVQYXJlbnRzIAk9ICQoIGUudGFyZ2V0ICkucGFyZW50cyggJy5mbC1oYXMtc3VibWVudS5mbC1hY3RpdmUnICk7CgoJCQkJaWYoICEkc3ViTWVudS5pcygnOnZpc2libGUnKSB8fCAkKGUudGFyZ2V0KS5oYXNDbGFzcygnZmwtbWVudS10b2dnbGUnKQoJCQkJCXx8ICgkc3ViTWVudS5pcygnOnZpc2libGUnKSAmJiAodHlwZW9mICRocmVmID09PSAndW5kZWZpbmVkJyB8fCAkaHJlZiA9PSAnIycpKSApewoJCQkJCWUucHJldmVudERlZmF1bHQoKTsKCQkJCX0KCQkJCWVsc2UgewoJCQkJCWUuc3RvcFByb3BhZ2F0aW9uKCk7CgkJCQkJd2luZG93LmxvY2F0aW9uLmhyZWYgPSAkaHJlZjsKCQkJCQlyZXR1cm47CgkJCQl9CgoJCQkJaWYgKCQodGhpcy53cmFwcGVyQ2xhc3MpLmhhc0NsYXNzKCdmbC1tZW51LWFjY29yZGlvbi1jb2xsYXBzZScpKSB7CgoJCQkJCWlmICggISRsaW5rLnBhcmVudHMoJy5tZW51LWl0ZW0nKS5oYXNDbGFzcygnZmwtYWN0aXZlJykgKSB7CgkJCQkJCSQoJy5tZW51IC5mbC1hY3RpdmUnLCB0aGlzLndyYXBwZXJDbGFzcykubm90KCRsaW5rKS5yZW1vdmVDbGFzcygnZmwtYWN0aXZlJyk7CgkJCQkJfQoJCQkJCWVsc2UgaWYgKCRsaW5rLnBhcmVudHMoJy5tZW51LWl0ZW0nKS5oYXNDbGFzcygnZmwtYWN0aXZlJykgJiYgJGxpbmsucGFyZW50KCcuc3ViLW1lbnUnKS5sZW5ndGgpIHsKCQkJCQkJJCgnLm1lbnUgLmZsLWFjdGl2ZScsIHRoaXMud3JhcHBlckNsYXNzKS5ub3QoJGxpbmspLm5vdCgkYWN0aXZlUGFyZW50cykucmVtb3ZlQ2xhc3MoJ2ZsLWFjdGl2ZScpOwoJCQkJCX0KCgkJCQkJJCgnLnN1Yi1tZW51JywgdGhpcy53cmFwcGVyQ2xhc3MpLm5vdCgkc3ViTWVudSkubm90KCRzdWJNZW51UGFyZW50cykuc2xpZGVVcCgnbm9ybWFsJyk7CgkJCQl9CgoJCQkJaWYgKCAhIHRoaXMubW9iaWxlU3RhY2tlZCAmJiAnaG9yaXpvbnRhbCcgPT0gdGhpcy50eXBlICYmICdleHBhbmRlZCcgPT0gdGhpcy5tb2JpbGVUb2dnbGUgKSB7CgkJCQkJJCggdGhpcy53cmFwcGVyQ2xhc3MgKS5maW5kKCAnLmZsLWFjdGl2ZScgKS5ub3QoJGxpbmspLm5vdCgkYWN0aXZlUGFyZW50cykucmVtb3ZlQ2xhc3MoICdmbC1hY3RpdmUnICk7CgkJCQl9CgkJCQllbHNlIHsKCQkJCQkkc3ViTWVudS5zbGlkZVRvZ2dsZSgpOwoJCQkJfQoKCQkJCSRsaW5rLnRvZ2dsZUNsYXNzKCAnZmwtYWN0aXZlJyApOwoJCQkJZS5zdG9wUHJvcGFnYXRpb24oKTsKCgkJCX0sIHRoaXMgKSApOwoKCQl9LAoKCQkvKioKCQkgKiBMb2dpYyBmb3Igc3VibWVudSBpdGVtcyBjbGljayBldmVudAoJCSAqCgkJICogQHNpbmNlICAxLjEwLjYKCQkgKiBAcmV0dXJuIHZvaWQKCQkgKi8KCQlfc3VibWVudU9uQ2xpY2s6IGZ1bmN0aW9uKCl7CgkJCSQoIHRoaXMud3JhcHBlckNsYXNzICsgJyAuc3ViLW1lbnUnICkub2ZmKCkub24oICdjbGljaycsICdhJywgJC5wcm94eSggZnVuY3Rpb24oIGUgKXsKCQkJCWlmICggJCggZS50YXJnZXQgKS5wYXJlbnQoKS5oYXNDbGFzcygnZm9jdXMnKSApIHsKCQkJCQkkKCBlLnRhcmdldCApLnBhcmVudHNVbnRpbCggdGhpcy53cmFwcGVyQ2xhc3MgKS5yZW1vdmVDbGFzcygnZm9jdXMnKTsKCQkJCX0KCQkJfSwgdGhpcyApICk7CgkJfSwKCgkJLyoqCgkJICogQ2hhbmdlcyBnZW5lcmFsIHN0eWxpbmcgYW5kIGJlaGF2aW9yIG9mIG1lbnVzIGJhc2VkIG9uIG1vYmlsZSAvIGRlc2t0b3Agdmlld3BvcnQuCgkJICoKCQkgKiBAc2VlICAgIHRoaXMuX2lzTWVudVRvZ2dsZSgpCgkJICogQHNpbmNlICAxLjYuMQoJCSAqIEByZXR1cm4gdm9pZAoJCSAqLwoJCV9jbGlja09ySG92ZXI6IGZ1bmN0aW9uKCl7CgkJCXRoaXMuJHN1Ym1lbnVzID0gdGhpcy4kc3VibWVudXMgfHwgJCggdGhpcy53cmFwcGVyQ2xhc3MgKS5maW5kKCAnLnN1Yi1tZW51JyApOwoJCQl2YXIgJHdyYXBwZXIgICA9ICQoIHRoaXMud3JhcHBlckNsYXNzICksCgkJCQkkbWVudSAgICAgID0gJHdyYXBwZXIuZmluZCggJy5tZW51JyApOwoJCQkJJGxpICAgICAgICA9ICR3cmFwcGVyLmZpbmQoICcuZmwtaGFzLXN1Ym1lbnUnICk7CgoJCQlpZiggdGhpcy5faXNNZW51VG9nZ2xlKCkgKXsKCQkJCSRsaS5lYWNoKCBmdW5jdGlvbiggZWwgKXsKCQkJCQlpZiggISQodGhpcykuaGFzQ2xhc3MoJ2ZsLWFjdGl2ZScpICl7CgkJCQkJCSQodGhpcykuZmluZCggJy5zdWItbWVudScgKS5mYWRlT3V0KCk7CgkJCQkJfQoJCQkJfSApOwoJCQl9IGVsc2UgewoJCQkJJGxpLmVhY2goIGZ1bmN0aW9uKCBlbCApewoJCQkJCWlmKCAhJCh0aGlzKS5oYXNDbGFzcygnZmwtYWN0aXZlJykgKXsKCQkJCQkJJCh0aGlzKS5maW5kKCAnLnN1Yi1tZW51JyApLmNzcyggewoJCQkJCQkJJ2Rpc3BsYXknIDogJycsCgkJCQkJCQknb3BhY2l0eScgOiAnJwoJCQkJCQl9ICk7CgkJCQkJfQoJCQkJfSApOwoJCQl9CgkJfSwKCgkJLyoqCgkJICogTG9naWMgdG8gcHJldmVudCBzdWJtZW51cyB0byBnbyBvdXRzaWRlIHZpZXdwb3J0IGJvdW5kYXJpZXMuCgkJICoKCQkgKiBAc2luY2UgIDEuNi4xCgkJICogQHJldHVybiB2b2lkCgkJICovCgkJX3N1Ym1lbnVPblJpZ2h0OiBmdW5jdGlvbigpewoKCQkJJCggdGhpcy53cmFwcGVyQ2xhc3MgKQoJCQkJLm9uKCAnbW91c2VlbnRlciBmb2N1cycsICcuZmwtaGFzLXN1Ym1lbnUnLCAkLnByb3h5KCBmdW5jdGlvbiggZSApewoKCQkJCQlpZiggJCAoIGUuY3VycmVudFRhcmdldCApLmZpbmQoJy5zdWItbWVudScpLmxlbmd0aCA9PT0gMCApIHsKCQkJCQkJcmV0dXJuOwoJCQkJCX0KCgkJCQkJdmFyICRsaW5rICAgICAgICAgICA9ICQoIGUuY3VycmVudFRhcmdldCApLAoJCQkJCQkkcGFyZW50ICAgICAgICAgPSAkbGluay5wYXJlbnQoKSwKCQkJCQkJJHN1Yk1lbnUgICAgICAgID0gJGxpbmsuZmluZCggJy5zdWItbWVudScgKSwKCQkJCQkJc3ViTWVudVdpZHRoICAgID0gJHN1Yk1lbnUud2lkdGgoKSwKCQkJCQkJc3ViTWVudVBvcyAgICAgID0gMCwKCQkJCQkJYm9keVdpZHRoICAgICAgID0gJCggJ2JvZHknICkud2lkdGgoKTsKCgkJCQkJaWYoICRsaW5rLmNsb3Nlc3QoICcuZmwtbWVudS1zdWJtZW51LXJpZ2h0JyApLmxlbmd0aCAhPT0gMCkgewoKCQkJCQkJJGxpbmsuYWRkQ2xhc3MoICdmbC1tZW51LXN1Ym1lbnUtcmlnaHQnICk7CgoJCQkJCX0gZWxzZSBpZiggJCggJ2JvZHknICkuaGFzQ2xhc3MoICdydGwnICkgKSB7CgoJCQkJCQlzdWJNZW51UG9zID0gJHBhcmVudC5pcyggJy5zdWItbWVudScgKSA/CgkJCQkJCQkJCSAkcGFyZW50Lm9mZnNldCgpLmxlZnQgLSBzdWJNZW51V2lkdGg6CgkJCQkJCQkJCSAkbGluay5vZmZzZXQoKS5sZWZ0IC0gJGxpbmsud2lkdGgoKSAtIHN1Yk1lbnVXaWR0aDsKCgkJCQkJCWlmKCBzdWJNZW51UG9zIDw9IDAgKSB7CgkJCQkJCQkkbGluay5hZGRDbGFzcyggJ2ZsLW1lbnUtc3VibWVudS1yaWdodCcgKTsKCQkJCQkJfQoKCQkJCQl9IGVsc2UgewoKCQkJCQkJc3ViTWVudVBvcyA9ICRwYXJlbnQuaXMoICcuc3ViLW1lbnUnICkgPwoJCQkJCQkJCQkgJHBhcmVudC5vZmZzZXQoKS5sZWZ0ICsgJHBhcmVudC53aWR0aCgpICsgc3ViTWVudVdpZHRoIDoKCQkJCQkJCQkJICRsaW5rLm9mZnNldCgpLmxlZnQgKyAkbGluay53aWR0aCgpICsgc3ViTWVudVdpZHRoOwoKCQkJCQkJaWYoIHN1Yk1lbnVQb3MgPiBib2R5V2lkdGggKSB7CgkJCQkJCQkkbGluay5hZGRDbGFzcygnZmwtbWVudS1zdWJtZW51LXJpZ2h0Jyk7CgkJCQkJCX0KCQkJCQl9CgkJCQl9LCB0aGlzICkgKQoJCQkJLm9uKCAnbW91c2VsZWF2ZScsICcuZmwtaGFzLXN1Ym1lbnUnLCAkLnByb3h5KCBmdW5jdGlvbiggZSApewoJCQkJCSQoIGUuY3VycmVudFRhcmdldCApLnJlbW92ZUNsYXNzKCAnZmwtbWVudS1zdWJtZW51LXJpZ2h0JyApOwoJCQkJfSwgdGhpcyApICk7CgoJCX0sCgoJCS8qKgoJCSAqIExvZ2ljIHRvIHByZXZlbnQgc3VibWVudXMgdG8gZ28gYmVoaW5kIHRoZSBuZXh0IG92ZXJsYXkgcm93LgoJCSAqCgkJICogQHNpbmNlICAxLjEwLjkKCQkgKiBAcmV0dXJuIHZvaWQKCQkgKi8KCQlfc3VibWVudVJvd1ppbmRleEZpeDogZnVuY3Rpb24oIGUgKXsKCgkJCSQoIHRoaXMud3JhcHBlckNsYXNzICkKCQkJCS5vbiggJ21vdXNlZW50ZXInLCAndWwubWVudSA+IC5mbC1oYXMtc3VibWVudScsICQucHJveHkoIGZ1bmN0aW9uKCBlICl7CgoJCQkJCWlmKCAkICggZS5jdXJyZW50VGFyZ2V0ICkuZmluZCgnLnN1Yi1tZW51JykubGVuZ3RoID09PSAwICkgewoJCQkJCQlyZXR1cm47CgkJCQkJfQoKCQkJCQkkKCB0aGlzLm5vZGVDbGFzcyApCgkJCQkJCS5jbG9zZXN0KCAnLmZsLXJvdycgKQoJCQkJCQkuZmluZCggJy5mbC1yb3ctY29udGVudCcgKQoJCQkJCQkuY3NzKCAnei1pbmRleCcsICcxMCcgKTsKCgkJCQl9LCB0aGlzICkgKQoJCQkJLm9uKCAnbW91c2VsZWF2ZScsICd1bC5tZW51ID4gLmZsLWhhcy1zdWJtZW51JywgJC5wcm94eSggZnVuY3Rpb24oIGUgKXsKCgkJCQkJJCggdGhpcy5ub2RlQ2xhc3MgKQoJCQkJCQkuY2xvc2VzdCggJy5mbC1yb3cnICkKCQkJCQkJLmZpbmQoICcuZmwtcm93LWNvbnRlbnQnICkKCQkJCQkJLmNzcyggJ3otaW5kZXgnLCAnJyApOwoKCQkJCX0sIHRoaXMgKSApOwoJCX0sCgoJCS8qKgoJCSAqIExvZ2ljIGZvciB0aGUgbW9iaWxlIG1lbnUgYnV0dG9uLgoJCSAqCgkJICogQHNpbmNlICAxLjYuMQoJCSAqIEByZXR1cm4gdm9pZAoJCSAqLwoJCV90b2dnbGVGb3JNb2JpbGU6IGZ1bmN0aW9uKCl7CgoJCQl2YXIgJHdyYXBwZXIgPSBudWxsLAoJCQkJJG1lbnUgICAgPSBudWxsLAoJCQkJc2VsZiAgICAgPSB0aGlzOwoKCQkJaWYoIHRoaXMuX2lzTWVudVRvZ2dsZSgpICl7CgoJCQkJaWYgKCB0aGlzLl9pc01vYmlsZUJlbG93Um93RW5hYmxlZCgpICkgewoJCQkJCXRoaXMuX3BsYWNlTW9iaWxlTWVudUJlbG93Um93KCk7CgkJCQkJJHdyYXBwZXIgPSAkKCB0aGlzLndyYXBwZXJDbGFzcyApOwoJCQkJCSRtZW51ICAgID0gJCggdGhpcy5ub2RlQ2xhc3MgKyAnLWNsb25lJyApOwoJCQkJCSRtZW51LmZpbmQoICd1bC5tZW51JyApLnNob3coKTsKCQkJCX0KCQkJCWVsc2UgewoJCQkJCSR3cmFwcGVyID0gJCggdGhpcy53cmFwcGVyQ2xhc3MgKTsKCQkJCQkkbWVudSAgICA9ICR3cmFwcGVyLmZpbmQoICcubWVudScgKTsKCQkJCX0KCgkJCQlpZiggISR3cmFwcGVyLmZpbmQoICcuZmwtbWVudS1tb2JpbGUtdG9nZ2xlJyApLmhhc0NsYXNzKCAnZmwtYWN0aXZlJyApICYmICEgc2VsZi5tb2JpbGVGbHlvdXQgKXsKCQkJCQkkbWVudS5jc3MoeyBkaXNwbGF5OiAnbm9uZScgfSk7CgkJCQl9CgoJCQkJLy8gRmxheW91dCBNZW51CgkJCQlpZiAoIHNlbGYubW9iaWxlRmx5b3V0ICkgewoJCQkJCXRoaXMuX2luaXRGbHlvdXRNZW51KCk7CgkJCQl9CgoJCQkJJHdyYXBwZXIub24oICdjbGljaycsICcuZmwtbWVudS1tb2JpbGUtdG9nZ2xlJywgZnVuY3Rpb24oIGUgKXsKCgkJCQkJJCggdGhpcyApLnRvZ2dsZUNsYXNzKCAnZmwtYWN0aXZlJyApOwoKCQkJCQlpZiAoIHNlbGYubW9iaWxlRmx5b3V0ICkgewoJCQkJCQlzZWxmLl90b2dnbGVGbHlvdXRNZW51KCk7CgkJCQkJfQoJCQkJCWVsc2UgewoJCQkJCQl2YXIgdGFyZ2V0TWVudSA9IG51bGw7CgkJCQkJCQoJCQkJCQlpZiAoIHNlbGYubW9iaWxlQmVsb3dSb3cgKSB7CgkJCQkJCQl0YXJnZXRNZW51ID0gJCggdGhpcyApLmNsb3Nlc3QoICcuZmwtY29sJyApLm5leHQoICcuZmwtbWVudS1tb2JpbGUtY2xvbmUnICk7CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQl0YXJnZXRNZW51ID0gJCggdGhpcyApLmNsb3Nlc3QoICcuZmwtbWVudScgKS5maW5kKCAndWwubWVudScgKTsKCQkJCQkJfQoJCQkJCQkKCQkJCQkJaWYgKCB0YXJnZXRNZW51Lmxlbmd0aCApIHsKCQkJCQkJCSRtZW51ID0gJCggdGFyZ2V0TWVudSApOwoJCQkJCQl9CgoJCQkJCQkkbWVudS5zbGlkZVRvZ2dsZSgpOwoJCQkJCX0KCgkJCQkJZS5zdG9wUHJvcGFnYXRpb24oKTsKCQkJCX0gKTsKCgkJCQkvLyBIaWRlIGFjdGl2ZSBtZW51IHdoZW4gY2xpY2sgb24gYW5jaG9yIGxpbmsgSUQgdGhhdCBleGlzdHMgb24gYSBwYWdlLgoJCQkJJG1lbnUub2ZmKCkub24oICdjbGljaycsICcubWVudS1pdGVtID4gYVtocmVmKj0iIyJdOm5vdChbaHJlZj0iIyJdKScsIGZ1bmN0aW9uKGUpewoJCQkJCXZhciAkaHJlZiA9ICQodGhpcykuYXR0cignaHJlZicpLAoJCQkJCQkkdGFyZ2V0SUQgPSAkaHJlZi5zcGxpdCgnIycpWzFdLAoJCQkJCQllbGVtZW50ID0gJCgnIycgKyAkdGFyZ2V0SUQpOwoJCQkJCWlmICggJCgnYm9keScpLmZpbmQoZWxlbWVudCkubGVuZ3RoID4gMCApIHsKCQkJCQkJJCggdGhpcyApLnRvZ2dsZUNsYXNzKCAnZmwtYWN0aXZlJyApOwoJCQkJCQlGTEJ1aWxkZXJMYXlvdXQuX3Njcm9sbFRvRWxlbWVudCggZWxlbWVudCApOwoJCQkJCQlpZiAoICEgc2VsZi5faXNNZW51VG9nZ2xlKCkgKSB7CgkJCQkJCQkkbWVudS5zbGlkZVRvZ2dsZSgpOwoJCQkJCQl9CgkJCQkJfQoJCQkJfSk7CgkJCX0KCQkJZWxzZSB7CgoJCQkJaWYgKCB0aGlzLl9pc01vYmlsZUJlbG93Um93RW5hYmxlZCgpICkgewoJCQkJCXRoaXMuX3JlbW92ZU1lbnVGcm9tQmVsb3dSb3coKTsKCQkJCX0KCgkJCQkkd3JhcHBlciA9ICQoIHRoaXMud3JhcHBlckNsYXNzICksCgkJCQkkbWVudSAgICA9ICR3cmFwcGVyLmZpbmQoICd1bC5tZW51JyApOwoJCQkJJHdyYXBwZXIuZmluZCggJy5mbC1tZW51LW1vYmlsZS10b2dnbGUnICkucmVtb3ZlQ2xhc3MoICdmbC1hY3RpdmUnICk7CgkJCQkkbWVudS5jc3MoeyBkaXNwbGF5OiAnJyB9KTsKCgkJCQlpZiAoICEgdGhpcy5faXNNb2JpbGVCZWxvd1Jvd0VuYWJsZWQoKSApIHsKCQkJCQkkbWVudS5vZmYoICdjbGljaycsICcubWVudS1pdGVtID4gYVtocmVmKj0iIyJdOm5vdChbaHJlZj0iIyJdKScgKTsKCQkJCX0KCgkJCQlpZiAoIHRoaXMubW9iaWxlRmx5b3V0ICYmICR3cmFwcGVyLmZpbmQoICcuZmwtbWVudS1tb2JpbGUtZmx5b3V0JyApLmxlbmd0aCA+IDAgKSB7CgkJCQkJJCggJ2JvZHknICkuY3NzKCAnbWFyZ2luJywgJycgKTsKCQkJCQkkKCAnLmZsLWJ1aWxkZXItdWktcGlubmVkLWNvbnRlbnQtdHJhbnNmb3JtJyApLmNzcyggJ3RyYW5zZm9ybScsICcnICk7CgkJCQkJJG1lbnUudW53cmFwKCk7CgkJCQkJJHdyYXBwZXIuZmluZCggJy5mbC1tZW51LW1vYmlsZS1jbG9zZScgKS5yZW1vdmUoKTsKCQkJCQkkd3JhcHBlci5maW5kKCAnLmZsLW1lbnUtbW9iaWxlLW9wYWNpdHknICkucmVtb3ZlKCk7CgkJCQl9CgkJCX0KCQl9LAoKCQkvKioKCQkgKiBJbml0IGFueSBtZWdhIG1lbnVzIHRoYXQgZXhpc3QuCgkJICoKCQkgKiBAc2VlIAl0aGlzLl9pc01lbnVUb2dnbGUoKQoJCSAqIEBzaW5jZSAgCTEuMTAuNAoJCSAqIEByZXR1cm4gdm9pZAoJCSAqLwoJCV9pbml0TWVnYU1lbnVzOiBmdW5jdGlvbigpewoKCQkJdmFyIG1vZHVsZSAgICAgPSAkKCB0aGlzLm5vZGVDbGFzcyApLAoJCQkJcm93Q29udGVudCA9IG1vZHVsZS5jbG9zZXN0KCAnLmZsLXJvdy1jb250ZW50JyApLAoJCQkJcm93V2lkdGggICA9IHJvd0NvbnRlbnQud2lkdGgoKSwKCQkJCW1lZ2FzICAgICAgPSBtb2R1bGUuZmluZCggJy5tZWdhLW1lbnUnICksCgkJCQlkaXNhYmxlZCAgID0gbW9kdWxlLmZpbmQoICcubWVnYS1tZW51LWRpc2FibGVkJyApLAoJCQkJaXNUb2dnbGUgICA9IHRoaXMuX2lzTWVudVRvZ2dsZSgpOwoKCQkJaWYgKCBpc1RvZ2dsZSApIHsKCQkJCW1lZ2FzLnJlbW92ZUNsYXNzKCAnbWVnYS1tZW51JyApLmFkZENsYXNzKCAnbWVnYS1tZW51LWRpc2FibGVkJyApOwoJCQkJbW9kdWxlLmZpbmQoICdsaS5tZWdhLW1lbnUtZGlzYWJsZWQgPiB1bC5zdWItbWVudScgKS5jc3MoICd3aWR0aCcsICcnICk7CgkJCQlyb3dDb250ZW50LmNzcyggJ3Bvc2l0aW9uJywgJycgKTsKCQkJfSBlbHNlIHsKCQkJCWRpc2FibGVkLnJlbW92ZUNsYXNzKCAnbWVnYS1tZW51LWRpc2FibGVkJyApLmFkZENsYXNzKCAnbWVnYS1tZW51JyApOwoJCQkJbW9kdWxlLmZpbmQoICdsaS5tZWdhLW1lbnUgPiB1bC5zdWItbWVudScgKS5jc3MoICd3aWR0aCcsIHJvd1dpZHRoICsgJ3B4JyApOwoJCQkJcm93Q29udGVudC5jc3MoICdwb3NpdGlvbicsICdyZWxhdGl2ZScgKTsKCQkJfQoJCX0sCgoJCS8qKgoJCSAqIENoZWNrIHRvIHNlZSBpZiBCZWxvdyBSb3cgc2hvdWxkIGJlIGVuYWJsZWQuCgkJICoKCQkgKiBAc2luY2UgIAkxLjExCgkJICogQHJldHVybiBib29sZWFuCgkJICovCgkJX2lzTW9iaWxlQmVsb3dSb3dFbmFibGVkOiBmdW5jdGlvbigpIHsKCQkJcmV0dXJuIHRoaXMubW9iaWxlQmVsb3dSb3cgJiYgJCggdGhpcy5ub2RlQ2xhc3MgKS5jbG9zZXN0KCAnLmZsLWNvbCcgKS5sZW5ndGg7CgkJfSwKCgkJLyoqCgkJICogTG9naWMgZm9yIHB1dHRpbmcgdGhlIG1vYmlsZSBtZW51IGJlbG93IHRoZSBtZW51J3MKCQkgKiBjb2x1bW4gc28gaXQgc3BhbnMgdGhlIGZ1bGwgd2lkdGggb2YgdGhlIHBhZ2UuCgkJICoKCQkgKiBAc2luY2UgIDEuMTAKCQkgKiBAcmV0dXJuIHZvaWQKCQkgKi8KCQlfcGxhY2VNb2JpbGVNZW51QmVsb3dSb3c6IGZ1bmN0aW9uKCl7CgoJCQlpZiAoICQoIHRoaXMubm9kZUNsYXNzICsgJy1jbG9uZScgKS5sZW5ndGggKSB7CgkJCQlyZXR1cm47CgkJCX0KCgkJCXZhciBtb2R1bGUgPSAkKCB0aGlzLm5vZGVDbGFzcyApLAoJCQkJY2xvbmUgID0gbnVsbCwKCQkJCWNvbCAgICA9IG1vZHVsZS5jbG9zZXN0KCAnLmZsLWNvbCcgKTsKCgkJCWlmICggbW9kdWxlLmxlbmd0aCA8IDEgKSB7CgkJCQlyZXR1cm47CgkJCX0KCgkJCWNsb25lID0gKCBtb2R1bGUubGVuZ3RoID4gMSApID8gJCggbW9kdWxlWzBdICkuY2xvbmUoKSA6IG1vZHVsZS5jbG9uZSgpOwoJCQltb2R1bGUuZmluZCggJ3VsLm1lbnUnICkucmVtb3ZlKCk7CgkJCWNsb25lLmFkZENsYXNzKCAoIHRoaXMubm9kZUNsYXNzICsgJy1jbG9uZScgKS5yZXBsYWNlKCAnLicsICcnICkgKTsKCQkJY2xvbmUuYWRkQ2xhc3MoICdmbC1tZW51LW1vYmlsZS1jbG9uZScgKTsKCQkJY2xvbmUuZmluZCggJy5mbC1tZW51LW1vYmlsZS10b2dnbGUnICkucmVtb3ZlKCk7CgkJCWNvbC5hZnRlciggY2xvbmUgKTsKCgkJCS8vIFJlbW92ZXMgYW5pbWF0aW9uIHdoZW4gZW5hYmxlZC4KCQkJaWYgKCBtb2R1bGUuaGFzQ2xhc3MoICdmbC1hbmltYXRpb24nICkgKSB7CgkJCQljbG9uZS5yZW1vdmVDbGFzcyggJ2ZsLWFuaW1hdGlvbicgKTsKCQkJfQoKCQkJdGhpcy5fbWVudU9uQ2xpY2soKTsKCQl9LAoKCQkvKioKCQkgKiBMb2dpYyBmb3IgcmVtb3ZpbmcgdGhlIG1vYmlsZSBtZW51IGZyb20gYmVsb3cgdGhlIG1lbnUncwoJCSAqIGNvbHVtbiBhbmQgcHV0dGluZyBpdCBiYWNrIGluIHRoZSBtYWluIHdyYXBwZXIuCgkJICoKCQkgKiBAc2luY2UgIDEuMTAKCQkgKiBAcmV0dXJuIHZvaWQKCQkgKi8KCQlfcmVtb3ZlTWVudUZyb21CZWxvd1JvdzogZnVuY3Rpb24oKXsKCgkJCWlmICggISAkKCB0aGlzLm5vZGVDbGFzcyArICctY2xvbmUnICkubGVuZ3RoICkgewoJCQkJcmV0dXJuOwoJCQl9CgoJCQl2YXIgbW9kdWxlID0gJCggdGhpcy5ub2RlQ2xhc3MgKSwKCQkJCWNsb25lICA9ICQoIHRoaXMubm9kZUNsYXNzICsgJy1jbG9uZScgKSwKCQkJCW1lbnUgICA9IGNsb25lLmZpbmQoICd1bC5tZW51JyApOwoKCQkJbW9kdWxlLmZpbmQoICcuZmwtbWVudS1tb2JpbGUtdG9nZ2xlJyApLmFmdGVyKCBtZW51ICk7CgkJCWNsb25lLnJlbW92ZSgpOwoJCQltZW51LmZpbmQoICdhJyApLmVhY2goIEZMQnVpbGRlckxheW91dC5faW5pdEFuY2hvckxpbmsgKTsKCQl9LAoKCQkvKioKCQkgKiBMb2dpYyBmb3IgRmx5b3V0IHJlc3BvbnNpdmUgbWVudS4KCQkgKgoJCSAqIEBzaW5jZSAyLjIKCQkgKiBAcmV0dXJuIHZvaWQKCQkgKi8KCQlfaW5pdEZseW91dE1lbnU6IGZ1bmN0aW9uKCl7CgkJCXZhciB3aW4gICAgID0gJCggd2luZG93ICksCgkJCQl3cmFwcGVyID0gJCggdGhpcy53cmFwcGVyQ2xhc3MgKSwKCQkJCW1lbnUgIAk9IHdyYXBwZXIuZmluZCggJ3VsLm1lbnUnICksCgkJCQlidXR0b24JPSB3cmFwcGVyLmZpbmQoICcuZmwtbWVudS1tb2JpbGUtdG9nZ2xlJyApOwoKCQkJaWYgKCAwID09PSB3cmFwcGVyLmZpbmQoICcuZmwtbWVudS1tb2JpbGUtZmx5b3V0JyApLmxlbmd0aCApIHsKCQkJCW1lbnUud3JhcCggJzxkaXYgY2xhc3M9ImZsLW1lbnUtbW9iaWxlLWZseW91dCI+PC9kaXY+JyApOwoJCQl9CgoJCQlpZiAoIDAgPT09IHdyYXBwZXIuZmluZCggJy5mbC1tZW51LW1vYmlsZS1jbG9zZScgKS5sZW5ndGggKSB7CgkJCQljbG9zZSA9IHdpbmRvdy5mbF9yZXNwb25zaXZlX2Nsb3NlIHx8ICdDbG9zZScKCQkJCXdyYXBwZXIuZmluZCggJy5mbC1tZW51LW1vYmlsZS1mbHlvdXQnICkKCQkJCQkucHJlcGVuZCggJzxidXR0b24gY2xhc3M9ImZsLW1lbnUtbW9iaWxlLWNsb3NlIiBhcmlhLWxhYmVsPSInICsgY2xvc2UgKyAnIj48aSBjbGFzcz0iZmFzIGZhLXRpbWVzIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9pPjwvYnV0dG9uPicgKTsKCQkJfQoKCQkJLy8gUHVzaCB3aXRoIG9wYWNpdHkKCQkJaWYgKCB3cmFwcGVyLmhhc0NsYXNzKCAnZmwtbWVudS1yZXNwb25zaXZlLWZseW91dC1wdXNoLW9wYWNpdHknICkgJiYgMCA9PT0gd3JhcHBlci5maW5kKCAnLmZsLW1lbnUtbW9iaWxlLW9wYWNpdHknICkubGVuZ3RoICkgewoJCQkJd3JhcHBlci5hcHBlbmQoICc8ZGl2IGNsYXNzPSJmbC1tZW51LW1vYmlsZS1vcGFjaXR5Ij48L2Rpdj4nICk7CgkJCX0KCgkJCXdyYXBwZXIub24oICdjbGljaycsICcuZmwtbWVudS1tb2JpbGUtb3BhY2l0eSwgLmZsLW1lbnUtbW9iaWxlLWNsb3NlJywgZnVuY3Rpb24oZSl7CgkJCQlidXR0b24udHJpZ2dlciggJ2NsaWNrJyApOwoJCQkJZS5zdG9wUHJvcGFnYXRpb24oKTsKCQkJfSk7CgoJCQlpZiAoICd1bmRlZmluZWQnICE9PSB0eXBlb2YgRkxCdWlsZGVyICkgewoJCQkJRkxCdWlsZGVyLmFkZEhvb2soJ3Jlc3RhcnRFZGl0aW5nU2Vzc2lvbicsIGZ1bmN0aW9uKCl7CgkJCQkJJCggJy5mbC1idWlsZGVyLXVpLXBpbm5lZC1jb250ZW50LXRyYW5zZm9ybScgKS5jc3MoICd0cmFuc2Zvcm0nLCAnJyApOwoKCQkJCQkvLyBUb2dnbGUgYWN0aXZlIG1lbnUuCgkJCQkJaWYgKCBidXR0b24uaGFzQ2xhc3MoICdmbC1hY3RpdmUnICkgKSB7CgkJCQkJCWJ1dHRvbi50cmlnZ2VyKCAnY2xpY2snICk7CgkJCQkJfQoJCQkJfSk7CgkJCX0KCQl9LAoKCQkvKioKCQkgKiBMb2dpYyB0byBlbmFibGUvZGlzYWJsZSB0aGUgRmx5b3V0IG1lbnUgb24gYnV0dG9uIGNsaWNrLgoJCSAqCgkJICogQHNpbmNlIDIuMgoJCSAqIEByZXR1cm4gdm9pZAoJCSAqLwoJCV90b2dnbGVGbHlvdXRNZW51OiBmdW5jdGlvbigpewoJCQl2YXIgd3JhcHBlcgkJPSAkKCB0aGlzLndyYXBwZXJDbGFzcyApLAoJCQkJYnV0dG9uCQk9IHdyYXBwZXIuZmluZCggJy5mbC1tZW51LW1vYmlsZS10b2dnbGUnICksCgkJCQl3cmFwRmx5b3V0CT0gd3JhcHBlci5maW5kKCAnLmZsLW1lbnUtbW9iaWxlLWZseW91dCcgKSwKCQkJCXBvc2l0aW9uIAk9IHdyYXBwZXIuaGFzQ2xhc3MoICdmbC1mbHlvdXQtcmlnaHQnICkgPyAncmlnaHQnIDogJ2xlZnQnLAoJCQkJcHVzaE1lbnUgCT0gd3JhcHBlci5oYXNDbGFzcyggJ2ZsLW1lbnUtcmVzcG9uc2l2ZS1mbHlvdXQtcHVzaCcgKSB8fCB3cmFwcGVyLmhhc0NsYXNzKCAnZmwtbWVudS1yZXNwb25zaXZlLWZseW91dC1wdXNoLW9wYWNpdHknICksCgkJCQlvcGFjaXR5CQk9IHdyYXBwZXIuZmluZCggJy5mbC1tZW51LW1vYmlsZS1vcGFjaXR5JyApLAoJCQkJbWFyZ2luUG9zCT0ge30sCgkJCQlwb3NBdHRyCQk9IHt9LAoJCQkJZml4ZWRQb3MgCT0ge30sCgkJCQl3aW5IZWlnaHQJPSAkKHdpbmRvdykuaGVpZ2h0KCksCgkJCQlmaXhlZEhlYWRlcgk9ICQoJ2hlYWRlciwgaGVhZGVyID4gZGl2Jyk7CgoJCQl0aGlzLl9yZXNpemVGbHlvdXRNZW51UGFuZWwoKTsKCgkJCS8vIEZpeCB0aGUgcHVzaCBtZW51IHdoZW4gYnVpbGRlciB1aSBwYW5lbCBpcyBwaW5uZWQuCgkJCWlmICggJCggJy5mbC1idWlsZGVyLXVpLXBpbm5lZC1jb250ZW50LXRyYW5zZm9ybScgKS5sZW5ndGggPiAwICYmICEgJCggJ2JvZHknICkuaGFzQ2xhc3MoICdmbC1idWlsZGVyLWVkaXQnICkgKSB7CgkJCQkkKCAnLmZsLWJ1aWxkZXItdWktcGlubmVkLWNvbnRlbnQtdHJhbnNmb3JtJyApLmNzcyggJ3RyYW5zZm9ybScsICdub25lJyApOwoJCQl9CgoJCQlpZiAoIHB1c2hNZW51ICkgewoJCQkJbWFyZ2luUG9zWyAnbWFyZ2luLScgKyBwb3NpdGlvbiBdID0gYnV0dG9uLmhhc0NsYXNzKCAnZmwtYWN0aXZlJyApID8gJzI1MHB4JyA6ICcwcHgnOwoJCQkJJCggJ2JvZHknICkuYW5pbWF0ZSggbWFyZ2luUG9zLCAyMDApOwoKCQkJCS8vIEZpeGVkIGhlYWRlcgoJCQkJaWYgKCBmaXhlZEhlYWRlci5sZW5ndGggPiAwICkgewoJCQkJCWZpeGVkUG9zWyBwb3NpdGlvbl0gPSBidXR0b24uaGFzQ2xhc3MoICdmbC1hY3RpdmUnICkgPyAnMjUwcHgnIDogJzBweCc7CgkJCQkJZml4ZWRIZWFkZXIuZWFjaChmdW5jdGlvbigpewoJCQkJCQlpZiAoICdmaXhlZCcgPT0gJCggdGhpcyApLmNzcyggJ3Bvc2l0aW9uJyApICkgewoJCQkJCQkJJCggdGhpcyApLmNzcyh7CgkJCQkJCQkJJy13ZWJraXQtdHJhbnNpdGlvbic6ICdub25lJywKCQkJCQkJCQknLW8tdHJhbnNpdGlvbicJCTogJ25vbmUnLAoJCQkJCQkJCSd0cmFuc2l0aW9uJwkJOiAnbm9uZScKCQkJCQkJCX0pOwoJCQkJCQkJJCggdGhpcyApLmFuaW1hdGUoIGZpeGVkUG9zLCAyMDAgKTsKCQkJCQkJfQoJCQkJCX0pOwoJCQkJfQoJCQl9CgoJCQlpZiAoIG9wYWNpdHkubGVuZ3RoID4gMCAmJiBidXR0b24uaGFzQ2xhc3MoICdmbC1hY3RpdmUnICkgKSB7CgkJCQlvcGFjaXR5LnNob3coKTsKCQkJfQoJCQllbHNlIHsKCQkJCW9wYWNpdHkuaGlkZSgpOwoJCQl9CgkJfSwKCgkJLyoqCgkJICogUmVzaXplIG9yIHJlcG9zaXRpb24gdGhlIEZseW91dCBNZW51IFBhbmVsLgoJCSAqIAoJCSAqIEBzaW5jZSAyLjguMQoJCSAqIEByZXR1cm5zIHZvaWQKCQkgKi8KCQlfcmVzaXplRmx5b3V0TWVudVBhbmVsOiBmdW5jdGlvbigpewoJCQljb25zdCB3cmFwcGVyICAgID0gJCggdGhpcy53cmFwcGVyQ2xhc3MgKTsKCQkJY29uc3Qgd3JhcEZseW91dCA9IHdyYXBwZXIuZmluZCggJy5mbC1tZW51LW1vYmlsZS1mbHlvdXQnICk7CgkJCQkKCQkJaWYgKCB3cmFwRmx5b3V0Lmxlbmd0aCA+IDAgKSB7CgkJCQl3cmFwRmx5b3V0LmNzcyggdGhpcy5fZ2V0Rmx5b3V0TWVudVBhbmVsUG9zaXRpb24oKSApOwoJCQl9CgkJfSwKCgkJLyoqCgkJICogQ29tcHV0ZSB0aGUgRmx5b3V0IE1lbnUgUGFuZWwncyBwb3NpdGlvbiBvbiB0aGUgc2NyZWVuLgoJCSAqIAoJCSAqIEBzaW5jZSAyLjguMQoJCSAqIEByZXR1cm5zIG9iamVjdAoJCSAqLwoJCV9nZXRGbHlvdXRNZW51UGFuZWxQb3NpdGlvbjogZnVuY3Rpb24oKSB7CgkJCXZhciB3cmFwcGVyICAgICAgICA9ICQoIHRoaXMud3JhcHBlckNsYXNzICksCgkJCQlidXR0b24gICAgICAgICA9IHdyYXBwZXIuZmluZCggJy5mbC1tZW51LW1vYmlsZS10b2dnbGUnICksCgkJCQl3cmFwRmx5b3V0ICAgICA9IHdyYXBwZXIuZmluZCggJy5mbC1tZW51LW1vYmlsZS1mbHlvdXQnICksCgkJCQlzaWRlICAgICAgICAgICA9IHdyYXBwZXIuaGFzQ2xhc3MoICdmbC1mbHlvdXQtcmlnaHQnICkgPyAncmlnaHQnIDogJ2xlZnQnLAoJCQkJd2luSGVpZ2h0ICAgICAgPSAkKHdpbmRvdykub3V0ZXJIZWlnaHQoKSwKCQkJCXdpblRvcCAgICAgICAgID0gJCh3aW5kb3cpLnNjcm9sbFRvcCgpLAoJCQkJYWRtaW5CYXJIZWlnaHQgPSAkKCAnI3dwYWRtaW5iYXInICkubGVuZ3RoID8gJCggJyN3cGFkbWluYmFyJyApLmhlaWdodCgpIDogMCwKCQkJCWZseW91dFBvc2l0aW9uID0ge307CgoJCQlmbHlvdXRQb3NpdGlvblsgc2lkZSBdICA9ICctMjY3cHgnOwoJCQlpZiAoICEgYnV0dG9uLmhhc0NsYXNzKCAnZmwtYWN0aXZlJyApICkgewoJCQkJcmV0dXJuIGZseW91dFBvc2l0aW9uOwoJCQl9CgoJCQlmbHlvdXRQb3NpdGlvblsgc2lkZSBdICA9ICcwcHgnOwoJCQlmbHlvdXRQb3NpdGlvblsgJ2hlaWdodCcgXSAgPSB3aW5IZWlnaHQgKyAncHgnOwoJCQlmbHlvdXRQb3NpdGlvblsgJ3RvcCcgXSA9ICcwcHgnOwoJCQkKCQkJaWYgKCBhZG1pbkJhckhlaWdodCA+IDAgKSB7CgkJCQljb25zdCBkaWZmID0gYWRtaW5CYXJIZWlnaHQgLSB3aW5Ub3A7CgkJCQlmbHlvdXRQb3NpdGlvblsgJ3RvcCcgXSA9IGRpZmYgPD0gMCA/ICcwcHgnIDogKGRpZmYpICsgJ3B4JzsKCQkJfQoKCQkJcmV0dXJuIGZseW91dFBvc2l0aW9uOwoJCX0sCgoJCS8qKgoJCSAqIFNob3dzIG9yIGhpZGVzIHRoZSBuYXYgc2VhcmNoIGZvcm0uCgkJICoKCQkgKiBAc2luY2UgMi41CgkJICogQG1ldGhvZCBfdG9nZ2xlTWVudVNlYXJjaAoJCSAqLwoJCV90b2dnbGVNZW51U2VhcmNoOiBmdW5jdGlvbigpewoJCQl2YXIgd3JhcHBlciA9ICQoIHRoaXMud3JhcHBlckNsYXNzICkuZmluZCgnLmZsLW1lbnUtc2VhcmNoLWl0ZW0nKSwKCQkJCWJ1dHRvbiAgPSB3cmFwcGVyLmZpbmQoJ2EuZmwtYnV0dG9uJyksCgkJCQlmb3JtICAgID0gd3JhcHBlci5maW5kKCcuZmwtc2VhcmNoLWZvcm0taW5wdXQtd3JhcCcpLAoJCQkJc2VsZiAgICA9IHRoaXM7CgoJCQlidXR0b24ub24oJ2NsaWNrJywgZnVuY3Rpb24oZSl7CgkJCQllLnByZXZlbnREZWZhdWx0KCk7CgoJCQkJaWYoZm9ybS5pcygnOnZpc2libGUnKSkgewoJCQkJCWZvcm0uc3RvcCgpLmZhZGVPdXQoMjAwKTsKCQkJCX0KCQkJCWVsc2UgewoJCQkJCWZvcm0uc3RvcCgpLmZhZGVJbigyMDApOwoJCQkJCSQoJ2JvZHknKS5vbignY2xpY2suZmwtbWVudS1zZWFyY2gnLCAkLnByb3h5KHNlbGYuX2hpZGVNZW51U2VhcmNoLCBzZWxmKSk7CgkJCQkJZm9ybS5maW5kKCcuZmwtc2VhcmNoLXRleHQnKS5mb2N1cygpOwoJCQkJfQoJCQl9KTsKCQl9LAoKCQkvKioKCQkgKiBIaWRlcyB0aGUgbmF2IHNlYXJjaCBmb3JtLgoJCSAqCgkJICogQHNpbmNlIDIuNQoJCSAqIEBtZXRob2QgX2hpZGVNZW51U2VhcmNoCgkJICovCgkJX2hpZGVNZW51U2VhcmNoOiBmdW5jdGlvbihlKXsKCQkJdmFyIGZvcm0gPSAkKCB0aGlzLndyYXBwZXJDbGFzcyApLmZpbmQoJy5mbC1zZWFyY2gtZm9ybS1pbnB1dC13cmFwJyk7CgoJCQlpZihlICE9PSB1bmRlZmluZWQpIHsKCQkJCWlmKCQoZS50YXJnZXQpLmNsb3Nlc3QoJy5mbC1tZW51LXNlYXJjaC1pdGVtJykubGVuZ3RoID4gMCkgewoJCQkJCXJldHVybjsKCQkJCX0KCQkJfQoKCQkJZm9ybS5zdG9wKCkuZmFkZU91dCgyMDApOwoJCQkkKCdib2R5Jykub2ZmKCdjbGljay5mbC1tZW51LXNlYXJjaCcpOwoJCX0sCgoJCS8qKgoJCSAqIEFkZHMgbWVudSBub2RlIGFuZCBwb3N0IElEIHRvIFdvb0NvbW1lcmNlIGFqYXggVVJMIHJlcXVlc3RzLgoJCSAqCgkJICogQHNpbmNlICAzLjAKCQkgKiBAcmV0dXJuIHZvaWQKCQkgKi8KCQlfd29vVXBkYXRlUGFyYW1zOiBmdW5jdGlvbigpIHsKCQkJaWYgKCAndW5kZWZpbmVkJyAhPT0gdHlwZW9mIHdjX2NhcnRfZnJhZ21lbnRzX3BhcmFtcyApIHsKCQkJCXdjX2NhcnRfZnJhZ21lbnRzX3BhcmFtcy53Y19hamF4X3VybCArPSAnJmZsLW1lbnUtbm9kZT0nKyB0aGlzLm5vZGVJZCArJyZwb3N0LWlkPScrIHRoaXMucG9zdElkOwoJCQl9CgkJCWlmICggJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiB3Y19hZGRfdG9fY2FydF9wYXJhbXMgKSB7CgkJCQl3Y19hZGRfdG9fY2FydF9wYXJhbXMud2NfYWpheF91cmwgKz0gJyZmbC1tZW51LW5vZGU9JysgdGhpcy5ub2RlSWQgKycmcG9zdC1pZD0nKyB0aGlzLnBvc3RJZDsKCQkJfQoJCX0sCgl9OwoKfSkoalF1ZXJ5KTsKOwooZnVuY3Rpb24oJCkgewoKCSQoZnVuY3Rpb24oKSB7CgoJCW5ldyBGTEJ1aWxkZXJNZW51KHsKCQkJaWQ6ICc2MDFhZTdlNDkxNWEwJywKCQkJdHlwZTogJ3ZlcnRpY2FsJywKCQkJbW9iaWxlOiAnZXhwYW5kZWQnLAoJCQltb2JpbGVCZWxvd1JvdzogZmFsc2UsCgkJCW1vYmlsZUZseW91dDogZmFsc2UsCgkJCWJyZWFrUG9pbnRzOiB7CgkJCQlsYXJnZTogMTIwMCwKCQkJCW1lZGl1bTogMTAyNCwKCQkJCXNtYWxsOiA4NjAJCQl9LAoJCQltb2JpbGVCcmVha3BvaW50OiAnbW9iaWxlJywKCQkJcG9zdElkIDogJzcxJywKCQkJbW9iaWxlU3RhY2tlZDogdHJ1ZSwKCQl9KTsKCgl9KTsKCn0pKGpRdWVyeSk7CgovKiBTdGFydCBMYXlvdXQgQ3VzdG9tIEpTICovCgovKiBFbmQgTGF5b3V0IEN1c3RvbSBKUyAqLwoK>/script> /body>/html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]