.wp-block-accordion{box-sizing:border-box}.wp-block-accordion-item.is-open>.wp-block-accordion-heading .wp-block-accordion-heading__toggle-icon{transform:rotate(45deg)}@media (prefers-reduced-motion:no-preference){.wp-block-accordion-item{transition:grid-template-rows .3s ease-out}.wp-block-accordion-item>.wp-block-accordion-heading .wp-block-accordion-heading__toggle-icon{transition:transform .2s ease-in-out}}.wp-block-accordion-heading__toggle{align-items:center;background:none;border:none;color:inherit;cursor:pointer;display:flex;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;overflow:hidden;padding:var(--wp--preset--spacing--20,1em) 0;text-align:inherit;text-decoration:inherit;text-transform:inherit;width:100%;word-spacing:inherit}.wp-block-accordion-heading__toggle:not(:focus-visible){outline:none}.wp-block-accordion-heading__toggle:hover .wp-block-accordion-heading__toggle-title{text-decoration:underline}.wp-block-accordion-heading__toggle-title{flex:1}.wp-block-accordion-heading__toggle-icon{align-items:center;display:flex;height:1.2em;justify-content:center;width:1.2em}.wp-block-accordion-panel[aria-hidden=true],.wp-block-accordion-panel[inert]{display:none;margin-block-start:0}.wp-block-archives{box-sizing:border-box}.wp-block-archives-dropdown label{display:block}.wp-block-avatar{line-height:0}.wp-block-avatar,.wp-block-avatar img{box-sizing:border-box}.wp-block-avatar.aligncenter{text-align:center}.wp-block-audio{box-sizing:border-box}.wp-block-audio :where(figcaption){margin-bottom:1em;margin-top:.5em}.wp-block-audio audio{min-width:300px;width:100%}.wp-block-breadcrumbs{box-sizing:border-box}.wp-block-breadcrumbs ol{flex-wrap:wrap;list-style:none}.wp-block-breadcrumbs li,.wp-block-breadcrumbs ol{align-items:center;display:flex;margin:0;padding:0}.wp-block-breadcrumbs li:not(:last-child):after{content:var(--separator,"/");margin:0 .5em;opacity:.7}.wp-block-breadcrumbs span{color:inherit}.wp-block-button__link{align-content:center;box-sizing:border-box;cursor:pointer;display:inline-block;height:100%;text-align:center;word-break:break-word}.wp-block-button__link.aligncenter{text-align:center}.wp-block-button__link.alignright{text-align:right}:where(.wp-block-button__link){border-radius:9999px;box-shadow:none;padding:calc(.667em + 2px) calc(1.333em + 2px);text-decoration:none}.wp-block-button[style*=text-decoration] .wp-block-button__link{text-decoration:inherit}.wp-block-buttons>.wp-block-button.has-custom-width{max-width:none}.wp-block-buttons>.wp-block-button.has-custom-width .wp-block-button__link{width:100%}.wp-block-buttons>.wp-block-button.has-custom-font-size .wp-block-button__link{font-size:inherit}.wp-block-buttons>.wp-block-button.wp-block-button__width-25{width:calc(25% - var(--wp--style--block-gap, .5em)*.75)}.wp-block-buttons>.wp-block-button.wp-block-button__width-50{width:calc(50% - var(--wp--style--block-gap, .5em)*.5)}.wp-block-buttons>.wp-block-button.wp-block-button__width-75{width:calc(75% - var(--wp--style--block-gap, .5em)*.25)}.wp-block-buttons>.wp-block-button.wp-block-button__width-100{flex-basis:100%;width:100%}.wp-block-buttons.is-vertical>.wp-block-button.wp-block-button__width-25{width:25%}.wp-block-buttons.is-vertical>.wp-block-button.wp-block-button__width-50{width:50%}.wp-block-buttons.is-vertical>.wp-block-button.wp-block-button__width-75{width:75%}.wp-block-button.is-style-squared,.wp-block-button__link.wp-block-button.is-style-squared{border-radius:0}.wp-block-button.no-border-radius,.wp-block-button__link.no-border-radius{border-radius:0!important}:root :where(.wp-block-button .wp-block-button__link.is-style-outline),:root :where(.wp-block-button.is-style-outline>.wp-block-button__link){border:2px solid;padding:.667em 1.333em}:root :where(.wp-block-button .wp-block-button__link.is-style-outline:not(.has-text-color)),:root :where(.wp-block-button.is-style-outline>.wp-block-button__link:not(.has-text-color)){color:currentColor}:root :where(.wp-block-button .wp-block-button__link.is-style-outline:not(.has-background)),:root :where(.wp-block-button.is-style-outline>.wp-block-button__link:not(.has-background)){background-color:initial;background-image:none}.wp-block-buttons{box-sizing:border-box}.wp-block-buttons.is-vertical{flex-direction:column}.wp-block-buttons.is-vertical>.wp-block-button:last-child{margin-bottom:0}.wp-block-buttons>.wp-block-button{display:inline-block;margin:0}.wp-block-buttons.is-content-justification-left{justify-content:flex-start}.wp-block-buttons.is-content-justification-left.is-vertical{align-items:flex-start}.wp-block-buttons.is-content-justification-center{justify-content:center}.wp-block-buttons.is-content-justification-center.is-vertical{align-items:center}.wp-block-buttons.is-content-justification-right{justify-content:flex-end}.wp-block-buttons.is-content-justification-right.is-vertical{align-items:flex-end}.wp-block-buttons.is-content-justification-space-between{justify-content:space-between}.wp-block-buttons.aligncenter{text-align:center}.wp-block-buttons:not(.is-content-justification-space-between,.is-content-justification-right,.is-content-justification-left,.is-content-justification-center) .wp-block-button.aligncenter{margin-left:auto;margin-right:auto;width:100%}.wp-block-buttons[style*=text-decoration] .wp-block-button,.wp-block-buttons[style*=text-decoration] .wp-block-button__link{text-decoration:inherit}.wp-block-buttons.has-custom-font-size .wp-block-button__link{font-size:inherit}.wp-block-buttons .wp-block-button__link{width:100%}.wp-block-button.aligncenter,.wp-block-calendar{text-align:center}.wp-block-calendar td,.wp-block-calendar th{border:1px solid;padding:.25em}.wp-block-calendar th{font-weight:400}.wp-block-calendar caption{background-color:inherit}.wp-block-calendar table{border-collapse:collapse;width:100%}.wp-block-calendar table.has-background th{background-color:inherit}.wp-block-calendar table.has-text-color th{color:inherit}.wp-block-calendar :where(table:not(.has-text-color)){color:#40464d}.wp-block-calendar :where(table:not(.has-text-color)) td,.wp-block-calendar :where(table:not(.has-text-color)) th{border-color:#ddd}:where(.wp-block-calendar table:not(.has-background) th){background:#ddd}.wp-block-categories{box-sizing:border-box}.wp-block-categories.alignleft{margin-right:2em}.wp-block-categories.alignright{margin-left:2em}.wp-block-categories.wp-block-categories-dropdown.aligncenter{text-align:center}.wp-block-categories .wp-block-categories__label{display:block;width:100%}.wp-block-code{box-sizing:border-box}.wp-block-code code{/*!rtl:begin:ignore*/direction:ltr;display:block;font-family:inherit;overflow-wrap:break-word;text-align:initial;white-space:pre-wrap /*!rtl:end:ignore*/}.wp-block-columns{box-sizing:border-box;display:flex;flex-wrap:wrap!important}@media (min-width:782px){.wp-block-columns{flex-wrap:nowrap!important}}.wp-block-columns{align-items:normal!important}.wp-block-columns.are-vertically-aligned-top{align-items:flex-start}.wp-block-columns.are-vertically-aligned-center{align-items:center}.wp-block-columns.are-vertically-aligned-bottom{align-items:flex-end}@media (max-width:781px){.wp-block-columns:not(.is-not-stacked-on-mobile)>.wp-block-column{flex-basis:100%!important}}@media (min-width:782px){.wp-block-columns:not(.is-not-stacked-on-mobile)>.wp-block-column{flex-basis:0%;flex-grow:1}.wp-block-columns:not(.is-not-stacked-on-mobile)>.wp-block-column[style*=flex-basis]{flex-grow:0}}.wp-block-columns.is-not-stacked-on-mobile{flex-wrap:nowrap!important}.wp-block-columns.is-not-stacked-on-mobile>.wp-block-column{flex-basis:0%;flex-grow:1}.wp-block-columns.is-not-stacked-on-mobile>.wp-block-column[style*=flex-basis]{flex-grow:0}:where(.wp-block-columns){margin-bottom:1.75em}:where(.wp-block-columns.has-background){padding:1.25em 2.375em}.wp-block-column{flex-grow:1;min-width:0;overflow-wrap:break-word;word-break:break-word}.wp-block-column.is-vertically-aligned-top{align-self:flex-start}.wp-block-column.is-vertically-aligned-center{align-self:center}.wp-block-column.is-vertically-aligned-bottom{align-self:flex-end}.wp-block-column.is-vertically-aligned-stretch{align-self:stretch}.wp-block-column.is-vertically-aligned-bottom,.wp-block-column.is-vertically-aligned-center,.wp-block-column.is-vertically-aligned-top{width:100%}.wp-block-post-comments{box-sizing:border-box}.wp-block-post-comments .alignleft{float:left}.wp-block-post-comments .alignright{float:right}.wp-block-post-comments .navigation:after{clear:both;content:"";display:table}.wp-block-post-comments .commentlist{clear:both;list-style:none;margin:0;padding:0}.wp-block-post-comments .commentlist .comment{min-height:2.25em;padding-left:3.25em}.wp-block-post-comments .commentlist .comment p{font-size:1em;line-height:1.8;margin:1em 0}.wp-block-post-comments .commentlist .children{list-style:none;margin:0;padding:0}.wp-block-post-comments .comment-author{line-height:1.5}.wp-block-post-comments .comment-author .avatar{border-radius:1.5em;display:block;float:left;height:2.5em;margin-right:.75em;margin-top:.5em;width:2.5em}.wp-block-post-comments .comment-author cite{font-style:normal}.wp-block-post-comments .comment-meta{font-size:.875em;line-height:1.5}.wp-block-post-comments .comment-meta b{font-weight:400}.wp-block-post-comments .comment-meta .comment-awaiting-moderation{display:block;margin-bottom:1em;margin-top:1em}.wp-block-post-comments .comment-body .commentmetadata{font-size:.875em}.wp-block-post-comments .comment-form-author label,.wp-block-post-comments .comment-form-comment label,.wp-block-post-comments .comment-form-email label,.wp-block-post-comments .comment-form-url label{display:block;margin-bottom:.25em}.wp-block-post-comments .comment-form input:not([type=submit]):not([type=checkbox]),.wp-block-post-comments .comment-form textarea{box-sizing:border-box;display:block;width:100%}.wp-block-post-comments .comment-form-cookies-consent{display:flex;gap:.25em}.wp-block-post-comments .comment-form-cookies-consent #wp-comment-cookies-consent{margin-top:.35em}.wp-block-post-comments .comment-reply-title{margin-bottom:0}.wp-block-post-comments .comment-reply-title :where(small){font-size:var(--wp--preset--font-size--medium,smaller);margin-left:.5em}.wp-block-post-comments .reply{font-size:.875em;margin-bottom:1.4em}.wp-block-post-comments input:not([type=submit]),.wp-block-post-comments textarea{border:1px solid #949494;font-family:inherit;font-size:1em}.wp-block-post-comments input:not([type=submit]):not([type=checkbox]),.wp-block-post-comments textarea{padding:calc(.667em + 2px)}:where(.wp-block-post-comments input[type=submit]){border:none}.wp-block-comments{box-sizing:border-box}.wp-block-comments-pagination>.wp-block-comments-pagination-next,.wp-block-comments-pagination>.wp-block-comments-pagination-numbers,.wp-block-comments-pagination>.wp-block-comments-pagination-previous{font-size:inherit}.wp-block-comments-pagination .wp-block-comments-pagination-previous-arrow{display:inline-block;margin-right:1ch}.wp-block-comments-pagination .wp-block-comments-pagination-previous-arrow:not(.is-arrow-chevron){transform:scaleX(1)}.wp-block-comments-pagination .wp-block-comments-pagination-next-arrow{display:inline-block;margin-left:1ch}.wp-block-comments-pagination .wp-block-comments-pagination-next-arrow:not(.is-arrow-chevron){transform:scaleX(1)}.wp-block-comments-pagination.aligncenter{justify-content:center}.wp-block-comment-template{box-sizing:border-box;list-style:none;margin-bottom:0;max-width:100%;padding:0}.wp-block-comment-template li{clear:both}.wp-block-comment-template ol{list-style:none;margin-bottom:0;max-width:100%;padding-left:2rem}.wp-block-comment-template.alignleft{float:left}.wp-block-comment-template.aligncenter{margin-left:auto;margin-right:auto;width:fit-content}.wp-block-comment-template.alignright{float:right}.wp-block-comment-date{box-sizing:border-box}.comment-awaiting-moderation{display:block;font-size:.875em;line-height:1.5}.wp-block-comment-author-name,.wp-block-comment-content,.wp-block-comment-edit-link,.wp-block-comment-reply-link{box-sizing:border-box}.wp-block-cover,.wp-block-cover-image{align-items:center;background-position:50%;box-sizing:border-box;display:flex;justify-content:center;min-height:430px;overflow:hidden;overflow:clip;padding:1em;position:relative}.wp-block-cover .has-background-dim:not([class*=-background-color]),.wp-block-cover-image .has-background-dim:not([class*=-background-color]),.wp-block-cover-image.has-background-dim:not([class*=-background-color]),.wp-block-cover.has-background-dim:not([class*=-background-color]){background-color:#000}.wp-block-cover .has-background-dim.has-background-gradient,.wp-block-cover-image .has-background-dim.has-background-gradient{background-color:initial}.wp-block-cover-image.has-background-dim:before,.wp-block-cover.has-background-dim:before{background-color:inherit;content:""}.wp-block-cover .wp-block-cover__background,.wp-block-cover .wp-block-cover__gradient-background,.wp-block-cover-image .wp-block-cover__background,.wp-block-cover-image .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim:not(.has-background-gradient):before,.wp-block-cover.has-background-dim:not(.has-background-gradient):before{bottom:0;left:0;opacity:.5;position:absolute;right:0;top:0}.wp-block-cover-image.has-background-dim.has-background-dim-10 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-10 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-10:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-10 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-10 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-10:not(.has-background-gradient):before{opacity:.1}.wp-block-cover-image.has-background-dim.has-background-dim-20 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-20 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-20:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-20 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-20 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-20:not(.has-background-gradient):before{opacity:.2}.wp-block-cover-image.has-background-dim.has-background-dim-30 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-30 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-30:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-30 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-30 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-30:not(.has-background-gradient):before{opacity:.3}.wp-block-cover-image.has-background-dim.has-background-dim-40 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-40 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-40:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-40 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-40 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-40:not(.has-background-gradient):before{opacity:.4}.wp-block-cover-image.has-background-dim.has-background-dim-50 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-50 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-50:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-50 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-50 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-50:not(.has-background-gradient):before{opacity:.5}.wp-block-cover-image.has-background-dim.has-background-dim-60 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-60 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-60:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-60 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-60 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-60:not(.has-background-gradient):before{opacity:.6}.wp-block-cover-image.has-background-dim.has-background-dim-70 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-70 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-70:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-70 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-70 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-70:not(.has-background-gradient):before{opacity:.7}.wp-block-cover-image.has-background-dim.has-background-dim-80 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-80 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-80:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-80 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-80 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-80:not(.has-background-gradient):before{opacity:.8}.wp-block-cover-image.has-background-dim.has-background-dim-90 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-90 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-90:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-90 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-90 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-90:not(.has-background-gradient):before{opacity:.9}.wp-block-cover-image.has-background-dim.has-background-dim-100 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-100 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-100:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-100 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-100 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-100:not(.has-background-gradient):before{opacity:1}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-0,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-0,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-0,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-0{opacity:0}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-10,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-10,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-10,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-10{opacity:.1}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-20,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-20,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-20,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-20{opacity:.2}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-30,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-30,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-30,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-30{opacity:.3}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-40,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-40,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-40,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-40{opacity:.4}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-50,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-50,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-50,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-50{opacity:.5}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-60,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-60,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-60,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-60{opacity:.6}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-70,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-70,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-70,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-70{opacity:.7}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-80,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-80,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-80,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-80{opacity:.8}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-90,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-90,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-90,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-90{opacity:.9}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-100,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-100,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-100,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-100{opacity:1}.wp-block-cover-image.alignleft,.wp-block-cover-image.alignright,.wp-block-cover.alignleft,.wp-block-cover.alignright{max-width:420px;width:100%}.wp-block-cover-image.aligncenter,.wp-block-cover-image.alignleft,.wp-block-cover-image.alignright,.wp-block-cover.aligncenter,.wp-block-cover.alignleft,.wp-block-cover.alignright{display:flex}.wp-block-cover .wp-block-cover__inner-container,.wp-block-cover-image .wp-block-cover__inner-container{color:inherit;position:relative;width:100%}.wp-block-cover-image.is-position-top-left,.wp-block-cover.is-position-top-left{align-items:flex-start;justify-content:flex-start}.wp-block-cover-image.is-position-top-center,.wp-block-cover.is-position-top-center{align-items:flex-start;justify-content:center}.wp-block-cover-image.is-position-top-right,.wp-block-cover.is-position-top-right{align-items:flex-start;justify-content:flex-end}.wp-block-cover-image.is-position-center-left,.wp-block-cover.is-position-center-left{align-items:center;justify-content:flex-start}.wp-block-cover-image.is-position-center-center,.wp-block-cover.is-position-center-center{align-items:center;justify-content:center}.wp-block-cover-image.is-position-center-right,.wp-block-cover.is-position-center-right{align-items:center;justify-content:flex-end}.wp-block-cover-image.is-position-bottom-left,.wp-block-cover.is-position-bottom-left{align-items:flex-end;justify-content:flex-start}.wp-block-cover-image.is-position-bottom-center,.wp-block-cover.is-position-bottom-center{align-items:flex-end;justify-content:center}.wp-block-cover-image.is-position-bottom-right,.wp-block-cover.is-position-bottom-right{align-items:flex-end;justify-content:flex-end}.wp-block-cover-image.has-custom-content-position.has-custom-content-position .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position .wp-block-cover__inner-container{margin:0}.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-bottom-left .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-bottom-right .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-center-left .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-center-right .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-top-left .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-top-right .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-bottom-left .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-bottom-right .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-center-left .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-center-right .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-top-left .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-top-right .wp-block-cover__inner-container{margin:0;width:auto}.wp-block-cover .wp-block-cover__image-background,.wp-block-cover video.wp-block-cover__video-background,.wp-block-cover-image .wp-block-cover__image-background,.wp-block-cover-image video.wp-block-cover__video-background{border:none;bottom:0;box-shadow:none;height:100%;left:0;margin:0;max-height:none;max-width:none;object-fit:cover;outline:none;padding:0;position:absolute;right:0;top:0;width:100%}.wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax,.wp-block-cover__image-background.has-parallax,video.wp-block-cover__video-background.has-parallax{background-attachment:fixed;background-repeat:no-repeat;background-size:cover}@supports (-webkit-touch-callout:inherit){.wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax,.wp-block-cover__image-background.has-parallax,video.wp-block-cover__video-background.has-parallax{background-attachment:scroll}}@media (prefers-reduced-motion:reduce){.wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax,.wp-block-cover__image-background.has-parallax,video.wp-block-cover__video-background.has-parallax{background-attachment:scroll}}.wp-block-cover-image.is-repeated,.wp-block-cover.is-repeated,.wp-block-cover__image-background.is-repeated,video.wp-block-cover__video-background.is-repeated{background-repeat:repeat;background-size:auto}.wp-block-cover-image-text,.wp-block-cover-image-text a,.wp-block-cover-image-text a:active,.wp-block-cover-image-text a:focus,.wp-block-cover-image-text a:hover,.wp-block-cover-text,.wp-block-cover-text a,.wp-block-cover-text a:active,.wp-block-cover-text a:focus,.wp-block-cover-text a:hover,section.wp-block-cover-image h2,section.wp-block-cover-image h2 a,section.wp-block-cover-image h2 a:active,section.wp-block-cover-image h2 a:focus,section.wp-block-cover-image h2 a:hover{color:#fff}.wp-block-cover-image .wp-block-cover.has-left-content{justify-content:flex-start}.wp-block-cover-image .wp-block-cover.has-right-content{justify-content:flex-end}.wp-block-cover-image.has-left-content .wp-block-cover-image-text,.wp-block-cover.has-left-content .wp-block-cover-text,section.wp-block-cover-image.has-left-content>h2{margin-left:0;text-align:left}.wp-block-cover-image.has-right-content .wp-block-cover-image-text,.wp-block-cover.has-right-content .wp-block-cover-text,section.wp-block-cover-image.has-right-content>h2{margin-right:0;text-align:right}.wp-block-cover .wp-block-cover-text,.wp-block-cover-image .wp-block-cover-image-text,section.wp-block-cover-image>h2{font-size:2em;line-height:1.25;margin-bottom:0;max-width:840px;padding:.44em;text-align:center;z-index:1}:where(.wp-block-cover-image:not(.has-text-color)),:where(.wp-block-cover:not(.has-text-color)){color:#fff}:where(.wp-block-cover-image.is-light:not(.has-text-color)),:where(.wp-block-cover.is-light:not(.has-text-color)){color:#000}:root :where(.wp-block-cover h1:not(.has-text-color)),:root :where(.wp-block-cover h2:not(.has-text-color)),:root :where(.wp-block-cover h3:not(.has-text-color)),:root :where(.wp-block-cover h4:not(.has-text-color)),:root :where(.wp-block-cover h5:not(.has-text-color)),:root :where(.wp-block-cover h6:not(.has-text-color)),:root :where(.wp-block-cover p:not(.has-text-color)){color:inherit}body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__image-background,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__video-background{z-index:0}body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__background,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__gradient-background,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__inner-container,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)).has-background-dim:not(.has-background-gradient):before{z-index:1}.has-modal-open body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__inner-container{z-index:auto}.wp-block-details{box-sizing:border-box}.wp-block-details summary{cursor:pointer}.wp-block-embed.alignleft,.wp-block-embed.alignright,.wp-block[data-align=left]>[data-type="core/embed"],.wp-block[data-align=right]>[data-type="core/embed"]{max-width:360px;width:100%}.wp-block-embed.alignleft .wp-block-embed__wrapper,.wp-block-embed.alignright .wp-block-embed__wrapper,.wp-block[data-align=left]>[data-type="core/embed"] .wp-block-embed__wrapper,.wp-block[data-align=right]>[data-type="core/embed"] .wp-block-embed__wrapper{min-width:280px}.wp-block-cover .wp-block-embed{min-height:240px;min-width:320px}.wp-block-embed{overflow-wrap:break-word}.wp-block-embed :where(figcaption){margin-bottom:1em;margin-top:.5em}.wp-block-embed iframe{max-width:100%}.wp-block-embed__wrapper{position:relative}.wp-embed-responsive .wp-has-aspect-ratio .wp-block-embed__wrapper:before{content:"";display:block;padding-top:50%}.wp-embed-responsive .wp-has-aspect-ratio iframe{bottom:0;height:100%;left:0;position:absolute;right:0;top:0;width:100%}.wp-embed-responsive .wp-embed-aspect-21-9 .wp-block-embed__wrapper:before{padding-top:42.85%}.wp-embed-responsive .wp-embed-aspect-18-9 .wp-block-embed__wrapper:before{padding-top:50%}.wp-embed-responsive .wp-embed-aspect-16-9 .wp-block-embed__wrapper:before{padding-top:56.25%}.wp-embed-responsive .wp-embed-aspect-4-3 .wp-block-embed__wrapper:before{padding-top:75%}.wp-embed-responsive .wp-embed-aspect-1-1 .wp-block-embed__wrapper:before{padding-top:100%}.wp-embed-responsive .wp-embed-aspect-9-16 .wp-block-embed__wrapper:before{padding-top:177.77%}.wp-embed-responsive .wp-embed-aspect-1-2 .wp-block-embed__wrapper:before{padding-top:200%}.wp-block-file{box-sizing:border-box}.wp-block-file:not(.wp-element-button){font-size:.8em}.wp-block-file.aligncenter{text-align:center}.wp-block-file.alignright{text-align:right}.wp-block-file *+.wp-block-file__button{margin-left:.75em}:where(.wp-block-file){margin-bottom:1.5em}.wp-block-file__embed{margin-bottom:1em}:where(.wp-block-file__button){border-radius:2em;display:inline-block;padding:.5em 1em}:where(.wp-block-file__button):where(a):active,:where(.wp-block-file__button):where(a):focus,:where(.wp-block-file__button):where(a):hover,:where(.wp-block-file__button):where(a):visited{box-shadow:none;color:#fff;opacity:.85;text-decoration:none}.wp-block-form-input__label{display:flex;flex-direction:column;gap:.25em;margin-bottom:.5em;width:100%}.wp-block-form-input__label.is-label-inline{align-items:center;flex-direction:row;gap:.5em}.wp-block-form-input__label.is-label-inline .wp-block-form-input__label-content{margin-bottom:.5em}.wp-block-form-input__label:has(input[type=checkbox]){flex-direction:row;width:fit-content}.wp-block-form-input__label:has(input[type=checkbox]) .wp-block-form-input__label-content{margin:0}.wp-block-form-input__label:has(.wp-block-form-input__label-content+input[type=checkbox]){flex-direction:row-reverse}.wp-block-form-input__label-content{width:fit-content}:where(.wp-block-form-input__input){font-size:1em;margin-bottom:.5em;padding:0 .5em}:where(.wp-block-form-input__input)[type=date],:where(.wp-block-form-input__input)[type=datetime-local],:where(.wp-block-form-input__input)[type=datetime],:where(.wp-block-form-input__input)[type=email],:where(.wp-block-form-input__input)[type=month],:where(.wp-block-form-input__input)[type=number],:where(.wp-block-form-input__input)[type=password],:where(.wp-block-form-input__input)[type=search],:where(.wp-block-form-input__input)[type=tel],:where(.wp-block-form-input__input)[type=text],:where(.wp-block-form-input__input)[type=time],:where(.wp-block-form-input__input)[type=url],:where(.wp-block-form-input__input)[type=week]{border-style:solid;border-width:1px;line-height:2;min-height:2em}textarea.wp-block-form-input__input{min-height:10em}.blocks-gallery-grid:not(.has-nested-images),.wp-block-gallery:not(.has-nested-images){display:flex;flex-wrap:wrap;list-style-type:none;margin:0;padding:0}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item{display:flex;flex-direction:column;flex-grow:1;justify-content:center;margin:0 1em 1em 0;position:relative;width:calc(50% - 1em)}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image:nth-of-type(2n),.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item:nth-of-type(2n){margin-right:0}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image figure,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item figure,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image figure,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item figure{align-items:flex-end;display:flex;height:100%;justify-content:flex-start;margin:0}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image img,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item img{display:block;height:auto;max-width:100%;width:auto}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image figcaption,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item figcaption,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image figcaption,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item figcaption{background:linear-gradient(0deg,#000000b3,#0000004d 70%,#0000);bottom:0;box-sizing:border-box;color:#fff;font-size:.8em;margin:0;max-height:100%;overflow:auto;padding:3em .77em .7em;position:absolute;text-align:center;width:100%;z-index:2}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image figcaption img,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item figcaption img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image figcaption img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item figcaption img{display:inline}.blocks-gallery-grid:not(.has-nested-images) figcaption,.wp-block-gallery:not(.has-nested-images) figcaption{flex-grow:1}.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-image a,.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-image img,.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-item a,.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-item img,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-image a,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-image img,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-item a,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-item img{flex:1;height:100%;object-fit:cover;width:100%}.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-item{margin-right:0;width:100%}@media (min-width:600px){.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-item{margin-right:1em;width:calc(33.33333% - .66667em)}.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-item{margin-right:1em;width:calc(25% - .75em)}.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-item{margin-right:1em;width:calc(20% - .8em)}.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-item{margin-right:1em;width:calc(16.66667% - .83333em)}.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-item{margin-right:1em;width:calc(14.28571% - .85714em)}.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-item{margin-right:1em;width:calc(12.5% - .875em)}.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-image:nth-of-type(1n),.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-item:nth-of-type(1n),.blocks-gallery-grid:not(.has-nested-images).columns-2 .blocks-gallery-image:nth-of-type(2n),.blocks-gallery-grid:not(.has-nested-images).columns-2 .blocks-gallery-item:nth-of-type(2n),.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-image:nth-of-type(3n),.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-item:nth-of-type(3n),.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-image:nth-of-type(4n),.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-item:nth-of-type(4n),.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-image:nth-of-type(5n),.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-item:nth-of-type(5n),.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-image:nth-of-type(6n),.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-item:nth-of-type(6n),.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-image:nth-of-type(7n),.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-item:nth-of-type(7n),.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-image:nth-of-type(8n),.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-item:nth-of-type(8n),.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-image:nth-of-type(1n),.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-item:nth-of-type(1n),.wp-block-gallery:not(.has-nested-images).columns-2 .blocks-gallery-image:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images).columns-2 .blocks-gallery-item:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-image:nth-of-type(3n),.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-item:nth-of-type(3n),.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-image:nth-of-type(4n),.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-item:nth-of-type(4n),.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-image:nth-of-type(5n),.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-item:nth-of-type(5n),.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-image:nth-of-type(6n),.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-item:nth-of-type(6n),.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-image:nth-of-type(7n),.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-item:nth-of-type(7n),.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-image:nth-of-type(8n),.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-item:nth-of-type(8n){margin-right:0}}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image:last-child,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item:last-child,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image:last-child,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item:last-child{margin-right:0}.blocks-gallery-grid:not(.has-nested-images).alignleft,.blocks-gallery-grid:not(.has-nested-images).alignright,.wp-block-gallery:not(.has-nested-images).alignleft,.wp-block-gallery:not(.has-nested-images).alignright{max-width:420px;width:100%}.blocks-gallery-grid:not(.has-nested-images).aligncenter .blocks-gallery-item figure,.wp-block-gallery:not(.has-nested-images).aligncenter .blocks-gallery-item figure{justify-content:center}.wp-block-gallery:not(.is-cropped) .blocks-gallery-item{align-self:flex-start}figure.wp-block-gallery.has-nested-images{align-items:normal}.wp-block-gallery.has-nested-images figure.wp-block-image:not(#individual-image){margin:0;width:calc(50% - var(--wp--style--unstable-gallery-gap, 16px)/2)}.wp-block-gallery.has-nested-images figure.wp-block-image{box-sizing:border-box;display:flex;flex-direction:column;flex-grow:1;justify-content:center;max-width:100%;position:relative}.wp-block-gallery.has-nested-images figure.wp-block-image>a,.wp-block-gallery.has-nested-images figure.wp-block-image>div{flex-direction:column;flex-grow:1;margin:0}.wp-block-gallery.has-nested-images figure.wp-block-image img{display:block;height:auto;max-width:100%!important;width:auto}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption,.wp-block-gallery.has-nested-images figure.wp-block-image:has(figcaption):before{bottom:0;left:0;max-height:100%;position:absolute;right:0}.wp-block-gallery.has-nested-images figure.wp-block-image:has(figcaption):before{backdrop-filter:blur(3px);content:"";height:100%;-webkit-mask-image:linear-gradient(0deg,#000 20%,#0000);mask-image:linear-gradient(0deg,#000 20%,#0000);max-height:40%;pointer-events:none}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption{box-sizing:border-box;color:#fff;font-size:13px;margin:0;overflow:auto;padding:1em;text-align:center;text-shadow:0 0 1.5px #000}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption::-webkit-scrollbar{height:12px;width:12px}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption::-webkit-scrollbar-track{background-color:initial}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption::-webkit-scrollbar-thumb{background-clip:padding-box;background-color:initial;border:3px solid #0000;border-radius:8px}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus-within::-webkit-scrollbar-thumb,.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus::-webkit-scrollbar-thumb,.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:hover::-webkit-scrollbar-thumb{background-color:#fffc}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption{scrollbar-color:#0000 #0000;scrollbar-gutter:stable both-edges;scrollbar-width:thin}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus,.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus-within,.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:hover{scrollbar-color:#fffc #0000}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption{will-change:transform}@media (hover:none){.wp-block-gallery.has-nested-images figure.wp-block-image figcaption{scrollbar-color:#fffc #0000}}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption{background:linear-gradient(0deg,#0006,#0000)}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption img{display:inline}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption a{color:inherit}.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border img{box-sizing:border-box}.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border>a,.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border>div,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded>a,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded>div{flex:1 1 auto}.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border figcaption,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded figcaption{background:none;color:inherit;flex:initial;margin:0;padding:10px 10px 9px;position:relative;text-shadow:none}.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border:before,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded:before{content:none}.wp-block-gallery.has-nested-images figcaption{flex-basis:100%;flex-grow:1;text-align:center}.wp-block-gallery.has-nested-images:not(.is-cropped) figure.wp-block-image:not(#individual-image){margin-bottom:auto;margin-top:0}.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image){align-self:inherit}.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image)>a,.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image)>div:not(.components-drop-zone){display:flex}.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image) a,.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image) img{flex:1 0 0%;height:100%;object-fit:cover;width:100%}.wp-block-gallery.has-nested-images.columns-1 figure.wp-block-image:not(#individual-image){width:100%}@media (min-width:600px){.wp-block-gallery.has-nested-images.columns-3 figure.wp-block-image:not(#individual-image){width:calc(33.33333% - var(--wp--style--unstable-gallery-gap, 16px)*.66667)}.wp-block-gallery.has-nested-images.columns-4 figure.wp-block-image:not(#individual-image){width:calc(25% - var(--wp--style--unstable-gallery-gap, 16px)*.75)}.wp-block-gallery.has-nested-images.columns-5 figure.wp-block-image:not(#individual-image){width:calc(20% - var(--wp--style--unstable-gallery-gap, 16px)*.8)}.wp-block-gallery.has-nested-images.columns-6 figure.wp-block-image:not(#individual-image){width:calc(16.66667% - var(--wp--style--unstable-gallery-gap, 16px)*.83333)}.wp-block-gallery.has-nested-images.columns-7 figure.wp-block-image:not(#individual-image){width:calc(14.28571% - var(--wp--style--unstable-gallery-gap, 16px)*.85714)}.wp-block-gallery.has-nested-images.columns-8 figure.wp-block-image:not(#individual-image){width:calc(12.5% - var(--wp--style--unstable-gallery-gap, 16px)*.875)}.wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image){width:calc(33.33% - var(--wp--style--unstable-gallery-gap, 16px)*.66667)}.wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image):first-child:nth-last-child(2),.wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image):first-child:nth-last-child(2)~figure.wp-block-image:not(#individual-image){width:calc(50% - var(--wp--style--unstable-gallery-gap, 16px)*.5)}.wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image):first-child:last-child{width:100%}}.wp-block-gallery.has-nested-images.alignleft,.wp-block-gallery.has-nested-images.alignright{max-width:420px;width:100%}.wp-block-gallery.has-nested-images.aligncenter{justify-content:center}.wp-block-group{box-sizing:border-box}:where(.wp-block-group.wp-block-group-is-layout-constrained){position:relative}h1:where(.wp-block-heading).has-background,h2:where(.wp-block-heading).has-background,h3:where(.wp-block-heading).has-background,h4:where(.wp-block-heading).has-background,h5:where(.wp-block-heading).has-background,h6:where(.wp-block-heading).has-background{padding:1.25em 2.375em}h1.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h1.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h2.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h2.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h3.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h3.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h4.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h4.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h5.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h5.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h6.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h6.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]){rotate:180deg}.wp-block-image>a,.wp-block-image>figure>a{display:inline-block}.wp-block-image img{box-sizing:border-box;height:auto;max-width:100%;vertical-align:bottom}@media not (prefers-reduced-motion){.wp-block-image img.hide{visibility:hidden}.wp-block-image img.show{animation:show-content-image .4s}}.wp-block-image[style*=border-radius] img,.wp-block-image[style*=border-radius]>a{border-radius:inherit}.wp-block-image.has-custom-border img{box-sizing:border-box}.wp-block-image.aligncenter{text-align:center}.wp-block-image.alignfull>a,.wp-block-image.alignwide>a{width:100%}.wp-block-image.alignfull img,.wp-block-image.alignwide img{height:auto;width:100%}.wp-block-image .aligncenter,.wp-block-image .alignleft,.wp-block-image .alignright,.wp-block-image.aligncenter,.wp-block-image.alignleft,.wp-block-image.alignright{display:table}.wp-block-image .aligncenter>figcaption,.wp-block-image .alignleft>figcaption,.wp-block-image .alignright>figcaption,.wp-block-image.aligncenter>figcaption,.wp-block-image.alignleft>figcaption,.wp-block-image.alignright>figcaption{caption-side:bottom;display:table-caption}.wp-block-image .alignleft{float:left;margin:.5em 1em .5em 0}.wp-block-image .alignright{float:right;margin:.5em 0 .5em 1em}.wp-block-image .aligncenter{margin-left:auto;margin-right:auto}.wp-block-image :where(figcaption){margin-bottom:1em;margin-top:.5em}.wp-block-image.is-style-circle-mask img{border-radius:9999px}@supports ((-webkit-mask-image:none) or (mask-image:none)) or (-webkit-mask-image:none){.wp-block-image.is-style-circle-mask img{border-radius:0;-webkit-mask-image:url('data:image/svg+xml;utf8,<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"><circle cx="50" cy="50" r="50"/></svg>');mask-image:url('data:image/svg+xml;utf8,<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"><circle cx="50" cy="50" r="50"/></svg>');mask-mode:alpha;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain}}:root :where(.wp-block-image.is-style-rounded img,.wp-block-image .is-style-rounded img){border-radius:9999px}.wp-block-image figure{margin:0}.wp-lightbox-container{display:flex;flex-direction:column;position:relative}.wp-lightbox-container img{cursor:zoom-in}.wp-lightbox-container img:hover+button{opacity:1}.wp-lightbox-container button{align-items:center;backdrop-filter:blur(16px) saturate(180%);background-color:#5a5a5a40;border:none;border-radius:4px;cursor:zoom-in;display:flex;height:20px;justify-content:center;opacity:0;padding:0;position:absolute;right:16px;text-align:center;top:16px;width:20px;z-index:100}@media not (prefers-reduced-motion){.wp-lightbox-container button{transition:opacity .2s ease}}.wp-lightbox-container button:focus-visible{outline:3px auto #5a5a5a40;outline:3px auto -webkit-focus-ring-color;outline-offset:3px}.wp-lightbox-container button:hover{cursor:pointer;opacity:1}.wp-lightbox-container button:focus{opacity:1}.wp-lightbox-container button:focus,.wp-lightbox-container button:hover,.wp-lightbox-container button:not(:hover):not(:active):not(.has-background){background-color:#5a5a5a40;border:none}.wp-lightbox-overlay{box-sizing:border-box;cursor:zoom-out;height:100vh;left:0;overflow:hidden;position:fixed;top:0;visibility:hidden;width:100%;z-index:100000}.wp-lightbox-overlay .close-button{align-items:center;cursor:pointer;display:flex;justify-content:center;min-height:40px;min-width:40px;padding:0;position:absolute;right:calc(env(safe-area-inset-right) + 16px);top:calc(env(safe-area-inset-top) + 16px);z-index:5000000}.wp-lightbox-overlay .close-button:focus,.wp-lightbox-overlay .close-button:hover,.wp-lightbox-overlay .close-button:not(:hover):not(:active):not(.has-background){background:none;border:none}.wp-lightbox-overlay .lightbox-image-container{height:var(--wp--lightbox-container-height);left:50%;overflow:hidden;position:absolute;top:50%;transform:translate(-50%,-50%);transform-origin:top left;width:var(--wp--lightbox-container-width);z-index:9999999999}.wp-lightbox-overlay .wp-block-image{align-items:center;box-sizing:border-box;display:flex;height:100%;justify-content:center;margin:0;position:relative;transform-origin:0 0;width:100%;z-index:3000000}.wp-lightbox-overlay .wp-block-image img{height:var(--wp--lightbox-image-height);min-height:var(--wp--lightbox-image-height);min-width:var(--wp--lightbox-image-width);width:var(--wp--lightbox-image-width)}.wp-lightbox-overlay .wp-block-image figcaption{display:none}.wp-lightbox-overlay button{background:none;border:none}.wp-lightbox-overlay .scrim{background-color:#fff;height:100%;opacity:.9;position:absolute;width:100%;z-index:2000000}.wp-lightbox-overlay.active{visibility:visible}@media not (prefers-reduced-motion){.wp-lightbox-overlay.active{animation:turn-on-visibility .25s both}.wp-lightbox-overlay.active img{animation:turn-on-visibility .35s both}.wp-lightbox-overlay.show-closing-animation:not(.active){animation:turn-off-visibility .35s both}.wp-lightbox-overlay.show-closing-animation:not(.active) img{animation:turn-off-visibility .25s both}.wp-lightbox-overlay.zoom.active{animation:none;opacity:1;visibility:visible}.wp-lightbox-overlay.zoom.active .lightbox-image-container{animation:lightbox-zoom-in .4s}.wp-lightbox-overlay.zoom.active .lightbox-image-container img{animation:none}.wp-lightbox-overlay.zoom.active .scrim{animation:turn-on-visibility .4s forwards}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active){animation:none}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .lightbox-image-container{animation:lightbox-zoom-out .4s}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .lightbox-image-container img{animation:none}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .scrim{animation:turn-off-visibility .4s forwards}}@keyframes show-content-image{0%{visibility:hidden}99%{visibility:hidden}to{visibility:visible}}@keyframes turn-on-visibility{0%{opacity:0}to{opacity:1}}@keyframes turn-off-visibility{0%{opacity:1;visibility:visible}99%{opacity:0;visibility:visible}to{opacity:0;visibility:hidden}}@keyframes lightbox-zoom-in{0%{transform:translate(calc((-100vw + var(--wp--lightbox-scrollbar-width))/2 + var(--wp--lightbox-initial-left-position)),calc(-50vh + var(--wp--lightbox-initial-top-position))) scale(var(--wp--lightbox-scale))}to{transform:translate(-50%,-50%) scale(1)}}@keyframes lightbox-zoom-out{0%{transform:translate(-50%,-50%) scale(1);visibility:visible}99%{visibility:visible}to{transform:translate(calc((-100vw + var(--wp--lightbox-scrollbar-width))/2 + var(--wp--lightbox-initial-left-position)),calc(-50vh + var(--wp--lightbox-initial-top-position))) scale(var(--wp--lightbox-scale));visibility:hidden}}ol.wp-block-latest-comments{box-sizing:border-box;margin-left:0}:where(.wp-block-latest-comments:not([style*=line-height] .wp-block-latest-comments__comment)){line-height:1.1}:where(.wp-block-latest-comments:not([style*=line-height] .wp-block-latest-comments__comment-excerpt p)){line-height:1.8}.has-dates :where(.wp-block-latest-comments:not([style*=line-height])),.has-excerpts :where(.wp-block-latest-comments:not([style*=line-height])){line-height:1.5}.wp-block-latest-comments .wp-block-latest-comments{padding-left:0}.wp-block-latest-comments__comment{list-style:none;margin-bottom:1em}.has-avatars .wp-block-latest-comments__comment{list-style:none;min-height:2.25em}.has-avatars .wp-block-latest-comments__comment .wp-block-latest-comments__comment-excerpt,.has-avatars .wp-block-latest-comments__comment .wp-block-latest-comments__comment-meta{margin-left:3.25em}.wp-block-latest-comments__comment-excerpt p{font-size:.875em;margin:.36em 0 1.4em}.wp-block-latest-comments__comment-date{display:block;font-size:.75em}.wp-block-latest-comments .avatar,.wp-block-latest-comments__comment-avatar{border-radius:1.5em;display:block;float:left;height:2.5em;margin-right:.75em;width:2.5em}.wp-block-latest-comments[class*=-font-size] a,.wp-block-latest-comments[style*=font-size] a{font-size:inherit}.wp-block-latest-posts{box-sizing:border-box}.wp-block-latest-posts.alignleft{margin-right:2em}.wp-block-latest-posts.alignright{margin-left:2em}.wp-block-latest-posts.wp-block-latest-posts__list{list-style:none}.wp-block-latest-posts.wp-block-latest-posts__list li{clear:both;overflow-wrap:break-word}.wp-block-latest-posts.is-grid{display:flex;flex-wrap:wrap}.wp-block-latest-posts.is-grid li{margin:0 1.25em 1.25em 0;width:100%}@media (min-width:600px){.wp-block-latest-posts.columns-2 li{width:calc(50% - .625em)}.wp-block-latest-posts.columns-2 li:nth-child(2n){margin-right:0}.wp-block-latest-posts.columns-3 li{width:calc(33.33333% - .83333em)}.wp-block-latest-posts.columns-3 li:nth-child(3n){margin-right:0}.wp-block-latest-posts.columns-4 li{width:calc(25% - .9375em)}.wp-block-latest-posts.columns-4 li:nth-child(4n){margin-right:0}.wp-block-latest-posts.columns-5 li{width:calc(20% - 1em)}.wp-block-latest-posts.columns-5 li:nth-child(5n){margin-right:0}.wp-block-latest-posts.columns-6 li{width:calc(16.66667% - 1.04167em)}.wp-block-latest-posts.columns-6 li:nth-child(6n){margin-right:0}}:root :where(.wp-block-latest-posts.is-grid){padding:0}:root :where(.wp-block-latest-posts.wp-block-latest-posts__list){padding-left:0}.wp-block-latest-posts__post-author,.wp-block-latest-posts__post-date{display:block;font-size:.8125em}.wp-block-latest-posts__post-excerpt,.wp-block-latest-posts__post-full-content{margin-bottom:1em;margin-top:.5em}.wp-block-latest-posts__featured-image a{display:inline-block}.wp-block-latest-posts__featured-image img{height:auto;max-width:100%;width:auto}.wp-block-latest-posts__featured-image.alignleft{float:left;margin-right:1em}.wp-block-latest-posts__featured-image.alignright{float:right;margin-left:1em}.wp-block-latest-posts__featured-image.aligncenter{margin-bottom:1em;text-align:center}ol,ul{box-sizing:border-box}:root :where(.wp-block-list.has-background){padding:1.25em 2.375em}.wp-block-loginout{box-sizing:border-box}.wp-block-math{overflow-x:auto;overflow-y:hidden}.wp-block-media-text{box-sizing:border-box;/*!rtl:begin:ignore*/direction:ltr;/*!rtl:end:ignore*/display:grid;grid-template-columns:50% 1fr;grid-template-rows:auto}.wp-block-media-text.has-media-on-the-right{grid-template-columns:1fr 50%}.wp-block-media-text.is-vertically-aligned-top>.wp-block-media-text__content,.wp-block-media-text.is-vertically-aligned-top>.wp-block-media-text__media{align-self:start}.wp-block-media-text.is-vertically-aligned-center>.wp-block-media-text__content,.wp-block-media-text.is-vertically-aligned-center>.wp-block-media-text__media,.wp-block-media-text>.wp-block-media-text__content,.wp-block-media-text>.wp-block-media-text__media{align-self:center}.wp-block-media-text.is-vertically-aligned-bottom>.wp-block-media-text__content,.wp-block-media-text.is-vertically-aligned-bottom>.wp-block-media-text__media{align-self:end}.wp-block-media-text>.wp-block-media-text__media{/*!rtl:begin:ignore*/grid-column:1;grid-row:1;/*!rtl:end:ignore*/margin:0}.wp-block-media-text>.wp-block-media-text__content{direction:ltr;/*!rtl:begin:ignore*/grid-column:2;grid-row:1;/*!rtl:end:ignore*/padding:0 8%;word-break:break-word}.wp-block-media-text.has-media-on-the-right>.wp-block-media-text__media{/*!rtl:begin:ignore*/grid-column:2;grid-row:1 /*!rtl:end:ignore*/}.wp-block-media-text.has-media-on-the-right>.wp-block-media-text__content{/*!rtl:begin:ignore*/grid-column:1;grid-row:1 /*!rtl:end:ignore*/}.wp-block-media-text__media a{display:block}.wp-block-media-text__media img,.wp-block-media-text__media video{height:auto;max-width:unset;vertical-align:middle;width:100%}.wp-block-media-text.is-image-fill>.wp-block-media-text__media{background-size:cover;height:100%;min-height:250px}.wp-block-media-text.is-image-fill>.wp-block-media-text__media>a{display:block;height:100%}.wp-block-media-text.is-image-fill>.wp-block-media-text__media img{height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;clip:rect(0,0,0,0);border:0}.wp-block-media-text.is-image-fill-element>.wp-block-media-text__media{height:100%;min-height:250px;position:relative}.wp-block-media-text.is-image-fill-element>.wp-block-media-text__media>a{display:block;height:100%}.wp-block-media-text.is-image-fill-element>.wp-block-media-text__media img{height:100%;object-fit:cover;position:absolute;width:100%}@media (max-width:600px){.wp-block-media-text.is-stacked-on-mobile{grid-template-columns:100%!important}.wp-block-media-text.is-stacked-on-mobile>.wp-block-media-text__media{grid-column:1;grid-row:1}.wp-block-media-text.is-stacked-on-mobile>.wp-block-media-text__content{grid-column:1;grid-row:2}}.wp-block-navigation{position:relative}.wp-block-navigation ul{margin-bottom:0;margin-left:0;margin-top:0;padding-left:0}.wp-block-navigation ul,.wp-block-navigation ul li{list-style:none;padding:0}.wp-block-navigation .wp-block-navigation-item{align-items:center;display:flex;position:relative}.wp-block-navigation .wp-block-navigation-item .wp-block-navigation__submenu-container:empty{display:none}.wp-block-navigation .wp-block-navigation-item__content{display:block;z-index:1}.wp-block-navigation .wp-block-navigation-item__content.wp-block-navigation-item__content{color:inherit}.wp-block-navigation.has-text-decoration-underline .wp-block-navigation-item__content,.wp-block-navigation.has-text-decoration-underline .wp-block-navigation-item__content:active,.wp-block-navigation.has-text-decoration-underline .wp-block-navigation-item__content:focus{text-decoration:underline}.wp-block-navigation.has-text-decoration-line-through .wp-block-navigation-item__content,.wp-block-navigation.has-text-decoration-line-through .wp-block-navigation-item__content:active,.wp-block-navigation.has-text-decoration-line-through .wp-block-navigation-item__content:focus{text-decoration:line-through}.wp-block-navigation :where(a),.wp-block-navigation :where(a:active),.wp-block-navigation :where(a:focus){text-decoration:none}.wp-block-navigation .wp-block-navigation__submenu-icon{align-self:center;background-color:inherit;border:none;color:currentColor;display:inline-block;font-size:inherit;height:.6em;line-height:0;margin-left:.25em;padding:0;width:.6em}.wp-block-navigation .wp-block-navigation__submenu-icon svg{display:inline-block;stroke:currentColor;height:inherit;margin-top:.075em;width:inherit}.wp-block-navigation{--navigation-layout-justification-setting:flex-start;--navigation-layout-direction:row;--navigation-layout-wrap:wrap;--navigation-layout-justify:flex-start;--navigation-layout-align:center}.wp-block-navigation.is-vertical{--navigation-layout-direction:column;--navigation-layout-justify:initial;--navigation-layout-align:flex-start}.wp-block-navigation.no-wrap{--navigation-layout-wrap:nowrap}.wp-block-navigation.items-justified-center{--navigation-layout-justification-setting:center;--navigation-layout-justify:center}.wp-block-navigation.items-justified-center.is-vertical{--navigation-layout-align:center}.wp-block-navigation.items-justified-right{--navigation-layout-justification-setting:flex-end;--navigation-layout-justify:flex-end}.wp-block-navigation.items-justified-right.is-vertical{--navigation-layout-align:flex-end}.wp-block-navigation.items-justified-space-between{--navigation-layout-justification-setting:space-between;--navigation-layout-justify:space-between}.wp-block-navigation .has-child .wp-block-navigation__submenu-container{align-items:normal;background-color:inherit;color:inherit;display:flex;flex-direction:column;opacity:0;position:absolute;z-index:2}@media not (prefers-reduced-motion){.wp-block-navigation .has-child .wp-block-navigation__submenu-container{transition:opacity .1s linear}}.wp-block-navigation .has-child .wp-block-navigation__submenu-container{height:0;overflow:hidden;visibility:hidden;width:0}.wp-block-navigation .has-child .wp-block-navigation__submenu-container>.wp-block-navigation-item>.wp-block-navigation-item__content{display:flex;flex-grow:1;padding:.5em 1em}.wp-block-navigation .has-child .wp-block-navigation__submenu-container>.wp-block-navigation-item>.wp-block-navigation-item__content .wp-block-navigation__submenu-icon{margin-left:auto;margin-right:0}.wp-block-navigation .has-child .wp-block-navigation__submenu-container .wp-block-navigation-item__content{margin:0}.wp-block-navigation .has-child .wp-block-navigation__submenu-container{left:-1px;top:100%}@media (min-width:782px){.wp-block-navigation .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container{left:100%;top:-1px}.wp-block-navigation .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container:before{background:#0000;content:"";display:block;height:100%;position:absolute;right:100%;width:.5em}.wp-block-navigation .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-icon{margin-right:.25em}.wp-block-navigation .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-icon svg{transform:rotate(-90deg)}}.wp-block-navigation .has-child .wp-block-navigation-submenu__toggle[aria-expanded=true]~.wp-block-navigation__submenu-container,.wp-block-navigation .has-child:not(.open-on-click):hover>.wp-block-navigation__submenu-container,.wp-block-navigation .has-child:not(.open-on-click):not(.open-on-hover-click):focus-within>.wp-block-navigation__submenu-container{height:auto;min-width:200px;opacity:1;overflow:visible;visibility:visible;width:auto}.wp-block-navigation.has-background .has-child .wp-block-navigation__submenu-container{left:0;top:100%}@media (min-width:782px){.wp-block-navigation.has-background .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container{left:100%;top:0}}.wp-block-navigation-submenu{display:flex;position:relative}.wp-block-navigation-submenu .wp-block-navigation__submenu-icon svg{stroke:currentColor}button.wp-block-navigation-item__content{background-color:initial;border:none;color:currentColor;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;text-align:left;text-transform:inherit}.wp-block-navigation-submenu__toggle{cursor:pointer}.wp-block-navigation-submenu__toggle[aria-expanded=true]+.wp-block-navigation__submenu-icon>svg,.wp-block-navigation-submenu__toggle[aria-expanded=true]>svg{transform:rotate(180deg)}.wp-block-navigation-item.open-on-click .wp-block-navigation-submenu__toggle{padding-left:0;padding-right:.85em}.wp-block-navigation-item.open-on-click .wp-block-navigation-submenu__toggle+.wp-block-navigation__submenu-icon{margin-left:-.6em;pointer-events:none}.wp-block-navigation-item.open-on-click button.wp-block-navigation-item__content:not(.wp-block-navigation-submenu__toggle){padding:0}.wp-block-navigation .wp-block-page-list,.wp-block-navigation__container,.wp-block-navigation__responsive-close,.wp-block-navigation__responsive-container,.wp-block-navigation__responsive-container-content,.wp-block-navigation__responsive-dialog{gap:inherit}:where(.wp-block-navigation.has-background .wp-block-navigation-item a:not(.wp-element-button)),:where(.wp-block-navigation.has-background .wp-block-navigation-submenu a:not(.wp-element-button)){padding:.5em 1em}:where(.wp-block-navigation .wp-block-navigation__submenu-container .wp-block-navigation-item a:not(.wp-element-button)),:where(.wp-block-navigation .wp-block-navigation__submenu-container .wp-block-navigation-submenu a:not(.wp-element-button)),:where(.wp-block-navigation .wp-block-navigation__submenu-container .wp-block-navigation-submenu button.wp-block-navigation-item__content),:where(.wp-block-navigation .wp-block-navigation__submenu-container .wp-block-pages-list__item button.wp-block-navigation-item__content){padding:.5em 1em}.wp-block-navigation.items-justified-right .wp-block-navigation__container .has-child .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-right .wp-block-page-list>.has-child .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-space-between .wp-block-page-list>.has-child:last-child .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-space-between>.wp-block-navigation__container>.has-child:last-child .wp-block-navigation__submenu-container{left:auto;right:0}.wp-block-navigation.items-justified-right .wp-block-navigation__container .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-right .wp-block-page-list>.has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-space-between .wp-block-page-list>.has-child:last-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-space-between>.wp-block-navigation__container>.has-child:last-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container{left:-1px;right:-1px}@media (min-width:782px){.wp-block-navigation.items-justified-right .wp-block-navigation__container .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-right .wp-block-page-list>.has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-space-between .wp-block-page-list>.has-child:last-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-space-between>.wp-block-navigation__container>.has-child:last-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container{left:auto;right:100%}}.wp-block-navigation:not(.has-background) .wp-block-navigation__submenu-container{background-color:#fff;border:1px solid #00000026}.wp-block-navigation.has-background .wp-block-navigation__submenu-container{background-color:inherit}.wp-block-navigation:not(.has-text-color) .wp-block-navigation__submenu-container{color:#000}.wp-block-navigation__container{align-items:var(--navigation-layout-align,initial);display:flex;flex-direction:var(--navigation-layout-direction,initial);flex-wrap:var(--navigation-layout-wrap,wrap);justify-content:var(--navigation-layout-justify,initial);list-style:none;margin:0;padding-left:0}.wp-block-navigation__container .is-responsive{display:none}.wp-block-navigation__container:only-child,.wp-block-page-list:only-child{flex-grow:1}@keyframes overlay-menu__fade-in-animation{0%{opacity:0;transform:translateY(.5em)}to{opacity:1;transform:translateY(0)}}.wp-block-navigation__responsive-container{bottom:0;display:none;left:0;position:fixed;right:0;top:0}.wp-block-navigation__responsive-container :where(.wp-block-navigation-item a){color:inherit}.wp-block-navigation__responsive-container .wp-block-navigation__responsive-container-content{align-items:var(--navigation-layout-align,initial);display:flex;flex-direction:var(--navigation-layout-direction,initial);flex-wrap:var(--navigation-layout-wrap,wrap);justify-content:var(--navigation-layout-justify,initial)}.wp-block-navigation__responsive-container:not(.is-menu-open.is-menu-open){background-color:inherit!important;color:inherit!important}.wp-block-navigation__responsive-container.is-menu-open{background-color:inherit;display:flex;flex-direction:column}@media not (prefers-reduced-motion){.wp-block-navigation__responsive-container.is-menu-open{animation:overlay-menu__fade-in-animation .1s ease-out;animation-fill-mode:forwards}}.wp-block-navigation__responsive-container.is-menu-open{overflow:auto;padding:clamp(1rem,var(--wp--style--root--padding-top),20rem) clamp(1rem,var(--wp--style--root--padding-right),20rem) clamp(1rem,var(--wp--style--root--padding-bottom),20rem) clamp(1rem,var(--wp--style--root--padding-left),20rem);z-index:100000}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content{align-items:var(--navigation-layout-justification-setting,inherit);display:flex;flex-direction:column;flex-wrap:nowrap;overflow:visible;padding-top:calc(2rem + 24px)}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation__container,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-page-list{justify-content:flex-start}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation__submenu-icon{display:none}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .has-child .wp-block-navigation__submenu-container{border:none;height:auto;min-width:200px;opacity:1;overflow:initial;padding-left:2rem;padding-right:2rem;position:static;visibility:visible;width:auto}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation__container,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation__submenu-container{gap:inherit}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation__submenu-container{padding-top:var(--wp--style--block-gap,2em)}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation-item__content{padding:0}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation-item,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation__container,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-page-list{align-items:var(--navigation-layout-justification-setting,initial);display:flex;flex-direction:column}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation-item,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation-item .wp-block-navigation__submenu-container,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__container,.wp-block-navigation__responsive-container.is-menu-open .wp-block-page-list{background:#0000!important;color:inherit!important}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__submenu-container.wp-block-navigation__submenu-container.wp-block-navigation__submenu-container.wp-block-navigation__submenu-container{left:auto;right:auto}@media (min-width:600px){.wp-block-navigation__responsive-container:not(.hidden-by-default):not(.is-menu-open){background-color:inherit;display:block;position:relative;width:100%;z-index:auto}.wp-block-navigation__responsive-container:not(.hidden-by-default):not(.is-menu-open) .wp-block-navigation__responsive-container-close{display:none}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__submenu-container.wp-block-navigation__submenu-container.wp-block-navigation__submenu-container.wp-block-navigation__submenu-container{left:0}}.wp-block-navigation:not(.has-background) .wp-block-navigation__responsive-container.is-menu-open{background-color:#fff}.wp-block-navigation:not(.has-text-color) .wp-block-navigation__responsive-container.is-menu-open{color:#000}.wp-block-navigation__toggle_button_label{font-size:1rem;font-weight:700}.wp-block-navigation__responsive-container-close,.wp-block-navigation__responsive-container-open{background:#0000;border:none;color:currentColor;cursor:pointer;margin:0;padding:0;text-transform:inherit;vertical-align:middle}.wp-block-navigation__responsive-container-close svg,.wp-block-navigation__responsive-container-open svg{fill:currentColor;display:block;height:24px;pointer-events:none;width:24px}.wp-block-navigation__responsive-container-open{display:flex}.wp-block-navigation__responsive-container-open.wp-block-navigation__responsive-container-open.wp-block-navigation__responsive-container-open{font-family:inherit;font-size:inherit;font-weight:inherit}@media (min-width:600px){.wp-block-navigation__responsive-container-open:not(.always-shown){display:none}}.wp-block-navigation__responsive-container-close{position:absolute;right:0;top:0;z-index:2}.wp-block-navigation__responsive-container-close.wp-block-navigation__responsive-container-close.wp-block-navigation__responsive-container-close{font-family:inherit;font-size:inherit;font-weight:inherit}.wp-block-navigation__responsive-close{width:100%}.has-modal-open .wp-block-navigation__responsive-close{margin-left:auto;margin-right:auto;max-width:var(--wp--style--global--wide-size,100%)}.wp-block-navigation__responsive-close:focus{outline:none}.is-menu-open .wp-block-navigation__responsive-close,.is-menu-open .wp-block-navigation__responsive-container-content,.is-menu-open .wp-block-navigation__responsive-dialog{box-sizing:border-box}.wp-block-navigation__responsive-dialog{position:relative}.has-modal-open .admin-bar .is-menu-open .wp-block-navigation__responsive-dialog{margin-top:46px}@media (min-width:782px){.has-modal-open .admin-bar .is-menu-open .wp-block-navigation__responsive-dialog{margin-top:32px}}html.has-modal-open{overflow:hidden}.wp-block-navigation .wp-block-navigation-item__label{overflow-wrap:break-word}.wp-block-navigation .wp-block-navigation-item__description{display:none}.link-ui-tools{outline:1px solid #f0f0f0;padding:8px}.link-ui-block-inserter{padding-top:8px}.link-ui-block-inserter__back{margin-left:8px;text-transform:uppercase}.wp-block-navigation .wp-block-page-list{align-items:var(--navigation-layout-align,initial);background-color:inherit;display:flex;flex-direction:var(--navigation-layout-direction,initial);flex-wrap:var(--navigation-layout-wrap,wrap);justify-content:var(--navigation-layout-justify,initial)}.wp-block-navigation .wp-block-navigation-item{background-color:inherit}.wp-block-page-list{box-sizing:border-box}.is-small-text{font-size:.875em}.is-regular-text{font-size:1em}.is-large-text{font-size:2.25em}.is-larger-text{font-size:3em}.has-drop-cap:not(:focus):first-letter{float:left;font-size:8.4em;font-style:normal;font-weight:100;line-height:.68;margin:.05em .1em 0 0;text-transform:uppercase}body.rtl .has-drop-cap:not(:focus):first-letter{float:none;margin-left:.1em}p.has-drop-cap.has-background{overflow:hidden}:root :where(p.has-background){padding:1.25em 2.375em}:where(p.has-text-color:not(.has-link-color)) a{color:inherit}p.has-text-align-left[style*="writing-mode:vertical-lr"],p.has-text-align-right[style*="writing-mode:vertical-rl"]{rotate:180deg}.wp-block-post-author{box-sizing:border-box;display:flex;flex-wrap:wrap}.wp-block-post-author__byline{font-size:.5em;margin-bottom:0;margin-top:0;width:100%}.wp-block-post-author__avatar{margin-right:1em}.wp-block-post-author__bio{font-size:.7em;margin-bottom:.7em}.wp-block-post-author__content{flex-basis:0%;flex-grow:1}.wp-block-post-author__name{margin:0}.wp-block-post-author-biography{box-sizing:border-box}:where(.wp-block-post-comments-form input:not([type=submit])),:where(.wp-block-post-comments-form textarea){border:1px solid #949494;font-family:inherit;font-size:1em}:where(.wp-block-post-comments-form input:where(:not([type=submit]):not([type=checkbox]))),:where(.wp-block-post-comments-form textarea){padding:calc(.667em + 2px)}.wp-block-post-comments-form{box-sizing:border-box}.wp-block-post-comments-form[style*=font-weight] :where(.comment-reply-title){font-weight:inherit}.wp-block-post-comments-form[style*=font-family] :where(.comment-reply-title){font-family:inherit}.wp-block-post-comments-form[class*=-font-size] :where(.comment-reply-title),.wp-block-post-comments-form[style*=font-size] :where(.comment-reply-title){font-size:inherit}.wp-block-post-comments-form[style*=line-height] :where(.comment-reply-title){line-height:inherit}.wp-block-post-comments-form[style*=font-style] :where(.comment-reply-title){font-style:inherit}.wp-block-post-comments-form[style*=letter-spacing] :where(.comment-reply-title){letter-spacing:inherit}.wp-block-post-comments-form :where(input[type=submit]){box-shadow:none;cursor:pointer;display:inline-block;overflow-wrap:break-word;text-align:center}.wp-block-post-comments-form .comment-form input:not([type=submit]):not([type=checkbox]):not([type=hidden]),.wp-block-post-comments-form .comment-form textarea{box-sizing:border-box;display:block;width:100%}.wp-block-post-comments-form .comment-form-author label,.wp-block-post-comments-form .comment-form-email label,.wp-block-post-comments-form .comment-form-url label{display:block;margin-bottom:.25em}.wp-block-post-comments-form .comment-form-cookies-consent{display:flex;gap:.25em}.wp-block-post-comments-form .comment-form-cookies-consent #wp-comment-cookies-consent{margin-top:.35em}.wp-block-post-comments-form .comment-reply-title{margin-bottom:0}.wp-block-post-comments-form .comment-reply-title :where(small){font-size:var(--wp--preset--font-size--medium,smaller);margin-left:.5em}.wp-block-post-comments-count{box-sizing:border-box}.wp-block-post-content{display:flow-root}.wp-block-post-comments-link,.wp-block-post-date{box-sizing:border-box}:where(.wp-block-post-excerpt){box-sizing:border-box;margin-bottom:var(--wp--style--block-gap);margin-top:var(--wp--style--block-gap)}.wp-block-post-excerpt__excerpt{margin-bottom:0;margin-top:0}.wp-block-post-excerpt__more-text{margin-bottom:0;margin-top:var(--wp--style--block-gap)}.wp-block-post-excerpt__more-link{display:inline-block}.wp-block-post-featured-image{margin-left:0;margin-right:0}.wp-block-post-featured-image a{display:block;height:100%}.wp-block-post-featured-image :where(img){box-sizing:border-box;height:auto;max-width:100%;vertical-align:bottom;width:100%}.wp-block-post-featured-image.alignfull img,.wp-block-post-featured-image.alignwide img{width:100%}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim{background-color:#000;inset:0;position:absolute}.wp-block-post-featured-image{position:relative}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-gradient{background-color:initial}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-0{opacity:0}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-10{opacity:.1}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-20{opacity:.2}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-30{opacity:.3}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-40{opacity:.4}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-50{opacity:.5}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-60{opacity:.6}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-70{opacity:.7}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-80{opacity:.8}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-90{opacity:.9}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-100{opacity:1}.wp-block-post-featured-image:where(.alignleft,.alignright){width:100%}.wp-block-post-navigation-link .wp-block-post-navigation-link__arrow-previous{display:inline-block;margin-right:1ch}.wp-block-post-navigation-link .wp-block-post-navigation-link__arrow-previous:not(.is-arrow-chevron){transform:scaleX(1)}.wp-block-post-navigation-link .wp-block-post-navigation-link__arrow-next{display:inline-block;margin-left:1ch}.wp-block-post-navigation-link .wp-block-post-navigation-link__arrow-next:not(.is-arrow-chevron){transform:scaleX(1)}.wp-block-post-navigation-link.has-text-align-left[style*="writing-mode: vertical-lr"],.wp-block-post-navigation-link.has-text-align-right[style*="writing-mode: vertical-rl"]{rotate:180deg}.wp-block-post-terms{box-sizing:border-box}.wp-block-post-terms .wp-block-post-terms__separator{white-space:pre-wrap}.wp-block-post-time-to-read,.wp-block-post-title{box-sizing:border-box}.wp-block-post-title{word-break:break-word}.wp-block-post-title :where(a){display:inline-block;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;text-decoration:inherit}.wp-block-post-author-name{box-sizing:border-box}.wp-block-preformatted{box-sizing:border-box;white-space:pre-wrap}:where(.wp-block-preformatted.has-background){padding:1.25em 2.375em}.wp-block-pullquote{box-sizing:border-box;margin:0 0 1em;overflow-wrap:break-word;padding:4em 0;text-align:center}.wp-block-pullquote blockquote,.wp-block-pullquote p{color:inherit}.wp-block-pullquote blockquote{margin:0}.wp-block-pullquote p{margin-top:0}.wp-block-pullquote p:last-child{margin-bottom:0}.wp-block-pullquote.alignleft,.wp-block-pullquote.alignright{max-width:420px}.wp-block-pullquote cite,.wp-block-pullquote footer{position:relative}.wp-block-pullquote .has-text-color a{color:inherit}.wp-block-pullquote.has-text-align-left blockquote{text-align:left}.wp-block-pullquote.has-text-align-right blockquote{text-align:right}.wp-block-pullquote.has-text-align-center blockquote{text-align:center}.wp-block-pullquote.is-style-solid-color{border:none}.wp-block-pullquote.is-style-solid-color blockquote{margin-left:auto;margin-right:auto;max-width:60%}.wp-block-pullquote.is-style-solid-color blockquote p{font-size:2em;margin-bottom:0;margin-top:0}.wp-block-pullquote.is-style-solid-color blockquote cite{font-style:normal;text-transform:none}.wp-block-pullquote :where(cite){color:inherit;display:block}.wp-block-post-template{box-sizing:border-box;list-style:none;margin-bottom:0;margin-top:0;max-width:100%;padding:0}.wp-block-post-template.is-flex-container{display:flex;flex-direction:row;flex-wrap:wrap;gap:1.25em}.wp-block-post-template.is-flex-container>li{margin:0;width:100%}@media (min-width:600px){.wp-block-post-template.is-flex-container.is-flex-container.columns-2>li{width:calc(50% - .625em)}.wp-block-post-template.is-flex-container.is-flex-container.columns-3>li{width:calc(33.33333% - .83333em)}.wp-block-post-template.is-flex-container.is-flex-container.columns-4>li{width:calc(25% - .9375em)}.wp-block-post-template.is-flex-container.is-flex-container.columns-5>li{width:calc(20% - 1em)}.wp-block-post-template.is-flex-container.is-flex-container.columns-6>li{width:calc(16.66667% - 1.04167em)}}@media (max-width:600px){.wp-block-post-template-is-layout-grid.wp-block-post-template-is-layout-grid.wp-block-post-template-is-layout-grid.wp-block-post-template-is-layout-grid{grid-template-columns:1fr}}.wp-block-post-template-is-layout-constrained>li>.alignright,.wp-block-post-template-is-layout-flow>li>.alignright{float:right;margin-inline-end:0;margin-inline-start:2em}.wp-block-post-template-is-layout-constrained>li>.alignleft,.wp-block-post-template-is-layout-flow>li>.alignleft{float:left;margin-inline-end:2em;margin-inline-start:0}.wp-block-post-template-is-layout-constrained>li>.aligncenter,.wp-block-post-template-is-layout-flow>li>.aligncenter{margin-inline-end:auto;margin-inline-start:auto}.wp-block-query-pagination.is-content-justification-space-between>.wp-block-query-pagination-next:last-of-type{margin-inline-start:auto}.wp-block-query-pagination.is-content-justification-space-between>.wp-block-query-pagination-previous:first-child{margin-inline-end:auto}.wp-block-query-pagination .wp-block-query-pagination-previous-arrow{display:inline-block;margin-right:1ch}.wp-block-query-pagination .wp-block-query-pagination-previous-arrow:not(.is-arrow-chevron){transform:scaleX(1)}.wp-block-query-pagination .wp-block-query-pagination-next-arrow{display:inline-block;margin-left:1ch}.wp-block-query-pagination .wp-block-query-pagination-next-arrow:not(.is-arrow-chevron){transform:scaleX(1)}.wp-block-query-pagination.aligncenter{justify-content:center}.wp-block-query-title,.wp-block-query-total,.wp-block-quote{box-sizing:border-box}.wp-block-quote{overflow-wrap:break-word}.wp-block-quote.is-large:where(:not(.is-style-plain)),.wp-block-quote.is-style-large:where(:not(.is-style-plain)){margin-bottom:1em;padding:0 1em}.wp-block-quote.is-large:where(:not(.is-style-plain)) p,.wp-block-quote.is-style-large:where(:not(.is-style-plain)) p{font-size:1.5em;font-style:italic;line-height:1.6}.wp-block-quote.is-large:where(:not(.is-style-plain)) cite,.wp-block-quote.is-large:where(:not(.is-style-plain)) footer,.wp-block-quote.is-style-large:where(:not(.is-style-plain)) cite,.wp-block-quote.is-style-large:where(:not(.is-style-plain)) footer{font-size:1.125em;text-align:right}.wp-block-quote>cite{display:block}.wp-block-read-more{display:block;width:fit-content}.wp-block-read-more:where(:not([style*=text-decoration])){text-decoration:none}.wp-block-read-more:where(:not([style*=text-decoration])):active,.wp-block-read-more:where(:not([style*=text-decoration])):focus{text-decoration:none}ul.wp-block-rss.alignleft{margin-right:2em}ul.wp-block-rss.alignright{margin-left:2em}ul.wp-block-rss.is-grid{display:flex;flex-wrap:wrap;padding:0}ul.wp-block-rss.is-grid li{margin:0 1em 1em 0;width:100%}@media (min-width:600px){ul.wp-block-rss.columns-2 li{width:calc(50% - 1em)}ul.wp-block-rss.columns-3 li{width:calc(33.33333% - 1em)}ul.wp-block-rss.columns-4 li{width:calc(25% - 1em)}ul.wp-block-rss.columns-5 li{width:calc(20% - 1em)}ul.wp-block-rss.columns-6 li{width:calc(16.66667% - 1em)}}.wp-block-rss__item-author,.wp-block-rss__item-publish-date{display:block;font-size:.8125em}.wp-block-rss{box-sizing:border-box;list-style:none;padding:0}.wp-block-search__button{margin-left:10px;word-break:normal}.wp-block-search__button.has-icon{line-height:0}.wp-block-search__button svg{height:1.25em;min-height:24px;min-width:24px;width:1.25em;fill:currentColor;vertical-align:text-bottom}:where(.wp-block-search__button){border:1px solid #ccc;padding:6px 10px}.wp-block-search__inside-wrapper{display:flex;flex:auto;flex-wrap:nowrap;max-width:100%}.wp-block-search__label{width:100%}.wp-block-search.wp-block-search__button-only .wp-block-search__button{box-sizing:border-box;display:flex;flex-shrink:0;justify-content:center;margin-left:0;max-width:100%}.wp-block-search.wp-block-search__button-only .wp-block-search__inside-wrapper{min-width:0!important;transition-property:width}.wp-block-search.wp-block-search__button-only .wp-block-search__input{flex-basis:100%;transition-duration:.3s}.wp-block-search.wp-block-search__button-only.wp-block-search__searchfield-hidden,.wp-block-search.wp-block-search__button-only.wp-block-search__searchfield-hidden .wp-block-search__inside-wrapper{overflow:hidden}.wp-block-search.wp-block-search__button-only.wp-block-search__searchfield-hidden .wp-block-search__input{border-left-width:0!important;border-right-width:0!important;flex-basis:0%;flex-grow:0;margin:0;min-width:0!important;padding-left:0!important;padding-right:0!important;width:0!important}:where(.wp-block-search__input){appearance:none;border:1px solid #949494;flex-grow:1;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin-left:0;margin-right:0;min-width:3rem;padding:8px;text-decoration:unset!important;text-transform:inherit}:where(.wp-block-search__button-inside .wp-block-search__inside-wrapper){background-color:#fff;border:1px solid #949494;box-sizing:border-box;padding:4px}:where(.wp-block-search__button-inside .wp-block-search__inside-wrapper) .wp-block-search__input{border:none;border-radius:0;padding:0 4px}:where(.wp-block-search__button-inside .wp-block-search__inside-wrapper) .wp-block-search__input:focus{outline:none}:where(.wp-block-search__button-inside .wp-block-search__inside-wrapper) :where(.wp-block-search__button){padding:4px 8px}.wp-block-search.aligncenter .wp-block-search__inside-wrapper{margin:auto}.wp-block[data-align=right] .wp-block-search.wp-block-search__button-only .wp-block-search__inside-wrapper{float:right}.wp-block-separator{border:none;border-top:2px solid}:root :where(.wp-block-separator.is-style-dots){height:auto;line-height:1;text-align:center}:root :where(.wp-block-separator.is-style-dots):before{color:currentColor;content:"···";font-family:serif;font-size:1.5em;letter-spacing:2em;padding-left:2em}.wp-block-separator.is-style-dots{background:none!important;border:none!important}.wp-block-site-logo{box-sizing:border-box;line-height:0}.wp-block-site-logo a{display:inline-block;line-height:0}.wp-block-site-logo.is-default-size img{height:auto;width:120px}.wp-block-site-logo img{height:auto;max-width:100%}.wp-block-site-logo a,.wp-block-site-logo img{border-radius:inherit}.wp-block-site-logo.aligncenter{margin-left:auto;margin-right:auto;text-align:center}:root :where(.wp-block-site-logo.is-style-rounded){border-radius:9999px}.wp-block-site-tagline,.wp-block-site-title{box-sizing:border-box}.wp-block-site-title :where(a){color:inherit;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;text-decoration:inherit}.wp-block-social-links{background:none;box-sizing:border-box;margin-left:0;padding-left:0;padding-right:0;text-indent:0}.wp-block-social-links .wp-social-link a,.wp-block-social-links .wp-social-link a:hover{border-bottom:0;box-shadow:none;text-decoration:none}.wp-block-social-links .wp-social-link svg{height:1em;width:1em}.wp-block-social-links .wp-social-link span:not(.screen-reader-text){font-size:.65em;margin-left:.5em;margin-right:.5em}.wp-block-social-links.has-small-icon-size{font-size:16px}.wp-block-social-links,.wp-block-social-links.has-normal-icon-size{font-size:24px}.wp-block-social-links.has-large-icon-size{font-size:36px}.wp-block-social-links.has-huge-icon-size{font-size:48px}.wp-block-social-links.aligncenter{display:flex;justify-content:center}.wp-block-social-links.alignright{justify-content:flex-end}.wp-block-social-link{border-radius:9999px;display:block}@media not (prefers-reduced-motion){.wp-block-social-link{transition:transform .1s ease}}.wp-block-social-link{height:auto}.wp-block-social-link a{align-items:center;display:flex;line-height:0}.wp-block-social-link:hover{transform:scale(1.1)}.wp-block-social-links .wp-block-social-link.wp-social-link{display:inline-block;margin:0;padding:0}.wp-block-social-links .wp-block-social-link.wp-social-link .wp-block-social-link-anchor,.wp-block-social-links .wp-block-social-link.wp-social-link .wp-block-social-link-anchor svg,.wp-block-social-links .wp-block-social-link.wp-social-link .wp-block-social-link-anchor:active,.wp-block-social-links .wp-block-social-link.wp-social-link .wp-block-social-link-anchor:hover,.wp-block-social-links .wp-block-social-link.wp-social-link .wp-block-social-link-anchor:visited{color:currentColor;fill:currentColor}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link{background-color:#f0f0f0;color:#444}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-amazon{background-color:#f90;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-bandcamp{background-color:#1ea0c3;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-behance{background-color:#0757fe;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-bluesky{background-color:#0a7aff;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-codepen{background-color:#1e1f26;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-deviantart{background-color:#02e49b;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-discord{background-color:#5865f2;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-dribbble{background-color:#e94c89;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-dropbox{background-color:#4280ff;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-etsy{background-color:#f45800;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-facebook{background-color:#0866ff;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-fivehundredpx{background-color:#000;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-flickr{background-color:#0461dd;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-foursquare{background-color:#e65678;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-github{background-color:#24292d;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-goodreads{background-color:#eceadd;color:#382110}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-google{background-color:#ea4434;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-gravatar{background-color:#1d4fc4;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-instagram{background-color:#f00075;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-lastfm{background-color:#e21b24;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-linkedin{background-color:#0d66c2;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-mastodon{background-color:#3288d4;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-medium{background-color:#000;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-meetup{background-color:#f6405f;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-patreon{background-color:#000;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-pinterest{background-color:#e60122;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-pocket{background-color:#ef4155;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-reddit{background-color:#ff4500;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-skype{background-color:#0478d7;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-snapchat{background-color:#fefc00;color:#fff;stroke:#000}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-soundcloud{background-color:#ff5600;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-spotify{background-color:#1bd760;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-telegram{background-color:#2aabee;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-threads{background-color:#000;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-tiktok{background-color:#000;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-tumblr{background-color:#011835;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-twitch{background-color:#6440a4;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-twitter{background-color:#1da1f2;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-vimeo{background-color:#1eb7ea;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-vk{background-color:#4680c2;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-wordpress{background-color:#3499cd;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-whatsapp{background-color:#25d366;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-x{background-color:#000;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-yelp{background-color:#d32422;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-youtube{background-color:red;color:#fff}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link{background:none}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link svg{height:1.25em;width:1.25em}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-amazon{color:#f90}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-bandcamp{color:#1ea0c3}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-behance{color:#0757fe}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-bluesky{color:#0a7aff}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-codepen{color:#1e1f26}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-deviantart{color:#02e49b}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-discord{color:#5865f2}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-dribbble{color:#e94c89}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-dropbox{color:#4280ff}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-etsy{color:#f45800}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-facebook{color:#0866ff}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-fivehundredpx{color:#000}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-flickr{color:#0461dd}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-foursquare{color:#e65678}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-github{color:#24292d}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-goodreads{color:#382110}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-google{color:#ea4434}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-gravatar{color:#1d4fc4}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-instagram{color:#f00075}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-lastfm{color:#e21b24}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-linkedin{color:#0d66c2}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-mastodon{color:#3288d4}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-medium{color:#000}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-meetup{color:#f6405f}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-patreon{color:#000}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-pinterest{color:#e60122}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-pocket{color:#ef4155}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-reddit{color:#ff4500}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-skype{color:#0478d7}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-snapchat{color:#fff;stroke:#000}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-soundcloud{color:#ff5600}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-spotify{color:#1bd760}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-telegram{color:#2aabee}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-threads{color:#000}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-tiktok{color:#000}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-tumblr{color:#011835}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-twitch{color:#6440a4}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-twitter{color:#1da1f2}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-vimeo{color:#1eb7ea}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-vk{color:#4680c2}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-whatsapp{color:#25d366}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-wordpress{color:#3499cd}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-x{color:#000}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-yelp{color:#d32422}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-youtube{color:red}.wp-block-social-links.is-style-pill-shape .wp-social-link{width:auto}:root :where(.wp-block-social-links .wp-social-link a){padding:.25em}:root :where(.wp-block-social-links.is-style-logos-only .wp-social-link a){padding:0}:root :where(.wp-block-social-links.is-style-pill-shape .wp-social-link a){padding-left:.6666666667em;padding-right:.6666666667em}.wp-block-social-links:not(.has-icon-color):not(.has-icon-background-color) .wp-social-link-snapchat .wp-block-social-link-label{color:#000}.wp-block-spacer{clear:both}.wp-block-tag-cloud{box-sizing:border-box}.wp-block-tag-cloud.aligncenter{justify-content:center;text-align:center}.wp-block-tag-cloud a{display:inline-block;margin-right:5px}.wp-block-tag-cloud span{display:inline-block;margin-left:5px;text-decoration:none}:root :where(.wp-block-tag-cloud.is-style-outline){display:flex;flex-wrap:wrap;gap:1ch}:root :where(.wp-block-tag-cloud.is-style-outline a){border:1px solid;font-size:unset!important;margin-right:0;padding:1ch 2ch;text-decoration:none!important}.wp-block-table{overflow-x:auto}.wp-block-table table{border-collapse:collapse;width:100%}.wp-block-table thead{border-bottom:3px solid}.wp-block-table tfoot{border-top:3px solid}.wp-block-table td,.wp-block-table th{border:1px solid;padding:.5em}.wp-block-table .has-fixed-layout{table-layout:fixed;width:100%}.wp-block-table .has-fixed-layout td,.wp-block-table .has-fixed-layout th{word-break:break-word}.wp-block-table.aligncenter,.wp-block-table.alignleft,.wp-block-table.alignright{display:table;width:auto}.wp-block-table.aligncenter td,.wp-block-table.aligncenter th,.wp-block-table.alignleft td,.wp-block-table.alignleft th,.wp-block-table.alignright td,.wp-block-table.alignright th{word-break:break-word}.wp-block-table .has-subtle-light-gray-background-color{background-color:#f3f4f5}.wp-block-table .has-subtle-pale-green-background-color{background-color:#e9fbe5}.wp-block-table .has-subtle-pale-blue-background-color{background-color:#e7f5fe}.wp-block-table .has-subtle-pale-pink-background-color{background-color:#fcf0ef}.wp-block-table.is-style-stripes{background-color:initial;border-collapse:inherit;border-spacing:0}.wp-block-table.is-style-stripes tbody tr:nth-child(odd){background-color:#f0f0f0}.wp-block-table.is-style-stripes.has-subtle-light-gray-background-color tbody tr:nth-child(odd){background-color:#f3f4f5}.wp-block-table.is-style-stripes.has-subtle-pale-green-background-color tbody tr:nth-child(odd){background-color:#e9fbe5}.wp-block-table.is-style-stripes.has-subtle-pale-blue-background-color tbody tr:nth-child(odd){background-color:#e7f5fe}.wp-block-table.is-style-stripes.has-subtle-pale-pink-background-color tbody tr:nth-child(odd){background-color:#fcf0ef}.wp-block-table.is-style-stripes td,.wp-block-table.is-style-stripes th{border-color:#0000}.wp-block-table.is-style-stripes{border-bottom:1px solid #f0f0f0}.wp-block-table .has-border-color td,.wp-block-table .has-border-color th,.wp-block-table .has-border-color tr,.wp-block-table .has-border-color>*{border-color:inherit}.wp-block-table table[style*=border-top-color] tr:first-child,.wp-block-table table[style*=border-top-color] tr:first-child td,.wp-block-table table[style*=border-top-color] tr:first-child th,.wp-block-table table[style*=border-top-color]>*,.wp-block-table table[style*=border-top-color]>* td,.wp-block-table table[style*=border-top-color]>* th{border-top-color:inherit}.wp-block-table table[style*=border-top-color] tr:not(:first-child){border-top-color:initial}.wp-block-table table[style*=border-right-color] td:last-child,.wp-block-table table[style*=border-right-color] th,.wp-block-table table[style*=border-right-color] tr,.wp-block-table table[style*=border-right-color]>*{border-right-color:inherit}.wp-block-table table[style*=border-bottom-color] tr:last-child,.wp-block-table table[style*=border-bottom-color] tr:last-child td,.wp-block-table table[style*=border-bottom-color] tr:last-child th,.wp-block-table table[style*=border-bottom-color]>*,.wp-block-table table[style*=border-bottom-color]>* td,.wp-block-table table[style*=border-bottom-color]>* th{border-bottom-color:inherit}.wp-block-table table[style*=border-bottom-color] tr:not(:last-child){border-bottom-color:initial}.wp-block-table table[style*=border-left-color] td:first-child,.wp-block-table table[style*=border-left-color] th,.wp-block-table table[style*=border-left-color] tr,.wp-block-table table[style*=border-left-color]>*{border-left-color:inherit}.wp-block-table table[style*=border-style] td,.wp-block-table table[style*=border-style] th,.wp-block-table table[style*=border-style] tr,.wp-block-table table[style*=border-style]>*{border-style:inherit}.wp-block-table table[style*=border-width] td,.wp-block-table table[style*=border-width] th,.wp-block-table table[style*=border-width] tr,.wp-block-table table[style*=border-width]>*{border-style:inherit;border-width:inherit}:root :where(.wp-block-table-of-contents){box-sizing:border-box}.wp-block-term-count{box-sizing:border-box}:where(.wp-block-term-description){box-sizing:border-box;margin-bottom:var(--wp--style--block-gap);margin-top:var(--wp--style--block-gap)}.wp-block-term-description p{margin-bottom:0;margin-top:0}.wp-block-term-name{box-sizing:border-box}.wp-block-term-template{box-sizing:border-box;list-style:none;margin-bottom:0;margin-top:0;max-width:100%;padding:0}.wp-block-text-columns,.wp-block-text-columns.aligncenter{display:flex}.wp-block-text-columns .wp-block-column{margin:0 1em;padding:0}.wp-block-text-columns .wp-block-column:first-child{margin-left:0}.wp-block-text-columns .wp-block-column:last-child{margin-right:0}.wp-block-text-columns.columns-2 .wp-block-column{width:50%}.wp-block-text-columns.columns-3 .wp-block-column{width:33.3333333333%}.wp-block-text-columns.columns-4 .wp-block-column{width:25%}pre.wp-block-verse{overflow:auto;white-space:pre-wrap}:where(pre.wp-block-verse){font-family:inherit}.wp-block-video{box-sizing:border-box}.wp-block-video video{height:auto;vertical-align:middle;width:100%}@supports (position:sticky){.wp-block-video [poster]{object-fit:cover}}.wp-block-video.aligncenter{text-align:center}.wp-block-video :where(figcaption){margin-bottom:1em;margin-top:.5em}.editor-styles-wrapper,.entry-content{counter-reset:footnotes}a[data-fn].fn{counter-increment:footnotes;display:inline-flex;font-size:smaller;text-decoration:none;text-indent:-9999999px;vertical-align:super}a[data-fn].fn:after{content:"[" counter(footnotes) "]";float:left;text-indent:0}:root{--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color);--wp-editor-canvas-background:#ddd;--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,160.5;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.wp-element-button{cursor:pointer}:root .has-very-light-gray-background-color{background-color:#eee}:root .has-very-dark-gray-background-color{background-color:#313131}:root .has-very-light-gray-color{color:#eee}:root .has-very-dark-gray-color{color:#313131}:root .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{background:linear-gradient(135deg,#00d084,#0693e3)}:root .has-purple-crush-gradient-background{background:linear-gradient(135deg,#34e2e4,#4721fb 50%,#ab1dfe)}:root .has-hazy-dawn-gradient-background{background:linear-gradient(135deg,#faaca8,#dad0ec)}:root .has-subdued-olive-gradient-background{background:linear-gradient(135deg,#fafae1,#67a671)}:root .has-atomic-cream-gradient-background{background:linear-gradient(135deg,#fdd79a,#004a59)}:root .has-nightshade-gradient-background{background:linear-gradient(135deg,#330968,#31cdcf)}:root .has-midnight-gradient-background{background:linear-gradient(135deg,#020381,#2874fc)}:root{--wp--preset--font-size--normal:16px;--wp--preset--font-size--huge:42px}.has-regular-font-size{font-size:1em}.has-larger-font-size{font-size:2.625em}.has-normal-font-size{font-size:var(--wp--preset--font-size--normal)}.has-huge-font-size{font-size:var(--wp--preset--font-size--huge)}.has-text-align-center{text-align:center}.has-text-align-left{text-align:left}.has-text-align-right{text-align:right}.has-fit-text{white-space:nowrap!important}#end-resizable-editor-section{display:none}.aligncenter{clear:both}.items-justified-left{justify-content:flex-start}.items-justified-center{justify-content:center}.items-justified-right{justify-content:flex-end}.items-justified-space-between{justify-content:space-between}.screen-reader-text{border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-wrap:normal!important}.screen-reader-text:focus{background-color:#ddd;clip-path:none;color:#444;display:block;font-size:1em;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}html :where(.has-border-color){border-style:solid}html :where([style*=border-top-color]){border-top-style:solid}html :where([style*=border-right-color]){border-right-style:solid}html :where([style*=border-bottom-color]){border-bottom-style:solid}html :where([style*=border-left-color]){border-left-style:solid}html :where([style*=border-width]){border-style:solid}html :where([style*=border-top-width]){border-top-style:solid}html :where([style*=border-right-width]){border-right-style:solid}html :where([style*=border-bottom-width]){border-bottom-style:solid}html :where([style*=border-left-width]){border-left-style:solid}html :where(img[class*=wp-image-]){height:auto;max-width:100%}:where(figure){margin:0 0 1em}html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:var(--wp-admin--admin-bar--height,0)}@media screen and (max-width:600px){html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:0}}/*!
 * Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com
 * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
 * Copyright 2024 Fonticons, Inc.
 */
:host,:root{--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Free";--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Free";--fa-font-light:normal 300 1em/1 "Font Awesome 6 Pro";--fa-font-thin:normal 100 1em/1 "Font Awesome 6 Pro";--fa-font-duotone:normal 900 1em/1 "Font Awesome 6 Duotone";--fa-font-duotone-regular:normal 400 1em/1 "Font Awesome 6 Duotone";--fa-font-duotone-light:normal 300 1em/1 "Font Awesome 6 Duotone";--fa-font-duotone-thin:normal 100 1em/1 "Font Awesome 6 Duotone";--fa-font-brands:normal 400 1em/1 "Font Awesome 6 Brands";--fa-font-sharp-solid:normal 900 1em/1 "Font Awesome 6 Sharp";--fa-font-sharp-regular:normal 400 1em/1 "Font Awesome 6 Sharp";--fa-font-sharp-light:normal 300 1em/1 "Font Awesome 6 Sharp";--fa-font-sharp-thin:normal 100 1em/1 "Font Awesome 6 Sharp";--fa-font-sharp-duotone-solid:normal 900 1em/1 "Font Awesome 6 Sharp Duotone";--fa-font-sharp-duotone-regular:normal 400 1em/1 "Font Awesome 6 Sharp Duotone";--fa-font-sharp-duotone-light:normal 300 1em/1 "Font Awesome 6 Sharp Duotone";--fa-font-sharp-duotone-thin:normal 100 1em/1 "Font Awesome 6 Sharp Duotone"}svg.svg-inline--fa:not(:host),svg.svg-inline--fa:not(:root){overflow:visible;box-sizing:initial}.svg-inline--fa{display:var(--fa-display,inline-block);height:1em;overflow:visible;vertical-align:-.125em}.svg-inline--fa.fa-2xs{vertical-align:.1em}.svg-inline--fa.fa-xs{vertical-align:0}.svg-inline--fa.fa-sm{vertical-align:-.07143em}.svg-inline--fa.fa-lg{vertical-align:-.2em}.svg-inline--fa.fa-xl{vertical-align:-.25em}.svg-inline--fa.fa-2xl{vertical-align:-.3125em}.svg-inline--fa.fa-pull-left{margin-right:var(--fa-pull-margin,.3em);width:auto}.svg-inline--fa.fa-pull-right{margin-left:var(--fa-pull-margin,.3em);width:auto}.svg-inline--fa.fa-li{width:var(--fa-li-width,2em);top:.25em}.svg-inline--fa.fa-fw{width:var(--fa-fw-width,1.25em)}.fa-layers svg.svg-inline--fa{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0}.fa-layers-counter,.fa-layers-text{display:inline-block;position:absolute;text-align:center}.fa-layers{display:inline-block;height:1em;position:relative;text-align:center;vertical-align:-.125em;width:1em}.fa-layers svg.svg-inline--fa{transform-origin:center center}.fa-layers-text{left:50%;top:50%;transform:translate(-50%,-50%);transform-origin:center center}.fa-layers-counter{background-color:var(--fa-counter-background-color,#ff253a);border-radius:var(--fa-counter-border-radius,1em);box-sizing:border-box;color:var(--fa-inverse,#fff);line-height:var(--fa-counter-line-height,1);max-width:var(--fa-counter-max-width,5em);min-width:var(--fa-counter-min-width,1.5em);overflow:hidden;padding:var(--fa-counter-padding,.25em .5em);right:var(--fa-right,0);text-overflow:ellipsis;top:var(--fa-top,0);transform:scale(var(--fa-counter-scale,.25));transform-origin:top right}.fa-layers-bottom-right{bottom:var(--fa-bottom,0);right:var(--fa-right,0);top:auto;transform:scale(var(--fa-layers-scale,.25));transform-origin:bottom right}.fa-layers-bottom-left{bottom:var(--fa-bottom,0);left:var(--fa-left,0);right:auto;top:auto;transform:scale(var(--fa-layers-scale,.25));transform-origin:bottom left}.fa-layers-top-right{top:var(--fa-top,0);right:var(--fa-right,0);transform:scale(var(--fa-layers-scale,.25));transform-origin:top right}.fa-layers-top-left{left:var(--fa-left,0);right:auto;top:var(--fa-top,0);transform:scale(var(--fa-layers-scale,.25));transform-origin:top left}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.08333em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.07143em;vertical-align:.05357em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.04167em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin,2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(var(--fa-li-width, 2em)*-1);position:absolute;text-align:center;width:var(--fa-li-width,2em);line-height:inherit}.fa-border{border-radius:var(--fa-border-radius,.1em);border:var(--fa-border-width,.08em) var(--fa-border-style,solid) var(--fa-border-color,#eee);padding:var(--fa-border-padding,.2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin,.3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin,.3em)}.fa-beat{animation-name:fa-beat;animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-bounce{animation-name:fa-bounce;animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1))}.fa-fade{animation-name:fa-fade;animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-beat-fade,.fa-fade{animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s)}.fa-beat-fade{animation-name:fa-beat-fade;animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-flip{animation-name:fa-flip;animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-shake{animation-name:fa-shake;animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,linear)}.fa-shake,.fa-spin{animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal)}.fa-spin{animation-name:fa-spin;animation-duration:var(--fa-animation-duration,2s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin-reverse{--fa-animation-direction:reverse}.fa-pulse,.fa-spin-pulse{animation-name:fa-spin;animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,steps(8))}@media (prefers-reduced-motion:reduce){.fa-beat,.fa-beat-fade,.fa-bounce,.fa-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{animation-delay:-1ms;animation-duration:1ms;animation-iteration-count:1;transition-delay:0s;transition-duration:0s}}@keyframes fa-beat{0%,90%{transform:scale(1)}45%{transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-bounce{0%{transform:scale(1) translateY(0)}10%{transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{transform:scale(1) translateY(0)}to{transform:scale(1) translateY(0)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);transform:scale(1)}50%{opacity:1;transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-flip{50%{transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes fa-shake{0%{transform:rotate(-15deg)}4%{transform:rotate(15deg)}8%,24%{transform:rotate(-18deg)}12%,28%{transform:rotate(18deg)}16%{transform:rotate(-22deg)}20%{transform:rotate(22deg)}32%{transform:rotate(-12deg)}36%{transform:rotate(12deg)}40%,to{transform:rotate(0deg)}}@keyframes fa-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.fa-rotate-90{transform:rotate(90deg)}.fa-rotate-180{transform:rotate(180deg)}.fa-rotate-270{transform:rotate(270deg)}.fa-flip-horizontal{transform:scaleX(-1)}.fa-flip-vertical{transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1)}.fa-rotate-by{transform:rotate(var(--fa-rotate-angle,0))}.fa-stack{display:inline-block;vertical-align:middle;height:2em;position:relative;width:2.5em}.fa-stack-1x,.fa-stack-2x{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0;z-index:var(--fa-stack-z-index,auto)}.svg-inline--fa.fa-stack-1x{height:1em;width:1.25em}.svg-inline--fa.fa-stack-2x{height:2em;width:2.5em}.fa-inverse{color:var(--fa-inverse,#fff)}.fa-sr-only,.fa-sr-only-focusable:not(:focus),.sr-only,.sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.svg-inline--fa .fa-primary{fill:var(--fa-primary-color,currentColor);opacity:var(--fa-primary-opacity,1)}.svg-inline--fa .fa-secondary{fill:var(--fa-secondary-color,currentColor)}.svg-inline--fa .fa-secondary,.svg-inline--fa.fa-swap-opacity .fa-primary{opacity:var(--fa-secondary-opacity,.4)}.svg-inline--fa.fa-swap-opacity .fa-secondary{opacity:var(--fa-primary-opacity,1)}.svg-inline--fa mask .fa-primary,.svg-inline--fa mask .fa-secondary{fill:#000}.wp-block-font-awesome-icon svg::before,.wp-rich-text-font-awesome-icon svg::before{content:unset}.lazyload{opacity:0.25.2;transition:opacity 0.3s ease-in-out}.lazyloaded{opacity:1}.lazyload.fade-in{opacity:.25;transition:opacity 0.6s ease-in-out}.lazyload.fade-in.lazyloaded{opacity:1}.lazyload.slide-bottom{opacity:.25;transform:translateY(30px);transition:opacity 0.6s ease-in-out,transform 0.6s ease-in-out}.lazyload.slide-bottom.lazyloaded{opacity:1;transform:translateY(0)}.lazyload.slide-right{opacity:.25;transform:translateX(30px);transition:opacity 0.6s ease-in-out,transform 0.6s ease-in-out}.lazyload.slide-right.lazyloaded{opacity:1;transform:translateX(0)}.lazyload.slide-left{opacity:.25;transform:translateX(-30px);transition:opacity 0.6s ease-in-out,transform 0.6s ease-in-out}.lazyload.slide-left.lazyloaded{opacity:1;transform:translateX(0)}.lazyload-bg.lazyloaded{opacity:1}.lazyload-bg.fade-in{opacity:.25;transition:opacity 0.6s ease-in-out}.lazyload-bg.fade-in.lazyloaded{opacity:1}.lazyload-bg.slide-bottom{opacity:.25;transform:translateY(30px);transition:opacity 0.6s ease-in-out,transform 0.6s ease-in-out}.lazyload-bg.slide-bottom.lazyloaded{opacity:1;transform:translateY(0)}.lazyload-bg.slide-right{opacity:.25;transform:translateX(30px);transition:opacity 0.6s ease-in-out,transform 0.6s ease-in-out}.lazyload-bg.slide-right.lazyloaded{opacity:1;transform:translateX(0)}.lazyload-bg.slide-left{opacity:.25;transform:translateX(-30px);transition:opacity 0.6s ease-in-out,transform 0.6s ease-in-out}.lazyload-bg.slide-left.lazyloaded{opacity:1;transform:translateX(0)}@import url(https://fonts.googleapis.com/css2?family=Outfit:wght@100..900&display=swap);@import url(https://klizos.com/wp-content/plugins/wpai-plugin-new/build/\\"https://fonts.googleapis.com/css2?family=Outfit:wght@100..900&display=swap\\);(()=>{var __webpack_modules__={41:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   Rk: () => (/* binding */ getRegisteredStyles),\n/* harmony export */   SF: () => (/* binding */ registerStyles),\n/* harmony export */   sk: () => (/* binding */ insertStyles)\n/* harmony export */ });\nvar isBrowser = true;\n\nfunction getRegisteredStyles(registered, registeredStyles, classNames) {\n  var rawClassName = '';\n  classNames.split(' ').forEach(function (className) {\n    if (registered[className] !== undefined) {\n      registeredStyles.push(registered[className] + \";\");\n    } else if (className) {\n      rawClassName += className + \" \";\n    }\n  });\n  return rawClassName;\n}\nvar registerStyles = function registerStyles(cache, serialized, isStringTag) {\n  var className = cache.key + \"-\" + serialized.name;\n\n  if ( // we only need to add the styles to the registered cache if the\n  // class name could be used further down\n  // the tree but if it's a string tag, we know it won't\n  // so we don't have to add it to registered cache.\n  // this improves memory usage since we can avoid storing the whole style string\n  (isStringTag === false || // we need to always store it if we're in compat mode and\n  // in node since emotion-server relies on whether a style is in\n  // the registered cache to know whether a style is global or not\n  // also, note that this check will be dead code eliminated in the browser\n  isBrowser === false ) && cache.registered[className] === undefined) {\n    cache.registered[className] = serialized.styles;\n  }\n};\nvar insertStyles = function insertStyles(cache, serialized, isStringTag) {\n  registerStyles(cache, serialized, isStringTag);\n  var className = cache.key + \"-\" + serialized.name;\n\n  if (cache.inserted[serialized.name] === undefined) {\n    var current = serialized;\n\n    do {\n      cache.insert(serialized === current ? \".\" + className : '', current, cache.sheet, true);\n\n      current = current.next;\n    } while (current !== undefined);\n  }\n};\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDEuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNEQUFzRDtBQUN0RCxNQUFNO0FBQ047QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFNkQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi91dGlscy9kaXN0L2Vtb3Rpb24tdXRpbHMuYnJvd3Nlci5lc20uanM/Nzk1NCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaXNCcm93c2VyID0gdHJ1ZTtcblxuZnVuY3Rpb24gZ2V0UmVnaXN0ZXJlZFN0eWxlcyhyZWdpc3RlcmVkLCByZWdpc3RlcmVkU3R5bGVzLCBjbGFzc05hbWVzKSB7XG4gIHZhciByYXdDbGFzc05hbWUgPSAnJztcbiAgY2xhc3NOYW1lcy5zcGxpdCgnICcpLmZvckVhY2goZnVuY3Rpb24gKGNsYXNzTmFtZSkge1xuICAgIGlmIChyZWdpc3RlcmVkW2NsYXNzTmFtZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVnaXN0ZXJlZFN0eWxlcy5wdXNoKHJlZ2lzdGVyZWRbY2xhc3NOYW1lXSArIFwiO1wiKTtcbiAgICB9IGVsc2UgaWYgKGNsYXNzTmFtZSkge1xuICAgICAgcmF3Q2xhc3NOYW1lICs9IGNsYXNzTmFtZSArIFwiIFwiO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByYXdDbGFzc05hbWU7XG59XG52YXIgcmVnaXN0ZXJTdHlsZXMgPSBmdW5jdGlvbiByZWdpc3RlclN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IGNhY2hlLmtleSArIFwiLVwiICsgc2VyaWFsaXplZC5uYW1lO1xuXG4gIGlmICggLy8gd2Ugb25seSBuZWVkIHRvIGFkZCB0aGUgc3R5bGVzIHRvIHRoZSByZWdpc3RlcmVkIGNhY2hlIGlmIHRoZVxuICAvLyBjbGFzcyBuYW1lIGNvdWxkIGJlIHVzZWQgZnVydGhlciBkb3duXG4gIC8vIHRoZSB0cmVlIGJ1dCBpZiBpdCdzIGEgc3RyaW5nIHRhZywgd2Uga25vdyBpdCB3b24ndFxuICAvLyBzbyB3ZSBkb24ndCBoYXZlIHRvIGFkZCBpdCB0byByZWdpc3RlcmVkIGNhY2hlLlxuICAvLyB0aGlzIGltcHJvdmVzIG1lbW9yeSB1c2FnZSBzaW5jZSB3ZSBjYW4gYXZvaWQgc3RvcmluZyB0aGUgd2hvbGUgc3R5bGUgc3RyaW5nXG4gIChpc1N0cmluZ1RhZyA9PT0gZmFsc2UgfHwgLy8gd2UgbmVlZCB0byBhbHdheXMgc3RvcmUgaXQgaWYgd2UncmUgaW4gY29tcGF0IG1vZGUgYW5kXG4gIC8vIGluIG5vZGUgc2luY2UgZW1vdGlvbi1zZXJ2ZXIgcmVsaWVzIG9uIHdoZXRoZXIgYSBzdHlsZSBpcyBpblxuICAvLyB0aGUgcmVnaXN0ZXJlZCBjYWNoZSB0byBrbm93IHdoZXRoZXIgYSBzdHlsZSBpcyBnbG9iYWwgb3Igbm90XG4gIC8vIGFsc28sIG5vdGUgdGhhdCB0aGlzIGNoZWNrIHdpbGwgYmUgZGVhZCBjb2RlIGVsaW1pbmF0ZWQgaW4gdGhlIGJyb3dzZXJcbiAgaXNCcm93c2VyID09PSBmYWxzZSApICYmIGNhY2hlLnJlZ2lzdGVyZWRbY2xhc3NOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY2FjaGUucmVnaXN0ZXJlZFtjbGFzc05hbWVdID0gc2VyaWFsaXplZC5zdHlsZXM7XG4gIH1cbn07XG52YXIgaW5zZXJ0U3R5bGVzID0gZnVuY3Rpb24gaW5zZXJ0U3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZykge1xuICByZWdpc3RlclN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpO1xuICB2YXIgY2xhc3NOYW1lID0gY2FjaGUua2V5ICsgXCItXCIgKyBzZXJpYWxpemVkLm5hbWU7XG5cbiAgaWYgKGNhY2hlLmluc2VydGVkW3NlcmlhbGl6ZWQubmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBjdXJyZW50ID0gc2VyaWFsaXplZDtcblxuICAgIGRvIHtcbiAgICAgIGNhY2hlLmluc2VydChzZXJpYWxpemVkID09PSBjdXJyZW50ID8gXCIuXCIgKyBjbGFzc05hbWUgOiAnJywgY3VycmVudCwgY2FjaGUuc2hlZXQsIHRydWUpO1xuXG4gICAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0O1xuICAgIH0gd2hpbGUgKGN1cnJlbnQgIT09IHVuZGVmaW5lZCk7XG4gIH1cbn07XG5cbmV4cG9ydCB7IGdldFJlZ2lzdGVyZWRTdHlsZXMsIGluc2VydFN0eWxlcywgcmVnaXN0ZXJTdHlsZXMgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///41\n")},443:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval('var __webpack_unused_export__;\n\n"use client";\n\nvar _interopRequireDefault = __webpack_require__(4994);\n__webpack_unused_export__ = ({\n  value: true\n});\nexports.A = void 0;\nvar _createSvgIcon = _interopRequireDefault(__webpack_require__(2032));\nvar _jsxRuntime = __webpack_require__(4848);\nvar _default = exports.A = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)("path", {\n  d: "M2.01 21 23 12 2.01 3 2 10l15 2-15 2z"\n}), \'Send\');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDQzLmpzIiwibWFwcGluZ3MiOiI7QUFBYTtBQUNiOztBQUVBLDZCQUE2QixtQkFBTyxDQUFDLElBQThDO0FBQ25GLDZCQUE2QztBQUM3QztBQUNBLENBQUMsQ0FBQztBQUNGLFNBQWU7QUFDZiw0Q0FBNEMsbUJBQU8sQ0FBQyxJQUF1QjtBQUMzRSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFtQjtBQUM3QyxlQUFlLFNBQWU7QUFDOUI7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9pY29ucy1tYXRlcmlhbC9TZW5kLmpzPzViYzAiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cInVzZSBjbGllbnRcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xudmFyIF9jcmVhdGVTdmdJY29uID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi91dGlscy9jcmVhdGVTdmdJY29uXCIpKTtcbnZhciBfanN4UnVudGltZSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9ICgwLCBfY3JlYXRlU3ZnSWNvbi5kZWZhdWx0KSggLyojX19QVVJFX18qLygwLCBfanN4UnVudGltZS5qc3gpKFwicGF0aFwiLCB7XG4gIGQ6IFwiTTIuMDEgMjEgMjMgMTIgMi4wMSAzIDIgMTBsMTUgMi0xNSAyelwiXG59KSwgJ1NlbmQnKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///443\n')},530:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval('var __webpack_unused_export__;\n\n"use client";\n\nvar _interopRequireDefault = __webpack_require__(4994);\n__webpack_unused_export__ = ({\n  value: true\n});\nexports.A = void 0;\nvar _createSvgIcon = _interopRequireDefault(__webpack_require__(2032));\nvar _jsxRuntime = __webpack_require__(4848);\nvar _default = exports.A = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)("path", {\n  d: "M16.5 6v11.5c0 2.21-1.79 4-4 4s-4-1.79-4-4V5c0-1.38 1.12-2.5 2.5-2.5s2.5 1.12 2.5 2.5v10.5c0 .55-.45 1-1 1s-1-.45-1-1V6H10v9.5c0 1.38 1.12 2.5 2.5 2.5s2.5-1.12 2.5-2.5V5c0-2.21-1.79-4-4-4S7 2.79 7 5v12.5c0 3.04 2.46 5.5 5.5 5.5s5.5-2.46 5.5-5.5V6z"\n}), \'AttachFile\');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTMwLmpzIiwibWFwcGluZ3MiOiI7QUFBYTtBQUNiOztBQUVBLDZCQUE2QixtQkFBTyxDQUFDLElBQThDO0FBQ25GLDZCQUE2QztBQUM3QztBQUNBLENBQUMsQ0FBQztBQUNGLFNBQWU7QUFDZiw0Q0FBNEMsbUJBQU8sQ0FBQyxJQUF1QjtBQUMzRSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFtQjtBQUM3QyxlQUFlLFNBQWU7QUFDOUI7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9pY29ucy1tYXRlcmlhbC9BdHRhY2hGaWxlLmpzP2FhZTAiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cInVzZSBjbGllbnRcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xudmFyIF9jcmVhdGVTdmdJY29uID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi91dGlscy9jcmVhdGVTdmdJY29uXCIpKTtcbnZhciBfanN4UnVudGltZSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9ICgwLCBfY3JlYXRlU3ZnSWNvbi5kZWZhdWx0KSggLyojX19QVVJFX18qLygwLCBfanN4UnVudGltZS5qc3gpKFwicGF0aFwiLCB7XG4gIGQ6IFwiTTE2LjUgNnYxMS41YzAgMi4yMS0xLjc5IDQtNCA0cy00LTEuNzktNC00VjVjMC0xLjM4IDEuMTItMi41IDIuNS0yLjVzMi41IDEuMTIgMi41IDIuNXYxMC41YzAgLjU1LS40NSAxLTEgMXMtMS0uNDUtMS0xVjZIMTB2OS41YzAgMS4zOCAxLjEyIDIuNSAyLjUgMi41czIuNS0xLjEyIDIuNS0yLjVWNWMwLTIuMjEtMS43OS00LTQtNFM3IDIuNzkgNyA1djEyLjVjMCAzLjA0IDIuNDYgNS41IDUuNSA1LjVzNS41LTIuNDYgNS41LTUuNVY2elwiXG59KSwgJ0F0dGFjaEZpbGUnKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///530\n')},540:module=>{"use strict";eval('\n\n/* istanbul ignore next  */\nfunction insertStyleElement(options) {\n  var element = document.createElement("style");\n  options.setAttributes(element, options.attributes);\n  options.insert(element, options.options);\n  return element;\n}\nmodule.exports = insertStyleElement;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQwLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydFN0eWxlRWxlbWVudC5qcz9kZTZjIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIGluc2VydFN0eWxlRWxlbWVudChvcHRpb25zKSB7XG4gIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuICBvcHRpb25zLnNldEF0dHJpYnV0ZXMoZWxlbWVudCwgb3B0aW9ucy5hdHRyaWJ1dGVzKTtcbiAgb3B0aW9ucy5pbnNlcnQoZWxlbWVudCwgb3B0aW9ucy5vcHRpb25zKTtcbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG5tb2R1bGUuZXhwb3J0cyA9IGluc2VydFN0eWxlRWxlbWVudDsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///540\n')},561:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   A: () => (/* binding */ createSvgIcon)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(8168);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1594);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _SvgIcon__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5765);\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4848);\n\'use client\';\n\n\n\n\n\n/**\n * Private module reserved for @mui packages.\n */\n\nfunction createSvgIcon(path, displayName) {\n  function Component(props, ref) {\n    return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_SvgIcon__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)({\n      "data-testid": `${displayName}Icon`,\n      ref: ref\n    }, props, {\n      children: path\n    }));\n  }\n  if (false) // removed by dead control flow\n{}\n  Component.muiName = _SvgIcon__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A.muiName;\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.memo( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(Component));\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTYxLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7O0FBRTBEO0FBQzNCO0FBQ0U7O0FBRWpDO0FBQ0E7QUFDQTtBQUNnRDtBQUNqQztBQUNmO0FBQ0Esd0JBQXdCLHNEQUFJLENBQUMseURBQU8sRUFBRSx1RkFBUTtBQUM5Qyx3QkFBd0IsWUFBWTtBQUNwQztBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBLE1BQU0sS0FBcUMsRUFBRTtBQUFBLEVBSTFDO0FBQ0gsc0JBQXNCLHlEQUFPO0FBQzdCLHNCQUFzQix1Q0FBVSxlQUFlLDZDQUFnQjtBQUMvRCIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvY3JlYXRlU3ZnSWNvbi5qcz8zM2JhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgU3ZnSWNvbiBmcm9tICcuLi9TdmdJY29uJztcblxuLyoqXG4gKiBQcml2YXRlIG1vZHVsZSByZXNlcnZlZCBmb3IgQG11aSBwYWNrYWdlcy5cbiAqL1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVN2Z0ljb24ocGF0aCwgZGlzcGxheU5hbWUpIHtcbiAgZnVuY3Rpb24gQ29tcG9uZW50KHByb3BzLCByZWYpIHtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL19qc3goU3ZnSWNvbiwgX2V4dGVuZHMoe1xuICAgICAgXCJkYXRhLXRlc3RpZFwiOiBgJHtkaXNwbGF5TmFtZX1JY29uYCxcbiAgICAgIHJlZjogcmVmXG4gICAgfSwgcHJvcHMsIHtcbiAgICAgIGNoaWxkcmVuOiBwYXRoXG4gICAgfSkpO1xuICB9XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gTmVlZCB0byBzZXQgYGRpc3BsYXlOYW1lYCBvbiB0aGUgaW5uZXIgY29tcG9uZW50IGZvciBSZWFjdC5tZW1vLlxuICAgIC8vIFJlYWN0IHByaW9yIHRvIDE2LjE0IGlnbm9yZXMgYGRpc3BsYXlOYW1lYCBvbiB0aGUgd3JhcHBlci5cbiAgICBDb21wb25lbnQuZGlzcGxheU5hbWUgPSBgJHtkaXNwbGF5TmFtZX1JY29uYDtcbiAgfVxuICBDb21wb25lbnQubXVpTmFtZSA9IFN2Z0ljb24ubXVpTmFtZTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5tZW1vKCAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihDb21wb25lbnQpKTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///561\n')},725:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nfunction clamp(val, min = Number.MIN_SAFE_INTEGER, max = Number.MAX_SAFE_INTEGER) {\n  return Math.max(min, Math.min(val, max));\n}\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (clamp);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzI1LmpzIiwibWFwcGluZ3MiOiI7OztBQUFBO0FBQ0E7QUFDQTtBQUNBLGlFQUFlLEtBQUsiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2VzbS9jbGFtcC9jbGFtcC5qcz9lNWMxIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIGNsYW1wKHZhbCwgbWluID0gTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIsIG1heCA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSB7XG4gIHJldHVybiBNYXRoLm1heChtaW4sIE1hdGgubWluKHZhbCwgbWF4KSk7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFtcDsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///725\n")},771:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval("var __webpack_unused_export__;\n\n\nvar _interopRequireDefault = __webpack_require__(4994);\n__webpack_unused_export__ = ({\n  value: true\n});\nexports.X4 = alpha;\n__webpack_unused_export__ = blend;\n__webpack_unused_export__ = void 0;\nexports.e$ = darken;\n__webpack_unused_export__ = decomposeColor;\n__webpack_unused_export__ = emphasize;\nexports.eM = getContrastRatio;\n__webpack_unused_export__ = getLuminance;\n__webpack_unused_export__ = hexToRgb;\n__webpack_unused_export__ = hslToRgb;\nexports.a = lighten;\n__webpack_unused_export__ = private_safeAlpha;\n__webpack_unused_export__ = void 0;\n__webpack_unused_export__ = private_safeDarken;\n__webpack_unused_export__ = private_safeEmphasize;\n__webpack_unused_export__ = private_safeLighten;\n__webpack_unused_export__ = recomposeColor;\n__webpack_unused_export__ = rgbToHex;\nvar _formatMuiErrorMessage2 = _interopRequireDefault(__webpack_require__(8944));\nvar _clamp = _interopRequireDefault(__webpack_require__(8586));\n/* eslint-disable @typescript-eslint/naming-convention */\n\n/**\n * Returns a number whose value is limited to the given range.\n * @param {number} value The value to be clamped\n * @param {number} min The lower boundary of the output range\n * @param {number} max The upper boundary of the output range\n * @returns {number} A number in the range [min, max]\n */\nfunction clampWrapper(value, min = 0, max = 1) {\n  if (false) // removed by dead control flow\n{}\n  return (0, _clamp.default)(value, min, max);\n}\n\n/**\n * Converts a color from CSS hex format to CSS rgb format.\n * @param {string} color - Hex color, i.e. #nnn or #nnnnnn\n * @returns {string} A CSS rgb color string\n */\nfunction hexToRgb(color) {\n  color = color.slice(1);\n  const re = new RegExp(`.{1,${color.length >= 6 ? 2 : 1}}`, 'g');\n  let colors = color.match(re);\n  if (colors && colors[0].length === 1) {\n    colors = colors.map(n => n + n);\n  }\n  return colors ? `rgb${colors.length === 4 ? 'a' : ''}(${colors.map((n, index) => {\n    return index < 3 ? parseInt(n, 16) : Math.round(parseInt(n, 16) / 255 * 1000) / 1000;\n  }).join(', ')})` : '';\n}\nfunction intToHex(int) {\n  const hex = int.toString(16);\n  return hex.length === 1 ? `0${hex}` : hex;\n}\n\n/**\n * Returns an object with the type and values of a color.\n *\n * Note: Does not support rgb % values.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @returns {object} - A MUI color object: {type: string, values: number[]}\n */\nfunction decomposeColor(color) {\n  // Idempotent\n  if (color.type) {\n    return color;\n  }\n  if (color.charAt(0) === '#') {\n    return decomposeColor(hexToRgb(color));\n  }\n  const marker = color.indexOf('(');\n  const type = color.substring(0, marker);\n  if (['rgb', 'rgba', 'hsl', 'hsla', 'color'].indexOf(type) === -1) {\n    throw new Error( false ? 0 : (0, _formatMuiErrorMessage2.default)(9, color));\n  }\n  let values = color.substring(marker + 1, color.length - 1);\n  let colorSpace;\n  if (type === 'color') {\n    values = values.split(' ');\n    colorSpace = values.shift();\n    if (values.length === 4 && values[3].charAt(0) === '/') {\n      values[3] = values[3].slice(1);\n    }\n    if (['srgb', 'display-p3', 'a98-rgb', 'prophoto-rgb', 'rec-2020'].indexOf(colorSpace) === -1) {\n      throw new Error( false ? 0 : (0, _formatMuiErrorMessage2.default)(10, colorSpace));\n    }\n  } else {\n    values = values.split(',');\n  }\n  values = values.map(value => parseFloat(value));\n  return {\n    type,\n    values,\n    colorSpace\n  };\n}\n\n/**\n * Returns a channel created from the input color.\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @returns {string} - The channel for the color, that can be used in rgba or hsla colors\n */\nconst colorChannel = color => {\n  const decomposedColor = decomposeColor(color);\n  return decomposedColor.values.slice(0, 3).map((val, idx) => decomposedColor.type.indexOf('hsl') !== -1 && idx !== 0 ? `${val}%` : val).join(' ');\n};\n__webpack_unused_export__ = colorChannel;\nconst private_safeColorChannel = (color, warning) => {\n  try {\n    return colorChannel(color);\n  } catch (error) {\n    if (warning && \"production\" !== 'production') // removed by dead control flow\n{}\n    return color;\n  }\n};\n\n/**\n * Converts a color object with type and values to a string.\n * @param {object} color - Decomposed color\n * @param {string} color.type - One of: 'rgb', 'rgba', 'hsl', 'hsla', 'color'\n * @param {array} color.values - [n,n,n] or [n,n,n,n]\n * @returns {string} A CSS color string\n */\n__webpack_unused_export__ = private_safeColorChannel;\nfunction recomposeColor(color) {\n  const {\n    type,\n    colorSpace\n  } = color;\n  let {\n    values\n  } = color;\n  if (type.indexOf('rgb') !== -1) {\n    // Only convert the first 3 values to int (i.e. not alpha)\n    values = values.map((n, i) => i < 3 ? parseInt(n, 10) : n);\n  } else if (type.indexOf('hsl') !== -1) {\n    values[1] = `${values[1]}%`;\n    values[2] = `${values[2]}%`;\n  }\n  if (type.indexOf('color') !== -1) {\n    values = `${colorSpace} ${values.join(' ')}`;\n  } else {\n    values = `${values.join(', ')}`;\n  }\n  return `${type}(${values})`;\n}\n\n/**\n * Converts a color from CSS rgb format to CSS hex format.\n * @param {string} color - RGB color, i.e. rgb(n, n, n)\n * @returns {string} A CSS rgb color string, i.e. #nnnnnn\n */\nfunction rgbToHex(color) {\n  // Idempotent\n  if (color.indexOf('#') === 0) {\n    return color;\n  }\n  const {\n    values\n  } = decomposeColor(color);\n  return `#${values.map((n, i) => intToHex(i === 3 ? Math.round(255 * n) : n)).join('')}`;\n}\n\n/**\n * Converts a color from hsl format to rgb format.\n * @param {string} color - HSL color values\n * @returns {string} rgb color values\n */\nfunction hslToRgb(color) {\n  color = decomposeColor(color);\n  const {\n    values\n  } = color;\n  const h = values[0];\n  const s = values[1] / 100;\n  const l = values[2] / 100;\n  const a = s * Math.min(l, 1 - l);\n  const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n  let type = 'rgb';\n  const rgb = [Math.round(f(0) * 255), Math.round(f(8) * 255), Math.round(f(4) * 255)];\n  if (color.type === 'hsla') {\n    type += 'a';\n    rgb.push(values[3]);\n  }\n  return recomposeColor({\n    type,\n    values: rgb\n  });\n}\n/**\n * The relative brightness of any point in a color space,\n * normalized to 0 for darkest black and 1 for lightest white.\n *\n * Formula: http://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-tests\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @returns {number} The relative brightness of the color in the range 0 - 1\n */\nfunction getLuminance(color) {\n  color = decomposeColor(color);\n  let rgb = color.type === 'hsl' || color.type === 'hsla' ? decomposeColor(hslToRgb(color)).values : color.values;\n  rgb = rgb.map(val => {\n    if (color.type !== 'color') {\n      val /= 255; // normalized\n    }\n    return val <= 0.03928 ? val / 12.92 : ((val + 0.055) / 1.055) ** 2.4;\n  });\n\n  // Truncate at 3 digits\n  return Number((0.2126 * rgb[0] + 0.7152 * rgb[1] + 0.0722 * rgb[2]).toFixed(3));\n}\n\n/**\n * Calculates the contrast ratio between two colors.\n *\n * Formula: http://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-tests\n * @param {string} foreground - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @param {string} background - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @returns {number} A contrast ratio value in the range 0 - 21.\n */\nfunction getContrastRatio(foreground, background) {\n  const lumA = getLuminance(foreground);\n  const lumB = getLuminance(background);\n  return (Math.max(lumA, lumB) + 0.05) / (Math.min(lumA, lumB) + 0.05);\n}\n\n/**\n * Sets the absolute transparency of a color.\n * Any existing alpha values are overwritten.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param {number} value - value to set the alpha channel to in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\nfunction alpha(color, value) {\n  color = decomposeColor(color);\n  value = clampWrapper(value);\n  if (color.type === 'rgb' || color.type === 'hsl') {\n    color.type += 'a';\n  }\n  if (color.type === 'color') {\n    color.values[3] = `/${value}`;\n  } else {\n    color.values[3] = value;\n  }\n  return recomposeColor(color);\n}\nfunction private_safeAlpha(color, value, warning) {\n  try {\n    return alpha(color, value);\n  } catch (error) {\n    if (warning && \"production\" !== 'production') // removed by dead control flow\n{}\n    return color;\n  }\n}\n\n/**\n * Darkens a color.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param {number} coefficient - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\nfunction darken(color, coefficient) {\n  color = decomposeColor(color);\n  coefficient = clampWrapper(coefficient);\n  if (color.type.indexOf('hsl') !== -1) {\n    color.values[2] *= 1 - coefficient;\n  } else if (color.type.indexOf('rgb') !== -1 || color.type.indexOf('color') !== -1) {\n    for (let i = 0; i < 3; i += 1) {\n      color.values[i] *= 1 - coefficient;\n    }\n  }\n  return recomposeColor(color);\n}\nfunction private_safeDarken(color, coefficient, warning) {\n  try {\n    return darken(color, coefficient);\n  } catch (error) {\n    if (warning && \"production\" !== 'production') // removed by dead control flow\n{}\n    return color;\n  }\n}\n\n/**\n * Lightens a color.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param {number} coefficient - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\nfunction lighten(color, coefficient) {\n  color = decomposeColor(color);\n  coefficient = clampWrapper(coefficient);\n  if (color.type.indexOf('hsl') !== -1) {\n    color.values[2] += (100 - color.values[2]) * coefficient;\n  } else if (color.type.indexOf('rgb') !== -1) {\n    for (let i = 0; i < 3; i += 1) {\n      color.values[i] += (255 - color.values[i]) * coefficient;\n    }\n  } else if (color.type.indexOf('color') !== -1) {\n    for (let i = 0; i < 3; i += 1) {\n      color.values[i] += (1 - color.values[i]) * coefficient;\n    }\n  }\n  return recomposeColor(color);\n}\nfunction private_safeLighten(color, coefficient, warning) {\n  try {\n    return lighten(color, coefficient);\n  } catch (error) {\n    if (warning && \"production\" !== 'production') // removed by dead control flow\n{}\n    return color;\n  }\n}\n\n/**\n * Darken or lighten a color, depending on its luminance.\n * Light colors are darkened, dark colors are lightened.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param {number} coefficient=0.15 - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\nfunction emphasize(color, coefficient = 0.15) {\n  return getLuminance(color) > 0.5 ? darken(color, coefficient) : lighten(color, coefficient);\n}\nfunction private_safeEmphasize(color, coefficient, warning) {\n  try {\n    return emphasize(color, coefficient);\n  } catch (error) {\n    if (warning && \"production\" !== 'production') // removed by dead control flow\n{}\n    return color;\n  }\n}\n\n/**\n * Blend a transparent overlay color with a background color, resulting in a single\n * RGB color.\n * @param {string} background - CSS color\n * @param {string} overlay - CSS color\n * @param {number} opacity - Opacity multiplier in the range 0 - 1\n * @param {number} [gamma=1.0] - Gamma correction factor. For gamma-correct blending, 2.2 is usual.\n */\nfunction blend(background, overlay, opacity, gamma = 1.0) {\n  const blendChannel = (b, o) => Math.round((b ** (1 / gamma) * (1 - opacity) + o ** (1 / gamma) * opacity) ** gamma);\n  const backgroundColor = decomposeColor(background);\n  const overlayColor = decomposeColor(overlay);\n  const rgb = [blendChannel(backgroundColor.values[0], overlayColor.values[0]), blendChannel(backgroundColor.values[1], overlayColor.values[1]), blendChannel(backgroundColor.values[2], overlayColor.values[2])];\n  return recomposeColor({\n    type: 'rgb',\n    values: rgb\n  });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osbUJBQW1CLFlBQW9CLG1CQUFtQjtBQUFBLEVBRXJEO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9jb2xvck1hbmlwdWxhdG9yLmpzPzc1YzYiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWxwaGEgPSBhbHBoYTtcbmV4cG9ydHMuYmxlbmQgPSBibGVuZDtcbmV4cG9ydHMuY29sb3JDaGFubmVsID0gdm9pZCAwO1xuZXhwb3J0cy5kYXJrZW4gPSBkYXJrZW47XG5leHBvcnRzLmRlY29tcG9zZUNvbG9yID0gZGVjb21wb3NlQ29sb3I7XG5leHBvcnRzLmVtcGhhc2l6ZSA9IGVtcGhhc2l6ZTtcbmV4cG9ydHMuZ2V0Q29udHJhc3RSYXRpbyA9IGdldENvbnRyYXN0UmF0aW87XG5leHBvcnRzLmdldEx1bWluYW5jZSA9IGdldEx1bWluYW5jZTtcbmV4cG9ydHMuaGV4VG9SZ2IgPSBoZXhUb1JnYjtcbmV4cG9ydHMuaHNsVG9SZ2IgPSBoc2xUb1JnYjtcbmV4cG9ydHMubGlnaHRlbiA9IGxpZ2h0ZW47XG5leHBvcnRzLnByaXZhdGVfc2FmZUFscGhhID0gcHJpdmF0ZV9zYWZlQWxwaGE7XG5leHBvcnRzLnByaXZhdGVfc2FmZUNvbG9yQ2hhbm5lbCA9IHZvaWQgMDtcbmV4cG9ydHMucHJpdmF0ZV9zYWZlRGFya2VuID0gcHJpdmF0ZV9zYWZlRGFya2VuO1xuZXhwb3J0cy5wcml2YXRlX3NhZmVFbXBoYXNpemUgPSBwcml2YXRlX3NhZmVFbXBoYXNpemU7XG5leHBvcnRzLnByaXZhdGVfc2FmZUxpZ2h0ZW4gPSBwcml2YXRlX3NhZmVMaWdodGVuO1xuZXhwb3J0cy5yZWNvbXBvc2VDb2xvciA9IHJlY29tcG9zZUNvbG9yO1xuZXhwb3J0cy5yZ2JUb0hleCA9IHJnYlRvSGV4O1xudmFyIF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQG11aS91dGlscy9mb3JtYXRNdWlFcnJvck1lc3NhZ2VcIikpO1xudmFyIF9jbGFtcCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBtdWkvdXRpbHMvY2xhbXBcIikpO1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uICovXG5cbi8qKlxuICogUmV0dXJucyBhIG51bWJlciB3aG9zZSB2YWx1ZSBpcyBsaW1pdGVkIHRvIHRoZSBnaXZlbiByYW5nZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYmUgY2xhbXBlZFxuICogQHBhcmFtIHtudW1iZXJ9IG1pbiBUaGUgbG93ZXIgYm91bmRhcnkgb2YgdGhlIG91dHB1dCByYW5nZVxuICogQHBhcmFtIHtudW1iZXJ9IG1heCBUaGUgdXBwZXIgYm91bmRhcnkgb2YgdGhlIG91dHB1dCByYW5nZVxuICogQHJldHVybnMge251bWJlcn0gQSBudW1iZXIgaW4gdGhlIHJhbmdlIFttaW4sIG1heF1cbiAqL1xuZnVuY3Rpb24gY2xhbXBXcmFwcGVyKHZhbHVlLCBtaW4gPSAwLCBtYXggPSAxKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKHZhbHVlIDwgbWluIHx8IHZhbHVlID4gbWF4KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBNVUk6IFRoZSB2YWx1ZSBwcm92aWRlZCAke3ZhbHVlfSBpcyBvdXQgb2YgcmFuZ2UgWyR7bWlufSwgJHttYXh9XS5gKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuICgwLCBfY2xhbXAuZGVmYXVsdCkodmFsdWUsIG1pbiwgbWF4KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIGNvbG9yIGZyb20gQ1NTIGhleCBmb3JtYXQgdG8gQ1NTIHJnYiBmb3JtYXQuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBIZXggY29sb3IsIGkuZS4gI25ubiBvciAjbm5ubm5uXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIENTUyByZ2IgY29sb3Igc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGhleFRvUmdiKGNvbG9yKSB7XG4gIGNvbG9yID0gY29sb3Iuc2xpY2UoMSk7XG4gIGNvbnN0IHJlID0gbmV3IFJlZ0V4cChgLnsxLCR7Y29sb3IubGVuZ3RoID49IDYgPyAyIDogMX19YCwgJ2cnKTtcbiAgbGV0IGNvbG9ycyA9IGNvbG9yLm1hdGNoKHJlKTtcbiAgaWYgKGNvbG9ycyAmJiBjb2xvcnNbMF0ubGVuZ3RoID09PSAxKSB7XG4gICAgY29sb3JzID0gY29sb3JzLm1hcChuID0+IG4gKyBuKTtcbiAgfVxuICByZXR1cm4gY29sb3JzID8gYHJnYiR7Y29sb3JzLmxlbmd0aCA9PT0gNCA/ICdhJyA6ICcnfSgke2NvbG9ycy5tYXAoKG4sIGluZGV4KSA9PiB7XG4gICAgcmV0dXJuIGluZGV4IDwgMyA/IHBhcnNlSW50KG4sIDE2KSA6IE1hdGgucm91bmQocGFyc2VJbnQobiwgMTYpIC8gMjU1ICogMTAwMCkgLyAxMDAwO1xuICB9KS5qb2luKCcsICcpfSlgIDogJyc7XG59XG5mdW5jdGlvbiBpbnRUb0hleChpbnQpIHtcbiAgY29uc3QgaGV4ID0gaW50LnRvU3RyaW5nKDE2KTtcbiAgcmV0dXJuIGhleC5sZW5ndGggPT09IDEgPyBgMCR7aGV4fWAgOiBoZXg7XG59XG5cbi8qKlxuICogUmV0dXJucyBhbiBvYmplY3Qgd2l0aCB0aGUgdHlwZSBhbmQgdmFsdWVzIG9mIGEgY29sb3IuXG4gKlxuICogTm90ZTogRG9lcyBub3Qgc3VwcG9ydCByZ2IgJSB2YWx1ZXMuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBDU1MgY29sb3IsIGkuZS4gb25lIG9mOiAjbm5uLCAjbm5ubm5uLCByZ2IoKSwgcmdiYSgpLCBoc2woKSwgaHNsYSgpLCBjb2xvcigpXG4gKiBAcmV0dXJucyB7b2JqZWN0fSAtIEEgTVVJIGNvbG9yIG9iamVjdDoge3R5cGU6IHN0cmluZywgdmFsdWVzOiBudW1iZXJbXX1cbiAqL1xuZnVuY3Rpb24gZGVjb21wb3NlQ29sb3IoY29sb3IpIHtcbiAgLy8gSWRlbXBvdGVudFxuICBpZiAoY29sb3IudHlwZSkge1xuICAgIHJldHVybiBjb2xvcjtcbiAgfVxuICBpZiAoY29sb3IuY2hhckF0KDApID09PSAnIycpIHtcbiAgICByZXR1cm4gZGVjb21wb3NlQ29sb3IoaGV4VG9SZ2IoY29sb3IpKTtcbiAgfVxuICBjb25zdCBtYXJrZXIgPSBjb2xvci5pbmRleE9mKCcoJyk7XG4gIGNvbnN0IHR5cGUgPSBjb2xvci5zdWJzdHJpbmcoMCwgbWFya2VyKTtcbiAgaWYgKFsncmdiJywgJ3JnYmEnLCAnaHNsJywgJ2hzbGEnLCAnY29sb3InXS5pbmRleE9mKHR5cGUpID09PSAtMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBgTVVJOiBVbnN1cHBvcnRlZCBcXGAke2NvbG9yfVxcYCBjb2xvci5cblRoZSBmb2xsb3dpbmcgZm9ybWF0cyBhcmUgc3VwcG9ydGVkOiAjbm5uLCAjbm5ubm5uLCByZ2IoKSwgcmdiYSgpLCBoc2woKSwgaHNsYSgpLCBjb2xvcigpLmAgOiAoMCwgX2Zvcm1hdE11aUVycm9yTWVzc2FnZTIuZGVmYXVsdCkoOSwgY29sb3IpKTtcbiAgfVxuICBsZXQgdmFsdWVzID0gY29sb3Iuc3Vic3RyaW5nKG1hcmtlciArIDEsIGNvbG9yLmxlbmd0aCAtIDEpO1xuICBsZXQgY29sb3JTcGFjZTtcbiAgaWYgKHR5cGUgPT09ICdjb2xvcicpIHtcbiAgICB2YWx1ZXMgPSB2YWx1ZXMuc3BsaXQoJyAnKTtcbiAgICBjb2xvclNwYWNlID0gdmFsdWVzLnNoaWZ0KCk7XG4gICAgaWYgKHZhbHVlcy5sZW5ndGggPT09IDQgJiYgdmFsdWVzWzNdLmNoYXJBdCgwKSA9PT0gJy8nKSB7XG4gICAgICB2YWx1ZXNbM10gPSB2YWx1ZXNbM10uc2xpY2UoMSk7XG4gICAgfVxuICAgIGlmIChbJ3NyZ2InLCAnZGlzcGxheS1wMycsICdhOTgtcmdiJywgJ3Byb3Bob3RvLXJnYicsICdyZWMtMjAyMCddLmluZGV4T2YoY29sb3JTcGFjZSkgPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gYE1VSTogdW5zdXBwb3J0ZWQgXFxgJHtjb2xvclNwYWNlfVxcYCBjb2xvciBzcGFjZS5cblRoZSBmb2xsb3dpbmcgY29sb3Igc3BhY2VzIGFyZSBzdXBwb3J0ZWQ6IHNyZ2IsIGRpc3BsYXktcDMsIGE5OC1yZ2IsIHByb3Bob3RvLXJnYiwgcmVjLTIwMjAuYCA6ICgwLCBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlMi5kZWZhdWx0KSgxMCwgY29sb3JTcGFjZSkpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YWx1ZXMgPSB2YWx1ZXMuc3BsaXQoJywnKTtcbiAgfVxuICB2YWx1ZXMgPSB2YWx1ZXMubWFwKHZhbHVlID0+IHBhcnNlRmxvYXQodmFsdWUpKTtcbiAgcmV0dXJuIHtcbiAgICB0eXBlLFxuICAgIHZhbHVlcyxcbiAgICBjb2xvclNwYWNlXG4gIH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGNoYW5uZWwgY3JlYXRlZCBmcm9tIHRoZSBpbnB1dCBjb2xvci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBDU1MgY29sb3IsIGkuZS4gb25lIG9mOiAjbm5uLCAjbm5ubm5uLCByZ2IoKSwgcmdiYSgpLCBoc2woKSwgaHNsYSgpLCBjb2xvcigpXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSBjaGFubmVsIGZvciB0aGUgY29sb3IsIHRoYXQgY2FuIGJlIHVzZWQgaW4gcmdiYSBvciBoc2xhIGNvbG9yc1xuICovXG5jb25zdCBjb2xvckNoYW5uZWwgPSBjb2xvciA9PiB7XG4gIGNvbnN0IGRlY29tcG9zZWRDb2xvciA9IGRlY29tcG9zZUNvbG9yKGNvbG9yKTtcbiAgcmV0dXJuIGRlY29tcG9zZWRDb2xvci52YWx1ZXMuc2xpY2UoMCwgMykubWFwKCh2YWwsIGlkeCkgPT4gZGVjb21wb3NlZENvbG9yLnR5cGUuaW5kZXhPZignaHNsJykgIT09IC0xICYmIGlkeCAhPT0gMCA/IGAke3ZhbH0lYCA6IHZhbCkuam9pbignICcpO1xufTtcbmV4cG9ydHMuY29sb3JDaGFubmVsID0gY29sb3JDaGFubmVsO1xuY29uc3QgcHJpdmF0ZV9zYWZlQ29sb3JDaGFubmVsID0gKGNvbG9yLCB3YXJuaW5nKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGNvbG9yQ2hhbm5lbChjb2xvcik7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKHdhcm5pbmcgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgY29uc29sZS53YXJuKHdhcm5pbmcpO1xuICAgIH1cbiAgICByZXR1cm4gY29sb3I7XG4gIH1cbn07XG5cbi8qKlxuICogQ29udmVydHMgYSBjb2xvciBvYmplY3Qgd2l0aCB0eXBlIGFuZCB2YWx1ZXMgdG8gYSBzdHJpbmcuXG4gKiBAcGFyYW0ge29iamVjdH0gY29sb3IgLSBEZWNvbXBvc2VkIGNvbG9yXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IudHlwZSAtIE9uZSBvZjogJ3JnYicsICdyZ2JhJywgJ2hzbCcsICdoc2xhJywgJ2NvbG9yJ1xuICogQHBhcmFtIHthcnJheX0gY29sb3IudmFsdWVzIC0gW24sbixuXSBvciBbbixuLG4sbl1cbiAqIEByZXR1cm5zIHtzdHJpbmd9IEEgQ1NTIGNvbG9yIHN0cmluZ1xuICovXG5leHBvcnRzLnByaXZhdGVfc2FmZUNvbG9yQ2hhbm5lbCA9IHByaXZhdGVfc2FmZUNvbG9yQ2hhbm5lbDtcbmZ1bmN0aW9uIHJlY29tcG9zZUNvbG9yKGNvbG9yKSB7XG4gIGNvbnN0IHtcbiAgICB0eXBlLFxuICAgIGNvbG9yU3BhY2VcbiAgfSA9IGNvbG9yO1xuICBsZXQge1xuICAgIHZhbHVlc1xuICB9ID0gY29sb3I7XG4gIGlmICh0eXBlLmluZGV4T2YoJ3JnYicpICE9PSAtMSkge1xuICAgIC8vIE9ubHkgY29udmVydCB0aGUgZmlyc3QgMyB2YWx1ZXMgdG8gaW50IChpLmUuIG5vdCBhbHBoYSlcbiAgICB2YWx1ZXMgPSB2YWx1ZXMubWFwKChuLCBpKSA9PiBpIDwgMyA/IHBhcnNlSW50KG4sIDEwKSA6IG4pO1xuICB9IGVsc2UgaWYgKHR5cGUuaW5kZXhPZignaHNsJykgIT09IC0xKSB7XG4gICAgdmFsdWVzWzFdID0gYCR7dmFsdWVzWzFdfSVgO1xuICAgIHZhbHVlc1syXSA9IGAke3ZhbHVlc1syXX0lYDtcbiAgfVxuICBpZiAodHlwZS5pbmRleE9mKCdjb2xvcicpICE9PSAtMSkge1xuICAgIHZhbHVlcyA9IGAke2NvbG9yU3BhY2V9ICR7dmFsdWVzLmpvaW4oJyAnKX1gO1xuICB9IGVsc2Uge1xuICAgIHZhbHVlcyA9IGAke3ZhbHVlcy5qb2luKCcsICcpfWA7XG4gIH1cbiAgcmV0dXJuIGAke3R5cGV9KCR7dmFsdWVzfSlgO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgY29sb3IgZnJvbSBDU1MgcmdiIGZvcm1hdCB0byBDU1MgaGV4IGZvcm1hdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvciAtIFJHQiBjb2xvciwgaS5lLiByZ2IobiwgbiwgbilcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEEgQ1NTIHJnYiBjb2xvciBzdHJpbmcsIGkuZS4gI25ubm5ublxuICovXG5mdW5jdGlvbiByZ2JUb0hleChjb2xvcikge1xuICAvLyBJZGVtcG90ZW50XG4gIGlmIChjb2xvci5pbmRleE9mKCcjJykgPT09IDApIHtcbiAgICByZXR1cm4gY29sb3I7XG4gIH1cbiAgY29uc3Qge1xuICAgIHZhbHVlc1xuICB9ID0gZGVjb21wb3NlQ29sb3IoY29sb3IpO1xuICByZXR1cm4gYCMke3ZhbHVlcy5tYXAoKG4sIGkpID0+IGludFRvSGV4KGkgPT09IDMgPyBNYXRoLnJvdW5kKDI1NSAqIG4pIDogbikpLmpvaW4oJycpfWA7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBjb2xvciBmcm9tIGhzbCBmb3JtYXQgdG8gcmdiIGZvcm1hdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvciAtIEhTTCBjb2xvciB2YWx1ZXNcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHJnYiBjb2xvciB2YWx1ZXNcbiAqL1xuZnVuY3Rpb24gaHNsVG9SZ2IoY29sb3IpIHtcbiAgY29sb3IgPSBkZWNvbXBvc2VDb2xvcihjb2xvcik7XG4gIGNvbnN0IHtcbiAgICB2YWx1ZXNcbiAgfSA9IGNvbG9yO1xuICBjb25zdCBoID0gdmFsdWVzWzBdO1xuICBjb25zdCBzID0gdmFsdWVzWzFdIC8gMTAwO1xuICBjb25zdCBsID0gdmFsdWVzWzJdIC8gMTAwO1xuICBjb25zdCBhID0gcyAqIE1hdGgubWluKGwsIDEgLSBsKTtcbiAgY29uc3QgZiA9IChuLCBrID0gKG4gKyBoIC8gMzApICUgMTIpID0+IGwgLSBhICogTWF0aC5tYXgoTWF0aC5taW4oayAtIDMsIDkgLSBrLCAxKSwgLTEpO1xuICBsZXQgdHlwZSA9ICdyZ2InO1xuICBjb25zdCByZ2IgPSBbTWF0aC5yb3VuZChmKDApICogMjU1KSwgTWF0aC5yb3VuZChmKDgpICogMjU1KSwgTWF0aC5yb3VuZChmKDQpICogMjU1KV07XG4gIGlmIChjb2xvci50eXBlID09PSAnaHNsYScpIHtcbiAgICB0eXBlICs9ICdhJztcbiAgICByZ2IucHVzaCh2YWx1ZXNbM10pO1xuICB9XG4gIHJldHVybiByZWNvbXBvc2VDb2xvcih7XG4gICAgdHlwZSxcbiAgICB2YWx1ZXM6IHJnYlxuICB9KTtcbn1cbi8qKlxuICogVGhlIHJlbGF0aXZlIGJyaWdodG5lc3Mgb2YgYW55IHBvaW50IGluIGEgY29sb3Igc3BhY2UsXG4gKiBub3JtYWxpemVkIHRvIDAgZm9yIGRhcmtlc3QgYmxhY2sgYW5kIDEgZm9yIGxpZ2h0ZXN0IHdoaXRlLlxuICpcbiAqIEZvcm11bGE6IGh0dHBzOi8vd3d3LnczLm9yZy9UUi9XQ0FHMjAtVEVDSFMvRzE3Lmh0bWwjRzE3LXRlc3RzXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBDU1MgY29sb3IsIGkuZS4gb25lIG9mOiAjbm5uLCAjbm5ubm5uLCByZ2IoKSwgcmdiYSgpLCBoc2woKSwgaHNsYSgpLCBjb2xvcigpXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgcmVsYXRpdmUgYnJpZ2h0bmVzcyBvZiB0aGUgY29sb3IgaW4gdGhlIHJhbmdlIDAgLSAxXG4gKi9cbmZ1bmN0aW9uIGdldEx1bWluYW5jZShjb2xvcikge1xuICBjb2xvciA9IGRlY29tcG9zZUNvbG9yKGNvbG9yKTtcbiAgbGV0IHJnYiA9IGNvbG9yLnR5cGUgPT09ICdoc2wnIHx8IGNvbG9yLnR5cGUgPT09ICdoc2xhJyA/IGRlY29tcG9zZUNvbG9yKGhzbFRvUmdiKGNvbG9yKSkudmFsdWVzIDogY29sb3IudmFsdWVzO1xuICByZ2IgPSByZ2IubWFwKHZhbCA9PiB7XG4gICAgaWYgKGNvbG9yLnR5cGUgIT09ICdjb2xvcicpIHtcbiAgICAgIHZhbCAvPSAyNTU7IC8vIG5vcm1hbGl6ZWRcbiAgICB9XG4gICAgcmV0dXJuIHZhbCA8PSAwLjAzOTI4ID8gdmFsIC8gMTIuOTIgOiAoKHZhbCArIDAuMDU1KSAvIDEuMDU1KSAqKiAyLjQ7XG4gIH0pO1xuXG4gIC8vIFRydW5jYXRlIGF0IDMgZGlnaXRzXG4gIHJldHVybiBOdW1iZXIoKDAuMjEyNiAqIHJnYlswXSArIDAuNzE1MiAqIHJnYlsxXSArIDAuMDcyMiAqIHJnYlsyXSkudG9GaXhlZCgzKSk7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgY29udHJhc3QgcmF0aW8gYmV0d2VlbiB0d28gY29sb3JzLlxuICpcbiAqIEZvcm11bGE6IGh0dHBzOi8vd3d3LnczLm9yZy9UUi9XQ0FHMjAtVEVDSFMvRzE3Lmh0bWwjRzE3LXRlc3RzXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9yZWdyb3VuZCAtIENTUyBjb2xvciwgaS5lLiBvbmUgb2Y6ICNubm4sICNubm5ubm4sIHJnYigpLCByZ2JhKCksIGhzbCgpLCBoc2xhKClcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYWNrZ3JvdW5kIC0gQ1NTIGNvbG9yLCBpLmUuIG9uZSBvZjogI25ubiwgI25ubm5ubiwgcmdiKCksIHJnYmEoKSwgaHNsKCksIGhzbGEoKVxuICogQHJldHVybnMge251bWJlcn0gQSBjb250cmFzdCByYXRpbyB2YWx1ZSBpbiB0aGUgcmFuZ2UgMCAtIDIxLlxuICovXG5mdW5jdGlvbiBnZXRDb250cmFzdFJhdGlvKGZvcmVncm91bmQsIGJhY2tncm91bmQpIHtcbiAgY29uc3QgbHVtQSA9IGdldEx1bWluYW5jZShmb3JlZ3JvdW5kKTtcbiAgY29uc3QgbHVtQiA9IGdldEx1bWluYW5jZShiYWNrZ3JvdW5kKTtcbiAgcmV0dXJuIChNYXRoLm1heChsdW1BLCBsdW1CKSArIDAuMDUpIC8gKE1hdGgubWluKGx1bUEsIGx1bUIpICsgMC4wNSk7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgYWJzb2x1dGUgdHJhbnNwYXJlbmN5IG9mIGEgY29sb3IuXG4gKiBBbnkgZXhpc3RpbmcgYWxwaGEgdmFsdWVzIGFyZSBvdmVyd3JpdHRlbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvciAtIENTUyBjb2xvciwgaS5lLiBvbmUgb2Y6ICNubm4sICNubm5ubm4sIHJnYigpLCByZ2JhKCksIGhzbCgpLCBoc2xhKCksIGNvbG9yKClcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIHZhbHVlIHRvIHNldCB0aGUgYWxwaGEgY2hhbm5lbCB0byBpbiB0aGUgcmFuZ2UgMCAtIDFcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEEgQ1NTIGNvbG9yIHN0cmluZy4gSGV4IGlucHV0IHZhbHVlcyBhcmUgcmV0dXJuZWQgYXMgcmdiXG4gKi9cbmZ1bmN0aW9uIGFscGhhKGNvbG9yLCB2YWx1ZSkge1xuICBjb2xvciA9IGRlY29tcG9zZUNvbG9yKGNvbG9yKTtcbiAgdmFsdWUgPSBjbGFtcFdyYXBwZXIodmFsdWUpO1xuICBpZiAoY29sb3IudHlwZSA9PT0gJ3JnYicgfHwgY29sb3IudHlwZSA9PT0gJ2hzbCcpIHtcbiAgICBjb2xvci50eXBlICs9ICdhJztcbiAgfVxuICBpZiAoY29sb3IudHlwZSA9PT0gJ2NvbG9yJykge1xuICAgIGNvbG9yLnZhbHVlc1szXSA9IGAvJHt2YWx1ZX1gO1xuICB9IGVsc2Uge1xuICAgIGNvbG9yLnZhbHVlc1szXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiByZWNvbXBvc2VDb2xvcihjb2xvcik7XG59XG5mdW5jdGlvbiBwcml2YXRlX3NhZmVBbHBoYShjb2xvciwgdmFsdWUsIHdhcm5pbmcpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYWxwaGEoY29sb3IsIHZhbHVlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAod2FybmluZyAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjb25zb2xlLndhcm4od2FybmluZyk7XG4gICAgfVxuICAgIHJldHVybiBjb2xvcjtcbiAgfVxufVxuXG4vKipcbiAqIERhcmtlbnMgYSBjb2xvci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvciAtIENTUyBjb2xvciwgaS5lLiBvbmUgb2Y6ICNubm4sICNubm5ubm4sIHJnYigpLCByZ2JhKCksIGhzbCgpLCBoc2xhKCksIGNvbG9yKClcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2VmZmljaWVudCAtIG11bHRpcGxpZXIgaW4gdGhlIHJhbmdlIDAgLSAxXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIENTUyBjb2xvciBzdHJpbmcuIEhleCBpbnB1dCB2YWx1ZXMgYXJlIHJldHVybmVkIGFzIHJnYlxuICovXG5mdW5jdGlvbiBkYXJrZW4oY29sb3IsIGNvZWZmaWNpZW50KSB7XG4gIGNvbG9yID0gZGVjb21wb3NlQ29sb3IoY29sb3IpO1xuICBjb2VmZmljaWVudCA9IGNsYW1wV3JhcHBlcihjb2VmZmljaWVudCk7XG4gIGlmIChjb2xvci50eXBlLmluZGV4T2YoJ2hzbCcpICE9PSAtMSkge1xuICAgIGNvbG9yLnZhbHVlc1syXSAqPSAxIC0gY29lZmZpY2llbnQ7XG4gIH0gZWxzZSBpZiAoY29sb3IudHlwZS5pbmRleE9mKCdyZ2InKSAhPT0gLTEgfHwgY29sb3IudHlwZS5pbmRleE9mKCdjb2xvcicpICE9PSAtMSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSArPSAxKSB7XG4gICAgICBjb2xvci52YWx1ZXNbaV0gKj0gMSAtIGNvZWZmaWNpZW50O1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjb21wb3NlQ29sb3IoY29sb3IpO1xufVxuZnVuY3Rpb24gcHJpdmF0ZV9zYWZlRGFya2VuKGNvbG9yLCBjb2VmZmljaWVudCwgd2FybmluZykge1xuICB0cnkge1xuICAgIHJldHVybiBkYXJrZW4oY29sb3IsIGNvZWZmaWNpZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAod2FybmluZyAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjb25zb2xlLndhcm4od2FybmluZyk7XG4gICAgfVxuICAgIHJldHVybiBjb2xvcjtcbiAgfVxufVxuXG4vKipcbiAqIExpZ2h0ZW5zIGEgY29sb3IuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBDU1MgY29sb3IsIGkuZS4gb25lIG9mOiAjbm5uLCAjbm5ubm5uLCByZ2IoKSwgcmdiYSgpLCBoc2woKSwgaHNsYSgpLCBjb2xvcigpXG4gKiBAcGFyYW0ge251bWJlcn0gY29lZmZpY2llbnQgLSBtdWx0aXBsaWVyIGluIHRoZSByYW5nZSAwIC0gMVxuICogQHJldHVybnMge3N0cmluZ30gQSBDU1MgY29sb3Igc3RyaW5nLiBIZXggaW5wdXQgdmFsdWVzIGFyZSByZXR1cm5lZCBhcyByZ2JcbiAqL1xuZnVuY3Rpb24gbGlnaHRlbihjb2xvciwgY29lZmZpY2llbnQpIHtcbiAgY29sb3IgPSBkZWNvbXBvc2VDb2xvcihjb2xvcik7XG4gIGNvZWZmaWNpZW50ID0gY2xhbXBXcmFwcGVyKGNvZWZmaWNpZW50KTtcbiAgaWYgKGNvbG9yLnR5cGUuaW5kZXhPZignaHNsJykgIT09IC0xKSB7XG4gICAgY29sb3IudmFsdWVzWzJdICs9ICgxMDAgLSBjb2xvci52YWx1ZXNbMl0pICogY29lZmZpY2llbnQ7XG4gIH0gZWxzZSBpZiAoY29sb3IudHlwZS5pbmRleE9mKCdyZ2InKSAhPT0gLTEpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDM7IGkgKz0gMSkge1xuICAgICAgY29sb3IudmFsdWVzW2ldICs9ICgyNTUgLSBjb2xvci52YWx1ZXNbaV0pICogY29lZmZpY2llbnQ7XG4gICAgfVxuICB9IGVsc2UgaWYgKGNvbG9yLnR5cGUuaW5kZXhPZignY29sb3InKSAhPT0gLTEpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDM7IGkgKz0gMSkge1xuICAgICAgY29sb3IudmFsdWVzW2ldICs9ICgxIC0gY29sb3IudmFsdWVzW2ldKSAqIGNvZWZmaWNpZW50O1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjb21wb3NlQ29sb3IoY29sb3IpO1xufVxuZnVuY3Rpb24gcHJpdmF0ZV9zYWZlTGlnaHRlbihjb2xvciwgY29lZmZpY2llbnQsIHdhcm5pbmcpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gbGlnaHRlbihjb2xvciwgY29lZmZpY2llbnQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmICh3YXJuaW5nICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnNvbGUud2Fybih3YXJuaW5nKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbG9yO1xuICB9XG59XG5cbi8qKlxuICogRGFya2VuIG9yIGxpZ2h0ZW4gYSBjb2xvciwgZGVwZW5kaW5nIG9uIGl0cyBsdW1pbmFuY2UuXG4gKiBMaWdodCBjb2xvcnMgYXJlIGRhcmtlbmVkLCBkYXJrIGNvbG9ycyBhcmUgbGlnaHRlbmVkLlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yIC0gQ1NTIGNvbG9yLCBpLmUuIG9uZSBvZjogI25ubiwgI25ubm5ubiwgcmdiKCksIHJnYmEoKSwgaHNsKCksIGhzbGEoKSwgY29sb3IoKVxuICogQHBhcmFtIHtudW1iZXJ9IGNvZWZmaWNpZW50PTAuMTUgLSBtdWx0aXBsaWVyIGluIHRoZSByYW5nZSAwIC0gMVxuICogQHJldHVybnMge3N0cmluZ30gQSBDU1MgY29sb3Igc3RyaW5nLiBIZXggaW5wdXQgdmFsdWVzIGFyZSByZXR1cm5lZCBhcyByZ2JcbiAqL1xuZnVuY3Rpb24gZW1waGFzaXplKGNvbG9yLCBjb2VmZmljaWVudCA9IDAuMTUpIHtcbiAgcmV0dXJuIGdldEx1bWluYW5jZShjb2xvcikgPiAwLjUgPyBkYXJrZW4oY29sb3IsIGNvZWZmaWNpZW50KSA6IGxpZ2h0ZW4oY29sb3IsIGNvZWZmaWNpZW50KTtcbn1cbmZ1bmN0aW9uIHByaXZhdGVfc2FmZUVtcGhhc2l6ZShjb2xvciwgY29lZmZpY2llbnQsIHdhcm5pbmcpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZW1waGFzaXplKGNvbG9yLCBjb2VmZmljaWVudCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKHdhcm5pbmcgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgY29uc29sZS53YXJuKHdhcm5pbmcpO1xuICAgIH1cbiAgICByZXR1cm4gY29sb3I7XG4gIH1cbn1cblxuLyoqXG4gKiBCbGVuZCBhIHRyYW5zcGFyZW50IG92ZXJsYXkgY29sb3Igd2l0aCBhIGJhY2tncm91bmQgY29sb3IsIHJlc3VsdGluZyBpbiBhIHNpbmdsZVxuICogUkdCIGNvbG9yLlxuICogQHBhcmFtIHtzdHJpbmd9IGJhY2tncm91bmQgLSBDU1MgY29sb3JcbiAqIEBwYXJhbSB7c3RyaW5nfSBvdmVybGF5IC0gQ1NTIGNvbG9yXG4gKiBAcGFyYW0ge251bWJlcn0gb3BhY2l0eSAtIE9wYWNpdHkgbXVsdGlwbGllciBpbiB0aGUgcmFuZ2UgMCAtIDFcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZ2FtbWE9MS4wXSAtIEdhbW1hIGNvcnJlY3Rpb24gZmFjdG9yLiBGb3IgZ2FtbWEtY29ycmVjdCBibGVuZGluZywgMi4yIGlzIHVzdWFsLlxuICovXG5mdW5jdGlvbiBibGVuZChiYWNrZ3JvdW5kLCBvdmVybGF5LCBvcGFjaXR5LCBnYW1tYSA9IDEuMCkge1xuICBjb25zdCBibGVuZENoYW5uZWwgPSAoYiwgbykgPT4gTWF0aC5yb3VuZCgoYiAqKiAoMSAvIGdhbW1hKSAqICgxIC0gb3BhY2l0eSkgKyBvICoqICgxIC8gZ2FtbWEpICogb3BhY2l0eSkgKiogZ2FtbWEpO1xuICBjb25zdCBiYWNrZ3JvdW5kQ29sb3IgPSBkZWNvbXBvc2VDb2xvcihiYWNrZ3JvdW5kKTtcbiAgY29uc3Qgb3ZlcmxheUNvbG9yID0gZGVjb21wb3NlQ29sb3Iob3ZlcmxheSk7XG4gIGNvbnN0IHJnYiA9IFtibGVuZENoYW5uZWwoYmFja2dyb3VuZENvbG9yLnZhbHVlc1swXSwgb3ZlcmxheUNvbG9yLnZhbHVlc1swXSksIGJsZW5kQ2hhbm5lbChiYWNrZ3JvdW5kQ29sb3IudmFsdWVzWzFdLCBvdmVybGF5Q29sb3IudmFsdWVzWzFdKSwgYmxlbmRDaGFubmVsKGJhY2tncm91bmRDb2xvci52YWx1ZXNbMl0sIG92ZXJsYXlDb2xvci52YWx1ZXNbMl0pXTtcbiAgcmV0dXJuIHJlY29tcG9zZUNvbG9yKHtcbiAgICB0eXBlOiAncmdiJyxcbiAgICB2YWx1ZXM6IHJnYlxuICB9KTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///771\n")},862:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _mui_utils_createChainedFunction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6673);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_mui_utils_createChainedFunction__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODYyLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBcUU7QUFDckUsaUVBQWUsaUZBQXFCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy9jcmVhdGVDaGFpbmVkRnVuY3Rpb24uanM/OGY3OSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uIGZyb20gJ0BtdWkvdXRpbHMvY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uJztcbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUNoYWluZWRGdW5jdGlvbjsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///862\n')},1020:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval('/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nvar f=__webpack_require__(1594),k=Symbol.for("react.element"),l=Symbol.for("react.fragment"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=""+g);void 0!==a.key&&(e=""+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTAyMC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDYSxNQUFNLG1CQUFPLENBQUMsSUFBTyw2S0FBNks7QUFDL00sa0JBQWtCLFVBQVUsZUFBZSxxQkFBcUIsNkJBQTZCLDBCQUEwQiwwREFBMEQsNEVBQTRFLE9BQU8sd0RBQXdELGdCQUFnQixHQUFHLFdBQVcsR0FBRyxZQUFZIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvcmVhY3QvY2pzL3JlYWN0LWpzeC1ydW50aW1lLnByb2R1Y3Rpb24ubWluLmpzP2QzMWQiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZSBSZWFjdFxuICogcmVhY3QtanN4LXJ1bnRpbWUucHJvZHVjdGlvbi5taW4uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuJ3VzZSBzdHJpY3QnO3ZhciBmPXJlcXVpcmUoXCJyZWFjdFwiKSxrPVN5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpLGw9U3ltYm9sLmZvcihcInJlYWN0LmZyYWdtZW50XCIpLG09T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxuPWYuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQuUmVhY3RDdXJyZW50T3duZXIscD17a2V5OiEwLHJlZjohMCxfX3NlbGY6ITAsX19zb3VyY2U6ITB9O1xuZnVuY3Rpb24gcShjLGEsZyl7dmFyIGIsZD17fSxlPW51bGwsaD1udWxsO3ZvaWQgMCE9PWcmJihlPVwiXCIrZyk7dm9pZCAwIT09YS5rZXkmJihlPVwiXCIrYS5rZXkpO3ZvaWQgMCE9PWEucmVmJiYoaD1hLnJlZik7Zm9yKGIgaW4gYSltLmNhbGwoYSxiKSYmIXAuaGFzT3duUHJvcGVydHkoYikmJihkW2JdPWFbYl0pO2lmKGMmJmMuZGVmYXVsdFByb3BzKWZvcihiIGluIGE9Yy5kZWZhdWx0UHJvcHMsYSl2b2lkIDA9PT1kW2JdJiYoZFtiXT1hW2JdKTtyZXR1cm57JCR0eXBlb2Y6ayx0eXBlOmMsa2V5OmUscmVmOmgscHJvcHM6ZCxfb3duZXI6bi5jdXJyZW50fX1leHBvcnRzLkZyYWdtZW50PWw7ZXhwb3J0cy5qc3g9cTtleHBvcnRzLmpzeHM9cTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1020\n')},1113:module=>{"use strict";eval("\n\n/* istanbul ignore next  */\nfunction styleTagTransform(css, styleElement) {\n  if (styleElement.styleSheet) {\n    styleElement.styleSheet.cssText = css;\n  } else {\n    while (styleElement.firstChild) {\n      styleElement.removeChild(styleElement.firstChild);\n    }\n    styleElement.appendChild(document.createTextNode(css));\n  }\n}\nmodule.exports = styleTagTransform;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTExMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVUYWdUcmFuc2Zvcm0uanM/MWRkZSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBzdHlsZVRhZ1RyYW5zZm9ybShjc3MsIHN0eWxlRWxlbWVudCkge1xuICBpZiAoc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQpIHtcbiAgICBzdHlsZUVsZW1lbnQuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuICB9IGVsc2Uge1xuICAgIHdoaWxlIChzdHlsZUVsZW1lbnQuZmlyc3RDaGlsZCkge1xuICAgICAgc3R5bGVFbGVtZW50LnJlbW92ZUNoaWxkKHN0eWxlRWxlbWVudC5maXJzdENoaWxkKTtcbiAgICB9XG4gICAgc3R5bGVFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpO1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IHN0eWxlVGFnVHJhbnNmb3JtOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1113\n")},1159:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _mui_utils_useControlled__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2501);\n'use client';\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_mui_utils_useControlled__WEBPACK_IMPORTED_MODULE_0__/* [\"default\"] */ .A);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTE1OS5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7O0FBRXFEO0FBQ3JELGlFQUFlLHlFQUFhIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy91c2VDb250cm9sbGVkLmpzP2Q2ZjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgdXNlQ29udHJvbGxlZCBmcm9tICdAbXVpL3V0aWxzL3VzZUNvbnRyb2xsZWQnO1xuZXhwb3J0IGRlZmF1bHQgdXNlQ29udHJvbGxlZDsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1159\n")},1249:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval('var __webpack_unused_export__;\n\n"use client";\n\nvar _interopRequireDefault = __webpack_require__(4994);\n__webpack_unused_export__ = ({\n  value: true\n});\nexports.A = void 0;\nvar _createSvgIcon = _interopRequireDefault(__webpack_require__(2032));\nvar _jsxRuntime = __webpack_require__(4848);\nvar _default = exports.A = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)("path", {\n  d: "M11 15h2v2h-2zm0-8h2v6h-2zm.99-5C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2M12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8"\n}), \'ErrorOutline\');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTI0OS5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYjs7QUFFQSw2QkFBNkIsbUJBQU8sQ0FBQyxJQUE4QztBQUNuRiw2QkFBNkM7QUFDN0M7QUFDQSxDQUFDLENBQUM7QUFDRixTQUFlO0FBQ2YsNENBQTRDLG1CQUFPLENBQUMsSUFBdUI7QUFDM0Usa0JBQWtCLG1CQUFPLENBQUMsSUFBbUI7QUFDN0MsZUFBZSxTQUFlO0FBQzlCO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvaWNvbnMtbWF0ZXJpYWwvRXJyb3JPdXRsaW5lLmpzP2MzMzMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cInVzZSBjbGllbnRcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xudmFyIF9jcmVhdGVTdmdJY29uID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi91dGlscy9jcmVhdGVTdmdJY29uXCIpKTtcbnZhciBfanN4UnVudGltZSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9ICgwLCBfY3JlYXRlU3ZnSWNvbi5kZWZhdWx0KSggLyojX19QVVJFX18qLygwLCBfanN4UnVudGltZS5qc3gpKFwicGF0aFwiLCB7XG4gIGQ6IFwiTTExIDE1aDJ2MmgtMnptMC04aDJ2NmgtMnptLjk5LTVDNi40NyAyIDIgNi40OCAyIDEyczQuNDcgMTAgOS45OSAxMEMxNy41MiAyMiAyMiAxNy41MiAyMiAxMlMxNy41MiAyIDExLjk5IDJNMTIgMjBjLTQuNDIgMC04LTMuNTgtOC04czMuNTgtOCA4LTggOCAzLjU4IDggOC0zLjU4IDgtOCA4XCJcbn0pLCAnRXJyb3JPdXRsaW5lJyk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1249\n')},1287:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   i: () => (/* binding */ useInsertionEffectWithLayoutFallback),\n/* harmony export */   s: () => (/* binding */ useInsertionEffectAlwaysWithSyncFallback)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1594);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\n\nvar syncFallback = function syncFallback(create) {\n  return create();\n};\n\nvar useInsertionEffect = react__WEBPACK_IMPORTED_MODULE_0__['useInsertion' + 'Effect'] ? react__WEBPACK_IMPORTED_MODULE_0__['useInsertion' + 'Effect'] : false;\nvar useInsertionEffectAlwaysWithSyncFallback = useInsertionEffect || syncFallback;\nvar useInsertionEffectWithLayoutFallback = useInsertionEffect || react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect;\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTI4Ny5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBK0I7O0FBRS9CO0FBQ0E7QUFDQTs7QUFFQSx5QkFBeUIsa0NBQUssOEJBQThCLGtDQUFLO0FBQ2pFO0FBQ0EsaUVBQWlFLGtEQUFxQjs7QUFFSSIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3VzZS1pbnNlcnRpb24tZWZmZWN0LXdpdGgtZmFsbGJhY2tzL2Rpc3QvZW1vdGlvbi11c2UtaW5zZXJ0aW9uLWVmZmVjdC13aXRoLWZhbGxiYWNrcy5icm93c2VyLmVzbS5qcz9jNGIwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxudmFyIHN5bmNGYWxsYmFjayA9IGZ1bmN0aW9uIHN5bmNGYWxsYmFjayhjcmVhdGUpIHtcbiAgcmV0dXJuIGNyZWF0ZSgpO1xufTtcblxudmFyIHVzZUluc2VydGlvbkVmZmVjdCA9IFJlYWN0Wyd1c2VJbnNlcnRpb24nICsgJ0VmZmVjdCddID8gUmVhY3RbJ3VzZUluc2VydGlvbicgKyAnRWZmZWN0J10gOiBmYWxzZTtcbnZhciB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrID0gdXNlSW5zZXJ0aW9uRWZmZWN0IHx8IHN5bmNGYWxsYmFjaztcbnZhciB1c2VJbnNlcnRpb25FZmZlY3RXaXRoTGF5b3V0RmFsbGJhY2sgPSB1c2VJbnNlcnRpb25FZmZlY3QgfHwgUmVhY3QudXNlTGF5b3V0RWZmZWN0O1xuXG5leHBvcnQgeyB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrLCB1c2VJbnNlcnRpb25FZmZlY3RXaXRoTGF5b3V0RmFsbGJhY2sgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1287\n")},1317:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   A: () => (/* binding */ deepmerge),\n/* harmony export */   Q: () => (/* binding */ isPlainObject)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(8168);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1594);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\n\n\n// https://github.com/sindresorhus/is-plain-obj/blob/main/index.js\nfunction isPlainObject(item) {\n  if (typeof item !== 'object' || item === null) {\n    return false;\n  }\n  const prototype = Object.getPrototypeOf(item);\n  return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in item) && !(Symbol.iterator in item);\n}\nfunction deepClone(source) {\n  if ( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.isValidElement(source) || !isPlainObject(source)) {\n    return source;\n  }\n  const output = {};\n  Object.keys(source).forEach(key => {\n    output[key] = deepClone(source[key]);\n  });\n  return output;\n}\nfunction deepmerge(target, source, options = {\n  clone: true\n}) {\n  const output = options.clone ? (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__/* [\"default\"] */ .A)({}, target) : target;\n  if (isPlainObject(target) && isPlainObject(source)) {\n    Object.keys(source).forEach(key => {\n      if ( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.isValidElement(source[key])) {\n        output[key] = source[key];\n      } else if (isPlainObject(source[key]) &&\n      // Avoid prototype pollution\n      Object.prototype.hasOwnProperty.call(target, key) && isPlainObject(target[key])) {\n        // Since `output` is a clone of `target` and we have narrowed `target` in this block we can cast to the same type.\n        output[key] = deepmerge(target[key], source[key], options);\n      } else if (options.clone) {\n        output[key] = isPlainObject(source[key]) ? deepClone(source[key]) : source[key];\n      } else {\n        output[key] = source[key];\n      }\n    });\n  }\n  return output;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTMxNy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQTBEO0FBQzNCOztBQUUvQjtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsaURBQW9CO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNlO0FBQ2Y7QUFDQSxDQUFDO0FBQ0QsaUNBQWlDLHVGQUFRLEdBQUc7QUFDNUM7QUFDQTtBQUNBLHdCQUF3QixpREFBb0I7QUFDNUM7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2VzbS9kZWVwbWVyZ2UvZGVlcG1lcmdlLmpzP2MzZDQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvaXMtcGxhaW4tb2JqL2Jsb2IvbWFpbi9pbmRleC5qc1xuZXhwb3J0IGZ1bmN0aW9uIGlzUGxhaW5PYmplY3QoaXRlbSkge1xuICBpZiAodHlwZW9mIGl0ZW0gIT09ICdvYmplY3QnIHx8IGl0ZW0gPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGl0ZW0pO1xuICByZXR1cm4gKHByb3RvdHlwZSA9PT0gbnVsbCB8fCBwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGUgfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvdHlwZSkgPT09IG51bGwpICYmICEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIGl0ZW0pICYmICEoU3ltYm9sLml0ZXJhdG9yIGluIGl0ZW0pO1xufVxuZnVuY3Rpb24gZGVlcENsb25lKHNvdXJjZSkge1xuICBpZiAoIC8qI19fUFVSRV9fKi9SZWFjdC5pc1ZhbGlkRWxlbWVudChzb3VyY2UpIHx8ICFpc1BsYWluT2JqZWN0KHNvdXJjZSkpIHtcbiAgICByZXR1cm4gc291cmNlO1xuICB9XG4gIGNvbnN0IG91dHB1dCA9IHt9O1xuICBPYmplY3Qua2V5cyhzb3VyY2UpLmZvckVhY2goa2V5ID0+IHtcbiAgICBvdXRwdXRba2V5XSA9IGRlZXBDbG9uZShzb3VyY2Vba2V5XSk7XG4gIH0pO1xuICByZXR1cm4gb3V0cHV0O1xufVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGVlcG1lcmdlKHRhcmdldCwgc291cmNlLCBvcHRpb25zID0ge1xuICBjbG9uZTogdHJ1ZVxufSkge1xuICBjb25zdCBvdXRwdXQgPSBvcHRpb25zLmNsb25lID8gX2V4dGVuZHMoe30sIHRhcmdldCkgOiB0YXJnZXQ7XG4gIGlmIChpc1BsYWluT2JqZWN0KHRhcmdldCkgJiYgaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgT2JqZWN0LmtleXMoc291cmNlKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAoIC8qI19fUFVSRV9fKi9SZWFjdC5pc1ZhbGlkRWxlbWVudChzb3VyY2Vba2V5XSkpIHtcbiAgICAgICAgb3V0cHV0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChzb3VyY2Vba2V5XSkgJiZcbiAgICAgIC8vIEF2b2lkIHByb3RvdHlwZSBwb2xsdXRpb25cbiAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0YXJnZXQsIGtleSkgJiYgaXNQbGFpbk9iamVjdCh0YXJnZXRba2V5XSkpIHtcbiAgICAgICAgLy8gU2luY2UgYG91dHB1dGAgaXMgYSBjbG9uZSBvZiBgdGFyZ2V0YCBhbmQgd2UgaGF2ZSBuYXJyb3dlZCBgdGFyZ2V0YCBpbiB0aGlzIGJsb2NrIHdlIGNhbiBjYXN0IHRvIHRoZSBzYW1lIHR5cGUuXG4gICAgICAgIG91dHB1dFtrZXldID0gZGVlcG1lcmdlKHRhcmdldFtrZXldLCBzb3VyY2Vba2V5XSwgb3B0aW9ucyk7XG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuY2xvbmUpIHtcbiAgICAgICAgb3V0cHV0W2tleV0gPSBpc1BsYWluT2JqZWN0KHNvdXJjZVtrZXldKSA/IGRlZXBDbG9uZShzb3VyY2Vba2V5XSkgOiBzb3VyY2Vba2V5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dHB1dFtrZXldID0gc291cmNlW2tleV07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG91dHB1dDtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1317\n")},1354:module=>{"use strict";eval('\n\nmodule.exports = function (item) {\n  var content = item[1];\n  var cssMapping = item[3];\n  if (!cssMapping) {\n    return content;\n  }\n  if (typeof btoa === "function") {\n    var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n    var data = "sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(base64);\n    var sourceMapping = "/*# ".concat(data, " */");\n    return [content].concat([sourceMapping]).join("\\n");\n  }\n  return [content].join("\\n");\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTM1NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdURBQXVELGNBQWM7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanM/YWYxMiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlbSkge1xuICB2YXIgY29udGVudCA9IGl0ZW1bMV07XG4gIHZhciBjc3NNYXBwaW5nID0gaXRlbVszXTtcbiAgaWYgKCFjc3NNYXBwaW5nKSB7XG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cbiAgaWYgKHR5cGVvZiBidG9hID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB2YXIgYmFzZTY0ID0gYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoY3NzTWFwcGluZykpKSk7XG4gICAgdmFyIGRhdGEgPSBcInNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LFwiLmNvbmNhdChiYXNlNjQpO1xuICAgIHZhciBzb3VyY2VNYXBwaW5nID0gXCIvKiMgXCIuY29uY2F0KGRhdGEsIFwiICovXCIpO1xuICAgIHJldHVybiBbY29udGVudF0uY29uY2F0KFtzb3VyY2VNYXBwaW5nXSkuam9pbihcIlxcblwiKTtcbiAgfVxuICByZXR1cm4gW2NvbnRlbnRdLmpvaW4oXCJcXG5cIik7XG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1354\n')},1432:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval('var __webpack_unused_export__;\n\n"use client";\n\nvar _interopRequireDefault = __webpack_require__(4994);\n__webpack_unused_export__ = ({\n  value: true\n});\nexports.A = void 0;\nvar _createSvgIcon = _interopRequireDefault(__webpack_require__(2032));\nvar _jsxRuntime = __webpack_require__(4848);\nvar _default = exports.A = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)("path", {\n  d: "M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4m0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4"\n}), \'Person\');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQzMi5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYjs7QUFFQSw2QkFBNkIsbUJBQU8sQ0FBQyxJQUE4QztBQUNuRiw2QkFBNkM7QUFDN0M7QUFDQSxDQUFDLENBQUM7QUFDRixTQUFlO0FBQ2YsNENBQTRDLG1CQUFPLENBQUMsSUFBdUI7QUFDM0Usa0JBQWtCLG1CQUFPLENBQUMsSUFBbUI7QUFDN0MsZUFBZSxTQUFlO0FBQzlCO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvaWNvbnMtbWF0ZXJpYWwvUGVyc29uLmpzPzRhZTAiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cInVzZSBjbGllbnRcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xudmFyIF9jcmVhdGVTdmdJY29uID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi91dGlscy9jcmVhdGVTdmdJY29uXCIpKTtcbnZhciBfanN4UnVudGltZSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9ICgwLCBfY3JlYXRlU3ZnSWNvbi5kZWZhdWx0KSggLyojX19QVVJFX18qLygwLCBfanN4UnVudGltZS5qc3gpKFwicGF0aFwiLCB7XG4gIGQ6IFwiTTEyIDEyYzIuMjEgMCA0LTEuNzkgNC00cy0xLjc5LTQtNC00LTQgMS43OS00IDQgMS43OSA0IDQgNG0wIDJjLTIuNjcgMC04IDEuMzQtOCA0djJoMTZ2LTJjMC0yLjY2LTUuMzMtNC04LTRcIlxufSksICdQZXJzb24nKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1432\n')},1434:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval('var __webpack_unused_export__;\n\n"use client";\n\nvar _interopRequireDefault = __webpack_require__(4994);\n__webpack_unused_export__ = ({\n  value: true\n});\nexports.A = void 0;\nvar _createSvgIcon = _interopRequireDefault(__webpack_require__(2032));\nvar _jsxRuntime = __webpack_require__(4848);\nvar _default = exports.A = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)("path", {\n  d: "M6 2v6h.01L6 8.01 10 12l-4 4 .01.01H6V22h12v-5.99h-.01L18 16l-4-4 4-3.99-.01-.01H18V2zm10 14.5V20H8v-3.5l4-4zm-4-5-4-4V4h8v3.5z"\n}), \'HourglassEmpty\');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQzNC5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYjs7QUFFQSw2QkFBNkIsbUJBQU8sQ0FBQyxJQUE4QztBQUNuRiw2QkFBNkM7QUFDN0M7QUFDQSxDQUFDLENBQUM7QUFDRixTQUFlO0FBQ2YsNENBQTRDLG1CQUFPLENBQUMsSUFBdUI7QUFDM0Usa0JBQWtCLG1CQUFPLENBQUMsSUFBbUI7QUFDN0MsZUFBZSxTQUFlO0FBQzlCO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvaWNvbnMtbWF0ZXJpYWwvSG91cmdsYXNzRW1wdHkuanM/NTIxMCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblwidXNlIGNsaWVudFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX2NyZWF0ZVN2Z0ljb24gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3V0aWxzL2NyZWF0ZVN2Z0ljb25cIikpO1xudmFyIF9qc3hSdW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gKDAsIF9jcmVhdGVTdmdJY29uLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovKDAsIF9qc3hSdW50aW1lLmpzeCkoXCJwYXRoXCIsIHtcbiAgZDogXCJNNiAydjZoLjAxTDYgOC4wMSAxMCAxMmwtNCA0IC4wMS4wMUg2VjIyaDEydi01Ljk5aC0uMDFMMTggMTZsLTQtNCA0LTMuOTktLjAxLS4wMUgxOFYyem0xMCAxNC41VjIwSDh2LTMuNWw0LTR6bS00LTUtNC00VjRoOHYzLjV6XCJcbn0pLCAnSG91cmdsYXNzRW1wdHknKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1434\n')},1523:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   A: () => (/* binding */ useForkRef)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1594);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _setRef__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7365);\n'use client';\n\n\n\nfunction useForkRef(...refs) {\n  /**\n   * This will create a new function if the refs passed to this hook change and are all defined.\n   * This means react will call the old forkRef with `null` and the new forkRef\n   * with the ref. Cleanup naturally emerges from this behavior.\n   */\n  return react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => {\n    if (refs.every(ref => ref == null)) {\n      return null;\n    }\n    return instance => {\n      refs.forEach(ref => {\n        (0,_setRef__WEBPACK_IMPORTED_MODULE_1__/* [\"default\"] */ .A)(ref, instance);\n      });\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, refs);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTUyMy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7QUFFK0I7QUFDQTtBQUNoQjtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLDBDQUFhO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLDREQUFNO0FBQ2QsT0FBTztBQUNQO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2VzbS91c2VGb3JrUmVmL3VzZUZvcmtSZWYuanM/Mzc0YSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBzZXRSZWYgZnJvbSAnLi4vc2V0UmVmJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUZvcmtSZWYoLi4ucmVmcykge1xuICAvKipcbiAgICogVGhpcyB3aWxsIGNyZWF0ZSBhIG5ldyBmdW5jdGlvbiBpZiB0aGUgcmVmcyBwYXNzZWQgdG8gdGhpcyBob29rIGNoYW5nZSBhbmQgYXJlIGFsbCBkZWZpbmVkLlxuICAgKiBUaGlzIG1lYW5zIHJlYWN0IHdpbGwgY2FsbCB0aGUgb2xkIGZvcmtSZWYgd2l0aCBgbnVsbGAgYW5kIHRoZSBuZXcgZm9ya1JlZlxuICAgKiB3aXRoIHRoZSByZWYuIENsZWFudXAgbmF0dXJhbGx5IGVtZXJnZXMgZnJvbSB0aGlzIGJlaGF2aW9yLlxuICAgKi9cbiAgcmV0dXJuIFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChyZWZzLmV2ZXJ5KHJlZiA9PiByZWYgPT0gbnVsbCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gaW5zdGFuY2UgPT4ge1xuICAgICAgcmVmcy5mb3JFYWNoKHJlZiA9PiB7XG4gICAgICAgIHNldFJlZihyZWYsIGluc3RhbmNlKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCByZWZzKTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1523\n")},1529:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1594);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n'use client';\n\n\n\n/**\n * A version of `React.useLayoutEffect` that does not show a warning when server-side rendering.\n * This is useful for effects that are only needed for client-side rendering but not for SSR.\n *\n * Before you use this hook, make sure to read https://gist.github.com/gaearon/e7d97cdf38a2907924ea12e4ebdf3c85\n * and confirm it doesn't apply to your use-case.\n */\nconst useEnhancedEffect = typeof window !== 'undefined' ? react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect : react__WEBPACK_IMPORTED_MODULE_0__.useEffect;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (useEnhancedEffect);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTUyOS5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFBOztBQUUrQjs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwREFBMEQsa0RBQXFCLEdBQUcsNENBQWU7QUFDakcsaUVBQWUsaUJBQWlCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS91dGlscy9lc20vdXNlRW5oYW5jZWRFZmZlY3QvdXNlRW5oYW5jZWRFZmZlY3QuanM/NWUwNyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxuLyoqXG4gKiBBIHZlcnNpb24gb2YgYFJlYWN0LnVzZUxheW91dEVmZmVjdGAgdGhhdCBkb2VzIG5vdCBzaG93IGEgd2FybmluZyB3aGVuIHNlcnZlci1zaWRlIHJlbmRlcmluZy5cbiAqIFRoaXMgaXMgdXNlZnVsIGZvciBlZmZlY3RzIHRoYXQgYXJlIG9ubHkgbmVlZGVkIGZvciBjbGllbnQtc2lkZSByZW5kZXJpbmcgYnV0IG5vdCBmb3IgU1NSLlxuICpcbiAqIEJlZm9yZSB5b3UgdXNlIHRoaXMgaG9vaywgbWFrZSBzdXJlIHRvIHJlYWQgaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vZ2FlYXJvbi9lN2Q5N2NkZjM4YTI5MDc5MjRlYTEyZTRlYmRmM2M4NVxuICogYW5kIGNvbmZpcm0gaXQgZG9lc24ndCBhcHBseSB0byB5b3VyIHVzZS1jYXNlLlxuICovXG5jb25zdCB1c2VFbmhhbmNlZEVmZmVjdCA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gUmVhY3QudXNlTGF5b3V0RWZmZWN0IDogUmVhY3QudXNlRWZmZWN0O1xuZXhwb3J0IGRlZmF1bHQgdXNlRW5oYW5jZWRFZmZlY3Q7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1529\n")},1547:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1594);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _useEnhancedEffect__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1529);\n'use client';\n\n\n\n\n/**\n * Inspired by https://github.com/facebook/react/issues/14099#issuecomment-440013892\n * See RFC in https://github.com/reactjs/rfcs/pull/220\n */\n\nfunction useEventCallback(fn) {\n  const ref = react__WEBPACK_IMPORTED_MODULE_0__.useRef(fn);\n  (0,_useEnhancedEffect__WEBPACK_IMPORTED_MODULE_1__/* [\"default\"] */ .A)(() => {\n    ref.current = fn;\n  });\n  return react__WEBPACK_IMPORTED_MODULE_0__.useRef((...args) =>\n  // @ts-expect-error hide `this`\n  (0, ref.current)(...args)).current;\n}\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (useEventCallback);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTU0Ny5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7QUFFK0I7QUFDc0I7O0FBRXJEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsY0FBYyx5Q0FBWTtBQUMxQixFQUFFLHVFQUFpQjtBQUNuQjtBQUNBLEdBQUc7QUFDSCxTQUFTLHlDQUFZO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLGlFQUFlLGdCQUFnQiIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL3VzZUV2ZW50Q2FsbGJhY2svdXNlRXZlbnRDYWxsYmFjay5qcz85ZDc5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHVzZUVuaGFuY2VkRWZmZWN0IGZyb20gJy4uL3VzZUVuaGFuY2VkRWZmZWN0JztcblxuLyoqXG4gKiBJbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE0MDk5I2lzc3VlY29tbWVudC00NDAwMTM4OTJcbiAqIFNlZSBSRkMgaW4gaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0anMvcmZjcy9wdWxsLzIyMFxuICovXG5cbmZ1bmN0aW9uIHVzZUV2ZW50Q2FsbGJhY2soZm4pIHtcbiAgY29uc3QgcmVmID0gUmVhY3QudXNlUmVmKGZuKTtcbiAgdXNlRW5oYW5jZWRFZmZlY3QoKCkgPT4ge1xuICAgIHJlZi5jdXJyZW50ID0gZm47XG4gIH0pO1xuICByZXR1cm4gUmVhY3QudXNlUmVmKCguLi5hcmdzKSA9PlxuICAvLyBAdHMtZXhwZWN0LWVycm9yIGhpZGUgYHRoaXNgXG4gICgwLCByZWYuY3VycmVudCkoLi4uYXJncykpLmN1cnJlbnQ7XG59XG5leHBvcnQgZGVmYXVsdCB1c2VFdmVudENhbGxiYWNrOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1547\n")},1594:n=>{"use strict";n.exports=React},1609:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   Ay: () => (/* binding */ generateUtilityClass)\n/* harmony export */ });\n/* unused harmony exports globalStateClasses, isGlobalState */\n/* harmony import */ var _ClassNameGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(9071);\n\nconst globalStateClasses = {\n  active: 'active',\n  checked: 'checked',\n  completed: 'completed',\n  disabled: 'disabled',\n  error: 'error',\n  expanded: 'expanded',\n  focused: 'focused',\n  focusVisible: 'focusVisible',\n  open: 'open',\n  readOnly: 'readOnly',\n  required: 'required',\n  selected: 'selected'\n};\nfunction generateUtilityClass(componentName, slot, globalStatePrefix = 'Mui') {\n  const globalStateClass = globalStateClasses[slot];\n  return globalStateClass ? `${globalStatePrefix}-${globalStateClass}` : `${_ClassNameGenerator__WEBPACK_IMPORTED_MODULE_0__/* [\"default\"] */ .A.generate(componentName)}-${slot}`;\n}\nfunction isGlobalState(slot) {\n  return globalStateClasses[slot] !== undefined;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTYwOS5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUF1RDtBQUNoRDtBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ2U7QUFDZjtBQUNBLCtCQUErQixrQkFBa0IsR0FBRyxpQkFBaUIsT0FBTyxvRUFBa0IseUJBQXlCLEdBQUcsS0FBSztBQUMvSDtBQUNPO0FBQ1A7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL2dlbmVyYXRlVXRpbGl0eUNsYXNzL2dlbmVyYXRlVXRpbGl0eUNsYXNzLmpzPzRlNDYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IENsYXNzTmFtZUdlbmVyYXRvciBmcm9tICcuLi9DbGFzc05hbWVHZW5lcmF0b3InO1xuZXhwb3J0IGNvbnN0IGdsb2JhbFN0YXRlQ2xhc3NlcyA9IHtcbiAgYWN0aXZlOiAnYWN0aXZlJyxcbiAgY2hlY2tlZDogJ2NoZWNrZWQnLFxuICBjb21wbGV0ZWQ6ICdjb21wbGV0ZWQnLFxuICBkaXNhYmxlZDogJ2Rpc2FibGVkJyxcbiAgZXJyb3I6ICdlcnJvcicsXG4gIGV4cGFuZGVkOiAnZXhwYW5kZWQnLFxuICBmb2N1c2VkOiAnZm9jdXNlZCcsXG4gIGZvY3VzVmlzaWJsZTogJ2ZvY3VzVmlzaWJsZScsXG4gIG9wZW46ICdvcGVuJyxcbiAgcmVhZE9ubHk6ICdyZWFkT25seScsXG4gIHJlcXVpcmVkOiAncmVxdWlyZWQnLFxuICBzZWxlY3RlZDogJ3NlbGVjdGVkJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdlbmVyYXRlVXRpbGl0eUNsYXNzKGNvbXBvbmVudE5hbWUsIHNsb3QsIGdsb2JhbFN0YXRlUHJlZml4ID0gJ011aScpIHtcbiAgY29uc3QgZ2xvYmFsU3RhdGVDbGFzcyA9IGdsb2JhbFN0YXRlQ2xhc3Nlc1tzbG90XTtcbiAgcmV0dXJuIGdsb2JhbFN0YXRlQ2xhc3MgPyBgJHtnbG9iYWxTdGF0ZVByZWZpeH0tJHtnbG9iYWxTdGF0ZUNsYXNzfWAgOiBgJHtDbGFzc05hbWVHZW5lcmF0b3IuZ2VuZXJhdGUoY29tcG9uZW50TmFtZSl9LSR7c2xvdH1gO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzR2xvYmFsU3RhdGUoc2xvdCkge1xuICByZXR1cm4gZ2xvYmFsU3RhdGVDbGFzc2VzW3Nsb3RdICE9PSB1bmRlZmluZWQ7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1609\n")},1668:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _mui_utils_useId__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4661);\n'use client';\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_mui_utils_useId__WEBPACK_IMPORTED_MODULE_0__/* [\"default\"] */ .A);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTY2OC5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7O0FBRXFDO0FBQ3JDLGlFQUFlLGlFQUFLIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy91c2VJZC5qcz8wZDI1Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHVzZUlkIGZyb20gJ0BtdWkvdXRpbHMvdXNlSWQnO1xuZXhwb3J0IGRlZmF1bHQgdXNlSWQ7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1668\n")},1845:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval('var __webpack_unused_export__;\n\n"use client";\n\nvar _interopRequireDefault = __webpack_require__(4994);\n__webpack_unused_export__ = ({\n  value: true\n});\nexports.A = void 0;\nvar _createSvgIcon = _interopRequireDefault(__webpack_require__(2032));\nvar _jsxRuntime = __webpack_require__(4848);\nvar _default = exports.A = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)("path", {\n  d: "M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2m0 4-8 5-8-5V6l8 5 8-5z"\n}), \'Email\');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTg0NS5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYjs7QUFFQSw2QkFBNkIsbUJBQU8sQ0FBQyxJQUE4QztBQUNuRiw2QkFBNkM7QUFDN0M7QUFDQSxDQUFDLENBQUM7QUFDRixTQUFlO0FBQ2YsNENBQTRDLG1CQUFPLENBQUMsSUFBdUI7QUFDM0Usa0JBQWtCLG1CQUFPLENBQUMsSUFBbUI7QUFDN0MsZUFBZSxTQUFlO0FBQzlCO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvaWNvbnMtbWF0ZXJpYWwvRW1haWwuanM/OWY0OSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblwidXNlIGNsaWVudFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX2NyZWF0ZVN2Z0ljb24gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3V0aWxzL2NyZWF0ZVN2Z0ljb25cIikpO1xudmFyIF9qc3hSdW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gKDAsIF9jcmVhdGVTdmdJY29uLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovKDAsIF9qc3hSdW50aW1lLmpzeCkoXCJwYXRoXCIsIHtcbiAgZDogXCJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0ybTAgNC04IDUtOC01VjZsOCA1IDgtNXpcIlxufSksICdFbWFpbCcpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1845\n')},1848:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   Ay: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _mui_system_createStyled__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6461);\n/* harmony import */ var _defaultTheme__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2765);\n/* harmony import */ var _identifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(8312);\n/* harmony import */ var _rootShouldForwardProp__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(9770);\n\'use client\';\n\n\n\n\n\n\n\nconst styled = (0,_mui_system_createStyled__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay)({\n  themeId: _identifier__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A,\n  defaultTheme: _defaultTheme__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A,\n  rootShouldForwardProp: _rootShouldForwardProp__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A\n});\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (styled);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTg0OC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBRW9EO0FBQ1Y7QUFDTjtBQUN3QjtBQUNlO0FBQ0E7QUFDM0UsZUFBZSw4RUFBWTtBQUMzQixXQUFXLDREQUFRO0FBQ25CLGNBQWM7QUFDZCx1QkFBdUI7QUFDdkIsQ0FBQztBQUNELGlFQUFlLE1BQU0iLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9zdHlsZWQuanM/NTY3ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBjcmVhdGVTdHlsZWQgZnJvbSAnQG11aS9zeXN0ZW0vY3JlYXRlU3R5bGVkJztcbmltcG9ydCBkZWZhdWx0VGhlbWUgZnJvbSAnLi9kZWZhdWx0VGhlbWUnO1xuaW1wb3J0IFRIRU1FX0lEIGZyb20gJy4vaWRlbnRpZmllcic7XG5pbXBvcnQgcm9vdFNob3VsZEZvcndhcmRQcm9wIGZyb20gJy4vcm9vdFNob3VsZEZvcndhcmRQcm9wJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc2xvdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi9zbG90U2hvdWxkRm9yd2FyZFByb3AnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyByb290U2hvdWxkRm9yd2FyZFByb3AgfSBmcm9tICcuL3Jvb3RTaG91bGRGb3J3YXJkUHJvcCc7XG5jb25zdCBzdHlsZWQgPSBjcmVhdGVTdHlsZWQoe1xuICB0aGVtZUlkOiBUSEVNRV9JRCxcbiAgZGVmYXVsdFRoZW1lLFxuICByb290U2hvdWxkRm9yd2FyZFByb3Bcbn0pO1xuZXhwb3J0IGRlZmF1bHQgc3R5bGVkOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1848\n')},1935:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _mui_utils_debounce__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4705);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_mui_utils_debounce__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTkzNS5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQTJDO0FBQzNDLGlFQUFlLG9FQUFRIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy9kZWJvdW5jZS5qcz9lZjIxIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkZWJvdW5jZSBmcm9tICdAbXVpL3V0aWxzL2RlYm91bmNlJztcbmV4cG9ydCBkZWZhdWx0IGRlYm91bmNlOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1935\n')},2032:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval('\n\'use client\';\n\nObject.defineProperty(exports, "__esModule", ({\n  value: true\n}));\nObject.defineProperty(exports, "default", ({\n  enumerable: true,\n  get: function () {\n    return _utils.createSvgIcon;\n  }\n}));\nvar _utils = __webpack_require__(8928);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjAzMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiOztBQUVBLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLDJDQUEwQztBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBQztBQUNGLGFBQWEsbUJBQU8sQ0FBQyxJQUFxQiIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvaWNvbnMtbWF0ZXJpYWwvdXRpbHMvY3JlYXRlU3ZnSWNvbi5qcz84ZGU5Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuJ3VzZSBjbGllbnQnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVmYXVsdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfdXRpbHMuY3JlYXRlU3ZnSWNvbjtcbiAgfVxufSk7XG52YXIgX3V0aWxzID0gcmVxdWlyZShcIkBtdWkvbWF0ZXJpYWwvdXRpbHNcIik7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2032\n')},2162:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval('/**\n * @license React\n * use-sync-external-store-shim/with-selector.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\nvar React = __webpack_require__(1594),\n  shim = __webpack_require__(9888);\nfunction is(x, y) {\n  return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = "function" === typeof Object.is ? Object.is : is,\n  useSyncExternalStore = shim.useSyncExternalStore,\n  useRef = React.useRef,\n  useEffect = React.useEffect,\n  useMemo = React.useMemo,\n  useDebugValue = React.useDebugValue;\nexports.useSyncExternalStoreWithSelector = function (\n  subscribe,\n  getSnapshot,\n  getServerSnapshot,\n  selector,\n  isEqual\n) {\n  var instRef = useRef(null);\n  if (null === instRef.current) {\n    var inst = { hasValue: !1, value: null };\n    instRef.current = inst;\n  } else inst = instRef.current;\n  instRef = useMemo(\n    function () {\n      function memoizedSelector(nextSnapshot) {\n        if (!hasMemo) {\n          hasMemo = !0;\n          memoizedSnapshot = nextSnapshot;\n          nextSnapshot = selector(nextSnapshot);\n          if (void 0 !== isEqual && inst.hasValue) {\n            var currentSelection = inst.value;\n            if (isEqual(currentSelection, nextSnapshot))\n              return (memoizedSelection = currentSelection);\n          }\n          return (memoizedSelection = nextSnapshot);\n        }\n        currentSelection = memoizedSelection;\n        if (objectIs(memoizedSnapshot, nextSnapshot)) return currentSelection;\n        var nextSelection = selector(nextSnapshot);\n        if (void 0 !== isEqual && isEqual(currentSelection, nextSelection))\n          return (memoizedSnapshot = nextSnapshot), currentSelection;\n        memoizedSnapshot = nextSnapshot;\n        return (memoizedSelection = nextSelection);\n      }\n      var hasMemo = !1,\n        memoizedSnapshot,\n        memoizedSelection,\n        maybeGetServerSnapshot =\n          void 0 === getServerSnapshot ? null : getServerSnapshot;\n      return [\n        function () {\n          return memoizedSelector(getSnapshot());\n        },\n        null === maybeGetServerSnapshot\n          ? void 0\n          : function () {\n              return memoizedSelector(maybeGetServerSnapshot());\n            }\n      ];\n    },\n    [getSnapshot, getServerSnapshot, selector, isEqual]\n  );\n  var value = useSyncExternalStore(subscribe, instRef[0], instRef[1]);\n  useEffect(\n    function () {\n      inst.hasValue = !0;\n      inst.value = value;\n    },\n    [value]\n  );\n  useDebugValue(value);\n  return value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjE2Mi5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWE7QUFDYixZQUFZLG1CQUFPLENBQUMsSUFBTztBQUMzQixTQUFTLG1CQUFPLENBQUMsSUFBOEI7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUvY2pzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlLXNoaW0vd2l0aC1zZWxlY3Rvci5wcm9kdWN0aW9uLmpzPzU4YjIiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZSBSZWFjdFxuICogdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUtc2hpbS93aXRoLXNlbGVjdG9yLnByb2R1Y3Rpb24uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cblwidXNlIHN0cmljdFwiO1xudmFyIFJlYWN0ID0gcmVxdWlyZShcInJlYWN0XCIpLFxuICBzaGltID0gcmVxdWlyZShcInVzZS1zeW5jLWV4dGVybmFsLXN0b3JlL3NoaW1cIik7XG5mdW5jdGlvbiBpcyh4LCB5KSB7XG4gIHJldHVybiAoeCA9PT0geSAmJiAoMCAhPT0geCB8fCAxIC8geCA9PT0gMSAvIHkpKSB8fCAoeCAhPT0geCAmJiB5ICE9PSB5KTtcbn1cbnZhciBvYmplY3RJcyA9IFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIE9iamVjdC5pcyA/IE9iamVjdC5pcyA6IGlzLFxuICB1c2VTeW5jRXh0ZXJuYWxTdG9yZSA9IHNoaW0udXNlU3luY0V4dGVybmFsU3RvcmUsXG4gIHVzZVJlZiA9IFJlYWN0LnVzZVJlZixcbiAgdXNlRWZmZWN0ID0gUmVhY3QudXNlRWZmZWN0LFxuICB1c2VNZW1vID0gUmVhY3QudXNlTWVtbyxcbiAgdXNlRGVidWdWYWx1ZSA9IFJlYWN0LnVzZURlYnVnVmFsdWU7XG5leHBvcnRzLnVzZVN5bmNFeHRlcm5hbFN0b3JlV2l0aFNlbGVjdG9yID0gZnVuY3Rpb24gKFxuICBzdWJzY3JpYmUsXG4gIGdldFNuYXBzaG90LFxuICBnZXRTZXJ2ZXJTbmFwc2hvdCxcbiAgc2VsZWN0b3IsXG4gIGlzRXF1YWxcbikge1xuICB2YXIgaW5zdFJlZiA9IHVzZVJlZihudWxsKTtcbiAgaWYgKG51bGwgPT09IGluc3RSZWYuY3VycmVudCkge1xuICAgIHZhciBpbnN0ID0geyBoYXNWYWx1ZTogITEsIHZhbHVlOiBudWxsIH07XG4gICAgaW5zdFJlZi5jdXJyZW50ID0gaW5zdDtcbiAgfSBlbHNlIGluc3QgPSBpbnN0UmVmLmN1cnJlbnQ7XG4gIGluc3RSZWYgPSB1c2VNZW1vKFxuICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZ1bmN0aW9uIG1lbW9pemVkU2VsZWN0b3IobmV4dFNuYXBzaG90KSB7XG4gICAgICAgIGlmICghaGFzTWVtbykge1xuICAgICAgICAgIGhhc01lbW8gPSAhMDtcbiAgICAgICAgICBtZW1vaXplZFNuYXBzaG90ID0gbmV4dFNuYXBzaG90O1xuICAgICAgICAgIG5leHRTbmFwc2hvdCA9IHNlbGVjdG9yKG5leHRTbmFwc2hvdCk7XG4gICAgICAgICAgaWYgKHZvaWQgMCAhPT0gaXNFcXVhbCAmJiBpbnN0Lmhhc1ZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgY3VycmVudFNlbGVjdGlvbiA9IGluc3QudmFsdWU7XG4gICAgICAgICAgICBpZiAoaXNFcXVhbChjdXJyZW50U2VsZWN0aW9uLCBuZXh0U25hcHNob3QpKVxuICAgICAgICAgICAgICByZXR1cm4gKG1lbW9pemVkU2VsZWN0aW9uID0gY3VycmVudFNlbGVjdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAobWVtb2l6ZWRTZWxlY3Rpb24gPSBuZXh0U25hcHNob3QpO1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnRTZWxlY3Rpb24gPSBtZW1vaXplZFNlbGVjdGlvbjtcbiAgICAgICAgaWYgKG9iamVjdElzKG1lbW9pemVkU25hcHNob3QsIG5leHRTbmFwc2hvdCkpIHJldHVybiBjdXJyZW50U2VsZWN0aW9uO1xuICAgICAgICB2YXIgbmV4dFNlbGVjdGlvbiA9IHNlbGVjdG9yKG5leHRTbmFwc2hvdCk7XG4gICAgICAgIGlmICh2b2lkIDAgIT09IGlzRXF1YWwgJiYgaXNFcXVhbChjdXJyZW50U2VsZWN0aW9uLCBuZXh0U2VsZWN0aW9uKSlcbiAgICAgICAgICByZXR1cm4gKG1lbW9pemVkU25hcHNob3QgPSBuZXh0U25hcHNob3QpLCBjdXJyZW50U2VsZWN0aW9uO1xuICAgICAgICBtZW1vaXplZFNuYXBzaG90ID0gbmV4dFNuYXBzaG90O1xuICAgICAgICByZXR1cm4gKG1lbW9pemVkU2VsZWN0aW9uID0gbmV4dFNlbGVjdGlvbik7XG4gICAgICB9XG4gICAgICB2YXIgaGFzTWVtbyA9ICExLFxuICAgICAgICBtZW1vaXplZFNuYXBzaG90LFxuICAgICAgICBtZW1vaXplZFNlbGVjdGlvbixcbiAgICAgICAgbWF5YmVHZXRTZXJ2ZXJTbmFwc2hvdCA9XG4gICAgICAgICAgdm9pZCAwID09PSBnZXRTZXJ2ZXJTbmFwc2hvdCA/IG51bGwgOiBnZXRTZXJ2ZXJTbmFwc2hvdDtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gbWVtb2l6ZWRTZWxlY3RvcihnZXRTbmFwc2hvdCgpKTtcbiAgICAgICAgfSxcbiAgICAgICAgbnVsbCA9PT0gbWF5YmVHZXRTZXJ2ZXJTbmFwc2hvdFxuICAgICAgICAgID8gdm9pZCAwXG4gICAgICAgICAgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBtZW1vaXplZFNlbGVjdG9yKG1heWJlR2V0U2VydmVyU25hcHNob3QoKSk7XG4gICAgICAgICAgICB9XG4gICAgICBdO1xuICAgIH0sXG4gICAgW2dldFNuYXBzaG90LCBnZXRTZXJ2ZXJTbmFwc2hvdCwgc2VsZWN0b3IsIGlzRXF1YWxdXG4gICk7XG4gIHZhciB2YWx1ZSA9IHVzZVN5bmNFeHRlcm5hbFN0b3JlKHN1YnNjcmliZSwgaW5zdFJlZlswXSwgaW5zdFJlZlsxXSk7XG4gIHVzZUVmZmVjdChcbiAgICBmdW5jdGlvbiAoKSB7XG4gICAgICBpbnN0Lmhhc1ZhbHVlID0gITA7XG4gICAgICBpbnN0LnZhbHVlID0gdmFsdWU7XG4gICAgfSxcbiAgICBbdmFsdWVdXG4gICk7XG4gIHVzZURlYnVnVmFsdWUodmFsdWUpO1xuICByZXR1cm4gdmFsdWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2162\n')},2221:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   b: () => (/* binding */ useDefaultProps)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1594);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _mui_utils_resolveProps__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7379);\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4848);\n'use client';\n\n\n\n\n\nconst PropsContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext(undefined);\nfunction DefaultPropsProvider({\n  value,\n  children\n}) {\n  return /*#__PURE__*/_jsx(PropsContext.Provider, {\n    value: value,\n    children: children\n  });\n}\n false ? 0 : void 0;\nfunction getThemeProps(params) {\n  const {\n    theme,\n    name,\n    props\n  } = params;\n  if (!theme || !theme.components || !theme.components[name]) {\n    return props;\n  }\n  const config = theme.components[name];\n  if (config.defaultProps) {\n    // compatible with v5 signature\n    return (0,_mui_utils_resolveProps__WEBPACK_IMPORTED_MODULE_2__/* [\"default\"] */ .A)(config.defaultProps, props);\n  }\n  if (!config.styleOverrides && !config.variants) {\n    // v6 signature, no property 'defaultProps'\n    return (0,_mui_utils_resolveProps__WEBPACK_IMPORTED_MODULE_2__/* [\"default\"] */ .A)(config, props);\n  }\n  return props;\n}\nfunction useDefaultProps({\n  props,\n  name\n}) {\n  const ctx = react__WEBPACK_IMPORTED_MODULE_0__.useContext(PropsContext);\n  return getThemeProps({\n    props,\n    name,\n    theme: {\n      components: ctx\n    }\n  });\n}\n/* unused harmony default export */ var __WEBPACK_DEFAULT_EXPORT__ = ((/* unused pure expression or super */ null && (DefaultPropsProvider)));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjIyMS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBRStCO0FBQ0k7QUFDZ0I7QUFDSDtBQUNoRCxrQ0FBa0MsZ0RBQW1CO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxNQUFxQyxHQUFHLENBYXZDLENBQUM7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsNEVBQVk7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsV0FBVyw0RUFBWTtBQUN2QjtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsY0FBYyw2Q0FBZ0I7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0Esc0VBQWUsb0VBQW9CIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL0RlZmF1bHRQcm9wc1Byb3ZpZGVyL0RlZmF1bHRQcm9wc1Byb3ZpZGVyLmpzPzhjMGEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHJlc29sdmVQcm9wcyBmcm9tICdAbXVpL3V0aWxzL3Jlc29sdmVQcm9wcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgUHJvcHNDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQodW5kZWZpbmVkKTtcbmZ1bmN0aW9uIERlZmF1bHRQcm9wc1Byb3ZpZGVyKHtcbiAgdmFsdWUsXG4gIGNoaWxkcmVuXG59KSB7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChQcm9wc0NvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogdmFsdWUsXG4gICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gIH0pO1xufVxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gRGVmYXVsdFByb3BzUHJvdmlkZXIucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBUeXBlU2NyaXB0IHR5cGVzIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4g4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5vYmplY3Rcbn0gOiB2b2lkIDA7XG5mdW5jdGlvbiBnZXRUaGVtZVByb3BzKHBhcmFtcykge1xuICBjb25zdCB7XG4gICAgdGhlbWUsXG4gICAgbmFtZSxcbiAgICBwcm9wc1xuICB9ID0gcGFyYW1zO1xuICBpZiAoIXRoZW1lIHx8ICF0aGVtZS5jb21wb25lbnRzIHx8ICF0aGVtZS5jb21wb25lbnRzW25hbWVdKSB7XG4gICAgcmV0dXJuIHByb3BzO1xuICB9XG4gIGNvbnN0IGNvbmZpZyA9IHRoZW1lLmNvbXBvbmVudHNbbmFtZV07XG4gIGlmIChjb25maWcuZGVmYXVsdFByb3BzKSB7XG4gICAgLy8gY29tcGF0aWJsZSB3aXRoIHY1IHNpZ25hdHVyZVxuICAgIHJldHVybiByZXNvbHZlUHJvcHMoY29uZmlnLmRlZmF1bHRQcm9wcywgcHJvcHMpO1xuICB9XG4gIGlmICghY29uZmlnLnN0eWxlT3ZlcnJpZGVzICYmICFjb25maWcudmFyaWFudHMpIHtcbiAgICAvLyB2NiBzaWduYXR1cmUsIG5vIHByb3BlcnR5ICdkZWZhdWx0UHJvcHMnXG4gICAgcmV0dXJuIHJlc29sdmVQcm9wcyhjb25maWcsIHByb3BzKTtcbiAgfVxuICByZXR1cm4gcHJvcHM7XG59XG5leHBvcnQgZnVuY3Rpb24gdXNlRGVmYXVsdFByb3BzKHtcbiAgcHJvcHMsXG4gIG5hbWVcbn0pIHtcbiAgY29uc3QgY3R4ID0gUmVhY3QudXNlQ29udGV4dChQcm9wc0NvbnRleHQpO1xuICByZXR1cm4gZ2V0VGhlbWVQcm9wcyh7XG4gICAgcHJvcHMsXG4gICAgbmFtZSxcbiAgICB0aGVtZToge1xuICAgICAgY29tcG9uZW50czogY3R4XG4gICAgfVxuICB9KTtcbn1cbmV4cG9ydCBkZWZhdWx0IERlZmF1bHRQcm9wc1Byb3ZpZGVyOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2221\n")},2255:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval('var __webpack_unused_export__;\n\n"use client";\n\nvar _interopRequireDefault = __webpack_require__(4994);\n__webpack_unused_export__ = ({\n  value: true\n});\nexports.A = void 0;\nvar _createSvgIcon = _interopRequireDefault(__webpack_require__(2032));\nvar _jsxRuntime = __webpack_require__(4848);\nvar _default = exports.A = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)("path", {\n  d: "M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2m0 14H6l-2 2V4h16z"\n}), \'ChatBubbleOutline\');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjI1NS5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYjs7QUFFQSw2QkFBNkIsbUJBQU8sQ0FBQyxJQUE4QztBQUNuRiw2QkFBNkM7QUFDN0M7QUFDQSxDQUFDLENBQUM7QUFDRixTQUFlO0FBQ2YsNENBQTRDLG1CQUFPLENBQUMsSUFBdUI7QUFDM0Usa0JBQWtCLG1CQUFPLENBQUMsSUFBbUI7QUFDN0MsZUFBZSxTQUFlO0FBQzlCO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvaWNvbnMtbWF0ZXJpYWwvQ2hhdEJ1YmJsZU91dGxpbmUuanM/NTk5MyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblwidXNlIGNsaWVudFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX2NyZWF0ZVN2Z0ljb24gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3V0aWxzL2NyZWF0ZVN2Z0ljb25cIikpO1xudmFyIF9qc3hSdW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gKDAsIF9jcmVhdGVTdmdJY29uLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovKDAsIF9qc3hSdW50aW1lLmpzeCkoXCJwYXRoXCIsIHtcbiAgZDogXCJNMjAgMkg0Yy0xLjEgMC0yIC45LTIgMnYxOGw0LTRoMTRjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMm0wIDE0SDZsLTIgMlY0aDE2elwiXG59KSwgJ0NoYXRCdWJibGVPdXRsaW5lJyk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2255\n')},2325:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   A: () => (/* binding */ ownerDocument)\n/* harmony export */ });\nfunction ownerDocument(node) {\n  return node && node.ownerDocument || document;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjMyNS5qcyIsIm1hcHBpbmdzIjoiOzs7QUFBZTtBQUNmO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2VzbS9vd25lckRvY3VtZW50L293bmVyRG9jdW1lbnQuanM/YTc4OSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBvd25lckRvY3VtZW50KG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUgJiYgbm9kZS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50O1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2325\n")},2501:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   A: () => (/* binding */ useControlled)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1594);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n'use client';\n\n/* eslint-disable react-hooks/rules-of-hooks, react-hooks/exhaustive-deps */\n\nfunction useControlled({\n  controlled,\n  default: defaultProp,\n  name,\n  state = 'value'\n}) {\n  // isControlled is ignored in the hook dependency lists as it should never change.\n  const {\n    current: isControlled\n  } = react__WEBPACK_IMPORTED_MODULE_0__.useRef(controlled !== undefined);\n  const [valueState, setValue] = react__WEBPACK_IMPORTED_MODULE_0__.useState(defaultProp);\n  const value = isControlled ? controlled : valueState;\n  if (false) // removed by dead control flow\n{}\n  const setValueIfUncontrolled = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(newValue => {\n    if (!isControlled) {\n      setValue(newValue);\n    }\n  }, []);\n  return [value, setValueIfUncontrolled];\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjUwMS5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFBOztBQUVBO0FBQytCO0FBQ2hCO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsSUFBSSxFQUFFLHlDQUFZO0FBQ2xCLGlDQUFpQywyQ0FBYztBQUMvQztBQUNBLE1BQU0sS0FBcUMsRUFBRTtBQUFBLEVBYzFDO0FBQ0gsaUNBQWlDLDhDQUFpQjtBQUNsRDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL3VzZUNvbnRyb2xsZWQvdXNlQ29udHJvbGxlZC5qcz85NWUwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuLyogZXNsaW50LWRpc2FibGUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3MsIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwcyAqL1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlQ29udHJvbGxlZCh7XG4gIGNvbnRyb2xsZWQsXG4gIGRlZmF1bHQ6IGRlZmF1bHRQcm9wLFxuICBuYW1lLFxuICBzdGF0ZSA9ICd2YWx1ZSdcbn0pIHtcbiAgLy8gaXNDb250cm9sbGVkIGlzIGlnbm9yZWQgaW4gdGhlIGhvb2sgZGVwZW5kZW5jeSBsaXN0cyBhcyBpdCBzaG91bGQgbmV2ZXIgY2hhbmdlLlxuICBjb25zdCB7XG4gICAgY3VycmVudDogaXNDb250cm9sbGVkXG4gIH0gPSBSZWFjdC51c2VSZWYoY29udHJvbGxlZCAhPT0gdW5kZWZpbmVkKTtcbiAgY29uc3QgW3ZhbHVlU3RhdGUsIHNldFZhbHVlXSA9IFJlYWN0LnVzZVN0YXRlKGRlZmF1bHRQcm9wKTtcbiAgY29uc3QgdmFsdWUgPSBpc0NvbnRyb2xsZWQgPyBjb250cm9sbGVkIDogdmFsdWVTdGF0ZTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKGlzQ29udHJvbGxlZCAhPT0gKGNvbnRyb2xsZWQgIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbYE1VSTogQSBjb21wb25lbnQgaXMgY2hhbmdpbmcgdGhlICR7aXNDb250cm9sbGVkID8gJycgOiAndW4nfWNvbnRyb2xsZWQgJHtzdGF0ZX0gc3RhdGUgb2YgJHtuYW1lfSB0byBiZSAke2lzQ29udHJvbGxlZCA/ICd1bicgOiAnJ31jb250cm9sbGVkLmAsICdFbGVtZW50cyBzaG91bGQgbm90IHN3aXRjaCBmcm9tIHVuY29udHJvbGxlZCB0byBjb250cm9sbGVkIChvciB2aWNlIHZlcnNhKS4nLCBgRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCAke25hbWV9IGAgKyAnZWxlbWVudCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBjb21wb25lbnQuJywgXCJUaGUgbmF0dXJlIG9mIHRoZSBzdGF0ZSBpcyBkZXRlcm1pbmVkIGR1cmluZyB0aGUgZmlyc3QgcmVuZGVyLiBJdCdzIGNvbnNpZGVyZWQgY29udHJvbGxlZCBpZiB0aGUgdmFsdWUgaXMgbm90IGB1bmRlZmluZWRgLlwiLCAnTW9yZSBpbmZvOiBodHRwczovL2ZiLm1lL3JlYWN0LWNvbnRyb2xsZWQtY29tcG9uZW50cyddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9LCBbc3RhdGUsIG5hbWUsIGNvbnRyb2xsZWRdKTtcbiAgICBjb25zdCB7XG4gICAgICBjdXJyZW50OiBkZWZhdWx0VmFsdWVcbiAgICB9ID0gUmVhY3QudXNlUmVmKGRlZmF1bHRQcm9wKTtcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKCFpc0NvbnRyb2xsZWQgJiYgIU9iamVjdC5pcyhkZWZhdWx0VmFsdWUsIGRlZmF1bHRQcm9wKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFtgTVVJOiBBIGNvbXBvbmVudCBpcyBjaGFuZ2luZyB0aGUgZGVmYXVsdCAke3N0YXRlfSBzdGF0ZSBvZiBhbiB1bmNvbnRyb2xsZWQgJHtuYW1lfSBhZnRlciBiZWluZyBpbml0aWFsaXplZC4gYCArIGBUbyBzdXBwcmVzcyB0aGlzIHdhcm5pbmcgb3B0IHRvIHVzZSBhIGNvbnRyb2xsZWQgJHtuYW1lfS5gXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfSwgW0pTT04uc3RyaW5naWZ5KGRlZmF1bHRQcm9wKV0pO1xuICB9XG4gIGNvbnN0IHNldFZhbHVlSWZVbmNvbnRyb2xsZWQgPSBSZWFjdC51c2VDYWxsYmFjayhuZXdWYWx1ZSA9PiB7XG4gICAgaWYgKCFpc0NvbnRyb2xsZWQpIHtcbiAgICAgIHNldFZhbHVlKG5ld1ZhbHVlKTtcbiAgICB9XG4gIH0sIFtdKTtcbiAgcmV0dXJuIFt2YWx1ZSwgc2V0VmFsdWVJZlVuY29udHJvbGxlZF07XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2501\n")},2532:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n  GlobalStyles: () => (/* reexport */ GlobalStyles/* default */.A),\n  StyledEngineProvider: () => (/* reexport */ StyledEngineProvider),\n  ThemeContext: () => (/* reexport */ emotion_element_f0de968e_browser_esm.T),\n  css: () => (/* reexport */ emotion_react_browser_esm/* css */.AH),\n  \"default\": () => (/* binding */ styled_engine_styled),\n  internal_processStyles: () => (/* binding */ internal_processStyles),\n  keyframes: () => (/* reexport */ emotion_react_browser_esm/* keyframes */.i7)\n});\n\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/extends.js\nvar esm_extends = __webpack_require__(8168);\n// EXTERNAL MODULE: ./node_modules/@emotion/react/dist/emotion-element-f0de968e.browser.esm.js\nvar emotion_element_f0de968e_browser_esm = __webpack_require__(4684);\n// EXTERNAL MODULE: ./node_modules/@emotion/serialize/dist/emotion-serialize.esm.js + 2 modules\nvar emotion_serialize_esm = __webpack_require__(3174);\n// EXTERNAL MODULE: ./node_modules/@emotion/use-insertion-effect-with-fallbacks/dist/emotion-use-insertion-effect-with-fallbacks.browser.esm.js\nvar emotion_use_insertion_effect_with_fallbacks_browser_esm = __webpack_require__(1287);\n// EXTERNAL MODULE: ./node_modules/@emotion/utils/dist/emotion-utils.browser.esm.js\nvar emotion_utils_browser_esm = __webpack_require__(41);\n// EXTERNAL MODULE: external \"React\"\nvar external_React_ = __webpack_require__(1594);\n// EXTERNAL MODULE: ./node_modules/@emotion/memoize/dist/emotion-memoize.esm.js\nvar emotion_memoize_esm = __webpack_require__(6289);\n;// ./node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.esm.js\n\n\n// eslint-disable-next-line no-undef\nvar reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|disableRemotePlayback|download|draggable|encType|enterKeyHint|fetchpriority|fetchPriority|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23\n\nvar isPropValid = /* #__PURE__ */(0,emotion_memoize_esm/* default */.A)(function (prop) {\n  return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111\n  /* o */\n  && prop.charCodeAt(1) === 110\n  /* n */\n  && prop.charCodeAt(2) < 91;\n}\n/* Z+1 */\n);\n\n\n\n;// ./node_modules/@emotion/styled/base/dist/emotion-styled-base.browser.esm.js\n\n\n\n\n\n\n\n\nvar isDevelopment = false;\n\nvar testOmitPropsOnStringTag = isPropValid;\n\nvar testOmitPropsOnComponent = function testOmitPropsOnComponent(key) {\n  return key !== 'theme';\n};\n\nvar getDefaultShouldForwardProp = function getDefaultShouldForwardProp(tag) {\n  return typeof tag === 'string' && // 96 is one less than the char code\n  // for \"a\" so this is checking that\n  // it's a lowercase character\n  tag.charCodeAt(0) > 96 ? testOmitPropsOnStringTag : testOmitPropsOnComponent;\n};\nvar composeShouldForwardProps = function composeShouldForwardProps(tag, options, isReal) {\n  var shouldForwardProp;\n\n  if (options) {\n    var optionsShouldForwardProp = options.shouldForwardProp;\n    shouldForwardProp = tag.__emotion_forwardProp && optionsShouldForwardProp ? function (propName) {\n      return tag.__emotion_forwardProp(propName) && optionsShouldForwardProp(propName);\n    } : optionsShouldForwardProp;\n  }\n\n  if (typeof shouldForwardProp !== 'function' && isReal) {\n    shouldForwardProp = tag.__emotion_forwardProp;\n  }\n\n  return shouldForwardProp;\n};\n\nvar Insertion = function Insertion(_ref) {\n  var cache = _ref.cache,\n      serialized = _ref.serialized,\n      isStringTag = _ref.isStringTag;\n  (0,emotion_utils_browser_esm/* registerStyles */.SF)(cache, serialized, isStringTag);\n  (0,emotion_use_insertion_effect_with_fallbacks_browser_esm/* useInsertionEffectAlwaysWithSyncFallback */.s)(function () {\n    return (0,emotion_utils_browser_esm/* insertStyles */.sk)(cache, serialized, isStringTag);\n  });\n\n  return null;\n};\n\nvar createStyled = function createStyled(tag, options) {\n\n  var isReal = tag.__emotion_real === tag;\n  var baseTag = isReal && tag.__emotion_base || tag;\n  var identifierName;\n  var targetClassName;\n\n  if (options !== undefined) {\n    identifierName = options.label;\n    targetClassName = options.target;\n  }\n\n  var shouldForwardProp = composeShouldForwardProps(tag, options, isReal);\n  var defaultShouldForwardProp = shouldForwardProp || getDefaultShouldForwardProp(baseTag);\n  var shouldUseAs = !defaultShouldForwardProp('as');\n  return function () {\n    // eslint-disable-next-line prefer-rest-params\n    var args = arguments;\n    var styles = isReal && tag.__emotion_styles !== undefined ? tag.__emotion_styles.slice(0) : [];\n\n    if (identifierName !== undefined) {\n      styles.push(\"label:\" + identifierName + \";\");\n    }\n\n    if (args[0] == null || args[0].raw === undefined) {\n      // eslint-disable-next-line prefer-spread\n      styles.push.apply(styles, args);\n    } else {\n      var templateStringsArr = args[0];\n\n      styles.push(templateStringsArr[0]);\n      var len = args.length;\n      var i = 1;\n\n      for (; i < len; i++) {\n\n        styles.push(args[i], templateStringsArr[i]);\n      }\n    }\n\n    var Styled = (0,emotion_element_f0de968e_browser_esm.w)(function (props, cache, ref) {\n      var FinalTag = shouldUseAs && props.as || baseTag;\n      var className = '';\n      var classInterpolations = [];\n      var mergedProps = props;\n\n      if (props.theme == null) {\n        mergedProps = {};\n\n        for (var key in props) {\n          mergedProps[key] = props[key];\n        }\n\n        mergedProps.theme = external_React_.useContext(emotion_element_f0de968e_browser_esm.T);\n      }\n\n      if (typeof props.className === 'string') {\n        className = (0,emotion_utils_browser_esm/* getRegisteredStyles */.Rk)(cache.registered, classInterpolations, props.className);\n      } else if (props.className != null) {\n        className = props.className + \" \";\n      }\n\n      var serialized = (0,emotion_serialize_esm/* serializeStyles */.J)(styles.concat(classInterpolations), cache.registered, mergedProps);\n      className += cache.key + \"-\" + serialized.name;\n\n      if (targetClassName !== undefined) {\n        className += \" \" + targetClassName;\n      }\n\n      var finalShouldForwardProp = shouldUseAs && shouldForwardProp === undefined ? getDefaultShouldForwardProp(FinalTag) : defaultShouldForwardProp;\n      var newProps = {};\n\n      for (var _key in props) {\n        if (shouldUseAs && _key === 'as') continue;\n\n        if (finalShouldForwardProp(_key)) {\n          newProps[_key] = props[_key];\n        }\n      }\n\n      newProps.className = className;\n\n      if (ref) {\n        newProps.ref = ref;\n      }\n\n      return /*#__PURE__*/external_React_.createElement(external_React_.Fragment, null, /*#__PURE__*/external_React_.createElement(Insertion, {\n        cache: cache,\n        serialized: serialized,\n        isStringTag: typeof FinalTag === 'string'\n      }), /*#__PURE__*/external_React_.createElement(FinalTag, newProps));\n    });\n    Styled.displayName = identifierName !== undefined ? identifierName : \"Styled(\" + (typeof baseTag === 'string' ? baseTag : baseTag.displayName || baseTag.name || 'Component') + \")\";\n    Styled.defaultProps = tag.defaultProps;\n    Styled.__emotion_real = Styled;\n    Styled.__emotion_base = baseTag;\n    Styled.__emotion_styles = styles;\n    Styled.__emotion_forwardProp = shouldForwardProp;\n    Object.defineProperty(Styled, 'toString', {\n      value: function value() {\n        if (targetClassName === undefined && isDevelopment) {\n          return 'NO_COMPONENT_SELECTOR';\n        }\n\n        return \".\" + targetClassName;\n      }\n    });\n\n    Styled.withComponent = function (nextTag, nextOptions) {\n      var newStyled = createStyled(nextTag, (0,esm_extends/* default */.A)({}, options, nextOptions, {\n        shouldForwardProp: composeShouldForwardProps(Styled, nextOptions, true)\n      }));\n      return newStyled.apply(void 0, styles);\n    };\n\n    return Styled;\n  };\n};\n\n\n\n;// ./node_modules/@emotion/styled/dist/emotion-styled.browser.esm.js\n\n\n\n\n\n\n\n\n\nvar tags = ['a', 'abbr', 'address', 'area', 'article', 'aside', 'audio', 'b', 'base', 'bdi', 'bdo', 'big', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'cite', 'code', 'col', 'colgroup', 'data', 'datalist', 'dd', 'del', 'details', 'dfn', 'dialog', 'div', 'dl', 'dt', 'em', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'iframe', 'img', 'input', 'ins', 'kbd', 'keygen', 'label', 'legend', 'li', 'link', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meta', 'meter', 'nav', 'noscript', 'object', 'ol', 'optgroup', 'option', 'output', 'p', 'param', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'script', 'section', 'select', 'small', 'source', 'span', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'textarea', 'tfoot', 'th', 'thead', 'time', 'title', 'tr', 'track', 'u', 'ul', 'var', 'video', 'wbr', // SVG\n'circle', 'clipPath', 'defs', 'ellipse', 'foreignObject', 'g', 'image', 'line', 'linearGradient', 'mask', 'path', 'pattern', 'polygon', 'polyline', 'radialGradient', 'rect', 'stop', 'svg', 'text', 'tspan'];\n\n// bind it to avoid mutating the original function\nvar styled = createStyled.bind(null);\ntags.forEach(function (tagName) {\n  styled[tagName] = styled(tagName);\n});\n\n\n\n// EXTERNAL MODULE: ./node_modules/@emotion/react/dist/emotion-react.browser.esm.js\nvar emotion_react_browser_esm = __webpack_require__(7437);\n// EXTERNAL MODULE: ./node_modules/@emotion/cache/dist/emotion-cache.browser.esm.js + 7 modules\nvar emotion_cache_browser_esm = __webpack_require__(5655);\n// EXTERNAL MODULE: ./node_modules/react/jsx-runtime.js\nvar jsx_runtime = __webpack_require__(4848);\n;// ./node_modules/@mui/styled-engine/StyledEngineProvider/StyledEngineProvider.js\n'use client';\n\n\n\n\n\n\n// prepend: true moves MUI styles to the top of the <head> so they're loaded first.\n// It allows developers to easily override MUI styles with other styling solutions, like CSS modules.\n\nlet cache;\nif (typeof document === 'object') {\n  cache = (0,emotion_cache_browser_esm/* default */.A)({\n    key: 'css',\n    prepend: true\n  });\n}\nfunction StyledEngineProvider(props) {\n  const {\n    injectFirst,\n    children\n  } = props;\n  return injectFirst && cache ? /*#__PURE__*/(0,jsx_runtime.jsx)(emotion_element_f0de968e_browser_esm.C, {\n    value: cache,\n    children: children\n  }) : children;\n}\n false ? 0 : void 0;\n// EXTERNAL MODULE: ./node_modules/@mui/styled-engine/GlobalStyles/GlobalStyles.js\nvar GlobalStyles = __webpack_require__(9940);\n;// ./node_modules/@mui/styled-engine/index.js\n/**\n * @mui/styled-engine v5.16.14\n *\n * @license MIT\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use client';\n\n/* eslint-disable no-underscore-dangle */\n\nfunction styled_engine_styled(tag, options) {\n  const stylesFactory = styled(tag, options);\n  if (false) // removed by dead control flow\n{}\n  return stylesFactory;\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nconst internal_processStyles = (tag, processor) => {\n  // Emotion attaches all the styles as `__emotion_styles`.\n  // Ref: https://github.com/emotion-js/emotion/blob/16d971d0da229596d6bcc39d282ba9753c9ee7cf/packages/styled/src/base.js#L186\n  if (Array.isArray(tag.__emotion_styles)) {\n    tag.__emotion_styles = processor(tag.__emotion_styles);\n  }\n};\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjUzMi5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUF1Qzs7QUFFdkM7QUFDQSw2aElBQTZoSTs7QUFFN2hJLGlDQUFpQyxzQ0FBTztBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVrQzs7O0FDZndCO0FBQ007QUFDWDtBQUNtRDtBQUNyQjtBQUNwRDtBQUNrQjs7QUFFakQ7O0FBRUEsK0JBQStCLFdBQVc7O0FBRTFDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxvREFBYztBQUNoQixFQUFFLDJHQUF3QztBQUMxQyxXQUFXLGtEQUFZO0FBQ3ZCLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGdEQUFnRDtBQUNoRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQTtBQUNBOztBQUVBLGFBQWEsU0FBUzs7QUFFdEI7QUFDQTtBQUNBOztBQUVBLGlCQUFpQiwwQ0FBZ0I7QUFDakM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsNEJBQTRCLDBCQUFnQixDQUFDLHNDQUFZO0FBQ3pEOztBQUVBO0FBQ0Esb0JBQW9CLHlEQUFtQjtBQUN2QyxRQUFRO0FBQ1I7QUFDQTs7QUFFQSx1QkFBdUIsZ0RBQWU7QUFDdEM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsMEJBQTBCLDZCQUFtQixDQUFDLHdCQUFjLHFCQUFxQiw2QkFBbUI7QUFDcEc7QUFDQTtBQUNBO0FBQ0EsT0FBTyxnQkFBZ0IsNkJBQW1CO0FBQzFDLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsNENBQTRDLDhCQUFRLEdBQUc7QUFDdkQ7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRW1DOzs7QUMxS3dDO0FBQ25DO0FBQ2hCO0FBQ0k7QUFDMEI7QUFDOUI7QUFDVDtBQUNpQjs7QUFFaEM7QUFDQTs7QUFFQTtBQUNBLGFBQWEsWUFBWTtBQUN6QjtBQUNBO0FBQ0EsQ0FBQzs7QUFFNEI7Ozs7Ozs7OztBQ2xCN0I7O0FBRStCO0FBQ0k7QUFDWTtBQUNOOztBQUV6QztBQUNBO0FBQ2dEO0FBQ2hEO0FBQ0E7QUFDQSxVQUFVLDRDQUFXO0FBQ3JCO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDZTtBQUNmO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSiw2Q0FBNkMsbUJBQUksQ0FBQyxzQ0FBYTtBQUMvRDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsTUFBcUMsR0FBRyxDQVd2QyxDQUFDLFM7Ozs7QUN0Q0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUN1QztBQUN4QixTQUFTLG9CQUFNO0FBQzlCLHdCQUF3QixNQUFRO0FBQ2hDLE1BQU0sS0FBcUMsRUFBRTtBQUFBLEVBVTFDO0FBQ0g7QUFDQTs7QUFFQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQzhEO0FBQ1ciLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9pcy1wcm9wLXZhbGlkL2Rpc3QvZW1vdGlvbi1pcy1wcm9wLXZhbGlkLmVzbS5qcz85MjkzIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3N0eWxlZC9iYXNlL2Rpc3QvZW1vdGlvbi1zdHlsZWQtYmFzZS5icm93c2VyLmVzbS5qcz8wZDk3Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3N0eWxlZC9kaXN0L2Vtb3Rpb24tc3R5bGVkLmJyb3dzZXIuZXNtLmpzP2U1MjEiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9zdHlsZWQtZW5naW5lL1N0eWxlZEVuZ2luZVByb3ZpZGVyL1N0eWxlZEVuZ2luZVByb3ZpZGVyLmpzPzU5ZjUiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9zdHlsZWQtZW5naW5lL2luZGV4LmpzPzAzMzAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1lbW9pemUgZnJvbSAnQGVtb3Rpb24vbWVtb2l6ZSc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxudmFyIHJlYWN0UHJvcHNSZWdleCA9IC9eKChjaGlsZHJlbnxkYW5nZXJvdXNseVNldElubmVySFRNTHxrZXl8cmVmfGF1dG9Gb2N1c3xkZWZhdWx0VmFsdWV8ZGVmYXVsdENoZWNrZWR8aW5uZXJIVE1MfHN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZ3xzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmd8dmFsdWVMaW5rfGFiYnJ8YWNjZXB0fGFjY2VwdENoYXJzZXR8YWNjZXNzS2V5fGFjdGlvbnxhbGxvd3xhbGxvd1VzZXJNZWRpYXxhbGxvd1BheW1lbnRSZXF1ZXN0fGFsbG93RnVsbFNjcmVlbnxhbGxvd1RyYW5zcGFyZW5jeXxhbHR8YXN5bmN8YXV0b0NvbXBsZXRlfGF1dG9QbGF5fGNhcHR1cmV8Y2VsbFBhZGRpbmd8Y2VsbFNwYWNpbmd8Y2hhbGxlbmdlfGNoYXJTZXR8Y2hlY2tlZHxjaXRlfGNsYXNzSUR8Y2xhc3NOYW1lfGNvbHN8Y29sU3Bhbnxjb250ZW50fGNvbnRlbnRFZGl0YWJsZXxjb250ZXh0TWVudXxjb250cm9sc3xjb250cm9sc0xpc3R8Y29vcmRzfGNyb3NzT3JpZ2lufGRhdGF8ZGF0ZVRpbWV8ZGVjb2Rpbmd8ZGVmYXVsdHxkZWZlcnxkaXJ8ZGlzYWJsZWR8ZGlzYWJsZVBpY3R1cmVJblBpY3R1cmV8ZGlzYWJsZVJlbW90ZVBsYXliYWNrfGRvd25sb2FkfGRyYWdnYWJsZXxlbmNUeXBlfGVudGVyS2V5SGludHxmZXRjaHByaW9yaXR5fGZldGNoUHJpb3JpdHl8Zm9ybXxmb3JtQWN0aW9ufGZvcm1FbmNUeXBlfGZvcm1NZXRob2R8Zm9ybU5vVmFsaWRhdGV8Zm9ybVRhcmdldHxmcmFtZUJvcmRlcnxoZWFkZXJzfGhlaWdodHxoaWRkZW58aGlnaHxocmVmfGhyZWZMYW5nfGh0bWxGb3J8aHR0cEVxdWl2fGlkfGlucHV0TW9kZXxpbnRlZ3JpdHl8aXN8a2V5UGFyYW1zfGtleVR5cGV8a2luZHxsYWJlbHxsYW5nfGxpc3R8bG9hZGluZ3xsb29wfGxvd3xtYXJnaW5IZWlnaHR8bWFyZ2luV2lkdGh8bWF4fG1heExlbmd0aHxtZWRpYXxtZWRpYUdyb3VwfG1ldGhvZHxtaW58bWluTGVuZ3RofG11bHRpcGxlfG11dGVkfG5hbWV8bm9uY2V8bm9WYWxpZGF0ZXxvcGVufG9wdGltdW18cGF0dGVybnxwbGFjZWhvbGRlcnxwbGF5c0lubGluZXxwb3N0ZXJ8cHJlbG9hZHxwcm9maWxlfHJhZGlvR3JvdXB8cmVhZE9ubHl8cmVmZXJyZXJQb2xpY3l8cmVsfHJlcXVpcmVkfHJldmVyc2VkfHJvbGV8cm93c3xyb3dTcGFufHNhbmRib3h8c2NvcGV8c2NvcGVkfHNjcm9sbGluZ3xzZWFtbGVzc3xzZWxlY3RlZHxzaGFwZXxzaXplfHNpemVzfHNsb3R8c3BhbnxzcGVsbENoZWNrfHNyY3xzcmNEb2N8c3JjTGFuZ3xzcmNTZXR8c3RhcnR8c3RlcHxzdHlsZXxzdW1tYXJ5fHRhYkluZGV4fHRhcmdldHx0aXRsZXx0cmFuc2xhdGV8dHlwZXx1c2VNYXB8dmFsdWV8d2lkdGh8d21vZGV8d3JhcHxhYm91dHxkYXRhdHlwZXxpbmxpc3R8cHJlZml4fHByb3BlcnR5fHJlc291cmNlfHR5cGVvZnx2b2NhYnxhdXRvQ2FwaXRhbGl6ZXxhdXRvQ29ycmVjdHxhdXRvU2F2ZXxjb2xvcnxpbmNyZW1lbnRhbHxmYWxsYmFja3xpbmVydHxpdGVtUHJvcHxpdGVtU2NvcGV8aXRlbVR5cGV8aXRlbUlEfGl0ZW1SZWZ8b258b3B0aW9ufHJlc3VsdHN8c2VjdXJpdHl8dW5zZWxlY3RhYmxlfGFjY2VudEhlaWdodHxhY2N1bXVsYXRlfGFkZGl0aXZlfGFsaWdubWVudEJhc2VsaW5lfGFsbG93UmVvcmRlcnxhbHBoYWJldGljfGFtcGxpdHVkZXxhcmFiaWNGb3JtfGFzY2VudHxhdHRyaWJ1dGVOYW1lfGF0dHJpYnV0ZVR5cGV8YXV0b1JldmVyc2V8YXppbXV0aHxiYXNlRnJlcXVlbmN5fGJhc2VsaW5lU2hpZnR8YmFzZVByb2ZpbGV8YmJveHxiZWdpbnxiaWFzfGJ5fGNhbGNNb2RlfGNhcEhlaWdodHxjbGlwfGNsaXBQYXRoVW5pdHN8Y2xpcFBhdGh8Y2xpcFJ1bGV8Y29sb3JJbnRlcnBvbGF0aW9ufGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnN8Y29sb3JQcm9maWxlfGNvbG9yUmVuZGVyaW5nfGNvbnRlbnRTY3JpcHRUeXBlfGNvbnRlbnRTdHlsZVR5cGV8Y3Vyc29yfGN4fGN5fGR8ZGVjZWxlcmF0ZXxkZXNjZW50fGRpZmZ1c2VDb25zdGFudHxkaXJlY3Rpb258ZGlzcGxheXxkaXZpc29yfGRvbWluYW50QmFzZWxpbmV8ZHVyfGR4fGR5fGVkZ2VNb2RlfGVsZXZhdGlvbnxlbmFibGVCYWNrZ3JvdW5kfGVuZHxleHBvbmVudHxleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkfGZpbGx8ZmlsbE9wYWNpdHl8ZmlsbFJ1bGV8ZmlsdGVyfGZpbHRlclJlc3xmaWx0ZXJVbml0c3xmbG9vZENvbG9yfGZsb29kT3BhY2l0eXxmb2N1c2FibGV8Zm9udEZhbWlseXxmb250U2l6ZXxmb250U2l6ZUFkanVzdHxmb250U3RyZXRjaHxmb250U3R5bGV8Zm9udFZhcmlhbnR8Zm9udFdlaWdodHxmb3JtYXR8ZnJvbXxmcnxmeHxmeXxnMXxnMnxnbHlwaE5hbWV8Z2x5cGhPcmllbnRhdGlvbkhvcml6b250YWx8Z2x5cGhPcmllbnRhdGlvblZlcnRpY2FsfGdseXBoUmVmfGdyYWRpZW50VHJhbnNmb3JtfGdyYWRpZW50VW5pdHN8aGFuZ2luZ3xob3JpekFkdlh8aG9yaXpPcmlnaW5YfGlkZW9ncmFwaGljfGltYWdlUmVuZGVyaW5nfGlufGluMnxpbnRlcmNlcHR8a3xrMXxrMnxrM3xrNHxrZXJuZWxNYXRyaXh8a2VybmVsVW5pdExlbmd0aHxrZXJuaW5nfGtleVBvaW50c3xrZXlTcGxpbmVzfGtleVRpbWVzfGxlbmd0aEFkanVzdHxsZXR0ZXJTcGFjaW5nfGxpZ2h0aW5nQ29sb3J8bGltaXRpbmdDb25lQW5nbGV8bG9jYWx8bWFya2VyRW5kfG1hcmtlck1pZHxtYXJrZXJTdGFydHxtYXJrZXJIZWlnaHR8bWFya2VyVW5pdHN8bWFya2VyV2lkdGh8bWFza3xtYXNrQ29udGVudFVuaXRzfG1hc2tVbml0c3xtYXRoZW1hdGljYWx8bW9kZXxudW1PY3RhdmVzfG9mZnNldHxvcGFjaXR5fG9wZXJhdG9yfG9yZGVyfG9yaWVudHxvcmllbnRhdGlvbnxvcmlnaW58b3ZlcmZsb3d8b3ZlcmxpbmVQb3NpdGlvbnxvdmVybGluZVRoaWNrbmVzc3xwYW5vc2UxfHBhaW50T3JkZXJ8cGF0aExlbmd0aHxwYXR0ZXJuQ29udGVudFVuaXRzfHBhdHRlcm5UcmFuc2Zvcm18cGF0dGVyblVuaXRzfHBvaW50ZXJFdmVudHN8cG9pbnRzfHBvaW50c0F0WHxwb2ludHNBdFl8cG9pbnRzQXRafHByZXNlcnZlQWxwaGF8cHJlc2VydmVBc3BlY3RSYXRpb3xwcmltaXRpdmVVbml0c3xyfHJhZGl1c3xyZWZYfHJlZll8cmVuZGVyaW5nSW50ZW50fHJlcGVhdENvdW50fHJlcGVhdER1cnxyZXF1aXJlZEV4dGVuc2lvbnN8cmVxdWlyZWRGZWF0dXJlc3xyZXN0YXJ0fHJlc3VsdHxyb3RhdGV8cnh8cnl8c2NhbGV8c2VlZHxzaGFwZVJlbmRlcmluZ3xzbG9wZXxzcGFjaW5nfHNwZWN1bGFyQ29uc3RhbnR8c3BlY3VsYXJFeHBvbmVudHxzcGVlZHxzcHJlYWRNZXRob2R8c3RhcnRPZmZzZXR8c3RkRGV2aWF0aW9ufHN0ZW1ofHN0ZW12fHN0aXRjaFRpbGVzfHN0b3BDb2xvcnxzdG9wT3BhY2l0eXxzdHJpa2V0aHJvdWdoUG9zaXRpb258c3RyaWtldGhyb3VnaFRoaWNrbmVzc3xzdHJpbmd8c3Ryb2tlfHN0cm9rZURhc2hhcnJheXxzdHJva2VEYXNob2Zmc2V0fHN0cm9rZUxpbmVjYXB8c3Ryb2tlTGluZWpvaW58c3Ryb2tlTWl0ZXJsaW1pdHxzdHJva2VPcGFjaXR5fHN0cm9rZVdpZHRofHN1cmZhY2VTY2FsZXxzeXN0ZW1MYW5ndWFnZXx0YWJsZVZhbHVlc3x0YXJnZXRYfHRhcmdldFl8dGV4dEFuY2hvcnx0ZXh0RGVjb3JhdGlvbnx0ZXh0UmVuZGVyaW5nfHRleHRMZW5ndGh8dG98dHJhbnNmb3JtfHUxfHUyfHVuZGVybGluZVBvc2l0aW9ufHVuZGVybGluZVRoaWNrbmVzc3x1bmljb2RlfHVuaWNvZGVCaWRpfHVuaWNvZGVSYW5nZXx1bml0c1BlckVtfHZBbHBoYWJldGljfHZIYW5naW5nfHZJZGVvZ3JhcGhpY3x2TWF0aGVtYXRpY2FsfHZhbHVlc3x2ZWN0b3JFZmZlY3R8dmVyc2lvbnx2ZXJ0QWR2WXx2ZXJ0T3JpZ2luWHx2ZXJ0T3JpZ2luWXx2aWV3Qm94fHZpZXdUYXJnZXR8dmlzaWJpbGl0eXx3aWR0aHN8d29yZFNwYWNpbmd8d3JpdGluZ01vZGV8eHx4SGVpZ2h0fHgxfHgyfHhDaGFubmVsU2VsZWN0b3J8eGxpbmtBY3R1YXRlfHhsaW5rQXJjcm9sZXx4bGlua0hyZWZ8eGxpbmtSb2xlfHhsaW5rU2hvd3x4bGlua1RpdGxlfHhsaW5rVHlwZXx4bWxCYXNlfHhtbG5zfHhtbG5zWGxpbmt8eG1sTGFuZ3x4bWxTcGFjZXx5fHkxfHkyfHlDaGFubmVsU2VsZWN0b3J8enx6b29tQW5kUGFufGZvcnxjbGFzc3xhdXRvZm9jdXMpfCgoW0RkXVtBYV1bVHRdW0FhXXxbQWFdW1JyXVtJaV1bQWFdfHgpLS4qKSkkLzsgLy8gaHR0cHM6Ly9lc2JlbmNoLmNvbS9iZW5jaC81YmZlZTY4YTRjZDdlNjAwOWVmNjFkMjNcblxudmFyIGlzUHJvcFZhbGlkID0gLyogI19fUFVSRV9fICovbWVtb2l6ZShmdW5jdGlvbiAocHJvcCkge1xuICByZXR1cm4gcmVhY3RQcm9wc1JlZ2V4LnRlc3QocHJvcCkgfHwgcHJvcC5jaGFyQ29kZUF0KDApID09PSAxMTFcbiAgLyogbyAqL1xuICAmJiBwcm9wLmNoYXJDb2RlQXQoMSkgPT09IDExMFxuICAvKiBuICovXG4gICYmIHByb3AuY2hhckNvZGVBdCgyKSA8IDkxO1xufVxuLyogWisxICovXG4pO1xuXG5leHBvcnQgeyBpc1Byb3BWYWxpZCBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcyc7XG5pbXBvcnQgeyB3aXRoRW1vdGlvbkNhY2hlLCBUaGVtZUNvbnRleHQgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBzZXJpYWxpemVTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi9zZXJpYWxpemUnO1xuaW1wb3J0IHsgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayB9IGZyb20gJ0BlbW90aW9uL3VzZS1pbnNlcnRpb24tZWZmZWN0LXdpdGgtZmFsbGJhY2tzJztcbmltcG9ydCB7IGdldFJlZ2lzdGVyZWRTdHlsZXMsIHJlZ2lzdGVyU3R5bGVzLCBpbnNlcnRTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi91dGlscyc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgaXNQcm9wVmFsaWQgZnJvbSAnQGVtb3Rpb24vaXMtcHJvcC12YWxpZCc7XG5cbnZhciBpc0RldmVsb3BtZW50ID0gZmFsc2U7XG5cbnZhciB0ZXN0T21pdFByb3BzT25TdHJpbmdUYWcgPSBpc1Byb3BWYWxpZDtcblxudmFyIHRlc3RPbWl0UHJvcHNPbkNvbXBvbmVudCA9IGZ1bmN0aW9uIHRlc3RPbWl0UHJvcHNPbkNvbXBvbmVudChrZXkpIHtcbiAgcmV0dXJuIGtleSAhPT0gJ3RoZW1lJztcbn07XG5cbnZhciBnZXREZWZhdWx0U2hvdWxkRm9yd2FyZFByb3AgPSBmdW5jdGlvbiBnZXREZWZhdWx0U2hvdWxkRm9yd2FyZFByb3AodGFnKSB7XG4gIHJldHVybiB0eXBlb2YgdGFnID09PSAnc3RyaW5nJyAmJiAvLyA5NiBpcyBvbmUgbGVzcyB0aGFuIHRoZSBjaGFyIGNvZGVcbiAgLy8gZm9yIFwiYVwiIHNvIHRoaXMgaXMgY2hlY2tpbmcgdGhhdFxuICAvLyBpdCdzIGEgbG93ZXJjYXNlIGNoYXJhY3RlclxuICB0YWcuY2hhckNvZGVBdCgwKSA+IDk2ID8gdGVzdE9taXRQcm9wc09uU3RyaW5nVGFnIDogdGVzdE9taXRQcm9wc09uQ29tcG9uZW50O1xufTtcbnZhciBjb21wb3NlU2hvdWxkRm9yd2FyZFByb3BzID0gZnVuY3Rpb24gY29tcG9zZVNob3VsZEZvcndhcmRQcm9wcyh0YWcsIG9wdGlvbnMsIGlzUmVhbCkge1xuICB2YXIgc2hvdWxkRm9yd2FyZFByb3A7XG5cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICB2YXIgb3B0aW9uc1Nob3VsZEZvcndhcmRQcm9wID0gb3B0aW9ucy5zaG91bGRGb3J3YXJkUHJvcDtcbiAgICBzaG91bGRGb3J3YXJkUHJvcCA9IHRhZy5fX2Vtb3Rpb25fZm9yd2FyZFByb3AgJiYgb3B0aW9uc1Nob3VsZEZvcndhcmRQcm9wID8gZnVuY3Rpb24gKHByb3BOYW1lKSB7XG4gICAgICByZXR1cm4gdGFnLl9fZW1vdGlvbl9mb3J3YXJkUHJvcChwcm9wTmFtZSkgJiYgb3B0aW9uc1Nob3VsZEZvcndhcmRQcm9wKHByb3BOYW1lKTtcbiAgICB9IDogb3B0aW9uc1Nob3VsZEZvcndhcmRQcm9wO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBzaG91bGRGb3J3YXJkUHJvcCAhPT0gJ2Z1bmN0aW9uJyAmJiBpc1JlYWwpIHtcbiAgICBzaG91bGRGb3J3YXJkUHJvcCA9IHRhZy5fX2Vtb3Rpb25fZm9yd2FyZFByb3A7XG4gIH1cblxuICByZXR1cm4gc2hvdWxkRm9yd2FyZFByb3A7XG59O1xuXG52YXIgSW5zZXJ0aW9uID0gZnVuY3Rpb24gSW5zZXJ0aW9uKF9yZWYpIHtcbiAgdmFyIGNhY2hlID0gX3JlZi5jYWNoZSxcbiAgICAgIHNlcmlhbGl6ZWQgPSBfcmVmLnNlcmlhbGl6ZWQsXG4gICAgICBpc1N0cmluZ1RhZyA9IF9yZWYuaXNTdHJpbmdUYWc7XG4gIHJlZ2lzdGVyU3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZyk7XG4gIHVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBpbnNlcnRTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKTtcbiAgfSk7XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG52YXIgY3JlYXRlU3R5bGVkID0gZnVuY3Rpb24gY3JlYXRlU3R5bGVkKHRhZywgb3B0aW9ucykge1xuXG4gIHZhciBpc1JlYWwgPSB0YWcuX19lbW90aW9uX3JlYWwgPT09IHRhZztcbiAgdmFyIGJhc2VUYWcgPSBpc1JlYWwgJiYgdGFnLl9fZW1vdGlvbl9iYXNlIHx8IHRhZztcbiAgdmFyIGlkZW50aWZpZXJOYW1lO1xuICB2YXIgdGFyZ2V0Q2xhc3NOYW1lO1xuXG4gIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZGVudGlmaWVyTmFtZSA9IG9wdGlvbnMubGFiZWw7XG4gICAgdGFyZ2V0Q2xhc3NOYW1lID0gb3B0aW9ucy50YXJnZXQ7XG4gIH1cblxuICB2YXIgc2hvdWxkRm9yd2FyZFByb3AgPSBjb21wb3NlU2hvdWxkRm9yd2FyZFByb3BzKHRhZywgb3B0aW9ucywgaXNSZWFsKTtcbiAgdmFyIGRlZmF1bHRTaG91bGRGb3J3YXJkUHJvcCA9IHNob3VsZEZvcndhcmRQcm9wIHx8IGdldERlZmF1bHRTaG91bGRGb3J3YXJkUHJvcChiYXNlVGFnKTtcbiAgdmFyIHNob3VsZFVzZUFzID0gIWRlZmF1bHRTaG91bGRGb3J3YXJkUHJvcCgnYXMnKTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zXG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgdmFyIHN0eWxlcyA9IGlzUmVhbCAmJiB0YWcuX19lbW90aW9uX3N0eWxlcyAhPT0gdW5kZWZpbmVkID8gdGFnLl9fZW1vdGlvbl9zdHlsZXMuc2xpY2UoMCkgOiBbXTtcblxuICAgIGlmIChpZGVudGlmaWVyTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBzdHlsZXMucHVzaChcImxhYmVsOlwiICsgaWRlbnRpZmllck5hbWUgKyBcIjtcIik7XG4gICAgfVxuXG4gICAgaWYgKGFyZ3NbMF0gPT0gbnVsbCB8fCBhcmdzWzBdLnJhdyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXNwcmVhZFxuICAgICAgc3R5bGVzLnB1c2guYXBwbHkoc3R5bGVzLCBhcmdzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHRlbXBsYXRlU3RyaW5nc0FyciA9IGFyZ3NbMF07XG5cbiAgICAgIHN0eWxlcy5wdXNoKHRlbXBsYXRlU3RyaW5nc0FyclswXSk7XG4gICAgICB2YXIgbGVuID0gYXJncy5sZW5ndGg7XG4gICAgICB2YXIgaSA9IDE7XG5cbiAgICAgIGZvciAoOyBpIDwgbGVuOyBpKyspIHtcblxuICAgICAgICBzdHlsZXMucHVzaChhcmdzW2ldLCB0ZW1wbGF0ZVN0cmluZ3NBcnJbaV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBTdHlsZWQgPSB3aXRoRW1vdGlvbkNhY2hlKGZ1bmN0aW9uIChwcm9wcywgY2FjaGUsIHJlZikge1xuICAgICAgdmFyIEZpbmFsVGFnID0gc2hvdWxkVXNlQXMgJiYgcHJvcHMuYXMgfHwgYmFzZVRhZztcbiAgICAgIHZhciBjbGFzc05hbWUgPSAnJztcbiAgICAgIHZhciBjbGFzc0ludGVycG9sYXRpb25zID0gW107XG4gICAgICB2YXIgbWVyZ2VkUHJvcHMgPSBwcm9wcztcblxuICAgICAgaWYgKHByb3BzLnRoZW1lID09IG51bGwpIHtcbiAgICAgICAgbWVyZ2VkUHJvcHMgPSB7fTtcblxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICAgICAgICBtZXJnZWRQcm9wc1trZXldID0gcHJvcHNba2V5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1lcmdlZFByb3BzLnRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHByb3BzLmNsYXNzTmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY2xhc3NOYW1lID0gZ2V0UmVnaXN0ZXJlZFN0eWxlcyhjYWNoZS5yZWdpc3RlcmVkLCBjbGFzc0ludGVycG9sYXRpb25zLCBwcm9wcy5jbGFzc05hbWUpO1xuICAgICAgfSBlbHNlIGlmIChwcm9wcy5jbGFzc05hbWUgIT0gbnVsbCkge1xuICAgICAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUgKyBcIiBcIjtcbiAgICAgIH1cblxuICAgICAgdmFyIHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVTdHlsZXMoc3R5bGVzLmNvbmNhdChjbGFzc0ludGVycG9sYXRpb25zKSwgY2FjaGUucmVnaXN0ZXJlZCwgbWVyZ2VkUHJvcHMpO1xuICAgICAgY2xhc3NOYW1lICs9IGNhY2hlLmtleSArIFwiLVwiICsgc2VyaWFsaXplZC5uYW1lO1xuXG4gICAgICBpZiAodGFyZ2V0Q2xhc3NOYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY2xhc3NOYW1lICs9IFwiIFwiICsgdGFyZ2V0Q2xhc3NOYW1lO1xuICAgICAgfVxuXG4gICAgICB2YXIgZmluYWxTaG91bGRGb3J3YXJkUHJvcCA9IHNob3VsZFVzZUFzICYmIHNob3VsZEZvcndhcmRQcm9wID09PSB1bmRlZmluZWQgPyBnZXREZWZhdWx0U2hvdWxkRm9yd2FyZFByb3AoRmluYWxUYWcpIDogZGVmYXVsdFNob3VsZEZvcndhcmRQcm9wO1xuICAgICAgdmFyIG5ld1Byb3BzID0ge307XG5cbiAgICAgIGZvciAodmFyIF9rZXkgaW4gcHJvcHMpIHtcbiAgICAgICAgaWYgKHNob3VsZFVzZUFzICYmIF9rZXkgPT09ICdhcycpIGNvbnRpbnVlO1xuXG4gICAgICAgIGlmIChmaW5hbFNob3VsZEZvcndhcmRQcm9wKF9rZXkpKSB7XG4gICAgICAgICAgbmV3UHJvcHNbX2tleV0gPSBwcm9wc1tfa2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBuZXdQcm9wcy5jbGFzc05hbWUgPSBjbGFzc05hbWU7XG5cbiAgICAgIGlmIChyZWYpIHtcbiAgICAgICAgbmV3UHJvcHMucmVmID0gcmVmO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEluc2VydGlvbiwge1xuICAgICAgICBjYWNoZTogY2FjaGUsXG4gICAgICAgIHNlcmlhbGl6ZWQ6IHNlcmlhbGl6ZWQsXG4gICAgICAgIGlzU3RyaW5nVGFnOiB0eXBlb2YgRmluYWxUYWcgPT09ICdzdHJpbmcnXG4gICAgICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRmluYWxUYWcsIG5ld1Byb3BzKSk7XG4gICAgfSk7XG4gICAgU3R5bGVkLmRpc3BsYXlOYW1lID0gaWRlbnRpZmllck5hbWUgIT09IHVuZGVmaW5lZCA/IGlkZW50aWZpZXJOYW1lIDogXCJTdHlsZWQoXCIgKyAodHlwZW9mIGJhc2VUYWcgPT09ICdzdHJpbmcnID8gYmFzZVRhZyA6IGJhc2VUYWcuZGlzcGxheU5hbWUgfHwgYmFzZVRhZy5uYW1lIHx8ICdDb21wb25lbnQnKSArIFwiKVwiO1xuICAgIFN0eWxlZC5kZWZhdWx0UHJvcHMgPSB0YWcuZGVmYXVsdFByb3BzO1xuICAgIFN0eWxlZC5fX2Vtb3Rpb25fcmVhbCA9IFN0eWxlZDtcbiAgICBTdHlsZWQuX19lbW90aW9uX2Jhc2UgPSBiYXNlVGFnO1xuICAgIFN0eWxlZC5fX2Vtb3Rpb25fc3R5bGVzID0gc3R5bGVzO1xuICAgIFN0eWxlZC5fX2Vtb3Rpb25fZm9yd2FyZFByb3AgPSBzaG91bGRGb3J3YXJkUHJvcDtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3R5bGVkLCAndG9TdHJpbmcnLCB7XG4gICAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUoKSB7XG4gICAgICAgIGlmICh0YXJnZXRDbGFzc05hbWUgPT09IHVuZGVmaW5lZCAmJiBpc0RldmVsb3BtZW50KSB7XG4gICAgICAgICAgcmV0dXJuICdOT19DT01QT05FTlRfU0VMRUNUT1InO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFwiLlwiICsgdGFyZ2V0Q2xhc3NOYW1lO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgU3R5bGVkLndpdGhDb21wb25lbnQgPSBmdW5jdGlvbiAobmV4dFRhZywgbmV4dE9wdGlvbnMpIHtcbiAgICAgIHZhciBuZXdTdHlsZWQgPSBjcmVhdGVTdHlsZWQobmV4dFRhZywgX2V4dGVuZHMoe30sIG9wdGlvbnMsIG5leHRPcHRpb25zLCB7XG4gICAgICAgIHNob3VsZEZvcndhcmRQcm9wOiBjb21wb3NlU2hvdWxkRm9yd2FyZFByb3BzKFN0eWxlZCwgbmV4dE9wdGlvbnMsIHRydWUpXG4gICAgICB9KSk7XG4gICAgICByZXR1cm4gbmV3U3R5bGVkLmFwcGx5KHZvaWQgMCwgc3R5bGVzKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFN0eWxlZDtcbiAgfTtcbn07XG5cbmV4cG9ydCB7IGNyZWF0ZVN0eWxlZCBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgY3JlYXRlU3R5bGVkIGZyb20gJy4uL2Jhc2UvZGlzdC9lbW90aW9uLXN0eWxlZC1iYXNlLmJyb3dzZXIuZXNtLmpzJztcbmltcG9ydCAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9leHRlbmRzJztcbmltcG9ydCAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0ICdAZW1vdGlvbi9zZXJpYWxpemUnO1xuaW1wb3J0ICdAZW1vdGlvbi91c2UtaW5zZXJ0aW9uLWVmZmVjdC13aXRoLWZhbGxiYWNrcyc7XG5pbXBvcnQgJ0BlbW90aW9uL3V0aWxzJztcbmltcG9ydCAncmVhY3QnO1xuaW1wb3J0ICdAZW1vdGlvbi9pcy1wcm9wLXZhbGlkJztcblxudmFyIHRhZ3MgPSBbJ2EnLCAnYWJicicsICdhZGRyZXNzJywgJ2FyZWEnLCAnYXJ0aWNsZScsICdhc2lkZScsICdhdWRpbycsICdiJywgJ2Jhc2UnLCAnYmRpJywgJ2JkbycsICdiaWcnLCAnYmxvY2txdW90ZScsICdib2R5JywgJ2JyJywgJ2J1dHRvbicsICdjYW52YXMnLCAnY2FwdGlvbicsICdjaXRlJywgJ2NvZGUnLCAnY29sJywgJ2NvbGdyb3VwJywgJ2RhdGEnLCAnZGF0YWxpc3QnLCAnZGQnLCAnZGVsJywgJ2RldGFpbHMnLCAnZGZuJywgJ2RpYWxvZycsICdkaXYnLCAnZGwnLCAnZHQnLCAnZW0nLCAnZW1iZWQnLCAnZmllbGRzZXQnLCAnZmlnY2FwdGlvbicsICdmaWd1cmUnLCAnZm9vdGVyJywgJ2Zvcm0nLCAnaDEnLCAnaDInLCAnaDMnLCAnaDQnLCAnaDUnLCAnaDYnLCAnaGVhZCcsICdoZWFkZXInLCAnaGdyb3VwJywgJ2hyJywgJ2h0bWwnLCAnaScsICdpZnJhbWUnLCAnaW1nJywgJ2lucHV0JywgJ2lucycsICdrYmQnLCAna2V5Z2VuJywgJ2xhYmVsJywgJ2xlZ2VuZCcsICdsaScsICdsaW5rJywgJ21haW4nLCAnbWFwJywgJ21hcmsnLCAnbWFycXVlZScsICdtZW51JywgJ21lbnVpdGVtJywgJ21ldGEnLCAnbWV0ZXInLCAnbmF2JywgJ25vc2NyaXB0JywgJ29iamVjdCcsICdvbCcsICdvcHRncm91cCcsICdvcHRpb24nLCAnb3V0cHV0JywgJ3AnLCAncGFyYW0nLCAncGljdHVyZScsICdwcmUnLCAncHJvZ3Jlc3MnLCAncScsICdycCcsICdydCcsICdydWJ5JywgJ3MnLCAnc2FtcCcsICdzY3JpcHQnLCAnc2VjdGlvbicsICdzZWxlY3QnLCAnc21hbGwnLCAnc291cmNlJywgJ3NwYW4nLCAnc3Ryb25nJywgJ3N0eWxlJywgJ3N1YicsICdzdW1tYXJ5JywgJ3N1cCcsICd0YWJsZScsICd0Ym9keScsICd0ZCcsICd0ZXh0YXJlYScsICd0Zm9vdCcsICd0aCcsICd0aGVhZCcsICd0aW1lJywgJ3RpdGxlJywgJ3RyJywgJ3RyYWNrJywgJ3UnLCAndWwnLCAndmFyJywgJ3ZpZGVvJywgJ3dicicsIC8vIFNWR1xuJ2NpcmNsZScsICdjbGlwUGF0aCcsICdkZWZzJywgJ2VsbGlwc2UnLCAnZm9yZWlnbk9iamVjdCcsICdnJywgJ2ltYWdlJywgJ2xpbmUnLCAnbGluZWFyR3JhZGllbnQnLCAnbWFzaycsICdwYXRoJywgJ3BhdHRlcm4nLCAncG9seWdvbicsICdwb2x5bGluZScsICdyYWRpYWxHcmFkaWVudCcsICdyZWN0JywgJ3N0b3AnLCAnc3ZnJywgJ3RleHQnLCAndHNwYW4nXTtcblxuLy8gYmluZCBpdCB0byBhdm9pZCBtdXRhdGluZyB0aGUgb3JpZ2luYWwgZnVuY3Rpb25cbnZhciBzdHlsZWQgPSBjcmVhdGVTdHlsZWQuYmluZChudWxsKTtcbnRhZ3MuZm9yRWFjaChmdW5jdGlvbiAodGFnTmFtZSkge1xuICBzdHlsZWRbdGFnTmFtZV0gPSBzdHlsZWQodGFnTmFtZSk7XG59KTtcblxuZXhwb3J0IHsgc3R5bGVkIGFzIGRlZmF1bHQgfTtcbiIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IENhY2hlUHJvdmlkZXIgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgY3JlYXRlQ2FjaGUgZnJvbSAnQGVtb3Rpb24vY2FjaGUnO1xuXG4vLyBwcmVwZW5kOiB0cnVlIG1vdmVzIE1VSSBzdHlsZXMgdG8gdGhlIHRvcCBvZiB0aGUgPGhlYWQ+IHNvIHRoZXkncmUgbG9hZGVkIGZpcnN0LlxuLy8gSXQgYWxsb3dzIGRldmVsb3BlcnMgdG8gZWFzaWx5IG92ZXJyaWRlIE1VSSBzdHlsZXMgd2l0aCBvdGhlciBzdHlsaW5nIHNvbHV0aW9ucywgbGlrZSBDU1MgbW9kdWxlcy5cbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5sZXQgY2FjaGU7XG5pZiAodHlwZW9mIGRvY3VtZW50ID09PSAnb2JqZWN0Jykge1xuICBjYWNoZSA9IGNyZWF0ZUNhY2hlKHtcbiAgICBrZXk6ICdjc3MnLFxuICAgIHByZXBlbmQ6IHRydWVcbiAgfSk7XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBTdHlsZWRFbmdpbmVQcm92aWRlcihwcm9wcykge1xuICBjb25zdCB7XG4gICAgaW5qZWN0Rmlyc3QsXG4gICAgY2hpbGRyZW5cbiAgfSA9IHByb3BzO1xuICByZXR1cm4gaW5qZWN0Rmlyc3QgJiYgY2FjaGUgPyAvKiNfX1BVUkVfXyovX2pzeChDYWNoZVByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGNhY2hlLFxuICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICB9KSA6IGNoaWxkcmVuO1xufVxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gU3R5bGVkRW5naW5lUHJvdmlkZXIucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICogWW91ciBjb21wb25lbnQgdHJlZS5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQsIHRoZSBzdHlsZXMgYXJlIGluamVjdGVkIGxhc3QgaW4gdGhlIDxoZWFkPiBlbGVtZW50IG9mIHRoZSBwYWdlLlxuICAgKiBBcyBhIHJlc3VsdCwgdGhleSBnYWluIG1vcmUgc3BlY2lmaWNpdHkgdGhhbiBhbnkgb3RoZXIgc3R5bGUgc2hlZXQuXG4gICAqIElmIHlvdSB3YW50IHRvIG92ZXJyaWRlIE1VSSdzIHN0eWxlcywgc2V0IHRoaXMgcHJvcC5cbiAgICovXG4gIGluamVjdEZpcnN0OiBQcm9wVHlwZXMuYm9vbFxufSA6IHZvaWQgMDsiLCIvKipcbiAqIEBtdWkvc3R5bGVkLWVuZ2luZSB2NS4xNi4xNFxuICpcbiAqIEBsaWNlbnNlIE1JVFxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cbid1c2UgY2xpZW50JztcblxuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZXJzY29yZS1kYW5nbGUgKi9cbmltcG9ydCBlbVN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3R5bGVkKHRhZywgb3B0aW9ucykge1xuICBjb25zdCBzdHlsZXNGYWN0b3J5ID0gZW1TdHlsZWQodGFnLCBvcHRpb25zKTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICByZXR1cm4gKC4uLnN0eWxlcykgPT4ge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gdHlwZW9mIHRhZyA9PT0gJ3N0cmluZycgPyBgXCIke3RhZ31cImAgOiAnY29tcG9uZW50JztcbiAgICAgIGlmIChzdHlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoW2BNVUk6IFNlZW1zIGxpa2UgeW91IGNhbGxlZCBcXGBzdHlsZWQoJHtjb21wb25lbnR9KSgpXFxgIHdpdGhvdXQgYSBcXGBzdHlsZVxcYCBhcmd1bWVudC5gLCAnWW91IG11c3QgcHJvdmlkZSBhIGBzdHlsZXNgIGFyZ3VtZW50OiBgc3R5bGVkKFwiZGl2XCIpKHN0eWxlWW91Rm9yZ290VG9QYXNzKWAuJ10uam9pbignXFxuJykpO1xuICAgICAgfSBlbHNlIGlmIChzdHlsZXMuc29tZShzdHlsZSA9PiBzdHlsZSA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBNVUk6IHRoZSBzdHlsZWQoJHtjb21wb25lbnR9KSguLi5hcmdzKSBBUEkgcmVxdWlyZXMgYWxsIGl0cyBhcmdzIHRvIGJlIGRlZmluZWQuYCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3R5bGVzRmFjdG9yeSguLi5zdHlsZXMpO1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIHN0eWxlc0ZhY3Rvcnk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbmV4cG9ydCBjb25zdCBpbnRlcm5hbF9wcm9jZXNzU3R5bGVzID0gKHRhZywgcHJvY2Vzc29yKSA9PiB7XG4gIC8vIEVtb3Rpb24gYXR0YWNoZXMgYWxsIHRoZSBzdHlsZXMgYXMgYF9fZW1vdGlvbl9zdHlsZXNgLlxuICAvLyBSZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9lbW90aW9uLWpzL2Vtb3Rpb24vYmxvYi8xNmQ5NzFkMGRhMjI5NTk2ZDZiY2MzOWQyODJiYTk3NTNjOWVlN2NmL3BhY2thZ2VzL3N0eWxlZC9zcmMvYmFzZS5qcyNMMTg2XG4gIGlmIChBcnJheS5pc0FycmF5KHRhZy5fX2Vtb3Rpb25fc3R5bGVzKSkge1xuICAgIHRhZy5fX2Vtb3Rpb25fc3R5bGVzID0gcHJvY2Vzc29yKHRhZy5fX2Vtb3Rpb25fc3R5bGVzKTtcbiAgfVxufTtcbmV4cG9ydCB7IFRoZW1lQ29udGV4dCwga2V5ZnJhbWVzLCBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFN0eWxlZEVuZ2luZVByb3ZpZGVyIH0gZnJvbSAnLi9TdHlsZWRFbmdpbmVQcm92aWRlcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEdsb2JhbFN0eWxlcyB9IGZyb20gJy4vR2xvYmFsU3R5bGVzJzsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2532\n")},2702:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval('var __webpack_unused_export__;\n\n"use client";\n\nvar _interopRequireDefault = __webpack_require__(4994);\n__webpack_unused_export__ = ({\n  value: true\n});\nexports.A = void 0;\nvar _createSvgIcon = _interopRequireDefault(__webpack_require__(2032));\nvar _jsxRuntime = __webpack_require__(4848);\nvar _default = exports.A = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)("path", {\n  d: "M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4z"\n}), \'Refresh\');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjcwMi5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYjs7QUFFQSw2QkFBNkIsbUJBQU8sQ0FBQyxJQUE4QztBQUNuRiw2QkFBNkM7QUFDN0M7QUFDQSxDQUFDLENBQUM7QUFDRixTQUFlO0FBQ2YsNENBQTRDLG1CQUFPLENBQUMsSUFBdUI7QUFDM0Usa0JBQWtCLG1CQUFPLENBQUMsSUFBbUI7QUFDN0MsZUFBZSxTQUFlO0FBQzlCO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvaWNvbnMtbWF0ZXJpYWwvUmVmcmVzaC5qcz84YWVlIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXCJ1c2UgY2xpZW50XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfY3JlYXRlU3ZnSWNvbiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdXRpbHMvY3JlYXRlU3ZnSWNvblwiKSk7XG52YXIgX2pzeFJ1bnRpbWUgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSAoMCwgX2NyZWF0ZVN2Z0ljb24uZGVmYXVsdCkoIC8qI19fUFVSRV9fKi8oMCwgX2pzeFJ1bnRpbWUuanN4KShcInBhdGhcIiwge1xuICBkOiBcIk0xNy42NSA2LjM1QzE2LjIgNC45IDE0LjIxIDQgMTIgNGMtNC40MiAwLTcuOTkgMy41OC03Ljk5IDhzMy41NyA4IDcuOTkgOGMzLjczIDAgNi44NC0yLjU1IDcuNzMtNmgtMi4wOGMtLjgyIDIuMzMtMy4wNCA0LTUuNjUgNC0zLjMxIDAtNi0yLjY5LTYtNnMyLjY5LTYgNi02YzEuNjYgMCAzLjE0LjY5IDQuMjIgMS43OEwxMyAxMWg3VjR6XCJcbn0pLCAnUmVmcmVzaCcpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2702\n')},2765:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _createTheme__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6544);\n'use client';\n\n\nconst defaultTheme = (0,_createTheme__WEBPACK_IMPORTED_MODULE_0__/* [\"default\"] */ .A)();\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defaultTheme);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc2NS5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7O0FBRXdDO0FBQ3hDLHFCQUFxQixpRUFBVztBQUNoQyxpRUFBZSxZQUFZIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvZGVmYXVsdFRoZW1lLmpzPzhmOTkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgY3JlYXRlVGhlbWUgZnJvbSAnLi9jcmVhdGVUaGVtZSc7XG5jb25zdCBkZWZhdWx0VGhlbWUgPSBjcmVhdGVUaGVtZSgpO1xuZXhwb3J0IGRlZmF1bHQgZGVmYXVsdFRoZW1lOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2765\n")},2778:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _mui_utils_useEnhancedEffect__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1529);\n'use client';\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_mui_utils_useEnhancedEffect__WEBPACK_IMPORTED_MODULE_0__/* [\"default\"] */ .A);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc3OC5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7O0FBRTZEO0FBQzdELGlFQUFlLDZFQUFpQiIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvdXNlRW5oYW5jZWRFZmZlY3QuanM/ZWFhZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB1c2VFbmhhbmNlZEVmZmVjdCBmcm9tICdAbXVpL3V0aWxzL3VzZUVuaGFuY2VkRWZmZWN0JztcbmV4cG9ydCBkZWZhdWx0IHVzZUVuaGFuY2VkRWZmZWN0OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2778\n")},2923:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval('var __webpack_unused_export__;\n\n\'use client\';\n\n__webpack_unused_export__ = ({\n  value: true\n});\nexports.A = void 0;\nvar React = _interopRequireWildcard(__webpack_require__(1594));\nvar _styledEngine = __webpack_require__(2532);\nfunction _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }\nfunction _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }\nfunction isObjectEmpty(obj) {\n  return Object.keys(obj).length === 0;\n}\nfunction useTheme(defaultTheme = null) {\n  const contextTheme = React.useContext(_styledEngine.ThemeContext);\n  return !contextTheme || isObjectEmpty(contextTheme) ? defaultTheme : contextTheme;\n}\nvar _default = exports.A = useTheme;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjkyMy5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYjs7QUFFQSw2QkFBNkM7QUFDN0M7QUFDQSxDQUFDLENBQUM7QUFDRixTQUFlO0FBQ2Ysb0NBQW9DLG1CQUFPLENBQUMsSUFBTztBQUNuRCxvQkFBb0IsbUJBQU8sQ0FBQyxJQUFvQjtBQUNoRCx1Q0FBdUMsK0NBQStDLDBDQUEwQyxrREFBa0QsbUJBQW1CO0FBQ3JNLHlDQUF5Qyx1Q0FBdUMsMkVBQTJFLGNBQWMscUNBQXFDLG9DQUFvQyxVQUFVLGlCQUFpQixnRUFBZ0Usc0ZBQXNGLDBEQUEwRCx3RUFBd0U7QUFDcmlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxTQUFlIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vdXNlVGhlbWVXaXRob3V0RGVmYXVsdC5qcz9mMzhlIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuJ3VzZSBjbGllbnQnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xudmFyIFJlYWN0ID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcInJlYWN0XCIpKTtcbnZhciBfc3R5bGVkRW5naW5lID0gcmVxdWlyZShcIkBtdWkvc3R5bGVkLWVuZ2luZVwiKTtcbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIFdlYWtNYXApIHJldHVybiBudWxsOyB2YXIgciA9IG5ldyBXZWFrTWFwKCksIHQgPSBuZXcgV2Vha01hcCgpOyByZXR1cm4gKF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSA9IGZ1bmN0aW9uIChlKSB7IHJldHVybiBlID8gdCA6IHI7IH0pKGUpOyB9XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChlLCByKSB7IGlmICghciAmJiBlICYmIGUuX19lc01vZHVsZSkgcmV0dXJuIGU7IGlmIChudWxsID09PSBlIHx8IFwib2JqZWN0XCIgIT0gdHlwZW9mIGUgJiYgXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlKSByZXR1cm4geyBkZWZhdWx0OiBlIH07IHZhciB0ID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKHIpOyBpZiAodCAmJiB0LmhhcyhlKSkgcmV0dXJuIHQuZ2V0KGUpOyB2YXIgbiA9IHsgX19wcm90b19fOiBudWxsIH0sIGEgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgZm9yICh2YXIgdSBpbiBlKSBpZiAoXCJkZWZhdWx0XCIgIT09IHUgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIHUpKSB7IHZhciBpID0gYSA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgdSkgOiBudWxsOyBpICYmIChpLmdldCB8fCBpLnNldCkgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkobiwgdSwgaSkgOiBuW3VdID0gZVt1XTsgfSByZXR1cm4gbi5kZWZhdWx0ID0gZSwgdCAmJiB0LnNldChlLCBuKSwgbjsgfVxuZnVuY3Rpb24gaXNPYmplY3RFbXB0eShvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID09PSAwO1xufVxuZnVuY3Rpb24gdXNlVGhlbWUoZGVmYXVsdFRoZW1lID0gbnVsbCkge1xuICBjb25zdCBjb250ZXh0VGhlbWUgPSBSZWFjdC51c2VDb250ZXh0KF9zdHlsZWRFbmdpbmUuVGhlbWVDb250ZXh0KTtcbiAgcmV0dXJuICFjb250ZXh0VGhlbWUgfHwgaXNPYmplY3RFbXB0eShjb250ZXh0VGhlbWUpID8gZGVmYXVsdFRoZW1lIDogY29udGV4dFRoZW1lO1xufVxudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gdXNlVGhlbWU7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2923\n')},3034:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _mui_utils_useEventCallback__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1547);\n'use client';\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_mui_utils_useEventCallback__WEBPACK_IMPORTED_MODULE_0__/* [\"default\"] */ .A);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzAzNC5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7O0FBRTJEO0FBQzNELGlFQUFlLDRFQUFnQiIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvdXNlRXZlbnRDYWxsYmFjay5qcz8yOTdiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHVzZUV2ZW50Q2FsbGJhY2sgZnJvbSAnQG11aS91dGlscy91c2VFdmVudENhbGxiYWNrJztcbmV4cG9ydCBkZWZhdWx0IHVzZUV2ZW50Q2FsbGJhY2s7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3034\n")},3068:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n  E: () => (/* binding */ Timeout),\n  A: () => (/* binding */ useTimeout)\n});\n\n// EXTERNAL MODULE: external \"React\"\nvar external_React_ = __webpack_require__(1594);\n;// ./node_modules/@mui/utils/esm/useLazyRef/useLazyRef.js\n'use client';\n\n\nconst UNINITIALIZED = {};\n\n/**\n * A React.useRef() that is initialized lazily with a function. Note that it accepts an optional\n * initialization argument, so the initialization function doesn't need to be an inline closure.\n *\n * @usage\n *   const ref = useLazyRef(sortColumns, columns)\n */\nfunction useLazyRef(init, initArg) {\n  const ref = external_React_.useRef(UNINITIALIZED);\n  if (ref.current === UNINITIALIZED) {\n    ref.current = init(initArg);\n  }\n  return ref;\n}\n;// ./node_modules/@mui/utils/esm/useOnMount/useOnMount.js\n'use client';\n\n\nconst EMPTY = [];\n\n/**\n * A React.useEffect equivalent that runs once, when the component is mounted.\n */\nfunction useOnMount(fn) {\n  /* eslint-disable react-hooks/exhaustive-deps */\n  external_React_.useEffect(fn, EMPTY);\n  /* eslint-enable react-hooks/exhaustive-deps */\n}\n;// ./node_modules/@mui/utils/esm/useTimeout/useTimeout.js\n'use client';\n\n\n\nclass Timeout {\n  constructor() {\n    this.currentId = null;\n    this.clear = () => {\n      if (this.currentId !== null) {\n        clearTimeout(this.currentId);\n        this.currentId = null;\n      }\n    };\n    this.disposeEffect = () => {\n      return this.clear;\n    };\n  }\n  static create() {\n    return new Timeout();\n  }\n  /**\n   * Executes `fn` after `delay`, clearing any previously scheduled call.\n   */\n  start(delay, fn) {\n    this.clear();\n    this.currentId = setTimeout(() => {\n      this.currentId = null;\n      fn();\n    }, delay);\n  }\n}\nfunction useTimeout() {\n  const timeout = useLazyRef(Timeout.create).current;\n  useOnMount(timeout.disposeEffect);\n  return timeout;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzA2OC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7O0FBRStCO0FBQy9COztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ2U7QUFDZixjQUFjLHNCQUFZO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQzs7QUNsQkE7O0FBRStCO0FBQy9COztBQUVBO0FBQ0E7QUFDQTtBQUNlO0FBQ2Y7QUFDQSxFQUFFLHlCQUFlO0FBQ2pCO0FBQ0EsQzs7QUNaQTs7QUFFa0Q7QUFDQTtBQUMzQztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNlO0FBQ2Ysa0JBQWtCLFVBQVU7QUFDNUIsRUFBRSxVQUFVO0FBQ1o7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL3VzZUxhenlSZWYvdXNlTGF6eVJlZi5qcz82MDgzIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL3VzZU9uTW91bnQvdXNlT25Nb3VudC5qcz83MjRkIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL3VzZVRpbWVvdXQvdXNlVGltZW91dC5qcz85OTJmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuY29uc3QgVU5JTklUSUFMSVpFRCA9IHt9O1xuXG4vKipcbiAqIEEgUmVhY3QudXNlUmVmKCkgdGhhdCBpcyBpbml0aWFsaXplZCBsYXppbHkgd2l0aCBhIGZ1bmN0aW9uLiBOb3RlIHRoYXQgaXQgYWNjZXB0cyBhbiBvcHRpb25hbFxuICogaW5pdGlhbGl6YXRpb24gYXJndW1lbnQsIHNvIHRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBkb2Vzbid0IG5lZWQgdG8gYmUgYW4gaW5saW5lIGNsb3N1cmUuXG4gKlxuICogQHVzYWdlXG4gKiAgIGNvbnN0IHJlZiA9IHVzZUxhenlSZWYoc29ydENvbHVtbnMsIGNvbHVtbnMpXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUxhenlSZWYoaW5pdCwgaW5pdEFyZykge1xuICBjb25zdCByZWYgPSBSZWFjdC51c2VSZWYoVU5JTklUSUFMSVpFRCk7XG4gIGlmIChyZWYuY3VycmVudCA9PT0gVU5JTklUSUFMSVpFRCkge1xuICAgIHJlZi5jdXJyZW50ID0gaW5pdChpbml0QXJnKTtcbiAgfVxuICByZXR1cm4gcmVmO1xufSIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuY29uc3QgRU1QVFkgPSBbXTtcblxuLyoqXG4gKiBBIFJlYWN0LnVzZUVmZmVjdCBlcXVpdmFsZW50IHRoYXQgcnVucyBvbmNlLCB3aGVuIHRoZSBjb21wb25lbnQgaXMgbW91bnRlZC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlT25Nb3VudChmbikge1xuICAvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHMgKi9cbiAgUmVhY3QudXNlRWZmZWN0KGZuLCBFTVBUWSk7XG4gIC8qIGVzbGludC1lbmFibGUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzICovXG59IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgdXNlTGF6eVJlZiBmcm9tICcuLi91c2VMYXp5UmVmL3VzZUxhenlSZWYnO1xuaW1wb3J0IHVzZU9uTW91bnQgZnJvbSAnLi4vdXNlT25Nb3VudC91c2VPbk1vdW50JztcbmV4cG9ydCBjbGFzcyBUaW1lb3V0IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jdXJyZW50SWQgPSBudWxsO1xuICAgIHRoaXMuY2xlYXIgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5jdXJyZW50SWQgIT09IG51bGwpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuY3VycmVudElkKTtcbiAgICAgICAgdGhpcy5jdXJyZW50SWQgPSBudWxsO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5kaXNwb3NlRWZmZWN0ID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuY2xlYXI7XG4gICAgfTtcbiAgfVxuICBzdGF0aWMgY3JlYXRlKCkge1xuICAgIHJldHVybiBuZXcgVGltZW91dCgpO1xuICB9XG4gIC8qKlxuICAgKiBFeGVjdXRlcyBgZm5gIGFmdGVyIGBkZWxheWAsIGNsZWFyaW5nIGFueSBwcmV2aW91c2x5IHNjaGVkdWxlZCBjYWxsLlxuICAgKi9cbiAgc3RhcnQoZGVsYXksIGZuKSB7XG4gICAgdGhpcy5jbGVhcigpO1xuICAgIHRoaXMuY3VycmVudElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmN1cnJlbnRJZCA9IG51bGw7XG4gICAgICBmbigpO1xuICAgIH0sIGRlbGF5KTtcbiAgfVxufVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlVGltZW91dCgpIHtcbiAgY29uc3QgdGltZW91dCA9IHVzZUxhenlSZWYoVGltZW91dC5jcmVhdGUpLmN1cnJlbnQ7XG4gIHVzZU9uTW91bnQodGltZW91dC5kaXNwb3NlRWZmZWN0KTtcbiAgcmV0dXJuIHRpbWVvdXQ7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3068\n")},3072:(__unused_webpack_module,exports)=>{"use strict";eval('/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar b="function"===typeof Symbol&&Symbol.for,c=b?Symbol.for("react.element"):60103,d=b?Symbol.for("react.portal"):60106,e=b?Symbol.for("react.fragment"):60107,f=b?Symbol.for("react.strict_mode"):60108,g=b?Symbol.for("react.profiler"):60114,h=b?Symbol.for("react.provider"):60109,k=b?Symbol.for("react.context"):60110,l=b?Symbol.for("react.async_mode"):60111,m=b?Symbol.for("react.concurrent_mode"):60111,n=b?Symbol.for("react.forward_ref"):60112,p=b?Symbol.for("react.suspense"):60113,q=b?\nSymbol.for("react.suspense_list"):60120,r=b?Symbol.for("react.memo"):60115,t=b?Symbol.for("react.lazy"):60116,v=b?Symbol.for("react.block"):60121,w=b?Symbol.for("react.fundamental"):60117,x=b?Symbol.for("react.responder"):60118,y=b?Symbol.for("react.scope"):60119;\nfunction z(a){if("object"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return"object"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return"string"===typeof a||"function"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||"object"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzA3Mi5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVhO0FBQ2I7QUFDQSxjQUFjLGtDQUFrQyxpQkFBaUIsVUFBVSwwQkFBMEIsbURBQW1ELGtDQUFrQyw0Q0FBNEMsa0JBQWtCLGtCQUFrQixjQUFjLGdCQUFnQixpQkFBaUIsR0FBRyxzQkFBc0IsR0FBRyx1QkFBdUIsR0FBRyx1QkFBdUIsR0FBRyxlQUFlLEdBQUcsa0JBQWtCLEdBQUcsZ0JBQWdCLEdBQUcsWUFBWSxHQUFHLFlBQVksR0FBRyxjQUFjO0FBQy9lLGdCQUFnQixHQUFHLGtCQUFrQixHQUFHLGdCQUFnQixHQUFHLG1CQUFtQixhQUFhLHVCQUF1Qix3QkFBd0IsR0FBRyx5QkFBeUIsYUFBYSxpQkFBaUIseUJBQXlCLGFBQWEsaUJBQWlCLGlCQUFpQixhQUFhLHFEQUFxRCxvQkFBb0IsYUFBYSxpQkFBaUIsa0JBQWtCLGFBQWEsaUJBQWlCLGNBQWMsYUFBYTtBQUMzYyxjQUFjLGFBQWEsaUJBQWlCLGdCQUFnQixhQUFhLGlCQUFpQixrQkFBa0IsYUFBYSxpQkFBaUIsb0JBQW9CLGFBQWEsaUJBQWlCLGtCQUFrQixhQUFhO0FBQzNOLDBCQUEwQixhQUFhLDZRQUE2USxjQUFjIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3Mvbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcz8wYThhIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBAbGljZW5zZSBSZWFjdCB2MTYuMTMuMVxuICogcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7dmFyIGI9XCJmdW5jdGlvblwiPT09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmZvcixjPWI/U3ltYm9sLmZvcihcInJlYWN0LmVsZW1lbnRcIik6NjAxMDMsZD1iP1N5bWJvbC5mb3IoXCJyZWFjdC5wb3J0YWxcIik6NjAxMDYsZT1iP1N5bWJvbC5mb3IoXCJyZWFjdC5mcmFnbWVudFwiKTo2MDEwNyxmPWI/U3ltYm9sLmZvcihcInJlYWN0LnN0cmljdF9tb2RlXCIpOjYwMTA4LGc9Yj9TeW1ib2wuZm9yKFwicmVhY3QucHJvZmlsZXJcIik6NjAxMTQsaD1iP1N5bWJvbC5mb3IoXCJyZWFjdC5wcm92aWRlclwiKTo2MDEwOSxrPWI/U3ltYm9sLmZvcihcInJlYWN0LmNvbnRleHRcIik6NjAxMTAsbD1iP1N5bWJvbC5mb3IoXCJyZWFjdC5hc3luY19tb2RlXCIpOjYwMTExLG09Yj9TeW1ib2wuZm9yKFwicmVhY3QuY29uY3VycmVudF9tb2RlXCIpOjYwMTExLG49Yj9TeW1ib2wuZm9yKFwicmVhY3QuZm9yd2FyZF9yZWZcIik6NjAxMTIscD1iP1N5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZVwiKTo2MDExMyxxPWI/XG5TeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VfbGlzdFwiKTo2MDEyMCxyPWI/U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9cIik6NjAxMTUsdD1iP1N5bWJvbC5mb3IoXCJyZWFjdC5sYXp5XCIpOjYwMTE2LHY9Yj9TeW1ib2wuZm9yKFwicmVhY3QuYmxvY2tcIik6NjAxMjEsdz1iP1N5bWJvbC5mb3IoXCJyZWFjdC5mdW5kYW1lbnRhbFwiKTo2MDExNyx4PWI/U3ltYm9sLmZvcihcInJlYWN0LnJlc3BvbmRlclwiKTo2MDExOCx5PWI/U3ltYm9sLmZvcihcInJlYWN0LnNjb3BlXCIpOjYwMTE5O1xuZnVuY3Rpb24geihhKXtpZihcIm9iamVjdFwiPT09dHlwZW9mIGEmJm51bGwhPT1hKXt2YXIgdT1hLiQkdHlwZW9mO3N3aXRjaCh1KXtjYXNlIGM6c3dpdGNoKGE9YS50eXBlLGEpe2Nhc2UgbDpjYXNlIG06Y2FzZSBlOmNhc2UgZzpjYXNlIGY6Y2FzZSBwOnJldHVybiBhO2RlZmF1bHQ6c3dpdGNoKGE9YSYmYS4kJHR5cGVvZixhKXtjYXNlIGs6Y2FzZSBuOmNhc2UgdDpjYXNlIHI6Y2FzZSBoOnJldHVybiBhO2RlZmF1bHQ6cmV0dXJuIHV9fWNhc2UgZDpyZXR1cm4gdX19fWZ1bmN0aW9uIEEoYSl7cmV0dXJuIHooYSk9PT1tfWV4cG9ydHMuQXN5bmNNb2RlPWw7ZXhwb3J0cy5Db25jdXJyZW50TW9kZT1tO2V4cG9ydHMuQ29udGV4dENvbnN1bWVyPWs7ZXhwb3J0cy5Db250ZXh0UHJvdmlkZXI9aDtleHBvcnRzLkVsZW1lbnQ9YztleHBvcnRzLkZvcndhcmRSZWY9bjtleHBvcnRzLkZyYWdtZW50PWU7ZXhwb3J0cy5MYXp5PXQ7ZXhwb3J0cy5NZW1vPXI7ZXhwb3J0cy5Qb3J0YWw9ZDtcbmV4cG9ydHMuUHJvZmlsZXI9ZztleHBvcnRzLlN0cmljdE1vZGU9ZjtleHBvcnRzLlN1c3BlbnNlPXA7ZXhwb3J0cy5pc0FzeW5jTW9kZT1mdW5jdGlvbihhKXtyZXR1cm4gQShhKXx8eihhKT09PWx9O2V4cG9ydHMuaXNDb25jdXJyZW50TW9kZT1BO2V4cG9ydHMuaXNDb250ZXh0Q29uc3VtZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1rfTtleHBvcnRzLmlzQ29udGV4dFByb3ZpZGVyPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09aH07ZXhwb3J0cy5pc0VsZW1lbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuXCJvYmplY3RcIj09PXR5cGVvZiBhJiZudWxsIT09YSYmYS4kJHR5cGVvZj09PWN9O2V4cG9ydHMuaXNGb3J3YXJkUmVmPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09bn07ZXhwb3J0cy5pc0ZyYWdtZW50PWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09ZX07ZXhwb3J0cy5pc0xhenk9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT10fTtcbmV4cG9ydHMuaXNNZW1vPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09cn07ZXhwb3J0cy5pc1BvcnRhbD1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PWR9O2V4cG9ydHMuaXNQcm9maWxlcj1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PWd9O2V4cG9ydHMuaXNTdHJpY3RNb2RlPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09Zn07ZXhwb3J0cy5pc1N1c3BlbnNlPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09cH07XG5leHBvcnRzLmlzVmFsaWRFbGVtZW50VHlwZT1mdW5jdGlvbihhKXtyZXR1cm5cInN0cmluZ1wiPT09dHlwZW9mIGF8fFwiZnVuY3Rpb25cIj09PXR5cGVvZiBhfHxhPT09ZXx8YT09PW18fGE9PT1nfHxhPT09Znx8YT09PXB8fGE9PT1xfHxcIm9iamVjdFwiPT09dHlwZW9mIGEmJm51bGwhPT1hJiYoYS4kJHR5cGVvZj09PXR8fGEuJCR0eXBlb2Y9PT1yfHxhLiQkdHlwZW9mPT09aHx8YS4kJHR5cGVvZj09PWt8fGEuJCR0eXBlb2Y9PT1ufHxhLiQkdHlwZW9mPT09d3x8YS4kJHR5cGVvZj09PXh8fGEuJCR0eXBlb2Y9PT15fHxhLiQkdHlwZW9mPT09dil9O2V4cG9ydHMudHlwZU9mPXo7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3072\n')},3142:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   "default": () => (/* reexport safe */ _createTheme__WEBPACK_IMPORTED_MODULE_0__.A),\n/* harmony export */   private_createBreakpoints: () => (/* reexport safe */ _createBreakpoints__WEBPACK_IMPORTED_MODULE_1__.A),\n/* harmony export */   unstable_applyStyles: () => (/* reexport safe */ _applyStyles__WEBPACK_IMPORTED_MODULE_2__.A)\n/* harmony export */ });\n/* harmony import */ var _createTheme__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8749);\n/* harmony import */ var _createBreakpoints__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(8094);\n/* harmony import */ var _applyStyles__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(8336);\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzE0Mi5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBd0M7QUFDbUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vY3JlYXRlVGhlbWUvaW5kZXguanM/YTdhZSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSAnLi9jcmVhdGVUaGVtZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHByaXZhdGVfY3JlYXRlQnJlYWtwb2ludHMgfSBmcm9tICcuL2NyZWF0ZUJyZWFrcG9pbnRzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdW5zdGFibGVfYXBwbHlTdHlsZXMgfSBmcm9tICcuL2FwcGx5U3R5bGVzJzsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3142\n')},3174:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n  J: () => (/* binding */ serializeStyles)\n});\n\n;// ./node_modules/@emotion/hash/dist/emotion-hash.esm.js\n/* eslint-disable */\n// Inspired by https://github.com/garycourt/murmurhash-js\n// Ported from https://github.com/aappleby/smhasher/blob/61a0530f28277f2e850bfc39600ce61d02b518de/src/MurmurHash2.cpp#L37-L86\nfunction murmur2(str) {\n  // 'm' and 'r' are mixing constants generated offline.\n  // They're not really 'magic', they just happen to work well.\n  // const m = 0x5bd1e995;\n  // const r = 24;\n  // Initialize the hash\n  var h = 0; // Mix 4 bytes at a time into the hash\n\n  var k,\n      i = 0,\n      len = str.length;\n\n  for (; len >= 4; ++i, len -= 4) {\n    k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24;\n    k =\n    /* Math.imul(k, m): */\n    (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16);\n    k ^=\n    /* k >>> r: */\n    k >>> 24;\n    h =\n    /* Math.imul(k, m): */\n    (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16) ^\n    /* Math.imul(h, m): */\n    (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n  } // Handle the last few bytes of the input array\n\n\n  switch (len) {\n    case 3:\n      h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n\n    case 2:\n      h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n\n    case 1:\n      h ^= str.charCodeAt(i) & 0xff;\n      h =\n      /* Math.imul(h, m): */\n      (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n  } // Do a few final mixes of the hash to ensure the last few\n  // bytes are well-incorporated.\n\n\n  h ^= h >>> 13;\n  h =\n  /* Math.imul(h, m): */\n  (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n  return ((h ^ h >>> 15) >>> 0).toString(36);\n}\n\n\n\n;// ./node_modules/@emotion/unitless/dist/emotion-unitless.esm.js\nvar unitlessKeys = {\n  animationIterationCount: 1,\n  aspectRatio: 1,\n  borderImageOutset: 1,\n  borderImageSlice: 1,\n  borderImageWidth: 1,\n  boxFlex: 1,\n  boxFlexGroup: 1,\n  boxOrdinalGroup: 1,\n  columnCount: 1,\n  columns: 1,\n  flex: 1,\n  flexGrow: 1,\n  flexPositive: 1,\n  flexShrink: 1,\n  flexNegative: 1,\n  flexOrder: 1,\n  gridRow: 1,\n  gridRowEnd: 1,\n  gridRowSpan: 1,\n  gridRowStart: 1,\n  gridColumn: 1,\n  gridColumnEnd: 1,\n  gridColumnSpan: 1,\n  gridColumnStart: 1,\n  msGridRow: 1,\n  msGridRowSpan: 1,\n  msGridColumn: 1,\n  msGridColumnSpan: 1,\n  fontWeight: 1,\n  lineHeight: 1,\n  opacity: 1,\n  order: 1,\n  orphans: 1,\n  scale: 1,\n  tabSize: 1,\n  widows: 1,\n  zIndex: 1,\n  zoom: 1,\n  WebkitLineClamp: 1,\n  // SVG-related properties\n  fillOpacity: 1,\n  floodOpacity: 1,\n  stopOpacity: 1,\n  strokeDasharray: 1,\n  strokeDashoffset: 1,\n  strokeMiterlimit: 1,\n  strokeOpacity: 1,\n  strokeWidth: 1\n};\n\n\n\n// EXTERNAL MODULE: ./node_modules/@emotion/memoize/dist/emotion-memoize.esm.js\nvar emotion_memoize_esm = __webpack_require__(6289);\n;// ./node_modules/@emotion/serialize/dist/emotion-serialize.esm.js\n\n\n\n\nvar isDevelopment = false;\n\nvar hyphenateRegex = /[A-Z]|^ms/g;\nvar animationRegex = /_EMO_([^_]+?)_([^]*?)_EMO_/g;\n\nvar isCustomProperty = function isCustomProperty(property) {\n  return property.charCodeAt(1) === 45;\n};\n\nvar isProcessableValue = function isProcessableValue(value) {\n  return value != null && typeof value !== 'boolean';\n};\n\nvar processStyleName = /* #__PURE__ */(0,emotion_memoize_esm/* default */.A)(function (styleName) {\n  return isCustomProperty(styleName) ? styleName : styleName.replace(hyphenateRegex, '-$&').toLowerCase();\n});\n\nvar processStyleValue = function processStyleValue(key, value) {\n  switch (key) {\n    case 'animation':\n    case 'animationName':\n      {\n        if (typeof value === 'string') {\n          return value.replace(animationRegex, function (match, p1, p2) {\n            cursor = {\n              name: p1,\n              styles: p2,\n              next: cursor\n            };\n            return p1;\n          });\n        }\n      }\n  }\n\n  if (unitlessKeys[key] !== 1 && !isCustomProperty(key) && typeof value === 'number' && value !== 0) {\n    return value + 'px';\n  }\n\n  return value;\n};\n\nvar noComponentSelectorMessage = 'Component selectors can only be used in conjunction with ' + '@emotion/babel-plugin, the swc Emotion plugin, or another Emotion-aware ' + 'compiler transform.';\n\nfunction handleInterpolation(mergedProps, registered, interpolation) {\n  if (interpolation == null) {\n    return '';\n  }\n\n  var componentSelector = interpolation;\n\n  if (componentSelector.__emotion_styles !== undefined) {\n\n    return componentSelector;\n  }\n\n  switch (typeof interpolation) {\n    case 'boolean':\n      {\n        return '';\n      }\n\n    case 'object':\n      {\n        var keyframes = interpolation;\n\n        if (keyframes.anim === 1) {\n          cursor = {\n            name: keyframes.name,\n            styles: keyframes.styles,\n            next: cursor\n          };\n          return keyframes.name;\n        }\n\n        var serializedStyles = interpolation;\n\n        if (serializedStyles.styles !== undefined) {\n          var next = serializedStyles.next;\n\n          if (next !== undefined) {\n            // not the most efficient thing ever but this is a pretty rare case\n            // and there will be very few iterations of this generally\n            while (next !== undefined) {\n              cursor = {\n                name: next.name,\n                styles: next.styles,\n                next: cursor\n              };\n              next = next.next;\n            }\n          }\n\n          var styles = serializedStyles.styles + \";\";\n          return styles;\n        }\n\n        return createStringFromObject(mergedProps, registered, interpolation);\n      }\n\n    case 'function':\n      {\n        if (mergedProps !== undefined) {\n          var previousCursor = cursor;\n          var result = interpolation(mergedProps);\n          cursor = previousCursor;\n          return handleInterpolation(mergedProps, registered, result);\n        }\n\n        break;\n      }\n  } // finalize string values (regular strings and functions interpolated into css calls)\n\n\n  var asString = interpolation;\n\n  if (registered == null) {\n    return asString;\n  }\n\n  var cached = registered[asString];\n  return cached !== undefined ? cached : asString;\n}\n\nfunction createStringFromObject(mergedProps, registered, obj) {\n  var string = '';\n\n  if (Array.isArray(obj)) {\n    for (var i = 0; i < obj.length; i++) {\n      string += handleInterpolation(mergedProps, registered, obj[i]) + \";\";\n    }\n  } else {\n    for (var key in obj) {\n      var value = obj[key];\n\n      if (typeof value !== 'object') {\n        var asString = value;\n\n        if (registered != null && registered[asString] !== undefined) {\n          string += key + \"{\" + registered[asString] + \"}\";\n        } else if (isProcessableValue(asString)) {\n          string += processStyleName(key) + \":\" + processStyleValue(key, asString) + \";\";\n        }\n      } else {\n        if (key === 'NO_COMPONENT_SELECTOR' && isDevelopment) {\n          throw new Error(noComponentSelectorMessage);\n        }\n\n        if (Array.isArray(value) && typeof value[0] === 'string' && (registered == null || registered[value[0]] === undefined)) {\n          for (var _i = 0; _i < value.length; _i++) {\n            if (isProcessableValue(value[_i])) {\n              string += processStyleName(key) + \":\" + processStyleValue(key, value[_i]) + \";\";\n            }\n          }\n        } else {\n          var interpolated = handleInterpolation(mergedProps, registered, value);\n\n          switch (key) {\n            case 'animation':\n            case 'animationName':\n              {\n                string += processStyleName(key) + \":\" + interpolated + \";\";\n                break;\n              }\n\n            default:\n              {\n\n                string += key + \"{\" + interpolated + \"}\";\n              }\n          }\n        }\n      }\n    }\n  }\n\n  return string;\n}\n\nvar labelPattern = /label:\\s*([^\\s;{]+)\\s*(;|$)/g; // this is the cursor for keyframes\n// keyframes are stored on the SerializedStyles object as a linked list\n\nvar cursor;\nfunction serializeStyles(args, registered, mergedProps) {\n  if (args.length === 1 && typeof args[0] === 'object' && args[0] !== null && args[0].styles !== undefined) {\n    return args[0];\n  }\n\n  var stringMode = true;\n  var styles = '';\n  cursor = undefined;\n  var strings = args[0];\n\n  if (strings == null || strings.raw === undefined) {\n    stringMode = false;\n    styles += handleInterpolation(mergedProps, registered, strings);\n  } else {\n    var asTemplateStringsArr = strings;\n\n    styles += asTemplateStringsArr[0];\n  } // we start at 1 since we've already handled the first arg\n\n\n  for (var i = 1; i < args.length; i++) {\n    styles += handleInterpolation(mergedProps, registered, args[i]);\n\n    if (stringMode) {\n      var templateStringsArr = strings;\n\n      styles += templateStringsArr[i];\n    }\n  } // using a global regex with .exec is stateful so lastIndex has to be reset each time\n\n\n  labelPattern.lastIndex = 0;\n  var identifierName = '';\n  var match; // https://esbench.com/bench/5b809c2cf2949800a0f61fb5\n\n  while ((match = labelPattern.exec(styles)) !== null) {\n    identifierName += '-' + match[1];\n  }\n\n  var name = murmur2(styles) + identifierName;\n\n  return {\n    name: name,\n    styles: styles,\n    next: cursor\n  };\n}\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Y2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9oYXNoL2Rpc3QvZW1vdGlvbi1oYXNoLmVzbS5qcz9lZjAwIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3VuaXRsZXNzL2Rpc3QvZW1vdGlvbi11bml0bGVzcy5lc20uanM/YWQ1MSIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9zZXJpYWxpemUvZGlzdC9lbW90aW9uLXNlcmlhbGl6ZS5lc20uanM/ODQyZCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy8gSW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL2dhcnljb3VydC9tdXJtdXJoYXNoLWpzXG4vLyBQb3J0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vYWFwcGxlYnkvc21oYXNoZXIvYmxvYi82MWEwNTMwZjI4Mjc3ZjJlODUwYmZjMzk2MDBjZTYxZDAyYjUxOGRlL3NyYy9NdXJtdXJIYXNoMi5jcHAjTDM3LUw4NlxuZnVuY3Rpb24gbXVybXVyMihzdHIpIHtcbiAgLy8gJ20nIGFuZCAncicgYXJlIG1peGluZyBjb25zdGFudHMgZ2VuZXJhdGVkIG9mZmxpbmUuXG4gIC8vIFRoZXkncmUgbm90IHJlYWxseSAnbWFnaWMnLCB0aGV5IGp1c3QgaGFwcGVuIHRvIHdvcmsgd2VsbC5cbiAgLy8gY29uc3QgbSA9IDB4NWJkMWU5OTU7XG4gIC8vIGNvbnN0IHIgPSAyNDtcbiAgLy8gSW5pdGlhbGl6ZSB0aGUgaGFzaFxuICB2YXIgaCA9IDA7IC8vIE1peCA0IGJ5dGVzIGF0IGEgdGltZSBpbnRvIHRoZSBoYXNoXG5cbiAgdmFyIGssXG4gICAgICBpID0gMCxcbiAgICAgIGxlbiA9IHN0ci5sZW5ndGg7XG5cbiAgZm9yICg7IGxlbiA+PSA0OyArK2ksIGxlbiAtPSA0KSB7XG4gICAgayA9IHN0ci5jaGFyQ29kZUF0KGkpICYgMHhmZiB8IChzdHIuY2hhckNvZGVBdCgrK2kpICYgMHhmZikgPDwgOCB8IChzdHIuY2hhckNvZGVBdCgrK2kpICYgMHhmZikgPDwgMTYgfCAoc3RyLmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDI0O1xuICAgIGsgPVxuICAgIC8qIE1hdGguaW11bChrLCBtKTogKi9cbiAgICAoayAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKChrID4+PiAxNikgKiAweGU5OTUgPDwgMTYpO1xuICAgIGsgXj1cbiAgICAvKiBrID4+PiByOiAqL1xuICAgIGsgPj4+IDI0O1xuICAgIGggPVxuICAgIC8qIE1hdGguaW11bChrLCBtKTogKi9cbiAgICAoayAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKChrID4+PiAxNikgKiAweGU5OTUgPDwgMTYpIF5cbiAgICAvKiBNYXRoLmltdWwoaCwgbSk6ICovXG4gICAgKGggJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoaCA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KTtcbiAgfSAvLyBIYW5kbGUgdGhlIGxhc3QgZmV3IGJ5dGVzIG9mIHRoZSBpbnB1dCBhcnJheVxuXG5cbiAgc3dpdGNoIChsZW4pIHtcbiAgICBjYXNlIDM6XG4gICAgICBoIF49IChzdHIuY2hhckNvZGVBdChpICsgMikgJiAweGZmKSA8PCAxNjtcblxuICAgIGNhc2UgMjpcbiAgICAgIGggXj0gKHN0ci5jaGFyQ29kZUF0KGkgKyAxKSAmIDB4ZmYpIDw8IDg7XG5cbiAgICBjYXNlIDE6XG4gICAgICBoIF49IHN0ci5jaGFyQ29kZUF0KGkpICYgMHhmZjtcbiAgICAgIGggPVxuICAgICAgLyogTWF0aC5pbXVsKGgsIG0pOiAqL1xuICAgICAgKGggJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoaCA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KTtcbiAgfSAvLyBEbyBhIGZldyBmaW5hbCBtaXhlcyBvZiB0aGUgaGFzaCB0byBlbnN1cmUgdGhlIGxhc3QgZmV3XG4gIC8vIGJ5dGVzIGFyZSB3ZWxsLWluY29ycG9yYXRlZC5cblxuXG4gIGggXj0gaCA+Pj4gMTM7XG4gIGggPVxuICAvKiBNYXRoLmltdWwoaCwgbSk6ICovXG4gIChoICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKGggPj4+IDE2KSAqIDB4ZTk5NSA8PCAxNik7XG4gIHJldHVybiAoKGggXiBoID4+PiAxNSkgPj4+IDApLnRvU3RyaW5nKDM2KTtcbn1cblxuZXhwb3J0IHsgbXVybXVyMiBhcyBkZWZhdWx0IH07XG4iLCJ2YXIgdW5pdGxlc3NLZXlzID0ge1xuICBhbmltYXRpb25JdGVyYXRpb25Db3VudDogMSxcbiAgYXNwZWN0UmF0aW86IDEsXG4gIGJvcmRlckltYWdlT3V0c2V0OiAxLFxuICBib3JkZXJJbWFnZVNsaWNlOiAxLFxuICBib3JkZXJJbWFnZVdpZHRoOiAxLFxuICBib3hGbGV4OiAxLFxuICBib3hGbGV4R3JvdXA6IDEsXG4gIGJveE9yZGluYWxHcm91cDogMSxcbiAgY29sdW1uQ291bnQ6IDEsXG4gIGNvbHVtbnM6IDEsXG4gIGZsZXg6IDEsXG4gIGZsZXhHcm93OiAxLFxuICBmbGV4UG9zaXRpdmU6IDEsXG4gIGZsZXhTaHJpbms6IDEsXG4gIGZsZXhOZWdhdGl2ZTogMSxcbiAgZmxleE9yZGVyOiAxLFxuICBncmlkUm93OiAxLFxuICBncmlkUm93RW5kOiAxLFxuICBncmlkUm93U3BhbjogMSxcbiAgZ3JpZFJvd1N0YXJ0OiAxLFxuICBncmlkQ29sdW1uOiAxLFxuICBncmlkQ29sdW1uRW5kOiAxLFxuICBncmlkQ29sdW1uU3BhbjogMSxcbiAgZ3JpZENvbHVtblN0YXJ0OiAxLFxuICBtc0dyaWRSb3c6IDEsXG4gIG1zR3JpZFJvd1NwYW46IDEsXG4gIG1zR3JpZENvbHVtbjogMSxcbiAgbXNHcmlkQ29sdW1uU3BhbjogMSxcbiAgZm9udFdlaWdodDogMSxcbiAgbGluZUhlaWdodDogMSxcbiAgb3BhY2l0eTogMSxcbiAgb3JkZXI6IDEsXG4gIG9ycGhhbnM6IDEsXG4gIHNjYWxlOiAxLFxuICB0YWJTaXplOiAxLFxuICB3aWRvd3M6IDEsXG4gIHpJbmRleDogMSxcbiAgem9vbTogMSxcbiAgV2Via2l0TGluZUNsYW1wOiAxLFxuICAvLyBTVkctcmVsYXRlZCBwcm9wZXJ0aWVzXG4gIGZpbGxPcGFjaXR5OiAxLFxuICBmbG9vZE9wYWNpdHk6IDEsXG4gIHN0b3BPcGFjaXR5OiAxLFxuICBzdHJva2VEYXNoYXJyYXk6IDEsXG4gIHN0cm9rZURhc2hvZmZzZXQ6IDEsXG4gIHN0cm9rZU1pdGVybGltaXQ6IDEsXG4gIHN0cm9rZU9wYWNpdHk6IDEsXG4gIHN0cm9rZVdpZHRoOiAxXG59O1xuXG5leHBvcnQgeyB1bml0bGVzc0tleXMgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IGhhc2hTdHJpbmcgZnJvbSAnQGVtb3Rpb24vaGFzaCc7XG5pbXBvcnQgdW5pdGxlc3MgZnJvbSAnQGVtb3Rpb24vdW5pdGxlc3MnO1xuaW1wb3J0IG1lbW9pemUgZnJvbSAnQGVtb3Rpb24vbWVtb2l6ZSc7XG5cbnZhciBpc0RldmVsb3BtZW50ID0gZmFsc2U7XG5cbnZhciBoeXBoZW5hdGVSZWdleCA9IC9bQS1aXXxebXMvZztcbnZhciBhbmltYXRpb25SZWdleCA9IC9fRU1PXyhbXl9dKz8pXyhbXl0qPylfRU1PXy9nO1xuXG52YXIgaXNDdXN0b21Qcm9wZXJ0eSA9IGZ1bmN0aW9uIGlzQ3VzdG9tUHJvcGVydHkocHJvcGVydHkpIHtcbiAgcmV0dXJuIHByb3BlcnR5LmNoYXJDb2RlQXQoMSkgPT09IDQ1O1xufTtcblxudmFyIGlzUHJvY2Vzc2FibGVWYWx1ZSA9IGZ1bmN0aW9uIGlzUHJvY2Vzc2FibGVWYWx1ZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgIT09ICdib29sZWFuJztcbn07XG5cbnZhciBwcm9jZXNzU3R5bGVOYW1lID0gLyogI19fUFVSRV9fICovbWVtb2l6ZShmdW5jdGlvbiAoc3R5bGVOYW1lKSB7XG4gIHJldHVybiBpc0N1c3RvbVByb3BlcnR5KHN0eWxlTmFtZSkgPyBzdHlsZU5hbWUgOiBzdHlsZU5hbWUucmVwbGFjZShoeXBoZW5hdGVSZWdleCwgJy0kJicpLnRvTG93ZXJDYXNlKCk7XG59KTtcblxudmFyIHByb2Nlc3NTdHlsZVZhbHVlID0gZnVuY3Rpb24gcHJvY2Vzc1N0eWxlVmFsdWUoa2V5LCB2YWx1ZSkge1xuICBzd2l0Y2ggKGtleSkge1xuICAgIGNhc2UgJ2FuaW1hdGlvbic6XG4gICAgY2FzZSAnYW5pbWF0aW9uTmFtZSc6XG4gICAgICB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoYW5pbWF0aW9uUmVnZXgsIGZ1bmN0aW9uIChtYXRjaCwgcDEsIHAyKSB7XG4gICAgICAgICAgICBjdXJzb3IgPSB7XG4gICAgICAgICAgICAgIG5hbWU6IHAxLFxuICAgICAgICAgICAgICBzdHlsZXM6IHAyLFxuICAgICAgICAgICAgICBuZXh0OiBjdXJzb3JcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gcDE7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgfVxuXG4gIGlmICh1bml0bGVzc1trZXldICE9PSAxICYmICFpc0N1c3RvbVByb3BlcnR5KGtleSkgJiYgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB2YWx1ZSAhPT0gMCkge1xuICAgIHJldHVybiB2YWx1ZSArICdweCc7XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59O1xuXG52YXIgbm9Db21wb25lbnRTZWxlY3Rvck1lc3NhZ2UgPSAnQ29tcG9uZW50IHNlbGVjdG9ycyBjYW4gb25seSBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggJyArICdAZW1vdGlvbi9iYWJlbC1wbHVnaW4sIHRoZSBzd2MgRW1vdGlvbiBwbHVnaW4sIG9yIGFub3RoZXIgRW1vdGlvbi1hd2FyZSAnICsgJ2NvbXBpbGVyIHRyYW5zZm9ybS4nO1xuXG5mdW5jdGlvbiBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBpbnRlcnBvbGF0aW9uKSB7XG4gIGlmIChpbnRlcnBvbGF0aW9uID09IG51bGwpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICB2YXIgY29tcG9uZW50U2VsZWN0b3IgPSBpbnRlcnBvbGF0aW9uO1xuXG4gIGlmIChjb21wb25lbnRTZWxlY3Rvci5fX2Vtb3Rpb25fc3R5bGVzICE9PSB1bmRlZmluZWQpIHtcblxuICAgIHJldHVybiBjb21wb25lbnRTZWxlY3RvcjtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZW9mIGludGVycG9sYXRpb24pIHtcbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuXG4gICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgIHtcbiAgICAgICAgdmFyIGtleWZyYW1lcyA9IGludGVycG9sYXRpb247XG5cbiAgICAgICAgaWYgKGtleWZyYW1lcy5hbmltID09PSAxKSB7XG4gICAgICAgICAgY3Vyc29yID0ge1xuICAgICAgICAgICAgbmFtZToga2V5ZnJhbWVzLm5hbWUsXG4gICAgICAgICAgICBzdHlsZXM6IGtleWZyYW1lcy5zdHlsZXMsXG4gICAgICAgICAgICBuZXh0OiBjdXJzb3JcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiBrZXlmcmFtZXMubmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzZXJpYWxpemVkU3R5bGVzID0gaW50ZXJwb2xhdGlvbjtcblxuICAgICAgICBpZiAoc2VyaWFsaXplZFN0eWxlcy5zdHlsZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHZhciBuZXh0ID0gc2VyaWFsaXplZFN0eWxlcy5uZXh0O1xuXG4gICAgICAgICAgaWYgKG5leHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gbm90IHRoZSBtb3N0IGVmZmljaWVudCB0aGluZyBldmVyIGJ1dCB0aGlzIGlzIGEgcHJldHR5IHJhcmUgY2FzZVxuICAgICAgICAgICAgLy8gYW5kIHRoZXJlIHdpbGwgYmUgdmVyeSBmZXcgaXRlcmF0aW9ucyBvZiB0aGlzIGdlbmVyYWxseVxuICAgICAgICAgICAgd2hpbGUgKG5leHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBjdXJzb3IgPSB7XG4gICAgICAgICAgICAgICAgbmFtZTogbmV4dC5uYW1lLFxuICAgICAgICAgICAgICAgIHN0eWxlczogbmV4dC5zdHlsZXMsXG4gICAgICAgICAgICAgICAgbmV4dDogY3Vyc29yXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIG5leHQgPSBuZXh0Lm5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHN0eWxlcyA9IHNlcmlhbGl6ZWRTdHlsZXMuc3R5bGVzICsgXCI7XCI7XG4gICAgICAgICAgcmV0dXJuIHN0eWxlcztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjcmVhdGVTdHJpbmdGcm9tT2JqZWN0KG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBpbnRlcnBvbGF0aW9uKTtcbiAgICAgIH1cblxuICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgIHtcbiAgICAgICAgaWYgKG1lcmdlZFByb3BzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB2YXIgcHJldmlvdXNDdXJzb3IgPSBjdXJzb3I7XG4gICAgICAgICAgdmFyIHJlc3VsdCA9IGludGVycG9sYXRpb24obWVyZ2VkUHJvcHMpO1xuICAgICAgICAgIGN1cnNvciA9IHByZXZpb3VzQ3Vyc29yO1xuICAgICAgICAgIHJldHVybiBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCByZXN1bHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gIH0gLy8gZmluYWxpemUgc3RyaW5nIHZhbHVlcyAocmVndWxhciBzdHJpbmdzIGFuZCBmdW5jdGlvbnMgaW50ZXJwb2xhdGVkIGludG8gY3NzIGNhbGxzKVxuXG5cbiAgdmFyIGFzU3RyaW5nID0gaW50ZXJwb2xhdGlvbjtcblxuICBpZiAocmVnaXN0ZXJlZCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nO1xuICB9XG5cbiAgdmFyIGNhY2hlZCA9IHJlZ2lzdGVyZWRbYXNTdHJpbmddO1xuICByZXR1cm4gY2FjaGVkICE9PSB1bmRlZmluZWQgPyBjYWNoZWQgOiBhc1N0cmluZztcbn1cblxuZnVuY3Rpb24gY3JlYXRlU3RyaW5nRnJvbU9iamVjdChtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgb2JqKSB7XG4gIHZhciBzdHJpbmcgPSAnJztcblxuICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmoubGVuZ3RoOyBpKyspIHtcbiAgICAgIHN0cmluZyArPSBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBvYmpbaV0pICsgXCI7XCI7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgIHZhciB2YWx1ZSA9IG9ialtrZXldO1xuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICB2YXIgYXNTdHJpbmcgPSB2YWx1ZTtcblxuICAgICAgICBpZiAocmVnaXN0ZXJlZCAhPSBudWxsICYmIHJlZ2lzdGVyZWRbYXNTdHJpbmddICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzdHJpbmcgKz0ga2V5ICsgXCJ7XCIgKyByZWdpc3RlcmVkW2FzU3RyaW5nXSArIFwifVwiO1xuICAgICAgICB9IGVsc2UgaWYgKGlzUHJvY2Vzc2FibGVWYWx1ZShhc1N0cmluZykpIHtcbiAgICAgICAgICBzdHJpbmcgKz0gcHJvY2Vzc1N0eWxlTmFtZShrZXkpICsgXCI6XCIgKyBwcm9jZXNzU3R5bGVWYWx1ZShrZXksIGFzU3RyaW5nKSArIFwiO1wiO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoa2V5ID09PSAnTk9fQ09NUE9ORU5UX1NFTEVDVE9SJyAmJiBpc0RldmVsb3BtZW50KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG5vQ29tcG9uZW50U2VsZWN0b3JNZXNzYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB0eXBlb2YgdmFsdWVbMF0gPT09ICdzdHJpbmcnICYmIChyZWdpc3RlcmVkID09IG51bGwgfHwgcmVnaXN0ZXJlZFt2YWx1ZVswXV0gPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgdmFsdWUubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBpZiAoaXNQcm9jZXNzYWJsZVZhbHVlKHZhbHVlW19pXSkpIHtcbiAgICAgICAgICAgICAgc3RyaW5nICs9IHByb2Nlc3NTdHlsZU5hbWUoa2V5KSArIFwiOlwiICsgcHJvY2Vzc1N0eWxlVmFsdWUoa2V5LCB2YWx1ZVtfaV0pICsgXCI7XCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBpbnRlcnBvbGF0ZWQgPSBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCB2YWx1ZSk7XG5cbiAgICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAnYW5pbWF0aW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ2FuaW1hdGlvbk5hbWUnOlxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3RyaW5nICs9IHByb2Nlc3NTdHlsZU5hbWUoa2V5KSArIFwiOlwiICsgaW50ZXJwb2xhdGVkICsgXCI7XCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAge1xuXG4gICAgICAgICAgICAgICAgc3RyaW5nICs9IGtleSArIFwie1wiICsgaW50ZXJwb2xhdGVkICsgXCJ9XCI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RyaW5nO1xufVxuXG52YXIgbGFiZWxQYXR0ZXJuID0gL2xhYmVsOlxccyooW15cXHM7e10rKVxccyooO3wkKS9nOyAvLyB0aGlzIGlzIHRoZSBjdXJzb3IgZm9yIGtleWZyYW1lc1xuLy8ga2V5ZnJhbWVzIGFyZSBzdG9yZWQgb24gdGhlIFNlcmlhbGl6ZWRTdHlsZXMgb2JqZWN0IGFzIGEgbGlua2VkIGxpc3RcblxudmFyIGN1cnNvcjtcbmZ1bmN0aW9uIHNlcmlhbGl6ZVN0eWxlcyhhcmdzLCByZWdpc3RlcmVkLCBtZXJnZWRQcm9wcykge1xuICBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYgdHlwZW9mIGFyZ3NbMF0gPT09ICdvYmplY3QnICYmIGFyZ3NbMF0gIT09IG51bGwgJiYgYXJnc1swXS5zdHlsZXMgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBhcmdzWzBdO1xuICB9XG5cbiAgdmFyIHN0cmluZ01vZGUgPSB0cnVlO1xuICB2YXIgc3R5bGVzID0gJyc7XG4gIGN1cnNvciA9IHVuZGVmaW5lZDtcbiAgdmFyIHN0cmluZ3MgPSBhcmdzWzBdO1xuXG4gIGlmIChzdHJpbmdzID09IG51bGwgfHwgc3RyaW5ncy5yYXcgPT09IHVuZGVmaW5lZCkge1xuICAgIHN0cmluZ01vZGUgPSBmYWxzZTtcbiAgICBzdHlsZXMgKz0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgc3RyaW5ncyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGFzVGVtcGxhdGVTdHJpbmdzQXJyID0gc3RyaW5ncztcblxuICAgIHN0eWxlcyArPSBhc1RlbXBsYXRlU3RyaW5nc0FyclswXTtcbiAgfSAvLyB3ZSBzdGFydCBhdCAxIHNpbmNlIHdlJ3ZlIGFscmVhZHkgaGFuZGxlZCB0aGUgZmlyc3QgYXJnXG5cblxuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICBzdHlsZXMgKz0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgYXJnc1tpXSk7XG5cbiAgICBpZiAoc3RyaW5nTW9kZSkge1xuICAgICAgdmFyIHRlbXBsYXRlU3RyaW5nc0FyciA9IHN0cmluZ3M7XG5cbiAgICAgIHN0eWxlcyArPSB0ZW1wbGF0ZVN0cmluZ3NBcnJbaV07XG4gICAgfVxuICB9IC8vIHVzaW5nIGEgZ2xvYmFsIHJlZ2V4IHdpdGggLmV4ZWMgaXMgc3RhdGVmdWwgc28gbGFzdEluZGV4IGhhcyB0byBiZSByZXNldCBlYWNoIHRpbWVcblxuXG4gIGxhYmVsUGF0dGVybi5sYXN0SW5kZXggPSAwO1xuICB2YXIgaWRlbnRpZmllck5hbWUgPSAnJztcbiAgdmFyIG1hdGNoOyAvLyBodHRwczovL2VzYmVuY2guY29tL2JlbmNoLzViODA5YzJjZjI5NDk4MDBhMGY2MWZiNVxuXG4gIHdoaWxlICgobWF0Y2ggPSBsYWJlbFBhdHRlcm4uZXhlYyhzdHlsZXMpKSAhPT0gbnVsbCkge1xuICAgIGlkZW50aWZpZXJOYW1lICs9ICctJyArIG1hdGNoWzFdO1xuICB9XG5cbiAgdmFyIG5hbWUgPSBoYXNoU3RyaW5nKHN0eWxlcykgKyBpZGVudGlmaWVyTmFtZTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgc3R5bGVzOiBzdHlsZXMsXG4gICAgbmV4dDogY3Vyc29yXG4gIH07XG59XG5cbmV4cG9ydCB7IHNlcmlhbGl6ZVN0eWxlcyB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3174\n")},3256:(module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1354);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6314);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n___CSS_LOADER_EXPORT___.push([module.id, ""]);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/**\r\n * WPAI Plugin Global Styles\r\n * Single source of truth for plugin-wide resets, typography, and scoping.\r\n */\r\n\r\n.wpai_plugin-container {\r\n  all: initial; /* Legacy reset */\r\n  font-family: "Outfit", sans-serif;\r\n  line-height: 1.5;\r\n  color: #333;\r\n}\r\n\r\n/* Ensure all nested elements respect the border-box model */\r\n.wpai_plugin-container *,\r\n.wpai_plugin-container *::before,\r\n.wpai_plugin-container *::after {\r\n  font-family: inherit; /* Essential: inherit font from parent container */\r\n}\r\n\r\n/* Material Icons Isolation (only affects our components) */\r\n.wpai_plugin-container .wpai_material-icons {\r\n  font-family: "Material Icons" !important;\r\n  font-weight: normal;\r\n  font-style: normal;\r\n  font-size: 24px;\r\n  line-height: 1;\r\n  letter-spacing: normal;\r\n  text-transform: none;\r\n  display: inline-block;\r\n  white-space: nowrap;\r\n  word-wrap: normal;\r\n  direction: ltr;\r\n  -webkit-font-smoothing: antialiased;\r\n}\r\n\r\n/* MUI Component Polishing: Prevents MUI modals/drawers from getting hidden by WP UI */\r\nbody:not(.wpai_plugin-container) .MuiPopover-root,\r\nbody:not(.wpai_plugin-container) .MuiDrawer-root,\r\nbody:not(.wpai_plugin-container) .MuiModal-root {\r\n  z-index: 99999 !important; /* Standardized high z-index for UI overlay components */\r\n}\r\n\r\n/* Generic Plugin Utility Classes */\r\n.wpai_admin-container {\r\n  padding: 0;\r\n  width: calc(100% + 40px);\r\n  min-height: calc(100vh - 32px);\r\n  box-sizing: border-box;\r\n}\r\n\r\n.wpai_chatbot-container {\r\n  position: fixed;\r\n  bottom: 20px;\r\n  right: 20px;\r\n  z-index: 9999;\r\n}\r\n\r\n/* Common form reset for WP integration */\r\n.wpai_plugin-container input,\r\n.wpai_plugin-container button,\r\n.wpai_plugin-container select,\r\n.wpai_plugin-container textarea {\r\n  font-family: "Outfit", sans-serif;\r\n  font-size: 14px;\r\n  line-height: inherit;\r\n}\r\n`, "",{"version":3,"sources":["webpack://./src/assets/css/global.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAIF;EACE,YAAY,EAAE,iBAAiB;EAC/B,iCAAiC;EACjC,gBAAgB;EAChB,WAAW;AACb;;AAEA,4DAA4D;AAC5D;;;EAGE,oBAAoB,EAAE,kDAAkD;AAC1E;;AAEA,2DAA2D;AAC3D;EACE,wCAAwC;EACxC,mBAAmB;EACnB,kBAAkB;EAClB,eAAe;EACf,cAAc;EACd,sBAAsB;EACtB,oBAAoB;EACpB,qBAAqB;EACrB,mBAAmB;EACnB,iBAAiB;EACjB,cAAc;EACd,mCAAmC;AACrC;;AAEA,sFAAsF;AACtF;;;EAGE,yBAAyB,EAAE,wDAAwD;AACrF;;AAEA,mCAAmC;AACnC;EACE,UAAU;EACV,wBAAwB;EACxB,8BAA8B;EAC9B,sBAAsB;AACxB;;AAEA;EACE,eAAe;EACf,YAAY;EACZ,WAAW;EACX,aAAa;AACf;;AAEA,yCAAyC;AACzC;;;;EAIE,iCAAiC;EACjC,eAAe;EACf,oBAAoB;AACtB","sourcesContent":["/**\\r\\n * WPAI Plugin Global Styles\\r\\n * Single source of truth for plugin-wide resets, typography, and scoping.\\r\\n */\\r\\n\\r\\n\\r\\n\\r\\n.wpai_plugin-container {\\r\\n  all: initial; /* Legacy reset */\\r\\n  font-family: \\"Outfit\\", sans-serif;\\r\\n  line-height: 1.5;\\r\\n  color: #333;\\r\\n}\\r\\n\\r\\n/* Ensure all nested elements respect the border-box model */\\r\\n.wpai_plugin-container *,\\r\\n.wpai_plugin-container *::before,\\r\\n.wpai_plugin-container *::after {\\r\\n  font-family: inherit; /* Essential: inherit font from parent container */\\r\\n}\\r\\n\\r\\n/* Material Icons Isolation (only affects our components) */\\r\\n.wpai_plugin-container .wpai_material-icons {\\r\\n  font-family: \\"Material Icons\\" !important;\\r\\n  font-weight: normal;\\r\\n  font-style: normal;\\r\\n  font-size: 24px;\\r\\n  line-height: 1;\\r\\n  letter-spacing: normal;\\r\\n  text-transform: none;\\r\\n  display: inline-block;\\r\\n  white-space: nowrap;\\r\\n  word-wrap: normal;\\r\\n  direction: ltr;\\r\\n  -webkit-font-smoothing: antialiased;\\r\\n}\\r\\n\\r\\n/* MUI Component Polishing: Prevents MUI modals/drawers from getting hidden by WP UI */\\r\\nbody:not(.wpai_plugin-container) .MuiPopover-root,\\r\\nbody:not(.wpai_plugin-container) .MuiDrawer-root,\\r\\nbody:not(.wpai_plugin-container) .MuiModal-root {\\r\\n  z-index: 99999 !important; /* Standardized high z-index for UI overlay components */\\r\\n}\\r\\n\\r\\n/* Generic Plugin Utility Classes */\\r\\n.wpai_admin-container {\\r\\n  padding: 0;\\r\\n  width: calc(100% + 40px);\\r\\n  min-height: calc(100vh - 32px);\\r\\n  box-sizing: border-box;\\r\\n}\\r\\n\\r\\n.wpai_chatbot-container {\\r\\n  position: fixed;\\r\\n  bottom: 20px;\\r\\n  right: 20px;\\r\\n  z-index: 9999;\\r\\n}\\r\\n\\r\\n/* Common form reset for WP integration */\\r\\n.wpai_plugin-container input,\\r\\n.wpai_plugin-container button,\\r\\n.wpai_plugin-container select,\\r\\n.wpai_plugin-container textarea {\\r\\n  font-family: \\"Outfit\\", sans-serif;\\r\\n  font-size: 14px;\\r\\n  line-height: inherit;\\r\\n}\\r\\n"],"sourceRoot":""}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzI1Ni5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7QUFDZ0g7QUFDakI7QUFDL0YsOEJBQThCLG1GQUEyQixDQUFDLDRGQUFxQztBQUMvRixrSUFBa0k7QUFDbEk7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLDhGQUE4RixNQUFNLEtBQUssc0JBQXNCLGFBQWEsYUFBYSxXQUFXLE1BQU0sWUFBWSxRQUFRLHdCQUF3QixPQUFPLFlBQVksTUFBTSxZQUFZLGFBQWEsYUFBYSxXQUFXLFVBQVUsWUFBWSxhQUFhLGFBQWEsYUFBYSxhQUFhLFdBQVcsWUFBWSxPQUFPLFlBQVksUUFBUSx3QkFBd0IsT0FBTyxZQUFZLE1BQU0sVUFBVSxZQUFZLGFBQWEsYUFBYSxPQUFPLEtBQUssVUFBVSxVQUFVLFVBQVUsVUFBVSxNQUFNLFlBQVksU0FBUyxZQUFZLFdBQVcsWUFBWSxzUEFBc1AsZ0NBQWdDLG9CQUFvQiw0REFBNEQsdUJBQXVCLGtCQUFrQixLQUFLLDRLQUE0Syw0QkFBNEIsd0RBQXdELHFIQUFxSCxpREFBaUQsMEJBQTBCLHlCQUF5QixzQkFBc0IscUJBQXFCLDZCQUE2QiwyQkFBMkIsNEJBQTRCLDBCQUEwQix3QkFBd0IscUJBQXFCLDBDQUEwQyxLQUFLLCtQQUErUCxpQ0FBaUMsOERBQThELHVFQUF1RSxpQkFBaUIsK0JBQStCLHFDQUFxQyw2QkFBNkIsS0FBSyxpQ0FBaUMsc0JBQXNCLG1CQUFtQixrQkFBa0Isb0JBQW9CLEtBQUssNExBQTRMLDBDQUEwQyxzQkFBc0IsMkJBQTJCLEtBQUssdUJBQXVCO0FBQzVwRjtBQUNBLGlFQUFlLHVCQUF1QixFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9zcmMvYXNzZXRzL2Nzcy9nbG9iYWwuY3NzPzMxMjciXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiQGltcG9ydCB1cmwoaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1PdXRmaXQ6d2dodEAxMDAuLjkwMCZkaXNwbGF5PXN3YXApO1wiXSk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgYC8qKlxyXG4gKiBXUEFJIFBsdWdpbiBHbG9iYWwgU3R5bGVzXHJcbiAqIFNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIHBsdWdpbi13aWRlIHJlc2V0cywgdHlwb2dyYXBoeSwgYW5kIHNjb3BpbmcuXHJcbiAqL1xyXG5cclxuLndwYWlfcGx1Z2luLWNvbnRhaW5lciB7XHJcbiAgYWxsOiBpbml0aWFsOyAvKiBMZWdhY3kgcmVzZXQgKi9cclxuICBmb250LWZhbWlseTogXCJPdXRmaXRcIiwgc2Fucy1zZXJpZjtcclxuICBsaW5lLWhlaWdodDogMS41O1xyXG4gIGNvbG9yOiAjMzMzO1xyXG59XHJcblxyXG4vKiBFbnN1cmUgYWxsIG5lc3RlZCBlbGVtZW50cyByZXNwZWN0IHRoZSBib3JkZXItYm94IG1vZGVsICovXHJcbi53cGFpX3BsdWdpbi1jb250YWluZXIgKixcclxuLndwYWlfcGx1Z2luLWNvbnRhaW5lciAqOjpiZWZvcmUsXHJcbi53cGFpX3BsdWdpbi1jb250YWluZXIgKjo6YWZ0ZXIge1xyXG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0OyAvKiBFc3NlbnRpYWw6IGluaGVyaXQgZm9udCBmcm9tIHBhcmVudCBjb250YWluZXIgKi9cclxufVxyXG5cclxuLyogTWF0ZXJpYWwgSWNvbnMgSXNvbGF0aW9uIChvbmx5IGFmZmVjdHMgb3VyIGNvbXBvbmVudHMpICovXHJcbi53cGFpX3BsdWdpbi1jb250YWluZXIgLndwYWlfbWF0ZXJpYWwtaWNvbnMge1xyXG4gIGZvbnQtZmFtaWx5OiBcIk1hdGVyaWFsIEljb25zXCIgIWltcG9ydGFudDtcclxuICBmb250LXdlaWdodDogbm9ybWFsO1xyXG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcclxuICBmb250LXNpemU6IDI0cHg7XHJcbiAgbGluZS1oZWlnaHQ6IDE7XHJcbiAgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDtcclxuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcclxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcclxuICB3b3JkLXdyYXA6IG5vcm1hbDtcclxuICBkaXJlY3Rpb246IGx0cjtcclxuICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcclxufVxyXG5cclxuLyogTVVJIENvbXBvbmVudCBQb2xpc2hpbmc6IFByZXZlbnRzIE1VSSBtb2RhbHMvZHJhd2VycyBmcm9tIGdldHRpbmcgaGlkZGVuIGJ5IFdQIFVJICovXHJcbmJvZHk6bm90KC53cGFpX3BsdWdpbi1jb250YWluZXIpIC5NdWlQb3BvdmVyLXJvb3QsXHJcbmJvZHk6bm90KC53cGFpX3BsdWdpbi1jb250YWluZXIpIC5NdWlEcmF3ZXItcm9vdCxcclxuYm9keTpub3QoLndwYWlfcGx1Z2luLWNvbnRhaW5lcikgLk11aU1vZGFsLXJvb3Qge1xyXG4gIHotaW5kZXg6IDk5OTk5ICFpbXBvcnRhbnQ7IC8qIFN0YW5kYXJkaXplZCBoaWdoIHotaW5kZXggZm9yIFVJIG92ZXJsYXkgY29tcG9uZW50cyAqL1xyXG59XHJcblxyXG4vKiBHZW5lcmljIFBsdWdpbiBVdGlsaXR5IENsYXNzZXMgKi9cclxuLndwYWlfYWRtaW4tY29udGFpbmVyIHtcclxuICBwYWRkaW5nOiAwO1xyXG4gIHdpZHRoOiBjYWxjKDEwMCUgKyA0MHB4KTtcclxuICBtaW4taGVpZ2h0OiBjYWxjKDEwMHZoIC0gMzJweCk7XHJcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxufVxyXG5cclxuLndwYWlfY2hhdGJvdC1jb250YWluZXIge1xyXG4gIHBvc2l0aW9uOiBmaXhlZDtcclxuICBib3R0b206IDIwcHg7XHJcbiAgcmlnaHQ6IDIwcHg7XHJcbiAgei1pbmRleDogOTk5OTtcclxufVxyXG5cclxuLyogQ29tbW9uIGZvcm0gcmVzZXQgZm9yIFdQIGludGVncmF0aW9uICovXHJcbi53cGFpX3BsdWdpbi1jb250YWluZXIgaW5wdXQsXHJcbi53cGFpX3BsdWdpbi1jb250YWluZXIgYnV0dG9uLFxyXG4ud3BhaV9wbHVnaW4tY29udGFpbmVyIHNlbGVjdCxcclxuLndwYWlfcGx1Z2luLWNvbnRhaW5lciB0ZXh0YXJlYSB7XHJcbiAgZm9udC1mYW1pbHk6IFwiT3V0Zml0XCIsIHNhbnMtc2VyaWY7XHJcbiAgZm9udC1zaXplOiAxNHB4O1xyXG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xyXG59XHJcbmAsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vc3JjL2Fzc2V0cy9jc3MvZ2xvYmFsLmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQTs7O0VBR0U7O0FBSUY7RUFDRSxZQUFZLEVBQUUsaUJBQWlCO0VBQy9CLGlDQUFpQztFQUNqQyxnQkFBZ0I7RUFDaEIsV0FBVztBQUNiOztBQUVBLDREQUE0RDtBQUM1RDs7O0VBR0Usb0JBQW9CLEVBQUUsa0RBQWtEO0FBQzFFOztBQUVBLDJEQUEyRDtBQUMzRDtFQUNFLHdDQUF3QztFQUN4QyxtQkFBbUI7RUFDbkIsa0JBQWtCO0VBQ2xCLGVBQWU7RUFDZixjQUFjO0VBQ2Qsc0JBQXNCO0VBQ3RCLG9CQUFvQjtFQUNwQixxQkFBcUI7RUFDckIsbUJBQW1CO0VBQ25CLGlCQUFpQjtFQUNqQixjQUFjO0VBQ2QsbUNBQW1DO0FBQ3JDOztBQUVBLHNGQUFzRjtBQUN0Rjs7O0VBR0UseUJBQXlCLEVBQUUsd0RBQXdEO0FBQ3JGOztBQUVBLG1DQUFtQztBQUNuQztFQUNFLFVBQVU7RUFDVix3QkFBd0I7RUFDeEIsOEJBQThCO0VBQzlCLHNCQUFzQjtBQUN4Qjs7QUFFQTtFQUNFLGVBQWU7RUFDZixZQUFZO0VBQ1osV0FBVztFQUNYLGFBQWE7QUFDZjs7QUFFQSx5Q0FBeUM7QUFDekM7Ozs7RUFJRSxpQ0FBaUM7RUFDakMsZUFBZTtFQUNmLG9CQUFvQjtBQUN0QlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCIvKipcXHJcXG4gKiBXUEFJIFBsdWdpbiBHbG9iYWwgU3R5bGVzXFxyXFxuICogU2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBmb3IgcGx1Z2luLXdpZGUgcmVzZXRzLCB0eXBvZ3JhcGh5LCBhbmQgc2NvcGluZy5cXHJcXG4gKi9cXHJcXG5cXHJcXG5AaW1wb3J0IHVybChcXFwiaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1PdXRmaXQ6d2dodEAxMDAuLjkwMCZkaXNwbGF5PXN3YXBcXFwiKTtcXHJcXG5cXHJcXG4ud3BhaV9wbHVnaW4tY29udGFpbmVyIHtcXHJcXG4gIGFsbDogaW5pdGlhbDsgLyogTGVnYWN5IHJlc2V0ICovXFxyXFxuICBmb250LWZhbWlseTogXFxcIk91dGZpdFxcXCIsIHNhbnMtc2VyaWY7XFxyXFxuICBsaW5lLWhlaWdodDogMS41O1xcclxcbiAgY29sb3I6ICMzMzM7XFxyXFxufVxcclxcblxcclxcbi8qIEVuc3VyZSBhbGwgbmVzdGVkIGVsZW1lbnRzIHJlc3BlY3QgdGhlIGJvcmRlci1ib3ggbW9kZWwgKi9cXHJcXG4ud3BhaV9wbHVnaW4tY29udGFpbmVyICosXFxyXFxuLndwYWlfcGx1Z2luLWNvbnRhaW5lciAqOjpiZWZvcmUsXFxyXFxuLndwYWlfcGx1Z2luLWNvbnRhaW5lciAqOjphZnRlciB7XFxyXFxuICBmb250LWZhbWlseTogaW5oZXJpdDsgLyogRXNzZW50aWFsOiBpbmhlcml0IGZvbnQgZnJvbSBwYXJlbnQgY29udGFpbmVyICovXFxyXFxufVxcclxcblxcclxcbi8qIE1hdGVyaWFsIEljb25zIElzb2xhdGlvbiAob25seSBhZmZlY3RzIG91ciBjb21wb25lbnRzKSAqL1xcclxcbi53cGFpX3BsdWdpbi1jb250YWluZXIgLndwYWlfbWF0ZXJpYWwtaWNvbnMge1xcclxcbiAgZm9udC1mYW1pbHk6IFxcXCJNYXRlcmlhbCBJY29uc1xcXCIgIWltcG9ydGFudDtcXHJcXG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XFxyXFxuICBmb250LXN0eWxlOiBub3JtYWw7XFxyXFxuICBmb250LXNpemU6IDI0cHg7XFxyXFxuICBsaW5lLWhlaWdodDogMTtcXHJcXG4gIGxldHRlci1zcGFjaW5nOiBub3JtYWw7XFxyXFxuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcXHJcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXHJcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxyXFxuICB3b3JkLXdyYXA6IG5vcm1hbDtcXHJcXG4gIGRpcmVjdGlvbjogbHRyO1xcclxcbiAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XFxyXFxufVxcclxcblxcclxcbi8qIE1VSSBDb21wb25lbnQgUG9saXNoaW5nOiBQcmV2ZW50cyBNVUkgbW9kYWxzL2RyYXdlcnMgZnJvbSBnZXR0aW5nIGhpZGRlbiBieSBXUCBVSSAqL1xcclxcbmJvZHk6bm90KC53cGFpX3BsdWdpbi1jb250YWluZXIpIC5NdWlQb3BvdmVyLXJvb3QsXFxyXFxuYm9keTpub3QoLndwYWlfcGx1Z2luLWNvbnRhaW5lcikgLk11aURyYXdlci1yb290LFxcclxcbmJvZHk6bm90KC53cGFpX3BsdWdpbi1jb250YWluZXIpIC5NdWlNb2RhbC1yb290IHtcXHJcXG4gIHotaW5kZXg6IDk5OTk5ICFpbXBvcnRhbnQ7IC8qIFN0YW5kYXJkaXplZCBoaWdoIHotaW5kZXggZm9yIFVJIG92ZXJsYXkgY29tcG9uZW50cyAqL1xcclxcbn1cXHJcXG5cXHJcXG4vKiBHZW5lcmljIFBsdWdpbiBVdGlsaXR5IENsYXNzZXMgKi9cXHJcXG4ud3BhaV9hZG1pbi1jb250YWluZXIge1xcclxcbiAgcGFkZGluZzogMDtcXHJcXG4gIHdpZHRoOiBjYWxjKDEwMCUgKyA0MHB4KTtcXHJcXG4gIG1pbi1oZWlnaHQ6IGNhbGMoMTAwdmggLSAzMnB4KTtcXHJcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxyXFxufVxcclxcblxcclxcbi53cGFpX2NoYXRib3QtY29udGFpbmVyIHtcXHJcXG4gIHBvc2l0aW9uOiBmaXhlZDtcXHJcXG4gIGJvdHRvbTogMjBweDtcXHJcXG4gIHJpZ2h0OiAyMHB4O1xcclxcbiAgei1pbmRleDogOTk5OTtcXHJcXG59XFxyXFxuXFxyXFxuLyogQ29tbW9uIGZvcm0gcmVzZXQgZm9yIFdQIGludGVncmF0aW9uICovXFxyXFxuLndwYWlfcGx1Z2luLWNvbnRhaW5lciBpbnB1dCxcXHJcXG4ud3BhaV9wbHVnaW4tY29udGFpbmVyIGJ1dHRvbixcXHJcXG4ud3BhaV9wbHVnaW4tY29udGFpbmVyIHNlbGVjdCxcXHJcXG4ud3BhaV9wbHVnaW4tY29udGFpbmVyIHRleHRhcmVhIHtcXHJcXG4gIGZvbnQtZmFtaWx5OiBcXFwiT3V0Zml0XFxcIiwgc2Fucy1zZXJpZjtcXHJcXG4gIGZvbnQtc2l6ZTogMTRweDtcXHJcXG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xcclxcbn1cXHJcXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3256\n')},3313:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   A: () => (/* binding */ useIsFocusVisible)\n/* harmony export */ });\n/* unused harmony export teardown */\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1594);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _useTimeout_useTimeout__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3068);\n'use client';\n\n// based on https://github.com/WICG/focus-visible/blob/v4.1.5/src/focus-visible.js\n\n\nlet hadKeyboardEvent = true;\nlet hadFocusVisibleRecently = false;\nconst hadFocusVisibleRecentlyTimeout = new _useTimeout_useTimeout__WEBPACK_IMPORTED_MODULE_1__/* .Timeout */ .E();\nconst inputTypesWhitelist = {\n  text: true,\n  search: true,\n  url: true,\n  tel: true,\n  email: true,\n  password: true,\n  number: true,\n  date: true,\n  month: true,\n  week: true,\n  time: true,\n  datetime: true,\n  'datetime-local': true\n};\n\n/**\n * Computes whether the given element should automatically trigger the\n * `focus-visible` class being added, i.e. whether it should always match\n * `:focus-visible` when focused.\n * @param {Element} node\n * @returns {boolean}\n */\nfunction focusTriggersKeyboardModality(node) {\n  const {\n    type,\n    tagName\n  } = node;\n  if (tagName === 'INPUT' && inputTypesWhitelist[type] && !node.readOnly) {\n    return true;\n  }\n  if (tagName === 'TEXTAREA' && !node.readOnly) {\n    return true;\n  }\n  if (node.isContentEditable) {\n    return true;\n  }\n  return false;\n}\n\n/**\n * Keep track of our keyboard modality state with `hadKeyboardEvent`.\n * If the most recent user interaction was via the keyboard;\n * and the key press did not include a meta, alt/option, or control key;\n * then the modality is keyboard. Otherwise, the modality is not keyboard.\n * @param {KeyboardEvent} event\n */\nfunction handleKeyDown(event) {\n  if (event.metaKey || event.altKey || event.ctrlKey) {\n    return;\n  }\n  hadKeyboardEvent = true;\n}\n\n/**\n * If at any point a user clicks with a pointing device, ensure that we change\n * the modality away from keyboard.\n * This avoids the situation where a user presses a key on an already focused\n * element, and then clicks on a different element, focusing it with a\n * pointing device, while we still think we're in keyboard modality.\n */\nfunction handlePointerDown() {\n  hadKeyboardEvent = false;\n}\nfunction handleVisibilityChange() {\n  if (this.visibilityState === 'hidden') {\n    // If the tab becomes active again, the browser will handle calling focus\n    // on the element (Safari actually calls it twice).\n    // If this tab change caused a blur on an element with focus-visible,\n    // re-apply the class when the user switches back to the tab.\n    if (hadFocusVisibleRecently) {\n      hadKeyboardEvent = true;\n    }\n  }\n}\nfunction prepare(doc) {\n  doc.addEventListener('keydown', handleKeyDown, true);\n  doc.addEventListener('mousedown', handlePointerDown, true);\n  doc.addEventListener('pointerdown', handlePointerDown, true);\n  doc.addEventListener('touchstart', handlePointerDown, true);\n  doc.addEventListener('visibilitychange', handleVisibilityChange, true);\n}\nfunction teardown(doc) {\n  doc.removeEventListener('keydown', handleKeyDown, true);\n  doc.removeEventListener('mousedown', handlePointerDown, true);\n  doc.removeEventListener('pointerdown', handlePointerDown, true);\n  doc.removeEventListener('touchstart', handlePointerDown, true);\n  doc.removeEventListener('visibilitychange', handleVisibilityChange, true);\n}\nfunction isFocusVisible(event) {\n  const {\n    target\n  } = event;\n  try {\n    return target.matches(':focus-visible');\n  } catch (error) {\n    // Browsers not implementing :focus-visible will throw a SyntaxError.\n    // We use our own heuristic for those browsers.\n    // Rethrow might be better if it's not the expected error but do we really\n    // want to crash if focus-visible malfunctioned?\n  }\n\n  // No need for validFocusTarget check. The user does that by attaching it to\n  // focusable events only.\n  return hadKeyboardEvent || focusTriggersKeyboardModality(target);\n}\nfunction useIsFocusVisible() {\n  const ref = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(node => {\n    if (node != null) {\n      prepare(node.ownerDocument);\n    }\n  }, []);\n  const isFocusVisibleRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(false);\n\n  /**\n   * Should be called if a blur event is fired\n   */\n  function handleBlurVisible() {\n    // checking against potential state variable does not suffice if we focus and blur synchronously.\n    // React wouldn't have time to trigger a re-render so `focusVisible` would be stale.\n    // Ideally we would adjust `isFocusVisible(event)` to look at `relatedTarget` for blur events.\n    // This doesn't work in IE11 due to https://github.com/facebook/react/issues/3751\n    // TODO: check again if React releases their internal changes to focus event handling (https://github.com/facebook/react/pull/19186).\n    if (isFocusVisibleRef.current) {\n      // To detect a tab/window switch, we look for a blur event followed\n      // rapidly by a visibility change.\n      // If we don't see a visibility change within 100ms, it's probably a\n      // regular focus change.\n      hadFocusVisibleRecently = true;\n      hadFocusVisibleRecentlyTimeout.start(100, () => {\n        hadFocusVisibleRecently = false;\n      });\n      isFocusVisibleRef.current = false;\n      return true;\n    }\n    return false;\n  }\n\n  /**\n   * Should be called if a blur event is fired\n   */\n  function handleFocusVisible(event) {\n    if (isFocusVisible(event)) {\n      isFocusVisibleRef.current = true;\n      return true;\n    }\n    return false;\n  }\n  return {\n    isFocusVisibleRef,\n    onFocus: handleFocusVisible,\n    onBlur: handleBlurVisible,\n    ref\n  };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzMxMy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBRUE7QUFDK0I7QUFDb0I7QUFDbkQ7QUFDQTtBQUNBLDJDQUEyQyxvRUFBTztBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFNBQVM7QUFDcEIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxlQUFlO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ2U7QUFDZixjQUFjLDhDQUFpQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsNEJBQTRCLHlDQUFZOztBQUV4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL3VzZUlzRm9jdXNWaXNpYmxlL3VzZUlzRm9jdXNWaXNpYmxlLmpzPzA3OTYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG4vLyBiYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vV0lDRy9mb2N1cy12aXNpYmxlL2Jsb2IvdjQuMS41L3NyYy9mb2N1cy12aXNpYmxlLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBUaW1lb3V0IH0gZnJvbSAnLi4vdXNlVGltZW91dC91c2VUaW1lb3V0JztcbmxldCBoYWRLZXlib2FyZEV2ZW50ID0gdHJ1ZTtcbmxldCBoYWRGb2N1c1Zpc2libGVSZWNlbnRseSA9IGZhbHNlO1xuY29uc3QgaGFkRm9jdXNWaXNpYmxlUmVjZW50bHlUaW1lb3V0ID0gbmV3IFRpbWVvdXQoKTtcbmNvbnN0IGlucHV0VHlwZXNXaGl0ZWxpc3QgPSB7XG4gIHRleHQ6IHRydWUsXG4gIHNlYXJjaDogdHJ1ZSxcbiAgdXJsOiB0cnVlLFxuICB0ZWw6IHRydWUsXG4gIGVtYWlsOiB0cnVlLFxuICBwYXNzd29yZDogdHJ1ZSxcbiAgbnVtYmVyOiB0cnVlLFxuICBkYXRlOiB0cnVlLFxuICBtb250aDogdHJ1ZSxcbiAgd2VlazogdHJ1ZSxcbiAgdGltZTogdHJ1ZSxcbiAgZGF0ZXRpbWU6IHRydWUsXG4gICdkYXRldGltZS1sb2NhbCc6IHRydWVcbn07XG5cbi8qKlxuICogQ29tcHV0ZXMgd2hldGhlciB0aGUgZ2l2ZW4gZWxlbWVudCBzaG91bGQgYXV0b21hdGljYWxseSB0cmlnZ2VyIHRoZVxuICogYGZvY3VzLXZpc2libGVgIGNsYXNzIGJlaW5nIGFkZGVkLCBpLmUuIHdoZXRoZXIgaXQgc2hvdWxkIGFsd2F5cyBtYXRjaFxuICogYDpmb2N1cy12aXNpYmxlYCB3aGVuIGZvY3VzZWQuXG4gKiBAcGFyYW0ge0VsZW1lbnR9IG5vZGVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBmb2N1c1RyaWdnZXJzS2V5Ym9hcmRNb2RhbGl0eShub2RlKSB7XG4gIGNvbnN0IHtcbiAgICB0eXBlLFxuICAgIHRhZ05hbWVcbiAgfSA9IG5vZGU7XG4gIGlmICh0YWdOYW1lID09PSAnSU5QVVQnICYmIGlucHV0VHlwZXNXaGl0ZWxpc3RbdHlwZV0gJiYgIW5vZGUucmVhZE9ubHkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAodGFnTmFtZSA9PT0gJ1RFWFRBUkVBJyAmJiAhbm9kZS5yZWFkT25seSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChub2RlLmlzQ29udGVudEVkaXRhYmxlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEtlZXAgdHJhY2sgb2Ygb3VyIGtleWJvYXJkIG1vZGFsaXR5IHN0YXRlIHdpdGggYGhhZEtleWJvYXJkRXZlbnRgLlxuICogSWYgdGhlIG1vc3QgcmVjZW50IHVzZXIgaW50ZXJhY3Rpb24gd2FzIHZpYSB0aGUga2V5Ym9hcmQ7XG4gKiBhbmQgdGhlIGtleSBwcmVzcyBkaWQgbm90IGluY2x1ZGUgYSBtZXRhLCBhbHQvb3B0aW9uLCBvciBjb250cm9sIGtleTtcbiAqIHRoZW4gdGhlIG1vZGFsaXR5IGlzIGtleWJvYXJkLiBPdGhlcndpc2UsIHRoZSBtb2RhbGl0eSBpcyBub3Qga2V5Ym9hcmQuXG4gKiBAcGFyYW0ge0tleWJvYXJkRXZlbnR9IGV2ZW50XG4gKi9cbmZ1bmN0aW9uIGhhbmRsZUtleURvd24oZXZlbnQpIHtcbiAgaWYgKGV2ZW50Lm1ldGFLZXkgfHwgZXZlbnQuYWx0S2V5IHx8IGV2ZW50LmN0cmxLZXkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaGFkS2V5Ym9hcmRFdmVudCA9IHRydWU7XG59XG5cbi8qKlxuICogSWYgYXQgYW55IHBvaW50IGEgdXNlciBjbGlja3Mgd2l0aCBhIHBvaW50aW5nIGRldmljZSwgZW5zdXJlIHRoYXQgd2UgY2hhbmdlXG4gKiB0aGUgbW9kYWxpdHkgYXdheSBmcm9tIGtleWJvYXJkLlxuICogVGhpcyBhdm9pZHMgdGhlIHNpdHVhdGlvbiB3aGVyZSBhIHVzZXIgcHJlc3NlcyBhIGtleSBvbiBhbiBhbHJlYWR5IGZvY3VzZWRcbiAqIGVsZW1lbnQsIGFuZCB0aGVuIGNsaWNrcyBvbiBhIGRpZmZlcmVudCBlbGVtZW50LCBmb2N1c2luZyBpdCB3aXRoIGFcbiAqIHBvaW50aW5nIGRldmljZSwgd2hpbGUgd2Ugc3RpbGwgdGhpbmsgd2UncmUgaW4ga2V5Ym9hcmQgbW9kYWxpdHkuXG4gKi9cbmZ1bmN0aW9uIGhhbmRsZVBvaW50ZXJEb3duKCkge1xuICBoYWRLZXlib2FyZEV2ZW50ID0gZmFsc2U7XG59XG5mdW5jdGlvbiBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlKCkge1xuICBpZiAodGhpcy52aXNpYmlsaXR5U3RhdGUgPT09ICdoaWRkZW4nKSB7XG4gICAgLy8gSWYgdGhlIHRhYiBiZWNvbWVzIGFjdGl2ZSBhZ2FpbiwgdGhlIGJyb3dzZXIgd2lsbCBoYW5kbGUgY2FsbGluZyBmb2N1c1xuICAgIC8vIG9uIHRoZSBlbGVtZW50IChTYWZhcmkgYWN0dWFsbHkgY2FsbHMgaXQgdHdpY2UpLlxuICAgIC8vIElmIHRoaXMgdGFiIGNoYW5nZSBjYXVzZWQgYSBibHVyIG9uIGFuIGVsZW1lbnQgd2l0aCBmb2N1cy12aXNpYmxlLFxuICAgIC8vIHJlLWFwcGx5IHRoZSBjbGFzcyB3aGVuIHRoZSB1c2VyIHN3aXRjaGVzIGJhY2sgdG8gdGhlIHRhYi5cbiAgICBpZiAoaGFkRm9jdXNWaXNpYmxlUmVjZW50bHkpIHtcbiAgICAgIGhhZEtleWJvYXJkRXZlbnQgPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcHJlcGFyZShkb2MpIHtcbiAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVLZXlEb3duLCB0cnVlKTtcbiAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZVBvaW50ZXJEb3duLCB0cnVlKTtcbiAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgaGFuZGxlUG9pbnRlckRvd24sIHRydWUpO1xuICBkb2MuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIGhhbmRsZVBvaW50ZXJEb3duLCB0cnVlKTtcbiAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlLCB0cnVlKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0ZWFyZG93bihkb2MpIHtcbiAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVLZXlEb3duLCB0cnVlKTtcbiAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZVBvaW50ZXJEb3duLCB0cnVlKTtcbiAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgaGFuZGxlUG9pbnRlckRvd24sIHRydWUpO1xuICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIGhhbmRsZVBvaW50ZXJEb3duLCB0cnVlKTtcbiAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlLCB0cnVlKTtcbn1cbmZ1bmN0aW9uIGlzRm9jdXNWaXNpYmxlKGV2ZW50KSB7XG4gIGNvbnN0IHtcbiAgICB0YXJnZXRcbiAgfSA9IGV2ZW50O1xuICB0cnkge1xuICAgIHJldHVybiB0YXJnZXQubWF0Y2hlcygnOmZvY3VzLXZpc2libGUnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAvLyBCcm93c2VycyBub3QgaW1wbGVtZW50aW5nIDpmb2N1cy12aXNpYmxlIHdpbGwgdGhyb3cgYSBTeW50YXhFcnJvci5cbiAgICAvLyBXZSB1c2Ugb3VyIG93biBoZXVyaXN0aWMgZm9yIHRob3NlIGJyb3dzZXJzLlxuICAgIC8vIFJldGhyb3cgbWlnaHQgYmUgYmV0dGVyIGlmIGl0J3Mgbm90IHRoZSBleHBlY3RlZCBlcnJvciBidXQgZG8gd2UgcmVhbGx5XG4gICAgLy8gd2FudCB0byBjcmFzaCBpZiBmb2N1cy12aXNpYmxlIG1hbGZ1bmN0aW9uZWQ/XG4gIH1cblxuICAvLyBObyBuZWVkIGZvciB2YWxpZEZvY3VzVGFyZ2V0IGNoZWNrLiBUaGUgdXNlciBkb2VzIHRoYXQgYnkgYXR0YWNoaW5nIGl0IHRvXG4gIC8vIGZvY3VzYWJsZSBldmVudHMgb25seS5cbiAgcmV0dXJuIGhhZEtleWJvYXJkRXZlbnQgfHwgZm9jdXNUcmlnZ2Vyc0tleWJvYXJkTW9kYWxpdHkodGFyZ2V0KTtcbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUlzRm9jdXNWaXNpYmxlKCkge1xuICBjb25zdCByZWYgPSBSZWFjdC51c2VDYWxsYmFjayhub2RlID0+IHtcbiAgICBpZiAobm9kZSAhPSBudWxsKSB7XG4gICAgICBwcmVwYXJlKG5vZGUub3duZXJEb2N1bWVudCk7XG4gICAgfVxuICB9LCBbXSk7XG4gIGNvbnN0IGlzRm9jdXNWaXNpYmxlUmVmID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcblxuICAvKipcbiAgICogU2hvdWxkIGJlIGNhbGxlZCBpZiBhIGJsdXIgZXZlbnQgaXMgZmlyZWRcbiAgICovXG4gIGZ1bmN0aW9uIGhhbmRsZUJsdXJWaXNpYmxlKCkge1xuICAgIC8vIGNoZWNraW5nIGFnYWluc3QgcG90ZW50aWFsIHN0YXRlIHZhcmlhYmxlIGRvZXMgbm90IHN1ZmZpY2UgaWYgd2UgZm9jdXMgYW5kIGJsdXIgc3luY2hyb25vdXNseS5cbiAgICAvLyBSZWFjdCB3b3VsZG4ndCBoYXZlIHRpbWUgdG8gdHJpZ2dlciBhIHJlLXJlbmRlciBzbyBgZm9jdXNWaXNpYmxlYCB3b3VsZCBiZSBzdGFsZS5cbiAgICAvLyBJZGVhbGx5IHdlIHdvdWxkIGFkanVzdCBgaXNGb2N1c1Zpc2libGUoZXZlbnQpYCB0byBsb29rIGF0IGByZWxhdGVkVGFyZ2V0YCBmb3IgYmx1ciBldmVudHMuXG4gICAgLy8gVGhpcyBkb2Vzbid0IHdvcmsgaW4gSUUxMSBkdWUgdG8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8zNzUxXG4gICAgLy8gVE9ETzogY2hlY2sgYWdhaW4gaWYgUmVhY3QgcmVsZWFzZXMgdGhlaXIgaW50ZXJuYWwgY2hhbmdlcyB0byBmb2N1cyBldmVudCBoYW5kbGluZyAoaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvMTkxODYpLlxuICAgIGlmIChpc0ZvY3VzVmlzaWJsZVJlZi5jdXJyZW50KSB7XG4gICAgICAvLyBUbyBkZXRlY3QgYSB0YWIvd2luZG93IHN3aXRjaCwgd2UgbG9vayBmb3IgYSBibHVyIGV2ZW50IGZvbGxvd2VkXG4gICAgICAvLyByYXBpZGx5IGJ5IGEgdmlzaWJpbGl0eSBjaGFuZ2UuXG4gICAgICAvLyBJZiB3ZSBkb24ndCBzZWUgYSB2aXNpYmlsaXR5IGNoYW5nZSB3aXRoaW4gMTAwbXMsIGl0J3MgcHJvYmFibHkgYVxuICAgICAgLy8gcmVndWxhciBmb2N1cyBjaGFuZ2UuXG4gICAgICBoYWRGb2N1c1Zpc2libGVSZWNlbnRseSA9IHRydWU7XG4gICAgICBoYWRGb2N1c1Zpc2libGVSZWNlbnRseVRpbWVvdXQuc3RhcnQoMTAwLCAoKSA9PiB7XG4gICAgICAgIGhhZEZvY3VzVmlzaWJsZVJlY2VudGx5ID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICAgIGlzRm9jdXNWaXNpYmxlUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogU2hvdWxkIGJlIGNhbGxlZCBpZiBhIGJsdXIgZXZlbnQgaXMgZmlyZWRcbiAgICovXG4gIGZ1bmN0aW9uIGhhbmRsZUZvY3VzVmlzaWJsZShldmVudCkge1xuICAgIGlmIChpc0ZvY3VzVmlzaWJsZShldmVudCkpIHtcbiAgICAgIGlzRm9jdXNWaXNpYmxlUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGlzRm9jdXNWaXNpYmxlUmVmLFxuICAgIG9uRm9jdXM6IGhhbmRsZUZvY3VzVmlzaWJsZSxcbiAgICBvbkJsdXI6IGhhbmRsZUJsdXJWaXNpYmxlLFxuICAgIHJlZlxuICB9O1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3313\n")},3404:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nif (true) {\n  module.exports = __webpack_require__(3072);\n} else // removed by dead control flow\n{}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzQwNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixJQUFJLElBQXFDO0FBQ3pDLEVBQUUsMENBQTREO0FBQzlELEVBQUUsS0FBSztBQUFBLEVBRU4iLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy9ub2RlX21vZHVsZXMvcmVhY3QtaXMvaW5kZXguanM/YWY3ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3404\n")},3571:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   A: () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */   k: () => (/* binding */ unstable_createStyleFunctionSx)\n/* harmony export */ });\n/* harmony import */ var _mui_utils_capitalize__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3967);\n/* harmony import */ var _merge__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(4620);\n/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6481);\n/* harmony import */ var _breakpoints__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(9452);\n/* harmony import */ var _defaultSxConfig__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(4188);\n\n\n\n\n\nfunction objectsHaveSameKeys(...objects) {\n  const allKeys = objects.reduce((keys, object) => keys.concat(Object.keys(object)), []);\n  const union = new Set(allKeys);\n  return objects.every(object => union.size === Object.keys(object).length);\n}\nfunction callIfFn(maybeFn, arg) {\n  return typeof maybeFn === 'function' ? maybeFn(arg) : maybeFn;\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nfunction unstable_createStyleFunctionSx() {\n  function getThemeValue(prop, val, theme, config) {\n    const props = {\n      [prop]: val,\n      theme\n    };\n    const options = config[prop];\n    if (!options) {\n      return {\n        [prop]: val\n      };\n    }\n    const {\n      cssProperty = prop,\n      themeKey,\n      transform,\n      style\n    } = options;\n    if (val == null) {\n      return null;\n    }\n\n    // TODO v6: remove, see https://github.com/mui/material-ui/pull/38123\n    if (themeKey === 'typography' && val === 'inherit') {\n      return {\n        [prop]: val\n      };\n    }\n    const themeMapping = (0,_style__WEBPACK_IMPORTED_MODULE_0__/* .getPath */ .Yn)(theme, themeKey) || {};\n    if (style) {\n      return style(props);\n    }\n    const styleFromPropValue = propValueFinal => {\n      let value = (0,_style__WEBPACK_IMPORTED_MODULE_0__/* .getStyleValue */ .BO)(themeMapping, transform, propValueFinal);\n      if (propValueFinal === value && typeof propValueFinal === 'string') {\n        // Haven't found value\n        value = (0,_style__WEBPACK_IMPORTED_MODULE_0__/* .getStyleValue */ .BO)(themeMapping, transform, `${prop}${propValueFinal === 'default' ? '' : (0,_mui_utils_capitalize__WEBPACK_IMPORTED_MODULE_1__/* [\"default\"] */ .A)(propValueFinal)}`, propValueFinal);\n      }\n      if (cssProperty === false) {\n        return value;\n      }\n      return {\n        [cssProperty]: value\n      };\n    };\n    return (0,_breakpoints__WEBPACK_IMPORTED_MODULE_2__/* .handleBreakpoints */ .NI)(props, val, styleFromPropValue);\n  }\n  function styleFunctionSx(props) {\n    var _theme$unstable_sxCon;\n    const {\n      sx,\n      theme = {}\n    } = props || {};\n    if (!sx) {\n      return null; // Emotion & styled-components will neglect null\n    }\n    const config = (_theme$unstable_sxCon = theme.unstable_sxConfig) != null ? _theme$unstable_sxCon : _defaultSxConfig__WEBPACK_IMPORTED_MODULE_3__/* [\"default\"] */ .A;\n\n    /*\n     * Receive `sxInput` as object or callback\n     * and then recursively check keys & values to create media query object styles.\n     * (the result will be used in `styled`)\n     */\n    function traverse(sxInput) {\n      let sxObject = sxInput;\n      if (typeof sxInput === 'function') {\n        sxObject = sxInput(theme);\n      } else if (typeof sxInput !== 'object') {\n        // value\n        return sxInput;\n      }\n      if (!sxObject) {\n        return null;\n      }\n      const emptyBreakpoints = (0,_breakpoints__WEBPACK_IMPORTED_MODULE_2__/* .createEmptyBreakpointObject */ .EU)(theme.breakpoints);\n      const breakpointsKeys = Object.keys(emptyBreakpoints);\n      let css = emptyBreakpoints;\n      Object.keys(sxObject).forEach(styleKey => {\n        const value = callIfFn(sxObject[styleKey], theme);\n        if (value !== null && value !== undefined) {\n          if (typeof value === 'object') {\n            if (config[styleKey]) {\n              css = (0,_merge__WEBPACK_IMPORTED_MODULE_4__/* [\"default\"] */ .A)(css, getThemeValue(styleKey, value, theme, config));\n            } else {\n              const breakpointsValues = (0,_breakpoints__WEBPACK_IMPORTED_MODULE_2__/* .handleBreakpoints */ .NI)({\n                theme\n              }, value, x => ({\n                [styleKey]: x\n              }));\n              if (objectsHaveSameKeys(breakpointsValues, value)) {\n                css[styleKey] = styleFunctionSx({\n                  sx: value,\n                  theme\n                });\n              } else {\n                css = (0,_merge__WEBPACK_IMPORTED_MODULE_4__/* [\"default\"] */ .A)(css, breakpointsValues);\n              }\n            }\n          } else {\n            css = (0,_merge__WEBPACK_IMPORTED_MODULE_4__/* [\"default\"] */ .A)(css, getThemeValue(styleKey, value, theme, config));\n          }\n        }\n      });\n      return (0,_breakpoints__WEBPACK_IMPORTED_MODULE_2__/* .removeUnusedBreakpoints */ .vf)(breakpointsKeys, css);\n    }\n    return Array.isArray(sx) ? sx.map(traverse) : traverse(sx);\n  }\n  return styleFunctionSx;\n}\nconst styleFunctionSx = unstable_createStyleFunctionSx();\nstyleFunctionSx.filterProps = ['sx'];\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (styleFunctionSx);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzU3MS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBK0M7QUFDbEI7QUFDaUM7QUFDMkM7QUFDekQ7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5Qix5REFBTztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQiwrREFBUTtBQUMxQjtBQUNBO0FBQ0EsZ0JBQWdCLCtEQUFRLDZCQUE2QixLQUFLLEVBQUUsb0NBQW9DLDBFQUFVLGlCQUFpQjtBQUMzSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyx5RUFBaUI7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0EsdUdBQXVHLGlFQUFlOztBQUV0SDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLG1GQUEyQjtBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQiwyREFBSztBQUN6QixjQUFjO0FBQ2Qsd0NBQXdDLHlFQUFpQjtBQUN6RDtBQUNBLGVBQWU7QUFDZjtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQixnQkFBZ0I7QUFDaEIsc0JBQXNCLDJEQUFLO0FBQzNCO0FBQ0E7QUFDQSxZQUFZO0FBQ1osa0JBQWtCLDJEQUFLO0FBQ3ZCO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsYUFBYSwrRUFBdUI7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpRUFBZSxlQUFlIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL3N0eWxlRnVuY3Rpb25TeC9zdHlsZUZ1bmN0aW9uU3guanM/YzUzMyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICdAbXVpL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IG1lcmdlIGZyb20gJy4uL21lcmdlJztcbmltcG9ydCB7IGdldFBhdGgsIGdldFN0eWxlVmFsdWUgYXMgZ2V0VmFsdWUgfSBmcm9tICcuLi9zdHlsZSc7XG5pbXBvcnQgeyBoYW5kbGVCcmVha3BvaW50cywgY3JlYXRlRW1wdHlCcmVha3BvaW50T2JqZWN0LCByZW1vdmVVbnVzZWRCcmVha3BvaW50cyB9IGZyb20gJy4uL2JyZWFrcG9pbnRzJztcbmltcG9ydCBkZWZhdWx0U3hDb25maWcgZnJvbSAnLi9kZWZhdWx0U3hDb25maWcnO1xuZnVuY3Rpb24gb2JqZWN0c0hhdmVTYW1lS2V5cyguLi5vYmplY3RzKSB7XG4gIGNvbnN0IGFsbEtleXMgPSBvYmplY3RzLnJlZHVjZSgoa2V5cywgb2JqZWN0KSA9PiBrZXlzLmNvbmNhdChPYmplY3Qua2V5cyhvYmplY3QpKSwgW10pO1xuICBjb25zdCB1bmlvbiA9IG5ldyBTZXQoYWxsS2V5cyk7XG4gIHJldHVybiBvYmplY3RzLmV2ZXJ5KG9iamVjdCA9PiB1bmlvbi5zaXplID09PSBPYmplY3Qua2V5cyhvYmplY3QpLmxlbmd0aCk7XG59XG5mdW5jdGlvbiBjYWxsSWZGbihtYXliZUZuLCBhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBtYXliZUZuID09PSAnZnVuY3Rpb24nID8gbWF5YmVGbihhcmcpIDogbWF5YmVGbjtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuZXhwb3J0IGZ1bmN0aW9uIHVuc3RhYmxlX2NyZWF0ZVN0eWxlRnVuY3Rpb25TeCgpIHtcbiAgZnVuY3Rpb24gZ2V0VGhlbWVWYWx1ZShwcm9wLCB2YWwsIHRoZW1lLCBjb25maWcpIHtcbiAgICBjb25zdCBwcm9wcyA9IHtcbiAgICAgIFtwcm9wXTogdmFsLFxuICAgICAgdGhlbWVcbiAgICB9O1xuICAgIGNvbnN0IG9wdGlvbnMgPSBjb25maWdbcHJvcF07XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBbcHJvcF06IHZhbFxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3Qge1xuICAgICAgY3NzUHJvcGVydHkgPSBwcm9wLFxuICAgICAgdGhlbWVLZXksXG4gICAgICB0cmFuc2Zvcm0sXG4gICAgICBzdHlsZVxuICAgIH0gPSBvcHRpb25zO1xuICAgIGlmICh2YWwgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gVE9ETyB2NjogcmVtb3ZlLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL211aS9tYXRlcmlhbC11aS9wdWxsLzM4MTIzXG4gICAgaWYgKHRoZW1lS2V5ID09PSAndHlwb2dyYXBoeScgJiYgdmFsID09PSAnaW5oZXJpdCcpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFtwcm9wXTogdmFsXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCB0aGVtZU1hcHBpbmcgPSBnZXRQYXRoKHRoZW1lLCB0aGVtZUtleSkgfHwge307XG4gICAgaWYgKHN0eWxlKSB7XG4gICAgICByZXR1cm4gc3R5bGUocHJvcHMpO1xuICAgIH1cbiAgICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSBwcm9wVmFsdWVGaW5hbCA9PiB7XG4gICAgICBsZXQgdmFsdWUgPSBnZXRWYWx1ZSh0aGVtZU1hcHBpbmcsIHRyYW5zZm9ybSwgcHJvcFZhbHVlRmluYWwpO1xuICAgICAgaWYgKHByb3BWYWx1ZUZpbmFsID09PSB2YWx1ZSAmJiB0eXBlb2YgcHJvcFZhbHVlRmluYWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIEhhdmVuJ3QgZm91bmQgdmFsdWVcbiAgICAgICAgdmFsdWUgPSBnZXRWYWx1ZSh0aGVtZU1hcHBpbmcsIHRyYW5zZm9ybSwgYCR7cHJvcH0ke3Byb3BWYWx1ZUZpbmFsID09PSAnZGVmYXVsdCcgPyAnJyA6IGNhcGl0YWxpemUocHJvcFZhbHVlRmluYWwpfWAsIHByb3BWYWx1ZUZpbmFsKTtcbiAgICAgIH1cbiAgICAgIGlmIChjc3NQcm9wZXJ0eSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW2Nzc1Byb3BlcnR5XTogdmFsdWVcbiAgICAgIH07XG4gICAgfTtcbiAgICByZXR1cm4gaGFuZGxlQnJlYWtwb2ludHMocHJvcHMsIHZhbCwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfVxuICBmdW5jdGlvbiBzdHlsZUZ1bmN0aW9uU3gocHJvcHMpIHtcbiAgICB2YXIgX3RoZW1lJHVuc3RhYmxlX3N4Q29uO1xuICAgIGNvbnN0IHtcbiAgICAgIHN4LFxuICAgICAgdGhlbWUgPSB7fVxuICAgIH0gPSBwcm9wcyB8fCB7fTtcbiAgICBpZiAoIXN4KSB7XG4gICAgICByZXR1cm4gbnVsbDsgLy8gRW1vdGlvbiAmIHN0eWxlZC1jb21wb25lbnRzIHdpbGwgbmVnbGVjdCBudWxsXG4gICAgfVxuICAgIGNvbnN0IGNvbmZpZyA9IChfdGhlbWUkdW5zdGFibGVfc3hDb24gPSB0aGVtZS51bnN0YWJsZV9zeENvbmZpZykgIT0gbnVsbCA/IF90aGVtZSR1bnN0YWJsZV9zeENvbiA6IGRlZmF1bHRTeENvbmZpZztcblxuICAgIC8qXG4gICAgICogUmVjZWl2ZSBgc3hJbnB1dGAgYXMgb2JqZWN0IG9yIGNhbGxiYWNrXG4gICAgICogYW5kIHRoZW4gcmVjdXJzaXZlbHkgY2hlY2sga2V5cyAmIHZhbHVlcyB0byBjcmVhdGUgbWVkaWEgcXVlcnkgb2JqZWN0IHN0eWxlcy5cbiAgICAgKiAodGhlIHJlc3VsdCB3aWxsIGJlIHVzZWQgaW4gYHN0eWxlZGApXG4gICAgICovXG4gICAgZnVuY3Rpb24gdHJhdmVyc2Uoc3hJbnB1dCkge1xuICAgICAgbGV0IHN4T2JqZWN0ID0gc3hJbnB1dDtcbiAgICAgIGlmICh0eXBlb2Ygc3hJbnB1dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBzeE9iamVjdCA9IHN4SW5wdXQodGhlbWUpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc3hJbnB1dCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgLy8gdmFsdWVcbiAgICAgICAgcmV0dXJuIHN4SW5wdXQ7XG4gICAgICB9XG4gICAgICBpZiAoIXN4T2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgZW1wdHlCcmVha3BvaW50cyA9IGNyZWF0ZUVtcHR5QnJlYWtwb2ludE9iamVjdCh0aGVtZS5icmVha3BvaW50cyk7XG4gICAgICBjb25zdCBicmVha3BvaW50c0tleXMgPSBPYmplY3Qua2V5cyhlbXB0eUJyZWFrcG9pbnRzKTtcbiAgICAgIGxldCBjc3MgPSBlbXB0eUJyZWFrcG9pbnRzO1xuICAgICAgT2JqZWN0LmtleXMoc3hPYmplY3QpLmZvckVhY2goc3R5bGVLZXkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGNhbGxJZkZuKHN4T2JqZWN0W3N0eWxlS2V5XSwgdGhlbWUpO1xuICAgICAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBpZiAoY29uZmlnW3N0eWxlS2V5XSkge1xuICAgICAgICAgICAgICBjc3MgPSBtZXJnZShjc3MsIGdldFRoZW1lVmFsdWUoc3R5bGVLZXksIHZhbHVlLCB0aGVtZSwgY29uZmlnKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zdCBicmVha3BvaW50c1ZhbHVlcyA9IGhhbmRsZUJyZWFrcG9pbnRzKHtcbiAgICAgICAgICAgICAgICB0aGVtZVxuICAgICAgICAgICAgICB9LCB2YWx1ZSwgeCA9PiAoe1xuICAgICAgICAgICAgICAgIFtzdHlsZUtleV06IHhcbiAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICBpZiAob2JqZWN0c0hhdmVTYW1lS2V5cyhicmVha3BvaW50c1ZhbHVlcywgdmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgY3NzW3N0eWxlS2V5XSA9IHN0eWxlRnVuY3Rpb25TeCh7XG4gICAgICAgICAgICAgICAgICBzeDogdmFsdWUsXG4gICAgICAgICAgICAgICAgICB0aGVtZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNzcyA9IG1lcmdlKGNzcywgYnJlYWtwb2ludHNWYWx1ZXMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNzcyA9IG1lcmdlKGNzcywgZ2V0VGhlbWVWYWx1ZShzdHlsZUtleSwgdmFsdWUsIHRoZW1lLCBjb25maWcpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlbW92ZVVudXNlZEJyZWFrcG9pbnRzKGJyZWFrcG9pbnRzS2V5cywgY3NzKTtcbiAgICB9XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoc3gpID8gc3gubWFwKHRyYXZlcnNlKSA6IHRyYXZlcnNlKHN4KTtcbiAgfVxuICByZXR1cm4gc3R5bGVGdW5jdGlvblN4O1xufVxuY29uc3Qgc3R5bGVGdW5jdGlvblN4ID0gdW5zdGFibGVfY3JlYXRlU3R5bGVGdW5jdGlvblN4KCk7XG5zdHlsZUZ1bmN0aW9uU3guZmlsdGVyUHJvcHMgPSBbJ3N4J107XG5leHBvcnQgZGVmYXVsdCBzdHlsZUZ1bmN0aW9uU3g7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3571\n")},3749:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _mui_utils_ownerWindow__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4877);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_mui_utils_ownerWindow__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc0OS5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWlEO0FBQ2pELGlFQUFlLHVFQUFXIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy9vd25lcldpbmRvdy5qcz81ODU2Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBvd25lcldpbmRvdyBmcm9tICdAbXVpL3V0aWxzL293bmVyV2luZG93JztcbmV4cG9ydCBkZWZhdWx0IG93bmVyV2luZG93OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3749\n')},3857:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   "default": () => (/* reexport safe */ _styleFunctionSx__WEBPACK_IMPORTED_MODULE_0__.A),\n/* harmony export */   extendSxProp: () => (/* reexport safe */ _extendSxProp__WEBPACK_IMPORTED_MODULE_1__.A),\n/* harmony export */   unstable_createStyleFunctionSx: () => (/* reexport safe */ _styleFunctionSx__WEBPACK_IMPORTED_MODULE_0__.k),\n/* harmony export */   unstable_defaultSxConfig: () => (/* reexport safe */ _defaultSxConfig__WEBPACK_IMPORTED_MODULE_2__.A)\n/* harmony export */ });\n/* harmony import */ var _styleFunctionSx__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3571);\n/* harmony import */ var _extendSxProp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9599);\n/* harmony import */ var _defaultSxConfig__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4188);\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzg1Ny5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQTRDO0FBQ3VCO0FBQ1YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vc3R5bGVGdW5jdGlvblN4L2luZGV4LmpzPzBlYzUiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gJy4vc3R5bGVGdW5jdGlvblN4JztcbmV4cG9ydCB7IHVuc3RhYmxlX2NyZWF0ZVN0eWxlRnVuY3Rpb25TeCB9IGZyb20gJy4vc3R5bGVGdW5jdGlvblN4JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZXh0ZW5kU3hQcm9wIH0gZnJvbSAnLi9leHRlbmRTeFByb3AnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1bnN0YWJsZV9kZWZhdWx0U3hDb25maWcgfSBmcm9tICcuL2RlZmF1bHRTeENvbmZpZyc7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3857\n')},3967:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   A: () => (/* binding */ capitalize)\n/* harmony export */ });\n/* harmony import */ var _mui_utils_formatMuiErrorMessage__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(9453);\n\n// It should to be noted that this function isn't equivalent to `text-transform: capitalize`.\n//\n// A strict capitalization should uppercase the first letter of each word in the sentence.\n// We only handle the first word.\nfunction capitalize(string) {\n  if (typeof string !== 'string') {\n    throw new Error( false ? 0 : (0,_mui_utils_formatMuiErrorMessage__WEBPACK_IMPORTED_MODULE_0__/* [\"default\"] */ .A)(7));\n  }\n  return string.charAt(0).toUpperCase() + string.slice(1);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk2Ny5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQXNFO0FBQ3RFO0FBQ0E7QUFDQTtBQUNBO0FBQ2U7QUFDZjtBQUNBLG9CQUFvQixNQUFxQyxHQUFHLENBQXdELEdBQUcscUZBQXNCO0FBQzdJO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL2NhcGl0YWxpemUvY2FwaXRhbGl6ZS5qcz9iYTczIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlIGZyb20gXCJAbXVpL3V0aWxzL2Zvcm1hdE11aUVycm9yTWVzc2FnZVwiO1xuLy8gSXQgc2hvdWxkIHRvIGJlIG5vdGVkIHRoYXQgdGhpcyBmdW5jdGlvbiBpc24ndCBlcXVpdmFsZW50IHRvIGB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZWAuXG4vL1xuLy8gQSBzdHJpY3QgY2FwaXRhbGl6YXRpb24gc2hvdWxkIHVwcGVyY2FzZSB0aGUgZmlyc3QgbGV0dGVyIG9mIGVhY2ggd29yZCBpbiB0aGUgc2VudGVuY2UuXG4vLyBXZSBvbmx5IGhhbmRsZSB0aGUgZmlyc3Qgd29yZC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNhcGl0YWxpemUoc3RyaW5nKSB7XG4gIGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBgTVVJOiBcXGBjYXBpdGFsaXplKHN0cmluZylcXGAgZXhwZWN0cyBhIHN0cmluZyBhcmd1bWVudC5gIDogX2Zvcm1hdE11aUVycm9yTWVzc2FnZSg3KSk7XG4gIH1cbiAgcmV0dXJuIHN0cmluZy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0cmluZy5zbGljZSgxKTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3967\n")},4017:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval('var __webpack_unused_export__;\n\n"use client";\n\nvar _interopRequireDefault = __webpack_require__(4994);\n__webpack_unused_export__ = ({\n  value: true\n});\nexports.A = void 0;\nvar _createSvgIcon = _interopRequireDefault(__webpack_require__(2032));\nvar _jsxRuntime = __webpack_require__(4848);\nvar _default = exports.A = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)("path", {\n  d: "M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"\n}), \'Check\');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDAxNy5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYjs7QUFFQSw2QkFBNkIsbUJBQU8sQ0FBQyxJQUE4QztBQUNuRiw2QkFBNkM7QUFDN0M7QUFDQSxDQUFDLENBQUM7QUFDRixTQUFlO0FBQ2YsNENBQTRDLG1CQUFPLENBQUMsSUFBdUI7QUFDM0Usa0JBQWtCLG1CQUFPLENBQUMsSUFBbUI7QUFDN0MsZUFBZSxTQUFlO0FBQzlCO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvaWNvbnMtbWF0ZXJpYWwvQ2hlY2suanM/OTU3ZSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblwidXNlIGNsaWVudFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX2NyZWF0ZVN2Z0ljb24gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3V0aWxzL2NyZWF0ZVN2Z0ljb25cIikpO1xudmFyIF9qc3hSdW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gKDAsIF9jcmVhdGVTdmdJY29uLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovKDAsIF9qc3hSdW50aW1lLmpzeCkoXCJwYXRoXCIsIHtcbiAgZDogXCJNOSAxNi4xNyA0LjgzIDEybC0xLjQyIDEuNDFMOSAxOSAyMSA3bC0xLjQxLTEuNDF6XCJcbn0pLCAnQ2hlY2snKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4017\n')},4146:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nvar reactIs = __webpack_require__(3404);\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n  childContextTypes: true,\n  contextType: true,\n  contextTypes: true,\n  defaultProps: true,\n  displayName: true,\n  getDefaultProps: true,\n  getDerivedStateFromError: true,\n  getDerivedStateFromProps: true,\n  mixins: true,\n  propTypes: true,\n  type: true\n};\nvar KNOWN_STATICS = {\n  name: true,\n  length: true,\n  prototype: true,\n  caller: true,\n  callee: true,\n  arguments: true,\n  arity: true\n};\nvar FORWARD_REF_STATICS = {\n  '$$typeof': true,\n  render: true,\n  defaultProps: true,\n  displayName: true,\n  propTypes: true\n};\nvar MEMO_STATICS = {\n  '$$typeof': true,\n  compare: true,\n  defaultProps: true,\n  displayName: true,\n  propTypes: true,\n  type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n  // React v16.11 and below\n  if (reactIs.isMemo(component)) {\n    return MEMO_STATICS;\n  } // React v16.12 and above\n\n\n  return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n  if (typeof sourceComponent !== 'string') {\n    // don't hoist over string (html) components\n    if (objectPrototype) {\n      var inheritedComponent = getPrototypeOf(sourceComponent);\n\n      if (inheritedComponent && inheritedComponent !== objectPrototype) {\n        hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n      }\n    }\n\n    var keys = getOwnPropertyNames(sourceComponent);\n\n    if (getOwnPropertySymbols) {\n      keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n    }\n\n    var targetStatics = getStatics(targetComponent);\n    var sourceStatics = getStatics(sourceComponent);\n\n    for (var i = 0; i < keys.length; ++i) {\n      var key = keys[i];\n\n      if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n        var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n        try {\n          // Avoid failures from read-only properties\n          defineProperty(targetComponent, key, descriptor);\n        } catch (e) {}\n      }\n    }\n  }\n\n  return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDE0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixjQUFjLG1CQUFPLENBQUMsSUFBVTs7QUFFaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxvQkFBb0IsaUJBQWlCO0FBQ3JDOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MvZGlzdC9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy5janMuanM/ZGE2YSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciByZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcblxuLyoqXG4gKiBDb3B5cmlnaHQgMjAxNSwgWWFob28hIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xudmFyIFJFQUNUX1NUQVRJQ1MgPSB7XG4gIGNoaWxkQ29udGV4dFR5cGVzOiB0cnVlLFxuICBjb250ZXh0VHlwZTogdHJ1ZSxcbiAgY29udGV4dFR5cGVzOiB0cnVlLFxuICBkZWZhdWx0UHJvcHM6IHRydWUsXG4gIGRpc3BsYXlOYW1lOiB0cnVlLFxuICBnZXREZWZhdWx0UHJvcHM6IHRydWUsXG4gIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcjogdHJ1ZSxcbiAgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzOiB0cnVlLFxuICBtaXhpbnM6IHRydWUsXG4gIHByb3BUeXBlczogdHJ1ZSxcbiAgdHlwZTogdHJ1ZVxufTtcbnZhciBLTk9XTl9TVEFUSUNTID0ge1xuICBuYW1lOiB0cnVlLFxuICBsZW5ndGg6IHRydWUsXG4gIHByb3RvdHlwZTogdHJ1ZSxcbiAgY2FsbGVyOiB0cnVlLFxuICBjYWxsZWU6IHRydWUsXG4gIGFyZ3VtZW50czogdHJ1ZSxcbiAgYXJpdHk6IHRydWVcbn07XG52YXIgRk9SV0FSRF9SRUZfU1RBVElDUyA9IHtcbiAgJyQkdHlwZW9mJzogdHJ1ZSxcbiAgcmVuZGVyOiB0cnVlLFxuICBkZWZhdWx0UHJvcHM6IHRydWUsXG4gIGRpc3BsYXlOYW1lOiB0cnVlLFxuICBwcm9wVHlwZXM6IHRydWVcbn07XG52YXIgTUVNT19TVEFUSUNTID0ge1xuICAnJCR0eXBlb2YnOiB0cnVlLFxuICBjb21wYXJlOiB0cnVlLFxuICBkZWZhdWx0UHJvcHM6IHRydWUsXG4gIGRpc3BsYXlOYW1lOiB0cnVlLFxuICBwcm9wVHlwZXM6IHRydWUsXG4gIHR5cGU6IHRydWVcbn07XG52YXIgVFlQRV9TVEFUSUNTID0ge307XG5UWVBFX1NUQVRJQ1NbcmVhY3RJcy5Gb3J3YXJkUmVmXSA9IEZPUldBUkRfUkVGX1NUQVRJQ1M7XG5UWVBFX1NUQVRJQ1NbcmVhY3RJcy5NZW1vXSA9IE1FTU9fU1RBVElDUztcblxuZnVuY3Rpb24gZ2V0U3RhdGljcyhjb21wb25lbnQpIHtcbiAgLy8gUmVhY3QgdjE2LjExIGFuZCBiZWxvd1xuICBpZiAocmVhY3RJcy5pc01lbW8oY29tcG9uZW50KSkge1xuICAgIHJldHVybiBNRU1PX1NUQVRJQ1M7XG4gIH0gLy8gUmVhY3QgdjE2LjEyIGFuZCBhYm92ZVxuXG5cbiAgcmV0dXJuIFRZUEVfU1RBVElDU1tjb21wb25lbnRbJyQkdHlwZW9mJ11dIHx8IFJFQUNUX1NUQVRJQ1M7XG59XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIGdldFByb3RvdHlwZU9mID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xudmFyIG9iamVjdFByb3RvdHlwZSA9IE9iamVjdC5wcm90b3R5cGU7XG5mdW5jdGlvbiBob2lzdE5vblJlYWN0U3RhdGljcyh0YXJnZXRDb21wb25lbnQsIHNvdXJjZUNvbXBvbmVudCwgYmxhY2tsaXN0KSB7XG4gIGlmICh0eXBlb2Ygc291cmNlQ29tcG9uZW50ICE9PSAnc3RyaW5nJykge1xuICAgIC8vIGRvbid0IGhvaXN0IG92ZXIgc3RyaW5nIChodG1sKSBjb21wb25lbnRzXG4gICAgaWYgKG9iamVjdFByb3RvdHlwZSkge1xuICAgICAgdmFyIGluaGVyaXRlZENvbXBvbmVudCA9IGdldFByb3RvdHlwZU9mKHNvdXJjZUNvbXBvbmVudCk7XG5cbiAgICAgIGlmIChpbmhlcml0ZWRDb21wb25lbnQgJiYgaW5oZXJpdGVkQ29tcG9uZW50ICE9PSBvYmplY3RQcm90b3R5cGUpIHtcbiAgICAgICAgaG9pc3ROb25SZWFjdFN0YXRpY3ModGFyZ2V0Q29tcG9uZW50LCBpbmhlcml0ZWRDb21wb25lbnQsIGJsYWNrbGlzdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZUNvbXBvbmVudCk7XG5cbiAgICBpZiAoZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgICBrZXlzID0ga2V5cy5jb25jYXQoZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZUNvbXBvbmVudCkpO1xuICAgIH1cblxuICAgIHZhciB0YXJnZXRTdGF0aWNzID0gZ2V0U3RhdGljcyh0YXJnZXRDb21wb25lbnQpO1xuICAgIHZhciBzb3VyY2VTdGF0aWNzID0gZ2V0U3RhdGljcyhzb3VyY2VDb21wb25lbnQpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcblxuICAgICAgaWYgKCFLTk9XTl9TVEFUSUNTW2tleV0gJiYgIShibGFja2xpc3QgJiYgYmxhY2tsaXN0W2tleV0pICYmICEoc291cmNlU3RhdGljcyAmJiBzb3VyY2VTdGF0aWNzW2tleV0pICYmICEodGFyZ2V0U3RhdGljcyAmJiB0YXJnZXRTdGF0aWNzW2tleV0pKSB7XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZUNvbXBvbmVudCwga2V5KTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIEF2b2lkIGZhaWx1cmVzIGZyb20gcmVhZC1vbmx5IHByb3BlcnRpZXNcbiAgICAgICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXRDb21wb25lbnQsIGtleSwgZGVzY3JpcHRvcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldENvbXBvbmVudDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBob2lzdE5vblJlYWN0U3RhdGljcztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4146\n")},4164:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* unused harmony export clsx */\nfunction r(e){var t,f,n="";if("string"==typeof e||"number"==typeof e)n+=e;else if("object"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=" "),n+=f)}else for(f in e)e[f]&&(n&&(n+=" "),n+=f);return n}function clsx(){for(var e,t,f=0,n="",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=" "),n+=t);return n}/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (clsx);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDE2NC5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUEsY0FBYyxhQUFhLCtDQUErQyxnREFBZ0QsZUFBZSxRQUFRLElBQUksMENBQTBDLHlDQUF5QyxTQUFnQixnQkFBZ0Isd0NBQXdDLElBQUksbURBQW1ELFNBQVMsaUVBQWUsSUFBSSIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL2Nsc3gvZGlzdC9jbHN4Lm1qcz8wZWQxIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIHIoZSl7dmFyIHQsZixuPVwiXCI7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGV8fFwibnVtYmVyXCI9PXR5cGVvZiBlKW4rPWU7ZWxzZSBpZihcIm9iamVjdFwiPT10eXBlb2YgZSlpZihBcnJheS5pc0FycmF5KGUpKXt2YXIgbz1lLmxlbmd0aDtmb3IodD0wO3Q8bzt0KyspZVt0XSYmKGY9cihlW3RdKSkmJihuJiYobis9XCIgXCIpLG4rPWYpfWVsc2UgZm9yKGYgaW4gZSllW2ZdJiYobiYmKG4rPVwiIFwiKSxuKz1mKTtyZXR1cm4gbn1leHBvcnQgZnVuY3Rpb24gY2xzeCgpe2Zvcih2YXIgZSx0LGY9MCxuPVwiXCIsbz1hcmd1bWVudHMubGVuZ3RoO2Y8bztmKyspKGU9YXJndW1lbnRzW2ZdKSYmKHQ9cihlKSkmJihuJiYobis9XCIgXCIpLG4rPXQpO3JldHVybiBufWV4cG9ydCBkZWZhdWx0IGNsc3g7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4164\n')},4188:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n  A: () => (/* binding */ styleFunctionSx_defaultSxConfig)\n});\n\n// EXTERNAL MODULE: ./node_modules/@mui/system/esm/spacing.js + 1 modules\nvar spacing = __webpack_require__(8248);\n// EXTERNAL MODULE: ./node_modules/@mui/system/esm/style.js\nvar style = __webpack_require__(6481);\n// EXTERNAL MODULE: ./node_modules/@mui/system/esm/merge.js\nvar merge = __webpack_require__(4620);\n;// ./node_modules/@mui/system/esm/compose.js\n\nfunction compose(...styles) {\n  const handlers = styles.reduce((acc, style) => {\n    style.filterProps.forEach(prop => {\n      acc[prop] = style;\n    });\n    return acc;\n  }, {});\n\n  // false positive\n  // eslint-disable-next-line react/function-component-definition\n  const fn = props => {\n    return Object.keys(props).reduce((acc, prop) => {\n      if (handlers[prop]) {\n        return (0,merge/* default */.A)(acc, handlers[prop](props));\n      }\n      return acc;\n    }, {});\n  };\n  fn.propTypes =  false ? 0 : {};\n  fn.filterProps = styles.reduce((acc, style) => acc.concat(style.filterProps), []);\n  return fn;\n}\n/* harmony default export */ const esm_compose = (compose);\n// EXTERNAL MODULE: ./node_modules/@mui/system/esm/breakpoints.js\nvar breakpoints = __webpack_require__(9452);\n;// ./node_modules/@mui/system/esm/borders.js\n\n\n\n\n\nfunction borderTransform(value) {\n  if (typeof value !== 'number') {\n    return value;\n  }\n  return `${value}px solid`;\n}\nfunction createBorderStyle(prop, transform) {\n  return (0,style/* default */.Ay)({\n    prop,\n    themeKey: 'borders',\n    transform\n  });\n}\nconst border = createBorderStyle('border', borderTransform);\nconst borderTop = createBorderStyle('borderTop', borderTransform);\nconst borderRight = createBorderStyle('borderRight', borderTransform);\nconst borderBottom = createBorderStyle('borderBottom', borderTransform);\nconst borderLeft = createBorderStyle('borderLeft', borderTransform);\nconst borderColor = createBorderStyle('borderColor');\nconst borderTopColor = createBorderStyle('borderTopColor');\nconst borderRightColor = createBorderStyle('borderRightColor');\nconst borderBottomColor = createBorderStyle('borderBottomColor');\nconst borderLeftColor = createBorderStyle('borderLeftColor');\nconst outline = createBorderStyle('outline', borderTransform);\nconst outlineColor = createBorderStyle('outlineColor');\n\n// false positive\n// eslint-disable-next-line react/function-component-definition\nconst borderRadius = props => {\n  if (props.borderRadius !== undefined && props.borderRadius !== null) {\n    const transformer = (0,spacing/* createUnaryUnit */.MA)(props.theme, 'shape.borderRadius', 4, 'borderRadius');\n    const styleFromPropValue = propValue => ({\n      borderRadius: (0,spacing/* getValue */._W)(transformer, propValue)\n    });\n    return (0,breakpoints/* handleBreakpoints */.NI)(props, props.borderRadius, styleFromPropValue);\n  }\n  return null;\n};\nborderRadius.propTypes =  false ? 0 : {};\nborderRadius.filterProps = ['borderRadius'];\nconst borders = esm_compose(border, borderTop, borderRight, borderBottom, borderLeft, borderColor, borderTopColor, borderRightColor, borderBottomColor, borderLeftColor, borderRadius, outline, outlineColor);\n/* harmony default export */ const esm_borders = ((/* unused pure expression or super */ null && (borders)));\n;// ./node_modules/@mui/system/esm/cssGrid.js\n\n\n\n\n\n\n// false positive\n// eslint-disable-next-line react/function-component-definition\nconst gap = props => {\n  if (props.gap !== undefined && props.gap !== null) {\n    const transformer = (0,spacing/* createUnaryUnit */.MA)(props.theme, 'spacing', 8, 'gap');\n    const styleFromPropValue = propValue => ({\n      gap: (0,spacing/* getValue */._W)(transformer, propValue)\n    });\n    return (0,breakpoints/* handleBreakpoints */.NI)(props, props.gap, styleFromPropValue);\n  }\n  return null;\n};\ngap.propTypes =  false ? 0 : {};\ngap.filterProps = ['gap'];\n\n// false positive\n// eslint-disable-next-line react/function-component-definition\nconst columnGap = props => {\n  if (props.columnGap !== undefined && props.columnGap !== null) {\n    const transformer = (0,spacing/* createUnaryUnit */.MA)(props.theme, 'spacing', 8, 'columnGap');\n    const styleFromPropValue = propValue => ({\n      columnGap: (0,spacing/* getValue */._W)(transformer, propValue)\n    });\n    return (0,breakpoints/* handleBreakpoints */.NI)(props, props.columnGap, styleFromPropValue);\n  }\n  return null;\n};\ncolumnGap.propTypes =  false ? 0 : {};\ncolumnGap.filterProps = ['columnGap'];\n\n// false positive\n// eslint-disable-next-line react/function-component-definition\nconst rowGap = props => {\n  if (props.rowGap !== undefined && props.rowGap !== null) {\n    const transformer = (0,spacing/* createUnaryUnit */.MA)(props.theme, 'spacing', 8, 'rowGap');\n    const styleFromPropValue = propValue => ({\n      rowGap: (0,spacing/* getValue */._W)(transformer, propValue)\n    });\n    return (0,breakpoints/* handleBreakpoints */.NI)(props, props.rowGap, styleFromPropValue);\n  }\n  return null;\n};\nrowGap.propTypes =  false ? 0 : {};\nrowGap.filterProps = ['rowGap'];\nconst gridColumn = (0,style/* default */.Ay)({\n  prop: 'gridColumn'\n});\nconst gridRow = (0,style/* default */.Ay)({\n  prop: 'gridRow'\n});\nconst gridAutoFlow = (0,style/* default */.Ay)({\n  prop: 'gridAutoFlow'\n});\nconst gridAutoColumns = (0,style/* default */.Ay)({\n  prop: 'gridAutoColumns'\n});\nconst gridAutoRows = (0,style/* default */.Ay)({\n  prop: 'gridAutoRows'\n});\nconst gridTemplateColumns = (0,style/* default */.Ay)({\n  prop: 'gridTemplateColumns'\n});\nconst gridTemplateRows = (0,style/* default */.Ay)({\n  prop: 'gridTemplateRows'\n});\nconst gridTemplateAreas = (0,style/* default */.Ay)({\n  prop: 'gridTemplateAreas'\n});\nconst gridArea = (0,style/* default */.Ay)({\n  prop: 'gridArea'\n});\nconst grid = esm_compose(gap, columnGap, rowGap, gridColumn, gridRow, gridAutoFlow, gridAutoColumns, gridAutoRows, gridTemplateColumns, gridTemplateRows, gridTemplateAreas, gridArea);\n/* harmony default export */ const cssGrid = ((/* unused pure expression or super */ null && (grid)));\n;// ./node_modules/@mui/system/esm/palette.js\n\n\nfunction paletteTransform(value, userValue) {\n  if (userValue === 'grey') {\n    return userValue;\n  }\n  return value;\n}\nconst color = (0,style/* default */.Ay)({\n  prop: 'color',\n  themeKey: 'palette',\n  transform: paletteTransform\n});\nconst bgcolor = (0,style/* default */.Ay)({\n  prop: 'bgcolor',\n  cssProperty: 'backgroundColor',\n  themeKey: 'palette',\n  transform: paletteTransform\n});\nconst backgroundColor = (0,style/* default */.Ay)({\n  prop: 'backgroundColor',\n  themeKey: 'palette',\n  transform: paletteTransform\n});\nconst palette = esm_compose(color, bgcolor, backgroundColor);\n/* harmony default export */ const esm_palette = ((/* unused pure expression or super */ null && (palette)));\n;// ./node_modules/@mui/system/esm/sizing.js\n\n\n\nfunction sizingTransform(value) {\n  return value <= 1 && value !== 0 ? `${value * 100}%` : value;\n}\nconst width = (0,style/* default */.Ay)({\n  prop: 'width',\n  transform: sizingTransform\n});\nconst maxWidth = props => {\n  if (props.maxWidth !== undefined && props.maxWidth !== null) {\n    const styleFromPropValue = propValue => {\n      var _props$theme, _props$theme2;\n      const breakpoint = ((_props$theme = props.theme) == null || (_props$theme = _props$theme.breakpoints) == null || (_props$theme = _props$theme.values) == null ? void 0 : _props$theme[propValue]) || breakpoints/* values */.zu[propValue];\n      if (!breakpoint) {\n        return {\n          maxWidth: sizingTransform(propValue)\n        };\n      }\n      if (((_props$theme2 = props.theme) == null || (_props$theme2 = _props$theme2.breakpoints) == null ? void 0 : _props$theme2.unit) !== 'px') {\n        return {\n          maxWidth: `${breakpoint}${props.theme.breakpoints.unit}`\n        };\n      }\n      return {\n        maxWidth: breakpoint\n      };\n    };\n    return (0,breakpoints/* handleBreakpoints */.NI)(props, props.maxWidth, styleFromPropValue);\n  }\n  return null;\n};\nmaxWidth.filterProps = ['maxWidth'];\nconst minWidth = (0,style/* default */.Ay)({\n  prop: 'minWidth',\n  transform: sizingTransform\n});\nconst height = (0,style/* default */.Ay)({\n  prop: 'height',\n  transform: sizingTransform\n});\nconst maxHeight = (0,style/* default */.Ay)({\n  prop: 'maxHeight',\n  transform: sizingTransform\n});\nconst minHeight = (0,style/* default */.Ay)({\n  prop: 'minHeight',\n  transform: sizingTransform\n});\nconst sizeWidth = (0,style/* default */.Ay)({\n  prop: 'size',\n  cssProperty: 'width',\n  transform: sizingTransform\n});\nconst sizeHeight = (0,style/* default */.Ay)({\n  prop: 'size',\n  cssProperty: 'height',\n  transform: sizingTransform\n});\nconst boxSizing = (0,style/* default */.Ay)({\n  prop: 'boxSizing'\n});\nconst sizing = esm_compose(width, maxWidth, minWidth, height, maxHeight, minHeight, boxSizing);\n/* harmony default export */ const esm_sizing = ((/* unused pure expression or super */ null && (sizing)));\n;// ./node_modules/@mui/system/esm/styleFunctionSx/defaultSxConfig.js\n\n\n\n\n\nconst defaultSxConfig = {\n  // borders\n  border: {\n    themeKey: 'borders',\n    transform: borderTransform\n  },\n  borderTop: {\n    themeKey: 'borders',\n    transform: borderTransform\n  },\n  borderRight: {\n    themeKey: 'borders',\n    transform: borderTransform\n  },\n  borderBottom: {\n    themeKey: 'borders',\n    transform: borderTransform\n  },\n  borderLeft: {\n    themeKey: 'borders',\n    transform: borderTransform\n  },\n  borderColor: {\n    themeKey: 'palette'\n  },\n  borderTopColor: {\n    themeKey: 'palette'\n  },\n  borderRightColor: {\n    themeKey: 'palette'\n  },\n  borderBottomColor: {\n    themeKey: 'palette'\n  },\n  borderLeftColor: {\n    themeKey: 'palette'\n  },\n  outline: {\n    themeKey: 'borders',\n    transform: borderTransform\n  },\n  outlineColor: {\n    themeKey: 'palette'\n  },\n  borderRadius: {\n    themeKey: 'shape.borderRadius',\n    style: borderRadius\n  },\n  // palette\n  color: {\n    themeKey: 'palette',\n    transform: paletteTransform\n  },\n  bgcolor: {\n    themeKey: 'palette',\n    cssProperty: 'backgroundColor',\n    transform: paletteTransform\n  },\n  backgroundColor: {\n    themeKey: 'palette',\n    transform: paletteTransform\n  },\n  // spacing\n  p: {\n    style: spacing/* padding */.Ms\n  },\n  pt: {\n    style: spacing/* padding */.Ms\n  },\n  pr: {\n    style: spacing/* padding */.Ms\n  },\n  pb: {\n    style: spacing/* padding */.Ms\n  },\n  pl: {\n    style: spacing/* padding */.Ms\n  },\n  px: {\n    style: spacing/* padding */.Ms\n  },\n  py: {\n    style: spacing/* padding */.Ms\n  },\n  padding: {\n    style: spacing/* padding */.Ms\n  },\n  paddingTop: {\n    style: spacing/* padding */.Ms\n  },\n  paddingRight: {\n    style: spacing/* padding */.Ms\n  },\n  paddingBottom: {\n    style: spacing/* padding */.Ms\n  },\n  paddingLeft: {\n    style: spacing/* padding */.Ms\n  },\n  paddingX: {\n    style: spacing/* padding */.Ms\n  },\n  paddingY: {\n    style: spacing/* padding */.Ms\n  },\n  paddingInline: {\n    style: spacing/* padding */.Ms\n  },\n  paddingInlineStart: {\n    style: spacing/* padding */.Ms\n  },\n  paddingInlineEnd: {\n    style: spacing/* padding */.Ms\n  },\n  paddingBlock: {\n    style: spacing/* padding */.Ms\n  },\n  paddingBlockStart: {\n    style: spacing/* padding */.Ms\n  },\n  paddingBlockEnd: {\n    style: spacing/* padding */.Ms\n  },\n  m: {\n    style: spacing/* margin */.Lc\n  },\n  mt: {\n    style: spacing/* margin */.Lc\n  },\n  mr: {\n    style: spacing/* margin */.Lc\n  },\n  mb: {\n    style: spacing/* margin */.Lc\n  },\n  ml: {\n    style: spacing/* margin */.Lc\n  },\n  mx: {\n    style: spacing/* margin */.Lc\n  },\n  my: {\n    style: spacing/* margin */.Lc\n  },\n  margin: {\n    style: spacing/* margin */.Lc\n  },\n  marginTop: {\n    style: spacing/* margin */.Lc\n  },\n  marginRight: {\n    style: spacing/* margin */.Lc\n  },\n  marginBottom: {\n    style: spacing/* margin */.Lc\n  },\n  marginLeft: {\n    style: spacing/* margin */.Lc\n  },\n  marginX: {\n    style: spacing/* margin */.Lc\n  },\n  marginY: {\n    style: spacing/* margin */.Lc\n  },\n  marginInline: {\n    style: spacing/* margin */.Lc\n  },\n  marginInlineStart: {\n    style: spacing/* margin */.Lc\n  },\n  marginInlineEnd: {\n    style: spacing/* margin */.Lc\n  },\n  marginBlock: {\n    style: spacing/* margin */.Lc\n  },\n  marginBlockStart: {\n    style: spacing/* margin */.Lc\n  },\n  marginBlockEnd: {\n    style: spacing/* margin */.Lc\n  },\n  // display\n  displayPrint: {\n    cssProperty: false,\n    transform: value => ({\n      '@media print': {\n        display: value\n      }\n    })\n  },\n  display: {},\n  overflow: {},\n  textOverflow: {},\n  visibility: {},\n  whiteSpace: {},\n  // flexbox\n  flexBasis: {},\n  flexDirection: {},\n  flexWrap: {},\n  justifyContent: {},\n  alignItems: {},\n  alignContent: {},\n  order: {},\n  flex: {},\n  flexGrow: {},\n  flexShrink: {},\n  alignSelf: {},\n  justifyItems: {},\n  justifySelf: {},\n  // grid\n  gap: {\n    style: gap\n  },\n  rowGap: {\n    style: rowGap\n  },\n  columnGap: {\n    style: columnGap\n  },\n  gridColumn: {},\n  gridRow: {},\n  gridAutoFlow: {},\n  gridAutoColumns: {},\n  gridAutoRows: {},\n  gridTemplateColumns: {},\n  gridTemplateRows: {},\n  gridTemplateAreas: {},\n  gridArea: {},\n  // positions\n  position: {},\n  zIndex: {\n    themeKey: 'zIndex'\n  },\n  top: {},\n  right: {},\n  bottom: {},\n  left: {},\n  // shadows\n  boxShadow: {\n    themeKey: 'shadows'\n  },\n  // sizing\n  width: {\n    transform: sizingTransform\n  },\n  maxWidth: {\n    style: maxWidth\n  },\n  minWidth: {\n    transform: sizingTransform\n  },\n  height: {\n    transform: sizingTransform\n  },\n  maxHeight: {\n    transform: sizingTransform\n  },\n  minHeight: {\n    transform: sizingTransform\n  },\n  boxSizing: {},\n  // typography\n  fontFamily: {\n    themeKey: 'typography'\n  },\n  fontSize: {\n    themeKey: 'typography'\n  },\n  fontStyle: {\n    themeKey: 'typography'\n  },\n  fontWeight: {\n    themeKey: 'typography'\n  },\n  letterSpacing: {},\n  textTransform: {},\n  lineHeight: {},\n  textAlign: {},\n  typography: {\n    cssProperty: false,\n    themeKey: 'typography'\n  }\n};\n/* harmony default export */ const styleFunctionSx_defaultSxConfig = (defaultSxConfig);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLEdBQUc7QUFDSCxTQUFTO0FBQ1QsV0FBVztBQUNYLFlBQVk7QUFDWixVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxlQUFlLGVBQWU7QUFDOUIsR0FBRztBQUNIO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLEdBQUc7QUFDSDtBQUNBLGVBQWUsZUFBZTtBQUM5QixHQUFHO0FBQ0g7QUFDQSxlQUFlLGVBQWU7QUFDOUIsR0FBRztBQUNIO0FBQ0EsZUFBZSxlQUFlO0FBQzlCLEdBQUc7QUFDSDtBQUNBLGVBQWUsZUFBZTtBQUM5QixHQUFHO0FBQ0gsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSCxtQkFBbUI7QUFDbkIsbUJBQW1CO0FBQ25CLGdCQUFnQjtBQUNoQixlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNFQUFlLGVBQWUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vY29tcG9zZS5qcz9hN2JlIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9ib3JkZXJzLmpzP2ZjMGUiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL2Nzc0dyaWQuanM/NzQxYiIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vcGFsZXR0ZS5qcz8xZjI5Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9zaXppbmcuanM/MDg4YyIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vc3R5bGVGdW5jdGlvblN4L2RlZmF1bHRTeENvbmZpZy5qcz84NjYwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtZXJnZSBmcm9tICcuL21lcmdlJztcbmZ1bmN0aW9uIGNvbXBvc2UoLi4uc3R5bGVzKSB7XG4gIGNvbnN0IGhhbmRsZXJzID0gc3R5bGVzLnJlZHVjZSgoYWNjLCBzdHlsZSkgPT4ge1xuICAgIHN0eWxlLmZpbHRlclByb3BzLmZvckVhY2gocHJvcCA9PiB7XG4gICAgICBhY2NbcHJvcF0gPSBzdHlsZTtcbiAgICB9KTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG5cbiAgLy8gZmFsc2UgcG9zaXRpdmVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L2Z1bmN0aW9uLWNvbXBvbmVudC1kZWZpbml0aW9uXG4gIGNvbnN0IGZuID0gcHJvcHMgPT4ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhwcm9wcykucmVkdWNlKChhY2MsIHByb3ApID0+IHtcbiAgICAgIGlmIChoYW5kbGVyc1twcm9wXSkge1xuICAgICAgICByZXR1cm4gbWVyZ2UoYWNjLCBoYW5kbGVyc1twcm9wXShwcm9wcykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG4gIH07XG4gIGZuLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBzdHlsZXMucmVkdWNlKChhY2MsIHN0eWxlKSA9PiBPYmplY3QuYXNzaWduKGFjYywgc3R5bGUucHJvcFR5cGVzKSwge30pIDoge307XG4gIGZuLmZpbHRlclByb3BzID0gc3R5bGVzLnJlZHVjZSgoYWNjLCBzdHlsZSkgPT4gYWNjLmNvbmNhdChzdHlsZS5maWx0ZXJQcm9wcyksIFtdKTtcbiAgcmV0dXJuIGZuO1xufVxuZXhwb3J0IGRlZmF1bHQgY29tcG9zZTsiLCJpbXBvcnQgcmVzcG9uc2l2ZVByb3BUeXBlIGZyb20gJy4vcmVzcG9uc2l2ZVByb3BUeXBlJztcbmltcG9ydCBzdHlsZSBmcm9tICcuL3N0eWxlJztcbmltcG9ydCBjb21wb3NlIGZyb20gJy4vY29tcG9zZSc7XG5pbXBvcnQgeyBjcmVhdGVVbmFyeVVuaXQsIGdldFZhbHVlIH0gZnJvbSAnLi9zcGFjaW5nJztcbmltcG9ydCB7IGhhbmRsZUJyZWFrcG9pbnRzIH0gZnJvbSAnLi9icmVha3BvaW50cyc7XG5leHBvcnQgZnVuY3Rpb24gYm9yZGVyVHJhbnNmb3JtKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBgJHt2YWx1ZX1weCBzb2xpZGA7XG59XG5mdW5jdGlvbiBjcmVhdGVCb3JkZXJTdHlsZShwcm9wLCB0cmFuc2Zvcm0pIHtcbiAgcmV0dXJuIHN0eWxlKHtcbiAgICBwcm9wLFxuICAgIHRoZW1lS2V5OiAnYm9yZGVycycsXG4gICAgdHJhbnNmb3JtXG4gIH0pO1xufVxuZXhwb3J0IGNvbnN0IGJvcmRlciA9IGNyZWF0ZUJvcmRlclN0eWxlKCdib3JkZXInLCBib3JkZXJUcmFuc2Zvcm0pO1xuZXhwb3J0IGNvbnN0IGJvcmRlclRvcCA9IGNyZWF0ZUJvcmRlclN0eWxlKCdib3JkZXJUb3AnLCBib3JkZXJUcmFuc2Zvcm0pO1xuZXhwb3J0IGNvbnN0IGJvcmRlclJpZ2h0ID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlclJpZ2h0JywgYm9yZGVyVHJhbnNmb3JtKTtcbmV4cG9ydCBjb25zdCBib3JkZXJCb3R0b20gPSBjcmVhdGVCb3JkZXJTdHlsZSgnYm9yZGVyQm90dG9tJywgYm9yZGVyVHJhbnNmb3JtKTtcbmV4cG9ydCBjb25zdCBib3JkZXJMZWZ0ID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlckxlZnQnLCBib3JkZXJUcmFuc2Zvcm0pO1xuZXhwb3J0IGNvbnN0IGJvcmRlckNvbG9yID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlckNvbG9yJyk7XG5leHBvcnQgY29uc3QgYm9yZGVyVG9wQ29sb3IgPSBjcmVhdGVCb3JkZXJTdHlsZSgnYm9yZGVyVG9wQ29sb3InKTtcbmV4cG9ydCBjb25zdCBib3JkZXJSaWdodENvbG9yID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlclJpZ2h0Q29sb3InKTtcbmV4cG9ydCBjb25zdCBib3JkZXJCb3R0b21Db2xvciA9IGNyZWF0ZUJvcmRlclN0eWxlKCdib3JkZXJCb3R0b21Db2xvcicpO1xuZXhwb3J0IGNvbnN0IGJvcmRlckxlZnRDb2xvciA9IGNyZWF0ZUJvcmRlclN0eWxlKCdib3JkZXJMZWZ0Q29sb3InKTtcbmV4cG9ydCBjb25zdCBvdXRsaW5lID0gY3JlYXRlQm9yZGVyU3R5bGUoJ291dGxpbmUnLCBib3JkZXJUcmFuc2Zvcm0pO1xuZXhwb3J0IGNvbnN0IG91dGxpbmVDb2xvciA9IGNyZWF0ZUJvcmRlclN0eWxlKCdvdXRsaW5lQ29sb3InKTtcblxuLy8gZmFsc2UgcG9zaXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvblxuZXhwb3J0IGNvbnN0IGJvcmRlclJhZGl1cyA9IHByb3BzID0+IHtcbiAgaWYgKHByb3BzLmJvcmRlclJhZGl1cyAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmJvcmRlclJhZGl1cyAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHRyYW5zZm9ybWVyID0gY3JlYXRlVW5hcnlVbml0KHByb3BzLnRoZW1lLCAnc2hhcGUuYm9yZGVyUmFkaXVzJywgNCwgJ2JvcmRlclJhZGl1cycpO1xuICAgIGNvbnN0IHN0eWxlRnJvbVByb3BWYWx1ZSA9IHByb3BWYWx1ZSA9PiAoe1xuICAgICAgYm9yZGVyUmFkaXVzOiBnZXRWYWx1ZSh0cmFuc2Zvcm1lciwgcHJvcFZhbHVlKVxuICAgIH0pO1xuICAgIHJldHVybiBoYW5kbGVCcmVha3BvaW50cyhwcm9wcywgcHJvcHMuYm9yZGVyUmFkaXVzLCBzdHlsZUZyb21Qcm9wVmFsdWUpO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcbmJvcmRlclJhZGl1cy5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8ge1xuICBib3JkZXJSYWRpdXM6IHJlc3BvbnNpdmVQcm9wVHlwZVxufSA6IHt9O1xuYm9yZGVyUmFkaXVzLmZpbHRlclByb3BzID0gWydib3JkZXJSYWRpdXMnXTtcbmNvbnN0IGJvcmRlcnMgPSBjb21wb3NlKGJvcmRlciwgYm9yZGVyVG9wLCBib3JkZXJSaWdodCwgYm9yZGVyQm90dG9tLCBib3JkZXJMZWZ0LCBib3JkZXJDb2xvciwgYm9yZGVyVG9wQ29sb3IsIGJvcmRlclJpZ2h0Q29sb3IsIGJvcmRlckJvdHRvbUNvbG9yLCBib3JkZXJMZWZ0Q29sb3IsIGJvcmRlclJhZGl1cywgb3V0bGluZSwgb3V0bGluZUNvbG9yKTtcbmV4cG9ydCBkZWZhdWx0IGJvcmRlcnM7IiwiaW1wb3J0IHN0eWxlIGZyb20gJy4vc3R5bGUnO1xuaW1wb3J0IGNvbXBvc2UgZnJvbSAnLi9jb21wb3NlJztcbmltcG9ydCB7IGNyZWF0ZVVuYXJ5VW5pdCwgZ2V0VmFsdWUgfSBmcm9tICcuL3NwYWNpbmcnO1xuaW1wb3J0IHsgaGFuZGxlQnJlYWtwb2ludHMgfSBmcm9tICcuL2JyZWFrcG9pbnRzJztcbmltcG9ydCByZXNwb25zaXZlUHJvcFR5cGUgZnJvbSAnLi9yZXNwb25zaXZlUHJvcFR5cGUnO1xuXG4vLyBmYWxzZSBwb3NpdGl2ZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L2Z1bmN0aW9uLWNvbXBvbmVudC1kZWZpbml0aW9uXG5leHBvcnQgY29uc3QgZ2FwID0gcHJvcHMgPT4ge1xuICBpZiAocHJvcHMuZ2FwICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuZ2FwICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtZXIgPSBjcmVhdGVVbmFyeVVuaXQocHJvcHMudGhlbWUsICdzcGFjaW5nJywgOCwgJ2dhcCcpO1xuICAgIGNvbnN0IHN0eWxlRnJvbVByb3BWYWx1ZSA9IHByb3BWYWx1ZSA9PiAoe1xuICAgICAgZ2FwOiBnZXRWYWx1ZSh0cmFuc2Zvcm1lciwgcHJvcFZhbHVlKVxuICAgIH0pO1xuICAgIHJldHVybiBoYW5kbGVCcmVha3BvaW50cyhwcm9wcywgcHJvcHMuZ2FwLCBzdHlsZUZyb21Qcm9wVmFsdWUpO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcbmdhcC5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8ge1xuICBnYXA6IHJlc3BvbnNpdmVQcm9wVHlwZVxufSA6IHt9O1xuZ2FwLmZpbHRlclByb3BzID0gWydnYXAnXTtcblxuLy8gZmFsc2UgcG9zaXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvblxuZXhwb3J0IGNvbnN0IGNvbHVtbkdhcCA9IHByb3BzID0+IHtcbiAgaWYgKHByb3BzLmNvbHVtbkdhcCAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmNvbHVtbkdhcCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHRyYW5zZm9ybWVyID0gY3JlYXRlVW5hcnlVbml0KHByb3BzLnRoZW1lLCAnc3BhY2luZycsIDgsICdjb2x1bW5HYXAnKTtcbiAgICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSBwcm9wVmFsdWUgPT4gKHtcbiAgICAgIGNvbHVtbkdhcDogZ2V0VmFsdWUodHJhbnNmb3JtZXIsIHByb3BWYWx1ZSlcbiAgICB9KTtcbiAgICByZXR1cm4gaGFuZGxlQnJlYWtwb2ludHMocHJvcHMsIHByb3BzLmNvbHVtbkdhcCwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5jb2x1bW5HYXAucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHtcbiAgY29sdW1uR2FwOiByZXNwb25zaXZlUHJvcFR5cGVcbn0gOiB7fTtcbmNvbHVtbkdhcC5maWx0ZXJQcm9wcyA9IFsnY29sdW1uR2FwJ107XG5cbi8vIGZhbHNlIHBvc2l0aXZlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb25cbmV4cG9ydCBjb25zdCByb3dHYXAgPSBwcm9wcyA9PiB7XG4gIGlmIChwcm9wcy5yb3dHYXAgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5yb3dHYXAgIT09IG51bGwpIHtcbiAgICBjb25zdCB0cmFuc2Zvcm1lciA9IGNyZWF0ZVVuYXJ5VW5pdChwcm9wcy50aGVtZSwgJ3NwYWNpbmcnLCA4LCAncm93R2FwJyk7XG4gICAgY29uc3Qgc3R5bGVGcm9tUHJvcFZhbHVlID0gcHJvcFZhbHVlID0+ICh7XG4gICAgICByb3dHYXA6IGdldFZhbHVlKHRyYW5zZm9ybWVyLCBwcm9wVmFsdWUpXG4gICAgfSk7XG4gICAgcmV0dXJuIGhhbmRsZUJyZWFrcG9pbnRzKHByb3BzLCBwcm9wcy5yb3dHYXAsIHN0eWxlRnJvbVByb3BWYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xucm93R2FwLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB7XG4gIHJvd0dhcDogcmVzcG9uc2l2ZVByb3BUeXBlXG59IDoge307XG5yb3dHYXAuZmlsdGVyUHJvcHMgPSBbJ3Jvd0dhcCddO1xuZXhwb3J0IGNvbnN0IGdyaWRDb2x1bW4gPSBzdHlsZSh7XG4gIHByb3A6ICdncmlkQ29sdW1uJ1xufSk7XG5leHBvcnQgY29uc3QgZ3JpZFJvdyA9IHN0eWxlKHtcbiAgcHJvcDogJ2dyaWRSb3cnXG59KTtcbmV4cG9ydCBjb25zdCBncmlkQXV0b0Zsb3cgPSBzdHlsZSh7XG4gIHByb3A6ICdncmlkQXV0b0Zsb3cnXG59KTtcbmV4cG9ydCBjb25zdCBncmlkQXV0b0NvbHVtbnMgPSBzdHlsZSh7XG4gIHByb3A6ICdncmlkQXV0b0NvbHVtbnMnXG59KTtcbmV4cG9ydCBjb25zdCBncmlkQXV0b1Jvd3MgPSBzdHlsZSh7XG4gIHByb3A6ICdncmlkQXV0b1Jvd3MnXG59KTtcbmV4cG9ydCBjb25zdCBncmlkVGVtcGxhdGVDb2x1bW5zID0gc3R5bGUoe1xuICBwcm9wOiAnZ3JpZFRlbXBsYXRlQ29sdW1ucydcbn0pO1xuZXhwb3J0IGNvbnN0IGdyaWRUZW1wbGF0ZVJvd3MgPSBzdHlsZSh7XG4gIHByb3A6ICdncmlkVGVtcGxhdGVSb3dzJ1xufSk7XG5leHBvcnQgY29uc3QgZ3JpZFRlbXBsYXRlQXJlYXMgPSBzdHlsZSh7XG4gIHByb3A6ICdncmlkVGVtcGxhdGVBcmVhcydcbn0pO1xuZXhwb3J0IGNvbnN0IGdyaWRBcmVhID0gc3R5bGUoe1xuICBwcm9wOiAnZ3JpZEFyZWEnXG59KTtcbmNvbnN0IGdyaWQgPSBjb21wb3NlKGdhcCwgY29sdW1uR2FwLCByb3dHYXAsIGdyaWRDb2x1bW4sIGdyaWRSb3csIGdyaWRBdXRvRmxvdywgZ3JpZEF1dG9Db2x1bW5zLCBncmlkQXV0b1Jvd3MsIGdyaWRUZW1wbGF0ZUNvbHVtbnMsIGdyaWRUZW1wbGF0ZVJvd3MsIGdyaWRUZW1wbGF0ZUFyZWFzLCBncmlkQXJlYSk7XG5leHBvcnQgZGVmYXVsdCBncmlkOyIsImltcG9ydCBzdHlsZSBmcm9tICcuL3N0eWxlJztcbmltcG9ydCBjb21wb3NlIGZyb20gJy4vY29tcG9zZSc7XG5leHBvcnQgZnVuY3Rpb24gcGFsZXR0ZVRyYW5zZm9ybSh2YWx1ZSwgdXNlclZhbHVlKSB7XG4gIGlmICh1c2VyVmFsdWUgPT09ICdncmV5Jykge1xuICAgIHJldHVybiB1c2VyVmFsdWU7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuZXhwb3J0IGNvbnN0IGNvbG9yID0gc3R5bGUoe1xuICBwcm9wOiAnY29sb3InLFxuICB0aGVtZUtleTogJ3BhbGV0dGUnLFxuICB0cmFuc2Zvcm06IHBhbGV0dGVUcmFuc2Zvcm1cbn0pO1xuZXhwb3J0IGNvbnN0IGJnY29sb3IgPSBzdHlsZSh7XG4gIHByb3A6ICdiZ2NvbG9yJyxcbiAgY3NzUHJvcGVydHk6ICdiYWNrZ3JvdW5kQ29sb3InLFxuICB0aGVtZUtleTogJ3BhbGV0dGUnLFxuICB0cmFuc2Zvcm06IHBhbGV0dGVUcmFuc2Zvcm1cbn0pO1xuZXhwb3J0IGNvbnN0IGJhY2tncm91bmRDb2xvciA9IHN0eWxlKHtcbiAgcHJvcDogJ2JhY2tncm91bmRDb2xvcicsXG4gIHRoZW1lS2V5OiAncGFsZXR0ZScsXG4gIHRyYW5zZm9ybTogcGFsZXR0ZVRyYW5zZm9ybVxufSk7XG5jb25zdCBwYWxldHRlID0gY29tcG9zZShjb2xvciwgYmdjb2xvciwgYmFja2dyb3VuZENvbG9yKTtcbmV4cG9ydCBkZWZhdWx0IHBhbGV0dGU7IiwiaW1wb3J0IHN0eWxlIGZyb20gJy4vc3R5bGUnO1xuaW1wb3J0IGNvbXBvc2UgZnJvbSAnLi9jb21wb3NlJztcbmltcG9ydCB7IGhhbmRsZUJyZWFrcG9pbnRzLCB2YWx1ZXMgYXMgYnJlYWtwb2ludHNWYWx1ZXMgfSBmcm9tICcuL2JyZWFrcG9pbnRzJztcbmV4cG9ydCBmdW5jdGlvbiBzaXppbmdUcmFuc2Zvcm0odmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlIDw9IDEgJiYgdmFsdWUgIT09IDAgPyBgJHt2YWx1ZSAqIDEwMH0lYCA6IHZhbHVlO1xufVxuZXhwb3J0IGNvbnN0IHdpZHRoID0gc3R5bGUoe1xuICBwcm9wOiAnd2lkdGgnLFxuICB0cmFuc2Zvcm06IHNpemluZ1RyYW5zZm9ybVxufSk7XG5leHBvcnQgY29uc3QgbWF4V2lkdGggPSBwcm9wcyA9PiB7XG4gIGlmIChwcm9wcy5tYXhXaWR0aCAhPT0gdW5kZWZpbmVkICYmIHByb3BzLm1heFdpZHRoICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3R5bGVGcm9tUHJvcFZhbHVlID0gcHJvcFZhbHVlID0+IHtcbiAgICAgIHZhciBfcHJvcHMkdGhlbWUsIF9wcm9wcyR0aGVtZTI7XG4gICAgICBjb25zdCBicmVha3BvaW50ID0gKChfcHJvcHMkdGhlbWUgPSBwcm9wcy50aGVtZSkgPT0gbnVsbCB8fCAoX3Byb3BzJHRoZW1lID0gX3Byb3BzJHRoZW1lLmJyZWFrcG9pbnRzKSA9PSBudWxsIHx8IChfcHJvcHMkdGhlbWUgPSBfcHJvcHMkdGhlbWUudmFsdWVzKSA9PSBudWxsID8gdm9pZCAwIDogX3Byb3BzJHRoZW1lW3Byb3BWYWx1ZV0pIHx8IGJyZWFrcG9pbnRzVmFsdWVzW3Byb3BWYWx1ZV07XG4gICAgICBpZiAoIWJyZWFrcG9pbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBtYXhXaWR0aDogc2l6aW5nVHJhbnNmb3JtKHByb3BWYWx1ZSlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmICgoKF9wcm9wcyR0aGVtZTIgPSBwcm9wcy50aGVtZSkgPT0gbnVsbCB8fCAoX3Byb3BzJHRoZW1lMiA9IF9wcm9wcyR0aGVtZTIuYnJlYWtwb2ludHMpID09IG51bGwgPyB2b2lkIDAgOiBfcHJvcHMkdGhlbWUyLnVuaXQpICE9PSAncHgnKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbWF4V2lkdGg6IGAke2JyZWFrcG9pbnR9JHtwcm9wcy50aGVtZS5icmVha3BvaW50cy51bml0fWBcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1heFdpZHRoOiBicmVha3BvaW50XG4gICAgICB9O1xuICAgIH07XG4gICAgcmV0dXJuIGhhbmRsZUJyZWFrcG9pbnRzKHByb3BzLCBwcm9wcy5tYXhXaWR0aCwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5tYXhXaWR0aC5maWx0ZXJQcm9wcyA9IFsnbWF4V2lkdGgnXTtcbmV4cG9ydCBjb25zdCBtaW5XaWR0aCA9IHN0eWxlKHtcbiAgcHJvcDogJ21pbldpZHRoJyxcbiAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbn0pO1xuZXhwb3J0IGNvbnN0IGhlaWdodCA9IHN0eWxlKHtcbiAgcHJvcDogJ2hlaWdodCcsXG4gIHRyYW5zZm9ybTogc2l6aW5nVHJhbnNmb3JtXG59KTtcbmV4cG9ydCBjb25zdCBtYXhIZWlnaHQgPSBzdHlsZSh7XG4gIHByb3A6ICdtYXhIZWlnaHQnLFxuICB0cmFuc2Zvcm06IHNpemluZ1RyYW5zZm9ybVxufSk7XG5leHBvcnQgY29uc3QgbWluSGVpZ2h0ID0gc3R5bGUoe1xuICBwcm9wOiAnbWluSGVpZ2h0JyxcbiAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbn0pO1xuZXhwb3J0IGNvbnN0IHNpemVXaWR0aCA9IHN0eWxlKHtcbiAgcHJvcDogJ3NpemUnLFxuICBjc3NQcm9wZXJ0eTogJ3dpZHRoJyxcbiAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbn0pO1xuZXhwb3J0IGNvbnN0IHNpemVIZWlnaHQgPSBzdHlsZSh7XG4gIHByb3A6ICdzaXplJyxcbiAgY3NzUHJvcGVydHk6ICdoZWlnaHQnLFxuICB0cmFuc2Zvcm06IHNpemluZ1RyYW5zZm9ybVxufSk7XG5leHBvcnQgY29uc3QgYm94U2l6aW5nID0gc3R5bGUoe1xuICBwcm9wOiAnYm94U2l6aW5nJ1xufSk7XG5jb25zdCBzaXppbmcgPSBjb21wb3NlKHdpZHRoLCBtYXhXaWR0aCwgbWluV2lkdGgsIGhlaWdodCwgbWF4SGVpZ2h0LCBtaW5IZWlnaHQsIGJveFNpemluZyk7XG5leHBvcnQgZGVmYXVsdCBzaXppbmc7IiwiaW1wb3J0IHsgcGFkZGluZywgbWFyZ2luIH0gZnJvbSAnLi4vc3BhY2luZyc7XG5pbXBvcnQgeyBib3JkZXJSYWRpdXMsIGJvcmRlclRyYW5zZm9ybSB9IGZyb20gJy4uL2JvcmRlcnMnO1xuaW1wb3J0IHsgZ2FwLCByb3dHYXAsIGNvbHVtbkdhcCB9IGZyb20gJy4uL2Nzc0dyaWQnO1xuaW1wb3J0IHsgcGFsZXR0ZVRyYW5zZm9ybSB9IGZyb20gJy4uL3BhbGV0dGUnO1xuaW1wb3J0IHsgbWF4V2lkdGgsIHNpemluZ1RyYW5zZm9ybSB9IGZyb20gJy4uL3NpemluZyc7XG5jb25zdCBkZWZhdWx0U3hDb25maWcgPSB7XG4gIC8vIGJvcmRlcnNcbiAgYm9yZGVyOiB7XG4gICAgdGhlbWVLZXk6ICdib3JkZXJzJyxcbiAgICB0cmFuc2Zvcm06IGJvcmRlclRyYW5zZm9ybVxuICB9LFxuICBib3JkZXJUb3A6IHtcbiAgICB0aGVtZUtleTogJ2JvcmRlcnMnLFxuICAgIHRyYW5zZm9ybTogYm9yZGVyVHJhbnNmb3JtXG4gIH0sXG4gIGJvcmRlclJpZ2h0OiB7XG4gICAgdGhlbWVLZXk6ICdib3JkZXJzJyxcbiAgICB0cmFuc2Zvcm06IGJvcmRlclRyYW5zZm9ybVxuICB9LFxuICBib3JkZXJCb3R0b206IHtcbiAgICB0aGVtZUtleTogJ2JvcmRlcnMnLFxuICAgIHRyYW5zZm9ybTogYm9yZGVyVHJhbnNmb3JtXG4gIH0sXG4gIGJvcmRlckxlZnQ6IHtcbiAgICB0aGVtZUtleTogJ2JvcmRlcnMnLFxuICAgIHRyYW5zZm9ybTogYm9yZGVyVHJhbnNmb3JtXG4gIH0sXG4gIGJvcmRlckNvbG9yOiB7XG4gICAgdGhlbWVLZXk6ICdwYWxldHRlJ1xuICB9LFxuICBib3JkZXJUb3BDb2xvcjoge1xuICAgIHRoZW1lS2V5OiAncGFsZXR0ZSdcbiAgfSxcbiAgYm9yZGVyUmlnaHRDb2xvcjoge1xuICAgIHRoZW1lS2V5OiAncGFsZXR0ZSdcbiAgfSxcbiAgYm9yZGVyQm90dG9tQ29sb3I6IHtcbiAgICB0aGVtZUtleTogJ3BhbGV0dGUnXG4gIH0sXG4gIGJvcmRlckxlZnRDb2xvcjoge1xuICAgIHRoZW1lS2V5OiAncGFsZXR0ZSdcbiAgfSxcbiAgb3V0bGluZToge1xuICAgIHRoZW1lS2V5OiAnYm9yZGVycycsXG4gICAgdHJhbnNmb3JtOiBib3JkZXJUcmFuc2Zvcm1cbiAgfSxcbiAgb3V0bGluZUNvbG9yOiB7XG4gICAgdGhlbWVLZXk6ICdwYWxldHRlJ1xuICB9LFxuICBib3JkZXJSYWRpdXM6IHtcbiAgICB0aGVtZUtleTogJ3NoYXBlLmJvcmRlclJhZGl1cycsXG4gICAgc3R5bGU6IGJvcmRlclJhZGl1c1xuICB9LFxuICAvLyBwYWxldHRlXG4gIGNvbG9yOiB7XG4gICAgdGhlbWVLZXk6ICdwYWxldHRlJyxcbiAgICB0cmFuc2Zvcm06IHBhbGV0dGVUcmFuc2Zvcm1cbiAgfSxcbiAgYmdjb2xvcjoge1xuICAgIHRoZW1lS2V5OiAncGFsZXR0ZScsXG4gICAgY3NzUHJvcGVydHk6ICdiYWNrZ3JvdW5kQ29sb3InLFxuICAgIHRyYW5zZm9ybTogcGFsZXR0ZVRyYW5zZm9ybVxuICB9LFxuICBiYWNrZ3JvdW5kQ29sb3I6IHtcbiAgICB0aGVtZUtleTogJ3BhbGV0dGUnLFxuICAgIHRyYW5zZm9ybTogcGFsZXR0ZVRyYW5zZm9ybVxuICB9LFxuICAvLyBzcGFjaW5nXG4gIHA6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwdDoge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHByOiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcGI6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwbDoge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHB4OiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcHk6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwYWRkaW5nOiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ1RvcDoge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdSaWdodDoge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdCb3R0b206IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwYWRkaW5nTGVmdDoge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdYOiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ1k6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwYWRkaW5nSW5saW5lOiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ0lubGluZVN0YXJ0OiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ0lubGluZUVuZDoge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdCbG9jazoge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdCbG9ja1N0YXJ0OiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ0Jsb2NrRW5kOiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgbToge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbXQ6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1yOiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBtYjoge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbWw6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG14OiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBteToge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbWFyZ2luOiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBtYXJnaW5Ub3A6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1hcmdpblJpZ2h0OiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBtYXJnaW5Cb3R0b206IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1hcmdpbkxlZnQ6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1hcmdpblg6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1hcmdpblk6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1hcmdpbklubGluZToge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbWFyZ2luSW5saW5lU3RhcnQ6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1hcmdpbklubGluZUVuZDoge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbWFyZ2luQmxvY2s6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1hcmdpbkJsb2NrU3RhcnQ6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1hcmdpbkJsb2NrRW5kOiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICAvLyBkaXNwbGF5XG4gIGRpc3BsYXlQcmludDoge1xuICAgIGNzc1Byb3BlcnR5OiBmYWxzZSxcbiAgICB0cmFuc2Zvcm06IHZhbHVlID0+ICh7XG4gICAgICAnQG1lZGlhIHByaW50Jzoge1xuICAgICAgICBkaXNwbGF5OiB2YWx1ZVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG4gIGRpc3BsYXk6IHt9LFxuICBvdmVyZmxvdzoge30sXG4gIHRleHRPdmVyZmxvdzoge30sXG4gIHZpc2liaWxpdHk6IHt9LFxuICB3aGl0ZVNwYWNlOiB7fSxcbiAgLy8gZmxleGJveFxuICBmbGV4QmFzaXM6IHt9LFxuICBmbGV4RGlyZWN0aW9uOiB7fSxcbiAgZmxleFdyYXA6IHt9LFxuICBqdXN0aWZ5Q29udGVudDoge30sXG4gIGFsaWduSXRlbXM6IHt9LFxuICBhbGlnbkNvbnRlbnQ6IHt9LFxuICBvcmRlcjoge30sXG4gIGZsZXg6IHt9LFxuICBmbGV4R3Jvdzoge30sXG4gIGZsZXhTaHJpbms6IHt9LFxuICBhbGlnblNlbGY6IHt9LFxuICBqdXN0aWZ5SXRlbXM6IHt9LFxuICBqdXN0aWZ5U2VsZjoge30sXG4gIC8vIGdyaWRcbiAgZ2FwOiB7XG4gICAgc3R5bGU6IGdhcFxuICB9LFxuICByb3dHYXA6IHtcbiAgICBzdHlsZTogcm93R2FwXG4gIH0sXG4gIGNvbHVtbkdhcDoge1xuICAgIHN0eWxlOiBjb2x1bW5HYXBcbiAgfSxcbiAgZ3JpZENvbHVtbjoge30sXG4gIGdyaWRSb3c6IHt9LFxuICBncmlkQXV0b0Zsb3c6IHt9LFxuICBncmlkQXV0b0NvbHVtbnM6IHt9LFxuICBncmlkQXV0b1Jvd3M6IHt9LFxuICBncmlkVGVtcGxhdGVDb2x1bW5zOiB7fSxcbiAgZ3JpZFRlbXBsYXRlUm93czoge30sXG4gIGdyaWRUZW1wbGF0ZUFyZWFzOiB7fSxcbiAgZ3JpZEFyZWE6IHt9LFxuICAvLyBwb3NpdGlvbnNcbiAgcG9zaXRpb246IHt9LFxuICB6SW5kZXg6IHtcbiAgICB0aGVtZUtleTogJ3pJbmRleCdcbiAgfSxcbiAgdG9wOiB7fSxcbiAgcmlnaHQ6IHt9LFxuICBib3R0b206IHt9LFxuICBsZWZ0OiB7fSxcbiAgLy8gc2hhZG93c1xuICBib3hTaGFkb3c6IHtcbiAgICB0aGVtZUtleTogJ3NoYWRvd3MnXG4gIH0sXG4gIC8vIHNpemluZ1xuICB3aWR0aDoge1xuICAgIHRyYW5zZm9ybTogc2l6aW5nVHJhbnNmb3JtXG4gIH0sXG4gIG1heFdpZHRoOiB7XG4gICAgc3R5bGU6IG1heFdpZHRoXG4gIH0sXG4gIG1pbldpZHRoOiB7XG4gICAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbiAgfSxcbiAgaGVpZ2h0OiB7XG4gICAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbiAgfSxcbiAgbWF4SGVpZ2h0OiB7XG4gICAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbiAgfSxcbiAgbWluSGVpZ2h0OiB7XG4gICAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbiAgfSxcbiAgYm94U2l6aW5nOiB7fSxcbiAgLy8gdHlwb2dyYXBoeVxuICBmb250RmFtaWx5OiB7XG4gICAgdGhlbWVLZXk6ICd0eXBvZ3JhcGh5J1xuICB9LFxuICBmb250U2l6ZToge1xuICAgIHRoZW1lS2V5OiAndHlwb2dyYXBoeSdcbiAgfSxcbiAgZm9udFN0eWxlOiB7XG4gICAgdGhlbWVLZXk6ICd0eXBvZ3JhcGh5J1xuICB9LFxuICBmb250V2VpZ2h0OiB7XG4gICAgdGhlbWVLZXk6ICd0eXBvZ3JhcGh5J1xuICB9LFxuICBsZXR0ZXJTcGFjaW5nOiB7fSxcbiAgdGV4dFRyYW5zZm9ybToge30sXG4gIGxpbmVIZWlnaHQ6IHt9LFxuICB0ZXh0QWxpZ246IHt9LFxuICB0eXBvZ3JhcGh5OiB7XG4gICAgY3NzUHJvcGVydHk6IGZhbHNlLFxuICAgIHRoZW1lS2V5OiAndHlwb2dyYXBoeSdcbiAgfVxufTtcbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRTeENvbmZpZzsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4188\n")},4239:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   "default": () => (/* reexport safe */ _deepmerge__WEBPACK_IMPORTED_MODULE_0__.A),\n/* harmony export */   isPlainObject: () => (/* reexport safe */ _deepmerge__WEBPACK_IMPORTED_MODULE_0__.Q)\n/* harmony export */ });\n/* harmony import */ var _deepmerge__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1317);\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDIzOS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBc0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2VzbS9kZWVwbWVyZ2UvaW5kZXguanM/MmJlZCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSAnLi9kZWVwbWVyZ2UnO1xuZXhwb3J0ICogZnJvbSAnLi9kZWVwbWVyZ2UnOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4239\n')},4405:(__unused_webpack_module,exports)=>{"use strict";eval('var __webpack_unused_export__;\n/**\n * @license React\n * react-is.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\nvar REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"),\n  REACT_PORTAL_TYPE = Symbol.for("react.portal"),\n  REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"),\n  REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"),\n  REACT_PROFILER_TYPE = Symbol.for("react.profiler");\nSymbol.for("react.provider");\nvar REACT_CONSUMER_TYPE = Symbol.for("react.consumer"),\n  REACT_CONTEXT_TYPE = Symbol.for("react.context"),\n  REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"),\n  REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"),\n  REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"),\n  REACT_MEMO_TYPE = Symbol.for("react.memo"),\n  REACT_LAZY_TYPE = Symbol.for("react.lazy"),\n  REACT_VIEW_TRANSITION_TYPE = Symbol.for("react.view_transition"),\n  REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference");\nfunction typeOf(object) {\n  if ("object" === typeof object && null !== object) {\n    var $$typeof = object.$$typeof;\n    switch ($$typeof) {\n      case REACT_ELEMENT_TYPE:\n        switch (((object = object.type), object)) {\n          case REACT_FRAGMENT_TYPE:\n          case REACT_PROFILER_TYPE:\n          case REACT_STRICT_MODE_TYPE:\n          case REACT_SUSPENSE_TYPE:\n          case REACT_SUSPENSE_LIST_TYPE:\n          case REACT_VIEW_TRANSITION_TYPE:\n            return object;\n          default:\n            switch (((object = object && object.$$typeof), object)) {\n              case REACT_CONTEXT_TYPE:\n              case REACT_FORWARD_REF_TYPE:\n              case REACT_LAZY_TYPE:\n              case REACT_MEMO_TYPE:\n                return object;\n              case REACT_CONSUMER_TYPE:\n                return object;\n              default:\n                return $$typeof;\n            }\n        }\n      case REACT_PORTAL_TYPE:\n        return $$typeof;\n    }\n  }\n}\n__webpack_unused_export__ = REACT_CONSUMER_TYPE;\n__webpack_unused_export__ = REACT_CONTEXT_TYPE;\n__webpack_unused_export__ = REACT_ELEMENT_TYPE;\nexports.vM = REACT_FORWARD_REF_TYPE;\n__webpack_unused_export__ = REACT_FRAGMENT_TYPE;\n__webpack_unused_export__ = REACT_LAZY_TYPE;\nexports.lD = REACT_MEMO_TYPE;\n__webpack_unused_export__ = REACT_PORTAL_TYPE;\n__webpack_unused_export__ = REACT_PROFILER_TYPE;\n__webpack_unused_export__ = REACT_STRICT_MODE_TYPE;\n__webpack_unused_export__ = REACT_SUSPENSE_TYPE;\n__webpack_unused_export__ = REACT_SUSPENSE_LIST_TYPE;\n__webpack_unused_export__ = function (object) {\n  return typeOf(object) === REACT_CONSUMER_TYPE;\n};\n__webpack_unused_export__ = function (object) {\n  return typeOf(object) === REACT_CONTEXT_TYPE;\n};\n__webpack_unused_export__ = function (object) {\n  return (\n    "object" === typeof object &&\n    null !== object &&\n    object.$$typeof === REACT_ELEMENT_TYPE\n  );\n};\n__webpack_unused_export__ = function (object) {\n  return typeOf(object) === REACT_FORWARD_REF_TYPE;\n};\n__webpack_unused_export__ = function (object) {\n  return typeOf(object) === REACT_FRAGMENT_TYPE;\n};\n__webpack_unused_export__ = function (object) {\n  return typeOf(object) === REACT_LAZY_TYPE;\n};\n__webpack_unused_export__ = function (object) {\n  return typeOf(object) === REACT_MEMO_TYPE;\n};\n__webpack_unused_export__ = function (object) {\n  return typeOf(object) === REACT_PORTAL_TYPE;\n};\n__webpack_unused_export__ = function (object) {\n  return typeOf(object) === REACT_PROFILER_TYPE;\n};\n__webpack_unused_export__ = function (object) {\n  return typeOf(object) === REACT_STRICT_MODE_TYPE;\n};\n__webpack_unused_export__ = function (object) {\n  return typeOf(object) === REACT_SUSPENSE_TYPE;\n};\n__webpack_unused_export__ = function (object) {\n  return typeOf(object) === REACT_SUSPENSE_LIST_TYPE;\n};\n__webpack_unused_export__ = function (type) {\n  return "string" === typeof type ||\n    "function" === typeof type ||\n    type === REACT_FRAGMENT_TYPE ||\n    type === REACT_PROFILER_TYPE ||\n    type === REACT_STRICT_MODE_TYPE ||\n    type === REACT_SUSPENSE_TYPE ||\n    type === REACT_SUSPENSE_LIST_TYPE ||\n    ("object" === typeof type &&\n      null !== type &&\n      (type.$$typeof === REACT_LAZY_TYPE ||\n        type.$$typeof === REACT_MEMO_TYPE ||\n        type.$$typeof === REACT_CONTEXT_TYPE ||\n        type.$$typeof === REACT_CONSUMER_TYPE ||\n        type.$$typeof === REACT_FORWARD_REF_TYPE ||\n        type.$$typeof === REACT_CLIENT_REFERENCE ||\n        void 0 !== type.getModuleId))\n    ? !0\n    : !1;\n};\n__webpack_unused_export__ = typeOf;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDQwNS5qcyIsIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBdUI7QUFDdkIseUJBQXVCO0FBQ3ZCLHlCQUFlO0FBQ2YsVUFBa0I7QUFDbEIseUJBQWdCO0FBQ2hCLHlCQUFZO0FBQ1osVUFBWTtBQUNaLHlCQUFjO0FBQ2QseUJBQWdCO0FBQ2hCLHlCQUFrQjtBQUNsQix5QkFBZ0I7QUFDaEIseUJBQW9CO0FBQ3BCLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQSx5QkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQW9CO0FBQ3BCO0FBQ0E7QUFDQSx5QkFBa0I7QUFDbEI7QUFDQTtBQUNBLHlCQUFjO0FBQ2Q7QUFDQTtBQUNBLHlCQUFjO0FBQ2Q7QUFDQTtBQUNBLHlCQUFnQjtBQUNoQjtBQUNBO0FBQ0EseUJBQWtCO0FBQ2xCO0FBQ0E7QUFDQSx5QkFBb0I7QUFDcEI7QUFDQTtBQUNBLHlCQUFrQjtBQUNsQjtBQUNBO0FBQ0EseUJBQXNCO0FBQ3RCO0FBQ0E7QUFDQSx5QkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBYyIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLmpzPzk2NGEiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZSBSZWFjdFxuICogcmVhY3QtaXMucHJvZHVjdGlvbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnRyYW5zaXRpb25hbC5lbGVtZW50XCIpLFxuICBSRUFDVF9QT1JUQUxfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5wb3J0YWxcIiksXG4gIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QuZnJhZ21lbnRcIiksXG4gIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3Quc3RyaWN0X21vZGVcIiksXG4gIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QucHJvZmlsZXJcIik7XG5TeW1ib2wuZm9yKFwicmVhY3QucHJvdmlkZXJcIik7XG52YXIgUkVBQ1RfQ09OU1VNRVJfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5jb25zdW1lclwiKSxcbiAgUkVBQ1RfQ09OVEVYVF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmNvbnRleHRcIiksXG4gIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QuZm9yd2FyZF9yZWZcIiksXG4gIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VcIiksXG4gIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZV9saXN0XCIpLFxuICBSRUFDVF9NRU1PX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QubWVtb1wiKSxcbiAgUkVBQ1RfTEFaWV9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmxhenlcIiksXG4gIFJFQUNUX1ZJRVdfVFJBTlNJVElPTl9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnZpZXdfdHJhbnNpdGlvblwiKSxcbiAgUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5jbGllbnQucmVmZXJlbmNlXCIpO1xuZnVuY3Rpb24gdHlwZU9mKG9iamVjdCkge1xuICBpZiAoXCJvYmplY3RcIiA9PT0gdHlwZW9mIG9iamVjdCAmJiBudWxsICE9PSBvYmplY3QpIHtcbiAgICB2YXIgJCR0eXBlb2YgPSBvYmplY3QuJCR0eXBlb2Y7XG4gICAgc3dpdGNoICgkJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgIHN3aXRjaCAoKChvYmplY3QgPSBvYmplY3QudHlwZSksIG9iamVjdCkpIHtcbiAgICAgICAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9WSUVXX1RSQU5TSVRJT05fVFlQRTpcbiAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHN3aXRjaCAoKChvYmplY3QgPSBvYmplY3QgJiYgb2JqZWN0LiQkdHlwZW9mKSwgb2JqZWN0KSkge1xuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9DT05TVU1FUl9UWVBFOlxuICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICByZXR1cm4gJCR0eXBlb2Y7XG4gICAgfVxuICB9XG59XG5leHBvcnRzLkNvbnRleHRDb25zdW1lciA9IFJFQUNUX0NPTlNVTUVSX1RZUEU7XG5leHBvcnRzLkNvbnRleHRQcm92aWRlciA9IFJFQUNUX0NPTlRFWFRfVFlQRTtcbmV4cG9ydHMuRWxlbWVudCA9IFJFQUNUX0VMRU1FTlRfVFlQRTtcbmV4cG9ydHMuRm9yd2FyZFJlZiA9IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU7XG5leHBvcnRzLkZyYWdtZW50ID0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbmV4cG9ydHMuTGF6eSA9IFJFQUNUX0xBWllfVFlQRTtcbmV4cG9ydHMuTWVtbyA9IFJFQUNUX01FTU9fVFlQRTtcbmV4cG9ydHMuUG9ydGFsID0gUkVBQ1RfUE9SVEFMX1RZUEU7XG5leHBvcnRzLlByb2ZpbGVyID0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbmV4cG9ydHMuU3RyaWN0TW9kZSA9IFJFQUNUX1NUUklDVF9NT0RFX1RZUEU7XG5leHBvcnRzLlN1c3BlbnNlID0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbmV4cG9ydHMuU3VzcGVuc2VMaXN0ID0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFO1xuZXhwb3J0cy5pc0NvbnRleHRDb25zdW1lciA9IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9DT05TVU1FUl9UWVBFO1xufTtcbmV4cG9ydHMuaXNDb250ZXh0UHJvdmlkZXIgPSBmdW5jdGlvbiAob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFO1xufTtcbmV4cG9ydHMuaXNFbGVtZW50ID0gZnVuY3Rpb24gKG9iamVjdCkge1xuICByZXR1cm4gKFxuICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBvYmplY3QgJiZcbiAgICBudWxsICE9PSBvYmplY3QgJiZcbiAgICBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRVxuICApO1xufTtcbmV4cG9ydHMuaXNGb3J3YXJkUmVmID0gZnVuY3Rpb24gKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU7XG59O1xuZXhwb3J0cy5pc0ZyYWdtZW50ID0gZnVuY3Rpb24gKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG59O1xuZXhwb3J0cy5pc0xhenkgPSBmdW5jdGlvbiAob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTEFaWV9UWVBFO1xufTtcbmV4cG9ydHMuaXNNZW1vID0gZnVuY3Rpb24gKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX01FTU9fVFlQRTtcbn07XG5leHBvcnRzLmlzUG9ydGFsID0gZnVuY3Rpb24gKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BPUlRBTF9UWVBFO1xufTtcbmV4cG9ydHMuaXNQcm9maWxlciA9IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xufTtcbmV4cG9ydHMuaXNTdHJpY3RNb2RlID0gZnVuY3Rpb24gKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEU7XG59O1xuZXhwb3J0cy5pc1N1c3BlbnNlID0gZnVuY3Rpb24gKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG59O1xuZXhwb3J0cy5pc1N1c3BlbnNlTGlzdCA9IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU7XG59O1xuZXhwb3J0cy5pc1ZhbGlkRWxlbWVudFR5cGUgPSBmdW5jdGlvbiAodHlwZSkge1xuICByZXR1cm4gXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHR5cGUgfHxcbiAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB0eXBlIHx8XG4gICAgdHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSB8fFxuICAgIHR5cGUgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEUgfHxcbiAgICB0eXBlID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFIHx8XG4gICAgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRSB8fFxuICAgIHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSB8fFxuICAgIChcIm9iamVjdFwiID09PSB0eXBlb2YgdHlwZSAmJlxuICAgICAgbnVsbCAhPT0gdHlwZSAmJlxuICAgICAgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fFxuICAgICAgICB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHxcbiAgICAgICAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFIHx8XG4gICAgICAgIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlNVTUVSX1RZUEUgfHxcbiAgICAgICAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fFxuICAgICAgICB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DTElFTlRfUkVGRVJFTkNFIHx8XG4gICAgICAgIHZvaWQgMCAhPT0gdHlwZS5nZXRNb2R1bGVJZCkpXG4gICAgPyAhMFxuICAgIDogITE7XG59O1xuZXhwb3J0cy50eXBlT2YgPSB0eXBlT2Y7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4405\n')},4438:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n// copied from @mui/system/createStyled\nfunction slotShouldForwardProp(prop) {\n  return prop !== 'ownerState' && prop !== 'theme' && prop !== 'sx' && prop !== 'as';\n}\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (slotShouldForwardProp);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDQzOC5qcyIsIm1hcHBpbmdzIjoiOzs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlFQUFlLHFCQUFxQiIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL3Nsb3RTaG91bGRGb3J3YXJkUHJvcC5qcz8xNGVkIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGNvcGllZCBmcm9tIEBtdWkvc3lzdGVtL2NyZWF0ZVN0eWxlZFxuZnVuY3Rpb24gc2xvdFNob3VsZEZvcndhcmRQcm9wKHByb3ApIHtcbiAgcmV0dXJuIHByb3AgIT09ICdvd25lclN0YXRlJyAmJiBwcm9wICE9PSAndGhlbWUnICYmIHByb3AgIT09ICdzeCcgJiYgcHJvcCAhPT0gJ2FzJztcbn1cbmV4cG9ydCBkZWZhdWx0IHNsb3RTaG91bGRGb3J3YXJkUHJvcDsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4438\n")},4620:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _mui_utils_deepmerge__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1317);\n\nfunction merge(acc, item) {\n  if (!item) {\n    return acc;\n  }\n  return (0,_mui_utils_deepmerge__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(acc, item, {\n    clone: false // No need to clone deep, it\'s way faster.\n  });\n}\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (merge);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDYyMC5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQTZDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyx5RUFBUztBQUNsQjtBQUNBLEdBQUc7QUFDSDtBQUNBLGlFQUFlLEtBQUsiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vbWVyZ2UuanM/NzA0MyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZGVlcG1lcmdlIGZyb20gJ0BtdWkvdXRpbHMvZGVlcG1lcmdlJztcbmZ1bmN0aW9uIG1lcmdlKGFjYywgaXRlbSkge1xuICBpZiAoIWl0ZW0pIHtcbiAgICByZXR1cm4gYWNjO1xuICB9XG4gIHJldHVybiBkZWVwbWVyZ2UoYWNjLCBpdGVtLCB7XG4gICAgY2xvbmU6IGZhbHNlIC8vIE5vIG5lZWQgdG8gY2xvbmUgZGVlcCwgaXQncyB3YXkgZmFzdGVyLlxuICB9KTtcbn1cbmV4cG9ydCBkZWZhdWx0IG1lcmdlOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4620\n')},4634:module=>{eval('function _extends() {\n  return module.exports = _extends = Object.assign ? Object.assign.bind() : function (n) {\n    for (var e = 1; e < arguments.length; e++) {\n      var t = arguments[e];\n      for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n    }\n    return n;\n  }, module.exports.__esModule = true, module.exports["default"] = module.exports, _extends.apply(null, arguments);\n}\nmodule.exports = _extends, module.exports.__esModule = true, module.exports["default"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDYzNC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0Esb0JBQW9CLHNCQUFzQjtBQUMxQztBQUNBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0EsR0FBRyxFQUFFLHlCQUF5QixTQUFTLHlCQUF5QjtBQUNoRTtBQUNBLDJCQUEyQix5QkFBeUIsU0FBUyx5QkFBeUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanM/OGY5ZiJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBfZXh0ZW5kcygpIHtcbiAgcmV0dXJuIG1vZHVsZS5leHBvcnRzID0gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikge1xuICAgIGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7XG4gICAgICB2YXIgdCA9IGFyZ3VtZW50c1tlXTtcbiAgICAgIGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7XG4gICAgfVxuICAgIHJldHVybiBuO1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMsIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9leHRlbmRzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4634\n')},4661:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   A: () => (/* binding */ useId)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1594);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n'use client';\n\n\nlet globalId = 0;\nfunction useGlobalId(idOverride) {\n  const [defaultId, setDefaultId] = react__WEBPACK_IMPORTED_MODULE_0__.useState(idOverride);\n  const id = idOverride || defaultId;\n  react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => {\n    if (defaultId == null) {\n      // Fallback to this default id when possible.\n      // Use the incrementing value for client-side rendering only.\n      // We can't use it server-side.\n      // If you want to use random values please consider the Birthday Problem: https://en.wikipedia.org/wiki/Birthday_problem\n      globalId += 1;\n      setDefaultId(`mui-${globalId}`);\n    }\n  }, [defaultId]);\n  return id;\n}\n\n// downstream bundlers may remove unnecessary concatenation, but won't remove toString call -- Workaround for https://github.com/webpack/webpack/issues/14814\nconst maybeReactUseId = react__WEBPACK_IMPORTED_MODULE_0__['useId'.toString()];\n/**\n *\n * @example <div id={useId()} />\n * @param idOverride\n * @returns {string}\n */\nfunction useId(idOverride) {\n  if (maybeReactUseId !== undefined) {\n    const reactId = maybeReactUseId();\n    return idOverride != null ? idOverride : reactId;\n  }\n  // eslint-disable-next-line react-hooks/rules-of-hooks -- `React.useId` is invariant at runtime.\n  return useGlobalId(idOverride);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDY2MS5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFBOztBQUUrQjtBQUMvQjtBQUNBO0FBQ0Esb0NBQW9DLDJDQUFjO0FBQ2xEO0FBQ0EsRUFBRSw0Q0FBZTtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsU0FBUztBQUNuQztBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0Esd0JBQXdCLGtDQUFLO0FBQzdCO0FBQ0E7QUFDQSxxQkFBcUIsU0FBUztBQUM5QjtBQUNBLGFBQWE7QUFDYjtBQUNlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2VzbS91c2VJZC91c2VJZC5qcz8wMzc3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xubGV0IGdsb2JhbElkID0gMDtcbmZ1bmN0aW9uIHVzZUdsb2JhbElkKGlkT3ZlcnJpZGUpIHtcbiAgY29uc3QgW2RlZmF1bHRJZCwgc2V0RGVmYXVsdElkXSA9IFJlYWN0LnVzZVN0YXRlKGlkT3ZlcnJpZGUpO1xuICBjb25zdCBpZCA9IGlkT3ZlcnJpZGUgfHwgZGVmYXVsdElkO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChkZWZhdWx0SWQgPT0gbnVsbCkge1xuICAgICAgLy8gRmFsbGJhY2sgdG8gdGhpcyBkZWZhdWx0IGlkIHdoZW4gcG9zc2libGUuXG4gICAgICAvLyBVc2UgdGhlIGluY3JlbWVudGluZyB2YWx1ZSBmb3IgY2xpZW50LXNpZGUgcmVuZGVyaW5nIG9ubHkuXG4gICAgICAvLyBXZSBjYW4ndCB1c2UgaXQgc2VydmVyLXNpZGUuXG4gICAgICAvLyBJZiB5b3Ugd2FudCB0byB1c2UgcmFuZG9tIHZhbHVlcyBwbGVhc2UgY29uc2lkZXIgdGhlIEJpcnRoZGF5IFByb2JsZW06IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0JpcnRoZGF5X3Byb2JsZW1cbiAgICAgIGdsb2JhbElkICs9IDE7XG4gICAgICBzZXREZWZhdWx0SWQoYG11aS0ke2dsb2JhbElkfWApO1xuICAgIH1cbiAgfSwgW2RlZmF1bHRJZF0pO1xuICByZXR1cm4gaWQ7XG59XG5cbi8vIGRvd25zdHJlYW0gYnVuZGxlcnMgbWF5IHJlbW92ZSB1bm5lY2Vzc2FyeSBjb25jYXRlbmF0aW9uLCBidXQgd29uJ3QgcmVtb3ZlIHRvU3RyaW5nIGNhbGwgLS0gV29ya2Fyb3VuZCBmb3IgaHR0cHM6Ly9naXRodWIuY29tL3dlYnBhY2svd2VicGFjay9pc3N1ZXMvMTQ4MTRcbmNvbnN0IG1heWJlUmVhY3RVc2VJZCA9IFJlYWN0Wyd1c2VJZCcudG9TdHJpbmcoKV07XG4vKipcbiAqXG4gKiBAZXhhbXBsZSA8ZGl2IGlkPXt1c2VJZCgpfSAvPlxuICogQHBhcmFtIGlkT3ZlcnJpZGVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUlkKGlkT3ZlcnJpZGUpIHtcbiAgaWYgKG1heWJlUmVhY3RVc2VJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgcmVhY3RJZCA9IG1heWJlUmVhY3RVc2VJZCgpO1xuICAgIHJldHVybiBpZE92ZXJyaWRlICE9IG51bGwgPyBpZE92ZXJyaWRlIDogcmVhY3RJZDtcbiAgfVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3MgLS0gYFJlYWN0LnVzZUlkYCBpcyBpbnZhcmlhbnQgYXQgcnVudGltZS5cbiAgcmV0dXJuIHVzZUdsb2JhbElkKGlkT3ZlcnJpZGUpO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4661\n")},4684:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   C: () => (/* binding */ CacheProvider),\n/* harmony export */   E: () => (/* binding */ Emotion$1),\n/* harmony export */   T: () => (/* binding */ ThemeContext),\n/* harmony export */   c: () => (/* binding */ createEmotionProps),\n/* harmony export */   h: () => (/* binding */ hasOwn),\n/* harmony export */   w: () => (/* binding */ withEmotionCache)\n/* harmony export */ });\n/* unused harmony exports _, a, b, i, u */\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1594);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _emotion_cache__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5655);\n/* harmony import */ var _emotion_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(41);\n/* harmony import */ var _emotion_serialize__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(3174);\n/* harmony import */ var _emotion_use_insertion_effect_with_fallbacks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(1287);\n\n\n\n\n\n\n\n\n\n\nvar isDevelopment = false;\n\nvar EmotionCacheContext = /* #__PURE__ */react__WEBPACK_IMPORTED_MODULE_0__.createContext( // we're doing this to avoid preconstruct's dead code elimination in this one case\n// because this module is primarily intended for the browser and node\n// but it's also required in react native and similar environments sometimes\n// and we could have a special build just for that\n// but this is much easier and the native packages\n// might use a different theme context in the future anyway\ntypeof HTMLElement !== 'undefined' ? /* #__PURE__ */(0,_emotion_cache__WEBPACK_IMPORTED_MODULE_1__/* [\"default\"] */ .A)({\n  key: 'css'\n}) : null);\n\nvar CacheProvider = EmotionCacheContext.Provider;\nvar __unsafe_useEmotionCache = function useEmotionCache() {\n  return useContext(EmotionCacheContext);\n};\n\nvar withEmotionCache = function withEmotionCache(func) {\n  return /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(function (props, ref) {\n    // the cache will never be null in the browser\n    var cache = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(EmotionCacheContext);\n    return func(props, cache, ref);\n  });\n};\n\nvar ThemeContext = /* #__PURE__ */react__WEBPACK_IMPORTED_MODULE_0__.createContext({});\n\nvar useTheme = function useTheme() {\n  return React.useContext(ThemeContext);\n};\n\nvar getTheme = function getTheme(outerTheme, theme) {\n  if (typeof theme === 'function') {\n    var mergedTheme = theme(outerTheme);\n\n    return mergedTheme;\n  }\n\n  return _extends({}, outerTheme, theme);\n};\n\nvar createCacheWithTheme = /* #__PURE__ */(/* unused pure expression or super */ null && (weakMemoize(function (outerTheme) {\n  return weakMemoize(function (theme) {\n    return getTheme(outerTheme, theme);\n  });\n})));\nvar ThemeProvider = function ThemeProvider(props) {\n  var theme = React.useContext(ThemeContext);\n\n  if (props.theme !== theme) {\n    theme = createCacheWithTheme(theme)(props.theme);\n  }\n\n  return /*#__PURE__*/React.createElement(ThemeContext.Provider, {\n    value: theme\n  }, props.children);\n};\nfunction withTheme(Component) {\n  var componentName = Component.displayName || Component.name || 'Component';\n  var WithTheme = /*#__PURE__*/React.forwardRef(function render(props, ref) {\n    var theme = React.useContext(ThemeContext);\n    return /*#__PURE__*/React.createElement(Component, _extends({\n      theme: theme,\n      ref: ref\n    }, props));\n  });\n  WithTheme.displayName = \"WithTheme(\" + componentName + \")\";\n  return hoistNonReactStatics(WithTheme, Component);\n}\n\nvar hasOwn = {}.hasOwnProperty;\n\nvar typePropName = '__EMOTION_TYPE_PLEASE_DO_NOT_USE__';\nvar createEmotionProps = function createEmotionProps(type, props) {\n\n  var newProps = {};\n\n  for (var _key in props) {\n    if (hasOwn.call(props, _key)) {\n      newProps[_key] = props[_key];\n    }\n  }\n\n  newProps[typePropName] = type; // Runtime labeling is an opt-in feature because:\n\n  return newProps;\n};\n\nvar Insertion = function Insertion(_ref) {\n  var cache = _ref.cache,\n      serialized = _ref.serialized,\n      isStringTag = _ref.isStringTag;\n  (0,_emotion_utils__WEBPACK_IMPORTED_MODULE_4__/* .registerStyles */ .SF)(cache, serialized, isStringTag);\n  (0,_emotion_use_insertion_effect_with_fallbacks__WEBPACK_IMPORTED_MODULE_3__/* .useInsertionEffectAlwaysWithSyncFallback */ .s)(function () {\n    return (0,_emotion_utils__WEBPACK_IMPORTED_MODULE_4__/* .insertStyles */ .sk)(cache, serialized, isStringTag);\n  });\n\n  return null;\n};\n\nvar Emotion = /* #__PURE__ */withEmotionCache(function (props, cache, ref) {\n  var cssProp = props.css; // so that using `css` from `emotion` and passing the result to the css prop works\n  // not passing the registered cache to serializeStyles because it would\n  // make certain babel optimisations not possible\n\n  if (typeof cssProp === 'string' && cache.registered[cssProp] !== undefined) {\n    cssProp = cache.registered[cssProp];\n  }\n\n  var WrappedComponent = props[typePropName];\n  var registeredStyles = [cssProp];\n  var className = '';\n\n  if (typeof props.className === 'string') {\n    className = (0,_emotion_utils__WEBPACK_IMPORTED_MODULE_4__/* .getRegisteredStyles */ .Rk)(cache.registered, registeredStyles, props.className);\n  } else if (props.className != null) {\n    className = props.className + \" \";\n  }\n\n  var serialized = (0,_emotion_serialize__WEBPACK_IMPORTED_MODULE_2__/* .serializeStyles */ .J)(registeredStyles, undefined, react__WEBPACK_IMPORTED_MODULE_0__.useContext(ThemeContext));\n\n  className += cache.key + \"-\" + serialized.name;\n  var newProps = {};\n\n  for (var _key2 in props) {\n    if (hasOwn.call(props, _key2) && _key2 !== 'css' && _key2 !== typePropName && (!isDevelopment )) {\n      newProps[_key2] = props[_key2];\n    }\n  }\n\n  newProps.className = className;\n\n  if (ref) {\n    newProps.ref = ref;\n  }\n\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(Insertion, {\n    cache: cache,\n    serialized: serialized,\n    isStringTag: typeof WrappedComponent === 'string'\n  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(WrappedComponent, newProps));\n});\n\nvar Emotion$1 = Emotion;\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDY4NC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBK0I7QUFDZ0I7QUFDTjtBQUNpQjtBQUNWO0FBQ3NEO0FBQ25CO0FBQzlCO0FBQ21EOztBQUV4Rzs7QUFFQSx5Q0FBeUMsZ0RBQW1CO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0QsbUVBQVc7QUFDL0Q7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esc0JBQXNCLGlEQUFVO0FBQ2hDO0FBQ0EsZ0JBQWdCLGlEQUFVO0FBQzFCO0FBQ0EsR0FBRztBQUNIOztBQUVBLGtDQUFrQyxnREFBbUIsR0FBRzs7QUFFeEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLG9CQUFvQjtBQUNwQjs7QUFFQSwwQ0FBMEM7QUFDMUM7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDLENBQUM7QUFDRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQSxlQUFlOztBQUVmO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQ0FBaUM7O0FBRWpDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLHdFQUFjO0FBQ2hCLEVBQUUsK0hBQXdDO0FBQzFDLFdBQVcsc0VBQVk7QUFDdkIsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGdCQUFnQiw2RUFBbUI7QUFDbkMsSUFBSTtBQUNKO0FBQ0E7O0FBRUEsbUJBQW1CLDRFQUFlLDhCQUE4Qiw2Q0FBZ0I7O0FBRWhGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsc0JBQXNCLGdEQUFtQixDQUFDLDJDQUFjLHFCQUFxQixnREFBbUI7QUFDaEc7QUFDQTtBQUNBO0FBQ0EsR0FBRyxnQkFBZ0IsZ0RBQW1CO0FBQ3RDLENBQUM7O0FBRUQ7O0FBRW9PIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vcmVhY3QvZGlzdC9lbW90aW9uLWVsZW1lbnQtZjBkZTk2OGUuYnJvd3Nlci5lc20uanM/OWI4YiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VDb250ZXh0LCBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNyZWF0ZUNhY2hlIGZyb20gJ0BlbW90aW9uL2NhY2hlJztcbmltcG9ydCBfZXh0ZW5kcyBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzJztcbmltcG9ydCB3ZWFrTWVtb2l6ZSBmcm9tICdAZW1vdGlvbi93ZWFrLW1lbW9pemUnO1xuaW1wb3J0IGhvaXN0Tm9uUmVhY3RTdGF0aWNzIGZyb20gJy4uL19pc29sYXRlZC1obnJzL2Rpc3QvZW1vdGlvbi1yZWFjdC1faXNvbGF0ZWQtaG5ycy5icm93c2VyLmVzbS5qcyc7XG5pbXBvcnQgeyBnZXRSZWdpc3RlcmVkU3R5bGVzLCByZWdpc3RlclN0eWxlcywgaW5zZXJ0U3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vdXRpbHMnO1xuaW1wb3J0IHsgc2VyaWFsaXplU3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vc2VyaWFsaXplJztcbmltcG9ydCB7IHVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2sgfSBmcm9tICdAZW1vdGlvbi91c2UtaW5zZXJ0aW9uLWVmZmVjdC13aXRoLWZhbGxiYWNrcyc7XG5cbnZhciBpc0RldmVsb3BtZW50ID0gZmFsc2U7XG5cbnZhciBFbW90aW9uQ2FjaGVDb250ZXh0ID0gLyogI19fUFVSRV9fICovUmVhY3QuY3JlYXRlQ29udGV4dCggLy8gd2UncmUgZG9pbmcgdGhpcyB0byBhdm9pZCBwcmVjb25zdHJ1Y3QncyBkZWFkIGNvZGUgZWxpbWluYXRpb24gaW4gdGhpcyBvbmUgY2FzZVxuLy8gYmVjYXVzZSB0aGlzIG1vZHVsZSBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIHRoZSBicm93c2VyIGFuZCBub2RlXG4vLyBidXQgaXQncyBhbHNvIHJlcXVpcmVkIGluIHJlYWN0IG5hdGl2ZSBhbmQgc2ltaWxhciBlbnZpcm9ubWVudHMgc29tZXRpbWVzXG4vLyBhbmQgd2UgY291bGQgaGF2ZSBhIHNwZWNpYWwgYnVpbGQganVzdCBmb3IgdGhhdFxuLy8gYnV0IHRoaXMgaXMgbXVjaCBlYXNpZXIgYW5kIHRoZSBuYXRpdmUgcGFja2FnZXNcbi8vIG1pZ2h0IHVzZSBhIGRpZmZlcmVudCB0aGVtZSBjb250ZXh0IGluIHRoZSBmdXR1cmUgYW55d2F5XG50eXBlb2YgSFRNTEVsZW1lbnQgIT09ICd1bmRlZmluZWQnID8gLyogI19fUFVSRV9fICovY3JlYXRlQ2FjaGUoe1xuICBrZXk6ICdjc3MnXG59KSA6IG51bGwpO1xuXG52YXIgQ2FjaGVQcm92aWRlciA9IEVtb3Rpb25DYWNoZUNvbnRleHQuUHJvdmlkZXI7XG52YXIgX191bnNhZmVfdXNlRW1vdGlvbkNhY2hlID0gZnVuY3Rpb24gdXNlRW1vdGlvbkNhY2hlKCkge1xuICByZXR1cm4gdXNlQ29udGV4dChFbW90aW9uQ2FjaGVDb250ZXh0KTtcbn07XG5cbnZhciB3aXRoRW1vdGlvbkNhY2hlID0gZnVuY3Rpb24gd2l0aEVtb3Rpb25DYWNoZShmdW5jKSB7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHJlZikge1xuICAgIC8vIHRoZSBjYWNoZSB3aWxsIG5ldmVyIGJlIG51bGwgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgY2FjaGUgPSB1c2VDb250ZXh0KEVtb3Rpb25DYWNoZUNvbnRleHQpO1xuICAgIHJldHVybiBmdW5jKHByb3BzLCBjYWNoZSwgcmVmKTtcbiAgfSk7XG59O1xuXG52YXIgVGhlbWVDb250ZXh0ID0gLyogI19fUFVSRV9fICovUmVhY3QuY3JlYXRlQ29udGV4dCh7fSk7XG5cbnZhciB1c2VUaGVtZSA9IGZ1bmN0aW9uIHVzZVRoZW1lKCkge1xuICByZXR1cm4gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xufTtcblxudmFyIGdldFRoZW1lID0gZnVuY3Rpb24gZ2V0VGhlbWUob3V0ZXJUaGVtZSwgdGhlbWUpIHtcbiAgaWYgKHR5cGVvZiB0aGVtZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBtZXJnZWRUaGVtZSA9IHRoZW1lKG91dGVyVGhlbWUpO1xuXG4gICAgcmV0dXJuIG1lcmdlZFRoZW1lO1xuICB9XG5cbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBvdXRlclRoZW1lLCB0aGVtZSk7XG59O1xuXG52YXIgY3JlYXRlQ2FjaGVXaXRoVGhlbWUgPSAvKiAjX19QVVJFX18gKi93ZWFrTWVtb2l6ZShmdW5jdGlvbiAob3V0ZXJUaGVtZSkge1xuICByZXR1cm4gd2Vha01lbW9pemUoZnVuY3Rpb24gKHRoZW1lKSB7XG4gICAgcmV0dXJuIGdldFRoZW1lKG91dGVyVGhlbWUsIHRoZW1lKTtcbiAgfSk7XG59KTtcbnZhciBUaGVtZVByb3ZpZGVyID0gZnVuY3Rpb24gVGhlbWVQcm92aWRlcihwcm9wcykge1xuICB2YXIgdGhlbWUgPSBSZWFjdC51c2VDb250ZXh0KFRoZW1lQ29udGV4dCk7XG5cbiAgaWYgKHByb3BzLnRoZW1lICE9PSB0aGVtZSkge1xuICAgIHRoZW1lID0gY3JlYXRlQ2FjaGVXaXRoVGhlbWUodGhlbWUpKHByb3BzLnRoZW1lKTtcbiAgfVxuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUaGVtZUNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogdGhlbWVcbiAgfSwgcHJvcHMuY2hpbGRyZW4pO1xufTtcbmZ1bmN0aW9uIHdpdGhUaGVtZShDb21wb25lbnQpIHtcbiAgdmFyIGNvbXBvbmVudE5hbWUgPSBDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgQ29tcG9uZW50Lm5hbWUgfHwgJ0NvbXBvbmVudCc7XG4gIHZhciBXaXRoVGhlbWUgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiByZW5kZXIocHJvcHMsIHJlZikge1xuICAgIHZhciB0aGVtZSA9IFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KTtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgICB0aGVtZTogdGhlbWUsXG4gICAgICByZWY6IHJlZlxuICAgIH0sIHByb3BzKSk7XG4gIH0pO1xuICBXaXRoVGhlbWUuZGlzcGxheU5hbWUgPSBcIldpdGhUaGVtZShcIiArIGNvbXBvbmVudE5hbWUgKyBcIilcIjtcbiAgcmV0dXJuIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKFdpdGhUaGVtZSwgQ29tcG9uZW50KTtcbn1cblxudmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5O1xuXG52YXIgdHlwZVByb3BOYW1lID0gJ19fRU1PVElPTl9UWVBFX1BMRUFTRV9ET19OT1RfVVNFX18nO1xudmFyIGNyZWF0ZUVtb3Rpb25Qcm9wcyA9IGZ1bmN0aW9uIGNyZWF0ZUVtb3Rpb25Qcm9wcyh0eXBlLCBwcm9wcykge1xuXG4gIHZhciBuZXdQcm9wcyA9IHt9O1xuXG4gIGZvciAodmFyIF9rZXkgaW4gcHJvcHMpIHtcbiAgICBpZiAoaGFzT3duLmNhbGwocHJvcHMsIF9rZXkpKSB7XG4gICAgICBuZXdQcm9wc1tfa2V5XSA9IHByb3BzW19rZXldO1xuICAgIH1cbiAgfVxuXG4gIG5ld1Byb3BzW3R5cGVQcm9wTmFtZV0gPSB0eXBlOyAvLyBSdW50aW1lIGxhYmVsaW5nIGlzIGFuIG9wdC1pbiBmZWF0dXJlIGJlY2F1c2U6XG5cbiAgcmV0dXJuIG5ld1Byb3BzO1xufTtcblxudmFyIEluc2VydGlvbiA9IGZ1bmN0aW9uIEluc2VydGlvbihfcmVmKSB7XG4gIHZhciBjYWNoZSA9IF9yZWYuY2FjaGUsXG4gICAgICBzZXJpYWxpemVkID0gX3JlZi5zZXJpYWxpemVkLFxuICAgICAgaXNTdHJpbmdUYWcgPSBfcmVmLmlzU3RyaW5nVGFnO1xuICByZWdpc3RlclN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpO1xuICB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gaW5zZXJ0U3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZyk7XG4gIH0pO1xuXG4gIHJldHVybiBudWxsO1xufTtcblxudmFyIEVtb3Rpb24gPSAvKiAjX19QVVJFX18gKi93aXRoRW1vdGlvbkNhY2hlKGZ1bmN0aW9uIChwcm9wcywgY2FjaGUsIHJlZikge1xuICB2YXIgY3NzUHJvcCA9IHByb3BzLmNzczsgLy8gc28gdGhhdCB1c2luZyBgY3NzYCBmcm9tIGBlbW90aW9uYCBhbmQgcGFzc2luZyB0aGUgcmVzdWx0IHRvIHRoZSBjc3MgcHJvcCB3b3Jrc1xuICAvLyBub3QgcGFzc2luZyB0aGUgcmVnaXN0ZXJlZCBjYWNoZSB0byBzZXJpYWxpemVTdHlsZXMgYmVjYXVzZSBpdCB3b3VsZFxuICAvLyBtYWtlIGNlcnRhaW4gYmFiZWwgb3B0aW1pc2F0aW9ucyBub3QgcG9zc2libGVcblxuICBpZiAodHlwZW9mIGNzc1Byb3AgPT09ICdzdHJpbmcnICYmIGNhY2hlLnJlZ2lzdGVyZWRbY3NzUHJvcF0gIT09IHVuZGVmaW5lZCkge1xuICAgIGNzc1Byb3AgPSBjYWNoZS5yZWdpc3RlcmVkW2Nzc1Byb3BdO1xuICB9XG5cbiAgdmFyIFdyYXBwZWRDb21wb25lbnQgPSBwcm9wc1t0eXBlUHJvcE5hbWVdO1xuICB2YXIgcmVnaXN0ZXJlZFN0eWxlcyA9IFtjc3NQcm9wXTtcbiAgdmFyIGNsYXNzTmFtZSA9ICcnO1xuXG4gIGlmICh0eXBlb2YgcHJvcHMuY2xhc3NOYW1lID09PSAnc3RyaW5nJykge1xuICAgIGNsYXNzTmFtZSA9IGdldFJlZ2lzdGVyZWRTdHlsZXMoY2FjaGUucmVnaXN0ZXJlZCwgcmVnaXN0ZXJlZFN0eWxlcywgcHJvcHMuY2xhc3NOYW1lKTtcbiAgfSBlbHNlIGlmIChwcm9wcy5jbGFzc05hbWUgIT0gbnVsbCkge1xuICAgIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSArIFwiIFwiO1xuICB9XG5cbiAgdmFyIHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVTdHlsZXMocmVnaXN0ZXJlZFN0eWxlcywgdW5kZWZpbmVkLCBSZWFjdC51c2VDb250ZXh0KFRoZW1lQ29udGV4dCkpO1xuXG4gIGNsYXNzTmFtZSArPSBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcbiAgdmFyIG5ld1Byb3BzID0ge307XG5cbiAgZm9yICh2YXIgX2tleTIgaW4gcHJvcHMpIHtcbiAgICBpZiAoaGFzT3duLmNhbGwocHJvcHMsIF9rZXkyKSAmJiBfa2V5MiAhPT0gJ2NzcycgJiYgX2tleTIgIT09IHR5cGVQcm9wTmFtZSAmJiAoIWlzRGV2ZWxvcG1lbnQgKSkge1xuICAgICAgbmV3UHJvcHNbX2tleTJdID0gcHJvcHNbX2tleTJdO1xuICAgIH1cbiAgfVxuXG4gIG5ld1Byb3BzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTtcblxuICBpZiAocmVmKSB7XG4gICAgbmV3UHJvcHMucmVmID0gcmVmO1xuICB9XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbnNlcnRpb24sIHtcbiAgICBjYWNoZTogY2FjaGUsXG4gICAgc2VyaWFsaXplZDogc2VyaWFsaXplZCxcbiAgICBpc1N0cmluZ1RhZzogdHlwZW9mIFdyYXBwZWRDb21wb25lbnQgPT09ICdzdHJpbmcnXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChXcmFwcGVkQ29tcG9uZW50LCBuZXdQcm9wcykpO1xufSk7XG5cbnZhciBFbW90aW9uJDEgPSBFbW90aW9uO1xuXG5leHBvcnQgeyBDYWNoZVByb3ZpZGVyIGFzIEMsIEVtb3Rpb24kMSBhcyBFLCBUaGVtZUNvbnRleHQgYXMgVCwgX191bnNhZmVfdXNlRW1vdGlvbkNhY2hlIGFzIF8sIFRoZW1lUHJvdmlkZXIgYXMgYSwgd2l0aFRoZW1lIGFzIGIsIGNyZWF0ZUVtb3Rpb25Qcm9wcyBhcyBjLCBoYXNPd24gYXMgaCwgaXNEZXZlbG9wbWVudCBhcyBpLCB1c2VUaGVtZSBhcyB1LCB3aXRoRW1vdGlvbkNhY2hlIGFzIHcgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4684\n")},4705:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   A: () => (/* binding */ debounce)\n/* harmony export */ });\n// Corresponds to 10 frames at 60 Hz.\n// A few bytes payload overhead when lodash/debounce is ~3 kB and debounce ~300 B.\nfunction debounce(func, wait = 166) {\n  let timeout;\n  function debounced(...args) {\n    const later = () => {\n      // @ts-ignore\n      func.apply(this, args);\n    };\n    clearTimeout(timeout);\n    timeout = setTimeout(later, wait);\n  }\n  debounced.clear = () => {\n    clearTimeout(timeout);\n  };\n  return debounced;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDcwNS5qcyIsIm1hcHBpbmdzIjoiOzs7QUFBQTtBQUNBO0FBQ2U7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS91dGlscy9lc20vZGVib3VuY2UvZGVib3VuY2UuanM/NDI4MiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3JyZXNwb25kcyB0byAxMCBmcmFtZXMgYXQgNjAgSHouXG4vLyBBIGZldyBieXRlcyBwYXlsb2FkIG92ZXJoZWFkIHdoZW4gbG9kYXNoL2RlYm91bmNlIGlzIH4zIGtCIGFuZCBkZWJvdW5jZSB+MzAwIEIuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZWJvdW5jZShmdW5jLCB3YWl0ID0gMTY2KSB7XG4gIGxldCB0aW1lb3V0O1xuICBmdW5jdGlvbiBkZWJvdW5jZWQoLi4uYXJncykge1xuICAgIGNvbnN0IGxhdGVyID0gKCkgPT4ge1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9O1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCk7XG4gIH1cbiAgZGVib3VuY2VkLmNsZWFyID0gKCkgPT4ge1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgfTtcbiAgcmV0dXJuIGRlYm91bmNlZDtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4705\n")},4737:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nif (true) {\n  /* unused reexport */ __webpack_require__(8989);\n} else // removed by dead control flow\n{}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDczNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixJQUFJLElBQXFDO0FBQ3pDLEVBQUUsK0NBQTREO0FBQzlELEVBQUUsS0FBSztBQUFBLEVBRU4iLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9ub2RlX21vZHVsZXMvcmVhY3QtaXMvaW5kZXguanM/ZDJmYyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4737\n")},4848:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nif (true) {\n  module.exports = __webpack_require__(1020);\n} else // removed by dead control flow\n{}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixJQUFJLElBQXFDO0FBQ3pDLEVBQUUsMENBQXFFO0FBQ3ZFLEVBQUUsS0FBSztBQUFBLEVBRU4iLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9yZWFjdC9qc3gtcnVudGltZS5qcz85Y2E1Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1qc3gtcnVudGltZS5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1qc3gtcnVudGltZS5kZXZlbG9wbWVudC5qcycpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4848\n")},4877:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   A: () => (/* binding */ ownerWindow)\n/* harmony export */ });\n/* harmony import */ var _ownerDocument__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2325);\n\nfunction ownerWindow(node) {\n  const doc = (0,_ownerDocument__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(node);\n  return doc.defaultView || window;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg3Ny5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQTZDO0FBQzlCO0FBQ2YsY0FBYyxtRUFBYTtBQUMzQjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS91dGlscy9lc20vb3duZXJXaW5kb3cvb3duZXJXaW5kb3cuanM/ZTFiNiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgb3duZXJEb2N1bWVudCBmcm9tICcuLi9vd25lckRvY3VtZW50JztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG93bmVyV2luZG93KG5vZGUpIHtcbiAgY29uc3QgZG9jID0gb3duZXJEb2N1bWVudChub2RlKTtcbiAgcmV0dXJuIGRvYy5kZWZhdWx0VmlldyB8fCB3aW5kb3c7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4877\n')},4893:module=>{eval('function _objectWithoutPropertiesLoose(r, e) {\n  if (null == r) return {};\n  var t = {};\n  for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n    if (-1 !== e.indexOf(n)) continue;\n    t[n] = r[n];\n  }\n  return t;\n}\nmodule.exports = _objectWithoutPropertiesLoose, module.exports.__esModule = true, module.exports["default"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg5My5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCx5QkFBeUIsU0FBUyx5QkFBeUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanM/Yzk3NSJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7XG4gIGlmIChudWxsID09IHIpIHJldHVybiB7fTtcbiAgdmFyIHQgPSB7fTtcbiAgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkge1xuICAgIGlmICgtMSAhPT0gZS5pbmRleE9mKG4pKSBjb250aW51ZTtcbiAgICB0W25dID0gcltuXTtcbiAgfVxuICByZXR1cm4gdDtcbn1cbm1vZHVsZS5leHBvcnRzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4893\n')},4994:module=>{eval('function _interopRequireDefault(e) {\n  return e && e.__esModule ? e : {\n    "default": e\n  };\n}\nmodule.exports = _interopRequireDefault, module.exports.__esModule = true, module.exports["default"] = module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDk5NC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLHlCQUF5QixTQUFTLHlCQUF5QiIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0LmpzP2I3YTYiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChlKSB7XG4gIHJldHVybiBlICYmIGUuX19lc01vZHVsZSA/IGUgOiB7XG4gICAgXCJkZWZhdWx0XCI6IGVcbiAgfTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdCwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4994\n')},5056:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval('\n\n/* istanbul ignore next  */\nfunction setAttributesWithoutAttributes(styleElement) {\n  var nonce =  true ? __webpack_require__.nc : 0;\n  if (nonce) {\n    styleElement.setAttribute("nonce", nonce);\n  }\n}\nmodule.exports = setAttributesWithoutAttributes;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTA1Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EsY0FBYyxLQUF3QyxHQUFHLHNCQUFpQixHQUFHLENBQUk7QUFDakY7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzLmpzP2RkY2UiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzKHN0eWxlRWxlbWVudCkge1xuICB2YXIgbm9uY2UgPSB0eXBlb2YgX193ZWJwYWNrX25vbmNlX18gIT09IFwidW5kZWZpbmVkXCIgPyBfX3dlYnBhY2tfbm9uY2VfXyA6IG51bGw7XG4gIGlmIChub25jZSkge1xuICAgIHN0eWxlRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJub25jZVwiLCBub25jZSk7XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5056\n')},5072:module=>{"use strict";eval('\n\nvar stylesInDOM = [];\nfunction getIndexByIdentifier(identifier) {\n  var result = -1;\n  for (var i = 0; i < stylesInDOM.length; i++) {\n    if (stylesInDOM[i].identifier === identifier) {\n      result = i;\n      break;\n    }\n  }\n  return result;\n}\nfunction modulesToDom(list, options) {\n  var idCountMap = {};\n  var identifiers = [];\n  for (var i = 0; i < list.length; i++) {\n    var item = list[i];\n    var id = options.base ? item[0] + options.base : item[0];\n    var count = idCountMap[id] || 0;\n    var identifier = "".concat(id, " ").concat(count);\n    idCountMap[id] = count + 1;\n    var indexByIdentifier = getIndexByIdentifier(identifier);\n    var obj = {\n      css: item[1],\n      media: item[2],\n      sourceMap: item[3],\n      supports: item[4],\n      layer: item[5]\n    };\n    if (indexByIdentifier !== -1) {\n      stylesInDOM[indexByIdentifier].references++;\n      stylesInDOM[indexByIdentifier].updater(obj);\n    } else {\n      var updater = addElementStyle(obj, options);\n      options.byIndex = i;\n      stylesInDOM.splice(i, 0, {\n        identifier: identifier,\n        updater: updater,\n        references: 1\n      });\n    }\n    identifiers.push(identifier);\n  }\n  return identifiers;\n}\nfunction addElementStyle(obj, options) {\n  var api = options.domAPI(options);\n  api.update(obj);\n  var updater = function updater(newObj) {\n    if (newObj) {\n      if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) {\n        return;\n      }\n      api.update(obj = newObj);\n    } else {\n      api.remove();\n    }\n  };\n  return updater;\n}\nmodule.exports = function (list, options) {\n  options = options || {};\n  list = list || [];\n  var lastIdentifiers = modulesToDom(list, options);\n  return function update(newList) {\n    newList = newList || [];\n    for (var i = 0; i < lastIdentifiers.length; i++) {\n      var identifier = lastIdentifiers[i];\n      var index = getIndexByIdentifier(identifier);\n      stylesInDOM[index].references--;\n    }\n    var newLastIdentifiers = modulesToDom(newList, options);\n    for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n      var _identifier = lastIdentifiers[_i];\n      var _index = getIndexByIdentifier(_identifier);\n      if (stylesInDOM[_index].references === 0) {\n        stylesInDOM[_index].updater();\n        stylesInDOM.splice(_index, 1);\n      }\n    }\n    lastIdentifiers = newLastIdentifiers;\n  };\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTA3Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQSxrQkFBa0Isd0JBQXdCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGlCQUFpQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLDRCQUE0QjtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLDZCQUE2QjtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzPzJkYmEiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBzdHlsZXNJbkRPTSA9IFtdO1xuZnVuY3Rpb24gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcikge1xuICB2YXIgcmVzdWx0ID0gLTE7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzSW5ET00ubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc3R5bGVzSW5ET01baV0uaWRlbnRpZmllciA9PT0gaWRlbnRpZmllcikge1xuICAgICAgcmVzdWx0ID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gbW9kdWxlc1RvRG9tKGxpc3QsIG9wdGlvbnMpIHtcbiAgdmFyIGlkQ291bnRNYXAgPSB7fTtcbiAgdmFyIGlkZW50aWZpZXJzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpdGVtID0gbGlzdFtpXTtcbiAgICB2YXIgaWQgPSBvcHRpb25zLmJhc2UgPyBpdGVtWzBdICsgb3B0aW9ucy5iYXNlIDogaXRlbVswXTtcbiAgICB2YXIgY291bnQgPSBpZENvdW50TWFwW2lkXSB8fCAwO1xuICAgIHZhciBpZGVudGlmaWVyID0gXCJcIi5jb25jYXQoaWQsIFwiIFwiKS5jb25jYXQoY291bnQpO1xuICAgIGlkQ291bnRNYXBbaWRdID0gY291bnQgKyAxO1xuICAgIHZhciBpbmRleEJ5SWRlbnRpZmllciA9IGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpO1xuICAgIHZhciBvYmogPSB7XG4gICAgICBjc3M6IGl0ZW1bMV0sXG4gICAgICBtZWRpYTogaXRlbVsyXSxcbiAgICAgIHNvdXJjZU1hcDogaXRlbVszXSxcbiAgICAgIHN1cHBvcnRzOiBpdGVtWzRdLFxuICAgICAgbGF5ZXI6IGl0ZW1bNV1cbiAgICB9O1xuICAgIGlmIChpbmRleEJ5SWRlbnRpZmllciAhPT0gLTEpIHtcbiAgICAgIHN0eWxlc0luRE9NW2luZGV4QnlJZGVudGlmaWVyXS5yZWZlcmVuY2VzKys7XG4gICAgICBzdHlsZXNJbkRPTVtpbmRleEJ5SWRlbnRpZmllcl0udXBkYXRlcihvYmopO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgdXBkYXRlciA9IGFkZEVsZW1lbnRTdHlsZShvYmosIG9wdGlvbnMpO1xuICAgICAgb3B0aW9ucy5ieUluZGV4ID0gaTtcbiAgICAgIHN0eWxlc0luRE9NLnNwbGljZShpLCAwLCB7XG4gICAgICAgIGlkZW50aWZpZXI6IGlkZW50aWZpZXIsXG4gICAgICAgIHVwZGF0ZXI6IHVwZGF0ZXIsXG4gICAgICAgIHJlZmVyZW5jZXM6IDFcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZGVudGlmaWVycy5wdXNoKGlkZW50aWZpZXIpO1xuICB9XG4gIHJldHVybiBpZGVudGlmaWVycztcbn1cbmZ1bmN0aW9uIGFkZEVsZW1lbnRTdHlsZShvYmosIG9wdGlvbnMpIHtcbiAgdmFyIGFwaSA9IG9wdGlvbnMuZG9tQVBJKG9wdGlvbnMpO1xuICBhcGkudXBkYXRlKG9iaik7XG4gIHZhciB1cGRhdGVyID0gZnVuY3Rpb24gdXBkYXRlcihuZXdPYmopIHtcbiAgICBpZiAobmV3T2JqKSB7XG4gICAgICBpZiAobmV3T2JqLmNzcyA9PT0gb2JqLmNzcyAmJiBuZXdPYmoubWVkaWEgPT09IG9iai5tZWRpYSAmJiBuZXdPYmouc291cmNlTWFwID09PSBvYmouc291cmNlTWFwICYmIG5ld09iai5zdXBwb3J0cyA9PT0gb2JqLnN1cHBvcnRzICYmIG5ld09iai5sYXllciA9PT0gb2JqLmxheWVyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGFwaS51cGRhdGUob2JqID0gbmV3T2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbW92ZSgpO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHVwZGF0ZXI7XG59XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChsaXN0LCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBsaXN0ID0gbGlzdCB8fCBbXTtcbiAgdmFyIGxhc3RJZGVudGlmaWVycyA9IG1vZHVsZXNUb0RvbShsaXN0LCBvcHRpb25zKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZShuZXdMaXN0KSB7XG4gICAgbmV3TGlzdCA9IG5ld0xpc3QgfHwgW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXN0SWRlbnRpZmllcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpZGVudGlmaWVyID0gbGFzdElkZW50aWZpZXJzW2ldO1xuICAgICAgdmFyIGluZGV4ID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcik7XG4gICAgICBzdHlsZXNJbkRPTVtpbmRleF0ucmVmZXJlbmNlcy0tO1xuICAgIH1cbiAgICB2YXIgbmV3TGFzdElkZW50aWZpZXJzID0gbW9kdWxlc1RvRG9tKG5ld0xpc3QsIG9wdGlvbnMpO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBsYXN0SWRlbnRpZmllcnMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgX2lkZW50aWZpZXIgPSBsYXN0SWRlbnRpZmllcnNbX2ldO1xuICAgICAgdmFyIF9pbmRleCA9IGdldEluZGV4QnlJZGVudGlmaWVyKF9pZGVudGlmaWVyKTtcbiAgICAgIGlmIChzdHlsZXNJbkRPTVtfaW5kZXhdLnJlZmVyZW5jZXMgPT09IDApIHtcbiAgICAgICAgc3R5bGVzSW5ET01bX2luZGV4XS51cGRhdGVyKCk7XG4gICAgICAgIHN0eWxlc0luRE9NLnNwbGljZShfaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH1cbiAgICBsYXN0SWRlbnRpZmllcnMgPSBuZXdMYXN0SWRlbnRpZmllcnM7XG4gIH07XG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5072\n')},5655:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n  A: () => (/* binding */ createCache)\n});\n\n;// ./node_modules/@emotion/sheet/dist/emotion-sheet.esm.js\nvar isDevelopment = false;\n\n/*\n\nBased off glamor's StyleSheet, thanks Sunil ❤️\n\nhigh performance StyleSheet for css-in-js systems\n\n- uses multiple style tags behind the scenes for millions of rules\n- uses `insertRule` for appending in production for *much* faster performance\n\n// usage\n\nimport { StyleSheet } from '@emotion/sheet'\n\nlet styleSheet = new StyleSheet({ key: '', container: document.head })\n\nstyleSheet.insert('#box { border: 1px solid red; }')\n- appends a css rule into the stylesheet\n\nstyleSheet.flush()\n- empties the stylesheet of all its contents\n\n*/\n\nfunction sheetForTag(tag) {\n  if (tag.sheet) {\n    return tag.sheet;\n  } // this weirdness brought to you by firefox\n\n  /* istanbul ignore next */\n\n\n  for (var i = 0; i < document.styleSheets.length; i++) {\n    if (document.styleSheets[i].ownerNode === tag) {\n      return document.styleSheets[i];\n    }\n  } // this function should always return with a value\n  // TS can't understand it though so we make it stop complaining here\n\n\n  return undefined;\n}\n\nfunction createStyleElement(options) {\n  var tag = document.createElement('style');\n  tag.setAttribute('data-emotion', options.key);\n\n  if (options.nonce !== undefined) {\n    tag.setAttribute('nonce', options.nonce);\n  }\n\n  tag.appendChild(document.createTextNode(''));\n  tag.setAttribute('data-s', '');\n  return tag;\n}\n\nvar StyleSheet = /*#__PURE__*/function () {\n  // Using Node instead of HTMLElement since container may be a ShadowRoot\n  function StyleSheet(options) {\n    var _this = this;\n\n    this._insertTag = function (tag) {\n      var before;\n\n      if (_this.tags.length === 0) {\n        if (_this.insertionPoint) {\n          before = _this.insertionPoint.nextSibling;\n        } else if (_this.prepend) {\n          before = _this.container.firstChild;\n        } else {\n          before = _this.before;\n        }\n      } else {\n        before = _this.tags[_this.tags.length - 1].nextSibling;\n      }\n\n      _this.container.insertBefore(tag, before);\n\n      _this.tags.push(tag);\n    };\n\n    this.isSpeedy = options.speedy === undefined ? !isDevelopment : options.speedy;\n    this.tags = [];\n    this.ctr = 0;\n    this.nonce = options.nonce; // key is the value of the data-emotion attribute, it's used to identify different sheets\n\n    this.key = options.key;\n    this.container = options.container;\n    this.prepend = options.prepend;\n    this.insertionPoint = options.insertionPoint;\n    this.before = null;\n  }\n\n  var _proto = StyleSheet.prototype;\n\n  _proto.hydrate = function hydrate(nodes) {\n    nodes.forEach(this._insertTag);\n  };\n\n  _proto.insert = function insert(rule) {\n    // the max length is how many rules we have per style tag, it's 65000 in speedy mode\n    // it's 1 in dev because we insert source maps that map a single rule to a location\n    // and you can only have one source map per style tag\n    if (this.ctr % (this.isSpeedy ? 65000 : 1) === 0) {\n      this._insertTag(createStyleElement(this));\n    }\n\n    var tag = this.tags[this.tags.length - 1];\n\n    if (this.isSpeedy) {\n      var sheet = sheetForTag(tag);\n\n      try {\n        // this is the ultrafast version, works across browsers\n        // the big drawback is that the css won't be editable in devtools\n        sheet.insertRule(rule, sheet.cssRules.length);\n      } catch (e) {\n      }\n    } else {\n      tag.appendChild(document.createTextNode(rule));\n    }\n\n    this.ctr++;\n  };\n\n  _proto.flush = function flush() {\n    this.tags.forEach(function (tag) {\n      var _tag$parentNode;\n\n      return (_tag$parentNode = tag.parentNode) == null ? void 0 : _tag$parentNode.removeChild(tag);\n    });\n    this.tags = [];\n    this.ctr = 0;\n  };\n\n  return StyleSheet;\n}();\n\n\n\n;// ./node_modules/stylis/src/Utility.js\n/**\n * @param {number}\n * @return {number}\n */\nvar abs = Math.abs\n\n/**\n * @param {number}\n * @return {string}\n */\nvar Utility_from = String.fromCharCode\n\n/**\n * @param {object}\n * @return {object}\n */\nvar Utility_assign = Object.assign\n\n/**\n * @param {string} value\n * @param {number} length\n * @return {number}\n */\nfunction hash (value, length) {\n\treturn Utility_charat(value, 0) ^ 45 ? (((((((length << 2) ^ Utility_charat(value, 0)) << 2) ^ Utility_charat(value, 1)) << 2) ^ Utility_charat(value, 2)) << 2) ^ Utility_charat(value, 3) : 0\n}\n\n/**\n * @param {string} value\n * @return {string}\n */\nfunction trim (value) {\n\treturn value.trim()\n}\n\n/**\n * @param {string} value\n * @param {RegExp} pattern\n * @return {string?}\n */\nfunction Utility_match (value, pattern) {\n\treturn (value = pattern.exec(value)) ? value[0] : value\n}\n\n/**\n * @param {string} value\n * @param {(string|RegExp)} pattern\n * @param {string} replacement\n * @return {string}\n */\nfunction Utility_replace (value, pattern, replacement) {\n\treturn value.replace(pattern, replacement)\n}\n\n/**\n * @param {string} value\n * @param {string} search\n * @return {number}\n */\nfunction indexof (value, search) {\n\treturn value.indexOf(search)\n}\n\n/**\n * @param {string} value\n * @param {number} index\n * @return {number}\n */\nfunction Utility_charat (value, index) {\n\treturn value.charCodeAt(index) | 0\n}\n\n/**\n * @param {string} value\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nfunction Utility_substr (value, begin, end) {\n\treturn value.slice(begin, end)\n}\n\n/**\n * @param {string} value\n * @return {number}\n */\nfunction Utility_strlen (value) {\n\treturn value.length\n}\n\n/**\n * @param {any[]} value\n * @return {number}\n */\nfunction Utility_sizeof (value) {\n\treturn value.length\n}\n\n/**\n * @param {any} value\n * @param {any[]} array\n * @return {any}\n */\nfunction Utility_append (value, array) {\n\treturn array.push(value), value\n}\n\n/**\n * @param {string[]} array\n * @param {function} callback\n * @return {string}\n */\nfunction Utility_combine (array, callback) {\n\treturn array.map(callback).join('')\n}\n\n;// ./node_modules/stylis/src/Tokenizer.js\n\n\nvar line = 1\nvar column = 1\nvar Tokenizer_length = 0\nvar position = 0\nvar character = 0\nvar characters = ''\n\n/**\n * @param {string} value\n * @param {object | null} root\n * @param {object | null} parent\n * @param {string} type\n * @param {string[] | string} props\n * @param {object[] | string} children\n * @param {number} length\n */\nfunction node (value, root, parent, type, props, children, length) {\n\treturn {value: value, root: root, parent: parent, type: type, props: props, children: children, line: line, column: column, length: length, return: ''}\n}\n\n/**\n * @param {object} root\n * @param {object} props\n * @return {object}\n */\nfunction Tokenizer_copy (root, props) {\n\treturn Utility_assign(node('', null, null, '', null, null, 0), root, {length: -root.length}, props)\n}\n\n/**\n * @return {number}\n */\nfunction Tokenizer_char () {\n\treturn character\n}\n\n/**\n * @return {number}\n */\nfunction prev () {\n\tcharacter = position > 0 ? Utility_charat(characters, --position) : 0\n\n\tif (column--, character === 10)\n\t\tcolumn = 1, line--\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nfunction next () {\n\tcharacter = position < Tokenizer_length ? Utility_charat(characters, position++) : 0\n\n\tif (column++, character === 10)\n\t\tcolumn = 1, line++\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nfunction peek () {\n\treturn Utility_charat(characters, position)\n}\n\n/**\n * @return {number}\n */\nfunction caret () {\n\treturn position\n}\n\n/**\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nfunction slice (begin, end) {\n\treturn Utility_substr(characters, begin, end)\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nfunction token (type) {\n\tswitch (type) {\n\t\t// \\0 \\t \\n \\r \\s whitespace token\n\t\tcase 0: case 9: case 10: case 13: case 32:\n\t\t\treturn 5\n\t\t// ! + , / > @ ~ isolate token\n\t\tcase 33: case 43: case 44: case 47: case 62: case 64: case 126:\n\t\t// ; { } breakpoint token\n\t\tcase 59: case 123: case 125:\n\t\t\treturn 4\n\t\t// : accompanied token\n\t\tcase 58:\n\t\t\treturn 3\n\t\t// \" ' ( [ opening delimit token\n\t\tcase 34: case 39: case 40: case 91:\n\t\t\treturn 2\n\t\t// ) ] closing delimit token\n\t\tcase 41: case 93:\n\t\t\treturn 1\n\t}\n\n\treturn 0\n}\n\n/**\n * @param {string} value\n * @return {any[]}\n */\nfunction alloc (value) {\n\treturn line = column = 1, Tokenizer_length = Utility_strlen(characters = value), position = 0, []\n}\n\n/**\n * @param {any} value\n * @return {any}\n */\nfunction dealloc (value) {\n\treturn characters = '', value\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nfunction delimit (type) {\n\treturn trim(slice(position - 1, delimiter(type === 91 ? type + 2 : type === 40 ? type + 1 : type)))\n}\n\n/**\n * @param {string} value\n * @return {string[]}\n */\nfunction Tokenizer_tokenize (value) {\n\treturn dealloc(tokenizer(alloc(value)))\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nfunction whitespace (type) {\n\twhile (character = peek())\n\t\tif (character < 33)\n\t\t\tnext()\n\t\telse\n\t\t\tbreak\n\n\treturn token(type) > 2 || token(character) > 3 ? '' : ' '\n}\n\n/**\n * @param {string[]} children\n * @return {string[]}\n */\nfunction tokenizer (children) {\n\twhile (next())\n\t\tswitch (token(character)) {\n\t\t\tcase 0: append(identifier(position - 1), children)\n\t\t\t\tbreak\n\t\t\tcase 2: append(delimit(character), children)\n\t\t\t\tbreak\n\t\t\tdefault: append(from(character), children)\n\t\t}\n\n\treturn children\n}\n\n/**\n * @param {number} index\n * @param {number} count\n * @return {string}\n */\nfunction escaping (index, count) {\n\twhile (--count && next())\n\t\t// not 0-9 A-F a-f\n\t\tif (character < 48 || character > 102 || (character > 57 && character < 65) || (character > 70 && character < 97))\n\t\t\tbreak\n\n\treturn slice(index, caret() + (count < 6 && peek() == 32 && next() == 32))\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nfunction delimiter (type) {\n\twhile (next())\n\t\tswitch (character) {\n\t\t\t// ] ) \" '\n\t\t\tcase type:\n\t\t\t\treturn position\n\t\t\t// \" '\n\t\t\tcase 34: case 39:\n\t\t\t\tif (type !== 34 && type !== 39)\n\t\t\t\t\tdelimiter(character)\n\t\t\t\tbreak\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (type === 41)\n\t\t\t\t\tdelimiter(type)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tnext()\n\t\t\t\tbreak\n\t\t}\n\n\treturn position\n}\n\n/**\n * @param {number} type\n * @param {number} index\n * @return {number}\n */\nfunction commenter (type, index) {\n\twhile (next())\n\t\t// //\n\t\tif (type + character === 47 + 10)\n\t\t\tbreak\n\t\t// /*\n\t\telse if (type + character === 42 + 42 && peek() === 47)\n\t\t\tbreak\n\n\treturn '/*' + slice(index, position - 1) + '*' + Utility_from(type === 47 ? type : next())\n}\n\n/**\n * @param {number} index\n * @return {string}\n */\nfunction identifier (index) {\n\twhile (!token(peek()))\n\t\tnext()\n\n\treturn slice(index, position)\n}\n\n;// ./node_modules/stylis/src/Enum.js\nvar Enum_MS = '-ms-'\nvar Enum_MOZ = '-moz-'\nvar Enum_WEBKIT = '-webkit-'\n\nvar COMMENT = 'comm'\nvar Enum_RULESET = 'rule'\nvar Enum_DECLARATION = 'decl'\n\nvar PAGE = '@page'\nvar MEDIA = '@media'\nvar IMPORT = '@import'\nvar CHARSET = '@charset'\nvar VIEWPORT = '@viewport'\nvar SUPPORTS = '@supports'\nvar DOCUMENT = '@document'\nvar NAMESPACE = '@namespace'\nvar Enum_KEYFRAMES = '@keyframes'\nvar FONT_FACE = '@font-face'\nvar COUNTER_STYLE = '@counter-style'\nvar FONT_FEATURE_VALUES = '@font-feature-values'\nvar LAYER = '@layer'\n\n;// ./node_modules/stylis/src/Serializer.js\n\n\n\n/**\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nfunction Serializer_serialize (children, callback) {\n\tvar output = ''\n\tvar length = Utility_sizeof(children)\n\n\tfor (var i = 0; i < length; i++)\n\t\toutput += callback(children[i], i, children, callback) || ''\n\n\treturn output\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nfunction stringify (element, index, children, callback) {\n\tswitch (element.type) {\n\t\tcase LAYER: if (element.children.length) break\n\t\tcase IMPORT: case Enum_DECLARATION: return element.return = element.return || element.value\n\t\tcase COMMENT: return ''\n\t\tcase Enum_KEYFRAMES: return element.return = element.value + '{' + Serializer_serialize(element.children, callback) + '}'\n\t\tcase Enum_RULESET: element.value = element.props.join(',')\n\t}\n\n\treturn Utility_strlen(children = Serializer_serialize(element.children, callback)) ? element.return = element.value + '{' + children + '}' : ''\n}\n\n;// ./node_modules/stylis/src/Middleware.js\n\n\n\n\n\n\n/**\n * @param {function[]} collection\n * @return {function}\n */\nfunction middleware (collection) {\n\tvar length = Utility_sizeof(collection)\n\n\treturn function (element, index, children, callback) {\n\t\tvar output = ''\n\n\t\tfor (var i = 0; i < length; i++)\n\t\t\toutput += collection[i](element, index, children, callback) || ''\n\n\t\treturn output\n\t}\n}\n\n/**\n * @param {function} callback\n * @return {function}\n */\nfunction rulesheet (callback) {\n\treturn function (element) {\n\t\tif (!element.root)\n\t\t\tif (element = element.return)\n\t\t\t\tcallback(element)\n\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n */\nfunction prefixer (element, index, children, callback) {\n\tif (element.length > -1)\n\t\tif (!element.return)\n\t\t\tswitch (element.type) {\n\t\t\t\tcase DECLARATION: element.return = prefix(element.value, element.length, children)\n\t\t\t\t\treturn\n\t\t\t\tcase KEYFRAMES:\n\t\t\t\t\treturn serialize([copy(element, {value: replace(element.value, '@', '@' + WEBKIT)})], callback)\n\t\t\t\tcase RULESET:\n\t\t\t\t\tif (element.length)\n\t\t\t\t\t\treturn combine(element.props, function (value) {\n\t\t\t\t\t\t\tswitch (match(value, /(::plac\\w+|:read-\\w+)/)) {\n\t\t\t\t\t\t\t\t// :read-(only|write)\n\t\t\t\t\t\t\t\tcase ':read-only': case ':read-write':\n\t\t\t\t\t\t\t\t\treturn serialize([copy(element, {props: [replace(value, /:(read-\\w+)/, ':' + MOZ + '$1')]})], callback)\n\t\t\t\t\t\t\t\t// :placeholder\n\t\t\t\t\t\t\t\tcase '::placeholder':\n\t\t\t\t\t\t\t\t\treturn serialize([\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, ':' + WEBKIT + 'input-$1')]}),\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, ':' + MOZ + '$1')]}),\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, MS + 'input-$1')]})\n\t\t\t\t\t\t\t\t\t], callback)\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn ''\n\t\t\t\t\t\t})\n\t\t\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n */\nfunction namespace (element) {\n\tswitch (element.type) {\n\t\tcase RULESET:\n\t\t\telement.props = element.props.map(function (value) {\n\t\t\t\treturn combine(tokenize(value), function (value, index, children) {\n\t\t\t\t\tswitch (charat(value, 0)) {\n\t\t\t\t\t\t// \\f\n\t\t\t\t\t\tcase 12:\n\t\t\t\t\t\t\treturn substr(value, 1, strlen(value))\n\t\t\t\t\t\t// \\0 ( + > ~\n\t\t\t\t\t\tcase 0: case 40: case 43: case 62: case 126:\n\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t// :\n\t\t\t\t\t\tcase 58:\n\t\t\t\t\t\t\tif (children[++index] === 'global')\n\t\t\t\t\t\t\t\tchildren[index] = '', children[++index] = '\\f' + substr(children[index], index = 1, -1)\n\t\t\t\t\t\t// \\s\n\t\t\t\t\t\tcase 32:\n\t\t\t\t\t\t\treturn index === 1 ? '' : value\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tswitch (index) {\n\t\t\t\t\t\t\t\tcase 0: element = value\n\t\t\t\t\t\t\t\t\treturn sizeof(children) > 1 ? '' : value\n\t\t\t\t\t\t\t\tcase index = sizeof(children) - 1: case 2:\n\t\t\t\t\t\t\t\t\treturn index === 2 ? value + element + element : value + element\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\t}\n}\n\n;// ./node_modules/stylis/src/Parser.js\n\n\n\n\n/**\n * @param {string} value\n * @return {object[]}\n */\nfunction compile (value) {\n\treturn dealloc(parse('', null, null, null, [''], value = alloc(value), 0, [0], value))\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {string[]} rule\n * @param {string[]} rules\n * @param {string[]} rulesets\n * @param {number[]} pseudo\n * @param {number[]} points\n * @param {string[]} declarations\n * @return {object}\n */\nfunction parse (value, root, parent, rule, rules, rulesets, pseudo, points, declarations) {\n\tvar index = 0\n\tvar offset = 0\n\tvar length = pseudo\n\tvar atrule = 0\n\tvar property = 0\n\tvar previous = 0\n\tvar variable = 1\n\tvar scanning = 1\n\tvar ampersand = 1\n\tvar character = 0\n\tvar type = ''\n\tvar props = rules\n\tvar children = rulesets\n\tvar reference = rule\n\tvar characters = type\n\n\twhile (scanning)\n\t\tswitch (previous = character, character = next()) {\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (previous != 108 && Utility_charat(characters, length - 1) == 58) {\n\t\t\t\t\tif (indexof(characters += Utility_replace(delimit(character), '&', '&\\f'), '&\\f') != -1)\n\t\t\t\t\t\tampersand = -1\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t// \" ' [\n\t\t\tcase 34: case 39: case 91:\n\t\t\t\tcharacters += delimit(character)\n\t\t\t\tbreak\n\t\t\t// \\t \\n \\r \\s\n\t\t\tcase 9: case 10: case 13: case 32:\n\t\t\t\tcharacters += whitespace(previous)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tcharacters += escaping(caret() - 1, 7)\n\t\t\t\tcontinue\n\t\t\t// /\n\t\t\tcase 47:\n\t\t\t\tswitch (peek()) {\n\t\t\t\t\tcase 42: case 47:\n\t\t\t\t\t\tUtility_append(comment(commenter(next(), caret()), root, parent), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcharacters += '/'\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t// {\n\t\t\tcase 123 * variable:\n\t\t\t\tpoints[index++] = Utility_strlen(characters) * ampersand\n\t\t\t// } ; \\0\n\t\t\tcase 125 * variable: case 59: case 0:\n\t\t\t\tswitch (character) {\n\t\t\t\t\t// \\0 }\n\t\t\t\t\tcase 0: case 125: scanning = 0\n\t\t\t\t\t// ;\n\t\t\t\t\tcase 59 + offset: if (ampersand == -1) characters = Utility_replace(characters, /\\f/g, '')\n\t\t\t\t\t\tif (property > 0 && (Utility_strlen(characters) - length))\n\t\t\t\t\t\t\tUtility_append(property > 32 ? declaration(characters + ';', rule, parent, length - 1) : declaration(Utility_replace(characters, ' ', '') + ';', rule, parent, length - 2), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @ ;\n\t\t\t\t\tcase 59: characters += ';'\n\t\t\t\t\t// { rule/at-rule\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tUtility_append(reference = ruleset(characters, root, parent, index, offset, rules, points, type, props = [], children = [], length), rulesets)\n\n\t\t\t\t\t\tif (character === 123)\n\t\t\t\t\t\t\tif (offset === 0)\n\t\t\t\t\t\t\t\tparse(characters, root, reference, reference, props, rulesets, length, points, children)\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tswitch (atrule === 99 && Utility_charat(characters, 3) === 110 ? 100 : atrule) {\n\t\t\t\t\t\t\t\t\t// d l m s\n\t\t\t\t\t\t\t\t\tcase 100: case 108: case 109: case 115:\n\t\t\t\t\t\t\t\t\t\tparse(value, reference, reference, rule && Utility_append(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length), children), rules, children, length, points, rule ? props : children)\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tparse(characters, reference, reference, reference, [''], children, 0, points, children)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tindex = offset = property = 0, variable = ampersand = 1, type = characters = '', length = pseudo\n\t\t\t\tbreak\n\t\t\t// :\n\t\t\tcase 58:\n\t\t\t\tlength = 1 + Utility_strlen(characters), property = previous\n\t\t\tdefault:\n\t\t\t\tif (variable < 1)\n\t\t\t\t\tif (character == 123)\n\t\t\t\t\t\t--variable\n\t\t\t\t\telse if (character == 125 && variable++ == 0 && prev() == 125)\n\t\t\t\t\t\tcontinue\n\n\t\t\t\tswitch (characters += Utility_from(character), character * variable) {\n\t\t\t\t\t// &\n\t\t\t\t\tcase 38:\n\t\t\t\t\t\tampersand = offset > 0 ? 1 : (characters += '\\f', -1)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// ,\n\t\t\t\t\tcase 44:\n\t\t\t\t\t\tpoints[index++] = (Utility_strlen(characters) - 1) * ampersand, ampersand = 1\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @\n\t\t\t\t\tcase 64:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (peek() === 45)\n\t\t\t\t\t\t\tcharacters += delimit(next())\n\n\t\t\t\t\t\tatrule = peek(), offset = length = Utility_strlen(type = characters += identifier(caret())), character++\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// -\n\t\t\t\t\tcase 45:\n\t\t\t\t\t\tif (previous === 45 && Utility_strlen(characters) == 2)\n\t\t\t\t\t\t\tvariable = 0\n\t\t\t\t}\n\t\t}\n\n\treturn rulesets\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} index\n * @param {number} offset\n * @param {string[]} rules\n * @param {number[]} points\n * @param {string} type\n * @param {string[]} props\n * @param {string[]} children\n * @param {number} length\n * @return {object}\n */\nfunction ruleset (value, root, parent, index, offset, rules, points, type, props, children, length) {\n\tvar post = offset - 1\n\tvar rule = offset === 0 ? rules : ['']\n\tvar size = Utility_sizeof(rule)\n\n\tfor (var i = 0, j = 0, k = 0; i < index; ++i)\n\t\tfor (var x = 0, y = Utility_substr(value, post + 1, post = abs(j = points[i])), z = value; x < size; ++x)\n\t\t\tif (z = trim(j > 0 ? rule[x] + ' ' + y : Utility_replace(y, /&\\f/g, rule[x])))\n\t\t\t\tprops[k++] = z\n\n\treturn node(value, root, parent, offset === 0 ? Enum_RULESET : type, props, children, length)\n}\n\n/**\n * @param {number} value\n * @param {object} root\n * @param {object?} parent\n * @return {object}\n */\nfunction comment (value, root, parent) {\n\treturn node(value, root, parent, COMMENT, Utility_from(Tokenizer_char()), Utility_substr(value, 2, -2), 0)\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} length\n * @return {object}\n */\nfunction declaration (value, root, parent, length) {\n\treturn node(value, root, parent, Enum_DECLARATION, Utility_substr(value, 0, length), Utility_substr(value, length + 1, -1), length)\n}\n\n;// ./node_modules/@emotion/cache/dist/emotion-cache.browser.esm.js\n\n\n\n\n\nvar identifierWithPointTracking = function identifierWithPointTracking(begin, points, index) {\n  var previous = 0;\n  var character = 0;\n\n  while (true) {\n    previous = character;\n    character = peek(); // &\\f\n\n    if (previous === 38 && character === 12) {\n      points[index] = 1;\n    }\n\n    if (token(character)) {\n      break;\n    }\n\n    next();\n  }\n\n  return slice(begin, position);\n};\n\nvar toRules = function toRules(parsed, points) {\n  // pretend we've started with a comma\n  var index = -1;\n  var character = 44;\n\n  do {\n    switch (token(character)) {\n      case 0:\n        // &\\f\n        if (character === 38 && peek() === 12) {\n          // this is not 100% correct, we don't account for literal sequences here - like for example quoted strings\n          // stylis inserts \\f after & to know when & where it should replace this sequence with the context selector\n          // and when it should just concatenate the outer and inner selectors\n          // it's very unlikely for this sequence to actually appear in a different context, so we just leverage this fact here\n          points[index] = 1;\n        }\n\n        parsed[index] += identifierWithPointTracking(position - 1, points, index);\n        break;\n\n      case 2:\n        parsed[index] += delimit(character);\n        break;\n\n      case 4:\n        // comma\n        if (character === 44) {\n          // colon\n          parsed[++index] = peek() === 58 ? '&\\f' : '';\n          points[index] = parsed[index].length;\n          break;\n        }\n\n      // fallthrough\n\n      default:\n        parsed[index] += Utility_from(character);\n    }\n  } while (character = next());\n\n  return parsed;\n};\n\nvar getRules = function getRules(value, points) {\n  return dealloc(toRules(alloc(value), points));\n}; // WeakSet would be more appropriate, but only WeakMap is supported in IE11\n\n\nvar fixedElements = /* #__PURE__ */new WeakMap();\nvar compat = function compat(element) {\n  if (element.type !== 'rule' || !element.parent || // positive .length indicates that this rule contains pseudo\n  // negative .length indicates that this rule has been already prefixed\n  element.length < 1) {\n    return;\n  }\n\n  var value = element.value;\n  var parent = element.parent;\n  var isImplicitRule = element.column === parent.column && element.line === parent.line;\n\n  while (parent.type !== 'rule') {\n    parent = parent.parent;\n    if (!parent) return;\n  } // short-circuit for the simplest case\n\n\n  if (element.props.length === 1 && value.charCodeAt(0) !== 58\n  /* colon */\n  && !fixedElements.get(parent)) {\n    return;\n  } // if this is an implicitly inserted rule (the one eagerly inserted at the each new nested level)\n  // then the props has already been manipulated beforehand as they that array is shared between it and its \"rule parent\"\n\n\n  if (isImplicitRule) {\n    return;\n  }\n\n  fixedElements.set(element, true);\n  var points = [];\n  var rules = getRules(value, points);\n  var parentRules = parent.props;\n\n  for (var i = 0, k = 0; i < rules.length; i++) {\n    for (var j = 0; j < parentRules.length; j++, k++) {\n      element.props[k] = points[i] ? rules[i].replace(/&\\f/g, parentRules[j]) : parentRules[j] + \" \" + rules[i];\n    }\n  }\n};\nvar removeLabel = function removeLabel(element) {\n  if (element.type === 'decl') {\n    var value = element.value;\n\n    if ( // charcode for l\n    value.charCodeAt(0) === 108 && // charcode for b\n    value.charCodeAt(2) === 98) {\n      // this ignores label\n      element[\"return\"] = '';\n      element.value = '';\n    }\n  }\n};\n\n/* eslint-disable no-fallthrough */\n\nfunction emotion_cache_browser_esm_prefix(value, length) {\n  switch (hash(value, length)) {\n    // color-adjust\n    case 5103:\n      return Enum_WEBKIT + 'print-' + value + value;\n    // animation, animation-(delay|direction|duration|fill-mode|iteration-count|name|play-state|timing-function)\n\n    case 5737:\n    case 4201:\n    case 3177:\n    case 3433:\n    case 1641:\n    case 4457:\n    case 2921: // text-decoration, filter, clip-path, backface-visibility, column, box-decoration-break\n\n    case 5572:\n    case 6356:\n    case 5844:\n    case 3191:\n    case 6645:\n    case 3005: // mask, mask-image, mask-(mode|clip|size), mask-(repeat|origin), mask-position, mask-composite,\n\n    case 6391:\n    case 5879:\n    case 5623:\n    case 6135:\n    case 4599:\n    case 4855: // background-clip, columns, column-(count|fill|gap|rule|rule-color|rule-style|rule-width|span|width)\n\n    case 4215:\n    case 6389:\n    case 5109:\n    case 5365:\n    case 5621:\n    case 3829:\n      return Enum_WEBKIT + value + value;\n    // appearance, user-select, transform, hyphens, text-size-adjust\n\n    case 5349:\n    case 4246:\n    case 4810:\n    case 6968:\n    case 2756:\n      return Enum_WEBKIT + value + Enum_MOZ + value + Enum_MS + value + value;\n    // flex, flex-direction\n\n    case 6828:\n    case 4268:\n      return Enum_WEBKIT + value + Enum_MS + value + value;\n    // order\n\n    case 6165:\n      return Enum_WEBKIT + value + Enum_MS + 'flex-' + value + value;\n    // align-items\n\n    case 5187:\n      return Enum_WEBKIT + value + Utility_replace(value, /(\\w+).+(:[^]+)/, Enum_WEBKIT + 'box-$1$2' + Enum_MS + 'flex-$1$2') + value;\n    // align-self\n\n    case 5443:\n      return Enum_WEBKIT + value + Enum_MS + 'flex-item-' + Utility_replace(value, /flex-|-self/, '') + value;\n    // align-content\n\n    case 4675:\n      return Enum_WEBKIT + value + Enum_MS + 'flex-line-pack' + Utility_replace(value, /align-content|flex-|-self/, '') + value;\n    // flex-shrink\n\n    case 5548:\n      return Enum_WEBKIT + value + Enum_MS + Utility_replace(value, 'shrink', 'negative') + value;\n    // flex-basis\n\n    case 5292:\n      return Enum_WEBKIT + value + Enum_MS + Utility_replace(value, 'basis', 'preferred-size') + value;\n    // flex-grow\n\n    case 6060:\n      return Enum_WEBKIT + 'box-' + Utility_replace(value, '-grow', '') + Enum_WEBKIT + value + Enum_MS + Utility_replace(value, 'grow', 'positive') + value;\n    // transition\n\n    case 4554:\n      return Enum_WEBKIT + Utility_replace(value, /([^-])(transform)/g, '$1' + Enum_WEBKIT + '$2') + value;\n    // cursor\n\n    case 6187:\n      return Utility_replace(Utility_replace(Utility_replace(value, /(zoom-|grab)/, Enum_WEBKIT + '$1'), /(image-set)/, Enum_WEBKIT + '$1'), value, '') + value;\n    // background, background-image\n\n    case 5495:\n    case 3959:\n      return Utility_replace(value, /(image-set\\([^]*)/, Enum_WEBKIT + '$1' + '$`$1');\n    // justify-content\n\n    case 4968:\n      return Utility_replace(Utility_replace(value, /(.+:)(flex-)?(.*)/, Enum_WEBKIT + 'box-pack:$3' + Enum_MS + 'flex-pack:$3'), /s.+-b[^;]+/, 'justify') + Enum_WEBKIT + value + value;\n    // (margin|padding)-inline-(start|end)\n\n    case 4095:\n    case 3583:\n    case 4068:\n    case 2532:\n      return Utility_replace(value, /(.+)-inline(.+)/, Enum_WEBKIT + '$1$2') + value;\n    // (min|max)?(width|height|inline-size|block-size)\n\n    case 8116:\n    case 7059:\n    case 5753:\n    case 5535:\n    case 5445:\n    case 5701:\n    case 4933:\n    case 4677:\n    case 5533:\n    case 5789:\n    case 5021:\n    case 4765:\n      // stretch, max-content, min-content, fill-available\n      if (Utility_strlen(value) - 1 - length > 6) switch (Utility_charat(value, length + 1)) {\n        // (m)ax-content, (m)in-content\n        case 109:\n          // -\n          if (Utility_charat(value, length + 4) !== 45) break;\n        // (f)ill-available, (f)it-content\n\n        case 102:\n          return Utility_replace(value, /(.+:)(.+)-([^]+)/, '$1' + Enum_WEBKIT + '$2-$3' + '$1' + Enum_MOZ + (Utility_charat(value, length + 3) == 108 ? '$3' : '$2-$3')) + value;\n        // (s)tretch\n\n        case 115:\n          return ~indexof(value, 'stretch') ? emotion_cache_browser_esm_prefix(Utility_replace(value, 'stretch', 'fill-available'), length) + value : value;\n      }\n      break;\n    // position: sticky\n\n    case 4949:\n      // (s)ticky?\n      if (Utility_charat(value, length + 1) !== 115) break;\n    // display: (flex|inline-flex)\n\n    case 6444:\n      switch (Utility_charat(value, Utility_strlen(value) - 3 - (~indexof(value, '!important') && 10))) {\n        // stic(k)y\n        case 107:\n          return Utility_replace(value, ':', ':' + Enum_WEBKIT) + value;\n        // (inline-)?fl(e)x\n\n        case 101:\n          return Utility_replace(value, /(.+:)([^;!]+)(;|!.+)?/, '$1' + Enum_WEBKIT + (Utility_charat(value, 14) === 45 ? 'inline-' : '') + 'box$3' + '$1' + Enum_WEBKIT + '$2$3' + '$1' + Enum_MS + '$2box$3') + value;\n      }\n\n      break;\n    // writing-mode\n\n    case 5936:\n      switch (Utility_charat(value, length + 11)) {\n        // vertical-l(r)\n        case 114:\n          return Enum_WEBKIT + value + Enum_MS + Utility_replace(value, /[svh]\\w+-[tblr]{2}/, 'tb') + value;\n        // vertical-r(l)\n\n        case 108:\n          return Enum_WEBKIT + value + Enum_MS + Utility_replace(value, /[svh]\\w+-[tblr]{2}/, 'tb-rl') + value;\n        // horizontal(-)tb\n\n        case 45:\n          return Enum_WEBKIT + value + Enum_MS + Utility_replace(value, /[svh]\\w+-[tblr]{2}/, 'lr') + value;\n      }\n\n      return Enum_WEBKIT + value + Enum_MS + value + value;\n  }\n\n  return value;\n}\n\nvar emotion_cache_browser_esm_prefixer = function prefixer(element, index, children, callback) {\n  if (element.length > -1) if (!element[\"return\"]) switch (element.type) {\n    case Enum_DECLARATION:\n      element[\"return\"] = emotion_cache_browser_esm_prefix(element.value, element.length);\n      break;\n\n    case Enum_KEYFRAMES:\n      return Serializer_serialize([Tokenizer_copy(element, {\n        value: Utility_replace(element.value, '@', '@' + Enum_WEBKIT)\n      })], callback);\n\n    case Enum_RULESET:\n      if (element.length) return Utility_combine(element.props, function (value) {\n        switch (Utility_match(value, /(::plac\\w+|:read-\\w+)/)) {\n          // :read-(only|write)\n          case ':read-only':\n          case ':read-write':\n            return Serializer_serialize([Tokenizer_copy(element, {\n              props: [Utility_replace(value, /:(read-\\w+)/, ':' + Enum_MOZ + '$1')]\n            })], callback);\n          // :placeholder\n\n          case '::placeholder':\n            return Serializer_serialize([Tokenizer_copy(element, {\n              props: [Utility_replace(value, /:(plac\\w+)/, ':' + Enum_WEBKIT + 'input-$1')]\n            }), Tokenizer_copy(element, {\n              props: [Utility_replace(value, /:(plac\\w+)/, ':' + Enum_MOZ + '$1')]\n            }), Tokenizer_copy(element, {\n              props: [Utility_replace(value, /:(plac\\w+)/, Enum_MS + 'input-$1')]\n            })], callback);\n        }\n\n        return '';\n      });\n  }\n};\n\nvar defaultStylisPlugins = [emotion_cache_browser_esm_prefixer];\n\nvar createCache = function createCache(options) {\n  var key = options.key;\n\n  if (key === 'css') {\n    var ssrStyles = document.querySelectorAll(\"style[data-emotion]:not([data-s])\"); // get SSRed styles out of the way of React's hydration\n    // document.head is a safe place to move them to(though note document.head is not necessarily the last place they will be)\n    // note this very very intentionally targets all style elements regardless of the key to ensure\n    // that creating a cache works inside of render of a React component\n\n    Array.prototype.forEach.call(ssrStyles, function (node) {\n      // we want to only move elements which have a space in the data-emotion attribute value\n      // because that indicates that it is an Emotion 11 server-side rendered style elements\n      // while we will already ignore Emotion 11 client-side inserted styles because of the :not([data-s]) part in the selector\n      // Emotion 10 client-side inserted styles did not have data-s (but importantly did not have a space in their data-emotion attributes)\n      // so checking for the space ensures that loading Emotion 11 after Emotion 10 has inserted some styles\n      // will not result in the Emotion 10 styles being destroyed\n      var dataEmotionAttribute = node.getAttribute('data-emotion');\n\n      if (dataEmotionAttribute.indexOf(' ') === -1) {\n        return;\n      }\n\n      document.head.appendChild(node);\n      node.setAttribute('data-s', '');\n    });\n  }\n\n  var stylisPlugins = options.stylisPlugins || defaultStylisPlugins;\n\n  var inserted = {};\n  var container;\n  var nodesToHydrate = [];\n\n  {\n    container = options.container || document.head;\n    Array.prototype.forEach.call( // this means we will ignore elements which don't have a space in them which\n    // means that the style elements we're looking at are only Emotion 11 server-rendered style elements\n    document.querySelectorAll(\"style[data-emotion^=\\\"\" + key + \" \\\"]\"), function (node) {\n      var attrib = node.getAttribute(\"data-emotion\").split(' ');\n\n      for (var i = 1; i < attrib.length; i++) {\n        inserted[attrib[i]] = true;\n      }\n\n      nodesToHydrate.push(node);\n    });\n  }\n\n  var _insert;\n\n  var omnipresentPlugins = [compat, removeLabel];\n\n  {\n    var currentSheet;\n    var finalizingPlugins = [stringify, rulesheet(function (rule) {\n      currentSheet.insert(rule);\n    })];\n    var serializer = middleware(omnipresentPlugins.concat(stylisPlugins, finalizingPlugins));\n\n    var stylis = function stylis(styles) {\n      return Serializer_serialize(compile(styles), serializer);\n    };\n\n    _insert = function insert(selector, serialized, sheet, shouldCache) {\n      currentSheet = sheet;\n\n      stylis(selector ? selector + \"{\" + serialized.styles + \"}\" : serialized.styles);\n\n      if (shouldCache) {\n        cache.inserted[serialized.name] = true;\n      }\n    };\n  }\n\n  var cache = {\n    key: key,\n    sheet: new StyleSheet({\n      key: key,\n      container: container,\n      nonce: options.nonce,\n      speedy: options.speedy,\n      prepend: options.prepend,\n      insertionPoint: options.insertionPoint\n    }),\n    nonce: options.nonce,\n    inserted: inserted,\n    registered: {},\n    insert: _insert\n  };\n  cache.sheet.hydrate(nodesToHydrate);\n  return cache;\n};\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LGFBQWEsb0JBQVMsQ0FBQyxPQUFPO0FBQzlCOztBQUVBO0FBQ0E7O0FBRUEscUNBQXFDLDBCQUEwQjs7QUFFL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZUFBZSxVQUFVO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWtDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vc2hlZXQvZGlzdC9lbW90aW9uLXNoZWV0LmVzbS5qcz82ZGU4Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvVXRpbGl0eS5qcz8zOTdlIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvVG9rZW5pemVyLmpzPzQzNDIiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9FbnVtLmpzPzgyMzMiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9TZXJpYWxpemVyLmpzP2U2MDIiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9NaWRkbGV3YXJlLmpzPzQxNmIiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9QYXJzZXIuanM/NzhhYSIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9jYWNoZS9kaXN0L2Vtb3Rpb24tY2FjaGUuYnJvd3Nlci5lc20uanM/ZmI1NSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaXNEZXZlbG9wbWVudCA9IGZhbHNlO1xuXG4vKlxuXG5CYXNlZCBvZmYgZ2xhbW9yJ3MgU3R5bGVTaGVldCwgdGhhbmtzIFN1bmlsIOKdpO+4j1xuXG5oaWdoIHBlcmZvcm1hbmNlIFN0eWxlU2hlZXQgZm9yIGNzcy1pbi1qcyBzeXN0ZW1zXG5cbi0gdXNlcyBtdWx0aXBsZSBzdHlsZSB0YWdzIGJlaGluZCB0aGUgc2NlbmVzIGZvciBtaWxsaW9ucyBvZiBydWxlc1xuLSB1c2VzIGBpbnNlcnRSdWxlYCBmb3IgYXBwZW5kaW5nIGluIHByb2R1Y3Rpb24gZm9yICptdWNoKiBmYXN0ZXIgcGVyZm9ybWFuY2VcblxuLy8gdXNhZ2VcblxuaW1wb3J0IHsgU3R5bGVTaGVldCB9IGZyb20gJ0BlbW90aW9uL3NoZWV0J1xuXG5sZXQgc3R5bGVTaGVldCA9IG5ldyBTdHlsZVNoZWV0KHsga2V5OiAnJywgY29udGFpbmVyOiBkb2N1bWVudC5oZWFkIH0pXG5cbnN0eWxlU2hlZXQuaW5zZXJ0KCcjYm94IHsgYm9yZGVyOiAxcHggc29saWQgcmVkOyB9Jylcbi0gYXBwZW5kcyBhIGNzcyBydWxlIGludG8gdGhlIHN0eWxlc2hlZXRcblxuc3R5bGVTaGVldC5mbHVzaCgpXG4tIGVtcHRpZXMgdGhlIHN0eWxlc2hlZXQgb2YgYWxsIGl0cyBjb250ZW50c1xuXG4qL1xuXG5mdW5jdGlvbiBzaGVldEZvclRhZyh0YWcpIHtcbiAgaWYgKHRhZy5zaGVldCkge1xuICAgIHJldHVybiB0YWcuc2hlZXQ7XG4gIH0gLy8gdGhpcyB3ZWlyZG5lc3MgYnJvdWdodCB0byB5b3UgYnkgZmlyZWZveFxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGRvY3VtZW50LnN0eWxlU2hlZXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGRvY3VtZW50LnN0eWxlU2hlZXRzW2ldLm93bmVyTm9kZSA9PT0gdGFnKSB7XG4gICAgICByZXR1cm4gZG9jdW1lbnQuc3R5bGVTaGVldHNbaV07XG4gICAgfVxuICB9IC8vIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGFsd2F5cyByZXR1cm4gd2l0aCBhIHZhbHVlXG4gIC8vIFRTIGNhbid0IHVuZGVyc3RhbmQgaXQgdGhvdWdoIHNvIHdlIG1ha2UgaXQgc3RvcCBjb21wbGFpbmluZyBoZXJlXG5cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTdHlsZUVsZW1lbnQob3B0aW9ucykge1xuICB2YXIgdGFnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgdGFnLnNldEF0dHJpYnV0ZSgnZGF0YS1lbW90aW9uJywgb3B0aW9ucy5rZXkpO1xuXG4gIGlmIChvcHRpb25zLm5vbmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICB0YWcuc2V0QXR0cmlidXRlKCdub25jZScsIG9wdGlvbnMubm9uY2UpO1xuICB9XG5cbiAgdGFnLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKSk7XG4gIHRhZy5zZXRBdHRyaWJ1dGUoJ2RhdGEtcycsICcnKTtcbiAgcmV0dXJuIHRhZztcbn1cblxudmFyIFN0eWxlU2hlZXQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICAvLyBVc2luZyBOb2RlIGluc3RlYWQgb2YgSFRNTEVsZW1lbnQgc2luY2UgY29udGFpbmVyIG1heSBiZSBhIFNoYWRvd1Jvb3RcbiAgZnVuY3Rpb24gU3R5bGVTaGVldChvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMuX2luc2VydFRhZyA9IGZ1bmN0aW9uICh0YWcpIHtcbiAgICAgIHZhciBiZWZvcmU7XG5cbiAgICAgIGlmIChfdGhpcy50YWdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpZiAoX3RoaXMuaW5zZXJ0aW9uUG9pbnQpIHtcbiAgICAgICAgICBiZWZvcmUgPSBfdGhpcy5pbnNlcnRpb25Qb2ludC5uZXh0U2libGluZztcbiAgICAgICAgfSBlbHNlIGlmIChfdGhpcy5wcmVwZW5kKSB7XG4gICAgICAgICAgYmVmb3JlID0gX3RoaXMuY29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYmVmb3JlID0gX3RoaXMuYmVmb3JlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiZWZvcmUgPSBfdGhpcy50YWdzW190aGlzLnRhZ3MubGVuZ3RoIC0gMV0ubmV4dFNpYmxpbmc7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLmNvbnRhaW5lci5pbnNlcnRCZWZvcmUodGFnLCBiZWZvcmUpO1xuXG4gICAgICBfdGhpcy50YWdzLnB1c2godGFnKTtcbiAgICB9O1xuXG4gICAgdGhpcy5pc1NwZWVkeSA9IG9wdGlvbnMuc3BlZWR5ID09PSB1bmRlZmluZWQgPyAhaXNEZXZlbG9wbWVudCA6IG9wdGlvbnMuc3BlZWR5O1xuICAgIHRoaXMudGFncyA9IFtdO1xuICAgIHRoaXMuY3RyID0gMDtcbiAgICB0aGlzLm5vbmNlID0gb3B0aW9ucy5ub25jZTsgLy8ga2V5IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZGF0YS1lbW90aW9uIGF0dHJpYnV0ZSwgaXQncyB1c2VkIHRvIGlkZW50aWZ5IGRpZmZlcmVudCBzaGVldHNcblxuICAgIHRoaXMua2V5ID0gb3B0aW9ucy5rZXk7XG4gICAgdGhpcy5jb250YWluZXIgPSBvcHRpb25zLmNvbnRhaW5lcjtcbiAgICB0aGlzLnByZXBlbmQgPSBvcHRpb25zLnByZXBlbmQ7XG4gICAgdGhpcy5pbnNlcnRpb25Qb2ludCA9IG9wdGlvbnMuaW5zZXJ0aW9uUG9pbnQ7XG4gICAgdGhpcy5iZWZvcmUgPSBudWxsO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFN0eWxlU2hlZXQucHJvdG90eXBlO1xuXG4gIF9wcm90by5oeWRyYXRlID0gZnVuY3Rpb24gaHlkcmF0ZShub2Rlcykge1xuICAgIG5vZGVzLmZvckVhY2godGhpcy5faW5zZXJ0VGFnKTtcbiAgfTtcblxuICBfcHJvdG8uaW5zZXJ0ID0gZnVuY3Rpb24gaW5zZXJ0KHJ1bGUpIHtcbiAgICAvLyB0aGUgbWF4IGxlbmd0aCBpcyBob3cgbWFueSBydWxlcyB3ZSBoYXZlIHBlciBzdHlsZSB0YWcsIGl0J3MgNjUwMDAgaW4gc3BlZWR5IG1vZGVcbiAgICAvLyBpdCdzIDEgaW4gZGV2IGJlY2F1c2Ugd2UgaW5zZXJ0IHNvdXJjZSBtYXBzIHRoYXQgbWFwIGEgc2luZ2xlIHJ1bGUgdG8gYSBsb2NhdGlvblxuICAgIC8vIGFuZCB5b3UgY2FuIG9ubHkgaGF2ZSBvbmUgc291cmNlIG1hcCBwZXIgc3R5bGUgdGFnXG4gICAgaWYgKHRoaXMuY3RyICUgKHRoaXMuaXNTcGVlZHkgPyA2NTAwMCA6IDEpID09PSAwKSB7XG4gICAgICB0aGlzLl9pbnNlcnRUYWcoY3JlYXRlU3R5bGVFbGVtZW50KHRoaXMpKTtcbiAgICB9XG5cbiAgICB2YXIgdGFnID0gdGhpcy50YWdzW3RoaXMudGFncy5sZW5ndGggLSAxXTtcblxuICAgIGlmICh0aGlzLmlzU3BlZWR5KSB7XG4gICAgICB2YXIgc2hlZXQgPSBzaGVldEZvclRhZyh0YWcpO1xuXG4gICAgICB0cnkge1xuICAgICAgICAvLyB0aGlzIGlzIHRoZSB1bHRyYWZhc3QgdmVyc2lvbiwgd29ya3MgYWNyb3NzIGJyb3dzZXJzXG4gICAgICAgIC8vIHRoZSBiaWcgZHJhd2JhY2sgaXMgdGhhdCB0aGUgY3NzIHdvbid0IGJlIGVkaXRhYmxlIGluIGRldnRvb2xzXG4gICAgICAgIHNoZWV0Lmluc2VydFJ1bGUocnVsZSwgc2hlZXQuY3NzUnVsZXMubGVuZ3RoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGFnLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHJ1bGUpKTtcbiAgICB9XG5cbiAgICB0aGlzLmN0cisrO1xuICB9O1xuXG4gIF9wcm90by5mbHVzaCA9IGZ1bmN0aW9uIGZsdXNoKCkge1xuICAgIHRoaXMudGFncy5mb3JFYWNoKGZ1bmN0aW9uICh0YWcpIHtcbiAgICAgIHZhciBfdGFnJHBhcmVudE5vZGU7XG5cbiAgICAgIHJldHVybiAoX3RhZyRwYXJlbnROb2RlID0gdGFnLnBhcmVudE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfdGFnJHBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGFnKTtcbiAgICB9KTtcbiAgICB0aGlzLnRhZ3MgPSBbXTtcbiAgICB0aGlzLmN0ciA9IDA7XG4gIH07XG5cbiAgcmV0dXJuIFN0eWxlU2hlZXQ7XG59KCk7XG5cbmV4cG9ydCB7IFN0eWxlU2hlZXQgfTtcbiIsIi8qKlxuICogQHBhcmFtIHtudW1iZXJ9XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCB2YXIgYWJzID0gTWF0aC5hYnNcblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn1cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IHZhciBmcm9tID0gU3RyaW5nLmZyb21DaGFyQ29kZVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fVxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgdmFyIGFzc2lnbiA9IE9iamVjdC5hc3NpZ25cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGhcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc2ggKHZhbHVlLCBsZW5ndGgpIHtcblx0cmV0dXJuIGNoYXJhdCh2YWx1ZSwgMCkgXiA0NSA/ICgoKCgoKChsZW5ndGggPDwgMikgXiBjaGFyYXQodmFsdWUsIDApKSA8PCAyKSBeIGNoYXJhdCh2YWx1ZSwgMSkpIDw8IDIpIF4gY2hhcmF0KHZhbHVlLCAyKSkgPDwgMikgXiBjaGFyYXQodmFsdWUsIDMpIDogMFxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJpbSAodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlLnRyaW0oKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtSZWdFeHB9IHBhdHRlcm5cbiAqIEByZXR1cm4ge3N0cmluZz99XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaCAodmFsdWUsIHBhdHRlcm4pIHtcblx0cmV0dXJuICh2YWx1ZSA9IHBhdHRlcm4uZXhlYyh2YWx1ZSkpID8gdmFsdWVbMF0gOiB2YWx1ZVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHsoc3RyaW5nfFJlZ0V4cCl9IHBhdHRlcm5cbiAqIEBwYXJhbSB7c3RyaW5nfSByZXBsYWNlbWVudFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZSAodmFsdWUsIHBhdHRlcm4sIHJlcGxhY2VtZW50KSB7XG5cdHJldHVybiB2YWx1ZS5yZXBsYWNlKHBhdHRlcm4sIHJlcGxhY2VtZW50KVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IHNlYXJjaFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5kZXhvZiAodmFsdWUsIHNlYXJjaCkge1xuXHRyZXR1cm4gdmFsdWUuaW5kZXhPZihzZWFyY2gpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYXJhdCAodmFsdWUsIGluZGV4KSB7XG5cdHJldHVybiB2YWx1ZS5jaGFyQ29kZUF0KGluZGV4KSB8IDBcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBiZWdpblxuICogQHBhcmFtIHtudW1iZXJ9IGVuZFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3Vic3RyICh2YWx1ZSwgYmVnaW4sIGVuZCkge1xuXHRyZXR1cm4gdmFsdWUuc2xpY2UoYmVnaW4sIGVuZClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmxlbiAodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlLmxlbmd0aFxufVxuXG4vKipcbiAqIEBwYXJhbSB7YW55W119IHZhbHVlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaXplb2YgKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZS5sZW5ndGhcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAqIEBwYXJhbSB7YW55W119IGFycmF5XG4gKiBAcmV0dXJuIHthbnl9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmQgKHZhbHVlLCBhcnJheSkge1xuXHRyZXR1cm4gYXJyYXkucHVzaCh2YWx1ZSksIHZhbHVlXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmdbXX0gYXJyYXlcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lIChhcnJheSwgY2FsbGJhY2spIHtcblx0cmV0dXJuIGFycmF5Lm1hcChjYWxsYmFjaykuam9pbignJylcbn1cbiIsImltcG9ydCB7ZnJvbSwgdHJpbSwgY2hhcmF0LCBzdHJsZW4sIHN1YnN0ciwgYXBwZW5kLCBhc3NpZ259IGZyb20gJy4vVXRpbGl0eS5qcydcblxuZXhwb3J0IHZhciBsaW5lID0gMVxuZXhwb3J0IHZhciBjb2x1bW4gPSAxXG5leHBvcnQgdmFyIGxlbmd0aCA9IDBcbmV4cG9ydCB2YXIgcG9zaXRpb24gPSAwXG5leHBvcnQgdmFyIGNoYXJhY3RlciA9IDBcbmV4cG9ydCB2YXIgY2hhcmFjdGVycyA9ICcnXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdCB8IG51bGx9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0IHwgbnVsbH0gcGFyZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtzdHJpbmdbXSB8IHN0cmluZ30gcHJvcHNcbiAqIEBwYXJhbSB7b2JqZWN0W10gfCBzdHJpbmd9IGNoaWxkcmVuXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub2RlICh2YWx1ZSwgcm9vdCwgcGFyZW50LCB0eXBlLCBwcm9wcywgY2hpbGRyZW4sIGxlbmd0aCkge1xuXHRyZXR1cm4ge3ZhbHVlOiB2YWx1ZSwgcm9vdDogcm9vdCwgcGFyZW50OiBwYXJlbnQsIHR5cGU6IHR5cGUsIHByb3BzOiBwcm9wcywgY2hpbGRyZW46IGNoaWxkcmVuLCBsaW5lOiBsaW5lLCBjb2x1bW46IGNvbHVtbiwgbGVuZ3RoOiBsZW5ndGgsIHJldHVybjogJyd9XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wc1xuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29weSAocm9vdCwgcHJvcHMpIHtcblx0cmV0dXJuIGFzc2lnbihub2RlKCcnLCBudWxsLCBudWxsLCAnJywgbnVsbCwgbnVsbCwgMCksIHJvb3QsIHtsZW5ndGg6IC1yb290Lmxlbmd0aH0sIHByb3BzKVxufVxuXG4vKipcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYXIgKCkge1xuXHRyZXR1cm4gY2hhcmFjdGVyXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJldiAoKSB7XG5cdGNoYXJhY3RlciA9IHBvc2l0aW9uID4gMCA/IGNoYXJhdChjaGFyYWN0ZXJzLCAtLXBvc2l0aW9uKSA6IDBcblxuXHRpZiAoY29sdW1uLS0sIGNoYXJhY3RlciA9PT0gMTApXG5cdFx0Y29sdW1uID0gMSwgbGluZS0tXG5cblx0cmV0dXJuIGNoYXJhY3RlclxufVxuXG4vKipcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5leHQgKCkge1xuXHRjaGFyYWN0ZXIgPSBwb3NpdGlvbiA8IGxlbmd0aCA/IGNoYXJhdChjaGFyYWN0ZXJzLCBwb3NpdGlvbisrKSA6IDBcblxuXHRpZiAoY29sdW1uKyssIGNoYXJhY3RlciA9PT0gMTApXG5cdFx0Y29sdW1uID0gMSwgbGluZSsrXG5cblx0cmV0dXJuIGNoYXJhY3RlclxufVxuXG4vKipcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBlZWsgKCkge1xuXHRyZXR1cm4gY2hhcmF0KGNoYXJhY3RlcnMsIHBvc2l0aW9uKVxufVxuXG4vKipcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhcmV0ICgpIHtcblx0cmV0dXJuIHBvc2l0aW9uXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IGJlZ2luXG4gKiBAcGFyYW0ge251bWJlcn0gZW5kXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzbGljZSAoYmVnaW4sIGVuZCkge1xuXHRyZXR1cm4gc3Vic3RyKGNoYXJhY3RlcnMsIGJlZ2luLCBlbmQpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRva2VuICh0eXBlKSB7XG5cdHN3aXRjaCAodHlwZSkge1xuXHRcdC8vIFxcMCBcXHQgXFxuIFxcciBcXHMgd2hpdGVzcGFjZSB0b2tlblxuXHRcdGNhc2UgMDogY2FzZSA5OiBjYXNlIDEwOiBjYXNlIDEzOiBjYXNlIDMyOlxuXHRcdFx0cmV0dXJuIDVcblx0XHQvLyAhICsgLCAvID4gQCB+IGlzb2xhdGUgdG9rZW5cblx0XHRjYXNlIDMzOiBjYXNlIDQzOiBjYXNlIDQ0OiBjYXNlIDQ3OiBjYXNlIDYyOiBjYXNlIDY0OiBjYXNlIDEyNjpcblx0XHQvLyA7IHsgfSBicmVha3BvaW50IHRva2VuXG5cdFx0Y2FzZSA1OTogY2FzZSAxMjM6IGNhc2UgMTI1OlxuXHRcdFx0cmV0dXJuIDRcblx0XHQvLyA6IGFjY29tcGFuaWVkIHRva2VuXG5cdFx0Y2FzZSA1ODpcblx0XHRcdHJldHVybiAzXG5cdFx0Ly8gXCIgJyAoIFsgb3BlbmluZyBkZWxpbWl0IHRva2VuXG5cdFx0Y2FzZSAzNDogY2FzZSAzOTogY2FzZSA0MDogY2FzZSA5MTpcblx0XHRcdHJldHVybiAyXG5cdFx0Ly8gKSBdIGNsb3NpbmcgZGVsaW1pdCB0b2tlblxuXHRcdGNhc2UgNDE6IGNhc2UgOTM6XG5cdFx0XHRyZXR1cm4gMVxuXHR9XG5cblx0cmV0dXJuIDBcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge2FueVtdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWxsb2MgKHZhbHVlKSB7XG5cdHJldHVybiBsaW5lID0gY29sdW1uID0gMSwgbGVuZ3RoID0gc3RybGVuKGNoYXJhY3RlcnMgPSB2YWx1ZSksIHBvc2l0aW9uID0gMCwgW11cbn1cblxuLyoqXG4gKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAqIEByZXR1cm4ge2FueX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlYWxsb2MgKHZhbHVlKSB7XG5cdHJldHVybiBjaGFyYWN0ZXJzID0gJycsIHZhbHVlXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGltaXQgKHR5cGUpIHtcblx0cmV0dXJuIHRyaW0oc2xpY2UocG9zaXRpb24gLSAxLCBkZWxpbWl0ZXIodHlwZSA9PT0gOTEgPyB0eXBlICsgMiA6IHR5cGUgPT09IDQwID8gdHlwZSArIDEgOiB0eXBlKSkpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtzdHJpbmdbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRva2VuaXplICh2YWx1ZSkge1xuXHRyZXR1cm4gZGVhbGxvYyh0b2tlbml6ZXIoYWxsb2ModmFsdWUpKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gd2hpdGVzcGFjZSAodHlwZSkge1xuXHR3aGlsZSAoY2hhcmFjdGVyID0gcGVlaygpKVxuXHRcdGlmIChjaGFyYWN0ZXIgPCAzMylcblx0XHRcdG5leHQoKVxuXHRcdGVsc2Vcblx0XHRcdGJyZWFrXG5cblx0cmV0dXJuIHRva2VuKHR5cGUpID4gMiB8fCB0b2tlbihjaGFyYWN0ZXIpID4gMyA/ICcnIDogJyAnXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmdbXX0gY2hpbGRyZW5cbiAqIEByZXR1cm4ge3N0cmluZ1tdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9rZW5pemVyIChjaGlsZHJlbikge1xuXHR3aGlsZSAobmV4dCgpKVxuXHRcdHN3aXRjaCAodG9rZW4oY2hhcmFjdGVyKSkge1xuXHRcdFx0Y2FzZSAwOiBhcHBlbmQoaWRlbnRpZmllcihwb3NpdGlvbiAtIDEpLCBjaGlsZHJlbilcblx0XHRcdFx0YnJlYWtcblx0XHRcdGNhc2UgMjogYXBwZW5kKGRlbGltaXQoY2hhcmFjdGVyKSwgY2hpbGRyZW4pXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHRkZWZhdWx0OiBhcHBlbmQoZnJvbShjaGFyYWN0ZXIpLCBjaGlsZHJlbilcblx0XHR9XG5cblx0cmV0dXJuIGNoaWxkcmVuXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge251bWJlcn0gY291bnRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwaW5nIChpbmRleCwgY291bnQpIHtcblx0d2hpbGUgKC0tY291bnQgJiYgbmV4dCgpKVxuXHRcdC8vIG5vdCAwLTkgQS1GIGEtZlxuXHRcdGlmIChjaGFyYWN0ZXIgPCA0OCB8fCBjaGFyYWN0ZXIgPiAxMDIgfHwgKGNoYXJhY3RlciA+IDU3ICYmIGNoYXJhY3RlciA8IDY1KSB8fCAoY2hhcmFjdGVyID4gNzAgJiYgY2hhcmFjdGVyIDwgOTcpKVxuXHRcdFx0YnJlYWtcblxuXHRyZXR1cm4gc2xpY2UoaW5kZXgsIGNhcmV0KCkgKyAoY291bnQgPCA2ICYmIHBlZWsoKSA9PSAzMiAmJiBuZXh0KCkgPT0gMzIpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxpbWl0ZXIgKHR5cGUpIHtcblx0d2hpbGUgKG5leHQoKSlcblx0XHRzd2l0Y2ggKGNoYXJhY3Rlcikge1xuXHRcdFx0Ly8gXSApIFwiICdcblx0XHRcdGNhc2UgdHlwZTpcblx0XHRcdFx0cmV0dXJuIHBvc2l0aW9uXG5cdFx0XHQvLyBcIiAnXG5cdFx0XHRjYXNlIDM0OiBjYXNlIDM5OlxuXHRcdFx0XHRpZiAodHlwZSAhPT0gMzQgJiYgdHlwZSAhPT0gMzkpXG5cdFx0XHRcdFx0ZGVsaW1pdGVyKGNoYXJhY3Rlcilcblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIChcblx0XHRcdGNhc2UgNDA6XG5cdFx0XHRcdGlmICh0eXBlID09PSA0MSlcblx0XHRcdFx0XHRkZWxpbWl0ZXIodHlwZSlcblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIFxcXG5cdFx0XHRjYXNlIDkyOlxuXHRcdFx0XHRuZXh0KClcblx0XHRcdFx0YnJlYWtcblx0XHR9XG5cblx0cmV0dXJuIHBvc2l0aW9uXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tbWVudGVyICh0eXBlLCBpbmRleCkge1xuXHR3aGlsZSAobmV4dCgpKVxuXHRcdC8vIC8vXG5cdFx0aWYgKHR5cGUgKyBjaGFyYWN0ZXIgPT09IDQ3ICsgMTApXG5cdFx0XHRicmVha1xuXHRcdC8vIC8qXG5cdFx0ZWxzZSBpZiAodHlwZSArIGNoYXJhY3RlciA9PT0gNDIgKyA0MiAmJiBwZWVrKCkgPT09IDQ3KVxuXHRcdFx0YnJlYWtcblxuXHRyZXR1cm4gJy8qJyArIHNsaWNlKGluZGV4LCBwb3NpdGlvbiAtIDEpICsgJyonICsgZnJvbSh0eXBlID09PSA0NyA/IHR5cGUgOiBuZXh0KCkpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGlmaWVyIChpbmRleCkge1xuXHR3aGlsZSAoIXRva2VuKHBlZWsoKSkpXG5cdFx0bmV4dCgpXG5cblx0cmV0dXJuIHNsaWNlKGluZGV4LCBwb3NpdGlvbilcbn1cbiIsImV4cG9ydCB2YXIgTVMgPSAnLW1zLSdcbmV4cG9ydCB2YXIgTU9aID0gJy1tb3otJ1xuZXhwb3J0IHZhciBXRUJLSVQgPSAnLXdlYmtpdC0nXG5cbmV4cG9ydCB2YXIgQ09NTUVOVCA9ICdjb21tJ1xuZXhwb3J0IHZhciBSVUxFU0VUID0gJ3J1bGUnXG5leHBvcnQgdmFyIERFQ0xBUkFUSU9OID0gJ2RlY2wnXG5cbmV4cG9ydCB2YXIgUEFHRSA9ICdAcGFnZSdcbmV4cG9ydCB2YXIgTUVESUEgPSAnQG1lZGlhJ1xuZXhwb3J0IHZhciBJTVBPUlQgPSAnQGltcG9ydCdcbmV4cG9ydCB2YXIgQ0hBUlNFVCA9ICdAY2hhcnNldCdcbmV4cG9ydCB2YXIgVklFV1BPUlQgPSAnQHZpZXdwb3J0J1xuZXhwb3J0IHZhciBTVVBQT1JUUyA9ICdAc3VwcG9ydHMnXG5leHBvcnQgdmFyIERPQ1VNRU5UID0gJ0Bkb2N1bWVudCdcbmV4cG9ydCB2YXIgTkFNRVNQQUNFID0gJ0BuYW1lc3BhY2UnXG5leHBvcnQgdmFyIEtFWUZSQU1FUyA9ICdAa2V5ZnJhbWVzJ1xuZXhwb3J0IHZhciBGT05UX0ZBQ0UgPSAnQGZvbnQtZmFjZSdcbmV4cG9ydCB2YXIgQ09VTlRFUl9TVFlMRSA9ICdAY291bnRlci1zdHlsZSdcbmV4cG9ydCB2YXIgRk9OVF9GRUFUVVJFX1ZBTFVFUyA9ICdAZm9udC1mZWF0dXJlLXZhbHVlcydcbmV4cG9ydCB2YXIgTEFZRVIgPSAnQGxheWVyJ1xuIiwiaW1wb3J0IHtJTVBPUlQsIExBWUVSLCBDT01NRU5ULCBSVUxFU0VULCBERUNMQVJBVElPTiwgS0VZRlJBTUVTfSBmcm9tICcuL0VudW0uanMnXG5pbXBvcnQge3N0cmxlbiwgc2l6ZW9mfSBmcm9tICcuL1V0aWxpdHkuanMnXG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3RbXX0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemUgKGNoaWxkcmVuLCBjYWxsYmFjaykge1xuXHR2YXIgb3V0cHV0ID0gJydcblx0dmFyIGxlbmd0aCA9IHNpemVvZihjaGlsZHJlbilcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuXHRcdG91dHB1dCArPSBjYWxsYmFjayhjaGlsZHJlbltpXSwgaSwgY2hpbGRyZW4sIGNhbGxiYWNrKSB8fCAnJ1xuXG5cdHJldHVybiBvdXRwdXRcbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZWxlbWVudFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge29iamVjdFtdfSBjaGlsZHJlblxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeSAoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykge1xuXHRzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuXHRcdGNhc2UgTEFZRVI6IGlmIChlbGVtZW50LmNoaWxkcmVuLmxlbmd0aCkgYnJlYWtcblx0XHRjYXNlIElNUE9SVDogY2FzZSBERUNMQVJBVElPTjogcmV0dXJuIGVsZW1lbnQucmV0dXJuID0gZWxlbWVudC5yZXR1cm4gfHwgZWxlbWVudC52YWx1ZVxuXHRcdGNhc2UgQ09NTUVOVDogcmV0dXJuICcnXG5cdFx0Y2FzZSBLRVlGUkFNRVM6IHJldHVybiBlbGVtZW50LnJldHVybiA9IGVsZW1lbnQudmFsdWUgKyAneycgKyBzZXJpYWxpemUoZWxlbWVudC5jaGlsZHJlbiwgY2FsbGJhY2spICsgJ30nXG5cdFx0Y2FzZSBSVUxFU0VUOiBlbGVtZW50LnZhbHVlID0gZWxlbWVudC5wcm9wcy5qb2luKCcsJylcblx0fVxuXG5cdHJldHVybiBzdHJsZW4oY2hpbGRyZW4gPSBzZXJpYWxpemUoZWxlbWVudC5jaGlsZHJlbiwgY2FsbGJhY2spKSA/IGVsZW1lbnQucmV0dXJuID0gZWxlbWVudC52YWx1ZSArICd7JyArIGNoaWxkcmVuICsgJ30nIDogJydcbn1cbiIsImltcG9ydCB7TVMsIE1PWiwgV0VCS0lULCBSVUxFU0VULCBLRVlGUkFNRVMsIERFQ0xBUkFUSU9OfSBmcm9tICcuL0VudW0uanMnXG5pbXBvcnQge21hdGNoLCBjaGFyYXQsIHN1YnN0ciwgc3RybGVuLCBzaXplb2YsIHJlcGxhY2UsIGNvbWJpbmV9IGZyb20gJy4vVXRpbGl0eS5qcydcbmltcG9ydCB7Y29weSwgdG9rZW5pemV9IGZyb20gJy4vVG9rZW5pemVyLmpzJ1xuaW1wb3J0IHtzZXJpYWxpemV9IGZyb20gJy4vU2VyaWFsaXplci5qcydcbmltcG9ydCB7cHJlZml4fSBmcm9tICcuL1ByZWZpeGVyLmpzJ1xuXG4vKipcbiAqIEBwYXJhbSB7ZnVuY3Rpb25bXX0gY29sbGVjdGlvblxuICogQHJldHVybiB7ZnVuY3Rpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtaWRkbGV3YXJlIChjb2xsZWN0aW9uKSB7XG5cdHZhciBsZW5ndGggPSBzaXplb2YoY29sbGVjdGlvbilcblxuXHRyZXR1cm4gZnVuY3Rpb24gKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbiwgY2FsbGJhY2spIHtcblx0XHR2YXIgb3V0cHV0ID0gJydcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG5cdFx0XHRvdXRwdXQgKz0gY29sbGVjdGlvbltpXShlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4sIGNhbGxiYWNrKSB8fCAnJ1xuXG5cdFx0cmV0dXJuIG91dHB1dFxuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge2Z1bmN0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVsZXNoZWV0IChjYWxsYmFjaykge1xuXHRyZXR1cm4gZnVuY3Rpb24gKGVsZW1lbnQpIHtcblx0XHRpZiAoIWVsZW1lbnQucm9vdClcblx0XHRcdGlmIChlbGVtZW50ID0gZWxlbWVudC5yZXR1cm4pXG5cdFx0XHRcdGNhbGxiYWNrKGVsZW1lbnQpXG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZWxlbWVudFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge29iamVjdFtdfSBjaGlsZHJlblxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZWZpeGVyIChlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4sIGNhbGxiYWNrKSB7XG5cdGlmIChlbGVtZW50Lmxlbmd0aCA+IC0xKVxuXHRcdGlmICghZWxlbWVudC5yZXR1cm4pXG5cdFx0XHRzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuXHRcdFx0XHRjYXNlIERFQ0xBUkFUSU9OOiBlbGVtZW50LnJldHVybiA9IHByZWZpeChlbGVtZW50LnZhbHVlLCBlbGVtZW50Lmxlbmd0aCwgY2hpbGRyZW4pXG5cdFx0XHRcdFx0cmV0dXJuXG5cdFx0XHRcdGNhc2UgS0VZRlJBTUVTOlxuXHRcdFx0XHRcdHJldHVybiBzZXJpYWxpemUoW2NvcHkoZWxlbWVudCwge3ZhbHVlOiByZXBsYWNlKGVsZW1lbnQudmFsdWUsICdAJywgJ0AnICsgV0VCS0lUKX0pXSwgY2FsbGJhY2spXG5cdFx0XHRcdGNhc2UgUlVMRVNFVDpcblx0XHRcdFx0XHRpZiAoZWxlbWVudC5sZW5ndGgpXG5cdFx0XHRcdFx0XHRyZXR1cm4gY29tYmluZShlbGVtZW50LnByb3BzLCBmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0c3dpdGNoIChtYXRjaCh2YWx1ZSwgLyg6OnBsYWNcXHcrfDpyZWFkLVxcdyspLykpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyA6cmVhZC0ob25seXx3cml0ZSlcblx0XHRcdFx0XHRcdFx0XHRjYXNlICc6cmVhZC1vbmx5JzogY2FzZSAnOnJlYWQtd3JpdGUnOlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHNlcmlhbGl6ZShbY29weShlbGVtZW50LCB7cHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihyZWFkLVxcdyspLywgJzonICsgTU9aICsgJyQxJyldfSldLCBjYWxsYmFjaylcblx0XHRcdFx0XHRcdFx0XHQvLyA6cGxhY2Vob2xkZXJcblx0XHRcdFx0XHRcdFx0XHRjYXNlICc6OnBsYWNlaG9sZGVyJzpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBzZXJpYWxpemUoW1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb3B5KGVsZW1lbnQsIHtwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sICc6JyArIFdFQktJVCArICdpbnB1dC0kMScpXX0pLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb3B5KGVsZW1lbnQsIHtwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sICc6JyArIE1PWiArICckMScpXX0pLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb3B5KGVsZW1lbnQsIHtwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sIE1TICsgJ2lucHV0LSQxJyldfSlcblx0XHRcdFx0XHRcdFx0XHRcdF0sIGNhbGxiYWNrKVxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0cmV0dXJuICcnXG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBlbGVtZW50XG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7b2JqZWN0W119IGNoaWxkcmVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuYW1lc3BhY2UgKGVsZW1lbnQpIHtcblx0c3dpdGNoIChlbGVtZW50LnR5cGUpIHtcblx0XHRjYXNlIFJVTEVTRVQ6XG5cdFx0XHRlbGVtZW50LnByb3BzID0gZWxlbWVudC5wcm9wcy5tYXAoZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0XHRcdHJldHVybiBjb21iaW5lKHRva2VuaXplKHZhbHVlKSwgZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgY2hpbGRyZW4pIHtcblx0XHRcdFx0XHRzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgMCkpIHtcblx0XHRcdFx0XHRcdC8vIFxcZlxuXHRcdFx0XHRcdFx0Y2FzZSAxMjpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHN1YnN0cih2YWx1ZSwgMSwgc3RybGVuKHZhbHVlKSlcblx0XHRcdFx0XHRcdC8vIFxcMCAoICsgPiB+XG5cdFx0XHRcdFx0XHRjYXNlIDA6IGNhc2UgNDA6IGNhc2UgNDM6IGNhc2UgNjI6IGNhc2UgMTI2OlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdmFsdWVcblx0XHRcdFx0XHRcdC8vIDpcblx0XHRcdFx0XHRcdGNhc2UgNTg6XG5cdFx0XHRcdFx0XHRcdGlmIChjaGlsZHJlblsrK2luZGV4XSA9PT0gJ2dsb2JhbCcpXG5cdFx0XHRcdFx0XHRcdFx0Y2hpbGRyZW5baW5kZXhdID0gJycsIGNoaWxkcmVuWysraW5kZXhdID0gJ1xcZicgKyBzdWJzdHIoY2hpbGRyZW5baW5kZXhdLCBpbmRleCA9IDEsIC0xKVxuXHRcdFx0XHRcdFx0Ly8gXFxzXG5cdFx0XHRcdFx0XHRjYXNlIDMyOlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gaW5kZXggPT09IDEgPyAnJyA6IHZhbHVlXG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRzd2l0Y2ggKGluZGV4KSB7XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSAwOiBlbGVtZW50ID0gdmFsdWVcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBzaXplb2YoY2hpbGRyZW4pID4gMSA/ICcnIDogdmFsdWVcblx0XHRcdFx0XHRcdFx0XHRjYXNlIGluZGV4ID0gc2l6ZW9mKGNoaWxkcmVuKSAtIDE6IGNhc2UgMjpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBpbmRleCA9PT0gMiA/IHZhbHVlICsgZWxlbWVudCArIGVsZW1lbnQgOiB2YWx1ZSArIGVsZW1lbnRcblx0XHRcdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHR9KVxuXHR9XG59XG4iLCJpbXBvcnQge0NPTU1FTlQsIFJVTEVTRVQsIERFQ0xBUkFUSU9OfSBmcm9tICcuL0VudW0uanMnXG5pbXBvcnQge2FicywgY2hhcmF0LCB0cmltLCBmcm9tLCBzaXplb2YsIHN0cmxlbiwgc3Vic3RyLCBhcHBlbmQsIHJlcGxhY2UsIGluZGV4b2Z9IGZyb20gJy4vVXRpbGl0eS5qcydcbmltcG9ydCB7bm9kZSwgY2hhciwgcHJldiwgbmV4dCwgcGVlaywgY2FyZXQsIGFsbG9jLCBkZWFsbG9jLCBkZWxpbWl0LCB3aGl0ZXNwYWNlLCBlc2NhcGluZywgaWRlbnRpZmllciwgY29tbWVudGVyfSBmcm9tICcuL1Rva2VuaXplci5qcydcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge29iamVjdFtdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcGlsZSAodmFsdWUpIHtcblx0cmV0dXJuIGRlYWxsb2MocGFyc2UoJycsIG51bGwsIG51bGwsIG51bGwsIFsnJ10sIHZhbHVlID0gYWxsb2ModmFsdWUpLCAwLCBbMF0sIHZhbHVlKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdD99IHBhcmVudFxuICogQHBhcmFtIHtzdHJpbmdbXX0gcnVsZVxuICogQHBhcmFtIHtzdHJpbmdbXX0gcnVsZXNcbiAqIEBwYXJhbSB7c3RyaW5nW119IHJ1bGVzZXRzXG4gKiBAcGFyYW0ge251bWJlcltdfSBwc2V1ZG9cbiAqIEBwYXJhbSB7bnVtYmVyW119IHBvaW50c1xuICogQHBhcmFtIHtzdHJpbmdbXX0gZGVjbGFyYXRpb25zXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZSAodmFsdWUsIHJvb3QsIHBhcmVudCwgcnVsZSwgcnVsZXMsIHJ1bGVzZXRzLCBwc2V1ZG8sIHBvaW50cywgZGVjbGFyYXRpb25zKSB7XG5cdHZhciBpbmRleCA9IDBcblx0dmFyIG9mZnNldCA9IDBcblx0dmFyIGxlbmd0aCA9IHBzZXVkb1xuXHR2YXIgYXRydWxlID0gMFxuXHR2YXIgcHJvcGVydHkgPSAwXG5cdHZhciBwcmV2aW91cyA9IDBcblx0dmFyIHZhcmlhYmxlID0gMVxuXHR2YXIgc2Nhbm5pbmcgPSAxXG5cdHZhciBhbXBlcnNhbmQgPSAxXG5cdHZhciBjaGFyYWN0ZXIgPSAwXG5cdHZhciB0eXBlID0gJydcblx0dmFyIHByb3BzID0gcnVsZXNcblx0dmFyIGNoaWxkcmVuID0gcnVsZXNldHNcblx0dmFyIHJlZmVyZW5jZSA9IHJ1bGVcblx0dmFyIGNoYXJhY3RlcnMgPSB0eXBlXG5cblx0d2hpbGUgKHNjYW5uaW5nKVxuXHRcdHN3aXRjaCAocHJldmlvdXMgPSBjaGFyYWN0ZXIsIGNoYXJhY3RlciA9IG5leHQoKSkge1xuXHRcdFx0Ly8gKFxuXHRcdFx0Y2FzZSA0MDpcblx0XHRcdFx0aWYgKHByZXZpb3VzICE9IDEwOCAmJiBjaGFyYXQoY2hhcmFjdGVycywgbGVuZ3RoIC0gMSkgPT0gNTgpIHtcblx0XHRcdFx0XHRpZiAoaW5kZXhvZihjaGFyYWN0ZXJzICs9IHJlcGxhY2UoZGVsaW1pdChjaGFyYWN0ZXIpLCAnJicsICcmXFxmJyksICcmXFxmJykgIT0gLTEpXG5cdFx0XHRcdFx0XHRhbXBlcnNhbmQgPSAtMVxuXHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdH1cblx0XHRcdC8vIFwiICcgW1xuXHRcdFx0Y2FzZSAzNDogY2FzZSAzOTogY2FzZSA5MTpcblx0XHRcdFx0Y2hhcmFjdGVycyArPSBkZWxpbWl0KGNoYXJhY3Rlcilcblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIFxcdCBcXG4gXFxyIFxcc1xuXHRcdFx0Y2FzZSA5OiBjYXNlIDEwOiBjYXNlIDEzOiBjYXNlIDMyOlxuXHRcdFx0XHRjaGFyYWN0ZXJzICs9IHdoaXRlc3BhY2UocHJldmlvdXMpXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyBcXFxuXHRcdFx0Y2FzZSA5Mjpcblx0XHRcdFx0Y2hhcmFjdGVycyArPSBlc2NhcGluZyhjYXJldCgpIC0gMSwgNylcblx0XHRcdFx0Y29udGludWVcblx0XHRcdC8vIC9cblx0XHRcdGNhc2UgNDc6XG5cdFx0XHRcdHN3aXRjaCAocGVlaygpKSB7XG5cdFx0XHRcdFx0Y2FzZSA0MjogY2FzZSA0Nzpcblx0XHRcdFx0XHRcdGFwcGVuZChjb21tZW50KGNvbW1lbnRlcihuZXh0KCksIGNhcmV0KCkpLCByb290LCBwYXJlbnQpLCBkZWNsYXJhdGlvbnMpXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRjaGFyYWN0ZXJzICs9ICcvJ1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyB7XG5cdFx0XHRjYXNlIDEyMyAqIHZhcmlhYmxlOlxuXHRcdFx0XHRwb2ludHNbaW5kZXgrK10gPSBzdHJsZW4oY2hhcmFjdGVycykgKiBhbXBlcnNhbmRcblx0XHRcdC8vIH0gOyBcXDBcblx0XHRcdGNhc2UgMTI1ICogdmFyaWFibGU6IGNhc2UgNTk6IGNhc2UgMDpcblx0XHRcdFx0c3dpdGNoIChjaGFyYWN0ZXIpIHtcblx0XHRcdFx0XHQvLyBcXDAgfVxuXHRcdFx0XHRcdGNhc2UgMDogY2FzZSAxMjU6IHNjYW5uaW5nID0gMFxuXHRcdFx0XHRcdC8vIDtcblx0XHRcdFx0XHRjYXNlIDU5ICsgb2Zmc2V0OiBpZiAoYW1wZXJzYW5kID09IC0xKSBjaGFyYWN0ZXJzID0gcmVwbGFjZShjaGFyYWN0ZXJzLCAvXFxmL2csICcnKVxuXHRcdFx0XHRcdFx0aWYgKHByb3BlcnR5ID4gMCAmJiAoc3RybGVuKGNoYXJhY3RlcnMpIC0gbGVuZ3RoKSlcblx0XHRcdFx0XHRcdFx0YXBwZW5kKHByb3BlcnR5ID4gMzIgPyBkZWNsYXJhdGlvbihjaGFyYWN0ZXJzICsgJzsnLCBydWxlLCBwYXJlbnQsIGxlbmd0aCAtIDEpIDogZGVjbGFyYXRpb24ocmVwbGFjZShjaGFyYWN0ZXJzLCAnICcsICcnKSArICc7JywgcnVsZSwgcGFyZW50LCBsZW5ndGggLSAyKSwgZGVjbGFyYXRpb25zKVxuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHQvLyBAIDtcblx0XHRcdFx0XHRjYXNlIDU5OiBjaGFyYWN0ZXJzICs9ICc7J1xuXHRcdFx0XHRcdC8vIHsgcnVsZS9hdC1ydWxlXG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdGFwcGVuZChyZWZlcmVuY2UgPSBydWxlc2V0KGNoYXJhY3RlcnMsIHJvb3QsIHBhcmVudCwgaW5kZXgsIG9mZnNldCwgcnVsZXMsIHBvaW50cywgdHlwZSwgcHJvcHMgPSBbXSwgY2hpbGRyZW4gPSBbXSwgbGVuZ3RoKSwgcnVsZXNldHMpXG5cblx0XHRcdFx0XHRcdGlmIChjaGFyYWN0ZXIgPT09IDEyMylcblx0XHRcdFx0XHRcdFx0aWYgKG9mZnNldCA9PT0gMClcblx0XHRcdFx0XHRcdFx0XHRwYXJzZShjaGFyYWN0ZXJzLCByb290LCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgcHJvcHMsIHJ1bGVzZXRzLCBsZW5ndGgsIHBvaW50cywgY2hpbGRyZW4pXG5cdFx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRzd2l0Y2ggKGF0cnVsZSA9PT0gOTkgJiYgY2hhcmF0KGNoYXJhY3RlcnMsIDMpID09PSAxMTAgPyAxMDAgOiBhdHJ1bGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGQgbCBtIHNcblx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgMTAwOiBjYXNlIDEwODogY2FzZSAxMDk6IGNhc2UgMTE1OlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJzZSh2YWx1ZSwgcmVmZXJlbmNlLCByZWZlcmVuY2UsIHJ1bGUgJiYgYXBwZW5kKHJ1bGVzZXQodmFsdWUsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCAwLCAwLCBydWxlcywgcG9pbnRzLCB0eXBlLCBydWxlcywgcHJvcHMgPSBbXSwgbGVuZ3RoKSwgY2hpbGRyZW4pLCBydWxlcywgY2hpbGRyZW4sIGxlbmd0aCwgcG9pbnRzLCBydWxlID8gcHJvcHMgOiBjaGlsZHJlbilcblx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHBhcnNlKGNoYXJhY3RlcnMsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCByZWZlcmVuY2UsIFsnJ10sIGNoaWxkcmVuLCAwLCBwb2ludHMsIGNoaWxkcmVuKVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGluZGV4ID0gb2Zmc2V0ID0gcHJvcGVydHkgPSAwLCB2YXJpYWJsZSA9IGFtcGVyc2FuZCA9IDEsIHR5cGUgPSBjaGFyYWN0ZXJzID0gJycsIGxlbmd0aCA9IHBzZXVkb1xuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gOlxuXHRcdFx0Y2FzZSA1ODpcblx0XHRcdFx0bGVuZ3RoID0gMSArIHN0cmxlbihjaGFyYWN0ZXJzKSwgcHJvcGVydHkgPSBwcmV2aW91c1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0aWYgKHZhcmlhYmxlIDwgMSlcblx0XHRcdFx0XHRpZiAoY2hhcmFjdGVyID09IDEyMylcblx0XHRcdFx0XHRcdC0tdmFyaWFibGVcblx0XHRcdFx0XHRlbHNlIGlmIChjaGFyYWN0ZXIgPT0gMTI1ICYmIHZhcmlhYmxlKysgPT0gMCAmJiBwcmV2KCkgPT0gMTI1KVxuXHRcdFx0XHRcdFx0Y29udGludWVcblxuXHRcdFx0XHRzd2l0Y2ggKGNoYXJhY3RlcnMgKz0gZnJvbShjaGFyYWN0ZXIpLCBjaGFyYWN0ZXIgKiB2YXJpYWJsZSkge1xuXHRcdFx0XHRcdC8vICZcblx0XHRcdFx0XHRjYXNlIDM4OlxuXHRcdFx0XHRcdFx0YW1wZXJzYW5kID0gb2Zmc2V0ID4gMCA/IDEgOiAoY2hhcmFjdGVycyArPSAnXFxmJywgLTEpXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdC8vICxcblx0XHRcdFx0XHRjYXNlIDQ0OlxuXHRcdFx0XHRcdFx0cG9pbnRzW2luZGV4KytdID0gKHN0cmxlbihjaGFyYWN0ZXJzKSAtIDEpICogYW1wZXJzYW5kLCBhbXBlcnNhbmQgPSAxXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdC8vIEBcblx0XHRcdFx0XHRjYXNlIDY0OlxuXHRcdFx0XHRcdFx0Ly8gLVxuXHRcdFx0XHRcdFx0aWYgKHBlZWsoKSA9PT0gNDUpXG5cdFx0XHRcdFx0XHRcdGNoYXJhY3RlcnMgKz0gZGVsaW1pdChuZXh0KCkpXG5cblx0XHRcdFx0XHRcdGF0cnVsZSA9IHBlZWsoKSwgb2Zmc2V0ID0gbGVuZ3RoID0gc3RybGVuKHR5cGUgPSBjaGFyYWN0ZXJzICs9IGlkZW50aWZpZXIoY2FyZXQoKSkpLCBjaGFyYWN0ZXIrK1xuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHQvLyAtXG5cdFx0XHRcdFx0Y2FzZSA0NTpcblx0XHRcdFx0XHRcdGlmIChwcmV2aW91cyA9PT0gNDUgJiYgc3RybGVuKGNoYXJhY3RlcnMpID09IDIpXG5cdFx0XHRcdFx0XHRcdHZhcmlhYmxlID0gMFxuXHRcdFx0XHR9XG5cdFx0fVxuXG5cdHJldHVybiBydWxlc2V0c1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0P30gcGFyZW50XG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXRcbiAqIEBwYXJhbSB7c3RyaW5nW119IHJ1bGVzXG4gKiBAcGFyYW0ge251bWJlcltdfSBwb2ludHNcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBwcm9wc1xuICogQHBhcmFtIHtzdHJpbmdbXX0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGhcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVzZXQgKHZhbHVlLCByb290LCBwYXJlbnQsIGluZGV4LCBvZmZzZXQsIHJ1bGVzLCBwb2ludHMsIHR5cGUsIHByb3BzLCBjaGlsZHJlbiwgbGVuZ3RoKSB7XG5cdHZhciBwb3N0ID0gb2Zmc2V0IC0gMVxuXHR2YXIgcnVsZSA9IG9mZnNldCA9PT0gMCA/IHJ1bGVzIDogWycnXVxuXHR2YXIgc2l6ZSA9IHNpemVvZihydWxlKVxuXG5cdGZvciAodmFyIGkgPSAwLCBqID0gMCwgayA9IDA7IGkgPCBpbmRleDsgKytpKVxuXHRcdGZvciAodmFyIHggPSAwLCB5ID0gc3Vic3RyKHZhbHVlLCBwb3N0ICsgMSwgcG9zdCA9IGFicyhqID0gcG9pbnRzW2ldKSksIHogPSB2YWx1ZTsgeCA8IHNpemU7ICsreClcblx0XHRcdGlmICh6ID0gdHJpbShqID4gMCA/IHJ1bGVbeF0gKyAnICcgKyB5IDogcmVwbGFjZSh5LCAvJlxcZi9nLCBydWxlW3hdKSkpXG5cdFx0XHRcdHByb3BzW2srK10gPSB6XG5cblx0cmV0dXJuIG5vZGUodmFsdWUsIHJvb3QsIHBhcmVudCwgb2Zmc2V0ID09PSAwID8gUlVMRVNFVCA6IHR5cGUsIHByb3BzLCBjaGlsZHJlbiwgbGVuZ3RoKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0P30gcGFyZW50XG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21tZW50ICh2YWx1ZSwgcm9vdCwgcGFyZW50KSB7XG5cdHJldHVybiBub2RlKHZhbHVlLCByb290LCBwYXJlbnQsIENPTU1FTlQsIGZyb20oY2hhcigpKSwgc3Vic3RyKHZhbHVlLCAyLCAtMiksIDApXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3Q/fSBwYXJlbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGhcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY2xhcmF0aW9uICh2YWx1ZSwgcm9vdCwgcGFyZW50LCBsZW5ndGgpIHtcblx0cmV0dXJuIG5vZGUodmFsdWUsIHJvb3QsIHBhcmVudCwgREVDTEFSQVRJT04sIHN1YnN0cih2YWx1ZSwgMCwgbGVuZ3RoKSwgc3Vic3RyKHZhbHVlLCBsZW5ndGggKyAxLCAtMSksIGxlbmd0aClcbn1cbiIsImltcG9ydCB7IFN0eWxlU2hlZXQgfSBmcm9tICdAZW1vdGlvbi9zaGVldCc7XG5pbXBvcnQgeyBkZWFsbG9jLCBhbGxvYywgbmV4dCwgdG9rZW4sIGZyb20sIHBlZWssIGRlbGltaXQsIHNsaWNlLCBwb3NpdGlvbiwgUlVMRVNFVCwgY29tYmluZSwgbWF0Y2gsIHNlcmlhbGl6ZSwgY29weSwgcmVwbGFjZSwgV0VCS0lULCBNT1osIE1TLCBLRVlGUkFNRVMsIERFQ0xBUkFUSU9OLCBoYXNoLCBjaGFyYXQsIHN0cmxlbiwgaW5kZXhvZiwgc3RyaW5naWZ5LCBydWxlc2hlZXQsIG1pZGRsZXdhcmUsIGNvbXBpbGUgfSBmcm9tICdzdHlsaXMnO1xuaW1wb3J0ICdAZW1vdGlvbi93ZWFrLW1lbW9pemUnO1xuaW1wb3J0ICdAZW1vdGlvbi9tZW1vaXplJztcblxudmFyIGlkZW50aWZpZXJXaXRoUG9pbnRUcmFja2luZyA9IGZ1bmN0aW9uIGlkZW50aWZpZXJXaXRoUG9pbnRUcmFja2luZyhiZWdpbiwgcG9pbnRzLCBpbmRleCkge1xuICB2YXIgcHJldmlvdXMgPSAwO1xuICB2YXIgY2hhcmFjdGVyID0gMDtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHByZXZpb3VzID0gY2hhcmFjdGVyO1xuICAgIGNoYXJhY3RlciA9IHBlZWsoKTsgLy8gJlxcZlxuXG4gICAgaWYgKHByZXZpb3VzID09PSAzOCAmJiBjaGFyYWN0ZXIgPT09IDEyKSB7XG4gICAgICBwb2ludHNbaW5kZXhdID0gMTtcbiAgICB9XG5cbiAgICBpZiAodG9rZW4oY2hhcmFjdGVyKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgbmV4dCgpO1xuICB9XG5cbiAgcmV0dXJuIHNsaWNlKGJlZ2luLCBwb3NpdGlvbik7XG59O1xuXG52YXIgdG9SdWxlcyA9IGZ1bmN0aW9uIHRvUnVsZXMocGFyc2VkLCBwb2ludHMpIHtcbiAgLy8gcHJldGVuZCB3ZSd2ZSBzdGFydGVkIHdpdGggYSBjb21tYVxuICB2YXIgaW5kZXggPSAtMTtcbiAgdmFyIGNoYXJhY3RlciA9IDQ0O1xuXG4gIGRvIHtcbiAgICBzd2l0Y2ggKHRva2VuKGNoYXJhY3RlcikpIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgICAgLy8gJlxcZlxuICAgICAgICBpZiAoY2hhcmFjdGVyID09PSAzOCAmJiBwZWVrKCkgPT09IDEyKSB7XG4gICAgICAgICAgLy8gdGhpcyBpcyBub3QgMTAwJSBjb3JyZWN0LCB3ZSBkb24ndCBhY2NvdW50IGZvciBsaXRlcmFsIHNlcXVlbmNlcyBoZXJlIC0gbGlrZSBmb3IgZXhhbXBsZSBxdW90ZWQgc3RyaW5nc1xuICAgICAgICAgIC8vIHN0eWxpcyBpbnNlcnRzIFxcZiBhZnRlciAmIHRvIGtub3cgd2hlbiAmIHdoZXJlIGl0IHNob3VsZCByZXBsYWNlIHRoaXMgc2VxdWVuY2Ugd2l0aCB0aGUgY29udGV4dCBzZWxlY3RvclxuICAgICAgICAgIC8vIGFuZCB3aGVuIGl0IHNob3VsZCBqdXN0IGNvbmNhdGVuYXRlIHRoZSBvdXRlciBhbmQgaW5uZXIgc2VsZWN0b3JzXG4gICAgICAgICAgLy8gaXQncyB2ZXJ5IHVubGlrZWx5IGZvciB0aGlzIHNlcXVlbmNlIHRvIGFjdHVhbGx5IGFwcGVhciBpbiBhIGRpZmZlcmVudCBjb250ZXh0LCBzbyB3ZSBqdXN0IGxldmVyYWdlIHRoaXMgZmFjdCBoZXJlXG4gICAgICAgICAgcG9pbnRzW2luZGV4XSA9IDE7XG4gICAgICAgIH1cblxuICAgICAgICBwYXJzZWRbaW5kZXhdICs9IGlkZW50aWZpZXJXaXRoUG9pbnRUcmFja2luZyhwb3NpdGlvbiAtIDEsIHBvaW50cywgaW5kZXgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAyOlxuICAgICAgICBwYXJzZWRbaW5kZXhdICs9IGRlbGltaXQoY2hhcmFjdGVyKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgNDpcbiAgICAgICAgLy8gY29tbWFcbiAgICAgICAgaWYgKGNoYXJhY3RlciA9PT0gNDQpIHtcbiAgICAgICAgICAvLyBjb2xvblxuICAgICAgICAgIHBhcnNlZFsrK2luZGV4XSA9IHBlZWsoKSA9PT0gNTggPyAnJlxcZicgOiAnJztcbiAgICAgICAgICBwb2ludHNbaW5kZXhdID0gcGFyc2VkW2luZGV4XS5sZW5ndGg7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgLy8gZmFsbHRocm91Z2hcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcGFyc2VkW2luZGV4XSArPSBmcm9tKGNoYXJhY3Rlcik7XG4gICAgfVxuICB9IHdoaWxlIChjaGFyYWN0ZXIgPSBuZXh0KCkpO1xuXG4gIHJldHVybiBwYXJzZWQ7XG59O1xuXG52YXIgZ2V0UnVsZXMgPSBmdW5jdGlvbiBnZXRSdWxlcyh2YWx1ZSwgcG9pbnRzKSB7XG4gIHJldHVybiBkZWFsbG9jKHRvUnVsZXMoYWxsb2ModmFsdWUpLCBwb2ludHMpKTtcbn07IC8vIFdlYWtTZXQgd291bGQgYmUgbW9yZSBhcHByb3ByaWF0ZSwgYnV0IG9ubHkgV2Vha01hcCBpcyBzdXBwb3J0ZWQgaW4gSUUxMVxuXG5cbnZhciBmaXhlZEVsZW1lbnRzID0gLyogI19fUFVSRV9fICovbmV3IFdlYWtNYXAoKTtcbnZhciBjb21wYXQgPSBmdW5jdGlvbiBjb21wYXQoZWxlbWVudCkge1xuICBpZiAoZWxlbWVudC50eXBlICE9PSAncnVsZScgfHwgIWVsZW1lbnQucGFyZW50IHx8IC8vIHBvc2l0aXZlIC5sZW5ndGggaW5kaWNhdGVzIHRoYXQgdGhpcyBydWxlIGNvbnRhaW5zIHBzZXVkb1xuICAvLyBuZWdhdGl2ZSAubGVuZ3RoIGluZGljYXRlcyB0aGF0IHRoaXMgcnVsZSBoYXMgYmVlbiBhbHJlYWR5IHByZWZpeGVkXG4gIGVsZW1lbnQubGVuZ3RoIDwgMSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciB2YWx1ZSA9IGVsZW1lbnQudmFsdWU7XG4gIHZhciBwYXJlbnQgPSBlbGVtZW50LnBhcmVudDtcbiAgdmFyIGlzSW1wbGljaXRSdWxlID0gZWxlbWVudC5jb2x1bW4gPT09IHBhcmVudC5jb2x1bW4gJiYgZWxlbWVudC5saW5lID09PSBwYXJlbnQubGluZTtcblxuICB3aGlsZSAocGFyZW50LnR5cGUgIT09ICdydWxlJykge1xuICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQ7XG4gICAgaWYgKCFwYXJlbnQpIHJldHVybjtcbiAgfSAvLyBzaG9ydC1jaXJjdWl0IGZvciB0aGUgc2ltcGxlc3QgY2FzZVxuXG5cbiAgaWYgKGVsZW1lbnQucHJvcHMubGVuZ3RoID09PSAxICYmIHZhbHVlLmNoYXJDb2RlQXQoMCkgIT09IDU4XG4gIC8qIGNvbG9uICovXG4gICYmICFmaXhlZEVsZW1lbnRzLmdldChwYXJlbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9IC8vIGlmIHRoaXMgaXMgYW4gaW1wbGljaXRseSBpbnNlcnRlZCBydWxlICh0aGUgb25lIGVhZ2VybHkgaW5zZXJ0ZWQgYXQgdGhlIGVhY2ggbmV3IG5lc3RlZCBsZXZlbClcbiAgLy8gdGhlbiB0aGUgcHJvcHMgaGFzIGFscmVhZHkgYmVlbiBtYW5pcHVsYXRlZCBiZWZvcmVoYW5kIGFzIHRoZXkgdGhhdCBhcnJheSBpcyBzaGFyZWQgYmV0d2VlbiBpdCBhbmQgaXRzIFwicnVsZSBwYXJlbnRcIlxuXG5cbiAgaWYgKGlzSW1wbGljaXRSdWxlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZml4ZWRFbGVtZW50cy5zZXQoZWxlbWVudCwgdHJ1ZSk7XG4gIHZhciBwb2ludHMgPSBbXTtcbiAgdmFyIHJ1bGVzID0gZ2V0UnVsZXModmFsdWUsIHBvaW50cyk7XG4gIHZhciBwYXJlbnRSdWxlcyA9IHBhcmVudC5wcm9wcztcblxuICBmb3IgKHZhciBpID0gMCwgayA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgcGFyZW50UnVsZXMubGVuZ3RoOyBqKyssIGsrKykge1xuICAgICAgZWxlbWVudC5wcm9wc1trXSA9IHBvaW50c1tpXSA/IHJ1bGVzW2ldLnJlcGxhY2UoLyZcXGYvZywgcGFyZW50UnVsZXNbal0pIDogcGFyZW50UnVsZXNbal0gKyBcIiBcIiArIHJ1bGVzW2ldO1xuICAgIH1cbiAgfVxufTtcbnZhciByZW1vdmVMYWJlbCA9IGZ1bmN0aW9uIHJlbW92ZUxhYmVsKGVsZW1lbnQpIHtcbiAgaWYgKGVsZW1lbnQudHlwZSA9PT0gJ2RlY2wnKSB7XG4gICAgdmFyIHZhbHVlID0gZWxlbWVudC52YWx1ZTtcblxuICAgIGlmICggLy8gY2hhcmNvZGUgZm9yIGxcbiAgICB2YWx1ZS5jaGFyQ29kZUF0KDApID09PSAxMDggJiYgLy8gY2hhcmNvZGUgZm9yIGJcbiAgICB2YWx1ZS5jaGFyQ29kZUF0KDIpID09PSA5OCkge1xuICAgICAgLy8gdGhpcyBpZ25vcmVzIGxhYmVsXG4gICAgICBlbGVtZW50W1wicmV0dXJuXCJdID0gJyc7XG4gICAgICBlbGVtZW50LnZhbHVlID0gJyc7XG4gICAgfVxuICB9XG59O1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1mYWxsdGhyb3VnaCAqL1xuXG5mdW5jdGlvbiBwcmVmaXgodmFsdWUsIGxlbmd0aCkge1xuICBzd2l0Y2ggKGhhc2godmFsdWUsIGxlbmd0aCkpIHtcbiAgICAvLyBjb2xvci1hZGp1c3RcbiAgICBjYXNlIDUxMDM6XG4gICAgICByZXR1cm4gV0VCS0lUICsgJ3ByaW50LScgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIGFuaW1hdGlvbiwgYW5pbWF0aW9uLShkZWxheXxkaXJlY3Rpb258ZHVyYXRpb258ZmlsbC1tb2RlfGl0ZXJhdGlvbi1jb3VudHxuYW1lfHBsYXktc3RhdGV8dGltaW5nLWZ1bmN0aW9uKVxuXG4gICAgY2FzZSA1NzM3OlxuICAgIGNhc2UgNDIwMTpcbiAgICBjYXNlIDMxNzc6XG4gICAgY2FzZSAzNDMzOlxuICAgIGNhc2UgMTY0MTpcbiAgICBjYXNlIDQ0NTc6XG4gICAgY2FzZSAyOTIxOiAvLyB0ZXh0LWRlY29yYXRpb24sIGZpbHRlciwgY2xpcC1wYXRoLCBiYWNrZmFjZS12aXNpYmlsaXR5LCBjb2x1bW4sIGJveC1kZWNvcmF0aW9uLWJyZWFrXG5cbiAgICBjYXNlIDU1NzI6XG4gICAgY2FzZSA2MzU2OlxuICAgIGNhc2UgNTg0NDpcbiAgICBjYXNlIDMxOTE6XG4gICAgY2FzZSA2NjQ1OlxuICAgIGNhc2UgMzAwNTogLy8gbWFzaywgbWFzay1pbWFnZSwgbWFzay0obW9kZXxjbGlwfHNpemUpLCBtYXNrLShyZXBlYXR8b3JpZ2luKSwgbWFzay1wb3NpdGlvbiwgbWFzay1jb21wb3NpdGUsXG5cbiAgICBjYXNlIDYzOTE6XG4gICAgY2FzZSA1ODc5OlxuICAgIGNhc2UgNTYyMzpcbiAgICBjYXNlIDYxMzU6XG4gICAgY2FzZSA0NTk5OlxuICAgIGNhc2UgNDg1NTogLy8gYmFja2dyb3VuZC1jbGlwLCBjb2x1bW5zLCBjb2x1bW4tKGNvdW50fGZpbGx8Z2FwfHJ1bGV8cnVsZS1jb2xvcnxydWxlLXN0eWxlfHJ1bGUtd2lkdGh8c3Bhbnx3aWR0aClcblxuICAgIGNhc2UgNDIxNTpcbiAgICBjYXNlIDYzODk6XG4gICAgY2FzZSA1MTA5OlxuICAgIGNhc2UgNTM2NTpcbiAgICBjYXNlIDU2MjE6XG4gICAgY2FzZSAzODI5OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gYXBwZWFyYW5jZSwgdXNlci1zZWxlY3QsIHRyYW5zZm9ybSwgaHlwaGVucywgdGV4dC1zaXplLWFkanVzdFxuXG4gICAgY2FzZSA1MzQ5OlxuICAgIGNhc2UgNDI0NjpcbiAgICBjYXNlIDQ4MTA6XG4gICAgY2FzZSA2OTY4OlxuICAgIGNhc2UgMjc1NjpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1PWiArIHZhbHVlICsgTVMgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIGZsZXgsIGZsZXgtZGlyZWN0aW9uXG5cbiAgICBjYXNlIDY4Mjg6XG4gICAgY2FzZSA0MjY4OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIG9yZGVyXG5cbiAgICBjYXNlIDYxNjU6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArICdmbGV4LScgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIGFsaWduLWl0ZW1zXG5cbiAgICBjYXNlIDUxODc6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyByZXBsYWNlKHZhbHVlLCAvKFxcdyspLisoOlteXSspLywgV0VCS0lUICsgJ2JveC0kMSQyJyArIE1TICsgJ2ZsZXgtJDEkMicpICsgdmFsdWU7XG4gICAgLy8gYWxpZ24tc2VsZlxuXG4gICAgY2FzZSA1NDQzOlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyAnZmxleC1pdGVtLScgKyByZXBsYWNlKHZhbHVlLCAvZmxleC18LXNlbGYvLCAnJykgKyB2YWx1ZTtcbiAgICAvLyBhbGlnbi1jb250ZW50XG5cbiAgICBjYXNlIDQ2NzU6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArICdmbGV4LWxpbmUtcGFjaycgKyByZXBsYWNlKHZhbHVlLCAvYWxpZ24tY29udGVudHxmbGV4LXwtc2VsZi8sICcnKSArIHZhbHVlO1xuICAgIC8vIGZsZXgtc2hyaW5rXG5cbiAgICBjYXNlIDU1NDg6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsICdzaHJpbmsnLCAnbmVnYXRpdmUnKSArIHZhbHVlO1xuICAgIC8vIGZsZXgtYmFzaXNcblxuICAgIGNhc2UgNTI5MjpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgJ2Jhc2lzJywgJ3ByZWZlcnJlZC1zaXplJykgKyB2YWx1ZTtcbiAgICAvLyBmbGV4LWdyb3dcblxuICAgIGNhc2UgNjA2MDpcbiAgICAgIHJldHVybiBXRUJLSVQgKyAnYm94LScgKyByZXBsYWNlKHZhbHVlLCAnLWdyb3cnLCAnJykgKyBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgJ2dyb3cnLCAncG9zaXRpdmUnKSArIHZhbHVlO1xuICAgIC8vIHRyYW5zaXRpb25cblxuICAgIGNhc2UgNDU1NDpcbiAgICAgIHJldHVybiBXRUJLSVQgKyByZXBsYWNlKHZhbHVlLCAvKFteLV0pKHRyYW5zZm9ybSkvZywgJyQxJyArIFdFQktJVCArICckMicpICsgdmFsdWU7XG4gICAgLy8gY3Vyc29yXG5cbiAgICBjYXNlIDYxODc6XG4gICAgICByZXR1cm4gcmVwbGFjZShyZXBsYWNlKHJlcGxhY2UodmFsdWUsIC8oem9vbS18Z3JhYikvLCBXRUJLSVQgKyAnJDEnKSwgLyhpbWFnZS1zZXQpLywgV0VCS0lUICsgJyQxJyksIHZhbHVlLCAnJykgKyB2YWx1ZTtcbiAgICAvLyBiYWNrZ3JvdW5kLCBiYWNrZ3JvdW5kLWltYWdlXG5cbiAgICBjYXNlIDU0OTU6XG4gICAgY2FzZSAzOTU5OlxuICAgICAgcmV0dXJuIHJlcGxhY2UodmFsdWUsIC8oaW1hZ2Utc2V0XFwoW15dKikvLCBXRUJLSVQgKyAnJDEnICsgJyRgJDEnKTtcbiAgICAvLyBqdXN0aWZ5LWNvbnRlbnRcblxuICAgIGNhc2UgNDk2ODpcbiAgICAgIHJldHVybiByZXBsYWNlKHJlcGxhY2UodmFsdWUsIC8oLis6KShmbGV4LSk/KC4qKS8sIFdFQktJVCArICdib3gtcGFjazokMycgKyBNUyArICdmbGV4LXBhY2s6JDMnKSwgL3MuKy1iW147XSsvLCAnanVzdGlmeScpICsgV0VCS0lUICsgdmFsdWUgKyB2YWx1ZTtcbiAgICAvLyAobWFyZ2lufHBhZGRpbmcpLWlubGluZS0oc3RhcnR8ZW5kKVxuXG4gICAgY2FzZSA0MDk1OlxuICAgIGNhc2UgMzU4MzpcbiAgICBjYXNlIDQwNjg6XG4gICAgY2FzZSAyNTMyOlxuICAgICAgcmV0dXJuIHJlcGxhY2UodmFsdWUsIC8oLispLWlubGluZSguKykvLCBXRUJLSVQgKyAnJDEkMicpICsgdmFsdWU7XG4gICAgLy8gKG1pbnxtYXgpPyh3aWR0aHxoZWlnaHR8aW5saW5lLXNpemV8YmxvY2stc2l6ZSlcblxuICAgIGNhc2UgODExNjpcbiAgICBjYXNlIDcwNTk6XG4gICAgY2FzZSA1NzUzOlxuICAgIGNhc2UgNTUzNTpcbiAgICBjYXNlIDU0NDU6XG4gICAgY2FzZSA1NzAxOlxuICAgIGNhc2UgNDkzMzpcbiAgICBjYXNlIDQ2Nzc6XG4gICAgY2FzZSA1NTMzOlxuICAgIGNhc2UgNTc4OTpcbiAgICBjYXNlIDUwMjE6XG4gICAgY2FzZSA0NzY1OlxuICAgICAgLy8gc3RyZXRjaCwgbWF4LWNvbnRlbnQsIG1pbi1jb250ZW50LCBmaWxsLWF2YWlsYWJsZVxuICAgICAgaWYgKHN0cmxlbih2YWx1ZSkgLSAxIC0gbGVuZ3RoID4gNikgc3dpdGNoIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDEpKSB7XG4gICAgICAgIC8vIChtKWF4LWNvbnRlbnQsIChtKWluLWNvbnRlbnRcbiAgICAgICAgY2FzZSAxMDk6XG4gICAgICAgICAgLy8gLVxuICAgICAgICAgIGlmIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDQpICE9PSA0NSkgYnJlYWs7XG4gICAgICAgIC8vIChmKWlsbC1hdmFpbGFibGUsIChmKWl0LWNvbnRlbnRcblxuICAgICAgICBjYXNlIDEwMjpcbiAgICAgICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyguKzopKC4rKS0oW15dKykvLCAnJDEnICsgV0VCS0lUICsgJyQyLSQzJyArICckMScgKyBNT1ogKyAoY2hhcmF0KHZhbHVlLCBsZW5ndGggKyAzKSA9PSAxMDggPyAnJDMnIDogJyQyLSQzJykpICsgdmFsdWU7XG4gICAgICAgIC8vIChzKXRyZXRjaFxuXG4gICAgICAgIGNhc2UgMTE1OlxuICAgICAgICAgIHJldHVybiB+aW5kZXhvZih2YWx1ZSwgJ3N0cmV0Y2gnKSA/IHByZWZpeChyZXBsYWNlKHZhbHVlLCAnc3RyZXRjaCcsICdmaWxsLWF2YWlsYWJsZScpLCBsZW5ndGgpICsgdmFsdWUgOiB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIC8vIHBvc2l0aW9uOiBzdGlja3lcblxuICAgIGNhc2UgNDk0OTpcbiAgICAgIC8vIChzKXRpY2t5P1xuICAgICAgaWYgKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMSkgIT09IDExNSkgYnJlYWs7XG4gICAgLy8gZGlzcGxheTogKGZsZXh8aW5saW5lLWZsZXgpXG5cbiAgICBjYXNlIDY0NDQ6XG4gICAgICBzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgc3RybGVuKHZhbHVlKSAtIDMgLSAofmluZGV4b2YodmFsdWUsICchaW1wb3J0YW50JykgJiYgMTApKSkge1xuICAgICAgICAvLyBzdGljKGspeVxuICAgICAgICBjYXNlIDEwNzpcbiAgICAgICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgJzonLCAnOicgKyBXRUJLSVQpICsgdmFsdWU7XG4gICAgICAgIC8vIChpbmxpbmUtKT9mbChlKXhcblxuICAgICAgICBjYXNlIDEwMTpcbiAgICAgICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyguKzopKFteOyFdKykoO3whLispPy8sICckMScgKyBXRUJLSVQgKyAoY2hhcmF0KHZhbHVlLCAxNCkgPT09IDQ1ID8gJ2lubGluZS0nIDogJycpICsgJ2JveCQzJyArICckMScgKyBXRUJLSVQgKyAnJDIkMycgKyAnJDEnICsgTVMgKyAnJDJib3gkMycpICsgdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICAgIC8vIHdyaXRpbmctbW9kZVxuXG4gICAgY2FzZSA1OTM2OlxuICAgICAgc3dpdGNoIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDExKSkge1xuICAgICAgICAvLyB2ZXJ0aWNhbC1sKHIpXG4gICAgICAgIGNhc2UgMTE0OlxuICAgICAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgL1tzdmhdXFx3Ky1bdGJscl17Mn0vLCAndGInKSArIHZhbHVlO1xuICAgICAgICAvLyB2ZXJ0aWNhbC1yKGwpXG5cbiAgICAgICAgY2FzZSAxMDg6XG4gICAgICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAvW3N2aF1cXHcrLVt0YmxyXXsyfS8sICd0Yi1ybCcpICsgdmFsdWU7XG4gICAgICAgIC8vIGhvcml6b250YWwoLSl0YlxuXG4gICAgICAgIGNhc2UgNDU6XG4gICAgICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAvW3N2aF1cXHcrLVt0YmxyXXsyfS8sICdscicpICsgdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgdmFsdWUgKyB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxudmFyIHByZWZpeGVyID0gZnVuY3Rpb24gcHJlZml4ZXIoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykge1xuICBpZiAoZWxlbWVudC5sZW5ndGggPiAtMSkgaWYgKCFlbGVtZW50W1wicmV0dXJuXCJdKSBzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuICAgIGNhc2UgREVDTEFSQVRJT046XG4gICAgICBlbGVtZW50W1wicmV0dXJuXCJdID0gcHJlZml4KGVsZW1lbnQudmFsdWUsIGVsZW1lbnQubGVuZ3RoKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBLRVlGUkFNRVM6XG4gICAgICByZXR1cm4gc2VyaWFsaXplKFtjb3B5KGVsZW1lbnQsIHtcbiAgICAgICAgdmFsdWU6IHJlcGxhY2UoZWxlbWVudC52YWx1ZSwgJ0AnLCAnQCcgKyBXRUJLSVQpXG4gICAgICB9KV0sIGNhbGxiYWNrKTtcblxuICAgIGNhc2UgUlVMRVNFVDpcbiAgICAgIGlmIChlbGVtZW50Lmxlbmd0aCkgcmV0dXJuIGNvbWJpbmUoZWxlbWVudC5wcm9wcywgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHN3aXRjaCAobWF0Y2godmFsdWUsIC8oOjpwbGFjXFx3K3w6cmVhZC1cXHcrKS8pKSB7XG4gICAgICAgICAgLy8gOnJlYWQtKG9ubHl8d3JpdGUpXG4gICAgICAgICAgY2FzZSAnOnJlYWQtb25seSc6XG4gICAgICAgICAgY2FzZSAnOnJlYWQtd3JpdGUnOlxuICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZShbY29weShlbGVtZW50LCB7XG4gICAgICAgICAgICAgIHByb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocmVhZC1cXHcrKS8sICc6JyArIE1PWiArICckMScpXVxuICAgICAgICAgICAgfSldLCBjYWxsYmFjayk7XG4gICAgICAgICAgLy8gOnBsYWNlaG9sZGVyXG5cbiAgICAgICAgICBjYXNlICc6OnBsYWNlaG9sZGVyJzpcbiAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemUoW2NvcHkoZWxlbWVudCwge1xuICAgICAgICAgICAgICBwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sICc6JyArIFdFQktJVCArICdpbnB1dC0kMScpXVxuICAgICAgICAgICAgfSksIGNvcHkoZWxlbWVudCwge1xuICAgICAgICAgICAgICBwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sICc6JyArIE1PWiArICckMScpXVxuICAgICAgICAgICAgfSksIGNvcHkoZWxlbWVudCwge1xuICAgICAgICAgICAgICBwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sIE1TICsgJ2lucHV0LSQxJyldXG4gICAgICAgICAgICB9KV0sIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH0pO1xuICB9XG59O1xuXG52YXIgZGVmYXVsdFN0eWxpc1BsdWdpbnMgPSBbcHJlZml4ZXJdO1xuXG52YXIgY3JlYXRlQ2FjaGUgPSBmdW5jdGlvbiBjcmVhdGVDYWNoZShvcHRpb25zKSB7XG4gIHZhciBrZXkgPSBvcHRpb25zLmtleTtcblxuICBpZiAoa2V5ID09PSAnY3NzJykge1xuICAgIHZhciBzc3JTdHlsZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwic3R5bGVbZGF0YS1lbW90aW9uXTpub3QoW2RhdGEtc10pXCIpOyAvLyBnZXQgU1NSZWQgc3R5bGVzIG91dCBvZiB0aGUgd2F5IG9mIFJlYWN0J3MgaHlkcmF0aW9uXG4gICAgLy8gZG9jdW1lbnQuaGVhZCBpcyBhIHNhZmUgcGxhY2UgdG8gbW92ZSB0aGVtIHRvKHRob3VnaCBub3RlIGRvY3VtZW50LmhlYWQgaXMgbm90IG5lY2Vzc2FyaWx5IHRoZSBsYXN0IHBsYWNlIHRoZXkgd2lsbCBiZSlcbiAgICAvLyBub3RlIHRoaXMgdmVyeSB2ZXJ5IGludGVudGlvbmFsbHkgdGFyZ2V0cyBhbGwgc3R5bGUgZWxlbWVudHMgcmVnYXJkbGVzcyBvZiB0aGUga2V5IHRvIGVuc3VyZVxuICAgIC8vIHRoYXQgY3JlYXRpbmcgYSBjYWNoZSB3b3JrcyBpbnNpZGUgb2YgcmVuZGVyIG9mIGEgUmVhY3QgY29tcG9uZW50XG5cbiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHNzclN0eWxlcywgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIC8vIHdlIHdhbnQgdG8gb25seSBtb3ZlIGVsZW1lbnRzIHdoaWNoIGhhdmUgYSBzcGFjZSBpbiB0aGUgZGF0YS1lbW90aW9uIGF0dHJpYnV0ZSB2YWx1ZVxuICAgICAgLy8gYmVjYXVzZSB0aGF0IGluZGljYXRlcyB0aGF0IGl0IGlzIGFuIEVtb3Rpb24gMTEgc2VydmVyLXNpZGUgcmVuZGVyZWQgc3R5bGUgZWxlbWVudHNcbiAgICAgIC8vIHdoaWxlIHdlIHdpbGwgYWxyZWFkeSBpZ25vcmUgRW1vdGlvbiAxMSBjbGllbnQtc2lkZSBpbnNlcnRlZCBzdHlsZXMgYmVjYXVzZSBvZiB0aGUgOm5vdChbZGF0YS1zXSkgcGFydCBpbiB0aGUgc2VsZWN0b3JcbiAgICAgIC8vIEVtb3Rpb24gMTAgY2xpZW50LXNpZGUgaW5zZXJ0ZWQgc3R5bGVzIGRpZCBub3QgaGF2ZSBkYXRhLXMgKGJ1dCBpbXBvcnRhbnRseSBkaWQgbm90IGhhdmUgYSBzcGFjZSBpbiB0aGVpciBkYXRhLWVtb3Rpb24gYXR0cmlidXRlcylcbiAgICAgIC8vIHNvIGNoZWNraW5nIGZvciB0aGUgc3BhY2UgZW5zdXJlcyB0aGF0IGxvYWRpbmcgRW1vdGlvbiAxMSBhZnRlciBFbW90aW9uIDEwIGhhcyBpbnNlcnRlZCBzb21lIHN0eWxlc1xuICAgICAgLy8gd2lsbCBub3QgcmVzdWx0IGluIHRoZSBFbW90aW9uIDEwIHN0eWxlcyBiZWluZyBkZXN0cm95ZWRcbiAgICAgIHZhciBkYXRhRW1vdGlvbkF0dHJpYnV0ZSA9IG5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLWVtb3Rpb24nKTtcblxuICAgICAgaWYgKGRhdGFFbW90aW9uQXR0cmlidXRlLmluZGV4T2YoJyAnKSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKG5vZGUpO1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtcycsICcnKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhciBzdHlsaXNQbHVnaW5zID0gb3B0aW9ucy5zdHlsaXNQbHVnaW5zIHx8IGRlZmF1bHRTdHlsaXNQbHVnaW5zO1xuXG4gIHZhciBpbnNlcnRlZCA9IHt9O1xuICB2YXIgY29udGFpbmVyO1xuICB2YXIgbm9kZXNUb0h5ZHJhdGUgPSBbXTtcblxuICB7XG4gICAgY29udGFpbmVyID0gb3B0aW9ucy5jb250YWluZXIgfHwgZG9jdW1lbnQuaGVhZDtcbiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKCAvLyB0aGlzIG1lYW5zIHdlIHdpbGwgaWdub3JlIGVsZW1lbnRzIHdoaWNoIGRvbid0IGhhdmUgYSBzcGFjZSBpbiB0aGVtIHdoaWNoXG4gICAgLy8gbWVhbnMgdGhhdCB0aGUgc3R5bGUgZWxlbWVudHMgd2UncmUgbG9va2luZyBhdCBhcmUgb25seSBFbW90aW9uIDExIHNlcnZlci1yZW5kZXJlZCBzdHlsZSBlbGVtZW50c1xuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJzdHlsZVtkYXRhLWVtb3Rpb25ePVxcXCJcIiArIGtleSArIFwiIFxcXCJdXCIpLCBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgdmFyIGF0dHJpYiA9IG5vZGUuZ2V0QXR0cmlidXRlKFwiZGF0YS1lbW90aW9uXCIpLnNwbGl0KCcgJyk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXR0cmliLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGluc2VydGVkW2F0dHJpYltpXV0gPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBub2Rlc1RvSHlkcmF0ZS5wdXNoKG5vZGUpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFyIF9pbnNlcnQ7XG5cbiAgdmFyIG9tbmlwcmVzZW50UGx1Z2lucyA9IFtjb21wYXQsIHJlbW92ZUxhYmVsXTtcblxuICB7XG4gICAgdmFyIGN1cnJlbnRTaGVldDtcbiAgICB2YXIgZmluYWxpemluZ1BsdWdpbnMgPSBbc3RyaW5naWZ5LCBydWxlc2hlZXQoZnVuY3Rpb24gKHJ1bGUpIHtcbiAgICAgIGN1cnJlbnRTaGVldC5pbnNlcnQocnVsZSk7XG4gICAgfSldO1xuICAgIHZhciBzZXJpYWxpemVyID0gbWlkZGxld2FyZShvbW5pcHJlc2VudFBsdWdpbnMuY29uY2F0KHN0eWxpc1BsdWdpbnMsIGZpbmFsaXppbmdQbHVnaW5zKSk7XG5cbiAgICB2YXIgc3R5bGlzID0gZnVuY3Rpb24gc3R5bGlzKHN0eWxlcykge1xuICAgICAgcmV0dXJuIHNlcmlhbGl6ZShjb21waWxlKHN0eWxlcyksIHNlcmlhbGl6ZXIpO1xuICAgIH07XG5cbiAgICBfaW5zZXJ0ID0gZnVuY3Rpb24gaW5zZXJ0KHNlbGVjdG9yLCBzZXJpYWxpemVkLCBzaGVldCwgc2hvdWxkQ2FjaGUpIHtcbiAgICAgIGN1cnJlbnRTaGVldCA9IHNoZWV0O1xuXG4gICAgICBzdHlsaXMoc2VsZWN0b3IgPyBzZWxlY3RvciArIFwie1wiICsgc2VyaWFsaXplZC5zdHlsZXMgKyBcIn1cIiA6IHNlcmlhbGl6ZWQuc3R5bGVzKTtcblxuICAgICAgaWYgKHNob3VsZENhY2hlKSB7XG4gICAgICAgIGNhY2hlLmluc2VydGVkW3NlcmlhbGl6ZWQubmFtZV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICB2YXIgY2FjaGUgPSB7XG4gICAga2V5OiBrZXksXG4gICAgc2hlZXQ6IG5ldyBTdHlsZVNoZWV0KHtcbiAgICAgIGtleToga2V5LFxuICAgICAgY29udGFpbmVyOiBjb250YWluZXIsXG4gICAgICBub25jZTogb3B0aW9ucy5ub25jZSxcbiAgICAgIHNwZWVkeTogb3B0aW9ucy5zcGVlZHksXG4gICAgICBwcmVwZW5kOiBvcHRpb25zLnByZXBlbmQsXG4gICAgICBpbnNlcnRpb25Qb2ludDogb3B0aW9ucy5pbnNlcnRpb25Qb2ludFxuICAgIH0pLFxuICAgIG5vbmNlOiBvcHRpb25zLm5vbmNlLFxuICAgIGluc2VydGVkOiBpbnNlcnRlZCxcbiAgICByZWdpc3RlcmVkOiB7fSxcbiAgICBpbnNlcnQ6IF9pbnNlcnRcbiAgfTtcbiAgY2FjaGUuc2hlZXQuaHlkcmF0ZShub2Rlc1RvSHlkcmF0ZSk7XG4gIHJldHVybiBjYWNoZTtcbn07XG5cbmV4cG9ydCB7IGNyZWF0ZUNhY2hlIGFzIGRlZmF1bHQgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5655\n")},5659:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   A: () => (/* binding */ composeClasses)\n/* harmony export */ });\nfunction composeClasses(slots, getUtilityClass, classes = undefined) {\n  const output = {};\n  Object.keys(slots).forEach(\n  // `Object.keys(slots)` can't be wider than `T` because we infer `T` from `slots`.\n  // @ts-expect-error https://github.com/microsoft/TypeScript/pull/12253#issuecomment-263132208\n  slot => {\n    output[slot] = slots[slot].reduce((acc, key) => {\n      if (key) {\n        const utilityClass = getUtilityClass(key);\n        if (utilityClass !== '') {\n          acc.push(utilityClass);\n        }\n        if (classes && classes[key]) {\n          acc.push(classes[key]);\n        }\n      }\n      return acc;\n    }, []).join(' ');\n  });\n  return output;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTY1OS5qcyIsIm1hcHBpbmdzIjoiOzs7QUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS91dGlscy9lc20vY29tcG9zZUNsYXNzZXMvY29tcG9zZUNsYXNzZXMuanM/Njg2MyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0VXRpbGl0eUNsYXNzLCBjbGFzc2VzID0gdW5kZWZpbmVkKSB7XG4gIGNvbnN0IG91dHB1dCA9IHt9O1xuICBPYmplY3Qua2V5cyhzbG90cykuZm9yRWFjaChcbiAgLy8gYE9iamVjdC5rZXlzKHNsb3RzKWAgY2FuJ3QgYmUgd2lkZXIgdGhhbiBgVGAgYmVjYXVzZSB3ZSBpbmZlciBgVGAgZnJvbSBgc2xvdHNgLlxuICAvLyBAdHMtZXhwZWN0LWVycm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC9wdWxsLzEyMjUzI2lzc3VlY29tbWVudC0yNjMxMzIyMDhcbiAgc2xvdCA9PiB7XG4gICAgb3V0cHV0W3Nsb3RdID0gc2xvdHNbc2xvdF0ucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgaWYgKGtleSkge1xuICAgICAgICBjb25zdCB1dGlsaXR5Q2xhc3MgPSBnZXRVdGlsaXR5Q2xhc3Moa2V5KTtcbiAgICAgICAgaWYgKHV0aWxpdHlDbGFzcyAhPT0gJycpIHtcbiAgICAgICAgICBhY2MucHVzaCh1dGlsaXR5Q2xhc3MpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjbGFzc2VzICYmIGNsYXNzZXNba2V5XSkge1xuICAgICAgICAgIGFjYy5wdXNoKGNsYXNzZXNba2V5XSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgW10pLmpvaW4oJyAnKTtcbiAgfSk7XG4gIHJldHVybiBvdXRwdXQ7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5659\n")},5669:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   b: () => (/* binding */ useDefaultProps)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1594);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _mui_system_DefaultPropsProvider__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2221);\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4848);\n'use client';\n\n\n\n\n\n\nfunction DefaultPropsProvider(props) {\n  return /*#__PURE__*/_jsx(SystemDefaultPropsProvider, _extends({}, props));\n}\n false ? 0 : void 0;\n/* unused harmony default export */ var __WEBPACK_DEFAULT_EXPORT__ = ((/* unused pure expression or super */ null && (DefaultPropsProvider)));\nfunction useDefaultProps(params) {\n  return (0,_mui_system_DefaultPropsProvider__WEBPACK_IMPORTED_MODULE_2__/* .useDefaultProps */ .b)(params);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTY2OS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBRTBEO0FBQzNCO0FBQ0k7QUFDcUY7QUFDeEU7QUFDaEQ7QUFDQSxrRUFBa0U7QUFDbEU7QUFDQSxNQUFxQyxHQUFHLENBYXZDLENBQUM7QUFDRixzRUFBZSxvRUFBb0IsSUFBQztBQUM3QjtBQUNQLFNBQVMsMEZBQXFCO0FBQzlCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9EZWZhdWx0UHJvcHNQcm92aWRlci9EZWZhdWx0UHJvcHNQcm92aWRlci5qcz81YmQwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFN5c3RlbURlZmF1bHRQcm9wc1Byb3ZpZGVyLCB7IHVzZURlZmF1bHRQcm9wcyBhcyB1c2VTeXN0ZW1EZWZhdWx0UHJvcHMgfSBmcm9tICdAbXVpL3N5c3RlbS9EZWZhdWx0UHJvcHNQcm92aWRlcic7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZnVuY3Rpb24gRGVmYXVsdFByb3BzUHJvdmlkZXIocHJvcHMpIHtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFN5c3RlbURlZmF1bHRQcm9wc1Byb3ZpZGVyLCBfZXh0ZW5kcyh7fSwgcHJvcHMpKTtcbn1cbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IERlZmF1bHRQcm9wc1Byb3ZpZGVyLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgV2FybmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgLy8g4pSCIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4g4pSCXG4gIC8vIOKUgiBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgVHlwZVNjcmlwdCB0eXBlcyBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuIOKUglxuICAvLyDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWRcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBEZWZhdWx0UHJvcHNQcm92aWRlcjtcbmV4cG9ydCBmdW5jdGlvbiB1c2VEZWZhdWx0UHJvcHMocGFyYW1zKSB7XG4gIHJldHVybiB1c2VTeXN0ZW1EZWZhdWx0UHJvcHMocGFyYW1zKTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///5669\n")},5765:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n  A: () => (/* binding */ SvgIcon_SvgIcon)\n});\n\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/extends.js\nvar esm_extends = __webpack_require__(8168);\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\nvar objectWithoutPropertiesLoose = __webpack_require__(8587);\n// EXTERNAL MODULE: external \"React\"\nvar external_React_ = __webpack_require__(1594);\n// EXTERNAL MODULE: ./node_modules/clsx/dist/clsx.mjs\nvar clsx = __webpack_require__(4164);\n// EXTERNAL MODULE: ./node_modules/@mui/utils/esm/composeClasses/composeClasses.js\nvar composeClasses = __webpack_require__(5659);\n// EXTERNAL MODULE: ./node_modules/@mui/material/utils/capitalize.js\nvar capitalize = __webpack_require__(8466);\n// EXTERNAL MODULE: ./node_modules/@mui/material/DefaultPropsProvider/DefaultPropsProvider.js\nvar DefaultPropsProvider = __webpack_require__(5669);\n// EXTERNAL MODULE: ./node_modules/@mui/material/styles/styled.js\nvar styled = __webpack_require__(1848);\n// EXTERNAL MODULE: ./node_modules/@mui/utils/esm/generateUtilityClasses/generateUtilityClasses.js\nvar generateUtilityClasses = __webpack_require__(8413);\n// EXTERNAL MODULE: ./node_modules/@mui/utils/esm/generateUtilityClass/generateUtilityClass.js\nvar generateUtilityClass = __webpack_require__(1609);\n;// ./node_modules/@mui/material/SvgIcon/svgIconClasses.js\n\n\nfunction getSvgIconUtilityClass(slot) {\n  return (0,generateUtilityClass/* default */.Ay)('MuiSvgIcon', slot);\n}\nconst svgIconClasses = (0,generateUtilityClasses/* default */.A)('MuiSvgIcon', ['root', 'colorPrimary', 'colorSecondary', 'colorAction', 'colorError', 'colorDisabled', 'fontSizeInherit', 'fontSizeSmall', 'fontSizeMedium', 'fontSizeLarge']);\n/* harmony default export */ const SvgIcon_svgIconClasses = ((/* unused pure expression or super */ null && (svgIconClasses)));\n// EXTERNAL MODULE: ./node_modules/react/jsx-runtime.js\nvar jsx_runtime = __webpack_require__(4848);\n;// ./node_modules/@mui/material/SvgIcon/SvgIcon.js\n'use client';\n\n\n\nconst _excluded = [\"children\", \"className\", \"color\", \"component\", \"fontSize\", \"htmlColor\", \"inheritViewBox\", \"titleAccess\", \"viewBox\"];\n\n\n\n\n\n\n\n\n\n\nconst useUtilityClasses = ownerState => {\n  const {\n    color,\n    fontSize,\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['root', color !== 'inherit' && `color${(0,capitalize/* default */.A)(color)}`, `fontSize${(0,capitalize/* default */.A)(fontSize)}`]\n  };\n  return (0,composeClasses/* default */.A)(slots, getSvgIconUtilityClass, classes);\n};\nconst SvgIconRoot = (0,styled/* default */.Ay)('svg', {\n  name: 'MuiSvgIcon',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.root, ownerState.color !== 'inherit' && styles[`color${(0,capitalize/* default */.A)(ownerState.color)}`], styles[`fontSize${(0,capitalize/* default */.A)(ownerState.fontSize)}`]];\n  }\n})(({\n  theme,\n  ownerState\n}) => {\n  var _theme$transitions, _theme$transitions$cr, _theme$transitions2, _theme$typography, _theme$typography$pxT, _theme$typography2, _theme$typography2$px, _theme$typography3, _theme$typography3$px, _palette$ownerState$c, _palette, _palette2, _palette3;\n  return {\n    userSelect: 'none',\n    width: '1em',\n    height: '1em',\n    display: 'inline-block',\n    // the <svg> will define the property that has `currentColor`\n    // for example heroicons uses fill=\"none\" and stroke=\"currentColor\"\n    fill: ownerState.hasSvgAsChild ? undefined : 'currentColor',\n    flexShrink: 0,\n    transition: (_theme$transitions = theme.transitions) == null || (_theme$transitions$cr = _theme$transitions.create) == null ? void 0 : _theme$transitions$cr.call(_theme$transitions, 'fill', {\n      duration: (_theme$transitions2 = theme.transitions) == null || (_theme$transitions2 = _theme$transitions2.duration) == null ? void 0 : _theme$transitions2.shorter\n    }),\n    fontSize: {\n      inherit: 'inherit',\n      small: ((_theme$typography = theme.typography) == null || (_theme$typography$pxT = _theme$typography.pxToRem) == null ? void 0 : _theme$typography$pxT.call(_theme$typography, 20)) || '1.25rem',\n      medium: ((_theme$typography2 = theme.typography) == null || (_theme$typography2$px = _theme$typography2.pxToRem) == null ? void 0 : _theme$typography2$px.call(_theme$typography2, 24)) || '1.5rem',\n      large: ((_theme$typography3 = theme.typography) == null || (_theme$typography3$px = _theme$typography3.pxToRem) == null ? void 0 : _theme$typography3$px.call(_theme$typography3, 35)) || '2.1875rem'\n    }[ownerState.fontSize],\n    // TODO v5 deprecate, v6 remove for sx\n    color: (_palette$ownerState$c = (_palette = (theme.vars || theme).palette) == null || (_palette = _palette[ownerState.color]) == null ? void 0 : _palette.main) != null ? _palette$ownerState$c : {\n      action: (_palette2 = (theme.vars || theme).palette) == null || (_palette2 = _palette2.action) == null ? void 0 : _palette2.active,\n      disabled: (_palette3 = (theme.vars || theme).palette) == null || (_palette3 = _palette3.action) == null ? void 0 : _palette3.disabled,\n      inherit: undefined\n    }[ownerState.color]\n  };\n});\nconst SvgIcon = /*#__PURE__*/external_React_.forwardRef(function SvgIcon(inProps, ref) {\n  const props = (0,DefaultPropsProvider/* useDefaultProps */.b)({\n    props: inProps,\n    name: 'MuiSvgIcon'\n  });\n  const {\n      children,\n      className,\n      color = 'inherit',\n      component = 'svg',\n      fontSize = 'medium',\n      htmlColor,\n      inheritViewBox = false,\n      titleAccess,\n      viewBox = '0 0 24 24'\n    } = props,\n    other = (0,objectWithoutPropertiesLoose/* default */.A)(props, _excluded);\n  const hasSvgAsChild = /*#__PURE__*/external_React_.isValidElement(children) && children.type === 'svg';\n  const ownerState = (0,esm_extends/* default */.A)({}, props, {\n    color,\n    component,\n    fontSize,\n    instanceFontSize: inProps.fontSize,\n    inheritViewBox,\n    viewBox,\n    hasSvgAsChild\n  });\n  const more = {};\n  if (!inheritViewBox) {\n    more.viewBox = viewBox;\n  }\n  const classes = useUtilityClasses(ownerState);\n  return /*#__PURE__*/(0,jsx_runtime.jsxs)(SvgIconRoot, (0,esm_extends/* default */.A)({\n    as: component,\n    className: (0,clsx/* default */.A)(classes.root, className),\n    focusable: \"false\",\n    color: htmlColor,\n    \"aria-hidden\": titleAccess ? undefined : true,\n    role: titleAccess ? 'img' : undefined,\n    ref: ref\n  }, more, other, hasSvgAsChild && children.props, {\n    ownerState: ownerState,\n    children: [hasSvgAsChild ? children.props.children : children, titleAccess ? /*#__PURE__*/(0,jsx_runtime.jsx)(\"title\", {\n      children: titleAccess\n    }) : null]\n  }));\n});\n false ? 0 : void 0;\nSvgIcon.muiName = 'SvgIcon';\n/* harmony default export */ const SvgIcon_SvgIcon = (SvgIcon);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTc2NS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBdUU7QUFDSjtBQUM1RDtBQUNQLFNBQVMsd0NBQW9CO0FBQzdCO0FBQ0EsdUJBQXVCLHlDQUFzQjtBQUM3Qyw2REFBZSw4REFBYyxJOzs7O0FDTjdCOztBQUUwRDtBQUMwQztBQUNwRztBQUMrQjtBQUNJO0FBQ1g7QUFDK0I7QUFDVjtBQUNhO0FBQ3BCO0FBQ29CO0FBQ1Y7QUFDRTtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0Esa0RBQWtELDZCQUFVLFFBQVEsY0FBYyw2QkFBVSxXQUFXO0FBQ3ZHO0FBQ0EsU0FBUyxpQ0FBYyxRQUFRLHNCQUFzQjtBQUNyRDtBQUNBLG9CQUFvQiwwQkFBTTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOLDBFQUEwRSw2QkFBVSxtQkFBbUIsc0JBQXNCLDZCQUFVLHNCQUFzQjtBQUM3SjtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDO0FBQ0QsNkJBQTZCLDBCQUFnQjtBQUM3QyxnQkFBZ0IsK0NBQWU7QUFDL0I7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTixZQUFZLCtDQUE2QjtBQUN6QyxxQ0FBcUMsOEJBQW9CO0FBQ3pELHFCQUFxQiw4QkFBUSxHQUFHO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0Isb0JBQUssY0FBYyw4QkFBUTtBQUNqRDtBQUNBLGVBQWUsdUJBQUk7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLDhGQUE4RixtQkFBSTtBQUNsRztBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0gsQ0FBQztBQUNELE1BQXFDLEdBQUcsQ0F1RXZDLENBQUM7QUFDRjtBQUNBLHNEQUFlLE9BQU8iLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1N2Z0ljb24vc3ZnSWNvbkNsYXNzZXMuanM/Yjc3ZCIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1N2Z0ljb24vU3ZnSWNvbi5qcz82N2FhIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0U3ZnSWNvblV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpU3ZnSWNvbicsIHNsb3QpO1xufVxuY29uc3Qgc3ZnSWNvbkNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlTdmdJY29uJywgWydyb290JywgJ2NvbG9yUHJpbWFyeScsICdjb2xvclNlY29uZGFyeScsICdjb2xvckFjdGlvbicsICdjb2xvckVycm9yJywgJ2NvbG9yRGlzYWJsZWQnLCAnZm9udFNpemVJbmhlcml0JywgJ2ZvbnRTaXplU21hbGwnLCAnZm9udFNpemVNZWRpdW0nLCAnZm9udFNpemVMYXJnZSddKTtcbmV4cG9ydCBkZWZhdWx0IHN2Z0ljb25DbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29sb3JcIiwgXCJjb21wb25lbnRcIiwgXCJmb250U2l6ZVwiLCBcImh0bWxDb2xvclwiLCBcImluaGVyaXRWaWV3Qm94XCIsIFwidGl0bGVBY2Nlc3NcIiwgXCJ2aWV3Qm94XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgeyB1c2VEZWZhdWx0UHJvcHMgfSBmcm9tICcuLi9EZWZhdWx0UHJvcHNQcm92aWRlcic7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsgZ2V0U3ZnSWNvblV0aWxpdHlDbGFzcyB9IGZyb20gJy4vc3ZnSWNvbkNsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjb2xvcixcbiAgICBmb250U2l6ZSxcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBjb2xvciAhPT0gJ2luaGVyaXQnICYmIGBjb2xvciR7Y2FwaXRhbGl6ZShjb2xvcil9YCwgYGZvbnRTaXplJHtjYXBpdGFsaXplKGZvbnRTaXplKX1gXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldFN2Z0ljb25VdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmNvbnN0IFN2Z0ljb25Sb290ID0gc3R5bGVkKCdzdmcnLCB7XG4gIG5hbWU6ICdNdWlTdmdJY29uJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3QsIG93bmVyU3RhdGUuY29sb3IgIT09ICdpbmhlcml0JyAmJiBzdHlsZXNbYGNvbG9yJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuY29sb3IpfWBdLCBzdHlsZXNbYGZvbnRTaXplJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuZm9udFNpemUpfWBdXTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IHtcbiAgdmFyIF90aGVtZSR0cmFuc2l0aW9ucywgX3RoZW1lJHRyYW5zaXRpb25zJGNyLCBfdGhlbWUkdHJhbnNpdGlvbnMyLCBfdGhlbWUkdHlwb2dyYXBoeSwgX3RoZW1lJHR5cG9ncmFwaHkkcHhULCBfdGhlbWUkdHlwb2dyYXBoeTIsIF90aGVtZSR0eXBvZ3JhcGh5MiRweCwgX3RoZW1lJHR5cG9ncmFwaHkzLCBfdGhlbWUkdHlwb2dyYXBoeTMkcHgsIF9wYWxldHRlJG93bmVyU3RhdGUkYywgX3BhbGV0dGUsIF9wYWxldHRlMiwgX3BhbGV0dGUzO1xuICByZXR1cm4ge1xuICAgIHVzZXJTZWxlY3Q6ICdub25lJyxcbiAgICB3aWR0aDogJzFlbScsXG4gICAgaGVpZ2h0OiAnMWVtJyxcbiAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICAvLyB0aGUgPHN2Zz4gd2lsbCBkZWZpbmUgdGhlIHByb3BlcnR5IHRoYXQgaGFzIGBjdXJyZW50Q29sb3JgXG4gICAgLy8gZm9yIGV4YW1wbGUgaGVyb2ljb25zIHVzZXMgZmlsbD1cIm5vbmVcIiBhbmQgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcbiAgICBmaWxsOiBvd25lclN0YXRlLmhhc1N2Z0FzQ2hpbGQgPyB1bmRlZmluZWQgOiAnY3VycmVudENvbG9yJyxcbiAgICBmbGV4U2hyaW5rOiAwLFxuICAgIHRyYW5zaXRpb246IChfdGhlbWUkdHJhbnNpdGlvbnMgPSB0aGVtZS50cmFuc2l0aW9ucykgPT0gbnVsbCB8fCAoX3RoZW1lJHRyYW5zaXRpb25zJGNyID0gX3RoZW1lJHRyYW5zaXRpb25zLmNyZWF0ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGVtZSR0cmFuc2l0aW9ucyRjci5jYWxsKF90aGVtZSR0cmFuc2l0aW9ucywgJ2ZpbGwnLCB7XG4gICAgICBkdXJhdGlvbjogKF90aGVtZSR0cmFuc2l0aW9uczIgPSB0aGVtZS50cmFuc2l0aW9ucykgPT0gbnVsbCB8fCAoX3RoZW1lJHRyYW5zaXRpb25zMiA9IF90aGVtZSR0cmFuc2l0aW9uczIuZHVyYXRpb24pID09IG51bGwgPyB2b2lkIDAgOiBfdGhlbWUkdHJhbnNpdGlvbnMyLnNob3J0ZXJcbiAgICB9KSxcbiAgICBmb250U2l6ZToge1xuICAgICAgaW5oZXJpdDogJ2luaGVyaXQnLFxuICAgICAgc21hbGw6ICgoX3RoZW1lJHR5cG9ncmFwaHkgPSB0aGVtZS50eXBvZ3JhcGh5KSA9PSBudWxsIHx8IChfdGhlbWUkdHlwb2dyYXBoeSRweFQgPSBfdGhlbWUkdHlwb2dyYXBoeS5weFRvUmVtKSA9PSBudWxsID8gdm9pZCAwIDogX3RoZW1lJHR5cG9ncmFwaHkkcHhULmNhbGwoX3RoZW1lJHR5cG9ncmFwaHksIDIwKSkgfHwgJzEuMjVyZW0nLFxuICAgICAgbWVkaXVtOiAoKF90aGVtZSR0eXBvZ3JhcGh5MiA9IHRoZW1lLnR5cG9ncmFwaHkpID09IG51bGwgfHwgKF90aGVtZSR0eXBvZ3JhcGh5MiRweCA9IF90aGVtZSR0eXBvZ3JhcGh5Mi5weFRvUmVtKSA9PSBudWxsID8gdm9pZCAwIDogX3RoZW1lJHR5cG9ncmFwaHkyJHB4LmNhbGwoX3RoZW1lJHR5cG9ncmFwaHkyLCAyNCkpIHx8ICcxLjVyZW0nLFxuICAgICAgbGFyZ2U6ICgoX3RoZW1lJHR5cG9ncmFwaHkzID0gdGhlbWUudHlwb2dyYXBoeSkgPT0gbnVsbCB8fCAoX3RoZW1lJHR5cG9ncmFwaHkzJHB4ID0gX3RoZW1lJHR5cG9ncmFwaHkzLnB4VG9SZW0pID09IG51bGwgPyB2b2lkIDAgOiBfdGhlbWUkdHlwb2dyYXBoeTMkcHguY2FsbChfdGhlbWUkdHlwb2dyYXBoeTMsIDM1KSkgfHwgJzIuMTg3NXJlbSdcbiAgICB9W293bmVyU3RhdGUuZm9udFNpemVdLFxuICAgIC8vIFRPRE8gdjUgZGVwcmVjYXRlLCB2NiByZW1vdmUgZm9yIHN4XG4gICAgY29sb3I6IChfcGFsZXR0ZSRvd25lclN0YXRlJGMgPSAoX3BhbGV0dGUgPSAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZSkgPT0gbnVsbCB8fCAoX3BhbGV0dGUgPSBfcGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9wYWxldHRlLm1haW4pICE9IG51bGwgPyBfcGFsZXR0ZSRvd25lclN0YXRlJGMgOiB7XG4gICAgICBhY3Rpb246IChfcGFsZXR0ZTIgPSAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZSkgPT0gbnVsbCB8fCAoX3BhbGV0dGUyID0gX3BhbGV0dGUyLmFjdGlvbikgPT0gbnVsbCA/IHZvaWQgMCA6IF9wYWxldHRlMi5hY3RpdmUsXG4gICAgICBkaXNhYmxlZDogKF9wYWxldHRlMyA9ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlKSA9PSBudWxsIHx8IChfcGFsZXR0ZTMgPSBfcGFsZXR0ZTMuYWN0aW9uKSA9PSBudWxsID8gdm9pZCAwIDogX3BhbGV0dGUzLmRpc2FibGVkLFxuICAgICAgaW5oZXJpdDogdW5kZWZpbmVkXG4gICAgfVtvd25lclN0YXRlLmNvbG9yXVxuICB9O1xufSk7XG5jb25zdCBTdmdJY29uID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gU3ZnSWNvbihpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VEZWZhdWx0UHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlTdmdJY29uJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb2xvciA9ICdpbmhlcml0JyxcbiAgICAgIGNvbXBvbmVudCA9ICdzdmcnLFxuICAgICAgZm9udFNpemUgPSAnbWVkaXVtJyxcbiAgICAgIGh0bWxDb2xvcixcbiAgICAgIGluaGVyaXRWaWV3Qm94ID0gZmFsc2UsXG4gICAgICB0aXRsZUFjY2VzcyxcbiAgICAgIHZpZXdCb3ggPSAnMCAwIDI0IDI0J1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBoYXNTdmdBc0NoaWxkID0gLyojX19QVVJFX18qL1JlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSAmJiBjaGlsZHJlbi50eXBlID09PSAnc3ZnJztcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbG9yLFxuICAgIGNvbXBvbmVudCxcbiAgICBmb250U2l6ZSxcbiAgICBpbnN0YW5jZUZvbnRTaXplOiBpblByb3BzLmZvbnRTaXplLFxuICAgIGluaGVyaXRWaWV3Qm94LFxuICAgIHZpZXdCb3gsXG4gICAgaGFzU3ZnQXNDaGlsZFxuICB9KTtcbiAgY29uc3QgbW9yZSA9IHt9O1xuICBpZiAoIWluaGVyaXRWaWV3Qm94KSB7XG4gICAgbW9yZS52aWV3Qm94ID0gdmlld0JveDtcbiAgfVxuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeHMoU3ZnSWNvblJvb3QsIF9leHRlbmRzKHtcbiAgICBhczogY29tcG9uZW50LFxuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgZm9jdXNhYmxlOiBcImZhbHNlXCIsXG4gICAgY29sb3I6IGh0bWxDb2xvcixcbiAgICBcImFyaWEtaGlkZGVuXCI6IHRpdGxlQWNjZXNzID8gdW5kZWZpbmVkIDogdHJ1ZSxcbiAgICByb2xlOiB0aXRsZUFjY2VzcyA/ICdpbWcnIDogdW5kZWZpbmVkLFxuICAgIHJlZjogcmVmXG4gIH0sIG1vcmUsIG90aGVyLCBoYXNTdmdBc0NoaWxkICYmIGNoaWxkcmVuLnByb3BzLCB7XG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICBjaGlsZHJlbjogW2hhc1N2Z0FzQ2hpbGQgPyBjaGlsZHJlbi5wcm9wcy5jaGlsZHJlbiA6IGNoaWxkcmVuLCB0aXRsZUFjY2VzcyA/IC8qI19fUFVSRV9fKi9fanN4KFwidGl0bGVcIiwge1xuICAgICAgY2hpbGRyZW46IHRpdGxlQWNjZXNzXG4gICAgfSkgOiBudWxsXVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFN2Z0ljb24ucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogTm9kZSBwYXNzZWQgaW50byB0aGUgU1ZHIGVsZW1lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICogWW91IGNhbiB1c2UgdGhlIGBodG1sQ29sb3JgIHByb3AgdG8gYXBwbHkgYSBjb2xvciBhdHRyaWJ1dGUgdG8gdGhlIFNWRyBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCAnaW5oZXJpdCdcbiAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2luaGVyaXQnLCAnYWN0aW9uJywgJ2Rpc2FibGVkJywgJ3ByaW1hcnknLCAnc2Vjb25kYXJ5JywgJ2Vycm9yJywgJ2luZm8nLCAnc3VjY2VzcycsICd3YXJuaW5nJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIFRoZSBmb250U2l6ZSBhcHBsaWVkIHRvIHRoZSBpY29uLiBEZWZhdWx0cyB0byAyNHB4LCBidXQgY2FuIGJlIGNvbmZpZ3VyZSB0byBpbmhlcml0IGZvbnQgc2l6ZS5cbiAgICogQGRlZmF1bHQgJ21lZGl1bSdcbiAgICovXG4gIGZvbnRTaXplOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2luaGVyaXQnLCAnbGFyZ2UnLCAnbWVkaXVtJywgJ3NtYWxsJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBBcHBsaWVzIGEgY29sb3IgYXR0cmlidXRlIHRvIHRoZSBTVkcgZWxlbWVudC5cbiAgICovXG4gIGh0bWxDb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHJvb3Qgbm9kZSB3aWxsIGluaGVyaXQgdGhlIGN1c3RvbSBgY29tcG9uZW50YCdzIHZpZXdCb3ggYW5kIHRoZSBgdmlld0JveGBcbiAgICogcHJvcCB3aWxsIGJlIGlnbm9yZWQuXG4gICAqIFVzZWZ1bCB3aGVuIHlvdSB3YW50IHRvIHJlZmVyZW5jZSBhIGN1c3RvbSBgY29tcG9uZW50YCBhbmQgaGF2ZSBgU3ZnSWNvbmAgcGFzcyB0aGF0XG4gICAqIGBjb21wb25lbnRgJ3Mgdmlld0JveCB0byB0aGUgcm9vdCBub2RlLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaW5oZXJpdFZpZXdCb3g6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHNoYXBlLXJlbmRlcmluZyBhdHRyaWJ1dGUuIFRoZSBiZWhhdmlvciBvZiB0aGUgZGlmZmVyZW50IG9wdGlvbnMgaXMgZGVzY3JpYmVkIG9uIHRoZVxuICAgKiBbTUROIFdlYiBEb2NzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9TVkcvQXR0cmlidXRlL3NoYXBlLXJlbmRlcmluZykuXG4gICAqIElmIHlvdSBhcmUgaGF2aW5nIGlzc3VlcyB3aXRoIGJsdXJyeSBpY29ucyB5b3Ugc2hvdWxkIGludmVzdGlnYXRlIHRoaXMgcHJvcC5cbiAgICovXG4gIHNoYXBlUmVuZGVyaW5nOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogUHJvdmlkZXMgYSBodW1hbi1yZWFkYWJsZSB0aXRsZSBmb3IgdGhlIGVsZW1lbnQgdGhhdCBjb250YWlucyBpdC5cbiAgICogaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy1hY2Nlc3MvI0VxdWl2YWxlbnRcbiAgICovXG4gIHRpdGxlQWNjZXNzOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQWxsb3dzIHlvdSB0byByZWRlZmluZSB3aGF0IHRoZSBjb29yZGluYXRlcyB3aXRob3V0IHVuaXRzIG1lYW4gaW5zaWRlIGFuIFNWRyBlbGVtZW50LlxuICAgKiBGb3IgZXhhbXBsZSwgaWYgdGhlIFNWRyBlbGVtZW50IGlzIDUwMCAod2lkdGgpIGJ5IDIwMCAoaGVpZ2h0KSxcbiAgICogYW5kIHlvdSBwYXNzIHZpZXdCb3g9XCIwIDAgNTAgMjBcIixcbiAgICogdGhpcyBtZWFucyB0aGF0IHRoZSBjb29yZGluYXRlcyBpbnNpZGUgdGhlIFNWRyB3aWxsIGdvIGZyb20gdGhlIHRvcCBsZWZ0IGNvcm5lciAoMCwwKVxuICAgKiB0byBib3R0b20gcmlnaHQgKDUwLDIwKSBhbmQgZWFjaCB1bml0IHdpbGwgYmUgd29ydGggMTBweC5cbiAgICogQGRlZmF1bHQgJzAgMCAyNCAyNCdcbiAgICovXG4gIHZpZXdCb3g6IFByb3BUeXBlcy5zdHJpbmdcbn0gOiB2b2lkIDA7XG5TdmdJY29uLm11aU5hbWUgPSAnU3ZnSWNvbic7XG5leHBvcnQgZGVmYXVsdCBTdmdJY29uOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5765\n")},5926:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval('var __webpack_unused_export__;\n\n"use client";\n\nvar _interopRequireDefault = __webpack_require__(4994);\n__webpack_unused_export__ = ({\n  value: true\n});\nexports.A = void 0;\nvar _createSvgIcon = _interopRequireDefault(__webpack_require__(2032));\nvar _jsxRuntime = __webpack_require__(4848);\nvar _default = exports.A = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)("path", {\n  d: "M20 9V7c0-1.1-.9-2-2-2h-3c0-1.66-1.34-3-3-3S9 3.34 9 5H6c-1.1 0-2 .9-2 2v2c-1.66 0-3 1.34-3 3s1.34 3 3 3v4c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2v-4c1.66 0 3-1.34 3-3s-1.34-3-3-3M7.5 11.5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5S9.83 13 9 13s-1.5-.67-1.5-1.5M16 17H8v-2h8zm-1-4c-.83 0-1.5-.67-1.5-1.5S14.17 10 15 10s1.5.67 1.5 1.5S15.83 13 15 13"\n}), \'SmartToy\');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTkyNi5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYjs7QUFFQSw2QkFBNkIsbUJBQU8sQ0FBQyxJQUE4QztBQUNuRiw2QkFBNkM7QUFDN0M7QUFDQSxDQUFDLENBQUM7QUFDRixTQUFlO0FBQ2YsNENBQTRDLG1CQUFPLENBQUMsSUFBdUI7QUFDM0Usa0JBQWtCLG1CQUFPLENBQUMsSUFBbUI7QUFDN0MsZUFBZSxTQUFlO0FBQzlCO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvaWNvbnMtbWF0ZXJpYWwvU21hcnRUb3kuanM/MTFhNSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblwidXNlIGNsaWVudFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX2NyZWF0ZVN2Z0ljb24gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3V0aWxzL2NyZWF0ZVN2Z0ljb25cIikpO1xudmFyIF9qc3hSdW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gKDAsIF9jcmVhdGVTdmdJY29uLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovKDAsIF9qc3hSdW50aW1lLmpzeCkoXCJwYXRoXCIsIHtcbiAgZDogXCJNMjAgOVY3YzAtMS4xLS45LTItMi0yaC0zYzAtMS42Ni0xLjM0LTMtMy0zUzkgMy4zNCA5IDVINmMtMS4xIDAtMiAuOS0yIDJ2MmMtMS42NiAwLTMgMS4zNC0zIDNzMS4zNCAzIDMgM3Y0YzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJ2LTRjMS42NiAwIDMtMS4zNCAzLTNzLTEuMzQtMy0zLTNNNy41IDExLjVjMC0uODMuNjctMS41IDEuNS0xLjVzMS41LjY3IDEuNSAxLjVTOS44MyAxMyA5IDEzcy0xLjUtLjY3LTEuNS0xLjVNMTYgMTdIOHYtMmg4em0tMS00Yy0uODMgMC0xLjUtLjY3LTEuNS0xLjVTMTQuMTcgMTAgMTUgMTBzMS41LjY3IDEuNSAxLjVTMTUuODMgMTMgMTUgMTNcIlxufSksICdTbWFydFRveScpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5926\n')},6248:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _mui_utils_ownerDocument__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2325);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_mui_utils_ownerDocument__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjI0OC5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQXFEO0FBQ3JELGlFQUFlLHlFQUFhIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy9vd25lckRvY3VtZW50LmpzP2FkZDciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG93bmVyRG9jdW1lbnQgZnJvbSAnQG11aS91dGlscy9vd25lckRvY3VtZW50JztcbmV4cG9ydCBkZWZhdWx0IG93bmVyRG9jdW1lbnQ7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6248\n')},6289:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   A: () => (/* binding */ memoize)\n/* harmony export */ });\nfunction memoize(fn) {\n  var cache = Object.create(null);\n  return function (arg) {\n    if (cache[arg] === undefined) cache[arg] = fn(arg);\n    return cache[arg];\n  };\n}\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjI4OS5qcyIsIm1hcHBpbmdzIjoiOzs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFOEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9tZW1vaXplL2Rpc3QvZW1vdGlvbi1tZW1vaXplLmVzbS5qcz83ZGVjIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIG1lbW9pemUoZm4pIHtcbiAgdmFyIGNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChhcmcpIHtcbiAgICBpZiAoY2FjaGVbYXJnXSA9PT0gdW5kZWZpbmVkKSBjYWNoZVthcmddID0gZm4oYXJnKTtcbiAgICByZXR1cm4gY2FjaGVbYXJnXTtcbiAgfTtcbn1cblxuZXhwb3J0IHsgbWVtb2l6ZSBhcyBkZWZhdWx0IH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6289\n")},6314:module=>{"use strict";eval('\n\n/*\n  MIT License https://www.opensource.org/licenses/mit-license.php\n  Author Tobias Koppers @sokra\n*/\nmodule.exports = function (cssWithMappingToString) {\n  var list = [];\n\n  // return the list of modules as css string\n  list.toString = function toString() {\n    return this.map(function (item) {\n      var content = "";\n      var needLayer = typeof item[5] !== "undefined";\n      if (item[4]) {\n        content += "@supports (".concat(item[4], ") {");\n      }\n      if (item[2]) {\n        content += "@media ".concat(item[2], " {");\n      }\n      if (needLayer) {\n        content += "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {");\n      }\n      content += cssWithMappingToString(item);\n      if (needLayer) {\n        content += "}";\n      }\n      if (item[2]) {\n        content += "}";\n      }\n      if (item[4]) {\n        content += "}";\n      }\n      return content;\n    }).join("");\n  };\n\n  // import a list of modules into the list\n  list.i = function i(modules, media, dedupe, supports, layer) {\n    if (typeof modules === "string") {\n      modules = [[null, modules, undefined]];\n    }\n    var alreadyImportedModules = {};\n    if (dedupe) {\n      for (var k = 0; k < this.length; k++) {\n        var id = this[k][0];\n        if (id != null) {\n          alreadyImportedModules[id] = true;\n        }\n      }\n    }\n    for (var _k = 0; _k < modules.length; _k++) {\n      var item = [].concat(modules[_k]);\n      if (dedupe && alreadyImportedModules[item[0]]) {\n        continue;\n      }\n      if (typeof layer !== "undefined") {\n        if (typeof item[5] === "undefined") {\n          item[5] = layer;\n        } else {\n          item[1] = "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {").concat(item[1], "}");\n          item[5] = layer;\n        }\n      }\n      if (media) {\n        if (!item[2]) {\n          item[2] = media;\n        } else {\n          item[1] = "@media ".concat(item[2], " {").concat(item[1], "}");\n          item[2] = media;\n        }\n      }\n      if (supports) {\n        if (!item[4]) {\n          item[4] = "".concat(supports);\n        } else {\n          item[1] = "@supports (".concat(item[4], ") {").concat(item[1], "}");\n          item[4] = supports;\n        }\n      }\n      list.push(item);\n    }\n  };\n  return list;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjMxNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscURBQXFEO0FBQ3JEO0FBQ0E7QUFDQSxnREFBZ0Q7QUFDaEQ7QUFDQTtBQUNBLHFGQUFxRjtBQUNyRjtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsaUJBQWlCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixxQkFBcUI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Ysc0ZBQXNGLHFCQUFxQjtBQUMzRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1YsaURBQWlELHFCQUFxQjtBQUN0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Ysc0RBQXNELHFCQUFxQjtBQUMzRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzPzI0ZmIiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qXG4gIE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG4gIEF1dGhvciBUb2JpYXMgS29wcGVycyBAc29rcmFcbiovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKSB7XG4gIHZhciBsaXN0ID0gW107XG5cbiAgLy8gcmV0dXJuIHRoZSBsaXN0IG9mIG1vZHVsZXMgYXMgY3NzIHN0cmluZ1xuICBsaXN0LnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICB2YXIgY29udGVudCA9IFwiXCI7XG4gICAgICB2YXIgbmVlZExheWVyID0gdHlwZW9mIGl0ZW1bNV0gIT09IFwidW5kZWZpbmVkXCI7XG4gICAgICBpZiAoaXRlbVs0XSkge1xuICAgICAgICBjb250ZW50ICs9IFwiQHN1cHBvcnRzIChcIi5jb25jYXQoaXRlbVs0XSwgXCIpIHtcIik7XG4gICAgICB9XG4gICAgICBpZiAoaXRlbVsyXSkge1xuICAgICAgICBjb250ZW50ICs9IFwiQG1lZGlhIFwiLmNvbmNhdChpdGVtWzJdLCBcIiB7XCIpO1xuICAgICAgfVxuICAgICAgaWYgKG5lZWRMYXllcikge1xuICAgICAgICBjb250ZW50ICs9IFwiQGxheWVyXCIuY29uY2F0KGl0ZW1bNV0ubGVuZ3RoID4gMCA/IFwiIFwiLmNvbmNhdChpdGVtWzVdKSA6IFwiXCIsIFwiIHtcIik7XG4gICAgICB9XG4gICAgICBjb250ZW50ICs9IGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcoaXRlbSk7XG4gICAgICBpZiAobmVlZExheWVyKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG4gICAgICBpZiAoaXRlbVsyXSkge1xuICAgICAgICBjb250ZW50ICs9IFwifVwiO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZW1bNF0pIHtcbiAgICAgICAgY29udGVudCArPSBcIn1cIjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb250ZW50O1xuICAgIH0pLmpvaW4oXCJcIik7XG4gIH07XG5cbiAgLy8gaW1wb3J0IGEgbGlzdCBvZiBtb2R1bGVzIGludG8gdGhlIGxpc3RcbiAgbGlzdC5pID0gZnVuY3Rpb24gaShtb2R1bGVzLCBtZWRpYSwgZGVkdXBlLCBzdXBwb3J0cywgbGF5ZXIpIHtcbiAgICBpZiAodHlwZW9mIG1vZHVsZXMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIG1vZHVsZXMgPSBbW251bGwsIG1vZHVsZXMsIHVuZGVmaW5lZF1dO1xuICAgIH1cbiAgICB2YXIgYWxyZWFkeUltcG9ydGVkTW9kdWxlcyA9IHt9O1xuICAgIGlmIChkZWR1cGUpIHtcbiAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgdGhpcy5sZW5ndGg7IGsrKykge1xuICAgICAgICB2YXIgaWQgPSB0aGlzW2tdWzBdO1xuICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgIGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaWRdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKHZhciBfayA9IDA7IF9rIDwgbW9kdWxlcy5sZW5ndGg7IF9rKyspIHtcbiAgICAgIHZhciBpdGVtID0gW10uY29uY2F0KG1vZHVsZXNbX2tdKTtcbiAgICAgIGlmIChkZWR1cGUgJiYgYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpdGVtWzBdXSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgbGF5ZXIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpdGVtWzVdID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgaXRlbVs1XSA9IGxheWVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1bMV0gPSBcIkBsYXllclwiLmNvbmNhdChpdGVtWzVdLmxlbmd0aCA+IDAgPyBcIiBcIi5jb25jYXQoaXRlbVs1XSkgOiBcIlwiLCBcIiB7XCIpLmNvbmNhdChpdGVtWzFdLCBcIn1cIik7XG4gICAgICAgICAgaXRlbVs1XSA9IGxheWVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobWVkaWEpIHtcbiAgICAgICAgaWYgKCFpdGVtWzJdKSB7XG4gICAgICAgICAgaXRlbVsyXSA9IG1lZGlhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1bMV0gPSBcIkBtZWRpYSBcIi5jb25jYXQoaXRlbVsyXSwgXCIge1wiKS5jb25jYXQoaXRlbVsxXSwgXCJ9XCIpO1xuICAgICAgICAgIGl0ZW1bMl0gPSBtZWRpYTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHN1cHBvcnRzKSB7XG4gICAgICAgIGlmICghaXRlbVs0XSkge1xuICAgICAgICAgIGl0ZW1bNF0gPSBcIlwiLmNvbmNhdChzdXBwb3J0cyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQHN1cHBvcnRzIChcIi5jb25jYXQoaXRlbVs0XSwgXCIpIHtcIikuY29uY2F0KGl0ZW1bMV0sIFwifVwiKTtcbiAgICAgICAgICBpdGVtWzRdID0gc3VwcG9ydHM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxpc3QucHVzaChpdGVtKTtcbiAgICB9XG4gIH07XG4gIHJldHVybiBsaXN0O1xufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6314\n')},6461:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval("var __webpack_unused_export__;\n\n\nvar _interopRequireDefault = __webpack_require__(4994);\n__webpack_unused_export__ = ({\n  value: true\n});\nexports.Ay = createStyled;\n__webpack_unused_export__ = shouldForwardProp;\n__webpack_unused_export__ = void 0;\nvar _extends2 = _interopRequireDefault(__webpack_require__(4634));\nvar _objectWithoutPropertiesLoose2 = _interopRequireDefault(__webpack_require__(4893));\nvar _styledEngine = _interopRequireWildcard(__webpack_require__(2532));\nvar _deepmerge = __webpack_require__(4239);\nvar _capitalize = _interopRequireDefault(__webpack_require__(7149));\nvar _getDisplayName = _interopRequireDefault(__webpack_require__(7320));\nvar _createTheme = _interopRequireDefault(__webpack_require__(3142));\nvar _styleFunctionSx = _interopRequireDefault(__webpack_require__(3857));\nconst _excluded = [\"ownerState\"],\n  _excluded2 = [\"variants\"],\n  _excluded3 = [\"name\", \"slot\", \"skipVariantsResolver\", \"skipSx\", \"overridesResolver\"];\n/* eslint-disable no-underscore-dangle */\nfunction _getRequireWildcardCache(e) { if (\"function\" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }\nfunction _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || \"object\" != typeof e && \"function\" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if (\"default\" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }\nfunction isEmpty(obj) {\n  return Object.keys(obj).length === 0;\n}\n\n// https://github.com/emotion-js/emotion/blob/26ded6109fcd8ca9875cc2ce4564fee678a3f3c5/packages/styled/src/utils.js#L40\nfunction isStringTag(tag) {\n  return typeof tag === 'string' &&\n  // 96 is one less than the char code\n  // for \"a\" so this is checking that\n  // it's a lowercase character\n  tag.charCodeAt(0) > 96;\n}\n\n// Update /system/styled/#api in case if this changes\nfunction shouldForwardProp(prop) {\n  return prop !== 'ownerState' && prop !== 'theme' && prop !== 'sx' && prop !== 'as';\n}\nconst systemDefaultTheme = __webpack_unused_export__ = (0, _createTheme.default)();\nconst lowercaseFirstLetter = string => {\n  if (!string) {\n    return string;\n  }\n  return string.charAt(0).toLowerCase() + string.slice(1);\n};\nfunction resolveTheme({\n  defaultTheme,\n  theme,\n  themeId\n}) {\n  return isEmpty(theme) ? defaultTheme : theme[themeId] || theme;\n}\nfunction defaultOverridesResolver(slot) {\n  if (!slot) {\n    return null;\n  }\n  return (props, styles) => styles[slot];\n}\nfunction processStyleArg(callableStyle, _ref) {\n  let {\n      ownerState\n    } = _ref,\n    props = (0, _objectWithoutPropertiesLoose2.default)(_ref, _excluded);\n  const resolvedStylesArg = typeof callableStyle === 'function' ? callableStyle((0, _extends2.default)({\n    ownerState\n  }, props)) : callableStyle;\n  if (Array.isArray(resolvedStylesArg)) {\n    return resolvedStylesArg.flatMap(resolvedStyle => processStyleArg(resolvedStyle, (0, _extends2.default)({\n      ownerState\n    }, props)));\n  }\n  if (!!resolvedStylesArg && typeof resolvedStylesArg === 'object' && Array.isArray(resolvedStylesArg.variants)) {\n    const {\n        variants = []\n      } = resolvedStylesArg,\n      otherStyles = (0, _objectWithoutPropertiesLoose2.default)(resolvedStylesArg, _excluded2);\n    let result = otherStyles;\n    variants.forEach(variant => {\n      let isMatch = true;\n      if (typeof variant.props === 'function') {\n        isMatch = variant.props((0, _extends2.default)({\n          ownerState\n        }, props, ownerState));\n      } else {\n        Object.keys(variant.props).forEach(key => {\n          if ((ownerState == null ? void 0 : ownerState[key]) !== variant.props[key] && props[key] !== variant.props[key]) {\n            isMatch = false;\n          }\n        });\n      }\n      if (isMatch) {\n        if (!Array.isArray(result)) {\n          result = [result];\n        }\n        result.push(typeof variant.style === 'function' ? variant.style((0, _extends2.default)({\n          ownerState\n        }, props, ownerState)) : variant.style);\n      }\n    });\n    return result;\n  }\n  return resolvedStylesArg;\n}\nfunction createStyled(input = {}) {\n  const {\n    themeId,\n    defaultTheme = systemDefaultTheme,\n    rootShouldForwardProp = shouldForwardProp,\n    slotShouldForwardProp = shouldForwardProp\n  } = input;\n  const systemSx = props => {\n    return (0, _styleFunctionSx.default)((0, _extends2.default)({}, props, {\n      theme: resolveTheme((0, _extends2.default)({}, props, {\n        defaultTheme,\n        themeId\n      }))\n    }));\n  };\n  systemSx.__mui_systemSx = true;\n  return (tag, inputOptions = {}) => {\n    // Filter out the `sx` style function from the previous styled component to prevent unnecessary styles generated by the composite components.\n    (0, _styledEngine.internal_processStyles)(tag, styles => styles.filter(style => !(style != null && style.__mui_systemSx)));\n    const {\n        name: componentName,\n        slot: componentSlot,\n        skipVariantsResolver: inputSkipVariantsResolver,\n        skipSx: inputSkipSx,\n        // TODO v6: remove `lowercaseFirstLetter()` in the next major release\n        // For more details: https://github.com/mui/material-ui/pull/37908\n        overridesResolver = defaultOverridesResolver(lowercaseFirstLetter(componentSlot))\n      } = inputOptions,\n      options = (0, _objectWithoutPropertiesLoose2.default)(inputOptions, _excluded3);\n\n    // if skipVariantsResolver option is defined, take the value, otherwise, true for root and false for other slots.\n    const skipVariantsResolver = inputSkipVariantsResolver !== undefined ? inputSkipVariantsResolver :\n    // TODO v6: remove `Root` in the next major release\n    // For more details: https://github.com/mui/material-ui/pull/37908\n    componentSlot && componentSlot !== 'Root' && componentSlot !== 'root' || false;\n    const skipSx = inputSkipSx || false;\n    let label;\n    if (false) // removed by dead control flow\n{}\n    let shouldForwardPropOption = shouldForwardProp;\n\n    // TODO v6: remove `Root` in the next major release\n    // For more details: https://github.com/mui/material-ui/pull/37908\n    if (componentSlot === 'Root' || componentSlot === 'root') {\n      shouldForwardPropOption = rootShouldForwardProp;\n    } else if (componentSlot) {\n      // any other slot specified\n      shouldForwardPropOption = slotShouldForwardProp;\n    } else if (isStringTag(tag)) {\n      // for string (html) tag, preserve the behavior in emotion & styled-components.\n      shouldForwardPropOption = undefined;\n    }\n    const defaultStyledResolver = (0, _styledEngine.default)(tag, (0, _extends2.default)({\n      shouldForwardProp: shouldForwardPropOption,\n      label\n    }, options));\n    const transformStyleArg = stylesArg => {\n      // On the server Emotion doesn't use React.forwardRef for creating components, so the created\n      // component stays as a function. This condition makes sure that we do not interpolate functions\n      // which are basically components used as a selectors.\n      if (typeof stylesArg === 'function' && stylesArg.__emotion_real !== stylesArg || (0, _deepmerge.isPlainObject)(stylesArg)) {\n        return props => processStyleArg(stylesArg, (0, _extends2.default)({}, props, {\n          theme: resolveTheme({\n            theme: props.theme,\n            defaultTheme,\n            themeId\n          })\n        }));\n      }\n      return stylesArg;\n    };\n    const muiStyledResolver = (styleArg, ...expressions) => {\n      let transformedStyleArg = transformStyleArg(styleArg);\n      const expressionsWithDefaultTheme = expressions ? expressions.map(transformStyleArg) : [];\n      if (componentName && overridesResolver) {\n        expressionsWithDefaultTheme.push(props => {\n          const theme = resolveTheme((0, _extends2.default)({}, props, {\n            defaultTheme,\n            themeId\n          }));\n          if (!theme.components || !theme.components[componentName] || !theme.components[componentName].styleOverrides) {\n            return null;\n          }\n          const styleOverrides = theme.components[componentName].styleOverrides;\n          const resolvedStyleOverrides = {};\n          // TODO: v7 remove iteration and use `resolveStyleArg(styleOverrides[slot])` directly\n          Object.entries(styleOverrides).forEach(([slotKey, slotStyle]) => {\n            resolvedStyleOverrides[slotKey] = processStyleArg(slotStyle, (0, _extends2.default)({}, props, {\n              theme\n            }));\n          });\n          return overridesResolver(props, resolvedStyleOverrides);\n        });\n      }\n      if (componentName && !skipVariantsResolver) {\n        expressionsWithDefaultTheme.push(props => {\n          var _theme$components;\n          const theme = resolveTheme((0, _extends2.default)({}, props, {\n            defaultTheme,\n            themeId\n          }));\n          const themeVariants = theme == null || (_theme$components = theme.components) == null || (_theme$components = _theme$components[componentName]) == null ? void 0 : _theme$components.variants;\n          return processStyleArg({\n            variants: themeVariants\n          }, (0, _extends2.default)({}, props, {\n            theme\n          }));\n        });\n      }\n      if (!skipSx) {\n        expressionsWithDefaultTheme.push(systemSx);\n      }\n      const numOfCustomFnsApplied = expressionsWithDefaultTheme.length - expressions.length;\n      if (Array.isArray(styleArg) && numOfCustomFnsApplied > 0) {\n        const placeholders = new Array(numOfCustomFnsApplied).fill('');\n        // If the type is array, than we need to add placeholders in the template for the overrides, variants and the sx styles.\n        transformedStyleArg = [...styleArg, ...placeholders];\n        transformedStyleArg.raw = [...styleArg.raw, ...placeholders];\n      }\n      const Component = defaultStyledResolver(transformedStyleArg, ...expressionsWithDefaultTheme);\n      if (false) // removed by dead control flow\n{}\n      if (tag.muiName) {\n        Component.muiName = tag.muiName;\n      }\n      return Component;\n    };\n    if (defaultStyledResolver.withConfig) {\n      muiStyledResolver.withConfig = defaultStyledResolver.withConfig;\n    }\n    return muiStyledResolver;\n  };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QVMxQztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9jcmVhdGVTdHlsZWQuanM/NzM1OSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gY3JlYXRlU3R5bGVkO1xuZXhwb3J0cy5zaG91bGRGb3J3YXJkUHJvcCA9IHNob3VsZEZvcndhcmRQcm9wO1xuZXhwb3J0cy5zeXN0ZW1EZWZhdWx0VGhlbWUgPSB2b2lkIDA7XG52YXIgX2V4dGVuZHMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9leHRlbmRzXCIpKTtcbnZhciBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIikpO1xudmFyIF9zdHlsZWRFbmdpbmUgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChyZXF1aXJlKFwiQG11aS9zdHlsZWQtZW5naW5lXCIpKTtcbnZhciBfZGVlcG1lcmdlID0gcmVxdWlyZShcIkBtdWkvdXRpbHMvZGVlcG1lcmdlXCIpO1xudmFyIF9jYXBpdGFsaXplID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQG11aS91dGlscy9jYXBpdGFsaXplXCIpKTtcbnZhciBfZ2V0RGlzcGxheU5hbWUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAbXVpL3V0aWxzL2dldERpc3BsYXlOYW1lXCIpKTtcbnZhciBfY3JlYXRlVGhlbWUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NyZWF0ZVRoZW1lXCIpKTtcbnZhciBfc3R5bGVGdW5jdGlvblN4ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9zdHlsZUZ1bmN0aW9uU3hcIikpO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wib3duZXJTdGF0ZVwiXSxcbiAgX2V4Y2x1ZGVkMiA9IFtcInZhcmlhbnRzXCJdLFxuICBfZXhjbHVkZWQzID0gW1wibmFtZVwiLCBcInNsb3RcIiwgXCJza2lwVmFyaWFudHNSZXNvbHZlclwiLCBcInNraXBTeFwiLCBcIm92ZXJyaWRlc1Jlc29sdmVyXCJdO1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZXJzY29yZS1kYW5nbGUgKi9cbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIFdlYWtNYXApIHJldHVybiBudWxsOyB2YXIgciA9IG5ldyBXZWFrTWFwKCksIHQgPSBuZXcgV2Vha01hcCgpOyByZXR1cm4gKF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSA9IGZ1bmN0aW9uIChlKSB7IHJldHVybiBlID8gdCA6IHI7IH0pKGUpOyB9XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChlLCByKSB7IGlmICghciAmJiBlICYmIGUuX19lc01vZHVsZSkgcmV0dXJuIGU7IGlmIChudWxsID09PSBlIHx8IFwib2JqZWN0XCIgIT0gdHlwZW9mIGUgJiYgXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlKSByZXR1cm4geyBkZWZhdWx0OiBlIH07IHZhciB0ID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKHIpOyBpZiAodCAmJiB0LmhhcyhlKSkgcmV0dXJuIHQuZ2V0KGUpOyB2YXIgbiA9IHsgX19wcm90b19fOiBudWxsIH0sIGEgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgZm9yICh2YXIgdSBpbiBlKSBpZiAoXCJkZWZhdWx0XCIgIT09IHUgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIHUpKSB7IHZhciBpID0gYSA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgdSkgOiBudWxsOyBpICYmIChpLmdldCB8fCBpLnNldCkgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkobiwgdSwgaSkgOiBuW3VdID0gZVt1XTsgfSByZXR1cm4gbi5kZWZhdWx0ID0gZSwgdCAmJiB0LnNldChlLCBuKSwgbjsgfVxuZnVuY3Rpb24gaXNFbXB0eShvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID09PSAwO1xufVxuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vZW1vdGlvbi1qcy9lbW90aW9uL2Jsb2IvMjZkZWQ2MTA5ZmNkOGNhOTg3NWNjMmNlNDU2NGZlZTY3OGEzZjNjNS9wYWNrYWdlcy9zdHlsZWQvc3JjL3V0aWxzLmpzI0w0MFxuZnVuY3Rpb24gaXNTdHJpbmdUYWcodGFnKSB7XG4gIHJldHVybiB0eXBlb2YgdGFnID09PSAnc3RyaW5nJyAmJlxuICAvLyA5NiBpcyBvbmUgbGVzcyB0aGFuIHRoZSBjaGFyIGNvZGVcbiAgLy8gZm9yIFwiYVwiIHNvIHRoaXMgaXMgY2hlY2tpbmcgdGhhdFxuICAvLyBpdCdzIGEgbG93ZXJjYXNlIGNoYXJhY3RlclxuICB0YWcuY2hhckNvZGVBdCgwKSA+IDk2O1xufVxuXG4vLyBVcGRhdGUgL3N5c3RlbS9zdHlsZWQvI2FwaSBpbiBjYXNlIGlmIHRoaXMgY2hhbmdlc1xuZnVuY3Rpb24gc2hvdWxkRm9yd2FyZFByb3AocHJvcCkge1xuICByZXR1cm4gcHJvcCAhPT0gJ293bmVyU3RhdGUnICYmIHByb3AgIT09ICd0aGVtZScgJiYgcHJvcCAhPT0gJ3N4JyAmJiBwcm9wICE9PSAnYXMnO1xufVxuY29uc3Qgc3lzdGVtRGVmYXVsdFRoZW1lID0gZXhwb3J0cy5zeXN0ZW1EZWZhdWx0VGhlbWUgPSAoMCwgX2NyZWF0ZVRoZW1lLmRlZmF1bHQpKCk7XG5jb25zdCBsb3dlcmNhc2VGaXJzdExldHRlciA9IHN0cmluZyA9PiB7XG4gIGlmICghc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuICByZXR1cm4gc3RyaW5nLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgc3RyaW5nLnNsaWNlKDEpO1xufTtcbmZ1bmN0aW9uIHJlc29sdmVUaGVtZSh7XG4gIGRlZmF1bHRUaGVtZSxcbiAgdGhlbWUsXG4gIHRoZW1lSWRcbn0pIHtcbiAgcmV0dXJuIGlzRW1wdHkodGhlbWUpID8gZGVmYXVsdFRoZW1lIDogdGhlbWVbdGhlbWVJZF0gfHwgdGhlbWU7XG59XG5mdW5jdGlvbiBkZWZhdWx0T3ZlcnJpZGVzUmVzb2x2ZXIoc2xvdCkge1xuICBpZiAoIXNsb3QpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlc1tzbG90XTtcbn1cbmZ1bmN0aW9uIHByb2Nlc3NTdHlsZUFyZyhjYWxsYWJsZVN0eWxlLCBfcmVmKSB7XG4gIGxldCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IF9yZWYsXG4gICAgcHJvcHMgPSAoMCwgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UyLmRlZmF1bHQpKF9yZWYsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHJlc29sdmVkU3R5bGVzQXJnID0gdHlwZW9mIGNhbGxhYmxlU3R5bGUgPT09ICdmdW5jdGlvbicgPyBjYWxsYWJsZVN0eWxlKCgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe1xuICAgIG93bmVyU3RhdGVcbiAgfSwgcHJvcHMpKSA6IGNhbGxhYmxlU3R5bGU7XG4gIGlmIChBcnJheS5pc0FycmF5KHJlc29sdmVkU3R5bGVzQXJnKSkge1xuICAgIHJldHVybiByZXNvbHZlZFN0eWxlc0FyZy5mbGF0TWFwKHJlc29sdmVkU3R5bGUgPT4gcHJvY2Vzc1N0eWxlQXJnKHJlc29sdmVkU3R5bGUsICgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0sIHByb3BzKSkpO1xuICB9XG4gIGlmICghIXJlc29sdmVkU3R5bGVzQXJnICYmIHR5cGVvZiByZXNvbHZlZFN0eWxlc0FyZyA9PT0gJ29iamVjdCcgJiYgQXJyYXkuaXNBcnJheShyZXNvbHZlZFN0eWxlc0FyZy52YXJpYW50cykpIHtcbiAgICBjb25zdCB7XG4gICAgICAgIHZhcmlhbnRzID0gW11cbiAgICAgIH0gPSByZXNvbHZlZFN0eWxlc0FyZyxcbiAgICAgIG90aGVyU3R5bGVzID0gKDAsIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlMi5kZWZhdWx0KShyZXNvbHZlZFN0eWxlc0FyZywgX2V4Y2x1ZGVkMik7XG4gICAgbGV0IHJlc3VsdCA9IG90aGVyU3R5bGVzO1xuICAgIHZhcmlhbnRzLmZvckVhY2godmFyaWFudCA9PiB7XG4gICAgICBsZXQgaXNNYXRjaCA9IHRydWU7XG4gICAgICBpZiAodHlwZW9mIHZhcmlhbnQucHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaXNNYXRjaCA9IHZhcmlhbnQucHJvcHMoKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7XG4gICAgICAgICAgb3duZXJTdGF0ZVxuICAgICAgICB9LCBwcm9wcywgb3duZXJTdGF0ZSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgT2JqZWN0LmtleXModmFyaWFudC5wcm9wcykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgIGlmICgob3duZXJTdGF0ZSA9PSBudWxsID8gdm9pZCAwIDogb3duZXJTdGF0ZVtrZXldKSAhPT0gdmFyaWFudC5wcm9wc1trZXldICYmIHByb3BzW2tleV0gIT09IHZhcmlhbnQucHJvcHNba2V5XSkge1xuICAgICAgICAgICAgaXNNYXRjaCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoaXNNYXRjaCkge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocmVzdWx0KSkge1xuICAgICAgICAgIHJlc3VsdCA9IFtyZXN1bHRdO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5wdXNoKHR5cGVvZiB2YXJpYW50LnN0eWxlID09PSAnZnVuY3Rpb24nID8gdmFyaWFudC5zdHlsZSgoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHtcbiAgICAgICAgICBvd25lclN0YXRlXG4gICAgICAgIH0sIHByb3BzLCBvd25lclN0YXRlKSkgOiB2YXJpYW50LnN0eWxlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHJldHVybiByZXNvbHZlZFN0eWxlc0FyZztcbn1cbmZ1bmN0aW9uIGNyZWF0ZVN0eWxlZChpbnB1dCA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICB0aGVtZUlkLFxuICAgIGRlZmF1bHRUaGVtZSA9IHN5c3RlbURlZmF1bHRUaGVtZSxcbiAgICByb290U2hvdWxkRm9yd2FyZFByb3AgPSBzaG91bGRGb3J3YXJkUHJvcCxcbiAgICBzbG90U2hvdWxkRm9yd2FyZFByb3AgPSBzaG91bGRGb3J3YXJkUHJvcFxuICB9ID0gaW5wdXQ7XG4gIGNvbnN0IHN5c3RlbVN4ID0gcHJvcHMgPT4ge1xuICAgIHJldHVybiAoMCwgX3N0eWxlRnVuY3Rpb25TeC5kZWZhdWx0KSgoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHt9LCBwcm9wcywge1xuICAgICAgdGhlbWU6IHJlc29sdmVUaGVtZSgoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHt9LCBwcm9wcywge1xuICAgICAgICBkZWZhdWx0VGhlbWUsXG4gICAgICAgIHRoZW1lSWRcbiAgICAgIH0pKVxuICAgIH0pKTtcbiAgfTtcbiAgc3lzdGVtU3guX19tdWlfc3lzdGVtU3ggPSB0cnVlO1xuICByZXR1cm4gKHRhZywgaW5wdXRPcHRpb25zID0ge30pID0+IHtcbiAgICAvLyBGaWx0ZXIgb3V0IHRoZSBgc3hgIHN0eWxlIGZ1bmN0aW9uIGZyb20gdGhlIHByZXZpb3VzIHN0eWxlZCBjb21wb25lbnQgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSBzdHlsZXMgZ2VuZXJhdGVkIGJ5IHRoZSBjb21wb3NpdGUgY29tcG9uZW50cy5cbiAgICAoMCwgX3N0eWxlZEVuZ2luZS5pbnRlcm5hbF9wcm9jZXNzU3R5bGVzKSh0YWcsIHN0eWxlcyA9PiBzdHlsZXMuZmlsdGVyKHN0eWxlID0+ICEoc3R5bGUgIT0gbnVsbCAmJiBzdHlsZS5fX211aV9zeXN0ZW1TeCkpKTtcbiAgICBjb25zdCB7XG4gICAgICAgIG5hbWU6IGNvbXBvbmVudE5hbWUsXG4gICAgICAgIHNsb3Q6IGNvbXBvbmVudFNsb3QsXG4gICAgICAgIHNraXBWYXJpYW50c1Jlc29sdmVyOiBpbnB1dFNraXBWYXJpYW50c1Jlc29sdmVyLFxuICAgICAgICBza2lwU3g6IGlucHV0U2tpcFN4LFxuICAgICAgICAvLyBUT0RPIHY2OiByZW1vdmUgYGxvd2VyY2FzZUZpcnN0TGV0dGVyKClgIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2VcbiAgICAgICAgLy8gRm9yIG1vcmUgZGV0YWlsczogaHR0cHM6Ly9naXRodWIuY29tL211aS9tYXRlcmlhbC11aS9wdWxsLzM3OTA4XG4gICAgICAgIG92ZXJyaWRlc1Jlc29sdmVyID0gZGVmYXVsdE92ZXJyaWRlc1Jlc29sdmVyKGxvd2VyY2FzZUZpcnN0TGV0dGVyKGNvbXBvbmVudFNsb3QpKVxuICAgICAgfSA9IGlucHV0T3B0aW9ucyxcbiAgICAgIG9wdGlvbnMgPSAoMCwgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UyLmRlZmF1bHQpKGlucHV0T3B0aW9ucywgX2V4Y2x1ZGVkMyk7XG5cbiAgICAvLyBpZiBza2lwVmFyaWFudHNSZXNvbHZlciBvcHRpb24gaXMgZGVmaW5lZCwgdGFrZSB0aGUgdmFsdWUsIG90aGVyd2lzZSwgdHJ1ZSBmb3Igcm9vdCBhbmQgZmFsc2UgZm9yIG90aGVyIHNsb3RzLlxuICAgIGNvbnN0IHNraXBWYXJpYW50c1Jlc29sdmVyID0gaW5wdXRTa2lwVmFyaWFudHNSZXNvbHZlciAhPT0gdW5kZWZpbmVkID8gaW5wdXRTa2lwVmFyaWFudHNSZXNvbHZlciA6XG4gICAgLy8gVE9ETyB2NjogcmVtb3ZlIGBSb290YCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlXG4gICAgLy8gRm9yIG1vcmUgZGV0YWlsczogaHR0cHM6Ly9naXRodWIuY29tL211aS9tYXRlcmlhbC11aS9wdWxsLzM3OTA4XG4gICAgY29tcG9uZW50U2xvdCAmJiBjb21wb25lbnRTbG90ICE9PSAnUm9vdCcgJiYgY29tcG9uZW50U2xvdCAhPT0gJ3Jvb3QnIHx8IGZhbHNlO1xuICAgIGNvbnN0IHNraXBTeCA9IGlucHV0U2tpcFN4IHx8IGZhbHNlO1xuICAgIGxldCBsYWJlbDtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKGNvbXBvbmVudE5hbWUpIHtcbiAgICAgICAgLy8gVE9ETyB2NjogcmVtb3ZlIGBsb3dlcmNhc2VGaXJzdExldHRlcigpYCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlXG4gICAgICAgIC8vIEZvciBtb3JlIGRldGFpbHM6IGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvcHVsbC8zNzkwOFxuICAgICAgICBsYWJlbCA9IGAke2NvbXBvbmVudE5hbWV9LSR7bG93ZXJjYXNlRmlyc3RMZXR0ZXIoY29tcG9uZW50U2xvdCB8fCAnUm9vdCcpfWA7XG4gICAgICB9XG4gICAgfVxuICAgIGxldCBzaG91bGRGb3J3YXJkUHJvcE9wdGlvbiA9IHNob3VsZEZvcndhcmRQcm9wO1xuXG4gICAgLy8gVE9ETyB2NjogcmVtb3ZlIGBSb290YCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlXG4gICAgLy8gRm9yIG1vcmUgZGV0YWlsczogaHR0cHM6Ly9naXRodWIuY29tL211aS9tYXRlcmlhbC11aS9wdWxsLzM3OTA4XG4gICAgaWYgKGNvbXBvbmVudFNsb3QgPT09ICdSb290JyB8fCBjb21wb25lbnRTbG90ID09PSAncm9vdCcpIHtcbiAgICAgIHNob3VsZEZvcndhcmRQcm9wT3B0aW9uID0gcm9vdFNob3VsZEZvcndhcmRQcm9wO1xuICAgIH0gZWxzZSBpZiAoY29tcG9uZW50U2xvdCkge1xuICAgICAgLy8gYW55IG90aGVyIHNsb3Qgc3BlY2lmaWVkXG4gICAgICBzaG91bGRGb3J3YXJkUHJvcE9wdGlvbiA9IHNsb3RTaG91bGRGb3J3YXJkUHJvcDtcbiAgICB9IGVsc2UgaWYgKGlzU3RyaW5nVGFnKHRhZykpIHtcbiAgICAgIC8vIGZvciBzdHJpbmcgKGh0bWwpIHRhZywgcHJlc2VydmUgdGhlIGJlaGF2aW9yIGluIGVtb3Rpb24gJiBzdHlsZWQtY29tcG9uZW50cy5cbiAgICAgIHNob3VsZEZvcndhcmRQcm9wT3B0aW9uID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBkZWZhdWx0U3R5bGVkUmVzb2x2ZXIgPSAoMCwgX3N0eWxlZEVuZ2luZS5kZWZhdWx0KSh0YWcsICgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe1xuICAgICAgc2hvdWxkRm9yd2FyZFByb3A6IHNob3VsZEZvcndhcmRQcm9wT3B0aW9uLFxuICAgICAgbGFiZWxcbiAgICB9LCBvcHRpb25zKSk7XG4gICAgY29uc3QgdHJhbnNmb3JtU3R5bGVBcmcgPSBzdHlsZXNBcmcgPT4ge1xuICAgICAgLy8gT24gdGhlIHNlcnZlciBFbW90aW9uIGRvZXNuJ3QgdXNlIFJlYWN0LmZvcndhcmRSZWYgZm9yIGNyZWF0aW5nIGNvbXBvbmVudHMsIHNvIHRoZSBjcmVhdGVkXG4gICAgICAvLyBjb21wb25lbnQgc3RheXMgYXMgYSBmdW5jdGlvbi4gVGhpcyBjb25kaXRpb24gbWFrZXMgc3VyZSB0aGF0IHdlIGRvIG5vdCBpbnRlcnBvbGF0ZSBmdW5jdGlvbnNcbiAgICAgIC8vIHdoaWNoIGFyZSBiYXNpY2FsbHkgY29tcG9uZW50cyB1c2VkIGFzIGEgc2VsZWN0b3JzLlxuICAgICAgaWYgKHR5cGVvZiBzdHlsZXNBcmcgPT09ICdmdW5jdGlvbicgJiYgc3R5bGVzQXJnLl9fZW1vdGlvbl9yZWFsICE9PSBzdHlsZXNBcmcgfHwgKDAsIF9kZWVwbWVyZ2UuaXNQbGFpbk9iamVjdCkoc3R5bGVzQXJnKSkge1xuICAgICAgICByZXR1cm4gcHJvcHMgPT4gcHJvY2Vzc1N0eWxlQXJnKHN0eWxlc0FyZywgKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7fSwgcHJvcHMsIHtcbiAgICAgICAgICB0aGVtZTogcmVzb2x2ZVRoZW1lKHtcbiAgICAgICAgICAgIHRoZW1lOiBwcm9wcy50aGVtZSxcbiAgICAgICAgICAgIGRlZmF1bHRUaGVtZSxcbiAgICAgICAgICAgIHRoZW1lSWRcbiAgICAgICAgICB9KVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3R5bGVzQXJnO1xuICAgIH07XG4gICAgY29uc3QgbXVpU3R5bGVkUmVzb2x2ZXIgPSAoc3R5bGVBcmcsIC4uLmV4cHJlc3Npb25zKSA9PiB7XG4gICAgICBsZXQgdHJhbnNmb3JtZWRTdHlsZUFyZyA9IHRyYW5zZm9ybVN0eWxlQXJnKHN0eWxlQXJnKTtcbiAgICAgIGNvbnN0IGV4cHJlc3Npb25zV2l0aERlZmF1bHRUaGVtZSA9IGV4cHJlc3Npb25zID8gZXhwcmVzc2lvbnMubWFwKHRyYW5zZm9ybVN0eWxlQXJnKSA6IFtdO1xuICAgICAgaWYgKGNvbXBvbmVudE5hbWUgJiYgb3ZlcnJpZGVzUmVzb2x2ZXIpIHtcbiAgICAgICAgZXhwcmVzc2lvbnNXaXRoRGVmYXVsdFRoZW1lLnB1c2gocHJvcHMgPT4ge1xuICAgICAgICAgIGNvbnN0IHRoZW1lID0gcmVzb2x2ZVRoZW1lKCgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe30sIHByb3BzLCB7XG4gICAgICAgICAgICBkZWZhdWx0VGhlbWUsXG4gICAgICAgICAgICB0aGVtZUlkXG4gICAgICAgICAgfSkpO1xuICAgICAgICAgIGlmICghdGhlbWUuY29tcG9uZW50cyB8fCAhdGhlbWUuY29tcG9uZW50c1tjb21wb25lbnROYW1lXSB8fCAhdGhlbWUuY29tcG9uZW50c1tjb21wb25lbnROYW1lXS5zdHlsZU92ZXJyaWRlcykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHN0eWxlT3ZlcnJpZGVzID0gdGhlbWUuY29tcG9uZW50c1tjb21wb25lbnROYW1lXS5zdHlsZU92ZXJyaWRlcztcbiAgICAgICAgICBjb25zdCByZXNvbHZlZFN0eWxlT3ZlcnJpZGVzID0ge307XG4gICAgICAgICAgLy8gVE9ETzogdjcgcmVtb3ZlIGl0ZXJhdGlvbiBhbmQgdXNlIGByZXNvbHZlU3R5bGVBcmcoc3R5bGVPdmVycmlkZXNbc2xvdF0pYCBkaXJlY3RseVxuICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHN0eWxlT3ZlcnJpZGVzKS5mb3JFYWNoKChbc2xvdEtleSwgc2xvdFN0eWxlXSkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZWRTdHlsZU92ZXJyaWRlc1tzbG90S2V5XSA9IHByb2Nlc3NTdHlsZUFyZyhzbG90U3R5bGUsICgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe30sIHByb3BzLCB7XG4gICAgICAgICAgICAgIHRoZW1lXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIG92ZXJyaWRlc1Jlc29sdmVyKHByb3BzLCByZXNvbHZlZFN0eWxlT3ZlcnJpZGVzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoY29tcG9uZW50TmFtZSAmJiAhc2tpcFZhcmlhbnRzUmVzb2x2ZXIpIHtcbiAgICAgICAgZXhwcmVzc2lvbnNXaXRoRGVmYXVsdFRoZW1lLnB1c2gocHJvcHMgPT4ge1xuICAgICAgICAgIHZhciBfdGhlbWUkY29tcG9uZW50cztcbiAgICAgICAgICBjb25zdCB0aGVtZSA9IHJlc29sdmVUaGVtZSgoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHt9LCBwcm9wcywge1xuICAgICAgICAgICAgZGVmYXVsdFRoZW1lLFxuICAgICAgICAgICAgdGhlbWVJZFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgICBjb25zdCB0aGVtZVZhcmlhbnRzID0gdGhlbWUgPT0gbnVsbCB8fCAoX3RoZW1lJGNvbXBvbmVudHMgPSB0aGVtZS5jb21wb25lbnRzKSA9PSBudWxsIHx8IChfdGhlbWUkY29tcG9uZW50cyA9IF90aGVtZSRjb21wb25lbnRzW2NvbXBvbmVudE5hbWVdKSA9PSBudWxsID8gdm9pZCAwIDogX3RoZW1lJGNvbXBvbmVudHMudmFyaWFudHM7XG4gICAgICAgICAgcmV0dXJuIHByb2Nlc3NTdHlsZUFyZyh7XG4gICAgICAgICAgICB2YXJpYW50czogdGhlbWVWYXJpYW50c1xuICAgICAgICAgIH0sICgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe30sIHByb3BzLCB7XG4gICAgICAgICAgICB0aGVtZVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoIXNraXBTeCkge1xuICAgICAgICBleHByZXNzaW9uc1dpdGhEZWZhdWx0VGhlbWUucHVzaChzeXN0ZW1TeCk7XG4gICAgICB9XG4gICAgICBjb25zdCBudW1PZkN1c3RvbUZuc0FwcGxpZWQgPSBleHByZXNzaW9uc1dpdGhEZWZhdWx0VGhlbWUubGVuZ3RoIC0gZXhwcmVzc2lvbnMubGVuZ3RoO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc3R5bGVBcmcpICYmIG51bU9mQ3VzdG9tRm5zQXBwbGllZCA+IDApIHtcbiAgICAgICAgY29uc3QgcGxhY2Vob2xkZXJzID0gbmV3IEFycmF5KG51bU9mQ3VzdG9tRm5zQXBwbGllZCkuZmlsbCgnJyk7XG4gICAgICAgIC8vIElmIHRoZSB0eXBlIGlzIGFycmF5LCB0aGFuIHdlIG5lZWQgdG8gYWRkIHBsYWNlaG9sZGVycyBpbiB0aGUgdGVtcGxhdGUgZm9yIHRoZSBvdmVycmlkZXMsIHZhcmlhbnRzIGFuZCB0aGUgc3ggc3R5bGVzLlxuICAgICAgICB0cmFuc2Zvcm1lZFN0eWxlQXJnID0gWy4uLnN0eWxlQXJnLCAuLi5wbGFjZWhvbGRlcnNdO1xuICAgICAgICB0cmFuc2Zvcm1lZFN0eWxlQXJnLnJhdyA9IFsuLi5zdHlsZUFyZy5yYXcsIC4uLnBsYWNlaG9sZGVyc107XG4gICAgICB9XG4gICAgICBjb25zdCBDb21wb25lbnQgPSBkZWZhdWx0U3R5bGVkUmVzb2x2ZXIodHJhbnNmb3JtZWRTdHlsZUFyZywgLi4uZXhwcmVzc2lvbnNXaXRoRGVmYXVsdFRoZW1lKTtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGxldCBkaXNwbGF5TmFtZTtcbiAgICAgICAgaWYgKGNvbXBvbmVudE5hbWUpIHtcbiAgICAgICAgICBkaXNwbGF5TmFtZSA9IGAke2NvbXBvbmVudE5hbWV9JHsoMCwgX2NhcGl0YWxpemUuZGVmYXVsdCkoY29tcG9uZW50U2xvdCB8fCAnJyl9YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGlzcGxheU5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRpc3BsYXlOYW1lID0gYFN0eWxlZCgkeygwLCBfZ2V0RGlzcGxheU5hbWUuZGVmYXVsdCkodGFnKX0pYDtcbiAgICAgICAgfVxuICAgICAgICBDb21wb25lbnQuZGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZTtcbiAgICAgIH1cbiAgICAgIGlmICh0YWcubXVpTmFtZSkge1xuICAgICAgICBDb21wb25lbnQubXVpTmFtZSA9IHRhZy5tdWlOYW1lO1xuICAgICAgfVxuICAgICAgcmV0dXJuIENvbXBvbmVudDtcbiAgICB9O1xuICAgIGlmIChkZWZhdWx0U3R5bGVkUmVzb2x2ZXIud2l0aENvbmZpZykge1xuICAgICAgbXVpU3R5bGVkUmVzb2x2ZXIud2l0aENvbmZpZyA9IGRlZmF1bHRTdHlsZWRSZXNvbHZlci53aXRoQ29uZmlnO1xuICAgIH1cbiAgICByZXR1cm4gbXVpU3R5bGVkUmVzb2x2ZXI7XG4gIH07XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6461\n")},6481:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   Ay: () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */   BO: () => (/* binding */ getStyleValue),\n/* harmony export */   Yn: () => (/* binding */ getPath)\n/* harmony export */ });\n/* harmony import */ var _mui_utils_capitalize__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3967);\n/* harmony import */ var _breakpoints__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9452);\n\n\n\nfunction getPath(obj, path, checkVars = true) {\n  if (!path || typeof path !== 'string') {\n    return null;\n  }\n\n  // Check if CSS variables are used\n  if (obj && obj.vars && checkVars) {\n    const val = `vars.${path}`.split('.').reduce((acc, item) => acc && acc[item] ? acc[item] : null, obj);\n    if (val != null) {\n      return val;\n    }\n  }\n  return path.split('.').reduce((acc, item) => {\n    if (acc && acc[item] != null) {\n      return acc[item];\n    }\n    return null;\n  }, obj);\n}\nfunction getStyleValue(themeMapping, transform, propValueFinal, userValue = propValueFinal) {\n  let value;\n  if (typeof themeMapping === 'function') {\n    value = themeMapping(propValueFinal);\n  } else if (Array.isArray(themeMapping)) {\n    value = themeMapping[propValueFinal] || userValue;\n  } else {\n    value = getPath(themeMapping, propValueFinal) || userValue;\n  }\n  if (transform) {\n    value = transform(value, userValue, themeMapping);\n  }\n  return value;\n}\nfunction style(options) {\n  const {\n    prop,\n    cssProperty = options.prop,\n    themeKey,\n    transform\n  } = options;\n\n  // false positive\n  // eslint-disable-next-line react/function-component-definition\n  const fn = props => {\n    if (props[prop] == null) {\n      return null;\n    }\n    const propValue = props[prop];\n    const theme = props.theme;\n    const themeMapping = getPath(theme, themeKey) || {};\n    const styleFromPropValue = propValueFinal => {\n      let value = getStyleValue(themeMapping, transform, propValueFinal);\n      if (propValueFinal === value && typeof propValueFinal === 'string') {\n        // Haven't found value\n        value = getStyleValue(themeMapping, transform, `${prop}${propValueFinal === 'default' ? '' : (0,_mui_utils_capitalize__WEBPACK_IMPORTED_MODULE_0__/* [\"default\"] */ .A)(propValueFinal)}`, propValueFinal);\n      }\n      if (cssProperty === false) {\n        return value;\n      }\n      return {\n        [cssProperty]: value\n      };\n    };\n    return (0,_breakpoints__WEBPACK_IMPORTED_MODULE_1__/* .handleBreakpoints */ .NI)(props, propValue, styleFromPropValue);\n  };\n  fn.propTypes =  false ? 0 : {};\n  fn.filterProps = [prop];\n  return fn;\n}\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (style);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQ4MS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQStDO0FBQ087QUFDSjtBQUMzQztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esd0JBQXdCLEtBQUs7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMERBQTBELEtBQUssRUFBRSxvQ0FBb0MsMEVBQVUsaUJBQWlCO0FBQ2hJO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHlFQUFpQjtBQUM1QjtBQUNBLGlCQUFpQixNQUFxQyxHQUFHLENBRXRELENBQUM7QUFDSjtBQUNBO0FBQ0E7QUFDQSxpRUFBZSxLQUFLIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL3N0eWxlLmpzP2ZiMmUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnQG11aS91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCByZXNwb25zaXZlUHJvcFR5cGUgZnJvbSAnLi9yZXNwb25zaXZlUHJvcFR5cGUnO1xuaW1wb3J0IHsgaGFuZGxlQnJlYWtwb2ludHMgfSBmcm9tICcuL2JyZWFrcG9pbnRzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXRoKG9iaiwgcGF0aCwgY2hlY2tWYXJzID0gdHJ1ZSkge1xuICBpZiAoIXBhdGggfHwgdHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBDaGVjayBpZiBDU1MgdmFyaWFibGVzIGFyZSB1c2VkXG4gIGlmIChvYmogJiYgb2JqLnZhcnMgJiYgY2hlY2tWYXJzKSB7XG4gICAgY29uc3QgdmFsID0gYHZhcnMuJHtwYXRofWAuc3BsaXQoJy4nKS5yZWR1Y2UoKGFjYywgaXRlbSkgPT4gYWNjICYmIGFjY1tpdGVtXSA/IGFjY1tpdGVtXSA6IG51bGwsIG9iaik7XG4gICAgaWYgKHZhbCAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcGF0aC5zcGxpdCgnLicpLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiB7XG4gICAgaWYgKGFjYyAmJiBhY2NbaXRlbV0gIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGFjY1tpdGVtXTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0sIG9iaik7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0U3R5bGVWYWx1ZSh0aGVtZU1hcHBpbmcsIHRyYW5zZm9ybSwgcHJvcFZhbHVlRmluYWwsIHVzZXJWYWx1ZSA9IHByb3BWYWx1ZUZpbmFsKSB7XG4gIGxldCB2YWx1ZTtcbiAgaWYgKHR5cGVvZiB0aGVtZU1hcHBpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YWx1ZSA9IHRoZW1lTWFwcGluZyhwcm9wVmFsdWVGaW5hbCk7XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0aGVtZU1hcHBpbmcpKSB7XG4gICAgdmFsdWUgPSB0aGVtZU1hcHBpbmdbcHJvcFZhbHVlRmluYWxdIHx8IHVzZXJWYWx1ZTtcbiAgfSBlbHNlIHtcbiAgICB2YWx1ZSA9IGdldFBhdGgodGhlbWVNYXBwaW5nLCBwcm9wVmFsdWVGaW5hbCkgfHwgdXNlclZhbHVlO1xuICB9XG4gIGlmICh0cmFuc2Zvcm0pIHtcbiAgICB2YWx1ZSA9IHRyYW5zZm9ybSh2YWx1ZSwgdXNlclZhbHVlLCB0aGVtZU1hcHBpbmcpO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cbmZ1bmN0aW9uIHN0eWxlKG9wdGlvbnMpIHtcbiAgY29uc3Qge1xuICAgIHByb3AsXG4gICAgY3NzUHJvcGVydHkgPSBvcHRpb25zLnByb3AsXG4gICAgdGhlbWVLZXksXG4gICAgdHJhbnNmb3JtXG4gIH0gPSBvcHRpb25zO1xuXG4gIC8vIGZhbHNlIHBvc2l0aXZlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvblxuICBjb25zdCBmbiA9IHByb3BzID0+IHtcbiAgICBpZiAocHJvcHNbcHJvcF0gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHByb3BWYWx1ZSA9IHByb3BzW3Byb3BdO1xuICAgIGNvbnN0IHRoZW1lID0gcHJvcHMudGhlbWU7XG4gICAgY29uc3QgdGhlbWVNYXBwaW5nID0gZ2V0UGF0aCh0aGVtZSwgdGhlbWVLZXkpIHx8IHt9O1xuICAgIGNvbnN0IHN0eWxlRnJvbVByb3BWYWx1ZSA9IHByb3BWYWx1ZUZpbmFsID0+IHtcbiAgICAgIGxldCB2YWx1ZSA9IGdldFN0eWxlVmFsdWUodGhlbWVNYXBwaW5nLCB0cmFuc2Zvcm0sIHByb3BWYWx1ZUZpbmFsKTtcbiAgICAgIGlmIChwcm9wVmFsdWVGaW5hbCA9PT0gdmFsdWUgJiYgdHlwZW9mIHByb3BWYWx1ZUZpbmFsID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBIYXZlbid0IGZvdW5kIHZhbHVlXG4gICAgICAgIHZhbHVlID0gZ2V0U3R5bGVWYWx1ZSh0aGVtZU1hcHBpbmcsIHRyYW5zZm9ybSwgYCR7cHJvcH0ke3Byb3BWYWx1ZUZpbmFsID09PSAnZGVmYXVsdCcgPyAnJyA6IGNhcGl0YWxpemUocHJvcFZhbHVlRmluYWwpfWAsIHByb3BWYWx1ZUZpbmFsKTtcbiAgICAgIH1cbiAgICAgIGlmIChjc3NQcm9wZXJ0eSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW2Nzc1Byb3BlcnR5XTogdmFsdWVcbiAgICAgIH07XG4gICAgfTtcbiAgICByZXR1cm4gaGFuZGxlQnJlYWtwb2ludHMocHJvcHMsIHByb3BWYWx1ZSwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfTtcbiAgZm4ucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHtcbiAgICBbcHJvcF06IHJlc3BvbnNpdmVQcm9wVHlwZVxuICB9IDoge307XG4gIGZuLmZpbHRlclByb3BzID0gW3Byb3BdO1xuICByZXR1cm4gZm47XG59XG5leHBvcnQgZGVmYXVsdCBzdHlsZTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6481\n")},6544:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n  A: () => (/* binding */ styles_createTheme)\n});\n\n// UNUSED EXPORTS: createMuiTheme\n\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/extends.js\nvar esm_extends = __webpack_require__(8168);\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\nvar objectWithoutPropertiesLoose = __webpack_require__(8587);\n// EXTERNAL MODULE: ./node_modules/@mui/utils/esm/formatMuiErrorMessage/formatMuiErrorMessage.js\nvar formatMuiErrorMessage = __webpack_require__(9453);\n// EXTERNAL MODULE: ./node_modules/@mui/utils/esm/deepmerge/deepmerge.js\nvar deepmerge = __webpack_require__(1317);\n// EXTERNAL MODULE: ./node_modules/@mui/system/esm/styleFunctionSx/defaultSxConfig.js + 5 modules\nvar defaultSxConfig = __webpack_require__(4188);\n// EXTERNAL MODULE: ./node_modules/@mui/system/esm/styleFunctionSx/styleFunctionSx.js\nvar styleFunctionSx = __webpack_require__(3571);\n// EXTERNAL MODULE: ./node_modules/@mui/system/esm/createTheme/createTheme.js + 2 modules\nvar createTheme = __webpack_require__(8749);\n;// ./node_modules/@mui/material/styles/createMixins.js\n\nfunction createMixins(breakpoints, mixins) {\n  return (0,esm_extends/* default */.A)({\n    toolbar: {\n      minHeight: 56,\n      [breakpoints.up('xs')]: {\n        '@media (orientation: landscape)': {\n          minHeight: 48\n        }\n      },\n      [breakpoints.up('sm')]: {\n        minHeight: 64\n      }\n    }\n  }, mixins);\n}\n// EXTERNAL MODULE: ./node_modules/@mui/system/colorManipulator.js\nvar colorManipulator = __webpack_require__(771);\n;// ./node_modules/@mui/material/colors/common.js\nconst common = {\n  black: '#000',\n  white: '#fff'\n};\n/* harmony default export */ const colors_common = (common);\n;// ./node_modules/@mui/material/colors/grey.js\nconst grey = {\n  50: '#fafafa',\n  100: '#f5f5f5',\n  200: '#eeeeee',\n  300: '#e0e0e0',\n  400: '#bdbdbd',\n  500: '#9e9e9e',\n  600: '#757575',\n  700: '#616161',\n  800: '#424242',\n  900: '#212121',\n  A100: '#f5f5f5',\n  A200: '#eeeeee',\n  A400: '#bdbdbd',\n  A700: '#616161'\n};\n/* harmony default export */ const colors_grey = (grey);\n;// ./node_modules/@mui/material/colors/purple.js\nconst purple = {\n  50: '#f3e5f5',\n  100: '#e1bee7',\n  200: '#ce93d8',\n  300: '#ba68c8',\n  400: '#ab47bc',\n  500: '#9c27b0',\n  600: '#8e24aa',\n  700: '#7b1fa2',\n  800: '#6a1b9a',\n  900: '#4a148c',\n  A100: '#ea80fc',\n  A200: '#e040fb',\n  A400: '#d500f9',\n  A700: '#aa00ff'\n};\n/* harmony default export */ const colors_purple = (purple);\n;// ./node_modules/@mui/material/colors/red.js\nconst red = {\n  50: '#ffebee',\n  100: '#ffcdd2',\n  200: '#ef9a9a',\n  300: '#e57373',\n  400: '#ef5350',\n  500: '#f44336',\n  600: '#e53935',\n  700: '#d32f2f',\n  800: '#c62828',\n  900: '#b71c1c',\n  A100: '#ff8a80',\n  A200: '#ff5252',\n  A400: '#ff1744',\n  A700: '#d50000'\n};\n/* harmony default export */ const colors_red = (red);\n;// ./node_modules/@mui/material/colors/orange.js\nconst orange = {\n  50: '#fff3e0',\n  100: '#ffe0b2',\n  200: '#ffcc80',\n  300: '#ffb74d',\n  400: '#ffa726',\n  500: '#ff9800',\n  600: '#fb8c00',\n  700: '#f57c00',\n  800: '#ef6c00',\n  900: '#e65100',\n  A100: '#ffd180',\n  A200: '#ffab40',\n  A400: '#ff9100',\n  A700: '#ff6d00'\n};\n/* harmony default export */ const colors_orange = (orange);\n;// ./node_modules/@mui/material/colors/blue.js\nconst blue = {\n  50: '#e3f2fd',\n  100: '#bbdefb',\n  200: '#90caf9',\n  300: '#64b5f6',\n  400: '#42a5f5',\n  500: '#2196f3',\n  600: '#1e88e5',\n  700: '#1976d2',\n  800: '#1565c0',\n  900: '#0d47a1',\n  A100: '#82b1ff',\n  A200: '#448aff',\n  A400: '#2979ff',\n  A700: '#2962ff'\n};\n/* harmony default export */ const colors_blue = (blue);\n;// ./node_modules/@mui/material/colors/lightBlue.js\nconst lightBlue = {\n  50: '#e1f5fe',\n  100: '#b3e5fc',\n  200: '#81d4fa',\n  300: '#4fc3f7',\n  400: '#29b6f6',\n  500: '#03a9f4',\n  600: '#039be5',\n  700: '#0288d1',\n  800: '#0277bd',\n  900: '#01579b',\n  A100: '#80d8ff',\n  A200: '#40c4ff',\n  A400: '#00b0ff',\n  A700: '#0091ea'\n};\n/* harmony default export */ const colors_lightBlue = (lightBlue);\n;// ./node_modules/@mui/material/colors/green.js\nconst green = {\n  50: '#e8f5e9',\n  100: '#c8e6c9',\n  200: '#a5d6a7',\n  300: '#81c784',\n  400: '#66bb6a',\n  500: '#4caf50',\n  600: '#43a047',\n  700: '#388e3c',\n  800: '#2e7d32',\n  900: '#1b5e20',\n  A100: '#b9f6ca',\n  A200: '#69f0ae',\n  A400: '#00e676',\n  A700: '#00c853'\n};\n/* harmony default export */ const colors_green = (green);\n;// ./node_modules/@mui/material/styles/createPalette.js\n\n\n\nconst _excluded = [\"mode\", \"contrastThreshold\", \"tonalOffset\"];\n\n\n\n\n\n\n\n\n\n\nconst light = {\n  // The colors used to style the text.\n  text: {\n    // The most important text.\n    primary: 'rgba(0, 0, 0, 0.87)',\n    // Secondary text.\n    secondary: 'rgba(0, 0, 0, 0.6)',\n    // Disabled text have even lower visual prominence.\n    disabled: 'rgba(0, 0, 0, 0.38)'\n  },\n  // The color used to divide different elements.\n  divider: 'rgba(0, 0, 0, 0.12)',\n  // The background colors used to style the surfaces.\n  // Consistency between these values is important.\n  background: {\n    paper: colors_common.white,\n    default: colors_common.white\n  },\n  // The colors used to style the action elements.\n  action: {\n    // The color of an active action like an icon button.\n    active: 'rgba(0, 0, 0, 0.54)',\n    // The color of an hovered action.\n    hover: 'rgba(0, 0, 0, 0.04)',\n    hoverOpacity: 0.04,\n    // The color of a selected action.\n    selected: 'rgba(0, 0, 0, 0.08)',\n    selectedOpacity: 0.08,\n    // The color of a disabled action.\n    disabled: 'rgba(0, 0, 0, 0.26)',\n    // The background color of a disabled action.\n    disabledBackground: 'rgba(0, 0, 0, 0.12)',\n    disabledOpacity: 0.38,\n    focus: 'rgba(0, 0, 0, 0.12)',\n    focusOpacity: 0.12,\n    activatedOpacity: 0.12\n  }\n};\nconst dark = {\n  text: {\n    primary: colors_common.white,\n    secondary: 'rgba(255, 255, 255, 0.7)',\n    disabled: 'rgba(255, 255, 255, 0.5)',\n    icon: 'rgba(255, 255, 255, 0.5)'\n  },\n  divider: 'rgba(255, 255, 255, 0.12)',\n  background: {\n    paper: '#121212',\n    default: '#121212'\n  },\n  action: {\n    active: colors_common.white,\n    hover: 'rgba(255, 255, 255, 0.08)',\n    hoverOpacity: 0.08,\n    selected: 'rgba(255, 255, 255, 0.16)',\n    selectedOpacity: 0.16,\n    disabled: 'rgba(255, 255, 255, 0.3)',\n    disabledBackground: 'rgba(255, 255, 255, 0.12)',\n    disabledOpacity: 0.38,\n    focus: 'rgba(255, 255, 255, 0.12)',\n    focusOpacity: 0.12,\n    activatedOpacity: 0.24\n  }\n};\nfunction addLightOrDark(intent, direction, shade, tonalOffset) {\n  const tonalOffsetLight = tonalOffset.light || tonalOffset;\n  const tonalOffsetDark = tonalOffset.dark || tonalOffset * 1.5;\n  if (!intent[direction]) {\n    if (intent.hasOwnProperty(shade)) {\n      intent[direction] = intent[shade];\n    } else if (direction === 'light') {\n      intent.light = (0,colorManipulator/* lighten */.a)(intent.main, tonalOffsetLight);\n    } else if (direction === 'dark') {\n      intent.dark = (0,colorManipulator/* darken */.e$)(intent.main, tonalOffsetDark);\n    }\n  }\n}\nfunction getDefaultPrimary(mode = 'light') {\n  if (mode === 'dark') {\n    return {\n      main: colors_blue[200],\n      light: colors_blue[50],\n      dark: colors_blue[400]\n    };\n  }\n  return {\n    main: colors_blue[700],\n    light: colors_blue[400],\n    dark: colors_blue[800]\n  };\n}\nfunction getDefaultSecondary(mode = 'light') {\n  if (mode === 'dark') {\n    return {\n      main: colors_purple[200],\n      light: colors_purple[50],\n      dark: colors_purple[400]\n    };\n  }\n  return {\n    main: colors_purple[500],\n    light: colors_purple[300],\n    dark: colors_purple[700]\n  };\n}\nfunction getDefaultError(mode = 'light') {\n  if (mode === 'dark') {\n    return {\n      main: colors_red[500],\n      light: colors_red[300],\n      dark: colors_red[700]\n    };\n  }\n  return {\n    main: colors_red[700],\n    light: colors_red[400],\n    dark: colors_red[800]\n  };\n}\nfunction getDefaultInfo(mode = 'light') {\n  if (mode === 'dark') {\n    return {\n      main: colors_lightBlue[400],\n      light: colors_lightBlue[300],\n      dark: colors_lightBlue[700]\n    };\n  }\n  return {\n    main: colors_lightBlue[700],\n    light: colors_lightBlue[500],\n    dark: colors_lightBlue[900]\n  };\n}\nfunction getDefaultSuccess(mode = 'light') {\n  if (mode === 'dark') {\n    return {\n      main: colors_green[400],\n      light: colors_green[300],\n      dark: colors_green[700]\n    };\n  }\n  return {\n    main: colors_green[800],\n    light: colors_green[500],\n    dark: colors_green[900]\n  };\n}\nfunction getDefaultWarning(mode = 'light') {\n  if (mode === 'dark') {\n    return {\n      main: colors_orange[400],\n      light: colors_orange[300],\n      dark: colors_orange[700]\n    };\n  }\n  return {\n    main: '#ed6c02',\n    // closest to orange[800] that pass 3:1.\n    light: colors_orange[500],\n    dark: colors_orange[900]\n  };\n}\nfunction createPalette(palette) {\n  const {\n      mode = 'light',\n      contrastThreshold = 3,\n      tonalOffset = 0.2\n    } = palette,\n    other = (0,objectWithoutPropertiesLoose/* default */.A)(palette, _excluded);\n  const primary = palette.primary || getDefaultPrimary(mode);\n  const secondary = palette.secondary || getDefaultSecondary(mode);\n  const error = palette.error || getDefaultError(mode);\n  const info = palette.info || getDefaultInfo(mode);\n  const success = palette.success || getDefaultSuccess(mode);\n  const warning = palette.warning || getDefaultWarning(mode);\n\n  // Use the same logic as\n  // Bootstrap: https://github.com/twbs/bootstrap/blob/1d6e3710dd447de1a200f29e8fa521f8a0908f70/scss/_functions.scss#L59\n  // and material-components-web https://github.com/material-components/material-components-web/blob/ac46b8863c4dab9fc22c4c662dc6bd1b65dd652f/packages/mdc-theme/_functions.scss#L54\n  function getContrastText(background) {\n    const contrastText = (0,colorManipulator/* getContrastRatio */.eM)(background, dark.text.primary) >= contrastThreshold ? dark.text.primary : light.text.primary;\n    if (false) // removed by dead control flow\n{}\n    return contrastText;\n  }\n  const augmentColor = ({\n    color,\n    name,\n    mainShade = 500,\n    lightShade = 300,\n    darkShade = 700\n  }) => {\n    color = (0,esm_extends/* default */.A)({}, color);\n    if (!color.main && color[mainShade]) {\n      color.main = color[mainShade];\n    }\n    if (!color.hasOwnProperty('main')) {\n      throw new Error( false ? 0 : (0,formatMuiErrorMessage/* default */.A)(11, name ? ` (${name})` : '', mainShade));\n    }\n    if (typeof color.main !== 'string') {\n      throw new Error( false ? 0 : (0,formatMuiErrorMessage/* default */.A)(12, name ? ` (${name})` : '', JSON.stringify(color.main)));\n    }\n    addLightOrDark(color, 'light', lightShade, tonalOffset);\n    addLightOrDark(color, 'dark', darkShade, tonalOffset);\n    if (!color.contrastText) {\n      color.contrastText = getContrastText(color.main);\n    }\n    return color;\n  };\n  const modes = {\n    dark,\n    light\n  };\n  if (false) // removed by dead control flow\n{}\n  const paletteOutput = (0,deepmerge/* default */.A)((0,esm_extends/* default */.A)({\n    // A collection of common colors.\n    common: (0,esm_extends/* default */.A)({}, colors_common),\n    // prevent mutable object.\n    // The palette mode, can be light or dark.\n    mode,\n    // The colors used to represent primary interface elements for a user.\n    primary: augmentColor({\n      color: primary,\n      name: 'primary'\n    }),\n    // The colors used to represent secondary interface elements for a user.\n    secondary: augmentColor({\n      color: secondary,\n      name: 'secondary',\n      mainShade: 'A400',\n      lightShade: 'A200',\n      darkShade: 'A700'\n    }),\n    // The colors used to represent interface elements that the user should be made aware of.\n    error: augmentColor({\n      color: error,\n      name: 'error'\n    }),\n    // The colors used to represent potentially dangerous actions or important messages.\n    warning: augmentColor({\n      color: warning,\n      name: 'warning'\n    }),\n    // The colors used to present information to the user that is neutral and not necessarily important.\n    info: augmentColor({\n      color: info,\n      name: 'info'\n    }),\n    // The colors used to indicate the successful completion of an action that user triggered.\n    success: augmentColor({\n      color: success,\n      name: 'success'\n    }),\n    // The grey colors.\n    grey: colors_grey,\n    // Used by `getContrastText()` to maximize the contrast between\n    // the background and the text.\n    contrastThreshold,\n    // Takes a background color and returns the text color that maximizes the contrast.\n    getContrastText,\n    // Generate a rich color object.\n    augmentColor,\n    // Used by the functions below to shift a color's luminance by approximately\n    // two indexes within its tonal palette.\n    // E.g., shift from Red 500 to Red 300 or Red 700.\n    tonalOffset\n  }, modes[mode]), other);\n  return paletteOutput;\n}\n;// ./node_modules/@mui/material/styles/createTypography.js\n\n\nconst createTypography_excluded = [\"fontFamily\", \"fontSize\", \"fontWeightLight\", \"fontWeightRegular\", \"fontWeightMedium\", \"fontWeightBold\", \"htmlFontSize\", \"allVariants\", \"pxToRem\"];\n\nfunction round(value) {\n  return Math.round(value * 1e5) / 1e5;\n}\nconst caseAllCaps = {\n  textTransform: 'uppercase'\n};\nconst defaultFontFamily = '\"Roboto\", \"Helvetica\", \"Arial\", sans-serif';\n\n/**\n * @see @link{https://m2.material.io/design/typography/the-type-system.html}\n * @see @link{https://m2.material.io/design/typography/understanding-typography.html}\n */\nfunction createTypography(palette, typography) {\n  const _ref = typeof typography === 'function' ? typography(palette) : typography,\n    {\n      fontFamily = defaultFontFamily,\n      // The default font size of the Material Specification.\n      fontSize = 14,\n      // px\n      fontWeightLight = 300,\n      fontWeightRegular = 400,\n      fontWeightMedium = 500,\n      fontWeightBold = 700,\n      // Tell MUI what's the font-size on the html element.\n      // 16px is the default font-size used by browsers.\n      htmlFontSize = 16,\n      // Apply the CSS properties to all the variants.\n      allVariants,\n      pxToRem: pxToRem2\n    } = _ref,\n    other = (0,objectWithoutPropertiesLoose/* default */.A)(_ref, createTypography_excluded);\n  if (false) // removed by dead control flow\n{}\n  const coef = fontSize / 14;\n  const pxToRem = pxToRem2 || (size => `${size / htmlFontSize * coef}rem`);\n  const buildVariant = (fontWeight, size, lineHeight, letterSpacing, casing) => (0,esm_extends/* default */.A)({\n    fontFamily,\n    fontWeight,\n    fontSize: pxToRem(size),\n    // Unitless following https://meyerweb.com/eric/thoughts/2006/02/08/unitless-line-heights/\n    lineHeight\n  }, fontFamily === defaultFontFamily ? {\n    letterSpacing: `${round(letterSpacing / size)}em`\n  } : {}, casing, allVariants);\n  const variants = {\n    h1: buildVariant(fontWeightLight, 96, 1.167, -1.5),\n    h2: buildVariant(fontWeightLight, 60, 1.2, -0.5),\n    h3: buildVariant(fontWeightRegular, 48, 1.167, 0),\n    h4: buildVariant(fontWeightRegular, 34, 1.235, 0.25),\n    h5: buildVariant(fontWeightRegular, 24, 1.334, 0),\n    h6: buildVariant(fontWeightMedium, 20, 1.6, 0.15),\n    subtitle1: buildVariant(fontWeightRegular, 16, 1.75, 0.15),\n    subtitle2: buildVariant(fontWeightMedium, 14, 1.57, 0.1),\n    body1: buildVariant(fontWeightRegular, 16, 1.5, 0.15),\n    body2: buildVariant(fontWeightRegular, 14, 1.43, 0.15),\n    button: buildVariant(fontWeightMedium, 14, 1.75, 0.4, caseAllCaps),\n    caption: buildVariant(fontWeightRegular, 12, 1.66, 0.4),\n    overline: buildVariant(fontWeightRegular, 12, 2.66, 1, caseAllCaps),\n    // TODO v6: Remove handling of 'inherit' variant from the theme as it is already handled in Material UI's Typography component. Also, remember to remove the associated types.\n    inherit: {\n      fontFamily: 'inherit',\n      fontWeight: 'inherit',\n      fontSize: 'inherit',\n      lineHeight: 'inherit',\n      letterSpacing: 'inherit'\n    }\n  };\n  return (0,deepmerge/* default */.A)((0,esm_extends/* default */.A)({\n    htmlFontSize,\n    pxToRem,\n    fontFamily,\n    fontSize,\n    fontWeightLight,\n    fontWeightRegular,\n    fontWeightMedium,\n    fontWeightBold\n  }, variants), other, {\n    clone: false // No need to clone deep\n  });\n}\n;// ./node_modules/@mui/material/styles/shadows.js\nconst shadowKeyUmbraOpacity = 0.2;\nconst shadowKeyPenumbraOpacity = 0.14;\nconst shadowAmbientShadowOpacity = 0.12;\nfunction createShadow(...px) {\n  return [`${px[0]}px ${px[1]}px ${px[2]}px ${px[3]}px rgba(0,0,0,${shadowKeyUmbraOpacity})`, `${px[4]}px ${px[5]}px ${px[6]}px ${px[7]}px rgba(0,0,0,${shadowKeyPenumbraOpacity})`, `${px[8]}px ${px[9]}px ${px[10]}px ${px[11]}px rgba(0,0,0,${shadowAmbientShadowOpacity})`].join(',');\n}\n\n// Values from https://github.com/material-components/material-components-web/blob/be8747f94574669cb5e7add1a7c54fa41a89cec7/packages/mdc-elevation/_variables.scss\nconst shadows = ['none', createShadow(0, 2, 1, -1, 0, 1, 1, 0, 0, 1, 3, 0), createShadow(0, 3, 1, -2, 0, 2, 2, 0, 0, 1, 5, 0), createShadow(0, 3, 3, -2, 0, 3, 4, 0, 0, 1, 8, 0), createShadow(0, 2, 4, -1, 0, 4, 5, 0, 0, 1, 10, 0), createShadow(0, 3, 5, -1, 0, 5, 8, 0, 0, 1, 14, 0), createShadow(0, 3, 5, -1, 0, 6, 10, 0, 0, 1, 18, 0), createShadow(0, 4, 5, -2, 0, 7, 10, 1, 0, 2, 16, 1), createShadow(0, 5, 5, -3, 0, 8, 10, 1, 0, 3, 14, 2), createShadow(0, 5, 6, -3, 0, 9, 12, 1, 0, 3, 16, 2), createShadow(0, 6, 6, -3, 0, 10, 14, 1, 0, 4, 18, 3), createShadow(0, 6, 7, -4, 0, 11, 15, 1, 0, 4, 20, 3), createShadow(0, 7, 8, -4, 0, 12, 17, 2, 0, 5, 22, 4), createShadow(0, 7, 8, -4, 0, 13, 19, 2, 0, 5, 24, 4), createShadow(0, 7, 9, -4, 0, 14, 21, 2, 0, 5, 26, 4), createShadow(0, 8, 9, -5, 0, 15, 22, 2, 0, 6, 28, 5), createShadow(0, 8, 10, -5, 0, 16, 24, 2, 0, 6, 30, 5), createShadow(0, 8, 11, -5, 0, 17, 26, 2, 0, 6, 32, 5), createShadow(0, 9, 11, -5, 0, 18, 28, 2, 0, 7, 34, 6), createShadow(0, 9, 12, -6, 0, 19, 29, 2, 0, 7, 36, 6), createShadow(0, 10, 13, -6, 0, 20, 31, 3, 0, 8, 38, 7), createShadow(0, 10, 13, -6, 0, 21, 33, 3, 0, 8, 40, 7), createShadow(0, 10, 14, -6, 0, 22, 35, 3, 0, 8, 42, 7), createShadow(0, 11, 14, -7, 0, 23, 36, 3, 0, 9, 44, 8), createShadow(0, 11, 15, -7, 0, 24, 38, 3, 0, 9, 46, 8)];\n/* harmony default export */ const styles_shadows = (shadows);\n// EXTERNAL MODULE: ./node_modules/@mui/material/styles/createTransitions.js\nvar createTransitions = __webpack_require__(7091);\n;// ./node_modules/@mui/material/styles/zIndex.js\n// We need to centralize the zIndex definitions as they work\n// like global values in the browser.\nconst zIndex = {\n  mobileStepper: 1000,\n  fab: 1050,\n  speedDial: 1050,\n  appBar: 1100,\n  drawer: 1200,\n  modal: 1300,\n  snackbar: 1400,\n  tooltip: 1500\n};\n/* harmony default export */ const styles_zIndex = (zIndex);\n;// ./node_modules/@mui/material/styles/createTheme.js\n\n\n\nconst createTheme_excluded = [\"breakpoints\", \"mixins\", \"spacing\", \"palette\", \"transitions\", \"typography\", \"shape\"];\n\n\n\n\n\n\n\n\n\n\nfunction createTheme_createTheme(options = {}, ...args) {\n  const {\n      mixins: mixinsInput = {},\n      palette: paletteInput = {},\n      transitions: transitionsInput = {},\n      typography: typographyInput = {}\n    } = options,\n    other = (0,objectWithoutPropertiesLoose/* default */.A)(options, createTheme_excluded);\n  if (options.vars &&\n  // The error should throw only for the root theme creation because user is not allowed to use a custom node `vars`.\n  // `generateCssVars` is the closest identifier for checking that the `options` is a result of `extendTheme` with CSS variables so that user can create new theme for nested ThemeProvider.\n  options.generateCssVars === undefined) {\n    throw new Error( false ? 0 : (0,formatMuiErrorMessage/* default */.A)(18));\n  }\n  const palette = createPalette(paletteInput);\n  const systemTheme = (0,createTheme/* default */.A)(options);\n  let muiTheme = (0,deepmerge/* default */.A)(systemTheme, {\n    mixins: createMixins(systemTheme.breakpoints, mixinsInput),\n    palette,\n    // Don't use [...shadows] until you've verified its transpiled code is not invoking the iterator protocol.\n    shadows: styles_shadows.slice(),\n    typography: createTypography(palette, typographyInput),\n    transitions: (0,createTransitions/* default */.Ay)(transitionsInput),\n    zIndex: (0,esm_extends/* default */.A)({}, styles_zIndex)\n  });\n  muiTheme = (0,deepmerge/* default */.A)(muiTheme, other);\n  muiTheme = args.reduce((acc, argument) => (0,deepmerge/* default */.A)(acc, argument), muiTheme);\n  if (false) // removed by dead control flow\n{}\n  muiTheme.unstable_sxConfig = (0,esm_extends/* default */.A)({}, defaultSxConfig/* default */.A, other == null ? void 0 : other.unstable_sxConfig);\n  muiTheme.unstable_sx = function sx(props) {\n    return (0,styleFunctionSx/* default */.A)({\n      sx: props,\n      theme: this\n    });\n  };\n  return muiTheme;\n}\nlet warnedOnce = false;\nfunction createMuiTheme(...args) {\n  if (false) // removed by dead control flow\n{}\n  return createTheme_createTheme(...args);\n}\n/* harmony default export */ const styles_createTheme = (createTheme_createTheme);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFDckQsTUFBTSxLQUFxQyxFQUFFO0FBQUEsRUE2QjFDO0FBQ0gsK0JBQStCLDhCQUFRLEdBQUcsRUFBRSw4QkFBZTtBQUMzRDtBQUNBLFdBQVcsa0NBQWU7QUFDMUI7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1AsTUFBTSxLQUFxQyxFQUFFO0FBQUEsRUFLMUM7QUFDSCxTQUFTLHVCQUFXO0FBQ3BCO0FBQ0EseURBQWUsdUJBQVciLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9jcmVhdGVNaXhpbnMuanM/ZTI1OSIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2NvbG9ycy9jb21tb24uanM/MWY0ZCIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2NvbG9ycy9ncmV5LmpzPzVmMTciLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9jb2xvcnMvcHVycGxlLmpzPzg4ODgiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9jb2xvcnMvcmVkLmpzP2QxNzEiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9jb2xvcnMvb3JhbmdlLmpzPzAzNTYiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9jb2xvcnMvYmx1ZS5qcz81MDZkIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvY29sb3JzL2xpZ2h0Qmx1ZS5qcz9mMjM2Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvY29sb3JzL2dyZWVuLmpzPzZhZGUiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvY3JlYXRlUGFsZXR0ZS5qcz9lMTY1Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL2NyZWF0ZVR5cG9ncmFwaHkuanM/MzA3OSIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9zaGFkb3dzLmpzPzU0N2MiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvekluZGV4LmpzPzY5YTYiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvY3JlYXRlVGhlbWUuanM/YjAzZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZU1peGlucyhicmVha3BvaW50cywgbWl4aW5zKSB7XG4gIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgdG9vbGJhcjoge1xuICAgICAgbWluSGVpZ2h0OiA1NixcbiAgICAgIFticmVha3BvaW50cy51cCgneHMnKV06IHtcbiAgICAgICAgJ0BtZWRpYSAob3JpZW50YXRpb246IGxhbmRzY2FwZSknOiB7XG4gICAgICAgICAgbWluSGVpZ2h0OiA0OFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgW2JyZWFrcG9pbnRzLnVwKCdzbScpXToge1xuICAgICAgICBtaW5IZWlnaHQ6IDY0XG4gICAgICB9XG4gICAgfVxuICB9LCBtaXhpbnMpO1xufSIsImNvbnN0IGNvbW1vbiA9IHtcbiAgYmxhY2s6ICcjMDAwJyxcbiAgd2hpdGU6ICcjZmZmJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGNvbW1vbjsiLCJjb25zdCBncmV5ID0ge1xuICA1MDogJyNmYWZhZmEnLFxuICAxMDA6ICcjZjVmNWY1JyxcbiAgMjAwOiAnI2VlZWVlZScsXG4gIDMwMDogJyNlMGUwZTAnLFxuICA0MDA6ICcjYmRiZGJkJyxcbiAgNTAwOiAnIzllOWU5ZScsXG4gIDYwMDogJyM3NTc1NzUnLFxuICA3MDA6ICcjNjE2MTYxJyxcbiAgODAwOiAnIzQyNDI0MicsXG4gIDkwMDogJyMyMTIxMjEnLFxuICBBMTAwOiAnI2Y1ZjVmNScsXG4gIEEyMDA6ICcjZWVlZWVlJyxcbiAgQTQwMDogJyNiZGJkYmQnLFxuICBBNzAwOiAnIzYxNjE2MSdcbn07XG5leHBvcnQgZGVmYXVsdCBncmV5OyIsImNvbnN0IHB1cnBsZSA9IHtcbiAgNTA6ICcjZjNlNWY1JyxcbiAgMTAwOiAnI2UxYmVlNycsXG4gIDIwMDogJyNjZTkzZDgnLFxuICAzMDA6ICcjYmE2OGM4JyxcbiAgNDAwOiAnI2FiNDdiYycsXG4gIDUwMDogJyM5YzI3YjAnLFxuICA2MDA6ICcjOGUyNGFhJyxcbiAgNzAwOiAnIzdiMWZhMicsXG4gIDgwMDogJyM2YTFiOWEnLFxuICA5MDA6ICcjNGExNDhjJyxcbiAgQTEwMDogJyNlYTgwZmMnLFxuICBBMjAwOiAnI2UwNDBmYicsXG4gIEE0MDA6ICcjZDUwMGY5JyxcbiAgQTcwMDogJyNhYTAwZmYnXG59O1xuZXhwb3J0IGRlZmF1bHQgcHVycGxlOyIsImNvbnN0IHJlZCA9IHtcbiAgNTA6ICcjZmZlYmVlJyxcbiAgMTAwOiAnI2ZmY2RkMicsXG4gIDIwMDogJyNlZjlhOWEnLFxuICAzMDA6ICcjZTU3MzczJyxcbiAgNDAwOiAnI2VmNTM1MCcsXG4gIDUwMDogJyNmNDQzMzYnLFxuICA2MDA6ICcjZTUzOTM1JyxcbiAgNzAwOiAnI2QzMmYyZicsXG4gIDgwMDogJyNjNjI4MjgnLFxuICA5MDA6ICcjYjcxYzFjJyxcbiAgQTEwMDogJyNmZjhhODAnLFxuICBBMjAwOiAnI2ZmNTI1MicsXG4gIEE0MDA6ICcjZmYxNzQ0JyxcbiAgQTcwMDogJyNkNTAwMDAnXG59O1xuZXhwb3J0IGRlZmF1bHQgcmVkOyIsImNvbnN0IG9yYW5nZSA9IHtcbiAgNTA6ICcjZmZmM2UwJyxcbiAgMTAwOiAnI2ZmZTBiMicsXG4gIDIwMDogJyNmZmNjODAnLFxuICAzMDA6ICcjZmZiNzRkJyxcbiAgNDAwOiAnI2ZmYTcyNicsXG4gIDUwMDogJyNmZjk4MDAnLFxuICA2MDA6ICcjZmI4YzAwJyxcbiAgNzAwOiAnI2Y1N2MwMCcsXG4gIDgwMDogJyNlZjZjMDAnLFxuICA5MDA6ICcjZTY1MTAwJyxcbiAgQTEwMDogJyNmZmQxODAnLFxuICBBMjAwOiAnI2ZmYWI0MCcsXG4gIEE0MDA6ICcjZmY5MTAwJyxcbiAgQTcwMDogJyNmZjZkMDAnXG59O1xuZXhwb3J0IGRlZmF1bHQgb3JhbmdlOyIsImNvbnN0IGJsdWUgPSB7XG4gIDUwOiAnI2UzZjJmZCcsXG4gIDEwMDogJyNiYmRlZmInLFxuICAyMDA6ICcjOTBjYWY5JyxcbiAgMzAwOiAnIzY0YjVmNicsXG4gIDQwMDogJyM0MmE1ZjUnLFxuICA1MDA6ICcjMjE5NmYzJyxcbiAgNjAwOiAnIzFlODhlNScsXG4gIDcwMDogJyMxOTc2ZDInLFxuICA4MDA6ICcjMTU2NWMwJyxcbiAgOTAwOiAnIzBkNDdhMScsXG4gIEExMDA6ICcjODJiMWZmJyxcbiAgQTIwMDogJyM0NDhhZmYnLFxuICBBNDAwOiAnIzI5NzlmZicsXG4gIEE3MDA6ICcjMjk2MmZmJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGJsdWU7IiwiY29uc3QgbGlnaHRCbHVlID0ge1xuICA1MDogJyNlMWY1ZmUnLFxuICAxMDA6ICcjYjNlNWZjJyxcbiAgMjAwOiAnIzgxZDRmYScsXG4gIDMwMDogJyM0ZmMzZjcnLFxuICA0MDA6ICcjMjliNmY2JyxcbiAgNTAwOiAnIzAzYTlmNCcsXG4gIDYwMDogJyMwMzliZTUnLFxuICA3MDA6ICcjMDI4OGQxJyxcbiAgODAwOiAnIzAyNzdiZCcsXG4gIDkwMDogJyMwMTU3OWInLFxuICBBMTAwOiAnIzgwZDhmZicsXG4gIEEyMDA6ICcjNDBjNGZmJyxcbiAgQTQwMDogJyMwMGIwZmYnLFxuICBBNzAwOiAnIzAwOTFlYSdcbn07XG5leHBvcnQgZGVmYXVsdCBsaWdodEJsdWU7IiwiY29uc3QgZ3JlZW4gPSB7XG4gIDUwOiAnI2U4ZjVlOScsXG4gIDEwMDogJyNjOGU2YzknLFxuICAyMDA6ICcjYTVkNmE3JyxcbiAgMzAwOiAnIzgxYzc4NCcsXG4gIDQwMDogJyM2NmJiNmEnLFxuICA1MDA6ICcjNGNhZjUwJyxcbiAgNjAwOiAnIzQzYTA0NycsXG4gIDcwMDogJyMzODhlM2MnLFxuICA4MDA6ICcjMmU3ZDMyJyxcbiAgOTAwOiAnIzFiNWUyMCcsXG4gIEExMDA6ICcjYjlmNmNhJyxcbiAgQTIwMDogJyM2OWYwYWUnLFxuICBBNDAwOiAnIzAwZTY3NicsXG4gIEE3MDA6ICcjMDBjODUzJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGdyZWVuOyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2Zvcm1hdE11aUVycm9yTWVzc2FnZSBmcm9tIFwiQG11aS91dGlscy9mb3JtYXRNdWlFcnJvck1lc3NhZ2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcIm1vZGVcIiwgXCJjb250cmFzdFRocmVzaG9sZFwiLCBcInRvbmFsT2Zmc2V0XCJdO1xuaW1wb3J0IGRlZXBtZXJnZSBmcm9tICdAbXVpL3V0aWxzL2RlZXBtZXJnZSc7XG5pbXBvcnQgeyBkYXJrZW4sIGdldENvbnRyYXN0UmF0aW8sIGxpZ2h0ZW4gfSBmcm9tICdAbXVpL3N5c3RlbS9jb2xvck1hbmlwdWxhdG9yJztcbmltcG9ydCBjb21tb24gZnJvbSAnLi4vY29sb3JzL2NvbW1vbic7XG5pbXBvcnQgZ3JleSBmcm9tICcuLi9jb2xvcnMvZ3JleSc7XG5pbXBvcnQgcHVycGxlIGZyb20gJy4uL2NvbG9ycy9wdXJwbGUnO1xuaW1wb3J0IHJlZCBmcm9tICcuLi9jb2xvcnMvcmVkJztcbmltcG9ydCBvcmFuZ2UgZnJvbSAnLi4vY29sb3JzL29yYW5nZSc7XG5pbXBvcnQgYmx1ZSBmcm9tICcuLi9jb2xvcnMvYmx1ZSc7XG5pbXBvcnQgbGlnaHRCbHVlIGZyb20gJy4uL2NvbG9ycy9saWdodEJsdWUnO1xuaW1wb3J0IGdyZWVuIGZyb20gJy4uL2NvbG9ycy9ncmVlbic7XG5leHBvcnQgY29uc3QgbGlnaHQgPSB7XG4gIC8vIFRoZSBjb2xvcnMgdXNlZCB0byBzdHlsZSB0aGUgdGV4dC5cbiAgdGV4dDoge1xuICAgIC8vIFRoZSBtb3N0IGltcG9ydGFudCB0ZXh0LlxuICAgIHByaW1hcnk6ICdyZ2JhKDAsIDAsIDAsIDAuODcpJyxcbiAgICAvLyBTZWNvbmRhcnkgdGV4dC5cbiAgICBzZWNvbmRhcnk6ICdyZ2JhKDAsIDAsIDAsIDAuNiknLFxuICAgIC8vIERpc2FibGVkIHRleHQgaGF2ZSBldmVuIGxvd2VyIHZpc3VhbCBwcm9taW5lbmNlLlxuICAgIGRpc2FibGVkOiAncmdiYSgwLCAwLCAwLCAwLjM4KSdcbiAgfSxcbiAgLy8gVGhlIGNvbG9yIHVzZWQgdG8gZGl2aWRlIGRpZmZlcmVudCBlbGVtZW50cy5cbiAgZGl2aWRlcjogJ3JnYmEoMCwgMCwgMCwgMC4xMiknLFxuICAvLyBUaGUgYmFja2dyb3VuZCBjb2xvcnMgdXNlZCB0byBzdHlsZSB0aGUgc3VyZmFjZXMuXG4gIC8vIENvbnNpc3RlbmN5IGJldHdlZW4gdGhlc2UgdmFsdWVzIGlzIGltcG9ydGFudC5cbiAgYmFja2dyb3VuZDoge1xuICAgIHBhcGVyOiBjb21tb24ud2hpdGUsXG4gICAgZGVmYXVsdDogY29tbW9uLndoaXRlXG4gIH0sXG4gIC8vIFRoZSBjb2xvcnMgdXNlZCB0byBzdHlsZSB0aGUgYWN0aW9uIGVsZW1lbnRzLlxuICBhY3Rpb246IHtcbiAgICAvLyBUaGUgY29sb3Igb2YgYW4gYWN0aXZlIGFjdGlvbiBsaWtlIGFuIGljb24gYnV0dG9uLlxuICAgIGFjdGl2ZTogJ3JnYmEoMCwgMCwgMCwgMC41NCknLFxuICAgIC8vIFRoZSBjb2xvciBvZiBhbiBob3ZlcmVkIGFjdGlvbi5cbiAgICBob3ZlcjogJ3JnYmEoMCwgMCwgMCwgMC4wNCknLFxuICAgIGhvdmVyT3BhY2l0eTogMC4wNCxcbiAgICAvLyBUaGUgY29sb3Igb2YgYSBzZWxlY3RlZCBhY3Rpb24uXG4gICAgc2VsZWN0ZWQ6ICdyZ2JhKDAsIDAsIDAsIDAuMDgpJyxcbiAgICBzZWxlY3RlZE9wYWNpdHk6IDAuMDgsXG4gICAgLy8gVGhlIGNvbG9yIG9mIGEgZGlzYWJsZWQgYWN0aW9uLlxuICAgIGRpc2FibGVkOiAncmdiYSgwLCAwLCAwLCAwLjI2KScsXG4gICAgLy8gVGhlIGJhY2tncm91bmQgY29sb3Igb2YgYSBkaXNhYmxlZCBhY3Rpb24uXG4gICAgZGlzYWJsZWRCYWNrZ3JvdW5kOiAncmdiYSgwLCAwLCAwLCAwLjEyKScsXG4gICAgZGlzYWJsZWRPcGFjaXR5OiAwLjM4LFxuICAgIGZvY3VzOiAncmdiYSgwLCAwLCAwLCAwLjEyKScsXG4gICAgZm9jdXNPcGFjaXR5OiAwLjEyLFxuICAgIGFjdGl2YXRlZE9wYWNpdHk6IDAuMTJcbiAgfVxufTtcbmV4cG9ydCBjb25zdCBkYXJrID0ge1xuICB0ZXh0OiB7XG4gICAgcHJpbWFyeTogY29tbW9uLndoaXRlLFxuICAgIHNlY29uZGFyeTogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC43KScsXG4gICAgZGlzYWJsZWQ6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSknLFxuICAgIGljb246ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSknXG4gIH0sXG4gIGRpdmlkZXI6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpJyxcbiAgYmFja2dyb3VuZDoge1xuICAgIHBhcGVyOiAnIzEyMTIxMicsXG4gICAgZGVmYXVsdDogJyMxMjEyMTInXG4gIH0sXG4gIGFjdGlvbjoge1xuICAgIGFjdGl2ZTogY29tbW9uLndoaXRlLFxuICAgIGhvdmVyOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KScsXG4gICAgaG92ZXJPcGFjaXR5OiAwLjA4LFxuICAgIHNlbGVjdGVkOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE2KScsXG4gICAgc2VsZWN0ZWRPcGFjaXR5OiAwLjE2LFxuICAgIGRpc2FibGVkOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpJyxcbiAgICBkaXNhYmxlZEJhY2tncm91bmQ6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpJyxcbiAgICBkaXNhYmxlZE9wYWNpdHk6IDAuMzgsXG4gICAgZm9jdXM6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpJyxcbiAgICBmb2N1c09wYWNpdHk6IDAuMTIsXG4gICAgYWN0aXZhdGVkT3BhY2l0eTogMC4yNFxuICB9XG59O1xuZnVuY3Rpb24gYWRkTGlnaHRPckRhcmsoaW50ZW50LCBkaXJlY3Rpb24sIHNoYWRlLCB0b25hbE9mZnNldCkge1xuICBjb25zdCB0b25hbE9mZnNldExpZ2h0ID0gdG9uYWxPZmZzZXQubGlnaHQgfHwgdG9uYWxPZmZzZXQ7XG4gIGNvbnN0IHRvbmFsT2Zmc2V0RGFyayA9IHRvbmFsT2Zmc2V0LmRhcmsgfHwgdG9uYWxPZmZzZXQgKiAxLjU7XG4gIGlmICghaW50ZW50W2RpcmVjdGlvbl0pIHtcbiAgICBpZiAoaW50ZW50Lmhhc093blByb3BlcnR5KHNoYWRlKSkge1xuICAgICAgaW50ZW50W2RpcmVjdGlvbl0gPSBpbnRlbnRbc2hhZGVdO1xuICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAnbGlnaHQnKSB7XG4gICAgICBpbnRlbnQubGlnaHQgPSBsaWdodGVuKGludGVudC5tYWluLCB0b25hbE9mZnNldExpZ2h0KTtcbiAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ2RhcmsnKSB7XG4gICAgICBpbnRlbnQuZGFyayA9IGRhcmtlbihpbnRlbnQubWFpbiwgdG9uYWxPZmZzZXREYXJrKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGdldERlZmF1bHRQcmltYXJ5KG1vZGUgPSAnbGlnaHQnKSB7XG4gIGlmIChtb2RlID09PSAnZGFyaycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFpbjogYmx1ZVsyMDBdLFxuICAgICAgbGlnaHQ6IGJsdWVbNTBdLFxuICAgICAgZGFyazogYmx1ZVs0MDBdXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG1haW46IGJsdWVbNzAwXSxcbiAgICBsaWdodDogYmx1ZVs0MDBdLFxuICAgIGRhcms6IGJsdWVbODAwXVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0RGVmYXVsdFNlY29uZGFyeShtb2RlID0gJ2xpZ2h0Jykge1xuICBpZiAobW9kZSA9PT0gJ2RhcmsnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1haW46IHB1cnBsZVsyMDBdLFxuICAgICAgbGlnaHQ6IHB1cnBsZVs1MF0sXG4gICAgICBkYXJrOiBwdXJwbGVbNDAwXVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBtYWluOiBwdXJwbGVbNTAwXSxcbiAgICBsaWdodDogcHVycGxlWzMwMF0sXG4gICAgZGFyazogcHVycGxlWzcwMF1cbiAgfTtcbn1cbmZ1bmN0aW9uIGdldERlZmF1bHRFcnJvcihtb2RlID0gJ2xpZ2h0Jykge1xuICBpZiAobW9kZSA9PT0gJ2RhcmsnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1haW46IHJlZFs1MDBdLFxuICAgICAgbGlnaHQ6IHJlZFszMDBdLFxuICAgICAgZGFyazogcmVkWzcwMF1cbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbWFpbjogcmVkWzcwMF0sXG4gICAgbGlnaHQ6IHJlZFs0MDBdLFxuICAgIGRhcms6IHJlZFs4MDBdXG4gIH07XG59XG5mdW5jdGlvbiBnZXREZWZhdWx0SW5mbyhtb2RlID0gJ2xpZ2h0Jykge1xuICBpZiAobW9kZSA9PT0gJ2RhcmsnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1haW46IGxpZ2h0Qmx1ZVs0MDBdLFxuICAgICAgbGlnaHQ6IGxpZ2h0Qmx1ZVszMDBdLFxuICAgICAgZGFyazogbGlnaHRCbHVlWzcwMF1cbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbWFpbjogbGlnaHRCbHVlWzcwMF0sXG4gICAgbGlnaHQ6IGxpZ2h0Qmx1ZVs1MDBdLFxuICAgIGRhcms6IGxpZ2h0Qmx1ZVs5MDBdXG4gIH07XG59XG5mdW5jdGlvbiBnZXREZWZhdWx0U3VjY2Vzcyhtb2RlID0gJ2xpZ2h0Jykge1xuICBpZiAobW9kZSA9PT0gJ2RhcmsnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1haW46IGdyZWVuWzQwMF0sXG4gICAgICBsaWdodDogZ3JlZW5bMzAwXSxcbiAgICAgIGRhcms6IGdyZWVuWzcwMF1cbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbWFpbjogZ3JlZW5bODAwXSxcbiAgICBsaWdodDogZ3JlZW5bNTAwXSxcbiAgICBkYXJrOiBncmVlbls5MDBdXG4gIH07XG59XG5mdW5jdGlvbiBnZXREZWZhdWx0V2FybmluZyhtb2RlID0gJ2xpZ2h0Jykge1xuICBpZiAobW9kZSA9PT0gJ2RhcmsnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1haW46IG9yYW5nZVs0MDBdLFxuICAgICAgbGlnaHQ6IG9yYW5nZVszMDBdLFxuICAgICAgZGFyazogb3JhbmdlWzcwMF1cbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbWFpbjogJyNlZDZjMDInLFxuICAgIC8vIGNsb3Nlc3QgdG8gb3JhbmdlWzgwMF0gdGhhdCBwYXNzIDM6MS5cbiAgICBsaWdodDogb3JhbmdlWzUwMF0sXG4gICAgZGFyazogb3JhbmdlWzkwMF1cbiAgfTtcbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVBhbGV0dGUocGFsZXR0ZSkge1xuICBjb25zdCB7XG4gICAgICBtb2RlID0gJ2xpZ2h0JyxcbiAgICAgIGNvbnRyYXN0VGhyZXNob2xkID0gMyxcbiAgICAgIHRvbmFsT2Zmc2V0ID0gMC4yXG4gICAgfSA9IHBhbGV0dGUsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwYWxldHRlLCBfZXhjbHVkZWQpO1xuICBjb25zdCBwcmltYXJ5ID0gcGFsZXR0ZS5wcmltYXJ5IHx8IGdldERlZmF1bHRQcmltYXJ5KG1vZGUpO1xuICBjb25zdCBzZWNvbmRhcnkgPSBwYWxldHRlLnNlY29uZGFyeSB8fCBnZXREZWZhdWx0U2Vjb25kYXJ5KG1vZGUpO1xuICBjb25zdCBlcnJvciA9IHBhbGV0dGUuZXJyb3IgfHwgZ2V0RGVmYXVsdEVycm9yKG1vZGUpO1xuICBjb25zdCBpbmZvID0gcGFsZXR0ZS5pbmZvIHx8IGdldERlZmF1bHRJbmZvKG1vZGUpO1xuICBjb25zdCBzdWNjZXNzID0gcGFsZXR0ZS5zdWNjZXNzIHx8IGdldERlZmF1bHRTdWNjZXNzKG1vZGUpO1xuICBjb25zdCB3YXJuaW5nID0gcGFsZXR0ZS53YXJuaW5nIHx8IGdldERlZmF1bHRXYXJuaW5nKG1vZGUpO1xuXG4gIC8vIFVzZSB0aGUgc2FtZSBsb2dpYyBhc1xuICAvLyBCb290c3RyYXA6IGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iLzFkNmUzNzEwZGQ0NDdkZTFhMjAwZjI5ZThmYTUyMWY4YTA5MDhmNzAvc2Nzcy9fZnVuY3Rpb25zLnNjc3MjTDU5XG4gIC8vIGFuZCBtYXRlcmlhbC1jb21wb25lbnRzLXdlYiBodHRwczovL2dpdGh1Yi5jb20vbWF0ZXJpYWwtY29tcG9uZW50cy9tYXRlcmlhbC1jb21wb25lbnRzLXdlYi9ibG9iL2FjNDZiODg2M2M0ZGFiOWZjMjJjNGM2NjJkYzZiZDFiNjVkZDY1MmYvcGFja2FnZXMvbWRjLXRoZW1lL19mdW5jdGlvbnMuc2NzcyNMNTRcbiAgZnVuY3Rpb24gZ2V0Q29udHJhc3RUZXh0KGJhY2tncm91bmQpIHtcbiAgICBjb25zdCBjb250cmFzdFRleHQgPSBnZXRDb250cmFzdFJhdGlvKGJhY2tncm91bmQsIGRhcmsudGV4dC5wcmltYXJ5KSA+PSBjb250cmFzdFRocmVzaG9sZCA/IGRhcmsudGV4dC5wcmltYXJ5IDogbGlnaHQudGV4dC5wcmltYXJ5O1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjb25zdCBjb250cmFzdCA9IGdldENvbnRyYXN0UmF0aW8oYmFja2dyb3VuZCwgY29udHJhc3RUZXh0KTtcbiAgICAgIGlmIChjb250cmFzdCA8IDMpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbYE1VSTogVGhlIGNvbnRyYXN0IHJhdGlvIG9mICR7Y29udHJhc3R9OjEgZm9yICR7Y29udHJhc3RUZXh0fSBvbiAke2JhY2tncm91bmR9YCwgJ2ZhbGxzIGJlbG93IHRoZSBXQ0FHIHJlY29tbWVuZGVkIGFic29sdXRlIG1pbmltdW0gY29udHJhc3QgcmF0aW8gb2YgMzoxLicsICdodHRwczovL3d3dy53My5vcmcvVFIvMjAwOC9SRUMtV0NBRzIwLTIwMDgxMjExLyN2aXN1YWwtYXVkaW8tY29udHJhc3QtY29udHJhc3QnXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb250cmFzdFRleHQ7XG4gIH1cbiAgY29uc3QgYXVnbWVudENvbG9yID0gKHtcbiAgICBjb2xvcixcbiAgICBuYW1lLFxuICAgIG1haW5TaGFkZSA9IDUwMCxcbiAgICBsaWdodFNoYWRlID0gMzAwLFxuICAgIGRhcmtTaGFkZSA9IDcwMFxuICB9KSA9PiB7XG4gICAgY29sb3IgPSBfZXh0ZW5kcyh7fSwgY29sb3IpO1xuICAgIGlmICghY29sb3IubWFpbiAmJiBjb2xvclttYWluU2hhZGVdKSB7XG4gICAgICBjb2xvci5tYWluID0gY29sb3JbbWFpblNoYWRlXTtcbiAgICB9XG4gICAgaWYgKCFjb2xvci5oYXNPd25Qcm9wZXJ0eSgnbWFpbicpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gYE1VSTogVGhlIGNvbG9yJHtuYW1lID8gYCAoJHtuYW1lfSlgIDogJyd9IHByb3ZpZGVkIHRvIGF1Z21lbnRDb2xvcihjb2xvcikgaXMgaW52YWxpZC5cblRoZSBjb2xvciBvYmplY3QgbmVlZHMgdG8gaGF2ZSBhIFxcYG1haW5cXGAgcHJvcGVydHkgb3IgYSBcXGAke21haW5TaGFkZX1cXGAgcHJvcGVydHkuYCA6IF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UoMTEsIG5hbWUgPyBgICgke25hbWV9KWAgOiAnJywgbWFpblNoYWRlKSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgY29sb3IubWFpbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBgTVVJOiBUaGUgY29sb3Ike25hbWUgPyBgICgke25hbWV9KWAgOiAnJ30gcHJvdmlkZWQgdG8gYXVnbWVudENvbG9yKGNvbG9yKSBpcyBpbnZhbGlkLlxuXFxgY29sb3IubWFpblxcYCBzaG91bGQgYmUgYSBzdHJpbmcsIGJ1dCBcXGAke0pTT04uc3RyaW5naWZ5KGNvbG9yLm1haW4pfVxcYCB3YXMgcHJvdmlkZWQgaW5zdGVhZC5cblxuRGlkIHlvdSBpbnRlbmQgdG8gdXNlIG9uZSBvZiB0aGUgZm9sbG93aW5nIGFwcHJvYWNoZXM/XG5cbmltcG9ydCB7IGdyZWVuIH0gZnJvbSBcIkBtdWkvbWF0ZXJpYWwvY29sb3JzXCI7XG5cbmNvbnN0IHRoZW1lMSA9IGNyZWF0ZVRoZW1lKHsgcGFsZXR0ZToge1xuICBwcmltYXJ5OiBncmVlbixcbn0gfSk7XG5cbmNvbnN0IHRoZW1lMiA9IGNyZWF0ZVRoZW1lKHsgcGFsZXR0ZToge1xuICBwcmltYXJ5OiB7IG1haW46IGdyZWVuWzUwMF0gfSxcbn0gfSk7YCA6IF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UoMTIsIG5hbWUgPyBgICgke25hbWV9KWAgOiAnJywgSlNPTi5zdHJpbmdpZnkoY29sb3IubWFpbikpKTtcbiAgICB9XG4gICAgYWRkTGlnaHRPckRhcmsoY29sb3IsICdsaWdodCcsIGxpZ2h0U2hhZGUsIHRvbmFsT2Zmc2V0KTtcbiAgICBhZGRMaWdodE9yRGFyayhjb2xvciwgJ2RhcmsnLCBkYXJrU2hhZGUsIHRvbmFsT2Zmc2V0KTtcbiAgICBpZiAoIWNvbG9yLmNvbnRyYXN0VGV4dCkge1xuICAgICAgY29sb3IuY29udHJhc3RUZXh0ID0gZ2V0Q29udHJhc3RUZXh0KGNvbG9yLm1haW4pO1xuICAgIH1cbiAgICByZXR1cm4gY29sb3I7XG4gIH07XG4gIGNvbnN0IG1vZGVzID0ge1xuICAgIGRhcmssXG4gICAgbGlnaHRcbiAgfTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAoIW1vZGVzW21vZGVdKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBNVUk6IFRoZSBwYWxldHRlIG1vZGUgXFxgJHttb2RlfVxcYCBpcyBub3Qgc3VwcG9ydGVkLmApO1xuICAgIH1cbiAgfVxuICBjb25zdCBwYWxldHRlT3V0cHV0ID0gZGVlcG1lcmdlKF9leHRlbmRzKHtcbiAgICAvLyBBIGNvbGxlY3Rpb24gb2YgY29tbW9uIGNvbG9ycy5cbiAgICBjb21tb246IF9leHRlbmRzKHt9LCBjb21tb24pLFxuICAgIC8vIHByZXZlbnQgbXV0YWJsZSBvYmplY3QuXG4gICAgLy8gVGhlIHBhbGV0dGUgbW9kZSwgY2FuIGJlIGxpZ2h0IG9yIGRhcmsuXG4gICAgbW9kZSxcbiAgICAvLyBUaGUgY29sb3JzIHVzZWQgdG8gcmVwcmVzZW50IHByaW1hcnkgaW50ZXJmYWNlIGVsZW1lbnRzIGZvciBhIHVzZXIuXG4gICAgcHJpbWFyeTogYXVnbWVudENvbG9yKHtcbiAgICAgIGNvbG9yOiBwcmltYXJ5LFxuICAgICAgbmFtZTogJ3ByaW1hcnknXG4gICAgfSksXG4gICAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIHJlcHJlc2VudCBzZWNvbmRhcnkgaW50ZXJmYWNlIGVsZW1lbnRzIGZvciBhIHVzZXIuXG4gICAgc2Vjb25kYXJ5OiBhdWdtZW50Q29sb3Ioe1xuICAgICAgY29sb3I6IHNlY29uZGFyeSxcbiAgICAgIG5hbWU6ICdzZWNvbmRhcnknLFxuICAgICAgbWFpblNoYWRlOiAnQTQwMCcsXG4gICAgICBsaWdodFNoYWRlOiAnQTIwMCcsXG4gICAgICBkYXJrU2hhZGU6ICdBNzAwJ1xuICAgIH0pLFxuICAgIC8vIFRoZSBjb2xvcnMgdXNlZCB0byByZXByZXNlbnQgaW50ZXJmYWNlIGVsZW1lbnRzIHRoYXQgdGhlIHVzZXIgc2hvdWxkIGJlIG1hZGUgYXdhcmUgb2YuXG4gICAgZXJyb3I6IGF1Z21lbnRDb2xvcih7XG4gICAgICBjb2xvcjogZXJyb3IsXG4gICAgICBuYW1lOiAnZXJyb3InXG4gICAgfSksXG4gICAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIHJlcHJlc2VudCBwb3RlbnRpYWxseSBkYW5nZXJvdXMgYWN0aW9ucyBvciBpbXBvcnRhbnQgbWVzc2FnZXMuXG4gICAgd2FybmluZzogYXVnbWVudENvbG9yKHtcbiAgICAgIGNvbG9yOiB3YXJuaW5nLFxuICAgICAgbmFtZTogJ3dhcm5pbmcnXG4gICAgfSksXG4gICAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIHByZXNlbnQgaW5mb3JtYXRpb24gdG8gdGhlIHVzZXIgdGhhdCBpcyBuZXV0cmFsIGFuZCBub3QgbmVjZXNzYXJpbHkgaW1wb3J0YW50LlxuICAgIGluZm86IGF1Z21lbnRDb2xvcih7XG4gICAgICBjb2xvcjogaW5mbyxcbiAgICAgIG5hbWU6ICdpbmZvJ1xuICAgIH0pLFxuICAgIC8vIFRoZSBjb2xvcnMgdXNlZCB0byBpbmRpY2F0ZSB0aGUgc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIG9mIGFuIGFjdGlvbiB0aGF0IHVzZXIgdHJpZ2dlcmVkLlxuICAgIHN1Y2Nlc3M6IGF1Z21lbnRDb2xvcih7XG4gICAgICBjb2xvcjogc3VjY2VzcyxcbiAgICAgIG5hbWU6ICdzdWNjZXNzJ1xuICAgIH0pLFxuICAgIC8vIFRoZSBncmV5IGNvbG9ycy5cbiAgICBncmV5LFxuICAgIC8vIFVzZWQgYnkgYGdldENvbnRyYXN0VGV4dCgpYCB0byBtYXhpbWl6ZSB0aGUgY29udHJhc3QgYmV0d2VlblxuICAgIC8vIHRoZSBiYWNrZ3JvdW5kIGFuZCB0aGUgdGV4dC5cbiAgICBjb250cmFzdFRocmVzaG9sZCxcbiAgICAvLyBUYWtlcyBhIGJhY2tncm91bmQgY29sb3IgYW5kIHJldHVybnMgdGhlIHRleHQgY29sb3IgdGhhdCBtYXhpbWl6ZXMgdGhlIGNvbnRyYXN0LlxuICAgIGdldENvbnRyYXN0VGV4dCxcbiAgICAvLyBHZW5lcmF0ZSBhIHJpY2ggY29sb3Igb2JqZWN0LlxuICAgIGF1Z21lbnRDb2xvcixcbiAgICAvLyBVc2VkIGJ5IHRoZSBmdW5jdGlvbnMgYmVsb3cgdG8gc2hpZnQgYSBjb2xvcidzIGx1bWluYW5jZSBieSBhcHByb3hpbWF0ZWx5XG4gICAgLy8gdHdvIGluZGV4ZXMgd2l0aGluIGl0cyB0b25hbCBwYWxldHRlLlxuICAgIC8vIEUuZy4sIHNoaWZ0IGZyb20gUmVkIDUwMCB0byBSZWQgMzAwIG9yIFJlZCA3MDAuXG4gICAgdG9uYWxPZmZzZXRcbiAgfSwgbW9kZXNbbW9kZV0pLCBvdGhlcik7XG4gIHJldHVybiBwYWxldHRlT3V0cHV0O1xufSIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJmb250RmFtaWx5XCIsIFwiZm9udFNpemVcIiwgXCJmb250V2VpZ2h0TGlnaHRcIiwgXCJmb250V2VpZ2h0UmVndWxhclwiLCBcImZvbnRXZWlnaHRNZWRpdW1cIiwgXCJmb250V2VpZ2h0Qm9sZFwiLCBcImh0bWxGb250U2l6ZVwiLCBcImFsbFZhcmlhbnRzXCIsIFwicHhUb1JlbVwiXTtcbmltcG9ydCBkZWVwbWVyZ2UgZnJvbSAnQG11aS91dGlscy9kZWVwbWVyZ2UnO1xuZnVuY3Rpb24gcm91bmQodmFsdWUpIHtcbiAgcmV0dXJuIE1hdGgucm91bmQodmFsdWUgKiAxZTUpIC8gMWU1O1xufVxuY29uc3QgY2FzZUFsbENhcHMgPSB7XG4gIHRleHRUcmFuc2Zvcm06ICd1cHBlcmNhc2UnXG59O1xuY29uc3QgZGVmYXVsdEZvbnRGYW1pbHkgPSAnXCJSb2JvdG9cIiwgXCJIZWx2ZXRpY2FcIiwgXCJBcmlhbFwiLCBzYW5zLXNlcmlmJztcblxuLyoqXG4gKiBAc2VlIEBsaW5re2h0dHBzOi8vbTIubWF0ZXJpYWwuaW8vZGVzaWduL3R5cG9ncmFwaHkvdGhlLXR5cGUtc3lzdGVtLmh0bWx9XG4gKiBAc2VlIEBsaW5re2h0dHBzOi8vbTIubWF0ZXJpYWwuaW8vZGVzaWduL3R5cG9ncmFwaHkvdW5kZXJzdGFuZGluZy10eXBvZ3JhcGh5Lmh0bWx9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVR5cG9ncmFwaHkocGFsZXR0ZSwgdHlwb2dyYXBoeSkge1xuICBjb25zdCBfcmVmID0gdHlwZW9mIHR5cG9ncmFwaHkgPT09ICdmdW5jdGlvbicgPyB0eXBvZ3JhcGh5KHBhbGV0dGUpIDogdHlwb2dyYXBoeSxcbiAgICB7XG4gICAgICBmb250RmFtaWx5ID0gZGVmYXVsdEZvbnRGYW1pbHksXG4gICAgICAvLyBUaGUgZGVmYXVsdCBmb250IHNpemUgb2YgdGhlIE1hdGVyaWFsIFNwZWNpZmljYXRpb24uXG4gICAgICBmb250U2l6ZSA9IDE0LFxuICAgICAgLy8gcHhcbiAgICAgIGZvbnRXZWlnaHRMaWdodCA9IDMwMCxcbiAgICAgIGZvbnRXZWlnaHRSZWd1bGFyID0gNDAwLFxuICAgICAgZm9udFdlaWdodE1lZGl1bSA9IDUwMCxcbiAgICAgIGZvbnRXZWlnaHRCb2xkID0gNzAwLFxuICAgICAgLy8gVGVsbCBNVUkgd2hhdCdzIHRoZSBmb250LXNpemUgb24gdGhlIGh0bWwgZWxlbWVudC5cbiAgICAgIC8vIDE2cHggaXMgdGhlIGRlZmF1bHQgZm9udC1zaXplIHVzZWQgYnkgYnJvd3NlcnMuXG4gICAgICBodG1sRm9udFNpemUgPSAxNixcbiAgICAgIC8vIEFwcGx5IHRoZSBDU1MgcHJvcGVydGllcyB0byBhbGwgdGhlIHZhcmlhbnRzLlxuICAgICAgYWxsVmFyaWFudHMsXG4gICAgICBweFRvUmVtOiBweFRvUmVtMlxuICAgIH0gPSBfcmVmLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAodHlwZW9mIGZvbnRTaXplICE9PSAnbnVtYmVyJykge1xuICAgICAgY29uc29sZS5lcnJvcignTVVJOiBgZm9udFNpemVgIGlzIHJlcXVpcmVkIHRvIGJlIGEgbnVtYmVyLicpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGh0bWxGb250U2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ01VSTogYGh0bWxGb250U2l6ZWAgaXMgcmVxdWlyZWQgdG8gYmUgYSBudW1iZXIuJyk7XG4gICAgfVxuICB9XG4gIGNvbnN0IGNvZWYgPSBmb250U2l6ZSAvIDE0O1xuICBjb25zdCBweFRvUmVtID0gcHhUb1JlbTIgfHwgKHNpemUgPT4gYCR7c2l6ZSAvIGh0bWxGb250U2l6ZSAqIGNvZWZ9cmVtYCk7XG4gIGNvbnN0IGJ1aWxkVmFyaWFudCA9IChmb250V2VpZ2h0LCBzaXplLCBsaW5lSGVpZ2h0LCBsZXR0ZXJTcGFjaW5nLCBjYXNpbmcpID0+IF9leHRlbmRzKHtcbiAgICBmb250RmFtaWx5LFxuICAgIGZvbnRXZWlnaHQsXG4gICAgZm9udFNpemU6IHB4VG9SZW0oc2l6ZSksXG4gICAgLy8gVW5pdGxlc3MgZm9sbG93aW5nIGh0dHBzOi8vbWV5ZXJ3ZWIuY29tL2VyaWMvdGhvdWdodHMvMjAwNi8wMi8wOC91bml0bGVzcy1saW5lLWhlaWdodHMvXG4gICAgbGluZUhlaWdodFxuICB9LCBmb250RmFtaWx5ID09PSBkZWZhdWx0Rm9udEZhbWlseSA/IHtcbiAgICBsZXR0ZXJTcGFjaW5nOiBgJHtyb3VuZChsZXR0ZXJTcGFjaW5nIC8gc2l6ZSl9ZW1gXG4gIH0gOiB7fSwgY2FzaW5nLCBhbGxWYXJpYW50cyk7XG4gIGNvbnN0IHZhcmlhbnRzID0ge1xuICAgIGgxOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodExpZ2h0LCA5NiwgMS4xNjcsIC0xLjUpLFxuICAgIGgyOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodExpZ2h0LCA2MCwgMS4yLCAtMC41KSxcbiAgICBoMzogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRSZWd1bGFyLCA0OCwgMS4xNjcsIDApLFxuICAgIGg0OiBidWlsZFZhcmlhbnQoZm9udFdlaWdodFJlZ3VsYXIsIDM0LCAxLjIzNSwgMC4yNSksXG4gICAgaDU6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0UmVndWxhciwgMjQsIDEuMzM0LCAwKSxcbiAgICBoNjogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRNZWRpdW0sIDIwLCAxLjYsIDAuMTUpLFxuICAgIHN1YnRpdGxlMTogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRSZWd1bGFyLCAxNiwgMS43NSwgMC4xNSksXG4gICAgc3VidGl0bGUyOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodE1lZGl1bSwgMTQsIDEuNTcsIDAuMSksXG4gICAgYm9keTE6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0UmVndWxhciwgMTYsIDEuNSwgMC4xNSksXG4gICAgYm9keTI6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0UmVndWxhciwgMTQsIDEuNDMsIDAuMTUpLFxuICAgIGJ1dHRvbjogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRNZWRpdW0sIDE0LCAxLjc1LCAwLjQsIGNhc2VBbGxDYXBzKSxcbiAgICBjYXB0aW9uOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodFJlZ3VsYXIsIDEyLCAxLjY2LCAwLjQpLFxuICAgIG92ZXJsaW5lOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodFJlZ3VsYXIsIDEyLCAyLjY2LCAxLCBjYXNlQWxsQ2FwcyksXG4gICAgLy8gVE9ETyB2NjogUmVtb3ZlIGhhbmRsaW5nIG9mICdpbmhlcml0JyB2YXJpYW50IGZyb20gdGhlIHRoZW1lIGFzIGl0IGlzIGFscmVhZHkgaGFuZGxlZCBpbiBNYXRlcmlhbCBVSSdzIFR5cG9ncmFwaHkgY29tcG9uZW50LiBBbHNvLCByZW1lbWJlciB0byByZW1vdmUgdGhlIGFzc29jaWF0ZWQgdHlwZXMuXG4gICAgaW5oZXJpdDoge1xuICAgICAgZm9udEZhbWlseTogJ2luaGVyaXQnLFxuICAgICAgZm9udFdlaWdodDogJ2luaGVyaXQnLFxuICAgICAgZm9udFNpemU6ICdpbmhlcml0JyxcbiAgICAgIGxpbmVIZWlnaHQ6ICdpbmhlcml0JyxcbiAgICAgIGxldHRlclNwYWNpbmc6ICdpbmhlcml0J1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGRlZXBtZXJnZShfZXh0ZW5kcyh7XG4gICAgaHRtbEZvbnRTaXplLFxuICAgIHB4VG9SZW0sXG4gICAgZm9udEZhbWlseSxcbiAgICBmb250U2l6ZSxcbiAgICBmb250V2VpZ2h0TGlnaHQsXG4gICAgZm9udFdlaWdodFJlZ3VsYXIsXG4gICAgZm9udFdlaWdodE1lZGl1bSxcbiAgICBmb250V2VpZ2h0Qm9sZFxuICB9LCB2YXJpYW50cyksIG90aGVyLCB7XG4gICAgY2xvbmU6IGZhbHNlIC8vIE5vIG5lZWQgdG8gY2xvbmUgZGVlcFxuICB9KTtcbn0iLCJjb25zdCBzaGFkb3dLZXlVbWJyYU9wYWNpdHkgPSAwLjI7XG5jb25zdCBzaGFkb3dLZXlQZW51bWJyYU9wYWNpdHkgPSAwLjE0O1xuY29uc3Qgc2hhZG93QW1iaWVudFNoYWRvd09wYWNpdHkgPSAwLjEyO1xuZnVuY3Rpb24gY3JlYXRlU2hhZG93KC4uLnB4KSB7XG4gIHJldHVybiBbYCR7cHhbMF19cHggJHtweFsxXX1weCAke3B4WzJdfXB4ICR7cHhbM119cHggcmdiYSgwLDAsMCwke3NoYWRvd0tleVVtYnJhT3BhY2l0eX0pYCwgYCR7cHhbNF19cHggJHtweFs1XX1weCAke3B4WzZdfXB4ICR7cHhbN119cHggcmdiYSgwLDAsMCwke3NoYWRvd0tleVBlbnVtYnJhT3BhY2l0eX0pYCwgYCR7cHhbOF19cHggJHtweFs5XX1weCAke3B4WzEwXX1weCAke3B4WzExXX1weCByZ2JhKDAsMCwwLCR7c2hhZG93QW1iaWVudFNoYWRvd09wYWNpdHl9KWBdLmpvaW4oJywnKTtcbn1cblxuLy8gVmFsdWVzIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL21hdGVyaWFsLWNvbXBvbmVudHMvbWF0ZXJpYWwtY29tcG9uZW50cy13ZWIvYmxvYi9iZTg3NDdmOTQ1NzQ2NjljYjVlN2FkZDFhN2M1NGZhNDFhODljZWM3L3BhY2thZ2VzL21kYy1lbGV2YXRpb24vX3ZhcmlhYmxlcy5zY3NzXG5jb25zdCBzaGFkb3dzID0gWydub25lJywgY3JlYXRlU2hhZG93KDAsIDIsIDEsIC0xLCAwLCAxLCAxLCAwLCAwLCAxLCAzLCAwKSwgY3JlYXRlU2hhZG93KDAsIDMsIDEsIC0yLCAwLCAyLCAyLCAwLCAwLCAxLCA1LCAwKSwgY3JlYXRlU2hhZG93KDAsIDMsIDMsIC0yLCAwLCAzLCA0LCAwLCAwLCAxLCA4LCAwKSwgY3JlYXRlU2hhZG93KDAsIDIsIDQsIC0xLCAwLCA0LCA1LCAwLCAwLCAxLCAxMCwgMCksIGNyZWF0ZVNoYWRvdygwLCAzLCA1LCAtMSwgMCwgNSwgOCwgMCwgMCwgMSwgMTQsIDApLCBjcmVhdGVTaGFkb3coMCwgMywgNSwgLTEsIDAsIDYsIDEwLCAwLCAwLCAxLCAxOCwgMCksIGNyZWF0ZVNoYWRvdygwLCA0LCA1LCAtMiwgMCwgNywgMTAsIDEsIDAsIDIsIDE2LCAxKSwgY3JlYXRlU2hhZG93KDAsIDUsIDUsIC0zLCAwLCA4LCAxMCwgMSwgMCwgMywgMTQsIDIpLCBjcmVhdGVTaGFkb3coMCwgNSwgNiwgLTMsIDAsIDksIDEyLCAxLCAwLCAzLCAxNiwgMiksIGNyZWF0ZVNoYWRvdygwLCA2LCA2LCAtMywgMCwgMTAsIDE0LCAxLCAwLCA0LCAxOCwgMyksIGNyZWF0ZVNoYWRvdygwLCA2LCA3LCAtNCwgMCwgMTEsIDE1LCAxLCAwLCA0LCAyMCwgMyksIGNyZWF0ZVNoYWRvdygwLCA3LCA4LCAtNCwgMCwgMTIsIDE3LCAyLCAwLCA1LCAyMiwgNCksIGNyZWF0ZVNoYWRvdygwLCA3LCA4LCAtNCwgMCwgMTMsIDE5LCAyLCAwLCA1LCAyNCwgNCksIGNyZWF0ZVNoYWRvdygwLCA3LCA5LCAtNCwgMCwgMTQsIDIxLCAyLCAwLCA1LCAyNiwgNCksIGNyZWF0ZVNoYWRvdygwLCA4LCA5LCAtNSwgMCwgMTUsIDIyLCAyLCAwLCA2LCAyOCwgNSksIGNyZWF0ZVNoYWRvdygwLCA4LCAxMCwgLTUsIDAsIDE2LCAyNCwgMiwgMCwgNiwgMzAsIDUpLCBjcmVhdGVTaGFkb3coMCwgOCwgMTEsIC01LCAwLCAxNywgMjYsIDIsIDAsIDYsIDMyLCA1KSwgY3JlYXRlU2hhZG93KDAsIDksIDExLCAtNSwgMCwgMTgsIDI4LCAyLCAwLCA3LCAzNCwgNiksIGNyZWF0ZVNoYWRvdygwLCA5LCAxMiwgLTYsIDAsIDE5LCAyOSwgMiwgMCwgNywgMzYsIDYpLCBjcmVhdGVTaGFkb3coMCwgMTAsIDEzLCAtNiwgMCwgMjAsIDMxLCAzLCAwLCA4LCAzOCwgNyksIGNyZWF0ZVNoYWRvdygwLCAxMCwgMTMsIC02LCAwLCAyMSwgMzMsIDMsIDAsIDgsIDQwLCA3KSwgY3JlYXRlU2hhZG93KDAsIDEwLCAxNCwgLTYsIDAsIDIyLCAzNSwgMywgMCwgOCwgNDIsIDcpLCBjcmVhdGVTaGFkb3coMCwgMTEsIDE0LCAtNywgMCwgMjMsIDM2LCAzLCAwLCA5LCA0NCwgOCksIGNyZWF0ZVNoYWRvdygwLCAxMSwgMTUsIC03LCAwLCAyNCwgMzgsIDMsIDAsIDksIDQ2LCA4KV07XG5leHBvcnQgZGVmYXVsdCBzaGFkb3dzOyIsIi8vIFdlIG5lZWQgdG8gY2VudHJhbGl6ZSB0aGUgekluZGV4IGRlZmluaXRpb25zIGFzIHRoZXkgd29ya1xuLy8gbGlrZSBnbG9iYWwgdmFsdWVzIGluIHRoZSBicm93c2VyLlxuY29uc3QgekluZGV4ID0ge1xuICBtb2JpbGVTdGVwcGVyOiAxMDAwLFxuICBmYWI6IDEwNTAsXG4gIHNwZWVkRGlhbDogMTA1MCxcbiAgYXBwQmFyOiAxMTAwLFxuICBkcmF3ZXI6IDEyMDAsXG4gIG1vZGFsOiAxMzAwLFxuICBzbmFja2JhcjogMTQwMCxcbiAgdG9vbHRpcDogMTUwMFxufTtcbmV4cG9ydCBkZWZhdWx0IHpJbmRleDsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UgZnJvbSBcIkBtdWkvdXRpbHMvZm9ybWF0TXVpRXJyb3JNZXNzYWdlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJicmVha3BvaW50c1wiLCBcIm1peGluc1wiLCBcInNwYWNpbmdcIiwgXCJwYWxldHRlXCIsIFwidHJhbnNpdGlvbnNcIiwgXCJ0eXBvZ3JhcGh5XCIsIFwic2hhcGVcIl07XG5pbXBvcnQgZGVlcG1lcmdlIGZyb20gJ0BtdWkvdXRpbHMvZGVlcG1lcmdlJztcbmltcG9ydCBzdHlsZUZ1bmN0aW9uU3gsIHsgdW5zdGFibGVfZGVmYXVsdFN4Q29uZmlnIGFzIGRlZmF1bHRTeENvbmZpZyB9IGZyb20gJ0BtdWkvc3lzdGVtL3N0eWxlRnVuY3Rpb25TeCc7XG5pbXBvcnQgc3lzdGVtQ3JlYXRlVGhlbWUgZnJvbSAnQG11aS9zeXN0ZW0vY3JlYXRlVGhlbWUnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuaW1wb3J0IGNyZWF0ZU1peGlucyBmcm9tICcuL2NyZWF0ZU1peGlucyc7XG5pbXBvcnQgY3JlYXRlUGFsZXR0ZSBmcm9tICcuL2NyZWF0ZVBhbGV0dGUnO1xuaW1wb3J0IGNyZWF0ZVR5cG9ncmFwaHkgZnJvbSAnLi9jcmVhdGVUeXBvZ3JhcGh5JztcbmltcG9ydCBzaGFkb3dzIGZyb20gJy4vc2hhZG93cyc7XG5pbXBvcnQgY3JlYXRlVHJhbnNpdGlvbnMgZnJvbSAnLi9jcmVhdGVUcmFuc2l0aW9ucyc7XG5pbXBvcnQgekluZGV4IGZyb20gJy4vekluZGV4JztcbmZ1bmN0aW9uIGNyZWF0ZVRoZW1lKG9wdGlvbnMgPSB7fSwgLi4uYXJncykge1xuICBjb25zdCB7XG4gICAgICBtaXhpbnM6IG1peGluc0lucHV0ID0ge30sXG4gICAgICBwYWxldHRlOiBwYWxldHRlSW5wdXQgPSB7fSxcbiAgICAgIHRyYW5zaXRpb25zOiB0cmFuc2l0aW9uc0lucHV0ID0ge30sXG4gICAgICB0eXBvZ3JhcGh5OiB0eXBvZ3JhcGh5SW5wdXQgPSB7fVxuICAgIH0gPSBvcHRpb25zLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uob3B0aW9ucywgX2V4Y2x1ZGVkKTtcbiAgaWYgKG9wdGlvbnMudmFycyAmJlxuICAvLyBUaGUgZXJyb3Igc2hvdWxkIHRocm93IG9ubHkgZm9yIHRoZSByb290IHRoZW1lIGNyZWF0aW9uIGJlY2F1c2UgdXNlciBpcyBub3QgYWxsb3dlZCB0byB1c2UgYSBjdXN0b20gbm9kZSBgdmFyc2AuXG4gIC8vIGBnZW5lcmF0ZUNzc1ZhcnNgIGlzIHRoZSBjbG9zZXN0IGlkZW50aWZpZXIgZm9yIGNoZWNraW5nIHRoYXQgdGhlIGBvcHRpb25zYCBpcyBhIHJlc3VsdCBvZiBgZXh0ZW5kVGhlbWVgIHdpdGggQ1NTIHZhcmlhYmxlcyBzbyB0aGF0IHVzZXIgY2FuIGNyZWF0ZSBuZXcgdGhlbWUgZm9yIG5lc3RlZCBUaGVtZVByb3ZpZGVyLlxuICBvcHRpb25zLmdlbmVyYXRlQ3NzVmFycyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGBNVUk6IFxcYHZhcnNcXGAgaXMgYSBwcml2YXRlIGZpZWxkIHVzZWQgZm9yIENTUyB2YXJpYWJsZXMgc3VwcG9ydC5cblBsZWFzZSB1c2UgYW5vdGhlciBuYW1lLmAgOiBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlKDE4KSk7XG4gIH1cbiAgY29uc3QgcGFsZXR0ZSA9IGNyZWF0ZVBhbGV0dGUocGFsZXR0ZUlucHV0KTtcbiAgY29uc3Qgc3lzdGVtVGhlbWUgPSBzeXN0ZW1DcmVhdGVUaGVtZShvcHRpb25zKTtcbiAgbGV0IG11aVRoZW1lID0gZGVlcG1lcmdlKHN5c3RlbVRoZW1lLCB7XG4gICAgbWl4aW5zOiBjcmVhdGVNaXhpbnMoc3lzdGVtVGhlbWUuYnJlYWtwb2ludHMsIG1peGluc0lucHV0KSxcbiAgICBwYWxldHRlLFxuICAgIC8vIERvbid0IHVzZSBbLi4uc2hhZG93c10gdW50aWwgeW91J3ZlIHZlcmlmaWVkIGl0cyB0cmFuc3BpbGVkIGNvZGUgaXMgbm90IGludm9raW5nIHRoZSBpdGVyYXRvciBwcm90b2NvbC5cbiAgICBzaGFkb3dzOiBzaGFkb3dzLnNsaWNlKCksXG4gICAgdHlwb2dyYXBoeTogY3JlYXRlVHlwb2dyYXBoeShwYWxldHRlLCB0eXBvZ3JhcGh5SW5wdXQpLFxuICAgIHRyYW5zaXRpb25zOiBjcmVhdGVUcmFuc2l0aW9ucyh0cmFuc2l0aW9uc0lucHV0KSxcbiAgICB6SW5kZXg6IF9leHRlbmRzKHt9LCB6SW5kZXgpXG4gIH0pO1xuICBtdWlUaGVtZSA9IGRlZXBtZXJnZShtdWlUaGVtZSwgb3RoZXIpO1xuICBtdWlUaGVtZSA9IGFyZ3MucmVkdWNlKChhY2MsIGFyZ3VtZW50KSA9PiBkZWVwbWVyZ2UoYWNjLCBhcmd1bWVudCksIG11aVRoZW1lKTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBUT0RPIHY2OiBSZWZhY3RvciB0byB1c2UgZ2xvYmFsU3RhdGVDbGFzc2VzTWFwcGluZyBmcm9tIEBtdWkvdXRpbHMgb25jZSBgcmVhZE9ubHlgIHN0YXRlIGNsYXNzIGlzIHVzZWQgaW4gUmF0aW5nIGNvbXBvbmVudC5cbiAgICBjb25zdCBzdGF0ZUNsYXNzZXMgPSBbJ2FjdGl2ZScsICdjaGVja2VkJywgJ2NvbXBsZXRlZCcsICdkaXNhYmxlZCcsICdlcnJvcicsICdleHBhbmRlZCcsICdmb2N1c2VkJywgJ2ZvY3VzVmlzaWJsZScsICdyZXF1aXJlZCcsICdzZWxlY3RlZCddO1xuICAgIGNvbnN0IHRyYXZlcnNlID0gKG5vZGUsIGNvbXBvbmVudCkgPT4ge1xuICAgICAgbGV0IGtleTtcblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGd1YXJkLWZvci1pbiwgbm8tcmVzdHJpY3RlZC1zeW50YXhcbiAgICAgIGZvciAoa2V5IGluIG5vZGUpIHtcbiAgICAgICAgY29uc3QgY2hpbGQgPSBub2RlW2tleV07XG4gICAgICAgIGlmIChzdGF0ZUNsYXNzZXMuaW5kZXhPZihrZXkpICE9PSAtMSAmJiBPYmplY3Qua2V5cyhjaGlsZCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZUNsYXNzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJycsIGtleSk7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFtgTVVJOiBUaGUgXFxgJHtjb21wb25lbnR9XFxgIGNvbXBvbmVudCBpbmNyZWFzZXMgYCArIGB0aGUgQ1NTIHNwZWNpZmljaXR5IG9mIHRoZSBcXGAke2tleX1cXGAgaW50ZXJuYWwgc3RhdGUuYCwgJ1lvdSBjYW4gbm90IG92ZXJyaWRlIGl0IGxpa2UgdGhpczogJywgSlNPTi5zdHJpbmdpZnkobm9kZSwgbnVsbCwgMiksICcnLCBgSW5zdGVhZCwgeW91IG5lZWQgdG8gdXNlIHRoZSAnJi4ke3N0YXRlQ2xhc3N9JyBzeW50YXg6YCwgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICByb290OiB7XG4gICAgICAgICAgICAgICAgW2AmLiR7c3RhdGVDbGFzc31gXTogY2hpbGRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgbnVsbCwgMiksICcnLCAnaHR0cHM6Ly9tdWkuY29tL3Ivc3RhdGUtY2xhc3Nlcy1ndWlkZSddLmpvaW4oJ1xcbicpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gUmVtb3ZlIHRoZSBzdHlsZSB0byBwcmV2ZW50IGdsb2JhbCBjb25mbGljdHMuXG4gICAgICAgICAgbm9kZVtrZXldID0ge307XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIE9iamVjdC5rZXlzKG11aVRoZW1lLmNvbXBvbmVudHMpLmZvckVhY2goY29tcG9uZW50ID0+IHtcbiAgICAgIGNvbnN0IHN0eWxlT3ZlcnJpZGVzID0gbXVpVGhlbWUuY29tcG9uZW50c1tjb21wb25lbnRdLnN0eWxlT3ZlcnJpZGVzO1xuICAgICAgaWYgKHN0eWxlT3ZlcnJpZGVzICYmIGNvbXBvbmVudC5pbmRleE9mKCdNdWknKSA9PT0gMCkge1xuICAgICAgICB0cmF2ZXJzZShzdHlsZU92ZXJyaWRlcywgY29tcG9uZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBtdWlUaGVtZS51bnN0YWJsZV9zeENvbmZpZyA9IF9leHRlbmRzKHt9LCBkZWZhdWx0U3hDb25maWcsIG90aGVyID09IG51bGwgPyB2b2lkIDAgOiBvdGhlci51bnN0YWJsZV9zeENvbmZpZyk7XG4gIG11aVRoZW1lLnVuc3RhYmxlX3N4ID0gZnVuY3Rpb24gc3gocHJvcHMpIHtcbiAgICByZXR1cm4gc3R5bGVGdW5jdGlvblN4KHtcbiAgICAgIHN4OiBwcm9wcyxcbiAgICAgIHRoZW1lOiB0aGlzXG4gICAgfSk7XG4gIH07XG4gIHJldHVybiBtdWlUaGVtZTtcbn1cbmxldCB3YXJuZWRPbmNlID0gZmFsc2U7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTXVpVGhlbWUoLi4uYXJncykge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmICghd2FybmVkT25jZSkge1xuICAgICAgd2FybmVkT25jZSA9IHRydWU7XG4gICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiB0aGUgY3JlYXRlTXVpVGhlbWUgZnVuY3Rpb24gd2FzIHJlbmFtZWQgdG8gY3JlYXRlVGhlbWUuJywgJycsIFwiWW91IHNob3VsZCB1c2UgYGltcG9ydCB7IGNyZWF0ZVRoZW1lIH0gZnJvbSAnQG11aS9tYXRlcmlhbC9zdHlsZXMnYFwiXS5qb2luKCdcXG4nKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBjcmVhdGVUaGVtZSguLi5hcmdzKTtcbn1cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVRoZW1lOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6544\n")},6673:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   A: () => (/* binding */ createChainedFunction)\n/* harmony export */ });\n/**\n * Safe chained function.\n *\n * Will only create a new function if needed,\n * otherwise will pass back existing functions or null.\n */\nfunction createChainedFunction(...funcs) {\n  return funcs.reduce((acc, func) => {\n    if (func == null) {\n      return acc;\n    }\n    return function chainedFunction(...args) {\n      acc.apply(this, args);\n      func.apply(this, args);\n    };\n  }, () => {});\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjY3My5qcyIsIm1hcHBpbmdzIjoiOzs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLFVBQVU7QUFDYiIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL2NyZWF0ZUNoYWluZWRGdW5jdGlvbi9jcmVhdGVDaGFpbmVkRnVuY3Rpb24uanM/Y2UxNSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNhZmUgY2hhaW5lZCBmdW5jdGlvbi5cbiAqXG4gKiBXaWxsIG9ubHkgY3JlYXRlIGEgbmV3IGZ1bmN0aW9uIGlmIG5lZWRlZCxcbiAqIG90aGVyd2lzZSB3aWxsIHBhc3MgYmFjayBleGlzdGluZyBmdW5jdGlvbnMgb3IgbnVsbC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uKC4uLmZ1bmNzKSB7XG4gIHJldHVybiBmdW5jcy5yZWR1Y2UoKGFjYywgZnVuYykgPT4ge1xuICAgIGlmIChmdW5jID09IG51bGwpIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiBjaGFpbmVkRnVuY3Rpb24oLi4uYXJncykge1xuICAgICAgYWNjLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9O1xuICB9LCAoKSA9PiB7fSk7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6673\n")},6852:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _mui_utils_useForkRef__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1523);\n'use client';\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_mui_utils_useForkRef__WEBPACK_IMPORTED_MODULE_0__/* [\"default\"] */ .A);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjg1Mi5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7O0FBRStDO0FBQy9DLGlFQUFlLHNFQUFVIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy91c2VGb3JrUmVmLmpzPzY1ZjAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgdXNlRm9ya1JlZiBmcm9tICdAbXVpL3V0aWxzL3VzZUZvcmtSZWYnO1xuZXhwb3J0IGRlZmF1bHQgdXNlRm9ya1JlZjsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6852\n")},7091:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   Ay: () => (/* binding */ createTransitions)\n/* harmony export */ });\n/* unused harmony exports easing, duration */\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(8587);\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8168);\n\n\nconst _excluded = [\"duration\", \"easing\", \"delay\"];\n// Follow https://material.google.com/motion/duration-easing.html#duration-easing-natural-easing-curves\n// to learn the context in which each easing should be used.\nconst easing = {\n  // This is the most common easing curve.\n  easeInOut: 'cubic-bezier(0.4, 0, 0.2, 1)',\n  // Objects enter the screen at full velocity from off-screen and\n  // slowly decelerate to a resting point.\n  easeOut: 'cubic-bezier(0.0, 0, 0.2, 1)',\n  // Objects leave the screen at full velocity. They do not decelerate when off-screen.\n  easeIn: 'cubic-bezier(0.4, 0, 1, 1)',\n  // The sharp curve is used by objects that may return to the screen at any time.\n  sharp: 'cubic-bezier(0.4, 0, 0.6, 1)'\n};\n\n// Follow https://m2.material.io/guidelines/motion/duration-easing.html#duration-easing-common-durations\n// to learn when use what timing\nconst duration = {\n  shortest: 150,\n  shorter: 200,\n  short: 250,\n  // most basic recommended timing\n  standard: 300,\n  // this is to be used in complex animations\n  complex: 375,\n  // recommended when something is entering screen\n  enteringScreen: 225,\n  // recommended when something is leaving screen\n  leavingScreen: 195\n};\nfunction formatMs(milliseconds) {\n  return `${Math.round(milliseconds)}ms`;\n}\nfunction getAutoHeightDuration(height) {\n  if (!height) {\n    return 0;\n  }\n  const constant = height / 36;\n\n  // https://www.wolframalpha.com/input/?i=(4+%2B+15+*+(x+%2F+36+)+**+0.25+%2B+(x+%2F+36)+%2F+5)+*+10\n  return Math.round((4 + 15 * constant ** 0.25 + constant / 5) * 10);\n}\nfunction createTransitions(inputTransitions) {\n  const mergedEasing = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__/* [\"default\"] */ .A)({}, easing, inputTransitions.easing);\n  const mergedDuration = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__/* [\"default\"] */ .A)({}, duration, inputTransitions.duration);\n  const create = (props = ['all'], options = {}) => {\n    const {\n        duration: durationOption = mergedDuration.standard,\n        easing: easingOption = mergedEasing.easeInOut,\n        delay = 0\n      } = options,\n      other = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__/* [\"default\"] */ .A)(options, _excluded);\n    if (false) // removed by dead control flow\n{}\n    return (Array.isArray(props) ? props : [props]).map(animatedProp => `${animatedProp} ${typeof durationOption === 'string' ? durationOption : formatMs(durationOption)} ${easingOption} ${typeof delay === 'string' ? delay : formatMs(delay)}`).join(',');\n  };\n  return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__/* [\"default\"] */ .A)({\n    getAutoHeightDuration,\n    create\n  }, inputTransitions, {\n    easing: mergedEasing,\n    duration: mergedDuration\n  });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzA5MS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBb0c7QUFDMUM7QUFDMUQ7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVkseUJBQXlCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDZTtBQUNmLHVCQUF1Qix1RkFBUSxHQUFHO0FBQ2xDLHlCQUF5Qix1RkFBUSxHQUFHO0FBQ3BDLCtDQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUixjQUFjLDRHQUE2QjtBQUMzQyxRQUFRLEtBQXFDLEVBQUU7QUFBQSxFQXVCMUM7QUFDTCwyRUFBMkUsY0FBYyxFQUFFLGdGQUFnRixFQUFFLGNBQWMsRUFBRSxvREFBb0Q7QUFDalA7QUFDQSxTQUFTLHVGQUFRO0FBQ2pCO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL2NyZWF0ZVRyYW5zaXRpb25zLmpzPzg2YTUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImR1cmF0aW9uXCIsIFwiZWFzaW5nXCIsIFwiZGVsYXlcIl07XG4vLyBGb2xsb3cgaHR0cHM6Ly9tYXRlcmlhbC5nb29nbGUuY29tL21vdGlvbi9kdXJhdGlvbi1lYXNpbmcuaHRtbCNkdXJhdGlvbi1lYXNpbmctbmF0dXJhbC1lYXNpbmctY3VydmVzXG4vLyB0byBsZWFybiB0aGUgY29udGV4dCBpbiB3aGljaCBlYWNoIGVhc2luZyBzaG91bGQgYmUgdXNlZC5cbmV4cG9ydCBjb25zdCBlYXNpbmcgPSB7XG4gIC8vIFRoaXMgaXMgdGhlIG1vc3QgY29tbW9uIGVhc2luZyBjdXJ2ZS5cbiAgZWFzZUluT3V0OiAnY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKScsXG4gIC8vIE9iamVjdHMgZW50ZXIgdGhlIHNjcmVlbiBhdCBmdWxsIHZlbG9jaXR5IGZyb20gb2ZmLXNjcmVlbiBhbmRcbiAgLy8gc2xvd2x5IGRlY2VsZXJhdGUgdG8gYSByZXN0aW5nIHBvaW50LlxuICBlYXNlT3V0OiAnY3ViaWMtYmV6aWVyKDAuMCwgMCwgMC4yLCAxKScsXG4gIC8vIE9iamVjdHMgbGVhdmUgdGhlIHNjcmVlbiBhdCBmdWxsIHZlbG9jaXR5LiBUaGV5IGRvIG5vdCBkZWNlbGVyYXRlIHdoZW4gb2ZmLXNjcmVlbi5cbiAgZWFzZUluOiAnY3ViaWMtYmV6aWVyKDAuNCwgMCwgMSwgMSknLFxuICAvLyBUaGUgc2hhcnAgY3VydmUgaXMgdXNlZCBieSBvYmplY3RzIHRoYXQgbWF5IHJldHVybiB0byB0aGUgc2NyZWVuIGF0IGFueSB0aW1lLlxuICBzaGFycDogJ2N1YmljLWJlemllcigwLjQsIDAsIDAuNiwgMSknXG59O1xuXG4vLyBGb2xsb3cgaHR0cHM6Ly9tMi5tYXRlcmlhbC5pby9ndWlkZWxpbmVzL21vdGlvbi9kdXJhdGlvbi1lYXNpbmcuaHRtbCNkdXJhdGlvbi1lYXNpbmctY29tbW9uLWR1cmF0aW9uc1xuLy8gdG8gbGVhcm4gd2hlbiB1c2Ugd2hhdCB0aW1pbmdcbmV4cG9ydCBjb25zdCBkdXJhdGlvbiA9IHtcbiAgc2hvcnRlc3Q6IDE1MCxcbiAgc2hvcnRlcjogMjAwLFxuICBzaG9ydDogMjUwLFxuICAvLyBtb3N0IGJhc2ljIHJlY29tbWVuZGVkIHRpbWluZ1xuICBzdGFuZGFyZDogMzAwLFxuICAvLyB0aGlzIGlzIHRvIGJlIHVzZWQgaW4gY29tcGxleCBhbmltYXRpb25zXG4gIGNvbXBsZXg6IDM3NSxcbiAgLy8gcmVjb21tZW5kZWQgd2hlbiBzb21ldGhpbmcgaXMgZW50ZXJpbmcgc2NyZWVuXG4gIGVudGVyaW5nU2NyZWVuOiAyMjUsXG4gIC8vIHJlY29tbWVuZGVkIHdoZW4gc29tZXRoaW5nIGlzIGxlYXZpbmcgc2NyZWVuXG4gIGxlYXZpbmdTY3JlZW46IDE5NVxufTtcbmZ1bmN0aW9uIGZvcm1hdE1zKG1pbGxpc2Vjb25kcykge1xuICByZXR1cm4gYCR7TWF0aC5yb3VuZChtaWxsaXNlY29uZHMpfW1zYDtcbn1cbmZ1bmN0aW9uIGdldEF1dG9IZWlnaHREdXJhdGlvbihoZWlnaHQpIHtcbiAgaWYgKCFoZWlnaHQpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuICBjb25zdCBjb25zdGFudCA9IGhlaWdodCAvIDM2O1xuXG4gIC8vIGh0dHBzOi8vd3d3LndvbGZyYW1hbHBoYS5jb20vaW5wdXQvP2k9KDQrJTJCKzE1KyorKHgrJTJGKzM2KykrKiorMC4yNSslMkIrKHgrJTJGKzM2KSslMkYrNSkrKisxMFxuICByZXR1cm4gTWF0aC5yb3VuZCgoNCArIDE1ICogY29uc3RhbnQgKiogMC4yNSArIGNvbnN0YW50IC8gNSkgKiAxMCk7XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVUcmFuc2l0aW9ucyhpbnB1dFRyYW5zaXRpb25zKSB7XG4gIGNvbnN0IG1lcmdlZEVhc2luZyA9IF9leHRlbmRzKHt9LCBlYXNpbmcsIGlucHV0VHJhbnNpdGlvbnMuZWFzaW5nKTtcbiAgY29uc3QgbWVyZ2VkRHVyYXRpb24gPSBfZXh0ZW5kcyh7fSwgZHVyYXRpb24sIGlucHV0VHJhbnNpdGlvbnMuZHVyYXRpb24pO1xuICBjb25zdCBjcmVhdGUgPSAocHJvcHMgPSBbJ2FsbCddLCBvcHRpb25zID0ge30pID0+IHtcbiAgICBjb25zdCB7XG4gICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvbk9wdGlvbiA9IG1lcmdlZER1cmF0aW9uLnN0YW5kYXJkLFxuICAgICAgICBlYXNpbmc6IGVhc2luZ09wdGlvbiA9IG1lcmdlZEVhc2luZy5lYXNlSW5PdXQsXG4gICAgICAgIGRlbGF5ID0gMFxuICAgICAgfSA9IG9wdGlvbnMsXG4gICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKG9wdGlvbnMsIF9leGNsdWRlZCk7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnN0IGlzU3RyaW5nID0gdmFsdWUgPT4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJztcbiAgICAgIC8vIElFMTEgc3VwcG9ydCwgcmVwbGFjZSB3aXRoIE51bWJlci5pc05hTlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFsc1xuICAgICAgY29uc3QgaXNOdW1iZXIgPSB2YWx1ZSA9PiAhaXNOYU4ocGFyc2VGbG9hdCh2YWx1ZSkpO1xuICAgICAgaWYgKCFpc1N0cmluZyhwcm9wcykgJiYgIUFycmF5LmlzQXJyYXkocHJvcHMpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ01VSTogQXJndW1lbnQgXCJwcm9wc1wiIG11c3QgYmUgYSBzdHJpbmcgb3IgQXJyYXkuJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzTnVtYmVyKGR1cmF0aW9uT3B0aW9uKSAmJiAhaXNTdHJpbmcoZHVyYXRpb25PcHRpb24pKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYE1VSTogQXJndW1lbnQgXCJkdXJhdGlvblwiIG11c3QgYmUgYSBudW1iZXIgb3IgYSBzdHJpbmcgYnV0IGZvdW5kICR7ZHVyYXRpb25PcHRpb259LmApO1xuICAgICAgfVxuICAgICAgaWYgKCFpc1N0cmluZyhlYXNpbmdPcHRpb24pKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ01VSTogQXJndW1lbnQgXCJlYXNpbmdcIiBtdXN0IGJlIGEgc3RyaW5nLicpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc051bWJlcihkZWxheSkgJiYgIWlzU3RyaW5nKGRlbGF5KSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdNVUk6IEFyZ3VtZW50IFwiZGVsYXlcIiBtdXN0IGJlIGEgbnVtYmVyIG9yIGEgc3RyaW5nLicpO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiBTZWNvbmcgYXJndW1lbnQgb2YgdHJhbnNpdGlvbi5jcmVhdGUgbXVzdCBiZSBhbiBvYmplY3QuJywgXCJBcmd1bWVudHMgc2hvdWxkIGJlIGVpdGhlciBgY3JlYXRlKCdwcm9wMScsIG9wdGlvbnMpYCBvciBgY3JlYXRlKFsncHJvcDEnLCAncHJvcDInXSwgb3B0aW9ucylgXCJdLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICAgIGlmIChPYmplY3Qua2V5cyhvdGhlcikubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYE1VSTogVW5yZWNvZ25pemVkIGFyZ3VtZW50KHMpIFske09iamVjdC5rZXlzKG90aGVyKS5qb2luKCcsJyl9XS5gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIChBcnJheS5pc0FycmF5KHByb3BzKSA/IHByb3BzIDogW3Byb3BzXSkubWFwKGFuaW1hdGVkUHJvcCA9PiBgJHthbmltYXRlZFByb3B9ICR7dHlwZW9mIGR1cmF0aW9uT3B0aW9uID09PSAnc3RyaW5nJyA/IGR1cmF0aW9uT3B0aW9uIDogZm9ybWF0TXMoZHVyYXRpb25PcHRpb24pfSAke2Vhc2luZ09wdGlvbn0gJHt0eXBlb2YgZGVsYXkgPT09ICdzdHJpbmcnID8gZGVsYXkgOiBmb3JtYXRNcyhkZWxheSl9YCkuam9pbignLCcpO1xuICB9O1xuICByZXR1cm4gX2V4dGVuZHMoe1xuICAgIGdldEF1dG9IZWlnaHREdXJhdGlvbixcbiAgICBjcmVhdGVcbiAgfSwgaW5wdXRUcmFuc2l0aW9ucywge1xuICAgIGVhc2luZzogbWVyZ2VkRWFzaW5nLFxuICAgIGR1cmF0aW9uOiBtZXJnZWREdXJhdGlvblxuICB9KTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7091\n")},7149:(n,c,l)=>{"use strict";l.r(c),l.d(c,{default:()=>e.A});var e=l(3967)},7246:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval('var __webpack_unused_export__;\n\n"use client";\n\nvar _interopRequireDefault = __webpack_require__(4994);\n__webpack_unused_export__ = ({\n  value: true\n});\nexports.A = void 0;\nvar _createSvgIcon = _interopRequireDefault(__webpack_require__(2032));\nvar _jsxRuntime = __webpack_require__(4848);\nvar _default = exports.A = (0, _createSvgIcon.default)([/*#__PURE__*/(0, _jsxRuntime.jsx)("circle", {\n  cx: "9",\n  cy: "9",\n  r: "4"\n}, "0"), /*#__PURE__*/(0, _jsxRuntime.jsx)("path", {\n  d: "M9 15c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4m7.76-9.64-1.68 1.69c.84 1.18.84 2.71 0 3.89l1.68 1.69c2.02-2.02 2.02-5.07 0-7.27M20.07 2l-1.63 1.63c2.77 3.02 2.77 7.56 0 10.74L20.07 16c3.9-3.89 3.91-9.95 0-14"\n}, "1")], \'RecordVoiceOver\');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzI0Ni5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYjs7QUFFQSw2QkFBNkIsbUJBQU8sQ0FBQyxJQUE4QztBQUNuRiw2QkFBNkM7QUFDN0M7QUFDQSxDQUFDLENBQUM7QUFDRixTQUFlO0FBQ2YsNENBQTRDLG1CQUFPLENBQUMsSUFBdUI7QUFDM0Usa0JBQWtCLG1CQUFPLENBQUMsSUFBbUI7QUFDN0MsZUFBZSxTQUFlO0FBQzlCO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL2ljb25zLW1hdGVyaWFsL1JlY29yZFZvaWNlT3Zlci5qcz85MWRlIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXCJ1c2UgY2xpZW50XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfY3JlYXRlU3ZnSWNvbiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdXRpbHMvY3JlYXRlU3ZnSWNvblwiKSk7XG52YXIgX2pzeFJ1bnRpbWUgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSAoMCwgX2NyZWF0ZVN2Z0ljb24uZGVmYXVsdCkoWy8qI19fUFVSRV9fKi8oMCwgX2pzeFJ1bnRpbWUuanN4KShcImNpcmNsZVwiLCB7XG4gIGN4OiBcIjlcIixcbiAgY3k6IFwiOVwiLFxuICByOiBcIjRcIlxufSwgXCIwXCIpLCAvKiNfX1BVUkVfXyovKDAsIF9qc3hSdW50aW1lLmpzeCkoXCJwYXRoXCIsIHtcbiAgZDogXCJNOSAxNWMtMi42NyAwLTggMS4zNC04IDR2MmgxNnYtMmMwLTIuNjYtNS4zMy00LTgtNG03Ljc2LTkuNjQtMS42OCAxLjY5Yy44NCAxLjE4Ljg0IDIuNzEgMCAzLjg5bDEuNjggMS42OWMyLjAyLTIuMDIgMi4wMi01LjA3IDAtNy4yN00yMC4wNyAybC0xLjYzIDEuNjNjMi43NyAzLjAyIDIuNzcgNy41NiAwIDEwLjc0TDIwLjA3IDE2YzMuOS0zLjg5IDMuOTEtOS45NSAwLTE0XCJcbn0sIFwiMVwiKV0sICdSZWNvcmRWb2ljZU92ZXInKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7246\n')},7320:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n  \"default\": () => (/* reexport */ getDisplayName),\n  getFunctionName: () => (/* reexport */ getFunctionName)\n});\n\n// EXTERNAL MODULE: ./node_modules/react-is/cjs/react-is.production.js\nvar react_is_production = __webpack_require__(4405);\n;// ./node_modules/@mui/utils/esm/getDisplayName/getDisplayName.js\n\n\n// Simplified polyfill for IE11 support\n// https://github.com/JamesMGreene/Function.name/blob/58b314d4a983110c3682f1228f845d39ccca1817/Function.name.js#L3\nconst fnNameMatchRegex = /^\\s*function(?:\\s|\\s*\\/\\*.*\\*\\/\\s*)+([^(\\s/]*)\\s*/;\nfunction getFunctionName(fn) {\n  const match = `${fn}`.match(fnNameMatchRegex);\n  const name = match && match[1];\n  return name || '';\n}\nfunction getFunctionComponentName(Component, fallback = '') {\n  return Component.displayName || Component.name || getFunctionName(Component) || fallback;\n}\nfunction getWrappedName(outerType, innerType, wrapperName) {\n  const functionName = getFunctionComponentName(innerType);\n  return outerType.displayName || (functionName !== '' ? `${wrapperName}(${functionName})` : wrapperName);\n}\n\n/**\n * cherry-pick from\n * https://github.com/facebook/react/blob/769b1f270e1251d9dbdce0fcbd9e92e502d059b8/packages/shared/getComponentName.js\n * originally forked from recompose/getDisplayName with added IE11 support\n */\nfunction getDisplayName(Component) {\n  if (Component == null) {\n    return undefined;\n  }\n  if (typeof Component === 'string') {\n    return Component;\n  }\n  if (typeof Component === 'function') {\n    return getFunctionComponentName(Component, 'Component');\n  }\n\n  // TypeScript can't have components as objects but they exist in the form of `memo` or `Suspense`\n  if (typeof Component === 'object') {\n    switch (Component.$$typeof) {\n      case react_is_production/* ForwardRef */.vM:\n        return getWrappedName(Component, Component.render, 'ForwardRef');\n      case react_is_production/* Memo */.lD:\n        return getWrappedName(Component, Component.type, 'memo');\n      default:\n        return undefined;\n    }\n  }\n  return undefined;\n}\n;// ./node_modules/@mui/utils/esm/getDisplayName/index.js\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzMyMC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBNEM7O0FBRTVDO0FBQ0E7QUFDQTtBQUNPO0FBQ1AsbUJBQW1CLEdBQUc7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDREQUE0RCxZQUFZLEdBQUcsYUFBYTtBQUN4Rjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ2U7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxzQ0FBVTtBQUNyQjtBQUNBLFdBQVcsZ0NBQUk7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDOztBQzlDMkMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2VzbS9nZXREaXNwbGF5TmFtZS9nZXREaXNwbGF5TmFtZS5qcz9kMzBiIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL2dldERpc3BsYXlOYW1lL2luZGV4LmpzPzAwNzAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9yd2FyZFJlZiwgTWVtbyB9IGZyb20gJ3JlYWN0LWlzJztcblxuLy8gU2ltcGxpZmllZCBwb2x5ZmlsbCBmb3IgSUUxMSBzdXBwb3J0XG4vLyBodHRwczovL2dpdGh1Yi5jb20vSmFtZXNNR3JlZW5lL0Z1bmN0aW9uLm5hbWUvYmxvYi81OGIzMTRkNGE5ODMxMTBjMzY4MmYxMjI4Zjg0NWQzOWNjY2ExODE3L0Z1bmN0aW9uLm5hbWUuanMjTDNcbmNvbnN0IGZuTmFtZU1hdGNoUmVnZXggPSAvXlxccypmdW5jdGlvbig/Olxcc3xcXHMqXFwvXFwqLipcXCpcXC9cXHMqKSsoW14oXFxzL10qKVxccyovO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZ1bmN0aW9uTmFtZShmbikge1xuICBjb25zdCBtYXRjaCA9IGAke2ZufWAubWF0Y2goZm5OYW1lTWF0Y2hSZWdleCk7XG4gIGNvbnN0IG5hbWUgPSBtYXRjaCAmJiBtYXRjaFsxXTtcbiAgcmV0dXJuIG5hbWUgfHwgJyc7XG59XG5mdW5jdGlvbiBnZXRGdW5jdGlvbkNvbXBvbmVudE5hbWUoQ29tcG9uZW50LCBmYWxsYmFjayA9ICcnKSB7XG4gIHJldHVybiBDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgQ29tcG9uZW50Lm5hbWUgfHwgZ2V0RnVuY3Rpb25OYW1lKENvbXBvbmVudCkgfHwgZmFsbGJhY2s7XG59XG5mdW5jdGlvbiBnZXRXcmFwcGVkTmFtZShvdXRlclR5cGUsIGlubmVyVHlwZSwgd3JhcHBlck5hbWUpIHtcbiAgY29uc3QgZnVuY3Rpb25OYW1lID0gZ2V0RnVuY3Rpb25Db21wb25lbnROYW1lKGlubmVyVHlwZSk7XG4gIHJldHVybiBvdXRlclR5cGUuZGlzcGxheU5hbWUgfHwgKGZ1bmN0aW9uTmFtZSAhPT0gJycgPyBgJHt3cmFwcGVyTmFtZX0oJHtmdW5jdGlvbk5hbWV9KWAgOiB3cmFwcGVyTmFtZSk7XG59XG5cbi8qKlxuICogY2hlcnJ5LXBpY2sgZnJvbVxuICogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2Jsb2IvNzY5YjFmMjcwZTEyNTFkOWRiZGNlMGZjYmQ5ZTkyZTUwMmQwNTliOC9wYWNrYWdlcy9zaGFyZWQvZ2V0Q29tcG9uZW50TmFtZS5qc1xuICogb3JpZ2luYWxseSBmb3JrZWQgZnJvbSByZWNvbXBvc2UvZ2V0RGlzcGxheU5hbWUgd2l0aCBhZGRlZCBJRTExIHN1cHBvcnRcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0RGlzcGxheU5hbWUoQ29tcG9uZW50KSB7XG4gIGlmIChDb21wb25lbnQgPT0gbnVsbCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIENvbXBvbmVudDtcbiAgfVxuICBpZiAodHlwZW9mIENvbXBvbmVudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBnZXRGdW5jdGlvbkNvbXBvbmVudE5hbWUoQ29tcG9uZW50LCAnQ29tcG9uZW50Jyk7XG4gIH1cblxuICAvLyBUeXBlU2NyaXB0IGNhbid0IGhhdmUgY29tcG9uZW50cyBhcyBvYmplY3RzIGJ1dCB0aGV5IGV4aXN0IGluIHRoZSBmb3JtIG9mIGBtZW1vYCBvciBgU3VzcGVuc2VgXG4gIGlmICh0eXBlb2YgQ29tcG9uZW50ID09PSAnb2JqZWN0Jykge1xuICAgIHN3aXRjaCAoQ29tcG9uZW50LiQkdHlwZW9mKSB7XG4gICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgIHJldHVybiBnZXRXcmFwcGVkTmFtZShDb21wb25lbnQsIENvbXBvbmVudC5yZW5kZXIsICdGb3J3YXJkUmVmJyk7XG4gICAgICBjYXNlIE1lbW86XG4gICAgICAgIHJldHVybiBnZXRXcmFwcGVkTmFtZShDb21wb25lbnQsIENvbXBvbmVudC50eXBlLCAnbWVtbycpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn0iLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSAnLi9nZXREaXNwbGF5TmFtZSc7XG5leHBvcnQgKiBmcm9tICcuL2dldERpc3BsYXlOYW1lJzsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7320\n")},7365:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   A: () => (/* binding */ setRef)\n/* harmony export */ });\n/**\n * TODO v5: consider making it private\n *\n * passes {value} to {ref}\n *\n * WARNING: Be sure to only call this inside a callback that is passed as a ref.\n * Otherwise, make sure to cleanup the previous {ref} if it changes. See\n * https://github.com/mui/material-ui/issues/13539\n *\n * Useful if you want to expose the ref of an inner component to the public API\n * while still using it inside the component.\n * @param ref A ref callback or ref object. If anything falsy, this is a no-op.\n */\nfunction setRef(ref, value) {\n  if (typeof ref === 'function') {\n    ref(value);\n  } else if (ref) {\n    ref.current = value;\n  }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzM2NS5qcyIsIm1hcHBpbmdzIjoiOzs7QUFBQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU8sSUFBSTtBQUN0QjtBQUNBO0FBQ0EsaURBQWlELEtBQUs7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ2U7QUFDZjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL3NldFJlZi9zZXRSZWYuanM/ZDU4NSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRPRE8gdjU6IGNvbnNpZGVyIG1ha2luZyBpdCBwcml2YXRlXG4gKlxuICogcGFzc2VzIHt2YWx1ZX0gdG8ge3JlZn1cbiAqXG4gKiBXQVJOSU5HOiBCZSBzdXJlIHRvIG9ubHkgY2FsbCB0aGlzIGluc2lkZSBhIGNhbGxiYWNrIHRoYXQgaXMgcGFzc2VkIGFzIGEgcmVmLlxuICogT3RoZXJ3aXNlLCBtYWtlIHN1cmUgdG8gY2xlYW51cCB0aGUgcHJldmlvdXMge3JlZn0gaWYgaXQgY2hhbmdlcy4gU2VlXG4gKiBodHRwczovL2dpdGh1Yi5jb20vbXVpL21hdGVyaWFsLXVpL2lzc3Vlcy8xMzUzOVxuICpcbiAqIFVzZWZ1bCBpZiB5b3Ugd2FudCB0byBleHBvc2UgdGhlIHJlZiBvZiBhbiBpbm5lciBjb21wb25lbnQgdG8gdGhlIHB1YmxpYyBBUElcbiAqIHdoaWxlIHN0aWxsIHVzaW5nIGl0IGluc2lkZSB0aGUgY29tcG9uZW50LlxuICogQHBhcmFtIHJlZiBBIHJlZiBjYWxsYmFjayBvciByZWYgb2JqZWN0LiBJZiBhbnl0aGluZyBmYWxzeSwgdGhpcyBpcyBhIG5vLW9wLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzZXRSZWYocmVmLCB2YWx1ZSkge1xuICBpZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJlZih2YWx1ZSk7XG4gIH0gZWxzZSBpZiAocmVmKSB7XG4gICAgcmVmLmN1cnJlbnQgPSB2YWx1ZTtcbiAgfVxufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7365\n")},7379:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   A: () => (/* binding */ resolveProps)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8168);\n\n/**\n * Add keys, values of `defaultProps` that does not exist in `props`\n * @param {object} defaultProps\n * @param {object} props\n * @returns {object} resolved props\n */\nfunction resolveProps(defaultProps, props) {\n  const output = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)({}, props);\n  Object.keys(defaultProps).forEach(propName => {\n    if (propName.toString().match(/^(components|slots)$/)) {\n      output[propName] = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)({}, defaultProps[propName], output[propName]);\n    } else if (propName.toString().match(/^(componentsProps|slotProps)$/)) {\n      const defaultSlotProps = defaultProps[propName] || {};\n      const slotProps = props[propName];\n      output[propName] = {};\n      if (!slotProps || !Object.keys(slotProps)) {\n        // Reduce the iteration if the slot props is empty\n        output[propName] = defaultSlotProps;\n      } else if (!defaultSlotProps || !Object.keys(defaultSlotProps)) {\n        // Reduce the iteration if the default slot props is empty\n        output[propName] = slotProps;\n      } else {\n        output[propName] = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)({}, slotProps);\n        Object.keys(defaultSlotProps).forEach(slotPropName => {\n          output[propName][slotPropName] = resolveProps(defaultSlotProps[slotPropName], slotProps[slotPropName]);\n        });\n      }\n    } else if (output[propName] === undefined) {\n      output[propName] = defaultProps[propName];\n    }\n  });\n  return output;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzM3OS5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQTBEO0FBQzFEO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLGFBQWEsUUFBUTtBQUNyQjtBQUNlO0FBQ2YsaUJBQWlCLHVGQUFRLEdBQUc7QUFDNUI7QUFDQTtBQUNBLHlCQUF5Qix1RkFBUSxHQUFHO0FBQ3BDLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLFFBQVE7QUFDUiwyQkFBMkIsdUZBQVEsR0FBRztBQUN0QztBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL3Jlc29sdmVQcm9wcy9yZXNvbHZlUHJvcHMuanM/NzdiZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbi8qKlxuICogQWRkIGtleXMsIHZhbHVlcyBvZiBgZGVmYXVsdFByb3BzYCB0aGF0IGRvZXMgbm90IGV4aXN0IGluIGBwcm9wc2BcbiAqIEBwYXJhbSB7b2JqZWN0fSBkZWZhdWx0UHJvcHNcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wc1xuICogQHJldHVybnMge29iamVjdH0gcmVzb2x2ZWQgcHJvcHNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVzb2x2ZVByb3BzKGRlZmF1bHRQcm9wcywgcHJvcHMpIHtcbiAgY29uc3Qgb3V0cHV0ID0gX2V4dGVuZHMoe30sIHByb3BzKTtcbiAgT2JqZWN0LmtleXMoZGVmYXVsdFByb3BzKS5mb3JFYWNoKHByb3BOYW1lID0+IHtcbiAgICBpZiAocHJvcE5hbWUudG9TdHJpbmcoKS5tYXRjaCgvXihjb21wb25lbnRzfHNsb3RzKSQvKSkge1xuICAgICAgb3V0cHV0W3Byb3BOYW1lXSA9IF9leHRlbmRzKHt9LCBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdLCBvdXRwdXRbcHJvcE5hbWVdKTtcbiAgICB9IGVsc2UgaWYgKHByb3BOYW1lLnRvU3RyaW5nKCkubWF0Y2goL14oY29tcG9uZW50c1Byb3BzfHNsb3RQcm9wcykkLykpIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRTbG90UHJvcHMgPSBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdIHx8IHt9O1xuICAgICAgY29uc3Qgc2xvdFByb3BzID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgb3V0cHV0W3Byb3BOYW1lXSA9IHt9O1xuICAgICAgaWYgKCFzbG90UHJvcHMgfHwgIU9iamVjdC5rZXlzKHNsb3RQcm9wcykpIHtcbiAgICAgICAgLy8gUmVkdWNlIHRoZSBpdGVyYXRpb24gaWYgdGhlIHNsb3QgcHJvcHMgaXMgZW1wdHlcbiAgICAgICAgb3V0cHV0W3Byb3BOYW1lXSA9IGRlZmF1bHRTbG90UHJvcHM7XG4gICAgICB9IGVsc2UgaWYgKCFkZWZhdWx0U2xvdFByb3BzIHx8ICFPYmplY3Qua2V5cyhkZWZhdWx0U2xvdFByb3BzKSkge1xuICAgICAgICAvLyBSZWR1Y2UgdGhlIGl0ZXJhdGlvbiBpZiB0aGUgZGVmYXVsdCBzbG90IHByb3BzIGlzIGVtcHR5XG4gICAgICAgIG91dHB1dFtwcm9wTmFtZV0gPSBzbG90UHJvcHM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXRwdXRbcHJvcE5hbWVdID0gX2V4dGVuZHMoe30sIHNsb3RQcm9wcyk7XG4gICAgICAgIE9iamVjdC5rZXlzKGRlZmF1bHRTbG90UHJvcHMpLmZvckVhY2goc2xvdFByb3BOYW1lID0+IHtcbiAgICAgICAgICBvdXRwdXRbcHJvcE5hbWVdW3Nsb3RQcm9wTmFtZV0gPSByZXNvbHZlUHJvcHMoZGVmYXVsdFNsb3RQcm9wc1tzbG90UHJvcE5hbWVdLCBzbG90UHJvcHNbc2xvdFByb3BOYW1lXSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAob3V0cHV0W3Byb3BOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBvdXRwdXRbcHJvcE5hbWVdID0gZGVmYXVsdFByb3BzW3Byb3BOYW1lXTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gb3V0cHV0O1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7379\n')},7437:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   AH: () => (/* binding */ css),\n/* harmony export */   i7: () => (/* binding */ keyframes),\n/* harmony export */   mL: () => (/* binding */ Global)\n/* harmony export */ });\n/* unused harmony exports ClassNames, createElement, jsx */\n/* harmony import */ var _emotion_element_f0de968e_browser_esm_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(4684);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1594);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _emotion_utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(41);\n/* harmony import */ var _emotion_use_insertion_effect_with_fallbacks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1287);\n/* harmony import */ var _emotion_serialize__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(3174);\n/* harmony import */ var _emotion_cache__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(5655);\n/* harmony import */ var hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(4146);\n/* harmony import */ var hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_4__);\n\n\n\n\n\n\n\n\n\n\n\n\nvar jsx = function jsx(type, props) {\n  // eslint-disable-next-line prefer-rest-params\n  var args = arguments;\n\n  if (props == null || !_emotion_element_f0de968e_browser_esm_js__WEBPACK_IMPORTED_MODULE_5__.h.call(props, \'css\')) {\n    return react__WEBPACK_IMPORTED_MODULE_0__.createElement.apply(undefined, args);\n  }\n\n  var argsLength = args.length;\n  var createElementArgArray = new Array(argsLength);\n  createElementArgArray[0] = _emotion_element_f0de968e_browser_esm_js__WEBPACK_IMPORTED_MODULE_5__.E;\n  createElementArgArray[1] = (0,_emotion_element_f0de968e_browser_esm_js__WEBPACK_IMPORTED_MODULE_5__.c)(type, props);\n\n  for (var i = 2; i < argsLength; i++) {\n    createElementArgArray[i] = args[i];\n  }\n\n  return react__WEBPACK_IMPORTED_MODULE_0__.createElement.apply(null, createElementArgArray);\n};\n\n(function (_jsx) {\n  var JSX;\n\n  (function (_JSX) {})(JSX || (JSX = _jsx.JSX || (_jsx.JSX = {})));\n})(jsx || (jsx = {}));\n\n// initial render from browser, insertBefore context.sheet.tags[0] or if a style hasn\'t been inserted there yet, appendChild\n// initial client-side render from SSR, use place of hydrating tag\n\nvar Global = /* #__PURE__ */(0,_emotion_element_f0de968e_browser_esm_js__WEBPACK_IMPORTED_MODULE_5__.w)(function (props, cache) {\n\n  var styles = props.styles;\n  var serialized = (0,_emotion_serialize__WEBPACK_IMPORTED_MODULE_2__/* .serializeStyles */ .J)([styles], undefined, react__WEBPACK_IMPORTED_MODULE_0__.useContext(_emotion_element_f0de968e_browser_esm_js__WEBPACK_IMPORTED_MODULE_5__.T));\n  // but it is based on a constant that will never change at runtime\n  // it\'s effectively like having two implementations and switching them out\n  // so it\'s not actually breaking anything\n\n\n  var sheetRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef();\n  (0,_emotion_use_insertion_effect_with_fallbacks__WEBPACK_IMPORTED_MODULE_1__/* .useInsertionEffectWithLayoutFallback */ .i)(function () {\n    var key = cache.key + "-global"; // use case of https://github.com/emotion-js/emotion/issues/2675\n\n    var sheet = new cache.sheet.constructor({\n      key: key,\n      nonce: cache.sheet.nonce,\n      container: cache.sheet.container,\n      speedy: cache.sheet.isSpeedy\n    });\n    var rehydrating = false;\n    var node = document.querySelector("style[data-emotion=\\"" + key + " " + serialized.name + "\\"]");\n\n    if (cache.sheet.tags.length) {\n      sheet.before = cache.sheet.tags[0];\n    }\n\n    if (node !== null) {\n      rehydrating = true; // clear the hash so this node won\'t be recognizable as rehydratable by other <Global/>s\n\n      node.setAttribute(\'data-emotion\', key);\n      sheet.hydrate([node]);\n    }\n\n    sheetRef.current = [sheet, rehydrating];\n    return function () {\n      sheet.flush();\n    };\n  }, [cache]);\n  (0,_emotion_use_insertion_effect_with_fallbacks__WEBPACK_IMPORTED_MODULE_1__/* .useInsertionEffectWithLayoutFallback */ .i)(function () {\n    var sheetRefCurrent = sheetRef.current;\n    var sheet = sheetRefCurrent[0],\n        rehydrating = sheetRefCurrent[1];\n\n    if (rehydrating) {\n      sheetRefCurrent[1] = false;\n      return;\n    }\n\n    if (serialized.next !== undefined) {\n      // insert keyframes\n      (0,_emotion_utils__WEBPACK_IMPORTED_MODULE_6__/* .insertStyles */ .sk)(cache, serialized.next, true);\n    }\n\n    if (sheet.tags.length) {\n      // if this doesn\'t exist then it will be null so the style element will be appended\n      var element = sheet.tags[sheet.tags.length - 1].nextElementSibling;\n      sheet.before = element;\n      sheet.flush();\n    }\n\n    cache.insert("", serialized, sheet, false);\n  }, [cache, serialized.name]);\n  return null;\n});\n\nfunction css() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  return (0,_emotion_serialize__WEBPACK_IMPORTED_MODULE_2__/* .serializeStyles */ .J)(args);\n}\n\nfunction keyframes() {\n  var insertable = css.apply(void 0, arguments);\n  var name = "animation-" + insertable.name;\n  return {\n    name: name,\n    styles: "@keyframes " + name + "{" + insertable.styles + "}",\n    anim: 1,\n    toString: function toString() {\n      return "_EMO_" + this.name + "_" + this.styles + "_EMO_";\n    }\n  };\n}\n\nvar classnames = function classnames(args) {\n  var len = args.length;\n  var i = 0;\n  var cls = \'\';\n\n  for (; i < len; i++) {\n    var arg = args[i];\n    if (arg == null) continue;\n    var toAdd = void 0;\n\n    switch (typeof arg) {\n      case \'boolean\':\n        break;\n\n      case \'object\':\n        {\n          if (Array.isArray(arg)) {\n            toAdd = classnames(arg);\n          } else {\n\n            toAdd = \'\';\n\n            for (var k in arg) {\n              if (arg[k] && k) {\n                toAdd && (toAdd += \' \');\n                toAdd += k;\n              }\n            }\n          }\n\n          break;\n        }\n\n      default:\n        {\n          toAdd = arg;\n        }\n    }\n\n    if (toAdd) {\n      cls && (cls += \' \');\n      cls += toAdd;\n    }\n  }\n\n  return cls;\n};\n\nfunction merge(registered, css, className) {\n  var registeredStyles = [];\n  var rawClassName = getRegisteredStyles(registered, registeredStyles, className);\n\n  if (registeredStyles.length < 2) {\n    return className;\n  }\n\n  return rawClassName + css(registeredStyles);\n}\n\nvar Insertion = function Insertion(_ref) {\n  var cache = _ref.cache,\n      serializedArr = _ref.serializedArr;\n  useInsertionEffectAlwaysWithSyncFallback(function () {\n\n    for (var i = 0; i < serializedArr.length; i++) {\n      insertStyles(cache, serializedArr[i], false);\n    }\n  });\n\n  return null;\n};\n\nvar ClassNames = /* #__PURE__ */(/* unused pure expression or super */ null && (withEmotionCache(function (props, cache) {\n  var hasRendered = false;\n  var serializedArr = [];\n\n  var css = function css() {\n    if (hasRendered && isDevelopment) {\n      throw new Error(\'css can only be used during render\');\n    }\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    var serialized = serializeStyles(args, cache.registered);\n    serializedArr.push(serialized); // registration has to happen here as the result of this might get consumed by `cx`\n\n    registerStyles(cache, serialized, false);\n    return cache.key + "-" + serialized.name;\n  };\n\n  var cx = function cx() {\n    if (hasRendered && isDevelopment) {\n      throw new Error(\'cx can only be used during render\');\n    }\n\n    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      args[_key2] = arguments[_key2];\n    }\n\n    return merge(cache.registered, css, classnames(args));\n  };\n\n  var content = {\n    css: css,\n    cx: cx,\n    theme: React.useContext(ThemeContext)\n  };\n  var ele = props.children(content);\n  hasRendered = true;\n  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Insertion, {\n    cache: cache,\n    serializedArr: serializedArr\n  }), ele);\n})));\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzQzNy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBNks7QUFDOEI7QUFDNUs7QUFDb0Q7QUFDMkQ7QUFDekY7QUFDN0I7QUFDZ0I7QUFDVDtBQUM2QztBQUMzQzs7QUFFakM7QUFDQTtBQUNBOztBQUVBLHdCQUF3Qix1RUFBTTtBQUM5QixXQUFXLGdEQUFtQjtBQUM5Qjs7QUFFQTtBQUNBO0FBQ0EsNkJBQTZCLHVFQUFPO0FBQ3BDLDZCQUE2QiwyRUFBa0I7O0FBRS9DLGtCQUFrQixnQkFBZ0I7QUFDbEM7QUFDQTs7QUFFQSxTQUFTLGdEQUFtQjtBQUM1Qjs7QUFFQTtBQUNBOztBQUVBLHFCQUFxQiwwQ0FBMEM7QUFDL0QsQ0FBQyxrQkFBa0I7O0FBRW5CO0FBQ0E7O0FBRUEsNEJBQTRCLDJFQUFnQjs7QUFFNUM7QUFDQSxtQkFBbUIsNEVBQWUsc0JBQXNCLDZDQUFnQixDQUFDLHVFQUFZO0FBQ3JGO0FBQ0E7QUFDQTs7O0FBR0EsaUJBQWlCLHlDQUFZO0FBQzdCLEVBQUUsMkhBQW9DO0FBQ3RDLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDBCQUEwQjs7QUFFMUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILEVBQUUsMkhBQW9DO0FBQ3RDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTSxzRUFBWTtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQSxDQUFDOztBQUVEO0FBQ0Esc0VBQXNFLGFBQWE7QUFDbkY7QUFDQTs7QUFFQSxTQUFTLDRFQUFlO0FBQ3hCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMsMEJBQTBCO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTLFNBQVM7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7O0FBRVo7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CLDBCQUEwQjtBQUM5QztBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBLGdDQUFnQztBQUNoQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHdFQUF3RSxhQUFhO0FBQ3JGO0FBQ0E7O0FBRUE7QUFDQSxvQ0FBb0M7O0FBRXBDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwyRUFBMkUsZUFBZTtBQUMxRjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQyxDQUFDOztBQUV1RSIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3JlYWN0L2Rpc3QvZW1vdGlvbi1yZWFjdC5icm93c2VyLmVzbS5qcz8wMWUxIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGggYXMgaGFzT3duLCBFIGFzIEVtb3Rpb24sIGMgYXMgY3JlYXRlRW1vdGlvblByb3BzLCB3IGFzIHdpdGhFbW90aW9uQ2FjaGUsIFQgYXMgVGhlbWVDb250ZXh0LCBpIGFzIGlzRGV2ZWxvcG1lbnQgfSBmcm9tICcuL2Vtb3Rpb24tZWxlbWVudC1mMGRlOTY4ZS5icm93c2VyLmVzbS5qcyc7XG5leHBvcnQgeyBDIGFzIENhY2hlUHJvdmlkZXIsIFQgYXMgVGhlbWVDb250ZXh0LCBhIGFzIFRoZW1lUHJvdmlkZXIsIF8gYXMgX191bnNhZmVfdXNlRW1vdGlvbkNhY2hlLCB1IGFzIHVzZVRoZW1lLCB3IGFzIHdpdGhFbW90aW9uQ2FjaGUsIGIgYXMgd2l0aFRoZW1lIH0gZnJvbSAnLi9lbW90aW9uLWVsZW1lbnQtZjBkZTk2OGUuYnJvd3Nlci5lc20uanMnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaW5zZXJ0U3R5bGVzLCByZWdpc3RlclN0eWxlcywgZ2V0UmVnaXN0ZXJlZFN0eWxlcyB9IGZyb20gJ0BlbW90aW9uL3V0aWxzJztcbmltcG9ydCB7IHVzZUluc2VydGlvbkVmZmVjdFdpdGhMYXlvdXRGYWxsYmFjaywgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayB9IGZyb20gJ0BlbW90aW9uL3VzZS1pbnNlcnRpb24tZWZmZWN0LXdpdGgtZmFsbGJhY2tzJztcbmltcG9ydCB7IHNlcmlhbGl6ZVN0eWxlcyB9IGZyb20gJ0BlbW90aW9uL3NlcmlhbGl6ZSc7XG5pbXBvcnQgJ0BlbW90aW9uL2NhY2hlJztcbmltcG9ydCAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9leHRlbmRzJztcbmltcG9ydCAnQGVtb3Rpb24vd2Vhay1tZW1vaXplJztcbmltcG9ydCAnLi4vX2lzb2xhdGVkLWhucnMvZGlzdC9lbW90aW9uLXJlYWN0LV9pc29sYXRlZC1obnJzLmJyb3dzZXIuZXNtLmpzJztcbmltcG9ydCAnaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MnO1xuXG52YXIganN4ID0gZnVuY3Rpb24ganN4KHR5cGUsIHByb3BzKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcmVzdC1wYXJhbXNcbiAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG5cbiAgaWYgKHByb3BzID09IG51bGwgfHwgIWhhc093bi5jYWxsKHByb3BzLCAnY3NzJykpIHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudC5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xuICB9XG5cbiAgdmFyIGFyZ3NMZW5ndGggPSBhcmdzLmxlbmd0aDtcbiAgdmFyIGNyZWF0ZUVsZW1lbnRBcmdBcnJheSA9IG5ldyBBcnJheShhcmdzTGVuZ3RoKTtcbiAgY3JlYXRlRWxlbWVudEFyZ0FycmF5WzBdID0gRW1vdGlvbjtcbiAgY3JlYXRlRWxlbWVudEFyZ0FycmF5WzFdID0gY3JlYXRlRW1vdGlvblByb3BzKHR5cGUsIHByb3BzKTtcblxuICBmb3IgKHZhciBpID0gMjsgaSA8IGFyZ3NMZW5ndGg7IGkrKykge1xuICAgIGNyZWF0ZUVsZW1lbnRBcmdBcnJheVtpXSA9IGFyZ3NbaV07XG4gIH1cblxuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudC5hcHBseShudWxsLCBjcmVhdGVFbGVtZW50QXJnQXJyYXkpO1xufTtcblxuKGZ1bmN0aW9uIChfanN4KSB7XG4gIHZhciBKU1g7XG5cbiAgKGZ1bmN0aW9uIChfSlNYKSB7fSkoSlNYIHx8IChKU1ggPSBfanN4LkpTWCB8fCAoX2pzeC5KU1ggPSB7fSkpKTtcbn0pKGpzeCB8fCAoanN4ID0ge30pKTtcblxuLy8gaW5pdGlhbCByZW5kZXIgZnJvbSBicm93c2VyLCBpbnNlcnRCZWZvcmUgY29udGV4dC5zaGVldC50YWdzWzBdIG9yIGlmIGEgc3R5bGUgaGFzbid0IGJlZW4gaW5zZXJ0ZWQgdGhlcmUgeWV0LCBhcHBlbmRDaGlsZFxuLy8gaW5pdGlhbCBjbGllbnQtc2lkZSByZW5kZXIgZnJvbSBTU1IsIHVzZSBwbGFjZSBvZiBoeWRyYXRpbmcgdGFnXG5cbnZhciBHbG9iYWwgPSAvKiAjX19QVVJFX18gKi93aXRoRW1vdGlvbkNhY2hlKGZ1bmN0aW9uIChwcm9wcywgY2FjaGUpIHtcblxuICB2YXIgc3R5bGVzID0gcHJvcHMuc3R5bGVzO1xuICB2YXIgc2VyaWFsaXplZCA9IHNlcmlhbGl6ZVN0eWxlcyhbc3R5bGVzXSwgdW5kZWZpbmVkLCBSZWFjdC51c2VDb250ZXh0KFRoZW1lQ29udGV4dCkpO1xuICAvLyBidXQgaXQgaXMgYmFzZWQgb24gYSBjb25zdGFudCB0aGF0IHdpbGwgbmV2ZXIgY2hhbmdlIGF0IHJ1bnRpbWVcbiAgLy8gaXQncyBlZmZlY3RpdmVseSBsaWtlIGhhdmluZyB0d28gaW1wbGVtZW50YXRpb25zIGFuZCBzd2l0Y2hpbmcgdGhlbSBvdXRcbiAgLy8gc28gaXQncyBub3QgYWN0dWFsbHkgYnJlYWtpbmcgYW55dGhpbmdcblxuXG4gIHZhciBzaGVldFJlZiA9IFJlYWN0LnVzZVJlZigpO1xuICB1c2VJbnNlcnRpb25FZmZlY3RXaXRoTGF5b3V0RmFsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIHZhciBrZXkgPSBjYWNoZS5rZXkgKyBcIi1nbG9iYWxcIjsgLy8gdXNlIGNhc2Ugb2YgaHR0cHM6Ly9naXRodWIuY29tL2Vtb3Rpb24tanMvZW1vdGlvbi9pc3N1ZXMvMjY3NVxuXG4gICAgdmFyIHNoZWV0ID0gbmV3IGNhY2hlLnNoZWV0LmNvbnN0cnVjdG9yKHtcbiAgICAgIGtleToga2V5LFxuICAgICAgbm9uY2U6IGNhY2hlLnNoZWV0Lm5vbmNlLFxuICAgICAgY29udGFpbmVyOiBjYWNoZS5zaGVldC5jb250YWluZXIsXG4gICAgICBzcGVlZHk6IGNhY2hlLnNoZWV0LmlzU3BlZWR5XG4gICAgfSk7XG4gICAgdmFyIHJlaHlkcmF0aW5nID0gZmFsc2U7XG4gICAgdmFyIG5vZGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwic3R5bGVbZGF0YS1lbW90aW9uPVxcXCJcIiArIGtleSArIFwiIFwiICsgc2VyaWFsaXplZC5uYW1lICsgXCJcXFwiXVwiKTtcblxuICAgIGlmIChjYWNoZS5zaGVldC50YWdzLmxlbmd0aCkge1xuICAgICAgc2hlZXQuYmVmb3JlID0gY2FjaGUuc2hlZXQudGFnc1swXTtcbiAgICB9XG5cbiAgICBpZiAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgcmVoeWRyYXRpbmcgPSB0cnVlOyAvLyBjbGVhciB0aGUgaGFzaCBzbyB0aGlzIG5vZGUgd29uJ3QgYmUgcmVjb2duaXphYmxlIGFzIHJlaHlkcmF0YWJsZSBieSBvdGhlciA8R2xvYmFsLz5zXG5cbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLWVtb3Rpb24nLCBrZXkpO1xuICAgICAgc2hlZXQuaHlkcmF0ZShbbm9kZV0pO1xuICAgIH1cblxuICAgIHNoZWV0UmVmLmN1cnJlbnQgPSBbc2hlZXQsIHJlaHlkcmF0aW5nXTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgc2hlZXQuZmx1c2goKTtcbiAgICB9O1xuICB9LCBbY2FjaGVdKTtcbiAgdXNlSW5zZXJ0aW9uRWZmZWN0V2l0aExheW91dEZhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2hlZXRSZWZDdXJyZW50ID0gc2hlZXRSZWYuY3VycmVudDtcbiAgICB2YXIgc2hlZXQgPSBzaGVldFJlZkN1cnJlbnRbMF0sXG4gICAgICAgIHJlaHlkcmF0aW5nID0gc2hlZXRSZWZDdXJyZW50WzFdO1xuXG4gICAgaWYgKHJlaHlkcmF0aW5nKSB7XG4gICAgICBzaGVldFJlZkN1cnJlbnRbMV0gPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoc2VyaWFsaXplZC5uZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIGluc2VydCBrZXlmcmFtZXNcbiAgICAgIGluc2VydFN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZC5uZXh0LCB0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAoc2hlZXQudGFncy5sZW5ndGgpIHtcbiAgICAgIC8vIGlmIHRoaXMgZG9lc24ndCBleGlzdCB0aGVuIGl0IHdpbGwgYmUgbnVsbCBzbyB0aGUgc3R5bGUgZWxlbWVudCB3aWxsIGJlIGFwcGVuZGVkXG4gICAgICB2YXIgZWxlbWVudCA9IHNoZWV0LnRhZ3Nbc2hlZXQudGFncy5sZW5ndGggLSAxXS5uZXh0RWxlbWVudFNpYmxpbmc7XG4gICAgICBzaGVldC5iZWZvcmUgPSBlbGVtZW50O1xuICAgICAgc2hlZXQuZmx1c2goKTtcbiAgICB9XG5cbiAgICBjYWNoZS5pbnNlcnQoXCJcIiwgc2VyaWFsaXplZCwgc2hlZXQsIGZhbHNlKTtcbiAgfSwgW2NhY2hlLCBzZXJpYWxpemVkLm5hbWVdKTtcbiAgcmV0dXJuIG51bGw7XG59KTtcblxuZnVuY3Rpb24gY3NzKCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgcmV0dXJuIHNlcmlhbGl6ZVN0eWxlcyhhcmdzKTtcbn1cblxuZnVuY3Rpb24ga2V5ZnJhbWVzKCkge1xuICB2YXIgaW5zZXJ0YWJsZSA9IGNzcy5hcHBseSh2b2lkIDAsIGFyZ3VtZW50cyk7XG4gIHZhciBuYW1lID0gXCJhbmltYXRpb24tXCIgKyBpbnNlcnRhYmxlLm5hbWU7XG4gIHJldHVybiB7XG4gICAgbmFtZTogbmFtZSxcbiAgICBzdHlsZXM6IFwiQGtleWZyYW1lcyBcIiArIG5hbWUgKyBcIntcIiArIGluc2VydGFibGUuc3R5bGVzICsgXCJ9XCIsXG4gICAgYW5pbTogMSxcbiAgICB0b1N0cmluZzogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICByZXR1cm4gXCJfRU1PX1wiICsgdGhpcy5uYW1lICsgXCJfXCIgKyB0aGlzLnN0eWxlcyArIFwiX0VNT19cIjtcbiAgICB9XG4gIH07XG59XG5cbnZhciBjbGFzc25hbWVzID0gZnVuY3Rpb24gY2xhc3NuYW1lcyhhcmdzKSB7XG4gIHZhciBsZW4gPSBhcmdzLmxlbmd0aDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgY2xzID0gJyc7XG5cbiAgZm9yICg7IGkgPCBsZW47IGkrKykge1xuICAgIHZhciBhcmcgPSBhcmdzW2ldO1xuICAgIGlmIChhcmcgPT0gbnVsbCkgY29udGludWU7XG4gICAgdmFyIHRvQWRkID0gdm9pZCAwO1xuXG4gICAgc3dpdGNoICh0eXBlb2YgYXJnKSB7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG4gICAgICAgICAgICB0b0FkZCA9IGNsYXNzbmFtZXMoYXJnKTtcbiAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICB0b0FkZCA9ICcnO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBrIGluIGFyZykge1xuICAgICAgICAgICAgICBpZiAoYXJnW2tdICYmIGspIHtcbiAgICAgICAgICAgICAgICB0b0FkZCAmJiAodG9BZGQgKz0gJyAnKTtcbiAgICAgICAgICAgICAgICB0b0FkZCArPSBrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAge1xuICAgICAgICAgIHRvQWRkID0gYXJnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRvQWRkKSB7XG4gICAgICBjbHMgJiYgKGNscyArPSAnICcpO1xuICAgICAgY2xzICs9IHRvQWRkO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjbHM7XG59O1xuXG5mdW5jdGlvbiBtZXJnZShyZWdpc3RlcmVkLCBjc3MsIGNsYXNzTmFtZSkge1xuICB2YXIgcmVnaXN0ZXJlZFN0eWxlcyA9IFtdO1xuICB2YXIgcmF3Q2xhc3NOYW1lID0gZ2V0UmVnaXN0ZXJlZFN0eWxlcyhyZWdpc3RlcmVkLCByZWdpc3RlcmVkU3R5bGVzLCBjbGFzc05hbWUpO1xuXG4gIGlmIChyZWdpc3RlcmVkU3R5bGVzLmxlbmd0aCA8IDIpIHtcbiAgICByZXR1cm4gY2xhc3NOYW1lO1xuICB9XG5cbiAgcmV0dXJuIHJhd0NsYXNzTmFtZSArIGNzcyhyZWdpc3RlcmVkU3R5bGVzKTtcbn1cblxudmFyIEluc2VydGlvbiA9IGZ1bmN0aW9uIEluc2VydGlvbihfcmVmKSB7XG4gIHZhciBjYWNoZSA9IF9yZWYuY2FjaGUsXG4gICAgICBzZXJpYWxpemVkQXJyID0gX3JlZi5zZXJpYWxpemVkQXJyO1xuICB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrKGZ1bmN0aW9uICgpIHtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VyaWFsaXplZEFyci5sZW5ndGg7IGkrKykge1xuICAgICAgaW5zZXJ0U3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkQXJyW2ldLCBmYWxzZSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gbnVsbDtcbn07XG5cbnZhciBDbGFzc05hbWVzID0gLyogI19fUFVSRV9fICovd2l0aEVtb3Rpb25DYWNoZShmdW5jdGlvbiAocHJvcHMsIGNhY2hlKSB7XG4gIHZhciBoYXNSZW5kZXJlZCA9IGZhbHNlO1xuICB2YXIgc2VyaWFsaXplZEFyciA9IFtdO1xuXG4gIHZhciBjc3MgPSBmdW5jdGlvbiBjc3MoKSB7XG4gICAgaWYgKGhhc1JlbmRlcmVkICYmIGlzRGV2ZWxvcG1lbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY3NzIGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nIHJlbmRlcicpO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICB2YXIgc2VyaWFsaXplZCA9IHNlcmlhbGl6ZVN0eWxlcyhhcmdzLCBjYWNoZS5yZWdpc3RlcmVkKTtcbiAgICBzZXJpYWxpemVkQXJyLnB1c2goc2VyaWFsaXplZCk7IC8vIHJlZ2lzdHJhdGlvbiBoYXMgdG8gaGFwcGVuIGhlcmUgYXMgdGhlIHJlc3VsdCBvZiB0aGlzIG1pZ2h0IGdldCBjb25zdW1lZCBieSBgY3hgXG5cbiAgICByZWdpc3RlclN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgZmFsc2UpO1xuICAgIHJldHVybiBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcbiAgfTtcblxuICB2YXIgY3ggPSBmdW5jdGlvbiBjeCgpIHtcbiAgICBpZiAoaGFzUmVuZGVyZWQgJiYgaXNEZXZlbG9wbWVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjeCBjYW4gb25seSBiZSB1c2VkIGR1cmluZyByZW5kZXInKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIGFyZ3NbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWVyZ2UoY2FjaGUucmVnaXN0ZXJlZCwgY3NzLCBjbGFzc25hbWVzKGFyZ3MpKTtcbiAgfTtcblxuICB2YXIgY29udGVudCA9IHtcbiAgICBjc3M6IGNzcyxcbiAgICBjeDogY3gsXG4gICAgdGhlbWU6IFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KVxuICB9O1xuICB2YXIgZWxlID0gcHJvcHMuY2hpbGRyZW4oY29udGVudCk7XG4gIGhhc1JlbmRlcmVkID0gdHJ1ZTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbnNlcnRpb24sIHtcbiAgICBjYWNoZTogY2FjaGUsXG4gICAgc2VyaWFsaXplZEFycjogc2VyaWFsaXplZEFyclxuICB9KSwgZWxlKTtcbn0pO1xuXG5leHBvcnQgeyBDbGFzc05hbWVzLCBHbG9iYWwsIGpzeCBhcyBjcmVhdGVFbGVtZW50LCBjc3MsIGpzeCwga2V5ZnJhbWVzIH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7437\n')},7659:module=>{"use strict";eval('\n\nvar memo = {};\n\n/* istanbul ignore next  */\nfunction getTarget(target) {\n  if (typeof memo[target] === "undefined") {\n    var styleTarget = document.querySelector(target);\n\n    // Special case to return head of iframe instead of iframe itself\n    if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n      try {\n        // This will throw an exception if access to iframe is blocked\n        // due to cross-origin restrictions\n        styleTarget = styleTarget.contentDocument.head;\n      } catch (e) {\n        // istanbul ignore next\n        styleTarget = null;\n      }\n    }\n    memo[target] = styleTarget;\n  }\n  return memo[target];\n}\n\n/* istanbul ignore next  */\nfunction insertBySelector(insert, style) {\n  var target = getTarget(insert);\n  if (!target) {\n    throw new Error("Couldn\'t find a style target. This probably means that the value for the \'insert\' parameter is invalid.");\n  }\n  target.appendChild(style);\n}\nmodule.exports = insertBySelector;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydEJ5U2VsZWN0b3IuanM/YjIxNCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxudmFyIG1lbW8gPSB7fTtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBnZXRUYXJnZXQodGFyZ2V0KSB7XG4gIGlmICh0eXBlb2YgbWVtb1t0YXJnZXRdID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgdmFyIHN0eWxlVGFyZ2V0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0YXJnZXQpO1xuXG4gICAgLy8gU3BlY2lhbCBjYXNlIHRvIHJldHVybiBoZWFkIG9mIGlmcmFtZSBpbnN0ZWFkIG9mIGlmcmFtZSBpdHNlbGZcbiAgICBpZiAod2luZG93LkhUTUxJRnJhbWVFbGVtZW50ICYmIHN0eWxlVGFyZ2V0IGluc3RhbmNlb2Ygd2luZG93LkhUTUxJRnJhbWVFbGVtZW50KSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBUaGlzIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGFjY2VzcyB0byBpZnJhbWUgaXMgYmxvY2tlZFxuICAgICAgICAvLyBkdWUgdG8gY3Jvc3Mtb3JpZ2luIHJlc3RyaWN0aW9uc1xuICAgICAgICBzdHlsZVRhcmdldCA9IHN0eWxlVGFyZ2V0LmNvbnRlbnREb2N1bWVudC5oZWFkO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICBzdHlsZVRhcmdldCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIG1lbW9bdGFyZ2V0XSA9IHN0eWxlVGFyZ2V0O1xuICB9XG4gIHJldHVybiBtZW1vW3RhcmdldF07XG59XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gaW5zZXJ0QnlTZWxlY3RvcihpbnNlcnQsIHN0eWxlKSB7XG4gIHZhciB0YXJnZXQgPSBnZXRUYXJnZXQoaW5zZXJ0KTtcbiAgaWYgKCF0YXJnZXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZG4ndCBmaW5kIGEgc3R5bGUgdGFyZ2V0LiBUaGlzIHByb2JhYmx5IG1lYW5zIHRoYXQgdGhlIHZhbHVlIGZvciB0aGUgJ2luc2VydCcgcGFyYW1ldGVyIGlzIGludmFsaWQuXCIpO1xuICB9XG4gIHRhcmdldC5hcHBlbmRDaGlsZChzdHlsZSk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IGluc2VydEJ5U2VsZWN0b3I7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7659\n')},7825:module=>{"use strict";eval('\n\n/* istanbul ignore next  */\nfunction apply(styleElement, options, obj) {\n  var css = "";\n  if (obj.supports) {\n    css += "@supports (".concat(obj.supports, ") {");\n  }\n  if (obj.media) {\n    css += "@media ".concat(obj.media, " {");\n  }\n  var needLayer = typeof obj.layer !== "undefined";\n  if (needLayer) {\n    css += "@layer".concat(obj.layer.length > 0 ? " ".concat(obj.layer) : "", " {");\n  }\n  css += obj.css;\n  if (needLayer) {\n    css += "}";\n  }\n  if (obj.media) {\n    css += "}";\n  }\n  if (obj.supports) {\n    css += "}";\n  }\n  var sourceMap = obj.sourceMap;\n  if (sourceMap && typeof btoa !== "undefined") {\n    css += "\\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), " */");\n  }\n\n  // For old IE\n  /* istanbul ignore if  */\n  options.styleTagTransform(css, styleElement, options.options);\n}\nfunction removeStyleElement(styleElement) {\n  // istanbul ignore if\n  if (styleElement.parentNode === null) {\n    return false;\n  }\n  styleElement.parentNode.removeChild(styleElement);\n}\n\n/* istanbul ignore next  */\nfunction domAPI(options) {\n  if (typeof document === "undefined") {\n    return {\n      update: function update() {},\n      remove: function remove() {}\n    };\n  }\n  var styleElement = options.insertStyleElement(options);\n  return {\n    update: function update(obj) {\n      apply(styleElement, options, obj);\n    },\n    remove: function remove() {\n      removeStyleElement(styleElement);\n    }\n  };\n}\nmodule.exports = domAPI;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzgyNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtEQUFrRDtBQUNsRDtBQUNBO0FBQ0EsMENBQTBDO0FBQzFDO0FBQ0E7QUFDQTtBQUNBLGlGQUFpRjtBQUNqRjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLHlEQUF5RDtBQUN6RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVEb21BUEkuanM/ZTQ3OSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBhcHBseShzdHlsZUVsZW1lbnQsIG9wdGlvbnMsIG9iaikge1xuICB2YXIgY3NzID0gXCJcIjtcbiAgaWYgKG9iai5zdXBwb3J0cykge1xuICAgIGNzcyArPSBcIkBzdXBwb3J0cyAoXCIuY29uY2F0KG9iai5zdXBwb3J0cywgXCIpIHtcIik7XG4gIH1cbiAgaWYgKG9iai5tZWRpYSkge1xuICAgIGNzcyArPSBcIkBtZWRpYSBcIi5jb25jYXQob2JqLm1lZGlhLCBcIiB7XCIpO1xuICB9XG4gIHZhciBuZWVkTGF5ZXIgPSB0eXBlb2Ygb2JqLmxheWVyICE9PSBcInVuZGVmaW5lZFwiO1xuICBpZiAobmVlZExheWVyKSB7XG4gICAgY3NzICs9IFwiQGxheWVyXCIuY29uY2F0KG9iai5sYXllci5sZW5ndGggPiAwID8gXCIgXCIuY29uY2F0KG9iai5sYXllcikgOiBcIlwiLCBcIiB7XCIpO1xuICB9XG4gIGNzcyArPSBvYmouY3NzO1xuICBpZiAobmVlZExheWVyKSB7XG4gICAgY3NzICs9IFwifVwiO1xuICB9XG4gIGlmIChvYmoubWVkaWEpIHtcbiAgICBjc3MgKz0gXCJ9XCI7XG4gIH1cbiAgaWYgKG9iai5zdXBwb3J0cykge1xuICAgIGNzcyArPSBcIn1cIjtcbiAgfVxuICB2YXIgc291cmNlTWFwID0gb2JqLnNvdXJjZU1hcDtcbiAgaWYgKHNvdXJjZU1hcCAmJiB0eXBlb2YgYnRvYSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIGNzcyArPSBcIlxcbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsXCIuY29uY2F0KGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHNvdXJjZU1hcCkpKSksIFwiICovXCIpO1xuICB9XG5cbiAgLy8gRm9yIG9sZCBJRVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgICovXG4gIG9wdGlvbnMuc3R5bGVUYWdUcmFuc2Zvcm0oY3NzLCBzdHlsZUVsZW1lbnQsIG9wdGlvbnMub3B0aW9ucyk7XG59XG5mdW5jdGlvbiByZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGVFbGVtZW50KSB7XG4gIC8vIGlzdGFuYnVsIGlnbm9yZSBpZlxuICBpZiAoc3R5bGVFbGVtZW50LnBhcmVudE5vZGUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgc3R5bGVFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGVFbGVtZW50KTtcbn1cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBkb21BUEkob3B0aW9ucykge1xuICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHVwZGF0ZTogZnVuY3Rpb24gdXBkYXRlKCkge30sXG4gICAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZSgpIHt9XG4gICAgfTtcbiAgfVxuICB2YXIgc3R5bGVFbGVtZW50ID0gb3B0aW9ucy5pbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucyk7XG4gIHJldHVybiB7XG4gICAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUob2JqKSB7XG4gICAgICBhcHBseShzdHlsZUVsZW1lbnQsIG9wdGlvbnMsIG9iaik7XG4gICAgfSxcbiAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgICAgIHJlbW92ZVN0eWxlRWxlbWVudChzdHlsZUVsZW1lbnQpO1xuICAgIH1cbiAgfTtcbn1cbm1vZHVsZS5leHBvcnRzID0gZG9tQVBJOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7825\n')},8094:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   A: () => (/* binding */ createBreakpoints)\n/* harmony export */ });\n/* unused harmony export breakpointKeys */\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(8587);\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8168);\n\n\nconst _excluded = [\"values\", \"unit\", \"step\"];\n// Sorted ASC by size. That's important.\n// It can't be configured as it's used statically for propTypes.\nconst breakpointKeys = (/* unused pure expression or super */ null && (['xs', 'sm', 'md', 'lg', 'xl']));\nconst sortBreakpointsValues = values => {\n  const breakpointsAsArray = Object.keys(values).map(key => ({\n    key,\n    val: values[key]\n  })) || [];\n  // Sort in ascending order\n  breakpointsAsArray.sort((breakpoint1, breakpoint2) => breakpoint1.val - breakpoint2.val);\n  return breakpointsAsArray.reduce((acc, obj) => {\n    return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__/* [\"default\"] */ .A)({}, acc, {\n      [obj.key]: obj.val\n    });\n  }, {});\n};\n\n// Keep in mind that @media is inclusive by the CSS specification.\nfunction createBreakpoints(breakpoints) {\n  const {\n      // The breakpoint **start** at this value.\n      // For instance with the first breakpoint xs: [xs, sm).\n      values = {\n        xs: 0,\n        // phone\n        sm: 600,\n        // tablet\n        md: 900,\n        // small laptop\n        lg: 1200,\n        // desktop\n        xl: 1536 // large screen\n      },\n      unit = 'px',\n      step = 5\n    } = breakpoints,\n    other = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__/* [\"default\"] */ .A)(breakpoints, _excluded);\n  const sortedValues = sortBreakpointsValues(values);\n  const keys = Object.keys(sortedValues);\n  function up(key) {\n    const value = typeof values[key] === 'number' ? values[key] : key;\n    return `@media (min-width:${value}${unit})`;\n  }\n  function down(key) {\n    const value = typeof values[key] === 'number' ? values[key] : key;\n    return `@media (max-width:${value - step / 100}${unit})`;\n  }\n  function between(start, end) {\n    const endIndex = keys.indexOf(end);\n    return `@media (min-width:${typeof values[start] === 'number' ? values[start] : start}${unit}) and ` + `(max-width:${(endIndex !== -1 && typeof values[keys[endIndex]] === 'number' ? values[keys[endIndex]] : end) - step / 100}${unit})`;\n  }\n  function only(key) {\n    if (keys.indexOf(key) + 1 < keys.length) {\n      return between(key, keys[keys.indexOf(key) + 1]);\n    }\n    return up(key);\n  }\n  function not(key) {\n    // handle first and last key separately, for better readability\n    const keyIndex = keys.indexOf(key);\n    if (keyIndex === 0) {\n      return up(keys[1]);\n    }\n    if (keyIndex === keys.length - 1) {\n      return down(keys[keyIndex]);\n    }\n    return between(key, keys[keys.indexOf(key) + 1]).replace('@media', '@media not all and');\n  }\n  return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__/* [\"default\"] */ .A)({\n    keys,\n    values: sortedValues,\n    up,\n    down,\n    between,\n    only,\n    not,\n    unit\n  }, other);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODA5NC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBb0c7QUFDMUM7QUFDMUQ7QUFDQTtBQUNBO0FBQ08sdUJBQXVCLDhFQUE4QjtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxXQUFXLHVGQUFRLEdBQUc7QUFDdEI7QUFDQSxLQUFLO0FBQ0wsR0FBRyxJQUFJO0FBQ1A7O0FBRUE7QUFDZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxNQUFNO0FBQ04sWUFBWSw0R0FBNkI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsTUFBTSxFQUFFLEtBQUs7QUFDN0M7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLG1CQUFtQixFQUFFLEtBQUs7QUFDMUQ7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLDBEQUEwRCxFQUFFLEtBQUssd0JBQXdCLDRHQUE0RyxFQUFFLEtBQUs7QUFDNU87QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyx1RkFBUTtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL2NyZWF0ZVRoZW1lL2NyZWF0ZUJyZWFrcG9pbnRzLmpzP2IzYzUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcInZhbHVlc1wiLCBcInVuaXRcIiwgXCJzdGVwXCJdO1xuLy8gU29ydGVkIEFTQyBieSBzaXplLiBUaGF0J3MgaW1wb3J0YW50LlxuLy8gSXQgY2FuJ3QgYmUgY29uZmlndXJlZCBhcyBpdCdzIHVzZWQgc3RhdGljYWxseSBmb3IgcHJvcFR5cGVzLlxuZXhwb3J0IGNvbnN0IGJyZWFrcG9pbnRLZXlzID0gWyd4cycsICdzbScsICdtZCcsICdsZycsICd4bCddO1xuY29uc3Qgc29ydEJyZWFrcG9pbnRzVmFsdWVzID0gdmFsdWVzID0+IHtcbiAgY29uc3QgYnJlYWtwb2ludHNBc0FycmF5ID0gT2JqZWN0LmtleXModmFsdWVzKS5tYXAoa2V5ID0+ICh7XG4gICAga2V5LFxuICAgIHZhbDogdmFsdWVzW2tleV1cbiAgfSkpIHx8IFtdO1xuICAvLyBTb3J0IGluIGFzY2VuZGluZyBvcmRlclxuICBicmVha3BvaW50c0FzQXJyYXkuc29ydCgoYnJlYWtwb2ludDEsIGJyZWFrcG9pbnQyKSA9PiBicmVha3BvaW50MS52YWwgLSBicmVha3BvaW50Mi52YWwpO1xuICByZXR1cm4gYnJlYWtwb2ludHNBc0FycmF5LnJlZHVjZSgoYWNjLCBvYmopID0+IHtcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIGFjYywge1xuICAgICAgW29iai5rZXldOiBvYmoudmFsXG4gICAgfSk7XG4gIH0sIHt9KTtcbn07XG5cbi8vIEtlZXAgaW4gbWluZCB0aGF0IEBtZWRpYSBpcyBpbmNsdXNpdmUgYnkgdGhlIENTUyBzcGVjaWZpY2F0aW9uLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlQnJlYWtwb2ludHMoYnJlYWtwb2ludHMpIHtcbiAgY29uc3Qge1xuICAgICAgLy8gVGhlIGJyZWFrcG9pbnQgKipzdGFydCoqIGF0IHRoaXMgdmFsdWUuXG4gICAgICAvLyBGb3IgaW5zdGFuY2Ugd2l0aCB0aGUgZmlyc3QgYnJlYWtwb2ludCB4czogW3hzLCBzbSkuXG4gICAgICB2YWx1ZXMgPSB7XG4gICAgICAgIHhzOiAwLFxuICAgICAgICAvLyBwaG9uZVxuICAgICAgICBzbTogNjAwLFxuICAgICAgICAvLyB0YWJsZXRcbiAgICAgICAgbWQ6IDkwMCxcbiAgICAgICAgLy8gc21hbGwgbGFwdG9wXG4gICAgICAgIGxnOiAxMjAwLFxuICAgICAgICAvLyBkZXNrdG9wXG4gICAgICAgIHhsOiAxNTM2IC8vIGxhcmdlIHNjcmVlblxuICAgICAgfSxcbiAgICAgIHVuaXQgPSAncHgnLFxuICAgICAgc3RlcCA9IDVcbiAgICB9ID0gYnJlYWtwb2ludHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShicmVha3BvaW50cywgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qgc29ydGVkVmFsdWVzID0gc29ydEJyZWFrcG9pbnRzVmFsdWVzKHZhbHVlcyk7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhzb3J0ZWRWYWx1ZXMpO1xuICBmdW5jdGlvbiB1cChrZXkpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHR5cGVvZiB2YWx1ZXNba2V5XSA9PT0gJ251bWJlcicgPyB2YWx1ZXNba2V5XSA6IGtleTtcbiAgICByZXR1cm4gYEBtZWRpYSAobWluLXdpZHRoOiR7dmFsdWV9JHt1bml0fSlgO1xuICB9XG4gIGZ1bmN0aW9uIGRvd24oa2V5KSB7XG4gICAgY29uc3QgdmFsdWUgPSB0eXBlb2YgdmFsdWVzW2tleV0gPT09ICdudW1iZXInID8gdmFsdWVzW2tleV0gOiBrZXk7XG4gICAgcmV0dXJuIGBAbWVkaWEgKG1heC13aWR0aDoke3ZhbHVlIC0gc3RlcCAvIDEwMH0ke3VuaXR9KWA7XG4gIH1cbiAgZnVuY3Rpb24gYmV0d2VlbihzdGFydCwgZW5kKSB7XG4gICAgY29uc3QgZW5kSW5kZXggPSBrZXlzLmluZGV4T2YoZW5kKTtcbiAgICByZXR1cm4gYEBtZWRpYSAobWluLXdpZHRoOiR7dHlwZW9mIHZhbHVlc1tzdGFydF0gPT09ICdudW1iZXInID8gdmFsdWVzW3N0YXJ0XSA6IHN0YXJ0fSR7dW5pdH0pIGFuZCBgICsgYChtYXgtd2lkdGg6JHsoZW5kSW5kZXggIT09IC0xICYmIHR5cGVvZiB2YWx1ZXNba2V5c1tlbmRJbmRleF1dID09PSAnbnVtYmVyJyA/IHZhbHVlc1trZXlzW2VuZEluZGV4XV0gOiBlbmQpIC0gc3RlcCAvIDEwMH0ke3VuaXR9KWA7XG4gIH1cbiAgZnVuY3Rpb24gb25seShrZXkpIHtcbiAgICBpZiAoa2V5cy5pbmRleE9mKGtleSkgKyAxIDwga2V5cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBiZXR3ZWVuKGtleSwga2V5c1trZXlzLmluZGV4T2Yoa2V5KSArIDFdKTtcbiAgICB9XG4gICAgcmV0dXJuIHVwKGtleSk7XG4gIH1cbiAgZnVuY3Rpb24gbm90KGtleSkge1xuICAgIC8vIGhhbmRsZSBmaXJzdCBhbmQgbGFzdCBrZXkgc2VwYXJhdGVseSwgZm9yIGJldHRlciByZWFkYWJpbGl0eVxuICAgIGNvbnN0IGtleUluZGV4ID0ga2V5cy5pbmRleE9mKGtleSk7XG4gICAgaWYgKGtleUluZGV4ID09PSAwKSB7XG4gICAgICByZXR1cm4gdXAoa2V5c1sxXSk7XG4gICAgfVxuICAgIGlmIChrZXlJbmRleCA9PT0ga2V5cy5sZW5ndGggLSAxKSB7XG4gICAgICByZXR1cm4gZG93bihrZXlzW2tleUluZGV4XSk7XG4gICAgfVxuICAgIHJldHVybiBiZXR3ZWVuKGtleSwga2V5c1trZXlzLmluZGV4T2Yoa2V5KSArIDFdKS5yZXBsYWNlKCdAbWVkaWEnLCAnQG1lZGlhIG5vdCBhbGwgYW5kJyk7XG4gIH1cbiAgcmV0dXJuIF9leHRlbmRzKHtcbiAgICBrZXlzLFxuICAgIHZhbHVlczogc29ydGVkVmFsdWVzLFxuICAgIHVwLFxuICAgIGRvd24sXG4gICAgYmV0d2VlbixcbiAgICBvbmx5LFxuICAgIG5vdCxcbiAgICB1bml0XG4gIH0sIG90aGVyKTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8094\n")},8168:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   A: () => (/* binding */ _extends)\n/* harmony export */ });\nfunction _extends() {\n  return _extends = Object.assign ? Object.assign.bind() : function (n) {\n    for (var e = 1; e < arguments.length; e++) {\n      var t = arguments[e];\n      for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n    }\n    return n;\n  }, _extends.apply(null, arguments);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODE2OC5qcyIsIm1hcHBpbmdzIjoiOzs7QUFBQTtBQUNBO0FBQ0Esb0JBQW9CLHNCQUFzQjtBQUMxQztBQUNBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0EsR0FBRztBQUNIIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcy5qcz82MzNiIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikge1xuICAgIGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7XG4gICAgICB2YXIgdCA9IGFyZ3VtZW50c1tlXTtcbiAgICAgIGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7XG4gICAgfVxuICAgIHJldHVybiBuO1xuICB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpO1xufVxuZXhwb3J0IHsgX2V4dGVuZHMgYXMgZGVmYXVsdCB9OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8168\n")},8248:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n  LX: () => (/* binding */ createUnarySpacing),\n  MA: () => (/* binding */ createUnaryUnit),\n  _W: () => (/* binding */ getValue),\n  Lc: () => (/* binding */ margin),\n  Ms: () => (/* binding */ padding)\n});\n\n// UNUSED EXPORTS: default, getStyleFromPropValue, marginKeys, paddingKeys\n\n// EXTERNAL MODULE: ./node_modules/@mui/system/esm/breakpoints.js\nvar breakpoints = __webpack_require__(9452);\n// EXTERNAL MODULE: ./node_modules/@mui/system/esm/style.js\nvar style = __webpack_require__(6481);\n// EXTERNAL MODULE: ./node_modules/@mui/system/esm/merge.js\nvar merge = __webpack_require__(4620);\n;// ./node_modules/@mui/system/esm/memoize.js\nfunction memoize(fn) {\n  const cache = {};\n  return arg => {\n    if (cache[arg] === undefined) {\n      cache[arg] = fn(arg);\n    }\n    return cache[arg];\n  };\n}\n;// ./node_modules/@mui/system/esm/spacing.js\n\n\n\n\n\nconst properties = {\n  m: 'margin',\n  p: 'padding'\n};\nconst directions = {\n  t: 'Top',\n  r: 'Right',\n  b: 'Bottom',\n  l: 'Left',\n  x: ['Left', 'Right'],\n  y: ['Top', 'Bottom']\n};\nconst aliases = {\n  marginX: 'mx',\n  marginY: 'my',\n  paddingX: 'px',\n  paddingY: 'py'\n};\n\n// memoize() impact:\n// From 300,000 ops/sec\n// To 350,000 ops/sec\nconst getCssProperties = memoize(prop => {\n  // It's not a shorthand notation.\n  if (prop.length > 2) {\n    if (aliases[prop]) {\n      prop = aliases[prop];\n    } else {\n      return [prop];\n    }\n  }\n  const [a, b] = prop.split('');\n  const property = properties[a];\n  const direction = directions[b] || '';\n  return Array.isArray(direction) ? direction.map(dir => property + dir) : [property + direction];\n});\nconst marginKeys = ['m', 'mt', 'mr', 'mb', 'ml', 'mx', 'my', 'margin', 'marginTop', 'marginRight', 'marginBottom', 'marginLeft', 'marginX', 'marginY', 'marginInline', 'marginInlineStart', 'marginInlineEnd', 'marginBlock', 'marginBlockStart', 'marginBlockEnd'];\nconst paddingKeys = ['p', 'pt', 'pr', 'pb', 'pl', 'px', 'py', 'padding', 'paddingTop', 'paddingRight', 'paddingBottom', 'paddingLeft', 'paddingX', 'paddingY', 'paddingInline', 'paddingInlineStart', 'paddingInlineEnd', 'paddingBlock', 'paddingBlockStart', 'paddingBlockEnd'];\nconst spacingKeys = [...marginKeys, ...paddingKeys];\nfunction createUnaryUnit(theme, themeKey, defaultValue, propName) {\n  var _getPath;\n  const themeSpacing = (_getPath = (0,style/* getPath */.Yn)(theme, themeKey, false)) != null ? _getPath : defaultValue;\n  if (typeof themeSpacing === 'number') {\n    return abs => {\n      if (typeof abs === 'string') {\n        return abs;\n      }\n      if (false) // removed by dead control flow\n{}\n      return themeSpacing * abs;\n    };\n  }\n  if (Array.isArray(themeSpacing)) {\n    return abs => {\n      if (typeof abs === 'string') {\n        return abs;\n      }\n      if (false) // removed by dead control flow\n{}\n      return themeSpacing[abs];\n    };\n  }\n  if (typeof themeSpacing === 'function') {\n    return themeSpacing;\n  }\n  if (false) // removed by dead control flow\n{}\n  return () => undefined;\n}\nfunction createUnarySpacing(theme) {\n  return createUnaryUnit(theme, 'spacing', 8, 'spacing');\n}\nfunction getValue(transformer, propValue) {\n  if (typeof propValue === 'string' || propValue == null) {\n    return propValue;\n  }\n  const abs = Math.abs(propValue);\n  const transformed = transformer(abs);\n  if (propValue >= 0) {\n    return transformed;\n  }\n  if (typeof transformed === 'number') {\n    return -transformed;\n  }\n  return `-${transformed}`;\n}\nfunction getStyleFromPropValue(cssProperties, transformer) {\n  return propValue => cssProperties.reduce((acc, cssProperty) => {\n    acc[cssProperty] = getValue(transformer, propValue);\n    return acc;\n  }, {});\n}\nfunction resolveCssProperty(props, keys, prop, transformer) {\n  // Using a hash computation over an array iteration could be faster, but with only 28 items,\n  // it's doesn't worth the bundle size.\n  if (keys.indexOf(prop) === -1) {\n    return null;\n  }\n  const cssProperties = getCssProperties(prop);\n  const styleFromPropValue = getStyleFromPropValue(cssProperties, transformer);\n  const propValue = props[prop];\n  return (0,breakpoints/* handleBreakpoints */.NI)(props, propValue, styleFromPropValue);\n}\nfunction spacing_style(props, keys) {\n  const transformer = createUnarySpacing(props.theme);\n  return Object.keys(props).map(prop => resolveCssProperty(props, keys, prop, transformer)).reduce(merge/* default */.A, {});\n}\nfunction margin(props) {\n  return spacing_style(props, marginKeys);\n}\nmargin.propTypes =  false ? 0 : {};\nmargin.filterProps = marginKeys;\nfunction padding(props) {\n  return spacing_style(props, paddingKeys);\n}\npadding.propTypes =  false ? 0 : {};\npadding.filterProps = paddingKeys;\nfunction spacing(props) {\n  return spacing_style(props, spacingKeys);\n}\nspacing.propTypes =  false ? 0 : {};\nspacing.filterProps = spacingKeys;\n/* harmony default export */ const esm_spacing = ((/* unused pure expression or super */ null && (spacing)));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODI0OC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7O0FDUnNEO0FBQ0o7QUFDaEI7QUFDTjtBQUNJO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsT0FBTztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDTTtBQUNBO0FBQ1A7QUFDTztBQUNQO0FBQ0EsbUNBQW1DLHlCQUFPO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLEtBQXFDLEVBQUU7QUFBQSxFQUkxQztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLEtBQXFDLEVBQUU7QUFBQSxFQU0xQztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sS0FBcUMsRUFBRTtBQUFBLEVBRTFDO0FBQ0g7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsWUFBWTtBQUN6QjtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsR0FBRyxJQUFJO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLHlDQUFpQjtBQUMxQjtBQUNBLFNBQVMsYUFBSztBQUNkO0FBQ0EsbUdBQW1HLG9CQUFLLElBQUk7QUFDNUc7QUFDTztBQUNQLFNBQVMsYUFBSztBQUNkO0FBQ0EsbUJBQW1CLE1BQXFDLEdBQUcsQ0FHckQ7QUFDTjtBQUNPO0FBQ1AsU0FBUyxhQUFLO0FBQ2Q7QUFDQSxvQkFBb0IsTUFBcUMsR0FBRyxDQUd0RDtBQUNOO0FBQ0E7QUFDQSxTQUFTLGFBQUs7QUFDZDtBQUNBLG9CQUFvQixNQUFxQyxHQUFHLENBR3REO0FBQ047QUFDQSxrREFBZSx1REFBTyIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9tZW1vaXplLmpzPzRiOWMiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL3NwYWNpbmcuanM/ZmMxMSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtZW1vaXplKGZuKSB7XG4gIGNvbnN0IGNhY2hlID0ge307XG4gIHJldHVybiBhcmcgPT4ge1xuICAgIGlmIChjYWNoZVthcmddID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNhY2hlW2FyZ10gPSBmbihhcmcpO1xuICAgIH1cbiAgICByZXR1cm4gY2FjaGVbYXJnXTtcbiAgfTtcbn0iLCJpbXBvcnQgcmVzcG9uc2l2ZVByb3BUeXBlIGZyb20gJy4vcmVzcG9uc2l2ZVByb3BUeXBlJztcbmltcG9ydCB7IGhhbmRsZUJyZWFrcG9pbnRzIH0gZnJvbSAnLi9icmVha3BvaW50cyc7XG5pbXBvcnQgeyBnZXRQYXRoIH0gZnJvbSAnLi9zdHlsZSc7XG5pbXBvcnQgbWVyZ2UgZnJvbSAnLi9tZXJnZSc7XG5pbXBvcnQgbWVtb2l6ZSBmcm9tICcuL21lbW9pemUnO1xuY29uc3QgcHJvcGVydGllcyA9IHtcbiAgbTogJ21hcmdpbicsXG4gIHA6ICdwYWRkaW5nJ1xufTtcbmNvbnN0IGRpcmVjdGlvbnMgPSB7XG4gIHQ6ICdUb3AnLFxuICByOiAnUmlnaHQnLFxuICBiOiAnQm90dG9tJyxcbiAgbDogJ0xlZnQnLFxuICB4OiBbJ0xlZnQnLCAnUmlnaHQnXSxcbiAgeTogWydUb3AnLCAnQm90dG9tJ11cbn07XG5jb25zdCBhbGlhc2VzID0ge1xuICBtYXJnaW5YOiAnbXgnLFxuICBtYXJnaW5ZOiAnbXknLFxuICBwYWRkaW5nWDogJ3B4JyxcbiAgcGFkZGluZ1k6ICdweSdcbn07XG5cbi8vIG1lbW9pemUoKSBpbXBhY3Q6XG4vLyBGcm9tIDMwMCwwMDAgb3BzL3NlY1xuLy8gVG8gMzUwLDAwMCBvcHMvc2VjXG5jb25zdCBnZXRDc3NQcm9wZXJ0aWVzID0gbWVtb2l6ZShwcm9wID0+IHtcbiAgLy8gSXQncyBub3QgYSBzaG9ydGhhbmQgbm90YXRpb24uXG4gIGlmIChwcm9wLmxlbmd0aCA+IDIpIHtcbiAgICBpZiAoYWxpYXNlc1twcm9wXSkge1xuICAgICAgcHJvcCA9IGFsaWFzZXNbcHJvcF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBbcHJvcF07XG4gICAgfVxuICB9XG4gIGNvbnN0IFthLCBiXSA9IHByb3Auc3BsaXQoJycpO1xuICBjb25zdCBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbYV07XG4gIGNvbnN0IGRpcmVjdGlvbiA9IGRpcmVjdGlvbnNbYl0gfHwgJyc7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KGRpcmVjdGlvbikgPyBkaXJlY3Rpb24ubWFwKGRpciA9PiBwcm9wZXJ0eSArIGRpcikgOiBbcHJvcGVydHkgKyBkaXJlY3Rpb25dO1xufSk7XG5leHBvcnQgY29uc3QgbWFyZ2luS2V5cyA9IFsnbScsICdtdCcsICdtcicsICdtYicsICdtbCcsICdteCcsICdteScsICdtYXJnaW4nLCAnbWFyZ2luVG9wJywgJ21hcmdpblJpZ2h0JywgJ21hcmdpbkJvdHRvbScsICdtYXJnaW5MZWZ0JywgJ21hcmdpblgnLCAnbWFyZ2luWScsICdtYXJnaW5JbmxpbmUnLCAnbWFyZ2luSW5saW5lU3RhcnQnLCAnbWFyZ2luSW5saW5lRW5kJywgJ21hcmdpbkJsb2NrJywgJ21hcmdpbkJsb2NrU3RhcnQnLCAnbWFyZ2luQmxvY2tFbmQnXTtcbmV4cG9ydCBjb25zdCBwYWRkaW5nS2V5cyA9IFsncCcsICdwdCcsICdwcicsICdwYicsICdwbCcsICdweCcsICdweScsICdwYWRkaW5nJywgJ3BhZGRpbmdUb3AnLCAncGFkZGluZ1JpZ2h0JywgJ3BhZGRpbmdCb3R0b20nLCAncGFkZGluZ0xlZnQnLCAncGFkZGluZ1gnLCAncGFkZGluZ1knLCAncGFkZGluZ0lubGluZScsICdwYWRkaW5nSW5saW5lU3RhcnQnLCAncGFkZGluZ0lubGluZUVuZCcsICdwYWRkaW5nQmxvY2snLCAncGFkZGluZ0Jsb2NrU3RhcnQnLCAncGFkZGluZ0Jsb2NrRW5kJ107XG5jb25zdCBzcGFjaW5nS2V5cyA9IFsuLi5tYXJnaW5LZXlzLCAuLi5wYWRkaW5nS2V5c107XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVW5hcnlVbml0KHRoZW1lLCB0aGVtZUtleSwgZGVmYXVsdFZhbHVlLCBwcm9wTmFtZSkge1xuICB2YXIgX2dldFBhdGg7XG4gIGNvbnN0IHRoZW1lU3BhY2luZyA9IChfZ2V0UGF0aCA9IGdldFBhdGgodGhlbWUsIHRoZW1lS2V5LCBmYWxzZSkpICE9IG51bGwgPyBfZ2V0UGF0aCA6IGRlZmF1bHRWYWx1ZTtcbiAgaWYgKHR5cGVvZiB0aGVtZVNwYWNpbmcgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIGFicyA9PiB7XG4gICAgICBpZiAodHlwZW9mIGFicyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGFicztcbiAgICAgIH1cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYWJzICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYE1VSTogRXhwZWN0ZWQgJHtwcm9wTmFtZX0gYXJndW1lbnQgdG8gYmUgYSBudW1iZXIgb3IgYSBzdHJpbmcsIGdvdCAke2Fic30uYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGVtZVNwYWNpbmcgKiBhYnM7XG4gICAgfTtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheSh0aGVtZVNwYWNpbmcpKSB7XG4gICAgcmV0dXJuIGFicyA9PiB7XG4gICAgICBpZiAodHlwZW9mIGFicyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGFicztcbiAgICAgIH1cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihhYnMpKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihbYE1VSTogVGhlIFxcYHRoZW1lLiR7dGhlbWVLZXl9XFxgIGFycmF5IHR5cGUgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggbm9uIGludGVnZXIgdmFsdWVzLmAgKyBgWW91IHNob3VsZCBlaXRoZXIgdXNlIGFuIGludGVnZXIgdmFsdWUgdGhhdCBjYW4gYmUgdXNlZCBhcyBpbmRleCwgb3IgZGVmaW5lIHRoZSBcXGB0aGVtZS4ke3RoZW1lS2V5fVxcYCBhcyBhIG51bWJlci5gXS5qb2luKCdcXG4nKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoYWJzID4gdGhlbWVTcGFjaW5nLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFtgTVVJOiBUaGUgdmFsdWUgcHJvdmlkZWQgKCR7YWJzfSkgb3ZlcmZsb3dzLmAsIGBUaGUgc3VwcG9ydGVkIHZhbHVlcyBhcmU6ICR7SlNPTi5zdHJpbmdpZnkodGhlbWVTcGFjaW5nKX0uYCwgYCR7YWJzfSA+ICR7dGhlbWVTcGFjaW5nLmxlbmd0aCAtIDF9LCB5b3UgbmVlZCB0byBhZGQgdGhlIG1pc3NpbmcgdmFsdWVzLmBdLmpvaW4oJ1xcbicpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoZW1lU3BhY2luZ1thYnNdO1xuICAgIH07XG4gIH1cbiAgaWYgKHR5cGVvZiB0aGVtZVNwYWNpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdGhlbWVTcGFjaW5nO1xuICB9XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgY29uc29sZS5lcnJvcihbYE1VSTogVGhlIFxcYHRoZW1lLiR7dGhlbWVLZXl9XFxgIHZhbHVlICgke3RoZW1lU3BhY2luZ30pIGlzIGludmFsaWQuYCwgJ0l0IHNob3VsZCBiZSBhIG51bWJlciwgYW4gYXJyYXkgb3IgYSBmdW5jdGlvbi4nXS5qb2luKCdcXG4nKSk7XG4gIH1cbiAgcmV0dXJuICgpID0+IHVuZGVmaW5lZDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVVbmFyeVNwYWNpbmcodGhlbWUpIHtcbiAgcmV0dXJuIGNyZWF0ZVVuYXJ5VW5pdCh0aGVtZSwgJ3NwYWNpbmcnLCA4LCAnc3BhY2luZycpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFZhbHVlKHRyYW5zZm9ybWVyLCBwcm9wVmFsdWUpIHtcbiAgaWYgKHR5cGVvZiBwcm9wVmFsdWUgPT09ICdzdHJpbmcnIHx8IHByb3BWYWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHByb3BWYWx1ZTtcbiAgfVxuICBjb25zdCBhYnMgPSBNYXRoLmFicyhwcm9wVmFsdWUpO1xuICBjb25zdCB0cmFuc2Zvcm1lZCA9IHRyYW5zZm9ybWVyKGFicyk7XG4gIGlmIChwcm9wVmFsdWUgPj0gMCkge1xuICAgIHJldHVybiB0cmFuc2Zvcm1lZDtcbiAgfVxuICBpZiAodHlwZW9mIHRyYW5zZm9ybWVkID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiAtdHJhbnNmb3JtZWQ7XG4gIH1cbiAgcmV0dXJuIGAtJHt0cmFuc2Zvcm1lZH1gO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0eWxlRnJvbVByb3BWYWx1ZShjc3NQcm9wZXJ0aWVzLCB0cmFuc2Zvcm1lcikge1xuICByZXR1cm4gcHJvcFZhbHVlID0+IGNzc1Byb3BlcnRpZXMucmVkdWNlKChhY2MsIGNzc1Byb3BlcnR5KSA9PiB7XG4gICAgYWNjW2Nzc1Byb3BlcnR5XSA9IGdldFZhbHVlKHRyYW5zZm9ybWVyLCBwcm9wVmFsdWUpO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbn1cbmZ1bmN0aW9uIHJlc29sdmVDc3NQcm9wZXJ0eShwcm9wcywga2V5cywgcHJvcCwgdHJhbnNmb3JtZXIpIHtcbiAgLy8gVXNpbmcgYSBoYXNoIGNvbXB1dGF0aW9uIG92ZXIgYW4gYXJyYXkgaXRlcmF0aW9uIGNvdWxkIGJlIGZhc3RlciwgYnV0IHdpdGggb25seSAyOCBpdGVtcyxcbiAgLy8gaXQncyBkb2Vzbid0IHdvcnRoIHRoZSBidW5kbGUgc2l6ZS5cbiAgaWYgKGtleXMuaW5kZXhPZihwcm9wKSA9PT0gLTEpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBjc3NQcm9wZXJ0aWVzID0gZ2V0Q3NzUHJvcGVydGllcyhwcm9wKTtcbiAgY29uc3Qgc3R5bGVGcm9tUHJvcFZhbHVlID0gZ2V0U3R5bGVGcm9tUHJvcFZhbHVlKGNzc1Byb3BlcnRpZXMsIHRyYW5zZm9ybWVyKTtcbiAgY29uc3QgcHJvcFZhbHVlID0gcHJvcHNbcHJvcF07XG4gIHJldHVybiBoYW5kbGVCcmVha3BvaW50cyhwcm9wcywgcHJvcFZhbHVlLCBzdHlsZUZyb21Qcm9wVmFsdWUpO1xufVxuZnVuY3Rpb24gc3R5bGUocHJvcHMsIGtleXMpIHtcbiAgY29uc3QgdHJhbnNmb3JtZXIgPSBjcmVhdGVVbmFyeVNwYWNpbmcocHJvcHMudGhlbWUpO1xuICByZXR1cm4gT2JqZWN0LmtleXMocHJvcHMpLm1hcChwcm9wID0+IHJlc29sdmVDc3NQcm9wZXJ0eShwcm9wcywga2V5cywgcHJvcCwgdHJhbnNmb3JtZXIpKS5yZWR1Y2UobWVyZ2UsIHt9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBtYXJnaW4ocHJvcHMpIHtcbiAgcmV0dXJuIHN0eWxlKHByb3BzLCBtYXJnaW5LZXlzKTtcbn1cbm1hcmdpbi5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gbWFyZ2luS2V5cy5yZWR1Y2UoKG9iaiwga2V5KSA9PiB7XG4gIG9ialtrZXldID0gcmVzcG9uc2l2ZVByb3BUeXBlO1xuICByZXR1cm4gb2JqO1xufSwge30pIDoge307XG5tYXJnaW4uZmlsdGVyUHJvcHMgPSBtYXJnaW5LZXlzO1xuZXhwb3J0IGZ1bmN0aW9uIHBhZGRpbmcocHJvcHMpIHtcbiAgcmV0dXJuIHN0eWxlKHByb3BzLCBwYWRkaW5nS2V5cyk7XG59XG5wYWRkaW5nLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBwYWRkaW5nS2V5cy5yZWR1Y2UoKG9iaiwga2V5KSA9PiB7XG4gIG9ialtrZXldID0gcmVzcG9uc2l2ZVByb3BUeXBlO1xuICByZXR1cm4gb2JqO1xufSwge30pIDoge307XG5wYWRkaW5nLmZpbHRlclByb3BzID0gcGFkZGluZ0tleXM7XG5mdW5jdGlvbiBzcGFjaW5nKHByb3BzKSB7XG4gIHJldHVybiBzdHlsZShwcm9wcywgc3BhY2luZ0tleXMpO1xufVxuc3BhY2luZy5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gc3BhY2luZ0tleXMucmVkdWNlKChvYmosIGtleSkgPT4ge1xuICBvYmpba2V5XSA9IHJlc3BvbnNpdmVQcm9wVHlwZTtcbiAgcmV0dXJuIG9iajtcbn0sIHt9KSA6IHt9O1xuc3BhY2luZy5maWx0ZXJQcm9wcyA9IHNwYWNpbmdLZXlzO1xuZXhwb3J0IGRlZmF1bHQgc3BhY2luZzsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8248\n")},8312:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ('$$material');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMxMi5qcyIsIm1hcHBpbmdzIjoiOzs7QUFBQSxpRUFBZSxZQUFZIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvaWRlbnRpZmllci5qcz81OTMzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0ICckJG1hdGVyaWFsJzsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8312\n")},8336:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   A: () => (/* binding */ applyStyles)\n/* harmony export */ });\n/**\n * A universal utility to style components with multiple color modes. Always use it from the theme object.\n * It works with:\n *  - [Basic theme](https://mui.com/material-ui/customization/dark-mode/)\n *  - [CSS theme variables](https://mui.com/material-ui/experimental-api/css-theme-variables/overview/)\n *  - Zero-runtime engine\n *\n * Tips: Use an array over object spread and place `theme.applyStyles()` last.\n *\n * ✅ [{ background: '#e5e5e5' }, theme.applyStyles('dark', { background: '#1c1c1c' })]\n *\n * 🚫 { background: '#e5e5e5', ...theme.applyStyles('dark', { background: '#1c1c1c' })}\n *\n * @example\n * 1. using with `styled`:\n * ```jsx\n *   const Component = styled('div')(({ theme }) => [\n *     { background: '#e5e5e5' },\n *     theme.applyStyles('dark', {\n *       background: '#1c1c1c',\n *       color: '#fff',\n *     }),\n *   ]);\n * ```\n *\n * @example\n * 2. using with `sx` prop:\n * ```jsx\n *   <Box sx={theme => [\n *     { background: '#e5e5e5' },\n *     theme.applyStyles('dark', {\n *        background: '#1c1c1c',\n *        color: '#fff',\n *      }),\n *     ]}\n *   />\n * ```\n *\n * @example\n * 3. theming a component:\n * ```jsx\n *   extendTheme({\n *     components: {\n *       MuiButton: {\n *         styleOverrides: {\n *           root: ({ theme }) => [\n *             { background: '#e5e5e5' },\n *             theme.applyStyles('dark', {\n *               background: '#1c1c1c',\n *               color: '#fff',\n *             }),\n *           ],\n *         },\n *       }\n *     }\n *   })\n *```\n */\nfunction applyStyles(key, styles) {\n  // @ts-expect-error this is 'any' type\n  const theme = this;\n  if (theme.vars && typeof theme.getColorSchemeSelector === 'function') {\n    // If CssVarsProvider is used as a provider,\n    // returns '* :where([data-mui-color-scheme=\"light|dark\"]) &'\n    const selector = theme.getColorSchemeSelector(key).replace(/(\\[[^\\]]+\\])/, '*:where($1)');\n    return {\n      [selector]: styles\n    };\n  }\n  if (theme.palette.mode === key) {\n    return styles;\n  }\n  return {};\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMzNi5qcyIsIm1hcHBpbmdzIjoiOzs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLHVCQUF1Qiw4QkFBOEIsdUJBQXVCO0FBQ3BGO0FBQ0EsUUFBUSxzREFBc0QsdUJBQXVCO0FBQ3JGO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDLE9BQU87QUFDL0MsU0FBUyx1QkFBdUI7QUFDaEM7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZCxTQUFTLHVCQUF1QjtBQUNoQztBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixPQUFPO0FBQzdCLGlCQUFpQix1QkFBdUI7QUFDeEM7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL2NyZWF0ZVRoZW1lL2FwcGx5U3R5bGVzLmpzP2RkNzEiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBIHVuaXZlcnNhbCB1dGlsaXR5IHRvIHN0eWxlIGNvbXBvbmVudHMgd2l0aCBtdWx0aXBsZSBjb2xvciBtb2Rlcy4gQWx3YXlzIHVzZSBpdCBmcm9tIHRoZSB0aGVtZSBvYmplY3QuXG4gKiBJdCB3b3JrcyB3aXRoOlxuICogIC0gW0Jhc2ljIHRoZW1lXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9kYXJrLW1vZGUvKVxuICogIC0gW0NTUyB0aGVtZSB2YXJpYWJsZXNdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9leHBlcmltZW50YWwtYXBpL2Nzcy10aGVtZS12YXJpYWJsZXMvb3ZlcnZpZXcvKVxuICogIC0gWmVyby1ydW50aW1lIGVuZ2luZVxuICpcbiAqIFRpcHM6IFVzZSBhbiBhcnJheSBvdmVyIG9iamVjdCBzcHJlYWQgYW5kIHBsYWNlIGB0aGVtZS5hcHBseVN0eWxlcygpYCBsYXN0LlxuICpcbiAqIOKchSBbeyBiYWNrZ3JvdW5kOiAnI2U1ZTVlNScgfSwgdGhlbWUuYXBwbHlTdHlsZXMoJ2RhcmsnLCB7IGJhY2tncm91bmQ6ICcjMWMxYzFjJyB9KV1cbiAqXG4gKiDwn5qrIHsgYmFja2dyb3VuZDogJyNlNWU1ZTUnLCAuLi50aGVtZS5hcHBseVN0eWxlcygnZGFyaycsIHsgYmFja2dyb3VuZDogJyMxYzFjMWMnIH0pfVxuICpcbiAqIEBleGFtcGxlXG4gKiAxLiB1c2luZyB3aXRoIGBzdHlsZWRgOlxuICogYGBganN4XG4gKiAgIGNvbnN0IENvbXBvbmVudCA9IHN0eWxlZCgnZGl2JykoKHsgdGhlbWUgfSkgPT4gW1xuICogICAgIHsgYmFja2dyb3VuZDogJyNlNWU1ZTUnIH0sXG4gKiAgICAgdGhlbWUuYXBwbHlTdHlsZXMoJ2RhcmsnLCB7XG4gKiAgICAgICBiYWNrZ3JvdW5kOiAnIzFjMWMxYycsXG4gKiAgICAgICBjb2xvcjogJyNmZmYnLFxuICogICAgIH0pLFxuICogICBdKTtcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiAyLiB1c2luZyB3aXRoIGBzeGAgcHJvcDpcbiAqIGBgYGpzeFxuICogICA8Qm94IHN4PXt0aGVtZSA9PiBbXG4gKiAgICAgeyBiYWNrZ3JvdW5kOiAnI2U1ZTVlNScgfSxcbiAqICAgICB0aGVtZS5hcHBseVN0eWxlcygnZGFyaycsIHtcbiAqICAgICAgICBiYWNrZ3JvdW5kOiAnIzFjMWMxYycsXG4gKiAgICAgICAgY29sb3I6ICcjZmZmJyxcbiAqICAgICAgfSksXG4gKiAgICAgXX1cbiAqICAgLz5cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiAzLiB0aGVtaW5nIGEgY29tcG9uZW50OlxuICogYGBganN4XG4gKiAgIGV4dGVuZFRoZW1lKHtcbiAqICAgICBjb21wb25lbnRzOiB7XG4gKiAgICAgICBNdWlCdXR0b246IHtcbiAqICAgICAgICAgc3R5bGVPdmVycmlkZXM6IHtcbiAqICAgICAgICAgICByb290OiAoeyB0aGVtZSB9KSA9PiBbXG4gKiAgICAgICAgICAgICB7IGJhY2tncm91bmQ6ICcjZTVlNWU1JyB9LFxuICogICAgICAgICAgICAgdGhlbWUuYXBwbHlTdHlsZXMoJ2RhcmsnLCB7XG4gKiAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICcjMWMxYzFjJyxcbiAqICAgICAgICAgICAgICAgY29sb3I6ICcjZmZmJyxcbiAqICAgICAgICAgICAgIH0pLFxuICogICAgICAgICAgIF0sXG4gKiAgICAgICAgIH0sXG4gKiAgICAgICB9XG4gKiAgICAgfVxuICogICB9KVxuICpgYGBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYXBwbHlTdHlsZXMoa2V5LCBzdHlsZXMpIHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciB0aGlzIGlzICdhbnknIHR5cGVcbiAgY29uc3QgdGhlbWUgPSB0aGlzO1xuICBpZiAodGhlbWUudmFycyAmJiB0eXBlb2YgdGhlbWUuZ2V0Q29sb3JTY2hlbWVTZWxlY3RvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIElmIENzc1ZhcnNQcm92aWRlciBpcyB1c2VkIGFzIGEgcHJvdmlkZXIsXG4gICAgLy8gcmV0dXJucyAnKiA6d2hlcmUoW2RhdGEtbXVpLWNvbG9yLXNjaGVtZT1cImxpZ2h0fGRhcmtcIl0pICYnXG4gICAgY29uc3Qgc2VsZWN0b3IgPSB0aGVtZS5nZXRDb2xvclNjaGVtZVNlbGVjdG9yKGtleSkucmVwbGFjZSgvKFxcW1teXFxdXStcXF0pLywgJyo6d2hlcmUoJDEpJyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIFtzZWxlY3Rvcl06IHN0eWxlc1xuICAgIH07XG4gIH1cbiAgaWYgKHRoZW1lLnBhbGV0dGUubW9kZSA9PT0ga2V5KSB7XG4gICAgcmV0dXJuIHN0eWxlcztcbiAgfVxuICByZXR1cm4ge307XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8336\n")},8413:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   A: () => (/* binding */ generateUtilityClasses)\n/* harmony export */ });\n/* harmony import */ var _generateUtilityClass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1609);\n\nfunction generateUtilityClasses(componentName, slots, globalStatePrefix = 'Mui') {\n  const result = {};\n  slots.forEach(slot => {\n    result[slot] = (0,_generateUtilityClass__WEBPACK_IMPORTED_MODULE_0__/* [\"default\"] */ .Ay)(componentName, slot, globalStatePrefix);\n  });\n  return result;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQxMy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQTJEO0FBQzVDO0FBQ2Y7QUFDQTtBQUNBLG1CQUFtQiwyRUFBb0I7QUFDdkMsR0FBRztBQUNIO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2VzbS9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMuanM/M2Q4NyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnLi4vZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyhjb21wb25lbnROYW1lLCBzbG90cywgZ2xvYmFsU3RhdGVQcmVmaXggPSAnTXVpJykge1xuICBjb25zdCByZXN1bHQgPSB7fTtcbiAgc2xvdHMuZm9yRWFjaChzbG90ID0+IHtcbiAgICByZXN1bHRbc2xvdF0gPSBnZW5lcmF0ZVV0aWxpdHlDbGFzcyhjb21wb25lbnROYW1lLCBzbG90LCBnbG9iYWxTdGF0ZVByZWZpeCk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8413\n")},8466:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _mui_utils_capitalize__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3967);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_mui_utils_capitalize__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQ2Ni5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQStDO0FBQy9DLGlFQUFlLHNFQUFVIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy9jYXBpdGFsaXplLmpzP2M1ZTciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnQG11aS91dGlscy9jYXBpdGFsaXplJztcbmV4cG9ydCBkZWZhdWx0IGNhcGl0YWxpemU7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8466\n')},8493:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval('/**\n * @license React\n * use-sync-external-store-shim.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\nvar React = __webpack_require__(1594);\nfunction is(x, y) {\n  return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = "function" === typeof Object.is ? Object.is : is,\n  useState = React.useState,\n  useEffect = React.useEffect,\n  useLayoutEffect = React.useLayoutEffect,\n  useDebugValue = React.useDebugValue;\nfunction useSyncExternalStore$2(subscribe, getSnapshot) {\n  var value = getSnapshot(),\n    _useState = useState({ inst: { value: value, getSnapshot: getSnapshot } }),\n    inst = _useState[0].inst,\n    forceUpdate = _useState[1];\n  useLayoutEffect(\n    function () {\n      inst.value = value;\n      inst.getSnapshot = getSnapshot;\n      checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n    },\n    [subscribe, value, getSnapshot]\n  );\n  useEffect(\n    function () {\n      checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n      return subscribe(function () {\n        checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n      });\n    },\n    [subscribe]\n  );\n  useDebugValue(value);\n  return value;\n}\nfunction checkIfSnapshotChanged(inst) {\n  var latestGetSnapshot = inst.getSnapshot;\n  inst = inst.value;\n  try {\n    var nextValue = latestGetSnapshot();\n    return !objectIs(inst, nextValue);\n  } catch (error) {\n    return !0;\n  }\n}\nfunction useSyncExternalStore$1(subscribe, getSnapshot) {\n  return getSnapshot();\n}\nvar shim =\n  "undefined" === typeof window ||\n  "undefined" === typeof window.document ||\n  "undefined" === typeof window.document.createElement\n    ? useSyncExternalStore$1\n    : useSyncExternalStore$2;\nexports.useSyncExternalStore =\n  void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQ5My5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWE7QUFDYixZQUFZLG1CQUFPLENBQUMsSUFBTztBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQixRQUFRLDBDQUEwQztBQUM3RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0QsWUFBWTtBQUNoRSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0QsWUFBWTtBQUNoRTtBQUNBLHNEQUFzRCxZQUFZO0FBQ2xFLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS9janMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUtc2hpbS5wcm9kdWN0aW9uLmpzP2I0ODkiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZSBSZWFjdFxuICogdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUtc2hpbS5wcm9kdWN0aW9uLmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcbnZhciBSZWFjdCA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcbmZ1bmN0aW9uIGlzKHgsIHkpIHtcbiAgcmV0dXJuICh4ID09PSB5ICYmICgwICE9PSB4IHx8IDEgLyB4ID09PSAxIC8geSkpIHx8ICh4ICE9PSB4ICYmIHkgIT09IHkpO1xufVxudmFyIG9iamVjdElzID0gXCJmdW5jdGlvblwiID09PSB0eXBlb2YgT2JqZWN0LmlzID8gT2JqZWN0LmlzIDogaXMsXG4gIHVzZVN0YXRlID0gUmVhY3QudXNlU3RhdGUsXG4gIHVzZUVmZmVjdCA9IFJlYWN0LnVzZUVmZmVjdCxcbiAgdXNlTGF5b3V0RWZmZWN0ID0gUmVhY3QudXNlTGF5b3V0RWZmZWN0LFxuICB1c2VEZWJ1Z1ZhbHVlID0gUmVhY3QudXNlRGVidWdWYWx1ZTtcbmZ1bmN0aW9uIHVzZVN5bmNFeHRlcm5hbFN0b3JlJDIoc3Vic2NyaWJlLCBnZXRTbmFwc2hvdCkge1xuICB2YXIgdmFsdWUgPSBnZXRTbmFwc2hvdCgpLFxuICAgIF91c2VTdGF0ZSA9IHVzZVN0YXRlKHsgaW5zdDogeyB2YWx1ZTogdmFsdWUsIGdldFNuYXBzaG90OiBnZXRTbmFwc2hvdCB9IH0pLFxuICAgIGluc3QgPSBfdXNlU3RhdGVbMF0uaW5zdCxcbiAgICBmb3JjZVVwZGF0ZSA9IF91c2VTdGF0ZVsxXTtcbiAgdXNlTGF5b3V0RWZmZWN0KFxuICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgIGluc3QudmFsdWUgPSB2YWx1ZTtcbiAgICAgIGluc3QuZ2V0U25hcHNob3QgPSBnZXRTbmFwc2hvdDtcbiAgICAgIGNoZWNrSWZTbmFwc2hvdENoYW5nZWQoaW5zdCkgJiYgZm9yY2VVcGRhdGUoeyBpbnN0OiBpbnN0IH0pO1xuICAgIH0sXG4gICAgW3N1YnNjcmliZSwgdmFsdWUsIGdldFNuYXBzaG90XVxuICApO1xuICB1c2VFZmZlY3QoXG4gICAgZnVuY3Rpb24gKCkge1xuICAgICAgY2hlY2tJZlNuYXBzaG90Q2hhbmdlZChpbnN0KSAmJiBmb3JjZVVwZGF0ZSh7IGluc3Q6IGluc3QgfSk7XG4gICAgICByZXR1cm4gc3Vic2NyaWJlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2hlY2tJZlNuYXBzaG90Q2hhbmdlZChpbnN0KSAmJiBmb3JjZVVwZGF0ZSh7IGluc3Q6IGluc3QgfSk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIFtzdWJzY3JpYmVdXG4gICk7XG4gIHVzZURlYnVnVmFsdWUodmFsdWUpO1xuICByZXR1cm4gdmFsdWU7XG59XG5mdW5jdGlvbiBjaGVja0lmU25hcHNob3RDaGFuZ2VkKGluc3QpIHtcbiAgdmFyIGxhdGVzdEdldFNuYXBzaG90ID0gaW5zdC5nZXRTbmFwc2hvdDtcbiAgaW5zdCA9IGluc3QudmFsdWU7XG4gIHRyeSB7XG4gICAgdmFyIG5leHRWYWx1ZSA9IGxhdGVzdEdldFNuYXBzaG90KCk7XG4gICAgcmV0dXJuICFvYmplY3RJcyhpbnN0LCBuZXh0VmFsdWUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiAhMDtcbiAgfVxufVxuZnVuY3Rpb24gdXNlU3luY0V4dGVybmFsU3RvcmUkMShzdWJzY3JpYmUsIGdldFNuYXBzaG90KSB7XG4gIHJldHVybiBnZXRTbmFwc2hvdCgpO1xufVxudmFyIHNoaW0gPVxuICBcInVuZGVmaW5lZFwiID09PSB0eXBlb2Ygd2luZG93IHx8XG4gIFwidW5kZWZpbmVkXCIgPT09IHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgfHxcbiAgXCJ1bmRlZmluZWRcIiA9PT0gdHlwZW9mIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50XG4gICAgPyB1c2VTeW5jRXh0ZXJuYWxTdG9yZSQxXG4gICAgOiB1c2VTeW5jRXh0ZXJuYWxTdG9yZSQyO1xuZXhwb3J0cy51c2VTeW5jRXh0ZXJuYWxTdG9yZSA9XG4gIHZvaWQgMCAhPT0gUmVhY3QudXNlU3luY0V4dGVybmFsU3RvcmUgPyBSZWFjdC51c2VTeW5jRXh0ZXJuYWxTdG9yZSA6IHNoaW07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8493\n')},8586:(n,c,l)=>{"use strict";l.r(c),l.d(c,{default:()=>e.A});var e=l(725)},8587:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   A: () => (/* binding */ _objectWithoutPropertiesLoose)\n/* harmony export */ });\nfunction _objectWithoutPropertiesLoose(r, e) {\n  if (null == r) return {};\n  var t = {};\n  for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n    if (-1 !== e.indexOf(n)) continue;\n    t[n] = r[n];\n  }\n  return t;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODU4Ny5qcyIsIm1hcHBpbmdzIjoiOzs7QUFBQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanM/OGQzZiJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7XG4gIGlmIChudWxsID09IHIpIHJldHVybiB7fTtcbiAgdmFyIHQgPSB7fTtcbiAgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkge1xuICAgIGlmICgtMSAhPT0gZS5pbmRleE9mKG4pKSBjb250aW51ZTtcbiAgICB0W25dID0gcltuXTtcbiAgfVxuICByZXR1cm4gdDtcbn1cbmV4cG9ydCB7IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGFzIGRlZmF1bHQgfTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8587\n")},8593:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n  A: () => (/* binding */ utils_isMuiElement)\n});\n\n// EXTERNAL MODULE: external "React"\nvar external_React_ = __webpack_require__(1594);\n;// ./node_modules/@mui/utils/esm/isMuiElement/isMuiElement.js\n\nfunction isMuiElement(element, muiNames) {\n  var _muiName, _element$type;\n  return /*#__PURE__*/external_React_.isValidElement(element) && muiNames.indexOf( // For server components `muiName` is avaialble in element.type._payload.value.muiName\n  // relevant info - https://github.com/facebook/react/blob/2807d781a08db8e9873687fccc25c0f12b4fb3d4/packages/react/src/ReactLazy.js#L45\n  // eslint-disable-next-line no-underscore-dangle\n  (_muiName = element.type.muiName) != null ? _muiName : (_element$type = element.type) == null || (_element$type = _element$type._payload) == null || (_element$type = _element$type.value) == null ? void 0 : _element$type.muiName) !== -1;\n}\n;// ./node_modules/@mui/material/utils/isMuiElement.js\n\n/* harmony default export */ const utils_isMuiElement = (isMuiElement);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODU5My5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBK0I7QUFDaEI7QUFDZjtBQUNBLHNCQUFzQiw4QkFBb0I7QUFDMUM7QUFDQTtBQUNBO0FBQ0EsQzs7QUNQbUQ7QUFDbkQseURBQWUsWUFBWSIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL2lzTXVpRWxlbWVudC9pc011aUVsZW1lbnQuanM/OTQ3NiIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL2lzTXVpRWxlbWVudC5qcz8zMzczIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzTXVpRWxlbWVudChlbGVtZW50LCBtdWlOYW1lcykge1xuICB2YXIgX211aU5hbWUsIF9lbGVtZW50JHR5cGU7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuaXNWYWxpZEVsZW1lbnQoZWxlbWVudCkgJiYgbXVpTmFtZXMuaW5kZXhPZiggLy8gRm9yIHNlcnZlciBjb21wb25lbnRzIGBtdWlOYW1lYCBpcyBhdmFpYWxibGUgaW4gZWxlbWVudC50eXBlLl9wYXlsb2FkLnZhbHVlLm11aU5hbWVcbiAgLy8gcmVsZXZhbnQgaW5mbyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9ibG9iLzI4MDdkNzgxYTA4ZGI4ZTk4NzM2ODdmY2NjMjVjMGYxMmI0ZmIzZDQvcGFja2FnZXMvcmVhY3Qvc3JjL1JlYWN0TGF6eS5qcyNMNDVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVyc2NvcmUtZGFuZ2xlXG4gIChfbXVpTmFtZSA9IGVsZW1lbnQudHlwZS5tdWlOYW1lKSAhPSBudWxsID8gX211aU5hbWUgOiAoX2VsZW1lbnQkdHlwZSA9IGVsZW1lbnQudHlwZSkgPT0gbnVsbCB8fCAoX2VsZW1lbnQkdHlwZSA9IF9lbGVtZW50JHR5cGUuX3BheWxvYWQpID09IG51bGwgfHwgKF9lbGVtZW50JHR5cGUgPSBfZWxlbWVudCR0eXBlLnZhbHVlKSA9PSBudWxsID8gdm9pZCAwIDogX2VsZW1lbnQkdHlwZS5tdWlOYW1lKSAhPT0gLTE7XG59IiwiaW1wb3J0IGlzTXVpRWxlbWVudCBmcm9tICdAbXVpL3V0aWxzL2lzTXVpRWxlbWVudCc7XG5leHBvcnQgZGVmYXVsdCBpc011aUVsZW1lbnQ7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8593\n')},8749:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n  A: () => (/* binding */ createTheme_createTheme)\n});\n\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/extends.js\nvar esm_extends = __webpack_require__(8168);\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\nvar objectWithoutPropertiesLoose = __webpack_require__(8587);\n// EXTERNAL MODULE: ./node_modules/@mui/utils/esm/deepmerge/deepmerge.js\nvar deepmerge = __webpack_require__(1317);\n// EXTERNAL MODULE: ./node_modules/@mui/system/esm/createTheme/createBreakpoints.js\nvar createBreakpoints = __webpack_require__(8094);\n;// ./node_modules/@mui/system/esm/createTheme/shape.js\nconst shape = {\n  borderRadius: 4\n};\n/* harmony default export */ const createTheme_shape = (shape);\n// EXTERNAL MODULE: ./node_modules/@mui/system/esm/spacing.js + 1 modules\nvar esm_spacing = __webpack_require__(8248);\n;// ./node_modules/@mui/system/esm/createTheme/createSpacing.js\n\n\n// The different signatures imply different meaning for their arguments that can't be expressed structurally.\n// We express the difference with variable names.\n\nfunction createSpacing(spacingInput = 8) {\n  // Already transformed.\n  if (spacingInput.mui) {\n    return spacingInput;\n  }\n\n  // Material Design layouts are visually balanced. Most measurements align to an 8dp grid, which aligns both spacing and the overall layout.\n  // Smaller components, such as icons, can align to a 4dp grid.\n  // https://m2.material.io/design/layout/understanding-layout.html\n  const transform = (0,esm_spacing/* createUnarySpacing */.LX)({\n    spacing: spacingInput\n  });\n  const spacing = (...argsInput) => {\n    if (false) // removed by dead control flow\n{}\n    const args = argsInput.length === 0 ? [1] : argsInput;\n    return args.map(argument => {\n      const output = transform(argument);\n      return typeof output === 'number' ? `${output}px` : output;\n    }).join(' ');\n  };\n  spacing.mui = true;\n  return spacing;\n}\n// EXTERNAL MODULE: ./node_modules/@mui/system/esm/styleFunctionSx/styleFunctionSx.js\nvar styleFunctionSx = __webpack_require__(3571);\n// EXTERNAL MODULE: ./node_modules/@mui/system/esm/styleFunctionSx/defaultSxConfig.js + 5 modules\nvar defaultSxConfig = __webpack_require__(4188);\n// EXTERNAL MODULE: ./node_modules/@mui/system/esm/createTheme/applyStyles.js\nvar applyStyles = __webpack_require__(8336);\n;// ./node_modules/@mui/system/esm/createTheme/createTheme.js\n\n\nconst _excluded = [\"breakpoints\", \"palette\", \"spacing\", \"shape\"];\n\n\n\n\n\n\n\nfunction createTheme(options = {}, ...args) {\n  const {\n      breakpoints: breakpointsInput = {},\n      palette: paletteInput = {},\n      spacing: spacingInput,\n      shape: shapeInput = {}\n    } = options,\n    other = (0,objectWithoutPropertiesLoose/* default */.A)(options, _excluded);\n  const breakpoints = (0,createBreakpoints/* default */.A)(breakpointsInput);\n  const spacing = createSpacing(spacingInput);\n  let muiTheme = (0,deepmerge/* default */.A)({\n    breakpoints,\n    direction: 'ltr',\n    components: {},\n    // Inject component definitions.\n    palette: (0,esm_extends/* default */.A)({\n      mode: 'light'\n    }, paletteInput),\n    spacing,\n    shape: (0,esm_extends/* default */.A)({}, createTheme_shape, shapeInput)\n  }, other);\n  muiTheme.applyStyles = applyStyles/* default */.A;\n  muiTheme = args.reduce((acc, argument) => (0,deepmerge/* default */.A)(acc, argument), muiTheme);\n  muiTheme.unstable_sxConfig = (0,esm_extends/* default */.A)({}, defaultSxConfig/* default */.A, other == null ? void 0 : other.unstable_sxConfig);\n  muiTheme.unstable_sx = function sx(props) {\n    return (0,styleFunctionSx/* default */.A)({\n      sx: props,\n      theme: this\n    });\n  };\n  return muiTheme;\n}\n/* harmony default export */ const createTheme_createTheme = (createTheme);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODc0OS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQSx3REFBZSxLQUFLLEU7Ozs7QUNINEI7O0FBRWhEO0FBQ0E7O0FBRWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsMENBQWtCO0FBQ3RDO0FBQ0EsR0FBRztBQUNIO0FBQ0EsUUFBUSxLQUFxQyxFQUFFO0FBQUEsRUFJMUM7QUFDTDtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsT0FBTztBQUNwRCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsQzs7Ozs7Ozs7QUMvQjBEO0FBQzBDO0FBQ3BHO0FBQzZDO0FBQ087QUFDeEI7QUFDZ0I7QUFDcUI7QUFDQTtBQUN6QjtBQUN4QyxpQ0FBaUM7QUFDakM7QUFDQSx3Q0FBd0M7QUFDeEMsZ0NBQWdDO0FBQ2hDO0FBQ0E7QUFDQSxNQUFNO0FBQ04sWUFBWSwrQ0FBNkI7QUFDekMsc0JBQXNCLG9DQUFpQjtBQUN2QyxrQkFBa0IsYUFBYTtBQUMvQixpQkFBaUIsNEJBQVM7QUFDMUI7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBLGFBQWEsOEJBQVE7QUFDckI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxXQUFXLDhCQUFRLEdBQUcsRUFBRSxpQkFBSztBQUM3QixHQUFHO0FBQ0gseUJBQXlCLDBCQUFXO0FBQ3BDLDRDQUE0Qyw0QkFBUztBQUNyRCwrQkFBK0IsOEJBQVEsR0FBRyxFQUFFLDhCQUFlO0FBQzNEO0FBQ0EsV0FBVyxrQ0FBZTtBQUMxQjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLDhEQUFlLFdBQVciLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vY3JlYXRlVGhlbWUvc2hhcGUuanM/YWRkNCIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vY3JlYXRlVGhlbWUvY3JlYXRlU3BhY2luZy5qcz8xMDgwIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9jcmVhdGVUaGVtZS9jcmVhdGVUaGVtZS5qcz9lYmY2Il0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IHNoYXBlID0ge1xuICBib3JkZXJSYWRpdXM6IDRcbn07XG5leHBvcnQgZGVmYXVsdCBzaGFwZTsiLCJpbXBvcnQgeyBjcmVhdGVVbmFyeVNwYWNpbmcgfSBmcm9tICcuLi9zcGFjaW5nJztcblxuLy8gVGhlIGRpZmZlcmVudCBzaWduYXR1cmVzIGltcGx5IGRpZmZlcmVudCBtZWFuaW5nIGZvciB0aGVpciBhcmd1bWVudHMgdGhhdCBjYW4ndCBiZSBleHByZXNzZWQgc3RydWN0dXJhbGx5LlxuLy8gV2UgZXhwcmVzcyB0aGUgZGlmZmVyZW5jZSB3aXRoIHZhcmlhYmxlIG5hbWVzLlxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVTcGFjaW5nKHNwYWNpbmdJbnB1dCA9IDgpIHtcbiAgLy8gQWxyZWFkeSB0cmFuc2Zvcm1lZC5cbiAgaWYgKHNwYWNpbmdJbnB1dC5tdWkpIHtcbiAgICByZXR1cm4gc3BhY2luZ0lucHV0O1xuICB9XG5cbiAgLy8gTWF0ZXJpYWwgRGVzaWduIGxheW91dHMgYXJlIHZpc3VhbGx5IGJhbGFuY2VkLiBNb3N0IG1lYXN1cmVtZW50cyBhbGlnbiB0byBhbiA4ZHAgZ3JpZCwgd2hpY2ggYWxpZ25zIGJvdGggc3BhY2luZyBhbmQgdGhlIG92ZXJhbGwgbGF5b3V0LlxuICAvLyBTbWFsbGVyIGNvbXBvbmVudHMsIHN1Y2ggYXMgaWNvbnMsIGNhbiBhbGlnbiB0byBhIDRkcCBncmlkLlxuICAvLyBodHRwczovL20yLm1hdGVyaWFsLmlvL2Rlc2lnbi9sYXlvdXQvdW5kZXJzdGFuZGluZy1sYXlvdXQuaHRtbFxuICBjb25zdCB0cmFuc2Zvcm0gPSBjcmVhdGVVbmFyeVNwYWNpbmcoe1xuICAgIHNwYWNpbmc6IHNwYWNpbmdJbnB1dFxuICB9KTtcbiAgY29uc3Qgc3BhY2luZyA9ICguLi5hcmdzSW5wdXQpID0+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKCEoYXJnc0lucHV0Lmxlbmd0aCA8PSA0KSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBNVUk6IFRvbyBtYW55IGFyZ3VtZW50cyBwcm92aWRlZCwgZXhwZWN0ZWQgYmV0d2VlbiAwIGFuZCA0LCBnb3QgJHthcmdzSW5wdXQubGVuZ3RofWApO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBhcmdzID0gYXJnc0lucHV0Lmxlbmd0aCA9PT0gMCA/IFsxXSA6IGFyZ3NJbnB1dDtcbiAgICByZXR1cm4gYXJncy5tYXAoYXJndW1lbnQgPT4ge1xuICAgICAgY29uc3Qgb3V0cHV0ID0gdHJhbnNmb3JtKGFyZ3VtZW50KTtcbiAgICAgIHJldHVybiB0eXBlb2Ygb3V0cHV0ID09PSAnbnVtYmVyJyA/IGAke291dHB1dH1weGAgOiBvdXRwdXQ7XG4gICAgfSkuam9pbignICcpO1xuICB9O1xuICBzcGFjaW5nLm11aSA9IHRydWU7XG4gIHJldHVybiBzcGFjaW5nO1xufSIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJicmVha3BvaW50c1wiLCBcInBhbGV0dGVcIiwgXCJzcGFjaW5nXCIsIFwic2hhcGVcIl07XG5pbXBvcnQgZGVlcG1lcmdlIGZyb20gJ0BtdWkvdXRpbHMvZGVlcG1lcmdlJztcbmltcG9ydCBjcmVhdGVCcmVha3BvaW50cyBmcm9tICcuL2NyZWF0ZUJyZWFrcG9pbnRzJztcbmltcG9ydCBzaGFwZSBmcm9tICcuL3NoYXBlJztcbmltcG9ydCBjcmVhdGVTcGFjaW5nIGZyb20gJy4vY3JlYXRlU3BhY2luZyc7XG5pbXBvcnQgc3R5bGVGdW5jdGlvblN4IGZyb20gJy4uL3N0eWxlRnVuY3Rpb25TeC9zdHlsZUZ1bmN0aW9uU3gnO1xuaW1wb3J0IGRlZmF1bHRTeENvbmZpZyBmcm9tICcuLi9zdHlsZUZ1bmN0aW9uU3gvZGVmYXVsdFN4Q29uZmlnJztcbmltcG9ydCBhcHBseVN0eWxlcyBmcm9tICcuL2FwcGx5U3R5bGVzJztcbmZ1bmN0aW9uIGNyZWF0ZVRoZW1lKG9wdGlvbnMgPSB7fSwgLi4uYXJncykge1xuICBjb25zdCB7XG4gICAgICBicmVha3BvaW50czogYnJlYWtwb2ludHNJbnB1dCA9IHt9LFxuICAgICAgcGFsZXR0ZTogcGFsZXR0ZUlucHV0ID0ge30sXG4gICAgICBzcGFjaW5nOiBzcGFjaW5nSW5wdXQsXG4gICAgICBzaGFwZTogc2hhcGVJbnB1dCA9IHt9XG4gICAgfSA9IG9wdGlvbnMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShvcHRpb25zLCBfZXhjbHVkZWQpO1xuICBjb25zdCBicmVha3BvaW50cyA9IGNyZWF0ZUJyZWFrcG9pbnRzKGJyZWFrcG9pbnRzSW5wdXQpO1xuICBjb25zdCBzcGFjaW5nID0gY3JlYXRlU3BhY2luZyhzcGFjaW5nSW5wdXQpO1xuICBsZXQgbXVpVGhlbWUgPSBkZWVwbWVyZ2Uoe1xuICAgIGJyZWFrcG9pbnRzLFxuICAgIGRpcmVjdGlvbjogJ2x0cicsXG4gICAgY29tcG9uZW50czoge30sXG4gICAgLy8gSW5qZWN0IGNvbXBvbmVudCBkZWZpbml0aW9ucy5cbiAgICBwYWxldHRlOiBfZXh0ZW5kcyh7XG4gICAgICBtb2RlOiAnbGlnaHQnXG4gICAgfSwgcGFsZXR0ZUlucHV0KSxcbiAgICBzcGFjaW5nLFxuICAgIHNoYXBlOiBfZXh0ZW5kcyh7fSwgc2hhcGUsIHNoYXBlSW5wdXQpXG4gIH0sIG90aGVyKTtcbiAgbXVpVGhlbWUuYXBwbHlTdHlsZXMgPSBhcHBseVN0eWxlcztcbiAgbXVpVGhlbWUgPSBhcmdzLnJlZHVjZSgoYWNjLCBhcmd1bWVudCkgPT4gZGVlcG1lcmdlKGFjYywgYXJndW1lbnQpLCBtdWlUaGVtZSk7XG4gIG11aVRoZW1lLnVuc3RhYmxlX3N4Q29uZmlnID0gX2V4dGVuZHMoe30sIGRlZmF1bHRTeENvbmZpZywgb3RoZXIgPT0gbnVsbCA/IHZvaWQgMCA6IG90aGVyLnVuc3RhYmxlX3N4Q29uZmlnKTtcbiAgbXVpVGhlbWUudW5zdGFibGVfc3ggPSBmdW5jdGlvbiBzeChwcm9wcykge1xuICAgIHJldHVybiBzdHlsZUZ1bmN0aW9uU3goe1xuICAgICAgc3g6IHByb3BzLFxuICAgICAgdGhlbWU6IHRoaXNcbiAgICB9KTtcbiAgfTtcbiAgcmV0dXJuIG11aVRoZW1lO1xufVxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlVGhlbWU7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8749\n")},8851:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _mui_utils_useIsFocusVisible__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3313);\n'use client';\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_mui_utils_useIsFocusVisible__WEBPACK_IMPORTED_MODULE_0__/* [\"default\"] */ .A);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODg1MS5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7O0FBRTZEO0FBQzdELGlFQUFlLDZFQUFpQiIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvdXNlSXNGb2N1c1Zpc2libGUuanM/ZjJiOSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB1c2VJc0ZvY3VzVmlzaWJsZSBmcm9tICdAbXVpL3V0aWxzL3VzZUlzRm9jdXNWaXNpYmxlJztcbmV4cG9ydCBkZWZhdWx0IHVzZUlzRm9jdXNWaXNpYmxlOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8851\n")},8928:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n  capitalize: () => (/* reexport */ capitalize/* default */.A),\n  createChainedFunction: () => (/* reexport */ createChainedFunction/* default */.A),\n  createSvgIcon: () => (/* reexport */ createSvgIcon/* default */.A),\n  debounce: () => (/* reexport */ debounce/* default */.A),\n  deprecatedPropType: () => (/* reexport */ utils_deprecatedPropType),\n  isMuiElement: () => (/* reexport */ isMuiElement/* default */.A),\n  ownerDocument: () => (/* reexport */ ownerDocument/* default */.A),\n  ownerWindow: () => (/* reexport */ ownerWindow/* default */.A),\n  requirePropFactory: () => (/* reexport */ utils_requirePropFactory),\n  setRef: () => (/* reexport */ utils_setRef),\n  unstable_ClassNameGenerator: () => (/* binding */ unstable_ClassNameGenerator),\n  unstable_useEnhancedEffect: () => (/* reexport */ useEnhancedEffect/* default */.A),\n  unstable_useId: () => (/* reexport */ useId/* default */.A),\n  unsupportedProp: () => (/* reexport */ utils_unsupportedProp),\n  useControlled: () => (/* reexport */ useControlled/* default */.A),\n  useEventCallback: () => (/* reexport */ useEventCallback/* default */.A),\n  useForkRef: () => (/* reexport */ useForkRef/* default */.A),\n  useIsFocusVisible: () => (/* reexport */ useIsFocusVisible/* default */.A)\n});\n\n// EXTERNAL MODULE: ./node_modules/@mui/utils/esm/ClassNameGenerator/ClassNameGenerator.js\nvar ClassNameGenerator = __webpack_require__(9071);\n// EXTERNAL MODULE: ./node_modules/@mui/material/utils/capitalize.js\nvar capitalize = __webpack_require__(8466);\n// EXTERNAL MODULE: ./node_modules/@mui/material/utils/createChainedFunction.js\nvar createChainedFunction = __webpack_require__(862);\n// EXTERNAL MODULE: ./node_modules/@mui/material/utils/createSvgIcon.js\nvar createSvgIcon = __webpack_require__(561);\n// EXTERNAL MODULE: ./node_modules/@mui/material/utils/debounce.js\nvar debounce = __webpack_require__(1935);\n;// ./node_modules/@mui/utils/esm/deprecatedPropType/deprecatedPropType.js\nfunction deprecatedPropType(validator, reason) {\n  if (true) {\n    return () => null;\n  }\n  // removed by dead control flow\n{}\n}\n;// ./node_modules/@mui/material/utils/deprecatedPropType.js\n\n/* harmony default export */ const utils_deprecatedPropType = (deprecatedPropType);\n// EXTERNAL MODULE: ./node_modules/@mui/material/utils/isMuiElement.js + 1 modules\nvar isMuiElement = __webpack_require__(8593);\n// EXTERNAL MODULE: ./node_modules/@mui/material/utils/ownerDocument.js\nvar ownerDocument = __webpack_require__(6248);\n// EXTERNAL MODULE: ./node_modules/@mui/material/utils/ownerWindow.js\nvar ownerWindow = __webpack_require__(3749);\n;// ./node_modules/@mui/utils/esm/requirePropFactory/requirePropFactory.js\n\nfunction requirePropFactory(componentNameInError, Component) {\n  if (true) {\n    return () => null;\n  }\n\n  // eslint-disable-next-line react/forbid-foreign-prop-types\n  // removed by dead control flow\n{}\n  // removed by dead control flow\n{}\n  // removed by dead control flow\n{}\n}\n;// ./node_modules/@mui/material/utils/requirePropFactory.js\n\n/* harmony default export */ const utils_requirePropFactory = (requirePropFactory);\n// EXTERNAL MODULE: ./node_modules/@mui/utils/esm/setRef/setRef.js\nvar setRef = __webpack_require__(7365);\n;// ./node_modules/@mui/material/utils/setRef.js\n\n/* harmony default export */ const utils_setRef = (setRef/* default */.A);\n// EXTERNAL MODULE: ./node_modules/@mui/material/utils/useEnhancedEffect.js\nvar useEnhancedEffect = __webpack_require__(2778);\n// EXTERNAL MODULE: ./node_modules/@mui/material/utils/useId.js\nvar useId = __webpack_require__(1668);\n;// ./node_modules/@mui/utils/esm/unsupportedProp/unsupportedProp.js\nfunction unsupportedProp(props, propName, componentName, location, propFullName) {\n  if (true) {\n    return null;\n  }\n  // removed by dead control flow\n{}\n  // removed by dead control flow\n{}\n  // removed by dead control flow\n{}\n}\n;// ./node_modules/@mui/material/utils/unsupportedProp.js\n\n/* harmony default export */ const utils_unsupportedProp = (unsupportedProp);\n// EXTERNAL MODULE: ./node_modules/@mui/material/utils/useControlled.js\nvar useControlled = __webpack_require__(1159);\n// EXTERNAL MODULE: ./node_modules/@mui/material/utils/useEventCallback.js\nvar useEventCallback = __webpack_require__(3034);\n// EXTERNAL MODULE: ./node_modules/@mui/material/utils/useForkRef.js\nvar useForkRef = __webpack_require__(6852);\n// EXTERNAL MODULE: ./node_modules/@mui/material/utils/useIsFocusVisible.js\nvar useIsFocusVisible = __webpack_require__(8851);\n;// ./node_modules/@mui/material/utils/index.js\n'use client';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// TODO: remove this export once ClassNameGenerator is stable\n// eslint-disable-next-line @typescript-eslint/naming-convention\nconst unstable_ClassNameGenerator = {\n  configure: generator => {\n    if (false) // removed by dead control flow\n{}\n    ClassNameGenerator/* default */.A.configure(generator);\n  }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODkyOC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBZTtBQUNmLE1BQU0sSUFBcUM7QUFDM0M7QUFDQTtBQUNBLEVBQUU7QUFBQSxFQU9FO0FBQ0osQzs7QUNaK0Q7QUFDL0QsK0RBQWUsa0JBQWtCLEU7Ozs7Ozs7O0FDRHlCO0FBQzNDO0FBQ2YsTUFBTSxJQUFxQztBQUMzQztBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUFBLEVBQTJFO0FBQzdFLEVBQUU7QUFBQSxFQWFFO0FBQ0osRUFBRTtBQUFBLEVBQW1CO0FBQ3JCLEM7O0FDdkIrRDtBQUMvRCwrREFBZSxrQkFBa0IsRTs7OztBQ0RNO0FBQ3ZDLG1EQUFlLHFCQUFNLEU7Ozs7OztBQ0ROO0FBQ2YsTUFBTSxJQUFxQztBQUMzQztBQUNBO0FBQ0EsRUFBRTtBQUFBLEVBQWtEO0FBQ3BELEVBQUU7QUFBQSxFQUVDO0FBQ0gsRUFBRTtBQUFBLEVBQVk7QUFDZCxDOztBQ1R5RDtBQUN6RCw0REFBZSxlQUFlLEU7Ozs7Ozs7Ozs7QUNEOUI7O0FBRStFO0FBQzFCO0FBQ3NCO0FBQ2hCO0FBQ1Y7QUFDb0I7QUFDWjtBQUNFO0FBQ0o7QUFDYztBQUN4QjtBQUMrQjtBQUN4QjtBQUNXO0FBQ0o7QUFDTTtBQUNaO0FBQ2M7QUFDbkU7QUFDQTtBQUNPO0FBQ1A7QUFDQSxRQUFRLEtBQXFDLEVBQUU7QUFBQSxFQUUxQztBQUNMLElBQUksaUNBQWtCO0FBQ3RCO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2VzbS9kZXByZWNhdGVkUHJvcFR5cGUvZGVwcmVjYXRlZFByb3BUeXBlLmpzPzAyYTMiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy9kZXByZWNhdGVkUHJvcFR5cGUuanM/OTE3MyIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2VzbS9yZXF1aXJlUHJvcEZhY3RvcnkvcmVxdWlyZVByb3BGYWN0b3J5LmpzP2YyYmUiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy9yZXF1aXJlUHJvcEZhY3RvcnkuanM/ODcxNiIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL3NldFJlZi5qcz8yOGMxIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL3Vuc3VwcG9ydGVkUHJvcC91bnN1cHBvcnRlZFByb3AuanM/ZDQwNCIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL3Vuc3VwcG9ydGVkUHJvcC5qcz8xOWNiIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvaW5kZXguanM/NTFkNyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZXByZWNhdGVkUHJvcFR5cGUodmFsaWRhdG9yLCByZWFzb24pIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgICByZXR1cm4gKCkgPT4gbnVsbDtcbiAgfVxuICByZXR1cm4gKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkgPT4ge1xuICAgIGNvbnN0IGNvbXBvbmVudE5hbWVTYWZlID0gY29tcG9uZW50TmFtZSB8fCAnPDxhbm9ueW1vdXM+Pic7XG4gICAgY29uc3QgcHJvcEZ1bGxOYW1lU2FmZSA9IHByb3BGdWxsTmFtZSB8fCBwcm9wTmFtZTtcbiAgICBpZiAodHlwZW9mIHByb3BzW3Byb3BOYW1lXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoYFRoZSAke2xvY2F0aW9ufSBcXGAke3Byb3BGdWxsTmFtZVNhZmV9XFxgIG9mIGAgKyBgXFxgJHtjb21wb25lbnROYW1lU2FmZX1cXGAgaXMgZGVwcmVjYXRlZC4gJHtyZWFzb259YCk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9O1xufSIsImltcG9ydCBkZXByZWNhdGVkUHJvcFR5cGUgZnJvbSAnQG11aS91dGlscy9kZXByZWNhdGVkUHJvcFR5cGUnO1xuZXhwb3J0IGRlZmF1bHQgZGVwcmVjYXRlZFByb3BUeXBlOyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVxdWlyZVByb3BGYWN0b3J5KGNvbXBvbmVudE5hbWVJbkVycm9yLCBDb21wb25lbnQpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgICByZXR1cm4gKCkgPT4gbnVsbDtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mb3JiaWQtZm9yZWlnbi1wcm9wLXR5cGVzXG4gIGNvbnN0IHByZXZQcm9wVHlwZXMgPSBDb21wb25lbnQgPyBfZXh0ZW5kcyh7fSwgQ29tcG9uZW50LnByb3BUeXBlcykgOiBudWxsO1xuICBjb25zdCByZXF1aXJlUHJvcCA9IHJlcXVpcmVkUHJvcCA9PiAocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCAuLi5hcmdzKSA9PiB7XG4gICAgY29uc3QgcHJvcEZ1bGxOYW1lU2FmZSA9IHByb3BGdWxsTmFtZSB8fCBwcm9wTmFtZTtcbiAgICBjb25zdCBkZWZhdWx0VHlwZUNoZWNrZXIgPSBwcmV2UHJvcFR5cGVzID09IG51bGwgPyB2b2lkIDAgOiBwcmV2UHJvcFR5cGVzW3Byb3BGdWxsTmFtZVNhZmVdO1xuICAgIGlmIChkZWZhdWx0VHlwZUNoZWNrZXIpIHtcbiAgICAgIGNvbnN0IHR5cGVDaGVja2VyUmVzdWx0ID0gZGVmYXVsdFR5cGVDaGVja2VyKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgLi4uYXJncyk7XG4gICAgICBpZiAodHlwZUNoZWNrZXJSZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVDaGVja2VyUmVzdWx0O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodHlwZW9mIHByb3BzW3Byb3BOYW1lXSAhPT0gJ3VuZGVmaW5lZCcgJiYgIXByb3BzW3JlcXVpcmVkUHJvcF0pIHtcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoYFRoZSBwcm9wIFxcYCR7cHJvcEZ1bGxOYW1lU2FmZX1cXGAgb2YgYCArIGBcXGAke2NvbXBvbmVudE5hbWVJbkVycm9yfVxcYCBjYW4gb25seSBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggdGhlIFxcYCR7cmVxdWlyZWRQcm9wfVxcYCBwcm9wLmApO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcbiAgcmV0dXJuIHJlcXVpcmVQcm9wO1xufSIsImltcG9ydCByZXF1aXJlUHJvcEZhY3RvcnkgZnJvbSAnQG11aS91dGlscy9yZXF1aXJlUHJvcEZhY3RvcnknO1xuZXhwb3J0IGRlZmF1bHQgcmVxdWlyZVByb3BGYWN0b3J5OyIsImltcG9ydCBzZXRSZWYgZnJvbSAnQG11aS91dGlscy9zZXRSZWYnO1xuZXhwb3J0IGRlZmF1bHQgc2V0UmVmOyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVuc3VwcG9ydGVkUHJvcChwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBwcm9wRnVsbE5hbWVTYWZlID0gcHJvcEZ1bGxOYW1lIHx8IHByb3BOYW1lO1xuICBpZiAodHlwZW9mIHByb3BzW3Byb3BOYW1lXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gbmV3IEVycm9yKGBUaGUgcHJvcCBcXGAke3Byb3BGdWxsTmFtZVNhZmV9XFxgIGlzIG5vdCBzdXBwb3J0ZWQuIFBsZWFzZSByZW1vdmUgaXQuYCk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59IiwiaW1wb3J0IHVuc3VwcG9ydGVkUHJvcCBmcm9tICdAbXVpL3V0aWxzL3Vuc3VwcG9ydGVkUHJvcCc7XG5leHBvcnQgZGVmYXVsdCB1bnN1cHBvcnRlZFByb3A7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgeyB1bnN0YWJsZV9DbGFzc05hbWVHZW5lcmF0b3IgYXMgQ2xhc3NOYW1lR2VuZXJhdG9yIH0gZnJvbSAnQG11aS91dGlscyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNhcGl0YWxpemUgfSBmcm9tICcuL2NhcGl0YWxpemUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjcmVhdGVDaGFpbmVkRnVuY3Rpb24gfSBmcm9tICcuL2NyZWF0ZUNoYWluZWRGdW5jdGlvbic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNyZWF0ZVN2Z0ljb24gfSBmcm9tICcuL2NyZWF0ZVN2Z0ljb24nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBkZWJvdW5jZSB9IGZyb20gJy4vZGVib3VuY2UnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBkZXByZWNhdGVkUHJvcFR5cGUgfSBmcm9tICcuL2RlcHJlY2F0ZWRQcm9wVHlwZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGlzTXVpRWxlbWVudCB9IGZyb20gJy4vaXNNdWlFbGVtZW50JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgb3duZXJEb2N1bWVudCB9IGZyb20gJy4vb3duZXJEb2N1bWVudCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIG93bmVyV2luZG93IH0gZnJvbSAnLi9vd25lcldpbmRvdyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHJlcXVpcmVQcm9wRmFjdG9yeSB9IGZyb20gJy4vcmVxdWlyZVByb3BGYWN0b3J5JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc2V0UmVmIH0gZnJvbSAnLi9zZXRSZWYnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1bnN0YWJsZV91c2VFbmhhbmNlZEVmZmVjdCB9IGZyb20gJy4vdXNlRW5oYW5jZWRFZmZlY3QnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1bnN0YWJsZV91c2VJZCB9IGZyb20gJy4vdXNlSWQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1bnN1cHBvcnRlZFByb3AgfSBmcm9tICcuL3Vuc3VwcG9ydGVkUHJvcCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHVzZUNvbnRyb2xsZWQgfSBmcm9tICcuL3VzZUNvbnRyb2xsZWQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1c2VFdmVudENhbGxiYWNrIH0gZnJvbSAnLi91c2VFdmVudENhbGxiYWNrJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdXNlRm9ya1JlZiB9IGZyb20gJy4vdXNlRm9ya1JlZic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHVzZUlzRm9jdXNWaXNpYmxlIH0gZnJvbSAnLi91c2VJc0ZvY3VzVmlzaWJsZSc7XG4vLyBUT0RPOiByZW1vdmUgdGhpcyBleHBvcnQgb25jZSBDbGFzc05hbWVHZW5lcmF0b3IgaXMgc3RhYmxlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG5leHBvcnQgY29uc3QgdW5zdGFibGVfQ2xhc3NOYW1lR2VuZXJhdG9yID0ge1xuICBjb25maWd1cmU6IGdlbmVyYXRvciA9PiB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnNvbGUud2FybihbJ01VSTogYENsYXNzTmFtZUdlbmVyYXRvcmAgaW1wb3J0IGZyb20gYEBtdWkvbWF0ZXJpYWwvdXRpbHNgIGlzIG91dGRhdGVkIGFuZCBtaWdodCBjYXVzZSB1bmV4cGVjdGVkIGlzc3Vlcy4nLCAnJywgXCJZb3Ugc2hvdWxkIHVzZSBgaW1wb3J0IHsgdW5zdGFibGVfQ2xhc3NOYW1lR2VuZXJhdG9yIH0gZnJvbSAnQG11aS9tYXRlcmlhbC9jbGFzc05hbWUnYCBpbnN0ZWFkXCIsICcnLCAnVGhlIGRldGFpbCBvZiB0aGUgaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvaXNzdWVzLzMwMDExI2lzc3VlY29tbWVudC0xMDI0OTkzNDAxJywgJycsICdUaGUgdXBkYXRlZCBkb2N1bWVudGF0aW9uOiBodHRwczovL211aS5jb20vZ3VpZGVzL2NsYXNzbmFtZS1nZW5lcmF0b3IvJ10uam9pbignXFxuJykpO1xuICAgIH1cbiAgICBDbGFzc05hbWVHZW5lcmF0b3IuY29uZmlndXJlKGdlbmVyYXRvcik7XG4gIH1cbn07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8928\n")},8944:(n,c,l)=>{"use strict";l.r(c),l.d(c,{default:()=>e.A});var e=l(9453)},8989:(__unused_webpack_module,exports)=>{"use strict";eval('var __webpack_unused_export__;\n/**\n * @license React\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nvar b=Symbol.for("react.element"),c=Symbol.for("react.portal"),d=Symbol.for("react.fragment"),e=Symbol.for("react.strict_mode"),f=Symbol.for("react.profiler"),g=Symbol.for("react.provider"),h=Symbol.for("react.context"),k=Symbol.for("react.server_context"),l=Symbol.for("react.forward_ref"),m=Symbol.for("react.suspense"),n=Symbol.for("react.suspense_list"),p=Symbol.for("react.memo"),q=Symbol.for("react.lazy"),t=Symbol.for("react.offscreen"),u;u=Symbol.for("react.module.reference");\nfunction v(a){if("object"===typeof a&&null!==a){var r=a.$$typeof;switch(r){case b:switch(a=a.type,a){case d:case f:case e:case m:case n:return a;default:switch(a=a&&a.$$typeof,a){case k:case h:case l:case q:case p:case g:return a;default:return r}}case c:return r}}}__webpack_unused_export__=h;__webpack_unused_export__=g;__webpack_unused_export__=b;__webpack_unused_export__=l;__webpack_unused_export__=d;__webpack_unused_export__=q;__webpack_unused_export__=p;__webpack_unused_export__=c;__webpack_unused_export__=f;__webpack_unused_export__=e;__webpack_unused_export__=m;\n__webpack_unused_export__=n;__webpack_unused_export__=function(){return!1};__webpack_unused_export__=function(){return!1};__webpack_unused_export__=function(a){return v(a)===h};__webpack_unused_export__=function(a){return v(a)===g};__webpack_unused_export__=function(a){return"object"===typeof a&&null!==a&&a.$$typeof===b};__webpack_unused_export__=function(a){return v(a)===l};__webpack_unused_export__=function(a){return v(a)===d};__webpack_unused_export__=function(a){return v(a)===q};__webpack_unused_export__=function(a){return v(a)===p};\n__webpack_unused_export__=function(a){return v(a)===c};__webpack_unused_export__=function(a){return v(a)===f};__webpack_unused_export__=function(a){return v(a)===e};__webpack_unused_export__=function(a){return v(a)===m};__webpack_unused_export__=function(a){return v(a)===n};\n__webpack_unused_export__=function(a){return"string"===typeof a||"function"===typeof a||a===d||a===f||a===e||a===m||a===n||a===t||"object"===typeof a&&null!==a&&(a.$$typeof===q||a.$$typeof===p||a.$$typeof===g||a.$$typeof===h||a.$$typeof===l||a.$$typeof===u||void 0!==a.getModuleId)?!0:!1};__webpack_unused_export__=v;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODk4OS5qcyIsIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ2EsOGJBQThiO0FBQzNjLGNBQWMsa0NBQWtDLGlCQUFpQixVQUFVLDBCQUEwQiw0Q0FBNEMsa0NBQWtDLG1EQUFtRCxrQkFBa0Isa0JBQWtCLHlCQUF1QixHQUFHLHlCQUF1QixHQUFHLHlCQUFlLEdBQUcseUJBQWtCLEdBQUcseUJBQWdCLEdBQUcseUJBQVksR0FBRyx5QkFBWSxHQUFHLHlCQUFjLEdBQUcseUJBQWdCLEdBQUcseUJBQWtCLEdBQUcseUJBQWdCO0FBQy9kLHlCQUFvQixHQUFHLHlCQUFtQixZQUFZLFVBQVUseUJBQXdCLFlBQVksVUFBVSx5QkFBeUIsYUFBYSxpQkFBaUIseUJBQXlCLGFBQWEsaUJBQWlCLHlCQUFpQixhQUFhLHFEQUFxRCx5QkFBb0IsYUFBYSxpQkFBaUIseUJBQWtCLGFBQWEsaUJBQWlCLHlCQUFjLGFBQWEsaUJBQWlCLHlCQUFjLGFBQWE7QUFDeGQseUJBQWdCLGFBQWEsaUJBQWlCLHlCQUFrQixhQUFhLGlCQUFpQix5QkFBb0IsYUFBYSxpQkFBaUIseUJBQWtCLGFBQWEsaUJBQWlCLHlCQUFzQixhQUFhO0FBQ25PLHlCQUEwQixhQUFhLDJQQUEyUCx5QkFBYyIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L25vZGVfbW9kdWxlcy9yZWFjdC1pcy9janMvcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanM/MGQ0YyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiByZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG4ndXNlIHN0cmljdCc7dmFyIGI9U3ltYm9sLmZvcihcInJlYWN0LmVsZW1lbnRcIiksYz1TeW1ib2wuZm9yKFwicmVhY3QucG9ydGFsXCIpLGQ9U3ltYm9sLmZvcihcInJlYWN0LmZyYWdtZW50XCIpLGU9U3ltYm9sLmZvcihcInJlYWN0LnN0cmljdF9tb2RlXCIpLGY9U3ltYm9sLmZvcihcInJlYWN0LnByb2ZpbGVyXCIpLGc9U3ltYm9sLmZvcihcInJlYWN0LnByb3ZpZGVyXCIpLGg9U3ltYm9sLmZvcihcInJlYWN0LmNvbnRleHRcIiksaz1TeW1ib2wuZm9yKFwicmVhY3Quc2VydmVyX2NvbnRleHRcIiksbD1TeW1ib2wuZm9yKFwicmVhY3QuZm9yd2FyZF9yZWZcIiksbT1TeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VcIiksbj1TeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VfbGlzdFwiKSxwPVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vXCIpLHE9U3ltYm9sLmZvcihcInJlYWN0LmxhenlcIiksdD1TeW1ib2wuZm9yKFwicmVhY3Qub2Zmc2NyZWVuXCIpLHU7dT1TeW1ib2wuZm9yKFwicmVhY3QubW9kdWxlLnJlZmVyZW5jZVwiKTtcbmZ1bmN0aW9uIHYoYSl7aWYoXCJvYmplY3RcIj09PXR5cGVvZiBhJiZudWxsIT09YSl7dmFyIHI9YS4kJHR5cGVvZjtzd2l0Y2gocil7Y2FzZSBiOnN3aXRjaChhPWEudHlwZSxhKXtjYXNlIGQ6Y2FzZSBmOmNhc2UgZTpjYXNlIG06Y2FzZSBuOnJldHVybiBhO2RlZmF1bHQ6c3dpdGNoKGE9YSYmYS4kJHR5cGVvZixhKXtjYXNlIGs6Y2FzZSBoOmNhc2UgbDpjYXNlIHE6Y2FzZSBwOmNhc2UgZzpyZXR1cm4gYTtkZWZhdWx0OnJldHVybiByfX1jYXNlIGM6cmV0dXJuIHJ9fX1leHBvcnRzLkNvbnRleHRDb25zdW1lcj1oO2V4cG9ydHMuQ29udGV4dFByb3ZpZGVyPWc7ZXhwb3J0cy5FbGVtZW50PWI7ZXhwb3J0cy5Gb3J3YXJkUmVmPWw7ZXhwb3J0cy5GcmFnbWVudD1kO2V4cG9ydHMuTGF6eT1xO2V4cG9ydHMuTWVtbz1wO2V4cG9ydHMuUG9ydGFsPWM7ZXhwb3J0cy5Qcm9maWxlcj1mO2V4cG9ydHMuU3RyaWN0TW9kZT1lO2V4cG9ydHMuU3VzcGVuc2U9bTtcbmV4cG9ydHMuU3VzcGVuc2VMaXN0PW47ZXhwb3J0cy5pc0FzeW5jTW9kZT1mdW5jdGlvbigpe3JldHVybiExfTtleHBvcnRzLmlzQ29uY3VycmVudE1vZGU9ZnVuY3Rpb24oKXtyZXR1cm4hMX07ZXhwb3J0cy5pc0NvbnRleHRDb25zdW1lcj1mdW5jdGlvbihhKXtyZXR1cm4gdihhKT09PWh9O2V4cG9ydHMuaXNDb250ZXh0UHJvdmlkZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIHYoYSk9PT1nfTtleHBvcnRzLmlzRWxlbWVudD1mdW5jdGlvbihhKXtyZXR1cm5cIm9iamVjdFwiPT09dHlwZW9mIGEmJm51bGwhPT1hJiZhLiQkdHlwZW9mPT09Yn07ZXhwb3J0cy5pc0ZvcndhcmRSZWY9ZnVuY3Rpb24oYSl7cmV0dXJuIHYoYSk9PT1sfTtleHBvcnRzLmlzRnJhZ21lbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHYoYSk9PT1kfTtleHBvcnRzLmlzTGF6eT1mdW5jdGlvbihhKXtyZXR1cm4gdihhKT09PXF9O2V4cG9ydHMuaXNNZW1vPWZ1bmN0aW9uKGEpe3JldHVybiB2KGEpPT09cH07XG5leHBvcnRzLmlzUG9ydGFsPWZ1bmN0aW9uKGEpe3JldHVybiB2KGEpPT09Y307ZXhwb3J0cy5pc1Byb2ZpbGVyPWZ1bmN0aW9uKGEpe3JldHVybiB2KGEpPT09Zn07ZXhwb3J0cy5pc1N0cmljdE1vZGU9ZnVuY3Rpb24oYSl7cmV0dXJuIHYoYSk9PT1lfTtleHBvcnRzLmlzU3VzcGVuc2U9ZnVuY3Rpb24oYSl7cmV0dXJuIHYoYSk9PT1tfTtleHBvcnRzLmlzU3VzcGVuc2VMaXN0PWZ1bmN0aW9uKGEpe3JldHVybiB2KGEpPT09bn07XG5leHBvcnRzLmlzVmFsaWRFbGVtZW50VHlwZT1mdW5jdGlvbihhKXtyZXR1cm5cInN0cmluZ1wiPT09dHlwZW9mIGF8fFwiZnVuY3Rpb25cIj09PXR5cGVvZiBhfHxhPT09ZHx8YT09PWZ8fGE9PT1lfHxhPT09bXx8YT09PW58fGE9PT10fHxcIm9iamVjdFwiPT09dHlwZW9mIGEmJm51bGwhPT1hJiYoYS4kJHR5cGVvZj09PXF8fGEuJCR0eXBlb2Y9PT1wfHxhLiQkdHlwZW9mPT09Z3x8YS4kJHR5cGVvZj09PWh8fGEuJCR0eXBlb2Y9PT1sfHxhLiQkdHlwZW9mPT09dXx8dm9pZCAwIT09YS5nZXRNb2R1bGVJZCk/ITA6ITF9O2V4cG9ydHMudHlwZU9mPXY7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8989\n')},9071:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nconst defaultGenerator = componentName => componentName;\nconst createClassNameGenerator = () => {\n  let generate = defaultGenerator;\n  return {\n    configure(generator) {\n      generate = generator;\n    },\n    generate(componentName) {\n      return generate(componentName);\n    },\n    reset() {\n      generate = defaultGenerator;\n    }\n  };\n};\nconst ClassNameGenerator = createClassNameGenerator();\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ClassNameGenerator);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA3MS5qcyIsIm1hcHBpbmdzIjoiOzs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpRUFBZSxrQkFBa0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2VzbS9DbGFzc05hbWVHZW5lcmF0b3IvQ2xhc3NOYW1lR2VuZXJhdG9yLmpzPzNhOGEiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgZGVmYXVsdEdlbmVyYXRvciA9IGNvbXBvbmVudE5hbWUgPT4gY29tcG9uZW50TmFtZTtcbmNvbnN0IGNyZWF0ZUNsYXNzTmFtZUdlbmVyYXRvciA9ICgpID0+IHtcbiAgbGV0IGdlbmVyYXRlID0gZGVmYXVsdEdlbmVyYXRvcjtcbiAgcmV0dXJuIHtcbiAgICBjb25maWd1cmUoZ2VuZXJhdG9yKSB7XG4gICAgICBnZW5lcmF0ZSA9IGdlbmVyYXRvcjtcbiAgICB9LFxuICAgIGdlbmVyYXRlKGNvbXBvbmVudE5hbWUpIHtcbiAgICAgIHJldHVybiBnZW5lcmF0ZShjb21wb25lbnROYW1lKTtcbiAgICB9LFxuICAgIHJlc2V0KCkge1xuICAgICAgZ2VuZXJhdGUgPSBkZWZhdWx0R2VuZXJhdG9yO1xuICAgIH1cbiAgfTtcbn07XG5jb25zdCBDbGFzc05hbWVHZW5lcmF0b3IgPSBjcmVhdGVDbGFzc05hbWVHZW5lcmF0b3IoKTtcbmV4cG9ydCBkZWZhdWx0IENsYXNzTmFtZUdlbmVyYXRvcjsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9071\n")},9242:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nif (true) {\n  module.exports = __webpack_require__(2162);\n} else // removed by dead control flow\n{}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTI0Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixJQUFJLElBQXFDO0FBQ3pDLEVBQUUsMENBQTJGO0FBQzdGLEVBQUUsS0FBSztBQUFBLEVBRU4iLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS9zaGltL3dpdGgtc2VsZWN0b3IuanM/N2EzOSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vY2pzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlLXNoaW0vd2l0aC1zZWxlY3Rvci5wcm9kdWN0aW9uLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uL2Nqcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltL3dpdGgtc2VsZWN0b3IuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9242\n")},9267:(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__)=>{"use strict";eval("\n;// external \"wp.element\"\nconst external_wp_element_namespaceObject=wp.element;\n// EXTERNAL MODULE:./node_modules/use-sync-external-store/shim/index.js\nvar shim=__webpack_require__(9888);\n// EXTERNAL MODULE:./node_modules/use-sync-external-store/shim/with-selector.js\nvar with_selector=__webpack_require__(9242);\n;// external \"ReactDOM\"\nconst external_ReactDOM_namespaceObject=ReactDOM;\nvar external_ReactDOM_default=__webpack_require__.n(external_ReactDOM_namespaceObject);\n;// ./node_modules/react-redux/es/utils/reactBatchedUpdates.js\n\n;// ./node_modules/react-redux/es/utils/batch.js\n// Default to a dummy \"batch\" implementation that just runs the callback\nfunction defaultNoopBatch(callback){\n callback();\n}\n\nlet batch=defaultNoopBatch;// Allow injecting another batching function later\n\nconst setBatch=newBatch=>batch=newBatch;// Supply a getter just to skip dealing with ESM bindings\n\nconst getBatch=()=>batch;\n// EXTERNAL MODULE:external \"React\"\nvar external_React_=__webpack_require__(1594);\nvar external_React_default=__webpack_require__.n(external_React_);\n;// ./node_modules/react-redux/es/components/Context.js\n\nconst ContextKey=Symbol.for(`react-redux-context`);;\n\nfunction getContext(){\n var _gT$ContextKey;;\n const contextMap=(_gT$ContextKey=gT[ContextKey]) !=null ? _gT$ContextKey :gT[ContextKey]=new Map();\n let realContext=contextMap.get(external_React_.createContext);\n\n if (!realContext){\n realContext=external_React_.createContext(null);\n\n contextMap.set(external_React_.createContext,realContext);\n}\n\n return realContext;\n}\n\nconst Context_ReactReduxContext=getContext();\n const Context=((null && (Context_ReactReduxContext)));\n;// ./node_modules/react-redux/es/hooks/useReduxContext.js\n\n\n\n\nfunction createReduxContextHook(context=Context_ReactReduxContext){\n return function useReduxContext(){\n const contextValue=(0,external_React_.useContext)(context);\n\n return contextValue;\n};\n}\n\n\nconst useReduxContext_useReduxContext=createReduxContextHook();\n;// ./node_modules/react-redux/es/utils/useSyncExternalStore.js\nconst useSyncExternalStore_notInitialized=()=>{\n throw new Error('uSES not initialized!');\n};\n;// ./node_modules/react-redux/es/hooks/useSelector.js\n\n\n\n\nlet useSyncExternalStoreWithSelector=useSyncExternalStore_notInitialized;\nconst initializeUseSelector=fn=>{\n useSyncExternalStoreWithSelector=fn;\n};\n\nconst refEquality=(a,b)=>a===b;\n\n\n\nfunction createSelectorHook(context=Context_ReactReduxContext){\n const useReduxContext=context===Context_ReactReduxContext ? useReduxContext_useReduxContext :createReduxContextHook(context);){\n const{\n equalityFn=refEquality,\n stabilityCheck=undefined,\n noopCheck=undefined\n}=typeof equalityFnOrOptions==='function' ?{\n equalityFn:equalityFnOrOptions\n}:equalityFnOrOptions;\n\n const{\n store,\n subscription,\n getServerState,\n stabilityCheck:globalStabilityCheck,\n noopCheck:globalNoopCheck\n}=useReduxContext();\n const firstRun=(0,external_React_.useRef)(true);\n const wrappedSelector=(0,external_React_.useCallback)({\n [selector.name](state){\n const selected=selector(state);\n\n return selected;\n}\n\n}[selector.name],[selector,globalStabilityCheck,stabilityCheck]);\n const selectedState=useSyncExternalStoreWithSelector(subscription.addNestedSub,store.getState,getServerState || store.getState,wrappedSelector,equalityFn);\n (0,external_React_.useDebugValue)(selectedState);\n return selectedState;\n};\n}\n\n\nconst useSelector=createSelectorHook();\n// EXTERNAL MODULE:./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js\nvar hoist_non_react_statics_cjs=__webpack_require__(4146);\n// EXTERNAL MODULE:./node_modules/react-redux/node_modules/react-is/index.js\nvar react_is=__webpack_require__(4737);\n;// ./node_modules/react-redux/es/utils/Subscription.js\n // encapsulates the subscription logic for connecting a component to the redux store,as\n// well as nesting subscriptions of descendant components,so that we can ensure the\n// ancestor components re-render before descendants\n\nfunction createListenerCollection(){\n const batch=getBatch();\n let first=null;\n let last=null;\n return{\n clear(){\n first=null;\n last=null;\n},\n\n notify(){\n batch(()=>{\n let listener=first;\n\n while (listener){\n listener.callback();\n listener=listener.next;\n}\n});\n},\n\n get(){\n let listeners=[];\n let listener=first;\n\n while (listener){\n listeners.push(listener);\n listener=listener.next;\n}\n\n return listeners;\n},\n\n subscribe(callback){\n let isSubscribed=true;\n let listener=last={\n callback,\n next:null,\n prev:last\n};\n\n if (listener.prev){\n listener.prev.next=listener;\n}else{\n first=listener;\n}\n\n return function unsubscribe(){\n if (!isSubscribed || first===null) return;\n isSubscribed=false;\n\n if (listener.next){\n listener.next.prev=listener.prev;\n}else{\n last=listener.prev;\n}\n\n if (listener.prev){\n listener.prev.next=listener.next;\n}else{\n first=listener.next;\n}\n};\n}\n\n};\n}\n\nconst nullListeners={\n notify(){},\n\n get:()=>[]\n};\nfunction Subscription_createSubscription(store,parentSub){\n let unsubscribe;\n let listeners=nullListeners;// Reasons to keep the subscription active\n\n let subscriptionsAmount=0;// Is this specific subscription subscribed (or only nested ones?)\n\n let selfSubscribed=false;\n\n function addNestedSub(listener){\n trySubscribe();\n const cleanupListener=listeners.subscribe(listener);// cleanup nested sub\n\n let removed=false;\n return ()=>{\n if (!removed){\n removed=true;\n cleanupListener();\n tryUnsubscribe();\n}\n};\n}\n\n function notifyNestedSubs(){\n listeners.notify();\n}\n\n function handleChangeWrapper(){\n if (subscription.onStateChange){\n subscription.onStateChange();\n}\n}\n\n function isSubscribed(){\n return selfSubscribed;\n}\n\n function trySubscribe(){\n subscriptionsAmount++;\n\n if (!unsubscribe){\n unsubscribe=parentSub ? parentSub.addNestedSub(handleChangeWrapper):store.subscribe(handleChangeWrapper);\n listeners=createListenerCollection();\n}\n}\n\n function tryUnsubscribe(){\n subscriptionsAmount--;\n\n if (unsubscribe && subscriptionsAmount===0){\n unsubscribe();\n unsubscribe=undefined;\n listeners.clear();\n listeners=nullListeners;\n}\n}\n\n function trySubscribeSelf(){\n if (!selfSubscribed){\n selfSubscribed=true;\n trySubscribe();\n}\n}\n\n function tryUnsubscribeSelf(){\n if (selfSubscribed){\n selfSubscribed=false;\n tryUnsubscribe();\n}\n}\n\n const subscription={\n addNestedSub,\n notifyNestedSubs,\n handleChangeWrapper,\n isSubscribed,\n trySubscribe:trySubscribeSelf,\n tryUnsubscribe:tryUnsubscribeSelf,\n getListeners:()=>listeners\n};\n return subscription;\n}\n;// ./node_modules/react-redux/es/utils/useIsomorphicLayoutEffect.js\n // React currently throws a warning when using useLayoutEffect on the server.\n// To get around it,we can conditionally useEffect on the server (no-op) and\n// useLayoutEffect in the browser. We need useLayoutEffect to ensure the store\n// subscription callback always has the selector from the latest render commit\n// available,otherwise a store update may happen between render and the effect,\n// which may cause missed updates;we also must ensure the store subscription\n// is created synchronously,otherwise a store update may occur before the\n// subscription is created and an inconsistent state may be observed\n// Matches logic in React's `shared/ExecutionEnvironment` file\n\nconst canUseDOM=!!(typeof window !=='undefined' && typeof window.document !=='undefined' && typeof window.document.createElement !=='undefined');\nconst useIsomorphicLayoutEffect_useIsomorphicLayoutEffect=canUseDOM ? external_React_.useLayoutEffect :external_React_.useEffect;\n;// ./node_modules/react-redux/es/components/connect.js\n\n\nconst _excluded=(null && ([\"reactReduxForwardedRef\"]));\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nlet useSyncExternalStore=(null && (notInitialized));\nconst initializeConnect=fn=>{\n useSyncExternalStore=fn;\n};// Define some constant arrays just to avoid re-creating these\n\nconst EMPTY_ARRAY=(null && ([null,0]));\nconst NO_SUBSCRIPTION_ARRAY=(null && ([null,null]));// Attempts to stringify whatever not-really-a-component value we were given\n// for logging in an error message\n\nconst stringifyComponent=Comp=>{\n try{\n return JSON.stringify(Comp);\n}catch (err){\n return String(Comp);\n}\n};\n\n// This is \"just\" a `useLayoutEffect`,but with two modifications:\n// - we need to fall back to `useEffect` in SSR to avoid annoying warnings\n// - we extract this to a separate function to avoid closing over values\n// and causing memory leaks\nfunction useIsomorphicLayoutEffectWithArgs(effectFunc,effectArgs,dependencies){\n useIsomorphicLayoutEffect(()=>effectFunc(...effectArgs),dependencies);\n}// Effect callback,extracted:assign the latest props values to refs for later usage\n\n\nfunction captureWrapperProps(lastWrapperProps,lastChildProps,renderIsScheduled,wrapperProps,// actualChildProps:unknown,\nchildPropsFromStoreUpdate,notifyNestedSubs){\n // We want to capture the wrapper props and child props we used for later comparisons\n lastWrapperProps.current=wrapperProps;\n renderIsScheduled.current=false;// If the render was from a store update,clear out that reference and cascade the subscriber update\n\n if (childPropsFromStoreUpdate.current){\n childPropsFromStoreUpdate.current=null;\n notifyNestedSubs();\n}\n}// Effect callback,extracted:subscribe to the Redux store or nearest connected ancestor,\n// check for updates after dispatched actions,and trigger re-renders.\n\n\nfunction subscribeUpdates(shouldHandleStateChanges,store,subscription,childPropsSelector,lastWrapperProps,lastChildProps,renderIsScheduled,isMounted,childPropsFromStoreUpdate,notifyNestedSubs,// forceComponentUpdateDispatch:React.Dispatch<any>,\nadditionalSubscribeListener){\n // If we're not subscribed to the store,nothing to do here\n if (!shouldHandleStateChanges) return ()=>{};// Capture values for checking if and when this component unmounts\n\n let didUnsubscribe=false;\n let lastThrownError=null;// We'll run this callback every time a store subscription update propagates to this component\n\n const checkForUpdates=()=>{\n if (didUnsubscribe || !isMounted.current){\n // Don't run stale listeners.\n // Redux doesn't guarantee unsubscriptions happen until next dispatch.\n return;\n}// TODO We're currently calling getState ourselves here,rather than letting `uSES` do it\n\n\n const latestStoreState=store.getState();\n let newChildProps,error;\n\n try{\n // Actually run the selector with the most recent store state and wrapper props\n // to determine what the child props should be\n newChildProps=childPropsSelector(latestStoreState,lastWrapperProps.current);\n}catch (e){\n error=e;\n lastThrownError=e;\n}\n\n if (!error){\n lastThrownError=null;\n}// If the child props haven't changed,nothing to do here - cascade the subscription update\n\n\n if (newChildProps===lastChildProps.current){\n if (!renderIsScheduled.current){\n notifyNestedSubs();\n}\n}else{\n // Save references to the new child props. Note that we track the \"child props from store update\"\n // as a ref instead of a useState/useReducer because we need a way to determine if that value has\n // been processed. If this went into useState/useReducer,we couldn't clear out the value without\n // forcing another re-render,which we don't want.\n lastChildProps.current=newChildProps;\n childPropsFromStoreUpdate.current=newChildProps;\n renderIsScheduled.current=true;// TODO This is hacky and not how `uSES` is meant to be used\n // Trigger the React `useSyncExternalStore` subscriber\n\n additionalSubscribeListener();\n}\n};// Actually subscribe to the nearest connected ancestor (or store)\n\n\n subscription.onStateChange=checkForUpdates;\n subscription.trySubscribe();// Pull data from the store after first render in case the store has\n // changed since we began.\n\n checkForUpdates();\n\n const unsubscribeWrapper=()=>{\n didUnsubscribe=true;\n subscription.tryUnsubscribe();\n subscription.onStateChange=null;\n\n if (lastThrownError){\n // It's possible that we caught an error due to a bad mapState function,but the\n // parent re-rendered without this component and we're about to unmount.\n // This shouldn't happen as long as we do top-down subscriptions correctly,but\n // if we ever do those wrong,this throw will surface the error in our tests.\n // In that case,throw the error from here so it doesn't get lost.\n throw lastThrownError;\n}\n};\n\n return unsubscribeWrapper;\n}// Reducer initial state creation for our update reducer\n\n\nconst initStateUpdates=()=>EMPTY_ARRAY;\n\nfunction strictEqual(a,b){\n return a===b;\n}\n\n\n\nlet hasWarnedAboutDeprecatedPureOption=false;\n\n\nfunction connect(mapStateToProps,mapDispatchToProps,mergeProps,{\n // The `pure` option has been removed,so TS doesn't like us destructuring this to check its existence.\n // @ts-ignore\n pure,\n areStatesEqual=strictEqual,\n areOwnPropsEqual=shallowEqual,\n areStatePropsEqual=shallowEqual,\n areMergedPropsEqual=shallowEqual,\n // use React's forwardRef to expose a ref of the wrapped component\n forwardRef=false,\n // the context consumer to use\n context=ReactReduxContext\n}){\n if (false) // removed by dead control flow\n{}\n\n const Context=context;\n const initMapStateToProps=mapStateToPropsFactory(mapStateToProps);\n const initMapDispatchToProps=mapDispatchToPropsFactory(mapDispatchToProps);\n const initMergeProps=mergePropsFactory(mergeProps);\n const shouldHandleStateChanges=Boolean(mapStateToProps);\n\n const wrapWithConnect=WrappedComponent=>{\n if (false) // removed by dead control flow\n{}\n\n const wrappedComponentName=WrappedComponent.displayName || WrappedComponent.name || 'Component';\n const displayName=`Connect(${wrappedComponentName})`;\n const selectorFactoryOptions={\n shouldHandleStateChanges,\n displayName,\n wrappedComponentName,\n WrappedComponent,\n // @ts-ignore\n initMapStateToProps,\n // @ts-ignore\n initMapDispatchToProps,\n initMergeProps,\n areStatesEqual,\n areStatePropsEqual,\n areOwnPropsEqual,\n areMergedPropsEqual\n};\n\n function ConnectFunction(props){\n const [propsContext,reactReduxForwardedRef,wrapperProps]=React.useMemo(()=>{\n // Distinguish between actual \"data\" props that were passed to the wrapper component,\n // and values needed to control behavior (forwarded refs,alternate context instances).\n // To maintain the wrapperProps object reference,memoize this destructuring.\n const{\n reactReduxForwardedRef\n}=props,\n wrapperProps=_objectWithoutPropertiesLoose(props,_excluded);\n\n return [props.context,reactReduxForwardedRef,wrapperProps];\n},[props]);\n const ContextToUse=React.useMemo(()=>{\n // Users may optionally pass in a custom context instance to use instead of our ReactReduxContext.\n // Memoize the check that determines which context instance we should use.\n return propsContext && propsContext.Consumer && // @ts-ignore\n isContextConsumer(React.createElement(propsContext.Consumer,null)) ? propsContext:Context;\n},[propsContext,Context]);// Retrieve the store and ancestor subscription via context,if available\n\n const contextValue=React.useContext(ContextToUse);// The store _must_ exist as either a prop or in context.\n // We'll check to see if it _looks_ like a Redux store first.\n // This allows us to pass through a `store` prop that is just a plain value.\n\n const didStoreComeFromProps=Boolean(props.store) && Boolean(props.store.getState) && Boolean(props.store.dispatch);\n const didStoreComeFromContext=Boolean(contextValue) && Boolean(contextValue.store);// Based on the previous check,one of these must be true\n\n\n const store=didStoreComeFromProps ? props.store :contextValue.store;\n const getServerState=didStoreComeFromContext ? contextValue.getServerState :store.getState;\n const childPropsSelector=React.useMemo(()=>{\n // The child props selector needs the store reference as an input.\n // Re-create this selector whenever the store changes.\n return defaultSelectorFactory(store.dispatch,selectorFactoryOptions);\n},[store]);\n const [subscription,notifyNestedSubs]=React.useMemo(()=>{\n if (!shouldHandleStateChanges) return NO_SUBSCRIPTION_ARRAY;// This Subscription's source should match where store came from:props vs. context. A component\n // connected to the store via props shouldn't use subscription from context,or vice versa.\n\n const subscription=createSubscription(store,didStoreComeFromProps ? undefined:contextValue.subscription);// `notifyNestedSubs` is duplicated to handle the case where the component is unmounted in\n // the middle of the notification loop,where `subscription` will then be null. This can\n // probably be avoided if Subscription's listeners logic is changed to not call listeners\n // that have been unsubscribed in the middle of the notification loop.\n\n const notifyNestedSubs=subscription.notifyNestedSubs.bind(subscription);\n return [subscription,notifyNestedSubs];\n},[store,didStoreComeFromProps,contextValue]);// Determine what{store,subscription}value should be put into nested context,if necessary,\n // and memoize that value to avoid unnecessary context updates.\n\n const overriddenContextValue=React.useMemo(()=>{\n if (didStoreComeFromProps){\n // This component is directly subscribed to a store from props.\n // We don't want descendants reading from this store - pass down whatever\n // the existing context value is from the nearest connected ancestor.\n return contextValue;\n},contextValue,{\n subscription\n});\n},[didStoreComeFromProps,contextValue,subscription]);// Set up refs to coordinate values between the subscription effect and the render logic\n\n const lastChildProps=React.useRef();\n const lastWrapperProps=React.useRef(wrapperProps);\n const childPropsFromStoreUpdate=React.useRef();\n const renderIsScheduled=React.useRef(false);\n const isProcessingDispatch=React.useRef(false);\n const isMounted=React.useRef(false);\n const latestSubscriptionCallbackError=React.useRef();\n useIsomorphicLayoutEffect(()=>{\n isMounted.current=true;\n return ()=>{\n isMounted.current=false;\n};\n},[]);\n const actualChildPropsSelector=React.useMemo(()=>{\n const selector=()=>{\n // Tricky logic here:\n // - This render may have been triggered by a Redux store update that produced new child props\n // - However,we may have gotten new wrapper props after that\n // If we have new child props,and the same wrapper props,we know we should use the new child props as-is.\n // But,if we have new wrapper props,those might change the child props,so we have to recalculate things.\n // So,we'll use the child props from store update only if the wrapper props are the same as last time.\n if (childPropsFromStoreUpdate.current && wrapperProps===lastWrapperProps.current){\n return childPropsFromStoreUpdate.current;\n}// TODO We're reading the store directly in render() here. Bad idea?\n // This will likely cause Bad Things (TM) to happen in Concurrent Mode.\n // Note that we do this because on renders _not_ caused by store updates,we need the latest store state\n // to determine what the child props should be.\n\n\n return childPropsSelector(store.getState(),wrapperProps);\n};\n\n return selector;\n},[store,wrapperProps]);// We need this to execute synchronously every time we re-render. However,React warns\n // about useLayoutEffect in SSR,so we try to detect environment and fall back to\n // just useEffect instead to avoid the warning,since neither will run anyway.\n\n const subscribeForReact=React.useMemo(()=>{\n const subscribe=reactListener=>{\n if (!subscription){\n return ()=>{};\n}\n\n return subscribeUpdates(shouldHandleStateChanges,store,subscription,// @ts-ignore\n childPropsSelector,lastWrapperProps,lastChildProps,renderIsScheduled,isMounted,childPropsFromStoreUpdate,notifyNestedSubs,reactListener);\n};\n\n return subscribe;\n},[subscription]);\n useIsomorphicLayoutEffectWithArgs(captureWrapperProps,[lastWrapperProps,lastChildProps,renderIsScheduled,wrapperProps,childPropsFromStoreUpdate,notifyNestedSubs]);\n let actualChildProps;\n\n try{\n actualChildProps=useSyncExternalStore(// TODO We're passing through a big wrapper that does a bunch of extra side effects besides subscribing\n subscribeForReact,// TODO This is incredibly hacky. We've already processed the store update and calculated new child props,\n // TODO and we're just passing that through so it triggers a re-render for us rather than relying on `uSES`.\n actualChildPropsSelector,getServerState ? ()=>childPropsSelector(getServerState(),wrapperProps):actualChildPropsSelector);\n}catch (err){\n if (latestSubscriptionCallbackError.current){\n;\n err.message+=`\\nThe error may be correlated with this previous error:\\n${latestSubscriptionCallbackError.current.stack}\\n\\n`;\n}\n\n throw err;\n}\n\n useIsomorphicLayoutEffect(()=>{\n latestSubscriptionCallbackError.current=undefined;\n childPropsFromStoreUpdate.current=undefined;\n lastChildProps.current=actualChildProps;\n});// Now that all that's done,we can finally try to actually render the child component.\n // We memoize the elements for the rendered child component as an optimization.\n\n const renderedWrappedComponent=React.useMemo(()=>{\n return (\n \n // @ts-ignore\n React.createElement(WrappedComponent,_extends({},actualChildProps,{\n ref:reactReduxForwardedRef\n}))\n);\n},[reactReduxForwardedRef,WrappedComponent,actualChildProps]);// If React sees the exact same element reference as last time,it bails out of re-rendering\n // that child,same as if it was wrapped in React.memo() or returned false from shouldComponentUpdate.\n\n const renderedChild=React.useMemo(()=>{\n if (shouldHandleStateChanges){\n // If this component is subscribed to store updates,we need to pass its own\n // subscription instance down to our descendants. That means rendering the same\n // Context instance,and putting a different value into the context.\n return React.createElement(ContextToUse.Provider,{\n value:overriddenContextValue\n},renderedWrappedComponent);\n}\n\n return renderedWrappedComponent;\n},[ContextToUse,renderedWrappedComponent,overriddenContextValue]);\n return renderedChild;\n}\n\n const _Connect=React.memo(ConnectFunction);\n\n // Add a hacky cast to get the right output type\n const Connect=_Connect;\n Connect.WrappedComponent=WrappedComponent;\n Connect.displayName=ConnectFunction.displayName=displayName;\n\n if (forwardRef){\n const _forwarded=React.forwardRef(function forwardConnectRef(props,ref){\n // @ts-ignore\n return React.createElement(Connect,_extends({},props,{\n reactReduxForwardedRef:ref\n}));\n});\n\n const forwarded=_forwarded;\n forwarded.displayName=displayName;\n forwarded.WrappedComponent=WrappedComponent;\n return hoistStatics(forwarded,WrappedComponent);\n}\n\n return hoistStatics(Connect,WrappedComponent);\n};\n\n return wrapWithConnect;\n}\n\n const components_connect=((null && (connect)));\n;// ./node_modules/react-redux/es/components/Provider.js\n\n\n\n\n\nfunction Provider({\n store,\n context,\n children,\n serverState,\n stabilityCheck='once',\n noopCheck='once'\n}){\n const contextValue=external_React_.useMemo(()=>{\n const subscription=Subscription_createSubscription(store);\n return{\n store,\n subscription,\n getServerState:serverState ? ()=>serverState:undefined,\n stabilityCheck,\n noopCheck\n};\n},[store,serverState,stabilityCheck,noopCheck]);\n const previousState=external_React_.useMemo(()=>store.getState(),[store]);\n useIsomorphicLayoutEffect_useIsomorphicLayoutEffect(()=>{\n const{\n subscription\n}=contextValue;\n subscription.onStateChange=subscription.notifyNestedSubs;\n subscription.trySubscribe();\n\n if (previousState !==store.getState()){\n subscription.notifyNestedSubs();\n}\n\n return ()=>{\n subscription.tryUnsubscribe();\n subscription.onStateChange=undefined;\n};\n},[contextValue,previousState]);\n const Context=context || Context_ReactReduxContext;// @ts-ignore 'AnyAction' is assignable to the constraint of type 'A',but 'A' could be instantiated with a different subtype\n\n return external_React_.createElement(Context.Provider,{\n value:contextValue\n},children);\n}\n\n const components_Provider=(Provider);\n;// ./node_modules/react-redux/es/hooks/useStore.js\n\n\n\n\nfunction createStoreHook(context=Context_ReactReduxContext){\n const useReduxContext=// @ts-ignore\n context===Context_ReactReduxContext ? useReduxContext_useReduxContext :// @ts-ignore\n createReduxContextHook(context);\n return function useStore(){\n const{\n store\n}=useReduxContext();// @ts-ignore\n\n return store;\n};\n}\n\n\nconst useStore_useStore=createStoreHook();\n;// ./node_modules/react-redux/es/hooks/useDispatch.js\n\n\n\n\nfunction createDispatchHook(context=Context_ReactReduxContext){\n const useStore=// @ts-ignore\n context===Context_ReactReduxContext ? useStore_useStore :createStoreHook(context);\n return function useDispatch(){\n const store=useStore();// @ts-ignore\n\n return store.dispatch;\n};\n}\n\n\nconst useDispatch=createDispatchHook();\n;// ./node_modules/react-redux/es/exports.js\n\n\n\n\n\n\n\n\n\n;// ./node_modules/react-redux/es/index.js\n// The primary entry point assumes we're working with standard ReactDOM/RN,but\n// older versions that do not include `useSyncExternalStore` (React 16.9 - 17.x).\n// Because of that,the useSyncExternalStore compat shim is needed.\n\n\n\n\n\n\ninitializeUseSelector(with_selector.useSyncExternalStoreWithSelector);\ninitializeConnect(shim.useSyncExternalStore);// Enable batched updates in our subscriptions for use\n// with standard React renderers (ReactDOM,React Native)\n\nsetBatch(external_ReactDOM_namespaceObject.unstable_batchedUpdates);\n\n\n// EXTERNAL MODULE:./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\nvar objectWithoutPropertiesLoose=__webpack_require__(8587);\n// EXTERNAL MODULE:./node_modules/@babel/runtime/helpers/esm/extends.js\nvar esm_extends=__webpack_require__(8168);\n// EXTERNAL MODULE:./node_modules/clsx/dist/clsx.mjs\nvar clsx=__webpack_require__(4164);\n// EXTERNAL MODULE:./node_modules/@mui/utils/esm/composeClasses/composeClasses.js\nvar composeClasses=__webpack_require__(5659);\n// EXTERNAL MODULE:./node_modules/@mui/system/colorManipulator.js\nvar colorManipulator=__webpack_require__(771);\n// EXTERNAL MODULE:./node_modules/@mui/material/styles/styled.js\nvar styled=__webpack_require__(1848);\n;// ./node_modules/@mui/material/styles/getOverlayAlpha.js\n// Inspired by https://github.com/material-components/material-components-ios/blob/bca36107405594d5b7b16265a5b0ed698f85a5ee/components/Elevation/src/UIColor%2BMaterialElevation.m#L61\nconst getOverlayAlpha=elevation=>{\n let alphaValue;\n if (elevation < 1){\n alphaValue=5.11916 * elevation ** 2;\n}else{\n alphaValue=4.5 * Math.log(elevation+1)+2;\n}\n return (alphaValue / 100).toFixed(2);\n};\n const styles_getOverlayAlpha=(getOverlayAlpha);\n// EXTERNAL MODULE:./node_modules/@mui/material/DefaultPropsProvider/DefaultPropsProvider.js\nvar DefaultPropsProvider=__webpack_require__(5669);\n// EXTERNAL MODULE:./node_modules/@mui/utils/esm/generateUtilityClasses/generateUtilityClasses.js\nvar generateUtilityClasses=__webpack_require__(8413);\n// EXTERNAL MODULE:./node_modules/@mui/utils/esm/generateUtilityClass/generateUtilityClass.js\nvar generateUtilityClass_generateUtilityClass=__webpack_require__(1609);\n;// ./node_modules/@mui/material/Paper/paperClasses.js\n\n\nfunction getPaperUtilityClass(slot){\n return (0,generateUtilityClass_generateUtilityClass.Ay)('MuiPaper',slot);\n}\nconst paperClasses=(0,generateUtilityClasses.A)('MuiPaper',['root','rounded','outlined','elevation','elevation0','elevation1','elevation2','elevation3','elevation4','elevation5','elevation6','elevation7','elevation8','elevation9','elevation10','elevation11','elevation12','elevation13','elevation14','elevation15','elevation16','elevation17','elevation18','elevation19','elevation20','elevation21','elevation22','elevation23','elevation24']);\n const Paper_paperClasses=((null && (paperClasses)));\n// EXTERNAL MODULE:./node_modules/react/jsx-runtime.js\nvar jsx_runtime=__webpack_require__(4848);\n;// ./node_modules/@mui/material/Paper/Paper.js\n'use client';\n\n\n\nconst Paper_excluded=[\"className\",\"component\",\"elevation\",\"square\",\"variant\"];\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst useUtilityClasses=ownerState=>{\n const{\n square,\n elevation,\n variant,\n classes\n}=ownerState;\n const slots={\n root:['root',variant,!square && 'rounded',variant==='elevation' && `elevation${elevation}`]\n};\n return (0,composeClasses.A)(slots,getPaperUtilityClass,classes);\n};\nconst PaperRoot=(0,styled.Ay)('div',{\n name:'MuiPaper',\n slot:'Root',\n overridesResolver:(props,styles)=>{\n const{\n ownerState\n}=props;\n return [styles.root,styles[ownerState.variant],!ownerState.square && styles.rounded,ownerState.variant==='elevation' && styles[`elevation${ownerState.elevation}`]];\n}\n})(({\n theme,\n ownerState\n})=>{\n var _theme$vars$overlays;\n return (0,esm_extends.A)({\n backgroundColor:(theme.vars || theme).palette.background.paper,\n color:(theme.vars || theme).palette.text.primary,\n transition:theme.transitions.create('box-shadow')\n},!ownerState.square &&{\n borderRadius:theme.shape.borderRadius\n},ownerState.variant==='outlined' &&{\n border:`1px solid ${(theme.vars || theme).palette.divider}`\n},ownerState.variant==='elevation' && (0,esm_extends.A)({\n boxShadow:(theme.vars || theme).shadows[ownerState.elevation]\n},!theme.vars && theme.palette.mode==='dark' &&{\n backgroundImage:`linear-gradient(${(0,colorManipulator.X4)('#fff',styles_getOverlayAlpha(ownerState.elevation))},${(0,colorManipulator.X4)('#fff',styles_getOverlayAlpha(ownerState.elevation))})`\n},theme.vars &&{\n backgroundImage:(_theme$vars$overlays=theme.vars.overlays)==null ? void 0:_theme$vars$overlays[ownerState.elevation]\n}));\n});\nconst Paper=external_React_.forwardRef(function Paper(inProps,ref){\n const props=(0,DefaultPropsProvider.b)({\n props:inProps,\n name:'MuiPaper'\n});\n const{\n className,\n component='div',\n elevation=1,\n square=false,\n variant='elevation'\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,Paper_excluded);,props,{\n component,\n elevation,\n square,\n variant\n});\n const classes=useUtilityClasses(ownerState);\n return (0,jsx_runtime.jsx)(PaperRoot,(0,esm_extends.A)({\n as:component,\n ownerState:ownerState,\n className:(0,clsx.A)(classes.root,className),\n ref:ref\n},other));\n});\n false ? 0 :void 0;\n const Paper_Paper=(Paper);\n// EXTERNAL MODULE:./node_modules/@mui/styled-engine/index.js+4 modules\nvar styled_engine=__webpack_require__(2532);\n// EXTERNAL MODULE:./node_modules/@mui/system/esm/styleFunctionSx/styleFunctionSx.js\nvar styleFunctionSx=__webpack_require__(3571);\n// EXTERNAL MODULE:./node_modules/@mui/system/esm/styleFunctionSx/extendSxProp.js\nvar extendSxProp=__webpack_require__(9599);\n// EXTERNAL MODULE:./node_modules/@mui/system/esm/createTheme/createTheme.js+2 modules\nvar createTheme=__webpack_require__(8749);\n// EXTERNAL MODULE:./node_modules/@emotion/react/dist/emotion-element-f0de968e.browser.esm.js\nvar emotion_element_f0de968e_browser_esm=__webpack_require__(4684);\n;// ./node_modules/@mui/system/esm/useThemeWithoutDefault.js\n'use client';\n\n\n\nfunction isObjectEmpty(obj){\n return Object.keys(obj).length===0;\n}\nfunction useTheme(defaultTheme=null){\n const contextTheme=external_React_.useContext(emotion_element_f0de968e_browser_esm.T);\n return !contextTheme || isObjectEmpty(contextTheme) ? defaultTheme:contextTheme;\n}\n const useThemeWithoutDefault=(useTheme);\n;// ./node_modules/@mui/system/esm/useTheme.js\n'use client';\n\n\n\nconst systemDefaultTheme=(0,createTheme.A)();\nfunction useTheme_useTheme(defaultTheme=systemDefaultTheme){\n return useThemeWithoutDefault(defaultTheme);\n}\n const esm_useTheme=(useTheme_useTheme);\n;// ./node_modules/@mui/system/esm/createBox.js\n'use client';\n\n\n\nconst createBox_excluded=[\"className\",\"component\"];){\n const{\n themeId,\n defaultTheme,\n defaultClassName='MuiBox-root',\n generateClassName\n}=options;\n const BoxRoot=(0,styled_engine[\"default\"])('div',{\n shouldForwardProp:prop=>prop !=='theme' && prop !=='sx' && prop !=='as'\n})(styleFunctionSx.A);\n const Box=external_React_.forwardRef(function Box(inProps,ref){\n const theme=esm_useTheme(defaultTheme);\n const _extendSxProp=(0,extendSxProp.A)(inProps),\n{\n className,\n component='div'\n}=_extendSxProp,\n other=(0,objectWithoutPropertiesLoose.A)(_extendSxProp,createBox_excluded);\n return (0,jsx_runtime.jsx)(BoxRoot,(0,esm_extends.A)({\n as:component,\n ref:ref,\n className:(0,clsx.A)(className,generateClassName ? generateClassName(defaultClassName):defaultClassName),\n theme:themeId ? theme[themeId] || theme:theme\n},other));\n});\n return Box;\n}\n// EXTERNAL MODULE:./node_modules/@mui/utils/esm/ClassNameGenerator/ClassNameGenerator.js\nvar ClassNameGenerator=__webpack_require__(9071);\n// EXTERNAL MODULE:./node_modules/@mui/material/styles/createTheme.js+13 modules\nvar styles_createTheme=__webpack_require__(6544);\n// EXTERNAL MODULE:./node_modules/@mui/material/styles/identifier.js\nvar identifier=__webpack_require__(8312);\n;// ./node_modules/@mui/material/Box/boxClasses.js\n\nconst boxClasses=(0,generateUtilityClasses.A)('MuiBox',['root']);\n const Box_boxClasses=(boxClasses);\n;// ./node_modules/@mui/material/Box/Box.js\n'use client';\n\n\n\n\n\n\n\nconst defaultTheme=(0,styles_createTheme.A)();\nconst Box=createBox({\n themeId:identifier.A,\n defaultTheme,\n defaultClassName:Box_boxClasses.root,\n generateClassName:ClassNameGenerator.A.generate\n});\n false ? 0 :void 0;\n const Box_Box=(Box);\n// EXTERNAL MODULE:./node_modules/@mui/utils/esm/useId/useId.js\nvar useId=__webpack_require__(4661);\n// EXTERNAL MODULE:./node_modules/@mui/utils/esm/deepmerge/deepmerge.js\nvar deepmerge=__webpack_require__(1317);\n// EXTERNAL MODULE:./node_modules/@mui/utils/esm/formatMuiErrorMessage/formatMuiErrorMessage.js\nvar formatMuiErrorMessage=__webpack_require__(9453);\n;// ./node_modules/@mui/utils/esm/isHostComponent/isHostComponent.js\n\nfunction isHostComponent(element){\n return typeof element==='string';\n}\n const isHostComponent_isHostComponent=(isHostComponent);\n// EXTERNAL MODULE:./node_modules/@mui/utils/esm/useForkRef/useForkRef.js\nvar useForkRef=__webpack_require__(1523);\n// EXTERNAL MODULE:./node_modules/@mui/utils/esm/ownerWindow/ownerWindow.js\nvar ownerWindow=__webpack_require__(4877);\n// EXTERNAL MODULE:./node_modules/@mui/utils/esm/useEventCallback/useEventCallback.js\nvar useEventCallback=__webpack_require__(1547);\n// EXTERNAL MODULE:./node_modules/@mui/utils/esm/useEnhancedEffect/useEnhancedEffect.js\nvar useEnhancedEffect=__webpack_require__(1529);\n// EXTERNAL MODULE:./node_modules/@mui/utils/esm/debounce/debounce.js\nvar debounce=__webpack_require__(4705);\n;// ./node_modules/@mui/material/TextareaAutosize/TextareaAutosize.js\n'use client';\n\n\n\nconst TextareaAutosize_excluded=[\"onChange\",\"maxRows\",\"minRows\",\"style\",\"value\"];\n\n\n\n\n\nfunction getStyleValue(value){\n return parseInt(value,10) || 0;\n}\nconst styles={\n shadow:{\n // Visibility needed to hide the extra text area on iPads\n visibility:'hidden',\n // Remove from the content flow\n position:'absolute',\n // Ignore the scrollbar width\n overflow:'hidden',\n height:0,\n top:0,\n left:0,\n // Create a new layer,increase the isolation of the computed values\n transform:'translateZ(0)'\n}\n};\nfunction TextareaAutosize_isObjectEmpty(object){\n // eslint-disable-next-line\n for (const _ in object){\n return false;\n}\n return true;\n}\nfunction isEmpty(obj){\n return TextareaAutosize_isObjectEmpty(obj) || obj.outerHeightStyle===0 && !obj.overflowing;\n}\n\n\nconst TextareaAutosize=external_React_.forwardRef(function TextareaAutosize(props,forwardedRef){\n const{\n onChange,\n maxRows,\n minRows=1,\n style,\n value\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,TextareaAutosize_excluded);\n const{\n current:isControlled\n}=external_React_.useRef(value !=null);\n const textareaRef=external_React_.useRef(null);\n const handleRef=(0,useForkRef.A)(forwardedRef,textareaRef);\n const heightRef=external_React_.useRef(null);\n const hiddenTextareaRef=external_React_.useRef(null);\n const calculateTextareaStyles=external_React_.useCallback(()=>{\n const textarea=textareaRef.current;\n const hiddenTextarea=hiddenTextareaRef.current;\n if (!textarea || !hiddenTextarea){\n return undefined;\n}\n const containerWindow=(0,ownerWindow.A)(textarea);\n const computedStyle=containerWindow.getComputedStyle(textarea);\n\n // If input's width is shrunk and it's not visible,don't sync height.\n if (computedStyle.width==='0px'){\n return{\n outerHeightStyle:0,\n overflowing:false\n};\n}\n hiddenTextarea.style.width=computedStyle.width;\n hiddenTextarea.value=textarea.value || props.placeholder || 'x';\n if (hiddenTextarea.value.slice(-1)==='\\n'){\n // Certain fonts which overflow the line height will cause the textarea\n // to report a different scrollHeight depending on whether the last line\n // is empty. Make it non-empty to avoid this issue.\n hiddenTextarea.value+=' ';\n}\n const boxSizing=computedStyle.boxSizing;\n const padding=getStyleValue(computedStyle.paddingBottom)+getStyleValue(computedStyle.paddingTop);\n const border=getStyleValue(computedStyle.borderBottomWidth)+getStyleValue(computedStyle.borderTopWidth);\n\n // The height of the inner content\n const innerHeight=hiddenTextarea.scrollHeight;\n\n // Measure height of a textarea with a single row\n hiddenTextarea.value='x';\n const singleRowHeight=hiddenTextarea.scrollHeight;\n\n // The height of the outer content\n let outerHeight=innerHeight;\n if (minRows){\n outerHeight=Math.max(Number(minRows) * singleRowHeight, outerHeight);\n}\n if (maxRows){\n outerHeight=Math.min(Number(maxRows) * singleRowHeight, outerHeight);\n}\n outerHeight=Math.max(outerHeight, singleRowHeight);\n\n // Take the box sizing into account for applying this value as a style.\n const outerHeightStyle=outerHeight+(boxSizing==='border-box' ? padding+border :0);\n const overflowing=Math.abs(outerHeight - innerHeight) <=1;\n return{\n outerHeightStyle,\n overflowing\n};\n},[maxRows,minRows,props.placeholder]);\n const didHeightChange=(0,useEventCallback.A)(()=>{\n const textarea=textareaRef.current;\n const textareaStyles=calculateTextareaStyles();\n if (!textarea || !textareaStyles || isEmpty(textareaStyles)){\n return false;\n}\n const outerHeightStyle=textareaStyles.outerHeightStyle;\n return heightRef.current !=null && heightRef.current !==outerHeightStyle;\n});\n const syncHeight=external_React_.useCallback(()=>{\n const textarea=textareaRef.current;\n const textareaStyles=calculateTextareaStyles();\n if (!textarea || !textareaStyles || isEmpty(textareaStyles)){\n return;\n}\n const outerHeightStyle=textareaStyles.outerHeightStyle;\n if (heightRef.current !==outerHeightStyle){\n heightRef.current=outerHeightStyle;\n textarea.style.height=`${outerHeightStyle}px`;\n}\n textarea.style.overflow=textareaStyles.overflowing ? 'hidden':'';\n},[calculateTextareaStyles]);\n const frameRef=external_React_.useRef(-1);\n (0,useEnhancedEffect.A)(()=>{\n const debouncedHandleResize=(0,debounce.A)(syncHeight);\n const textarea=textareaRef==null ? void 0 :textareaRef.current;\n if (!textarea){\n return undefined;\n}\n const containerWindow=(0,ownerWindow.A)(textarea);\n containerWindow.addEventListener('resize',debouncedHandleResize);\n let resizeObserver;\n if (typeof ResizeObserver !=='undefined'){\n resizeObserver=new ResizeObserver(()=>{\n if (didHeightChange()){\n // avoid \"ResizeObserver loop completed with undelivered notifications\" error\n // by temporarily unobserving the textarea element while manipulating the height\n // and reobserving one frame later\n resizeObserver.unobserve(textarea);\n cancelAnimationFrame(frameRef.current);\n syncHeight();\n frameRef.current=requestAnimationFrame(()=>{\n resizeObserver.observe(textarea);\n});\n}\n});\n resizeObserver.observe(textarea);\n}\n return ()=>{\n debouncedHandleResize.clear();\n cancelAnimationFrame(frameRef.current);\n containerWindow.removeEventListener('resize',debouncedHandleResize);\n if (resizeObserver){\n resizeObserver.disconnect();\n}\n};\n},[calculateTextareaStyles,syncHeight,didHeightChange]);\n (0,useEnhancedEffect.A)(()=>{\n syncHeight();\n});\n const handleChange=event=>{\n if (!isControlled){\n syncHeight();\n}\n if (onChange){\n onChange(event);\n}\n};\n return (0,jsx_runtime.jsxs)(external_React_.Fragment,{\n children:[(0,jsx_runtime.jsx)(\"textarea\",(0,esm_extends.A)({\n value:value,\n onChange:handleChange,\n ref:handleRef\n // Apply the rows prop to get a \"correct\" first SSR paint\n,\n rows:minRows,\n style:style\n},other)),(0,jsx_runtime.jsx)(\"textarea\",{\n \"aria-hidden\":true,\n className:props.className,\n readOnly:true,\n ref:hiddenTextareaRef,\n tabIndex:-1,\n style:(0,esm_extends.A)({},styles.shadow,style,{\n paddingTop:0,\n paddingBottom:0\n})\n})]\n});\n});\n false ? 0 :void 0;\n const TextareaAutosize_TextareaAutosize=(TextareaAutosize);\n;// ./node_modules/@mui/material/FormControl/formControlState.js\nfunction formControlState({\n props,\n states,\n muiFormControl\n}){\n return states.reduce((acc,state)=>{\n acc[state]=props[state];\n if (muiFormControl){\n if (typeof props[state]==='undefined'){\n acc[state]=muiFormControl[state];\n}\n}\n return acc;\n});\n}\n;// ./node_modules/@mui/material/FormControl/FormControlContext.js\n\n\nconst FormControlContext=external_React_.createContext(undefined);\n const FormControl_FormControlContext=(FormControlContext);\n;// ./node_modules/@mui/material/FormControl/useFormControl.js\n'use client';\n\n\n\nfunction useFormControl(){\n return external_React_.useContext(FormControl_FormControlContext);\n}\n// EXTERNAL MODULE:./node_modules/@mui/material/utils/capitalize.js\nvar capitalize=__webpack_require__(8466);\n// EXTERNAL MODULE:./node_modules/@mui/material/utils/useForkRef.js\nvar utils_useForkRef=__webpack_require__(6852);\n// EXTERNAL MODULE:./node_modules/@mui/material/utils/useEnhancedEffect.js\nvar utils_useEnhancedEffect=__webpack_require__(2778);\n// EXTERNAL MODULE:./node_modules/@mui/styled-engine/GlobalStyles/GlobalStyles.js\nvar GlobalStyles=__webpack_require__(9940);\n;// ./node_modules/@mui/system/esm/GlobalStyles/GlobalStyles.js\n'use client';\n\n\n\n\n\n\nfunction GlobalStyles_GlobalStyles({\n styles,\n themeId,\n defaultTheme={}\n}){\n const upperTheme=esm_useTheme(defaultTheme);\n const globalStyles=typeof styles==='function' ? styles(themeId ? upperTheme[themeId] || upperTheme :upperTheme) :styles;\n return (0,jsx_runtime.jsx)(GlobalStyles.A,{\n styles:globalStyles\n});\n}\n false ? 0 :void 0;\n const esm_GlobalStyles_GlobalStyles=(GlobalStyles_GlobalStyles);\n// EXTERNAL MODULE:./node_modules/@mui/material/styles/defaultTheme.js\nvar styles_defaultTheme=__webpack_require__(2765);\n;// ./node_modules/@mui/material/GlobalStyles/GlobalStyles.js\n'use client';\n\n\n\n\n\n\n\n\nfunction GlobalStyles_GlobalStyles_GlobalStyles(props){\n return (0,jsx_runtime.jsx)(esm_GlobalStyles_GlobalStyles,(0,esm_extends.A)({},props,{\n defaultTheme:styles_defaultTheme.A,\n themeId:identifier.A\n}));\n}\n false ? 0 :void 0;\n const material_GlobalStyles_GlobalStyles=(GlobalStyles_GlobalStyles_GlobalStyles);\n;// ./node_modules/@mui/material/InputBase/utils.js\n// Supports determination of isControlled().\n// Controlled input accepts its current value as a prop.\n//\n// @see https://facebook.github.io/react/docs/forms.html#controlled-components\n// @param value\n// @returns{boolean}true if string (including '') or number (including zero)\nfunction hasValue(value){\n return value !=null && !(Array.isArray(value) && value.length===0);\n}\n\n// Determine if field is empty or filled.\n// Response determines if label is presented above field or as placeholder.\n//\n// @param obj\n// @param SSR\n// @returns{boolean}False when not present or empty string.\n// True when any number or string with length.\nfunction isFilled(obj,SSR=false){\n return obj && (hasValue(obj.value) && obj.value !=='' || SSR && hasValue(obj.defaultValue) && obj.defaultValue !=='');\n}\n\n// Determine if an Input is adorned on start.\n// It's corresponding to the left with LTR.\n//\n// @param obj\n// @returns{boolean}False when no adornments.\n// True when adorned at the start.\nfunction isAdornedStart(obj){\n return obj.startAdornment;\n}\n;// ./node_modules/@mui/material/InputBase/inputBaseClasses.js\n\n\nfunction getInputBaseUtilityClass(slot){\n return (0,generateUtilityClass_generateUtilityClass.Ay)('MuiInputBase',slot);\n}\nconst inputBaseClasses=(0,generateUtilityClasses.A)('MuiInputBase',['root','formControl','focused','disabled','adornedStart','adornedEnd','error','sizeSmall','multiline','colorSecondary','fullWidth','hiddenLabel','readOnly','input','inputSizeSmall','inputMultiline','inputTypeSearch','inputAdornedStart','inputAdornedEnd','inputHiddenLabel']);\n const InputBase_inputBaseClasses=(inputBaseClasses);\n;// ./node_modules/@mui/material/InputBase/InputBase.js\n'use client';\n\n\n\n\nconst InputBase_excluded=[\"aria-describedby\",\"autoComplete\",\"autoFocus\",\"className\",\"color\",\"components\",\"componentsProps\",\"defaultValue\",\"disabled\",\"disableInjectingGlobalStyles\",\"endAdornment\",\"error\",\"fullWidth\",\"id\",\"inputComponent\",\"inputProps\",\"inputRef\",\"margin\",\"maxRows\",\"minRows\",\"multiline\",\"name\",\"onBlur\",\"onChange\",\"onClick\",\"onFocus\",\"onKeyDown\",\"onKeyUp\",\"placeholder\",\"readOnly\",\"renderSuffix\",\"rows\",\"size\",\"slotProps\",\"slots\",\"startAdornment\",\"type\",\"value\"];\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst rootOverridesResolver=(props,styles)=>{\n const{\n ownerState\n}=props;\n return [styles.root,ownerState.formControl && styles.formControl,ownerState.startAdornment && styles.adornedStart,ownerState.endAdornment && styles.adornedEnd,ownerState.error && styles.error,ownerState.size==='small' && styles.sizeSmall,ownerState.multiline && styles.multiline,ownerState.color && styles[`color${(0,capitalize.A)(ownerState.color)}`],ownerState.fullWidth && styles.fullWidth,ownerState.hiddenLabel && styles.hiddenLabel];\n};\nconst inputOverridesResolver=(props,styles)=>{\n const{\n ownerState\n}=props;\n return [styles.input,ownerState.size==='small' && styles.inputSizeSmall,ownerState.multiline && styles.inputMultiline,ownerState.type==='search' && styles.inputTypeSearch,ownerState.startAdornment && styles.inputAdornedStart,ownerState.endAdornment && styles.inputAdornedEnd,ownerState.hiddenLabel && styles.inputHiddenLabel];\n};\nconst InputBase_useUtilityClasses=ownerState=>{\n const{\n classes,\n color,\n disabled,\n error,\n endAdornment,\n focused,\n formControl,\n fullWidth,\n hiddenLabel,\n multiline,\n readOnly,\n size,\n startAdornment,\n type\n}=ownerState;\n const slots={\n root:['root',`color${(0,capitalize.A)(color)}`,disabled && 'disabled',error && 'error',fullWidth && 'fullWidth',focused && 'focused',formControl && 'formControl',size && size !=='medium' && `size${(0,capitalize.A)(size)}`,multiline && 'multiline',startAdornment && 'adornedStart',endAdornment && 'adornedEnd',hiddenLabel && 'hiddenLabel',readOnly && 'readOnly'],\n input:['input',disabled && 'disabled',type==='search' && 'inputTypeSearch',multiline && 'inputMultiline',size==='small' && 'inputSizeSmall',hiddenLabel && 'inputHiddenLabel',startAdornment && 'inputAdornedStart',endAdornment && 'inputAdornedEnd',readOnly && 'readOnly']\n};\n return (0,composeClasses.A)(slots,getInputBaseUtilityClass,classes);\n};\nconst InputBaseRoot=(0,styled.Ay)('div',{\n name:'MuiInputBase',\n slot:'Root',\n overridesResolver:rootOverridesResolver\n})(({\n theme,\n ownerState\n},theme.typography.body1,{\n color:(theme.vars || theme).palette.text.primary,\n lineHeight:'1.4375em',\n // 23px\n boxSizing:'border-box',\n // Prevent padding issue with fullWidth.\n position:'relative',\n cursor:'text',\n display:'inline-flex',\n alignItems:'center',\n [`&.${InputBase_inputBaseClasses.disabled}`]:{\n color:(theme.vars || theme).palette.text.disabled,\n cursor:'default'\n}\n},ownerState.multiline && (0,esm_extends.A)({\n padding:'4px 0 5px'\n},ownerState.size==='small' &&{\n paddingTop:1\n}),ownerState.fullWidth &&{\n width:'100%'\n}));\nconst InputBaseComponent=(0,styled.Ay)('input',{\n name:'MuiInputBase',\n slot:'Input',\n overridesResolver:inputOverridesResolver\n})(({\n theme,\n ownerState\n})=>{\n const light=theme.palette.mode==='light';\n const placeholder=(0,esm_extends.A)({\n color:'currentColor'\n},theme.vars ?{\n opacity:theme.vars.opacity.inputPlaceholder\n}:{\n opacity:light ? 0.42:0.5\n},{\n transition:theme.transitions.create('opacity',{\n duration:theme.transitions.duration.shorter\n})\n});\n const placeholderHidden={\n opacity:'0!important'\n};\n const placeholderVisible=theme.vars ?{\n opacity:theme.vars.opacity.inputPlaceholder\n}:{\n opacity:light ? 0.42:0.5\n};\n return (0,esm_extends.A)({\n font:'inherit',\n letterSpacing:'inherit',\n color:'currentColor',\n padding:'4px 0 5px',\n border:0,\n boxSizing:'content-box',\n background:'none',\n height:'1.4375em',\n // Reset 23pxthe native input line-height\n margin:0,\n // Reset for Safari\n WebkitTapHighlightColor:'transparent',\n display:'block',\n // Make the flex item shrink with Firefox\n minWidth:0,\n width:'100%',\n // Fix IE11 width issue\n animationName:'mui-auto-fill-cancel',\n animationDuration:'10ms',\n '&::-webkit-input-placeholder':placeholder,\n '&::-moz-placeholder':placeholder,\n // Firefox 19+\n '&:-ms-input-placeholder':placeholder,\n // IE11\n '&::-ms-input-placeholder':placeholder,\n // Edge\n '&:focus':{\n outline:0\n},\n // Reset Firefox invalid required input style\n '&:invalid':{\n boxShadow:'none'\n},\n '&::-webkit-search-decoration':{\n // Remove the padding when type=search.\n WebkitAppearance:'none'\n},\n // Show and hide the placeholder logic\n [`label[data-shrink=false]+.${InputBase_inputBaseClasses.formControl}&`]:{\n '&::-webkit-input-placeholder':placeholderHidden,\n '&::-moz-placeholder':placeholderHidden,\n // Firefox 19+\n '&:-ms-input-placeholder':placeholderHidden,\n // IE11\n '&::-ms-input-placeholder':placeholderHidden,\n // Edge\n '&:focus::-webkit-input-placeholder':placeholderVisible,\n '&:focus::-moz-placeholder':placeholderVisible,\n // Firefox 19+\n '&:focus:-ms-input-placeholder':placeholderVisible,\n // IE11\n '&:focus::-ms-input-placeholder':placeholderVisible // Edge\n},\n [`&.${InputBase_inputBaseClasses.disabled}`]:{\n opacity:1,\n // Reset iOS opacity\n WebkitTextFillColor:(theme.vars || theme).palette.text.disabled // Fix opacity Safari bug\n},\n '&:-webkit-autofill':{\n animationDuration:'5000s',\n animationName:'mui-auto-fill'\n}\n},ownerState.size==='small' &&{\n paddingTop:1\n},ownerState.multiline &&{\n height:'auto',\n resize:'none',\n padding:0,\n paddingTop:0\n},ownerState.type==='search' &&{\n // Improve type search style.\n MozAppearance:'textfield'\n});\n});\nconst inputGlobalStyles=(0,jsx_runtime.jsx)(material_GlobalStyles_GlobalStyles,{\n styles:{\n '@keyframes mui-auto-fill':{\n from:{\n display:'block'\n}\n},\n '@keyframes mui-auto-fill-cancel':{\n from:{\n display:'block'\n}\n}\n}\n});\n\n\nconst InputBase=external_React_.forwardRef(function InputBase(inProps,ref){\n var _slotProps$input;\n const props=(0,DefaultPropsProvider.b)({\n props:inProps,\n name:'MuiInputBase'\n});\n const{\n 'aria-describedby':ariaDescribedby,\n autoComplete,\n autoFocus,\n className,\n components={},\n startAdornment,\n type='text',\n value:valueProp\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,InputBase_excluded);\n const value=inputPropsProp.value !=null ? inputPropsProp.value :valueProp;\n const{\n current:isControlled\n}=external_React_.useRef(value !=null);\n const inputRef=external_React_.useRef();\n const handleInputRefWarning=external_React_.useCallback(instance=>{\n if (false) // removed by dead control flow\n{}\n},[]);\n const handleInputRef=(0,utils_useForkRef.A)(inputRef,inputRefProp,inputPropsProp.ref,handleInputRefWarning);\n const [focused,setFocused]=external_React_.useState(false);\n const muiFormControl=useFormControl();\n const fcs=formControlState({\n props,\n muiFormControl,\n states:['color','disabled','error','hiddenLabel','size','required','filled']\n});\n fcs.focused=muiFormControl ? muiFormControl.focused :focused;\n\n // The blur won't fire when the disabled state is set on a focused input.\n // We need to book keep the focused state manually.\n external_React_.useEffect(()=>{\n if (!muiFormControl && disabled && focused){\n setFocused(false);\n if (onBlur){\n onBlur();\n}\n}\n},[muiFormControl,disabled,focused,onBlur]);\n const onFilled=muiFormControl && muiFormControl.onFilled;\n const onEmpty=muiFormControl && muiFormControl.onEmpty;\n const checkDirty=external_React_.useCallback(obj=>{\n if (isFilled(obj)){\n if (onFilled){\n onFilled();\n}\n}else if (onEmpty){\n onEmpty();\n}\n},[onFilled,onEmpty]);\n (0,utils_useEnhancedEffect.A)(()=>{\n if (isControlled){\n checkDirty({\n value\n});\n}\n},[value,checkDirty,isControlled]);\n const handleFocus=event=>{\n // Fix a bug with IE11 where the focus/blur events are triggered\n // while the component is disabled.\n if (fcs.disabled){\n event.stopPropagation();\n return;\n}\n if (onFocus){\n onFocus(event);\n}\n if (inputPropsProp.onFocus){\n inputPropsProp.onFocus(event);\n}\n if (muiFormControl && muiFormControl.onFocus){\n muiFormControl.onFocus(event);\n}else{\n setFocused(true);\n}\n};\n const handleBlur=event=>{\n if (onBlur){\n onBlur(event);\n}\n if (inputPropsProp.onBlur){\n inputPropsProp.onBlur(event);\n}\n if (muiFormControl && muiFormControl.onBlur){\n muiFormControl.onBlur(event);\n}else{\n setFocused(false);\n}\n};\n const handleChange=(event,...args)=>{\n if (!isControlled){\n const element=event.target || inputRef.current;\n if (element==null){\n throw new Error(false ? 0:(0,formatMuiErrorMessage.A)(1));\n}\n checkDirty({\n value:element.value\n});\n}\n if (inputPropsProp.onChange){\n inputPropsProp.onChange(event,...args);\n}\n\n // Perform in the willUpdate\n if (onChange){\n onChange(event,...args);\n}\n};\n\n // Check the input state on mount,in case it was filled by the user\n // or auto filled by the browser before the hydration (for SSR).\n external_React_.useEffect(()=>{\n checkDirty(inputRef.current);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n},[]);\n const handleClick=event=>{\n if (inputRef.current && event.currentTarget===event.target){\n inputRef.current.focus();\n}\n if (onClick){\n onClick(event);\n}\n};\n let InputComponent=inputComponent;\n let inputProps=inputPropsProp;\n if (multiline && InputComponent==='input'){\n if (rows){\n if (false) // removed by dead control flow\n{}\n inputProps=(0,esm_extends.A)({\n type:undefined,\n minRows:rows,\n maxRows:rows\n},inputProps);\n}else{\n inputProps=(0,esm_extends.A)({\n type:undefined,\n maxRows,\n minRows\n},inputProps);\n}\n InputComponent=TextareaAutosize_TextareaAutosize;\n}\n const handleAutoFill=event=>{\n // Provide a fake value as Chrome might not let you access it for security reasons.\n checkDirty(event.animationName==='mui-auto-fill-cancel' ? inputRef.current :{\n value:'x'\n});\n};\n external_React_.useEffect(()=>{\n if (muiFormControl){\n muiFormControl.setAdornedStart(Boolean(startAdornment));\n}\n},[muiFormControl,startAdornment]);,props,{\n color:fcs.color || 'primary',\n disabled:fcs.disabled,\n endAdornment,\n error:fcs.error,\n focused:fcs.focused,\n formControl:muiFormControl,\n fullWidth,\n hiddenLabel:fcs.hiddenLabel,\n multiline,\n size:fcs.size,\n startAdornment,\n type\n});\n const classes=InputBase_useUtilityClasses(ownerState);\n const Root=slots.root || components.Root || InputBaseRoot;;\n const Input=slots.input || components.Input || InputBaseComponent;,inputProps,(_slotProps$input=slotProps.input) !=null ? _slotProps$input :componentsProps.input);\n return (0,jsx_runtime.jsxs)(external_React_.Fragment,{\n children:[!disableInjectingGlobalStyles && inputGlobalStyles,(0,jsx_runtime.jsxs)(Root,(0,esm_extends.A)({},rootProps,!isHostComponent_isHostComponent(Root) &&{\n ownerState:(0,esm_extends.A)({},ownerState,rootProps.ownerState)\n},{\n ref:ref,\n onClick:handleClick\n},other,{\n className:(0,clsx.A)(classes.root,rootProps.className,className,readOnly && 'MuiInputBase-readOnly'),\n children:[startAdornment,(0,jsx_runtime.jsx)(FormControl_FormControlContext.Provider,{\n value:null,\n children:(0,jsx_runtime.jsx)(Input,(0,esm_extends.A)({\n ownerState:ownerState,\n \"aria-invalid\":fcs.error,\n \"aria-describedby\":ariaDescribedby,\n autoComplete:autoComplete,\n autoFocus:autoFocus,\n defaultValue:defaultValue,\n disabled:fcs.disabled,\n id:id,\n onAnimationStart:handleAutoFill,\n name:name,\n placeholder:placeholder,\n readOnly:readOnly,\n required:fcs.required,\n rows:rows,\n value:value,\n onKeyDown:onKeyDown,\n onKeyUp:onKeyUp,\n type:type\n},inputProps,!isHostComponent_isHostComponent(Input) &&{\n as:InputComponent,\n ownerState:(0,esm_extends.A)({},ownerState,inputProps.ownerState)\n},{\n ref:handleInputRef,\n className:(0,clsx.A)(classes.input,inputProps.className,readOnly && 'MuiInputBase-readOnly'),\n onBlur:handleBlur,\n onChange:handleChange,\n onFocus:handleFocus\n}))\n},fcs,{\n startAdornment\n})):null]\n}))]\n});\n});\n false ? 0 :void 0;\n const InputBase_InputBase=(InputBase);\n// EXTERNAL MODULE:./node_modules/@mui/material/styles/rootShouldForwardProp.js\nvar rootShouldForwardProp=__webpack_require__(9770);\n;// ./node_modules/@mui/material/Input/inputClasses.js\n\n\n\n\nfunction getInputUtilityClass(slot){\n return (0,generateUtilityClass_generateUtilityClass.Ay)('MuiInput',slot);\n},InputBase_inputBaseClasses,(0,generateUtilityClasses.A)('MuiInput',['root','underline','input']));\n const Input_inputClasses=(inputClasses);\n;// ./node_modules/@mui/material/Input/Input.js\n'use client';\n\n\n\nconst Input_excluded=[\"disableUnderline\",\"components\",\"componentsProps\",\"fullWidth\",\"inputComponent\",\"multiline\",\"slotProps\",\"slots\",\"type\"];\n\n\n\n\n\n\n\n\n\n\n\nconst Input_useUtilityClasses=ownerState=>{\n const{\n classes,\n disableUnderline\n}=ownerState;\n const slots={\n root:['root',!disableUnderline && 'underline'],\n input:['input']\n};\n const composedClasses=(0,composeClasses.A)(slots,getInputUtilityClass,classes);,classes,composedClasses);\n};\nconst InputRoot=(0,styled.Ay)(InputBaseRoot,{\n shouldForwardProp:prop=>(0,rootShouldForwardProp.A)(prop) || prop==='classes',\n name:'MuiInput',\n slot:'Root',\n overridesResolver:(props,styles)=>{\n const{\n ownerState\n}=props;\n return [...rootOverridesResolver(props,styles),!ownerState.disableUnderline && styles.underline];\n}\n})(({\n theme,\n ownerState\n})=>{\n const light=theme.palette.mode==='light';\n let bottomLineColor=light ? 'rgba(0,0,0,.42)' :'rgba(255,255,255,.7)';\n if (theme.vars){\n bottomLineColor=`rgba(${theme.vars.palette.common.onBackgroundChannel}/ ${theme.vars.opacity.inputUnderline})`;\n}\n return (0,esm_extends.A)({\n position:'relative'\n},ownerState.formControl &&{\n 'label+&':{\n marginTop:16\n}\n},!ownerState.disableUnderline &&{\n '&::after':{\n borderBottom:`2px solid ${(theme.vars || theme).palette[ownerState.color].main}`,\n left:0,\n bottom:0,\n // Doing the other way around crash on IE11 \"''\" https://github.com/cssinjs/jss/issues/242\n content:'\"\"',\n position:'absolute',\n right:0,\n transform:'scaleX(0)',\n transition:theme.transitions.create('transform',{\n duration:theme.transitions.duration.shorter,\n easing:theme.transitions.easing.easeOut\n}),\n pointerEvents:'none' // Transparent to the hover style.\n},\n [`&.${Input_inputClasses.focused}:after`]:{\n // translateX(0) is a workaround for Safari transform scale bug\n // See https://github.com/mui/material-ui/issues/31766\n transform:'scaleX(1) translateX(0)'\n},\n [`&.${Input_inputClasses.error}`]:{\n '&::before,&::after':{\n borderBottomColor:(theme.vars || theme).palette.error.main\n}\n},\n '&::before':{\n borderBottom:`1px solid ${bottomLineColor}`,\n left:0,\n bottom:0,\n // Doing the other way around crash on IE11 \"''\" https://github.com/cssinjs/jss/issues/242\n content:'\"\\\\00a0\"',\n position:'absolute',\n right:0,\n transition:theme.transitions.create('border-bottom-color',{\n duration:theme.transitions.duration.shorter\n}),\n pointerEvents:'none' // Transparent to the hover style.\n},\n [`&:hover:not(.${Input_inputClasses.disabled},.${Input_inputClasses.error}):before`]:{\n borderBottom:`2px solid ${(theme.vars || theme).palette.text.primary}`,\n // Reset on touch devices,it doesn't add specificity\n '@media (hover:none)':{\n borderBottom:`1px solid ${bottomLineColor}`\n}\n},\n [`&.${Input_inputClasses.disabled}:before`]:{\n borderBottomStyle:'dotted'\n}\n});\n});\nconst InputInput=(0,styled.Ay)(InputBaseComponent,{\n name:'MuiInput',\n slot:'Input',\n overridesResolver:inputOverridesResolver\n});\nconst Input=external_React_.forwardRef(function Input(inProps,ref){\n var _ref,_slots$root,_ref2,_slots$input;\n const props=(0,DefaultPropsProvider.b)({\n props:inProps,\n name:'MuiInput'\n});\n const{\n disableUnderline,\n components={},\n type='text'\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,Input_excluded);\n const classes=Input_useUtilityClasses(props);\n const ownerState={\n disableUnderline\n};\n const inputComponentsProps={\n root:{\n ownerState\n}\n};\n const componentsProps=(slotProps !=null ? slotProps :componentsPropsProp) ? (0,deepmerge.A)(slotProps !=null ? slotProps :componentsPropsProp,inputComponentsProps) :inputComponentsProps;\n const RootSlot=(_ref=(_slots$root=slots.root) !=null ? _slots$root :components.Root) !=null ? _ref :InputRoot;\n const InputSlot=(_ref2=(_slots$input=slots.input) !=null ? _slots$input :components.Input) !=null ? _ref2 :InputInput;\n return (0,jsx_runtime.jsx)(InputBase_InputBase,(0,esm_extends.A)({\n slots:{\n root:RootSlot,\n input:InputSlot\n},\n slotProps:componentsProps,\n fullWidth:fullWidth,\n inputComponent:inputComponent,\n multiline:multiline,\n ref:ref,\n type:type\n},other,{\n classes:classes\n}));\n});\n false ? 0 :void 0;\nInput.muiName='Input';\n const Input_Input=(Input);\n;// ./node_modules/@mui/material/FilledInput/filledInputClasses.js\n\n\n\n\nfunction getFilledInputUtilityClass(slot){\n return (0,generateUtilityClass_generateUtilityClass.Ay)('MuiFilledInput',slot);\n},InputBase_inputBaseClasses,(0,generateUtilityClasses.A)('MuiFilledInput',['root','underline','input']));\n const FilledInput_filledInputClasses=(filledInputClasses);\n;// ./node_modules/@mui/material/FilledInput/FilledInput.js\n'use client';\n\n\n\nconst FilledInput_excluded=[\"disableUnderline\",\"components\",\"componentsProps\",\"fullWidth\",\"hiddenLabel\",\"inputComponent\",\"multiline\",\"slotProps\",\"slots\",\"type\"];\n\n\n\n\n\n\n\n\n\n\n\nconst FilledInput_useUtilityClasses=ownerState=>{\n const{\n classes,\n disableUnderline\n}=ownerState;\n const slots={\n root:['root',!disableUnderline && 'underline'],\n input:['input']\n};\n const composedClasses=(0,composeClasses.A)(slots,getFilledInputUtilityClass,classes);,classes,composedClasses);\n};\nconst FilledInputRoot=(0,styled.Ay)(InputBaseRoot,{\n shouldForwardProp:prop=>(0,rootShouldForwardProp.A)(prop) || prop==='classes',\n name:'MuiFilledInput',\n slot:'Root',\n overridesResolver:(props,styles)=>{\n const{\n ownerState\n}=props;\n return [...rootOverridesResolver(props,styles),!ownerState.disableUnderline && styles.underline];\n}\n})(({\n theme,\n ownerState\n})=>{\n var _palette;\n const light=theme.palette.mode==='light';\n const bottomLineColor=light ? 'rgba(0,0,0,.42)' :'rgba(255,255,255,.7)';\n const backgroundColor=light ? 'rgba(0,0,0,.06)' :'rgba(255,255,255,.09)';\n const hoverBackground=light ? 'rgba(0,0,0,.09)' :'rgba(255,255,255,.13)';\n const disabledBackground=light ? 'rgba(0,0,0,.12)' :'rgba(255,255,255,.12)';\n return (0,esm_extends.A)({\n position:'relative',\n backgroundColor:theme.vars ? theme.vars.palette.FilledInput.bg :backgroundColor,\n borderTopLeftRadius:(theme.vars || theme).shape.borderRadius,\n borderTopRightRadius:(theme.vars || theme).shape.borderRadius,\n transition:theme.transitions.create('background-color',{\n duration:theme.transitions.duration.shorter,\n easing:theme.transitions.easing.easeOut\n}),\n '&:hover':{\n backgroundColor:theme.vars ? theme.vars.palette.FilledInput.hoverBg :hoverBackground,\n // Reset on touch devices,it doesn't add specificity\n '@media (hover:none)':{\n backgroundColor:theme.vars ? theme.vars.palette.FilledInput.bg:backgroundColor\n}\n},\n [`&.${FilledInput_filledInputClasses.focused}`]:{\n backgroundColor:theme.vars ? theme.vars.palette.FilledInput.bg:backgroundColor\n},\n [`&.${FilledInput_filledInputClasses.disabled}`]:{\n backgroundColor:theme.vars ? theme.vars.palette.FilledInput.disabledBg:disabledBackground\n}\n},!ownerState.disableUnderline &&{\n '&::after':{\n borderBottom:`2px solid ${(_palette=(theme.vars || theme).palette[ownerState.color || 'primary'])==null ? void 0:_palette.main}`,\n left:0,\n bottom:0,\n // Doing the other way around crash on IE11 \"''\" https://github.com/cssinjs/jss/issues/242\n content:'\"\"',\n position:'absolute',\n right:0,\n transform:'scaleX(0)',\n transition:theme.transitions.create('transform',{\n duration:theme.transitions.duration.shorter,\n easing:theme.transitions.easing.easeOut\n}),\n pointerEvents:'none' // Transparent to the hover style.\n},\n [`&.${FilledInput_filledInputClasses.focused}:after`]:{\n // translateX(0) is a workaround for Safari transform scale bug\n // See https://github.com/mui/material-ui/issues/31766\n transform:'scaleX(1) translateX(0)'\n},\n [`&.${FilledInput_filledInputClasses.error}`]:{\n '&::before,&::after':{\n borderBottomColor:(theme.vars || theme).palette.error.main\n}\n},\n '&::before':{\n borderBottom:`1px solid ${theme.vars ? `rgba(${theme.vars.palette.common.onBackgroundChannel}/ ${theme.vars.opacity.inputUnderline})`:bottomLineColor}`,\n left:0,\n bottom:0,\n // Doing the other way around crash on IE11 \"''\" https://github.com/cssinjs/jss/issues/242\n content:'\"\\\\00a0\"',\n position:'absolute',\n right:0,\n transition:theme.transitions.create('border-bottom-color',{\n duration:theme.transitions.duration.shorter\n}),\n pointerEvents:'none' // Transparent to the hover style.\n},\n [`&:hover:not(.${FilledInput_filledInputClasses.disabled},.${FilledInput_filledInputClasses.error}):before`]:{\n borderBottom:`1px solid ${(theme.vars || theme).palette.text.primary}`\n},\n [`&.${FilledInput_filledInputClasses.disabled}:before`]:{\n borderBottomStyle:'dotted'\n}\n},ownerState.startAdornment &&{\n paddingLeft:12\n},ownerState.endAdornment &&{\n paddingRight:12\n},ownerState.multiline && (0,esm_extends.A)({\n padding:'25px 12px 8px'\n},ownerState.size==='small' &&{\n paddingTop:21,\n paddingBottom:4\n},ownerState.hiddenLabel &&{\n paddingTop:16,\n paddingBottom:17\n},ownerState.hiddenLabel && ownerState.size==='small' &&{\n paddingTop:8,\n paddingBottom:9\n}));\n});\nconst FilledInputInput=(0,styled.Ay)(InputBaseComponent,{\n name:'MuiFilledInput',\n slot:'Input',\n overridesResolver:inputOverridesResolver\n})(({\n theme,\n ownerState\n})=>(0,esm_extends.A)({\n paddingTop:25,\n paddingRight:12,\n paddingBottom:8,\n paddingLeft:12\n},!theme.vars &&{\n '&:-webkit-autofill':{\n WebkitBoxShadow:theme.palette.mode==='light' ? null:'0 0 0 100px #266798 inset',\n WebkitTextFillColor:theme.palette.mode==='light' ? null:'#fff',\n caretColor:theme.palette.mode==='light' ? null:'#fff',\n borderTopLeftRadius:'inherit',\n borderTopRightRadius:'inherit'\n}\n},theme.vars &&{\n '&:-webkit-autofill':{\n borderTopLeftRadius:'inherit',\n borderTopRightRadius:'inherit'\n},\n [theme.getColorSchemeSelector('dark')]:{\n '&:-webkit-autofill':{\n WebkitBoxShadow:'0 0 0 100px #266798 inset',\n WebkitTextFillColor:'#fff',\n caretColor:'#fff'\n}\n}\n},ownerState.size==='small' &&{\n paddingTop:21,\n paddingBottom:4\n},ownerState.hiddenLabel &&{\n paddingTop:16,\n paddingBottom:17\n},ownerState.startAdornment &&{\n paddingLeft:0\n},ownerState.endAdornment &&{\n paddingRight:0\n},ownerState.hiddenLabel && ownerState.size==='small' &&{\n paddingTop:8,\n paddingBottom:9\n},ownerState.multiline &&{\n paddingTop:0,\n paddingBottom:0,\n paddingLeft:0,\n paddingRight:0\n}));\nconst FilledInput=external_React_.forwardRef(function FilledInput(inProps,ref){\n var _ref,_slots$root,_ref2,_slots$input;\n const props=(0,DefaultPropsProvider.b)({\n props:inProps,\n name:'MuiFilledInput'\n});\n const{\n components={},\n type='text'\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,FilledInput_excluded);,props,{\n fullWidth,\n inputComponent,\n multiline,\n type\n});\n const classes=FilledInput_useUtilityClasses(props);\n const filledInputComponentsProps={\n root:{\n ownerState\n},\n input:{\n ownerState\n}\n};\n const componentsProps=(slotProps !=null ? slotProps :componentsPropsProp) ? (0,deepmerge.A)(filledInputComponentsProps,slotProps !=null ? slotProps :componentsPropsProp) :filledInputComponentsProps;\n const RootSlot=(_ref=(_slots$root=slots.root) !=null ? _slots$root :components.Root) !=null ? _ref :FilledInputRoot;\n const InputSlot=(_ref2=(_slots$input=slots.input) !=null ? _slots$input :components.Input) !=null ? _ref2 :FilledInputInput;\n return (0,jsx_runtime.jsx)(InputBase_InputBase,(0,esm_extends.A)({\n slots:{\n root:RootSlot,\n input:InputSlot\n},\n componentsProps:componentsProps,\n fullWidth:fullWidth,\n inputComponent:inputComponent,\n multiline:multiline,\n ref:ref,\n type:type\n},other,{\n classes:classes\n}));\n});\n false ? 0 :void 0;\nFilledInput.muiName='Input';\n const FilledInput_FilledInput=(FilledInput);\n;// ./node_modules/@mui/material/OutlinedInput/NotchedOutline.js\n'use client';\n\n\n\nvar _span;\nconst NotchedOutline_excluded=[\"children\",\"classes\",\"className\",\"label\",\"notched\"];\n\n\n\n\nconst NotchedOutlineRoot=(0,styled.Ay)('fieldset',{\n shouldForwardProp:rootShouldForwardProp.A\n})({\n textAlign:'left',\n position:'absolute',\n bottom:0,\n right:0,\n top:-5,\n left:0,\n margin:0,\n padding:'0 8px',\n pointerEvents:'none',\n borderRadius:'inherit',\n borderStyle:'solid',\n borderWidth:1,\n overflow:'hidden',\n minWidth:'0%'\n});\nconst NotchedOutlineLegend=(0,styled.Ay)('legend',{\n shouldForwardProp:rootShouldForwardProp.A\n})(({\n ownerState,\n theme\n})=>(0,esm_extends.A)({\n float:'unset',\n // Fix conflict with bootstrap\n width:'auto',\n // Fix conflict with bootstrap\n overflow:'hidden'\n},!ownerState.withLabel &&{\n padding:0,\n lineHeight:'11px',\n // sync with `height` in `legend` styles\n transition:theme.transitions.create('width',{\n duration:150,\n easing:theme.transitions.easing.easeOut\n})\n},ownerState.withLabel && (0,esm_extends.A)({\n display:'block',\n // Fix conflict with normalize.css and sanitize.css\n padding:0,\n height:11,\n // sync with `lineHeight` in `legend` styles\n fontSize:'0.75em',\n visibility:'hidden',\n maxWidth:.01,\n transition:theme.transitions.create('max-width',{\n duration:50,\n easing:theme.transitions.easing.easeOut\n}),\n whiteSpace:'nowrap',\n '&>span':{\n paddingLeft:5,\n paddingRight:5,\n display:'inline-block',\n opacity:0,\n visibility:'visible'\n}\n},ownerState.notched &&{\n maxWidth:'100%',\n transition:theme.transitions.create('max-width',{\n duration:100,\n easing:theme.transitions.easing.easeOut,\n delay:50\n})\n})));\n\n\nfunction NotchedOutline(props){\n const{\n className,\n label,\n notched\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,NotchedOutline_excluded);\n const withLabel=label !=null && label !=='';,props,{\n notched,\n withLabel\n});\n return (0,jsx_runtime.jsx)(NotchedOutlineRoot,(0,esm_extends.A)({\n \"aria-hidden\":true,\n className:className,\n ownerState:ownerState\n},other,{\n children:(0,jsx_runtime.jsx)(NotchedOutlineLegend,{\n ownerState:ownerState,\n children:withLabel ? (0,jsx_runtime.jsx)(\"span\",{\n children:label\n}) :// notranslate needed while Google Translate will not fix zero-width space issue\n _span || (_span=(0,jsx_runtime.jsx)(\"span\",{\n className:\"notranslate\",\n children:\"\\u200B\"\n}))\n})\n}));\n}\n false ? 0 :void 0;\n;// ./node_modules/@mui/material/OutlinedInput/outlinedInputClasses.js\n\n\n\n\nfunction getOutlinedInputUtilityClass(slot){\n return (0,generateUtilityClass_generateUtilityClass.Ay)('MuiOutlinedInput',slot);\n},InputBase_inputBaseClasses,(0,generateUtilityClasses.A)('MuiOutlinedInput',['root','notchedOutline','input']));\n const OutlinedInput_outlinedInputClasses=(outlinedInputClasses);\n;// ./node_modules/@mui/material/OutlinedInput/OutlinedInput.js\n'use client';\n\n\n\nconst OutlinedInput_excluded=[\"components\",\"fullWidth\",\"inputComponent\",\"label\",\"multiline\",\"notched\",\"slots\",\"type\"];\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst OutlinedInput_useUtilityClasses=ownerState=>{\n const{\n classes\n}=ownerState;\n const slots={\n root:['root'],\n notchedOutline:['notchedOutline'],\n input:['input']\n};\n const composedClasses=(0,composeClasses.A)(slots,getOutlinedInputUtilityClass,classes);,classes,composedClasses);\n};\nconst OutlinedInputRoot=(0,styled.Ay)(InputBaseRoot,{\n shouldForwardProp:prop=>(0,rootShouldForwardProp.A)(prop) || prop==='classes',\n name:'MuiOutlinedInput',\n slot:'Root',\n overridesResolver:rootOverridesResolver\n})(({\n theme,\n ownerState\n})=>{\n const borderColor=theme.palette.mode==='light' ? 'rgba(0,0,0,.23)' :'rgba(255,255,255,.23)';\n return (0,esm_extends.A)({\n position:'relative',\n borderRadius:(theme.vars || theme).shape.borderRadius,\n [`&:hover .${OutlinedInput_outlinedInputClasses.notchedOutline}`]:{\n borderColor:(theme.vars || theme).palette.text.primary\n},\n // Reset on touch devices,it doesn't add specificity\n '@media (hover:none)':{\n [`&:hover .${OutlinedInput_outlinedInputClasses.notchedOutline}`]:{\n borderColor:theme.vars ? `rgba(${theme.vars.palette.common.onBackgroundChannel}/ .23)`:borderColor\n}\n},\n [`&.${OutlinedInput_outlinedInputClasses.focused}.${OutlinedInput_outlinedInputClasses.notchedOutline}`]:{\n borderColor:(theme.vars || theme).palette[ownerState.color].main,\n borderWidth:2\n},\n [`&.${OutlinedInput_outlinedInputClasses.error}.${OutlinedInput_outlinedInputClasses.notchedOutline}`]:{\n borderColor:(theme.vars || theme).palette.error.main\n},\n [`&.${OutlinedInput_outlinedInputClasses.disabled}.${OutlinedInput_outlinedInputClasses.notchedOutline}`]:{\n borderColor:(theme.vars || theme).palette.action.disabled\n}\n},ownerState.startAdornment &&{\n paddingLeft:14\n},ownerState.endAdornment &&{\n paddingRight:14\n},ownerState.multiline && (0,esm_extends.A)({\n padding:'16.5px 14px'\n},ownerState.size==='small' &&{\n padding:'8.5px 14px'\n}));\n});\nconst OutlinedInput_NotchedOutlineRoot=(0,styled.Ay)(NotchedOutline,{\n name:'MuiOutlinedInput',\n slot:'NotchedOutline',\n overridesResolver:(props,styles)=>styles.notchedOutline\n})(({\n theme\n})=>{\n const borderColor=theme.palette.mode==='light' ? 'rgba(0,0,0,.23)' :'rgba(255,255,255,.23)';\n return{\n borderColor:theme.vars ? `rgba(${theme.vars.palette.common.onBackgroundChannel}/ .23)`:borderColor\n};\n});\nconst OutlinedInputInput=(0,styled.Ay)(InputBaseComponent,{\n name:'MuiOutlinedInput',\n slot:'Input',\n overridesResolver:inputOverridesResolver\n})(({\n theme,\n ownerState\n})=>(0,esm_extends.A)({\n padding:'16.5px 14px'\n},!theme.vars &&{\n '&:-webkit-autofill':{\n WebkitBoxShadow:theme.palette.mode==='light' ? null:'0 0 0 100px #266798 inset',\n WebkitTextFillColor:theme.palette.mode==='light' ? null:'#fff',\n caretColor:theme.palette.mode==='light' ? null:'#fff',\n borderRadius:'inherit'\n}\n},theme.vars &&{\n '&:-webkit-autofill':{\n borderRadius:'inherit'\n},\n [theme.getColorSchemeSelector('dark')]:{\n '&:-webkit-autofill':{\n WebkitBoxShadow:'0 0 0 100px #266798 inset',\n WebkitTextFillColor:'#fff',\n caretColor:'#fff'\n}\n}\n},ownerState.size==='small' &&{\n padding:'8.5px 14px'\n},ownerState.multiline &&{\n padding:0\n},ownerState.startAdornment &&{\n paddingLeft:0\n},ownerState.endAdornment &&{\n paddingRight:0\n}));\nconst OutlinedInput=external_React_.forwardRef(function OutlinedInput(inProps,ref){\n var _ref,_slots$root,_ref2,_slots$input,_React$Fragment;\n const props=(0,DefaultPropsProvider.b)({\n props:inProps,\n name:'MuiOutlinedInput'\n});\n const{\n components={},\n type='text'\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,OutlinedInput_excluded);\n const classes=OutlinedInput_useUtilityClasses(props);\n const muiFormControl=useFormControl();\n const fcs=formControlState({\n props,\n muiFormControl,\n states:['color','disabled','error','focused','hiddenLabel','size','required']\n});,props,{\n color:fcs.color || 'primary',\n disabled:fcs.disabled,\n error:fcs.error,\n focused:fcs.focused,\n formControl:muiFormControl,\n fullWidth,\n hiddenLabel:fcs.hiddenLabel,\n multiline,\n size:fcs.size,\n type\n});\n const RootSlot=(_ref=(_slots$root=slots.root) !=null ? _slots$root :components.Root) !=null ? _ref :OutlinedInputRoot;\n const InputSlot=(_ref2=(_slots$input=slots.input) !=null ? _slots$input :components.Input) !=null ? _ref2 :OutlinedInputInput;\n return (0,jsx_runtime.jsx)(InputBase_InputBase,(0,esm_extends.A)({\n slots:{\n root:RootSlot,\n input:InputSlot\n},\n renderSuffix:state=>(0,jsx_runtime.jsx)(OutlinedInput_NotchedOutlineRoot,{\n ownerState:ownerState,\n className:classes.notchedOutline,\n label:label !=null && label !=='' && fcs.required ? _React$Fragment || (_React$Fragment=(0,jsx_runtime.jsxs)(external_React_.Fragment,{\n children:[label,\"\\u2009\",'*']\n})):label,\n notched:typeof notched !=='undefined' ? notched:Boolean(state.startAdornment || state.filled || state.focused)\n}),\n fullWidth:fullWidth,\n inputComponent:inputComponent,\n multiline:multiline,\n ref:ref,\n type:type\n},other,{\n classes:(0,esm_extends.A)({},classes,{\n notchedOutline:null\n})\n}));\n});\n false ? 0 :void 0;\nOutlinedInput.muiName='Input';\n const OutlinedInput_OutlinedInput=(OutlinedInput);\n;// ./node_modules/@mui/material/FormLabel/formLabelClasses.js\n\n\nfunction getFormLabelUtilityClasses(slot){\n return (0,generateUtilityClass_generateUtilityClass.Ay)('MuiFormLabel',slot);\n}\nconst formLabelClasses=(0,generateUtilityClasses.A)('MuiFormLabel',['root','colorSecondary','focused','disabled','error','filled','required','asterisk']);\n const FormLabel_formLabelClasses=(formLabelClasses);\n;// ./node_modules/@mui/material/FormLabel/FormLabel.js\n'use client';\n\n\n\nconst FormLabel_excluded=[\"children\",\"className\",\"color\",\"component\",\"disabled\",\"error\",\"filled\",\"focused\",\"required\"];\n\n\n\n\n\n\n\n\n\n\n\nconst FormLabel_useUtilityClasses=ownerState=>{\n const{\n classes,\n color,\n focused,\n disabled,\n error,\n filled,\n required\n}=ownerState;\n const slots={\n root:['root',`color${(0,capitalize.A)(color)}`,disabled && 'disabled',error && 'error',filled && 'filled',focused && 'focused',required && 'required'],\n asterisk:['asterisk',error && 'error']\n};\n return (0,composeClasses.A)(slots,getFormLabelUtilityClasses,classes);\n};\nconst FormLabelRoot=(0,styled.Ay)('label',{\n name:'MuiFormLabel',\n slot:'Root',\n overridesResolver:({\n ownerState\n},styles)=>{\n return (0,esm_extends.A)({},styles.root,ownerState.color==='secondary' && styles.colorSecondary,ownerState.filled && styles.filled);\n}\n})(({\n theme,\n ownerState\n})=>(0,esm_extends.A)({\n color:(theme.vars || theme).palette.text.secondary\n},theme.typography.body1,{\n lineHeight:'1.4375em',\n padding:0,\n position:'relative',\n [`&.${FormLabel_formLabelClasses.focused}`]:{\n color:(theme.vars || theme).palette[ownerState.color].main\n},\n [`&.${FormLabel_formLabelClasses.disabled}`]:{\n color:(theme.vars || theme).palette.text.disabled\n},\n [`&.${FormLabel_formLabelClasses.error}`]:{\n color:(theme.vars || theme).palette.error.main\n}\n}));\nconst AsteriskComponent=(0,styled.Ay)('span',{\n name:'MuiFormLabel',\n slot:'Asterisk',\n overridesResolver:(props,styles)=>styles.asterisk\n})(({\n theme\n})=>({\n [`&.${FormLabel_formLabelClasses.error}`]:{\n color:(theme.vars || theme).palette.error.main\n}\n}));\nconst FormLabel=external_React_.forwardRef(function FormLabel(inProps,ref){\n const props=(0,DefaultPropsProvider.b)({\n props:inProps,\n name:'MuiFormLabel'\n});\n const{\n children,\n className,\n component='label'\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,FormLabel_excluded);\n const muiFormControl=useFormControl();\n const fcs=formControlState({\n props,\n muiFormControl,\n states:['color','required','focused','disabled','error','filled']\n});,props,{\n color:fcs.color || 'primary',\n component,\n disabled:fcs.disabled,\n error:fcs.error,\n filled:fcs.filled,\n focused:fcs.focused,\n required:fcs.required\n});\n const classes=FormLabel_useUtilityClasses(ownerState);\n return (0,jsx_runtime.jsxs)(FormLabelRoot,(0,esm_extends.A)({\n as:component,\n ownerState:ownerState,\n className:(0,clsx.A)(classes.root,className),\n ref:ref\n},other,{\n children:[children,fcs.required && (0,jsx_runtime.jsxs)(AsteriskComponent,{\n ownerState:ownerState,\n \"aria-hidden\":true,\n className:classes.asterisk,\n children:[\"\\u2009\",'*']\n})]\n}));\n});\n false ? 0 :void 0;\n const FormLabel_FormLabel=(FormLabel);\n;// ./node_modules/@mui/material/InputLabel/inputLabelClasses.js\n\n\nfunction getInputLabelUtilityClasses(slot){\n return (0,generateUtilityClass_generateUtilityClass.Ay)('MuiInputLabel',slot);\n}\nconst inputLabelClasses=(0,generateUtilityClasses.A)('MuiInputLabel',['root','focused','disabled','error','required','asterisk','formControl','sizeSmall','shrink','animated','standard','filled','outlined']);\n const InputLabel_inputLabelClasses=((null && (inputLabelClasses)));\n;// ./node_modules/@mui/material/InputLabel/InputLabel.js\n'use client';\n\n\n\nconst InputLabel_excluded=[\"disableAnimation\",\"margin\",\"shrink\",\"variant\",\"className\"];\n\n\n\n\n\n\n\n\n\n\n\n\nconst InputLabel_useUtilityClasses=ownerState=>{\n const{\n classes,\n formControl,\n size,\n shrink,\n disableAnimation,\n variant,\n required\n}=ownerState;\n const slots={\n root:['root',formControl && 'formControl',!disableAnimation && 'animated',shrink && 'shrink',size && size !=='normal' && `size${(0,capitalize.A)(size)}`,variant],\n asterisk:[required && 'asterisk']\n};\n const composedClasses=(0,composeClasses.A)(slots,getInputLabelUtilityClasses,classes);,classes,composedClasses);\n};\nconst InputLabelRoot=(0,styled.Ay)(FormLabel_FormLabel,{\n shouldForwardProp:prop=>(0,rootShouldForwardProp.A)(prop) || prop==='classes',\n name:'MuiInputLabel',\n slot:'Root',\n overridesResolver:(props,styles)=>{\n const{\n ownerState\n}=props;\n return [{\n [`& .${FormLabel_formLabelClasses.asterisk}`]:styles.asterisk\n},styles.root,ownerState.formControl && styles.formControl,ownerState.size==='small' && styles.sizeSmall,ownerState.shrink && styles.shrink,!ownerState.disableAnimation && styles.animated,ownerState.focused && styles.focused,styles[ownerState.variant]];\n}\n})(({\n theme,\n ownerState\n})=>(0,esm_extends.A)({\n display:'block',\n transformOrigin:'top left',\n whiteSpace:'nowrap',\n overflow:'hidden',\n textOverflow:'ellipsis',\n maxWidth:'100%'\n},ownerState.formControl &&{\n position:'absolute',\n left:0,\n top:0,\n // slight alteration to spec spacing to match visual spec result\n transform:'translate(0,20px) scale(1)'\n},ownerState.size==='small' &&{\n // Compensation for the `Input.inputSizeSmall` style.\n transform:'translate(0,17px) scale(1)'\n},ownerState.shrink &&{\n transform:'translate(0,-1.5px) scale(.75)',\n transformOrigin:'top left',\n maxWidth:'133%'\n},!ownerState.disableAnimation &&{\n transition:theme.transitions.create(['color','transform','max-width'],{\n duration:theme.transitions.duration.shorter,\n easing:theme.transitions.easing.easeOut\n})\n},ownerState.variant==='filled' && (0,esm_extends.A)({\n // Chrome's autofill feature gives the input field a yellow background.\n // Since the input field is behind the label in the HTML tree,\n // the input field is drawn last and hides the label with an opaque background color.\n // zIndex:1 will raise the label above opaque background-colors of input.\n zIndex:1,\n pointerEvents:'none',\n transform:'translate(12px,16px) scale(1)',\n maxWidth:'calc(100% - 24px)'\n},ownerState.size==='small' &&{\n transform:'translate(12px,13px) scale(1)'\n},ownerState.shrink && (0,esm_extends.A)({\n userSelect:'none',\n pointerEvents:'auto',\n transform:'translate(12px,7px) scale(.75)',\n maxWidth:'calc(133% - 24px)'\n},ownerState.size==='small' &&{\n transform:'translate(12px,4px) scale(.75)'\n})),ownerState.variant==='outlined' && (0,esm_extends.A)({\n // see comment above on filled.zIndex\n zIndex:1,\n pointerEvents:'none',\n transform:'translate(14px,16px) scale(1)',\n maxWidth:'calc(100% - 24px)'\n},ownerState.size==='small' &&{\n transform:'translate(14px,9px) scale(1)'\n},ownerState.shrink &&{\n userSelect:'none',\n pointerEvents:'auto',\n // Theoretically,we should have (8+5)*2/0.75=34px\n // but it feels a better when it bleeds a bit on the left,so 32px.\n maxWidth:'calc(133% - 32px)',\n transform:'translate(14px,-9px) scale(.75)'\n})));\nconst InputLabel=external_React_.forwardRef(function InputLabel(inProps,ref){\n const props=(0,DefaultPropsProvider.b)({\n name:'MuiInputLabel',\n props:inProps\n});\n const{\n disableAnimation=false,\n shrink:shrinkProp,\n className\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,InputLabel_excluded);\n const muiFormControl=useFormControl();\n let shrink=shrinkProp;\n if (typeof shrink==='undefined' && muiFormControl){\n shrink=muiFormControl.filled || muiFormControl.focused || muiFormControl.adornedStart;\n}\n const fcs=formControlState({\n props,\n muiFormControl,\n states:['size','variant','required','focused']\n});,props,{\n disableAnimation,\n formControl:muiFormControl,\n shrink,\n size:fcs.size,\n variant:fcs.variant,\n required:fcs.required,\n focused:fcs.focused\n});\n const classes=InputLabel_useUtilityClasses(ownerState);\n return (0,jsx_runtime.jsx)(InputLabelRoot,(0,esm_extends.A)({\n \"data-shrink\":shrink,\n ownerState:ownerState,\n ref:ref,\n className:(0,clsx.A)(classes.root,className)\n},other,{\n classes:classes\n}));\n});\n false ? 0 :void 0;\n const InputLabel_InputLabel=(InputLabel);\n// EXTERNAL MODULE:./node_modules/@mui/material/utils/isMuiElement.js+1 modules\nvar isMuiElement=__webpack_require__(8593);\n;// ./node_modules/@mui/material/FormControl/formControlClasses.js\n\n\nfunction getFormControlUtilityClasses(slot){\n return (0,generateUtilityClass_generateUtilityClass.Ay)('MuiFormControl',slot);\n}\nconst formControlClasses=(0,generateUtilityClasses.A)('MuiFormControl',['root','marginNone','marginNormal','marginDense','fullWidth','disabled']);\n const FormControl_formControlClasses=((null && (formControlClasses)));\n;// ./node_modules/@mui/material/FormControl/FormControl.js\n'use client';\n\n\n\nconst FormControl_excluded=[\"children\",\"className\",\"color\",\"component\",\"disabled\",\"error\",\"focused\",\"fullWidth\",\"hiddenLabel\",\"margin\",\"required\",\"size\",\"variant\"];\n\n\n\n\n\n\n\n\n\n\n\n\nconst FormControl_useUtilityClasses=ownerState=>{\n const{\n classes,\n margin,\n fullWidth\n}=ownerState;\n const slots={\n root:['root',margin !=='none' && `margin${(0,capitalize.A)(margin)}`,fullWidth && 'fullWidth']\n};\n return (0,composeClasses.A)(slots,getFormControlUtilityClasses,classes);\n};\nconst FormControlRoot=(0,styled.Ay)('div',{\n name:'MuiFormControl',\n slot:'Root',\n overridesResolver:({\n ownerState\n},styles)=>{\n return (0,esm_extends.A)({},styles.root,styles[`margin${(0,capitalize.A)(ownerState.margin)}`],ownerState.fullWidth && styles.fullWidth);\n}\n})(({\n ownerState\n})=>(0,esm_extends.A)({\n display:'inline-flex',\n flexDirection:'column',\n position:'relative',\n // Reset fieldset default style.\n minWidth:0,\n padding:0,\n margin:0,\n border:0,\n verticalAlign:'top'\n},ownerState.margin==='normal' &&{\n marginTop:16,\n marginBottom:8\n},ownerState.margin==='dense' &&{\n marginTop:8,\n marginBottom:4\n},ownerState.fullWidth &&{\n width:'100%'\n}));\n\n\nconst FormControl=external_React_.forwardRef(function FormControl(inProps,ref){\n const props=(0,DefaultPropsProvider.b)({\n props:inProps,\n name:'MuiFormControl'\n});\n const{\n children,\n className,\n color='primary',\n component='div',\n disabled=false,\n error=false,\n focused:visuallyFocused,\n fullWidth=false,\n hiddenLabel=false,\n margin='none',\n required=false,\n size='medium',\n variant='outlined'\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,FormControl_excluded);,props,{\n color,\n component,\n disabled,\n error,\n fullWidth,\n hiddenLabel,\n margin,\n required,\n size,\n variant\n});\n const classes=FormControl_useUtilityClasses(ownerState);\n const [adornedStart,setAdornedStart]=external_React_.useState(()=>{\n // We need to iterate through the children and find the Input in order\n // to fully support server-side rendering.\n let initialAdornedStart=false;\n if (children){\n external_React_.Children.forEach(children,child=>{\n if (!(0,isMuiElement.A)(child,['Input','Select'])){\n return;\n}\n const input=(0,isMuiElement.A)(child,['Select']) ? child.props.input :child;\n if (input && isAdornedStart(input.props)){\n initialAdornedStart=true;\n}\n});\n}\n return initialAdornedStart;\n});\n const [filled,setFilled]=external_React_.useState(()=>{\n // We need to iterate through the children and find the Input in order\n // to fully support server-side rendering.\n let initialFilled=false;\n if (children){\n external_React_.Children.forEach(children,child=>{\n if (!(0,isMuiElement.A)(child,['Input','Select'])){\n return;\n}\n if (isFilled(child.props,true) || isFilled(child.props.inputProps,true)){\n initialFilled=true;\n}\n});\n}\n return initialFilled;\n});\n const [focusedState,setFocused]=external_React_.useState(false);\n if (disabled && focusedState){\n setFocused(false);\n}\n const focused=visuallyFocused !==undefined && !disabled ? visuallyFocused :focusedState;\n let registerEffect;\n const childContext=external_React_.useMemo(()=>{\n return{\n adornedStart,\n setAdornedStart,\n color,\n disabled,\n error,\n filled,\n focused,\n fullWidth,\n hiddenLabel,\n size,\n onBlur:()=>{\n setFocused(false);\n},\n onEmpty:()=>{\n setFilled(false);\n},\n onFilled:()=>{\n setFilled(true);\n},\n onFocus:()=>{\n setFocused(true);\n},\n registerEffect,\n required,\n variant\n};\n},[adornedStart,color,disabled,error,filled,focused,fullWidth,hiddenLabel,registerEffect,required,size,variant]);\n return (0,jsx_runtime.jsx)(FormControl_FormControlContext.Provider,{\n value:childContext,\n children:(0,jsx_runtime.jsx)(FormControlRoot,(0,esm_extends.A)({\n as:component,\n ownerState:ownerState,\n className:(0,clsx.A)(classes.root,className),\n ref:ref\n},other,{\n children:children\n}))\n});\n});\n false ? 0 :void 0;\n const FormControl_FormControl=(FormControl);\n;// ./node_modules/@mui/material/FormHelperText/formHelperTextClasses.js\n\n\nfunction getFormHelperTextUtilityClasses(slot){\n return (0,generateUtilityClass_generateUtilityClass.Ay)('MuiFormHelperText',slot);\n}\nconst formHelperTextClasses=(0,generateUtilityClasses.A)('MuiFormHelperText',['root','error','disabled','sizeSmall','sizeMedium','contained','focused','filled','required']);\n const FormHelperText_formHelperTextClasses=(formHelperTextClasses);\n;// ./node_modules/@mui/material/FormHelperText/FormHelperText.js\n'use client';\n\n\n\nvar FormHelperText_span;\nconst FormHelperText_excluded=[\"children\",\"className\",\"component\",\"disabled\",\"error\",\"filled\",\"focused\",\"margin\",\"required\",\"variant\"];\n\n\n\n\n\n\n\n\n\n\n\nconst FormHelperText_useUtilityClasses=ownerState=>{\n const{\n classes,\n contained,\n size,\n disabled,\n error,\n filled,\n focused,\n required\n}=ownerState;\n const slots={\n root:['root',disabled && 'disabled',error && 'error',size && `size${(0,capitalize.A)(size)}`,contained && 'contained',focused && 'focused',filled && 'filled',required && 'required']\n};\n return (0,composeClasses.A)(slots,getFormHelperTextUtilityClasses,classes);\n};\nconst FormHelperTextRoot=(0,styled.Ay)('p',{\n name:'MuiFormHelperText',\n slot:'Root',\n overridesResolver:(props,styles)=>{\n const{\n ownerState\n}=props;\n return [styles.root,ownerState.size && styles[`size${(0,capitalize.A)(ownerState.size)}`],ownerState.contained && styles.contained,ownerState.filled && styles.filled];\n}\n})(({\n theme,\n ownerState\n})=>(0,esm_extends.A)({\n color:(theme.vars || theme).palette.text.secondary\n},theme.typography.caption,{\n textAlign:'left',\n marginTop:3,\n marginRight:0,\n marginBottom:0,\n marginLeft:0,\n [`&.${FormHelperText_formHelperTextClasses.disabled}`]:{\n color:(theme.vars || theme).palette.text.disabled\n},\n [`&.${FormHelperText_formHelperTextClasses.error}`]:{\n color:(theme.vars || theme).palette.error.main\n}\n},ownerState.size==='small' &&{\n marginTop:4\n},ownerState.contained &&{\n marginLeft:14,\n marginRight:14\n}));\nconst FormHelperText=external_React_.forwardRef(function FormHelperText(inProps,ref){\n const props=(0,DefaultPropsProvider.b)({\n props:inProps,\n name:'MuiFormHelperText'\n});\n const{\n children,\n className,\n component='p'\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,FormHelperText_excluded);\n const muiFormControl=useFormControl();\n const fcs=formControlState({\n props,\n muiFormControl,\n states:['variant','size','disabled','error','filled','focused','required']\n});,props,{\n component,\n contained:fcs.variant==='filled' || fcs.variant==='outlined',\n variant:fcs.variant,\n size:fcs.size,\n disabled:fcs.disabled,\n error:fcs.error,\n filled:fcs.filled,\n focused:fcs.focused,\n required:fcs.required\n});\n const classes=FormHelperText_useUtilityClasses(ownerState);\n return (0,jsx_runtime.jsx)(FormHelperTextRoot,(0,esm_extends.A)({\n as:component,\n ownerState:ownerState,\n className:(0,clsx.A)(classes.root,className),\n ref:ref\n},other,{\n children:children===' ' ? // notranslate needed while Google Translate will not fix zero-width space issue\n FormHelperText_span || (FormHelperText_span=(0,jsx_runtime.jsx)(\"span\",{\n className:\"notranslate\",\n children:\"\\u200B\"\n})):children\n}));\n});\n false ? 0 :void 0;\n const FormHelperText_FormHelperText=(FormHelperText);\n;// ./node_modules/@mui/utils/esm/getReactElementRef/getReactElementRef.js\n\n\n\nfunction getReactElementRef(element){\n // 'ref' is passed as prop in React 19,whereas 'ref' is directly attached to children in older versions\n if (parseInt(external_React_.version,10)>=19){\n var _element$props;\n return (element==null || (_element$props=element.props)==null ? void 0:_element$props.ref) || null;\n}\n // @ts-expect-error element.ref is not included in the ReactElement type\n // https://github.com/DefinitelyTyped/DefinitelyTyped/discussions/70189\n return (element==null ? void 0:element.ref) || null;\n}\n// EXTERNAL MODULE:./node_modules/@mui/material/utils/ownerDocument.js\nvar ownerDocument=__webpack_require__(6248);\n;// ./node_modules/@mui/system/esm/RtlProvider/index.js\n\n\nconst RtlProvider_excluded=(null && ([\"value\"]));\n\n\n\nconst RtlContext=external_React_.createContext();\nfunction RtlProvider(_ref){\n let{\n value\n}=_ref,\n props=_objectWithoutPropertiesLoose(_ref,RtlProvider_excluded);\n return _jsx(RtlContext.Provider,_extends({\n value:value !=null ? value:true\n},props));\n}\n false ? 0 :void 0;\nconst useRtl=()=>{\n const value=external_React_.useContext(RtlContext);\n return value !=null ? value:false;\n};\n const esm_RtlProvider=((null && (RtlProvider)));\n;// ./node_modules/@mui/utils/esm/appendOwnerState/appendOwnerState.js\n\n\n\n\n\n\nfunction appendOwnerState(elementType,otherProps,ownerState){\n if (elementType===undefined || isHostComponent_isHostComponent(elementType)){\n return otherProps;\n},otherProps,{\n ownerState:(0,esm_extends.A)({},otherProps.ownerState,ownerState)\n});\n}\n const appendOwnerState_appendOwnerState=(appendOwnerState);\n;// ./node_modules/@mui/utils/esm/extractEventHandlers/extractEventHandlers.js\n\nfunction extractEventHandlers(object,excludeKeys=[]){\n if (object===undefined){\n return{};\n};\n Object.keys(object).filter(prop=>prop.match(/^on[A-Z]/) && typeof object[prop]==='function' && !excludeKeys.includes(prop)).forEach(prop=>{\n result[prop]=object[prop];\n});\n return result;\n}\n const extractEventHandlers_extractEventHandlers=(extractEventHandlers);\n;// ./node_modules/@mui/utils/esm/omitEventHandlers/omitEventHandlers.js\n\nfunction omitEventHandlers(object){\n if (object===undefined){\n return{};\n};\n Object.keys(object).filter(prop=>!(prop.match(/^on[A-Z]/) && typeof object[prop]==='function')).forEach(prop=>{\n result[prop]=object[prop];\n});\n return result;\n}\n const omitEventHandlers_omitEventHandlers=(omitEventHandlers);\n;// ./node_modules/@mui/utils/esm/mergeSlotProps/mergeSlotProps.js\n\n\n\n\n\nfunction mergeSlotProps(parameters){\n const{\n getSlotProps,\n additionalProps,\n externalSlotProps,\n externalForwardedProps,\n className\n}=parameters;\n if (!getSlotProps){\n // The simpler case - getSlotProps is not defined,so no internal event handlers are defined,\n // so we can simply merge all the props without having to worry about extracting event handlers.\n const joinedClasses=(0,clsx.A)(additionalProps==null ? void 0 :additionalProps.className,className,externalForwardedProps==null ? void 0 :externalForwardedProps.className,externalSlotProps==null ? void 0 :externalSlotProps.className);,additionalProps==null ? void 0 :additionalProps.style,externalForwardedProps==null ? void 0 :externalForwardedProps.style,externalSlotProps==null ? void 0 :externalSlotProps.style);,additionalProps,externalForwardedProps,externalSlotProps);\n if (joinedClasses.length>0){\n props.className=joinedClasses;\n}\n if (Object.keys(mergedStyle).length>0){\n props.style=mergedStyle;\n}\n return{\n props,\n internalRef:undefined\n};\n},externalForwardedProps,externalSlotProps));\n const componentsPropsWithoutEventHandlers=omitEventHandlers_omitEventHandlers(externalSlotProps);\n const otherPropsWithoutEventHandlers=omitEventHandlers_omitEventHandlers(externalForwardedProps);\n const internalSlotProps=getSlotProps(eventHandlers);\n\n // The order of classes is important here.\n // Emotion (that we use in libraries consuming Base UI) depends on this order\n // to properly override style. It requires the most important classes to be last\n // (see https://github.com/mui/material-ui/pull/33205) for the related discussion.\n const joinedClasses=(0,clsx.A)(internalSlotProps==null ? void 0 :internalSlotProps.className,additionalProps==null ? void 0 :additionalProps.className,className,externalForwardedProps==null ? void 0 :externalForwardedProps.className,externalSlotProps==null ? void 0 :externalSlotProps.className);,internalSlotProps==null ? void 0 :internalSlotProps.style,additionalProps==null ? void 0 :additionalProps.style,externalForwardedProps==null ? void 0 :externalForwardedProps.style,externalSlotProps==null ? void 0 :externalSlotProps.style);,internalSlotProps,additionalProps,otherPropsWithoutEventHandlers,componentsPropsWithoutEventHandlers);\n if (joinedClasses.length>0){\n props.className=joinedClasses;\n}\n if (Object.keys(mergedStyle).length>0){\n props.style=mergedStyle;\n}\n return{\n props,\n internalRef:internalSlotProps.ref\n};\n}\n const mergeSlotProps_mergeSlotProps=(mergeSlotProps);\n;// ./node_modules/@mui/utils/esm/resolveComponentProps/resolveComponentProps.js\n\nfunction resolveComponentProps(componentProps,ownerState,slotState){\n if (typeof componentProps==='function'){\n return componentProps(ownerState,slotState);\n}\n return componentProps;\n}\n const resolveComponentProps_resolveComponentProps=(resolveComponentProps);\n;// ./node_modules/@mui/utils/esm/useSlotProps/useSlotProps.js\n'use client';\n\n\n\nconst useSlotProps_excluded=[\"elementType\",\"externalSlotProps\",\"ownerState\",\"skipResolvingSlotProps\"];\n\n\n\n\n\nfunction useSlotProps(parameters){\n var _parameters$additiona;\n const{\n elementType,\n externalSlotProps,\n ownerState,\n skipResolvingSlotProps=false\n}=parameters,\n rest=(0,objectWithoutPropertiesLoose.A)(parameters,useSlotProps_excluded);:resolveComponentProps_resolveComponentProps(externalSlotProps,ownerState);\n const{\n props:mergedProps,\n internalRef\n},rest,{\n externalSlotProps:resolvedComponentsProps\n}));\n const ref=(0,useForkRef.A)(internalRef,resolvedComponentsProps==null ? void 0 :resolvedComponentsProps.ref,(_parameters$additiona=parameters.additionalProps)==null ? void 0 :_parameters$additiona.ref);,mergedProps,{\n ref\n}),ownerState);\n return props;\n}\n const useSlotProps_useSlotProps=(useSlotProps);\n;// ./node_modules/@mui/material/List/ListContext.js\n'use client';);\n const List_ListContext=(ListContext);\n;// ./node_modules/@mui/material/List/listClasses.js\n\n\nfunction getListUtilityClass(slot){\n return (0,generateUtilityClass_generateUtilityClass.Ay)('MuiList',slot);\n}\nconst listClasses=(0,generateUtilityClasses.A)('MuiList',['root','padding','dense','subheader']);\n const List_listClasses=((null && (listClasses)));\n;// ./node_modules/@mui/material/List/List.js\n'use client';\n\n\n\nconst List_excluded=[\"children\",\"className\",\"component\",\"dense\",\"disablePadding\",\"subheader\"];\n\n\n\n\n\n\n\n\n\n\nconst List_useUtilityClasses=ownerState=>{\n const{\n classes,\n disablePadding,\n dense,\n subheader\n}=ownerState;\n const slots={\n root:['root',!disablePadding && 'padding',dense && 'dense',subheader && 'subheader']\n};\n return (0,composeClasses.A)(slots,getListUtilityClass,classes);\n};\nconst ListRoot=(0,styled.Ay)('ul',{\n name:'MuiList',\n slot:'Root',\n overridesResolver:(props,styles)=>{\n const{\n ownerState\n}=props;\n return [styles.root,!ownerState.disablePadding && styles.padding,ownerState.dense && styles.dense,ownerState.subheader && styles.subheader];\n}\n})(({\n ownerState\n})=>(0,esm_extends.A)({\n listStyle:'none',\n margin:0,\n padding:0,\n position:'relative'\n},!ownerState.disablePadding &&{\n paddingTop:8,\n paddingBottom:8\n},ownerState.subheader &&{\n paddingTop:0\n}));\nconst List=external_React_.forwardRef(function List(inProps,ref){\n const props=(0,DefaultPropsProvider.b)({\n props:inProps,\n name:'MuiList'\n});\n const{\n children,\n className,\n component='ul',\n dense=false,\n disablePadding=false,\n subheader\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,List_excluded);\n const context=external_React_.useMemo(()=>({\n dense\n}),[dense]);,props,{\n component,\n dense,\n disablePadding\n});\n const classes=List_useUtilityClasses(ownerState);\n return (0,jsx_runtime.jsx)(List_ListContext.Provider,{\n value:context,\n children:(0,jsx_runtime.jsxs)(ListRoot,(0,esm_extends.A)({\n as:component,\n className:(0,clsx.A)(classes.root,className),\n ref:ref,\n ownerState:ownerState\n},other,{\n children:[subheader,children]\n}))\n});\n});\n false ? 0 :void 0;\n const List_List=(List);\n;// ./node_modules/@mui/utils/esm/getScrollbarSize/getScrollbarSize.js\n// A change of the browser zoom change the scrollbar size.\n// Credit https://github.com/twbs/bootstrap/blob/488fd8afc535ca3a6ad4dc581f5e89217b6a36ac/js/src/util/scrollbar.js#L14-L18\nfunction getScrollbarSize(doc){\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n const documentWidth=doc.documentElement.clientWidth;\n return Math.abs(window.innerWidth - documentWidth);\n}\n;// ./node_modules/@mui/material/utils/getScrollbarSize.js\n\n const utils_getScrollbarSize=(getScrollbarSize);\n;// ./node_modules/@mui/material/MenuList/MenuList.js\n'use client';\n\n\n\nconst MenuList_excluded=[\"actions\",\"autoFocus\",\"autoFocusItem\",\"children\",\"className\",\"disabledItemsFocusable\",\"disableListWrap\",\"onKeyDown\",\"variant\"];\n\n\n\n\n\n\n\n\n\nfunction nextItem(list,item,disableListWrap){\n if (list===item){\n return list.firstChild;\n}\n if (item && item.nextElementSibling){\n return item.nextElementSibling;\n}\n return disableListWrap ? null:list.firstChild;\n}\nfunction previousItem(list,item,disableListWrap){\n if (list===item){\n return disableListWrap ? list.firstChild:list.lastChild;\n}\n if (item && item.previousElementSibling){\n return item.previousElementSibling;\n}\n return disableListWrap ? null:list.lastChild;\n}\nfunction textCriteriaMatches(nextFocus,textCriteria){\n if (textCriteria===undefined){\n return true;\n}\n let text=nextFocus.innerText;\n if (text===undefined){\n // jsdom doesn't support innerText\n text=nextFocus.textContent;\n}\n text=text.trim().toLowerCase();\n if (text.length===0){\n return false;\n}\n if (textCriteria.repeating){\n return text[0]===textCriteria.keys[0];\n}\n return text.indexOf(textCriteria.keys.join(''))===0;\n}\nfunction moveFocus(list,currentFocus,disableListWrap,disabledItemsFocusable,traversalFunction,textCriteria){\n let wrappedOnce=false;\n let nextFocus=traversalFunction(list,currentFocus,currentFocus ? disableListWrap :false);\n while (nextFocus){\n // Prevent infinite loop.\n if (nextFocus===list.firstChild){\n if (wrappedOnce){\n return false;\n}\n wrappedOnce=true;\n}\n\n // Same logic as useAutocomplete.js\n const nextFocusDisabled=disabledItemsFocusable ? false :nextFocus.disabled || nextFocus.getAttribute('aria-disabled')==='true';\n if (!nextFocus.hasAttribute('tabindex') || !textCriteriaMatches(nextFocus,textCriteria) || nextFocusDisabled){\n // Move to the next element.\n nextFocus=traversalFunction(list,nextFocus,disableListWrap);\n}else{\n nextFocus.focus();\n return true;\n}\n}\n return false;\n}\n\n\nconst MenuList=external_React_.forwardRef(function MenuList(props,ref){\n const{\n // private\n // eslint-disable-next-line react/prop-types\n actions,\n autoFocus=false,\n autoFocusItem=false,\n children,\n className,\n disabledItemsFocusable=false,\n disableListWrap=false,\n onKeyDown,\n variant='selectedMenu'\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,MenuList_excluded);\n const listRef=external_React_.useRef(null);\n const textCriteriaRef=external_React_.useRef({\n keys:[],\n repeating:true,\n previousKeyMatched:true,\n lastTime:null\n});\n (0,utils_useEnhancedEffect.A)(()=>{\n if (autoFocus){\n listRef.current.focus();\n}\n},[autoFocus]);\n external_React_.useImperativeHandle(actions,()=>({\n adjustStyleForScrollbar:(containerElement,{\n direction\n})=>{\n // Let's ignore that piece of logic if users are already overriding the width\n // of the menu.\n const noExplicitWidth=!listRef.current.style.width;\n if (containerElement.clientHeight < listRef.current.clientHeight && noExplicitWidth){\n const scrollbarSize=`${utils_getScrollbarSize((0,ownerDocument.A)(containerElement))}px`;\n listRef.current.style[direction==='rtl' ? 'paddingLeft':'paddingRight']=scrollbarSize;\n listRef.current.style.width=`calc(100% + ${scrollbarSiz)})`;\n}\n return listRef.current;\n}\n}),[]);\n const handleKeyDown=event=>{\n const list=listRef.current;\n const key=event.key;\n \n const currentFocus=(0,ownerDocument.A)(list).activeElement;\n if (key==='ArrowDown'){\n // Prevent scroll of the page\n event.preventDefault();\n moveFocus(list,currentFocus,disableListWrap,disabledItemsFocusable,nextItem);\n}else if (key==='ArrowUp'){\n event.preventDefault();\n moveFocus(list,currentFocus,disableListWrap,disabledItemsFocusable,previousItem);\n}else if (key==='Home'){\n event.preventDefault();\n moveFocus(list,null,disableListWrap,disabledItemsFocusable,nextItem);\n}else if (key==='End'){\n event.preventDefault();\n moveFocus(list,null,disableListWrap,disabledItemsFocusable,previousItem);\n}else if (key.length===1){\n const criteria=textCriteriaRef.current;\n const lowerKey=key.toLowerCase();\n const currTime=performance.now();\n if (criteria.keys.length>0){\n // Reset\n if (currTime - criteria.lastTime>500){\n criteria.keys=[];\n criteria.repeating=true;\n criteria.previousKeyMatched=true;\n}else if (criteria.repeating && lowerKey !==criteria.keys[0]){\n criteria.repeating=false;\n}\n}\n criteria.lastTime=currTime;\n criteria.keys.push(lowerKey);\n const keepFocusOnCurrent=currentFocus && !criteria.repeating && textCriteriaMatches(currentFocus,criteria);\n if (criteria.previousKeyMatched && (keepFocusOnCurrent || moveFocus(list,currentFocus,false,disabledItemsFocusable,nextItem,criteria))){\n event.preventDefault();\n}else{\n criteria.previousKeyMatched=false;\n}\n}\n if (onKeyDown){\n onKeyDown(event);\n}\n};\n const handleRef=(0,utils_useForkRef.A)(listRef,ref);\n\n \n let activeItemIndex=-1;\n // since we inject focus related props into children we have to do a lookahead\n // to check if there is a `selected` item. We're looking for the last `selected`\n // item and use the first valid item as a fallback\n external_React_.Children.forEach(children,(child,index)=>{\n if (! external_React_.isValidElement(child)){\n if (activeItemIndex===index){\n activeItemIndex+=1;\n if (activeItemIndex>=children.length){\n // there are no focusable items within the list.\n activeItemIndex=-1;\n}\n}\n return;\n}\n if (!child.props.disabled){\n if (variant==='selectedMenu' && child.props.selected){\n activeItemIndex=index;\n}else if (activeItemIndex===-1){\n activeItemIndex=index;\n}\n}\n if (activeItemIndex===index && (child.props.disabled || child.props.muiSkipListHighlight || child.type.muiSkipListHighlight)){\n activeItemIndex+=1;\n if (activeItemIndex>=children.length){\n // there are no focusable items within the list.\n activeItemIndex=-1;\n}\n}\n});\n const items=external_React_.Children.map(children,(child,index)=>{\n if (index===activeItemIndex){\n const newChildProps={};\n if (autoFocusItem){\n newChildProps.autoFocus=true;\n}\n if (child.props.tabIndex===undefined && variant==='selectedMenu'){\n newChildProps.tabIndex=0;\n}\n return external_React_.cloneElement(child,newChildProps);\n}\n return child;\n});\n return (0,jsx_runtime.jsx)(List_List,(0,esm_extends.A)({\n role:\"menu\",\n ref:handleRef,\n className:className,\n onKeyDown:handleKeyDown,\n tabIndex:autoFocus ? 0:-1\n},other,{\n children:items\n}));\n});\n false ? 0 :void 0;\n const MenuList_MenuList=(MenuList);\n// EXTERNAL MODULE:./node_modules/@mui/material/utils/debounce.js\nvar utils_debounce=__webpack_require__(1935);\n// EXTERNAL MODULE:./node_modules/@mui/material/utils/ownerWindow.js\nvar utils_ownerWindow=__webpack_require__(3749);\n// EXTERNAL MODULE:./node_modules/@mui/utils/esm/useTimeout/useTimeout.js+2 modules\nvar useTimeout=__webpack_require__(3068);\n;// ./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js\nfunction _setPrototypeOf(t,e){\n return _setPrototypeOf=Object.setPrototypeOf ? Object.setPrototypeOf.bind() :function (t,e){\n return t.__proto__=e,t;\n},_setPrototypeOf(t,e);\n}\n\n;// ./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js\n\nfunction _inheritsLoose(t,o){\n t.prototype=Object.create(o.prototype),t.prototype.constructor=t,_setPrototypeOf(t,o);\n}\n\n;// ./node_modules/react-transition-group/esm/config.js\n const config=({\n disabled:false\n});\n;// ./node_modules/react-transition-group/esm/TransitionGroupContext.js\n\n const TransitionGroupContext=(external_React_default().createContext(null));\n;// ./node_modules/react-transition-group/esm/utils/reflow.js\nvar forceReflow=function forceReflow(node){\n return node.scrollTop;\n};\n;// ./node_modules/react-transition-group/esm/Transition.js\n\n\n\n\n\n\n\n\n\nvar UNMOUNTED='unmounted';\nvar EXITED='exited';\nvar ENTERING='entering';\nvar ENTERED='entered';\nvar EXITING='exiting';\n\n\nvar Transition=function (_React$Component){\n _inheritsLoose(Transition,_React$Component);\n\n function Transition(props,context){\n var _this;\n\n _this=_React$Component.call(this,props,context) || this;\n var parentGroup=context;// In the context of a TransitionGroup all enters are really appears\n\n var appear=parentGroup && !parentGroup.isMounting ? props.enter :props.appear;\n var initialStatus;\n _this.appearStatus=null;\n\n if (props.in){\n if (appear){\n initialStatus=EXITED;\n _this.appearStatus=ENTERING;\n}else{\n initialStatus=ENTERED;\n}\n}else{\n if (props.unmountOnExit || props.mountOnEnter){\n initialStatus=UNMOUNTED;\n}else{\n initialStatus=EXITED;\n}\n}\n\n _this.state={\n status:initialStatus\n};\n _this.nextCallback=null;\n return _this;\n}\n\n Transition.getDerivedStateFromProps=function getDerivedStateFromProps(_ref,prevState){\n var nextIn=_ref.in;\n\n if (nextIn && prevState.status===UNMOUNTED){\n return{\n status:EXITED\n};\n}\n\n return null;\n}// getSnapshotBeforeUpdate(prevProps){\n // let nextStatus=null\n // if (prevProps !==this.props){\n // const{status}=this.state\n // if (this.props.in){\n // if (status !==ENTERING && status !==ENTERED){\n // nextStatus=ENTERING\n //}\n //}else{\n // if (status===ENTERING || status===ENTERED){\n // nextStatus=EXITING\n //}\n //}\n //}\n // return{nextStatus}\n //}\n;\n\n var _proto=Transition.prototype;\n\n _proto.componentDidMount=function componentDidMount(){\n this.updateStatus(true,this.appearStatus);\n};\n\n _proto.componentDidUpdate=function componentDidUpdate(prevProps){\n var nextStatus=null;\n\n if (prevProps !==this.props){\n var status=this.state.status;\n\n if (this.props.in){\n if (status !==ENTERING && status !==ENTERED){\n nextStatus=ENTERING;\n}\n}else{\n if (status===ENTERING || status===ENTERED){\n nextStatus=EXITING;\n}\n}\n}\n\n this.updateStatus(false,nextStatus);\n};\n\n _proto.componentWillUnmount=function componentWillUnmount(){\n this.cancelNextCallback();\n};\n\n _proto.getTimeouts=function getTimeouts(){\n var timeout=this.props.timeout;\n var exit,enter,appear;\n exit=enter=appear=timeout;\n\n if (timeout !=null && typeof timeout !=='number'){\n exit=timeout.exit;\n enter=timeout.enter;// TODO:remove fallback for next major\n\n appear=timeout.appear !==undefined ? timeout.appear:enter;\n}\n\n return{\n exit:exit,\n enter:enter,\n appear:appear\n};\n};\n\n _proto.updateStatus=function updateStatus(mounting,nextStatus){\n if (mounting===void 0){\n mounting=false;\n}\n\n if (nextStatus !==null){\n // nextStatus will always be ENTERING or EXITING.\n this.cancelNextCallback();\n\n if (nextStatus===ENTERING){\n if (this.props.unmountOnExit || this.props.mountOnEnter){\n var node=this.props.nodeRef ? this.props.nodeRef.current:external_ReactDOM_default().findDOMNode(this);// https://github.com/reactjs/react-transition-group/pull/749\n // With unmountOnExit or mountOnEnter,the enter animation should happen at the transition between `exited` and `entering`.\n // To make the animation happen,we have to separate each rendering and avoid being processed as batched.\n\n if (node) forceReflow(node);\n}\n\n this.performEnter(mounting);\n}else{\n this.performExit();\n}\n}else if (this.props.unmountOnExit && this.state.status===EXITED){\n this.setState({\n status:UNMOUNTED\n});\n}\n};\n\n _proto.performEnter=function performEnter(mounting){\n var _this2=this;\n\n var enter=this.props.enter;\n var appearing=this.context ? this.context.isMounting :mounting;\n\n var _ref2=this.props.nodeRef ? [appearing] :[external_ReactDOM_default().findDOMNode(this),appearing],\n maybeNode=_ref2[0],\n maybeAppearing=_ref2[1];\n\n var timeouts=this.getTimeouts();\n var enterTimeout=appearing ? timeouts.appear :timeouts.enter;// no enter animation skip right to ENTERED\n // if we are mounting and running this it means appear _must_ be set\n\n if (!mounting && !enter || config.disabled){\n this.safeSetState({\n status:ENTERED\n},function (){\n _this2.props.onEntered(maybeNode);\n});\n return;\n}\n\n this.props.onEnter(maybeNode,maybeAppearing);\n this.safeSetState({\n status:ENTERING\n},function (){\n _this2.props.onEntering(maybeNode,maybeAppearing);\n\n _this2.onTransitionEnd(enterTimeout,function (){\n _this2.safeSetState({\n status:ENTERED\n},function (){\n _this2.props.onEntered(maybeNode,maybeAppearing);\n});\n});\n});\n};\n\n _proto.performExit=function performExit(){\n var _this3=this;\n\n var exit=this.props.exit;\n var timeouts=this.getTimeouts();\n var maybeNode=this.props.nodeRef ? undefined :external_ReactDOM_default().findDOMNode(this);// no exit animation skip right to EXITED\n\n if (!exit || config.disabled){\n this.safeSetState({\n status:EXITED\n},function (){\n _this3.props.onExited(maybeNode);\n});\n return;\n}\n\n this.props.onExit(maybeNode);\n this.safeSetState({\n status:EXITING\n},function (){\n _this3.props.onExiting(maybeNode);\n\n _this3.onTransitionEnd(timeouts.exit,function (){\n _this3.safeSetState({\n status:EXITED\n},function (){\n _this3.props.onExited(maybeNode);\n});\n});\n});\n};\n\n _proto.cancelNextCallback=function cancelNextCallback(){\n if (this.nextCallback !==null){\n this.nextCallback.cancel();\n this.nextCallback=null;\n}\n};\n\n _proto.safeSetState=function safeSetState(nextState,callback){\n // This shouldn't be necessary,but there are weird race conditions with\n // setState callbacks and unmounting in testing,so always make sure that\n // we can cancel any pending setState callbacks after we unmount.\n callback=this.setNextCallback(callback);\n this.setState(nextState,callback);\n};\n\n _proto.setNextCallback=function setNextCallback(callback){\n var _this4=this;\n\n var active=true;\n\n this.nextCallback=function (event){\n if (active){\n active=false;\n _this4.nextCallback=null;\n callback(event);\n}\n};\n\n this.nextCallback.cancel=function (){\n active=false;\n};\n\n return this.nextCallback;\n};\n\n _proto.onTransitionEnd=function onTransitionEnd(timeout,handler){\n this.setNextCallback(handler);\n var node=this.props.nodeRef ? this.props.nodeRef.current :external_ReactDOM_default().findDOMNode(this);\n var doesNotHaveTimeoutOrListener=timeout==null && !this.props.addEndListener;\n\n if (!node || doesNotHaveTimeoutOrListener){\n setTimeout(this.nextCallback,0);\n return;\n}\n\n if (this.props.addEndListener){\n var _ref3=this.props.nodeRef ? [this.nextCallback]:[node,this.nextCallback],\n maybeNode=_ref3[0],\n maybeNextCallback=_ref3[1];\n\n this.props.addEndListener(maybeNode,maybeNextCallback);\n}\n\n if (timeout !=null){\n setTimeout(this.nextCallback,timeout);\n}\n};\n\n _proto.render=function render(){\n var status=this.state.status;\n\n if (status===UNMOUNTED){\n return null;\n}\n\n var _this$props=this.props,\n children=_this$props.children,\n _in=_this$props.in,\n _mountOnEnter=_this$props.mountOnEnter,\n _unmountOnExit=_this$props.unmountOnExit,\n _appear=_this$props.appear,\n _enter=_this$props.enter,\n _exit=_this$props.exit,\n _timeout=_this$props.timeout,\n _addEndListener=_this$props.addEndListener,\n _onEnter=_this$props.onEnter,\n _onEntering=_this$props.onEntering,\n _onEntered=_this$props.onEntered,\n _onExit=_this$props.onExit,\n _onExiting=_this$props.onExiting,\n _onExited=_this$props.onExited,\n _nodeRef=_this$props.nodeRef,\n childProps=(0,objectWithoutPropertiesLoose.A)(_this$props,[\"children\",\"in\",\"mountOnEnter\",\"unmountOnExit\",\"appear\",\"enter\",\"exit\",\"timeout\",\"addEndListener\",\"onEnter\",\"onEntering\",\"onEntered\",\"onExit\",\"onExiting\",\"onExited\",\"nodeRef\"]);\n\n return (\n \n // allows for nested Transitions\n external_React_default().createElement(TransitionGroupContext.Provider,{\n value:null\n},typeof children==='function' ? children(status,childProps):external_React_default().cloneElement(external_React_default().Children.only(children),childProps))\n);\n};\n\n return Transition;\n}((external_React_default()).Component);\n\nTransition.contextType=TransitionGroupContext;;\n\nTransition.defaultProps={\n in:false,\n mountOnEnter:false,\n unmountOnExit:false,\n appear:false,\n enter:true,\n exit:true,\n onEnter:noop,\n onEntering:noop,\n onEntered:noop,\n onExit:noop,\n onExiting:noop,\n onExited:noop\n};\nTransition.UNMOUNTED=UNMOUNTED;\nTransition.EXITED=EXITED;\nTransition.ENTERING=ENTERING;\nTransition.ENTERED=ENTERED;\nTransition.EXITING=EXITING;\n const esm_Transition=(Transition);\n;// ./node_modules/@mui/material/styles/useTheme.js\n'use client';\n\n\n\n\n\nfunction styles_useTheme_useTheme(){\n const theme=esm_useTheme(styles_defaultTheme.A);\n return theme[identifier.A] || theme;\n}\n;// ./node_modules/@mui/material/transitions/utils.js\nconst reflow=node=>node.scrollTop;\nfunction getTransitionProps(props,options){\n var _style$transitionDura,_style$transitionTimi;\n const{\n timeout,\n easing,\n style={}\n}=props;\n return{\n duration:(_style$transitionDura=style.transitionDuration) !=null ? _style$transitionDura:typeof timeout==='number' ? timeout:timeout[options.mode] || 0,\n easing:(_style$transitionTimi=style.transitionTimingFunction) !=null ? _style$transitionTimi:typeof easing==='object' ? easing[options.mode]:easing,\n delay:style.transitionDelay\n};\n}\n;// ./node_modules/@mui/material/Grow/Grow.js\n'use client';\n\n\n\nconst Grow_excluded=[\"addEndListener\",\"appear\",\"children\",\"easing\",\"in\",\"onEnter\",\"onEntered\",\"onEntering\",\"onExit\",\"onExited\",\"onExiting\",\"style\",\"timeout\",\"TransitionComponent\"];\n\n\n\n\n\n\n\n\n\n\nfunction getScale(value){\n return `scale(${value},${value ** 2})`;\n}\nconst Grow_styles={\n entering:{\n opacity:1,\n transform:getScale(1)\n},\n entered:{\n opacity:1,\n transform:'none'\n}\n};\n\n\nconst isWebKit154=typeof navigator !=='undefined' && /^((?!chrome|android).)*(safari|mobile)/i.test(navigator.userAgent) && /(os |version\\/)15(.|_)4/i.test(navigator.userAgent);\n\n\nconst Grow=external_React_.forwardRef(function Grow(props,ref){\n const{\n addEndListener,\n appear=true,\n children,\n easing,\n in:inProp,\n onEnter,\n onEntered,\n onEntering,\n onExit,\n onExited,\n onExiting,\n style,\n timeout='auto',\n // eslint-disable-next-line react/prop-types\n TransitionComponent=esm_Transition\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,Grow_excluded);\n const timer=(0,useTimeout.A)();\n const autoTimeout=external_React_.useRef();\n const theme=styles_useTheme_useTheme();\n const nodeRef=external_React_.useRef(null);\n const handleRef=(0,utils_useForkRef.A)(nodeRef,getReactElementRef(children),ref);\n const normalizedTransitionCallback=callback=>maybeIsAppearing=>{\n if (callback){\n const node=nodeRef.current;\n\n // onEnterXxx and onExitXxx callbacks have a different arguments.length value.\n if (maybeIsAppearing===undefined){\n callback(node);\n}else{\n callback(node,maybeIsAppearing);\n}\n}\n};\n const handleEntering=normalizedTransitionCallback(onEntering);\n const handleEnter=normalizedTransitionCallback((node,isAppearing)=>{\n reflow(node);// So the animation always start from the start.\n\n const{\n duration:transitionDuration,\n delay,\n easing:transitionTimingFunction\n}=getTransitionProps({\n style,\n timeout,\n easing\n},{\n mode:'enter'\n});\n let duration;\n if (timeout==='auto'){\n duration=theme.transitions.getAutoHeightDuration(node.clientHeight);\n autoTimeout.current=duration;\n}else{\n duration=transitionDuration;\n}\n node.style.transition=[theme.transitions.create('opacity',{\n duration,\n delay\n}),theme.transitions.create('transform',{\n duration:isWebKit154 ? duration:duration * .666,\n delay,\n easing:transitionTimingFunction\n})].join(',');\n if (onEnter){\n onEnter(node,isAppearing);\n}\n});\n const handleEntered=normalizedTransitionCallback(onEntered);\n const handleExiting=normalizedTransitionCallback(onExiting);\n const handleExit=normalizedTransitionCallback(node=>{\n const{\n duration:transitionDuration,\n delay,\n easing:transitionTimingFunction\n}=getTransitionProps({\n style,\n timeout,\n easing\n},{\n mode:'exit'\n});\n let duration;\n if (timeout==='auto'){\n duration=theme.transitions.getAutoHeightDuration(node.clientHeight);\n autoTimeout.current=duration;\n}else{\n duration=transitionDuration;\n}\n node.style.transition=[theme.transitions.create('opacity',{\n duration,\n delay\n}),theme.transitions.create('transform',{\n duration:isWebKit154 ? duration:duration * .666,\n delay:isWebKit154 ? delay:delay || duration * .333,\n easing:transitionTimingFunction\n})].join(',');\n node.style.opacity=0;\n node.style.transform=getScale(.75);\n if (onExit){\n onExit(node);\n}\n});\n const handleExited=normalizedTransitionCallback(onExited);\n const handleAddEndListener=next=>{\n if (timeout==='auto'){\n timer.start(autoTimeout.current || 0,next);\n}\n if (addEndListener){\n // Old call signature before `react-transition-group` implemented `nodeRef`\n addEndListener(nodeRef.current,next);\n}\n};\n return (0,jsx_runtime.jsx)(TransitionComponent,(0,esm_extends.A)({\n appear:appear,\n in:inProp,\n nodeRef:nodeRef,\n onEnter:handleEnter,\n onEntered:handleEntered,\n onEntering:handleEntering,\n onExit:handleExit,\n onExited:handleExited,\n onExiting:handleExiting,\n addEndListener:handleAddEndListener,\n timeout:timeout==='auto' ? null:timeout\n},other,{\n children:(state,childProps)=>{\n return external_React_.cloneElement(children,(0,esm_extends.A)({\n style:(0,esm_extends.A)({\n opacity:0,\n transform:getScale(.75),\n visibility:state==='exited' && !inProp ? 'hidden':undefined\n},Grow_styles[state],style,children.props.style),\n ref:handleRef\n},childProps));\n}\n}));\n});\n false ? 0 :void 0;\nGrow.muiSupportAuto=true;\n const Grow_Grow=(Grow);\n// EXTERNAL MODULE:./node_modules/@mui/utils/esm/ownerDocument/ownerDocument.js\nvar ownerDocument_ownerDocument=__webpack_require__(2325);\n;// ./node_modules/@mui/material/Unstable_TrapFocus/FocusTrap.js\n'use client';\n\n\n\n\n\n\n\n// Inspired by https://github.com/focus-trap/tabbable\nconst candidatesSelector=['input','select','textarea','a[href]','button','[tabindex]','audio[controls]','video[controls]','[contenteditable]:not([contenteditable=\"false\"])'].join(',');\nfunction getTabIndex(node){\n const tabindexAttr=parseInt(node.getAttribute('tabindex') || '',10);\n if (!Number.isNaN(tabindexAttr)){\n return tabindexAttr;\n}\n\n // Browsers do not return `tabIndex` correctly for contentEditable nodes;\n // https://bugs.chromium.org/p/chromium/issues/detail?id=661108&q=contenteditable%20tabindex&can=2\n // so if they don't have a tabindex attribute specifically set,assume it's 0.\n // in Chrome,<details/>,<audio controls/>and <video controls/>elements get a default\n // `tabIndex` of -1 when the 'tabindex' attribute isn't specified in the DOM,\n // yet they are still part of the regular tab order;in FF,they get a default\n // `tabIndex` of 0;since Chrome still puts those elements in the regular tab\n // order,consider their tab index to be 0.\n if (node.contentEditable==='true' || (node.nodeName==='AUDIO' || node.nodeName==='VIDEO' || node.nodeName==='DETAILS') && node.getAttribute('tabindex')===null){\n return 0;\n}\n return node.tabIndex;\n}\nfunction isNonTabbableRadio(node){\n if (node.tagName !=='INPUT' || node.type !=='radio'){\n return false;\n}\n if (!node.name){\n return false;\n}\n const getRadio=selector=>node.ownerDocument.querySelector(`input[type=\"radio\"]${selector}`);\n let roving=getRadio(`[name=\"${node.name}\"]:checked`);\n if (!roving){\n roving=getRadio(`[name=\"${node.name}\"]`);\n}\n return roving !==node;\n}\nfunction isNodeMatchingSelectorFocusable(node){\n if (node.disabled || node.tagName==='INPUT' && node.type==='hidden' || isNonTabbableRadio(node)){\n return false;\n}\n return true;\n}\nfunction defaultGetTabbable(root){\n const regularTabNodes=[];\n const orderedTabNodes=[];\n Array.from(root.querySelectorAll(candidatesSelector)).forEach((node,i)=>{\n const nodeTabIndex=getTabIndex(node);\n if (nodeTabIndex===-1 || !isNodeMatchingSelectorFocusable(node)){\n return;\n}\n if (nodeTabIndex===0){\n regularTabNodes.push(node);\n}else{\n orderedTabNodes.push({\n documentOrder:i,\n tabIndex:nodeTabIndex,\n node:node\n});\n}\n});\n return orderedTabNodes.sort((a,b)=>a.tabIndex===b.tabIndex ? a.documentOrder - b.documentOrder:a.tabIndex - b.tabIndex).map(a=>a.node).concat(regularTabNodes);\n}\nfunction defaultIsEnabled(){\n return true;\n}\n\n\nfunction FocusTrap(props){\n const{\n children,\n disableAutoFocus=false,\n disableEnforceFocus=false,\n disableRestoreFocus=false,\n getTabbable=defaultGetTabbable,\n isEnabled=defaultIsEnabled,\n open\n}=props;\n const ignoreNextEnforceFocus=external_React_.useRef(false);\n const sentinelStart=external_React_.useRef(null);\n const sentinelEnd=external_React_.useRef(null);\n const nodeToRestore=external_React_.useRef(null);\n const reactFocusEventTarget=external_React_.useRef(null);\n // This variable is useful when disableAutoFocus is true.\n // It waits for the active element to move into the component to activate.\n const activated=external_React_.useRef(false);\n const rootRef=external_React_.useRef(null);\n const handleRef=(0,useForkRef.A)(getReactElementRef(children),rootRef);\n const lastKeydown=external_React_.useRef(null);\n external_React_.useEffect(()=>{\n // We might render an empty child.\n if (!open || !rootRef.current){\n return;\n}\n activated.current=!disableAutoFocus;\n},[disableAutoFocus,open]);\n external_React_.useEffect(()=>{\n // We might render an empty child.\n if (!open || !rootRef.current){\n return;\n}\n const doc=(0,ownerDocument_ownerDocument.A)(rootRef.current);\n if (!rootRef.current.contains(doc.activeElement)){\n if (!rootRef.current.hasAttribute('tabIndex')){\n if (false) // removed by dead control flow\n{}\n rootRef.current.setAttribute('tabIndex','-1');\n}\n if (activated.current){\n rootRef.current.focus();\n}\n}\n return ()=>{\n // restoreLastFocus()\n if (!disableRestoreFocus){\n // In IE11 it is possible for document.activeElement to be null resulting\n // in nodeToRestore.current being null.\n // Not all elements in IE11 have a focus method.\n // Once IE11 support is dropped the focus() call can be unconditional.\n if (nodeToRestore.current && nodeToRestore.current.focus){\n ignoreNextEnforceFocus.current=true;\n nodeToRestore.current.focus();\n}\n nodeToRestore.current=null;\n}\n};\n // Missing `disableRestoreFocus` which is fine.\n // We don't support changing that prop on an open FocusTrap\n // eslint-disable-next-line react-hooks/exhaustive-deps\n},[open]);\n external_React_.useEffect(()=>{\n // We might render an empty child.\n if (!open || !rootRef.current){\n return;\n}\n const doc=(0,ownerDocument_ownerDocument.A)(rootRef.current);\n const loopFocus=nativeEvent=>{\n lastKeydown.current=nativeEvent;\n if (disableEnforceFocus || !isEnabled() || nativeEvent.key !=='Tab'){\n return;\n}\n\n // Make sure the next tab starts from the right place.\n // doc.activeElement refers to the origin.\n if (doc.activeElement===rootRef.current && nativeEvent.shiftKey){\n // We need to ignore the next contain as\n // it will try to move the focus back to the rootRef element.\n ignoreNextEnforceFocus.current=true;\n if (sentinelEnd.current){\n sentinelEnd.current.focus();\n}\n}\n};\n const contain=()=>{\n const rootElement=rootRef.current;\n\n // Cleanup functions are executed lazily in React 17.\n // Contain can be called between the component being unmounted and its cleanup function being run.\n if (rootElement===null){\n return;\n}\n if (!doc.hasFocus() || !isEnabled() || ignoreNextEnforceFocus.current){\n ignoreNextEnforceFocus.current=false;\n return;\n}\n\n // The focus is already inside\n if (rootElement.contains(doc.activeElement)){\n return;\n}\n\n // The disableEnforceFocus is set and the focus is outside of the focus trap (and sentinel nodes)\n if (disableEnforceFocus && doc.activeElement !==sentinelStart.current && doc.activeElement !==sentinelEnd.current){\n return;\n}\n\n // if the focus event is not coming from inside the children's react tree,reset the refs\n if (doc.activeElement !==reactFocusEventTarget.current){\n reactFocusEventTarget.current=null;\n}else if (reactFocusEventTarget.current !==null){\n return;\n}\n if (!activated.current){\n return;\n}\n let tabbable=[];\n if (doc.activeElement===sentinelStart.current || doc.activeElement===sentinelEnd.current){\n tabbable=getTabbable(rootRef.current);\n}\n\n // one of the sentinel nodes was focused,so move the focus\n // to the first/last tabbable element inside the focus trap\n if (tabbable.length>0){\n var _lastKeydown$current,_lastKeydown$current2;\n const isShiftTab=Boolean(((_lastKeydown$current=lastKeydown.current)==null ? void 0 :_lastKeydown$current.shiftKey) && ((_lastKeydown$current2=lastKeydown.current)==null ? void 0 :_lastKeydown$current2.key)==='Tab');\n const focusNext=tabbable[0];\n const focusPrevious=tabbable[tabbable.length - 1];\n if (typeof focusNext !=='string' && typeof focusPrevious !=='string'){\n if (isShiftTab){\n focusPrevious.focus();\n}else{\n focusNext.focus();\n}\n}\n // no tabbable elements in the trap focus or the focus was outside of the focus trap\n}else{\n rootElement.focus();\n}\n};\n doc.addEventListener('focusin',contain);\n doc.addEventListener('keydown',loopFocus,true);\n\n // With Edge,Safari and Firefox,no focus related events are fired when the focused area stops being a focused area.\n // for example https://bugzilla.mozilla.org/show_bug.cgi?id=559561.\n // Instead,we can look if the active element was restored on the BODY element.\n //\n // The whatwg spec defines how the browser should behave but does not explicitly mention any events:\n // https://html.spec.whatwg.org/multipage/interaction.html#focus-fixup-rule.\n const interval=setInterval(()=>{\n if (doc.activeElement && doc.activeElement.tagName==='BODY'){\n contain();\n}\n},50);\n return ()=>{\n clearInterval(interval);\n doc.removeEventListener('focusin',contain);\n doc.removeEventListener('keydown',loopFocus,true);\n};\n},[disableAutoFocus,disableEnforceFocus,disableRestoreFocus,isEnabled,open,getTabbable]);\n const onFocus=event=>{\n if (nodeToRestore.current===null){\n nodeToRestore.current=event.relatedTarget;\n}\n activated.current=true;\n reactFocusEventTarget.current=event.target;\n const childrenPropsHandler=children.props.onFocus;\n if (childrenPropsHandler){\n childrenPropsHandler(event);\n}\n};\n const handleFocusSentinel=event=>{\n if (nodeToRestore.current===null){\n nodeToRestore.current=event.relatedTarget;\n}\n activated.current=true;\n};\n return (0,jsx_runtime.jsxs)(external_React_.Fragment,{\n children:[(0,jsx_runtime.jsx)(\"div\",{\n tabIndex:open ? 0:-1,\n onFocus:handleFocusSentinel,\n ref:sentinelStart,\n \"data-testid\":\"sentinelStart\"\n}),external_React_.cloneElement(children,{\n ref:handleRef,\n onFocus\n}),(0,jsx_runtime.jsx)(\"div\",{\n tabIndex:open ? 0:-1,\n onFocus:handleFocusSentinel,\n ref:sentinelEnd,\n \"data-testid\":\"sentinelEnd\"\n})]\n});\n}\n false ? 0 :void 0;\n const Unstable_TrapFocus_FocusTrap=(FocusTrap);\n// EXTERNAL MODULE:./node_modules/@mui/utils/esm/setRef/setRef.js\nvar setRef=__webpack_require__(7365);\n;// ./node_modules/@mui/material/Portal/Portal.js\n'use client';\n\n\n\n\n\n\nfunction getContainer(container){\n return typeof container==='function' ? container():container;\n}\n\n\nconst Portal=external_React_.forwardRef(function Portal(props,forwardedRef){\n const{\n children,\n container,\n disablePortal=false\n}=props;\n const [mountNode,setMountNode]=external_React_.useState(null);\n const handleRef=(0,useForkRef.A)(external_React_.isValidElement(children) ? getReactElementRef(children) :null,forwardedRef);\n (0,useEnhancedEffect.A)(()=>{\n if (!disablePortal){\n setMountNode(getContainer(container) || document.body);\n}\n},[container,disablePortal]);\n (0,useEnhancedEffect.A)(()=>{\n if (mountNode && !disablePortal){\n (0,setRef.A)(forwardedRef,mountNode);\n return ()=>{\n (0,setRef.A)(forwardedRef,null);\n};\n}\n return undefined;\n},[forwardedRef,mountNode,disablePortal]);\n if (disablePortal){\n if (external_React_.isValidElement(children)){\n const newProps={\n ref:handleRef\n};\n return external_React_.cloneElement(children,newProps);\n}\n return (0,jsx_runtime.jsx)(external_React_.Fragment,{\n children:children\n});\n}\n return (0,jsx_runtime.jsx)(external_React_.Fragment,{\n children:mountNode ? external_ReactDOM_namespaceObject.createPortal(children,mountNode):mountNode\n});\n});\n false ? 0 :void 0;\n const Portal_Portal=(Portal);\n;// ./node_modules/@mui/material/Fade/Fade.js\n'use client';\n\n\n\nconst Fade_excluded=[\"addEndListener\",\"appear\",\"children\",\"easing\",\"in\",\"onEnter\",\"onEntered\",\"onEntering\",\"onExit\",\"onExited\",\"onExiting\",\"style\",\"timeout\",\"TransitionComponent\"];\n\n\n\n\n\n\n\n\n\nconst Fade_styles={\n entering:{\n opacity:1\n},\n entered:{\n opacity:1\n}\n};\n\n\nconst Fade=external_React_.forwardRef(function Fade(props,ref){\n const theme=styles_useTheme_useTheme();\n const defaultTimeout={\n enter:theme.transitions.duration.enteringScreen,\n exit:theme.transitions.duration.leavingScreen\n};\n const{\n addEndListener,\n appear=true,\n children,\n easing,\n in:inProp,\n onEnter,\n onEntered,\n onEntering,\n onExit,\n onExited,\n onExiting,\n style,\n timeout=defaultTimeout,\n // eslint-disable-next-line react/prop-types\n TransitionComponent=esm_Transition\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,Fade_excluded);\n const enableStrictModeCompat=true;\n const nodeRef=external_React_.useRef(null);\n const handleRef=(0,utils_useForkRef.A)(nodeRef,getReactElementRef(children),ref);\n const normalizedTransitionCallback=callback=>maybeIsAppearing=>{\n if (callback){\n const node=nodeRef.current;\n\n // onEnterXxx and onExitXxx callbacks have a different arguments.length value.\n if (maybeIsAppearing===undefined){\n callback(node);\n}else{\n callback(node,maybeIsAppearing);\n}\n}\n};\n const handleEntering=normalizedTransitionCallback(onEntering);\n const handleEnter=normalizedTransitionCallback((node,isAppearing)=>{\n reflow(node);// So the animation always start from the start.\n\n const transitionProps=getTransitionProps({\n style,\n timeout,\n easing\n},{\n mode:'enter'\n});\n node.style.webkitTransition=theme.transitions.create('opacity',transitionProps);\n node.style.transition=theme.transitions.create('opacity',transitionProps);\n if (onEnter){\n onEnter(node,isAppearing);\n}\n});\n const handleEntered=normalizedTransitionCallback(onEntered);\n const handleExiting=normalizedTransitionCallback(onExiting);\n const handleExit=normalizedTransitionCallback(node=>{\n const transitionProps=getTransitionProps({\n style,\n timeout,\n easing\n},{\n mode:'exit'\n});\n node.style.webkitTransition=theme.transitions.create('opacity',transitionProps);\n node.style.transition=theme.transitions.create('opacity',transitionProps);\n if (onExit){\n onExit(node);\n}\n});\n const handleExited=normalizedTransitionCallback(onExited);\n const handleAddEndListener=next=>{\n if (addEndListener){\n // Old call signature before `react-transition-group` implemented `nodeRef`\n addEndListener(nodeRef.current,next);\n}\n};\n return (0,jsx_runtime.jsx)(TransitionComponent,(0,esm_extends.A)({\n appear:appear,\n in:inProp,\n nodeRef:enableStrictModeCompat ? nodeRef:undefined,\n onEnter:handleEnter,\n onEntered:handleEntered,\n onEntering:handleEntering,\n onExit:handleExit,\n onExited:handleExited,\n onExiting:handleExiting,\n addEndListener:handleAddEndListener,\n timeout:timeout\n},other,{\n children:(state,childProps)=>{\n return external_React_.cloneElement(children,(0,esm_extends.A)({\n style:(0,esm_extends.A)({\n opacity:0,\n visibility:state==='exited' && !inProp ? 'hidden':undefined\n},Fade_styles[state],style,children.props.style),\n ref:handleRef\n},childProps));\n}\n}));\n});\n false ? 0 :void 0;\n const Fade_Fade=(Fade);\n;// ./node_modules/@mui/material/Backdrop/backdropClasses.js\n\n\nfunction getBackdropUtilityClass(slot){\n return (0,generateUtilityClass_generateUtilityClass.Ay)('MuiBackdrop',slot);\n}\nconst backdropClasses=(0,generateUtilityClasses.A)('MuiBackdrop',['root','invisible']);\n const Backdrop_backdropClasses=((null && (backdropClasses)));\n;// ./node_modules/@mui/material/Backdrop/Backdrop.js\n'use client';\n\n\n\nconst Backdrop_excluded=[\"children\",\"className\",\"component\",\"components\",\"componentsProps\",\"invisible\",\"open\",\"slotProps\",\"slots\",\"TransitionComponent\",\"transitionDuration\"];\n\n\n\n\n\n\n\n\n\nconst Backdrop_useUtilityClasses=ownerState=>{\n const{\n classes,\n invisible\n}=ownerState;\n const slots={\n root:['root',invisible && 'invisible']\n};\n return (0,composeClasses.A)(slots,getBackdropUtilityClass,classes);\n};\nconst BackdropRoot=(0,styled.Ay)('div',{\n name:'MuiBackdrop',\n slot:'Root',\n overridesResolver:(props,styles)=>{\n const{\n ownerState\n}=props;\n return [styles.root,ownerState.invisible && styles.invisible];\n}\n})(({\n ownerState\n})=>(0,esm_extends.A)({\n position:'fixed',\n display:'flex',\n alignItems:'center',\n justifyContent:'center',\n right:0,\n bottom:0,\n top:0,\n left:0,\n backgroundColor:'rgba(0,0,0,.5)',\n WebkitTapHighlightColor:'transparent'\n},ownerState.invisible &&{\n backgroundColor:'transparent'\n}));\nconst Backdrop=external_React_.forwardRef(function Backdrop(inProps,ref){\n var _slotProps$root,_ref,_slots$root;\n const props=(0,DefaultPropsProvider.b)({\n props:inProps,\n name:'MuiBackdrop'\n});\n const{\n children,\n className,\n component='div',\n components={},\n TransitionComponent=Fade_Fade,\n transitionDuration\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,Backdrop_excluded);,props,{\n component,\n invisible\n});\n const classes=Backdrop_useUtilityClasses(ownerState);\n const rootSlotProps=(_slotProps$root=slotProps.root) !=null ? _slotProps$root :componentsProps.root;\n return (0,jsx_runtime.jsx)(TransitionComponent,(0,esm_extends.A)({\n in:open,\n timeout:transitionDuration\n},other,{\n children:(0,jsx_runtime.jsx)(BackdropRoot,(0,esm_extends.A)({\n \"aria-hidden\":true\n},rootSlotProps,{\n as:(_ref=(_slots$root=slots.root) !=null ? _slots$root :components.Root) !=null ? _ref :component,\n className:(0,clsx.A)(classes.root,className,rootSlotProps==null ? void 0 :rootSlotProps.className),\n ownerState:(0,esm_extends.A)({},ownerState,rootSlotProps==null ? void 0:rootSlotProps.ownerState),\n classes:classes,\n ref:ref,\n children:children\n}))\n}));\n});\n false ? 0 :void 0;\n const Backdrop_Backdrop=(Backdrop);\n// EXTERNAL MODULE:./node_modules/@mui/utils/esm/createChainedFunction/createChainedFunction.js\nvar createChainedFunction=__webpack_require__(6673);\n;// ./node_modules/@mui/material/Modal/ModalManager.js\n\n// Is a vertical scrollbar displayed?\nfunction isOverflowing(container){\n const doc=(0,ownerDocument_ownerDocument.A)(container);\n if (doc.body===container){\n return (0,ownerWindow.A)(container).innerWidth>doc.documentElement.clientWidth;\n}\n return container.scrollHeight>container.clientHeight;\n}\nfunction ariaHidden(element,show){\n if (show){\n element.setAttribute('aria-hidden','true');\n}else{\n element.removeAttribute('aria-hidden');\n}\n}\nfunction getPaddingRight(element){\n return parseInt((0,ownerWindow.A)(element).getComputedStyle(element).paddingRight,10) || 0;\n}\nfunction isAriaHiddenForbiddenOnElement(element){\n // The forbidden HTML tags are the ones from ARIA specification that\n // can be children of body and can't have aria-hidden attribute.\n // cf. http://www.w3.org/TR/html-aria/#docconformance\n const forbiddenTagNames=['TEMPLATE','SCRIPT','STYLE','LINK','MAP','META','NOSCRIPT','PICTURE','COL','COLGROUP','PARAM','SLOT','SOURCE','TRACK'];\n const isForbiddenTagName=forbiddenTagNames.indexOf(element.tagName) !==-1;\n const isInputHidden=element.tagName==='INPUT' && element.getAttribute('type')==='hidden';\n return isForbiddenTagName || isInputHidden;\n}\nfunction ariaHiddenSiblings(container,mountElement,currentElement,elementsToExclude,show){\n const blacklist=[mountElement,currentElement,...elementsToExclude];\n [].forEach.call(container.children,element=>{\n const isNotExcludedElement=blacklist.indexOf(element)===-1;\n const isNotForbiddenElement=!isAriaHiddenForbiddenOnElement(element);\n if (isNotExcludedElement && isNotForbiddenElement){\n ariaHidden(element,show);\n}\n});\n}\nfunction findIndexOf(items,callback){\n let idx=-1;\n items.some((item,index)=>{\n if (callback(item)){\n idx=index;\n return true;\n}\n return false;\n});\n return idx;\n}\nfunction handleContainer(containerInfo,props){\n const restoreStyle=[];\n const container=containerInfo.container;\n if (!props.disableScrollLock){\n if (isOverflowing(container)){\n // Compute the size before applying overflow hidden to avoid any scroll jumps.\n const scrollbarSize=getScrollbarSize((0,ownerDocument_ownerDocument.A)(container));\n restoreStyle.push({\n value:container.style.paddingRight,\n property:'padding-right',\n el:container\n});\n // Use computed style,here to get the real padding to add our scrollbar width.\n container.style.paddingRight=`${getPaddingRight(container)+scrollbarSize}px`;\n\n // .mui-fixed is a global helper.\n const fixedElements=(0,ownerDocument_ownerDocument.A)(container).querySelectorAll('.mui-fixed');\n [].forEach.call(fixedElements,element=>{\n restoreStyle.push({\n value:element.style.paddingRight,\n property:'padding-right',\n el:element\n});\n element.style.paddingRight=`${getPaddingRight(element)+scrollbarSize}px`;\n});\n}\n let scrollContainer;\n if (container.parentNode instanceof DocumentFragment){\n scrollContainer=(0,ownerDocument_ownerDocument.A)(container).body;\n}else{\n // Support html overflow-y:auto for scroll stability between pages\n // https://css-tricks.com/snippets/css/force-vertical-scrollbar/\n const parent=container.parentElement;\n const containerWindow=(0,ownerWindow.A)(container);\n scrollContainer=(parent==null ? void 0:parent.nodeName)==='HTML' && containerWindow.getComputedStyle(parent).overflowY==='scroll' ? parent:container;\n}\n\n // Block the scroll even if no scrollbar is visible to account for mobile keyboard\n // screensize shrink.\n restoreStyle.push({\n value:scrollContainer.style.overflow,\n property:'overflow',\n el:scrollContainer\n},{\n value:scrollContainer.style.overflowX,\n property:'overflow-x',\n el:scrollContainer\n},{\n value:scrollContainer.style.overflowY,\n property:'overflow-y',\n el:scrollContainer\n});\n scrollContainer.style.overflow='hidden';\n}\n const restore=()=>{\n restoreStyle.forEach(({\n value,\n el,\n property\n})=>{\n if (value){\n el.style.setProperty(property,value);\n}else{\n el.style.removeProperty(property);\n}\n});\n};\n return restore;\n}\nfunction getHiddenSiblings(container){\n const hiddenSiblings=[];\n [].forEach.call(container.children,element=>{\n if (element.getAttribute('aria-hidden')==='true'){\n hiddenSiblings.push(element);\n}\n});\n return hiddenSiblings;\n}\n\nclass ModalManager{\n constructor(){\n this.containers=void 0;\n this.modals=void 0;\n this.modals=[];\n this.containers=[];\n}\n add(modal,container){\n let modalIndex=this.modals.indexOf(modal);\n if (modalIndex !==-1){\n return modalIndex;\n}\n modalIndex=this.modals.length;\n this.modals.push(modal);\n\n // If the modal we are adding is already in the DOM.\n if (modal.modalRef){\n ariaHidden(modal.modalRef,false);\n}\n const hiddenSiblings=getHiddenSiblings(container);\n ariaHiddenSiblings(container,modal.mount,modal.modalRef,hiddenSiblings,true);\n const containerIndex=findIndexOf(this.containers,item=>item.container===container);\n if (containerIndex !==-1){\n this.containers[containerIndex].modals.push(modal);\n return modalIndex;\n}\n this.containers.push({\n modals:[modal],\n container,\n restore:null,\n hiddenSiblings\n});\n return modalIndex;\n}\n mount(modal,props){\n const containerIndex=findIndexOf(this.containers,item=>item.modals.indexOf(modal) !==-1);\n const containerInfo=this.containers[containerIndex];\n if (!containerInfo.restore){\n containerInfo.restore=handleContainer(containerInfo,props);\n}\n}\n remove(modal,ariaHiddenState=true){\n const modalIndex=this.modals.indexOf(modal);\n if (modalIndex===-1){\n return modalIndex;\n}\n const containerIndex=findIndexOf(this.containers,item=>item.modals.indexOf(modal) !==-1);\n const containerInfo=this.containers[containerIndex];\n containerInfo.modals.splice(containerInfo.modals.indexOf(modal),1);\n this.modals.splice(modalIndex,1);\n\n // If that was the last modal in a container,clean up the container.\n if (containerInfo.modals.length===0){\n // The modal might be closed before it had the chance to be mounted in the DOM.\n if (containerInfo.restore){\n containerInfo.restore();\n}\n if (modal.modalRef){\n // In case the modal wasn't in the DOM yet.\n ariaHidden(modal.modalRef,ariaHiddenState);\n}\n ariaHiddenSiblings(containerInfo.container,modal.mount,modal.modalRef,containerInfo.hiddenSiblings,false);\n this.containers.splice(containerIndex,1);\n}else{\n // Otherwise make sure the next top modal is visible to a screen reader.\n const nextTop=containerInfo.modals[containerInfo.modals.length - 1];\n // as soon as a modal is adding its modalRef is undefined. it can't set\n // aria-hidden because the dom element doesn't exist either\n // when modal was unmounted before modalRef gets null\n if (nextTop.modalRef){\n ariaHidden(nextTop.modalRef,false);\n}\n}\n return modalIndex;\n}\n isTopModal(modal){\n return this.modals.length>0 && this.modals[this.modals.length - 1]===modal;\n}\n}\n;// ./node_modules/@mui/material/Modal/useModal.js\n'use client';\n\n\n\n\n\n\nfunction useModal_getContainer(container){\n return typeof container==='function' ? container():container;\n}\nfunction getHasTransition(children){\n return children ? children.props.hasOwnProperty('in'):false;\n}\n\n// A modal manager used to track and manage the state of open Modals.\n// Modals don't open on the server so this won't conflict with concurrent requests.\nconst defaultManager=new ModalManager();\n\nfunction useModal(parameters){\n const{\n container,\n disableEscapeKeyDown=false,\n disableScrollLock=false,\n // @ts-ignore internal logic - Base UI supports the manager as a prop too\n manager=defaultManager,\n closeAfterTransition=false,\n onTransitionEnter,\n onTransitionExited,\n children,\n onClose,\n open,\n rootRef\n}=parameters;);\n const mountNodeRef=external_React_.useRef(null);\n const modalRef=external_React_.useRef(null);\n const handleRef=(0,useForkRef.A)(modalRef,rootRef);\n const [exited,setExited]=external_React_.useState(!open);\n const hasTransition=getHasTransition(children);\n let ariaHiddenProp=true;\n if (parameters['aria-hidden']==='false' || parameters['aria-hidden']===false){\n ariaHiddenProp=false;\n}\n const getDoc=()=>(0,ownerDocument_ownerDocument.A)(mountNodeRef.current);\n const getModal=()=>{\n modal.current.modalRef=modalRef.current;\n modal.current.mount=mountNodeRef.current;\n return modal.current;\n};\n const handleMounted=()=>{\n manager.mount(getModal(),{\n disableScrollLock\n});\n\n // Fix a bug on Chrome where the scroll isn't initially 0.\n if (modalRef.current){\n modalRef.current.scrollTop=0;\n}\n};\n const handleOpen=(0,useEventCallback.A)(()=>{\n const resolvedContainer=useModal_getContainer(container) || getDoc().body;\n manager.add(getModal(),resolvedContainer);\n\n // The element was already mounted.\n if (modalRef.current){\n handleMounted();\n}\n});\n const isTopModal=external_React_.useCallback(()=>manager.isTopModal(getModal()),[manager]);\n const handlePortalRef=(0,useEventCallback.A)(node=>{\n mountNodeRef.current=node;\n if (!node){\n return;\n}\n if (open && isTopModal()){\n handleMounted();\n}else if (modalRef.current){\n ariaHidden(modalRef.current,ariaHiddenProp);\n}\n});\n const handleClose=external_React_.useCallback(()=>{\n manager.remove(getModal(),ariaHiddenProp);\n},[ariaHiddenProp,manager]);\n external_React_.useEffect(()=>{\n return ()=>{\n handleClose();\n};\n},[handleClose]);\n external_React_.useEffect(()=>{\n if (open){\n handleOpen();\n}else if (!hasTransition || !closeAfterTransition){\n handleClose();\n}\n},[open,handleClose,hasTransition,closeAfterTransition,handleOpen]);\n const createHandleKeyDown=otherHandlers=>event=>{\n var _otherHandlers$onKeyD;\n (_otherHandlers$onKeyD=otherHandlers.onKeyDown)==null || _otherHandlers$onKeyD.call(otherHandlers,event);\n\n // The handler doesn't take event.defaultPrevented into account:\n //\n // event.preventDefault() is meant to stop default behaviors like\n // clicking a checkbox to check it,hitting a button to submit a form,\n // and hitting left arrow to move the cursor in a text input etc.\n // Only special HTML elements have these default behaviors.\n if (event.key !=='Escape' || event.which===229 ||\n // Wait until IME is settled.\n !isTopModal()){\n return;\n}\n if (!disableEscapeKeyDown){\n // Swallow the event,in case someone is listening for the escape key on the body.\n event.stopPropagation();\n if (onClose){\n onClose(event,'escapeKeyDown');\n}\n}\n};\n const createHandleBackdropClick=otherHandlers=>event=>{\n var _otherHandlers$onClic;\n (_otherHandlers$onClic=otherHandlers.onClick)==null || _otherHandlers$onClic.call(otherHandlers,event);\n if (event.target !==event.currentTarget){\n return;\n}\n if (onClose){\n onClose(event,'backdropClick');\n}\n};)=>{\n const propsEventHandlers=extractEventHandlers_extractEventHandlers(parameters);\n\n // The custom event handlers shouldn't be spread on the root element\n delete propsEventHandlers.onTransitionEnter;\n delete propsEventHandlers.onTransitionExited;,propsEventHandlers,otherHandlers);\n return (0,esm_extends.A)({\n role:'presentation'\n},externalEventHandlers,{\n onKeyDown:createHandleKeyDown(externalEventHandlers),\n ref:handleRef\n});\n};)=>{\n const externalEventHandlers=otherHandlers;\n return (0,esm_extends.A)({\n 'aria-hidden':true\n},externalEventHandlers,{\n onClick:createHandleBackdropClick(externalEventHandlers),\n open\n});\n};\n const getTransitionProps=()=>{\n const handleEnter=()=>{\n setExited(false);\n if (onTransitionEnter){\n onTransitionEnter();\n}\n};\n const handleExited=()=>{\n setExited(true);\n if (onTransitionExited){\n onTransitionExited();\n}\n if (closeAfterTransition){\n handleClose();\n}\n};\n return{\n onEnter:(0,createChainedFunction.A)(handleEnter,children==null ? void 0:children.props.onEnter),\n onExited:(0,createChainedFunction.A)(handleExited,children==null ? void 0:children.props.onExited)\n};\n};\n return{\n getRootProps,\n getBackdropProps,\n getTransitionProps,\n rootRef:handleRef,\n portalRef:handlePortalRef,\n isTopModal,\n exited,\n hasTransition\n};\n}\n const Modal_useModal=(useModal);\n;// ./node_modules/@mui/material/Modal/modalClasses.js\n\n\nfunction getModalUtilityClass(slot){\n return (0,generateUtilityClass_generateUtilityClass.Ay)('MuiModal',slot);\n}\nconst modalClasses=(0,generateUtilityClasses.A)('MuiModal',['root','hidden','backdrop']);\n const Modal_modalClasses=((null && (modalClasses)));\n;// ./node_modules/@mui/material/Modal/Modal.js\n'use client';\n\n\n\nconst Modal_excluded=[\"BackdropComponent\",\"BackdropProps\",\"classes\",\"className\",\"closeAfterTransition\",\"children\",\"container\",\"component\",\"components\",\"componentsProps\",\"disableAutoFocus\",\"disableEnforceFocus\",\"disableEscapeKeyDown\",\"disablePortal\",\"disableRestoreFocus\",\"disableScrollLock\",\"hideBackdrop\",\"keepMounted\",\"onBackdropClick\",\"onClose\",\"onTransitionEnter\",\"onTransitionExited\",\"open\",\"slotProps\",\"slots\",\"theme\"];\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst Modal_useUtilityClasses=ownerState=>{\n const{\n open,\n exited,\n classes\n}=ownerState;\n const slots={\n root:['root',!open && exited && 'hidden'],\n backdrop:['backdrop']\n};\n return (0,composeClasses.A)(slots,getModalUtilityClass,classes);\n};\nconst ModalRoot=(0,styled.Ay)('div',{\n name:'MuiModal',\n slot:'Root',\n overridesResolver:(props,styles)=>{\n const{\n ownerState\n}=props;\n return [styles.root,!ownerState.open && ownerState.exited && styles.hidden];\n}\n})(({\n theme,\n ownerState\n})=>(0,esm_extends.A)({\n position:'fixed',\n zIndex:(theme.vars || theme).zIndex.modal,\n right:0,\n bottom:0,\n top:0,\n left:0\n},!ownerState.open && ownerState.exited &&{\n visibility:'hidden'\n}));\nconst ModalBackdrop=(0,styled.Ay)(Backdrop_Backdrop,{\n name:'MuiModal',\n slot:'Backdrop',\n overridesResolver:(props,styles)=>{\n return styles.backdrop;\n}\n})({\n zIndex:-1\n});\n\n\nconst Modal=external_React_.forwardRef(function Modal(inProps,ref){\n var _ref,_slots$root,_ref2,_slots$backdrop,_slotProps$root,_slotProps$backdrop;\n const props=(0,DefaultPropsProvider.b)({\n name:'MuiModal',\n props:inProps\n});\n const{\n BackdropComponent=ModalBackdrop,\n BackdropProps,\n className,\n closeAfterTransition=false,\n children,\n container,\n component,\n components={},\n disableAutoFocus=false,\n disableEnforceFocus=false,\n disableEscapeKeyDown=false,\n disablePortal=false,\n disableRestoreFocus=false,\n disableScrollLock=false,\n hideBackdrop=false,\n keepMounted=false,\n onBackdropClick,\n open,\n slotProps,\n slots\n // eslint-disable-next-line react/prop-types\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,Modal_excluded);,props,{\n closeAfterTransition,\n disableAutoFocus,\n disableEnforceFocus,\n disableEscapeKeyDown,\n disablePortal,\n disableRestoreFocus,\n disableScrollLock,\n hideBackdrop,\n keepMounted\n});\n const{\n getRootProps,\n getBackdropProps,\n getTransitionProps,\n portalRef,\n isTopModal,\n exited,\n hasTransition\n},propsWithDefaults,{\n rootRef:ref\n}));,propsWithDefaults,{\n exited\n});\n const classes=Modal_useUtilityClasses(ownerState);;\n if (children.props.tabIndex===undefined){\n childProps.tabIndex='-1';\n}\n\n // It's a Transition like component\n if (hasTransition){\n const{\n onEnter,\n onExited\n}=getTransitionProps();\n childProps.onEnter=onEnter;\n childProps.onExited=onExited;\n}\n const RootSlot=(_ref=(_slots$root=slots==null ? void 0 :slots.root) !=null ? _slots$root :components.Root) !=null ? _ref :ModalRoot;\n const BackdropSlot=(_ref2=(_slots$backdrop=slots==null ? void 0 :slots.backdrop) !=null ? _slots$backdrop :components.Backdrop) !=null ? _ref2 :BackdropComponent;\n const rootSlotProps=(_slotProps$root=slotProps==null ? void 0 :slotProps.root) !=null ? _slotProps$root :componentsProps.root;\n const backdropSlotProps=(_slotProps$backdrop=slotProps==null ? void 0 :slotProps.backdrop) !=null ? _slotProps$backdrop :componentsProps.backdrop;\n const rootProps=useSlotProps_useSlotProps({\n elementType:RootSlot,\n externalSlotProps:rootSlotProps,\n externalForwardedProps:other,\n getSlotProps:getRootProps,\n additionalProps:{\n ref,\n as:component\n},\n ownerState,\n className:(0,clsx.A)(className,rootSlotProps==null ? void 0:rootSlotProps.className,classes==null ? void 0:classes.root,!ownerState.open && ownerState.exited && (classes==null ? void 0:classes.hidden))\n});\n const backdropProps=useSlotProps_useSlotProps({\n elementType:BackdropSlot,\n externalSlotProps:backdropSlotProps,\n additionalProps:BackdropProps,\n getSlotProps:otherHandlers=>{\n return getBackdropProps((0,esm_extends.A)({},otherHandlers,{\n onClick:e=>{\n if (onBackdropClick){\n onBackdropClick(e);\n}\n if (otherHandlers !=null && otherHandlers.onClick){\n otherHandlers.onClick(e);\n}\n}\n}));\n},\n className:(0,clsx.A)(backdropSlotProps==null ? void 0:backdropSlotProps.className,BackdropProps==null ? void 0:BackdropProps.className,classes==null ? void 0:classes.backdrop),\n ownerState\n});\n if (!keepMounted && !open && (!hasTransition || exited)){\n return null;\n}\n return (0,jsx_runtime.jsx)(Portal_Portal,{\n ref:portalRef,\n container:container,\n disablePortal:disablePortal,\n children:(0,jsx_runtime.jsxs)(RootSlot,(0,esm_extends.A)({},rootProps,{\n children:[!hideBackdrop && BackdropComponent ? (0,jsx_runtime.jsx)(BackdropSlot,(0,esm_extends.A)({},backdropProps)) :null,(0,jsx_runtime.jsx)(Unstable_TrapFocus_FocusTrap,{\n disableEnforceFocus:disableEnforceFocus,\n disableAutoFocus:disableAutoFocus,\n disableRestoreFocus:disableRestoreFocus,\n isEnabled:isTopModal,\n open:open,\n children:external_React_.cloneElement(children,childProps)\n})]\n}))\n});\n});\n false ? 0 :void 0;\n const Modal_Modal=(Modal);\n;// ./node_modules/@mui/material/Popover/popoverClasses.js\n\n\nfunction getPopoverUtilityClass(slot){\n return (0,generateUtilityClass_generateUtilityClass.Ay)('MuiPopover',slot);\n}\nconst popoverClasses=(0,generateUtilityClasses.A)('MuiPopover',['root','paper']);\n const Popover_popoverClasses=((null && (popoverClasses)));\n;// ./node_modules/@mui/material/Popover/Popover.js\n'use client';\n\n\n\nconst Popover_excluded=[\"onEntering\"],\n _excluded2=[\"action\",\"anchorEl\",\"anchorOrigin\",\"anchorPosition\",\"anchorReference\",\"children\",\"className\",\"container\",\"elevation\",\"marginThreshold\",\"open\",\"PaperProps\",\"slots\",\"slotProps\",\"transformOrigin\",\"TransitionComponent\",\"transitionDuration\",\"TransitionProps\",\"disableScrollLock\"],\n _excluded3=[\"slotProps\"];\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction getOffsetTop(rect,vertical){\n let offset=0;\n if (typeof vertical==='number'){\n offset=vertical;\n}else if (vertical==='center'){\n offset=rect.height / 2;\n}else if (vertical==='bottom'){\n offset=rect.height;\n}\n return offset;\n}\nfunction getOffsetLeft(rect,horizontal){\n let offset=0;\n if (typeof horizontal==='number'){\n offset=horizontal;\n}else if (horizontal==='center'){\n offset=rect.width / 2;\n}else if (horizontal==='right'){\n offset=rect.width;\n}\n return offset;\n}\nfunction getTransformOriginValue(transformOrigin){\n return [transformOrigin.horizontal,transformOrigin.vertical].map(n=>typeof n==='number' ? `${n}px`:n).join(' ');\n}\nfunction resolveAnchorEl(anchorEl){\n return typeof anchorEl==='function' ? anchorEl():anchorEl;\n}\nconst Popover_useUtilityClasses=ownerState=>{\n const{\n classes\n}=ownerState;\n const slots={\n root:['root'],\n paper:['paper']\n};\n return (0,composeClasses.A)(slots,getPopoverUtilityClass,classes);\n};\nconst PopoverRoot=(0,styled.Ay)(Modal_Modal,{\n name:'MuiPopover',\n slot:'Root',\n overridesResolver:(props,styles)=>styles.root\n});\nconst PopoverPaper=(0,styled.Ay)(Paper_Paper,{\n name:'MuiPopover',\n slot:'Paper',\n overridesResolver:(props,styles)=>styles.paper\n})({\n position:'absolute',\n overflowY:'auto',\n overflowX:'hidden',\n // So we see the popover when it's empty.\n // It's most likely on issue on userland.\n minWidth:16,\n minHeight:16,\n maxWidth:'calc(100% - 32px)',\n maxHeight:'',\n // We disable the focus ring for mouse,touch and keyboard users.\n outline:0\n});\nconst Popover=external_React_.forwardRef(function Popover(inProps,ref){\n var _slotProps$paper,_slots$root,_slots$paper;\n const props=(0,DefaultPropsProvider.b)({\n props:inProps,\n name:'MuiPopover'\n});\n const{\n action,\n anchorEl,\n anchorOrigin={\n vertical:'top',\n horizontal:'left'\n},\n slots,\n slotProps,\n transformOrigin={\n vertical:'top',\n horizontal:'left'\n},\n TransitionComponent=Grow_Grow,\n transitionDuration:transitionDurationProp='auto',\n TransitionProps:{\n onEntering\n},\n disableScrollLock=false\n}=props,\n TransitionProps=(0,objectWithoutPropertiesLoose.A)(props.TransitionProps,Popover_excluded),\n other=(0,objectWithoutPropertiesLoose.A)(props,_excluded2);\n const externalPaperSlotProps=(_slotProps$paper=slotProps==null ? void 0 :slotProps.paper) !=null ? _slotProps$paper :PaperPropsProp;\n const paperRef=external_React_.useRef();\n const handlePaperRef=(0,utils_useForkRef.A)(paperRef,externalPaperSlotProps.ref);,props,{\n anchorOrigin,\n anchorReference,\n elevation,\n marginThreshold,\n externalPaperSlotProps,\n transformOrigin,\n TransitionComponent,\n transitionDuration:transitionDurationProp,\n TransitionProps\n});\n const classes=Popover_useUtilityClasses(ownerState);\n\n // Returns the top/left offset of the position\n // to attach to on the anchor element (or body if none is provided)\n const getAnchorOffset=external_React_.useCallback(()=>{\n if (anchorReference==='anchorPosition'){\n if (false) // removed by dead control flow\n{}\n return anchorPosition;\n}\n const resolvedAnchorEl=resolveAnchorEl(anchorEl);\n\n // If an anchor element wasn't provided,just use the parent body element of this Popover\n const anchorElement=resolvedAnchorEl && resolvedAnchorEl.nodeType===1 ? resolvedAnchorEl :(0,ownerDocument.A)(paperRef.current).body;\n const anchorRect=anchorElement.getBoundingClientRect();\n return{\n top:anchorRect.top+getOffsetTop(anchorRect,anchorOrigin.vertical),\n left:anchorRect.left+getOffsetLeft(anchorRect,anchorOrigin.horizontal)\n};\n},[anchorEl,anchorOrigin.horizontal,anchorOrigin.vertical,anchorPosition,anchorReference]);\n\n // Returns the base transform origin using the element\n const getTransformOrigin=external_React_.useCallback(elemRect=>{\n return{\n vertical:getOffsetTop(elemRect,transformOrigin.vertical),\n horizontal:getOffsetLeft(elemRect,transformOrigin.horizontal)\n};\n},[transformOrigin.horizontal,transformOrigin.vertical]);\n const getPositioningStyle=external_React_.useCallback(element=>{\n const elemRect={\n width:element.offsetWidth,\n height:element.offsetHeight\n};\n\n // Get the transform origin point on the element itself\n const elemTransformOrigin=getTransformOrigin(elemRect);\n if (anchorReference==='none'){\n return{\n top:null,\n left:null,\n transformOrigin:getTransformOriginValue(elemTransformOrigin)\n};\n}\n\n // Get the offset of the anchoring element\n const anchorOffset=getAnchorOffset();\n\n // Calculate element positioning\n let top=anchorOffset.top - elemTransformOrigin.vertical;\n let left=anchorOffset.left - elemTransformOrigin.horizontal;\n const bottom=top+elemRect.height;\n const right=left+elemRect.width;\n\n // Use the parent window of the anchorEl if provided\n const containerWindow=(0,utils_ownerWindow.A)(resolveAnchorEl(anchorEl));\n\n // Window thresholds taking required margin into account\n const heightThreshold=containerWindow.innerHeight - marginThreshold;\n const widthThreshold=containerWindow.innerWidth - marginThreshold;\n\n // Check if the vertical axis needs shifting\n if (marginThreshold !==null && top < marginThreshold){\n const diff=top - marginThreshold;\n top -=diff;\n elemTransformOrigin.vertical+=diff;\n}else if (marginThreshold !==null && bottom>heightThreshold){\n const diff=bottom - heightThreshold;\n top -=diff;\n elemTransformOrigin.vertical+=diff;\n}\n\n // Check if the horizontal axis needs shifting\n if (marginThreshold !==null && left < marginThreshold){\n const diff=left - marginThreshold;\n left -=diff;\n elemTransformOrigin.horizontal+=diff;\n}else if (right>widthThreshold){\n const diff=right - widthThreshold;\n left -=diff;\n elemTransformOrigin.horizontal+=diff;\n}\n return{\n top:`${Math.round(top)}px`,\n left:`${Math.round(left)}px`,\n transformOrigin:getTransformOriginValue(elemTransformOrigin)\n};\n},[anchorEl,anchorReference,getAnchorOffset,getTransformOrigin,marginThreshold]);\n const [isPositioned,setIsPositioned]=external_React_.useState(open);\n const setPositioningStyles=external_React_.useCallback(()=>{\n const element=paperRef.current;\n if (!element){\n return;\n}\n const positioning=getPositioningStyle(element);\n if (positioning.top !==null){\n element.style.top=positioning.top;\n}\n if (positioning.left !==null){\n element.style.left=positioning.left;\n}\n element.style.transformOrigin=positioning.transformOrigin;\n setIsPositioned(true);\n},[getPositioningStyle]);\n external_React_.useEffect(()=>{\n if (disableScrollLock){\n window.addEventListener('scroll',setPositioningStyles);\n}\n return ()=>window.removeEventListener('scroll',setPositioningStyles);\n},[anchorEl,disableScrollLock,setPositioningStyles]);\n const handleEntering=(element,isAppearing)=>{\n if (onEntering){\n onEntering(element,isAppearing);\n}\n setPositioningStyles();\n};\n const handleExited=()=>{\n setIsPositioned(false);\n};\n external_React_.useEffect(()=>{\n if (open){\n setPositioningStyles();\n}\n});\n external_React_.useImperativeHandle(action,()=>open ?{\n updatePosition:()=>{\n setPositioningStyles();\n}\n}:null,[open,setPositioningStyles]);\n external_React_.useEffect(()=>{\n if (!open){\n return undefined;\n}\n const handleResize=(0,utils_debounce.A)(()=>{\n setPositioningStyles();\n});\n const containerWindow=(0,utils_ownerWindow.A)(anchorEl);\n containerWindow.addEventListener('resize',handleResize);\n return ()=>{\n handleResize.clear();\n containerWindow.removeEventListener('resize',handleResize);\n};\n},[anchorEl,open,setPositioningStyles]);\n let transitionDuration=transitionDurationProp;\n if (transitionDurationProp==='auto' && !TransitionComponent.muiSupportAuto){\n transitionDuration=undefined;\n}\n\n // If the container prop is provided,use that\n // If the anchorEl prop is provided,use its parent body element as the container\n // If neither are provided let the Modal take care of choosing the container\n const container=containerProp || (anchorEl ? (0,ownerDocument.A)(resolveAnchorEl(anchorEl)).body :undefined);\n const RootSlot=(_slots$root=slots==null ? void 0 :slots.root) !=null ? _slots$root :PopoverRoot;\n const PaperSlot=(_slots$paper=slots==null ? void 0 :slots.paper) !=null ? _slots$paper :PopoverPaper;\n const paperProps=useSlotProps_useSlotProps({\n elementType:PaperSlot,\n externalSlotProps:(0,esm_extends.A)({},externalPaperSlotProps,{\n style:isPositioned ? externalPaperSlotProps.style :(0,esm_extends.A)({},externalPaperSlotProps.style,{\n opacity:0\n})\n}),\n additionalProps:{\n elevation,\n ref:handlePaperRef\n},\n ownerState,\n className:(0,clsx.A)(classes.paper,externalPaperSlotProps==null ? void 0:externalPaperSlotProps.className)\n});\n const _useSlotProps=useSlotProps_useSlotProps({\n elementType:RootSlot,\n externalSlotProps:(slotProps==null ? void 0 :slotProps.root) ||{},\n externalForwardedProps:other,\n additionalProps:{\n ref,\n slotProps:{\n backdrop:{\n invisible:true\n}\n},\n container,\n open\n},\n ownerState,\n className:(0,clsx.A)(classes.root,className)\n}),\n{\n slotProps:rootSlotPropsProp\n}=_useSlotProps,\n rootProps=(0,objectWithoutPropertiesLoose.A)(_useSlotProps,_excluded3);,rootProps,!isHostComponent_isHostComponent(RootSlot) &&{\n slotProps:rootSlotPropsProp,\n disableScrollLock\n},{\n children:(0,jsx_runtime.jsx)(TransitionComponent,(0,esm_extends.A)({\n appear:true,\n in:open,\n onEntering:handleEntering,\n onExited:handleExited,\n timeout:transitionDuration\n},TransitionProps,{\n children:(0,jsx_runtime.jsx)(PaperSlot,(0,esm_extends.A)({},paperProps,{\n children:children\n}))\n}))\n}));\n});\n false ? 0 :void 0;\n const Popover_Popover=(Popover);\n;// ./node_modules/@mui/material/Menu/menuClasses.js\n\n\nfunction getMenuUtilityClass(slot){\n return (0,generateUtilityClass_generateUtilityClass.Ay)('MuiMenu',slot);\n}\nconst menuClasses=(0,generateUtilityClasses.A)('MuiMenu',['root','paper','list']);\n const Menu_menuClasses=((null && (menuClasses)));\n;// ./node_modules/@mui/material/Menu/Menu.js\n'use client';\n\n\n\nconst Menu_excluded=[\"onEntering\"],\n Menu_excluded2=[\"autoFocus\",\"children\",\"className\",\"disableAutoFocusItem\",\"MenuListProps\",\"onClose\",\"open\",\"PaperProps\",\"PopoverClasses\",\"transitionDuration\",\"TransitionProps\",\"variant\",\"slots\",\"slotProps\"];\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst RTL_ORIGIN={\n vertical:'top',\n horizontal:'right'\n};\nconst LTR_ORIGIN={\n vertical:'top',\n horizontal:'left'\n};\nconst Menu_useUtilityClasses=ownerState=>{\n const{\n classes\n}=ownerState;\n const slots={\n root:['root'],\n paper:['paper'],\n list:['list']\n};\n return (0,composeClasses.A)(slots,getMenuUtilityClass,classes);\n};\nconst MenuRoot=(0,styled.Ay)(Popover_Popover,{\n shouldForwardProp:prop=>(0,rootShouldForwardProp.A)(prop) || prop==='classes',\n name:'MuiMenu',\n slot:'Root',\n overridesResolver:(props,styles)=>styles.root\n});\nconst MenuPaper=(0,styled.Ay)(PopoverPaper,{\n name:'MuiMenu',\n slot:'Paper',\n overridesResolver:(props,styles)=>styles.paper\n})({\n // specZ:The maximum height of a simple menu should be one or more rows less than the view\n // height. This ensures a tappable area outside of the simple menu with which to dismiss\n // the menu.\n maxHeight:'calc(100% - 96px)',\n // Add iOS momentum scrolling for iOS < 13.0\n WebkitOverflowScrolling:'touch'\n});\nconst MenuMenuList=(0,styled.Ay)(MenuList_MenuList,{\n name:'MuiMenu',\n slot:'List',\n overridesResolver:(props,styles)=>styles.list\n})({\n // We disable the focus ring for mouse,touch and keyboard users.\n outline:0\n});\nconst Menu=external_React_.forwardRef(function Menu(inProps,ref){\n var _slots$paper,_slotProps$paper;\n const props=(0,DefaultPropsProvider.b)({\n props:inProps,\n name:'MuiMenu'\n});\n const{\n autoFocus=true,\n children,\n className,\n disableAutoFocusItem=false,\n MenuListProps={},\n PopoverClasses,\n transitionDuration='auto',\n TransitionProps:{\n onEntering\n}\n}=props,\n TransitionProps=(0,objectWithoutPropertiesLoose.A)(props.TransitionProps,Menu_excluded),\n other=(0,objectWithoutPropertiesLoose.A)(props,Menu_excluded2);\n const isRtl=useRtl();,props,{\n autoFocus,\n disableAutoFocusItem,\n MenuListProps,\n onEntering,\n PaperProps,\n transitionDuration,\n TransitionProps,\n variant\n});\n const classes=Menu_useUtilityClasses(ownerState);\n const autoFocusItem=autoFocus && !disableAutoFocusItem && open;\n const menuListActionsRef=external_React_.useRef(null);\n const handleEntering=(element,isAppearing)=>{\n if (menuListActionsRef.current){\n menuListActionsRef.current.adjustStyleForScrollbar(element,{\n direction:isRtl ? 'rtl':'ltr'\n});\n}\n if (onEntering){\n onEntering(element,isAppearing);\n}\n};\n const handleListKeyDown=event=>{\n if (event.key==='Tab'){\n event.preventDefault();\n if (onClose){\n onClose(event,'tabKeyDown');\n}\n}\n};\n\n \n let activeItemIndex=-1;\n // since we inject focus related props into children we have to do a lookahead\n // to check if there is a `selected` item. We're looking for the last `selected`\n // item and use the first valid item as a fallback\n external_React_.Children.map(children,(child,index)=>{\n if (! external_React_.isValidElement(child)){\n return;\n}\n if (!child.props.disabled){\n if (variant==='selectedMenu' && child.props.selected){\n activeItemIndex=index;\n}else if (activeItemIndex===-1){\n activeItemIndex=index;\n}\n}\n});\n const PaperSlot=(_slots$paper=slots.paper) !=null ? _slots$paper :MenuPaper;\n const paperExternalSlotProps=(_slotProps$paper=slotProps.paper) !=null ? _slotProps$paper :PaperProps;\n const rootSlotProps=useSlotProps_useSlotProps({\n elementType:slots.root,\n externalSlotProps:slotProps.root,\n ownerState,\n className:[classes.root,className]\n});\n const paperSlotProps=useSlotProps_useSlotProps({\n elementType:PaperSlot,\n externalSlotProps:paperExternalSlotProps,\n ownerState,\n className:classes.paper\n});\n return (0,jsx_runtime.jsx)(MenuRoot,(0,esm_extends.A)({\n onClose:onClose,\n anchorOrigin:{\n vertical:'bottom',\n horizontal:isRtl ? 'right':'left'\n},\n transformOrigin:isRtl ? RTL_ORIGIN :LTR_ORIGIN,\n slots:{\n paper:PaperSlot,\n root:slots.root\n},\n slotProps:{\n root:rootSlotProps,\n paper:paperSlotProps\n},\n open:open,\n ref:ref,\n transitionDuration:transitionDuration,\n TransitionProps:(0,esm_extends.A)({\n onEntering:handleEntering\n},TransitionProps),\n ownerState:ownerState\n},other,{\n classes:PopoverClasses,\n children:(0,jsx_runtime.jsx)(MenuMenuList,(0,esm_extends.A)({\n onKeyDown:handleListKeyDown,\n actions:menuListActionsRef,\n autoFocus:autoFocus && (activeItemIndex===-1 || disableAutoFocusItem),\n autoFocusItem:autoFocusItem,\n variant:variant\n},MenuListProps,{\n className:(0,clsx.A)(classes.list,MenuListProps.className),\n children:children\n}))\n}));\n});\n false ? 0 :void 0;\n const Menu_Menu=(Menu);\n;// ./node_modules/@mui/material/NativeSelect/nativeSelectClasses.js\n\n\nfunction getNativeSelectUtilityClasses(slot){\n return (0,generateUtilityClass_generateUtilityClass.Ay)('MuiNativeSelect',slot);\n}\nconst nativeSelectClasses=(0,generateUtilityClasses.A)('MuiNativeSelect',['root','select','multiple','filled','outlined','standard','disabled','icon','iconOpen','iconFilled','iconOutlined','iconStandard','nativeInput','error']);\n const NativeSelect_nativeSelectClasses=(nativeSelectClasses);\n;// ./node_modules/@mui/material/NativeSelect/NativeSelectInput.js\n'use client';\n\n\n\nconst NativeSelectInput_excluded=[\"className\",\"disabled\",\"error\",\"IconComponent\",\"inputRef\",\"variant\"];\n\n\n\n\n\n\n\n\n\n\nconst NativeSelectInput_useUtilityClasses=ownerState=>{\n const{\n classes,\n variant,\n disabled,\n multiple,\n open,\n error\n}=ownerState;\n const slots={\n select:['select',variant,disabled && 'disabled',multiple && 'multiple',error && 'error'],\n icon:['icon',`icon${(0,capitalize.A)(variant)}`,open && 'iconOpen',disabled && 'disabled']\n};\n return (0,composeClasses.A)(slots,getNativeSelectUtilityClasses,classes);\n};\nconst nativeSelectSelectStyles=({\n ownerState,\n theme\n})=>(0,esm_extends.A)({\n MozAppearance:'none',\n // Reset\n WebkitAppearance:'none',\n // Reset\n // When interacting quickly,the text can end up selected.\n // Native select can't be selected either.\n userSelect:'none',\n borderRadius:0,\n // Reset\n cursor:'pointer',\n '&:focus':(0,esm_extends.A)({},theme.vars ?{\n backgroundColor:`rgba(${theme.vars.palette.common.onBackgroundChannel}/ .05)`\n}:{\n backgroundColor:theme.palette.mode==='light' ? 'rgba(0,0,0,.05)':'rgba(255,255,255,.05)'\n},{\n borderRadius:0 // Reset Chrome style\n}),\n // Remove IE11 arrow\n '&::-ms-expand':{\n display:'none'\n},\n [`&.${NativeSelect_nativeSelectClasses.disabled}`]:{\n cursor:'default'\n},\n '&[multiple]':{\n height:'auto'\n},\n '&:not([multiple]) option,&:not([multiple]) optgroup':{\n backgroundColor:(theme.vars || theme).palette.background.paper\n},\n // Bump specificity to allow extending custom inputs\n '&&&':{\n paddingRight:24,\n minWidth:16 // So it doesn't collapse.\n}\n},ownerState.variant==='filled' &&{\n '&&&':{\n paddingRight:32\n}\n},ownerState.variant==='outlined' &&{\n borderRadius:(theme.vars || theme).shape.borderRadius,\n '&:focus':{\n borderRadius:(theme.vars || theme).shape.borderRadius // Reset the reset for Chrome style\n},\n '&&&':{\n paddingRight:32\n}\n});\nconst NativeSelectSelect=(0,styled.Ay)('select',{\n name:'MuiNativeSelect',\n slot:'Select',\n shouldForwardProp:rootShouldForwardProp.A,\n overridesResolver:(props,styles)=>{\n const{\n ownerState\n}=props;\n return [styles.select,styles[ownerState.variant],ownerState.error && styles.error,{\n [`&.${NativeSelect_nativeSelectClasses.multiple}`]:styles.multiple\n}];\n}\n})(nativeSelectSelectStyles);\nconst nativeSelectIconStyles=({\n ownerState,\n theme\n})=>(0,esm_extends.A)({\n // We use a position absolute over a flexbox in order to forward the pointer events\n // to the input and to support wrapping tags..\n position:'absolute',\n right:0,\n top:'calc(50% - .5em)',\n // Center vertically,height is 1em\n pointerEvents:'none',\n // Don't block pointer events on the select under the icon.\n color:(theme.vars || theme).palette.action.active,\n [`&.${NativeSelect_nativeSelectClasses.disabled}`]:{\n color:(theme.vars || theme).palette.action.disabled\n}\n},ownerState.open &&{\n transform:'rotate(180deg)'\n},ownerState.variant==='filled' &&{\n right:7\n},ownerState.variant==='outlined' &&{\n right:7\n});\nconst NativeSelectIcon=(0,styled.Ay)('svg',{\n name:'MuiNativeSelect',\n slot:'Icon',\n overridesResolver:(props,styles)=>{\n const{\n ownerState\n}=props;\n return [styles.icon,ownerState.variant && styles[`icon${(0,capitalize.A)(ownerState.variant)}`],ownerState.open && styles.iconOpen];\n}\n})(nativeSelectIconStyles);\n\n\nconst NativeSelectInput=external_React_.forwardRef(function NativeSelectInput(props,ref){\n const{\n className,\n disabled,\n error,\n IconComponent,\n inputRef,\n variant='standard'\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,NativeSelectInput_excluded);,props,{\n disabled,\n variant,\n error\n});\n const classes=NativeSelectInput_useUtilityClasses(ownerState);\n return (0,jsx_runtime.jsxs)(external_React_.Fragment,{\n children:[(0,jsx_runtime.jsx)(NativeSelectSelect,(0,esm_extends.A)({\n ownerState:ownerState,\n className:(0,clsx.A)(classes.select,className),\n disabled:disabled,\n ref:inputRef || ref\n},other)),props.multiple ? null :(0,jsx_runtime.jsx)(NativeSelectIcon,{\n as:IconComponent,\n ownerState:ownerState,\n className:classes.icon\n})]\n});\n});\n false ? 0 :void 0;\n const NativeSelect_NativeSelectInput=(NativeSelectInput);\n// EXTERNAL MODULE:./node_modules/@mui/material/styles/slotShouldForwardProp.js\nvar slotShouldForwardProp=__webpack_require__(4438);\n// EXTERNAL MODULE:./node_modules/@mui/material/utils/useControlled.js\nvar useControlled=__webpack_require__(1159);\n;// ./node_modules/@mui/material/Select/selectClasses.js\n\n\nfunction getSelectUtilityClasses(slot){\n return (0,generateUtilityClass_generateUtilityClass.Ay)('MuiSelect',slot);\n}\nconst selectClasses=(0,generateUtilityClasses.A)('MuiSelect',['root','select','multiple','filled','outlined','standard','disabled','focused','icon','iconOpen','iconFilled','iconOutlined','iconStandard','nativeInput','error']);\n const Select_selectClasses=(selectClasses);\n;// ./node_modules/@mui/material/Select/SelectInput.js\n'use client';\n\n\n\n\nvar SelectInput_span;\nconst SelectInput_excluded=[\"aria-describedby\",\"aria-label\",\"autoFocus\",\"autoWidth\",\"children\",\"className\",\"defaultOpen\",\"defaultValue\",\"disabled\",\"displayEmpty\",\"error\",\"IconComponent\",\"inputRef\",\"labelId\",\"MenuProps\",\"multiple\",\"name\",\"onBlur\",\"onChange\",\"onClose\",\"onFocus\",\"onOpen\",\"open\",\"readOnly\",\"renderValue\",\"SelectDisplayProps\",\"tabIndex\",\"type\",\"value\",\"variant\"];\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst SelectSelect=(0,styled.Ay)('div',{\n name:'MuiSelect',\n slot:'Select',\n overridesResolver:(props,styles)=>{\n const{\n ownerState\n}=props;\n return [\n // Win specificity over the input base\n{\n [`&.${Select_selectClasses.select}`]:styles.select\n},{\n [`&.${Select_selectClasses.select}`]:styles[ownerState.variant]\n},{\n [`&.${Select_selectClasses.error}`]:styles.error\n},{\n [`&.${Select_selectClasses.multiple}`]:styles.multiple\n}];\n}\n})(nativeSelectSelectStyles,{\n // Win specificity over the input base\n [`&.${Select_selectClasses.select}`]:{\n height:'auto',\n // Resets for multiple select with chips\n minHeight:'1.4375em',\n // Required for select\\text-field height consistency\n textOverflow:'ellipsis',\n whiteSpace:'nowrap',\n overflow:'hidden'\n}\n});\nconst SelectIcon=(0,styled.Ay)('svg',{\n name:'MuiSelect',\n slot:'Icon',\n overridesResolver:(props,styles)=>{\n const{\n ownerState\n}=props;\n return [styles.icon,ownerState.variant && styles[`icon${(0,capitalize.A)(ownerState.variant)}`],ownerState.open && styles.iconOpen];\n}\n})(nativeSelectIconStyles);\nconst SelectNativeInput=(0,styled.Ay)('input',{\n shouldForwardProp:prop=>(0,slotShouldForwardProp.A)(prop) && prop !=='classes',\n name:'MuiSelect',\n slot:'NativeInput',\n overridesResolver:(props,styles)=>styles.nativeInput\n})({\n bottom:0,\n left:0,\n position:'absolute',\n opacity:0,\n pointerEvents:'none',\n width:'100%',\n boxSizing:'border-box'\n});\nfunction areEqualValues(a,b){\n if (typeof b==='object' && b !==null){\n return a===b;\n}\n\n // The value could be a number,the DOM will stringify it anyway.\n return String(a)===String(b);\n}\nfunction SelectInput_isEmpty(display){\n return display==null || typeof display==='string' && !display.trim();\n}\nconst SelectInput_useUtilityClasses=ownerState=>{\n const{\n classes,\n variant,\n disabled,\n multiple,\n open,\n error\n}=ownerState;\n const slots={\n select:['select',variant,disabled && 'disabled',multiple && 'multiple',error && 'error'],\n icon:['icon',`icon${(0,capitalize.A)(variant)}`,open && 'iconOpen',disabled && 'disabled'],\n nativeInput:['nativeInput']\n};\n return (0,composeClasses.A)(slots,getSelectUtilityClasses,classes);\n};\n\n\nconst SelectInput=external_React_.forwardRef(function SelectInput(props,ref){\n var _MenuProps$slotProps;\n const{\n 'aria-describedby':ariaDescribedby,\n 'aria-label':ariaLabel,\n autoFocus,\n autoWidth,\n children,\n className,\n defaultOpen,\n defaultValue,\n disabled,\n displayEmpty,\n error=false,\n IconComponent,\n inputRef:inputRefProp,\n labelId,\n MenuProps={},\n tabIndex:tabIndexProp\n // catching `type` from Input which makes no sense for SelectInput\n,\n\n value:valueProp,\n variant='standard'\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,SelectInput_excluded);\n const [value,setValueState]=(0,useControlled.A)({\n controlled:valueProp,\n default:defaultValue,\n name:'Select'\n});\n const [openState,setOpenState]=(0,useControlled.A)({\n controlled:openProp,\n default:defaultOpen,\n name:'Select'\n});\n const inputRef=external_React_.useRef(null);\n const displayRef=external_React_.useRef(null);\n const [displayNode,setDisplayNode]=external_React_.useState(null);\n const{\n current:isOpenControlled\n}=external_React_.useRef(openProp !=null);\n const [menuMinWidthState,setMenuMinWidthState]=external_React_.useState();\n const handleRef=(0,utils_useForkRef.A)(ref,inputRefProp);\n const handleDisplayRef=external_React_.useCallback(node=>{\n displayRef.current=node;\n if (node){\n setDisplayNode(node);\n}\n},[]);\n const anchorElement=displayNode==null ? void 0 :displayNode.parentNode;\n external_React_.useImperativeHandle(handleRef,()=>({\n focus:()=>{\n displayRef.current.focus();\n},\n node:inputRef.current,\n value\n}),[value]);\n\n // Resize menu on `defaultOpen` automatic toggle.\n external_React_.useEffect(()=>{\n if (defaultOpen && openState && displayNode && !isOpenControlled){\n setMenuMinWidthState(autoWidth ? null:anchorElement.clientWidth);\n displayRef.current.focus();\n}\n // eslint-disable-next-line react-hooks/exhaustive-deps\n},[displayNode,autoWidth]);\n // `isOpenControlled` is ignored because the component should never switch between controlled and uncontrolled modes.\n // `defaultOpen` and `openState` are ignored to avoid unnecessary callbacks.\n external_React_.useEffect(()=>{\n if (autoFocus){\n displayRef.current.focus();\n}\n},[autoFocus]);\n external_React_.useEffect(()=>{\n if (!labelId){\n return undefined;\n}\n const label=(0,ownerDocument.A)(displayRef.current).getElementById(labelId);\n if (label){\n const handler=()=>{\n if (getSelection().isCollapsed){\n displayRef.current.focus();\n}\n};\n label.addEventListener('click',handler);\n return ()=>{\n label.removeEventListener('click',handler);\n};\n}\n return undefined;\n},[labelId]);\n const update=(open,event)=>{\n if (open){\n if (onOpen){\n onOpen(event);\n}\n}else if (onClose){\n onClose(event);\n}\n if (!isOpenControlled){\n setMenuMinWidthState(autoWidth ? null:anchorElement.clientWidth);\n setOpenState(open);\n}\n};\n const handleMouseDown=event=>{\n // Ignore everything but left-click\n if (event.button !==0){\n return;\n}\n // Hijack the default focus behavior.\n event.preventDefault();\n displayRef.current.focus();\n update(true,event);\n};\n const handleClose=event=>{\n update(false,event);\n};\n const childrenArray=external_React_.Children.toArray(children);\n\n // Support autofill.\n const handleChange=event=>{\n const child=childrenArray.find(childItem=>childItem.props.value===event.target.value);\n if (child===undefined){\n return;\n}\n setValueState(child.props.value);\n if (onChange){\n onChange(event,child);\n}\n};\n const handleItemClick=child=>event=>{\n let newValue;\n\n // We use the tabindex attribute to signal the available options.\n if (!event.currentTarget.hasAttribute('tabindex')){\n return;\n}\n if (multiple){\n newValue=Array.isArray(value) ? value.slice() :[];\n const itemIndex=value.indexOf(child.props.value);\n if (itemIndex===-1){\n newValue.push(child.props.value);\n}else{\n newValue.splice(itemIndex,1);\n}\n}else{\n newValue=child.props.value;\n}\n if (child.props.onClick){\n child.props.onClick(event);\n}\n if (value !==newValue){\n setValueState(newValue);\n if (onChange){\n // Redefine target to allow name and value to be read.\n // This allows seamless integration with the most popular form libraries.\n // https://github.com/mui/material-ui/issues/13485#issuecomment-676048492\n // Clone the event to not override `target` of the original event.\n const nativeEvent=event.nativeEvent || event;\n const clonedEvent=new nativeEvent.constructor(nativeEvent.type,nativeEvent);\n Object.defineProperty(clonedEvent,'target',{\n writable:true,\n value:{\n value:newValue,\n name\n}\n});\n onChange(clonedEvent,child);\n}\n}\n if (!multiple){\n update(false,event);\n}\n};\n const handleKeyDown=event=>{\n if (!readOnly){\n const validKeys=[' ','ArrowUp','ArrowDown',\n // The native select doesn't respond to enter on macOS,but it's recommended by\n // http://www.w3.org/WAI/ARIA/apg/patterns/combobox/examples/combobox-select-only/\n 'Enter'];\n if (validKeys.indexOf(event.key) !==-1){\n event.preventDefault();\n update(true,event);\n}\n}\n};\n const open=displayNode !==null && openState;\n const handleBlur=event=>{\n // if open event.stopImmediatePropagation\n if (!open && onBlur){\n // Preact support,target is read only property on a native event.\n Object.defineProperty(event,'target',{\n writable:true,\n value:{\n value,\n name\n}\n});\n onBlur(event);\n}\n};\n delete other['aria-invalid'];\n let display;\n let displaySingle;\n const displayMultiple=[];\n let computeDisplay=false;\n let foundMatch=false;\n\n // No need to display any value if the field is empty.\n if (isFilled({\n value\n}) || displayEmpty){\n if (renderValue){\n display=renderValue(value);\n}else{\n computeDisplay=true;\n}\n}\n const items=childrenArray.map(child=>{\n if (! external_React_.isValidElement(child)){\n return null;\n}\n let selected;\n if (multiple){\n if (!Array.isArray(value)){\n throw new Error(false ? 0:(0,formatMuiErrorMessage.A)(2));\n}\n selected=value.some(v=>areEqualValues(v,child.props.value));\n if (selected && computeDisplay){\n displayMultiple.push(child.props.children);\n}\n}else{\n selected=areEqualValues(value,child.props.value);\n if (selected && computeDisplay){\n displaySingle=child.props.children;\n}\n}\n if (selected){\n foundMatch=true;\n}\n return external_React_.cloneElement(child,{\n 'aria-selected':selected ? 'true' :'false',\n onClick:handleItemClick(child),\n onKeyUp:event=>{\n if (event.key===' '){\n // otherwise our MenuItems dispatches a click event\n // it's not behavior of the native <option>and causes\n // the select to close immediately since we open on space keydown\n event.preventDefault();\n}\n if (child.props.onKeyUp){\n child.props.onKeyUp(event);\n}\n},\n role:'option',\n selected,\n value:undefined,\n // The value is most likely not a valid HTML attribute.\n 'data-value':child.props.value // Instead,we provide it as a data attribute.\n});\n});\n if (computeDisplay){\n if (multiple){\n if (displayMultiple.length===0){\n display=null;\n}else{\n display=displayMultiple.reduce((output,child,index)=>{\n output.push(child);\n if (index < displayMultiple.length - 1){\n output.push(',');\n}\n return output;\n},[]);\n}\n}else{\n display=displaySingle;\n}\n}\n\n // Avoid performing a layout computation in the render method.\n let menuMinWidth=menuMinWidthState;\n if (!autoWidth && isOpenControlled && displayNode){\n menuMinWidth=anchorElement.clientWidth;\n}\n let tabIndex;\n if (typeof tabIndexProp !=='undefined'){\n tabIndex=tabIndexProp;\n}else{\n tabIndex=disabled ? null:0;\n}\n const buttonId=SelectDisplayProps.id || (name ? `mui-component-select-${name}` :undefined);,props,{\n variant,\n value,\n open,\n error\n});\n const classes=SelectInput_useUtilityClasses(ownerState);,MenuProps.PaperProps,(_MenuProps$slotProps=MenuProps.slotProps)==null ? void 0 :_MenuProps$slotProps.paper);\n const listboxId=(0,useId.A)();\n return (0,jsx_runtime.jsxs)(external_React_.Fragment,{\n children:[(0,jsx_runtime.jsx)(SelectSelect,(0,esm_extends.A)({\n ref:handleDisplayRef,\n tabIndex:tabIndex,\n role:\"combobox\",\n \"aria-controls\":listboxId,\n \"aria-disabled\":disabled ? 'true':undefined,\n \"aria-expanded\":open ? 'true':'false',\n \"aria-haspopup\":\"listbox\",\n \"aria-label\":ariaLabel,\n \"aria-labelledby\":[labelId,buttonId].filter(Boolean).join(' ') || undefined,\n \"aria-describedby\":ariaDescribedby,\n onKeyDown:handleKeyDown,\n onMouseDown:disabled || readOnly ? null:handleMouseDown,\n onBlur:handleBlur,\n onFocus:onFocus\n},SelectDisplayProps,{\n ownerState:ownerState,\n className:(0,clsx.A)(SelectDisplayProps.className,classes.select,className)\n // The id is required for proper a11y\n,\n id:buttonId,\n children:SelectInput_isEmpty(display) ? // notranslate needed while Google Translate will not fix zero-width space issue\n SelectInput_span || (SelectInput_span=(0,jsx_runtime.jsx)(\"span\",{\n className:\"notranslate\",\n children:\"\\u200B\"\n})):display\n})),(0,jsx_runtime.jsx)(SelectNativeInput,(0,esm_extends.A)({\n \"aria-invalid\":error,\n value:Array.isArray(value) ? value.join(','):value,\n name:name,\n ref:inputRef,\n \"aria-hidden\":true,\n onChange:handleChange,\n tabIndex:-1,\n disabled:disabled,\n className:classes.nativeInput,\n autoFocus:autoFocus,\n ownerState:ownerState\n},other)),(0,jsx_runtime.jsx)(SelectIcon,{\n as:IconComponent,\n className:classes.icon,\n ownerState:ownerState\n}),(0,jsx_runtime.jsx)(Menu_Menu,(0,esm_extends.A)({\n id:`menu-${name || ''}`,\n anchorEl:anchorElement,\n open:open,\n onClose:handleClose,\n anchorOrigin:{\n vertical:'bottom',\n horizontal:'center'\n},\n transformOrigin:{\n vertical:'top',\n horizontal:'center'\n}\n},MenuProps,{\n MenuListProps:(0,esm_extends.A)({\n 'aria-labelledby':labelId,\n role:'listbox',\n 'aria-multiselectable':multiple ? 'true':undefined,\n disableListWrap:true,\n id:listboxId\n},MenuProps.slotProps,{\n paper:(0,esm_extends.A)({},paperProps,{\n style:(0,esm_extends.A)({\n minWidth:menuMinWidth\n},paperProps !=null ? paperProps.style:null)\n})\n}),\n children:items\n}))]\n});\n});\n false ? 0 :void 0;\n const Select_SelectInput=(SelectInput);\n// EXTERNAL MODULE:./node_modules/@mui/material/utils/createSvgIcon.js\nvar createSvgIcon=__webpack_require__(561);\n;// ./node_modules/@mui/material/internal/svg-icons/ArrowDropDown.js\n'use client';\n\n\n\n\n\n\n const ArrowDropDown=((0,createSvgIcon.A)((0,jsx_runtime.jsx)(\"path\",{\n d:\"M7 10l5 5 5-5z\"\n}),'ArrowDropDown'));\n;// ./node_modules/@mui/material/Select/Select.js\n'use client';\n\n\n\nconst Select_excluded=[\"autoWidth\",\"children\",\"classes\",\"className\",\"defaultOpen\",\"displayEmpty\",\"IconComponent\",\"id\",\"input\",\"inputProps\",\"label\",\"labelId\",\"MenuProps\",\"multiple\",\"native\",\"onClose\",\"onOpen\",\"open\",\"renderValue\",\"SelectDisplayProps\",\"variant\"],\n Select_excluded2=[\"root\"];\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst Select_useUtilityClasses=ownerState=>{\n const{\n classes\n}=ownerState;\n return classes;\n};\nconst styledRootConfig={\n name:'MuiSelect',\n overridesResolver:(props,styles)=>styles.root,\n shouldForwardProp:prop=>(0,rootShouldForwardProp.A)(prop) && prop !=='variant',\n slot:'Root'\n};\nconst StyledInput=(0,styled.Ay)(Input_Input,styledRootConfig)('');\nconst StyledOutlinedInput=(0,styled.Ay)(OutlinedInput_OutlinedInput,styledRootConfig)('');\nconst StyledFilledInput=(0,styled.Ay)(FilledInput_FilledInput,styledRootConfig)('');\nconst Select=external_React_.forwardRef(function Select(inProps,ref){\n const props=(0,DefaultPropsProvider.b)({\n name:'MuiSelect',\n props:inProps\n});\n const{\n autoWidth=false,\n children,\n classes:classesProp={},\n className,\n defaultOpen=false,\n displayEmpty=false,\n IconComponent=ArrowDropDown,\n id,\n input,\n inputProps,\n label,\n labelId,\n MenuProps,\n multiple=false,\n native=false,\n onClose,\n onOpen,\n open,\n renderValue,\n SelectDisplayProps,\n variant:variantProp='outlined'\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,Select_excluded);\n const inputComponent=native ? NativeSelect_NativeSelectInput :Select_SelectInput;\n const muiFormControl=useFormControl();\n const fcs=formControlState({\n props,\n muiFormControl,\n states:['variant','error']\n});\n const variant=fcs.variant || variantProp;,props,{\n variant,\n classes:classesProp\n});\n const classes=Select_useUtilityClasses(ownerState);\n const restOfClasses=(0,objectWithoutPropertiesLoose.A)(classes,Select_excluded2);\n const InputComponent=input ||{\n standard:(0,jsx_runtime.jsx)(StyledInput,{\n ownerState:ownerState\n}),\n outlined:(0,jsx_runtime.jsx)(StyledOutlinedInput,{\n label:label,\n ownerState:ownerState\n}),\n filled:(0,jsx_runtime.jsx)(StyledFilledInput,{\n ownerState:ownerState\n})\n}[variant];\n const inputComponentRef=(0,utils_useForkRef.A)(ref,getReactElementRef(InputComponent));\n return (0,jsx_runtime.jsx)(external_React_.Fragment,{\n children:external_React_.cloneElement(InputComponent,(0,esm_extends.A)({\n // Most of the logic is implemented in `SelectInput`.\n // The `Select` component is a simple API wrapper to expose something better to play with.\n inputComponent,\n inputProps:(0,esm_extends.A)({\n children,\n error:fcs.error,\n IconComponent,\n variant,\n type:undefined,\n // We render a select. We can ignore the type provided by the `Input`.\n multiple\n},native ?{\n id\n}:{\n autoWidth,\n defaultOpen,\n displayEmpty,\n labelId,\n MenuProps,\n onClose,\n onOpen,\n open,\n renderValue,\n SelectDisplayProps:(0,esm_extends.A)({\n id\n},SelectDisplayProps)\n},inputProps,{\n classes:inputProps ? (0,deepmerge.A)(restOfClasses,inputProps.classes):restOfClasses\n})\n},(multiple && native || displayEmpty) && variant==='outlined' ?{\n notched:true\n},{\n ref:inputComponentRef,\n className:(0,clsx.A)(InputComponent.props.className,className,classes.root)\n},!input &&{\n variant\n},other))\n});\n});\n false ? 0 :void 0;\nSelect.muiName='Select';\n const Select_Select=(Select);\n;// ./node_modules/@mui/material/TextField/textFieldClasses.js\n\n\nfunction getTextFieldUtilityClass(slot){\n return (0,generateUtilityClass_generateUtilityClass.Ay)('MuiTextField',slot);\n}\nconst textFieldClasses=(0,generateUtilityClasses.A)('MuiTextField',['root']);\n const TextField_textFieldClasses=((null && (textFieldClasses)));\n;// ./node_modules/@mui/material/TextField/TextField.js\n'use client';\n\n\n\nconst TextField_excluded=[\"autoComplete\",\"autoFocus\",\"children\",\"className\",\"color\",\"defaultValue\",\"disabled\",\"error\",\"FormHelperTextProps\",\"fullWidth\",\"helperText\",\"id\",\"InputLabelProps\",\"inputProps\",\"InputProps\",\"inputRef\",\"label\",\"maxRows\",\"minRows\",\"multiline\",\"name\",\"onBlur\",\"onChange\",\"onFocus\",\"placeholder\",\"required\",\"rows\",\"select\",\"SelectProps\",\"type\",\"value\",\"variant\"];\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst variantComponent={\n standard:Input_Input,\n filled:FilledInput_FilledInput,\n outlined:OutlinedInput_OutlinedInput\n};\nconst TextField_useUtilityClasses=ownerState=>{\n const{\n classes\n}=ownerState;\n const slots={\n root:['root']\n};\n return (0,composeClasses.A)(slots,getTextFieldUtilityClass,classes);\n};\nconst TextFieldRoot=(0,styled.Ay)(FormControl_FormControl,{\n name:'MuiTextField',\n slot:'Root',\n overridesResolver:(props,styles)=>styles.root\n});\n\n\nconst TextField=external_React_.forwardRef(function TextField(inProps,ref){\n const props=(0,DefaultPropsProvider.b)({\n props:inProps,\n name:'MuiTextField'\n});\n const{\n autoComplete,\n autoFocus=false,\n children,\n className,\n color='primary',\n defaultValue,\n disabled=false,\n error=false,\n FormHelperTextProps,\n fullWidth=false,\n helperText,\n id:idOverride,\n InputLabelProps,\n inputProps,\n InputProps,\n inputRef,\n label,\n maxRows,\n minRows,\n multiline=false,\n name,\n onBlur,\n onChange,\n onFocus,\n placeholder,\n required=false,\n rows,\n select=false,\n SelectProps,\n type,\n value,\n variant='outlined'\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,TextField_excluded);,props,{\n autoFocus,\n color,\n disabled,\n error,\n fullWidth,\n multiline,\n required,\n select,\n variant\n});\n const classes=TextField_useUtilityClasses(ownerState);;\n if (variant==='outlined'){\n if (InputLabelProps && typeof InputLabelProps.shrink !=='undefined'){\n InputMore.notched=InputLabelProps.shrink;\n}\n InputMore.label=label;\n}\n if (select){\n // unset defaults from textbox inputs\n if (!SelectProps || !SelectProps.native){\n InputMore.id=undefined;\n}\n InputMore['aria-describedby']=undefined;\n}\n const id=(0,useId.A)(idOverride);\n const helperTextId=helperText && id ? `${id}-helper-text` :undefined;\n const inputLabelId=label && id ? `${id}-label` :undefined;\n const InputComponent=variantComponent[variant];\n const InputElement=(0,jsx_runtime.jsx)(InputComponent,(0,esm_extends.A)({\n \"aria-describedby\":helperTextId,\n autoComplete:autoComplete,\n autoFocus:autoFocus,\n defaultValue:defaultValue,\n fullWidth:fullWidth,\n multiline:multiline,\n name:name,\n rows:rows,\n maxRows:maxRows,\n minRows:minRows,\n type:type,\n value:value,\n id:id,\n inputRef:inputRef,\n onBlur:onBlur,\n onChange:onChange,\n onFocus:onFocus,\n placeholder:placeholder,\n inputProps:inputProps\n},InputMore,InputProps));\n return (0,jsx_runtime.jsxs)(TextFieldRoot,(0,esm_extends.A)({\n className:(0,clsx.A)(classes.root,className),\n disabled:disabled,\n error:error,\n fullWidth:fullWidth,\n ref:ref,\n required:required,\n color:color,\n variant:variant,\n ownerState:ownerState\n},other,{\n children:[label !=null && label !=='' && (0,jsx_runtime.jsx)(InputLabel_InputLabel,(0,esm_extends.A)({\n htmlFor:id,\n id:inputLabelId\n},InputLabelProps,{\n children:label\n})),select ? (0,jsx_runtime.jsx)(Select_Select,(0,esm_extends.A)({\n \"aria-describedby\":helperTextId,\n id:id,\n labelId:inputLabelId,\n value:value,\n input:InputElement\n},SelectProps,{\n children:children\n})) :InputElement,helperText && (0,jsx_runtime.jsx)(FormHelperText_FormHelperText,(0,esm_extends.A)({\n id:helperTextId\n},FormHelperTextProps,{\n children:helperText\n}))]\n}));\n});\n false ? 0 :void 0;\n const TextField_TextField=(TextField);\n// EXTERNAL MODULE:./node_modules/@mui/material/utils/useEventCallback.js\nvar utils_useEventCallback=__webpack_require__(3034);\n// EXTERNAL MODULE:./node_modules/@mui/material/utils/useIsFocusVisible.js\nvar useIsFocusVisible=__webpack_require__(8851);\n;// ./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js\nfunction _assertThisInitialized(e){\n if (void 0===e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n return e;\n}\n\n;// ./node_modules/react-transition-group/esm/utils/ChildMapping.js\n\n\n\nfunction getChildMapping(children,mapFn){\n var mapper=function mapper(child){\n return mapFn && (0,external_React_.isValidElement)(child) ? mapFn(child):child;\n};\n\n var result=Object.create(null);\n if (children) external_React_.Children.map(children,function (c){\n return c;\n}).forEach(function (child){\n // run the map function here instead so that the key is the computed one\n result[child.key]=mapper(child);\n});\n return result;\n}\n\n\nfunction mergeChildMappings(prev,next){\n prev=prev ||{};;\n\n function getValueForKey(key){\n return key in next ? next[key]:prev[key];\n}// For each key of `next`,the list of keys to insert before that key in\n // the combined list\n\n\n var nextKeysPending=Object.create(null);\n var pendingKeys=[];\n\n for (var prevKey in prev){\n if (prevKey in next){\n if (pendingKeys.length){\n nextKeysPending[prevKey]=pendingKeys;\n pendingKeys=[];\n}\n}else{\n pendingKeys.push(prevKey);\n}\n}\n\n var i;;\n\n for (var nextKey in next){\n if (nextKeysPending[nextKey]){\n for (i=0;i < nextKeysPending[nextKey].length;i++){\n var pendingNextKey=nextKeysPending[nextKey][i];\n childMapping[nextKeysPending[nextKey][i]]=getValueForKey(pendingNextKey);\n}\n}\n\n childMapping[nextKey]=getValueForKey(nextKey);\n}// Finally,add the keys which didn't appear before any key in `next`\n\n\n for (i=0;i < pendingKeys.length;i++){\n childMapping[pendingKeys[i]]=getValueForKey(pendingKeys[i]);\n}\n\n return childMapping;\n}\n\nfunction getProp(child,prop,props){\n return props[prop] !=null ? props[prop]:child.props[prop];\n}\n\nfunction getInitialChildMapping(props,onExited){\n return getChildMapping(props.children,function (child){\n return (0,external_React_.cloneElement)(child,{\n onExited:onExited.bind(null,child),\n in:true,\n appear:getProp(child,'appear',props),\n enter:getProp(child,'enter',props),\n exit:getProp(child,'exit',props)\n});\n});\n}\nfunction getNextChildMapping(nextProps,prevChildMapping,onExited){\n var nextChildMapping=getChildMapping(nextProps.children);\n var children=mergeChildMappings(prevChildMapping,nextChildMapping);\n Object.keys(children).forEach(function (key){\n var child=children[key];\n if (!(0,external_React_.isValidElement)(child)) return;\n var hasPrev=(key in prevChildMapping);\n var hasNext=(key in nextChildMapping);\n var prevChild=prevChildMapping[key];\n var isLeaving=(0,external_React_.isValidElement)(prevChild) && !prevChild.props.in;// item is new (entering)\n\n if (hasNext && (!hasPrev || isLeaving)){\n // console.log('entering',key)\n children[key]=(0,external_React_.cloneElement)(child,{\n onExited:onExited.bind(null,child),\n in:true,\n exit:getProp(child,'exit',nextProps),\n enter:getProp(child,'enter',nextProps)\n});\n}else if (!hasNext && hasPrev && !isLeaving){\n // item is old (exiting)\n // console.log('leaving',key)\n children[key]=(0,external_React_.cloneElement)(child,{\n in:false\n});\n}else if (hasNext && hasPrev && (0,external_React_.isValidElement)(prevChild)){\n // item hasn't changed transition states\n // copy over the last transition props;\n // console.log('unchanged',key)\n children[key]=(0,external_React_.cloneElement)(child,{\n onExited:onExited.bind(null,child),\n in:prevChild.props.in,\n exit:getProp(child,'exit',nextProps),\n enter:getProp(child,'enter',nextProps)\n});\n}\n});\n return children;\n}\n;// ./node_modules/react-transition-group/esm/TransitionGroup.js\n\n\n\n\n\n\n\n\n\nvar values=Object.values || function (obj){\n return Object.keys(obj).map(function (k){\n return obj[k];\n});\n};\n\nvar defaultProps={\n component:'div',\n childFactory:function childFactory(child){\n return child;\n}\n};\n\n\nvar TransitionGroup=function (_React$Component){\n _inheritsLoose(TransitionGroup,_React$Component);\n\n function TransitionGroup(props,context){\n var _this;\n\n _this=_React$Component.call(this,props,context) || this;\n\n var handleExited=_this.handleExited.bind(_assertThisInitialized(_this));// Initial children should all be entering,dependent on appear\n\n\n _this.state={\n contextValue:{\n isMounting:true\n},\n handleExited:handleExited,\n firstRender:true\n};\n return _this;\n}\n\n var _proto=TransitionGroup.prototype;\n\n _proto.componentDidMount=function componentDidMount(){\n this.mounted=true;\n this.setState({\n contextValue:{\n isMounting:false\n}\n});\n};\n\n _proto.componentWillUnmount=function componentWillUnmount(){\n this.mounted=false;\n};\n\n TransitionGroup.getDerivedStateFromProps=function getDerivedStateFromProps(nextProps,_ref){\n var prevChildMapping=_ref.children,\n handleExited=_ref.handleExited,\n firstRender=_ref.firstRender;\n return{\n children:firstRender ? getInitialChildMapping(nextProps,handleExited):getNextChildMapping(nextProps,prevChildMapping,handleExited),\n firstRender:false\n};\n}// node is `undefined` when user provided `nodeRef` prop\n;\n\n _proto.handleExited=function handleExited(child,node){\n var currentChildMapping=getChildMapping(this.props.children);\n if (child.key in currentChildMapping) return;\n\n if (child.props.onExited){\n child.props.onExited(node);\n}\n\n if (this.mounted){\n this.setState(function (state){\n var children=(0,esm_extends.A)({},state.children);\n\n delete children[child.key];\n return{\n children:children\n};\n});\n}\n};\n\n _proto.render=function render(){\n var _this$props=this.props,\n Component=_this$props.component,\n childFactory=_this$props.childFactory,\n props=(0,objectWithoutPropertiesLoose.A)(_this$props,[\"component\",\"childFactory\"]);\n\n var contextValue=this.state.contextValue;\n var children=values(this.state.children).map(childFactory);\n delete props.appear;\n delete props.enter;\n delete props.exit;\n\n if (Component===null){\n return external_React_default().createElement(TransitionGroupContext.Provider,{\n value:contextValue\n},children);\n}\n\n return external_React_default().createElement(TransitionGroupContext.Provider,{\n value:contextValue\n},external_React_default().createElement(Component,props,children));\n};\n\n return TransitionGroup;\n}((external_React_default()).Component);;\nTransitionGroup.defaultProps=defaultProps;\n const esm_TransitionGroup=(TransitionGroup);\n// EXTERNAL MODULE:./node_modules/@emotion/react/dist/emotion-react.browser.esm.js\nvar emotion_react_browser_esm=__webpack_require__(7437);\n;// ./node_modules/@mui/material/ButtonBase/Ripple.js\n'use client';\n\n\n\n\n\n\n\nfunction Ripple(props){\n const{\n className,\n classes,\n pulsate=false,\n rippleX,\n rippleY,\n rippleSize,\n in:inProp,\n onExited,\n timeout\n}=props;\n const [leaving,setLeaving]=external_React_.useState(false);\n const rippleClassName=(0,clsx.A)(className,classes.ripple,classes.rippleVisible,pulsate && classes.ripplePulsate);\n const rippleStyles={\n width:rippleSize,\n height:rippleSize,\n top:-(rippleSize / 2)+rippleY,\n left:-(rippleSize / 2)+rippleX\n};\n const childClassName=(0,clsx.A)(classes.child,leaving && classes.childLeaving,pulsate && classes.childPulsate);\n if (!inProp && !leaving){\n setLeaving(true);\n}\n external_React_.useEffect(()=>{\n if (!inProp && onExited !=null){\n // react-transition-group#onExited\n const timeoutId=setTimeout(onExited,timeout);\n return ()=>{\n clearTimeout(timeoutId);\n};\n}\n return undefined;\n},[onExited,inProp,timeout]);\n return (0,jsx_runtime.jsx)(\"span\",{\n className:rippleClassName,\n style:rippleStyles,\n children:(0,jsx_runtime.jsx)(\"span\",{\n className:childClassName\n})\n});\n}\n false ? 0 :void 0;\n const ButtonBase_Ripple=(Ripple);\n;// ./node_modules/@mui/material/ButtonBase/touchRippleClasses.js\n\n\nfunction getTouchRippleUtilityClass(slot){\n return generateUtilityClass('MuiTouchRipple',slot);\n}\nconst touchRippleClasses=(0,generateUtilityClasses.A)('MuiTouchRipple',['root','ripple','rippleVisible','ripplePulsate','child','childLeaving','childPulsate']);\n const ButtonBase_touchRippleClasses=(touchRippleClasses);\n;// ./node_modules/@mui/material/ButtonBase/TouchRipple.js\n'use client';\n\n\n\nconst TouchRipple_excluded=[\"center\",\"classes\",\"className\"];\nlet _=t=>t,\n _t,\n _t2,\n _t3,\n _t4;\n\n\n\n\n\n\n\n\n\n\n\nconst DURATION=550;\nconst DELAY_RIPPLE=80;\nconst enterKeyframe=(0,emotion_react_browser_esm.i7)(_t || (_t=_`\n 0%{\n transform:scale(0);\n opacity:.1;\n}\n\n 100%{\n transform:scale(1);\n opacity:.3;\n}\n`));\nconst exitKeyframe=(0,emotion_react_browser_esm.i7)(_t2 || (_t2=_`\n 0%{\n opacity:1;\n}\n\n 100%{\n opacity:0;\n}\n`));\nconst pulsateKeyframe=(0,emotion_react_browser_esm.i7)(_t3 || (_t3=_`\n 0%{\n transform:scale(1);\n}\n\n 50%{\n transform:scale(.92);\n}\n\n 100%{\n transform:scale(1);\n}\n`));\nconst TouchRippleRoot=(0,styled.Ay)('span',{\n name:'MuiTouchRipple',\n slot:'Root'\n})({\n overflow:'hidden',\n pointerEvents:'none',\n position:'absolute',\n zIndex:0,\n top:0,\n right:0,\n bottom:0,\n left:0,\n borderRadius:'inherit'\n});\n\n// This `styled()` function invokes keyframes. `styled-components` only supports keyframes\n// in string templates. Do not convert these styles in JS object as it will break.\nconst TouchRippleRipple=(0,styled.Ay)(ButtonBase_Ripple,{\n name:'MuiTouchRipple',\n slot:'Ripple'\n})(_t4 || (_t4=_`\n opacity:0;\n position:absolute;\n\n &.${0}{\n opacity:.3;\n transform:scale(1);\n animation-name:${0};\n animation-duration:${0}ms;\n animation-timing-function:${0};\n}\n\n &.${0}{\n animation-duration:${0}ms;\n}\n\n & .${0}{\n opacity:1;\n display:block;\n width:100%;\n height:100%;\n border-radius:50%;\n background-color:currentColor;\n}\n\n & .${0}{\n opacity:0;\n animation-name:${0};\n animation-duration:${0}ms;\n animation-timing-function:${0};\n}\n\n & .${0}{\n position:absolute;\n \n left:0;\n top:0;\n animation-name:${0};\n animation-duration:2500ms;\n animation-timing-function:${0};\n animation-iteration-count:infinite;\n animation-delay:200ms;\n}\n`),ButtonBase_touchRippleClasses.rippleVisible,enterKeyframe,DURATION,({\n theme\n})=>theme.transitions.easing.easeInOut,ButtonBase_touchRippleClasses.ripplePulsate,({\n theme\n})=>theme.transitions.duration.shorter,ButtonBase_touchRippleClasses.child,ButtonBase_touchRippleClasses.childLeaving,exitKeyframe,DURATION,({\n theme\n})=>theme.transitions.easing.easeInOut,ButtonBase_touchRippleClasses.childPulsate,pulsateKeyframe,({\n theme\n})=>theme.transitions.easing.easeInOut);\n\n\nconst TouchRipple=external_React_.forwardRef(function TouchRipple(inProps,ref){\n const props=(0,DefaultPropsProvider.b)({\n props:inProps,\n name:'MuiTouchRipple'\n});\n const{\n center:centerProp=false,\n classes={},\n className\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,TouchRipple_excluded);\n const [ripples,setRipples]=external_React_.useState([]);\n const nextKey=external_React_.useRef(0);\n const rippleCallback=external_React_.useRef(null);\n external_React_.useEffect(()=>{\n if (rippleCallback.current){\n rippleCallback.current();\n rippleCallback.current=null;\n}\n},[ripples]);\n\n // Used to filter out mouse emulated events on mobile.\n const ignoringMouseDown=external_React_.useRef(false);\n // We use a timer in order to only show the ripples for touch \"click\" like events.\n // We don't want to display the ripple for touch scroll events.\n const startTimer=(0,useTimeout.A)();\n\n // This is the hook called once the previous timeout is ready.\n const startTimerCommit=external_React_.useRef(null);\n const container=external_React_.useRef(null);\n const startCommit=external_React_.useCallback(params=>{\n const{\n pulsate,\n rippleX,\n rippleY,\n rippleSize,\n cb\n}=params;\n setRipples(oldRipples=>[...oldRipples,(0,jsx_runtime.jsx)(TouchRippleRipple,{\n classes:{\n ripple:(0,clsx.A)(classes.ripple,ButtonBase_touchRippleClasses.ripple),\n rippleVisible:(0,clsx.A)(classes.rippleVisible,ButtonBase_touchRippleClasses.rippleVisible),\n ripplePulsate:(0,clsx.A)(classes.ripplePulsate,ButtonBase_touchRippleClasses.ripplePulsate),\n child:(0,clsx.A)(classes.child,ButtonBase_touchRippleClasses.child),\n childLeaving:(0,clsx.A)(classes.childLeaving,ButtonBase_touchRippleClasses.childLeaving),\n childPulsate:(0,clsx.A)(classes.childPulsate,ButtonBase_touchRippleClasses.childPulsate)\n},\n timeout:DURATION,\n pulsate:pulsate,\n rippleX:rippleX,\n rippleY:rippleY,\n rippleSize:rippleSize\n},nextKey.current)]);\n nextKey.current+=1;\n rippleCallback.current=cb;\n},[classes]);)=>{\n const{\n pulsate=false,\n center=centerProp || options.pulsate,\n fakeElement=false // For test purposes\n}=options;\n if ((event==null ? void 0 :event.type)==='mousedown' && ignoringMouseDown.current){\n ignoringMouseDown.current=false;\n return;\n}\n if ((event==null ? void 0 :event.type)==='touchstart'){\n ignoringMouseDown.current=true;\n}\n const element=fakeElement ? null :container.current;\n const rect=element ? element.getBoundingClientRect() :{\n width:0,\n height:0,\n left:0,\n top:0\n};\n\n // Get the size of the ripple\n let rippleX;\n let rippleY;\n let rippleSize;\n if (center || event===undefined || event.clientX===0 && event.clientY===0 || !event.clientX && !event.touches){\n rippleX=Math.round(rect.width / 2);\n rippleY=Math.round(rect.height / 2);\n}else{\n const{\n clientX,\n clientY\n}=event.touches && event.touches.length>0 ? event.touches[0]:event;\n rippleX=Math.round(clientX - rect.left);\n rippleY=Math.round(clientY - rect.top);\n}\n if (center){\n rippleSize=Math.sqrt((2 * rect.width ** 2+rect.height ** 2) / 3);\n\n // For some reason the animation is broken on Mobile Chrome if the size is even.\n if (rippleSize % 2===0){\n rippleSize+=1;\n}\n}else{\n const sizeX=Math.max(Math.abs((element ? element.clientWidth : 0) - rippleX), rippleX) * 2+2;\n const sizeY=Math.max(Math.abs((element ? element.clientHeight : 0) - rippleY), rippleY) * 2+2;\n rippleSize=Math.sqrt(sizeX ** 2+sizeY ** 2);\n}\n\n // Touche devices\n if (event !=null && event.touches){\n // check that this isn't another touchstart due to multitouch\n // otherwise we will only clear a single timer when unmounting while two\n // are running\n if (startTimerCommit.current===null){\n // Prepare the ripple effect.\n startTimerCommit.current=()=>{\n startCommit({\n pulsate,\n rippleX,\n rippleY,\n rippleSize,\n cb\n});\n};\n // Delay the execution of the ripple effect.\n // We have to make a tradeoff with this delay value.\n startTimer.start(DELAY_RIPPLE,()=>{\n if (startTimerCommit.current){\n startTimerCommit.current();\n startTimerCommit.current=null;\n}\n});\n}\n}else{\n startCommit({\n pulsate,\n rippleX,\n rippleY,\n rippleSize,\n cb\n});\n}\n},[centerProp,startCommit,startTimer]);\n const pulsate=external_React_.useCallback(()=>{\n start({},{\n pulsate:true\n});\n},[start]);\n const stop=external_React_.useCallback((event,cb)=>{\n startTimer.clear();\n\n // The touch interaction occurs too quickly.\n // We still want to show ripple effect.\n if ((event==null ? void 0 :event.type)==='touchend' && startTimerCommit.current){\n startTimerCommit.current();\n startTimerCommit.current=null;\n startTimer.start(0,()=>{\n stop(event,cb);\n});\n return;\n}\n startTimerCommit.current=null;\n setRipples(oldRipples=>{\n if (oldRipples.length>0){\n return oldRipples.slice(1);\n}\n return oldRipples;\n});\n rippleCallback.current=cb;\n},[startTimer]);\n external_React_.useImperativeHandle(ref,()=>({\n pulsate,\n start,\n stop\n}),[pulsate,start,stop]);\n return (0,jsx_runtime.jsx)(TouchRippleRoot,(0,esm_extends.A)({\n className:(0,clsx.A)(ButtonBase_touchRippleClasses.root,classes.root,className),\n ref:container\n},other,{\n children:(0,jsx_runtime.jsx)(esm_TransitionGroup,{\n component:null,\n exit:true,\n children:ripples\n})\n}));\n});\n false ? 0 :void 0;\n const ButtonBase_TouchRipple=(TouchRipple);\n;// ./node_modules/@mui/material/ButtonBase/buttonBaseClasses.js\n\n\nfunction getButtonBaseUtilityClass(slot){\n return (0,generateUtilityClass_generateUtilityClass.Ay)('MuiButtonBase',slot);\n}\nconst buttonBaseClasses=(0,generateUtilityClasses.A)('MuiButtonBase',['root','disabled','focusVisible']);\n const ButtonBase_buttonBaseClasses=(buttonBaseClasses);\n;// ./node_modules/@mui/material/ButtonBase/ButtonBase.js\n'use client';\n\n\n\nconst ButtonBase_excluded=[\"action\",\"centerRipple\",\"children\",\"className\",\"component\",\"disabled\",\"disableRipple\",\"disableTouchRipple\",\"focusRipple\",\"focusVisibleClassName\",\"LinkComponent\",\"onBlur\",\"onClick\",\"onContextMenu\",\"onDragLeave\",\"onFocus\",\"onFocusVisible\",\"onKeyDown\",\"onKeyUp\",\"onMouseDown\",\"onMouseLeave\",\"onMouseUp\",\"onTouchEnd\",\"onTouchMove\",\"onTouchStart\",\"tabIndex\",\"TouchRippleProps\",\"touchRippleRef\",\"type\"];\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst ButtonBase_useUtilityClasses=ownerState=>{\n const{\n disabled,\n focusVisible,\n focusVisibleClassName,\n classes\n}=ownerState;\n const slots={\n root:['root',disabled && 'disabled',focusVisible && 'focusVisible']\n};\n const composedClasses=(0,composeClasses.A)(slots,getButtonBaseUtilityClass,classes);\n if (focusVisible && focusVisibleClassName){\n composedClasses.root+=` ${focusVisibleClassName}`;\n}\n return composedClasses;\n};\nconst ButtonBaseRoot=(0,styled.Ay)('button',{\n name:'MuiButtonBase',\n slot:'Root',\n overridesResolver:(props,styles)=>styles.root\n})({\n display:'inline-flex',\n alignItems:'center',\n justifyContent:'center',\n position:'relative',\n boxSizing:'border-box',\n WebkitTapHighlightColor:'transparent',\n backgroundColor:'transparent',\n // Reset default value\n // We disable the focus ring for mouse,touch and keyboard users.\n outline:0,\n border:0,\n margin:0,\n // Remove the margin in Safari\n borderRadius:0,\n padding:0,\n // Remove the padding in Firefox\n cursor:'pointer',\n userSelect:'none',\n verticalAlign:'middle',\n MozAppearance:'none',\n // Reset\n WebkitAppearance:'none',\n // Reset\n textDecoration:'none',\n // So we take precedent over the style of a native <a />element.\n color:'inherit',\n '&::-moz-focus-inner':{\n borderStyle:'none' // Remove Firefox dotted outline.\n},\n [`&.${ButtonBase_buttonBaseClasses.disabled}`]:{\n pointerEvents:'none',\n // Disable link interactions\n cursor:'default'\n},\n '@media print':{\n colorAdjust:'exact'\n}\n});\n\n\nconst ButtonBase=external_React_.forwardRef(function ButtonBase(inProps,ref){\n const props=(0,DefaultPropsProvider.b)({\n props:inProps,\n name:'MuiButtonBase'\n});\n const{\n action,\n centerRipple=false,\n children,\n className,\n component='button',\n disabled=false,\n disableRipple=false,\n disableTouchRipple=false,\n focusRipple=false,\n LinkComponent='a',\n onBlur,\n onClick,\n onContextMenu,\n onDragLeave,\n onFocus,\n onFocusVisible,\n onKeyDown,\n onKeyUp,\n onMouseDown,\n onMouseLeave,\n onMouseUp,\n onTouchEnd,\n onTouchMove,\n onTouchStart,\n tabIndex=0,\n TouchRippleProps,\n touchRippleRef,\n type\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,ButtonBase_excluded);\n const buttonRef=external_React_.useRef(null);\n const rippleRef=external_React_.useRef(null);\n const handleRippleRef=(0,utils_useForkRef.A)(rippleRef,touchRippleRef);\n const{\n isFocusVisibleRef,\n onFocus:handleFocusVisible,\n onBlur:handleBlurVisible,\n ref:focusVisibleRef\n}=(0,useIsFocusVisible.A)();\n const [focusVisible,setFocusVisible]=external_React_.useState(false);\n if (disabled && focusVisible){\n setFocusVisible(false);\n}\n external_React_.useImperativeHandle(action,()=>({\n focusVisible:()=>{\n setFocusVisible(true);\n buttonRef.current.focus();\n}\n}),[]);\n const [mountedState,setMountedState]=external_React_.useState(false);\n external_React_.useEffect(()=>{\n setMountedState(true);\n},[]);\n const enableTouchRipple=mountedState && !disableRipple && !disabled;\n external_React_.useEffect(()=>{\n if (focusVisible && focusRipple && !disableRipple && mountedState){\n rippleRef.current.pulsate();\n}\n},[disableRipple,focusRipple,focusVisible,mountedState]);\n function useRippleHandler(rippleAction,eventCallback,skipRippleAction=disableTouchRipple){\n return (0,utils_useEventCallback.A)(event=>{\n if (eventCallback){\n eventCallback(event);\n}\n const ignore=skipRippleAction;\n if (!ignore && rippleRef.current){\n rippleRef.current[rippleAction](event);\n}\n return true;\n});\n}\n const handleMouseDown=useRippleHandler('start',onMouseDown);\n const handleContextMenu=useRippleHandler('stop',onContextMenu);\n const handleDragLeave=useRippleHandler('stop',onDragLeave);\n const handleMouseUp=useRippleHandler('stop',onMouseUp);\n const handleMouseLeave=useRippleHandler('stop',event=>{\n if (focusVisible){\n event.preventDefault();\n}\n if (onMouseLeave){\n onMouseLeave(event);\n}\n});\n const handleTouchStart=useRippleHandler('start',onTouchStart);\n const handleTouchEnd=useRippleHandler('stop',onTouchEnd);\n const handleTouchMove=useRippleHandler('stop',onTouchMove);\n const handleBlur=useRippleHandler('stop',event=>{\n handleBlurVisible(event);\n if (isFocusVisibleRef.current===false){\n setFocusVisible(false);\n}\n if (onBlur){\n onBlur(event);\n}\n},false);\n const handleFocus=(0,utils_useEventCallback.A)(event=>{\n // Fix for https://github.com/facebook/react/issues/7769\n if (!buttonRef.current){\n buttonRef.current=event.currentTarget;\n}\n handleFocusVisible(event);\n if (isFocusVisibleRef.current===true){\n setFocusVisible(true);\n if (onFocusVisible){\n onFocusVisible(event);\n}\n}\n if (onFocus){\n onFocus(event);\n}\n});\n const isNonNativeButton=()=>{\n const button=buttonRef.current;\n return component && component !=='button' && !(button.tagName==='A' && button.href);\n};\n\n \n const keydownRef=external_React_.useRef(false);\n const handleKeyDown=(0,utils_useEventCallback.A)(event=>{\n // Check if key is already down to avoid repeats being counted as multiple activations\n if (focusRipple && !keydownRef.current && focusVisible && rippleRef.current && event.key===' '){\n keydownRef.current=true;\n rippleRef.current.stop(event,()=>{\n rippleRef.current.start(event);\n});\n}\n if (event.target===event.currentTarget && isNonNativeButton() && event.key===' '){\n event.preventDefault();\n}\n if (onKeyDown){\n onKeyDown(event);\n}\n\n // Keyboard accessibility for non interactive elements\n if (event.target===event.currentTarget && isNonNativeButton() && event.key==='Enter' && !disabled){\n event.preventDefault();\n if (onClick){\n onClick(event);\n}\n}\n});\n const handleKeyUp=(0,utils_useEventCallback.A)(event=>{\n // calling preventDefault in keyUp on a <button>will not dispatch a click event if Space is pressed\n // https://codesandbox.io/p/sandbox/button-keyup-preventdefault-dn7f0\n if (focusRipple && event.key===' ' && rippleRef.current && focusVisible && !event.defaultPrevented){\n keydownRef.current=false;\n rippleRef.current.stop(event,()=>{\n rippleRef.current.pulsate(event);\n});\n}\n if (onKeyUp){\n onKeyUp(event);\n}\n\n // Keyboard accessibility for non interactive elements\n if (onClick && event.target===event.currentTarget && isNonNativeButton() && event.key===' ' && !event.defaultPrevented){\n onClick(event);\n}\n});\n let ComponentProp=component;\n if (ComponentProp==='button' && (other.href || other.to)){\n ComponentProp=LinkComponent;\n};\n if (ComponentProp==='button'){\n buttonProps.type=type===undefined ? 'button':type;\n buttonProps.disabled=disabled;\n}else{\n if (!other.href && !other.to){\n buttonProps.role='button';\n}\n if (disabled){\n buttonProps['aria-disabled']=disabled;\n}\n}\n const handleRef=(0,utils_useForkRef.A)(ref,focusVisibleRef,buttonRef);,props,{\n centerRipple,\n component,\n disabled,\n disableRipple,\n disableTouchRipple,\n focusRipple,\n tabIndex,\n focusVisible\n});\n const classes=ButtonBase_useUtilityClasses(ownerState);\n return (0,jsx_runtime.jsxs)(ButtonBaseRoot,(0,esm_extends.A)({\n as:ComponentProp,\n className:(0,clsx.A)(classes.root,className),\n ownerState:ownerState,\n onBlur:handleBlur,\n onClick:onClick,\n onContextMenu:handleContextMenu,\n onFocus:handleFocus,\n onKeyDown:handleKeyDown,\n onKeyUp:handleKeyUp,\n onMouseDown:handleMouseDown,\n onMouseLeave:handleMouseLeave,\n onMouseUp:handleMouseUp,\n onDragLeave:handleDragLeave,\n onTouchEnd:handleTouchEnd,\n onTouchMove:handleTouchMove,\n onTouchStart:handleTouchStart,\n ref:handleRef,\n tabIndex:disabled ? -1:tabIndex,\n type:type\n},buttonProps,other,{\n children:[children,enableTouchRipple ?\n \n \n (0,jsx_runtime.jsx)(ButtonBase_TouchRipple,(0,esm_extends.A)({\n ref:handleRippleRef,\n center:centerRipple\n},TouchRippleProps)):null]\n}));\n});\n false ? 0 :void 0;\n const ButtonBase_ButtonBase=(ButtonBase);\n;// ./node_modules/@mui/material/IconButton/iconButtonClasses.js\n\n\nfunction getIconButtonUtilityClass(slot){\n return (0,generateUtilityClass_generateUtilityClass.Ay)('MuiIconButton',slot);\n}\nconst iconButtonClasses=(0,generateUtilityClasses.A)('MuiIconButton',['root','disabled','colorInherit','colorPrimary','colorSecondary','colorError','colorInfo','colorSuccess','colorWarning','edgeStart','edgeEnd','sizeSmall','sizeMedium','sizeLarge']);\n const IconButton_iconButtonClasses=(iconButtonClasses);\n;// ./node_modules/@mui/material/IconButton/IconButton.js\n'use client';\n\n\n\nconst IconButton_excluded=[\"edge\",\"children\",\"className\",\"color\",\"disabled\",\"disableFocusRipple\",\"size\"];\n\n\n\n\n\n\n\n\n\n\n\n\nconst IconButton_useUtilityClasses=ownerState=>{\n const{\n classes,\n disabled,\n color,\n edge,\n size\n}=ownerState;\n const slots={\n root:['root',disabled && 'disabled',color !=='default' && `color${(0,capitalize.A)(color)}`,edge && `edge${(0,capitalize.A)(edge)}`,`size${(0,capitalize.A)(size)}`]\n};\n return (0,composeClasses.A)(slots,getIconButtonUtilityClass,classes);\n};\nconst IconButtonRoot=(0,styled.Ay)(ButtonBase_ButtonBase,{\n name:'MuiIconButton',\n slot:'Root',\n overridesResolver:(props,styles)=>{\n const{\n ownerState\n}=props;\n return [styles.root,ownerState.color !=='default' && styles[`color${(0,capitalize.A)(ownerState.color)}`],ownerState.edge && styles[`edge${(0,capitalize.A)(ownerState.edge)}`],styles[`size${(0,capitalize.A)(ownerState.size)}`]];\n}\n})(({\n theme,\n ownerState\n})=>(0,esm_extends.A)({\n textAlign:'center',\n flex:'0 0 auto',\n fontSize:theme.typography.pxToRem(24),\n padding:8,\n borderRadius:'50%',\n overflow:'visible',\n // Explicitly set the default value to solve a bug on IE11.\n color:(theme.vars || theme).palette.action.active,\n transition:theme.transitions.create('background-color',{\n duration:theme.transitions.duration.shortest\n})\n},!ownerState.disableRipple &&{\n '&:hover':{\n backgroundColor:theme.vars ? `rgba(${theme.vars.palette.action.activeChannel}/ ${theme.vars.palette.action.hoverOpacity})` :(0,colorManipulator.X4)(theme.palette.action.active,theme.palette.action.hoverOpacity),\n // Reset on touch devices,it doesn't add specificity\n '@media (hover:none)':{\n backgroundColor:'transparent'\n}\n}\n},ownerState.edge==='start' &&{\n marginLeft:ownerState.size==='small' ? -3:-12\n},ownerState.edge==='end' &&{\n marginRight:ownerState.size==='small' ? -3:-12\n}),({\n theme,\n ownerState\n})=>{\n var _palette;\n const palette=(_palette=(theme.vars || theme).palette)==null ? void 0 :_palette[ownerState.color];,ownerState.color==='inherit' &&{\n color:'inherit'\n},ownerState.color !=='inherit' && ownerState.color !=='default' && (0,esm_extends.A)({\n color:palette==null ? void 0:palette.main\n},!ownerState.disableRipple &&{\n '&:hover':(0,esm_extends.A)({},palette &&{\n backgroundColor:theme.vars ? `rgba(${palette.mainChannel}/ ${theme.vars.palette.action.hoverOpacity})`:(0,colorManipulator.X4)(palette.main,theme.palette.action.hoverOpacity)\n},{\n // Reset on touch devices,it doesn't add specificity\n '@media (hover:none)':{\n backgroundColor:'transparent'\n}\n})\n}),ownerState.size==='small' &&{\n padding:5,\n fontSize:theme.typography.pxToRem(18)\n},ownerState.size==='large' &&{\n padding:12,\n fontSize:theme.typography.pxToRem(28)\n},{\n [`&.${IconButton_iconButtonClasses.disabled}`]:{\n backgroundColor:'transparent',\n color:(theme.vars || theme).palette.action.disabled\n}\n});\n});\n\n\nconst IconButton=external_React_.forwardRef(function IconButton(inProps,ref){\n const props=(0,DefaultPropsProvider.b)({\n props:inProps,\n name:'MuiIconButton'\n});\n const{\n edge=false,\n children,\n className,\n color='default',\n disabled=false,\n disableFocusRipple=false,\n size='medium'\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,IconButton_excluded);,props,{\n edge,\n color,\n disabled,\n disableFocusRipple,\n size\n});\n const classes=IconButton_useUtilityClasses(ownerState);\n return (0,jsx_runtime.jsx)(IconButtonRoot,(0,esm_extends.A)({\n className:(0,clsx.A)(classes.root,className),\n centerRipple:true,\n focusRipple:!disableFocusRipple,\n disabled:disabled,\n ref:ref\n},other,{\n ownerState:ownerState,\n children:children\n}));\n});\n false ? 0 :void 0;\n const IconButton_IconButton=(IconButton);\n;// ./node_modules/@mui/utils/esm/usePreviousProps/usePreviousProps.js\n'use client';\n\n\nconst usePreviousProps=value=>{\n const ref=external_React_.useRef({});\n external_React_.useEffect(()=>{\n ref.current=value;\n});\n return ref.current;\n};\n const usePreviousProps_usePreviousProps=(usePreviousProps);\n;// ./node_modules/@mui/material/Badge/useBadge.js\n'use client';\n\n\n\nfunction useBadge(parameters){\n const{\n badgeContent:badgeContentProp,\n invisible:invisibleProp=false,\n max:maxProp=99,\n showZero=false\n}=parameters;\n const prevProps=usePreviousProps_usePreviousProps({\n badgeContent:badgeContentProp,\n max:maxProp\n});\n let invisible=invisibleProp;\n if (invisibleProp===false && badgeContentProp===0 && !showZero){\n invisible=true;\n}\n const{\n badgeContent,\n max=maxProp\n}=invisible ? prevProps :parameters;\n const displayValue=badgeContent && Number(badgeContent)>max ? `${max}+` :badgeContent;\n return{\n badgeContent,\n invisible,\n max,\n displayValue\n};\n}\n const Badge_useBadge=(useBadge);\n;// ./node_modules/@mui/material/Badge/badgeClasses.js\n\n\nfunction getBadgeUtilityClass(slot){\n return (0,generateUtilityClass_generateUtilityClass.Ay)('MuiBadge',slot);\n}\nconst badgeClasses=(0,generateUtilityClasses.A)('MuiBadge',['root','badge','dot','standard','anchorOriginTopRight','anchorOriginBottomRight','anchorOriginTopLeft','anchorOriginBottomLeft','invisible','colorError','colorInfo','colorPrimary','colorSecondary','colorSuccess','colorWarning','overlapRectangular','overlapCircular',\n// TODO:v6 remove the overlap value from these class keys\n'anchorOriginTopLeftCircular','anchorOriginTopLeftRectangular','anchorOriginTopRightCircular','anchorOriginTopRightRectangular','anchorOriginBottomLeftCircular','anchorOriginBottomLeftRectangular','anchorOriginBottomRightCircular','anchorOriginBottomRightRectangular']);\n const Badge_badgeClasses=(badgeClasses);\n;// ./node_modules/@mui/material/Badge/Badge.js\n'use client';\n\n\n\nconst Badge_excluded=[\"anchorOrigin\",\"className\",\"classes\",\"component\",\"components\",\"componentsProps\",\"children\",\"overlap\",\"color\",\"invisible\",\"max\",\"badgeContent\",\"slots\",\"slotProps\",\"showZero\",\"variant\"];\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst RADIUS_STANDARD=10;\nconst RADIUS_DOT=4;\nconst Badge_useUtilityClasses=ownerState=>{\n const{\n color,\n anchorOrigin,\n invisible,\n overlap,\n variant,\n classes={}\n}=ownerState;\n const slots={\n root:['root'],\n badge:['badge',variant,invisible && 'invisible',`anchorOrigin${(0,capitalize.A)(anchorOrigin.vertical)}${(0,capitalize.A)(anchorOrigin.horizontal)}`,`anchorOrigin${(0,capitalize.A)(anchorOrigin.vertical)}${(0,capitalize.A)(anchorOrigin.horizontal)}${(0,capitalize.A)(overlap)}`,`overlap${(0,capitalize.A)(overlap)}`,color !=='default' && `color${(0,capitalize.A)(color)}`]\n};\n return (0,composeClasses.A)(slots,getBadgeUtilityClass,classes);\n};\nconst BadgeRoot=(0,styled.Ay)('span',{\n name:'MuiBadge',\n slot:'Root',\n overridesResolver:(props,styles)=>styles.root\n})({\n position:'relative',\n display:'inline-flex',\n // For correct alignment with the text.\n verticalAlign:'middle',\n flexShrink:0\n});\nconst BadgeBadge=(0,styled.Ay)('span',{\n name:'MuiBadge',\n slot:'Badge',\n overridesResolver:(props,styles)=>{\n const{\n ownerState\n}=props;\n return [styles.badge,styles[ownerState.variant],styles[`anchorOrigin${(0,capitalize.A)(ownerState.anchorOrigin.vertical)}${(0,capitalize.A)(ownerState.anchorOrigin.horizontal)}${(0,capitalize.A)(ownerState.overlap)}`],ownerState.color !=='default' && styles[`color${(0,capitalize.A)(ownerState.color)}`],ownerState.invisible && styles.invisible];\n}\n})(({\n theme\n})=>{\n var _theme$vars;\n return{\n display:'flex',\n flexDirection:'row',\n flexWrap:'wrap',\n justifyContent:'center',\n alignContent:'center',\n alignItems:'center',\n position:'absolute',\n boxSizing:'border-box',\n fontFamily:theme.typography.fontFamily,\n fontWeight:theme.typography.fontWeightMedium,\n fontSize:theme.typography.pxToRem(12),\n minWidth:RADIUS_STANDARD * 2,\n lineHeight:1,\n padding:'0 6px',\n height:RADIUS_STANDARD * 2,\n borderRadius:RADIUS_STANDARD,\n zIndex:1,\n // Render the badge on top of potential ripples.\n transition:theme.transitions.create('transform',{\n easing:theme.transitions.easing.easeInOut,\n duration:theme.transitions.duration.enteringScreen\n}),\n variants:[...Object.keys(((_theme$vars=theme.vars) !=null ? _theme$vars :theme).palette).filter(key=>{\n var _theme$vars2,_theme$vars3;\n return ((_theme$vars2=theme.vars) !=null ? _theme$vars2:theme).palette[key].main && ((_theme$vars3=theme.vars) !=null ? _theme$vars3:theme).palette[key].contrastText;\n}).map(color=>({\n props:{\n color\n},\n style:{\n backgroundColor:(theme.vars || theme).palette[color].main,\n color:(theme.vars || theme).palette[color].contrastText\n}\n})),{\n props:{\n variant:'dot'\n},\n style:{\n borderRadius:RADIUS_DOT,\n height:RADIUS_DOT * 2,\n minWidth:RADIUS_DOT * 2,\n padding:0\n}\n},{\n props:({\n ownerState\n})=>ownerState.anchorOrigin.vertical==='top' && ownerState.anchorOrigin.horizontal==='right' && ownerState.overlap==='rectangular',\n style:{\n top:0,\n right:0,\n transform:'scale(1) translate(50%,-50%)',\n transformOrigin:'100% 0%',\n [`&.${Badge_badgeClasses.invisible}`]:{\n transform:'scale(0) translate(50%,-50%)'\n}\n}\n},{\n props:({\n ownerState\n})=>ownerState.anchorOrigin.vertical==='bottom' && ownerState.anchorOrigin.horizontal==='right' && ownerState.overlap==='rectangular',\n style:{\n bottom:0,\n right:0,\n transform:'scale(1) translate(50%,50%)',\n transformOrigin:'100% 100%',\n [`&.${Badge_badgeClasses.invisible}`]:{\n transform:'scale(0) translate(50%,50%)'\n}\n}\n},{\n props:({\n ownerState\n})=>ownerState.anchorOrigin.vertical==='top' && ownerState.anchorOrigin.horizontal==='left' && ownerState.overlap==='rectangular',\n style:{\n top:0,\n left:0,\n transform:'scale(1) translate(-50%,-50%)',\n transformOrigin:'0% 0%',\n [`&.${Badge_badgeClasses.invisible}`]:{\n transform:'scale(0) translate(-50%,-50%)'\n}\n}\n},{\n props:({\n ownerState\n})=>ownerState.anchorOrigin.vertical==='bottom' && ownerState.anchorOrigin.horizontal==='left' && ownerState.overlap==='rectangular',\n style:{\n bottom:0,\n left:0,\n transform:'scale(1) translate(-50%,50%)',\n transformOrigin:'0% 100%',\n [`&.${Badge_badgeClasses.invisible}`]:{\n transform:'scale(0) translate(-50%,50%)'\n}\n}\n},{\n props:({\n ownerState\n})=>ownerState.anchorOrigin.vertical==='top' && ownerState.anchorOrigin.horizontal==='right' && ownerState.overlap==='circular',\n style:{\n top:'14%',\n right:'14%',\n transform:'scale(1) translate(50%,-50%)',\n transformOrigin:'100% 0%',\n [`&.${Badge_badgeClasses.invisible}`]:{\n transform:'scale(0) translate(50%,-50%)'\n}\n}\n},{\n props:({\n ownerState\n})=>ownerState.anchorOrigin.vertical==='bottom' && ownerState.anchorOrigin.horizontal==='right' && ownerState.overlap==='circular',\n style:{\n bottom:'14%',\n right:'14%',\n transform:'scale(1) translate(50%,50%)',\n transformOrigin:'100% 100%',\n [`&.${Badge_badgeClasses.invisible}`]:{\n transform:'scale(0) translate(50%,50%)'\n}\n}\n},{\n props:({\n ownerState\n})=>ownerState.anchorOrigin.vertical==='top' && ownerState.anchorOrigin.horizontal==='left' && ownerState.overlap==='circular',\n style:{\n top:'14%',\n left:'14%',\n transform:'scale(1) translate(-50%,-50%)',\n transformOrigin:'0% 0%',\n [`&.${Badge_badgeClasses.invisible}`]:{\n transform:'scale(0) translate(-50%,-50%)'\n}\n}\n},{\n props:({\n ownerState\n})=>ownerState.anchorOrigin.vertical==='bottom' && ownerState.anchorOrigin.horizontal==='left' && ownerState.overlap==='circular',\n style:{\n bottom:'14%',\n left:'14%',\n transform:'scale(1) translate(-50%,50%)',\n transformOrigin:'0% 100%',\n [`&.${Badge_badgeClasses.invisible}`]:{\n transform:'scale(0) translate(-50%,50%)'\n}\n}\n},{\n props:{\n invisible:true\n},\n style:{\n transition:theme.transitions.create('transform',{\n easing:theme.transitions.easing.easeInOut,\n duration:theme.transitions.duration.leavingScreen\n})\n}\n}]\n};\n});\nconst Badge=external_React_.forwardRef(function Badge(inProps,ref){\n var _ref,_slots$root,_ref2,_slots$badge,_slotProps$root,_slotProps$badge;\n const props=(0,DefaultPropsProvider.b)({\n props:inProps,\n name:'MuiBadge'\n});\n const{\n anchorOrigin:anchorOriginProp={\n vertical:'top',\n horizontal:'right'\n},\n children,\n overlap:overlapProp='rectangular',\n color:colorProp='default',\n invisible:invisibleProp=false,\n max:maxProp=99,\n badgeContent:badgeContentProp,\n slots,\n slotProps,\n showZero=false,\n variant:variantProp='standard'\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,Badge_excluded);\n const{\n badgeContent,\n invisible:invisibleFromHook,\n max,\n displayValue:displayValueFromHook\n}=Badge_useBadge({\n max:maxProp,\n invisible:invisibleProp,\n badgeContent:badgeContentProp,\n showZero\n});\n const prevProps=usePreviousProps_usePreviousProps({\n anchorOrigin:anchorOriginProp,\n color:colorProp,\n overlap:overlapProp,\n variant:variantProp,\n badgeContent:badgeContentProp\n});\n const invisible=invisibleFromHook || badgeContent==null && variantProp !=='dot';\n const{\n color=colorProp,\n overlap=overlapProp,\n anchorOrigin=anchorOriginProp,\n variant=variantProp\n}=invisible ? prevProps :props;\n const displayValue=variant !=='dot' ? displayValueFromHook :undefined;,props,{\n badgeContent,\n invisible,\n max,\n displayValue,\n showZero,\n anchorOrigin,\n color,\n overlap,\n variant\n});\n const classes=Badge_useUtilityClasses(ownerState);\n\n // support both `slots` and `components` for backward compatibility\n const RootSlot=(_ref=(_slots$root=slots==null ? void 0 :slots.root) !=null ? _slots$root :components.Root) !=null ? _ref :BadgeRoot;\n const BadgeSlot=(_ref2=(_slots$badge=slots==null ? void 0 :slots.badge) !=null ? _slots$badge :components.Badge) !=null ? _ref2 :BadgeBadge;\n const rootSlotProps=(_slotProps$root=slotProps==null ? void 0 :slotProps.root) !=null ? _slotProps$root :componentsProps.root;\n const badgeSlotProps=(_slotProps$badge=slotProps==null ? void 0 :slotProps.badge) !=null ? _slotProps$badge :componentsProps.badge;\n const rootProps=useSlotProps_useSlotProps({\n elementType:RootSlot,\n externalSlotProps:rootSlotProps,\n externalForwardedProps:other,\n additionalProps:{\n ref,\n as:component\n},\n ownerState,\n className:(0,clsx.A)(rootSlotProps==null ? void 0:rootSlotProps.className,classes.root,className)\n});\n const badgeProps=useSlotProps_useSlotProps({\n elementType:BadgeSlot,\n externalSlotProps:badgeSlotProps,\n ownerState,\n className:(0,clsx.A)(classes.badge,badgeSlotProps==null ? void 0:badgeSlotProps.className)\n});,rootProps,{\n children:[children,(0,jsx_runtime.jsx)(BadgeSlot,(0,esm_extends.A)({},badgeProps,{\n children:displayValue\n}))]\n}));\n});\n false ? 0 :void 0;\n const Badge_Badge=(Badge);\n;// ./node_modules/@mui/material/internal/svg-icons/Person.js\n'use client';\n\n\n\n\n\n\n const Person=((0,createSvgIcon.A)((0,jsx_runtime.jsx)(\"path\",{\n d:\"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z\"\n}),'Person'));\n;// ./node_modules/@mui/material/Avatar/avatarClasses.js\n\n\nfunction getAvatarUtilityClass(slot){\n return (0,generateUtilityClass_generateUtilityClass.Ay)('MuiAvatar',slot);\n}\nconst avatarClasses=(0,generateUtilityClasses.A)('MuiAvatar',['root','colorDefault','circular','rounded','square','img','fallback']);\n const Avatar_avatarClasses=((null && (avatarClasses)));\n;// ./node_modules/@mui/material/utils/useSlot.js\n'use client';\n\n\n\nconst useSlot_excluded=[\"className\",\"elementType\",\"ownerState\",\"externalForwardedProps\",\"getSlotOwnerState\",\"internalForwardedProps\"],\n useSlot_excluded2=[\"component\",\"slots\",\"slotProps\"],\n useSlot_excluded3=[\"component\"];\n\n\n\n\n\nfunction useSlot(\n\nname,parameters){\n const{\n className,\n elementType:initialElementType,\n ownerState,\n externalForwardedProps,\n getSlotOwnerState,\n internalForwardedProps\n}=parameters,\n useSlotPropsParams=(0,objectWithoutPropertiesLoose.A)(parameters,useSlot_excluded);\n const{\n component:rootComponent,\n slots={\n [name]:undefined\n},\n slotProps={\n [name]:undefined\n}\n}=externalForwardedProps,\n other=(0,objectWithoutPropertiesLoose.A)(externalForwardedProps,useSlot_excluded2);\n const elementType=slots[name] || initialElementType;\n\n // `slotProps[name]` can be a callback that receives the component's ownerState.\n // `resolvedComponentsProps` is always a plain object.\n const resolvedComponentsProps=resolveComponentProps_resolveComponentProps(slotProps[name],ownerState);\n const _mergeSlotProps=mergeSlotProps_mergeSlotProps((0,esm_extends.A)({\n className\n},useSlotPropsParams,{\n externalForwardedProps:name==='root' ? other:undefined,\n externalSlotProps:resolvedComponentsProps\n})),\n{\n props:{\n component:slotComponent\n},\n internalRef\n}=_mergeSlotProps,\n mergedProps=(0,objectWithoutPropertiesLoose.A)(_mergeSlotProps.props,useSlot_excluded3);\n const ref=(0,useForkRef.A)(internalRef,resolvedComponentsProps==null ? void 0 :resolvedComponentsProps.ref,parameters.ref);;,ownerState,slotOwnerState);\n const LeafComponent=name==='root' ? slotComponent || rootComponent :slotComponent;,name==='root' && !rootComponent && !slots[name] && internalForwardedProps,name !=='root' && !slots[name] && internalForwardedProps,mergedProps,LeafComponent &&{\n as:LeafComponent\n},{\n ref\n}),finalOwnerState);\n Object.keys(slotOwnerState).forEach(propName=>{\n delete props[propName];\n});\n return [elementType,props];\n}\n;// ./node_modules/@mui/material/Avatar/Avatar.js\n'use client';\n\n\n\nconst Avatar_excluded=[\"alt\",\"children\",\"className\",\"component\",\"slots\",\"slotProps\",\"imgProps\",\"sizes\",\"src\",\"srcSet\",\"variant\"];\n\n\n\n\n\n\n\n\n\n\nconst Avatar_useUtilityClasses=ownerState=>{\n const{\n classes,\n variant,\n colorDefault\n}=ownerState;\n const slots={\n root:['root',variant,colorDefault && 'colorDefault'],\n img:['img'],\n fallback:['fallback']\n};\n return (0,composeClasses.A)(slots,getAvatarUtilityClass,classes);\n};\nconst AvatarRoot=(0,styled.Ay)('div',{\n name:'MuiAvatar',\n slot:'Root',\n overridesResolver:(props,styles)=>{\n const{\n ownerState\n}=props;\n return [styles.root,styles[ownerState.variant],ownerState.colorDefault && styles.colorDefault];\n}\n})(({\n theme\n})=>({\n position:'relative',\n display:'flex',\n alignItems:'center',\n justifyContent:'center',\n flexShrink:0,\n width:40,\n height:40,\n fontFamily:theme.typography.fontFamily,\n fontSize:theme.typography.pxToRem(20),\n lineHeight:1,\n borderRadius:'50%',\n overflow:'hidden',\n userSelect:'none',\n variants:[{\n props:{\n variant:'rounded'\n},\n style:{\n borderRadius:(theme.vars || theme).shape.borderRadius\n}\n},{\n props:{\n variant:'square'\n},\n style:{\n borderRadius:0\n}\n},{\n props:{\n colorDefault:true\n},\n style:(0,esm_extends.A)({\n color:(theme.vars || theme).palette.background.default\n},theme.vars ?{\n backgroundColor:theme.vars.palette.Avatar.defaultBg\n}:(0,esm_extends.A)({\n backgroundColor:theme.palette.grey[400]\n},theme.applyStyles('dark',{\n backgroundColor:theme.palette.grey[600]\n})))\n}]\n}));\nconst AvatarImg=(0,styled.Ay)('img',{\n name:'MuiAvatar',\n slot:'Img',\n overridesResolver:(props,styles)=>styles.img\n})({\n width:'100%',\n height:'100%',\n textAlign:'center',\n // Handle non-square image. The property isn't supported by IE11.\n objectFit:'cover',\n // Hide alt text.\n color:'transparent',\n // Hide the image broken icon,only works on Chrome.\n textIndent:10000\n});\nconst AvatarFallback=(0,styled.Ay)(Person,{\n name:'MuiAvatar',\n slot:'Fallback',\n overridesResolver:(props,styles)=>styles.fallback\n})({\n width:'75%',\n height:'75%'\n});\nfunction useLoaded({\n crossOrigin,\n referrerPolicy,\n src,\n srcSet\n}){\n const [loaded,setLoaded]=external_React_.useState(false);\n external_React_.useEffect(()=>{\n if (!src && !srcSet){\n return undefined;\n}\n setLoaded(false);\n let active=true;\n const image=new Image();\n image.onload=()=>{\n if (!active){\n return;\n}\n setLoaded('loaded');\n};\n image.onerror=()=>{\n if (!active){\n return;\n}\n setLoaded('error');\n};\n image.crossOrigin=crossOrigin;\n image.referrerPolicy=referrerPolicy;\n image.src=src;\n if (srcSet){\n image.srcset=srcSet;\n}\n return ()=>{\n active=false;\n};\n},[crossOrigin,referrerPolicy,src,srcSet]);\n return loaded;\n}\nconst Avatar=external_React_.forwardRef(function Avatar(inProps,ref){\n const props=(0,DefaultPropsProvider.b)({\n props:inProps,\n name:'MuiAvatar'\n});\n const{\n alt,\n children:childrenProp,\n className,\n component='div',\n slots={},\n imgProps,\n sizes,\n src,\n srcSet,\n variant='circular'\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,Avatar_excluded);\n let children=null;,imgProps,{\n src,\n srcSet\n}));\n const hasImg=src || srcSet;\n const hasImgNotFailing=hasImg && loaded !=='error';,props,{\n colorDefault:!hasImgNotFailing,\n component,\n variant\n});\n const classes=Avatar_useUtilityClasses(ownerState);\n const [ImgSlot,imgSlotProps]=useSlot('img',{\n className:classes.img,\n elementType:AvatarImg,\n externalForwardedProps:{\n slots,\n slotProps:{\n img:(0,esm_extends.A)({},imgProps,slotProps.img)\n}\n},\n additionalProps:{\n alt,\n src,\n srcSet,\n sizes\n},\n ownerState\n});\n if (hasImgNotFailing){\n children=(0,jsx_runtime.jsx)(ImgSlot,(0,esm_extends.A)({},imgSlotProps));\n // We only render valid children,non valid children are rendered with a fallback\n // We consider that invalid children are all falsy values,except 0,which is valid.\n}else if (!!childrenProp || childrenProp===0){\n children=childrenProp;\n}else if (hasImg && alt){\n children=alt[0];\n}else{\n children=(0,jsx_runtime.jsx)(AvatarFallback,{\n ownerState:ownerState,\n className:classes.fallback\n});\n}\n return (0,jsx_runtime.jsx)(AvatarRoot,(0,esm_extends.A)({\n as:component,\n ownerState:ownerState,\n className:(0,clsx.A)(classes.root,className),\n ref:ref\n},other,{\n children:children\n}));\n});\n false ? 0 :void 0;\n const Avatar_Avatar=(Avatar);\n;// ./node_modules/@mui/material/Typography/typographyClasses.js\n\n\nfunction getTypographyUtilityClass(slot){\n return (0,generateUtilityClass_generateUtilityClass.Ay)('MuiTypography',slot);\n}\nconst typographyClasses=(0,generateUtilityClasses.A)('MuiTypography',['root','h1','h2','h3','h4','h5','h6','subtitle1','subtitle2','body1','body2','inherit','button','caption','overline','alignLeft','alignRight','alignCenter','alignJustify','noWrap','gutterBottom','paragraph']);\n const Typography_typographyClasses=((null && (typographyClasses)));\n;// ./node_modules/@mui/material/Typography/Typography.js\n'use client';\n\n\n\nconst Typography_excluded=[\"align\",\"className\",\"component\",\"gutterBottom\",\"noWrap\",\"paragraph\",\"variant\",\"variantMapping\"];\n\n\n\n\n\n\n\n\n\n\nconst Typography_useUtilityClasses=ownerState=>{\n const{\n align,\n gutterBottom,\n noWrap,\n paragraph,\n variant,\n classes\n}=ownerState;\n const slots={\n root:['root',variant,ownerState.align !=='inherit' && `align${(0,capitalize.A)(align)}`,gutterBottom && 'gutterBottom',noWrap && 'noWrap',paragraph && 'paragraph']\n};\n return (0,composeClasses.A)(slots,getTypographyUtilityClass,classes);\n};\nconst TypographyRoot=(0,styled.Ay)('span',{\n name:'MuiTypography',\n slot:'Root',\n overridesResolver:(props,styles)=>{\n const{\n ownerState\n}=props;\n return [styles.root,ownerState.variant && styles[ownerState.variant],ownerState.align !=='inherit' && styles[`align${(0,capitalize.A)(ownerState.align)}`],ownerState.noWrap && styles.noWrap,ownerState.gutterBottom && styles.gutterBottom,ownerState.paragraph && styles.paragraph];\n}\n})(({\n theme,\n ownerState\n})=>(0,esm_extends.A)({\n margin:0\n},ownerState.variant==='inherit' &&{\n // Some elements,like <button>on Chrome have default font that doesn't inherit,reset this.\n font:'inherit'\n},ownerState.variant !=='inherit' && theme.typography[ownerState.variant],ownerState.align !=='inherit' &&{\n textAlign:ownerState.align\n},ownerState.noWrap &&{\n overflow:'hidden',\n textOverflow:'ellipsis',\n whiteSpace:'nowrap'\n},ownerState.gutterBottom &&{\n marginBottom:'0.35em'\n},ownerState.paragraph &&{\n marginBottom:16\n}));\nconst defaultVariantMapping={\n h1:'h1',\n h2:'h2',\n h3:'h3',\n h4:'h4',\n h5:'h5',\n h6:'h6',\n subtitle1:'h6',\n subtitle2:'h6',\n body1:'p',\n body2:'p',\n inherit:'p'\n};\n\n// TODO v6:deprecate these color values in v5.x and remove the transformation in v6\nconst colorTransformations={\n primary:'primary.main',\n textPrimary:'text.primary',\n secondary:'secondary.main',\n textSecondary:'text.secondary',\n error:'error.main'\n};\nconst transformDeprecatedColors=color=>{\n return colorTransformations[color] || color;\n};\nconst Typography=external_React_.forwardRef(function Typography(inProps,ref){\n const themeProps=(0,DefaultPropsProvider.b)({\n props:inProps,\n name:'MuiTypography'\n});\n const color=transformDeprecatedColors(themeProps.color);,themeProps,{\n color\n}));\n const{\n align='inherit',\n className,\n component,\n gutterBottom=false,\n noWrap=false,\n paragraph=false,\n variant='body1',\n variantMapping=defaultVariantMapping\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,Typography_excluded);,props,{\n align,\n color,\n className,\n component,\n gutterBottom,\n noWrap,\n paragraph,\n variant,\n variantMapping\n});\n const Component=component || (paragraph ? 'p' :variantMapping[variant] || defaultVariantMapping[variant]) || 'span';\n const classes=Typography_useUtilityClasses(ownerState);\n return (0,jsx_runtime.jsx)(TypographyRoot,(0,esm_extends.A)({\n as:Component,\n ref:ref,\n ownerState:ownerState,\n className:(0,clsx.A)(classes.root,className)\n},other));\n});\n false ? 0 :void 0;\n const Typography_Typography=(Typography);\n;// ./node_modules/@mui/material/InputAdornment/inputAdornmentClasses.js\n\n\nfunction getInputAdornmentUtilityClass(slot){\n return (0,generateUtilityClass_generateUtilityClass.Ay)('MuiInputAdornment',slot);\n}\nconst inputAdornmentClasses=(0,generateUtilityClasses.A)('MuiInputAdornment',['root','filled','standard','outlined','positionStart','positionEnd','disablePointerEvents','hiddenLabel','sizeSmall']);\n const InputAdornment_inputAdornmentClasses=(inputAdornmentClasses);\n;// ./node_modules/@mui/material/InputAdornment/InputAdornment.js\n'use client';\n\n\n\nvar InputAdornment_span;\nconst InputAdornment_excluded=[\"children\",\"className\",\"component\",\"disablePointerEvents\",\"disableTypography\",\"position\",\"variant\"];\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst overridesResolver=(props,styles)=>{\n const{\n ownerState\n}=props;\n return [styles.root,styles[`position${(0,capitalize.A)(ownerState.position)}`],ownerState.disablePointerEvents===true && styles.disablePointerEvents,styles[ownerState.variant]];\n};\nconst InputAdornment_useUtilityClasses=ownerState=>{\n const{\n classes,\n disablePointerEvents,\n hiddenLabel,\n position,\n size,\n variant\n}=ownerState;\n const slots={\n root:['root',disablePointerEvents && 'disablePointerEvents',position && `position${(0,capitalize.A)(position)}`,variant,hiddenLabel && 'hiddenLabel',size && `size${(0,capitalize.A)(size)}`]\n};\n return (0,composeClasses.A)(slots,getInputAdornmentUtilityClass,classes);\n};\nconst InputAdornmentRoot=(0,styled.Ay)('div',{\n name:'MuiInputAdornment',\n slot:'Root',\n overridesResolver\n})(({\n theme,\n ownerState\n})=>(0,esm_extends.A)({\n display:'flex',\n height:'0.01em',\n // Fix IE11 flexbox alignment. To remove at some point.\n maxHeight:'2em',\n alignItems:'center',\n whiteSpace:'nowrap',\n color:(theme.vars || theme).palette.action.active\n},ownerState.variant==='filled' &&{\n // Styles applied to the root element if `variant=\"filled\"`.\n [`&.${InputAdornment_inputAdornmentClasses.positionStart}&:not(.${InputAdornment_inputAdornmentClasses.hiddenLabel})`]:{\n marginTop:16\n}\n},ownerState.position==='start' &&{\n // Styles applied to the root element if `position=\"start\"`.\n marginRight:8\n},ownerState.position==='end' &&{\n // Styles applied to the root element if `position=\"end\"`.\n marginLeft:8\n},ownerState.disablePointerEvents===true &&{\n // Styles applied to the root element if `disablePointerEvents={true}`.\n pointerEvents:'none'\n}));\nconst InputAdornment=external_React_.forwardRef(function InputAdornment(inProps,ref){\n const props=(0,DefaultPropsProvider.b)({\n props:inProps,\n name:'MuiInputAdornment'\n});\n const{\n children,\n className,\n component='div',\n disablePointerEvents=false,\n disableTypography=false,\n position,\n variant:variantProp\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,InputAdornment_excluded);;\n let variant=variantProp;\n if (variantProp && muiFormControl.variant){\n if (false) // removed by dead control flow\n{}\n}\n if (muiFormControl && !variant){\n variant=muiFormControl.variant;\n},props,{\n hiddenLabel:muiFormControl.hiddenLabel,\n size:muiFormControl.size,\n disablePointerEvents,\n position,\n variant\n});\n const classes=InputAdornment_useUtilityClasses(ownerState);\n return (0,jsx_runtime.jsx)(FormControl_FormControlContext.Provider,{\n value:null,\n children:(0,jsx_runtime.jsx)(InputAdornmentRoot,(0,esm_extends.A)({\n as:component,\n ownerState:ownerState,\n className:(0,clsx.A)(classes.root,className),\n ref:ref\n},other,{\n children:typeof children==='string' && !disableTypography ? (0,jsx_runtime.jsx)(Typography_Typography,{\n color:\"text.secondary\",\n children:children\n}) :(0,jsx_runtime.jsxs)(external_React_.Fragment,{\n children:[position==='start' ? (InputAdornment_span || (InputAdornment_span=(0,jsx_runtime.jsx)(\"span\",{\n className:\"notranslate\",\n children:\"\\u200B\"\n}))):null,children]\n})\n}))\n});\n});\n false ? 0 :void 0;\n const InputAdornment_InputAdornment=(InputAdornment);\n// EXTERNAL MODULE:./node_modules/@mui/utils/esm/resolveProps/resolveProps.js\nvar resolveProps=__webpack_require__(7379);\n;// ./node_modules/@mui/material/Button/buttonClasses.js\n\n\nfunction getButtonUtilityClass(slot){\n return (0,generateUtilityClass_generateUtilityClass.Ay)('MuiButton',slot);\n}\nconst buttonClasses=(0,generateUtilityClasses.A)('MuiButton',['root','text','textInherit','textPrimary','textSecondary','textSuccess','textError','textInfo','textWarning','outlined','outlinedInherit','outlinedPrimary','outlinedSecondary','outlinedSuccess','outlinedError','outlinedInfo','outlinedWarning','contained','containedInherit','containedPrimary','containedSecondary','containedSuccess','containedError','containedInfo','containedWarning','disableElevation','focusVisible','disabled','colorInherit','colorPrimary','colorSecondary','colorSuccess','colorError','colorInfo','colorWarning','textSizeSmall','textSizeMedium','textSizeLarge','outlinedSizeSmall','outlinedSizeMedium','outlinedSizeLarge','containedSizeSmall','containedSizeMedium','containedSizeLarge','sizeMedium','sizeSmall','sizeLarge','fullWidth','startIcon','endIcon','icon','iconSizeSmall','iconSizeMedium','iconSizeLarge']);\n const Button_buttonClasses=(buttonClasses);\n;);\n const ButtonGroup_ButtonGroupContext=(ButtonGroupContext);\n;// ./node_modules/@mui/material/ButtonGroup/ButtonGroupButtonContext.js\n\n\nconst ButtonGroupButtonContext=external_React_.createContext(undefined);\n const ButtonGroup_ButtonGroupButtonContext=(ButtonGroupButtonContext);\n;// ./node_modules/@mui/material/Button/Button.js\n'use client';\n\n\n\nconst Button_excluded=[\"children\",\"color\",\"component\",\"className\",\"disabled\",\"disableElevation\",\"disableFocusRipple\",\"endIcon\",\"focusVisibleClassName\",\"fullWidth\",\"size\",\"startIcon\",\"type\",\"variant\"];\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst Button_useUtilityClasses=ownerState=>{\n const{\n color,\n disableElevation,\n fullWidth,\n size,\n variant,\n classes\n}=ownerState;\n const slots={\n root:['root',variant,`${variant}${(0,capitalize.A)(color)}`,`size${(0,capitalize.A)(size)}`,`${variant}Size${(0,capitalize.A)(size)}`,`color${(0,capitalize.A)(color)}`,disableElevation && 'disableElevation',fullWidth && 'fullWidth'],\n label:['label'],\n startIcon:['icon','startIcon',`iconSize${(0,capitalize.A)(size)}`],\n endIcon:['icon','endIcon',`iconSize${(0,capitalize.A)(size)}`]\n};\n const composedClasses=(0,composeClasses.A)(slots,getButtonUtilityClass,classes);,classes,composedClasses);\n};,ownerState.size==='small' &&{\n '&>*:nth-of-type(1)':{\n fontSize:18\n}\n},ownerState.size==='medium' &&{\n '&>*:nth-of-type(1)':{\n fontSize:20\n}\n},ownerState.size==='large' &&{\n '&>*:nth-of-type(1)':{\n fontSize:22\n}\n});\nconst ButtonRoot=(0,styled.Ay)(ButtonBase_ButtonBase,{\n shouldForwardProp:prop=>(0,rootShouldForwardProp.A)(prop) || prop==='classes',\n name:'MuiButton',\n slot:'Root',\n overridesResolver:(props,styles)=>{\n const{\n ownerState\n}=props;\n return [styles.root,styles[ownerState.variant],styles[`${ownerState.variant}${(0,capitalize.A)(ownerState.color)}`],styles[`size${(0,capitalize.A)(ownerState.size)}`],styles[`${ownerState.variant}Size${(0,capitalize.A)(ownerState.size)}`],ownerState.color==='inherit' && styles.colorInherit,ownerState.disableElevation && styles.disableElevation,ownerState.fullWidth && styles.fullWidth];\n}\n})(({\n theme,\n ownerState\n})=>{\n var _theme$palette$getCon,_theme$palette;\n const inheritContainedBackgroundColor=theme.palette.mode==='light' ? theme.palette.grey[300] :theme.palette.grey[800];\n const inheritContainedHoverBackgroundColor=theme.palette.mode==='light' ? theme.palette.grey.A100 :theme.palette.grey[700];,theme.typography.button,{\n minWidth:64,\n padding:'6px 16px',\n borderRadius:(theme.vars || theme).shape.borderRadius,\n transition:theme.transitions.create(['background-color','box-shadow','border-color','color'],{\n duration:theme.transitions.duration.short\n}),\n '&:hover':(0,esm_extends.A)({\n textDecoration:'none',\n backgroundColor:theme.vars ? `rgba(${theme.vars.palette.text.primaryChannel}/ ${theme.vars.palette.action.hoverOpacity})` :(0,colorManipulator.X4)(theme.palette.text.primary,theme.palette.action.hoverOpacity),\n // Reset on touch devices,it doesn't add specificity\n '@media (hover:none)':{\n backgroundColor:'transparent'\n}\n},ownerState.variant==='text' && ownerState.color !=='inherit' &&{\n backgroundColor:theme.vars ? `rgba(${theme.vars.palette[ownerState.color].mainChannel}/ ${theme.vars.palette.action.hoverOpacity})` :(0,colorManipulator.X4)(theme.palette[ownerState.color].main,theme.palette.action.hoverOpacity),\n // Reset on touch devices,it doesn't add specificity\n '@media (hover:none)':{\n backgroundColor:'transparent'\n}\n},ownerState.variant==='outlined' && ownerState.color !=='inherit' &&{\n border:`1px solid ${(theme.vars || theme).palette[ownerState.color].main}`,\n backgroundColor:theme.vars ? `rgba(${theme.vars.palette[ownerState.color].mainChannel}/ ${theme.vars.palette.action.hoverOpacity})` :(0,colorManipulator.X4)(theme.palette[ownerState.color].main,theme.palette.action.hoverOpacity),\n // Reset on touch devices,it doesn't add specificity\n '@media (hover:none)':{\n backgroundColor:'transparent'\n}\n},ownerState.variant==='contained' &&{\n backgroundColor:theme.vars ? theme.vars.palette.Button.inheritContainedHoverBg :inheritContainedHoverBackgroundColor,\n boxShadow:(theme.vars || theme).shadows[4],\n // Reset on touch devices,it doesn't add specificity\n '@media (hover:none)':{\n boxShadow:(theme.vars || theme).shadows[2],\n backgroundColor:(theme.vars || theme).palette.grey[300]\n}\n},ownerState.variant==='contained' && ownerState.color !=='inherit' &&{\n backgroundColor:(theme.vars || theme).palette[ownerState.color].dark,\n // Reset on touch devices,it doesn't add specificity\n '@media (hover:none)':{\n backgroundColor:(theme.vars || theme).palette[ownerState.color].main\n}\n},ownerState.variant==='contained' &&{\n boxShadow:(theme.vars || theme).shadows[8]\n}),\n [`&.${Button_buttonClasses.focusVisible},ownerState.variant==='contained' &&{\n boxShadow:(theme.vars || theme).shadows[6]\n}),\n [`&.${Button_buttonClasses.disabled}`]:(0,esm_extends.A)({\n color:(theme.vars || theme).palette.action.disabled\n},ownerState.variant==='outlined' &&{\n border:`1px solid ${(theme.vars || theme).palette.action.disabledBackground}`\n},ownerState.variant==='contained' &&{\n color:(theme.vars || theme).palette.action.disabled,\n boxShadow:(theme.vars || theme).shadows[0],\n backgroundColor:(theme.vars || theme).palette.action.disabledBackground\n})\n},ownerState.variant==='text' &&{\n padding:'6px 8px'\n},ownerState.variant==='text' && ownerState.color !=='inherit' &&{\n color:(theme.vars || theme).palette[ownerState.color].main\n},ownerState.variant==='outlined' &&{\n padding:'5px 15px',\n border:'1px solid currentColor'\n},ownerState.variant==='outlined' && ownerState.color !=='inherit' &&{\n color:(theme.vars || theme).palette[ownerState.color].main,\n border:theme.vars ? `1px solid rgba(${theme.vars.palette[ownerState.color].mainChannel}/ .5)` :`1px solid ${(0,colorManipulator.X4)(theme.palette[ownerState.color].main,.5)}`\n},ownerState.variant==='contained' &&{\n color:theme.vars ?\n // this is safe because grey does not change between default light/dark mode\n theme.vars.palette.text.primary:(_theme$palette$getCon=(_theme$palette=theme.palette).getContrastText)==null ? void 0:_theme$palette$getCon.call(_theme$palette,theme.palette.grey[300]),\n backgroundColor:theme.vars ? theme.vars.palette.Button.inheritContainedBg:inheritContainedBackgroundColor,\n boxShadow:(theme.vars || theme).shadows[2]\n},ownerState.variant==='contained' && ownerState.color !=='inherit' &&{\n color:(theme.vars || theme).palette[ownerState.color].contrastText,\n backgroundColor:(theme.vars || theme).palette[ownerState.color].main\n},ownerState.color==='inherit' &&{\n color:'inherit',\n borderColor:'currentColor'\n},ownerState.size==='small' && ownerState.variant==='text' &&{\n padding:'4px 5px',\n fontSize:theme.typography.pxToRem(13)\n},ownerState.size==='large' && ownerState.variant==='text' &&{\n padding:'8px 11px',\n fontSize:theme.typography.pxToRem(15)\n},ownerState.size==='small' && ownerState.variant==='outlined' &&{\n padding:'3px 9px',\n fontSize:theme.typography.pxToRem(13)\n},ownerState.size==='large' && ownerState.variant==='outlined' &&{\n padding:'7px 21px',\n fontSize:theme.typography.pxToRem(15)\n},ownerState.size==='small' && ownerState.variant==='contained' &&{\n padding:'4px 10px',\n fontSize:theme.typography.pxToRem(13)\n},ownerState.size==='large' && ownerState.variant==='contained' &&{\n padding:'8px 22px',\n fontSize:theme.typography.pxToRem(15)\n},ownerState.fullWidth &&{\n width:'100%'\n});\n},({\n ownerState\n})=>ownerState.disableElevation &&{\n boxShadow:'none',\n '&:hover':{\n boxShadow:'none'\n},\n [`&.${Button_buttonClasses.focusVisible}`]:{\n boxShadow:'none'\n},\n '&:active':{\n boxShadow:'none'\n},\n [`&.${Button_buttonClasses.disabled}`]:{\n boxShadow:'none'\n}\n});\nconst ButtonStartIcon=(0,styled.Ay)('span',{\n name:'MuiButton',\n slot:'StartIcon',\n overridesResolver:(props,styles)=>{\n const{\n ownerState\n}=props;\n return [styles.startIcon,styles[`iconSize${(0,capitalize.A)(ownerState.size)}`]];\n}\n})(({\n ownerState\n})=>(0,esm_extends.A)({\n display:'inherit',\n marginRight:8,\n marginLeft:-4\n},ownerState.size==='small' &&{\n marginLeft:-2\n},commonIconStyles(ownerState)));\nconst ButtonEndIcon=(0,styled.Ay)('span',{\n name:'MuiButton',\n slot:'EndIcon',\n overridesResolver:(props,styles)=>{\n const{\n ownerState\n}=props;\n return [styles.endIcon,styles[`iconSize${(0,capitalize.A)(ownerState.size)}`]];\n}\n})(({\n ownerState\n})=>(0,esm_extends.A)({\n display:'inherit',\n marginRight:-4,\n marginLeft:8\n},ownerState.size==='small' &&{\n marginRight:-2\n},commonIconStyles(ownerState)));\nconst Button=external_React_.forwardRef(function Button(inProps,ref){\n // props priority:`inProps`>`contextProps`>`themeDefaultProps`\n const contextProps=external_React_.useContext(ButtonGroup_ButtonGroupContext);\n const buttonGroupButtonContextPositionClassName=external_React_.useContext(ButtonGroup_ButtonGroupButtonContext);\n const resolvedProps=(0,resolveProps.A)(contextProps,inProps);\n const props=(0,DefaultPropsProvider.b)({\n props:resolvedProps,\n name:'MuiButton'\n});\n const{\n children,\n color='primary',\n component='button',\n className,\n disabled=false,\n disableElevation=false,\n disableFocusRipple=false,\n endIcon:endIconProp,\n focusVisibleClassName,\n fullWidth=false,\n size='medium',\n startIcon:startIconProp,\n type,\n variant='text'\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,Button_excluded);,props,{\n color,\n component,\n disabled,\n disableElevation,\n disableFocusRipple,\n fullWidth,\n size,\n type,\n variant\n});\n const classes=Button_useUtilityClasses(ownerState);\n const startIcon=startIconProp && (0,jsx_runtime.jsx)(ButtonStartIcon,{\n className:classes.startIcon,\n ownerState:ownerState,\n children:startIconProp\n});\n const endIcon=endIconProp && (0,jsx_runtime.jsx)(ButtonEndIcon,{\n className:classes.endIcon,\n ownerState:ownerState,\n children:endIconProp\n});\n const positionClassName=buttonGroupButtonContextPositionClassName || '';\n return (0,jsx_runtime.jsxs)(ButtonRoot,(0,esm_extends.A)({\n ownerState:ownerState,\n className:(0,clsx.A)(contextProps.className,classes.root,className,positionClassName),\n component:component,\n disabled:disabled,\n focusRipple:!disableFocusRipple,\n focusVisibleClassName:(0,clsx.A)(classes.focusVisible,focusVisibleClassName),\n ref:ref,\n type:type\n},other,{\n classes:classes,\n children:[startIcon,children,endIcon]\n}));\n});\n false ? 0 :void 0;\n const Button_Button=(Button);\n// EXTERNAL MODULE:./node_modules/@mui/system/useThemeWithoutDefault.js\nvar system_useThemeWithoutDefault=__webpack_require__(2923);\n;// ./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\nfunction getWindow(node){\n if (node==null){\n return window;\n}\n\n if (node.toString() !=='[object Window]'){\n var ownerDocument=node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView || window:window;\n}\n\n return node;\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\n\n\nfunction isElement(node){\n var OwnElement=getWindow(node).Element;\n return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node){\n var OwnElement=getWindow(node).HTMLElement;\n return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node){\n // IE 11 has no ShadowRoot\n if (typeof ShadowRoot==='undefined'){\n return false;\n}\n\n var OwnElement=getWindow(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\n\n;// ./node_modules/@popperjs/core/lib/utils/math.js\nvar math_max=Math.max;\nvar math_min=Math.min;\nvar round=Math.round;\n;// ./node_modules/@popperjs/core/lib/utils/userAgent.js\nfunction getUAString(){\n var uaData=navigator.userAgentData;\n\n if (uaData !=null && uaData.brands && Array.isArray(uaData.brands)){\n return uaData.brands.map(function (item){\n return item.brand+\"/\"+item.version;\n}).join(' ');\n}\n\n return navigator.userAgent;\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js\n\nfunction isLayoutViewport(){\n return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js\n\n\n\n\nfunction getBoundingClientRect(element,includeScale,isFixedStrategy){\n if (includeScale===void 0){\n includeScale=false;\n}\n\n if (isFixedStrategy===void 0){\n isFixedStrategy=false;\n}\n\n var clientRect=element.getBoundingClientRect();\n var scaleX=1;\n var scaleY=1;\n\n if (includeScale && isHTMLElement(element)){\n scaleX=element.offsetWidth>0 ? round(clientRect.width) / element.offsetWidth || 1:1;\n scaleY=element.offsetHeight>0 ? round(clientRect.height) / element.offsetHeight || 1:1;\n}\n\n var _ref=isElement(element) ? getWindow(element) :window,\n visualViewport=_ref.visualViewport;\n\n var addVisualOffsets=!isLayoutViewport() && isFixedStrategy;\n var x=(clientRect.left+(addVisualOffsets && visualViewport ? visualViewport.offsetLeft :0)) / scaleX;\n var y=(clientRect.top+(addVisualOffsets && visualViewport ? visualViewport.offsetTop :0)) / scaleY;\n var width=clientRect.width / scaleX;\n var height=clientRect.height / scaleY;\n return{\n width:width,\n height:height,\n top:y,\n right:x+width,\n bottom:y+height,\n left:x,\n x:x,\n y:y\n};\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js\n\nfunction getWindowScroll(node){\n var win=getWindow(node);\n var scrollLeft=win.pageXOffset;\n var scrollTop=win.pageYOffset;\n return{\n scrollLeft:scrollLeft,\n scrollTop:scrollTop\n};\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js\nfunction getHTMLElementScroll(element){\n return{\n scrollLeft:element.scrollLeft,\n scrollTop:element.scrollTop\n};\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js\n\n\n\n\nfunction getNodeScroll(node){\n if (node===getWindow(node) || !isHTMLElement(node)){\n return getWindowScroll(node);\n}else{\n return getHTMLElementScroll(node);\n}\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js\nfunction getNodeName(element){\n return element ? (element.nodeName || '').toLowerCase():null;\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js\n\nfunction getDocumentElement(element){\n // $FlowFixMe[incompatible-return]:assume body is always available\n return ((isElement(element) ? element.ownerDocument:// $FlowFixMe[prop-missing]\n element.document) || window.document).documentElement;\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js\n\n\n\nfunction getWindowScrollBarX(element){\n // If <html>has a CSS width greater than the viewport,then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on <html>\n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019,IE11,Safari)\n return getBoundingClientRect(getDocumentElement(element)).left+getWindowScroll(element).scrollLeft;\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js\n\nfunction getComputedStyle(element){\n return getWindow(element).getComputedStyle(element);\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js\n\nfunction isScrollParent(element){\n // Firefox wants us to check `-x` and `-y` variations as well\n var _getComputedStyle=getComputedStyle(element),\n overflow=_getComputedStyle.overflow,\n overflowX=_getComputedStyle.overflowX,\n overflowY=_getComputedStyle.overflowY;\n\n return /auto|scroll|overlay|hidden/.test(overflow+overflowY+overflowX);\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js\n\n\n\n\n\n\n\n\n\nfunction isElementScaled(element){\n var rect=element.getBoundingClientRect();\n var scaleX=round(rect.width) / element.offsetWidth || 1;\n var scaleY=round(rect.height) / element.offsetHeight || 1;\n return scaleX !==1 || scaleY !==1;\n}// Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nfunction getCompositeRect(elementOrVirtualElement,offsetParent,isFixed){\n if (isFixed===void 0){\n isFixed=false;\n}\n\n var isOffsetParentAnElement=isHTMLElement(offsetParent);\n var offsetParentIsScaled=isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n var documentElement=getDocumentElement(offsetParent);\n var rect=getBoundingClientRect(elementOrVirtualElement,offsetParentIsScaled,isFixed);\n var scroll={\n scrollLeft:0,\n scrollTop:0\n};\n var offsets={\n x:0,\n y:0\n};\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed){\n if (getNodeName(offsetParent) !=='body' || // https://github.com/popperjs/popper-core/issues/1078\n isScrollParent(documentElement)){\n scroll=getNodeScroll(offsetParent);\n}\n\n if (isHTMLElement(offsetParent)){\n offsets=getBoundingClientRect(offsetParent,true);\n offsets.x+=offsetParent.clientLeft;\n offsets.y+=offsetParent.clientTop;\n}else if (documentElement){\n offsets.x=getWindowScrollBarX(documentElement);\n}\n}\n\n return{\n x:rect.left+scroll.scrollLeft - offsets.x,\n y:rect.top+scroll.scrollTop - offsets.y,\n width:rect.width,\n height:rect.height\n};\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js\n // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nfunction getLayoutRect(element){\n var clientRect=getBoundingClientRect(element);// Use the clientRect sizes if it's not been transformed.\n // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n var width=element.offsetWidth;\n var height=element.offsetHeight;\n\n if (Math.abs(clientRect.width - width) <=1){\n width=clientRect.width;\n}\n\n if (Math.abs(clientRect.height - height) <=1){\n height=clientRect.height;\n}\n\n return{\n x:element.offsetLeft,\n y:element.offsetTop,\n width:width,\n height:height\n};\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js\n\n\n\nfunction getParentNode(element){\n if (getNodeName(element)==='html'){\n return element;\n}\n\n return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // $FlowFixMe[incompatible-return]\n // $FlowFixMe[prop-missing]\n element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n element.parentNode || (// DOM Element detected\n isShadowRoot(element) ? element.host:null) || // ShadowRoot detected\n // $FlowFixMe[incompatible-call]:HTMLElement is a Node\n getDocumentElement(element) // fallback\n\n);\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js\n\n\n\n\nfunction getScrollParent(node){\n if (['html','body','#document'].indexOf(getNodeName(node))>=0){\n // $FlowFixMe[incompatible-return]:assume body is always available\n return node.ownerDocument.body;\n}\n\n if (isHTMLElement(node) && isScrollParent(node)){\n return node;\n}\n\n return getScrollParent(getParentNode(node));\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js\n\n\n\n\n\n\nfunction listScrollParents(element,list){\n var _element$ownerDocumen;\n\n if (list===void 0){\n list=[];\n}\n\n var scrollParent=getScrollParent(element);\n var isBody=scrollParent===((_element$ownerDocumen=element.ownerDocument)==null ? void 0:_element$ownerDocumen.body);\n var win=getWindow(scrollParent);\n var target=isBody ? [win].concat(win.visualViewport || [],isScrollParent(scrollParent) ? scrollParent:[]):scrollParent;\n var updatedList=list.concat(target);\n return isBody ? updatedList:// $FlowFixMe[incompatible-call]:isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents(getParentNode(target)));\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js\n\nfunction isTableElement(element){\n return ['table','td','th'].indexOf(getNodeName(element))>=0;\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js\n\n\n\n\n\n\n\n\nfunction getTrueOffsetParent(element){\n if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n getComputedStyle(element).position==='fixed'){\n return null;\n}\n\n return element.offsetParent;\n}// `.offsetParent` reports `null` for fixed elements,while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element){\n var isFirefox=/firefox/i.test(getUAString());\n var isIE=/Trident/i.test(getUAString());\n\n if (isIE && isHTMLElement(element)){\n // In IE 9,10 and 11 fixed elements containing block is always established by the viewport\n var elementCss=getComputedStyle(element);\n\n if (elementCss.position==='fixed'){\n return null;\n}\n}\n\n var currentNode=getParentNode(element);\n\n if (isShadowRoot(currentNode)){\n currentNode=currentNode.host;\n}\n\n while (isHTMLElement(currentNode) && ['html','body'].indexOf(getNodeName(currentNode)) < 0){\n var css=getComputedStyle(currentNode);// This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n if (css.transform !=='none' || css.perspective !=='none' || css.contain==='paint' || ['transform','perspective'].indexOf(css.willChange) !==-1 || isFirefox && css.willChange==='filter' || isFirefox && css.filter && css.filter !=='none'){\n return currentNode;\n}else{\n currentNode=currentNode.parentNode;\n}\n}\n\n return null;\n}// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nfunction getOffsetParent(element){\n var window=getWindow(element);\n var offsetParent=getTrueOffsetParent(element);\n\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position==='static'){\n offsetParent=getTrueOffsetParent(offsetParent);\n}\n\n if (offsetParent && (getNodeName(offsetParent)==='html' || getNodeName(offsetParent)==='body' && getComputedStyle(offsetParent).position==='static')){\n return window;\n}\n\n return offsetParent || getContainingBlock(element) || window;\n}\n;// ./node_modules/@popperjs/core/lib/enums.js\nvar enums_top='top';\nvar bottom='bottom';\nvar right='right';\nvar left='left';\nvar auto='auto';\nvar basePlacements=[enums_top,bottom,right,left];\nvar start='start';\nvar end='end';\nvar clippingParents='clippingParents';\nvar viewport='viewport';\nvar popper='popper';\nvar reference='reference';\nvar variationPlacements=basePlacements.reduce(function (acc,placement){\n return acc.concat([placement+\"-\"+start,placement+\"-\"+end]);\n},[]);\nvar enums_placements=[].concat(basePlacements,[auto]).reduce(function (acc,placement){\n return acc.concat([placement,placement+\"-\"+start,placement+\"-\"+end]);\n},[]);// modifiers that need to read the DOM\n\nvar beforeRead='beforeRead';\nvar read='read';\nvar afterRead='afterRead';// pure-logic modifiers\n\nvar beforeMain='beforeMain';\nvar main='main';\nvar afterMain='afterMain';// modifier with the purpose to write to the DOM (or write into a framework state)\n\nvar beforeWrite='beforeWrite';\nvar write='write';\nvar afterWrite='afterWrite';\nvar modifierPhases=[beforeRead,read,afterRead,beforeMain,main,afterMain,beforeWrite,write,afterWrite];\n;// ./node_modules/@popperjs/core/lib/utils/orderModifiers.js\n // source:https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers){\n var map=new Map();\n var visited=new Set();\n var result=[];\n modifiers.forEach(function (modifier){\n map.set(modifier.name,modifier);\n});// On visiting object,check for its dependencies and visit them recursively\n\n function sort(modifier){\n visited.add(modifier.name);\n var requires=[].concat(modifier.requires || [],modifier.requiresIfExists || []);\n requires.forEach(function (dep){\n if (!visited.has(dep)){\n var depModifier=map.get(dep);\n\n if (depModifier){\n sort(depModifier);\n}\n}\n});\n result.push(modifier);\n}\n\n modifiers.forEach(function (modifier){\n if (!visited.has(modifier.name)){\n // check for visited object\n sort(modifier);\n}\n});\n return result;\n}\n\nfunction orderModifiers(modifiers){\n // order based on dependencies\n var orderedModifiers=order(modifiers);// order based on phase\n\n return modifierPhases.reduce(function (acc,phase){\n return acc.concat(orderedModifiers.filter(function (modifier){\n return modifier.phase===phase;\n}));\n},[]);\n}\n;// ./node_modules/@popperjs/core/lib/utils/debounce.js\nfunction debounce_debounce(fn){\n var pending;\n return function (){\n if (!pending){\n pending=new Promise(function (resolve){\n Promise.resolve().then(function (){\n pending=undefined;\n resolve(fn());\n});\n});\n}\n\n return pending;\n};\n}\n;// ./node_modules/@popperjs/core/lib/utils/mergeByName.js\nfunction mergeByName(modifiers){\n var merged=modifiers.reduce(function (merged,current){\n var existing=merged[current.name];,existing,current,{\n options:Object.assign({},existing.data,current.data)\n}):current;\n return merged;\n});// IE11 does not support Object.values\n\n return Object.keys(merged).map(function (key){\n return merged[key];\n});\n}\n;// ./node_modules/@popperjs/core/lib/createPopper.js\n\n\n\n\n\n\n\n\n\nvar DEFAULT_OPTIONS={\n placement:'bottom',\n modifiers:[],\n strategy:'absolute'\n};\n\nfunction areValidElements(){\n for (var _len=arguments.length,args=new Array(_len),_key=0;_key < _len;_key++){\n args[_key]=arguments[_key];\n}\n\n return !args.some(function (element){\n return !(element && typeof element.getBoundingClientRect==='function');\n});\n}\n\nfunction popperGenerator(generatorOptions){\n if (generatorOptions===void 0){\n generatorOptions={};\n}\n\n var _generatorOptions=generatorOptions,\n _generatorOptions$def=_generatorOptions.defaultModifiers,\n defaultModifiers=_generatorOptions$def===void 0 ? [] :_generatorOptions$def,\n _generatorOptions$def2=_generatorOptions.defaultOptions,\n defaultOptions=_generatorOptions$def2===void 0 ? DEFAULT_OPTIONS :_generatorOptions$def2;\n return function createPopper(reference,popper,options){\n if (options===void 0){\n options=defaultOptions;\n}\n\n var state={\n placement:'bottom',\n orderedModifiers:[],\n options:Object.assign({},\n elements:{\n reference:reference,\n popper:popper\n}\n};\n var effectCleanupFns=[];\n var isDestroyed=false;\n var instance={\n state:state,\n setOptions:function setOptions(setOptionsAction){\n var options=typeof setOptionsAction==='function' ? setOptionsAction(state.options) :setOptionsAction;\n cleanupModifierEffects();,defaultOptions,state.options,options);\n state.scrollParents={\n reference:isElement(reference) ? listScrollParents(reference):reference.contextElement ? listScrollParents(reference.contextElement):[],\n popper:listScrollParents(popper)\n};// Orders the modifiers based on their dependencies and `phase`\n // properties\n\n var orderedModifiers=orderModifiers(mergeByName([].concat(defaultModifiers,state.options.modifiers)));// Strip out disabled modifiers\n\n state.orderedModifiers=orderedModifiers.filter(function (m){\n return m.enabled;\n});\n runModifierEffects();\n return instance.update();\n},\n // Sync update – it will always be executed,even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events),always\n // prefer the async Popper#update method\n forceUpdate:function forceUpdate(){\n if (isDestroyed){\n return;\n}\n\n var _state$elements=state.elements,\n reference=_state$elements.reference,\n popper=_state$elements.popper;// Don't proceed if `reference` or `popper` are not valid elements\n // anymore\n\n if (!areValidElements(reference,popper)){\n return;\n}// Store the reference and popper rects to be read by modifiers\n\n\n state.rects={\n reference:getCompositeRect(reference,getOffsetParent(popper),state.options.strategy==='fixed'),\n popper:getLayoutRect(popper)\n};// Modifiers have the ability to reset the current update cycle. The\n // most common use case for this is the `flip` modifier changing the\n // placement,which then needs to re-run all the modifiers,because the\n // logic was previously ran for the previous placement and is therefore\n // stale/incorrect\n\n state.reset=false;\n state.placement=state.options.placement;// On each update cycle,the `modifiersData` property for each modifier\n // is filled with the initial data specified by the modifier. This means\n // it doesn't persist and is fresh on each update.\n // To ensure persistent data,use `${name}#persistent`\n\n state.orderedModifiers.forEach(function (modifier){\n return state.modifiersData[modifier.name]=Object.assign({},modifier.data);\n});\n\n for (var index=0;index < state.orderedModifiers.length;index++){\n if (state.reset===true){\n state.reset=false;\n index=-1;\n continue;\n}:_state$orderedModifie2,\n name=_state$orderedModifie.name;\n\n if (typeof fn==='function'){\n state=fn({\n state:state,\n options:_options,\n name:name,\n instance:instance\n}) || state;\n}\n}\n},\n // Async and optimistically optimized update – it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update:debounce_debounce(function (){\n return new Promise(function (resolve){\n instance.forceUpdate();\n resolve(state);\n});\n}),\n destroy:function destroy(){\n cleanupModifierEffects();\n isDestroyed=true;\n}\n};\n\n if (!areValidElements(reference,popper)){\n return instance;\n}\n\n instance.setOptions(options).then(function (state){\n if (!isDestroyed && options.onFirstUpdate){\n options.onFirstUpdate(state);\n}\n});// Modifiers have the ability to execute arbitrary code before the first\n // update cycle runs. They will be executed in the same order as the update\n // cycle. This is useful when a modifier adds some persistent data that\n // other modifiers need to use,but the modifier is run after the dependent\n // one.\n\n function runModifierEffects(){\n state.orderedModifiers.forEach(function (_ref){\n var name=_ref.name,\n _ref$options=_ref.options,\n options=_ref$options===void 0 ?{}:_ref$options,\n effect=_ref.effect;\n\n if (typeof effect==='function'){\n var cleanupFn=effect({\n state:state,\n name:name,\n instance:instance,\n options:options\n});;\n\n effectCleanupFns.push(cleanupFn || noopFn);\n}\n});\n}\n\n function cleanupModifierEffects(){\n effectCleanupFns.forEach(function (fn){\n return fn();\n});\n effectCleanupFns=[];\n}\n\n return instance;\n};\n}\nvar createPopper=(null && (popperGenerator()));// eslint-disable-next-line import/no-unused-modules\n\n\n;// ./node_modules/@popperjs/core/lib/modifiers/eventListeners.js\n // eslint-disable-next-line import/no-unused-modules\n\nvar passive={\n passive:true\n};\n\nfunction effect(_ref){\n var state=_ref.state,\n instance=_ref.instance,\n options=_ref.options;\n var _options$scroll=options.scroll,\n scroll=_options$scroll===void 0 ? true :_options$scroll,\n _options$resize=options.resize,\n resize=_options$resize===void 0 ? true :_options$resize;\n var window=getWindow(state.elements.popper);\n var scrollParents=[].concat(state.scrollParents.reference,state.scrollParents.popper);\n\n if (scroll){\n scrollParents.forEach(function (scrollParent){\n scrollParent.addEventListener('scroll',instance.update,passive);\n});\n}\n\n if (resize){\n window.addEventListener('resize',instance.update,passive);\n}\n\n return function (){\n if (scroll){\n scrollParents.forEach(function (scrollParent){\n scrollParent.removeEventListener('scroll',instance.update,passive);\n});\n}\n\n if (resize){\n window.removeEventListener('resize',instance.update,passive);\n}\n};\n}// eslint-disable-next-line import/no-unused-modules\n\n\n const eventListeners=({\n name:'eventListeners',\n enabled:true,\n phase:'write',\n fn:function fn(){}\n});\n;// ./node_modules/@popperjs/core/lib/utils/getBasePlacement.js\n\nfunction getBasePlacement(placement){\n return placement.split('-')[0];\n}\n;// ./node_modules/@popperjs/core/lib/utils/getVariation.js\nfunction getVariation(placement){\n return placement.split('-')[1];\n}\n;// ./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js\nfunction getMainAxisFromPlacement(placement){\n return ['top','bottom'].indexOf(placement)>=0 ? 'x':'y';\n}\n;// ./node_modules/@popperjs/core/lib/utils/computeOffsets.js\n\n\n\n\nfunction computeOffsets(_ref){\n var reference=_ref.reference,\n element=_ref.element,\n placement=_ref.placement;\n var basePlacement=placement ? getBasePlacement(placement) :null;\n var variation=placement ? getVariation(placement) :null;\n var commonX=reference.x+reference.width / 2 - element.width / 2;\n var commonY=reference.y+reference.height / 2 - element.height / 2;\n var offsets;\n\n switch (basePlacement){\n case enums_top:\n offsets={\n x:commonX,\n y:reference.y - element.height\n};\n break;\n\n case bottom:\n offsets={\n x:commonX,\n y:reference.y+reference.height\n};\n break;\n\n case right:\n offsets={\n x:reference.x+reference.width,\n y:commonY\n};\n break;\n\n case left:\n offsets={\n x:reference.x - element.width,\n y:commonY\n};\n break;\n\n default:\n offsets={\n x:reference.x,\n y:reference.y\n};\n}\n\n var mainAxis=basePlacement ? getMainAxisFromPlacement(basePlacement) :null;\n\n if (mainAxis !=null){\n var len=mainAxis==='y' ? 'height' :'width';\n\n switch (variation){\n case start:\n offsets[mainAxis]=offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n break;\n\n case end:\n offsets[mainAxis]=offsets[mainAxis]+(reference[len] / 2 - element[len] / 2);\n break;\n\n default:\n}\n}\n\n return offsets;\n}\n;// ./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js\n\n\nfunction popperOffsets(_ref){\n var state=_ref.state,\n name=_ref.name;\n // Offsets are the actual position the popper needs to have to be\n // properly positioned near its reference element\n // This is the most basic placement,and will be adjusted by\n // the modifiers in the next step\n state.modifiersData[name]=computeOffsets({\n reference:state.rects.reference,\n element:state.rects.popper,\n strategy:'absolute',\n placement:state.placement\n});\n}// eslint-disable-next-line import/no-unused-modules\n\n\n const modifiers_popperOffsets=({\n name:'popperOffsets',\n enabled:true,\n phase:'read',\n fn:popperOffsets,\n data:{}\n});\n;// ./node_modules/@popperjs/core/lib/modifiers/computeStyles.js\n\n\n\n\n\n\n\n // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides={\n top:'auto',\n right:'auto',\n bottom:'auto',\n left:'auto'\n};// Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR,but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref,win){\n var x=_ref.x,\n y=_ref.y;\n var dpr=win.devicePixelRatio || 1;\n return{\n x:round(x * dpr) / dpr || 0,\n y:round(y * dpr) / dpr || 0\n};\n}\n\nfunction mapToStyles(_ref2){\n var _Object$assign2;\n\n var popper=_ref2.popper,\n popperRect=_ref2.popperRect,\n placement=_ref2.placement,\n variation=_ref2.variation,\n offsets=_ref2.offsets,\n position=_ref2.position,\n gpuAcceleration=_ref2.gpuAcceleration,\n adaptive=_ref2.adaptive,\n roundOffsets=_ref2.roundOffsets,\n isFixed=_ref2.isFixed;\n var _offsets$x=offsets.x,\n x=_offsets$x===void 0 ? 0 :_offsets$x,\n _offsets$y=offsets.y,\n y=_offsets$y===void 0 ? 0 :_offsets$y;\n\n var _ref3=typeof roundOffsets==='function' ? roundOffsets({\n x:x,\n y:y\n}) :{\n x:x,\n y:y\n};\n\n x=_ref3.x;\n y=_ref3.y;\n var hasX=offsets.hasOwnProperty('x');\n var hasY=offsets.hasOwnProperty('y');\n var sideX=left;\n var sideY=enums_top;\n var win=window;\n\n if (adaptive){\n var offsetParent=getOffsetParent(popper);\n var heightProp='clientHeight';\n var widthProp='clientWidth';\n\n if (offsetParent===getWindow(popper)){\n offsetParent=getDocumentElement(popper);\n\n if (getComputedStyle(offsetParent).position !=='static' && position==='absolute'){\n heightProp='scrollHeight';\n widthProp='scrollWidth';\n}\n}// $FlowFixMe[incompatible-cast]:force type refinement,we compare offsetParent with window above,but Flow doesn't detect it\n\n\n offsetParent=offsetParent;\n\n if (placement===enums_top || (placement===left || placement===right) && variation===end){\n sideY=bottom;\n var offsetY=isFixed && offsetParent===win && win.visualViewport ? win.visualViewport.height:// $FlowFixMe[prop-missing]\n offsetParent[heightProp];\n y -=offsetY - popperRect.height;\n y*=gpuAcceleration ? 1:-1;\n}\n\n if (placement===left || (placement===enums_top || placement===bottom) && variation===end){\n sideX=right;\n var offsetX=isFixed && offsetParent===win && win.visualViewport ? win.visualViewport.width:// $FlowFixMe[prop-missing]\n offsetParent[widthProp];\n x -=offsetX - popperRect.width;\n x*=gpuAcceleration ? 1:-1;\n}\n}\n\n var commonStyles=Object.assign({\n position:position\n},adaptive && unsetSides);\n\n var _ref4=roundOffsets===true ? roundOffsetsByDPR({\n x:x,\n y:y\n},getWindow(popper)) :{\n x:x,\n y:y\n};\n\n x=_ref4.x;\n y=_ref4.y;\n\n if (gpuAcceleration){\n var _Object$assign;,_Object$assign[sideY]=hasY ? '0':'',_Object$assign[sideX]=hasX ? '0':'',_Object$assign.transform=(win.devicePixelRatio || 1) <=1 ? \"translate(\"+x+\"px,\"+y+\"px)\":\"translate3d(\"+x+\"px,\"+y+\"px,0)\",_Object$assign));\n},_Object$assign2[sideY]=hasY ? y+\"px\":'',_Object$assign2[sideX]=hasX ? x+\"px\":'',_Object$assign2.transform='',_Object$assign2));\n}\n\nfunction computeStyles(_ref5){\n var state=_ref5.state,\n options=_ref5.options;\n var _options$gpuAccelerat=options.gpuAcceleration,\n gpuAcceleration=_options$gpuAccelerat===void 0 ? true :_options$gpuAccelerat,\n _options$adaptive=options.adaptive,\n adaptive=_options$adaptive===void 0 ? true :_options$adaptive,\n _options$roundOffsets=options.roundOffsets,\n roundOffsets=_options$roundOffsets===void 0 ? true :_options$roundOffsets;\n var commonStyles={\n placement:getBasePlacement(state.placement),\n variation:getVariation(state.placement),\n popper:state.elements.popper,\n popperRect:state.rects.popper,\n gpuAcceleration:gpuAcceleration,\n isFixed:state.options.strategy==='fixed'\n};\n\n if (state.modifiersData.popperOffsets !=null){\n state.styles.popper=Object.assign({},commonStyles,{\n offsets:state.modifiersData.popperOffsets,\n position:state.options.strategy,\n adaptive:adaptive,\n roundOffsets:roundOffsets\n})));\n}\n\n if (state.modifiersData.arrow !=null){\n state.styles.arrow=Object.assign({},commonStyles,{\n offsets:state.modifiersData.arrow,\n position:'absolute',\n adaptive:false,\n roundOffsets:roundOffsets\n})));\n},state.attributes.popper,{\n 'data-popper-placement':state.placement\n});\n}// eslint-disable-next-line import/no-unused-modules\n\n\n const modifiers_computeStyles=({\n name:'computeStyles',\n enabled:true,\n phase:'beforeWrite',\n fn:computeStyles,\n data:{}\n});\n;// ./node_modules/@popperjs/core/lib/modifiers/applyStyles.js\n\n // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref){\n var state=_ref.state;\n Object.keys(state.elements).forEach(function (name){\n var style=state.styles[name] ||{};;\n var element=state.elements[name];// arrow is optional+virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)){\n return;\n}// Flow doesn't support to extend this property,but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe[cannot-write]\n\n\n Object.assign(element.style,style);\n Object.keys(attributes).forEach(function (name){\n var value=attributes[name];\n\n if (value===false){\n element.removeAttribute(name);\n}else{\n element.setAttribute(name,value===true ? '':value);\n}\n});\n});\n}\n\nfunction applyStyles_effect(_ref2){\n var state=_ref2.state;\n var initialStyles={\n popper:{\n position:state.options.strategy,\n left:'0',\n top:'0',\n margin:'0'\n},\n arrow:{\n position:'absolute'\n}\n};\n Object.assign(state.elements.popper.style,initialStyles.popper);\n state.styles=initialStyles;\n\n if (state.elements.arrow){\n Object.assign(state.elements.arrow.style,initialStyles.arrow);\n}\n\n return function (){\n Object.keys(state.elements).forEach(function (name){\n var element=state.elements[name];;\n var styleProperties=Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] :initialStyles[name]);// Set all values to an empty string to unset them\n\n var style=styleProperties.reduce(function (style,property){\n style[property]='';\n return style;\n});// arrow is optional+virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)){\n return;\n}\n\n Object.assign(element.style,style);\n Object.keys(attributes).forEach(function (attribute){\n element.removeAttribute(attribute);\n});\n});\n};\n}// eslint-disable-next-line import/no-unused-modules\n\n\n const modifiers_applyStyles=({\n name:'applyStyles',\n enabled:true,\n phase:'write',\n fn:applyStyles,\n effect:applyStyles_effect,\n requires:['computeStyles']\n});\n;// ./node_modules/@popperjs/core/lib/modifiers/offset.js\n\n // eslint-disable-next-line import/no-unused-modules\n\nfunction distanceAndSkiddingToXY(placement,rects,offset){\n var basePlacement=getBasePlacement(placement);\n var invertDistance=[left,enums_top].indexOf(basePlacement)>=0 ? -1 :1;,rects,{\n placement:placement\n})) :offset,\n skidding=_ref[0],\n distance=_ref[1];\n\n skidding=skidding || 0;\n distance=(distance || 0) * invertDistance;\n return [left,right].indexOf(basePlacement)>=0 ?{\n x:distance,\n y:skidding\n}:{\n x:skidding,\n y:distance\n};\n}\n\nfunction offset(_ref2){\n var state=_ref2.state,\n options=_ref2.options,\n name=_ref2.name;\n var _options$offset=options.offset,\n offset=_options$offset===void 0 ? [0,0] :_options$offset;\n var data=enums_placements.reduce(function (acc,placement){\n acc[placement]=distanceAndSkiddingToXY(placement,state.rects,offset);\n return acc;\n});\n var _data$state$placement=data[state.placement],\n x=_data$state$placement.x,\n y=_data$state$placement.y;\n\n if (state.modifiersData.popperOffsets !=null){\n state.modifiersData.popperOffsets.x+=x;\n state.modifiersData.popperOffsets.y+=y;\n}\n\n state.modifiersData[name]=data;\n}// eslint-disable-next-line import/no-unused-modules\n\n\n const modifiers_offset=({\n name:'offset',\n enabled:true,\n phase:'main',\n requires:['popperOffsets'],\n fn:offset\n});\n;// ./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js\nvar hash={\n left:'right',\n right:'left',\n bottom:'top',\n top:'bottom'\n};\nfunction getOppositePlacement(placement){\n return placement.replace(/left|right|bottom|top/g,function (matched){\n return hash[matched];\n});\n}\n;// ./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js\nvar getOppositeVariationPlacement_hash={\n start:'end',\n end:'start'\n};\nfunction getOppositeVariationPlacement(placement){\n return placement.replace(/start|end/g,function (matched){\n return getOppositeVariationPlacement_hash[matched];\n});\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js\n\n\n\n\nfunction getViewportRect(element,strategy){\n var win=getWindow(element);\n var html=getDocumentElement(element);\n var visualViewport=win.visualViewport;\n var width=html.clientWidth;\n var height=html.clientHeight;\n var x=0;\n var y=0;\n\n if (visualViewport){\n width=visualViewport.width;\n height=visualViewport.height;\n var layoutViewport=isLayoutViewport();\n\n if (layoutViewport || !layoutViewport && strategy==='fixed'){\n x=visualViewport.offsetLeft;\n y=visualViewport.offsetTop;\n}\n}\n\n return{\n width:width,\n height:height,\n x:x+getWindowScrollBarX(element),\n y:y\n};\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js\n\n\n\n\n // Gets the entire size of the scrollable document area,even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\nfunction getDocumentRect(element){\n var _element$ownerDocumen;\n\n var html=getDocumentElement(element);\n var winScroll=getWindowScroll(element);\n var body=(_element$ownerDocumen=element.ownerDocument)==null ? void 0 :_element$ownerDocumen.body;\n var width=math_max(html.scrollWidth,html.clientWidth,body ? body.scrollWidth :0,body ? body.clientWidth :0);\n var height=math_max(html.scrollHeight,html.clientHeight,body ? body.scrollHeight :0,body ? body.clientHeight :0);\n var x=-winScroll.scrollLeft+getWindowScrollBarX(element);\n var y=-winScroll.scrollTop;\n\n if (getComputedStyle(body || html).direction==='rtl'){\n x+=math_max(html.clientWidth,body ? body.clientWidth:0) - width;\n}\n\n return{\n width:width,\n height:height,\n x:x,\n y:y\n};\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/contains.js\n\nfunction contains(parent,child){\n var rootNode=child.getRootNode && child.getRootNode();// First,attempt with faster native method\n\n if (parent.contains(child)){\n return true;\n}// then fallback to custom implementation with Shadow DOM support\n else if (rootNode && isShadowRoot(rootNode)){\n var next=child;\n\n do{\n if (next && parent.isSameNode(next)){\n return true;\n}// $FlowFixMe[prop-missing]:need a better way to handle this...\n\n\n next=next.parentNode || next.host;\n}while (next);\n}// Give up,the result is false\n\n\n return false;\n}\n;// ./node_modules/@popperjs/core/lib/utils/rectToClientRect.js\nfunction rectToClientRect(rect){\n return Object.assign({},rect,{\n left:rect.x,\n top:rect.y,\n right:rect.x+rect.width,\n bottom:rect.y+rect.height\n});\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction getInnerBoundingClientRect(element,strategy){\n var rect=getBoundingClientRect(element,false,strategy==='fixed');\n rect.top=rect.top+element.clientTop;\n rect.left=rect.left+element.clientLeft;\n rect.bottom=rect.top+element.clientHeight;\n rect.right=rect.left+element.clientWidth;\n rect.width=element.clientWidth;\n rect.height=element.clientHeight;\n rect.x=rect.left;\n rect.y=rect.top;\n return rect;\n}\n\nfunction getClientRectFromMixedType(element,clippingParent,strategy){\n return clippingParent===viewport ? rectToClientRect(getViewportRect(element,strategy)):isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent,strategy):rectToClientRect(getDocumentRect(getDocumentElement(element)));\n}// A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element){\n var clippingParents=listScrollParents(getParentNode(element));\n var canEscapeClipping=['absolute','fixed'].indexOf(getComputedStyle(element).position)>=0;\n var clipperElement=canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) :element;\n\n if (!isElement(clipperElement)){\n return [];\n}// $FlowFixMe[incompatible-return]:https://github.com/facebook/flow/issues/1414\n\n\n return clippingParents.filter(function (clippingParent){\n return isElement(clippingParent) && contains(clippingParent,clipperElement) && getNodeName(clippingParent) !=='body';\n});\n}// Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nfunction getClippingRect(element,boundary,rootBoundary,strategy){\n var mainClippingParents=boundary==='clippingParents' ? getClippingParents(element) :[].concat(boundary);\n var clippingParents=[].concat(mainClippingParents,[rootBoundary]);\n var firstClippingParent=clippingParents[0];\n var clippingRect=clippingParents.reduce(function (accRect,clippingParent){\n var rect=getClientRectFromMixedType(element,clippingParent,strategy);\n accRect.top=math_max(rect.top,accRect.top);\n accRect.right=math_min(rect.right,accRect.right);\n accRect.bottom=math_min(rect.bottom,accRect.bottom);\n accRect.left=math_max(rect.left,accRect.left);\n return accRect;\n},getClientRectFromMixedType(element,firstClippingParent,strategy));\n clippingRect.width=clippingRect.right - clippingRect.left;\n clippingRect.height=clippingRect.bottom - clippingRect.top;\n clippingRect.x=clippingRect.left;\n clippingRect.y=clippingRect.top;\n return clippingRect;\n}\n;// ./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js\nfunction getFreshSideObject(){\n return{\n top:0,\n right:0,\n bottom:0,\n left:0\n};\n}\n;// ./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js\n\nfunction mergePaddingObject(paddingObject){\n return Object.assign({},getFreshSideObject(),paddingObject);\n}\n;// ./node_modules/@popperjs/core/lib/utils/expandToHashMap.js\nfunction expandToHashMap(value,keys){\n return keys.reduce(function (hashMap,key){\n hashMap[key]=value;\n return hashMap;\n});\n}\n;// ./node_modules/@popperjs/core/lib/utils/detectOverflow.js\n\n\n\n\n\n\n\n\n // eslint-disable-next-line import/no-unused-modules\n\nfunction detectOverflow(state,options){\n if (options===void 0){\n options={};\n}\n\n var _options=options,\n _options$placement=_options.placement,\n placement=_options$placement===void 0 ? state.placement :_options$placement,\n _options$strategy=_options.strategy,\n strategy=_options$strategy===void 0 ? state.strategy :_options$strategy,\n _options$boundary=_options.boundary,\n boundary=_options$boundary===void 0 ? clippingParents :_options$boundary,\n _options$rootBoundary=_options.rootBoundary,\n rootBoundary=_options$rootBoundary===void 0 ? viewport :_options$rootBoundary,\n _options$elementConte=_options.elementContext,\n elementContext=_options$elementConte===void 0 ? popper :_options$elementConte,\n _options$altBoundary=_options.altBoundary,\n altBoundary=_options$altBoundary===void 0 ? false :_options$altBoundary,\n _options$padding=_options.padding,\n padding=_options$padding===void 0 ? 0 :_options$padding;\n var paddingObject=mergePaddingObject(typeof padding !=='number' ? padding :expandToHashMap(padding,basePlacements));\n var altContext=elementContext===popper ? reference :popper;\n var popperRect=state.rects.popper;\n var element=state.elements[altBoundary ? altContext :elementContext];\n var clippingClientRect=getClippingRect(isElement(element) ? element :element.contextElement || getDocumentElement(state.elements.popper),boundary,rootBoundary,strategy);\n var referenceClientRect=getBoundingClientRect(state.elements.reference);\n var popperOffsets=computeOffsets({\n reference:referenceClientRect,\n element:popperRect,\n strategy:'absolute',\n placement:placement\n});,popperRect,popperOffsets));\n var elementClientRect=elementContext===popper ? popperClientRect :referenceClientRect;// positive=overflowing the clipping rect\n // 0 or negative=within the clipping rect\n\n var overflowOffsets={\n top:clippingClientRect.top - elementClientRect.top+paddingObject.top,\n bottom:elementClientRect.bottom - clippingClientRect.bottom+paddingObject.bottom,\n left:clippingClientRect.left - elementClientRect.left+paddingObject.left,\n right:elementClientRect.right - clippingClientRect.right+paddingObject.right\n};\n var offsetData=state.modifiersData.offset;// Offsets can be applied only to the popper element\n\n if (elementContext===popper && offsetData){\n var offset=offsetData[placement];\n Object.keys(overflowOffsets).forEach(function (key){\n var multiply=[right,bottom].indexOf(key)>=0 ? 1:-1;\n var axis=[enums_top,bottom].indexOf(key)>=0 ? 'y':'x';\n overflowOffsets[key]+=offset[axis] * multiply;\n});\n}\n\n return overflowOffsets;\n}\n;// ./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js\n\n\n\n\nfunction computeAutoPlacement(state,options){\n if (options===void 0){\n options={};\n}\n\n var _options=options,\n placement=_options.placement,\n boundary=_options.boundary,\n rootBoundary=_options.rootBoundary,\n padding=_options.padding,\n flipVariations=_options.flipVariations,\n _options$allowedAutoP=_options.allowedAutoPlacements,\n allowedAutoPlacements=_options$allowedAutoP===void 0 ? enums_placements :_options$allowedAutoP;\n var variation=getVariation(placement);\n var placements=variation ? flipVariations ? variationPlacements :variationPlacements.filter(function (placement){\n return getVariation(placement)===variation;\n}) :basePlacements;\n var allowedPlacements=placements.filter(function (placement){\n return allowedAutoPlacements.indexOf(placement)>=0;\n});\n\n if (allowedPlacements.length===0){\n allowedPlacements=placements;\n}// $FlowFixMe[incompatible-type]:Flow seems to have problems with two array unions...\n\n\n var overflows=allowedPlacements.reduce(function (acc,placement){\n acc[placement]=detectOverflow(state,{\n placement:placement,\n boundary:boundary,\n rootBoundary:rootBoundary,\n padding:padding\n})[getBasePlacement(placement)];\n return acc;\n});\n return Object.keys(overflows).sort(function (a,b){\n return overflows[a] - overflows[b];\n});\n}\n;// ./node_modules/@popperjs/core/lib/modifiers/flip.js\n\n\n\n\n\n\n // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement){\n if (getBasePlacement(placement)===auto){\n return [];\n}\n\n var oppositePlacement=getOppositePlacement(placement);\n return [getOppositeVariationPlacement(placement),oppositePlacement,getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref){\n var state=_ref.state,\n options=_ref.options,\n name=_ref.name;\n\n if (state.modifiersData[name]._skip){\n return;\n}\n\n var _options$mainAxis=options.mainAxis,\n checkMainAxis=_options$mainAxis===void 0 ? true :_options$mainAxis,\n _options$altAxis=options.altAxis,\n checkAltAxis=_options$altAxis===void 0 ? true :_options$altAxis,\n specifiedFallbackPlacements=options.fallbackPlacements,\n padding=options.padding,\n boundary=options.boundary,\n rootBoundary=options.rootBoundary,\n altBoundary=options.altBoundary,\n _options$flipVariatio=options.flipVariations,\n flipVariations=_options$flipVariatio===void 0 ? true :_options$flipVariatio,\n allowedAutoPlacements=options.allowedAutoPlacements;\n var preferredPlacement=state.options.placement;\n var basePlacement=getBasePlacement(preferredPlacement);\n var isBasePlacement=basePlacement===preferredPlacement;\n var fallbackPlacements=specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] :getExpandedFallbackPlacements(preferredPlacement));\n var placements=[preferredPlacement].concat(fallbackPlacements).reduce(function (acc,placement){\n return acc.concat(getBasePlacement(placement)===auto ? computeAutoPlacement(state,{\n placement:placement,\n boundary:boundary,\n rootBoundary:rootBoundary,\n padding:padding,\n flipVariations:flipVariations,\n allowedAutoPlacements:allowedAutoPlacements\n}):placement);\n},[]);\n var referenceRect=state.rects.reference;\n var popperRect=state.rects.popper;\n var checksMap=new Map();\n var makeFallbackChecks=true;\n var firstFittingPlacement=placements[0];\n\n for (var i=0;i < placements.length;i++){\n var placement=placements[i];\n\n var _basePlacement=getBasePlacement(placement);\n\n var isStartVariation=getVariation(placement)===start;\n var isVertical=[enums_top,bottom].indexOf(_basePlacement)>=0;\n var len=isVertical ? 'width' :'height';\n var overflow=detectOverflow(state,{\n placement:placement,\n boundary:boundary,\n rootBoundary:rootBoundary,\n altBoundary:altBoundary,\n padding:padding\n});\n var mainVariationSide=isVertical ? isStartVariation ? right :left :isStartVariation ? bottom :enums_top;\n\n if (referenceRect[len]>popperRect[len]){\n mainVariationSide=getOppositePlacement(mainVariationSide);\n}\n\n var altVariationSide=getOppositePlacement(mainVariationSide);\n var checks=[];\n\n if (checkMainAxis){\n checks.push(overflow[_basePlacement] <=0);\n}\n\n if (checkAltAxis){\n checks.push(overflow[mainVariationSide] <=0,overflow[altVariationSide] <=0);\n}\n\n if (checks.every(function (check){\n return check;\n})){\n firstFittingPlacement=placement;\n makeFallbackChecks=false;\n break;\n}\n\n checksMap.set(placement,checks);\n}\n\n if (makeFallbackChecks){\n // `2` may be desired in some cases – research later\n var numberOfChecks=flipVariations ? 3 :1;\n\n var _loop=function _loop(_i){\n var fittingPlacement=placements.find(function (placement){\n var checks=checksMap.get(placement);\n\n if (checks){\n return checks.slice(0,_i).every(function (check){\n return check;\n});\n}\n});\n\n if (fittingPlacement){\n firstFittingPlacement=fittingPlacement;\n return \"break\";\n}\n};\n\n for (var _i=numberOfChecks;_i>0;_i--){\n var _ret=_loop(_i);\n\n if (_ret===\"break\") break;\n}\n}\n\n if (state.placement !==firstFittingPlacement){\n state.modifiersData[name]._skip=true;\n state.placement=firstFittingPlacement;\n state.reset=true;\n}\n}// eslint-disable-next-line import/no-unused-modules\n\n\n const modifiers_flip=({\n name:'flip',\n enabled:true,\n phase:'main',\n fn:flip,\n requiresIfExists:['offset'],\n data:{\n _skip:false\n}\n});\n;// ./node_modules/@popperjs/core/lib/utils/getAltAxis.js\nfunction getAltAxis(axis){\n return axis==='x' ? 'y':'x';\n}\n;// ./node_modules/@popperjs/core/lib/utils/within.js\n\nfunction within(min,value,max){\n return math_max(min,math_min(value,max));\n}\nfunction withinMaxClamp(min,value,max){\n var v=within(min,value,max);\n return v>max ? max:v;\n}\n;// ./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js\n\n\n\n\n\n\n\n\n\n\n\n\nfunction preventOverflow(_ref){\n var state=_ref.state,\n options=_ref.options,\n name=_ref.name;\n var _options$mainAxis=options.mainAxis,\n checkMainAxis=_options$mainAxis===void 0 ? true :_options$mainAxis,\n _options$altAxis=options.altAxis,\n checkAltAxis=_options$altAxis===void 0 ? false :_options$altAxis,\n boundary=options.boundary,\n rootBoundary=options.rootBoundary,\n altBoundary=options.altBoundary,\n padding=options.padding,\n _options$tether=options.tether,\n tether=_options$tether===void 0 ? true :_options$tether,\n _options$tetherOffset=options.tetherOffset,\n tetherOffset=_options$tetherOffset===void 0 ? 0 :_options$tetherOffset;\n var overflow=detectOverflow(state,{\n boundary:boundary,\n rootBoundary:rootBoundary,\n padding:padding,\n altBoundary:altBoundary\n});\n var basePlacement=getBasePlacement(state.placement);\n var variation=getVariation(state.placement);\n var isBasePlacement=!variation;\n var mainAxis=getMainAxisFromPlacement(basePlacement);\n var altAxis=getAltAxis(mainAxis);\n var popperOffsets=state.modifiersData.popperOffsets;\n var referenceRect=state.rects.reference;\n var popperRect=state.rects.popper;,state.rects,{\n placement:state.placement\n})) :tetherOffset;\n var normalizedTetherOffsetValue=typeof tetherOffsetValue==='number' ?{\n mainAxis:tetherOffsetValue,\n altAxis:tetherOffsetValue\n}:Object.assign({\n mainAxis:0,\n altAxis:0\n},tetherOffsetValue);\n var offsetModifierState=state.modifiersData.offset ? state.modifiersData.offset[state.placement] :null;\n var data={\n x:0,\n y:0\n};\n\n if (!popperOffsets){\n return;\n}\n\n if (checkMainAxis){\n var _offsetModifierState$;\n\n var mainSide=mainAxis==='y' ? enums_top :left;\n var altSide=mainAxis==='y' ? bottom :right;\n var len=mainAxis==='y' ? 'height' :'width';\n var offset=popperOffsets[mainAxis];\n var min=offset+overflow[mainSide];\n var max=offset - overflow[altSide];\n var additive=tether ? -popperRect[len] / 2 :0;\n var minLen=variation===start ? referenceRect[len] :popperRect[len];\n var maxLen=variation===start ? -popperRect[len] :-referenceRect[len];// We need to include the arrow in the calculation so the arrow doesn't go\n // outside the reference bounds\n\n var arrowElement=state.elements.arrow;\n var arrowRect=tether && arrowElement ? getLayoutRect(arrowElement) :{\n width:0,\n height:0\n};\n var arrowPaddingObject=state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding:getFreshSideObject();\n var arrowPaddingMin=arrowPaddingObject[mainSide];\n var arrowPaddingMax=arrowPaddingObject[altSide];// If the reference length is smaller than the arrow length,we don't want\n // to include its full size in the calculation. If the reference is small\n // and near the edge of a boundary,the popper can overflow even if the\n // reference is not overflowing as well (e.g. virtual elements with no\n // width or height)\n\n var arrowLen=within(0,referenceRect[len],arrowRect[len]);\n var minOffset=isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis:minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n var maxOffset=isBasePlacement ? -referenceRect[len] / 2+additive+arrowLen+arrowPaddingMax+normalizedTetherOffsetValue.mainAxis:maxLen+arrowLen+arrowPaddingMax+normalizedTetherOffsetValue.mainAxis;\n var arrowOffsetParent=state.elements.arrow && getOffsetParent(state.elements.arrow);\n var clientOffset=arrowOffsetParent ? mainAxis==='y' ? arrowOffsetParent.clientTop || 0:arrowOffsetParent.clientLeft || 0:0;\n var offsetModifierValue=(_offsetModifierState$=offsetModifierState==null ? void 0:offsetModifierState[mainAxis]) !=null ? _offsetModifierState$:0;\n var tetherMin=offset+minOffset - offsetModifierValue - clientOffset;\n var tetherMax=offset+maxOffset - offsetModifierValue;\n var preventedOffset=within(tether ? math_min(min,tetherMin):min,offset,tether ? math_max(max,tetherMax):max);\n popperOffsets[mainAxis]=preventedOffset;\n data[mainAxis]=preventedOffset - offset;\n}\n\n if (checkAltAxis){\n var _offsetModifierState$2;\n\n var _mainSide=mainAxis==='x' ? enums_top:left;\n\n var _altSide=mainAxis==='x' ? bottom:right;\n\n var _offset=popperOffsets[altAxis];\n\n var _len=altAxis==='y' ? 'height':'width';\n\n var _min=_offset+overflow[_mainSide];\n\n var _max=_offset - overflow[_altSide];\n\n var isOriginSide=[enums_top,left].indexOf(basePlacement) !==-1;\n\n var _offsetModifierValue=(_offsetModifierState$2=offsetModifierState==null ? void 0:offsetModifierState[altAxis]) !=null ? _offsetModifierState$2:0;\n\n var _tetherMin=isOriginSide ? _min:_offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue+normalizedTetherOffsetValue.altAxis;\n\n var _tetherMax=isOriginSide ? _offset+referenceRect[_len]+popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis:_max;\n\n var _preventedOffset=tether && isOriginSide ? withinMaxClamp(_tetherMin,_offset,_tetherMax):within(tether ? _tetherMin:_min,_offset,tether ? _tetherMax:_max);\n\n popperOffsets[altAxis]=_preventedOffset;\n data[altAxis]=_preventedOffset - _offset;\n}\n\n state.modifiersData[name]=data;\n}// eslint-disable-next-line import/no-unused-modules\n\n\n const modifiers_preventOverflow=({\n name:'preventOverflow',\n enabled:true,\n phase:'main',\n fn:preventOverflow,\n requiresIfExists:['offset']\n});\n;// ./node_modules/@popperjs/core/lib/modifiers/arrow.js\n\n\n\n\n\n\n\n\n // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject=function toPaddingObject(padding,state){\n padding=typeof padding==='function' ? padding(Object.assign({},state.rects,{\n placement:state.placement\n})):padding;\n return mergePaddingObject(typeof padding !=='number' ? padding:expandToHashMap(padding,basePlacements));\n};\n\nfunction arrow(_ref){\n var _state$modifiersData$;\n\n var state=_ref.state,\n name=_ref.name,\n options=_ref.options;\n var arrowElement=state.elements.arrow;\n var popperOffsets=state.modifiersData.popperOffsets;\n var basePlacement=getBasePlacement(state.placement);\n var axis=getMainAxisFromPlacement(basePlacement);\n var isVertical=[left,right].indexOf(basePlacement)>=0;\n var len=isVertical ? 'height' :'width';\n\n if (!arrowElement || !popperOffsets){\n return;\n}\n\n var paddingObject=toPaddingObject(options.padding,state);\n var arrowRect=getLayoutRect(arrowElement);\n var minProp=axis==='y' ? enums_top :left;\n var maxProp=axis==='y' ? bottom :right;\n var endDiff=state.rects.reference[len]+state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n var startDiff=popperOffsets[axis] - state.rects.reference[axis];\n var arrowOffsetParent=getOffsetParent(arrowElement);\n var clientSize=arrowOffsetParent ? axis==='y' ? arrowOffsetParent.clientHeight || 0 :arrowOffsetParent.clientWidth || 0 :0;\n var centerToReference=endDiff / 2 - startDiff / 2;// Make sure the arrow doesn't overflow the popper if the center point is\n // outside of the popper bounds\n\n var min=paddingObject[minProp];\n var max=clientSize - arrowRect[len] - paddingObject[maxProp];\n var center=clientSize / 2 - arrowRect[len] / 2+centerToReference;\n var offset=within(min,center,max);// Prevents breaking syntax highlighting...\n\n var axisProp=axis;,_state$modifiersData$[axisProp]=offset,_state$modifiersData$.centerOffset=offset - center,_state$modifiersData$);\n}\n\nfunction arrow_effect(_ref2){\n var state=_ref2.state,\n options=_ref2.options;\n var _options$element=options.element,\n arrowElement=_options$element===void 0 ? '[data-popper-arrow]' :_options$element;\n\n if (arrowElement==null){\n return;\n}// CSS selector\n\n\n if (typeof arrowElement==='string'){\n arrowElement=state.elements.popper.querySelector(arrowElement);\n\n if (!arrowElement){\n return;\n}\n}\n\n if (!contains(state.elements.popper,arrowElement)){\n return;\n}\n\n state.elements.arrow=arrowElement;\n}// eslint-disable-next-line import/no-unused-modules\n\n\n const modifiers_arrow=({\n name:'arrow',\n enabled:true,\n phase:'main',\n fn:arrow,\n effect:arrow_effect,\n requires:['popperOffsets'],\n requiresIfExists:['preventOverflow']\n});\n;// ./node_modules/@popperjs/core/lib/modifiers/hide.js\n\n\n\nfunction getSideOffsets(overflow,rect,preventedOffsets){\n if (preventedOffsets===void 0){\n preventedOffsets={\n x:0,\n y:0\n};\n}\n\n return{\n top:overflow.top - rect.height - preventedOffsets.y,\n right:overflow.right - rect.width+preventedOffsets.x,\n bottom:overflow.bottom - rect.height+preventedOffsets.y,\n left:overflow.left - rect.width - preventedOffsets.x\n};\n}\n\nfunction isAnySideFullyClipped(overflow){\n return [enums_top,right,bottom,left].some(function (side){\n return overflow[side]>=0;\n});\n}\n\nfunction hide(_ref){\n var state=_ref.state,\n name=_ref.name;\n var referenceRect=state.rects.reference;\n var popperRect=state.rects.popper;\n var preventedOffsets=state.modifiersData.preventOverflow;\n var referenceOverflow=detectOverflow(state,{\n elementContext:'reference'\n});\n var popperAltOverflow=detectOverflow(state,{\n altBoundary:true\n});\n var referenceClippingOffsets=getSideOffsets(referenceOverflow,referenceRect);\n var popperEscapeOffsets=getSideOffsets(popperAltOverflow,popperRect,preventedOffsets);\n var isReferenceHidden=isAnySideFullyClipped(referenceClippingOffsets);\n var hasPopperEscaped=isAnySideFullyClipped(popperEscapeOffsets);\n state.modifiersData[name]={\n referenceClippingOffsets:referenceClippingOffsets,\n popperEscapeOffsets:popperEscapeOffsets,\n isReferenceHidden:isReferenceHidden,\n hasPopperEscaped:hasPopperEscaped\n};,state.attributes.popper,{\n 'data-popper-reference-hidden':isReferenceHidden,\n 'data-popper-escaped':hasPopperEscaped\n});\n}// eslint-disable-next-line import/no-unused-modules\n\n\n const modifiers_hide=({\n name:'hide',\n enabled:true,\n phase:'main',\n requiresIfExists:['preventOverflow'],\n fn:hide\n});\n;// ./node_modules/@popperjs/core/lib/popper.js\n\n\n\n\n\n\n\n\n\n\nvar defaultModifiers=[eventListeners,modifiers_popperOffsets,modifiers_computeStyles,modifiers_applyStyles,modifiers_offset,modifiers_flip,modifiers_preventOverflow,modifiers_arrow,modifiers_hide];\nvar popper_createPopper=popperGenerator({\n defaultModifiers:defaultModifiers\n});// eslint-disable-next-line import/no-unused-modules\n\n // eslint-disable-next-line import/no-unused-modules\n\n // eslint-disable-next-line import/no-unused-modules\n\n\n;// ./node_modules/@mui/material/Popper/popperClasses.js\n\n\nfunction getPopperUtilityClass(slot){\n return (0,generateUtilityClass_generateUtilityClass.Ay)('MuiPopper',slot);\n}\nconst popperClasses=(0,generateUtilityClasses.A)('MuiPopper',['root']);\n const Popper_popperClasses=((null && (popperClasses)));\n;// ./node_modules/@mui/material/Popper/BasePopper.js\n'use client';\n\n\n\nconst BasePopper_excluded=[\"anchorEl\",\"children\",\"direction\",\"disablePortal\",\"modifiers\",\"open\",\"placement\",\"popperOptions\",\"popperRef\",\"slotProps\",\"slots\",\"TransitionProps\",\"ownerState\"],\n BasePopper_excluded2=[\"anchorEl\",\"children\",\"container\",\"direction\",\"disablePortal\",\"keepMounted\",\"modifiers\",\"open\",\"placement\",\"popperOptions\",\"popperRef\",\"style\",\"transition\",\"slotProps\",\"slots\"];\n\n\n\n\n\n\n\n\n\nfunction flipPlacement(placement,direction){\n if (direction==='ltr'){\n return placement;\n}\n switch (placement){\n case 'bottom-end':\n return 'bottom-start';\n case 'bottom-start':\n return 'bottom-end';\n case 'top-end':\n return 'top-start';\n case 'top-start':\n return 'top-end';\n default:\n return placement;\n}\n}\nfunction BasePopper_resolveAnchorEl(anchorEl){\n return typeof anchorEl==='function' ? anchorEl():anchorEl;\n}\nfunction BasePopper_isHTMLElement(element){\n return element.nodeType !==undefined;\n}\nfunction isVirtualElement(element){\n return !BasePopper_isHTMLElement(element);\n}\nconst BasePopper_useUtilityClasses=ownerState=>{\n const{\n classes\n}=ownerState;\n const slots={\n root:['root']\n};\n return (0,composeClasses.A)(slots,getPopperUtilityClass,classes);\n};;\nconst PopperTooltip=external_React_.forwardRef(function PopperTooltip(props,forwardedRef){\n var _slots$root;\n const{\n anchorEl,\n children,\n direction,\n disablePortal,\n modifiers,\n open,\n placement:initialPlacement,\n popperOptions,\n popperRef:popperRefProp,\n slotProps={},\n TransitionProps\n // @ts-ignore internal logic\n // prevent from spreading to DOM,it can come from the parent component e.g. Select.\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,BasePopper_excluded);\n const tooltipRef=external_React_.useRef(null);\n const ownRef=(0,useForkRef.A)(tooltipRef,forwardedRef);\n const popperRef=external_React_.useRef(null);\n const handlePopperRef=(0,useForkRef.A)(popperRef,popperRefProp);\n const handlePopperRefRef=external_React_.useRef(handlePopperRef);\n (0,useEnhancedEffect.A)(()=>{\n handlePopperRefRef.current=handlePopperRef;\n},[handlePopperRef]);\n external_React_.useImperativeHandle(popperRefProp,()=>popperRef.current,[]);\n const rtlPlacement=flipPlacement(initialPlacement,direction);\n \n const [placement,setPlacement]=external_React_.useState(rtlPlacement);\n const [resolvedAnchorElement,setResolvedAnchorElement]=external_React_.useState(BasePopper_resolveAnchorEl(anchorEl));\n external_React_.useEffect(()=>{\n if (popperRef.current){\n popperRef.current.forceUpdate();\n}\n});\n external_React_.useEffect(()=>{\n if (anchorEl){\n setResolvedAnchorElement(BasePopper_resolveAnchorEl(anchorEl));\n}\n},[anchorEl]);\n (0,useEnhancedEffect.A)(()=>{\n if (!resolvedAnchorElement || !open){\n return undefined;\n}\n const handlePopperUpdate=data=>{\n setPlacement(data.placement);\n};\n let popperModifiers=[{\n name:'preventOverflow',\n options:{\n altBoundary:disablePortal\n}\n},{\n name:'flip',\n options:{\n altBoundary:disablePortal\n}\n},{\n name:'onUpdate',\n enabled:true,\n phase:'afterWrite',\n fn:({\n state\n})=>{\n handlePopperUpdate(state);\n}\n}];\n if (modifiers !=null){\n popperModifiers=popperModifiers.concat(modifiers);\n}\n if (popperOptions && popperOptions.modifiers !=null){\n popperModifiers=popperModifiers.concat(popperOptions.modifiers);\n}\n const popper=popper_createPopper(resolvedAnchorElement,tooltipRef.current,(0,esm_extends.A)({\n placement:rtlPlacement\n},popperOptions,{\n modifiers:popperModifiers\n}));\n handlePopperRefRef.current(popper);\n return ()=>{\n popper.destroy();\n handlePopperRefRef.current(null);\n};\n},[resolvedAnchorElement,disablePortal,modifiers,open,popperOptions,rtlPlacement]);\n const childProps={\n placement:placement\n};\n if (TransitionProps !==null){\n childProps.TransitionProps=TransitionProps;\n}\n const classes=BasePopper_useUtilityClasses(props);\n const Root=(_slots$root=slots.root) !=null ? _slots$root :'div';\n const rootProps=useSlotProps_useSlotProps({\n elementType:Root,\n externalSlotProps:slotProps.root,\n externalForwardedProps:other,\n additionalProps:{\n role:'tooltip',\n ref:ownRef\n},\n ownerState:props,\n className:classes.root\n});,rootProps,{\n children:typeof children==='function' ? children(childProps):children\n}));\n});\n\n\nconst Popper=external_React_.forwardRef(function Popper(props,forwardedRef){\n const{\n anchorEl,\n children,\n container:containerProp,\n direction='ltr',\n disablePortal=false,\n keepMounted=false,\n modifiers,\n open,\n placement='bottom',\n popperOptions=defaultPopperOptions,\n popperRef,\n style,\n transition=false,\n slotProps={}\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,BasePopper_excluded2);\n const [exited,setExited]=external_React_.useState(true);\n const handleEnter=()=>{\n setExited(false);\n};\n const handleExited=()=>{\n setExited(true);\n};\n if (!keepMounted && !open && (!transition || exited)){\n return null;\n}\n\n // If the container prop is provided,use that\n // If the anchorEl prop is provided,use its parent body element as the container\n // If neither are provided let the Modal take care of choosing the container\n let container;\n if (containerProp){\n container=containerProp;\n}else if (anchorEl){\n const resolvedAnchorEl=BasePopper_resolveAnchorEl(anchorEl);\n container=resolvedAnchorEl && BasePopper_isHTMLElement(resolvedAnchorEl) ? (0,ownerDocument_ownerDocument.A)(resolvedAnchorEl).body:(0,ownerDocument_ownerDocument.A)(null).body;\n}\n const display=!open && keepMounted && (!transition || exited) ? 'none' :undefined;\n const transitionProps=transition ?{\n in:open,\n onEnter:handleEnter,\n onExited:handleExited\n}:undefined;\n return (0,jsx_runtime.jsx)(Portal_Portal,{\n disablePortal:disablePortal,\n container:container,\n children:(0,jsx_runtime.jsx)(PopperTooltip,(0,esm_extends.A)({\n anchorEl:anchorEl,\n direction:direction,\n disablePortal:disablePortal,\n modifiers:modifiers,\n ref:forwardedRef,\n open:transition ? !exited:open,\n placement:placement,\n popperOptions:popperOptions,\n popperRef:popperRef,\n slotProps:slotProps,\n slots:slots\n},other,{\n style:(0,esm_extends.A)({\n // Prevents scroll issue,waiting for Popper.js to add this style once initiated.\n position:'fixed',\n // Fix Popper.js display issue\n top:0,\n left:0,\n display\n},style),\n TransitionProps:transitionProps,\n children:children\n}))\n});\n});\n false ? 0 :void 0;\n const BasePopper=(Popper);\n;// ./node_modules/@mui/material/Popper/Popper.js\n'use client';\n\n\n\nconst Popper_excluded=[\"anchorEl\",\"component\",\"components\",\"componentsProps\",\"container\",\"disablePortal\",\"keepMounted\",\"modifiers\",\"open\",\"placement\",\"popperOptions\",\"popperRef\",\"transition\",\"slots\",\"slotProps\"];\n\n\n\n\n\n\n\n\n\nconst PopperRoot=(0,styled.Ay)(BasePopper,{\n name:'MuiPopper',\n slot:'Root',\n overridesResolver:(props,styles)=>styles.root\n});\n\n\nconst Popper_Popper=external_React_.forwardRef(function Popper(inProps,ref){\n var _slots$root;\n const theme=(0,system_useThemeWithoutDefault.A)();\n const props=(0,DefaultPropsProvider.b)({\n props:inProps,\n name:'MuiPopper'\n});\n const{\n anchorEl,\n component,\n components,\n componentsProps,\n container,\n disablePortal,\n keepMounted,\n modifiers,\n open,\n placement,\n popperOptions,\n popperRef,\n transition,\n slots,\n slotProps\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,Popper_excluded);\n const RootComponent=(_slots$root=slots==null ? void 0 :slots.root) !=null ? _slots$root :components==null ? void 0 :components.Root;\n const otherProps=(0,esm_extends.A)({\n anchorEl,\n container,\n disablePortal,\n keepMounted,\n modifiers,\n open,\n placement,\n popperOptions,\n popperRef,\n transition\n},other);\n return (0,jsx_runtime.jsx)(PopperRoot,(0,esm_extends.A)({\n as:component,\n direction:theme==null ? void 0 :theme.direction,\n slots:{\n root:RootComponent\n},\n slotProps:slotProps !=null ? slotProps:componentsProps\n},otherProps,{\n ref:ref\n}));\n});\n false ? 0 :void 0;\n const material_Popper_Popper=(Popper_Popper);\n// EXTERNAL MODULE:./node_modules/@mui/material/utils/useId.js\nvar utils_useId=__webpack_require__(1668);\n;// ./node_modules/@mui/material/Tooltip/tooltipClasses.js\n\n\nfunction getTooltipUtilityClass(slot){\n return (0,generateUtilityClass_generateUtilityClass.Ay)('MuiTooltip',slot);\n}\nconst tooltipClasses=(0,generateUtilityClasses.A)('MuiTooltip',['popper','popperInteractive','popperArrow','popperClose','tooltip','tooltipArrow','touch','tooltipPlacementLeft','tooltipPlacementRight','tooltipPlacementTop','tooltipPlacementBottom','arrow']);\n const Tooltip_tooltipClasses=(tooltipClasses);\n;// ./node_modules/@mui/material/Tooltip/Tooltip.js\n'use client';\n\n\n\nconst Tooltip_excluded=[\"arrow\",\"children\",\"classes\",\"components\",\"componentsProps\",\"describeChild\",\"disableFocusListener\",\"disableHoverListener\",\"disableInteractive\",\"disableTouchListener\",\"enterDelay\",\"enterNextDelay\",\"enterTouchDelay\",\"followCursor\",\"id\",\"leaveDelay\",\"leaveTouchDelay\",\"onClose\",\"onOpen\",\"open\",\"placement\",\"PopperComponent\",\"PopperProps\",\"slotProps\",\"slots\",\"title\",\"TransitionComponent\",\"TransitionProps\"];\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction Tooltip_round(value){\n return Math.round(value * 1e5) / 1e5;\n}\nconst Tooltip_useUtilityClasses=ownerState=>{\n const{\n classes,\n disableInteractive,\n arrow,\n touch,\n placement\n}=ownerState;\n const slots={\n popper:['popper',!disableInteractive && 'popperInteractive',arrow && 'popperArrow'],\n tooltip:['tooltip',arrow && 'tooltipArrow',touch && 'touch',`tooltipPlacement${(0,capitalize.A)(placement.split('-')[0])}`],\n arrow:['arrow']\n};\n return (0,composeClasses.A)(slots,getTooltipUtilityClass,classes);\n};\nconst TooltipPopper=(0,styled.Ay)(material_Popper_Popper,{\n name:'MuiTooltip',\n slot:'Popper',\n overridesResolver:(props,styles)=>{\n const{\n ownerState\n}=props;\n return [styles.popper,!ownerState.disableInteractive && styles.popperInteractive,ownerState.arrow && styles.popperArrow,!ownerState.open && styles.popperClose];\n}\n})(({\n theme,\n ownerState,\n open\n})=>(0,esm_extends.A)({\n zIndex:(theme.vars || theme).zIndex.tooltip,\n pointerEvents:'none'\n},!ownerState.disableInteractive &&{\n pointerEvents:'auto'\n},!open &&{\n pointerEvents:'none'\n},ownerState.arrow &&{\n [`&[data-popper-placement*=\"bottom\"] .${Tooltip_tooltipClasses.arrow}`]:{\n top:0,\n marginTop:'-0.71em',\n '&::before':{\n transformOrigin:'0 100%'\n}\n},\n [`&[data-popper-placement*=\"top\"] .${Tooltip_tooltipClasses.arrow}`]:{\n bottom:0,\n marginBottom:'-0.71em',\n '&::before':{\n transformOrigin:'100% 0'\n}\n},\n [`&[data-popper-placement*=\"right\"] .${Tooltip_tooltipClasses.arrow},!ownerState.isRtl ?{\n left:0,\n marginLeft:'-0.71em'\n}:{\n right:0,\n marginRight:'-0.71em'\n},{\n height:'1em',\n width:'0.71em',\n '&::before':{\n transformOrigin:'100% 100%'\n}\n}),\n [`&[data-popper-placement*=\"left\"] .${Tooltip_tooltipClasses.arrow},!ownerState.isRtl ?{\n right:0,\n marginRight:'-0.71em'\n}:{\n left:0,\n marginLeft:'-0.71em'\n},{\n height:'1em',\n width:'0.71em',\n '&::before':{\n transformOrigin:'0 0'\n}\n})\n}));\nconst TooltipTooltip=(0,styled.Ay)('div',{\n name:'MuiTooltip',\n slot:'Tooltip',\n overridesResolver:(props,styles)=>{\n const{\n ownerState\n}=props;\n return [styles.tooltip,ownerState.touch && styles.touch,ownerState.arrow && styles.tooltipArrow,styles[`tooltipPlacement${(0,capitalize.A)(ownerState.placement.split('-')[0])}`]];\n}\n})(({\n theme,\n ownerState\n})=>(0,esm_extends.A)({\n backgroundColor:theme.vars ? theme.vars.palette.Tooltip.bg:(0,colorManipulator.X4)(theme.palette.grey[700],.92),\n borderRadius:(theme.vars || theme).shape.borderRadius,\n color:(theme.vars || theme).palette.common.white,\n fontFamily:theme.typography.fontFamily,\n padding:'4px 8px',\n fontSize:theme.typography.pxToRem(11),\n maxWidth:300,\n margin:2,\n wordWrap:'break-word',\n fontWeight:theme.typography.fontWeightMedium\n},ownerState.arrow &&{\n position:'relative',\n margin:0\n},ownerState.touch &&{\n padding:'8px 16px',\n fontSize:theme.typography.pxToRem(14),\n lineHeight:`${Tooltip_round(16 / 14)}em`,\n fontWeight:theme.typography.fontWeightRegular\n},{\n [`.${Tooltip_tooltipClasses.popper}[data-popper-placement*=\"left\"] &`]:(0,esm_extends.A)({\n transformOrigin:'right center'\n},!ownerState.isRtl ? (0,esm_extends.A)({\n marginRight:'14px'\n},ownerState.touch &&{\n marginRight:'24px'\n}) :(0,esm_extends.A)({\n marginLeft:'14px'\n},ownerState.touch &&{\n marginLeft:'24px'\n})),\n [`.${Tooltip_tooltipClasses.popper}[data-popper-placement*=\"right\"] &`]:(0,esm_extends.A)({\n transformOrigin:'left center'\n},!ownerState.isRtl ? (0,esm_extends.A)({\n marginLeft:'14px'\n},ownerState.touch &&{\n marginLeft:'24px'\n}) :(0,esm_extends.A)({\n marginRight:'14px'\n},ownerState.touch &&{\n marginRight:'24px'\n})),\n [`.${Tooltip_tooltipClasses.popper}[data-popper-placement*=\"top\"] &`]:(0,esm_extends.A)({\n transformOrigin:'center bottom',\n marginBottom:'14px'\n},ownerState.touch &&{\n marginBottom:'24px'\n}),\n [`.${Tooltip_tooltipClasses.popper}[data-popper-placement*=\"bottom\"] &`]:(0,esm_extends.A)({\n transformOrigin:'center top',\n marginTop:'14px'\n},ownerState.touch &&{\n marginTop:'24px'\n})\n}));\nconst TooltipArrow=(0,styled.Ay)('span',{\n name:'MuiTooltip',\n slot:'Arrow',\n overridesResolver:(props,styles)=>styles.arrow\n})(({\n theme\n})=>({\n overflow:'hidden',\n position:'absolute',\n width:'1em',\n height:'0.71em',\n boxSizing:'border-box',\n color:theme.vars ? theme.vars.palette.Tooltip.bg :(0,colorManipulator.X4)(theme.palette.grey[700],.9),\n '&::before':{\n content:'\"\"',\n margin:'auto',\n display:'block',\n width:'100%',\n height:'100%',\n backgroundColor:'currentColor',\n transform:'rotate(45deg)'\n}\n}));\nlet hystersisOpen=false;\nconst hystersisTimer=new useTimeout.E();\nlet cursorPosition={\n x:0,\n y:0\n};\nfunction testReset(){\n hystersisOpen=false;\n hystersisTimer.clear();\n}\nfunction composeEventHandler(handler,eventHandler){\n return (event,...params)=>{\n if (eventHandler){\n eventHandler(event,...params);\n}\n handler(event,...params);\n};\n}\n\n// TODO v6:Remove PopperComponent,PopperProps,TransitionComponent and TransitionProps.\nconst Tooltip=external_React_.forwardRef(function Tooltip(inProps,ref){\n var _ref,_slots$popper,_ref2,_ref3,_slots$transition,_ref4,_slots$tooltip,_ref5,_slots$arrow,_slotProps$popper,_ref6,_slotProps$popper2,_slotProps$transition,_slotProps$tooltip,_ref7,_slotProps$tooltip2,_slotProps$arrow,_ref8,_slotProps$arrow2;\n const props=(0,DefaultPropsProvider.b)({\n props:inProps,\n name:'MuiTooltip'\n});\n const{\n arrow=false,\n children:childrenProp,\n components={},\n title,\n TransitionComponent:TransitionComponentProp=Grow_Grow,\n TransitionProps\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,Tooltip_excluded);\n\n // to prevent runtime errors,developers will need to provide a child as a React element anyway.\n const children=external_React_.isValidElement(childrenProp) ? childrenProp :(0,jsx_runtime.jsx)(\"span\",{\n children:childrenProp\n});\n const theme=styles_useTheme_useTheme();\n const isRtl=useRtl();\n const [childNode,setChildNode]=external_React_.useState();\n const [arrowRef,setArrowRef]=external_React_.useState(null);\n const ignoreNonTouchEvents=external_React_.useRef(false);\n const disableInteractive=disableInteractiveProp || followCursor;\n const closeTimer=(0,useTimeout.A)();\n const enterTimer=(0,useTimeout.A)();\n const leaveTimer=(0,useTimeout.A)();\n const touchTimer=(0,useTimeout.A)();\n const [openState,setOpenState]=(0,useControlled.A)({\n controlled:openProp,\n default:false,\n name:'Tooltip',\n state:'open'\n});\n let open=openState;\n const id=(0,utils_useId.A)(idProp);\n const prevUserSelect=external_React_.useRef();\n const stopTouchInteraction=(0,utils_useEventCallback.A)(()=>{\n if (prevUserSelect.current !==undefined){\n document.body.style.WebkitUserSelect=prevUserSelect.current;\n prevUserSelect.current=undefined;\n}\n touchTimer.clear();\n});\n external_React_.useEffect(()=>stopTouchInteraction,[stopTouchInteraction]);\n const handleOpen=event=>{\n hystersisTimer.clear();\n hystersisOpen=true;\n\n // The mouseover event will trigger for every nested element in the tooltip.\n // We can skip rerendering when the tooltip is already open.\n // We are using the mouseover event instead of the mouseenter event to fix a hide/show issue.\n setOpenState(true);\n if (onOpen && !open){\n onOpen(event);\n}\n};\n const handleClose=(0,utils_useEventCallback.A)(\n \n event=>{\n hystersisTimer.start(800+leaveDelay,()=>{\n hystersisOpen=false;\n});\n setOpenState(false);\n if (onClose && open){\n onClose(event);\n}\n closeTimer.start(theme.transitions.duration.shortest,()=>{\n ignoreNonTouchEvents.current=false;\n});\n});\n const handleMouseOver=event=>{\n if (ignoreNonTouchEvents.current && event.type !=='touchstart'){\n return;\n}\n\n // Remove the title ahead of time.\n // We don't want to wait for the next render commit.\n // We would risk displaying two tooltips at the same time (native+this one).\n if (childNode){\n childNode.removeAttribute('title');\n}\n enterTimer.clear();\n leaveTimer.clear();\n if (enterDelay || hystersisOpen && enterNextDelay){\n enterTimer.start(hystersisOpen ? enterNextDelay :enterDelay,()=>{\n handleOpen(event);\n});\n}else{\n handleOpen(event);\n}\n};\n const handleMouseLeave=event=>{\n enterTimer.clear();\n leaveTimer.start(leaveDelay,()=>{\n handleClose(event);\n});\n};\n const{\n isFocusVisibleRef,\n onBlur:handleBlurVisible,\n onFocus:handleFocusVisible,\n ref:focusVisibleRef\n}=(0,useIsFocusVisible.A)();\n // We don't necessarily care about the focusVisible state (which is safe to access via ref anyway).\n // We just need to re-render the Tooltip if the focus-visible state changes.\n const [,setChildIsFocusVisible]=external_React_.useState(false);\n const handleBlur=event=>{\n handleBlurVisible(event);\n if (isFocusVisibleRef.current===false){\n setChildIsFocusVisible(false);\n handleMouseLeave(event);\n}\n};\n const handleFocus=event=>{\n // Workaround for https://github.com/facebook/react/issues/7769\n // The autoFocus of React might trigger the event before the componentDidMount.\n // We need to account for this eventuality.\n if (!childNode){\n setChildNode(event.currentTarget);\n}\n handleFocusVisible(event);\n if (isFocusVisibleRef.current===true){\n setChildIsFocusVisible(true);\n handleMouseOver(event);\n}\n};\n const detectTouchStart=event=>{\n ignoreNonTouchEvents.current=true;\n const childrenProps=children.props;\n if (childrenProps.onTouchStart){\n childrenProps.onTouchStart(event);\n}\n};\n const handleTouchStart=event=>{\n detectTouchStart(event);\n leaveTimer.clear();\n closeTimer.clear();\n stopTouchInteraction();\n prevUserSelect.current=document.body.style.WebkitUserSelect;\n // Prevent iOS text selection on long-tap.\n document.body.style.WebkitUserSelect='none';\n touchTimer.start(enterTouchDelay,()=>{\n document.body.style.WebkitUserSelect=prevUserSelect.current;\n handleMouseOver(event);\n});\n};\n const handleTouchEnd=event=>{\n if (children.props.onTouchEnd){\n children.props.onTouchEnd(event);\n}\n stopTouchInteraction();\n leaveTimer.start(leaveTouchDelay,()=>{\n handleClose(event);\n});\n};\n external_React_.useEffect(()=>{\n if (!open){\n return undefined;\n}\n\n \n function handleKeyDown(nativeEvent){\n // IE11,Edge (prior to using Bink?) use 'Esc'\n if (nativeEvent.key==='Escape' || nativeEvent.key==='Esc'){\n handleClose(nativeEvent);\n}\n}\n document.addEventListener('keydown',handleKeyDown);\n return ()=>{\n document.removeEventListener('keydown',handleKeyDown);\n};\n},[handleClose,open]);\n const handleRef=(0,utils_useForkRef.A)(getReactElementRef(children),focusVisibleRef,setChildNode,ref);\n\n // There is no point in displaying an empty tooltip.\n // So we exclude all falsy values,except 0,which is valid.\n if (!title && title !==0){\n open=false;\n}\n const popperRef=external_React_.useRef();\n const handleMouseMove=event=>{\n const childrenProps=children.props;\n if (childrenProps.onMouseMove){\n childrenProps.onMouseMove(event);\n}\n cursorPosition={\n x:event.clientX,\n y:event.clientY\n};\n if (popperRef.current){\n popperRef.current.update();\n}\n};;\n const titleIsString=typeof title==='string';\n if (describeChild){\n nameOrDescProps.title=!open && titleIsString && !disableHoverListener ? title:null;\n nameOrDescProps['aria-describedby']=open ? id:null;\n}else{\n nameOrDescProps['aria-label']=titleIsString ? title:null;\n nameOrDescProps['aria-labelledby']=open && !titleIsString ? id:null;\n},nameOrDescProps,other,children.props,{\n className:(0,clsx.A)(other.className,children.props.className),\n onTouchStart:detectTouchStart,\n ref:handleRef\n},followCursor ?{\n onMouseMove:handleMouseMove\n});;\n if (!disableTouchListener){\n childrenProps.onTouchStart=handleTouchStart;\n childrenProps.onTouchEnd=handleTouchEnd;\n}\n if (!disableHoverListener){\n childrenProps.onMouseOver=composeEventHandler(handleMouseOver,childrenProps.onMouseOver);\n childrenProps.onMouseLeave=composeEventHandler(handleMouseLeave,childrenProps.onMouseLeave);\n if (!disableInteractive){\n interactiveWrapperListeners.onMouseOver=handleMouseOver;\n interactiveWrapperListeners.onMouseLeave=handleMouseLeave;\n}\n}\n if (!disableFocusListener){\n childrenProps.onFocus=composeEventHandler(handleFocus,childrenProps.onFocus);\n childrenProps.onBlur=composeEventHandler(handleBlur,childrenProps.onBlur);\n if (!disableInteractive){\n interactiveWrapperListeners.onFocus=handleFocus;\n interactiveWrapperListeners.onBlur=handleBlur;\n}\n}\n const popperOptions=external_React_.useMemo(()=>{\n var _PopperProps$popperOp;\n let tooltipModifiers=[{\n name:'arrow',\n enabled:Boolean(arrowRef),\n options:{\n element:arrowRef,\n padding:4\n}\n}];\n if ((_PopperProps$popperOp=PopperProps.popperOptions) !=null && _PopperProps$popperOp.modifiers){\n tooltipModifiers=tooltipModifiers.concat(PopperProps.popperOptions.modifiers);\n},PopperProps.popperOptions,{\n modifiers:tooltipModifiers\n});\n},[arrowRef,PopperProps]);,props,{\n isRtl,\n arrow,\n disableInteractive,\n placement,\n PopperComponentProp,\n touch:ignoreNonTouchEvents.current\n});\n const classes=Tooltip_useUtilityClasses(ownerState);\n const PopperComponent=(_ref=(_slots$popper=slots.popper) !=null ? _slots$popper :components.Popper) !=null ? _ref :TooltipPopper;\n const TransitionComponent=(_ref2=(_ref3=(_slots$transition=slots.transition) !=null ? _slots$transition :components.Transition) !=null ? _ref3 :TransitionComponentProp) !=null ? _ref2 :Grow_Grow;\n const TooltipComponent=(_ref4=(_slots$tooltip=slots.tooltip) !=null ? _slots$tooltip :components.Tooltip) !=null ? _ref4 :TooltipTooltip;\n const ArrowComponent=(_ref5=(_slots$arrow=slots.arrow) !=null ? _slots$arrow :components.Arrow) !=null ? _ref5 :TooltipArrow;,PopperProps,(_slotProps$popper=slotProps.popper) !=null ? _slotProps$popper :componentsProps.popper,{\n className:(0,clsx.A)(classes.popper,PopperProps==null ? void 0:PopperProps.className,(_ref6=(_slotProps$popper2=slotProps.popper) !=null ? _slotProps$popper2:componentsProps.popper)==null ? void 0:_ref6.className)\n}),ownerState);,TransitionProps,(_slotProps$transition=slotProps.transition) !=null ? _slotProps$transition :componentsProps.transition),ownerState);,(_slotProps$tooltip=slotProps.tooltip) !=null ? _slotProps$tooltip :componentsProps.tooltip,{\n className:(0,clsx.A)(classes.tooltip,(_ref7=(_slotProps$tooltip2=slotProps.tooltip) !=null ? _slotProps$tooltip2:componentsProps.tooltip)==null ? void 0:_ref7.className)\n}),ownerState);,(_slotProps$arrow=slotProps.arrow) !=null ? _slotProps$arrow :componentsProps.arrow,{\n className:(0,clsx.A)(classes.arrow,(_ref8=(_slotProps$arrow2=slotProps.arrow) !=null ? _slotProps$arrow2:componentsProps.arrow)==null ? void 0:_ref8.className)\n}),ownerState);\n return (0,jsx_runtime.jsxs)(external_React_.Fragment,{\n children:[external_React_.cloneElement(children,childrenProps),(0,jsx_runtime.jsx)(PopperComponent,(0,esm_extends.A)({\n as:PopperComponentProp !=null ? PopperComponentProp :material_Popper_Popper,\n placement:placement,\n anchorEl:followCursor ?{\n getBoundingClientRect:()=>({\n top:cursorPosition.y,\n left:cursorPosition.x,\n right:cursorPosition.x,\n bottom:cursorPosition.y,\n width:0,\n height:0\n})\n}:childNode,\n popperRef:popperRef,\n open:childNode ? open:false,\n id:id,\n transition:true\n},interactiveWrapperListeners,popperProps,{\n popperOptions:popperOptions,\n children:({\n TransitionProps:TransitionPropsInner\n})=>(0,jsx_runtime.jsx)(TransitionComponent,(0,esm_extends.A)({\n timeout:theme.transitions.duration.shorter\n},TransitionPropsInner,transitionProps,{\n children:(0,jsx_runtime.jsxs)(TooltipComponent,(0,esm_extends.A)({},tooltipProps,{\n children:[title,arrow ? (0,jsx_runtime.jsx)(ArrowComponent,(0,esm_extends.A)({},tooltipArrowProps,{\n ref:setArrowRef\n})):null]\n}))\n}))\n}))]\n});\n});\n false ? 0 :void 0;\n const Tooltip_Tooltip=(Tooltip);\n// EXTERNAL MODULE:./node_modules/@mui/icons-material/Send.js\nvar Send=__webpack_require__(443);\n// EXTERNAL MODULE:./node_modules/@mui/icons-material/Close.js\nvar Close=__webpack_require__(9781);\n// EXTERNAL MODULE:./node_modules/@mui/icons-material/SmartToy.js\nvar SmartToy=__webpack_require__(5926);\n// EXTERNAL MODULE:./node_modules/@mui/icons-material/ChatBubbleOutline.js\nvar ChatBubbleOutline=__webpack_require__(2255);\n// EXTERNAL MODULE:./node_modules/@mui/icons-material/AttachFile.js\nvar AttachFile=__webpack_require__(530);\n// EXTERNAL MODULE:./node_modules/@mui/icons-material/Person.js\nvar icons_material_Person=__webpack_require__(1432);\n// EXTERNAL MODULE:./node_modules/@mui/icons-material/RecordVoiceOver.js\nvar RecordVoiceOver=__webpack_require__(7246);\n// EXTERNAL MODULE:./node_modules/@mui/icons-material/Email.js\nvar Email=__webpack_require__(1845);\n;// ./node_modules/@reduxjs/toolkit/node_modules/redux/dist/redux.mjs\n// src/utils/formatProdErrorMessage.ts\nfunction formatProdErrorMessage(code){\n return `Minified Redux error #${code};visit https://redux.js.org/Errors?code=${code}for the full message or use the non-minified dev environment for full errors. `;\n}\n\n// src/utils/symbol-observable.ts\nvar $$observable=(()=>typeof Symbol===\"function\" && Symbol.observable || \"@@observable\")();\nvar symbol_observable_default=$$observable;\n\n// src/utils/actionTypes.ts\nvar randomString=()=>Math.random().toString(36).substring(7).split(\"\").join(\".\");\nvar ActionTypes={\n INIT:`@@redux/INIT${randomString()}`,\n REPLACE:`@@redux/REPLACE${randomString()}`,\n PROBE_UNKNOWN_ACTION:()=>`@@redux/PROBE_UNKNOWN_ACTION${randomString()}`\n};\nvar actionTypes_default=ActionTypes;\n\n// src/utils/isPlainObject.ts\nfunction redux_isPlainObject(obj){\n if (typeof obj !==\"object\" || obj===null)\n return false;\n let proto=obj;\n while (Object.getPrototypeOf(proto) !==null){\n proto=Object.getPrototypeOf(proto);\n}\n return Object.getPrototypeOf(obj)===proto || Object.getPrototypeOf(obj)===null;\n}\n\n// src/utils/kindOf.ts\nfunction miniKindOf(val){\n if (val===void 0)\n return \"undefined\";\n if (val===null)\n return \"null\";\n const type=typeof val;\n switch (type){\n case \"boolean\":\n case \"string\":\n case \"number\":\n case \"symbol\":\n case \"function\":{\n return type;\n}\n}\n if (Array.isArray(val))\n return \"array\";\n if (isDate(val))\n return \"date\";\n if (isError(val))\n return \"error\";\n const constructorName=ctorName(val);\n switch (constructorName){\n case \"Symbol\":\n case \"Promise\":\n case \"WeakMap\":\n case \"WeakSet\":\n case \"Map\":\n case \"Set\":\n return constructorName;\n}\n return Object.prototype.toString.call(val).slice(8,-1).toLowerCase().replace(/\\s/g,\"\");\n}\nfunction ctorName(val){\n return typeof val.constructor===\"function\" ? val.constructor.name:null;\n}\nfunction isError(val){\n return val instanceof Error || typeof val.message===\"string\" && val.constructor && typeof val.constructor.stackTraceLimit===\"number\";\n}\nfunction isDate(val){\n if (val instanceof Date)\n return true;\n return typeof val.toDateString===\"function\" && typeof val.getDate===\"function\" && typeof val.setDate===\"function\";\n}\nfunction kindOf(val){\n let typeOfVal=typeof val;\n return typeOfVal;\n}\n\n// src/createStore.ts\nfunction createStore(reducer,preloadedState,enhancer){\n if (typeof reducer !==\"function\"){\n throw new Error(true ? formatProdErrorMessage(2):0);\n}\n if (typeof preloadedState===\"function\" && typeof enhancer===\"function\" || typeof enhancer===\"function\" && typeof arguments[3]===\"function\"){\n throw new Error(true ? formatProdErrorMessage(0):0);\n}\n if (typeof preloadedState===\"function\" && typeof enhancer===\"undefined\"){\n enhancer=preloadedState;\n preloadedState=void 0;\n}\n if (typeof enhancer !==\"undefined\"){\n if (typeof enhancer !==\"function\"){\n throw new Error(true ? formatProdErrorMessage(1):0);\n}\n return enhancer(createStore)(reducer,preloadedState);\n}\n let currentReducer=reducer;\n let currentState=preloadedState;\n let currentListeners=new Map();\n let nextListeners=currentListeners;\n let listenerIdCounter=0;\n let isDispatching=false;\n function ensureCanMutateNextListeners(){\n if (nextListeners===currentListeners){\n nextListeners=new Map();\n currentListeners.forEach((listener,key)=>{\n nextListeners.set(key,listener);\n});\n}\n}\n function getState(){\n if (isDispatching){\n throw new Error(true ? formatProdErrorMessage(3):0);\n}\n return currentState;\n}\n function subscribe(listener){\n if (typeof listener !==\"function\"){\n throw new Error(true ? formatProdErrorMessage(4):0);\n}\n if (isDispatching){\n throw new Error(true ? formatProdErrorMessage(5):0);\n}\n let isSubscribed=true;\n ensureCanMutateNextListeners();\n const listenerId=listenerIdCounter++;\n nextListeners.set(listenerId,listener);\n return function unsubscribe(){\n if (!isSubscribed){\n return;\n}\n if (isDispatching){\n throw new Error(true ? formatProdErrorMessage(6):0);\n}\n isSubscribed=false;\n ensureCanMutateNextListeners();\n nextListeners.delete(listenerId);\n currentListeners=null;\n};\n}\n function dispatch(action){\n if (!redux_isPlainObject(action)){\n throw new Error(true ? formatProdErrorMessage(7):0);\n}\n if (typeof action.type===\"undefined\"){\n throw new Error(true ? formatProdErrorMessage(8):0);\n}\n if (typeof action.type !==\"string\"){\n throw new Error(true ? formatProdErrorMessage(17):0);\n}\n if (isDispatching){\n throw new Error(true ? formatProdErrorMessage(9):0);\n}\n try{\n isDispatching=true;\n currentState=currentReducer(currentState,action);\n}finally{\n isDispatching=false;\n}\n const listeners=currentListeners=nextListeners;\n listeners.forEach((listener)=>{\n listener();\n});\n return action;\n}\n function replaceReducer(nextReducer){\n if (typeof nextReducer !==\"function\"){\n throw new Error(true ? formatProdErrorMessage(10):0);\n}\n currentReducer=nextReducer;\n dispatch({\n type:actionTypes_default.REPLACE\n});\n}\n function observable(){\n const outerSubscribe=subscribe;\n return{\n \n subscribe(observer){\n if (typeof observer !==\"object\" || observer===null){\n throw new Error(true ? formatProdErrorMessage(11):0);\n}\n function observeState(){\n const observerAsObserver=observer;\n if (observerAsObserver.next){\n observerAsObserver.next(getState());\n}\n}\n observeState();\n const unsubscribe=outerSubscribe(observeState);\n return{\n unsubscribe\n};\n},\n [symbol_observable_default](){\n return this;\n}\n};\n}\n dispatch({\n type:actionTypes_default.INIT\n});\n const store={\n dispatch,\n subscribe,\n getState,\n replaceReducer,\n [symbol_observable_default]:observable\n};\n return store;\n}\nfunction legacy_createStore(reducer,preloadedState,enhancer){\n return createStore(reducer,preloadedState,enhancer);\n}\n\n// src/utils/warning.ts\nfunction warning(message){\n if (typeof console !==\"undefined\" && typeof console.error===\"function\"){\n console.error(message);\n}\n try{\n throw new Error(message);\n}catch (e){\n}\n}\n\n// src/combineReducers.ts\nfunction getUnexpectedStateShapeWarningMessage(inputState,reducers,action,unexpectedKeyCache){\n const reducerKeys=Object.keys(reducers);\n const argumentName=action && action.type===actionTypes_default.INIT ? \"preloadedState argument passed to createStore\" :\"previous state received by the reducer\";\n if (reducerKeys.length===0){\n return \"Store does not have a valid reducer. Make sure the argument passed to combineReducers is an object whose values are reducers.\";\n}\n if (!redux_isPlainObject(inputState)){\n return `The ${argumentName}has unexpected type of \"${kindOf(inputState)}\". Expected argument to be an object with the following keys:\"${reducerKeys.join('\",\"')}\"`;\n}\n const unexpectedKeys=Object.keys(inputState).filter((key)=>!reducers.hasOwnProperty(key) && !unexpectedKeyCache[key]);\n unexpectedKeys.forEach((key)=>{\n unexpectedKeyCache[key]=true;\n});\n if (action && action.type===actionTypes_default.REPLACE)\n return;\n if (unexpectedKeys.length>0){\n return `Unexpected ${unexpectedKeys.length>1 ? \"keys\":\"key\"}\"${unexpectedKeys.join('\",\"')}\" found in ${argumentName}. Expected to find one of the known reducer keys instead:\"${reducerKeys.join('\",\"')}\". Unexpected keys will be ignored.`;\n}\n}\nfunction assertReducerShape(reducers){\n Object.keys(reducers).forEach((key)=>{\n const reducer=reducers[key];\n const initialState=reducer(void 0,{\n type:actionTypes_default.INIT\n});\n if (typeof initialState===\"undefined\"){\n throw new Error(true ? formatProdErrorMessage(12):0);\n}\n if (typeof reducer(void 0,{\n type:actionTypes_default.PROBE_UNKNOWN_ACTION()\n})===\"undefined\"){\n throw new Error(true ? formatProdErrorMessage(13):0);\n}\n});\n}\nfunction combineReducers(reducers){\n const reducerKeys=Object.keys(reducers);;\n for (let i=0;i < reducerKeys.length;i++){\n const key=reducerKeys[i];\n if (typeof reducers[key]===\"function\"){\n finalReducers[key]=reducers[key];\n}\n}\n const finalReducerKeys=Object.keys(finalReducers);\n let unexpectedKeyCache;\n let shapeAssertionError;\n try{\n assertReducerShape(finalReducers);\n}catch (e){\n shapeAssertionError=e;\n},action){\n if (shapeAssertionError){\n throw shapeAssertionError;\n}\n let hasChanged=false;;\n for (let i=0;i < finalReducerKeys.length;i++){\n const key=finalReducerKeys[i];\n const reducer=finalReducers[key];\n const previousStateForKey=state[key];\n const nextStateForKey=reducer(previousStateForKey,action);\n if (typeof nextStateForKey===\"undefined\"){\n const actionType=action && action.type;\n throw new Error(true ? formatProdErrorMessage(14):0);\n}\n nextState[key]=nextStateForKey;\n hasChanged=hasChanged || nextStateForKey !==previousStateForKey;\n}\n hasChanged=hasChanged || finalReducerKeys.length !==Object.keys(state).length;\n return hasChanged ? nextState:state;\n};\n}\n\n// src/bindActionCreators.ts\nfunction bindActionCreator(actionCreator,dispatch){\n return function(...args){\n return dispatch(actionCreator.apply(this,args));\n};\n}\nfunction bindActionCreators(actionCreators,dispatch){\n if (typeof actionCreators===\"function\"){\n return bindActionCreator(actionCreators,dispatch);\n}\n if (typeof actionCreators !==\"object\" || actionCreators===null){\n throw new Error(true ? formatProdErrorMessage(16):0);\n};\n for (const key in actionCreators){\n const actionCreator=actionCreators[key];\n if (typeof actionCreator===\"function\"){\n boundActionCreators[key]=bindActionCreator(actionCreator,dispatch);\n}\n}\n return boundActionCreators;\n}\n\n// src/compose.ts\nfunction compose(...funcs){\n if (funcs.length===0){\n return (arg)=>arg;\n}\n if (funcs.length===1){\n return funcs[0];\n}\n return funcs.reduce((a,b)=>(...args)=>a(b(...args)));\n}\n\n// src/applyMiddleware.ts\nfunction applyMiddleware(...middlewares){\n return (createStore2)=>(reducer,preloadedState)=>{\n const store=createStore2(reducer,preloadedState);\n let dispatch=()=>{\n throw new Error(true ? formatProdErrorMessage(15):0);\n};\n const middlewareAPI={\n getState:store.getState,\n dispatch:(action,...args)=>dispatch(action,...args)\n};\n const chain=middlewares.map((middleware)=>middleware(middlewareAPI));\n dispatch=compose(...chain)(store.dispatch);\n return{\n ...store,\n dispatch\n};\n};\n}\n\n// src/utils/isAction.ts\nfunction redux_isAction(action){\n return redux_isPlainObject(action) && \"type\" in action && typeof action.type===\"string\";\n}\n\n//# sourceMappingURL=redux.mjs.map\n;// ./node_modules/@reduxjs/toolkit/node_modules/redux-thunk/dist/redux-thunk.mjs\n// src/index.ts\nfunction createThunkMiddleware(extraArgument){\n const middleware=({dispatch,getState})=>(next)=>(action)=>{\n if (typeof action===\"function\"){\n return action(dispatch,getState,extraArgument);\n}\n return next(action);\n};\n return middleware;\n}\nvar redux_thunk_thunk=createThunkMiddleware();\nvar withExtraArgument=createThunkMiddleware;\n\n\n;// ./node_modules/immer/dist/immer.mjs\n// src/utils/env.ts\nvar NOTHING=Symbol.for(\"immer-nothing\");\nvar DRAFTABLE=Symbol.for(\"immer-draftable\");\nvar DRAFT_STATE=Symbol.for(\"immer-state\");\n\n// src/utils/errors.ts\nvar errors=false ? 0 :[];\nfunction die(error,...args){\n if (false) // removed by dead control flow\n{}\n throw new Error(\n `[Immer] minified error nr:${error}. Full error at:https://bit.ly/3cXEKWf`\n);\n}\n\n// src/utils/common.ts\nvar getPrototypeOf=Object.getPrototypeOf;\nfunction immer_isDraft(value){\n return !!value && !!value[DRAFT_STATE];\n}\nfunction isDraftable(value){\n if (!value)\n return false;\n return immer_isPlainObject(value) || Array.isArray(value) || !!value[DRAFTABLE] || !!value.constructor?.[DRAFTABLE] || isMap(value) || isSet(value);\n}\nvar objectCtorString=Object.prototype.constructor.toString();\nfunction immer_isPlainObject(value){\n if (!value || typeof value !==\"object\")\n return false;\n const proto=getPrototypeOf(value);\n if (proto===null){\n return true;\n}\n const Ctor=Object.hasOwnProperty.call(proto,\"constructor\") && proto.constructor;\n if (Ctor===Object)\n return true;\n return typeof Ctor==\"function\" && Function.toString.call(Ctor)===objectCtorString;\n}\nfunction original(value){\n if (!immer_isDraft(value))\n die(15,value);\n return value[DRAFT_STATE].base_;\n}\nfunction each(obj,iter){\n if (getArchtype(obj)===0){\n Reflect.ownKeys(obj).forEach((key)=>{\n iter(key,obj[key],obj);\n});\n}else{\n obj.forEach((entry,index)=>iter(index,entry,obj));\n}\n}\nfunction getArchtype(thing){\n const state=thing[DRAFT_STATE];\n return state ? state.type_:Array.isArray(thing) ? 1:isMap(thing) ? 2:isSet(thing) ? 3:0;\n}\nfunction has(thing,prop){\n return getArchtype(thing)===2 ? thing.has(prop):Object.prototype.hasOwnProperty.call(thing,prop);\n}\nfunction get(thing,prop){\n return getArchtype(thing)===2 ? thing.get(prop):thing[prop];\n}\nfunction set(thing,propOrOldValue,value){\n const t=getArchtype(thing);\n if (t===2)\n thing.set(propOrOldValue,value);\n else if (t===3){\n thing.add(value);\n}else\n thing[propOrOldValue]=value;\n}\nfunction is(x,y){\n if (x===y){\n return x !==0 || 1 / x===1 / y;\n}else{\n return x !==x && y !==y;\n}\n}\nfunction isMap(target){\n return target instanceof Map;\n}\nfunction isSet(target){\n return target instanceof Set;\n}\nfunction latest(state){\n return state.copy_ || state.base_;\n}\nfunction shallowCopy(base,strict){\n if (isMap(base)){\n return new Map(base);\n}\n if (isSet(base)){\n return new Set(base);\n}\n if (Array.isArray(base))\n return Array.prototype.slice.call(base);\n const isPlain=immer_isPlainObject(base);\n if (strict===true || strict===\"class_only\" && !isPlain){\n const descriptors=Object.getOwnPropertyDescriptors(base);\n delete descriptors[DRAFT_STATE];\n let keys=Reflect.ownKeys(descriptors);\n for (let i=0;i < keys.length;i++){\n const key=keys[i];\n const desc=descriptors[key];\n if (desc.writable===false){\n desc.writable=true;\n desc.configurable=true;\n}\n if (desc.get || desc.set)\n descriptors[key]={\n configurable:true,\n writable:true,\n // could live with !!desc.set as well here...\n enumerable:desc.enumerable,\n value:base[key]\n};\n}\n return Object.create(getPrototypeOf(base),descriptors);\n}else{\n const proto=getPrototypeOf(base);\n if (proto !==null && isPlain){\n return{...base};\n}\n const obj=Object.create(proto);\n return Object.assign(obj,base);\n}\n}\nfunction freeze(obj,deep=false){\n if (isFrozen(obj) || immer_isDraft(obj) || !isDraftable(obj))\n return obj;\n if (getArchtype(obj)>1){\n obj.set=obj.add=obj.clear=obj.delete=dontMutateFrozenCollections;\n}\n Object.freeze(obj);\n if (deep)\n Object.entries(obj).forEach(([key,value])=>freeze(value,true));\n return obj;\n}\nfunction dontMutateFrozenCollections(){\n die(2);\n}\nfunction isFrozen(obj){\n return Object.isFrozen(obj);\n};\nfunction getPlugin(pluginKey){\n const plugin=plugins[pluginKey];\n if (!plugin){\n die(0,pluginKey);\n}\n return plugin;\n}\nfunction loadPlugin(pluginKey,implementation){\n if (!plugins[pluginKey])\n plugins[pluginKey]=implementation;\n}\n\n// src/core/scope.ts\nvar currentScope;\nfunction getCurrentScope(){\n return currentScope;\n}\nfunction createScope(parent_,immer_){\n return{\n drafts_:[],\n parent_,\n immer_,\n // Whenever the modified draft contains a draft from another scope,we\n // need to prevent auto-freezing so the unowned draft can be finalized.\n canAutoFreeze_:true,\n unfinalizedDrafts_:0\n};\n}\nfunction usePatchesInScope(scope,patchListener){\n if (patchListener){\n getPlugin(\"Patches\");\n scope.patches_=[];\n scope.inversePatches_=[];\n scope.patchListener_=patchListener;\n}\n}\nfunction revokeScope(scope){\n leaveScope(scope);\n scope.drafts_.forEach(revokeDraft);\n scope.drafts_=null;\n}\nfunction leaveScope(scope){\n if (scope===currentScope){\n currentScope=scope.parent_;\n}\n}\nfunction enterScope(immer2){\n return currentScope=createScope(currentScope,immer2);\n}\nfunction revokeDraft(draft){\n const state=draft[DRAFT_STATE];\n if (state.type_===0 || state.type_===1)\n state.revoke_();\n else\n state.revoked_=true;\n}\n\n// src/core/finalize.ts\nfunction processResult(result,scope){\n scope.unfinalizedDrafts_=scope.drafts_.length;\n const baseDraft=scope.drafts_[0];\n const isReplaced=result !==void 0 && result !==baseDraft;\n if (isReplaced){\n if (baseDraft[DRAFT_STATE].modified_){\n revokeScope(scope);\n die(4);\n}\n if (isDraftable(result)){\n result=finalize(scope,result);\n if (!scope.parent_)\n maybeFreeze(scope,result);\n}\n if (scope.patches_){\n getPlugin(\"Patches\").generateReplacementPatches_(\n baseDraft[DRAFT_STATE].base_,\n result,\n scope.patches_,\n scope.inversePatches_\n);\n}\n}else{\n result=finalize(scope,baseDraft,[]);\n}\n revokeScope(scope);\n if (scope.patches_){\n scope.patchListener_(scope.patches_,scope.inversePatches_);\n}\n return result !==NOTHING ? result:void 0;\n}\nfunction finalize(rootScope,value,path){\n if (isFrozen(value))\n return value;\n const state=value[DRAFT_STATE];\n if (!state){\n each(\n value,\n (key,childValue)=>finalizeProperty(rootScope,state,value,key,childValue,path)\n);\n return value;\n}\n if (state.scope_ !==rootScope)\n return value;\n if (!state.modified_){\n maybeFreeze(rootScope,state.base_,true);\n return state.base_;\n}\n if (!state.finalized_){\n state.finalized_=true;\n state.scope_.unfinalizedDrafts_--;\n const result=state.copy_;\n let resultEach=result;\n let isSet2=false;\n if (state.type_===3){\n resultEach=new Set(result);\n result.clear();\n isSet2=true;\n}\n each(\n resultEach,\n (key,childValue)=>finalizeProperty(rootScope,state,result,key,childValue,path,isSet2)\n);\n maybeFreeze(rootScope,result,false);\n if (path && rootScope.patches_){\n getPlugin(\"Patches\").generatePatches_(\n state,\n path,\n rootScope.patches_,\n rootScope.inversePatches_\n);\n}\n}\n return state.copy_;\n}\nfunction finalizeProperty(rootScope,parentState,targetObject,prop,childValue,rootPath,targetIsSet){\n if (false)\n // removed by dead control flow\n{}\n if (immer_isDraft(childValue)){\n const path=rootPath && parentState && parentState.type_ !==3 && // Set objects are atomic since they have no keys.\n !has(parentState.assigned_,prop) ? rootPath.concat(prop) :void 0;\n const res=finalize(rootScope,childValue,path);\n set(targetObject,prop,res);\n if (immer_isDraft(res)){\n rootScope.canAutoFreeze_=false;\n}else\n return;\n}else if (targetIsSet){\n targetObject.add(childValue);\n}\n if (isDraftable(childValue) && !isFrozen(childValue)){\n if (!rootScope.immer_.autoFreeze_ && rootScope.unfinalizedDrafts_ < 1){\n return;\n}\n finalize(rootScope,childValue);\n if ((!parentState || !parentState.scope_.parent_) && typeof prop !==\"symbol\" && Object.prototype.propertyIsEnumerable.call(targetObject,prop))\n maybeFreeze(rootScope,childValue);\n}\n}\nfunction maybeFreeze(scope,value,deep=false){\n if (!scope.parent_ && scope.immer_.autoFreeze_ && scope.canAutoFreeze_){\n freeze(value,deep);\n}\n}\n\n// src/core/proxy.ts\nfunction createProxyProxy(base,parent){\n const isArray=Array.isArray(base);\n const state={\n type_:isArray ? 1 :0,\n // Track which produce call this is associated with.\n scope_:parent ? parent.scope_ :getCurrentScope(),\n // True for both shallow and deep changes.\n modified_:false,\n // Used during finalization.\n finalized_:false,\n // Track which properties have been assigned (true) or deleted (false).\n assigned_:{},\n // The parent draft state.\n parent_:parent,\n // The base state.\n base_:base,\n // The base proxy.\n draft_:null,\n // set below\n // The base copy with any updated values.\n copy_:null,\n // Called by the `produce` function.\n revoke_:null,\n isManual_:false\n};\n let target=state;\n let traps=objectTraps;\n if (isArray){\n target=[state];\n traps=arrayTraps;\n}\n const{revoke,proxy}=Proxy.revocable(target,traps);\n state.draft_=proxy;\n state.revoke_=revoke;\n return proxy;\n}\nvar objectTraps={\n get(state,prop){\n if (prop===DRAFT_STATE)\n return state;\n const source=latest(state);\n if (!has(source,prop)){\n return readPropFromProto(state,source,prop);\n}\n const value=source[prop];\n if (state.finalized_ || !isDraftable(value)){\n return value;\n}\n if (value===peek(state.base_,prop)){\n prepareCopy(state);\n return state.copy_[prop]=createProxy(value,state);\n}\n return value;\n},\n has(state,prop){\n return prop in latest(state);\n},\n ownKeys(state){\n return Reflect.ownKeys(latest(state));\n},\n set(state,prop,value){\n const desc=getDescriptorFromProto(latest(state),prop);\n if (desc?.set){\n desc.set.call(state.draft_,value);\n return true;\n}\n if (!state.modified_){\n const current2=peek(latest(state),prop);\n const currentState=current2?.[DRAFT_STATE];\n if (currentState && currentState.base_===value){\n state.copy_[prop]=value;\n state.assigned_[prop]=false;\n return true;\n}\n if (is(value,current2) && (value !==void 0 || has(state.base_,prop)))\n return true;\n prepareCopy(state);\n markChanged(state);\n}\n if (state.copy_[prop]===value && // special case:handle new props with value 'undefined'\n (value !==void 0 || prop in state.copy_) || // special case:NaN\n Number.isNaN(value) && Number.isNaN(state.copy_[prop]))\n return true;\n state.copy_[prop]=value;\n state.assigned_[prop]=true;\n return true;\n},\n deleteProperty(state,prop){\n if (peek(state.base_,prop) !==void 0 || prop in state.base_){\n state.assigned_[prop]=false;\n prepareCopy(state);\n markChanged(state);\n}else{\n delete state.assigned_[prop];\n}\n if (state.copy_){\n delete state.copy_[prop];\n}\n return true;\n},\n // Note:We never coerce `desc.value` into an Immer draft,because we can't make\n // the same guarantee in ES5 mode.\n getOwnPropertyDescriptor(state,prop){\n const owner=latest(state);\n const desc=Reflect.getOwnPropertyDescriptor(owner,prop);\n if (!desc)\n return desc;\n return{\n writable:true,\n configurable:state.type_ !==1 || prop !==\"length\",\n enumerable:desc.enumerable,\n value:owner[prop]\n};\n},\n defineProperty(){\n die(11);\n},\n getPrototypeOf(state){\n return getPrototypeOf(state.base_);\n},\n setPrototypeOf(){\n die(12);\n}\n};;\neach(objectTraps,(key,fn)=>{\n arrayTraps[key]=function(){\n arguments[0]=arguments[0][0];\n return fn.apply(this,arguments);\n};\n});\narrayTraps.deleteProperty=function(state,prop){\n if (false)\n // removed by dead control flow\n{}\n return arrayTraps.set.call(this,state,prop,void 0);\n};\narrayTraps.set=function(state,prop,value){\n if (false)\n // removed by dead control flow\n{}\n return objectTraps.set.call(this,state[0],prop,value,state[0]);\n};\nfunction peek(draft,prop){\n const state=draft[DRAFT_STATE];\n const source=state ? latest(state):draft;\n return source[prop];\n}\nfunction readPropFromProto(state,source,prop){\n const desc=getDescriptorFromProto(source,prop);\n return desc ? `value` in desc ? desc.value:(\n // This is a very special case,if the prop is a getter defined by the\n // prototype,we should invoke it with the draft as context!\n desc.get?.call(state.draft_)\n):void 0;\n}\nfunction getDescriptorFromProto(source,prop){\n if (!(prop in source))\n return void 0;\n let proto=getPrototypeOf(source);\n while (proto){\n const desc=Object.getOwnPropertyDescriptor(proto,prop);\n if (desc)\n return desc;\n proto=getPrototypeOf(proto);\n}\n return void 0;\n}\nfunction markChanged(state){\n if (!state.modified_){\n state.modified_=true;\n if (state.parent_){\n markChanged(state.parent_);\n}\n}\n}\nfunction prepareCopy(state){\n if (!state.copy_){\n state.copy_=shallowCopy(\n state.base_,\n state.scope_.immer_.useStrictShallowCopy_\n);\n}\n}\n\n// src/core/immerClass.ts\nvar Immer2=class{\n constructor(config){\n this.autoFreeze_=true;\n this.useStrictShallowCopy_=false;\n \n this.produce=(base,recipe,patchListener)=>{\n if (typeof base===\"function\" && typeof recipe !==\"function\"){\n const defaultBase=recipe;\n recipe=base;\n const self=this;\n return function curriedProduce(base2=defaultBase,...args){\n return self.produce(base2,(draft)=>recipe.call(this,draft,...args));\n};\n}\n if (typeof recipe !==\"function\")\n die(6);\n if (patchListener !==void 0 && typeof patchListener !==\"function\")\n die(7);\n let result;\n if (isDraftable(base)){\n const scope=enterScope(this);\n const proxy=createProxy(base,void 0);\n let hasError=true;\n try{\n result=recipe(proxy);\n hasError=false;\n}finally{\n if (hasError)\n revokeScope(scope);\n else\n leaveScope(scope);\n}\n usePatchesInScope(scope,patchListener);\n return processResult(result,scope);\n}else if (!base || typeof base !==\"object\"){\n result=recipe(base);\n if (result===void 0)\n result=base;\n if (result===NOTHING)\n result=void 0;\n if (this.autoFreeze_)\n freeze(result,true);\n if (patchListener){\n const p=[];\n const ip=[];\n getPlugin(\"Patches\").generateReplacementPatches_(base,result,p,ip);\n patchListener(p,ip);\n}\n return result;\n}else\n die(1,base);\n};\n this.produceWithPatches=(base,recipe)=>{\n if (typeof base===\"function\"){\n return (state,...args)=>this.produceWithPatches(state,(draft)=>base(draft,...args));\n}\n let patches,inversePatches;\n const result=this.produce(base,recipe,(p,ip)=>{\n patches=p;\n inversePatches=ip;\n});\n return [result,patches,inversePatches];\n};\n if (typeof config?.autoFreeze===\"boolean\")\n this.setAutoFreeze(config.autoFreeze);\n if (typeof config?.useStrictShallowCopy===\"boolean\")\n this.setUseStrictShallowCopy(config.useStrictShallowCopy);\n}\n createDraft(base){\n if (!isDraftable(base))\n die(8);\n if (immer_isDraft(base))\n base=immer_current(base);\n const scope=enterScope(this);\n const proxy=createProxy(base,void 0);\n proxy[DRAFT_STATE].isManual_=true;\n leaveScope(scope);\n return proxy;\n}\n finishDraft(draft,patchListener){\n const state=draft && draft[DRAFT_STATE];\n if (!state || !state.isManual_)\n die(9);\n const{scope_:scope}=state;\n usePatchesInScope(scope,patchListener);\n return processResult(void 0,scope);\n}\n \n setAutoFreeze(value){\n this.autoFreeze_=value;\n}\n \n setUseStrictShallowCopy(value){\n this.useStrictShallowCopy_=value;\n}\n applyPatches(base,patches){\n let i;\n for (i=patches.length - 1;i>=0;i--){\n const patch=patches[i];\n if (patch.path.length===0 && patch.op===\"replace\"){\n base=patch.value;\n break;\n}\n}\n if (i>-1){\n patches=patches.slice(i+1);\n}\n const applyPatchesImpl=getPlugin(\"Patches\").applyPatches_;\n if (immer_isDraft(base)){\n return applyPatchesImpl(base,patches);\n}\n return this.produce(\n base,\n (draft)=>applyPatchesImpl(draft,patches)\n);\n}\n};\nfunction createProxy(value,parent){\n const draft=isMap(value) ? getPlugin(\"MapSet\").proxyMap_(value,parent):isSet(value) ? getPlugin(\"MapSet\").proxySet_(value,parent):createProxyProxy(value,parent);\n const scope=parent ? parent.scope_:getCurrentScope();\n scope.drafts_.push(draft);\n return draft;\n}\n\n// src/core/current.ts\nfunction immer_current(value){\n if (!immer_isDraft(value))\n die(10,value);\n return currentImpl(value);\n}\nfunction currentImpl(value){\n if (!isDraftable(value) || isFrozen(value))\n return value;\n const state=value[DRAFT_STATE];\n let copy;\n if (state){\n if (!state.modified_)\n return state.base_;\n state.finalized_=true;\n copy=shallowCopy(value,state.scope_.immer_.useStrictShallowCopy_);\n}else{\n copy=shallowCopy(value,true);\n}\n each(copy,(key,childValue)=>{\n set(copy,key,currentImpl(childValue));\n});\n if (state){\n state.finalized_=false;\n}\n return copy;\n}\n\n// src/plugins/patches.ts\nfunction enablePatches(){\n const errorOffset=16;\n const REPLACE=\"replace\";\n const ADD=\"add\";\n const REMOVE=\"remove\";\n function generatePatches_(state,basePath,patches,inversePatches){\n switch (state.type_){\n case 0:\n case 2:\n return generatePatchesFromAssigned(\n state,\n basePath,\n patches,\n inversePatches\n);\n case 1:\n return generateArrayPatches(state,basePath,patches,inversePatches);\n case 3:\n return generateSetPatches(\n state,\n basePath,\n patches,\n inversePatches\n);\n}\n}\n function generateArrayPatches(state,basePath,patches,inversePatches){\n let{base_,assigned_}=state;\n let copy_=state.copy_;\n if (copy_.length < base_.length){\n;\n [base_,copy_]=[copy_,base_];\n [patches,inversePatches]=[inversePatches,patches];\n}\n for (let i=0;i < base_.length;i++){\n if (assigned_[i] && copy_[i] !==base_[i]){\n const path=basePath.concat([i]);\n patches.push({\n op:REPLACE,\n path,\n // Need to maybe clone it,as it can in fact be the original value\n // due to the base/copy inversion at the start of this function\n value:clonePatchValueIfNeeded(copy_[i])\n});\n inversePatches.push({\n op:REPLACE,\n path,\n value:clonePatchValueIfNeeded(base_[i])\n});\n}\n}\n for (let i=base_.length;i < copy_.length;i++){\n const path=basePath.concat([i]);\n patches.push({\n op:ADD,\n path,\n // Need to maybe clone it,as it can in fact be the original value\n // due to the base/copy inversion at the start of this function\n value:clonePatchValueIfNeeded(copy_[i])\n});\n}\n for (let i=copy_.length - 1;base_.length <=i;--i){\n const path=basePath.concat([i]);\n inversePatches.push({\n op:REMOVE,\n path\n});\n}\n}\n function generatePatchesFromAssigned(state,basePath,patches,inversePatches){\n const{base_,copy_}=state;\n each(state.assigned_,(key,assignedValue)=>{\n const origValue=get(base_,key);\n const value=get(copy_,key);\n const op=!assignedValue ? REMOVE :has(base_,key) ? REPLACE :ADD;\n if (origValue===value && op===REPLACE)\n return;\n const path=basePath.concat(key);\n patches.push(op===REMOVE ?{op,path}:{op,path,value});\n inversePatches.push(\n op===ADD ?{op:REMOVE,path}:op===REMOVE ?{op:ADD,path,value:clonePatchValueIfNeeded(origValue)}:{op:REPLACE,path,value:clonePatchValueIfNeeded(origValue)}\n);\n});\n}\n function generateSetPatches(state,basePath,patches,inversePatches){\n let{base_,copy_}=state;\n let i=0;\n base_.forEach((value)=>{\n if (!copy_.has(value)){\n const path=basePath.concat([i]);\n patches.push({\n op:REMOVE,\n path,\n value\n});\n inversePatches.unshift({\n op:ADD,\n path,\n value\n});\n}\n i++;\n});\n i=0;\n copy_.forEach((value)=>{\n if (!base_.has(value)){\n const path=basePath.concat([i]);\n patches.push({\n op:ADD,\n path,\n value\n});\n inversePatches.unshift({\n op:REMOVE,\n path,\n value\n});\n}\n i++;\n});\n}\n function generateReplacementPatches_(baseValue,replacement,patches,inversePatches){\n patches.push({\n op:REPLACE,\n path:[],\n value:replacement===NOTHING ? void 0:replacement\n});\n inversePatches.push({\n op:REPLACE,\n path:[],\n value:baseValue\n});\n}\n function applyPatches_(draft,patches){\n patches.forEach((patch)=>{\n const{path,op}=patch;\n let base=draft;\n for (let i=0;i < path.length - 1;i++){\n const parentType=getArchtype(base);\n let p=path[i];\n if (typeof p !==\"string\" && typeof p !==\"number\"){\n p=\"\"+p;\n}\n if ((parentType===0 || parentType===1) && (p===\"__proto__\" || p===\"constructor\"))\n die(errorOffset+3);\n if (typeof base===\"function\" && p===\"prototype\")\n die(errorOffset+3);\n base=get(base,p);\n if (typeof base !==\"object\")\n die(errorOffset+2,path.join(\"/\"));\n}\n const type=getArchtype(base);\n const value=deepClonePatchValue(patch.value);\n const key=path[path.length - 1];\n switch (op){\n case REPLACE:\n switch (type){\n case 2:\n return base.set(key,value);\n case 3:\n die(errorOffset);\n default:\n return base[key]=value;\n}\n case ADD:\n switch (type){\n case 1:\n return key===\"-\" ? base.push(value):base.splice(key,0,value);\n case 2:\n return base.set(key,value);\n case 3:\n return base.add(value);\n default:\n return base[key]=value;\n}\n case REMOVE:\n switch (type){\n case 1:\n return base.splice(key,1);\n case 2:\n return base.delete(key);\n case 3:\n return base.delete(patch.value);\n default:\n return delete base[key];\n}\n default:\n die(errorOffset+1,op);\n}\n});\n return draft;\n}\n function deepClonePatchValue(obj){\n if (!isDraftable(obj))\n return obj;\n if (Array.isArray(obj))\n return obj.map(deepClonePatchValue);\n if (isMap(obj))\n return new Map(\n Array.from(obj.entries()).map(([k,v])=>[k,deepClonePatchValue(v)])\n);\n if (isSet(obj))\n return new Set(Array.from(obj).map(deepClonePatchValue));\n const cloned=Object.create(getPrototypeOf(obj));\n for (const key in obj)\n cloned[key]=deepClonePatchValue(obj[key]);\n if (has(obj,DRAFTABLE))\n cloned[DRAFTABLE]=obj[DRAFTABLE];\n return cloned;\n}\n function clonePatchValueIfNeeded(obj){\n if (immer_isDraft(obj)){\n return deepClonePatchValue(obj);\n}else\n return obj;\n}\n loadPlugin(\"Patches\",{\n applyPatches_,\n generatePatches_,\n generateReplacementPatches_\n});\n}\n\n// src/plugins/mapset.ts\nfunction enableMapSet(){\n class DraftMap extends Map{\n constructor(target,parent){\n super();\n this[DRAFT_STATE]={\n type_:2,\n parent_:parent,\n scope_:parent ? parent.scope_:getCurrentScope(),\n modified_:false,\n finalized_:false,\n copy_:void 0,\n assigned_:void 0,\n base_:target,\n draft_:this,\n isManual_:false,\n revoked_:false\n};\n}\n get size(){\n return latest(this[DRAFT_STATE]).size;\n}\n has(key){\n return latest(this[DRAFT_STATE]).has(key);\n}\n set(key,value){\n const state=this[DRAFT_STATE];\n assertUnrevoked(state);\n if (!latest(state).has(key) || latest(state).get(key) !==value){\n prepareMapCopy(state);\n markChanged(state);\n state.assigned_.set(key,true);\n state.copy_.set(key,value);\n state.assigned_.set(key,true);\n}\n return this;\n}\n delete(key){\n if (!this.has(key)){\n return false;\n}\n const state=this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareMapCopy(state);\n markChanged(state);\n if (state.base_.has(key)){\n state.assigned_.set(key,false);\n}else{\n state.assigned_.delete(key);\n}\n state.copy_.delete(key);\n return true;\n}\n clear(){\n const state=this[DRAFT_STATE];\n assertUnrevoked(state);\n if (latest(state).size){\n prepareMapCopy(state);\n markChanged(state);\n state.assigned_=new Map();\n each(state.base_,(key)=>{\n state.assigned_.set(key,false);\n});\n state.copy_.clear();\n}\n}\n forEach(cb,thisArg){\n const state=this[DRAFT_STATE];\n latest(state).forEach((_value,key,_map)=>{\n cb.call(thisArg,this.get(key),key,this);\n});\n}\n get(key){\n const state=this[DRAFT_STATE];\n assertUnrevoked(state);\n const value=latest(state).get(key);\n if (state.finalized_ || !isDraftable(value)){\n return value;\n}\n if (value !==state.base_.get(key)){\n return value;\n}\n const draft=createProxy(value,state);\n prepareMapCopy(state);\n state.copy_.set(key,draft);\n return draft;\n}\n keys(){\n return latest(this[DRAFT_STATE]).keys();\n}\n values(){\n const iterator=this.keys();\n return{\n [Symbol.iterator]:()=>this.values(),\n next:()=>{\n const r=iterator.next();\n if (r.done)\n return r;\n const value=this.get(r.value);\n return{\n done:false,\n value\n};\n}\n};\n}\n entries(){\n const iterator=this.keys();\n return{\n [Symbol.iterator]:()=>this.entries(),\n next:()=>{\n const r=iterator.next();\n if (r.done)\n return r;\n const value=this.get(r.value);\n return{\n done:false,\n value:[r.value,value]\n};\n}\n};\n}\n [(DRAFT_STATE,Symbol.iterator)](){\n return this.entries();\n}\n}\n function proxyMap_(target,parent){\n return new DraftMap(target,parent);\n}\n function prepareMapCopy(state){\n if (!state.copy_){\n state.assigned_=new Map();\n state.copy_=new Map(state.base_);\n}\n}\n class DraftSet extends Set{\n constructor(target,parent){\n super();\n this[DRAFT_STATE]={\n type_:3,\n parent_:parent,\n scope_:parent ? parent.scope_:getCurrentScope(),\n modified_:false,\n finalized_:false,\n copy_:void 0,\n base_:target,\n draft_:this,\n drafts_:new Map(),\n revoked_:false,\n isManual_:false\n};\n}\n get size(){\n return latest(this[DRAFT_STATE]).size;\n}\n has(value){\n const state=this[DRAFT_STATE];\n assertUnrevoked(state);\n if (!state.copy_){\n return state.base_.has(value);\n}\n if (state.copy_.has(value))\n return true;\n if (state.drafts_.has(value) && state.copy_.has(state.drafts_.get(value)))\n return true;\n return false;\n}\n add(value){\n const state=this[DRAFT_STATE];\n assertUnrevoked(state);\n if (!this.has(value)){\n prepareSetCopy(state);\n markChanged(state);\n state.copy_.add(value);\n}\n return this;\n}\n delete(value){\n if (!this.has(value)){\n return false;\n}\n const state=this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareSetCopy(state);\n markChanged(state);\n return state.copy_.delete(value) || (state.drafts_.has(value) ? state.copy_.delete(state.drafts_.get(value)):(\n \n false\n));\n}\n clear(){\n const state=this[DRAFT_STATE];\n assertUnrevoked(state);\n if (latest(state).size){\n prepareSetCopy(state);\n markChanged(state);\n state.copy_.clear();\n}\n}\n values(){\n const state=this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareSetCopy(state);\n return state.copy_.values();\n}\n entries(){\n const state=this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareSetCopy(state);\n return state.copy_.entries();\n}\n keys(){\n return this.values();\n}\n [(DRAFT_STATE,Symbol.iterator)](){\n return this.values();\n}\n forEach(cb,thisArg){\n const iterator=this.values();\n let result=iterator.next();\n while (!result.done){\n cb.call(thisArg,result.value,result.value,this);\n result=iterator.next();\n}\n}\n}\n function proxySet_(target,parent){\n return new DraftSet(target,parent);\n}\n function prepareSetCopy(state){\n if (!state.copy_){\n state.copy_=new Set();\n state.base_.forEach((value)=>{\n if (isDraftable(value)){\n const draft=createProxy(value,state);\n state.drafts_.set(value,draft);\n state.copy_.add(draft);\n}else{\n state.copy_.add(value);\n}\n});\n}\n}\n function assertUnrevoked(state){\n if (state.revoked_)\n die(3,JSON.stringify(latest(state)));\n}\n loadPlugin(\"MapSet\",{proxyMap_,proxySet_});\n}\n\n// src/immer.ts\nvar immer=new Immer2();\nvar produce=immer.produce;\nvar produceWithPatches=immer.produceWithPatches.bind(\n immer\n);\nvar setAutoFreeze=immer.setAutoFreeze.bind(immer);\nvar setUseStrictShallowCopy=immer.setUseStrictShallowCopy.bind(immer);\nvar applyPatches=immer.applyPatches.bind(immer);\nvar createDraft=immer.createDraft.bind(immer);\nvar finishDraft=immer.finishDraft.bind(immer);\nfunction castDraft(value){\n return value;\n}\nfunction castImmutable(value){\n return value;\n}\n\n//# sourceMappingURL=immer.mjs.map\n;// ./node_modules/@reduxjs/toolkit/dist/redux-toolkit.modern.mjs\n// src/index.ts\n\n\n\n\n// src/createDraftSafeSelector.ts\n\n\nvar createDraftSafeSelectorCreator=(...args)=>{\n const createSelector2=createSelectorCreator(...args);\n const createDraftSafeSelector2=Object.assign((...args2)=>{\n const selector=createSelector2(...args2);\n const wrappedSelector=(value,...rest)=>selector(isDraft(value) ? current(value):value,...rest);\n Object.assign(wrappedSelector,selector);\n return wrappedSelector;\n},{\n withTypes:()=>createDraftSafeSelector2\n});\n return createDraftSafeSelector2;\n};\nvar createDraftSafeSelector=(null && (createDraftSafeSelectorCreator(weakMapMemoize)));\n\n// src/configureStore.ts\n\n\n// src/devtoolsExtension.ts\n\nvar composeWithDevTools=typeof window !==\"undefined\" && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ :function(){\n if (arguments.length===0) return void 0;\n if (typeof arguments[0]===\"object\") return compose;\n return compose.apply(null,arguments);\n};\nvar devToolsEnhancer=typeof window !==\"undefined\" && window.__REDUX_DEVTOOLS_EXTENSION__ ? window.__REDUX_DEVTOOLS_EXTENSION__ :function(){\n return function(noop3){\n return noop3;\n};\n};\n\n// src/getDefaultMiddleware.ts\n\n\n// src/createAction.ts\n\n\n// src/tsHelpers.ts\nvar hasMatchFunction=(v)=>{\n return v && typeof v.match===\"function\";\n};\n\n// src/createAction.ts\nfunction createAction(type,prepareAction){\n function actionCreator(...args){\n if (prepareAction){\n let prepared=prepareAction(...args);\n if (!prepared){\n throw new Error(true ? redux_toolkit_modern_formatProdErrorMessage(0):0);\n}\n return{\n type,\n payload:prepared.payload,\n ...\"meta\" in prepared &&{\n meta:prepared.meta\n},\n ...\"error\" in prepared &&{\n error:prepared.error\n}\n};\n}\n return{\n type,\n payload:args[0]\n};\n}\n actionCreator.toString=()=>`${type}`;\n actionCreator.type=type;\n actionCreator.match=(action)=>redux_isAction(action) && action.type===type;\n return actionCreator;\n}\nfunction isActionCreator(action){\n return typeof action===\"function\" && \"type\" in action && // hasMatchFunction only wants Matchers but I don't see the point in rewriting it\n hasMatchFunction(action);\n}\nfunction isFSA(action){\n return isAction(action) && Object.keys(action).every(isValidKey);\n}\nfunction isValidKey(key){\n return [\"type\",\"payload\",\"error\",\"meta\"].indexOf(key)>-1;\n}\n\n// src/actionCreatorInvariantMiddleware.ts\nfunction getMessage(type){\n const splitType=type ? `${type}`.split(\"/\") :[];\n const actionName=splitType[splitType.length - 1] || \"actionCreator\";\n return `Detected an action creator with type \"${type || \"unknown\"}\" being dispatched. \nMake sure you're calling the action creator before dispatching,i.e. \\`dispatch(${actionName}())\\` instead of \\`dispatch(${actionName})\\`. This is necessary even if the action has no payload.`;\n}){\n if (true){\n return ()=>(next)=>(action)=>next(action);\n}\n}\n\n// src/utils.ts\n\nfunction getTimeMeasureUtils(maxDelay,fnName){\n let elapsed=0;\n return{\n measureTime(fn){\n const started=Date.now();\n try{\n return fn();\n}finally{\n const finished=Date.now();\n elapsed+=finished - started;\n}\n},\n warnIfExceeded(){\n if (elapsed>maxDelay){\n console.warn(`${fnName}took ${elapsed}ms,which is more than the warning threshold of ${maxDelay}ms. \nIf your state or actions are very large,you may want to disable the middleware as it might cause too much of a slowdown in development mode. See https://redux-toolkit.js.org/api/getDefaultMiddleware for instructions.\nIt is disabled in production builds,so you don't need to worry about that.`);\n}\n}\n};\n}\nvar Tuple=class _Tuple extends Array{\n constructor(...items){\n super(...items);\n Object.setPrototypeOf(this,_Tuple.prototype);\n}\n static get [Symbol.species](){\n return _Tuple;\n}\n concat(...arr){\n return super.concat.apply(this,arr);\n}\n prepend(...arr){\n if (arr.length===1 && Array.isArray(arr[0])){\n return new _Tuple(...arr[0].concat(this));\n}\n return new _Tuple(...arr.concat(this));\n}\n};\nfunction freezeDraftable(val){\n return isDraftable(val) ? produce(val,()=>{\n}):val;\n}\nfunction getOrInsertComputed(map,key,compute){\n if (map.has(key)) return map.get(key);\n return map.set(key,compute(key)).get(key);\n}\n\n// src/immutableStateInvariantMiddleware.ts\nfunction isImmutableDefault(value){\n return typeof value !==\"object\" || value==null || Object.isFrozen(value);\n}\nfunction trackForMutations(isImmutable,ignorePaths,obj){\n const trackedProperties=trackProperties(isImmutable,ignorePaths,obj);\n return{\n detectMutations(){\n return detectMutations(isImmutable,ignorePaths,trackedProperties,obj);\n}\n};\n}\nfunction trackProperties(isImmutable,ignorePaths=[],obj,path=\"\",checkedObjects=new Set()){\n const tracked={\n value:obj\n};\n if (!isImmutable(obj) && !checkedObjects.has(obj)){\n checkedObjects.add(obj);;\n for (const key in obj){\n const childPath=path ? path+\".\"+key :key;\n if (ignorePaths.length && ignorePaths.indexOf(childPath) !==-1){\n continue;\n}\n tracked.children[key]=trackProperties(isImmutable,ignorePaths,obj[key],childPath);\n}\n}\n return tracked;\n}\nfunction detectMutations(isImmutable,ignoredPaths=[],trackedProperty,obj,sameParentRef=false,path=\"\"){\n const prevObj=trackedProperty ? trackedProperty.value :void 0;\n const sameRef=prevObj===obj;\n if (sameParentRef && !sameRef && !Number.isNaN(obj)){\n return{\n wasMutated:true,\n path\n};\n}\n if (isImmutable(prevObj) || isImmutable(obj)){\n return{\n wasMutated:false\n};\n};\n for (let key in trackedProperty.children){\n keysToDetect[key]=true;\n}\n for (let key in obj){\n keysToDetect[key]=true;\n}\n const hasIgnoredPaths=ignoredPaths.length>0;\n for (let key in keysToDetect){\n const nestedPath=path ? path+\".\"+key :key;\n if (hasIgnoredPaths){\n const hasMatches=ignoredPaths.some((ignored)=>{\n if (ignored instanceof RegExp){\n return ignored.test(nestedPath);\n}\n return nestedPath===ignored;\n});\n if (hasMatches){\n continue;\n}\n}\n const result=detectMutations(isImmutable,ignoredPaths,trackedProperty.children[key],obj[key],sameRef,nestedPath);\n if (result.wasMutated){\n return result;\n}\n}\n return{\n wasMutated:false\n};\n}){\n if (true){\n return ()=>(next)=>(action)=>next(action);\n}else // removed by dead control flow\n{var stringify,getSerialize}\n}\n\n// src/serializableStateInvariantMiddleware.ts\n\nfunction isPlain(val){\n const type=typeof val;\n return val==null || type===\"string\" || type===\"boolean\" || type===\"number\" || Array.isArray(val) || isPlainObject(val);\n}\nfunction findNonSerializableValue(value,path=\"\",isSerializable=isPlain,getEntries,ignoredPaths=[],cache){\n let foundNestedSerializable;\n if (!isSerializable(value)){\n return{\n keyPath:path || \"<root>\",\n value\n};\n}\n if (typeof value !==\"object\" || value===null){\n return false;\n}\n if (cache?.has(value)) return false;\n const entries=getEntries !=null ? getEntries(value) :Object.entries(value);\n const hasIgnoredPaths=ignoredPaths.length>0;\n for (const [key,nestedValue] of entries){\n const nestedPath=path ? path+\".\"+key :key;\n if (hasIgnoredPaths){\n const hasMatches=ignoredPaths.some((ignored)=>{\n if (ignored instanceof RegExp){\n return ignored.test(nestedPath);\n}\n return nestedPath===ignored;\n});\n if (hasMatches){\n continue;\n}\n}\n if (!isSerializable(nestedValue)){\n return{\n keyPath:nestedPath,\n value:nestedValue\n};\n}\n if (typeof nestedValue===\"object\"){\n foundNestedSerializable=findNonSerializableValue(nestedValue,nestedPath,isSerializable,getEntries,ignoredPaths,cache);\n if (foundNestedSerializable){\n return foundNestedSerializable;\n}\n}\n}\n if (cache && isNestedFrozen(value)) cache.add(value);\n return false;\n}\nfunction isNestedFrozen(value){\n if (!Object.isFrozen(value)) return false;\n for (const nestedValue of Object.values(value)){\n if (typeof nestedValue !==\"object\" || nestedValue===null) continue;\n if (!isNestedFrozen(nestedValue)) return false;\n}\n return true;\n}){\n if (true){\n return ()=>(next)=>(action)=>next(action);\n}\n}\n\n// src/getDefaultMiddleware.ts\nfunction isBoolean(x){\n return typeof x===\"boolean\";\n}\nvar buildGetDefaultMiddleware=()=>function getDefaultMiddleware(options){\n const{\n thunk=true,\n immutableCheck=true,\n serializableCheck=true,\n actionCreatorCheck=true\n};\n let middlewareArray=new Tuple();\n if (thunk){\n if (isBoolean(thunk)){\n middlewareArray.push(redux_thunk_thunk);\n}else{\n middlewareArray.push(withExtraArgument(thunk.extraArgument));\n}\n}\n return middlewareArray;\n};\n\n// src/autoBatchEnhancer.ts\nvar SHOULD_AUTOBATCH=\"RTK_autoBatch\";\nvar prepareAutoBatched=()=>(payload)=>({\n payload,\n meta:{\n [SHOULD_AUTOBATCH]:true\n}\n});\nvar createQueueWithTimer=(timeout)=>{\n return (notify)=>{\n setTimeout(notify,timeout);\n};\n};\nvar autoBatchEnhancer=(options={\n type:\"raf\"\n})=>(next)=>(...args)=>{\n const store=next(...args);\n let notifying=true;\n let shouldNotifyAtEndOfTick=false;\n let notificationQueued=false;\n const listeners=new Set();\n const queueCallback=options.type===\"tick\" ? queueMicrotask :options.type===\"raf\" ? (\n // requestAnimationFrame won't exist in SSR environments. Fall back to a vague approximation just to keep from erroring.\n typeof window !==\"undefined\" && window.requestAnimationFrame ? window.requestAnimationFrame :createQueueWithTimer(10)\n) :options.type===\"callback\" ? options.queueNotification :createQueueWithTimer(options.timeout);\n const notifyListeners=()=>{\n notificationQueued=false;\n if (shouldNotifyAtEndOfTick){\n shouldNotifyAtEndOfTick=false;\n listeners.forEach((l)=>l());\n}\n};,store,{\n // Override the base `store.subscribe` method to keep original listeners\n // from running if we're delaying notifications\n subscribe(listener2){\n const wrappedListener=()=>notifying && listener2();\n const unsubscribe=store.subscribe(wrappedListener);\n listeners.add(listener2);\n return ()=>{\n unsubscribe();\n listeners.delete(listener2);\n};\n},\n // Override the base `store.dispatch` method so that we can check actions\n // for the `shouldAutoBatch` flag and determine if batching is active\n dispatch(action){\n try{\n notifying=!action?.meta?.[SHOULD_AUTOBATCH];\n shouldNotifyAtEndOfTick=!notifying;\n if (shouldNotifyAtEndOfTick){\n if (!notificationQueued){\n notificationQueued=true;\n queueCallback(notifyListeners);\n}\n}\n return store.dispatch(action);\n}finally{\n notifying=true;\n}\n}\n});\n};\n\n// src/getDefaultEnhancers.ts\nvar buildGetDefaultEnhancers=(middlewareEnhancer)=>function getDefaultEnhancers(options){\n const{\n autoBatch=true\n};\n let enhancerArray=new Tuple(middlewareEnhancer);\n if (autoBatch){\n enhancerArray.push(autoBatchEnhancer(typeof autoBatch===\"object\" ? autoBatch:void 0));\n}\n return enhancerArray;\n};\n\n// src/configureStore.ts\nfunction configureStore(options){\n const getDefaultMiddleware=buildGetDefaultMiddleware();\n const{\n reducer=void 0,\n middleware,\n devTools=true,\n duplicateMiddlewareCheck=true,\n preloadedState=void 0,\n enhancers=void 0\n};\n let rootReducer;\n if (typeof reducer===\"function\"){\n rootReducer=reducer;\n}else if (redux_isPlainObject(reducer)){\n rootReducer=combineReducers(reducer);\n}else{\n throw new Error(true ? redux_toolkit_modern_formatProdErrorMessage(1):0);\n}\n let finalMiddleware;\n if (typeof middleware===\"function\"){\n finalMiddleware=middleware(getDefaultMiddleware);\n}else{\n finalMiddleware=getDefaultMiddleware();\n}\n let finalCompose=compose;\n if (devTools){\n finalCompose=composeWithDevTools({\n // Enable capture of stack traces for dispatched Redux actions\n trace:\"production\" !==\"production\",\n ...typeof devTools===\"object\" && devTools\n});\n}\n const middlewareEnhancer=applyMiddleware(...finalMiddleware);\n const getDefaultEnhancers=buildGetDefaultEnhancers(middlewareEnhancer);\n let storeEnhancers=typeof enhancers===\"function\" ? enhancers(getDefaultEnhancers) :getDefaultEnhancers();\n const composedEnhancer=finalCompose(...storeEnhancers);\n return createStore(rootReducer,preloadedState,composedEnhancer);\n}\n\n// src/createReducer.ts\n\n\n// src/mapBuilders.ts\nfunction executeReducerBuilderCallback(builderCallback){\n const actionsMap={};\n const actionMatchers=[];\n let defaultCaseReducer;\n const builder={\n addCase(typeOrActionCreator,reducer){\n if (false) // removed by dead control flow\n{}\n const type=typeof typeOrActionCreator===\"string\" ? typeOrActionCreator :typeOrActionCreator.type;\n if (!type){\n throw new Error(true ? redux_toolkit_modern_formatProdErrorMessage(28):0);\n}\n if (type in actionsMap){\n throw new Error(true ? redux_toolkit_modern_formatProdErrorMessage(29):0);\n}\n actionsMap[type]=reducer;\n return builder;\n},\n addMatcher(matcher,reducer){\n if (false) // removed by dead control flow\n{}\n actionMatchers.push({\n matcher,\n reducer\n});\n return builder;\n},\n addDefaultCase(reducer){\n if (false) // removed by dead control flow\n{}\n defaultCaseReducer=reducer;\n return builder;\n}\n};\n builderCallback(builder);\n return [actionsMap,actionMatchers,defaultCaseReducer];\n}\n\n// src/createReducer.ts\nfunction isStateFunction(x){\n return typeof x===\"function\";\n}\nfunction createReducer(initialState,mapOrBuilderCallback){\n if (false) // removed by dead control flow\n{}\n let [actionsMap,finalActionMatchers,finalDefaultCaseReducer]=executeReducerBuilderCallback(mapOrBuilderCallback);\n let getInitialState;\n if (isStateFunction(initialState)){\n getInitialState=()=>freezeDraftable(initialState());\n}else{\n const frozenInitialState=freezeDraftable(initialState);\n getInitialState=()=>frozenInitialState;\n}\n function reducer(state=getInitialState(),action){\n let caseReducers=[actionsMap[action.type],...finalActionMatchers.filter(({\n matcher\n})=>matcher(action)).map(({\n reducer:reducer2\n})=>reducer2)];\n if (caseReducers.filter((cr)=>!!cr).length===0){\n caseReducers=[finalDefaultCaseReducer];\n}\n return caseReducers.reduce((previousState,caseReducer)=>{\n if (caseReducer){\n if (immer_isDraft(previousState)){\n const draft=previousState;\n const result=caseReducer(draft,action);\n if (result===void 0){\n return previousState;\n}\n return result;\n}else if (!isDraftable(previousState)){\n const result=caseReducer(previousState,action);\n if (result===void 0){\n if (previousState===null){\n return previousState;\n}\n throw Error(\"A case reducer on a non-draftable value must not return undefined\");\n}\n return result;\n}else{\n return produce(previousState,(draft)=>{\n return caseReducer(draft,action);\n});\n}\n}\n return previousState;\n},state);\n}\n reducer.getInitialState=getInitialState;\n return reducer;\n}\n\n// src/matchers.ts\nvar matches=(matcher,action)=>{\n if (hasMatchFunction(matcher)){\n return matcher.match(action);\n}else{\n return matcher(action);\n}\n};\nfunction isAnyOf(...matchers){\n return (action)=>{\n return matchers.some((matcher)=>matches(matcher,action));\n};\n}\nfunction isAllOf(...matchers){\n return (action)=>{\n return matchers.every((matcher)=>matches(matcher,action));\n};\n}\nfunction hasExpectedRequestMetadata(action,validStatus){\n if (!action || !action.meta) return false;\n const hasValidRequestId=typeof action.meta.requestId===\"string\";\n const hasValidRequestStatus=validStatus.indexOf(action.meta.requestStatus)>-1;\n return hasValidRequestId && hasValidRequestStatus;\n}\nfunction isAsyncThunkArray(a){\n return typeof a[0]===\"function\" && \"pending\" in a[0] && \"fulfilled\" in a[0] && \"rejected\" in a[0];\n}\nfunction isPending(...asyncThunks){\n if (asyncThunks.length===0){\n return (action)=>hasExpectedRequestMetadata(action,[\"pending\"]);\n}\n if (!isAsyncThunkArray(asyncThunks)){\n return isPending()(asyncThunks[0]);\n}\n return isAnyOf(...asyncThunks.map((asyncThunk)=>asyncThunk.pending));\n}\nfunction isRejected(...asyncThunks){\n if (asyncThunks.length===0){\n return (action)=>hasExpectedRequestMetadata(action,[\"rejected\"]);\n}\n if (!isAsyncThunkArray(asyncThunks)){\n return isRejected()(asyncThunks[0]);\n}\n return isAnyOf(...asyncThunks.map((asyncThunk)=>asyncThunk.rejected));\n}\nfunction isRejectedWithValue(...asyncThunks){\n const hasFlag=(action)=>{\n return action && action.meta && action.meta.rejectedWithValue;\n};\n if (asyncThunks.length===0){\n return isAllOf(isRejected(...asyncThunks),hasFlag);\n}\n if (!isAsyncThunkArray(asyncThunks)){\n return isRejectedWithValue()(asyncThunks[0]);\n}\n return isAllOf(isRejected(...asyncThunks),hasFlag);\n}\nfunction isFulfilled(...asyncThunks){\n if (asyncThunks.length===0){\n return (action)=>hasExpectedRequestMetadata(action,[\"fulfilled\"]);\n}\n if (!isAsyncThunkArray(asyncThunks)){\n return isFulfilled()(asyncThunks[0]);\n}\n return isAnyOf(...asyncThunks.map((asyncThunk)=>asyncThunk.fulfilled));\n}\nfunction isAsyncThunkAction(...asyncThunks){\n if (asyncThunks.length===0){\n return (action)=>hasExpectedRequestMetadata(action,[\"pending\",\"fulfilled\",\"rejected\"]);\n}\n if (!isAsyncThunkArray(asyncThunks)){\n return isAsyncThunkAction()(asyncThunks[0]);\n}\n return isAnyOf(...asyncThunks.flatMap((asyncThunk)=>[asyncThunk.pending,asyncThunk.rejected,asyncThunk.fulfilled]));\n}\n\n// src/nanoid.ts\nvar urlAlphabet=\"ModuleSymbhasOwnPr-0123456789ABCDEFGHNRVfgctiUvz_KqYTJkLxpZXIjQW\";\nvar nanoid=(size=21)=>{\n let id=\"\";\n let i=size;\n while (i--){\n id+=urlAlphabet[Math.random() * 64 | 0];\n}\n return id;\n};\n\n// src/createAsyncThunk.ts\nvar commonProperties=[\"name\",\"message\",\"stack\",\"code\"];\nvar RejectWithValue=class{\n constructor(payload,meta){\n this.payload=payload;\n this.meta=meta;\n}\n \n _type;\n};\nvar FulfillWithMeta=class{\n constructor(payload,meta){\n this.payload=payload;\n this.meta=meta;\n}\n \n _type;\n};\nvar miniSerializeError=(value)=>{\n if (typeof value===\"object\" && value !==null){\n const simpleError={};\n for (const property of commonProperties){\n if (typeof value[property]===\"string\"){\n simpleError[property]=value[property];\n}\n}\n return simpleError;\n}\n return{\n message:String(value)\n};\n};\nvar externalAbortMessage=\"External signal was aborted\";\nvar createAsyncThunk=(()=>{\n function createAsyncThunk2(typePrefix,payloadCreator,options){\n const fulfilled=createAction(typePrefix+\"/fulfilled\",(payload,requestId,arg,meta)=>({\n payload,\n meta:{\n ...meta ||{},\n arg,\n requestId,\n requestStatus:\"fulfilled\"\n}\n}));\n const pending=createAction(typePrefix+\"/pending\",(requestId,arg,meta)=>({\n payload:void 0,\n meta:{\n ...meta ||{},\n arg,\n requestId,\n requestStatus:\"pending\"\n}\n}));\n const rejected=createAction(typePrefix+\"/rejected\",(error,requestId,arg,payload,meta)=>({\n payload,\n error:(options && options.serializeError || miniSerializeError)(error || \"Rejected\"),\n meta:{\n ...meta ||{},\n arg,\n requestId,\n rejectedWithValue:!!payload,\n requestStatus:\"rejected\",\n aborted:error?.name===\"AbortError\",\n condition:error?.name===\"ConditionError\"\n}\n}));\n function actionCreator(arg,{\n signal\n}){\n return (dispatch,getState,extra)=>{\n const requestId=options?.idGenerator ? options.idGenerator(arg) :nanoid();\n const abortController=new AbortController();\n let abortHandler;\n let abortReason;\n function abort(reason){\n abortReason=reason;\n abortController.abort();\n}\n if (signal){\n if (signal.aborted){\n abort(externalAbortMessage);\n}else{\n signal.addEventListener(\"abort\",()=>abort(externalAbortMessage),{\n once:true\n});\n}\n}\n const promise=async function(){\n let finalAction;\n try{\n let conditionResult=options?.condition?.(arg,{\n getState,\n extra\n});\n if (isThenable(conditionResult)){\n conditionResult=await conditionResult;\n}\n if (conditionResult===false || abortController.signal.aborted){\n throw{\n name:\"ConditionError\",\n message:\"Aborted due to condition callback returning false.\"\n};\n}\n const abortedPromise=new Promise((_,reject)=>{\n abortHandler=()=>{\n reject({\n name:\"AbortError\",\n message:abortReason || \"Aborted\"\n});\n};\n abortController.signal.addEventListener(\"abort\",abortHandler);\n});\n dispatch(pending(requestId,arg,options?.getPendingMeta?.({\n requestId,\n arg\n},{\n getState,\n extra\n})));\n finalAction=await Promise.race([abortedPromise,Promise.resolve(payloadCreator(arg,{\n dispatch,\n getState,\n extra,\n requestId,\n signal:abortController.signal,\n abort,\n rejectWithValue:(value,meta)=>{\n return new RejectWithValue(value,meta);\n},\n fulfillWithValue:(value,meta)=>{\n return new FulfillWithMeta(value,meta);\n}\n})).then((result)=>{\n if (result instanceof RejectWithValue){\n throw result;\n}\n if (result instanceof FulfillWithMeta){\n return fulfilled(result.payload,requestId,arg,result.meta);\n}\n return fulfilled(result,requestId,arg);\n})]);\n}catch (err){\n finalAction=err instanceof RejectWithValue ? rejected(null,requestId,arg,err.payload,err.meta):rejected(err,requestId,arg);\n}finally{\n if (abortHandler){\n abortController.signal.removeEventListener(\"abort\",abortHandler);\n}\n}\n const skipDispatch=options && !options.dispatchConditionRejection && rejected.match(finalAction) && finalAction.meta.condition;\n if (!skipDispatch){\n dispatch(finalAction);\n}\n return finalAction;\n}();\n return Object.assign(promise,{\n abort,\n requestId,\n arg,\n unwrap(){\n return promise.then(unwrapResult);\n}\n});\n};\n}\n return Object.assign(actionCreator,{\n pending,\n rejected,\n fulfilled,\n settled:isAnyOf(rejected,fulfilled),\n typePrefix\n});\n}\n createAsyncThunk2.withTypes=()=>createAsyncThunk2;\n return createAsyncThunk2;\n})();\nfunction unwrapResult(action){\n if (action.meta && action.meta.rejectedWithValue){\n throw action.payload;\n}\n if (action.error){\n throw action.error;\n}\n return action.payload;\n}\nfunction isThenable(value){\n return value !==null && typeof value===\"object\" && typeof value.then===\"function\";\n}\n\n// src/createSlice.ts\nvar asyncThunkSymbol=Symbol.for(\"rtk-slice-createasyncthunk\");\nvar asyncThunkCreator={\n [asyncThunkSymbol]:createAsyncThunk\n};\nvar ReducerType=((ReducerType2)=>{\n ReducerType2[\"reducer\"]=\"reducer\";\n ReducerType2[\"reducerWithPrepare\"]=\"reducerWithPrepare\";\n ReducerType2[\"asyncThunk\"]=\"asyncThunk\";\n return ReducerType2;\n});\nfunction getType(slice,actionKey){\n return `${slice}/${actionKey}`;\n}\nfunction buildCreateSlice({\n creators\n}){\n const cAT=creators?.asyncThunk?.[asyncThunkSymbol];\n return function createSlice2(options){\n const{\n name,\n reducerPath=name\n}=options;\n if (!name){\n throw new Error(true ? redux_toolkit_modern_formatProdErrorMessage(11):0);\n};\n const reducerNames=Object.keys(reducers);\n const context={\n sliceCaseReducersByName:{},\n sliceMatchers:[]\n};\n const contextMethods={\n addCase(typeOrActionCreator,reducer2){\n const type=typeof typeOrActionCreator===\"string\" ? typeOrActionCreator :typeOrActionCreator.type;\n if (!type){\n throw new Error(true ? redux_toolkit_modern_formatProdErrorMessage(12):0);\n}\n if (type in context.sliceCaseReducersByType){\n throw new Error(true ? redux_toolkit_modern_formatProdErrorMessage(13):0);\n}\n context.sliceCaseReducersByType[type]=reducer2;\n return contextMethods;\n},\n addMatcher(matcher,reducer2){\n context.sliceMatchers.push({\n matcher,\n reducer:reducer2\n});\n return contextMethods;\n},\n exposeAction(name2,actionCreator){\n context.actionCreators[name2]=actionCreator;\n return contextMethods;\n},\n exposeCaseReducer(name2,reducer2){\n context.sliceCaseReducersByName[name2]=reducer2;\n return contextMethods;\n}\n};\n reducerNames.forEach((reducerName)=>{\n const reducerDefinition=reducers[reducerName];\n const reducerDetails={\n reducerName,\n type:getType(name,reducerName),\n createNotation:typeof options.reducers===\"function\"\n};\n if (isAsyncThunkSliceReducerDefinition(reducerDefinition)){\n handleThunkCaseReducerDefinition(reducerDetails,reducerDefinition,contextMethods,cAT);\n}else{\n handleNormalReducerDefinition(reducerDetails,reducerDefinition,contextMethods);\n}\n});\n function buildReducer(){\n if (false) // removed by dead control flow\n{},actionMatchers=[],defaultCaseReducer=void 0]=typeof options.extraReducers===\"function\" ? executeReducerBuilderCallback(options.extraReducers) :[options.extraReducers];\n const finalCaseReducers={\n ...extraReducers,\n ...context.sliceCaseReducersByType\n};\n return createReducer(options.initialState,(builder)=>{\n for (let key in finalCaseReducers){\n builder.addCase(key,finalCaseReducers[key]);\n}\n for (let sM of context.sliceMatchers){\n builder.addMatcher(sM.matcher,sM.reducer);\n}\n for (let m of actionMatchers){\n builder.addMatcher(m.matcher,m.reducer);\n}\n if (defaultCaseReducer){\n builder.addDefaultCase(defaultCaseReducer);\n}\n});\n}\n const selectSelf=(state)=>state;\n const injectedSelectorCache=new Map();\n const injectedStateCache=new WeakMap();\n let _reducer;\n function reducer(state,action){\n if (!_reducer) _reducer=buildReducer();\n return _reducer(state,action);\n}\n function getInitialState(){\n if (!_reducer) _reducer=buildReducer();\n return _reducer.getInitialState();\n}\n function makeSelectorProps(reducerPath2,injected=false){\n function selectSlice(state){\n let sliceState=state[reducerPath2];\n if (typeof sliceState===\"undefined\"){\n if (injected){\n sliceState=getOrInsertComputed(injectedStateCache,selectSlice,getInitialState);\n}\n}\n return sliceState;\n}\n function getSelectors(selectState=selectSelf){\n const selectorCache=getOrInsertComputed(injectedSelectorCache,injected,()=>new WeakMap());\n return getOrInsertComputed(selectorCache,selectState,()=>{\n const map={};)){\n map[name2]=wrapSelector(selector,selectState,()=>getOrInsertComputed(injectedStateCache,selectState,getInitialState),injected);\n}\n return map;\n});\n}\n return{\n reducerPath:reducerPath2,\n getSelectors,\n get selectors(){\n return getSelectors(selectSlice);\n},\n selectSlice\n};\n}\n const slice={\n name,\n reducer,\n actions:context.actionCreators,\n caseReducers:context.sliceCaseReducersByName,\n getInitialState,\n ...makeSelectorProps(reducerPath),\n injectInto(injectable,{\n reducerPath:pathOpt,\n ...config\n}){\n const newReducerPath=pathOpt ?? reducerPath;\n injectable.inject({\n reducerPath:newReducerPath,\n reducer\n},config);\n return{\n ...slice,\n ...makeSelectorProps(newReducerPath,true)\n};\n}\n};\n return slice;\n};\n}\nfunction wrapSelector(selector,selectState,getInitialState,injected){\n function wrapper(rootState,...args){\n let sliceState=selectState(rootState);\n if (typeof sliceState===\"undefined\"){\n if (injected){\n sliceState=getInitialState();\n}\n}\n return selector(sliceState,...args);\n}\n wrapper.unwrapped=selector;\n return wrapper;\n}\nvar createSlice=buildCreateSlice();\nfunction buildReducerCreators(){\n function asyncThunk(payloadCreator,config){\n return{\n _reducerDefinitionType:\"asyncThunk\",\n payloadCreator,\n ...config\n};\n}\n asyncThunk.withTypes=()=>asyncThunk;\n return{\n reducer(caseReducer){\n return Object.assign({\n // hack so the wrapping function has the same name as the original\n // we need to create a wrapper so the `reducerDefinitionType` is not assigned to the original\n [caseReducer.name](...args){\n return caseReducer(...args);\n}\n}[caseReducer.name],{\n _reducerDefinitionType:\"reducer\" \n});\n},\n preparedReducer(prepare,reducer){\n return{\n _reducerDefinitionType:\"reducerWithPrepare\",\n prepare,\n reducer\n};\n},\n asyncThunk\n};\n}\nfunction handleNormalReducerDefinition({\n type,\n reducerName,\n createNotation\n},maybeReducerWithPrepare,context){\n let caseReducer;\n let prepareCallback;\n if (\"reducer\" in maybeReducerWithPrepare){\n if (createNotation && !isCaseReducerWithPrepareDefinition(maybeReducerWithPrepare)){\n throw new Error(true ? redux_toolkit_modern_formatProdErrorMessage(17):0);\n}\n caseReducer=maybeReducerWithPrepare.reducer;\n prepareCallback=maybeReducerWithPrepare.prepare;\n}else{\n caseReducer=maybeReducerWithPrepare;\n}\n context.addCase(type,caseReducer).exposeCaseReducer(reducerName,caseReducer).exposeAction(reducerName,prepareCallback ? createAction(type,prepareCallback):createAction(type));\n}\nfunction isAsyncThunkSliceReducerDefinition(reducerDefinition){\n return reducerDefinition._reducerDefinitionType===\"asyncThunk\";\n}\nfunction isCaseReducerWithPrepareDefinition(reducerDefinition){\n return reducerDefinition._reducerDefinitionType===\"reducerWithPrepare\";\n}\nfunction handleThunkCaseReducerDefinition({\n type,\n reducerName\n},reducerDefinition,context,cAT){\n if (!cAT){\n throw new Error(true ? redux_toolkit_modern_formatProdErrorMessage(18):0);\n}\n const{\n payloadCreator,\n fulfilled,\n pending,\n rejected,\n settled,\n options\n}=reducerDefinition;\n const thunk=cAT(type,payloadCreator,options);\n context.exposeAction(reducerName,thunk);\n if (fulfilled){\n context.addCase(thunk.fulfilled,fulfilled);\n}\n if (pending){\n context.addCase(thunk.pending,pending);\n}\n if (rejected){\n context.addCase(thunk.rejected,rejected);\n}\n if (settled){\n context.addMatcher(thunk.settled,settled);\n}\n context.exposeCaseReducer(reducerName,{\n fulfilled:fulfilled || redux_toolkit_modern_noop,\n pending:pending || redux_toolkit_modern_noop,\n rejected:rejected || redux_toolkit_modern_noop,\n settled:settled || redux_toolkit_modern_noop\n});\n}\nfunction redux_toolkit_modern_noop(){\n}\n\n// src/entities/entity_state.ts\nfunction getInitialEntityState(){\n return{\n ids:[],\n entities:{}\n};\n}\nfunction createInitialStateFactory(stateAdapter){\n function getInitialState(additionalState={},entities){\n const state=Object.assign(getInitialEntityState(),additionalState);\n return entities ? stateAdapter.setAll(state,entities):state;\n}\n return{\n getInitialState\n};\n}\n\n// src/entities/state_selectors.ts\nfunction createSelectorsFactory(){\n function getSelectors(selectState,options={}){\n const{\n createSelector:createSelector2=createDraftSafeSelector\n}=options;\n const selectIds=(state)=>state.ids;\n const selectEntities=(state)=>state.entities;\n const selectAll=createSelector2(selectIds,selectEntities,(ids,entities)=>ids.map((id)=>entities[id]));\n const selectId=(_,id)=>id;\n const selectById=(entities,id)=>entities[id];\n const selectTotal=createSelector2(selectIds,(ids)=>ids.length);\n if (!selectState){\n return{\n selectIds,\n selectEntities,\n selectAll,\n selectTotal,\n selectById:createSelector2(selectEntities,selectId,selectById)\n};\n}\n const selectGlobalizedEntities=createSelector2(selectState,selectEntities);\n return{\n selectIds:createSelector2(selectState,selectIds),\n selectEntities:selectGlobalizedEntities,\n selectAll:createSelector2(selectState,selectAll),\n selectTotal:createSelector2(selectState,selectTotal),\n selectById:createSelector2(selectGlobalizedEntities,selectId,selectById)\n};\n}\n return{\n getSelectors\n};\n}\n\n// src/entities/state_adapter.ts\n\nvar isDraftTyped=(null && (isDraft3));\nfunction createSingleArgumentStateOperator(mutator){\n const operator=createStateOperator((_,state)=>mutator(state));\n return function operation(state){\n return operator(state,void 0);\n};\n}\nfunction createStateOperator(mutator){\n return function operation(state,arg){\n function isPayloadActionArgument(arg2){\n return isFSA(arg2);\n}\n const runMutator=(draft)=>{\n if (isPayloadActionArgument(arg)){\n mutator(arg.payload,draft);\n}else{\n mutator(arg,draft);\n}\n};\n if (isDraftTyped(state)){\n runMutator(state);\n return state;\n}\n return createNextState3(state,runMutator);\n};\n}\n\n// src/entities/utils.ts\n\nfunction selectIdValue(entity,selectId){\n const key=selectId(entity);\n return key;\n}\nfunction ensureEntitiesArray(entities){\n if (!Array.isArray(entities)){\n entities=Object.values(entities);\n}\n return entities;\n}\nfunction getCurrent(value){\n return isDraft4(value) ? current2(value):value;\n}\nfunction splitAddedUpdatedEntities(newEntities,selectId,state){\n newEntities=ensureEntitiesArray(newEntities);\n const existingIdsArray=getCurrent(state.ids);\n const existingIds=new Set(existingIdsArray);\n const added=[];\n const addedIds=new Set([]);\n const updated=[];\n for (const entity of newEntities){\n const id=selectIdValue(entity,selectId);\n if (existingIds.has(id) || addedIds.has(id)){\n updated.push({\n id,\n changes:entity\n});\n}else{\n addedIds.add(id);\n added.push(entity);\n}\n}\n return [added,updated,existingIdsArray];\n}\n\n// src/entities/unsorted_state_adapter.ts\nfunction createUnsortedStateAdapter(selectId){\n function addOneMutably(entity,state){\n const key=selectIdValue(entity,selectId);\n if (key in state.entities){\n return;\n}\n state.ids.push(key);\n state.entities[key]=entity;\n}\n function addManyMutably(newEntities,state){\n newEntities=ensureEntitiesArray(newEntities);\n for (const entity of newEntities){\n addOneMutably(entity,state);\n}\n}\n function setOneMutably(entity,state){\n const key=selectIdValue(entity,selectId);\n if (!(key in state.entities)){\n state.ids.push(key);\n}\n;\n state.entities[key]=entity;\n}\n function setManyMutably(newEntities,state){\n newEntities=ensureEntitiesArray(newEntities);\n for (const entity of newEntities){\n setOneMutably(entity,state);\n}\n}\n function setAllMutably(newEntities,state){\n newEntities=ensureEntitiesArray(newEntities);\n state.ids=[];;\n addManyMutably(newEntities,state);\n}\n function removeOneMutably(key,state){\n return removeManyMutably([key],state);\n}\n function removeManyMutably(keys,state){\n let didMutate=false;\n keys.forEach((key)=>{\n if (key in state.entities){\n delete state.entities[key];\n didMutate=true;\n}\n});\n if (didMutate){\n state.ids=state.ids.filter((id)=>id in state.entities);\n}\n}\n function removeAllMutably(state){\n Object.assign(state,{\n ids:[],\n entities:{}\n});\n}\n function takeNewKey(keys,update,state){\n const original3=state.entities[update.id];\n if (original3===void 0){\n return false;\n},original3,update.changes);\n const newKey=selectIdValue(updated,selectId);\n const hasNewKey=newKey !==update.id;\n if (hasNewKey){\n keys[update.id]=newKey;\n delete state.entities[update.id];\n}\n;\n state.entities[newKey]=updated;\n return hasNewKey;\n}\n function updateOneMutably(update,state){\n return updateManyMutably([update],state);\n}\n function updateManyMutably(updates,state){\n const newKeys={};;\n updates.forEach((update)=>{\n if (update.id in state.entities){\n updatesPerEntity[update.id]={\n id:update.id,\n // Spreads ignore falsy values,so this works even if there isn't\n // an existing update already at this key\n changes:{\n ...updatesPerEntity[update.id]?.changes,\n ...update.changes\n}\n};\n}\n});\n updates=Object.values(updatesPerEntity);\n const didMutateEntities=updates.length>0;\n if (didMutateEntities){\n const didMutateIds=updates.filter((update)=>takeNewKey(newKeys,update,state)).length>0;\n if (didMutateIds){\n state.ids=Object.values(state.entities).map((e)=>selectIdValue(e,selectId));\n}\n}\n}\n function upsertOneMutably(entity,state){\n return upsertManyMutably([entity],state);\n}\n function upsertManyMutably(newEntities,state){\n const [added,updated]=splitAddedUpdatedEntities(newEntities,selectId,state);\n addManyMutably(added,state);\n updateManyMutably(updated,state);\n}\n return{\n removeAll:createSingleArgumentStateOperator(removeAllMutably),\n addOne:createStateOperator(addOneMutably),\n addMany:createStateOperator(addManyMutably),\n setOne:createStateOperator(setOneMutably),\n setMany:createStateOperator(setManyMutably),\n setAll:createStateOperator(setAllMutably),\n updateOne:createStateOperator(updateOneMutably),\n updateMany:createStateOperator(updateManyMutably),\n upsertOne:createStateOperator(upsertOneMutably),\n upsertMany:createStateOperator(upsertManyMutably),\n removeOne:createStateOperator(removeOneMutably),\n removeMany:createStateOperator(removeManyMutably)\n};\n}\n\n// src/entities/sorted_state_adapter.ts\nfunction findInsertIndex(sortedItems,item,comparisonFunction){\n let lowIndex=0;\n let highIndex=sortedItems.length;\n while (lowIndex < highIndex){\n let middleIndex=lowIndex+highIndex>>>1;\n const currentItem=sortedItems[middleIndex];\n const res=comparisonFunction(item,currentItem);\n if (res>=0){\n lowIndex=middleIndex+1;\n}else{\n highIndex=middleIndex;\n}\n}\n return lowIndex;\n}\nfunction insert(sortedItems,item,comparisonFunction){\n const insertAtIndex=findInsertIndex(sortedItems,item,comparisonFunction);\n sortedItems.splice(insertAtIndex,0,item);\n return sortedItems;\n}\nfunction createSortedStateAdapter(selectId,comparer){\n const{\n removeOne,\n removeMany,\n removeAll\n}=createUnsortedStateAdapter(selectId);\n function addOneMutably(entity,state){\n return addManyMutably([entity],state);\n}\n function addManyMutably(newEntities,state,existingIds){\n newEntities=ensureEntitiesArray(newEntities);\n const existingKeys=new Set(existingIds ?? getCurrent(state.ids));\n const models=newEntities.filter((model)=>!existingKeys.has(selectIdValue(model,selectId)));\n if (models.length !==0){\n mergeFunction(state,models);\n}\n}\n function setOneMutably(entity,state){\n return setManyMutably([entity],state);\n}\n function setManyMutably(newEntities,state){\n newEntities=ensureEntitiesArray(newEntities);\n if (newEntities.length !==0){\n for (const item of newEntities){\n delete state.entities[selectId(item)];\n}\n mergeFunction(state,newEntities);\n}\n}\n function setAllMutably(newEntities,state){\n newEntities=ensureEntitiesArray(newEntities);;\n state.ids=[];\n addManyMutably(newEntities,state,[]);\n}\n function updateOneMutably(update,state){\n return updateManyMutably([update],state);\n}\n function updateManyMutably(updates,state){\n let appliedUpdates=false;\n let replacedIds=false;\n for (let update of updates){\n const entity=state.entities[update.id];\n if (!entity){\n continue;\n}\n appliedUpdates=true;\n Object.assign(entity,update.changes);\n const newId=selectId(entity);\n if (update.id !==newId){\n replacedIds=true;\n delete state.entities[update.id];\n const oldIndex=state.ids.indexOf(update.id);\n state.ids[oldIndex]=newId;\n state.entities[newId]=entity;\n}\n}\n if (appliedUpdates){\n mergeFunction(state,[],appliedUpdates,replacedIds);\n}\n}\n function upsertOneMutably(entity,state){\n return upsertManyMutably([entity],state);\n}\n function upsertManyMutably(newEntities,state){\n const [added,updated,existingIdsArray]=splitAddedUpdatedEntities(newEntities,selectId,state);\n if (added.length){\n addManyMutably(added,state,existingIdsArray);\n}\n if (updated.length){\n updateManyMutably(updated,state);\n}\n}\n function areArraysEqual(a,b){\n if (a.length !==b.length){\n return false;\n}\n for (let i=0;i < a.length;i++){\n if (a[i]===b[i]){\n continue;\n}\n return false;\n}\n return true;\n}\n const mergeFunction=(state,addedItems,appliedUpdates,replacedIds)=>{\n const currentEntities=getCurrent(state.entities);\n const currentIds=getCurrent(state.ids);\n const stateEntities=state.entities;\n let ids=currentIds;\n if (replacedIds){\n ids=new Set(currentIds);\n}\n let sortedEntities=[];\n for (const id of ids){\n const entity=currentEntities[id];\n if (entity){\n sortedEntities.push(entity);\n}\n}\n const wasPreviouslyEmpty=sortedEntities.length===0;\n for (const item of addedItems){\n stateEntities[selectId(item)]=item;\n if (!wasPreviouslyEmpty){\n insert(sortedEntities,item,comparer);\n}\n}\n if (wasPreviouslyEmpty){\n sortedEntities=addedItems.slice().sort(comparer);\n}else if (appliedUpdates){\n sortedEntities.sort(comparer);\n}\n const newSortedIds=sortedEntities.map(selectId);\n if (!areArraysEqual(currentIds,newSortedIds)){\n state.ids=newSortedIds;\n}\n};\n return{\n removeOne,\n removeMany,\n removeAll,\n addOne:createStateOperator(addOneMutably),\n updateOne:createStateOperator(updateOneMutably),\n upsertOne:createStateOperator(upsertOneMutably),\n setOne:createStateOperator(setOneMutably),\n setMany:createStateOperator(setManyMutably),\n setAll:createStateOperator(setAllMutably),\n addMany:createStateOperator(addManyMutably),\n updateMany:createStateOperator(updateManyMutably),\n upsertMany:createStateOperator(upsertManyMutably)\n};\n}){\n const{\n selectId,\n sortComparer\n}={\n sortComparer:false,\n selectId:(instance)=>instance.id,\n ...options\n};\n const stateAdapter=sortComparer ? createSortedStateAdapter(selectId,sortComparer) :createUnsortedStateAdapter(selectId);\n const stateFactory=createInitialStateFactory(stateAdapter);\n const selectorsFactory=createSelectorsFactory();\n return{\n selectId,\n sortComparer,\n ...stateFactory,\n ...selectorsFactory,\n ...stateAdapter\n};\n}\n\n// src/listenerMiddleware/index.ts\n\n\n// src/listenerMiddleware/exceptions.ts\nvar task=\"task\";\nvar listener=\"listener\";\nvar completed=\"completed\";\nvar cancelled=\"cancelled\";\nvar taskCancelled=(null && (`task-${cancelled}`));\nvar taskCompleted=(null && (`task-${completed}`));\nvar listenerCancelled=(null && (`${listener}-${cancelled}`));\nvar listenerCompleted=(null && (`${listener}-${completed}`));\nvar TaskAbortError=class{\n constructor(code){\n this.code=code;\n this.message=`${task}${cancelled}(reason:${code})`;\n}\n name=\"TaskAbortError\";\n message;\n};\n\n// src/listenerMiddleware/utils.ts\nvar assertFunction=(func,expected)=>{\n if (typeof func !==\"function\"){\n throw new TypeError(true ? redux_toolkit_modern_formatProdErrorMessage(32):0);\n}\n};\nvar noop2=()=>{\n};\nvar catchRejection=(promise,onError=noop2)=>{\n promise.catch(onError);\n return promise;\n};\nvar addAbortSignalListener=(abortSignal,callback)=>{\n abortSignal.addEventListener(\"abort\",callback,{\n once:true\n});\n return ()=>abortSignal.removeEventListener(\"abort\",callback);\n};\nvar abortControllerWithReason=(abortController,reason)=>{\n const signal=abortController.signal;\n if (signal.aborted){\n return;\n}\n if (!(\"reason\" in signal)){\n Object.defineProperty(signal,\"reason\",{\n enumerable:true,\n value:reason,\n configurable:true,\n writable:true\n});\n}\n;\n abortController.abort(reason);\n};\n\n// src/listenerMiddleware/task.ts\nvar validateActive=(signal)=>{\n if (signal.aborted){\n const{\n reason\n}=signal;\n throw new TaskAbortError(reason);\n}\n};\nfunction raceWithSignal(signal,promise){\n let cleanup=noop2;\n return new Promise((resolve,reject)=>{\n const notifyRejection=()=>reject(new TaskAbortError(signal.reason));\n if (signal.aborted){\n notifyRejection();\n return;\n}\n cleanup=addAbortSignalListener(signal,notifyRejection);\n promise.finally(()=>cleanup()).then(resolve,reject);\n}).finally(()=>{\n cleanup=noop2;\n});\n}\nvar runTask=async (task2,cleanUp)=>{\n try{\n await Promise.resolve();\n const value=await task2();\n return{\n status:\"ok\",\n value\n};\n}catch (error){\n return{\n status:error instanceof TaskAbortError ? \"cancelled\":\"rejected\",\n error\n};\n}finally{\n cleanUp?.();\n}\n};\nvar createPause=(signal)=>{\n return (promise)=>{\n return catchRejection(raceWithSignal(signal,promise).then((output)=>{\n validateActive(signal);\n return output;\n}));\n};\n};\nvar createDelay=(signal)=>{\n const pause=createPause(signal);\n return (timeoutMs)=>{\n return pause(new Promise((resolve)=>setTimeout(resolve,timeoutMs)));\n};\n};\n\n// src/listenerMiddleware/index.ts\nvar{\n assign:redux_toolkit_modern_assign\n}=Object;;\nvar alm=\"listenerMiddleware\";\nvar createFork=(parentAbortSignal,parentBlockingPromises)=>{\n const linkControllers=(controller)=>addAbortSignalListener(parentAbortSignal,()=>abortControllerWithReason(controller,parentAbortSignal.reason));\n return (taskExecutor,opts)=>{\n assertFunction(taskExecutor,\"taskExecutor\");\n const childAbortController=new AbortController();\n linkControllers(childAbortController);\n const result=runTask(async ()=>{\n validateActive(parentAbortSignal);\n validateActive(childAbortController.signal);\n const result2=await taskExecutor({\n pause:createPause(childAbortController.signal),\n delay:createDelay(childAbortController.signal),\n signal:childAbortController.signal\n});\n validateActive(childAbortController.signal);\n return result2;\n},()=>abortControllerWithReason(childAbortController,taskCompleted));\n if (opts?.autoJoin){\n parentBlockingPromises.push(result.catch(noop2));\n}\n return{\n result:createPause(parentAbortSignal)(result),\n cancel(){\n abortControllerWithReason(childAbortController,taskCancelled);\n}\n};\n};\n};\nvar createTakePattern=(startListening,signal)=>{\n const take=async (predicate,timeout)=>{\n validateActive(signal);\n let unsubscribe=()=>{\n};\n const tuplePromise=new Promise((resolve,reject)=>{\n let stopListening=startListening({\n predicate,\n effect:(action,listenerApi)=>{\n listenerApi.unsubscribe();\n resolve([action,listenerApi.getState(),listenerApi.getOriginalState()]);\n}\n});\n unsubscribe=()=>{\n stopListening();\n reject();\n};\n});\n const promises=[tuplePromise];\n if (timeout !=null){\n promises.push(new Promise((resolve)=>setTimeout(resolve,timeout,null)));\n}\n try{\n const output=await raceWithSignal(signal,Promise.race(promises));\n validateActive(signal);\n return output;\n}finally{\n unsubscribe();\n}\n};\n return (predicate,timeout)=>catchRejection(take(predicate,timeout));\n};\nvar getListenerEntryPropsFrom=(options)=>{\n let{\n type,\n actionCreator,\n matcher,\n predicate,\n effect\n}=options;\n if (type){\n predicate=createAction(type).match;\n}else if (actionCreator){\n type=actionCreator.type;\n predicate=actionCreator.match;\n}else if (matcher){\n predicate=matcher;\n}else if (predicate){\n}else{\n throw new Error(true ? redux_toolkit_modern_formatProdErrorMessage(21):0);\n}\n assertFunction(effect,\"options.listener\");\n return{\n predicate,\n type,\n effect\n};\n};\nvar createListenerEntry=redux_toolkit_modern_assign((options)=>{\n const{\n type,\n predicate,\n effect\n}=getListenerEntryPropsFrom(options);\n const entry={\n id:nanoid(),\n effect,\n type,\n predicate,\n pending:new Set(),\n unsubscribe:()=>{\n throw new Error(true ? redux_toolkit_modern_formatProdErrorMessage(22):0);\n}\n};\n return entry;\n},{\n withTypes:()=>createListenerEntry\n});\nvar findListenerEntry=(listenerMap,options)=>{\n const{\n type,\n effect,\n predicate\n}=getListenerEntryPropsFrom(options);\n return Array.from(listenerMap.values()).find((entry)=>{\n const matchPredicateOrType=typeof type===\"string\" ? entry.type===type:entry.predicate===predicate;\n return matchPredicateOrType && entry.effect===effect;\n});\n};\nvar cancelActiveListeners=(entry)=>{\n entry.pending.forEach((controller)=>{\n abortControllerWithReason(controller,listenerCancelled);\n});\n};\nvar createClearListenerMiddleware=(listenerMap)=>{\n return ()=>{\n listenerMap.forEach(cancelActiveListeners);\n listenerMap.clear();\n};\n};\nvar safelyNotifyError=(errorHandler,errorToNotify,errorInfo)=>{\n try{\n errorHandler(errorToNotify,errorInfo);\n}catch (errorHandlerError){\n setTimeout(()=>{\n throw errorHandlerError;\n},0);\n}\n};\nvar addListener=redux_toolkit_modern_assign(createAction(`${alm}/add`),{\n withTypes:()=>addListener\n});\nvar clearAllListeners=(null && (createAction(`${alm}/removeAll`)));\nvar removeListener=redux_toolkit_modern_assign(createAction(`${alm}/remove`),{\n withTypes:()=>removeListener\n});\nvar defaultErrorHandler=(...args)=>{\n console.error(`${alm}/error`,...args);\n};)=>{\n const listenerMap=new Map();\n const{\n extra,\n onError=defaultErrorHandler\n}=middlewareOptions;\n assertFunction(onError,\"onError\");\n const insertEntry=(entry)=>{\n entry.unsubscribe=()=>listenerMap.delete(entry.id);\n listenerMap.set(entry.id,entry);\n return (cancelOptions)=>{\n entry.unsubscribe();\n if (cancelOptions?.cancelActive){\n cancelActiveListeners(entry);\n}\n};\n};\n const startListening=(options)=>{\n const entry=findListenerEntry(listenerMap,options) ?? createListenerEntry(options);\n return insertEntry(entry);\n};\n redux_toolkit_modern_assign(startListening,{\n withTypes:()=>startListening\n});\n const stopListening=(options)=>{\n const entry=findListenerEntry(listenerMap,options);\n if (entry){\n entry.unsubscribe();\n if (options.cancelActive){\n cancelActiveListeners(entry);\n}\n}\n return !!entry;\n};\n redux_toolkit_modern_assign(stopListening,{\n withTypes:()=>stopListening\n});\n const notifyListener=async (entry,action,api,getOriginalState)=>{\n const internalTaskController=new AbortController();\n const take=createTakePattern(startListening,internalTaskController.signal);\n const autoJoinPromises=[];\n try{\n entry.pending.add(internalTaskController);,api,{\n getOriginalState,\n condition:(predicate,timeout)=>take(predicate,timeout).then(Boolean),\n take,\n delay:createDelay(internalTaskController.signal),\n pause:createPause(internalTaskController.signal),\n extra,\n signal:internalTaskController.signal,\n fork:createFork(internalTaskController.signal,autoJoinPromises),\n unsubscribe:entry.unsubscribe,\n subscribe:()=>{\n listenerMap.set(entry.id,entry);\n},\n cancelActiveListeners:()=>{\n entry.pending.forEach((controller,_,set)=>{\n if (controller !==internalTaskController){\n abortControllerWithReason(controller,listenerCancelled);\n set.delete(controller);\n}\n});\n},\n cancel:()=>{\n abortControllerWithReason(internalTaskController,listenerCancelled);\n entry.pending.delete(internalTaskController);\n},\n throwIfCancelled:()=>{\n validateActive(internalTaskController.signal);\n}\n})\n));\n}catch (listenerError){\n if (!(listenerError instanceof TaskAbortError)){\n safelyNotifyError(onError,listenerError,{\n raisedBy:\"effect\"\n});\n}\n}finally{\n await Promise.all(autoJoinPromises);\n abortControllerWithReason(internalTaskController,listenerCompleted);\n entry.pending.delete(internalTaskController);\n}\n};\n const clearListenerMiddleware=createClearListenerMiddleware(listenerMap);\n const middleware=(api)=>(next)=>(action)=>{\n if (!isAction3(action)){\n return next(action);\n}\n if (addListener.match(action)){\n return startListening(action.payload);\n}\n if (clearAllListeners.match(action)){\n clearListenerMiddleware();\n return;\n}\n if (removeListener.match(action)){\n return stopListening(action.payload);\n}\n let originalState=api.getState();\n const getOriginalState=()=>{\n if (originalState===INTERNAL_NIL_TOKEN){\n throw new Error(true ? redux_toolkit_modern_formatProdErrorMessage(23):0);\n}\n return originalState;\n};\n let result;\n try{\n result=next(action);\n if (listenerMap.size>0){\n const currentState=api.getState();\n const listenerEntries=Array.from(listenerMap.values());\n for (const entry of listenerEntries){\n let runListener=false;\n try{\n runListener=entry.predicate(action,currentState,originalState);\n}catch (predicateError){\n runListener=false;\n safelyNotifyError(onError,predicateError,{\n raisedBy:\"predicate\"\n});\n}\n if (!runListener){\n continue;\n}\n notifyListener(entry,action,api,getOriginalState);\n}\n}\n}finally{\n originalState=INTERNAL_NIL_TOKEN;\n}\n return result;\n};\n return{\n middleware,\n startListening,\n stopListening,\n clearListeners:clearListenerMiddleware\n};\n};\n\n// src/dynamicMiddleware/index.ts\n\nvar createMiddlewareEntry=(middleware)=>({\n middleware,\n applied:new Map()\n});\nvar matchInstance=(instanceId)=>(action)=>action?.meta?.instanceId===instanceId;\nvar createDynamicMiddleware=()=>{\n const instanceId=nanoid();\n const middlewareMap=new Map();\n const withMiddleware=Object.assign(createAction(\"dynamicMiddleware/add\",(...middlewares)=>({\n payload:middlewares,\n meta:{\n instanceId\n}\n})),{\n withTypes:()=>withMiddleware\n});\n const addMiddleware=Object.assign(function addMiddleware2(...middlewares){\n middlewares.forEach((middleware2)=>{\n getOrInsertComputed(middlewareMap,middleware2,createMiddlewareEntry);\n});\n},{\n withTypes:()=>addMiddleware\n});\n const getFinalMiddleware=(api)=>{\n const appliedMiddleware=Array.from(middlewareMap.values()).map((entry)=>getOrInsertComputed(entry.applied,api,entry.middleware));\n return compose3(...appliedMiddleware);\n};\n const isWithMiddleware=isAllOf(withMiddleware,matchInstance(instanceId));\n const middleware=(api)=>(next)=>(action)=>{\n if (isWithMiddleware(action)){\n addMiddleware(...action.payload);\n return api.dispatch;\n}\n return getFinalMiddleware(api)(next)(action);\n};\n return{\n middleware,\n addMiddleware,\n withMiddleware,\n instanceId\n};\n};\n\n// src/combineSlices.ts\n\nvar isSliceLike=(maybeSliceLike)=>\"reducerPath\" in maybeSliceLike && typeof maybeSliceLike.reducerPath===\"string\";\nvar getReducers=(slices)=>slices.flatMap((sliceOrMap)=>isSliceLike(sliceOrMap) ? [[sliceOrMap.reducerPath,sliceOrMap.reducer]] :Object.entries(sliceOrMap));\nvar ORIGINAL_STATE=Symbol.for(\"rtk-state-proxy-original\");\nvar isStateProxy=(value)=>!!value && !!value[ORIGINAL_STATE];\nvar stateProxyMap=new WeakMap();\nvar createStateProxy=(state,reducerMap,initialStateCache)=>getOrInsertComputed(stateProxyMap,state,()=>new Proxy(state,{\n get:(target,prop,receiver)=>{\n if (prop===ORIGINAL_STATE) return target;\n const result=Reflect.get(target,prop,receiver);\n if (typeof result===\"undefined\"){\n const cached=initialStateCache[prop];\n if (typeof cached !==\"undefined\") return cached;\n const reducer=reducerMap[prop];\n if (reducer){\n const reducerResult=reducer(void 0,{\n type:nanoid()\n});\n if (typeof reducerResult===\"undefined\"){\n throw new Error(true ? redux_toolkit_modern_formatProdErrorMessage(24):0);\n}\n initialStateCache[prop]=reducerResult;\n return reducerResult;\n}\n}\n return result;\n}\n}));\nvar redux_toolkit_modern_original=(state)=>{\n if (!isStateProxy(state)){\n throw new Error(true ? redux_toolkit_modern_formatProdErrorMessage(25):0);\n}\n return state[ORIGINAL_STATE];\n};;\nvar noopReducer=(state=emptyObject)=>state;\nfunction combineSlices(...slices){\n const reducerMap=Object.fromEntries(getReducers(slices));\n const getReducer=()=>Object.keys(reducerMap).length ? combineReducers2(reducerMap) :noopReducer;\n let reducer=getReducer();\n function combinedReducer(state,action){\n return reducer(state,action);\n}\n combinedReducer.withLazyLoadedSlices=()=>combinedReducer;;)=>{\n const{\n reducerPath,\n reducer:reducerToInject\n}=slice;\n const currentReducer=reducerMap[reducerPath];\n if (!config.overrideExisting && currentReducer && currentReducer !==reducerToInject){\n if (typeof process !==\"undefined\" && \"production\"===\"development\") // removed by dead control flow\n{}\n return combinedReducer;\n}\n if (config.overrideExisting && currentReducer !==reducerToInject){\n delete initialStateCache[reducerPath];\n}\n reducerMap[reducerPath]=reducerToInject;\n reducer=getReducer();\n return combinedReducer;\n};\n const selector=Object.assign(function makeSelector(selectorFn,selectState){\n return function selector2(state,...args){\n return selectorFn(createStateProxy(selectState ? selectState(state,...args):state,reducerMap,initialStateCache),...args);\n};\n},{\n original:redux_toolkit_modern_original\n});\n return Object.assign(combinedReducer,{\n inject,\n selector\n});\n}\n\n// src/formatProdErrorMessage.ts\nfunction redux_toolkit_modern_formatProdErrorMessage(code){\n return `Minified Redux Toolkit error #${code};visit https://redux-toolkit.js.org/Errors?code=${code}for the full message or use the non-minified dev environment for full errors. `;\n}\n\n//# sourceMappingURL=redux-toolkit.modern.mjs.map\n;// ./node_modules/react-toastify/dist/index.mjs\n\"use client\";\nfunction Mt(t){if(!t||typeof document==\"undefined\")return;let o=document.head||document.getElementsByTagName(\"head\")[0],e=document.createElement(\"style\");e.type=\"text/css\",o.firstChild?o.insertBefore(e,o.firstChild):o.appendChild(e),e.styleSheet?e.styleSheet.cssText=t:e.appendChild(document.createTextNode(t))}Mt(`:root{--toastify-color-light:#fff;--toastify-color-dark:#121212;--toastify-color-info:#3498db;--toastify-color-success:#07bc0c;--toastify-color-warning:#f1c40f;--toastify-color-error:hsl(6, 78%, 57%);--toastify-color-transparent:rgba(255, 255, 255, .7);--toastify-icon-color-info:var(--toastify-color-info);--toastify-icon-color-success:var(--toastify-color-success);--toastify-icon-color-warning:var(--toastify-color-warning);--toastify-icon-color-error:var(--toastify-color-error);--toastify-container-width:fit-content;--toastify-toast-width:320px;--toastify-toast-offset:16px;--toastify-toast-top:max(var(--toastify-toast-offset), env(safe-area-inset-top));--toastify-toast-right:max(var(--toastify-toast-offset), env(safe-area-inset-right));--toastify-toast-left:max(var(--toastify-toast-offset), env(safe-area-inset-left));--toastify-toast-bottom:max(var(--toastify-toast-offset), env(safe-area-inset-bottom));--toastify-toast-background:#fff;--toastify-toast-padding:14px;--toastify-toast-min-height:64px;--toastify-toast-max-height:800px;--toastify-toast-bd-radius:6px;--toastify-toast-shadow:0px 4px 12px rgba(0, 0, 0, .1);--toastify-font-family:sans-serif;--toastify-z-index:9999;--toastify-text-color-light:#757575;--toastify-text-color-dark:#fff;--toastify-text-color-info:#fff;--toastify-text-color-success:#fff;--toastify-text-color-warning:#fff;--toastify-text-color-error:#fff;--toastify-spinner-color:#616161;--toastify-spinner-color-empty-area:#e0e0e0;--toastify-color-progress-light:linear-gradient(to right, #4cd964, #5ac8fa, #007aff, #34aadc, #5856d6, #ff2d55);--toastify-color-progress-dark:#bb86fc;--toastify-color-progress-info:var(--toastify-color-info);--toastify-color-progress-success:var(--toastify-color-success);--toastify-color-progress-warning:var(--toastify-color-warning);--toastify-color-progress-error:var(--toastify-color-error);--toastify-color-progress-bgo:.2}.Toastify__toast-container{z-index:var(--toastify-z-index);-webkit-transform:translate3d(0,0,var(--toastify-z-index));position:fixed;width:var(--toastify-container-width);box-sizing:border-box;color:#fff;display:flex;flex-direction:column}.Toastify__toast-container--top-left{top:var(--toastify-toast-top);left:var(--toastify-toast-left)}.Toastify__toast-container--top-center{top:var(--toastify-toast-top);left:50%;transform:translate(-50%);align-items:center}.Toastify__toast-container--top-right{top:var(--toastify-toast-top);right:var(--toastify-toast-right);align-items:end}.Toastify__toast-container--bottom-left{bottom:var(--toastify-toast-bottom);left:var(--toastify-toast-left)}.Toastify__toast-container--bottom-center{bottom:var(--toastify-toast-bottom);left:50%;transform:translate(-50%);align-items:center}.Toastify__toast-container--bottom-right{bottom:var(--toastify-toast-bottom);right:var(--toastify-toast-right);align-items:end}.Toastify__toast{--y:0;position:relative;touch-action:none;width:var(--toastify-toast-width);min-height:var(--toastify-toast-min-height);box-sizing:border-box;margin-bottom:1rem;padding:var(--toastify-toast-padding);border-radius:var(--toastify-toast-bd-radius);box-shadow:var(--toastify-toast-shadow);max-height:var(--toastify-toast-max-height);font-family:var(--toastify-font-family);z-index:0;display:flex;flex:1 auto;align-items:center;word-break:break-word}@media only screen and (max-width:480px){.Toastify__toast-container{width:100vw;left:env(safe-area-inset-left);margin:0}.Toastify__toast-container--top-left,.Toastify__toast-container--top-center,.Toastify__toast-container--top-right{top:env(safe-area-inset-top);transform:translate(0)}.Toastify__toast-container--bottom-left,.Toastify__toast-container--bottom-center,.Toastify__toast-container--bottom-right{bottom:env(safe-area-inset-bottom);transform:translate(0)}.Toastify__toast-container--rtl{right:env(safe-area-inset-right);left:initial}.Toastify__toast{--toastify-toast-width:100%;margin-bottom:0;border-radius:0}}.Toastify__toast-container[data-stacked=true]{width:var(--toastify-toast-width)}.Toastify__toast--stacked{position:absolute;width:100%;transform:translate3d(0,var(--y),0) scale(var(--s));transition:transform .3s}.Toastify__toast--stacked[data-collapsed] .Toastify__toast-body,.Toastify__toast--stacked[data-collapsed] .Toastify__close-button{transition:opacity .1s}.Toastify__toast--stacked[data-collapsed=false]{overflow:visible}.Toastify__toast--stacked[data-collapsed=true]:not(:last-child)>*{opacity:0}.Toastify__toast--stacked:after{content:\"\";position:absolute;left:0;right:0;height:calc(var(--g) * 1px);bottom:100%}.Toastify__toast--stacked[data-pos=top]{top:0}.Toastify__toast--stacked[data-pos=bot]{bottom:0}.Toastify__toast--stacked[data-pos=bot].Toastify__toast--stacked:before{transform-origin:top}.Toastify__toast--stacked[data-pos=top].Toastify__toast--stacked:before{transform-origin:bottom}.Toastify__toast--stacked:before{content:\"\";position:absolute;left:0;right:0;bottom:0;height:100%;transform:scaleY(3);z-index:-1}.Toastify__toast--rtl{direction:rtl}.Toastify__toast--close-on-click{cursor:pointer}.Toastify__toast-icon{margin-inline-end:10px;width:22px;flex-shrink:0;display:flex}.Toastify--animate{animation-fill-mode:both;animation-duration:.5s}.Toastify--animate-icon{animation-fill-mode:both;animation-duration:.3s}.Toastify__toast-theme--dark{background:var(--toastify-color-dark);color:var(--toastify-text-color-dark)}.Toastify__toast-theme--light,.Toastify__toast-theme--colored.Toastify__toast--default{background:var(--toastify-color-light);color:var(--toastify-text-color-light)}.Toastify__toast-theme--colored.Toastify__toast--info{color:var(--toastify-text-color-info);background:var(--toastify-color-info)}.Toastify__toast-theme--colored.Toastify__toast--success{color:var(--toastify-text-color-success);background:var(--toastify-color-success)}.Toastify__toast-theme--colored.Toastify__toast--warning{color:var(--toastify-text-color-warning);background:var(--toastify-color-warning)}.Toastify__toast-theme--colored.Toastify__toast--error{color:var(--toastify-text-color-error);background:var(--toastify-color-error)}.Toastify__progress-bar-theme--light{background:var(--toastify-color-progress-light)}.Toastify__progress-bar-theme--dark{background:var(--toastify-color-progress-dark)}.Toastify__progress-bar--info{background:var(--toastify-color-progress-info)}.Toastify__progress-bar--success{background:var(--toastify-color-progress-success)}.Toastify__progress-bar--warning{background:var(--toastify-color-progress-warning)}.Toastify__progress-bar--error{background:var(--toastify-color-progress-error)}.Toastify__progress-bar-theme--colored.Toastify__progress-bar--info,.Toastify__progress-bar-theme--colored.Toastify__progress-bar--success,.Toastify__progress-bar-theme--colored.Toastify__progress-bar--warning,.Toastify__progress-bar-theme--colored.Toastify__progress-bar--error{background:var(--toastify-color-transparent)}.Toastify__close-button{color:#fff;position:absolute;top:6px;right:6px;background:transparent;outline:none;border:none;padding:0;cursor:pointer;opacity:.7;transition:.3s ease;z-index:1}.Toastify__toast--rtl .Toastify__close-button{left:6px;right:unset}.Toastify__close-button--light{color:#000;opacity:.3}.Toastify__close-button>svg{fill:currentColor;height:16px;width:14px}.Toastify__close-button:hover,.Toastify__close-button:focus{opacity:1}@keyframes Toastify__trackProgress{0%{transform:scaleX(1)}to{transform:scaleX(0)}}.Toastify__progress-bar{position:absolute;bottom:0;left:0;width:100%;height:100%;z-index:1;opacity:.7;transform-origin:left}.Toastify__progress-bar--animated{animation:Toastify__trackProgress linear 1 forwards}.Toastify__progress-bar--controlled{transition:transform .2s}.Toastify__progress-bar--rtl{right:0;left:initial;transform-origin:right;border-bottom-left-radius:initial}.Toastify__progress-bar--wrp{position:absolute;overflow:hidden;bottom:0;left:0;width:100%;height:5px;border-bottom-left-radius:var(--toastify-toast-bd-radius);border-bottom-right-radius:var(--toastify-toast-bd-radius)}.Toastify__progress-bar--wrp[data-hidden=true]{opacity:0}.Toastify__progress-bar--bg{opacity:var(--toastify-color-progress-bgo);width:100%;height:100%}.Toastify__spinner{width:20px;height:20px;box-sizing:border-box;border:2px solid;border-radius:100%;border-color:var(--toastify-spinner-color-empty-area);border-right-color:var(--toastify-spinner-color);animation:Toastify__spin .65s linear infinite}@keyframes Toastify__bounceInRight{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(3000px,0,0)}60%{opacity:1;transform:translate3d(-25px,0,0)}75%{transform:translate3d(10px,0,0)}90%{transform:translate3d(-5px,0,0)}to{transform:none}}@keyframes Toastify__bounceOutRight{20%{opacity:1;transform:translate3d(-20px,var(--y),0)}to{opacity:0;transform:translate3d(2000px,var(--y),0)}}@keyframes Toastify__bounceInLeft{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(-3000px,0,0)}60%{opacity:1;transform:translate3d(25px,0,0)}75%{transform:translate3d(-10px,0,0)}90%{transform:translate3d(5px,0,0)}to{transform:none}}@keyframes Toastify__bounceOutLeft{20%{opacity:1;transform:translate3d(20px,var(--y),0)}to{opacity:0;transform:translate3d(-2000px,var(--y),0)}}@keyframes Toastify__bounceInUp{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(0,3000px,0)}60%{opacity:1;transform:translate3d(0,-20px,0)}75%{transform:translate3d(0,10px,0)}90%{transform:translate3d(0,-5px,0)}to{transform:translateZ(0)}}@keyframes Toastify__bounceOutUp{20%{transform:translate3d(0,calc(var(--y) - 10px),0)}40%,45%{opacity:1;transform:translate3d(0,calc(var(--y) + 20px),0)}to{opacity:0;transform:translate3d(0,-2000px,0)}}@keyframes Toastify__bounceInDown{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(0,-3000px,0)}60%{opacity:1;transform:translate3d(0,25px,0)}75%{transform:translate3d(0,-10px,0)}90%{transform:translate3d(0,5px,0)}to{transform:none}}@keyframes Toastify__bounceOutDown{20%{transform:translate3d(0,calc(var(--y) - 10px),0)}40%,45%{opacity:1;transform:translate3d(0,calc(var(--y) + 20px),0)}to{opacity:0;transform:translate3d(0,2000px,0)}}.Toastify__bounce-enter--top-left,.Toastify__bounce-enter--bottom-left{animation-name:Toastify__bounceInLeft}.Toastify__bounce-enter--top-right,.Toastify__bounce-enter--bottom-right{animation-name:Toastify__bounceInRight}.Toastify__bounce-enter--top-center{animation-name:Toastify__bounceInDown}.Toastify__bounce-enter--bottom-center{animation-name:Toastify__bounceInUp}.Toastify__bounce-exit--top-left,.Toastify__bounce-exit--bottom-left{animation-name:Toastify__bounceOutLeft}.Toastify__bounce-exit--top-right,.Toastify__bounce-exit--bottom-right{animation-name:Toastify__bounceOutRight}.Toastify__bounce-exit--top-center{animation-name:Toastify__bounceOutUp}.Toastify__bounce-exit--bottom-center{animation-name:Toastify__bounceOutDown}@keyframes Toastify__zoomIn{0%{opacity:0;transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes Toastify__zoomOut{0%{opacity:1}50%{opacity:0;transform:translate3d(0,var(--y),0) scale3d(.3,.3,.3)}to{opacity:0}}.Toastify__zoom-enter{animation-name:Toastify__zoomIn}.Toastify__zoom-exit{animation-name:Toastify__zoomOut}@keyframes Toastify__flipIn{0%{transform:perspective(400px) rotateX(90deg);animation-timing-function:ease-in;opacity:0}40%{transform:perspective(400px) rotateX(-20deg);animation-timing-function:ease-in}60%{transform:perspective(400px) rotateX(10deg);opacity:1}80%{transform:perspective(400px) rotateX(-5deg)}to{transform:perspective(400px)}}@keyframes Toastify__flipOut{0%{transform:translate3d(0,var(--y),0) perspective(400px)}30%{transform:translate3d(0,var(--y),0) perspective(400px) rotateX(-20deg);opacity:1}to{transform:translate3d(0,var(--y),0) perspective(400px) rotateX(90deg);opacity:0}}.Toastify__flip-enter{animation-name:Toastify__flipIn}.Toastify__flip-exit{animation-name:Toastify__flipOut}@keyframes Toastify__slideInRight{0%{transform:translate3d(110%,0,0);visibility:visible}to{transform:translate3d(0,var(--y),0)}}@keyframes Toastify__slideInLeft{0%{transform:translate3d(-110%,0,0);visibility:visible}to{transform:translate3d(0,var(--y),0)}}@keyframes Toastify__slideInUp{0%{transform:translate3d(0,110%,0);visibility:visible}to{transform:translate3d(0,var(--y),0)}}@keyframes Toastify__slideInDown{0%{transform:translate3d(0,-110%,0);visibility:visible}to{transform:translate3d(0,var(--y),0)}}@keyframes Toastify__slideOutRight{0%{transform:translate3d(0,var(--y),0)}to{visibility:hidden;transform:translate3d(110%,var(--y),0)}}@keyframes Toastify__slideOutLeft{0%{transform:translate3d(0,var(--y),0)}to{visibility:hidden;transform:translate3d(-110%,var(--y),0)}}@keyframes Toastify__slideOutDown{0%{transform:translate3d(0,var(--y),0)}to{visibility:hidden;transform:translate3d(0,500px,0)}}@keyframes Toastify__slideOutUp{0%{transform:translate3d(0,var(--y),0)}to{visibility:hidden;transform:translate3d(0,-500px,0)}}.Toastify__slide-enter--top-left,.Toastify__slide-enter--bottom-left{animation-name:Toastify__slideInLeft}.Toastify__slide-enter--top-right,.Toastify__slide-enter--bottom-right{animation-name:Toastify__slideInRight}.Toastify__slide-enter--top-center{animation-name:Toastify__slideInDown}.Toastify__slide-enter--bottom-center{animation-name:Toastify__slideInUp}.Toastify__slide-exit--top-left,.Toastify__slide-exit--bottom-left{animation-name:Toastify__slideOutLeft;animation-timing-function:ease-in;animation-duration:.3s}.Toastify__slide-exit--top-right,.Toastify__slide-exit--bottom-right{animation-name:Toastify__slideOutRight;animation-timing-function:ease-in;animation-duration:.3s}.Toastify__slide-exit--top-center{animation-name:Toastify__slideOutUp;animation-timing-function:ease-in;animation-duration:.3s}.Toastify__slide-exit--bottom-center{animation-name:Toastify__slideOutDown;animation-timing-function:ease-in;animation-duration:.3s}@keyframes Toastify__spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n`);var L=t=>typeof t==\"number\"&&!isNaN(t),N=t=>typeof t==\"string\",P=t=>typeof t==\"function\",mt=t=>N(t)||L(t),B=t=>N(t)||P(t)?t:null,pt=(t,o)=>t===!1||L(t)&&t>0?t:o,z=t=>(0,external_React_.isValidElement)(t)||N(t)||P(t)||L(t);function Z(t,o,e=300){let{scrollHeight:r,style:s}=t;requestAnimationFrame(()=>{s.minHeight=\"initial\",s.height=r+\"px\",s.transition=`all ${e}ms`,requestAnimationFrame(()=>{s.height=\"0\",s.padding=\"0\",s.margin=\"0\",setTimeout(o,e)})})}function $({enter:t,exit:o,appendPosition:e=!1,collapse:r=!0,collapseDuration:s=300}){return function({children:a,position:d,preventExitTransition:c,done:T,nodeRef:g,isIn:v,playToast:x}){let C=e?`${t}--${d}`:t,S=e?`${o}--${d}`:o,E=(0,external_React_.useRef)(0);return (0,external_React_.useLayoutEffect)(()=>{let f=g.current,p=C.split(\" \"),b=n=>{n.target===g.current&&(x(),f.removeEventListener(\"animationend\",b),f.removeEventListener(\"animationcancel\",b),E.current===0&&n.type!==\"animationcancel\"&&f.classList.remove(...p))};(()=>{f.classList.add(...p),f.addEventListener(\"animationend\",b),f.addEventListener(\"animationcancel\",b)})()},[]),(0,external_React_.useEffect)(()=>{let f=g.current,p=()=>{f.removeEventListener(\"animationend\",p),r?Z(f,T,s):T()};v||(c?p():(()=>{E.current=1,f.className+=` ${S}`,f.addEventListener(\"animationend\",p)})())},[v]),external_React_.createElement(external_React_.Fragment,null,a)}}function J(t,o){return{content:tt(t.content,t.props),containerId:t.props.containerId,id:t.props.toastId,theme:t.props.theme,type:t.props.type,data:t.props.data||{},isLoading:t.props.isLoading,icon:t.props.icon,reason:t.removalReason,status:o}}function tt(t,o,e=!1){return Ut(t)&&!N(t.type)?Ft(t,{closeToast:o.closeToast,toastProps:o,data:o.data,isPaused:e}):P(t)?t({closeToast:o.closeToast,toastProps:o,data:o.data,isPaused:e}):t}function yt({closeToast:t,theme:o,ariaLabel:e=\"close\"}){return ot.createElement(\"button\",{className:`Toastify__close-button Toastify__close-button--${o}`,type:\"button\",onClick:r=>{r.stopPropagation(),t(!0)},\"aria-label\":e},ot.createElement(\"svg\",{\"aria-hidden\":\"true\",viewBox:\"0 0 14 16\"},ot.createElement(\"path\",{fillRule:\"evenodd\",d:\"M7.71 8.23l3.75 3.75-1.48 1.48-3.75-3.75-3.75 3.75L1 11.98l3.75-3.75L1 4.48 2.48 3l3.75 3.75L9.98 3l1.48 1.48-3.75 3.75z\"})))}function gt({delay:t,isRunning:o,closeToast:e,type:r=\"default\",hide:s,className:l,controlledProgress:a,progress:d,rtl:c,isIn:T,theme:g}){let v=s||a&&d===0,x={animationDuration:`${t}ms`,animationPlayState:o?\"running\":\"paused\"};a&&(x.transform=`scaleX(${d})`);let C=Tt(\"Toastify__progress-bar\",a?\"Toastify__progress-bar--controlled\":\"Toastify__progress-bar--animated\",`Toastify__progress-bar-theme--${g}`,`Toastify__progress-bar--${r}`,{[\"Toastify__progress-bar--rtl\"]:c}),S=P(l)?l({rtl:c,type:r,defaultClassName:C}):Tt(C,l),E={[a&&d>=1?\"onTransitionEnd\":\"onAnimationEnd\"]:a&&d<1?null:()=>{T&&e()}};return et.createElement(\"div\",{className:\"Toastify__progress-bar--wrp\",\"data-hidden\":v},et.createElement(\"div\",{className:`Toastify__progress-bar--bg Toastify__progress-bar-theme--${g}Toastify__progress-bar--${r}`}),et.createElement(\"div\",{role:\"progressbar\",\"aria-hidden\":v?\"true\":\"false\",\"aria-label\":\"notification timer\",className:S,style:x,...E}))}var Xt=1,at=()=>`${Xt++}`;function dist_t(t,o,e){let r=1,s=0,l=[],a=[],d=o,c=new Map,T=new Set,g=i=>(T.add(i),()=>T.delete(i)),v=()=>{a=Array.from(c.values()),T.forEach(i=>i())},x=({containerId:i,toastId:n,updateId:u})=>{let h=i?i!==t:t!==1,m=c.has(n)&&u==null;return h||m},C=(i,n)=>{c.forEach(u=>{var h;(n==null||n===u.props.toastId)&&((h=u.toggle)==null||h.call(u,i))})},S=i=>{var n,u;(u=(n=i.props)==null?void 0:n.onClose)==null||u.call(n,i.removalReason),i.isActive=!1},E=i=>{if(i==null)c.forEach(S);else{let n=c.get(i);n&&S(n)}v()},f=()=>{s-=l.length,l=[]},p=i=>{var m,_;let{toastId:n,updateId:u}=i.props,h=u==null;i.staleId&&c.delete(i.staleId),i.isActive=!0,c.set(n,i),v(),e(J(i,h?\"added\":\"updated\")),h&&((_=(m=i.props).onOpen)==null||_.call(m))};return{id:t,props:d,observe:g,toggle:C,removeToast:E,toasts:c,clearQueue:f,buildToast:(i,n)=>{if(x(n))return;let{toastId:u,updateId:h,data:m,staleId:_,delay:k}=n,M=h==null;M&&s++;let A={...d,style:d.toastStyle,key:r++,...Object.fromEntries(Object.entries(n).filter(([D,Y])=>Y!=null)),toastId:u,updateId:h,data:m,isIn:!1,className:B(n.className||d.toastClassName),progressClassName:B(n.progressClassName||d.progressClassName),autoClose:n.isLoading?!1:pt(n.autoClose,d.autoClose),closeToast(D){c.get(u).removalReason=D,E(u)},deleteToast(){let D=c.get(u);if(D!=null){if(e(J(D,\"removed\")),c.delete(u),s--,s<0&&(s=0),l.length>0){p(l.shift());return}v()}}};A.closeButton=d.closeButton,n.closeButton===!1||z(n.closeButton)?A.closeButton=n.closeButton:n.closeButton===!0&&(A.closeButton=z(d.closeButton)?d.closeButton:!0);let R={content:i,props:A,staleId:_};d.limit&&d.limit>0&&s>d.limit&&M?l.push(R):L(k)?setTimeout(()=>{p(R)},k):p(R)},setProps(i){d=i},setToggle:(i,n)=>{let u=c.get(i);u&&(u.toggle=n)},isToastActive:i=>{var n;return(n=c.get(i))==null?void 0:n.isActive},getSnapshot:()=>a}}var I=new Map,F=[],st=new Set,Vt=t=>st.forEach(o=>o(t)),bt=()=>I.size>0;function Qt(){F.forEach(t=>nt(t.content,t.options)),F=[]}var vt=(t,{containerId:o})=>{var e;return(e=I.get(o||1))==null?void 0:e.toasts.get(t)};function X(t,o){var r;if(o)return!!((r=I.get(o))!=null&&r.isToastActive(t));let e=!1;return I.forEach(s=>{s.isToastActive(t)&&(e=!0)}),e}function ht(t){if(!bt()){F=F.filter(o=>t!=null&&o.options.toastId!==t);return}if(t==null||mt(t))I.forEach(o=>{o.removeToast(t)});else if(t&&(\"containerId\"in t||\"id\"in t)){let o=I.get(t.containerId);o?o.removeToast(t.id):I.forEach(e=>{e.removeToast(t.id)})}})=>{I.forEach(o=>{o.props.limit&&(!t.containerId||o.id===t.containerId)&&o.clearQueue()})};function nt(t,o){z(t)&&(bt()||F.push({content:t,options:o}),I.forEach(e=>{e.buildToast(t,o)}))}function xt(t){var o;(o=I.get(t.containerId||1))==null||o.setToggle(t.id,t.fn)}function rt(t,o){I.forEach(e=>{(o==null||!(o!=null&&o.containerId)||(o==null?void 0:o.containerId)===e.id)&&e.toggle(t,o==null?void 0:o.id)})}function Et(t){let o=t.containerId||1;return{subscribe(e){let r=dist_t(o,t,Vt);I.set(o,r);let s=r.observe(e);return Qt(),()=>{s(),I.delete(o)}},setProps(e){var r;(r=I.get(o))==null||r.setProps(e)},getSnapshot(){var e;return(e=I.get(o))==null?void 0:e.getSnapshot()}}}function Pt(t){return st.add(t),()=>{st.delete(t)}}function Wt(t){return t&&(N(t.toastId)||L(t.toastId))?t.toastId:at()}function U(t,o){return nt(t,o),o.toastId}function V(t,o){return{...o,type:o&&o.type||t,toastId:Wt(o)}}function Q(t){return(o,e)=>U(o,V(t,e))}function y(t,o){return U(t,V(\"default\",o))}y.loading=(t,o)=>U(t,V(\"default\",{isLoading:!0,autoClose:!1,closeOnClick:!1,closeButton:!1,draggable:!1,...o}));function Gt(t,{pending:o,error:e,success:r},s){let l;o&&(l=N(o)?y.loading(o,s):y.loading(o.render,{...s,...o}));let a={isLoading:null,autoClose:null,closeOnClick:null,closeButton:null,draggable:null},d=(T,g,v)=>{if(g==null){y.dismiss(l);return}let x={type:T,...a,...s,data:v},C=N(g)?{render:g}:g;return l?y.update(l,{...x,...C}):y(C.render,{...x,...C}),v},c=P(t)?t():t;return c.then(T=>d(\"success\",r,T)).catch(T=>d(\"error\",e,T)),c}y.promise=Gt;y.success=Q(\"success\");y.info=Q(\"info\");y.error=Q(\"error\");y.warning=Q(\"warning\");y.warn=y.warning;y.dark=(t,o)=>U(t,V(\"default\",{theme:\"dark\",...o}));function qt(t){ht(t)}y.dismiss=qt;y.clearWaitingQueue=Ct;y.isActive=X;)=>{let e=vt(t,o);if(e){let{props:r,content:s}=e,l={delay:100,...r,...o,toastId:o.toastId||t,updateId:at()};l.toastId!==t&&(l.staleId=t);let a=l.render||s;delete l.render,U(a,l)}};y.done=t=>{y.update(t,{progress:1})};y.onChange=Pt;y.play=t=>rt(!0,t);y.pause=t=>rt(!1,t);function It(t){var a;let{subscribe:o,getSnapshot:e,setProps:r}=Kt(Et(t)).current;r(t);let s=(a=Yt(o,e,e))==null?void 0:a.slice();function l(d){if(!s)return[];let c=new Map;return t.newestOnTop&&s.reverse(),s.forEach(T=>{let{position:g}=T.props;c.has(g)||c.set(g,[]),c.get(g).push(T)}),Array.from(c,T=>d(T[0],T[1]))}return{getToastToRender:l,isToastActive:X,count:s==null?void 0:s.length}}function At(t){let[o,e]=kt(!1),[r,s]=kt(!1),l=St(null),a=St({start:0,delta:0,removalDistance:0,canCloseOnClick:!0,canDrag:!1,didMove:!1}).current,{autoClose:d,pauseOnHover:c,closeToast:T,onClick:g,closeOnClick:v}=t;xt({id:t.toastId,containerId:t.containerId,fn:e}),Zt(()=>{if(t.pauseOnFocusLoss)return x(),()=>{C()}},[t.pauseOnFocusLoss]);function x(){document.hasFocus()||p(),window.addEventListener(\"focus\",f),window.addEventListener(\"blur\",p)}function C(){window.removeEventListener(\"focus\",f),window.removeEventListener(\"blur\",p)}function S(m){if(t.draggable===!0||t.draggable===m.pointerType){b();let _=l.current;a.canCloseOnClick=!0,a.canDrag=!0,_.style.transition=\"none\",t.draggableDirection===\"x\"?(a.start=m.clientX,a.removalDistance=_.offsetWidth*(t.draggablePercent/100)):(a.start=m.clientY,a.removalDistance=_.offsetHeight*(t.draggablePercent===80?t.draggablePercent*1.5:t.draggablePercent)/100)}}function E(m){let{top:_,bottom:k,left:M,right:A}=l.current.getBoundingClientRect();m.nativeEvent.type!==\"touchend\"&&t.pauseOnHover&&m.clientX>=M&&m.clientX<=A&&m.clientY>=_&&m.clientY<=k?p():f()}function f(){e(!0)}function p(){e(!1)}function b(){a.didMove=!1,document.addEventListener(\"pointermove\",n),document.addEventListener(\"pointerup\",u)}function i(){document.removeEventListener(\"pointermove\",n),document.removeEventListener(\"pointerup\",u)}function n(m){let _=l.current;if(a.canDrag&&_){a.didMove=!0,o&&p(),t.draggableDirection===\"x\"?a.delta=m.clientX-a.start:a.delta=m.clientY-a.start,a.start!==m.clientX&&(a.canCloseOnClick=!1);let k=t.draggableDirection===\"x\"?`${a.delta}px,var(--y)`:`0,calc(${a.delt)}px+var(--y))`;_.style.transform=`translate3d(${k},0)`,_.style.opacity=`${1-Math.abs(a.delta/a.removalDistance)}`}}function u(){i();let m=l.current;if(a.canDrag&&a.didMove&&m){if(a.canDrag=!1,Math.abs(a.delta)>a.removalDistance){s(!0),t.closeToast(!0),t.collapseAll();return}m.style.transition=\"transform 0.2s,opacity 0.2s\",m.style.removeProperty(\"transform\"),m.style.removeProperty(\"opacity\")}}let h={onPointerDown:S,onPointerUp:E};return d&&c&&(h.onMouseEnter=p,t.stacked||(h.onMouseLeave=f)),v&&(h.onClick=m=>{g&&g(m),a.canCloseOnClick&&T(!0)}),{playToast:f,pauseToast:p,isRunning:o,preventExitTransition:r,toastRef:l,eventHandlers:h}}var Ot=typeof window!=\"undefined\"?external_React_.useLayoutEffect:external_React_.useEffect;var G=({theme:t,type:o,isLoading:e,...r})=>external_React_.createElement(\"svg\",{viewBox:\"0 0 24 24\",width:\"100%\",height:\"100%\",fill:t===\"colored\"?\"currentColor\":`var(--toastify-icon-color-${o})`,...r});function ao(t){return external_React_.createElement(G,{...t},external_React_.createElement(\"path\",{d:\"M23.32 17.191L15.438 2.184C14.728.833 13.416 0 11.996 0c-1.42 0-2.733.833-3.443 2.184L.533 17.448a4.744 4.744 0 0 4.368C1.243 23.167 2.555 24 3.975 24h16.05C22.22 24 24 22.044 24 19.632c0-.904-.251-1.746-.68-2.44zm-9.622 1.46c0 1.033-.724 1.823-1.698 1.823s-1.698-.79-1.698-1.822v-.043c0-1.028.724-1.822 1.698-1.822s1.698.79 1.698 1.822v.043zm.039-12.285l-.84 8.06c-.057.581-.408.943-.897.943-.49 0-.84-.367-.896-.942l-.84-8.065c-.057-.624.25-1.095.779-1.095h1.91c.528.005.84.476.784 1.1z\"}))}function so(t){return external_React_.createElement(G,{...t},external_React_.createElement(\"path\",{d:\"M12 0a12 12 0 1012 12A12.013 12.013 0 0012 0zm.25 5a1.5 1.5 0 11-1.5 1.5 1.5 1.5 0 011.5-1.5zm2.25 13.5h-4a1 1 0 010-2h.75a.25.25 0 00.25-.25v-4.5a.25.25 0 00-.25-.25h-.75a1 1 0 010-2h1a2 2 0 012 2v4.75a.25.25 0 00.25.25h.75a1 1 0 110 2z\"}))}function no(t){return external_React_.createElement(G,{...t},external_React_.createElement(\"path\",{d:\"M12 0a12 12 0 1012 12A12.014 12.014 0 0012 0zm6.927 8.2l-6.845 9.289a1.011 1.011 0 01-1.43.188l-4.888-3.908a1 1 0 111.25-1.562l4.076 3.261 6.227-8.451a1 1 0 111.61 1.183z\"}))}function ro(t){return external_React_.createElement(G,{...t},external_React_.createElement(\"path\",{d:\"M11.983 0a12.206 12.206 0 00-8.51 3.653A11.8 11.8 0 0 12.207 11.779 11.779 0 11.8 24h.214A12.111 12.111 0 0024 11.791 11.766 11.766 0 11.983 0zM10.5 16.542a1.476 1.476 0 011.449-1.53h.027a1.527 1.527 0 11.523 1.47 1.475 1.475 0 01-1.449 1.53h-.027a1.529 1.529 0 01-1.523-1.47zM11 12.5v-6a1 1 0 012 0v6a1 1 0 11-2 0z\"}))}function io(){return external_React_.createElement(\"div\",{className:\"Toastify__spinner\"})}var W={info:so,warning:ao,success:no,error:ro,spinner:io},lo=t=>t in W;function Nt({theme:t,type:o,isLoading:e,icon:r}){let s=null,l={theme:t,type:o};return r===!1||(P(r)?s=r({...l,isLoading:e}):eo(r)?s=oo(r,l):e?s=W.spinner():lo(o)&&(s=W[o](l))),s}var wt=t=>{let{isRunning:o,preventExitTransition:e,toastRef:r,eventHandlers:s,playToast:l}=At(t),{closeButton:a,children:d,autoClose:c,onClick:T,type:g,hideProgressBar:v,closeToast:x,transition:C,position:S,className:E,style:f,progressClassName:p,updateId:b,role:i,progress:n,rtl:u,toastId:h,deleteToast:m,isIn:_,isLoading:k,closeOnClick:M,theme:A,ariaLabel:R}=t,D=it(\"Toastify__toast\",`Toastify__toast-theme--${A}`,`Toastify__toast--${g}`,{[\"Toastify__toast--rtl\"]:u},{[\"Toastify__toast--close-on-click\"]:M}),Y=P(E)?E({rtl:u,position:S,type:g,defaultClassName:D}):it(D,E),ft=Nt(t),dt=!!n||!c,j={closeToast:x,type:g,theme:A},H=null;return a===!1||(P(a)?H=a(j):fo(a)?H=co(a,j):H=yt(j)),q.createElement(C,{isIn:_,done:m,position:S,preventExitTransition:e,nodeRef:r,playToast:l},q.createElement(\"div\",{id:h,tabIndex:0,onClick:T,\"data-in\":_,className:Y,...s,style:f,ref:r,..._&&{role:i,\"aria-label\":R}},ft!=null&&q.createElement(\"div\",{className:it(\"Toastify__toast-icon\",{[\"Toastify--animate-icon Toastify__zoom-enter\"]:!k})},ft),tt(d,t,!o),H,!t.customProgressBar&&q.createElement(gt,{...b&&!dt?{key:`p-${b}`},rtl:u,theme:A,delay:c,isRunning:o,isIn:_,closeToast:x,hide:v,type:g,className:p,controlledProgress:dt,progress:n||0})))};var K=(t,o=!1)=>({enter:`Toastify--animate Toastify__${t}-enter`,exit:`Toastify--animate Toastify__${t}-exit`,appendPosition:o}),lt=$(K(\"bounce\",!0)),mo=$(K(\"slide\",!0)),po=$(K(\"zoom\")),uo=$(K(\"flip\"));var _o={position:\"top-right\",transition:lt,autoClose:5e3,closeButton:!0,pauseOnHover:!0,pauseOnFocusLoss:!0,draggable:\"touch\",draggablePercent:80,draggableDirection:\"x\",role:\"alert\",theme:\"light\",\"aria-label\":\"Notifications Alt+T\",hotKeys:t=>t.altKey&&t.code===\"KeyT\"};function Lt(t){let o={..._o,...t},e=t.stacked,[r,s]=go(!0),l=To(null),{getToastToRender:a,isToastActive:d,count:c}=It(o),{className:T,style:g,rtl:v,containerId:x,hotKeys:C}=o;function S(f){let p=Dt(\"Toastify__toast-container\",`Toastify__toast-container--${f}`,{[\"Toastify__toast-container--rtl\"]:v});return P(T)?T({position:f,rtl:v,defaultClassName:p}):Dt(p,B(T))}function E(){e&&(s(!0),y.play())}return Ot(()=>{var f;if(e){let p=l.current.querySelectorAll('[data-in=\"true\"]'),b=12,i=(f=o.position)==null?void 0:f.includes(\"top\"),n=0,u=0;Array.from(p).reverse().forEach((h,m)=>{let _=h;_.classList.add(\"Toastify__toast--stacked\"),m>0&&(_.dataset.collapsed=`${r}`),_.dataset.pos||(_.dataset.pos=i?\"top\":\"bot\");let k=n*(r?.2:1)+(r?0:b*m);_.style.setProperty(\"--y\",`${i?k:k*-1}px`),_.style.setProperty(\"--g\",`${b}`),_.style.setProperty(\"--s\",`${1-(r?u:0)}`),n+=_.offsetHeight,u+=.025})}},[r,c,e]),yo(()=>{function f(p){var i;let b=l.current;C(p)&&((i=b.querySelector('[tabIndex=\"0\"]'))==null||i.focus(),s(!1),y.pause()),p.key===\"Escape\"&&(document.activeElement===b||b!=null&&b.contains(document.activeElement))&&(s(!0),y.play())}return document.addEventListener(\"keydown\",f),()=>{document.removeEventListener(\"keydown\",f)}},[C]),ct.createElement(\"section\",{ref:l,className:\"Toastify\",id:x,onMouseEnter:()=>{e&&(s(!1),y.pause())},onMouseLeave:E,\"aria-live\":\"polite\",\"aria-atomic\":\"false\",\"aria-relevant\":\"additions text\",\"aria-label\":o[\"aria-label\"]},a((f,p)=>{let b=p.length?{...g}:{...g,pointerEvents:\"none\"};return ct.createElement(\"div\",{tabIndex:-1,className:S(f),\"data-stacked\":e,style:b,key:`c-${f}`},p.map(({content:i,props:n})=>ct.createElement(wt,{...n,stacked:e,collapseAll:E,isIn:d(n.toastId,n.containerId),key:`t-${n.key}`},i)))}))}\n//# sourceMappingURL=index.mjs.map\n;// ./src/config.js\nconst isLocalhost=window.location.hostname==='localhost';\nconst BASE_URL=isLocalhost ? 'https://localhost/wordpress' :window.location.origin;\n\n// const API_BASE_URL=`${BASE_URL}/wp-json/ai-content/v1`;\n\n const src_config=(BASE_URL);\n;// ./src/redux/Slices/ChatbotSlice.js\n\n\n\nconst GetChatbotData=createAsyncThunk(\"chatbot/chatbot-data\",async ()=>{\n const response=await fetch(src_config+\"/wp-json/ai-content/v1/get-chatbot-setting\",{\n method:\"GET\",\n headers:{\n \"X-WP-Nonce\":wpApiSettings.nonce,\n \"Content-Type\":\"application/json\"\n}\n});\n const response_data=await response.json();\n return response_data;\n});\nconst SaveAppearanceSetting=createAsyncThunk(\"chatbot/save-chatbot-data\",async data=>{\n // Transform the data to match what the API expects\n const apiData={\n bg_color:data.primaryColor,\n text_color:data.secondaryColor,\n type:data.botIcon,\n icon:data.icon\n};\n const formData=new FormData();\n formData.append(\"bg_color\",data.BackgroundColor);\n formData.append(\"text_color\",data.textColor);\n formData.append(\"type\",data.botIconType);\n\n // Only append the file if it exists and botIconType is 'custom'\n if (data.botIconType===\"custom\" && data.customBotIcon && data.customBotIcon.length>0){\n formData.append(\"icon\",data.customBotIcon[0]);\n}\n const response=await fetch(src_config+\"/wp-json/ai-content/v1/save-appearance-setting\",{\n method:\"POST\",\n headers:{\n \"X-WP-Nonce\":wpApiSettings.nonce\n},\n body:formData\n});\n const response_data=await response.json();\n return response_data;\n});\nconst SaveMessageSettings=createAsyncThunk(\"chatbot/save-message-settings\",async data=>{\n const apiData={\n chat_bot_msg:data.welcomeMessage,\n placeholder_msg:data.placeholderText,\n chatbot_name:data.headerText\n};\n const response=await fetch(src_config+\"/wp-json/ai-content/v1/save-message-setting\",{\n method:\"POST\",\n headers:{\n \"X-WP-Nonce\":wpApiSettings.nonce,\n \"Content-Type\":\"application/json\"\n},\n body:JSON.stringify(apiData)\n});\n const response_data=await response.json();\n return response_data;\n});\nconst ChatbotSlice=createSlice({\n name:\"chatbot\",\n initialState:{\n is_loading:{\n load:false,\n appearance:false,\n message:false,\n mode:false\n},\n message:\"\"\n},\n extraReducers:builder=>{\n builder.addCase(GetChatbotData.pending,state=>{\n state.is_loading.load=true;\n state.error=null;\n}).addCase(GetChatbotData.fulfilled,(state,action)=>{\n if (action.payload?.success===true){\n state.ChatbotData=action.payload?.data?.data;\n state.message=action.payload?.data?.message;\n state.is_loading.load=false;\n}else if (action.payload?.success===false){\n state.error=action.payload?.data?.message;\n state.is_loading.load=false;\n}\n}).addCase(GetChatbotData.rejected,(state,action)=>{\n state.error=action.error?.message || \"An error occurred while fetching chatbot data\";\n state.is_loading.load=false;\n})\n\n // Save Chatbot Data cases\n .addCase(SaveAppearanceSetting.pending,state=>{\n state.is_loading.appearance=true;\n state.error=null;\n}).addCase(SaveAppearanceSetting.fulfilled,(state,action)=>{\n if (action.payload?.success===true){\n state.ChatbotData=action.payload?.data?.data || state.ChatbotData;\n y.success(action.payload?.data?.message || \"Settings saved successfully\");\n state.message=action.payload?.data?.message || \"Settings saved successfully\";\n state.is_loading.appearance=false;\n}else if (action.payload?.success===false){\n state.error=action.payload?.data?.message || \"Failed to save settings\";\n y.error(action.payload?.data?.message || \"Failed to save settings\");\n state.is_loading.appearance=false;\n}\n}).addCase(SaveAppearanceSetting.rejected,(state,action)=>{\n state.error=action.error?.message || \"An error occurred while saving chatbot data\";\n state.is_loading.appearance=false;\n})\n\n // Add these cases to your existing extraReducers in ChatbotSlice.js\n .addCase(SaveMessageSettings.pending,state=>{\n state.error=null;\n state.is_loading.message=true;\n}).addCase(SaveMessageSettings.fulfilled,(state,action)=>{\n if (action.payload?.success===true){\n state.message=action.payload?.message || \"Message settings saved successfully\";\n y.success(action.payload?.message || \"Message settings saved successfully\");\n state.is_loading.message=false;\n}else{\n state.error=action.payload?.data?.message || \"Failed to save message settings\";\n y.error(action.payload?.data?.message || \"Failed to save message settings\");\n state.is_loading.message=false;\n}\n}).addCase(SaveMessageSettings.rejected,(state,action)=>{\n state.error=action.error?.message || \"An error occurred while saving message settings\";\n state.is_loading.message=false;\n});\n}\n});\n const Slices_ChatbotSlice=(ChatbotSlice.reducer);\n;// ./src/utils/userClientStorage.js\n\n\nconst LS_KEYS=[\"wpai_auth_session_blob\",\"token\",\"user_data\",\"selectedLeads\",\"savedUrls\",\"wpai_agent_mode\",\"wpai_chatbot_visible\",\"wpai_sidebar_collapsed\",\"wpai_user_id\",\"wpai_push_device_id\",\"wpai_last_registered_fcm_token\",\"wpai_realtime_chat_enabled\",\"wpai_visitor_intelligence_enabled\",\"ChatbotAuthorization\"];;\nlet hydrated=false;\nlet inflightHydrate=null;\nlet saveTimer=null;\nconst pendingPatch=Object.create(null);\nfunction wpRestNonce(){\n if (typeof window===\"undefined\") return \"\";\n return window.wpApiSettings && window.wpApiSettings.nonce || window.wpaiSessionData && window.wpaiSessionData.nonce || \"\";\n}\nfunction restRoot(){\n if (typeof window===\"undefined\" || !window.wpApiSettings?.root) return \"\";\n return String(window.wpApiSettings.root).replace(/\\/+$/,\"\");\n}\nfunction userClientStorage_getUserClientStorageSync(key){\n const v=cache[key];\n if (v===undefined || v===null) return null;\n return String(v);\n}\nfunction userClientStorage_setUserClientStorageSync(key,value){\n const s=value==null ? null :typeof value===\"string\" ? value :String(value);\n if (s===null){\n delete cache[key];\n pendingPatch[key]=null;\n}else{\n cache[key]=s;\n pendingPatch[key]=s;\n}\n scheduleFlush();\n}\nfunction removeUserClientStorageSync(key){\n delete cache[key];\n pendingPatch[key]=null;\n scheduleFlush();\n}\nfunction scheduleFlush(){\n if (typeof window===\"undefined\") return;\n if (saveTimer) clearTimeout(saveTimer);\n saveTimer=window.setTimeout(()=>{\n saveTimer=null;\n void flushPending();\n},400);\n}\nasync function flushPending(){\n const keys=Object.keys(pendingPatch);\n if (keys.length===0) return;\n const patch={\n ...pendingPatch\n};\n for (const k of keys) delete pendingPatch[k];\n const root=restRoot();\n const nonce=wpRestNonce();\n if (!root || !nonce){\n Object.assign(pendingPatch,patch);\n return;\n}\n try{\n const res=await fetch(`${root}/autowp/v1/user-client-storage`,{\n method:\"POST\",\n credentials:\"same-origin\",\n headers:{\n \"Content-Type\":\"application/json\",\n \"X-WP-Nonce\":nonce\n},\n body:JSON.stringify({\n patch\n})\n});\n if (!res.ok){\n Object.assign(pendingPatch,patch);\n return;\n}\n const data=await res.json();\n if (data && typeof data===\"object\" && !Array.isArray(data)){\n cache={\n ...data\n};\n}\n purgeLegacyLocalStorage();\n}catch{\n Object.assign(pendingPatch,patch);\n}\n}\nfunction purgeLegacyLocalStorage(){\n if (typeof window===\"undefined\" || !window.localStorage) return;\n try{\n for (const k of LS_KEYS){\n try{\n window.localStorage.removeItem(k);\n}catch{\n \n}\n}\n}catch{\n \n}\n}\nfunction migrateLegacyLocalStorageToCache(){\n if (typeof window===\"undefined\" || !window.localStorage) return false;\n if (window.sessionStorage && window.sessionStorage.getItem(\"wpai_db_storage_migrated_v1\")){\n return false;\n}\n let changed=false;\n for (const k of LS_KEYS){\n try{\n const v=window.localStorage.getItem(k);\n if (v !=null && v !==\"\" && (cache[k]===undefined || cache[k]===null || cache[k]===\"\")){\n cache[k]=v;\n pendingPatch[k]=v;\n changed=true;\n}\n}catch{\n \n}\n}\n return changed;\n}\nasync function hydrateUserClientStorage(){\n if (typeof window===\"undefined\") return cache;\n if (hydrated) return cache;\n if (inflightHydrate) return inflightHydrate;\n inflightHydrate=(async ()=>{\n let serverOk=false;\n const root=restRoot();\n const nonce=wpRestNonce();\n if (root && nonce){\n try{\n const res=await fetch(`${root}/autowp/v1/user-client-storage`,{\n credentials:\"same-origin\",\n headers:{\n \"X-WP-Nonce\":nonce\n}\n});\n if (res.ok){\n const data=await res.json();\n if (data && typeof data===\"object\" && !Array.isArray(data)){\n cache={\n ...data\n};\n}\n serverOk=true;\n}\n}catch{\n \n}\n}\n const migrated=migrateLegacyLocalStorageToCache();\n if (migrated && Object.keys(pendingPatch).length>0){\n await flushPending();\n try{\n if (window.sessionStorage){\n window.sessionStorage.setItem(\"wpai_db_storage_migrated_v1\",\"1\");\n}\n}catch{\n \n}\n}\n if (serverOk){\n purgeLegacyLocalStorage();\n}\n hydrated=true;\n return cache;\n})();\n const out=await inflightHydrate;\n inflightHydrate=null;\n return out;\n}\nasync function flushUserClientStorageNow(){\n if (saveTimer && typeof window !==\"undefined\"){\n clearTimeout(saveTimer);\n saveTimer=null;\n}\n await flushPending();\n}\n;// ./src/utils/AuthToken.js\n\n\nconst WPAI_AUTH_SESSION_STORAGE_KEY=\"wpai_auth_session_blob\";\nfunction consumeBootstrapSessionBlob(){\n if (typeof window===\"undefined\" || !window.wpApiSettings){\n return null;\n}\n const boot=window.wpApiSettings.authSessionBlob;\n if (typeof boot !==\"string\" || boot.length===0){\n return null;\n}\n try{\n delete window.wpApiSettings.authSessionBlob;\n}catch{\n window.wpApiSettings.authSessionBlob=\"\";\n}\n return boot;\n}\nasync function clearAuthSessionInWordPressDb(){\n if (typeof window===\"undefined\" || !window.ajaxurl){\n return;\n}\n const nonce=window.wpApiSettings?.nonce;\n if (!nonce){\n return;\n}\n try{\n const body=new URLSearchParams();\n body.set(\"action\",\"wpai_clear_auth_session\");\n body.set(\"nonce\",nonce);\n await fetch(window.ajaxurl,{\n method:\"POST\",\n credentials:\"same-origin\",\n headers:{\n \"Content-Type\":\"application/x-www-form-urlencoded\"\n},\n body\n});\n}catch{\n // best-effort;local session is already cleared\n}\n}\nconst AuthToken_TokenHandle={\n apiError(error){\n let errorMessage=\"An unexpected error occurred\";\n if (error?.response){\n if (error.response.data && error.response.data.message){\n errorMessage=error.response.data.message;\n}else{\n errorMessage=`Server error:${error.response.status}`;\n}\n}else if (error?.request){\n errorMessage=\"No response from server. Please check your connection.\";\n}else if (error?.message){\n errorMessage=error.message;\n}\n return{\n success:false,\n error:errorMessage\n};\n},\n async createToken(token){\n try{\n if (typeof window===\"undefined\"){\n return{\n success:false,\n message:\"Browser context is not available.\"\n};\n}\n await hydrateUserClientStorage();\n userClientStorage_setUserClientStorageSync(WPAI_AUTH_SESSION_STORAGE_KEY,token);\n await flushUserClientStorageNow();\n return{\n success:true,\n message:\"Session stored\"\n};\n}catch (error){\n throw this.apiError(error);\n}\n},\n async getToken(){\n try{\n if (typeof window===\"undefined\"){\n return{\n success:false,\n token:null\n};\n}\n await hydrateUserClientStorage();\n let blob=userClientStorage_getUserClientStorageSync(WPAI_AUTH_SESSION_STORAGE_KEY);\n if (!blob){\n const migrated=consumeBootstrapSessionBlob();\n if (migrated){\n userClientStorage_setUserClientStorageSync(WPAI_AUTH_SESSION_STORAGE_KEY,migrated);\n await flushUserClientStorageNow();\n blob=userClientStorage_getUserClientStorageSync(WPAI_AUTH_SESSION_STORAGE_KEY);\n}\n}\n if (!blob){\n return{\n success:false,\n token:null\n};\n}\n return{\n success:true,\n token:{\n auth_token:blob\n}\n};\n}catch (error){\n throw this.apiError(error);\n}\n},\n async deleteToken(){\n try{\n if (typeof window !==\"undefined\"){\n await hydrateUserClientStorage();\n removeUserClientStorageSync(WPAI_AUTH_SESSION_STORAGE_KEY);\n removeUserClientStorageSync(\"ChatbotAuthorization\");\n await flushUserClientStorageNow();\n}\n await clearAuthSessionInWordPressDb();\n if (typeof window !==\"undefined\" && window.wpApiSettings){\n window.wpApiSettings.authSessionBlob=\"\";\n}\n return{\n success:true,\n message:\"Authentication token cleared successfully\"\n};\n}catch (error){\n throw this.apiError(error);\n}\n}\n};\n;// ./src/utils/index.js\n\n\n\n\nconst API_URLS={\n LOCALHOST:\"https://localhost:8000/api/v1/\",\n DEVELOPMENT:\"https://klizos.ddns.net:8000/api/v1/\",\n PRODUCTION:\"https://autowp.ai/api/v1/\"\n};\n\n\nconst getWpRestNonce=()=>{\n if (typeof window===\"undefined\") return \"\";\n return window.wpApiSettings && window.wpApiSettings.nonce || window.wpaiSessionData && window.wpaiSessionData.nonce || window.aiContentSettings && window.aiContentSettings.nonce || \"\";\n};\n\n\nconst getAutowpApiBaseUrl=()=>{\n if (typeof window !==\"undefined\" && window.wpaiPluginSettings?.directSaaSApiUrl){\n const u=String(window.wpaiPluginSettings.directSaaSApiUrl).trim();\n return u.endsWith(\"/\") ? u :`${u}/`;\n}\n if (typeof window !==\"undefined\" && window.wpApiSettings?.root){\n const root=String(window.wpApiSettings.root).replace(/\\/+$/,\"\");\n return `${root}/autowp/v1/`;\n}\n return API_URLS.LOCALHOST;\n};\nconst API_URL=getAutowpApiBaseurl(https://klizos.com/wp-content/plugins/wpai-plugin-new/build/);\nconst PLUGIN_INFO={\n name:\"wpai-wordpress-plugin\",\n version:window.wpApiSettings?.pluginVersion || window.wpaiPluginSettings?.version || \"1.0.0\"\n};\n\n\nconst REALTIME_CHAT_STORAGE_KEY=\"wpai_realtime_chat_enabled\";\nconst getRealtimeChatEnabled=()=>{\n if (typeof window===\"undefined\") return false;\n return getUserClientStorageSync(REALTIME_CHAT_STORAGE_KEY)===\"true\";\n};\nconst setRealtimeChatEnabled=enabled=>{\n if (typeof window===\"undefined\") return;\n setUserClientStorageSync(REALTIME_CHAT_STORAGE_KEY,enabled ? \"true\":\"false\");\n};\n\n\nconst VISITOR_INTELLIGENCE_STORAGE_KEY=\"wpai_visitor_intelligence_enabled\";\nconst getVisitorIntelligenceEnabled=()=>{\n if (typeof window===\"undefined\") return false;\n return getUserClientStorageSync(VISITOR_INTELLIGENCE_STORAGE_KEY)===\"true\";\n};\nconst setVisitorIntelligenceEnabled=enabled=>{\n if (typeof window===\"undefined\") return;\n setUserClientStorageSync(VISITOR_INTELLIGENCE_STORAGE_KEY,enabled ? \"true\":\"false\");\n};\n\n\nconst getRealtimeWsBaseUrl=()=>{\n if (typeof window===\"undefined\") return \"ws://localhost:8001\";\n return window.wpaiPluginSettings && window.wpaiPluginSettings.realtimeWsHost || \"ws://localhost:8001\";\n};\nconst getSessionID=()=>{\n if (typeof window !==\"undefined\" && window.wpaiSessionData){\n return window.wpaiSessionData.sessionID || null;\n}\n return null;\n};\nconst EncryptPayload=payload=>{\n const jsonData=JSON.stringify(payload);\n\n // Encode to UTF-8 before base64\n const encodedData=btoa(unescape(encodeURIComponent(jsonData)));\n return encodedData;\n};\nconst DecryptPayload=payload=>{\n try{\n if (!isBase64(payload)){\n return null;\n}\n const decodedData=atob(payload);\n const jsonData=JSON.parse(decodedData);\n return jsonData;\n}catch (error){\n // throw new Error('Failed to decode the data. Please check the data format.');\n return null;\n}\n};\nconst isBase64=str=>{\n try{\n return btoa(atob(str))===str;\n}catch (e){\n return false;\n}\n};\n\n\nconst normalizeEncodedDataForSession=encoded_data=>{\n if (encoded_data==null || encoded_data===\"\"){\n return{\n decoded:null,\n storagePayload:null\n};\n}\n if (typeof encoded_data===\"object\" && !Array.isArray(encoded_data)){\n return{\n decoded:encoded_data,\n storagePayload:EncryptPayload(encoded_data)\n};\n}\n if (typeof encoded_data===\"string\"){\n return{\n decoded:DecryptPayload(encoded_data),\n storagePayload:encoded_data\n};\n}\n return{\n decoded:null,\n storagePayload:null\n};\n};\nconst GetDataFromLocalStorage=async ()=>{\n const dataTokenResponse=await TokenHandle.getToken();\n const data=dataTokenResponse.token?.auth_token;\n if (data){\n const decryptedData=DecryptPayload(data);\n return decryptedData;\n}\n return null;\n};\nconst TimeDiff=date=>{\n const seconds=Math.floor((new Date() - new Date(date)) / 1000);\n const minutes=Math.floor(seconds / 60);\n if (minutes < 1) return \"Just now\";\n if (minutes < 60) return `${minutes}minute${minutes>1 ? \"s\":\"\"}ago`;\n const hours=Math.floor(minutes / 60);\n if (hours < 24) return `${hours}hour${hours>1 ? \"s\":\"\"}ago`;\n const days=Math.floor(hours / 24);\n return `${days}day${days>1 ? \"s\":\"\"}ago`;\n};\nconst WpAiPluginsPricing=[{\n title:\"Free Plan\",\n articlesPerMonth:15,\n chatbotResponses:5000,\n price:\"$0\",\n period:\"month\",\n description:\"Perfect for individuals or small projects just getting started.\",\n features:[\"Generate 15 articles per month\",\"5000 AI chatbot responses per month\",\"100 AI comments per month\",\"Basic chatbot features\",\"Basic SEO optimization\",\"Community support\",\"Basic AI model available for 15 times\",\"Knowledge Base Token Limit:50,0 tokens\"]\n},{\n title:\"Silver Plan\",\n articlesPerMonth:100,\n chatbotResponses:50000,\n price:\"$20\",\n period:\"month\",\n description:\"Great for growing businesses seeking to boost their digital footprint and engagement.\",\n features:[\"Generate 100 articles per month\",\"50,0 AI chatbot responses per month\",\"300 AI comments per month\",\"Custom chatbot personality\",\"Advanced SEO optimization\",\"Priority support\",\"Access to premium templates\",\"Custom content tone\",\"Keyword research tools\",\"Chat widget customization\",\"Knowledge Base Token Limit:100,0 tokens\",\"basic AI model available for 20 times\",\"Advanced AI model available for 50 times\",\"Ultra AI model available for 20 times\",\"Max AI model available for 10 times\"],\n popular:true\n},{\n title:\"Gold Plan\",\n articlesPerMonth:180,\n chatbotResponses:150000,\n price:\"$49\",\n period:\"month\",\n description:\"Ideal for small businesses looking to enhance their online presence.\",\n features:[\"Generate 180 articles per month\",\"1,50,0 AI chatbot responses per month\",\"800 AI comments per month\",\"Custom chatbot personality\",\"Advanced SEO optimization\",\"Priority support\",\"Access to premium templates\",\"Custom content tone\",\"Keyword research tools\",\"Chat widget customization\",\"Knowledge Base Token Limit:500,0 tokens\",\"basic AI model available for 35 times\",\"Advanced AI model available for 100 times\",\"Ultra AI model available for 30 times\",\"Max AI model available for 15 times\"],\n popular:true\n},{\n title:\"Platinum Plan\",\n articlesPerMonth:430,\n chatbotResponses:500000,\n price:\"$99\",\n period:\"month\",\n description:\"Best for agencies and large businesses needing extensive content generation.\",\n features:[\"Generate 430 articles per month\",\"5,0,0 AI chatbot responses per month\",\"3,0 AI comments per month\",\"Advanced chatbot analytics\",\"Multi-language support\",\"Expert SEO optimization\",\"24/7 Premium support\",\"All premium templates\",\"Advanced analytics\",\"API access\",\"Custom integrations\",\"Dedicated account manager\",\"Knowledge Base Token Limit:2,0,0 tokens\",\"basic AI model available for 65 times\",\"Advanced AI model available for 250 times\",\"Ultra AI model available for 90 times\",\"Max AI model available for 25 times\"]\n}];\n// EXTERNAL MODULE:./node_modules/@mui/icons-material/KeyboardArrowDown.js\nvar KeyboardArrowDown=__webpack_require__(9483);\n// EXTERNAL MODULE:./node_modules/@mui/icons-material/Check.js\nvar Check=__webpack_require__(4017);\n// EXTERNAL MODULE:./node_modules/@mui/icons-material/ErrorOutline.js\nvar ErrorOutline=__webpack_require__(1249);\n// EXTERNAL MODULE:./node_modules/@mui/icons-material/Refresh.js\nvar Refresh=__webpack_require__(2702);\n// EXTERNAL MODULE:./node_modules/@mui/icons-material/HourglassEmpty.js\nvar HourglassEmpty=__webpack_require__(1434);\n;// ./src/components/Chatbot/chatbotMarkdown.jsx\n\n\n\n\nfunction parseInline(text){\n if (!text) return null;\n const parts=[];\n let key=0;\n let i=0;\n const len=text.length;\n while (i < len){\n if (text.startsWith('**',i)){\n const end=text.indexOf('**',i+2);\n if (end !==-1){\n parts.push(external_React_default().createElement(\"strong\",{\n key:key++\n},text.slice(i+2,end)));\n i=end+2;\n continue;\n}\n}\n if (text[i]==='`'){\n const end=text.indexOf('`',i+1);\n if (end !==-1){\n parts.push(external_React_default().createElement(Box_Box,{\n component:\"code\",\n key:key++,\n sx:{\n px:.75,\n py:.125,\n borderRadius:.75,\n bgcolor:'rgba(15,23,42,.06)',\n fontFamily:'ui-monospace,SFMono-Regular,Menlo,monospace',\n fontSize:'0.84em'\n}\n},text.slice(i+1,end)));\n i=end+1;\n continue;\n}\n}\n let next=len;\n const boldAt=text.indexOf('**',i);\n const tickAt=text.indexOf('`',i);\n if (boldAt !==-1) next=Math.min(next, boldAt);\n if (tickAt !==-1) next=Math.min(next, tickAt);\n if (next>i){\n parts.push(external_React_default().createElement(\"span\",{\n key:key++\n},text.slice(i,next)));\n}\n i=next===i ? i+1:next;\n}\n return parts.length ? parts:text;\n}\nfunction ChatbotMarkdownContent({\n text,\n isUser,\n isStreaming\n}){\n if (text==null || text==='') return null;\n if (isStreaming){\n return external_React_default().createElement(Typography_Typography,{\n component:\"div\",\n variant:\"body1\",\n sx:{\n whiteSpace:'pre-wrap',\n wordBreak:'break-word',\n fontSize:'0.9375rem',\n lineHeight:1.65,\n fontWeight:400,\n letterSpacing:'0.02px'\n}\n},text);\n}\n const blocks=[];\n let rest=text;\n let bi=0;\n while (rest.length>0){\n const fence=rest.indexOf('```');\n if (fence===-1){\n blocks.push({\n type:'prose',\n content:rest\n});\n break;\n}\n if (fence>0){\n blocks.push({\n type:'prose',\n content:rest.slice(0,fence)\n});\n}\n rest=rest.slice(fence+3);\n const endFence=rest.indexOf('```');\n if (endFence===-1){\n blocks.push({\n type:'code',\n content:rest\n});\n break;\n}\n blocks.push({\n type:'code',\n content:rest.slice(0,endFence).replace(/^\\w*\\n/,'')\n});\n rest=rest.slice(endFence+3);\n}\n return external_React_default().createElement(Box_Box,{\n sx:{\n '&>*:not(:last-child)':{\n mb:1.25\n}\n}\n},blocks.map((block,idx)=>{\n if (block.type==='code'){\n return external_React_default().createElement(Box_Box,{\n key:`b-${bi++}`,\n component:\"pre\",\n sx:{\n m:0,\n p:1.5,\n borderRadius:2,\n overflow:'auto',\n maxWidth:'100%',\n bgcolor:isUser ? 'rgba(255,255,255,.12)':'rgba(15,23,42,.06)',\n border:'1px solid',\n borderColor:isUser ? 'rgba(255,255,255,.2)':'rgba(15,23,42,.08)',\n fontFamily:'ui-monospace,SFMono-Regular,Menlo,monospace',\n fontSize:'0.8125rem',\n lineHeight:1.5\n}\n},external_React_default().createElement(\"code\",null,block.content));\n}\n const lines=block.content.split('\\n');\n const nodes=[];\n let li=0;\n let listBuf=[];\n const flushList=()=>{\n if (!listBuf.length) return;\n nodes.push(external_React_default().createElement(Box_Box,{\n key:`ul-${li++}`,\n component:\"ul\",\n sx:{\n m:0,\n pl:2.25,\n color:'inherit',\n '& li':{\n mb:0.5\n}\n}\n},listBuf.map((item,j)=>external_React_default().createElement(Typography_Typography,{\n key:j,\n component:\"li\",\n variant:\"body1\",\n sx:{\n fontSize:'0.9375rem',\n lineHeight:1.65,\n display:'list-item'\n}\n},parseInline(item)))));\n listBuf=[];\n};\n for (const line of lines){\n const listMatch=line.match(/^\\s*[-*]\\s+(.*)$/);\n if (listMatch){\n listBuf.push(listMatch[1]);\n}else{\n flushList();\n if (line.trim()==='') continue;\n nodes.push(external_React_default().createElement(Typography_Typography,{\n key:`p-${idx}-${nodes.length}`,\n component:\"div\",\n variant:\"body1\",\n sx:{\n whiteSpace:'pre-wrap',\n wordBreak:'break-word',\n fontSize:'0.9375rem',\n lineHeight:1.65,\n fontWeight:400\n}\n},parseInline(line)));\n}\n}\n flushList();\n return external_React_default().createElement((external_React_default()).Fragment,{\n key:`frag-${idx}`\n},nodes);\n}));\n}\n;// ./src/components/Chatbot/ChatbotMessageBubble.jsx\n\n\n\n\n\n\n\n\n\nconst enterUp=(0,emotion_react_browser_esm.i7)`\n from{opacity:0;transform:translateY(10px)}\n to{opacity:1;transform:translateY(0)}\n`;\nconst streamGlow=(0,emotion_react_browser_esm.i7)`\n 0%{opacity:.35}\n 50%{opacity:1}\n 100%{opacity:.35}\n`;\nfunction InlineFormField(props){\n return external_React_default().createElement(TextField_TextField,(0,esm_extends.A)({},props,{\n sx:{\n '& .MuiOutlinedInput-root':{\n borderRadius:'12px',\n backgroundColor:'#fff',\n border:'1px solid rgba(0,0,0,.08)',\n '& fieldset':{\n borderColor:'transparent'\n},\n '&.Mui-focused':{\n boxShadow:'0 2px 8px rgba(0,0,0,.05)'\n}\n},\n '& .MuiInputBase-input':{\n padding:'12px 16px',\n fontSize:'0.9375rem'\n}\n}\n}));\n}\nconst ChatbotMessageBubble=({\n message,\n primaryColor='#6366f1',\n secondaryColor='#ffffff',\n onStreamComplete,\n onRetry\n})=>{\n const [visibleLen,setVisibleLen]=(0,external_React_.useState)(()=>!message.isStreaming ? (message.text || '').length :0);\n const timerRef=(0,external_React_.useRef)(null);\n const streamNotifiedRef=(0,external_React_.useRef)(false);\n (0,external_React_.useEffect)(()=>{\n if (timerRef.current) window.clearTimeout(timerRef.current);\n streamNotifiedRef.current=false;\n if (!message.isStreaming){\n setVisibleLen((message.text || '').length);\n return undefined;\n}\n const full=message.text || '';\n if (!full.length){\n if (!streamNotifiedRef.current){\n streamNotifiedRef.current=true;\n onStreamComplete?.(message.id);\n}\n return undefined;\n}\n let len=0;\n setVisibleLen(0);\n const tick=()=>{\n len=Math.min(full.length, len + 1);\n setVisibleLen(len);\n if (len>=full.length){\n if (!streamNotifiedRef.current){\n streamNotifiedRef.current=true;\n onStreamComplete?.(message.id);\n}\n return;\n}\n const ch=full[len - 1];\n const delay=ch==='\\n' ? 26:/[\\s,.;:]/.test(ch) ? 12:16+Math.round(Math.random() * 12);\n timerRef.current=window.setTimeout(tick,delay);\n};\n timerRef.current=window.setTimeout(tick,45);\n return ()=>{\n if (timerRef.current) window.clearTimeout(timerRef.current);\n};\n},[message.id,message.isStreaming,message.text,onStreamComplete]);\n if (message.formField){\n return external_React_default().createElement(Box_Box,{\n sx:{\n display:'flex',\n flexDirection:'column',\n alignItems:'flex-start',\n mb:2,\n ml:5,\n maxWidth:'85%'\n}\n},external_React_default().createElement(InlineFormField,{\n fullWidth:true,\n placeholder:message.placeholder,\n value:message.value,\n onChange:message.onChange,\n type:message.type || 'text',\n error:message.error,\n helperText:message.helperText,\n autoFocus:true,\n onKeyPress:e=>{\n if (e.key==='Enter'){\n e.preventDefault();\n message.onSubmit(e);\n}\n}\n}));\n}\n const isUser=message.isUser;\n const fullLen=(message.text || '').length;\n const displayText=(message.text || '').slice(0,visibleLen);\n const streamDone=!message.isStreaming || visibleLen>=fullLen;\n const showMd=!isUser && streamDone;\n const userBubbleBg=primaryColor || '#6366f1';\n const userText=secondaryColor || '#ffffff';\n return external_React_default().createElement(Box_Box,{\n sx:{\n display:'flex',\n flexDirection:'column',\n alignItems:isUser ? 'flex-end' :'flex-start',\n mb:2,\n animation:`${enterUp}0.38s cubic-bezier(.22,1,.36,1) both`,\n '@media (prefers-reduced-motion:reduce)':{\n animation:'none'\n},\n '&:hover .wpai-msg-meta':{\n opacity:1\n}\n}\n},external_React_default().createElement(Box_Box,{\n sx:{\n display:'flex',\n maxWidth:'88%',\n gap:1.25,\n width:'100%',\n justifyContent:isUser ? 'flex-end':'flex-start',\n alignItems:'flex-end'\n}\n},!isUser && external_React_default().createElement(Avatar_Avatar,{\n sx:{\n bgcolor:userBubbleBg,\n width:32,\n height:32,\n fontSize:'0.7rem',\n fontWeight:800,\n color:'#fff',\n boxShadow:'0 2px 8px rgba(15,23,42,.1)',\n border:'2px solid #fff'\n}\n},\"AI\"),external_React_default().createElement(Box_Box,{\n sx:{\n maxWidth:'calc(100% - 48px)',\n position:'relative'\n}\n},external_React_default().createElement(Paper_Paper,{\n elevation:0,\n sx:{\n p:'12px 16px',\n borderRadius:isUser ? '18px 18px 6px 18px' :'18px 18px 18px 6px',\n bgcolor:isUser ? userBubbleBg :'#f1f5f9',\n color:isUser ? userText :'#0f172a',\n boxShadow:isUser ? '0 4px 14px rgba(15,23,42,.12)' :'0 4px 14px rgba(15,23,42,.06)',\n border:'1px solid',\n borderColor:isUser ? 'transparent' :'rgba(15,23,42,.06)',\n position:'relative',\n transition:'box-shadow 0.2s ease',\n background:isUser ? userBubbleBg :'linear-gradient(180deg,#f8fafc 0%,#f1f5f9 100%)',\n ...(message.isStreaming && !isUser ?{\n boxShadow:'0 4px 20px rgba(99,102,241,.12)',\n '&::before':{\n content:'\"\"',\n position:'absolute',\n inset:0,\n borderRadius:'inherit',\n pointerEvents:'none',\n opacity:.5,\n background:`linear-gradient(110deg,transparent 0%,${userBubbleBg}22 45%,transparent 90%)`,\n animation:`${streamGlow}2s ease-in-out infinite`\n}\n})\n}\n},isUser ? external_React_default().createElement(Typography_Typography,{\n variant:\"body1\",\n component:\"div\",\n sx:{\n whiteSpace:'pre-wrap',\n wordBreak:'break-word',\n fontSize:'0.9375rem',\n lineHeight:1.65,\n fontWeight:450,\n color:userText\n}\n},message.text) :showMd ? external_React_default().createElement(ChatbotMarkdownContent,{\n text:message.text || '',\n isUser:false,\n isStreaming:false\n}) :external_React_default().createElement(ChatbotMarkdownContent,{\n text:displayText,\n isUser:false,\n isStreaming:true\n}),message.sources && message.sources.length>0 && external_React_default().createElement(Box_Box,{\n sx:{\n mt:2,\n pt:1.5,\n borderTop:'1px solid rgba(0,0,0,.06)'\n}\n},external_React_default().createElement(Typography_Typography,{\n variant:\"caption\",\n sx:{\n display:'block',\n mb:1,\n fontWeight:600,\n color:'inherit',\n opacity:0.75\n}\n},\"Sources\"),message.sources.map((source,index)=>external_React_default().createElement(Typography_Typography,{\n key:index,\n variant:\"caption\",\n sx:{\n display:'block',\n ml:.5,\n mb:.5,\n opacity:0.8\n}\n},\"\\u2022 \",source.source,\" (Relevance:\",source.relevance,\")\")))),external_React_default().createElement(Box_Box,{\n className:\"wpai-msg-meta\",\n sx:{\n display:'flex',\n alignItems:'center',\n justifyContent:isUser ? 'flex-end':'flex-start',\n gap:.75,\n mt:.5,\n opacity:.72,\n transition:'opacity 0.2s',\n flexWrap:'wrap'\n}\n},external_React_default().createElement(Typography_Typography,{\n variant:\"caption\",\n sx:{\n color:'#64748b',\n fontSize:'0.7rem'\n}\n},message.timestamp ? new Date(message.timestamp).toLocaleTimeString([],{\n hour:'2-digit',\n minute:'2-digit'\n}) :''),isUser && message.status==='sending' && external_React_default().createElement(Tooltip_Tooltip,{\n title:\"Sending\"\n},external_React_default().createElement(HourglassEmpty.A,{\n sx:{\n fontSize:14,\n color:'#94a3b8'\n},\n \"aria-hidden\":true\n})),isUser && message.status==='delivered' && external_React_default().createElement(Tooltip_Tooltip,{\n title:\"Delivered\"\n},external_React_default().createElement(Check.A,{\n sx:{\n fontSize:14,\n color:'#22c55e'\n},\n \"aria-hidden\":true\n})),isUser && message.status==='error' && external_React_default().createElement((external_React_default()).Fragment,null,external_React_default().createElement(Tooltip_Tooltip,{\n title:\"Failed to send\"\n},external_React_default().createElement(ErrorOutline.A,{\n sx:{\n fontSize:16,\n color:'#ef4444'\n},\n \"aria-hidden\":true\n})),external_React_default().createElement(Tooltip_Tooltip,{\n title:\"Retry\"\n},external_React_default().createElement(IconButton_IconButton,{\n size:\"small\",\n \"aria-label\":\"Retry sending message\",\n onClick:()=>onRetry?.(message),\n sx:{\n p:.25,\n color:'#ef4444'\n}\n},external_React_default().createElement(Refresh.A,{\n sx:{\n fontSize:18\n}\n})))))),isUser && external_React_default().createElement(Avatar_Avatar,{\n sx:{\n bgcolor:'secondary.main',\n width:32,\n height:32,\n fontSize:'0.75rem',\n fontWeight:700,\n boxShadow:'0 2px 8px rgba(15,23,42,.1)',\n border:'2px solid #fff'\n}\n},\"U\")));\n};\n const Chatbot_ChatbotMessageBubble=(external_React_default().memo(ChatbotMessageBubble));\n;// ./src/components/Chatbot/ChatbotTypingIndicator.jsx\n\n\n\nconst bounce=(0,emotion_react_browser_esm.i7)`\n 0%,80%,100%{transform:translateY(0);opacity:.35}\n 40%{transform:translateY(-6px);opacity:1}\n`;\nconst shimmer=(0,emotion_react_browser_esm.i7)`\n 0%{background-position:-120% 0}\n 100%{background-position:120% 0}\n`;\n\n\nfunction ChatbotTypingIndicator({\n primaryColor='#6366f1',\n ariaLabel='Assistant is typing',\n avatarLabel='AI'\n}){\n return external_React_default().createElement(Box_Box,{\n sx:{\n display:'flex',\n alignItems:'flex-end',\n gap:1.25,\n mb:2,\n maxWidth:'85%',\n animation:'wpaiFadeUp 0.35s ease-out both',\n '@keyframes wpaiFadeUp':{\n from:{\n opacity:0,\n transform:'translateY(8px)'\n},\n to:{\n opacity:1,\n transform:'translateY(0)'\n}\n}\n},\n role:\"status\",\n \"aria-live\":\"polite\",\n \"aria-label\":ariaLabel\n},external_React_default().createElement(Avatar_Avatar,{\n sx:{\n width:32,\n height:32,\n fontSize:'0.75rem',\n fontWeight:700,\n bgcolor:primaryColor,\n color:'#fff',\n boxShadow:'0 2px 8px rgba(15,23,42,.12)',\n border:'2px solid #fff'\n}\n},avatarLabel),external_React_default().createElement(Paper_Paper,{\n elevation:0,\n sx:{\n position:'relative',\n overflow:'hidden',\n px:2,\n py:1.5,\n borderRadius:'18px 18px 18px 6px',\n bgcolor:'#f1f5f9',\n border:'1px solid rgba(15,23,42,.06)',\n boxShadow:'0 4px 14px rgba(15,23,42,.06)',\n '&::before':{\n content:'\"\"',\n position:'absolute',\n inset:0,\n background:`linear-gradient(90deg,transparent 0%,rgba(255,255,255,.55) 50%,transparent 100%)`,\n backgroundSize:'200% 100%',\n animation:`${shimmer}1.4s ease-in-out infinite`,\n pointerEvents:'none',\n opacity:0.9\n}\n}\n},external_React_default().createElement(Box_Box,{\n sx:{\n display:'flex',\n alignItems:'center',\n gap:.75,\n position:'relative',\n zIndex:1\n}\n},[0,1,2].map(i=>external_React_default().createElement(Box_Box,{\n key:i,\n sx:{\n width:7,\n height:7,\n borderRadius:'50%',\n bgcolor:primaryColor,\n opacity:.85,\n animation:`${bounce}1s ease-in-out infinite`,\n animationDelay:`${i * .16}s`\n}\n})))));\n}\n const Chatbot_ChatbotTypingIndicator=(external_React_default().memo(ChatbotTypingIndicator));\n;// ./src/components/Chatbot/ChatbotMessageList.jsx\n\n\n\n\n\n\nconst MessageContainer=(0,styled.Ay)(Box_Box)(({\n theme\n})=>({\n flex:1,\n padding:theme.spacing(2,2.25),\n overflowY:'auto',\n overflowX:'hidden',\n background:'linear-gradient(180deg,#ffffff 0%,#fafbfc 100%)',\n position:'relative',\n scrollBehavior:'smooth',\n '&::-webkit-scrollbar':{\n width:6\n},\n '&::-webkit-scrollbar-thumb':{\n backgroundColor:'#cbd5e1',\n borderRadius:3\n},\n '&::-webkit-scrollbar-track':{\n backgroundColor:'#f1f5f9'\n}\n}));\n\n\nfunction ChatbotMessageList({\n containerRef,\n bottomRef,\n onScroll,\n messages,\n primaryColor,\n secondaryColor,\n onStreamComplete,\n onRetry,\n childrenAboveEnd,\n isLoading,\n liveAgentTyping,\n showNewMessages,\n onJumpToLatest\n}){\n return external_React_default().createElement(MessageContainer,{\n ref:containerRef,\n onScroll:onScroll,\n className:\"wpai_messageContainer\",\n role:\"log\",\n \"aria-live\":\"polite\",\n \"aria-relevant\":\"additions\",\n \"aria-label\":\"Chat messages\"\n},messages.map((message,index)=>external_React_default().createElement(Chatbot_ChatbotMessageBubble,{\n key:message.id || `${message.timestamp}-${index}`,\n message:message,\n primaryColor:primaryColor,\n secondaryColor:secondaryColor,\n onStreamComplete:onStreamComplete,\n onRetry:onRetry\n})),childrenAboveEnd,isLoading ? external_React_default().createElement(Chatbot_ChatbotTypingIndicator,{\n primaryColor:primaryColor\n}) :null,liveAgentTyping ? external_React_default().createElement(Chatbot_ChatbotTypingIndicator,{\n primaryColor:primaryColor,\n ariaLabel:\"Agent is typing\",\n avatarLabel:\"A\"\n}) :null,external_React_default().createElement(\"div\",{\n ref:bottomRef\n}),external_React_default().createElement(Fade_Fade,{\n in:showNewMessages\n},external_React_default().createElement(Box_Box,{\n sx:{\n position:'sticky',\n bottom:12,\n left:0,\n right:0,\n display:'flex',\n justifyContent:'center',\n pointerEvents:'none',\n zIndex:2,\n mt:-6\n}\n},external_React_default().createElement(Button_Button,{\n variant:\"contained\",\n size:\"small\",\n onClick:onJumpToLatest,\n startIcon:external_React_default().createElement(KeyboardArrowDown.A,null),\n sx:{\n pointerEvents:'auto',\n textTransform:'none',\n fontWeight:700,\n borderRadius:999,\n px:2,\n py:.75,\n boxShadow:'0 8px 24px rgba(15,23,42,.18)',\n bgcolor:primaryColor || undefined\n},\n \"aria-label\":\"Jump to latest messages\"\n},\"New messages\"))));\n}\n const Chatbot_ChatbotMessageList=(external_React_default().memo(ChatbotMessageList));\n;// ./src/components/Chatbot/useSmartChatScroll.js\n\nconst BOTTOM_THRESHOLD_PX=80;\n\n\nfunction useSmartChatScroll(chatHistory,isLoading){\n const containerRef=(0,external_React_.useRef)(null);\n const bottomRef=(0,external_React_.useRef)(null);\n const stickToBottomRef=(0,external_React_.useRef)(true);\n const prevCountRef=(0,external_React_.useRef)(0);\n const [showNewMessages,setShowNewMessages]=(0,external_React_.useState)(false);\n const onScroll=(0,external_React_.useCallback)(()=>{\n const el=containerRef.current;\n if (!el) return;\n const dist=el.scrollHeight - el.scrollTop - el.clientHeight;\n stickToBottomRef.current=dist < BOTTOM_THRESHOLD_PX;\n if (stickToBottomRef.current){\n setShowNewMessages(false);\n}\n},[]);\n (0,external_React_.useEffect)(()=>{\n const grew=chatHistory.length>prevCountRef.current;\n prevCountRef.current=chatHistory.length;\n if (grew && !stickToBottomRef.current){\n setShowNewMessages(true);\n}\n if (stickToBottomRef.current){\n requestAnimationFrame(()=>{\n bottomRef.current?.scrollIntoView({\n behavior:'smooth',\n block:'end'\n});\n});\n}\n},[chatHistory,isLoading]);\n const scrollToBottom=(0,external_React_.useCallback)(()=>{\n stickToBottomRef.current=true;\n setShowNewMessages(false);\n requestAnimationFrame(()=>{\n bottomRef.current?.scrollIntoView({\n behavior:'smooth',\n block:'end'\n});\n});\n},[]);\n return{\n containerRef,\n bottomRef,\n onScroll,\n showNewMessages,\n scrollToBottom\n};\n}\n;// ./src/components/Chatbot/Chatbot.jsx\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction resolveChatbotWidgetVisible(){\n const fromCache=userClientStorage_getUserClientStorageSync('wpai_chatbot_visible');\n if (fromCache==='true'){\n return true;\n}\n if (fromCache==='false'){\n return false;\n}\n if (typeof window !=='undefined' && window.wpaiPluginSettings && window.wpaiPluginSettings.chatbotVisible !=null){\n const s=String(window.wpaiPluginSettings.chatbotVisible).toLowerCase();\n return s==='true' || s==='1';\n}\n return false;\n}\n\n\n\n\n// Define animations\nconst fadeIn=(0,emotion_react_browser_esm.i7)`\n from{opacity:0;transform:scale(.95)}\n to{opacity:1;transform:scale(1)}\n`;\nconst slideUp=(0,emotion_react_browser_esm.i7)`\n from{transform:translateY(20px);opacity:0}\n to{transform:translateY(0);opacity:1}\n`;\nconst pulseAnimation=(0,emotion_react_browser_esm.i7)`\n 0%{transform:scale(1)}\n 50%{transform:scale(1.1)}\n 100%{transform:scale(1)}\n`;\nconst ripple=(0,emotion_react_browser_esm.i7)`\n 0%{\n transform:scale(.8);\n opacity:1;\n}\n 100%{\n transform:scale(2.4);\n opacity:0;\n}\n`;\nconst ChatWindow=(0,styled.Ay)(Paper_Paper)(({\n theme\n})=>({\n position:'fixed',\n bottom:28,\n right:28,\n width:380,\n height:600,\n maxWidth:'calc(100vw - 16px)',\n maxHeight:'calc(100vh - 24px)',\n display:'flex',\n flexDirection:'column',\n zIndex:1000,\n overflow:'hidden',\n boxShadow:'0 5px 40px rgba(0,0,0,.16)',\n borderRadius:'16px',\n animation:`${fadeIn}0.4s cubic-bezier(.175,.885,.32,1.275)`,\n background:'#fff',\n className:'wpai_chatWindow',\n border:'1px solid rgba(0,0,0,.08)',\n [theme.breakpoints.down('sm')]:{\n width:'calc(100vw - 16px)',\n height:'min(560px, calc(100vh - 88px))',\n right:8,\n bottom:8,\n borderRadius:'14px'\n}\n}));\nconst ChatHeader=(0,styled.Ay)(Box_Box)(({\n theme,\n textcolor,\n bgcolor\n})=>({\n padding:theme.spacing(1.5,2),\n background:bgcolor || theme.palette.primary.main,\n color:textcolor || '#fff',\n display:'flex',\n alignItems:'center',\n justifyContent:'space-between',\n borderTopLeftRadius:'16px',\n borderTopRightRadius:'16px',\n height:'56px',\n position:'relative',\n zIndex:2,\n boxShadow:'0 1px 2px rgba(0,0,0,.1)',\n className:'wpai_chatHeader',\n '& .MuiTypography-subtitle1':{\n fontSize:'0.938rem',\n fontWeight:500,\n letterSpacing:'0.15px',\n color:textcolor || '#fff'\n},\n '& .MuiTypography-caption':{\n fontSize:'0.75rem',\n color:textcolor ? `${textcolor}99`:'rgba(255,255,255,.7)',\n letterSpacing:'0.4px',\n lineHeight:1.2\n},\n '& .MuiAvatar-root':{\n width:36,\n height:36,\n backgroundColor:'transparent',\n '& svg':{\n width:20,\n height:20,\n color:textcolor || '#fff'\n}\n},\n '& .MuiIconButton-root':{\n padding:'6px',\n marginLeft:'8px',\n '&:hover':{\n backgroundColor:'rgba(255,255,255,.1)'\n},\n '& svg':{\n fontSize:'20px'\n}\n}\n}));\nconst ChatInput=(0,styled.Ay)(Box_Box)(({\n theme\n})=>({\n padding:theme.spacing(2.5,3),\n background:'#fff',\n borderTop:'1px solid rgba(0,0,0,.08)',\n className:'wpai_chatInput'\n}));\n\n// Update the InputField styling\nconst InputField=(0,styled.Ay)(TextField_TextField)(({\n theme,\n primaryColor\n})=>({\n className:'wpai_inputField',\n '& .MuiOutlinedInput-root':{\n borderRadius:'12px',\n backgroundColor:'#f9fafb',\n border:'1px solid rgba(0,0,0,.08)',\n transition:'all 0.2s ease',\n '&:hover':{\n backgroundColor:'#f3f4f6',\n borderColor:'rgba(0,0,0,.12)'\n},\n '& fieldset':{\n borderColor:'transparent'\n},\n '&:hover fieldset':{\n border:'none'\n},\n '&.Mui-focused':{\n backgroundColor:'#fff',\n borderColor:primaryColor || theme.palette.primary.main,\n boxShadow:'0 2px 8px rgba(0,0,0,.05)',\n '& fieldset':{\n border:'none'\n}\n},\n '& .MuiInputAdornment-root':{\n marginRight:theme.spacing(1),\n height:'100%',\n maxHeight:'none'\n}\n},\n '& .MuiInputBase-input':{\n padding:'14px 16px',\n fontSize:'0.9375rem',\n lineHeight:1.6,\n '&::placeholder':{\n color:'#9ca3af',\n opacity:1\n}\n}\n}));\nconst ChatToggle=(0,styled.Ay)(IconButton_IconButton)(({\n theme,\n bgcolor\n})=>({\n position:'fixed',\n bottom:28,\n right:28,\n width:56,\n height:56,\n background:bgcolor || theme.palette.primary.main,\n color:'#fff',\n boxShadow:'0 4px 20px rgba(0,0,0,.15)',\n borderRadius:'50%',\n '&:hover':{\n background:bgcolor || theme.palette.primary.dark,\n transform:'translateY(-2px)'\n},\n transition:'all 0.3s ease',\n animation:`${pulseAnimation}2s infinite`,\n zIndex:999,\n className:'wpai_chatToggle',\n '& svg':{\n width:24,\n height:24\n}\n}));\nconst FormResponse=(0,styled.Ay)(Box_Box)(({\n theme\n})=>({\n display:'flex',\n flexDirection:'column',\n gap:theme.spacing(2),\n maxWidth:'85%',\n animation:`${slideUp}0.3s ease-out`,\n marginLeft:theme.spacing(5),\n marginBottom:theme.spacing(2),\n className:'wpai_formResponse'\n}));\nconst FormField=(0,styled.Ay)(TextField_TextField)(({\n theme\n})=>({\n '& .MuiOutlinedInput-root':{\n borderRadius:'12px',\n backgroundColor:'#fff',\n border:'1px solid rgba(0,0,0,.08)',\n transition:'all 0.2s ease',\n '&:hover':{\n backgroundColor:'#f9fafb',\n borderColor:'rgba(0,0,0,.12)'\n},\n '& fieldset':{\n borderColor:'transparent'\n},\n '&.Mui-focused':{\n backgroundColor:'#fff',\n borderColor:theme.palette.primary.main,\n boxShadow:'0 2px 8px rgba(0,0,0,.05)',\n '& fieldset':{\n border:'none'\n}\n}\n},\n '& .MuiInputBase-input':{\n padding:'12px 16px',\n fontSize:'0.9375rem',\n '&::placeholder':{\n color:'#9ca3af',\n opacity:1\n}\n}\n}));\nconst MAX_RETRIES=2;\nconst TIMEOUT_DURATION=30000;// 30 seconds\n\nconst getBotIcon=(botIcon,customBotIcon)=>{\n if (botIcon==='custom' && customBotIcon){\n return external_React_default().createElement(\"img\",{\n src:customBotIcon,\n alt:\"Custom Bot Icon\",\n style:{\n width:'40px',\n height:'40px'\n}\n});\n}\n switch (botIcon){\n case 'robot':\n return external_React_default().createElement(SmartToy.A,null);\n case 'assistant':\n return external_React_default().createElement(icons_material_Person.A,null);\n default:\n return external_React_default().createElement(SmartToy.A,null);\n}\n};\nconst Chatbot=()=>{\n const [isOpen,setIsOpen]=(0,external_React_.useState)(false);\n const [input,setInput]=(0,external_React_.useState)('');\n const [chatHistory,setChatHistory]=(0,external_React_.useState)([]);\n const [isLoading,setIsLoading]=(0,external_React_.useState)(false);\n const{\n containerRef,\n bottomRef,\n onScroll,\n showNewMessages,\n scrollToBottom\n}=useSmartChatScroll(chatHistory,isLoading);\n const handleStreamComplete=(0,external_React_.useCallback)(msgId=>{\n setChatHistory(prev=>prev.map(m=>m.id===msgId ?{\n ...m,\n isStreaming:false\n}:m));\n},[]);\n const [userId]=(0,external_React_.useState)(`user_${Math.random().toString(36).substr(2,9)}`);\n const [showUserForm,setShowUserForm]=(0,external_React_.useState)(false);\n const [userFormData,setUserFormData]=(0,external_React_.useState)({\n name:'',\n email:'',\n phone:''\n});\n const [formStep,setFormStep]=(0,external_React_.useState)(0);\n const [responseCount,setResponseCount]=(0,external_React_.useState)(0);\n const theme=styles_useTheme_useTheme();\n const dispatch=useDispatch(););\n\n // Update the state variables\n const [userInfo,setUserInfo]=(0,external_React_.useState)({\n email:'',\n name:'',\n phone:''\n});\n const [currentQuestion,setCurrentQuestion]=(0,external_React_.useState)(null);\n const [isCollectingInfo,setIsCollectingInfo]=(0,external_React_.useState)(false);\n const [infoCollectionAttempted,setInfoCollectionAttempted]=(0,external_React_.useState)(false);\n\n // Live chat with admin (realtime) – requires email to start;uses WebSocket API\n const [showLiveChatEmailForm,setShowLiveChatEmailForm]=(0,external_React_.useState)(false);\n const [liveChatEmail,setLiveChatEmail]=(0,external_React_.useState)('');\n const [liveChatEmailError,setLiveChatEmailError]=(0,external_React_.useState)('');\n const [liveChatRequested,setLiveChatRequested]=(0,external_React_.useState)(false);\n const [liveChatRequestId,setLiveChatRequestId]=(0,external_React_.useState)(null);\n const [liveChatAccepted,setLiveChatAccepted]=(0,external_React_.useState)(false);\n const [liveChatConnecting,setLiveChatConnecting]=(0,external_React_.useState)(false);\n const [liveAgentTyping,setLiveAgentTyping]=(0,external_React_.useState)(false);\n const wsLiveChatRef=(0,external_React_.useRef)(null);\n const liveChatAcceptedRef=(0,external_React_.useRef)(false);\n const customerTypingIdleTimerRef=(0,external_React_.useRef)(null);\n const customerTypingSentTrueRef=(0,external_React_.useRef)(false);\n (0,external_React_.useEffect)(()=>{\n liveChatAcceptedRef.current=liveChatAccepted;\n},[liveChatAccepted]);\n const clearCustomerTypingIdleTimer=()=>{\n if (customerTypingIdleTimerRef.current){\n clearTimeout(customerTypingIdleTimerRef.current);\n customerTypingIdleTimerRef.current=null;\n}\n};\n const sendCustomerTyping=typing=>{\n if (!liveChatAcceptedRef.current) return;\n const ws=wsLiveChatRef.current;\n if (!ws || ws.readyState !==WebSocket.OPEN) return;\n try{\n ws.send(JSON.stringify({\n type:'typing',\n typing\n}));\n}\n};\n const flushCustomerTypingStopped=(0,external_React_.useCallback)(()=>{\n clearCustomerTypingIdleTimer();\n if (customerTypingSentTrueRef.current){\n customerTypingSentTrueRef.current=false;\n sendCustomerTyping(false);\n}\n},[]);\n const handleChatInputChange=(0,external_React_.useCallback)(e=>{\n const v=e.target.value;\n setInput(v);\n if (!liveChatRequested || !liveChatAcceptedRef.current) return;\n const ws=wsLiveChatRef.current;\n if (!ws || ws.readyState !==WebSocket.OPEN) return;\n if (!customerTypingSentTrueRef.current){\n customerTypingSentTrueRef.current=true;\n sendCustomerTyping(true);\n}\n clearCustomerTypingIdleTimer();\n customerTypingIdleTimerRef.current=setTimeout(()=>{\n customerTypingIdleTimerRef.current=null;\n if (customerTypingSentTrueRef.current){\n customerTypingSentTrueRef.current=false;\n sendCustomerTyping(false);\n}\n},1700);\n},[liveChatRequested]);\n\n // Auth session comes from server-backed storage (TokenHandle / user meta)\n (0,external_React_.useEffect)(()=>{\n;\n (async ()=>{\n try{\n const dataTokenResponse=await AuthToken_TokenHandle.getToken();\n const dataToken=dataTokenResponse.token?.auth_token;\n if (!dataToken){\n return;\n}\n const decodedData=DecryptPayload(dataToken);\n if (decodedData?.data?.authorization?.token && decodedData?.data?.user){\n SetChatbotUserSetting({\n user:decodedData?.data?.user,\n token:decodedData?.data?.authorization?.token\n});\n}\n}\n})();\n},[]);\n const{\n ChatbotData,\n is_chatbot_load\n}=useSelector(state=>state.chatbot);\n const [chatbotStyles,setChatbotStyles]=(0,external_React_.useState)({\n primaryColor:'',\n secondaryColor:'',\n botIcon:'robot',\n welcomeMessage:'Hello! How can I help you today???',\n placeholderText:'Type a message...',\n headerText:'AI Assistant'\n});\n const [isVisible,setIsVisible]=(0,external_React_.useState)(()=>resolveChatbotWidgetVisible());\n (0,external_React_.useEffect)(()=>{\n const checkVisibility=()=>{\n setIsVisible(resolveChatbotWidgetVisible());\n};\n checkVisibility();\n const onCustom=()=>checkVisibility();\n window.addEventListener('storage',checkVisibility);\n document.addEventListener('wpai_chatbot_visibility_changed',onCustom);\n return ()=>{\n window.removeEventListener('storage',checkVisibility);\n document.removeEventListener('wpai_chatbot_visibility_changed',onCustom);\n};\n},[]);\n (0,external_React_.useEffect)(()=>{\n dispatch(GetChatbotData());\n},[dispatch]);\n (0,external_React_.useEffect)(()=>{\n if (chatHistory.length===0 && chatbotStyles.welcomeMessage){\n setChatHistory([{\n id:'welcome',\n text:chatbotStyles.welcomeMessage,\n isUser:false,\n timestamp:new Date().toISOString()\n}]);\n}\n},[chatbotStyles,ChatbotData,is_chatbot_load]);\n (0,external_React_.useEffect)(()=>{\n if (!is_chatbot_load && ChatbotData){\n const welcomeMsg=ChatbotData.init_msg || 'Hello! How can I help you today?';\n setChatbotStyles({\n primaryColor:ChatbotData.bot_bg_color,\n secondaryColor:ChatbotData.bot_text_color,\n botIcon:ChatbotData.bot_icon || 'robot',\n welcomeMessage:ChatbotData.init_msg || 'Hello! How can I help you today??',\n placeholderText:ChatbotData.placeholder_text || 'Type a message...',\n headerText:ChatbotData.bot_name || 'AI Assistant'\n});\n}\n},[is_chatbot_load,ChatbotData]);\n const handleStartLiveChatClick=()=>{\n setShowLiveChatEmailForm(true);\n setLiveChatEmailError('');\n};\n const connectLiveChatWs=(companyName,customerId,emailId)=>{\n setLiveAgentTyping(false);\n clearCustomerTypingIdleTimer();\n customerTypingSentTrueRef.current=false;\n const base=getRealtimeWsBaseurl(https://klizos.com/wp-content/plugins/wpai-plugin-new/build/).replace(/\\/$/,');\n const wsUrl=`${base}/ws/customer?company_name=${encodeURIComponent('google.com')}&customer_id=${encodeURIComponent(customerId)}&email=${encodeURIComponent(emailId)}`;\n setLiveChatConnecting(true);\n try{\n const ws=new WebSocket(wsUrl);\n wsLiveChatRef.current=ws;\n ws.onopen=()=>{\n setLiveChatConnecting(false);\n ws.send(JSON.stringify({\n type:'request_chat'\n}));\n};\n ws.onmessage=event=>{\n try{\n const msg=JSON.parse(event.data);\n switch (msg.type){\n case 'request_sent':\n setLiveChatRequestId(msg.request_id || null);\n setChatHistory(prev=>[...prev,{\n id:`lc-${Date.now()}-${Math.random().toString(36).slice(2,7)}`,\n text:'Waiting for an agent to join…',\n isUser:false,\n timestamp:new Date().toISOString()\n}]);\n scrollToBottom();\n break;\n case 'chat_accepted':\n setLiveChatAccepted(true);\n setLiveAgentTyping(false);\n setChatHistory(prev=>[...prev,{\n id:`lc-${Date.now()}-${Math.random().toString(36).slice(2,7)}`,\n text:\"An agent has joined. You can chat now.\",\n isUser:false,\n timestamp:new Date().toISOString()\n}]);\n scrollToBottom();\n break;\n case 'message':\n setLiveAgentTyping(false);\n setChatHistory(prev=>[...prev,{\n id:`lc-${Date.now()}-${Math.random().toString(36).slice(2,7)}`,\n text:msg.body || '',\n isUser:false,\n timestamp:new Date().toISOString()\n}]);\n scrollToBottom();\n break;\n case 'typing':\n if (Object.prototype.hasOwnProperty.call(msg,'from_staff')){\n setLiveAgentTyping(!!msg.typing);\n}\n break;\n case 'message_sent':\n break;\n case 'error':\n if (msg.body){\n setChatHistory(prev=>[...prev,{\n text:`Error:${msg.body}`,\n isUser:false,\n timestamp:new Date().toISOString()\n}]);\n scrollToBottom();\n}\n break;\n default:\n break;\n}\n}\n};\n ws.onclose=event=>{\n setLiveChatConnecting(false);\n setLiveAgentTyping(false);\n clearCustomerTypingIdleTimer();\n customerTypingSentTrueRef.current=false;\n if (event.code===4000 || event.code===4001){\n setChatHistory(prev=>[...prev,{\n id:`lc-${Date.now()}-${Math.random().toString(36).slice(2,7)}`,\n text:event.code===4001 ? 'This company is not available for chat.':'Live chat is not configured.',\n isUser:false,\n timestamp:new Date().toISOString()\n}]);\n scrollToBottom();\n}\n};\n ws.onerror=()=>{\n setLiveChatConnecting(false);\n};\n}catch (err){\n setLiveChatConnecting(false);\n setChatHistory(prev=>[...prev,{\n text:'Could not connect to live chat. Please try again later.',\n isUser:false,\n timestamp:new Date().toISOString()\n}]);\n scrollToBottom();\n}\n};\n const handleStartLiveChat=e=>{\n e.preventDefault();\n const email=liveChatEmail.trim();\n const emailRegex=/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n if (!email){\n setLiveChatEmailError('Please enter your email address.');\n return;\n}\n if (!emailRegex.test(email)){\n setLiveChatEmailError('Please enter a valid email address.');\n return;\n}\n setLiveChatEmailError('');\n setLiveChatRequested(true);\n setShowLiveChatEmailForm(false);\n setLiveChatEmail('');\n setChatHistory(prev=>[...prev,{\n id:`lc-${Date.now()}-u`,\n text:`I've requested to talk live with the team. (${email})`,\n isUser:true,\n status:'delivered',\n timestamp:new Date().toISOString()\n}]);\n setChatHistory(prev=>[...prev,{\n id:`lc-${Date.now()}-sys`,\n text:\"Connecting you to live chat…\",\n isUser:false,\n timestamp:new Date().toISOString()\n}]);\n scrollToBottom();\n const companyName=typeof window !=='undefined' && window.wpaiPluginSettings?.realtimeCompanyName || window.location.hostname || 'example.com';\n const customerId=userId;\n const emailId='md.moaj@klizos.com';\n connectLiveChatWs(companyName,customerId,emailId);\n if (typeof window !=='undefined' && window.dispatchEvent){\n window.dispatchEvent(new CustomEvent('wpai_live_chat_requested',{\n detail:{\n email,\n customerId\n}\n}));\n}\n};\n (0,external_React_.useEffect)(()=>{\n return ()=>{\n clearCustomerTypingIdleTimer();\n if (customerTypingSentTrueRef.current && wsLiveChatRef.current?.readyState===WebSocket.OPEN){\n try{\n wsLiveChatRef.current.send(JSON.stringify({\n type:'typing',\n typing:false\n}));\n}\n}\n customerTypingSentTrueRef.current=false;\n if (wsLiveChatRef.current){\n try{\n wsLiveChatRef.current.close();\n}\n wsLiveChatRef.current=null;\n}\n};\n},[]);\n const handleSubmit=async (e,retryCount=0,forcedText=null,retryUserId=null)=>{\n e.preventDefault();\n const textToSend=(forcedText !=null ? forcedText :input).trim();\n if (!textToSend) return;\n\n // Live chat:send via WebSocket when agent has accepted\n if (liveChatRequested && liveChatAccepted && wsLiveChatRef.current?.readyState===WebSocket.OPEN){\n flushCustomerTypingStopped();\n setLiveAgentTyping(false);\n setChatHistory(prev=>[...prev,{\n id:`lc-${Date.now()}-um`,\n text:textToSend,\n isUser:true,\n status:'delivered',\n timestamp:new Date().toISOString()\n}]);\n setInput('');\n scrollToBottom();\n try{\n wsLiveChatRef.current.send(JSON.stringify({\n type:'message',\n body:textToSend\n}));\n}\n return;\n}\n\n // Check if we need to collect user information\n const infoCollectionResponse=await handleUserInfoCollection(textToSend);\n if (infoCollectionResponse){\n // Don't show the user's input for sensitive information\n if (isCollectingInfo){\n setInput('');\n setIsLoading(true);\n const stamp=()=>new Date().toISOString();\n const withId=msg=>({\n ...msg,\n id:msg.id || `info-${Date.now()}-${Math.random().toString(36).slice(2,7)}`,\n timestamp:msg.timestamp || stamp()\n});\n if (infoCollectionResponse.multiResponse){\n infoCollectionResponse.responses.forEach(response=>{\n setChatHistory(prev=>[...prev,withId(response)]);\n});\n}else{\n setChatHistory(prev=>[...prev,withId(infoCollectionResponse)]);\n}\n setIsLoading(false);\n return;\n}\n}\n let userMsgId=retryUserId;\n if (!userMsgId){\n userMsgId=`u-${Date.now()}-${Math.random().toString(36).slice(2,9)}`;\n setChatHistory(prev=>[...prev,{\n id:userMsgId,\n text:textToSend,\n isUser:true,\n status:'sending',\n timestamp:new Date().toISOString()\n}]);\n setInput('');\n}\n const userMessage={\n text:textToSend,\n isUser:true,\n timestamp:new Date().toISOString()\n};\n setIsLoading(true);\n const controller=new AbortController();\n const timeoutId=setTimeout(()=>controller.abort(),TIMEOUT_DURATION);\n try{\n const nonce=window?.wpApiSettings?.nonce;\n if (!nonce){\n throw new Error('Authentication error. Please refresh the page and try again.');\n}\n\n // Create the authentication payload\n const authPayload={\n session_id:getSessionID(),\n jwt_token:chatbotUserSetting?.token || null,\n license_key:chatbotUserSetting?.user?.license_key || '75282BBE2D526D0D',\n domainName:chatbotUserSetting?.user?.domain_name || window.location.hostname || 'example.com'\n};\n\n // Create the request data\n const requestData={\n message:userMessage.text,\n conversation_id:null,\n context:''\n};\n\n // Encrypt both payloads\n const encryptedAuthData=EncryptPayload(authPayload);\n const encryptedRequestData=EncryptPayload(requestData);\n // Make the API request\n const response=await fetch(`${API_URL}chatbot/chat`,{\n method:'POST',\n headers:{\n 'Content-Type':'application/json',\n 'X-WP-Nonce':nonce,\n // 'X-Encrypted-Payload':encryptedAuthData,\n 'X-Encrypted-Payload':\"eyJqd3RfdG9rZW4iOiJleUowZVhBaU9pSktWMVFpTENKaGJHY2lPaUpJVXpJMU5pSjkuZXlKcGMzTWlPaUpvZEhSd09pOHZNVEkzTGpBdU1DNHhPamd3TURBdllYQnBMM1l4TDNWelpYSXRiRzluYVc0aUxDSnBZWFFpT2pFM056VTBPRFE0TXpZc0ltVjRjQ0k2TVRjM05qYzRNRGd6Tml3aWJtSm1Jam94TnpjMU5EZzBPRE0yTENKcWRHa2lPaUpvU25STWNIb3hUMk5xTUdGdGFrTjJJaXdpYzNWaUlqb2lOamd4T0dFd05UZ3dNbUUxTXpnM05XUTRNRFEyTVRZeUlpd2ljSEoySWpvaU1qTmlaRFZqT0RrME9XWTJNREJoWkdJek9XVTNNREZqTkRBd09EY3laR0kzWVRVNU56Wm1OeUo5LnpyZU1vMGVpMkFhNFZ3cVVRbi0ydkNQU21IY1hXLXdZRTVZdW5MY05sN3MiLCJsaWNlbnNlX2tleSI6IjdFNDM3MjE1OUMzNDZCREUiLCJkb21haW5OYW1lIjoiZ29vZ2xlLmNvbSJ9\",\n 'domain_name':chatbotUserSetting?.user?.domain_name || window.location.hostname || 'example.com'\n},\n body:JSON.stringify({\n query:userMessage.text,\n encrypted_data:encryptedRequestData,\n session_id:getSessionID()\n}),\n signal:controller.signal\n});\n clearTimeout(timeoutId);\n if (!response.ok){\n throw new Error(`Server responded with status:${response.status}`);\n}\n let rawResponse=await response.text();\n let data;\n try{\n // Parse the response as JSON first\n const parsedResponse=JSON.parse(rawResponse);\n console.log(parsedResponse);\n\n // Check for validation errors\n if (!parsedResponse.success){\n if (parsedResponse.errors && parsedResponse.errors.message){\n const errorMsg=Array.isArray(parsedResponse.errors.message) ? parsedResponse.errors.message[0]:parsedResponse.errors.message;\n throw new Error(errorMsg);\n}\n throw new Error(parsedResponse.message || 'Request failed');\n}\n\n // Try to decrypt the response if needed\n if (parsedResponse.data && typeof parsedResponse.data==='string'){\n try{\n const decryptedData=parsedResponse.data;\n data=decryptedData;\n console.log(\"data\",data);\n}catch (decryptError){\n // If decryption fails,try to use the parsed response directly\n data=parsedResponse;\n}\n}else{\n data=parsedResponse;\n}\n // Check if we have a valid response after decryption\n if (!data.response && !data.matches && !parsedResponse.response){\n throw new Error('Invalid response format from server');\n}\n let botResponseText='';\n\n // Try to get response from decrypted data first\n if (data.response){\n botResponseText=data.response;\n}\n // Then try to get from matches if available\n else if (data.matches && data.matches.length>0){\n botResponseText=\"Here's what I found:\\n\\n\";\n data.matches.forEach(match=>{\n botResponseText+=`Relevance:${match.relevance}\\n${match.text}\\n\\n`;\n});\n}\n // If not in decrypted data,check the original parsed response\n else if (parsedResponse.response){\n botResponseText=parsedResponse.response;\n}\n // Default fallback message\n else{\n botResponseText=\"I couldn't find specific information about that. Would you like to try rephrasing your question?\";\n}\n const botId=`b-${Date.now()}-${Math.random().toString(36).slice(2,9)}`;\n const derivedSources=(data.matches || parsedResponse.matches || []).map(m=>({\n source:typeof m.text==='string' ? m.text.slice(0,120):'Reference',\n relevance:m.relevance\n}));\n const botMessage={\n id:botId,\n text:botResponseText,\n isUser:false,\n isStreaming:true,\n timestamp:new Date().toISOString(),\n matches:data.matches || parsedResponse.matches,\n content:data.content || parsedResponse.content,\n conversation_id:data.conversation_id || parsedResponse.conversation_id,\n sources:data.sources || parsedResponse.sources || (derivedSources.length ? derivedSources:undefined)\n};\n setChatHistory(prev=>prev.map(m=>m.id===userMsgId ?{\n ...m,\n status:'delivered'\n}:m));\n setChatHistory(prev=>[...prev,botMessage]);\n setResponseCount(prev=>prev+1);\n\n // Show name field after 2 responses (when responseCount is 1)\n if (responseCount===1 && !showUserForm){\n setShowUserForm(true);\n setFormStep(0);\n}\n // Show phone field after 4 responses (when responseCount is 5)\n else if (responseCount===5 && !showUserForm && userFormData.name){\n setShowUserForm(true);\n setFormStep(1);\n}\n // Show email field after 6 responses (when responseCount is 7)\n else if (responseCount===7 && !showUserForm && userFormData.phone){\n setShowUserForm(true);\n setFormStep(2);\n}\n}catch (error){\n setChatHistory(prev=>prev.map(m=>m.id===userMsgId ?{\n ...m,\n status:'error'\n}:m));\n const errorMessage={\n id:`b-err-${Date.now()}`,\n text:error.message || \"I'm sorry,I couldn't process your request.\",\n isUser:false,\n timestamp:new Date().toISOString()\n};\n setChatHistory(prev=>[...prev,errorMessage]);\n}\n}catch (error){\n setChatHistory(prev=>prev.map(m=>m.id===userMsgId ?{\n ...m,\n status:'error'\n}:m));\n // Handle aborted requests\n if (error.name==='AbortError'){\n const timeoutMessage={\n id:`b-err-${Date.now()}`,\n text:\"The request took too long to complete. Please try again.\",\n isUser:false,\n timestamp:new Date().toISOString()\n};\n setChatHistory(prev=>[...prev,timeoutMessage]);\n}else{\n const errorMessage={\n id:`b-err-${Date.now()}`,\n text:error.message || \"I couldn't find relevant information. Please try rephrasing your question.\",\n isUser:false,\n timestamp:new Date().toISOString()\n};\n setChatHistory(prev=>[...prev,errorMessage]);\n}\n\n // If we haven't exceeded max retries and it's a network error,retry\n if (retryCount < MAX_RETRIES && (error.message.includes('network') || error.message.includes('failed to fetch'))){\n setTimeout(()=>{\n const retryMessage={\n id:`b-sys-${Date.now()}`,\n text:\"Reconnecting... Please wait.\",\n isUser:false,\n timestamp:new Date().toISOString()\n};\n setChatHistory(prev=>[...prev,retryMessage]);\n handleSubmit(e,retryCount+1,textToSend,userMsgId);\n},2000 * (retryCount+1));// Exponential backoff\n}\n}finally{\n setIsLoading(false);\n}\n};\n const handleRetry=msg=>{\n setChatHistory(prev=>prev.map(m=>m.id===msg.id ?{\n ...m,\n status:'sending'\n}:m));\n handleSubmit({\n preventDefault(){}\n},0,msg.text,msg.id);\n};\n const handleKeyPress=e=>{\n if (e.key==='Enter' && !e.shiftKey){\n e.preventDefault();\n if (input.trim()){\n handleSubmit(e);\n}\n}\n};\n const storeFormData=async (fieldType,fieldValue)=>{\n try{\n const nonce=window?.wpApiSettings?.nonce;\n if (!nonce){\n return false;\n}\n const payload={\n user_id:userId,\n name:fieldType==='name' ? fieldValue:userFormData.name,\n email:fieldType==='email' ? fieldValue:userFormData.email,\n phone:fieldType==='phone' ? fieldValue:userFormData.phone,\n session_id:getSessionID(),\n jwt_token:chatbotUserSetting?.token || null,\n license_key:chatbotUserSetting?.user?.license_key || '75282BBE2D526D0D',\n domainName:chatbotUserSetting?.user?.domain_name || window.location.hostname || 'example.com'\n};\n\n // Encrypt the payload\n const encryptedPayload=EncryptPayload(payload);\n const response=await fetch(`${API_URL}lead/leads-store`,{\n method:'POST',\n headers:{\n 'Content-Type':'application/json',\n 'X-WP-Nonce':nonce,\n 'X-Encrypted-Payload':encryptedPayload,\n 'domain_name':chatbotUserSetting?.user?.domain_name || window.location.hostname || 'example.com'\n},\n body:JSON.stringify({\n field_type:fieldType,\n field_value:fieldValue,\n encrypted_data:encryptedPayload\n})\n});\n const data=await response.json();\n if (!response.ok){\n return false;\n}\n return true;\n}catch (error){\n return false;\n}\n};\n\n // Update the handleUserInfoCollection function\n const handleUserInfoCollection=async message=>{\n if (!isCollectingInfo){\n // Only trigger info collection if not attempted before and after 3 messages\n // or if user shows high intent\n const lowerMessage=message.toLowerCase();\n const highIntentTriggers=['buy','purchase','price','cost','interested','contact','help','support'];\n const shouldCollectInfo=!infoCollectionAttempted && (responseCount>=3 || highIntentTriggers.some(word=>lowerMessage.includes(word)));\n if (shouldCollectInfo && !userInfo.email){\n setIsCollectingInfo(true);\n setCurrentQuestion('email');\n setInfoCollectionAttempted(true);\n return{\n text:\"To provide you with better assistance,could you please share your email address?\",\n isUser:false,\n timestamp:new Date().toISOString()\n};\n}\n return null;\n}\n\n // Handle user's response based on current question\n switch (currentQuestion){\n case 'email':\n{\n const email=message.trim().toLowerCase();\n const emailRegex=/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n if (!emailRegex.test(email)){\n return{\n text:\"Please provide a valid email address (example:name@domain.com)\",\n isUser:false,\n timestamp:new Date().toISOString()\n};\n}\n setUserInfo(prev=>({\n ...prev,\n email\n}));\n setCurrentQuestion('name');\n return{\n text:\"Thanks! Could you please tell me your name?\",\n isUser:false,\n timestamp:new Date().toISOString()\n};\n}\n case 'name':\n{\n const name=message.trim();\n if (name.length < 2 || /\\d/.test(name)){\n return{\n text:\"Please provide a valid name without numbers.\",\n isUser:false,\n timestamp:new Date().toISOString()\n};\n}\n setUserInfo(prev=>({\n ...prev,\n name\n}));\n setCurrentQuestion('phone');\n try{\n // Create the authentication payload\n const authPayload={\n session_id:getSessionID(),\n jwt_token:chatbotUserSetting?.token || null,\n license_key:chatbotUserSetting?.user?.license_key || '75282BBE2D526D0D',\n domainName:chatbotUserSetting?.user?.domain_name || window.location.hostname || 'example.com'\n};\n\n // Send to chat API\n const chatRequestData={\n message:`User has entered their name:${name}. Please provide a friendly greeting.`,\n conversation_id:null,\n context:'',\n field_type:'name',\n field_value:name\n};\n const encryptedChatData=EncryptPayload(chatRequestData);\n const encryptedAuthData=EncryptPayload(authPayload);\n const chatResponse=await fetch(`${API_URL}chatbot/chat`,{\n method:'POST',\n headers:{\n 'Content-Type':'application/json',\n 'X-WP-Nonce':window?.wpApiSettings?.nonce,\n 'X-Encrypted-Payload':encryptedAuthData,\n 'domain_name':chatbotUserSetting?.user?.domain_name || window.location.hostname || 'example.com'\n},\n body:JSON.stringify({\n query:chatRequestData.message,\n encrypted_data:encryptedChatData,\n session_id:getSessionID(),\n field_type:'name',\n field_value:name\n})\n});\n if (!chatResponse.ok){\n throw new Error(`Chat API responded with status:${chatResponse.status}`);\n}\n let rawResponse=await chatResponse.text();\n let data;\n try{\n const parsedResponse=JSON.parse(rawResponse);\n if (!parsedResponse.success){\n throw new Error(parsedResponse.message || 'Request failed');\n}\n if (parsedResponse.data && typeof parsedResponse.data==='string'){\n data=DecryptPayload(parsedResponse.data);\n}else{\n data=parsedResponse;\n}\n\n // Return both the AI response and the next question\n return{\n multiResponse:true,\n responses:[{\n text:data.response || parsedResponse.response || `Nice to meet you,${name}!`,\n isUser:false,\n timestamp:new Date().toISOString()\n},{\n text:\"What's your contact number?\",\n isUser:false,\n timestamp:new Date().toISOString()\n}]\n};\n}catch (error){\n // If there's an error,continue with default response\n return{\n multiResponse:true,\n responses:[{\n text:`Nice to meet you,${name}!`,\n isUser:false,\n timestamp:new Date().toISOString()\n},{\n text:\"What's your contact number?\",\n isUser:false,\n timestamp:new Date().toISOString()\n}]\n};\n}\n}catch (error){\n // If there's an error,continue with the phone number question\n return{\n text:\"What's your contact number?\",\n isUser:false,\n timestamp:new Date().toISOString()\n};\n}\n}\n case 'phone':\n{\n const phone=message.replace(/\\s+/g,'').replace(/[()-]/g,'');\n const phoneRegex=/^\\+?[\\d-]{10,}$/;\n if (!phoneRegex.test(phone)){\n return{\n text:\"Please provide a valid phone number (at least 10 digits).\",\n isUser:false,\n timestamp:new Date().toISOString()\n};\n}\n setUserInfo(prev=>({\n ...prev,\n phone\n}));\n setCurrentQuestion(null);\n setIsCollectingInfo(false);\n try{\n // Store the phone number\n const authPayload={\n session_id:getSessionID(),\n jwt_token:chatbotUserSetting?.token || null,\n license_key:chatbotUserSetting?.user?.license_key || '75282BBE2D526D0D',\n domainName:chatbotUserSetting?.user?.domain_name || window.location.hostname || 'example.com'\n};\n const encryptedPayload=EncryptPayload(authPayload);\n await fetch(`${API_URL}lead/leads-store`,{\n method:'POST',\n headers:{\n 'Content-Type':'application/json',\n 'X-WP-Nonce':window?.wpApiSettings?.nonce,\n 'X-Encrypted-Payload':encryptedPayload,\n 'domain_name':chatbotUserSetting?.user?.domain_name || window.location.hostname || 'example.com'\n},\n body:JSON.stringify({\n field_type:'phone',\n field_value:phone,\n encrypted_data:encryptedPayload\n})\n});\n}\n return{\n text:\"Thank you for providing your contact information! How can I assist you today?\",\n isUser:false,\n timestamp:new Date().toISOString()\n};\n}\n default:\n return null;\n}\n};\n if (!isVisible){\n return null;\n}\n return external_React_default().createElement(\"div\",{\n className:\"wpai_chatbotWrapper\"\n},!isOpen && external_React_default().createElement(ChatToggle,{\n onClick:()=>setIsOpen(true),\n bgcolor:chatbotStyles.primaryColor,\n className:\"wpai_chatToggleButton\"\n},external_React_default().createElement(ChatBubbleOutline.A,null)),isOpen && external_React_default().createElement(ChatWindow,{\n elevation:0,\n bgcolor:chatbotStyles.primaryColor,\n className:\"wpai_chatWindowOpen\"\n},external_React_default().createElement(ChatHeader,{\n textcolor:chatbotStyles.secondaryColor,\n bgcolor:chatbotStyles.primaryColor\n},external_React_default().createElement(Box_Box,{\n sx:{\n display:'flex',\n alignItems:'center',\n gap:1.5\n}\n},external_React_default().createElement(Badge_Badge,{\n overlap:\"circular\",\n anchorOrigin:{\n vertical:'bottom',\n horizontal:'right'\n},\n variant:\"dot\",\n sx:{\n '& .MuiBadge-badge':{\n width:8,\n height:8,\n borderRadius:'50%',\n backgroundColor:isLoading ? '#fbbf24' :'#22c55e',\n border:'2px solid',\n borderColor:chatbotStyles.primaryColor || theme.palette.primary.main,\n '&::after':{\n position:'absolute',\n top:0,\n left:0,\n width:'100%',\n height:'100%',\n borderRadius:'50%',\n animation:'ripple 1.2s infinite ease-in-out',\n border:'1px solid currentColor',\n content:'\"\"'\n}\n}\n}\n},external_React_default().createElement(Avatar_Avatar,{\n sx:{\n bgcolor:'rgba(255,255,255,.1)',\n backdropFilter:'blur(8px)'\n}\n},getBotIcon(chatbotStyles.botIcon,chatbotStyles.customBotIcon))),external_React_default().createElement(Box_Box,null,external_React_default().createElement(Typography_Typography,{\n variant:\"subtitle1\"\n},chatbotStyles.headerText),external_React_default().createElement(Typography_Typography,{\n variant:\"caption\",\n component:\"div\"\n},isLoading ? 'Processing...' :'Online'))),external_React_default().createElement(Box_Box,{\n sx:{\n display:'flex',\n alignItems:'center'\n}\n},external_React_default().createElement(IconButton_IconButton,{\n size:\"small\",\n onClick:()=>setIsOpen(false),\n sx:{\n color:chatbotStyles.secondaryColor || '#fff',\n '&:hover':{\n backgroundColor:'rgba(255,255,255,.1)'\n}\n}\n},external_React_default().createElement(Close.A,null)))),external_React_default().createElement(Chatbot_ChatbotMessageList,{\n containerRef:containerRef,\n bottomRef:bottomRef,\n onScroll:onScroll,\n messages:chatHistory,\n primaryColor:chatbotStyles.primaryColor,\n secondaryColor:chatbotStyles.secondaryColor,\n onStreamComplete:handleStreamComplete,\n onRetry:handleRetry,\n isLoading:isLoading,\n liveAgentTyping:liveChatAccepted && liveAgentTyping,\n showNewMessages:showNewMessages,\n onJumpToLatest:scrollToBottom,\n childrenAboveEnd:showUserForm ? external_React_default().createElement(FormResponse,null,formStep===0 && external_React_default().createElement((external_React_default()).Fragment,null,external_React_default().createElement(Chatbot_ChatbotMessageBubble,{\n primaryColor:chatbotStyles.primaryColor,\n secondaryColor:chatbotStyles.secondaryColor,\n message:{\n text:\"Hi there! 👋 To provide better assistance,I'd like to know your name.\",\n isUser:false,\n timestamp:new Date().toISOString()\n}\n}),external_React_default().createElement(FormField,{\n fullWidth:true,\n placeholder:\"What's your name?\",\n value:userFormData.name,\n onChange:e=>{\n setUserFormData({\n ...userFormData,\n name:e.target.value\n});\n},\n onKeyDown:e=>{\n if (e.key==='Enter'){\n e.preventDefault();\n e.stopPropagation();\n const name=e.target.value.trim();\n if (name.length>0){\n setChatHistory(prev=>[...prev,{\n text:name,\n isUser:true,\n timestamp:new Date().toISOString()\n}]);\n storeFormData('name',name);\n setShowUserForm(false);\n setUserFormData({\n ...userFormData,\n name:name\n});\n}\n}\n},\n autoFocus:true\n})),formStep===1 && external_React_default().createElement((external_React_default()).Fragment,null,external_React_default().createElement(Chatbot_ChatbotMessageBubble,{\n primaryColor:chatbotStyles.primaryColor,\n secondaryColor:chatbotStyles.secondaryColor,\n message:{\n text:\"Thanks! Could you please share your phone number?\",\n isUser:false,\n timestamp:new Date().toISOString()\n}\n}),external_React_default().createElement(FormField,{\n fullWidth:true,\n placeholder:\"Your phone number\",\n value:userFormData.phone,\n onChange:e=>{\n setUserFormData({\n ...userFormData,\n phone:e.target.value\n});\n},\n onKeyDown:e=>{\n if (e.key==='Enter'){\n e.preventDefault();\n e.stopPropagation();\n const phone=e.target.value.trim();\n if (phone.length>5){\n setChatHistory(prev=>[...prev,{\n text:phone,\n isUser:true,\n timestamp:new Date().toISOString()\n}]);\n storeFormData('phone',phone);\n setShowUserForm(false);\n setUserFormData({\n ...userFormData,\n phone:phone\n});\n}\n}\n},\n autoFocus:true\n})),formStep===2 && external_React_default().createElement((external_React_default()).Fragment,null,external_React_default().createElement(Chatbot_ChatbotMessageBubble,{\n primaryColor:chatbotStyles.primaryColor,\n secondaryColor:chatbotStyles.secondaryColor,\n message:{\n text:\"Finally,could you please provide your email address?\",\n isUser:false,\n timestamp:new Date().toISOString()\n}\n}),external_React_default().createElement(FormField,{\n fullWidth:true,\n type:\"email\",\n placeholder:\"your@email.com\",\n value:userFormData.email,\n onChange:e=>{\n setUserFormData({\n ...userFormData,\n email:e.target.value\n});\n},\n onKeyDown:e=>{\n if (e.key==='Enter'){\n e.preventDefault();\n e.stopPropagation();\n const email=e.target.value.trim();\n if (email.includes('@') && email.length>5){\n setChatHistory(prev=>[...prev,{\n text:email,\n isUser:true,\n timestamp:new Date().toISOString()\n}]);\n storeFormData('email',email);\n setShowUserForm(false);\n setUserFormData({\n ...userFormData,\n email:email\n});\n}\n}\n},\n autoFocus:true\n}))):null\n}),external_React_default().createElement(ChatInput,null,(()=>{\n if (liveChatRequested){\n return external_React_default().createElement(Box_Box,{\n sx:{\n mb:1.5,\n px:0.5\n}\n},external_React_default().createElement(Typography_Typography,{\n variant:\"caption\",\n sx:{\n color:liveChatAccepted ? '#10b981':'#64748b',\n display:'flex',\n alignItems:'center',\n gap:0.5\n}\n},external_React_default().createElement(RecordVoiceOver.A,{\n sx:{\n fontSize:14\n}\n}),liveChatConnecting ? 'Connecting…':liveChatAccepted ? 'Agent joined. You can chat now.':'Waiting for an agent to join…'));\n}\n if (showLiveChatEmailForm){\n return external_React_default().createElement(Box_Box,{\n component:\"form\",\n onSubmit:handleStartLiveChat,\n sx:{\n mb:1.5,\n p:1.5,\n borderRadius:2,\n bgcolor:'#f8fafc',\n border:'1px solid #e2e8f0'\n}\n},external_React_default().createElement(Typography_Typography,{\n variant:\"subtitle2\",\n sx:{\n mb:1,\n color:'#475569',\n fontWeight:600\n}\n},\"Enter your email to start live chat\"),external_React_default().createElement(TextField_TextField,{\n fullWidth:true,\n size:\"small\",\n type:\"email\",\n placeholder:\"your@email.com\",\n value:liveChatEmail,\n onChange:e=>{\n setLiveChatEmail(e.target.value);\n if (liveChatEmailError) setLiveChatEmailError('');\n},\n error:!!liveChatEmailError,\n helperText:liveChatEmailError,\n InputProps:{\n startAdornment:external_React_default().createElement(InputAdornment_InputAdornment,{\n position:\"start\"\n},external_React_default().createElement(Email.A,{\n sx:{\n color:'#64748b',\n fontSize:20\n}\n}))\n},\n sx:{\n mb:1,\n '& .MuiOutlinedInput-root':{\n borderRadius:'10px',\n bgcolor:'#fff'\n}\n}\n}),external_React_default().createElement(Box_Box,{\n sx:{\n display:'flex',\n gap:1,\n justifyContent:'flex-end'\n}\n},external_React_default().createElement(Button_Button,{\n size:\"small\",\n variant:\"text\",\n onClick:()=>{\n setShowLiveChatEmailForm(false);\n setLiveChatEmail('');\n setLiveChatEmailError('');\n}\n},\"Cancel\"),external_React_default().createElement(Button_Button,{\n size:\"small\",\n variant:\"contained\",\n type:\"submit\",\n startIcon:external_React_default().createElement(RecordVoiceOver.A,null),\n sx:{\n borderRadius:'10px'\n}\n},\"Start live chat\")));\n}\n return external_React_default().createElement(Box_Box,{\n sx:{\n mb:1.5,\n px:0.5\n}\n},external_React_default().createElement(Button_Button,{\n size:\"small\",\n variant:\"outlined\",\n startIcon:external_React_default().createElement(RecordVoiceOver.A,null),\n onClick:handleStartLiveChatClick,\n sx:{\n borderRadius:'10px',\n textTransform:'none',\n borderColor:'#cbd5e1',\n color:'#475569',\n '&:hover':{\n borderColor:'#3b82f6',\n color:'#3b82f6',\n bgcolor:'rgba(59,130,246,.04)'\n}\n}\n},\"Talk live with admin\"));\n})(),external_React_default().createElement(Box_Box,{\n component:\"form\",\n onSubmit:handleSubmit,\n sx:{\n display:'flex',\n alignItems:'center',\n width:'100%'\n}\n},external_React_default().createElement(InputField,{\n className:\"wpai_chatInputField\",\n fullWidth:true,\n variant:\"outlined\",\n placeholder:chatbotStyles.placeholderText,\n value:input,\n onChange:handleChatInputChange,\n onBlur:flushCustomerTypingStopped,\n onKeyPress:handleKeyPress,\n autoComplete:\"off\",\n autoCorrect:\"off\",\n autoCapitalize:\"off\",\n spellCheck:\"false\",\n inputProps:{\n 'aria-label':'Type your message to the assistant',\n autoComplete:'off',\n form:{\n autoComplete:'off'\n}\n},\n InputProps:{\n endAdornment:external_React_default().createElement(Box_Box,{\n sx:{\n display:'flex',\n gap:1,\n alignItems:'center',\n height:'100%'\n}\n},external_React_default().createElement(Tooltip_Tooltip,{\n title:\"File Attachment - Coming Soon!\",\n placement:\"top\",\n arrow:true\n},external_React_default().createElement(\"span\",{\n style:{\n display:'flex',\n alignItems:'center'\n}\n},external_React_default().createElement(IconButton_IconButton,{\n size:\"small\",\n disabled:true,\n sx:{\n color:'rgba(107,114,128,.5)',\n '&.Mui-disabled':{\n color:'rgba(107,114,128,.5)'\n},\n padding:'8px'\n}\n},external_React_default().createElement(AttachFile.A,{\n sx:{\n fontSize:'20px'\n}\n})))),external_React_default().createElement(IconButton_IconButton,{\n color:\"primary\",\n type:\"submit\",\n disabled:isLoading || !input.trim(),\n \"aria-label\":\"Send message\",\n sx:{\n color:chatbotStyles.primaryColor,\n padding:'8px',\n transition:'transform 0.2s ease,box-shadow 0.2s ease',\n '&:not(:disabled):hover':{\n transform:'scale(1.08)'\n},\n '&:not(:disabled):active':{\n transform:'scale(.96)'\n}\n}\n},external_React_default().createElement(Send.A,{\n sx:{\n fontSize:'20px'\n}\n})))\n},\n primaryColor:chatbotStyles.primaryColor\n})))));\n};\n const Chatbot_Chatbot=(Chatbot);\n;// ./src/redux/Slices/UserSlice.js\n\n\n\n\nfunction normalizeUserInfoData(raw){\n if (raw==null || raw===\"\") return{};\n if (typeof raw===\"object\" && !Array.isArray(raw)) return raw;\n if (typeof raw===\"string\"){\n try{\n const parsed=JSON.parse(raw);;\n}catch{\n return{};\n}\n};\n}\nconst initialState={\n userData:{},\n isLoggedIn:false,\n GetUserLoader:false,\n error:null,\n isVerify:false,\n auth_token:null,\n hasInitLoad:false\n};\n\n// Async thunk for fetching user data\nconst fetchUserData=createAsyncThunk(\"user/fetchUserData\",async (encode,{\n rejectWithValue\n})=>{\n if (encode?.key===undefined || encode?.payload===undefined){\n return false;\n}\n try{\n // Example of how you might fetch user data from your API\n // Replace with your actual API endpoint\n const response=await fetch(API_URL+\"user/user-info\",{\n method:\"POST\",\n headers:{\n \"Content-Type\":\"application/json\",\n \"X-WP-Nonce\":getWpRestNonce(),\n \"X-Encrypted-Payload\":encode?.key\n},\n body:JSON.stringify({\n encrypted_payload:encode?.payload\n})\n});\n \n\n const data=await response.json();\n if (response.status===200){\n return data;\n}else{\n return rejectWithValue(data);\n}\n}catch (error){\n return rejectWithValue(error);\n}\n});\n\n// Initial state\n\n// User slice\nconst userSlice=createSlice({\n name:\"user\",\n initialState,\n reducers:{\n setUserData:(state,action)=>{\n state.userData=action.payload;\n},\n \n mergeUserFields:(state,action)=>{\n const patch=action.payload ||{};\n state.userData=state.userData && typeof state.userData===\"object\" ?{\n ...state.userData,\n ...patch\n}:{\n ...patch\n};\n},\n setIsLoggedIn:(state,action)=>{\n state.isLoggedIn=action.payload;\n},\n LoginUser:(state,action)=>{\n state.isLoggedIn=true;\n state.userData=action.payload?.user;\n state.auth_token=action.payload?.token;\n state.isVerify=action.payload?.verified;\n},\n logoutUser:state=>{\n state.isLoggedIn=false;\n state.userData=false || initialState.userData;\n state.auth_token=null;\n},\n setAuthToken:(state,action)=>{\n state.auth_token=action.payload.token;\n},\n setInitLoad:(state,action)=>{\n state.hasInitLoad=true;\n}\n},\n extraReducers:builder=>{\n builder.addCase(fetchUserData.pending,state=>{\n state.GetUserLoader=true;\n state.isLoggedIn=false;\n state.error=null;\n}).addCase(fetchUserData.fulfilled,(state,action)=>{\n state.isLoggedIn=true;\n state.userData=normalizeUserInfoData(action.payload?.data);\n state.isVerify=Boolean(state.userData?.verified);\n state.messages=action.payload?.message;\n state.GetUserLoader=false;\n}).addCase(fetchUserData.rejected,(state,action)=>{\n state.error=action.payload;\n state.GetUserLoader=false;\n});\n}\n});\n\n// Export actions and reducer\nconst{\n setUserData,\n mergeUserFields,\n setIsLoggedIn,\n LoginUser,\n setAuthToken,\n logoutUser,\n setInitLoad\n}=userSlice.actions;\n const UserSlice=(userSlice.reducer);\n;// ./src/redux/Slices/SubscriptionSlice.js\n\n\n\nfunction deriveSubscriptionFromUser(raw){\n const user=normalizeUserInfoData(raw);\n const ms=user.membership_status;\n const subscribed=user.is_subscribed===true || user.is_subscribed===1 || user.subscription_active===true || ms===true || ms===1 || Number(ms)===1 || String(ms || \"\").toLowerCase()===\"active\";\n return{\n isSubscribed:Boolean(subscribed),\n message:user.subscription_message || user.membership_message || \"\",\n SubscribeUser:user.subscription_details && typeof user.subscription_details===\"object\" ? user.subscription_details :subscribed ?{\n membership_status:user.membership_status || \"Active\",\n plan_name:user.plan_name || user.current_plan || user.subscription_tier\n}\n};\n}\nconst checkSubscription=createAsyncThunk(\"subscription/checkSubscription\",async (token,{\n rejectWithValue,\n getState\n})=>{\n try{\n // const token=localStorage.getItem('auth_token');\n const state=getState();\n const userState=state.user;\n const Varification=userState?.isVerify;\n if (!Varification){\n return;\n}\n const encryptedPayload=EncryptPayload({\n token:token\n});\n const response=await fetch(`${API_URL}user-subscription-check`,{\n method:\"POST\",\n headers:{\n \"Content-Type\":\"application/json\",\n \"X-WP-Nonce\":getWpRestNonce()\n},\n body:JSON.stringify({\n encrypted_payload:encryptedPayload\n})\n});\n if (!response.ok){\n throw new Error(\"Network response was not ok\");\n}\n const encryptedResponse=await response.json();\n\n // const response_data=await response.json();\n\n // if (!response_data.success){\n // return rejectWithValue(response_data.data?.message || 'Subscription check failed');\n //}\n\n // return DecryptPayload(response_data);\n //}\n\n if (!encryptedResponse.success){\n return rejectWithValue(encryptedResponse.message || \"Subscription check failed\");\n}\n\n // Check if data field exists and is encrypted\n if (encryptedResponse.data && typeof encryptedResponse.data===\"string\"){\n try{\n // Decrypt the data field\n const decryptedUserData=DecryptPayload(encryptedResponse.data);\n\n // Create a new response object with the decrypted data\n const fullResponse={\n success:encryptedResponse.success,\n message:encryptedResponse.message\n // data:{\n // user_data:decryptedUserData\n //}\n};\n return fullResponse;\n}catch (error){\n // If decryption fails,return the original response\n return encryptedResponse;\n}\n}else{\n // If data is not encrypted or doesn't exist,return the original response\n return encryptedResponse;\n}\n}catch (error){\n return rejectWithValue(error.message || \"Failed to check subscription\");\n}\n});\nconst subscriptionSlice=createSlice({\n name:\"subscription\",\n initialState:{\n isSubscribed:false,\n isLoading:false,\n error:null,\n SubscribeUser:{},\n message:\"\"\n},\n reducers:{\n clearError:state=>{\n state.error=null;\n},\n resetLoading:state=>{\n state.isLoading=false;\n},\n resetSubscribe:state=>{\n state.isSubscribed=false;;\n state.message=\"\";\n}\n},\n extraReducers:builder=>{\n builder.addCase(fetchUserData.fulfilled,(state,action)=>{\n const next=deriveSubscriptionFromUser(action.payload?.data);\n state.isSubscribed=next.isSubscribed;\n state.message=next.message;\n state.SubscribeUser=next.SubscribeUser;\n state.isLoading=false;\n state.error=null;\n}).addCase(LoginUser,(state,action)=>{\n const next=deriveSubscriptionFromUser(action.payload?.user);\n state.isSubscribed=next.isSubscribed;\n state.message=next.message;\n state.SubscribeUser=next.SubscribeUser;\n state.error=null;\n}).addCase(checkSubscription.pending,state=>{\n state.isLoading=true;\n state.error=null;\n})\n // .addCase(checkSubscription.fulfilled,(state,action)=>{\n // if (action.payload?.success===true){\n // state.message=action.payload?.data?.message;\n // const{stripe_payment_url,stripe_customer_id,is_subscribed,...filteredData}=action.payload?.data?.user_data;\n // state.isSubscribed=Number(is_subscribed)===1;\n // state.SubscribeUser=filteredData;\n //}else{\n // state.error='Invalid response format';\n //}\n // state.isLoading=false;\n //})\n .addCase(checkSubscription.fulfilled,(state,action)=>{\n if (action.payload?.success===true){\n state.message=action.payload.message;\n if (action.payload.message.toLowerCase().includes(\"member\")){\n state.isSubscribed=true;\n state.SubscribeUser=action.payload.data?.user_data ||{\n membership_status:\"Active\",\n message:action.payload.message\n};\n}else{\n state.isSubscribed=false;;\n}\n}else{\n state.error=\"Invalid response format\";\n state.isSubscribed=false;\n}\n state.isLoading=false;\n}).addCase(checkSubscription.rejected,(state,action)=>{\n state.error=action.payload || \"Failed to check subscription\";\n state.isLoading=false;\n state.isSubscribed=false;\n});\n}\n});\nconst{\n clearError,\n resetLoading,\n resetSubscribe\n}=subscriptionSlice.actions;\n const SubscriptionSlice=(subscriptionSlice.reducer);\n;// ./src/redux/Slices/WebBotSlice.js\n\nconst WebBotSlice_initialState={\n is_chat_open:false,\n screenPage:\"homeTab\",\n chatScreen:{\n header:false,\n name:null\n},\n messages:[],\n chatBotSetting:null,\n chatBotAdmin:{\n user:null,\n Token:null\n},\n is_Query_Submit:false,\n load_chat_history:false,\n isRecording:false\n};\nconst WebBot=createSlice({\n name:\"chatbot-web\",\n initialState:WebBotSlice_initialState,\n reducers:{\n setChatOpen:state=>{\n state.is_chat_open=!state.is_chat_open;\n},\n setScreenPage:(state,action)=>{\n state.screenPage=action.payload?.currentScreen;\n},\n setChatScreen:(state,action)=>{\n state.chatScreen.header=true;\n state.chatScreen.name=action.payload?.name;\n},\n deleteChatScreen:state=>{\n state.chatScreen.header=false;\n state.chatScreen.name=null;\n},\n setMessages:(state,action)=>{\n state.messages.push(...action.payload);\n},\n setChatbotSetting:(state,action)=>{\n state.chatBotSetting=action.payload?.data;\n},\n setChatbotAdmin:(state,action)=>{\n state.chatBotAdmin.user=action.payload?.user;\n state.chatBotAdmin.Token=action.payload?.Token;\n},\n setSubmit:(state,action)=>{\n state.is_Query_Submit=action.payload;\n},\n loadHistoy:(state,action)=>{\n state.load_chat_history=action.payload;\n},\n setRecording:(state,action)=>{\n state.isRecording=action.payload;\n}\n}\n});\nconst{\n setChatOpen,\n setScreenPage,\n setChatScreen,\n deleteChatScreen,\n setMessages,\n setChatbotSetting,\n setChatbotAdmin,\n setSubmit,\n loadHistoy,\n setRecording\n}=WebBot.actions;\n const WebBotSlice=(WebBot.reducer);\n;// ./src/redux/Store/store.js\n\n\n\n\n\nconst store=configureStore({\n reducer:{\n subscription:SubscriptionSlice,\n chatbot:Slices_ChatbotSlice,\n user:UserSlice,\n webBot:WebBotSlice\n}\n});\n const Store_store=(store);\n// EXTERNAL MODULE:./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\nvar injectStylesIntoStyleTag=__webpack_require__(5072);\nvar injectStylesIntoStyleTag_default=__webpack_require__.n(injectStylesIntoStyleTag);\n// EXTERNAL MODULE:./node_modules/style-loader/dist/runtime/styleDomAPI.js\nvar styleDomAPI=__webpack_require__(7825);\nvar styleDomAPI_default=__webpack_require__.n(styleDomAPI);\n// EXTERNAL MODULE:./node_modules/style-loader/dist/runtime/insertBySelector.js\nvar insertBySelector=__webpack_require__(7659);\nvar insertBySelector_default=__webpack_require__.n(insertBySelector);\n// EXTERNAL MODULE:./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\nvar setAttributesWithoutAttributes=__webpack_require__(5056);\nvar setAttributesWithoutAttributes_default=__webpack_require__.n(setAttributesWithoutAttributes);\n// EXTERNAL MODULE:./node_modules/style-loader/dist/runtime/insertStyleElement.js\nvar insertStyleElement=__webpack_require__(540);\nvar insertStyleElement_default=__webpack_require__.n(insertStyleElement);\n// EXTERNAL MODULE:./node_modules/style-loader/dist/runtime/styleTagTransform.js\nvar styleTagTransform=__webpack_require__(1113);\nvar styleTagTransform_default=__webpack_require__.n(styleTagTransform);\n// EXTERNAL MODULE:./node_modules/css-loader/dist/cjs.js!./src/assets/css/global.css\nvar global=__webpack_require__(3256);\n;;\n\noptions.styleTagTransform=(styleTagTransform_default());\noptions.setAttributes=(setAttributesWithoutAttributes_default());\n\n options.insert=insertBySelector_default().bind(null,\"head\");\n \noptions.domAPI=(styleDomAPI_default());\noptions.insertStyleElement=(insertStyleElement_default());\n\nvar update=injectStylesIntoStyleTag_default()(global.A,options);\n\n\n\n\n const css_global=(global.A && global.A.locals ? global.A.locals :undefined);\n\n;// ./src/entries/chatbot.jsx\n\n\n\n// import Chatbot from '@/features/chatbot/ChatbotEntryPoint';\n\n\n\n// Console logging for debugging\n\n// Function to check if chatbot should be rendered (value from DB via wp_localize_script)\nconst shouldRenderChatbot=()=>{\n const w=typeof window !==\"undefined\" ? window.wpaiPluginSettings:null;\n const storedValue=w && w.chatbotVisible !=null ? String(w.chatbotVisible):\"false\";\n const s=storedValue.toLowerCase();\n return s===\"true\" || s===\"1\";\n};\n\n// Function to safely render with error handling\nconst renderChatbot=container=>{\n try{\n // Check if we should render the chatbot\n if (!shouldRenderChatbot()){\n return;\n}\n if (!container){\n return;\n}\n (0,external_wp_element_namespaceObject.render)(React.createElement(components_Provider,{\n store:Store_store\n},React.createElement(Chatbot_Chatbot,null)),container);\n}\n};\n\n// Handler for mode changes\nconst handleAgentModeChange=event=>{\n if (event.detail.mode===\"chatbot\" || !event.detail.mode){\n // Find and render in existing containers\n const chatbotRoot=document.getElementById(\"wpai_ai-chatbot-root\");\n if (chatbotRoot){\n renderChatbot(chatbotRoot);\n}\n const containers=document.querySelectorAll(\".wp-ai-chatbot-container\");\n containers.forEach(container=>renderChatbot(container));\n}else{\n // Code to remove chatbot if needed\n const chatbotRoot=document.getElementById(\"wpai_ai-chatbot-root\");\n if (chatbotRoot){\n (0,external_wp_element_namespaceObject.render)(null,chatbotRoot);\n}\n}\n};\n\n// Listen for agent mode changes\ndocument.addEventListener(\"wpai_agent_mode_changed\",handleAgentModeChange);\n\n// Render to the main container\nconst chatbotRoot=document.getElementById(\"wpai_ai-chatbot-root\");\nif (chatbotRoot){\n renderChatbot(chatbotRoot);\n}\n\n// Find all chatbot containers on the page\ndocument.addEventListener(\"DOMContentLoaded\",()=>{\n const chatbotContainers=document.querySelectorAll(\".wp-ai-chatbot-container\");\n if (chatbotContainers.length>0 && shouldRenderChatbot()){\n chatbotContainers.forEach((container,index)=>{\n renderChatbot(container);\n});\n}\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLEtBQW9FO0FBQzFFLElBQUk7QUFBQSxFQUFPO0FBQ1gsTUFBTSxhQUFPO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLGFBQU87QUFDZjtBQUNBLE1BQU07QUFDTjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLGdCQUFnQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsTUFBTSxLQUE4RDtBQUNwRSxJQUFJO0FBQUEsRUFBUTtBQUNaO0FBQ0E7QUFDQTtBQUNBLE1BQU0sS0FBbUY7QUFDekYsSUFBSTtBQUFBLEVBQVE7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsY0FBYyxXQUFXO0FBQ3pCO0FBQ0Esc0JBQXNCLHFCQUFxQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxhQUFPO0FBQ2Y7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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QSxVQUFVLEtBQXFDLEVBQUU7QUFBQSxFQUkxQztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLEtBQXFDLEVBQUU7QUFBQSxFQUkxQztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxhQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsVUFBVSxXQUFZO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1YsaUJBQWlCLE9BQWdCO0FBQ2pDO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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TztBQUNQLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixjQUFjO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EseUNBQXlDO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDOEM7O0FBRTlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0Isd0RBQVEsVUFBVSxDQUFDO0FBQ3ZDLG9CQUFvQix3REFBUSxVQUFVLENBQUM7QUFDdkMsd0JBQXdCLG1EQUFHLFNBQVMsR0FBRyxVQUFVLENBQUM7QUFDbEQsd0JBQXdCLG1EQUFHLFNBQVMsR0FBRyxVQUFVLENBQUM7QUFDbEQ7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLE1BQU0sRUFBRSxXQUFXLFdBQVcsS0FBSztBQUN6RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsS0FBcUMsR0FBRywyQ0FBc0IsT0FBTyxDQUErQjtBQUM1SDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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RixDQUFDO0VBQ0QsSUFBSUMsaUJBQWlCLENBQUN6c0IsTUFBTSxHQUFHLENBQUMsSUFBSStyQixtQkFBbUIsQ0FBQyxDQUFDLEVBQUU7SUFDekRVLGlCQUFpQixDQUFDekssT0FBTyxDQUFDLENBQUNtSyxTQUFTLEVBQUVwWixLQUFLLEtBQUs7TUFDOUNtWixhQUFhLENBQUNDLFNBQVMsQ0FBQztJQUMxQixDQUFDLENBQUM7RUFDSixDQUFDLE1BQU0sQ0FDUDtBQUNGLENBQUMsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luL2V4dGVybmFsIHZhciBcIndwLmVsZW1lbnRcIj8xYzMyIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luL2V4dGVybmFsIHZhciBcIlJlYWN0RE9NXCI/ODUzYiIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy91dGlscy9yZWFjdEJhdGNoZWRVcGRhdGVzLmpzP2Y1ZjUiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvdXRpbHMvYmF0Y2guanM/NGRmMiIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9jb21wb25lbnRzL0NvbnRleHQuanM/OGU4NyIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9ob29rcy91c2VSZWR1eENvbnRleHQuanM/OTgyNSIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy91dGlscy91c2VTeW5jRXh0ZXJuYWxTdG9yZS5qcz9iNDgwIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2hvb2tzL3VzZVNlbGVjdG9yLmpzPzMzOWMiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvdXRpbHMvU3Vic2NyaXB0aW9uLmpzPzc5ZDYiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvdXRpbHMvdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdC5qcz81N2U2Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2NvbXBvbmVudHMvY29ubmVjdC5qcz9jOGRhIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2NvbXBvbmVudHMvUHJvdmlkZXIuanM/MTFmOCIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9ob29rcy91c2VTdG9yZS5qcz9jYjg3Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2hvb2tzL3VzZURpc3BhdGNoLmpzP2VlMjQiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvZXhwb3J0cy5qcz80YTcxIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2luZGV4LmpzP2ZjYzIiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvZ2V0T3ZlcmxheUFscGhhLmpzPzUzMDYiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9QYXBlci9wYXBlckNsYXNzZXMuanM/OWVkYiIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1BhcGVyL1BhcGVyLmpzPzFiOGQiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL3VzZVRoZW1lV2l0aG91dERlZmF1bHQuanM/OGYyNCIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vdXNlVGhlbWUuanM/NmE4MyIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vY3JlYXRlQm94LmpzPzI3YTQiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Cb3gvYm94Q2xhc3Nlcy5qcz84NmRmIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQm94L0JveC5qcz8zNTkwIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL2lzSG9zdENvbXBvbmVudC9pc0hvc3RDb21wb25lbnQuanM/ODE0ZiIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1RleHRhcmVhQXV0b3NpemUvVGV4dGFyZWFBdXRvc2l6ZS5qcz8yMDI2Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRm9ybUNvbnRyb2wvZm9ybUNvbnRyb2xTdGF0ZS5qcz9kNGUwIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRm9ybUNvbnRyb2wvRm9ybUNvbnRyb2xDb250ZXh0LmpzPzhiYzEiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Gb3JtQ29udHJvbC91c2VGb3JtQ29udHJvbC5qcz9lYzQzIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9HbG9iYWxTdHlsZXMvR2xvYmFsU3R5bGVzLmpzPzM4N2UiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9HbG9iYWxTdHlsZXMvR2xvYmFsU3R5bGVzLmpzPzlmYTgiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9JbnB1dEJhc2UvdXRpbHMuanM/MDBlOCIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0lucHV0QmFzZS9pbnB1dEJhc2VDbGFzc2VzLmpzPzFiOWMiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9JbnB1dEJhc2UvSW5wdXRCYXNlLmpzPzkyNjUiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9JbnB1dC9pbnB1dENsYXNzZXMuanM/NjZhYyIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0lucHV0L0lucHV0LmpzPzU5ZDEiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9GaWxsZWRJbnB1dC9maWxsZWRJbnB1dENsYXNzZXMuanM/NWQ4OSIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0ZpbGxlZElucHV0L0ZpbGxlZElucHV0LmpzPzdjOWUiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9PdXRsaW5lZElucHV0L05vdGNoZWRPdXRsaW5lLmpzPzYyZDEiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9PdXRsaW5lZElucHV0L291dGxpbmVkSW5wdXRDbGFzc2VzLmpzP2NiZDQiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9PdXRsaW5lZElucHV0L091dGxpbmVkSW5wdXQuanM/MDMzNCIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0Zvcm1MYWJlbC9mb3JtTGFiZWxDbGFzc2VzLmpzP2UxMGIiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Gb3JtTGFiZWwvRm9ybUxhYmVsLmpzPzU0NGEiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9JbnB1dExhYmVsL2lucHV0TGFiZWxDbGFzc2VzLmpzPzc4YTIiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9JbnB1dExhYmVsL0lucHV0TGFiZWwuanM/OTEwMSIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0Zvcm1Db250cm9sL2Zvcm1Db250cm9sQ2xhc3Nlcy5qcz81ZDFkIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRm9ybUNvbnRyb2wvRm9ybUNvbnRyb2wuanM/MTYwZiIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0Zvcm1IZWxwZXJUZXh0L2Zvcm1IZWxwZXJUZXh0Q2xhc3Nlcy5qcz81NmZkIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRm9ybUhlbHBlclRleHQvRm9ybUhlbHBlclRleHQuanM/YjFiOCIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2VzbS9nZXRSZWFjdEVsZW1lbnRSZWYvZ2V0UmVhY3RFbGVtZW50UmVmLmpzPzcwZmQiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL1J0bFByb3ZpZGVyL2luZGV4LmpzPzRhZGUiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS91dGlscy9lc20vYXBwZW5kT3duZXJTdGF0ZS9hcHBlbmRPd25lclN0YXRlLmpzP2ZjNGUiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS91dGlscy9lc20vZXh0cmFjdEV2ZW50SGFuZGxlcnMvZXh0cmFjdEV2ZW50SGFuZGxlcnMuanM/M2FiMiIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2VzbS9vbWl0RXZlbnRIYW5kbGVycy9vbWl0RXZlbnRIYW5kbGVycy5qcz8wYjE1Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL21lcmdlU2xvdFByb3BzL21lcmdlU2xvdFByb3BzLmpzPzUzOWMiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS91dGlscy9lc20vcmVzb2x2ZUNvbXBvbmVudFByb3BzL3Jlc29sdmVDb21wb25lbnRQcm9wcy5qcz83NWRmIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL3VzZVNsb3RQcm9wcy91c2VTbG90UHJvcHMuanM/ZDE4NyIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0xpc3QvTGlzdENvbnRleHQuanM/NzMwOSIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0xpc3QvbGlzdENsYXNzZXMuanM/YjBhZiIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0xpc3QvTGlzdC5qcz8xZmQ5Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL2dldFNjcm9sbGJhclNpemUvZ2V0U2Nyb2xsYmFyU2l6ZS5qcz8zYTZjIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvZ2V0U2Nyb2xsYmFyU2l6ZS5qcz8wMmQ3Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTWVudUxpc3QvTWVudUxpc3QuanM/Y2NhZSIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zZXRQcm90b3R5cGVPZi5qcz83OTZlIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2UuanM/YTg0MyIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9jb25maWcuanM/MmE0MiIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9UcmFuc2l0aW9uR3JvdXBDb250ZXh0LmpzP2QwZjQiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vdXRpbHMvcmVmbG93LmpzP2I1N2YiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vVHJhbnNpdGlvbi5qcz83NTFiIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL3VzZVRoZW1lLmpzPzUyNzQiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC90cmFuc2l0aW9ucy91dGlscy5qcz8wMjIxIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvR3Jvdy9Hcm93LmpzPzUxNTAiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9VbnN0YWJsZV9UcmFwRm9jdXMvRm9jdXNUcmFwLmpzP2E5MjAiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Qb3J0YWwvUG9ydGFsLmpzPzA5Y2UiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9GYWRlL0ZhZGUuanM/ODQ2OSIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0JhY2tkcm9wL2JhY2tkcm9wQ2xhc3Nlcy5qcz9mY2IyIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQmFja2Ryb3AvQmFja2Ryb3AuanM/NGE0ZiIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL01vZGFsL01vZGFsTWFuYWdlci5qcz83YzQ3Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTW9kYWwvdXNlTW9kYWwuanM/ODFmYSIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL01vZGFsL21vZGFsQ2xhc3Nlcy5qcz82YzQxIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTW9kYWwvTW9kYWwuanM/MGEzOCIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1BvcG92ZXIvcG9wb3ZlckNsYXNzZXMuanM/MzczYyIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1BvcG92ZXIvUG9wb3Zlci5qcz8xNTkwIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTWVudS9tZW51Q2xhc3Nlcy5qcz85M2Y1Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTWVudS9NZW51LmpzP2UxZTkiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9OYXRpdmVTZWxlY3QvbmF0aXZlU2VsZWN0Q2xhc3Nlcy5qcz8xN2Y5Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTmF0aXZlU2VsZWN0L05hdGl2ZVNlbGVjdElucHV0LmpzP2YzNjIiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9TZWxlY3Qvc2VsZWN0Q2xhc3Nlcy5qcz9iNGQ3Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvU2VsZWN0L1NlbGVjdElucHV0LmpzPzBhMzMiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9pbnRlcm5hbC9zdmctaWNvbnMvQXJyb3dEcm9wRG93bi5qcz9iMjZjIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvU2VsZWN0L1NlbGVjdC5qcz9hZDNkIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvVGV4dEZpZWxkL3RleHRGaWVsZENsYXNzZXMuanM/OWRkMiIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1RleHRGaWVsZC9UZXh0RmllbGQuanM/MzA2MiIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanM/OTM4YiIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS91dGlscy9DaGlsZE1hcHBpbmcuanM/MjBjOCIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9UcmFuc2l0aW9uR3JvdXAuanM/NTVlMCIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0J1dHRvbkJhc2UvUmlwcGxlLmpzPzI1YWMiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9CdXR0b25CYXNlL3RvdWNoUmlwcGxlQ2xhc3Nlcy5qcz8wNzNkIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQnV0dG9uQmFzZS9Ub3VjaFJpcHBsZS5qcz8yZTI3Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQnV0dG9uQmFzZS9idXR0b25CYXNlQ2xhc3Nlcy5qcz83ZjJlIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQnV0dG9uQmFzZS9CdXR0b25CYXNlLmpzPzljYjkiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9JY29uQnV0dG9uL2ljb25CdXR0b25DbGFzc2VzLmpzP2U2MjUiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9JY29uQnV0dG9uL0ljb25CdXR0b24uanM/Mzg2MCIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2VzbS91c2VQcmV2aW91c1Byb3BzL3VzZVByZXZpb3VzUHJvcHMuanM/NTQ2NiIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0JhZGdlL3VzZUJhZGdlLmpzPzRmMDIiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9CYWRnZS9iYWRnZUNsYXNzZXMuanM/OTM3ZCIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0JhZGdlL0JhZGdlLmpzPzI4NWEiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9pbnRlcm5hbC9zdmctaWNvbnMvUGVyc29uLmpzPzdjNzMiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9BdmF0YXIvYXZhdGFyQ2xhc3Nlcy5qcz9mZmQ1Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvdXNlU2xvdC5qcz8wMWNiIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQXZhdGFyL0F2YXRhci5qcz8zZDBjIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvVHlwb2dyYXBoeS90eXBvZ3JhcGh5Q2xhc3Nlcy5qcz9jY2Q3Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvVHlwb2dyYXBoeS9UeXBvZ3JhcGh5LmpzPzFhYTgiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9JbnB1dEFkb3JubWVudC9pbnB1dEFkb3JubWVudENsYXNzZXMuanM/NGJkOCIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0lucHV0QWRvcm5tZW50L0lucHV0QWRvcm5tZW50LmpzPzExZmMiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9CdXR0b24vYnV0dG9uQ2xhc3Nlcy5qcz9kMDAzIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQnV0dG9uR3JvdXAvQnV0dG9uR3JvdXBDb250ZXh0LmpzPzZkYTkiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9CdXR0b25Hcm91cC9CdXR0b25Hcm91cEJ1dHRvbkNvbnRleHQuanM/ZWIzZSIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0J1dHRvbi9CdXR0b24uanM/ZTQ4ZiIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFdpbmRvdy5qcz8xZmMwIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvaW5zdGFuY2VPZi5qcz8yNzY3Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9tYXRoLmpzPzg0YzYiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3VzZXJBZ2VudC5qcz8xMmQ4Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvaXNMYXlvdXRWaWV3cG9ydC5qcz83NGFmIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzPzBmODgiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRXaW5kb3dTY3JvbGwuanM/YTMyMSIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldEhUTUxFbGVtZW50U2Nyb2xsLmpzPzVmZTYiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXROb2RlU2Nyb2xsLmpzPzE5OWEiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXROb2RlTmFtZS5qcz81Nzg4Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0RG9jdW1lbnRFbGVtZW50LmpzP2VmNTIiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRXaW5kb3dTY3JvbGxCYXJYLmpzPzYxMjUiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDb21wdXRlZFN0eWxlLmpzP2I1MTkiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pc1Njcm9sbFBhcmVudC5qcz9hZTZjIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Q29tcG9zaXRlUmVjdC5qcz9kMTE2Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0TGF5b3V0UmVjdC5qcz9lMmU5Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0UGFyZW50Tm9kZS5qcz8yOGJmIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0U2Nyb2xsUGFyZW50LmpzPzlkMGUiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9saXN0U2Nyb2xsUGFyZW50cy5qcz9lYTFhIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvaXNUYWJsZUVsZW1lbnQuanM/YjQ1MSIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldE9mZnNldFBhcmVudC5qcz9iNjJiIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9lbnVtcy5qcz83N2Y5Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9vcmRlck1vZGlmaWVycy5qcz9iOWU2Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9kZWJvdW5jZS5qcz9iMWUyIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9tZXJnZUJ5TmFtZS5qcz8yYTM1Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9jcmVhdGVQb3BwZXIuanM/NmNlZSIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2V2ZW50TGlzdGVuZXJzLmpzP2FkNmUiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanM/YjUwZSIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0VmFyaWF0aW9uLmpzPzNkOGQiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qcz9hZDlkIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9jb21wdXRlT2Zmc2V0cy5qcz81ZDdlIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvcG9wcGVyT2Zmc2V0cy5qcz8xMzRhIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvY29tcHV0ZVN0eWxlcy5qcz83Y2RhIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvYXBwbHlTdHlsZXMuanM/MGFiNCIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL29mZnNldC5qcz85ODM1Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRPcHBvc2l0ZVBsYWNlbWVudC5qcz81MjMyIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudC5qcz81MDBiIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Vmlld3BvcnRSZWN0LmpzPzdjNzMiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXREb2N1bWVudFJlY3QuanM/M2U3OSIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2NvbnRhaW5zLmpzPzdmMzciLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3JlY3RUb0NsaWVudFJlY3QuanM/N2JjZiIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldENsaXBwaW5nUmVjdC5qcz85ZGUwIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRGcmVzaFNpZGVPYmplY3QuanM/MzVmNiIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvbWVyZ2VQYWRkaW5nT2JqZWN0LmpzP2QzOWIiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2V4cGFuZFRvSGFzaE1hcC5qcz85ODUyIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9kZXRlY3RPdmVyZmxvdy5qcz9iNjE3Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9jb21wdXRlQXV0b1BsYWNlbWVudC5qcz80M2NlIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvZmxpcC5qcz9lY2IyIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRBbHRBeGlzLmpzP2YyZTAiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3dpdGhpbi5qcz9lNDNmIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvcHJldmVudE92ZXJmbG93LmpzPzk0MzUiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9hcnJvdy5qcz8wOTI5Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvaGlkZS5qcz8xZDZjIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9wb3BwZXIuanM/MzljMyIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1BvcHBlci9wb3BwZXJDbGFzc2VzLmpzP2NjNTciLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Qb3BwZXIvQmFzZVBvcHBlci5qcz82MzNhIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvUG9wcGVyL1BvcHBlci5qcz9iNDAzIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvVG9vbHRpcC90b29sdGlwQ2xhc3Nlcy5qcz85ODllIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvVG9vbHRpcC9Ub29sdGlwLmpzP2JjN2YiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9ub2RlX21vZHVsZXMvcmVkdXgvZGlzdC9yZWR1eC5tanM/ODliNyIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L25vZGVfbW9kdWxlcy9yZWR1eC10aHVuay9kaXN0L3JlZHV4LXRodW5rLm1qcz8wZjA0Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL2ltbWVyL2Rpc3QvaW1tZXIubWpzP2Q3ZjciLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9kaXN0L3JlZHV4LXRvb2xraXQubW9kZXJuLm1qcz81ZTI4Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXRvYXN0aWZ5L2Rpc3QvaW5kZXgubWpzPzM1NDYiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9zcmMvY29uZmlnLmpzP2RiNDkiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9zcmMvcmVkdXgvU2xpY2VzL0NoYXRib3RTbGljZS5qcz8zNzRmIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vc3JjL3V0aWxzL3VzZXJDbGllbnRTdG9yYWdlLmpzP2E2OGYiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9zcmMvdXRpbHMvQXV0aFRva2VuLmpzP2UyMjciLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9zcmMvdXRpbHMvaW5kZXguanM/ZWQwOCIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL3NyYy9jb21wb25lbnRzL0NoYXRib3QvY2hhdGJvdE1hcmtkb3duLmpzeD80ZWRkIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vc3JjL2NvbXBvbmVudHMvQ2hhdGJvdC9DaGF0Ym90TWVzc2FnZUJ1YmJsZS5qc3g/OTU3MSIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL3NyYy9jb21wb25lbnRzL0NoYXRib3QvQ2hhdGJvdFR5cGluZ0luZGljYXRvci5qc3g/NjJiZiIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL3NyYy9jb21wb25lbnRzL0NoYXRib3QvQ2hhdGJvdE1lc3NhZ2VMaXN0LmpzeD9iN2JhIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vc3JjL2NvbXBvbmVudHMvQ2hhdGJvdC91c2VTbWFydENoYXRTY3JvbGwuanM/OTI0YyIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL3NyYy9jb21wb25lbnRzL0NoYXRib3QvQ2hhdGJvdC5qc3g/NDYzZCIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL3NyYy9yZWR1eC9TbGljZXMvVXNlclNsaWNlLmpzPzQwZTgiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9zcmMvcmVkdXgvU2xpY2VzL1N1YnNjcmlwdGlvblNsaWNlLmpzPzIwYjciLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9zcmMvcmVkdXgvU2xpY2VzL1dlYkJvdFNsaWNlLmpzPzQ5NmUiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9zcmMvcmVkdXgvU3RvcmUvc3RvcmUuanM/MThmNCIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL3NyYy9hc3NldHMvY3NzL2dsb2JhbC5jc3M/MjVkZiIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL3NyYy9lbnRyaWVzL2NoYXRib3QuanN4P2Y4OTUiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHdwLmVsZW1lbnQ7IiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IFJlYWN0RE9NOyIsImV4cG9ydCB7IHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzIH0gZnJvbSAncmVhY3QtZG9tJzsiLCIvLyBEZWZhdWx0IHRvIGEgZHVtbXkgXCJiYXRjaFwiIGltcGxlbWVudGF0aW9uIHRoYXQganVzdCBydW5zIHRoZSBjYWxsYmFja1xuZnVuY3Rpb24gZGVmYXVsdE5vb3BCYXRjaChjYWxsYmFjaykge1xuICBjYWxsYmFjaygpO1xufVxuXG5sZXQgYmF0Y2ggPSBkZWZhdWx0Tm9vcEJhdGNoOyAvLyBBbGxvdyBpbmplY3RpbmcgYW5vdGhlciBiYXRjaGluZyBmdW5jdGlvbiBsYXRlclxuXG5leHBvcnQgY29uc3Qgc2V0QmF0Y2ggPSBuZXdCYXRjaCA9PiBiYXRjaCA9IG5ld0JhdGNoOyAvLyBTdXBwbHkgYSBnZXR0ZXIganVzdCB0byBza2lwIGRlYWxpbmcgd2l0aCBFU00gYmluZGluZ3NcblxuZXhwb3J0IGNvbnN0IGdldEJhdGNoID0gKCkgPT4gYmF0Y2g7IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuY29uc3QgQ29udGV4dEtleSA9IFN5bWJvbC5mb3IoYHJlYWN0LXJlZHV4LWNvbnRleHRgKTtcbmNvbnN0IGdUID0gdHlwZW9mIGdsb2JhbFRoaXMgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWxUaGlzIDpcbi8qIGZhbGwgYmFjayB0byBhIHBlci1tb2R1bGUgc2NvcGUgKHByZS04LjEgYmVoYXZpb3VyKSBpZiBgZ2xvYmFsVGhpc2AgaXMgbm90IGF2YWlsYWJsZSAqL1xue307XG5cbmZ1bmN0aW9uIGdldENvbnRleHQoKSB7XG4gIHZhciBfZ1QkQ29udGV4dEtleTtcblxuICBpZiAoIVJlYWN0LmNyZWF0ZUNvbnRleHQpIHJldHVybiB7fTtcbiAgY29uc3QgY29udGV4dE1hcCA9IChfZ1QkQ29udGV4dEtleSA9IGdUW0NvbnRleHRLZXldKSAhPSBudWxsID8gX2dUJENvbnRleHRLZXkgOiBnVFtDb250ZXh0S2V5XSA9IG5ldyBNYXAoKTtcbiAgbGV0IHJlYWxDb250ZXh0ID0gY29udGV4dE1hcC5nZXQoUmVhY3QuY3JlYXRlQ29udGV4dCk7XG5cbiAgaWYgKCFyZWFsQ29udGV4dCkge1xuICAgIHJlYWxDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dChudWxsKTtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICByZWFsQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdSZWFjdFJlZHV4JztcbiAgICB9XG5cbiAgICBjb250ZXh0TWFwLnNldChSZWFjdC5jcmVhdGVDb250ZXh0LCByZWFsQ29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcmVhbENvbnRleHQ7XG59XG5cbmV4cG9ydCBjb25zdCBSZWFjdFJlZHV4Q29udGV4dCA9IC8qI19fUFVSRV9fKi9nZXRDb250ZXh0KCk7XG5leHBvcnQgZGVmYXVsdCBSZWFjdFJlZHV4Q29udGV4dDsiLCJpbXBvcnQgeyB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgUmVhY3RSZWR1eENvbnRleHQgfSBmcm9tICcuLi9jb21wb25lbnRzL0NvbnRleHQnO1xuXG4vKipcclxuICogSG9vayBmYWN0b3J5LCB3aGljaCBjcmVhdGVzIGEgYHVzZVJlZHV4Q29udGV4dGAgaG9vayBib3VuZCB0byBhIGdpdmVuIGNvbnRleHQuIFRoaXMgaXMgYSBsb3ctbGV2ZWxcclxuICogaG9vayB0aGF0IHlvdSBzaG91bGQgdXN1YWxseSBub3QgbmVlZCB0byBjYWxsIGRpcmVjdGx5LlxyXG4gKlxyXG4gKiBAcGFyYW0ge1JlYWN0LkNvbnRleHR9IFtjb250ZXh0PVJlYWN0UmVkdXhDb250ZXh0XSBDb250ZXh0IHBhc3NlZCB0byB5b3VyIGA8UHJvdmlkZXI+YC5cclxuICogQHJldHVybnMge0Z1bmN0aW9ufSBBIGB1c2VSZWR1eENvbnRleHRgIGhvb2sgYm91bmQgdG8gdGhlIHNwZWNpZmllZCBjb250ZXh0LlxyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZWR1eENvbnRleHRIb29rKGNvbnRleHQgPSBSZWFjdFJlZHV4Q29udGV4dCkge1xuICByZXR1cm4gZnVuY3Rpb24gdXNlUmVkdXhDb250ZXh0KCkge1xuICAgIGNvbnN0IGNvbnRleHRWYWx1ZSA9IHVzZUNvbnRleHQoY29udGV4dCk7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhY29udGV4dFZhbHVlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCBmaW5kIHJlYWN0LXJlZHV4IGNvbnRleHQgdmFsdWU7IHBsZWFzZSBlbnN1cmUgdGhlIGNvbXBvbmVudCBpcyB3cmFwcGVkIGluIGEgPFByb3ZpZGVyPicpO1xuICAgIH1cblxuICAgIHJldHVybiBjb250ZXh0VmFsdWU7XG4gIH07XG59XG4vKipcclxuICogQSBob29rIHRvIGFjY2VzcyB0aGUgdmFsdWUgb2YgdGhlIGBSZWFjdFJlZHV4Q29udGV4dGAuIFRoaXMgaXMgYSBsb3ctbGV2ZWxcclxuICogaG9vayB0aGF0IHlvdSBzaG91bGQgdXN1YWxseSBub3QgbmVlZCB0byBjYWxsIGRpcmVjdGx5LlxyXG4gKlxyXG4gKiBAcmV0dXJucyB7YW55fSB0aGUgdmFsdWUgb2YgdGhlIGBSZWFjdFJlZHV4Q29udGV4dGBcclxuICpcclxuICogQGV4YW1wbGVcclxuICpcclxuICogaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xyXG4gKiBpbXBvcnQgeyB1c2VSZWR1eENvbnRleHQgfSBmcm9tICdyZWFjdC1yZWR1eCdcclxuICpcclxuICogZXhwb3J0IGNvbnN0IENvdW50ZXJDb21wb25lbnQgPSAoKSA9PiB7XHJcbiAqICAgY29uc3QgeyBzdG9yZSB9ID0gdXNlUmVkdXhDb250ZXh0KClcclxuICogICByZXR1cm4gPGRpdj57c3RvcmUuZ2V0U3RhdGUoKX08L2Rpdj5cclxuICogfVxyXG4gKi9cblxuZXhwb3J0IGNvbnN0IHVzZVJlZHV4Q29udGV4dCA9IC8qI19fUFVSRV9fKi9jcmVhdGVSZWR1eENvbnRleHRIb29rKCk7IiwiZXhwb3J0IGNvbnN0IG5vdEluaXRpYWxpemVkID0gKCkgPT4ge1xuICB0aHJvdyBuZXcgRXJyb3IoJ3VTRVMgbm90IGluaXRpYWxpemVkIScpO1xufTsiLCJpbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlRGVidWdWYWx1ZSwgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY3JlYXRlUmVkdXhDb250ZXh0SG9vaywgdXNlUmVkdXhDb250ZXh0IGFzIHVzZURlZmF1bHRSZWR1eENvbnRleHQgfSBmcm9tICcuL3VzZVJlZHV4Q29udGV4dCc7XG5pbXBvcnQgeyBSZWFjdFJlZHV4Q29udGV4dCB9IGZyb20gJy4uL2NvbXBvbmVudHMvQ29udGV4dCc7XG5pbXBvcnQgeyBub3RJbml0aWFsaXplZCB9IGZyb20gJy4uL3V0aWxzL3VzZVN5bmNFeHRlcm5hbFN0b3JlJztcbmxldCB1c2VTeW5jRXh0ZXJuYWxTdG9yZVdpdGhTZWxlY3RvciA9IG5vdEluaXRpYWxpemVkO1xuZXhwb3J0IGNvbnN0IGluaXRpYWxpemVVc2VTZWxlY3RvciA9IGZuID0+IHtcbiAgdXNlU3luY0V4dGVybmFsU3RvcmVXaXRoU2VsZWN0b3IgPSBmbjtcbn07XG5cbmNvbnN0IHJlZkVxdWFsaXR5ID0gKGEsIGIpID0+IGEgPT09IGI7XG4vKipcclxuICogSG9vayBmYWN0b3J5LCB3aGljaCBjcmVhdGVzIGEgYHVzZVNlbGVjdG9yYCBob29rIGJvdW5kIHRvIGEgZ2l2ZW4gY29udGV4dC5cclxuICpcclxuICogQHBhcmFtIHtSZWFjdC5Db250ZXh0fSBbY29udGV4dD1SZWFjdFJlZHV4Q29udGV4dF0gQ29udGV4dCBwYXNzZWQgdG8geW91ciBgPFByb3ZpZGVyPmAuXHJcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSBgdXNlU2VsZWN0b3JgIGhvb2sgYm91bmQgdG8gdGhlIHNwZWNpZmllZCBjb250ZXh0LlxyXG4gKi9cblxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2VsZWN0b3JIb29rKGNvbnRleHQgPSBSZWFjdFJlZHV4Q29udGV4dCkge1xuICBjb25zdCB1c2VSZWR1eENvbnRleHQgPSBjb250ZXh0ID09PSBSZWFjdFJlZHV4Q29udGV4dCA/IHVzZURlZmF1bHRSZWR1eENvbnRleHQgOiBjcmVhdGVSZWR1eENvbnRleHRIb29rKGNvbnRleHQpO1xuICByZXR1cm4gZnVuY3Rpb24gdXNlU2VsZWN0b3Ioc2VsZWN0b3IsIGVxdWFsaXR5Rm5Pck9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHtcbiAgICAgIGVxdWFsaXR5Rm4gPSByZWZFcXVhbGl0eSxcbiAgICAgIHN0YWJpbGl0eUNoZWNrID0gdW5kZWZpbmVkLFxuICAgICAgbm9vcENoZWNrID0gdW5kZWZpbmVkXG4gICAgfSA9IHR5cGVvZiBlcXVhbGl0eUZuT3JPcHRpb25zID09PSAnZnVuY3Rpb24nID8ge1xuICAgICAgZXF1YWxpdHlGbjogZXF1YWxpdHlGbk9yT3B0aW9uc1xuICAgIH0gOiBlcXVhbGl0eUZuT3JPcHRpb25zO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICghc2VsZWN0b3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBZb3UgbXVzdCBwYXNzIGEgc2VsZWN0b3IgdG8gdXNlU2VsZWN0b3JgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBzZWxlY3RvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFlvdSBtdXN0IHBhc3MgYSBmdW5jdGlvbiBhcyBhIHNlbGVjdG9yIHRvIHVzZVNlbGVjdG9yYCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgZXF1YWxpdHlGbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFlvdSBtdXN0IHBhc3MgYSBmdW5jdGlvbiBhcyBhbiBlcXVhbGl0eSBmdW5jdGlvbiB0byB1c2VTZWxlY3RvcmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHtcbiAgICAgIHN0b3JlLFxuICAgICAgc3Vic2NyaXB0aW9uLFxuICAgICAgZ2V0U2VydmVyU3RhdGUsXG4gICAgICBzdGFiaWxpdHlDaGVjazogZ2xvYmFsU3RhYmlsaXR5Q2hlY2ssXG4gICAgICBub29wQ2hlY2s6IGdsb2JhbE5vb3BDaGVja1xuICAgIH0gPSB1c2VSZWR1eENvbnRleHQoKTtcbiAgICBjb25zdCBmaXJzdFJ1biA9IHVzZVJlZih0cnVlKTtcbiAgICBjb25zdCB3cmFwcGVkU2VsZWN0b3IgPSB1c2VDYWxsYmFjayh7XG4gICAgICBbc2VsZWN0b3IubmFtZV0oc3RhdGUpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBzZWxlY3RvcihzdGF0ZSk7XG5cbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICBjb25zdCBmaW5hbFN0YWJpbGl0eUNoZWNrID0gdHlwZW9mIHN0YWJpbGl0eUNoZWNrID09PSAndW5kZWZpbmVkJyA/IGdsb2JhbFN0YWJpbGl0eUNoZWNrIDogc3RhYmlsaXR5Q2hlY2s7XG5cbiAgICAgICAgICBpZiAoZmluYWxTdGFiaWxpdHlDaGVjayA9PT0gJ2Fsd2F5cycgfHwgZmluYWxTdGFiaWxpdHlDaGVjayA9PT0gJ29uY2UnICYmIGZpcnN0UnVuLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHRvQ29tcGFyZSA9IHNlbGVjdG9yKHN0YXRlKTtcblxuICAgICAgICAgICAgaWYgKCFlcXVhbGl0eUZuKHNlbGVjdGVkLCB0b0NvbXBhcmUpKSB7XG4gICAgICAgICAgICAgIGxldCBzdGFjayA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigpO1xuICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgO1xuICAgICAgICAgICAgICAgICh7XG4gICAgICAgICAgICAgICAgICBzdGFja1xuICAgICAgICAgICAgICAgIH0gPSBlKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnNvbGUud2FybignU2VsZWN0b3IgJyArIChzZWxlY3Rvci5uYW1lIHx8ICd1bmtub3duJykgKyAnIHJldHVybmVkIGEgZGlmZmVyZW50IHJlc3VsdCB3aGVuIGNhbGxlZCB3aXRoIHRoZSBzYW1lIHBhcmFtZXRlcnMuIFRoaXMgY2FuIGxlYWQgdG8gdW5uZWNlc3NhcnkgcmVyZW5kZXJzLicgKyAnXFxuU2VsZWN0b3JzIHRoYXQgcmV0dXJuIGEgbmV3IHJlZmVyZW5jZSAoc3VjaCBhcyBhbiBvYmplY3Qgb3IgYW4gYXJyYXkpIHNob3VsZCBiZSBtZW1vaXplZDogaHR0cHM6Ly9yZWR1eC5qcy5vcmcvdXNhZ2UvZGVyaXZpbmctZGF0YS1zZWxlY3RvcnMjb3B0aW1pemluZy1zZWxlY3RvcnMtd2l0aC1tZW1vaXphdGlvbicsIHtcbiAgICAgICAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZCxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZDI6IHRvQ29tcGFyZSxcbiAgICAgICAgICAgICAgICBzdGFja1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBmaW5hbE5vb3BDaGVjayA9IHR5cGVvZiBub29wQ2hlY2sgPT09ICd1bmRlZmluZWQnID8gZ2xvYmFsTm9vcENoZWNrIDogbm9vcENoZWNrO1xuXG4gICAgICAgICAgaWYgKGZpbmFsTm9vcENoZWNrID09PSAnYWx3YXlzJyB8fCBmaW5hbE5vb3BDaGVjayA9PT0gJ29uY2UnICYmIGZpcnN0UnVuLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZCA9PT0gc3RhdGUpIHtcbiAgICAgICAgICAgICAgbGV0IHN0YWNrID0gdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICAgICAgKHtcbiAgICAgICAgICAgICAgICAgIHN0YWNrXG4gICAgICAgICAgICAgICAgfSA9IGUpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdTZWxlY3RvciAnICsgKHNlbGVjdG9yLm5hbWUgfHwgJ3Vua25vd24nKSArICcgcmV0dXJuZWQgdGhlIHJvb3Qgc3RhdGUgd2hlbiBjYWxsZWQuIFRoaXMgY2FuIGxlYWQgdG8gdW5uZWNlc3NhcnkgcmVyZW5kZXJzLicgKyAnXFxuU2VsZWN0b3JzIHRoYXQgcmV0dXJuIHRoZSBlbnRpcmUgc3RhdGUgYXJlIGFsbW9zdCBjZXJ0YWlubHkgYSBtaXN0YWtlLCBhcyB0aGV5IHdpbGwgY2F1c2UgYSByZXJlbmRlciB3aGVuZXZlciAqYW55dGhpbmcqIGluIHN0YXRlIGNoYW5nZXMuJywge1xuICAgICAgICAgICAgICAgIHN0YWNrXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChmaXJzdFJ1bi5jdXJyZW50KSBmaXJzdFJ1bi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2VsZWN0ZWQ7XG4gICAgICB9XG5cbiAgICB9W3NlbGVjdG9yLm5hbWVdLCBbc2VsZWN0b3IsIGdsb2JhbFN0YWJpbGl0eUNoZWNrLCBzdGFiaWxpdHlDaGVja10pO1xuICAgIGNvbnN0IHNlbGVjdGVkU3RhdGUgPSB1c2VTeW5jRXh0ZXJuYWxTdG9yZVdpdGhTZWxlY3RvcihzdWJzY3JpcHRpb24uYWRkTmVzdGVkU3ViLCBzdG9yZS5nZXRTdGF0ZSwgZ2V0U2VydmVyU3RhdGUgfHwgc3RvcmUuZ2V0U3RhdGUsIHdyYXBwZWRTZWxlY3RvciwgZXF1YWxpdHlGbik7XG4gICAgdXNlRGVidWdWYWx1ZShzZWxlY3RlZFN0YXRlKTtcbiAgICByZXR1cm4gc2VsZWN0ZWRTdGF0ZTtcbiAgfTtcbn1cbi8qKlxyXG4gKiBBIGhvb2sgdG8gYWNjZXNzIHRoZSByZWR1eCBzdG9yZSdzIHN0YXRlLiBUaGlzIGhvb2sgdGFrZXMgYSBzZWxlY3RvciBmdW5jdGlvblxyXG4gKiBhcyBhbiBhcmd1bWVudC4gVGhlIHNlbGVjdG9yIGlzIGNhbGxlZCB3aXRoIHRoZSBzdG9yZSBzdGF0ZS5cclxuICpcclxuICogVGhpcyBob29rIHRha2VzIGFuIG9wdGlvbmFsIGVxdWFsaXR5IGNvbXBhcmlzb24gZnVuY3Rpb24gYXMgdGhlIHNlY29uZCBwYXJhbWV0ZXJcclxuICogdGhhdCBhbGxvd3MgeW91IHRvIGN1c3RvbWl6ZSB0aGUgd2F5IHRoZSBzZWxlY3RlZCBzdGF0ZSBpcyBjb21wYXJlZCB0byBkZXRlcm1pbmVcclxuICogd2hldGhlciB0aGUgY29tcG9uZW50IG5lZWRzIHRvIGJlIHJlLXJlbmRlcmVkLlxyXG4gKlxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZWxlY3RvciB0aGUgc2VsZWN0b3IgZnVuY3Rpb25cclxuICogQHBhcmFtIHtGdW5jdGlvbj19IGVxdWFsaXR5Rm4gdGhlIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGRldGVybWluZSBlcXVhbGl0eVxyXG4gKlxyXG4gKiBAcmV0dXJucyB7YW55fSB0aGUgc2VsZWN0ZWQgc3RhdGVcclxuICpcclxuICogQGV4YW1wbGVcclxuICpcclxuICogaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xyXG4gKiBpbXBvcnQgeyB1c2VTZWxlY3RvciB9IGZyb20gJ3JlYWN0LXJlZHV4J1xyXG4gKlxyXG4gKiBleHBvcnQgY29uc3QgQ291bnRlckNvbXBvbmVudCA9ICgpID0+IHtcclxuICogICBjb25zdCBjb3VudGVyID0gdXNlU2VsZWN0b3Ioc3RhdGUgPT4gc3RhdGUuY291bnRlcilcclxuICogICByZXR1cm4gPGRpdj57Y291bnRlcn08L2Rpdj5cclxuICogfVxyXG4gKi9cblxuZXhwb3J0IGNvbnN0IHVzZVNlbGVjdG9yID0gLyojX19QVVJFX18qL2NyZWF0ZVNlbGVjdG9ySG9vaygpOyIsImltcG9ydCB7IGdldEJhdGNoIH0gZnJvbSAnLi9iYXRjaCc7IC8vIGVuY2Fwc3VsYXRlcyB0aGUgc3Vic2NyaXB0aW9uIGxvZ2ljIGZvciBjb25uZWN0aW5nIGEgY29tcG9uZW50IHRvIHRoZSByZWR1eCBzdG9yZSwgYXNcbi8vIHdlbGwgYXMgbmVzdGluZyBzdWJzY3JpcHRpb25zIG9mIGRlc2NlbmRhbnQgY29tcG9uZW50cywgc28gdGhhdCB3ZSBjYW4gZW5zdXJlIHRoZVxuLy8gYW5jZXN0b3IgY29tcG9uZW50cyByZS1yZW5kZXIgYmVmb3JlIGRlc2NlbmRhbnRzXG5cbmZ1bmN0aW9uIGNyZWF0ZUxpc3RlbmVyQ29sbGVjdGlvbigpIHtcbiAgY29uc3QgYmF0Y2ggPSBnZXRCYXRjaCgpO1xuICBsZXQgZmlyc3QgPSBudWxsO1xuICBsZXQgbGFzdCA9IG51bGw7XG4gIHJldHVybiB7XG4gICAgY2xlYXIoKSB7XG4gICAgICBmaXJzdCA9IG51bGw7XG4gICAgICBsYXN0ID0gbnVsbDtcbiAgICB9LFxuXG4gICAgbm90aWZ5KCkge1xuICAgICAgYmF0Y2goKCkgPT4ge1xuICAgICAgICBsZXQgbGlzdGVuZXIgPSBmaXJzdDtcblxuICAgICAgICB3aGlsZSAobGlzdGVuZXIpIHtcbiAgICAgICAgICBsaXN0ZW5lci5jYWxsYmFjaygpO1xuICAgICAgICAgIGxpc3RlbmVyID0gbGlzdGVuZXIubmV4dDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGdldCgpIHtcbiAgICAgIGxldCBsaXN0ZW5lcnMgPSBbXTtcbiAgICAgIGxldCBsaXN0ZW5lciA9IGZpcnN0O1xuXG4gICAgICB3aGlsZSAobGlzdGVuZXIpIHtcbiAgICAgICAgbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICAgICAgICBsaXN0ZW5lciA9IGxpc3RlbmVyLm5leHQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBsaXN0ZW5lcnM7XG4gICAgfSxcblxuICAgIHN1YnNjcmliZShjYWxsYmFjaykge1xuICAgICAgbGV0IGlzU3Vic2NyaWJlZCA9IHRydWU7XG4gICAgICBsZXQgbGlzdGVuZXIgPSBsYXN0ID0ge1xuICAgICAgICBjYWxsYmFjayxcbiAgICAgICAgbmV4dDogbnVsbCxcbiAgICAgICAgcHJldjogbGFzdFxuICAgICAgfTtcblxuICAgICAgaWYgKGxpc3RlbmVyLnByZXYpIHtcbiAgICAgICAgbGlzdGVuZXIucHJldi5uZXh0ID0gbGlzdGVuZXI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaXJzdCA9IGxpc3RlbmVyO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZnVuY3Rpb24gdW5zdWJzY3JpYmUoKSB7XG4gICAgICAgIGlmICghaXNTdWJzY3JpYmVkIHx8IGZpcnN0ID09PSBudWxsKSByZXR1cm47XG4gICAgICAgIGlzU3Vic2NyaWJlZCA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChsaXN0ZW5lci5uZXh0KSB7XG4gICAgICAgICAgbGlzdGVuZXIubmV4dC5wcmV2ID0gbGlzdGVuZXIucHJldjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsYXN0ID0gbGlzdGVuZXIucHJldjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsaXN0ZW5lci5wcmV2KSB7XG4gICAgICAgICAgbGlzdGVuZXIucHJldi5uZXh0ID0gbGlzdGVuZXIubmV4dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmaXJzdCA9IGxpc3RlbmVyLm5leHQ7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG4gIH07XG59XG5cbmNvbnN0IG51bGxMaXN0ZW5lcnMgPSB7XG4gIG5vdGlmeSgpIHt9LFxuXG4gIGdldDogKCkgPT4gW11cbn07XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3Vic2NyaXB0aW9uKHN0b3JlLCBwYXJlbnRTdWIpIHtcbiAgbGV0IHVuc3Vic2NyaWJlO1xuICBsZXQgbGlzdGVuZXJzID0gbnVsbExpc3RlbmVyczsgLy8gUmVhc29ucyB0byBrZWVwIHRoZSBzdWJzY3JpcHRpb24gYWN0aXZlXG5cbiAgbGV0IHN1YnNjcmlwdGlvbnNBbW91bnQgPSAwOyAvLyBJcyB0aGlzIHNwZWNpZmljIHN1YnNjcmlwdGlvbiBzdWJzY3JpYmVkIChvciBvbmx5IG5lc3RlZCBvbmVzPylcblxuICBsZXQgc2VsZlN1YnNjcmliZWQgPSBmYWxzZTtcblxuICBmdW5jdGlvbiBhZGROZXN0ZWRTdWIobGlzdGVuZXIpIHtcbiAgICB0cnlTdWJzY3JpYmUoKTtcbiAgICBjb25zdCBjbGVhbnVwTGlzdGVuZXIgPSBsaXN0ZW5lcnMuc3Vic2NyaWJlKGxpc3RlbmVyKTsgLy8gY2xlYW51cCBuZXN0ZWQgc3ViXG5cbiAgICBsZXQgcmVtb3ZlZCA9IGZhbHNlO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAoIXJlbW92ZWQpIHtcbiAgICAgICAgcmVtb3ZlZCA9IHRydWU7XG4gICAgICAgIGNsZWFudXBMaXN0ZW5lcigpO1xuICAgICAgICB0cnlVbnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBub3RpZnlOZXN0ZWRTdWJzKCkge1xuICAgIGxpc3RlbmVycy5ub3RpZnkoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUNoYW5nZVdyYXBwZXIoKSB7XG4gICAgaWYgKHN1YnNjcmlwdGlvbi5vblN0YXRlQ2hhbmdlKSB7XG4gICAgICBzdWJzY3JpcHRpb24ub25TdGF0ZUNoYW5nZSgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGlzU3Vic2NyaWJlZCgpIHtcbiAgICByZXR1cm4gc2VsZlN1YnNjcmliZWQ7XG4gIH1cblxuICBmdW5jdGlvbiB0cnlTdWJzY3JpYmUoKSB7XG4gICAgc3Vic2NyaXB0aW9uc0Ftb3VudCsrO1xuXG4gICAgaWYgKCF1bnN1YnNjcmliZSkge1xuICAgICAgdW5zdWJzY3JpYmUgPSBwYXJlbnRTdWIgPyBwYXJlbnRTdWIuYWRkTmVzdGVkU3ViKGhhbmRsZUNoYW5nZVdyYXBwZXIpIDogc3RvcmUuc3Vic2NyaWJlKGhhbmRsZUNoYW5nZVdyYXBwZXIpO1xuICAgICAgbGlzdGVuZXJzID0gY3JlYXRlTGlzdGVuZXJDb2xsZWN0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdHJ5VW5zdWJzY3JpYmUoKSB7XG4gICAgc3Vic2NyaXB0aW9uc0Ftb3VudC0tO1xuXG4gICAgaWYgKHVuc3Vic2NyaWJlICYmIHN1YnNjcmlwdGlvbnNBbW91bnQgPT09IDApIHtcbiAgICAgIHVuc3Vic2NyaWJlKCk7XG4gICAgICB1bnN1YnNjcmliZSA9IHVuZGVmaW5lZDtcbiAgICAgIGxpc3RlbmVycy5jbGVhcigpO1xuICAgICAgbGlzdGVuZXJzID0gbnVsbExpc3RlbmVycztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0cnlTdWJzY3JpYmVTZWxmKCkge1xuICAgIGlmICghc2VsZlN1YnNjcmliZWQpIHtcbiAgICAgIHNlbGZTdWJzY3JpYmVkID0gdHJ1ZTtcbiAgICAgIHRyeVN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHRyeVVuc3Vic2NyaWJlU2VsZigpIHtcbiAgICBpZiAoc2VsZlN1YnNjcmliZWQpIHtcbiAgICAgIHNlbGZTdWJzY3JpYmVkID0gZmFsc2U7XG4gICAgICB0cnlVbnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHtcbiAgICBhZGROZXN0ZWRTdWIsXG4gICAgbm90aWZ5TmVzdGVkU3VicyxcbiAgICBoYW5kbGVDaGFuZ2VXcmFwcGVyLFxuICAgIGlzU3Vic2NyaWJlZCxcbiAgICB0cnlTdWJzY3JpYmU6IHRyeVN1YnNjcmliZVNlbGYsXG4gICAgdHJ5VW5zdWJzY3JpYmU6IHRyeVVuc3Vic2NyaWJlU2VsZixcbiAgICBnZXRMaXN0ZW5lcnM6ICgpID0+IGxpc3RlbmVyc1xuICB9O1xuICByZXR1cm4gc3Vic2NyaXB0aW9uO1xufSIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JzsgLy8gUmVhY3QgY3VycmVudGx5IHRocm93cyBhIHdhcm5pbmcgd2hlbiB1c2luZyB1c2VMYXlvdXRFZmZlY3Qgb24gdGhlIHNlcnZlci5cbi8vIFRvIGdldCBhcm91bmQgaXQsIHdlIGNhbiBjb25kaXRpb25hbGx5IHVzZUVmZmVjdCBvbiB0aGUgc2VydmVyIChuby1vcCkgYW5kXG4vLyB1c2VMYXlvdXRFZmZlY3QgaW4gdGhlIGJyb3dzZXIuIFdlIG5lZWQgdXNlTGF5b3V0RWZmZWN0IHRvIGVuc3VyZSB0aGUgc3RvcmVcbi8vIHN1YnNjcmlwdGlvbiBjYWxsYmFjayBhbHdheXMgaGFzIHRoZSBzZWxlY3RvciBmcm9tIHRoZSBsYXRlc3QgcmVuZGVyIGNvbW1pdFxuLy8gYXZhaWxhYmxlLCBvdGhlcndpc2UgYSBzdG9yZSB1cGRhdGUgbWF5IGhhcHBlbiBiZXR3ZWVuIHJlbmRlciBhbmQgdGhlIGVmZmVjdCxcbi8vIHdoaWNoIG1heSBjYXVzZSBtaXNzZWQgdXBkYXRlczsgd2UgYWxzbyBtdXN0IGVuc3VyZSB0aGUgc3RvcmUgc3Vic2NyaXB0aW9uXG4vLyBpcyBjcmVhdGVkIHN5bmNocm9ub3VzbHksIG90aGVyd2lzZSBhIHN0b3JlIHVwZGF0ZSBtYXkgb2NjdXIgYmVmb3JlIHRoZVxuLy8gc3Vic2NyaXB0aW9uIGlzIGNyZWF0ZWQgYW5kIGFuIGluY29uc2lzdGVudCBzdGF0ZSBtYXkgYmUgb2JzZXJ2ZWRcbi8vIE1hdGNoZXMgbG9naWMgaW4gUmVhY3QncyBgc2hhcmVkL0V4ZWN1dGlvbkVudmlyb25tZW50YCBmaWxlXG5cbmV4cG9ydCBjb25zdCBjYW5Vc2VET00gPSAhISh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgIT09ICd1bmRlZmluZWQnKTtcbmV4cG9ydCBjb25zdCB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0ID0gY2FuVXNlRE9NID8gUmVhY3QudXNlTGF5b3V0RWZmZWN0IDogUmVhY3QudXNlRWZmZWN0OyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJyZWFjdFJlZHV4Rm9yd2FyZGVkUmVmXCJdO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSB2YWxpZC1qc2RvYywgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG5pbXBvcnQgaG9pc3RTdGF0aWNzIGZyb20gJ2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGlzVmFsaWRFbGVtZW50VHlwZSwgaXNDb250ZXh0Q29uc3VtZXIgfSBmcm9tICdyZWFjdC1pcyc7XG5pbXBvcnQgZGVmYXVsdFNlbGVjdG9yRmFjdG9yeSBmcm9tICcuLi9jb25uZWN0L3NlbGVjdG9yRmFjdG9yeSc7XG5pbXBvcnQgeyBtYXBEaXNwYXRjaFRvUHJvcHNGYWN0b3J5IH0gZnJvbSAnLi4vY29ubmVjdC9tYXBEaXNwYXRjaFRvUHJvcHMnO1xuaW1wb3J0IHsgbWFwU3RhdGVUb1Byb3BzRmFjdG9yeSB9IGZyb20gJy4uL2Nvbm5lY3QvbWFwU3RhdGVUb1Byb3BzJztcbmltcG9ydCB7IG1lcmdlUHJvcHNGYWN0b3J5IH0gZnJvbSAnLi4vY29ubmVjdC9tZXJnZVByb3BzJztcbmltcG9ydCB7IGNyZWF0ZVN1YnNjcmlwdGlvbiB9IGZyb20gJy4uL3V0aWxzL1N1YnNjcmlwdGlvbic7XG5pbXBvcnQgeyB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0IH0gZnJvbSAnLi4vdXRpbHMvdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCc7XG5pbXBvcnQgc2hhbGxvd0VxdWFsIGZyb20gJy4uL3V0aWxzL3NoYWxsb3dFcXVhbCc7XG5pbXBvcnQgd2FybmluZyBmcm9tICcuLi91dGlscy93YXJuaW5nJztcbmltcG9ydCB7IFJlYWN0UmVkdXhDb250ZXh0IH0gZnJvbSAnLi9Db250ZXh0JztcbmltcG9ydCB7IG5vdEluaXRpYWxpemVkIH0gZnJvbSAnLi4vdXRpbHMvdXNlU3luY0V4dGVybmFsU3RvcmUnO1xubGV0IHVzZVN5bmNFeHRlcm5hbFN0b3JlID0gbm90SW5pdGlhbGl6ZWQ7XG5leHBvcnQgY29uc3QgaW5pdGlhbGl6ZUNvbm5lY3QgPSBmbiA9PiB7XG4gIHVzZVN5bmNFeHRlcm5hbFN0b3JlID0gZm47XG59OyAvLyBEZWZpbmUgc29tZSBjb25zdGFudCBhcnJheXMganVzdCB0byBhdm9pZCByZS1jcmVhdGluZyB0aGVzZVxuXG5jb25zdCBFTVBUWV9BUlJBWSA9IFtudWxsLCAwXTtcbmNvbnN0IE5PX1NVQlNDUklQVElPTl9BUlJBWSA9IFtudWxsLCBudWxsXTsgLy8gQXR0ZW1wdHMgdG8gc3RyaW5naWZ5IHdoYXRldmVyIG5vdC1yZWFsbHktYS1jb21wb25lbnQgdmFsdWUgd2Ugd2VyZSBnaXZlblxuLy8gZm9yIGxvZ2dpbmcgaW4gYW4gZXJyb3IgbWVzc2FnZVxuXG5jb25zdCBzdHJpbmdpZnlDb21wb25lbnQgPSBDb21wID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoQ29tcCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBTdHJpbmcoQ29tcCk7XG4gIH1cbn07XG5cbi8vIFRoaXMgaXMgXCJqdXN0XCIgYSBgdXNlTGF5b3V0RWZmZWN0YCwgYnV0IHdpdGggdHdvIG1vZGlmaWNhdGlvbnM6XG4vLyAtIHdlIG5lZWQgdG8gZmFsbCBiYWNrIHRvIGB1c2VFZmZlY3RgIGluIFNTUiB0byBhdm9pZCBhbm5veWluZyB3YXJuaW5nc1xuLy8gLSB3ZSBleHRyYWN0IHRoaXMgdG8gYSBzZXBhcmF0ZSBmdW5jdGlvbiB0byBhdm9pZCBjbG9zaW5nIG92ZXIgdmFsdWVzXG4vLyAgIGFuZCBjYXVzaW5nIG1lbW9yeSBsZWFrc1xuZnVuY3Rpb24gdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdFdpdGhBcmdzKGVmZmVjdEZ1bmMsIGVmZmVjdEFyZ3MsIGRlcGVuZGVuY2llcykge1xuICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KCgpID0+IGVmZmVjdEZ1bmMoLi4uZWZmZWN0QXJncyksIGRlcGVuZGVuY2llcyk7XG59IC8vIEVmZmVjdCBjYWxsYmFjaywgZXh0cmFjdGVkOiBhc3NpZ24gdGhlIGxhdGVzdCBwcm9wcyB2YWx1ZXMgdG8gcmVmcyBmb3IgbGF0ZXIgdXNhZ2VcblxuXG5mdW5jdGlvbiBjYXB0dXJlV3JhcHBlclByb3BzKGxhc3RXcmFwcGVyUHJvcHMsIGxhc3RDaGlsZFByb3BzLCByZW5kZXJJc1NjaGVkdWxlZCwgd3JhcHBlclByb3BzLCAvLyBhY3R1YWxDaGlsZFByb3BzOiB1bmtub3duLFxuY2hpbGRQcm9wc0Zyb21TdG9yZVVwZGF0ZSwgbm90aWZ5TmVzdGVkU3Vicykge1xuICAvLyBXZSB3YW50IHRvIGNhcHR1cmUgdGhlIHdyYXBwZXIgcHJvcHMgYW5kIGNoaWxkIHByb3BzIHdlIHVzZWQgZm9yIGxhdGVyIGNvbXBhcmlzb25zXG4gIGxhc3RXcmFwcGVyUHJvcHMuY3VycmVudCA9IHdyYXBwZXJQcm9wcztcbiAgcmVuZGVySXNTY2hlZHVsZWQuY3VycmVudCA9IGZhbHNlOyAvLyBJZiB0aGUgcmVuZGVyIHdhcyBmcm9tIGEgc3RvcmUgdXBkYXRlLCBjbGVhciBvdXQgdGhhdCByZWZlcmVuY2UgYW5kIGNhc2NhZGUgdGhlIHN1YnNjcmliZXIgdXBkYXRlXG5cbiAgaWYgKGNoaWxkUHJvcHNGcm9tU3RvcmVVcGRhdGUuY3VycmVudCkge1xuICAgIGNoaWxkUHJvcHNGcm9tU3RvcmVVcGRhdGUuY3VycmVudCA9IG51bGw7XG4gICAgbm90aWZ5TmVzdGVkU3VicygpO1xuICB9XG59IC8vIEVmZmVjdCBjYWxsYmFjaywgZXh0cmFjdGVkOiBzdWJzY3JpYmUgdG8gdGhlIFJlZHV4IHN0b3JlIG9yIG5lYXJlc3QgY29ubmVjdGVkIGFuY2VzdG9yLFxuLy8gY2hlY2sgZm9yIHVwZGF0ZXMgYWZ0ZXIgZGlzcGF0Y2hlZCBhY3Rpb25zLCBhbmQgdHJpZ2dlciByZS1yZW5kZXJzLlxuXG5cbmZ1bmN0aW9uIHN1YnNjcmliZVVwZGF0ZXMoc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzLCBzdG9yZSwgc3Vic2NyaXB0aW9uLCBjaGlsZFByb3BzU2VsZWN0b3IsIGxhc3RXcmFwcGVyUHJvcHMsIGxhc3RDaGlsZFByb3BzLCByZW5kZXJJc1NjaGVkdWxlZCwgaXNNb3VudGVkLCBjaGlsZFByb3BzRnJvbVN0b3JlVXBkYXRlLCBub3RpZnlOZXN0ZWRTdWJzLCAvLyBmb3JjZUNvbXBvbmVudFVwZGF0ZURpc3BhdGNoOiBSZWFjdC5EaXNwYXRjaDxhbnk+LFxuYWRkaXRpb25hbFN1YnNjcmliZUxpc3RlbmVyKSB7XG4gIC8vIElmIHdlJ3JlIG5vdCBzdWJzY3JpYmVkIHRvIHRoZSBzdG9yZSwgbm90aGluZyB0byBkbyBoZXJlXG4gIGlmICghc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzKSByZXR1cm4gKCkgPT4ge307IC8vIENhcHR1cmUgdmFsdWVzIGZvciBjaGVja2luZyBpZiBhbmQgd2hlbiB0aGlzIGNvbXBvbmVudCB1bm1vdW50c1xuXG4gIGxldCBkaWRVbnN1YnNjcmliZSA9IGZhbHNlO1xuICBsZXQgbGFzdFRocm93bkVycm9yID0gbnVsbDsgLy8gV2UnbGwgcnVuIHRoaXMgY2FsbGJhY2sgZXZlcnkgdGltZSBhIHN0b3JlIHN1YnNjcmlwdGlvbiB1cGRhdGUgcHJvcGFnYXRlcyB0byB0aGlzIGNvbXBvbmVudFxuXG4gIGNvbnN0IGNoZWNrRm9yVXBkYXRlcyA9ICgpID0+IHtcbiAgICBpZiAoZGlkVW5zdWJzY3JpYmUgfHwgIWlzTW91bnRlZC5jdXJyZW50KSB7XG4gICAgICAvLyBEb24ndCBydW4gc3RhbGUgbGlzdGVuZXJzLlxuICAgICAgLy8gUmVkdXggZG9lc24ndCBndWFyYW50ZWUgdW5zdWJzY3JpcHRpb25zIGhhcHBlbiB1bnRpbCBuZXh0IGRpc3BhdGNoLlxuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gVE9ETyBXZSdyZSBjdXJyZW50bHkgY2FsbGluZyBnZXRTdGF0ZSBvdXJzZWx2ZXMgaGVyZSwgcmF0aGVyIHRoYW4gbGV0dGluZyBgdVNFU2AgZG8gaXRcblxuXG4gICAgY29uc3QgbGF0ZXN0U3RvcmVTdGF0ZSA9IHN0b3JlLmdldFN0YXRlKCk7XG4gICAgbGV0IG5ld0NoaWxkUHJvcHMsIGVycm9yO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIEFjdHVhbGx5IHJ1biB0aGUgc2VsZWN0b3Igd2l0aCB0aGUgbW9zdCByZWNlbnQgc3RvcmUgc3RhdGUgYW5kIHdyYXBwZXIgcHJvcHNcbiAgICAgIC8vIHRvIGRldGVybWluZSB3aGF0IHRoZSBjaGlsZCBwcm9wcyBzaG91bGQgYmVcbiAgICAgIG5ld0NoaWxkUHJvcHMgPSBjaGlsZFByb3BzU2VsZWN0b3IobGF0ZXN0U3RvcmVTdGF0ZSwgbGFzdFdyYXBwZXJQcm9wcy5jdXJyZW50KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJvciA9IGU7XG4gICAgICBsYXN0VGhyb3duRXJyb3IgPSBlO1xuICAgIH1cblxuICAgIGlmICghZXJyb3IpIHtcbiAgICAgIGxhc3RUaHJvd25FcnJvciA9IG51bGw7XG4gICAgfSAvLyBJZiB0aGUgY2hpbGQgcHJvcHMgaGF2ZW4ndCBjaGFuZ2VkLCBub3RoaW5nIHRvIGRvIGhlcmUgLSBjYXNjYWRlIHRoZSBzdWJzY3JpcHRpb24gdXBkYXRlXG5cblxuICAgIGlmIChuZXdDaGlsZFByb3BzID09PSBsYXN0Q2hpbGRQcm9wcy5jdXJyZW50KSB7XG4gICAgICBpZiAoIXJlbmRlcklzU2NoZWR1bGVkLmN1cnJlbnQpIHtcbiAgICAgICAgbm90aWZ5TmVzdGVkU3VicygpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTYXZlIHJlZmVyZW5jZXMgdG8gdGhlIG5ldyBjaGlsZCBwcm9wcy4gIE5vdGUgdGhhdCB3ZSB0cmFjayB0aGUgXCJjaGlsZCBwcm9wcyBmcm9tIHN0b3JlIHVwZGF0ZVwiXG4gICAgICAvLyBhcyBhIHJlZiBpbnN0ZWFkIG9mIGEgdXNlU3RhdGUvdXNlUmVkdWNlciBiZWNhdXNlIHdlIG5lZWQgYSB3YXkgdG8gZGV0ZXJtaW5lIGlmIHRoYXQgdmFsdWUgaGFzXG4gICAgICAvLyBiZWVuIHByb2Nlc3NlZC4gIElmIHRoaXMgd2VudCBpbnRvIHVzZVN0YXRlL3VzZVJlZHVjZXIsIHdlIGNvdWxkbid0IGNsZWFyIG91dCB0aGUgdmFsdWUgd2l0aG91dFxuICAgICAgLy8gZm9yY2luZyBhbm90aGVyIHJlLXJlbmRlciwgd2hpY2ggd2UgZG9uJ3Qgd2FudC5cbiAgICAgIGxhc3RDaGlsZFByb3BzLmN1cnJlbnQgPSBuZXdDaGlsZFByb3BzO1xuICAgICAgY2hpbGRQcm9wc0Zyb21TdG9yZVVwZGF0ZS5jdXJyZW50ID0gbmV3Q2hpbGRQcm9wcztcbiAgICAgIHJlbmRlcklzU2NoZWR1bGVkLmN1cnJlbnQgPSB0cnVlOyAvLyBUT0RPIFRoaXMgaXMgaGFja3kgYW5kIG5vdCBob3cgYHVTRVNgIGlzIG1lYW50IHRvIGJlIHVzZWRcbiAgICAgIC8vIFRyaWdnZXIgdGhlIFJlYWN0IGB1c2VTeW5jRXh0ZXJuYWxTdG9yZWAgc3Vic2NyaWJlclxuXG4gICAgICBhZGRpdGlvbmFsU3Vic2NyaWJlTGlzdGVuZXIoKTtcbiAgICB9XG4gIH07IC8vIEFjdHVhbGx5IHN1YnNjcmliZSB0byB0aGUgbmVhcmVzdCBjb25uZWN0ZWQgYW5jZXN0b3IgKG9yIHN0b3JlKVxuXG5cbiAgc3Vic2NyaXB0aW9uLm9uU3RhdGVDaGFuZ2UgPSBjaGVja0ZvclVwZGF0ZXM7XG4gIHN1YnNjcmlwdGlvbi50cnlTdWJzY3JpYmUoKTsgLy8gUHVsbCBkYXRhIGZyb20gdGhlIHN0b3JlIGFmdGVyIGZpcnN0IHJlbmRlciBpbiBjYXNlIHRoZSBzdG9yZSBoYXNcbiAgLy8gY2hhbmdlZCBzaW5jZSB3ZSBiZWdhbi5cblxuICBjaGVja0ZvclVwZGF0ZXMoKTtcblxuICBjb25zdCB1bnN1YnNjcmliZVdyYXBwZXIgPSAoKSA9PiB7XG4gICAgZGlkVW5zdWJzY3JpYmUgPSB0cnVlO1xuICAgIHN1YnNjcmlwdGlvbi50cnlVbnN1YnNjcmliZSgpO1xuICAgIHN1YnNjcmlwdGlvbi5vblN0YXRlQ2hhbmdlID0gbnVsbDtcblxuICAgIGlmIChsYXN0VGhyb3duRXJyb3IpIHtcbiAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB3ZSBjYXVnaHQgYW4gZXJyb3IgZHVlIHRvIGEgYmFkIG1hcFN0YXRlIGZ1bmN0aW9uLCBidXQgdGhlXG4gICAgICAvLyBwYXJlbnQgcmUtcmVuZGVyZWQgd2l0aG91dCB0aGlzIGNvbXBvbmVudCBhbmQgd2UncmUgYWJvdXQgdG8gdW5tb3VudC5cbiAgICAgIC8vIFRoaXMgc2hvdWxkbid0IGhhcHBlbiBhcyBsb25nIGFzIHdlIGRvIHRvcC1kb3duIHN1YnNjcmlwdGlvbnMgY29ycmVjdGx5LCBidXRcbiAgICAgIC8vIGlmIHdlIGV2ZXIgZG8gdGhvc2Ugd3JvbmcsIHRoaXMgdGhyb3cgd2lsbCBzdXJmYWNlIHRoZSBlcnJvciBpbiBvdXIgdGVzdHMuXG4gICAgICAvLyBJbiB0aGF0IGNhc2UsIHRocm93IHRoZSBlcnJvciBmcm9tIGhlcmUgc28gaXQgZG9lc24ndCBnZXQgbG9zdC5cbiAgICAgIHRocm93IGxhc3RUaHJvd25FcnJvcjtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIHVuc3Vic2NyaWJlV3JhcHBlcjtcbn0gLy8gUmVkdWNlciBpbml0aWFsIHN0YXRlIGNyZWF0aW9uIGZvciBvdXIgdXBkYXRlIHJlZHVjZXJcblxuXG5jb25zdCBpbml0U3RhdGVVcGRhdGVzID0gKCkgPT4gRU1QVFlfQVJSQVk7XG5cbmZ1bmN0aW9uIHN0cmljdEVxdWFsKGEsIGIpIHtcbiAgcmV0dXJuIGEgPT09IGI7XG59XG4vKipcclxuICogSW5mZXJzIHRoZSB0eXBlIG9mIHByb3BzIHRoYXQgYSBjb25uZWN0b3Igd2lsbCBpbmplY3QgaW50byBhIGNvbXBvbmVudC5cclxuICovXG5cblxubGV0IGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZFB1cmVPcHRpb24gPSBmYWxzZTtcbi8qKlxyXG4gKiBDb25uZWN0cyBhIFJlYWN0IGNvbXBvbmVudCB0byBhIFJlZHV4IHN0b3JlLlxyXG4gKlxyXG4gKiAtIFdpdGhvdXQgYXJndW1lbnRzLCBqdXN0IHdyYXBzIHRoZSBjb21wb25lbnQsIHdpdGhvdXQgY2hhbmdpbmcgdGhlIGJlaGF2aW9yIC8gcHJvcHNcclxuICpcclxuICogLSBJZiAyIHBhcmFtcyBhcmUgcGFzc2VkICgzcmQgcGFyYW0sIG1lcmdlUHJvcHMsIGlzIHNraXBwZWQpLCBkZWZhdWx0IGJlaGF2aW9yXHJcbiAqIGlzIHRvIG92ZXJyaWRlIG93blByb3BzIChhcyBzdGF0ZWQgaW4gdGhlIGRvY3MpLCBzbyB3aGF0IHJlbWFpbnMgaXMgZXZlcnl0aGluZyB0aGF0J3NcclxuICogbm90IGEgc3RhdGUgb3IgZGlzcGF0Y2ggcHJvcFxyXG4gKlxyXG4gKiAtIFdoZW4gM3JkIHBhcmFtIGlzIHBhc3NlZCwgd2UgZG9uJ3Qga25vdyBpZiBvd25Qcm9wcyBwcm9wYWdhdGUgYW5kIHdoZXRoZXIgdGhleVxyXG4gKiBzaG91bGQgYmUgdmFsaWQgY29tcG9uZW50IHByb3BzLCBiZWNhdXNlIGl0IGRlcGVuZHMgb24gbWVyZ2VQcm9wcyBpbXBsZW1lbnRhdGlvbi5cclxuICogQXMgc3VjaCwgaXQgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eSB0byBleHRlbmQgb3duUHJvcHMgaW50ZXJmYWNlIGZyb20gc3RhdGUgb3JcclxuICogZGlzcGF0Y2ggcHJvcHMgb3IgYm90aCB3aGVuIGFwcGxpY2FibGVcclxuICpcclxuICogQHBhcmFtIG1hcFN0YXRlVG9Qcm9wcyBBIGZ1bmN0aW9uIHRoYXQgZXh0cmFjdHMgdmFsdWVzIGZyb20gc3RhdGVcclxuICogQHBhcmFtIG1hcERpc3BhdGNoVG9Qcm9wcyBTZXR1cCBmb3IgZGlzcGF0Y2hpbmcgYWN0aW9uc1xyXG4gKiBAcGFyYW0gbWVyZ2VQcm9wcyBPcHRpb25hbCBjYWxsYmFjayB0byBtZXJnZSBzdGF0ZSBhbmQgZGlzcGF0Y2ggcHJvcHMgdG9nZXRoZXJcclxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgdGhlIGNvbm5lY3Rpb25cclxuICpcclxuICovXG5cbmZ1bmN0aW9uIGNvbm5lY3QobWFwU3RhdGVUb1Byb3BzLCBtYXBEaXNwYXRjaFRvUHJvcHMsIG1lcmdlUHJvcHMsIHtcbiAgLy8gVGhlIGBwdXJlYCBvcHRpb24gaGFzIGJlZW4gcmVtb3ZlZCwgc28gVFMgZG9lc24ndCBsaWtlIHVzIGRlc3RydWN0dXJpbmcgdGhpcyB0byBjaGVjayBpdHMgZXhpc3RlbmNlLlxuICAvLyBAdHMtaWdub3JlXG4gIHB1cmUsXG4gIGFyZVN0YXRlc0VxdWFsID0gc3RyaWN0RXF1YWwsXG4gIGFyZU93blByb3BzRXF1YWwgPSBzaGFsbG93RXF1YWwsXG4gIGFyZVN0YXRlUHJvcHNFcXVhbCA9IHNoYWxsb3dFcXVhbCxcbiAgYXJlTWVyZ2VkUHJvcHNFcXVhbCA9IHNoYWxsb3dFcXVhbCxcbiAgLy8gdXNlIFJlYWN0J3MgZm9yd2FyZFJlZiB0byBleHBvc2UgYSByZWYgb2YgdGhlIHdyYXBwZWQgY29tcG9uZW50XG4gIGZvcndhcmRSZWYgPSBmYWxzZSxcbiAgLy8gdGhlIGNvbnRleHQgY29uc3VtZXIgdG8gdXNlXG4gIGNvbnRleHQgPSBSZWFjdFJlZHV4Q29udGV4dFxufSA9IHt9KSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKHB1cmUgIT09IHVuZGVmaW5lZCAmJiAhaGFzV2FybmVkQWJvdXREZXByZWNhdGVkUHVyZU9wdGlvbikge1xuICAgICAgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkUHVyZU9wdGlvbiA9IHRydWU7XG4gICAgICB3YXJuaW5nKCdUaGUgYHB1cmVgIG9wdGlvbiBoYXMgYmVlbiByZW1vdmVkLiBgY29ubmVjdGAgaXMgbm93IGFsd2F5cyBhIFwicHVyZS9tZW1vaXplZFwiIGNvbXBvbmVudCcpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IENvbnRleHQgPSBjb250ZXh0O1xuICBjb25zdCBpbml0TWFwU3RhdGVUb1Byb3BzID0gbWFwU3RhdGVUb1Byb3BzRmFjdG9yeShtYXBTdGF0ZVRvUHJvcHMpO1xuICBjb25zdCBpbml0TWFwRGlzcGF0Y2hUb1Byb3BzID0gbWFwRGlzcGF0Y2hUb1Byb3BzRmFjdG9yeShtYXBEaXNwYXRjaFRvUHJvcHMpO1xuICBjb25zdCBpbml0TWVyZ2VQcm9wcyA9IG1lcmdlUHJvcHNGYWN0b3J5KG1lcmdlUHJvcHMpO1xuICBjb25zdCBzaG91bGRIYW5kbGVTdGF0ZUNoYW5nZXMgPSBCb29sZWFuKG1hcFN0YXRlVG9Qcm9wcyk7XG5cbiAgY29uc3Qgd3JhcFdpdGhDb25uZWN0ID0gV3JhcHBlZENvbXBvbmVudCA9PiB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIWlzVmFsaWRFbGVtZW50VHlwZShXcmFwcGVkQ29tcG9uZW50KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBZb3UgbXVzdCBwYXNzIGEgY29tcG9uZW50IHRvIHRoZSBmdW5jdGlvbiByZXR1cm5lZCBieSBjb25uZWN0LiBJbnN0ZWFkIHJlY2VpdmVkICR7c3RyaW5naWZ5Q29tcG9uZW50KFdyYXBwZWRDb21wb25lbnQpfWApO1xuICAgIH1cblxuICAgIGNvbnN0IHdyYXBwZWRDb21wb25lbnROYW1lID0gV3JhcHBlZENvbXBvbmVudC5kaXNwbGF5TmFtZSB8fCBXcmFwcGVkQ29tcG9uZW50Lm5hbWUgfHwgJ0NvbXBvbmVudCc7XG4gICAgY29uc3QgZGlzcGxheU5hbWUgPSBgQ29ubmVjdCgke3dyYXBwZWRDb21wb25lbnROYW1lfSlgO1xuICAgIGNvbnN0IHNlbGVjdG9yRmFjdG9yeU9wdGlvbnMgPSB7XG4gICAgICBzaG91bGRIYW5kbGVTdGF0ZUNoYW5nZXMsXG4gICAgICBkaXNwbGF5TmFtZSxcbiAgICAgIHdyYXBwZWRDb21wb25lbnROYW1lLFxuICAgICAgV3JhcHBlZENvbXBvbmVudCxcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGluaXRNYXBTdGF0ZVRvUHJvcHMsXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBpbml0TWFwRGlzcGF0Y2hUb1Byb3BzLFxuICAgICAgaW5pdE1lcmdlUHJvcHMsXG4gICAgICBhcmVTdGF0ZXNFcXVhbCxcbiAgICAgIGFyZVN0YXRlUHJvcHNFcXVhbCxcbiAgICAgIGFyZU93blByb3BzRXF1YWwsXG4gICAgICBhcmVNZXJnZWRQcm9wc0VxdWFsXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIENvbm5lY3RGdW5jdGlvbihwcm9wcykge1xuICAgICAgY29uc3QgW3Byb3BzQ29udGV4dCwgcmVhY3RSZWR1eEZvcndhcmRlZFJlZiwgd3JhcHBlclByb3BzXSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgICAgICAvLyBEaXN0aW5ndWlzaCBiZXR3ZWVuIGFjdHVhbCBcImRhdGFcIiBwcm9wcyB0aGF0IHdlcmUgcGFzc2VkIHRvIHRoZSB3cmFwcGVyIGNvbXBvbmVudCxcbiAgICAgICAgLy8gYW5kIHZhbHVlcyBuZWVkZWQgdG8gY29udHJvbCBiZWhhdmlvciAoZm9yd2FyZGVkIHJlZnMsIGFsdGVybmF0ZSBjb250ZXh0IGluc3RhbmNlcykuXG4gICAgICAgIC8vIFRvIG1haW50YWluIHRoZSB3cmFwcGVyUHJvcHMgb2JqZWN0IHJlZmVyZW5jZSwgbWVtb2l6ZSB0aGlzIGRlc3RydWN0dXJpbmcuXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICByZWFjdFJlZHV4Rm9yd2FyZGVkUmVmXG4gICAgICAgIH0gPSBwcm9wcyxcbiAgICAgICAgICAgICAgd3JhcHBlclByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgICAgICAgcmV0dXJuIFtwcm9wcy5jb250ZXh0LCByZWFjdFJlZHV4Rm9yd2FyZGVkUmVmLCB3cmFwcGVyUHJvcHNdO1xuICAgICAgfSwgW3Byb3BzXSk7XG4gICAgICBjb25zdCBDb250ZXh0VG9Vc2UgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICAgICAgLy8gVXNlcnMgbWF5IG9wdGlvbmFsbHkgcGFzcyBpbiBhIGN1c3RvbSBjb250ZXh0IGluc3RhbmNlIHRvIHVzZSBpbnN0ZWFkIG9mIG91ciBSZWFjdFJlZHV4Q29udGV4dC5cbiAgICAgICAgLy8gTWVtb2l6ZSB0aGUgY2hlY2sgdGhhdCBkZXRlcm1pbmVzIHdoaWNoIGNvbnRleHQgaW5zdGFuY2Ugd2Ugc2hvdWxkIHVzZS5cbiAgICAgICAgcmV0dXJuIHByb3BzQ29udGV4dCAmJiBwcm9wc0NvbnRleHQuQ29uc3VtZXIgJiYgLy8gQHRzLWlnbm9yZVxuICAgICAgICBpc0NvbnRleHRDb25zdW1lciggLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQocHJvcHNDb250ZXh0LkNvbnN1bWVyLCBudWxsKSkgPyBwcm9wc0NvbnRleHQgOiBDb250ZXh0O1xuICAgICAgfSwgW3Byb3BzQ29udGV4dCwgQ29udGV4dF0pOyAvLyBSZXRyaWV2ZSB0aGUgc3RvcmUgYW5kIGFuY2VzdG9yIHN1YnNjcmlwdGlvbiB2aWEgY29udGV4dCwgaWYgYXZhaWxhYmxlXG5cbiAgICAgIGNvbnN0IGNvbnRleHRWYWx1ZSA9IFJlYWN0LnVzZUNvbnRleHQoQ29udGV4dFRvVXNlKTsgLy8gVGhlIHN0b3JlIF9tdXN0XyBleGlzdCBhcyBlaXRoZXIgYSBwcm9wIG9yIGluIGNvbnRleHQuXG4gICAgICAvLyBXZSdsbCBjaGVjayB0byBzZWUgaWYgaXQgX2xvb2tzXyBsaWtlIGEgUmVkdXggc3RvcmUgZmlyc3QuXG4gICAgICAvLyBUaGlzIGFsbG93cyB1cyB0byBwYXNzIHRocm91Z2ggYSBgc3RvcmVgIHByb3AgdGhhdCBpcyBqdXN0IGEgcGxhaW4gdmFsdWUuXG5cbiAgICAgIGNvbnN0IGRpZFN0b3JlQ29tZUZyb21Qcm9wcyA9IEJvb2xlYW4ocHJvcHMuc3RvcmUpICYmIEJvb2xlYW4ocHJvcHMuc3RvcmUuZ2V0U3RhdGUpICYmIEJvb2xlYW4ocHJvcHMuc3RvcmUuZGlzcGF0Y2gpO1xuICAgICAgY29uc3QgZGlkU3RvcmVDb21lRnJvbUNvbnRleHQgPSBCb29sZWFuKGNvbnRleHRWYWx1ZSkgJiYgQm9vbGVhbihjb250ZXh0VmFsdWUuc3RvcmUpO1xuXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhZGlkU3RvcmVDb21lRnJvbVByb3BzICYmICFkaWRTdG9yZUNvbWVGcm9tQ29udGV4dCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIFwic3RvcmVcIiBpbiB0aGUgY29udGV4dCBvZiBgICsgYFwiJHtkaXNwbGF5TmFtZX1cIi4gRWl0aGVyIHdyYXAgdGhlIHJvb3QgY29tcG9uZW50IGluIGEgPFByb3ZpZGVyPiwgYCArIGBvciBwYXNzIGEgY3VzdG9tIFJlYWN0IGNvbnRleHQgcHJvdmlkZXIgdG8gPFByb3ZpZGVyPiBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgYCArIGBSZWFjdCBjb250ZXh0IGNvbnN1bWVyIHRvICR7ZGlzcGxheU5hbWV9IGluIGNvbm5lY3Qgb3B0aW9ucy5gKTtcbiAgICAgIH0gLy8gQmFzZWQgb24gdGhlIHByZXZpb3VzIGNoZWNrLCBvbmUgb2YgdGhlc2UgbXVzdCBiZSB0cnVlXG5cblxuICAgICAgY29uc3Qgc3RvcmUgPSBkaWRTdG9yZUNvbWVGcm9tUHJvcHMgPyBwcm9wcy5zdG9yZSA6IGNvbnRleHRWYWx1ZS5zdG9yZTtcbiAgICAgIGNvbnN0IGdldFNlcnZlclN0YXRlID0gZGlkU3RvcmVDb21lRnJvbUNvbnRleHQgPyBjb250ZXh0VmFsdWUuZ2V0U2VydmVyU3RhdGUgOiBzdG9yZS5nZXRTdGF0ZTtcbiAgICAgIGNvbnN0IGNoaWxkUHJvcHNTZWxlY3RvciA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgICAgICAvLyBUaGUgY2hpbGQgcHJvcHMgc2VsZWN0b3IgbmVlZHMgdGhlIHN0b3JlIHJlZmVyZW5jZSBhcyBhbiBpbnB1dC5cbiAgICAgICAgLy8gUmUtY3JlYXRlIHRoaXMgc2VsZWN0b3Igd2hlbmV2ZXIgdGhlIHN0b3JlIGNoYW5nZXMuXG4gICAgICAgIHJldHVybiBkZWZhdWx0U2VsZWN0b3JGYWN0b3J5KHN0b3JlLmRpc3BhdGNoLCBzZWxlY3RvckZhY3RvcnlPcHRpb25zKTtcbiAgICAgIH0sIFtzdG9yZV0pO1xuICAgICAgY29uc3QgW3N1YnNjcmlwdGlvbiwgbm90aWZ5TmVzdGVkU3Vic10gPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICAgICAgaWYgKCFzaG91bGRIYW5kbGVTdGF0ZUNoYW5nZXMpIHJldHVybiBOT19TVUJTQ1JJUFRJT05fQVJSQVk7IC8vIFRoaXMgU3Vic2NyaXB0aW9uJ3Mgc291cmNlIHNob3VsZCBtYXRjaCB3aGVyZSBzdG9yZSBjYW1lIGZyb206IHByb3BzIHZzLiBjb250ZXh0LiBBIGNvbXBvbmVudFxuICAgICAgICAvLyBjb25uZWN0ZWQgdG8gdGhlIHN0b3JlIHZpYSBwcm9wcyBzaG91bGRuJ3QgdXNlIHN1YnNjcmlwdGlvbiBmcm9tIGNvbnRleHQsIG9yIHZpY2UgdmVyc2EuXG5cbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gY3JlYXRlU3Vic2NyaXB0aW9uKHN0b3JlLCBkaWRTdG9yZUNvbWVGcm9tUHJvcHMgPyB1bmRlZmluZWQgOiBjb250ZXh0VmFsdWUuc3Vic2NyaXB0aW9uKTsgLy8gYG5vdGlmeU5lc3RlZFN1YnNgIGlzIGR1cGxpY2F0ZWQgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZSBjb21wb25lbnQgaXMgdW5tb3VudGVkIGluXG4gICAgICAgIC8vIHRoZSBtaWRkbGUgb2YgdGhlIG5vdGlmaWNhdGlvbiBsb29wLCB3aGVyZSBgc3Vic2NyaXB0aW9uYCB3aWxsIHRoZW4gYmUgbnVsbC4gVGhpcyBjYW5cbiAgICAgICAgLy8gcHJvYmFibHkgYmUgYXZvaWRlZCBpZiBTdWJzY3JpcHRpb24ncyBsaXN0ZW5lcnMgbG9naWMgaXMgY2hhbmdlZCB0byBub3QgY2FsbCBsaXN0ZW5lcnNcbiAgICAgICAgLy8gdGhhdCBoYXZlIGJlZW4gdW5zdWJzY3JpYmVkIGluIHRoZSAgbWlkZGxlIG9mIHRoZSBub3RpZmljYXRpb24gbG9vcC5cblxuICAgICAgICBjb25zdCBub3RpZnlOZXN0ZWRTdWJzID0gc3Vic2NyaXB0aW9uLm5vdGlmeU5lc3RlZFN1YnMuYmluZChzdWJzY3JpcHRpb24pO1xuICAgICAgICByZXR1cm4gW3N1YnNjcmlwdGlvbiwgbm90aWZ5TmVzdGVkU3Vic107XG4gICAgICB9LCBbc3RvcmUsIGRpZFN0b3JlQ29tZUZyb21Qcm9wcywgY29udGV4dFZhbHVlXSk7IC8vIERldGVybWluZSB3aGF0IHtzdG9yZSwgc3Vic2NyaXB0aW9ufSB2YWx1ZSBzaG91bGQgYmUgcHV0IGludG8gbmVzdGVkIGNvbnRleHQsIGlmIG5lY2Vzc2FyeSxcbiAgICAgIC8vIGFuZCBtZW1vaXplIHRoYXQgdmFsdWUgdG8gYXZvaWQgdW5uZWNlc3NhcnkgY29udGV4dCB1cGRhdGVzLlxuXG4gICAgICBjb25zdCBvdmVycmlkZGVuQ29udGV4dFZhbHVlID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGlmIChkaWRTdG9yZUNvbWVGcm9tUHJvcHMpIHtcbiAgICAgICAgICAvLyBUaGlzIGNvbXBvbmVudCBpcyBkaXJlY3RseSBzdWJzY3JpYmVkIHRvIGEgc3RvcmUgZnJvbSBwcm9wcy5cbiAgICAgICAgICAvLyBXZSBkb24ndCB3YW50IGRlc2NlbmRhbnRzIHJlYWRpbmcgZnJvbSB0aGlzIHN0b3JlIC0gcGFzcyBkb3duIHdoYXRldmVyXG4gICAgICAgICAgLy8gdGhlIGV4aXN0aW5nIGNvbnRleHQgdmFsdWUgaXMgZnJvbSB0aGUgbmVhcmVzdCBjb25uZWN0ZWQgYW5jZXN0b3IuXG4gICAgICAgICAgcmV0dXJuIGNvbnRleHRWYWx1ZTtcbiAgICAgICAgfSAvLyBPdGhlcndpc2UsIHB1dCB0aGlzIGNvbXBvbmVudCdzIHN1YnNjcmlwdGlvbiBpbnN0YW5jZSBpbnRvIGNvbnRleHQsIHNvIHRoYXRcbiAgICAgICAgLy8gY29ubmVjdGVkIGRlc2NlbmRhbnRzIHdvbid0IHVwZGF0ZSB1bnRpbCBhZnRlciB0aGlzIGNvbXBvbmVudCBpcyBkb25lXG5cblxuICAgICAgICByZXR1cm4gX2V4dGVuZHMoe30sIGNvbnRleHRWYWx1ZSwge1xuICAgICAgICAgIHN1YnNjcmlwdGlvblxuICAgICAgICB9KTtcbiAgICAgIH0sIFtkaWRTdG9yZUNvbWVGcm9tUHJvcHMsIGNvbnRleHRWYWx1ZSwgc3Vic2NyaXB0aW9uXSk7IC8vIFNldCB1cCByZWZzIHRvIGNvb3JkaW5hdGUgdmFsdWVzIGJldHdlZW4gdGhlIHN1YnNjcmlwdGlvbiBlZmZlY3QgYW5kIHRoZSByZW5kZXIgbG9naWNcblxuICAgICAgY29uc3QgbGFzdENoaWxkUHJvcHMgPSBSZWFjdC51c2VSZWYoKTtcbiAgICAgIGNvbnN0IGxhc3RXcmFwcGVyUHJvcHMgPSBSZWFjdC51c2VSZWYod3JhcHBlclByb3BzKTtcbiAgICAgIGNvbnN0IGNoaWxkUHJvcHNGcm9tU3RvcmVVcGRhdGUgPSBSZWFjdC51c2VSZWYoKTtcbiAgICAgIGNvbnN0IHJlbmRlcklzU2NoZWR1bGVkID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcbiAgICAgIGNvbnN0IGlzUHJvY2Vzc2luZ0Rpc3BhdGNoID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcbiAgICAgIGNvbnN0IGlzTW91bnRlZCA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gICAgICBjb25zdCBsYXRlc3RTdWJzY3JpcHRpb25DYWxsYmFja0Vycm9yID0gUmVhY3QudXNlUmVmKCk7XG4gICAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICAgICAgaXNNb3VudGVkLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgIGlzTW91bnRlZC5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIH07XG4gICAgICB9LCBbXSk7XG4gICAgICBjb25zdCBhY3R1YWxDaGlsZFByb3BzU2VsZWN0b3IgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICAgICAgY29uc3Qgc2VsZWN0b3IgPSAoKSA9PiB7XG4gICAgICAgICAgLy8gVHJpY2t5IGxvZ2ljIGhlcmU6XG4gICAgICAgICAgLy8gLSBUaGlzIHJlbmRlciBtYXkgaGF2ZSBiZWVuIHRyaWdnZXJlZCBieSBhIFJlZHV4IHN0b3JlIHVwZGF0ZSB0aGF0IHByb2R1Y2VkIG5ldyBjaGlsZCBwcm9wc1xuICAgICAgICAgIC8vIC0gSG93ZXZlciwgd2UgbWF5IGhhdmUgZ290dGVuIG5ldyB3cmFwcGVyIHByb3BzIGFmdGVyIHRoYXRcbiAgICAgICAgICAvLyBJZiB3ZSBoYXZlIG5ldyBjaGlsZCBwcm9wcywgYW5kIHRoZSBzYW1lIHdyYXBwZXIgcHJvcHMsIHdlIGtub3cgd2Ugc2hvdWxkIHVzZSB0aGUgbmV3IGNoaWxkIHByb3BzIGFzLWlzLlxuICAgICAgICAgIC8vIEJ1dCwgaWYgd2UgaGF2ZSBuZXcgd3JhcHBlciBwcm9wcywgdGhvc2UgbWlnaHQgY2hhbmdlIHRoZSBjaGlsZCBwcm9wcywgc28gd2UgaGF2ZSB0byByZWNhbGN1bGF0ZSB0aGluZ3MuXG4gICAgICAgICAgLy8gU28sIHdlJ2xsIHVzZSB0aGUgY2hpbGQgcHJvcHMgZnJvbSBzdG9yZSB1cGRhdGUgb25seSBpZiB0aGUgd3JhcHBlciBwcm9wcyBhcmUgdGhlIHNhbWUgYXMgbGFzdCB0aW1lLlxuICAgICAgICAgIGlmIChjaGlsZFByb3BzRnJvbVN0b3JlVXBkYXRlLmN1cnJlbnQgJiYgd3JhcHBlclByb3BzID09PSBsYXN0V3JhcHBlclByb3BzLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBjaGlsZFByb3BzRnJvbVN0b3JlVXBkYXRlLmN1cnJlbnQ7XG4gICAgICAgICAgfSAvLyBUT0RPIFdlJ3JlIHJlYWRpbmcgdGhlIHN0b3JlIGRpcmVjdGx5IGluIHJlbmRlcigpIGhlcmUuIEJhZCBpZGVhP1xuICAgICAgICAgIC8vIFRoaXMgd2lsbCBsaWtlbHkgY2F1c2UgQmFkIFRoaW5ncyAoVE0pIHRvIGhhcHBlbiBpbiBDb25jdXJyZW50IE1vZGUuXG4gICAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGRvIHRoaXMgYmVjYXVzZSBvbiByZW5kZXJzIF9ub3RfIGNhdXNlZCBieSBzdG9yZSB1cGRhdGVzLCB3ZSBuZWVkIHRoZSBsYXRlc3Qgc3RvcmUgc3RhdGVcbiAgICAgICAgICAvLyB0byBkZXRlcm1pbmUgd2hhdCB0aGUgY2hpbGQgcHJvcHMgc2hvdWxkIGJlLlxuXG5cbiAgICAgICAgICByZXR1cm4gY2hpbGRQcm9wc1NlbGVjdG9yKHN0b3JlLmdldFN0YXRlKCksIHdyYXBwZXJQcm9wcyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHNlbGVjdG9yO1xuICAgICAgfSwgW3N0b3JlLCB3cmFwcGVyUHJvcHNdKTsgLy8gV2UgbmVlZCB0aGlzIHRvIGV4ZWN1dGUgc3luY2hyb25vdXNseSBldmVyeSB0aW1lIHdlIHJlLXJlbmRlci4gSG93ZXZlciwgUmVhY3Qgd2FybnNcbiAgICAgIC8vIGFib3V0IHVzZUxheW91dEVmZmVjdCBpbiBTU1IsIHNvIHdlIHRyeSB0byBkZXRlY3QgZW52aXJvbm1lbnQgYW5kIGZhbGwgYmFjayB0b1xuICAgICAgLy8ganVzdCB1c2VFZmZlY3QgaW5zdGVhZCB0byBhdm9pZCB0aGUgd2FybmluZywgc2luY2UgbmVpdGhlciB3aWxsIHJ1biBhbnl3YXkuXG5cbiAgICAgIGNvbnN0IHN1YnNjcmliZUZvclJlYWN0ID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGNvbnN0IHN1YnNjcmliZSA9IHJlYWN0TGlzdGVuZXIgPT4ge1xuICAgICAgICAgIGlmICghc3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge307XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHN1YnNjcmliZVVwZGF0ZXMoc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzLCBzdG9yZSwgc3Vic2NyaXB0aW9uLCAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgY2hpbGRQcm9wc1NlbGVjdG9yLCBsYXN0V3JhcHBlclByb3BzLCBsYXN0Q2hpbGRQcm9wcywgcmVuZGVySXNTY2hlZHVsZWQsIGlzTW91bnRlZCwgY2hpbGRQcm9wc0Zyb21TdG9yZVVwZGF0ZSwgbm90aWZ5TmVzdGVkU3VicywgcmVhY3RMaXN0ZW5lcik7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHN1YnNjcmliZTtcbiAgICAgIH0sIFtzdWJzY3JpcHRpb25dKTtcbiAgICAgIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3RXaXRoQXJncyhjYXB0dXJlV3JhcHBlclByb3BzLCBbbGFzdFdyYXBwZXJQcm9wcywgbGFzdENoaWxkUHJvcHMsIHJlbmRlcklzU2NoZWR1bGVkLCB3cmFwcGVyUHJvcHMsIGNoaWxkUHJvcHNGcm9tU3RvcmVVcGRhdGUsIG5vdGlmeU5lc3RlZFN1YnNdKTtcbiAgICAgIGxldCBhY3R1YWxDaGlsZFByb3BzO1xuXG4gICAgICB0cnkge1xuICAgICAgICBhY3R1YWxDaGlsZFByb3BzID0gdXNlU3luY0V4dGVybmFsU3RvcmUoIC8vIFRPRE8gV2UncmUgcGFzc2luZyB0aHJvdWdoIGEgYmlnIHdyYXBwZXIgdGhhdCBkb2VzIGEgYnVuY2ggb2YgZXh0cmEgc2lkZSBlZmZlY3RzIGJlc2lkZXMgc3Vic2NyaWJpbmdcbiAgICAgICAgc3Vic2NyaWJlRm9yUmVhY3QsIC8vIFRPRE8gVGhpcyBpcyBpbmNyZWRpYmx5IGhhY2t5LiBXZSd2ZSBhbHJlYWR5IHByb2Nlc3NlZCB0aGUgc3RvcmUgdXBkYXRlIGFuZCBjYWxjdWxhdGVkIG5ldyBjaGlsZCBwcm9wcyxcbiAgICAgICAgLy8gVE9ETyBhbmQgd2UncmUganVzdCBwYXNzaW5nIHRoYXQgdGhyb3VnaCBzbyBpdCB0cmlnZ2VycyBhIHJlLXJlbmRlciBmb3IgdXMgcmF0aGVyIHRoYW4gcmVseWluZyBvbiBgdVNFU2AuXG4gICAgICAgIGFjdHVhbENoaWxkUHJvcHNTZWxlY3RvciwgZ2V0U2VydmVyU3RhdGUgPyAoKSA9PiBjaGlsZFByb3BzU2VsZWN0b3IoZ2V0U2VydmVyU3RhdGUoKSwgd3JhcHBlclByb3BzKSA6IGFjdHVhbENoaWxkUHJvcHNTZWxlY3Rvcik7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKGxhdGVzdFN1YnNjcmlwdGlvbkNhbGxiYWNrRXJyb3IuY3VycmVudCkge1xuICAgICAgICAgIDtcbiAgICAgICAgICBlcnIubWVzc2FnZSArPSBgXFxuVGhlIGVycm9yIG1heSBiZSBjb3JyZWxhdGVkIHdpdGggdGhpcyBwcmV2aW91cyBlcnJvcjpcXG4ke2xhdGVzdFN1YnNjcmlwdGlvbkNhbGxiYWNrRXJyb3IuY3VycmVudC5zdGFja31cXG5cXG5gO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuXG4gICAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICAgICAgbGF0ZXN0U3Vic2NyaXB0aW9uQ2FsbGJhY2tFcnJvci5jdXJyZW50ID0gdW5kZWZpbmVkO1xuICAgICAgICBjaGlsZFByb3BzRnJvbVN0b3JlVXBkYXRlLmN1cnJlbnQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGxhc3RDaGlsZFByb3BzLmN1cnJlbnQgPSBhY3R1YWxDaGlsZFByb3BzO1xuICAgICAgfSk7IC8vIE5vdyB0aGF0IGFsbCB0aGF0J3MgZG9uZSwgd2UgY2FuIGZpbmFsbHkgdHJ5IHRvIGFjdHVhbGx5IHJlbmRlciB0aGUgY2hpbGQgY29tcG9uZW50LlxuICAgICAgLy8gV2UgbWVtb2l6ZSB0aGUgZWxlbWVudHMgZm9yIHRoZSByZW5kZXJlZCBjaGlsZCBjb21wb25lbnQgYXMgYW4gb3B0aW1pemF0aW9uLlxuXG4gICAgICBjb25zdCByZW5kZXJlZFdyYXBwZWRDb21wb25lbnQgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoV3JhcHBlZENvbXBvbmVudCwgX2V4dGVuZHMoe30sIGFjdHVhbENoaWxkUHJvcHMsIHtcbiAgICAgICAgICAgIHJlZjogcmVhY3RSZWR1eEZvcndhcmRlZFJlZlxuICAgICAgICAgIH0pKVxuICAgICAgICApO1xuICAgICAgfSwgW3JlYWN0UmVkdXhGb3J3YXJkZWRSZWYsIFdyYXBwZWRDb21wb25lbnQsIGFjdHVhbENoaWxkUHJvcHNdKTsgLy8gSWYgUmVhY3Qgc2VlcyB0aGUgZXhhY3Qgc2FtZSBlbGVtZW50IHJlZmVyZW5jZSBhcyBsYXN0IHRpbWUsIGl0IGJhaWxzIG91dCBvZiByZS1yZW5kZXJpbmdcbiAgICAgIC8vIHRoYXQgY2hpbGQsIHNhbWUgYXMgaWYgaXQgd2FzIHdyYXBwZWQgaW4gUmVhY3QubWVtbygpIG9yIHJldHVybmVkIGZhbHNlIGZyb20gc2hvdWxkQ29tcG9uZW50VXBkYXRlLlxuXG4gICAgICBjb25zdCByZW5kZXJlZENoaWxkID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGlmIChzaG91bGRIYW5kbGVTdGF0ZUNoYW5nZXMpIHtcbiAgICAgICAgICAvLyBJZiB0aGlzIGNvbXBvbmVudCBpcyBzdWJzY3JpYmVkIHRvIHN0b3JlIHVwZGF0ZXMsIHdlIG5lZWQgdG8gcGFzcyBpdHMgb3duXG4gICAgICAgICAgLy8gc3Vic2NyaXB0aW9uIGluc3RhbmNlIGRvd24gdG8gb3VyIGRlc2NlbmRhbnRzLiBUaGF0IG1lYW5zIHJlbmRlcmluZyB0aGUgc2FtZVxuICAgICAgICAgIC8vIENvbnRleHQgaW5zdGFuY2UsIGFuZCBwdXR0aW5nIGEgZGlmZmVyZW50IHZhbHVlIGludG8gdGhlIGNvbnRleHQuXG4gICAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENvbnRleHRUb1VzZS5Qcm92aWRlciwge1xuICAgICAgICAgICAgdmFsdWU6IG92ZXJyaWRkZW5Db250ZXh0VmFsdWVcbiAgICAgICAgICB9LCByZW5kZXJlZFdyYXBwZWRDb21wb25lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlbmRlcmVkV3JhcHBlZENvbXBvbmVudDtcbiAgICAgIH0sIFtDb250ZXh0VG9Vc2UsIHJlbmRlcmVkV3JhcHBlZENvbXBvbmVudCwgb3ZlcnJpZGRlbkNvbnRleHRWYWx1ZV0pO1xuICAgICAgcmV0dXJuIHJlbmRlcmVkQ2hpbGQ7XG4gICAgfVxuXG4gICAgY29uc3QgX0Nvbm5lY3QgPSBSZWFjdC5tZW1vKENvbm5lY3RGdW5jdGlvbik7XG5cbiAgICAvLyBBZGQgYSBoYWNreSBjYXN0IHRvIGdldCB0aGUgcmlnaHQgb3V0cHV0IHR5cGVcbiAgICBjb25zdCBDb25uZWN0ID0gX0Nvbm5lY3Q7XG4gICAgQ29ubmVjdC5XcmFwcGVkQ29tcG9uZW50ID0gV3JhcHBlZENvbXBvbmVudDtcbiAgICBDb25uZWN0LmRpc3BsYXlOYW1lID0gQ29ubmVjdEZ1bmN0aW9uLmRpc3BsYXlOYW1lID0gZGlzcGxheU5hbWU7XG5cbiAgICBpZiAoZm9yd2FyZFJlZikge1xuICAgICAgY29uc3QgX2ZvcndhcmRlZCA9IFJlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gZm9yd2FyZENvbm5lY3RSZWYocHJvcHMsIHJlZikge1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb25uZWN0LCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgICAgICByZWFjdFJlZHV4Rm9yd2FyZGVkUmVmOiByZWZcbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGZvcndhcmRlZCA9IF9mb3J3YXJkZWQ7XG4gICAgICBmb3J3YXJkZWQuZGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZTtcbiAgICAgIGZvcndhcmRlZC5XcmFwcGVkQ29tcG9uZW50ID0gV3JhcHBlZENvbXBvbmVudDtcbiAgICAgIHJldHVybiBob2lzdFN0YXRpY3MoZm9yd2FyZGVkLCBXcmFwcGVkQ29tcG9uZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gaG9pc3RTdGF0aWNzKENvbm5lY3QsIFdyYXBwZWRDb21wb25lbnQpO1xuICB9O1xuXG4gIHJldHVybiB3cmFwV2l0aENvbm5lY3Q7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3Q7IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgUmVhY3RSZWR1eENvbnRleHQgfSBmcm9tICcuL0NvbnRleHQnO1xuaW1wb3J0IHsgY3JlYXRlU3Vic2NyaXB0aW9uIH0gZnJvbSAnLi4vdXRpbHMvU3Vic2NyaXB0aW9uJztcbmltcG9ydCB7IHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QgfSBmcm9tICcuLi91dGlscy91c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0JztcblxuZnVuY3Rpb24gUHJvdmlkZXIoe1xuICBzdG9yZSxcbiAgY29udGV4dCxcbiAgY2hpbGRyZW4sXG4gIHNlcnZlclN0YXRlLFxuICBzdGFiaWxpdHlDaGVjayA9ICdvbmNlJyxcbiAgbm9vcENoZWNrID0gJ29uY2UnXG59KSB7XG4gIGNvbnN0IGNvbnRleHRWYWx1ZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IGNyZWF0ZVN1YnNjcmlwdGlvbihzdG9yZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0b3JlLFxuICAgICAgc3Vic2NyaXB0aW9uLFxuICAgICAgZ2V0U2VydmVyU3RhdGU6IHNlcnZlclN0YXRlID8gKCkgPT4gc2VydmVyU3RhdGUgOiB1bmRlZmluZWQsXG4gICAgICBzdGFiaWxpdHlDaGVjayxcbiAgICAgIG5vb3BDaGVja1xuICAgIH07XG4gIH0sIFtzdG9yZSwgc2VydmVyU3RhdGUsIHN0YWJpbGl0eUNoZWNrLCBub29wQ2hlY2tdKTtcbiAgY29uc3QgcHJldmlvdXNTdGF0ZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gc3RvcmUuZ2V0U3RhdGUoKSwgW3N0b3JlXSk7XG4gIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHN1YnNjcmlwdGlvblxuICAgIH0gPSBjb250ZXh0VmFsdWU7XG4gICAgc3Vic2NyaXB0aW9uLm9uU3RhdGVDaGFuZ2UgPSBzdWJzY3JpcHRpb24ubm90aWZ5TmVzdGVkU3VicztcbiAgICBzdWJzY3JpcHRpb24udHJ5U3Vic2NyaWJlKCk7XG5cbiAgICBpZiAocHJldmlvdXNTdGF0ZSAhPT0gc3RvcmUuZ2V0U3RhdGUoKSkge1xuICAgICAgc3Vic2NyaXB0aW9uLm5vdGlmeU5lc3RlZFN1YnMoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgc3Vic2NyaXB0aW9uLnRyeVVuc3Vic2NyaWJlKCk7XG4gICAgICBzdWJzY3JpcHRpb24ub25TdGF0ZUNoYW5nZSA9IHVuZGVmaW5lZDtcbiAgICB9O1xuICB9LCBbY29udGV4dFZhbHVlLCBwcmV2aW91c1N0YXRlXSk7XG4gIGNvbnN0IENvbnRleHQgPSBjb250ZXh0IHx8IFJlYWN0UmVkdXhDb250ZXh0OyAvLyBAdHMtaWdub3JlICdBbnlBY3Rpb24nIGlzIGFzc2lnbmFibGUgdG8gdGhlIGNvbnN0cmFpbnQgb2YgdHlwZSAnQScsIGJ1dCAnQScgY291bGQgYmUgaW5zdGFudGlhdGVkIHdpdGggYSBkaWZmZXJlbnQgc3VidHlwZVxuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGNvbnRleHRWYWx1ZVxuICB9LCBjaGlsZHJlbik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFByb3ZpZGVyOyIsImltcG9ydCB7IFJlYWN0UmVkdXhDb250ZXh0IH0gZnJvbSAnLi4vY29tcG9uZW50cy9Db250ZXh0JztcbmltcG9ydCB7IHVzZVJlZHV4Q29udGV4dCBhcyB1c2VEZWZhdWx0UmVkdXhDb250ZXh0LCBjcmVhdGVSZWR1eENvbnRleHRIb29rIH0gZnJvbSAnLi91c2VSZWR1eENvbnRleHQnO1xuLyoqXHJcbiAqIEhvb2sgZmFjdG9yeSwgd2hpY2ggY3JlYXRlcyBhIGB1c2VTdG9yZWAgaG9vayBib3VuZCB0byBhIGdpdmVuIGNvbnRleHQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7UmVhY3QuQ29udGV4dH0gW2NvbnRleHQ9UmVhY3RSZWR1eENvbnRleHRdIENvbnRleHQgcGFzc2VkIHRvIHlvdXIgYDxQcm92aWRlcj5gLlxyXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgYHVzZVN0b3JlYCBob29rIGJvdW5kIHRvIHRoZSBzcGVjaWZpZWQgY29udGV4dC5cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdG9yZUhvb2soY29udGV4dCA9IFJlYWN0UmVkdXhDb250ZXh0KSB7XG4gIGNvbnN0IHVzZVJlZHV4Q29udGV4dCA9IC8vIEB0cy1pZ25vcmVcbiAgY29udGV4dCA9PT0gUmVhY3RSZWR1eENvbnRleHQgPyB1c2VEZWZhdWx0UmVkdXhDb250ZXh0IDogLy8gQHRzLWlnbm9yZVxuICBjcmVhdGVSZWR1eENvbnRleHRIb29rKGNvbnRleHQpO1xuICByZXR1cm4gZnVuY3Rpb24gdXNlU3RvcmUoKSB7XG4gICAgY29uc3Qge1xuICAgICAgc3RvcmVcbiAgICB9ID0gdXNlUmVkdXhDb250ZXh0KCk7IC8vIEB0cy1pZ25vcmVcblxuICAgIHJldHVybiBzdG9yZTtcbiAgfTtcbn1cbi8qKlxyXG4gKiBBIGhvb2sgdG8gYWNjZXNzIHRoZSByZWR1eCBzdG9yZS5cclxuICpcclxuICogQHJldHVybnMge2FueX0gdGhlIHJlZHV4IHN0b3JlXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqXHJcbiAqIGltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcclxuICogaW1wb3J0IHsgdXNlU3RvcmUgfSBmcm9tICdyZWFjdC1yZWR1eCdcclxuICpcclxuICogZXhwb3J0IGNvbnN0IEV4YW1wbGVDb21wb25lbnQgPSAoKSA9PiB7XHJcbiAqICAgY29uc3Qgc3RvcmUgPSB1c2VTdG9yZSgpXHJcbiAqICAgcmV0dXJuIDxkaXY+e3N0b3JlLmdldFN0YXRlKCl9PC9kaXY+XHJcbiAqIH1cclxuICovXG5cbmV4cG9ydCBjb25zdCB1c2VTdG9yZSA9IC8qI19fUFVSRV9fKi9jcmVhdGVTdG9yZUhvb2soKTsiLCJpbXBvcnQgeyBSZWFjdFJlZHV4Q29udGV4dCB9IGZyb20gJy4uL2NvbXBvbmVudHMvQ29udGV4dCc7XG5pbXBvcnQgeyB1c2VTdG9yZSBhcyB1c2VEZWZhdWx0U3RvcmUsIGNyZWF0ZVN0b3JlSG9vayB9IGZyb20gJy4vdXNlU3RvcmUnO1xuLyoqXHJcbiAqIEhvb2sgZmFjdG9yeSwgd2hpY2ggY3JlYXRlcyBhIGB1c2VEaXNwYXRjaGAgaG9vayBib3VuZCB0byBhIGdpdmVuIGNvbnRleHQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7UmVhY3QuQ29udGV4dH0gW2NvbnRleHQ9UmVhY3RSZWR1eENvbnRleHRdIENvbnRleHQgcGFzc2VkIHRvIHlvdXIgYDxQcm92aWRlcj5gLlxyXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgYHVzZURpc3BhdGNoYCBob29rIGJvdW5kIHRvIHRoZSBzcGVjaWZpZWQgY29udGV4dC5cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEaXNwYXRjaEhvb2soY29udGV4dCA9IFJlYWN0UmVkdXhDb250ZXh0KSB7XG4gIGNvbnN0IHVzZVN0b3JlID0gLy8gQHRzLWlnbm9yZVxuICBjb250ZXh0ID09PSBSZWFjdFJlZHV4Q29udGV4dCA/IHVzZURlZmF1bHRTdG9yZSA6IGNyZWF0ZVN0b3JlSG9vayhjb250ZXh0KTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHVzZURpc3BhdGNoKCkge1xuICAgIGNvbnN0IHN0b3JlID0gdXNlU3RvcmUoKTsgLy8gQHRzLWlnbm9yZVxuXG4gICAgcmV0dXJuIHN0b3JlLmRpc3BhdGNoO1xuICB9O1xufVxuLyoqXHJcbiAqIEEgaG9vayB0byBhY2Nlc3MgdGhlIHJlZHV4IGBkaXNwYXRjaGAgZnVuY3Rpb24uXHJcbiAqXHJcbiAqIEByZXR1cm5zIHthbnl8ZnVuY3Rpb259IHJlZHV4IHN0b3JlJ3MgYGRpc3BhdGNoYCBmdW5jdGlvblxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKlxyXG4gKiBpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCdcclxuICogaW1wb3J0IHsgdXNlRGlzcGF0Y2ggfSBmcm9tICdyZWFjdC1yZWR1eCdcclxuICpcclxuICogZXhwb3J0IGNvbnN0IENvdW50ZXJDb21wb25lbnQgPSAoeyB2YWx1ZSB9KSA9PiB7XHJcbiAqICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpXHJcbiAqICAgY29uc3QgaW5jcmVhc2VDb3VudGVyID0gdXNlQ2FsbGJhY2soKCkgPT4gZGlzcGF0Y2goeyB0eXBlOiAnaW5jcmVhc2UtY291bnRlcicgfSksIFtdKVxyXG4gKiAgIHJldHVybiAoXHJcbiAqICAgICA8ZGl2PlxyXG4gKiAgICAgICA8c3Bhbj57dmFsdWV9PC9zcGFuPlxyXG4gKiAgICAgICA8YnV0dG9uIG9uQ2xpY2s9e2luY3JlYXNlQ291bnRlcn0+SW5jcmVhc2UgY291bnRlcjwvYnV0dG9uPlxyXG4gKiAgICAgPC9kaXY+XHJcbiAqICAgKVxyXG4gKiB9XHJcbiAqL1xuXG5leHBvcnQgY29uc3QgdXNlRGlzcGF0Y2ggPSAvKiNfX1BVUkVfXyovY3JlYXRlRGlzcGF0Y2hIb29rKCk7IiwiaW1wb3J0IFByb3ZpZGVyIGZyb20gJy4vY29tcG9uZW50cy9Qcm92aWRlcic7XG5pbXBvcnQgY29ubmVjdCBmcm9tICcuL2NvbXBvbmVudHMvY29ubmVjdCc7XG5pbXBvcnQgeyBSZWFjdFJlZHV4Q29udGV4dCB9IGZyb20gJy4vY29tcG9uZW50cy9Db250ZXh0JztcbmltcG9ydCB7IHVzZURpc3BhdGNoLCBjcmVhdGVEaXNwYXRjaEhvb2sgfSBmcm9tICcuL2hvb2tzL3VzZURpc3BhdGNoJztcbmltcG9ydCB7IHVzZVNlbGVjdG9yLCBjcmVhdGVTZWxlY3Rvckhvb2sgfSBmcm9tICcuL2hvb2tzL3VzZVNlbGVjdG9yJztcbmltcG9ydCB7IHVzZVN0b3JlLCBjcmVhdGVTdG9yZUhvb2sgfSBmcm9tICcuL2hvb2tzL3VzZVN0b3JlJztcbmltcG9ydCBzaGFsbG93RXF1YWwgZnJvbSAnLi91dGlscy9zaGFsbG93RXF1YWwnO1xuZXhwb3J0ICogZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgeyBQcm92aWRlciwgUmVhY3RSZWR1eENvbnRleHQsIGNvbm5lY3QsIHVzZURpc3BhdGNoLCBjcmVhdGVEaXNwYXRjaEhvb2ssIHVzZVNlbGVjdG9yLCBjcmVhdGVTZWxlY3Rvckhvb2ssIHVzZVN0b3JlLCBjcmVhdGVTdG9yZUhvb2ssIHNoYWxsb3dFcXVhbCB9OyIsIi8vIFRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGFzc3VtZXMgd2UncmUgd29ya2luZyB3aXRoIHN0YW5kYXJkIFJlYWN0RE9NL1JOLCBidXRcbi8vIG9sZGVyIHZlcnNpb25zIHRoYXQgZG8gbm90IGluY2x1ZGUgYHVzZVN5bmNFeHRlcm5hbFN0b3JlYCAoUmVhY3QgMTYuOSAtIDE3LngpLlxuLy8gQmVjYXVzZSBvZiB0aGF0LCB0aGUgdXNlU3luY0V4dGVybmFsU3RvcmUgY29tcGF0IHNoaW0gaXMgbmVlZGVkLlxuaW1wb3J0IHsgdXNlU3luY0V4dGVybmFsU3RvcmUgfSBmcm9tICd1c2Utc3luYy1leHRlcm5hbC1zdG9yZS9zaGltJztcbmltcG9ydCB7IHVzZVN5bmNFeHRlcm5hbFN0b3JlV2l0aFNlbGVjdG9yIH0gZnJvbSAndXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUvc2hpbS93aXRoLXNlbGVjdG9yJztcbmltcG9ydCB7IHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzIGFzIGJhdGNoIH0gZnJvbSAnLi91dGlscy9yZWFjdEJhdGNoZWRVcGRhdGVzJztcbmltcG9ydCB7IHNldEJhdGNoIH0gZnJvbSAnLi91dGlscy9iYXRjaCc7XG5pbXBvcnQgeyBpbml0aWFsaXplVXNlU2VsZWN0b3IgfSBmcm9tICcuL2hvb2tzL3VzZVNlbGVjdG9yJztcbmltcG9ydCB7IGluaXRpYWxpemVDb25uZWN0IH0gZnJvbSAnLi9jb21wb25lbnRzL2Nvbm5lY3QnO1xuaW5pdGlhbGl6ZVVzZVNlbGVjdG9yKHVzZVN5bmNFeHRlcm5hbFN0b3JlV2l0aFNlbGVjdG9yKTtcbmluaXRpYWxpemVDb25uZWN0KHVzZVN5bmNFeHRlcm5hbFN0b3JlKTsgLy8gRW5hYmxlIGJhdGNoZWQgdXBkYXRlcyBpbiBvdXIgc3Vic2NyaXB0aW9ucyBmb3IgdXNlXG4vLyB3aXRoIHN0YW5kYXJkIFJlYWN0IHJlbmRlcmVycyAoUmVhY3RET00sIFJlYWN0IE5hdGl2ZSlcblxuc2V0QmF0Y2goYmF0Y2gpO1xuZXhwb3J0IHsgYmF0Y2ggfTtcbmV4cG9ydCAqIGZyb20gJy4vZXhwb3J0cyc7IiwiLy8gSW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL21hdGVyaWFsLWNvbXBvbmVudHMvbWF0ZXJpYWwtY29tcG9uZW50cy1pb3MvYmxvYi9iY2EzNjEwNzQwNTU5NGQ1YjdiMTYyNjVhNWIwZWQ2OThmODVhNWVlL2NvbXBvbmVudHMvRWxldmF0aW9uL3NyYy9VSUNvbG9yJTJCTWF0ZXJpYWxFbGV2YXRpb24ubSNMNjFcbmNvbnN0IGdldE92ZXJsYXlBbHBoYSA9IGVsZXZhdGlvbiA9PiB7XG4gIGxldCBhbHBoYVZhbHVlO1xuICBpZiAoZWxldmF0aW9uIDwgMSkge1xuICAgIGFscGhhVmFsdWUgPSA1LjExOTE2ICogZWxldmF0aW9uICoqIDI7XG4gIH0gZWxzZSB7XG4gICAgYWxwaGFWYWx1ZSA9IDQuNSAqIE1hdGgubG9nKGVsZXZhdGlvbiArIDEpICsgMjtcbiAgfVxuICByZXR1cm4gKGFscGhhVmFsdWUgLyAxMDApLnRvRml4ZWQoMik7XG59O1xuZXhwb3J0IGRlZmF1bHQgZ2V0T3ZlcmxheUFscGhhOyIsImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFwZXJVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aVBhcGVyJywgc2xvdCk7XG59XG5jb25zdCBwYXBlckNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlQYXBlcicsIFsncm9vdCcsICdyb3VuZGVkJywgJ291dGxpbmVkJywgJ2VsZXZhdGlvbicsICdlbGV2YXRpb24wJywgJ2VsZXZhdGlvbjEnLCAnZWxldmF0aW9uMicsICdlbGV2YXRpb24zJywgJ2VsZXZhdGlvbjQnLCAnZWxldmF0aW9uNScsICdlbGV2YXRpb242JywgJ2VsZXZhdGlvbjcnLCAnZWxldmF0aW9uOCcsICdlbGV2YXRpb245JywgJ2VsZXZhdGlvbjEwJywgJ2VsZXZhdGlvbjExJywgJ2VsZXZhdGlvbjEyJywgJ2VsZXZhdGlvbjEzJywgJ2VsZXZhdGlvbjE0JywgJ2VsZXZhdGlvbjE1JywgJ2VsZXZhdGlvbjE2JywgJ2VsZXZhdGlvbjE3JywgJ2VsZXZhdGlvbjE4JywgJ2VsZXZhdGlvbjE5JywgJ2VsZXZhdGlvbjIwJywgJ2VsZXZhdGlvbjIxJywgJ2VsZXZhdGlvbjIyJywgJ2VsZXZhdGlvbjIzJywgJ2VsZXZhdGlvbjI0J10pO1xuZXhwb3J0IGRlZmF1bHQgcGFwZXJDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImNvbXBvbmVudFwiLCBcImVsZXZhdGlvblwiLCBcInNxdWFyZVwiLCBcInZhcmlhbnRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgaW50ZWdlclByb3BUeXBlIGZyb20gJ0BtdWkvdXRpbHMvaW50ZWdlclByb3BUeXBlJztcbmltcG9ydCBjaGFpblByb3BUeXBlcyBmcm9tICdAbXVpL3V0aWxzL2NoYWluUHJvcFR5cGVzJztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCB7IGFscGhhIH0gZnJvbSAnQG11aS9zeXN0ZW0vY29sb3JNYW5pcHVsYXRvcic7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IGdldE92ZXJsYXlBbHBoYSBmcm9tICcuLi9zdHlsZXMvZ2V0T3ZlcmxheUFscGhhJztcbmltcG9ydCB7IHVzZURlZmF1bHRQcm9wcyB9IGZyb20gJy4uL0RlZmF1bHRQcm9wc1Byb3ZpZGVyJztcbmltcG9ydCB1c2VUaGVtZSBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWUnO1xuaW1wb3J0IHsgZ2V0UGFwZXJVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL3BhcGVyQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIHNxdWFyZSxcbiAgICBlbGV2YXRpb24sXG4gICAgdmFyaWFudCxcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCB2YXJpYW50LCAhc3F1YXJlICYmICdyb3VuZGVkJywgdmFyaWFudCA9PT0gJ2VsZXZhdGlvbicgJiYgYGVsZXZhdGlvbiR7ZWxldmF0aW9ufWBdXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0UGFwZXJVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmNvbnN0IFBhcGVyUm9vdCA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpUGFwZXInLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgc3R5bGVzW293bmVyU3RhdGUudmFyaWFudF0sICFvd25lclN0YXRlLnNxdWFyZSAmJiBzdHlsZXMucm91bmRlZCwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnZWxldmF0aW9uJyAmJiBzdHlsZXNbYGVsZXZhdGlvbiR7b3duZXJTdGF0ZS5lbGV2YXRpb259YF1dO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4ge1xuICB2YXIgX3RoZW1lJHZhcnMkb3ZlcmxheXM7XG4gIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgYmFja2dyb3VuZENvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5iYWNrZ3JvdW5kLnBhcGVyLFxuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS50ZXh0LnByaW1hcnksXG4gICAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdib3gtc2hhZG93JylcbiAgfSwgIW93bmVyU3RhdGUuc3F1YXJlICYmIHtcbiAgICBib3JkZXJSYWRpdXM6IHRoZW1lLnNoYXBlLmJvcmRlclJhZGl1c1xuICB9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdvdXRsaW5lZCcgJiYge1xuICAgIGJvcmRlcjogYDFweCBzb2xpZCAkeyh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmRpdmlkZXJ9YFxuICB9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdlbGV2YXRpb24nICYmIF9leHRlbmRzKHtcbiAgICBib3hTaGFkb3c6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5zaGFkb3dzW293bmVyU3RhdGUuZWxldmF0aW9uXVxuICB9LCAhdGhlbWUudmFycyAmJiB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdkYXJrJyAmJiB7XG4gICAgYmFja2dyb3VuZEltYWdlOiBgbGluZWFyLWdyYWRpZW50KCR7YWxwaGEoJyNmZmYnLCBnZXRPdmVybGF5QWxwaGEob3duZXJTdGF0ZS5lbGV2YXRpb24pKX0sICR7YWxwaGEoJyNmZmYnLCBnZXRPdmVybGF5QWxwaGEob3duZXJTdGF0ZS5lbGV2YXRpb24pKX0pYFxuICB9LCB0aGVtZS52YXJzICYmIHtcbiAgICBiYWNrZ3JvdW5kSW1hZ2U6IChfdGhlbWUkdmFycyRvdmVybGF5cyA9IHRoZW1lLnZhcnMub3ZlcmxheXMpID09IG51bGwgPyB2b2lkIDAgOiBfdGhlbWUkdmFycyRvdmVybGF5c1tvd25lclN0YXRlLmVsZXZhdGlvbl1cbiAgfSkpO1xufSk7XG5jb25zdCBQYXBlciA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFBhcGVyKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZURlZmF1bHRQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aVBhcGVyJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29tcG9uZW50ID0gJ2RpdicsXG4gICAgICBlbGV2YXRpb24gPSAxLFxuICAgICAgc3F1YXJlID0gZmFsc2UsXG4gICAgICB2YXJpYW50ID0gJ2VsZXZhdGlvbidcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbXBvbmVudCxcbiAgICBlbGV2YXRpb24sXG4gICAgc3F1YXJlLFxuICAgIHZhcmlhbnRcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3NcbiAgICBjb25zdCB0aGVtZSA9IHVzZVRoZW1lKCk7XG4gICAgaWYgKHRoZW1lLnNoYWRvd3NbZWxldmF0aW9uXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFtgTVVJOiBUaGUgZWxldmF0aW9uIHByb3ZpZGVkIDxQYXBlciBlbGV2YXRpb249eyR7ZWxldmF0aW9ufX0+IGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIHRoZW1lLmAsIGBQbGVhc2UgbWFrZSBzdXJlIHRoYXQgXFxgdGhlbWUuc2hhZG93c1ske2VsZXZhdGlvbn1dXFxgIGlzIGRlZmluZWQuYF0uam9pbignXFxuJykpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goUGFwZXJSb290LCBfZXh0ZW5kcyh7XG4gICAgYXM6IGNvbXBvbmVudCxcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgcmVmOiByZWZcbiAgfSwgb3RoZXIpKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gUGFwZXIucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIFNoYWRvdyBkZXB0aCwgY29ycmVzcG9uZHMgdG8gYGRwYCBpbiB0aGUgc3BlYy5cbiAgICogSXQgYWNjZXB0cyB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAyNCBpbmNsdXNpdmUuXG4gICAqIEBkZWZhdWx0IDFcbiAgICovXG4gIGVsZXZhdGlvbjogY2hhaW5Qcm9wVHlwZXMoaW50ZWdlclByb3BUeXBlLCBwcm9wcyA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgZWxldmF0aW9uLFxuICAgICAgdmFyaWFudFxuICAgIH0gPSBwcm9wcztcbiAgICBpZiAoZWxldmF0aW9uID4gMCAmJiB2YXJpYW50ID09PSAnb3V0bGluZWQnKSB7XG4gICAgICByZXR1cm4gbmV3IEVycm9yKGBNVUk6IENvbWJpbmluZyBcXGBlbGV2YXRpb249eyR7ZWxldmF0aW9ufX1cXGAgd2l0aCBcXGB2YXJpYW50PVwiJHt2YXJpYW50fVwiXFxgIGhhcyBubyBlZmZlY3QuIEVpdGhlciB1c2UgXFxgZWxldmF0aW9uPXswfVxcYCBvciB1c2UgYSBkaWZmZXJlbnQgXFxgdmFyaWFudFxcYC5gKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCByb3VuZGVkIGNvcm5lcnMgYXJlIGRpc2FibGVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgc3F1YXJlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFRoZSB2YXJpYW50IHRvIHVzZS5cbiAgICogQGRlZmF1bHQgJ2VsZXZhdGlvbidcbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnZWxldmF0aW9uJywgJ291dGxpbmVkJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBQYXBlcjsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFRoZW1lQ29udGV4dCB9IGZyb20gJ0BtdWkvc3R5bGVkLWVuZ2luZSc7XG5mdW5jdGlvbiBpc09iamVjdEVtcHR5KG9iaikge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPT09IDA7XG59XG5mdW5jdGlvbiB1c2VUaGVtZShkZWZhdWx0VGhlbWUgPSBudWxsKSB7XG4gIGNvbnN0IGNvbnRleHRUaGVtZSA9IFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KTtcbiAgcmV0dXJuICFjb250ZXh0VGhlbWUgfHwgaXNPYmplY3RFbXB0eShjb250ZXh0VGhlbWUpID8gZGVmYXVsdFRoZW1lIDogY29udGV4dFRoZW1lO1xufVxuZXhwb3J0IGRlZmF1bHQgdXNlVGhlbWU7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgY3JlYXRlVGhlbWUgZnJvbSAnLi9jcmVhdGVUaGVtZSc7XG5pbXBvcnQgdXNlVGhlbWVXaXRob3V0RGVmYXVsdCBmcm9tICcuL3VzZVRoZW1lV2l0aG91dERlZmF1bHQnO1xuZXhwb3J0IGNvbnN0IHN5c3RlbURlZmF1bHRUaGVtZSA9IGNyZWF0ZVRoZW1lKCk7XG5mdW5jdGlvbiB1c2VUaGVtZShkZWZhdWx0VGhlbWUgPSBzeXN0ZW1EZWZhdWx0VGhlbWUpIHtcbiAgcmV0dXJuIHVzZVRoZW1lV2l0aG91dERlZmF1bHQoZGVmYXVsdFRoZW1lKTtcbn1cbmV4cG9ydCBkZWZhdWx0IHVzZVRoZW1lOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImNvbXBvbmVudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdAbXVpL3N0eWxlZC1lbmdpbmUnO1xuaW1wb3J0IHN0eWxlRnVuY3Rpb25TeCwgeyBleHRlbmRTeFByb3AgfSBmcm9tICcuL3N0eWxlRnVuY3Rpb25TeCc7XG5pbXBvcnQgdXNlVGhlbWUgZnJvbSAnLi91c2VUaGVtZSc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlQm94KG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgdGhlbWVJZCxcbiAgICBkZWZhdWx0VGhlbWUsXG4gICAgZGVmYXVsdENsYXNzTmFtZSA9ICdNdWlCb3gtcm9vdCcsXG4gICAgZ2VuZXJhdGVDbGFzc05hbWVcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IEJveFJvb3QgPSBzdHlsZWQoJ2RpdicsIHtcbiAgICBzaG91bGRGb3J3YXJkUHJvcDogcHJvcCA9PiBwcm9wICE9PSAndGhlbWUnICYmIHByb3AgIT09ICdzeCcgJiYgcHJvcCAhPT0gJ2FzJ1xuICB9KShzdHlsZUZ1bmN0aW9uU3gpO1xuICBjb25zdCBCb3ggPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBCb3goaW5Qcm9wcywgcmVmKSB7XG4gICAgY29uc3QgdGhlbWUgPSB1c2VUaGVtZShkZWZhdWx0VGhlbWUpO1xuICAgIGNvbnN0IF9leHRlbmRTeFByb3AgPSBleHRlbmRTeFByb3AoaW5Qcm9wcyksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgY29tcG9uZW50ID0gJ2RpdidcbiAgICAgIH0gPSBfZXh0ZW5kU3hQcm9wLFxuICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfZXh0ZW5kU3hQcm9wLCBfZXhjbHVkZWQpO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChCb3hSb290LCBfZXh0ZW5kcyh7XG4gICAgICBhczogY29tcG9uZW50LFxuICAgICAgcmVmOiByZWYsXG4gICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3NOYW1lLCBnZW5lcmF0ZUNsYXNzTmFtZSA/IGdlbmVyYXRlQ2xhc3NOYW1lKGRlZmF1bHRDbGFzc05hbWUpIDogZGVmYXVsdENsYXNzTmFtZSksXG4gICAgICB0aGVtZTogdGhlbWVJZCA/IHRoZW1lW3RoZW1lSWRdIHx8IHRoZW1lIDogdGhlbWVcbiAgICB9LCBvdGhlcikpO1xuICB9KTtcbiAgcmV0dXJuIEJveDtcbn0iLCJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuY29uc3QgYm94Q2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUJveCcsIFsncm9vdCddKTtcbmV4cG9ydCBkZWZhdWx0IGJveENsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgeyBjcmVhdGVCb3ggfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgdW5zdGFibGVfQ2xhc3NOYW1lR2VuZXJhdG9yIGFzIENsYXNzTmFtZUdlbmVyYXRvciB9IGZyb20gJy4uL2NsYXNzTmFtZSc7XG5pbXBvcnQgeyBjcmVhdGVUaGVtZSB9IGZyb20gJy4uL3N0eWxlcyc7XG5pbXBvcnQgVEhFTUVfSUQgZnJvbSAnLi4vc3R5bGVzL2lkZW50aWZpZXInO1xuaW1wb3J0IGJveENsYXNzZXMgZnJvbSAnLi9ib3hDbGFzc2VzJztcbmNvbnN0IGRlZmF1bHRUaGVtZSA9IGNyZWF0ZVRoZW1lKCk7XG5jb25zdCBCb3ggPSBjcmVhdGVCb3goe1xuICB0aGVtZUlkOiBUSEVNRV9JRCxcbiAgZGVmYXVsdFRoZW1lLFxuICBkZWZhdWx0Q2xhc3NOYW1lOiBib3hDbGFzc2VzLnJvb3QsXG4gIGdlbmVyYXRlQ2xhc3NOYW1lOiBDbGFzc05hbWVHZW5lcmF0b3IuZ2VuZXJhdGVcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gQm94LnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgV2FybmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgLy8g4pSCIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4g4pSCXG4gIC8vIOKUgiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIOKUglxuICAvLyDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgQm94OyIsIi8qKlxuICogRGV0ZXJtaW5lcyBpZiBhIGdpdmVuIGVsZW1lbnQgaXMgYSBET00gZWxlbWVudCBuYW1lIChpLmUuIG5vdCBhIFJlYWN0IGNvbXBvbmVudCkuXG4gKi9cbmZ1bmN0aW9uIGlzSG9zdENvbXBvbmVudChlbGVtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgZWxlbWVudCA9PT0gJ3N0cmluZyc7XG59XG5leHBvcnQgZGVmYXVsdCBpc0hvc3RDb21wb25lbnQ7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wib25DaGFuZ2VcIiwgXCJtYXhSb3dzXCIsIFwibWluUm93c1wiLCBcInN0eWxlXCIsIFwidmFsdWVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgdW5zdGFibGVfZGVib3VuY2UgYXMgZGVib3VuY2UsIHVuc3RhYmxlX3VzZUZvcmtSZWYgYXMgdXNlRm9ya1JlZiwgdW5zdGFibGVfdXNlRW5oYW5jZWRFZmZlY3QgYXMgdXNlRW5oYW5jZWRFZmZlY3QsIHVuc3RhYmxlX3VzZUV2ZW50Q2FsbGJhY2sgYXMgdXNlRXZlbnRDYWxsYmFjaywgdW5zdGFibGVfb3duZXJXaW5kb3cgYXMgb3duZXJXaW5kb3cgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5mdW5jdGlvbiBnZXRTdHlsZVZhbHVlKHZhbHVlKSB7XG4gIHJldHVybiBwYXJzZUludCh2YWx1ZSwgMTApIHx8IDA7XG59XG5jb25zdCBzdHlsZXMgPSB7XG4gIHNoYWRvdzoge1xuICAgIC8vIFZpc2liaWxpdHkgbmVlZGVkIHRvIGhpZGUgdGhlIGV4dHJhIHRleHQgYXJlYSBvbiBpUGFkc1xuICAgIHZpc2liaWxpdHk6ICdoaWRkZW4nLFxuICAgIC8vIFJlbW92ZSBmcm9tIHRoZSBjb250ZW50IGZsb3dcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAvLyBJZ25vcmUgdGhlIHNjcm9sbGJhciB3aWR0aFxuICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICBoZWlnaHQ6IDAsXG4gICAgdG9wOiAwLFxuICAgIGxlZnQ6IDAsXG4gICAgLy8gQ3JlYXRlIGEgbmV3IGxheWVyLCBpbmNyZWFzZSB0aGUgaXNvbGF0aW9uIG9mIHRoZSBjb21wdXRlZCB2YWx1ZXNcbiAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVaKDApJ1xuICB9XG59O1xuZnVuY3Rpb24gaXNPYmplY3RFbXB0eShvYmplY3QpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gIGZvciAoY29uc3QgXyBpbiBvYmplY3QpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBpc0VtcHR5KG9iaikge1xuICByZXR1cm4gaXNPYmplY3RFbXB0eShvYmopIHx8IG9iai5vdXRlckhlaWdodFN0eWxlID09PSAwICYmICFvYmoub3ZlcmZsb3dpbmc7XG59XG5cbi8qKlxuICpcbiAqIERlbW9zOlxuICpcbiAqIC0gW1RleHRhcmVhIEF1dG9zaXplXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvcmVhY3QtdGV4dGFyZWEtYXV0b3NpemUvKVxuICpcbiAqIEFQSTpcbiAqXG4gKiAtIFtUZXh0YXJlYUF1dG9zaXplIEFQSV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2FwaS90ZXh0YXJlYS1hdXRvc2l6ZS8pXG4gKi9cbmNvbnN0IFRleHRhcmVhQXV0b3NpemUgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBUZXh0YXJlYUF1dG9zaXplKHByb3BzLCBmb3J3YXJkZWRSZWYpIHtcbiAgY29uc3Qge1xuICAgICAgb25DaGFuZ2UsXG4gICAgICBtYXhSb3dzLFxuICAgICAgbWluUm93cyA9IDEsXG4gICAgICBzdHlsZSxcbiAgICAgIHZhbHVlXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHtcbiAgICBjdXJyZW50OiBpc0NvbnRyb2xsZWRcbiAgfSA9IFJlYWN0LnVzZVJlZih2YWx1ZSAhPSBudWxsKTtcbiAgY29uc3QgdGV4dGFyZWFSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IGhhbmRsZVJlZiA9IHVzZUZvcmtSZWYoZm9yd2FyZGVkUmVmLCB0ZXh0YXJlYVJlZik7XG4gIGNvbnN0IGhlaWdodFJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgaGlkZGVuVGV4dGFyZWFSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IGNhbGN1bGF0ZVRleHRhcmVhU3R5bGVzID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IHRleHRhcmVhID0gdGV4dGFyZWFSZWYuY3VycmVudDtcbiAgICBjb25zdCBoaWRkZW5UZXh0YXJlYSA9IGhpZGRlblRleHRhcmVhUmVmLmN1cnJlbnQ7XG4gICAgaWYgKCF0ZXh0YXJlYSB8fCAhaGlkZGVuVGV4dGFyZWEpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IGNvbnRhaW5lcldpbmRvdyA9IG93bmVyV2luZG93KHRleHRhcmVhKTtcbiAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gY29udGFpbmVyV2luZG93LmdldENvbXB1dGVkU3R5bGUodGV4dGFyZWEpO1xuXG4gICAgLy8gSWYgaW5wdXQncyB3aWR0aCBpcyBzaHJ1bmsgYW5kIGl0J3Mgbm90IHZpc2libGUsIGRvbid0IHN5bmMgaGVpZ2h0LlxuICAgIGlmIChjb21wdXRlZFN0eWxlLndpZHRoID09PSAnMHB4Jykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb3V0ZXJIZWlnaHRTdHlsZTogMCxcbiAgICAgICAgb3ZlcmZsb3dpbmc6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cbiAgICBoaWRkZW5UZXh0YXJlYS5zdHlsZS53aWR0aCA9IGNvbXB1dGVkU3R5bGUud2lkdGg7XG4gICAgaGlkZGVuVGV4dGFyZWEudmFsdWUgPSB0ZXh0YXJlYS52YWx1ZSB8fCBwcm9wcy5wbGFjZWhvbGRlciB8fCAneCc7XG4gICAgaWYgKGhpZGRlblRleHRhcmVhLnZhbHVlLnNsaWNlKC0xKSA9PT0gJ1xcbicpIHtcbiAgICAgIC8vIENlcnRhaW4gZm9udHMgd2hpY2ggb3ZlcmZsb3cgdGhlIGxpbmUgaGVpZ2h0IHdpbGwgY2F1c2UgdGhlIHRleHRhcmVhXG4gICAgICAvLyB0byByZXBvcnQgYSBkaWZmZXJlbnQgc2Nyb2xsSGVpZ2h0IGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBsYXN0IGxpbmVcbiAgICAgIC8vIGlzIGVtcHR5LiBNYWtlIGl0IG5vbi1lbXB0eSB0byBhdm9pZCB0aGlzIGlzc3VlLlxuICAgICAgaGlkZGVuVGV4dGFyZWEudmFsdWUgKz0gJyAnO1xuICAgIH1cbiAgICBjb25zdCBib3hTaXppbmcgPSBjb21wdXRlZFN0eWxlLmJveFNpemluZztcbiAgICBjb25zdCBwYWRkaW5nID0gZ2V0U3R5bGVWYWx1ZShjb21wdXRlZFN0eWxlLnBhZGRpbmdCb3R0b20pICsgZ2V0U3R5bGVWYWx1ZShjb21wdXRlZFN0eWxlLnBhZGRpbmdUb3ApO1xuICAgIGNvbnN0IGJvcmRlciA9IGdldFN0eWxlVmFsdWUoY29tcHV0ZWRTdHlsZS5ib3JkZXJCb3R0b21XaWR0aCkgKyBnZXRTdHlsZVZhbHVlKGNvbXB1dGVkU3R5bGUuYm9yZGVyVG9wV2lkdGgpO1xuXG4gICAgLy8gVGhlIGhlaWdodCBvZiB0aGUgaW5uZXIgY29udGVudFxuICAgIGNvbnN0IGlubmVySGVpZ2h0ID0gaGlkZGVuVGV4dGFyZWEuc2Nyb2xsSGVpZ2h0O1xuXG4gICAgLy8gTWVhc3VyZSBoZWlnaHQgb2YgYSB0ZXh0YXJlYSB3aXRoIGEgc2luZ2xlIHJvd1xuICAgIGhpZGRlblRleHRhcmVhLnZhbHVlID0gJ3gnO1xuICAgIGNvbnN0IHNpbmdsZVJvd0hlaWdodCA9IGhpZGRlblRleHRhcmVhLnNjcm9sbEhlaWdodDtcblxuICAgIC8vIFRoZSBoZWlnaHQgb2YgdGhlIG91dGVyIGNvbnRlbnRcbiAgICBsZXQgb3V0ZXJIZWlnaHQgPSBpbm5lckhlaWdodDtcbiAgICBpZiAobWluUm93cykge1xuICAgICAgb3V0ZXJIZWlnaHQgPSBNYXRoLm1heChOdW1iZXIobWluUm93cykgKiBzaW5nbGVSb3dIZWlnaHQsIG91dGVySGVpZ2h0KTtcbiAgICB9XG4gICAgaWYgKG1heFJvd3MpIHtcbiAgICAgIG91dGVySGVpZ2h0ID0gTWF0aC5taW4oTnVtYmVyKG1heFJvd3MpICogc2luZ2xlUm93SGVpZ2h0LCBvdXRlckhlaWdodCk7XG4gICAgfVxuICAgIG91dGVySGVpZ2h0ID0gTWF0aC5tYXgob3V0ZXJIZWlnaHQsIHNpbmdsZVJvd0hlaWdodCk7XG5cbiAgICAvLyBUYWtlIHRoZSBib3ggc2l6aW5nIGludG8gYWNjb3VudCBmb3IgYXBwbHlpbmcgdGhpcyB2YWx1ZSBhcyBhIHN0eWxlLlxuICAgIGNvbnN0IG91dGVySGVpZ2h0U3R5bGUgPSBvdXRlckhlaWdodCArIChib3hTaXppbmcgPT09ICdib3JkZXItYm94JyA/IHBhZGRpbmcgKyBib3JkZXIgOiAwKTtcbiAgICBjb25zdCBvdmVyZmxvd2luZyA9IE1hdGguYWJzKG91dGVySGVpZ2h0IC0gaW5uZXJIZWlnaHQpIDw9IDE7XG4gICAgcmV0dXJuIHtcbiAgICAgIG91dGVySGVpZ2h0U3R5bGUsXG4gICAgICBvdmVyZmxvd2luZ1xuICAgIH07XG4gIH0sIFttYXhSb3dzLCBtaW5Sb3dzLCBwcm9wcy5wbGFjZWhvbGRlcl0pO1xuICBjb25zdCBkaWRIZWlnaHRDaGFuZ2UgPSB1c2VFdmVudENhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCB0ZXh0YXJlYSA9IHRleHRhcmVhUmVmLmN1cnJlbnQ7XG4gICAgY29uc3QgdGV4dGFyZWFTdHlsZXMgPSBjYWxjdWxhdGVUZXh0YXJlYVN0eWxlcygpO1xuICAgIGlmICghdGV4dGFyZWEgfHwgIXRleHRhcmVhU3R5bGVzIHx8IGlzRW1wdHkodGV4dGFyZWFTdHlsZXMpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IG91dGVySGVpZ2h0U3R5bGUgPSB0ZXh0YXJlYVN0eWxlcy5vdXRlckhlaWdodFN0eWxlO1xuICAgIHJldHVybiBoZWlnaHRSZWYuY3VycmVudCAhPSBudWxsICYmIGhlaWdodFJlZi5jdXJyZW50ICE9PSBvdXRlckhlaWdodFN0eWxlO1xuICB9KTtcbiAgY29uc3Qgc3luY0hlaWdodCA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCB0ZXh0YXJlYSA9IHRleHRhcmVhUmVmLmN1cnJlbnQ7XG4gICAgY29uc3QgdGV4dGFyZWFTdHlsZXMgPSBjYWxjdWxhdGVUZXh0YXJlYVN0eWxlcygpO1xuICAgIGlmICghdGV4dGFyZWEgfHwgIXRleHRhcmVhU3R5bGVzIHx8IGlzRW1wdHkodGV4dGFyZWFTdHlsZXMpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG91dGVySGVpZ2h0U3R5bGUgPSB0ZXh0YXJlYVN0eWxlcy5vdXRlckhlaWdodFN0eWxlO1xuICAgIGlmIChoZWlnaHRSZWYuY3VycmVudCAhPT0gb3V0ZXJIZWlnaHRTdHlsZSkge1xuICAgICAgaGVpZ2h0UmVmLmN1cnJlbnQgPSBvdXRlckhlaWdodFN0eWxlO1xuICAgICAgdGV4dGFyZWEuc3R5bGUuaGVpZ2h0ID0gYCR7b3V0ZXJIZWlnaHRTdHlsZX1weGA7XG4gICAgfVxuICAgIHRleHRhcmVhLnN0eWxlLm92ZXJmbG93ID0gdGV4dGFyZWFTdHlsZXMub3ZlcmZsb3dpbmcgPyAnaGlkZGVuJyA6ICcnO1xuICB9LCBbY2FsY3VsYXRlVGV4dGFyZWFTdHlsZXNdKTtcbiAgY29uc3QgZnJhbWVSZWYgPSBSZWFjdC51c2VSZWYoLTEpO1xuICB1c2VFbmhhbmNlZEVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgZGVib3VuY2VkSGFuZGxlUmVzaXplID0gZGVib3VuY2Uoc3luY0hlaWdodCk7XG4gICAgY29uc3QgdGV4dGFyZWEgPSB0ZXh0YXJlYVJlZiA9PSBudWxsID8gdm9pZCAwIDogdGV4dGFyZWFSZWYuY3VycmVudDtcbiAgICBpZiAoIXRleHRhcmVhKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBjb250YWluZXJXaW5kb3cgPSBvd25lcldpbmRvdyh0ZXh0YXJlYSk7XG4gICAgY29udGFpbmVyV2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGRlYm91bmNlZEhhbmRsZVJlc2l6ZSk7XG4gICAgbGV0IHJlc2l6ZU9ic2VydmVyO1xuICAgIGlmICh0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XG4gICAgICAgIGlmIChkaWRIZWlnaHRDaGFuZ2UoKSkge1xuICAgICAgICAgIC8vIGF2b2lkIFwiUmVzaXplT2JzZXJ2ZXIgbG9vcCBjb21wbGV0ZWQgd2l0aCB1bmRlbGl2ZXJlZCBub3RpZmljYXRpb25zXCIgZXJyb3JcbiAgICAgICAgICAvLyBieSB0ZW1wb3JhcmlseSB1bm9ic2VydmluZyB0aGUgdGV4dGFyZWEgZWxlbWVudCB3aGlsZSBtYW5pcHVsYXRpbmcgdGhlIGhlaWdodFxuICAgICAgICAgIC8vIGFuZCByZW9ic2VydmluZyBvbmUgZnJhbWUgbGF0ZXJcbiAgICAgICAgICByZXNpemVPYnNlcnZlci51bm9ic2VydmUodGV4dGFyZWEpO1xuICAgICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGZyYW1lUmVmLmN1cnJlbnQpO1xuICAgICAgICAgIHN5bmNIZWlnaHQoKTtcbiAgICAgICAgICBmcmFtZVJlZi5jdXJyZW50ID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgIHJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGV4dGFyZWEpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGV4dGFyZWEpO1xuICAgIH1cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZGVib3VuY2VkSGFuZGxlUmVzaXplLmNsZWFyKCk7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShmcmFtZVJlZi5jdXJyZW50KTtcbiAgICAgIGNvbnRhaW5lcldpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBkZWJvdW5jZWRIYW5kbGVSZXNpemUpO1xuICAgICAgaWYgKHJlc2l6ZU9ic2VydmVyKSB7XG4gICAgICAgIHJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgIH1cbiAgICB9O1xuICB9LCBbY2FsY3VsYXRlVGV4dGFyZWFTdHlsZXMsIHN5bmNIZWlnaHQsIGRpZEhlaWdodENoYW5nZV0pO1xuICB1c2VFbmhhbmNlZEVmZmVjdCgoKSA9PiB7XG4gICAgc3luY0hlaWdodCgpO1xuICB9KTtcbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gZXZlbnQgPT4ge1xuICAgIGlmICghaXNDb250cm9sbGVkKSB7XG4gICAgICBzeW5jSGVpZ2h0KCk7XG4gICAgfVxuICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgb25DaGFuZ2UoZXZlbnQpO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4cyhSZWFjdC5GcmFnbWVudCwge1xuICAgIGNoaWxkcmVuOiBbLyojX19QVVJFX18qL19qc3goXCJ0ZXh0YXJlYVwiLCBfZXh0ZW5kcyh7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBvbkNoYW5nZTogaGFuZGxlQ2hhbmdlLFxuICAgICAgcmVmOiBoYW5kbGVSZWZcbiAgICAgIC8vIEFwcGx5IHRoZSByb3dzIHByb3AgdG8gZ2V0IGEgXCJjb3JyZWN0XCIgZmlyc3QgU1NSIHBhaW50XG4gICAgICAsXG4gICAgICByb3dzOiBtaW5Sb3dzLFxuICAgICAgc3R5bGU6IHN0eWxlXG4gICAgfSwgb3RoZXIpKSwgLyojX19QVVJFX18qL19qc3goXCJ0ZXh0YXJlYVwiLCB7XG4gICAgICBcImFyaWEtaGlkZGVuXCI6IHRydWUsXG4gICAgICBjbGFzc05hbWU6IHByb3BzLmNsYXNzTmFtZSxcbiAgICAgIHJlYWRPbmx5OiB0cnVlLFxuICAgICAgcmVmOiBoaWRkZW5UZXh0YXJlYVJlZixcbiAgICAgIHRhYkluZGV4OiAtMSxcbiAgICAgIHN0eWxlOiBfZXh0ZW5kcyh7fSwgc3R5bGVzLnNoYWRvdywgc3R5bGUsIHtcbiAgICAgICAgcGFkZGluZ1RvcDogMCxcbiAgICAgICAgcGFkZGluZ0JvdHRvbTogMFxuICAgICAgfSlcbiAgICB9KV1cbiAgfSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFRleHRhcmVhQXV0b3NpemUucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBUeXBlU2NyaXB0IHR5cGVzIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4g4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogTWF4aW11bSBudW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5LlxuICAgKi9cbiAgbWF4Um93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogTWluaW11bSBudW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5LlxuICAgKiBAZGVmYXVsdCAxXG4gICAqL1xuICBtaW5Sb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zdHJpbmcpLCBQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBUZXh0YXJlYUF1dG9zaXplOyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZvcm1Db250cm9sU3RhdGUoe1xuICBwcm9wcyxcbiAgc3RhdGVzLFxuICBtdWlGb3JtQ29udHJvbFxufSkge1xuICByZXR1cm4gc3RhdGVzLnJlZHVjZSgoYWNjLCBzdGF0ZSkgPT4ge1xuICAgIGFjY1tzdGF0ZV0gPSBwcm9wc1tzdGF0ZV07XG4gICAgaWYgKG11aUZvcm1Db250cm9sKSB7XG4gICAgICBpZiAodHlwZW9mIHByb3BzW3N0YXRlXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgYWNjW3N0YXRlXSA9IG11aUZvcm1Db250cm9sW3N0YXRlXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xufSIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0Jztcbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuY29uc3QgRm9ybUNvbnRyb2xDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQodW5kZWZpbmVkKTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIEZvcm1Db250cm9sQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdGb3JtQ29udHJvbENvbnRleHQnO1xufVxuZXhwb3J0IGRlZmF1bHQgRm9ybUNvbnRyb2xDb250ZXh0OyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEZvcm1Db250cm9sQ29udGV4dCBmcm9tICcuL0Zvcm1Db250cm9sQ29udGV4dCc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VGb3JtQ29udHJvbCgpIHtcbiAgcmV0dXJuIFJlYWN0LnVzZUNvbnRleHQoRm9ybUNvbnRyb2xDb250ZXh0KTtcbn0iLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBHbG9iYWxTdHlsZXMgYXMgTXVpR2xvYmFsU3R5bGVzIH0gZnJvbSAnQG11aS9zdHlsZWQtZW5naW5lJztcbmltcG9ydCB1c2VUaGVtZSBmcm9tICcuLi91c2VUaGVtZSc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZnVuY3Rpb24gR2xvYmFsU3R5bGVzKHtcbiAgc3R5bGVzLFxuICB0aGVtZUlkLFxuICBkZWZhdWx0VGhlbWUgPSB7fVxufSkge1xuICBjb25zdCB1cHBlclRoZW1lID0gdXNlVGhlbWUoZGVmYXVsdFRoZW1lKTtcbiAgY29uc3QgZ2xvYmFsU3R5bGVzID0gdHlwZW9mIHN0eWxlcyA9PT0gJ2Z1bmN0aW9uJyA/IHN0eWxlcyh0aGVtZUlkID8gdXBwZXJUaGVtZVt0aGVtZUlkXSB8fCB1cHBlclRoZW1lIDogdXBwZXJUaGVtZSkgOiBzdHlsZXM7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChNdWlHbG9iYWxTdHlsZXMsIHtcbiAgICBzdHlsZXM6IGdsb2JhbFN0eWxlc1xuICB9KTtcbn1cbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEdsb2JhbFN0eWxlcy5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFdhcm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIOKUglxuICAvLyDilIIgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIFR5cGVTY3JpcHQgdHlwZXMgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiDilIJcbiAgLy8g4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBkZWZhdWx0VGhlbWU6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBzdHlsZXM6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5LCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLmJvb2xdKSxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHRoZW1lSWQ6IFByb3BUeXBlcy5zdHJpbmdcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBHbG9iYWxTdHlsZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBHbG9iYWxTdHlsZXMgYXMgU3lzdGVtR2xvYmFsU3R5bGVzIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IGRlZmF1bHRUaGVtZSBmcm9tICcuLi9zdHlsZXMvZGVmYXVsdFRoZW1lJztcbmltcG9ydCBUSEVNRV9JRCBmcm9tICcuLi9zdHlsZXMvaWRlbnRpZmllcic7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZnVuY3Rpb24gR2xvYmFsU3R5bGVzKHByb3BzKSB7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChTeXN0ZW1HbG9iYWxTdHlsZXMsIF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGRlZmF1bHRUaGVtZTogZGVmYXVsdFRoZW1lLFxuICAgIHRoZW1lSWQ6IFRIRU1FX0lEXG4gIH0pKTtcbn1cbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEdsb2JhbFN0eWxlcy5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFdhcm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIOKUglxuICAvLyDilIIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICDilIJcbiAgLy8g4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gIC8qKlxuICAgKiBUaGUgc3R5bGVzIHlvdSB3YW50IHRvIGFwcGx5IGdsb2JhbGx5LlxuICAgKi9cbiAgc3R5bGVzOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5ib29sXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBHbG9iYWxTdHlsZXM7IiwiLy8gU3VwcG9ydHMgZGV0ZXJtaW5hdGlvbiBvZiBpc0NvbnRyb2xsZWQoKS5cbi8vIENvbnRyb2xsZWQgaW5wdXQgYWNjZXB0cyBpdHMgY3VycmVudCB2YWx1ZSBhcyBhIHByb3AuXG4vL1xuLy8gQHNlZSBodHRwczovL2ZhY2Vib29rLmdpdGh1Yi5pby9yZWFjdC9kb2NzL2Zvcm1zLmh0bWwjY29udHJvbGxlZC1jb21wb25lbnRzXG4vLyBAcGFyYW0gdmFsdWVcbi8vIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHN0cmluZyAoaW5jbHVkaW5nICcnKSBvciBudW1iZXIgKGluY2x1ZGluZyB6ZXJvKVxuZXhwb3J0IGZ1bmN0aW9uIGhhc1ZhbHVlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICEoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAwKTtcbn1cblxuLy8gRGV0ZXJtaW5lIGlmIGZpZWxkIGlzIGVtcHR5IG9yIGZpbGxlZC5cbi8vIFJlc3BvbnNlIGRldGVybWluZXMgaWYgbGFiZWwgaXMgcHJlc2VudGVkIGFib3ZlIGZpZWxkIG9yIGFzIHBsYWNlaG9sZGVyLlxuLy9cbi8vIEBwYXJhbSBvYmpcbi8vIEBwYXJhbSBTU1Jcbi8vIEByZXR1cm5zIHtib29sZWFufSBGYWxzZSB3aGVuIG5vdCBwcmVzZW50IG9yIGVtcHR5IHN0cmluZy5cbi8vICAgICAgICAgICAgICAgICAgICBUcnVlIHdoZW4gYW55IG51bWJlciBvciBzdHJpbmcgd2l0aCBsZW5ndGguXG5leHBvcnQgZnVuY3Rpb24gaXNGaWxsZWQob2JqLCBTU1IgPSBmYWxzZSkge1xuICByZXR1cm4gb2JqICYmIChoYXNWYWx1ZShvYmoudmFsdWUpICYmIG9iai52YWx1ZSAhPT0gJycgfHwgU1NSICYmIGhhc1ZhbHVlKG9iai5kZWZhdWx0VmFsdWUpICYmIG9iai5kZWZhdWx0VmFsdWUgIT09ICcnKTtcbn1cblxuLy8gRGV0ZXJtaW5lIGlmIGFuIElucHV0IGlzIGFkb3JuZWQgb24gc3RhcnQuXG4vLyBJdCdzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGxlZnQgd2l0aCBMVFIuXG4vL1xuLy8gQHBhcmFtIG9ialxuLy8gQHJldHVybnMge2Jvb2xlYW59IEZhbHNlIHdoZW4gbm8gYWRvcm5tZW50cy5cbi8vICAgICAgICAgICAgICAgICAgICBUcnVlIHdoZW4gYWRvcm5lZCBhdCB0aGUgc3RhcnQuXG5leHBvcnQgZnVuY3Rpb24gaXNBZG9ybmVkU3RhcnQob2JqKSB7XG4gIHJldHVybiBvYmouc3RhcnRBZG9ybm1lbnQ7XG59IiwiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnB1dEJhc2VVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUlucHV0QmFzZScsIHNsb3QpO1xufVxuY29uc3QgaW5wdXRCYXNlQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUlucHV0QmFzZScsIFsncm9vdCcsICdmb3JtQ29udHJvbCcsICdmb2N1c2VkJywgJ2Rpc2FibGVkJywgJ2Fkb3JuZWRTdGFydCcsICdhZG9ybmVkRW5kJywgJ2Vycm9yJywgJ3NpemVTbWFsbCcsICdtdWx0aWxpbmUnLCAnY29sb3JTZWNvbmRhcnknLCAnZnVsbFdpZHRoJywgJ2hpZGRlbkxhYmVsJywgJ3JlYWRPbmx5JywgJ2lucHV0JywgJ2lucHV0U2l6ZVNtYWxsJywgJ2lucHV0TXVsdGlsaW5lJywgJ2lucHV0VHlwZVNlYXJjaCcsICdpbnB1dEFkb3JuZWRTdGFydCcsICdpbnB1dEFkb3JuZWRFbmQnLCAnaW5wdXRIaWRkZW5MYWJlbCddKTtcbmV4cG9ydCBkZWZhdWx0IGlucHV0QmFzZUNsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UgZnJvbSBcIkBtdWkvdXRpbHMvZm9ybWF0TXVpRXJyb3JNZXNzYWdlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhcmlhLWRlc2NyaWJlZGJ5XCIsIFwiYXV0b0NvbXBsZXRlXCIsIFwiYXV0b0ZvY3VzXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29sb3JcIiwgXCJjb21wb25lbnRzXCIsIFwiY29tcG9uZW50c1Byb3BzXCIsIFwiZGVmYXVsdFZhbHVlXCIsIFwiZGlzYWJsZWRcIiwgXCJkaXNhYmxlSW5qZWN0aW5nR2xvYmFsU3R5bGVzXCIsIFwiZW5kQWRvcm5tZW50XCIsIFwiZXJyb3JcIiwgXCJmdWxsV2lkdGhcIiwgXCJpZFwiLCBcImlucHV0Q29tcG9uZW50XCIsIFwiaW5wdXRQcm9wc1wiLCBcImlucHV0UmVmXCIsIFwibWFyZ2luXCIsIFwibWF4Um93c1wiLCBcIm1pblJvd3NcIiwgXCJtdWx0aWxpbmVcIiwgXCJuYW1lXCIsIFwib25CbHVyXCIsIFwib25DaGFuZ2VcIiwgXCJvbkNsaWNrXCIsIFwib25Gb2N1c1wiLCBcIm9uS2V5RG93blwiLCBcIm9uS2V5VXBcIiwgXCJwbGFjZWhvbGRlclwiLCBcInJlYWRPbmx5XCIsIFwicmVuZGVyU3VmZml4XCIsIFwicm93c1wiLCBcInNpemVcIiwgXCJzbG90UHJvcHNcIiwgXCJzbG90c1wiLCBcInN0YXJ0QWRvcm5tZW50XCIsIFwidHlwZVwiLCBcInZhbHVlXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IGVsZW1lbnRUeXBlQWNjZXB0aW5nUmVmIGZyb20gJ0BtdWkvdXRpbHMvZWxlbWVudFR5cGVBY2NlcHRpbmdSZWYnO1xuaW1wb3J0IHJlZlR5cGUgZnJvbSAnQG11aS91dGlscy9yZWZUeXBlJztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCBpc0hvc3RDb21wb25lbnQgZnJvbSAnQG11aS91dGlscy9pc0hvc3RDb21wb25lbnQnO1xuaW1wb3J0IFRleHRhcmVhQXV0b3NpemUgZnJvbSAnLi4vVGV4dGFyZWFBdXRvc2l6ZSc7XG5pbXBvcnQgZm9ybUNvbnRyb2xTdGF0ZSBmcm9tICcuLi9Gb3JtQ29udHJvbC9mb3JtQ29udHJvbFN0YXRlJztcbmltcG9ydCBGb3JtQ29udHJvbENvbnRleHQgZnJvbSAnLi4vRm9ybUNvbnRyb2wvRm9ybUNvbnRyb2xDb250ZXh0JztcbmltcG9ydCB1c2VGb3JtQ29udHJvbCBmcm9tICcuLi9Gb3JtQ29udHJvbC91c2VGb3JtQ29udHJvbCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsgdXNlRGVmYXVsdFByb3BzIH0gZnJvbSAnLi4vRGVmYXVsdFByb3BzUHJvdmlkZXInO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgdXNlRm9ya1JlZiBmcm9tICcuLi91dGlscy91c2VGb3JrUmVmJztcbmltcG9ydCB1c2VFbmhhbmNlZEVmZmVjdCBmcm9tICcuLi91dGlscy91c2VFbmhhbmNlZEVmZmVjdCc7XG5pbXBvcnQgR2xvYmFsU3R5bGVzIGZyb20gJy4uL0dsb2JhbFN0eWxlcyc7XG5pbXBvcnQgeyBpc0ZpbGxlZCB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IGlucHV0QmFzZUNsYXNzZXMsIHsgZ2V0SW5wdXRCYXNlVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9pbnB1dEJhc2VDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5leHBvcnQgY29uc3Qgcm9vdE92ZXJyaWRlc1Jlc29sdmVyID0gKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgY29uc3Qge1xuICAgIG93bmVyU3RhdGVcbiAgfSA9IHByb3BzO1xuICByZXR1cm4gW3N0eWxlcy5yb290LCBvd25lclN0YXRlLmZvcm1Db250cm9sICYmIHN0eWxlcy5mb3JtQ29udHJvbCwgb3duZXJTdGF0ZS5zdGFydEFkb3JubWVudCAmJiBzdHlsZXMuYWRvcm5lZFN0YXJ0LCBvd25lclN0YXRlLmVuZEFkb3JubWVudCAmJiBzdHlsZXMuYWRvcm5lZEVuZCwgb3duZXJTdGF0ZS5lcnJvciAmJiBzdHlsZXMuZXJyb3IsIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiBzdHlsZXMuc2l6ZVNtYWxsLCBvd25lclN0YXRlLm11bHRpbGluZSAmJiBzdHlsZXMubXVsdGlsaW5lLCBvd25lclN0YXRlLmNvbG9yICYmIHN0eWxlc1tgY29sb3Ike2NhcGl0YWxpemUob3duZXJTdGF0ZS5jb2xvcil9YF0sIG93bmVyU3RhdGUuZnVsbFdpZHRoICYmIHN0eWxlcy5mdWxsV2lkdGgsIG93bmVyU3RhdGUuaGlkZGVuTGFiZWwgJiYgc3R5bGVzLmhpZGRlbkxhYmVsXTtcbn07XG5leHBvcnQgY29uc3QgaW5wdXRPdmVycmlkZXNSZXNvbHZlciA9IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBvd25lclN0YXRlXG4gIH0gPSBwcm9wcztcbiAgcmV0dXJuIFtzdHlsZXMuaW5wdXQsIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiBzdHlsZXMuaW5wdXRTaXplU21hbGwsIG93bmVyU3RhdGUubXVsdGlsaW5lICYmIHN0eWxlcy5pbnB1dE11bHRpbGluZSwgb3duZXJTdGF0ZS50eXBlID09PSAnc2VhcmNoJyAmJiBzdHlsZXMuaW5wdXRUeXBlU2VhcmNoLCBvd25lclN0YXRlLnN0YXJ0QWRvcm5tZW50ICYmIHN0eWxlcy5pbnB1dEFkb3JuZWRTdGFydCwgb3duZXJTdGF0ZS5lbmRBZG9ybm1lbnQgJiYgc3R5bGVzLmlucHV0QWRvcm5lZEVuZCwgb3duZXJTdGF0ZS5oaWRkZW5MYWJlbCAmJiBzdHlsZXMuaW5wdXRIaWRkZW5MYWJlbF07XG59O1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgY29sb3IsXG4gICAgZGlzYWJsZWQsXG4gICAgZXJyb3IsXG4gICAgZW5kQWRvcm5tZW50LFxuICAgIGZvY3VzZWQsXG4gICAgZm9ybUNvbnRyb2wsXG4gICAgZnVsbFdpZHRoLFxuICAgIGhpZGRlbkxhYmVsLFxuICAgIG11bHRpbGluZSxcbiAgICByZWFkT25seSxcbiAgICBzaXplLFxuICAgIHN0YXJ0QWRvcm5tZW50LFxuICAgIHR5cGVcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIGBjb2xvciR7Y2FwaXRhbGl6ZShjb2xvcil9YCwgZGlzYWJsZWQgJiYgJ2Rpc2FibGVkJywgZXJyb3IgJiYgJ2Vycm9yJywgZnVsbFdpZHRoICYmICdmdWxsV2lkdGgnLCBmb2N1c2VkICYmICdmb2N1c2VkJywgZm9ybUNvbnRyb2wgJiYgJ2Zvcm1Db250cm9sJywgc2l6ZSAmJiBzaXplICE9PSAnbWVkaXVtJyAmJiBgc2l6ZSR7Y2FwaXRhbGl6ZShzaXplKX1gLCBtdWx0aWxpbmUgJiYgJ211bHRpbGluZScsIHN0YXJ0QWRvcm5tZW50ICYmICdhZG9ybmVkU3RhcnQnLCBlbmRBZG9ybm1lbnQgJiYgJ2Fkb3JuZWRFbmQnLCBoaWRkZW5MYWJlbCAmJiAnaGlkZGVuTGFiZWwnLCByZWFkT25seSAmJiAncmVhZE9ubHknXSxcbiAgICBpbnB1dDogWydpbnB1dCcsIGRpc2FibGVkICYmICdkaXNhYmxlZCcsIHR5cGUgPT09ICdzZWFyY2gnICYmICdpbnB1dFR5cGVTZWFyY2gnLCBtdWx0aWxpbmUgJiYgJ2lucHV0TXVsdGlsaW5lJywgc2l6ZSA9PT0gJ3NtYWxsJyAmJiAnaW5wdXRTaXplU21hbGwnLCBoaWRkZW5MYWJlbCAmJiAnaW5wdXRIaWRkZW5MYWJlbCcsIHN0YXJ0QWRvcm5tZW50ICYmICdpbnB1dEFkb3JuZWRTdGFydCcsIGVuZEFkb3JubWVudCAmJiAnaW5wdXRBZG9ybmVkRW5kJywgcmVhZE9ubHkgJiYgJ3JlYWRPbmx5J11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRJbnB1dEJhc2VVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmV4cG9ydCBjb25zdCBJbnB1dEJhc2VSb290ID0gc3R5bGVkKCdkaXYnLCB7XG4gIG5hbWU6ICdNdWlJbnB1dEJhc2UnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiByb290T3ZlcnJpZGVzUmVzb2x2ZXJcbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7fSwgdGhlbWUudHlwb2dyYXBoeS5ib2R5MSwge1xuICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUudGV4dC5wcmltYXJ5LFxuICBsaW5lSGVpZ2h0OiAnMS40Mzc1ZW0nLFxuICAvLyAyM3B4XG4gIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICAvLyBQcmV2ZW50IHBhZGRpbmcgaXNzdWUgd2l0aCBmdWxsV2lkdGguXG4gIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICBjdXJzb3I6ICd0ZXh0JyxcbiAgZGlzcGxheTogJ2lubGluZS1mbGV4JyxcbiAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIFtgJi4ke2lucHV0QmFzZUNsYXNzZXMuZGlzYWJsZWR9YF06IHtcbiAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUudGV4dC5kaXNhYmxlZCxcbiAgICBjdXJzb3I6ICdkZWZhdWx0J1xuICB9XG59LCBvd25lclN0YXRlLm11bHRpbGluZSAmJiBfZXh0ZW5kcyh7XG4gIHBhZGRpbmc6ICc0cHggMCA1cHgnXG59LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICBwYWRkaW5nVG9wOiAxXG59KSwgb3duZXJTdGF0ZS5mdWxsV2lkdGggJiYge1xuICB3aWR0aDogJzEwMCUnXG59KSk7XG5leHBvcnQgY29uc3QgSW5wdXRCYXNlQ29tcG9uZW50ID0gc3R5bGVkKCdpbnB1dCcsIHtcbiAgbmFtZTogJ011aUlucHV0QmFzZScsXG4gIHNsb3Q6ICdJbnB1dCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiBpbnB1dE92ZXJyaWRlc1Jlc29sdmVyXG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4ge1xuICBjb25zdCBsaWdodCA9IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JztcbiAgY29uc3QgcGxhY2Vob2xkZXIgPSBfZXh0ZW5kcyh7XG4gICAgY29sb3I6ICdjdXJyZW50Q29sb3InXG4gIH0sIHRoZW1lLnZhcnMgPyB7XG4gICAgb3BhY2l0eTogdGhlbWUudmFycy5vcGFjaXR5LmlucHV0UGxhY2Vob2xkZXJcbiAgfSA6IHtcbiAgICBvcGFjaXR5OiBsaWdodCA/IDAuNDIgOiAwLjVcbiAgfSwge1xuICAgIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnb3BhY2l0eScsIHtcbiAgICAgIGR1cmF0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5zaG9ydGVyXG4gICAgfSlcbiAgfSk7XG4gIGNvbnN0IHBsYWNlaG9sZGVySGlkZGVuID0ge1xuICAgIG9wYWNpdHk6ICcwICFpbXBvcnRhbnQnXG4gIH07XG4gIGNvbnN0IHBsYWNlaG9sZGVyVmlzaWJsZSA9IHRoZW1lLnZhcnMgPyB7XG4gICAgb3BhY2l0eTogdGhlbWUudmFycy5vcGFjaXR5LmlucHV0UGxhY2Vob2xkZXJcbiAgfSA6IHtcbiAgICBvcGFjaXR5OiBsaWdodCA/IDAuNDIgOiAwLjVcbiAgfTtcbiAgcmV0dXJuIF9leHRlbmRzKHtcbiAgICBmb250OiAnaW5oZXJpdCcsXG4gICAgbGV0dGVyU3BhY2luZzogJ2luaGVyaXQnLFxuICAgIGNvbG9yOiAnY3VycmVudENvbG9yJyxcbiAgICBwYWRkaW5nOiAnNHB4IDAgNXB4JyxcbiAgICBib3JkZXI6IDAsXG4gICAgYm94U2l6aW5nOiAnY29udGVudC1ib3gnLFxuICAgIGJhY2tncm91bmQ6ICdub25lJyxcbiAgICBoZWlnaHQ6ICcxLjQzNzVlbScsXG4gICAgLy8gUmVzZXQgMjNweHRoZSBuYXRpdmUgaW5wdXQgbGluZS1oZWlnaHRcbiAgICBtYXJnaW46IDAsXG4gICAgLy8gUmVzZXQgZm9yIFNhZmFyaVxuICAgIFdlYmtpdFRhcEhpZ2hsaWdodENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgIGRpc3BsYXk6ICdibG9jaycsXG4gICAgLy8gTWFrZSB0aGUgZmxleCBpdGVtIHNocmluayB3aXRoIEZpcmVmb3hcbiAgICBtaW5XaWR0aDogMCxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIC8vIEZpeCBJRTExIHdpZHRoIGlzc3VlXG4gICAgYW5pbWF0aW9uTmFtZTogJ211aS1hdXRvLWZpbGwtY2FuY2VsJyxcbiAgICBhbmltYXRpb25EdXJhdGlvbjogJzEwbXMnLFxuICAgICcmOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyJzogcGxhY2Vob2xkZXIsXG4gICAgJyY6Oi1tb3otcGxhY2Vob2xkZXInOiBwbGFjZWhvbGRlcixcbiAgICAvLyBGaXJlZm94IDE5K1xuICAgICcmOi1tcy1pbnB1dC1wbGFjZWhvbGRlcic6IHBsYWNlaG9sZGVyLFxuICAgIC8vIElFMTFcbiAgICAnJjo6LW1zLWlucHV0LXBsYWNlaG9sZGVyJzogcGxhY2Vob2xkZXIsXG4gICAgLy8gRWRnZVxuICAgICcmOmZvY3VzJzoge1xuICAgICAgb3V0bGluZTogMFxuICAgIH0sXG4gICAgLy8gUmVzZXQgRmlyZWZveCBpbnZhbGlkIHJlcXVpcmVkIGlucHV0IHN0eWxlXG4gICAgJyY6aW52YWxpZCc6IHtcbiAgICAgIGJveFNoYWRvdzogJ25vbmUnXG4gICAgfSxcbiAgICAnJjo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbic6IHtcbiAgICAgIC8vIFJlbW92ZSB0aGUgcGFkZGluZyB3aGVuIHR5cGU9c2VhcmNoLlxuICAgICAgV2Via2l0QXBwZWFyYW5jZTogJ25vbmUnXG4gICAgfSxcbiAgICAvLyBTaG93IGFuZCBoaWRlIHRoZSBwbGFjZWhvbGRlciBsb2dpY1xuICAgIFtgbGFiZWxbZGF0YS1zaHJpbms9ZmFsc2VdICsgLiR7aW5wdXRCYXNlQ2xhc3Nlcy5mb3JtQ29udHJvbH0gJmBdOiB7XG4gICAgICAnJjo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcic6IHBsYWNlaG9sZGVySGlkZGVuLFxuICAgICAgJyY6Oi1tb3otcGxhY2Vob2xkZXInOiBwbGFjZWhvbGRlckhpZGRlbixcbiAgICAgIC8vIEZpcmVmb3ggMTkrXG4gICAgICAnJjotbXMtaW5wdXQtcGxhY2Vob2xkZXInOiBwbGFjZWhvbGRlckhpZGRlbixcbiAgICAgIC8vIElFMTFcbiAgICAgICcmOjotbXMtaW5wdXQtcGxhY2Vob2xkZXInOiBwbGFjZWhvbGRlckhpZGRlbixcbiAgICAgIC8vIEVkZ2VcbiAgICAgICcmOmZvY3VzOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyJzogcGxhY2Vob2xkZXJWaXNpYmxlLFxuICAgICAgJyY6Zm9jdXM6Oi1tb3otcGxhY2Vob2xkZXInOiBwbGFjZWhvbGRlclZpc2libGUsXG4gICAgICAvLyBGaXJlZm94IDE5K1xuICAgICAgJyY6Zm9jdXM6LW1zLWlucHV0LXBsYWNlaG9sZGVyJzogcGxhY2Vob2xkZXJWaXNpYmxlLFxuICAgICAgLy8gSUUxMVxuICAgICAgJyY6Zm9jdXM6Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcic6IHBsYWNlaG9sZGVyVmlzaWJsZSAvLyBFZGdlXG4gICAgfSxcbiAgICBbYCYuJHtpbnB1dEJhc2VDbGFzc2VzLmRpc2FibGVkfWBdOiB7XG4gICAgICBvcGFjaXR5OiAxLFxuICAgICAgLy8gUmVzZXQgaU9TIG9wYWNpdHlcbiAgICAgIFdlYmtpdFRleHRGaWxsQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLnRleHQuZGlzYWJsZWQgLy8gRml4IG9wYWNpdHkgU2FmYXJpIGJ1Z1xuICAgIH0sXG4gICAgJyY6LXdlYmtpdC1hdXRvZmlsbCc6IHtcbiAgICAgIGFuaW1hdGlvbkR1cmF0aW9uOiAnNTAwMHMnLFxuICAgICAgYW5pbWF0aW9uTmFtZTogJ211aS1hdXRvLWZpbGwnXG4gICAgfVxuICB9LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICAgIHBhZGRpbmdUb3A6IDFcbiAgfSwgb3duZXJTdGF0ZS5tdWx0aWxpbmUgJiYge1xuICAgIGhlaWdodDogJ2F1dG8nLFxuICAgIHJlc2l6ZTogJ25vbmUnLFxuICAgIHBhZGRpbmc6IDAsXG4gICAgcGFkZGluZ1RvcDogMFxuICB9LCBvd25lclN0YXRlLnR5cGUgPT09ICdzZWFyY2gnICYmIHtcbiAgICAvLyBJbXByb3ZlIHR5cGUgc2VhcmNoIHN0eWxlLlxuICAgIE1vekFwcGVhcmFuY2U6ICd0ZXh0ZmllbGQnXG4gIH0pO1xufSk7XG5jb25zdCBpbnB1dEdsb2JhbFN0eWxlcyA9IC8qI19fUFVSRV9fKi9fanN4KEdsb2JhbFN0eWxlcywge1xuICBzdHlsZXM6IHtcbiAgICAnQGtleWZyYW1lcyBtdWktYXV0by1maWxsJzoge1xuICAgICAgZnJvbToge1xuICAgICAgICBkaXNwbGF5OiAnYmxvY2snXG4gICAgICB9XG4gICAgfSxcbiAgICAnQGtleWZyYW1lcyBtdWktYXV0by1maWxsLWNhbmNlbCc6IHtcbiAgICAgIGZyb206IHtcbiAgICAgICAgZGlzcGxheTogJ2Jsb2NrJ1xuICAgICAgfVxuICAgIH1cbiAgfVxufSk7XG5cbi8qKlxuICogYElucHV0QmFzZWAgY29udGFpbnMgYXMgZmV3IHN0eWxlcyBhcyBwb3NzaWJsZS5cbiAqIEl0IGFpbXMgdG8gYmUgYSBzaW1wbGUgYnVpbGRpbmcgYmxvY2sgZm9yIGNyZWF0aW5nIGFuIGlucHV0LlxuICogSXQgY29udGFpbnMgYSBsb2FkIG9mIHN0eWxlIHJlc2V0IGFuZCBzb21lIHN0YXRlIGxvZ2ljLlxuICovXG5jb25zdCBJbnB1dEJhc2UgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBJbnB1dEJhc2UoaW5Qcm9wcywgcmVmKSB7XG4gIHZhciBfc2xvdFByb3BzJGlucHV0O1xuICBjb25zdCBwcm9wcyA9IHVzZURlZmF1bHRQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUlucHV0QmFzZSdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgICdhcmlhLWRlc2NyaWJlZGJ5JzogYXJpYURlc2NyaWJlZGJ5LFxuICAgICAgYXV0b0NvbXBsZXRlLFxuICAgICAgYXV0b0ZvY3VzLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29tcG9uZW50cyA9IHt9LFxuICAgICAgY29tcG9uZW50c1Byb3BzID0ge30sXG4gICAgICBkZWZhdWx0VmFsdWUsXG4gICAgICBkaXNhYmxlZCxcbiAgICAgIGRpc2FibGVJbmplY3RpbmdHbG9iYWxTdHlsZXMsXG4gICAgICBlbmRBZG9ybm1lbnQsXG4gICAgICBmdWxsV2lkdGggPSBmYWxzZSxcbiAgICAgIGlkLFxuICAgICAgaW5wdXRDb21wb25lbnQgPSAnaW5wdXQnLFxuICAgICAgaW5wdXRQcm9wczogaW5wdXRQcm9wc1Byb3AgPSB7fSxcbiAgICAgIGlucHV0UmVmOiBpbnB1dFJlZlByb3AsXG4gICAgICBtYXhSb3dzLFxuICAgICAgbWluUm93cyxcbiAgICAgIG11bHRpbGluZSA9IGZhbHNlLFxuICAgICAgbmFtZSxcbiAgICAgIG9uQmx1cixcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgb25DbGljayxcbiAgICAgIG9uRm9jdXMsXG4gICAgICBvbktleURvd24sXG4gICAgICBvbktleVVwLFxuICAgICAgcGxhY2Vob2xkZXIsXG4gICAgICByZWFkT25seSxcbiAgICAgIHJlbmRlclN1ZmZpeCxcbiAgICAgIHJvd3MsXG4gICAgICBzbG90UHJvcHMgPSB7fSxcbiAgICAgIHNsb3RzID0ge30sXG4gICAgICBzdGFydEFkb3JubWVudCxcbiAgICAgIHR5cGUgPSAndGV4dCcsXG4gICAgICB2YWx1ZTogdmFsdWVQcm9wXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHZhbHVlID0gaW5wdXRQcm9wc1Byb3AudmFsdWUgIT0gbnVsbCA/IGlucHV0UHJvcHNQcm9wLnZhbHVlIDogdmFsdWVQcm9wO1xuICBjb25zdCB7XG4gICAgY3VycmVudDogaXNDb250cm9sbGVkXG4gIH0gPSBSZWFjdC51c2VSZWYodmFsdWUgIT0gbnVsbCk7XG4gIGNvbnN0IGlucHV0UmVmID0gUmVhY3QudXNlUmVmKCk7XG4gIGNvbnN0IGhhbmRsZUlucHV0UmVmV2FybmluZyA9IFJlYWN0LnVzZUNhbGxiYWNrKGluc3RhbmNlID0+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKGluc3RhbmNlICYmIGluc3RhbmNlLm5vZGVOYW1lICE9PSAnSU5QVVQnICYmICFpbnN0YW5jZS5mb2N1cykge1xuICAgICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiBZb3UgaGF2ZSBwcm92aWRlZCBhIGBpbnB1dENvbXBvbmVudGAgdG8gdGhlIGlucHV0IGNvbXBvbmVudCcsICd0aGF0IGRvZXMgbm90IGNvcnJlY3RseSBoYW5kbGUgdGhlIGByZWZgIHByb3AuJywgJ01ha2Ugc3VyZSB0aGUgYHJlZmAgcHJvcCBpcyBjYWxsZWQgd2l0aCBhIEhUTUxJbnB1dEVsZW1lbnQuJ10uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW10pO1xuICBjb25zdCBoYW5kbGVJbnB1dFJlZiA9IHVzZUZvcmtSZWYoaW5wdXRSZWYsIGlucHV0UmVmUHJvcCwgaW5wdXRQcm9wc1Byb3AucmVmLCBoYW5kbGVJbnB1dFJlZldhcm5pbmcpO1xuICBjb25zdCBbZm9jdXNlZCwgc2V0Rm9jdXNlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IG11aUZvcm1Db250cm9sID0gdXNlRm9ybUNvbnRyb2woKTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3NcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKG11aUZvcm1Db250cm9sKSB7XG4gICAgICAgIHJldHVybiBtdWlGb3JtQ29udHJvbC5yZWdpc3RlckVmZmVjdCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9LCBbbXVpRm9ybUNvbnRyb2xdKTtcbiAgfVxuICBjb25zdCBmY3MgPSBmb3JtQ29udHJvbFN0YXRlKHtcbiAgICBwcm9wcyxcbiAgICBtdWlGb3JtQ29udHJvbCxcbiAgICBzdGF0ZXM6IFsnY29sb3InLCAnZGlzYWJsZWQnLCAnZXJyb3InLCAnaGlkZGVuTGFiZWwnLCAnc2l6ZScsICdyZXF1aXJlZCcsICdmaWxsZWQnXVxuICB9KTtcbiAgZmNzLmZvY3VzZWQgPSBtdWlGb3JtQ29udHJvbCA/IG11aUZvcm1Db250cm9sLmZvY3VzZWQgOiBmb2N1c2VkO1xuXG4gIC8vIFRoZSBibHVyIHdvbid0IGZpcmUgd2hlbiB0aGUgZGlzYWJsZWQgc3RhdGUgaXMgc2V0IG9uIGEgZm9jdXNlZCBpbnB1dC5cbiAgLy8gV2UgbmVlZCB0byBib29rIGtlZXAgdGhlIGZvY3VzZWQgc3RhdGUgbWFudWFsbHkuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFtdWlGb3JtQ29udHJvbCAmJiBkaXNhYmxlZCAmJiBmb2N1c2VkKSB7XG4gICAgICBzZXRGb2N1c2VkKGZhbHNlKTtcbiAgICAgIGlmIChvbkJsdXIpIHtcbiAgICAgICAgb25CbHVyKCk7XG4gICAgICB9XG4gICAgfVxuICB9LCBbbXVpRm9ybUNvbnRyb2wsIGRpc2FibGVkLCBmb2N1c2VkLCBvbkJsdXJdKTtcbiAgY29uc3Qgb25GaWxsZWQgPSBtdWlGb3JtQ29udHJvbCAmJiBtdWlGb3JtQ29udHJvbC5vbkZpbGxlZDtcbiAgY29uc3Qgb25FbXB0eSA9IG11aUZvcm1Db250cm9sICYmIG11aUZvcm1Db250cm9sLm9uRW1wdHk7XG4gIGNvbnN0IGNoZWNrRGlydHkgPSBSZWFjdC51c2VDYWxsYmFjayhvYmogPT4ge1xuICAgIGlmIChpc0ZpbGxlZChvYmopKSB7XG4gICAgICBpZiAob25GaWxsZWQpIHtcbiAgICAgICAgb25GaWxsZWQoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG9uRW1wdHkpIHtcbiAgICAgIG9uRW1wdHkoKTtcbiAgICB9XG4gIH0sIFtvbkZpbGxlZCwgb25FbXB0eV0pO1xuICB1c2VFbmhhbmNlZEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzQ29udHJvbGxlZCkge1xuICAgICAgY2hlY2tEaXJ0eSh7XG4gICAgICAgIHZhbHVlXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIFt2YWx1ZSwgY2hlY2tEaXJ0eSwgaXNDb250cm9sbGVkXSk7XG4gIGNvbnN0IGhhbmRsZUZvY3VzID0gZXZlbnQgPT4ge1xuICAgIC8vIEZpeCBhIGJ1ZyB3aXRoIElFMTEgd2hlcmUgdGhlIGZvY3VzL2JsdXIgZXZlbnRzIGFyZSB0cmlnZ2VyZWRcbiAgICAvLyB3aGlsZSB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgIGlmIChmY3MuZGlzYWJsZWQpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAob25Gb2N1cykge1xuICAgICAgb25Gb2N1cyhldmVudCk7XG4gICAgfVxuICAgIGlmIChpbnB1dFByb3BzUHJvcC5vbkZvY3VzKSB7XG4gICAgICBpbnB1dFByb3BzUHJvcC5vbkZvY3VzKGV2ZW50KTtcbiAgICB9XG4gICAgaWYgKG11aUZvcm1Db250cm9sICYmIG11aUZvcm1Db250cm9sLm9uRm9jdXMpIHtcbiAgICAgIG11aUZvcm1Db250cm9sLm9uRm9jdXMoZXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRGb2N1c2VkKHRydWUpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgaGFuZGxlQmx1ciA9IGV2ZW50ID0+IHtcbiAgICBpZiAob25CbHVyKSB7XG4gICAgICBvbkJsdXIoZXZlbnQpO1xuICAgIH1cbiAgICBpZiAoaW5wdXRQcm9wc1Byb3Aub25CbHVyKSB7XG4gICAgICBpbnB1dFByb3BzUHJvcC5vbkJsdXIoZXZlbnQpO1xuICAgIH1cbiAgICBpZiAobXVpRm9ybUNvbnRyb2wgJiYgbXVpRm9ybUNvbnRyb2wub25CbHVyKSB7XG4gICAgICBtdWlGb3JtQ29udHJvbC5vbkJsdXIoZXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRGb2N1c2VkKGZhbHNlKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IChldmVudCwgLi4uYXJncykgPT4ge1xuICAgIGlmICghaXNDb250cm9sbGVkKSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gZXZlbnQudGFyZ2V0IHx8IGlucHV0UmVmLmN1cnJlbnQ7XG4gICAgICBpZiAoZWxlbWVudCA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBgTVVJOiBFeHBlY3RlZCB2YWxpZCBpbnB1dCB0YXJnZXQuIERpZCB5b3UgdXNlIGEgY3VzdG9tIFxcYGlucHV0Q29tcG9uZW50XFxgIGFuZCBmb3JnZXQgdG8gZm9yd2FyZCByZWZzPyBTZWUgaHR0cHM6Ly9tdWkuY29tL3IvaW5wdXQtY29tcG9uZW50LXJlZi1pbnRlcmZhY2UgZm9yIG1vcmUgaW5mby5gIDogX2Zvcm1hdE11aUVycm9yTWVzc2FnZSgxKSk7XG4gICAgICB9XG4gICAgICBjaGVja0RpcnR5KHtcbiAgICAgICAgdmFsdWU6IGVsZW1lbnQudmFsdWVcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoaW5wdXRQcm9wc1Byb3Aub25DaGFuZ2UpIHtcbiAgICAgIGlucHV0UHJvcHNQcm9wLm9uQ2hhbmdlKGV2ZW50LCAuLi5hcmdzKTtcbiAgICB9XG5cbiAgICAvLyBQZXJmb3JtIGluIHRoZSB3aWxsVXBkYXRlXG4gICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICBvbkNoYW5nZShldmVudCwgLi4uYXJncyk7XG4gICAgfVxuICB9O1xuXG4gIC8vIENoZWNrIHRoZSBpbnB1dCBzdGF0ZSBvbiBtb3VudCwgaW4gY2FzZSBpdCB3YXMgZmlsbGVkIGJ5IHRoZSB1c2VyXG4gIC8vIG9yIGF1dG8gZmlsbGVkIGJ5IHRoZSBicm93c2VyIGJlZm9yZSB0aGUgaHlkcmF0aW9uIChmb3IgU1NSKS5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBjaGVja0RpcnR5KGlucHV0UmVmLmN1cnJlbnQpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW10pO1xuICBjb25zdCBoYW5kbGVDbGljayA9IGV2ZW50ID0+IHtcbiAgICBpZiAoaW5wdXRSZWYuY3VycmVudCAmJiBldmVudC5jdXJyZW50VGFyZ2V0ID09PSBldmVudC50YXJnZXQpIHtcbiAgICAgIGlucHV0UmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICB9XG4gICAgaWYgKG9uQ2xpY2spIHtcbiAgICAgIG9uQ2xpY2soZXZlbnQpO1xuICAgIH1cbiAgfTtcbiAgbGV0IElucHV0Q29tcG9uZW50ID0gaW5wdXRDb21wb25lbnQ7XG4gIGxldCBpbnB1dFByb3BzID0gaW5wdXRQcm9wc1Byb3A7XG4gIGlmIChtdWx0aWxpbmUgJiYgSW5wdXRDb21wb25lbnQgPT09ICdpbnB1dCcpIHtcbiAgICBpZiAocm93cykge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKG1pblJvd3MgfHwgbWF4Um93cykge1xuICAgICAgICAgIGNvbnNvbGUud2FybignTVVJOiBZb3UgY2FuIG5vdCB1c2UgdGhlIGBtaW5Sb3dzYCBvciBgbWF4Um93c2AgcHJvcHMgd2hlbiB0aGUgaW5wdXQgYHJvd3NgIHByb3AgaXMgc2V0LicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpbnB1dFByb3BzID0gX2V4dGVuZHMoe1xuICAgICAgICB0eXBlOiB1bmRlZmluZWQsXG4gICAgICAgIG1pblJvd3M6IHJvd3MsXG4gICAgICAgIG1heFJvd3M6IHJvd3NcbiAgICAgIH0sIGlucHV0UHJvcHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnB1dFByb3BzID0gX2V4dGVuZHMoe1xuICAgICAgICB0eXBlOiB1bmRlZmluZWQsXG4gICAgICAgIG1heFJvd3MsXG4gICAgICAgIG1pblJvd3NcbiAgICAgIH0sIGlucHV0UHJvcHMpO1xuICAgIH1cbiAgICBJbnB1dENvbXBvbmVudCA9IFRleHRhcmVhQXV0b3NpemU7XG4gIH1cbiAgY29uc3QgaGFuZGxlQXV0b0ZpbGwgPSBldmVudCA9PiB7XG4gICAgLy8gUHJvdmlkZSBhIGZha2UgdmFsdWUgYXMgQ2hyb21lIG1pZ2h0IG5vdCBsZXQgeW91IGFjY2VzcyBpdCBmb3Igc2VjdXJpdHkgcmVhc29ucy5cbiAgICBjaGVja0RpcnR5KGV2ZW50LmFuaW1hdGlvbk5hbWUgPT09ICdtdWktYXV0by1maWxsLWNhbmNlbCcgPyBpbnB1dFJlZi5jdXJyZW50IDoge1xuICAgICAgdmFsdWU6ICd4J1xuICAgIH0pO1xuICB9O1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChtdWlGb3JtQ29udHJvbCkge1xuICAgICAgbXVpRm9ybUNvbnRyb2wuc2V0QWRvcm5lZFN0YXJ0KEJvb2xlYW4oc3RhcnRBZG9ybm1lbnQpKTtcbiAgICB9XG4gIH0sIFttdWlGb3JtQ29udHJvbCwgc3RhcnRBZG9ybm1lbnRdKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbG9yOiBmY3MuY29sb3IgfHwgJ3ByaW1hcnknLFxuICAgIGRpc2FibGVkOiBmY3MuZGlzYWJsZWQsXG4gICAgZW5kQWRvcm5tZW50LFxuICAgIGVycm9yOiBmY3MuZXJyb3IsXG4gICAgZm9jdXNlZDogZmNzLmZvY3VzZWQsXG4gICAgZm9ybUNvbnRyb2w6IG11aUZvcm1Db250cm9sLFxuICAgIGZ1bGxXaWR0aCxcbiAgICBoaWRkZW5MYWJlbDogZmNzLmhpZGRlbkxhYmVsLFxuICAgIG11bHRpbGluZSxcbiAgICBzaXplOiBmY3Muc2l6ZSxcbiAgICBzdGFydEFkb3JubWVudCxcbiAgICB0eXBlXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIGNvbnN0IFJvb3QgPSBzbG90cy5yb290IHx8IGNvbXBvbmVudHMuUm9vdCB8fCBJbnB1dEJhc2VSb290O1xuICBjb25zdCByb290UHJvcHMgPSBzbG90UHJvcHMucm9vdCB8fCBjb21wb25lbnRzUHJvcHMucm9vdCB8fCB7fTtcbiAgY29uc3QgSW5wdXQgPSBzbG90cy5pbnB1dCB8fCBjb21wb25lbnRzLklucHV0IHx8IElucHV0QmFzZUNvbXBvbmVudDtcbiAgaW5wdXRQcm9wcyA9IF9leHRlbmRzKHt9LCBpbnB1dFByb3BzLCAoX3Nsb3RQcm9wcyRpbnB1dCA9IHNsb3RQcm9wcy5pbnB1dCkgIT0gbnVsbCA/IF9zbG90UHJvcHMkaW5wdXQgOiBjb21wb25lbnRzUHJvcHMuaW5wdXQpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKFJlYWN0LkZyYWdtZW50LCB7XG4gICAgY2hpbGRyZW46IFshZGlzYWJsZUluamVjdGluZ0dsb2JhbFN0eWxlcyAmJiBpbnB1dEdsb2JhbFN0eWxlcywgLyojX19QVVJFX18qL19qc3hzKFJvb3QsIF9leHRlbmRzKHt9LCByb290UHJvcHMsICFpc0hvc3RDb21wb25lbnQoUm9vdCkgJiYge1xuICAgICAgb3duZXJTdGF0ZTogX2V4dGVuZHMoe30sIG93bmVyU3RhdGUsIHJvb3RQcm9wcy5vd25lclN0YXRlKVxuICAgIH0sIHtcbiAgICAgIHJlZjogcmVmLFxuICAgICAgb25DbGljazogaGFuZGxlQ2xpY2tcbiAgICB9LCBvdGhlciwge1xuICAgICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgcm9vdFByb3BzLmNsYXNzTmFtZSwgY2xhc3NOYW1lLCByZWFkT25seSAmJiAnTXVpSW5wdXRCYXNlLXJlYWRPbmx5JyksXG4gICAgICBjaGlsZHJlbjogW3N0YXJ0QWRvcm5tZW50LCAvKiNfX1BVUkVfXyovX2pzeChGb3JtQ29udHJvbENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChJbnB1dCwgX2V4dGVuZHMoe1xuICAgICAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICAgICAgXCJhcmlhLWludmFsaWRcIjogZmNzLmVycm9yLFxuICAgICAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBhcmlhRGVzY3JpYmVkYnksXG4gICAgICAgICAgYXV0b0NvbXBsZXRlOiBhdXRvQ29tcGxldGUsXG4gICAgICAgICAgYXV0b0ZvY3VzOiBhdXRvRm9jdXMsXG4gICAgICAgICAgZGVmYXVsdFZhbHVlOiBkZWZhdWx0VmFsdWUsXG4gICAgICAgICAgZGlzYWJsZWQ6IGZjcy5kaXNhYmxlZCxcbiAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgb25BbmltYXRpb25TdGFydDogaGFuZGxlQXV0b0ZpbGwsXG4gICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXIsXG4gICAgICAgICAgcmVhZE9ubHk6IHJlYWRPbmx5LFxuICAgICAgICAgIHJlcXVpcmVkOiBmY3MucmVxdWlyZWQsXG4gICAgICAgICAgcm93czogcm93cyxcbiAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgb25LZXlEb3duOiBvbktleURvd24sXG4gICAgICAgICAgb25LZXlVcDogb25LZXlVcCxcbiAgICAgICAgICB0eXBlOiB0eXBlXG4gICAgICAgIH0sIGlucHV0UHJvcHMsICFpc0hvc3RDb21wb25lbnQoSW5wdXQpICYmIHtcbiAgICAgICAgICBhczogSW5wdXRDb21wb25lbnQsXG4gICAgICAgICAgb3duZXJTdGF0ZTogX2V4dGVuZHMoe30sIG93bmVyU3RhdGUsIGlucHV0UHJvcHMub3duZXJTdGF0ZSlcbiAgICAgICAgfSwge1xuICAgICAgICAgIHJlZjogaGFuZGxlSW5wdXRSZWYsXG4gICAgICAgICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMuaW5wdXQsIGlucHV0UHJvcHMuY2xhc3NOYW1lLCByZWFkT25seSAmJiAnTXVpSW5wdXRCYXNlLXJlYWRPbmx5JyksXG4gICAgICAgICAgb25CbHVyOiBoYW5kbGVCbHVyLFxuICAgICAgICAgIG9uQ2hhbmdlOiBoYW5kbGVDaGFuZ2UsXG4gICAgICAgICAgb25Gb2N1czogaGFuZGxlRm9jdXNcbiAgICAgICAgfSkpXG4gICAgICB9KSwgZW5kQWRvcm5tZW50LCByZW5kZXJTdWZmaXggPyByZW5kZXJTdWZmaXgoX2V4dGVuZHMoe30sIGZjcywge1xuICAgICAgICBzdGFydEFkb3JubWVudFxuICAgICAgfSkpIDogbnVsbF1cbiAgICB9KSldXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBJbnB1dEJhc2UucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgJ2FyaWEtZGVzY3JpYmVkYnknOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhpcyBwcm9wIGhlbHBzIHVzZXJzIHRvIGZpbGwgZm9ybXMgZmFzdGVyLCBlc3BlY2lhbGx5IG9uIG1vYmlsZSBkZXZpY2VzLlxuICAgKiBUaGUgbmFtZSBjYW4gYmUgY29uZnVzaW5nLCBhcyBpdCdzIG1vcmUgbGlrZSBhbiBhdXRvZmlsbC5cbiAgICogWW91IGNhbiBsZWFybiBtb3JlIGFib3V0IGl0IFtmb2xsb3dpbmcgdGhlIHNwZWNpZmljYXRpb25dKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm0tY29udHJvbC1pbmZyYXN0cnVjdHVyZS5odG1sI2F1dG9maWxsKS5cbiAgICovXG4gIGF1dG9Db21wbGV0ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgZWxlbWVudCBpcyBmb2N1c2VkIGR1cmluZyB0aGUgZmlyc3QgbW91bnQuXG4gICAqL1xuICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJdCBzdXBwb3J0cyBib3RoIGRlZmF1bHQgYW5kIGN1c3RvbSB0aGVtZSBjb2xvcnMsIHdoaWNoIGNhbiBiZSBhZGRlZCBhcyBzaG93biBpbiB0aGVcbiAgICogW3BhbGV0dGUgY3VzdG9taXphdGlvbiBndWlkZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vcGFsZXR0ZS8jY3VzdG9tLWNvbG9ycykuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYCdwcmltYXJ5J2ApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsncHJpbWFyeScsICdzZWNvbmRhcnknLCAnZXJyb3InLCAnaW5mbycsICdzdWNjZXNzJywgJ3dhcm5pbmcnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBzbG90c2AgcHJvcC5cbiAgICogSXQncyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIGBzbG90c2AgcHJvcCBpbnN0ZWFkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBJbnB1dDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIFJvb3Q6IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBleHRyYSBwcm9wcyBmb3IgdGhlIHNsb3QgY29tcG9uZW50cy5cbiAgICogWW91IGNhbiBvdmVycmlkZSB0aGUgZXhpc3RpbmcgcHJvcHMgb3IgYWRkIG5ldyBvbmVzLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgc2xvdFByb3BzYCBwcm9wLlxuICAgKiBJdCdzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgYHNsb3RQcm9wc2AgcHJvcCBpbnN0ZWFkLCBhcyBgY29tcG9uZW50c1Byb3BzYCB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGNvbXBvbmVudHNQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpbnB1dDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICByb290OiBQcm9wVHlwZXMub2JqZWN0XG4gIH0pLFxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUuIFVzZSB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IGNvbnRyb2xsZWQuXG4gICAqL1xuICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYGZhbHNlYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIEdsb2JhbFN0eWxlcyBmb3IgdGhlIGF1dG8tZmlsbCBrZXlmcmFtZXMgd2lsbCBub3QgYmUgaW5qZWN0ZWQvcmVtb3ZlZCBvbiBtb3VudC91bm1vdW50LiBNYWtlIHN1cmUgdG8gaW5qZWN0IHRoZW0gYXQgdGhlIHRvcCBvZiB5b3VyIGFwcGxpY2F0aW9uLlxuICAgKiBUaGlzIG9wdGlvbiBpcyBpbnRlbmRlZCB0byBoZWxwIHdpdGggYm9vc3RpbmcgdGhlIGluaXRpYWwgcmVuZGVyaW5nIHBlcmZvcm1hbmNlIGlmIHlvdSBhcmUgbG9hZGluZyBhIGJpZyBhbW91bnQgb2YgSW5wdXQgY29tcG9uZW50cyBhdCBvbmNlLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUluamVjdGluZ0dsb2JhbFN0eWxlczogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBFbmQgYElucHV0QWRvcm5tZW50YCBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAqL1xuICBlbmRBZG9ybm1lbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCB3aWxsIGluZGljYXRlIGFuIGVycm9yLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgZXJyb3I6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCB3aWxsIHRha2UgdXAgdGhlIGZ1bGwgd2lkdGggb2YgaXRzIGNvbnRhaW5lci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCAnaW5wdXQnXG4gICAqL1xuICBpbnB1dENvbXBvbmVudDogZWxlbWVudFR5cGVBY2NlcHRpbmdSZWYsXG4gIC8qKlxuICAgKiBbQXR0cmlidXRlc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0I0F0dHJpYnV0ZXMpIGFwcGxpZWQgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGlucHV0UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBQYXNzIGEgcmVmIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpbnB1dFJlZjogcmVmVHlwZSxcbiAgLyoqXG4gICAqIElmIGBkZW5zZWAsIHdpbGwgYWRqdXN0IHZlcnRpY2FsIHNwYWNpbmcuIFRoaXMgaXMgbm9ybWFsbHkgb2J0YWluZWQgdmlhIGNvbnRleHQgZnJvbVxuICAgKiBGb3JtQ29udHJvbC5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgJ25vbmUnYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBtYXJnaW46IFByb3BUeXBlcy5vbmVPZihbJ2RlbnNlJywgJ25vbmUnXSksXG4gIC8qKlxuICAgKiBNYXhpbXVtIG51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgbWF4Um93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogTWluaW11bSBudW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIG1pblJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgYSBbVGV4dGFyZWFBdXRvc2l6ZV0oL21hdGVyaWFsLXVpL3JlYWN0LXRleHRhcmVhLWF1dG9zaXplLykgZWxlbWVudCBpcyByZW5kZXJlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIG11bHRpbGluZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBOYW1lIGF0dHJpYnV0ZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIGBpbnB1dGAgaXMgYmx1cnJlZC5cbiAgICpcbiAgICogTm90aWNlIHRoYXQgdGhlIGZpcnN0IGFyZ3VtZW50IChldmVudCkgbWlnaHQgYmUgdW5kZWZpbmVkLlxuICAgKi9cbiAgb25CbHVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIHZhbHVlIGlzIGNoYW5nZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTFRleHRBcmVhRWxlbWVudCB8IEhUTUxJbnB1dEVsZW1lbnQ+fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICogWW91IGNhbiBwdWxsIG91dCB0aGUgbmV3IHZhbHVlIGJ5IGFjY2Vzc2luZyBgZXZlbnQudGFyZ2V0LnZhbHVlYCAoc3RyaW5nKS5cbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Gb2N1czogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBgaW5wdXRgIGRvZXNuJ3Qgc2F0aXNmeSBpdHMgY29uc3RyYWludHMuXG4gICAqL1xuICBvbkludmFsaWQ6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25LZXlEb3duOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uS2V5VXA6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogVGhlIHNob3J0IGhpbnQgZGlzcGxheWVkIGluIHRoZSBgaW5wdXRgIGJlZm9yZSB0aGUgdXNlciBlbnRlcnMgYSB2YWx1ZS5cbiAgICovXG4gIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSXQgcHJldmVudHMgdGhlIHVzZXIgZnJvbSBjaGFuZ2luZyB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkXG4gICAqIChub3QgZnJvbSBpbnRlcmFjdGluZyB3aXRoIHRoZSBmaWVsZCkuXG4gICAqL1xuICByZWFkT25seTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICByZW5kZXJTdWZmaXg6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBlbGVtZW50IGlzIHJlcXVpcmVkLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogTnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSB3aGVuIG11bHRpbGluZSBvcHRpb24gaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICByb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydtZWRpdW0nLCAnc21hbGwnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBleHRyYSBwcm9wcyBmb3IgdGhlIHNsb3QgY29tcG9uZW50cy5cbiAgICogWW91IGNhbiBvdmVycmlkZSB0aGUgZXhpc3RpbmcgcHJvcHMgb3IgYWRkIG5ldyBvbmVzLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgY29tcG9uZW50c1Byb3BzYCBwcm9wLCB3aGljaCB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHNsb3RQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpbnB1dDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICByb290OiBQcm9wVHlwZXMub2JqZWN0XG4gIH0pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZS5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYGNvbXBvbmVudHNgIHByb3AsIHdoaWNoIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgZnV0dXJlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaW5wdXQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgICByb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG4gIC8qKlxuICAgKiBTdGFydCBgSW5wdXRBZG9ybm1lbnRgIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICovXG4gIHN0YXJ0QWRvcm5tZW50OiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFR5cGUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC4gSXQgc2hvdWxkIGJlIFthIHZhbGlkIEhUTUw1IGlucHV0IHR5cGVdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNGb3JtXyUzQ2lucHV0JTNFX3R5cGVzKS5cbiAgICogQGRlZmF1bHQgJ3RleHQnXG4gICAqL1xuICB0eXBlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQsIHJlcXVpcmVkIGZvciBhIGNvbnRyb2xsZWQgY29tcG9uZW50LlxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5hbnlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBJbnB1dEJhc2U7IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuaW1wb3J0IHsgaW5wdXRCYXNlQ2xhc3NlcyB9IGZyb20gJy4uL0lucHV0QmFzZSc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5wdXRVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUlucHV0Jywgc2xvdCk7XG59XG5jb25zdCBpbnB1dENsYXNzZXMgPSBfZXh0ZW5kcyh7fSwgaW5wdXRCYXNlQ2xhc3NlcywgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpSW5wdXQnLCBbJ3Jvb3QnLCAndW5kZXJsaW5lJywgJ2lucHV0J10pKTtcbmV4cG9ydCBkZWZhdWx0IGlucHV0Q2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJkaXNhYmxlVW5kZXJsaW5lXCIsIFwiY29tcG9uZW50c1wiLCBcImNvbXBvbmVudHNQcm9wc1wiLCBcImZ1bGxXaWR0aFwiLCBcImlucHV0Q29tcG9uZW50XCIsIFwibXVsdGlsaW5lXCIsIFwic2xvdFByb3BzXCIsIFwic2xvdHNcIiwgXCJ0eXBlXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCBkZWVwbWVyZ2UgZnJvbSAnQG11aS91dGlscy9kZWVwbWVyZ2UnO1xuaW1wb3J0IHJlZlR5cGUgZnJvbSAnQG11aS91dGlscy9yZWZUeXBlJztcbmltcG9ydCBJbnB1dEJhc2UgZnJvbSAnLi4vSW5wdXRCYXNlJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyB1c2VEZWZhdWx0UHJvcHMgfSBmcm9tICcuLi9EZWZhdWx0UHJvcHNQcm92aWRlcic7XG5pbXBvcnQgaW5wdXRDbGFzc2VzLCB7IGdldElucHV0VXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9pbnB1dENsYXNzZXMnO1xuaW1wb3J0IHsgcm9vdE92ZXJyaWRlc1Jlc29sdmVyIGFzIGlucHV0QmFzZVJvb3RPdmVycmlkZXNSZXNvbHZlciwgaW5wdXRPdmVycmlkZXNSZXNvbHZlciBhcyBpbnB1dEJhc2VJbnB1dE92ZXJyaWRlc1Jlc29sdmVyLCBJbnB1dEJhc2VSb290LCBJbnB1dEJhc2VDb21wb25lbnQgYXMgSW5wdXRCYXNlSW5wdXQgfSBmcm9tICcuLi9JbnB1dEJhc2UvSW5wdXRCYXNlJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBkaXNhYmxlVW5kZXJsaW5lXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCAhZGlzYWJsZVVuZGVybGluZSAmJiAndW5kZXJsaW5lJ10sXG4gICAgaW5wdXQ6IFsnaW5wdXQnXVxuICB9O1xuICBjb25zdCBjb21wb3NlZENsYXNzZXMgPSBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0SW5wdXRVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xuICByZXR1cm4gX2V4dGVuZHMoe30sIGNsYXNzZXMsIGNvbXBvc2VkQ2xhc3Nlcyk7XG59O1xuY29uc3QgSW5wdXRSb290ID0gc3R5bGVkKElucHV0QmFzZVJvb3QsIHtcbiAgc2hvdWxkRm9yd2FyZFByb3A6IHByb3AgPT4gcm9vdFNob3VsZEZvcndhcmRQcm9wKHByb3ApIHx8IHByb3AgPT09ICdjbGFzc2VzJyxcbiAgbmFtZTogJ011aUlucHV0JyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbLi4uaW5wdXRCYXNlUm9vdE92ZXJyaWRlc1Jlc29sdmVyKHByb3BzLCBzdHlsZXMpLCAhb3duZXJTdGF0ZS5kaXNhYmxlVW5kZXJsaW5lICYmIHN0eWxlcy51bmRlcmxpbmVdO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4ge1xuICBjb25zdCBsaWdodCA9IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JztcbiAgbGV0IGJvdHRvbUxpbmVDb2xvciA9IGxpZ2h0ID8gJ3JnYmEoMCwgMCwgMCwgMC40MiknIDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSc7XG4gIGlmICh0aGVtZS52YXJzKSB7XG4gICAgYm90dG9tTGluZUNvbG9yID0gYHJnYmEoJHt0aGVtZS52YXJzLnBhbGV0dGUuY29tbW9uLm9uQmFja2dyb3VuZENoYW5uZWx9IC8gJHt0aGVtZS52YXJzLm9wYWNpdHkuaW5wdXRVbmRlcmxpbmV9KWA7XG4gIH1cbiAgcmV0dXJuIF9leHRlbmRzKHtcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJ1xuICB9LCBvd25lclN0YXRlLmZvcm1Db250cm9sICYmIHtcbiAgICAnbGFiZWwgKyAmJzoge1xuICAgICAgbWFyZ2luVG9wOiAxNlxuICAgIH1cbiAgfSwgIW93bmVyU3RhdGUuZGlzYWJsZVVuZGVybGluZSAmJiB7XG4gICAgJyY6OmFmdGVyJzoge1xuICAgICAgYm9yZGVyQm90dG9tOiBgMnB4IHNvbGlkICR7KHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpbn1gLFxuICAgICAgbGVmdDogMCxcbiAgICAgIGJvdHRvbTogMCxcbiAgICAgIC8vIERvaW5nIHRoZSBvdGhlciB3YXkgYXJvdW5kIGNyYXNoIG9uIElFMTEgXCInJ1wiIGh0dHBzOi8vZ2l0aHViLmNvbS9jc3NpbmpzL2pzcy9pc3N1ZXMvMjQyXG4gICAgICBjb250ZW50OiAnXCJcIicsXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIHJpZ2h0OiAwLFxuICAgICAgdHJhbnNmb3JtOiAnc2NhbGVYKDApJyxcbiAgICAgIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgndHJhbnNmb3JtJywge1xuICAgICAgICBkdXJhdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRlcixcbiAgICAgICAgZWFzaW5nOiB0aGVtZS50cmFuc2l0aW9ucy5lYXNpbmcuZWFzZU91dFxuICAgICAgfSksXG4gICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScgLy8gVHJhbnNwYXJlbnQgdG8gdGhlIGhvdmVyIHN0eWxlLlxuICAgIH0sXG4gICAgW2AmLiR7aW5wdXRDbGFzc2VzLmZvY3VzZWR9OmFmdGVyYF06IHtcbiAgICAgIC8vIHRyYW5zbGF0ZVgoMCkgaXMgYSB3b3JrYXJvdW5kIGZvciBTYWZhcmkgdHJhbnNmb3JtIHNjYWxlIGJ1Z1xuICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvaXNzdWVzLzMxNzY2XG4gICAgICB0cmFuc2Zvcm06ICdzY2FsZVgoMSkgdHJhbnNsYXRlWCgwKSdcbiAgICB9LFxuICAgIFtgJi4ke2lucHV0Q2xhc3Nlcy5lcnJvcn1gXToge1xuICAgICAgJyY6OmJlZm9yZSwgJjo6YWZ0ZXInOiB7XG4gICAgICAgIGJvcmRlckJvdHRvbUNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5lcnJvci5tYWluXG4gICAgICB9XG4gICAgfSxcbiAgICAnJjo6YmVmb3JlJzoge1xuICAgICAgYm9yZGVyQm90dG9tOiBgMXB4IHNvbGlkICR7Ym90dG9tTGluZUNvbG9yfWAsXG4gICAgICBsZWZ0OiAwLFxuICAgICAgYm90dG9tOiAwLFxuICAgICAgLy8gRG9pbmcgdGhlIG90aGVyIHdheSBhcm91bmQgY3Jhc2ggb24gSUUxMSBcIicnXCIgaHR0cHM6Ly9naXRodWIuY29tL2Nzc2luanMvanNzL2lzc3Vlcy8yNDJcbiAgICAgIGNvbnRlbnQ6ICdcIlxcXFwwMGEwXCInLFxuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICByaWdodDogMCxcbiAgICAgIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnYm9yZGVyLWJvdHRvbS1jb2xvcicsIHtcbiAgICAgICAgZHVyYXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLnNob3J0ZXJcbiAgICAgIH0pLFxuICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnIC8vIFRyYW5zcGFyZW50IHRvIHRoZSBob3ZlciBzdHlsZS5cbiAgICB9LFxuICAgIFtgJjpob3Zlcjpub3QoLiR7aW5wdXRDbGFzc2VzLmRpc2FibGVkfSwgLiR7aW5wdXRDbGFzc2VzLmVycm9yfSk6YmVmb3JlYF06IHtcbiAgICAgIGJvcmRlckJvdHRvbTogYDJweCBzb2xpZCAkeyh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLnRleHQucHJpbWFyeX1gLFxuICAgICAgLy8gUmVzZXQgb24gdG91Y2ggZGV2aWNlcywgaXQgZG9lc24ndCBhZGQgc3BlY2lmaWNpdHlcbiAgICAgICdAbWVkaWEgKGhvdmVyOiBub25lKSc6IHtcbiAgICAgICAgYm9yZGVyQm90dG9tOiBgMXB4IHNvbGlkICR7Ym90dG9tTGluZUNvbG9yfWBcbiAgICAgIH1cbiAgICB9LFxuICAgIFtgJi4ke2lucHV0Q2xhc3Nlcy5kaXNhYmxlZH06YmVmb3JlYF06IHtcbiAgICAgIGJvcmRlckJvdHRvbVN0eWxlOiAnZG90dGVkJ1xuICAgIH1cbiAgfSk7XG59KTtcbmNvbnN0IElucHV0SW5wdXQgPSBzdHlsZWQoSW5wdXRCYXNlSW5wdXQsIHtcbiAgbmFtZTogJ011aUlucHV0JyxcbiAgc2xvdDogJ0lucHV0JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IGlucHV0QmFzZUlucHV0T3ZlcnJpZGVzUmVzb2x2ZXJcbn0pKHt9KTtcbmNvbnN0IElucHV0ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gSW5wdXQoaW5Qcm9wcywgcmVmKSB7XG4gIHZhciBfcmVmLCBfc2xvdHMkcm9vdCwgX3JlZjIsIF9zbG90cyRpbnB1dDtcbiAgY29uc3QgcHJvcHMgPSB1c2VEZWZhdWx0UHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlJbnB1dCdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGRpc2FibGVVbmRlcmxpbmUsXG4gICAgICBjb21wb25lbnRzID0ge30sXG4gICAgICBjb21wb25lbnRzUHJvcHM6IGNvbXBvbmVudHNQcm9wc1Byb3AsXG4gICAgICBmdWxsV2lkdGggPSBmYWxzZSxcbiAgICAgIGlucHV0Q29tcG9uZW50ID0gJ2lucHV0JyxcbiAgICAgIG11bHRpbGluZSA9IGZhbHNlLFxuICAgICAgc2xvdFByb3BzLFxuICAgICAgc2xvdHMgPSB7fSxcbiAgICAgIHR5cGUgPSAndGV4dCdcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKHByb3BzKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IHtcbiAgICBkaXNhYmxlVW5kZXJsaW5lXG4gIH07XG4gIGNvbnN0IGlucHV0Q29tcG9uZW50c1Byb3BzID0ge1xuICAgIHJvb3Q6IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9XG4gIH07XG4gIGNvbnN0IGNvbXBvbmVudHNQcm9wcyA9IChzbG90UHJvcHMgIT0gbnVsbCA/IHNsb3RQcm9wcyA6IGNvbXBvbmVudHNQcm9wc1Byb3ApID8gZGVlcG1lcmdlKHNsb3RQcm9wcyAhPSBudWxsID8gc2xvdFByb3BzIDogY29tcG9uZW50c1Byb3BzUHJvcCwgaW5wdXRDb21wb25lbnRzUHJvcHMpIDogaW5wdXRDb21wb25lbnRzUHJvcHM7XG4gIGNvbnN0IFJvb3RTbG90ID0gKF9yZWYgPSAoX3Nsb3RzJHJvb3QgPSBzbG90cy5yb290KSAhPSBudWxsID8gX3Nsb3RzJHJvb3QgOiBjb21wb25lbnRzLlJvb3QpICE9IG51bGwgPyBfcmVmIDogSW5wdXRSb290O1xuICBjb25zdCBJbnB1dFNsb3QgPSAoX3JlZjIgPSAoX3Nsb3RzJGlucHV0ID0gc2xvdHMuaW5wdXQpICE9IG51bGwgPyBfc2xvdHMkaW5wdXQgOiBjb21wb25lbnRzLklucHV0KSAhPSBudWxsID8gX3JlZjIgOiBJbnB1dElucHV0O1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goSW5wdXRCYXNlLCBfZXh0ZW5kcyh7XG4gICAgc2xvdHM6IHtcbiAgICAgIHJvb3Q6IFJvb3RTbG90LFxuICAgICAgaW5wdXQ6IElucHV0U2xvdFxuICAgIH0sXG4gICAgc2xvdFByb3BzOiBjb21wb25lbnRzUHJvcHMsXG4gICAgZnVsbFdpZHRoOiBmdWxsV2lkdGgsXG4gICAgaW5wdXRDb21wb25lbnQ6IGlucHV0Q29tcG9uZW50LFxuICAgIG11bHRpbGluZTogbXVsdGlsaW5lLFxuICAgIHJlZjogcmVmLFxuICAgIHR5cGU6IHR5cGVcbiAgfSwgb3RoZXIsIHtcbiAgICBjbGFzc2VzOiBjbGFzc2VzXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gSW5wdXQucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogVGhpcyBwcm9wIGhlbHBzIHVzZXJzIHRvIGZpbGwgZm9ybXMgZmFzdGVyLCBlc3BlY2lhbGx5IG9uIG1vYmlsZSBkZXZpY2VzLlxuICAgKiBUaGUgbmFtZSBjYW4gYmUgY29uZnVzaW5nLCBhcyBpdCdzIG1vcmUgbGlrZSBhbiBhdXRvZmlsbC5cbiAgICogWW91IGNhbiBsZWFybiBtb3JlIGFib3V0IGl0IFtmb2xsb3dpbmcgdGhlIHNwZWNpZmljYXRpb25dKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm0tY29udHJvbC1pbmZyYXN0cnVjdHVyZS5odG1sI2F1dG9maWxsKS5cbiAgICovXG4gIGF1dG9Db21wbGV0ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgZWxlbWVudCBpcyBmb2N1c2VkIGR1cmluZyB0aGUgZmlyc3QgbW91bnQuXG4gICAqL1xuICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJdCBzdXBwb3J0cyBib3RoIGRlZmF1bHQgYW5kIGN1c3RvbSB0aGVtZSBjb2xvcnMsIHdoaWNoIGNhbiBiZSBhZGRlZCBhcyBzaG93biBpbiB0aGVcbiAgICogW3BhbGV0dGUgY3VzdG9taXphdGlvbiBndWlkZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vcGFsZXR0ZS8jY3VzdG9tLWNvbG9ycykuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYCdwcmltYXJ5J2ApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsncHJpbWFyeScsICdzZWNvbmRhcnknXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBzbG90c2AgcHJvcC5cbiAgICogSXQncyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIGBzbG90c2AgcHJvcCBpbnN0ZWFkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBJbnB1dDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIFJvb3Q6IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBleHRyYSBwcm9wcyBmb3IgdGhlIHNsb3QgY29tcG9uZW50cy5cbiAgICogWW91IGNhbiBvdmVycmlkZSB0aGUgZXhpc3RpbmcgcHJvcHMgb3IgYWRkIG5ldyBvbmVzLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgc2xvdFByb3BzYCBwcm9wLlxuICAgKiBJdCdzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgYHNsb3RQcm9wc2AgcHJvcCBpbnN0ZWFkLCBhcyBgY29tcG9uZW50c1Byb3BzYCB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGNvbXBvbmVudHNQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpbnB1dDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICByb290OiBQcm9wVHlwZXMub2JqZWN0XG4gIH0pLFxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUuIFVzZSB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IGNvbnRyb2xsZWQuXG4gICAqL1xuICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYGZhbHNlYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIHdpbGwgbm90IGhhdmUgYW4gdW5kZXJsaW5lLlxuICAgKi9cbiAgZGlzYWJsZVVuZGVybGluZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBFbmQgYElucHV0QWRvcm5tZW50YCBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAqL1xuICBlbmRBZG9ybm1lbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCB3aWxsIGluZGljYXRlIGFuIGVycm9yLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgZXJyb3I6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCB3aWxsIHRha2UgdXAgdGhlIGZ1bGwgd2lkdGggb2YgaXRzIGNvbnRhaW5lci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCAnaW5wdXQnXG4gICAqL1xuICBpbnB1dENvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogW0F0dHJpYnV0ZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNBdHRyaWJ1dGVzKSBhcHBsaWVkIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBpbnB1dFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogUGFzcyBhIHJlZiB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaW5wdXRSZWY6IHJlZlR5cGUsXG4gIC8qKlxuICAgKiBJZiBgZGVuc2VgLCB3aWxsIGFkanVzdCB2ZXJ0aWNhbCBzcGFjaW5nLiBUaGlzIGlzIG5vcm1hbGx5IG9idGFpbmVkIHZpYSBjb250ZXh0IGZyb21cbiAgICogRm9ybUNvbnRyb2wuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYCdub25lJ2ApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgbWFyZ2luOiBQcm9wVHlwZXMub25lT2YoWydkZW5zZScsICdub25lJ10pLFxuICAvKipcbiAgICogTWF4aW11bSBudW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIG1heFJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIE1pbmltdW0gbnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSB3aGVuIG11bHRpbGluZSBvcHRpb24gaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICBtaW5Sb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGEgW1RleHRhcmVhQXV0b3NpemVdKC9tYXRlcmlhbC11aS9yZWFjdC10ZXh0YXJlYS1hdXRvc2l6ZS8pIGVsZW1lbnQgaXMgcmVuZGVyZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBtdWx0aWxpbmU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogTmFtZSBhdHRyaWJ1dGUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSB2YWx1ZSBpcyBjaGFuZ2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0LkNoYW5nZUV2ZW50PEhUTUxUZXh0QXJlYUVsZW1lbnQgfCBIVE1MSW5wdXRFbGVtZW50Pn0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIFlvdSBjYW4gcHVsbCBvdXQgdGhlIG5ldyB2YWx1ZSBieSBhY2Nlc3NpbmcgYGV2ZW50LnRhcmdldC52YWx1ZWAgKHN0cmluZykuXG4gICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBUaGUgc2hvcnQgaGludCBkaXNwbGF5ZWQgaW4gdGhlIGBpbnB1dGAgYmVmb3JlIHRoZSB1c2VyIGVudGVycyBhIHZhbHVlLlxuICAgKi9cbiAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBJdCBwcmV2ZW50cyB0aGUgdXNlciBmcm9tIGNoYW5naW5nIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGRcbiAgICogKG5vdCBmcm9tIGludGVyYWN0aW5nIHdpdGggdGhlIGZpZWxkKS5cbiAgICovXG4gIHJlYWRPbmx5OiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgZWxlbWVudCBpcyByZXF1aXJlZC5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgZmFsc2VgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgcm93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIGV4dHJhIHByb3BzIGZvciB0aGUgc2xvdCBjb21wb25lbnRzLlxuICAgKiBZb3UgY2FuIG92ZXJyaWRlIHRoZSBleGlzdGluZyBwcm9wcyBvciBhZGQgbmV3IG9uZXMuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBjb21wb25lbnRzUHJvcHNgIHByb3AsIHdoaWNoIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgZnV0dXJlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlucHV0OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHJvb3Q6IFByb3BUeXBlcy5vYmplY3RcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50cyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgY29tcG9uZW50c2AgcHJvcCwgd2hpY2ggd2lsbCBiZSBkZXByZWNhdGVkIGluIHRoZSBmdXR1cmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpbnB1dDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIHJvb3Q6IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcbiAgLyoqXG4gICAqIFN0YXJ0IGBJbnB1dEFkb3JubWVudGAgZm9yIHRoaXMgY29tcG9uZW50LlxuICAgKi9cbiAgc3RhcnRBZG9ybm1lbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogVHlwZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LiBJdCBzaG91bGQgYmUgW2EgdmFsaWQgSFRNTDUgaW5wdXQgdHlwZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0I0Zvcm1fJTNDaW5wdXQlM0VfdHlwZXMpLlxuICAgKiBAZGVmYXVsdCAndGV4dCdcbiAgICovXG4gIHR5cGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudCwgcmVxdWlyZWQgZm9yIGEgY29udHJvbGxlZCBjb21wb25lbnQuXG4gICAqL1xuICB2YWx1ZTogUHJvcFR5cGVzLmFueVxufSA6IHZvaWQgMDtcbklucHV0Lm11aU5hbWUgPSAnSW5wdXQnO1xuZXhwb3J0IGRlZmF1bHQgSW5wdXQ7IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuaW1wb3J0IHsgaW5wdXRCYXNlQ2xhc3NlcyB9IGZyb20gJy4uL0lucHV0QmFzZSc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsbGVkSW5wdXRVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUZpbGxlZElucHV0Jywgc2xvdCk7XG59XG5jb25zdCBmaWxsZWRJbnB1dENsYXNzZXMgPSBfZXh0ZW5kcyh7fSwgaW5wdXRCYXNlQ2xhc3NlcywgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpRmlsbGVkSW5wdXQnLCBbJ3Jvb3QnLCAndW5kZXJsaW5lJywgJ2lucHV0J10pKTtcbmV4cG9ydCBkZWZhdWx0IGZpbGxlZElucHV0Q2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJkaXNhYmxlVW5kZXJsaW5lXCIsIFwiY29tcG9uZW50c1wiLCBcImNvbXBvbmVudHNQcm9wc1wiLCBcImZ1bGxXaWR0aFwiLCBcImhpZGRlbkxhYmVsXCIsIFwiaW5wdXRDb21wb25lbnRcIiwgXCJtdWx0aWxpbmVcIiwgXCJzbG90UHJvcHNcIiwgXCJzbG90c1wiLCBcInR5cGVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgZGVlcG1lcmdlIGZyb20gJ0BtdWkvdXRpbHMvZGVlcG1lcmdlJztcbmltcG9ydCByZWZUeXBlIGZyb20gJ0BtdWkvdXRpbHMvcmVmVHlwZSc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IElucHV0QmFzZSBmcm9tICcuLi9JbnB1dEJhc2UnO1xuaW1wb3J0IHN0eWxlZCwgeyByb290U2hvdWxkRm9yd2FyZFByb3AgfSBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB7IHVzZURlZmF1bHRQcm9wcyB9IGZyb20gJy4uL0RlZmF1bHRQcm9wc1Byb3ZpZGVyJztcbmltcG9ydCBmaWxsZWRJbnB1dENsYXNzZXMsIHsgZ2V0RmlsbGVkSW5wdXRVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL2ZpbGxlZElucHV0Q2xhc3Nlcyc7XG5pbXBvcnQgeyByb290T3ZlcnJpZGVzUmVzb2x2ZXIgYXMgaW5wdXRCYXNlUm9vdE92ZXJyaWRlc1Jlc29sdmVyLCBpbnB1dE92ZXJyaWRlc1Jlc29sdmVyIGFzIGlucHV0QmFzZUlucHV0T3ZlcnJpZGVzUmVzb2x2ZXIsIElucHV0QmFzZVJvb3QsIElucHV0QmFzZUNvbXBvbmVudCBhcyBJbnB1dEJhc2VJbnB1dCB9IGZyb20gJy4uL0lucHV0QmFzZS9JbnB1dEJhc2UnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIGRpc2FibGVVbmRlcmxpbmVcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsICFkaXNhYmxlVW5kZXJsaW5lICYmICd1bmRlcmxpbmUnXSxcbiAgICBpbnB1dDogWydpbnB1dCddXG4gIH07XG4gIGNvbnN0IGNvbXBvc2VkQ2xhc3NlcyA9IGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRGaWxsZWRJbnB1dFV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgY2xhc3NlcywgY29tcG9zZWRDbGFzc2VzKTtcbn07XG5jb25zdCBGaWxsZWRJbnB1dFJvb3QgPSBzdHlsZWQoSW5wdXRCYXNlUm9vdCwge1xuICBzaG91bGRGb3J3YXJkUHJvcDogcHJvcCA9PiByb290U2hvdWxkRm9yd2FyZFByb3AocHJvcCkgfHwgcHJvcCA9PT0gJ2NsYXNzZXMnLFxuICBuYW1lOiAnTXVpRmlsbGVkSW5wdXQnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFsuLi5pbnB1dEJhc2VSb290T3ZlcnJpZGVzUmVzb2x2ZXIocHJvcHMsIHN0eWxlcyksICFvd25lclN0YXRlLmRpc2FibGVVbmRlcmxpbmUgJiYgc3R5bGVzLnVuZGVybGluZV07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiB7XG4gIHZhciBfcGFsZXR0ZTtcbiAgY29uc3QgbGlnaHQgPSB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCc7XG4gIGNvbnN0IGJvdHRvbUxpbmVDb2xvciA9IGxpZ2h0ID8gJ3JnYmEoMCwgMCwgMCwgMC40MiknIDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSc7XG4gIGNvbnN0IGJhY2tncm91bmRDb2xvciA9IGxpZ2h0ID8gJ3JnYmEoMCwgMCwgMCwgMC4wNiknIDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOSknO1xuICBjb25zdCBob3ZlckJhY2tncm91bmQgPSBsaWdodCA/ICdyZ2JhKDAsIDAsIDAsIDAuMDkpJyA6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTMpJztcbiAgY29uc3QgZGlzYWJsZWRCYWNrZ3JvdW5kID0gbGlnaHQgPyAncmdiYSgwLCAwLCAwLCAwLjEyKScgOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSc7XG4gIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YXJzID8gdGhlbWUudmFycy5wYWxldHRlLkZpbGxlZElucHV0LmJnIDogYmFja2dyb3VuZENvbG9yLFxuICAgIGJvcmRlclRvcExlZnRSYWRpdXM6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5zaGFwZS5ib3JkZXJSYWRpdXMsXG4gICAgYm9yZGVyVG9wUmlnaHRSYWRpdXM6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5zaGFwZS5ib3JkZXJSYWRpdXMsXG4gICAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdiYWNrZ3JvdW5kLWNvbG9yJywge1xuICAgICAgZHVyYXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLnNob3J0ZXIsXG4gICAgICBlYXNpbmc6IHRoZW1lLnRyYW5zaXRpb25zLmVhc2luZy5lYXNlT3V0XG4gICAgfSksXG4gICAgJyY6aG92ZXInOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyB0aGVtZS52YXJzLnBhbGV0dGUuRmlsbGVkSW5wdXQuaG92ZXJCZyA6IGhvdmVyQmFja2dyb3VuZCxcbiAgICAgIC8vIFJlc2V0IG9uIHRvdWNoIGRldmljZXMsIGl0IGRvZXNuJ3QgYWRkIHNwZWNpZmljaXR5XG4gICAgICAnQG1lZGlhIChob3Zlcjogbm9uZSknOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IHRoZW1lLnZhcnMucGFsZXR0ZS5GaWxsZWRJbnB1dC5iZyA6IGJhY2tncm91bmRDb2xvclxuICAgICAgfVxuICAgIH0sXG4gICAgW2AmLiR7ZmlsbGVkSW5wdXRDbGFzc2VzLmZvY3VzZWR9YF06IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IHRoZW1lLnZhcnMucGFsZXR0ZS5GaWxsZWRJbnB1dC5iZyA6IGJhY2tncm91bmRDb2xvclxuICAgIH0sXG4gICAgW2AmLiR7ZmlsbGVkSW5wdXRDbGFzc2VzLmRpc2FibGVkfWBdOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyB0aGVtZS52YXJzLnBhbGV0dGUuRmlsbGVkSW5wdXQuZGlzYWJsZWRCZyA6IGRpc2FibGVkQmFja2dyb3VuZFxuICAgIH1cbiAgfSwgIW93bmVyU3RhdGUuZGlzYWJsZVVuZGVybGluZSAmJiB7XG4gICAgJyY6OmFmdGVyJzoge1xuICAgICAgYm9yZGVyQm90dG9tOiBgMnB4IHNvbGlkICR7KF9wYWxldHRlID0gKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvciB8fCAncHJpbWFyeSddKSA9PSBudWxsID8gdm9pZCAwIDogX3BhbGV0dGUubWFpbn1gLFxuICAgICAgbGVmdDogMCxcbiAgICAgIGJvdHRvbTogMCxcbiAgICAgIC8vIERvaW5nIHRoZSBvdGhlciB3YXkgYXJvdW5kIGNyYXNoIG9uIElFMTEgXCInJ1wiIGh0dHBzOi8vZ2l0aHViLmNvbS9jc3NpbmpzL2pzcy9pc3N1ZXMvMjQyXG4gICAgICBjb250ZW50OiAnXCJcIicsXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIHJpZ2h0OiAwLFxuICAgICAgdHJhbnNmb3JtOiAnc2NhbGVYKDApJyxcbiAgICAgIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgndHJhbnNmb3JtJywge1xuICAgICAgICBkdXJhdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRlcixcbiAgICAgICAgZWFzaW5nOiB0aGVtZS50cmFuc2l0aW9ucy5lYXNpbmcuZWFzZU91dFxuICAgICAgfSksXG4gICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScgLy8gVHJhbnNwYXJlbnQgdG8gdGhlIGhvdmVyIHN0eWxlLlxuICAgIH0sXG4gICAgW2AmLiR7ZmlsbGVkSW5wdXRDbGFzc2VzLmZvY3VzZWR9OmFmdGVyYF06IHtcbiAgICAgIC8vIHRyYW5zbGF0ZVgoMCkgaXMgYSB3b3JrYXJvdW5kIGZvciBTYWZhcmkgdHJhbnNmb3JtIHNjYWxlIGJ1Z1xuICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvaXNzdWVzLzMxNzY2XG4gICAgICB0cmFuc2Zvcm06ICdzY2FsZVgoMSkgdHJhbnNsYXRlWCgwKSdcbiAgICB9LFxuICAgIFtgJi4ke2ZpbGxlZElucHV0Q2xhc3Nlcy5lcnJvcn1gXToge1xuICAgICAgJyY6OmJlZm9yZSwgJjo6YWZ0ZXInOiB7XG4gICAgICAgIGJvcmRlckJvdHRvbUNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5lcnJvci5tYWluXG4gICAgICB9XG4gICAgfSxcbiAgICAnJjo6YmVmb3JlJzoge1xuICAgICAgYm9yZGVyQm90dG9tOiBgMXB4IHNvbGlkICR7dGhlbWUudmFycyA/IGByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlLmNvbW1vbi5vbkJhY2tncm91bmRDaGFubmVsfSAvICR7dGhlbWUudmFycy5vcGFjaXR5LmlucHV0VW5kZXJsaW5lfSlgIDogYm90dG9tTGluZUNvbG9yfWAsXG4gICAgICBsZWZ0OiAwLFxuICAgICAgYm90dG9tOiAwLFxuICAgICAgLy8gRG9pbmcgdGhlIG90aGVyIHdheSBhcm91bmQgY3Jhc2ggb24gSUUxMSBcIicnXCIgaHR0cHM6Ly9naXRodWIuY29tL2Nzc2luanMvanNzL2lzc3Vlcy8yNDJcbiAgICAgIGNvbnRlbnQ6ICdcIlxcXFwwMGEwXCInLFxuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICByaWdodDogMCxcbiAgICAgIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnYm9yZGVyLWJvdHRvbS1jb2xvcicsIHtcbiAgICAgICAgZHVyYXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLnNob3J0ZXJcbiAgICAgIH0pLFxuICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnIC8vIFRyYW5zcGFyZW50IHRvIHRoZSBob3ZlciBzdHlsZS5cbiAgICB9LFxuICAgIFtgJjpob3Zlcjpub3QoLiR7ZmlsbGVkSW5wdXRDbGFzc2VzLmRpc2FibGVkfSwgLiR7ZmlsbGVkSW5wdXRDbGFzc2VzLmVycm9yfSk6YmVmb3JlYF06IHtcbiAgICAgIGJvcmRlckJvdHRvbTogYDFweCBzb2xpZCAkeyh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLnRleHQucHJpbWFyeX1gXG4gICAgfSxcbiAgICBbYCYuJHtmaWxsZWRJbnB1dENsYXNzZXMuZGlzYWJsZWR9OmJlZm9yZWBdOiB7XG4gICAgICBib3JkZXJCb3R0b21TdHlsZTogJ2RvdHRlZCdcbiAgICB9XG4gIH0sIG93bmVyU3RhdGUuc3RhcnRBZG9ybm1lbnQgJiYge1xuICAgIHBhZGRpbmdMZWZ0OiAxMlxuICB9LCBvd25lclN0YXRlLmVuZEFkb3JubWVudCAmJiB7XG4gICAgcGFkZGluZ1JpZ2h0OiAxMlxuICB9LCBvd25lclN0YXRlLm11bHRpbGluZSAmJiBfZXh0ZW5kcyh7XG4gICAgcGFkZGluZzogJzI1cHggMTJweCA4cHgnXG4gIH0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gICAgcGFkZGluZ1RvcDogMjEsXG4gICAgcGFkZGluZ0JvdHRvbTogNFxuICB9LCBvd25lclN0YXRlLmhpZGRlbkxhYmVsICYmIHtcbiAgICBwYWRkaW5nVG9wOiAxNixcbiAgICBwYWRkaW5nQm90dG9tOiAxN1xuICB9LCBvd25lclN0YXRlLmhpZGRlbkxhYmVsICYmIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gICAgcGFkZGluZ1RvcDogOCxcbiAgICBwYWRkaW5nQm90dG9tOiA5XG4gIH0pKTtcbn0pO1xuY29uc3QgRmlsbGVkSW5wdXRJbnB1dCA9IHN0eWxlZChJbnB1dEJhc2VJbnB1dCwge1xuICBuYW1lOiAnTXVpRmlsbGVkSW5wdXQnLFxuICBzbG90OiAnSW5wdXQnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogaW5wdXRCYXNlSW5wdXRPdmVycmlkZXNSZXNvbHZlclxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgcGFkZGluZ1RvcDogMjUsXG4gIHBhZGRpbmdSaWdodDogMTIsXG4gIHBhZGRpbmdCb3R0b206IDgsXG4gIHBhZGRpbmdMZWZ0OiAxMlxufSwgIXRoZW1lLnZhcnMgJiYge1xuICAnJjotd2Via2l0LWF1dG9maWxsJzoge1xuICAgIFdlYmtpdEJveFNoYWRvdzogdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnbGlnaHQnID8gbnVsbCA6ICcwIDAgMCAxMDBweCAjMjY2Nzk4IGluc2V0JyxcbiAgICBXZWJraXRUZXh0RmlsbENvbG9yOiB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCcgPyBudWxsIDogJyNmZmYnLFxuICAgIGNhcmV0Q29sb3I6IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JyA/IG51bGwgOiAnI2ZmZicsXG4gICAgYm9yZGVyVG9wTGVmdFJhZGl1czogJ2luaGVyaXQnLFxuICAgIGJvcmRlclRvcFJpZ2h0UmFkaXVzOiAnaW5oZXJpdCdcbiAgfVxufSwgdGhlbWUudmFycyAmJiB7XG4gICcmOi13ZWJraXQtYXV0b2ZpbGwnOiB7XG4gICAgYm9yZGVyVG9wTGVmdFJhZGl1czogJ2luaGVyaXQnLFxuICAgIGJvcmRlclRvcFJpZ2h0UmFkaXVzOiAnaW5oZXJpdCdcbiAgfSxcbiAgW3RoZW1lLmdldENvbG9yU2NoZW1lU2VsZWN0b3IoJ2RhcmsnKV06IHtcbiAgICAnJjotd2Via2l0LWF1dG9maWxsJzoge1xuICAgICAgV2Via2l0Qm94U2hhZG93OiAnMCAwIDAgMTAwcHggIzI2Njc5OCBpbnNldCcsXG4gICAgICBXZWJraXRUZXh0RmlsbENvbG9yOiAnI2ZmZicsXG4gICAgICBjYXJldENvbG9yOiAnI2ZmZidcbiAgICB9XG4gIH1cbn0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gIHBhZGRpbmdUb3A6IDIxLFxuICBwYWRkaW5nQm90dG9tOiA0XG59LCBvd25lclN0YXRlLmhpZGRlbkxhYmVsICYmIHtcbiAgcGFkZGluZ1RvcDogMTYsXG4gIHBhZGRpbmdCb3R0b206IDE3XG59LCBvd25lclN0YXRlLnN0YXJ0QWRvcm5tZW50ICYmIHtcbiAgcGFkZGluZ0xlZnQ6IDBcbn0sIG93bmVyU3RhdGUuZW5kQWRvcm5tZW50ICYmIHtcbiAgcGFkZGluZ1JpZ2h0OiAwXG59LCBvd25lclN0YXRlLmhpZGRlbkxhYmVsICYmIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gIHBhZGRpbmdUb3A6IDgsXG4gIHBhZGRpbmdCb3R0b206IDlcbn0sIG93bmVyU3RhdGUubXVsdGlsaW5lICYmIHtcbiAgcGFkZGluZ1RvcDogMCxcbiAgcGFkZGluZ0JvdHRvbTogMCxcbiAgcGFkZGluZ0xlZnQ6IDAsXG4gIHBhZGRpbmdSaWdodDogMFxufSkpO1xuY29uc3QgRmlsbGVkSW5wdXQgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBGaWxsZWRJbnB1dChpblByb3BzLCByZWYpIHtcbiAgdmFyIF9yZWYsIF9zbG90cyRyb290LCBfcmVmMiwgX3Nsb3RzJGlucHV0O1xuICBjb25zdCBwcm9wcyA9IHVzZURlZmF1bHRQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUZpbGxlZElucHV0J1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY29tcG9uZW50cyA9IHt9LFxuICAgICAgY29tcG9uZW50c1Byb3BzOiBjb21wb25lbnRzUHJvcHNQcm9wLFxuICAgICAgZnVsbFdpZHRoID0gZmFsc2UsXG4gICAgICAvLyBkZWNsYXJlIGhlcmUgdG8gcHJldmVudCBzcHJlYWRpbmcgdG8gRE9NXG4gICAgICBpbnB1dENvbXBvbmVudCA9ICdpbnB1dCcsXG4gICAgICBtdWx0aWxpbmUgPSBmYWxzZSxcbiAgICAgIHNsb3RQcm9wcyxcbiAgICAgIHNsb3RzID0ge30sXG4gICAgICB0eXBlID0gJ3RleHQnXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBmdWxsV2lkdGgsXG4gICAgaW5wdXRDb21wb25lbnQsXG4gICAgbXVsdGlsaW5lLFxuICAgIHR5cGVcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhwcm9wcyk7XG4gIGNvbnN0IGZpbGxlZElucHV0Q29tcG9uZW50c1Byb3BzID0ge1xuICAgIHJvb3Q6IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9LFxuICAgIGlucHV0OiB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfVxuICB9O1xuICBjb25zdCBjb21wb25lbnRzUHJvcHMgPSAoc2xvdFByb3BzICE9IG51bGwgPyBzbG90UHJvcHMgOiBjb21wb25lbnRzUHJvcHNQcm9wKSA/IGRlZXBtZXJnZShmaWxsZWRJbnB1dENvbXBvbmVudHNQcm9wcywgc2xvdFByb3BzICE9IG51bGwgPyBzbG90UHJvcHMgOiBjb21wb25lbnRzUHJvcHNQcm9wKSA6IGZpbGxlZElucHV0Q29tcG9uZW50c1Byb3BzO1xuICBjb25zdCBSb290U2xvdCA9IChfcmVmID0gKF9zbG90cyRyb290ID0gc2xvdHMucm9vdCkgIT0gbnVsbCA/IF9zbG90cyRyb290IDogY29tcG9uZW50cy5Sb290KSAhPSBudWxsID8gX3JlZiA6IEZpbGxlZElucHV0Um9vdDtcbiAgY29uc3QgSW5wdXRTbG90ID0gKF9yZWYyID0gKF9zbG90cyRpbnB1dCA9IHNsb3RzLmlucHV0KSAhPSBudWxsID8gX3Nsb3RzJGlucHV0IDogY29tcG9uZW50cy5JbnB1dCkgIT0gbnVsbCA/IF9yZWYyIDogRmlsbGVkSW5wdXRJbnB1dDtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KElucHV0QmFzZSwgX2V4dGVuZHMoe1xuICAgIHNsb3RzOiB7XG4gICAgICByb290OiBSb290U2xvdCxcbiAgICAgIGlucHV0OiBJbnB1dFNsb3RcbiAgICB9LFxuICAgIGNvbXBvbmVudHNQcm9wczogY29tcG9uZW50c1Byb3BzLFxuICAgIGZ1bGxXaWR0aDogZnVsbFdpZHRoLFxuICAgIGlucHV0Q29tcG9uZW50OiBpbnB1dENvbXBvbmVudCxcbiAgICBtdWx0aWxpbmU6IG11bHRpbGluZSxcbiAgICByZWY6IHJlZixcbiAgICB0eXBlOiB0eXBlXG4gIH0sIG90aGVyLCB7XG4gICAgY2xhc3NlczogY2xhc3Nlc1xuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEZpbGxlZElucHV0LnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgV2FybmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgLy8g4pSCIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4g4pSCXG4gIC8vIOKUgiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIOKUglxuICAvLyDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgLyoqXG4gICAqIFRoaXMgcHJvcCBoZWxwcyB1c2VycyB0byBmaWxsIGZvcm1zIGZhc3RlciwgZXNwZWNpYWxseSBvbiBtb2JpbGUgZGV2aWNlcy5cbiAgICogVGhlIG5hbWUgY2FuIGJlIGNvbmZ1c2luZywgYXMgaXQncyBtb3JlIGxpa2UgYW4gYXV0b2ZpbGwuXG4gICAqIFlvdSBjYW4gbGVhcm4gbW9yZSBhYm91dCBpdCBbZm9sbG93aW5nIHRoZSBzcGVjaWZpY2F0aW9uXShodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3JtLWNvbnRyb2wtaW5mcmFzdHJ1Y3R1cmUuaHRtbCNhdXRvZmlsbCkuXG4gICAqL1xuICBhdXRvQ29tcGxldGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIGVsZW1lbnQgaXMgZm9jdXNlZCBkdXJpbmcgdGhlIGZpcnN0IG1vdW50LlxuICAgKi9cbiAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBUaGUgY29sb3Igb2YgdGhlIGNvbXBvbmVudC5cbiAgICogSXQgc3VwcG9ydHMgYm90aCBkZWZhdWx0IGFuZCBjdXN0b20gdGhlbWUgY29sb3JzLCB3aGljaCBjYW4gYmUgYWRkZWQgYXMgc2hvd24gaW4gdGhlXG4gICAqIFtwYWxldHRlIGN1c3RvbWl6YXRpb24gZ3VpZGVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL3BhbGV0dGUvI2N1c3RvbS1jb2xvcnMpLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGAncHJpbWFyeSdgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ3ByaW1hcnknLCAnc2Vjb25kYXJ5J10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50cyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgc2xvdHNgIHByb3AuXG4gICAqIEl0J3MgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBgc2xvdHNgIHByb3AgaW5zdGVhZC5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGNvbXBvbmVudHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgSW5wdXQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgICBSb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgZXh0cmEgcHJvcHMgZm9yIHRoZSBzbG90IGNvbXBvbmVudHMuXG4gICAqIFlvdSBjYW4gb3ZlcnJpZGUgdGhlIGV4aXN0aW5nIHByb3BzIG9yIGFkZCBuZXcgb25lcy5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYHNsb3RQcm9wc2AgcHJvcC5cbiAgICogSXQncyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIGBzbG90UHJvcHNgIHByb3AgaW5zdGVhZCwgYXMgYGNvbXBvbmVudHNQcm9wc2Agd2lsbCBiZSBkZXByZWNhdGVkIGluIHRoZSBmdXR1cmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzUHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaW5wdXQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgcm9vdDogUHJvcFR5cGVzLm9iamVjdFxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlLiBVc2Ugd2hlbiB0aGUgY29tcG9uZW50IGlzIG5vdCBjb250cm9sbGVkLlxuICAgKi9cbiAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgaW5wdXQgd2lsbCBub3QgaGF2ZSBhbiB1bmRlcmxpbmUuXG4gICAqL1xuICBkaXNhYmxlVW5kZXJsaW5lOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIEVuZCBgSW5wdXRBZG9ybm1lbnRgIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICovXG4gIGVuZEFkb3JubWVudDogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIHdpbGwgaW5kaWNhdGUgYW4gZXJyb3IuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYGZhbHNlYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBlcnJvcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIHdpbGwgdGFrZSB1cCB0aGUgZnVsbCB3aWR0aCBvZiBpdHMgY29udGFpbmVyLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIGlzIGhpZGRlbi5cbiAgICogVGhpcyBpcyB1c2VkIHRvIGluY3JlYXNlIGRlbnNpdHkgZm9yIGEgYEZpbGxlZElucHV0YC5cbiAgICogQmUgc3VyZSB0byBhZGQgYGFyaWEtbGFiZWxgIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBoaWRkZW5MYWJlbDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCAnaW5wdXQnXG4gICAqL1xuICBpbnB1dENvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogW0F0dHJpYnV0ZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNBdHRyaWJ1dGVzKSBhcHBsaWVkIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBpbnB1dFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogUGFzcyBhIHJlZiB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaW5wdXRSZWY6IHJlZlR5cGUsXG4gIC8qKlxuICAgKiBJZiBgZGVuc2VgLCB3aWxsIGFkanVzdCB2ZXJ0aWNhbCBzcGFjaW5nLiBUaGlzIGlzIG5vcm1hbGx5IG9idGFpbmVkIHZpYSBjb250ZXh0IGZyb21cbiAgICogRm9ybUNvbnRyb2wuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYCdub25lJ2ApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgbWFyZ2luOiBQcm9wVHlwZXMub25lT2YoWydkZW5zZScsICdub25lJ10pLFxuICAvKipcbiAgICogTWF4aW11bSBudW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIG1heFJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIE1pbmltdW0gbnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSB3aGVuIG11bHRpbGluZSBvcHRpb24gaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICBtaW5Sb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGEgW1RleHRhcmVhQXV0b3NpemVdKC9tYXRlcmlhbC11aS9yZWFjdC10ZXh0YXJlYS1hdXRvc2l6ZS8pIGVsZW1lbnQgaXMgcmVuZGVyZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBtdWx0aWxpbmU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogTmFtZSBhdHRyaWJ1dGUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSB2YWx1ZSBpcyBjaGFuZ2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0LkNoYW5nZUV2ZW50PEhUTUxUZXh0QXJlYUVsZW1lbnQgfCBIVE1MSW5wdXRFbGVtZW50Pn0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIFlvdSBjYW4gcHVsbCBvdXQgdGhlIG5ldyB2YWx1ZSBieSBhY2Nlc3NpbmcgYGV2ZW50LnRhcmdldC52YWx1ZWAgKHN0cmluZykuXG4gICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBUaGUgc2hvcnQgaGludCBkaXNwbGF5ZWQgaW4gdGhlIGBpbnB1dGAgYmVmb3JlIHRoZSB1c2VyIGVudGVycyBhIHZhbHVlLlxuICAgKi9cbiAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBJdCBwcmV2ZW50cyB0aGUgdXNlciBmcm9tIGNoYW5naW5nIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGRcbiAgICogKG5vdCBmcm9tIGludGVyYWN0aW5nIHdpdGggdGhlIGZpZWxkKS5cbiAgICovXG4gIHJlYWRPbmx5OiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgZWxlbWVudCBpcyByZXF1aXJlZC5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgZmFsc2VgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgcm93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIGV4dHJhIHByb3BzIGZvciB0aGUgc2xvdCBjb21wb25lbnRzLlxuICAgKiBZb3UgY2FuIG92ZXJyaWRlIHRoZSBleGlzdGluZyBwcm9wcyBvciBhZGQgbmV3IG9uZXMuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBjb21wb25lbnRzUHJvcHNgIHByb3AsIHdoaWNoIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgZnV0dXJlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlucHV0OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHJvb3Q6IFByb3BUeXBlcy5vYmplY3RcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50cyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgY29tcG9uZW50c2AgcHJvcCwgd2hpY2ggd2lsbCBiZSBkZXByZWNhdGVkIGluIHRoZSBmdXR1cmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpbnB1dDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIHJvb3Q6IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcbiAgLyoqXG4gICAqIFN0YXJ0IGBJbnB1dEFkb3JubWVudGAgZm9yIHRoaXMgY29tcG9uZW50LlxuICAgKi9cbiAgc3RhcnRBZG9ybm1lbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogVHlwZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LiBJdCBzaG91bGQgYmUgW2EgdmFsaWQgSFRNTDUgaW5wdXQgdHlwZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0I0Zvcm1fJTNDaW5wdXQlM0VfdHlwZXMpLlxuICAgKiBAZGVmYXVsdCAndGV4dCdcbiAgICovXG4gIHR5cGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudCwgcmVxdWlyZWQgZm9yIGEgY29udHJvbGxlZCBjb21wb25lbnQuXG4gICAqL1xuICB2YWx1ZTogUHJvcFR5cGVzLmFueVxufSA6IHZvaWQgMDtcbkZpbGxlZElucHV0Lm11aU5hbWUgPSAnSW5wdXQnO1xuZXhwb3J0IGRlZmF1bHQgRmlsbGVkSW5wdXQ7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xudmFyIF9zcGFuO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc2VzXCIsIFwiY2xhc3NOYW1lXCIsIFwibGFiZWxcIiwgXCJub3RjaGVkXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgTm90Y2hlZE91dGxpbmVSb290ID0gc3R5bGVkKCdmaWVsZHNldCcsIHtcbiAgc2hvdWxkRm9yd2FyZFByb3A6IHJvb3RTaG91bGRGb3J3YXJkUHJvcFxufSkoe1xuICB0ZXh0QWxpZ246ICdsZWZ0JyxcbiAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gIGJvdHRvbTogMCxcbiAgcmlnaHQ6IDAsXG4gIHRvcDogLTUsXG4gIGxlZnQ6IDAsXG4gIG1hcmdpbjogMCxcbiAgcGFkZGluZzogJzAgOHB4JyxcbiAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICBib3JkZXJSYWRpdXM6ICdpbmhlcml0JyxcbiAgYm9yZGVyU3R5bGU6ICdzb2xpZCcsXG4gIGJvcmRlcldpZHRoOiAxLFxuICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gIG1pbldpZHRoOiAnMCUnXG59KTtcbmNvbnN0IE5vdGNoZWRPdXRsaW5lTGVnZW5kID0gc3R5bGVkKCdsZWdlbmQnLCB7XG4gIHNob3VsZEZvcndhcmRQcm9wOiByb290U2hvdWxkRm9yd2FyZFByb3Bcbn0pKCh7XG4gIG93bmVyU3RhdGUsXG4gIHRoZW1lXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGZsb2F0OiAndW5zZXQnLFxuICAvLyBGaXggY29uZmxpY3Qgd2l0aCBib290c3RyYXBcbiAgd2lkdGg6ICdhdXRvJyxcbiAgLy8gRml4IGNvbmZsaWN0IHdpdGggYm9vdHN0cmFwXG4gIG92ZXJmbG93OiAnaGlkZGVuJ1xufSwgIW93bmVyU3RhdGUud2l0aExhYmVsICYmIHtcbiAgcGFkZGluZzogMCxcbiAgbGluZUhlaWdodDogJzExcHgnLFxuICAvLyBzeW5jIHdpdGggYGhlaWdodGAgaW4gYGxlZ2VuZGAgc3R5bGVzXG4gIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnd2lkdGgnLCB7XG4gICAgZHVyYXRpb246IDE1MCxcbiAgICBlYXNpbmc6IHRoZW1lLnRyYW5zaXRpb25zLmVhc2luZy5lYXNlT3V0XG4gIH0pXG59LCBvd25lclN0YXRlLndpdGhMYWJlbCAmJiBfZXh0ZW5kcyh7XG4gIGRpc3BsYXk6ICdibG9jaycsXG4gIC8vIEZpeCBjb25mbGljdCB3aXRoIG5vcm1hbGl6ZS5jc3MgYW5kIHNhbml0aXplLmNzc1xuICBwYWRkaW5nOiAwLFxuICBoZWlnaHQ6IDExLFxuICAvLyBzeW5jIHdpdGggYGxpbmVIZWlnaHRgIGluIGBsZWdlbmRgIHN0eWxlc1xuICBmb250U2l6ZTogJzAuNzVlbScsXG4gIHZpc2liaWxpdHk6ICdoaWRkZW4nLFxuICBtYXhXaWR0aDogMC4wMSxcbiAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdtYXgtd2lkdGgnLCB7XG4gICAgZHVyYXRpb246IDUwLFxuICAgIGVhc2luZzogdGhlbWUudHJhbnNpdGlvbnMuZWFzaW5nLmVhc2VPdXRcbiAgfSksXG4gIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICAnJiA+IHNwYW4nOiB7XG4gICAgcGFkZGluZ0xlZnQ6IDUsXG4gICAgcGFkZGluZ1JpZ2h0OiA1LFxuICAgIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxuICAgIG9wYWNpdHk6IDAsXG4gICAgdmlzaWJpbGl0eTogJ3Zpc2libGUnXG4gIH1cbn0sIG93bmVyU3RhdGUubm90Y2hlZCAmJiB7XG4gIG1heFdpZHRoOiAnMTAwJScsXG4gIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnbWF4LXdpZHRoJywge1xuICAgIGR1cmF0aW9uOiAxMDAsXG4gICAgZWFzaW5nOiB0aGVtZS50cmFuc2l0aW9ucy5lYXNpbmcuZWFzZU91dCxcbiAgICBkZWxheTogNTBcbiAgfSlcbn0pKSk7XG5cbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTm90Y2hlZE91dGxpbmUocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgICAgY2xhc3NOYW1lLFxuICAgICAgbGFiZWwsXG4gICAgICBub3RjaGVkXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHdpdGhMYWJlbCA9IGxhYmVsICE9IG51bGwgJiYgbGFiZWwgIT09ICcnO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgbm90Y2hlZCxcbiAgICB3aXRoTGFiZWxcbiAgfSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChOb3RjaGVkT3V0bGluZVJvb3QsIF9leHRlbmRzKHtcbiAgICBcImFyaWEtaGlkZGVuXCI6IHRydWUsXG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZVxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChOb3RjaGVkT3V0bGluZUxlZ2VuZCwge1xuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgIGNoaWxkcmVuOiB3aXRoTGFiZWwgPyAvKiNfX1BVUkVfXyovX2pzeChcInNwYW5cIiwge1xuICAgICAgICBjaGlsZHJlbjogbGFiZWxcbiAgICAgIH0pIDogLy8gbm90cmFuc2xhdGUgbmVlZGVkIHdoaWxlIEdvb2dsZSBUcmFuc2xhdGUgd2lsbCBub3QgZml4IHplcm8td2lkdGggc3BhY2UgaXNzdWVcbiAgICAgIF9zcGFuIHx8IChfc3BhbiA9IC8qI19fUFVSRV9fKi9fanN4KFwic3BhblwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJub3RyYW5zbGF0ZVwiLFxuICAgICAgICBjaGlsZHJlbjogXCJcXHUyMDBCXCJcbiAgICAgIH0pKVxuICAgIH0pXG4gIH0pKTtcbn1cbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IE5vdGNoZWRPdXRsaW5lLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGxhYmVsLlxuICAgKi9cbiAgbGFiZWw6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgb3V0bGluZSBpcyBub3RjaGVkIHRvIGFjY29tbW9kYXRlIHRoZSBsYWJlbC5cbiAgICovXG4gIG5vdGNoZWQ6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdFxufSA6IHZvaWQgMDsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5pbXBvcnQgeyBpbnB1dEJhc2VDbGFzc2VzIH0gZnJvbSAnLi4vSW5wdXRCYXNlJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRPdXRsaW5lZElucHV0VXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlPdXRsaW5lZElucHV0Jywgc2xvdCk7XG59XG5jb25zdCBvdXRsaW5lZElucHV0Q2xhc3NlcyA9IF9leHRlbmRzKHt9LCBpbnB1dEJhc2VDbGFzc2VzLCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlPdXRsaW5lZElucHV0JywgWydyb290JywgJ25vdGNoZWRPdXRsaW5lJywgJ2lucHV0J10pKTtcbmV4cG9ydCBkZWZhdWx0IG91dGxpbmVkSW5wdXRDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNvbXBvbmVudHNcIiwgXCJmdWxsV2lkdGhcIiwgXCJpbnB1dENvbXBvbmVudFwiLCBcImxhYmVsXCIsIFwibXVsdGlsaW5lXCIsIFwibm90Y2hlZFwiLCBcInNsb3RzXCIsIFwidHlwZVwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgcmVmVHlwZSBmcm9tICdAbXVpL3V0aWxzL3JlZlR5cGUnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IE5vdGNoZWRPdXRsaW5lIGZyb20gJy4vTm90Y2hlZE91dGxpbmUnO1xuaW1wb3J0IHVzZUZvcm1Db250cm9sIGZyb20gJy4uL0Zvcm1Db250cm9sL3VzZUZvcm1Db250cm9sJztcbmltcG9ydCBmb3JtQ29udHJvbFN0YXRlIGZyb20gJy4uL0Zvcm1Db250cm9sL2Zvcm1Db250cm9sU3RhdGUnO1xuaW1wb3J0IHN0eWxlZCwgeyByb290U2hvdWxkRm9yd2FyZFByb3AgfSBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCBvdXRsaW5lZElucHV0Q2xhc3NlcywgeyBnZXRPdXRsaW5lZElucHV0VXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9vdXRsaW5lZElucHV0Q2xhc3Nlcyc7XG5pbXBvcnQgSW5wdXRCYXNlLCB7IHJvb3RPdmVycmlkZXNSZXNvbHZlciBhcyBpbnB1dEJhc2VSb290T3ZlcnJpZGVzUmVzb2x2ZXIsIGlucHV0T3ZlcnJpZGVzUmVzb2x2ZXIgYXMgaW5wdXRCYXNlSW5wdXRPdmVycmlkZXNSZXNvbHZlciwgSW5wdXRCYXNlUm9vdCwgSW5wdXRCYXNlQ29tcG9uZW50IGFzIElucHV0QmFzZUlucHV0IH0gZnJvbSAnLi4vSW5wdXRCYXNlL0lucHV0QmFzZSc7XG5pbXBvcnQgeyB1c2VEZWZhdWx0UHJvcHMgfSBmcm9tICcuLi9EZWZhdWx0UHJvcHNQcm92aWRlcic7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCddLFxuICAgIG5vdGNoZWRPdXRsaW5lOiBbJ25vdGNoZWRPdXRsaW5lJ10sXG4gICAgaW5wdXQ6IFsnaW5wdXQnXVxuICB9O1xuICBjb25zdCBjb21wb3NlZENsYXNzZXMgPSBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0T3V0bGluZWRJbnB1dFV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgY2xhc3NlcywgY29tcG9zZWRDbGFzc2VzKTtcbn07XG5jb25zdCBPdXRsaW5lZElucHV0Um9vdCA9IHN0eWxlZChJbnB1dEJhc2VSb290LCB7XG4gIHNob3VsZEZvcndhcmRQcm9wOiBwcm9wID0+IHJvb3RTaG91bGRGb3J3YXJkUHJvcChwcm9wKSB8fCBwcm9wID09PSAnY2xhc3NlcycsXG4gIG5hbWU6ICdNdWlPdXRsaW5lZElucHV0JyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogaW5wdXRCYXNlUm9vdE92ZXJyaWRlc1Jlc29sdmVyXG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4ge1xuICBjb25zdCBib3JkZXJDb2xvciA9IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JyA/ICdyZ2JhKDAsIDAsIDAsIDAuMjMpJyA6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjMpJztcbiAgcmV0dXJuIF9leHRlbmRzKHtcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICBib3JkZXJSYWRpdXM6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5zaGFwZS5ib3JkZXJSYWRpdXMsXG4gICAgW2AmOmhvdmVyIC4ke291dGxpbmVkSW5wdXRDbGFzc2VzLm5vdGNoZWRPdXRsaW5lfWBdOiB7XG4gICAgICBib3JkZXJDb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUudGV4dC5wcmltYXJ5XG4gICAgfSxcbiAgICAvLyBSZXNldCBvbiB0b3VjaCBkZXZpY2VzLCBpdCBkb2Vzbid0IGFkZCBzcGVjaWZpY2l0eVxuICAgICdAbWVkaWEgKGhvdmVyOiBub25lKSc6IHtcbiAgICAgIFtgJjpob3ZlciAuJHtvdXRsaW5lZElucHV0Q2xhc3Nlcy5ub3RjaGVkT3V0bGluZX1gXToge1xuICAgICAgICBib3JkZXJDb2xvcjogdGhlbWUudmFycyA/IGByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlLmNvbW1vbi5vbkJhY2tncm91bmRDaGFubmVsfSAvIDAuMjMpYCA6IGJvcmRlckNvbG9yXG4gICAgICB9XG4gICAgfSxcbiAgICBbYCYuJHtvdXRsaW5lZElucHV0Q2xhc3Nlcy5mb2N1c2VkfSAuJHtvdXRsaW5lZElucHV0Q2xhc3Nlcy5ub3RjaGVkT3V0bGluZX1gXToge1xuICAgICAgYm9yZGVyQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW4sXG4gICAgICBib3JkZXJXaWR0aDogMlxuICAgIH0sXG4gICAgW2AmLiR7b3V0bGluZWRJbnB1dENsYXNzZXMuZXJyb3J9IC4ke291dGxpbmVkSW5wdXRDbGFzc2VzLm5vdGNoZWRPdXRsaW5lfWBdOiB7XG4gICAgICBib3JkZXJDb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuZXJyb3IubWFpblxuICAgIH0sXG4gICAgW2AmLiR7b3V0bGluZWRJbnB1dENsYXNzZXMuZGlzYWJsZWR9IC4ke291dGxpbmVkSW5wdXRDbGFzc2VzLm5vdGNoZWRPdXRsaW5lfWBdOiB7XG4gICAgICBib3JkZXJDb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuYWN0aW9uLmRpc2FibGVkXG4gICAgfVxuICB9LCBvd25lclN0YXRlLnN0YXJ0QWRvcm5tZW50ICYmIHtcbiAgICBwYWRkaW5nTGVmdDogMTRcbiAgfSwgb3duZXJTdGF0ZS5lbmRBZG9ybm1lbnQgJiYge1xuICAgIHBhZGRpbmdSaWdodDogMTRcbiAgfSwgb3duZXJTdGF0ZS5tdWx0aWxpbmUgJiYgX2V4dGVuZHMoe1xuICAgIHBhZGRpbmc6ICcxNi41cHggMTRweCdcbiAgfSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHtcbiAgICBwYWRkaW5nOiAnOC41cHggMTRweCdcbiAgfSkpO1xufSk7XG5jb25zdCBOb3RjaGVkT3V0bGluZVJvb3QgPSBzdHlsZWQoTm90Y2hlZE91dGxpbmUsIHtcbiAgbmFtZTogJ011aU91dGxpbmVkSW5wdXQnLFxuICBzbG90OiAnTm90Y2hlZE91dGxpbmUnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5ub3RjaGVkT3V0bGluZVxufSkoKHtcbiAgdGhlbWVcbn0pID0+IHtcbiAgY29uc3QgYm9yZGVyQ29sb3IgPSB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCcgPyAncmdiYSgwLCAwLCAwLCAwLjIzKScgOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIzKSc7XG4gIHJldHVybiB7XG4gICAgYm9yZGVyQ29sb3I6IHRoZW1lLnZhcnMgPyBgcmdiYSgke3RoZW1lLnZhcnMucGFsZXR0ZS5jb21tb24ub25CYWNrZ3JvdW5kQ2hhbm5lbH0gLyAwLjIzKWAgOiBib3JkZXJDb2xvclxuICB9O1xufSk7XG5jb25zdCBPdXRsaW5lZElucHV0SW5wdXQgPSBzdHlsZWQoSW5wdXRCYXNlSW5wdXQsIHtcbiAgbmFtZTogJ011aU91dGxpbmVkSW5wdXQnLFxuICBzbG90OiAnSW5wdXQnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogaW5wdXRCYXNlSW5wdXRPdmVycmlkZXNSZXNvbHZlclxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgcGFkZGluZzogJzE2LjVweCAxNHB4J1xufSwgIXRoZW1lLnZhcnMgJiYge1xuICAnJjotd2Via2l0LWF1dG9maWxsJzoge1xuICAgIFdlYmtpdEJveFNoYWRvdzogdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnbGlnaHQnID8gbnVsbCA6ICcwIDAgMCAxMDBweCAjMjY2Nzk4IGluc2V0JyxcbiAgICBXZWJraXRUZXh0RmlsbENvbG9yOiB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCcgPyBudWxsIDogJyNmZmYnLFxuICAgIGNhcmV0Q29sb3I6IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JyA/IG51bGwgOiAnI2ZmZicsXG4gICAgYm9yZGVyUmFkaXVzOiAnaW5oZXJpdCdcbiAgfVxufSwgdGhlbWUudmFycyAmJiB7XG4gICcmOi13ZWJraXQtYXV0b2ZpbGwnOiB7XG4gICAgYm9yZGVyUmFkaXVzOiAnaW5oZXJpdCdcbiAgfSxcbiAgW3RoZW1lLmdldENvbG9yU2NoZW1lU2VsZWN0b3IoJ2RhcmsnKV06IHtcbiAgICAnJjotd2Via2l0LWF1dG9maWxsJzoge1xuICAgICAgV2Via2l0Qm94U2hhZG93OiAnMCAwIDAgMTAwcHggIzI2Njc5OCBpbnNldCcsXG4gICAgICBXZWJraXRUZXh0RmlsbENvbG9yOiAnI2ZmZicsXG4gICAgICBjYXJldENvbG9yOiAnI2ZmZidcbiAgICB9XG4gIH1cbn0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gIHBhZGRpbmc6ICc4LjVweCAxNHB4J1xufSwgb3duZXJTdGF0ZS5tdWx0aWxpbmUgJiYge1xuICBwYWRkaW5nOiAwXG59LCBvd25lclN0YXRlLnN0YXJ0QWRvcm5tZW50ICYmIHtcbiAgcGFkZGluZ0xlZnQ6IDBcbn0sIG93bmVyU3RhdGUuZW5kQWRvcm5tZW50ICYmIHtcbiAgcGFkZGluZ1JpZ2h0OiAwXG59KSk7XG5jb25zdCBPdXRsaW5lZElucHV0ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gT3V0bGluZWRJbnB1dChpblByb3BzLCByZWYpIHtcbiAgdmFyIF9yZWYsIF9zbG90cyRyb290LCBfcmVmMiwgX3Nsb3RzJGlucHV0LCBfUmVhY3QkRnJhZ21lbnQ7XG4gIGNvbnN0IHByb3BzID0gdXNlRGVmYXVsdFByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpT3V0bGluZWRJbnB1dCdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNvbXBvbmVudHMgPSB7fSxcbiAgICAgIGZ1bGxXaWR0aCA9IGZhbHNlLFxuICAgICAgaW5wdXRDb21wb25lbnQgPSAnaW5wdXQnLFxuICAgICAgbGFiZWwsXG4gICAgICBtdWx0aWxpbmUgPSBmYWxzZSxcbiAgICAgIG5vdGNoZWQsXG4gICAgICBzbG90cyA9IHt9LFxuICAgICAgdHlwZSA9ICd0ZXh0J1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMocHJvcHMpO1xuICBjb25zdCBtdWlGb3JtQ29udHJvbCA9IHVzZUZvcm1Db250cm9sKCk7XG4gIGNvbnN0IGZjcyA9IGZvcm1Db250cm9sU3RhdGUoe1xuICAgIHByb3BzLFxuICAgIG11aUZvcm1Db250cm9sLFxuICAgIHN0YXRlczogWydjb2xvcicsICdkaXNhYmxlZCcsICdlcnJvcicsICdmb2N1c2VkJywgJ2hpZGRlbkxhYmVsJywgJ3NpemUnLCAncmVxdWlyZWQnXVxuICB9KTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbG9yOiBmY3MuY29sb3IgfHwgJ3ByaW1hcnknLFxuICAgIGRpc2FibGVkOiBmY3MuZGlzYWJsZWQsXG4gICAgZXJyb3I6IGZjcy5lcnJvcixcbiAgICBmb2N1c2VkOiBmY3MuZm9jdXNlZCxcbiAgICBmb3JtQ29udHJvbDogbXVpRm9ybUNvbnRyb2wsXG4gICAgZnVsbFdpZHRoLFxuICAgIGhpZGRlbkxhYmVsOiBmY3MuaGlkZGVuTGFiZWwsXG4gICAgbXVsdGlsaW5lLFxuICAgIHNpemU6IGZjcy5zaXplLFxuICAgIHR5cGVcbiAgfSk7XG4gIGNvbnN0IFJvb3RTbG90ID0gKF9yZWYgPSAoX3Nsb3RzJHJvb3QgPSBzbG90cy5yb290KSAhPSBudWxsID8gX3Nsb3RzJHJvb3QgOiBjb21wb25lbnRzLlJvb3QpICE9IG51bGwgPyBfcmVmIDogT3V0bGluZWRJbnB1dFJvb3Q7XG4gIGNvbnN0IElucHV0U2xvdCA9IChfcmVmMiA9IChfc2xvdHMkaW5wdXQgPSBzbG90cy5pbnB1dCkgIT0gbnVsbCA/IF9zbG90cyRpbnB1dCA6IGNvbXBvbmVudHMuSW5wdXQpICE9IG51bGwgPyBfcmVmMiA6IE91dGxpbmVkSW5wdXRJbnB1dDtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KElucHV0QmFzZSwgX2V4dGVuZHMoe1xuICAgIHNsb3RzOiB7XG4gICAgICByb290OiBSb290U2xvdCxcbiAgICAgIGlucHV0OiBJbnB1dFNsb3RcbiAgICB9LFxuICAgIHJlbmRlclN1ZmZpeDogc3RhdGUgPT4gLyojX19QVVJFX18qL19qc3goTm90Y2hlZE91dGxpbmVSb290LCB7XG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLm5vdGNoZWRPdXRsaW5lLFxuICAgICAgbGFiZWw6IGxhYmVsICE9IG51bGwgJiYgbGFiZWwgIT09ICcnICYmIGZjcy5yZXF1aXJlZCA/IF9SZWFjdCRGcmFnbWVudCB8fCAoX1JlYWN0JEZyYWdtZW50ID0gLyojX19QVVJFX18qL19qc3hzKFJlYWN0LkZyYWdtZW50LCB7XG4gICAgICAgIGNoaWxkcmVuOiBbbGFiZWwsIFwiXFx1MjAwOVwiLCAnKiddXG4gICAgICB9KSkgOiBsYWJlbCxcbiAgICAgIG5vdGNoZWQ6IHR5cGVvZiBub3RjaGVkICE9PSAndW5kZWZpbmVkJyA/IG5vdGNoZWQgOiBCb29sZWFuKHN0YXRlLnN0YXJ0QWRvcm5tZW50IHx8IHN0YXRlLmZpbGxlZCB8fCBzdGF0ZS5mb2N1c2VkKVxuICAgIH0pLFxuICAgIGZ1bGxXaWR0aDogZnVsbFdpZHRoLFxuICAgIGlucHV0Q29tcG9uZW50OiBpbnB1dENvbXBvbmVudCxcbiAgICBtdWx0aWxpbmU6IG11bHRpbGluZSxcbiAgICByZWY6IHJlZixcbiAgICB0eXBlOiB0eXBlXG4gIH0sIG90aGVyLCB7XG4gICAgY2xhc3NlczogX2V4dGVuZHMoe30sIGNsYXNzZXMsIHtcbiAgICAgIG5vdGNoZWRPdXRsaW5lOiBudWxsXG4gICAgfSlcbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBPdXRsaW5lZElucHV0LnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgV2FybmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgLy8g4pSCIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4g4pSCXG4gIC8vIOKUgiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIOKUglxuICAvLyDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgLyoqXG4gICAqIFRoaXMgcHJvcCBoZWxwcyB1c2VycyB0byBmaWxsIGZvcm1zIGZhc3RlciwgZXNwZWNpYWxseSBvbiBtb2JpbGUgZGV2aWNlcy5cbiAgICogVGhlIG5hbWUgY2FuIGJlIGNvbmZ1c2luZywgYXMgaXQncyBtb3JlIGxpa2UgYW4gYXV0b2ZpbGwuXG4gICAqIFlvdSBjYW4gbGVhcm4gbW9yZSBhYm91dCBpdCBbZm9sbG93aW5nIHRoZSBzcGVjaWZpY2F0aW9uXShodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3JtLWNvbnRyb2wtaW5mcmFzdHJ1Y3R1cmUuaHRtbCNhdXRvZmlsbCkuXG4gICAqL1xuICBhdXRvQ29tcGxldGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIGVsZW1lbnQgaXMgZm9jdXNlZCBkdXJpbmcgdGhlIGZpcnN0IG1vdW50LlxuICAgKi9cbiAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBUaGUgY29sb3Igb2YgdGhlIGNvbXBvbmVudC5cbiAgICogSXQgc3VwcG9ydHMgYm90aCBkZWZhdWx0IGFuZCBjdXN0b20gdGhlbWUgY29sb3JzLCB3aGljaCBjYW4gYmUgYWRkZWQgYXMgc2hvd24gaW4gdGhlXG4gICAqIFtwYWxldHRlIGN1c3RvbWl6YXRpb24gZ3VpZGVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL3BhbGV0dGUvI2N1c3RvbS1jb2xvcnMpLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGAncHJpbWFyeSdgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ3ByaW1hcnknLCAnc2Vjb25kYXJ5J10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50cyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgc2xvdHNgIHByb3AuXG4gICAqIEl0J3MgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBgc2xvdHNgIHByb3AgaW5zdGVhZC5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGNvbXBvbmVudHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgSW5wdXQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgICBSb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZS4gVXNlIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBub3QgY29udHJvbGxlZC5cbiAgICovXG4gIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBkaXNhYmxlZC5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgZmFsc2VgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIEVuZCBgSW5wdXRBZG9ybm1lbnRgIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICovXG4gIGVuZEFkb3JubWVudDogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIHdpbGwgaW5kaWNhdGUgYW4gZXJyb3IuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYGZhbHNlYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBlcnJvcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIHdpbGwgdGFrZSB1cCB0aGUgZnVsbCB3aWR0aCBvZiBpdHMgY29udGFpbmVyLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0ICdpbnB1dCdcbiAgICovXG4gIGlucHV0Q29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBbQXR0cmlidXRlc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0I0F0dHJpYnV0ZXMpIGFwcGxpZWQgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGlucHV0UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBQYXNzIGEgcmVmIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpbnB1dFJlZjogcmVmVHlwZSxcbiAgLyoqXG4gICAqIFRoZSBsYWJlbCBvZiB0aGUgYGlucHV0YC4gSXQgaXMgb25seSB1c2VkIGZvciBsYXlvdXQuIFRoZSBhY3R1YWwgbGFiZWxsaW5nXG4gICAqIGlzIGhhbmRsZWQgYnkgYElucHV0TGFiZWxgLlxuICAgKi9cbiAgbGFiZWw6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogSWYgYGRlbnNlYCwgd2lsbCBhZGp1c3QgdmVydGljYWwgc3BhY2luZy4gVGhpcyBpcyBub3JtYWxseSBvYnRhaW5lZCB2aWEgY29udGV4dCBmcm9tXG4gICAqIEZvcm1Db250cm9sLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGAnbm9uZSdgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIG1hcmdpbjogUHJvcFR5cGVzLm9uZU9mKFsnZGVuc2UnLCAnbm9uZSddKSxcbiAgLyoqXG4gICAqIE1heGltdW0gbnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSB3aGVuIG11bHRpbGluZSBvcHRpb24gaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICBtYXhSb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBNaW5pbXVtIG51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgbWluUm93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCBhIFtUZXh0YXJlYUF1dG9zaXplXSgvbWF0ZXJpYWwtdWkvcmVhY3QtdGV4dGFyZWEtYXV0b3NpemUvKSBlbGVtZW50IGlzIHJlbmRlcmVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgbXVsdGlsaW5lOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE5hbWUgYXR0cmlidXRlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgb3V0bGluZSBpcyBub3RjaGVkIHRvIGFjY29tbW9kYXRlIHRoZSBsYWJlbC5cbiAgICovXG4gIG5vdGNoZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgdmFsdWUgaXMgY2hhbmdlZC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdC5DaGFuZ2VFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50IHwgSFRNTElucHV0RWxlbWVudD59IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKiBZb3UgY2FuIHB1bGwgb3V0IHRoZSBuZXcgdmFsdWUgYnkgYWNjZXNzaW5nIGBldmVudC50YXJnZXQudmFsdWVgIChzdHJpbmcpLlxuICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogVGhlIHNob3J0IGhpbnQgZGlzcGxheWVkIGluIHRoZSBgaW5wdXRgIGJlZm9yZSB0aGUgdXNlciBlbnRlcnMgYSB2YWx1ZS5cbiAgICovXG4gIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSXQgcHJldmVudHMgdGhlIHVzZXIgZnJvbSBjaGFuZ2luZyB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkXG4gICAqIChub3QgZnJvbSBpbnRlcmFjdGluZyB3aXRoIHRoZSBmaWVsZCkuXG4gICAqL1xuICByZWFkT25seTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIGVsZW1lbnQgaXMgcmVxdWlyZWQuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYGZhbHNlYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBOdW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIHJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBjb21wb25lbnRzYCBwcm9wLCB3aGljaCB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHNsb3RzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlucHV0OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gICAgcm9vdDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuICAvKipcbiAgICogU3RhcnQgYElucHV0QWRvcm5tZW50YCBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAqL1xuICBzdGFydEFkb3JubWVudDogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUeXBlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuIEl0IHNob3VsZCBiZSBbYSB2YWxpZCBIVE1MNSBpbnB1dCB0eXBlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjRm9ybV8lM0NpbnB1dCUzRV90eXBlcykuXG4gICAqIEBkZWZhdWx0ICd0ZXh0J1xuICAgKi9cbiAgdHlwZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LCByZXF1aXJlZCBmb3IgYSBjb250cm9sbGVkIGNvbXBvbmVudC5cbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMuYW55XG59IDogdm9pZCAwO1xuT3V0bGluZWRJbnB1dC5tdWlOYW1lID0gJ0lucHV0JztcbmV4cG9ydCBkZWZhdWx0IE91dGxpbmVkSW5wdXQ7IiwiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtTGFiZWxVdGlsaXR5Q2xhc3NlcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpRm9ybUxhYmVsJywgc2xvdCk7XG59XG5jb25zdCBmb3JtTGFiZWxDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpRm9ybUxhYmVsJywgWydyb290JywgJ2NvbG9yU2Vjb25kYXJ5JywgJ2ZvY3VzZWQnLCAnZGlzYWJsZWQnLCAnZXJyb3InLCAnZmlsbGVkJywgJ3JlcXVpcmVkJywgJ2FzdGVyaXNrJ10pO1xuZXhwb3J0IGRlZmF1bHQgZm9ybUxhYmVsQ2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbG9yXCIsIFwiY29tcG9uZW50XCIsIFwiZGlzYWJsZWRcIiwgXCJlcnJvclwiLCBcImZpbGxlZFwiLCBcImZvY3VzZWRcIiwgXCJyZXF1aXJlZFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCBmb3JtQ29udHJvbFN0YXRlIGZyb20gJy4uL0Zvcm1Db250cm9sL2Zvcm1Db250cm9sU3RhdGUnO1xuaW1wb3J0IHVzZUZvcm1Db250cm9sIGZyb20gJy4uL0Zvcm1Db250cm9sL3VzZUZvcm1Db250cm9sJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IHsgdXNlRGVmYXVsdFByb3BzIH0gZnJvbSAnLi4vRGVmYXVsdFByb3BzUHJvdmlkZXInO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCBmb3JtTGFiZWxDbGFzc2VzLCB7IGdldEZvcm1MYWJlbFV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnLi9mb3JtTGFiZWxDbGFzc2VzJztcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIGNvbG9yLFxuICAgIGZvY3VzZWQsXG4gICAgZGlzYWJsZWQsXG4gICAgZXJyb3IsXG4gICAgZmlsbGVkLFxuICAgIHJlcXVpcmVkXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBgY29sb3Ike2NhcGl0YWxpemUoY29sb3IpfWAsIGRpc2FibGVkICYmICdkaXNhYmxlZCcsIGVycm9yICYmICdlcnJvcicsIGZpbGxlZCAmJiAnZmlsbGVkJywgZm9jdXNlZCAmJiAnZm9jdXNlZCcsIHJlcXVpcmVkICYmICdyZXF1aXJlZCddLFxuICAgIGFzdGVyaXNrOiBbJ2FzdGVyaXNrJywgZXJyb3IgJiYgJ2Vycm9yJ11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRGb3JtTGFiZWxVdGlsaXR5Q2xhc3NlcywgY2xhc3Nlcyk7XG59O1xuZXhwb3J0IGNvbnN0IEZvcm1MYWJlbFJvb3QgPSBzdHlsZWQoJ2xhYmVsJywge1xuICBuYW1lOiAnTXVpRm9ybUxhYmVsJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHtcbiAgICBvd25lclN0YXRlXG4gIH0sIHN0eWxlcykgPT4ge1xuICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3R5bGVzLnJvb3QsIG93bmVyU3RhdGUuY29sb3IgPT09ICdzZWNvbmRhcnknICYmIHN0eWxlcy5jb2xvclNlY29uZGFyeSwgb3duZXJTdGF0ZS5maWxsZWQgJiYgc3R5bGVzLmZpbGxlZCk7XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS50ZXh0LnNlY29uZGFyeVxufSwgdGhlbWUudHlwb2dyYXBoeS5ib2R5MSwge1xuICBsaW5lSGVpZ2h0OiAnMS40Mzc1ZW0nLFxuICBwYWRkaW5nOiAwLFxuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgW2AmLiR7Zm9ybUxhYmVsQ2xhc3Nlcy5mb2N1c2VkfWBdOiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW5cbiAgfSxcbiAgW2AmLiR7Zm9ybUxhYmVsQ2xhc3Nlcy5kaXNhYmxlZH1gXToge1xuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS50ZXh0LmRpc2FibGVkXG4gIH0sXG4gIFtgJi4ke2Zvcm1MYWJlbENsYXNzZXMuZXJyb3J9YF06IHtcbiAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuZXJyb3IubWFpblxuICB9XG59KSk7XG5jb25zdCBBc3Rlcmlza0NvbXBvbmVudCA9IHN0eWxlZCgnc3BhbicsIHtcbiAgbmFtZTogJ011aUZvcm1MYWJlbCcsXG4gIHNsb3Q6ICdBc3RlcmlzaycsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLmFzdGVyaXNrXG59KSgoe1xuICB0aGVtZVxufSkgPT4gKHtcbiAgW2AmLiR7Zm9ybUxhYmVsQ2xhc3Nlcy5lcnJvcn1gXToge1xuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5lcnJvci5tYWluXG4gIH1cbn0pKTtcbmNvbnN0IEZvcm1MYWJlbCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIEZvcm1MYWJlbChpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VEZWZhdWx0UHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlGb3JtTGFiZWwnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBjaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbXBvbmVudCA9ICdsYWJlbCdcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgbXVpRm9ybUNvbnRyb2wgPSB1c2VGb3JtQ29udHJvbCgpO1xuICBjb25zdCBmY3MgPSBmb3JtQ29udHJvbFN0YXRlKHtcbiAgICBwcm9wcyxcbiAgICBtdWlGb3JtQ29udHJvbCxcbiAgICBzdGF0ZXM6IFsnY29sb3InLCAncmVxdWlyZWQnLCAnZm9jdXNlZCcsICdkaXNhYmxlZCcsICdlcnJvcicsICdmaWxsZWQnXVxuICB9KTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbG9yOiBmY3MuY29sb3IgfHwgJ3ByaW1hcnknLFxuICAgIGNvbXBvbmVudCxcbiAgICBkaXNhYmxlZDogZmNzLmRpc2FibGVkLFxuICAgIGVycm9yOiBmY3MuZXJyb3IsXG4gICAgZmlsbGVkOiBmY3MuZmlsbGVkLFxuICAgIGZvY3VzZWQ6IGZjcy5mb2N1c2VkLFxuICAgIHJlcXVpcmVkOiBmY3MucmVxdWlyZWRcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4cyhGb3JtTGFiZWxSb290LCBfZXh0ZW5kcyh7XG4gICAgYXM6IGNvbXBvbmVudCxcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgcmVmOiByZWZcbiAgfSwgb3RoZXIsIHtcbiAgICBjaGlsZHJlbjogW2NoaWxkcmVuLCBmY3MucmVxdWlyZWQgJiYgLyojX19QVVJFX18qL19qc3hzKEFzdGVyaXNrQ29tcG9uZW50LCB7XG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgICAgXCJhcmlhLWhpZGRlblwiOiB0cnVlLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLmFzdGVyaXNrLFxuICAgICAgY2hpbGRyZW46IFtcIlxcdTIwMDlcIiwgJyonXVxuICAgIH0pXVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEZvcm1MYWJlbC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFdhcm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIOKUglxuICAvLyDilIIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICDilIJcbiAgLy8g4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJdCBzdXBwb3J0cyBib3RoIGRlZmF1bHQgYW5kIGN1c3RvbSB0aGVtZSBjb2xvcnMsIHdoaWNoIGNhbiBiZSBhZGRlZCBhcyBzaG93biBpbiB0aGVcbiAgICogW3BhbGV0dGUgY3VzdG9taXphdGlvbiBndWlkZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vcGFsZXR0ZS8jY3VzdG9tLWNvbG9ycykuXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydlcnJvcicsICdpbmZvJywgJ3ByaW1hcnknLCAnc2Vjb25kYXJ5JywgJ3N1Y2Nlc3MnLCAnd2FybmluZyddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCBzaG91bGQgYmUgZGlzcGxheWVkIGluIGEgZGlzYWJsZWQgc3RhdGUuXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCBpcyBkaXNwbGF5ZWQgaW4gYW4gZXJyb3Igc3RhdGUuXG4gICAqL1xuICBlcnJvcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCBzaG91bGQgdXNlIGZpbGxlZCBjbGFzc2VzIGtleS5cbiAgICovXG4gIGZpbGxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBpbnB1dCBvZiB0aGlzIGxhYmVsIGlzIGZvY3VzZWQgKHVzZWQgYnkgYEZvcm1Hcm91cGAgY29tcG9uZW50cykuXG4gICAqL1xuICBmb2N1c2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIHdpbGwgaW5kaWNhdGUgdGhhdCB0aGUgYGlucHV0YCBpcyByZXF1aXJlZC5cbiAgICovXG4gIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IEZvcm1MYWJlbDsiLCJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldElucHV0TGFiZWxVdGlsaXR5Q2xhc3NlcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpSW5wdXRMYWJlbCcsIHNsb3QpO1xufVxuY29uc3QgaW5wdXRMYWJlbENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlJbnB1dExhYmVsJywgWydyb290JywgJ2ZvY3VzZWQnLCAnZGlzYWJsZWQnLCAnZXJyb3InLCAncmVxdWlyZWQnLCAnYXN0ZXJpc2snLCAnZm9ybUNvbnRyb2wnLCAnc2l6ZVNtYWxsJywgJ3NocmluaycsICdhbmltYXRlZCcsICdzdGFuZGFyZCcsICdmaWxsZWQnLCAnb3V0bGluZWQnXSk7XG5leHBvcnQgZGVmYXVsdCBpbnB1dExhYmVsQ2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJkaXNhYmxlQW5pbWF0aW9uXCIsIFwibWFyZ2luXCIsIFwic2hyaW5rXCIsIFwidmFyaWFudFwiLCBcImNsYXNzTmFtZVwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCBmb3JtQ29udHJvbFN0YXRlIGZyb20gJy4uL0Zvcm1Db250cm9sL2Zvcm1Db250cm9sU3RhdGUnO1xuaW1wb3J0IHVzZUZvcm1Db250cm9sIGZyb20gJy4uL0Zvcm1Db250cm9sL3VzZUZvcm1Db250cm9sJztcbmltcG9ydCBGb3JtTGFiZWwsIHsgZm9ybUxhYmVsQ2xhc3NlcyB9IGZyb20gJy4uL0Zvcm1MYWJlbCc7XG5pbXBvcnQgeyB1c2VEZWZhdWx0UHJvcHMgfSBmcm9tICcuLi9EZWZhdWx0UHJvcHNQcm92aWRlcic7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyBnZXRJbnB1dExhYmVsVXRpbGl0eUNsYXNzZXMgfSBmcm9tICcuL2lucHV0TGFiZWxDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBmb3JtQ29udHJvbCxcbiAgICBzaXplLFxuICAgIHNocmluayxcbiAgICBkaXNhYmxlQW5pbWF0aW9uLFxuICAgIHZhcmlhbnQsXG4gICAgcmVxdWlyZWRcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIGZvcm1Db250cm9sICYmICdmb3JtQ29udHJvbCcsICFkaXNhYmxlQW5pbWF0aW9uICYmICdhbmltYXRlZCcsIHNocmluayAmJiAnc2hyaW5rJywgc2l6ZSAmJiBzaXplICE9PSAnbm9ybWFsJyAmJiBgc2l6ZSR7Y2FwaXRhbGl6ZShzaXplKX1gLCB2YXJpYW50XSxcbiAgICBhc3RlcmlzazogW3JlcXVpcmVkICYmICdhc3RlcmlzayddXG4gIH07XG4gIGNvbnN0IGNvbXBvc2VkQ2xhc3NlcyA9IGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRJbnB1dExhYmVsVXRpbGl0eUNsYXNzZXMsIGNsYXNzZXMpO1xuICByZXR1cm4gX2V4dGVuZHMoe30sIGNsYXNzZXMsIGNvbXBvc2VkQ2xhc3Nlcyk7XG59O1xuY29uc3QgSW5wdXRMYWJlbFJvb3QgPSBzdHlsZWQoRm9ybUxhYmVsLCB7XG4gIHNob3VsZEZvcndhcmRQcm9wOiBwcm9wID0+IHJvb3RTaG91bGRGb3J3YXJkUHJvcChwcm9wKSB8fCBwcm9wID09PSAnY2xhc3NlcycsXG4gIG5hbWU6ICdNdWlJbnB1dExhYmVsJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbe1xuICAgICAgW2AmIC4ke2Zvcm1MYWJlbENsYXNzZXMuYXN0ZXJpc2t9YF06IHN0eWxlcy5hc3Rlcmlza1xuICAgIH0sIHN0eWxlcy5yb290LCBvd25lclN0YXRlLmZvcm1Db250cm9sICYmIHN0eWxlcy5mb3JtQ29udHJvbCwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHN0eWxlcy5zaXplU21hbGwsIG93bmVyU3RhdGUuc2hyaW5rICYmIHN0eWxlcy5zaHJpbmssICFvd25lclN0YXRlLmRpc2FibGVBbmltYXRpb24gJiYgc3R5bGVzLmFuaW1hdGVkLCBvd25lclN0YXRlLmZvY3VzZWQgJiYgc3R5bGVzLmZvY3VzZWQsIHN0eWxlc1tvd25lclN0YXRlLnZhcmlhbnRdXTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgZGlzcGxheTogJ2Jsb2NrJyxcbiAgdHJhbnNmb3JtT3JpZ2luOiAndG9wIGxlZnQnLFxuICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcbiAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICB0ZXh0T3ZlcmZsb3c6ICdlbGxpcHNpcycsXG4gIG1heFdpZHRoOiAnMTAwJSdcbn0sIG93bmVyU3RhdGUuZm9ybUNvbnRyb2wgJiYge1xuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgbGVmdDogMCxcbiAgdG9wOiAwLFxuICAvLyBzbGlnaHQgYWx0ZXJhdGlvbiB0byBzcGVjIHNwYWNpbmcgdG8gbWF0Y2ggdmlzdWFsIHNwZWMgcmVzdWx0XG4gIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgwLCAyMHB4KSBzY2FsZSgxKSdcbn0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gIC8vIENvbXBlbnNhdGlvbiBmb3IgdGhlIGBJbnB1dC5pbnB1dFNpemVTbWFsbGAgc3R5bGUuXG4gIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgwLCAxN3B4KSBzY2FsZSgxKSdcbn0sIG93bmVyU3RhdGUuc2hyaW5rICYmIHtcbiAgdHJhbnNmb3JtOiAndHJhbnNsYXRlKDAsIC0xLjVweCkgc2NhbGUoMC43NSknLFxuICB0cmFuc2Zvcm1PcmlnaW46ICd0b3AgbGVmdCcsXG4gIG1heFdpZHRoOiAnMTMzJSdcbn0sICFvd25lclN0YXRlLmRpc2FibGVBbmltYXRpb24gJiYge1xuICB0cmFuc2l0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoWydjb2xvcicsICd0cmFuc2Zvcm0nLCAnbWF4LXdpZHRoJ10sIHtcbiAgICBkdXJhdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRlcixcbiAgICBlYXNpbmc6IHRoZW1lLnRyYW5zaXRpb25zLmVhc2luZy5lYXNlT3V0XG4gIH0pXG59LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdmaWxsZWQnICYmIF9leHRlbmRzKHtcbiAgLy8gQ2hyb21lJ3MgYXV0b2ZpbGwgZmVhdHVyZSBnaXZlcyB0aGUgaW5wdXQgZmllbGQgYSB5ZWxsb3cgYmFja2dyb3VuZC5cbiAgLy8gU2luY2UgdGhlIGlucHV0IGZpZWxkIGlzIGJlaGluZCB0aGUgbGFiZWwgaW4gdGhlIEhUTUwgdHJlZSxcbiAgLy8gdGhlIGlucHV0IGZpZWxkIGlzIGRyYXduIGxhc3QgYW5kIGhpZGVzIHRoZSBsYWJlbCB3aXRoIGFuIG9wYXF1ZSBiYWNrZ3JvdW5kIGNvbG9yLlxuICAvLyB6SW5kZXg6IDEgd2lsbCByYWlzZSB0aGUgbGFiZWwgYWJvdmUgb3BhcXVlIGJhY2tncm91bmQtY29sb3JzIG9mIGlucHV0LlxuICB6SW5kZXg6IDEsXG4gIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgdHJhbnNmb3JtOiAndHJhbnNsYXRlKDEycHgsIDE2cHgpIHNjYWxlKDEpJyxcbiAgbWF4V2lkdGg6ICdjYWxjKDEwMCUgLSAyNHB4KSdcbn0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgxMnB4LCAxM3B4KSBzY2FsZSgxKSdcbn0sIG93bmVyU3RhdGUuc2hyaW5rICYmIF9leHRlbmRzKHtcbiAgdXNlclNlbGVjdDogJ25vbmUnLFxuICBwb2ludGVyRXZlbnRzOiAnYXV0bycsXG4gIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgxMnB4LCA3cHgpIHNjYWxlKDAuNzUpJyxcbiAgbWF4V2lkdGg6ICdjYWxjKDEzMyUgLSAyNHB4KSdcbn0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgxMnB4LCA0cHgpIHNjYWxlKDAuNzUpJ1xufSkpLCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdvdXRsaW5lZCcgJiYgX2V4dGVuZHMoe1xuICAvLyBzZWUgY29tbWVudCBhYm92ZSBvbiBmaWxsZWQuekluZGV4XG4gIHpJbmRleDogMSxcbiAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoMTRweCwgMTZweCkgc2NhbGUoMSknLFxuICBtYXhXaWR0aDogJ2NhbGMoMTAwJSAtIDI0cHgpJ1xufSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHtcbiAgdHJhbnNmb3JtOiAndHJhbnNsYXRlKDE0cHgsIDlweCkgc2NhbGUoMSknXG59LCBvd25lclN0YXRlLnNocmluayAmJiB7XG4gIHVzZXJTZWxlY3Q6ICdub25lJyxcbiAgcG9pbnRlckV2ZW50czogJ2F1dG8nLFxuICAvLyBUaGVvcmV0aWNhbGx5LCB3ZSBzaG91bGQgaGF2ZSAoOCs1KSoyLzAuNzUgPSAzNHB4XG4gIC8vIGJ1dCBpdCBmZWVscyBhIGJldHRlciB3aGVuIGl0IGJsZWVkcyBhIGJpdCBvbiB0aGUgbGVmdCwgc28gMzJweC5cbiAgbWF4V2lkdGg6ICdjYWxjKDEzMyUgLSAzMnB4KScsXG4gIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgxNHB4LCAtOXB4KSBzY2FsZSgwLjc1KSdcbn0pKSk7XG5jb25zdCBJbnB1dExhYmVsID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gSW5wdXRMYWJlbChpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VEZWZhdWx0UHJvcHMoe1xuICAgIG5hbWU6ICdNdWlJbnB1dExhYmVsJyxcbiAgICBwcm9wczogaW5Qcm9wc1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgZGlzYWJsZUFuaW1hdGlvbiA9IGZhbHNlLFxuICAgICAgc2hyaW5rOiBzaHJpbmtQcm9wLFxuICAgICAgY2xhc3NOYW1lXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG11aUZvcm1Db250cm9sID0gdXNlRm9ybUNvbnRyb2woKTtcbiAgbGV0IHNocmluayA9IHNocmlua1Byb3A7XG4gIGlmICh0eXBlb2Ygc2hyaW5rID09PSAndW5kZWZpbmVkJyAmJiBtdWlGb3JtQ29udHJvbCkge1xuICAgIHNocmluayA9IG11aUZvcm1Db250cm9sLmZpbGxlZCB8fCBtdWlGb3JtQ29udHJvbC5mb2N1c2VkIHx8IG11aUZvcm1Db250cm9sLmFkb3JuZWRTdGFydDtcbiAgfVxuICBjb25zdCBmY3MgPSBmb3JtQ29udHJvbFN0YXRlKHtcbiAgICBwcm9wcyxcbiAgICBtdWlGb3JtQ29udHJvbCxcbiAgICBzdGF0ZXM6IFsnc2l6ZScsICd2YXJpYW50JywgJ3JlcXVpcmVkJywgJ2ZvY3VzZWQnXVxuICB9KTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGRpc2FibGVBbmltYXRpb24sXG4gICAgZm9ybUNvbnRyb2w6IG11aUZvcm1Db250cm9sLFxuICAgIHNocmluayxcbiAgICBzaXplOiBmY3Muc2l6ZSxcbiAgICB2YXJpYW50OiBmY3MudmFyaWFudCxcbiAgICByZXF1aXJlZDogZmNzLnJlcXVpcmVkLFxuICAgIGZvY3VzZWQ6IGZjcy5mb2N1c2VkXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChJbnB1dExhYmVsUm9vdCwgX2V4dGVuZHMoe1xuICAgIFwiZGF0YS1zaHJpbmtcIjogc2hyaW5rLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgcmVmOiByZWYsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKVxuICB9LCBvdGhlciwge1xuICAgIGNsYXNzZXM6IGNsYXNzZXNcbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBJbnB1dExhYmVsLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgV2FybmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgLy8g4pSCIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4g4pSCXG4gIC8vIOKUgiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIOKUglxuICAvLyDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2Vycm9yJywgJ2luZm8nLCAncHJpbWFyeScsICdzZWNvbmRhcnknLCAnc3VjY2VzcycsICd3YXJuaW5nJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSB0cmFuc2l0aW9uIGFuaW1hdGlvbiBpcyBkaXNhYmxlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVBbmltYXRpb246IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwgaXMgZGlzcGxheWVkIGluIGFuIGVycm9yIHN0YXRlLlxuICAgKi9cbiAgZXJyb3I6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBvZiB0aGlzIGxhYmVsIGlzIGZvY3VzZWQuXG4gICAqL1xuICBmb2N1c2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGBkZW5zZWAsIHdpbGwgYWRqdXN0IHZlcnRpY2FsIHNwYWNpbmcuIFRoaXMgaXMgbm9ybWFsbHkgb2J0YWluZWQgdmlhIGNvbnRleHQgZnJvbVxuICAgKiBGb3JtQ29udHJvbC5cbiAgICovXG4gIG1hcmdpbjogUHJvcFR5cGVzLm9uZU9mKFsnZGVuc2UnXSksXG4gIC8qKlxuICAgKiBpZiBgdHJ1ZWAsIHRoZSBsYWJlbCB3aWxsIGluZGljYXRlIHRoYXQgdGhlIGBpbnB1dGAgaXMgcmVxdWlyZWQuXG4gICAqL1xuICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCBpcyBzaHJ1bmsuXG4gICAqL1xuICBzaHJpbms6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgJ25vcm1hbCdcbiAgICovXG4gIHNpemU6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnbm9ybWFsJywgJ3NtYWxsJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXMub25lT2YoWydmaWxsZWQnLCAnb3V0bGluZWQnLCAnc3RhbmRhcmQnXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBJbnB1dExhYmVsOyIsImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybUNvbnRyb2xVdGlsaXR5Q2xhc3NlcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpRm9ybUNvbnRyb2wnLCBzbG90KTtcbn1cbmNvbnN0IGZvcm1Db250cm9sQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUZvcm1Db250cm9sJywgWydyb290JywgJ21hcmdpbk5vbmUnLCAnbWFyZ2luTm9ybWFsJywgJ21hcmdpbkRlbnNlJywgJ2Z1bGxXaWR0aCcsICdkaXNhYmxlZCddKTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1Db250cm9sQ2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbG9yXCIsIFwiY29tcG9uZW50XCIsIFwiZGlzYWJsZWRcIiwgXCJlcnJvclwiLCBcImZvY3VzZWRcIiwgXCJmdWxsV2lkdGhcIiwgXCJoaWRkZW5MYWJlbFwiLCBcIm1hcmdpblwiLCBcInJlcXVpcmVkXCIsIFwic2l6ZVwiLCBcInZhcmlhbnRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgeyB1c2VEZWZhdWx0UHJvcHMgfSBmcm9tICcuLi9EZWZhdWx0UHJvcHNQcm92aWRlcic7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsgaXNGaWxsZWQsIGlzQWRvcm5lZFN0YXJ0IH0gZnJvbSAnLi4vSW5wdXRCYXNlL3V0aWxzJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IGlzTXVpRWxlbWVudCBmcm9tICcuLi91dGlscy9pc011aUVsZW1lbnQnO1xuaW1wb3J0IEZvcm1Db250cm9sQ29udGV4dCBmcm9tICcuL0Zvcm1Db250cm9sQ29udGV4dCc7XG5pbXBvcnQgeyBnZXRGb3JtQ29udHJvbFV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnLi9mb3JtQ29udHJvbENsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIG1hcmdpbixcbiAgICBmdWxsV2lkdGhcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIG1hcmdpbiAhPT0gJ25vbmUnICYmIGBtYXJnaW4ke2NhcGl0YWxpemUobWFyZ2luKX1gLCBmdWxsV2lkdGggJiYgJ2Z1bGxXaWR0aCddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0Rm9ybUNvbnRyb2xVdGlsaXR5Q2xhc3NlcywgY2xhc3Nlcyk7XG59O1xuY29uc3QgRm9ybUNvbnRyb2xSb290ID0gc3R5bGVkKCdkaXYnLCB7XG4gIG5hbWU6ICdNdWlGb3JtQ29udHJvbCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6ICh7XG4gICAgb3duZXJTdGF0ZVxuICB9LCBzdHlsZXMpID0+IHtcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0eWxlcy5yb290LCBzdHlsZXNbYG1hcmdpbiR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLm1hcmdpbil9YF0sIG93bmVyU3RhdGUuZnVsbFdpZHRoICYmIHN0eWxlcy5mdWxsV2lkdGgpO1xuICB9XG59KSgoe1xuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXG4gIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgLy8gUmVzZXQgZmllbGRzZXQgZGVmYXVsdCBzdHlsZS5cbiAgbWluV2lkdGg6IDAsXG4gIHBhZGRpbmc6IDAsXG4gIG1hcmdpbjogMCxcbiAgYm9yZGVyOiAwLFxuICB2ZXJ0aWNhbEFsaWduOiAndG9wJ1xufSwgb3duZXJTdGF0ZS5tYXJnaW4gPT09ICdub3JtYWwnICYmIHtcbiAgbWFyZ2luVG9wOiAxNixcbiAgbWFyZ2luQm90dG9tOiA4XG59LCBvd25lclN0YXRlLm1hcmdpbiA9PT0gJ2RlbnNlJyAmJiB7XG4gIG1hcmdpblRvcDogOCxcbiAgbWFyZ2luQm90dG9tOiA0XG59LCBvd25lclN0YXRlLmZ1bGxXaWR0aCAmJiB7XG4gIHdpZHRoOiAnMTAwJSdcbn0pKTtcblxuLyoqXG4gKiBQcm92aWRlcyBjb250ZXh0IHN1Y2ggYXMgZmlsbGVkL2ZvY3VzZWQvZXJyb3IvcmVxdWlyZWQgZm9yIGZvcm0gaW5wdXRzLlxuICogUmVseWluZyBvbiB0aGUgY29udGV4dCBwcm92aWRlcyBoaWdoIGZsZXhpYmlsaXR5IGFuZCBlbnN1cmVzIHRoYXQgdGhlIHN0YXRlIGFsd2F5cyBzdGF5c1xuICogY29uc2lzdGVudCBhY3Jvc3MgdGhlIGNoaWxkcmVuIG9mIHRoZSBgRm9ybUNvbnRyb2xgLlxuICogVGhpcyBjb250ZXh0IGlzIHVzZWQgYnkgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOlxuICpcbiAqICAtIEZvcm1MYWJlbFxuICogIC0gRm9ybUhlbHBlclRleHRcbiAqICAtIElucHV0XG4gKiAgLSBJbnB1dExhYmVsXG4gKlxuICogWW91IGNhbiBmaW5kIG9uZSBjb21wb3NpdGlvbiBleGFtcGxlIGJlbG93IGFuZCBtb3JlIGdvaW5nIHRvIFt0aGUgZGVtb3NdKC9tYXRlcmlhbC11aS9yZWFjdC10ZXh0LWZpZWxkLyNjb21wb25lbnRzKS5cbiAqXG4gKiBgYGBqc3hcbiAqIDxGb3JtQ29udHJvbD5cbiAqICAgPElucHV0TGFiZWwgaHRtbEZvcj1cIm15LWlucHV0XCI+RW1haWwgYWRkcmVzczwvSW5wdXRMYWJlbD5cbiAqICAgPElucHV0IGlkPVwibXktaW5wdXRcIiBhcmlhLWRlc2NyaWJlZGJ5PVwibXktaGVscGVyLXRleHRcIiAvPlxuICogICA8Rm9ybUhlbHBlclRleHQgaWQ9XCJteS1oZWxwZXItdGV4dFwiPldlJ2xsIG5ldmVyIHNoYXJlIHlvdXIgZW1haWwuPC9Gb3JtSGVscGVyVGV4dD5cbiAqIDwvRm9ybUNvbnRyb2w+XG4gKiBgYGBcbiAqXG4gKiDimqDvuI8gT25seSBvbmUgYElucHV0QmFzZWAgY2FuIGJlIHVzZWQgd2l0aGluIGEgRm9ybUNvbnRyb2wgYmVjYXVzZSBpdCBjcmVhdGVzIHZpc3VhbCBpbmNvbnNpc3RlbmNpZXMuXG4gKiBGb3IgaW5zdGFuY2UsIG9ubHkgb25lIGlucHV0IGNhbiBiZSBmb2N1c2VkIGF0IHRoZSBzYW1lIHRpbWUsIHRoZSBzdGF0ZSBzaG91bGRuJ3QgYmUgc2hhcmVkLlxuICovXG5jb25zdCBGb3JtQ29udHJvbCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIEZvcm1Db250cm9sKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZURlZmF1bHRQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUZvcm1Db250cm9sJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb2xvciA9ICdwcmltYXJ5JyxcbiAgICAgIGNvbXBvbmVudCA9ICdkaXYnLFxuICAgICAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgICAgIGVycm9yID0gZmFsc2UsXG4gICAgICBmb2N1c2VkOiB2aXN1YWxseUZvY3VzZWQsXG4gICAgICBmdWxsV2lkdGggPSBmYWxzZSxcbiAgICAgIGhpZGRlbkxhYmVsID0gZmFsc2UsXG4gICAgICBtYXJnaW4gPSAnbm9uZScsXG4gICAgICByZXF1aXJlZCA9IGZhbHNlLFxuICAgICAgc2l6ZSA9ICdtZWRpdW0nLFxuICAgICAgdmFyaWFudCA9ICdvdXRsaW5lZCdcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbG9yLFxuICAgIGNvbXBvbmVudCxcbiAgICBkaXNhYmxlZCxcbiAgICBlcnJvcixcbiAgICBmdWxsV2lkdGgsXG4gICAgaGlkZGVuTGFiZWwsXG4gICAgbWFyZ2luLFxuICAgIHJlcXVpcmVkLFxuICAgIHNpemUsXG4gICAgdmFyaWFudFxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICBjb25zdCBbYWRvcm5lZFN0YXJ0LCBzZXRBZG9ybmVkU3RhcnRdID0gUmVhY3QudXNlU3RhdGUoKCkgPT4ge1xuICAgIC8vIFdlIG5lZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBjaGlsZHJlbiBhbmQgZmluZCB0aGUgSW5wdXQgaW4gb3JkZXJcbiAgICAvLyB0byBmdWxseSBzdXBwb3J0IHNlcnZlci1zaWRlIHJlbmRlcmluZy5cbiAgICBsZXQgaW5pdGlhbEFkb3JuZWRTdGFydCA9IGZhbHNlO1xuICAgIGlmIChjaGlsZHJlbikge1xuICAgICAgUmVhY3QuQ2hpbGRyZW4uZm9yRWFjaChjaGlsZHJlbiwgY2hpbGQgPT4ge1xuICAgICAgICBpZiAoIWlzTXVpRWxlbWVudChjaGlsZCwgWydJbnB1dCcsICdTZWxlY3QnXSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5wdXQgPSBpc011aUVsZW1lbnQoY2hpbGQsIFsnU2VsZWN0J10pID8gY2hpbGQucHJvcHMuaW5wdXQgOiBjaGlsZDtcbiAgICAgICAgaWYgKGlucHV0ICYmIGlzQWRvcm5lZFN0YXJ0KGlucHV0LnByb3BzKSkge1xuICAgICAgICAgIGluaXRpYWxBZG9ybmVkU3RhcnQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGluaXRpYWxBZG9ybmVkU3RhcnQ7XG4gIH0pO1xuICBjb25zdCBbZmlsbGVkLCBzZXRGaWxsZWRdID0gUmVhY3QudXNlU3RhdGUoKCkgPT4ge1xuICAgIC8vIFdlIG5lZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBjaGlsZHJlbiBhbmQgZmluZCB0aGUgSW5wdXQgaW4gb3JkZXJcbiAgICAvLyB0byBmdWxseSBzdXBwb3J0IHNlcnZlci1zaWRlIHJlbmRlcmluZy5cbiAgICBsZXQgaW5pdGlhbEZpbGxlZCA9IGZhbHNlO1xuICAgIGlmIChjaGlsZHJlbikge1xuICAgICAgUmVhY3QuQ2hpbGRyZW4uZm9yRWFjaChjaGlsZHJlbiwgY2hpbGQgPT4ge1xuICAgICAgICBpZiAoIWlzTXVpRWxlbWVudChjaGlsZCwgWydJbnB1dCcsICdTZWxlY3QnXSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRmlsbGVkKGNoaWxkLnByb3BzLCB0cnVlKSB8fCBpc0ZpbGxlZChjaGlsZC5wcm9wcy5pbnB1dFByb3BzLCB0cnVlKSkge1xuICAgICAgICAgIGluaXRpYWxGaWxsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGluaXRpYWxGaWxsZWQ7XG4gIH0pO1xuICBjb25zdCBbZm9jdXNlZFN0YXRlLCBzZXRGb2N1c2VkXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgaWYgKGRpc2FibGVkICYmIGZvY3VzZWRTdGF0ZSkge1xuICAgIHNldEZvY3VzZWQoZmFsc2UpO1xuICB9XG4gIGNvbnN0IGZvY3VzZWQgPSB2aXN1YWxseUZvY3VzZWQgIT09IHVuZGVmaW5lZCAmJiAhZGlzYWJsZWQgPyB2aXN1YWxseUZvY3VzZWQgOiBmb2N1c2VkU3RhdGU7XG4gIGxldCByZWdpc3RlckVmZmVjdDtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3NcbiAgICBjb25zdCByZWdpc3RlcmVkSW5wdXQgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICAgIHJlZ2lzdGVyRWZmZWN0ID0gKCkgPT4ge1xuICAgICAgaWYgKHJlZ2lzdGVyZWRJbnB1dC5jdXJyZW50KSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoWydNVUk6IFRoZXJlIGFyZSBtdWx0aXBsZSBgSW5wdXRCYXNlYCBjb21wb25lbnRzIGluc2lkZSBhIEZvcm1Db250cm9sLicsICdUaGlzIGNyZWF0ZXMgdmlzdWFsIGluY29uc2lzdGVuY2llcywgb25seSB1c2Ugb25lIGBJbnB1dEJhc2VgLiddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICAgIHJlZ2lzdGVyZWRJbnB1dC5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHJlZ2lzdGVyZWRJbnB1dC5jdXJyZW50ID0gZmFsc2U7XG4gICAgICB9O1xuICAgIH07XG4gIH1cbiAgY29uc3QgY2hpbGRDb250ZXh0ID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFkb3JuZWRTdGFydCxcbiAgICAgIHNldEFkb3JuZWRTdGFydCxcbiAgICAgIGNvbG9yLFxuICAgICAgZGlzYWJsZWQsXG4gICAgICBlcnJvcixcbiAgICAgIGZpbGxlZCxcbiAgICAgIGZvY3VzZWQsXG4gICAgICBmdWxsV2lkdGgsXG4gICAgICBoaWRkZW5MYWJlbCxcbiAgICAgIHNpemUsXG4gICAgICBvbkJsdXI6ICgpID0+IHtcbiAgICAgICAgc2V0Rm9jdXNlZChmYWxzZSk7XG4gICAgICB9LFxuICAgICAgb25FbXB0eTogKCkgPT4ge1xuICAgICAgICBzZXRGaWxsZWQoZmFsc2UpO1xuICAgICAgfSxcbiAgICAgIG9uRmlsbGVkOiAoKSA9PiB7XG4gICAgICAgIHNldEZpbGxlZCh0cnVlKTtcbiAgICAgIH0sXG4gICAgICBvbkZvY3VzOiAoKSA9PiB7XG4gICAgICAgIHNldEZvY3VzZWQodHJ1ZSk7XG4gICAgICB9LFxuICAgICAgcmVnaXN0ZXJFZmZlY3QsXG4gICAgICByZXF1aXJlZCxcbiAgICAgIHZhcmlhbnRcbiAgICB9O1xuICB9LCBbYWRvcm5lZFN0YXJ0LCBjb2xvciwgZGlzYWJsZWQsIGVycm9yLCBmaWxsZWQsIGZvY3VzZWQsIGZ1bGxXaWR0aCwgaGlkZGVuTGFiZWwsIHJlZ2lzdGVyRWZmZWN0LCByZXF1aXJlZCwgc2l6ZSwgdmFyaWFudF0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goRm9ybUNvbnRyb2xDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGNoaWxkQ29udGV4dCxcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goRm9ybUNvbnRyb2xSb290LCBfZXh0ZW5kcyh7XG4gICAgICBhczogY29tcG9uZW50LFxuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgICByZWY6IHJlZlxuICAgIH0sIG90aGVyLCB7XG4gICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICB9KSlcbiAgfSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEZvcm1Db250cm9sLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgV2FybmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgLy8g4pSCIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4g4pSCXG4gIC8vIOKUgiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIOKUglxuICAvLyDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICogQGRlZmF1bHQgJ3ByaW1hcnknXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydwcmltYXJ5JywgJ3NlY29uZGFyeScsICdlcnJvcicsICdpbmZvJywgJ3N1Y2Nlc3MnLCAnd2FybmluZyddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCwgaW5wdXQgYW5kIGhlbHBlciB0ZXh0IHNob3VsZCBiZSBkaXNwbGF5ZWQgaW4gYSBkaXNhYmxlZCBzdGF0ZS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIGlzIGRpc3BsYXllZCBpbiBhbiBlcnJvciBzdGF0ZS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGVycm9yOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBkaXNwbGF5ZWQgaW4gZm9jdXNlZCBzdGF0ZS5cbiAgICovXG4gIGZvY3VzZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IHdpbGwgdGFrZSB1cCB0aGUgZnVsbCB3aWR0aCBvZiBpdHMgY29udGFpbmVyLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIGlzIGhpZGRlbi5cbiAgICogVGhpcyBpcyB1c2VkIHRvIGluY3JlYXNlIGRlbnNpdHkgZm9yIGEgYEZpbGxlZElucHV0YC5cbiAgICogQmUgc3VyZSB0byBhZGQgYGFyaWEtbGFiZWxgIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBoaWRkZW5MYWJlbDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgZGVuc2VgIG9yIGBub3JtYWxgLCB3aWxsIGFkanVzdCB2ZXJ0aWNhbCBzcGFjaW5nIG9mIHRoaXMgYW5kIGNvbnRhaW5lZCBjb21wb25lbnRzLlxuICAgKiBAZGVmYXVsdCAnbm9uZSdcbiAgICovXG4gIG1hcmdpbjogUHJvcFR5cGVzLm9uZU9mKFsnZGVuc2UnLCAnbm9uZScsICdub3JtYWwnXSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCB3aWxsIGluZGljYXRlIHRoYXQgdGhlIGBpbnB1dGAgaXMgcmVxdWlyZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCAnbWVkaXVtJ1xuICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydtZWRpdW0nLCAnc21hbGwnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFRoZSB2YXJpYW50IHRvIHVzZS5cbiAgICogQGRlZmF1bHQgJ291dGxpbmVkJ1xuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzLm9uZU9mKFsnZmlsbGVkJywgJ291dGxpbmVkJywgJ3N0YW5kYXJkJ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgRm9ybUNvbnRyb2w7IiwiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtSGVscGVyVGV4dFV0aWxpdHlDbGFzc2VzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlGb3JtSGVscGVyVGV4dCcsIHNsb3QpO1xufVxuY29uc3QgZm9ybUhlbHBlclRleHRDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpRm9ybUhlbHBlclRleHQnLCBbJ3Jvb3QnLCAnZXJyb3InLCAnZGlzYWJsZWQnLCAnc2l6ZVNtYWxsJywgJ3NpemVNZWRpdW0nLCAnY29udGFpbmVkJywgJ2ZvY3VzZWQnLCAnZmlsbGVkJywgJ3JlcXVpcmVkJ10pO1xuZXhwb3J0IGRlZmF1bHQgZm9ybUhlbHBlclRleHRDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbnZhciBfc3BhbjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29tcG9uZW50XCIsIFwiZGlzYWJsZWRcIiwgXCJlcnJvclwiLCBcImZpbGxlZFwiLCBcImZvY3VzZWRcIiwgXCJtYXJnaW5cIiwgXCJyZXF1aXJlZFwiLCBcInZhcmlhbnRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgZm9ybUNvbnRyb2xTdGF0ZSBmcm9tICcuLi9Gb3JtQ29udHJvbC9mb3JtQ29udHJvbFN0YXRlJztcbmltcG9ydCB1c2VGb3JtQ29udHJvbCBmcm9tICcuLi9Gb3JtQ29udHJvbC91c2VGb3JtQ29udHJvbCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgZm9ybUhlbHBlclRleHRDbGFzc2VzLCB7IGdldEZvcm1IZWxwZXJUZXh0VXRpbGl0eUNsYXNzZXMgfSBmcm9tICcuL2Zvcm1IZWxwZXJUZXh0Q2xhc3Nlcyc7XG5pbXBvcnQgeyB1c2VEZWZhdWx0UHJvcHMgfSBmcm9tICcuLi9EZWZhdWx0UHJvcHNQcm92aWRlcic7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgY29udGFpbmVkLFxuICAgIHNpemUsXG4gICAgZGlzYWJsZWQsXG4gICAgZXJyb3IsXG4gICAgZmlsbGVkLFxuICAgIGZvY3VzZWQsXG4gICAgcmVxdWlyZWRcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIGRpc2FibGVkICYmICdkaXNhYmxlZCcsIGVycm9yICYmICdlcnJvcicsIHNpemUgJiYgYHNpemUke2NhcGl0YWxpemUoc2l6ZSl9YCwgY29udGFpbmVkICYmICdjb250YWluZWQnLCBmb2N1c2VkICYmICdmb2N1c2VkJywgZmlsbGVkICYmICdmaWxsZWQnLCByZXF1aXJlZCAmJiAncmVxdWlyZWQnXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldEZvcm1IZWxwZXJUZXh0VXRpbGl0eUNsYXNzZXMsIGNsYXNzZXMpO1xufTtcbmNvbnN0IEZvcm1IZWxwZXJUZXh0Um9vdCA9IHN0eWxlZCgncCcsIHtcbiAgbmFtZTogJ011aUZvcm1IZWxwZXJUZXh0JyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3QsIG93bmVyU3RhdGUuc2l6ZSAmJiBzdHlsZXNbYHNpemUke2NhcGl0YWxpemUob3duZXJTdGF0ZS5zaXplKX1gXSwgb3duZXJTdGF0ZS5jb250YWluZWQgJiYgc3R5bGVzLmNvbnRhaW5lZCwgb3duZXJTdGF0ZS5maWxsZWQgJiYgc3R5bGVzLmZpbGxlZF07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS50ZXh0LnNlY29uZGFyeVxufSwgdGhlbWUudHlwb2dyYXBoeS5jYXB0aW9uLCB7XG4gIHRleHRBbGlnbjogJ2xlZnQnLFxuICBtYXJnaW5Ub3A6IDMsXG4gIG1hcmdpblJpZ2h0OiAwLFxuICBtYXJnaW5Cb3R0b206IDAsXG4gIG1hcmdpbkxlZnQ6IDAsXG4gIFtgJi4ke2Zvcm1IZWxwZXJUZXh0Q2xhc3Nlcy5kaXNhYmxlZH1gXToge1xuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS50ZXh0LmRpc2FibGVkXG4gIH0sXG4gIFtgJi4ke2Zvcm1IZWxwZXJUZXh0Q2xhc3Nlcy5lcnJvcn1gXToge1xuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5lcnJvci5tYWluXG4gIH1cbn0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gIG1hcmdpblRvcDogNFxufSwgb3duZXJTdGF0ZS5jb250YWluZWQgJiYge1xuICBtYXJnaW5MZWZ0OiAxNCxcbiAgbWFyZ2luUmlnaHQ6IDE0XG59KSk7XG5jb25zdCBGb3JtSGVscGVyVGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIEZvcm1IZWxwZXJUZXh0KGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZURlZmF1bHRQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUZvcm1IZWxwZXJUZXh0J1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb21wb25lbnQgPSAncCdcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgbXVpRm9ybUNvbnRyb2wgPSB1c2VGb3JtQ29udHJvbCgpO1xuICBjb25zdCBmY3MgPSBmb3JtQ29udHJvbFN0YXRlKHtcbiAgICBwcm9wcyxcbiAgICBtdWlGb3JtQ29udHJvbCxcbiAgICBzdGF0ZXM6IFsndmFyaWFudCcsICdzaXplJywgJ2Rpc2FibGVkJywgJ2Vycm9yJywgJ2ZpbGxlZCcsICdmb2N1c2VkJywgJ3JlcXVpcmVkJ11cbiAgfSk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb21wb25lbnQsXG4gICAgY29udGFpbmVkOiBmY3MudmFyaWFudCA9PT0gJ2ZpbGxlZCcgfHwgZmNzLnZhcmlhbnQgPT09ICdvdXRsaW5lZCcsXG4gICAgdmFyaWFudDogZmNzLnZhcmlhbnQsXG4gICAgc2l6ZTogZmNzLnNpemUsXG4gICAgZGlzYWJsZWQ6IGZjcy5kaXNhYmxlZCxcbiAgICBlcnJvcjogZmNzLmVycm9yLFxuICAgIGZpbGxlZDogZmNzLmZpbGxlZCxcbiAgICBmb2N1c2VkOiBmY3MuZm9jdXNlZCxcbiAgICByZXF1aXJlZDogZmNzLnJlcXVpcmVkXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChGb3JtSGVscGVyVGV4dFJvb3QsIF9leHRlbmRzKHtcbiAgICBhczogY29tcG9uZW50LFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICByZWY6IHJlZlxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiBjaGlsZHJlbiA9PT0gJyAnID8gLy8gbm90cmFuc2xhdGUgbmVlZGVkIHdoaWxlIEdvb2dsZSBUcmFuc2xhdGUgd2lsbCBub3QgZml4IHplcm8td2lkdGggc3BhY2UgaXNzdWVcbiAgICBfc3BhbiB8fCAoX3NwYW4gPSAvKiNfX1BVUkVfXyovX2pzeChcInNwYW5cIiwge1xuICAgICAgY2xhc3NOYW1lOiBcIm5vdHJhbnNsYXRlXCIsXG4gICAgICBjaGlsZHJlbjogXCJcXHUyMDBCXCJcbiAgICB9KSkgOiBjaGlsZHJlblxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEZvcm1IZWxwZXJUZXh0LnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgV2FybmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgLy8g4pSCIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4g4pSCXG4gIC8vIOKUgiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIOKUglxuICAvLyDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqXG4gICAqIElmIGAnICdgIGlzIHByb3ZpZGVkLCB0aGUgY29tcG9uZW50IHJlc2VydmVzIG9uZSBsaW5lIGhlaWdodCBmb3IgZGlzcGxheWluZyBhIGZ1dHVyZSBtZXNzYWdlLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgaGVscGVyIHRleHQgc2hvdWxkIGJlIGRpc3BsYXllZCBpbiBhIGRpc2FibGVkIHN0YXRlLlxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCBoZWxwZXIgdGV4dCBzaG91bGQgYmUgZGlzcGxheWVkIGluIGFuIGVycm9yIHN0YXRlLlxuICAgKi9cbiAgZXJyb3I6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgaGVscGVyIHRleHQgc2hvdWxkIHVzZSBmaWxsZWQgY2xhc3NlcyBrZXkuXG4gICAqL1xuICBmaWxsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgaGVscGVyIHRleHQgc2hvdWxkIHVzZSBmb2N1c2VkIGNsYXNzZXMga2V5LlxuICAgKi9cbiAgZm9jdXNlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgZGVuc2VgLCB3aWxsIGFkanVzdCB2ZXJ0aWNhbCBzcGFjaW5nLiBUaGlzIGlzIG5vcm1hbGx5IG9idGFpbmVkIHZpYSBjb250ZXh0IGZyb21cbiAgICogRm9ybUNvbnRyb2wuXG4gICAqL1xuICBtYXJnaW46IFByb3BUeXBlcy5vbmVPZihbJ2RlbnNlJ10pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgaGVscGVyIHRleHQgc2hvdWxkIHVzZSByZXF1aXJlZCBjbGFzc2VzIGtleS5cbiAgICovXG4gIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFRoZSB2YXJpYW50IHRvIHVzZS5cbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnZmlsbGVkJywgJ291dGxpbmVkJywgJ3N0YW5kYXJkJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBGb3JtSGVscGVyVGV4dDsiLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcmVmIG9mIGEgUmVhY3QgZWxlbWVudCBoYW5kbGluZyBkaWZmZXJlbmNlcyBiZXR3ZWVuIFJlYWN0IDE5IGFuZCBvbGRlciB2ZXJzaW9ucy5cbiAqIEl0IHdpbGwgdGhyb3cgcnVudGltZSBlcnJvciBpZiB0aGUgZWxlbWVudCBpcyBub3QgYSB2YWxpZCBSZWFjdCBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSBlbGVtZW50IFJlYWN0LlJlYWN0RWxlbWVudFxuICogQHJldHVybnMgUmVhY3QuUmVmPGFueT4gfCBudWxsXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFJlYWN0RWxlbWVudFJlZihlbGVtZW50KSB7XG4gIC8vICdyZWYnIGlzIHBhc3NlZCBhcyBwcm9wIGluIFJlYWN0IDE5LCB3aGVyZWFzICdyZWYnIGlzIGRpcmVjdGx5IGF0dGFjaGVkIHRvIGNoaWxkcmVuIGluIG9sZGVyIHZlcnNpb25zXG4gIGlmIChwYXJzZUludChSZWFjdC52ZXJzaW9uLCAxMCkgPj0gMTkpIHtcbiAgICB2YXIgX2VsZW1lbnQkcHJvcHM7XG4gICAgcmV0dXJuIChlbGVtZW50ID09IG51bGwgfHwgKF9lbGVtZW50JHByb3BzID0gZWxlbWVudC5wcm9wcykgPT0gbnVsbCA/IHZvaWQgMCA6IF9lbGVtZW50JHByb3BzLnJlZikgfHwgbnVsbDtcbiAgfVxuICAvLyBAdHMtZXhwZWN0LWVycm9yIGVsZW1lbnQucmVmIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgUmVhY3RFbGVtZW50IHR5cGVcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0RlZmluaXRlbHlUeXBlZC9EZWZpbml0ZWx5VHlwZWQvZGlzY3Vzc2lvbnMvNzAxODlcbiAgcmV0dXJuIChlbGVtZW50ID09IG51bGwgPyB2b2lkIDAgOiBlbGVtZW50LnJlZikgfHwgbnVsbDtcbn0iLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1widmFsdWVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IFJ0bENvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dCgpO1xuZnVuY3Rpb24gUnRsUHJvdmlkZXIoX3JlZikge1xuICBsZXQge1xuICAgICAgdmFsdWVcbiAgICB9ID0gX3JlZixcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChSdGxDb250ZXh0LlByb3ZpZGVyLCBfZXh0ZW5kcyh7XG4gICAgdmFsdWU6IHZhbHVlICE9IG51bGwgPyB2YWx1ZSA6IHRydWVcbiAgfSwgcHJvcHMpKTtcbn1cbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFJ0bFByb3ZpZGVyLnByb3BUeXBlcyA9IHtcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICB2YWx1ZTogUHJvcFR5cGVzLmJvb2xcbn0gOiB2b2lkIDA7XG5leHBvcnQgY29uc3QgdXNlUnRsID0gKCkgPT4ge1xuICBjb25zdCB2YWx1ZSA9IFJlYWN0LnVzZUNvbnRleHQoUnRsQ29udGV4dCk7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsID8gdmFsdWUgOiBmYWxzZTtcbn07XG5leHBvcnQgZGVmYXVsdCBSdGxQcm92aWRlcjsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBpc0hvc3RDb21wb25lbnQgZnJvbSAnLi4vaXNIb3N0Q29tcG9uZW50JztcblxuLyoqXG4gKiBUeXBlIG9mIHRoZSBvd25lclN0YXRlIGJhc2VkIG9uIHRoZSB0eXBlIG9mIGFuIGVsZW1lbnQgaXQgYXBwbGllcyB0by5cbiAqIFRoaXMgcmVzb2x2ZXMgdG8gdGhlIHByb3ZpZGVkIE93bmVyU3RhdGUgZm9yIFJlYWN0IGNvbXBvbmVudHMgYW5kIGB1bmRlZmluZWRgIGZvciBob3N0IGNvbXBvbmVudHMuXG4gKiBGYWxscyBiYWNrIHRvIGBPd25lclN0YXRlIHwgdW5kZWZpbmVkYCB3aGVuIHRoZSBleGFjdCB0eXBlIGNhbid0IGJlIGRldGVybWluZWQgaW4gZGV2ZWxvcG1lbnQgdGltZS5cbiAqL1xuXG4vKipcbiAqIEFwcGVuZHMgdGhlIG93bmVyU3RhdGUgb2JqZWN0IHRvIHRoZSBwcm9wcywgbWVyZ2luZyB3aXRoIHRoZSBleGlzdGluZyBvbmUgaWYgbmVjZXNzYXJ5LlxuICpcbiAqIEBwYXJhbSBlbGVtZW50VHlwZSBUeXBlIG9mIHRoZSBlbGVtZW50IHRoYXQgb3ducyB0aGUgYGV4aXN0aW5nUHJvcHNgLiBJZiB0aGUgZWxlbWVudCBpcyBhIERPTSBub2RlIG9yIHVuZGVmaW5lZCwgYG93bmVyU3RhdGVgIGlzIG5vdCBhcHBsaWVkLlxuICogQHBhcmFtIG90aGVyUHJvcHMgUHJvcHMgb2YgdGhlIGVsZW1lbnQuXG4gKiBAcGFyYW0gb3duZXJTdGF0ZVxuICovXG5mdW5jdGlvbiBhcHBlbmRPd25lclN0YXRlKGVsZW1lbnRUeXBlLCBvdGhlclByb3BzLCBvd25lclN0YXRlKSB7XG4gIGlmIChlbGVtZW50VHlwZSA9PT0gdW5kZWZpbmVkIHx8IGlzSG9zdENvbXBvbmVudChlbGVtZW50VHlwZSkpIHtcbiAgICByZXR1cm4gb3RoZXJQcm9wcztcbiAgfVxuICByZXR1cm4gX2V4dGVuZHMoe30sIG90aGVyUHJvcHMsIHtcbiAgICBvd25lclN0YXRlOiBfZXh0ZW5kcyh7fSwgb3RoZXJQcm9wcy5vd25lclN0YXRlLCBvd25lclN0YXRlKVxuICB9KTtcbn1cbmV4cG9ydCBkZWZhdWx0IGFwcGVuZE93bmVyU3RhdGU7IiwiLyoqXG4gKiBFeHRyYWN0cyBldmVudCBoYW5kbGVycyBmcm9tIGEgZ2l2ZW4gb2JqZWN0LlxuICogQSBwcm9wIGlzIGNvbnNpZGVyZWQgYW4gZXZlbnQgaGFuZGxlciBpZiBpdCBpcyBhIGZ1bmN0aW9uIGFuZCBpdHMgbmFtZSBzdGFydHMgd2l0aCBgb25gLlxuICpcbiAqIEBwYXJhbSBvYmplY3QgQW4gb2JqZWN0IHRvIGV4dHJhY3QgZXZlbnQgaGFuZGxlcnMgZnJvbS5cbiAqIEBwYXJhbSBleGNsdWRlS2V5cyBBbiBhcnJheSBvZiBrZXlzIHRvIGV4Y2x1ZGUgZnJvbSB0aGUgcmV0dXJuZWQgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBleHRyYWN0RXZlbnRIYW5kbGVycyhvYmplY3QsIGV4Y2x1ZGVLZXlzID0gW10pIHtcbiAgaWYgKG9iamVjdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9IHt9O1xuICBPYmplY3Qua2V5cyhvYmplY3QpLmZpbHRlcihwcm9wID0+IHByb3AubWF0Y2goL15vbltBLVpdLykgJiYgdHlwZW9mIG9iamVjdFtwcm9wXSA9PT0gJ2Z1bmN0aW9uJyAmJiAhZXhjbHVkZUtleXMuaW5jbHVkZXMocHJvcCkpLmZvckVhY2gocHJvcCA9PiB7XG4gICAgcmVzdWx0W3Byb3BdID0gb2JqZWN0W3Byb3BdO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydCBkZWZhdWx0IGV4dHJhY3RFdmVudEhhbmRsZXJzOyIsIi8qKlxuICogUmVtb3ZlcyBldmVudCBoYW5kbGVycyBmcm9tIHRoZSBnaXZlbiBvYmplY3QuXG4gKiBBIGZpZWxkIGlzIGNvbnNpZGVyZWQgYW4gZXZlbnQgaGFuZGxlciBpZiBpdCBpcyBhIGZ1bmN0aW9uIHdpdGggYSBuYW1lIGJlZ2lubmluZyB3aXRoIGBvbmAuXG4gKlxuICogQHBhcmFtIG9iamVjdCBPYmplY3QgdG8gcmVtb3ZlIGV2ZW50IGhhbmRsZXJzIGZyb20uXG4gKiBAcmV0dXJucyBPYmplY3Qgd2l0aCBldmVudCBoYW5kbGVycyByZW1vdmVkLlxuICovXG5mdW5jdGlvbiBvbWl0RXZlbnRIYW5kbGVycyhvYmplY3QpIHtcbiAgaWYgKG9iamVjdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9IHt9O1xuICBPYmplY3Qua2V5cyhvYmplY3QpLmZpbHRlcihwcm9wID0+ICEocHJvcC5tYXRjaCgvXm9uW0EtWl0vKSAmJiB0eXBlb2Ygb2JqZWN0W3Byb3BdID09PSAnZnVuY3Rpb24nKSkuZm9yRWFjaChwcm9wID0+IHtcbiAgICByZXN1bHRbcHJvcF0gPSBvYmplY3RbcHJvcF07XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuZXhwb3J0IGRlZmF1bHQgb21pdEV2ZW50SGFuZGxlcnM7IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCBleHRyYWN0RXZlbnRIYW5kbGVycyBmcm9tICcuLi9leHRyYWN0RXZlbnRIYW5kbGVycyc7XG5pbXBvcnQgb21pdEV2ZW50SGFuZGxlcnMgZnJvbSAnLi4vb21pdEV2ZW50SGFuZGxlcnMnO1xuLyoqXG4gKiBNZXJnZXMgdGhlIHNsb3QgY29tcG9uZW50IGludGVybmFsIHByb3BzICh1c3VhbGx5IGNvbWluZyBmcm9tIGEgaG9vaylcbiAqIHdpdGggdGhlIGV4dGVybmFsbHkgcHJvdmlkZWQgb25lcy5cbiAqXG4gKiBUaGUgbWVyZ2Ugb3JkZXIgaXMgKHRoZSBsYXR0ZXIgb3ZlcnJpZGVzIHRoZSBmb3JtZXIpOlxuICogMS4gVGhlIGludGVybmFsIHByb3BzIChzcGVjaWZpZWQgYXMgYSBnZXR0ZXIgZnVuY3Rpb24gdG8gd29yayB3aXRoIGdldCpQcm9wcyBob29rIHJlc3VsdClcbiAqIDIuIEFkZGl0aW9uYWwgcHJvcHMgKHNwZWNpZmllZCBpbnRlcm5hbGx5IG9uIGEgQmFzZSBVSSBjb21wb25lbnQpXG4gKiAzLiBFeHRlcm5hbCBwcm9wcyBzcGVjaWZpZWQgb24gdGhlIG93bmVyIGNvbXBvbmVudC4gVGhlc2Ugc2hvdWxkIG9ubHkgYmUgdXNlZCBvbiBhIHJvb3Qgc2xvdC5cbiAqIDQuIEV4dGVybmFsIHByb3BzIHNwZWNpZmllZCBpbiB0aGUgYHNsb3RQcm9wcy4qYCBwcm9wLlxuICogNS4gVGhlIGBjbGFzc05hbWVgIHByb3AgLSBjb21iaW5lZCBmcm9tIGFsbCB0aGUgYWJvdmUuXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gbWVyZ2VTbG90UHJvcHMocGFyYW1ldGVycykge1xuICBjb25zdCB7XG4gICAgZ2V0U2xvdFByb3BzLFxuICAgIGFkZGl0aW9uYWxQcm9wcyxcbiAgICBleHRlcm5hbFNsb3RQcm9wcyxcbiAgICBleHRlcm5hbEZvcndhcmRlZFByb3BzLFxuICAgIGNsYXNzTmFtZVxuICB9ID0gcGFyYW1ldGVycztcbiAgaWYgKCFnZXRTbG90UHJvcHMpIHtcbiAgICAvLyBUaGUgc2ltcGxlciBjYXNlIC0gZ2V0U2xvdFByb3BzIGlzIG5vdCBkZWZpbmVkLCBzbyBubyBpbnRlcm5hbCBldmVudCBoYW5kbGVycyBhcmUgZGVmaW5lZCxcbiAgICAvLyBzbyB3ZSBjYW4gc2ltcGx5IG1lcmdlIGFsbCB0aGUgcHJvcHMgd2l0aG91dCBoYXZpbmcgdG8gd29ycnkgYWJvdXQgZXh0cmFjdGluZyBldmVudCBoYW5kbGVycy5cbiAgICBjb25zdCBqb2luZWRDbGFzc2VzID0gY2xzeChhZGRpdGlvbmFsUHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IGFkZGl0aW9uYWxQcm9wcy5jbGFzc05hbWUsIGNsYXNzTmFtZSwgZXh0ZXJuYWxGb3J3YXJkZWRQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogZXh0ZXJuYWxGb3J3YXJkZWRQcm9wcy5jbGFzc05hbWUsIGV4dGVybmFsU2xvdFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBleHRlcm5hbFNsb3RQcm9wcy5jbGFzc05hbWUpO1xuICAgIGNvbnN0IG1lcmdlZFN0eWxlID0gX2V4dGVuZHMoe30sIGFkZGl0aW9uYWxQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogYWRkaXRpb25hbFByb3BzLnN0eWxlLCBleHRlcm5hbEZvcndhcmRlZFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBleHRlcm5hbEZvcndhcmRlZFByb3BzLnN0eWxlLCBleHRlcm5hbFNsb3RQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogZXh0ZXJuYWxTbG90UHJvcHMuc3R5bGUpO1xuICAgIGNvbnN0IHByb3BzID0gX2V4dGVuZHMoe30sIGFkZGl0aW9uYWxQcm9wcywgZXh0ZXJuYWxGb3J3YXJkZWRQcm9wcywgZXh0ZXJuYWxTbG90UHJvcHMpO1xuICAgIGlmIChqb2luZWRDbGFzc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIHByb3BzLmNsYXNzTmFtZSA9IGpvaW5lZENsYXNzZXM7XG4gICAgfVxuICAgIGlmIChPYmplY3Qua2V5cyhtZXJnZWRTdHlsZSkubGVuZ3RoID4gMCkge1xuICAgICAgcHJvcHMuc3R5bGUgPSBtZXJnZWRTdHlsZTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb3BzLFxuICAgICAgaW50ZXJuYWxSZWY6IHVuZGVmaW5lZFxuICAgIH07XG4gIH1cblxuICAvLyBJbiB0aGlzIGNhc2UsIGdldFNsb3RQcm9wcyBpcyByZXNwb25zaWJsZSBmb3IgY2FsbGluZyB0aGUgZXh0ZXJuYWwgZXZlbnQgaGFuZGxlcnMuXG4gIC8vIFdlIGRvbid0IG5lZWQgdG8gaW5jbHVkZSB0aGVtIGluIHRoZSBtZXJnZWQgcHJvcHMgYmVjYXVzZSBvZiB0aGlzLlxuXG4gIGNvbnN0IGV2ZW50SGFuZGxlcnMgPSBleHRyYWN0RXZlbnRIYW5kbGVycyhfZXh0ZW5kcyh7fSwgZXh0ZXJuYWxGb3J3YXJkZWRQcm9wcywgZXh0ZXJuYWxTbG90UHJvcHMpKTtcbiAgY29uc3QgY29tcG9uZW50c1Byb3BzV2l0aG91dEV2ZW50SGFuZGxlcnMgPSBvbWl0RXZlbnRIYW5kbGVycyhleHRlcm5hbFNsb3RQcm9wcyk7XG4gIGNvbnN0IG90aGVyUHJvcHNXaXRob3V0RXZlbnRIYW5kbGVycyA9IG9taXRFdmVudEhhbmRsZXJzKGV4dGVybmFsRm9yd2FyZGVkUHJvcHMpO1xuICBjb25zdCBpbnRlcm5hbFNsb3RQcm9wcyA9IGdldFNsb3RQcm9wcyhldmVudEhhbmRsZXJzKTtcblxuICAvLyBUaGUgb3JkZXIgb2YgY2xhc3NlcyBpcyBpbXBvcnRhbnQgaGVyZS5cbiAgLy8gRW1vdGlvbiAodGhhdCB3ZSB1c2UgaW4gbGlicmFyaWVzIGNvbnN1bWluZyBCYXNlIFVJKSBkZXBlbmRzIG9uIHRoaXMgb3JkZXJcbiAgLy8gdG8gcHJvcGVybHkgb3ZlcnJpZGUgc3R5bGUuIEl0IHJlcXVpcmVzIHRoZSBtb3N0IGltcG9ydGFudCBjbGFzc2VzIHRvIGJlIGxhc3RcbiAgLy8gKHNlZSBodHRwczovL2dpdGh1Yi5jb20vbXVpL21hdGVyaWFsLXVpL3B1bGwvMzMyMDUpIGZvciB0aGUgcmVsYXRlZCBkaXNjdXNzaW9uLlxuICBjb25zdCBqb2luZWRDbGFzc2VzID0gY2xzeChpbnRlcm5hbFNsb3RQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogaW50ZXJuYWxTbG90UHJvcHMuY2xhc3NOYW1lLCBhZGRpdGlvbmFsUHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IGFkZGl0aW9uYWxQcm9wcy5jbGFzc05hbWUsIGNsYXNzTmFtZSwgZXh0ZXJuYWxGb3J3YXJkZWRQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogZXh0ZXJuYWxGb3J3YXJkZWRQcm9wcy5jbGFzc05hbWUsIGV4dGVybmFsU2xvdFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBleHRlcm5hbFNsb3RQcm9wcy5jbGFzc05hbWUpO1xuICBjb25zdCBtZXJnZWRTdHlsZSA9IF9leHRlbmRzKHt9LCBpbnRlcm5hbFNsb3RQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogaW50ZXJuYWxTbG90UHJvcHMuc3R5bGUsIGFkZGl0aW9uYWxQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogYWRkaXRpb25hbFByb3BzLnN0eWxlLCBleHRlcm5hbEZvcndhcmRlZFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBleHRlcm5hbEZvcndhcmRlZFByb3BzLnN0eWxlLCBleHRlcm5hbFNsb3RQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogZXh0ZXJuYWxTbG90UHJvcHMuc3R5bGUpO1xuICBjb25zdCBwcm9wcyA9IF9leHRlbmRzKHt9LCBpbnRlcm5hbFNsb3RQcm9wcywgYWRkaXRpb25hbFByb3BzLCBvdGhlclByb3BzV2l0aG91dEV2ZW50SGFuZGxlcnMsIGNvbXBvbmVudHNQcm9wc1dpdGhvdXRFdmVudEhhbmRsZXJzKTtcbiAgaWYgKGpvaW5lZENsYXNzZXMubGVuZ3RoID4gMCkge1xuICAgIHByb3BzLmNsYXNzTmFtZSA9IGpvaW5lZENsYXNzZXM7XG4gIH1cbiAgaWYgKE9iamVjdC5rZXlzKG1lcmdlZFN0eWxlKS5sZW5ndGggPiAwKSB7XG4gICAgcHJvcHMuc3R5bGUgPSBtZXJnZWRTdHlsZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHByb3BzLFxuICAgIGludGVybmFsUmVmOiBpbnRlcm5hbFNsb3RQcm9wcy5yZWZcbiAgfTtcbn1cbmV4cG9ydCBkZWZhdWx0IG1lcmdlU2xvdFByb3BzOyIsIi8qKlxuICogSWYgYGNvbXBvbmVudFByb3BzYCBpcyBhIGZ1bmN0aW9uLCBjYWxscyBpdCB3aXRoIHRoZSBwcm92aWRlZCBgb3duZXJTdGF0ZWAuXG4gKiBPdGhlcndpc2UsIGp1c3QgcmV0dXJucyBgY29tcG9uZW50UHJvcHNgLlxuICovXG5mdW5jdGlvbiByZXNvbHZlQ29tcG9uZW50UHJvcHMoY29tcG9uZW50UHJvcHMsIG93bmVyU3RhdGUsIHNsb3RTdGF0ZSkge1xuICBpZiAodHlwZW9mIGNvbXBvbmVudFByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGNvbXBvbmVudFByb3BzKG93bmVyU3RhdGUsIHNsb3RTdGF0ZSk7XG4gIH1cbiAgcmV0dXJuIGNvbXBvbmVudFByb3BzO1xufVxuZXhwb3J0IGRlZmF1bHQgcmVzb2x2ZUNvbXBvbmVudFByb3BzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImVsZW1lbnRUeXBlXCIsIFwiZXh0ZXJuYWxTbG90UHJvcHNcIiwgXCJvd25lclN0YXRlXCIsIFwic2tpcFJlc29sdmluZ1Nsb3RQcm9wc1wiXTtcbmltcG9ydCB1c2VGb3JrUmVmIGZyb20gJy4uL3VzZUZvcmtSZWYnO1xuaW1wb3J0IGFwcGVuZE93bmVyU3RhdGUgZnJvbSAnLi4vYXBwZW5kT3duZXJTdGF0ZSc7XG5pbXBvcnQgbWVyZ2VTbG90UHJvcHMgZnJvbSAnLi4vbWVyZ2VTbG90UHJvcHMnO1xuaW1wb3J0IHJlc29sdmVDb21wb25lbnRQcm9wcyBmcm9tICcuLi9yZXNvbHZlQ29tcG9uZW50UHJvcHMnO1xuLyoqXG4gKiBAaWdub3JlIC0gZG8gbm90IGRvY3VtZW50LlxuICogQnVpbGRzIHRoZSBwcm9wcyB0byBiZSBwYXNzZWQgaW50byB0aGUgc2xvdCBvZiBhbiB1bnN0eWxlZCBjb21wb25lbnQuXG4gKiBJdCBtZXJnZXMgdGhlIGludGVybmFsIHByb3BzIG9mIHRoZSBjb21wb25lbnQgd2l0aCB0aGUgb25lcyBzdXBwbGllZCBieSB0aGUgdXNlciwgYWxsb3dpbmcgdG8gY3VzdG9taXplIHRoZSBiZWhhdmlvci5cbiAqIElmIHRoZSBzbG90IGNvbXBvbmVudCBpcyBub3QgYSBob3N0IGNvbXBvbmVudCwgaXQgYWxzbyBtZXJnZXMgaW4gdGhlIGBvd25lclN0YXRlYC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1ldGVycy5nZXRTbG90UHJvcHMgLSBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgcHJvcHMgdG8gYmUgcGFzc2VkIHRvIHRoZSBzbG90IGNvbXBvbmVudC5cbiAqL1xuZnVuY3Rpb24gdXNlU2xvdFByb3BzKHBhcmFtZXRlcnMpIHtcbiAgdmFyIF9wYXJhbWV0ZXJzJGFkZGl0aW9uYTtcbiAgY29uc3Qge1xuICAgICAgZWxlbWVudFR5cGUsXG4gICAgICBleHRlcm5hbFNsb3RQcm9wcyxcbiAgICAgIG93bmVyU3RhdGUsXG4gICAgICBza2lwUmVzb2x2aW5nU2xvdFByb3BzID0gZmFsc2VcbiAgICB9ID0gcGFyYW1ldGVycyxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocGFyYW1ldGVycywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgcmVzb2x2ZWRDb21wb25lbnRzUHJvcHMgPSBza2lwUmVzb2x2aW5nU2xvdFByb3BzID8ge30gOiByZXNvbHZlQ29tcG9uZW50UHJvcHMoZXh0ZXJuYWxTbG90UHJvcHMsIG93bmVyU3RhdGUpO1xuICBjb25zdCB7XG4gICAgcHJvcHM6IG1lcmdlZFByb3BzLFxuICAgIGludGVybmFsUmVmXG4gIH0gPSBtZXJnZVNsb3RQcm9wcyhfZXh0ZW5kcyh7fSwgcmVzdCwge1xuICAgIGV4dGVybmFsU2xvdFByb3BzOiByZXNvbHZlZENvbXBvbmVudHNQcm9wc1xuICB9KSk7XG4gIGNvbnN0IHJlZiA9IHVzZUZvcmtSZWYoaW50ZXJuYWxSZWYsIHJlc29sdmVkQ29tcG9uZW50c1Byb3BzID09IG51bGwgPyB2b2lkIDAgOiByZXNvbHZlZENvbXBvbmVudHNQcm9wcy5yZWYsIChfcGFyYW1ldGVycyRhZGRpdGlvbmEgPSBwYXJhbWV0ZXJzLmFkZGl0aW9uYWxQcm9wcykgPT0gbnVsbCA/IHZvaWQgMCA6IF9wYXJhbWV0ZXJzJGFkZGl0aW9uYS5yZWYpO1xuICBjb25zdCBwcm9wcyA9IGFwcGVuZE93bmVyU3RhdGUoZWxlbWVudFR5cGUsIF9leHRlbmRzKHt9LCBtZXJnZWRQcm9wcywge1xuICAgIHJlZlxuICB9KSwgb3duZXJTdGF0ZSk7XG4gIHJldHVybiBwcm9wcztcbn1cbmV4cG9ydCBkZWZhdWx0IHVzZVNsb3RQcm9wczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5jb25zdCBMaXN0Q29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KHt9KTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIExpc3RDb250ZXh0LmRpc3BsYXlOYW1lID0gJ0xpc3RDb250ZXh0Jztcbn1cbmV4cG9ydCBkZWZhdWx0IExpc3RDb250ZXh0OyIsImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0TGlzdFV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpTGlzdCcsIHNsb3QpO1xufVxuY29uc3QgbGlzdENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlMaXN0JywgWydyb290JywgJ3BhZGRpbmcnLCAnZGVuc2UnLCAnc3ViaGVhZGVyJ10pO1xuZXhwb3J0IGRlZmF1bHQgbGlzdENsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb21wb25lbnRcIiwgXCJkZW5zZVwiLCBcImRpc2FibGVQYWRkaW5nXCIsIFwic3ViaGVhZGVyXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB7IHVzZURlZmF1bHRQcm9wcyB9IGZyb20gJy4uL0RlZmF1bHRQcm9wc1Byb3ZpZGVyJztcbmltcG9ydCBMaXN0Q29udGV4dCBmcm9tICcuL0xpc3RDb250ZXh0JztcbmltcG9ydCB7IGdldExpc3RVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL2xpc3RDbGFzc2VzJztcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBkaXNhYmxlUGFkZGluZyxcbiAgICBkZW5zZSxcbiAgICBzdWJoZWFkZXJcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsICFkaXNhYmxlUGFkZGluZyAmJiAncGFkZGluZycsIGRlbnNlICYmICdkZW5zZScsIHN1YmhlYWRlciAmJiAnc3ViaGVhZGVyJ11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRMaXN0VXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5jb25zdCBMaXN0Um9vdCA9IHN0eWxlZCgndWwnLCB7XG4gIG5hbWU6ICdNdWlMaXN0JyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3QsICFvd25lclN0YXRlLmRpc2FibGVQYWRkaW5nICYmIHN0eWxlcy5wYWRkaW5nLCBvd25lclN0YXRlLmRlbnNlICYmIHN0eWxlcy5kZW5zZSwgb3duZXJTdGF0ZS5zdWJoZWFkZXIgJiYgc3R5bGVzLnN1YmhlYWRlcl07XG4gIH1cbn0pKCh7XG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgbGlzdFN0eWxlOiAnbm9uZScsXG4gIG1hcmdpbjogMCxcbiAgcGFkZGluZzogMCxcbiAgcG9zaXRpb246ICdyZWxhdGl2ZSdcbn0sICFvd25lclN0YXRlLmRpc2FibGVQYWRkaW5nICYmIHtcbiAgcGFkZGluZ1RvcDogOCxcbiAgcGFkZGluZ0JvdHRvbTogOFxufSwgb3duZXJTdGF0ZS5zdWJoZWFkZXIgJiYge1xuICBwYWRkaW5nVG9wOiAwXG59KSk7XG5jb25zdCBMaXN0ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gTGlzdChpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VEZWZhdWx0UHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlMaXN0J1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb21wb25lbnQgPSAndWwnLFxuICAgICAgZGVuc2UgPSBmYWxzZSxcbiAgICAgIGRpc2FibGVQYWRkaW5nID0gZmFsc2UsXG4gICAgICBzdWJoZWFkZXJcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgY29udGV4dCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcbiAgICBkZW5zZVxuICB9KSwgW2RlbnNlXSk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb21wb25lbnQsXG4gICAgZGVuc2UsXG4gICAgZGlzYWJsZVBhZGRpbmdcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KExpc3RDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGNvbnRleHQsXG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4cyhMaXN0Um9vdCwgX2V4dGVuZHMoe1xuICAgICAgYXM6IGNvbXBvbmVudCxcbiAgICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgICByZWY6IHJlZixcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGVcbiAgICB9LCBvdGhlciwge1xuICAgICAgY2hpbGRyZW46IFtzdWJoZWFkZXIsIGNoaWxkcmVuXVxuICAgIH0pKVxuICB9KTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gTGlzdC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFdhcm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIOKUglxuICAvLyDilIIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICDilIJcbiAgLy8g4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCBjb21wYWN0IHZlcnRpY2FsIHBhZGRpbmcgZGVzaWduZWQgZm9yIGtleWJvYXJkIGFuZCBtb3VzZSBpbnB1dCBpcyB1c2VkIGZvclxuICAgKiB0aGUgbGlzdCBhbmQgbGlzdCBpdGVtcy5cbiAgICogVGhlIHByb3AgaXMgYXZhaWxhYmxlIHRvIGRlc2NlbmRhbnQgY29tcG9uZW50cyBhcyB0aGUgYGRlbnNlYCBjb250ZXh0LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGVuc2U6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB2ZXJ0aWNhbCBwYWRkaW5nIGlzIHJlbW92ZWQgZnJvbSB0aGUgbGlzdC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVQYWRkaW5nOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBzdWJoZWFkZXIsIG5vcm1hbGx5IGBMaXN0U3ViaGVhZGVyYC5cbiAgICovXG4gIHN1YmhlYWRlcjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBMaXN0OyIsIi8vIEEgY2hhbmdlIG9mIHRoZSBicm93c2VyIHpvb20gY2hhbmdlIHRoZSBzY3JvbGxiYXIgc2l6ZS5cbi8vIENyZWRpdCBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi80ODhmZDhhZmM1MzVjYTNhNmFkNGRjNTgxZjVlODkyMTdiNmEzNmFjL2pzL3NyYy91dGlsL3Njcm9sbGJhci5qcyNMMTQtTDE4XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRTY3JvbGxiYXJTaXplKGRvYykge1xuICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvV2luZG93L2lubmVyV2lkdGgjdXNhZ2Vfbm90ZXNcbiAgY29uc3QgZG9jdW1lbnRXaWR0aCA9IGRvYy5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7XG4gIHJldHVybiBNYXRoLmFicyh3aW5kb3cuaW5uZXJXaWR0aCAtIGRvY3VtZW50V2lkdGgpO1xufSIsImltcG9ydCBnZXRTY3JvbGxiYXJTaXplIGZyb20gJ0BtdWkvdXRpbHMvZ2V0U2Nyb2xsYmFyU2l6ZSc7XG5leHBvcnQgZGVmYXVsdCBnZXRTY3JvbGxiYXJTaXplOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImFjdGlvbnNcIiwgXCJhdXRvRm9jdXNcIiwgXCJhdXRvRm9jdXNJdGVtXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJkaXNhYmxlZEl0ZW1zRm9jdXNhYmxlXCIsIFwiZGlzYWJsZUxpc3RXcmFwXCIsIFwib25LZXlEb3duXCIsIFwidmFyaWFudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGlzRnJhZ21lbnQgfSBmcm9tICdyZWFjdC1pcyc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IG93bmVyRG9jdW1lbnQgZnJvbSAnLi4vdXRpbHMvb3duZXJEb2N1bWVudCc7XG5pbXBvcnQgTGlzdCBmcm9tICcuLi9MaXN0JztcbmltcG9ydCBnZXRTY3JvbGxiYXJTaXplIGZyb20gJy4uL3V0aWxzL2dldFNjcm9sbGJhclNpemUnO1xuaW1wb3J0IHVzZUZvcmtSZWYgZnJvbSAnLi4vdXRpbHMvdXNlRm9ya1JlZic7XG5pbXBvcnQgdXNlRW5oYW5jZWRFZmZlY3QgZnJvbSAnLi4vdXRpbHMvdXNlRW5oYW5jZWRFZmZlY3QnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmZ1bmN0aW9uIG5leHRJdGVtKGxpc3QsIGl0ZW0sIGRpc2FibGVMaXN0V3JhcCkge1xuICBpZiAobGlzdCA9PT0gaXRlbSkge1xuICAgIHJldHVybiBsaXN0LmZpcnN0Q2hpbGQ7XG4gIH1cbiAgaWYgKGl0ZW0gJiYgaXRlbS5uZXh0RWxlbWVudFNpYmxpbmcpIHtcbiAgICByZXR1cm4gaXRlbS5uZXh0RWxlbWVudFNpYmxpbmc7XG4gIH1cbiAgcmV0dXJuIGRpc2FibGVMaXN0V3JhcCA/IG51bGwgOiBsaXN0LmZpcnN0Q2hpbGQ7XG59XG5mdW5jdGlvbiBwcmV2aW91c0l0ZW0obGlzdCwgaXRlbSwgZGlzYWJsZUxpc3RXcmFwKSB7XG4gIGlmIChsaXN0ID09PSBpdGVtKSB7XG4gICAgcmV0dXJuIGRpc2FibGVMaXN0V3JhcCA/IGxpc3QuZmlyc3RDaGlsZCA6IGxpc3QubGFzdENoaWxkO1xuICB9XG4gIGlmIChpdGVtICYmIGl0ZW0ucHJldmlvdXNFbGVtZW50U2libGluZykge1xuICAgIHJldHVybiBpdGVtLnByZXZpb3VzRWxlbWVudFNpYmxpbmc7XG4gIH1cbiAgcmV0dXJuIGRpc2FibGVMaXN0V3JhcCA/IG51bGwgOiBsaXN0Lmxhc3RDaGlsZDtcbn1cbmZ1bmN0aW9uIHRleHRDcml0ZXJpYU1hdGNoZXMobmV4dEZvY3VzLCB0ZXh0Q3JpdGVyaWEpIHtcbiAgaWYgKHRleHRDcml0ZXJpYSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgbGV0IHRleHQgPSBuZXh0Rm9jdXMuaW5uZXJUZXh0O1xuICBpZiAodGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLy8ganNkb20gZG9lc24ndCBzdXBwb3J0IGlubmVyVGV4dFxuICAgIHRleHQgPSBuZXh0Rm9jdXMudGV4dENvbnRlbnQ7XG4gIH1cbiAgdGV4dCA9IHRleHQudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gIGlmICh0ZXh0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAodGV4dENyaXRlcmlhLnJlcGVhdGluZykge1xuICAgIHJldHVybiB0ZXh0WzBdID09PSB0ZXh0Q3JpdGVyaWEua2V5c1swXTtcbiAgfVxuICByZXR1cm4gdGV4dC5pbmRleE9mKHRleHRDcml0ZXJpYS5rZXlzLmpvaW4oJycpKSA9PT0gMDtcbn1cbmZ1bmN0aW9uIG1vdmVGb2N1cyhsaXN0LCBjdXJyZW50Rm9jdXMsIGRpc2FibGVMaXN0V3JhcCwgZGlzYWJsZWRJdGVtc0ZvY3VzYWJsZSwgdHJhdmVyc2FsRnVuY3Rpb24sIHRleHRDcml0ZXJpYSkge1xuICBsZXQgd3JhcHBlZE9uY2UgPSBmYWxzZTtcbiAgbGV0IG5leHRGb2N1cyA9IHRyYXZlcnNhbEZ1bmN0aW9uKGxpc3QsIGN1cnJlbnRGb2N1cywgY3VycmVudEZvY3VzID8gZGlzYWJsZUxpc3RXcmFwIDogZmFsc2UpO1xuICB3aGlsZSAobmV4dEZvY3VzKSB7XG4gICAgLy8gUHJldmVudCBpbmZpbml0ZSBsb29wLlxuICAgIGlmIChuZXh0Rm9jdXMgPT09IGxpc3QuZmlyc3RDaGlsZCkge1xuICAgICAgaWYgKHdyYXBwZWRPbmNlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHdyYXBwZWRPbmNlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBTYW1lIGxvZ2ljIGFzIHVzZUF1dG9jb21wbGV0ZS5qc1xuICAgIGNvbnN0IG5leHRGb2N1c0Rpc2FibGVkID0gZGlzYWJsZWRJdGVtc0ZvY3VzYWJsZSA/IGZhbHNlIDogbmV4dEZvY3VzLmRpc2FibGVkIHx8IG5leHRGb2N1cy5nZXRBdHRyaWJ1dGUoJ2FyaWEtZGlzYWJsZWQnKSA9PT0gJ3RydWUnO1xuICAgIGlmICghbmV4dEZvY3VzLmhhc0F0dHJpYnV0ZSgndGFiaW5kZXgnKSB8fCAhdGV4dENyaXRlcmlhTWF0Y2hlcyhuZXh0Rm9jdXMsIHRleHRDcml0ZXJpYSkgfHwgbmV4dEZvY3VzRGlzYWJsZWQpIHtcbiAgICAgIC8vIE1vdmUgdG8gdGhlIG5leHQgZWxlbWVudC5cbiAgICAgIG5leHRGb2N1cyA9IHRyYXZlcnNhbEZ1bmN0aW9uKGxpc3QsIG5leHRGb2N1cywgZGlzYWJsZUxpc3RXcmFwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV4dEZvY3VzLmZvY3VzKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEEgcGVybWFuZW50bHkgZGlzcGxheWVkIG1lbnUgZm9sbG93aW5nIGh0dHBzOi8vd3d3LnczLm9yZy9XQUkvQVJJQS9hcGcvcGF0dGVybnMvbWVudS1idXR0b24vLlxuICogSXQncyBleHBvc2VkIHRvIGhlbHAgY3VzdG9taXphdGlvbiBvZiB0aGUgW2BNZW51YF0oL21hdGVyaWFsLXVpL2FwaS9tZW51LykgY29tcG9uZW50IGlmIHlvdVxuICogdXNlIGl0IHNlcGFyYXRlbHkgeW91IG5lZWQgdG8gbW92ZSBmb2N1cyBpbnRvIHRoZSBjb21wb25lbnQgbWFudWFsbHkuIE9uY2VcbiAqIHRoZSBmb2N1cyBpcyBwbGFjZWQgaW5zaWRlIHRoZSBjb21wb25lbnQgaXQgaXMgZnVsbHkga2V5Ym9hcmQgYWNjZXNzaWJsZS5cbiAqL1xuY29uc3QgTWVudUxpc3QgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBNZW51TGlzdChwcm9wcywgcmVmKSB7XG4gIGNvbnN0IHtcbiAgICAgIC8vIHByaXZhdGVcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9wcm9wLXR5cGVzXG4gICAgICBhY3Rpb25zLFxuICAgICAgYXV0b0ZvY3VzID0gZmFsc2UsXG4gICAgICBhdXRvRm9jdXNJdGVtID0gZmFsc2UsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGRpc2FibGVkSXRlbXNGb2N1c2FibGUgPSBmYWxzZSxcbiAgICAgIGRpc2FibGVMaXN0V3JhcCA9IGZhbHNlLFxuICAgICAgb25LZXlEb3duLFxuICAgICAgdmFyaWFudCA9ICdzZWxlY3RlZE1lbnUnXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IGxpc3RSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IHRleHRDcml0ZXJpYVJlZiA9IFJlYWN0LnVzZVJlZih7XG4gICAga2V5czogW10sXG4gICAgcmVwZWF0aW5nOiB0cnVlLFxuICAgIHByZXZpb3VzS2V5TWF0Y2hlZDogdHJ1ZSxcbiAgICBsYXN0VGltZTogbnVsbFxuICB9KTtcbiAgdXNlRW5oYW5jZWRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChhdXRvRm9jdXMpIHtcbiAgICAgIGxpc3RSZWYuY3VycmVudC5mb2N1cygpO1xuICAgIH1cbiAgfSwgW2F1dG9Gb2N1c10pO1xuICBSZWFjdC51c2VJbXBlcmF0aXZlSGFuZGxlKGFjdGlvbnMsICgpID0+ICh7XG4gICAgYWRqdXN0U3R5bGVGb3JTY3JvbGxiYXI6IChjb250YWluZXJFbGVtZW50LCB7XG4gICAgICBkaXJlY3Rpb25cbiAgICB9KSA9PiB7XG4gICAgICAvLyBMZXQncyBpZ25vcmUgdGhhdCBwaWVjZSBvZiBsb2dpYyBpZiB1c2VycyBhcmUgYWxyZWFkeSBvdmVycmlkaW5nIHRoZSB3aWR0aFxuICAgICAgLy8gb2YgdGhlIG1lbnUuXG4gICAgICBjb25zdCBub0V4cGxpY2l0V2lkdGggPSAhbGlzdFJlZi5jdXJyZW50LnN0eWxlLndpZHRoO1xuICAgICAgaWYgKGNvbnRhaW5lckVsZW1lbnQuY2xpZW50SGVpZ2h0IDwgbGlzdFJlZi5jdXJyZW50LmNsaWVudEhlaWdodCAmJiBub0V4cGxpY2l0V2lkdGgpIHtcbiAgICAgICAgY29uc3Qgc2Nyb2xsYmFyU2l6ZSA9IGAke2dldFNjcm9sbGJhclNpemUob3duZXJEb2N1bWVudChjb250YWluZXJFbGVtZW50KSl9cHhgO1xuICAgICAgICBsaXN0UmVmLmN1cnJlbnQuc3R5bGVbZGlyZWN0aW9uID09PSAncnRsJyA/ICdwYWRkaW5nTGVmdCcgOiAncGFkZGluZ1JpZ2h0J10gPSBzY3JvbGxiYXJTaXplO1xuICAgICAgICBsaXN0UmVmLmN1cnJlbnQuc3R5bGUud2lkdGggPSBgY2FsYygxMDAlICsgJHtzY3JvbGxiYXJTaXplfSlgO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxpc3RSZWYuY3VycmVudDtcbiAgICB9XG4gIH0pLCBbXSk7XG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSBldmVudCA9PiB7XG4gICAgY29uc3QgbGlzdCA9IGxpc3RSZWYuY3VycmVudDtcbiAgICBjb25zdCBrZXkgPSBldmVudC5rZXk7XG4gICAgLyoqXG4gICAgICogQHR5cGUge0VsZW1lbnR9IC0gd2lsbCBhbHdheXMgYmUgZGVmaW5lZCBzaW5jZSB3ZSBhcmUgaW4gYSBrZXlkb3duIGhhbmRsZXJcbiAgICAgKiBhdHRhY2hlZCB0byBhbiBlbGVtZW50LiBBIGtleWRvd24gZXZlbnQgaXMgZWl0aGVyIGRpc3BhdGNoZWQgdG8gdGhlIGFjdGl2ZUVsZW1lbnRcbiAgICAgKiBvciBkb2N1bWVudC5ib2R5IG9yIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC4gT25seSB0aGUgZmlyc3QgY2FzZSB3aWxsXG4gICAgICogdHJpZ2dlciB0aGlzIHNwZWNpZmljIGhhbmRsZXIuXG4gICAgICovXG4gICAgY29uc3QgY3VycmVudEZvY3VzID0gb3duZXJEb2N1bWVudChsaXN0KS5hY3RpdmVFbGVtZW50O1xuICAgIGlmIChrZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICAvLyBQcmV2ZW50IHNjcm9sbCBvZiB0aGUgcGFnZVxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIG1vdmVGb2N1cyhsaXN0LCBjdXJyZW50Rm9jdXMsIGRpc2FibGVMaXN0V3JhcCwgZGlzYWJsZWRJdGVtc0ZvY3VzYWJsZSwgbmV4dEl0ZW0pO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBtb3ZlRm9jdXMobGlzdCwgY3VycmVudEZvY3VzLCBkaXNhYmxlTGlzdFdyYXAsIGRpc2FibGVkSXRlbXNGb2N1c2FibGUsIHByZXZpb3VzSXRlbSk7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdIb21lJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIG1vdmVGb2N1cyhsaXN0LCBudWxsLCBkaXNhYmxlTGlzdFdyYXAsIGRpc2FibGVkSXRlbXNGb2N1c2FibGUsIG5leHRJdGVtKTtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ0VuZCcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBtb3ZlRm9jdXMobGlzdCwgbnVsbCwgZGlzYWJsZUxpc3RXcmFwLCBkaXNhYmxlZEl0ZW1zRm9jdXNhYmxlLCBwcmV2aW91c0l0ZW0pO1xuICAgIH0gZWxzZSBpZiAoa2V5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgY3JpdGVyaWEgPSB0ZXh0Q3JpdGVyaWFSZWYuY3VycmVudDtcbiAgICAgIGNvbnN0IGxvd2VyS2V5ID0ga2V5LnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCBjdXJyVGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgaWYgKGNyaXRlcmlhLmtleXMubGVuZ3RoID4gMCkge1xuICAgICAgICAvLyBSZXNldFxuICAgICAgICBpZiAoY3VyclRpbWUgLSBjcml0ZXJpYS5sYXN0VGltZSA+IDUwMCkge1xuICAgICAgICAgIGNyaXRlcmlhLmtleXMgPSBbXTtcbiAgICAgICAgICBjcml0ZXJpYS5yZXBlYXRpbmcgPSB0cnVlO1xuICAgICAgICAgIGNyaXRlcmlhLnByZXZpb3VzS2V5TWF0Y2hlZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoY3JpdGVyaWEucmVwZWF0aW5nICYmIGxvd2VyS2V5ICE9PSBjcml0ZXJpYS5rZXlzWzBdKSB7XG4gICAgICAgICAgY3JpdGVyaWEucmVwZWF0aW5nID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNyaXRlcmlhLmxhc3RUaW1lID0gY3VyclRpbWU7XG4gICAgICBjcml0ZXJpYS5rZXlzLnB1c2gobG93ZXJLZXkpO1xuICAgICAgY29uc3Qga2VlcEZvY3VzT25DdXJyZW50ID0gY3VycmVudEZvY3VzICYmICFjcml0ZXJpYS5yZXBlYXRpbmcgJiYgdGV4dENyaXRlcmlhTWF0Y2hlcyhjdXJyZW50Rm9jdXMsIGNyaXRlcmlhKTtcbiAgICAgIGlmIChjcml0ZXJpYS5wcmV2aW91c0tleU1hdGNoZWQgJiYgKGtlZXBGb2N1c09uQ3VycmVudCB8fCBtb3ZlRm9jdXMobGlzdCwgY3VycmVudEZvY3VzLCBmYWxzZSwgZGlzYWJsZWRJdGVtc0ZvY3VzYWJsZSwgbmV4dEl0ZW0sIGNyaXRlcmlhKSkpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNyaXRlcmlhLnByZXZpb3VzS2V5TWF0Y2hlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAob25LZXlEb3duKSB7XG4gICAgICBvbktleURvd24oZXZlbnQpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgaGFuZGxlUmVmID0gdXNlRm9ya1JlZihsaXN0UmVmLCByZWYpO1xuXG4gIC8qKlxuICAgKiB0aGUgaW5kZXggb2YgdGhlIGl0ZW0gc2hvdWxkIHJlY2VpdmUgZm9jdXNcbiAgICogaW4gYSBgdmFyaWFudD1cInNlbGVjdGVkTWVudVwiYCBpdCdzIHRoZSBmaXJzdCBgc2VsZWN0ZWRgIGl0ZW1cbiAgICogb3RoZXJ3aXNlIGl0J3MgdGhlIHZlcnkgZmlyc3QgaXRlbS5cbiAgICovXG4gIGxldCBhY3RpdmVJdGVtSW5kZXggPSAtMTtcbiAgLy8gc2luY2Ugd2UgaW5qZWN0IGZvY3VzIHJlbGF0ZWQgcHJvcHMgaW50byBjaGlsZHJlbiB3ZSBoYXZlIHRvIGRvIGEgbG9va2FoZWFkXG4gIC8vIHRvIGNoZWNrIGlmIHRoZXJlIGlzIGEgYHNlbGVjdGVkYCBpdGVtLiBXZSdyZSBsb29raW5nIGZvciB0aGUgbGFzdCBgc2VsZWN0ZWRgXG4gIC8vIGl0ZW0gYW5kIHVzZSB0aGUgZmlyc3QgdmFsaWQgaXRlbSBhcyBhIGZhbGxiYWNrXG4gIFJlYWN0LkNoaWxkcmVuLmZvckVhY2goY2hpbGRyZW4sIChjaGlsZCwgaW5kZXgpID0+IHtcbiAgICBpZiAoISAvKiNfX1BVUkVfXyovUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGQpKSB7XG4gICAgICBpZiAoYWN0aXZlSXRlbUluZGV4ID09PSBpbmRleCkge1xuICAgICAgICBhY3RpdmVJdGVtSW5kZXggKz0gMTtcbiAgICAgICAgaWYgKGFjdGl2ZUl0ZW1JbmRleCA+PSBjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICAvLyB0aGVyZSBhcmUgbm8gZm9jdXNhYmxlIGl0ZW1zIHdpdGhpbiB0aGUgbGlzdC5cbiAgICAgICAgICBhY3RpdmVJdGVtSW5kZXggPSAtMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKGlzRnJhZ21lbnQoY2hpbGQpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoW1wiTVVJOiBUaGUgTWVudSBjb21wb25lbnQgZG9lc24ndCBhY2NlcHQgYSBGcmFnbWVudCBhcyBhIGNoaWxkLlwiLCAnQ29uc2lkZXIgcHJvdmlkaW5nIGFuIGFycmF5IGluc3RlYWQuJ10uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWNoaWxkLnByb3BzLmRpc2FibGVkKSB7XG4gICAgICBpZiAodmFyaWFudCA9PT0gJ3NlbGVjdGVkTWVudScgJiYgY2hpbGQucHJvcHMuc2VsZWN0ZWQpIHtcbiAgICAgICAgYWN0aXZlSXRlbUluZGV4ID0gaW5kZXg7XG4gICAgICB9IGVsc2UgaWYgKGFjdGl2ZUl0ZW1JbmRleCA9PT0gLTEpIHtcbiAgICAgICAgYWN0aXZlSXRlbUluZGV4ID0gaW5kZXg7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChhY3RpdmVJdGVtSW5kZXggPT09IGluZGV4ICYmIChjaGlsZC5wcm9wcy5kaXNhYmxlZCB8fCBjaGlsZC5wcm9wcy5tdWlTa2lwTGlzdEhpZ2hsaWdodCB8fCBjaGlsZC50eXBlLm11aVNraXBMaXN0SGlnaGxpZ2h0KSkge1xuICAgICAgYWN0aXZlSXRlbUluZGV4ICs9IDE7XG4gICAgICBpZiAoYWN0aXZlSXRlbUluZGV4ID49IGNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAvLyB0aGVyZSBhcmUgbm8gZm9jdXNhYmxlIGl0ZW1zIHdpdGhpbiB0aGUgbGlzdC5cbiAgICAgICAgYWN0aXZlSXRlbUluZGV4ID0gLTE7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgY29uc3QgaXRlbXMgPSBSZWFjdC5DaGlsZHJlbi5tYXAoY2hpbGRyZW4sIChjaGlsZCwgaW5kZXgpID0+IHtcbiAgICBpZiAoaW5kZXggPT09IGFjdGl2ZUl0ZW1JbmRleCkge1xuICAgICAgY29uc3QgbmV3Q2hpbGRQcm9wcyA9IHt9O1xuICAgICAgaWYgKGF1dG9Gb2N1c0l0ZW0pIHtcbiAgICAgICAgbmV3Q2hpbGRQcm9wcy5hdXRvRm9jdXMgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGNoaWxkLnByb3BzLnRhYkluZGV4ID09PSB1bmRlZmluZWQgJiYgdmFyaWFudCA9PT0gJ3NlbGVjdGVkTWVudScpIHtcbiAgICAgICAgbmV3Q2hpbGRQcm9wcy50YWJJbmRleCA9IDA7XG4gICAgICB9XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChjaGlsZCwgbmV3Q2hpbGRQcm9wcyk7XG4gICAgfVxuICAgIHJldHVybiBjaGlsZDtcbiAgfSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChMaXN0LCBfZXh0ZW5kcyh7XG4gICAgcm9sZTogXCJtZW51XCIsXG4gICAgcmVmOiBoYW5kbGVSZWYsXG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgb25LZXlEb3duOiBoYW5kbGVLZXlEb3duLFxuICAgIHRhYkluZGV4OiBhdXRvRm9jdXMgPyAwIDogLTFcbiAgfSwgb3RoZXIsIHtcbiAgICBjaGlsZHJlbjogaXRlbXNcbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBNZW51TGlzdC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFdhcm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIOKUglxuICAvLyDilIIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICDilIJcbiAgLy8g4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHdpbGwgZm9jdXMgdGhlIGBbcm9sZT1cIm1lbnVcIl1gIGNvbnRhaW5lciBhbmQgbW92ZSBpbnRvIHRhYiBvcmRlci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHdpbGwgZm9jdXMgdGhlIGZpcnN0IG1lbnVpdGVtIGlmIGB2YXJpYW50PVwibWVudVwiYCBvciBzZWxlY3RlZCBpdGVtXG4gICAqIGlmIGB2YXJpYW50PVwic2VsZWN0ZWRNZW51XCJgLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgYXV0b0ZvY3VzSXRlbTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBNZW51TGlzdCBjb250ZW50cywgbm9ybWFsbHkgYE1lbnVJdGVtYHMuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHdpbGwgYWxsb3cgZm9jdXMgb24gZGlzYWJsZWQgaXRlbXMuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlZEl0ZW1zRm9jdXNhYmxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIG1lbnUgaXRlbXMgd2lsbCBub3Qgd3JhcCBmb2N1cy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVMaXN0V3JhcDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbktleURvd246IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogVGhlIHZhcmlhbnQgdG8gdXNlLiBVc2UgYG1lbnVgIHRvIHByZXZlbnQgc2VsZWN0ZWQgaXRlbXMgZnJvbSBpbXBhY3RpbmcgdGhlIGluaXRpYWwgZm9jdXNcbiAgICogYW5kIHRoZSB2ZXJ0aWNhbCBhbGlnbm1lbnQgcmVsYXRpdmUgdG8gdGhlIGFuY2hvciBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCAnc2VsZWN0ZWRNZW51J1xuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzLm9uZU9mKFsnbWVudScsICdzZWxlY3RlZE1lbnUnXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBNZW51TGlzdDsiLCJmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkge1xuICByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7XG4gICAgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDtcbiAgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpO1xufVxuZXhwb3J0IHsgX3NldFByb3RvdHlwZU9mIGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHQsIG8pIHtcbiAgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKG8ucHJvdG90eXBlKSwgdC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSB0LCBzZXRQcm90b3R5cGVPZih0LCBvKTtcbn1cbmV4cG9ydCB7IF9pbmhlcml0c0xvb3NlIGFzIGRlZmF1bHQgfTsiLCJleHBvcnQgZGVmYXVsdCB7XG4gIGRpc2FibGVkOiBmYWxzZVxufTsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuZXhwb3J0IGRlZmF1bHQgUmVhY3QuY3JlYXRlQ29udGV4dChudWxsKTsiLCJleHBvcnQgdmFyIGZvcmNlUmVmbG93ID0gZnVuY3Rpb24gZm9yY2VSZWZsb3cobm9kZSkge1xuICByZXR1cm4gbm9kZS5zY3JvbGxUb3A7XG59OyIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlXCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IGNvbmZpZyBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgeyB0aW1lb3V0c1NoYXBlIH0gZnJvbSAnLi91dGlscy9Qcm9wVHlwZXMnO1xuaW1wb3J0IFRyYW5zaXRpb25Hcm91cENvbnRleHQgZnJvbSAnLi9UcmFuc2l0aW9uR3JvdXBDb250ZXh0JztcbmltcG9ydCB7IGZvcmNlUmVmbG93IH0gZnJvbSAnLi91dGlscy9yZWZsb3cnO1xuZXhwb3J0IHZhciBVTk1PVU5URUQgPSAndW5tb3VudGVkJztcbmV4cG9ydCB2YXIgRVhJVEVEID0gJ2V4aXRlZCc7XG5leHBvcnQgdmFyIEVOVEVSSU5HID0gJ2VudGVyaW5nJztcbmV4cG9ydCB2YXIgRU5URVJFRCA9ICdlbnRlcmVkJztcbmV4cG9ydCB2YXIgRVhJVElORyA9ICdleGl0aW5nJztcbi8qKlxuICogVGhlIFRyYW5zaXRpb24gY29tcG9uZW50IGxldHMgeW91IGRlc2NyaWJlIGEgdHJhbnNpdGlvbiBmcm9tIG9uZSBjb21wb25lbnRcbiAqIHN0YXRlIHRvIGFub3RoZXIgX292ZXIgdGltZV8gd2l0aCBhIHNpbXBsZSBkZWNsYXJhdGl2ZSBBUEkuIE1vc3QgY29tbW9ubHlcbiAqIGl0J3MgdXNlZCB0byBhbmltYXRlIHRoZSBtb3VudGluZyBhbmQgdW5tb3VudGluZyBvZiBhIGNvbXBvbmVudCwgYnV0IGNhbiBhbHNvXG4gKiBiZSB1c2VkIHRvIGRlc2NyaWJlIGluLXBsYWNlIHRyYW5zaXRpb24gc3RhdGVzIGFzIHdlbGwuXG4gKlxuICogLS0tXG4gKlxuICogKipOb3RlKio6IGBUcmFuc2l0aW9uYCBpcyBhIHBsYXRmb3JtLWFnbm9zdGljIGJhc2UgY29tcG9uZW50LiBJZiB5b3UncmUgdXNpbmdcbiAqIHRyYW5zaXRpb25zIGluIENTUywgeW91J2xsIHByb2JhYmx5IHdhbnQgdG8gdXNlXG4gKiBbYENTU1RyYW5zaXRpb25gXShodHRwczovL3JlYWN0Y29tbXVuaXR5Lm9yZy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2Nzcy10cmFuc2l0aW9uKVxuICogaW5zdGVhZC4gSXQgaW5oZXJpdHMgYWxsIHRoZSBmZWF0dXJlcyBvZiBgVHJhbnNpdGlvbmAsIGJ1dCBjb250YWluc1xuICogYWRkaXRpb25hbCBmZWF0dXJlcyBuZWNlc3NhcnkgdG8gcGxheSBuaWNlIHdpdGggQ1NTIHRyYW5zaXRpb25zIChoZW5jZSB0aGVcbiAqIG5hbWUgb2YgdGhlIGNvbXBvbmVudCkuXG4gKlxuICogLS0tXG4gKlxuICogQnkgZGVmYXVsdCB0aGUgYFRyYW5zaXRpb25gIGNvbXBvbmVudCBkb2VzIG5vdCBhbHRlciB0aGUgYmVoYXZpb3Igb2YgdGhlXG4gKiBjb21wb25lbnQgaXQgcmVuZGVycywgaXQgb25seSB0cmFja3MgXCJlbnRlclwiIGFuZCBcImV4aXRcIiBzdGF0ZXMgZm9yIHRoZVxuICogY29tcG9uZW50cy4gSXQncyB1cCB0byB5b3UgdG8gZ2l2ZSBtZWFuaW5nIGFuZCBlZmZlY3QgdG8gdGhvc2Ugc3RhdGVzLiBGb3JcbiAqIGV4YW1wbGUgd2UgY2FuIGFkZCBzdHlsZXMgdG8gYSBjb21wb25lbnQgd2hlbiBpdCBlbnRlcnMgb3IgZXhpdHM6XG4gKlxuICogYGBganN4XG4gKiBpbXBvcnQgeyBUcmFuc2l0aW9uIH0gZnJvbSAncmVhY3QtdHJhbnNpdGlvbi1ncm91cCc7XG4gKlxuICogY29uc3QgZHVyYXRpb24gPSAzMDA7XG4gKlxuICogY29uc3QgZGVmYXVsdFN0eWxlID0ge1xuICogICB0cmFuc2l0aW9uOiBgb3BhY2l0eSAke2R1cmF0aW9ufW1zIGVhc2UtaW4tb3V0YCxcbiAqICAgb3BhY2l0eTogMCxcbiAqIH1cbiAqXG4gKiBjb25zdCB0cmFuc2l0aW9uU3R5bGVzID0ge1xuICogICBlbnRlcmluZzogeyBvcGFjaXR5OiAxIH0sXG4gKiAgIGVudGVyZWQ6ICB7IG9wYWNpdHk6IDEgfSxcbiAqICAgZXhpdGluZzogIHsgb3BhY2l0eTogMCB9LFxuICogICBleGl0ZWQ6ICB7IG9wYWNpdHk6IDAgfSxcbiAqIH07XG4gKlxuICogY29uc3QgRmFkZSA9ICh7IGluOiBpblByb3AgfSkgPT4gKFxuICogICA8VHJhbnNpdGlvbiBpbj17aW5Qcm9wfSB0aW1lb3V0PXtkdXJhdGlvbn0+XG4gKiAgICAge3N0YXRlID0+IChcbiAqICAgICAgIDxkaXYgc3R5bGU9e3tcbiAqICAgICAgICAgLi4uZGVmYXVsdFN0eWxlLFxuICogICAgICAgICAuLi50cmFuc2l0aW9uU3R5bGVzW3N0YXRlXVxuICogICAgICAgfX0+XG4gKiAgICAgICAgIEknbSBhIGZhZGUgVHJhbnNpdGlvbiFcbiAqICAgICAgIDwvZGl2PlxuICogICAgICl9XG4gKiAgIDwvVHJhbnNpdGlvbj5cbiAqICk7XG4gKiBgYGBcbiAqXG4gKiBUaGVyZSBhcmUgNCBtYWluIHN0YXRlcyBhIFRyYW5zaXRpb24gY2FuIGJlIGluOlxuICogIC0gYCdlbnRlcmluZydgXG4gKiAgLSBgJ2VudGVyZWQnYFxuICogIC0gYCdleGl0aW5nJ2BcbiAqICAtIGAnZXhpdGVkJ2BcbiAqXG4gKiBUcmFuc2l0aW9uIHN0YXRlIGlzIHRvZ2dsZWQgdmlhIHRoZSBgaW5gIHByb3AuIFdoZW4gYHRydWVgIHRoZSBjb21wb25lbnRcbiAqIGJlZ2lucyB0aGUgXCJFbnRlclwiIHN0YWdlLiBEdXJpbmcgdGhpcyBzdGFnZSwgdGhlIGNvbXBvbmVudCB3aWxsIHNoaWZ0IGZyb21cbiAqIGl0cyBjdXJyZW50IHRyYW5zaXRpb24gc3RhdGUsIHRvIGAnZW50ZXJpbmcnYCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZVxuICogdHJhbnNpdGlvbiBhbmQgdGhlbiB0byB0aGUgYCdlbnRlcmVkJ2Agc3RhZ2Ugb25jZSBpdCdzIGNvbXBsZXRlLiBMZXQncyB0YWtlXG4gKiB0aGUgZm9sbG93aW5nIGV4YW1wbGUgKHdlJ2xsIHVzZSB0aGVcbiAqIFt1c2VTdGF0ZV0oaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL2hvb2tzLXJlZmVyZW5jZS5odG1sI3VzZXN0YXRlKSBob29rKTpcbiAqXG4gKiBgYGBqc3hcbiAqIGZ1bmN0aW9uIEFwcCgpIHtcbiAqICAgY29uc3QgW2luUHJvcCwgc2V0SW5Qcm9wXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAqICAgcmV0dXJuIChcbiAqICAgICA8ZGl2PlxuICogICAgICAgPFRyYW5zaXRpb24gaW49e2luUHJvcH0gdGltZW91dD17NTAwfT5cbiAqICAgICAgICAge3N0YXRlID0+IChcbiAqICAgICAgICAgICAvLyAuLi5cbiAqICAgICAgICAgKX1cbiAqICAgICAgIDwvVHJhbnNpdGlvbj5cbiAqICAgICAgIDxidXR0b24gb25DbGljaz17KCkgPT4gc2V0SW5Qcm9wKHRydWUpfT5cbiAqICAgICAgICAgQ2xpY2sgdG8gRW50ZXJcbiAqICAgICAgIDwvYnV0dG9uPlxuICogICAgIDwvZGl2PlxuICogICApO1xuICogfVxuICogYGBgXG4gKlxuICogV2hlbiB0aGUgYnV0dG9uIGlzIGNsaWNrZWQgdGhlIGNvbXBvbmVudCB3aWxsIHNoaWZ0IHRvIHRoZSBgJ2VudGVyaW5nJ2Agc3RhdGVcbiAqIGFuZCBzdGF5IHRoZXJlIGZvciA1MDBtcyAodGhlIHZhbHVlIG9mIGB0aW1lb3V0YCkgYmVmb3JlIGl0IGZpbmFsbHkgc3dpdGNoZXNcbiAqIHRvIGAnZW50ZXJlZCdgLlxuICpcbiAqIFdoZW4gYGluYCBpcyBgZmFsc2VgIHRoZSBzYW1lIHRoaW5nIGhhcHBlbnMgZXhjZXB0IHRoZSBzdGF0ZSBtb3ZlcyBmcm9tXG4gKiBgJ2V4aXRpbmcnYCB0byBgJ2V4aXRlZCdgLlxuICovXG5cbnZhciBUcmFuc2l0aW9uID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0c0xvb3NlKFRyYW5zaXRpb24sIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFRyYW5zaXRpb24ocHJvcHMsIGNvbnRleHQpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9SZWFjdCRDb21wb25lbnQuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCkgfHwgdGhpcztcbiAgICB2YXIgcGFyZW50R3JvdXAgPSBjb250ZXh0OyAvLyBJbiB0aGUgY29udGV4dCBvZiBhIFRyYW5zaXRpb25Hcm91cCBhbGwgZW50ZXJzIGFyZSByZWFsbHkgYXBwZWFyc1xuXG4gICAgdmFyIGFwcGVhciA9IHBhcmVudEdyb3VwICYmICFwYXJlbnRHcm91cC5pc01vdW50aW5nID8gcHJvcHMuZW50ZXIgOiBwcm9wcy5hcHBlYXI7XG4gICAgdmFyIGluaXRpYWxTdGF0dXM7XG4gICAgX3RoaXMuYXBwZWFyU3RhdHVzID0gbnVsbDtcblxuICAgIGlmIChwcm9wcy5pbikge1xuICAgICAgaWYgKGFwcGVhcikge1xuICAgICAgICBpbml0aWFsU3RhdHVzID0gRVhJVEVEO1xuICAgICAgICBfdGhpcy5hcHBlYXJTdGF0dXMgPSBFTlRFUklORztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluaXRpYWxTdGF0dXMgPSBFTlRFUkVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocHJvcHMudW5tb3VudE9uRXhpdCB8fCBwcm9wcy5tb3VudE9uRW50ZXIpIHtcbiAgICAgICAgaW5pdGlhbFN0YXR1cyA9IFVOTU9VTlRFRDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluaXRpYWxTdGF0dXMgPSBFWElURUQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBzdGF0dXM6IGluaXRpYWxTdGF0dXNcbiAgICB9O1xuICAgIF90aGlzLm5leHRDYWxsYmFjayA9IG51bGw7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgVHJhbnNpdGlvbi5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBmdW5jdGlvbiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoX3JlZiwgcHJldlN0YXRlKSB7XG4gICAgdmFyIG5leHRJbiA9IF9yZWYuaW47XG5cbiAgICBpZiAobmV4dEluICYmIHByZXZTdGF0ZS5zdGF0dXMgPT09IFVOTU9VTlRFRCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzOiBFWElURURcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH0gLy8gZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUocHJldlByb3BzKSB7XG4gIC8vICAgbGV0IG5leHRTdGF0dXMgPSBudWxsXG4gIC8vICAgaWYgKHByZXZQcm9wcyAhPT0gdGhpcy5wcm9wcykge1xuICAvLyAgICAgY29uc3QgeyBzdGF0dXMgfSA9IHRoaXMuc3RhdGVcbiAgLy8gICAgIGlmICh0aGlzLnByb3BzLmluKSB7XG4gIC8vICAgICAgIGlmIChzdGF0dXMgIT09IEVOVEVSSU5HICYmIHN0YXR1cyAhPT0gRU5URVJFRCkge1xuICAvLyAgICAgICAgIG5leHRTdGF0dXMgPSBFTlRFUklOR1xuICAvLyAgICAgICB9XG4gIC8vICAgICB9IGVsc2Uge1xuICAvLyAgICAgICBpZiAoc3RhdHVzID09PSBFTlRFUklORyB8fCBzdGF0dXMgPT09IEVOVEVSRUQpIHtcbiAgLy8gICAgICAgICBuZXh0U3RhdHVzID0gRVhJVElOR1xuICAvLyAgICAgICB9XG4gIC8vICAgICB9XG4gIC8vICAgfVxuICAvLyAgIHJldHVybiB7IG5leHRTdGF0dXMgfVxuICAvLyB9XG4gIDtcblxuICB2YXIgX3Byb3RvID0gVHJhbnNpdGlvbi5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy51cGRhdGVTdGF0dXModHJ1ZSwgdGhpcy5hcHBlYXJTdGF0dXMpO1xuICB9O1xuXG4gIF9wcm90by5jb21wb25lbnREaWRVcGRhdGUgPSBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzKSB7XG4gICAgdmFyIG5leHRTdGF0dXMgPSBudWxsO1xuXG4gICAgaWYgKHByZXZQcm9wcyAhPT0gdGhpcy5wcm9wcykge1xuICAgICAgdmFyIHN0YXR1cyA9IHRoaXMuc3RhdGUuc3RhdHVzO1xuXG4gICAgICBpZiAodGhpcy5wcm9wcy5pbikge1xuICAgICAgICBpZiAoc3RhdHVzICE9PSBFTlRFUklORyAmJiBzdGF0dXMgIT09IEVOVEVSRUQpIHtcbiAgICAgICAgICBuZXh0U3RhdHVzID0gRU5URVJJTkc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChzdGF0dXMgPT09IEVOVEVSSU5HIHx8IHN0YXR1cyA9PT0gRU5URVJFRCkge1xuICAgICAgICAgIG5leHRTdGF0dXMgPSBFWElUSU5HO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVTdGF0dXMoZmFsc2UsIG5leHRTdGF0dXMpO1xuICB9O1xuXG4gIF9wcm90by5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMuY2FuY2VsTmV4dENhbGxiYWNrKCk7XG4gIH07XG5cbiAgX3Byb3RvLmdldFRpbWVvdXRzID0gZnVuY3Rpb24gZ2V0VGltZW91dHMoKSB7XG4gICAgdmFyIHRpbWVvdXQgPSB0aGlzLnByb3BzLnRpbWVvdXQ7XG4gICAgdmFyIGV4aXQsIGVudGVyLCBhcHBlYXI7XG4gICAgZXhpdCA9IGVudGVyID0gYXBwZWFyID0gdGltZW91dDtcblxuICAgIGlmICh0aW1lb3V0ICE9IG51bGwgJiYgdHlwZW9mIHRpbWVvdXQgIT09ICdudW1iZXInKSB7XG4gICAgICBleGl0ID0gdGltZW91dC5leGl0O1xuICAgICAgZW50ZXIgPSB0aW1lb3V0LmVudGVyOyAvLyBUT0RPOiByZW1vdmUgZmFsbGJhY2sgZm9yIG5leHQgbWFqb3JcblxuICAgICAgYXBwZWFyID0gdGltZW91dC5hcHBlYXIgIT09IHVuZGVmaW5lZCA/IHRpbWVvdXQuYXBwZWFyIDogZW50ZXI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGV4aXQ6IGV4aXQsXG4gICAgICBlbnRlcjogZW50ZXIsXG4gICAgICBhcHBlYXI6IGFwcGVhclxuICAgIH07XG4gIH07XG5cbiAgX3Byb3RvLnVwZGF0ZVN0YXR1cyA9IGZ1bmN0aW9uIHVwZGF0ZVN0YXR1cyhtb3VudGluZywgbmV4dFN0YXR1cykge1xuICAgIGlmIChtb3VudGluZyA9PT0gdm9pZCAwKSB7XG4gICAgICBtb3VudGluZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChuZXh0U3RhdHVzICE9PSBudWxsKSB7XG4gICAgICAvLyBuZXh0U3RhdHVzIHdpbGwgYWx3YXlzIGJlIEVOVEVSSU5HIG9yIEVYSVRJTkcuXG4gICAgICB0aGlzLmNhbmNlbE5leHRDYWxsYmFjaygpO1xuXG4gICAgICBpZiAobmV4dFN0YXR1cyA9PT0gRU5URVJJTkcpIHtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMudW5tb3VudE9uRXhpdCB8fCB0aGlzLnByb3BzLm1vdW50T25FbnRlcikge1xuICAgICAgICAgIHZhciBub2RlID0gdGhpcy5wcm9wcy5ub2RlUmVmID8gdGhpcy5wcm9wcy5ub2RlUmVmLmN1cnJlbnQgOiBSZWFjdERPTS5maW5kRE9NTm9kZSh0aGlzKTsgLy8gaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0anMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9wdWxsLzc0OVxuICAgICAgICAgIC8vIFdpdGggdW5tb3VudE9uRXhpdCBvciBtb3VudE9uRW50ZXIsIHRoZSBlbnRlciBhbmltYXRpb24gc2hvdWxkIGhhcHBlbiBhdCB0aGUgdHJhbnNpdGlvbiBiZXR3ZWVuIGBleGl0ZWRgIGFuZCBgZW50ZXJpbmdgLlxuICAgICAgICAgIC8vIFRvIG1ha2UgdGhlIGFuaW1hdGlvbiBoYXBwZW4sICB3ZSBoYXZlIHRvIHNlcGFyYXRlIGVhY2ggcmVuZGVyaW5nIGFuZCBhdm9pZCBiZWluZyBwcm9jZXNzZWQgYXMgYmF0Y2hlZC5cblxuICAgICAgICAgIGlmIChub2RlKSBmb3JjZVJlZmxvdyhub2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucGVyZm9ybUVudGVyKG1vdW50aW5nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucGVyZm9ybUV4aXQoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMudW5tb3VudE9uRXhpdCAmJiB0aGlzLnN0YXRlLnN0YXR1cyA9PT0gRVhJVEVEKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgc3RhdHVzOiBVTk1PVU5URURcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucGVyZm9ybUVudGVyID0gZnVuY3Rpb24gcGVyZm9ybUVudGVyKG1vdW50aW5nKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICB2YXIgZW50ZXIgPSB0aGlzLnByb3BzLmVudGVyO1xuICAgIHZhciBhcHBlYXJpbmcgPSB0aGlzLmNvbnRleHQgPyB0aGlzLmNvbnRleHQuaXNNb3VudGluZyA6IG1vdW50aW5nO1xuXG4gICAgdmFyIF9yZWYyID0gdGhpcy5wcm9wcy5ub2RlUmVmID8gW2FwcGVhcmluZ10gOiBbUmVhY3RET00uZmluZERPTU5vZGUodGhpcyksIGFwcGVhcmluZ10sXG4gICAgICAgIG1heWJlTm9kZSA9IF9yZWYyWzBdLFxuICAgICAgICBtYXliZUFwcGVhcmluZyA9IF9yZWYyWzFdO1xuXG4gICAgdmFyIHRpbWVvdXRzID0gdGhpcy5nZXRUaW1lb3V0cygpO1xuICAgIHZhciBlbnRlclRpbWVvdXQgPSBhcHBlYXJpbmcgPyB0aW1lb3V0cy5hcHBlYXIgOiB0aW1lb3V0cy5lbnRlcjsgLy8gbm8gZW50ZXIgYW5pbWF0aW9uIHNraXAgcmlnaHQgdG8gRU5URVJFRFxuICAgIC8vIGlmIHdlIGFyZSBtb3VudGluZyBhbmQgcnVubmluZyB0aGlzIGl0IG1lYW5zIGFwcGVhciBfbXVzdF8gYmUgc2V0XG5cbiAgICBpZiAoIW1vdW50aW5nICYmICFlbnRlciB8fCBjb25maWcuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuc2FmZVNldFN0YXRlKHtcbiAgICAgICAgc3RhdHVzOiBFTlRFUkVEXG4gICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMi5wcm9wcy5vbkVudGVyZWQobWF5YmVOb2RlKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucHJvcHMub25FbnRlcihtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKTtcbiAgICB0aGlzLnNhZmVTZXRTdGF0ZSh7XG4gICAgICBzdGF0dXM6IEVOVEVSSU5HXG4gICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMyLnByb3BzLm9uRW50ZXJpbmcobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZyk7XG5cbiAgICAgIF90aGlzMi5vblRyYW5zaXRpb25FbmQoZW50ZXJUaW1lb3V0LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMi5zYWZlU2V0U3RhdGUoe1xuICAgICAgICAgIHN0YXR1czogRU5URVJFRFxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMyLnByb3BzLm9uRW50ZXJlZChtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8ucGVyZm9ybUV4aXQgPSBmdW5jdGlvbiBwZXJmb3JtRXhpdCgpIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIHZhciBleGl0ID0gdGhpcy5wcm9wcy5leGl0O1xuICAgIHZhciB0aW1lb3V0cyA9IHRoaXMuZ2V0VGltZW91dHMoKTtcbiAgICB2YXIgbWF5YmVOb2RlID0gdGhpcy5wcm9wcy5ub2RlUmVmID8gdW5kZWZpbmVkIDogUmVhY3RET00uZmluZERPTU5vZGUodGhpcyk7IC8vIG5vIGV4aXQgYW5pbWF0aW9uIHNraXAgcmlnaHQgdG8gRVhJVEVEXG5cbiAgICBpZiAoIWV4aXQgfHwgY29uZmlnLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLnNhZmVTZXRTdGF0ZSh7XG4gICAgICAgIHN0YXR1czogRVhJVEVEXG4gICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMy5wcm9wcy5vbkV4aXRlZChtYXliZU5vZGUpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wcm9wcy5vbkV4aXQobWF5YmVOb2RlKTtcbiAgICB0aGlzLnNhZmVTZXRTdGF0ZSh7XG4gICAgICBzdGF0dXM6IEVYSVRJTkdcbiAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczMucHJvcHMub25FeGl0aW5nKG1heWJlTm9kZSk7XG5cbiAgICAgIF90aGlzMy5vblRyYW5zaXRpb25FbmQodGltZW91dHMuZXhpdCwgZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczMuc2FmZVNldFN0YXRlKHtcbiAgICAgICAgICBzdGF0dXM6IEVYSVRFRFxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMzLnByb3BzLm9uRXhpdGVkKG1heWJlTm9kZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmNhbmNlbE5leHRDYWxsYmFjayA9IGZ1bmN0aW9uIGNhbmNlbE5leHRDYWxsYmFjaygpIHtcbiAgICBpZiAodGhpcy5uZXh0Q2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgIHRoaXMubmV4dENhbGxiYWNrLmNhbmNlbCgpO1xuICAgICAgdGhpcy5uZXh0Q2FsbGJhY2sgPSBudWxsO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uc2FmZVNldFN0YXRlID0gZnVuY3Rpb24gc2FmZVNldFN0YXRlKG5leHRTdGF0ZSwgY2FsbGJhY2spIHtcbiAgICAvLyBUaGlzIHNob3VsZG4ndCBiZSBuZWNlc3NhcnksIGJ1dCB0aGVyZSBhcmUgd2VpcmQgcmFjZSBjb25kaXRpb25zIHdpdGhcbiAgICAvLyBzZXRTdGF0ZSBjYWxsYmFja3MgYW5kIHVubW91bnRpbmcgaW4gdGVzdGluZywgc28gYWx3YXlzIG1ha2Ugc3VyZSB0aGF0XG4gICAgLy8gd2UgY2FuIGNhbmNlbCBhbnkgcGVuZGluZyBzZXRTdGF0ZSBjYWxsYmFja3MgYWZ0ZXIgd2UgdW5tb3VudC5cbiAgICBjYWxsYmFjayA9IHRoaXMuc2V0TmV4dENhbGxiYWNrKGNhbGxiYWNrKTtcbiAgICB0aGlzLnNldFN0YXRlKG5leHRTdGF0ZSwgY2FsbGJhY2spO1xuICB9O1xuXG4gIF9wcm90by5zZXROZXh0Q2FsbGJhY2sgPSBmdW5jdGlvbiBzZXROZXh0Q2FsbGJhY2soY2FsbGJhY2spIHtcbiAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgIHZhciBhY3RpdmUgPSB0cnVlO1xuXG4gICAgdGhpcy5uZXh0Q2FsbGJhY2sgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmIChhY3RpdmUpIHtcbiAgICAgICAgYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIF90aGlzNC5uZXh0Q2FsbGJhY2sgPSBudWxsO1xuICAgICAgICBjYWxsYmFjayhldmVudCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMubmV4dENhbGxiYWNrLmNhbmNlbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGFjdGl2ZSA9IGZhbHNlO1xuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5uZXh0Q2FsbGJhY2s7XG4gIH07XG5cbiAgX3Byb3RvLm9uVHJhbnNpdGlvbkVuZCA9IGZ1bmN0aW9uIG9uVHJhbnNpdGlvbkVuZCh0aW1lb3V0LCBoYW5kbGVyKSB7XG4gICAgdGhpcy5zZXROZXh0Q2FsbGJhY2soaGFuZGxlcik7XG4gICAgdmFyIG5vZGUgPSB0aGlzLnByb3BzLm5vZGVSZWYgPyB0aGlzLnByb3BzLm5vZGVSZWYuY3VycmVudCA6IFJlYWN0RE9NLmZpbmRET01Ob2RlKHRoaXMpO1xuICAgIHZhciBkb2VzTm90SGF2ZVRpbWVvdXRPckxpc3RlbmVyID0gdGltZW91dCA9PSBudWxsICYmICF0aGlzLnByb3BzLmFkZEVuZExpc3RlbmVyO1xuXG4gICAgaWYgKCFub2RlIHx8IGRvZXNOb3RIYXZlVGltZW91dE9yTGlzdGVuZXIpIHtcbiAgICAgIHNldFRpbWVvdXQodGhpcy5uZXh0Q2FsbGJhY2ssIDApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnByb3BzLmFkZEVuZExpc3RlbmVyKSB7XG4gICAgICB2YXIgX3JlZjMgPSB0aGlzLnByb3BzLm5vZGVSZWYgPyBbdGhpcy5uZXh0Q2FsbGJhY2tdIDogW25vZGUsIHRoaXMubmV4dENhbGxiYWNrXSxcbiAgICAgICAgICBtYXliZU5vZGUgPSBfcmVmM1swXSxcbiAgICAgICAgICBtYXliZU5leHRDYWxsYmFjayA9IF9yZWYzWzFdO1xuXG4gICAgICB0aGlzLnByb3BzLmFkZEVuZExpc3RlbmVyKG1heWJlTm9kZSwgbWF5YmVOZXh0Q2FsbGJhY2spO1xuICAgIH1cblxuICAgIGlmICh0aW1lb3V0ICE9IG51bGwpIHtcbiAgICAgIHNldFRpbWVvdXQodGhpcy5uZXh0Q2FsbGJhY2ssIHRpbWVvdXQpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBzdGF0dXMgPSB0aGlzLnN0YXRlLnN0YXR1cztcblxuICAgIGlmIChzdGF0dXMgPT09IFVOTU9VTlRFRCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgX2luID0gX3RoaXMkcHJvcHMuaW4sXG4gICAgICAgIF9tb3VudE9uRW50ZXIgPSBfdGhpcyRwcm9wcy5tb3VudE9uRW50ZXIsXG4gICAgICAgIF91bm1vdW50T25FeGl0ID0gX3RoaXMkcHJvcHMudW5tb3VudE9uRXhpdCxcbiAgICAgICAgX2FwcGVhciA9IF90aGlzJHByb3BzLmFwcGVhcixcbiAgICAgICAgX2VudGVyID0gX3RoaXMkcHJvcHMuZW50ZXIsXG4gICAgICAgIF9leGl0ID0gX3RoaXMkcHJvcHMuZXhpdCxcbiAgICAgICAgX3RpbWVvdXQgPSBfdGhpcyRwcm9wcy50aW1lb3V0LFxuICAgICAgICBfYWRkRW5kTGlzdGVuZXIgPSBfdGhpcyRwcm9wcy5hZGRFbmRMaXN0ZW5lcixcbiAgICAgICAgX29uRW50ZXIgPSBfdGhpcyRwcm9wcy5vbkVudGVyLFxuICAgICAgICBfb25FbnRlcmluZyA9IF90aGlzJHByb3BzLm9uRW50ZXJpbmcsXG4gICAgICAgIF9vbkVudGVyZWQgPSBfdGhpcyRwcm9wcy5vbkVudGVyZWQsXG4gICAgICAgIF9vbkV4aXQgPSBfdGhpcyRwcm9wcy5vbkV4aXQsXG4gICAgICAgIF9vbkV4aXRpbmcgPSBfdGhpcyRwcm9wcy5vbkV4aXRpbmcsXG4gICAgICAgIF9vbkV4aXRlZCA9IF90aGlzJHByb3BzLm9uRXhpdGVkLFxuICAgICAgICBfbm9kZVJlZiA9IF90aGlzJHByb3BzLm5vZGVSZWYsXG4gICAgICAgIGNoaWxkUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfdGhpcyRwcm9wcywgW1wiY2hpbGRyZW5cIiwgXCJpblwiLCBcIm1vdW50T25FbnRlclwiLCBcInVubW91bnRPbkV4aXRcIiwgXCJhcHBlYXJcIiwgXCJlbnRlclwiLCBcImV4aXRcIiwgXCJ0aW1lb3V0XCIsIFwiYWRkRW5kTGlzdGVuZXJcIiwgXCJvbkVudGVyXCIsIFwib25FbnRlcmluZ1wiLCBcIm9uRW50ZXJlZFwiLCBcIm9uRXhpdFwiLCBcIm9uRXhpdGluZ1wiLCBcIm9uRXhpdGVkXCIsIFwibm9kZVJlZlwiXSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgLyojX19QVVJFX18qL1xuICAgICAgLy8gYWxsb3dzIGZvciBuZXN0ZWQgVHJhbnNpdGlvbnNcbiAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbkdyb3VwQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgICB2YWx1ZTogbnVsbFxuICAgICAgfSwgdHlwZW9mIGNoaWxkcmVuID09PSAnZnVuY3Rpb24nID8gY2hpbGRyZW4oc3RhdHVzLCBjaGlsZFByb3BzKSA6IFJlYWN0LmNsb25lRWxlbWVudChSZWFjdC5DaGlsZHJlbi5vbmx5KGNoaWxkcmVuKSwgY2hpbGRQcm9wcykpXG4gICAgKTtcbiAgfTtcblxuICByZXR1cm4gVHJhbnNpdGlvbjtcbn0oUmVhY3QuQ29tcG9uZW50KTtcblxuVHJhbnNpdGlvbi5jb250ZXh0VHlwZSA9IFRyYW5zaXRpb25Hcm91cENvbnRleHQ7XG5UcmFuc2l0aW9uLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgLyoqXG4gICAqIEEgUmVhY3QgcmVmZXJlbmNlIHRvIERPTSBlbGVtZW50IHRoYXQgbmVlZCB0byB0cmFuc2l0aW9uOlxuICAgKiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNTExMjcxMzAvNDY3MTkzMlxuICAgKlxuICAgKiAgIC0gV2hlbiBgbm9kZVJlZmAgcHJvcCBpcyB1c2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZCB0byBjYWxsYmFjayBmdW5jdGlvbnNcbiAgICogICAgICAoZS5nLiBgb25FbnRlcmApIGJlY2F1c2UgdXNlciBhbHJlYWR5IGhhcyBkaXJlY3QgYWNjZXNzIHRvIHRoZSBub2RlLlxuICAgKiAgIC0gV2hlbiBjaGFuZ2luZyBga2V5YCBwcm9wIG9mIGBUcmFuc2l0aW9uYCBpbiBhIGBUcmFuc2l0aW9uR3JvdXBgIGEgbmV3XG4gICAqICAgICBgbm9kZVJlZmAgbmVlZCB0byBiZSBwcm92aWRlZCB0byBgVHJhbnNpdGlvbmAgd2l0aCBjaGFuZ2VkIGBrZXlgIHByb3BcbiAgICogICAgIChzZWVcbiAgICogICAgIFt0ZXN0L0NTU1RyYW5zaXRpb24tdGVzdC5qc10oaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0anMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9ibG9iLzEzNDM1Zjg5N2IzYWI3MWY2ZTE5ZDcyNGYxNDU1OTZmNTkxMDU4MWMvdGVzdC9DU1NUcmFuc2l0aW9uLXRlc3QuanMjTDM2Mi1MNDM3KSkuXG4gICAqL1xuICBub2RlUmVmOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGN1cnJlbnQ6IHR5cGVvZiBFbGVtZW50ID09PSAndW5kZWZpbmVkJyA/IFByb3BUeXBlcy5hbnkgOiBmdW5jdGlvbiAocHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xuICAgICAgdmFyIHZhbHVlID0gcHJvcFZhbHVlW2tleV07XG4gICAgICByZXR1cm4gUHJvcFR5cGVzLmluc3RhbmNlT2YodmFsdWUgJiYgJ293bmVyRG9jdW1lbnQnIGluIHZhbHVlID8gdmFsdWUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5FbGVtZW50IDogRWxlbWVudCkocHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCk7XG4gICAgfVxuICB9KSxcblxuICAvKipcbiAgICogQSBgZnVuY3Rpb25gIGNoaWxkIGNhbiBiZSB1c2VkIGluc3RlYWQgb2YgYSBSZWFjdCBlbGVtZW50LiBUaGlzIGZ1bmN0aW9uIGlzXG4gICAqIGNhbGxlZCB3aXRoIHRoZSBjdXJyZW50IHRyYW5zaXRpb24gc3RhdHVzIChgJ2VudGVyaW5nJ2AsIGAnZW50ZXJlZCdgLFxuICAgKiBgJ2V4aXRpbmcnYCwgYCdleGl0ZWQnYCksIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGFwcGx5IGNvbnRleHRcbiAgICogc3BlY2lmaWMgcHJvcHMgdG8gYSBjb21wb25lbnQuXG4gICAqXG4gICAqIGBgYGpzeFxuICAgKiA8VHJhbnNpdGlvbiBpbj17dGhpcy5zdGF0ZS5pbn0gdGltZW91dD17MTUwfT5cbiAgICogICB7c3RhdGUgPT4gKFxuICAgKiAgICAgPE15Q29tcG9uZW50IGNsYXNzTmFtZT17YGZhZGUgZmFkZS0ke3N0YXRlfWB9IC8+XG4gICAqICAgKX1cbiAgICogPC9UcmFuc2l0aW9uPlxuICAgKiBgYGBcbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICogU2hvdyB0aGUgY29tcG9uZW50OyB0cmlnZ2VycyB0aGUgZW50ZXIgb3IgZXhpdCBzdGF0ZXNcbiAgICovXG4gIGluOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogQnkgZGVmYXVsdCB0aGUgY2hpbGQgY29tcG9uZW50IGlzIG1vdW50ZWQgaW1tZWRpYXRlbHkgYWxvbmcgd2l0aFxuICAgKiB0aGUgcGFyZW50IGBUcmFuc2l0aW9uYCBjb21wb25lbnQuIElmIHlvdSB3YW50IHRvIFwibGF6eSBtb3VudFwiIHRoZSBjb21wb25lbnQgb24gdGhlXG4gICAqIGZpcnN0IGBpbj17dHJ1ZX1gIHlvdSBjYW4gc2V0IGBtb3VudE9uRW50ZXJgLiBBZnRlciB0aGUgZmlyc3QgZW50ZXIgdHJhbnNpdGlvbiB0aGUgY29tcG9uZW50IHdpbGwgc3RheVxuICAgKiBtb3VudGVkLCBldmVuIG9uIFwiZXhpdGVkXCIsIHVubGVzcyB5b3UgYWxzbyBzcGVjaWZ5IGB1bm1vdW50T25FeGl0YC5cbiAgICovXG4gIG1vdW50T25FbnRlcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQgdGhlIGNoaWxkIGNvbXBvbmVudCBzdGF5cyBtb3VudGVkIGFmdGVyIGl0IHJlYWNoZXMgdGhlIGAnZXhpdGVkJ2Agc3RhdGUuXG4gICAqIFNldCBgdW5tb3VudE9uRXhpdGAgaWYgeW91J2QgcHJlZmVyIHRvIHVubW91bnQgdGhlIGNvbXBvbmVudCBhZnRlciBpdCBmaW5pc2hlcyBleGl0aW5nLlxuICAgKi9cbiAgdW5tb3VudE9uRXhpdDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQgdGhlIGNoaWxkIGNvbXBvbmVudCBkb2VzIG5vdCBwZXJmb3JtIHRoZSBlbnRlciB0cmFuc2l0aW9uIHdoZW5cbiAgICogaXQgZmlyc3QgbW91bnRzLCByZWdhcmRsZXNzIG9mIHRoZSB2YWx1ZSBvZiBgaW5gLiBJZiB5b3Ugd2FudCB0aGlzXG4gICAqIGJlaGF2aW9yLCBzZXQgYm90aCBgYXBwZWFyYCBhbmQgYGluYCB0byBgdHJ1ZWAuXG4gICAqXG4gICAqID4gKipOb3RlKio6IHRoZXJlIGFyZSBubyBzcGVjaWFsIGFwcGVhciBzdGF0ZXMgbGlrZSBgYXBwZWFyaW5nYC9gYXBwZWFyZWRgLCB0aGlzIHByb3BcbiAgICogPiBvbmx5IGFkZHMgYW4gYWRkaXRpb25hbCBlbnRlciB0cmFuc2l0aW9uLiBIb3dldmVyLCBpbiB0aGVcbiAgICogPiBgPENTU1RyYW5zaXRpb24+YCBjb21wb25lbnQgdGhhdCBmaXJzdCBlbnRlciB0cmFuc2l0aW9uIGRvZXMgcmVzdWx0IGluXG4gICAqID4gYWRkaXRpb25hbCBgLmFwcGVhci0qYCBjbGFzc2VzLCB0aGF0IHdheSB5b3UgY2FuIGNob29zZSB0byBzdHlsZSBpdFxuICAgKiA+IGRpZmZlcmVudGx5LlxuICAgKi9cbiAgYXBwZWFyOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogRW5hYmxlIG9yIGRpc2FibGUgZW50ZXIgdHJhbnNpdGlvbnMuXG4gICAqL1xuICBlbnRlcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEVuYWJsZSBvciBkaXNhYmxlIGV4aXQgdHJhbnNpdGlvbnMuXG4gICAqL1xuICBleGl0OiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogVGhlIGR1cmF0aW9uIG9mIHRoZSB0cmFuc2l0aW9uLCBpbiBtaWxsaXNlY29uZHMuXG4gICAqIFJlcXVpcmVkIHVubGVzcyBgYWRkRW5kTGlzdGVuZXJgIGlzIHByb3ZpZGVkLlxuICAgKlxuICAgKiBZb3UgbWF5IHNwZWNpZnkgYSBzaW5nbGUgdGltZW91dCBmb3IgYWxsIHRyYW5zaXRpb25zOlxuICAgKlxuICAgKiBgYGBqc3hcbiAgICogdGltZW91dD17NTAwfVxuICAgKiBgYGBcbiAgICpcbiAgICogb3IgaW5kaXZpZHVhbGx5OlxuICAgKlxuICAgKiBgYGBqc3hcbiAgICogdGltZW91dD17e1xuICAgKiAgYXBwZWFyOiA1MDAsXG4gICAqICBlbnRlcjogMzAwLFxuICAgKiAgZXhpdDogNTAwLFxuICAgKiB9fVxuICAgKiBgYGBcbiAgICpcbiAgICogLSBgYXBwZWFyYCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgb2YgYGVudGVyYFxuICAgKiAtIGBlbnRlcmAgZGVmYXVsdHMgdG8gYDBgXG4gICAqIC0gYGV4aXRgIGRlZmF1bHRzIHRvIGAwYFxuICAgKlxuICAgKiBAdHlwZSB7bnVtYmVyIHwgeyBlbnRlcj86IG51bWJlciwgZXhpdD86IG51bWJlciwgYXBwZWFyPzogbnVtYmVyIH19XG4gICAqL1xuICB0aW1lb3V0OiBmdW5jdGlvbiB0aW1lb3V0KHByb3BzKSB7XG4gICAgdmFyIHB0ID0gdGltZW91dHNTaGFwZTtcbiAgICBpZiAoIXByb3BzLmFkZEVuZExpc3RlbmVyKSBwdCA9IHB0LmlzUmVxdWlyZWQ7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHQuYXBwbHkodm9pZCAwLCBbcHJvcHNdLmNvbmNhdChhcmdzKSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEFkZCBhIGN1c3RvbSB0cmFuc2l0aW9uIGVuZCB0cmlnZ2VyLiBDYWxsZWQgd2l0aCB0aGUgdHJhbnNpdGlvbmluZ1xuICAgKiBET00gbm9kZSBhbmQgYSBgZG9uZWAgY2FsbGJhY2suIEFsbG93cyBmb3IgbW9yZSBmaW5lIGdyYWluZWQgdHJhbnNpdGlvbiBlbmRcbiAgICogbG9naWMuIFRpbWVvdXRzIGFyZSBzdGlsbCB1c2VkIGFzIGEgZmFsbGJhY2sgaWYgcHJvdmlkZWQuXG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIGBgYGpzeFxuICAgKiBhZGRFbmRMaXN0ZW5lcj17KG5vZGUsIGRvbmUpID0+IHtcbiAgICogICAvLyB1c2UgdGhlIGNzcyB0cmFuc2l0aW9uZW5kIGV2ZW50IHRvIG1hcmsgdGhlIGZpbmlzaCBvZiBhIHRyYW5zaXRpb25cbiAgICogICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCBkb25lLCBmYWxzZSk7XG4gICAqIH19XG4gICAqIGBgYFxuICAgKi9cbiAgYWRkRW5kTGlzdGVuZXI6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCBiZWZvcmUgdGhlIFwiZW50ZXJpbmdcIiBzdGF0dXMgaXMgYXBwbGllZC4gQW4gZXh0cmEgcGFyYW1ldGVyXG4gICAqIGBpc0FwcGVhcmluZ2AgaXMgc3VwcGxpZWQgdG8gaW5kaWNhdGUgaWYgdGhlIGVudGVyIHN0YWdlIGlzIG9jY3VycmluZyBvbiB0aGUgaW5pdGlhbCBtb3VudFxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCwgaXNBcHBlYXJpbmc6IGJvb2wpIC0+IHZvaWRcbiAgICovXG4gIG9uRW50ZXI6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCBhZnRlciB0aGUgXCJlbnRlcmluZ1wiIHN0YXR1cyBpcyBhcHBsaWVkLiBBbiBleHRyYSBwYXJhbWV0ZXJcbiAgICogYGlzQXBwZWFyaW5nYCBpcyBzdXBwbGllZCB0byBpbmRpY2F0ZSBpZiB0aGUgZW50ZXIgc3RhZ2UgaXMgb2NjdXJyaW5nIG9uIHRoZSBpbml0aWFsIG1vdW50XG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50LCBpc0FwcGVhcmluZzogYm9vbClcbiAgICovXG4gIG9uRW50ZXJpbmc6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCBhZnRlciB0aGUgXCJlbnRlcmVkXCIgc3RhdHVzIGlzIGFwcGxpZWQuIEFuIGV4dHJhIHBhcmFtZXRlclxuICAgKiBgaXNBcHBlYXJpbmdgIGlzIHN1cHBsaWVkIHRvIGluZGljYXRlIGlmIHRoZSBlbnRlciBzdGFnZSBpcyBvY2N1cnJpbmcgb24gdGhlIGluaXRpYWwgbW91bnRcbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQsIGlzQXBwZWFyaW5nOiBib29sKSAtPiB2b2lkXG4gICAqL1xuICBvbkVudGVyZWQ6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCBiZWZvcmUgdGhlIFwiZXhpdGluZ1wiIHN0YXR1cyBpcyBhcHBsaWVkLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCkgLT4gdm9pZFxuICAgKi9cbiAgb25FeGl0OiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgYWZ0ZXIgdGhlIFwiZXhpdGluZ1wiIHN0YXR1cyBpcyBhcHBsaWVkLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCkgLT4gdm9pZFxuICAgKi9cbiAgb25FeGl0aW5nOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgYWZ0ZXIgdGhlIFwiZXhpdGVkXCIgc3RhdHVzIGlzIGFwcGxpZWQuXG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWRcbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQpIC0+IHZvaWRcbiAgICovXG4gIG9uRXhpdGVkOiBQcm9wVHlwZXMuZnVuY1xufSA6IHt9OyAvLyBOYW1lIHRoZSBmdW5jdGlvbiBzbyBpdCBpcyBjbGVhcmVyIGluIHRoZSBkb2N1bWVudGF0aW9uXG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5UcmFuc2l0aW9uLmRlZmF1bHRQcm9wcyA9IHtcbiAgaW46IGZhbHNlLFxuICBtb3VudE9uRW50ZXI6IGZhbHNlLFxuICB1bm1vdW50T25FeGl0OiBmYWxzZSxcbiAgYXBwZWFyOiBmYWxzZSxcbiAgZW50ZXI6IHRydWUsXG4gIGV4aXQ6IHRydWUsXG4gIG9uRW50ZXI6IG5vb3AsXG4gIG9uRW50ZXJpbmc6IG5vb3AsXG4gIG9uRW50ZXJlZDogbm9vcCxcbiAgb25FeGl0OiBub29wLFxuICBvbkV4aXRpbmc6IG5vb3AsXG4gIG9uRXhpdGVkOiBub29wXG59O1xuVHJhbnNpdGlvbi5VTk1PVU5URUQgPSBVTk1PVU5URUQ7XG5UcmFuc2l0aW9uLkVYSVRFRCA9IEVYSVRFRDtcblRyYW5zaXRpb24uRU5URVJJTkcgPSBFTlRFUklORztcblRyYW5zaXRpb24uRU5URVJFRCA9IEVOVEVSRUQ7XG5UcmFuc2l0aW9uLkVYSVRJTkcgPSBFWElUSU5HO1xuZXhwb3J0IGRlZmF1bHQgVHJhbnNpdGlvbjsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVRoZW1lIGFzIHVzZVRoZW1lU3lzdGVtIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IGRlZmF1bHRUaGVtZSBmcm9tICcuL2RlZmF1bHRUaGVtZSc7XG5pbXBvcnQgVEhFTUVfSUQgZnJvbSAnLi9pZGVudGlmaWVyJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVRoZW1lKCkge1xuICBjb25zdCB0aGVtZSA9IHVzZVRoZW1lU3lzdGVtKGRlZmF1bHRUaGVtZSk7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gICAgUmVhY3QudXNlRGVidWdWYWx1ZSh0aGVtZSk7XG4gIH1cbiAgcmV0dXJuIHRoZW1lW1RIRU1FX0lEXSB8fCB0aGVtZTtcbn0iLCJleHBvcnQgY29uc3QgcmVmbG93ID0gbm9kZSA9PiBub2RlLnNjcm9sbFRvcDtcbmV4cG9ydCBmdW5jdGlvbiBnZXRUcmFuc2l0aW9uUHJvcHMocHJvcHMsIG9wdGlvbnMpIHtcbiAgdmFyIF9zdHlsZSR0cmFuc2l0aW9uRHVyYSwgX3N0eWxlJHRyYW5zaXRpb25UaW1pO1xuICBjb25zdCB7XG4gICAgdGltZW91dCxcbiAgICBlYXNpbmcsXG4gICAgc3R5bGUgPSB7fVxuICB9ID0gcHJvcHM7XG4gIHJldHVybiB7XG4gICAgZHVyYXRpb246IChfc3R5bGUkdHJhbnNpdGlvbkR1cmEgPSBzdHlsZS50cmFuc2l0aW9uRHVyYXRpb24pICE9IG51bGwgPyBfc3R5bGUkdHJhbnNpdGlvbkR1cmEgOiB0eXBlb2YgdGltZW91dCA9PT0gJ251bWJlcicgPyB0aW1lb3V0IDogdGltZW91dFtvcHRpb25zLm1vZGVdIHx8IDAsXG4gICAgZWFzaW5nOiAoX3N0eWxlJHRyYW5zaXRpb25UaW1pID0gc3R5bGUudHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uKSAhPSBudWxsID8gX3N0eWxlJHRyYW5zaXRpb25UaW1pIDogdHlwZW9mIGVhc2luZyA9PT0gJ29iamVjdCcgPyBlYXNpbmdbb3B0aW9ucy5tb2RlXSA6IGVhc2luZyxcbiAgICBkZWxheTogc3R5bGUudHJhbnNpdGlvbkRlbGF5XG4gIH07XG59IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYWRkRW5kTGlzdGVuZXJcIiwgXCJhcHBlYXJcIiwgXCJjaGlsZHJlblwiLCBcImVhc2luZ1wiLCBcImluXCIsIFwib25FbnRlclwiLCBcIm9uRW50ZXJlZFwiLCBcIm9uRW50ZXJpbmdcIiwgXCJvbkV4aXRcIiwgXCJvbkV4aXRlZFwiLCBcIm9uRXhpdGluZ1wiLCBcInN0eWxlXCIsIFwidGltZW91dFwiLCBcIlRyYW5zaXRpb25Db21wb25lbnRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHVzZVRpbWVvdXQgZnJvbSAnQG11aS91dGlscy91c2VUaW1lb3V0JztcbmltcG9ydCBlbGVtZW50QWNjZXB0aW5nUmVmIGZyb20gJ0BtdWkvdXRpbHMvZWxlbWVudEFjY2VwdGluZ1JlZic7XG5pbXBvcnQgZ2V0UmVhY3RFbGVtZW50UmVmIGZyb20gJ0BtdWkvdXRpbHMvZ2V0UmVhY3RFbGVtZW50UmVmJztcbmltcG9ydCB7IFRyYW5zaXRpb24gfSBmcm9tICdyZWFjdC10cmFuc2l0aW9uLWdyb3VwJztcbmltcG9ydCB1c2VUaGVtZSBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWUnO1xuaW1wb3J0IHsgZ2V0VHJhbnNpdGlvblByb3BzLCByZWZsb3cgfSBmcm9tICcuLi90cmFuc2l0aW9ucy91dGlscyc7XG5pbXBvcnQgdXNlRm9ya1JlZiBmcm9tICcuLi91dGlscy91c2VGb3JrUmVmJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5mdW5jdGlvbiBnZXRTY2FsZSh2YWx1ZSkge1xuICByZXR1cm4gYHNjYWxlKCR7dmFsdWV9LCAke3ZhbHVlICoqIDJ9KWA7XG59XG5jb25zdCBzdHlsZXMgPSB7XG4gIGVudGVyaW5nOiB7XG4gICAgb3BhY2l0eTogMSxcbiAgICB0cmFuc2Zvcm06IGdldFNjYWxlKDEpXG4gIH0sXG4gIGVudGVyZWQ6IHtcbiAgICBvcGFjaXR5OiAxLFxuICAgIHRyYW5zZm9ybTogJ25vbmUnXG4gIH1cbn07XG5cbi8qXG4gVE9ETyB2NjogcmVtb3ZlXG4gQ29uZGl0aW9uYWxseSBhcHBseSBhIHdvcmthcm91bmQgZm9yIHRoZSBDU1MgdHJhbnNpdGlvbiBidWcgaW4gU2FmYXJpIDE1LjQgLyBXZWJLaXQgYnJvd3NlcnMuXG4gKi9cbmNvbnN0IGlzV2ViS2l0MTU0ID0gdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgL14oKD8hY2hyb21lfGFuZHJvaWQpLikqKHNhZmFyaXxtb2JpbGUpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSAmJiAvKG9zIHx2ZXJzaW9uXFwvKTE1KC58Xyk0L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcblxuLyoqXG4gKiBUaGUgR3JvdyB0cmFuc2l0aW9uIGlzIHVzZWQgYnkgdGhlIFtUb29sdGlwXSgvbWF0ZXJpYWwtdWkvcmVhY3QtdG9vbHRpcC8pIGFuZFxuICogW1BvcG92ZXJdKC9tYXRlcmlhbC11aS9yZWFjdC1wb3BvdmVyLykgY29tcG9uZW50cy5cbiAqIEl0IHVzZXMgW3JlYWN0LXRyYW5zaXRpb24tZ3JvdXBdKGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXApIGludGVybmFsbHkuXG4gKi9cbmNvbnN0IEdyb3cgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBHcm93KHByb3BzLCByZWYpIHtcbiAgY29uc3Qge1xuICAgICAgYWRkRW5kTGlzdGVuZXIsXG4gICAgICBhcHBlYXIgPSB0cnVlLFxuICAgICAgY2hpbGRyZW4sXG4gICAgICBlYXNpbmcsXG4gICAgICBpbjogaW5Qcm9wLFxuICAgICAgb25FbnRlcixcbiAgICAgIG9uRW50ZXJlZCxcbiAgICAgIG9uRW50ZXJpbmcsXG4gICAgICBvbkV4aXQsXG4gICAgICBvbkV4aXRlZCxcbiAgICAgIG9uRXhpdGluZyxcbiAgICAgIHN0eWxlLFxuICAgICAgdGltZW91dCA9ICdhdXRvJyxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9wcm9wLXR5cGVzXG4gICAgICBUcmFuc2l0aW9uQ29tcG9uZW50ID0gVHJhbnNpdGlvblxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCB0aW1lciA9IHVzZVRpbWVvdXQoKTtcbiAgY29uc3QgYXV0b1RpbWVvdXQgPSBSZWFjdC51c2VSZWYoKTtcbiAgY29uc3QgdGhlbWUgPSB1c2VUaGVtZSgpO1xuICBjb25zdCBub2RlUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBoYW5kbGVSZWYgPSB1c2VGb3JrUmVmKG5vZGVSZWYsIGdldFJlYWN0RWxlbWVudFJlZihjaGlsZHJlbiksIHJlZik7XG4gIGNvbnN0IG5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2sgPSBjYWxsYmFjayA9PiBtYXliZUlzQXBwZWFyaW5nID0+IHtcbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IG5vZGUgPSBub2RlUmVmLmN1cnJlbnQ7XG5cbiAgICAgIC8vIG9uRW50ZXJYeHggYW5kIG9uRXhpdFh4eCBjYWxsYmFja3MgaGF2ZSBhIGRpZmZlcmVudCBhcmd1bWVudHMubGVuZ3RoIHZhbHVlLlxuICAgICAgaWYgKG1heWJlSXNBcHBlYXJpbmcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjYWxsYmFjayhub2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrKG5vZGUsIG1heWJlSXNBcHBlYXJpbmcpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgY29uc3QgaGFuZGxlRW50ZXJpbmcgPSBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrKG9uRW50ZXJpbmcpO1xuICBjb25zdCBoYW5kbGVFbnRlciA9IG5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2soKG5vZGUsIGlzQXBwZWFyaW5nKSA9PiB7XG4gICAgcmVmbG93KG5vZGUpOyAvLyBTbyB0aGUgYW5pbWF0aW9uIGFsd2F5cyBzdGFydCBmcm9tIHRoZSBzdGFydC5cblxuICAgIGNvbnN0IHtcbiAgICAgIGR1cmF0aW9uOiB0cmFuc2l0aW9uRHVyYXRpb24sXG4gICAgICBkZWxheSxcbiAgICAgIGVhc2luZzogdHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uXG4gICAgfSA9IGdldFRyYW5zaXRpb25Qcm9wcyh7XG4gICAgICBzdHlsZSxcbiAgICAgIHRpbWVvdXQsXG4gICAgICBlYXNpbmdcbiAgICB9LCB7XG4gICAgICBtb2RlOiAnZW50ZXInXG4gICAgfSk7XG4gICAgbGV0IGR1cmF0aW9uO1xuICAgIGlmICh0aW1lb3V0ID09PSAnYXV0bycpIHtcbiAgICAgIGR1cmF0aW9uID0gdGhlbWUudHJhbnNpdGlvbnMuZ2V0QXV0b0hlaWdodER1cmF0aW9uKG5vZGUuY2xpZW50SGVpZ2h0KTtcbiAgICAgIGF1dG9UaW1lb3V0LmN1cnJlbnQgPSBkdXJhdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgZHVyYXRpb24gPSB0cmFuc2l0aW9uRHVyYXRpb247XG4gICAgfVxuICAgIG5vZGUuc3R5bGUudHJhbnNpdGlvbiA9IFt0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ29wYWNpdHknLCB7XG4gICAgICBkdXJhdGlvbixcbiAgICAgIGRlbGF5XG4gICAgfSksIHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgndHJhbnNmb3JtJywge1xuICAgICAgZHVyYXRpb246IGlzV2ViS2l0MTU0ID8gZHVyYXRpb24gOiBkdXJhdGlvbiAqIDAuNjY2LFxuICAgICAgZGVsYXksXG4gICAgICBlYXNpbmc6IHRyYW5zaXRpb25UaW1pbmdGdW5jdGlvblxuICAgIH0pXS5qb2luKCcsJyk7XG4gICAgaWYgKG9uRW50ZXIpIHtcbiAgICAgIG9uRW50ZXIobm9kZSwgaXNBcHBlYXJpbmcpO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGhhbmRsZUVudGVyZWQgPSBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrKG9uRW50ZXJlZCk7XG4gIGNvbnN0IGhhbmRsZUV4aXRpbmcgPSBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrKG9uRXhpdGluZyk7XG4gIGNvbnN0IGhhbmRsZUV4aXQgPSBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrKG5vZGUgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGR1cmF0aW9uOiB0cmFuc2l0aW9uRHVyYXRpb24sXG4gICAgICBkZWxheSxcbiAgICAgIGVhc2luZzogdHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uXG4gICAgfSA9IGdldFRyYW5zaXRpb25Qcm9wcyh7XG4gICAgICBzdHlsZSxcbiAgICAgIHRpbWVvdXQsXG4gICAgICBlYXNpbmdcbiAgICB9LCB7XG4gICAgICBtb2RlOiAnZXhpdCdcbiAgICB9KTtcbiAgICBsZXQgZHVyYXRpb247XG4gICAgaWYgKHRpbWVvdXQgPT09ICdhdXRvJykge1xuICAgICAgZHVyYXRpb24gPSB0aGVtZS50cmFuc2l0aW9ucy5nZXRBdXRvSGVpZ2h0RHVyYXRpb24obm9kZS5jbGllbnRIZWlnaHQpO1xuICAgICAgYXV0b1RpbWVvdXQuY3VycmVudCA9IGR1cmF0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICBkdXJhdGlvbiA9IHRyYW5zaXRpb25EdXJhdGlvbjtcbiAgICB9XG4gICAgbm9kZS5zdHlsZS50cmFuc2l0aW9uID0gW3RoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnb3BhY2l0eScsIHtcbiAgICAgIGR1cmF0aW9uLFxuICAgICAgZGVsYXlcbiAgICB9KSwgdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCd0cmFuc2Zvcm0nLCB7XG4gICAgICBkdXJhdGlvbjogaXNXZWJLaXQxNTQgPyBkdXJhdGlvbiA6IGR1cmF0aW9uICogMC42NjYsXG4gICAgICBkZWxheTogaXNXZWJLaXQxNTQgPyBkZWxheSA6IGRlbGF5IHx8IGR1cmF0aW9uICogMC4zMzMsXG4gICAgICBlYXNpbmc6IHRyYW5zaXRpb25UaW1pbmdGdW5jdGlvblxuICAgIH0pXS5qb2luKCcsJyk7XG4gICAgbm9kZS5zdHlsZS5vcGFjaXR5ID0gMDtcbiAgICBub2RlLnN0eWxlLnRyYW5zZm9ybSA9IGdldFNjYWxlKDAuNzUpO1xuICAgIGlmIChvbkV4aXQpIHtcbiAgICAgIG9uRXhpdChub2RlKTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBoYW5kbGVFeGl0ZWQgPSBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrKG9uRXhpdGVkKTtcbiAgY29uc3QgaGFuZGxlQWRkRW5kTGlzdGVuZXIgPSBuZXh0ID0+IHtcbiAgICBpZiAodGltZW91dCA9PT0gJ2F1dG8nKSB7XG4gICAgICB0aW1lci5zdGFydChhdXRvVGltZW91dC5jdXJyZW50IHx8IDAsIG5leHQpO1xuICAgIH1cbiAgICBpZiAoYWRkRW5kTGlzdGVuZXIpIHtcbiAgICAgIC8vIE9sZCBjYWxsIHNpZ25hdHVyZSBiZWZvcmUgYHJlYWN0LXRyYW5zaXRpb24tZ3JvdXBgIGltcGxlbWVudGVkIGBub2RlUmVmYFxuICAgICAgYWRkRW5kTGlzdGVuZXIobm9kZVJlZi5jdXJyZW50LCBuZXh0KTtcbiAgICB9XG4gIH07XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChUcmFuc2l0aW9uQ29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgYXBwZWFyOiBhcHBlYXIsXG4gICAgaW46IGluUHJvcCxcbiAgICBub2RlUmVmOiBub2RlUmVmLFxuICAgIG9uRW50ZXI6IGhhbmRsZUVudGVyLFxuICAgIG9uRW50ZXJlZDogaGFuZGxlRW50ZXJlZCxcbiAgICBvbkVudGVyaW5nOiBoYW5kbGVFbnRlcmluZyxcbiAgICBvbkV4aXQ6IGhhbmRsZUV4aXQsXG4gICAgb25FeGl0ZWQ6IGhhbmRsZUV4aXRlZCxcbiAgICBvbkV4aXRpbmc6IGhhbmRsZUV4aXRpbmcsXG4gICAgYWRkRW5kTGlzdGVuZXI6IGhhbmRsZUFkZEVuZExpc3RlbmVyLFxuICAgIHRpbWVvdXQ6IHRpbWVvdXQgPT09ICdhdXRvJyA/IG51bGwgOiB0aW1lb3V0XG4gIH0sIG90aGVyLCB7XG4gICAgY2hpbGRyZW46IChzdGF0ZSwgY2hpbGRQcm9wcykgPT4ge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGRyZW4sIF9leHRlbmRzKHtcbiAgICAgICAgc3R5bGU6IF9leHRlbmRzKHtcbiAgICAgICAgICBvcGFjaXR5OiAwLFxuICAgICAgICAgIHRyYW5zZm9ybTogZ2V0U2NhbGUoMC43NSksXG4gICAgICAgICAgdmlzaWJpbGl0eTogc3RhdGUgPT09ICdleGl0ZWQnICYmICFpblByb3AgPyAnaGlkZGVuJyA6IHVuZGVmaW5lZFxuICAgICAgICB9LCBzdHlsZXNbc3RhdGVdLCBzdHlsZSwgY2hpbGRyZW4ucHJvcHMuc3R5bGUpLFxuICAgICAgICByZWY6IGhhbmRsZVJlZlxuICAgICAgfSwgY2hpbGRQcm9wcykpO1xuICAgIH1cbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBHcm93LnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgV2FybmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgLy8g4pSCIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4g4pSCXG4gIC8vIOKUgiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIOKUglxuICAvLyDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgLyoqXG4gICAqIEFkZCBhIGN1c3RvbSB0cmFuc2l0aW9uIGVuZCB0cmlnZ2VyLiBDYWxsZWQgd2l0aCB0aGUgdHJhbnNpdGlvbmluZyBET01cbiAgICogbm9kZSBhbmQgYSBkb25lIGNhbGxiYWNrLiBBbGxvd3MgZm9yIG1vcmUgZmluZSBncmFpbmVkIHRyYW5zaXRpb24gZW5kXG4gICAqIGxvZ2ljLiBOb3RlOiBUaW1lb3V0cyBhcmUgc3RpbGwgdXNlZCBhcyBhIGZhbGxiYWNrIGlmIHByb3ZpZGVkLlxuICAgKi9cbiAgYWRkRW5kTGlzdGVuZXI6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogUGVyZm9ybSB0aGUgZW50ZXIgdHJhbnNpdGlvbiB3aGVuIGl0IGZpcnN0IG1vdW50cyBpZiBgaW5gIGlzIGFsc28gYHRydWVgLlxuICAgKiBTZXQgdGhpcyB0byBgZmFsc2VgIHRvIGRpc2FibGUgdGhpcyBiZWhhdmlvci5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgYXBwZWFyOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIEEgc2luZ2xlIGNoaWxkIGNvbnRlbnQgZWxlbWVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBlbGVtZW50QWNjZXB0aW5nUmVmLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgKiBUaGUgdHJhbnNpdGlvbiB0aW1pbmcgZnVuY3Rpb24uXG4gICAqIFlvdSBtYXkgc3BlY2lmeSBhIHNpbmdsZSBlYXNpbmcgb3IgYSBvYmplY3QgY29udGFpbmluZyBlbnRlciBhbmQgZXhpdCB2YWx1ZXMuXG4gICAqL1xuICBlYXNpbmc6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zaGFwZSh7XG4gICAgZW50ZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZXhpdDogUHJvcFR5cGVzLnN0cmluZ1xuICB9KSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IHdpbGwgdHJhbnNpdGlvbiBpbi5cbiAgICovXG4gIGluOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRW50ZXI6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25FbnRlcmVkOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRW50ZXJpbmc6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25FeGl0OiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRXhpdGVkOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRXhpdGluZzogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFRoZSBkdXJhdGlvbiBmb3IgdGhlIHRyYW5zaXRpb24sIGluIG1pbGxpc2Vjb25kcy5cbiAgICogWW91IG1heSBzcGVjaWZ5IGEgc2luZ2xlIHRpbWVvdXQgZm9yIGFsbCB0cmFuc2l0aW9ucywgb3IgaW5kaXZpZHVhbGx5IHdpdGggYW4gb2JqZWN0LlxuICAgKlxuICAgKiBTZXQgdG8gJ2F1dG8nIHRvIGF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlIHRyYW5zaXRpb24gdGltZSBiYXNlZCBvbiBoZWlnaHQuXG4gICAqIEBkZWZhdWx0ICdhdXRvJ1xuICAgKi9cbiAgdGltZW91dDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYXV0byddKSwgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBhcHBlYXI6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgZW50ZXI6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgZXhpdDogUHJvcFR5cGVzLm51bWJlclxuICB9KV0pXG59IDogdm9pZCAwO1xuR3Jvdy5tdWlTdXBwb3J0QXV0byA9IHRydWU7XG5leHBvcnQgZGVmYXVsdCBHcm93OyIsIid1c2UgY2xpZW50JztcblxuLyogZXNsaW50LWRpc2FibGUgY29uc2lzdGVudC1yZXR1cm4sIGpzeC1hMTF5L25vLW5vbmludGVyYWN0aXZlLXRhYmluZGV4ICovXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgZXhhY3RQcm9wLCBlbGVtZW50QWNjZXB0aW5nUmVmLCB1bnN0YWJsZV91c2VGb3JrUmVmIGFzIHVzZUZvcmtSZWYsIHVuc3RhYmxlX293bmVyRG9jdW1lbnQgYXMgb3duZXJEb2N1bWVudCwgdW5zdGFibGVfZ2V0UmVhY3RFbGVtZW50UmVmIGFzIGdldFJlYWN0RWxlbWVudFJlZiB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbi8vIEluc3BpcmVkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9mb2N1cy10cmFwL3RhYmJhYmxlXG5jb25zdCBjYW5kaWRhdGVzU2VsZWN0b3IgPSBbJ2lucHV0JywgJ3NlbGVjdCcsICd0ZXh0YXJlYScsICdhW2hyZWZdJywgJ2J1dHRvbicsICdbdGFiaW5kZXhdJywgJ2F1ZGlvW2NvbnRyb2xzXScsICd2aWRlb1tjb250cm9sc10nLCAnW2NvbnRlbnRlZGl0YWJsZV06bm90KFtjb250ZW50ZWRpdGFibGU9XCJmYWxzZVwiXSknXS5qb2luKCcsJyk7XG5mdW5jdGlvbiBnZXRUYWJJbmRleChub2RlKSB7XG4gIGNvbnN0IHRhYmluZGV4QXR0ciA9IHBhcnNlSW50KG5vZGUuZ2V0QXR0cmlidXRlKCd0YWJpbmRleCcpIHx8ICcnLCAxMCk7XG4gIGlmICghTnVtYmVyLmlzTmFOKHRhYmluZGV4QXR0cikpIHtcbiAgICByZXR1cm4gdGFiaW5kZXhBdHRyO1xuICB9XG5cbiAgLy8gQnJvd3NlcnMgZG8gbm90IHJldHVybiBgdGFiSW5kZXhgIGNvcnJlY3RseSBmb3IgY29udGVudEVkaXRhYmxlIG5vZGVzO1xuICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD02NjExMDgmcT1jb250ZW50ZWRpdGFibGUlMjB0YWJpbmRleCZjYW49MlxuICAvLyBzbyBpZiB0aGV5IGRvbid0IGhhdmUgYSB0YWJpbmRleCBhdHRyaWJ1dGUgc3BlY2lmaWNhbGx5IHNldCwgYXNzdW1lIGl0J3MgMC5cbiAgLy8gaW4gQ2hyb21lLCA8ZGV0YWlscy8+LCA8YXVkaW8gY29udHJvbHMvPiBhbmQgPHZpZGVvIGNvbnRyb2xzLz4gZWxlbWVudHMgZ2V0IGEgZGVmYXVsdFxuICAvLyAgYHRhYkluZGV4YCBvZiAtMSB3aGVuIHRoZSAndGFiaW5kZXgnIGF0dHJpYnV0ZSBpc24ndCBzcGVjaWZpZWQgaW4gdGhlIERPTSxcbiAgLy8gIHlldCB0aGV5IGFyZSBzdGlsbCBwYXJ0IG9mIHRoZSByZWd1bGFyIHRhYiBvcmRlcjsgaW4gRkYsIHRoZXkgZ2V0IGEgZGVmYXVsdFxuICAvLyAgYHRhYkluZGV4YCBvZiAwOyBzaW5jZSBDaHJvbWUgc3RpbGwgcHV0cyB0aG9zZSBlbGVtZW50cyBpbiB0aGUgcmVndWxhciB0YWJcbiAgLy8gIG9yZGVyLCBjb25zaWRlciB0aGVpciB0YWIgaW5kZXggdG8gYmUgMC5cbiAgaWYgKG5vZGUuY29udGVudEVkaXRhYmxlID09PSAndHJ1ZScgfHwgKG5vZGUubm9kZU5hbWUgPT09ICdBVURJTycgfHwgbm9kZS5ub2RlTmFtZSA9PT0gJ1ZJREVPJyB8fCBub2RlLm5vZGVOYW1lID09PSAnREVUQUlMUycpICYmIG5vZGUuZ2V0QXR0cmlidXRlKCd0YWJpbmRleCcpID09PSBudWxsKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgcmV0dXJuIG5vZGUudGFiSW5kZXg7XG59XG5mdW5jdGlvbiBpc05vblRhYmJhYmxlUmFkaW8obm9kZSkge1xuICBpZiAobm9kZS50YWdOYW1lICE9PSAnSU5QVVQnIHx8IG5vZGUudHlwZSAhPT0gJ3JhZGlvJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoIW5vZGUubmFtZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBnZXRSYWRpbyA9IHNlbGVjdG9yID0+IG5vZGUub3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBpbnB1dFt0eXBlPVwicmFkaW9cIl0ke3NlbGVjdG9yfWApO1xuICBsZXQgcm92aW5nID0gZ2V0UmFkaW8oYFtuYW1lPVwiJHtub2RlLm5hbWV9XCJdOmNoZWNrZWRgKTtcbiAgaWYgKCFyb3ZpbmcpIHtcbiAgICByb3ZpbmcgPSBnZXRSYWRpbyhgW25hbWU9XCIke25vZGUubmFtZX1cIl1gKTtcbiAgfVxuICByZXR1cm4gcm92aW5nICE9PSBub2RlO1xufVxuZnVuY3Rpb24gaXNOb2RlTWF0Y2hpbmdTZWxlY3RvckZvY3VzYWJsZShub2RlKSB7XG4gIGlmIChub2RlLmRpc2FibGVkIHx8IG5vZGUudGFnTmFtZSA9PT0gJ0lOUFVUJyAmJiBub2RlLnR5cGUgPT09ICdoaWRkZW4nIHx8IGlzTm9uVGFiYmFibGVSYWRpbyhub2RlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRHZXRUYWJiYWJsZShyb290KSB7XG4gIGNvbnN0IHJlZ3VsYXJUYWJOb2RlcyA9IFtdO1xuICBjb25zdCBvcmRlcmVkVGFiTm9kZXMgPSBbXTtcbiAgQXJyYXkuZnJvbShyb290LnF1ZXJ5U2VsZWN0b3JBbGwoY2FuZGlkYXRlc1NlbGVjdG9yKSkuZm9yRWFjaCgobm9kZSwgaSkgPT4ge1xuICAgIGNvbnN0IG5vZGVUYWJJbmRleCA9IGdldFRhYkluZGV4KG5vZGUpO1xuICAgIGlmIChub2RlVGFiSW5kZXggPT09IC0xIHx8ICFpc05vZGVNYXRjaGluZ1NlbGVjdG9yRm9jdXNhYmxlKG5vZGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChub2RlVGFiSW5kZXggPT09IDApIHtcbiAgICAgIHJlZ3VsYXJUYWJOb2Rlcy5wdXNoKG5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcmRlcmVkVGFiTm9kZXMucHVzaCh7XG4gICAgICAgIGRvY3VtZW50T3JkZXI6IGksXG4gICAgICAgIHRhYkluZGV4OiBub2RlVGFiSW5kZXgsXG4gICAgICAgIG5vZGU6IG5vZGVcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBvcmRlcmVkVGFiTm9kZXMuc29ydCgoYSwgYikgPT4gYS50YWJJbmRleCA9PT0gYi50YWJJbmRleCA/IGEuZG9jdW1lbnRPcmRlciAtIGIuZG9jdW1lbnRPcmRlciA6IGEudGFiSW5kZXggLSBiLnRhYkluZGV4KS5tYXAoYSA9PiBhLm5vZGUpLmNvbmNhdChyZWd1bGFyVGFiTm9kZXMpO1xufVxuZnVuY3Rpb24gZGVmYXVsdElzRW5hYmxlZCgpIHtcbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuZnVuY3Rpb24gRm9jdXNUcmFwKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBjaGlsZHJlbixcbiAgICBkaXNhYmxlQXV0b0ZvY3VzID0gZmFsc2UsXG4gICAgZGlzYWJsZUVuZm9yY2VGb2N1cyA9IGZhbHNlLFxuICAgIGRpc2FibGVSZXN0b3JlRm9jdXMgPSBmYWxzZSxcbiAgICBnZXRUYWJiYWJsZSA9IGRlZmF1bHRHZXRUYWJiYWJsZSxcbiAgICBpc0VuYWJsZWQgPSBkZWZhdWx0SXNFbmFibGVkLFxuICAgIG9wZW5cbiAgfSA9IHByb3BzO1xuICBjb25zdCBpZ25vcmVOZXh0RW5mb3JjZUZvY3VzID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcbiAgY29uc3Qgc2VudGluZWxTdGFydCA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3Qgc2VudGluZWxFbmQgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IG5vZGVUb1Jlc3RvcmUgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IHJlYWN0Rm9jdXNFdmVudFRhcmdldCA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgLy8gVGhpcyB2YXJpYWJsZSBpcyB1c2VmdWwgd2hlbiBkaXNhYmxlQXV0b0ZvY3VzIGlzIHRydWUuXG4gIC8vIEl0IHdhaXRzIGZvciB0aGUgYWN0aXZlIGVsZW1lbnQgdG8gbW92ZSBpbnRvIHRoZSBjb21wb25lbnQgdG8gYWN0aXZhdGUuXG4gIGNvbnN0IGFjdGl2YXRlZCA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IHJvb3RSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IGhhbmRsZVJlZiA9IHVzZUZvcmtSZWYoZ2V0UmVhY3RFbGVtZW50UmVmKGNoaWxkcmVuKSwgcm9vdFJlZik7XG4gIGNvbnN0IGxhc3RLZXlkb3duID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIFdlIG1pZ2h0IHJlbmRlciBhbiBlbXB0eSBjaGlsZC5cbiAgICBpZiAoIW9wZW4gfHwgIXJvb3RSZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhY3RpdmF0ZWQuY3VycmVudCA9ICFkaXNhYmxlQXV0b0ZvY3VzO1xuICB9LCBbZGlzYWJsZUF1dG9Gb2N1cywgb3Blbl0pO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIFdlIG1pZ2h0IHJlbmRlciBhbiBlbXB0eSBjaGlsZC5cbiAgICBpZiAoIW9wZW4gfHwgIXJvb3RSZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkb2MgPSBvd25lckRvY3VtZW50KHJvb3RSZWYuY3VycmVudCk7XG4gICAgaWYgKCFyb290UmVmLmN1cnJlbnQuY29udGFpbnMoZG9jLmFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgICBpZiAoIXJvb3RSZWYuY3VycmVudC5oYXNBdHRyaWJ1dGUoJ3RhYkluZGV4JykpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiBUaGUgbW9kYWwgY29udGVudCBub2RlIGRvZXMgbm90IGFjY2VwdCBmb2N1cy4nLCAnRm9yIHRoZSBiZW5lZml0IG9mIGFzc2lzdGl2ZSB0ZWNobm9sb2dpZXMsICcgKyAndGhlIHRhYkluZGV4IG9mIHRoZSBub2RlIGlzIGJlaW5nIHNldCB0byBcIi0xXCIuJ10uam9pbignXFxuJykpO1xuICAgICAgICB9XG4gICAgICAgIHJvb3RSZWYuY3VycmVudC5zZXRBdHRyaWJ1dGUoJ3RhYkluZGV4JywgJy0xJyk7XG4gICAgICB9XG4gICAgICBpZiAoYWN0aXZhdGVkLmN1cnJlbnQpIHtcbiAgICAgICAgcm9vdFJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAvLyByZXN0b3JlTGFzdEZvY3VzKClcbiAgICAgIGlmICghZGlzYWJsZVJlc3RvcmVGb2N1cykge1xuICAgICAgICAvLyBJbiBJRTExIGl0IGlzIHBvc3NpYmxlIGZvciBkb2N1bWVudC5hY3RpdmVFbGVtZW50IHRvIGJlIG51bGwgcmVzdWx0aW5nXG4gICAgICAgIC8vIGluIG5vZGVUb1Jlc3RvcmUuY3VycmVudCBiZWluZyBudWxsLlxuICAgICAgICAvLyBOb3QgYWxsIGVsZW1lbnRzIGluIElFMTEgaGF2ZSBhIGZvY3VzIG1ldGhvZC5cbiAgICAgICAgLy8gT25jZSBJRTExIHN1cHBvcnQgaXMgZHJvcHBlZCB0aGUgZm9jdXMoKSBjYWxsIGNhbiBiZSB1bmNvbmRpdGlvbmFsLlxuICAgICAgICBpZiAobm9kZVRvUmVzdG9yZS5jdXJyZW50ICYmIG5vZGVUb1Jlc3RvcmUuY3VycmVudC5mb2N1cykge1xuICAgICAgICAgIGlnbm9yZU5leHRFbmZvcmNlRm9jdXMuY3VycmVudCA9IHRydWU7XG4gICAgICAgICAgbm9kZVRvUmVzdG9yZS5jdXJyZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgbm9kZVRvUmVzdG9yZS5jdXJyZW50ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9O1xuICAgIC8vIE1pc3NpbmcgYGRpc2FibGVSZXN0b3JlRm9jdXNgIHdoaWNoIGlzIGZpbmUuXG4gICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBjaGFuZ2luZyB0aGF0IHByb3Agb24gYW4gb3BlbiBGb2N1c1RyYXBcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtvcGVuXSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gV2UgbWlnaHQgcmVuZGVyIGFuIGVtcHR5IGNoaWxkLlxuICAgIGlmICghb3BlbiB8fCAhcm9vdFJlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGRvYyA9IG93bmVyRG9jdW1lbnQocm9vdFJlZi5jdXJyZW50KTtcbiAgICBjb25zdCBsb29wRm9jdXMgPSBuYXRpdmVFdmVudCA9PiB7XG4gICAgICBsYXN0S2V5ZG93bi5jdXJyZW50ID0gbmF0aXZlRXZlbnQ7XG4gICAgICBpZiAoZGlzYWJsZUVuZm9yY2VGb2N1cyB8fCAhaXNFbmFibGVkKCkgfHwgbmF0aXZlRXZlbnQua2V5ICE9PSAnVGFiJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgbmV4dCB0YWIgc3RhcnRzIGZyb20gdGhlIHJpZ2h0IHBsYWNlLlxuICAgICAgLy8gZG9jLmFjdGl2ZUVsZW1lbnQgcmVmZXJzIHRvIHRoZSBvcmlnaW4uXG4gICAgICBpZiAoZG9jLmFjdGl2ZUVsZW1lbnQgPT09IHJvb3RSZWYuY3VycmVudCAmJiBuYXRpdmVFdmVudC5zaGlmdEtleSkge1xuICAgICAgICAvLyBXZSBuZWVkIHRvIGlnbm9yZSB0aGUgbmV4dCBjb250YWluIGFzXG4gICAgICAgIC8vIGl0IHdpbGwgdHJ5IHRvIG1vdmUgdGhlIGZvY3VzIGJhY2sgdG8gdGhlIHJvb3RSZWYgZWxlbWVudC5cbiAgICAgICAgaWdub3JlTmV4dEVuZm9yY2VGb2N1cy5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgaWYgKHNlbnRpbmVsRW5kLmN1cnJlbnQpIHtcbiAgICAgICAgICBzZW50aW5lbEVuZC5jdXJyZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGNvbnRhaW4gPSAoKSA9PiB7XG4gICAgICBjb25zdCByb290RWxlbWVudCA9IHJvb3RSZWYuY3VycmVudDtcblxuICAgICAgLy8gQ2xlYW51cCBmdW5jdGlvbnMgYXJlIGV4ZWN1dGVkIGxhemlseSBpbiBSZWFjdCAxNy5cbiAgICAgIC8vIENvbnRhaW4gY2FuIGJlIGNhbGxlZCBiZXR3ZWVuIHRoZSBjb21wb25lbnQgYmVpbmcgdW5tb3VudGVkIGFuZCBpdHMgY2xlYW51cCBmdW5jdGlvbiBiZWluZyBydW4uXG4gICAgICBpZiAocm9vdEVsZW1lbnQgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCFkb2MuaGFzRm9jdXMoKSB8fCAhaXNFbmFibGVkKCkgfHwgaWdub3JlTmV4dEVuZm9yY2VGb2N1cy5jdXJyZW50KSB7XG4gICAgICAgIGlnbm9yZU5leHRFbmZvcmNlRm9jdXMuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBmb2N1cyBpcyBhbHJlYWR5IGluc2lkZVxuICAgICAgaWYgKHJvb3RFbGVtZW50LmNvbnRhaW5zKGRvYy5hY3RpdmVFbGVtZW50KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBkaXNhYmxlRW5mb3JjZUZvY3VzIGlzIHNldCBhbmQgdGhlIGZvY3VzIGlzIG91dHNpZGUgb2YgdGhlIGZvY3VzIHRyYXAgKGFuZCBzZW50aW5lbCBub2RlcylcbiAgICAgIGlmIChkaXNhYmxlRW5mb3JjZUZvY3VzICYmIGRvYy5hY3RpdmVFbGVtZW50ICE9PSBzZW50aW5lbFN0YXJ0LmN1cnJlbnQgJiYgZG9jLmFjdGl2ZUVsZW1lbnQgIT09IHNlbnRpbmVsRW5kLmN1cnJlbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBpZiB0aGUgZm9jdXMgZXZlbnQgaXMgbm90IGNvbWluZyBmcm9tIGluc2lkZSB0aGUgY2hpbGRyZW4ncyByZWFjdCB0cmVlLCByZXNldCB0aGUgcmVmc1xuICAgICAgaWYgKGRvYy5hY3RpdmVFbGVtZW50ICE9PSByZWFjdEZvY3VzRXZlbnRUYXJnZXQuY3VycmVudCkge1xuICAgICAgICByZWFjdEZvY3VzRXZlbnRUYXJnZXQuY3VycmVudCA9IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKHJlYWN0Rm9jdXNFdmVudFRhcmdldC5jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghYWN0aXZhdGVkLmN1cnJlbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbGV0IHRhYmJhYmxlID0gW107XG4gICAgICBpZiAoZG9jLmFjdGl2ZUVsZW1lbnQgPT09IHNlbnRpbmVsU3RhcnQuY3VycmVudCB8fCBkb2MuYWN0aXZlRWxlbWVudCA9PT0gc2VudGluZWxFbmQuY3VycmVudCkge1xuICAgICAgICB0YWJiYWJsZSA9IGdldFRhYmJhYmxlKHJvb3RSZWYuY3VycmVudCk7XG4gICAgICB9XG5cbiAgICAgIC8vIG9uZSBvZiB0aGUgc2VudGluZWwgbm9kZXMgd2FzIGZvY3VzZWQsIHNvIG1vdmUgdGhlIGZvY3VzXG4gICAgICAvLyB0byB0aGUgZmlyc3QvbGFzdCB0YWJiYWJsZSBlbGVtZW50IGluc2lkZSB0aGUgZm9jdXMgdHJhcFxuICAgICAgaWYgKHRhYmJhYmxlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdmFyIF9sYXN0S2V5ZG93biRjdXJyZW50LCBfbGFzdEtleWRvd24kY3VycmVudDI7XG4gICAgICAgIGNvbnN0IGlzU2hpZnRUYWIgPSBCb29sZWFuKCgoX2xhc3RLZXlkb3duJGN1cnJlbnQgPSBsYXN0S2V5ZG93bi5jdXJyZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2xhc3RLZXlkb3duJGN1cnJlbnQuc2hpZnRLZXkpICYmICgoX2xhc3RLZXlkb3duJGN1cnJlbnQyID0gbGFzdEtleWRvd24uY3VycmVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9sYXN0S2V5ZG93biRjdXJyZW50Mi5rZXkpID09PSAnVGFiJyk7XG4gICAgICAgIGNvbnN0IGZvY3VzTmV4dCA9IHRhYmJhYmxlWzBdO1xuICAgICAgICBjb25zdCBmb2N1c1ByZXZpb3VzID0gdGFiYmFibGVbdGFiYmFibGUubGVuZ3RoIC0gMV07XG4gICAgICAgIGlmICh0eXBlb2YgZm9jdXNOZXh0ICE9PSAnc3RyaW5nJyAmJiB0eXBlb2YgZm9jdXNQcmV2aW91cyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBpZiAoaXNTaGlmdFRhYikge1xuICAgICAgICAgICAgZm9jdXNQcmV2aW91cy5mb2N1cygpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb2N1c05leHQuZm9jdXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gbm8gdGFiYmFibGUgZWxlbWVudHMgaW4gdGhlIHRyYXAgZm9jdXMgb3IgdGhlIGZvY3VzIHdhcyBvdXRzaWRlIG9mIHRoZSBmb2N1cyB0cmFwXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByb290RWxlbWVudC5mb2N1cygpO1xuICAgICAgfVxuICAgIH07XG4gICAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzaW4nLCBjb250YWluKTtcbiAgICBkb2MuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGxvb3BGb2N1cywgdHJ1ZSk7XG5cbiAgICAvLyBXaXRoIEVkZ2UsIFNhZmFyaSBhbmQgRmlyZWZveCwgbm8gZm9jdXMgcmVsYXRlZCBldmVudHMgYXJlIGZpcmVkIHdoZW4gdGhlIGZvY3VzZWQgYXJlYSBzdG9wcyBiZWluZyBhIGZvY3VzZWQgYXJlYS5cbiAgICAvLyBmb3IgZXhhbXBsZSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD01NTk1NjEuXG4gICAgLy8gSW5zdGVhZCwgd2UgY2FuIGxvb2sgaWYgdGhlIGFjdGl2ZSBlbGVtZW50IHdhcyByZXN0b3JlZCBvbiB0aGUgQk9EWSBlbGVtZW50LlxuICAgIC8vXG4gICAgLy8gVGhlIHdoYXR3ZyBzcGVjIGRlZmluZXMgaG93IHRoZSBicm93c2VyIHNob3VsZCBiZWhhdmUgYnV0IGRvZXMgbm90IGV4cGxpY2l0bHkgbWVudGlvbiBhbnkgZXZlbnRzOlxuICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2ludGVyYWN0aW9uLmh0bWwjZm9jdXMtZml4dXAtcnVsZS5cbiAgICBjb25zdCBpbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIGlmIChkb2MuYWN0aXZlRWxlbWVudCAmJiBkb2MuYWN0aXZlRWxlbWVudC50YWdOYW1lID09PSAnQk9EWScpIHtcbiAgICAgICAgY29udGFpbigpO1xuICAgICAgfVxuICAgIH0sIDUwKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG4gICAgICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXNpbicsIGNvbnRhaW4pO1xuICAgICAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBsb29wRm9jdXMsIHRydWUpO1xuICAgIH07XG4gIH0sIFtkaXNhYmxlQXV0b0ZvY3VzLCBkaXNhYmxlRW5mb3JjZUZvY3VzLCBkaXNhYmxlUmVzdG9yZUZvY3VzLCBpc0VuYWJsZWQsIG9wZW4sIGdldFRhYmJhYmxlXSk7XG4gIGNvbnN0IG9uRm9jdXMgPSBldmVudCA9PiB7XG4gICAgaWYgKG5vZGVUb1Jlc3RvcmUuY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgbm9kZVRvUmVzdG9yZS5jdXJyZW50ID0gZXZlbnQucmVsYXRlZFRhcmdldDtcbiAgICB9XG4gICAgYWN0aXZhdGVkLmN1cnJlbnQgPSB0cnVlO1xuICAgIHJlYWN0Rm9jdXNFdmVudFRhcmdldC5jdXJyZW50ID0gZXZlbnQudGFyZ2V0O1xuICAgIGNvbnN0IGNoaWxkcmVuUHJvcHNIYW5kbGVyID0gY2hpbGRyZW4ucHJvcHMub25Gb2N1cztcbiAgICBpZiAoY2hpbGRyZW5Qcm9wc0hhbmRsZXIpIHtcbiAgICAgIGNoaWxkcmVuUHJvcHNIYW5kbGVyKGV2ZW50KTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGhhbmRsZUZvY3VzU2VudGluZWwgPSBldmVudCA9PiB7XG4gICAgaWYgKG5vZGVUb1Jlc3RvcmUuY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgbm9kZVRvUmVzdG9yZS5jdXJyZW50ID0gZXZlbnQucmVsYXRlZFRhcmdldDtcbiAgICB9XG4gICAgYWN0aXZhdGVkLmN1cnJlbnQgPSB0cnVlO1xuICB9O1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKFJlYWN0LkZyYWdtZW50LCB7XG4gICAgY2hpbGRyZW46IFsvKiNfX1BVUkVfXyovX2pzeChcImRpdlwiLCB7XG4gICAgICB0YWJJbmRleDogb3BlbiA/IDAgOiAtMSxcbiAgICAgIG9uRm9jdXM6IGhhbmRsZUZvY3VzU2VudGluZWwsXG4gICAgICByZWY6IHNlbnRpbmVsU3RhcnQsXG4gICAgICBcImRhdGEtdGVzdGlkXCI6IFwic2VudGluZWxTdGFydFwiXG4gICAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGRyZW4sIHtcbiAgICAgIHJlZjogaGFuZGxlUmVmLFxuICAgICAgb25Gb2N1c1xuICAgIH0pLCAvKiNfX1BVUkVfXyovX2pzeChcImRpdlwiLCB7XG4gICAgICB0YWJJbmRleDogb3BlbiA/IDAgOiAtMSxcbiAgICAgIG9uRm9jdXM6IGhhbmRsZUZvY3VzU2VudGluZWwsXG4gICAgICByZWY6IHNlbnRpbmVsRW5kLFxuICAgICAgXCJkYXRhLXRlc3RpZFwiOiBcInNlbnRpbmVsRW5kXCJcbiAgICB9KV1cbiAgfSk7XG59XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBGb2N1c1RyYXAucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBUeXBlU2NyaXB0IHR5cGVzIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4g4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogQSBzaW5nbGUgY2hpbGQgY29udGVudCBlbGVtZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IGVsZW1lbnRBY2NlcHRpbmdSZWYsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBmb2N1cyB0cmFwIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgc2hpZnQgZm9jdXMgdG8gaXRzZWxmIHdoZW4gaXQgb3BlbnMsIGFuZFxuICAgKiByZXBsYWNlIGl0IHRvIHRoZSBsYXN0IGZvY3VzZWQgZWxlbWVudCB3aGVuIGl0IGNsb3Nlcy5cbiAgICogVGhpcyBhbHNvIHdvcmtzIGNvcnJlY3RseSB3aXRoIGFueSBmb2N1cyB0cmFwIGNoaWxkcmVuIHRoYXQgaGF2ZSB0aGUgYGRpc2FibGVBdXRvRm9jdXNgIHByb3AuXG4gICAqXG4gICAqIEdlbmVyYWxseSB0aGlzIHNob3VsZCBuZXZlciBiZSBzZXQgdG8gYHRydWVgIGFzIGl0IG1ha2VzIHRoZSBmb2N1cyB0cmFwIGxlc3NcbiAgICogYWNjZXNzaWJsZSB0byBhc3Npc3RpdmUgdGVjaG5vbG9naWVzLCBsaWtlIHNjcmVlbiByZWFkZXJzLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBmb2N1cyB0cmFwIHdpbGwgbm90IHByZXZlbnQgZm9jdXMgZnJvbSBsZWF2aW5nIHRoZSBmb2N1cyB0cmFwIHdoaWxlIG9wZW4uXG4gICAqXG4gICAqIEdlbmVyYWxseSB0aGlzIHNob3VsZCBuZXZlciBiZSBzZXQgdG8gYHRydWVgIGFzIGl0IG1ha2VzIHRoZSBmb2N1cyB0cmFwIGxlc3NcbiAgICogYWNjZXNzaWJsZSB0byBhc3Npc3RpdmUgdGVjaG5vbG9naWVzLCBsaWtlIHNjcmVlbiByZWFkZXJzLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUVuZm9yY2VGb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBmb2N1cyB0cmFwIHdpbGwgbm90IHJlc3RvcmUgZm9jdXMgdG8gcHJldmlvdXNseSBmb2N1c2VkIGVsZW1lbnQgb25jZVxuICAgKiBmb2N1cyB0cmFwIGlzIGhpZGRlbiBvciB1bm1vdW50ZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlUmVzdG9yZUZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFJldHVybnMgYW4gYXJyYXkgb2Ygb3JkZXJlZCB0YWJiYWJsZSBub2RlcyAoaS5lLiBpbiB0YWIgb3JkZXIpIHdpdGhpbiB0aGUgcm9vdC5cbiAgICogRm9yIGluc3RhbmNlLCB5b3UgY2FuIHByb3ZpZGUgdGhlIFwidGFiYmFibGVcIiBucG0gZGVwZW5kZW5jeS5cbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcm9vdFxuICAgKi9cbiAgZ2V0VGFiYmFibGU6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogVGhpcyBwcm9wIGV4dGVuZHMgdGhlIGBvcGVuYCBwcm9wLlxuICAgKiBJdCBhbGxvd3MgdG8gdG9nZ2xlIHRoZSBvcGVuIHN0YXRlIHdpdGhvdXQgaGF2aW5nIHRvIHdhaXQgZm9yIGEgcmVyZW5kZXIgd2hlbiBjaGFuZ2luZyB0aGUgYG9wZW5gIHByb3AuXG4gICAqIFRoaXMgcHJvcCBzaG91bGQgYmUgbWVtb2l6ZWQuXG4gICAqIEl0IGNhbiBiZSB1c2VkIHRvIHN1cHBvcnQgbXVsdGlwbGUgZm9jdXMgdHJhcCBtb3VudGVkIGF0IHRoZSBzYW1lIHRpbWUuXG4gICAqIEBkZWZhdWx0IGZ1bmN0aW9uIGRlZmF1bHRJc0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAqICAgcmV0dXJuIHRydWU7XG4gICAqIH1cbiAgICovXG4gIGlzRW5hYmxlZDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGZvY3VzIGlzIGxvY2tlZC5cbiAgICovXG4gIG9wZW46IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWRcbn0gOiB2b2lkIDA7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgRm9jdXNUcmFwWydwcm9wVHlwZXMnICsgJyddID0gZXhhY3RQcm9wKEZvY3VzVHJhcC5wcm9wVHlwZXMpO1xufVxuZXhwb3J0IGRlZmF1bHQgRm9jdXNUcmFwOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0ICogYXMgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBleGFjdFByb3AsIEhUTUxFbGVtZW50VHlwZSwgdW5zdGFibGVfdXNlRW5oYW5jZWRFZmZlY3QgYXMgdXNlRW5oYW5jZWRFZmZlY3QsIHVuc3RhYmxlX3VzZUZvcmtSZWYgYXMgdXNlRm9ya1JlZiwgdW5zdGFibGVfc2V0UmVmIGFzIHNldFJlZiwgdW5zdGFibGVfZ2V0UmVhY3RFbGVtZW50UmVmIGFzIGdldFJlYWN0RWxlbWVudFJlZiB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmZ1bmN0aW9uIGdldENvbnRhaW5lcihjb250YWluZXIpIHtcbiAgcmV0dXJuIHR5cGVvZiBjb250YWluZXIgPT09ICdmdW5jdGlvbicgPyBjb250YWluZXIoKSA6IGNvbnRhaW5lcjtcbn1cblxuLyoqXG4gKiBQb3J0YWxzIHByb3ZpZGUgYSBmaXJzdC1jbGFzcyB3YXkgdG8gcmVuZGVyIGNoaWxkcmVuIGludG8gYSBET00gbm9kZVxuICogdGhhdCBleGlzdHMgb3V0c2lkZSB0aGUgRE9NIGhpZXJhcmNoeSBvZiB0aGUgcGFyZW50IGNvbXBvbmVudC5cbiAqXG4gKiBEZW1vczpcbiAqXG4gKiAtIFtQb3J0YWxdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9yZWFjdC1wb3J0YWwvKVxuICpcbiAqIEFQSTpcbiAqXG4gKiAtIFtQb3J0YWwgQVBJXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvYXBpL3BvcnRhbC8pXG4gKi9cbmNvbnN0IFBvcnRhbCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFBvcnRhbChwcm9wcywgZm9yd2FyZGVkUmVmKSB7XG4gIGNvbnN0IHtcbiAgICBjaGlsZHJlbixcbiAgICBjb250YWluZXIsXG4gICAgZGlzYWJsZVBvcnRhbCA9IGZhbHNlXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgW21vdW50Tm9kZSwgc2V0TW91bnROb2RlXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBoYW5kbGVSZWYgPSB1c2VGb3JrUmVmKCAvKiNfX1BVUkVfXyovUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pID8gZ2V0UmVhY3RFbGVtZW50UmVmKGNoaWxkcmVuKSA6IG51bGwsIGZvcndhcmRlZFJlZik7XG4gIHVzZUVuaGFuY2VkRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWRpc2FibGVQb3J0YWwpIHtcbiAgICAgIHNldE1vdW50Tm9kZShnZXRDb250YWluZXIoY29udGFpbmVyKSB8fCBkb2N1bWVudC5ib2R5KTtcbiAgICB9XG4gIH0sIFtjb250YWluZXIsIGRpc2FibGVQb3J0YWxdKTtcbiAgdXNlRW5oYW5jZWRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChtb3VudE5vZGUgJiYgIWRpc2FibGVQb3J0YWwpIHtcbiAgICAgIHNldFJlZihmb3J3YXJkZWRSZWYsIG1vdW50Tm9kZSk7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBzZXRSZWYoZm9yd2FyZGVkUmVmLCBudWxsKTtcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0sIFtmb3J3YXJkZWRSZWYsIG1vdW50Tm9kZSwgZGlzYWJsZVBvcnRhbF0pO1xuICBpZiAoZGlzYWJsZVBvcnRhbCkge1xuICAgIGlmICggLyojX19QVVJFX18qL1JlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSkge1xuICAgICAgY29uc3QgbmV3UHJvcHMgPSB7XG4gICAgICAgIHJlZjogaGFuZGxlUmVmXG4gICAgICB9O1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGRyZW4sIG5ld1Byb3BzKTtcbiAgICB9XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFJlYWN0LkZyYWdtZW50LCB7XG4gICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goUmVhY3QuRnJhZ21lbnQsIHtcbiAgICBjaGlsZHJlbjogbW91bnROb2RlID8gLyojX19QVVJFX18qL1JlYWN0RE9NLmNyZWF0ZVBvcnRhbChjaGlsZHJlbiwgbW91bnROb2RlKSA6IG1vdW50Tm9kZVxuICB9KTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gUG9ydGFsLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgV2FybmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgLy8g4pSCIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4g4pSCXG4gIC8vIOKUgiBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgVHlwZVNjcmlwdCB0eXBlcyBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuIOKUglxuICAvLyDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgLyoqXG4gICAqIFRoZSBjaGlsZHJlbiB0byByZW5kZXIgaW50byB0aGUgYGNvbnRhaW5lcmAuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBBbiBIVE1MIGVsZW1lbnQgb3IgZnVuY3Rpb24gdGhhdCByZXR1cm5zIG9uZS5cbiAgICogVGhlIGBjb250YWluZXJgIHdpbGwgaGF2ZSB0aGUgcG9ydGFsIGNoaWxkcmVuIGFwcGVuZGVkIHRvIGl0LlxuICAgKlxuICAgKiBZb3UgY2FuIGFsc28gcHJvdmlkZSBhIGNhbGxiYWNrLCB3aGljaCBpcyBjYWxsZWQgaW4gYSBSZWFjdCBsYXlvdXQgZWZmZWN0LlxuICAgKiBUaGlzIGxldHMgeW91IHNldCB0aGUgY29udGFpbmVyIGZyb20gYSByZWYsIGFuZCBhbHNvIG1ha2VzIHNlcnZlci1zaWRlIHJlbmRlcmluZyBwb3NzaWJsZS5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgaXQgdXNlcyB0aGUgYm9keSBvZiB0aGUgdG9wLWxldmVsIGRvY3VtZW50IG9iamVjdCxcbiAgICogc28gaXQncyBzaW1wbHkgYGRvY3VtZW50LmJvZHlgIG1vc3Qgb2YgdGhlIHRpbWUuXG4gICAqL1xuICBjb250YWluZXI6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbSFRNTEVsZW1lbnRUeXBlLCBQcm9wVHlwZXMuZnVuY10pLFxuICAvKipcbiAgICogVGhlIGBjaGlsZHJlbmAgd2lsbCBiZSB1bmRlciB0aGUgRE9NIGhpZXJhcmNoeSBvZiB0aGUgcGFyZW50IGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVQb3J0YWw6IFByb3BUeXBlcy5ib29sXG59IDogdm9pZCAwO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gIFBvcnRhbFsncHJvcFR5cGVzJyArICcnXSA9IGV4YWN0UHJvcChQb3J0YWwucHJvcFR5cGVzKTtcbn1cbmV4cG9ydCBkZWZhdWx0IFBvcnRhbDsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhZGRFbmRMaXN0ZW5lclwiLCBcImFwcGVhclwiLCBcImNoaWxkcmVuXCIsIFwiZWFzaW5nXCIsIFwiaW5cIiwgXCJvbkVudGVyXCIsIFwib25FbnRlcmVkXCIsIFwib25FbnRlcmluZ1wiLCBcIm9uRXhpdFwiLCBcIm9uRXhpdGVkXCIsIFwib25FeGl0aW5nXCIsIFwic3R5bGVcIiwgXCJ0aW1lb3V0XCIsIFwiVHJhbnNpdGlvbkNvbXBvbmVudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBUcmFuc2l0aW9uIH0gZnJvbSAncmVhY3QtdHJhbnNpdGlvbi1ncm91cCc7XG5pbXBvcnQgZWxlbWVudEFjY2VwdGluZ1JlZiBmcm9tICdAbXVpL3V0aWxzL2VsZW1lbnRBY2NlcHRpbmdSZWYnO1xuaW1wb3J0IGdldFJlYWN0RWxlbWVudFJlZiBmcm9tICdAbXVpL3V0aWxzL2dldFJlYWN0RWxlbWVudFJlZic7XG5pbXBvcnQgdXNlVGhlbWUgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lJztcbmltcG9ydCB7IHJlZmxvdywgZ2V0VHJhbnNpdGlvblByb3BzIH0gZnJvbSAnLi4vdHJhbnNpdGlvbnMvdXRpbHMnO1xuaW1wb3J0IHVzZUZvcmtSZWYgZnJvbSAnLi4vdXRpbHMvdXNlRm9ya1JlZic7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3Qgc3R5bGVzID0ge1xuICBlbnRlcmluZzoge1xuICAgIG9wYWNpdHk6IDFcbiAgfSxcbiAgZW50ZXJlZDoge1xuICAgIG9wYWNpdHk6IDFcbiAgfVxufTtcblxuLyoqXG4gKiBUaGUgRmFkZSB0cmFuc2l0aW9uIGlzIHVzZWQgYnkgdGhlIFtNb2RhbF0oL21hdGVyaWFsLXVpL3JlYWN0LW1vZGFsLykgY29tcG9uZW50LlxuICogSXQgdXNlcyBbcmVhY3QtdHJhbnNpdGlvbi1ncm91cF0oaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0anMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cCkgaW50ZXJuYWxseS5cbiAqL1xuY29uc3QgRmFkZSA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIEZhZGUocHJvcHMsIHJlZikge1xuICBjb25zdCB0aGVtZSA9IHVzZVRoZW1lKCk7XG4gIGNvbnN0IGRlZmF1bHRUaW1lb3V0ID0ge1xuICAgIGVudGVyOiB0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5lbnRlcmluZ1NjcmVlbixcbiAgICBleGl0OiB0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5sZWF2aW5nU2NyZWVuXG4gIH07XG4gIGNvbnN0IHtcbiAgICAgIGFkZEVuZExpc3RlbmVyLFxuICAgICAgYXBwZWFyID0gdHJ1ZSxcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgZWFzaW5nLFxuICAgICAgaW46IGluUHJvcCxcbiAgICAgIG9uRW50ZXIsXG4gICAgICBvbkVudGVyZWQsXG4gICAgICBvbkVudGVyaW5nLFxuICAgICAgb25FeGl0LFxuICAgICAgb25FeGl0ZWQsXG4gICAgICBvbkV4aXRpbmcsXG4gICAgICBzdHlsZSxcbiAgICAgIHRpbWVvdXQgPSBkZWZhdWx0VGltZW91dCxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9wcm9wLXR5cGVzXG4gICAgICBUcmFuc2l0aW9uQ29tcG9uZW50ID0gVHJhbnNpdGlvblxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBlbmFibGVTdHJpY3RNb2RlQ29tcGF0ID0gdHJ1ZTtcbiAgY29uc3Qgbm9kZVJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgaGFuZGxlUmVmID0gdXNlRm9ya1JlZihub2RlUmVmLCBnZXRSZWFjdEVsZW1lbnRSZWYoY2hpbGRyZW4pLCByZWYpO1xuICBjb25zdCBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrID0gY2FsbGJhY2sgPT4gbWF5YmVJc0FwcGVhcmluZyA9PiB7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBub2RlID0gbm9kZVJlZi5jdXJyZW50O1xuXG4gICAgICAvLyBvbkVudGVyWHh4IGFuZCBvbkV4aXRYeHggY2FsbGJhY2tzIGhhdmUgYSBkaWZmZXJlbnQgYXJndW1lbnRzLmxlbmd0aCB2YWx1ZS5cbiAgICAgIGlmIChtYXliZUlzQXBwZWFyaW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY2FsbGJhY2sobm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWxsYmFjayhub2RlLCBtYXliZUlzQXBwZWFyaW5nKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIGNvbnN0IGhhbmRsZUVudGVyaW5nID0gbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjayhvbkVudGVyaW5nKTtcbiAgY29uc3QgaGFuZGxlRW50ZXIgPSBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrKChub2RlLCBpc0FwcGVhcmluZykgPT4ge1xuICAgIHJlZmxvdyhub2RlKTsgLy8gU28gdGhlIGFuaW1hdGlvbiBhbHdheXMgc3RhcnQgZnJvbSB0aGUgc3RhcnQuXG5cbiAgICBjb25zdCB0cmFuc2l0aW9uUHJvcHMgPSBnZXRUcmFuc2l0aW9uUHJvcHMoe1xuICAgICAgc3R5bGUsXG4gICAgICB0aW1lb3V0LFxuICAgICAgZWFzaW5nXG4gICAgfSwge1xuICAgICAgbW9kZTogJ2VudGVyJ1xuICAgIH0pO1xuICAgIG5vZGUuc3R5bGUud2Via2l0VHJhbnNpdGlvbiA9IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnb3BhY2l0eScsIHRyYW5zaXRpb25Qcm9wcyk7XG4gICAgbm9kZS5zdHlsZS50cmFuc2l0aW9uID0gdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdvcGFjaXR5JywgdHJhbnNpdGlvblByb3BzKTtcbiAgICBpZiAob25FbnRlcikge1xuICAgICAgb25FbnRlcihub2RlLCBpc0FwcGVhcmluZyk7XG4gICAgfVxuICB9KTtcbiAgY29uc3QgaGFuZGxlRW50ZXJlZCA9IG5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2sob25FbnRlcmVkKTtcbiAgY29uc3QgaGFuZGxlRXhpdGluZyA9IG5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2sob25FeGl0aW5nKTtcbiAgY29uc3QgaGFuZGxlRXhpdCA9IG5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2sobm9kZSA9PiB7XG4gICAgY29uc3QgdHJhbnNpdGlvblByb3BzID0gZ2V0VHJhbnNpdGlvblByb3BzKHtcbiAgICAgIHN0eWxlLFxuICAgICAgdGltZW91dCxcbiAgICAgIGVhc2luZ1xuICAgIH0sIHtcbiAgICAgIG1vZGU6ICdleGl0J1xuICAgIH0pO1xuICAgIG5vZGUuc3R5bGUud2Via2l0VHJhbnNpdGlvbiA9IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnb3BhY2l0eScsIHRyYW5zaXRpb25Qcm9wcyk7XG4gICAgbm9kZS5zdHlsZS50cmFuc2l0aW9uID0gdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdvcGFjaXR5JywgdHJhbnNpdGlvblByb3BzKTtcbiAgICBpZiAob25FeGl0KSB7XG4gICAgICBvbkV4aXQobm9kZSk7XG4gICAgfVxuICB9KTtcbiAgY29uc3QgaGFuZGxlRXhpdGVkID0gbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjayhvbkV4aXRlZCk7XG4gIGNvbnN0IGhhbmRsZUFkZEVuZExpc3RlbmVyID0gbmV4dCA9PiB7XG4gICAgaWYgKGFkZEVuZExpc3RlbmVyKSB7XG4gICAgICAvLyBPbGQgY2FsbCBzaWduYXR1cmUgYmVmb3JlIGByZWFjdC10cmFuc2l0aW9uLWdyb3VwYCBpbXBsZW1lbnRlZCBgbm9kZVJlZmBcbiAgICAgIGFkZEVuZExpc3RlbmVyKG5vZGVSZWYuY3VycmVudCwgbmV4dCk7XG4gICAgfVxuICB9O1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goVHJhbnNpdGlvbkNvbXBvbmVudCwgX2V4dGVuZHMoe1xuICAgIGFwcGVhcjogYXBwZWFyLFxuICAgIGluOiBpblByb3AsXG4gICAgbm9kZVJlZjogZW5hYmxlU3RyaWN0TW9kZUNvbXBhdCA/IG5vZGVSZWYgOiB1bmRlZmluZWQsXG4gICAgb25FbnRlcjogaGFuZGxlRW50ZXIsXG4gICAgb25FbnRlcmVkOiBoYW5kbGVFbnRlcmVkLFxuICAgIG9uRW50ZXJpbmc6IGhhbmRsZUVudGVyaW5nLFxuICAgIG9uRXhpdDogaGFuZGxlRXhpdCxcbiAgICBvbkV4aXRlZDogaGFuZGxlRXhpdGVkLFxuICAgIG9uRXhpdGluZzogaGFuZGxlRXhpdGluZyxcbiAgICBhZGRFbmRMaXN0ZW5lcjogaGFuZGxlQWRkRW5kTGlzdGVuZXIsXG4gICAgdGltZW91dDogdGltZW91dFxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiAoc3RhdGUsIGNoaWxkUHJvcHMpID0+IHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCBfZXh0ZW5kcyh7XG4gICAgICAgIHN0eWxlOiBfZXh0ZW5kcyh7XG4gICAgICAgICAgb3BhY2l0eTogMCxcbiAgICAgICAgICB2aXNpYmlsaXR5OiBzdGF0ZSA9PT0gJ2V4aXRlZCcgJiYgIWluUHJvcCA/ICdoaWRkZW4nIDogdW5kZWZpbmVkXG4gICAgICAgIH0sIHN0eWxlc1tzdGF0ZV0sIHN0eWxlLCBjaGlsZHJlbi5wcm9wcy5zdHlsZSksXG4gICAgICAgIHJlZjogaGFuZGxlUmVmXG4gICAgICB9LCBjaGlsZFByb3BzKSk7XG4gICAgfVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEZhZGUucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogQWRkIGEgY3VzdG9tIHRyYW5zaXRpb24gZW5kIHRyaWdnZXIuIENhbGxlZCB3aXRoIHRoZSB0cmFuc2l0aW9uaW5nIERPTVxuICAgKiBub2RlIGFuZCBhIGRvbmUgY2FsbGJhY2suIEFsbG93cyBmb3IgbW9yZSBmaW5lIGdyYWluZWQgdHJhbnNpdGlvbiBlbmRcbiAgICogbG9naWMuIE5vdGU6IFRpbWVvdXRzIGFyZSBzdGlsbCB1c2VkIGFzIGEgZmFsbGJhY2sgaWYgcHJvdmlkZWQuXG4gICAqL1xuICBhZGRFbmRMaXN0ZW5lcjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBQZXJmb3JtIHRoZSBlbnRlciB0cmFuc2l0aW9uIHdoZW4gaXQgZmlyc3QgbW91bnRzIGlmIGBpbmAgaXMgYWxzbyBgdHJ1ZWAuXG4gICAqIFNldCB0aGlzIHRvIGBmYWxzZWAgdG8gZGlzYWJsZSB0aGlzIGJlaGF2aW9yLlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBhcHBlYXI6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogQSBzaW5nbGUgY2hpbGQgY29udGVudCBlbGVtZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IGVsZW1lbnRBY2NlcHRpbmdSZWYuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAqIFRoZSB0cmFuc2l0aW9uIHRpbWluZyBmdW5jdGlvbi5cbiAgICogWW91IG1heSBzcGVjaWZ5IGEgc2luZ2xlIGVhc2luZyBvciBhIG9iamVjdCBjb250YWluaW5nIGVudGVyIGFuZCBleGl0IHZhbHVlcy5cbiAgICovXG4gIGVhc2luZzogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBlbnRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBleGl0OiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgd2lsbCB0cmFuc2l0aW9uIGluLlxuICAgKi9cbiAgaW46IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25FbnRlcjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkVudGVyZWQ6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25FbnRlcmluZzogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkV4aXQ6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25FeGl0ZWQ6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25FeGl0aW5nOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogVGhlIGR1cmF0aW9uIGZvciB0aGUgdHJhbnNpdGlvbiwgaW4gbWlsbGlzZWNvbmRzLlxuICAgKiBZb3UgbWF5IHNwZWNpZnkgYSBzaW5nbGUgdGltZW91dCBmb3IgYWxsIHRyYW5zaXRpb25zLCBvciBpbmRpdmlkdWFsbHkgd2l0aCBhbiBvYmplY3QuXG4gICAqIEBkZWZhdWx0IHtcbiAgICogICBlbnRlcjogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uZW50ZXJpbmdTY3JlZW4sXG4gICAqICAgZXhpdDogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24ubGVhdmluZ1NjcmVlbixcbiAgICogfVxuICAgKi9cbiAgdGltZW91dDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBhcHBlYXI6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgZW50ZXI6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgZXhpdDogUHJvcFR5cGVzLm51bWJlclxuICB9KV0pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgRmFkZTsiLCJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJhY2tkcm9wVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlCYWNrZHJvcCcsIHNsb3QpO1xufVxuY29uc3QgYmFja2Ryb3BDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpQmFja2Ryb3AnLCBbJ3Jvb3QnLCAnaW52aXNpYmxlJ10pO1xuZXhwb3J0IGRlZmF1bHQgYmFja2Ryb3BDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29tcG9uZW50XCIsIFwiY29tcG9uZW50c1wiLCBcImNvbXBvbmVudHNQcm9wc1wiLCBcImludmlzaWJsZVwiLCBcIm9wZW5cIiwgXCJzbG90UHJvcHNcIiwgXCJzbG90c1wiLCBcIlRyYW5zaXRpb25Db21wb25lbnRcIiwgXCJ0cmFuc2l0aW9uRHVyYXRpb25cIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsgdXNlRGVmYXVsdFByb3BzIH0gZnJvbSAnLi4vRGVmYXVsdFByb3BzUHJvdmlkZXInO1xuaW1wb3J0IEZhZGUgZnJvbSAnLi4vRmFkZSc7XG5pbXBvcnQgeyBnZXRCYWNrZHJvcFV0aWxpdHlDbGFzcyB9IGZyb20gJy4vYmFja2Ryb3BDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBpbnZpc2libGVcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIGludmlzaWJsZSAmJiAnaW52aXNpYmxlJ11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRCYWNrZHJvcFV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuY29uc3QgQmFja2Ryb3BSb290ID0gc3R5bGVkKCdkaXYnLCB7XG4gIG5hbWU6ICdNdWlCYWNrZHJvcCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCBvd25lclN0YXRlLmludmlzaWJsZSAmJiBzdHlsZXMuaW52aXNpYmxlXTtcbiAgfVxufSkoKHtcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICByaWdodDogMCxcbiAgYm90dG9tOiAwLFxuICB0b3A6IDAsXG4gIGxlZnQ6IDAsXG4gIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwgMCwgMCwgMC41KScsXG4gIFdlYmtpdFRhcEhpZ2hsaWdodENvbG9yOiAndHJhbnNwYXJlbnQnXG59LCBvd25lclN0YXRlLmludmlzaWJsZSAmJiB7XG4gIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50J1xufSkpO1xuY29uc3QgQmFja2Ryb3AgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBCYWNrZHJvcChpblByb3BzLCByZWYpIHtcbiAgdmFyIF9zbG90UHJvcHMkcm9vdCwgX3JlZiwgX3Nsb3RzJHJvb3Q7XG4gIGNvbnN0IHByb3BzID0gdXNlRGVmYXVsdFByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpQmFja2Ryb3AnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBjaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbXBvbmVudCA9ICdkaXYnLFxuICAgICAgY29tcG9uZW50cyA9IHt9LFxuICAgICAgY29tcG9uZW50c1Byb3BzID0ge30sXG4gICAgICBpbnZpc2libGUgPSBmYWxzZSxcbiAgICAgIG9wZW4sXG4gICAgICBzbG90UHJvcHMgPSB7fSxcbiAgICAgIHNsb3RzID0ge30sXG4gICAgICBUcmFuc2l0aW9uQ29tcG9uZW50ID0gRmFkZSxcbiAgICAgIHRyYW5zaXRpb25EdXJhdGlvblxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29tcG9uZW50LFxuICAgIGludmlzaWJsZVxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICBjb25zdCByb290U2xvdFByb3BzID0gKF9zbG90UHJvcHMkcm9vdCA9IHNsb3RQcm9wcy5yb290KSAhPSBudWxsID8gX3Nsb3RQcm9wcyRyb290IDogY29tcG9uZW50c1Byb3BzLnJvb3Q7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChUcmFuc2l0aW9uQ29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgaW46IG9wZW4sXG4gICAgdGltZW91dDogdHJhbnNpdGlvbkR1cmF0aW9uXG4gIH0sIG90aGVyLCB7XG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KEJhY2tkcm9wUm9vdCwgX2V4dGVuZHMoe1xuICAgICAgXCJhcmlhLWhpZGRlblwiOiB0cnVlXG4gICAgfSwgcm9vdFNsb3RQcm9wcywge1xuICAgICAgYXM6IChfcmVmID0gKF9zbG90cyRyb290ID0gc2xvdHMucm9vdCkgIT0gbnVsbCA/IF9zbG90cyRyb290IDogY29tcG9uZW50cy5Sb290KSAhPSBudWxsID8gX3JlZiA6IGNvbXBvbmVudCxcbiAgICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSwgcm9vdFNsb3RQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogcm9vdFNsb3RQcm9wcy5jbGFzc05hbWUpLFxuICAgICAgb3duZXJTdGF0ZTogX2V4dGVuZHMoe30sIG93bmVyU3RhdGUsIHJvb3RTbG90UHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IHJvb3RTbG90UHJvcHMub3duZXJTdGF0ZSksXG4gICAgICBjbGFzc2VzOiBjbGFzc2VzLFxuICAgICAgcmVmOiByZWYsXG4gICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICB9KSlcbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBCYWNrZHJvcC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFdhcm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIOKUglxuICAvLyDilIIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICDilIJcbiAgLy8g4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZS5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYHNsb3RzYCBwcm9wLlxuICAgKiBJdCdzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgYHNsb3RzYCBwcm9wIGluc3RlYWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIFJvb3Q6IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBleHRyYSBwcm9wcyBmb3IgdGhlIHNsb3QgY29tcG9uZW50cy5cbiAgICogWW91IGNhbiBvdmVycmlkZSB0aGUgZXhpc3RpbmcgcHJvcHMgb3IgYWRkIG5ldyBvbmVzLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgc2xvdFByb3BzYCBwcm9wLlxuICAgKiBJdCdzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgYHNsb3RQcm9wc2AgcHJvcCBpbnN0ZWFkLCBhcyBgY29tcG9uZW50c1Byb3BzYCB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGNvbXBvbmVudHNQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICByb290OiBQcm9wVHlwZXMub2JqZWN0XG4gIH0pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYmFja2Ryb3AgaXMgaW52aXNpYmxlLlxuICAgKiBJdCBjYW4gYmUgdXNlZCB3aGVuIHJlbmRlcmluZyBhIHBvcG92ZXIgb3IgYSBjdXN0b20gc2VsZWN0IGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGludmlzaWJsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgc2hvd24uXG4gICAqL1xuICBvcGVuOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAvKipcbiAgICogVGhlIGV4dHJhIHByb3BzIGZvciB0aGUgc2xvdCBjb21wb25lbnRzLlxuICAgKiBZb3UgY2FuIG92ZXJyaWRlIHRoZSBleGlzdGluZyBwcm9wcyBvciBhZGQgbmV3IG9uZXMuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBjb21wb25lbnRzUHJvcHNgIHByb3AsIHdoaWNoIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgZnV0dXJlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIHJvb3Q6IFByb3BUeXBlcy5vYmplY3RcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50cyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgY29tcG9uZW50c2AgcHJvcCwgd2hpY2ggd2lsbCBiZSBkZXByZWNhdGVkIGluIHRoZSBmdXR1cmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICByb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSB0cmFuc2l0aW9uLlxuICAgKiBbRm9sbG93IHRoaXMgZ3VpZGVdKC9tYXRlcmlhbC11aS90cmFuc2l0aW9ucy8jdHJhbnNpdGlvbmNvbXBvbmVudC1wcm9wKSB0byBsZWFybiBtb3JlIGFib3V0IHRoZSByZXF1aXJlbWVudHMgZm9yIHRoaXMgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCBGYWRlXG4gICAqL1xuICBUcmFuc2l0aW9uQ29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBUaGUgZHVyYXRpb24gZm9yIHRoZSB0cmFuc2l0aW9uLCBpbiBtaWxsaXNlY29uZHMuXG4gICAqIFlvdSBtYXkgc3BlY2lmeSBhIHNpbmdsZSB0aW1lb3V0IGZvciBhbGwgdHJhbnNpdGlvbnMsIG9yIGluZGl2aWR1YWxseSB3aXRoIGFuIG9iamVjdC5cbiAgICovXG4gIHRyYW5zaXRpb25EdXJhdGlvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBhcHBlYXI6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgZW50ZXI6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgZXhpdDogUHJvcFR5cGVzLm51bWJlclxuICB9KV0pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgQmFja2Ryb3A7IiwiaW1wb3J0IHsgdW5zdGFibGVfb3duZXJXaW5kb3cgYXMgb3duZXJXaW5kb3csIHVuc3RhYmxlX293bmVyRG9jdW1lbnQgYXMgb3duZXJEb2N1bWVudCwgdW5zdGFibGVfZ2V0U2Nyb2xsYmFyU2l6ZSBhcyBnZXRTY3JvbGxiYXJTaXplIH0gZnJvbSAnQG11aS91dGlscyc7XG4vLyBJcyBhIHZlcnRpY2FsIHNjcm9sbGJhciBkaXNwbGF5ZWQ/XG5mdW5jdGlvbiBpc092ZXJmbG93aW5nKGNvbnRhaW5lcikge1xuICBjb25zdCBkb2MgPSBvd25lckRvY3VtZW50KGNvbnRhaW5lcik7XG4gIGlmIChkb2MuYm9keSA9PT0gY29udGFpbmVyKSB7XG4gICAgcmV0dXJuIG93bmVyV2luZG93KGNvbnRhaW5lcikuaW5uZXJXaWR0aCA+IGRvYy5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7XG4gIH1cbiAgcmV0dXJuIGNvbnRhaW5lci5zY3JvbGxIZWlnaHQgPiBjb250YWluZXIuY2xpZW50SGVpZ2h0O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGFyaWFIaWRkZW4oZWxlbWVudCwgc2hvdykge1xuICBpZiAoc2hvdykge1xuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsICd0cnVlJyk7XG4gIH0gZWxzZSB7XG4gICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJyk7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldFBhZGRpbmdSaWdodChlbGVtZW50KSB7XG4gIHJldHVybiBwYXJzZUludChvd25lcldpbmRvdyhlbGVtZW50KS5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBhZGRpbmdSaWdodCwgMTApIHx8IDA7XG59XG5mdW5jdGlvbiBpc0FyaWFIaWRkZW5Gb3JiaWRkZW5PbkVsZW1lbnQoZWxlbWVudCkge1xuICAvLyBUaGUgZm9yYmlkZGVuIEhUTUwgdGFncyBhcmUgdGhlIG9uZXMgZnJvbSBBUklBIHNwZWNpZmljYXRpb24gdGhhdFxuICAvLyBjYW4gYmUgY2hpbGRyZW4gb2YgYm9keSBhbmQgY2FuJ3QgaGF2ZSBhcmlhLWhpZGRlbiBhdHRyaWJ1dGUuXG4gIC8vIGNmLiBodHRwczovL3d3dy53My5vcmcvVFIvaHRtbC1hcmlhLyNkb2Njb25mb3JtYW5jZVxuICBjb25zdCBmb3JiaWRkZW5UYWdOYW1lcyA9IFsnVEVNUExBVEUnLCAnU0NSSVBUJywgJ1NUWUxFJywgJ0xJTksnLCAnTUFQJywgJ01FVEEnLCAnTk9TQ1JJUFQnLCAnUElDVFVSRScsICdDT0wnLCAnQ09MR1JPVVAnLCAnUEFSQU0nLCAnU0xPVCcsICdTT1VSQ0UnLCAnVFJBQ0snXTtcbiAgY29uc3QgaXNGb3JiaWRkZW5UYWdOYW1lID0gZm9yYmlkZGVuVGFnTmFtZXMuaW5kZXhPZihlbGVtZW50LnRhZ05hbWUpICE9PSAtMTtcbiAgY29uc3QgaXNJbnB1dEhpZGRlbiA9IGVsZW1lbnQudGFnTmFtZSA9PT0gJ0lOUFVUJyAmJiBlbGVtZW50LmdldEF0dHJpYnV0ZSgndHlwZScpID09PSAnaGlkZGVuJztcbiAgcmV0dXJuIGlzRm9yYmlkZGVuVGFnTmFtZSB8fCBpc0lucHV0SGlkZGVuO1xufVxuZnVuY3Rpb24gYXJpYUhpZGRlblNpYmxpbmdzKGNvbnRhaW5lciwgbW91bnRFbGVtZW50LCBjdXJyZW50RWxlbWVudCwgZWxlbWVudHNUb0V4Y2x1ZGUsIHNob3cpIHtcbiAgY29uc3QgYmxhY2tsaXN0ID0gW21vdW50RWxlbWVudCwgY3VycmVudEVsZW1lbnQsIC4uLmVsZW1lbnRzVG9FeGNsdWRlXTtcbiAgW10uZm9yRWFjaC5jYWxsKGNvbnRhaW5lci5jaGlsZHJlbiwgZWxlbWVudCA9PiB7XG4gICAgY29uc3QgaXNOb3RFeGNsdWRlZEVsZW1lbnQgPSBibGFja2xpc3QuaW5kZXhPZihlbGVtZW50KSA9PT0gLTE7XG4gICAgY29uc3QgaXNOb3RGb3JiaWRkZW5FbGVtZW50ID0gIWlzQXJpYUhpZGRlbkZvcmJpZGRlbk9uRWxlbWVudChlbGVtZW50KTtcbiAgICBpZiAoaXNOb3RFeGNsdWRlZEVsZW1lbnQgJiYgaXNOb3RGb3JiaWRkZW5FbGVtZW50KSB7XG4gICAgICBhcmlhSGlkZGVuKGVsZW1lbnQsIHNob3cpO1xuICAgIH1cbiAgfSk7XG59XG5mdW5jdGlvbiBmaW5kSW5kZXhPZihpdGVtcywgY2FsbGJhY2spIHtcbiAgbGV0IGlkeCA9IC0xO1xuICBpdGVtcy5zb21lKChpdGVtLCBpbmRleCkgPT4ge1xuICAgIGlmIChjYWxsYmFjayhpdGVtKSkge1xuICAgICAgaWR4ID0gaW5kZXg7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9KTtcbiAgcmV0dXJuIGlkeDtcbn1cbmZ1bmN0aW9uIGhhbmRsZUNvbnRhaW5lcihjb250YWluZXJJbmZvLCBwcm9wcykge1xuICBjb25zdCByZXN0b3JlU3R5bGUgPSBbXTtcbiAgY29uc3QgY29udGFpbmVyID0gY29udGFpbmVySW5mby5jb250YWluZXI7XG4gIGlmICghcHJvcHMuZGlzYWJsZVNjcm9sbExvY2spIHtcbiAgICBpZiAoaXNPdmVyZmxvd2luZyhjb250YWluZXIpKSB7XG4gICAgICAvLyBDb21wdXRlIHRoZSBzaXplIGJlZm9yZSBhcHBseWluZyBvdmVyZmxvdyBoaWRkZW4gdG8gYXZvaWQgYW55IHNjcm9sbCBqdW1wcy5cbiAgICAgIGNvbnN0IHNjcm9sbGJhclNpemUgPSBnZXRTY3JvbGxiYXJTaXplKG93bmVyRG9jdW1lbnQoY29udGFpbmVyKSk7XG4gICAgICByZXN0b3JlU3R5bGUucHVzaCh7XG4gICAgICAgIHZhbHVlOiBjb250YWluZXIuc3R5bGUucGFkZGluZ1JpZ2h0LFxuICAgICAgICBwcm9wZXJ0eTogJ3BhZGRpbmctcmlnaHQnLFxuICAgICAgICBlbDogY29udGFpbmVyXG4gICAgICB9KTtcbiAgICAgIC8vIFVzZSBjb21wdXRlZCBzdHlsZSwgaGVyZSB0byBnZXQgdGhlIHJlYWwgcGFkZGluZyB0byBhZGQgb3VyIHNjcm9sbGJhciB3aWR0aC5cbiAgICAgIGNvbnRhaW5lci5zdHlsZS5wYWRkaW5nUmlnaHQgPSBgJHtnZXRQYWRkaW5nUmlnaHQoY29udGFpbmVyKSArIHNjcm9sbGJhclNpemV9cHhgO1xuXG4gICAgICAvLyAubXVpLWZpeGVkIGlzIGEgZ2xvYmFsIGhlbHBlci5cbiAgICAgIGNvbnN0IGZpeGVkRWxlbWVudHMgPSBvd25lckRvY3VtZW50KGNvbnRhaW5lcikucXVlcnlTZWxlY3RvckFsbCgnLm11aS1maXhlZCcpO1xuICAgICAgW10uZm9yRWFjaC5jYWxsKGZpeGVkRWxlbWVudHMsIGVsZW1lbnQgPT4ge1xuICAgICAgICByZXN0b3JlU3R5bGUucHVzaCh7XG4gICAgICAgICAgdmFsdWU6IGVsZW1lbnQuc3R5bGUucGFkZGluZ1JpZ2h0LFxuICAgICAgICAgIHByb3BlcnR5OiAncGFkZGluZy1yaWdodCcsXG4gICAgICAgICAgZWw6IGVsZW1lbnRcbiAgICAgICAgfSk7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUucGFkZGluZ1JpZ2h0ID0gYCR7Z2V0UGFkZGluZ1JpZ2h0KGVsZW1lbnQpICsgc2Nyb2xsYmFyU2l6ZX1weGA7XG4gICAgICB9KTtcbiAgICB9XG4gICAgbGV0IHNjcm9sbENvbnRhaW5lcjtcbiAgICBpZiAoY29udGFpbmVyLnBhcmVudE5vZGUgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50KSB7XG4gICAgICBzY3JvbGxDb250YWluZXIgPSBvd25lckRvY3VtZW50KGNvbnRhaW5lcikuYm9keTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU3VwcG9ydCBodG1sIG92ZXJmbG93LXk6IGF1dG8gZm9yIHNjcm9sbCBzdGFiaWxpdHkgYmV0d2VlbiBwYWdlc1xuICAgICAgLy8gaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS9zbmlwcGV0cy9jc3MvZm9yY2UtdmVydGljYWwtc2Nyb2xsYmFyL1xuICAgICAgY29uc3QgcGFyZW50ID0gY29udGFpbmVyLnBhcmVudEVsZW1lbnQ7XG4gICAgICBjb25zdCBjb250YWluZXJXaW5kb3cgPSBvd25lcldpbmRvdyhjb250YWluZXIpO1xuICAgICAgc2Nyb2xsQ29udGFpbmVyID0gKHBhcmVudCA9PSBudWxsID8gdm9pZCAwIDogcGFyZW50Lm5vZGVOYW1lKSA9PT0gJ0hUTUwnICYmIGNvbnRhaW5lcldpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHBhcmVudCkub3ZlcmZsb3dZID09PSAnc2Nyb2xsJyA/IHBhcmVudCA6IGNvbnRhaW5lcjtcbiAgICB9XG5cbiAgICAvLyBCbG9jayB0aGUgc2Nyb2xsIGV2ZW4gaWYgbm8gc2Nyb2xsYmFyIGlzIHZpc2libGUgdG8gYWNjb3VudCBmb3IgbW9iaWxlIGtleWJvYXJkXG4gICAgLy8gc2NyZWVuc2l6ZSBzaHJpbmsuXG4gICAgcmVzdG9yZVN0eWxlLnB1c2goe1xuICAgICAgdmFsdWU6IHNjcm9sbENvbnRhaW5lci5zdHlsZS5vdmVyZmxvdyxcbiAgICAgIHByb3BlcnR5OiAnb3ZlcmZsb3cnLFxuICAgICAgZWw6IHNjcm9sbENvbnRhaW5lclxuICAgIH0sIHtcbiAgICAgIHZhbHVlOiBzY3JvbGxDb250YWluZXIuc3R5bGUub3ZlcmZsb3dYLFxuICAgICAgcHJvcGVydHk6ICdvdmVyZmxvdy14JyxcbiAgICAgIGVsOiBzY3JvbGxDb250YWluZXJcbiAgICB9LCB7XG4gICAgICB2YWx1ZTogc2Nyb2xsQ29udGFpbmVyLnN0eWxlLm92ZXJmbG93WSxcbiAgICAgIHByb3BlcnR5OiAnb3ZlcmZsb3cteScsXG4gICAgICBlbDogc2Nyb2xsQ29udGFpbmVyXG4gICAgfSk7XG4gICAgc2Nyb2xsQ29udGFpbmVyLnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XG4gIH1cbiAgY29uc3QgcmVzdG9yZSA9ICgpID0+IHtcbiAgICByZXN0b3JlU3R5bGUuZm9yRWFjaCgoe1xuICAgICAgdmFsdWUsXG4gICAgICBlbCxcbiAgICAgIHByb3BlcnR5XG4gICAgfSkgPT4ge1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KHByb3BlcnR5LCB2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIHJldHVybiByZXN0b3JlO1xufVxuZnVuY3Rpb24gZ2V0SGlkZGVuU2libGluZ3MoY29udGFpbmVyKSB7XG4gIGNvbnN0IGhpZGRlblNpYmxpbmdzID0gW107XG4gIFtdLmZvckVhY2guY2FsbChjb250YWluZXIuY2hpbGRyZW4sIGVsZW1lbnQgPT4ge1xuICAgIGlmIChlbGVtZW50LmdldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKSA9PT0gJ3RydWUnKSB7XG4gICAgICBoaWRkZW5TaWJsaW5ncy5wdXNoKGVsZW1lbnQpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBoaWRkZW5TaWJsaW5ncztcbn1cbi8qKlxuICogQGlnbm9yZSAtIGRvIG5vdCBkb2N1bWVudC5cbiAqXG4gKiBQcm9wZXIgc3RhdGUgbWFuYWdlbWVudCBmb3IgY29udGFpbmVycyBhbmQgdGhlIG1vZGFscyBpbiB0aG9zZSBjb250YWluZXJzLlxuICogU2ltcGxpZmllZCwgYnV0IGluc3BpcmVkIGJ5IHJlYWN0LW92ZXJsYXkncyBNb2RhbE1hbmFnZXIgY2xhc3MuXG4gKiBVc2VkIGJ5IHRoZSBNb2RhbCB0byBlbnN1cmUgcHJvcGVyIHN0eWxpbmcgb2YgY29udGFpbmVycy5cbiAqL1xuZXhwb3J0IGNsYXNzIE1vZGFsTWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY29udGFpbmVycyA9IHZvaWQgMDtcbiAgICB0aGlzLm1vZGFscyA9IHZvaWQgMDtcbiAgICB0aGlzLm1vZGFscyA9IFtdO1xuICAgIHRoaXMuY29udGFpbmVycyA9IFtdO1xuICB9XG4gIGFkZChtb2RhbCwgY29udGFpbmVyKSB7XG4gICAgbGV0IG1vZGFsSW5kZXggPSB0aGlzLm1vZGFscy5pbmRleE9mKG1vZGFsKTtcbiAgICBpZiAobW9kYWxJbmRleCAhPT0gLTEpIHtcbiAgICAgIHJldHVybiBtb2RhbEluZGV4O1xuICAgIH1cbiAgICBtb2RhbEluZGV4ID0gdGhpcy5tb2RhbHMubGVuZ3RoO1xuICAgIHRoaXMubW9kYWxzLnB1c2gobW9kYWwpO1xuXG4gICAgLy8gSWYgdGhlIG1vZGFsIHdlIGFyZSBhZGRpbmcgaXMgYWxyZWFkeSBpbiB0aGUgRE9NLlxuICAgIGlmIChtb2RhbC5tb2RhbFJlZikge1xuICAgICAgYXJpYUhpZGRlbihtb2RhbC5tb2RhbFJlZiwgZmFsc2UpO1xuICAgIH1cbiAgICBjb25zdCBoaWRkZW5TaWJsaW5ncyA9IGdldEhpZGRlblNpYmxpbmdzKGNvbnRhaW5lcik7XG4gICAgYXJpYUhpZGRlblNpYmxpbmdzKGNvbnRhaW5lciwgbW9kYWwubW91bnQsIG1vZGFsLm1vZGFsUmVmLCBoaWRkZW5TaWJsaW5ncywgdHJ1ZSk7XG4gICAgY29uc3QgY29udGFpbmVySW5kZXggPSBmaW5kSW5kZXhPZih0aGlzLmNvbnRhaW5lcnMsIGl0ZW0gPT4gaXRlbS5jb250YWluZXIgPT09IGNvbnRhaW5lcik7XG4gICAgaWYgKGNvbnRhaW5lckluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5jb250YWluZXJzW2NvbnRhaW5lckluZGV4XS5tb2RhbHMucHVzaChtb2RhbCk7XG4gICAgICByZXR1cm4gbW9kYWxJbmRleDtcbiAgICB9XG4gICAgdGhpcy5jb250YWluZXJzLnB1c2goe1xuICAgICAgbW9kYWxzOiBbbW9kYWxdLFxuICAgICAgY29udGFpbmVyLFxuICAgICAgcmVzdG9yZTogbnVsbCxcbiAgICAgIGhpZGRlblNpYmxpbmdzXG4gICAgfSk7XG4gICAgcmV0dXJuIG1vZGFsSW5kZXg7XG4gIH1cbiAgbW91bnQobW9kYWwsIHByb3BzKSB7XG4gICAgY29uc3QgY29udGFpbmVySW5kZXggPSBmaW5kSW5kZXhPZih0aGlzLmNvbnRhaW5lcnMsIGl0ZW0gPT4gaXRlbS5tb2RhbHMuaW5kZXhPZihtb2RhbCkgIT09IC0xKTtcbiAgICBjb25zdCBjb250YWluZXJJbmZvID0gdGhpcy5jb250YWluZXJzW2NvbnRhaW5lckluZGV4XTtcbiAgICBpZiAoIWNvbnRhaW5lckluZm8ucmVzdG9yZSkge1xuICAgICAgY29udGFpbmVySW5mby5yZXN0b3JlID0gaGFuZGxlQ29udGFpbmVyKGNvbnRhaW5lckluZm8sIHByb3BzKTtcbiAgICB9XG4gIH1cbiAgcmVtb3ZlKG1vZGFsLCBhcmlhSGlkZGVuU3RhdGUgPSB0cnVlKSB7XG4gICAgY29uc3QgbW9kYWxJbmRleCA9IHRoaXMubW9kYWxzLmluZGV4T2YobW9kYWwpO1xuICAgIGlmIChtb2RhbEluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuIG1vZGFsSW5kZXg7XG4gICAgfVxuICAgIGNvbnN0IGNvbnRhaW5lckluZGV4ID0gZmluZEluZGV4T2YodGhpcy5jb250YWluZXJzLCBpdGVtID0+IGl0ZW0ubW9kYWxzLmluZGV4T2YobW9kYWwpICE9PSAtMSk7XG4gICAgY29uc3QgY29udGFpbmVySW5mbyA9IHRoaXMuY29udGFpbmVyc1tjb250YWluZXJJbmRleF07XG4gICAgY29udGFpbmVySW5mby5tb2RhbHMuc3BsaWNlKGNvbnRhaW5lckluZm8ubW9kYWxzLmluZGV4T2YobW9kYWwpLCAxKTtcbiAgICB0aGlzLm1vZGFscy5zcGxpY2UobW9kYWxJbmRleCwgMSk7XG5cbiAgICAvLyBJZiB0aGF0IHdhcyB0aGUgbGFzdCBtb2RhbCBpbiBhIGNvbnRhaW5lciwgY2xlYW4gdXAgdGhlIGNvbnRhaW5lci5cbiAgICBpZiAoY29udGFpbmVySW5mby5tb2RhbHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyBUaGUgbW9kYWwgbWlnaHQgYmUgY2xvc2VkIGJlZm9yZSBpdCBoYWQgdGhlIGNoYW5jZSB0byBiZSBtb3VudGVkIGluIHRoZSBET00uXG4gICAgICBpZiAoY29udGFpbmVySW5mby5yZXN0b3JlKSB7XG4gICAgICAgIGNvbnRhaW5lckluZm8ucmVzdG9yZSgpO1xuICAgICAgfVxuICAgICAgaWYgKG1vZGFsLm1vZGFsUmVmKSB7XG4gICAgICAgIC8vIEluIGNhc2UgdGhlIG1vZGFsIHdhc24ndCBpbiB0aGUgRE9NIHlldC5cbiAgICAgICAgYXJpYUhpZGRlbihtb2RhbC5tb2RhbFJlZiwgYXJpYUhpZGRlblN0YXRlKTtcbiAgICAgIH1cbiAgICAgIGFyaWFIaWRkZW5TaWJsaW5ncyhjb250YWluZXJJbmZvLmNvbnRhaW5lciwgbW9kYWwubW91bnQsIG1vZGFsLm1vZGFsUmVmLCBjb250YWluZXJJbmZvLmhpZGRlblNpYmxpbmdzLCBmYWxzZSk7XG4gICAgICB0aGlzLmNvbnRhaW5lcnMuc3BsaWNlKGNvbnRhaW5lckluZGV4LCAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT3RoZXJ3aXNlIG1ha2Ugc3VyZSB0aGUgbmV4dCB0b3AgbW9kYWwgaXMgdmlzaWJsZSB0byBhIHNjcmVlbiByZWFkZXIuXG4gICAgICBjb25zdCBuZXh0VG9wID0gY29udGFpbmVySW5mby5tb2RhbHNbY29udGFpbmVySW5mby5tb2RhbHMubGVuZ3RoIC0gMV07XG4gICAgICAvLyBhcyBzb29uIGFzIGEgbW9kYWwgaXMgYWRkaW5nIGl0cyBtb2RhbFJlZiBpcyB1bmRlZmluZWQuIGl0IGNhbid0IHNldFxuICAgICAgLy8gYXJpYS1oaWRkZW4gYmVjYXVzZSB0aGUgZG9tIGVsZW1lbnQgZG9lc24ndCBleGlzdCBlaXRoZXJcbiAgICAgIC8vIHdoZW4gbW9kYWwgd2FzIHVubW91bnRlZCBiZWZvcmUgbW9kYWxSZWYgZ2V0cyBudWxsXG4gICAgICBpZiAobmV4dFRvcC5tb2RhbFJlZikge1xuICAgICAgICBhcmlhSGlkZGVuKG5leHRUb3AubW9kYWxSZWYsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1vZGFsSW5kZXg7XG4gIH1cbiAgaXNUb3BNb2RhbChtb2RhbCkge1xuICAgIHJldHVybiB0aGlzLm1vZGFscy5sZW5ndGggPiAwICYmIHRoaXMubW9kYWxzW3RoaXMubW9kYWxzLmxlbmd0aCAtIDFdID09PSBtb2RhbDtcbiAgfVxufSIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1bnN0YWJsZV9vd25lckRvY3VtZW50IGFzIG93bmVyRG9jdW1lbnQsIHVuc3RhYmxlX3VzZUZvcmtSZWYgYXMgdXNlRm9ya1JlZiwgdW5zdGFibGVfdXNlRXZlbnRDYWxsYmFjayBhcyB1c2VFdmVudENhbGxiYWNrLCB1bnN0YWJsZV9jcmVhdGVDaGFpbmVkRnVuY3Rpb24gYXMgY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgZXh0cmFjdEV2ZW50SGFuZGxlcnMgZnJvbSAnQG11aS91dGlscy9leHRyYWN0RXZlbnRIYW5kbGVycyc7XG5pbXBvcnQgeyBNb2RhbE1hbmFnZXIsIGFyaWFIaWRkZW4gfSBmcm9tICcuL01vZGFsTWFuYWdlcic7XG5mdW5jdGlvbiBnZXRDb250YWluZXIoY29udGFpbmVyKSB7XG4gIHJldHVybiB0eXBlb2YgY29udGFpbmVyID09PSAnZnVuY3Rpb24nID8gY29udGFpbmVyKCkgOiBjb250YWluZXI7XG59XG5mdW5jdGlvbiBnZXRIYXNUcmFuc2l0aW9uKGNoaWxkcmVuKSB7XG4gIHJldHVybiBjaGlsZHJlbiA/IGNoaWxkcmVuLnByb3BzLmhhc093blByb3BlcnR5KCdpbicpIDogZmFsc2U7XG59XG5cbi8vIEEgbW9kYWwgbWFuYWdlciB1c2VkIHRvIHRyYWNrIGFuZCBtYW5hZ2UgdGhlIHN0YXRlIG9mIG9wZW4gTW9kYWxzLlxuLy8gTW9kYWxzIGRvbid0IG9wZW4gb24gdGhlIHNlcnZlciBzbyB0aGlzIHdvbid0IGNvbmZsaWN0IHdpdGggY29uY3VycmVudCByZXF1ZXN0cy5cbmNvbnN0IGRlZmF1bHRNYW5hZ2VyID0gbmV3IE1vZGFsTWFuYWdlcigpO1xuLyoqXG4gKlxuICogRGVtb3M6XG4gKlxuICogLSBbTW9kYWxdKGh0dHBzOi8vbXVpLmNvbS9iYXNlLXVpL3JlYWN0LW1vZGFsLyNob29rKVxuICpcbiAqIEFQSTpcbiAqXG4gKiAtIFt1c2VNb2RhbCBBUEldKGh0dHBzOi8vbXVpLmNvbS9iYXNlLXVpL3JlYWN0LW1vZGFsL2hvb2tzLWFwaS8jdXNlLW1vZGFsKVxuICovXG5mdW5jdGlvbiB1c2VNb2RhbChwYXJhbWV0ZXJzKSB7XG4gIGNvbnN0IHtcbiAgICBjb250YWluZXIsXG4gICAgZGlzYWJsZUVzY2FwZUtleURvd24gPSBmYWxzZSxcbiAgICBkaXNhYmxlU2Nyb2xsTG9jayA9IGZhbHNlLFxuICAgIC8vIEB0cy1pZ25vcmUgaW50ZXJuYWwgbG9naWMgLSBCYXNlIFVJIHN1cHBvcnRzIHRoZSBtYW5hZ2VyIGFzIGEgcHJvcCB0b29cbiAgICBtYW5hZ2VyID0gZGVmYXVsdE1hbmFnZXIsXG4gICAgY2xvc2VBZnRlclRyYW5zaXRpb24gPSBmYWxzZSxcbiAgICBvblRyYW5zaXRpb25FbnRlcixcbiAgICBvblRyYW5zaXRpb25FeGl0ZWQsXG4gICAgY2hpbGRyZW4sXG4gICAgb25DbG9zZSxcbiAgICBvcGVuLFxuICAgIHJvb3RSZWZcbiAgfSA9IHBhcmFtZXRlcnM7XG5cbiAgLy8gQHRzLWlnbm9yZSBpbnRlcm5hbCBsb2dpY1xuICBjb25zdCBtb2RhbCA9IFJlYWN0LnVzZVJlZih7fSk7XG4gIGNvbnN0IG1vdW50Tm9kZVJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgbW9kYWxSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IGhhbmRsZVJlZiA9IHVzZUZvcmtSZWYobW9kYWxSZWYsIHJvb3RSZWYpO1xuICBjb25zdCBbZXhpdGVkLCBzZXRFeGl0ZWRdID0gUmVhY3QudXNlU3RhdGUoIW9wZW4pO1xuICBjb25zdCBoYXNUcmFuc2l0aW9uID0gZ2V0SGFzVHJhbnNpdGlvbihjaGlsZHJlbik7XG4gIGxldCBhcmlhSGlkZGVuUHJvcCA9IHRydWU7XG4gIGlmIChwYXJhbWV0ZXJzWydhcmlhLWhpZGRlbiddID09PSAnZmFsc2UnIHx8IHBhcmFtZXRlcnNbJ2FyaWEtaGlkZGVuJ10gPT09IGZhbHNlKSB7XG4gICAgYXJpYUhpZGRlblByb3AgPSBmYWxzZTtcbiAgfVxuICBjb25zdCBnZXREb2MgPSAoKSA9PiBvd25lckRvY3VtZW50KG1vdW50Tm9kZVJlZi5jdXJyZW50KTtcbiAgY29uc3QgZ2V0TW9kYWwgPSAoKSA9PiB7XG4gICAgbW9kYWwuY3VycmVudC5tb2RhbFJlZiA9IG1vZGFsUmVmLmN1cnJlbnQ7XG4gICAgbW9kYWwuY3VycmVudC5tb3VudCA9IG1vdW50Tm9kZVJlZi5jdXJyZW50O1xuICAgIHJldHVybiBtb2RhbC5jdXJyZW50O1xuICB9O1xuICBjb25zdCBoYW5kbGVNb3VudGVkID0gKCkgPT4ge1xuICAgIG1hbmFnZXIubW91bnQoZ2V0TW9kYWwoKSwge1xuICAgICAgZGlzYWJsZVNjcm9sbExvY2tcbiAgICB9KTtcblxuICAgIC8vIEZpeCBhIGJ1ZyBvbiBDaHJvbWUgd2hlcmUgdGhlIHNjcm9sbCBpc24ndCBpbml0aWFsbHkgMC5cbiAgICBpZiAobW9kYWxSZWYuY3VycmVudCkge1xuICAgICAgbW9kYWxSZWYuY3VycmVudC5zY3JvbGxUb3AgPSAwO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgaGFuZGxlT3BlbiA9IHVzZUV2ZW50Q2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IHJlc29sdmVkQ29udGFpbmVyID0gZ2V0Q29udGFpbmVyKGNvbnRhaW5lcikgfHwgZ2V0RG9jKCkuYm9keTtcbiAgICBtYW5hZ2VyLmFkZChnZXRNb2RhbCgpLCByZXNvbHZlZENvbnRhaW5lcik7XG5cbiAgICAvLyBUaGUgZWxlbWVudCB3YXMgYWxyZWFkeSBtb3VudGVkLlxuICAgIGlmIChtb2RhbFJlZi5jdXJyZW50KSB7XG4gICAgICBoYW5kbGVNb3VudGVkKCk7XG4gICAgfVxuICB9KTtcbiAgY29uc3QgaXNUb3BNb2RhbCA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IG1hbmFnZXIuaXNUb3BNb2RhbChnZXRNb2RhbCgpKSwgW21hbmFnZXJdKTtcbiAgY29uc3QgaGFuZGxlUG9ydGFsUmVmID0gdXNlRXZlbnRDYWxsYmFjayhub2RlID0+IHtcbiAgICBtb3VudE5vZGVSZWYuY3VycmVudCA9IG5vZGU7XG4gICAgaWYgKCFub2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChvcGVuICYmIGlzVG9wTW9kYWwoKSkge1xuICAgICAgaGFuZGxlTW91bnRlZCgpO1xuICAgIH0gZWxzZSBpZiAobW9kYWxSZWYuY3VycmVudCkge1xuICAgICAgYXJpYUhpZGRlbihtb2RhbFJlZi5jdXJyZW50LCBhcmlhSGlkZGVuUHJvcCk7XG4gICAgfVxuICB9KTtcbiAgY29uc3QgaGFuZGxlQ2xvc2UgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgbWFuYWdlci5yZW1vdmUoZ2V0TW9kYWwoKSwgYXJpYUhpZGRlblByb3ApO1xuICB9LCBbYXJpYUhpZGRlblByb3AsIG1hbmFnZXJdKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaGFuZGxlQ2xvc2UoKTtcbiAgICB9O1xuICB9LCBbaGFuZGxlQ2xvc2VdKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAob3Blbikge1xuICAgICAgaGFuZGxlT3BlbigpO1xuICAgIH0gZWxzZSBpZiAoIWhhc1RyYW5zaXRpb24gfHwgIWNsb3NlQWZ0ZXJUcmFuc2l0aW9uKSB7XG4gICAgICBoYW5kbGVDbG9zZSgpO1xuICAgIH1cbiAgfSwgW29wZW4sIGhhbmRsZUNsb3NlLCBoYXNUcmFuc2l0aW9uLCBjbG9zZUFmdGVyVHJhbnNpdGlvbiwgaGFuZGxlT3Blbl0pO1xuICBjb25zdCBjcmVhdGVIYW5kbGVLZXlEb3duID0gb3RoZXJIYW5kbGVycyA9PiBldmVudCA9PiB7XG4gICAgdmFyIF9vdGhlckhhbmRsZXJzJG9uS2V5RDtcbiAgICAoX290aGVySGFuZGxlcnMkb25LZXlEID0gb3RoZXJIYW5kbGVycy5vbktleURvd24pID09IG51bGwgfHwgX290aGVySGFuZGxlcnMkb25LZXlELmNhbGwob3RoZXJIYW5kbGVycywgZXZlbnQpO1xuXG4gICAgLy8gVGhlIGhhbmRsZXIgZG9lc24ndCB0YWtlIGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgaW50byBhY2NvdW50OlxuICAgIC8vXG4gICAgLy8gZXZlbnQucHJldmVudERlZmF1bHQoKSBpcyBtZWFudCB0byBzdG9wIGRlZmF1bHQgYmVoYXZpb3JzIGxpa2VcbiAgICAvLyBjbGlja2luZyBhIGNoZWNrYm94IHRvIGNoZWNrIGl0LCBoaXR0aW5nIGEgYnV0dG9uIHRvIHN1Ym1pdCBhIGZvcm0sXG4gICAgLy8gYW5kIGhpdHRpbmcgbGVmdCBhcnJvdyB0byBtb3ZlIHRoZSBjdXJzb3IgaW4gYSB0ZXh0IGlucHV0IGV0Yy5cbiAgICAvLyBPbmx5IHNwZWNpYWwgSFRNTCBlbGVtZW50cyBoYXZlIHRoZXNlIGRlZmF1bHQgYmVoYXZpb3JzLlxuICAgIGlmIChldmVudC5rZXkgIT09ICdFc2NhcGUnIHx8IGV2ZW50LndoaWNoID09PSAyMjkgfHxcbiAgICAvLyBXYWl0IHVudGlsIElNRSBpcyBzZXR0bGVkLlxuICAgICFpc1RvcE1vZGFsKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFkaXNhYmxlRXNjYXBlS2V5RG93bikge1xuICAgICAgLy8gU3dhbGxvdyB0aGUgZXZlbnQsIGluIGNhc2Ugc29tZW9uZSBpcyBsaXN0ZW5pbmcgZm9yIHRoZSBlc2NhcGUga2V5IG9uIHRoZSBib2R5LlxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBpZiAob25DbG9zZSkge1xuICAgICAgICBvbkNsb3NlKGV2ZW50LCAnZXNjYXBlS2V5RG93bicpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgY29uc3QgY3JlYXRlSGFuZGxlQmFja2Ryb3BDbGljayA9IG90aGVySGFuZGxlcnMgPT4gZXZlbnQgPT4ge1xuICAgIHZhciBfb3RoZXJIYW5kbGVycyRvbkNsaWM7XG4gICAgKF9vdGhlckhhbmRsZXJzJG9uQ2xpYyA9IG90aGVySGFuZGxlcnMub25DbGljaykgPT0gbnVsbCB8fCBfb3RoZXJIYW5kbGVycyRvbkNsaWMuY2FsbChvdGhlckhhbmRsZXJzLCBldmVudCk7XG4gICAgaWYgKGV2ZW50LnRhcmdldCAhPT0gZXZlbnQuY3VycmVudFRhcmdldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAob25DbG9zZSkge1xuICAgICAgb25DbG9zZShldmVudCwgJ2JhY2tkcm9wQ2xpY2snKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGdldFJvb3RQcm9wcyA9IChvdGhlckhhbmRsZXJzID0ge30pID0+IHtcbiAgICBjb25zdCBwcm9wc0V2ZW50SGFuZGxlcnMgPSBleHRyYWN0RXZlbnRIYW5kbGVycyhwYXJhbWV0ZXJzKTtcblxuICAgIC8vIFRoZSBjdXN0b20gZXZlbnQgaGFuZGxlcnMgc2hvdWxkbid0IGJlIHNwcmVhZCBvbiB0aGUgcm9vdCBlbGVtZW50XG4gICAgZGVsZXRlIHByb3BzRXZlbnRIYW5kbGVycy5vblRyYW5zaXRpb25FbnRlcjtcbiAgICBkZWxldGUgcHJvcHNFdmVudEhhbmRsZXJzLm9uVHJhbnNpdGlvbkV4aXRlZDtcbiAgICBjb25zdCBleHRlcm5hbEV2ZW50SGFuZGxlcnMgPSBfZXh0ZW5kcyh7fSwgcHJvcHNFdmVudEhhbmRsZXJzLCBvdGhlckhhbmRsZXJzKTtcbiAgICByZXR1cm4gX2V4dGVuZHMoe1xuICAgICAgcm9sZTogJ3ByZXNlbnRhdGlvbidcbiAgICB9LCBleHRlcm5hbEV2ZW50SGFuZGxlcnMsIHtcbiAgICAgIG9uS2V5RG93bjogY3JlYXRlSGFuZGxlS2V5RG93bihleHRlcm5hbEV2ZW50SGFuZGxlcnMpLFxuICAgICAgcmVmOiBoYW5kbGVSZWZcbiAgICB9KTtcbiAgfTtcbiAgY29uc3QgZ2V0QmFja2Ryb3BQcm9wcyA9IChvdGhlckhhbmRsZXJzID0ge30pID0+IHtcbiAgICBjb25zdCBleHRlcm5hbEV2ZW50SGFuZGxlcnMgPSBvdGhlckhhbmRsZXJzO1xuICAgIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgICAnYXJpYS1oaWRkZW4nOiB0cnVlXG4gICAgfSwgZXh0ZXJuYWxFdmVudEhhbmRsZXJzLCB7XG4gICAgICBvbkNsaWNrOiBjcmVhdGVIYW5kbGVCYWNrZHJvcENsaWNrKGV4dGVybmFsRXZlbnRIYW5kbGVycyksXG4gICAgICBvcGVuXG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IGdldFRyYW5zaXRpb25Qcm9wcyA9ICgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVFbnRlciA9ICgpID0+IHtcbiAgICAgIHNldEV4aXRlZChmYWxzZSk7XG4gICAgICBpZiAob25UcmFuc2l0aW9uRW50ZXIpIHtcbiAgICAgICAgb25UcmFuc2l0aW9uRW50ZXIoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGhhbmRsZUV4aXRlZCA9ICgpID0+IHtcbiAgICAgIHNldEV4aXRlZCh0cnVlKTtcbiAgICAgIGlmIChvblRyYW5zaXRpb25FeGl0ZWQpIHtcbiAgICAgICAgb25UcmFuc2l0aW9uRXhpdGVkKCk7XG4gICAgICB9XG4gICAgICBpZiAoY2xvc2VBZnRlclRyYW5zaXRpb24pIHtcbiAgICAgICAgaGFuZGxlQ2xvc2UoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBvbkVudGVyOiBjcmVhdGVDaGFpbmVkRnVuY3Rpb24oaGFuZGxlRW50ZXIsIGNoaWxkcmVuID09IG51bGwgPyB2b2lkIDAgOiBjaGlsZHJlbi5wcm9wcy5vbkVudGVyKSxcbiAgICAgIG9uRXhpdGVkOiBjcmVhdGVDaGFpbmVkRnVuY3Rpb24oaGFuZGxlRXhpdGVkLCBjaGlsZHJlbiA9PSBudWxsID8gdm9pZCAwIDogY2hpbGRyZW4ucHJvcHMub25FeGl0ZWQpXG4gICAgfTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBnZXRSb290UHJvcHMsXG4gICAgZ2V0QmFja2Ryb3BQcm9wcyxcbiAgICBnZXRUcmFuc2l0aW9uUHJvcHMsXG4gICAgcm9vdFJlZjogaGFuZGxlUmVmLFxuICAgIHBvcnRhbFJlZjogaGFuZGxlUG9ydGFsUmVmLFxuICAgIGlzVG9wTW9kYWwsXG4gICAgZXhpdGVkLFxuICAgIGhhc1RyYW5zaXRpb25cbiAgfTtcbn1cbmV4cG9ydCBkZWZhdWx0IHVzZU1vZGFsOyIsImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0TW9kYWxVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aU1vZGFsJywgc2xvdCk7XG59XG5jb25zdCBtb2RhbENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlNb2RhbCcsIFsncm9vdCcsICdoaWRkZW4nLCAnYmFja2Ryb3AnXSk7XG5leHBvcnQgZGVmYXVsdCBtb2RhbENsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiQmFja2Ryb3BDb21wb25lbnRcIiwgXCJCYWNrZHJvcFByb3BzXCIsIFwiY2xhc3Nlc1wiLCBcImNsYXNzTmFtZVwiLCBcImNsb3NlQWZ0ZXJUcmFuc2l0aW9uXCIsIFwiY2hpbGRyZW5cIiwgXCJjb250YWluZXJcIiwgXCJjb21wb25lbnRcIiwgXCJjb21wb25lbnRzXCIsIFwiY29tcG9uZW50c1Byb3BzXCIsIFwiZGlzYWJsZUF1dG9Gb2N1c1wiLCBcImRpc2FibGVFbmZvcmNlRm9jdXNcIiwgXCJkaXNhYmxlRXNjYXBlS2V5RG93blwiLCBcImRpc2FibGVQb3J0YWxcIiwgXCJkaXNhYmxlUmVzdG9yZUZvY3VzXCIsIFwiZGlzYWJsZVNjcm9sbExvY2tcIiwgXCJoaWRlQmFja2Ryb3BcIiwgXCJrZWVwTW91bnRlZFwiLCBcIm9uQmFja2Ryb3BDbGlja1wiLCBcIm9uQ2xvc2VcIiwgXCJvblRyYW5zaXRpb25FbnRlclwiLCBcIm9uVHJhbnNpdGlvbkV4aXRlZFwiLCBcIm9wZW5cIiwgXCJzbG90UHJvcHNcIiwgXCJzbG90c1wiLCBcInRoZW1lXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IEhUTUxFbGVtZW50VHlwZSBmcm9tICdAbXVpL3V0aWxzL0hUTUxFbGVtZW50VHlwZSc7XG5pbXBvcnQgZWxlbWVudEFjY2VwdGluZ1JlZiBmcm9tICdAbXVpL3V0aWxzL2VsZW1lbnRBY2NlcHRpbmdSZWYnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHVzZVNsb3RQcm9wcyBmcm9tICdAbXVpL3V0aWxzL3VzZVNsb3RQcm9wcyc7XG5pbXBvcnQgRm9jdXNUcmFwIGZyb20gJy4uL1Vuc3RhYmxlX1RyYXBGb2N1cyc7XG5pbXBvcnQgUG9ydGFsIGZyb20gJy4uL1BvcnRhbCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsgdXNlRGVmYXVsdFByb3BzIH0gZnJvbSAnLi4vRGVmYXVsdFByb3BzUHJvdmlkZXInO1xuaW1wb3J0IEJhY2tkcm9wIGZyb20gJy4uL0JhY2tkcm9wJztcbmltcG9ydCB1c2VNb2RhbCBmcm9tICcuL3VzZU1vZGFsJztcbmltcG9ydCB7IGdldE1vZGFsVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9tb2RhbENsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBvcGVuLFxuICAgIGV4aXRlZCxcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCAhb3BlbiAmJiBleGl0ZWQgJiYgJ2hpZGRlbiddLFxuICAgIGJhY2tkcm9wOiBbJ2JhY2tkcm9wJ11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRNb2RhbFV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuY29uc3QgTW9kYWxSb290ID0gc3R5bGVkKCdkaXYnLCB7XG4gIG5hbWU6ICdNdWlNb2RhbCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCAhb3duZXJTdGF0ZS5vcGVuICYmIG93bmVyU3RhdGUuZXhpdGVkICYmIHN0eWxlcy5oaWRkZW5dO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgekluZGV4OiAodGhlbWUudmFycyB8fCB0aGVtZSkuekluZGV4Lm1vZGFsLFxuICByaWdodDogMCxcbiAgYm90dG9tOiAwLFxuICB0b3A6IDAsXG4gIGxlZnQ6IDBcbn0sICFvd25lclN0YXRlLm9wZW4gJiYgb3duZXJTdGF0ZS5leGl0ZWQgJiYge1xuICB2aXNpYmlsaXR5OiAnaGlkZGVuJ1xufSkpO1xuY29uc3QgTW9kYWxCYWNrZHJvcCA9IHN0eWxlZChCYWNrZHJvcCwge1xuICBuYW1lOiAnTXVpTW9kYWwnLFxuICBzbG90OiAnQmFja2Ryb3AnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICByZXR1cm4gc3R5bGVzLmJhY2tkcm9wO1xuICB9XG59KSh7XG4gIHpJbmRleDogLTFcbn0pO1xuXG4vKipcbiAqIE1vZGFsIGlzIGEgbG93ZXItbGV2ZWwgY29uc3RydWN0IHRoYXQgaXMgbGV2ZXJhZ2VkIGJ5IHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czpcbiAqXG4gKiAtIFtEaWFsb2ddKC9tYXRlcmlhbC11aS9hcGkvZGlhbG9nLylcbiAqIC0gW0RyYXdlcl0oL21hdGVyaWFsLXVpL2FwaS9kcmF3ZXIvKVxuICogLSBbTWVudV0oL21hdGVyaWFsLXVpL2FwaS9tZW51LylcbiAqIC0gW1BvcG92ZXJdKC9tYXRlcmlhbC11aS9hcGkvcG9wb3Zlci8pXG4gKlxuICogSWYgeW91IGFyZSBjcmVhdGluZyBhIG1vZGFsIGRpYWxvZywgeW91IHByb2JhYmx5IHdhbnQgdG8gdXNlIHRoZSBbRGlhbG9nXSgvbWF0ZXJpYWwtdWkvYXBpL2RpYWxvZy8pIGNvbXBvbmVudFxuICogcmF0aGVyIHRoYW4gZGlyZWN0bHkgdXNpbmcgTW9kYWwuXG4gKlxuICogVGhpcyBjb21wb25lbnQgc2hhcmVzIG1hbnkgY29uY2VwdHMgd2l0aCBbcmVhY3Qtb3ZlcmxheXNdKGh0dHBzOi8vcmVhY3QtYm9vdHN0cmFwLmdpdGh1Yi5pby9yZWFjdC1vdmVybGF5cy8jbW9kYWxzKS5cbiAqL1xuY29uc3QgTW9kYWwgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBNb2RhbChpblByb3BzLCByZWYpIHtcbiAgdmFyIF9yZWYsIF9zbG90cyRyb290LCBfcmVmMiwgX3Nsb3RzJGJhY2tkcm9wLCBfc2xvdFByb3BzJHJvb3QsIF9zbG90UHJvcHMkYmFja2Ryb3A7XG4gIGNvbnN0IHByb3BzID0gdXNlRGVmYXVsdFByb3BzKHtcbiAgICBuYW1lOiAnTXVpTW9kYWwnLFxuICAgIHByb3BzOiBpblByb3BzXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBCYWNrZHJvcENvbXBvbmVudCA9IE1vZGFsQmFja2Ryb3AsXG4gICAgICBCYWNrZHJvcFByb3BzLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY2xvc2VBZnRlclRyYW5zaXRpb24gPSBmYWxzZSxcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY29udGFpbmVyLFxuICAgICAgY29tcG9uZW50LFxuICAgICAgY29tcG9uZW50cyA9IHt9LFxuICAgICAgY29tcG9uZW50c1Byb3BzID0ge30sXG4gICAgICBkaXNhYmxlQXV0b0ZvY3VzID0gZmFsc2UsXG4gICAgICBkaXNhYmxlRW5mb3JjZUZvY3VzID0gZmFsc2UsXG4gICAgICBkaXNhYmxlRXNjYXBlS2V5RG93biA9IGZhbHNlLFxuICAgICAgZGlzYWJsZVBvcnRhbCA9IGZhbHNlLFxuICAgICAgZGlzYWJsZVJlc3RvcmVGb2N1cyA9IGZhbHNlLFxuICAgICAgZGlzYWJsZVNjcm9sbExvY2sgPSBmYWxzZSxcbiAgICAgIGhpZGVCYWNrZHJvcCA9IGZhbHNlLFxuICAgICAga2VlcE1vdW50ZWQgPSBmYWxzZSxcbiAgICAgIG9uQmFja2Ryb3BDbGljayxcbiAgICAgIG9wZW4sXG4gICAgICBzbG90UHJvcHMsXG4gICAgICBzbG90c1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L3Byb3AtdHlwZXNcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgcHJvcHNXaXRoRGVmYXVsdHMgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjbG9zZUFmdGVyVHJhbnNpdGlvbixcbiAgICBkaXNhYmxlQXV0b0ZvY3VzLFxuICAgIGRpc2FibGVFbmZvcmNlRm9jdXMsXG4gICAgZGlzYWJsZUVzY2FwZUtleURvd24sXG4gICAgZGlzYWJsZVBvcnRhbCxcbiAgICBkaXNhYmxlUmVzdG9yZUZvY3VzLFxuICAgIGRpc2FibGVTY3JvbGxMb2NrLFxuICAgIGhpZGVCYWNrZHJvcCxcbiAgICBrZWVwTW91bnRlZFxuICB9KTtcbiAgY29uc3Qge1xuICAgIGdldFJvb3RQcm9wcyxcbiAgICBnZXRCYWNrZHJvcFByb3BzLFxuICAgIGdldFRyYW5zaXRpb25Qcm9wcyxcbiAgICBwb3J0YWxSZWYsXG4gICAgaXNUb3BNb2RhbCxcbiAgICBleGl0ZWQsXG4gICAgaGFzVHJhbnNpdGlvblxuICB9ID0gdXNlTW9kYWwoX2V4dGVuZHMoe30sIHByb3BzV2l0aERlZmF1bHRzLCB7XG4gICAgcm9vdFJlZjogcmVmXG4gIH0pKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wc1dpdGhEZWZhdWx0cywge1xuICAgIGV4aXRlZFxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICBjb25zdCBjaGlsZFByb3BzID0ge307XG4gIGlmIChjaGlsZHJlbi5wcm9wcy50YWJJbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY2hpbGRQcm9wcy50YWJJbmRleCA9ICctMSc7XG4gIH1cblxuICAvLyBJdCdzIGEgVHJhbnNpdGlvbiBsaWtlIGNvbXBvbmVudFxuICBpZiAoaGFzVHJhbnNpdGlvbikge1xuICAgIGNvbnN0IHtcbiAgICAgIG9uRW50ZXIsXG4gICAgICBvbkV4aXRlZFxuICAgIH0gPSBnZXRUcmFuc2l0aW9uUHJvcHMoKTtcbiAgICBjaGlsZFByb3BzLm9uRW50ZXIgPSBvbkVudGVyO1xuICAgIGNoaWxkUHJvcHMub25FeGl0ZWQgPSBvbkV4aXRlZDtcbiAgfVxuICBjb25zdCBSb290U2xvdCA9IChfcmVmID0gKF9zbG90cyRyb290ID0gc2xvdHMgPT0gbnVsbCA/IHZvaWQgMCA6IHNsb3RzLnJvb3QpICE9IG51bGwgPyBfc2xvdHMkcm9vdCA6IGNvbXBvbmVudHMuUm9vdCkgIT0gbnVsbCA/IF9yZWYgOiBNb2RhbFJvb3Q7XG4gIGNvbnN0IEJhY2tkcm9wU2xvdCA9IChfcmVmMiA9IChfc2xvdHMkYmFja2Ryb3AgPSBzbG90cyA9PSBudWxsID8gdm9pZCAwIDogc2xvdHMuYmFja2Ryb3ApICE9IG51bGwgPyBfc2xvdHMkYmFja2Ryb3AgOiBjb21wb25lbnRzLkJhY2tkcm9wKSAhPSBudWxsID8gX3JlZjIgOiBCYWNrZHJvcENvbXBvbmVudDtcbiAgY29uc3Qgcm9vdFNsb3RQcm9wcyA9IChfc2xvdFByb3BzJHJvb3QgPSBzbG90UHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IHNsb3RQcm9wcy5yb290KSAhPSBudWxsID8gX3Nsb3RQcm9wcyRyb290IDogY29tcG9uZW50c1Byb3BzLnJvb3Q7XG4gIGNvbnN0IGJhY2tkcm9wU2xvdFByb3BzID0gKF9zbG90UHJvcHMkYmFja2Ryb3AgPSBzbG90UHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IHNsb3RQcm9wcy5iYWNrZHJvcCkgIT0gbnVsbCA/IF9zbG90UHJvcHMkYmFja2Ryb3AgOiBjb21wb25lbnRzUHJvcHMuYmFja2Ryb3A7XG4gIGNvbnN0IHJvb3RQcm9wcyA9IHVzZVNsb3RQcm9wcyh7XG4gICAgZWxlbWVudFR5cGU6IFJvb3RTbG90LFxuICAgIGV4dGVybmFsU2xvdFByb3BzOiByb290U2xvdFByb3BzLFxuICAgIGV4dGVybmFsRm9yd2FyZGVkUHJvcHM6IG90aGVyLFxuICAgIGdldFNsb3RQcm9wczogZ2V0Um9vdFByb3BzLFxuICAgIGFkZGl0aW9uYWxQcm9wczoge1xuICAgICAgcmVmLFxuICAgICAgYXM6IGNvbXBvbmVudFxuICAgIH0sXG4gICAgb3duZXJTdGF0ZSxcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3NOYW1lLCByb290U2xvdFByb3BzID09IG51bGwgPyB2b2lkIDAgOiByb290U2xvdFByb3BzLmNsYXNzTmFtZSwgY2xhc3NlcyA9PSBudWxsID8gdm9pZCAwIDogY2xhc3Nlcy5yb290LCAhb3duZXJTdGF0ZS5vcGVuICYmIG93bmVyU3RhdGUuZXhpdGVkICYmIChjbGFzc2VzID09IG51bGwgPyB2b2lkIDAgOiBjbGFzc2VzLmhpZGRlbikpXG4gIH0pO1xuICBjb25zdCBiYWNrZHJvcFByb3BzID0gdXNlU2xvdFByb3BzKHtcbiAgICBlbGVtZW50VHlwZTogQmFja2Ryb3BTbG90LFxuICAgIGV4dGVybmFsU2xvdFByb3BzOiBiYWNrZHJvcFNsb3RQcm9wcyxcbiAgICBhZGRpdGlvbmFsUHJvcHM6IEJhY2tkcm9wUHJvcHMsXG4gICAgZ2V0U2xvdFByb3BzOiBvdGhlckhhbmRsZXJzID0+IHtcbiAgICAgIHJldHVybiBnZXRCYWNrZHJvcFByb3BzKF9leHRlbmRzKHt9LCBvdGhlckhhbmRsZXJzLCB7XG4gICAgICAgIG9uQ2xpY2s6IGUgPT4ge1xuICAgICAgICAgIGlmIChvbkJhY2tkcm9wQ2xpY2spIHtcbiAgICAgICAgICAgIG9uQmFja2Ryb3BDbGljayhlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG90aGVySGFuZGxlcnMgIT0gbnVsbCAmJiBvdGhlckhhbmRsZXJzLm9uQ2xpY2spIHtcbiAgICAgICAgICAgIG90aGVySGFuZGxlcnMub25DbGljayhlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB9LFxuICAgIGNsYXNzTmFtZTogY2xzeChiYWNrZHJvcFNsb3RQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogYmFja2Ryb3BTbG90UHJvcHMuY2xhc3NOYW1lLCBCYWNrZHJvcFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBCYWNrZHJvcFByb3BzLmNsYXNzTmFtZSwgY2xhc3NlcyA9PSBudWxsID8gdm9pZCAwIDogY2xhc3Nlcy5iYWNrZHJvcCksXG4gICAgb3duZXJTdGF0ZVxuICB9KTtcbiAgaWYgKCFrZWVwTW91bnRlZCAmJiAhb3BlbiAmJiAoIWhhc1RyYW5zaXRpb24gfHwgZXhpdGVkKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChQb3J0YWwsIHtcbiAgICByZWY6IHBvcnRhbFJlZixcbiAgICBjb250YWluZXI6IGNvbnRhaW5lcixcbiAgICBkaXNhYmxlUG9ydGFsOiBkaXNhYmxlUG9ydGFsLFxuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeHMoUm9vdFNsb3QsIF9leHRlbmRzKHt9LCByb290UHJvcHMsIHtcbiAgICAgIGNoaWxkcmVuOiBbIWhpZGVCYWNrZHJvcCAmJiBCYWNrZHJvcENvbXBvbmVudCA/IC8qI19fUFVSRV9fKi9fanN4KEJhY2tkcm9wU2xvdCwgX2V4dGVuZHMoe30sIGJhY2tkcm9wUHJvcHMpKSA6IG51bGwsIC8qI19fUFVSRV9fKi9fanN4KEZvY3VzVHJhcCwge1xuICAgICAgICBkaXNhYmxlRW5mb3JjZUZvY3VzOiBkaXNhYmxlRW5mb3JjZUZvY3VzLFxuICAgICAgICBkaXNhYmxlQXV0b0ZvY3VzOiBkaXNhYmxlQXV0b0ZvY3VzLFxuICAgICAgICBkaXNhYmxlUmVzdG9yZUZvY3VzOiBkaXNhYmxlUmVzdG9yZUZvY3VzLFxuICAgICAgICBpc0VuYWJsZWQ6IGlzVG9wTW9kYWwsXG4gICAgICAgIG9wZW46IG9wZW4sXG4gICAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCBjaGlsZFByb3BzKVxuICAgICAgfSldXG4gICAgfSkpXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBNb2RhbC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFdhcm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIOKUglxuICAvLyDilIIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICDilIJcbiAgLy8g4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gIC8qKlxuICAgKiBBIGJhY2tkcm9wIGNvbXBvbmVudC4gVGhpcyBwcm9wIGVuYWJsZXMgY3VzdG9tIGJhY2tkcm9wIHJlbmRlcmluZy5cbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBzbG90cy5iYWNrZHJvcGAgaW5zdGVhZC4gV2hpbGUgdGhpcyBwcm9wIGN1cnJlbnRseSB3b3JrcywgaXQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24uXG4gICAqIFVzZSB0aGUgYHNsb3RzLmJhY2tkcm9wYCBwcm9wIHRvIG1ha2UgeW91ciBhcHBsaWNhdGlvbiByZWFkeSBmb3IgdGhlIG5leHQgdmVyc2lvbiBvZiBNYXRlcmlhbCBVSS5cbiAgICogQGRlZmF1bHQgc3R5bGVkKEJhY2tkcm9wLCB7XG4gICAqICAgbmFtZTogJ011aU1vZGFsJyxcbiAgICogICBzbG90OiAnQmFja2Ryb3AnLFxuICAgKiAgIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgKiAgICAgcmV0dXJuIHN0eWxlcy5iYWNrZHJvcDtcbiAgICogICB9LFxuICAgKiB9KSh7XG4gICAqICAgekluZGV4OiAtMSxcbiAgICogfSlcbiAgICovXG4gIEJhY2tkcm9wQ29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSBbYEJhY2tkcm9wYF0oL21hdGVyaWFsLXVpL2FwaS9iYWNrZHJvcC8pIGVsZW1lbnQuXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgc2xvdFByb3BzLmJhY2tkcm9wYCBpbnN0ZWFkLlxuICAgKi9cbiAgQmFja2Ryb3BQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEEgc2luZ2xlIGNoaWxkIGNvbnRlbnQgZWxlbWVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBlbGVtZW50QWNjZXB0aW5nUmVmLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogV2hlbiBzZXQgdG8gdHJ1ZSB0aGUgTW9kYWwgd2FpdHMgdW50aWwgYSBuZXN0ZWQgVHJhbnNpdGlvbiBpcyBjb21wbGV0ZWQgYmVmb3JlIGNsb3NpbmcuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBjbG9zZUFmdGVyVHJhbnNpdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBzbG90c2AgcHJvcC5cbiAgICogSXQncyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIGBzbG90c2AgcHJvcCBpbnN0ZWFkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBCYWNrZHJvcDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIFJvb3Q6IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBleHRyYSBwcm9wcyBmb3IgdGhlIHNsb3QgY29tcG9uZW50cy5cbiAgICogWW91IGNhbiBvdmVycmlkZSB0aGUgZXhpc3RpbmcgcHJvcHMgb3IgYWRkIG5ldyBvbmVzLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgc2xvdFByb3BzYCBwcm9wLlxuICAgKiBJdCdzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgYHNsb3RQcm9wc2AgcHJvcCBpbnN0ZWFkLCBhcyBgY29tcG9uZW50c1Byb3BzYCB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGNvbXBvbmVudHNQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBiYWNrZHJvcDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgICByb290OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG4gIH0pLFxuICAvKipcbiAgICogQW4gSFRNTCBlbGVtZW50IG9yIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBvbmUuXG4gICAqIFRoZSBgY29udGFpbmVyYCB3aWxsIGhhdmUgdGhlIHBvcnRhbCBjaGlsZHJlbiBhcHBlbmRlZCB0byBpdC5cbiAgICpcbiAgICogWW91IGNhbiBhbHNvIHByb3ZpZGUgYSBjYWxsYmFjaywgd2hpY2ggaXMgY2FsbGVkIGluIGEgUmVhY3QgbGF5b3V0IGVmZmVjdC5cbiAgICogVGhpcyBsZXRzIHlvdSBzZXQgdGhlIGNvbnRhaW5lciBmcm9tIGEgcmVmLCBhbmQgYWxzbyBtYWtlcyBzZXJ2ZXItc2lkZSByZW5kZXJpbmcgcG9zc2libGUuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIGl0IHVzZXMgdGhlIGJvZHkgb2YgdGhlIHRvcC1sZXZlbCBkb2N1bWVudCBvYmplY3QsXG4gICAqIHNvIGl0J3Mgc2ltcGx5IGBkb2N1bWVudC5ib2R5YCBtb3N0IG9mIHRoZSB0aW1lLlxuICAgKi9cbiAgY29udGFpbmVyOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW0hUTUxFbGVtZW50VHlwZSwgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIG1vZGFsIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgc2hpZnQgZm9jdXMgdG8gaXRzZWxmIHdoZW4gaXQgb3BlbnMsIGFuZFxuICAgKiByZXBsYWNlIGl0IHRvIHRoZSBsYXN0IGZvY3VzZWQgZWxlbWVudCB3aGVuIGl0IGNsb3Nlcy5cbiAgICogVGhpcyBhbHNvIHdvcmtzIGNvcnJlY3RseSB3aXRoIGFueSBtb2RhbCBjaGlsZHJlbiB0aGF0IGhhdmUgdGhlIGBkaXNhYmxlQXV0b0ZvY3VzYCBwcm9wLlxuICAgKlxuICAgKiBHZW5lcmFsbHkgdGhpcyBzaG91bGQgbmV2ZXIgYmUgc2V0IHRvIGB0cnVlYCBhcyBpdCBtYWtlcyB0aGUgbW9kYWwgbGVzc1xuICAgKiBhY2Nlc3NpYmxlIHRvIGFzc2lzdGl2ZSB0ZWNobm9sb2dpZXMsIGxpa2Ugc2NyZWVuIHJlYWRlcnMuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlQXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIG1vZGFsIHdpbGwgbm90IHByZXZlbnQgZm9jdXMgZnJvbSBsZWF2aW5nIHRoZSBtb2RhbCB3aGlsZSBvcGVuLlxuICAgKlxuICAgKiBHZW5lcmFsbHkgdGhpcyBzaG91bGQgbmV2ZXIgYmUgc2V0IHRvIGB0cnVlYCBhcyBpdCBtYWtlcyB0aGUgbW9kYWwgbGVzc1xuICAgKiBhY2Nlc3NpYmxlIHRvIGFzc2lzdGl2ZSB0ZWNobm9sb2dpZXMsIGxpa2Ugc2NyZWVuIHJlYWRlcnMuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlRW5mb3JjZUZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgaGl0dGluZyBlc2NhcGUgd2lsbCBub3QgZmlyZSB0aGUgYG9uQ2xvc2VgIGNhbGxiYWNrLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUVzY2FwZUtleURvd246IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGBjaGlsZHJlbmAgd2lsbCBiZSB1bmRlciB0aGUgRE9NIGhpZXJhcmNoeSBvZiB0aGUgcGFyZW50IGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVQb3J0YWw6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbW9kYWwgd2lsbCBub3QgcmVzdG9yZSBmb2N1cyB0byBwcmV2aW91c2x5IGZvY3VzZWQgZWxlbWVudCBvbmNlXG4gICAqIG1vZGFsIGlzIGhpZGRlbiBvciB1bm1vdW50ZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlUmVzdG9yZUZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIERpc2FibGUgdGhlIHNjcm9sbCBsb2NrIGJlaGF2aW9yLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVNjcm9sbExvY2s6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYmFja2Ryb3AgaXMgbm90IHJlbmRlcmVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaGlkZUJhY2tkcm9wOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIEFsd2F5cyBrZWVwIHRoZSBjaGlsZHJlbiBpbiB0aGUgRE9NLlxuICAgKiBUaGlzIHByb3AgY2FuIGJlIHVzZWZ1bCBpbiBTRU8gc2l0dWF0aW9uIG9yXG4gICAqIHdoZW4geW91IHdhbnQgdG8gbWF4aW1pemUgdGhlIHJlc3BvbnNpdmVuZXNzIG9mIHRoZSBNb2RhbC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGtlZXBNb3VudGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIGJhY2tkcm9wIGlzIGNsaWNrZWQuXG4gICAqIEBkZXByZWNhdGVkIFVzZSB0aGUgYG9uQ2xvc2VgIHByb3Agd2l0aCB0aGUgYHJlYXNvbmAgYXJndW1lbnQgdG8gaGFuZGxlIHRoZSBgYmFja2Ryb3BDbGlja2AgZXZlbnRzLlxuICAgKi9cbiAgb25CYWNrZHJvcENsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIGNvbXBvbmVudCByZXF1ZXN0cyB0byBiZSBjbG9zZWQuXG4gICAqIFRoZSBgcmVhc29uYCBwYXJhbWV0ZXIgY2FuIG9wdGlvbmFsbHkgYmUgdXNlZCB0byBjb250cm9sIHRoZSByZXNwb25zZSB0byBgb25DbG9zZWAuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbiBDYW4gYmU6IGBcImVzY2FwZUtleURvd25cImAsIGBcImJhY2tkcm9wQ2xpY2tcImAuXG4gICAqL1xuICBvbkNsb3NlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gY2FsbGVkIHdoZW4gYSB0cmFuc2l0aW9uIGVudGVycy5cbiAgICovXG4gIG9uVHJhbnNpdGlvbkVudGVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gY2FsbGVkIHdoZW4gYSB0cmFuc2l0aW9uIGhhcyBleGl0ZWQuXG4gICAqL1xuICBvblRyYW5zaXRpb25FeGl0ZWQ6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIHNob3duLlxuICAgKi9cbiAgb3BlbjogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAqIFRoZSBwcm9wcyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlIHRoZSBNb2RhbC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHNsb3RQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBiYWNrZHJvcDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgICByb290OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG4gIH0pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZSB0aGUgTW9kYWwuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBiYWNrZHJvcDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIHJvb3Q6IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IE1vZGFsOyIsImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0UG9wb3ZlclV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpUG9wb3ZlcicsIHNsb3QpO1xufVxuY29uc3QgcG9wb3ZlckNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlQb3BvdmVyJywgWydyb290JywgJ3BhcGVyJ10pO1xuZXhwb3J0IGRlZmF1bHQgcG9wb3ZlckNsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wib25FbnRlcmluZ1wiXSxcbiAgX2V4Y2x1ZGVkMiA9IFtcImFjdGlvblwiLCBcImFuY2hvckVsXCIsIFwiYW5jaG9yT3JpZ2luXCIsIFwiYW5jaG9yUG9zaXRpb25cIiwgXCJhbmNob3JSZWZlcmVuY2VcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbnRhaW5lclwiLCBcImVsZXZhdGlvblwiLCBcIm1hcmdpblRocmVzaG9sZFwiLCBcIm9wZW5cIiwgXCJQYXBlclByb3BzXCIsIFwic2xvdHNcIiwgXCJzbG90UHJvcHNcIiwgXCJ0cmFuc2Zvcm1PcmlnaW5cIiwgXCJUcmFuc2l0aW9uQ29tcG9uZW50XCIsIFwidHJhbnNpdGlvbkR1cmF0aW9uXCIsIFwiVHJhbnNpdGlvblByb3BzXCIsIFwiZGlzYWJsZVNjcm9sbExvY2tcIl0sXG4gIF9leGNsdWRlZDMgPSBbXCJzbG90UHJvcHNcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgSFRNTEVsZW1lbnRUeXBlIGZyb20gJ0BtdWkvdXRpbHMvSFRNTEVsZW1lbnRUeXBlJztcbmltcG9ydCByZWZUeXBlIGZyb20gJ0BtdWkvdXRpbHMvcmVmVHlwZSc7XG5pbXBvcnQgZWxlbWVudFR5cGVBY2NlcHRpbmdSZWYgZnJvbSAnQG11aS91dGlscy9lbGVtZW50VHlwZUFjY2VwdGluZ1JlZic7XG5pbXBvcnQgaW50ZWdlclByb3BUeXBlIGZyb20gJ0BtdWkvdXRpbHMvaW50ZWdlclByb3BUeXBlJztcbmltcG9ydCBjaGFpblByb3BUeXBlcyBmcm9tICdAbXVpL3V0aWxzL2NoYWluUHJvcFR5cGVzJztcbmltcG9ydCB1c2VTbG90UHJvcHMgZnJvbSAnQG11aS91dGlscy91c2VTbG90UHJvcHMnO1xuaW1wb3J0IGlzSG9zdENvbXBvbmVudCBmcm9tICdAbXVpL3V0aWxzL2lzSG9zdENvbXBvbmVudCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsgdXNlRGVmYXVsdFByb3BzIH0gZnJvbSAnLi4vRGVmYXVsdFByb3BzUHJvdmlkZXInO1xuaW1wb3J0IGRlYm91bmNlIGZyb20gJy4uL3V0aWxzL2RlYm91bmNlJztcbmltcG9ydCBvd25lckRvY3VtZW50IGZyb20gJy4uL3V0aWxzL293bmVyRG9jdW1lbnQnO1xuaW1wb3J0IG93bmVyV2luZG93IGZyb20gJy4uL3V0aWxzL293bmVyV2luZG93JztcbmltcG9ydCB1c2VGb3JrUmVmIGZyb20gJy4uL3V0aWxzL3VzZUZvcmtSZWYnO1xuaW1wb3J0IEdyb3cgZnJvbSAnLi4vR3Jvdyc7XG5pbXBvcnQgTW9kYWwgZnJvbSAnLi4vTW9kYWwnO1xuaW1wb3J0IFBhcGVyQmFzZSBmcm9tICcuLi9QYXBlcic7XG5pbXBvcnQgeyBnZXRQb3BvdmVyVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9wb3BvdmVyQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZXhwb3J0IGZ1bmN0aW9uIGdldE9mZnNldFRvcChyZWN0LCB2ZXJ0aWNhbCkge1xuICBsZXQgb2Zmc2V0ID0gMDtcbiAgaWYgKHR5cGVvZiB2ZXJ0aWNhbCA9PT0gJ251bWJlcicpIHtcbiAgICBvZmZzZXQgPSB2ZXJ0aWNhbDtcbiAgfSBlbHNlIGlmICh2ZXJ0aWNhbCA9PT0gJ2NlbnRlcicpIHtcbiAgICBvZmZzZXQgPSByZWN0LmhlaWdodCAvIDI7XG4gIH0gZWxzZSBpZiAodmVydGljYWwgPT09ICdib3R0b20nKSB7XG4gICAgb2Zmc2V0ID0gcmVjdC5oZWlnaHQ7XG4gIH1cbiAgcmV0dXJuIG9mZnNldDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRPZmZzZXRMZWZ0KHJlY3QsIGhvcml6b250YWwpIHtcbiAgbGV0IG9mZnNldCA9IDA7XG4gIGlmICh0eXBlb2YgaG9yaXpvbnRhbCA9PT0gJ251bWJlcicpIHtcbiAgICBvZmZzZXQgPSBob3Jpem9udGFsO1xuICB9IGVsc2UgaWYgKGhvcml6b250YWwgPT09ICdjZW50ZXInKSB7XG4gICAgb2Zmc2V0ID0gcmVjdC53aWR0aCAvIDI7XG4gIH0gZWxzZSBpZiAoaG9yaXpvbnRhbCA9PT0gJ3JpZ2h0Jykge1xuICAgIG9mZnNldCA9IHJlY3Qud2lkdGg7XG4gIH1cbiAgcmV0dXJuIG9mZnNldDtcbn1cbmZ1bmN0aW9uIGdldFRyYW5zZm9ybU9yaWdpblZhbHVlKHRyYW5zZm9ybU9yaWdpbikge1xuICByZXR1cm4gW3RyYW5zZm9ybU9yaWdpbi5ob3Jpem9udGFsLCB0cmFuc2Zvcm1PcmlnaW4udmVydGljYWxdLm1hcChuID0+IHR5cGVvZiBuID09PSAnbnVtYmVyJyA/IGAke259cHhgIDogbikuam9pbignICcpO1xufVxuZnVuY3Rpb24gcmVzb2x2ZUFuY2hvckVsKGFuY2hvckVsKSB7XG4gIHJldHVybiB0eXBlb2YgYW5jaG9yRWwgPT09ICdmdW5jdGlvbicgPyBhbmNob3JFbCgpIDogYW5jaG9yRWw7XG59XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3Nlc1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290J10sXG4gICAgcGFwZXI6IFsncGFwZXInXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldFBvcG92ZXJVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmV4cG9ydCBjb25zdCBQb3BvdmVyUm9vdCA9IHN0eWxlZChNb2RhbCwge1xuICBuYW1lOiAnTXVpUG9wb3ZlcicsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMucm9vdFxufSkoe30pO1xuZXhwb3J0IGNvbnN0IFBvcG92ZXJQYXBlciA9IHN0eWxlZChQYXBlckJhc2UsIHtcbiAgbmFtZTogJ011aVBvcG92ZXInLFxuICBzbG90OiAnUGFwZXInLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5wYXBlclxufSkoe1xuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgb3ZlcmZsb3dZOiAnYXV0bycsXG4gIG92ZXJmbG93WDogJ2hpZGRlbicsXG4gIC8vIFNvIHdlIHNlZSB0aGUgcG9wb3ZlciB3aGVuIGl0J3MgZW1wdHkuXG4gIC8vIEl0J3MgbW9zdCBsaWtlbHkgb24gaXNzdWUgb24gdXNlcmxhbmQuXG4gIG1pbldpZHRoOiAxNixcbiAgbWluSGVpZ2h0OiAxNixcbiAgbWF4V2lkdGg6ICdjYWxjKDEwMCUgLSAzMnB4KScsXG4gIG1heEhlaWdodDogJ2NhbGMoMTAwJSAtIDMycHgpJyxcbiAgLy8gV2UgZGlzYWJsZSB0aGUgZm9jdXMgcmluZyBmb3IgbW91c2UsIHRvdWNoIGFuZCBrZXlib2FyZCB1c2Vycy5cbiAgb3V0bGluZTogMFxufSk7XG5jb25zdCBQb3BvdmVyID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gUG9wb3ZlcihpblByb3BzLCByZWYpIHtcbiAgdmFyIF9zbG90UHJvcHMkcGFwZXIsIF9zbG90cyRyb290LCBfc2xvdHMkcGFwZXI7XG4gIGNvbnN0IHByb3BzID0gdXNlRGVmYXVsdFByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpUG9wb3ZlcidcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGFuY2hvckVsLFxuICAgICAgYW5jaG9yT3JpZ2luID0ge1xuICAgICAgICB2ZXJ0aWNhbDogJ3RvcCcsXG4gICAgICAgIGhvcml6b250YWw6ICdsZWZ0J1xuICAgICAgfSxcbiAgICAgIGFuY2hvclBvc2l0aW9uLFxuICAgICAgYW5jaG9yUmVmZXJlbmNlID0gJ2FuY2hvckVsJyxcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29udGFpbmVyOiBjb250YWluZXJQcm9wLFxuICAgICAgZWxldmF0aW9uID0gOCxcbiAgICAgIG1hcmdpblRocmVzaG9sZCA9IDE2LFxuICAgICAgb3BlbixcbiAgICAgIFBhcGVyUHJvcHM6IFBhcGVyUHJvcHNQcm9wID0ge30sXG4gICAgICBzbG90cyxcbiAgICAgIHNsb3RQcm9wcyxcbiAgICAgIHRyYW5zZm9ybU9yaWdpbiA9IHtcbiAgICAgICAgdmVydGljYWw6ICd0b3AnLFxuICAgICAgICBob3Jpem9udGFsOiAnbGVmdCdcbiAgICAgIH0sXG4gICAgICBUcmFuc2l0aW9uQ29tcG9uZW50ID0gR3JvdyxcbiAgICAgIHRyYW5zaXRpb25EdXJhdGlvbjogdHJhbnNpdGlvbkR1cmF0aW9uUHJvcCA9ICdhdXRvJyxcbiAgICAgIFRyYW5zaXRpb25Qcm9wczoge1xuICAgICAgICBvbkVudGVyaW5nXG4gICAgICB9ID0ge30sXG4gICAgICBkaXNhYmxlU2Nyb2xsTG9jayA9IGZhbHNlXG4gICAgfSA9IHByb3BzLFxuICAgIFRyYW5zaXRpb25Qcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLlRyYW5zaXRpb25Qcm9wcywgX2V4Y2x1ZGVkKSxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQyKTtcbiAgY29uc3QgZXh0ZXJuYWxQYXBlclNsb3RQcm9wcyA9IChfc2xvdFByb3BzJHBhcGVyID0gc2xvdFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBzbG90UHJvcHMucGFwZXIpICE9IG51bGwgPyBfc2xvdFByb3BzJHBhcGVyIDogUGFwZXJQcm9wc1Byb3A7XG4gIGNvbnN0IHBhcGVyUmVmID0gUmVhY3QudXNlUmVmKCk7XG4gIGNvbnN0IGhhbmRsZVBhcGVyUmVmID0gdXNlRm9ya1JlZihwYXBlclJlZiwgZXh0ZXJuYWxQYXBlclNsb3RQcm9wcy5yZWYpO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgYW5jaG9yT3JpZ2luLFxuICAgIGFuY2hvclJlZmVyZW5jZSxcbiAgICBlbGV2YXRpb24sXG4gICAgbWFyZ2luVGhyZXNob2xkLFxuICAgIGV4dGVybmFsUGFwZXJTbG90UHJvcHMsXG4gICAgdHJhbnNmb3JtT3JpZ2luLFxuICAgIFRyYW5zaXRpb25Db21wb25lbnQsXG4gICAgdHJhbnNpdGlvbkR1cmF0aW9uOiB0cmFuc2l0aW9uRHVyYXRpb25Qcm9wLFxuICAgIFRyYW5zaXRpb25Qcm9wc1xuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuXG4gIC8vIFJldHVybnMgdGhlIHRvcC9sZWZ0IG9mZnNldCBvZiB0aGUgcG9zaXRpb25cbiAgLy8gdG8gYXR0YWNoIHRvIG9uIHRoZSBhbmNob3IgZWxlbWVudCAob3IgYm9keSBpZiBub25lIGlzIHByb3ZpZGVkKVxuICBjb25zdCBnZXRBbmNob3JPZmZzZXQgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKGFuY2hvclJlZmVyZW5jZSA9PT0gJ2FuY2hvclBvc2l0aW9uJykge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKCFhbmNob3JQb3NpdGlvbikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ01VSTogWW91IG5lZWQgdG8gcHJvdmlkZSBhIGBhbmNob3JQb3NpdGlvbmAgcHJvcCB3aGVuIHVzaW5nICcgKyAnPFBvcG92ZXIgYW5jaG9yUmVmZXJlbmNlPVwiYW5jaG9yUG9zaXRpb25cIiAvPi4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFuY2hvclBvc2l0aW9uO1xuICAgIH1cbiAgICBjb25zdCByZXNvbHZlZEFuY2hvckVsID0gcmVzb2x2ZUFuY2hvckVsKGFuY2hvckVsKTtcblxuICAgIC8vIElmIGFuIGFuY2hvciBlbGVtZW50IHdhc24ndCBwcm92aWRlZCwganVzdCB1c2UgdGhlIHBhcmVudCBib2R5IGVsZW1lbnQgb2YgdGhpcyBQb3BvdmVyXG4gICAgY29uc3QgYW5jaG9yRWxlbWVudCA9IHJlc29sdmVkQW5jaG9yRWwgJiYgcmVzb2x2ZWRBbmNob3JFbC5ub2RlVHlwZSA9PT0gMSA/IHJlc29sdmVkQW5jaG9yRWwgOiBvd25lckRvY3VtZW50KHBhcGVyUmVmLmN1cnJlbnQpLmJvZHk7XG4gICAgY29uc3QgYW5jaG9yUmVjdCA9IGFuY2hvckVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnN0IGJveCA9IGFuY2hvckVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICd0ZXN0JyAmJiBib3gudG9wID09PSAwICYmIGJveC5sZWZ0ID09PSAwICYmIGJveC5yaWdodCA9PT0gMCAmJiBib3guYm90dG9tID09PSAwKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihbJ01VSTogVGhlIGBhbmNob3JFbGAgcHJvcCBwcm92aWRlZCB0byB0aGUgY29tcG9uZW50IGlzIGludmFsaWQuJywgJ1RoZSBhbmNob3IgZWxlbWVudCBzaG91bGQgYmUgcGFydCBvZiB0aGUgZG9jdW1lbnQgbGF5b3V0LicsIFwiTWFrZSBzdXJlIHRoZSBlbGVtZW50IGlzIHByZXNlbnQgaW4gdGhlIGRvY3VtZW50IG9yIHRoYXQgaXQncyBub3QgZGlzcGxheSBub25lLlwiXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICB0b3A6IGFuY2hvclJlY3QudG9wICsgZ2V0T2Zmc2V0VG9wKGFuY2hvclJlY3QsIGFuY2hvck9yaWdpbi52ZXJ0aWNhbCksXG4gICAgICBsZWZ0OiBhbmNob3JSZWN0LmxlZnQgKyBnZXRPZmZzZXRMZWZ0KGFuY2hvclJlY3QsIGFuY2hvck9yaWdpbi5ob3Jpem9udGFsKVxuICAgIH07XG4gIH0sIFthbmNob3JFbCwgYW5jaG9yT3JpZ2luLmhvcml6b250YWwsIGFuY2hvck9yaWdpbi52ZXJ0aWNhbCwgYW5jaG9yUG9zaXRpb24sIGFuY2hvclJlZmVyZW5jZV0pO1xuXG4gIC8vIFJldHVybnMgdGhlIGJhc2UgdHJhbnNmb3JtIG9yaWdpbiB1c2luZyB0aGUgZWxlbWVudFxuICBjb25zdCBnZXRUcmFuc2Zvcm1PcmlnaW4gPSBSZWFjdC51c2VDYWxsYmFjayhlbGVtUmVjdCA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZlcnRpY2FsOiBnZXRPZmZzZXRUb3AoZWxlbVJlY3QsIHRyYW5zZm9ybU9yaWdpbi52ZXJ0aWNhbCksXG4gICAgICBob3Jpem9udGFsOiBnZXRPZmZzZXRMZWZ0KGVsZW1SZWN0LCB0cmFuc2Zvcm1PcmlnaW4uaG9yaXpvbnRhbClcbiAgICB9O1xuICB9LCBbdHJhbnNmb3JtT3JpZ2luLmhvcml6b250YWwsIHRyYW5zZm9ybU9yaWdpbi52ZXJ0aWNhbF0pO1xuICBjb25zdCBnZXRQb3NpdGlvbmluZ1N0eWxlID0gUmVhY3QudXNlQ2FsbGJhY2soZWxlbWVudCA9PiB7XG4gICAgY29uc3QgZWxlbVJlY3QgPSB7XG4gICAgICB3aWR0aDogZWxlbWVudC5vZmZzZXRXaWR0aCxcbiAgICAgIGhlaWdodDogZWxlbWVudC5vZmZzZXRIZWlnaHRcbiAgICB9O1xuXG4gICAgLy8gR2V0IHRoZSB0cmFuc2Zvcm0gb3JpZ2luIHBvaW50IG9uIHRoZSBlbGVtZW50IGl0c2VsZlxuICAgIGNvbnN0IGVsZW1UcmFuc2Zvcm1PcmlnaW4gPSBnZXRUcmFuc2Zvcm1PcmlnaW4oZWxlbVJlY3QpO1xuICAgIGlmIChhbmNob3JSZWZlcmVuY2UgPT09ICdub25lJykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdG9wOiBudWxsLFxuICAgICAgICBsZWZ0OiBudWxsLFxuICAgICAgICB0cmFuc2Zvcm1PcmlnaW46IGdldFRyYW5zZm9ybU9yaWdpblZhbHVlKGVsZW1UcmFuc2Zvcm1PcmlnaW4pXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIEdldCB0aGUgb2Zmc2V0IG9mIHRoZSBhbmNob3JpbmcgZWxlbWVudFxuICAgIGNvbnN0IGFuY2hvck9mZnNldCA9IGdldEFuY2hvck9mZnNldCgpO1xuXG4gICAgLy8gQ2FsY3VsYXRlIGVsZW1lbnQgcG9zaXRpb25pbmdcbiAgICBsZXQgdG9wID0gYW5jaG9yT2Zmc2V0LnRvcCAtIGVsZW1UcmFuc2Zvcm1PcmlnaW4udmVydGljYWw7XG4gICAgbGV0IGxlZnQgPSBhbmNob3JPZmZzZXQubGVmdCAtIGVsZW1UcmFuc2Zvcm1PcmlnaW4uaG9yaXpvbnRhbDtcbiAgICBjb25zdCBib3R0b20gPSB0b3AgKyBlbGVtUmVjdC5oZWlnaHQ7XG4gICAgY29uc3QgcmlnaHQgPSBsZWZ0ICsgZWxlbVJlY3Qud2lkdGg7XG5cbiAgICAvLyBVc2UgdGhlIHBhcmVudCB3aW5kb3cgb2YgdGhlIGFuY2hvckVsIGlmIHByb3ZpZGVkXG4gICAgY29uc3QgY29udGFpbmVyV2luZG93ID0gb3duZXJXaW5kb3cocmVzb2x2ZUFuY2hvckVsKGFuY2hvckVsKSk7XG5cbiAgICAvLyBXaW5kb3cgdGhyZXNob2xkcyB0YWtpbmcgcmVxdWlyZWQgbWFyZ2luIGludG8gYWNjb3VudFxuICAgIGNvbnN0IGhlaWdodFRocmVzaG9sZCA9IGNvbnRhaW5lcldpbmRvdy5pbm5lckhlaWdodCAtIG1hcmdpblRocmVzaG9sZDtcbiAgICBjb25zdCB3aWR0aFRocmVzaG9sZCA9IGNvbnRhaW5lcldpbmRvdy5pbm5lcldpZHRoIC0gbWFyZ2luVGhyZXNob2xkO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHZlcnRpY2FsIGF4aXMgbmVlZHMgc2hpZnRpbmdcbiAgICBpZiAobWFyZ2luVGhyZXNob2xkICE9PSBudWxsICYmIHRvcCA8IG1hcmdpblRocmVzaG9sZCkge1xuICAgICAgY29uc3QgZGlmZiA9IHRvcCAtIG1hcmdpblRocmVzaG9sZDtcbiAgICAgIHRvcCAtPSBkaWZmO1xuICAgICAgZWxlbVRyYW5zZm9ybU9yaWdpbi52ZXJ0aWNhbCArPSBkaWZmO1xuICAgIH0gZWxzZSBpZiAobWFyZ2luVGhyZXNob2xkICE9PSBudWxsICYmIGJvdHRvbSA+IGhlaWdodFRocmVzaG9sZCkge1xuICAgICAgY29uc3QgZGlmZiA9IGJvdHRvbSAtIGhlaWdodFRocmVzaG9sZDtcbiAgICAgIHRvcCAtPSBkaWZmO1xuICAgICAgZWxlbVRyYW5zZm9ybU9yaWdpbi52ZXJ0aWNhbCArPSBkaWZmO1xuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKGVsZW1SZWN0LmhlaWdodCA+IGhlaWdodFRocmVzaG9sZCAmJiBlbGVtUmVjdC5oZWlnaHQgJiYgaGVpZ2h0VGhyZXNob2xkKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoWydNVUk6IFRoZSBwb3BvdmVyIGNvbXBvbmVudCBpcyB0b28gdGFsbC4nLCBgU29tZSBwYXJ0IG9mIGl0IGNhbiBub3QgYmUgc2VlbiBvbiB0aGUgc2NyZWVuICgke2VsZW1SZWN0LmhlaWdodCAtIGhlaWdodFRocmVzaG9sZH1weCkuYCwgJ1BsZWFzZSBjb25zaWRlciBhZGRpbmcgYSBgbWF4LWhlaWdodGAgdG8gaW1wcm92ZSB0aGUgdXNlci1leHBlcmllbmNlLiddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgaG9yaXpvbnRhbCBheGlzIG5lZWRzIHNoaWZ0aW5nXG4gICAgaWYgKG1hcmdpblRocmVzaG9sZCAhPT0gbnVsbCAmJiBsZWZ0IDwgbWFyZ2luVGhyZXNob2xkKSB7XG4gICAgICBjb25zdCBkaWZmID0gbGVmdCAtIG1hcmdpblRocmVzaG9sZDtcbiAgICAgIGxlZnQgLT0gZGlmZjtcbiAgICAgIGVsZW1UcmFuc2Zvcm1PcmlnaW4uaG9yaXpvbnRhbCArPSBkaWZmO1xuICAgIH0gZWxzZSBpZiAocmlnaHQgPiB3aWR0aFRocmVzaG9sZCkge1xuICAgICAgY29uc3QgZGlmZiA9IHJpZ2h0IC0gd2lkdGhUaHJlc2hvbGQ7XG4gICAgICBsZWZ0IC09IGRpZmY7XG4gICAgICBlbGVtVHJhbnNmb3JtT3JpZ2luLmhvcml6b250YWwgKz0gZGlmZjtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHRvcDogYCR7TWF0aC5yb3VuZCh0b3ApfXB4YCxcbiAgICAgIGxlZnQ6IGAke01hdGgucm91bmQobGVmdCl9cHhgLFxuICAgICAgdHJhbnNmb3JtT3JpZ2luOiBnZXRUcmFuc2Zvcm1PcmlnaW5WYWx1ZShlbGVtVHJhbnNmb3JtT3JpZ2luKVxuICAgIH07XG4gIH0sIFthbmNob3JFbCwgYW5jaG9yUmVmZXJlbmNlLCBnZXRBbmNob3JPZmZzZXQsIGdldFRyYW5zZm9ybU9yaWdpbiwgbWFyZ2luVGhyZXNob2xkXSk7XG4gIGNvbnN0IFtpc1Bvc2l0aW9uZWQsIHNldElzUG9zaXRpb25lZF0gPSBSZWFjdC51c2VTdGF0ZShvcGVuKTtcbiAgY29uc3Qgc2V0UG9zaXRpb25pbmdTdHlsZXMgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgZWxlbWVudCA9IHBhcGVyUmVmLmN1cnJlbnQ7XG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHBvc2l0aW9uaW5nID0gZ2V0UG9zaXRpb25pbmdTdHlsZShlbGVtZW50KTtcbiAgICBpZiAocG9zaXRpb25pbmcudG9wICE9PSBudWxsKSB7XG4gICAgICBlbGVtZW50LnN0eWxlLnRvcCA9IHBvc2l0aW9uaW5nLnRvcDtcbiAgICB9XG4gICAgaWYgKHBvc2l0aW9uaW5nLmxlZnQgIT09IG51bGwpIHtcbiAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IHBvc2l0aW9uaW5nLmxlZnQ7XG4gICAgfVxuICAgIGVsZW1lbnQuc3R5bGUudHJhbnNmb3JtT3JpZ2luID0gcG9zaXRpb25pbmcudHJhbnNmb3JtT3JpZ2luO1xuICAgIHNldElzUG9zaXRpb25lZCh0cnVlKTtcbiAgfSwgW2dldFBvc2l0aW9uaW5nU3R5bGVdKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZGlzYWJsZVNjcm9sbExvY2spIHtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBzZXRQb3NpdGlvbmluZ1N0eWxlcyk7XG4gICAgfVxuICAgIHJldHVybiAoKSA9PiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgc2V0UG9zaXRpb25pbmdTdHlsZXMpO1xuICB9LCBbYW5jaG9yRWwsIGRpc2FibGVTY3JvbGxMb2NrLCBzZXRQb3NpdGlvbmluZ1N0eWxlc10pO1xuICBjb25zdCBoYW5kbGVFbnRlcmluZyA9IChlbGVtZW50LCBpc0FwcGVhcmluZykgPT4ge1xuICAgIGlmIChvbkVudGVyaW5nKSB7XG4gICAgICBvbkVudGVyaW5nKGVsZW1lbnQsIGlzQXBwZWFyaW5nKTtcbiAgICB9XG4gICAgc2V0UG9zaXRpb25pbmdTdHlsZXMoKTtcbiAgfTtcbiAgY29uc3QgaGFuZGxlRXhpdGVkID0gKCkgPT4ge1xuICAgIHNldElzUG9zaXRpb25lZChmYWxzZSk7XG4gIH07XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG9wZW4pIHtcbiAgICAgIHNldFBvc2l0aW9uaW5nU3R5bGVzKCk7XG4gICAgfVxuICB9KTtcbiAgUmVhY3QudXNlSW1wZXJhdGl2ZUhhbmRsZShhY3Rpb24sICgpID0+IG9wZW4gPyB7XG4gICAgdXBkYXRlUG9zaXRpb246ICgpID0+IHtcbiAgICAgIHNldFBvc2l0aW9uaW5nU3R5bGVzKCk7XG4gICAgfVxuICB9IDogbnVsbCwgW29wZW4sIHNldFBvc2l0aW9uaW5nU3R5bGVzXSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFvcGVuKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBoYW5kbGVSZXNpemUgPSBkZWJvdW5jZSgoKSA9PiB7XG4gICAgICBzZXRQb3NpdGlvbmluZ1N0eWxlcygpO1xuICAgIH0pO1xuICAgIGNvbnN0IGNvbnRhaW5lcldpbmRvdyA9IG93bmVyV2luZG93KGFuY2hvckVsKTtcbiAgICBjb250YWluZXJXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaGFuZGxlUmVzaXplKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaGFuZGxlUmVzaXplLmNsZWFyKCk7XG4gICAgICBjb250YWluZXJXaW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaGFuZGxlUmVzaXplKTtcbiAgICB9O1xuICB9LCBbYW5jaG9yRWwsIG9wZW4sIHNldFBvc2l0aW9uaW5nU3R5bGVzXSk7XG4gIGxldCB0cmFuc2l0aW9uRHVyYXRpb24gPSB0cmFuc2l0aW9uRHVyYXRpb25Qcm9wO1xuICBpZiAodHJhbnNpdGlvbkR1cmF0aW9uUHJvcCA9PT0gJ2F1dG8nICYmICFUcmFuc2l0aW9uQ29tcG9uZW50Lm11aVN1cHBvcnRBdXRvKSB7XG4gICAgdHJhbnNpdGlvbkR1cmF0aW9uID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8gSWYgdGhlIGNvbnRhaW5lciBwcm9wIGlzIHByb3ZpZGVkLCB1c2UgdGhhdFxuICAvLyBJZiB0aGUgYW5jaG9yRWwgcHJvcCBpcyBwcm92aWRlZCwgdXNlIGl0cyBwYXJlbnQgYm9keSBlbGVtZW50IGFzIHRoZSBjb250YWluZXJcbiAgLy8gSWYgbmVpdGhlciBhcmUgcHJvdmlkZWQgbGV0IHRoZSBNb2RhbCB0YWtlIGNhcmUgb2YgY2hvb3NpbmcgdGhlIGNvbnRhaW5lclxuICBjb25zdCBjb250YWluZXIgPSBjb250YWluZXJQcm9wIHx8IChhbmNob3JFbCA/IG93bmVyRG9jdW1lbnQocmVzb2x2ZUFuY2hvckVsKGFuY2hvckVsKSkuYm9keSA6IHVuZGVmaW5lZCk7XG4gIGNvbnN0IFJvb3RTbG90ID0gKF9zbG90cyRyb290ID0gc2xvdHMgPT0gbnVsbCA/IHZvaWQgMCA6IHNsb3RzLnJvb3QpICE9IG51bGwgPyBfc2xvdHMkcm9vdCA6IFBvcG92ZXJSb290O1xuICBjb25zdCBQYXBlclNsb3QgPSAoX3Nsb3RzJHBhcGVyID0gc2xvdHMgPT0gbnVsbCA/IHZvaWQgMCA6IHNsb3RzLnBhcGVyKSAhPSBudWxsID8gX3Nsb3RzJHBhcGVyIDogUG9wb3ZlclBhcGVyO1xuICBjb25zdCBwYXBlclByb3BzID0gdXNlU2xvdFByb3BzKHtcbiAgICBlbGVtZW50VHlwZTogUGFwZXJTbG90LFxuICAgIGV4dGVybmFsU2xvdFByb3BzOiBfZXh0ZW5kcyh7fSwgZXh0ZXJuYWxQYXBlclNsb3RQcm9wcywge1xuICAgICAgc3R5bGU6IGlzUG9zaXRpb25lZCA/IGV4dGVybmFsUGFwZXJTbG90UHJvcHMuc3R5bGUgOiBfZXh0ZW5kcyh7fSwgZXh0ZXJuYWxQYXBlclNsb3RQcm9wcy5zdHlsZSwge1xuICAgICAgICBvcGFjaXR5OiAwXG4gICAgICB9KVxuICAgIH0pLFxuICAgIGFkZGl0aW9uYWxQcm9wczoge1xuICAgICAgZWxldmF0aW9uLFxuICAgICAgcmVmOiBoYW5kbGVQYXBlclJlZlxuICAgIH0sXG4gICAgb3duZXJTdGF0ZSxcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5wYXBlciwgZXh0ZXJuYWxQYXBlclNsb3RQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogZXh0ZXJuYWxQYXBlclNsb3RQcm9wcy5jbGFzc05hbWUpXG4gIH0pO1xuICBjb25zdCBfdXNlU2xvdFByb3BzID0gdXNlU2xvdFByb3BzKHtcbiAgICAgIGVsZW1lbnRUeXBlOiBSb290U2xvdCxcbiAgICAgIGV4dGVybmFsU2xvdFByb3BzOiAoc2xvdFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBzbG90UHJvcHMucm9vdCkgfHwge30sXG4gICAgICBleHRlcm5hbEZvcndhcmRlZFByb3BzOiBvdGhlcixcbiAgICAgIGFkZGl0aW9uYWxQcm9wczoge1xuICAgICAgICByZWYsXG4gICAgICAgIHNsb3RQcm9wczoge1xuICAgICAgICAgIGJhY2tkcm9wOiB7XG4gICAgICAgICAgICBpbnZpc2libGU6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgb3BlblxuICAgICAgfSxcbiAgICAgIG93bmVyU3RhdGUsXG4gICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpXG4gICAgfSksXG4gICAge1xuICAgICAgc2xvdFByb3BzOiByb290U2xvdFByb3BzUHJvcFxuICAgIH0gPSBfdXNlU2xvdFByb3BzLFxuICAgIHJvb3RQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF91c2VTbG90UHJvcHMsIF9leGNsdWRlZDMpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goUm9vdFNsb3QsIF9leHRlbmRzKHt9LCByb290UHJvcHMsICFpc0hvc3RDb21wb25lbnQoUm9vdFNsb3QpICYmIHtcbiAgICBzbG90UHJvcHM6IHJvb3RTbG90UHJvcHNQcm9wLFxuICAgIGRpc2FibGVTY3JvbGxMb2NrXG4gIH0sIHtcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goVHJhbnNpdGlvbkNvbXBvbmVudCwgX2V4dGVuZHMoe1xuICAgICAgYXBwZWFyOiB0cnVlLFxuICAgICAgaW46IG9wZW4sXG4gICAgICBvbkVudGVyaW5nOiBoYW5kbGVFbnRlcmluZyxcbiAgICAgIG9uRXhpdGVkOiBoYW5kbGVFeGl0ZWQsXG4gICAgICB0aW1lb3V0OiB0cmFuc2l0aW9uRHVyYXRpb25cbiAgICB9LCBUcmFuc2l0aW9uUHJvcHMsIHtcbiAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChQYXBlclNsb3QsIF9leHRlbmRzKHt9LCBwYXBlclByb3BzLCB7XG4gICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgICAgfSkpXG4gICAgfSkpXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gUG9wb3Zlci5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFdhcm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIOKUglxuICAvLyDilIIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICDilIJcbiAgLy8g4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gIC8qKlxuICAgKiBBIHJlZiBmb3IgaW1wZXJhdGl2ZSBhY3Rpb25zLlxuICAgKiBJdCBjdXJyZW50bHkgb25seSBzdXBwb3J0cyB1cGRhdGVQb3NpdGlvbigpIGFjdGlvbi5cbiAgICovXG4gIGFjdGlvbjogcmVmVHlwZSxcbiAgLyoqXG4gICAqIEFuIEhUTUwgZWxlbWVudCwgW1BvcG92ZXJWaXJ0dWFsRWxlbWVudF0oL21hdGVyaWFsLXVpL3JlYWN0LXBvcG92ZXIvI3ZpcnR1YWwtZWxlbWVudCksXG4gICAqIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGVpdGhlci5cbiAgICogSXQncyB1c2VkIHRvIHNldCB0aGUgcG9zaXRpb24gb2YgdGhlIHBvcG92ZXIuXG4gICAqL1xuICBhbmNob3JFbDogY2hhaW5Qcm9wVHlwZXMoUHJvcFR5cGVzLm9uZU9mVHlwZShbSFRNTEVsZW1lbnRUeXBlLCBQcm9wVHlwZXMuZnVuY10pLCBwcm9wcyA9PiB7XG4gICAgaWYgKHByb3BzLm9wZW4gJiYgKCFwcm9wcy5hbmNob3JSZWZlcmVuY2UgfHwgcHJvcHMuYW5jaG9yUmVmZXJlbmNlID09PSAnYW5jaG9yRWwnKSkge1xuICAgICAgY29uc3QgcmVzb2x2ZWRBbmNob3JFbCA9IHJlc29sdmVBbmNob3JFbChwcm9wcy5hbmNob3JFbCk7XG4gICAgICBpZiAocmVzb2x2ZWRBbmNob3JFbCAmJiByZXNvbHZlZEFuY2hvckVsLm5vZGVUeXBlID09PSAxKSB7XG4gICAgICAgIGNvbnN0IGJveCA9IHJlc29sdmVkQW5jaG9yRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Rlc3QnICYmIGJveC50b3AgPT09IDAgJiYgYm94LmxlZnQgPT09IDAgJiYgYm94LnJpZ2h0ID09PSAwICYmIGJveC5ib3R0b20gPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKFsnTVVJOiBUaGUgYGFuY2hvckVsYCBwcm9wIHByb3ZpZGVkIHRvIHRoZSBjb21wb25lbnQgaXMgaW52YWxpZC4nLCAnVGhlIGFuY2hvciBlbGVtZW50IHNob3VsZCBiZSBwYXJ0IG9mIHRoZSBkb2N1bWVudCBsYXlvdXQuJywgXCJNYWtlIHN1cmUgdGhlIGVsZW1lbnQgaXMgcHJlc2VudCBpbiB0aGUgZG9jdW1lbnQgb3IgdGhhdCBpdCdzIG5vdCBkaXNwbGF5IG5vbmUuXCJdLmpvaW4oJ1xcbicpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihbJ01VSTogVGhlIGBhbmNob3JFbGAgcHJvcCBwcm92aWRlZCB0byB0aGUgY29tcG9uZW50IGlzIGludmFsaWQuJywgYEl0IHNob3VsZCBiZSBhbiBFbGVtZW50IG9yIFBvcG92ZXJWaXJ0dWFsRWxlbWVudCBpbnN0YW5jZSBidXQgaXQncyBcXGAke3Jlc29sdmVkQW5jaG9yRWx9XFxgIGluc3RlYWQuYF0uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSksXG4gIC8qKlxuICAgKiBUaGlzIGlzIHRoZSBwb2ludCBvbiB0aGUgYW5jaG9yIHdoZXJlIHRoZSBwb3BvdmVyJ3NcbiAgICogYGFuY2hvckVsYCB3aWxsIGF0dGFjaCB0by4gVGhpcyBpcyBub3QgdXNlZCB3aGVuIHRoZVxuICAgKiBhbmNob3JSZWZlcmVuY2UgaXMgJ2FuY2hvclBvc2l0aW9uJy5cbiAgICpcbiAgICogT3B0aW9uczpcbiAgICogdmVydGljYWw6IFt0b3AsIGNlbnRlciwgYm90dG9tXTtcbiAgICogaG9yaXpvbnRhbDogW2xlZnQsIGNlbnRlciwgcmlnaHRdLlxuICAgKiBAZGVmYXVsdCB7XG4gICAqICAgdmVydGljYWw6ICd0b3AnLFxuICAgKiAgIGhvcml6b250YWw6ICdsZWZ0JyxcbiAgICogfVxuICAgKi9cbiAgYW5jaG9yT3JpZ2luOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGhvcml6b250YWw6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2NlbnRlcicsICdsZWZ0JywgJ3JpZ2h0J10pLCBQcm9wVHlwZXMubnVtYmVyXSkuaXNSZXF1aXJlZCxcbiAgICB2ZXJ0aWNhbDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYm90dG9tJywgJ2NlbnRlcicsICd0b3AnXSksIFByb3BUeXBlcy5udW1iZXJdKS5pc1JlcXVpcmVkXG4gIH0pLFxuICAvKipcbiAgICogVGhpcyBpcyB0aGUgcG9zaXRpb24gdGhhdCBtYXkgYmUgdXNlZCB0byBzZXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBwb3BvdmVyLlxuICAgKiBUaGUgY29vcmRpbmF0ZXMgYXJlIHJlbGF0aXZlIHRvIHRoZSBhcHBsaWNhdGlvbidzIGNsaWVudCBhcmVhLlxuICAgKi9cbiAgYW5jaG9yUG9zaXRpb246IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgbGVmdDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICAgIHRvcDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkXG4gIH0pLFxuICAvKipcbiAgICogVGhpcyBkZXRlcm1pbmVzIHdoaWNoIGFuY2hvciBwcm9wIHRvIHJlZmVyIHRvIHdoZW4gc2V0dGluZ1xuICAgKiB0aGUgcG9zaXRpb24gb2YgdGhlIHBvcG92ZXIuXG4gICAqIEBkZWZhdWx0ICdhbmNob3JFbCdcbiAgICovXG4gIGFuY2hvclJlZmVyZW5jZTogUHJvcFR5cGVzLm9uZU9mKFsnYW5jaG9yRWwnLCAnYW5jaG9yUG9zaXRpb24nLCAnbm9uZSddKSxcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQW4gSFRNTCBlbGVtZW50LCBjb21wb25lbnQgaW5zdGFuY2UsIG9yIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBlaXRoZXIuXG4gICAqIFRoZSBgY29udGFpbmVyYCB3aWxsIHBhc3NlZCB0byB0aGUgTW9kYWwgY29tcG9uZW50LlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCBpdCB1c2VzIHRoZSBib2R5IG9mIHRoZSBhbmNob3JFbCdzIHRvcC1sZXZlbCBkb2N1bWVudCBvYmplY3QsXG4gICAqIHNvIGl0J3Mgc2ltcGx5IGBkb2N1bWVudC5ib2R5YCBtb3N0IG9mIHRoZSB0aW1lLlxuICAgKi9cbiAgY29udGFpbmVyOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW0hUTUxFbGVtZW50VHlwZSwgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgLyoqXG4gICAqIERpc2FibGUgdGhlIHNjcm9sbCBsb2NrIGJlaGF2aW9yLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVNjcm9sbExvY2s6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGVsZXZhdGlvbiBvZiB0aGUgcG9wb3Zlci5cbiAgICogQGRlZmF1bHQgOFxuICAgKi9cbiAgZWxldmF0aW9uOiBpbnRlZ2VyUHJvcFR5cGUsXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgaG93IGNsb3NlIHRvIHRoZSBlZGdlIG9mIHRoZSB3aW5kb3cgdGhlIHBvcG92ZXIgY2FuIGFwcGVhci5cbiAgICogSWYgbnVsbCwgdGhlIHBvcG92ZXIgd2lsbCBub3QgYmUgY29uc3RyYWluZWQgYnkgdGhlIHdpbmRvdy5cbiAgICogQGRlZmF1bHQgMTZcbiAgICovXG4gIG1hcmdpblRocmVzaG9sZDogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIGNvbXBvbmVudCByZXF1ZXN0cyB0byBiZSBjbG9zZWQuXG4gICAqIFRoZSBgcmVhc29uYCBwYXJhbWV0ZXIgY2FuIG9wdGlvbmFsbHkgYmUgdXNlZCB0byBjb250cm9sIHRoZSByZXNwb25zZSB0byBgb25DbG9zZWAuXG4gICAqL1xuICBvbkNsb3NlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBzaG93bi5cbiAgICovXG4gIG9wZW46IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSBbYFBhcGVyYF0oL21hdGVyaWFsLXVpL2FwaS9wYXBlci8pIGVsZW1lbnQuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgYHNsb3RQcm9wcy5wYXBlcmAgYW5kIHdpbGwgYmUgb3ZlcnJpZGVuIGJ5IGl0IGlmIGJvdGggYXJlIHVzZWQuXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgc2xvdFByb3BzLnBhcGVyYCBpbnN0ZWFkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgUGFwZXJQcm9wczogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8uc2hhcGUoe1xuICAgIGNvbXBvbmVudDogZWxlbWVudFR5cGVBY2NlcHRpbmdSZWZcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgZXh0cmEgcHJvcHMgZm9yIHRoZSBzbG90IGNvbXBvbmVudHMuXG4gICAqIFlvdSBjYW4gb3ZlcnJpZGUgdGhlIGV4aXN0aW5nIHByb3BzIG9yIGFkZCBuZXcgb25lcy5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHNsb3RQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBwYXBlcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgICByb290OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG4gIH0pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZS5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHNsb3RzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIHBhcGVyOiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gICAgcm9vdDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogVGhpcyBpcyB0aGUgcG9pbnQgb24gdGhlIHBvcG92ZXIgd2hpY2hcbiAgICogd2lsbCBhdHRhY2ggdG8gdGhlIGFuY2hvcidzIG9yaWdpbi5cbiAgICpcbiAgICogT3B0aW9uczpcbiAgICogdmVydGljYWw6IFt0b3AsIGNlbnRlciwgYm90dG9tLCB4KHB4KV07XG4gICAqIGhvcml6b250YWw6IFtsZWZ0LCBjZW50ZXIsIHJpZ2h0LCB4KHB4KV0uXG4gICAqIEBkZWZhdWx0IHtcbiAgICogICB2ZXJ0aWNhbDogJ3RvcCcsXG4gICAqICAgaG9yaXpvbnRhbDogJ2xlZnQnLFxuICAgKiB9XG4gICAqL1xuICB0cmFuc2Zvcm1PcmlnaW46IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaG9yaXpvbnRhbDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnY2VudGVyJywgJ2xlZnQnLCAncmlnaHQnXSksIFByb3BUeXBlcy5udW1iZXJdKS5pc1JlcXVpcmVkLFxuICAgIHZlcnRpY2FsOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydib3R0b20nLCAnY2VudGVyJywgJ3RvcCddKSwgUHJvcFR5cGVzLm51bWJlcl0pLmlzUmVxdWlyZWRcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSB0cmFuc2l0aW9uLlxuICAgKiBbRm9sbG93IHRoaXMgZ3VpZGVdKC9tYXRlcmlhbC11aS90cmFuc2l0aW9ucy8jdHJhbnNpdGlvbmNvbXBvbmVudC1wcm9wKSB0byBsZWFybiBtb3JlIGFib3V0IHRoZSByZXF1aXJlbWVudHMgZm9yIHRoaXMgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCBHcm93XG4gICAqL1xuICBUcmFuc2l0aW9uQ29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBTZXQgdG8gJ2F1dG8nIHRvIGF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlIHRyYW5zaXRpb24gdGltZSBiYXNlZCBvbiBoZWlnaHQuXG4gICAqIEBkZWZhdWx0ICdhdXRvJ1xuICAgKi9cbiAgdHJhbnNpdGlvbkR1cmF0aW9uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydhdXRvJ10pLCBQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGFwcGVhcjogUHJvcFR5cGVzLm51bWJlcixcbiAgICBlbnRlcjogUHJvcFR5cGVzLm51bWJlcixcbiAgICBleGl0OiBQcm9wVHlwZXMubnVtYmVyXG4gIH0pXSksXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSB0cmFuc2l0aW9uIGVsZW1lbnQuXG4gICAqIEJ5IGRlZmF1bHQsIHRoZSBlbGVtZW50IGlzIGJhc2VkIG9uIHRoaXMgW2BUcmFuc2l0aW9uYF0oaHR0cHM6Ly9yZWFjdGNvbW11bml0eS5vcmcvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC90cmFuc2l0aW9uLykgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgVHJhbnNpdGlvblByb3BzOiBQcm9wVHlwZXMub2JqZWN0XG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgUG9wb3ZlcjsiLCJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1lbnVVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aU1lbnUnLCBzbG90KTtcbn1cbmNvbnN0IG1lbnVDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpTWVudScsIFsncm9vdCcsICdwYXBlcicsICdsaXN0J10pO1xuZXhwb3J0IGRlZmF1bHQgbWVudUNsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wib25FbnRlcmluZ1wiXSxcbiAgX2V4Y2x1ZGVkMiA9IFtcImF1dG9Gb2N1c1wiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiZGlzYWJsZUF1dG9Gb2N1c0l0ZW1cIiwgXCJNZW51TGlzdFByb3BzXCIsIFwib25DbG9zZVwiLCBcIm9wZW5cIiwgXCJQYXBlclByb3BzXCIsIFwiUG9wb3ZlckNsYXNzZXNcIiwgXCJ0cmFuc2l0aW9uRHVyYXRpb25cIiwgXCJUcmFuc2l0aW9uUHJvcHNcIiwgXCJ2YXJpYW50XCIsIFwic2xvdHNcIiwgXCJzbG90UHJvcHNcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBpc0ZyYWdtZW50IH0gZnJvbSAncmVhY3QtaXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IEhUTUxFbGVtZW50VHlwZSBmcm9tICdAbXVpL3V0aWxzL0hUTUxFbGVtZW50VHlwZSc7XG5pbXBvcnQgeyB1c2VSdGwgfSBmcm9tICdAbXVpL3N5c3RlbS9SdGxQcm92aWRlcic7XG5pbXBvcnQgdXNlU2xvdFByb3BzIGZyb20gJ0BtdWkvdXRpbHMvdXNlU2xvdFByb3BzJztcbmltcG9ydCBNZW51TGlzdCBmcm9tICcuLi9NZW51TGlzdCc7XG5pbXBvcnQgUG9wb3ZlciwgeyBQb3BvdmVyUGFwZXIgfSBmcm9tICcuLi9Qb3BvdmVyJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyB1c2VEZWZhdWx0UHJvcHMgfSBmcm9tICcuLi9EZWZhdWx0UHJvcHNQcm92aWRlcic7XG5pbXBvcnQgeyBnZXRNZW51VXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9tZW51Q2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgUlRMX09SSUdJTiA9IHtcbiAgdmVydGljYWw6ICd0b3AnLFxuICBob3Jpem9udGFsOiAncmlnaHQnXG59O1xuY29uc3QgTFRSX09SSUdJTiA9IHtcbiAgdmVydGljYWw6ICd0b3AnLFxuICBob3Jpem9udGFsOiAnbGVmdCdcbn07XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3Nlc1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290J10sXG4gICAgcGFwZXI6IFsncGFwZXInXSxcbiAgICBsaXN0OiBbJ2xpc3QnXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldE1lbnVVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmNvbnN0IE1lbnVSb290ID0gc3R5bGVkKFBvcG92ZXIsIHtcbiAgc2hvdWxkRm9yd2FyZFByb3A6IHByb3AgPT4gcm9vdFNob3VsZEZvcndhcmRQcm9wKHByb3ApIHx8IHByb3AgPT09ICdjbGFzc2VzJyxcbiAgbmFtZTogJ011aU1lbnUnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLnJvb3Rcbn0pKHt9KTtcbmV4cG9ydCBjb25zdCBNZW51UGFwZXIgPSBzdHlsZWQoUG9wb3ZlclBhcGVyLCB7XG4gIG5hbWU6ICdNdWlNZW51JyxcbiAgc2xvdDogJ1BhcGVyJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMucGFwZXJcbn0pKHtcbiAgLy8gc3BlY1o6IFRoZSBtYXhpbXVtIGhlaWdodCBvZiBhIHNpbXBsZSBtZW51IHNob3VsZCBiZSBvbmUgb3IgbW9yZSByb3dzIGxlc3MgdGhhbiB0aGUgdmlld1xuICAvLyBoZWlnaHQuIFRoaXMgZW5zdXJlcyBhIHRhcHBhYmxlIGFyZWEgb3V0c2lkZSBvZiB0aGUgc2ltcGxlIG1lbnUgd2l0aCB3aGljaCB0byBkaXNtaXNzXG4gIC8vIHRoZSBtZW51LlxuICBtYXhIZWlnaHQ6ICdjYWxjKDEwMCUgLSA5NnB4KScsXG4gIC8vIEFkZCBpT1MgbW9tZW50dW0gc2Nyb2xsaW5nIGZvciBpT1MgPCAxMy4wXG4gIFdlYmtpdE92ZXJmbG93U2Nyb2xsaW5nOiAndG91Y2gnXG59KTtcbmNvbnN0IE1lbnVNZW51TGlzdCA9IHN0eWxlZChNZW51TGlzdCwge1xuICBuYW1lOiAnTXVpTWVudScsXG4gIHNsb3Q6ICdMaXN0JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMubGlzdFxufSkoe1xuICAvLyBXZSBkaXNhYmxlIHRoZSBmb2N1cyByaW5nIGZvciBtb3VzZSwgdG91Y2ggYW5kIGtleWJvYXJkIHVzZXJzLlxuICBvdXRsaW5lOiAwXG59KTtcbmNvbnN0IE1lbnUgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBNZW51KGluUHJvcHMsIHJlZikge1xuICB2YXIgX3Nsb3RzJHBhcGVyLCBfc2xvdFByb3BzJHBhcGVyO1xuICBjb25zdCBwcm9wcyA9IHVzZURlZmF1bHRQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aU1lbnUnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBhdXRvRm9jdXMgPSB0cnVlLFxuICAgICAgY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBkaXNhYmxlQXV0b0ZvY3VzSXRlbSA9IGZhbHNlLFxuICAgICAgTWVudUxpc3RQcm9wcyA9IHt9LFxuICAgICAgb25DbG9zZSxcbiAgICAgIG9wZW4sXG4gICAgICBQYXBlclByb3BzID0ge30sXG4gICAgICBQb3BvdmVyQ2xhc3NlcyxcbiAgICAgIHRyYW5zaXRpb25EdXJhdGlvbiA9ICdhdXRvJyxcbiAgICAgIFRyYW5zaXRpb25Qcm9wczoge1xuICAgICAgICBvbkVudGVyaW5nXG4gICAgICB9ID0ge30sXG4gICAgICB2YXJpYW50ID0gJ3NlbGVjdGVkTWVudScsXG4gICAgICBzbG90cyA9IHt9LFxuICAgICAgc2xvdFByb3BzID0ge31cbiAgICB9ID0gcHJvcHMsXG4gICAgVHJhbnNpdGlvblByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMuVHJhbnNpdGlvblByb3BzLCBfZXhjbHVkZWQpLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZDIpO1xuICBjb25zdCBpc1J0bCA9IHVzZVJ0bCgpO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgYXV0b0ZvY3VzLFxuICAgIGRpc2FibGVBdXRvRm9jdXNJdGVtLFxuICAgIE1lbnVMaXN0UHJvcHMsXG4gICAgb25FbnRlcmluZyxcbiAgICBQYXBlclByb3BzLFxuICAgIHRyYW5zaXRpb25EdXJhdGlvbixcbiAgICBUcmFuc2l0aW9uUHJvcHMsXG4gICAgdmFyaWFudFxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICBjb25zdCBhdXRvRm9jdXNJdGVtID0gYXV0b0ZvY3VzICYmICFkaXNhYmxlQXV0b0ZvY3VzSXRlbSAmJiBvcGVuO1xuICBjb25zdCBtZW51TGlzdEFjdGlvbnNSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IGhhbmRsZUVudGVyaW5nID0gKGVsZW1lbnQsIGlzQXBwZWFyaW5nKSA9PiB7XG4gICAgaWYgKG1lbnVMaXN0QWN0aW9uc1JlZi5jdXJyZW50KSB7XG4gICAgICBtZW51TGlzdEFjdGlvbnNSZWYuY3VycmVudC5hZGp1c3RTdHlsZUZvclNjcm9sbGJhcihlbGVtZW50LCB7XG4gICAgICAgIGRpcmVjdGlvbjogaXNSdGwgPyAncnRsJyA6ICdsdHInXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKG9uRW50ZXJpbmcpIHtcbiAgICAgIG9uRW50ZXJpbmcoZWxlbWVudCwgaXNBcHBlYXJpbmcpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgaGFuZGxlTGlzdEtleURvd24gPSBldmVudCA9PiB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ1RhYicpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBpZiAob25DbG9zZSkge1xuICAgICAgICBvbkNsb3NlKGV2ZW50LCAndGFiS2V5RG93bicpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogdGhlIGluZGV4IG9mIHRoZSBpdGVtIHNob3VsZCByZWNlaXZlIGZvY3VzXG4gICAqIGluIGEgYHZhcmlhbnQ9XCJzZWxlY3RlZE1lbnVcImAgaXQncyB0aGUgZmlyc3QgYHNlbGVjdGVkYCBpdGVtXG4gICAqIG90aGVyd2lzZSBpdCdzIHRoZSB2ZXJ5IGZpcnN0IGl0ZW0uXG4gICAqL1xuICBsZXQgYWN0aXZlSXRlbUluZGV4ID0gLTE7XG4gIC8vIHNpbmNlIHdlIGluamVjdCBmb2N1cyByZWxhdGVkIHByb3BzIGludG8gY2hpbGRyZW4gd2UgaGF2ZSB0byBkbyBhIGxvb2thaGVhZFxuICAvLyB0byBjaGVjayBpZiB0aGVyZSBpcyBhIGBzZWxlY3RlZGAgaXRlbS4gV2UncmUgbG9va2luZyBmb3IgdGhlIGxhc3QgYHNlbGVjdGVkYFxuICAvLyBpdGVtIGFuZCB1c2UgdGhlIGZpcnN0IHZhbGlkIGl0ZW0gYXMgYSBmYWxsYmFja1xuICBSZWFjdC5DaGlsZHJlbi5tYXAoY2hpbGRyZW4sIChjaGlsZCwgaW5kZXgpID0+IHtcbiAgICBpZiAoISAvKiNfX1BVUkVfXyovUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoaXNGcmFnbWVudChjaGlsZCkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbXCJNVUk6IFRoZSBNZW51IGNvbXBvbmVudCBkb2Vzbid0IGFjY2VwdCBhIEZyYWdtZW50IGFzIGEgY2hpbGQuXCIsICdDb25zaWRlciBwcm92aWRpbmcgYW4gYXJyYXkgaW5zdGVhZC4nXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghY2hpbGQucHJvcHMuZGlzYWJsZWQpIHtcbiAgICAgIGlmICh2YXJpYW50ID09PSAnc2VsZWN0ZWRNZW51JyAmJiBjaGlsZC5wcm9wcy5zZWxlY3RlZCkge1xuICAgICAgICBhY3RpdmVJdGVtSW5kZXggPSBpbmRleDtcbiAgICAgIH0gZWxzZSBpZiAoYWN0aXZlSXRlbUluZGV4ID09PSAtMSkge1xuICAgICAgICBhY3RpdmVJdGVtSW5kZXggPSBpbmRleDtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICBjb25zdCBQYXBlclNsb3QgPSAoX3Nsb3RzJHBhcGVyID0gc2xvdHMucGFwZXIpICE9IG51bGwgPyBfc2xvdHMkcGFwZXIgOiBNZW51UGFwZXI7XG4gIGNvbnN0IHBhcGVyRXh0ZXJuYWxTbG90UHJvcHMgPSAoX3Nsb3RQcm9wcyRwYXBlciA9IHNsb3RQcm9wcy5wYXBlcikgIT0gbnVsbCA/IF9zbG90UHJvcHMkcGFwZXIgOiBQYXBlclByb3BzO1xuICBjb25zdCByb290U2xvdFByb3BzID0gdXNlU2xvdFByb3BzKHtcbiAgICBlbGVtZW50VHlwZTogc2xvdHMucm9vdCxcbiAgICBleHRlcm5hbFNsb3RQcm9wczogc2xvdFByb3BzLnJvb3QsXG4gICAgb3duZXJTdGF0ZSxcbiAgICBjbGFzc05hbWU6IFtjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZV1cbiAgfSk7XG4gIGNvbnN0IHBhcGVyU2xvdFByb3BzID0gdXNlU2xvdFByb3BzKHtcbiAgICBlbGVtZW50VHlwZTogUGFwZXJTbG90LFxuICAgIGV4dGVybmFsU2xvdFByb3BzOiBwYXBlckV4dGVybmFsU2xvdFByb3BzLFxuICAgIG93bmVyU3RhdGUsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLnBhcGVyXG4gIH0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goTWVudVJvb3QsIF9leHRlbmRzKHtcbiAgICBvbkNsb3NlOiBvbkNsb3NlLFxuICAgIGFuY2hvck9yaWdpbjoge1xuICAgICAgdmVydGljYWw6ICdib3R0b20nLFxuICAgICAgaG9yaXpvbnRhbDogaXNSdGwgPyAncmlnaHQnIDogJ2xlZnQnXG4gICAgfSxcbiAgICB0cmFuc2Zvcm1PcmlnaW46IGlzUnRsID8gUlRMX09SSUdJTiA6IExUUl9PUklHSU4sXG4gICAgc2xvdHM6IHtcbiAgICAgIHBhcGVyOiBQYXBlclNsb3QsXG4gICAgICByb290OiBzbG90cy5yb290XG4gICAgfSxcbiAgICBzbG90UHJvcHM6IHtcbiAgICAgIHJvb3Q6IHJvb3RTbG90UHJvcHMsXG4gICAgICBwYXBlcjogcGFwZXJTbG90UHJvcHNcbiAgICB9LFxuICAgIG9wZW46IG9wZW4sXG4gICAgcmVmOiByZWYsXG4gICAgdHJhbnNpdGlvbkR1cmF0aW9uOiB0cmFuc2l0aW9uRHVyYXRpb24sXG4gICAgVHJhbnNpdGlvblByb3BzOiBfZXh0ZW5kcyh7XG4gICAgICBvbkVudGVyaW5nOiBoYW5kbGVFbnRlcmluZ1xuICAgIH0sIFRyYW5zaXRpb25Qcm9wcyksXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZVxuICB9LCBvdGhlciwge1xuICAgIGNsYXNzZXM6IFBvcG92ZXJDbGFzc2VzLFxuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChNZW51TWVudUxpc3QsIF9leHRlbmRzKHtcbiAgICAgIG9uS2V5RG93bjogaGFuZGxlTGlzdEtleURvd24sXG4gICAgICBhY3Rpb25zOiBtZW51TGlzdEFjdGlvbnNSZWYsXG4gICAgICBhdXRvRm9jdXM6IGF1dG9Gb2N1cyAmJiAoYWN0aXZlSXRlbUluZGV4ID09PSAtMSB8fCBkaXNhYmxlQXV0b0ZvY3VzSXRlbSksXG4gICAgICBhdXRvRm9jdXNJdGVtOiBhdXRvRm9jdXNJdGVtLFxuICAgICAgdmFyaWFudDogdmFyaWFudFxuICAgIH0sIE1lbnVMaXN0UHJvcHMsIHtcbiAgICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLmxpc3QsIE1lbnVMaXN0UHJvcHMuY2xhc3NOYW1lKSxcbiAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgIH0pKVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IE1lbnUucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogQW4gSFRNTCBlbGVtZW50LCBvciBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBvbmUuXG4gICAqIEl0J3MgdXNlZCB0byBzZXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBtZW51LlxuICAgKi9cbiAgYW5jaG9yRWw6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbSFRNTEVsZW1lbnRUeXBlLCBQcm9wVHlwZXMuZnVuY10pLFxuICAvKipcbiAgICogSWYgYHRydWVgIChEZWZhdWx0KSB3aWxsIGZvY3VzIHRoZSBgW3JvbGU9XCJtZW51XCJdYCBpZiBubyBmb2N1c2FibGUgY2hpbGQgaXMgZm91bmQuIERpc2FibGVkXG4gICAqIGNoaWxkcmVuIGFyZSBub3QgZm9jdXNhYmxlLiBJZiB5b3Ugc2V0IHRoaXMgcHJvcCB0byBgZmFsc2VgIGZvY3VzIHdpbGwgYmUgcGxhY2VkXG4gICAqIG9uIHRoZSBwYXJlbnQgbW9kYWwgY29udGFpbmVyLiBUaGlzIGhhcyBzZXZlcmUgYWNjZXNzaWJpbGl0eSBpbXBsaWNhdGlvbnNcbiAgICogYW5kIHNob3VsZCBvbmx5IGJlIGNvbnNpZGVyZWQgaWYgeW91IG1hbmFnZSBmb2N1cyBvdGhlcndpc2UuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBNZW51IGNvbnRlbnRzLCBub3JtYWxseSBgTWVudUl0ZW1gcy5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBXaGVuIG9wZW5pbmcgdGhlIG1lbnUgd2lsbCBub3QgZm9jdXMgdGhlIGFjdGl2ZSBpdGVtIGJ1dCB0aGUgYFtyb2xlPVwibWVudVwiXWBcbiAgICogdW5sZXNzIGBhdXRvRm9jdXNgIGlzIGFsc28gc2V0IHRvIGBmYWxzZWAuIE5vdCB1c2luZyB0aGUgZGVmYXVsdCBtZWFucyBub3RcbiAgICogZm9sbG93aW5nIFdBSS1BUklBIGF1dGhvcmluZyBwcmFjdGljZXMuIFBsZWFzZSBiZSBjb25zaWRlcmF0ZSBhYm91dCBwb3NzaWJsZVxuICAgKiBhY2Nlc3NpYmlsaXR5IGltcGxpY2F0aW9ucy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVBdXRvRm9jdXNJdGVtOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIFtgTWVudUxpc3RgXSgvbWF0ZXJpYWwtdWkvYXBpL21lbnUtbGlzdC8pIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBNZW51TGlzdFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgY29tcG9uZW50IHJlcXVlc3RzIHRvIGJlIGNsb3NlZC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uIENhbiBiZTogYFwiZXNjYXBlS2V5RG93blwiYCwgYFwiYmFja2Ryb3BDbGlja1wiYCwgYFwidGFiS2V5RG93blwiYC5cbiAgICovXG4gIG9uQ2xvc2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIHNob3duLlxuICAgKi9cbiAgb3BlbjogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIFBhcGVyUHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBgY2xhc3Nlc2AgcHJvcCBhcHBsaWVkIHRvIHRoZSBbYFBvcG92ZXJgXSgvbWF0ZXJpYWwtdWkvYXBpL3BvcG92ZXIvKSBlbGVtZW50LlxuICAgKi9cbiAgUG9wb3ZlckNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBUaGUgZXh0cmEgcHJvcHMgZm9yIHRoZSBzbG90IGNvbXBvbmVudHMuXG4gICAqIFlvdSBjYW4gb3ZlcnJpZGUgdGhlIGV4aXN0aW5nIHByb3BzIG9yIGFkZCBuZXcgb25lcy5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHNsb3RQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBwYXBlcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgICByb290OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG4gIH0pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZS5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHNsb3RzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIHBhcGVyOiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gICAgcm9vdDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogVGhlIGxlbmd0aCBvZiB0aGUgdHJhbnNpdGlvbiBpbiBgbXNgLCBvciAnYXV0bydcbiAgICogQGRlZmF1bHQgJ2F1dG8nXG4gICAqL1xuICB0cmFuc2l0aW9uRHVyYXRpb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2F1dG8nXSksIFByb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYXBwZWFyOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIGVudGVyOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIGV4aXQ6IFByb3BUeXBlcy5udW1iZXJcbiAgfSldKSxcbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIHRyYW5zaXRpb24gZWxlbWVudC5cbiAgICogQnkgZGVmYXVsdCwgdGhlIGVsZW1lbnQgaXMgYmFzZWQgb24gdGhpcyBbYFRyYW5zaXRpb25gXShodHRwczovL3JlYWN0Y29tbXVuaXR5Lm9yZy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL3RyYW5zaXRpb24vKSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBUcmFuc2l0aW9uUHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuIFVzZSBgbWVudWAgdG8gcHJldmVudCBzZWxlY3RlZCBpdGVtcyBmcm9tIGltcGFjdGluZyB0aGUgaW5pdGlhbCBmb2N1cy5cbiAgICogQGRlZmF1bHQgJ3NlbGVjdGVkTWVudSdcbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcy5vbmVPZihbJ21lbnUnLCAnc2VsZWN0ZWRNZW51J10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgTWVudTsiLCJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5hdGl2ZVNlbGVjdFV0aWxpdHlDbGFzc2VzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlOYXRpdmVTZWxlY3QnLCBzbG90KTtcbn1cbmNvbnN0IG5hdGl2ZVNlbGVjdENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlOYXRpdmVTZWxlY3QnLCBbJ3Jvb3QnLCAnc2VsZWN0JywgJ211bHRpcGxlJywgJ2ZpbGxlZCcsICdvdXRsaW5lZCcsICdzdGFuZGFyZCcsICdkaXNhYmxlZCcsICdpY29uJywgJ2ljb25PcGVuJywgJ2ljb25GaWxsZWQnLCAnaWNvbk91dGxpbmVkJywgJ2ljb25TdGFuZGFyZCcsICduYXRpdmVJbnB1dCcsICdlcnJvciddKTtcbmV4cG9ydCBkZWZhdWx0IG5hdGl2ZVNlbGVjdENsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiZGlzYWJsZWRcIiwgXCJlcnJvclwiLCBcIkljb25Db21wb25lbnRcIiwgXCJpbnB1dFJlZlwiLCBcInZhcmlhbnRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgcmVmVHlwZSBmcm9tICdAbXVpL3V0aWxzL3JlZlR5cGUnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgbmF0aXZlU2VsZWN0Q2xhc3NlcywgeyBnZXROYXRpdmVTZWxlY3RVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJy4vbmF0aXZlU2VsZWN0Q2xhc3Nlcyc7XG5pbXBvcnQgc3R5bGVkLCB7IHJvb3RTaG91bGRGb3J3YXJkUHJvcCB9IGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIHZhcmlhbnQsXG4gICAgZGlzYWJsZWQsXG4gICAgbXVsdGlwbGUsXG4gICAgb3BlbixcbiAgICBlcnJvclxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgc2VsZWN0OiBbJ3NlbGVjdCcsIHZhcmlhbnQsIGRpc2FibGVkICYmICdkaXNhYmxlZCcsIG11bHRpcGxlICYmICdtdWx0aXBsZScsIGVycm9yICYmICdlcnJvciddLFxuICAgIGljb246IFsnaWNvbicsIGBpY29uJHtjYXBpdGFsaXplKHZhcmlhbnQpfWAsIG9wZW4gJiYgJ2ljb25PcGVuJywgZGlzYWJsZWQgJiYgJ2Rpc2FibGVkJ11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXROYXRpdmVTZWxlY3RVdGlsaXR5Q2xhc3NlcywgY2xhc3Nlcyk7XG59O1xuZXhwb3J0IGNvbnN0IG5hdGl2ZVNlbGVjdFNlbGVjdFN0eWxlcyA9ICh7XG4gIG93bmVyU3RhdGUsXG4gIHRoZW1lXG59KSA9PiBfZXh0ZW5kcyh7XG4gIE1vekFwcGVhcmFuY2U6ICdub25lJyxcbiAgLy8gUmVzZXRcbiAgV2Via2l0QXBwZWFyYW5jZTogJ25vbmUnLFxuICAvLyBSZXNldFxuICAvLyBXaGVuIGludGVyYWN0aW5nIHF1aWNrbHksIHRoZSB0ZXh0IGNhbiBlbmQgdXAgc2VsZWN0ZWQuXG4gIC8vIE5hdGl2ZSBzZWxlY3QgY2FuJ3QgYmUgc2VsZWN0ZWQgZWl0aGVyLlxuICB1c2VyU2VsZWN0OiAnbm9uZScsXG4gIGJvcmRlclJhZGl1czogMCxcbiAgLy8gUmVzZXRcbiAgY3Vyc29yOiAncG9pbnRlcicsXG4gICcmOmZvY3VzJzogX2V4dGVuZHMoe30sIHRoZW1lLnZhcnMgPyB7XG4gICAgYmFja2dyb3VuZENvbG9yOiBgcmdiYSgke3RoZW1lLnZhcnMucGFsZXR0ZS5jb21tb24ub25CYWNrZ3JvdW5kQ2hhbm5lbH0gLyAwLjA1KWBcbiAgfSA6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JyA/ICdyZ2JhKDAsIDAsIDAsIDAuMDUpJyA6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpJ1xuICB9LCB7XG4gICAgYm9yZGVyUmFkaXVzOiAwIC8vIFJlc2V0IENocm9tZSBzdHlsZVxuICB9KSxcbiAgLy8gUmVtb3ZlIElFMTEgYXJyb3dcbiAgJyY6Oi1tcy1leHBhbmQnOiB7XG4gICAgZGlzcGxheTogJ25vbmUnXG4gIH0sXG4gIFtgJi4ke25hdGl2ZVNlbGVjdENsYXNzZXMuZGlzYWJsZWR9YF06IHtcbiAgICBjdXJzb3I6ICdkZWZhdWx0J1xuICB9LFxuICAnJlttdWx0aXBsZV0nOiB7XG4gICAgaGVpZ2h0OiAnYXV0bydcbiAgfSxcbiAgJyY6bm90KFttdWx0aXBsZV0pIG9wdGlvbiwgJjpub3QoW211bHRpcGxlXSkgb3B0Z3JvdXAnOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5iYWNrZ3JvdW5kLnBhcGVyXG4gIH0sXG4gIC8vIEJ1bXAgc3BlY2lmaWNpdHkgdG8gYWxsb3cgZXh0ZW5kaW5nIGN1c3RvbSBpbnB1dHNcbiAgJyYmJic6IHtcbiAgICBwYWRkaW5nUmlnaHQ6IDI0LFxuICAgIG1pbldpZHRoOiAxNiAvLyBTbyBpdCBkb2Vzbid0IGNvbGxhcHNlLlxuICB9XG59LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdmaWxsZWQnICYmIHtcbiAgJyYmJic6IHtcbiAgICBwYWRkaW5nUmlnaHQ6IDMyXG4gIH1cbn0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ291dGxpbmVkJyAmJiB7XG4gIGJvcmRlclJhZGl1czogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnNoYXBlLmJvcmRlclJhZGl1cyxcbiAgJyY6Zm9jdXMnOiB7XG4gICAgYm9yZGVyUmFkaXVzOiAodGhlbWUudmFycyB8fCB0aGVtZSkuc2hhcGUuYm9yZGVyUmFkaXVzIC8vIFJlc2V0IHRoZSByZXNldCBmb3IgQ2hyb21lIHN0eWxlXG4gIH0sXG4gICcmJiYnOiB7XG4gICAgcGFkZGluZ1JpZ2h0OiAzMlxuICB9XG59KTtcbmNvbnN0IE5hdGl2ZVNlbGVjdFNlbGVjdCA9IHN0eWxlZCgnc2VsZWN0Jywge1xuICBuYW1lOiAnTXVpTmF0aXZlU2VsZWN0JyxcbiAgc2xvdDogJ1NlbGVjdCcsXG4gIHNob3VsZEZvcndhcmRQcm9wOiByb290U2hvdWxkRm9yd2FyZFByb3AsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMuc2VsZWN0LCBzdHlsZXNbb3duZXJTdGF0ZS52YXJpYW50XSwgb3duZXJTdGF0ZS5lcnJvciAmJiBzdHlsZXMuZXJyb3IsIHtcbiAgICAgIFtgJi4ke25hdGl2ZVNlbGVjdENsYXNzZXMubXVsdGlwbGV9YF06IHN0eWxlcy5tdWx0aXBsZVxuICAgIH1dO1xuICB9XG59KShuYXRpdmVTZWxlY3RTZWxlY3RTdHlsZXMpO1xuZXhwb3J0IGNvbnN0IG5hdGl2ZVNlbGVjdEljb25TdHlsZXMgPSAoe1xuICBvd25lclN0YXRlLFxuICB0aGVtZVxufSkgPT4gX2V4dGVuZHMoe1xuICAvLyBXZSB1c2UgYSBwb3NpdGlvbiBhYnNvbHV0ZSBvdmVyIGEgZmxleGJveCBpbiBvcmRlciB0byBmb3J3YXJkIHRoZSBwb2ludGVyIGV2ZW50c1xuICAvLyB0byB0aGUgaW5wdXQgYW5kIHRvIHN1cHBvcnQgd3JhcHBpbmcgdGFncy4uXG4gIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICByaWdodDogMCxcbiAgdG9wOiAnY2FsYyg1MCUgLSAuNWVtKScsXG4gIC8vIENlbnRlciB2ZXJ0aWNhbGx5LCBoZWlnaHQgaXMgMWVtXG4gIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgLy8gRG9uJ3QgYmxvY2sgcG9pbnRlciBldmVudHMgb24gdGhlIHNlbGVjdCB1bmRlciB0aGUgaWNvbi5cbiAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmFjdGlvbi5hY3RpdmUsXG4gIFtgJi4ke25hdGl2ZVNlbGVjdENsYXNzZXMuZGlzYWJsZWR9YF06IHtcbiAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuYWN0aW9uLmRpc2FibGVkXG4gIH1cbn0sIG93bmVyU3RhdGUub3BlbiAmJiB7XG4gIHRyYW5zZm9ybTogJ3JvdGF0ZSgxODBkZWcpJ1xufSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnZmlsbGVkJyAmJiB7XG4gIHJpZ2h0OiA3XG59LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdvdXRsaW5lZCcgJiYge1xuICByaWdodDogN1xufSk7XG5jb25zdCBOYXRpdmVTZWxlY3RJY29uID0gc3R5bGVkKCdzdmcnLCB7XG4gIG5hbWU6ICdNdWlOYXRpdmVTZWxlY3QnLFxuICBzbG90OiAnSWNvbicsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMuaWNvbiwgb3duZXJTdGF0ZS52YXJpYW50ICYmIHN0eWxlc1tgaWNvbiR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLnZhcmlhbnQpfWBdLCBvd25lclN0YXRlLm9wZW4gJiYgc3R5bGVzLmljb25PcGVuXTtcbiAgfVxufSkobmF0aXZlU2VsZWN0SWNvblN0eWxlcyk7XG5cbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuY29uc3QgTmF0aXZlU2VsZWN0SW5wdXQgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBOYXRpdmVTZWxlY3RJbnB1dChwcm9wcywgcmVmKSB7XG4gIGNvbnN0IHtcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGRpc2FibGVkLFxuICAgICAgZXJyb3IsXG4gICAgICBJY29uQ29tcG9uZW50LFxuICAgICAgaW5wdXRSZWYsXG4gICAgICB2YXJpYW50ID0gJ3N0YW5kYXJkJ1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgZGlzYWJsZWQsXG4gICAgdmFyaWFudCxcbiAgICBlcnJvclxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKFJlYWN0LkZyYWdtZW50LCB7XG4gICAgY2hpbGRyZW46IFsvKiNfX1BVUkVfXyovX2pzeChOYXRpdmVTZWxlY3RTZWxlY3QsIF9leHRlbmRzKHtcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5zZWxlY3QsIGNsYXNzTmFtZSksXG4gICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICByZWY6IGlucHV0UmVmIHx8IHJlZlxuICAgIH0sIG90aGVyKSksIHByb3BzLm11bHRpcGxlID8gbnVsbCA6IC8qI19fUFVSRV9fKi9fanN4KE5hdGl2ZVNlbGVjdEljb24sIHtcbiAgICAgIGFzOiBJY29uQ29tcG9uZW50LFxuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5pY29uXG4gICAgfSldXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBOYXRpdmVTZWxlY3RJbnB1dC5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBUaGUgb3B0aW9uIGVsZW1lbnRzIHRvIHBvcHVsYXRlIHRoZSBzZWxlY3Qgd2l0aC5cbiAgICogQ2FuIGJlIHNvbWUgYDxvcHRpb24+YCBlbGVtZW50cy5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBUaGUgQ1NTIGNsYXNzIG5hbWUgb2YgdGhlIHNlbGVjdCBlbGVtZW50LlxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgc2VsZWN0IGlzIGRpc2FibGVkLlxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYHNlbGVjdCBpbnB1dGAgd2lsbCBpbmRpY2F0ZSBhbiBlcnJvci5cbiAgICovXG4gIGVycm9yOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBpY29uIHRoYXQgZGlzcGxheXMgdGhlIGFycm93LlxuICAgKi9cbiAgSWNvbkNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgKiBVc2UgdGhhdCBwcm9wIHRvIHBhc3MgYSByZWYgdG8gdGhlIG5hdGl2ZSBzZWxlY3QgZWxlbWVudC5cbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIGlucHV0UmVmOiByZWZUeXBlLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgbXVsdGlwbGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogTmFtZSBhdHRyaWJ1dGUgb2YgdGhlIGBzZWxlY3RgIG9yIGhpZGRlbiBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiBhIG1lbnUgaXRlbSBpcyBzZWxlY3RlZC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKiBZb3UgY2FuIHB1bGwgb3V0IHRoZSBuZXcgdmFsdWUgYnkgYWNjZXNzaW5nIGBldmVudC50YXJnZXQudmFsdWVgIChzdHJpbmcpLlxuICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogVGhlIGlucHV0IHZhbHVlLlxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXMub25lT2YoWydzdGFuZGFyZCcsICdvdXRsaW5lZCcsICdmaWxsZWQnXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBOYXRpdmVTZWxlY3RJbnB1dDsiLCJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdFV0aWxpdHlDbGFzc2VzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlTZWxlY3QnLCBzbG90KTtcbn1cbmNvbnN0IHNlbGVjdENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlTZWxlY3QnLCBbJ3Jvb3QnLCAnc2VsZWN0JywgJ211bHRpcGxlJywgJ2ZpbGxlZCcsICdvdXRsaW5lZCcsICdzdGFuZGFyZCcsICdkaXNhYmxlZCcsICdmb2N1c2VkJywgJ2ljb24nLCAnaWNvbk9wZW4nLCAnaWNvbkZpbGxlZCcsICdpY29uT3V0bGluZWQnLCAnaWNvblN0YW5kYXJkJywgJ25hdGl2ZUlucHV0JywgJ2Vycm9yJ10pO1xuZXhwb3J0IGRlZmF1bHQgc2VsZWN0Q2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2Zvcm1hdE11aUVycm9yTWVzc2FnZSBmcm9tIFwiQG11aS91dGlscy9mb3JtYXRNdWlFcnJvck1lc3NhZ2VcIjtcbnZhciBfc3BhbjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImFyaWEtZGVzY3JpYmVkYnlcIiwgXCJhcmlhLWxhYmVsXCIsIFwiYXV0b0ZvY3VzXCIsIFwiYXV0b1dpZHRoXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJkZWZhdWx0T3BlblwiLCBcImRlZmF1bHRWYWx1ZVwiLCBcImRpc2FibGVkXCIsIFwiZGlzcGxheUVtcHR5XCIsIFwiZXJyb3JcIiwgXCJJY29uQ29tcG9uZW50XCIsIFwiaW5wdXRSZWZcIiwgXCJsYWJlbElkXCIsIFwiTWVudVByb3BzXCIsIFwibXVsdGlwbGVcIiwgXCJuYW1lXCIsIFwib25CbHVyXCIsIFwib25DaGFuZ2VcIiwgXCJvbkNsb3NlXCIsIFwib25Gb2N1c1wiLCBcIm9uT3BlblwiLCBcIm9wZW5cIiwgXCJyZWFkT25seVwiLCBcInJlbmRlclZhbHVlXCIsIFwiU2VsZWN0RGlzcGxheVByb3BzXCIsIFwidGFiSW5kZXhcIiwgXCJ0eXBlXCIsIFwidmFsdWVcIiwgXCJ2YXJpYW50XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaXNGcmFnbWVudCB9IGZyb20gJ3JlYWN0LWlzJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCB1c2VJZCBmcm9tICdAbXVpL3V0aWxzL3VzZUlkJztcbmltcG9ydCByZWZUeXBlIGZyb20gJ0BtdWkvdXRpbHMvcmVmVHlwZSc7XG5pbXBvcnQgb3duZXJEb2N1bWVudCBmcm9tICcuLi91dGlscy9vd25lckRvY3VtZW50JztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IE1lbnUgZnJvbSAnLi4vTWVudS9NZW51JztcbmltcG9ydCB7IG5hdGl2ZVNlbGVjdFNlbGVjdFN0eWxlcywgbmF0aXZlU2VsZWN0SWNvblN0eWxlcyB9IGZyb20gJy4uL05hdGl2ZVNlbGVjdC9OYXRpdmVTZWxlY3RJbnB1dCc7XG5pbXBvcnQgeyBpc0ZpbGxlZCB9IGZyb20gJy4uL0lucHV0QmFzZS91dGlscyc7XG5pbXBvcnQgc3R5bGVkLCB7IHNsb3RTaG91bGRGb3J3YXJkUHJvcCB9IGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZUZvcmtSZWYgZnJvbSAnLi4vdXRpbHMvdXNlRm9ya1JlZic7XG5pbXBvcnQgdXNlQ29udHJvbGxlZCBmcm9tICcuLi91dGlscy91c2VDb250cm9sbGVkJztcbmltcG9ydCBzZWxlY3RDbGFzc2VzLCB7IGdldFNlbGVjdFV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnLi9zZWxlY3RDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCBTZWxlY3RTZWxlY3QgPSBzdHlsZWQoJ2RpdicsIHtcbiAgbmFtZTogJ011aVNlbGVjdCcsXG4gIHNsb3Q6ICdTZWxlY3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbXG4gICAgLy8gV2luIHNwZWNpZmljaXR5IG92ZXIgdGhlIGlucHV0IGJhc2VcbiAgICB7XG4gICAgICBbYCYuJHtzZWxlY3RDbGFzc2VzLnNlbGVjdH1gXTogc3R5bGVzLnNlbGVjdFxuICAgIH0sIHtcbiAgICAgIFtgJi4ke3NlbGVjdENsYXNzZXMuc2VsZWN0fWBdOiBzdHlsZXNbb3duZXJTdGF0ZS52YXJpYW50XVxuICAgIH0sIHtcbiAgICAgIFtgJi4ke3NlbGVjdENsYXNzZXMuZXJyb3J9YF06IHN0eWxlcy5lcnJvclxuICAgIH0sIHtcbiAgICAgIFtgJi4ke3NlbGVjdENsYXNzZXMubXVsdGlwbGV9YF06IHN0eWxlcy5tdWx0aXBsZVxuICAgIH1dO1xuICB9XG59KShuYXRpdmVTZWxlY3RTZWxlY3RTdHlsZXMsIHtcbiAgLy8gV2luIHNwZWNpZmljaXR5IG92ZXIgdGhlIGlucHV0IGJhc2VcbiAgW2AmLiR7c2VsZWN0Q2xhc3Nlcy5zZWxlY3R9YF06IHtcbiAgICBoZWlnaHQ6ICdhdXRvJyxcbiAgICAvLyBSZXNldHMgZm9yIG11bHRpcGxlIHNlbGVjdCB3aXRoIGNoaXBzXG4gICAgbWluSGVpZ2h0OiAnMS40Mzc1ZW0nLFxuICAgIC8vIFJlcXVpcmVkIGZvciBzZWxlY3RcXHRleHQtZmllbGQgaGVpZ2h0IGNvbnNpc3RlbmN5XG4gICAgdGV4dE92ZXJmbG93OiAnZWxsaXBzaXMnLFxuICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICAgIG92ZXJmbG93OiAnaGlkZGVuJ1xuICB9XG59KTtcbmNvbnN0IFNlbGVjdEljb24gPSBzdHlsZWQoJ3N2ZycsIHtcbiAgbmFtZTogJ011aVNlbGVjdCcsXG4gIHNsb3Q6ICdJY29uJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5pY29uLCBvd25lclN0YXRlLnZhcmlhbnQgJiYgc3R5bGVzW2BpY29uJHtjYXBpdGFsaXplKG93bmVyU3RhdGUudmFyaWFudCl9YF0sIG93bmVyU3RhdGUub3BlbiAmJiBzdHlsZXMuaWNvbk9wZW5dO1xuICB9XG59KShuYXRpdmVTZWxlY3RJY29uU3R5bGVzKTtcbmNvbnN0IFNlbGVjdE5hdGl2ZUlucHV0ID0gc3R5bGVkKCdpbnB1dCcsIHtcbiAgc2hvdWxkRm9yd2FyZFByb3A6IHByb3AgPT4gc2xvdFNob3VsZEZvcndhcmRQcm9wKHByb3ApICYmIHByb3AgIT09ICdjbGFzc2VzJyxcbiAgbmFtZTogJ011aVNlbGVjdCcsXG4gIHNsb3Q6ICdOYXRpdmVJbnB1dCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLm5hdGl2ZUlucHV0XG59KSh7XG4gIGJvdHRvbTogMCxcbiAgbGVmdDogMCxcbiAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gIG9wYWNpdHk6IDAsXG4gIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgd2lkdGg6ICcxMDAlJyxcbiAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCdcbn0pO1xuZnVuY3Rpb24gYXJlRXF1YWxWYWx1ZXMoYSwgYikge1xuICBpZiAodHlwZW9mIGIgPT09ICdvYmplY3QnICYmIGIgIT09IG51bGwpIHtcbiAgICByZXR1cm4gYSA9PT0gYjtcbiAgfVxuXG4gIC8vIFRoZSB2YWx1ZSBjb3VsZCBiZSBhIG51bWJlciwgdGhlIERPTSB3aWxsIHN0cmluZ2lmeSBpdCBhbnl3YXkuXG4gIHJldHVybiBTdHJpbmcoYSkgPT09IFN0cmluZyhiKTtcbn1cbmZ1bmN0aW9uIGlzRW1wdHkoZGlzcGxheSkge1xuICByZXR1cm4gZGlzcGxheSA9PSBudWxsIHx8IHR5cGVvZiBkaXNwbGF5ID09PSAnc3RyaW5nJyAmJiAhZGlzcGxheS50cmltKCk7XG59XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICB2YXJpYW50LFxuICAgIGRpc2FibGVkLFxuICAgIG11bHRpcGxlLFxuICAgIG9wZW4sXG4gICAgZXJyb3JcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHNlbGVjdDogWydzZWxlY3QnLCB2YXJpYW50LCBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnLCBtdWx0aXBsZSAmJiAnbXVsdGlwbGUnLCBlcnJvciAmJiAnZXJyb3InXSxcbiAgICBpY29uOiBbJ2ljb24nLCBgaWNvbiR7Y2FwaXRhbGl6ZSh2YXJpYW50KX1gLCBvcGVuICYmICdpY29uT3BlbicsIGRpc2FibGVkICYmICdkaXNhYmxlZCddLFxuICAgIG5hdGl2ZUlucHV0OiBbJ25hdGl2ZUlucHV0J11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRTZWxlY3RVdGlsaXR5Q2xhc3NlcywgY2xhc3Nlcyk7XG59O1xuXG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKi9cbmNvbnN0IFNlbGVjdElucHV0ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gU2VsZWN0SW5wdXQocHJvcHMsIHJlZikge1xuICB2YXIgX01lbnVQcm9wcyRzbG90UHJvcHM7XG4gIGNvbnN0IHtcbiAgICAgICdhcmlhLWRlc2NyaWJlZGJ5JzogYXJpYURlc2NyaWJlZGJ5LFxuICAgICAgJ2FyaWEtbGFiZWwnOiBhcmlhTGFiZWwsXG4gICAgICBhdXRvRm9jdXMsXG4gICAgICBhdXRvV2lkdGgsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGRlZmF1bHRPcGVuLFxuICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgZGlzYWJsZWQsXG4gICAgICBkaXNwbGF5RW1wdHksXG4gICAgICBlcnJvciA9IGZhbHNlLFxuICAgICAgSWNvbkNvbXBvbmVudCxcbiAgICAgIGlucHV0UmVmOiBpbnB1dFJlZlByb3AsXG4gICAgICBsYWJlbElkLFxuICAgICAgTWVudVByb3BzID0ge30sXG4gICAgICBtdWx0aXBsZSxcbiAgICAgIG5hbWUsXG4gICAgICBvbkJsdXIsXG4gICAgICBvbkNoYW5nZSxcbiAgICAgIG9uQ2xvc2UsXG4gICAgICBvbkZvY3VzLFxuICAgICAgb25PcGVuLFxuICAgICAgb3Blbjogb3BlblByb3AsXG4gICAgICByZWFkT25seSxcbiAgICAgIHJlbmRlclZhbHVlLFxuICAgICAgU2VsZWN0RGlzcGxheVByb3BzID0ge30sXG4gICAgICB0YWJJbmRleDogdGFiSW5kZXhQcm9wXG4gICAgICAvLyBjYXRjaGluZyBgdHlwZWAgZnJvbSBJbnB1dCB3aGljaCBtYWtlcyBubyBzZW5zZSBmb3IgU2VsZWN0SW5wdXRcbiAgICAgICxcblxuICAgICAgdmFsdWU6IHZhbHVlUHJvcCxcbiAgICAgIHZhcmlhbnQgPSAnc3RhbmRhcmQnXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IFt2YWx1ZSwgc2V0VmFsdWVTdGF0ZV0gPSB1c2VDb250cm9sbGVkKHtcbiAgICBjb250cm9sbGVkOiB2YWx1ZVByb3AsXG4gICAgZGVmYXVsdDogZGVmYXVsdFZhbHVlLFxuICAgIG5hbWU6ICdTZWxlY3QnXG4gIH0pO1xuICBjb25zdCBbb3BlblN0YXRlLCBzZXRPcGVuU3RhdGVdID0gdXNlQ29udHJvbGxlZCh7XG4gICAgY29udHJvbGxlZDogb3BlblByb3AsXG4gICAgZGVmYXVsdDogZGVmYXVsdE9wZW4sXG4gICAgbmFtZTogJ1NlbGVjdCdcbiAgfSk7XG4gIGNvbnN0IGlucHV0UmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBkaXNwbGF5UmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBbZGlzcGxheU5vZGUsIHNldERpc3BsYXlOb2RlXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICBjb25zdCB7XG4gICAgY3VycmVudDogaXNPcGVuQ29udHJvbGxlZFxuICB9ID0gUmVhY3QudXNlUmVmKG9wZW5Qcm9wICE9IG51bGwpO1xuICBjb25zdCBbbWVudU1pbldpZHRoU3RhdGUsIHNldE1lbnVNaW5XaWR0aFN0YXRlXSA9IFJlYWN0LnVzZVN0YXRlKCk7XG4gIGNvbnN0IGhhbmRsZVJlZiA9IHVzZUZvcmtSZWYocmVmLCBpbnB1dFJlZlByb3ApO1xuICBjb25zdCBoYW5kbGVEaXNwbGF5UmVmID0gUmVhY3QudXNlQ2FsbGJhY2sobm9kZSA9PiB7XG4gICAgZGlzcGxheVJlZi5jdXJyZW50ID0gbm9kZTtcbiAgICBpZiAobm9kZSkge1xuICAgICAgc2V0RGlzcGxheU5vZGUobm9kZSk7XG4gICAgfVxuICB9LCBbXSk7XG4gIGNvbnN0IGFuY2hvckVsZW1lbnQgPSBkaXNwbGF5Tm9kZSA9PSBudWxsID8gdm9pZCAwIDogZGlzcGxheU5vZGUucGFyZW50Tm9kZTtcbiAgUmVhY3QudXNlSW1wZXJhdGl2ZUhhbmRsZShoYW5kbGVSZWYsICgpID0+ICh7XG4gICAgZm9jdXM6ICgpID0+IHtcbiAgICAgIGRpc3BsYXlSZWYuY3VycmVudC5mb2N1cygpO1xuICAgIH0sXG4gICAgbm9kZTogaW5wdXRSZWYuY3VycmVudCxcbiAgICB2YWx1ZVxuICB9KSwgW3ZhbHVlXSk7XG5cbiAgLy8gUmVzaXplIG1lbnUgb24gYGRlZmF1bHRPcGVuYCBhdXRvbWF0aWMgdG9nZ2xlLlxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChkZWZhdWx0T3BlbiAmJiBvcGVuU3RhdGUgJiYgZGlzcGxheU5vZGUgJiYgIWlzT3BlbkNvbnRyb2xsZWQpIHtcbiAgICAgIHNldE1lbnVNaW5XaWR0aFN0YXRlKGF1dG9XaWR0aCA/IG51bGwgOiBhbmNob3JFbGVtZW50LmNsaWVudFdpZHRoKTtcbiAgICAgIGRpc3BsYXlSZWYuY3VycmVudC5mb2N1cygpO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtkaXNwbGF5Tm9kZSwgYXV0b1dpZHRoXSk7XG4gIC8vIGBpc09wZW5Db250cm9sbGVkYCBpcyBpZ25vcmVkIGJlY2F1c2UgdGhlIGNvbXBvbmVudCBzaG91bGQgbmV2ZXIgc3dpdGNoIGJldHdlZW4gY29udHJvbGxlZCBhbmQgdW5jb250cm9sbGVkIG1vZGVzLlxuICAvLyBgZGVmYXVsdE9wZW5gIGFuZCBgb3BlblN0YXRlYCBhcmUgaWdub3JlZCB0byBhdm9pZCB1bm5lY2Vzc2FyeSBjYWxsYmFja3MuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGF1dG9Gb2N1cykge1xuICAgICAgZGlzcGxheVJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgfVxuICB9LCBbYXV0b0ZvY3VzXSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFsYWJlbElkKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBsYWJlbCA9IG93bmVyRG9jdW1lbnQoZGlzcGxheVJlZi5jdXJyZW50KS5nZXRFbGVtZW50QnlJZChsYWJlbElkKTtcbiAgICBpZiAobGFiZWwpIHtcbiAgICAgIGNvbnN0IGhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgIGlmIChnZXRTZWxlY3Rpb24oKS5pc0NvbGxhcHNlZCkge1xuICAgICAgICAgIGRpc3BsYXlSZWYuY3VycmVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgbGFiZWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVyKTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGxhYmVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlcik7XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9LCBbbGFiZWxJZF0pO1xuICBjb25zdCB1cGRhdGUgPSAob3BlbiwgZXZlbnQpID0+IHtcbiAgICBpZiAob3Blbikge1xuICAgICAgaWYgKG9uT3Blbikge1xuICAgICAgICBvbk9wZW4oZXZlbnQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAob25DbG9zZSkge1xuICAgICAgb25DbG9zZShldmVudCk7XG4gICAgfVxuICAgIGlmICghaXNPcGVuQ29udHJvbGxlZCkge1xuICAgICAgc2V0TWVudU1pbldpZHRoU3RhdGUoYXV0b1dpZHRoID8gbnVsbCA6IGFuY2hvckVsZW1lbnQuY2xpZW50V2lkdGgpO1xuICAgICAgc2V0T3BlblN0YXRlKG9wZW4pO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgaGFuZGxlTW91c2VEb3duID0gZXZlbnQgPT4ge1xuICAgIC8vIElnbm9yZSBldmVyeXRoaW5nIGJ1dCBsZWZ0LWNsaWNrXG4gICAgaWYgKGV2ZW50LmJ1dHRvbiAhPT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBIaWphY2sgdGhlIGRlZmF1bHQgZm9jdXMgYmVoYXZpb3IuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBkaXNwbGF5UmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICB1cGRhdGUodHJ1ZSwgZXZlbnQpO1xuICB9O1xuICBjb25zdCBoYW5kbGVDbG9zZSA9IGV2ZW50ID0+IHtcbiAgICB1cGRhdGUoZmFsc2UsIGV2ZW50KTtcbiAgfTtcbiAgY29uc3QgY2hpbGRyZW5BcnJheSA9IFJlYWN0LkNoaWxkcmVuLnRvQXJyYXkoY2hpbGRyZW4pO1xuXG4gIC8vIFN1cHBvcnQgYXV0b2ZpbGwuXG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IGV2ZW50ID0+IHtcbiAgICBjb25zdCBjaGlsZCA9IGNoaWxkcmVuQXJyYXkuZmluZChjaGlsZEl0ZW0gPT4gY2hpbGRJdGVtLnByb3BzLnZhbHVlID09PSBldmVudC50YXJnZXQudmFsdWUpO1xuICAgIGlmIChjaGlsZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNldFZhbHVlU3RhdGUoY2hpbGQucHJvcHMudmFsdWUpO1xuICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgb25DaGFuZ2UoZXZlbnQsIGNoaWxkKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGhhbmRsZUl0ZW1DbGljayA9IGNoaWxkID0+IGV2ZW50ID0+IHtcbiAgICBsZXQgbmV3VmFsdWU7XG5cbiAgICAvLyBXZSB1c2UgdGhlIHRhYmluZGV4IGF0dHJpYnV0ZSB0byBzaWduYWwgdGhlIGF2YWlsYWJsZSBvcHRpb25zLlxuICAgIGlmICghZXZlbnQuY3VycmVudFRhcmdldC5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKG11bHRpcGxlKSB7XG4gICAgICBuZXdWYWx1ZSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUuc2xpY2UoKSA6IFtdO1xuICAgICAgY29uc3QgaXRlbUluZGV4ID0gdmFsdWUuaW5kZXhPZihjaGlsZC5wcm9wcy52YWx1ZSk7XG4gICAgICBpZiAoaXRlbUluZGV4ID09PSAtMSkge1xuICAgICAgICBuZXdWYWx1ZS5wdXNoKGNoaWxkLnByb3BzLnZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld1ZhbHVlLnNwbGljZShpdGVtSW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBuZXdWYWx1ZSA9IGNoaWxkLnByb3BzLnZhbHVlO1xuICAgIH1cbiAgICBpZiAoY2hpbGQucHJvcHMub25DbGljaykge1xuICAgICAgY2hpbGQucHJvcHMub25DbGljayhldmVudCk7XG4gICAgfVxuICAgIGlmICh2YWx1ZSAhPT0gbmV3VmFsdWUpIHtcbiAgICAgIHNldFZhbHVlU3RhdGUobmV3VmFsdWUpO1xuICAgICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICAgIC8vIFJlZGVmaW5lIHRhcmdldCB0byBhbGxvdyBuYW1lIGFuZCB2YWx1ZSB0byBiZSByZWFkLlxuICAgICAgICAvLyBUaGlzIGFsbG93cyBzZWFtbGVzcyBpbnRlZ3JhdGlvbiB3aXRoIHRoZSBtb3N0IHBvcHVsYXIgZm9ybSBsaWJyYXJpZXMuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvaXNzdWVzLzEzNDg1I2lzc3VlY29tbWVudC02NzYwNDg0OTJcbiAgICAgICAgLy8gQ2xvbmUgdGhlIGV2ZW50IHRvIG5vdCBvdmVycmlkZSBgdGFyZ2V0YCBvZiB0aGUgb3JpZ2luYWwgZXZlbnQuXG4gICAgICAgIGNvbnN0IG5hdGl2ZUV2ZW50ID0gZXZlbnQubmF0aXZlRXZlbnQgfHwgZXZlbnQ7XG4gICAgICAgIGNvbnN0IGNsb25lZEV2ZW50ID0gbmV3IG5hdGl2ZUV2ZW50LmNvbnN0cnVjdG9yKG5hdGl2ZUV2ZW50LnR5cGUsIG5hdGl2ZUV2ZW50KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNsb25lZEV2ZW50LCAndGFyZ2V0Jywge1xuICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICB2YWx1ZTogbmV3VmFsdWUsXG4gICAgICAgICAgICBuYW1lXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgb25DaGFuZ2UoY2xvbmVkRXZlbnQsIGNoaWxkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFtdWx0aXBsZSkge1xuICAgICAgdXBkYXRlKGZhbHNlLCBldmVudCk7XG4gICAgfVxuICB9O1xuICBjb25zdCBoYW5kbGVLZXlEb3duID0gZXZlbnQgPT4ge1xuICAgIGlmICghcmVhZE9ubHkpIHtcbiAgICAgIGNvbnN0IHZhbGlkS2V5cyA9IFsnICcsICdBcnJvd1VwJywgJ0Fycm93RG93bicsXG4gICAgICAvLyBUaGUgbmF0aXZlIHNlbGVjdCBkb2Vzbid0IHJlc3BvbmQgdG8gZW50ZXIgb24gbWFjT1MsIGJ1dCBpdCdzIHJlY29tbWVuZGVkIGJ5XG4gICAgICAvLyBodHRwczovL3d3dy53My5vcmcvV0FJL0FSSUEvYXBnL3BhdHRlcm5zL2NvbWJvYm94L2V4YW1wbGVzL2NvbWJvYm94LXNlbGVjdC1vbmx5L1xuICAgICAgJ0VudGVyJ107XG4gICAgICBpZiAodmFsaWRLZXlzLmluZGV4T2YoZXZlbnQua2V5KSAhPT0gLTEpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdXBkYXRlKHRydWUsIGV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIGNvbnN0IG9wZW4gPSBkaXNwbGF5Tm9kZSAhPT0gbnVsbCAmJiBvcGVuU3RhdGU7XG4gIGNvbnN0IGhhbmRsZUJsdXIgPSBldmVudCA9PiB7XG4gICAgLy8gaWYgb3BlbiBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb25cbiAgICBpZiAoIW9wZW4gJiYgb25CbHVyKSB7XG4gICAgICAvLyBQcmVhY3Qgc3VwcG9ydCwgdGFyZ2V0IGlzIHJlYWQgb25seSBwcm9wZXJ0eSBvbiBhIG5hdGl2ZSBldmVudC5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShldmVudCwgJ3RhcmdldCcsIHtcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgbmFtZVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIG9uQmx1cihldmVudCk7XG4gICAgfVxuICB9O1xuICBkZWxldGUgb3RoZXJbJ2FyaWEtaW52YWxpZCddO1xuICBsZXQgZGlzcGxheTtcbiAgbGV0IGRpc3BsYXlTaW5nbGU7XG4gIGNvbnN0IGRpc3BsYXlNdWx0aXBsZSA9IFtdO1xuICBsZXQgY29tcHV0ZURpc3BsYXkgPSBmYWxzZTtcbiAgbGV0IGZvdW5kTWF0Y2ggPSBmYWxzZTtcblxuICAvLyBObyBuZWVkIHRvIGRpc3BsYXkgYW55IHZhbHVlIGlmIHRoZSBmaWVsZCBpcyBlbXB0eS5cbiAgaWYgKGlzRmlsbGVkKHtcbiAgICB2YWx1ZVxuICB9KSB8fCBkaXNwbGF5RW1wdHkpIHtcbiAgICBpZiAocmVuZGVyVmFsdWUpIHtcbiAgICAgIGRpc3BsYXkgPSByZW5kZXJWYWx1ZSh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbXB1dGVEaXNwbGF5ID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgY29uc3QgaXRlbXMgPSBjaGlsZHJlbkFycmF5Lm1hcChjaGlsZCA9PiB7XG4gICAgaWYgKCEgLyojX19QVVJFX18qL1JlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoaXNGcmFnbWVudChjaGlsZCkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbXCJNVUk6IFRoZSBTZWxlY3QgY29tcG9uZW50IGRvZXNuJ3QgYWNjZXB0IGEgRnJhZ21lbnQgYXMgYSBjaGlsZC5cIiwgJ0NvbnNpZGVyIHByb3ZpZGluZyBhbiBhcnJheSBpbnN0ZWFkLiddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IHNlbGVjdGVkO1xuICAgIGlmIChtdWx0aXBsZSkge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gYE1VSTogVGhlIFxcYHZhbHVlXFxgIHByb3AgbXVzdCBiZSBhbiBhcnJheSB3aGVuIHVzaW5nIHRoZSBcXGBTZWxlY3RcXGAgY29tcG9uZW50IHdpdGggXFxgbXVsdGlwbGVcXGAuYCA6IF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UoMikpO1xuICAgICAgfVxuICAgICAgc2VsZWN0ZWQgPSB2YWx1ZS5zb21lKHYgPT4gYXJlRXF1YWxWYWx1ZXModiwgY2hpbGQucHJvcHMudmFsdWUpKTtcbiAgICAgIGlmIChzZWxlY3RlZCAmJiBjb21wdXRlRGlzcGxheSkge1xuICAgICAgICBkaXNwbGF5TXVsdGlwbGUucHVzaChjaGlsZC5wcm9wcy5jaGlsZHJlbik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlbGVjdGVkID0gYXJlRXF1YWxWYWx1ZXModmFsdWUsIGNoaWxkLnByb3BzLnZhbHVlKTtcbiAgICAgIGlmIChzZWxlY3RlZCAmJiBjb21wdXRlRGlzcGxheSkge1xuICAgICAgICBkaXNwbGF5U2luZ2xlID0gY2hpbGQucHJvcHMuY2hpbGRyZW47XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgZm91bmRNYXRjaCA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkLCB7XG4gICAgICAnYXJpYS1zZWxlY3RlZCc6IHNlbGVjdGVkID8gJ3RydWUnIDogJ2ZhbHNlJyxcbiAgICAgIG9uQ2xpY2s6IGhhbmRsZUl0ZW1DbGljayhjaGlsZCksXG4gICAgICBvbktleVVwOiBldmVudCA9PiB7XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICcgJykge1xuICAgICAgICAgIC8vIG90aGVyd2lzZSBvdXIgTWVudUl0ZW1zIGRpc3BhdGNoZXMgYSBjbGljayBldmVudFxuICAgICAgICAgIC8vIGl0J3Mgbm90IGJlaGF2aW9yIG9mIHRoZSBuYXRpdmUgPG9wdGlvbj4gYW5kIGNhdXNlc1xuICAgICAgICAgIC8vIHRoZSBzZWxlY3QgdG8gY2xvc2UgaW1tZWRpYXRlbHkgc2luY2Ugd2Ugb3BlbiBvbiBzcGFjZSBrZXlkb3duXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hpbGQucHJvcHMub25LZXlVcCkge1xuICAgICAgICAgIGNoaWxkLnByb3BzLm9uS2V5VXAoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcm9sZTogJ29wdGlvbicsXG4gICAgICBzZWxlY3RlZCxcbiAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAvLyBUaGUgdmFsdWUgaXMgbW9zdCBsaWtlbHkgbm90IGEgdmFsaWQgSFRNTCBhdHRyaWJ1dGUuXG4gICAgICAnZGF0YS12YWx1ZSc6IGNoaWxkLnByb3BzLnZhbHVlIC8vIEluc3RlYWQsIHdlIHByb3ZpZGUgaXQgYXMgYSBkYXRhIGF0dHJpYnV0ZS5cbiAgICB9KTtcbiAgfSk7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICghZm91bmRNYXRjaCAmJiAhbXVsdGlwbGUgJiYgdmFsdWUgIT09ICcnKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGNoaWxkcmVuQXJyYXkubWFwKGNoaWxkID0+IGNoaWxkLnByb3BzLnZhbHVlKTtcbiAgICAgICAgY29uc29sZS53YXJuKFtgTVVJOiBZb3UgaGF2ZSBwcm92aWRlZCBhbiBvdXQtb2YtcmFuZ2UgdmFsdWUgXFxgJHt2YWx1ZX1cXGAgZm9yIHRoZSBzZWxlY3QgJHtuYW1lID8gYChuYW1lPVwiJHtuYW1lfVwiKSBgIDogJyd9Y29tcG9uZW50LmAsIFwiQ29uc2lkZXIgcHJvdmlkaW5nIGEgdmFsdWUgdGhhdCBtYXRjaGVzIG9uZSBvZiB0aGUgYXZhaWxhYmxlIG9wdGlvbnMgb3IgJycuXCIsIGBUaGUgYXZhaWxhYmxlIHZhbHVlcyBhcmUgJHt2YWx1ZXMuZmlsdGVyKHggPT4geCAhPSBudWxsKS5tYXAoeCA9PiBgXFxgJHt4fVxcYGApLmpvaW4oJywgJykgfHwgJ1wiXCInfS5gXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfSwgW2ZvdW5kTWF0Y2gsIGNoaWxkcmVuQXJyYXksIG11bHRpcGxlLCBuYW1lLCB2YWx1ZV0pO1xuICB9XG4gIGlmIChjb21wdXRlRGlzcGxheSkge1xuICAgIGlmIChtdWx0aXBsZSkge1xuICAgICAgaWYgKGRpc3BsYXlNdWx0aXBsZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgZGlzcGxheSA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaXNwbGF5ID0gZGlzcGxheU11bHRpcGxlLnJlZHVjZSgob3V0cHV0LCBjaGlsZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICBvdXRwdXQucHVzaChjaGlsZCk7XG4gICAgICAgICAgaWYgKGluZGV4IDwgZGlzcGxheU11bHRpcGxlLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIG91dHB1dC5wdXNoKCcsICcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICB9LCBbXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpc3BsYXkgPSBkaXNwbGF5U2luZ2xlO1xuICAgIH1cbiAgfVxuXG4gIC8vIEF2b2lkIHBlcmZvcm1pbmcgYSBsYXlvdXQgY29tcHV0YXRpb24gaW4gdGhlIHJlbmRlciBtZXRob2QuXG4gIGxldCBtZW51TWluV2lkdGggPSBtZW51TWluV2lkdGhTdGF0ZTtcbiAgaWYgKCFhdXRvV2lkdGggJiYgaXNPcGVuQ29udHJvbGxlZCAmJiBkaXNwbGF5Tm9kZSkge1xuICAgIG1lbnVNaW5XaWR0aCA9IGFuY2hvckVsZW1lbnQuY2xpZW50V2lkdGg7XG4gIH1cbiAgbGV0IHRhYkluZGV4O1xuICBpZiAodHlwZW9mIHRhYkluZGV4UHJvcCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB0YWJJbmRleCA9IHRhYkluZGV4UHJvcDtcbiAgfSBlbHNlIHtcbiAgICB0YWJJbmRleCA9IGRpc2FibGVkID8gbnVsbCA6IDA7XG4gIH1cbiAgY29uc3QgYnV0dG9uSWQgPSBTZWxlY3REaXNwbGF5UHJvcHMuaWQgfHwgKG5hbWUgPyBgbXVpLWNvbXBvbmVudC1zZWxlY3QtJHtuYW1lfWAgOiB1bmRlZmluZWQpO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgdmFyaWFudCxcbiAgICB2YWx1ZSxcbiAgICBvcGVuLFxuICAgIGVycm9yXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIGNvbnN0IHBhcGVyUHJvcHMgPSBfZXh0ZW5kcyh7fSwgTWVudVByb3BzLlBhcGVyUHJvcHMsIChfTWVudVByb3BzJHNsb3RQcm9wcyA9IE1lbnVQcm9wcy5zbG90UHJvcHMpID09IG51bGwgPyB2b2lkIDAgOiBfTWVudVByb3BzJHNsb3RQcm9wcy5wYXBlcik7XG4gIGNvbnN0IGxpc3Rib3hJZCA9IHVzZUlkKCk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeHMoUmVhY3QuRnJhZ21lbnQsIHtcbiAgICBjaGlsZHJlbjogWy8qI19fUFVSRV9fKi9fanN4KFNlbGVjdFNlbGVjdCwgX2V4dGVuZHMoe1xuICAgICAgcmVmOiBoYW5kbGVEaXNwbGF5UmVmLFxuICAgICAgdGFiSW5kZXg6IHRhYkluZGV4LFxuICAgICAgcm9sZTogXCJjb21ib2JveFwiLFxuICAgICAgXCJhcmlhLWNvbnRyb2xzXCI6IGxpc3Rib3hJZCxcbiAgICAgIFwiYXJpYS1kaXNhYmxlZFwiOiBkaXNhYmxlZCA/ICd0cnVlJyA6IHVuZGVmaW5lZCxcbiAgICAgIFwiYXJpYS1leHBhbmRlZFwiOiBvcGVuID8gJ3RydWUnIDogJ2ZhbHNlJyxcbiAgICAgIFwiYXJpYS1oYXNwb3B1cFwiOiBcImxpc3Rib3hcIixcbiAgICAgIFwiYXJpYS1sYWJlbFwiOiBhcmlhTGFiZWwsXG4gICAgICBcImFyaWEtbGFiZWxsZWRieVwiOiBbbGFiZWxJZCwgYnV0dG9uSWRdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJykgfHwgdW5kZWZpbmVkLFxuICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IGFyaWFEZXNjcmliZWRieSxcbiAgICAgIG9uS2V5RG93bjogaGFuZGxlS2V5RG93bixcbiAgICAgIG9uTW91c2VEb3duOiBkaXNhYmxlZCB8fCByZWFkT25seSA/IG51bGwgOiBoYW5kbGVNb3VzZURvd24sXG4gICAgICBvbkJsdXI6IGhhbmRsZUJsdXIsXG4gICAgICBvbkZvY3VzOiBvbkZvY3VzXG4gICAgfSwgU2VsZWN0RGlzcGxheVByb3BzLCB7XG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgICAgY2xhc3NOYW1lOiBjbHN4KFNlbGVjdERpc3BsYXlQcm9wcy5jbGFzc05hbWUsIGNsYXNzZXMuc2VsZWN0LCBjbGFzc05hbWUpXG4gICAgICAvLyBUaGUgaWQgaXMgcmVxdWlyZWQgZm9yIHByb3BlciBhMTF5XG4gICAgICAsXG4gICAgICBpZDogYnV0dG9uSWQsXG4gICAgICBjaGlsZHJlbjogaXNFbXB0eShkaXNwbGF5KSA/IC8vIG5vdHJhbnNsYXRlIG5lZWRlZCB3aGlsZSBHb29nbGUgVHJhbnNsYXRlIHdpbGwgbm90IGZpeCB6ZXJvLXdpZHRoIHNwYWNlIGlzc3VlXG4gICAgICBfc3BhbiB8fCAoX3NwYW4gPSAvKiNfX1BVUkVfXyovX2pzeChcInNwYW5cIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwibm90cmFuc2xhdGVcIixcbiAgICAgICAgY2hpbGRyZW46IFwiXFx1MjAwQlwiXG4gICAgICB9KSkgOiBkaXNwbGF5XG4gICAgfSkpLCAvKiNfX1BVUkVfXyovX2pzeChTZWxlY3ROYXRpdmVJbnB1dCwgX2V4dGVuZHMoe1xuICAgICAgXCJhcmlhLWludmFsaWRcIjogZXJyb3IsXG4gICAgICB2YWx1ZTogQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5qb2luKCcsJykgOiB2YWx1ZSxcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICByZWY6IGlucHV0UmVmLFxuICAgICAgXCJhcmlhLWhpZGRlblwiOiB0cnVlLFxuICAgICAgb25DaGFuZ2U6IGhhbmRsZUNoYW5nZSxcbiAgICAgIHRhYkluZGV4OiAtMSxcbiAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5uYXRpdmVJbnB1dCxcbiAgICAgIGF1dG9Gb2N1czogYXV0b0ZvY3VzLFxuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZVxuICAgIH0sIG90aGVyKSksIC8qI19fUFVSRV9fKi9fanN4KFNlbGVjdEljb24sIHtcbiAgICAgIGFzOiBJY29uQ29tcG9uZW50LFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLmljb24sXG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlXG4gICAgfSksIC8qI19fUFVSRV9fKi9fanN4KE1lbnUsIF9leHRlbmRzKHtcbiAgICAgIGlkOiBgbWVudS0ke25hbWUgfHwgJyd9YCxcbiAgICAgIGFuY2hvckVsOiBhbmNob3JFbGVtZW50LFxuICAgICAgb3Blbjogb3BlbixcbiAgICAgIG9uQ2xvc2U6IGhhbmRsZUNsb3NlLFxuICAgICAgYW5jaG9yT3JpZ2luOiB7XG4gICAgICAgIHZlcnRpY2FsOiAnYm90dG9tJyxcbiAgICAgICAgaG9yaXpvbnRhbDogJ2NlbnRlcidcbiAgICAgIH0sXG4gICAgICB0cmFuc2Zvcm1PcmlnaW46IHtcbiAgICAgICAgdmVydGljYWw6ICd0b3AnLFxuICAgICAgICBob3Jpem9udGFsOiAnY2VudGVyJ1xuICAgICAgfVxuICAgIH0sIE1lbnVQcm9wcywge1xuICAgICAgTWVudUxpc3RQcm9wczogX2V4dGVuZHMoe1xuICAgICAgICAnYXJpYS1sYWJlbGxlZGJ5JzogbGFiZWxJZCxcbiAgICAgICAgcm9sZTogJ2xpc3Rib3gnLFxuICAgICAgICAnYXJpYS1tdWx0aXNlbGVjdGFibGUnOiBtdWx0aXBsZSA/ICd0cnVlJyA6IHVuZGVmaW5lZCxcbiAgICAgICAgZGlzYWJsZUxpc3RXcmFwOiB0cnVlLFxuICAgICAgICBpZDogbGlzdGJveElkXG4gICAgICB9LCBNZW51UHJvcHMuTWVudUxpc3RQcm9wcyksXG4gICAgICBzbG90UHJvcHM6IF9leHRlbmRzKHt9LCBNZW51UHJvcHMuc2xvdFByb3BzLCB7XG4gICAgICAgIHBhcGVyOiBfZXh0ZW5kcyh7fSwgcGFwZXJQcm9wcywge1xuICAgICAgICAgIHN0eWxlOiBfZXh0ZW5kcyh7XG4gICAgICAgICAgICBtaW5XaWR0aDogbWVudU1pbldpZHRoXG4gICAgICAgICAgfSwgcGFwZXJQcm9wcyAhPSBudWxsID8gcGFwZXJQcm9wcy5zdHlsZSA6IG51bGwpXG4gICAgICAgIH0pXG4gICAgICB9KSxcbiAgICAgIGNoaWxkcmVuOiBpdGVtc1xuICAgIH0pKV1cbiAgfSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFNlbGVjdElucHV0LnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gICdhcmlhLWRlc2NyaWJlZGJ5JzogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gICdhcmlhLWxhYmVsJzogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSB3aWR0aCBvZiB0aGUgcG9wb3ZlciB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgc2V0IGFjY29yZGluZyB0byB0aGUgaXRlbXMgaW5zaWRlIHRoZVxuICAgKiBtZW51LCBvdGhlcndpc2UgaXQgd2lsbCBiZSBhdCBsZWFzdCB0aGUgd2lkdGggb2YgdGhlIHNlbGVjdCBpbnB1dC5cbiAgICovXG4gIGF1dG9XaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgb3B0aW9uIGVsZW1lbnRzIHRvIHBvcHVsYXRlIHRoZSBzZWxlY3Qgd2l0aC5cbiAgICogQ2FuIGJlIHNvbWUgYDxNZW51SXRlbT5gIGVsZW1lbnRzLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFRoZSBDU1MgY2xhc3MgbmFtZSBvZiB0aGUgc2VsZWN0IGVsZW1lbnQuXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgdG9nZ2xlZCBvbiBtb3VudC4gVXNlIHdoZW4gdGhlIGNvbXBvbmVudCBvcGVuIHN0YXRlIGlzIG5vdCBjb250cm9sbGVkLlxuICAgKiBZb3UgY2FuIG9ubHkgdXNlIGl0IHdoZW4gdGhlIGBuYXRpdmVgIHByb3AgaXMgYGZhbHNlYCAoZGVmYXVsdCkuXG4gICAqL1xuICBkZWZhdWx0T3BlbjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZS4gVXNlIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBub3QgY29udHJvbGxlZC5cbiAgICovXG4gIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHNlbGVjdCBpcyBkaXNhYmxlZC5cbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHNlbGVjdGVkIGl0ZW0gaXMgZGlzcGxheWVkIGV2ZW4gaWYgaXRzIHZhbHVlIGlzIGVtcHR5LlxuICAgKi9cbiAgZGlzcGxheUVtcHR5OiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBzZWxlY3QgaW5wdXRgIHdpbGwgaW5kaWNhdGUgYW4gZXJyb3IuXG4gICAqL1xuICBlcnJvcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgaWNvbiB0aGF0IGRpc3BsYXlzIHRoZSBhcnJvdy5cbiAgICovXG4gIEljb25Db21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkLFxuICAvKipcbiAgICogSW1wZXJhdGl2ZSBoYW5kbGUgaW1wbGVtZW50aW5nIGB7IHZhbHVlOiBULCBub2RlOiBIVE1MRWxlbWVudCwgZm9jdXMoKTogdm9pZCB9YFxuICAgKiBFcXVpdmFsZW50IHRvIGByZWZgXG4gICAqL1xuICBpbnB1dFJlZjogcmVmVHlwZSxcbiAgLyoqXG4gICAqIFRoZSBJRCBvZiBhbiBlbGVtZW50IHRoYXQgYWN0cyBhcyBhbiBhZGRpdGlvbmFsIGxhYmVsLiBUaGUgU2VsZWN0IHdpbGxcbiAgICogYmUgbGFiZWxsZWQgYnkgdGhlIGFkZGl0aW9uYWwgbGFiZWwgYW5kIHRoZSBzZWxlY3RlZCB2YWx1ZS5cbiAgICovXG4gIGxhYmVsSWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSBbYE1lbnVgXSgvbWF0ZXJpYWwtdWkvYXBpL21lbnUvKSBlbGVtZW50LlxuICAgKi9cbiAgTWVudVByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogSWYgYHRydWVgLCBgdmFsdWVgIG11c3QgYmUgYW4gYXJyYXkgYW5kIHRoZSBtZW51IHdpbGwgc3VwcG9ydCBtdWx0aXBsZSBzZWxlY3Rpb25zLlxuICAgKi9cbiAgbXVsdGlwbGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogTmFtZSBhdHRyaWJ1dGUgb2YgdGhlIGBzZWxlY3RgIG9yIGhpZGRlbiBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25CbHVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gYSBtZW51IGl0ZW0gaXMgc2VsZWN0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICogWW91IGNhbiBwdWxsIG91dCB0aGUgbmV3IHZhbHVlIGJ5IGFjY2Vzc2luZyBgZXZlbnQudGFyZ2V0LnZhbHVlYCAoYW55KS5cbiAgICogQHBhcmFtIHtvYmplY3R9IFtjaGlsZF0gVGhlIHJlYWN0IGVsZW1lbnQgdGhhdCB3YXMgc2VsZWN0ZWQuXG4gICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBjb21wb25lbnQgcmVxdWVzdHMgdG8gYmUgY2xvc2VkLlxuICAgKiBVc2UgaW4gY29udHJvbGxlZCBtb2RlIChzZWUgb3BlbikuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICovXG4gIG9uQ2xvc2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Gb2N1czogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBjb21wb25lbnQgcmVxdWVzdHMgdG8gYmUgb3BlbmVkLlxuICAgKiBVc2UgaW4gY29udHJvbGxlZCBtb2RlIChzZWUgb3BlbikuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICovXG4gIG9uT3BlbjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgc2hvd24uXG4gICAqL1xuICBvcGVuOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHJlYWRPbmx5OiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFJlbmRlciB0aGUgc2VsZWN0ZWQgdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSB7YW55fSB2YWx1ZSBUaGUgYHZhbHVlYCBwcm92aWRlZCB0byB0aGUgY29tcG9uZW50LlxuICAgKiBAcmV0dXJucyB7UmVhY3ROb2RlfVxuICAgKi9cbiAgcmVuZGVyVmFsdWU6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgY2xpY2thYmxlIGRpdiBlbGVtZW50LlxuICAgKi9cbiAgU2VsZWN0RGlzcGxheVByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgdGFiSW5kZXg6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHR5cGU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiBUaGUgaW5wdXQgdmFsdWUuXG4gICAqL1xuICB2YWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIFRoZSB2YXJpYW50IHRvIHVzZS5cbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcy5vbmVPZihbJ3N0YW5kYXJkJywgJ291dGxpbmVkJywgJ2ZpbGxlZCddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IFNlbGVjdElucHV0OyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNyZWF0ZVN2Z0ljb24gZnJvbSAnLi4vLi4vdXRpbHMvY3JlYXRlU3ZnSWNvbic7XG5cbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVN2Z0ljb24oIC8qI19fUFVSRV9fKi9fanN4KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTcgMTBsNSA1IDUtNXpcIlxufSksICdBcnJvd0Ryb3BEb3duJyk7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYXV0b1dpZHRoXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc2VzXCIsIFwiY2xhc3NOYW1lXCIsIFwiZGVmYXVsdE9wZW5cIiwgXCJkaXNwbGF5RW1wdHlcIiwgXCJJY29uQ29tcG9uZW50XCIsIFwiaWRcIiwgXCJpbnB1dFwiLCBcImlucHV0UHJvcHNcIiwgXCJsYWJlbFwiLCBcImxhYmVsSWRcIiwgXCJNZW51UHJvcHNcIiwgXCJtdWx0aXBsZVwiLCBcIm5hdGl2ZVwiLCBcIm9uQ2xvc2VcIiwgXCJvbk9wZW5cIiwgXCJvcGVuXCIsIFwicmVuZGVyVmFsdWVcIiwgXCJTZWxlY3REaXNwbGF5UHJvcHNcIiwgXCJ2YXJpYW50XCJdLFxuICBfZXhjbHVkZWQyID0gW1wicm9vdFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCBkZWVwbWVyZ2UgZnJvbSAnQG11aS91dGlscy9kZWVwbWVyZ2UnO1xuaW1wb3J0IGdldFJlYWN0RWxlbWVudFJlZiBmcm9tICdAbXVpL3V0aWxzL2dldFJlYWN0RWxlbWVudFJlZic7XG5pbXBvcnQgU2VsZWN0SW5wdXQgZnJvbSAnLi9TZWxlY3RJbnB1dCc7XG5pbXBvcnQgZm9ybUNvbnRyb2xTdGF0ZSBmcm9tICcuLi9Gb3JtQ29udHJvbC9mb3JtQ29udHJvbFN0YXRlJztcbmltcG9ydCB1c2VGb3JtQ29udHJvbCBmcm9tICcuLi9Gb3JtQ29udHJvbC91c2VGb3JtQ29udHJvbCc7XG5pbXBvcnQgQXJyb3dEcm9wRG93bkljb24gZnJvbSAnLi4vaW50ZXJuYWwvc3ZnLWljb25zL0Fycm93RHJvcERvd24nO1xuaW1wb3J0IElucHV0IGZyb20gJy4uL0lucHV0JztcbmltcG9ydCBOYXRpdmVTZWxlY3RJbnB1dCBmcm9tICcuLi9OYXRpdmVTZWxlY3QvTmF0aXZlU2VsZWN0SW5wdXQnO1xuaW1wb3J0IEZpbGxlZElucHV0IGZyb20gJy4uL0ZpbGxlZElucHV0JztcbmltcG9ydCBPdXRsaW5lZElucHV0IGZyb20gJy4uL091dGxpbmVkSW5wdXQnO1xuaW1wb3J0IHsgdXNlRGVmYXVsdFByb3BzIH0gZnJvbSAnLi4vRGVmYXVsdFByb3BzUHJvdmlkZXInO1xuaW1wb3J0IHVzZUZvcmtSZWYgZnJvbSAnLi4vdXRpbHMvdXNlRm9ya1JlZic7XG5pbXBvcnQgc3R5bGVkLCB7IHJvb3RTaG91bGRGb3J3YXJkUHJvcCB9IGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICByZXR1cm4gY2xhc3Nlcztcbn07XG5jb25zdCBzdHlsZWRSb290Q29uZmlnID0ge1xuICBuYW1lOiAnTXVpU2VsZWN0JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMucm9vdCxcbiAgc2hvdWxkRm9yd2FyZFByb3A6IHByb3AgPT4gcm9vdFNob3VsZEZvcndhcmRQcm9wKHByb3ApICYmIHByb3AgIT09ICd2YXJpYW50JyxcbiAgc2xvdDogJ1Jvb3QnXG59O1xuY29uc3QgU3R5bGVkSW5wdXQgPSBzdHlsZWQoSW5wdXQsIHN0eWxlZFJvb3RDb25maWcpKCcnKTtcbmNvbnN0IFN0eWxlZE91dGxpbmVkSW5wdXQgPSBzdHlsZWQoT3V0bGluZWRJbnB1dCwgc3R5bGVkUm9vdENvbmZpZykoJycpO1xuY29uc3QgU3R5bGVkRmlsbGVkSW5wdXQgPSBzdHlsZWQoRmlsbGVkSW5wdXQsIHN0eWxlZFJvb3RDb25maWcpKCcnKTtcbmNvbnN0IFNlbGVjdCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFNlbGVjdChpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VEZWZhdWx0UHJvcHMoe1xuICAgIG5hbWU6ICdNdWlTZWxlY3QnLFxuICAgIHByb3BzOiBpblByb3BzXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBhdXRvV2lkdGggPSBmYWxzZSxcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2xhc3NlczogY2xhc3Nlc1Byb3AgPSB7fSxcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGRlZmF1bHRPcGVuID0gZmFsc2UsXG4gICAgICBkaXNwbGF5RW1wdHkgPSBmYWxzZSxcbiAgICAgIEljb25Db21wb25lbnQgPSBBcnJvd0Ryb3BEb3duSWNvbixcbiAgICAgIGlkLFxuICAgICAgaW5wdXQsXG4gICAgICBpbnB1dFByb3BzLFxuICAgICAgbGFiZWwsXG4gICAgICBsYWJlbElkLFxuICAgICAgTWVudVByb3BzLFxuICAgICAgbXVsdGlwbGUgPSBmYWxzZSxcbiAgICAgIG5hdGl2ZSA9IGZhbHNlLFxuICAgICAgb25DbG9zZSxcbiAgICAgIG9uT3BlbixcbiAgICAgIG9wZW4sXG4gICAgICByZW5kZXJWYWx1ZSxcbiAgICAgIFNlbGVjdERpc3BsYXlQcm9wcyxcbiAgICAgIHZhcmlhbnQ6IHZhcmlhbnRQcm9wID0gJ291dGxpbmVkJ1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBpbnB1dENvbXBvbmVudCA9IG5hdGl2ZSA/IE5hdGl2ZVNlbGVjdElucHV0IDogU2VsZWN0SW5wdXQ7XG4gIGNvbnN0IG11aUZvcm1Db250cm9sID0gdXNlRm9ybUNvbnRyb2woKTtcbiAgY29uc3QgZmNzID0gZm9ybUNvbnRyb2xTdGF0ZSh7XG4gICAgcHJvcHMsXG4gICAgbXVpRm9ybUNvbnRyb2wsXG4gICAgc3RhdGVzOiBbJ3ZhcmlhbnQnLCAnZXJyb3InXVxuICB9KTtcbiAgY29uc3QgdmFyaWFudCA9IGZjcy52YXJpYW50IHx8IHZhcmlhbnRQcm9wO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgdmFyaWFudCxcbiAgICBjbGFzc2VzOiBjbGFzc2VzUHJvcFxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICBjb25zdCByZXN0T2ZDbGFzc2VzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoY2xhc3NlcywgX2V4Y2x1ZGVkMik7XG4gIGNvbnN0IElucHV0Q29tcG9uZW50ID0gaW5wdXQgfHwge1xuICAgIHN0YW5kYXJkOiAvKiNfX1BVUkVfXyovX2pzeChTdHlsZWRJbnB1dCwge1xuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZVxuICAgIH0pLFxuICAgIG91dGxpbmVkOiAvKiNfX1BVUkVfXyovX2pzeChTdHlsZWRPdXRsaW5lZElucHV0LCB7XG4gICAgICBsYWJlbDogbGFiZWwsXG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlXG4gICAgfSksXG4gICAgZmlsbGVkOiAvKiNfX1BVUkVfXyovX2pzeChTdHlsZWRGaWxsZWRJbnB1dCwge1xuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZVxuICAgIH0pXG4gIH1bdmFyaWFudF07XG4gIGNvbnN0IGlucHV0Q29tcG9uZW50UmVmID0gdXNlRm9ya1JlZihyZWYsIGdldFJlYWN0RWxlbWVudFJlZihJbnB1dENvbXBvbmVudCkpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goUmVhY3QuRnJhZ21lbnQsIHtcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChJbnB1dENvbXBvbmVudCwgX2V4dGVuZHMoe1xuICAgICAgLy8gTW9zdCBvZiB0aGUgbG9naWMgaXMgaW1wbGVtZW50ZWQgaW4gYFNlbGVjdElucHV0YC5cbiAgICAgIC8vIFRoZSBgU2VsZWN0YCBjb21wb25lbnQgaXMgYSBzaW1wbGUgQVBJIHdyYXBwZXIgdG8gZXhwb3NlIHNvbWV0aGluZyBiZXR0ZXIgdG8gcGxheSB3aXRoLlxuICAgICAgaW5wdXRDb21wb25lbnQsXG4gICAgICBpbnB1dFByb3BzOiBfZXh0ZW5kcyh7XG4gICAgICAgIGNoaWxkcmVuLFxuICAgICAgICBlcnJvcjogZmNzLmVycm9yLFxuICAgICAgICBJY29uQ29tcG9uZW50LFxuICAgICAgICB2YXJpYW50LFxuICAgICAgICB0eXBlOiB1bmRlZmluZWQsXG4gICAgICAgIC8vIFdlIHJlbmRlciBhIHNlbGVjdC4gV2UgY2FuIGlnbm9yZSB0aGUgdHlwZSBwcm92aWRlZCBieSB0aGUgYElucHV0YC5cbiAgICAgICAgbXVsdGlwbGVcbiAgICAgIH0sIG5hdGl2ZSA/IHtcbiAgICAgICAgaWRcbiAgICAgIH0gOiB7XG4gICAgICAgIGF1dG9XaWR0aCxcbiAgICAgICAgZGVmYXVsdE9wZW4sXG4gICAgICAgIGRpc3BsYXlFbXB0eSxcbiAgICAgICAgbGFiZWxJZCxcbiAgICAgICAgTWVudVByb3BzLFxuICAgICAgICBvbkNsb3NlLFxuICAgICAgICBvbk9wZW4sXG4gICAgICAgIG9wZW4sXG4gICAgICAgIHJlbmRlclZhbHVlLFxuICAgICAgICBTZWxlY3REaXNwbGF5UHJvcHM6IF9leHRlbmRzKHtcbiAgICAgICAgICBpZFxuICAgICAgICB9LCBTZWxlY3REaXNwbGF5UHJvcHMpXG4gICAgICB9LCBpbnB1dFByb3BzLCB7XG4gICAgICAgIGNsYXNzZXM6IGlucHV0UHJvcHMgPyBkZWVwbWVyZ2UocmVzdE9mQ2xhc3NlcywgaW5wdXRQcm9wcy5jbGFzc2VzKSA6IHJlc3RPZkNsYXNzZXNcbiAgICAgIH0sIGlucHV0ID8gaW5wdXQucHJvcHMuaW5wdXRQcm9wcyA6IHt9KVxuICAgIH0sIChtdWx0aXBsZSAmJiBuYXRpdmUgfHwgZGlzcGxheUVtcHR5KSAmJiB2YXJpYW50ID09PSAnb3V0bGluZWQnID8ge1xuICAgICAgbm90Y2hlZDogdHJ1ZVxuICAgIH0gOiB7fSwge1xuICAgICAgcmVmOiBpbnB1dENvbXBvbmVudFJlZixcbiAgICAgIGNsYXNzTmFtZTogY2xzeChJbnB1dENvbXBvbmVudC5wcm9wcy5jbGFzc05hbWUsIGNsYXNzTmFtZSwgY2xhc3Nlcy5yb290KVxuICAgIH0sICFpbnB1dCAmJiB7XG4gICAgICB2YXJpYW50XG4gICAgfSwgb3RoZXIpKVxuICB9KTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gU2VsZWN0LnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgV2FybmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgLy8g4pSCIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4g4pSCXG4gIC8vIOKUgiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIOKUglxuICAvLyDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHdpZHRoIG9mIHRoZSBwb3BvdmVyIHdpbGwgYXV0b21hdGljYWxseSBiZSBzZXQgYWNjb3JkaW5nIHRvIHRoZSBpdGVtcyBpbnNpZGUgdGhlXG4gICAqIG1lbnUsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGF0IGxlYXN0IHRoZSB3aWR0aCBvZiB0aGUgc2VsZWN0IGlucHV0LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgYXV0b1dpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBvcHRpb24gZWxlbWVudHMgdG8gcG9wdWxhdGUgdGhlIHNlbGVjdCB3aXRoLlxuICAgKiBDYW4gYmUgc29tZSBgTWVudUl0ZW1gIHdoZW4gYG5hdGl2ZWAgaXMgZmFsc2UgYW5kIGBvcHRpb25gIHdoZW4gYG5hdGl2ZWAgaXMgdHJ1ZS5cbiAgICpcbiAgICog4pqg77iPVGhlIGBNZW51SXRlbWAgZWxlbWVudHMgKiptdXN0KiogYmUgZGlyZWN0IGRlc2NlbmRhbnRzIHdoZW4gYG5hdGl2ZWAgaXMgZmFsc2UuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIGluaXRpYWxseSBvcGVuLiBVc2Ugd2hlbiB0aGUgY29tcG9uZW50IG9wZW4gc3RhdGUgaXMgbm90IGNvbnRyb2xsZWQgKGkuZS4gdGhlIGBvcGVuYCBwcm9wIGlzIG5vdCBkZWZpbmVkKS5cbiAgICogWW91IGNhbiBvbmx5IHVzZSBpdCB3aGVuIHRoZSBgbmF0aXZlYCBwcm9wIGlzIGBmYWxzZWAgKGRlZmF1bHQpLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGVmYXVsdE9wZW46IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUuIFVzZSB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IGNvbnRyb2xsZWQuXG4gICAqL1xuICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGEgdmFsdWUgaXMgZGlzcGxheWVkIGV2ZW4gaWYgbm8gaXRlbXMgYXJlIHNlbGVjdGVkLlxuICAgKlxuICAgKiBJbiBvcmRlciB0byBkaXNwbGF5IGEgbWVhbmluZ2Z1bCB2YWx1ZSwgYSBmdW5jdGlvbiBjYW4gYmUgcGFzc2VkIHRvIHRoZSBgcmVuZGVyVmFsdWVgIHByb3Agd2hpY2hcbiAgICogcmV0dXJucyB0aGUgdmFsdWUgdG8gYmUgZGlzcGxheWVkIHdoZW4gbm8gaXRlbXMgYXJlIHNlbGVjdGVkLlxuICAgKlxuICAgKiDimqDvuI8gV2hlbiB1c2luZyB0aGlzIHByb3AsIG1ha2Ugc3VyZSB0aGUgbGFiZWwgZG9lc24ndCBvdmVybGFwIHdpdGggdGhlIGVtcHR5IGRpc3BsYXllZCB2YWx1ZS5cbiAgICogVGhlIGxhYmVsIHNob3VsZCBlaXRoZXIgYmUgaGlkZGVuIG9yIGZvcmNlZCB0byBhIHNocnVuayBzdGF0ZS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc3BsYXlFbXB0eTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgaWNvbiB0aGF0IGRpc3BsYXlzIHRoZSBhcnJvdy5cbiAgICogQGRlZmF1bHQgQXJyb3dEcm9wRG93bkljb25cbiAgICovXG4gIEljb25Db21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIFRoZSBgaWRgIG9mIHRoZSB3cmFwcGVyIGVsZW1lbnQgb3IgdGhlIGBzZWxlY3RgIGVsZW1lbnQgd2hlbiBgbmF0aXZlYC5cbiAgICovXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQW4gYElucHV0YCBlbGVtZW50OyBkb2VzIG5vdCBoYXZlIHRvIGJlIGEgbWF0ZXJpYWwtdWkgc3BlY2lmaWMgYElucHV0YC5cbiAgICovXG4gIGlucHV0OiBQcm9wVHlwZXMuZWxlbWVudCxcbiAgLyoqXG4gICAqIFtBdHRyaWJ1dGVzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjQXR0cmlidXRlcykgYXBwbGllZCB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBXaGVuIGBuYXRpdmVgIGlzIGB0cnVlYCwgdGhlIGF0dHJpYnV0ZXMgYXJlIGFwcGxpZWQgb24gdGhlIGBzZWxlY3RgIGVsZW1lbnQuXG4gICAqL1xuICBpbnB1dFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogU2VlIFtPdXRsaW5lZElucHV0I2xhYmVsXSgvbWF0ZXJpYWwtdWkvYXBpL291dGxpbmVkLWlucHV0LyNwcm9wcylcbiAgICovXG4gIGxhYmVsOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIFRoZSBJRCBvZiBhbiBlbGVtZW50IHRoYXQgYWN0cyBhcyBhbiBhZGRpdGlvbmFsIGxhYmVsLiBUaGUgU2VsZWN0IHdpbGxcbiAgICogYmUgbGFiZWxsZWQgYnkgdGhlIGFkZGl0aW9uYWwgbGFiZWwgYW5kIHRoZSBzZWxlY3RlZCB2YWx1ZS5cbiAgICovXG4gIGxhYmVsSWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSBbYE1lbnVgXSgvbWF0ZXJpYWwtdWkvYXBpL21lbnUvKSBlbGVtZW50LlxuICAgKi9cbiAgTWVudVByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogSWYgYHRydWVgLCBgdmFsdWVgIG11c3QgYmUgYW4gYXJyYXkgYW5kIHRoZSBtZW51IHdpbGwgc3VwcG9ydCBtdWx0aXBsZSBzZWxlY3Rpb25zLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgbXVsdGlwbGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IHVzZXMgYSBuYXRpdmUgYHNlbGVjdGAgZWxlbWVudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIG5hdGl2ZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIGEgbWVudSBpdGVtIGlzIHNlbGVjdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1NlbGVjdENoYW5nZUV2ZW50PFZhbHVlPn0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIFlvdSBjYW4gcHVsbCBvdXQgdGhlIG5ldyB2YWx1ZSBieSBhY2Nlc3NpbmcgYGV2ZW50LnRhcmdldC52YWx1ZWAgKGFueSkuXG4gICAqICoqV2FybmluZyoqOiBUaGlzIGlzIGEgZ2VuZXJpYyBldmVudCwgbm90IGEgY2hhbmdlIGV2ZW50LCB1bmxlc3MgdGhlIGNoYW5nZSBldmVudCBpcyBjYXVzZWQgYnkgYnJvd3NlciBhdXRvZmlsbC5cbiAgICogQHBhcmFtIHtvYmplY3R9IFtjaGlsZF0gVGhlIHJlYWN0IGVsZW1lbnQgdGhhdCB3YXMgc2VsZWN0ZWQgd2hlbiBgbmF0aXZlYCBpcyBgZmFsc2VgIChkZWZhdWx0KS5cbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIGNvbXBvbmVudCByZXF1ZXN0cyB0byBiZSBjbG9zZWQuXG4gICAqIFVzZSBpdCBpbiBlaXRoZXIgY29udHJvbGxlZCAoc2VlIHRoZSBgb3BlbmAgcHJvcCksIG9yIHVuY29udHJvbGxlZCBtb2RlICh0byBkZXRlY3Qgd2hlbiB0aGUgU2VsZWN0IGNvbGxhcHNlcykuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICovXG4gIG9uQ2xvc2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgY29tcG9uZW50IHJlcXVlc3RzIHRvIGJlIG9wZW5lZC5cbiAgICogVXNlIGl0IGluIGVpdGhlciBjb250cm9sbGVkIChzZWUgdGhlIGBvcGVuYCBwcm9wKSwgb3IgdW5jb250cm9sbGVkIG1vZGUgKHRvIGRldGVjdCB3aGVuIHRoZSBTZWxlY3QgZXhwYW5kcykuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICovXG4gIG9uT3BlbjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgc2hvd24uXG4gICAqIFlvdSBjYW4gb25seSB1c2UgaXQgd2hlbiB0aGUgYG5hdGl2ZWAgcHJvcCBpcyBgZmFsc2VgIChkZWZhdWx0KS5cbiAgICovXG4gIG9wZW46IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogUmVuZGVyIHRoZSBzZWxlY3RlZCB2YWx1ZS5cbiAgICogWW91IGNhbiBvbmx5IHVzZSBpdCB3aGVuIHRoZSBgbmF0aXZlYCBwcm9wIGlzIGBmYWxzZWAgKGRlZmF1bHQpLlxuICAgKlxuICAgKiBAcGFyYW0ge2FueX0gdmFsdWUgVGhlIGB2YWx1ZWAgcHJvdmlkZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICogQHJldHVybnMge1JlYWN0Tm9kZX1cbiAgICovXG4gIHJlbmRlclZhbHVlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIGNsaWNrYWJsZSBkaXYgZWxlbWVudC5cbiAgICovXG4gIFNlbGVjdERpc3BsYXlQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFRoZSBgaW5wdXRgIHZhbHVlLiBQcm92aWRpbmcgYW4gZW1wdHkgc3RyaW5nIHdpbGwgc2VsZWN0IG5vIG9wdGlvbnMuXG4gICAqIFNldCB0byBhbiBlbXB0eSBzdHJpbmcgYCcnYCBpZiB5b3UgZG9uJ3Qgd2FudCBhbnkgb2YgdGhlIGF2YWlsYWJsZSBvcHRpb25zIHRvIGJlIHNlbGVjdGVkLlxuICAgKlxuICAgKiBJZiB0aGUgdmFsdWUgaXMgYW4gb2JqZWN0IGl0IG11c3QgaGF2ZSByZWZlcmVuY2UgZXF1YWxpdHkgd2l0aCB0aGUgb3B0aW9uIGluIG9yZGVyIHRvIGJlIHNlbGVjdGVkLlxuICAgKiBJZiB0aGUgdmFsdWUgaXMgbm90IGFuIG9iamVjdCwgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBtdXN0IG1hdGNoIHdpdGggdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgb3B0aW9uIGluIG9yZGVyIHRvIGJlIHNlbGVjdGVkLlxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJyddKSwgUHJvcFR5cGVzLmFueV0pLFxuICAvKipcbiAgICogVGhlIHZhcmlhbnQgdG8gdXNlLlxuICAgKiBAZGVmYXVsdCAnb3V0bGluZWQnXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXMub25lT2YoWydmaWxsZWQnLCAnb3V0bGluZWQnLCAnc3RhbmRhcmQnXSlcbn0gOiB2b2lkIDA7XG5TZWxlY3QubXVpTmFtZSA9ICdTZWxlY3QnO1xuZXhwb3J0IGRlZmF1bHQgU2VsZWN0OyIsImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0VGV4dEZpZWxkVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlUZXh0RmllbGQnLCBzbG90KTtcbn1cbmNvbnN0IHRleHRGaWVsZENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlUZXh0RmllbGQnLCBbJ3Jvb3QnXSk7XG5leHBvcnQgZGVmYXVsdCB0ZXh0RmllbGRDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImF1dG9Db21wbGV0ZVwiLCBcImF1dG9Gb2N1c1wiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29sb3JcIiwgXCJkZWZhdWx0VmFsdWVcIiwgXCJkaXNhYmxlZFwiLCBcImVycm9yXCIsIFwiRm9ybUhlbHBlclRleHRQcm9wc1wiLCBcImZ1bGxXaWR0aFwiLCBcImhlbHBlclRleHRcIiwgXCJpZFwiLCBcIklucHV0TGFiZWxQcm9wc1wiLCBcImlucHV0UHJvcHNcIiwgXCJJbnB1dFByb3BzXCIsIFwiaW5wdXRSZWZcIiwgXCJsYWJlbFwiLCBcIm1heFJvd3NcIiwgXCJtaW5Sb3dzXCIsIFwibXVsdGlsaW5lXCIsIFwibmFtZVwiLCBcIm9uQmx1clwiLCBcIm9uQ2hhbmdlXCIsIFwib25Gb2N1c1wiLCBcInBsYWNlaG9sZGVyXCIsIFwicmVxdWlyZWRcIiwgXCJyb3dzXCIsIFwic2VsZWN0XCIsIFwiU2VsZWN0UHJvcHNcIiwgXCJ0eXBlXCIsIFwidmFsdWVcIiwgXCJ2YXJpYW50XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHVzZUlkIGZyb20gJ0BtdWkvdXRpbHMvdXNlSWQnO1xuaW1wb3J0IHJlZlR5cGUgZnJvbSAnQG11aS91dGlscy9yZWZUeXBlJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyB1c2VEZWZhdWx0UHJvcHMgfSBmcm9tICcuLi9EZWZhdWx0UHJvcHNQcm92aWRlcic7XG5pbXBvcnQgSW5wdXQgZnJvbSAnLi4vSW5wdXQnO1xuaW1wb3J0IEZpbGxlZElucHV0IGZyb20gJy4uL0ZpbGxlZElucHV0JztcbmltcG9ydCBPdXRsaW5lZElucHV0IGZyb20gJy4uL091dGxpbmVkSW5wdXQnO1xuaW1wb3J0IElucHV0TGFiZWwgZnJvbSAnLi4vSW5wdXRMYWJlbCc7XG5pbXBvcnQgRm9ybUNvbnRyb2wgZnJvbSAnLi4vRm9ybUNvbnRyb2wnO1xuaW1wb3J0IEZvcm1IZWxwZXJUZXh0IGZyb20gJy4uL0Zvcm1IZWxwZXJUZXh0JztcbmltcG9ydCBTZWxlY3QgZnJvbSAnLi4vU2VsZWN0JztcbmltcG9ydCB7IGdldFRleHRGaWVsZFV0aWxpdHlDbGFzcyB9IGZyb20gJy4vdGV4dEZpZWxkQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdmFyaWFudENvbXBvbmVudCA9IHtcbiAgc3RhbmRhcmQ6IElucHV0LFxuICBmaWxsZWQ6IEZpbGxlZElucHV0LFxuICBvdXRsaW5lZDogT3V0bGluZWRJbnB1dFxufTtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldFRleHRGaWVsZFV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuY29uc3QgVGV4dEZpZWxkUm9vdCA9IHN0eWxlZChGb3JtQ29udHJvbCwge1xuICBuYW1lOiAnTXVpVGV4dEZpZWxkJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5yb290XG59KSh7fSk7XG5cbi8qKlxuICogVGhlIGBUZXh0RmllbGRgIGlzIGEgY29udmVuaWVuY2Ugd3JhcHBlciBmb3IgdGhlIG1vc3QgY29tbW9uIGNhc2VzICg4MCUpLlxuICogSXQgY2Fubm90IGJlIGFsbCB0aGluZ3MgdG8gYWxsIHBlb3BsZSwgb3RoZXJ3aXNlIHRoZSBBUEkgd291bGQgZ3JvdyBvdXQgb2YgY29udHJvbC5cbiAqXG4gKiAjIyBBZHZhbmNlZCBDb25maWd1cmF0aW9uXG4gKlxuICogSXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGF0IHRoZSB0ZXh0IGZpZWxkIGlzIGEgc2ltcGxlIGFic3RyYWN0aW9uXG4gKiBvbiB0b3Agb2YgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOlxuICpcbiAqIC0gW0Zvcm1Db250cm9sXSgvbWF0ZXJpYWwtdWkvYXBpL2Zvcm0tY29udHJvbC8pXG4gKiAtIFtJbnB1dExhYmVsXSgvbWF0ZXJpYWwtdWkvYXBpL2lucHV0LWxhYmVsLylcbiAqIC0gW0ZpbGxlZElucHV0XSgvbWF0ZXJpYWwtdWkvYXBpL2ZpbGxlZC1pbnB1dC8pXG4gKiAtIFtPdXRsaW5lZElucHV0XSgvbWF0ZXJpYWwtdWkvYXBpL291dGxpbmVkLWlucHV0LylcbiAqIC0gW0lucHV0XSgvbWF0ZXJpYWwtdWkvYXBpL2lucHV0LylcbiAqIC0gW0Zvcm1IZWxwZXJUZXh0XSgvbWF0ZXJpYWwtdWkvYXBpL2Zvcm0taGVscGVyLXRleHQvKVxuICpcbiAqIElmIHlvdSB3aXNoIHRvIGFsdGVyIHRoZSBwcm9wcyBhcHBsaWVkIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQsIHlvdSBjYW4gZG8gc28gYXMgZm9sbG93czpcbiAqXG4gKiBgYGBqc3hcbiAqIGNvbnN0IGlucHV0UHJvcHMgPSB7XG4gKiAgIHN0ZXA6IDMwMCxcbiAqIH07XG4gKlxuICogcmV0dXJuIDxUZXh0RmllbGQgaWQ9XCJ0aW1lXCIgdHlwZT1cInRpbWVcIiBpbnB1dFByb3BzPXtpbnB1dFByb3BzfSAvPjtcbiAqIGBgYFxuICpcbiAqIEZvciBhZHZhbmNlZCBjYXNlcywgcGxlYXNlIGxvb2sgYXQgdGhlIHNvdXJjZSBvZiBUZXh0RmllbGQgYnkgY2xpY2tpbmcgb24gdGhlXG4gKiBcIkVkaXQgdGhpcyBwYWdlXCIgYnV0dG9uIGFib3ZlLiBDb25zaWRlciBlaXRoZXI6XG4gKlxuICogLSB1c2luZyB0aGUgdXBwZXIgY2FzZSBwcm9wcyBmb3IgcGFzc2luZyB2YWx1ZXMgZGlyZWN0bHkgdG8gdGhlIGNvbXBvbmVudHNcbiAqIC0gdXNpbmcgdGhlIHVuZGVybHlpbmcgY29tcG9uZW50cyBkaXJlY3RseSBhcyBzaG93biBpbiB0aGUgZGVtb3NcbiAqL1xuY29uc3QgVGV4dEZpZWxkID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gVGV4dEZpZWxkKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZURlZmF1bHRQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aVRleHRGaWVsZCdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGF1dG9Db21wbGV0ZSxcbiAgICAgIGF1dG9Gb2N1cyA9IGZhbHNlLFxuICAgICAgY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb2xvciA9ICdwcmltYXJ5JyxcbiAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgIGRpc2FibGVkID0gZmFsc2UsXG4gICAgICBlcnJvciA9IGZhbHNlLFxuICAgICAgRm9ybUhlbHBlclRleHRQcm9wcyxcbiAgICAgIGZ1bGxXaWR0aCA9IGZhbHNlLFxuICAgICAgaGVscGVyVGV4dCxcbiAgICAgIGlkOiBpZE92ZXJyaWRlLFxuICAgICAgSW5wdXRMYWJlbFByb3BzLFxuICAgICAgaW5wdXRQcm9wcyxcbiAgICAgIElucHV0UHJvcHMsXG4gICAgICBpbnB1dFJlZixcbiAgICAgIGxhYmVsLFxuICAgICAgbWF4Um93cyxcbiAgICAgIG1pblJvd3MsXG4gICAgICBtdWx0aWxpbmUgPSBmYWxzZSxcbiAgICAgIG5hbWUsXG4gICAgICBvbkJsdXIsXG4gICAgICBvbkNoYW5nZSxcbiAgICAgIG9uRm9jdXMsXG4gICAgICBwbGFjZWhvbGRlcixcbiAgICAgIHJlcXVpcmVkID0gZmFsc2UsXG4gICAgICByb3dzLFxuICAgICAgc2VsZWN0ID0gZmFsc2UsXG4gICAgICBTZWxlY3RQcm9wcyxcbiAgICAgIHR5cGUsXG4gICAgICB2YWx1ZSxcbiAgICAgIHZhcmlhbnQgPSAnb3V0bGluZWQnXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBhdXRvRm9jdXMsXG4gICAgY29sb3IsXG4gICAgZGlzYWJsZWQsXG4gICAgZXJyb3IsXG4gICAgZnVsbFdpZHRoLFxuICAgIG11bHRpbGluZSxcbiAgICByZXF1aXJlZCxcbiAgICBzZWxlY3QsXG4gICAgdmFyaWFudFxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmIChzZWxlY3QgJiYgIWNoaWxkcmVuKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdNVUk6IGBjaGlsZHJlbmAgbXVzdCBiZSBwYXNzZWQgd2hlbiB1c2luZyB0aGUgYFRleHRGaWVsZGAgY29tcG9uZW50IHdpdGggYHNlbGVjdGAuJyk7XG4gICAgfVxuICB9XG4gIGNvbnN0IElucHV0TW9yZSA9IHt9O1xuICBpZiAodmFyaWFudCA9PT0gJ291dGxpbmVkJykge1xuICAgIGlmIChJbnB1dExhYmVsUHJvcHMgJiYgdHlwZW9mIElucHV0TGFiZWxQcm9wcy5zaHJpbmsgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBJbnB1dE1vcmUubm90Y2hlZCA9IElucHV0TGFiZWxQcm9wcy5zaHJpbms7XG4gICAgfVxuICAgIElucHV0TW9yZS5sYWJlbCA9IGxhYmVsO1xuICB9XG4gIGlmIChzZWxlY3QpIHtcbiAgICAvLyB1bnNldCBkZWZhdWx0cyBmcm9tIHRleHRib3ggaW5wdXRzXG4gICAgaWYgKCFTZWxlY3RQcm9wcyB8fCAhU2VsZWN0UHJvcHMubmF0aXZlKSB7XG4gICAgICBJbnB1dE1vcmUuaWQgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIElucHV0TW9yZVsnYXJpYS1kZXNjcmliZWRieSddID0gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IGlkID0gdXNlSWQoaWRPdmVycmlkZSk7XG4gIGNvbnN0IGhlbHBlclRleHRJZCA9IGhlbHBlclRleHQgJiYgaWQgPyBgJHtpZH0taGVscGVyLXRleHRgIDogdW5kZWZpbmVkO1xuICBjb25zdCBpbnB1dExhYmVsSWQgPSBsYWJlbCAmJiBpZCA/IGAke2lkfS1sYWJlbGAgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IElucHV0Q29tcG9uZW50ID0gdmFyaWFudENvbXBvbmVudFt2YXJpYW50XTtcbiAgY29uc3QgSW5wdXRFbGVtZW50ID0gLyojX19QVVJFX18qL19qc3goSW5wdXRDb21wb25lbnQsIF9leHRlbmRzKHtcbiAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogaGVscGVyVGV4dElkLFxuICAgIGF1dG9Db21wbGV0ZTogYXV0b0NvbXBsZXRlLFxuICAgIGF1dG9Gb2N1czogYXV0b0ZvY3VzLFxuICAgIGRlZmF1bHRWYWx1ZTogZGVmYXVsdFZhbHVlLFxuICAgIGZ1bGxXaWR0aDogZnVsbFdpZHRoLFxuICAgIG11bHRpbGluZTogbXVsdGlsaW5lLFxuICAgIG5hbWU6IG5hbWUsXG4gICAgcm93czogcm93cyxcbiAgICBtYXhSb3dzOiBtYXhSb3dzLFxuICAgIG1pblJvd3M6IG1pblJvd3MsXG4gICAgdHlwZTogdHlwZSxcbiAgICB2YWx1ZTogdmFsdWUsXG4gICAgaWQ6IGlkLFxuICAgIGlucHV0UmVmOiBpbnB1dFJlZixcbiAgICBvbkJsdXI6IG9uQmx1cixcbiAgICBvbkNoYW5nZTogb25DaGFuZ2UsXG4gICAgb25Gb2N1czogb25Gb2N1cyxcbiAgICBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXIsXG4gICAgaW5wdXRQcm9wczogaW5wdXRQcm9wc1xuICB9LCBJbnB1dE1vcmUsIElucHV0UHJvcHMpKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4cyhUZXh0RmllbGRSb290LCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgZXJyb3I6IGVycm9yLFxuICAgIGZ1bGxXaWR0aDogZnVsbFdpZHRoLFxuICAgIHJlZjogcmVmLFxuICAgIHJlcXVpcmVkOiByZXF1aXJlZCxcbiAgICBjb2xvcjogY29sb3IsXG4gICAgdmFyaWFudDogdmFyaWFudCxcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlXG4gIH0sIG90aGVyLCB7XG4gICAgY2hpbGRyZW46IFtsYWJlbCAhPSBudWxsICYmIGxhYmVsICE9PSAnJyAmJiAvKiNfX1BVUkVfXyovX2pzeChJbnB1dExhYmVsLCBfZXh0ZW5kcyh7XG4gICAgICBodG1sRm9yOiBpZCxcbiAgICAgIGlkOiBpbnB1dExhYmVsSWRcbiAgICB9LCBJbnB1dExhYmVsUHJvcHMsIHtcbiAgICAgIGNoaWxkcmVuOiBsYWJlbFxuICAgIH0pKSwgc2VsZWN0ID8gLyojX19QVVJFX18qL19qc3goU2VsZWN0LCBfZXh0ZW5kcyh7XG4gICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogaGVscGVyVGV4dElkLFxuICAgICAgaWQ6IGlkLFxuICAgICAgbGFiZWxJZDogaW5wdXRMYWJlbElkLFxuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgaW5wdXQ6IElucHV0RWxlbWVudFxuICAgIH0sIFNlbGVjdFByb3BzLCB7XG4gICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICB9KSkgOiBJbnB1dEVsZW1lbnQsIGhlbHBlclRleHQgJiYgLyojX19QVVJFX18qL19qc3goRm9ybUhlbHBlclRleHQsIF9leHRlbmRzKHtcbiAgICAgIGlkOiBoZWxwZXJUZXh0SWRcbiAgICB9LCBGb3JtSGVscGVyVGV4dFByb3BzLCB7XG4gICAgICBjaGlsZHJlbjogaGVscGVyVGV4dFxuICAgIH0pKV1cbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBUZXh0RmllbGQucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogVGhpcyBwcm9wIGhlbHBzIHVzZXJzIHRvIGZpbGwgZm9ybXMgZmFzdGVyLCBlc3BlY2lhbGx5IG9uIG1vYmlsZSBkZXZpY2VzLlxuICAgKiBUaGUgbmFtZSBjYW4gYmUgY29uZnVzaW5nLCBhcyBpdCdzIG1vcmUgbGlrZSBhbiBhdXRvZmlsbC5cbiAgICogWW91IGNhbiBsZWFybiBtb3JlIGFib3V0IGl0IFtmb2xsb3dpbmcgdGhlIHNwZWNpZmljYXRpb25dKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm0tY29udHJvbC1pbmZyYXN0cnVjdHVyZS5odG1sI2F1dG9maWxsKS5cbiAgICovXG4gIGF1dG9Db21wbGV0ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgZWxlbWVudCBpcyBmb2N1c2VkIGR1cmluZyB0aGUgZmlyc3QgbW91bnQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJdCBzdXBwb3J0cyBib3RoIGRlZmF1bHQgYW5kIGN1c3RvbSB0aGVtZSBjb2xvcnMsIHdoaWNoIGNhbiBiZSBhZGRlZCBhcyBzaG93biBpbiB0aGVcbiAgICogW3BhbGV0dGUgY3VzdG9taXphdGlvbiBndWlkZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vcGFsZXR0ZS8jY3VzdG9tLWNvbG9ycykuXG4gICAqIEBkZWZhdWx0ICdwcmltYXJ5J1xuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsncHJpbWFyeScsICdzZWNvbmRhcnknLCAnZXJyb3InLCAnaW5mbycsICdzdWNjZXNzJywgJ3dhcm5pbmcnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlLiBVc2Ugd2hlbiB0aGUgY29tcG9uZW50IGlzIG5vdCBjb250cm9sbGVkLlxuICAgKi9cbiAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwgaXMgZGlzcGxheWVkIGluIGFuIGVycm9yIHN0YXRlLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZXJyb3I6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgW2BGb3JtSGVscGVyVGV4dGBdKC9tYXRlcmlhbC11aS9hcGkvZm9ybS1oZWxwZXItdGV4dC8pIGVsZW1lbnQuXG4gICAqL1xuICBGb3JtSGVscGVyVGV4dFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgaW5wdXQgd2lsbCB0YWtlIHVwIHRoZSBmdWxsIHdpZHRoIG9mIGl0cyBjb250YWluZXIuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBmdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGhlbHBlciB0ZXh0IGNvbnRlbnQuXG4gICAqL1xuICBoZWxwZXJUZXh0OiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBVc2UgdGhpcyBwcm9wIHRvIG1ha2UgYGxhYmVsYCBhbmQgYGhlbHBlclRleHRgIGFjY2Vzc2libGUgZm9yIHNjcmVlbiByZWFkZXJzLlxuICAgKi9cbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSBbYElucHV0TGFiZWxgXSgvbWF0ZXJpYWwtdWkvYXBpL2lucHV0LWxhYmVsLykgZWxlbWVudC5cbiAgICogUG9pbnRlciBldmVudHMgbGlrZSBgb25DbGlja2AgYXJlIGVuYWJsZWQgaWYgYW5kIG9ubHkgaWYgYHNocmlua2AgaXMgYHRydWVgLlxuICAgKi9cbiAgSW5wdXRMYWJlbFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogW0F0dHJpYnV0ZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNBdHRyaWJ1dGVzKSBhcHBsaWVkIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpbnB1dFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgSW5wdXQgZWxlbWVudC5cbiAgICogSXQgd2lsbCBiZSBhIFtgRmlsbGVkSW5wdXRgXSgvbWF0ZXJpYWwtdWkvYXBpL2ZpbGxlZC1pbnB1dC8pLFxuICAgKiBbYE91dGxpbmVkSW5wdXRgXSgvbWF0ZXJpYWwtdWkvYXBpL291dGxpbmVkLWlucHV0Lykgb3IgW2BJbnB1dGBdKC9tYXRlcmlhbC11aS9hcGkvaW5wdXQvKVxuICAgKiBjb21wb25lbnQgZGVwZW5kaW5nIG9uIHRoZSBgdmFyaWFudGAgcHJvcCB2YWx1ZS5cbiAgICovXG4gIElucHV0UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBQYXNzIGEgcmVmIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpbnB1dFJlZjogcmVmVHlwZSxcbiAgLyoqXG4gICAqIFRoZSBsYWJlbCBjb250ZW50LlxuICAgKi9cbiAgbGFiZWw6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogSWYgYGRlbnNlYCBvciBgbm9ybWFsYCwgd2lsbCBhZGp1c3QgdmVydGljYWwgc3BhY2luZyBvZiB0aGlzIGFuZCBjb250YWluZWQgY29tcG9uZW50cy5cbiAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAqL1xuICBtYXJnaW46IFByb3BUeXBlcy5vbmVPZihbJ2RlbnNlJywgJ25vbmUnLCAnbm9ybWFsJ10pLFxuICAvKipcbiAgICogTWF4aW11bSBudW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIG1heFJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIE1pbmltdW0gbnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSB3aGVuIG11bHRpbGluZSBvcHRpb24gaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICBtaW5Sb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGEgYHRleHRhcmVhYCBlbGVtZW50IGlzIHJlbmRlcmVkIGluc3RlYWQgb2YgYW4gaW5wdXQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBtdWx0aWxpbmU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogTmFtZSBhdHRyaWJ1dGUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkJsdXI6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgdmFsdWUgaXMgY2hhbmdlZC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKiBZb3UgY2FuIHB1bGwgb3V0IHRoZSBuZXcgdmFsdWUgYnkgYWNjZXNzaW5nIGBldmVudC50YXJnZXQudmFsdWVgIChzdHJpbmcpLlxuICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Gb2N1czogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBUaGUgc2hvcnQgaGludCBkaXNwbGF5ZWQgaW4gdGhlIGBpbnB1dGAgYmVmb3JlIHRoZSB1c2VyIGVudGVycyBhIHZhbHVlLlxuICAgKi9cbiAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCBpcyBkaXNwbGF5ZWQgYXMgcmVxdWlyZWQgYW5kIHRoZSBgaW5wdXRgIGVsZW1lbnQgaXMgcmVxdWlyZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBOdW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIHJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFJlbmRlciBhIFtgU2VsZWN0YF0oL21hdGVyaWFsLXVpL2FwaS9zZWxlY3QvKSBlbGVtZW50IHdoaWxlIHBhc3NpbmcgdGhlIElucHV0IGVsZW1lbnQgdG8gYFNlbGVjdGAgYXMgYGlucHV0YCBwYXJhbWV0ZXIuXG4gICAqIElmIHRoaXMgb3B0aW9uIGlzIHNldCB5b3UgbXVzdCBwYXNzIHRoZSBvcHRpb25zIG9mIHRoZSBzZWxlY3QgYXMgY2hpbGRyZW4uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBzZWxlY3Q6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgW2BTZWxlY3RgXSgvbWF0ZXJpYWwtdWkvYXBpL3NlbGVjdC8pIGVsZW1lbnQuXG4gICAqL1xuICBTZWxlY3RQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFRoZSBzaXplIG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBzaXplOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ21lZGl1bScsICdzbWFsbCddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogVHlwZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LiBJdCBzaG91bGQgYmUgW2EgdmFsaWQgSFRNTDUgaW5wdXQgdHlwZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0I0Zvcm1fJTNDaW5wdXQlM0VfdHlwZXMpLlxuICAgKi9cbiAgdHlwZTogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8uc3RyaW5nLFxuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQsIHJlcXVpcmVkIGZvciBhIGNvbnRyb2xsZWQgY29tcG9uZW50LlxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqIEBkZWZhdWx0ICdvdXRsaW5lZCdcbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcy5vbmVPZihbJ2ZpbGxlZCcsICdvdXRsaW5lZCcsICdzdGFuZGFyZCddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IFRleHRGaWVsZDsiLCJmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHtcbiAgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICByZXR1cm4gZTtcbn1cbmV4cG9ydCB7IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQgYXMgZGVmYXVsdCB9OyIsImltcG9ydCB7IENoaWxkcmVuLCBjbG9uZUVsZW1lbnQsIGlzVmFsaWRFbGVtZW50IH0gZnJvbSAncmVhY3QnO1xuLyoqXG4gKiBHaXZlbiBgdGhpcy5wcm9wcy5jaGlsZHJlbmAsIHJldHVybiBhbiBvYmplY3QgbWFwcGluZyBrZXkgdG8gY2hpbGQuXG4gKlxuICogQHBhcmFtIHsqfSBjaGlsZHJlbiBgdGhpcy5wcm9wcy5jaGlsZHJlbmBcbiAqIEByZXR1cm4ge29iamVjdH0gTWFwcGluZyBvZiBrZXkgdG8gY2hpbGRcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hpbGRNYXBwaW5nKGNoaWxkcmVuLCBtYXBGbikge1xuICB2YXIgbWFwcGVyID0gZnVuY3Rpb24gbWFwcGVyKGNoaWxkKSB7XG4gICAgcmV0dXJuIG1hcEZuICYmIGlzVmFsaWRFbGVtZW50KGNoaWxkKSA/IG1hcEZuKGNoaWxkKSA6IGNoaWxkO1xuICB9O1xuXG4gIHZhciByZXN1bHQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoY2hpbGRyZW4pIENoaWxkcmVuLm1hcChjaGlsZHJlbiwgZnVuY3Rpb24gKGMpIHtcbiAgICByZXR1cm4gYztcbiAgfSkuZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAvLyBydW4gdGhlIG1hcCBmdW5jdGlvbiBoZXJlIGluc3RlYWQgc28gdGhhdCB0aGUga2V5IGlzIHRoZSBjb21wdXRlZCBvbmVcbiAgICByZXN1bHRbY2hpbGQua2V5XSA9IG1hcHBlcihjaGlsZCk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuLyoqXG4gKiBXaGVuIHlvdSdyZSBhZGRpbmcgb3IgcmVtb3ZpbmcgY2hpbGRyZW4gc29tZSBtYXkgYmUgYWRkZWQgb3IgcmVtb3ZlZCBpbiB0aGVcbiAqIHNhbWUgcmVuZGVyIHBhc3MuIFdlIHdhbnQgdG8gc2hvdyAqYm90aCogc2luY2Ugd2Ugd2FudCB0byBzaW11bHRhbmVvdXNseVxuICogYW5pbWF0ZSBlbGVtZW50cyBpbiBhbmQgb3V0LiBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgcHJldmlvdXMgc2V0IG9mIGtleXNcbiAqIGFuZCBhIG5ldyBzZXQgb2Yga2V5cyBhbmQgbWVyZ2VzIHRoZW0gd2l0aCBpdHMgYmVzdCBndWVzcyBvZiB0aGUgY29ycmVjdFxuICogb3JkZXJpbmcuIEluIHRoZSBmdXR1cmUgd2UgbWF5IGV4cG9zZSBzb21lIG9mIHRoZSB1dGlsaXRpZXMgaW5cbiAqIFJlYWN0TXVsdGlDaGlsZCB0byBtYWtlIHRoaXMgZWFzeSwgYnV0IGZvciBub3cgUmVhY3QgaXRzZWxmIGRvZXMgbm90XG4gKiBkaXJlY3RseSBoYXZlIHRoaXMgY29uY2VwdCBvZiB0aGUgdW5pb24gb2YgcHJldkNoaWxkcmVuIGFuZCBuZXh0Q2hpbGRyZW5cbiAqIHNvIHdlIGltcGxlbWVudCBpdCBoZXJlLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcmV2IHByZXYgY2hpbGRyZW4gYXMgcmV0dXJuZWQgZnJvbVxuICogYFJlYWN0VHJhbnNpdGlvbkNoaWxkTWFwcGluZy5nZXRDaGlsZE1hcHBpbmcoKWAuXG4gKiBAcGFyYW0ge29iamVjdH0gbmV4dCBuZXh0IGNoaWxkcmVuIGFzIHJldHVybmVkIGZyb21cbiAqIGBSZWFjdFRyYW5zaXRpb25DaGlsZE1hcHBpbmcuZ2V0Q2hpbGRNYXBwaW5nKClgLlxuICogQHJldHVybiB7b2JqZWN0fSBhIGtleSBzZXQgdGhhdCBjb250YWlucyBhbGwga2V5cyBpbiBgcHJldmAgYW5kIGFsbCBrZXlzXG4gKiBpbiBgbmV4dGAgaW4gYSByZWFzb25hYmxlIG9yZGVyLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUNoaWxkTWFwcGluZ3MocHJldiwgbmV4dCkge1xuICBwcmV2ID0gcHJldiB8fCB7fTtcbiAgbmV4dCA9IG5leHQgfHwge307XG5cbiAgZnVuY3Rpb24gZ2V0VmFsdWVGb3JLZXkoa2V5KSB7XG4gICAgcmV0dXJuIGtleSBpbiBuZXh0ID8gbmV4dFtrZXldIDogcHJldltrZXldO1xuICB9IC8vIEZvciBlYWNoIGtleSBvZiBgbmV4dGAsIHRoZSBsaXN0IG9mIGtleXMgdG8gaW5zZXJ0IGJlZm9yZSB0aGF0IGtleSBpblxuICAvLyB0aGUgY29tYmluZWQgbGlzdFxuXG5cbiAgdmFyIG5leHRLZXlzUGVuZGluZyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHZhciBwZW5kaW5nS2V5cyA9IFtdO1xuXG4gIGZvciAodmFyIHByZXZLZXkgaW4gcHJldikge1xuICAgIGlmIChwcmV2S2V5IGluIG5leHQpIHtcbiAgICAgIGlmIChwZW5kaW5nS2V5cy5sZW5ndGgpIHtcbiAgICAgICAgbmV4dEtleXNQZW5kaW5nW3ByZXZLZXldID0gcGVuZGluZ0tleXM7XG4gICAgICAgIHBlbmRpbmdLZXlzID0gW107XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlbmRpbmdLZXlzLnB1c2gocHJldktleSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGk7XG4gIHZhciBjaGlsZE1hcHBpbmcgPSB7fTtcblxuICBmb3IgKHZhciBuZXh0S2V5IGluIG5leHQpIHtcbiAgICBpZiAobmV4dEtleXNQZW5kaW5nW25leHRLZXldKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbmV4dEtleXNQZW5kaW5nW25leHRLZXldLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBwZW5kaW5nTmV4dEtleSA9IG5leHRLZXlzUGVuZGluZ1tuZXh0S2V5XVtpXTtcbiAgICAgICAgY2hpbGRNYXBwaW5nW25leHRLZXlzUGVuZGluZ1tuZXh0S2V5XVtpXV0gPSBnZXRWYWx1ZUZvcktleShwZW5kaW5nTmV4dEtleSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2hpbGRNYXBwaW5nW25leHRLZXldID0gZ2V0VmFsdWVGb3JLZXkobmV4dEtleSk7XG4gIH0gLy8gRmluYWxseSwgYWRkIHRoZSBrZXlzIHdoaWNoIGRpZG4ndCBhcHBlYXIgYmVmb3JlIGFueSBrZXkgaW4gYG5leHRgXG5cblxuICBmb3IgKGkgPSAwOyBpIDwgcGVuZGluZ0tleXMubGVuZ3RoOyBpKyspIHtcbiAgICBjaGlsZE1hcHBpbmdbcGVuZGluZ0tleXNbaV1dID0gZ2V0VmFsdWVGb3JLZXkocGVuZGluZ0tleXNbaV0pO1xuICB9XG5cbiAgcmV0dXJuIGNoaWxkTWFwcGluZztcbn1cblxuZnVuY3Rpb24gZ2V0UHJvcChjaGlsZCwgcHJvcCwgcHJvcHMpIHtcbiAgcmV0dXJuIHByb3BzW3Byb3BdICE9IG51bGwgPyBwcm9wc1twcm9wXSA6IGNoaWxkLnByb3BzW3Byb3BdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5pdGlhbENoaWxkTWFwcGluZyhwcm9wcywgb25FeGl0ZWQpIHtcbiAgcmV0dXJuIGdldENoaWxkTWFwcGluZyhwcm9wcy5jaGlsZHJlbiwgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgcmV0dXJuIGNsb25lRWxlbWVudChjaGlsZCwge1xuICAgICAgb25FeGl0ZWQ6IG9uRXhpdGVkLmJpbmQobnVsbCwgY2hpbGQpLFxuICAgICAgaW46IHRydWUsXG4gICAgICBhcHBlYXI6IGdldFByb3AoY2hpbGQsICdhcHBlYXInLCBwcm9wcyksXG4gICAgICBlbnRlcjogZ2V0UHJvcChjaGlsZCwgJ2VudGVyJywgcHJvcHMpLFxuICAgICAgZXhpdDogZ2V0UHJvcChjaGlsZCwgJ2V4aXQnLCBwcm9wcylcbiAgICB9KTtcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV4dENoaWxkTWFwcGluZyhuZXh0UHJvcHMsIHByZXZDaGlsZE1hcHBpbmcsIG9uRXhpdGVkKSB7XG4gIHZhciBuZXh0Q2hpbGRNYXBwaW5nID0gZ2V0Q2hpbGRNYXBwaW5nKG5leHRQcm9wcy5jaGlsZHJlbik7XG4gIHZhciBjaGlsZHJlbiA9IG1lcmdlQ2hpbGRNYXBwaW5ncyhwcmV2Q2hpbGRNYXBwaW5nLCBuZXh0Q2hpbGRNYXBwaW5nKTtcbiAgT2JqZWN0LmtleXMoY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBjaGlsZCA9IGNoaWxkcmVuW2tleV07XG4gICAgaWYgKCFpc1ZhbGlkRWxlbWVudChjaGlsZCkpIHJldHVybjtcbiAgICB2YXIgaGFzUHJldiA9IChrZXkgaW4gcHJldkNoaWxkTWFwcGluZyk7XG4gICAgdmFyIGhhc05leHQgPSAoa2V5IGluIG5leHRDaGlsZE1hcHBpbmcpO1xuICAgIHZhciBwcmV2Q2hpbGQgPSBwcmV2Q2hpbGRNYXBwaW5nW2tleV07XG4gICAgdmFyIGlzTGVhdmluZyA9IGlzVmFsaWRFbGVtZW50KHByZXZDaGlsZCkgJiYgIXByZXZDaGlsZC5wcm9wcy5pbjsgLy8gaXRlbSBpcyBuZXcgKGVudGVyaW5nKVxuXG4gICAgaWYgKGhhc05leHQgJiYgKCFoYXNQcmV2IHx8IGlzTGVhdmluZykpIHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdlbnRlcmluZycsIGtleSlcbiAgICAgIGNoaWxkcmVuW2tleV0gPSBjbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgICAgb25FeGl0ZWQ6IG9uRXhpdGVkLmJpbmQobnVsbCwgY2hpbGQpLFxuICAgICAgICBpbjogdHJ1ZSxcbiAgICAgICAgZXhpdDogZ2V0UHJvcChjaGlsZCwgJ2V4aXQnLCBuZXh0UHJvcHMpLFxuICAgICAgICBlbnRlcjogZ2V0UHJvcChjaGlsZCwgJ2VudGVyJywgbmV4dFByb3BzKVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICghaGFzTmV4dCAmJiBoYXNQcmV2ICYmICFpc0xlYXZpbmcpIHtcbiAgICAgIC8vIGl0ZW0gaXMgb2xkIChleGl0aW5nKVxuICAgICAgLy8gY29uc29sZS5sb2coJ2xlYXZpbmcnLCBrZXkpXG4gICAgICBjaGlsZHJlbltrZXldID0gY2xvbmVFbGVtZW50KGNoaWxkLCB7XG4gICAgICAgIGluOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChoYXNOZXh0ICYmIGhhc1ByZXYgJiYgaXNWYWxpZEVsZW1lbnQocHJldkNoaWxkKSkge1xuICAgICAgLy8gaXRlbSBoYXNuJ3QgY2hhbmdlZCB0cmFuc2l0aW9uIHN0YXRlc1xuICAgICAgLy8gY29weSBvdmVyIHRoZSBsYXN0IHRyYW5zaXRpb24gcHJvcHM7XG4gICAgICAvLyBjb25zb2xlLmxvZygndW5jaGFuZ2VkJywga2V5KVxuICAgICAgY2hpbGRyZW5ba2V5XSA9IGNsb25lRWxlbWVudChjaGlsZCwge1xuICAgICAgICBvbkV4aXRlZDogb25FeGl0ZWQuYmluZChudWxsLCBjaGlsZCksXG4gICAgICAgIGluOiBwcmV2Q2hpbGQucHJvcHMuaW4sXG4gICAgICAgIGV4aXQ6IGdldFByb3AoY2hpbGQsICdleGl0JywgbmV4dFByb3BzKSxcbiAgICAgICAgZW50ZXI6IGdldFByb3AoY2hpbGQsICdlbnRlcicsIG5leHRQcm9wcylcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBjaGlsZHJlbjtcbn0iLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZFwiO1xuaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlXCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBUcmFuc2l0aW9uR3JvdXBDb250ZXh0IGZyb20gJy4vVHJhbnNpdGlvbkdyb3VwQ29udGV4dCc7XG5pbXBvcnQgeyBnZXRDaGlsZE1hcHBpbmcsIGdldEluaXRpYWxDaGlsZE1hcHBpbmcsIGdldE5leHRDaGlsZE1hcHBpbmcgfSBmcm9tICcuL3V0aWxzL0NoaWxkTWFwcGluZyc7XG5cbnZhciB2YWx1ZXMgPSBPYmplY3QudmFsdWVzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikubWFwKGZ1bmN0aW9uIChrKSB7XG4gICAgcmV0dXJuIG9ialtrXTtcbiAgfSk7XG59O1xuXG52YXIgZGVmYXVsdFByb3BzID0ge1xuICBjb21wb25lbnQ6ICdkaXYnLFxuICBjaGlsZEZhY3Rvcnk6IGZ1bmN0aW9uIGNoaWxkRmFjdG9yeShjaGlsZCkge1xuICAgIHJldHVybiBjaGlsZDtcbiAgfVxufTtcbi8qKlxuICogVGhlIGA8VHJhbnNpdGlvbkdyb3VwPmAgY29tcG9uZW50IG1hbmFnZXMgYSBzZXQgb2YgdHJhbnNpdGlvbiBjb21wb25lbnRzXG4gKiAoYDxUcmFuc2l0aW9uPmAgYW5kIGA8Q1NTVHJhbnNpdGlvbj5gKSBpbiBhIGxpc3QuIExpa2Ugd2l0aCB0aGUgdHJhbnNpdGlvblxuICogY29tcG9uZW50cywgYDxUcmFuc2l0aW9uR3JvdXA+YCBpcyBhIHN0YXRlIG1hY2hpbmUgZm9yIG1hbmFnaW5nIHRoZSBtb3VudGluZ1xuICogYW5kIHVubW91bnRpbmcgb2YgY29tcG9uZW50cyBvdmVyIHRpbWUuXG4gKlxuICogQ29uc2lkZXIgdGhlIGV4YW1wbGUgYmVsb3cuIEFzIGl0ZW1zIGFyZSByZW1vdmVkIG9yIGFkZGVkIHRvIHRoZSBUb2RvTGlzdCB0aGVcbiAqIGBpbmAgcHJvcCBpcyB0b2dnbGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGA8VHJhbnNpdGlvbkdyb3VwPmAuXG4gKlxuICogTm90ZSB0aGF0IGA8VHJhbnNpdGlvbkdyb3VwPmAgIGRvZXMgbm90IGRlZmluZSBhbnkgYW5pbWF0aW9uIGJlaGF2aW9yIVxuICogRXhhY3RseSBfaG93XyBhIGxpc3QgaXRlbSBhbmltYXRlcyBpcyB1cCB0byB0aGUgaW5kaXZpZHVhbCB0cmFuc2l0aW9uXG4gKiBjb21wb25lbnQuIFRoaXMgbWVhbnMgeW91IGNhbiBtaXggYW5kIG1hdGNoIGFuaW1hdGlvbnMgYWNyb3NzIGRpZmZlcmVudCBsaXN0XG4gKiBpdGVtcy5cbiAqL1xuXG52YXIgVHJhbnNpdGlvbkdyb3VwID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0c0xvb3NlKFRyYW5zaXRpb25Hcm91cCwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gVHJhbnNpdGlvbkdyb3VwKHByb3BzLCBjb250ZXh0KSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfUmVhY3QkQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMsIGNvbnRleHQpIHx8IHRoaXM7XG5cbiAgICB2YXIgaGFuZGxlRXhpdGVkID0gX3RoaXMuaGFuZGxlRXhpdGVkLmJpbmQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpOyAvLyBJbml0aWFsIGNoaWxkcmVuIHNob3VsZCBhbGwgYmUgZW50ZXJpbmcsIGRlcGVuZGVudCBvbiBhcHBlYXJcblxuXG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBjb250ZXh0VmFsdWU6IHtcbiAgICAgICAgaXNNb3VudGluZzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGhhbmRsZUV4aXRlZDogaGFuZGxlRXhpdGVkLFxuICAgICAgZmlyc3RSZW5kZXI6IHRydWVcbiAgICB9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBUcmFuc2l0aW9uR3JvdXAucHJvdG90eXBlO1xuXG4gIF9wcm90by5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMubW91bnRlZCA9IHRydWU7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBjb250ZXh0VmFsdWU6IHtcbiAgICAgICAgaXNNb3VudGluZzogZmFsc2VcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLm1vdW50ZWQgPSBmYWxzZTtcbiAgfTtcblxuICBUcmFuc2l0aW9uR3JvdXAuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgX3JlZikge1xuICAgIHZhciBwcmV2Q2hpbGRNYXBwaW5nID0gX3JlZi5jaGlsZHJlbixcbiAgICAgICAgaGFuZGxlRXhpdGVkID0gX3JlZi5oYW5kbGVFeGl0ZWQsXG4gICAgICAgIGZpcnN0UmVuZGVyID0gX3JlZi5maXJzdFJlbmRlcjtcbiAgICByZXR1cm4ge1xuICAgICAgY2hpbGRyZW46IGZpcnN0UmVuZGVyID8gZ2V0SW5pdGlhbENoaWxkTWFwcGluZyhuZXh0UHJvcHMsIGhhbmRsZUV4aXRlZCkgOiBnZXROZXh0Q2hpbGRNYXBwaW5nKG5leHRQcm9wcywgcHJldkNoaWxkTWFwcGluZywgaGFuZGxlRXhpdGVkKSxcbiAgICAgIGZpcnN0UmVuZGVyOiBmYWxzZVxuICAgIH07XG4gIH0gLy8gbm9kZSBpcyBgdW5kZWZpbmVkYCB3aGVuIHVzZXIgcHJvdmlkZWQgYG5vZGVSZWZgIHByb3BcbiAgO1xuXG4gIF9wcm90by5oYW5kbGVFeGl0ZWQgPSBmdW5jdGlvbiBoYW5kbGVFeGl0ZWQoY2hpbGQsIG5vZGUpIHtcbiAgICB2YXIgY3VycmVudENoaWxkTWFwcGluZyA9IGdldENoaWxkTWFwcGluZyh0aGlzLnByb3BzLmNoaWxkcmVuKTtcbiAgICBpZiAoY2hpbGQua2V5IGluIGN1cnJlbnRDaGlsZE1hcHBpbmcpIHJldHVybjtcblxuICAgIGlmIChjaGlsZC5wcm9wcy5vbkV4aXRlZCkge1xuICAgICAgY2hpbGQucHJvcHMub25FeGl0ZWQobm9kZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubW91bnRlZCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gX2V4dGVuZHMoe30sIHN0YXRlLmNoaWxkcmVuKTtcblxuICAgICAgICBkZWxldGUgY2hpbGRyZW5bY2hpbGQua2V5XTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIENvbXBvbmVudCA9IF90aGlzJHByb3BzLmNvbXBvbmVudCxcbiAgICAgICAgY2hpbGRGYWN0b3J5ID0gX3RoaXMkcHJvcHMuY2hpbGRGYWN0b3J5LFxuICAgICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF90aGlzJHByb3BzLCBbXCJjb21wb25lbnRcIiwgXCJjaGlsZEZhY3RvcnlcIl0pO1xuXG4gICAgdmFyIGNvbnRleHRWYWx1ZSA9IHRoaXMuc3RhdGUuY29udGV4dFZhbHVlO1xuICAgIHZhciBjaGlsZHJlbiA9IHZhbHVlcyh0aGlzLnN0YXRlLmNoaWxkcmVuKS5tYXAoY2hpbGRGYWN0b3J5KTtcbiAgICBkZWxldGUgcHJvcHMuYXBwZWFyO1xuICAgIGRlbGV0ZSBwcm9wcy5lbnRlcjtcbiAgICBkZWxldGUgcHJvcHMuZXhpdDtcblxuICAgIGlmIChDb21wb25lbnQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUcmFuc2l0aW9uR3JvdXBDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICAgIHZhbHVlOiBjb250ZXh0VmFsdWVcbiAgICAgIH0sIGNoaWxkcmVuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbkdyb3VwQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgdmFsdWU6IGNvbnRleHRWYWx1ZVxuICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENvbXBvbmVudCwgcHJvcHMsIGNoaWxkcmVuKSk7XG4gIH07XG5cbiAgcmV0dXJuIFRyYW5zaXRpb25Hcm91cDtcbn0oUmVhY3QuQ29tcG9uZW50KTtcblxuVHJhbnNpdGlvbkdyb3VwLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgLyoqXG4gICAqIGA8VHJhbnNpdGlvbkdyb3VwPmAgcmVuZGVycyBhIGA8ZGl2PmAgYnkgZGVmYXVsdC4gWW91IGNhbiBjaGFuZ2UgdGhpc1xuICAgKiBiZWhhdmlvciBieSBwcm92aWRpbmcgYSBgY29tcG9uZW50YCBwcm9wLlxuICAgKiBJZiB5b3UgdXNlIFJlYWN0IHYxNisgYW5kIHdvdWxkIGxpa2UgdG8gYXZvaWQgYSB3cmFwcGluZyBgPGRpdj5gIGVsZW1lbnRcbiAgICogeW91IGNhbiBwYXNzIGluIGBjb21wb25lbnQ9e251bGx9YC4gVGhpcyBpcyB1c2VmdWwgaWYgdGhlIHdyYXBwaW5nIGRpdlxuICAgKiBib3JrcyB5b3VyIGNzcyBzdHlsZXMuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAqIEEgc2V0IG9mIGA8VHJhbnNpdGlvbj5gIGNvbXBvbmVudHMsIHRoYXQgYXJlIHRvZ2dsZWQgYGluYCBhbmQgb3V0IGFzIHRoZXlcbiAgICogbGVhdmUuIHRoZSBgPFRyYW5zaXRpb25Hcm91cD5gIHdpbGwgaW5qZWN0IHNwZWNpZmljIHRyYW5zaXRpb24gcHJvcHMsIHNvXG4gICAqIHJlbWVtYmVyIHRvIHNwcmVhZCB0aGVtIHRocm91Z2ggaWYgeW91IGFyZSB3cmFwcGluZyB0aGUgYDxUcmFuc2l0aW9uPmAgYXNcbiAgICogd2l0aCBvdXIgYDxGYWRlPmAgZXhhbXBsZS5cbiAgICpcbiAgICogV2hpbGUgdGhpcyBjb21wb25lbnQgaXMgbWVhbnQgZm9yIG11bHRpcGxlIGBUcmFuc2l0aW9uYCBvciBgQ1NTVHJhbnNpdGlvbmBcbiAgICogY2hpbGRyZW4sIHNvbWV0aW1lcyB5b3UgbWF5IHdhbnQgdG8gaGF2ZSBhIHNpbmdsZSB0cmFuc2l0aW9uIGNoaWxkIHdpdGhcbiAgICogY29udGVudCB0aGF0IHlvdSB3YW50IHRvIGJlIHRyYW5zaXRpb25lZCBvdXQgYW5kIGluIHdoZW4geW91IGNoYW5nZSBpdFxuICAgKiAoZS5nLiByb3V0ZXMsIGltYWdlcyBldGMuKSBJbiB0aGF0IGNhc2UgeW91IGNhbiBjaGFuZ2UgdGhlIGBrZXlgIHByb3Agb2ZcbiAgICogdGhlIHRyYW5zaXRpb24gY2hpbGQgYXMgeW91IGNoYW5nZSBpdHMgY29udGVudCwgdGhpcyB3aWxsIGNhdXNlXG4gICAqIGBUcmFuc2l0aW9uR3JvdXBgIHRvIHRyYW5zaXRpb24gdGhlIGNoaWxkIG91dCBhbmQgYmFjayBpbi5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogQSBjb252ZW5pZW5jZSBwcm9wIHRoYXQgZW5hYmxlcyBvciBkaXNhYmxlcyBhcHBlYXIgYW5pbWF0aW9uc1xuICAgKiBmb3IgYWxsIGNoaWxkcmVuLiBOb3RlIHRoYXQgc3BlY2lmeWluZyB0aGlzIHdpbGwgb3ZlcnJpZGUgYW55IGRlZmF1bHRzIHNldFxuICAgKiBvbiBpbmRpdmlkdWFsIGNoaWxkcmVuIFRyYW5zaXRpb25zLlxuICAgKi9cbiAgYXBwZWFyOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogQSBjb252ZW5pZW5jZSBwcm9wIHRoYXQgZW5hYmxlcyBvciBkaXNhYmxlcyBlbnRlciBhbmltYXRpb25zXG4gICAqIGZvciBhbGwgY2hpbGRyZW4uIE5vdGUgdGhhdCBzcGVjaWZ5aW5nIHRoaXMgd2lsbCBvdmVycmlkZSBhbnkgZGVmYXVsdHMgc2V0XG4gICAqIG9uIGluZGl2aWR1YWwgY2hpbGRyZW4gVHJhbnNpdGlvbnMuXG4gICAqL1xuICBlbnRlcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEEgY29udmVuaWVuY2UgcHJvcCB0aGF0IGVuYWJsZXMgb3IgZGlzYWJsZXMgZXhpdCBhbmltYXRpb25zXG4gICAqIGZvciBhbGwgY2hpbGRyZW4uIE5vdGUgdGhhdCBzcGVjaWZ5aW5nIHRoaXMgd2lsbCBvdmVycmlkZSBhbnkgZGVmYXVsdHMgc2V0XG4gICAqIG9uIGluZGl2aWR1YWwgY2hpbGRyZW4gVHJhbnNpdGlvbnMuXG4gICAqL1xuICBleGl0OiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogWW91IG1heSBuZWVkIHRvIGFwcGx5IHJlYWN0aXZlIHVwZGF0ZXMgdG8gYSBjaGlsZCBhcyBpdCBpcyBleGl0aW5nLlxuICAgKiBUaGlzIGlzIGdlbmVyYWxseSBkb25lIGJ5IHVzaW5nIGBjbG9uZUVsZW1lbnRgIGhvd2V2ZXIgaW4gdGhlIGNhc2Ugb2YgYW4gZXhpdGluZ1xuICAgKiBjaGlsZCB0aGUgZWxlbWVudCBoYXMgYWxyZWFkeSBiZWVuIHJlbW92ZWQgYW5kIG5vdCBhY2Nlc3NpYmxlIHRvIHRoZSBjb25zdW1lci5cbiAgICpcbiAgICogSWYgeW91IGRvIG5lZWQgdG8gdXBkYXRlIGEgY2hpbGQgYXMgaXQgbGVhdmVzIHlvdSBjYW4gcHJvdmlkZSBhIGBjaGlsZEZhY3RvcnlgXG4gICAqIHRvIHdyYXAgZXZlcnkgY2hpbGQsIGV2ZW4gdGhlIG9uZXMgdGhhdCBhcmUgbGVhdmluZy5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24oY2hpbGQ6IFJlYWN0RWxlbWVudCkgLT4gUmVhY3RFbGVtZW50XG4gICAqL1xuICBjaGlsZEZhY3Rvcnk6IFByb3BUeXBlcy5mdW5jXG59IDoge307XG5UcmFuc2l0aW9uR3JvdXAuZGVmYXVsdFByb3BzID0gZGVmYXVsdFByb3BzO1xuZXhwb3J0IGRlZmF1bHQgVHJhbnNpdGlvbkdyb3VwOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuXG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKi9cbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5mdW5jdGlvbiBSaXBwbGUocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGNsYXNzTmFtZSxcbiAgICBjbGFzc2VzLFxuICAgIHB1bHNhdGUgPSBmYWxzZSxcbiAgICByaXBwbGVYLFxuICAgIHJpcHBsZVksXG4gICAgcmlwcGxlU2l6ZSxcbiAgICBpbjogaW5Qcm9wLFxuICAgIG9uRXhpdGVkLFxuICAgIHRpbWVvdXRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBbbGVhdmluZywgc2V0TGVhdmluZ10gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IHJpcHBsZUNsYXNzTmFtZSA9IGNsc3goY2xhc3NOYW1lLCBjbGFzc2VzLnJpcHBsZSwgY2xhc3Nlcy5yaXBwbGVWaXNpYmxlLCBwdWxzYXRlICYmIGNsYXNzZXMucmlwcGxlUHVsc2F0ZSk7XG4gIGNvbnN0IHJpcHBsZVN0eWxlcyA9IHtcbiAgICB3aWR0aDogcmlwcGxlU2l6ZSxcbiAgICBoZWlnaHQ6IHJpcHBsZVNpemUsXG4gICAgdG9wOiAtKHJpcHBsZVNpemUgLyAyKSArIHJpcHBsZVksXG4gICAgbGVmdDogLShyaXBwbGVTaXplIC8gMikgKyByaXBwbGVYXG4gIH07XG4gIGNvbnN0IGNoaWxkQ2xhc3NOYW1lID0gY2xzeChjbGFzc2VzLmNoaWxkLCBsZWF2aW5nICYmIGNsYXNzZXMuY2hpbGRMZWF2aW5nLCBwdWxzYXRlICYmIGNsYXNzZXMuY2hpbGRQdWxzYXRlKTtcbiAgaWYgKCFpblByb3AgJiYgIWxlYXZpbmcpIHtcbiAgICBzZXRMZWF2aW5nKHRydWUpO1xuICB9XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpblByb3AgJiYgb25FeGl0ZWQgIT0gbnVsbCkge1xuICAgICAgLy8gcmVhY3QtdHJhbnNpdGlvbi1ncm91cCNvbkV4aXRlZFxuICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dChvbkV4aXRlZCwgdGltZW91dCk7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0sIFtvbkV4aXRlZCwgaW5Qcm9wLCB0aW1lb3V0XSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogcmlwcGxlQ2xhc3NOYW1lLFxuICAgIHN0eWxlOiByaXBwbGVTdHlsZXMsXG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KFwic3BhblwiLCB7XG4gICAgICBjbGFzc05hbWU6IGNoaWxkQ2xhc3NOYW1lXG4gICAgfSlcbiAgfSk7XG59XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBSaXBwbGUucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBAaWdub3JlIC0gaW5qZWN0ZWQgZnJvbSBUcmFuc2l0aW9uR3JvdXBcbiAgICovXG4gIGluOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIEBpZ25vcmUgLSBpbmplY3RlZCBmcm9tIFRyYW5zaXRpb25Hcm91cFxuICAgKi9cbiAgb25FeGl0ZWQ6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgcmlwcGxlIHB1bHNhdGVzLCB0eXBpY2FsbHkgaW5kaWNhdGluZyB0aGUga2V5Ym9hcmQgZm9jdXMgc3RhdGUgb2YgYW4gZWxlbWVudC5cbiAgICovXG4gIHB1bHNhdGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogRGlhbWV0ZXIgb2YgdGhlIHJpcHBsZS5cbiAgICovXG4gIHJpcHBsZVNpemU6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgKiBIb3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSByaXBwbGUgY2VudGVyLlxuICAgKi9cbiAgcmlwcGxlWDogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIFZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoZSByaXBwbGUgY2VudGVyLlxuICAgKi9cbiAgcmlwcGxlWTogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIGV4aXQgZGVsYXlcbiAgICovXG4gIHRpbWVvdXQ6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZFxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IFJpcHBsZTsiLCJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRvdWNoUmlwcGxlVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlUb3VjaFJpcHBsZScsIHNsb3QpO1xufVxuY29uc3QgdG91Y2hSaXBwbGVDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpVG91Y2hSaXBwbGUnLCBbJ3Jvb3QnLCAncmlwcGxlJywgJ3JpcHBsZVZpc2libGUnLCAncmlwcGxlUHVsc2F0ZScsICdjaGlsZCcsICdjaGlsZExlYXZpbmcnLCAnY2hpbGRQdWxzYXRlJ10pO1xuZXhwb3J0IGRlZmF1bHQgdG91Y2hSaXBwbGVDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNlbnRlclwiLCBcImNsYXNzZXNcIiwgXCJjbGFzc05hbWVcIl07XG5sZXQgXyA9IHQgPT4gdCxcbiAgX3QsXG4gIF90MixcbiAgX3QzLFxuICBfdDQ7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgVHJhbnNpdGlvbkdyb3VwIH0gZnJvbSAncmVhY3QtdHJhbnNpdGlvbi1ncm91cCc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IGtleWZyYW1lcyB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmltcG9ydCB1c2VUaW1lb3V0IGZyb20gJ0BtdWkvdXRpbHMvdXNlVGltZW91dCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsgdXNlRGVmYXVsdFByb3BzIH0gZnJvbSAnLi4vRGVmYXVsdFByb3BzUHJvdmlkZXInO1xuaW1wb3J0IFJpcHBsZSBmcm9tICcuL1JpcHBsZSc7XG5pbXBvcnQgdG91Y2hSaXBwbGVDbGFzc2VzIGZyb20gJy4vdG91Y2hSaXBwbGVDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCBEVVJBVElPTiA9IDU1MDtcbmV4cG9ydCBjb25zdCBERUxBWV9SSVBQTEUgPSA4MDtcbmNvbnN0IGVudGVyS2V5ZnJhbWUgPSBrZXlmcmFtZXMoX3QgfHwgKF90ID0gX2BcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7XG4gICAgb3BhY2l0eTogMC4xO1xuICB9XG5cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICBvcGFjaXR5OiAwLjM7XG4gIH1cbmApKTtcbmNvbnN0IGV4aXRLZXlmcmFtZSA9IGtleWZyYW1lcyhfdDIgfHwgKF90MiA9IF9gXG4gIDAlIHtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG5cbiAgMTAwJSB7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuYCkpO1xuY29uc3QgcHVsc2F0ZUtleWZyYW1lID0ga2V5ZnJhbWVzKF90MyB8fCAoX3QzID0gX2BcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIH1cblxuICA1MCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC45Mik7XG4gIH1cblxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICB9XG5gKSk7XG5leHBvcnQgY29uc3QgVG91Y2hSaXBwbGVSb290ID0gc3R5bGVkKCdzcGFuJywge1xuICBuYW1lOiAnTXVpVG91Y2hSaXBwbGUnLFxuICBzbG90OiAnUm9vdCdcbn0pKHtcbiAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICB6SW5kZXg6IDAsXG4gIHRvcDogMCxcbiAgcmlnaHQ6IDAsXG4gIGJvdHRvbTogMCxcbiAgbGVmdDogMCxcbiAgYm9yZGVyUmFkaXVzOiAnaW5oZXJpdCdcbn0pO1xuXG4vLyBUaGlzIGBzdHlsZWQoKWAgZnVuY3Rpb24gaW52b2tlcyBrZXlmcmFtZXMuIGBzdHlsZWQtY29tcG9uZW50c2Agb25seSBzdXBwb3J0cyBrZXlmcmFtZXNcbi8vIGluIHN0cmluZyB0ZW1wbGF0ZXMuIERvIG5vdCBjb252ZXJ0IHRoZXNlIHN0eWxlcyBpbiBKUyBvYmplY3QgYXMgaXQgd2lsbCBicmVhay5cbmV4cG9ydCBjb25zdCBUb3VjaFJpcHBsZVJpcHBsZSA9IHN0eWxlZChSaXBwbGUsIHtcbiAgbmFtZTogJ011aVRvdWNoUmlwcGxlJyxcbiAgc2xvdDogJ1JpcHBsZSdcbn0pKF90NCB8fCAoX3Q0ID0gX2BcbiAgb3BhY2l0eTogMDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuXG4gICYuJHswfSB7XG4gICAgb3BhY2l0eTogMC4zO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgYW5pbWF0aW9uLW5hbWU6ICR7MH07XG4gICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAkezB9bXM7XG4gICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogJHswfTtcbiAgfVxuXG4gICYuJHswfSB7XG4gICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAkezB9bXM7XG4gIH1cblxuICAmIC4kezB9IHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogY3VycmVudENvbG9yO1xuICB9XG5cbiAgJiAuJHswfSB7XG4gICAgb3BhY2l0eTogMDtcbiAgICBhbmltYXRpb24tbmFtZTogJHswfTtcbiAgICBhbmltYXRpb24tZHVyYXRpb246ICR7MH1tcztcbiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiAkezB9O1xuICB9XG5cbiAgJiAuJHswfSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIC8qIEBub2ZsaXAgKi9cbiAgICBsZWZ0OiAwcHg7XG4gICAgdG9wOiAwO1xuICAgIGFuaW1hdGlvbi1uYW1lOiAkezB9O1xuICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMjUwMG1zO1xuICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ICR7MH07XG4gICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7XG4gICAgYW5pbWF0aW9uLWRlbGF5OiAyMDBtcztcbiAgfVxuYCksIHRvdWNoUmlwcGxlQ2xhc3Nlcy5yaXBwbGVWaXNpYmxlLCBlbnRlcktleWZyYW1lLCBEVVJBVElPTiwgKHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLnRyYW5zaXRpb25zLmVhc2luZy5lYXNlSW5PdXQsIHRvdWNoUmlwcGxlQ2xhc3Nlcy5yaXBwbGVQdWxzYXRlLCAoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRlciwgdG91Y2hSaXBwbGVDbGFzc2VzLmNoaWxkLCB0b3VjaFJpcHBsZUNsYXNzZXMuY2hpbGRMZWF2aW5nLCBleGl0S2V5ZnJhbWUsIERVUkFUSU9OLCAoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUudHJhbnNpdGlvbnMuZWFzaW5nLmVhc2VJbk91dCwgdG91Y2hSaXBwbGVDbGFzc2VzLmNoaWxkUHVsc2F0ZSwgcHVsc2F0ZUtleWZyYW1lLCAoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUudHJhbnNpdGlvbnMuZWFzaW5nLmVhc2VJbk91dCk7XG5cbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqXG4gKiBUT0RPIHY1OiBNYWtlIHByaXZhdGVcbiAqL1xuY29uc3QgVG91Y2hSaXBwbGUgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBUb3VjaFJpcHBsZShpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VEZWZhdWx0UHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlUb3VjaFJpcHBsZSdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNlbnRlcjogY2VudGVyUHJvcCA9IGZhbHNlLFxuICAgICAgY2xhc3NlcyA9IHt9LFxuICAgICAgY2xhc3NOYW1lXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IFtyaXBwbGVzLCBzZXRSaXBwbGVzXSA9IFJlYWN0LnVzZVN0YXRlKFtdKTtcbiAgY29uc3QgbmV4dEtleSA9IFJlYWN0LnVzZVJlZigwKTtcbiAgY29uc3QgcmlwcGxlQ2FsbGJhY2sgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHJpcHBsZUNhbGxiYWNrLmN1cnJlbnQpIHtcbiAgICAgIHJpcHBsZUNhbGxiYWNrLmN1cnJlbnQoKTtcbiAgICAgIHJpcHBsZUNhbGxiYWNrLmN1cnJlbnQgPSBudWxsO1xuICAgIH1cbiAgfSwgW3JpcHBsZXNdKTtcblxuICAvLyBVc2VkIHRvIGZpbHRlciBvdXQgbW91c2UgZW11bGF0ZWQgZXZlbnRzIG9uIG1vYmlsZS5cbiAgY29uc3QgaWdub3JpbmdNb3VzZURvd24gPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICAvLyBXZSB1c2UgYSB0aW1lciBpbiBvcmRlciB0byBvbmx5IHNob3cgdGhlIHJpcHBsZXMgZm9yIHRvdWNoIFwiY2xpY2tcIiBsaWtlIGV2ZW50cy5cbiAgLy8gV2UgZG9uJ3Qgd2FudCB0byBkaXNwbGF5IHRoZSByaXBwbGUgZm9yIHRvdWNoIHNjcm9sbCBldmVudHMuXG4gIGNvbnN0IHN0YXJ0VGltZXIgPSB1c2VUaW1lb3V0KCk7XG5cbiAgLy8gVGhpcyBpcyB0aGUgaG9vayBjYWxsZWQgb25jZSB0aGUgcHJldmlvdXMgdGltZW91dCBpcyByZWFkeS5cbiAgY29uc3Qgc3RhcnRUaW1lckNvbW1pdCA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgY29udGFpbmVyID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBzdGFydENvbW1pdCA9IFJlYWN0LnVzZUNhbGxiYWNrKHBhcmFtcyA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgcHVsc2F0ZSxcbiAgICAgIHJpcHBsZVgsXG4gICAgICByaXBwbGVZLFxuICAgICAgcmlwcGxlU2l6ZSxcbiAgICAgIGNiXG4gICAgfSA9IHBhcmFtcztcbiAgICBzZXRSaXBwbGVzKG9sZFJpcHBsZXMgPT4gWy4uLm9sZFJpcHBsZXMsIC8qI19fUFVSRV9fKi9fanN4KFRvdWNoUmlwcGxlUmlwcGxlLCB7XG4gICAgICBjbGFzc2VzOiB7XG4gICAgICAgIHJpcHBsZTogY2xzeChjbGFzc2VzLnJpcHBsZSwgdG91Y2hSaXBwbGVDbGFzc2VzLnJpcHBsZSksXG4gICAgICAgIHJpcHBsZVZpc2libGU6IGNsc3goY2xhc3Nlcy5yaXBwbGVWaXNpYmxlLCB0b3VjaFJpcHBsZUNsYXNzZXMucmlwcGxlVmlzaWJsZSksXG4gICAgICAgIHJpcHBsZVB1bHNhdGU6IGNsc3goY2xhc3Nlcy5yaXBwbGVQdWxzYXRlLCB0b3VjaFJpcHBsZUNsYXNzZXMucmlwcGxlUHVsc2F0ZSksXG4gICAgICAgIGNoaWxkOiBjbHN4KGNsYXNzZXMuY2hpbGQsIHRvdWNoUmlwcGxlQ2xhc3Nlcy5jaGlsZCksXG4gICAgICAgIGNoaWxkTGVhdmluZzogY2xzeChjbGFzc2VzLmNoaWxkTGVhdmluZywgdG91Y2hSaXBwbGVDbGFzc2VzLmNoaWxkTGVhdmluZyksXG4gICAgICAgIGNoaWxkUHVsc2F0ZTogY2xzeChjbGFzc2VzLmNoaWxkUHVsc2F0ZSwgdG91Y2hSaXBwbGVDbGFzc2VzLmNoaWxkUHVsc2F0ZSlcbiAgICAgIH0sXG4gICAgICB0aW1lb3V0OiBEVVJBVElPTixcbiAgICAgIHB1bHNhdGU6IHB1bHNhdGUsXG4gICAgICByaXBwbGVYOiByaXBwbGVYLFxuICAgICAgcmlwcGxlWTogcmlwcGxlWSxcbiAgICAgIHJpcHBsZVNpemU6IHJpcHBsZVNpemVcbiAgICB9LCBuZXh0S2V5LmN1cnJlbnQpXSk7XG4gICAgbmV4dEtleS5jdXJyZW50ICs9IDE7XG4gICAgcmlwcGxlQ2FsbGJhY2suY3VycmVudCA9IGNiO1xuICB9LCBbY2xhc3Nlc10pO1xuICBjb25zdCBzdGFydCA9IFJlYWN0LnVzZUNhbGxiYWNrKChldmVudCA9IHt9LCBvcHRpb25zID0ge30sIGNiID0gKCkgPT4ge30pID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBwdWxzYXRlID0gZmFsc2UsXG4gICAgICBjZW50ZXIgPSBjZW50ZXJQcm9wIHx8IG9wdGlvbnMucHVsc2F0ZSxcbiAgICAgIGZha2VFbGVtZW50ID0gZmFsc2UgLy8gRm9yIHRlc3QgcHVycG9zZXNcbiAgICB9ID0gb3B0aW9ucztcbiAgICBpZiAoKGV2ZW50ID09IG51bGwgPyB2b2lkIDAgOiBldmVudC50eXBlKSA9PT0gJ21vdXNlZG93bicgJiYgaWdub3JpbmdNb3VzZURvd24uY3VycmVudCkge1xuICAgICAgaWdub3JpbmdNb3VzZURvd24uY3VycmVudCA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoKGV2ZW50ID09IG51bGwgPyB2b2lkIDAgOiBldmVudC50eXBlKSA9PT0gJ3RvdWNoc3RhcnQnKSB7XG4gICAgICBpZ25vcmluZ01vdXNlRG93bi5jdXJyZW50ID0gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgZWxlbWVudCA9IGZha2VFbGVtZW50ID8gbnVsbCA6IGNvbnRhaW5lci5jdXJyZW50O1xuICAgIGNvbnN0IHJlY3QgPSBlbGVtZW50ID8gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSA6IHtcbiAgICAgIHdpZHRoOiAwLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogMCxcbiAgICAgIHRvcDogMFxuICAgIH07XG5cbiAgICAvLyBHZXQgdGhlIHNpemUgb2YgdGhlIHJpcHBsZVxuICAgIGxldCByaXBwbGVYO1xuICAgIGxldCByaXBwbGVZO1xuICAgIGxldCByaXBwbGVTaXplO1xuICAgIGlmIChjZW50ZXIgfHwgZXZlbnQgPT09IHVuZGVmaW5lZCB8fCBldmVudC5jbGllbnRYID09PSAwICYmIGV2ZW50LmNsaWVudFkgPT09IDAgfHwgIWV2ZW50LmNsaWVudFggJiYgIWV2ZW50LnRvdWNoZXMpIHtcbiAgICAgIHJpcHBsZVggPSBNYXRoLnJvdW5kKHJlY3Qud2lkdGggLyAyKTtcbiAgICAgIHJpcHBsZVkgPSBNYXRoLnJvdW5kKHJlY3QuaGVpZ2h0IC8gMik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY2xpZW50WCxcbiAgICAgICAgY2xpZW50WVxuICAgICAgfSA9IGV2ZW50LnRvdWNoZXMgJiYgZXZlbnQudG91Y2hlcy5sZW5ndGggPiAwID8gZXZlbnQudG91Y2hlc1swXSA6IGV2ZW50O1xuICAgICAgcmlwcGxlWCA9IE1hdGgucm91bmQoY2xpZW50WCAtIHJlY3QubGVmdCk7XG4gICAgICByaXBwbGVZID0gTWF0aC5yb3VuZChjbGllbnRZIC0gcmVjdC50b3ApO1xuICAgIH1cbiAgICBpZiAoY2VudGVyKSB7XG4gICAgICByaXBwbGVTaXplID0gTWF0aC5zcXJ0KCgyICogcmVjdC53aWR0aCAqKiAyICsgcmVjdC5oZWlnaHQgKiogMikgLyAzKTtcblxuICAgICAgLy8gRm9yIHNvbWUgcmVhc29uIHRoZSBhbmltYXRpb24gaXMgYnJva2VuIG9uIE1vYmlsZSBDaHJvbWUgaWYgdGhlIHNpemUgaXMgZXZlbi5cbiAgICAgIGlmIChyaXBwbGVTaXplICUgMiA9PT0gMCkge1xuICAgICAgICByaXBwbGVTaXplICs9IDE7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHNpemVYID0gTWF0aC5tYXgoTWF0aC5hYnMoKGVsZW1lbnQgPyBlbGVtZW50LmNsaWVudFdpZHRoIDogMCkgLSByaXBwbGVYKSwgcmlwcGxlWCkgKiAyICsgMjtcbiAgICAgIGNvbnN0IHNpemVZID0gTWF0aC5tYXgoTWF0aC5hYnMoKGVsZW1lbnQgPyBlbGVtZW50LmNsaWVudEhlaWdodCA6IDApIC0gcmlwcGxlWSksIHJpcHBsZVkpICogMiArIDI7XG4gICAgICByaXBwbGVTaXplID0gTWF0aC5zcXJ0KHNpemVYICoqIDIgKyBzaXplWSAqKiAyKTtcbiAgICB9XG5cbiAgICAvLyBUb3VjaGUgZGV2aWNlc1xuICAgIGlmIChldmVudCAhPSBudWxsICYmIGV2ZW50LnRvdWNoZXMpIHtcbiAgICAgIC8vIGNoZWNrIHRoYXQgdGhpcyBpc24ndCBhbm90aGVyIHRvdWNoc3RhcnQgZHVlIHRvIG11bHRpdG91Y2hcbiAgICAgIC8vIG90aGVyd2lzZSB3ZSB3aWxsIG9ubHkgY2xlYXIgYSBzaW5nbGUgdGltZXIgd2hlbiB1bm1vdW50aW5nIHdoaWxlIHR3b1xuICAgICAgLy8gYXJlIHJ1bm5pbmdcbiAgICAgIGlmIChzdGFydFRpbWVyQ29tbWl0LmN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgICAgLy8gUHJlcGFyZSB0aGUgcmlwcGxlIGVmZmVjdC5cbiAgICAgICAgc3RhcnRUaW1lckNvbW1pdC5jdXJyZW50ID0gKCkgPT4ge1xuICAgICAgICAgIHN0YXJ0Q29tbWl0KHtcbiAgICAgICAgICAgIHB1bHNhdGUsXG4gICAgICAgICAgICByaXBwbGVYLFxuICAgICAgICAgICAgcmlwcGxlWSxcbiAgICAgICAgICAgIHJpcHBsZVNpemUsXG4gICAgICAgICAgICBjYlxuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICAvLyBEZWxheSB0aGUgZXhlY3V0aW9uIG9mIHRoZSByaXBwbGUgZWZmZWN0LlxuICAgICAgICAvLyBXZSBoYXZlIHRvIG1ha2UgYSB0cmFkZW9mZiB3aXRoIHRoaXMgZGVsYXkgdmFsdWUuXG4gICAgICAgIHN0YXJ0VGltZXIuc3RhcnQoREVMQVlfUklQUExFLCAoKSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXJ0VGltZXJDb21taXQuY3VycmVudCkge1xuICAgICAgICAgICAgc3RhcnRUaW1lckNvbW1pdC5jdXJyZW50KCk7XG4gICAgICAgICAgICBzdGFydFRpbWVyQ29tbWl0LmN1cnJlbnQgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXJ0Q29tbWl0KHtcbiAgICAgICAgcHVsc2F0ZSxcbiAgICAgICAgcmlwcGxlWCxcbiAgICAgICAgcmlwcGxlWSxcbiAgICAgICAgcmlwcGxlU2l6ZSxcbiAgICAgICAgY2JcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgW2NlbnRlclByb3AsIHN0YXJ0Q29tbWl0LCBzdGFydFRpbWVyXSk7XG4gIGNvbnN0IHB1bHNhdGUgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc3RhcnQoe30sIHtcbiAgICAgIHB1bHNhdGU6IHRydWVcbiAgICB9KTtcbiAgfSwgW3N0YXJ0XSk7XG4gIGNvbnN0IHN0b3AgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQsIGNiKSA9PiB7XG4gICAgc3RhcnRUaW1lci5jbGVhcigpO1xuXG4gICAgLy8gVGhlIHRvdWNoIGludGVyYWN0aW9uIG9jY3VycyB0b28gcXVpY2tseS5cbiAgICAvLyBXZSBzdGlsbCB3YW50IHRvIHNob3cgcmlwcGxlIGVmZmVjdC5cbiAgICBpZiAoKGV2ZW50ID09IG51bGwgPyB2b2lkIDAgOiBldmVudC50eXBlKSA9PT0gJ3RvdWNoZW5kJyAmJiBzdGFydFRpbWVyQ29tbWl0LmN1cnJlbnQpIHtcbiAgICAgIHN0YXJ0VGltZXJDb21taXQuY3VycmVudCgpO1xuICAgICAgc3RhcnRUaW1lckNvbW1pdC5jdXJyZW50ID0gbnVsbDtcbiAgICAgIHN0YXJ0VGltZXIuc3RhcnQoMCwgKCkgPT4ge1xuICAgICAgICBzdG9wKGV2ZW50LCBjYik7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3RhcnRUaW1lckNvbW1pdC5jdXJyZW50ID0gbnVsbDtcbiAgICBzZXRSaXBwbGVzKG9sZFJpcHBsZXMgPT4ge1xuICAgICAgaWYgKG9sZFJpcHBsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gb2xkUmlwcGxlcy5zbGljZSgxKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvbGRSaXBwbGVzO1xuICAgIH0pO1xuICAgIHJpcHBsZUNhbGxiYWNrLmN1cnJlbnQgPSBjYjtcbiAgfSwgW3N0YXJ0VGltZXJdKTtcbiAgUmVhY3QudXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+ICh7XG4gICAgcHVsc2F0ZSxcbiAgICBzdGFydCxcbiAgICBzdG9wXG4gIH0pLCBbcHVsc2F0ZSwgc3RhcnQsIHN0b3BdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFRvdWNoUmlwcGxlUm9vdCwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xzeCh0b3VjaFJpcHBsZUNsYXNzZXMucm9vdCwgY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIHJlZjogY29udGFpbmVyXG4gIH0sIG90aGVyLCB7XG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KFRyYW5zaXRpb25Hcm91cCwge1xuICAgICAgY29tcG9uZW50OiBudWxsLFxuICAgICAgZXhpdDogdHJ1ZSxcbiAgICAgIGNoaWxkcmVuOiByaXBwbGVzXG4gICAgfSlcbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBUb3VjaFJpcHBsZS5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSByaXBwbGUgc3RhcnRzIGF0IHRoZSBjZW50ZXIgb2YgdGhlIGNvbXBvbmVudFxuICAgKiByYXRoZXIgdGhhbiBhdCB0aGUgcG9pbnQgb2YgaW50ZXJhY3Rpb24uXG4gICAqL1xuICBjZW50ZXI6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZ1xufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IFRvdWNoUmlwcGxlOyIsImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0QnV0dG9uQmFzZVV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpQnV0dG9uQmFzZScsIHNsb3QpO1xufVxuY29uc3QgYnV0dG9uQmFzZUNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlCdXR0b25CYXNlJywgWydyb290JywgJ2Rpc2FibGVkJywgJ2ZvY3VzVmlzaWJsZSddKTtcbmV4cG9ydCBkZWZhdWx0IGJ1dHRvbkJhc2VDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImFjdGlvblwiLCBcImNlbnRlclJpcHBsZVwiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29tcG9uZW50XCIsIFwiZGlzYWJsZWRcIiwgXCJkaXNhYmxlUmlwcGxlXCIsIFwiZGlzYWJsZVRvdWNoUmlwcGxlXCIsIFwiZm9jdXNSaXBwbGVcIiwgXCJmb2N1c1Zpc2libGVDbGFzc05hbWVcIiwgXCJMaW5rQ29tcG9uZW50XCIsIFwib25CbHVyXCIsIFwib25DbGlja1wiLCBcIm9uQ29udGV4dE1lbnVcIiwgXCJvbkRyYWdMZWF2ZVwiLCBcIm9uRm9jdXNcIiwgXCJvbkZvY3VzVmlzaWJsZVwiLCBcIm9uS2V5RG93blwiLCBcIm9uS2V5VXBcIiwgXCJvbk1vdXNlRG93blwiLCBcIm9uTW91c2VMZWF2ZVwiLCBcIm9uTW91c2VVcFwiLCBcIm9uVG91Y2hFbmRcIiwgXCJvblRvdWNoTW92ZVwiLCBcIm9uVG91Y2hTdGFydFwiLCBcInRhYkluZGV4XCIsIFwiVG91Y2hSaXBwbGVQcm9wc1wiLCBcInRvdWNoUmlwcGxlUmVmXCIsIFwidHlwZVwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCByZWZUeXBlIGZyb20gJ0BtdWkvdXRpbHMvcmVmVHlwZSc7XG5pbXBvcnQgZWxlbWVudFR5cGVBY2NlcHRpbmdSZWYgZnJvbSAnQG11aS91dGlscy9lbGVtZW50VHlwZUFjY2VwdGluZ1JlZic7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsgdXNlRGVmYXVsdFByb3BzIH0gZnJvbSAnLi4vRGVmYXVsdFByb3BzUHJvdmlkZXInO1xuaW1wb3J0IHVzZUZvcmtSZWYgZnJvbSAnLi4vdXRpbHMvdXNlRm9ya1JlZic7XG5pbXBvcnQgdXNlRXZlbnRDYWxsYmFjayBmcm9tICcuLi91dGlscy91c2VFdmVudENhbGxiYWNrJztcbmltcG9ydCB1c2VJc0ZvY3VzVmlzaWJsZSBmcm9tICcuLi91dGlscy91c2VJc0ZvY3VzVmlzaWJsZSc7XG5pbXBvcnQgVG91Y2hSaXBwbGUgZnJvbSAnLi9Ub3VjaFJpcHBsZSc7XG5pbXBvcnQgYnV0dG9uQmFzZUNsYXNzZXMsIHsgZ2V0QnV0dG9uQmFzZVV0aWxpdHlDbGFzcyB9IGZyb20gJy4vYnV0dG9uQmFzZUNsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBkaXNhYmxlZCxcbiAgICBmb2N1c1Zpc2libGUsXG4gICAgZm9jdXNWaXNpYmxlQ2xhc3NOYW1lLFxuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIGRpc2FibGVkICYmICdkaXNhYmxlZCcsIGZvY3VzVmlzaWJsZSAmJiAnZm9jdXNWaXNpYmxlJ11cbiAgfTtcbiAgY29uc3QgY29tcG9zZWRDbGFzc2VzID0gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldEJ1dHRvbkJhc2VVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xuICBpZiAoZm9jdXNWaXNpYmxlICYmIGZvY3VzVmlzaWJsZUNsYXNzTmFtZSkge1xuICAgIGNvbXBvc2VkQ2xhc3Nlcy5yb290ICs9IGAgJHtmb2N1c1Zpc2libGVDbGFzc05hbWV9YDtcbiAgfVxuICByZXR1cm4gY29tcG9zZWRDbGFzc2VzO1xufTtcbmV4cG9ydCBjb25zdCBCdXR0b25CYXNlUm9vdCA9IHN0eWxlZCgnYnV0dG9uJywge1xuICBuYW1lOiAnTXVpQnV0dG9uQmFzZScsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMucm9vdFxufSkoe1xuICBkaXNwbGF5OiAnaW5saW5lLWZsZXgnLFxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gIFdlYmtpdFRhcEhpZ2hsaWdodENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gIC8vIFJlc2V0IGRlZmF1bHQgdmFsdWVcbiAgLy8gV2UgZGlzYWJsZSB0aGUgZm9jdXMgcmluZyBmb3IgbW91c2UsIHRvdWNoIGFuZCBrZXlib2FyZCB1c2Vycy5cbiAgb3V0bGluZTogMCxcbiAgYm9yZGVyOiAwLFxuICBtYXJnaW46IDAsXG4gIC8vIFJlbW92ZSB0aGUgbWFyZ2luIGluIFNhZmFyaVxuICBib3JkZXJSYWRpdXM6IDAsXG4gIHBhZGRpbmc6IDAsXG4gIC8vIFJlbW92ZSB0aGUgcGFkZGluZyBpbiBGaXJlZm94XG4gIGN1cnNvcjogJ3BvaW50ZXInLFxuICB1c2VyU2VsZWN0OiAnbm9uZScsXG4gIHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnLFxuICBNb3pBcHBlYXJhbmNlOiAnbm9uZScsXG4gIC8vIFJlc2V0XG4gIFdlYmtpdEFwcGVhcmFuY2U6ICdub25lJyxcbiAgLy8gUmVzZXRcbiAgdGV4dERlY29yYXRpb246ICdub25lJyxcbiAgLy8gU28gd2UgdGFrZSBwcmVjZWRlbnQgb3ZlciB0aGUgc3R5bGUgb2YgYSBuYXRpdmUgPGEgLz4gZWxlbWVudC5cbiAgY29sb3I6ICdpbmhlcml0JyxcbiAgJyY6Oi1tb3otZm9jdXMtaW5uZXInOiB7XG4gICAgYm9yZGVyU3R5bGU6ICdub25lJyAvLyBSZW1vdmUgRmlyZWZveCBkb3R0ZWQgb3V0bGluZS5cbiAgfSxcbiAgW2AmLiR7YnV0dG9uQmFzZUNsYXNzZXMuZGlzYWJsZWR9YF06IHtcbiAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gICAgLy8gRGlzYWJsZSBsaW5rIGludGVyYWN0aW9uc1xuICAgIGN1cnNvcjogJ2RlZmF1bHQnXG4gIH0sXG4gICdAbWVkaWEgcHJpbnQnOiB7XG4gICAgY29sb3JBZGp1c3Q6ICdleGFjdCdcbiAgfVxufSk7XG5cbi8qKlxuICogYEJ1dHRvbkJhc2VgIGNvbnRhaW5zIGFzIGZldyBzdHlsZXMgYXMgcG9zc2libGUuXG4gKiBJdCBhaW1zIHRvIGJlIGEgc2ltcGxlIGJ1aWxkaW5nIGJsb2NrIGZvciBjcmVhdGluZyBhIGJ1dHRvbi5cbiAqIEl0IGNvbnRhaW5zIGEgbG9hZCBvZiBzdHlsZSByZXNldCBhbmQgc29tZSBmb2N1cy9yaXBwbGUgbG9naWMuXG4gKi9cbmNvbnN0IEJ1dHRvbkJhc2UgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBCdXR0b25CYXNlKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZURlZmF1bHRQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUJ1dHRvbkJhc2UnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBhY3Rpb24sXG4gICAgICBjZW50ZXJSaXBwbGUgPSBmYWxzZSxcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29tcG9uZW50ID0gJ2J1dHRvbicsXG4gICAgICBkaXNhYmxlZCA9IGZhbHNlLFxuICAgICAgZGlzYWJsZVJpcHBsZSA9IGZhbHNlLFxuICAgICAgZGlzYWJsZVRvdWNoUmlwcGxlID0gZmFsc2UsXG4gICAgICBmb2N1c1JpcHBsZSA9IGZhbHNlLFxuICAgICAgTGlua0NvbXBvbmVudCA9ICdhJyxcbiAgICAgIG9uQmx1cixcbiAgICAgIG9uQ2xpY2ssXG4gICAgICBvbkNvbnRleHRNZW51LFxuICAgICAgb25EcmFnTGVhdmUsXG4gICAgICBvbkZvY3VzLFxuICAgICAgb25Gb2N1c1Zpc2libGUsXG4gICAgICBvbktleURvd24sXG4gICAgICBvbktleVVwLFxuICAgICAgb25Nb3VzZURvd24sXG4gICAgICBvbk1vdXNlTGVhdmUsXG4gICAgICBvbk1vdXNlVXAsXG4gICAgICBvblRvdWNoRW5kLFxuICAgICAgb25Ub3VjaE1vdmUsXG4gICAgICBvblRvdWNoU3RhcnQsXG4gICAgICB0YWJJbmRleCA9IDAsXG4gICAgICBUb3VjaFJpcHBsZVByb3BzLFxuICAgICAgdG91Y2hSaXBwbGVSZWYsXG4gICAgICB0eXBlXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IGJ1dHRvblJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgcmlwcGxlUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBoYW5kbGVSaXBwbGVSZWYgPSB1c2VGb3JrUmVmKHJpcHBsZVJlZiwgdG91Y2hSaXBwbGVSZWYpO1xuICBjb25zdCB7XG4gICAgaXNGb2N1c1Zpc2libGVSZWYsXG4gICAgb25Gb2N1czogaGFuZGxlRm9jdXNWaXNpYmxlLFxuICAgIG9uQmx1cjogaGFuZGxlQmx1clZpc2libGUsXG4gICAgcmVmOiBmb2N1c1Zpc2libGVSZWZcbiAgfSA9IHVzZUlzRm9jdXNWaXNpYmxlKCk7XG4gIGNvbnN0IFtmb2N1c1Zpc2libGUsIHNldEZvY3VzVmlzaWJsZV0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGlmIChkaXNhYmxlZCAmJiBmb2N1c1Zpc2libGUpIHtcbiAgICBzZXRGb2N1c1Zpc2libGUoZmFsc2UpO1xuICB9XG4gIFJlYWN0LnVzZUltcGVyYXRpdmVIYW5kbGUoYWN0aW9uLCAoKSA9PiAoe1xuICAgIGZvY3VzVmlzaWJsZTogKCkgPT4ge1xuICAgICAgc2V0Rm9jdXNWaXNpYmxlKHRydWUpO1xuICAgICAgYnV0dG9uUmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICB9XG4gIH0pLCBbXSk7XG4gIGNvbnN0IFttb3VudGVkU3RhdGUsIHNldE1vdW50ZWRTdGF0ZV0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0TW91bnRlZFN0YXRlKHRydWUpO1xuICB9LCBbXSk7XG4gIGNvbnN0IGVuYWJsZVRvdWNoUmlwcGxlID0gbW91bnRlZFN0YXRlICYmICFkaXNhYmxlUmlwcGxlICYmICFkaXNhYmxlZDtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZm9jdXNWaXNpYmxlICYmIGZvY3VzUmlwcGxlICYmICFkaXNhYmxlUmlwcGxlICYmIG1vdW50ZWRTdGF0ZSkge1xuICAgICAgcmlwcGxlUmVmLmN1cnJlbnQucHVsc2F0ZSgpO1xuICAgIH1cbiAgfSwgW2Rpc2FibGVSaXBwbGUsIGZvY3VzUmlwcGxlLCBmb2N1c1Zpc2libGUsIG1vdW50ZWRTdGF0ZV0pO1xuICBmdW5jdGlvbiB1c2VSaXBwbGVIYW5kbGVyKHJpcHBsZUFjdGlvbiwgZXZlbnRDYWxsYmFjaywgc2tpcFJpcHBsZUFjdGlvbiA9IGRpc2FibGVUb3VjaFJpcHBsZSkge1xuICAgIHJldHVybiB1c2VFdmVudENhbGxiYWNrKGV2ZW50ID0+IHtcbiAgICAgIGlmIChldmVudENhbGxiYWNrKSB7XG4gICAgICAgIGV2ZW50Q2FsbGJhY2soZXZlbnQpO1xuICAgICAgfVxuICAgICAgY29uc3QgaWdub3JlID0gc2tpcFJpcHBsZUFjdGlvbjtcbiAgICAgIGlmICghaWdub3JlICYmIHJpcHBsZVJlZi5jdXJyZW50KSB7XG4gICAgICAgIHJpcHBsZVJlZi5jdXJyZW50W3JpcHBsZUFjdGlvbl0oZXZlbnQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gIH1cbiAgY29uc3QgaGFuZGxlTW91c2VEb3duID0gdXNlUmlwcGxlSGFuZGxlcignc3RhcnQnLCBvbk1vdXNlRG93bik7XG4gIGNvbnN0IGhhbmRsZUNvbnRleHRNZW51ID0gdXNlUmlwcGxlSGFuZGxlcignc3RvcCcsIG9uQ29udGV4dE1lbnUpO1xuICBjb25zdCBoYW5kbGVEcmFnTGVhdmUgPSB1c2VSaXBwbGVIYW5kbGVyKCdzdG9wJywgb25EcmFnTGVhdmUpO1xuICBjb25zdCBoYW5kbGVNb3VzZVVwID0gdXNlUmlwcGxlSGFuZGxlcignc3RvcCcsIG9uTW91c2VVcCk7XG4gIGNvbnN0IGhhbmRsZU1vdXNlTGVhdmUgPSB1c2VSaXBwbGVIYW5kbGVyKCdzdG9wJywgZXZlbnQgPT4ge1xuICAgIGlmIChmb2N1c1Zpc2libGUpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICAgIGlmIChvbk1vdXNlTGVhdmUpIHtcbiAgICAgIG9uTW91c2VMZWF2ZShldmVudCk7XG4gICAgfVxuICB9KTtcbiAgY29uc3QgaGFuZGxlVG91Y2hTdGFydCA9IHVzZVJpcHBsZUhhbmRsZXIoJ3N0YXJ0Jywgb25Ub3VjaFN0YXJ0KTtcbiAgY29uc3QgaGFuZGxlVG91Y2hFbmQgPSB1c2VSaXBwbGVIYW5kbGVyKCdzdG9wJywgb25Ub3VjaEVuZCk7XG4gIGNvbnN0IGhhbmRsZVRvdWNoTW92ZSA9IHVzZVJpcHBsZUhhbmRsZXIoJ3N0b3AnLCBvblRvdWNoTW92ZSk7XG4gIGNvbnN0IGhhbmRsZUJsdXIgPSB1c2VSaXBwbGVIYW5kbGVyKCdzdG9wJywgZXZlbnQgPT4ge1xuICAgIGhhbmRsZUJsdXJWaXNpYmxlKGV2ZW50KTtcbiAgICBpZiAoaXNGb2N1c1Zpc2libGVSZWYuY3VycmVudCA9PT0gZmFsc2UpIHtcbiAgICAgIHNldEZvY3VzVmlzaWJsZShmYWxzZSk7XG4gICAgfVxuICAgIGlmIChvbkJsdXIpIHtcbiAgICAgIG9uQmx1cihldmVudCk7XG4gICAgfVxuICB9LCBmYWxzZSk7XG4gIGNvbnN0IGhhbmRsZUZvY3VzID0gdXNlRXZlbnRDYWxsYmFjayhldmVudCA9PiB7XG4gICAgLy8gRml4IGZvciBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzc3NjlcbiAgICBpZiAoIWJ1dHRvblJlZi5jdXJyZW50KSB7XG4gICAgICBidXR0b25SZWYuY3VycmVudCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQ7XG4gICAgfVxuICAgIGhhbmRsZUZvY3VzVmlzaWJsZShldmVudCk7XG4gICAgaWYgKGlzRm9jdXNWaXNpYmxlUmVmLmN1cnJlbnQgPT09IHRydWUpIHtcbiAgICAgIHNldEZvY3VzVmlzaWJsZSh0cnVlKTtcbiAgICAgIGlmIChvbkZvY3VzVmlzaWJsZSkge1xuICAgICAgICBvbkZvY3VzVmlzaWJsZShldmVudCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChvbkZvY3VzKSB7XG4gICAgICBvbkZvY3VzKGV2ZW50KTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBpc05vbk5hdGl2ZUJ1dHRvbiA9ICgpID0+IHtcbiAgICBjb25zdCBidXR0b24gPSBidXR0b25SZWYuY3VycmVudDtcbiAgICByZXR1cm4gY29tcG9uZW50ICYmIGNvbXBvbmVudCAhPT0gJ2J1dHRvbicgJiYgIShidXR0b24udGFnTmFtZSA9PT0gJ0EnICYmIGJ1dHRvbi5ocmVmKTtcbiAgfTtcblxuICAvKipcbiAgICogSUUxMSBzaGltIGZvciBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvS2V5Ym9hcmRFdmVudC9yZXBlYXRcbiAgICovXG4gIGNvbnN0IGtleWRvd25SZWYgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICBjb25zdCBoYW5kbGVLZXlEb3duID0gdXNlRXZlbnRDYWxsYmFjayhldmVudCA9PiB7XG4gICAgLy8gQ2hlY2sgaWYga2V5IGlzIGFscmVhZHkgZG93biB0byBhdm9pZCByZXBlYXRzIGJlaW5nIGNvdW50ZWQgYXMgbXVsdGlwbGUgYWN0aXZhdGlvbnNcbiAgICBpZiAoZm9jdXNSaXBwbGUgJiYgIWtleWRvd25SZWYuY3VycmVudCAmJiBmb2N1c1Zpc2libGUgJiYgcmlwcGxlUmVmLmN1cnJlbnQgJiYgZXZlbnQua2V5ID09PSAnICcpIHtcbiAgICAgIGtleWRvd25SZWYuY3VycmVudCA9IHRydWU7XG4gICAgICByaXBwbGVSZWYuY3VycmVudC5zdG9wKGV2ZW50LCAoKSA9PiB7XG4gICAgICAgIHJpcHBsZVJlZi5jdXJyZW50LnN0YXJ0KGV2ZW50KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSBldmVudC5jdXJyZW50VGFyZ2V0ICYmIGlzTm9uTmF0aXZlQnV0dG9uKCkgJiYgZXZlbnQua2V5ID09PSAnICcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICAgIGlmIChvbktleURvd24pIHtcbiAgICAgIG9uS2V5RG93bihldmVudCk7XG4gICAgfVxuXG4gICAgLy8gS2V5Ym9hcmQgYWNjZXNzaWJpbGl0eSBmb3Igbm9uIGludGVyYWN0aXZlIGVsZW1lbnRzXG4gICAgaWYgKGV2ZW50LnRhcmdldCA9PT0gZXZlbnQuY3VycmVudFRhcmdldCAmJiBpc05vbk5hdGl2ZUJ1dHRvbigpICYmIGV2ZW50LmtleSA9PT0gJ0VudGVyJyAmJiAhZGlzYWJsZWQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBpZiAob25DbGljaykge1xuICAgICAgICBvbkNsaWNrKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICBjb25zdCBoYW5kbGVLZXlVcCA9IHVzZUV2ZW50Q2FsbGJhY2soZXZlbnQgPT4ge1xuICAgIC8vIGNhbGxpbmcgcHJldmVudERlZmF1bHQgaW4ga2V5VXAgb24gYSA8YnV0dG9uPiB3aWxsIG5vdCBkaXNwYXRjaCBhIGNsaWNrIGV2ZW50IGlmIFNwYWNlIGlzIHByZXNzZWRcbiAgICAvLyBodHRwczovL2NvZGVzYW5kYm94LmlvL3Avc2FuZGJveC9idXR0b24ta2V5dXAtcHJldmVudGRlZmF1bHQtZG43ZjBcbiAgICBpZiAoZm9jdXNSaXBwbGUgJiYgZXZlbnQua2V5ID09PSAnICcgJiYgcmlwcGxlUmVmLmN1cnJlbnQgJiYgZm9jdXNWaXNpYmxlICYmICFldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICBrZXlkb3duUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIHJpcHBsZVJlZi5jdXJyZW50LnN0b3AoZXZlbnQsICgpID0+IHtcbiAgICAgICAgcmlwcGxlUmVmLmN1cnJlbnQucHVsc2F0ZShldmVudCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKG9uS2V5VXApIHtcbiAgICAgIG9uS2V5VXAoZXZlbnQpO1xuICAgIH1cblxuICAgIC8vIEtleWJvYXJkIGFjY2Vzc2liaWxpdHkgZm9yIG5vbiBpbnRlcmFjdGl2ZSBlbGVtZW50c1xuICAgIGlmIChvbkNsaWNrICYmIGV2ZW50LnRhcmdldCA9PT0gZXZlbnQuY3VycmVudFRhcmdldCAmJiBpc05vbk5hdGl2ZUJ1dHRvbigpICYmIGV2ZW50LmtleSA9PT0gJyAnICYmICFldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICBvbkNsaWNrKGV2ZW50KTtcbiAgICB9XG4gIH0pO1xuICBsZXQgQ29tcG9uZW50UHJvcCA9IGNvbXBvbmVudDtcbiAgaWYgKENvbXBvbmVudFByb3AgPT09ICdidXR0b24nICYmIChvdGhlci5ocmVmIHx8IG90aGVyLnRvKSkge1xuICAgIENvbXBvbmVudFByb3AgPSBMaW5rQ29tcG9uZW50O1xuICB9XG4gIGNvbnN0IGJ1dHRvblByb3BzID0ge307XG4gIGlmIChDb21wb25lbnRQcm9wID09PSAnYnV0dG9uJykge1xuICAgIGJ1dHRvblByb3BzLnR5cGUgPSB0eXBlID09PSB1bmRlZmluZWQgPyAnYnV0dG9uJyA6IHR5cGU7XG4gICAgYnV0dG9uUHJvcHMuZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgfSBlbHNlIHtcbiAgICBpZiAoIW90aGVyLmhyZWYgJiYgIW90aGVyLnRvKSB7XG4gICAgICBidXR0b25Qcm9wcy5yb2xlID0gJ2J1dHRvbic7XG4gICAgfVxuICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgYnV0dG9uUHJvcHNbJ2FyaWEtZGlzYWJsZWQnXSA9IGRpc2FibGVkO1xuICAgIH1cbiAgfVxuICBjb25zdCBoYW5kbGVSZWYgPSB1c2VGb3JrUmVmKHJlZiwgZm9jdXNWaXNpYmxlUmVmLCBidXR0b25SZWYpO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rc1xuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAoZW5hYmxlVG91Y2hSaXBwbGUgJiYgIXJpcHBsZVJlZi5jdXJyZW50KSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoWydNVUk6IFRoZSBgY29tcG9uZW50YCBwcm9wIHByb3ZpZGVkIHRvIEJ1dHRvbkJhc2UgaXMgaW52YWxpZC4nLCAnUGxlYXNlIG1ha2Ugc3VyZSB0aGUgY2hpbGRyZW4gcHJvcCBpcyByZW5kZXJlZCBpbiB0aGlzIGN1c3RvbSBjb21wb25lbnQuJ10uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH0sIFtlbmFibGVUb3VjaFJpcHBsZV0pO1xuICB9XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjZW50ZXJSaXBwbGUsXG4gICAgY29tcG9uZW50LFxuICAgIGRpc2FibGVkLFxuICAgIGRpc2FibGVSaXBwbGUsXG4gICAgZGlzYWJsZVRvdWNoUmlwcGxlLFxuICAgIGZvY3VzUmlwcGxlLFxuICAgIHRhYkluZGV4LFxuICAgIGZvY3VzVmlzaWJsZVxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKEJ1dHRvbkJhc2VSb290LCBfZXh0ZW5kcyh7XG4gICAgYXM6IENvbXBvbmVudFByb3AsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIG9uQmx1cjogaGFuZGxlQmx1cixcbiAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgIG9uQ29udGV4dE1lbnU6IGhhbmRsZUNvbnRleHRNZW51LFxuICAgIG9uRm9jdXM6IGhhbmRsZUZvY3VzLFxuICAgIG9uS2V5RG93bjogaGFuZGxlS2V5RG93bixcbiAgICBvbktleVVwOiBoYW5kbGVLZXlVcCxcbiAgICBvbk1vdXNlRG93bjogaGFuZGxlTW91c2VEb3duLFxuICAgIG9uTW91c2VMZWF2ZTogaGFuZGxlTW91c2VMZWF2ZSxcbiAgICBvbk1vdXNlVXA6IGhhbmRsZU1vdXNlVXAsXG4gICAgb25EcmFnTGVhdmU6IGhhbmRsZURyYWdMZWF2ZSxcbiAgICBvblRvdWNoRW5kOiBoYW5kbGVUb3VjaEVuZCxcbiAgICBvblRvdWNoTW92ZTogaGFuZGxlVG91Y2hNb3ZlLFxuICAgIG9uVG91Y2hTdGFydDogaGFuZGxlVG91Y2hTdGFydCxcbiAgICByZWY6IGhhbmRsZVJlZixcbiAgICB0YWJJbmRleDogZGlzYWJsZWQgPyAtMSA6IHRhYkluZGV4LFxuICAgIHR5cGU6IHR5cGVcbiAgfSwgYnV0dG9uUHJvcHMsIG90aGVyLCB7XG4gICAgY2hpbGRyZW46IFtjaGlsZHJlbiwgZW5hYmxlVG91Y2hSaXBwbGUgP1xuICAgIC8qI19fUFVSRV9fKi9cbiAgICAvKiBUb3VjaFJpcHBsZSBpcyBvbmx5IG5lZWRlZCBjbGllbnQtc2lkZSwgeDIgYm9vc3Qgb24gdGhlIHNlcnZlci4gKi9cbiAgICBfanN4KFRvdWNoUmlwcGxlLCBfZXh0ZW5kcyh7XG4gICAgICByZWY6IGhhbmRsZVJpcHBsZVJlZixcbiAgICAgIGNlbnRlcjogY2VudGVyUmlwcGxlXG4gICAgfSwgVG91Y2hSaXBwbGVQcm9wcykpIDogbnVsbF1cbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBCdXR0b25CYXNlLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgV2FybmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgLy8g4pSCIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4g4pSCXG4gIC8vIOKUgiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIOKUglxuICAvLyDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgLyoqXG4gICAqIEEgcmVmIGZvciBpbXBlcmF0aXZlIGFjdGlvbnMuXG4gICAqIEl0IGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIGBmb2N1c1Zpc2libGUoKWAgYWN0aW9uLlxuICAgKi9cbiAgYWN0aW9uOiByZWZUeXBlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgcmlwcGxlcyBhcmUgY2VudGVyZWQuXG4gICAqIFRoZXkgd29uJ3Qgc3RhcnQgYXQgdGhlIGN1cnNvciBpbnRlcmFjdGlvbiBwb3NpdGlvbi5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGNlbnRlclJpcHBsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogZWxlbWVudFR5cGVBY2NlcHRpbmdSZWYsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSByaXBwbGUgZWZmZWN0IGlzIGRpc2FibGVkLlxuICAgKlxuICAgKiDimqDvuI8gV2l0aG91dCBhIHJpcHBsZSB0aGVyZSBpcyBubyBzdHlsaW5nIGZvciA6Zm9jdXMtdmlzaWJsZSBieSBkZWZhdWx0LiBCZSBzdXJlXG4gICAqIHRvIGhpZ2hsaWdodCB0aGUgZWxlbWVudCBieSBhcHBseWluZyBzZXBhcmF0ZSBzdHlsZXMgd2l0aCB0aGUgYC5NdWktZm9jdXNWaXNpYmxlYCBjbGFzcy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVSaXBwbGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgdG91Y2ggcmlwcGxlIGVmZmVjdCBpcyBkaXNhYmxlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVUb3VjaFJpcHBsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBiYXNlIGJ1dHRvbiB3aWxsIGhhdmUgYSBrZXlib2FyZCBmb2N1cyByaXBwbGUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBmb2N1c1JpcHBsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGlzIHByb3AgY2FuIGhlbHAgaWRlbnRpZnkgd2hpY2ggZWxlbWVudCBoYXMga2V5Ym9hcmQgZm9jdXMuXG4gICAqIFRoZSBjbGFzcyBuYW1lIHdpbGwgYmUgYXBwbGllZCB3aGVuIHRoZSBlbGVtZW50IGdhaW5zIHRoZSBmb2N1cyB0aHJvdWdoIGtleWJvYXJkIGludGVyYWN0aW9uLlxuICAgKiBJdCdzIGEgcG9seWZpbGwgZm9yIHRoZSBbQ1NTIDpmb2N1cy12aXNpYmxlIHNlbGVjdG9yXShodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvc2VsZWN0b3JzLTQvI3RoZS1mb2N1cy12aXNpYmxlLXBzZXVkbykuXG4gICAqIFRoZSByYXRpb25hbGUgZm9yIHVzaW5nIHRoaXMgZmVhdHVyZSBbaXMgZXhwbGFpbmVkIGhlcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9XSUNHL2ZvY3VzLXZpc2libGUvYmxvYi9IRUFEL2V4cGxhaW5lci5tZCkuXG4gICAqIEEgW3BvbHlmaWxsIGNhbiBiZSB1c2VkXShodHRwczovL2dpdGh1Yi5jb20vV0lDRy9mb2N1cy12aXNpYmxlKSB0byBhcHBseSBhIGBmb2N1cy12aXNpYmxlYCBjbGFzcyB0byBvdGhlciBjb21wb25lbnRzXG4gICAqIGlmIG5lZWRlZC5cbiAgICovXG4gIGZvY3VzVmlzaWJsZUNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGhyZWY6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLmFueSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCB0byByZW5kZXIgYSBsaW5rIHdoZW4gdGhlIGBocmVmYCBwcm9wIGlzIHByb3ZpZGVkLlxuICAgKiBAZGVmYXVsdCAnYSdcbiAgICovXG4gIExpbmtDb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uQmx1cjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uQ29udGV4dE1lbnU6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25EcmFnTGVhdmU6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Gb2N1czogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgZm9jdXNlZCB3aXRoIGEga2V5Ym9hcmQuXG4gICAqIFdlIHRyaWdnZXIgYSBgb25Gb2N1c2AgY2FsbGJhY2sgdG9vLlxuICAgKi9cbiAgb25Gb2N1c1Zpc2libGU6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25LZXlEb3duOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uS2V5VXA6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Nb3VzZURvd246IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Nb3VzZUxlYXZlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uTW91c2VVcDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvblRvdWNoRW5kOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uVG91Y2hNb3ZlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uVG91Y2hTdGFydDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICB0YWJJbmRleDogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIGBUb3VjaFJpcHBsZWAgZWxlbWVudC5cbiAgICovXG4gIFRvdWNoUmlwcGxlUHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBBIHJlZiB0aGF0IHBvaW50cyB0byB0aGUgYFRvdWNoUmlwcGxlYCBlbGVtZW50LlxuICAgKi9cbiAgdG91Y2hSaXBwbGVSZWY6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGN1cnJlbnQ6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBwdWxzYXRlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgICAgc3RhcnQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgICBzdG9wOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG4gICAgfSlcbiAgfSldKSxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2J1dHRvbicsICdyZXNldCcsICdzdWJtaXQnXSksIFByb3BUeXBlcy5zdHJpbmddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IEJ1dHRvbkJhc2U7IiwiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRJY29uQnV0dG9uVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlJY29uQnV0dG9uJywgc2xvdCk7XG59XG5jb25zdCBpY29uQnV0dG9uQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUljb25CdXR0b24nLCBbJ3Jvb3QnLCAnZGlzYWJsZWQnLCAnY29sb3JJbmhlcml0JywgJ2NvbG9yUHJpbWFyeScsICdjb2xvclNlY29uZGFyeScsICdjb2xvckVycm9yJywgJ2NvbG9ySW5mbycsICdjb2xvclN1Y2Nlc3MnLCAnY29sb3JXYXJuaW5nJywgJ2VkZ2VTdGFydCcsICdlZGdlRW5kJywgJ3NpemVTbWFsbCcsICdzaXplTWVkaXVtJywgJ3NpemVMYXJnZSddKTtcbmV4cG9ydCBkZWZhdWx0IGljb25CdXR0b25DbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImVkZ2VcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbG9yXCIsIFwiZGlzYWJsZWRcIiwgXCJkaXNhYmxlRm9jdXNSaXBwbGVcIiwgXCJzaXplXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IGNoYWluUHJvcFR5cGVzIGZyb20gJ0BtdWkvdXRpbHMvY2hhaW5Qcm9wVHlwZXMnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHsgYWxwaGEgfSBmcm9tICdAbXVpL3N5c3RlbS9jb2xvck1hbmlwdWxhdG9yJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyB1c2VEZWZhdWx0UHJvcHMgfSBmcm9tICcuLi9EZWZhdWx0UHJvcHNQcm92aWRlcic7XG5pbXBvcnQgQnV0dG9uQmFzZSBmcm9tICcuLi9CdXR0b25CYXNlJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IGljb25CdXR0b25DbGFzc2VzLCB7IGdldEljb25CdXR0b25VdGlsaXR5Q2xhc3MgfSBmcm9tICcuL2ljb25CdXR0b25DbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBkaXNhYmxlZCxcbiAgICBjb2xvcixcbiAgICBlZGdlLFxuICAgIHNpemVcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIGRpc2FibGVkICYmICdkaXNhYmxlZCcsIGNvbG9yICE9PSAnZGVmYXVsdCcgJiYgYGNvbG9yJHtjYXBpdGFsaXplKGNvbG9yKX1gLCBlZGdlICYmIGBlZGdlJHtjYXBpdGFsaXplKGVkZ2UpfWAsIGBzaXplJHtjYXBpdGFsaXplKHNpemUpfWBdXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0SWNvbkJ1dHRvblV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuY29uc3QgSWNvbkJ1dHRvblJvb3QgPSBzdHlsZWQoQnV0dG9uQmFzZSwge1xuICBuYW1lOiAnTXVpSWNvbkJ1dHRvbicsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCBvd25lclN0YXRlLmNvbG9yICE9PSAnZGVmYXVsdCcgJiYgc3R5bGVzW2Bjb2xvciR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLmNvbG9yKX1gXSwgb3duZXJTdGF0ZS5lZGdlICYmIHN0eWxlc1tgZWRnZSR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLmVkZ2UpfWBdLCBzdHlsZXNbYHNpemUke2NhcGl0YWxpemUob3duZXJTdGF0ZS5zaXplKX1gXV07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gIGZsZXg6ICcwIDAgYXV0bycsXG4gIGZvbnRTaXplOiB0aGVtZS50eXBvZ3JhcGh5LnB4VG9SZW0oMjQpLFxuICBwYWRkaW5nOiA4LFxuICBib3JkZXJSYWRpdXM6ICc1MCUnLFxuICBvdmVyZmxvdzogJ3Zpc2libGUnLFxuICAvLyBFeHBsaWNpdGx5IHNldCB0aGUgZGVmYXVsdCB2YWx1ZSB0byBzb2x2ZSBhIGJ1ZyBvbiBJRTExLlxuICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuYWN0aW9uLmFjdGl2ZSxcbiAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdiYWNrZ3JvdW5kLWNvbG9yJywge1xuICAgIGR1cmF0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5zaG9ydGVzdFxuICB9KVxufSwgIW93bmVyU3RhdGUuZGlzYWJsZVJpcHBsZSAmJiB7XG4gICcmOmhvdmVyJzoge1xuICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IGByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlLmFjdGlvbi5hY3RpdmVDaGFubmVsfSAvICR7dGhlbWUudmFycy5wYWxldHRlLmFjdGlvbi5ob3Zlck9wYWNpdHl9KWAgOiBhbHBoYSh0aGVtZS5wYWxldHRlLmFjdGlvbi5hY3RpdmUsIHRoZW1lLnBhbGV0dGUuYWN0aW9uLmhvdmVyT3BhY2l0eSksXG4gICAgLy8gUmVzZXQgb24gdG91Y2ggZGV2aWNlcywgaXQgZG9lc24ndCBhZGQgc3BlY2lmaWNpdHlcbiAgICAnQG1lZGlhIChob3Zlcjogbm9uZSknOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCdcbiAgICB9XG4gIH1cbn0sIG93bmVyU3RhdGUuZWRnZSA9PT0gJ3N0YXJ0JyAmJiB7XG4gIG1hcmdpbkxlZnQ6IG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyA/IC0zIDogLTEyXG59LCBvd25lclN0YXRlLmVkZ2UgPT09ICdlbmQnICYmIHtcbiAgbWFyZ2luUmlnaHQ6IG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyA/IC0zIDogLTEyXG59KSwgKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IHtcbiAgdmFyIF9wYWxldHRlO1xuICBjb25zdCBwYWxldHRlID0gKF9wYWxldHRlID0gKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUpID09IG51bGwgPyB2b2lkIDAgOiBfcGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXTtcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBvd25lclN0YXRlLmNvbG9yID09PSAnaW5oZXJpdCcgJiYge1xuICAgIGNvbG9yOiAnaW5oZXJpdCdcbiAgfSwgb3duZXJTdGF0ZS5jb2xvciAhPT0gJ2luaGVyaXQnICYmIG93bmVyU3RhdGUuY29sb3IgIT09ICdkZWZhdWx0JyAmJiBfZXh0ZW5kcyh7XG4gICAgY29sb3I6IHBhbGV0dGUgPT0gbnVsbCA/IHZvaWQgMCA6IHBhbGV0dGUubWFpblxuICB9LCAhb3duZXJTdGF0ZS5kaXNhYmxlUmlwcGxlICYmIHtcbiAgICAnJjpob3Zlcic6IF9leHRlbmRzKHt9LCBwYWxldHRlICYmIHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IGByZ2JhKCR7cGFsZXR0ZS5tYWluQ2hhbm5lbH0gLyAke3RoZW1lLnZhcnMucGFsZXR0ZS5hY3Rpb24uaG92ZXJPcGFjaXR5fSlgIDogYWxwaGEocGFsZXR0ZS5tYWluLCB0aGVtZS5wYWxldHRlLmFjdGlvbi5ob3Zlck9wYWNpdHkpXG4gICAgfSwge1xuICAgICAgLy8gUmVzZXQgb24gdG91Y2ggZGV2aWNlcywgaXQgZG9lc24ndCBhZGQgc3BlY2lmaWNpdHlcbiAgICAgICdAbWVkaWEgKGhvdmVyOiBub25lKSc6IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnXG4gICAgICB9XG4gICAgfSlcbiAgfSksIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gICAgcGFkZGluZzogNSxcbiAgICBmb250U2l6ZTogdGhlbWUudHlwb2dyYXBoeS5weFRvUmVtKDE4KVxuICB9LCBvd25lclN0YXRlLnNpemUgPT09ICdsYXJnZScgJiYge1xuICAgIHBhZGRpbmc6IDEyLFxuICAgIGZvbnRTaXplOiB0aGVtZS50eXBvZ3JhcGh5LnB4VG9SZW0oMjgpXG4gIH0sIHtcbiAgICBbYCYuJHtpY29uQnV0dG9uQ2xhc3Nlcy5kaXNhYmxlZH1gXToge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmFjdGlvbi5kaXNhYmxlZFxuICAgIH1cbiAgfSk7XG59KTtcblxuLyoqXG4gKiBSZWZlciB0byB0aGUgW0ljb25zXSgvbWF0ZXJpYWwtdWkvaWNvbnMvKSBzZWN0aW9uIG9mIHRoZSBkb2N1bWVudGF0aW9uXG4gKiByZWdhcmRpbmcgdGhlIGF2YWlsYWJsZSBpY29uIG9wdGlvbnMuXG4gKi9cbmNvbnN0IEljb25CdXR0b24gPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBJY29uQnV0dG9uKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZURlZmF1bHRQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUljb25CdXR0b24nXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBlZGdlID0gZmFsc2UsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbG9yID0gJ2RlZmF1bHQnLFxuICAgICAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgICAgIGRpc2FibGVGb2N1c1JpcHBsZSA9IGZhbHNlLFxuICAgICAgc2l6ZSA9ICdtZWRpdW0nXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBlZGdlLFxuICAgIGNvbG9yLFxuICAgIGRpc2FibGVkLFxuICAgIGRpc2FibGVGb2N1c1JpcHBsZSxcbiAgICBzaXplXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChJY29uQnV0dG9uUm9vdCwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgY2VudGVyUmlwcGxlOiB0cnVlLFxuICAgIGZvY3VzUmlwcGxlOiAhZGlzYWJsZUZvY3VzUmlwcGxlLFxuICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICByZWY6IHJlZlxuICB9LCBvdGhlciwge1xuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gSWNvbkJ1dHRvbi5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFdhcm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIOKUglxuICAvLyDilIIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICDilIJcbiAgLy8g4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gIC8qKlxuICAgKiBUaGUgaWNvbiB0byBkaXNwbGF5LlxuICAgKi9cbiAgY2hpbGRyZW46IGNoYWluUHJvcFR5cGVzKFByb3BUeXBlcy5ub2RlLCBwcm9wcyA9PiB7XG4gICAgY29uc3QgZm91bmQgPSBSZWFjdC5DaGlsZHJlbi50b0FycmF5KHByb3BzLmNoaWxkcmVuKS5zb21lKGNoaWxkID0+IC8qI19fUFVSRV9fKi9SZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZCkgJiYgY2hpbGQucHJvcHMub25DbGljayk7XG4gICAgaWYgKGZvdW5kKSB7XG4gICAgICByZXR1cm4gbmV3IEVycm9yKFsnTVVJOiBZb3UgYXJlIHByb3ZpZGluZyBhbiBvbkNsaWNrIGV2ZW50IGxpc3RlbmVyIHRvIGEgY2hpbGQgb2YgYSBidXR0b24gZWxlbWVudC4nLCAnUHJlZmVyIGFwcGx5aW5nIGl0IHRvIHRoZSBJY29uQnV0dG9uIGRpcmVjdGx5LicsICdUaGlzIGd1YXJhbnRlZXMgdGhhdCB0aGUgd2hvbGUgPGJ1dHRvbj4gd2lsbCBiZSByZXNwb25zaXZlIHRvIGNsaWNrIGV2ZW50cy4nXS5qb2luKCdcXG4nKSk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9KSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29sb3Igb2YgdGhlIGNvbXBvbmVudC5cbiAgICogSXQgc3VwcG9ydHMgYm90aCBkZWZhdWx0IGFuZCBjdXN0b20gdGhlbWUgY29sb3JzLCB3aGljaCBjYW4gYmUgYWRkZWQgYXMgc2hvd24gaW4gdGhlXG4gICAqIFtwYWxldHRlIGN1c3RvbWl6YXRpb24gZ3VpZGVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL3BhbGV0dGUvI2N1c3RvbS1jb2xvcnMpLlxuICAgKiBAZGVmYXVsdCAnZGVmYXVsdCdcbiAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2luaGVyaXQnLCAnZGVmYXVsdCcsICdwcmltYXJ5JywgJ3NlY29uZGFyeScsICdlcnJvcicsICdpbmZvJywgJ3N1Y2Nlc3MnLCAnd2FybmluZyddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgIGtleWJvYXJkIGZvY3VzIHJpcHBsZSBpcyBkaXNhYmxlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVGb2N1c1JpcHBsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSByaXBwbGUgZWZmZWN0IGlzIGRpc2FibGVkLlxuICAgKlxuICAgKiDimqDvuI8gV2l0aG91dCBhIHJpcHBsZSB0aGVyZSBpcyBubyBzdHlsaW5nIGZvciA6Zm9jdXMtdmlzaWJsZSBieSBkZWZhdWx0LiBCZSBzdXJlXG4gICAqIHRvIGhpZ2hsaWdodCB0aGUgZWxlbWVudCBieSBhcHBseWluZyBzZXBhcmF0ZSBzdHlsZXMgd2l0aCB0aGUgYC5NdWktZm9jdXNWaXNpYmxlYCBjbGFzcy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVSaXBwbGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgZ2l2ZW4sIHVzZXMgYSBuZWdhdGl2ZSBtYXJnaW4gdG8gY291bnRlcmFjdCB0aGUgcGFkZGluZyBvbiBvbmVcbiAgICogc2lkZSAodGhpcyBpcyBvZnRlbiBoZWxwZnVsIGZvciBhbGlnbmluZyB0aGUgbGVmdCBvciByaWdodFxuICAgKiBzaWRlIG9mIHRoZSBpY29uIHdpdGggY29udGVudCBhYm92ZSBvciBiZWxvdywgd2l0aG91dCBydWluaW5nIHRoZSBib3JkZXJcbiAgICogc2l6ZSBhbmQgc2hhcGUpLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZWRnZTogUHJvcFR5cGVzLm9uZU9mKFsnZW5kJywgJ3N0YXJ0JywgZmFsc2VdKSxcbiAgLyoqXG4gICAqIFRoZSBzaXplIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIGBzbWFsbGAgaXMgZXF1aXZhbGVudCB0byB0aGUgZGVuc2UgYnV0dG9uIHN0eWxpbmcuXG4gICAqIEBkZWZhdWx0ICdtZWRpdW0nXG4gICAqL1xuICBzaXplOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ3NtYWxsJywgJ21lZGl1bScsICdsYXJnZSddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgSWNvbkJ1dHRvbjsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmNvbnN0IHVzZVByZXZpb3VzUHJvcHMgPSB2YWx1ZSA9PiB7XG4gIGNvbnN0IHJlZiA9IFJlYWN0LnVzZVJlZih7fSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmVmLmN1cnJlbnQgPSB2YWx1ZTtcbiAgfSk7XG4gIHJldHVybiByZWYuY3VycmVudDtcbn07XG5leHBvcnQgZGVmYXVsdCB1c2VQcmV2aW91c1Byb3BzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHsgdXNlUHJldmlvdXNQcm9wcyB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuLyoqXG4gKlxuICogRGVtb3M6XG4gKlxuICogLSBbQmFkZ2VdKGh0dHBzOi8vbmV4dC5tdWkuY29tL2Jhc2UtdWkvcmVhY3QtYmFkZ2UvI2hvb2spXG4gKlxuICogQVBJOlxuICpcbiAqIC0gW3VzZUJhZGdlIEFQSV0oaHR0cHM6Ly9uZXh0Lm11aS5jb20vYmFzZS11aS9yZWFjdC1iYWRnZS9ob29rcy1hcGkvI3VzZS1iYWRnZSlcbiAqL1xuZnVuY3Rpb24gdXNlQmFkZ2UocGFyYW1ldGVycykge1xuICBjb25zdCB7XG4gICAgYmFkZ2VDb250ZW50OiBiYWRnZUNvbnRlbnRQcm9wLFxuICAgIGludmlzaWJsZTogaW52aXNpYmxlUHJvcCA9IGZhbHNlLFxuICAgIG1heDogbWF4UHJvcCA9IDk5LFxuICAgIHNob3daZXJvID0gZmFsc2VcbiAgfSA9IHBhcmFtZXRlcnM7XG4gIGNvbnN0IHByZXZQcm9wcyA9IHVzZVByZXZpb3VzUHJvcHMoe1xuICAgIGJhZGdlQ29udGVudDogYmFkZ2VDb250ZW50UHJvcCxcbiAgICBtYXg6IG1heFByb3BcbiAgfSk7XG4gIGxldCBpbnZpc2libGUgPSBpbnZpc2libGVQcm9wO1xuICBpZiAoaW52aXNpYmxlUHJvcCA9PT0gZmFsc2UgJiYgYmFkZ2VDb250ZW50UHJvcCA9PT0gMCAmJiAhc2hvd1plcm8pIHtcbiAgICBpbnZpc2libGUgPSB0cnVlO1xuICB9XG4gIGNvbnN0IHtcbiAgICBiYWRnZUNvbnRlbnQsXG4gICAgbWF4ID0gbWF4UHJvcFxuICB9ID0gaW52aXNpYmxlID8gcHJldlByb3BzIDogcGFyYW1ldGVycztcbiAgY29uc3QgZGlzcGxheVZhbHVlID0gYmFkZ2VDb250ZW50ICYmIE51bWJlcihiYWRnZUNvbnRlbnQpID4gbWF4ID8gYCR7bWF4fStgIDogYmFkZ2VDb250ZW50O1xuICByZXR1cm4ge1xuICAgIGJhZGdlQ29udGVudCxcbiAgICBpbnZpc2libGUsXG4gICAgbWF4LFxuICAgIGRpc3BsYXlWYWx1ZVxuICB9O1xufVxuZXhwb3J0IGRlZmF1bHQgdXNlQmFkZ2U7IiwiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRCYWRnZVV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpQmFkZ2UnLCBzbG90KTtcbn1cbmNvbnN0IGJhZGdlQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUJhZGdlJywgWydyb290JywgJ2JhZGdlJywgJ2RvdCcsICdzdGFuZGFyZCcsICdhbmNob3JPcmlnaW5Ub3BSaWdodCcsICdhbmNob3JPcmlnaW5Cb3R0b21SaWdodCcsICdhbmNob3JPcmlnaW5Ub3BMZWZ0JywgJ2FuY2hvck9yaWdpbkJvdHRvbUxlZnQnLCAnaW52aXNpYmxlJywgJ2NvbG9yRXJyb3InLCAnY29sb3JJbmZvJywgJ2NvbG9yUHJpbWFyeScsICdjb2xvclNlY29uZGFyeScsICdjb2xvclN1Y2Nlc3MnLCAnY29sb3JXYXJuaW5nJywgJ292ZXJsYXBSZWN0YW5ndWxhcicsICdvdmVybGFwQ2lyY3VsYXInLFxuLy8gVE9ETzogdjYgcmVtb3ZlIHRoZSBvdmVybGFwIHZhbHVlIGZyb20gdGhlc2UgY2xhc3Mga2V5c1xuJ2FuY2hvck9yaWdpblRvcExlZnRDaXJjdWxhcicsICdhbmNob3JPcmlnaW5Ub3BMZWZ0UmVjdGFuZ3VsYXInLCAnYW5jaG9yT3JpZ2luVG9wUmlnaHRDaXJjdWxhcicsICdhbmNob3JPcmlnaW5Ub3BSaWdodFJlY3Rhbmd1bGFyJywgJ2FuY2hvck9yaWdpbkJvdHRvbUxlZnRDaXJjdWxhcicsICdhbmNob3JPcmlnaW5Cb3R0b21MZWZ0UmVjdGFuZ3VsYXInLCAnYW5jaG9yT3JpZ2luQm90dG9tUmlnaHRDaXJjdWxhcicsICdhbmNob3JPcmlnaW5Cb3R0b21SaWdodFJlY3Rhbmd1bGFyJ10pO1xuZXhwb3J0IGRlZmF1bHQgYmFkZ2VDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImFuY2hvck9yaWdpblwiLCBcImNsYXNzTmFtZVwiLCBcImNsYXNzZXNcIiwgXCJjb21wb25lbnRcIiwgXCJjb21wb25lbnRzXCIsIFwiY29tcG9uZW50c1Byb3BzXCIsIFwiY2hpbGRyZW5cIiwgXCJvdmVybGFwXCIsIFwiY29sb3JcIiwgXCJpbnZpc2libGVcIiwgXCJtYXhcIiwgXCJiYWRnZUNvbnRlbnRcIiwgXCJzbG90c1wiLCBcInNsb3RQcm9wc1wiLCBcInNob3daZXJvXCIsIFwidmFyaWFudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB1c2VQcmV2aW91c1Byb3BzIGZyb20gJ0BtdWkvdXRpbHMvdXNlUHJldmlvdXNQcm9wcyc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgdXNlU2xvdFByb3BzIGZyb20gJ0BtdWkvdXRpbHMvdXNlU2xvdFByb3BzJztcbmltcG9ydCB1c2VCYWRnZSBmcm9tICcuL3VzZUJhZGdlJztcbmltcG9ydCB7IHN0eWxlZCB9IGZyb20gJy4uL3plcm8tc3R5bGVkJztcbmltcG9ydCB7IHVzZURlZmF1bHRQcm9wcyB9IGZyb20gJy4uL0RlZmF1bHRQcm9wc1Byb3ZpZGVyJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IGJhZGdlQ2xhc3NlcywgeyBnZXRCYWRnZVV0aWxpdHlDbGFzcyB9IGZyb20gJy4vYmFkZ2VDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCBSQURJVVNfU1RBTkRBUkQgPSAxMDtcbmNvbnN0IFJBRElVU19ET1QgPSA0O1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNvbG9yLFxuICAgIGFuY2hvck9yaWdpbixcbiAgICBpbnZpc2libGUsXG4gICAgb3ZlcmxhcCxcbiAgICB2YXJpYW50LFxuICAgIGNsYXNzZXMgPSB7fVxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290J10sXG4gICAgYmFkZ2U6IFsnYmFkZ2UnLCB2YXJpYW50LCBpbnZpc2libGUgJiYgJ2ludmlzaWJsZScsIGBhbmNob3JPcmlnaW4ke2NhcGl0YWxpemUoYW5jaG9yT3JpZ2luLnZlcnRpY2FsKX0ke2NhcGl0YWxpemUoYW5jaG9yT3JpZ2luLmhvcml6b250YWwpfWAsIGBhbmNob3JPcmlnaW4ke2NhcGl0YWxpemUoYW5jaG9yT3JpZ2luLnZlcnRpY2FsKX0ke2NhcGl0YWxpemUoYW5jaG9yT3JpZ2luLmhvcml6b250YWwpfSR7Y2FwaXRhbGl6ZShvdmVybGFwKX1gLCBgb3ZlcmxhcCR7Y2FwaXRhbGl6ZShvdmVybGFwKX1gLCBjb2xvciAhPT0gJ2RlZmF1bHQnICYmIGBjb2xvciR7Y2FwaXRhbGl6ZShjb2xvcil9YF1cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRCYWRnZVV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuY29uc3QgQmFkZ2VSb290ID0gc3R5bGVkKCdzcGFuJywge1xuICBuYW1lOiAnTXVpQmFkZ2UnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLnJvb3Rcbn0pKHtcbiAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXG4gIC8vIEZvciBjb3JyZWN0IGFsaWdubWVudCB3aXRoIHRoZSB0ZXh0LlxuICB2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJyxcbiAgZmxleFNocmluazogMFxufSk7XG5jb25zdCBCYWRnZUJhZGdlID0gc3R5bGVkKCdzcGFuJywge1xuICBuYW1lOiAnTXVpQmFkZ2UnLFxuICBzbG90OiAnQmFkZ2UnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLmJhZGdlLCBzdHlsZXNbb3duZXJTdGF0ZS52YXJpYW50XSwgc3R5bGVzW2BhbmNob3JPcmlnaW4ke2NhcGl0YWxpemUob3duZXJTdGF0ZS5hbmNob3JPcmlnaW4udmVydGljYWwpfSR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLmFuY2hvck9yaWdpbi5ob3Jpem9udGFsKX0ke2NhcGl0YWxpemUob3duZXJTdGF0ZS5vdmVybGFwKX1gXSwgb3duZXJTdGF0ZS5jb2xvciAhPT0gJ2RlZmF1bHQnICYmIHN0eWxlc1tgY29sb3Ike2NhcGl0YWxpemUob3duZXJTdGF0ZS5jb2xvcil9YF0sIG93bmVyU3RhdGUuaW52aXNpYmxlICYmIHN0eWxlcy5pbnZpc2libGVdO1xuICB9XG59KSgoe1xuICB0aGVtZVxufSkgPT4ge1xuICB2YXIgX3RoZW1lJHZhcnM7XG4gIHJldHVybiB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuICAgIGZsZXhXcmFwOiAnd3JhcCcsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIGFsaWduQ29udGVudDogJ2NlbnRlcicsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gICAgZm9udEZhbWlseTogdGhlbWUudHlwb2dyYXBoeS5mb250RmFtaWx5LFxuICAgIGZvbnRXZWlnaHQ6IHRoZW1lLnR5cG9ncmFwaHkuZm9udFdlaWdodE1lZGl1bSxcbiAgICBmb250U2l6ZTogdGhlbWUudHlwb2dyYXBoeS5weFRvUmVtKDEyKSxcbiAgICBtaW5XaWR0aDogUkFESVVTX1NUQU5EQVJEICogMixcbiAgICBsaW5lSGVpZ2h0OiAxLFxuICAgIHBhZGRpbmc6ICcwIDZweCcsXG4gICAgaGVpZ2h0OiBSQURJVVNfU1RBTkRBUkQgKiAyLFxuICAgIGJvcmRlclJhZGl1czogUkFESVVTX1NUQU5EQVJELFxuICAgIHpJbmRleDogMSxcbiAgICAvLyBSZW5kZXIgdGhlIGJhZGdlIG9uIHRvcCBvZiBwb3RlbnRpYWwgcmlwcGxlcy5cbiAgICB0cmFuc2l0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ3RyYW5zZm9ybScsIHtcbiAgICAgIGVhc2luZzogdGhlbWUudHJhbnNpdGlvbnMuZWFzaW5nLmVhc2VJbk91dCxcbiAgICAgIGR1cmF0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5lbnRlcmluZ1NjcmVlblxuICAgIH0pLFxuICAgIHZhcmlhbnRzOiBbLi4uT2JqZWN0LmtleXMoKChfdGhlbWUkdmFycyA9IHRoZW1lLnZhcnMpICE9IG51bGwgPyBfdGhlbWUkdmFycyA6IHRoZW1lKS5wYWxldHRlKS5maWx0ZXIoa2V5ID0+IHtcbiAgICAgIHZhciBfdGhlbWUkdmFyczIsIF90aGVtZSR2YXJzMztcbiAgICAgIHJldHVybiAoKF90aGVtZSR2YXJzMiA9IHRoZW1lLnZhcnMpICE9IG51bGwgPyBfdGhlbWUkdmFyczIgOiB0aGVtZSkucGFsZXR0ZVtrZXldLm1haW4gJiYgKChfdGhlbWUkdmFyczMgPSB0aGVtZS52YXJzKSAhPSBudWxsID8gX3RoZW1lJHZhcnMzIDogdGhlbWUpLnBhbGV0dGVba2V5XS5jb250cmFzdFRleHQ7XG4gICAgfSkubWFwKGNvbG9yID0+ICh7XG4gICAgICBwcm9wczoge1xuICAgICAgICBjb2xvclxuICAgICAgfSxcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGVbY29sb3JdLm1haW4sXG4gICAgICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZVtjb2xvcl0uY29udHJhc3RUZXh0XG4gICAgICB9XG4gICAgfSkpLCB7XG4gICAgICBwcm9wczoge1xuICAgICAgICB2YXJpYW50OiAnZG90J1xuICAgICAgfSxcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIGJvcmRlclJhZGl1czogUkFESVVTX0RPVCxcbiAgICAgICAgaGVpZ2h0OiBSQURJVVNfRE9UICogMixcbiAgICAgICAgbWluV2lkdGg6IFJBRElVU19ET1QgKiAyLFxuICAgICAgICBwYWRkaW5nOiAwXG4gICAgICB9XG4gICAgfSwge1xuICAgICAgcHJvcHM6ICh7XG4gICAgICAgIG93bmVyU3RhdGVcbiAgICAgIH0pID0+IG93bmVyU3RhdGUuYW5jaG9yT3JpZ2luLnZlcnRpY2FsID09PSAndG9wJyAmJiBvd25lclN0YXRlLmFuY2hvck9yaWdpbi5ob3Jpem9udGFsID09PSAncmlnaHQnICYmIG93bmVyU3RhdGUub3ZlcmxhcCA9PT0gJ3JlY3Rhbmd1bGFyJyxcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIHRvcDogMCxcbiAgICAgICAgcmlnaHQ6IDAsXG4gICAgICAgIHRyYW5zZm9ybTogJ3NjYWxlKDEpIHRyYW5zbGF0ZSg1MCUsIC01MCUpJyxcbiAgICAgICAgdHJhbnNmb3JtT3JpZ2luOiAnMTAwJSAwJScsXG4gICAgICAgIFtgJi4ke2JhZGdlQ2xhc3Nlcy5pbnZpc2libGV9YF06IHtcbiAgICAgICAgICB0cmFuc2Zvcm06ICdzY2FsZSgwKSB0cmFuc2xhdGUoNTAlLCAtNTAlKSdcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIHByb3BzOiAoe1xuICAgICAgICBvd25lclN0YXRlXG4gICAgICB9KSA9PiBvd25lclN0YXRlLmFuY2hvck9yaWdpbi52ZXJ0aWNhbCA9PT0gJ2JvdHRvbScgJiYgb3duZXJTdGF0ZS5hbmNob3JPcmlnaW4uaG9yaXpvbnRhbCA9PT0gJ3JpZ2h0JyAmJiBvd25lclN0YXRlLm92ZXJsYXAgPT09ICdyZWN0YW5ndWxhcicsXG4gICAgICBzdHlsZToge1xuICAgICAgICBib3R0b206IDAsXG4gICAgICAgIHJpZ2h0OiAwLFxuICAgICAgICB0cmFuc2Zvcm06ICdzY2FsZSgxKSB0cmFuc2xhdGUoNTAlLCA1MCUpJyxcbiAgICAgICAgdHJhbnNmb3JtT3JpZ2luOiAnMTAwJSAxMDAlJyxcbiAgICAgICAgW2AmLiR7YmFkZ2VDbGFzc2VzLmludmlzaWJsZX1gXToge1xuICAgICAgICAgIHRyYW5zZm9ybTogJ3NjYWxlKDApIHRyYW5zbGF0ZSg1MCUsIDUwJSknXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBwcm9wczogKHtcbiAgICAgICAgb3duZXJTdGF0ZVxuICAgICAgfSkgPT4gb3duZXJTdGF0ZS5hbmNob3JPcmlnaW4udmVydGljYWwgPT09ICd0b3AnICYmIG93bmVyU3RhdGUuYW5jaG9yT3JpZ2luLmhvcml6b250YWwgPT09ICdsZWZ0JyAmJiBvd25lclN0YXRlLm92ZXJsYXAgPT09ICdyZWN0YW5ndWxhcicsXG4gICAgICBzdHlsZToge1xuICAgICAgICB0b3A6IDAsXG4gICAgICAgIGxlZnQ6IDAsXG4gICAgICAgIHRyYW5zZm9ybTogJ3NjYWxlKDEpIHRyYW5zbGF0ZSgtNTAlLCAtNTAlKScsXG4gICAgICAgIHRyYW5zZm9ybU9yaWdpbjogJzAlIDAlJyxcbiAgICAgICAgW2AmLiR7YmFkZ2VDbGFzc2VzLmludmlzaWJsZX1gXToge1xuICAgICAgICAgIHRyYW5zZm9ybTogJ3NjYWxlKDApIHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSdcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIHByb3BzOiAoe1xuICAgICAgICBvd25lclN0YXRlXG4gICAgICB9KSA9PiBvd25lclN0YXRlLmFuY2hvck9yaWdpbi52ZXJ0aWNhbCA9PT0gJ2JvdHRvbScgJiYgb3duZXJTdGF0ZS5hbmNob3JPcmlnaW4uaG9yaXpvbnRhbCA9PT0gJ2xlZnQnICYmIG93bmVyU3RhdGUub3ZlcmxhcCA9PT0gJ3JlY3Rhbmd1bGFyJyxcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIGJvdHRvbTogMCxcbiAgICAgICAgbGVmdDogMCxcbiAgICAgICAgdHJhbnNmb3JtOiAnc2NhbGUoMSkgdHJhbnNsYXRlKC01MCUsIDUwJSknLFxuICAgICAgICB0cmFuc2Zvcm1PcmlnaW46ICcwJSAxMDAlJyxcbiAgICAgICAgW2AmLiR7YmFkZ2VDbGFzc2VzLmludmlzaWJsZX1gXToge1xuICAgICAgICAgIHRyYW5zZm9ybTogJ3NjYWxlKDApIHRyYW5zbGF0ZSgtNTAlLCA1MCUpJ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwge1xuICAgICAgcHJvcHM6ICh7XG4gICAgICAgIG93bmVyU3RhdGVcbiAgICAgIH0pID0+IG93bmVyU3RhdGUuYW5jaG9yT3JpZ2luLnZlcnRpY2FsID09PSAndG9wJyAmJiBvd25lclN0YXRlLmFuY2hvck9yaWdpbi5ob3Jpem9udGFsID09PSAncmlnaHQnICYmIG93bmVyU3RhdGUub3ZlcmxhcCA9PT0gJ2NpcmN1bGFyJyxcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIHRvcDogJzE0JScsXG4gICAgICAgIHJpZ2h0OiAnMTQlJyxcbiAgICAgICAgdHJhbnNmb3JtOiAnc2NhbGUoMSkgdHJhbnNsYXRlKDUwJSwgLTUwJSknLFxuICAgICAgICB0cmFuc2Zvcm1PcmlnaW46ICcxMDAlIDAlJyxcbiAgICAgICAgW2AmLiR7YmFkZ2VDbGFzc2VzLmludmlzaWJsZX1gXToge1xuICAgICAgICAgIHRyYW5zZm9ybTogJ3NjYWxlKDApIHRyYW5zbGF0ZSg1MCUsIC01MCUpJ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwge1xuICAgICAgcHJvcHM6ICh7XG4gICAgICAgIG93bmVyU3RhdGVcbiAgICAgIH0pID0+IG93bmVyU3RhdGUuYW5jaG9yT3JpZ2luLnZlcnRpY2FsID09PSAnYm90dG9tJyAmJiBvd25lclN0YXRlLmFuY2hvck9yaWdpbi5ob3Jpem9udGFsID09PSAncmlnaHQnICYmIG93bmVyU3RhdGUub3ZlcmxhcCA9PT0gJ2NpcmN1bGFyJyxcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIGJvdHRvbTogJzE0JScsXG4gICAgICAgIHJpZ2h0OiAnMTQlJyxcbiAgICAgICAgdHJhbnNmb3JtOiAnc2NhbGUoMSkgdHJhbnNsYXRlKDUwJSwgNTAlKScsXG4gICAgICAgIHRyYW5zZm9ybU9yaWdpbjogJzEwMCUgMTAwJScsXG4gICAgICAgIFtgJi4ke2JhZGdlQ2xhc3Nlcy5pbnZpc2libGV9YF06IHtcbiAgICAgICAgICB0cmFuc2Zvcm06ICdzY2FsZSgwKSB0cmFuc2xhdGUoNTAlLCA1MCUpJ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwge1xuICAgICAgcHJvcHM6ICh7XG4gICAgICAgIG93bmVyU3RhdGVcbiAgICAgIH0pID0+IG93bmVyU3RhdGUuYW5jaG9yT3JpZ2luLnZlcnRpY2FsID09PSAndG9wJyAmJiBvd25lclN0YXRlLmFuY2hvck9yaWdpbi5ob3Jpem9udGFsID09PSAnbGVmdCcgJiYgb3duZXJTdGF0ZS5vdmVybGFwID09PSAnY2lyY3VsYXInLFxuICAgICAgc3R5bGU6IHtcbiAgICAgICAgdG9wOiAnMTQlJyxcbiAgICAgICAgbGVmdDogJzE0JScsXG4gICAgICAgIHRyYW5zZm9ybTogJ3NjYWxlKDEpIHRyYW5zbGF0ZSgtNTAlLCAtNTAlKScsXG4gICAgICAgIHRyYW5zZm9ybU9yaWdpbjogJzAlIDAlJyxcbiAgICAgICAgW2AmLiR7YmFkZ2VDbGFzc2VzLmludmlzaWJsZX1gXToge1xuICAgICAgICAgIHRyYW5zZm9ybTogJ3NjYWxlKDApIHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSdcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIHByb3BzOiAoe1xuICAgICAgICBvd25lclN0YXRlXG4gICAgICB9KSA9PiBvd25lclN0YXRlLmFuY2hvck9yaWdpbi52ZXJ0aWNhbCA9PT0gJ2JvdHRvbScgJiYgb3duZXJTdGF0ZS5hbmNob3JPcmlnaW4uaG9yaXpvbnRhbCA9PT0gJ2xlZnQnICYmIG93bmVyU3RhdGUub3ZlcmxhcCA9PT0gJ2NpcmN1bGFyJyxcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIGJvdHRvbTogJzE0JScsXG4gICAgICAgIGxlZnQ6ICcxNCUnLFxuICAgICAgICB0cmFuc2Zvcm06ICdzY2FsZSgxKSB0cmFuc2xhdGUoLTUwJSwgNTAlKScsXG4gICAgICAgIHRyYW5zZm9ybU9yaWdpbjogJzAlIDEwMCUnLFxuICAgICAgICBbYCYuJHtiYWRnZUNsYXNzZXMuaW52aXNpYmxlfWBdOiB7XG4gICAgICAgICAgdHJhbnNmb3JtOiAnc2NhbGUoMCkgdHJhbnNsYXRlKC01MCUsIDUwJSknXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBwcm9wczoge1xuICAgICAgICBpbnZpc2libGU6IHRydWVcbiAgICAgIH0sXG4gICAgICBzdHlsZToge1xuICAgICAgICB0cmFuc2l0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ3RyYW5zZm9ybScsIHtcbiAgICAgICAgICBlYXNpbmc6IHRoZW1lLnRyYW5zaXRpb25zLmVhc2luZy5lYXNlSW5PdXQsXG4gICAgICAgICAgZHVyYXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLmxlYXZpbmdTY3JlZW5cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XVxuICB9O1xufSk7XG5jb25zdCBCYWRnZSA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIEJhZGdlKGluUHJvcHMsIHJlZikge1xuICB2YXIgX3JlZiwgX3Nsb3RzJHJvb3QsIF9yZWYyLCBfc2xvdHMkYmFkZ2UsIF9zbG90UHJvcHMkcm9vdCwgX3Nsb3RQcm9wcyRiYWRnZTtcbiAgY29uc3QgcHJvcHMgPSB1c2VEZWZhdWx0UHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlCYWRnZSdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGFuY2hvck9yaWdpbjogYW5jaG9yT3JpZ2luUHJvcCA9IHtcbiAgICAgICAgdmVydGljYWw6ICd0b3AnLFxuICAgICAgICBob3Jpem9udGFsOiAncmlnaHQnXG4gICAgICB9LFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29tcG9uZW50LFxuICAgICAgY29tcG9uZW50cyA9IHt9LFxuICAgICAgY29tcG9uZW50c1Byb3BzID0ge30sXG4gICAgICBjaGlsZHJlbixcbiAgICAgIG92ZXJsYXA6IG92ZXJsYXBQcm9wID0gJ3JlY3Rhbmd1bGFyJyxcbiAgICAgIGNvbG9yOiBjb2xvclByb3AgPSAnZGVmYXVsdCcsXG4gICAgICBpbnZpc2libGU6IGludmlzaWJsZVByb3AgPSBmYWxzZSxcbiAgICAgIG1heDogbWF4UHJvcCA9IDk5LFxuICAgICAgYmFkZ2VDb250ZW50OiBiYWRnZUNvbnRlbnRQcm9wLFxuICAgICAgc2xvdHMsXG4gICAgICBzbG90UHJvcHMsXG4gICAgICBzaG93WmVybyA9IGZhbHNlLFxuICAgICAgdmFyaWFudDogdmFyaWFudFByb3AgPSAnc3RhbmRhcmQnXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHtcbiAgICBiYWRnZUNvbnRlbnQsXG4gICAgaW52aXNpYmxlOiBpbnZpc2libGVGcm9tSG9vayxcbiAgICBtYXgsXG4gICAgZGlzcGxheVZhbHVlOiBkaXNwbGF5VmFsdWVGcm9tSG9va1xuICB9ID0gdXNlQmFkZ2Uoe1xuICAgIG1heDogbWF4UHJvcCxcbiAgICBpbnZpc2libGU6IGludmlzaWJsZVByb3AsXG4gICAgYmFkZ2VDb250ZW50OiBiYWRnZUNvbnRlbnRQcm9wLFxuICAgIHNob3daZXJvXG4gIH0pO1xuICBjb25zdCBwcmV2UHJvcHMgPSB1c2VQcmV2aW91c1Byb3BzKHtcbiAgICBhbmNob3JPcmlnaW46IGFuY2hvck9yaWdpblByb3AsXG4gICAgY29sb3I6IGNvbG9yUHJvcCxcbiAgICBvdmVybGFwOiBvdmVybGFwUHJvcCxcbiAgICB2YXJpYW50OiB2YXJpYW50UHJvcCxcbiAgICBiYWRnZUNvbnRlbnQ6IGJhZGdlQ29udGVudFByb3BcbiAgfSk7XG4gIGNvbnN0IGludmlzaWJsZSA9IGludmlzaWJsZUZyb21Ib29rIHx8IGJhZGdlQ29udGVudCA9PSBudWxsICYmIHZhcmlhbnRQcm9wICE9PSAnZG90JztcbiAgY29uc3Qge1xuICAgIGNvbG9yID0gY29sb3JQcm9wLFxuICAgIG92ZXJsYXAgPSBvdmVybGFwUHJvcCxcbiAgICBhbmNob3JPcmlnaW4gPSBhbmNob3JPcmlnaW5Qcm9wLFxuICAgIHZhcmlhbnQgPSB2YXJpYW50UHJvcFxuICB9ID0gaW52aXNpYmxlID8gcHJldlByb3BzIDogcHJvcHM7XG4gIGNvbnN0IGRpc3BsYXlWYWx1ZSA9IHZhcmlhbnQgIT09ICdkb3QnID8gZGlzcGxheVZhbHVlRnJvbUhvb2sgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBiYWRnZUNvbnRlbnQsXG4gICAgaW52aXNpYmxlLFxuICAgIG1heCxcbiAgICBkaXNwbGF5VmFsdWUsXG4gICAgc2hvd1plcm8sXG4gICAgYW5jaG9yT3JpZ2luLFxuICAgIGNvbG9yLFxuICAgIG92ZXJsYXAsXG4gICAgdmFyaWFudFxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuXG4gIC8vIHN1cHBvcnQgYm90aCBgc2xvdHNgIGFuZCBgY29tcG9uZW50c2AgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgY29uc3QgUm9vdFNsb3QgPSAoX3JlZiA9IChfc2xvdHMkcm9vdCA9IHNsb3RzID09IG51bGwgPyB2b2lkIDAgOiBzbG90cy5yb290KSAhPSBudWxsID8gX3Nsb3RzJHJvb3QgOiBjb21wb25lbnRzLlJvb3QpICE9IG51bGwgPyBfcmVmIDogQmFkZ2VSb290O1xuICBjb25zdCBCYWRnZVNsb3QgPSAoX3JlZjIgPSAoX3Nsb3RzJGJhZGdlID0gc2xvdHMgPT0gbnVsbCA/IHZvaWQgMCA6IHNsb3RzLmJhZGdlKSAhPSBudWxsID8gX3Nsb3RzJGJhZGdlIDogY29tcG9uZW50cy5CYWRnZSkgIT0gbnVsbCA/IF9yZWYyIDogQmFkZ2VCYWRnZTtcbiAgY29uc3Qgcm9vdFNsb3RQcm9wcyA9IChfc2xvdFByb3BzJHJvb3QgPSBzbG90UHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IHNsb3RQcm9wcy5yb290KSAhPSBudWxsID8gX3Nsb3RQcm9wcyRyb290IDogY29tcG9uZW50c1Byb3BzLnJvb3Q7XG4gIGNvbnN0IGJhZGdlU2xvdFByb3BzID0gKF9zbG90UHJvcHMkYmFkZ2UgPSBzbG90UHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IHNsb3RQcm9wcy5iYWRnZSkgIT0gbnVsbCA/IF9zbG90UHJvcHMkYmFkZ2UgOiBjb21wb25lbnRzUHJvcHMuYmFkZ2U7XG4gIGNvbnN0IHJvb3RQcm9wcyA9IHVzZVNsb3RQcm9wcyh7XG4gICAgZWxlbWVudFR5cGU6IFJvb3RTbG90LFxuICAgIGV4dGVybmFsU2xvdFByb3BzOiByb290U2xvdFByb3BzLFxuICAgIGV4dGVybmFsRm9yd2FyZGVkUHJvcHM6IG90aGVyLFxuICAgIGFkZGl0aW9uYWxQcm9wczoge1xuICAgICAgcmVmLFxuICAgICAgYXM6IGNvbXBvbmVudFxuICAgIH0sXG4gICAgb3duZXJTdGF0ZSxcbiAgICBjbGFzc05hbWU6IGNsc3gocm9vdFNsb3RQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogcm9vdFNsb3RQcm9wcy5jbGFzc05hbWUsIGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKVxuICB9KTtcbiAgY29uc3QgYmFkZ2VQcm9wcyA9IHVzZVNsb3RQcm9wcyh7XG4gICAgZWxlbWVudFR5cGU6IEJhZGdlU2xvdCxcbiAgICBleHRlcm5hbFNsb3RQcm9wczogYmFkZ2VTbG90UHJvcHMsXG4gICAgb3duZXJTdGF0ZSxcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5iYWRnZSwgYmFkZ2VTbG90UHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IGJhZGdlU2xvdFByb3BzLmNsYXNzTmFtZSlcbiAgfSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeHMoUm9vdFNsb3QsIF9leHRlbmRzKHt9LCByb290UHJvcHMsIHtcbiAgICBjaGlsZHJlbjogW2NoaWxkcmVuLCAvKiNfX1BVUkVfXyovX2pzeChCYWRnZVNsb3QsIF9leHRlbmRzKHt9LCBiYWRnZVByb3BzLCB7XG4gICAgICBjaGlsZHJlbjogZGlzcGxheVZhbHVlXG4gICAgfSkpXVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEJhZGdlLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgV2FybmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgLy8g4pSCIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4g4pSCXG4gIC8vIOKUgiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIOKUglxuICAvLyDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgLyoqXG4gICAqIFRoZSBhbmNob3Igb2YgdGhlIGJhZGdlLlxuICAgKiBAZGVmYXVsdCB7XG4gICAqICAgdmVydGljYWw6ICd0b3AnLFxuICAgKiAgIGhvcml6b250YWw6ICdyaWdodCcsXG4gICAqIH1cbiAgICovXG4gIGFuY2hvck9yaWdpbjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBob3Jpem9udGFsOiBQcm9wVHlwZXMub25lT2YoWydsZWZ0JywgJ3JpZ2h0J10pLmlzUmVxdWlyZWQsXG4gICAgdmVydGljYWw6IFByb3BUeXBlcy5vbmVPZihbJ2JvdHRvbScsICd0b3AnXSkuaXNSZXF1aXJlZFxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IHJlbmRlcmVkIHdpdGhpbiB0aGUgYmFkZ2UuXG4gICAqL1xuICBiYWRnZUNvbnRlbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogVGhlIGJhZGdlIHdpbGwgYmUgYWRkZWQgcmVsYXRpdmUgdG8gdGhpcyBub2RlLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJdCBzdXBwb3J0cyBib3RoIGRlZmF1bHQgYW5kIGN1c3RvbSB0aGVtZSBjb2xvcnMsIHdoaWNoIGNhbiBiZSBhZGRlZCBhcyBzaG93biBpbiB0aGVcbiAgICogW3BhbGV0dGUgY3VzdG9taXphdGlvbiBndWlkZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vcGFsZXR0ZS8jY3VzdG9tLWNvbG9ycykuXG4gICAqIEBkZWZhdWx0ICdkZWZhdWx0J1xuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnZGVmYXVsdCcsICdwcmltYXJ5JywgJ3NlY29uZGFyeScsICdlcnJvcicsICdpbmZvJywgJ3N1Y2Nlc3MnLCAnd2FybmluZyddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50cyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgc2xvdHNgIHByb3AuXG4gICAqIEl0J3MgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBgc2xvdHNgIHByb3AgaW5zdGVhZC5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGNvbXBvbmVudHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgQmFkZ2U6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgICBSb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgZXh0cmEgcHJvcHMgZm9yIHRoZSBzbG90IGNvbXBvbmVudHMuXG4gICAqIFlvdSBjYW4gb3ZlcnJpZGUgdGhlIGV4aXN0aW5nIHByb3BzIG9yIGFkZCBuZXcgb25lcy5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYHNsb3RQcm9wc2AgcHJvcC5cbiAgICogSXQncyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIGBzbG90UHJvcHNgIHByb3AgaW5zdGVhZCwgYXMgYGNvbXBvbmVudHNQcm9wc2Agd2lsbCBiZSBkZXByZWNhdGVkIGluIHRoZSBmdXR1cmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzUHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYmFkZ2U6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gICAgcm9vdDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxuICB9KSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGJhZGdlIGlzIGludmlzaWJsZS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGludmlzaWJsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBNYXggY291bnQgdG8gc2hvdy5cbiAgICogQGRlZmF1bHQgOTlcbiAgICovXG4gIG1heDogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIFdyYXBwZWQgc2hhcGUgdGhlIGJhZGdlIHNob3VsZCBvdmVybGFwLlxuICAgKiBAZGVmYXVsdCAncmVjdGFuZ3VsYXInXG4gICAqL1xuICBvdmVybGFwOiBQcm9wVHlwZXMub25lT2YoWydjaXJjdWxhcicsICdyZWN0YW5ndWxhciddKSxcbiAgLyoqXG4gICAqIENvbnRyb2xzIHdoZXRoZXIgdGhlIGJhZGdlIGlzIGhpZGRlbiB3aGVuIGBiYWRnZUNvbnRlbnRgIGlzIHplcm8uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBzaG93WmVybzogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgcHJvcHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZSB0aGUgQmFkZ2UuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90UHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYmFkZ2U6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gICAgcm9vdDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUgdGhlIEJhZGdlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYmFkZ2U6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgICByb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqIEBkZWZhdWx0ICdzdGFuZGFyZCdcbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnZG90JywgJ3N0YW5kYXJkJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBCYWRnZTsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjcmVhdGVTdmdJY29uIGZyb20gJy4uLy4uL3V0aWxzL2NyZWF0ZVN2Z0ljb24nO1xuXG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKi9cbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5leHBvcnQgZGVmYXVsdCBjcmVhdGVTdmdJY29uKCAvKiNfX1BVUkVfXyovX2pzeChcInBhdGhcIiwge1xuICBkOiBcIk0xMiAxMmMyLjIxIDAgNC0xLjc5IDQtNHMtMS43OS00LTQtNC00IDEuNzktNCA0IDEuNzkgNCA0IDR6bTAgMmMtMi42NyAwLTggMS4zNC04IDR2MmgxNnYtMmMwLTIuNjYtNS4zMy00LTgtNHpcIlxufSksICdQZXJzb24nKTsiLCJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEF2YXRhclV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpQXZhdGFyJywgc2xvdCk7XG59XG5jb25zdCBhdmF0YXJDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpQXZhdGFyJywgWydyb290JywgJ2NvbG9yRGVmYXVsdCcsICdjaXJjdWxhcicsICdyb3VuZGVkJywgJ3NxdWFyZScsICdpbWcnLCAnZmFsbGJhY2snXSk7XG5leHBvcnQgZGVmYXVsdCBhdmF0YXJDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImVsZW1lbnRUeXBlXCIsIFwib3duZXJTdGF0ZVwiLCBcImV4dGVybmFsRm9yd2FyZGVkUHJvcHNcIiwgXCJnZXRTbG90T3duZXJTdGF0ZVwiLCBcImludGVybmFsRm9yd2FyZGVkUHJvcHNcIl0sXG4gIF9leGNsdWRlZDIgPSBbXCJjb21wb25lbnRcIiwgXCJzbG90c1wiLCBcInNsb3RQcm9wc1wiXSxcbiAgX2V4Y2x1ZGVkMyA9IFtcImNvbXBvbmVudFwiXTtcbmltcG9ydCB1c2VGb3JrUmVmIGZyb20gJ0BtdWkvdXRpbHMvdXNlRm9ya1JlZic7XG5pbXBvcnQgYXBwZW5kT3duZXJTdGF0ZSBmcm9tICdAbXVpL3V0aWxzL2FwcGVuZE93bmVyU3RhdGUnO1xuaW1wb3J0IHJlc29sdmVDb21wb25lbnRQcm9wcyBmcm9tICdAbXVpL3V0aWxzL3Jlc29sdmVDb21wb25lbnRQcm9wcyc7XG5pbXBvcnQgbWVyZ2VTbG90UHJvcHMgZnJvbSAnQG11aS91dGlscy9tZXJnZVNsb3RQcm9wcyc7XG4vKipcbiAqIEFuIGludGVybmFsIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIE1hdGVyaWFsIFVJIHNsb3QuXG4gKlxuICogVGhpcyBpcyBhbiBhZHZhbmNlZCB2ZXJzaW9uIG9mIEJhc2UgVUkgYHVzZVNsb3RQcm9wc2AgYmVjYXVzZSBNYXRlcmlhbCBVSSBhbGxvd3MgbGVhZiBjb21wb25lbnQgdG8gYmUgY3VzdG9taXplZCB2aWEgYGNvbXBvbmVudGAgcHJvcFxuICogd2hpbGUgQmFzZSBVSSBkb2VzIG5vdCBuZWVkIHRvIHN1cHBvcnQgbGVhZiBjb21wb25lbnQgY3VzdG9taXphdGlvbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZTogbmFtZSBvZiB0aGUgc2xvdFxuICogQHBhcmFtIHtvYmplY3R9IHBhcmFtZXRlcnNcbiAqIEByZXR1cm5zIHtbU2xvdCwgc2xvdFByb3BzXX0gVGhlIHNsb3QncyBSZWFjdCBjb21wb25lbnQgYW5kIHRoZSBzbG90J3MgcHJvcHNcbiAqXG4gKiBOb3RlOiB0aGUgcmV0dXJuZWQgc2xvdCdzIHByb3BzXG4gKiAtIHdpbGwgbmV2ZXIgY29udGFpbiBgY29tcG9uZW50YCBwcm9wLlxuICogLSBtaWdodCBjb250YWluIGBhc2AgcHJvcC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlU2xvdChcbi8qKlxuICogVGhlIHNsb3QncyBuYW1lLiBBbGwgTWF0ZXJpYWwgVUkgY29tcG9uZW50cyBzaG91bGQgaGF2ZSBgcm9vdGAgc2xvdC5cbiAqXG4gKiBJZiB0aGUgbmFtZSBpcyBgcm9vdGAsIHRoZSBsb2dpYyBiZWhhdmVzIGRpZmZlcmVudGx5IGZyb20gb3RoZXIgc2xvdHMsXG4gKiBlLmcuIHRoZSBgZXh0ZXJuYWxGb3J3YXJkZWRQcm9wc2AgYXJlIHNwcmVhZCB0byBgcm9vdGAgc2xvdCBidXQgbm90IG90aGVyIHNsb3RzLlxuICovXG5uYW1lLCBwYXJhbWV0ZXJzKSB7XG4gIGNvbnN0IHtcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGVsZW1lbnRUeXBlOiBpbml0aWFsRWxlbWVudFR5cGUsXG4gICAgICBvd25lclN0YXRlLFxuICAgICAgZXh0ZXJuYWxGb3J3YXJkZWRQcm9wcyxcbiAgICAgIGdldFNsb3RPd25lclN0YXRlLFxuICAgICAgaW50ZXJuYWxGb3J3YXJkZWRQcm9wc1xuICAgIH0gPSBwYXJhbWV0ZXJzLFxuICAgIHVzZVNsb3RQcm9wc1BhcmFtcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHBhcmFtZXRlcnMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHtcbiAgICAgIGNvbXBvbmVudDogcm9vdENvbXBvbmVudCxcbiAgICAgIHNsb3RzID0ge1xuICAgICAgICBbbmFtZV06IHVuZGVmaW5lZFxuICAgICAgfSxcbiAgICAgIHNsb3RQcm9wcyA9IHtcbiAgICAgICAgW25hbWVdOiB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9ID0gZXh0ZXJuYWxGb3J3YXJkZWRQcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGV4dGVybmFsRm9yd2FyZGVkUHJvcHMsIF9leGNsdWRlZDIpO1xuICBjb25zdCBlbGVtZW50VHlwZSA9IHNsb3RzW25hbWVdIHx8IGluaXRpYWxFbGVtZW50VHlwZTtcblxuICAvLyBgc2xvdFByb3BzW25hbWVdYCBjYW4gYmUgYSBjYWxsYmFjayB0aGF0IHJlY2VpdmVzIHRoZSBjb21wb25lbnQncyBvd25lclN0YXRlLlxuICAvLyBgcmVzb2x2ZWRDb21wb25lbnRzUHJvcHNgIGlzIGFsd2F5cyBhIHBsYWluIG9iamVjdC5cbiAgY29uc3QgcmVzb2x2ZWRDb21wb25lbnRzUHJvcHMgPSByZXNvbHZlQ29tcG9uZW50UHJvcHMoc2xvdFByb3BzW25hbWVdLCBvd25lclN0YXRlKTtcbiAgY29uc3QgX21lcmdlU2xvdFByb3BzID0gbWVyZ2VTbG90UHJvcHMoX2V4dGVuZHMoe1xuICAgICAgY2xhc3NOYW1lXG4gICAgfSwgdXNlU2xvdFByb3BzUGFyYW1zLCB7XG4gICAgICBleHRlcm5hbEZvcndhcmRlZFByb3BzOiBuYW1lID09PSAncm9vdCcgPyBvdGhlciA6IHVuZGVmaW5lZCxcbiAgICAgIGV4dGVybmFsU2xvdFByb3BzOiByZXNvbHZlZENvbXBvbmVudHNQcm9wc1xuICAgIH0pKSxcbiAgICB7XG4gICAgICBwcm9wczoge1xuICAgICAgICBjb21wb25lbnQ6IHNsb3RDb21wb25lbnRcbiAgICAgIH0sXG4gICAgICBpbnRlcm5hbFJlZlxuICAgIH0gPSBfbWVyZ2VTbG90UHJvcHMsXG4gICAgbWVyZ2VkUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfbWVyZ2VTbG90UHJvcHMucHJvcHMsIF9leGNsdWRlZDMpO1xuICBjb25zdCByZWYgPSB1c2VGb3JrUmVmKGludGVybmFsUmVmLCByZXNvbHZlZENvbXBvbmVudHNQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogcmVzb2x2ZWRDb21wb25lbnRzUHJvcHMucmVmLCBwYXJhbWV0ZXJzLnJlZik7XG4gIGNvbnN0IHNsb3RPd25lclN0YXRlID0gZ2V0U2xvdE93bmVyU3RhdGUgPyBnZXRTbG90T3duZXJTdGF0ZShtZXJnZWRQcm9wcykgOiB7fTtcbiAgY29uc3QgZmluYWxPd25lclN0YXRlID0gX2V4dGVuZHMoe30sIG93bmVyU3RhdGUsIHNsb3RPd25lclN0YXRlKTtcbiAgY29uc3QgTGVhZkNvbXBvbmVudCA9IG5hbWUgPT09ICdyb290JyA/IHNsb3RDb21wb25lbnQgfHwgcm9vdENvbXBvbmVudCA6IHNsb3RDb21wb25lbnQ7XG4gIGNvbnN0IHByb3BzID0gYXBwZW5kT3duZXJTdGF0ZShlbGVtZW50VHlwZSwgX2V4dGVuZHMoe30sIG5hbWUgPT09ICdyb290JyAmJiAhcm9vdENvbXBvbmVudCAmJiAhc2xvdHNbbmFtZV0gJiYgaW50ZXJuYWxGb3J3YXJkZWRQcm9wcywgbmFtZSAhPT0gJ3Jvb3QnICYmICFzbG90c1tuYW1lXSAmJiBpbnRlcm5hbEZvcndhcmRlZFByb3BzLCBtZXJnZWRQcm9wcywgTGVhZkNvbXBvbmVudCAmJiB7XG4gICAgYXM6IExlYWZDb21wb25lbnRcbiAgfSwge1xuICAgIHJlZlxuICB9KSwgZmluYWxPd25lclN0YXRlKTtcbiAgT2JqZWN0LmtleXMoc2xvdE93bmVyU3RhdGUpLmZvckVhY2gocHJvcE5hbWUgPT4ge1xuICAgIGRlbGV0ZSBwcm9wc1twcm9wTmFtZV07XG4gIH0pO1xuICByZXR1cm4gW2VsZW1lbnRUeXBlLCBwcm9wc107XG59IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYWx0XCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb21wb25lbnRcIiwgXCJzbG90c1wiLCBcInNsb3RQcm9wc1wiLCBcImltZ1Byb3BzXCIsIFwic2l6ZXNcIiwgXCJzcmNcIiwgXCJzcmNTZXRcIiwgXCJ2YXJpYW50XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHsgc3R5bGVkIH0gZnJvbSAnLi4vemVyby1zdHlsZWQnO1xuaW1wb3J0IHsgdXNlRGVmYXVsdFByb3BzIH0gZnJvbSAnLi4vRGVmYXVsdFByb3BzUHJvdmlkZXInO1xuaW1wb3J0IFBlcnNvbiBmcm9tICcuLi9pbnRlcm5hbC9zdmctaWNvbnMvUGVyc29uJztcbmltcG9ydCB7IGdldEF2YXRhclV0aWxpdHlDbGFzcyB9IGZyb20gJy4vYXZhdGFyQ2xhc3Nlcyc7XG5pbXBvcnQgdXNlU2xvdCBmcm9tICcuLi91dGlscy91c2VTbG90JztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICB2YXJpYW50LFxuICAgIGNvbG9yRGVmYXVsdFxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgdmFyaWFudCwgY29sb3JEZWZhdWx0ICYmICdjb2xvckRlZmF1bHQnXSxcbiAgICBpbWc6IFsnaW1nJ10sXG4gICAgZmFsbGJhY2s6IFsnZmFsbGJhY2snXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldEF2YXRhclV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuY29uc3QgQXZhdGFyUm9vdCA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpQXZhdGFyJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3QsIHN0eWxlc1tvd25lclN0YXRlLnZhcmlhbnRdLCBvd25lclN0YXRlLmNvbG9yRGVmYXVsdCAmJiBzdHlsZXMuY29sb3JEZWZhdWx0XTtcbiAgfVxufSkoKHtcbiAgdGhlbWVcbn0pID0+ICh7XG4gIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICBkaXNwbGF5OiAnZmxleCcsXG4gIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gIGZsZXhTaHJpbms6IDAsXG4gIHdpZHRoOiA0MCxcbiAgaGVpZ2h0OiA0MCxcbiAgZm9udEZhbWlseTogdGhlbWUudHlwb2dyYXBoeS5mb250RmFtaWx5LFxuICBmb250U2l6ZTogdGhlbWUudHlwb2dyYXBoeS5weFRvUmVtKDIwKSxcbiAgbGluZUhlaWdodDogMSxcbiAgYm9yZGVyUmFkaXVzOiAnNTAlJyxcbiAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICB1c2VyU2VsZWN0OiAnbm9uZScsXG4gIHZhcmlhbnRzOiBbe1xuICAgIHByb3BzOiB7XG4gICAgICB2YXJpYW50OiAncm91bmRlZCdcbiAgICB9LFxuICAgIHN0eWxlOiB7XG4gICAgICBib3JkZXJSYWRpdXM6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5zaGFwZS5ib3JkZXJSYWRpdXNcbiAgICB9XG4gIH0sIHtcbiAgICBwcm9wczoge1xuICAgICAgdmFyaWFudDogJ3NxdWFyZSdcbiAgICB9LFxuICAgIHN0eWxlOiB7XG4gICAgICBib3JkZXJSYWRpdXM6IDBcbiAgICB9XG4gIH0sIHtcbiAgICBwcm9wczoge1xuICAgICAgY29sb3JEZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBzdHlsZTogX2V4dGVuZHMoe1xuICAgICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmJhY2tncm91bmQuZGVmYXVsdFxuICAgIH0sIHRoZW1lLnZhcnMgPyB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMucGFsZXR0ZS5BdmF0YXIuZGVmYXVsdEJnXG4gICAgfSA6IF9leHRlbmRzKHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUucGFsZXR0ZS5ncmV5WzQwMF1cbiAgICB9LCB0aGVtZS5hcHBseVN0eWxlcygnZGFyaycsIHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUucGFsZXR0ZS5ncmV5WzYwMF1cbiAgICB9KSkpXG4gIH1dXG59KSk7XG5jb25zdCBBdmF0YXJJbWcgPSBzdHlsZWQoJ2ltZycsIHtcbiAgbmFtZTogJ011aUF2YXRhcicsXG4gIHNsb3Q6ICdJbWcnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5pbWdcbn0pKHtcbiAgd2lkdGg6ICcxMDAlJyxcbiAgaGVpZ2h0OiAnMTAwJScsXG4gIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gIC8vIEhhbmRsZSBub24tc3F1YXJlIGltYWdlLiBUaGUgcHJvcGVydHkgaXNuJ3Qgc3VwcG9ydGVkIGJ5IElFMTEuXG4gIG9iamVjdEZpdDogJ2NvdmVyJyxcbiAgLy8gSGlkZSBhbHQgdGV4dC5cbiAgY29sb3I6ICd0cmFuc3BhcmVudCcsXG4gIC8vIEhpZGUgdGhlIGltYWdlIGJyb2tlbiBpY29uLCBvbmx5IHdvcmtzIG9uIENocm9tZS5cbiAgdGV4dEluZGVudDogMTAwMDBcbn0pO1xuY29uc3QgQXZhdGFyRmFsbGJhY2sgPSBzdHlsZWQoUGVyc29uLCB7XG4gIG5hbWU6ICdNdWlBdmF0YXInLFxuICBzbG90OiAnRmFsbGJhY2snLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5mYWxsYmFja1xufSkoe1xuICB3aWR0aDogJzc1JScsXG4gIGhlaWdodDogJzc1JSdcbn0pO1xuZnVuY3Rpb24gdXNlTG9hZGVkKHtcbiAgY3Jvc3NPcmlnaW4sXG4gIHJlZmVycmVyUG9saWN5LFxuICBzcmMsXG4gIHNyY1NldFxufSkge1xuICBjb25zdCBbbG9hZGVkLCBzZXRMb2FkZWRdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghc3JjICYmICFzcmNTZXQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHNldExvYWRlZChmYWxzZSk7XG4gICAgbGV0IGFjdGl2ZSA9IHRydWU7XG4gICAgY29uc3QgaW1hZ2UgPSBuZXcgSW1hZ2UoKTtcbiAgICBpbWFnZS5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICBpZiAoIWFjdGl2ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzZXRMb2FkZWQoJ2xvYWRlZCcpO1xuICAgIH07XG4gICAgaW1hZ2Uub25lcnJvciA9ICgpID0+IHtcbiAgICAgIGlmICghYWN0aXZlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHNldExvYWRlZCgnZXJyb3InKTtcbiAgICB9O1xuICAgIGltYWdlLmNyb3NzT3JpZ2luID0gY3Jvc3NPcmlnaW47XG4gICAgaW1hZ2UucmVmZXJyZXJQb2xpY3kgPSByZWZlcnJlclBvbGljeTtcbiAgICBpbWFnZS5zcmMgPSBzcmM7XG4gICAgaWYgKHNyY1NldCkge1xuICAgICAgaW1hZ2Uuc3Jjc2V0ID0gc3JjU2V0O1xuICAgIH1cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgYWN0aXZlID0gZmFsc2U7XG4gICAgfTtcbiAgfSwgW2Nyb3NzT3JpZ2luLCByZWZlcnJlclBvbGljeSwgc3JjLCBzcmNTZXRdKTtcbiAgcmV0dXJuIGxvYWRlZDtcbn1cbmNvbnN0IEF2YXRhciA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIEF2YXRhcihpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VEZWZhdWx0UHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlBdmF0YXInXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBhbHQsXG4gICAgICBjaGlsZHJlbjogY2hpbGRyZW5Qcm9wLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29tcG9uZW50ID0gJ2RpdicsXG4gICAgICBzbG90cyA9IHt9LFxuICAgICAgc2xvdFByb3BzID0ge30sXG4gICAgICBpbWdQcm9wcyxcbiAgICAgIHNpemVzLFxuICAgICAgc3JjLFxuICAgICAgc3JjU2V0LFxuICAgICAgdmFyaWFudCA9ICdjaXJjdWxhcidcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgbGV0IGNoaWxkcmVuID0gbnVsbDtcblxuICAvLyBVc2UgYSBob29rIGluc3RlYWQgb2Ygb25FcnJvciBvbiB0aGUgaW1nIGVsZW1lbnQgdG8gc3VwcG9ydCBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuXG4gIGNvbnN0IGxvYWRlZCA9IHVzZUxvYWRlZChfZXh0ZW5kcyh7fSwgaW1nUHJvcHMsIHtcbiAgICBzcmMsXG4gICAgc3JjU2V0XG4gIH0pKTtcbiAgY29uc3QgaGFzSW1nID0gc3JjIHx8IHNyY1NldDtcbiAgY29uc3QgaGFzSW1nTm90RmFpbGluZyA9IGhhc0ltZyAmJiBsb2FkZWQgIT09ICdlcnJvcic7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb2xvckRlZmF1bHQ6ICFoYXNJbWdOb3RGYWlsaW5nLFxuICAgIGNvbXBvbmVudCxcbiAgICB2YXJpYW50XG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIGNvbnN0IFtJbWdTbG90LCBpbWdTbG90UHJvcHNdID0gdXNlU2xvdCgnaW1nJywge1xuICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5pbWcsXG4gICAgZWxlbWVudFR5cGU6IEF2YXRhckltZyxcbiAgICBleHRlcm5hbEZvcndhcmRlZFByb3BzOiB7XG4gICAgICBzbG90cyxcbiAgICAgIHNsb3RQcm9wczoge1xuICAgICAgICBpbWc6IF9leHRlbmRzKHt9LCBpbWdQcm9wcywgc2xvdFByb3BzLmltZylcbiAgICAgIH1cbiAgICB9LFxuICAgIGFkZGl0aW9uYWxQcm9wczoge1xuICAgICAgYWx0LFxuICAgICAgc3JjLFxuICAgICAgc3JjU2V0LFxuICAgICAgc2l6ZXNcbiAgICB9LFxuICAgIG93bmVyU3RhdGVcbiAgfSk7XG4gIGlmIChoYXNJbWdOb3RGYWlsaW5nKSB7XG4gICAgY2hpbGRyZW4gPSAvKiNfX1BVUkVfXyovX2pzeChJbWdTbG90LCBfZXh0ZW5kcyh7fSwgaW1nU2xvdFByb3BzKSk7XG4gICAgLy8gV2Ugb25seSByZW5kZXIgdmFsaWQgY2hpbGRyZW4sIG5vbiB2YWxpZCBjaGlsZHJlbiBhcmUgcmVuZGVyZWQgd2l0aCBhIGZhbGxiYWNrXG4gICAgLy8gV2UgY29uc2lkZXIgdGhhdCBpbnZhbGlkIGNoaWxkcmVuIGFyZSBhbGwgZmFsc3kgdmFsdWVzLCBleGNlcHQgMCwgd2hpY2ggaXMgdmFsaWQuXG4gIH0gZWxzZSBpZiAoISFjaGlsZHJlblByb3AgfHwgY2hpbGRyZW5Qcm9wID09PSAwKSB7XG4gICAgY2hpbGRyZW4gPSBjaGlsZHJlblByb3A7XG4gIH0gZWxzZSBpZiAoaGFzSW1nICYmIGFsdCkge1xuICAgIGNoaWxkcmVuID0gYWx0WzBdO1xuICB9IGVsc2Uge1xuICAgIGNoaWxkcmVuID0gLyojX19QVVJFX18qL19qc3goQXZhdGFyRmFsbGJhY2ssIHtcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMuZmFsbGJhY2tcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goQXZhdGFyUm9vdCwgX2V4dGVuZHMoe1xuICAgIGFzOiBjb21wb25lbnQsXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIHJlZjogcmVmXG4gIH0sIG90aGVyLCB7XG4gICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gQXZhdGFyLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgV2FybmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgLy8g4pSCIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4g4pSCXG4gIC8vIOKUgiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIOKUglxuICAvLyDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgLyoqXG4gICAqIFVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBgc3JjYCBvciBgc3JjU2V0YCB0b1xuICAgKiBwcm92aWRlIGFuIGFsdCBhdHRyaWJ1dGUgZm9yIHRoZSByZW5kZXJlZCBgaW1nYCBlbGVtZW50LlxuICAgKi9cbiAgYWx0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVXNlZCB0byByZW5kZXIgaWNvbiBvciB0ZXh0IGVsZW1lbnRzIGluc2lkZSB0aGUgQXZhdGFyIGlmIGBzcmNgIGlzIG5vdCBzZXQuXG4gICAqIFRoaXMgY2FuIGJlIGFuIGVsZW1lbnQsIG9yIGp1c3QgYSBzdHJpbmcuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBbQXR0cmlidXRlc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2ltZyNhdHRyaWJ1dGVzKSBhcHBsaWVkIHRvIHRoZSBgaW1nYCBlbGVtZW50IGlmIHRoZSBjb21wb25lbnQgaXMgdXNlZCB0byBkaXNwbGF5IGFuIGltYWdlLlxuICAgKiBJdCBjYW4gYmUgdXNlZCB0byBsaXN0ZW4gZm9yIHRoZSBsb2FkaW5nIGVycm9yIGV2ZW50LlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYHNsb3RQcm9wcy5pbWdgIGluc3RlYWQuIFRoaXMgcHJvcCB3aWxsIGJlIHJlbW92ZWQgaW4gdjcuIFtIb3cgdG8gbWlncmF0ZV0oL21hdGVyaWFsLXVpL21pZ3JhdGlvbi9taWdyYXRpbmctZnJvbS1kZXByZWNhdGVkLWFwaXMvKS5cbiAgICovXG4gIGltZ1Byb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogVGhlIGBzaXplc2AgYXR0cmlidXRlIGZvciB0aGUgYGltZ2AgZWxlbWVudC5cbiAgICovXG4gIHNpemVzOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIHByb3BzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90UHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaW1nOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG4gIH0pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZS5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHNsb3RzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGltZzogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuICAvKipcbiAgICogVGhlIGBzcmNgIGF0dHJpYnV0ZSBmb3IgdGhlIGBpbWdgIGVsZW1lbnQuXG4gICAqL1xuICBzcmM6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgYHNyY1NldGAgYXR0cmlidXRlIGZvciB0aGUgYGltZ2AgZWxlbWVudC5cbiAgICogVXNlIHRoaXMgYXR0cmlidXRlIGZvciByZXNwb25zaXZlIGltYWdlIGRpc3BsYXkuXG4gICAqL1xuICBzcmNTZXQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUaGUgc2hhcGUgb2YgdGhlIGF2YXRhci5cbiAgICogQGRlZmF1bHQgJ2NpcmN1bGFyJ1xuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydjaXJjdWxhcicsICdyb3VuZGVkJywgJ3NxdWFyZSddKSwgUHJvcFR5cGVzLnN0cmluZ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgQXZhdGFyOyIsImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0VHlwb2dyYXBoeVV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpVHlwb2dyYXBoeScsIHNsb3QpO1xufVxuY29uc3QgdHlwb2dyYXBoeUNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlUeXBvZ3JhcGh5JywgWydyb290JywgJ2gxJywgJ2gyJywgJ2gzJywgJ2g0JywgJ2g1JywgJ2g2JywgJ3N1YnRpdGxlMScsICdzdWJ0aXRsZTInLCAnYm9keTEnLCAnYm9keTInLCAnaW5oZXJpdCcsICdidXR0b24nLCAnY2FwdGlvbicsICdvdmVybGluZScsICdhbGlnbkxlZnQnLCAnYWxpZ25SaWdodCcsICdhbGlnbkNlbnRlcicsICdhbGlnbkp1c3RpZnknLCAnbm9XcmFwJywgJ2d1dHRlckJvdHRvbScsICdwYXJhZ3JhcGgnXSk7XG5leHBvcnQgZGVmYXVsdCB0eXBvZ3JhcGh5Q2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhbGlnblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbXBvbmVudFwiLCBcImd1dHRlckJvdHRvbVwiLCBcIm5vV3JhcFwiLCBcInBhcmFncmFwaFwiLCBcInZhcmlhbnRcIiwgXCJ2YXJpYW50TWFwcGluZ1wiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IGV4dGVuZFN4UHJvcCB9IGZyb20gJ0BtdWkvc3lzdGVtL3N0eWxlRnVuY3Rpb25TeCc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsgdXNlRGVmYXVsdFByb3BzIH0gZnJvbSAnLi4vRGVmYXVsdFByb3BzUHJvdmlkZXInO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgeyBnZXRUeXBvZ3JhcGh5VXRpbGl0eUNsYXNzIH0gZnJvbSAnLi90eXBvZ3JhcGh5Q2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGFsaWduLFxuICAgIGd1dHRlckJvdHRvbSxcbiAgICBub1dyYXAsXG4gICAgcGFyYWdyYXBoLFxuICAgIHZhcmlhbnQsXG4gICAgY2xhc3Nlc1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgdmFyaWFudCwgb3duZXJTdGF0ZS5hbGlnbiAhPT0gJ2luaGVyaXQnICYmIGBhbGlnbiR7Y2FwaXRhbGl6ZShhbGlnbil9YCwgZ3V0dGVyQm90dG9tICYmICdndXR0ZXJCb3R0b20nLCBub1dyYXAgJiYgJ25vV3JhcCcsIHBhcmFncmFwaCAmJiAncGFyYWdyYXBoJ11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRUeXBvZ3JhcGh5VXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5leHBvcnQgY29uc3QgVHlwb2dyYXBoeVJvb3QgPSBzdHlsZWQoJ3NwYW4nLCB7XG4gIG5hbWU6ICdNdWlUeXBvZ3JhcGh5JyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3QsIG93bmVyU3RhdGUudmFyaWFudCAmJiBzdHlsZXNbb3duZXJTdGF0ZS52YXJpYW50XSwgb3duZXJTdGF0ZS5hbGlnbiAhPT0gJ2luaGVyaXQnICYmIHN0eWxlc1tgYWxpZ24ke2NhcGl0YWxpemUob3duZXJTdGF0ZS5hbGlnbil9YF0sIG93bmVyU3RhdGUubm9XcmFwICYmIHN0eWxlcy5ub1dyYXAsIG93bmVyU3RhdGUuZ3V0dGVyQm90dG9tICYmIHN0eWxlcy5ndXR0ZXJCb3R0b20sIG93bmVyU3RhdGUucGFyYWdyYXBoICYmIHN0eWxlcy5wYXJhZ3JhcGhdO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBtYXJnaW46IDBcbn0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2luaGVyaXQnICYmIHtcbiAgLy8gU29tZSBlbGVtZW50cywgbGlrZSA8YnV0dG9uPiBvbiBDaHJvbWUgaGF2ZSBkZWZhdWx0IGZvbnQgdGhhdCBkb2Vzbid0IGluaGVyaXQsIHJlc2V0IHRoaXMuXG4gIGZvbnQ6ICdpbmhlcml0J1xufSwgb3duZXJTdGF0ZS52YXJpYW50ICE9PSAnaW5oZXJpdCcgJiYgdGhlbWUudHlwb2dyYXBoeVtvd25lclN0YXRlLnZhcmlhbnRdLCBvd25lclN0YXRlLmFsaWduICE9PSAnaW5oZXJpdCcgJiYge1xuICB0ZXh0QWxpZ246IG93bmVyU3RhdGUuYWxpZ25cbn0sIG93bmVyU3RhdGUubm9XcmFwICYmIHtcbiAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICB0ZXh0T3ZlcmZsb3c6ICdlbGxpcHNpcycsXG4gIHdoaXRlU3BhY2U6ICdub3dyYXAnXG59LCBvd25lclN0YXRlLmd1dHRlckJvdHRvbSAmJiB7XG4gIG1hcmdpbkJvdHRvbTogJzAuMzVlbSdcbn0sIG93bmVyU3RhdGUucGFyYWdyYXBoICYmIHtcbiAgbWFyZ2luQm90dG9tOiAxNlxufSkpO1xuY29uc3QgZGVmYXVsdFZhcmlhbnRNYXBwaW5nID0ge1xuICBoMTogJ2gxJyxcbiAgaDI6ICdoMicsXG4gIGgzOiAnaDMnLFxuICBoNDogJ2g0JyxcbiAgaDU6ICdoNScsXG4gIGg2OiAnaDYnLFxuICBzdWJ0aXRsZTE6ICdoNicsXG4gIHN1YnRpdGxlMjogJ2g2JyxcbiAgYm9keTE6ICdwJyxcbiAgYm9keTI6ICdwJyxcbiAgaW5oZXJpdDogJ3AnXG59O1xuXG4vLyBUT0RPIHY2OiBkZXByZWNhdGUgdGhlc2UgY29sb3IgdmFsdWVzIGluIHY1LnggYW5kIHJlbW92ZSB0aGUgdHJhbnNmb3JtYXRpb24gaW4gdjZcbmNvbnN0IGNvbG9yVHJhbnNmb3JtYXRpb25zID0ge1xuICBwcmltYXJ5OiAncHJpbWFyeS5tYWluJyxcbiAgdGV4dFByaW1hcnk6ICd0ZXh0LnByaW1hcnknLFxuICBzZWNvbmRhcnk6ICdzZWNvbmRhcnkubWFpbicsXG4gIHRleHRTZWNvbmRhcnk6ICd0ZXh0LnNlY29uZGFyeScsXG4gIGVycm9yOiAnZXJyb3IubWFpbidcbn07XG5jb25zdCB0cmFuc2Zvcm1EZXByZWNhdGVkQ29sb3JzID0gY29sb3IgPT4ge1xuICByZXR1cm4gY29sb3JUcmFuc2Zvcm1hdGlvbnNbY29sb3JdIHx8IGNvbG9yO1xufTtcbmNvbnN0IFR5cG9ncmFwaHkgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBUeXBvZ3JhcGh5KGluUHJvcHMsIHJlZikge1xuICBjb25zdCB0aGVtZVByb3BzID0gdXNlRGVmYXVsdFByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpVHlwb2dyYXBoeSdcbiAgfSk7XG4gIGNvbnN0IGNvbG9yID0gdHJhbnNmb3JtRGVwcmVjYXRlZENvbG9ycyh0aGVtZVByb3BzLmNvbG9yKTtcbiAgY29uc3QgcHJvcHMgPSBleHRlbmRTeFByb3AoX2V4dGVuZHMoe30sIHRoZW1lUHJvcHMsIHtcbiAgICBjb2xvclxuICB9KSk7XG4gIGNvbnN0IHtcbiAgICAgIGFsaWduID0gJ2luaGVyaXQnLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29tcG9uZW50LFxuICAgICAgZ3V0dGVyQm90dG9tID0gZmFsc2UsXG4gICAgICBub1dyYXAgPSBmYWxzZSxcbiAgICAgIHBhcmFncmFwaCA9IGZhbHNlLFxuICAgICAgdmFyaWFudCA9ICdib2R5MScsXG4gICAgICB2YXJpYW50TWFwcGluZyA9IGRlZmF1bHRWYXJpYW50TWFwcGluZ1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgYWxpZ24sXG4gICAgY29sb3IsXG4gICAgY2xhc3NOYW1lLFxuICAgIGNvbXBvbmVudCxcbiAgICBndXR0ZXJCb3R0b20sXG4gICAgbm9XcmFwLFxuICAgIHBhcmFncmFwaCxcbiAgICB2YXJpYW50LFxuICAgIHZhcmlhbnRNYXBwaW5nXG4gIH0pO1xuICBjb25zdCBDb21wb25lbnQgPSBjb21wb25lbnQgfHwgKHBhcmFncmFwaCA/ICdwJyA6IHZhcmlhbnRNYXBwaW5nW3ZhcmlhbnRdIHx8IGRlZmF1bHRWYXJpYW50TWFwcGluZ1t2YXJpYW50XSkgfHwgJ3NwYW4nO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChUeXBvZ3JhcGh5Um9vdCwgX2V4dGVuZHMoe1xuICAgIGFzOiBDb21wb25lbnQsXG4gICAgcmVmOiByZWYsXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpXG4gIH0sIG90aGVyKSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFR5cG9ncmFwaHkucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogU2V0IHRoZSB0ZXh0LWFsaWduIG9uIHRoZSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0ICdpbmhlcml0J1xuICAgKi9cbiAgYWxpZ246IFByb3BUeXBlcy5vbmVPZihbJ2NlbnRlcicsICdpbmhlcml0JywgJ2p1c3RpZnknLCAnbGVmdCcsICdyaWdodCddKSxcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSB0ZXh0IHdpbGwgaGF2ZSBhIGJvdHRvbSBtYXJnaW4uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBndXR0ZXJCb3R0b206IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgdGV4dCB3aWxsIG5vdCB3cmFwLCBidXQgaW5zdGVhZCB3aWxsIHRydW5jYXRlIHdpdGggYSB0ZXh0IG92ZXJmbG93IGVsbGlwc2lzLlxuICAgKlxuICAgKiBOb3RlIHRoYXQgdGV4dCBvdmVyZmxvdyBjYW4gb25seSBoYXBwZW4gd2l0aCBibG9jayBvciBpbmxpbmUtYmxvY2sgbGV2ZWwgZWxlbWVudHNcbiAgICogKHRoZSBlbGVtZW50IG5lZWRzIHRvIGhhdmUgYSB3aWR0aCBpbiBvcmRlciB0byBvdmVyZmxvdykuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBub1dyYXA6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgZWxlbWVudCB3aWxsIGJlIGEgcGFyYWdyYXBoIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBwYXJhZ3JhcGg6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogQXBwbGllcyB0aGUgdGhlbWUgdHlwb2dyYXBoeSBzdHlsZXMuXG4gICAqIEBkZWZhdWx0ICdib2R5MSdcbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYm9keTEnLCAnYm9keTInLCAnYnV0dG9uJywgJ2NhcHRpb24nLCAnaDEnLCAnaDInLCAnaDMnLCAnaDQnLCAnaDUnLCAnaDYnLCAnaW5oZXJpdCcsICdvdmVybGluZScsICdzdWJ0aXRsZTEnLCAnc3VidGl0bGUyJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IG1hcHMgdGhlIHZhcmlhbnQgcHJvcCB0byBhIHJhbmdlIG9mIGRpZmZlcmVudCBIVE1MIGVsZW1lbnQgdHlwZXMuXG4gICAqIEZvciBpbnN0YW5jZSwgc3VidGl0bGUxIHRvIGA8aDY+YC5cbiAgICogSWYgeW91IHdpc2ggdG8gY2hhbmdlIHRoYXQgbWFwcGluZywgeW91IGNhbiBwcm92aWRlIHlvdXIgb3duLlxuICAgKiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHVzZSB0aGUgYGNvbXBvbmVudGAgcHJvcC5cbiAgICogQGRlZmF1bHQge1xuICAgKiAgIGgxOiAnaDEnLFxuICAgKiAgIGgyOiAnaDInLFxuICAgKiAgIGgzOiAnaDMnLFxuICAgKiAgIGg0OiAnaDQnLFxuICAgKiAgIGg1OiAnaDUnLFxuICAgKiAgIGg2OiAnaDYnLFxuICAgKiAgIHN1YnRpdGxlMTogJ2g2JyxcbiAgICogICBzdWJ0aXRsZTI6ICdoNicsXG4gICAqICAgYm9keTE6ICdwJyxcbiAgICogICBib2R5MjogJ3AnLFxuICAgKiAgIGluaGVyaXQ6ICdwJyxcbiAgICogfVxuICAgKi9cbiAgdmFyaWFudE1hcHBpbmc6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9iamVjdFxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IFR5cG9ncmFwaHk7IiwiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnB1dEFkb3JubWVudFV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpSW5wdXRBZG9ybm1lbnQnLCBzbG90KTtcbn1cbmNvbnN0IGlucHV0QWRvcm5tZW50Q2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUlucHV0QWRvcm5tZW50JywgWydyb290JywgJ2ZpbGxlZCcsICdzdGFuZGFyZCcsICdvdXRsaW5lZCcsICdwb3NpdGlvblN0YXJ0JywgJ3Bvc2l0aW9uRW5kJywgJ2Rpc2FibGVQb2ludGVyRXZlbnRzJywgJ2hpZGRlbkxhYmVsJywgJ3NpemVTbWFsbCddKTtcbmV4cG9ydCBkZWZhdWx0IGlucHV0QWRvcm5tZW50Q2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG52YXIgX3NwYW47XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbXBvbmVudFwiLCBcImRpc2FibGVQb2ludGVyRXZlbnRzXCIsIFwiZGlzYWJsZVR5cG9ncmFwaHlcIiwgXCJwb3NpdGlvblwiLCBcInZhcmlhbnRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCBUeXBvZ3JhcGh5IGZyb20gJy4uL1R5cG9ncmFwaHknO1xuaW1wb3J0IEZvcm1Db250cm9sQ29udGV4dCBmcm9tICcuLi9Gb3JtQ29udHJvbC9Gb3JtQ29udHJvbENvbnRleHQnO1xuaW1wb3J0IHVzZUZvcm1Db250cm9sIGZyb20gJy4uL0Zvcm1Db250cm9sL3VzZUZvcm1Db250cm9sJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgaW5wdXRBZG9ybm1lbnRDbGFzc2VzLCB7IGdldElucHV0QWRvcm5tZW50VXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9pbnB1dEFkb3JubWVudENsYXNzZXMnO1xuaW1wb3J0IHsgdXNlRGVmYXVsdFByb3BzIH0gZnJvbSAnLi4vRGVmYXVsdFByb3BzUHJvdmlkZXInO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IG92ZXJyaWRlc1Jlc29sdmVyID0gKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgY29uc3Qge1xuICAgIG93bmVyU3RhdGVcbiAgfSA9IHByb3BzO1xuICByZXR1cm4gW3N0eWxlcy5yb290LCBzdHlsZXNbYHBvc2l0aW9uJHtjYXBpdGFsaXplKG93bmVyU3RhdGUucG9zaXRpb24pfWBdLCBvd25lclN0YXRlLmRpc2FibGVQb2ludGVyRXZlbnRzID09PSB0cnVlICYmIHN0eWxlcy5kaXNhYmxlUG9pbnRlckV2ZW50cywgc3R5bGVzW293bmVyU3RhdGUudmFyaWFudF1dO1xufTtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIGRpc2FibGVQb2ludGVyRXZlbnRzLFxuICAgIGhpZGRlbkxhYmVsLFxuICAgIHBvc2l0aW9uLFxuICAgIHNpemUsXG4gICAgdmFyaWFudFxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgZGlzYWJsZVBvaW50ZXJFdmVudHMgJiYgJ2Rpc2FibGVQb2ludGVyRXZlbnRzJywgcG9zaXRpb24gJiYgYHBvc2l0aW9uJHtjYXBpdGFsaXplKHBvc2l0aW9uKX1gLCB2YXJpYW50LCBoaWRkZW5MYWJlbCAmJiAnaGlkZGVuTGFiZWwnLCBzaXplICYmIGBzaXplJHtjYXBpdGFsaXplKHNpemUpfWBdXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0SW5wdXRBZG9ybm1lbnRVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmNvbnN0IElucHV0QWRvcm5tZW50Um9vdCA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpSW5wdXRBZG9ybm1lbnQnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyXG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBkaXNwbGF5OiAnZmxleCcsXG4gIGhlaWdodDogJzAuMDFlbScsXG4gIC8vIEZpeCBJRTExIGZsZXhib3ggYWxpZ25tZW50LiBUbyByZW1vdmUgYXQgc29tZSBwb2ludC5cbiAgbWF4SGVpZ2h0OiAnMmVtJyxcbiAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuYWN0aW9uLmFjdGl2ZVxufSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnZmlsbGVkJyAmJiB7XG4gIC8vIFN0eWxlcyBhcHBsaWVkIHRvIHRoZSByb290IGVsZW1lbnQgaWYgYHZhcmlhbnQ9XCJmaWxsZWRcImAuXG4gIFtgJi4ke2lucHV0QWRvcm5tZW50Q2xhc3Nlcy5wb3NpdGlvblN0YXJ0fSY6bm90KC4ke2lucHV0QWRvcm5tZW50Q2xhc3Nlcy5oaWRkZW5MYWJlbH0pYF06IHtcbiAgICBtYXJnaW5Ub3A6IDE2XG4gIH1cbn0sIG93bmVyU3RhdGUucG9zaXRpb24gPT09ICdzdGFydCcgJiYge1xuICAvLyBTdHlsZXMgYXBwbGllZCB0byB0aGUgcm9vdCBlbGVtZW50IGlmIGBwb3NpdGlvbj1cInN0YXJ0XCJgLlxuICBtYXJnaW5SaWdodDogOFxufSwgb3duZXJTdGF0ZS5wb3NpdGlvbiA9PT0gJ2VuZCcgJiYge1xuICAvLyBTdHlsZXMgYXBwbGllZCB0byB0aGUgcm9vdCBlbGVtZW50IGlmIGBwb3NpdGlvbj1cImVuZFwiYC5cbiAgbWFyZ2luTGVmdDogOFxufSwgb3duZXJTdGF0ZS5kaXNhYmxlUG9pbnRlckV2ZW50cyA9PT0gdHJ1ZSAmJiB7XG4gIC8vIFN0eWxlcyBhcHBsaWVkIHRvIHRoZSByb290IGVsZW1lbnQgaWYgYGRpc2FibGVQb2ludGVyRXZlbnRzPXt0cnVlfWAuXG4gIHBvaW50ZXJFdmVudHM6ICdub25lJ1xufSkpO1xuY29uc3QgSW5wdXRBZG9ybm1lbnQgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBJbnB1dEFkb3JubWVudChpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VEZWZhdWx0UHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlJbnB1dEFkb3JubWVudCdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29tcG9uZW50ID0gJ2RpdicsXG4gICAgICBkaXNhYmxlUG9pbnRlckV2ZW50cyA9IGZhbHNlLFxuICAgICAgZGlzYWJsZVR5cG9ncmFwaHkgPSBmYWxzZSxcbiAgICAgIHBvc2l0aW9uLFxuICAgICAgdmFyaWFudDogdmFyaWFudFByb3BcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgbXVpRm9ybUNvbnRyb2wgPSB1c2VGb3JtQ29udHJvbCgpIHx8IHt9O1xuICBsZXQgdmFyaWFudCA9IHZhcmlhbnRQcm9wO1xuICBpZiAodmFyaWFudFByb3AgJiYgbXVpRm9ybUNvbnRyb2wudmFyaWFudCkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAodmFyaWFudFByb3AgPT09IG11aUZvcm1Db250cm9sLnZhcmlhbnQpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTVVJOiBUaGUgYElucHV0QWRvcm5tZW50YCB2YXJpYW50IGluZmVycyB0aGUgdmFyaWFudCBwcm9wICcgKyAneW91IGRvIG5vdCBoYXZlIHRvIHByb3ZpZGUgb25lLicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAobXVpRm9ybUNvbnRyb2wgJiYgIXZhcmlhbnQpIHtcbiAgICB2YXJpYW50ID0gbXVpRm9ybUNvbnRyb2wudmFyaWFudDtcbiAgfVxuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgaGlkZGVuTGFiZWw6IG11aUZvcm1Db250cm9sLmhpZGRlbkxhYmVsLFxuICAgIHNpemU6IG11aUZvcm1Db250cm9sLnNpemUsXG4gICAgZGlzYWJsZVBvaW50ZXJFdmVudHMsXG4gICAgcG9zaXRpb24sXG4gICAgdmFyaWFudFxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goRm9ybUNvbnRyb2xDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IG51bGwsXG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KElucHV0QWRvcm5tZW50Um9vdCwgX2V4dGVuZHMoe1xuICAgICAgYXM6IGNvbXBvbmVudCxcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgICAgcmVmOiByZWZcbiAgICB9LCBvdGhlciwge1xuICAgICAgY2hpbGRyZW46IHR5cGVvZiBjaGlsZHJlbiA9PT0gJ3N0cmluZycgJiYgIWRpc2FibGVUeXBvZ3JhcGh5ID8gLyojX19QVVJFX18qL19qc3goVHlwb2dyYXBoeSwge1xuICAgICAgICBjb2xvcjogXCJ0ZXh0LnNlY29uZGFyeVwiLFxuICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICAgIH0pIDogLyojX19QVVJFX18qL19qc3hzKFJlYWN0LkZyYWdtZW50LCB7XG4gICAgICAgIGNoaWxkcmVuOiBbcG9zaXRpb24gPT09ICdzdGFydCcgPyAoIC8qIG5vdHJhbnNsYXRlIG5lZWRlZCB3aGlsZSBHb29nbGUgVHJhbnNsYXRlIHdpbGwgbm90IGZpeCB6ZXJvLXdpZHRoIHNwYWNlIGlzc3VlICovX3NwYW4gfHwgKF9zcGFuID0gLyojX19QVVJFX18qL19qc3goXCJzcGFuXCIsIHtcbiAgICAgICAgICBjbGFzc05hbWU6IFwibm90cmFuc2xhdGVcIixcbiAgICAgICAgICBjaGlsZHJlbjogXCJcXHUyMDBCXCJcbiAgICAgICAgfSkpKSA6IG51bGwsIGNoaWxkcmVuXVxuICAgICAgfSlcbiAgICB9KSlcbiAgfSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IElucHV0QWRvcm5tZW50LnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgV2FybmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgLy8g4pSCIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4g4pSCXG4gIC8vIOKUgiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIOKUglxuICAvLyDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQsIG5vcm1hbGx5IGFuIGBJY29uQnV0dG9uYCBvciBzdHJpbmcuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBEaXNhYmxlIHBvaW50ZXIgZXZlbnRzIG9uIHRoZSByb290LlxuICAgKiBUaGlzIGFsbG93cyBmb3IgdGhlIGNvbnRlbnQgb2YgdGhlIGFkb3JubWVudCB0byBmb2N1cyB0aGUgYGlucHV0YCBvbiBjbGljay5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVQb2ludGVyRXZlbnRzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGNoaWxkcmVuIGlzIGEgc3RyaW5nIHRoZW4gZGlzYWJsZSB3cmFwcGluZyBpbiBhIFR5cG9ncmFwaHkgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVR5cG9ncmFwaHk6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHBvc2l0aW9uIHRoaXMgYWRvcm5tZW50IHNob3VsZCBhcHBlYXIgcmVsYXRpdmUgdG8gdGhlIGBJbnB1dGAuXG4gICAqL1xuICBwb3NpdGlvbjogUHJvcFR5cGVzLm9uZU9mKFsnZW5kJywgJ3N0YXJ0J10pLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqIE5vdGU6IElmIHlvdSBhcmUgdXNpbmcgdGhlIGBUZXh0RmllbGRgIGNvbXBvbmVudCBvciB0aGUgYEZvcm1Db250cm9sYCBjb21wb25lbnRcbiAgICogeW91IGRvIG5vdCBoYXZlIHRvIHNldCB0aGlzIG1hbnVhbGx5LlxuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzLm9uZU9mKFsnZmlsbGVkJywgJ291dGxpbmVkJywgJ3N0YW5kYXJkJ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgSW5wdXRBZG9ybm1lbnQ7IiwiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRCdXR0b25VdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUJ1dHRvbicsIHNsb3QpO1xufVxuY29uc3QgYnV0dG9uQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUJ1dHRvbicsIFsncm9vdCcsICd0ZXh0JywgJ3RleHRJbmhlcml0JywgJ3RleHRQcmltYXJ5JywgJ3RleHRTZWNvbmRhcnknLCAndGV4dFN1Y2Nlc3MnLCAndGV4dEVycm9yJywgJ3RleHRJbmZvJywgJ3RleHRXYXJuaW5nJywgJ291dGxpbmVkJywgJ291dGxpbmVkSW5oZXJpdCcsICdvdXRsaW5lZFByaW1hcnknLCAnb3V0bGluZWRTZWNvbmRhcnknLCAnb3V0bGluZWRTdWNjZXNzJywgJ291dGxpbmVkRXJyb3InLCAnb3V0bGluZWRJbmZvJywgJ291dGxpbmVkV2FybmluZycsICdjb250YWluZWQnLCAnY29udGFpbmVkSW5oZXJpdCcsICdjb250YWluZWRQcmltYXJ5JywgJ2NvbnRhaW5lZFNlY29uZGFyeScsICdjb250YWluZWRTdWNjZXNzJywgJ2NvbnRhaW5lZEVycm9yJywgJ2NvbnRhaW5lZEluZm8nLCAnY29udGFpbmVkV2FybmluZycsICdkaXNhYmxlRWxldmF0aW9uJywgJ2ZvY3VzVmlzaWJsZScsICdkaXNhYmxlZCcsICdjb2xvckluaGVyaXQnLCAnY29sb3JQcmltYXJ5JywgJ2NvbG9yU2Vjb25kYXJ5JywgJ2NvbG9yU3VjY2VzcycsICdjb2xvckVycm9yJywgJ2NvbG9ySW5mbycsICdjb2xvcldhcm5pbmcnLCAndGV4dFNpemVTbWFsbCcsICd0ZXh0U2l6ZU1lZGl1bScsICd0ZXh0U2l6ZUxhcmdlJywgJ291dGxpbmVkU2l6ZVNtYWxsJywgJ291dGxpbmVkU2l6ZU1lZGl1bScsICdvdXRsaW5lZFNpemVMYXJnZScsICdjb250YWluZWRTaXplU21hbGwnLCAnY29udGFpbmVkU2l6ZU1lZGl1bScsICdjb250YWluZWRTaXplTGFyZ2UnLCAnc2l6ZU1lZGl1bScsICdzaXplU21hbGwnLCAnc2l6ZUxhcmdlJywgJ2Z1bGxXaWR0aCcsICdzdGFydEljb24nLCAnZW5kSWNvbicsICdpY29uJywgJ2ljb25TaXplU21hbGwnLCAnaWNvblNpemVNZWRpdW0nLCAnaWNvblNpemVMYXJnZSddKTtcbmV4cG9ydCBkZWZhdWx0IGJ1dHRvbkNsYXNzZXM7IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5jb25zdCBCdXR0b25Hcm91cENvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dCh7fSk7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBCdXR0b25Hcm91cENvbnRleHQuZGlzcGxheU5hbWUgPSAnQnV0dG9uR3JvdXBDb250ZXh0Jztcbn1cbmV4cG9ydCBkZWZhdWx0IEJ1dHRvbkdyb3VwQ29udGV4dDsiLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKi9cbmNvbnN0IEJ1dHRvbkdyb3VwQnV0dG9uQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KHVuZGVmaW5lZCk7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBCdXR0b25Hcm91cEJ1dHRvbkNvbnRleHQuZGlzcGxheU5hbWUgPSAnQnV0dG9uR3JvdXBCdXR0b25Db250ZXh0Jztcbn1cbmV4cG9ydCBkZWZhdWx0IEJ1dHRvbkdyb3VwQnV0dG9uQ29udGV4dDsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNvbG9yXCIsIFwiY29tcG9uZW50XCIsIFwiY2xhc3NOYW1lXCIsIFwiZGlzYWJsZWRcIiwgXCJkaXNhYmxlRWxldmF0aW9uXCIsIFwiZGlzYWJsZUZvY3VzUmlwcGxlXCIsIFwiZW5kSWNvblwiLCBcImZvY3VzVmlzaWJsZUNsYXNzTmFtZVwiLCBcImZ1bGxXaWR0aFwiLCBcInNpemVcIiwgXCJzdGFydEljb25cIiwgXCJ0eXBlXCIsIFwidmFyaWFudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCByZXNvbHZlUHJvcHMgZnJvbSAnQG11aS91dGlscy9yZXNvbHZlUHJvcHMnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHsgYWxwaGEgfSBmcm9tICdAbXVpL3N5c3RlbS9jb2xvck1hbmlwdWxhdG9yJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyB1c2VEZWZhdWx0UHJvcHMgfSBmcm9tICcuLi9EZWZhdWx0UHJvcHNQcm92aWRlcic7XG5pbXBvcnQgQnV0dG9uQmFzZSBmcm9tICcuLi9CdXR0b25CYXNlJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IGJ1dHRvbkNsYXNzZXMsIHsgZ2V0QnV0dG9uVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9idXR0b25DbGFzc2VzJztcbmltcG9ydCBCdXR0b25Hcm91cENvbnRleHQgZnJvbSAnLi4vQnV0dG9uR3JvdXAvQnV0dG9uR3JvdXBDb250ZXh0JztcbmltcG9ydCBCdXR0b25Hcm91cEJ1dHRvbkNvbnRleHQgZnJvbSAnLi4vQnV0dG9uR3JvdXAvQnV0dG9uR3JvdXBCdXR0b25Db250ZXh0JztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY29sb3IsXG4gICAgZGlzYWJsZUVsZXZhdGlvbixcbiAgICBmdWxsV2lkdGgsXG4gICAgc2l6ZSxcbiAgICB2YXJpYW50LFxuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIHZhcmlhbnQsIGAke3ZhcmlhbnR9JHtjYXBpdGFsaXplKGNvbG9yKX1gLCBgc2l6ZSR7Y2FwaXRhbGl6ZShzaXplKX1gLCBgJHt2YXJpYW50fVNpemUke2NhcGl0YWxpemUoc2l6ZSl9YCwgYGNvbG9yJHtjYXBpdGFsaXplKGNvbG9yKX1gLCBkaXNhYmxlRWxldmF0aW9uICYmICdkaXNhYmxlRWxldmF0aW9uJywgZnVsbFdpZHRoICYmICdmdWxsV2lkdGgnXSxcbiAgICBsYWJlbDogWydsYWJlbCddLFxuICAgIHN0YXJ0SWNvbjogWydpY29uJywgJ3N0YXJ0SWNvbicsIGBpY29uU2l6ZSR7Y2FwaXRhbGl6ZShzaXplKX1gXSxcbiAgICBlbmRJY29uOiBbJ2ljb24nLCAnZW5kSWNvbicsIGBpY29uU2l6ZSR7Y2FwaXRhbGl6ZShzaXplKX1gXVxuICB9O1xuICBjb25zdCBjb21wb3NlZENsYXNzZXMgPSBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0QnV0dG9uVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBjbGFzc2VzLCBjb21wb3NlZENsYXNzZXMpO1xufTtcbmNvbnN0IGNvbW1vbkljb25TdHlsZXMgPSBvd25lclN0YXRlID0+IF9leHRlbmRzKHt9LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICAnJiA+ICo6bnRoLW9mLXR5cGUoMSknOiB7XG4gICAgZm9udFNpemU6IDE4XG4gIH1cbn0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ21lZGl1bScgJiYge1xuICAnJiA+ICo6bnRoLW9mLXR5cGUoMSknOiB7XG4gICAgZm9udFNpemU6IDIwXG4gIH1cbn0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ2xhcmdlJyAmJiB7XG4gICcmID4gKjpudGgtb2YtdHlwZSgxKSc6IHtcbiAgICBmb250U2l6ZTogMjJcbiAgfVxufSk7XG5jb25zdCBCdXR0b25Sb290ID0gc3R5bGVkKEJ1dHRvbkJhc2UsIHtcbiAgc2hvdWxkRm9yd2FyZFByb3A6IHByb3AgPT4gcm9vdFNob3VsZEZvcndhcmRQcm9wKHByb3ApIHx8IHByb3AgPT09ICdjbGFzc2VzJyxcbiAgbmFtZTogJ011aUJ1dHRvbicsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCBzdHlsZXNbb3duZXJTdGF0ZS52YXJpYW50XSwgc3R5bGVzW2Ake293bmVyU3RhdGUudmFyaWFudH0ke2NhcGl0YWxpemUob3duZXJTdGF0ZS5jb2xvcil9YF0sIHN0eWxlc1tgc2l6ZSR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLnNpemUpfWBdLCBzdHlsZXNbYCR7b3duZXJTdGF0ZS52YXJpYW50fVNpemUke2NhcGl0YWxpemUob3duZXJTdGF0ZS5zaXplKX1gXSwgb3duZXJTdGF0ZS5jb2xvciA9PT0gJ2luaGVyaXQnICYmIHN0eWxlcy5jb2xvckluaGVyaXQsIG93bmVyU3RhdGUuZGlzYWJsZUVsZXZhdGlvbiAmJiBzdHlsZXMuZGlzYWJsZUVsZXZhdGlvbiwgb3duZXJTdGF0ZS5mdWxsV2lkdGggJiYgc3R5bGVzLmZ1bGxXaWR0aF07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiB7XG4gIHZhciBfdGhlbWUkcGFsZXR0ZSRnZXRDb24sIF90aGVtZSRwYWxldHRlO1xuICBjb25zdCBpbmhlcml0Q29udGFpbmVkQmFja2dyb3VuZENvbG9yID0gdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnbGlnaHQnID8gdGhlbWUucGFsZXR0ZS5ncmV5WzMwMF0gOiB0aGVtZS5wYWxldHRlLmdyZXlbODAwXTtcbiAgY29uc3QgaW5oZXJpdENvbnRhaW5lZEhvdmVyQmFja2dyb3VuZENvbG9yID0gdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnbGlnaHQnID8gdGhlbWUucGFsZXR0ZS5ncmV5LkExMDAgOiB0aGVtZS5wYWxldHRlLmdyZXlbNzAwXTtcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCB0aGVtZS50eXBvZ3JhcGh5LmJ1dHRvbiwge1xuICAgIG1pbldpZHRoOiA2NCxcbiAgICBwYWRkaW5nOiAnNnB4IDE2cHgnLFxuICAgIGJvcmRlclJhZGl1czogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnNoYXBlLmJvcmRlclJhZGl1cyxcbiAgICB0cmFuc2l0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoWydiYWNrZ3JvdW5kLWNvbG9yJywgJ2JveC1zaGFkb3cnLCAnYm9yZGVyLWNvbG9yJywgJ2NvbG9yJ10sIHtcbiAgICAgIGR1cmF0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5zaG9ydFxuICAgIH0pLFxuICAgICcmOmhvdmVyJzogX2V4dGVuZHMoe1xuICAgICAgdGV4dERlY29yYXRpb246ICdub25lJyxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IGByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlLnRleHQucHJpbWFyeUNoYW5uZWx9IC8gJHt0aGVtZS52YXJzLnBhbGV0dGUuYWN0aW9uLmhvdmVyT3BhY2l0eX0pYCA6IGFscGhhKHRoZW1lLnBhbGV0dGUudGV4dC5wcmltYXJ5LCB0aGVtZS5wYWxldHRlLmFjdGlvbi5ob3Zlck9wYWNpdHkpLFxuICAgICAgLy8gUmVzZXQgb24gdG91Y2ggZGV2aWNlcywgaXQgZG9lc24ndCBhZGQgc3BlY2lmaWNpdHlcbiAgICAgICdAbWVkaWEgKGhvdmVyOiBub25lKSc6IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnXG4gICAgICB9XG4gICAgfSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAndGV4dCcgJiYgb3duZXJTdGF0ZS5jb2xvciAhPT0gJ2luaGVyaXQnICYmIHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IGByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW5DaGFubmVsfSAvICR7dGhlbWUudmFycy5wYWxldHRlLmFjdGlvbi5ob3Zlck9wYWNpdHl9KWAgOiBhbHBoYSh0aGVtZS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW4sIHRoZW1lLnBhbGV0dGUuYWN0aW9uLmhvdmVyT3BhY2l0eSksXG4gICAgICAvLyBSZXNldCBvbiB0b3VjaCBkZXZpY2VzLCBpdCBkb2Vzbid0IGFkZCBzcGVjaWZpY2l0eVxuICAgICAgJ0BtZWRpYSAoaG92ZXI6IG5vbmUpJzoge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCdcbiAgICAgIH1cbiAgICB9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdvdXRsaW5lZCcgJiYgb3duZXJTdGF0ZS5jb2xvciAhPT0gJ2luaGVyaXQnICYmIHtcbiAgICAgIGJvcmRlcjogYDFweCBzb2xpZCAkeyh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW59YCxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IGByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW5DaGFubmVsfSAvICR7dGhlbWUudmFycy5wYWxldHRlLmFjdGlvbi5ob3Zlck9wYWNpdHl9KWAgOiBhbHBoYSh0aGVtZS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW4sIHRoZW1lLnBhbGV0dGUuYWN0aW9uLmhvdmVyT3BhY2l0eSksXG4gICAgICAvLyBSZXNldCBvbiB0b3VjaCBkZXZpY2VzLCBpdCBkb2Vzbid0IGFkZCBzcGVjaWZpY2l0eVxuICAgICAgJ0BtZWRpYSAoaG92ZXI6IG5vbmUpJzoge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCdcbiAgICAgIH1cbiAgICB9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdjb250YWluZWQnICYmIHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IHRoZW1lLnZhcnMucGFsZXR0ZS5CdXR0b24uaW5oZXJpdENvbnRhaW5lZEhvdmVyQmcgOiBpbmhlcml0Q29udGFpbmVkSG92ZXJCYWNrZ3JvdW5kQ29sb3IsXG4gICAgICBib3hTaGFkb3c6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5zaGFkb3dzWzRdLFxuICAgICAgLy8gUmVzZXQgb24gdG91Y2ggZGV2aWNlcywgaXQgZG9lc24ndCBhZGQgc3BlY2lmaWNpdHlcbiAgICAgICdAbWVkaWEgKGhvdmVyOiBub25lKSc6IHtcbiAgICAgICAgYm94U2hhZG93OiAodGhlbWUudmFycyB8fCB0aGVtZSkuc2hhZG93c1syXSxcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5ncmV5WzMwMF1cbiAgICAgIH1cbiAgICB9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdjb250YWluZWQnICYmIG93bmVyU3RhdGUuY29sb3IgIT09ICdpbmhlcml0JyAmJiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLmRhcmssXG4gICAgICAvLyBSZXNldCBvbiB0b3VjaCBkZXZpY2VzLCBpdCBkb2Vzbid0IGFkZCBzcGVjaWZpY2l0eVxuICAgICAgJ0BtZWRpYSAoaG92ZXI6IG5vbmUpJzoge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW5cbiAgICAgIH1cbiAgICB9KSxcbiAgICAnJjphY3RpdmUnOiBfZXh0ZW5kcyh7fSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnY29udGFpbmVkJyAmJiB7XG4gICAgICBib3hTaGFkb3c6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5zaGFkb3dzWzhdXG4gICAgfSksXG4gICAgW2AmLiR7YnV0dG9uQ2xhc3Nlcy5mb2N1c1Zpc2libGV9YF06IF9leHRlbmRzKHt9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdjb250YWluZWQnICYmIHtcbiAgICAgIGJveFNoYWRvdzogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnNoYWRvd3NbNl1cbiAgICB9KSxcbiAgICBbYCYuJHtidXR0b25DbGFzc2VzLmRpc2FibGVkfWBdOiBfZXh0ZW5kcyh7XG4gICAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuYWN0aW9uLmRpc2FibGVkXG4gICAgfSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnb3V0bGluZWQnICYmIHtcbiAgICAgIGJvcmRlcjogYDFweCBzb2xpZCAkeyh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmFjdGlvbi5kaXNhYmxlZEJhY2tncm91bmR9YFxuICAgIH0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2NvbnRhaW5lZCcgJiYge1xuICAgICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmFjdGlvbi5kaXNhYmxlZCxcbiAgICAgIGJveFNoYWRvdzogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnNoYWRvd3NbMF0sXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmFjdGlvbi5kaXNhYmxlZEJhY2tncm91bmRcbiAgICB9KVxuICB9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICd0ZXh0JyAmJiB7XG4gICAgcGFkZGluZzogJzZweCA4cHgnXG4gIH0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ3RleHQnICYmIG93bmVyU3RhdGUuY29sb3IgIT09ICdpbmhlcml0JyAmJiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW5cbiAgfSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnb3V0bGluZWQnICYmIHtcbiAgICBwYWRkaW5nOiAnNXB4IDE1cHgnLFxuICAgIGJvcmRlcjogJzFweCBzb2xpZCBjdXJyZW50Q29sb3InXG4gIH0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ291dGxpbmVkJyAmJiBvd25lclN0YXRlLmNvbG9yICE9PSAnaW5oZXJpdCcgJiYge1xuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluLFxuICAgIGJvcmRlcjogdGhlbWUudmFycyA/IGAxcHggc29saWQgcmdiYSgke3RoZW1lLnZhcnMucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluQ2hhbm5lbH0gLyAwLjUpYCA6IGAxcHggc29saWQgJHthbHBoYSh0aGVtZS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW4sIDAuNSl9YFxuICB9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdjb250YWluZWQnICYmIHtcbiAgICBjb2xvcjogdGhlbWUudmFycyA/XG4gICAgLy8gdGhpcyBpcyBzYWZlIGJlY2F1c2UgZ3JleSBkb2VzIG5vdCBjaGFuZ2UgYmV0d2VlbiBkZWZhdWx0IGxpZ2h0L2RhcmsgbW9kZVxuICAgIHRoZW1lLnZhcnMucGFsZXR0ZS50ZXh0LnByaW1hcnkgOiAoX3RoZW1lJHBhbGV0dGUkZ2V0Q29uID0gKF90aGVtZSRwYWxldHRlID0gdGhlbWUucGFsZXR0ZSkuZ2V0Q29udHJhc3RUZXh0KSA9PSBudWxsID8gdm9pZCAwIDogX3RoZW1lJHBhbGV0dGUkZ2V0Q29uLmNhbGwoX3RoZW1lJHBhbGV0dGUsIHRoZW1lLnBhbGV0dGUuZ3JleVszMDBdKSxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyB0aGVtZS52YXJzLnBhbGV0dGUuQnV0dG9uLmluaGVyaXRDb250YWluZWRCZyA6IGluaGVyaXRDb250YWluZWRCYWNrZ3JvdW5kQ29sb3IsXG4gICAgYm94U2hhZG93OiAodGhlbWUudmFycyB8fCB0aGVtZSkuc2hhZG93c1syXVxuICB9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdjb250YWluZWQnICYmIG93bmVyU3RhdGUuY29sb3IgIT09ICdpbmhlcml0JyAmJiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLmNvbnRyYXN0VGV4dCxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW5cbiAgfSwgb3duZXJTdGF0ZS5jb2xvciA9PT0gJ2luaGVyaXQnICYmIHtcbiAgICBjb2xvcjogJ2luaGVyaXQnLFxuICAgIGJvcmRlckNvbG9yOiAnY3VycmVudENvbG9yJ1xuICB9LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYgb3duZXJTdGF0ZS52YXJpYW50ID09PSAndGV4dCcgJiYge1xuICAgIHBhZGRpbmc6ICc0cHggNXB4JyxcbiAgICBmb250U2l6ZTogdGhlbWUudHlwb2dyYXBoeS5weFRvUmVtKDEzKVxuICB9LCBvd25lclN0YXRlLnNpemUgPT09ICdsYXJnZScgJiYgb3duZXJTdGF0ZS52YXJpYW50ID09PSAndGV4dCcgJiYge1xuICAgIHBhZGRpbmc6ICc4cHggMTFweCcsXG4gICAgZm9udFNpemU6IHRoZW1lLnR5cG9ncmFwaHkucHhUb1JlbSgxNSlcbiAgfSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ291dGxpbmVkJyAmJiB7XG4gICAgcGFkZGluZzogJzNweCA5cHgnLFxuICAgIGZvbnRTaXplOiB0aGVtZS50eXBvZ3JhcGh5LnB4VG9SZW0oMTMpXG4gIH0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ2xhcmdlJyAmJiBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdvdXRsaW5lZCcgJiYge1xuICAgIHBhZGRpbmc6ICc3cHggMjFweCcsXG4gICAgZm9udFNpemU6IHRoZW1lLnR5cG9ncmFwaHkucHhUb1JlbSgxNSlcbiAgfSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2NvbnRhaW5lZCcgJiYge1xuICAgIHBhZGRpbmc6ICc0cHggMTBweCcsXG4gICAgZm9udFNpemU6IHRoZW1lLnR5cG9ncmFwaHkucHhUb1JlbSgxMylcbiAgfSwgb3duZXJTdGF0ZS5zaXplID09PSAnbGFyZ2UnICYmIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2NvbnRhaW5lZCcgJiYge1xuICAgIHBhZGRpbmc6ICc4cHggMjJweCcsXG4gICAgZm9udFNpemU6IHRoZW1lLnR5cG9ncmFwaHkucHhUb1JlbSgxNSlcbiAgfSwgb3duZXJTdGF0ZS5mdWxsV2lkdGggJiYge1xuICAgIHdpZHRoOiAnMTAwJSdcbiAgfSk7XG59LCAoe1xuICBvd25lclN0YXRlXG59KSA9PiBvd25lclN0YXRlLmRpc2FibGVFbGV2YXRpb24gJiYge1xuICBib3hTaGFkb3c6ICdub25lJyxcbiAgJyY6aG92ZXInOiB7XG4gICAgYm94U2hhZG93OiAnbm9uZSdcbiAgfSxcbiAgW2AmLiR7YnV0dG9uQ2xhc3Nlcy5mb2N1c1Zpc2libGV9YF06IHtcbiAgICBib3hTaGFkb3c6ICdub25lJ1xuICB9LFxuICAnJjphY3RpdmUnOiB7XG4gICAgYm94U2hhZG93OiAnbm9uZSdcbiAgfSxcbiAgW2AmLiR7YnV0dG9uQ2xhc3Nlcy5kaXNhYmxlZH1gXToge1xuICAgIGJveFNoYWRvdzogJ25vbmUnXG4gIH1cbn0pO1xuY29uc3QgQnV0dG9uU3RhcnRJY29uID0gc3R5bGVkKCdzcGFuJywge1xuICBuYW1lOiAnTXVpQnV0dG9uJyxcbiAgc2xvdDogJ1N0YXJ0SWNvbicsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMuc3RhcnRJY29uLCBzdHlsZXNbYGljb25TaXplJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuc2l6ZSl9YF1dO1xuICB9XG59KSgoe1xuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGRpc3BsYXk6ICdpbmhlcml0JyxcbiAgbWFyZ2luUmlnaHQ6IDgsXG4gIG1hcmdpbkxlZnQ6IC00XG59LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICBtYXJnaW5MZWZ0OiAtMlxufSwgY29tbW9uSWNvblN0eWxlcyhvd25lclN0YXRlKSkpO1xuY29uc3QgQnV0dG9uRW5kSWNvbiA9IHN0eWxlZCgnc3BhbicsIHtcbiAgbmFtZTogJ011aUJ1dHRvbicsXG4gIHNsb3Q6ICdFbmRJY29uJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5lbmRJY29uLCBzdHlsZXNbYGljb25TaXplJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuc2l6ZSl9YF1dO1xuICB9XG59KSgoe1xuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGRpc3BsYXk6ICdpbmhlcml0JyxcbiAgbWFyZ2luUmlnaHQ6IC00LFxuICBtYXJnaW5MZWZ0OiA4XG59LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICBtYXJnaW5SaWdodDogLTJcbn0sIGNvbW1vbkljb25TdHlsZXMob3duZXJTdGF0ZSkpKTtcbmNvbnN0IEJ1dHRvbiA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIEJ1dHRvbihpblByb3BzLCByZWYpIHtcbiAgLy8gcHJvcHMgcHJpb3JpdHk6IGBpblByb3BzYCA+IGBjb250ZXh0UHJvcHNgID4gYHRoZW1lRGVmYXVsdFByb3BzYFxuICBjb25zdCBjb250ZXh0UHJvcHMgPSBSZWFjdC51c2VDb250ZXh0KEJ1dHRvbkdyb3VwQ29udGV4dCk7XG4gIGNvbnN0IGJ1dHRvbkdyb3VwQnV0dG9uQ29udGV4dFBvc2l0aW9uQ2xhc3NOYW1lID0gUmVhY3QudXNlQ29udGV4dChCdXR0b25Hcm91cEJ1dHRvbkNvbnRleHQpO1xuICBjb25zdCByZXNvbHZlZFByb3BzID0gcmVzb2x2ZVByb3BzKGNvbnRleHRQcm9wcywgaW5Qcm9wcyk7XG4gIGNvbnN0IHByb3BzID0gdXNlRGVmYXVsdFByb3BzKHtcbiAgICBwcm9wczogcmVzb2x2ZWRQcm9wcyxcbiAgICBuYW1lOiAnTXVpQnV0dG9uJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY2hpbGRyZW4sXG4gICAgICBjb2xvciA9ICdwcmltYXJ5JyxcbiAgICAgIGNvbXBvbmVudCA9ICdidXR0b24nLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgICAgIGRpc2FibGVFbGV2YXRpb24gPSBmYWxzZSxcbiAgICAgIGRpc2FibGVGb2N1c1JpcHBsZSA9IGZhbHNlLFxuICAgICAgZW5kSWNvbjogZW5kSWNvblByb3AsXG4gICAgICBmb2N1c1Zpc2libGVDbGFzc05hbWUsXG4gICAgICBmdWxsV2lkdGggPSBmYWxzZSxcbiAgICAgIHNpemUgPSAnbWVkaXVtJyxcbiAgICAgIHN0YXJ0SWNvbjogc3RhcnRJY29uUHJvcCxcbiAgICAgIHR5cGUsXG4gICAgICB2YXJpYW50ID0gJ3RleHQnXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb2xvcixcbiAgICBjb21wb25lbnQsXG4gICAgZGlzYWJsZWQsXG4gICAgZGlzYWJsZUVsZXZhdGlvbixcbiAgICBkaXNhYmxlRm9jdXNSaXBwbGUsXG4gICAgZnVsbFdpZHRoLFxuICAgIHNpemUsXG4gICAgdHlwZSxcbiAgICB2YXJpYW50XG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIGNvbnN0IHN0YXJ0SWNvbiA9IHN0YXJ0SWNvblByb3AgJiYgLyojX19QVVJFX18qL19qc3goQnV0dG9uU3RhcnRJY29uLCB7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLnN0YXJ0SWNvbixcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIGNoaWxkcmVuOiBzdGFydEljb25Qcm9wXG4gIH0pO1xuICBjb25zdCBlbmRJY29uID0gZW5kSWNvblByb3AgJiYgLyojX19QVVJFX18qL19qc3goQnV0dG9uRW5kSWNvbiwge1xuICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5lbmRJY29uLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgY2hpbGRyZW46IGVuZEljb25Qcm9wXG4gIH0pO1xuICBjb25zdCBwb3NpdGlvbkNsYXNzTmFtZSA9IGJ1dHRvbkdyb3VwQnV0dG9uQ29udGV4dFBvc2l0aW9uQ2xhc3NOYW1lIHx8ICcnO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKEJ1dHRvblJvb3QsIF9leHRlbmRzKHtcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIGNsYXNzTmFtZTogY2xzeChjb250ZXh0UHJvcHMuY2xhc3NOYW1lLCBjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSwgcG9zaXRpb25DbGFzc05hbWUpLFxuICAgIGNvbXBvbmVudDogY29tcG9uZW50LFxuICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICBmb2N1c1JpcHBsZTogIWRpc2FibGVGb2N1c1JpcHBsZSxcbiAgICBmb2N1c1Zpc2libGVDbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5mb2N1c1Zpc2libGUsIGZvY3VzVmlzaWJsZUNsYXNzTmFtZSksXG4gICAgcmVmOiByZWYsXG4gICAgdHlwZTogdHlwZVxuICB9LCBvdGhlciwge1xuICAgIGNsYXNzZXM6IGNsYXNzZXMsXG4gICAgY2hpbGRyZW46IFtzdGFydEljb24sIGNoaWxkcmVuLCBlbmRJY29uXVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEJ1dHRvbi5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFdhcm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIOKUglxuICAvLyDilIIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICDilIJcbiAgLy8g4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJdCBzdXBwb3J0cyBib3RoIGRlZmF1bHQgYW5kIGN1c3RvbSB0aGVtZSBjb2xvcnMsIHdoaWNoIGNhbiBiZSBhZGRlZCBhcyBzaG93biBpbiB0aGVcbiAgICogW3BhbGV0dGUgY3VzdG9taXphdGlvbiBndWlkZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vcGFsZXR0ZS8jY3VzdG9tLWNvbG9ycykuXG4gICAqIEBkZWZhdWx0ICdwcmltYXJ5J1xuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnaW5oZXJpdCcsICdwcmltYXJ5JywgJ3NlY29uZGFyeScsICdzdWNjZXNzJywgJ2Vycm9yJywgJ2luZm8nLCAnd2FybmluZyddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIG5vIGVsZXZhdGlvbiBpcyB1c2VkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUVsZXZhdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSAga2V5Ym9hcmQgZm9jdXMgcmlwcGxlIGlzIGRpc2FibGVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUZvY3VzUmlwcGxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHJpcHBsZSBlZmZlY3QgaXMgZGlzYWJsZWQuXG4gICAqXG4gICAqIOKaoO+4jyBXaXRob3V0IGEgcmlwcGxlIHRoZXJlIGlzIG5vIHN0eWxpbmcgZm9yIDpmb2N1cy12aXNpYmxlIGJ5IGRlZmF1bHQuIEJlIHN1cmVcbiAgICogdG8gaGlnaGxpZ2h0IHRoZSBlbGVtZW50IGJ5IGFwcGx5aW5nIHNlcGFyYXRlIHN0eWxlcyB3aXRoIHRoZSBgLk11aS1mb2N1c1Zpc2libGVgIGNsYXNzLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVJpcHBsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBFbGVtZW50IHBsYWNlZCBhZnRlciB0aGUgY2hpbGRyZW4uXG4gICAqL1xuICBlbmRJY29uOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGZvY3VzVmlzaWJsZUNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGJ1dHRvbiB3aWxsIHRha2UgdXAgdGhlIGZ1bGwgd2lkdGggb2YgaXRzIGNvbnRhaW5lci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgVVJMIHRvIGxpbmsgdG8gd2hlbiB0aGUgYnV0dG9uIGlzIGNsaWNrZWQuXG4gICAqIElmIGRlZmluZWQsIGFuIGBhYCBlbGVtZW50IHdpbGwgYmUgdXNlZCBhcyB0aGUgcm9vdCBub2RlLlxuICAgKi9cbiAgaHJlZjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBzaXplIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIGBzbWFsbGAgaXMgZXF1aXZhbGVudCB0byB0aGUgZGVuc2UgYnV0dG9uIHN0eWxpbmcuXG4gICAqIEBkZWZhdWx0ICdtZWRpdW0nXG4gICAqL1xuICBzaXplOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ3NtYWxsJywgJ21lZGl1bScsICdsYXJnZSddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogRWxlbWVudCBwbGFjZWQgYmVmb3JlIHRoZSBjaGlsZHJlbi5cbiAgICovXG4gIHN0YXJ0SWNvbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICB0eXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydidXR0b24nLCAncmVzZXQnLCAnc3VibWl0J10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqIEBkZWZhdWx0ICd0ZXh0J1xuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydjb250YWluZWQnLCAnb3V0bGluZWQnLCAndGV4dCddKSwgUHJvcFR5cGVzLnN0cmluZ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgQnV0dG9uOyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFdpbmRvdyhub2RlKSB7XG4gIGlmIChub2RlID09IG51bGwpIHtcbiAgICByZXR1cm4gd2luZG93O1xuICB9XG5cbiAgaWYgKG5vZGUudG9TdHJpbmcoKSAhPT0gJ1tvYmplY3QgV2luZG93XScpIHtcbiAgICB2YXIgb3duZXJEb2N1bWVudCA9IG5vZGUub3duZXJEb2N1bWVudDtcbiAgICByZXR1cm4gb3duZXJEb2N1bWVudCA/IG93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcgfHwgd2luZG93IDogd2luZG93O1xuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59IiwiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcblxuZnVuY3Rpb24gaXNFbGVtZW50KG5vZGUpIHtcbiAgdmFyIE93bkVsZW1lbnQgPSBnZXRXaW5kb3cobm9kZSkuRWxlbWVudDtcbiAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBPd25FbGVtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50O1xufVxuXG5mdW5jdGlvbiBpc0hUTUxFbGVtZW50KG5vZGUpIHtcbiAgdmFyIE93bkVsZW1lbnQgPSBnZXRXaW5kb3cobm9kZSkuSFRNTEVsZW1lbnQ7XG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgT3duRWxlbWVudCB8fCBub2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGlzU2hhZG93Um9vdChub2RlKSB7XG4gIC8vIElFIDExIGhhcyBubyBTaGFkb3dSb290XG4gIGlmICh0eXBlb2YgU2hhZG93Um9vdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgT3duRWxlbWVudCA9IGdldFdpbmRvdyhub2RlKS5TaGFkb3dSb290O1xuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIE93bkVsZW1lbnQgfHwgbm9kZSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3Q7XG59XG5cbmV4cG9ydCB7IGlzRWxlbWVudCwgaXNIVE1MRWxlbWVudCwgaXNTaGFkb3dSb290IH07IiwiZXhwb3J0IHZhciBtYXggPSBNYXRoLm1heDtcbmV4cG9ydCB2YXIgbWluID0gTWF0aC5taW47XG5leHBvcnQgdmFyIHJvdW5kID0gTWF0aC5yb3VuZDsiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVQVN0cmluZygpIHtcbiAgdmFyIHVhRGF0YSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhO1xuXG4gIGlmICh1YURhdGEgIT0gbnVsbCAmJiB1YURhdGEuYnJhbmRzICYmIEFycmF5LmlzQXJyYXkodWFEYXRhLmJyYW5kcykpIHtcbiAgICByZXR1cm4gdWFEYXRhLmJyYW5kcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBpdGVtLmJyYW5kICsgXCIvXCIgKyBpdGVtLnZlcnNpb247XG4gICAgfSkuam9pbignICcpO1xuICB9XG5cbiAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQ7XG59IiwiaW1wb3J0IGdldFVBU3RyaW5nIGZyb20gXCIuLi91dGlscy91c2VyQWdlbnQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzTGF5b3V0Vmlld3BvcnQoKSB7XG4gIHJldHVybiAhL14oKD8hY2hyb21lfGFuZHJvaWQpLikqc2FmYXJpL2kudGVzdChnZXRVQVN0cmluZygpKTtcbn0iLCJpbXBvcnQgeyBpc0VsZW1lbnQsIGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgeyByb3VuZCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGlzTGF5b3V0Vmlld3BvcnQgZnJvbSBcIi4vaXNMYXlvdXRWaWV3cG9ydC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIGluY2x1ZGVTY2FsZSwgaXNGaXhlZFN0cmF0ZWd5KSB7XG4gIGlmIChpbmNsdWRlU2NhbGUgPT09IHZvaWQgMCkge1xuICAgIGluY2x1ZGVTY2FsZSA9IGZhbHNlO1xuICB9XG5cbiAgaWYgKGlzRml4ZWRTdHJhdGVneSA9PT0gdm9pZCAwKSB7XG4gICAgaXNGaXhlZFN0cmF0ZWd5ID0gZmFsc2U7XG4gIH1cblxuICB2YXIgY2xpZW50UmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHZhciBzY2FsZVggPSAxO1xuICB2YXIgc2NhbGVZID0gMTtcblxuICBpZiAoaW5jbHVkZVNjYWxlICYmIGlzSFRNTEVsZW1lbnQoZWxlbWVudCkpIHtcbiAgICBzY2FsZVggPSBlbGVtZW50Lm9mZnNldFdpZHRoID4gMCA/IHJvdW5kKGNsaWVudFJlY3Qud2lkdGgpIC8gZWxlbWVudC5vZmZzZXRXaWR0aCB8fCAxIDogMTtcbiAgICBzY2FsZVkgPSBlbGVtZW50Lm9mZnNldEhlaWdodCA+IDAgPyByb3VuZChjbGllbnRSZWN0LmhlaWdodCkgLyBlbGVtZW50Lm9mZnNldEhlaWdodCB8fCAxIDogMTtcbiAgfVxuXG4gIHZhciBfcmVmID0gaXNFbGVtZW50KGVsZW1lbnQpID8gZ2V0V2luZG93KGVsZW1lbnQpIDogd2luZG93LFxuICAgICAgdmlzdWFsVmlld3BvcnQgPSBfcmVmLnZpc3VhbFZpZXdwb3J0O1xuXG4gIHZhciBhZGRWaXN1YWxPZmZzZXRzID0gIWlzTGF5b3V0Vmlld3BvcnQoKSAmJiBpc0ZpeGVkU3RyYXRlZ3k7XG4gIHZhciB4ID0gKGNsaWVudFJlY3QubGVmdCArIChhZGRWaXN1YWxPZmZzZXRzICYmIHZpc3VhbFZpZXdwb3J0ID8gdmlzdWFsVmlld3BvcnQub2Zmc2V0TGVmdCA6IDApKSAvIHNjYWxlWDtcbiAgdmFyIHkgPSAoY2xpZW50UmVjdC50b3AgKyAoYWRkVmlzdWFsT2Zmc2V0cyAmJiB2aXN1YWxWaWV3cG9ydCA/IHZpc3VhbFZpZXdwb3J0Lm9mZnNldFRvcCA6IDApKSAvIHNjYWxlWTtcbiAgdmFyIHdpZHRoID0gY2xpZW50UmVjdC53aWR0aCAvIHNjYWxlWDtcbiAgdmFyIGhlaWdodCA9IGNsaWVudFJlY3QuaGVpZ2h0IC8gc2NhbGVZO1xuICByZXR1cm4ge1xuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICB0b3A6IHksXG4gICAgcmlnaHQ6IHggKyB3aWR0aCxcbiAgICBib3R0b206IHkgKyBoZWlnaHQsXG4gICAgbGVmdDogeCxcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfTtcbn0iLCJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0V2luZG93U2Nyb2xsKG5vZGUpIHtcbiAgdmFyIHdpbiA9IGdldFdpbmRvdyhub2RlKTtcbiAgdmFyIHNjcm9sbExlZnQgPSB3aW4ucGFnZVhPZmZzZXQ7XG4gIHZhciBzY3JvbGxUb3AgPSB3aW4ucGFnZVlPZmZzZXQ7XG4gIHJldHVybiB7XG4gICAgc2Nyb2xsTGVmdDogc2Nyb2xsTGVmdCxcbiAgICBzY3JvbGxUb3A6IHNjcm9sbFRvcFxuICB9O1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEhUTUxFbGVtZW50U2Nyb2xsKGVsZW1lbnQpIHtcbiAgcmV0dXJuIHtcbiAgICBzY3JvbGxMZWZ0OiBlbGVtZW50LnNjcm9sbExlZnQsXG4gICAgc2Nyb2xsVG9wOiBlbGVtZW50LnNjcm9sbFRvcFxuICB9O1xufSIsImltcG9ydCBnZXRXaW5kb3dTY3JvbGwgZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBnZXRIVE1MRWxlbWVudFNjcm9sbCBmcm9tIFwiLi9nZXRIVE1MRWxlbWVudFNjcm9sbC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Tm9kZVNjcm9sbChub2RlKSB7XG4gIGlmIChub2RlID09PSBnZXRXaW5kb3cobm9kZSkgfHwgIWlzSFRNTEVsZW1lbnQobm9kZSkpIHtcbiAgICByZXR1cm4gZ2V0V2luZG93U2Nyb2xsKG5vZGUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBnZXRIVE1MRWxlbWVudFNjcm9sbChub2RlKTtcbiAgfVxufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE5vZGVOYW1lKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQgPyAoZWxlbWVudC5ub2RlTmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKSA6IG51bGw7XG59IiwiaW1wb3J0IHsgaXNFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpIHtcbiAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXTogYXNzdW1lIGJvZHkgaXMgYWx3YXlzIGF2YWlsYWJsZVxuICByZXR1cm4gKChpc0VsZW1lbnQoZWxlbWVudCkgPyBlbGVtZW50Lm93bmVyRG9jdW1lbnQgOiAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgZWxlbWVudC5kb2N1bWVudCkgfHwgd2luZG93LmRvY3VtZW50KS5kb2N1bWVudEVsZW1lbnQ7XG59IiwiaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93U2Nyb2xsIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50KSB7XG4gIC8vIElmIDxodG1sPiBoYXMgYSBDU1Mgd2lkdGggZ3JlYXRlciB0aGFuIHRoZSB2aWV3cG9ydCwgdGhlbiB0aGlzIHdpbGwgYmVcbiAgLy8gaW5jb3JyZWN0IGZvciBSVEwuXG4gIC8vIFBvcHBlciAxIGlzIGJyb2tlbiBpbiB0aGlzIGNhc2UgYW5kIG5ldmVyIGhhZCBhIGJ1ZyByZXBvcnQgc28gbGV0J3MgYXNzdW1lXG4gIC8vIGl0J3Mgbm90IGFuIGlzc3VlLiBJIGRvbid0IHRoaW5rIGFueW9uZSBldmVyIHNwZWNpZmllcyB3aWR0aCBvbiA8aHRtbD5cbiAgLy8gYW55d2F5LlxuICAvLyBCcm93c2VycyB3aGVyZSB0aGUgbGVmdCBzY3JvbGxiYXIgZG9lc24ndCBjYXVzZSBhbiBpc3N1ZSByZXBvcnQgYDBgIGZvclxuICAvLyB0aGlzIChlLmcuIEVkZ2UgMjAxOSwgSUUxMSwgU2FmYXJpKVxuICByZXR1cm4gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSkubGVmdCArIGdldFdpbmRvd1Njcm9sbChlbGVtZW50KS5zY3JvbGxMZWZ0O1xufSIsImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldFdpbmRvdyhlbGVtZW50KS5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xufSIsImltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzU2Nyb2xsUGFyZW50KGVsZW1lbnQpIHtcbiAgLy8gRmlyZWZveCB3YW50cyB1cyB0byBjaGVjayBgLXhgIGFuZCBgLXlgIHZhcmlhdGlvbnMgYXMgd2VsbFxuICB2YXIgX2dldENvbXB1dGVkU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLFxuICAgICAgb3ZlcmZsb3cgPSBfZ2V0Q29tcHV0ZWRTdHlsZS5vdmVyZmxvdyxcbiAgICAgIG92ZXJmbG93WCA9IF9nZXRDb21wdXRlZFN0eWxlLm92ZXJmbG93WCxcbiAgICAgIG92ZXJmbG93WSA9IF9nZXRDb21wdXRlZFN0eWxlLm92ZXJmbG93WTtcblxuICByZXR1cm4gL2F1dG98c2Nyb2xsfG92ZXJsYXl8aGlkZGVuLy50ZXN0KG92ZXJmbG93ICsgb3ZlcmZsb3dZICsgb3ZlcmZsb3dYKTtcbn0iLCJpbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IGdldE5vZGVTY3JvbGwgZnJvbSBcIi4vZ2V0Tm9kZVNjcm9sbC5qc1wiO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbEJhclggZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsQmFyWC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBpc1Njcm9sbFBhcmVudCBmcm9tIFwiLi9pc1Njcm9sbFBhcmVudC5qc1wiO1xuaW1wb3J0IHsgcm91bmQgfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiO1xuXG5mdW5jdGlvbiBpc0VsZW1lbnRTY2FsZWQoZWxlbWVudCkge1xuICB2YXIgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHZhciBzY2FsZVggPSByb3VuZChyZWN0LndpZHRoKSAvIGVsZW1lbnQub2Zmc2V0V2lkdGggfHwgMTtcbiAgdmFyIHNjYWxlWSA9IHJvdW5kKHJlY3QuaGVpZ2h0KSAvIGVsZW1lbnQub2Zmc2V0SGVpZ2h0IHx8IDE7XG4gIHJldHVybiBzY2FsZVggIT09IDEgfHwgc2NhbGVZICE9PSAxO1xufSAvLyBSZXR1cm5zIHRoZSBjb21wb3NpdGUgcmVjdCBvZiBhbiBlbGVtZW50IHJlbGF0aXZlIHRvIGl0cyBvZmZzZXRQYXJlbnQuXG4vLyBDb21wb3NpdGUgbWVhbnMgaXQgdGFrZXMgaW50byBhY2NvdW50IHRyYW5zZm9ybXMgYXMgd2VsbCBhcyBsYXlvdXQuXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Q29tcG9zaXRlUmVjdChlbGVtZW50T3JWaXJ0dWFsRWxlbWVudCwgb2Zmc2V0UGFyZW50LCBpc0ZpeGVkKSB7XG4gIGlmIChpc0ZpeGVkID09PSB2b2lkIDApIHtcbiAgICBpc0ZpeGVkID0gZmFsc2U7XG4gIH1cblxuICB2YXIgaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgPSBpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIHZhciBvZmZzZXRQYXJlbnRJc1NjYWxlZCA9IGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KSAmJiBpc0VsZW1lbnRTY2FsZWQob2Zmc2V0UGFyZW50KTtcbiAgdmFyIGRvY3VtZW50RWxlbWVudCA9IGdldERvY3VtZW50RWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICB2YXIgcmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50T3JWaXJ0dWFsRWxlbWVudCwgb2Zmc2V0UGFyZW50SXNTY2FsZWQsIGlzRml4ZWQpO1xuICB2YXIgc2Nyb2xsID0ge1xuICAgIHNjcm9sbExlZnQ6IDAsXG4gICAgc2Nyb2xsVG9wOiAwXG4gIH07XG4gIHZhciBvZmZzZXRzID0ge1xuICAgIHg6IDAsXG4gICAgeTogMFxuICB9O1xuXG4gIGlmIChpc09mZnNldFBhcmVudEFuRWxlbWVudCB8fCAhaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgJiYgIWlzRml4ZWQpIHtcbiAgICBpZiAoZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSAhPT0gJ2JvZHknIHx8IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wb3BwZXJqcy9wb3BwZXItY29yZS9pc3N1ZXMvMTA3OFxuICAgIGlzU2Nyb2xsUGFyZW50KGRvY3VtZW50RWxlbWVudCkpIHtcbiAgICAgIHNjcm9sbCA9IGdldE5vZGVTY3JvbGwob2Zmc2V0UGFyZW50KTtcbiAgICB9XG5cbiAgICBpZiAoaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpKSB7XG4gICAgICBvZmZzZXRzID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KG9mZnNldFBhcmVudCwgdHJ1ZSk7XG4gICAgICBvZmZzZXRzLnggKz0gb2Zmc2V0UGFyZW50LmNsaWVudExlZnQ7XG4gICAgICBvZmZzZXRzLnkgKz0gb2Zmc2V0UGFyZW50LmNsaWVudFRvcDtcbiAgICB9IGVsc2UgaWYgKGRvY3VtZW50RWxlbWVudCkge1xuICAgICAgb2Zmc2V0cy54ID0gZ2V0V2luZG93U2Nyb2xsQmFyWChkb2N1bWVudEVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgeDogcmVjdC5sZWZ0ICsgc2Nyb2xsLnNjcm9sbExlZnQgLSBvZmZzZXRzLngsXG4gICAgeTogcmVjdC50b3AgKyBzY3JvbGwuc2Nyb2xsVG9wIC0gb2Zmc2V0cy55LFxuICAgIHdpZHRoOiByZWN0LndpZHRoLFxuICAgIGhlaWdodDogcmVjdC5oZWlnaHRcbiAgfTtcbn0iLCJpbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiOyAvLyBSZXR1cm5zIHRoZSBsYXlvdXQgcmVjdCBvZiBhbiBlbGVtZW50IHJlbGF0aXZlIHRvIGl0cyBvZmZzZXRQYXJlbnQuIExheW91dFxuLy8gbWVhbnMgaXQgZG9lc24ndCB0YWtlIGludG8gYWNjb3VudCB0cmFuc2Zvcm1zLlxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRMYXlvdXRSZWN0KGVsZW1lbnQpIHtcbiAgdmFyIGNsaWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCk7IC8vIFVzZSB0aGUgY2xpZW50UmVjdCBzaXplcyBpZiBpdCdzIG5vdCBiZWVuIHRyYW5zZm9ybWVkLlxuICAvLyBGaXhlcyBodHRwczovL2dpdGh1Yi5jb20vcG9wcGVyanMvcG9wcGVyLWNvcmUvaXNzdWVzLzEyMjNcblxuICB2YXIgd2lkdGggPSBlbGVtZW50Lm9mZnNldFdpZHRoO1xuICB2YXIgaGVpZ2h0ID0gZWxlbWVudC5vZmZzZXRIZWlnaHQ7XG5cbiAgaWYgKE1hdGguYWJzKGNsaWVudFJlY3Qud2lkdGggLSB3aWR0aCkgPD0gMSkge1xuICAgIHdpZHRoID0gY2xpZW50UmVjdC53aWR0aDtcbiAgfVxuXG4gIGlmIChNYXRoLmFicyhjbGllbnRSZWN0LmhlaWdodCAtIGhlaWdodCkgPD0gMSkge1xuICAgIGhlaWdodCA9IGNsaWVudFJlY3QuaGVpZ2h0O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB4OiBlbGVtZW50Lm9mZnNldExlZnQsXG4gICAgeTogZWxlbWVudC5vZmZzZXRUb3AsXG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0XG4gIH07XG59IiwiaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IHsgaXNTaGFkb3dSb290IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0UGFyZW50Tm9kZShlbGVtZW50KSB7XG4gIGlmIChnZXROb2RlTmFtZShlbGVtZW50KSA9PT0gJ2h0bWwnKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICByZXR1cm4gKC8vIHRoaXMgaXMgYSBxdWlja2VyIChidXQgbGVzcyB0eXBlIHNhZmUpIHdheSB0byBzYXZlIHF1aXRlIHNvbWUgYnl0ZXMgZnJvbSB0aGUgYnVuZGxlXG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXVxuICAgIC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgIGVsZW1lbnQuYXNzaWduZWRTbG90IHx8IC8vIHN0ZXAgaW50byB0aGUgc2hhZG93IERPTSBvZiB0aGUgcGFyZW50IG9mIGEgc2xvdHRlZCBub2RlXG4gICAgZWxlbWVudC5wYXJlbnROb2RlIHx8ICggLy8gRE9NIEVsZW1lbnQgZGV0ZWN0ZWRcbiAgICBpc1NoYWRvd1Jvb3QoZWxlbWVudCkgPyBlbGVtZW50Lmhvc3QgOiBudWxsKSB8fCAvLyBTaGFkb3dSb290IGRldGVjdGVkXG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF06IEhUTUxFbGVtZW50IGlzIGEgTm9kZVxuICAgIGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSAvLyBmYWxsYmFja1xuXG4gICk7XG59IiwiaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGlzU2Nyb2xsUGFyZW50IGZyb20gXCIuL2lzU2Nyb2xsUGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRTY3JvbGxQYXJlbnQobm9kZSkge1xuICBpZiAoWydodG1sJywgJ2JvZHknLCAnI2RvY3VtZW50J10uaW5kZXhPZihnZXROb2RlTmFtZShub2RlKSkgPj0gMCkge1xuICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl06IGFzc3VtZSBib2R5IGlzIGFsd2F5cyBhdmFpbGFibGVcbiAgICByZXR1cm4gbm9kZS5vd25lckRvY3VtZW50LmJvZHk7XG4gIH1cblxuICBpZiAoaXNIVE1MRWxlbWVudChub2RlKSAmJiBpc1Njcm9sbFBhcmVudChub2RlKSkge1xuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgcmV0dXJuIGdldFNjcm9sbFBhcmVudChnZXRQYXJlbnROb2RlKG5vZGUpKTtcbn0iLCJpbXBvcnQgZ2V0U2Nyb2xsUGFyZW50IGZyb20gXCIuL2dldFNjcm9sbFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBpc1Njcm9sbFBhcmVudCBmcm9tIFwiLi9pc1Njcm9sbFBhcmVudC5qc1wiO1xuLypcbmdpdmVuIGEgRE9NIGVsZW1lbnQsIHJldHVybiB0aGUgbGlzdCBvZiBhbGwgc2Nyb2xsIHBhcmVudHMsIHVwIHRoZSBsaXN0IG9mIGFuY2Vzb3JzXG51bnRpbCB3ZSBnZXQgdG8gdGhlIHRvcCB3aW5kb3cgb2JqZWN0LiBUaGlzIGxpc3QgaXMgd2hhdCB3ZSBhdHRhY2ggc2Nyb2xsIGxpc3RlbmVyc1xudG8sIGJlY2F1c2UgaWYgYW55IG9mIHRoZXNlIHBhcmVudCBlbGVtZW50cyBzY3JvbGwsIHdlJ2xsIG5lZWQgdG8gcmUtY2FsY3VsYXRlIHRoZVxucmVmZXJlbmNlIGVsZW1lbnQncyBwb3NpdGlvbi5cbiovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxpc3RTY3JvbGxQYXJlbnRzKGVsZW1lbnQsIGxpc3QpIHtcbiAgdmFyIF9lbGVtZW50JG93bmVyRG9jdW1lbjtcblxuICBpZiAobGlzdCA9PT0gdm9pZCAwKSB7XG4gICAgbGlzdCA9IFtdO1xuICB9XG5cbiAgdmFyIHNjcm9sbFBhcmVudCA9IGdldFNjcm9sbFBhcmVudChlbGVtZW50KTtcbiAgdmFyIGlzQm9keSA9IHNjcm9sbFBhcmVudCA9PT0gKChfZWxlbWVudCRvd25lckRvY3VtZW4gPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfZWxlbWVudCRvd25lckRvY3VtZW4uYm9keSk7XG4gIHZhciB3aW4gPSBnZXRXaW5kb3coc2Nyb2xsUGFyZW50KTtcbiAgdmFyIHRhcmdldCA9IGlzQm9keSA/IFt3aW5dLmNvbmNhdCh3aW4udmlzdWFsVmlld3BvcnQgfHwgW10sIGlzU2Nyb2xsUGFyZW50KHNjcm9sbFBhcmVudCkgPyBzY3JvbGxQYXJlbnQgOiBbXSkgOiBzY3JvbGxQYXJlbnQ7XG4gIHZhciB1cGRhdGVkTGlzdCA9IGxpc3QuY29uY2F0KHRhcmdldCk7XG4gIHJldHVybiBpc0JvZHkgPyB1cGRhdGVkTGlzdCA6IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdOiBpc0JvZHkgdGVsbHMgdXMgdGFyZ2V0IHdpbGwgYmUgYW4gSFRNTEVsZW1lbnQgaGVyZVxuICB1cGRhdGVkTGlzdC5jb25jYXQobGlzdFNjcm9sbFBhcmVudHMoZ2V0UGFyZW50Tm9kZSh0YXJnZXQpKSk7XG59IiwiaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1RhYmxlRWxlbWVudChlbGVtZW50KSB7XG4gIHJldHVybiBbJ3RhYmxlJywgJ3RkJywgJ3RoJ10uaW5kZXhPZihnZXROb2RlTmFtZShlbGVtZW50KSkgPj0gMDtcbn0iLCJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50LCBpc1NoYWRvd1Jvb3QgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgaXNUYWJsZUVsZW1lbnQgZnJvbSBcIi4vaXNUYWJsZUVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRQYXJlbnROb2RlIGZyb20gXCIuL2dldFBhcmVudE5vZGUuanNcIjtcbmltcG9ydCBnZXRVQVN0cmluZyBmcm9tIFwiLi4vdXRpbHMvdXNlckFnZW50LmpzXCI7XG5cbmZ1bmN0aW9uIGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCkge1xuICBpZiAoIWlzSFRNTEVsZW1lbnQoZWxlbWVudCkgfHwgLy8gaHR0cHM6Ly9naXRodWIuY29tL3BvcHBlcmpzL3BvcHBlci1jb3JlL2lzc3Vlcy84MzdcbiAgZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wb3NpdGlvbiA9PT0gJ2ZpeGVkJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQub2Zmc2V0UGFyZW50O1xufSAvLyBgLm9mZnNldFBhcmVudGAgcmVwb3J0cyBgbnVsbGAgZm9yIGZpeGVkIGVsZW1lbnRzLCB3aGlsZSBhYnNvbHV0ZSBlbGVtZW50c1xuLy8gcmV0dXJuIHRoZSBjb250YWluaW5nIGJsb2NrXG5cblxuZnVuY3Rpb24gZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHtcbiAgdmFyIGlzRmlyZWZveCA9IC9maXJlZm94L2kudGVzdChnZXRVQVN0cmluZygpKTtcbiAgdmFyIGlzSUUgPSAvVHJpZGVudC9pLnRlc3QoZ2V0VUFTdHJpbmcoKSk7XG5cbiAgaWYgKGlzSUUgJiYgaXNIVE1MRWxlbWVudChlbGVtZW50KSkge1xuICAgIC8vIEluIElFIDksIDEwIGFuZCAxMSBmaXhlZCBlbGVtZW50cyBjb250YWluaW5nIGJsb2NrIGlzIGFsd2F5cyBlc3RhYmxpc2hlZCBieSB0aGUgdmlld3BvcnRcbiAgICB2YXIgZWxlbWVudENzcyA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG5cbiAgICBpZiAoZWxlbWVudENzcy5wb3NpdGlvbiA9PT0gJ2ZpeGVkJykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgdmFyIGN1cnJlbnROb2RlID0gZ2V0UGFyZW50Tm9kZShlbGVtZW50KTtcblxuICBpZiAoaXNTaGFkb3dSb290KGN1cnJlbnROb2RlKSkge1xuICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUuaG9zdDtcbiAgfVxuXG4gIHdoaWxlIChpc0hUTUxFbGVtZW50KGN1cnJlbnROb2RlKSAmJiBbJ2h0bWwnLCAnYm9keSddLmluZGV4T2YoZ2V0Tm9kZU5hbWUoY3VycmVudE5vZGUpKSA8IDApIHtcbiAgICB2YXIgY3NzID0gZ2V0Q29tcHV0ZWRTdHlsZShjdXJyZW50Tm9kZSk7IC8vIFRoaXMgaXMgbm9uLWV4aGF1c3RpdmUgYnV0IGNvdmVycyB0aGUgbW9zdCBjb21tb24gQ1NTIHByb3BlcnRpZXMgdGhhdFxuICAgIC8vIGNyZWF0ZSBhIGNvbnRhaW5pbmcgYmxvY2suXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0NvbnRhaW5pbmdfYmxvY2sjaWRlbnRpZnlpbmdfdGhlX2NvbnRhaW5pbmdfYmxvY2tcblxuICAgIGlmIChjc3MudHJhbnNmb3JtICE9PSAnbm9uZScgfHwgY3NzLnBlcnNwZWN0aXZlICE9PSAnbm9uZScgfHwgY3NzLmNvbnRhaW4gPT09ICdwYWludCcgfHwgWyd0cmFuc2Zvcm0nLCAncGVyc3BlY3RpdmUnXS5pbmRleE9mKGNzcy53aWxsQ2hhbmdlKSAhPT0gLTEgfHwgaXNGaXJlZm94ICYmIGNzcy53aWxsQ2hhbmdlID09PSAnZmlsdGVyJyB8fCBpc0ZpcmVmb3ggJiYgY3NzLmZpbHRlciAmJiBjc3MuZmlsdGVyICE9PSAnbm9uZScpIHtcbiAgICAgIHJldHVybiBjdXJyZW50Tm9kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5wYXJlbnROb2RlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufSAvLyBHZXRzIHRoZSBjbG9zZXN0IGFuY2VzdG9yIHBvc2l0aW9uZWQgZWxlbWVudC4gSGFuZGxlcyBzb21lIGVkZ2UgY2FzZXMsXG4vLyBzdWNoIGFzIHRhYmxlIGFuY2VzdG9ycyBhbmQgY3Jvc3MgYnJvd3NlciBidWdzLlxuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE9mZnNldFBhcmVudChlbGVtZW50KSB7XG4gIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIHZhciBvZmZzZXRQYXJlbnQgPSBnZXRUcnVlT2Zmc2V0UGFyZW50KGVsZW1lbnQpO1xuXG4gIHdoaWxlIChvZmZzZXRQYXJlbnQgJiYgaXNUYWJsZUVsZW1lbnQob2Zmc2V0UGFyZW50KSAmJiBnZXRDb21wdXRlZFN0eWxlKG9mZnNldFBhcmVudCkucG9zaXRpb24gPT09ICdzdGF0aWMnKSB7XG4gICAgb2Zmc2V0UGFyZW50ID0gZ2V0VHJ1ZU9mZnNldFBhcmVudChvZmZzZXRQYXJlbnQpO1xuICB9XG5cbiAgaWYgKG9mZnNldFBhcmVudCAmJiAoZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSA9PT0gJ2h0bWwnIHx8IGdldE5vZGVOYW1lKG9mZnNldFBhcmVudCkgPT09ICdib2R5JyAmJiBnZXRDb21wdXRlZFN0eWxlKG9mZnNldFBhcmVudCkucG9zaXRpb24gPT09ICdzdGF0aWMnKSkge1xuICAgIHJldHVybiB3aW5kb3c7XG4gIH1cblxuICByZXR1cm4gb2Zmc2V0UGFyZW50IHx8IGdldENvbnRhaW5pbmdCbG9jayhlbGVtZW50KSB8fCB3aW5kb3c7XG59IiwiZXhwb3J0IHZhciB0b3AgPSAndG9wJztcbmV4cG9ydCB2YXIgYm90dG9tID0gJ2JvdHRvbSc7XG5leHBvcnQgdmFyIHJpZ2h0ID0gJ3JpZ2h0JztcbmV4cG9ydCB2YXIgbGVmdCA9ICdsZWZ0JztcbmV4cG9ydCB2YXIgYXV0byA9ICdhdXRvJztcbmV4cG9ydCB2YXIgYmFzZVBsYWNlbWVudHMgPSBbdG9wLCBib3R0b20sIHJpZ2h0LCBsZWZ0XTtcbmV4cG9ydCB2YXIgc3RhcnQgPSAnc3RhcnQnO1xuZXhwb3J0IHZhciBlbmQgPSAnZW5kJztcbmV4cG9ydCB2YXIgY2xpcHBpbmdQYXJlbnRzID0gJ2NsaXBwaW5nUGFyZW50cyc7XG5leHBvcnQgdmFyIHZpZXdwb3J0ID0gJ3ZpZXdwb3J0JztcbmV4cG9ydCB2YXIgcG9wcGVyID0gJ3BvcHBlcic7XG5leHBvcnQgdmFyIHJlZmVyZW5jZSA9ICdyZWZlcmVuY2UnO1xuZXhwb3J0IHZhciB2YXJpYXRpb25QbGFjZW1lbnRzID0gLyojX19QVVJFX18qL2Jhc2VQbGFjZW1lbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIGFjYy5jb25jYXQoW3BsYWNlbWVudCArIFwiLVwiICsgc3RhcnQsIHBsYWNlbWVudCArIFwiLVwiICsgZW5kXSk7XG59LCBbXSk7XG5leHBvcnQgdmFyIHBsYWNlbWVudHMgPSAvKiNfX1BVUkVfXyovW10uY29uY2F0KGJhc2VQbGFjZW1lbnRzLCBbYXV0b10pLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIGFjYy5jb25jYXQoW3BsYWNlbWVudCwgcGxhY2VtZW50ICsgXCItXCIgKyBzdGFydCwgcGxhY2VtZW50ICsgXCItXCIgKyBlbmRdKTtcbn0sIFtdKTsgLy8gbW9kaWZpZXJzIHRoYXQgbmVlZCB0byByZWFkIHRoZSBET01cblxuZXhwb3J0IHZhciBiZWZvcmVSZWFkID0gJ2JlZm9yZVJlYWQnO1xuZXhwb3J0IHZhciByZWFkID0gJ3JlYWQnO1xuZXhwb3J0IHZhciBhZnRlclJlYWQgPSAnYWZ0ZXJSZWFkJzsgLy8gcHVyZS1sb2dpYyBtb2RpZmllcnNcblxuZXhwb3J0IHZhciBiZWZvcmVNYWluID0gJ2JlZm9yZU1haW4nO1xuZXhwb3J0IHZhciBtYWluID0gJ21haW4nO1xuZXhwb3J0IHZhciBhZnRlck1haW4gPSAnYWZ0ZXJNYWluJzsgLy8gbW9kaWZpZXIgd2l0aCB0aGUgcHVycG9zZSB0byB3cml0ZSB0byB0aGUgRE9NIChvciB3cml0ZSBpbnRvIGEgZnJhbWV3b3JrIHN0YXRlKVxuXG5leHBvcnQgdmFyIGJlZm9yZVdyaXRlID0gJ2JlZm9yZVdyaXRlJztcbmV4cG9ydCB2YXIgd3JpdGUgPSAnd3JpdGUnO1xuZXhwb3J0IHZhciBhZnRlcldyaXRlID0gJ2FmdGVyV3JpdGUnO1xuZXhwb3J0IHZhciBtb2RpZmllclBoYXNlcyA9IFtiZWZvcmVSZWFkLCByZWFkLCBhZnRlclJlYWQsIGJlZm9yZU1haW4sIG1haW4sIGFmdGVyTWFpbiwgYmVmb3JlV3JpdGUsIHdyaXRlLCBhZnRlcldyaXRlXTsiLCJpbXBvcnQgeyBtb2RpZmllclBoYXNlcyB9IGZyb20gXCIuLi9lbnVtcy5qc1wiOyAvLyBzb3VyY2U6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzQ5ODc1MjU1XG5cbmZ1bmN0aW9uIG9yZGVyKG1vZGlmaWVycykge1xuICB2YXIgbWFwID0gbmV3IE1hcCgpO1xuICB2YXIgdmlzaXRlZCA9IG5ldyBTZXQoKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBtb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICBtYXAuc2V0KG1vZGlmaWVyLm5hbWUsIG1vZGlmaWVyKTtcbiAgfSk7IC8vIE9uIHZpc2l0aW5nIG9iamVjdCwgY2hlY2sgZm9yIGl0cyBkZXBlbmRlbmNpZXMgYW5kIHZpc2l0IHRoZW0gcmVjdXJzaXZlbHlcblxuICBmdW5jdGlvbiBzb3J0KG1vZGlmaWVyKSB7XG4gICAgdmlzaXRlZC5hZGQobW9kaWZpZXIubmFtZSk7XG4gICAgdmFyIHJlcXVpcmVzID0gW10uY29uY2F0KG1vZGlmaWVyLnJlcXVpcmVzIHx8IFtdLCBtb2RpZmllci5yZXF1aXJlc0lmRXhpc3RzIHx8IFtdKTtcbiAgICByZXF1aXJlcy5mb3JFYWNoKGZ1bmN0aW9uIChkZXApIHtcbiAgICAgIGlmICghdmlzaXRlZC5oYXMoZGVwKSkge1xuICAgICAgICB2YXIgZGVwTW9kaWZpZXIgPSBtYXAuZ2V0KGRlcCk7XG5cbiAgICAgICAgaWYgKGRlcE1vZGlmaWVyKSB7XG4gICAgICAgICAgc29ydChkZXBNb2RpZmllcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXN1bHQucHVzaChtb2RpZmllcik7XG4gIH1cblxuICBtb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICBpZiAoIXZpc2l0ZWQuaGFzKG1vZGlmaWVyLm5hbWUpKSB7XG4gICAgICAvLyBjaGVjayBmb3IgdmlzaXRlZCBvYmplY3RcbiAgICAgIHNvcnQobW9kaWZpZXIpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG9yZGVyTW9kaWZpZXJzKG1vZGlmaWVycykge1xuICAvLyBvcmRlciBiYXNlZCBvbiBkZXBlbmRlbmNpZXNcbiAgdmFyIG9yZGVyZWRNb2RpZmllcnMgPSBvcmRlcihtb2RpZmllcnMpOyAvLyBvcmRlciBiYXNlZCBvbiBwaGFzZVxuXG4gIHJldHVybiBtb2RpZmllclBoYXNlcy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGhhc2UpIHtcbiAgICByZXR1cm4gYWNjLmNvbmNhdChvcmRlcmVkTW9kaWZpZXJzLmZpbHRlcihmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICAgIHJldHVybiBtb2RpZmllci5waGFzZSA9PT0gcGhhc2U7XG4gICAgfSkpO1xuICB9LCBbXSk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGVib3VuY2UoZm4pIHtcbiAgdmFyIHBlbmRpbmc7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFwZW5kaW5nKSB7XG4gICAgICBwZW5kaW5nID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcGVuZGluZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICByZXNvbHZlKGZuKCkpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBwZW5kaW5nO1xuICB9O1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1lcmdlQnlOYW1lKG1vZGlmaWVycykge1xuICB2YXIgbWVyZ2VkID0gbW9kaWZpZXJzLnJlZHVjZShmdW5jdGlvbiAobWVyZ2VkLCBjdXJyZW50KSB7XG4gICAgdmFyIGV4aXN0aW5nID0gbWVyZ2VkW2N1cnJlbnQubmFtZV07XG4gICAgbWVyZ2VkW2N1cnJlbnQubmFtZV0gPSBleGlzdGluZyA/IE9iamVjdC5hc3NpZ24oe30sIGV4aXN0aW5nLCBjdXJyZW50LCB7XG4gICAgICBvcHRpb25zOiBPYmplY3QuYXNzaWduKHt9LCBleGlzdGluZy5vcHRpb25zLCBjdXJyZW50Lm9wdGlvbnMpLFxuICAgICAgZGF0YTogT2JqZWN0LmFzc2lnbih7fSwgZXhpc3RpbmcuZGF0YSwgY3VycmVudC5kYXRhKVxuICAgIH0pIDogY3VycmVudDtcbiAgICByZXR1cm4gbWVyZ2VkO1xuICB9LCB7fSk7IC8vIElFMTEgZG9lcyBub3Qgc3VwcG9ydCBPYmplY3QudmFsdWVzXG5cbiAgcmV0dXJuIE9iamVjdC5rZXlzKG1lcmdlZCkubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gbWVyZ2VkW2tleV07XG4gIH0pO1xufSIsImltcG9ydCBnZXRDb21wb3NpdGVSZWN0IGZyb20gXCIuL2RvbS11dGlscy9nZXRDb21wb3NpdGVSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0TGF5b3V0UmVjdCBmcm9tIFwiLi9kb20tdXRpbHMvZ2V0TGF5b3V0UmVjdC5qc1wiO1xuaW1wb3J0IGxpc3RTY3JvbGxQYXJlbnRzIGZyb20gXCIuL2RvbS11dGlscy9saXN0U2Nyb2xsUGFyZW50cy5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgb3JkZXJNb2RpZmllcnMgZnJvbSBcIi4vdXRpbHMvb3JkZXJNb2RpZmllcnMuanNcIjtcbmltcG9ydCBkZWJvdW5jZSBmcm9tIFwiLi91dGlscy9kZWJvdW5jZS5qc1wiO1xuaW1wb3J0IG1lcmdlQnlOYW1lIGZyb20gXCIuL3V0aWxzL21lcmdlQnlOYW1lLmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4vdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanNcIjtcbmltcG9ydCB7IGlzRWxlbWVudCB9IGZyb20gXCIuL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzXCI7XG52YXIgREVGQVVMVF9PUFRJT05TID0ge1xuICBwbGFjZW1lbnQ6ICdib3R0b20nLFxuICBtb2RpZmllcnM6IFtdLFxuICBzdHJhdGVneTogJ2Fic29sdXRlJ1xufTtcblxuZnVuY3Rpb24gYXJlVmFsaWRFbGVtZW50cygpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIHJldHVybiAhYXJncy5zb21lKGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgcmV0dXJuICEoZWxlbWVudCAmJiB0eXBlb2YgZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QgPT09ICdmdW5jdGlvbicpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvcHBlckdlbmVyYXRvcihnZW5lcmF0b3JPcHRpb25zKSB7XG4gIGlmIChnZW5lcmF0b3JPcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBnZW5lcmF0b3JPcHRpb25zID0ge307XG4gIH1cblxuICB2YXIgX2dlbmVyYXRvck9wdGlvbnMgPSBnZW5lcmF0b3JPcHRpb25zLFxuICAgICAgX2dlbmVyYXRvck9wdGlvbnMkZGVmID0gX2dlbmVyYXRvck9wdGlvbnMuZGVmYXVsdE1vZGlmaWVycyxcbiAgICAgIGRlZmF1bHRNb2RpZmllcnMgPSBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYgPT09IHZvaWQgMCA/IFtdIDogX2dlbmVyYXRvck9wdGlvbnMkZGVmLFxuICAgICAgX2dlbmVyYXRvck9wdGlvbnMkZGVmMiA9IF9nZW5lcmF0b3JPcHRpb25zLmRlZmF1bHRPcHRpb25zLFxuICAgICAgZGVmYXVsdE9wdGlvbnMgPSBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYyID09PSB2b2lkIDAgPyBERUZBVUxUX09QVElPTlMgOiBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYyO1xuICByZXR1cm4gZnVuY3Rpb24gY3JlYXRlUG9wcGVyKHJlZmVyZW5jZSwgcG9wcGVyLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IGRlZmF1bHRPcHRpb25zO1xuICAgIH1cblxuICAgIHZhciBzdGF0ZSA9IHtcbiAgICAgIHBsYWNlbWVudDogJ2JvdHRvbScsXG4gICAgICBvcmRlcmVkTW9kaWZpZXJzOiBbXSxcbiAgICAgIG9wdGlvbnM6IE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfT1BUSU9OUywgZGVmYXVsdE9wdGlvbnMpLFxuICAgICAgbW9kaWZpZXJzRGF0YToge30sXG4gICAgICBlbGVtZW50czoge1xuICAgICAgICByZWZlcmVuY2U6IHJlZmVyZW5jZSxcbiAgICAgICAgcG9wcGVyOiBwb3BwZXJcbiAgICAgIH0sXG4gICAgICBhdHRyaWJ1dGVzOiB7fSxcbiAgICAgIHN0eWxlczoge31cbiAgICB9O1xuICAgIHZhciBlZmZlY3RDbGVhbnVwRm5zID0gW107XG4gICAgdmFyIGlzRGVzdHJveWVkID0gZmFsc2U7XG4gICAgdmFyIGluc3RhbmNlID0ge1xuICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgc2V0T3B0aW9uczogZnVuY3Rpb24gc2V0T3B0aW9ucyhzZXRPcHRpb25zQWN0aW9uKSB7XG4gICAgICAgIHZhciBvcHRpb25zID0gdHlwZW9mIHNldE9wdGlvbnNBY3Rpb24gPT09ICdmdW5jdGlvbicgPyBzZXRPcHRpb25zQWN0aW9uKHN0YXRlLm9wdGlvbnMpIDogc2V0T3B0aW9uc0FjdGlvbjtcbiAgICAgICAgY2xlYW51cE1vZGlmaWVyRWZmZWN0cygpO1xuICAgICAgICBzdGF0ZS5vcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdE9wdGlvbnMsIHN0YXRlLm9wdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgICBzdGF0ZS5zY3JvbGxQYXJlbnRzID0ge1xuICAgICAgICAgIHJlZmVyZW5jZTogaXNFbGVtZW50KHJlZmVyZW5jZSkgPyBsaXN0U2Nyb2xsUGFyZW50cyhyZWZlcmVuY2UpIDogcmVmZXJlbmNlLmNvbnRleHRFbGVtZW50ID8gbGlzdFNjcm9sbFBhcmVudHMocmVmZXJlbmNlLmNvbnRleHRFbGVtZW50KSA6IFtdLFxuICAgICAgICAgIHBvcHBlcjogbGlzdFNjcm9sbFBhcmVudHMocG9wcGVyKVxuICAgICAgICB9OyAvLyBPcmRlcnMgdGhlIG1vZGlmaWVycyBiYXNlZCBvbiB0aGVpciBkZXBlbmRlbmNpZXMgYW5kIGBwaGFzZWBcbiAgICAgICAgLy8gcHJvcGVydGllc1xuXG4gICAgICAgIHZhciBvcmRlcmVkTW9kaWZpZXJzID0gb3JkZXJNb2RpZmllcnMobWVyZ2VCeU5hbWUoW10uY29uY2F0KGRlZmF1bHRNb2RpZmllcnMsIHN0YXRlLm9wdGlvbnMubW9kaWZpZXJzKSkpOyAvLyBTdHJpcCBvdXQgZGlzYWJsZWQgbW9kaWZpZXJzXG5cbiAgICAgICAgc3RhdGUub3JkZXJlZE1vZGlmaWVycyA9IG9yZGVyZWRNb2RpZmllcnMuZmlsdGVyKGZ1bmN0aW9uIChtKSB7XG4gICAgICAgICAgcmV0dXJuIG0uZW5hYmxlZDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJ1bk1vZGlmaWVyRWZmZWN0cygpO1xuICAgICAgICByZXR1cm4gaW5zdGFuY2UudXBkYXRlKCk7XG4gICAgICB9LFxuICAgICAgLy8gU3luYyB1cGRhdGUg4oCTIGl0IHdpbGwgYWx3YXlzIGJlIGV4ZWN1dGVkLCBldmVuIGlmIG5vdCBuZWNlc3NhcnkuIFRoaXNcbiAgICAgIC8vIGlzIHVzZWZ1bCBmb3IgbG93IGZyZXF1ZW5jeSB1cGRhdGVzIHdoZXJlIHN5bmMgYmVoYXZpb3Igc2ltcGxpZmllcyB0aGVcbiAgICAgIC8vIGxvZ2ljLlxuICAgICAgLy8gRm9yIGhpZ2ggZnJlcXVlbmN5IHVwZGF0ZXMgKGUuZy4gYHJlc2l6ZWAgYW5kIGBzY3JvbGxgIGV2ZW50cyksIGFsd2F5c1xuICAgICAgLy8gcHJlZmVyIHRoZSBhc3luYyBQb3BwZXIjdXBkYXRlIG1ldGhvZFxuICAgICAgZm9yY2VVcGRhdGU6IGZ1bmN0aW9uIGZvcmNlVXBkYXRlKCkge1xuICAgICAgICBpZiAoaXNEZXN0cm95ZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgX3N0YXRlJGVsZW1lbnRzID0gc3RhdGUuZWxlbWVudHMsXG4gICAgICAgICAgICByZWZlcmVuY2UgPSBfc3RhdGUkZWxlbWVudHMucmVmZXJlbmNlLFxuICAgICAgICAgICAgcG9wcGVyID0gX3N0YXRlJGVsZW1lbnRzLnBvcHBlcjsgLy8gRG9uJ3QgcHJvY2VlZCBpZiBgcmVmZXJlbmNlYCBvciBgcG9wcGVyYCBhcmUgbm90IHZhbGlkIGVsZW1lbnRzXG4gICAgICAgIC8vIGFueW1vcmVcblxuICAgICAgICBpZiAoIWFyZVZhbGlkRWxlbWVudHMocmVmZXJlbmNlLCBwb3BwZXIpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIFN0b3JlIHRoZSByZWZlcmVuY2UgYW5kIHBvcHBlciByZWN0cyB0byBiZSByZWFkIGJ5IG1vZGlmaWVyc1xuXG5cbiAgICAgICAgc3RhdGUucmVjdHMgPSB7XG4gICAgICAgICAgcmVmZXJlbmNlOiBnZXRDb21wb3NpdGVSZWN0KHJlZmVyZW5jZSwgZ2V0T2Zmc2V0UGFyZW50KHBvcHBlciksIHN0YXRlLm9wdGlvbnMuc3RyYXRlZ3kgPT09ICdmaXhlZCcpLFxuICAgICAgICAgIHBvcHBlcjogZ2V0TGF5b3V0UmVjdChwb3BwZXIpXG4gICAgICAgIH07IC8vIE1vZGlmaWVycyBoYXZlIHRoZSBhYmlsaXR5IHRvIHJlc2V0IHRoZSBjdXJyZW50IHVwZGF0ZSBjeWNsZS4gVGhlXG4gICAgICAgIC8vIG1vc3QgY29tbW9uIHVzZSBjYXNlIGZvciB0aGlzIGlzIHRoZSBgZmxpcGAgbW9kaWZpZXIgY2hhbmdpbmcgdGhlXG4gICAgICAgIC8vIHBsYWNlbWVudCwgd2hpY2ggdGhlbiBuZWVkcyB0byByZS1ydW4gYWxsIHRoZSBtb2RpZmllcnMsIGJlY2F1c2UgdGhlXG4gICAgICAgIC8vIGxvZ2ljIHdhcyBwcmV2aW91c2x5IHJhbiBmb3IgdGhlIHByZXZpb3VzIHBsYWNlbWVudCBhbmQgaXMgdGhlcmVmb3JlXG4gICAgICAgIC8vIHN0YWxlL2luY29ycmVjdFxuXG4gICAgICAgIHN0YXRlLnJlc2V0ID0gZmFsc2U7XG4gICAgICAgIHN0YXRlLnBsYWNlbWVudCA9IHN0YXRlLm9wdGlvbnMucGxhY2VtZW50OyAvLyBPbiBlYWNoIHVwZGF0ZSBjeWNsZSwgdGhlIGBtb2RpZmllcnNEYXRhYCBwcm9wZXJ0eSBmb3IgZWFjaCBtb2RpZmllclxuICAgICAgICAvLyBpcyBmaWxsZWQgd2l0aCB0aGUgaW5pdGlhbCBkYXRhIHNwZWNpZmllZCBieSB0aGUgbW9kaWZpZXIuIFRoaXMgbWVhbnNcbiAgICAgICAgLy8gaXQgZG9lc24ndCBwZXJzaXN0IGFuZCBpcyBmcmVzaCBvbiBlYWNoIHVwZGF0ZS5cbiAgICAgICAgLy8gVG8gZW5zdXJlIHBlcnNpc3RlbnQgZGF0YSwgdXNlIGAke25hbWV9I3BlcnNpc3RlbnRgXG5cbiAgICAgICAgc3RhdGUub3JkZXJlZE1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgICAgICAgIHJldHVybiBzdGF0ZS5tb2RpZmllcnNEYXRhW21vZGlmaWVyLm5hbWVdID0gT2JqZWN0LmFzc2lnbih7fSwgbW9kaWZpZXIuZGF0YSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgIGlmIChzdGF0ZS5yZXNldCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgc3RhdGUucmVzZXQgPSBmYWxzZTtcbiAgICAgICAgICAgIGluZGV4ID0gLTE7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgX3N0YXRlJG9yZGVyZWRNb2RpZmllID0gc3RhdGUub3JkZXJlZE1vZGlmaWVyc1tpbmRleF0sXG4gICAgICAgICAgICAgIGZuID0gX3N0YXRlJG9yZGVyZWRNb2RpZmllLmZuLFxuICAgICAgICAgICAgICBfc3RhdGUkb3JkZXJlZE1vZGlmaWUyID0gX3N0YXRlJG9yZGVyZWRNb2RpZmllLm9wdGlvbnMsXG4gICAgICAgICAgICAgIF9vcHRpb25zID0gX3N0YXRlJG9yZGVyZWRNb2RpZmllMiA9PT0gdm9pZCAwID8ge30gOiBfc3RhdGUkb3JkZXJlZE1vZGlmaWUyLFxuICAgICAgICAgICAgICBuYW1lID0gX3N0YXRlJG9yZGVyZWRNb2RpZmllLm5hbWU7XG5cbiAgICAgICAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IGZuKHtcbiAgICAgICAgICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgICAgICAgICBvcHRpb25zOiBfb3B0aW9ucyxcbiAgICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgaW5zdGFuY2U6IGluc3RhbmNlXG4gICAgICAgICAgICB9KSB8fCBzdGF0ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyBBc3luYyBhbmQgb3B0aW1pc3RpY2FsbHkgb3B0aW1pemVkIHVwZGF0ZSDigJMgaXQgd2lsbCBub3QgYmUgZXhlY3V0ZWQgaWZcbiAgICAgIC8vIG5vdCBuZWNlc3NhcnkgKGRlYm91bmNlZCB0byBydW4gYXQgbW9zdCBvbmNlLXBlci10aWNrKVxuICAgICAgdXBkYXRlOiBkZWJvdW5jZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgIGluc3RhbmNlLmZvcmNlVXBkYXRlKCk7XG4gICAgICAgICAgcmVzb2x2ZShzdGF0ZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSksXG4gICAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgICBjbGVhbnVwTW9kaWZpZXJFZmZlY3RzKCk7XG4gICAgICAgIGlzRGVzdHJveWVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKCFhcmVWYWxpZEVsZW1lbnRzKHJlZmVyZW5jZSwgcG9wcGVyKSkge1xuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH1cblxuICAgIGluc3RhbmNlLnNldE9wdGlvbnMob3B0aW9ucykudGhlbihmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgIGlmICghaXNEZXN0cm95ZWQgJiYgb3B0aW9ucy5vbkZpcnN0VXBkYXRlKSB7XG4gICAgICAgIG9wdGlvbnMub25GaXJzdFVwZGF0ZShzdGF0ZSk7XG4gICAgICB9XG4gICAgfSk7IC8vIE1vZGlmaWVycyBoYXZlIHRoZSBhYmlsaXR5IHRvIGV4ZWN1dGUgYXJiaXRyYXJ5IGNvZGUgYmVmb3JlIHRoZSBmaXJzdFxuICAgIC8vIHVwZGF0ZSBjeWNsZSBydW5zLiBUaGV5IHdpbGwgYmUgZXhlY3V0ZWQgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlIHVwZGF0ZVxuICAgIC8vIGN5Y2xlLiBUaGlzIGlzIHVzZWZ1bCB3aGVuIGEgbW9kaWZpZXIgYWRkcyBzb21lIHBlcnNpc3RlbnQgZGF0YSB0aGF0XG4gICAgLy8gb3RoZXIgbW9kaWZpZXJzIG5lZWQgdG8gdXNlLCBidXQgdGhlIG1vZGlmaWVyIGlzIHJ1biBhZnRlciB0aGUgZGVwZW5kZW50XG4gICAgLy8gb25lLlxuXG4gICAgZnVuY3Rpb24gcnVuTW9kaWZpZXJFZmZlY3RzKCkge1xuICAgICAgc3RhdGUub3JkZXJlZE1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICAgIHZhciBuYW1lID0gX3JlZi5uYW1lLFxuICAgICAgICAgICAgX3JlZiRvcHRpb25zID0gX3JlZi5vcHRpb25zLFxuICAgICAgICAgICAgb3B0aW9ucyA9IF9yZWYkb3B0aW9ucyA9PT0gdm9pZCAwID8ge30gOiBfcmVmJG9wdGlvbnMsXG4gICAgICAgICAgICBlZmZlY3QgPSBfcmVmLmVmZmVjdDtcblxuICAgICAgICBpZiAodHlwZW9mIGVmZmVjdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHZhciBjbGVhbnVwRm4gPSBlZmZlY3Qoe1xuICAgICAgICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgIGluc3RhbmNlOiBpbnN0YW5jZSxcbiAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHZhciBub29wRm4gPSBmdW5jdGlvbiBub29wRm4oKSB7fTtcblxuICAgICAgICAgIGVmZmVjdENsZWFudXBGbnMucHVzaChjbGVhbnVwRm4gfHwgbm9vcEZuKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2xlYW51cE1vZGlmaWVyRWZmZWN0cygpIHtcbiAgICAgIGVmZmVjdENsZWFudXBGbnMuZm9yRWFjaChmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZuKCk7XG4gICAgICB9KTtcbiAgICAgIGVmZmVjdENsZWFudXBGbnMgPSBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH07XG59XG5leHBvcnQgdmFyIGNyZWF0ZVBvcHBlciA9IC8qI19fUFVSRV9fKi9wb3BwZXJHZW5lcmF0b3IoKTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBkZXRlY3RPdmVyZmxvdyB9OyIsImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRXaW5kb3cuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG52YXIgcGFzc2l2ZSA9IHtcbiAgcGFzc2l2ZTogdHJ1ZVxufTtcblxuZnVuY3Rpb24gZWZmZWN0KF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIGluc3RhbmNlID0gX3JlZi5pbnN0YW5jZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnM7XG4gIHZhciBfb3B0aW9ucyRzY3JvbGwgPSBvcHRpb25zLnNjcm9sbCxcbiAgICAgIHNjcm9sbCA9IF9vcHRpb25zJHNjcm9sbCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJHNjcm9sbCxcbiAgICAgIF9vcHRpb25zJHJlc2l6ZSA9IG9wdGlvbnMucmVzaXplLFxuICAgICAgcmVzaXplID0gX29wdGlvbnMkcmVzaXplID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkcmVzaXplO1xuICB2YXIgd2luZG93ID0gZ2V0V2luZG93KHN0YXRlLmVsZW1lbnRzLnBvcHBlcik7XG4gIHZhciBzY3JvbGxQYXJlbnRzID0gW10uY29uY2F0KHN0YXRlLnNjcm9sbFBhcmVudHMucmVmZXJlbmNlLCBzdGF0ZS5zY3JvbGxQYXJlbnRzLnBvcHBlcik7XG5cbiAgaWYgKHNjcm9sbCkge1xuICAgIHNjcm9sbFBhcmVudHMuZm9yRWFjaChmdW5jdGlvbiAoc2Nyb2xsUGFyZW50KSB7XG4gICAgICBzY3JvbGxQYXJlbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChyZXNpemUpIHtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHNjcm9sbCkge1xuICAgICAgc2Nyb2xsUGFyZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChzY3JvbGxQYXJlbnQpIHtcbiAgICAgICAgc2Nyb2xsUGFyZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGluc3RhbmNlLnVwZGF0ZSwgcGFzc2l2ZSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAocmVzaXplKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgICB9XG4gIH07XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdldmVudExpc3RlbmVycycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnd3JpdGUnLFxuICBmbjogZnVuY3Rpb24gZm4oKSB7fSxcbiAgZWZmZWN0OiBlZmZlY3QsXG4gIGRhdGE6IHt9XG59OyIsImltcG9ydCB7IGF1dG8gfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQuc3BsaXQoJy0nKVswXTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQuc3BsaXQoJy0nKVsxXTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBbJ3RvcCcsICdib3R0b20nXS5pbmRleE9mKHBsYWNlbWVudCkgPj0gMCA/ICd4JyA6ICd5Jztcbn0iLCJpbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuL2dldFZhcmlhdGlvbi5qc1wiO1xuaW1wb3J0IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudCBmcm9tIFwiLi9nZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQuanNcIjtcbmltcG9ydCB7IHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCwgc3RhcnQsIGVuZCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29tcHV0ZU9mZnNldHMoX3JlZikge1xuICB2YXIgcmVmZXJlbmNlID0gX3JlZi5yZWZlcmVuY2UsXG4gICAgICBlbGVtZW50ID0gX3JlZi5lbGVtZW50LFxuICAgICAgcGxhY2VtZW50ID0gX3JlZi5wbGFjZW1lbnQ7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gcGxhY2VtZW50ID8gZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpIDogbnVsbDtcbiAgdmFyIHZhcmlhdGlvbiA9IHBsYWNlbWVudCA/IGdldFZhcmlhdGlvbihwbGFjZW1lbnQpIDogbnVsbDtcbiAgdmFyIGNvbW1vblggPSByZWZlcmVuY2UueCArIHJlZmVyZW5jZS53aWR0aCAvIDIgLSBlbGVtZW50LndpZHRoIC8gMjtcbiAgdmFyIGNvbW1vblkgPSByZWZlcmVuY2UueSArIHJlZmVyZW5jZS5oZWlnaHQgLyAyIC0gZWxlbWVudC5oZWlnaHQgLyAyO1xuICB2YXIgb2Zmc2V0cztcblxuICBzd2l0Y2ggKGJhc2VQbGFjZW1lbnQpIHtcbiAgICBjYXNlIHRvcDpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IGNvbW1vblgsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55IC0gZWxlbWVudC5oZWlnaHRcbiAgICAgIH07XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgYm90dG9tOlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogY29tbW9uWCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnkgKyByZWZlcmVuY2UuaGVpZ2h0XG4gICAgICB9O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIHJpZ2h0OlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLnggKyByZWZlcmVuY2Uud2lkdGgsXG4gICAgICAgIHk6IGNvbW1vbllcbiAgICAgIH07XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgbGVmdDpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54IC0gZWxlbWVudC53aWR0aCxcbiAgICAgICAgeTogY29tbW9uWVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54LFxuICAgICAgICB5OiByZWZlcmVuY2UueVxuICAgICAgfTtcbiAgfVxuXG4gIHZhciBtYWluQXhpcyA9IGJhc2VQbGFjZW1lbnQgPyBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQoYmFzZVBsYWNlbWVudCkgOiBudWxsO1xuXG4gIGlmIChtYWluQXhpcyAhPSBudWxsKSB7XG4gICAgdmFyIGxlbiA9IG1haW5BeGlzID09PSAneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG5cbiAgICBzd2l0Y2ggKHZhcmlhdGlvbikge1xuICAgICAgY2FzZSBzdGFydDpcbiAgICAgICAgb2Zmc2V0c1ttYWluQXhpc10gPSBvZmZzZXRzW21haW5BeGlzXSAtIChyZWZlcmVuY2VbbGVuXSAvIDIgLSBlbGVtZW50W2xlbl0gLyAyKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgZW5kOlxuICAgICAgICBvZmZzZXRzW21haW5BeGlzXSA9IG9mZnNldHNbbWFpbkF4aXNdICsgKHJlZmVyZW5jZVtsZW5dIC8gMiAtIGVsZW1lbnRbbGVuXSAvIDIpO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2Zmc2V0cztcbn0iLCJpbXBvcnQgY29tcHV0ZU9mZnNldHMgZnJvbSBcIi4uL3V0aWxzL2NvbXB1dGVPZmZzZXRzLmpzXCI7XG5cbmZ1bmN0aW9uIHBvcHBlck9mZnNldHMoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZTtcbiAgLy8gT2Zmc2V0cyBhcmUgdGhlIGFjdHVhbCBwb3NpdGlvbiB0aGUgcG9wcGVyIG5lZWRzIHRvIGhhdmUgdG8gYmVcbiAgLy8gcHJvcGVybHkgcG9zaXRpb25lZCBuZWFyIGl0cyByZWZlcmVuY2UgZWxlbWVudFxuICAvLyBUaGlzIGlzIHRoZSBtb3N0IGJhc2ljIHBsYWNlbWVudCwgYW5kIHdpbGwgYmUgYWRqdXN0ZWQgYnlcbiAgLy8gdGhlIG1vZGlmaWVycyBpbiB0aGUgbmV4dCBzdGVwXG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSBjb21wdXRlT2Zmc2V0cyh7XG4gICAgcmVmZXJlbmNlOiBzdGF0ZS5yZWN0cy5yZWZlcmVuY2UsXG4gICAgZWxlbWVudDogc3RhdGUucmVjdHMucG9wcGVyLFxuICAgIHN0cmF0ZWd5OiAnYWJzb2x1dGUnLFxuICAgIHBsYWNlbWVudDogc3RhdGUucGxhY2VtZW50XG4gIH0pO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAncG9wcGVyT2Zmc2V0cycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAncmVhZCcsXG4gIGZuOiBwb3BwZXJPZmZzZXRzLFxuICBkYXRhOiB7fVxufTsiLCJpbXBvcnQgeyB0b3AsIGxlZnQsIHJpZ2h0LCBib3R0b20sIGVuZCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi4vdXRpbHMvZ2V0VmFyaWF0aW9uLmpzXCI7XG5pbXBvcnQgeyByb3VuZCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxudmFyIHVuc2V0U2lkZXMgPSB7XG4gIHRvcDogJ2F1dG8nLFxuICByaWdodDogJ2F1dG8nLFxuICBib3R0b206ICdhdXRvJyxcbiAgbGVmdDogJ2F1dG8nXG59OyAvLyBSb3VuZCB0aGUgb2Zmc2V0cyB0byB0aGUgbmVhcmVzdCBzdWl0YWJsZSBzdWJwaXhlbCBiYXNlZCBvbiB0aGUgRFBSLlxuLy8gWm9vbWluZyBjYW4gY2hhbmdlIHRoZSBEUFIsIGJ1dCBpdCBzZWVtcyB0byByZXBvcnQgYSB2YWx1ZSB0aGF0IHdpbGxcbi8vIGNsZWFubHkgZGl2aWRlIHRoZSB2YWx1ZXMgaW50byB0aGUgYXBwcm9wcmlhdGUgc3VicGl4ZWxzLlxuXG5mdW5jdGlvbiByb3VuZE9mZnNldHNCeURQUihfcmVmLCB3aW4pIHtcbiAgdmFyIHggPSBfcmVmLngsXG4gICAgICB5ID0gX3JlZi55O1xuICB2YXIgZHByID0gd2luLmRldmljZVBpeGVsUmF0aW8gfHwgMTtcbiAgcmV0dXJuIHtcbiAgICB4OiByb3VuZCh4ICogZHByKSAvIGRwciB8fCAwLFxuICAgIHk6IHJvdW5kKHkgKiBkcHIpIC8gZHByIHx8IDBcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hcFRvU3R5bGVzKF9yZWYyKSB7XG4gIHZhciBfT2JqZWN0JGFzc2lnbjI7XG5cbiAgdmFyIHBvcHBlciA9IF9yZWYyLnBvcHBlcixcbiAgICAgIHBvcHBlclJlY3QgPSBfcmVmMi5wb3BwZXJSZWN0LFxuICAgICAgcGxhY2VtZW50ID0gX3JlZjIucGxhY2VtZW50LFxuICAgICAgdmFyaWF0aW9uID0gX3JlZjIudmFyaWF0aW9uLFxuICAgICAgb2Zmc2V0cyA9IF9yZWYyLm9mZnNldHMsXG4gICAgICBwb3NpdGlvbiA9IF9yZWYyLnBvc2l0aW9uLFxuICAgICAgZ3B1QWNjZWxlcmF0aW9uID0gX3JlZjIuZ3B1QWNjZWxlcmF0aW9uLFxuICAgICAgYWRhcHRpdmUgPSBfcmVmMi5hZGFwdGl2ZSxcbiAgICAgIHJvdW5kT2Zmc2V0cyA9IF9yZWYyLnJvdW5kT2Zmc2V0cyxcbiAgICAgIGlzRml4ZWQgPSBfcmVmMi5pc0ZpeGVkO1xuICB2YXIgX29mZnNldHMkeCA9IG9mZnNldHMueCxcbiAgICAgIHggPSBfb2Zmc2V0cyR4ID09PSB2b2lkIDAgPyAwIDogX29mZnNldHMkeCxcbiAgICAgIF9vZmZzZXRzJHkgPSBvZmZzZXRzLnksXG4gICAgICB5ID0gX29mZnNldHMkeSA9PT0gdm9pZCAwID8gMCA6IF9vZmZzZXRzJHk7XG5cbiAgdmFyIF9yZWYzID0gdHlwZW9mIHJvdW5kT2Zmc2V0cyA9PT0gJ2Z1bmN0aW9uJyA/IHJvdW5kT2Zmc2V0cyh7XG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH0pIDoge1xuICAgIHg6IHgsXG4gICAgeTogeVxuICB9O1xuXG4gIHggPSBfcmVmMy54O1xuICB5ID0gX3JlZjMueTtcbiAgdmFyIGhhc1ggPSBvZmZzZXRzLmhhc093blByb3BlcnR5KCd4Jyk7XG4gIHZhciBoYXNZID0gb2Zmc2V0cy5oYXNPd25Qcm9wZXJ0eSgneScpO1xuICB2YXIgc2lkZVggPSBsZWZ0O1xuICB2YXIgc2lkZVkgPSB0b3A7XG4gIHZhciB3aW4gPSB3aW5kb3c7XG5cbiAgaWYgKGFkYXB0aXZlKSB7XG4gICAgdmFyIG9mZnNldFBhcmVudCA9IGdldE9mZnNldFBhcmVudChwb3BwZXIpO1xuICAgIHZhciBoZWlnaHRQcm9wID0gJ2NsaWVudEhlaWdodCc7XG4gICAgdmFyIHdpZHRoUHJvcCA9ICdjbGllbnRXaWR0aCc7XG5cbiAgICBpZiAob2Zmc2V0UGFyZW50ID09PSBnZXRXaW5kb3cocG9wcGVyKSkge1xuICAgICAgb2Zmc2V0UGFyZW50ID0gZ2V0RG9jdW1lbnRFbGVtZW50KHBvcHBlcik7XG5cbiAgICAgIGlmIChnZXRDb21wdXRlZFN0eWxlKG9mZnNldFBhcmVudCkucG9zaXRpb24gIT09ICdzdGF0aWMnICYmIHBvc2l0aW9uID09PSAnYWJzb2x1dGUnKSB7XG4gICAgICAgIGhlaWdodFByb3AgPSAnc2Nyb2xsSGVpZ2h0JztcbiAgICAgICAgd2lkdGhQcm9wID0gJ3Njcm9sbFdpZHRoJztcbiAgICAgIH1cbiAgICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhc3RdOiBmb3JjZSB0eXBlIHJlZmluZW1lbnQsIHdlIGNvbXBhcmUgb2Zmc2V0UGFyZW50IHdpdGggd2luZG93IGFib3ZlLCBidXQgRmxvdyBkb2Vzbid0IGRldGVjdCBpdFxuXG5cbiAgICBvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQ7XG5cbiAgICBpZiAocGxhY2VtZW50ID09PSB0b3AgfHwgKHBsYWNlbWVudCA9PT0gbGVmdCB8fCBwbGFjZW1lbnQgPT09IHJpZ2h0KSAmJiB2YXJpYXRpb24gPT09IGVuZCkge1xuICAgICAgc2lkZVkgPSBib3R0b207XG4gICAgICB2YXIgb2Zmc2V0WSA9IGlzRml4ZWQgJiYgb2Zmc2V0UGFyZW50ID09PSB3aW4gJiYgd2luLnZpc3VhbFZpZXdwb3J0ID8gd2luLnZpc3VhbFZpZXdwb3J0LmhlaWdodCA6IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgICAgb2Zmc2V0UGFyZW50W2hlaWdodFByb3BdO1xuICAgICAgeSAtPSBvZmZzZXRZIC0gcG9wcGVyUmVjdC5oZWlnaHQ7XG4gICAgICB5ICo9IGdwdUFjY2VsZXJhdGlvbiA/IDEgOiAtMTtcbiAgICB9XG5cbiAgICBpZiAocGxhY2VtZW50ID09PSBsZWZ0IHx8IChwbGFjZW1lbnQgPT09IHRvcCB8fCBwbGFjZW1lbnQgPT09IGJvdHRvbSkgJiYgdmFyaWF0aW9uID09PSBlbmQpIHtcbiAgICAgIHNpZGVYID0gcmlnaHQ7XG4gICAgICB2YXIgb2Zmc2V0WCA9IGlzRml4ZWQgJiYgb2Zmc2V0UGFyZW50ID09PSB3aW4gJiYgd2luLnZpc3VhbFZpZXdwb3J0ID8gd2luLnZpc3VhbFZpZXdwb3J0LndpZHRoIDogLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gICAgICBvZmZzZXRQYXJlbnRbd2lkdGhQcm9wXTtcbiAgICAgIHggLT0gb2Zmc2V0WCAtIHBvcHBlclJlY3Qud2lkdGg7XG4gICAgICB4ICo9IGdwdUFjY2VsZXJhdGlvbiA/IDEgOiAtMTtcbiAgICB9XG4gIH1cblxuICB2YXIgY29tbW9uU3R5bGVzID0gT2JqZWN0LmFzc2lnbih7XG4gICAgcG9zaXRpb246IHBvc2l0aW9uXG4gIH0sIGFkYXB0aXZlICYmIHVuc2V0U2lkZXMpO1xuXG4gIHZhciBfcmVmNCA9IHJvdW5kT2Zmc2V0cyA9PT0gdHJ1ZSA/IHJvdW5kT2Zmc2V0c0J5RFBSKHtcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfSwgZ2V0V2luZG93KHBvcHBlcikpIDoge1xuICAgIHg6IHgsXG4gICAgeTogeVxuICB9O1xuXG4gIHggPSBfcmVmNC54O1xuICB5ID0gX3JlZjQueTtcblxuICBpZiAoZ3B1QWNjZWxlcmF0aW9uKSB7XG4gICAgdmFyIF9PYmplY3QkYXNzaWduO1xuXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywgKF9PYmplY3QkYXNzaWduID0ge30sIF9PYmplY3QkYXNzaWduW3NpZGVZXSA9IGhhc1kgPyAnMCcgOiAnJywgX09iamVjdCRhc3NpZ25bc2lkZVhdID0gaGFzWCA/ICcwJyA6ICcnLCBfT2JqZWN0JGFzc2lnbi50cmFuc2Zvcm0gPSAod2luLmRldmljZVBpeGVsUmF0aW8gfHwgMSkgPD0gMSA/IFwidHJhbnNsYXRlKFwiICsgeCArIFwicHgsIFwiICsgeSArIFwicHgpXCIgOiBcInRyYW5zbGF0ZTNkKFwiICsgeCArIFwicHgsIFwiICsgeSArIFwicHgsIDApXCIsIF9PYmplY3QkYXNzaWduKSk7XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgY29tbW9uU3R5bGVzLCAoX09iamVjdCRhc3NpZ24yID0ge30sIF9PYmplY3QkYXNzaWduMltzaWRlWV0gPSBoYXNZID8geSArIFwicHhcIiA6ICcnLCBfT2JqZWN0JGFzc2lnbjJbc2lkZVhdID0gaGFzWCA/IHggKyBcInB4XCIgOiAnJywgX09iamVjdCRhc3NpZ24yLnRyYW5zZm9ybSA9ICcnLCBfT2JqZWN0JGFzc2lnbjIpKTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZVN0eWxlcyhfcmVmNSkge1xuICB2YXIgc3RhdGUgPSBfcmVmNS5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmNS5vcHRpb25zO1xuICB2YXIgX29wdGlvbnMkZ3B1QWNjZWxlcmF0ID0gb3B0aW9ucy5ncHVBY2NlbGVyYXRpb24sXG4gICAgICBncHVBY2NlbGVyYXRpb24gPSBfb3B0aW9ucyRncHVBY2NlbGVyYXQgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRncHVBY2NlbGVyYXQsXG4gICAgICBfb3B0aW9ucyRhZGFwdGl2ZSA9IG9wdGlvbnMuYWRhcHRpdmUsXG4gICAgICBhZGFwdGl2ZSA9IF9vcHRpb25zJGFkYXB0aXZlID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkYWRhcHRpdmUsXG4gICAgICBfb3B0aW9ucyRyb3VuZE9mZnNldHMgPSBvcHRpb25zLnJvdW5kT2Zmc2V0cyxcbiAgICAgIHJvdW5kT2Zmc2V0cyA9IF9vcHRpb25zJHJvdW5kT2Zmc2V0cyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJHJvdW5kT2Zmc2V0cztcbiAgdmFyIGNvbW1vblN0eWxlcyA9IHtcbiAgICBwbGFjZW1lbnQ6IGdldEJhc2VQbGFjZW1lbnQoc3RhdGUucGxhY2VtZW50KSxcbiAgICB2YXJpYXRpb246IGdldFZhcmlhdGlvbihzdGF0ZS5wbGFjZW1lbnQpLFxuICAgIHBvcHBlcjogc3RhdGUuZWxlbWVudHMucG9wcGVyLFxuICAgIHBvcHBlclJlY3Q6IHN0YXRlLnJlY3RzLnBvcHBlcixcbiAgICBncHVBY2NlbGVyYXRpb246IGdwdUFjY2VsZXJhdGlvbixcbiAgICBpc0ZpeGVkOiBzdGF0ZS5vcHRpb25zLnN0cmF0ZWd5ID09PSAnZml4ZWQnXG4gIH07XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyAhPSBudWxsKSB7XG4gICAgc3RhdGUuc3R5bGVzLnBvcHBlciA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnN0eWxlcy5wb3BwZXIsIG1hcFRvU3R5bGVzKE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywge1xuICAgICAgb2Zmc2V0czogc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLFxuICAgICAgcG9zaXRpb246IHN0YXRlLm9wdGlvbnMuc3RyYXRlZ3ksXG4gICAgICBhZGFwdGl2ZTogYWRhcHRpdmUsXG4gICAgICByb3VuZE9mZnNldHM6IHJvdW5kT2Zmc2V0c1xuICAgIH0pKSk7XG4gIH1cblxuICBpZiAoc3RhdGUubW9kaWZpZXJzRGF0YS5hcnJvdyAhPSBudWxsKSB7XG4gICAgc3RhdGUuc3R5bGVzLmFycm93ID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuc3R5bGVzLmFycm93LCBtYXBUb1N0eWxlcyhPYmplY3QuYXNzaWduKHt9LCBjb21tb25TdHlsZXMsIHtcbiAgICAgIG9mZnNldHM6IHN0YXRlLm1vZGlmaWVyc0RhdGEuYXJyb3csXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIGFkYXB0aXZlOiBmYWxzZSxcbiAgICAgIHJvdW5kT2Zmc2V0czogcm91bmRPZmZzZXRzXG4gICAgfSkpKTtcbiAgfVxuXG4gIHN0YXRlLmF0dHJpYnV0ZXMucG9wcGVyID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIsIHtcbiAgICAnZGF0YS1wb3BwZXItcGxhY2VtZW50Jzogc3RhdGUucGxhY2VtZW50XG4gIH0pO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnY29tcHV0ZVN0eWxlcycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnYmVmb3JlV3JpdGUnLFxuICBmbjogY29tcHV0ZVN0eWxlcyxcbiAgZGF0YToge31cbn07IiwiaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi4vZG9tLXV0aWxzL2luc3RhbmNlT2YuanNcIjsgLy8gVGhpcyBtb2RpZmllciB0YWtlcyB0aGUgc3R5bGVzIHByZXBhcmVkIGJ5IHRoZSBgY29tcHV0ZVN0eWxlc2AgbW9kaWZpZXJcbi8vIGFuZCBhcHBsaWVzIHRoZW0gdG8gdGhlIEhUTUxFbGVtZW50cyBzdWNoIGFzIHBvcHBlciBhbmQgYXJyb3dcblxuZnVuY3Rpb24gYXBwbHlTdHlsZXMoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlO1xuICBPYmplY3Qua2V5cyhzdGF0ZS5lbGVtZW50cykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgIHZhciBzdHlsZSA9IHN0YXRlLnN0eWxlc1tuYW1lXSB8fCB7fTtcbiAgICB2YXIgYXR0cmlidXRlcyA9IHN0YXRlLmF0dHJpYnV0ZXNbbmFtZV0gfHwge307XG4gICAgdmFyIGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50c1tuYW1lXTsgLy8gYXJyb3cgaXMgb3B0aW9uYWwgKyB2aXJ0dWFsIGVsZW1lbnRzXG5cbiAgICBpZiAoIWlzSFRNTEVsZW1lbnQoZWxlbWVudCkgfHwgIWdldE5vZGVOYW1lKGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBGbG93IGRvZXNuJ3Qgc3VwcG9ydCB0byBleHRlbmQgdGhpcyBwcm9wZXJ0eSwgYnV0IGl0J3MgdGhlIG1vc3RcbiAgICAvLyBlZmZlY3RpdmUgd2F5IHRvIGFwcGx5IHN0eWxlcyB0byBhbiBIVE1MRWxlbWVudFxuICAgIC8vICRGbG93Rml4TWVbY2Fubm90LXdyaXRlXVxuXG5cbiAgICBPYmplY3QuYXNzaWduKGVsZW1lbnQuc3R5bGUsIHN0eWxlKTtcbiAgICBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICB2YXIgdmFsdWUgPSBhdHRyaWJ1dGVzW25hbWVdO1xuXG4gICAgICBpZiAodmFsdWUgPT09IGZhbHNlKSB7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUgPT09IHRydWUgPyAnJyA6IHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGVmZmVjdChfcmVmMikge1xuICB2YXIgc3RhdGUgPSBfcmVmMi5zdGF0ZTtcbiAgdmFyIGluaXRpYWxTdHlsZXMgPSB7XG4gICAgcG9wcGVyOiB7XG4gICAgICBwb3NpdGlvbjogc3RhdGUub3B0aW9ucy5zdHJhdGVneSxcbiAgICAgIGxlZnQ6ICcwJyxcbiAgICAgIHRvcDogJzAnLFxuICAgICAgbWFyZ2luOiAnMCdcbiAgICB9LFxuICAgIGFycm93OiB7XG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJ1xuICAgIH0sXG4gICAgcmVmZXJlbmNlOiB7fVxuICB9O1xuICBPYmplY3QuYXNzaWduKHN0YXRlLmVsZW1lbnRzLnBvcHBlci5zdHlsZSwgaW5pdGlhbFN0eWxlcy5wb3BwZXIpO1xuICBzdGF0ZS5zdHlsZXMgPSBpbml0aWFsU3R5bGVzO1xuXG4gIGlmIChzdGF0ZS5lbGVtZW50cy5hcnJvdykge1xuICAgIE9iamVjdC5hc3NpZ24oc3RhdGUuZWxlbWVudHMuYXJyb3cuc3R5bGUsIGluaXRpYWxTdHlsZXMuYXJyb3cpO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBPYmplY3Qua2V5cyhzdGF0ZS5lbGVtZW50cykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgdmFyIGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50c1tuYW1lXTtcbiAgICAgIHZhciBhdHRyaWJ1dGVzID0gc3RhdGUuYXR0cmlidXRlc1tuYW1lXSB8fCB7fTtcbiAgICAgIHZhciBzdHlsZVByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhzdGF0ZS5zdHlsZXMuaGFzT3duUHJvcGVydHkobmFtZSkgPyBzdGF0ZS5zdHlsZXNbbmFtZV0gOiBpbml0aWFsU3R5bGVzW25hbWVdKTsgLy8gU2V0IGFsbCB2YWx1ZXMgdG8gYW4gZW1wdHkgc3RyaW5nIHRvIHVuc2V0IHRoZW1cblxuICAgICAgdmFyIHN0eWxlID0gc3R5bGVQcm9wZXJ0aWVzLnJlZHVjZShmdW5jdGlvbiAoc3R5bGUsIHByb3BlcnR5KSB7XG4gICAgICAgIHN0eWxlW3Byb3BlcnR5XSA9ICcnO1xuICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgICB9LCB7fSk7IC8vIGFycm93IGlzIG9wdGlvbmFsICsgdmlydHVhbCBlbGVtZW50c1xuXG4gICAgICBpZiAoIWlzSFRNTEVsZW1lbnQoZWxlbWVudCkgfHwgIWdldE5vZGVOYW1lKGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgT2JqZWN0LmFzc2lnbihlbGVtZW50LnN0eWxlLCBzdHlsZSk7XG4gICAgICBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyaWJ1dGUpIHtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnYXBwbHlTdHlsZXMnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ3dyaXRlJyxcbiAgZm46IGFwcGx5U3R5bGVzLFxuICBlZmZlY3Q6IGVmZmVjdCxcbiAgcmVxdWlyZXM6IFsnY29tcHV0ZVN0eWxlcyddXG59OyIsImltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgeyB0b3AsIGxlZnQsIHJpZ2h0LCBwbGFjZW1lbnRzIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3RhbmNlQW5kU2tpZGRpbmdUb1hZKHBsYWNlbWVudCwgcmVjdHMsIG9mZnNldCkge1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KTtcbiAgdmFyIGludmVydERpc3RhbmNlID0gW2xlZnQsIHRvcF0uaW5kZXhPZihiYXNlUGxhY2VtZW50KSA+PSAwID8gLTEgOiAxO1xuXG4gIHZhciBfcmVmID0gdHlwZW9mIG9mZnNldCA9PT0gJ2Z1bmN0aW9uJyA/IG9mZnNldChPYmplY3QuYXNzaWduKHt9LCByZWN0cywge1xuICAgIHBsYWNlbWVudDogcGxhY2VtZW50XG4gIH0pKSA6IG9mZnNldCxcbiAgICAgIHNraWRkaW5nID0gX3JlZlswXSxcbiAgICAgIGRpc3RhbmNlID0gX3JlZlsxXTtcblxuICBza2lkZGluZyA9IHNraWRkaW5nIHx8IDA7XG4gIGRpc3RhbmNlID0gKGRpc3RhbmNlIHx8IDApICogaW52ZXJ0RGlzdGFuY2U7XG4gIHJldHVybiBbbGVmdCwgcmlnaHRdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgPj0gMCA/IHtcbiAgICB4OiBkaXN0YW5jZSxcbiAgICB5OiBza2lkZGluZ1xuICB9IDoge1xuICAgIHg6IHNraWRkaW5nLFxuICAgIHk6IGRpc3RhbmNlXG4gIH07XG59XG5cbmZ1bmN0aW9uIG9mZnNldChfcmVmMikge1xuICB2YXIgc3RhdGUgPSBfcmVmMi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmMi5vcHRpb25zLFxuICAgICAgbmFtZSA9IF9yZWYyLm5hbWU7XG4gIHZhciBfb3B0aW9ucyRvZmZzZXQgPSBvcHRpb25zLm9mZnNldCxcbiAgICAgIG9mZnNldCA9IF9vcHRpb25zJG9mZnNldCA9PT0gdm9pZCAwID8gWzAsIDBdIDogX29wdGlvbnMkb2Zmc2V0O1xuICB2YXIgZGF0YSA9IHBsYWNlbWVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICAgIGFjY1twbGFjZW1lbnRdID0gZGlzdGFuY2VBbmRTa2lkZGluZ1RvWFkocGxhY2VtZW50LCBzdGF0ZS5yZWN0cywgb2Zmc2V0KTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG4gIHZhciBfZGF0YSRzdGF0ZSRwbGFjZW1lbnQgPSBkYXRhW3N0YXRlLnBsYWNlbWVudF0sXG4gICAgICB4ID0gX2RhdGEkc3RhdGUkcGxhY2VtZW50LngsXG4gICAgICB5ID0gX2RhdGEkc3RhdGUkcGxhY2VtZW50Lnk7XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyAhPSBudWxsKSB7XG4gICAgc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLnggKz0geDtcbiAgICBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMueSArPSB5O1xuICB9XG5cbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IGRhdGE7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdvZmZzZXQnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICByZXF1aXJlczogWydwb3BwZXJPZmZzZXRzJ10sXG4gIGZuOiBvZmZzZXRcbn07IiwidmFyIGhhc2ggPSB7XG4gIGxlZnQ6ICdyaWdodCcsXG4gIHJpZ2h0OiAnbGVmdCcsXG4gIGJvdHRvbTogJ3RvcCcsXG4gIHRvcDogJ2JvdHRvbSdcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5yZXBsYWNlKC9sZWZ0fHJpZ2h0fGJvdHRvbXx0b3AvZywgZnVuY3Rpb24gKG1hdGNoZWQpIHtcbiAgICByZXR1cm4gaGFzaFttYXRjaGVkXTtcbiAgfSk7XG59IiwidmFyIGhhc2ggPSB7XG4gIHN0YXJ0OiAnZW5kJyxcbiAgZW5kOiAnc3RhcnQnXG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvc3RhcnR8ZW5kL2csIGZ1bmN0aW9uIChtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGhhc2hbbWF0Y2hlZF07XG4gIH0pO1xufSIsImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbEJhclggZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsQmFyWC5qc1wiO1xuaW1wb3J0IGlzTGF5b3V0Vmlld3BvcnQgZnJvbSBcIi4vaXNMYXlvdXRWaWV3cG9ydC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSB7XG4gIHZhciB3aW4gPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIHZhciBodG1sID0gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpO1xuICB2YXIgdmlzdWFsVmlld3BvcnQgPSB3aW4udmlzdWFsVmlld3BvcnQ7XG4gIHZhciB3aWR0aCA9IGh0bWwuY2xpZW50V2lkdGg7XG4gIHZhciBoZWlnaHQgPSBodG1sLmNsaWVudEhlaWdodDtcbiAgdmFyIHggPSAwO1xuICB2YXIgeSA9IDA7XG5cbiAgaWYgKHZpc3VhbFZpZXdwb3J0KSB7XG4gICAgd2lkdGggPSB2aXN1YWxWaWV3cG9ydC53aWR0aDtcbiAgICBoZWlnaHQgPSB2aXN1YWxWaWV3cG9ydC5oZWlnaHQ7XG4gICAgdmFyIGxheW91dFZpZXdwb3J0ID0gaXNMYXlvdXRWaWV3cG9ydCgpO1xuXG4gICAgaWYgKGxheW91dFZpZXdwb3J0IHx8ICFsYXlvdXRWaWV3cG9ydCAmJiBzdHJhdGVneSA9PT0gJ2ZpeGVkJykge1xuICAgICAgeCA9IHZpc3VhbFZpZXdwb3J0Lm9mZnNldExlZnQ7XG4gICAgICB5ID0gdmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0LFxuICAgIHg6IHggKyBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpLFxuICAgIHk6IHlcbiAgfTtcbn0iLCJpbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4vZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbEJhclggZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsQmFyWC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGwuanNcIjtcbmltcG9ydCB7IG1heCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7IC8vIEdldHMgdGhlIGVudGlyZSBzaXplIG9mIHRoZSBzY3JvbGxhYmxlIGRvY3VtZW50IGFyZWEsIGV2ZW4gZXh0ZW5kaW5nIG91dHNpZGVcbi8vIG9mIHRoZSBgPGh0bWw+YCBhbmQgYDxib2R5PmAgcmVjdCBib3VuZHMgaWYgaG9yaXpvbnRhbGx5IHNjcm9sbGFibGVcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0RG9jdW1lbnRSZWN0KGVsZW1lbnQpIHtcbiAgdmFyIF9lbGVtZW50JG93bmVyRG9jdW1lbjtcblxuICB2YXIgaHRtbCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgdmFyIHdpblNjcm9sbCA9IGdldFdpbmRvd1Njcm9sbChlbGVtZW50KTtcbiAgdmFyIGJvZHkgPSAoX2VsZW1lbnQkb3duZXJEb2N1bWVuID0gZWxlbWVudC5vd25lckRvY3VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2VsZW1lbnQkb3duZXJEb2N1bWVuLmJvZHk7XG4gIHZhciB3aWR0aCA9IG1heChodG1sLnNjcm9sbFdpZHRoLCBodG1sLmNsaWVudFdpZHRoLCBib2R5ID8gYm9keS5zY3JvbGxXaWR0aCA6IDAsIGJvZHkgPyBib2R5LmNsaWVudFdpZHRoIDogMCk7XG4gIHZhciBoZWlnaHQgPSBtYXgoaHRtbC5zY3JvbGxIZWlnaHQsIGh0bWwuY2xpZW50SGVpZ2h0LCBib2R5ID8gYm9keS5zY3JvbGxIZWlnaHQgOiAwLCBib2R5ID8gYm9keS5jbGllbnRIZWlnaHQgOiAwKTtcbiAgdmFyIHggPSAtd2luU2Nyb2xsLnNjcm9sbExlZnQgKyBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpO1xuICB2YXIgeSA9IC13aW5TY3JvbGwuc2Nyb2xsVG9wO1xuXG4gIGlmIChnZXRDb21wdXRlZFN0eWxlKGJvZHkgfHwgaHRtbCkuZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgIHggKz0gbWF4KGh0bWwuY2xpZW50V2lkdGgsIGJvZHkgPyBib2R5LmNsaWVudFdpZHRoIDogMCkgLSB3aWR0aDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0LFxuICAgIHg6IHgsXG4gICAgeTogeVxuICB9O1xufSIsImltcG9ydCB7IGlzU2hhZG93Um9vdCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbnRhaW5zKHBhcmVudCwgY2hpbGQpIHtcbiAgdmFyIHJvb3ROb2RlID0gY2hpbGQuZ2V0Um9vdE5vZGUgJiYgY2hpbGQuZ2V0Um9vdE5vZGUoKTsgLy8gRmlyc3QsIGF0dGVtcHQgd2l0aCBmYXN0ZXIgbmF0aXZlIG1ldGhvZFxuXG4gIGlmIChwYXJlbnQuY29udGFpbnMoY2hpbGQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gdGhlbiBmYWxsYmFjayB0byBjdXN0b20gaW1wbGVtZW50YXRpb24gd2l0aCBTaGFkb3cgRE9NIHN1cHBvcnRcbiAgZWxzZSBpZiAocm9vdE5vZGUgJiYgaXNTaGFkb3dSb290KHJvb3ROb2RlKSkge1xuICAgICAgdmFyIG5leHQgPSBjaGlsZDtcblxuICAgICAgZG8ge1xuICAgICAgICBpZiAobmV4dCAmJiBwYXJlbnQuaXNTYW1lTm9kZShuZXh0KSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXTogbmVlZCBhIGJldHRlciB3YXkgdG8gaGFuZGxlIHRoaXMuLi5cblxuXG4gICAgICAgIG5leHQgPSBuZXh0LnBhcmVudE5vZGUgfHwgbmV4dC5ob3N0O1xuICAgICAgfSB3aGlsZSAobmV4dCk7XG4gICAgfSAvLyBHaXZlIHVwLCB0aGUgcmVzdWx0IGlzIGZhbHNlXG5cblxuICByZXR1cm4gZmFsc2U7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVjdFRvQ2xpZW50UmVjdChyZWN0KSB7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCByZWN0LCB7XG4gICAgbGVmdDogcmVjdC54LFxuICAgIHRvcDogcmVjdC55LFxuICAgIHJpZ2h0OiByZWN0LnggKyByZWN0LndpZHRoLFxuICAgIGJvdHRvbTogcmVjdC55ICsgcmVjdC5oZWlnaHRcbiAgfSk7XG59IiwiaW1wb3J0IHsgdmlld3BvcnQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRWaWV3cG9ydFJlY3QgZnJvbSBcIi4vZ2V0Vmlld3BvcnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRSZWN0IGZyb20gXCIuL2dldERvY3VtZW50UmVjdC5qc1wiO1xuaW1wb3J0IGxpc3RTY3JvbGxQYXJlbnRzIGZyb20gXCIuL2xpc3RTY3JvbGxQYXJlbnRzLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCB7IGlzRWxlbWVudCwgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0UGFyZW50Tm9kZSBmcm9tIFwiLi9nZXRQYXJlbnROb2RlLmpzXCI7XG5pbXBvcnQgY29udGFpbnMgZnJvbSBcIi4vY29udGFpbnMuanNcIjtcbmltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHJlY3RUb0NsaWVudFJlY3QgZnJvbSBcIi4uL3V0aWxzL3JlY3RUb0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCB7IG1heCwgbWluIH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjtcblxuZnVuY3Rpb24gZ2V0SW5uZXJCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgc3RyYXRlZ3kpIHtcbiAgdmFyIHJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgZmFsc2UsIHN0cmF0ZWd5ID09PSAnZml4ZWQnKTtcbiAgcmVjdC50b3AgPSByZWN0LnRvcCArIGVsZW1lbnQuY2xpZW50VG9wO1xuICByZWN0LmxlZnQgPSByZWN0LmxlZnQgKyBlbGVtZW50LmNsaWVudExlZnQ7XG4gIHJlY3QuYm90dG9tID0gcmVjdC50b3AgKyBlbGVtZW50LmNsaWVudEhlaWdodDtcbiAgcmVjdC5yaWdodCA9IHJlY3QubGVmdCArIGVsZW1lbnQuY2xpZW50V2lkdGg7XG4gIHJlY3Qud2lkdGggPSBlbGVtZW50LmNsaWVudFdpZHRoO1xuICByZWN0LmhlaWdodCA9IGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICByZWN0LnggPSByZWN0LmxlZnQ7XG4gIHJlY3QueSA9IHJlY3QudG9wO1xuICByZXR1cm4gcmVjdDtcbn1cblxuZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdEZyb21NaXhlZFR5cGUoZWxlbWVudCwgY2xpcHBpbmdQYXJlbnQsIHN0cmF0ZWd5KSB7XG4gIHJldHVybiBjbGlwcGluZ1BhcmVudCA9PT0gdmlld3BvcnQgPyByZWN0VG9DbGllbnRSZWN0KGdldFZpZXdwb3J0UmVjdChlbGVtZW50LCBzdHJhdGVneSkpIDogaXNFbGVtZW50KGNsaXBwaW5nUGFyZW50KSA/IGdldElubmVyQm91bmRpbmdDbGllbnRSZWN0KGNsaXBwaW5nUGFyZW50LCBzdHJhdGVneSkgOiByZWN0VG9DbGllbnRSZWN0KGdldERvY3VtZW50UmVjdChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkpKTtcbn0gLy8gQSBcImNsaXBwaW5nIHBhcmVudFwiIGlzIGFuIG92ZXJmbG93YWJsZSBjb250YWluZXIgd2l0aCB0aGUgY2hhcmFjdGVyaXN0aWMgb2Zcbi8vIGNsaXBwaW5nIChvciBoaWRpbmcpIG92ZXJmbG93aW5nIGVsZW1lbnRzIHdpdGggYSBwb3NpdGlvbiBkaWZmZXJlbnQgZnJvbVxuLy8gYGluaXRpYWxgXG5cblxuZnVuY3Rpb24gZ2V0Q2xpcHBpbmdQYXJlbnRzKGVsZW1lbnQpIHtcbiAgdmFyIGNsaXBwaW5nUGFyZW50cyA9IGxpc3RTY3JvbGxQYXJlbnRzKGdldFBhcmVudE5vZGUoZWxlbWVudCkpO1xuICB2YXIgY2FuRXNjYXBlQ2xpcHBpbmcgPSBbJ2Fic29sdXRlJywgJ2ZpeGVkJ10uaW5kZXhPZihnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBvc2l0aW9uKSA+PSAwO1xuICB2YXIgY2xpcHBlckVsZW1lbnQgPSBjYW5Fc2NhcGVDbGlwcGluZyAmJiBpc0hUTUxFbGVtZW50KGVsZW1lbnQpID8gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQpIDogZWxlbWVudDtcblxuICBpZiAoIWlzRWxlbWVudChjbGlwcGVyRWxlbWVudCkpIHtcbiAgICByZXR1cm4gW107XG4gIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzE0MTRcblxuXG4gIHJldHVybiBjbGlwcGluZ1BhcmVudHMuZmlsdGVyKGZ1bmN0aW9uIChjbGlwcGluZ1BhcmVudCkge1xuICAgIHJldHVybiBpc0VsZW1lbnQoY2xpcHBpbmdQYXJlbnQpICYmIGNvbnRhaW5zKGNsaXBwaW5nUGFyZW50LCBjbGlwcGVyRWxlbWVudCkgJiYgZ2V0Tm9kZU5hbWUoY2xpcHBpbmdQYXJlbnQpICE9PSAnYm9keSc7XG4gIH0pO1xufSAvLyBHZXRzIHRoZSBtYXhpbXVtIGFyZWEgdGhhdCB0aGUgZWxlbWVudCBpcyB2aXNpYmxlIGluIGR1ZSB0byBhbnkgbnVtYmVyIG9mXG4vLyBjbGlwcGluZyBwYXJlbnRzXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Q2xpcHBpbmdSZWN0KGVsZW1lbnQsIGJvdW5kYXJ5LCByb290Qm91bmRhcnksIHN0cmF0ZWd5KSB7XG4gIHZhciBtYWluQ2xpcHBpbmdQYXJlbnRzID0gYm91bmRhcnkgPT09ICdjbGlwcGluZ1BhcmVudHMnID8gZ2V0Q2xpcHBpbmdQYXJlbnRzKGVsZW1lbnQpIDogW10uY29uY2F0KGJvdW5kYXJ5KTtcbiAgdmFyIGNsaXBwaW5nUGFyZW50cyA9IFtdLmNvbmNhdChtYWluQ2xpcHBpbmdQYXJlbnRzLCBbcm9vdEJvdW5kYXJ5XSk7XG4gIHZhciBmaXJzdENsaXBwaW5nUGFyZW50ID0gY2xpcHBpbmdQYXJlbnRzWzBdO1xuICB2YXIgY2xpcHBpbmdSZWN0ID0gY2xpcHBpbmdQYXJlbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjUmVjdCwgY2xpcHBpbmdQYXJlbnQpIHtcbiAgICB2YXIgcmVjdCA9IGdldENsaWVudFJlY3RGcm9tTWl4ZWRUeXBlKGVsZW1lbnQsIGNsaXBwaW5nUGFyZW50LCBzdHJhdGVneSk7XG4gICAgYWNjUmVjdC50b3AgPSBtYXgocmVjdC50b3AsIGFjY1JlY3QudG9wKTtcbiAgICBhY2NSZWN0LnJpZ2h0ID0gbWluKHJlY3QucmlnaHQsIGFjY1JlY3QucmlnaHQpO1xuICAgIGFjY1JlY3QuYm90dG9tID0gbWluKHJlY3QuYm90dG9tLCBhY2NSZWN0LmJvdHRvbSk7XG4gICAgYWNjUmVjdC5sZWZ0ID0gbWF4KHJlY3QubGVmdCwgYWNjUmVjdC5sZWZ0KTtcbiAgICByZXR1cm4gYWNjUmVjdDtcbiAgfSwgZ2V0Q2xpZW50UmVjdEZyb21NaXhlZFR5cGUoZWxlbWVudCwgZmlyc3RDbGlwcGluZ1BhcmVudCwgc3RyYXRlZ3kpKTtcbiAgY2xpcHBpbmdSZWN0LndpZHRoID0gY2xpcHBpbmdSZWN0LnJpZ2h0IC0gY2xpcHBpbmdSZWN0LmxlZnQ7XG4gIGNsaXBwaW5nUmVjdC5oZWlnaHQgPSBjbGlwcGluZ1JlY3QuYm90dG9tIC0gY2xpcHBpbmdSZWN0LnRvcDtcbiAgY2xpcHBpbmdSZWN0LnggPSBjbGlwcGluZ1JlY3QubGVmdDtcbiAgY2xpcHBpbmdSZWN0LnkgPSBjbGlwcGluZ1JlY3QudG9wO1xuICByZXR1cm4gY2xpcHBpbmdSZWN0O1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEZyZXNoU2lkZU9iamVjdCgpIHtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IDAsXG4gICAgcmlnaHQ6IDAsXG4gICAgYm90dG9tOiAwLFxuICAgIGxlZnQ6IDBcbiAgfTtcbn0iLCJpbXBvcnQgZ2V0RnJlc2hTaWRlT2JqZWN0IGZyb20gXCIuL2dldEZyZXNoU2lkZU9iamVjdC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWVyZ2VQYWRkaW5nT2JqZWN0KHBhZGRpbmdPYmplY3QpIHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGdldEZyZXNoU2lkZU9iamVjdCgpLCBwYWRkaW5nT2JqZWN0KTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBleHBhbmRUb0hhc2hNYXAodmFsdWUsIGtleXMpIHtcbiAgcmV0dXJuIGtleXMucmVkdWNlKGZ1bmN0aW9uIChoYXNoTWFwLCBrZXkpIHtcbiAgICBoYXNoTWFwW2tleV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gaGFzaE1hcDtcbiAgfSwge30pO1xufSIsImltcG9ydCBnZXRDbGlwcGluZ1JlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRDbGlwcGluZ1JlY3QuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCBjb21wdXRlT2Zmc2V0cyBmcm9tIFwiLi9jb21wdXRlT2Zmc2V0cy5qc1wiO1xuaW1wb3J0IHJlY3RUb0NsaWVudFJlY3QgZnJvbSBcIi4vcmVjdFRvQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IHsgY2xpcHBpbmdQYXJlbnRzLCByZWZlcmVuY2UsIHBvcHBlciwgYm90dG9tLCB0b3AsIHJpZ2h0LCBiYXNlUGxhY2VtZW50cywgdmlld3BvcnQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCB7IGlzRWxlbWVudCB9IGZyb20gXCIuLi9kb20tdXRpbHMvaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IG1lcmdlUGFkZGluZ09iamVjdCBmcm9tIFwiLi9tZXJnZVBhZGRpbmdPYmplY3QuanNcIjtcbmltcG9ydCBleHBhbmRUb0hhc2hNYXAgZnJvbSBcIi4vZXhwYW5kVG9IYXNoTWFwLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBfb3B0aW9ucyA9IG9wdGlvbnMsXG4gICAgICBfb3B0aW9ucyRwbGFjZW1lbnQgPSBfb3B0aW9ucy5wbGFjZW1lbnQsXG4gICAgICBwbGFjZW1lbnQgPSBfb3B0aW9ucyRwbGFjZW1lbnQgPT09IHZvaWQgMCA/IHN0YXRlLnBsYWNlbWVudCA6IF9vcHRpb25zJHBsYWNlbWVudCxcbiAgICAgIF9vcHRpb25zJHN0cmF0ZWd5ID0gX29wdGlvbnMuc3RyYXRlZ3ksXG4gICAgICBzdHJhdGVneSA9IF9vcHRpb25zJHN0cmF0ZWd5ID09PSB2b2lkIDAgPyBzdGF0ZS5zdHJhdGVneSA6IF9vcHRpb25zJHN0cmF0ZWd5LFxuICAgICAgX29wdGlvbnMkYm91bmRhcnkgPSBfb3B0aW9ucy5ib3VuZGFyeSxcbiAgICAgIGJvdW5kYXJ5ID0gX29wdGlvbnMkYm91bmRhcnkgPT09IHZvaWQgMCA/IGNsaXBwaW5nUGFyZW50cyA6IF9vcHRpb25zJGJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkcm9vdEJvdW5kYXJ5ID0gX29wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gX29wdGlvbnMkcm9vdEJvdW5kYXJ5ID09PSB2b2lkIDAgPyB2aWV3cG9ydCA6IF9vcHRpb25zJHJvb3RCb3VuZGFyeSxcbiAgICAgIF9vcHRpb25zJGVsZW1lbnRDb250ZSA9IF9vcHRpb25zLmVsZW1lbnRDb250ZXh0LFxuICAgICAgZWxlbWVudENvbnRleHQgPSBfb3B0aW9ucyRlbGVtZW50Q29udGUgPT09IHZvaWQgMCA/IHBvcHBlciA6IF9vcHRpb25zJGVsZW1lbnRDb250ZSxcbiAgICAgIF9vcHRpb25zJGFsdEJvdW5kYXJ5ID0gX29wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IF9vcHRpb25zJGFsdEJvdW5kYXJ5ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9vcHRpb25zJGFsdEJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkcGFkZGluZyA9IF9vcHRpb25zLnBhZGRpbmcsXG4gICAgICBwYWRkaW5nID0gX29wdGlvbnMkcGFkZGluZyA9PT0gdm9pZCAwID8gMCA6IF9vcHRpb25zJHBhZGRpbmc7XG4gIHZhciBwYWRkaW5nT2JqZWN0ID0gbWVyZ2VQYWRkaW5nT2JqZWN0KHR5cGVvZiBwYWRkaW5nICE9PSAnbnVtYmVyJyA/IHBhZGRpbmcgOiBleHBhbmRUb0hhc2hNYXAocGFkZGluZywgYmFzZVBsYWNlbWVudHMpKTtcbiAgdmFyIGFsdENvbnRleHQgPSBlbGVtZW50Q29udGV4dCA9PT0gcG9wcGVyID8gcmVmZXJlbmNlIDogcG9wcGVyO1xuICB2YXIgcG9wcGVyUmVjdCA9IHN0YXRlLnJlY3RzLnBvcHBlcjtcbiAgdmFyIGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50c1thbHRCb3VuZGFyeSA/IGFsdENvbnRleHQgOiBlbGVtZW50Q29udGV4dF07XG4gIHZhciBjbGlwcGluZ0NsaWVudFJlY3QgPSBnZXRDbGlwcGluZ1JlY3QoaXNFbGVtZW50KGVsZW1lbnQpID8gZWxlbWVudCA6IGVsZW1lbnQuY29udGV4dEVsZW1lbnQgfHwgZ2V0RG9jdW1lbnRFbGVtZW50KHN0YXRlLmVsZW1lbnRzLnBvcHBlciksIGJvdW5kYXJ5LCByb290Qm91bmRhcnksIHN0cmF0ZWd5KTtcbiAgdmFyIHJlZmVyZW5jZUNsaWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qoc3RhdGUuZWxlbWVudHMucmVmZXJlbmNlKTtcbiAgdmFyIHBvcHBlck9mZnNldHMgPSBjb21wdXRlT2Zmc2V0cyh7XG4gICAgcmVmZXJlbmNlOiByZWZlcmVuY2VDbGllbnRSZWN0LFxuICAgIGVsZW1lbnQ6IHBvcHBlclJlY3QsXG4gICAgc3RyYXRlZ3k6ICdhYnNvbHV0ZScsXG4gICAgcGxhY2VtZW50OiBwbGFjZW1lbnRcbiAgfSk7XG4gIHZhciBwb3BwZXJDbGllbnRSZWN0ID0gcmVjdFRvQ2xpZW50UmVjdChPYmplY3QuYXNzaWduKHt9LCBwb3BwZXJSZWN0LCBwb3BwZXJPZmZzZXRzKSk7XG4gIHZhciBlbGVtZW50Q2xpZW50UmVjdCA9IGVsZW1lbnRDb250ZXh0ID09PSBwb3BwZXIgPyBwb3BwZXJDbGllbnRSZWN0IDogcmVmZXJlbmNlQ2xpZW50UmVjdDsgLy8gcG9zaXRpdmUgPSBvdmVyZmxvd2luZyB0aGUgY2xpcHBpbmcgcmVjdFxuICAvLyAwIG9yIG5lZ2F0aXZlID0gd2l0aGluIHRoZSBjbGlwcGluZyByZWN0XG5cbiAgdmFyIG92ZXJmbG93T2Zmc2V0cyA9IHtcbiAgICB0b3A6IGNsaXBwaW5nQ2xpZW50UmVjdC50b3AgLSBlbGVtZW50Q2xpZW50UmVjdC50b3AgKyBwYWRkaW5nT2JqZWN0LnRvcCxcbiAgICBib3R0b206IGVsZW1lbnRDbGllbnRSZWN0LmJvdHRvbSAtIGNsaXBwaW5nQ2xpZW50UmVjdC5ib3R0b20gKyBwYWRkaW5nT2JqZWN0LmJvdHRvbSxcbiAgICBsZWZ0OiBjbGlwcGluZ0NsaWVudFJlY3QubGVmdCAtIGVsZW1lbnRDbGllbnRSZWN0LmxlZnQgKyBwYWRkaW5nT2JqZWN0LmxlZnQsXG4gICAgcmlnaHQ6IGVsZW1lbnRDbGllbnRSZWN0LnJpZ2h0IC0gY2xpcHBpbmdDbGllbnRSZWN0LnJpZ2h0ICsgcGFkZGluZ09iamVjdC5yaWdodFxuICB9O1xuICB2YXIgb2Zmc2V0RGF0YSA9IHN0YXRlLm1vZGlmaWVyc0RhdGEub2Zmc2V0OyAvLyBPZmZzZXRzIGNhbiBiZSBhcHBsaWVkIG9ubHkgdG8gdGhlIHBvcHBlciBlbGVtZW50XG5cbiAgaWYgKGVsZW1lbnRDb250ZXh0ID09PSBwb3BwZXIgJiYgb2Zmc2V0RGF0YSkge1xuICAgIHZhciBvZmZzZXQgPSBvZmZzZXREYXRhW3BsYWNlbWVudF07XG4gICAgT2JqZWN0LmtleXMob3ZlcmZsb3dPZmZzZXRzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHZhciBtdWx0aXBseSA9IFtyaWdodCwgYm90dG9tXS5pbmRleE9mKGtleSkgPj0gMCA/IDEgOiAtMTtcbiAgICAgIHZhciBheGlzID0gW3RvcCwgYm90dG9tXS5pbmRleE9mKGtleSkgPj0gMCA/ICd5JyA6ICd4JztcbiAgICAgIG92ZXJmbG93T2Zmc2V0c1trZXldICs9IG9mZnNldFtheGlzXSAqIG11bHRpcGx5O1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG92ZXJmbG93T2Zmc2V0cztcbn0iLCJpbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuL2dldFZhcmlhdGlvbi5qc1wiO1xuaW1wb3J0IHsgdmFyaWF0aW9uUGxhY2VtZW50cywgYmFzZVBsYWNlbWVudHMsIHBsYWNlbWVudHMgYXMgYWxsUGxhY2VtZW50cyB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuL2RldGVjdE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21wdXRlQXV0b1BsYWNlbWVudChzdGF0ZSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgdmFyIF9vcHRpb25zID0gb3B0aW9ucyxcbiAgICAgIHBsYWNlbWVudCA9IF9vcHRpb25zLnBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5ID0gX29wdGlvbnMuYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnkgPSBfb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICBwYWRkaW5nID0gX29wdGlvbnMucGFkZGluZyxcbiAgICAgIGZsaXBWYXJpYXRpb25zID0gX29wdGlvbnMuZmxpcFZhcmlhdGlvbnMsXG4gICAgICBfb3B0aW9ucyRhbGxvd2VkQXV0b1AgPSBfb3B0aW9ucy5hbGxvd2VkQXV0b1BsYWNlbWVudHMsXG4gICAgICBhbGxvd2VkQXV0b1BsYWNlbWVudHMgPSBfb3B0aW9ucyRhbGxvd2VkQXV0b1AgPT09IHZvaWQgMCA/IGFsbFBsYWNlbWVudHMgOiBfb3B0aW9ucyRhbGxvd2VkQXV0b1A7XG4gIHZhciB2YXJpYXRpb24gPSBnZXRWYXJpYXRpb24ocGxhY2VtZW50KTtcbiAgdmFyIHBsYWNlbWVudHMgPSB2YXJpYXRpb24gPyBmbGlwVmFyaWF0aW9ucyA/IHZhcmlhdGlvblBsYWNlbWVudHMgOiB2YXJpYXRpb25QbGFjZW1lbnRzLmZpbHRlcihmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgcmV0dXJuIGdldFZhcmlhdGlvbihwbGFjZW1lbnQpID09PSB2YXJpYXRpb247XG4gIH0pIDogYmFzZVBsYWNlbWVudHM7XG4gIHZhciBhbGxvd2VkUGxhY2VtZW50cyA9IHBsYWNlbWVudHMuZmlsdGVyKGZ1bmN0aW9uIChwbGFjZW1lbnQpIHtcbiAgICByZXR1cm4gYWxsb3dlZEF1dG9QbGFjZW1lbnRzLmluZGV4T2YocGxhY2VtZW50KSA+PSAwO1xuICB9KTtcblxuICBpZiAoYWxsb3dlZFBsYWNlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgYWxsb3dlZFBsYWNlbWVudHMgPSBwbGFjZW1lbnRzO1xuICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdOiBGbG93IHNlZW1zIHRvIGhhdmUgcHJvYmxlbXMgd2l0aCB0d28gYXJyYXkgdW5pb25zLi4uXG5cblxuICB2YXIgb3ZlcmZsb3dzID0gYWxsb3dlZFBsYWNlbWVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICAgIGFjY1twbGFjZW1lbnRdID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICAgIHBsYWNlbWVudDogcGxhY2VtZW50LFxuICAgICAgYm91bmRhcnk6IGJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5OiByb290Qm91bmRhcnksXG4gICAgICBwYWRkaW5nOiBwYWRkaW5nXG4gICAgfSlbZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpXTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvdmVyZmxvd3MpLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gb3ZlcmZsb3dzW2FdIC0gb3ZlcmZsb3dzW2JdO1xuICB9KTtcbn0iLCJpbXBvcnQgZ2V0T3Bwb3NpdGVQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE9wcG9zaXRlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGNvbXB1dGVBdXRvUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9jb21wdXRlQXV0b1BsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgYm90dG9tLCB0b3AsIHN0YXJ0LCByaWdodCwgbGVmdCwgYXV0byB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi4vdXRpbHMvZ2V0VmFyaWF0aW9uLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZnVuY3Rpb24gZ2V0RXhwYW5kZWRGYWxsYmFja1BsYWNlbWVudHMocGxhY2VtZW50KSB7XG4gIGlmIChnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgPT09IGF1dG8pIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICB2YXIgb3Bwb3NpdGVQbGFjZW1lbnQgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuICByZXR1cm4gW2dldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50KHBsYWNlbWVudCksIG9wcG9zaXRlUGxhY2VtZW50LCBnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudChvcHBvc2l0ZVBsYWNlbWVudCldO1xufVxuXG5mdW5jdGlvbiBmbGlwKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdLl9za2lwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIF9vcHRpb25zJG1haW5BeGlzID0gb3B0aW9ucy5tYWluQXhpcyxcbiAgICAgIGNoZWNrTWFpbkF4aXMgPSBfb3B0aW9ucyRtYWluQXhpcyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJG1haW5BeGlzLFxuICAgICAgX29wdGlvbnMkYWx0QXhpcyA9IG9wdGlvbnMuYWx0QXhpcyxcbiAgICAgIGNoZWNrQWx0QXhpcyA9IF9vcHRpb25zJGFsdEF4aXMgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRhbHRBeGlzLFxuICAgICAgc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzID0gb3B0aW9ucy5mYWxsYmFja1BsYWNlbWVudHMsXG4gICAgICBwYWRkaW5nID0gb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgYm91bmRhcnkgPSBvcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IG9wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBfb3B0aW9ucyRmbGlwVmFyaWF0aW8gPSBvcHRpb25zLmZsaXBWYXJpYXRpb25zLFxuICAgICAgZmxpcFZhcmlhdGlvbnMgPSBfb3B0aW9ucyRmbGlwVmFyaWF0aW8gPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRmbGlwVmFyaWF0aW8sXG4gICAgICBhbGxvd2VkQXV0b1BsYWNlbWVudHMgPSBvcHRpb25zLmFsbG93ZWRBdXRvUGxhY2VtZW50cztcbiAgdmFyIHByZWZlcnJlZFBsYWNlbWVudCA9IHN0YXRlLm9wdGlvbnMucGxhY2VtZW50O1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocHJlZmVycmVkUGxhY2VtZW50KTtcbiAgdmFyIGlzQmFzZVBsYWNlbWVudCA9IGJhc2VQbGFjZW1lbnQgPT09IHByZWZlcnJlZFBsYWNlbWVudDtcbiAgdmFyIGZhbGxiYWNrUGxhY2VtZW50cyA9IHNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyB8fCAoaXNCYXNlUGxhY2VtZW50IHx8ICFmbGlwVmFyaWF0aW9ucyA/IFtnZXRPcHBvc2l0ZVBsYWNlbWVudChwcmVmZXJyZWRQbGFjZW1lbnQpXSA6IGdldEV4cGFuZGVkRmFsbGJhY2tQbGFjZW1lbnRzKHByZWZlcnJlZFBsYWNlbWVudCkpO1xuICB2YXIgcGxhY2VtZW50cyA9IFtwcmVmZXJyZWRQbGFjZW1lbnRdLmNvbmNhdChmYWxsYmFja1BsYWNlbWVudHMpLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgICByZXR1cm4gYWNjLmNvbmNhdChnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgPT09IGF1dG8gPyBjb21wdXRlQXV0b1BsYWNlbWVudChzdGF0ZSwge1xuICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnk6IHJvb3RCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmc6IHBhZGRpbmcsXG4gICAgICBmbGlwVmFyaWF0aW9uczogZmxpcFZhcmlhdGlvbnMsXG4gICAgICBhbGxvd2VkQXV0b1BsYWNlbWVudHM6IGFsbG93ZWRBdXRvUGxhY2VtZW50c1xuICAgIH0pIDogcGxhY2VtZW50KTtcbiAgfSwgW10pO1xuICB2YXIgcmVmZXJlbmNlUmVjdCA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZTtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciBjaGVja3NNYXAgPSBuZXcgTWFwKCk7XG4gIHZhciBtYWtlRmFsbGJhY2tDaGVja3MgPSB0cnVlO1xuICB2YXIgZmlyc3RGaXR0aW5nUGxhY2VtZW50ID0gcGxhY2VtZW50c1swXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHBsYWNlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcGxhY2VtZW50ID0gcGxhY2VtZW50c1tpXTtcblxuICAgIHZhciBfYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KTtcblxuICAgIHZhciBpc1N0YXJ0VmFyaWF0aW9uID0gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkgPT09IHN0YXJ0O1xuICAgIHZhciBpc1ZlcnRpY2FsID0gW3RvcCwgYm90dG9tXS5pbmRleE9mKF9iYXNlUGxhY2VtZW50KSA+PSAwO1xuICAgIHZhciBsZW4gPSBpc1ZlcnRpY2FsID8gJ3dpZHRoJyA6ICdoZWlnaHQnO1xuICAgIHZhciBvdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgICAgYWx0Qm91bmRhcnk6IGFsdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZzogcGFkZGluZ1xuICAgIH0pO1xuICAgIHZhciBtYWluVmFyaWF0aW9uU2lkZSA9IGlzVmVydGljYWwgPyBpc1N0YXJ0VmFyaWF0aW9uID8gcmlnaHQgOiBsZWZ0IDogaXNTdGFydFZhcmlhdGlvbiA/IGJvdHRvbSA6IHRvcDtcblxuICAgIGlmIChyZWZlcmVuY2VSZWN0W2xlbl0gPiBwb3BwZXJSZWN0W2xlbl0pIHtcbiAgICAgIG1haW5WYXJpYXRpb25TaWRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpblZhcmlhdGlvblNpZGUpO1xuICAgIH1cblxuICAgIHZhciBhbHRWYXJpYXRpb25TaWRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpblZhcmlhdGlvblNpZGUpO1xuICAgIHZhciBjaGVja3MgPSBbXTtcblxuICAgIGlmIChjaGVja01haW5BeGlzKSB7XG4gICAgICBjaGVja3MucHVzaChvdmVyZmxvd1tfYmFzZVBsYWNlbWVudF0gPD0gMCk7XG4gICAgfVxuXG4gICAgaWYgKGNoZWNrQWx0QXhpcykge1xuICAgICAgY2hlY2tzLnB1c2gob3ZlcmZsb3dbbWFpblZhcmlhdGlvblNpZGVdIDw9IDAsIG92ZXJmbG93W2FsdFZhcmlhdGlvblNpZGVdIDw9IDApO1xuICAgIH1cblxuICAgIGlmIChjaGVja3MuZXZlcnkoZnVuY3Rpb24gKGNoZWNrKSB7XG4gICAgICByZXR1cm4gY2hlY2s7XG4gICAgfSkpIHtcbiAgICAgIGZpcnN0Rml0dGluZ1BsYWNlbWVudCA9IHBsYWNlbWVudDtcbiAgICAgIG1ha2VGYWxsYmFja0NoZWNrcyA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2hlY2tzTWFwLnNldChwbGFjZW1lbnQsIGNoZWNrcyk7XG4gIH1cblxuICBpZiAobWFrZUZhbGxiYWNrQ2hlY2tzKSB7XG4gICAgLy8gYDJgIG1heSBiZSBkZXNpcmVkIGluIHNvbWUgY2FzZXMg4oCTIHJlc2VhcmNoIGxhdGVyXG4gICAgdmFyIG51bWJlck9mQ2hlY2tzID0gZmxpcFZhcmlhdGlvbnMgPyAzIDogMTtcblxuICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKF9pKSB7XG4gICAgICB2YXIgZml0dGluZ1BsYWNlbWVudCA9IHBsYWNlbWVudHMuZmluZChmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgICAgIHZhciBjaGVja3MgPSBjaGVja3NNYXAuZ2V0KHBsYWNlbWVudCk7XG5cbiAgICAgICAgaWYgKGNoZWNrcykge1xuICAgICAgICAgIHJldHVybiBjaGVja3Muc2xpY2UoMCwgX2kpLmV2ZXJ5KGZ1bmN0aW9uIChjaGVjaykge1xuICAgICAgICAgICAgcmV0dXJuIGNoZWNrO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKGZpdHRpbmdQbGFjZW1lbnQpIHtcbiAgICAgICAgZmlyc3RGaXR0aW5nUGxhY2VtZW50ID0gZml0dGluZ1BsYWNlbWVudDtcbiAgICAgICAgcmV0dXJuIFwiYnJlYWtcIjtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZm9yICh2YXIgX2kgPSBudW1iZXJPZkNoZWNrczsgX2kgPiAwOyBfaS0tKSB7XG4gICAgICB2YXIgX3JldCA9IF9sb29wKF9pKTtcblxuICAgICAgaWYgKF9yZXQgPT09IFwiYnJlYWtcIikgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0YXRlLnBsYWNlbWVudCAhPT0gZmlyc3RGaXR0aW5nUGxhY2VtZW50KSB7XG4gICAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXS5fc2tpcCA9IHRydWU7XG4gICAgc3RhdGUucGxhY2VtZW50ID0gZmlyc3RGaXR0aW5nUGxhY2VtZW50O1xuICAgIHN0YXRlLnJlc2V0ID0gdHJ1ZTtcbiAgfVxufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnZmxpcCcsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIGZuOiBmbGlwLFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ29mZnNldCddLFxuICBkYXRhOiB7XG4gICAgX3NraXA6IGZhbHNlXG4gIH1cbn07IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0QWx0QXhpcyhheGlzKSB7XG4gIHJldHVybiBheGlzID09PSAneCcgPyAneScgOiAneCc7XG59IiwiaW1wb3J0IHsgbWF4IGFzIG1hdGhNYXgsIG1pbiBhcyBtYXRoTWluIH0gZnJvbSBcIi4vbWF0aC5qc1wiO1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhpbihtaW4sIHZhbHVlLCBtYXgpIHtcbiAgcmV0dXJuIG1hdGhNYXgobWluLCBtYXRoTWluKHZhbHVlLCBtYXgpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB3aXRoaW5NYXhDbGFtcChtaW4sIHZhbHVlLCBtYXgpIHtcbiAgdmFyIHYgPSB3aXRoaW4obWluLCB2YWx1ZSwgbWF4KTtcbiAgcmV0dXJuIHYgPiBtYXggPyBtYXggOiB2O1xufSIsImltcG9ydCB7IHRvcCwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgc3RhcnQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRBbHRBeGlzIGZyb20gXCIuLi91dGlscy9nZXRBbHRBeGlzLmpzXCI7XG5pbXBvcnQgeyB3aXRoaW4sIHdpdGhpbk1heENsYW1wIH0gZnJvbSBcIi4uL3V0aWxzL3dpdGhpbi5qc1wiO1xuaW1wb3J0IGdldExheW91dFJlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4uL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuLi91dGlscy9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCBnZXRGcmVzaFNpZGVPYmplY3QgZnJvbSBcIi4uL3V0aWxzL2dldEZyZXNoU2lkZU9iamVjdC5qc1wiO1xuaW1wb3J0IHsgbWluIGFzIG1hdGhNaW4sIG1heCBhcyBtYXRoTWF4IH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjtcblxuZnVuY3Rpb24gcHJldmVudE92ZXJmbG93KF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuICB2YXIgX29wdGlvbnMkbWFpbkF4aXMgPSBvcHRpb25zLm1haW5BeGlzLFxuICAgICAgY2hlY2tNYWluQXhpcyA9IF9vcHRpb25zJG1haW5BeGlzID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkbWFpbkF4aXMsXG4gICAgICBfb3B0aW9ucyRhbHRBeGlzID0gb3B0aW9ucy5hbHRBeGlzLFxuICAgICAgY2hlY2tBbHRBeGlzID0gX29wdGlvbnMkYWx0QXhpcyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfb3B0aW9ucyRhbHRBeGlzLFxuICAgICAgYm91bmRhcnkgPSBvcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IG9wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBwYWRkaW5nID0gb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgX29wdGlvbnMkdGV0aGVyID0gb3B0aW9ucy50ZXRoZXIsXG4gICAgICB0ZXRoZXIgPSBfb3B0aW9ucyR0ZXRoZXIgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyR0ZXRoZXIsXG4gICAgICBfb3B0aW9ucyR0ZXRoZXJPZmZzZXQgPSBvcHRpb25zLnRldGhlck9mZnNldCxcbiAgICAgIHRldGhlck9mZnNldCA9IF9vcHRpb25zJHRldGhlck9mZnNldCA9PT0gdm9pZCAwID8gMCA6IF9vcHRpb25zJHRldGhlck9mZnNldDtcbiAgdmFyIG92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgcm9vdEJvdW5kYXJ5OiByb290Qm91bmRhcnksXG4gICAgcGFkZGluZzogcGFkZGluZyxcbiAgICBhbHRCb3VuZGFyeTogYWx0Qm91bmRhcnlcbiAgfSk7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChzdGF0ZS5wbGFjZW1lbnQpO1xuICB2YXIgdmFyaWF0aW9uID0gZ2V0VmFyaWF0aW9uKHN0YXRlLnBsYWNlbWVudCk7XG4gIHZhciBpc0Jhc2VQbGFjZW1lbnQgPSAhdmFyaWF0aW9uO1xuICB2YXIgbWFpbkF4aXMgPSBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQoYmFzZVBsYWNlbWVudCk7XG4gIHZhciBhbHRBeGlzID0gZ2V0QWx0QXhpcyhtYWluQXhpcyk7XG4gIHZhciBwb3BwZXJPZmZzZXRzID0gc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzO1xuICB2YXIgcmVmZXJlbmNlUmVjdCA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZTtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciB0ZXRoZXJPZmZzZXRWYWx1ZSA9IHR5cGVvZiB0ZXRoZXJPZmZzZXQgPT09ICdmdW5jdGlvbicgPyB0ZXRoZXJPZmZzZXQoT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUucmVjdHMsIHtcbiAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudFxuICB9KSkgOiB0ZXRoZXJPZmZzZXQ7XG4gIHZhciBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUgPSB0eXBlb2YgdGV0aGVyT2Zmc2V0VmFsdWUgPT09ICdudW1iZXInID8ge1xuICAgIG1haW5BeGlzOiB0ZXRoZXJPZmZzZXRWYWx1ZSxcbiAgICBhbHRBeGlzOiB0ZXRoZXJPZmZzZXRWYWx1ZVxuICB9IDogT2JqZWN0LmFzc2lnbih7XG4gICAgbWFpbkF4aXM6IDAsXG4gICAgYWx0QXhpczogMFxuICB9LCB0ZXRoZXJPZmZzZXRWYWx1ZSk7XG4gIHZhciBvZmZzZXRNb2RpZmllclN0YXRlID0gc3RhdGUubW9kaWZpZXJzRGF0YS5vZmZzZXQgPyBzdGF0ZS5tb2RpZmllcnNEYXRhLm9mZnNldFtzdGF0ZS5wbGFjZW1lbnRdIDogbnVsbDtcbiAgdmFyIGRhdGEgPSB7XG4gICAgeDogMCxcbiAgICB5OiAwXG4gIH07XG5cbiAgaWYgKCFwb3BwZXJPZmZzZXRzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICB2YXIgX29mZnNldE1vZGlmaWVyU3RhdGUkO1xuXG4gICAgdmFyIG1haW5TaWRlID0gbWFpbkF4aXMgPT09ICd5JyA/IHRvcCA6IGxlZnQ7XG4gICAgdmFyIGFsdFNpZGUgPSBtYWluQXhpcyA9PT0gJ3knID8gYm90dG9tIDogcmlnaHQ7XG4gICAgdmFyIGxlbiA9IG1haW5BeGlzID09PSAneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG4gICAgdmFyIG9mZnNldCA9IHBvcHBlck9mZnNldHNbbWFpbkF4aXNdO1xuICAgIHZhciBtaW4gPSBvZmZzZXQgKyBvdmVyZmxvd1ttYWluU2lkZV07XG4gICAgdmFyIG1heCA9IG9mZnNldCAtIG92ZXJmbG93W2FsdFNpZGVdO1xuICAgIHZhciBhZGRpdGl2ZSA9IHRldGhlciA/IC1wb3BwZXJSZWN0W2xlbl0gLyAyIDogMDtcbiAgICB2YXIgbWluTGVuID0gdmFyaWF0aW9uID09PSBzdGFydCA/IHJlZmVyZW5jZVJlY3RbbGVuXSA6IHBvcHBlclJlY3RbbGVuXTtcbiAgICB2YXIgbWF4TGVuID0gdmFyaWF0aW9uID09PSBzdGFydCA/IC1wb3BwZXJSZWN0W2xlbl0gOiAtcmVmZXJlbmNlUmVjdFtsZW5dOyAvLyBXZSBuZWVkIHRvIGluY2x1ZGUgdGhlIGFycm93IGluIHRoZSBjYWxjdWxhdGlvbiBzbyB0aGUgYXJyb3cgZG9lc24ndCBnb1xuICAgIC8vIG91dHNpZGUgdGhlIHJlZmVyZW5jZSBib3VuZHNcblxuICAgIHZhciBhcnJvd0VsZW1lbnQgPSBzdGF0ZS5lbGVtZW50cy5hcnJvdztcbiAgICB2YXIgYXJyb3dSZWN0ID0gdGV0aGVyICYmIGFycm93RWxlbWVudCA/IGdldExheW91dFJlY3QoYXJyb3dFbGVtZW50KSA6IHtcbiAgICAgIHdpZHRoOiAwLFxuICAgICAgaGVpZ2h0OiAwXG4gICAgfTtcbiAgICB2YXIgYXJyb3dQYWRkaW5nT2JqZWN0ID0gc3RhdGUubW9kaWZpZXJzRGF0YVsnYXJyb3cjcGVyc2lzdGVudCddID8gc3RhdGUubW9kaWZpZXJzRGF0YVsnYXJyb3cjcGVyc2lzdGVudCddLnBhZGRpbmcgOiBnZXRGcmVzaFNpZGVPYmplY3QoKTtcbiAgICB2YXIgYXJyb3dQYWRkaW5nTWluID0gYXJyb3dQYWRkaW5nT2JqZWN0W21haW5TaWRlXTtcbiAgICB2YXIgYXJyb3dQYWRkaW5nTWF4ID0gYXJyb3dQYWRkaW5nT2JqZWN0W2FsdFNpZGVdOyAvLyBJZiB0aGUgcmVmZXJlbmNlIGxlbmd0aCBpcyBzbWFsbGVyIHRoYW4gdGhlIGFycm93IGxlbmd0aCwgd2UgZG9uJ3Qgd2FudFxuICAgIC8vIHRvIGluY2x1ZGUgaXRzIGZ1bGwgc2l6ZSBpbiB0aGUgY2FsY3VsYXRpb24uIElmIHRoZSByZWZlcmVuY2UgaXMgc21hbGxcbiAgICAvLyBhbmQgbmVhciB0aGUgZWRnZSBvZiBhIGJvdW5kYXJ5LCB0aGUgcG9wcGVyIGNhbiBvdmVyZmxvdyBldmVuIGlmIHRoZVxuICAgIC8vIHJlZmVyZW5jZSBpcyBub3Qgb3ZlcmZsb3dpbmcgYXMgd2VsbCAoZS5nLiB2aXJ0dWFsIGVsZW1lbnRzIHdpdGggbm9cbiAgICAvLyB3aWR0aCBvciBoZWlnaHQpXG5cbiAgICB2YXIgYXJyb3dMZW4gPSB3aXRoaW4oMCwgcmVmZXJlbmNlUmVjdFtsZW5dLCBhcnJvd1JlY3RbbGVuXSk7XG4gICAgdmFyIG1pbk9mZnNldCA9IGlzQmFzZVBsYWNlbWVudCA/IHJlZmVyZW5jZVJlY3RbbGVuXSAvIDIgLSBhZGRpdGl2ZSAtIGFycm93TGVuIC0gYXJyb3dQYWRkaW5nTWluIC0gbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLm1haW5BeGlzIDogbWluTGVuIC0gYXJyb3dMZW4gLSBhcnJvd1BhZGRpbmdNaW4gLSBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUubWFpbkF4aXM7XG4gICAgdmFyIG1heE9mZnNldCA9IGlzQmFzZVBsYWNlbWVudCA/IC1yZWZlcmVuY2VSZWN0W2xlbl0gLyAyICsgYWRkaXRpdmUgKyBhcnJvd0xlbiArIGFycm93UGFkZGluZ01heCArIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5tYWluQXhpcyA6IG1heExlbiArIGFycm93TGVuICsgYXJyb3dQYWRkaW5nTWF4ICsgbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLm1haW5BeGlzO1xuICAgIHZhciBhcnJvd09mZnNldFBhcmVudCA9IHN0YXRlLmVsZW1lbnRzLmFycm93ICYmIGdldE9mZnNldFBhcmVudChzdGF0ZS5lbGVtZW50cy5hcnJvdyk7XG4gICAgdmFyIGNsaWVudE9mZnNldCA9IGFycm93T2Zmc2V0UGFyZW50ID8gbWFpbkF4aXMgPT09ICd5JyA/IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudFRvcCB8fCAwIDogYXJyb3dPZmZzZXRQYXJlbnQuY2xpZW50TGVmdCB8fCAwIDogMDtcbiAgICB2YXIgb2Zmc2V0TW9kaWZpZXJWYWx1ZSA9IChfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQgPSBvZmZzZXRNb2RpZmllclN0YXRlID09IG51bGwgPyB2b2lkIDAgOiBvZmZzZXRNb2RpZmllclN0YXRlW21haW5BeGlzXSkgIT0gbnVsbCA/IF9vZmZzZXRNb2RpZmllclN0YXRlJCA6IDA7XG4gICAgdmFyIHRldGhlck1pbiA9IG9mZnNldCArIG1pbk9mZnNldCAtIG9mZnNldE1vZGlmaWVyVmFsdWUgLSBjbGllbnRPZmZzZXQ7XG4gICAgdmFyIHRldGhlck1heCA9IG9mZnNldCArIG1heE9mZnNldCAtIG9mZnNldE1vZGlmaWVyVmFsdWU7XG4gICAgdmFyIHByZXZlbnRlZE9mZnNldCA9IHdpdGhpbih0ZXRoZXIgPyBtYXRoTWluKG1pbiwgdGV0aGVyTWluKSA6IG1pbiwgb2Zmc2V0LCB0ZXRoZXIgPyBtYXRoTWF4KG1heCwgdGV0aGVyTWF4KSA6IG1heCk7XG4gICAgcG9wcGVyT2Zmc2V0c1ttYWluQXhpc10gPSBwcmV2ZW50ZWRPZmZzZXQ7XG4gICAgZGF0YVttYWluQXhpc10gPSBwcmV2ZW50ZWRPZmZzZXQgLSBvZmZzZXQ7XG4gIH1cblxuICBpZiAoY2hlY2tBbHRBeGlzKSB7XG4gICAgdmFyIF9vZmZzZXRNb2RpZmllclN0YXRlJDI7XG5cbiAgICB2YXIgX21haW5TaWRlID0gbWFpbkF4aXMgPT09ICd4JyA/IHRvcCA6IGxlZnQ7XG5cbiAgICB2YXIgX2FsdFNpZGUgPSBtYWluQXhpcyA9PT0gJ3gnID8gYm90dG9tIDogcmlnaHQ7XG5cbiAgICB2YXIgX29mZnNldCA9IHBvcHBlck9mZnNldHNbYWx0QXhpc107XG5cbiAgICB2YXIgX2xlbiA9IGFsdEF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcblxuICAgIHZhciBfbWluID0gX29mZnNldCArIG92ZXJmbG93W19tYWluU2lkZV07XG5cbiAgICB2YXIgX21heCA9IF9vZmZzZXQgLSBvdmVyZmxvd1tfYWx0U2lkZV07XG5cbiAgICB2YXIgaXNPcmlnaW5TaWRlID0gW3RvcCwgbGVmdF0uaW5kZXhPZihiYXNlUGxhY2VtZW50KSAhPT0gLTE7XG5cbiAgICB2YXIgX29mZnNldE1vZGlmaWVyVmFsdWUgPSAoX29mZnNldE1vZGlmaWVyU3RhdGUkMiA9IG9mZnNldE1vZGlmaWVyU3RhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IG9mZnNldE1vZGlmaWVyU3RhdGVbYWx0QXhpc10pICE9IG51bGwgPyBfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQyIDogMDtcblxuICAgIHZhciBfdGV0aGVyTWluID0gaXNPcmlnaW5TaWRlID8gX21pbiA6IF9vZmZzZXQgLSByZWZlcmVuY2VSZWN0W19sZW5dIC0gcG9wcGVyUmVjdFtfbGVuXSAtIF9vZmZzZXRNb2RpZmllclZhbHVlICsgbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLmFsdEF4aXM7XG5cbiAgICB2YXIgX3RldGhlck1heCA9IGlzT3JpZ2luU2lkZSA/IF9vZmZzZXQgKyByZWZlcmVuY2VSZWN0W19sZW5dICsgcG9wcGVyUmVjdFtfbGVuXSAtIF9vZmZzZXRNb2RpZmllclZhbHVlIC0gbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLmFsdEF4aXMgOiBfbWF4O1xuXG4gICAgdmFyIF9wcmV2ZW50ZWRPZmZzZXQgPSB0ZXRoZXIgJiYgaXNPcmlnaW5TaWRlID8gd2l0aGluTWF4Q2xhbXAoX3RldGhlck1pbiwgX29mZnNldCwgX3RldGhlck1heCkgOiB3aXRoaW4odGV0aGVyID8gX3RldGhlck1pbiA6IF9taW4sIF9vZmZzZXQsIHRldGhlciA/IF90ZXRoZXJNYXggOiBfbWF4KTtcblxuICAgIHBvcHBlck9mZnNldHNbYWx0QXhpc10gPSBfcHJldmVudGVkT2Zmc2V0O1xuICAgIGRhdGFbYWx0QXhpc10gPSBfcHJldmVudGVkT2Zmc2V0IC0gX29mZnNldDtcbiAgfVxuXG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSBkYXRhO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAncHJldmVudE92ZXJmbG93JyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgZm46IHByZXZlbnRPdmVyZmxvdyxcbiAgcmVxdWlyZXNJZkV4aXN0czogWydvZmZzZXQnXVxufTsiLCJpbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldExheW91dFJlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzXCI7XG5pbXBvcnQgY29udGFpbnMgZnJvbSBcIi4uL2RvbS11dGlscy9jb250YWlucy5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgeyB3aXRoaW4gfSBmcm9tIFwiLi4vdXRpbHMvd2l0aGluLmpzXCI7XG5pbXBvcnQgbWVyZ2VQYWRkaW5nT2JqZWN0IGZyb20gXCIuLi91dGlscy9tZXJnZVBhZGRpbmdPYmplY3QuanNcIjtcbmltcG9ydCBleHBhbmRUb0hhc2hNYXAgZnJvbSBcIi4uL3V0aWxzL2V4cGFuZFRvSGFzaE1hcC5qc1wiO1xuaW1wb3J0IHsgbGVmdCwgcmlnaHQsIGJhc2VQbGFjZW1lbnRzLCB0b3AsIGJvdHRvbSB9IGZyb20gXCIuLi9lbnVtcy5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbnZhciB0b1BhZGRpbmdPYmplY3QgPSBmdW5jdGlvbiB0b1BhZGRpbmdPYmplY3QocGFkZGluZywgc3RhdGUpIHtcbiAgcGFkZGluZyA9IHR5cGVvZiBwYWRkaW5nID09PSAnZnVuY3Rpb24nID8gcGFkZGluZyhPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5yZWN0cywge1xuICAgIHBsYWNlbWVudDogc3RhdGUucGxhY2VtZW50XG4gIH0pKSA6IHBhZGRpbmc7XG4gIHJldHVybiBtZXJnZVBhZGRpbmdPYmplY3QodHlwZW9mIHBhZGRpbmcgIT09ICdudW1iZXInID8gcGFkZGluZyA6IGV4cGFuZFRvSGFzaE1hcChwYWRkaW5nLCBiYXNlUGxhY2VtZW50cykpO1xufTtcblxuZnVuY3Rpb24gYXJyb3coX3JlZikge1xuICB2YXIgX3N0YXRlJG1vZGlmaWVyc0RhdGEkO1xuXG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lLFxuICAgICAgb3B0aW9ucyA9IF9yZWYub3B0aW9ucztcbiAgdmFyIGFycm93RWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzLmFycm93O1xuICB2YXIgcG9wcGVyT2Zmc2V0cyA9IHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cztcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHN0YXRlLnBsYWNlbWVudCk7XG4gIHZhciBheGlzID0gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KGJhc2VQbGFjZW1lbnQpO1xuICB2YXIgaXNWZXJ0aWNhbCA9IFtsZWZ0LCByaWdodF0uaW5kZXhPZihiYXNlUGxhY2VtZW50KSA+PSAwO1xuICB2YXIgbGVuID0gaXNWZXJ0aWNhbCA/ICdoZWlnaHQnIDogJ3dpZHRoJztcblxuICBpZiAoIWFycm93RWxlbWVudCB8fCAhcG9wcGVyT2Zmc2V0cykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBwYWRkaW5nT2JqZWN0ID0gdG9QYWRkaW5nT2JqZWN0KG9wdGlvbnMucGFkZGluZywgc3RhdGUpO1xuICB2YXIgYXJyb3dSZWN0ID0gZ2V0TGF5b3V0UmVjdChhcnJvd0VsZW1lbnQpO1xuICB2YXIgbWluUHJvcCA9IGF4aXMgPT09ICd5JyA/IHRvcCA6IGxlZnQ7XG4gIHZhciBtYXhQcm9wID0gYXhpcyA9PT0gJ3knID8gYm90dG9tIDogcmlnaHQ7XG4gIHZhciBlbmREaWZmID0gc3RhdGUucmVjdHMucmVmZXJlbmNlW2xlbl0gKyBzdGF0ZS5yZWN0cy5yZWZlcmVuY2VbYXhpc10gLSBwb3BwZXJPZmZzZXRzW2F4aXNdIC0gc3RhdGUucmVjdHMucG9wcGVyW2xlbl07XG4gIHZhciBzdGFydERpZmYgPSBwb3BwZXJPZmZzZXRzW2F4aXNdIC0gc3RhdGUucmVjdHMucmVmZXJlbmNlW2F4aXNdO1xuICB2YXIgYXJyb3dPZmZzZXRQYXJlbnQgPSBnZXRPZmZzZXRQYXJlbnQoYXJyb3dFbGVtZW50KTtcbiAgdmFyIGNsaWVudFNpemUgPSBhcnJvd09mZnNldFBhcmVudCA/IGF4aXMgPT09ICd5JyA/IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudEhlaWdodCB8fCAwIDogYXJyb3dPZmZzZXRQYXJlbnQuY2xpZW50V2lkdGggfHwgMCA6IDA7XG4gIHZhciBjZW50ZXJUb1JlZmVyZW5jZSA9IGVuZERpZmYgLyAyIC0gc3RhcnREaWZmIC8gMjsgLy8gTWFrZSBzdXJlIHRoZSBhcnJvdyBkb2Vzbid0IG92ZXJmbG93IHRoZSBwb3BwZXIgaWYgdGhlIGNlbnRlciBwb2ludCBpc1xuICAvLyBvdXRzaWRlIG9mIHRoZSBwb3BwZXIgYm91bmRzXG5cbiAgdmFyIG1pbiA9IHBhZGRpbmdPYmplY3RbbWluUHJvcF07XG4gIHZhciBtYXggPSBjbGllbnRTaXplIC0gYXJyb3dSZWN0W2xlbl0gLSBwYWRkaW5nT2JqZWN0W21heFByb3BdO1xuICB2YXIgY2VudGVyID0gY2xpZW50U2l6ZSAvIDIgLSBhcnJvd1JlY3RbbGVuXSAvIDIgKyBjZW50ZXJUb1JlZmVyZW5jZTtcbiAgdmFyIG9mZnNldCA9IHdpdGhpbihtaW4sIGNlbnRlciwgbWF4KTsgLy8gUHJldmVudHMgYnJlYWtpbmcgc3ludGF4IGhpZ2hsaWdodGluZy4uLlxuXG4gIHZhciBheGlzUHJvcCA9IGF4aXM7XG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSAoX3N0YXRlJG1vZGlmaWVyc0RhdGEkID0ge30sIF9zdGF0ZSRtb2RpZmllcnNEYXRhJFtheGlzUHJvcF0gPSBvZmZzZXQsIF9zdGF0ZSRtb2RpZmllcnNEYXRhJC5jZW50ZXJPZmZzZXQgPSBvZmZzZXQgLSBjZW50ZXIsIF9zdGF0ZSRtb2RpZmllcnNEYXRhJCk7XG59XG5cbmZ1bmN0aW9uIGVmZmVjdChfcmVmMikge1xuICB2YXIgc3RhdGUgPSBfcmVmMi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmMi5vcHRpb25zO1xuICB2YXIgX29wdGlvbnMkZWxlbWVudCA9IG9wdGlvbnMuZWxlbWVudCxcbiAgICAgIGFycm93RWxlbWVudCA9IF9vcHRpb25zJGVsZW1lbnQgPT09IHZvaWQgMCA/ICdbZGF0YS1wb3BwZXItYXJyb3ddJyA6IF9vcHRpb25zJGVsZW1lbnQ7XG5cbiAgaWYgKGFycm93RWxlbWVudCA9PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9IC8vIENTUyBzZWxlY3RvclxuXG5cbiAgaWYgKHR5cGVvZiBhcnJvd0VsZW1lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgYXJyb3dFbGVtZW50ID0gc3RhdGUuZWxlbWVudHMucG9wcGVyLnF1ZXJ5U2VsZWN0b3IoYXJyb3dFbGVtZW50KTtcblxuICAgIGlmICghYXJyb3dFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgaWYgKCFjb250YWlucyhzdGF0ZS5lbGVtZW50cy5wb3BwZXIsIGFycm93RWxlbWVudCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0ZS5lbGVtZW50cy5hcnJvdyA9IGFycm93RWxlbWVudDtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2Fycm93JyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgZm46IGFycm93LFxuICBlZmZlY3Q6IGVmZmVjdCxcbiAgcmVxdWlyZXM6IFsncG9wcGVyT2Zmc2V0cyddLFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ3ByZXZlbnRPdmVyZmxvdyddXG59OyIsImltcG9ydCB7IHRvcCwgYm90dG9tLCBsZWZ0LCByaWdodCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuXG5mdW5jdGlvbiBnZXRTaWRlT2Zmc2V0cyhvdmVyZmxvdywgcmVjdCwgcHJldmVudGVkT2Zmc2V0cykge1xuICBpZiAocHJldmVudGVkT2Zmc2V0cyA9PT0gdm9pZCAwKSB7XG4gICAgcHJldmVudGVkT2Zmc2V0cyA9IHtcbiAgICAgIHg6IDAsXG4gICAgICB5OiAwXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdG9wOiBvdmVyZmxvdy50b3AgLSByZWN0LmhlaWdodCAtIHByZXZlbnRlZE9mZnNldHMueSxcbiAgICByaWdodDogb3ZlcmZsb3cucmlnaHQgLSByZWN0LndpZHRoICsgcHJldmVudGVkT2Zmc2V0cy54LFxuICAgIGJvdHRvbTogb3ZlcmZsb3cuYm90dG9tIC0gcmVjdC5oZWlnaHQgKyBwcmV2ZW50ZWRPZmZzZXRzLnksXG4gICAgbGVmdDogb3ZlcmZsb3cubGVmdCAtIHJlY3Qud2lkdGggLSBwcmV2ZW50ZWRPZmZzZXRzLnhcbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNBbnlTaWRlRnVsbHlDbGlwcGVkKG92ZXJmbG93KSB7XG4gIHJldHVybiBbdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0XS5zb21lKGZ1bmN0aW9uIChzaWRlKSB7XG4gICAgcmV0dXJuIG92ZXJmbG93W3NpZGVdID49IDA7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBoaWRlKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWU7XG4gIHZhciByZWZlcmVuY2VSZWN0ID0gc3RhdGUucmVjdHMucmVmZXJlbmNlO1xuICB2YXIgcG9wcGVyUmVjdCA9IHN0YXRlLnJlY3RzLnBvcHBlcjtcbiAgdmFyIHByZXZlbnRlZE9mZnNldHMgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLnByZXZlbnRPdmVyZmxvdztcbiAgdmFyIHJlZmVyZW5jZU92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICBlbGVtZW50Q29udGV4dDogJ3JlZmVyZW5jZSdcbiAgfSk7XG4gIHZhciBwb3BwZXJBbHRPdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgYWx0Qm91bmRhcnk6IHRydWVcbiAgfSk7XG4gIHZhciByZWZlcmVuY2VDbGlwcGluZ09mZnNldHMgPSBnZXRTaWRlT2Zmc2V0cyhyZWZlcmVuY2VPdmVyZmxvdywgcmVmZXJlbmNlUmVjdCk7XG4gIHZhciBwb3BwZXJFc2NhcGVPZmZzZXRzID0gZ2V0U2lkZU9mZnNldHMocG9wcGVyQWx0T3ZlcmZsb3csIHBvcHBlclJlY3QsIHByZXZlbnRlZE9mZnNldHMpO1xuICB2YXIgaXNSZWZlcmVuY2VIaWRkZW4gPSBpc0FueVNpZGVGdWxseUNsaXBwZWQocmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzKTtcbiAgdmFyIGhhc1BvcHBlckVzY2FwZWQgPSBpc0FueVNpZGVGdWxseUNsaXBwZWQocG9wcGVyRXNjYXBlT2Zmc2V0cyk7XG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSB7XG4gICAgcmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzOiByZWZlcmVuY2VDbGlwcGluZ09mZnNldHMsXG4gICAgcG9wcGVyRXNjYXBlT2Zmc2V0czogcG9wcGVyRXNjYXBlT2Zmc2V0cyxcbiAgICBpc1JlZmVyZW5jZUhpZGRlbjogaXNSZWZlcmVuY2VIaWRkZW4sXG4gICAgaGFzUG9wcGVyRXNjYXBlZDogaGFzUG9wcGVyRXNjYXBlZFxuICB9O1xuICBzdGF0ZS5hdHRyaWJ1dGVzLnBvcHBlciA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmF0dHJpYnV0ZXMucG9wcGVyLCB7XG4gICAgJ2RhdGEtcG9wcGVyLXJlZmVyZW5jZS1oaWRkZW4nOiBpc1JlZmVyZW5jZUhpZGRlbixcbiAgICAnZGF0YS1wb3BwZXItZXNjYXBlZCc6IGhhc1BvcHBlckVzY2FwZWRcbiAgfSk7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdoaWRlJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgcmVxdWlyZXNJZkV4aXN0czogWydwcmV2ZW50T3ZlcmZsb3cnXSxcbiAgZm46IGhpZGVcbn07IiwiaW1wb3J0IHsgcG9wcGVyR2VuZXJhdG9yLCBkZXRlY3RPdmVyZmxvdyB9IGZyb20gXCIuL2NyZWF0ZVBvcHBlci5qc1wiO1xuaW1wb3J0IGV2ZW50TGlzdGVuZXJzIGZyb20gXCIuL21vZGlmaWVycy9ldmVudExpc3RlbmVycy5qc1wiO1xuaW1wb3J0IHBvcHBlck9mZnNldHMgZnJvbSBcIi4vbW9kaWZpZXJzL3BvcHBlck9mZnNldHMuanNcIjtcbmltcG9ydCBjb21wdXRlU3R5bGVzIGZyb20gXCIuL21vZGlmaWVycy9jb21wdXRlU3R5bGVzLmpzXCI7XG5pbXBvcnQgYXBwbHlTdHlsZXMgZnJvbSBcIi4vbW9kaWZpZXJzL2FwcGx5U3R5bGVzLmpzXCI7XG5pbXBvcnQgb2Zmc2V0IGZyb20gXCIuL21vZGlmaWVycy9vZmZzZXQuanNcIjtcbmltcG9ydCBmbGlwIGZyb20gXCIuL21vZGlmaWVycy9mbGlwLmpzXCI7XG5pbXBvcnQgcHJldmVudE92ZXJmbG93IGZyb20gXCIuL21vZGlmaWVycy9wcmV2ZW50T3ZlcmZsb3cuanNcIjtcbmltcG9ydCBhcnJvdyBmcm9tIFwiLi9tb2RpZmllcnMvYXJyb3cuanNcIjtcbmltcG9ydCBoaWRlIGZyb20gXCIuL21vZGlmaWVycy9oaWRlLmpzXCI7XG52YXIgZGVmYXVsdE1vZGlmaWVycyA9IFtldmVudExpc3RlbmVycywgcG9wcGVyT2Zmc2V0cywgY29tcHV0ZVN0eWxlcywgYXBwbHlTdHlsZXMsIG9mZnNldCwgZmxpcCwgcHJldmVudE92ZXJmbG93LCBhcnJvdywgaGlkZV07XG52YXIgY3JlYXRlUG9wcGVyID0gLyojX19QVVJFX18qL3BvcHBlckdlbmVyYXRvcih7XG4gIGRlZmF1bHRNb2RpZmllcnM6IGRlZmF1bHRNb2RpZmllcnNcbn0pOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IGNyZWF0ZVBvcHBlciwgcG9wcGVyR2VuZXJhdG9yLCBkZWZhdWx0TW9kaWZpZXJzLCBkZXRlY3RPdmVyZmxvdyB9OyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IGNyZWF0ZVBvcHBlciBhcyBjcmVhdGVQb3BwZXJMaXRlIH0gZnJvbSBcIi4vcG9wcGVyLWxpdGUuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgKiBmcm9tIFwiLi9tb2RpZmllcnMvaW5kZXguanNcIjsiLCJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBvcHBlclV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpUG9wcGVyJywgc2xvdCk7XG59XG5jb25zdCBwb3BwZXJDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpUG9wcGVyJywgWydyb290J10pO1xuZXhwb3J0IGRlZmF1bHQgcG9wcGVyQ2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhbmNob3JFbFwiLCBcImNoaWxkcmVuXCIsIFwiZGlyZWN0aW9uXCIsIFwiZGlzYWJsZVBvcnRhbFwiLCBcIm1vZGlmaWVyc1wiLCBcIm9wZW5cIiwgXCJwbGFjZW1lbnRcIiwgXCJwb3BwZXJPcHRpb25zXCIsIFwicG9wcGVyUmVmXCIsIFwic2xvdFByb3BzXCIsIFwic2xvdHNcIiwgXCJUcmFuc2l0aW9uUHJvcHNcIiwgXCJvd25lclN0YXRlXCJdLFxuICBfZXhjbHVkZWQyID0gW1wiYW5jaG9yRWxcIiwgXCJjaGlsZHJlblwiLCBcImNvbnRhaW5lclwiLCBcImRpcmVjdGlvblwiLCBcImRpc2FibGVQb3J0YWxcIiwgXCJrZWVwTW91bnRlZFwiLCBcIm1vZGlmaWVyc1wiLCBcIm9wZW5cIiwgXCJwbGFjZW1lbnRcIiwgXCJwb3BwZXJPcHRpb25zXCIsIFwicG9wcGVyUmVmXCIsIFwic3R5bGVcIiwgXCJ0cmFuc2l0aW9uXCIsIFwic2xvdFByb3BzXCIsIFwic2xvdHNcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjaGFpblByb3BUeXBlcywgSFRNTEVsZW1lbnRUeXBlLCByZWZUeXBlLCB1bnN0YWJsZV9vd25lckRvY3VtZW50IGFzIG93bmVyRG9jdW1lbnQsIHVuc3RhYmxlX3VzZUVuaGFuY2VkRWZmZWN0IGFzIHVzZUVuaGFuY2VkRWZmZWN0LCB1bnN0YWJsZV91c2VGb3JrUmVmIGFzIHVzZUZvcmtSZWYgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCB7IGNyZWF0ZVBvcHBlciB9IGZyb20gJ0Bwb3BwZXJqcy9jb3JlJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgdXNlU2xvdFByb3BzIGZyb20gJ0BtdWkvdXRpbHMvdXNlU2xvdFByb3BzJztcbmltcG9ydCBQb3J0YWwgZnJvbSAnLi4vUG9ydGFsJztcbmltcG9ydCB7IGdldFBvcHBlclV0aWxpdHlDbGFzcyB9IGZyb20gJy4vcG9wcGVyQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZnVuY3Rpb24gZmxpcFBsYWNlbWVudChwbGFjZW1lbnQsIGRpcmVjdGlvbikge1xuICBpZiAoZGlyZWN0aW9uID09PSAnbHRyJykge1xuICAgIHJldHVybiBwbGFjZW1lbnQ7XG4gIH1cbiAgc3dpdGNoIChwbGFjZW1lbnQpIHtcbiAgICBjYXNlICdib3R0b20tZW5kJzpcbiAgICAgIHJldHVybiAnYm90dG9tLXN0YXJ0JztcbiAgICBjYXNlICdib3R0b20tc3RhcnQnOlxuICAgICAgcmV0dXJuICdib3R0b20tZW5kJztcbiAgICBjYXNlICd0b3AtZW5kJzpcbiAgICAgIHJldHVybiAndG9wLXN0YXJ0JztcbiAgICBjYXNlICd0b3Atc3RhcnQnOlxuICAgICAgcmV0dXJuICd0b3AtZW5kJztcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHBsYWNlbWVudDtcbiAgfVxufVxuZnVuY3Rpb24gcmVzb2x2ZUFuY2hvckVsKGFuY2hvckVsKSB7XG4gIHJldHVybiB0eXBlb2YgYW5jaG9yRWwgPT09ICdmdW5jdGlvbicgPyBhbmNob3JFbCgpIDogYW5jaG9yRWw7XG59XG5mdW5jdGlvbiBpc0hUTUxFbGVtZW50KGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQubm9kZVR5cGUgIT09IHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGlzVmlydHVhbEVsZW1lbnQoZWxlbWVudCkge1xuICByZXR1cm4gIWlzSFRNTEVsZW1lbnQoZWxlbWVudCk7XG59XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3Nlc1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290J11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRQb3BwZXJVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmNvbnN0IGRlZmF1bHRQb3BwZXJPcHRpb25zID0ge307XG5jb25zdCBQb3BwZXJUb29sdGlwID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gUG9wcGVyVG9vbHRpcChwcm9wcywgZm9yd2FyZGVkUmVmKSB7XG4gIHZhciBfc2xvdHMkcm9vdDtcbiAgY29uc3Qge1xuICAgICAgYW5jaG9yRWwsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGRpcmVjdGlvbixcbiAgICAgIGRpc2FibGVQb3J0YWwsXG4gICAgICBtb2RpZmllcnMsXG4gICAgICBvcGVuLFxuICAgICAgcGxhY2VtZW50OiBpbml0aWFsUGxhY2VtZW50LFxuICAgICAgcG9wcGVyT3B0aW9ucyxcbiAgICAgIHBvcHBlclJlZjogcG9wcGVyUmVmUHJvcCxcbiAgICAgIHNsb3RQcm9wcyA9IHt9LFxuICAgICAgc2xvdHMgPSB7fSxcbiAgICAgIFRyYW5zaXRpb25Qcm9wc1xuICAgICAgLy8gQHRzLWlnbm9yZSBpbnRlcm5hbCBsb2dpY1xuICAgICAgLy8gcHJldmVudCBmcm9tIHNwcmVhZGluZyB0byBET00sIGl0IGNhbiBjb21lIGZyb20gdGhlIHBhcmVudCBjb21wb25lbnQgZS5nLiBTZWxlY3QuXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHRvb2x0aXBSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IG93blJlZiA9IHVzZUZvcmtSZWYodG9vbHRpcFJlZiwgZm9yd2FyZGVkUmVmKTtcbiAgY29uc3QgcG9wcGVyUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBoYW5kbGVQb3BwZXJSZWYgPSB1c2VGb3JrUmVmKHBvcHBlclJlZiwgcG9wcGVyUmVmUHJvcCk7XG4gIGNvbnN0IGhhbmRsZVBvcHBlclJlZlJlZiA9IFJlYWN0LnVzZVJlZihoYW5kbGVQb3BwZXJSZWYpO1xuICB1c2VFbmhhbmNlZEVmZmVjdCgoKSA9PiB7XG4gICAgaGFuZGxlUG9wcGVyUmVmUmVmLmN1cnJlbnQgPSBoYW5kbGVQb3BwZXJSZWY7XG4gIH0sIFtoYW5kbGVQb3BwZXJSZWZdKTtcbiAgUmVhY3QudXNlSW1wZXJhdGl2ZUhhbmRsZShwb3BwZXJSZWZQcm9wLCAoKSA9PiBwb3BwZXJSZWYuY3VycmVudCwgW10pO1xuICBjb25zdCBydGxQbGFjZW1lbnQgPSBmbGlwUGxhY2VtZW50KGluaXRpYWxQbGFjZW1lbnQsIGRpcmVjdGlvbik7XG4gIC8qKlxuICAgKiBwbGFjZW1lbnQgaW5pdGlhbGl6ZWQgZnJvbSBwcm9wIGJ1dCBjYW4gY2hhbmdlIGR1cmluZyBsaWZldGltZSBpZiBtb2RpZmllcnMuZmxpcC5cbiAgICogbW9kaWZpZXJzLmZsaXAgaXMgZXNzZW50aWFsbHkgYSBmbGlwIGZvciBjb250cm9sbGVkL3VuY29udHJvbGxlZCBiZWhhdmlvclxuICAgKi9cbiAgY29uc3QgW3BsYWNlbWVudCwgc2V0UGxhY2VtZW50XSA9IFJlYWN0LnVzZVN0YXRlKHJ0bFBsYWNlbWVudCk7XG4gIGNvbnN0IFtyZXNvbHZlZEFuY2hvckVsZW1lbnQsIHNldFJlc29sdmVkQW5jaG9yRWxlbWVudF0gPSBSZWFjdC51c2VTdGF0ZShyZXNvbHZlQW5jaG9yRWwoYW5jaG9yRWwpKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAocG9wcGVyUmVmLmN1cnJlbnQpIHtcbiAgICAgIHBvcHBlclJlZi5jdXJyZW50LmZvcmNlVXBkYXRlKCk7XG4gICAgfVxuICB9KTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoYW5jaG9yRWwpIHtcbiAgICAgIHNldFJlc29sdmVkQW5jaG9yRWxlbWVudChyZXNvbHZlQW5jaG9yRWwoYW5jaG9yRWwpKTtcbiAgICB9XG4gIH0sIFthbmNob3JFbF0pO1xuICB1c2VFbmhhbmNlZEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFyZXNvbHZlZEFuY2hvckVsZW1lbnQgfHwgIW9wZW4pIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IGhhbmRsZVBvcHBlclVwZGF0ZSA9IGRhdGEgPT4ge1xuICAgICAgc2V0UGxhY2VtZW50KGRhdGEucGxhY2VtZW50KTtcbiAgICB9O1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAocmVzb2x2ZWRBbmNob3JFbGVtZW50ICYmIGlzSFRNTEVsZW1lbnQocmVzb2x2ZWRBbmNob3JFbGVtZW50KSAmJiByZXNvbHZlZEFuY2hvckVsZW1lbnQubm9kZVR5cGUgPT09IDEpIHtcbiAgICAgICAgY29uc3QgYm94ID0gcmVzb2x2ZWRBbmNob3JFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICd0ZXN0JyAmJiBib3gudG9wID09PSAwICYmIGJveC5sZWZ0ID09PSAwICYmIGJveC5yaWdodCA9PT0gMCAmJiBib3guYm90dG9tID09PSAwKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFsnTVVJOiBUaGUgYGFuY2hvckVsYCBwcm9wIHByb3ZpZGVkIHRvIHRoZSBjb21wb25lbnQgaXMgaW52YWxpZC4nLCAnVGhlIGFuY2hvciBlbGVtZW50IHNob3VsZCBiZSBwYXJ0IG9mIHRoZSBkb2N1bWVudCBsYXlvdXQuJywgXCJNYWtlIHN1cmUgdGhlIGVsZW1lbnQgaXMgcHJlc2VudCBpbiB0aGUgZG9jdW1lbnQgb3IgdGhhdCBpdCdzIG5vdCBkaXNwbGF5IG5vbmUuXCJdLmpvaW4oJ1xcbicpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBsZXQgcG9wcGVyTW9kaWZpZXJzID0gW3tcbiAgICAgIG5hbWU6ICdwcmV2ZW50T3ZlcmZsb3cnLFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICBhbHRCb3VuZGFyeTogZGlzYWJsZVBvcnRhbFxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICdmbGlwJyxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgYWx0Qm91bmRhcnk6IGRpc2FibGVQb3J0YWxcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBuYW1lOiAnb25VcGRhdGUnLFxuICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgIHBoYXNlOiAnYWZ0ZXJXcml0ZScsXG4gICAgICBmbjogKHtcbiAgICAgICAgc3RhdGVcbiAgICAgIH0pID0+IHtcbiAgICAgICAgaGFuZGxlUG9wcGVyVXBkYXRlKHN0YXRlKTtcbiAgICAgIH1cbiAgICB9XTtcbiAgICBpZiAobW9kaWZpZXJzICE9IG51bGwpIHtcbiAgICAgIHBvcHBlck1vZGlmaWVycyA9IHBvcHBlck1vZGlmaWVycy5jb25jYXQobW9kaWZpZXJzKTtcbiAgICB9XG4gICAgaWYgKHBvcHBlck9wdGlvbnMgJiYgcG9wcGVyT3B0aW9ucy5tb2RpZmllcnMgIT0gbnVsbCkge1xuICAgICAgcG9wcGVyTW9kaWZpZXJzID0gcG9wcGVyTW9kaWZpZXJzLmNvbmNhdChwb3BwZXJPcHRpb25zLm1vZGlmaWVycyk7XG4gICAgfVxuICAgIGNvbnN0IHBvcHBlciA9IGNyZWF0ZVBvcHBlcihyZXNvbHZlZEFuY2hvckVsZW1lbnQsIHRvb2x0aXBSZWYuY3VycmVudCwgX2V4dGVuZHMoe1xuICAgICAgcGxhY2VtZW50OiBydGxQbGFjZW1lbnRcbiAgICB9LCBwb3BwZXJPcHRpb25zLCB7XG4gICAgICBtb2RpZmllcnM6IHBvcHBlck1vZGlmaWVyc1xuICAgIH0pKTtcbiAgICBoYW5kbGVQb3BwZXJSZWZSZWYuY3VycmVudChwb3BwZXIpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBwb3BwZXIuZGVzdHJveSgpO1xuICAgICAgaGFuZGxlUG9wcGVyUmVmUmVmLmN1cnJlbnQobnVsbCk7XG4gICAgfTtcbiAgfSwgW3Jlc29sdmVkQW5jaG9yRWxlbWVudCwgZGlzYWJsZVBvcnRhbCwgbW9kaWZpZXJzLCBvcGVuLCBwb3BwZXJPcHRpb25zLCBydGxQbGFjZW1lbnRdKTtcbiAgY29uc3QgY2hpbGRQcm9wcyA9IHtcbiAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudFxuICB9O1xuICBpZiAoVHJhbnNpdGlvblByb3BzICE9PSBudWxsKSB7XG4gICAgY2hpbGRQcm9wcy5UcmFuc2l0aW9uUHJvcHMgPSBUcmFuc2l0aW9uUHJvcHM7XG4gIH1cbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKHByb3BzKTtcbiAgY29uc3QgUm9vdCA9IChfc2xvdHMkcm9vdCA9IHNsb3RzLnJvb3QpICE9IG51bGwgPyBfc2xvdHMkcm9vdCA6ICdkaXYnO1xuICBjb25zdCByb290UHJvcHMgPSB1c2VTbG90UHJvcHMoe1xuICAgIGVsZW1lbnRUeXBlOiBSb290LFxuICAgIGV4dGVybmFsU2xvdFByb3BzOiBzbG90UHJvcHMucm9vdCxcbiAgICBleHRlcm5hbEZvcndhcmRlZFByb3BzOiBvdGhlcixcbiAgICBhZGRpdGlvbmFsUHJvcHM6IHtcbiAgICAgIHJvbGU6ICd0b29sdGlwJyxcbiAgICAgIHJlZjogb3duUmVmXG4gICAgfSxcbiAgICBvd25lclN0YXRlOiBwcm9wcyxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMucm9vdFxuICB9KTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFJvb3QsIF9leHRlbmRzKHt9LCByb290UHJvcHMsIHtcbiAgICBjaGlsZHJlbjogdHlwZW9mIGNoaWxkcmVuID09PSAnZnVuY3Rpb24nID8gY2hpbGRyZW4oY2hpbGRQcm9wcykgOiBjaGlsZHJlblxuICB9KSk7XG59KTtcblxuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5jb25zdCBQb3BwZXIgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBQb3BwZXIocHJvcHMsIGZvcndhcmRlZFJlZikge1xuICBjb25zdCB7XG4gICAgICBhbmNob3JFbCxcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY29udGFpbmVyOiBjb250YWluZXJQcm9wLFxuICAgICAgZGlyZWN0aW9uID0gJ2x0cicsXG4gICAgICBkaXNhYmxlUG9ydGFsID0gZmFsc2UsXG4gICAgICBrZWVwTW91bnRlZCA9IGZhbHNlLFxuICAgICAgbW9kaWZpZXJzLFxuICAgICAgb3BlbixcbiAgICAgIHBsYWNlbWVudCA9ICdib3R0b20nLFxuICAgICAgcG9wcGVyT3B0aW9ucyA9IGRlZmF1bHRQb3BwZXJPcHRpb25zLFxuICAgICAgcG9wcGVyUmVmLFxuICAgICAgc3R5bGUsXG4gICAgICB0cmFuc2l0aW9uID0gZmFsc2UsXG4gICAgICBzbG90UHJvcHMgPSB7fSxcbiAgICAgIHNsb3RzID0ge31cbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkMik7XG4gIGNvbnN0IFtleGl0ZWQsIHNldEV4aXRlZF0gPSBSZWFjdC51c2VTdGF0ZSh0cnVlKTtcbiAgY29uc3QgaGFuZGxlRW50ZXIgPSAoKSA9PiB7XG4gICAgc2V0RXhpdGVkKGZhbHNlKTtcbiAgfTtcbiAgY29uc3QgaGFuZGxlRXhpdGVkID0gKCkgPT4ge1xuICAgIHNldEV4aXRlZCh0cnVlKTtcbiAgfTtcbiAgaWYgKCFrZWVwTW91bnRlZCAmJiAhb3BlbiAmJiAoIXRyYW5zaXRpb24gfHwgZXhpdGVkKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gSWYgdGhlIGNvbnRhaW5lciBwcm9wIGlzIHByb3ZpZGVkLCB1c2UgdGhhdFxuICAvLyBJZiB0aGUgYW5jaG9yRWwgcHJvcCBpcyBwcm92aWRlZCwgdXNlIGl0cyBwYXJlbnQgYm9keSBlbGVtZW50IGFzIHRoZSBjb250YWluZXJcbiAgLy8gSWYgbmVpdGhlciBhcmUgcHJvdmlkZWQgbGV0IHRoZSBNb2RhbCB0YWtlIGNhcmUgb2YgY2hvb3NpbmcgdGhlIGNvbnRhaW5lclxuICBsZXQgY29udGFpbmVyO1xuICBpZiAoY29udGFpbmVyUHJvcCkge1xuICAgIGNvbnRhaW5lciA9IGNvbnRhaW5lclByb3A7XG4gIH0gZWxzZSBpZiAoYW5jaG9yRWwpIHtcbiAgICBjb25zdCByZXNvbHZlZEFuY2hvckVsID0gcmVzb2x2ZUFuY2hvckVsKGFuY2hvckVsKTtcbiAgICBjb250YWluZXIgPSByZXNvbHZlZEFuY2hvckVsICYmIGlzSFRNTEVsZW1lbnQocmVzb2x2ZWRBbmNob3JFbCkgPyBvd25lckRvY3VtZW50KHJlc29sdmVkQW5jaG9yRWwpLmJvZHkgOiBvd25lckRvY3VtZW50KG51bGwpLmJvZHk7XG4gIH1cbiAgY29uc3QgZGlzcGxheSA9ICFvcGVuICYmIGtlZXBNb3VudGVkICYmICghdHJhbnNpdGlvbiB8fCBleGl0ZWQpID8gJ25vbmUnIDogdW5kZWZpbmVkO1xuICBjb25zdCB0cmFuc2l0aW9uUHJvcHMgPSB0cmFuc2l0aW9uID8ge1xuICAgIGluOiBvcGVuLFxuICAgIG9uRW50ZXI6IGhhbmRsZUVudGVyLFxuICAgIG9uRXhpdGVkOiBoYW5kbGVFeGl0ZWRcbiAgfSA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFBvcnRhbCwge1xuICAgIGRpc2FibGVQb3J0YWw6IGRpc2FibGVQb3J0YWwsXG4gICAgY29udGFpbmVyOiBjb250YWluZXIsXG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KFBvcHBlclRvb2x0aXAsIF9leHRlbmRzKHtcbiAgICAgIGFuY2hvckVsOiBhbmNob3JFbCxcbiAgICAgIGRpcmVjdGlvbjogZGlyZWN0aW9uLFxuICAgICAgZGlzYWJsZVBvcnRhbDogZGlzYWJsZVBvcnRhbCxcbiAgICAgIG1vZGlmaWVyczogbW9kaWZpZXJzLFxuICAgICAgcmVmOiBmb3J3YXJkZWRSZWYsXG4gICAgICBvcGVuOiB0cmFuc2l0aW9uID8gIWV4aXRlZCA6IG9wZW4sXG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIHBvcHBlck9wdGlvbnM6IHBvcHBlck9wdGlvbnMsXG4gICAgICBwb3BwZXJSZWY6IHBvcHBlclJlZixcbiAgICAgIHNsb3RQcm9wczogc2xvdFByb3BzLFxuICAgICAgc2xvdHM6IHNsb3RzXG4gICAgfSwgb3RoZXIsIHtcbiAgICAgIHN0eWxlOiBfZXh0ZW5kcyh7XG4gICAgICAgIC8vIFByZXZlbnRzIHNjcm9sbCBpc3N1ZSwgd2FpdGluZyBmb3IgUG9wcGVyLmpzIHRvIGFkZCB0aGlzIHN0eWxlIG9uY2UgaW5pdGlhdGVkLlxuICAgICAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICAgICAgLy8gRml4IFBvcHBlci5qcyBkaXNwbGF5IGlzc3VlXG4gICAgICAgIHRvcDogMCxcbiAgICAgICAgbGVmdDogMCxcbiAgICAgICAgZGlzcGxheVxuICAgICAgfSwgc3R5bGUpLFxuICAgICAgVHJhbnNpdGlvblByb3BzOiB0cmFuc2l0aW9uUHJvcHMsXG4gICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICB9KSlcbiAgfSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFBvcHBlci5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFdhcm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIOKUglxuICAvLyDilIIgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIFR5cGVTY3JpcHQgdHlwZXMgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiDilIJcbiAgLy8g4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gIC8qKlxuICAgKiBBbiBIVE1MIGVsZW1lbnQsIFt2aXJ0dWFsRWxlbWVudF0oaHR0cHM6Ly9wb3BwZXIuanMub3JnL2RvY3MvdjIvdmlydHVhbC1lbGVtZW50cy8pLFxuICAgKiBvciBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBlaXRoZXIuXG4gICAqIEl0J3MgdXNlZCB0byBzZXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBwb3BwZXIuXG4gICAqIFRoZSByZXR1cm4gdmFsdWUgd2lsbCBwYXNzZWQgYXMgdGhlIHJlZmVyZW5jZSBvYmplY3Qgb2YgdGhlIFBvcHBlciBpbnN0YW5jZS5cbiAgICovXG4gIGFuY2hvckVsOiBjaGFpblByb3BUeXBlcyhQcm9wVHlwZXMub25lT2ZUeXBlKFtIVE1MRWxlbWVudFR5cGUsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5mdW5jXSksIHByb3BzID0+IHtcbiAgICBpZiAocHJvcHMub3Blbikge1xuICAgICAgY29uc3QgcmVzb2x2ZWRBbmNob3JFbCA9IHJlc29sdmVBbmNob3JFbChwcm9wcy5hbmNob3JFbCk7XG4gICAgICBpZiAocmVzb2x2ZWRBbmNob3JFbCAmJiBpc0hUTUxFbGVtZW50KHJlc29sdmVkQW5jaG9yRWwpICYmIHJlc29sdmVkQW5jaG9yRWwubm9kZVR5cGUgPT09IDEpIHtcbiAgICAgICAgY29uc3QgYm94ID0gcmVzb2x2ZWRBbmNob3JFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAndGVzdCcgJiYgYm94LnRvcCA9PT0gMCAmJiBib3gubGVmdCA9PT0gMCAmJiBib3gucmlnaHQgPT09IDAgJiYgYm94LmJvdHRvbSA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoWydNVUk6IFRoZSBgYW5jaG9yRWxgIHByb3AgcHJvdmlkZWQgdG8gdGhlIGNvbXBvbmVudCBpcyBpbnZhbGlkLicsICdUaGUgYW5jaG9yIGVsZW1lbnQgc2hvdWxkIGJlIHBhcnQgb2YgdGhlIGRvY3VtZW50IGxheW91dC4nLCBcIk1ha2Ugc3VyZSB0aGUgZWxlbWVudCBpcyBwcmVzZW50IGluIHRoZSBkb2N1bWVudCBvciB0aGF0IGl0J3Mgbm90IGRpc3BsYXkgbm9uZS5cIl0uam9pbignXFxuJykpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFyZXNvbHZlZEFuY2hvckVsIHx8IHR5cGVvZiByZXNvbHZlZEFuY2hvckVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCAhPT0gJ2Z1bmN0aW9uJyB8fCBpc1ZpcnR1YWxFbGVtZW50KHJlc29sdmVkQW5jaG9yRWwpICYmIHJlc29sdmVkQW5jaG9yRWwuY29udGV4dEVsZW1lbnQgIT0gbnVsbCAmJiByZXNvbHZlZEFuY2hvckVsLmNvbnRleHRFbGVtZW50Lm5vZGVUeXBlICE9PSAxKSB7XG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IoWydNVUk6IFRoZSBgYW5jaG9yRWxgIHByb3AgcHJvdmlkZWQgdG8gdGhlIGNvbXBvbmVudCBpcyBpbnZhbGlkLicsICdJdCBzaG91bGQgYmUgYW4gSFRNTCBlbGVtZW50IGluc3RhbmNlIG9yIGEgdmlydHVhbEVsZW1lbnQgJywgJyhodHRwczovL3BvcHBlci5qcy5vcmcvZG9jcy92Mi92aXJ0dWFsLWVsZW1lbnRzLykuJ10uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSksXG4gIC8qKlxuICAgKiBQb3BwZXIgcmVuZGVyIGZ1bmN0aW9uIG9yIG5vZGUuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMubm9kZSwgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgLyoqXG4gICAqIEFuIEhUTUwgZWxlbWVudCBvciBmdW5jdGlvbiB0aGF0IHJldHVybnMgb25lLlxuICAgKiBUaGUgYGNvbnRhaW5lcmAgd2lsbCBoYXZlIHRoZSBwb3J0YWwgY2hpbGRyZW4gYXBwZW5kZWQgdG8gaXQuXG4gICAqXG4gICAqIFlvdSBjYW4gYWxzbyBwcm92aWRlIGEgY2FsbGJhY2ssIHdoaWNoIGlzIGNhbGxlZCBpbiBhIFJlYWN0IGxheW91dCBlZmZlY3QuXG4gICAqIFRoaXMgbGV0cyB5b3Ugc2V0IHRoZSBjb250YWluZXIgZnJvbSBhIHJlZiwgYW5kIGFsc28gbWFrZXMgc2VydmVyLXNpZGUgcmVuZGVyaW5nIHBvc3NpYmxlLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCBpdCB1c2VzIHRoZSBib2R5IG9mIHRoZSB0b3AtbGV2ZWwgZG9jdW1lbnQgb2JqZWN0LFxuICAgKiBzbyBpdCdzIHNpbXBseSBgZG9jdW1lbnQuYm9keWAgbW9zdCBvZiB0aGUgdGltZS5cbiAgICovXG4gIGNvbnRhaW5lcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtIVE1MRWxlbWVudFR5cGUsIFByb3BUeXBlcy5mdW5jXSksXG4gIC8qKlxuICAgKiBEaXJlY3Rpb24gb2YgdGhlIHRleHQuXG4gICAqIEBkZWZhdWx0ICdsdHInXG4gICAqL1xuICBkaXJlY3Rpb246IFByb3BUeXBlcy5vbmVPZihbJ2x0cicsICdydGwnXSksXG4gIC8qKlxuICAgKiBUaGUgYGNoaWxkcmVuYCB3aWxsIGJlIHVuZGVyIHRoZSBET00gaGllcmFyY2h5IG9mIHRoZSBwYXJlbnQgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVBvcnRhbDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBBbHdheXMga2VlcCB0aGUgY2hpbGRyZW4gaW4gdGhlIERPTS5cbiAgICogVGhpcyBwcm9wIGNhbiBiZSB1c2VmdWwgaW4gU0VPIHNpdHVhdGlvbiBvclxuICAgKiB3aGVuIHlvdSB3YW50IHRvIG1heGltaXplIHRoZSByZXNwb25zaXZlbmVzcyBvZiB0aGUgUG9wcGVyLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAga2VlcE1vdW50ZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogUG9wcGVyLmpzIGlzIGJhc2VkIG9uIGEgXCJwbHVnaW4tbGlrZVwiIGFyY2hpdGVjdHVyZSxcbiAgICogbW9zdCBvZiBpdHMgZmVhdHVyZXMgYXJlIGZ1bGx5IGVuY2Fwc3VsYXRlZCBcIm1vZGlmaWVyc1wiLlxuICAgKlxuICAgKiBBIG1vZGlmaWVyIGlzIGEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgZWFjaCB0aW1lIFBvcHBlci5qcyBuZWVkcyB0b1xuICAgKiBjb21wdXRlIHRoZSBwb3NpdGlvbiBvZiB0aGUgcG9wcGVyLlxuICAgKiBGb3IgdGhpcyByZWFzb24sIG1vZGlmaWVycyBzaG91bGQgYmUgdmVyeSBwZXJmb3JtYW50IHRvIGF2b2lkIGJvdHRsZW5lY2tzLlxuICAgKiBUbyBsZWFybiBob3cgdG8gY3JlYXRlIGEgbW9kaWZpZXIsIFtyZWFkIHRoZSBtb2RpZmllcnMgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9wb3BwZXIuanMub3JnL2RvY3MvdjIvbW9kaWZpZXJzLykuXG4gICAqL1xuICBtb2RpZmllcnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgZGF0YTogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBlZmZlY3Q6IFByb3BUeXBlcy5mdW5jLFxuICAgIGVuYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIGZuOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBuYW1lOiBQcm9wVHlwZXMuYW55LFxuICAgIG9wdGlvbnM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgcGhhc2U6IFByb3BUeXBlcy5vbmVPZihbJ2FmdGVyTWFpbicsICdhZnRlclJlYWQnLCAnYWZ0ZXJXcml0ZScsICdiZWZvcmVNYWluJywgJ2JlZm9yZVJlYWQnLCAnYmVmb3JlV3JpdGUnLCAnbWFpbicsICdyZWFkJywgJ3dyaXRlJ10pLFxuICAgIHJlcXVpcmVzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc3RyaW5nKSxcbiAgICByZXF1aXJlc0lmRXhpc3RzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc3RyaW5nKVxuICB9KSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgc2hvd24uXG4gICAqL1xuICBvcGVuOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAvKipcbiAgICogUG9wcGVyIHBsYWNlbWVudC5cbiAgICogQGRlZmF1bHQgJ2JvdHRvbSdcbiAgICovXG4gIHBsYWNlbWVudDogUHJvcFR5cGVzLm9uZU9mKFsnYXV0by1lbmQnLCAnYXV0by1zdGFydCcsICdhdXRvJywgJ2JvdHRvbS1lbmQnLCAnYm90dG9tLXN0YXJ0JywgJ2JvdHRvbScsICdsZWZ0LWVuZCcsICdsZWZ0LXN0YXJ0JywgJ2xlZnQnLCAncmlnaHQtZW5kJywgJ3JpZ2h0LXN0YXJ0JywgJ3JpZ2h0JywgJ3RvcC1lbmQnLCAndG9wLXN0YXJ0JywgJ3RvcCddKSxcbiAgLyoqXG4gICAqIE9wdGlvbnMgcHJvdmlkZWQgdG8gdGhlIFtgUG9wcGVyLmpzYF0oaHR0cHM6Ly9wb3BwZXIuanMub3JnL2RvY3MvdjIvY29uc3RydWN0b3JzLyNvcHRpb25zKSBpbnN0YW5jZS5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHBvcHBlck9wdGlvbnM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgbW9kaWZpZXJzOiBQcm9wVHlwZXMuYXJyYXksXG4gICAgb25GaXJzdFVwZGF0ZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgcGxhY2VtZW50OiBQcm9wVHlwZXMub25lT2YoWydhdXRvLWVuZCcsICdhdXRvLXN0YXJ0JywgJ2F1dG8nLCAnYm90dG9tLWVuZCcsICdib3R0b20tc3RhcnQnLCAnYm90dG9tJywgJ2xlZnQtZW5kJywgJ2xlZnQtc3RhcnQnLCAnbGVmdCcsICdyaWdodC1lbmQnLCAncmlnaHQtc3RhcnQnLCAncmlnaHQnLCAndG9wLWVuZCcsICd0b3Atc3RhcnQnLCAndG9wJ10pLFxuICAgIHN0cmF0ZWd5OiBQcm9wVHlwZXMub25lT2YoWydhYnNvbHV0ZScsICdmaXhlZCddKVxuICB9KSxcbiAgLyoqXG4gICAqIEEgcmVmIHRoYXQgcG9pbnRzIHRvIHRoZSB1c2VkIHBvcHBlciBpbnN0YW5jZS5cbiAgICovXG4gIHBvcHBlclJlZjogcmVmVHlwZSxcbiAgLyoqXG4gICAqIFRoZSBwcm9wcyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlIHRoZSBQb3BwZXIuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90UHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgcm9vdDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUgdGhlIFBvcHBlci5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHNsb3RzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIHJvb3Q6IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcbiAgLyoqXG4gICAqIEhlbHAgc3VwcG9ydGluZyBhIHJlYWN0LXRyYW5zaXRpb24tZ3JvdXAvVHJhbnNpdGlvbiBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICB0cmFuc2l0aW9uOiBQcm9wVHlwZXMuYm9vbFxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IFBvcHBlcjsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhbmNob3JFbFwiLCBcImNvbXBvbmVudFwiLCBcImNvbXBvbmVudHNcIiwgXCJjb21wb25lbnRzUHJvcHNcIiwgXCJjb250YWluZXJcIiwgXCJkaXNhYmxlUG9ydGFsXCIsIFwia2VlcE1vdW50ZWRcIiwgXCJtb2RpZmllcnNcIiwgXCJvcGVuXCIsIFwicGxhY2VtZW50XCIsIFwicG9wcGVyT3B0aW9uc1wiLCBcInBvcHBlclJlZlwiLCBcInRyYW5zaXRpb25cIiwgXCJzbG90c1wiLCBcInNsb3RQcm9wc1wiXTtcbmltcG9ydCB1c2VUaGVtZSBmcm9tICdAbXVpL3N5c3RlbS91c2VUaGVtZVdpdGhvdXREZWZhdWx0JztcbmltcG9ydCByZWZUeXBlIGZyb20gJ0BtdWkvdXRpbHMvcmVmVHlwZSc7XG5pbXBvcnQgSFRNTEVsZW1lbnRUeXBlIGZyb20gJ0BtdWkvdXRpbHMvSFRNTEVsZW1lbnRUeXBlJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQmFzZVBvcHBlciBmcm9tICcuL0Jhc2VQb3BwZXInO1xuaW1wb3J0IHsgc3R5bGVkIH0gZnJvbSAnLi4vc3R5bGVzJztcbmltcG9ydCB7IHVzZURlZmF1bHRQcm9wcyB9IGZyb20gJy4uL0RlZmF1bHRQcm9wc1Byb3ZpZGVyJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCBQb3BwZXJSb290ID0gc3R5bGVkKEJhc2VQb3BwZXIsIHtcbiAgbmFtZTogJ011aVBvcHBlcicsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMucm9vdFxufSkoe30pO1xuXG4vKipcbiAqXG4gKiBEZW1vczpcbiAqXG4gKiAtIFtBdXRvY29tcGxldGVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9yZWFjdC1hdXRvY29tcGxldGUvKVxuICogLSBbTWVudV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL3JlYWN0LW1lbnUvKVxuICogLSBbUG9wcGVyXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvcmVhY3QtcG9wcGVyLylcbiAqXG4gKiBBUEk6XG4gKlxuICogLSBbUG9wcGVyIEFQSV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2FwaS9wb3BwZXIvKVxuICovXG5jb25zdCBQb3BwZXIgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBQb3BwZXIoaW5Qcm9wcywgcmVmKSB7XG4gIHZhciBfc2xvdHMkcm9vdDtcbiAgY29uc3QgdGhlbWUgPSB1c2VUaGVtZSgpO1xuICBjb25zdCBwcm9wcyA9IHVzZURlZmF1bHRQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aVBvcHBlcidcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGFuY2hvckVsLFxuICAgICAgY29tcG9uZW50LFxuICAgICAgY29tcG9uZW50cyxcbiAgICAgIGNvbXBvbmVudHNQcm9wcyxcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIGRpc2FibGVQb3J0YWwsXG4gICAgICBrZWVwTW91bnRlZCxcbiAgICAgIG1vZGlmaWVycyxcbiAgICAgIG9wZW4sXG4gICAgICBwbGFjZW1lbnQsXG4gICAgICBwb3BwZXJPcHRpb25zLFxuICAgICAgcG9wcGVyUmVmLFxuICAgICAgdHJhbnNpdGlvbixcbiAgICAgIHNsb3RzLFxuICAgICAgc2xvdFByb3BzXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IFJvb3RDb21wb25lbnQgPSAoX3Nsb3RzJHJvb3QgPSBzbG90cyA9PSBudWxsID8gdm9pZCAwIDogc2xvdHMucm9vdCkgIT0gbnVsbCA/IF9zbG90cyRyb290IDogY29tcG9uZW50cyA9PSBudWxsID8gdm9pZCAwIDogY29tcG9uZW50cy5Sb290O1xuICBjb25zdCBvdGhlclByb3BzID0gX2V4dGVuZHMoe1xuICAgIGFuY2hvckVsLFxuICAgIGNvbnRhaW5lcixcbiAgICBkaXNhYmxlUG9ydGFsLFxuICAgIGtlZXBNb3VudGVkLFxuICAgIG1vZGlmaWVycyxcbiAgICBvcGVuLFxuICAgIHBsYWNlbWVudCxcbiAgICBwb3BwZXJPcHRpb25zLFxuICAgIHBvcHBlclJlZixcbiAgICB0cmFuc2l0aW9uXG4gIH0sIG90aGVyKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFBvcHBlclJvb3QsIF9leHRlbmRzKHtcbiAgICBhczogY29tcG9uZW50LFxuICAgIGRpcmVjdGlvbjogdGhlbWUgPT0gbnVsbCA/IHZvaWQgMCA6IHRoZW1lLmRpcmVjdGlvbixcbiAgICBzbG90czoge1xuICAgICAgcm9vdDogUm9vdENvbXBvbmVudFxuICAgIH0sXG4gICAgc2xvdFByb3BzOiBzbG90UHJvcHMgIT0gbnVsbCA/IHNsb3RQcm9wcyA6IGNvbXBvbmVudHNQcm9wc1xuICB9LCBvdGhlclByb3BzLCB7XG4gICAgcmVmOiByZWZcbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBQb3BwZXIucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBUeXBlU2NyaXB0IHR5cGVzIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4g4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogQW4gSFRNTCBlbGVtZW50LCBbdmlydHVhbEVsZW1lbnRdKGh0dHBzOi8vcG9wcGVyLmpzLm9yZy9kb2NzL3YyL3ZpcnR1YWwtZWxlbWVudHMvKSxcbiAgICogb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgZWl0aGVyLlxuICAgKiBJdCdzIHVzZWQgdG8gc2V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgcG9wcGVyLlxuICAgKiBUaGUgcmV0dXJuIHZhbHVlIHdpbGwgcGFzc2VkIGFzIHRoZSByZWZlcmVuY2Ugb2JqZWN0IG9mIHRoZSBQb3BwZXIgaW5zdGFuY2UuXG4gICAqL1xuICBhbmNob3JFbDogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtIVE1MRWxlbWVudFR5cGUsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5mdW5jXSksXG4gIC8qKlxuICAgKiBQb3BwZXIgcmVuZGVyIGZ1bmN0aW9uIG9yIG5vZGUuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMubm9kZSwgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZSB0aGUgUG9wcGVyLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBSb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgcHJvcHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZSB0aGUgUG9wcGVyLlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50c1Byb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIHJvb3Q6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSlcbiAgfSksXG4gIC8qKlxuICAgKiBBbiBIVE1MIGVsZW1lbnQgb3IgZnVuY3Rpb24gdGhhdCByZXR1cm5zIG9uZS5cbiAgICogVGhlIGBjb250YWluZXJgIHdpbGwgaGF2ZSB0aGUgcG9ydGFsIGNoaWxkcmVuIGFwcGVuZGVkIHRvIGl0LlxuICAgKlxuICAgKiBZb3UgY2FuIGFsc28gcHJvdmlkZSBhIGNhbGxiYWNrLCB3aGljaCBpcyBjYWxsZWQgaW4gYSBSZWFjdCBsYXlvdXQgZWZmZWN0LlxuICAgKiBUaGlzIGxldHMgeW91IHNldCB0aGUgY29udGFpbmVyIGZyb20gYSByZWYsIGFuZCBhbHNvIG1ha2VzIHNlcnZlci1zaWRlIHJlbmRlcmluZyBwb3NzaWJsZS5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgaXQgdXNlcyB0aGUgYm9keSBvZiB0aGUgdG9wLWxldmVsIGRvY3VtZW50IG9iamVjdCxcbiAgICogc28gaXQncyBzaW1wbHkgYGRvY3VtZW50LmJvZHlgIG1vc3Qgb2YgdGhlIHRpbWUuXG4gICAqL1xuICBjb250YWluZXI6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbSFRNTEVsZW1lbnRUeXBlLCBQcm9wVHlwZXMuZnVuY10pLFxuICAvKipcbiAgICogVGhlIGBjaGlsZHJlbmAgd2lsbCBiZSB1bmRlciB0aGUgRE9NIGhpZXJhcmNoeSBvZiB0aGUgcGFyZW50IGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVQb3J0YWw6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogQWx3YXlzIGtlZXAgdGhlIGNoaWxkcmVuIGluIHRoZSBET00uXG4gICAqIFRoaXMgcHJvcCBjYW4gYmUgdXNlZnVsIGluIFNFTyBzaXR1YXRpb24gb3JcbiAgICogd2hlbiB5b3Ugd2FudCB0byBtYXhpbWl6ZSB0aGUgcmVzcG9uc2l2ZW5lc3Mgb2YgdGhlIFBvcHBlci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGtlZXBNb3VudGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFBvcHBlci5qcyBpcyBiYXNlZCBvbiBhIFwicGx1Z2luLWxpa2VcIiBhcmNoaXRlY3R1cmUsXG4gICAqIG1vc3Qgb2YgaXRzIGZlYXR1cmVzIGFyZSBmdWxseSBlbmNhcHN1bGF0ZWQgXCJtb2RpZmllcnNcIi5cbiAgICpcbiAgICogQSBtb2RpZmllciBpcyBhIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIGVhY2ggdGltZSBQb3BwZXIuanMgbmVlZHMgdG9cbiAgICogY29tcHV0ZSB0aGUgcG9zaXRpb24gb2YgdGhlIHBvcHBlci5cbiAgICogRm9yIHRoaXMgcmVhc29uLCBtb2RpZmllcnMgc2hvdWxkIGJlIHZlcnkgcGVyZm9ybWFudCB0byBhdm9pZCBib3R0bGVuZWNrcy5cbiAgICogVG8gbGVhcm4gaG93IHRvIGNyZWF0ZSBhIG1vZGlmaWVyLCBbcmVhZCB0aGUgbW9kaWZpZXJzIGRvY3VtZW50YXRpb25dKGh0dHBzOi8vcG9wcGVyLmpzLm9yZy9kb2NzL3YyL21vZGlmaWVycy8pLlxuICAgKi9cbiAgbW9kaWZpZXJzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGRhdGE6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgZWZmZWN0OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBlbmFibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBmbjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgbmFtZTogUHJvcFR5cGVzLmFueSxcbiAgICBvcHRpb25zOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHBoYXNlOiBQcm9wVHlwZXMub25lT2YoWydhZnRlck1haW4nLCAnYWZ0ZXJSZWFkJywgJ2FmdGVyV3JpdGUnLCAnYmVmb3JlTWFpbicsICdiZWZvcmVSZWFkJywgJ2JlZm9yZVdyaXRlJywgJ21haW4nLCAncmVhZCcsICd3cml0ZSddKSxcbiAgICByZXF1aXJlczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyksXG4gICAgcmVxdWlyZXNJZkV4aXN0czogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZylcbiAgfSkpLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIHNob3duLlxuICAgKi9cbiAgb3BlbjogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAqIFBvcHBlciBwbGFjZW1lbnQuXG4gICAqIEBkZWZhdWx0ICdib3R0b20nXG4gICAqL1xuICBwbGFjZW1lbnQ6IFByb3BUeXBlcy5vbmVPZihbJ2F1dG8tZW5kJywgJ2F1dG8tc3RhcnQnLCAnYXV0bycsICdib3R0b20tZW5kJywgJ2JvdHRvbS1zdGFydCcsICdib3R0b20nLCAnbGVmdC1lbmQnLCAnbGVmdC1zdGFydCcsICdsZWZ0JywgJ3JpZ2h0LWVuZCcsICdyaWdodC1zdGFydCcsICdyaWdodCcsICd0b3AtZW5kJywgJ3RvcC1zdGFydCcsICd0b3AnXSksXG4gIC8qKlxuICAgKiBPcHRpb25zIHByb3ZpZGVkIHRvIHRoZSBbYFBvcHBlci5qc2BdKGh0dHBzOi8vcG9wcGVyLmpzLm9yZy9kb2NzL3YyL2NvbnN0cnVjdG9ycy8jb3B0aW9ucykgaW5zdGFuY2UuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBwb3BwZXJPcHRpb25zOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIG1vZGlmaWVyczogUHJvcFR5cGVzLmFycmF5LFxuICAgIG9uRmlyc3RVcGRhdGU6IFByb3BUeXBlcy5mdW5jLFxuICAgIHBsYWNlbWVudDogUHJvcFR5cGVzLm9uZU9mKFsnYXV0by1lbmQnLCAnYXV0by1zdGFydCcsICdhdXRvJywgJ2JvdHRvbS1lbmQnLCAnYm90dG9tLXN0YXJ0JywgJ2JvdHRvbScsICdsZWZ0LWVuZCcsICdsZWZ0LXN0YXJ0JywgJ2xlZnQnLCAncmlnaHQtZW5kJywgJ3JpZ2h0LXN0YXJ0JywgJ3JpZ2h0JywgJ3RvcC1lbmQnLCAndG9wLXN0YXJ0JywgJ3RvcCddKSxcbiAgICBzdHJhdGVneTogUHJvcFR5cGVzLm9uZU9mKFsnYWJzb2x1dGUnLCAnZml4ZWQnXSlcbiAgfSksXG4gIC8qKlxuICAgKiBBIHJlZiB0aGF0IHBvaW50cyB0byB0aGUgdXNlZCBwb3BwZXIgaW5zdGFuY2UuXG4gICAqL1xuICBwb3BwZXJSZWY6IHJlZlR5cGUsXG4gIC8qKlxuICAgKiBUaGUgcHJvcHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZSB0aGUgUG9wcGVyLlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIHJvb3Q6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSlcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50cyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlIHRoZSBQb3BwZXIuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICByb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBIZWxwIHN1cHBvcnRpbmcgYSByZWFjdC10cmFuc2l0aW9uLWdyb3VwL1RyYW5zaXRpb24gY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgdHJhbnNpdGlvbjogUHJvcFR5cGVzLmJvb2xcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBQb3BwZXI7IiwiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRUb29sdGlwVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlUb29sdGlwJywgc2xvdCk7XG59XG5jb25zdCB0b29sdGlwQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aVRvb2x0aXAnLCBbJ3BvcHBlcicsICdwb3BwZXJJbnRlcmFjdGl2ZScsICdwb3BwZXJBcnJvdycsICdwb3BwZXJDbG9zZScsICd0b29sdGlwJywgJ3Rvb2x0aXBBcnJvdycsICd0b3VjaCcsICd0b29sdGlwUGxhY2VtZW50TGVmdCcsICd0b29sdGlwUGxhY2VtZW50UmlnaHQnLCAndG9vbHRpcFBsYWNlbWVudFRvcCcsICd0b29sdGlwUGxhY2VtZW50Qm90dG9tJywgJ2Fycm93J10pO1xuZXhwb3J0IGRlZmF1bHQgdG9vbHRpcENsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYXJyb3dcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzZXNcIiwgXCJjb21wb25lbnRzXCIsIFwiY29tcG9uZW50c1Byb3BzXCIsIFwiZGVzY3JpYmVDaGlsZFwiLCBcImRpc2FibGVGb2N1c0xpc3RlbmVyXCIsIFwiZGlzYWJsZUhvdmVyTGlzdGVuZXJcIiwgXCJkaXNhYmxlSW50ZXJhY3RpdmVcIiwgXCJkaXNhYmxlVG91Y2hMaXN0ZW5lclwiLCBcImVudGVyRGVsYXlcIiwgXCJlbnRlck5leHREZWxheVwiLCBcImVudGVyVG91Y2hEZWxheVwiLCBcImZvbGxvd0N1cnNvclwiLCBcImlkXCIsIFwibGVhdmVEZWxheVwiLCBcImxlYXZlVG91Y2hEZWxheVwiLCBcIm9uQ2xvc2VcIiwgXCJvbk9wZW5cIiwgXCJvcGVuXCIsIFwicGxhY2VtZW50XCIsIFwiUG9wcGVyQ29tcG9uZW50XCIsIFwiUG9wcGVyUHJvcHNcIiwgXCJzbG90UHJvcHNcIiwgXCJzbG90c1wiLCBcInRpdGxlXCIsIFwiVHJhbnNpdGlvbkNvbXBvbmVudFwiLCBcIlRyYW5zaXRpb25Qcm9wc1wiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB1c2VUaW1lb3V0LCB7IFRpbWVvdXQgfSBmcm9tICdAbXVpL3V0aWxzL3VzZVRpbWVvdXQnO1xuaW1wb3J0IGVsZW1lbnRBY2NlcHRpbmdSZWYgZnJvbSAnQG11aS91dGlscy9lbGVtZW50QWNjZXB0aW5nUmVmJztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCB7IGFscGhhIH0gZnJvbSAnQG11aS9zeXN0ZW0vY29sb3JNYW5pcHVsYXRvcic7XG5pbXBvcnQgeyB1c2VSdGwgfSBmcm9tICdAbXVpL3N5c3RlbS9SdGxQcm92aWRlcic7XG5pbXBvcnQgYXBwZW5kT3duZXJTdGF0ZSBmcm9tICdAbXVpL3V0aWxzL2FwcGVuZE93bmVyU3RhdGUnO1xuaW1wb3J0IGdldFJlYWN0RWxlbWVudFJlZiBmcm9tICdAbXVpL3V0aWxzL2dldFJlYWN0RWxlbWVudFJlZic7XG5pbXBvcnQgeyBzdHlsZWQsIHVzZVRoZW1lIH0gZnJvbSAnLi4vc3R5bGVzJztcbmltcG9ydCB7IHVzZURlZmF1bHRQcm9wcyB9IGZyb20gJy4uL0RlZmF1bHRQcm9wc1Byb3ZpZGVyJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IEdyb3cgZnJvbSAnLi4vR3Jvdyc7XG5pbXBvcnQgUG9wcGVyIGZyb20gJy4uL1BvcHBlcic7XG5pbXBvcnQgdXNlRXZlbnRDYWxsYmFjayBmcm9tICcuLi91dGlscy91c2VFdmVudENhbGxiYWNrJztcbmltcG9ydCB1c2VGb3JrUmVmIGZyb20gJy4uL3V0aWxzL3VzZUZvcmtSZWYnO1xuaW1wb3J0IHVzZUlkIGZyb20gJy4uL3V0aWxzL3VzZUlkJztcbmltcG9ydCB1c2VJc0ZvY3VzVmlzaWJsZSBmcm9tICcuLi91dGlscy91c2VJc0ZvY3VzVmlzaWJsZSc7XG5pbXBvcnQgdXNlQ29udHJvbGxlZCBmcm9tICcuLi91dGlscy91c2VDb250cm9sbGVkJztcbmltcG9ydCB0b29sdGlwQ2xhc3NlcywgeyBnZXRUb29sdGlwVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi90b29sdGlwQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZnVuY3Rpb24gcm91bmQodmFsdWUpIHtcbiAgcmV0dXJuIE1hdGgucm91bmQodmFsdWUgKiAxZTUpIC8gMWU1O1xufVxuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgZGlzYWJsZUludGVyYWN0aXZlLFxuICAgIGFycm93LFxuICAgIHRvdWNoLFxuICAgIHBsYWNlbWVudFxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcG9wcGVyOiBbJ3BvcHBlcicsICFkaXNhYmxlSW50ZXJhY3RpdmUgJiYgJ3BvcHBlckludGVyYWN0aXZlJywgYXJyb3cgJiYgJ3BvcHBlckFycm93J10sXG4gICAgdG9vbHRpcDogWyd0b29sdGlwJywgYXJyb3cgJiYgJ3Rvb2x0aXBBcnJvdycsIHRvdWNoICYmICd0b3VjaCcsIGB0b29sdGlwUGxhY2VtZW50JHtjYXBpdGFsaXplKHBsYWNlbWVudC5zcGxpdCgnLScpWzBdKX1gXSxcbiAgICBhcnJvdzogWydhcnJvdyddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0VG9vbHRpcFV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuY29uc3QgVG9vbHRpcFBvcHBlciA9IHN0eWxlZChQb3BwZXIsIHtcbiAgbmFtZTogJ011aVRvb2x0aXAnLFxuICBzbG90OiAnUG9wcGVyJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5wb3BwZXIsICFvd25lclN0YXRlLmRpc2FibGVJbnRlcmFjdGl2ZSAmJiBzdHlsZXMucG9wcGVySW50ZXJhY3RpdmUsIG93bmVyU3RhdGUuYXJyb3cgJiYgc3R5bGVzLnBvcHBlckFycm93LCAhb3duZXJTdGF0ZS5vcGVuICYmIHN0eWxlcy5wb3BwZXJDbG9zZV07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlLFxuICBvcGVuXG59KSA9PiBfZXh0ZW5kcyh7XG4gIHpJbmRleDogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnpJbmRleC50b29sdGlwLFxuICBwb2ludGVyRXZlbnRzOiAnbm9uZSdcbn0sICFvd25lclN0YXRlLmRpc2FibGVJbnRlcmFjdGl2ZSAmJiB7XG4gIHBvaW50ZXJFdmVudHM6ICdhdXRvJ1xufSwgIW9wZW4gJiYge1xuICBwb2ludGVyRXZlbnRzOiAnbm9uZSdcbn0sIG93bmVyU3RhdGUuYXJyb3cgJiYge1xuICBbYCZbZGF0YS1wb3BwZXItcGxhY2VtZW50Kj1cImJvdHRvbVwiXSAuJHt0b29sdGlwQ2xhc3Nlcy5hcnJvd31gXToge1xuICAgIHRvcDogMCxcbiAgICBtYXJnaW5Ub3A6ICctMC43MWVtJyxcbiAgICAnJjo6YmVmb3JlJzoge1xuICAgICAgdHJhbnNmb3JtT3JpZ2luOiAnMCAxMDAlJ1xuICAgIH1cbiAgfSxcbiAgW2AmW2RhdGEtcG9wcGVyLXBsYWNlbWVudCo9XCJ0b3BcIl0gLiR7dG9vbHRpcENsYXNzZXMuYXJyb3d9YF06IHtcbiAgICBib3R0b206IDAsXG4gICAgbWFyZ2luQm90dG9tOiAnLTAuNzFlbScsXG4gICAgJyY6OmJlZm9yZSc6IHtcbiAgICAgIHRyYW5zZm9ybU9yaWdpbjogJzEwMCUgMCdcbiAgICB9XG4gIH0sXG4gIFtgJltkYXRhLXBvcHBlci1wbGFjZW1lbnQqPVwicmlnaHRcIl0gLiR7dG9vbHRpcENsYXNzZXMuYXJyb3d9YF06IF9leHRlbmRzKHt9LCAhb3duZXJTdGF0ZS5pc1J0bCA/IHtcbiAgICBsZWZ0OiAwLFxuICAgIG1hcmdpbkxlZnQ6ICctMC43MWVtJ1xuICB9IDoge1xuICAgIHJpZ2h0OiAwLFxuICAgIG1hcmdpblJpZ2h0OiAnLTAuNzFlbSdcbiAgfSwge1xuICAgIGhlaWdodDogJzFlbScsXG4gICAgd2lkdGg6ICcwLjcxZW0nLFxuICAgICcmOjpiZWZvcmUnOiB7XG4gICAgICB0cmFuc2Zvcm1PcmlnaW46ICcxMDAlIDEwMCUnXG4gICAgfVxuICB9KSxcbiAgW2AmW2RhdGEtcG9wcGVyLXBsYWNlbWVudCo9XCJsZWZ0XCJdIC4ke3Rvb2x0aXBDbGFzc2VzLmFycm93fWBdOiBfZXh0ZW5kcyh7fSwgIW93bmVyU3RhdGUuaXNSdGwgPyB7XG4gICAgcmlnaHQ6IDAsXG4gICAgbWFyZ2luUmlnaHQ6ICctMC43MWVtJ1xuICB9IDoge1xuICAgIGxlZnQ6IDAsXG4gICAgbWFyZ2luTGVmdDogJy0wLjcxZW0nXG4gIH0sIHtcbiAgICBoZWlnaHQ6ICcxZW0nLFxuICAgIHdpZHRoOiAnMC43MWVtJyxcbiAgICAnJjo6YmVmb3JlJzoge1xuICAgICAgdHJhbnNmb3JtT3JpZ2luOiAnMCAwJ1xuICAgIH1cbiAgfSlcbn0pKTtcbmNvbnN0IFRvb2x0aXBUb29sdGlwID0gc3R5bGVkKCdkaXYnLCB7XG4gIG5hbWU6ICdNdWlUb29sdGlwJyxcbiAgc2xvdDogJ1Rvb2x0aXAnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnRvb2x0aXAsIG93bmVyU3RhdGUudG91Y2ggJiYgc3R5bGVzLnRvdWNoLCBvd25lclN0YXRlLmFycm93ICYmIHN0eWxlcy50b29sdGlwQXJyb3csIHN0eWxlc1tgdG9vbHRpcFBsYWNlbWVudCR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLnBsYWNlbWVudC5zcGxpdCgnLScpWzBdKX1gXV07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IHRoZW1lLnZhcnMucGFsZXR0ZS5Ub29sdGlwLmJnIDogYWxwaGEodGhlbWUucGFsZXR0ZS5ncmV5WzcwMF0sIDAuOTIpLFxuICBib3JkZXJSYWRpdXM6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5zaGFwZS5ib3JkZXJSYWRpdXMsXG4gIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5jb21tb24ud2hpdGUsXG4gIGZvbnRGYW1pbHk6IHRoZW1lLnR5cG9ncmFwaHkuZm9udEZhbWlseSxcbiAgcGFkZGluZzogJzRweCA4cHgnLFxuICBmb250U2l6ZTogdGhlbWUudHlwb2dyYXBoeS5weFRvUmVtKDExKSxcbiAgbWF4V2lkdGg6IDMwMCxcbiAgbWFyZ2luOiAyLFxuICB3b3JkV3JhcDogJ2JyZWFrLXdvcmQnLFxuICBmb250V2VpZ2h0OiB0aGVtZS50eXBvZ3JhcGh5LmZvbnRXZWlnaHRNZWRpdW1cbn0sIG93bmVyU3RhdGUuYXJyb3cgJiYge1xuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgbWFyZ2luOiAwXG59LCBvd25lclN0YXRlLnRvdWNoICYmIHtcbiAgcGFkZGluZzogJzhweCAxNnB4JyxcbiAgZm9udFNpemU6IHRoZW1lLnR5cG9ncmFwaHkucHhUb1JlbSgxNCksXG4gIGxpbmVIZWlnaHQ6IGAke3JvdW5kKDE2IC8gMTQpfWVtYCxcbiAgZm9udFdlaWdodDogdGhlbWUudHlwb2dyYXBoeS5mb250V2VpZ2h0UmVndWxhclxufSwge1xuICBbYC4ke3Rvb2x0aXBDbGFzc2VzLnBvcHBlcn1bZGF0YS1wb3BwZXItcGxhY2VtZW50Kj1cImxlZnRcIl0gJmBdOiBfZXh0ZW5kcyh7XG4gICAgdHJhbnNmb3JtT3JpZ2luOiAncmlnaHQgY2VudGVyJ1xuICB9LCAhb3duZXJTdGF0ZS5pc1J0bCA/IF9leHRlbmRzKHtcbiAgICBtYXJnaW5SaWdodDogJzE0cHgnXG4gIH0sIG93bmVyU3RhdGUudG91Y2ggJiYge1xuICAgIG1hcmdpblJpZ2h0OiAnMjRweCdcbiAgfSkgOiBfZXh0ZW5kcyh7XG4gICAgbWFyZ2luTGVmdDogJzE0cHgnXG4gIH0sIG93bmVyU3RhdGUudG91Y2ggJiYge1xuICAgIG1hcmdpbkxlZnQ6ICcyNHB4J1xuICB9KSksXG4gIFtgLiR7dG9vbHRpcENsYXNzZXMucG9wcGVyfVtkYXRhLXBvcHBlci1wbGFjZW1lbnQqPVwicmlnaHRcIl0gJmBdOiBfZXh0ZW5kcyh7XG4gICAgdHJhbnNmb3JtT3JpZ2luOiAnbGVmdCBjZW50ZXInXG4gIH0sICFvd25lclN0YXRlLmlzUnRsID8gX2V4dGVuZHMoe1xuICAgIG1hcmdpbkxlZnQ6ICcxNHB4J1xuICB9LCBvd25lclN0YXRlLnRvdWNoICYmIHtcbiAgICBtYXJnaW5MZWZ0OiAnMjRweCdcbiAgfSkgOiBfZXh0ZW5kcyh7XG4gICAgbWFyZ2luUmlnaHQ6ICcxNHB4J1xuICB9LCBvd25lclN0YXRlLnRvdWNoICYmIHtcbiAgICBtYXJnaW5SaWdodDogJzI0cHgnXG4gIH0pKSxcbiAgW2AuJHt0b29sdGlwQ2xhc3Nlcy5wb3BwZXJ9W2RhdGEtcG9wcGVyLXBsYWNlbWVudCo9XCJ0b3BcIl0gJmBdOiBfZXh0ZW5kcyh7XG4gICAgdHJhbnNmb3JtT3JpZ2luOiAnY2VudGVyIGJvdHRvbScsXG4gICAgbWFyZ2luQm90dG9tOiAnMTRweCdcbiAgfSwgb3duZXJTdGF0ZS50b3VjaCAmJiB7XG4gICAgbWFyZ2luQm90dG9tOiAnMjRweCdcbiAgfSksXG4gIFtgLiR7dG9vbHRpcENsYXNzZXMucG9wcGVyfVtkYXRhLXBvcHBlci1wbGFjZW1lbnQqPVwiYm90dG9tXCJdICZgXTogX2V4dGVuZHMoe1xuICAgIHRyYW5zZm9ybU9yaWdpbjogJ2NlbnRlciB0b3AnLFxuICAgIG1hcmdpblRvcDogJzE0cHgnXG4gIH0sIG93bmVyU3RhdGUudG91Y2ggJiYge1xuICAgIG1hcmdpblRvcDogJzI0cHgnXG4gIH0pXG59KSk7XG5jb25zdCBUb29sdGlwQXJyb3cgPSBzdHlsZWQoJ3NwYW4nLCB7XG4gIG5hbWU6ICdNdWlUb29sdGlwJyxcbiAgc2xvdDogJ0Fycm93JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMuYXJyb3dcbn0pKCh7XG4gIHRoZW1lXG59KSA9PiAoe1xuICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICB3aWR0aDogJzFlbScsXG4gIGhlaWdodDogJzAuNzFlbScgLyogPSB3aWR0aCAvIHNxcnQoMikgPSAobGVuZ3RoIG9mIHRoZSBoeXBvdGVudXNlKSAqLyxcbiAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gIGNvbG9yOiB0aGVtZS52YXJzID8gdGhlbWUudmFycy5wYWxldHRlLlRvb2x0aXAuYmcgOiBhbHBoYSh0aGVtZS5wYWxldHRlLmdyZXlbNzAwXSwgMC45KSxcbiAgJyY6OmJlZm9yZSc6IHtcbiAgICBjb250ZW50OiAnXCJcIicsXG4gICAgbWFyZ2luOiAnYXV0bycsXG4gICAgZGlzcGxheTogJ2Jsb2NrJyxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIGhlaWdodDogJzEwMCUnLFxuICAgIGJhY2tncm91bmRDb2xvcjogJ2N1cnJlbnRDb2xvcicsXG4gICAgdHJhbnNmb3JtOiAncm90YXRlKDQ1ZGVnKSdcbiAgfVxufSkpO1xubGV0IGh5c3RlcnNpc09wZW4gPSBmYWxzZTtcbmNvbnN0IGh5c3RlcnNpc1RpbWVyID0gbmV3IFRpbWVvdXQoKTtcbmxldCBjdXJzb3JQb3NpdGlvbiA9IHtcbiAgeDogMCxcbiAgeTogMFxufTtcbmV4cG9ydCBmdW5jdGlvbiB0ZXN0UmVzZXQoKSB7XG4gIGh5c3RlcnNpc09wZW4gPSBmYWxzZTtcbiAgaHlzdGVyc2lzVGltZXIuY2xlYXIoKTtcbn1cbmZ1bmN0aW9uIGNvbXBvc2VFdmVudEhhbmRsZXIoaGFuZGxlciwgZXZlbnRIYW5kbGVyKSB7XG4gIHJldHVybiAoZXZlbnQsIC4uLnBhcmFtcykgPT4ge1xuICAgIGlmIChldmVudEhhbmRsZXIpIHtcbiAgICAgIGV2ZW50SGFuZGxlcihldmVudCwgLi4ucGFyYW1zKTtcbiAgICB9XG4gICAgaGFuZGxlcihldmVudCwgLi4ucGFyYW1zKTtcbiAgfTtcbn1cblxuLy8gVE9ETyB2NjogUmVtb3ZlIFBvcHBlckNvbXBvbmVudCwgUG9wcGVyUHJvcHMsIFRyYW5zaXRpb25Db21wb25lbnQgYW5kIFRyYW5zaXRpb25Qcm9wcy5cbmNvbnN0IFRvb2x0aXAgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBUb29sdGlwKGluUHJvcHMsIHJlZikge1xuICB2YXIgX3JlZiwgX3Nsb3RzJHBvcHBlciwgX3JlZjIsIF9yZWYzLCBfc2xvdHMkdHJhbnNpdGlvbiwgX3JlZjQsIF9zbG90cyR0b29sdGlwLCBfcmVmNSwgX3Nsb3RzJGFycm93LCBfc2xvdFByb3BzJHBvcHBlciwgX3JlZjYsIF9zbG90UHJvcHMkcG9wcGVyMiwgX3Nsb3RQcm9wcyR0cmFuc2l0aW9uLCBfc2xvdFByb3BzJHRvb2x0aXAsIF9yZWY3LCBfc2xvdFByb3BzJHRvb2x0aXAyLCBfc2xvdFByb3BzJGFycm93LCBfcmVmOCwgX3Nsb3RQcm9wcyRhcnJvdzI7XG4gIGNvbnN0IHByb3BzID0gdXNlRGVmYXVsdFByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpVG9vbHRpcCdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGFycm93ID0gZmFsc2UsXG4gICAgICBjaGlsZHJlbjogY2hpbGRyZW5Qcm9wLFxuICAgICAgY29tcG9uZW50cyA9IHt9LFxuICAgICAgY29tcG9uZW50c1Byb3BzID0ge30sXG4gICAgICBkZXNjcmliZUNoaWxkID0gZmFsc2UsXG4gICAgICBkaXNhYmxlRm9jdXNMaXN0ZW5lciA9IGZhbHNlLFxuICAgICAgZGlzYWJsZUhvdmVyTGlzdGVuZXIgPSBmYWxzZSxcbiAgICAgIGRpc2FibGVJbnRlcmFjdGl2ZTogZGlzYWJsZUludGVyYWN0aXZlUHJvcCA9IGZhbHNlLFxuICAgICAgZGlzYWJsZVRvdWNoTGlzdGVuZXIgPSBmYWxzZSxcbiAgICAgIGVudGVyRGVsYXkgPSAxMDAsXG4gICAgICBlbnRlck5leHREZWxheSA9IDAsXG4gICAgICBlbnRlclRvdWNoRGVsYXkgPSA3MDAsXG4gICAgICBmb2xsb3dDdXJzb3IgPSBmYWxzZSxcbiAgICAgIGlkOiBpZFByb3AsXG4gICAgICBsZWF2ZURlbGF5ID0gMCxcbiAgICAgIGxlYXZlVG91Y2hEZWxheSA9IDE1MDAsXG4gICAgICBvbkNsb3NlLFxuICAgICAgb25PcGVuLFxuICAgICAgb3Blbjogb3BlblByb3AsXG4gICAgICBwbGFjZW1lbnQgPSAnYm90dG9tJyxcbiAgICAgIFBvcHBlckNvbXBvbmVudDogUG9wcGVyQ29tcG9uZW50UHJvcCxcbiAgICAgIFBvcHBlclByb3BzID0ge30sXG4gICAgICBzbG90UHJvcHMgPSB7fSxcbiAgICAgIHNsb3RzID0ge30sXG4gICAgICB0aXRsZSxcbiAgICAgIFRyYW5zaXRpb25Db21wb25lbnQ6IFRyYW5zaXRpb25Db21wb25lbnRQcm9wID0gR3JvdyxcbiAgICAgIFRyYW5zaXRpb25Qcm9wc1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gIC8vIHRvIHByZXZlbnQgcnVudGltZSBlcnJvcnMsIGRldmVsb3BlcnMgd2lsbCBuZWVkIHRvIHByb3ZpZGUgYSBjaGlsZCBhcyBhIFJlYWN0IGVsZW1lbnQgYW55d2F5LlxuICBjb25zdCBjaGlsZHJlbiA9IC8qI19fUFVSRV9fKi9SZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZHJlblByb3ApID8gY2hpbGRyZW5Qcm9wIDogLyojX19QVVJFX18qL19qc3goXCJzcGFuXCIsIHtcbiAgICBjaGlsZHJlbjogY2hpbGRyZW5Qcm9wXG4gIH0pO1xuICBjb25zdCB0aGVtZSA9IHVzZVRoZW1lKCk7XG4gIGNvbnN0IGlzUnRsID0gdXNlUnRsKCk7XG4gIGNvbnN0IFtjaGlsZE5vZGUsIHNldENoaWxkTm9kZV0gPSBSZWFjdC51c2VTdGF0ZSgpO1xuICBjb25zdCBbYXJyb3dSZWYsIHNldEFycm93UmVmXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBpZ25vcmVOb25Ub3VjaEV2ZW50cyA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IGRpc2FibGVJbnRlcmFjdGl2ZSA9IGRpc2FibGVJbnRlcmFjdGl2ZVByb3AgfHwgZm9sbG93Q3Vyc29yO1xuICBjb25zdCBjbG9zZVRpbWVyID0gdXNlVGltZW91dCgpO1xuICBjb25zdCBlbnRlclRpbWVyID0gdXNlVGltZW91dCgpO1xuICBjb25zdCBsZWF2ZVRpbWVyID0gdXNlVGltZW91dCgpO1xuICBjb25zdCB0b3VjaFRpbWVyID0gdXNlVGltZW91dCgpO1xuICBjb25zdCBbb3BlblN0YXRlLCBzZXRPcGVuU3RhdGVdID0gdXNlQ29udHJvbGxlZCh7XG4gICAgY29udHJvbGxlZDogb3BlblByb3AsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gICAgbmFtZTogJ1Rvb2x0aXAnLFxuICAgIHN0YXRlOiAnb3BlbidcbiAgfSk7XG4gIGxldCBvcGVuID0gb3BlblN0YXRlO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rc1xuICAgIGNvbnN0IHtcbiAgICAgIGN1cnJlbnQ6IGlzQ29udHJvbGxlZFxuICAgIH0gPSBSZWFjdC51c2VSZWYob3BlblByb3AgIT09IHVuZGVmaW5lZCk7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3NcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKGNoaWxkTm9kZSAmJiBjaGlsZE5vZGUuZGlzYWJsZWQgJiYgIWlzQ29udHJvbGxlZCAmJiB0aXRsZSAhPT0gJycgJiYgY2hpbGROb2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2J1dHRvbicpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbJ01VSTogWW91IGFyZSBwcm92aWRpbmcgYSBkaXNhYmxlZCBgYnV0dG9uYCBjaGlsZCB0byB0aGUgVG9vbHRpcCBjb21wb25lbnQuJywgJ0EgZGlzYWJsZWQgZWxlbWVudCBkb2VzIG5vdCBmaXJlIGV2ZW50cy4nLCBcIlRvb2x0aXAgbmVlZHMgdG8gbGlzdGVuIHRvIHRoZSBjaGlsZCBlbGVtZW50J3MgZXZlbnRzIHRvIGRpc3BsYXkgdGhlIHRpdGxlLlwiLCAnJywgJ0FkZCBhIHNpbXBsZSB3cmFwcGVyIGVsZW1lbnQsIHN1Y2ggYXMgYSBgc3BhbmAuJ10uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH0sIFt0aXRsZSwgY2hpbGROb2RlLCBpc0NvbnRyb2xsZWRdKTtcbiAgfVxuICBjb25zdCBpZCA9IHVzZUlkKGlkUHJvcCk7XG4gIGNvbnN0IHByZXZVc2VyU2VsZWN0ID0gUmVhY3QudXNlUmVmKCk7XG4gIGNvbnN0IHN0b3BUb3VjaEludGVyYWN0aW9uID0gdXNlRXZlbnRDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKHByZXZVc2VyU2VsZWN0LmN1cnJlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5XZWJraXRVc2VyU2VsZWN0ID0gcHJldlVzZXJTZWxlY3QuY3VycmVudDtcbiAgICAgIHByZXZVc2VyU2VsZWN0LmN1cnJlbnQgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRvdWNoVGltZXIuY2xlYXIoKTtcbiAgfSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiBzdG9wVG91Y2hJbnRlcmFjdGlvbiwgW3N0b3BUb3VjaEludGVyYWN0aW9uXSk7XG4gIGNvbnN0IGhhbmRsZU9wZW4gPSBldmVudCA9PiB7XG4gICAgaHlzdGVyc2lzVGltZXIuY2xlYXIoKTtcbiAgICBoeXN0ZXJzaXNPcGVuID0gdHJ1ZTtcblxuICAgIC8vIFRoZSBtb3VzZW92ZXIgZXZlbnQgd2lsbCB0cmlnZ2VyIGZvciBldmVyeSBuZXN0ZWQgZWxlbWVudCBpbiB0aGUgdG9vbHRpcC5cbiAgICAvLyBXZSBjYW4gc2tpcCByZXJlbmRlcmluZyB3aGVuIHRoZSB0b29sdGlwIGlzIGFscmVhZHkgb3Blbi5cbiAgICAvLyBXZSBhcmUgdXNpbmcgdGhlIG1vdXNlb3ZlciBldmVudCBpbnN0ZWFkIG9mIHRoZSBtb3VzZWVudGVyIGV2ZW50IHRvIGZpeCBhIGhpZGUvc2hvdyBpc3N1ZS5cbiAgICBzZXRPcGVuU3RhdGUodHJ1ZSk7XG4gICAgaWYgKG9uT3BlbiAmJiAhb3Blbikge1xuICAgICAgb25PcGVuKGV2ZW50KTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGhhbmRsZUNsb3NlID0gdXNlRXZlbnRDYWxsYmFjayhcbiAgLyoqXG4gICAqIEBwYXJhbSB7UmVhY3QuU3ludGhldGljRXZlbnQgfCBFdmVudH0gZXZlbnRcbiAgICovXG4gIGV2ZW50ID0+IHtcbiAgICBoeXN0ZXJzaXNUaW1lci5zdGFydCg4MDAgKyBsZWF2ZURlbGF5LCAoKSA9PiB7XG4gICAgICBoeXN0ZXJzaXNPcGVuID0gZmFsc2U7XG4gICAgfSk7XG4gICAgc2V0T3BlblN0YXRlKGZhbHNlKTtcbiAgICBpZiAob25DbG9zZSAmJiBvcGVuKSB7XG4gICAgICBvbkNsb3NlKGV2ZW50KTtcbiAgICB9XG4gICAgY2xvc2VUaW1lci5zdGFydCh0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5zaG9ydGVzdCwgKCkgPT4ge1xuICAgICAgaWdub3JlTm9uVG91Y2hFdmVudHMuY3VycmVudCA9IGZhbHNlO1xuICAgIH0pO1xuICB9KTtcbiAgY29uc3QgaGFuZGxlTW91c2VPdmVyID0gZXZlbnQgPT4ge1xuICAgIGlmIChpZ25vcmVOb25Ub3VjaEV2ZW50cy5jdXJyZW50ICYmIGV2ZW50LnR5cGUgIT09ICd0b3VjaHN0YXJ0Jykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFJlbW92ZSB0aGUgdGl0bGUgYWhlYWQgb2YgdGltZS5cbiAgICAvLyBXZSBkb24ndCB3YW50IHRvIHdhaXQgZm9yIHRoZSBuZXh0IHJlbmRlciBjb21taXQuXG4gICAgLy8gV2Ugd291bGQgcmlzayBkaXNwbGF5aW5nIHR3byB0b29sdGlwcyBhdCB0aGUgc2FtZSB0aW1lIChuYXRpdmUgKyB0aGlzIG9uZSkuXG4gICAgaWYgKGNoaWxkTm9kZSkge1xuICAgICAgY2hpbGROb2RlLnJlbW92ZUF0dHJpYnV0ZSgndGl0bGUnKTtcbiAgICB9XG4gICAgZW50ZXJUaW1lci5jbGVhcigpO1xuICAgIGxlYXZlVGltZXIuY2xlYXIoKTtcbiAgICBpZiAoZW50ZXJEZWxheSB8fCBoeXN0ZXJzaXNPcGVuICYmIGVudGVyTmV4dERlbGF5KSB7XG4gICAgICBlbnRlclRpbWVyLnN0YXJ0KGh5c3RlcnNpc09wZW4gPyBlbnRlck5leHREZWxheSA6IGVudGVyRGVsYXksICgpID0+IHtcbiAgICAgICAgaGFuZGxlT3BlbihldmVudCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGFuZGxlT3BlbihldmVudCk7XG4gICAgfVxuICB9O1xuICBjb25zdCBoYW5kbGVNb3VzZUxlYXZlID0gZXZlbnQgPT4ge1xuICAgIGVudGVyVGltZXIuY2xlYXIoKTtcbiAgICBsZWF2ZVRpbWVyLnN0YXJ0KGxlYXZlRGVsYXksICgpID0+IHtcbiAgICAgIGhhbmRsZUNsb3NlKGV2ZW50KTtcbiAgICB9KTtcbiAgfTtcbiAgY29uc3Qge1xuICAgIGlzRm9jdXNWaXNpYmxlUmVmLFxuICAgIG9uQmx1cjogaGFuZGxlQmx1clZpc2libGUsXG4gICAgb25Gb2N1czogaGFuZGxlRm9jdXNWaXNpYmxlLFxuICAgIHJlZjogZm9jdXNWaXNpYmxlUmVmXG4gIH0gPSB1c2VJc0ZvY3VzVmlzaWJsZSgpO1xuICAvLyBXZSBkb24ndCBuZWNlc3NhcmlseSBjYXJlIGFib3V0IHRoZSBmb2N1c1Zpc2libGUgc3RhdGUgKHdoaWNoIGlzIHNhZmUgdG8gYWNjZXNzIHZpYSByZWYgYW55d2F5KS5cbiAgLy8gV2UganVzdCBuZWVkIHRvIHJlLXJlbmRlciB0aGUgVG9vbHRpcCBpZiB0aGUgZm9jdXMtdmlzaWJsZSBzdGF0ZSBjaGFuZ2VzLlxuICBjb25zdCBbLCBzZXRDaGlsZElzRm9jdXNWaXNpYmxlXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgaGFuZGxlQmx1ciA9IGV2ZW50ID0+IHtcbiAgICBoYW5kbGVCbHVyVmlzaWJsZShldmVudCk7XG4gICAgaWYgKGlzRm9jdXNWaXNpYmxlUmVmLmN1cnJlbnQgPT09IGZhbHNlKSB7XG4gICAgICBzZXRDaGlsZElzRm9jdXNWaXNpYmxlKGZhbHNlKTtcbiAgICAgIGhhbmRsZU1vdXNlTGVhdmUoZXZlbnQpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgaGFuZGxlRm9jdXMgPSBldmVudCA9PiB7XG4gICAgLy8gV29ya2Fyb3VuZCBmb3IgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy83NzY5XG4gICAgLy8gVGhlIGF1dG9Gb2N1cyBvZiBSZWFjdCBtaWdodCB0cmlnZ2VyIHRoZSBldmVudCBiZWZvcmUgdGhlIGNvbXBvbmVudERpZE1vdW50LlxuICAgIC8vIFdlIG5lZWQgdG8gYWNjb3VudCBmb3IgdGhpcyBldmVudHVhbGl0eS5cbiAgICBpZiAoIWNoaWxkTm9kZSkge1xuICAgICAgc2V0Q2hpbGROb2RlKGV2ZW50LmN1cnJlbnRUYXJnZXQpO1xuICAgIH1cbiAgICBoYW5kbGVGb2N1c1Zpc2libGUoZXZlbnQpO1xuICAgIGlmIChpc0ZvY3VzVmlzaWJsZVJlZi5jdXJyZW50ID09PSB0cnVlKSB7XG4gICAgICBzZXRDaGlsZElzRm9jdXNWaXNpYmxlKHRydWUpO1xuICAgICAgaGFuZGxlTW91c2VPdmVyKGV2ZW50KTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGRldGVjdFRvdWNoU3RhcnQgPSBldmVudCA9PiB7XG4gICAgaWdub3JlTm9uVG91Y2hFdmVudHMuY3VycmVudCA9IHRydWU7XG4gICAgY29uc3QgY2hpbGRyZW5Qcm9wcyA9IGNoaWxkcmVuLnByb3BzO1xuICAgIGlmIChjaGlsZHJlblByb3BzLm9uVG91Y2hTdGFydCkge1xuICAgICAgY2hpbGRyZW5Qcm9wcy5vblRvdWNoU3RhcnQoZXZlbnQpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgaGFuZGxlVG91Y2hTdGFydCA9IGV2ZW50ID0+IHtcbiAgICBkZXRlY3RUb3VjaFN0YXJ0KGV2ZW50KTtcbiAgICBsZWF2ZVRpbWVyLmNsZWFyKCk7XG4gICAgY2xvc2VUaW1lci5jbGVhcigpO1xuICAgIHN0b3BUb3VjaEludGVyYWN0aW9uKCk7XG4gICAgcHJldlVzZXJTZWxlY3QuY3VycmVudCA9IGRvY3VtZW50LmJvZHkuc3R5bGUuV2Via2l0VXNlclNlbGVjdDtcbiAgICAvLyBQcmV2ZW50IGlPUyB0ZXh0IHNlbGVjdGlvbiBvbiBsb25nLXRhcC5cbiAgICBkb2N1bWVudC5ib2R5LnN0eWxlLldlYmtpdFVzZXJTZWxlY3QgPSAnbm9uZSc7XG4gICAgdG91Y2hUaW1lci5zdGFydChlbnRlclRvdWNoRGVsYXksICgpID0+IHtcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuV2Via2l0VXNlclNlbGVjdCA9IHByZXZVc2VyU2VsZWN0LmN1cnJlbnQ7XG4gICAgICBoYW5kbGVNb3VzZU92ZXIoZXZlbnQpO1xuICAgIH0pO1xuICB9O1xuICBjb25zdCBoYW5kbGVUb3VjaEVuZCA9IGV2ZW50ID0+IHtcbiAgICBpZiAoY2hpbGRyZW4ucHJvcHMub25Ub3VjaEVuZCkge1xuICAgICAgY2hpbGRyZW4ucHJvcHMub25Ub3VjaEVuZChldmVudCk7XG4gICAgfVxuICAgIHN0b3BUb3VjaEludGVyYWN0aW9uKCk7XG4gICAgbGVhdmVUaW1lci5zdGFydChsZWF2ZVRvdWNoRGVsYXksICgpID0+IHtcbiAgICAgIGhhbmRsZUNsb3NlKGV2ZW50KTtcbiAgICB9KTtcbiAgfTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIW9wZW4pIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtLZXlib2FyZEV2ZW50fSBuYXRpdmVFdmVudFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGhhbmRsZUtleURvd24obmF0aXZlRXZlbnQpIHtcbiAgICAgIC8vIElFMTEsIEVkZ2UgKHByaW9yIHRvIHVzaW5nIEJpbms/KSB1c2UgJ0VzYydcbiAgICAgIGlmIChuYXRpdmVFdmVudC5rZXkgPT09ICdFc2NhcGUnIHx8IG5hdGl2ZUV2ZW50LmtleSA9PT0gJ0VzYycpIHtcbiAgICAgICAgaGFuZGxlQ2xvc2UobmF0aXZlRXZlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgaGFuZGxlS2V5RG93bik7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVLZXlEb3duKTtcbiAgICB9O1xuICB9LCBbaGFuZGxlQ2xvc2UsIG9wZW5dKTtcbiAgY29uc3QgaGFuZGxlUmVmID0gdXNlRm9ya1JlZihnZXRSZWFjdEVsZW1lbnRSZWYoY2hpbGRyZW4pLCBmb2N1c1Zpc2libGVSZWYsIHNldENoaWxkTm9kZSwgcmVmKTtcblxuICAvLyBUaGVyZSBpcyBubyBwb2ludCBpbiBkaXNwbGF5aW5nIGFuIGVtcHR5IHRvb2x0aXAuXG4gIC8vIFNvIHdlIGV4Y2x1ZGUgYWxsIGZhbHN5IHZhbHVlcywgZXhjZXB0IDAsIHdoaWNoIGlzIHZhbGlkLlxuICBpZiAoIXRpdGxlICYmIHRpdGxlICE9PSAwKSB7XG4gICAgb3BlbiA9IGZhbHNlO1xuICB9XG4gIGNvbnN0IHBvcHBlclJlZiA9IFJlYWN0LnVzZVJlZigpO1xuICBjb25zdCBoYW5kbGVNb3VzZU1vdmUgPSBldmVudCA9PiB7XG4gICAgY29uc3QgY2hpbGRyZW5Qcm9wcyA9IGNoaWxkcmVuLnByb3BzO1xuICAgIGlmIChjaGlsZHJlblByb3BzLm9uTW91c2VNb3ZlKSB7XG4gICAgICBjaGlsZHJlblByb3BzLm9uTW91c2VNb3ZlKGV2ZW50KTtcbiAgICB9XG4gICAgY3Vyc29yUG9zaXRpb24gPSB7XG4gICAgICB4OiBldmVudC5jbGllbnRYLFxuICAgICAgeTogZXZlbnQuY2xpZW50WVxuICAgIH07XG4gICAgaWYgKHBvcHBlclJlZi5jdXJyZW50KSB7XG4gICAgICBwb3BwZXJSZWYuY3VycmVudC51cGRhdGUoKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IG5hbWVPckRlc2NQcm9wcyA9IHt9O1xuICBjb25zdCB0aXRsZUlzU3RyaW5nID0gdHlwZW9mIHRpdGxlID09PSAnc3RyaW5nJztcbiAgaWYgKGRlc2NyaWJlQ2hpbGQpIHtcbiAgICBuYW1lT3JEZXNjUHJvcHMudGl0bGUgPSAhb3BlbiAmJiB0aXRsZUlzU3RyaW5nICYmICFkaXNhYmxlSG92ZXJMaXN0ZW5lciA/IHRpdGxlIDogbnVsbDtcbiAgICBuYW1lT3JEZXNjUHJvcHNbJ2FyaWEtZGVzY3JpYmVkYnknXSA9IG9wZW4gPyBpZCA6IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgbmFtZU9yRGVzY1Byb3BzWydhcmlhLWxhYmVsJ10gPSB0aXRsZUlzU3RyaW5nID8gdGl0bGUgOiBudWxsO1xuICAgIG5hbWVPckRlc2NQcm9wc1snYXJpYS1sYWJlbGxlZGJ5J10gPSBvcGVuICYmICF0aXRsZUlzU3RyaW5nID8gaWQgOiBudWxsO1xuICB9XG4gIGNvbnN0IGNoaWxkcmVuUHJvcHMgPSBfZXh0ZW5kcyh7fSwgbmFtZU9yRGVzY1Byb3BzLCBvdGhlciwgY2hpbGRyZW4ucHJvcHMsIHtcbiAgICBjbGFzc05hbWU6IGNsc3gob3RoZXIuY2xhc3NOYW1lLCBjaGlsZHJlbi5wcm9wcy5jbGFzc05hbWUpLFxuICAgIG9uVG91Y2hTdGFydDogZGV0ZWN0VG91Y2hTdGFydCxcbiAgICByZWY6IGhhbmRsZVJlZlxuICB9LCBmb2xsb3dDdXJzb3IgPyB7XG4gICAgb25Nb3VzZU1vdmU6IGhhbmRsZU1vdXNlTW92ZVxuICB9IDoge30pO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGNoaWxkcmVuUHJvcHNbJ2RhdGEtbXVpLWludGVybmFsLWNsb25lLWVsZW1lbnQnXSA9IHRydWU7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3NcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKGNoaWxkTm9kZSAmJiAhY2hpbGROb2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1tdWktaW50ZXJuYWwtY2xvbmUtZWxlbWVudCcpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoWydNVUk6IFRoZSBgY2hpbGRyZW5gIGNvbXBvbmVudCBvZiB0aGUgVG9vbHRpcCBpcyBub3QgZm9yd2FyZGluZyBpdHMgcHJvcHMgY29ycmVjdGx5LicsICdQbGVhc2UgbWFrZSBzdXJlIHRoYXQgcHJvcHMgYXJlIHNwcmVhZCBvbiB0aGUgc2FtZSBlbGVtZW50IHRoYXQgdGhlIHJlZiBpcyBhcHBsaWVkIHRvLiddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9LCBbY2hpbGROb2RlXSk7XG4gIH1cbiAgY29uc3QgaW50ZXJhY3RpdmVXcmFwcGVyTGlzdGVuZXJzID0ge307XG4gIGlmICghZGlzYWJsZVRvdWNoTGlzdGVuZXIpIHtcbiAgICBjaGlsZHJlblByb3BzLm9uVG91Y2hTdGFydCA9IGhhbmRsZVRvdWNoU3RhcnQ7XG4gICAgY2hpbGRyZW5Qcm9wcy5vblRvdWNoRW5kID0gaGFuZGxlVG91Y2hFbmQ7XG4gIH1cbiAgaWYgKCFkaXNhYmxlSG92ZXJMaXN0ZW5lcikge1xuICAgIGNoaWxkcmVuUHJvcHMub25Nb3VzZU92ZXIgPSBjb21wb3NlRXZlbnRIYW5kbGVyKGhhbmRsZU1vdXNlT3ZlciwgY2hpbGRyZW5Qcm9wcy5vbk1vdXNlT3Zlcik7XG4gICAgY2hpbGRyZW5Qcm9wcy5vbk1vdXNlTGVhdmUgPSBjb21wb3NlRXZlbnRIYW5kbGVyKGhhbmRsZU1vdXNlTGVhdmUsIGNoaWxkcmVuUHJvcHMub25Nb3VzZUxlYXZlKTtcbiAgICBpZiAoIWRpc2FibGVJbnRlcmFjdGl2ZSkge1xuICAgICAgaW50ZXJhY3RpdmVXcmFwcGVyTGlzdGVuZXJzLm9uTW91c2VPdmVyID0gaGFuZGxlTW91c2VPdmVyO1xuICAgICAgaW50ZXJhY3RpdmVXcmFwcGVyTGlzdGVuZXJzLm9uTW91c2VMZWF2ZSA9IGhhbmRsZU1vdXNlTGVhdmU7XG4gICAgfVxuICB9XG4gIGlmICghZGlzYWJsZUZvY3VzTGlzdGVuZXIpIHtcbiAgICBjaGlsZHJlblByb3BzLm9uRm9jdXMgPSBjb21wb3NlRXZlbnRIYW5kbGVyKGhhbmRsZUZvY3VzLCBjaGlsZHJlblByb3BzLm9uRm9jdXMpO1xuICAgIGNoaWxkcmVuUHJvcHMub25CbHVyID0gY29tcG9zZUV2ZW50SGFuZGxlcihoYW5kbGVCbHVyLCBjaGlsZHJlblByb3BzLm9uQmx1cik7XG4gICAgaWYgKCFkaXNhYmxlSW50ZXJhY3RpdmUpIHtcbiAgICAgIGludGVyYWN0aXZlV3JhcHBlckxpc3RlbmVycy5vbkZvY3VzID0gaGFuZGxlRm9jdXM7XG4gICAgICBpbnRlcmFjdGl2ZVdyYXBwZXJMaXN0ZW5lcnMub25CbHVyID0gaGFuZGxlQmx1cjtcbiAgICB9XG4gIH1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAoY2hpbGRyZW4ucHJvcHMudGl0bGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoWydNVUk6IFlvdSBoYXZlIHByb3ZpZGVkIGEgYHRpdGxlYCBwcm9wIHRvIHRoZSBjaGlsZCBvZiA8VG9vbHRpcCAvPi4nLCBgUmVtb3ZlIHRoaXMgdGl0bGUgcHJvcCBcXGAke2NoaWxkcmVuLnByb3BzLnRpdGxlfVxcYCBvciB0aGUgVG9vbHRpcCBjb21wb25lbnQuYF0uam9pbignXFxuJykpO1xuICAgIH1cbiAgfVxuICBjb25zdCBwb3BwZXJPcHRpb25zID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgdmFyIF9Qb3BwZXJQcm9wcyRwb3BwZXJPcDtcbiAgICBsZXQgdG9vbHRpcE1vZGlmaWVycyA9IFt7XG4gICAgICBuYW1lOiAnYXJyb3cnLFxuICAgICAgZW5hYmxlZDogQm9vbGVhbihhcnJvd1JlZiksXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIGVsZW1lbnQ6IGFycm93UmVmLFxuICAgICAgICBwYWRkaW5nOiA0XG4gICAgICB9XG4gICAgfV07XG4gICAgaWYgKChfUG9wcGVyUHJvcHMkcG9wcGVyT3AgPSBQb3BwZXJQcm9wcy5wb3BwZXJPcHRpb25zKSAhPSBudWxsICYmIF9Qb3BwZXJQcm9wcyRwb3BwZXJPcC5tb2RpZmllcnMpIHtcbiAgICAgIHRvb2x0aXBNb2RpZmllcnMgPSB0b29sdGlwTW9kaWZpZXJzLmNvbmNhdChQb3BwZXJQcm9wcy5wb3BwZXJPcHRpb25zLm1vZGlmaWVycyk7XG4gICAgfVxuICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgUG9wcGVyUHJvcHMucG9wcGVyT3B0aW9ucywge1xuICAgICAgbW9kaWZpZXJzOiB0b29sdGlwTW9kaWZpZXJzXG4gICAgfSk7XG4gIH0sIFthcnJvd1JlZiwgUG9wcGVyUHJvcHNdKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGlzUnRsLFxuICAgIGFycm93LFxuICAgIGRpc2FibGVJbnRlcmFjdGl2ZSxcbiAgICBwbGFjZW1lbnQsXG4gICAgUG9wcGVyQ29tcG9uZW50UHJvcCxcbiAgICB0b3VjaDogaWdub3JlTm9uVG91Y2hFdmVudHMuY3VycmVudFxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICBjb25zdCBQb3BwZXJDb21wb25lbnQgPSAoX3JlZiA9IChfc2xvdHMkcG9wcGVyID0gc2xvdHMucG9wcGVyKSAhPSBudWxsID8gX3Nsb3RzJHBvcHBlciA6IGNvbXBvbmVudHMuUG9wcGVyKSAhPSBudWxsID8gX3JlZiA6IFRvb2x0aXBQb3BwZXI7XG4gIGNvbnN0IFRyYW5zaXRpb25Db21wb25lbnQgPSAoX3JlZjIgPSAoX3JlZjMgPSAoX3Nsb3RzJHRyYW5zaXRpb24gPSBzbG90cy50cmFuc2l0aW9uKSAhPSBudWxsID8gX3Nsb3RzJHRyYW5zaXRpb24gOiBjb21wb25lbnRzLlRyYW5zaXRpb24pICE9IG51bGwgPyBfcmVmMyA6IFRyYW5zaXRpb25Db21wb25lbnRQcm9wKSAhPSBudWxsID8gX3JlZjIgOiBHcm93O1xuICBjb25zdCBUb29sdGlwQ29tcG9uZW50ID0gKF9yZWY0ID0gKF9zbG90cyR0b29sdGlwID0gc2xvdHMudG9vbHRpcCkgIT0gbnVsbCA/IF9zbG90cyR0b29sdGlwIDogY29tcG9uZW50cy5Ub29sdGlwKSAhPSBudWxsID8gX3JlZjQgOiBUb29sdGlwVG9vbHRpcDtcbiAgY29uc3QgQXJyb3dDb21wb25lbnQgPSAoX3JlZjUgPSAoX3Nsb3RzJGFycm93ID0gc2xvdHMuYXJyb3cpICE9IG51bGwgPyBfc2xvdHMkYXJyb3cgOiBjb21wb25lbnRzLkFycm93KSAhPSBudWxsID8gX3JlZjUgOiBUb29sdGlwQXJyb3c7XG4gIGNvbnN0IHBvcHBlclByb3BzID0gYXBwZW5kT3duZXJTdGF0ZShQb3BwZXJDb21wb25lbnQsIF9leHRlbmRzKHt9LCBQb3BwZXJQcm9wcywgKF9zbG90UHJvcHMkcG9wcGVyID0gc2xvdFByb3BzLnBvcHBlcikgIT0gbnVsbCA/IF9zbG90UHJvcHMkcG9wcGVyIDogY29tcG9uZW50c1Byb3BzLnBvcHBlciwge1xuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnBvcHBlciwgUG9wcGVyUHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IFBvcHBlclByb3BzLmNsYXNzTmFtZSwgKF9yZWY2ID0gKF9zbG90UHJvcHMkcG9wcGVyMiA9IHNsb3RQcm9wcy5wb3BwZXIpICE9IG51bGwgPyBfc2xvdFByb3BzJHBvcHBlcjIgOiBjb21wb25lbnRzUHJvcHMucG9wcGVyKSA9PSBudWxsID8gdm9pZCAwIDogX3JlZjYuY2xhc3NOYW1lKVxuICB9KSwgb3duZXJTdGF0ZSk7XG4gIGNvbnN0IHRyYW5zaXRpb25Qcm9wcyA9IGFwcGVuZE93bmVyU3RhdGUoVHJhbnNpdGlvbkNvbXBvbmVudCwgX2V4dGVuZHMoe30sIFRyYW5zaXRpb25Qcm9wcywgKF9zbG90UHJvcHMkdHJhbnNpdGlvbiA9IHNsb3RQcm9wcy50cmFuc2l0aW9uKSAhPSBudWxsID8gX3Nsb3RQcm9wcyR0cmFuc2l0aW9uIDogY29tcG9uZW50c1Byb3BzLnRyYW5zaXRpb24pLCBvd25lclN0YXRlKTtcbiAgY29uc3QgdG9vbHRpcFByb3BzID0gYXBwZW5kT3duZXJTdGF0ZShUb29sdGlwQ29tcG9uZW50LCBfZXh0ZW5kcyh7fSwgKF9zbG90UHJvcHMkdG9vbHRpcCA9IHNsb3RQcm9wcy50b29sdGlwKSAhPSBudWxsID8gX3Nsb3RQcm9wcyR0b29sdGlwIDogY29tcG9uZW50c1Byb3BzLnRvb2x0aXAsIHtcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy50b29sdGlwLCAoX3JlZjcgPSAoX3Nsb3RQcm9wcyR0b29sdGlwMiA9IHNsb3RQcm9wcy50b29sdGlwKSAhPSBudWxsID8gX3Nsb3RQcm9wcyR0b29sdGlwMiA6IGNvbXBvbmVudHNQcm9wcy50b29sdGlwKSA9PSBudWxsID8gdm9pZCAwIDogX3JlZjcuY2xhc3NOYW1lKVxuICB9KSwgb3duZXJTdGF0ZSk7XG4gIGNvbnN0IHRvb2x0aXBBcnJvd1Byb3BzID0gYXBwZW5kT3duZXJTdGF0ZShBcnJvd0NvbXBvbmVudCwgX2V4dGVuZHMoe30sIChfc2xvdFByb3BzJGFycm93ID0gc2xvdFByb3BzLmFycm93KSAhPSBudWxsID8gX3Nsb3RQcm9wcyRhcnJvdyA6IGNvbXBvbmVudHNQcm9wcy5hcnJvdywge1xuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLmFycm93LCAoX3JlZjggPSAoX3Nsb3RQcm9wcyRhcnJvdzIgPSBzbG90UHJvcHMuYXJyb3cpICE9IG51bGwgPyBfc2xvdFByb3BzJGFycm93MiA6IGNvbXBvbmVudHNQcm9wcy5hcnJvdykgPT0gbnVsbCA/IHZvaWQgMCA6IF9yZWY4LmNsYXNzTmFtZSlcbiAgfSksIG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKFJlYWN0LkZyYWdtZW50LCB7XG4gICAgY2hpbGRyZW46IFsvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCBjaGlsZHJlblByb3BzKSwgLyojX19QVVJFX18qL19qc3goUG9wcGVyQ29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgICBhczogUG9wcGVyQ29tcG9uZW50UHJvcCAhPSBudWxsID8gUG9wcGVyQ29tcG9uZW50UHJvcCA6IFBvcHBlcixcbiAgICAgIHBsYWNlbWVudDogcGxhY2VtZW50LFxuICAgICAgYW5jaG9yRWw6IGZvbGxvd0N1cnNvciA/IHtcbiAgICAgICAgZ2V0Qm91bmRpbmdDbGllbnRSZWN0OiAoKSA9PiAoe1xuICAgICAgICAgIHRvcDogY3Vyc29yUG9zaXRpb24ueSxcbiAgICAgICAgICBsZWZ0OiBjdXJzb3JQb3NpdGlvbi54LFxuICAgICAgICAgIHJpZ2h0OiBjdXJzb3JQb3NpdGlvbi54LFxuICAgICAgICAgIGJvdHRvbTogY3Vyc29yUG9zaXRpb24ueSxcbiAgICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgICBoZWlnaHQ6IDBcbiAgICAgICAgfSlcbiAgICAgIH0gOiBjaGlsZE5vZGUsXG4gICAgICBwb3BwZXJSZWY6IHBvcHBlclJlZixcbiAgICAgIG9wZW46IGNoaWxkTm9kZSA/IG9wZW4gOiBmYWxzZSxcbiAgICAgIGlkOiBpZCxcbiAgICAgIHRyYW5zaXRpb246IHRydWVcbiAgICB9LCBpbnRlcmFjdGl2ZVdyYXBwZXJMaXN0ZW5lcnMsIHBvcHBlclByb3BzLCB7XG4gICAgICBwb3BwZXJPcHRpb25zOiBwb3BwZXJPcHRpb25zLFxuICAgICAgY2hpbGRyZW46ICh7XG4gICAgICAgIFRyYW5zaXRpb25Qcm9wczogVHJhbnNpdGlvblByb3BzSW5uZXJcbiAgICAgIH0pID0+IC8qI19fUFVSRV9fKi9fanN4KFRyYW5zaXRpb25Db21wb25lbnQsIF9leHRlbmRzKHtcbiAgICAgICAgdGltZW91dDogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRlclxuICAgICAgfSwgVHJhbnNpdGlvblByb3BzSW5uZXIsIHRyYW5zaXRpb25Qcm9wcywge1xuICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3hzKFRvb2x0aXBDb21wb25lbnQsIF9leHRlbmRzKHt9LCB0b29sdGlwUHJvcHMsIHtcbiAgICAgICAgICBjaGlsZHJlbjogW3RpdGxlLCBhcnJvdyA/IC8qI19fUFVSRV9fKi9fanN4KEFycm93Q29tcG9uZW50LCBfZXh0ZW5kcyh7fSwgdG9vbHRpcEFycm93UHJvcHMsIHtcbiAgICAgICAgICAgIHJlZjogc2V0QXJyb3dSZWZcbiAgICAgICAgICB9KSkgOiBudWxsXVxuICAgICAgICB9KSlcbiAgICAgIH0pKVxuICAgIH0pKV1cbiAgfSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFRvb2x0aXAucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogSWYgYHRydWVgLCBhZGRzIGFuIGFycm93IHRvIHRoZSB0b29sdGlwLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgYXJyb3c6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVG9vbHRpcCByZWZlcmVuY2UgZWxlbWVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBlbGVtZW50QWNjZXB0aW5nUmVmLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZS5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYHNsb3RzYCBwcm9wLlxuICAgKiBJdCdzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgYHNsb3RzYCBwcm9wIGluc3RlYWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIEFycm93OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gICAgUG9wcGVyOiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gICAgVG9vbHRpcDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIFRyYW5zaXRpb246IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBleHRyYSBwcm9wcyBmb3IgdGhlIHNsb3QgY29tcG9uZW50cy5cbiAgICogWW91IGNhbiBvdmVycmlkZSB0aGUgZXhpc3RpbmcgcHJvcHMgb3IgYWRkIG5ldyBvbmVzLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgc2xvdFByb3BzYCBwcm9wLlxuICAgKiBJdCdzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgYHNsb3RQcm9wc2AgcHJvcCBpbnN0ZWFkLCBhcyBgY29tcG9uZW50c1Byb3BzYCB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGNvbXBvbmVudHNQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBhcnJvdzogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBwb3BwZXI6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgdG9vbHRpcDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICB0cmFuc2l0aW9uOiBQcm9wVHlwZXMub2JqZWN0XG4gIH0pLFxuICAvKipcbiAgICogU2V0IHRvIGB0cnVlYCBpZiB0aGUgYHRpdGxlYCBhY3RzIGFzIGFuIGFjY2Vzc2libGUgZGVzY3JpcHRpb24uXG4gICAqIEJ5IGRlZmF1bHQgdGhlIGB0aXRsZWAgYWN0cyBhcyBhbiBhY2Nlc3NpYmxlIGxhYmVsIGZvciB0aGUgY2hpbGQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkZXNjcmliZUNoaWxkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIERvIG5vdCByZXNwb25kIHRvIGZvY3VzLXZpc2libGUgZXZlbnRzLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUZvY3VzTGlzdGVuZXI6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogRG8gbm90IHJlc3BvbmQgdG8gaG92ZXIgZXZlbnRzLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUhvdmVyTGlzdGVuZXI6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogTWFrZXMgYSB0b29sdGlwIG5vdCBpbnRlcmFjdGl2ZSwgaS5lLiBpdCB3aWxsIGNsb3NlIHdoZW4gdGhlIHVzZXJcbiAgICogaG92ZXJzIG92ZXIgdGhlIHRvb2x0aXAgYmVmb3JlIHRoZSBgbGVhdmVEZWxheWAgaXMgZXhwaXJlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVJbnRlcmFjdGl2ZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBEbyBub3QgcmVzcG9uZCB0byBsb25nIHByZXNzIHRvdWNoIGV2ZW50cy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVUb3VjaExpc3RlbmVyOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgYmVmb3JlIHNob3dpbmcgdGhlIHRvb2x0aXAuXG4gICAqIFRoaXMgcHJvcCB3b24ndCBpbXBhY3QgdGhlIGVudGVyIHRvdWNoIGRlbGF5IChgZW50ZXJUb3VjaERlbGF5YCkuXG4gICAqIEBkZWZhdWx0IDEwMFxuICAgKi9cbiAgZW50ZXJEZWxheTogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgYmVmb3JlIHNob3dpbmcgdGhlIHRvb2x0aXAgd2hlbiBvbmUgd2FzIGFscmVhZHkgcmVjZW50bHkgb3BlbmVkLlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICBlbnRlck5leHREZWxheTogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGEgdXNlciBtdXN0IHRvdWNoIHRoZSBlbGVtZW50IGJlZm9yZSBzaG93aW5nIHRoZSB0b29sdGlwLlxuICAgKiBAZGVmYXVsdCA3MDBcbiAgICovXG4gIGVudGVyVG91Y2hEZWxheTogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHRvb2x0aXAgZm9sbG93IHRoZSBjdXJzb3Igb3ZlciB0aGUgd3JhcHBlZCBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZm9sbG93Q3Vyc29yOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoaXMgcHJvcCBpcyB1c2VkIHRvIGhlbHAgaW1wbGVtZW50IHRoZSBhY2Nlc3NpYmlsaXR5IGxvZ2ljLlxuICAgKiBJZiB5b3UgZG9uJ3QgcHJvdmlkZSB0aGlzIHByb3AuIEl0IGZhbGxzIGJhY2sgdG8gYSByYW5kb21seSBnZW5lcmF0ZWQgaWQuXG4gICAqL1xuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgYmVmb3JlIGhpZGluZyB0aGUgdG9vbHRpcC5cbiAgICogVGhpcyBwcm9wIHdvbid0IGltcGFjdCB0aGUgbGVhdmUgdG91Y2ggZGVsYXkgKGBsZWF2ZVRvdWNoRGVsYXlgKS5cbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgbGVhdmVEZWxheTogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGFmdGVyIHRoZSB1c2VyIHN0b3BzIHRvdWNoaW5nIGFuIGVsZW1lbnQgYmVmb3JlIGhpZGluZyB0aGUgdG9vbHRpcC5cbiAgICogQGRlZmF1bHQgMTUwMFxuICAgKi9cbiAgbGVhdmVUb3VjaERlbGF5OiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgY29tcG9uZW50IHJlcXVlc3RzIHRvIGJlIGNsb3NlZC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdC5TeW50aGV0aWNFdmVudH0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqL1xuICBvbkNsb3NlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIGNvbXBvbmVudCByZXF1ZXN0cyB0byBiZSBvcGVuLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0LlN5bnRoZXRpY0V2ZW50fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICovXG4gIG9uT3BlbjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgc2hvd24uXG4gICAqL1xuICBvcGVuOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRvb2x0aXAgcGxhY2VtZW50LlxuICAgKiBAZGVmYXVsdCAnYm90dG9tJ1xuICAgKi9cbiAgcGxhY2VtZW50OiBQcm9wVHlwZXMub25lT2YoWydib3R0b20tZW5kJywgJ2JvdHRvbS1zdGFydCcsICdib3R0b20nLCAnbGVmdC1lbmQnLCAnbGVmdC1zdGFydCcsICdsZWZ0JywgJ3JpZ2h0LWVuZCcsICdyaWdodC1zdGFydCcsICdyaWdodCcsICd0b3AtZW5kJywgJ3RvcC1zdGFydCcsICd0b3AnXSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSBwb3BwZXIuXG4gICAqIEBkZWZhdWx0IFBvcHBlclxuICAgKi9cbiAgUG9wcGVyQ29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSBbYFBvcHBlcmBdKC9tYXRlcmlhbC11aS9hcGkvcG9wcGVyLykgZWxlbWVudC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIFBvcHBlclByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogVGhlIGV4dHJhIHByb3BzIGZvciB0aGUgc2xvdCBjb21wb25lbnRzLlxuICAgKiBZb3UgY2FuIG92ZXJyaWRlIHRoZSBleGlzdGluZyBwcm9wcyBvciBhZGQgbmV3IG9uZXMuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBjb21wb25lbnRzUHJvcHNgIHByb3AsIHdoaWNoIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgZnV0dXJlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGFycm93OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHBvcHBlcjogUHJvcFR5cGVzLm9iamVjdCxcbiAgICB0b29sdGlwOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHRyYW5zaXRpb246IFByb3BUeXBlcy5vYmplY3RcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50cyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgY29tcG9uZW50c2AgcHJvcCwgd2hpY2ggd2lsbCBiZSBkZXByZWNhdGVkIGluIHRoZSBmdXR1cmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBhcnJvdzogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIHBvcHBlcjogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIHRvb2x0aXA6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgICB0cmFuc2l0aW9uOiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUb29sdGlwIHRpdGxlLiBaZXJvLWxlbmd0aCB0aXRsZXMgc3RyaW5nLCB1bmRlZmluZWQsIG51bGwgYW5kIGZhbHNlIGFyZSBuZXZlciBkaXNwbGF5ZWQuXG4gICAqL1xuICB0aXRsZTogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSB0cmFuc2l0aW9uLlxuICAgKiBbRm9sbG93IHRoaXMgZ3VpZGVdKC9tYXRlcmlhbC11aS90cmFuc2l0aW9ucy8jdHJhbnNpdGlvbmNvbXBvbmVudC1wcm9wKSB0byBsZWFybiBtb3JlIGFib3V0IHRoZSByZXF1aXJlbWVudHMgZm9yIHRoaXMgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCBHcm93XG4gICAqL1xuICBUcmFuc2l0aW9uQ29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSB0cmFuc2l0aW9uIGVsZW1lbnQuXG4gICAqIEJ5IGRlZmF1bHQsIHRoZSBlbGVtZW50IGlzIGJhc2VkIG9uIHRoaXMgW2BUcmFuc2l0aW9uYF0oaHR0cHM6Ly9yZWFjdGNvbW11bml0eS5vcmcvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC90cmFuc2l0aW9uLykgY29tcG9uZW50LlxuICAgKi9cbiAgVHJhbnNpdGlvblByb3BzOiBQcm9wVHlwZXMub2JqZWN0XG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgVG9vbHRpcDsiLCIvLyBzcmMvdXRpbHMvZm9ybWF0UHJvZEVycm9yTWVzc2FnZS50c1xuZnVuY3Rpb24gZm9ybWF0UHJvZEVycm9yTWVzc2FnZShjb2RlKSB7XG4gIHJldHVybiBgTWluaWZpZWQgUmVkdXggZXJyb3IgIyR7Y29kZX07IHZpc2l0IGh0dHBzOi8vcmVkdXguanMub3JnL0Vycm9ycz9jb2RlPSR7Y29kZX0gZm9yIHRoZSBmdWxsIG1lc3NhZ2Ugb3IgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciBmdWxsIGVycm9ycy4gYDtcbn1cblxuLy8gc3JjL3V0aWxzL3N5bWJvbC1vYnNlcnZhYmxlLnRzXG52YXIgJCRvYnNlcnZhYmxlID0gLyogQF9fUFVSRV9fICovICgoKSA9PiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLm9ic2VydmFibGUgfHwgXCJAQG9ic2VydmFibGVcIikoKTtcbnZhciBzeW1ib2xfb2JzZXJ2YWJsZV9kZWZhdWx0ID0gJCRvYnNlcnZhYmxlO1xuXG4vLyBzcmMvdXRpbHMvYWN0aW9uVHlwZXMudHNcbnZhciByYW5kb21TdHJpbmcgPSAoKSA9PiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoNykuc3BsaXQoXCJcIikuam9pbihcIi5cIik7XG52YXIgQWN0aW9uVHlwZXMgPSB7XG4gIElOSVQ6IGBAQHJlZHV4L0lOSVQkey8qIEBfX1BVUkVfXyAqLyByYW5kb21TdHJpbmcoKX1gLFxuICBSRVBMQUNFOiBgQEByZWR1eC9SRVBMQUNFJHsvKiBAX19QVVJFX18gKi8gcmFuZG9tU3RyaW5nKCl9YCxcbiAgUFJPQkVfVU5LTk9XTl9BQ1RJT046ICgpID0+IGBAQHJlZHV4L1BST0JFX1VOS05PV05fQUNUSU9OJHtyYW5kb21TdHJpbmcoKX1gXG59O1xudmFyIGFjdGlvblR5cGVzX2RlZmF1bHQgPSBBY3Rpb25UeXBlcztcblxuLy8gc3JjL3V0aWxzL2lzUGxhaW5PYmplY3QudHNcbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3Qob2JqKSB7XG4gIGlmICh0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiIHx8IG9iaiA9PT0gbnVsbClcbiAgICByZXR1cm4gZmFsc2U7XG4gIGxldCBwcm90byA9IG9iajtcbiAgd2hpbGUgKE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90bykgIT09IG51bGwpIHtcbiAgICBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90byk7XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopID09PSBwcm90byB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKSA9PT0gbnVsbDtcbn1cblxuLy8gc3JjL3V0aWxzL2tpbmRPZi50c1xuZnVuY3Rpb24gbWluaUtpbmRPZih2YWwpIHtcbiAgaWYgKHZhbCA9PT0gdm9pZCAwKVxuICAgIHJldHVybiBcInVuZGVmaW5lZFwiO1xuICBpZiAodmFsID09PSBudWxsKVxuICAgIHJldHVybiBcIm51bGxcIjtcbiAgY29uc3QgdHlwZSA9IHR5cGVvZiB2YWw7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgY2FzZSBcInN0cmluZ1wiOlxuICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICBjYXNlIFwic3ltYm9sXCI6XG4gICAgY2FzZSBcImZ1bmN0aW9uXCI6IHtcbiAgICAgIHJldHVybiB0eXBlO1xuICAgIH1cbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKVxuICAgIHJldHVybiBcImFycmF5XCI7XG4gIGlmIChpc0RhdGUodmFsKSlcbiAgICByZXR1cm4gXCJkYXRlXCI7XG4gIGlmIChpc0Vycm9yKHZhbCkpXG4gICAgcmV0dXJuIFwiZXJyb3JcIjtcbiAgY29uc3QgY29uc3RydWN0b3JOYW1lID0gY3Rvck5hbWUodmFsKTtcbiAgc3dpdGNoIChjb25zdHJ1Y3Rvck5hbWUpIHtcbiAgICBjYXNlIFwiU3ltYm9sXCI6XG4gICAgY2FzZSBcIlByb21pc2VcIjpcbiAgICBjYXNlIFwiV2Vha01hcFwiOlxuICAgIGNhc2UgXCJXZWFrU2V0XCI6XG4gICAgY2FzZSBcIk1hcFwiOlxuICAgIGNhc2UgXCJTZXRcIjpcbiAgICAgIHJldHVybiBjb25zdHJ1Y3Rvck5hbWU7XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWwpLnNsaWNlKDgsIC0xKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xccy9nLCBcIlwiKTtcbn1cbmZ1bmN0aW9uIGN0b3JOYW1lKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbC5jb25zdHJ1Y3RvciA9PT0gXCJmdW5jdGlvblwiID8gdmFsLmNvbnN0cnVjdG9yLm5hbWUgOiBudWxsO1xufVxuZnVuY3Rpb24gaXNFcnJvcih2YWwpIHtcbiAgcmV0dXJuIHZhbCBpbnN0YW5jZW9mIEVycm9yIHx8IHR5cGVvZiB2YWwubWVzc2FnZSA9PT0gXCJzdHJpbmdcIiAmJiB2YWwuY29uc3RydWN0b3IgJiYgdHlwZW9mIHZhbC5jb25zdHJ1Y3Rvci5zdGFja1RyYWNlTGltaXQgPT09IFwibnVtYmVyXCI7XG59XG5mdW5jdGlvbiBpc0RhdGUodmFsKSB7XG4gIGlmICh2YWwgaW5zdGFuY2VvZiBEYXRlKVxuICAgIHJldHVybiB0cnVlO1xuICByZXR1cm4gdHlwZW9mIHZhbC50b0RhdGVTdHJpbmcgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgdmFsLmdldERhdGUgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgdmFsLnNldERhdGUgPT09IFwiZnVuY3Rpb25cIjtcbn1cbmZ1bmN0aW9uIGtpbmRPZih2YWwpIHtcbiAgbGV0IHR5cGVPZlZhbCA9IHR5cGVvZiB2YWw7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICB0eXBlT2ZWYWwgPSBtaW5pS2luZE9mKHZhbCk7XG4gIH1cbiAgcmV0dXJuIHR5cGVPZlZhbDtcbn1cblxuLy8gc3JjL2NyZWF0ZVN0b3JlLnRzXG5mdW5jdGlvbiBjcmVhdGVTdG9yZShyZWR1Y2VyLCBwcmVsb2FkZWRTdGF0ZSwgZW5oYW5jZXIpIHtcbiAgaWYgKHR5cGVvZiByZWR1Y2VyICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgyKSA6IGBFeHBlY3RlZCB0aGUgcm9vdCByZWR1Y2VyIHRvIGJlIGEgZnVuY3Rpb24uIEluc3RlYWQsIHJlY2VpdmVkOiAnJHtraW5kT2YocmVkdWNlcil9J2ApO1xuICB9XG4gIGlmICh0eXBlb2YgcHJlbG9hZGVkU3RhdGUgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgZW5oYW5jZXIgPT09IFwiZnVuY3Rpb25cIiB8fCB0eXBlb2YgZW5oYW5jZXIgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgYXJndW1lbnRzWzNdID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgwKSA6IFwiSXQgbG9va3MgbGlrZSB5b3UgYXJlIHBhc3Npbmcgc2V2ZXJhbCBzdG9yZSBlbmhhbmNlcnMgdG8gY3JlYXRlU3RvcmUoKS4gVGhpcyBpcyBub3Qgc3VwcG9ydGVkLiBJbnN0ZWFkLCBjb21wb3NlIHRoZW0gdG9nZXRoZXIgdG8gYSBzaW5nbGUgZnVuY3Rpb24uIFNlZSBodHRwczovL3JlZHV4LmpzLm9yZy90dXRvcmlhbHMvZnVuZGFtZW50YWxzL3BhcnQtNC1zdG9yZSNjcmVhdGluZy1hLXN0b3JlLXdpdGgtZW5oYW5jZXJzIGZvciBhbiBleGFtcGxlLlwiKTtcbiAgfVxuICBpZiAodHlwZW9mIHByZWxvYWRlZFN0YXRlID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIGVuaGFuY2VyID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgZW5oYW5jZXIgPSBwcmVsb2FkZWRTdGF0ZTtcbiAgICBwcmVsb2FkZWRTdGF0ZSA9IHZvaWQgMDtcbiAgfVxuICBpZiAodHlwZW9mIGVuaGFuY2VyICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgaWYgKHR5cGVvZiBlbmhhbmNlciAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxKSA6IGBFeHBlY3RlZCB0aGUgZW5oYW5jZXIgdG8gYmUgYSBmdW5jdGlvbi4gSW5zdGVhZCwgcmVjZWl2ZWQ6ICcke2tpbmRPZihlbmhhbmNlcil9J2ApO1xuICAgIH1cbiAgICByZXR1cm4gZW5oYW5jZXIoY3JlYXRlU3RvcmUpKHJlZHVjZXIsIHByZWxvYWRlZFN0YXRlKTtcbiAgfVxuICBsZXQgY3VycmVudFJlZHVjZXIgPSByZWR1Y2VyO1xuICBsZXQgY3VycmVudFN0YXRlID0gcHJlbG9hZGVkU3RhdGU7XG4gIGxldCBjdXJyZW50TGlzdGVuZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgbGV0IG5leHRMaXN0ZW5lcnMgPSBjdXJyZW50TGlzdGVuZXJzO1xuICBsZXQgbGlzdGVuZXJJZENvdW50ZXIgPSAwO1xuICBsZXQgaXNEaXNwYXRjaGluZyA9IGZhbHNlO1xuICBmdW5jdGlvbiBlbnN1cmVDYW5NdXRhdGVOZXh0TGlzdGVuZXJzKCkge1xuICAgIGlmIChuZXh0TGlzdGVuZXJzID09PSBjdXJyZW50TGlzdGVuZXJzKSB7XG4gICAgICBuZXh0TGlzdGVuZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgICAgIGN1cnJlbnRMaXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIsIGtleSkgPT4ge1xuICAgICAgICBuZXh0TGlzdGVuZXJzLnNldChrZXksIGxpc3RlbmVyKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBnZXRTdGF0ZSgpIHtcbiAgICBpZiAoaXNEaXNwYXRjaGluZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMykgOiBcIllvdSBtYXkgbm90IGNhbGwgc3RvcmUuZ2V0U3RhdGUoKSB3aGlsZSB0aGUgcmVkdWNlciBpcyBleGVjdXRpbmcuIFRoZSByZWR1Y2VyIGhhcyBhbHJlYWR5IHJlY2VpdmVkIHRoZSBzdGF0ZSBhcyBhbiBhcmd1bWVudC4gUGFzcyBpdCBkb3duIGZyb20gdGhlIHRvcCByZWR1Y2VyIGluc3RlYWQgb2YgcmVhZGluZyBpdCBmcm9tIHRoZSBzdG9yZS5cIik7XG4gICAgfVxuICAgIHJldHVybiBjdXJyZW50U3RhdGU7XG4gIH1cbiAgZnVuY3Rpb24gc3Vic2NyaWJlKGxpc3RlbmVyKSB7XG4gICAgaWYgKHR5cGVvZiBsaXN0ZW5lciAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSg0KSA6IGBFeHBlY3RlZCB0aGUgbGlzdGVuZXIgdG8gYmUgYSBmdW5jdGlvbi4gSW5zdGVhZCwgcmVjZWl2ZWQ6ICcke2tpbmRPZihsaXN0ZW5lcil9J2ApO1xuICAgIH1cbiAgICBpZiAoaXNEaXNwYXRjaGluZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoNSkgOiBcIllvdSBtYXkgbm90IGNhbGwgc3RvcmUuc3Vic2NyaWJlKCkgd2hpbGUgdGhlIHJlZHVjZXIgaXMgZXhlY3V0aW5nLiBJZiB5b3Ugd291bGQgbGlrZSB0byBiZSBub3RpZmllZCBhZnRlciB0aGUgc3RvcmUgaGFzIGJlZW4gdXBkYXRlZCwgc3Vic2NyaWJlIGZyb20gYSBjb21wb25lbnQgYW5kIGludm9rZSBzdG9yZS5nZXRTdGF0ZSgpIGluIHRoZSBjYWxsYmFjayB0byBhY2Nlc3MgdGhlIGxhdGVzdCBzdGF0ZS4gU2VlIGh0dHBzOi8vcmVkdXguanMub3JnL2FwaS9zdG9yZSNzdWJzY3JpYmVsaXN0ZW5lciBmb3IgbW9yZSBkZXRhaWxzLlwiKTtcbiAgICB9XG4gICAgbGV0IGlzU3Vic2NyaWJlZCA9IHRydWU7XG4gICAgZW5zdXJlQ2FuTXV0YXRlTmV4dExpc3RlbmVycygpO1xuICAgIGNvbnN0IGxpc3RlbmVySWQgPSBsaXN0ZW5lcklkQ291bnRlcisrO1xuICAgIG5leHRMaXN0ZW5lcnMuc2V0KGxpc3RlbmVySWQsIGxpc3RlbmVyKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gdW5zdWJzY3JpYmUoKSB7XG4gICAgICBpZiAoIWlzU3Vic2NyaWJlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoaXNEaXNwYXRjaGluZykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSg2KSA6IFwiWW91IG1heSBub3QgdW5zdWJzY3JpYmUgZnJvbSBhIHN0b3JlIGxpc3RlbmVyIHdoaWxlIHRoZSByZWR1Y2VyIGlzIGV4ZWN1dGluZy4gU2VlIGh0dHBzOi8vcmVkdXguanMub3JnL2FwaS9zdG9yZSNzdWJzY3JpYmVsaXN0ZW5lciBmb3IgbW9yZSBkZXRhaWxzLlwiKTtcbiAgICAgIH1cbiAgICAgIGlzU3Vic2NyaWJlZCA9IGZhbHNlO1xuICAgICAgZW5zdXJlQ2FuTXV0YXRlTmV4dExpc3RlbmVycygpO1xuICAgICAgbmV4dExpc3RlbmVycy5kZWxldGUobGlzdGVuZXJJZCk7XG4gICAgICBjdXJyZW50TGlzdGVuZXJzID0gbnVsbDtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGRpc3BhdGNoKGFjdGlvbikge1xuICAgIGlmICghaXNQbGFpbk9iamVjdChhY3Rpb24pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSg3KSA6IGBBY3Rpb25zIG11c3QgYmUgcGxhaW4gb2JqZWN0cy4gSW5zdGVhZCwgdGhlIGFjdHVhbCB0eXBlIHdhczogJyR7a2luZE9mKGFjdGlvbil9Jy4gWW91IG1heSBuZWVkIHRvIGFkZCBtaWRkbGV3YXJlIHRvIHlvdXIgc3RvcmUgc2V0dXAgdG8gaGFuZGxlIGRpc3BhdGNoaW5nIG90aGVyIHZhbHVlcywgc3VjaCBhcyAncmVkdXgtdGh1bmsnIHRvIGhhbmRsZSBkaXNwYXRjaGluZyBmdW5jdGlvbnMuIFNlZSBodHRwczovL3JlZHV4LmpzLm9yZy90dXRvcmlhbHMvZnVuZGFtZW50YWxzL3BhcnQtNC1zdG9yZSNtaWRkbGV3YXJlIGFuZCBodHRwczovL3JlZHV4LmpzLm9yZy90dXRvcmlhbHMvZnVuZGFtZW50YWxzL3BhcnQtNi1hc3luYy1sb2dpYyN1c2luZy10aGUtcmVkdXgtdGh1bmstbWlkZGxld2FyZSBmb3IgZXhhbXBsZXMuYCk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgYWN0aW9uLnR5cGUgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDgpIDogJ0FjdGlvbnMgbWF5IG5vdCBoYXZlIGFuIHVuZGVmaW5lZCBcInR5cGVcIiBwcm9wZXJ0eS4gWW91IG1heSBoYXZlIG1pc3NwZWxsZWQgYW4gYWN0aW9uIHR5cGUgc3RyaW5nIGNvbnN0YW50LicpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGFjdGlvbi50eXBlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxNykgOiBgQWN0aW9uIFwidHlwZVwiIHByb3BlcnR5IG11c3QgYmUgYSBzdHJpbmcuIEluc3RlYWQsIHRoZSBhY3R1YWwgdHlwZSB3YXM6ICcke2tpbmRPZihhY3Rpb24udHlwZSl9Jy4gVmFsdWUgd2FzOiAnJHthY3Rpb24udHlwZX0nIChzdHJpbmdpZmllZClgKTtcbiAgICB9XG4gICAgaWYgKGlzRGlzcGF0Y2hpbmcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDkpIDogXCJSZWR1Y2VycyBtYXkgbm90IGRpc3BhdGNoIGFjdGlvbnMuXCIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgaXNEaXNwYXRjaGluZyA9IHRydWU7XG4gICAgICBjdXJyZW50U3RhdGUgPSBjdXJyZW50UmVkdWNlcihjdXJyZW50U3RhdGUsIGFjdGlvbik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlzRGlzcGF0Y2hpbmcgPSBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgbGlzdGVuZXJzID0gY3VycmVudExpc3RlbmVycyA9IG5leHRMaXN0ZW5lcnM7XG4gICAgbGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyKSA9PiB7XG4gICAgICBsaXN0ZW5lcigpO1xuICAgIH0pO1xuICAgIHJldHVybiBhY3Rpb247XG4gIH1cbiAgZnVuY3Rpb24gcmVwbGFjZVJlZHVjZXIobmV4dFJlZHVjZXIpIHtcbiAgICBpZiAodHlwZW9mIG5leHRSZWR1Y2VyICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDEwKSA6IGBFeHBlY3RlZCB0aGUgbmV4dFJlZHVjZXIgdG8gYmUgYSBmdW5jdGlvbi4gSW5zdGVhZCwgcmVjZWl2ZWQ6ICcke2tpbmRPZihuZXh0UmVkdWNlcil9YCk7XG4gICAgfVxuICAgIGN1cnJlbnRSZWR1Y2VyID0gbmV4dFJlZHVjZXI7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogYWN0aW9uVHlwZXNfZGVmYXVsdC5SRVBMQUNFXG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gb2JzZXJ2YWJsZSgpIHtcbiAgICBjb25zdCBvdXRlclN1YnNjcmliZSA9IHN1YnNjcmliZTtcbiAgICByZXR1cm4ge1xuICAgICAgLyoqXG4gICAgICAgKiBUaGUgbWluaW1hbCBvYnNlcnZhYmxlIHN1YnNjcmlwdGlvbiBtZXRob2QuXG4gICAgICAgKiBAcGFyYW0gb2JzZXJ2ZXIgQW55IG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIGFzIGFuIG9ic2VydmVyLlxuICAgICAgICogVGhlIG9ic2VydmVyIG9iamVjdCBzaG91bGQgaGF2ZSBhIGBuZXh0YCBtZXRob2QuXG4gICAgICAgKiBAcmV0dXJucyBBbiBvYmplY3Qgd2l0aCBhbiBgdW5zdWJzY3JpYmVgIG1ldGhvZCB0aGF0IGNhblxuICAgICAgICogYmUgdXNlZCB0byB1bnN1YnNjcmliZSB0aGUgb2JzZXJ2YWJsZSBmcm9tIHRoZSBzdG9yZSwgYW5kIHByZXZlbnQgZnVydGhlclxuICAgICAgICogZW1pc3Npb24gb2YgdmFsdWVzIGZyb20gdGhlIG9ic2VydmFibGUuXG4gICAgICAgKi9cbiAgICAgIHN1YnNjcmliZShvYnNlcnZlcikge1xuICAgICAgICBpZiAodHlwZW9mIG9ic2VydmVyICE9PSBcIm9iamVjdFwiIHx8IG9ic2VydmVyID09PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMTEpIDogYEV4cGVjdGVkIHRoZSBvYnNlcnZlciB0byBiZSBhbiBvYmplY3QuIEluc3RlYWQsIHJlY2VpdmVkOiAnJHtraW5kT2Yob2JzZXJ2ZXIpfSdgKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBvYnNlcnZlU3RhdGUoKSB7XG4gICAgICAgICAgY29uc3Qgb2JzZXJ2ZXJBc09ic2VydmVyID0gb2JzZXJ2ZXI7XG4gICAgICAgICAgaWYgKG9ic2VydmVyQXNPYnNlcnZlci5uZXh0KSB7XG4gICAgICAgICAgICBvYnNlcnZlckFzT2JzZXJ2ZXIubmV4dChnZXRTdGF0ZSgpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb2JzZXJ2ZVN0YXRlKCk7XG4gICAgICAgIGNvbnN0IHVuc3Vic2NyaWJlID0gb3V0ZXJTdWJzY3JpYmUob2JzZXJ2ZVN0YXRlKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB1bnN1YnNjcmliZVxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIFtzeW1ib2xfb2JzZXJ2YWJsZV9kZWZhdWx0XSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBkaXNwYXRjaCh7XG4gICAgdHlwZTogYWN0aW9uVHlwZXNfZGVmYXVsdC5JTklUXG4gIH0pO1xuICBjb25zdCBzdG9yZSA9IHtcbiAgICBkaXNwYXRjaCxcbiAgICBzdWJzY3JpYmUsXG4gICAgZ2V0U3RhdGUsXG4gICAgcmVwbGFjZVJlZHVjZXIsXG4gICAgW3N5bWJvbF9vYnNlcnZhYmxlX2RlZmF1bHRdOiBvYnNlcnZhYmxlXG4gIH07XG4gIHJldHVybiBzdG9yZTtcbn1cbmZ1bmN0aW9uIGxlZ2FjeV9jcmVhdGVTdG9yZShyZWR1Y2VyLCBwcmVsb2FkZWRTdGF0ZSwgZW5oYW5jZXIpIHtcbiAgcmV0dXJuIGNyZWF0ZVN0b3JlKHJlZHVjZXIsIHByZWxvYWRlZFN0YXRlLCBlbmhhbmNlcik7XG59XG5cbi8vIHNyYy91dGlscy93YXJuaW5nLnRzXG5mdW5jdGlvbiB3YXJuaW5nKG1lc3NhZ2UpIHtcbiAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBjb25zb2xlLmVycm9yID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuICB9XG4gIHRyeSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICB9IGNhdGNoIChlKSB7XG4gIH1cbn1cblxuLy8gc3JjL2NvbWJpbmVSZWR1Y2Vycy50c1xuZnVuY3Rpb24gZ2V0VW5leHBlY3RlZFN0YXRlU2hhcGVXYXJuaW5nTWVzc2FnZShpbnB1dFN0YXRlLCByZWR1Y2VycywgYWN0aW9uLCB1bmV4cGVjdGVkS2V5Q2FjaGUpIHtcbiAgY29uc3QgcmVkdWNlcktleXMgPSBPYmplY3Qua2V5cyhyZWR1Y2Vycyk7XG4gIGNvbnN0IGFyZ3VtZW50TmFtZSA9IGFjdGlvbiAmJiBhY3Rpb24udHlwZSA9PT0gYWN0aW9uVHlwZXNfZGVmYXVsdC5JTklUID8gXCJwcmVsb2FkZWRTdGF0ZSBhcmd1bWVudCBwYXNzZWQgdG8gY3JlYXRlU3RvcmVcIiA6IFwicHJldmlvdXMgc3RhdGUgcmVjZWl2ZWQgYnkgdGhlIHJlZHVjZXJcIjtcbiAgaWYgKHJlZHVjZXJLZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBcIlN0b3JlIGRvZXMgbm90IGhhdmUgYSB2YWxpZCByZWR1Y2VyLiBNYWtlIHN1cmUgdGhlIGFyZ3VtZW50IHBhc3NlZCB0byBjb21iaW5lUmVkdWNlcnMgaXMgYW4gb2JqZWN0IHdob3NlIHZhbHVlcyBhcmUgcmVkdWNlcnMuXCI7XG4gIH1cbiAgaWYgKCFpc1BsYWluT2JqZWN0KGlucHV0U3RhdGUpKSB7XG4gICAgcmV0dXJuIGBUaGUgJHthcmd1bWVudE5hbWV9IGhhcyB1bmV4cGVjdGVkIHR5cGUgb2YgXCIke2tpbmRPZihpbnB1dFN0YXRlKX1cIi4gRXhwZWN0ZWQgYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBrZXlzOiBcIiR7cmVkdWNlcktleXMuam9pbignXCIsIFwiJyl9XCJgO1xuICB9XG4gIGNvbnN0IHVuZXhwZWN0ZWRLZXlzID0gT2JqZWN0LmtleXMoaW5wdXRTdGF0ZSkuZmlsdGVyKChrZXkpID0+ICFyZWR1Y2Vycy5oYXNPd25Qcm9wZXJ0eShrZXkpICYmICF1bmV4cGVjdGVkS2V5Q2FjaGVba2V5XSk7XG4gIHVuZXhwZWN0ZWRLZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgIHVuZXhwZWN0ZWRLZXlDYWNoZVtrZXldID0gdHJ1ZTtcbiAgfSk7XG4gIGlmIChhY3Rpb24gJiYgYWN0aW9uLnR5cGUgPT09IGFjdGlvblR5cGVzX2RlZmF1bHQuUkVQTEFDRSlcbiAgICByZXR1cm47XG4gIGlmICh1bmV4cGVjdGVkS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIGBVbmV4cGVjdGVkICR7dW5leHBlY3RlZEtleXMubGVuZ3RoID4gMSA/IFwia2V5c1wiIDogXCJrZXlcIn0gXCIke3VuZXhwZWN0ZWRLZXlzLmpvaW4oJ1wiLCBcIicpfVwiIGZvdW5kIGluICR7YXJndW1lbnROYW1lfS4gRXhwZWN0ZWQgdG8gZmluZCBvbmUgb2YgdGhlIGtub3duIHJlZHVjZXIga2V5cyBpbnN0ZWFkOiBcIiR7cmVkdWNlcktleXMuam9pbignXCIsIFwiJyl9XCIuIFVuZXhwZWN0ZWQga2V5cyB3aWxsIGJlIGlnbm9yZWQuYDtcbiAgfVxufVxuZnVuY3Rpb24gYXNzZXJ0UmVkdWNlclNoYXBlKHJlZHVjZXJzKSB7XG4gIE9iamVjdC5rZXlzKHJlZHVjZXJzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICBjb25zdCByZWR1Y2VyID0gcmVkdWNlcnNba2V5XTtcbiAgICBjb25zdCBpbml0aWFsU3RhdGUgPSByZWR1Y2VyKHZvaWQgMCwge1xuICAgICAgdHlwZTogYWN0aW9uVHlwZXNfZGVmYXVsdC5JTklUXG4gICAgfSk7XG4gICAgaWYgKHR5cGVvZiBpbml0aWFsU3RhdGUgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDEyKSA6IGBUaGUgc2xpY2UgcmVkdWNlciBmb3Iga2V5IFwiJHtrZXl9XCIgcmV0dXJuZWQgdW5kZWZpbmVkIGR1cmluZyBpbml0aWFsaXphdGlvbi4gSWYgdGhlIHN0YXRlIHBhc3NlZCB0byB0aGUgcmVkdWNlciBpcyB1bmRlZmluZWQsIHlvdSBtdXN0IGV4cGxpY2l0bHkgcmV0dXJuIHRoZSBpbml0aWFsIHN0YXRlLiBUaGUgaW5pdGlhbCBzdGF0ZSBtYXkgbm90IGJlIHVuZGVmaW5lZC4gSWYgeW91IGRvbid0IHdhbnQgdG8gc2V0IGEgdmFsdWUgZm9yIHRoaXMgcmVkdWNlciwgeW91IGNhbiB1c2UgbnVsbCBpbnN0ZWFkIG9mIHVuZGVmaW5lZC5gKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiByZWR1Y2VyKHZvaWQgMCwge1xuICAgICAgdHlwZTogYWN0aW9uVHlwZXNfZGVmYXVsdC5QUk9CRV9VTktOT1dOX0FDVElPTigpXG4gICAgfSkgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDEzKSA6IGBUaGUgc2xpY2UgcmVkdWNlciBmb3Iga2V5IFwiJHtrZXl9XCIgcmV0dXJuZWQgdW5kZWZpbmVkIHdoZW4gcHJvYmVkIHdpdGggYSByYW5kb20gdHlwZS4gRG9uJ3QgdHJ5IHRvIGhhbmRsZSAnJHthY3Rpb25UeXBlc19kZWZhdWx0LklOSVR9JyBvciBvdGhlciBhY3Rpb25zIGluIFwicmVkdXgvKlwiIG5hbWVzcGFjZS4gVGhleSBhcmUgY29uc2lkZXJlZCBwcml2YXRlLiBJbnN0ZWFkLCB5b3UgbXVzdCByZXR1cm4gdGhlIGN1cnJlbnQgc3RhdGUgZm9yIGFueSB1bmtub3duIGFjdGlvbnMsIHVubGVzcyBpdCBpcyB1bmRlZmluZWQsIGluIHdoaWNoIGNhc2UgeW91IG11c3QgcmV0dXJuIHRoZSBpbml0aWFsIHN0YXRlLCByZWdhcmRsZXNzIG9mIHRoZSBhY3Rpb24gdHlwZS4gVGhlIGluaXRpYWwgc3RhdGUgbWF5IG5vdCBiZSB1bmRlZmluZWQsIGJ1dCBjYW4gYmUgbnVsbC5gKTtcbiAgICB9XG4gIH0pO1xufVxuZnVuY3Rpb24gY29tYmluZVJlZHVjZXJzKHJlZHVjZXJzKSB7XG4gIGNvbnN0IHJlZHVjZXJLZXlzID0gT2JqZWN0LmtleXMocmVkdWNlcnMpO1xuICBjb25zdCBmaW5hbFJlZHVjZXJzID0ge307XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVkdWNlcktleXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBrZXkgPSByZWR1Y2VyS2V5c1tpXTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICBpZiAodHlwZW9mIHJlZHVjZXJzW2tleV0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgd2FybmluZyhgTm8gcmVkdWNlciBwcm92aWRlZCBmb3Iga2V5IFwiJHtrZXl9XCJgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHR5cGVvZiByZWR1Y2Vyc1trZXldID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIGZpbmFsUmVkdWNlcnNba2V5XSA9IHJlZHVjZXJzW2tleV07XG4gICAgfVxuICB9XG4gIGNvbnN0IGZpbmFsUmVkdWNlcktleXMgPSBPYmplY3Qua2V5cyhmaW5hbFJlZHVjZXJzKTtcbiAgbGV0IHVuZXhwZWN0ZWRLZXlDYWNoZTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgIHVuZXhwZWN0ZWRLZXlDYWNoZSA9IHt9O1xuICB9XG4gIGxldCBzaGFwZUFzc2VydGlvbkVycm9yO1xuICB0cnkge1xuICAgIGFzc2VydFJlZHVjZXJTaGFwZShmaW5hbFJlZHVjZXJzKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHNoYXBlQXNzZXJ0aW9uRXJyb3IgPSBlO1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiBjb21iaW5hdGlvbihzdGF0ZSA9IHt9LCBhY3Rpb24pIHtcbiAgICBpZiAoc2hhcGVBc3NlcnRpb25FcnJvcikge1xuICAgICAgdGhyb3cgc2hhcGVBc3NlcnRpb25FcnJvcjtcbiAgICB9XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgY29uc3Qgd2FybmluZ01lc3NhZ2UgPSBnZXRVbmV4cGVjdGVkU3RhdGVTaGFwZVdhcm5pbmdNZXNzYWdlKHN0YXRlLCBmaW5hbFJlZHVjZXJzLCBhY3Rpb24sIHVuZXhwZWN0ZWRLZXlDYWNoZSk7XG4gICAgICBpZiAod2FybmluZ01lc3NhZ2UpIHtcbiAgICAgICAgd2FybmluZyh3YXJuaW5nTWVzc2FnZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGxldCBoYXNDaGFuZ2VkID0gZmFsc2U7XG4gICAgY29uc3QgbmV4dFN0YXRlID0ge307XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaW5hbFJlZHVjZXJLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBrZXkgPSBmaW5hbFJlZHVjZXJLZXlzW2ldO1xuICAgICAgY29uc3QgcmVkdWNlciA9IGZpbmFsUmVkdWNlcnNba2V5XTtcbiAgICAgIGNvbnN0IHByZXZpb3VzU3RhdGVGb3JLZXkgPSBzdGF0ZVtrZXldO1xuICAgICAgY29uc3QgbmV4dFN0YXRlRm9yS2V5ID0gcmVkdWNlcihwcmV2aW91c1N0YXRlRm9yS2V5LCBhY3Rpb24pO1xuICAgICAgaWYgKHR5cGVvZiBuZXh0U3RhdGVGb3JLZXkgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgY29uc3QgYWN0aW9uVHlwZSA9IGFjdGlvbiAmJiBhY3Rpb24udHlwZTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMTQpIDogYFdoZW4gY2FsbGVkIHdpdGggYW4gYWN0aW9uIG9mIHR5cGUgJHthY3Rpb25UeXBlID8gYFwiJHtTdHJpbmcoYWN0aW9uVHlwZSl9XCJgIDogXCIodW5rbm93biB0eXBlKVwifSwgdGhlIHNsaWNlIHJlZHVjZXIgZm9yIGtleSBcIiR7a2V5fVwiIHJldHVybmVkIHVuZGVmaW5lZC4gVG8gaWdub3JlIGFuIGFjdGlvbiwgeW91IG11c3QgZXhwbGljaXRseSByZXR1cm4gdGhlIHByZXZpb3VzIHN0YXRlLiBJZiB5b3Ugd2FudCB0aGlzIHJlZHVjZXIgdG8gaG9sZCBubyB2YWx1ZSwgeW91IGNhbiByZXR1cm4gbnVsbCBpbnN0ZWFkIG9mIHVuZGVmaW5lZC5gKTtcbiAgICAgIH1cbiAgICAgIG5leHRTdGF0ZVtrZXldID0gbmV4dFN0YXRlRm9yS2V5O1xuICAgICAgaGFzQ2hhbmdlZCA9IGhhc0NoYW5nZWQgfHwgbmV4dFN0YXRlRm9yS2V5ICE9PSBwcmV2aW91c1N0YXRlRm9yS2V5O1xuICAgIH1cbiAgICBoYXNDaGFuZ2VkID0gaGFzQ2hhbmdlZCB8fCBmaW5hbFJlZHVjZXJLZXlzLmxlbmd0aCAhPT0gT2JqZWN0LmtleXMoc3RhdGUpLmxlbmd0aDtcbiAgICByZXR1cm4gaGFzQ2hhbmdlZCA/IG5leHRTdGF0ZSA6IHN0YXRlO1xuICB9O1xufVxuXG4vLyBzcmMvYmluZEFjdGlvbkNyZWF0b3JzLnRzXG5mdW5jdGlvbiBiaW5kQWN0aW9uQ3JlYXRvcihhY3Rpb25DcmVhdG9yLCBkaXNwYXRjaCkge1xuICByZXR1cm4gZnVuY3Rpb24oLi4uYXJncykge1xuICAgIHJldHVybiBkaXNwYXRjaChhY3Rpb25DcmVhdG9yLmFwcGx5KHRoaXMsIGFyZ3MpKTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGJpbmRBY3Rpb25DcmVhdG9ycyhhY3Rpb25DcmVhdG9ycywgZGlzcGF0Y2gpIHtcbiAgaWYgKHR5cGVvZiBhY3Rpb25DcmVhdG9ycyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcmV0dXJuIGJpbmRBY3Rpb25DcmVhdG9yKGFjdGlvbkNyZWF0b3JzLCBkaXNwYXRjaCk7XG4gIH1cbiAgaWYgKHR5cGVvZiBhY3Rpb25DcmVhdG9ycyAhPT0gXCJvYmplY3RcIiB8fCBhY3Rpb25DcmVhdG9ycyA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDE2KSA6IGBiaW5kQWN0aW9uQ3JlYXRvcnMgZXhwZWN0ZWQgYW4gb2JqZWN0IG9yIGEgZnVuY3Rpb24sIGJ1dCBpbnN0ZWFkIHJlY2VpdmVkOiAnJHtraW5kT2YoYWN0aW9uQ3JlYXRvcnMpfScuIERpZCB5b3Ugd3JpdGUgXCJpbXBvcnQgQWN0aW9uQ3JlYXRvcnMgZnJvbVwiIGluc3RlYWQgb2YgXCJpbXBvcnQgKiBhcyBBY3Rpb25DcmVhdG9ycyBmcm9tXCI/YCk7XG4gIH1cbiAgY29uc3QgYm91bmRBY3Rpb25DcmVhdG9ycyA9IHt9O1xuICBmb3IgKGNvbnN0IGtleSBpbiBhY3Rpb25DcmVhdG9ycykge1xuICAgIGNvbnN0IGFjdGlvbkNyZWF0b3IgPSBhY3Rpb25DcmVhdG9yc1trZXldO1xuICAgIGlmICh0eXBlb2YgYWN0aW9uQ3JlYXRvciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBib3VuZEFjdGlvbkNyZWF0b3JzW2tleV0gPSBiaW5kQWN0aW9uQ3JlYXRvcihhY3Rpb25DcmVhdG9yLCBkaXNwYXRjaCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBib3VuZEFjdGlvbkNyZWF0b3JzO1xufVxuXG4vLyBzcmMvY29tcG9zZS50c1xuZnVuY3Rpb24gY29tcG9zZSguLi5mdW5jcykge1xuICBpZiAoZnVuY3MubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIChhcmcpID0+IGFyZztcbiAgfVxuICBpZiAoZnVuY3MubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIGZ1bmNzWzBdO1xuICB9XG4gIHJldHVybiBmdW5jcy5yZWR1Y2UoKGEsIGIpID0+ICguLi5hcmdzKSA9PiBhKGIoLi4uYXJncykpKTtcbn1cblxuLy8gc3JjL2FwcGx5TWlkZGxld2FyZS50c1xuZnVuY3Rpb24gYXBwbHlNaWRkbGV3YXJlKC4uLm1pZGRsZXdhcmVzKSB7XG4gIHJldHVybiAoY3JlYXRlU3RvcmUyKSA9PiAocmVkdWNlciwgcHJlbG9hZGVkU3RhdGUpID0+IHtcbiAgICBjb25zdCBzdG9yZSA9IGNyZWF0ZVN0b3JlMihyZWR1Y2VyLCBwcmVsb2FkZWRTdGF0ZSk7XG4gICAgbGV0IGRpc3BhdGNoID0gKCkgPT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMTUpIDogXCJEaXNwYXRjaGluZyB3aGlsZSBjb25zdHJ1Y3RpbmcgeW91ciBtaWRkbGV3YXJlIGlzIG5vdCBhbGxvd2VkLiBPdGhlciBtaWRkbGV3YXJlIHdvdWxkIG5vdCBiZSBhcHBsaWVkIHRvIHRoaXMgZGlzcGF0Y2guXCIpO1xuICAgIH07XG4gICAgY29uc3QgbWlkZGxld2FyZUFQSSA9IHtcbiAgICAgIGdldFN0YXRlOiBzdG9yZS5nZXRTdGF0ZSxcbiAgICAgIGRpc3BhdGNoOiAoYWN0aW9uLCAuLi5hcmdzKSA9PiBkaXNwYXRjaChhY3Rpb24sIC4uLmFyZ3MpXG4gICAgfTtcbiAgICBjb25zdCBjaGFpbiA9IG1pZGRsZXdhcmVzLm1hcCgobWlkZGxld2FyZSkgPT4gbWlkZGxld2FyZShtaWRkbGV3YXJlQVBJKSk7XG4gICAgZGlzcGF0Y2ggPSBjb21wb3NlKC4uLmNoYWluKShzdG9yZS5kaXNwYXRjaCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0b3JlLFxuICAgICAgZGlzcGF0Y2hcbiAgICB9O1xuICB9O1xufVxuXG4vLyBzcmMvdXRpbHMvaXNBY3Rpb24udHNcbmZ1bmN0aW9uIGlzQWN0aW9uKGFjdGlvbikge1xuICByZXR1cm4gaXNQbGFpbk9iamVjdChhY3Rpb24pICYmIFwidHlwZVwiIGluIGFjdGlvbiAmJiB0eXBlb2YgYWN0aW9uLnR5cGUgPT09IFwic3RyaW5nXCI7XG59XG5leHBvcnQge1xuICBhY3Rpb25UeXBlc19kZWZhdWx0IGFzIF9fRE9fTk9UX1VTRV9fQWN0aW9uVHlwZXMsXG4gIGFwcGx5TWlkZGxld2FyZSxcbiAgYmluZEFjdGlvbkNyZWF0b3JzLFxuICBjb21iaW5lUmVkdWNlcnMsXG4gIGNvbXBvc2UsXG4gIGNyZWF0ZVN0b3JlLFxuICBpc0FjdGlvbixcbiAgaXNQbGFpbk9iamVjdCxcbiAgbGVnYWN5X2NyZWF0ZVN0b3JlXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVkdXgubWpzLm1hcCIsIi8vIHNyYy9pbmRleC50c1xuZnVuY3Rpb24gY3JlYXRlVGh1bmtNaWRkbGV3YXJlKGV4dHJhQXJndW1lbnQpIHtcbiAgY29uc3QgbWlkZGxld2FyZSA9ICh7IGRpc3BhdGNoLCBnZXRTdGF0ZSB9KSA9PiAobmV4dCkgPT4gKGFjdGlvbikgPT4ge1xuICAgIGlmICh0eXBlb2YgYWN0aW9uID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHJldHVybiBhY3Rpb24oZGlzcGF0Y2gsIGdldFN0YXRlLCBleHRyYUFyZ3VtZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIG5leHQoYWN0aW9uKTtcbiAgfTtcbiAgcmV0dXJuIG1pZGRsZXdhcmU7XG59XG52YXIgdGh1bmsgPSBjcmVhdGVUaHVua01pZGRsZXdhcmUoKTtcbnZhciB3aXRoRXh0cmFBcmd1bWVudCA9IGNyZWF0ZVRodW5rTWlkZGxld2FyZTtcbmV4cG9ydCB7XG4gIHRodW5rLFxuICB3aXRoRXh0cmFBcmd1bWVudFxufTtcbiIsIi8vIHNyYy91dGlscy9lbnYudHNcbnZhciBOT1RISU5HID0gU3ltYm9sLmZvcihcImltbWVyLW5vdGhpbmdcIik7XG52YXIgRFJBRlRBQkxFID0gU3ltYm9sLmZvcihcImltbWVyLWRyYWZ0YWJsZVwiKTtcbnZhciBEUkFGVF9TVEFURSA9IFN5bWJvbC5mb3IoXCJpbW1lci1zdGF0ZVwiKTtcblxuLy8gc3JjL3V0aWxzL2Vycm9ycy50c1xudmFyIGVycm9ycyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFtcbiAgLy8gQWxsIGVycm9yIGNvZGVzLCBzdGFydGluZyBieSAwOlxuICBmdW5jdGlvbihwbHVnaW4pIHtcbiAgICByZXR1cm4gYFRoZSBwbHVnaW4gZm9yICcke3BsdWdpbn0nIGhhcyBub3QgYmVlbiBsb2FkZWQgaW50byBJbW1lci4gVG8gZW5hYmxlIHRoZSBwbHVnaW4sIGltcG9ydCBhbmQgY2FsbCBcXGBlbmFibGUke3BsdWdpbn0oKVxcYCB3aGVuIGluaXRpYWxpemluZyB5b3VyIGFwcGxpY2F0aW9uLmA7XG4gIH0sXG4gIGZ1bmN0aW9uKHRoaW5nKSB7XG4gICAgcmV0dXJuIGBwcm9kdWNlIGNhbiBvbmx5IGJlIGNhbGxlZCBvbiB0aGluZ3MgdGhhdCBhcmUgZHJhZnRhYmxlOiBwbGFpbiBvYmplY3RzLCBhcnJheXMsIE1hcCwgU2V0IG9yIGNsYXNzZXMgdGhhdCBhcmUgbWFya2VkIHdpdGggJ1tpbW1lcmFibGVdOiB0cnVlJy4gR290ICcke3RoaW5nfSdgO1xuICB9LFxuICBcIlRoaXMgb2JqZWN0IGhhcyBiZWVuIGZyb3plbiBhbmQgc2hvdWxkIG5vdCBiZSBtdXRhdGVkXCIsXG4gIGZ1bmN0aW9uKGRhdGEpIHtcbiAgICByZXR1cm4gXCJDYW5ub3QgdXNlIGEgcHJveHkgdGhhdCBoYXMgYmVlbiByZXZva2VkLiBEaWQgeW91IHBhc3MgYW4gb2JqZWN0IGZyb20gaW5zaWRlIGFuIGltbWVyIGZ1bmN0aW9uIHRvIGFuIGFzeW5jIHByb2Nlc3M/IFwiICsgZGF0YTtcbiAgfSxcbiAgXCJBbiBpbW1lciBwcm9kdWNlciByZXR1cm5lZCBhIG5ldyB2YWx1ZSAqYW5kKiBtb2RpZmllZCBpdHMgZHJhZnQuIEVpdGhlciByZXR1cm4gYSBuZXcgdmFsdWUgKm9yKiBtb2RpZnkgdGhlIGRyYWZ0LlwiLFxuICBcIkltbWVyIGZvcmJpZHMgY2lyY3VsYXIgcmVmZXJlbmNlc1wiLFxuICBcIlRoZSBmaXJzdCBvciBzZWNvbmQgYXJndW1lbnQgdG8gYHByb2R1Y2VgIG11c3QgYmUgYSBmdW5jdGlvblwiLFxuICBcIlRoZSB0aGlyZCBhcmd1bWVudCB0byBgcHJvZHVjZWAgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIHVuZGVmaW5lZFwiLFxuICBcIkZpcnN0IGFyZ3VtZW50IHRvIGBjcmVhdGVEcmFmdGAgbXVzdCBiZSBhIHBsYWluIG9iamVjdCwgYW4gYXJyYXksIG9yIGFuIGltbWVyYWJsZSBvYmplY3RcIixcbiAgXCJGaXJzdCBhcmd1bWVudCB0byBgZmluaXNoRHJhZnRgIG11c3QgYmUgYSBkcmFmdCByZXR1cm5lZCBieSBgY3JlYXRlRHJhZnRgXCIsXG4gIGZ1bmN0aW9uKHRoaW5nKSB7XG4gICAgcmV0dXJuIGAnY3VycmVudCcgZXhwZWN0cyBhIGRyYWZ0LCBnb3Q6ICR7dGhpbmd9YDtcbiAgfSxcbiAgXCJPYmplY3QuZGVmaW5lUHJvcGVydHkoKSBjYW5ub3QgYmUgdXNlZCBvbiBhbiBJbW1lciBkcmFmdFwiLFxuICBcIk9iamVjdC5zZXRQcm90b3R5cGVPZigpIGNhbm5vdCBiZSB1c2VkIG9uIGFuIEltbWVyIGRyYWZ0XCIsXG4gIFwiSW1tZXIgb25seSBzdXBwb3J0cyBkZWxldGluZyBhcnJheSBpbmRpY2VzXCIsXG4gIFwiSW1tZXIgb25seSBzdXBwb3J0cyBzZXR0aW5nIGFycmF5IGluZGljZXMgYW5kIHRoZSAnbGVuZ3RoJyBwcm9wZXJ0eVwiLFxuICBmdW5jdGlvbih0aGluZykge1xuICAgIHJldHVybiBgJ29yaWdpbmFsJyBleHBlY3RzIGEgZHJhZnQsIGdvdDogJHt0aGluZ31gO1xuICB9XG4gIC8vIE5vdGU6IGlmIG1vcmUgZXJyb3JzIGFyZSBhZGRlZCwgdGhlIGVycm9yT2Zmc2V0IGluIFBhdGNoZXMudHMgc2hvdWxkIGJlIGluY3JlYXNlZFxuICAvLyBTZWUgUGF0Y2hlcy50cyBmb3IgYWRkaXRpb25hbCBlcnJvcnNcbl0gOiBbXTtcbmZ1bmN0aW9uIGRpZShlcnJvciwgLi4uYXJncykge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgY29uc3QgZSA9IGVycm9yc1tlcnJvcl07XG4gICAgY29uc3QgbXNnID0gdHlwZW9mIGUgPT09IFwiZnVuY3Rpb25cIiA/IGUuYXBwbHkobnVsbCwgYXJncykgOiBlO1xuICAgIHRocm93IG5ldyBFcnJvcihgW0ltbWVyXSAke21zZ31gKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgYFtJbW1lcl0gbWluaWZpZWQgZXJyb3IgbnI6ICR7ZXJyb3J9LiBGdWxsIGVycm9yIGF0OiBodHRwczovL2JpdC5seS8zY1hFS1dmYFxuICApO1xufVxuXG4vLyBzcmMvdXRpbHMvY29tbW9uLnRzXG52YXIgZ2V0UHJvdG90eXBlT2YgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG5mdW5jdGlvbiBpc0RyYWZ0KHZhbHVlKSB7XG4gIHJldHVybiAhIXZhbHVlICYmICEhdmFsdWVbRFJBRlRfU1RBVEVdO1xufVxuZnVuY3Rpb24gaXNEcmFmdGFibGUodmFsdWUpIHtcbiAgaWYgKCF2YWx1ZSlcbiAgICByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBpc1BsYWluT2JqZWN0KHZhbHVlKSB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSB8fCAhIXZhbHVlW0RSQUZUQUJMRV0gfHwgISF2YWx1ZS5jb25zdHJ1Y3Rvcj8uW0RSQUZUQUJMRV0gfHwgaXNNYXAodmFsdWUpIHx8IGlzU2V0KHZhbHVlKTtcbn1cbnZhciBvYmplY3RDdG9yU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci50b1N0cmluZygpO1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIilcbiAgICByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHByb3RvID0gZ2V0UHJvdG90eXBlT2YodmFsdWUpO1xuICBpZiAocHJvdG8gPT09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBjb25zdCBDdG9yID0gT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwocHJvdG8sIFwiY29uc3RydWN0b3JcIikgJiYgcHJvdG8uY29uc3RydWN0b3I7XG4gIGlmIChDdG9yID09PSBPYmplY3QpXG4gICAgcmV0dXJuIHRydWU7XG4gIHJldHVybiB0eXBlb2YgQ3RvciA9PSBcImZ1bmN0aW9uXCIgJiYgRnVuY3Rpb24udG9TdHJpbmcuY2FsbChDdG9yKSA9PT0gb2JqZWN0Q3RvclN0cmluZztcbn1cbmZ1bmN0aW9uIG9yaWdpbmFsKHZhbHVlKSB7XG4gIGlmICghaXNEcmFmdCh2YWx1ZSkpXG4gICAgZGllKDE1LCB2YWx1ZSk7XG4gIHJldHVybiB2YWx1ZVtEUkFGVF9TVEFURV0uYmFzZV87XG59XG5mdW5jdGlvbiBlYWNoKG9iaiwgaXRlcikge1xuICBpZiAoZ2V0QXJjaHR5cGUob2JqKSA9PT0gMCAvKiBPYmplY3QgKi8pIHtcbiAgICBSZWZsZWN0Lm93bktleXMob2JqKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGl0ZXIoa2V5LCBvYmpba2V5XSwgb2JqKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmouZm9yRWFjaCgoZW50cnksIGluZGV4KSA9PiBpdGVyKGluZGV4LCBlbnRyeSwgb2JqKSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldEFyY2h0eXBlKHRoaW5nKSB7XG4gIGNvbnN0IHN0YXRlID0gdGhpbmdbRFJBRlRfU1RBVEVdO1xuICByZXR1cm4gc3RhdGUgPyBzdGF0ZS50eXBlXyA6IEFycmF5LmlzQXJyYXkodGhpbmcpID8gMSAvKiBBcnJheSAqLyA6IGlzTWFwKHRoaW5nKSA/IDIgLyogTWFwICovIDogaXNTZXQodGhpbmcpID8gMyAvKiBTZXQgKi8gOiAwIC8qIE9iamVjdCAqLztcbn1cbmZ1bmN0aW9uIGhhcyh0aGluZywgcHJvcCkge1xuICByZXR1cm4gZ2V0QXJjaHR5cGUodGhpbmcpID09PSAyIC8qIE1hcCAqLyA/IHRoaW5nLmhhcyhwcm9wKSA6IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGluZywgcHJvcCk7XG59XG5mdW5jdGlvbiBnZXQodGhpbmcsIHByb3ApIHtcbiAgcmV0dXJuIGdldEFyY2h0eXBlKHRoaW5nKSA9PT0gMiAvKiBNYXAgKi8gPyB0aGluZy5nZXQocHJvcCkgOiB0aGluZ1twcm9wXTtcbn1cbmZ1bmN0aW9uIHNldCh0aGluZywgcHJvcE9yT2xkVmFsdWUsIHZhbHVlKSB7XG4gIGNvbnN0IHQgPSBnZXRBcmNodHlwZSh0aGluZyk7XG4gIGlmICh0ID09PSAyIC8qIE1hcCAqLylcbiAgICB0aGluZy5zZXQocHJvcE9yT2xkVmFsdWUsIHZhbHVlKTtcbiAgZWxzZSBpZiAodCA9PT0gMyAvKiBTZXQgKi8pIHtcbiAgICB0aGluZy5hZGQodmFsdWUpO1xuICB9IGVsc2VcbiAgICB0aGluZ1twcm9wT3JPbGRWYWx1ZV0gPSB2YWx1ZTtcbn1cbmZ1bmN0aW9uIGlzKHgsIHkpIHtcbiAgaWYgKHggPT09IHkpIHtcbiAgICByZXR1cm4geCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHggIT09IHggJiYgeSAhPT0geTtcbiAgfVxufVxuZnVuY3Rpb24gaXNNYXAodGFyZ2V0KSB7XG4gIHJldHVybiB0YXJnZXQgaW5zdGFuY2VvZiBNYXA7XG59XG5mdW5jdGlvbiBpc1NldCh0YXJnZXQpIHtcbiAgcmV0dXJuIHRhcmdldCBpbnN0YW5jZW9mIFNldDtcbn1cbmZ1bmN0aW9uIGxhdGVzdChzdGF0ZSkge1xuICByZXR1cm4gc3RhdGUuY29weV8gfHwgc3RhdGUuYmFzZV87XG59XG5mdW5jdGlvbiBzaGFsbG93Q29weShiYXNlLCBzdHJpY3QpIHtcbiAgaWYgKGlzTWFwKGJhc2UpKSB7XG4gICAgcmV0dXJuIG5ldyBNYXAoYmFzZSk7XG4gIH1cbiAgaWYgKGlzU2V0KGJhc2UpKSB7XG4gICAgcmV0dXJuIG5ldyBTZXQoYmFzZSk7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkoYmFzZSkpXG4gICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGJhc2UpO1xuICBjb25zdCBpc1BsYWluID0gaXNQbGFpbk9iamVjdChiYXNlKTtcbiAgaWYgKHN0cmljdCA9PT0gdHJ1ZSB8fCBzdHJpY3QgPT09IFwiY2xhc3Nfb25seVwiICYmICFpc1BsYWluKSB7XG4gICAgY29uc3QgZGVzY3JpcHRvcnMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhiYXNlKTtcbiAgICBkZWxldGUgZGVzY3JpcHRvcnNbRFJBRlRfU1RBVEVdO1xuICAgIGxldCBrZXlzID0gUmVmbGVjdC5vd25LZXlzKGRlc2NyaXB0b3JzKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGtleSA9IGtleXNbaV07XG4gICAgICBjb25zdCBkZXNjID0gZGVzY3JpcHRvcnNba2V5XTtcbiAgICAgIGlmIChkZXNjLndyaXRhYmxlID09PSBmYWxzZSkge1xuICAgICAgICBkZXNjLndyaXRhYmxlID0gdHJ1ZTtcbiAgICAgICAgZGVzYy5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGRlc2MuZ2V0IHx8IGRlc2Muc2V0KVxuICAgICAgICBkZXNjcmlwdG9yc1trZXldID0ge1xuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAvLyBjb3VsZCBsaXZlIHdpdGggISFkZXNjLnNldCBhcyB3ZWxsIGhlcmUuLi5cbiAgICAgICAgICBlbnVtZXJhYmxlOiBkZXNjLmVudW1lcmFibGUsXG4gICAgICAgICAgdmFsdWU6IGJhc2Vba2V5XVxuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LmNyZWF0ZShnZXRQcm90b3R5cGVPZihiYXNlKSwgZGVzY3JpcHRvcnMpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHByb3RvID0gZ2V0UHJvdG90eXBlT2YoYmFzZSk7XG4gICAgaWYgKHByb3RvICE9PSBudWxsICYmIGlzUGxhaW4pIHtcbiAgICAgIHJldHVybiB7IC4uLmJhc2UgfTtcbiAgICB9XG4gICAgY29uc3Qgb2JqID0gT2JqZWN0LmNyZWF0ZShwcm90byk7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24ob2JqLCBiYXNlKTtcbiAgfVxufVxuZnVuY3Rpb24gZnJlZXplKG9iaiwgZGVlcCA9IGZhbHNlKSB7XG4gIGlmIChpc0Zyb3plbihvYmopIHx8IGlzRHJhZnQob2JqKSB8fCAhaXNEcmFmdGFibGUob2JqKSlcbiAgICByZXR1cm4gb2JqO1xuICBpZiAoZ2V0QXJjaHR5cGUob2JqKSA+IDEpIHtcbiAgICBvYmouc2V0ID0gb2JqLmFkZCA9IG9iai5jbGVhciA9IG9iai5kZWxldGUgPSBkb250TXV0YXRlRnJvemVuQ29sbGVjdGlvbnM7XG4gIH1cbiAgT2JqZWN0LmZyZWV6ZShvYmopO1xuICBpZiAoZGVlcClcbiAgICBPYmplY3QuZW50cmllcyhvYmopLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4gZnJlZXplKHZhbHVlLCB0cnVlKSk7XG4gIHJldHVybiBvYmo7XG59XG5mdW5jdGlvbiBkb250TXV0YXRlRnJvemVuQ29sbGVjdGlvbnMoKSB7XG4gIGRpZSgyKTtcbn1cbmZ1bmN0aW9uIGlzRnJvemVuKG9iaikge1xuICByZXR1cm4gT2JqZWN0LmlzRnJvemVuKG9iaik7XG59XG5cbi8vIHNyYy91dGlscy9wbHVnaW5zLnRzXG52YXIgcGx1Z2lucyA9IHt9O1xuZnVuY3Rpb24gZ2V0UGx1Z2luKHBsdWdpbktleSkge1xuICBjb25zdCBwbHVnaW4gPSBwbHVnaW5zW3BsdWdpbktleV07XG4gIGlmICghcGx1Z2luKSB7XG4gICAgZGllKDAsIHBsdWdpbktleSk7XG4gIH1cbiAgcmV0dXJuIHBsdWdpbjtcbn1cbmZ1bmN0aW9uIGxvYWRQbHVnaW4ocGx1Z2luS2V5LCBpbXBsZW1lbnRhdGlvbikge1xuICBpZiAoIXBsdWdpbnNbcGx1Z2luS2V5XSlcbiAgICBwbHVnaW5zW3BsdWdpbktleV0gPSBpbXBsZW1lbnRhdGlvbjtcbn1cblxuLy8gc3JjL2NvcmUvc2NvcGUudHNcbnZhciBjdXJyZW50U2NvcGU7XG5mdW5jdGlvbiBnZXRDdXJyZW50U2NvcGUoKSB7XG4gIHJldHVybiBjdXJyZW50U2NvcGU7XG59XG5mdW5jdGlvbiBjcmVhdGVTY29wZShwYXJlbnRfLCBpbW1lcl8pIHtcbiAgcmV0dXJuIHtcbiAgICBkcmFmdHNfOiBbXSxcbiAgICBwYXJlbnRfLFxuICAgIGltbWVyXyxcbiAgICAvLyBXaGVuZXZlciB0aGUgbW9kaWZpZWQgZHJhZnQgY29udGFpbnMgYSBkcmFmdCBmcm9tIGFub3RoZXIgc2NvcGUsIHdlXG4gICAgLy8gbmVlZCB0byBwcmV2ZW50IGF1dG8tZnJlZXppbmcgc28gdGhlIHVub3duZWQgZHJhZnQgY2FuIGJlIGZpbmFsaXplZC5cbiAgICBjYW5BdXRvRnJlZXplXzogdHJ1ZSxcbiAgICB1bmZpbmFsaXplZERyYWZ0c186IDBcbiAgfTtcbn1cbmZ1bmN0aW9uIHVzZVBhdGNoZXNJblNjb3BlKHNjb3BlLCBwYXRjaExpc3RlbmVyKSB7XG4gIGlmIChwYXRjaExpc3RlbmVyKSB7XG4gICAgZ2V0UGx1Z2luKFwiUGF0Y2hlc1wiKTtcbiAgICBzY29wZS5wYXRjaGVzXyA9IFtdO1xuICAgIHNjb3BlLmludmVyc2VQYXRjaGVzXyA9IFtdO1xuICAgIHNjb3BlLnBhdGNoTGlzdGVuZXJfID0gcGF0Y2hMaXN0ZW5lcjtcbiAgfVxufVxuZnVuY3Rpb24gcmV2b2tlU2NvcGUoc2NvcGUpIHtcbiAgbGVhdmVTY29wZShzY29wZSk7XG4gIHNjb3BlLmRyYWZ0c18uZm9yRWFjaChyZXZva2VEcmFmdCk7XG4gIHNjb3BlLmRyYWZ0c18gPSBudWxsO1xufVxuZnVuY3Rpb24gbGVhdmVTY29wZShzY29wZSkge1xuICBpZiAoc2NvcGUgPT09IGN1cnJlbnRTY29wZSkge1xuICAgIGN1cnJlbnRTY29wZSA9IHNjb3BlLnBhcmVudF87XG4gIH1cbn1cbmZ1bmN0aW9uIGVudGVyU2NvcGUoaW1tZXIyKSB7XG4gIHJldHVybiBjdXJyZW50U2NvcGUgPSBjcmVhdGVTY29wZShjdXJyZW50U2NvcGUsIGltbWVyMik7XG59XG5mdW5jdGlvbiByZXZva2VEcmFmdChkcmFmdCkge1xuICBjb25zdCBzdGF0ZSA9IGRyYWZ0W0RSQUZUX1NUQVRFXTtcbiAgaWYgKHN0YXRlLnR5cGVfID09PSAwIC8qIE9iamVjdCAqLyB8fCBzdGF0ZS50eXBlXyA9PT0gMSAvKiBBcnJheSAqLylcbiAgICBzdGF0ZS5yZXZva2VfKCk7XG4gIGVsc2VcbiAgICBzdGF0ZS5yZXZva2VkXyA9IHRydWU7XG59XG5cbi8vIHNyYy9jb3JlL2ZpbmFsaXplLnRzXG5mdW5jdGlvbiBwcm9jZXNzUmVzdWx0KHJlc3VsdCwgc2NvcGUpIHtcbiAgc2NvcGUudW5maW5hbGl6ZWREcmFmdHNfID0gc2NvcGUuZHJhZnRzXy5sZW5ndGg7XG4gIGNvbnN0IGJhc2VEcmFmdCA9IHNjb3BlLmRyYWZ0c19bMF07XG4gIGNvbnN0IGlzUmVwbGFjZWQgPSByZXN1bHQgIT09IHZvaWQgMCAmJiByZXN1bHQgIT09IGJhc2VEcmFmdDtcbiAgaWYgKGlzUmVwbGFjZWQpIHtcbiAgICBpZiAoYmFzZURyYWZ0W0RSQUZUX1NUQVRFXS5tb2RpZmllZF8pIHtcbiAgICAgIHJldm9rZVNjb3BlKHNjb3BlKTtcbiAgICAgIGRpZSg0KTtcbiAgICB9XG4gICAgaWYgKGlzRHJhZnRhYmxlKHJlc3VsdCkpIHtcbiAgICAgIHJlc3VsdCA9IGZpbmFsaXplKHNjb3BlLCByZXN1bHQpO1xuICAgICAgaWYgKCFzY29wZS5wYXJlbnRfKVxuICAgICAgICBtYXliZUZyZWV6ZShzY29wZSwgcmVzdWx0KTtcbiAgICB9XG4gICAgaWYgKHNjb3BlLnBhdGNoZXNfKSB7XG4gICAgICBnZXRQbHVnaW4oXCJQYXRjaGVzXCIpLmdlbmVyYXRlUmVwbGFjZW1lbnRQYXRjaGVzXyhcbiAgICAgICAgYmFzZURyYWZ0W0RSQUZUX1NUQVRFXS5iYXNlXyxcbiAgICAgICAgcmVzdWx0LFxuICAgICAgICBzY29wZS5wYXRjaGVzXyxcbiAgICAgICAgc2NvcGUuaW52ZXJzZVBhdGNoZXNfXG4gICAgICApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSBmaW5hbGl6ZShzY29wZSwgYmFzZURyYWZ0LCBbXSk7XG4gIH1cbiAgcmV2b2tlU2NvcGUoc2NvcGUpO1xuICBpZiAoc2NvcGUucGF0Y2hlc18pIHtcbiAgICBzY29wZS5wYXRjaExpc3RlbmVyXyhzY29wZS5wYXRjaGVzXywgc2NvcGUuaW52ZXJzZVBhdGNoZXNfKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0ICE9PSBOT1RISU5HID8gcmVzdWx0IDogdm9pZCAwO1xufVxuZnVuY3Rpb24gZmluYWxpemUocm9vdFNjb3BlLCB2YWx1ZSwgcGF0aCkge1xuICBpZiAoaXNGcm96ZW4odmFsdWUpKVxuICAgIHJldHVybiB2YWx1ZTtcbiAgY29uc3Qgc3RhdGUgPSB2YWx1ZVtEUkFGVF9TVEFURV07XG4gIGlmICghc3RhdGUpIHtcbiAgICBlYWNoKFxuICAgICAgdmFsdWUsXG4gICAgICAoa2V5LCBjaGlsZFZhbHVlKSA9PiBmaW5hbGl6ZVByb3BlcnR5KHJvb3RTY29wZSwgc3RhdGUsIHZhbHVlLCBrZXksIGNoaWxkVmFsdWUsIHBhdGgpXG4gICAgKTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKHN0YXRlLnNjb3BlXyAhPT0gcm9vdFNjb3BlKVxuICAgIHJldHVybiB2YWx1ZTtcbiAgaWYgKCFzdGF0ZS5tb2RpZmllZF8pIHtcbiAgICBtYXliZUZyZWV6ZShyb290U2NvcGUsIHN0YXRlLmJhc2VfLCB0cnVlKTtcbiAgICByZXR1cm4gc3RhdGUuYmFzZV87XG4gIH1cbiAgaWYgKCFzdGF0ZS5maW5hbGl6ZWRfKSB7XG4gICAgc3RhdGUuZmluYWxpemVkXyA9IHRydWU7XG4gICAgc3RhdGUuc2NvcGVfLnVuZmluYWxpemVkRHJhZnRzXy0tO1xuICAgIGNvbnN0IHJlc3VsdCA9IHN0YXRlLmNvcHlfO1xuICAgIGxldCByZXN1bHRFYWNoID0gcmVzdWx0O1xuICAgIGxldCBpc1NldDIgPSBmYWxzZTtcbiAgICBpZiAoc3RhdGUudHlwZV8gPT09IDMgLyogU2V0ICovKSB7XG4gICAgICByZXN1bHRFYWNoID0gbmV3IFNldChyZXN1bHQpO1xuICAgICAgcmVzdWx0LmNsZWFyKCk7XG4gICAgICBpc1NldDIgPSB0cnVlO1xuICAgIH1cbiAgICBlYWNoKFxuICAgICAgcmVzdWx0RWFjaCxcbiAgICAgIChrZXksIGNoaWxkVmFsdWUpID0+IGZpbmFsaXplUHJvcGVydHkocm9vdFNjb3BlLCBzdGF0ZSwgcmVzdWx0LCBrZXksIGNoaWxkVmFsdWUsIHBhdGgsIGlzU2V0MilcbiAgICApO1xuICAgIG1heWJlRnJlZXplKHJvb3RTY29wZSwgcmVzdWx0LCBmYWxzZSk7XG4gICAgaWYgKHBhdGggJiYgcm9vdFNjb3BlLnBhdGNoZXNfKSB7XG4gICAgICBnZXRQbHVnaW4oXCJQYXRjaGVzXCIpLmdlbmVyYXRlUGF0Y2hlc18oXG4gICAgICAgIHN0YXRlLFxuICAgICAgICBwYXRoLFxuICAgICAgICByb290U2NvcGUucGF0Y2hlc18sXG4gICAgICAgIHJvb3RTY29wZS5pbnZlcnNlUGF0Y2hlc19cbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHJldHVybiBzdGF0ZS5jb3B5Xztcbn1cbmZ1bmN0aW9uIGZpbmFsaXplUHJvcGVydHkocm9vdFNjb3BlLCBwYXJlbnRTdGF0ZSwgdGFyZ2V0T2JqZWN0LCBwcm9wLCBjaGlsZFZhbHVlLCByb290UGF0aCwgdGFyZ2V0SXNTZXQpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJiBjaGlsZFZhbHVlID09PSB0YXJnZXRPYmplY3QpXG4gICAgZGllKDUpO1xuICBpZiAoaXNEcmFmdChjaGlsZFZhbHVlKSkge1xuICAgIGNvbnN0IHBhdGggPSByb290UGF0aCAmJiBwYXJlbnRTdGF0ZSAmJiBwYXJlbnRTdGF0ZS50eXBlXyAhPT0gMyAvKiBTZXQgKi8gJiYgLy8gU2V0IG9iamVjdHMgYXJlIGF0b21pYyBzaW5jZSB0aGV5IGhhdmUgbm8ga2V5cy5cbiAgICAhaGFzKHBhcmVudFN0YXRlLmFzc2lnbmVkXywgcHJvcCkgPyByb290UGF0aC5jb25jYXQocHJvcCkgOiB2b2lkIDA7XG4gICAgY29uc3QgcmVzID0gZmluYWxpemUocm9vdFNjb3BlLCBjaGlsZFZhbHVlLCBwYXRoKTtcbiAgICBzZXQodGFyZ2V0T2JqZWN0LCBwcm9wLCByZXMpO1xuICAgIGlmIChpc0RyYWZ0KHJlcykpIHtcbiAgICAgIHJvb3RTY29wZS5jYW5BdXRvRnJlZXplXyA9IGZhbHNlO1xuICAgIH0gZWxzZVxuICAgICAgcmV0dXJuO1xuICB9IGVsc2UgaWYgKHRhcmdldElzU2V0KSB7XG4gICAgdGFyZ2V0T2JqZWN0LmFkZChjaGlsZFZhbHVlKTtcbiAgfVxuICBpZiAoaXNEcmFmdGFibGUoY2hpbGRWYWx1ZSkgJiYgIWlzRnJvemVuKGNoaWxkVmFsdWUpKSB7XG4gICAgaWYgKCFyb290U2NvcGUuaW1tZXJfLmF1dG9GcmVlemVfICYmIHJvb3RTY29wZS51bmZpbmFsaXplZERyYWZ0c18gPCAxKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZpbmFsaXplKHJvb3RTY29wZSwgY2hpbGRWYWx1ZSk7XG4gICAgaWYgKCghcGFyZW50U3RhdGUgfHwgIXBhcmVudFN0YXRlLnNjb3BlXy5wYXJlbnRfKSAmJiB0eXBlb2YgcHJvcCAhPT0gXCJzeW1ib2xcIiAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwodGFyZ2V0T2JqZWN0LCBwcm9wKSlcbiAgICAgIG1heWJlRnJlZXplKHJvb3RTY29wZSwgY2hpbGRWYWx1ZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIG1heWJlRnJlZXplKHNjb3BlLCB2YWx1ZSwgZGVlcCA9IGZhbHNlKSB7XG4gIGlmICghc2NvcGUucGFyZW50XyAmJiBzY29wZS5pbW1lcl8uYXV0b0ZyZWV6ZV8gJiYgc2NvcGUuY2FuQXV0b0ZyZWV6ZV8pIHtcbiAgICBmcmVlemUodmFsdWUsIGRlZXApO1xuICB9XG59XG5cbi8vIHNyYy9jb3JlL3Byb3h5LnRzXG5mdW5jdGlvbiBjcmVhdGVQcm94eVByb3h5KGJhc2UsIHBhcmVudCkge1xuICBjb25zdCBpc0FycmF5ID0gQXJyYXkuaXNBcnJheShiYXNlKTtcbiAgY29uc3Qgc3RhdGUgPSB7XG4gICAgdHlwZV86IGlzQXJyYXkgPyAxIC8qIEFycmF5ICovIDogMCAvKiBPYmplY3QgKi8sXG4gICAgLy8gVHJhY2sgd2hpY2ggcHJvZHVjZSBjYWxsIHRoaXMgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICAgIHNjb3BlXzogcGFyZW50ID8gcGFyZW50LnNjb3BlXyA6IGdldEN1cnJlbnRTY29wZSgpLFxuICAgIC8vIFRydWUgZm9yIGJvdGggc2hhbGxvdyBhbmQgZGVlcCBjaGFuZ2VzLlxuICAgIG1vZGlmaWVkXzogZmFsc2UsXG4gICAgLy8gVXNlZCBkdXJpbmcgZmluYWxpemF0aW9uLlxuICAgIGZpbmFsaXplZF86IGZhbHNlLFxuICAgIC8vIFRyYWNrIHdoaWNoIHByb3BlcnRpZXMgaGF2ZSBiZWVuIGFzc2lnbmVkICh0cnVlKSBvciBkZWxldGVkIChmYWxzZSkuXG4gICAgYXNzaWduZWRfOiB7fSxcbiAgICAvLyBUaGUgcGFyZW50IGRyYWZ0IHN0YXRlLlxuICAgIHBhcmVudF86IHBhcmVudCxcbiAgICAvLyBUaGUgYmFzZSBzdGF0ZS5cbiAgICBiYXNlXzogYmFzZSxcbiAgICAvLyBUaGUgYmFzZSBwcm94eS5cbiAgICBkcmFmdF86IG51bGwsXG4gICAgLy8gc2V0IGJlbG93XG4gICAgLy8gVGhlIGJhc2UgY29weSB3aXRoIGFueSB1cGRhdGVkIHZhbHVlcy5cbiAgICBjb3B5XzogbnVsbCxcbiAgICAvLyBDYWxsZWQgYnkgdGhlIGBwcm9kdWNlYCBmdW5jdGlvbi5cbiAgICByZXZva2VfOiBudWxsLFxuICAgIGlzTWFudWFsXzogZmFsc2VcbiAgfTtcbiAgbGV0IHRhcmdldCA9IHN0YXRlO1xuICBsZXQgdHJhcHMgPSBvYmplY3RUcmFwcztcbiAgaWYgKGlzQXJyYXkpIHtcbiAgICB0YXJnZXQgPSBbc3RhdGVdO1xuICAgIHRyYXBzID0gYXJyYXlUcmFwcztcbiAgfVxuICBjb25zdCB7IHJldm9rZSwgcHJveHkgfSA9IFByb3h5LnJldm9jYWJsZSh0YXJnZXQsIHRyYXBzKTtcbiAgc3RhdGUuZHJhZnRfID0gcHJveHk7XG4gIHN0YXRlLnJldm9rZV8gPSByZXZva2U7XG4gIHJldHVybiBwcm94eTtcbn1cbnZhciBvYmplY3RUcmFwcyA9IHtcbiAgZ2V0KHN0YXRlLCBwcm9wKSB7XG4gICAgaWYgKHByb3AgPT09IERSQUZUX1NUQVRFKVxuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIGNvbnN0IHNvdXJjZSA9IGxhdGVzdChzdGF0ZSk7XG4gICAgaWYgKCFoYXMoc291cmNlLCBwcm9wKSkge1xuICAgICAgcmV0dXJuIHJlYWRQcm9wRnJvbVByb3RvKHN0YXRlLCBzb3VyY2UsIHByb3ApO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZSA9IHNvdXJjZVtwcm9wXTtcbiAgICBpZiAoc3RhdGUuZmluYWxpemVkXyB8fCAhaXNEcmFmdGFibGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlmICh2YWx1ZSA9PT0gcGVlayhzdGF0ZS5iYXNlXywgcHJvcCkpIHtcbiAgICAgIHByZXBhcmVDb3B5KHN0YXRlKTtcbiAgICAgIHJldHVybiBzdGF0ZS5jb3B5X1twcm9wXSA9IGNyZWF0ZVByb3h5KHZhbHVlLCBzdGF0ZSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfSxcbiAgaGFzKHN0YXRlLCBwcm9wKSB7XG4gICAgcmV0dXJuIHByb3AgaW4gbGF0ZXN0KHN0YXRlKTtcbiAgfSxcbiAgb3duS2V5cyhzdGF0ZSkge1xuICAgIHJldHVybiBSZWZsZWN0Lm93bktleXMobGF0ZXN0KHN0YXRlKSk7XG4gIH0sXG4gIHNldChzdGF0ZSwgcHJvcCwgdmFsdWUpIHtcbiAgICBjb25zdCBkZXNjID0gZ2V0RGVzY3JpcHRvckZyb21Qcm90byhsYXRlc3Qoc3RhdGUpLCBwcm9wKTtcbiAgICBpZiAoZGVzYz8uc2V0KSB7XG4gICAgICBkZXNjLnNldC5jYWxsKHN0YXRlLmRyYWZ0XywgdmFsdWUpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICghc3RhdGUubW9kaWZpZWRfKSB7XG4gICAgICBjb25zdCBjdXJyZW50MiA9IHBlZWsobGF0ZXN0KHN0YXRlKSwgcHJvcCk7XG4gICAgICBjb25zdCBjdXJyZW50U3RhdGUgPSBjdXJyZW50Mj8uW0RSQUZUX1NUQVRFXTtcbiAgICAgIGlmIChjdXJyZW50U3RhdGUgJiYgY3VycmVudFN0YXRlLmJhc2VfID09PSB2YWx1ZSkge1xuICAgICAgICBzdGF0ZS5jb3B5X1twcm9wXSA9IHZhbHVlO1xuICAgICAgICBzdGF0ZS5hc3NpZ25lZF9bcHJvcF0gPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoaXModmFsdWUsIGN1cnJlbnQyKSAmJiAodmFsdWUgIT09IHZvaWQgMCB8fCBoYXMoc3RhdGUuYmFzZV8sIHByb3ApKSlcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBwcmVwYXJlQ29weShzdGF0ZSk7XG4gICAgICBtYXJrQ2hhbmdlZChzdGF0ZSk7XG4gICAgfVxuICAgIGlmIChzdGF0ZS5jb3B5X1twcm9wXSA9PT0gdmFsdWUgJiYgLy8gc3BlY2lhbCBjYXNlOiBoYW5kbGUgbmV3IHByb3BzIHdpdGggdmFsdWUgJ3VuZGVmaW5lZCdcbiAgICAodmFsdWUgIT09IHZvaWQgMCB8fCBwcm9wIGluIHN0YXRlLmNvcHlfKSB8fCAvLyBzcGVjaWFsIGNhc2U6IE5hTlxuICAgIE51bWJlci5pc05hTih2YWx1ZSkgJiYgTnVtYmVyLmlzTmFOKHN0YXRlLmNvcHlfW3Byb3BdKSlcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIHN0YXRlLmNvcHlfW3Byb3BdID0gdmFsdWU7XG4gICAgc3RhdGUuYXNzaWduZWRfW3Byb3BdID0gdHJ1ZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcbiAgZGVsZXRlUHJvcGVydHkoc3RhdGUsIHByb3ApIHtcbiAgICBpZiAocGVlayhzdGF0ZS5iYXNlXywgcHJvcCkgIT09IHZvaWQgMCB8fCBwcm9wIGluIHN0YXRlLmJhc2VfKSB7XG4gICAgICBzdGF0ZS5hc3NpZ25lZF9bcHJvcF0gPSBmYWxzZTtcbiAgICAgIHByZXBhcmVDb3B5KHN0YXRlKTtcbiAgICAgIG1hcmtDaGFuZ2VkKHN0YXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHN0YXRlLmFzc2lnbmVkX1twcm9wXTtcbiAgICB9XG4gICAgaWYgKHN0YXRlLmNvcHlfKSB7XG4gICAgICBkZWxldGUgc3RhdGUuY29weV9bcHJvcF07XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICAvLyBOb3RlOiBXZSBuZXZlciBjb2VyY2UgYGRlc2MudmFsdWVgIGludG8gYW4gSW1tZXIgZHJhZnQsIGJlY2F1c2Ugd2UgY2FuJ3QgbWFrZVxuICAvLyB0aGUgc2FtZSBndWFyYW50ZWUgaW4gRVM1IG1vZGUuXG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihzdGF0ZSwgcHJvcCkge1xuICAgIGNvbnN0IG93bmVyID0gbGF0ZXN0KHN0YXRlKTtcbiAgICBjb25zdCBkZXNjID0gUmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob3duZXIsIHByb3ApO1xuICAgIGlmICghZGVzYylcbiAgICAgIHJldHVybiBkZXNjO1xuICAgIHJldHVybiB7XG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogc3RhdGUudHlwZV8gIT09IDEgLyogQXJyYXkgKi8gfHwgcHJvcCAhPT0gXCJsZW5ndGhcIixcbiAgICAgIGVudW1lcmFibGU6IGRlc2MuZW51bWVyYWJsZSxcbiAgICAgIHZhbHVlOiBvd25lcltwcm9wXVxuICAgIH07XG4gIH0sXG4gIGRlZmluZVByb3BlcnR5KCkge1xuICAgIGRpZSgxMSk7XG4gIH0sXG4gIGdldFByb3RvdHlwZU9mKHN0YXRlKSB7XG4gICAgcmV0dXJuIGdldFByb3RvdHlwZU9mKHN0YXRlLmJhc2VfKTtcbiAgfSxcbiAgc2V0UHJvdG90eXBlT2YoKSB7XG4gICAgZGllKDEyKTtcbiAgfVxufTtcbnZhciBhcnJheVRyYXBzID0ge307XG5lYWNoKG9iamVjdFRyYXBzLCAoa2V5LCBmbikgPT4ge1xuICBhcnJheVRyYXBzW2tleV0gPSBmdW5jdGlvbigpIHtcbiAgICBhcmd1bWVudHNbMF0gPSBhcmd1bWVudHNbMF1bMF07XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59KTtcbmFycmF5VHJhcHMuZGVsZXRlUHJvcGVydHkgPSBmdW5jdGlvbihzdGF0ZSwgcHJvcCkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmIGlzTmFOKHBhcnNlSW50KHByb3ApKSlcbiAgICBkaWUoMTMpO1xuICByZXR1cm4gYXJyYXlUcmFwcy5zZXQuY2FsbCh0aGlzLCBzdGF0ZSwgcHJvcCwgdm9pZCAwKTtcbn07XG5hcnJheVRyYXBzLnNldCA9IGZ1bmN0aW9uKHN0YXRlLCBwcm9wLCB2YWx1ZSkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmIHByb3AgIT09IFwibGVuZ3RoXCIgJiYgaXNOYU4ocGFyc2VJbnQocHJvcCkpKVxuICAgIGRpZSgxNCk7XG4gIHJldHVybiBvYmplY3RUcmFwcy5zZXQuY2FsbCh0aGlzLCBzdGF0ZVswXSwgcHJvcCwgdmFsdWUsIHN0YXRlWzBdKTtcbn07XG5mdW5jdGlvbiBwZWVrKGRyYWZ0LCBwcm9wKSB7XG4gIGNvbnN0IHN0YXRlID0gZHJhZnRbRFJBRlRfU1RBVEVdO1xuICBjb25zdCBzb3VyY2UgPSBzdGF0ZSA/IGxhdGVzdChzdGF0ZSkgOiBkcmFmdDtcbiAgcmV0dXJuIHNvdXJjZVtwcm9wXTtcbn1cbmZ1bmN0aW9uIHJlYWRQcm9wRnJvbVByb3RvKHN0YXRlLCBzb3VyY2UsIHByb3ApIHtcbiAgY29uc3QgZGVzYyA9IGdldERlc2NyaXB0b3JGcm9tUHJvdG8oc291cmNlLCBwcm9wKTtcbiAgcmV0dXJuIGRlc2MgPyBgdmFsdWVgIGluIGRlc2MgPyBkZXNjLnZhbHVlIDogKFxuICAgIC8vIFRoaXMgaXMgYSB2ZXJ5IHNwZWNpYWwgY2FzZSwgaWYgdGhlIHByb3AgaXMgYSBnZXR0ZXIgZGVmaW5lZCBieSB0aGVcbiAgICAvLyBwcm90b3R5cGUsIHdlIHNob3VsZCBpbnZva2UgaXQgd2l0aCB0aGUgZHJhZnQgYXMgY29udGV4dCFcbiAgICBkZXNjLmdldD8uY2FsbChzdGF0ZS5kcmFmdF8pXG4gICkgOiB2b2lkIDA7XG59XG5mdW5jdGlvbiBnZXREZXNjcmlwdG9yRnJvbVByb3RvKHNvdXJjZSwgcHJvcCkge1xuICBpZiAoIShwcm9wIGluIHNvdXJjZSkpXG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgbGV0IHByb3RvID0gZ2V0UHJvdG90eXBlT2Yoc291cmNlKTtcbiAgd2hpbGUgKHByb3RvKSB7XG4gICAgY29uc3QgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG8sIHByb3ApO1xuICAgIGlmIChkZXNjKVxuICAgICAgcmV0dXJuIGRlc2M7XG4gICAgcHJvdG8gPSBnZXRQcm90b3R5cGVPZihwcm90byk7XG4gIH1cbiAgcmV0dXJuIHZvaWQgMDtcbn1cbmZ1bmN0aW9uIG1hcmtDaGFuZ2VkKHN0YXRlKSB7XG4gIGlmICghc3RhdGUubW9kaWZpZWRfKSB7XG4gICAgc3RhdGUubW9kaWZpZWRfID0gdHJ1ZTtcbiAgICBpZiAoc3RhdGUucGFyZW50Xykge1xuICAgICAgbWFya0NoYW5nZWQoc3RhdGUucGFyZW50Xyk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBwcmVwYXJlQ29weShzdGF0ZSkge1xuICBpZiAoIXN0YXRlLmNvcHlfKSB7XG4gICAgc3RhdGUuY29weV8gPSBzaGFsbG93Q29weShcbiAgICAgIHN0YXRlLmJhc2VfLFxuICAgICAgc3RhdGUuc2NvcGVfLmltbWVyXy51c2VTdHJpY3RTaGFsbG93Q29weV9cbiAgICApO1xuICB9XG59XG5cbi8vIHNyYy9jb3JlL2ltbWVyQ2xhc3MudHNcbnZhciBJbW1lcjIgPSBjbGFzcyB7XG4gIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgIHRoaXMuYXV0b0ZyZWV6ZV8gPSB0cnVlO1xuICAgIHRoaXMudXNlU3RyaWN0U2hhbGxvd0NvcHlfID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogVGhlIGBwcm9kdWNlYCBmdW5jdGlvbiB0YWtlcyBhIHZhbHVlIGFuZCBhIFwicmVjaXBlIGZ1bmN0aW9uXCIgKHdob3NlXG4gICAgICogcmV0dXJuIHZhbHVlIG9mdGVuIGRlcGVuZHMgb24gdGhlIGJhc2Ugc3RhdGUpLiBUaGUgcmVjaXBlIGZ1bmN0aW9uIGlzXG4gICAgICogZnJlZSB0byBtdXRhdGUgaXRzIGZpcnN0IGFyZ3VtZW50IGhvd2V2ZXIgaXQgd2FudHMuIEFsbCBtdXRhdGlvbnMgYXJlXG4gICAgICogb25seSBldmVyIGFwcGxpZWQgdG8gYSBfX2NvcHlfXyBvZiB0aGUgYmFzZSBzdGF0ZS5cbiAgICAgKlxuICAgICAqIFBhc3Mgb25seSBhIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIFwiY3VycmllZCBwcm9kdWNlclwiIHdoaWNoIHJlbGlldmVzIHlvdVxuICAgICAqIGZyb20gcGFzc2luZyB0aGUgcmVjaXBlIGZ1bmN0aW9uIGV2ZXJ5IHRpbWUuXG4gICAgICpcbiAgICAgKiBPbmx5IHBsYWluIG9iamVjdHMgYW5kIGFycmF5cyBhcmUgbWFkZSBtdXRhYmxlLiBBbGwgb3RoZXIgb2JqZWN0cyBhcmVcbiAgICAgKiBjb25zaWRlcmVkIHVuY29weWFibGUuXG4gICAgICpcbiAgICAgKiBOb3RlOiBUaGlzIGZ1bmN0aW9uIGlzIF9fYm91bmRfXyB0byBpdHMgYEltbWVyYCBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7YW55fSBiYXNlIC0gdGhlIGluaXRpYWwgc3RhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWNpcGUgLSBmdW5jdGlvbiB0aGF0IHJlY2VpdmVzIGEgcHJveHkgb2YgdGhlIGJhc2Ugc3RhdGUgYXMgZmlyc3QgYXJndW1lbnQgYW5kIHdoaWNoIGNhbiBiZSBmcmVlbHkgbW9kaWZpZWRcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwYXRjaExpc3RlbmVyIC0gb3B0aW9uYWwgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCB3aXRoIGFsbCB0aGUgcGF0Y2hlcyBwcm9kdWNlZCBoZXJlXG4gICAgICogQHJldHVybnMge2FueX0gYSBuZXcgc3RhdGUsIG9yIHRoZSBpbml0aWFsIHN0YXRlIGlmIG5vdGhpbmcgd2FzIG1vZGlmaWVkXG4gICAgICovXG4gICAgdGhpcy5wcm9kdWNlID0gKGJhc2UsIHJlY2lwZSwgcGF0Y2hMaXN0ZW5lcikgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBiYXNlID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIHJlY2lwZSAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRCYXNlID0gcmVjaXBlO1xuICAgICAgICByZWNpcGUgPSBiYXNlO1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGN1cnJpZWRQcm9kdWNlKGJhc2UyID0gZGVmYXVsdEJhc2UsIC4uLmFyZ3MpIHtcbiAgICAgICAgICByZXR1cm4gc2VsZi5wcm9kdWNlKGJhc2UyLCAoZHJhZnQpID0+IHJlY2lwZS5jYWxsKHRoaXMsIGRyYWZ0LCAuLi5hcmdzKSk7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHJlY2lwZSAhPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICBkaWUoNik7XG4gICAgICBpZiAocGF0Y2hMaXN0ZW5lciAhPT0gdm9pZCAwICYmIHR5cGVvZiBwYXRjaExpc3RlbmVyICE9PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGRpZSg3KTtcbiAgICAgIGxldCByZXN1bHQ7XG4gICAgICBpZiAoaXNEcmFmdGFibGUoYmFzZSkpIHtcbiAgICAgICAgY29uc3Qgc2NvcGUgPSBlbnRlclNjb3BlKHRoaXMpO1xuICAgICAgICBjb25zdCBwcm94eSA9IGNyZWF0ZVByb3h5KGJhc2UsIHZvaWQgMCk7XG4gICAgICAgIGxldCBoYXNFcnJvciA9IHRydWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmVzdWx0ID0gcmVjaXBlKHByb3h5KTtcbiAgICAgICAgICBoYXNFcnJvciA9IGZhbHNlO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGlmIChoYXNFcnJvcilcbiAgICAgICAgICAgIHJldm9rZVNjb3BlKHNjb3BlKTtcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBsZWF2ZVNjb3BlKHNjb3BlKTtcbiAgICAgICAgfVxuICAgICAgICB1c2VQYXRjaGVzSW5TY29wZShzY29wZSwgcGF0Y2hMaXN0ZW5lcik7XG4gICAgICAgIHJldHVybiBwcm9jZXNzUmVzdWx0KHJlc3VsdCwgc2NvcGUpO1xuICAgICAgfSBlbHNlIGlmICghYmFzZSB8fCB0eXBlb2YgYmFzZSAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICByZXN1bHQgPSByZWNpcGUoYmFzZSk7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMClcbiAgICAgICAgICByZXN1bHQgPSBiYXNlO1xuICAgICAgICBpZiAocmVzdWx0ID09PSBOT1RISU5HKVxuICAgICAgICAgIHJlc3VsdCA9IHZvaWQgMDtcbiAgICAgICAgaWYgKHRoaXMuYXV0b0ZyZWV6ZV8pXG4gICAgICAgICAgZnJlZXplKHJlc3VsdCwgdHJ1ZSk7XG4gICAgICAgIGlmIChwYXRjaExpc3RlbmVyKSB7XG4gICAgICAgICAgY29uc3QgcCA9IFtdO1xuICAgICAgICAgIGNvbnN0IGlwID0gW107XG4gICAgICAgICAgZ2V0UGx1Z2luKFwiUGF0Y2hlc1wiKS5nZW5lcmF0ZVJlcGxhY2VtZW50UGF0Y2hlc18oYmFzZSwgcmVzdWx0LCBwLCBpcCk7XG4gICAgICAgICAgcGF0Y2hMaXN0ZW5lcihwLCBpcCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0gZWxzZVxuICAgICAgICBkaWUoMSwgYmFzZSk7XG4gICAgfTtcbiAgICB0aGlzLnByb2R1Y2VXaXRoUGF0Y2hlcyA9IChiYXNlLCByZWNpcGUpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgYmFzZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiAoc3RhdGUsIC4uLmFyZ3MpID0+IHRoaXMucHJvZHVjZVdpdGhQYXRjaGVzKHN0YXRlLCAoZHJhZnQpID0+IGJhc2UoZHJhZnQsIC4uLmFyZ3MpKTtcbiAgICAgIH1cbiAgICAgIGxldCBwYXRjaGVzLCBpbnZlcnNlUGF0Y2hlcztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMucHJvZHVjZShiYXNlLCByZWNpcGUsIChwLCBpcCkgPT4ge1xuICAgICAgICBwYXRjaGVzID0gcDtcbiAgICAgICAgaW52ZXJzZVBhdGNoZXMgPSBpcDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIFtyZXN1bHQsIHBhdGNoZXMsIGludmVyc2VQYXRjaGVzXTtcbiAgICB9O1xuICAgIGlmICh0eXBlb2YgY29uZmlnPy5hdXRvRnJlZXplID09PSBcImJvb2xlYW5cIilcbiAgICAgIHRoaXMuc2V0QXV0b0ZyZWV6ZShjb25maWcuYXV0b0ZyZWV6ZSk7XG4gICAgaWYgKHR5cGVvZiBjb25maWc/LnVzZVN0cmljdFNoYWxsb3dDb3B5ID09PSBcImJvb2xlYW5cIilcbiAgICAgIHRoaXMuc2V0VXNlU3RyaWN0U2hhbGxvd0NvcHkoY29uZmlnLnVzZVN0cmljdFNoYWxsb3dDb3B5KTtcbiAgfVxuICBjcmVhdGVEcmFmdChiYXNlKSB7XG4gICAgaWYgKCFpc0RyYWZ0YWJsZShiYXNlKSlcbiAgICAgIGRpZSg4KTtcbiAgICBpZiAoaXNEcmFmdChiYXNlKSlcbiAgICAgIGJhc2UgPSBjdXJyZW50KGJhc2UpO1xuICAgIGNvbnN0IHNjb3BlID0gZW50ZXJTY29wZSh0aGlzKTtcbiAgICBjb25zdCBwcm94eSA9IGNyZWF0ZVByb3h5KGJhc2UsIHZvaWQgMCk7XG4gICAgcHJveHlbRFJBRlRfU1RBVEVdLmlzTWFudWFsXyA9IHRydWU7XG4gICAgbGVhdmVTY29wZShzY29wZSk7XG4gICAgcmV0dXJuIHByb3h5O1xuICB9XG4gIGZpbmlzaERyYWZ0KGRyYWZ0LCBwYXRjaExpc3RlbmVyKSB7XG4gICAgY29uc3Qgc3RhdGUgPSBkcmFmdCAmJiBkcmFmdFtEUkFGVF9TVEFURV07XG4gICAgaWYgKCFzdGF0ZSB8fCAhc3RhdGUuaXNNYW51YWxfKVxuICAgICAgZGllKDkpO1xuICAgIGNvbnN0IHsgc2NvcGVfOiBzY29wZSB9ID0gc3RhdGU7XG4gICAgdXNlUGF0Y2hlc0luU2NvcGUoc2NvcGUsIHBhdGNoTGlzdGVuZXIpO1xuICAgIHJldHVybiBwcm9jZXNzUmVzdWx0KHZvaWQgMCwgc2NvcGUpO1xuICB9XG4gIC8qKlxuICAgKiBQYXNzIHRydWUgdG8gYXV0b21hdGljYWxseSBmcmVlemUgYWxsIGNvcGllcyBjcmVhdGVkIGJ5IEltbWVyLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCBhdXRvLWZyZWV6aW5nIGlzIGVuYWJsZWQuXG4gICAqL1xuICBzZXRBdXRvRnJlZXplKHZhbHVlKSB7XG4gICAgdGhpcy5hdXRvRnJlZXplXyA9IHZhbHVlO1xuICB9XG4gIC8qKlxuICAgKiBQYXNzIHRydWUgdG8gZW5hYmxlIHN0cmljdCBzaGFsbG93IGNvcHkuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIGltbWVyIGRvZXMgbm90IGNvcHkgdGhlIG9iamVjdCBkZXNjcmlwdG9ycyBzdWNoIGFzIGdldHRlciwgc2V0dGVyIGFuZCBub24tZW51bXJhYmxlIHByb3BlcnRpZXMuXG4gICAqL1xuICBzZXRVc2VTdHJpY3RTaGFsbG93Q29weSh2YWx1ZSkge1xuICAgIHRoaXMudXNlU3RyaWN0U2hhbGxvd0NvcHlfID0gdmFsdWU7XG4gIH1cbiAgYXBwbHlQYXRjaGVzKGJhc2UsIHBhdGNoZXMpIHtcbiAgICBsZXQgaTtcbiAgICBmb3IgKGkgPSBwYXRjaGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBjb25zdCBwYXRjaCA9IHBhdGNoZXNbaV07XG4gICAgICBpZiAocGF0Y2gucGF0aC5sZW5ndGggPT09IDAgJiYgcGF0Y2gub3AgPT09IFwicmVwbGFjZVwiKSB7XG4gICAgICAgIGJhc2UgPSBwYXRjaC52YWx1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpID4gLTEpIHtcbiAgICAgIHBhdGNoZXMgPSBwYXRjaGVzLnNsaWNlKGkgKyAxKTtcbiAgICB9XG4gICAgY29uc3QgYXBwbHlQYXRjaGVzSW1wbCA9IGdldFBsdWdpbihcIlBhdGNoZXNcIikuYXBwbHlQYXRjaGVzXztcbiAgICBpZiAoaXNEcmFmdChiYXNlKSkge1xuICAgICAgcmV0dXJuIGFwcGx5UGF0Y2hlc0ltcGwoYmFzZSwgcGF0Y2hlcyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnByb2R1Y2UoXG4gICAgICBiYXNlLFxuICAgICAgKGRyYWZ0KSA9PiBhcHBseVBhdGNoZXNJbXBsKGRyYWZ0LCBwYXRjaGVzKVxuICAgICk7XG4gIH1cbn07XG5mdW5jdGlvbiBjcmVhdGVQcm94eSh2YWx1ZSwgcGFyZW50KSB7XG4gIGNvbnN0IGRyYWZ0ID0gaXNNYXAodmFsdWUpID8gZ2V0UGx1Z2luKFwiTWFwU2V0XCIpLnByb3h5TWFwXyh2YWx1ZSwgcGFyZW50KSA6IGlzU2V0KHZhbHVlKSA/IGdldFBsdWdpbihcIk1hcFNldFwiKS5wcm94eVNldF8odmFsdWUsIHBhcmVudCkgOiBjcmVhdGVQcm94eVByb3h5KHZhbHVlLCBwYXJlbnQpO1xuICBjb25zdCBzY29wZSA9IHBhcmVudCA/IHBhcmVudC5zY29wZV8gOiBnZXRDdXJyZW50U2NvcGUoKTtcbiAgc2NvcGUuZHJhZnRzXy5wdXNoKGRyYWZ0KTtcbiAgcmV0dXJuIGRyYWZ0O1xufVxuXG4vLyBzcmMvY29yZS9jdXJyZW50LnRzXG5mdW5jdGlvbiBjdXJyZW50KHZhbHVlKSB7XG4gIGlmICghaXNEcmFmdCh2YWx1ZSkpXG4gICAgZGllKDEwLCB2YWx1ZSk7XG4gIHJldHVybiBjdXJyZW50SW1wbCh2YWx1ZSk7XG59XG5mdW5jdGlvbiBjdXJyZW50SW1wbCh2YWx1ZSkge1xuICBpZiAoIWlzRHJhZnRhYmxlKHZhbHVlKSB8fCBpc0Zyb3plbih2YWx1ZSkpXG4gICAgcmV0dXJuIHZhbHVlO1xuICBjb25zdCBzdGF0ZSA9IHZhbHVlW0RSQUZUX1NUQVRFXTtcbiAgbGV0IGNvcHk7XG4gIGlmIChzdGF0ZSkge1xuICAgIGlmICghc3RhdGUubW9kaWZpZWRfKVxuICAgICAgcmV0dXJuIHN0YXRlLmJhc2VfO1xuICAgIHN0YXRlLmZpbmFsaXplZF8gPSB0cnVlO1xuICAgIGNvcHkgPSBzaGFsbG93Q29weSh2YWx1ZSwgc3RhdGUuc2NvcGVfLmltbWVyXy51c2VTdHJpY3RTaGFsbG93Q29weV8pO1xuICB9IGVsc2Uge1xuICAgIGNvcHkgPSBzaGFsbG93Q29weSh2YWx1ZSwgdHJ1ZSk7XG4gIH1cbiAgZWFjaChjb3B5LCAoa2V5LCBjaGlsZFZhbHVlKSA9PiB7XG4gICAgc2V0KGNvcHksIGtleSwgY3VycmVudEltcGwoY2hpbGRWYWx1ZSkpO1xuICB9KTtcbiAgaWYgKHN0YXRlKSB7XG4gICAgc3RhdGUuZmluYWxpemVkXyA9IGZhbHNlO1xuICB9XG4gIHJldHVybiBjb3B5O1xufVxuXG4vLyBzcmMvcGx1Z2lucy9wYXRjaGVzLnRzXG5mdW5jdGlvbiBlbmFibGVQYXRjaGVzKCkge1xuICBjb25zdCBlcnJvck9mZnNldCA9IDE2O1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgZXJyb3JzLnB1c2goXG4gICAgICAnU2V0cyBjYW5ub3QgaGF2ZSBcInJlcGxhY2VcIiBwYXRjaGVzLicsXG4gICAgICBmdW5jdGlvbihvcCkge1xuICAgICAgICByZXR1cm4gXCJVbnN1cHBvcnRlZCBwYXRjaCBvcGVyYXRpb246IFwiICsgb3A7XG4gICAgICB9LFxuICAgICAgZnVuY3Rpb24ocGF0aCkge1xuICAgICAgICByZXR1cm4gXCJDYW5ub3QgYXBwbHkgcGF0Y2gsIHBhdGggZG9lc24ndCByZXNvbHZlOiBcIiArIHBhdGg7XG4gICAgICB9LFxuICAgICAgXCJQYXRjaGluZyByZXNlcnZlZCBhdHRyaWJ1dGVzIGxpa2UgX19wcm90b19fLCBwcm90b3R5cGUgYW5kIGNvbnN0cnVjdG9yIGlzIG5vdCBhbGxvd2VkXCJcbiAgICApO1xuICB9XG4gIGNvbnN0IFJFUExBQ0UgPSBcInJlcGxhY2VcIjtcbiAgY29uc3QgQUREID0gXCJhZGRcIjtcbiAgY29uc3QgUkVNT1ZFID0gXCJyZW1vdmVcIjtcbiAgZnVuY3Rpb24gZ2VuZXJhdGVQYXRjaGVzXyhzdGF0ZSwgYmFzZVBhdGgsIHBhdGNoZXMsIGludmVyc2VQYXRjaGVzKSB7XG4gICAgc3dpdGNoIChzdGF0ZS50eXBlXykge1xuICAgICAgY2FzZSAwIC8qIE9iamVjdCAqLzpcbiAgICAgIGNhc2UgMiAvKiBNYXAgKi86XG4gICAgICAgIHJldHVybiBnZW5lcmF0ZVBhdGNoZXNGcm9tQXNzaWduZWQoXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgYmFzZVBhdGgsXG4gICAgICAgICAgcGF0Y2hlcyxcbiAgICAgICAgICBpbnZlcnNlUGF0Y2hlc1xuICAgICAgICApO1xuICAgICAgY2FzZSAxIC8qIEFycmF5ICovOlxuICAgICAgICByZXR1cm4gZ2VuZXJhdGVBcnJheVBhdGNoZXMoc3RhdGUsIGJhc2VQYXRoLCBwYXRjaGVzLCBpbnZlcnNlUGF0Y2hlcyk7XG4gICAgICBjYXNlIDMgLyogU2V0ICovOlxuICAgICAgICByZXR1cm4gZ2VuZXJhdGVTZXRQYXRjaGVzKFxuICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgIGJhc2VQYXRoLFxuICAgICAgICAgIHBhdGNoZXMsXG4gICAgICAgICAgaW52ZXJzZVBhdGNoZXNcbiAgICAgICAgKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gZ2VuZXJhdGVBcnJheVBhdGNoZXMoc3RhdGUsIGJhc2VQYXRoLCBwYXRjaGVzLCBpbnZlcnNlUGF0Y2hlcykge1xuICAgIGxldCB7IGJhc2VfLCBhc3NpZ25lZF8gfSA9IHN0YXRlO1xuICAgIGxldCBjb3B5XyA9IHN0YXRlLmNvcHlfO1xuICAgIGlmIChjb3B5Xy5sZW5ndGggPCBiYXNlXy5sZW5ndGgpIHtcbiAgICAgIDtcbiAgICAgIFtiYXNlXywgY29weV9dID0gW2NvcHlfLCBiYXNlX107XG4gICAgICBbcGF0Y2hlcywgaW52ZXJzZVBhdGNoZXNdID0gW2ludmVyc2VQYXRjaGVzLCBwYXRjaGVzXTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiYXNlXy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGFzc2lnbmVkX1tpXSAmJiBjb3B5X1tpXSAhPT0gYmFzZV9baV0pIHtcbiAgICAgICAgY29uc3QgcGF0aCA9IGJhc2VQYXRoLmNvbmNhdChbaV0pO1xuICAgICAgICBwYXRjaGVzLnB1c2goe1xuICAgICAgICAgIG9wOiBSRVBMQUNFLFxuICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgLy8gTmVlZCB0byBtYXliZSBjbG9uZSBpdCwgYXMgaXQgY2FuIGluIGZhY3QgYmUgdGhlIG9yaWdpbmFsIHZhbHVlXG4gICAgICAgICAgLy8gZHVlIHRvIHRoZSBiYXNlL2NvcHkgaW52ZXJzaW9uIGF0IHRoZSBzdGFydCBvZiB0aGlzIGZ1bmN0aW9uXG4gICAgICAgICAgdmFsdWU6IGNsb25lUGF0Y2hWYWx1ZUlmTmVlZGVkKGNvcHlfW2ldKVxuICAgICAgICB9KTtcbiAgICAgICAgaW52ZXJzZVBhdGNoZXMucHVzaCh7XG4gICAgICAgICAgb3A6IFJFUExBQ0UsXG4gICAgICAgICAgcGF0aCxcbiAgICAgICAgICB2YWx1ZTogY2xvbmVQYXRjaFZhbHVlSWZOZWVkZWQoYmFzZV9baV0pXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGxldCBpID0gYmFzZV8ubGVuZ3RoOyBpIDwgY29weV8ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHBhdGggPSBiYXNlUGF0aC5jb25jYXQoW2ldKTtcbiAgICAgIHBhdGNoZXMucHVzaCh7XG4gICAgICAgIG9wOiBBREQsXG4gICAgICAgIHBhdGgsXG4gICAgICAgIC8vIE5lZWQgdG8gbWF5YmUgY2xvbmUgaXQsIGFzIGl0IGNhbiBpbiBmYWN0IGJlIHRoZSBvcmlnaW5hbCB2YWx1ZVxuICAgICAgICAvLyBkdWUgdG8gdGhlIGJhc2UvY29weSBpbnZlcnNpb24gYXQgdGhlIHN0YXJ0IG9mIHRoaXMgZnVuY3Rpb25cbiAgICAgICAgdmFsdWU6IGNsb25lUGF0Y2hWYWx1ZUlmTmVlZGVkKGNvcHlfW2ldKVxuICAgICAgfSk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSBjb3B5Xy5sZW5ndGggLSAxOyBiYXNlXy5sZW5ndGggPD0gaTsgLS1pKSB7XG4gICAgICBjb25zdCBwYXRoID0gYmFzZVBhdGguY29uY2F0KFtpXSk7XG4gICAgICBpbnZlcnNlUGF0Y2hlcy5wdXNoKHtcbiAgICAgICAgb3A6IFJFTU9WRSxcbiAgICAgICAgcGF0aFxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGdlbmVyYXRlUGF0Y2hlc0Zyb21Bc3NpZ25lZChzdGF0ZSwgYmFzZVBhdGgsIHBhdGNoZXMsIGludmVyc2VQYXRjaGVzKSB7XG4gICAgY29uc3QgeyBiYXNlXywgY29weV8gfSA9IHN0YXRlO1xuICAgIGVhY2goc3RhdGUuYXNzaWduZWRfLCAoa2V5LCBhc3NpZ25lZFZhbHVlKSA9PiB7XG4gICAgICBjb25zdCBvcmlnVmFsdWUgPSBnZXQoYmFzZV8sIGtleSk7XG4gICAgICBjb25zdCB2YWx1ZSA9IGdldChjb3B5Xywga2V5KTtcbiAgICAgIGNvbnN0IG9wID0gIWFzc2lnbmVkVmFsdWUgPyBSRU1PVkUgOiBoYXMoYmFzZV8sIGtleSkgPyBSRVBMQUNFIDogQUREO1xuICAgICAgaWYgKG9yaWdWYWx1ZSA9PT0gdmFsdWUgJiYgb3AgPT09IFJFUExBQ0UpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNvbnN0IHBhdGggPSBiYXNlUGF0aC5jb25jYXQoa2V5KTtcbiAgICAgIHBhdGNoZXMucHVzaChvcCA9PT0gUkVNT1ZFID8geyBvcCwgcGF0aCB9IDogeyBvcCwgcGF0aCwgdmFsdWUgfSk7XG4gICAgICBpbnZlcnNlUGF0Y2hlcy5wdXNoKFxuICAgICAgICBvcCA9PT0gQUREID8geyBvcDogUkVNT1ZFLCBwYXRoIH0gOiBvcCA9PT0gUkVNT1ZFID8geyBvcDogQURELCBwYXRoLCB2YWx1ZTogY2xvbmVQYXRjaFZhbHVlSWZOZWVkZWQob3JpZ1ZhbHVlKSB9IDogeyBvcDogUkVQTEFDRSwgcGF0aCwgdmFsdWU6IGNsb25lUGF0Y2hWYWx1ZUlmTmVlZGVkKG9yaWdWYWx1ZSkgfVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiBnZW5lcmF0ZVNldFBhdGNoZXMoc3RhdGUsIGJhc2VQYXRoLCBwYXRjaGVzLCBpbnZlcnNlUGF0Y2hlcykge1xuICAgIGxldCB7IGJhc2VfLCBjb3B5XyB9ID0gc3RhdGU7XG4gICAgbGV0IGkgPSAwO1xuICAgIGJhc2VfLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICBpZiAoIWNvcHlfLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgY29uc3QgcGF0aCA9IGJhc2VQYXRoLmNvbmNhdChbaV0pO1xuICAgICAgICBwYXRjaGVzLnB1c2goe1xuICAgICAgICAgIG9wOiBSRU1PVkUsXG4gICAgICAgICAgcGF0aCxcbiAgICAgICAgICB2YWx1ZVxuICAgICAgICB9KTtcbiAgICAgICAgaW52ZXJzZVBhdGNoZXMudW5zaGlmdCh7XG4gICAgICAgICAgb3A6IEFERCxcbiAgICAgICAgICBwYXRoLFxuICAgICAgICAgIHZhbHVlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaSsrO1xuICAgIH0pO1xuICAgIGkgPSAwO1xuICAgIGNvcHlfLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICBpZiAoIWJhc2VfLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgY29uc3QgcGF0aCA9IGJhc2VQYXRoLmNvbmNhdChbaV0pO1xuICAgICAgICBwYXRjaGVzLnB1c2goe1xuICAgICAgICAgIG9wOiBBREQsXG4gICAgICAgICAgcGF0aCxcbiAgICAgICAgICB2YWx1ZVxuICAgICAgICB9KTtcbiAgICAgICAgaW52ZXJzZVBhdGNoZXMudW5zaGlmdCh7XG4gICAgICAgICAgb3A6IFJFTU9WRSxcbiAgICAgICAgICBwYXRoLFxuICAgICAgICAgIHZhbHVlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaSsrO1xuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIGdlbmVyYXRlUmVwbGFjZW1lbnRQYXRjaGVzXyhiYXNlVmFsdWUsIHJlcGxhY2VtZW50LCBwYXRjaGVzLCBpbnZlcnNlUGF0Y2hlcykge1xuICAgIHBhdGNoZXMucHVzaCh7XG4gICAgICBvcDogUkVQTEFDRSxcbiAgICAgIHBhdGg6IFtdLFxuICAgICAgdmFsdWU6IHJlcGxhY2VtZW50ID09PSBOT1RISU5HID8gdm9pZCAwIDogcmVwbGFjZW1lbnRcbiAgICB9KTtcbiAgICBpbnZlcnNlUGF0Y2hlcy5wdXNoKHtcbiAgICAgIG9wOiBSRVBMQUNFLFxuICAgICAgcGF0aDogW10sXG4gICAgICB2YWx1ZTogYmFzZVZhbHVlXG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gYXBwbHlQYXRjaGVzXyhkcmFmdCwgcGF0Y2hlcykge1xuICAgIHBhdGNoZXMuZm9yRWFjaCgocGF0Y2gpID0+IHtcbiAgICAgIGNvbnN0IHsgcGF0aCwgb3AgfSA9IHBhdGNoO1xuICAgICAgbGV0IGJhc2UgPSBkcmFmdDtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgY29uc3QgcGFyZW50VHlwZSA9IGdldEFyY2h0eXBlKGJhc2UpO1xuICAgICAgICBsZXQgcCA9IHBhdGhbaV07XG4gICAgICAgIGlmICh0eXBlb2YgcCAhPT0gXCJzdHJpbmdcIiAmJiB0eXBlb2YgcCAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgIHAgPSBcIlwiICsgcDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKHBhcmVudFR5cGUgPT09IDAgLyogT2JqZWN0ICovIHx8IHBhcmVudFR5cGUgPT09IDEgLyogQXJyYXkgKi8pICYmIChwID09PSBcIl9fcHJvdG9fX1wiIHx8IHAgPT09IFwiY29uc3RydWN0b3JcIikpXG4gICAgICAgICAgZGllKGVycm9yT2Zmc2V0ICsgMyk7XG4gICAgICAgIGlmICh0eXBlb2YgYmFzZSA9PT0gXCJmdW5jdGlvblwiICYmIHAgPT09IFwicHJvdG90eXBlXCIpXG4gICAgICAgICAgZGllKGVycm9yT2Zmc2V0ICsgMyk7XG4gICAgICAgIGJhc2UgPSBnZXQoYmFzZSwgcCk7XG4gICAgICAgIGlmICh0eXBlb2YgYmFzZSAhPT0gXCJvYmplY3RcIilcbiAgICAgICAgICBkaWUoZXJyb3JPZmZzZXQgKyAyLCBwYXRoLmpvaW4oXCIvXCIpKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHR5cGUgPSBnZXRBcmNodHlwZShiYXNlKTtcbiAgICAgIGNvbnN0IHZhbHVlID0gZGVlcENsb25lUGF0Y2hWYWx1ZShwYXRjaC52YWx1ZSk7XG4gICAgICBjb25zdCBrZXkgPSBwYXRoW3BhdGgubGVuZ3RoIC0gMV07XG4gICAgICBzd2l0Y2ggKG9wKSB7XG4gICAgICAgIGNhc2UgUkVQTEFDRTpcbiAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgMiAvKiBNYXAgKi86XG4gICAgICAgICAgICAgIHJldHVybiBiYXNlLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgICAgIGNhc2UgMyAvKiBTZXQgKi86XG4gICAgICAgICAgICAgIGRpZShlcnJvck9mZnNldCk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gYmFzZVtrZXldID0gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlIEFERDpcbiAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgMSAvKiBBcnJheSAqLzpcbiAgICAgICAgICAgICAgcmV0dXJuIGtleSA9PT0gXCItXCIgPyBiYXNlLnB1c2godmFsdWUpIDogYmFzZS5zcGxpY2Uoa2V5LCAwLCB2YWx1ZSk7XG4gICAgICAgICAgICBjYXNlIDIgLyogTWFwICovOlxuICAgICAgICAgICAgICByZXR1cm4gYmFzZS5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICBjYXNlIDMgLyogU2V0ICovOlxuICAgICAgICAgICAgICByZXR1cm4gYmFzZS5hZGQodmFsdWUpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgcmV0dXJuIGJhc2Vba2V5XSA9IHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgY2FzZSBSRU1PVkU6XG4gICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlIDEgLyogQXJyYXkgKi86XG4gICAgICAgICAgICAgIHJldHVybiBiYXNlLnNwbGljZShrZXksIDEpO1xuICAgICAgICAgICAgY2FzZSAyIC8qIE1hcCAqLzpcbiAgICAgICAgICAgICAgcmV0dXJuIGJhc2UuZGVsZXRlKGtleSk7XG4gICAgICAgICAgICBjYXNlIDMgLyogU2V0ICovOlxuICAgICAgICAgICAgICByZXR1cm4gYmFzZS5kZWxldGUocGF0Y2gudmFsdWUpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgcmV0dXJuIGRlbGV0ZSBiYXNlW2tleV07XG4gICAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGRpZShlcnJvck9mZnNldCArIDEsIG9wKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZHJhZnQ7XG4gIH1cbiAgZnVuY3Rpb24gZGVlcENsb25lUGF0Y2hWYWx1ZShvYmopIHtcbiAgICBpZiAoIWlzRHJhZnRhYmxlKG9iaikpXG4gICAgICByZXR1cm4gb2JqO1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpXG4gICAgICByZXR1cm4gb2JqLm1hcChkZWVwQ2xvbmVQYXRjaFZhbHVlKTtcbiAgICBpZiAoaXNNYXAob2JqKSlcbiAgICAgIHJldHVybiBuZXcgTWFwKFxuICAgICAgICBBcnJheS5mcm9tKG9iai5lbnRyaWVzKCkpLm1hcCgoW2ssIHZdKSA9PiBbaywgZGVlcENsb25lUGF0Y2hWYWx1ZSh2KV0pXG4gICAgICApO1xuICAgIGlmIChpc1NldChvYmopKVxuICAgICAgcmV0dXJuIG5ldyBTZXQoQXJyYXkuZnJvbShvYmopLm1hcChkZWVwQ2xvbmVQYXRjaFZhbHVlKSk7XG4gICAgY29uc3QgY2xvbmVkID0gT2JqZWN0LmNyZWF0ZShnZXRQcm90b3R5cGVPZihvYmopKTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopXG4gICAgICBjbG9uZWRba2V5XSA9IGRlZXBDbG9uZVBhdGNoVmFsdWUob2JqW2tleV0pO1xuICAgIGlmIChoYXMob2JqLCBEUkFGVEFCTEUpKVxuICAgICAgY2xvbmVkW0RSQUZUQUJMRV0gPSBvYmpbRFJBRlRBQkxFXTtcbiAgICByZXR1cm4gY2xvbmVkO1xuICB9XG4gIGZ1bmN0aW9uIGNsb25lUGF0Y2hWYWx1ZUlmTmVlZGVkKG9iaikge1xuICAgIGlmIChpc0RyYWZ0KG9iaikpIHtcbiAgICAgIHJldHVybiBkZWVwQ2xvbmVQYXRjaFZhbHVlKG9iaik7XG4gICAgfSBlbHNlXG4gICAgICByZXR1cm4gb2JqO1xuICB9XG4gIGxvYWRQbHVnaW4oXCJQYXRjaGVzXCIsIHtcbiAgICBhcHBseVBhdGNoZXNfLFxuICAgIGdlbmVyYXRlUGF0Y2hlc18sXG4gICAgZ2VuZXJhdGVSZXBsYWNlbWVudFBhdGNoZXNfXG4gIH0pO1xufVxuXG4vLyBzcmMvcGx1Z2lucy9tYXBzZXQudHNcbmZ1bmN0aW9uIGVuYWJsZU1hcFNldCgpIHtcbiAgY2xhc3MgRHJhZnRNYXAgZXh0ZW5kcyBNYXAge1xuICAgIGNvbnN0cnVjdG9yKHRhcmdldCwgcGFyZW50KSB7XG4gICAgICBzdXBlcigpO1xuICAgICAgdGhpc1tEUkFGVF9TVEFURV0gPSB7XG4gICAgICAgIHR5cGVfOiAyIC8qIE1hcCAqLyxcbiAgICAgICAgcGFyZW50XzogcGFyZW50LFxuICAgICAgICBzY29wZV86IHBhcmVudCA/IHBhcmVudC5zY29wZV8gOiBnZXRDdXJyZW50U2NvcGUoKSxcbiAgICAgICAgbW9kaWZpZWRfOiBmYWxzZSxcbiAgICAgICAgZmluYWxpemVkXzogZmFsc2UsXG4gICAgICAgIGNvcHlfOiB2b2lkIDAsXG4gICAgICAgIGFzc2lnbmVkXzogdm9pZCAwLFxuICAgICAgICBiYXNlXzogdGFyZ2V0LFxuICAgICAgICBkcmFmdF86IHRoaXMsXG4gICAgICAgIGlzTWFudWFsXzogZmFsc2UsXG4gICAgICAgIHJldm9rZWRfOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG4gICAgZ2V0IHNpemUoKSB7XG4gICAgICByZXR1cm4gbGF0ZXN0KHRoaXNbRFJBRlRfU1RBVEVdKS5zaXplO1xuICAgIH1cbiAgICBoYXMoa2V5KSB7XG4gICAgICByZXR1cm4gbGF0ZXN0KHRoaXNbRFJBRlRfU1RBVEVdKS5oYXMoa2V5KTtcbiAgICB9XG4gICAgc2V0KGtleSwgdmFsdWUpIHtcbiAgICAgIGNvbnN0IHN0YXRlID0gdGhpc1tEUkFGVF9TVEFURV07XG4gICAgICBhc3NlcnRVbnJldm9rZWQoc3RhdGUpO1xuICAgICAgaWYgKCFsYXRlc3Qoc3RhdGUpLmhhcyhrZXkpIHx8IGxhdGVzdChzdGF0ZSkuZ2V0KGtleSkgIT09IHZhbHVlKSB7XG4gICAgICAgIHByZXBhcmVNYXBDb3B5KHN0YXRlKTtcbiAgICAgICAgbWFya0NoYW5nZWQoc3RhdGUpO1xuICAgICAgICBzdGF0ZS5hc3NpZ25lZF8uc2V0KGtleSwgdHJ1ZSk7XG4gICAgICAgIHN0YXRlLmNvcHlfLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgc3RhdGUuYXNzaWduZWRfLnNldChrZXksIHRydWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGRlbGV0ZShrZXkpIHtcbiAgICAgIGlmICghdGhpcy5oYXMoa2V5KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBjb25zdCBzdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdO1xuICAgICAgYXNzZXJ0VW5yZXZva2VkKHN0YXRlKTtcbiAgICAgIHByZXBhcmVNYXBDb3B5KHN0YXRlKTtcbiAgICAgIG1hcmtDaGFuZ2VkKHN0YXRlKTtcbiAgICAgIGlmIChzdGF0ZS5iYXNlXy5oYXMoa2V5KSkge1xuICAgICAgICBzdGF0ZS5hc3NpZ25lZF8uc2V0KGtleSwgZmFsc2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdGUuYXNzaWduZWRfLmRlbGV0ZShrZXkpO1xuICAgICAgfVxuICAgICAgc3RhdGUuY29weV8uZGVsZXRlKGtleSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY2xlYXIoKSB7XG4gICAgICBjb25zdCBzdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdO1xuICAgICAgYXNzZXJ0VW5yZXZva2VkKHN0YXRlKTtcbiAgICAgIGlmIChsYXRlc3Qoc3RhdGUpLnNpemUpIHtcbiAgICAgICAgcHJlcGFyZU1hcENvcHkoc3RhdGUpO1xuICAgICAgICBtYXJrQ2hhbmdlZChzdGF0ZSk7XG4gICAgICAgIHN0YXRlLmFzc2lnbmVkXyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gICAgICAgIGVhY2goc3RhdGUuYmFzZV8sIChrZXkpID0+IHtcbiAgICAgICAgICBzdGF0ZS5hc3NpZ25lZF8uc2V0KGtleSwgZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICAgICAgc3RhdGUuY29weV8uY2xlYXIoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yRWFjaChjYiwgdGhpc0FyZykge1xuICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzW0RSQUZUX1NUQVRFXTtcbiAgICAgIGxhdGVzdChzdGF0ZSkuZm9yRWFjaCgoX3ZhbHVlLCBrZXksIF9tYXApID0+IHtcbiAgICAgICAgY2IuY2FsbCh0aGlzQXJnLCB0aGlzLmdldChrZXkpLCBrZXksIHRoaXMpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGdldChrZXkpIHtcbiAgICAgIGNvbnN0IHN0YXRlID0gdGhpc1tEUkFGVF9TVEFURV07XG4gICAgICBhc3NlcnRVbnJldm9rZWQoc3RhdGUpO1xuICAgICAgY29uc3QgdmFsdWUgPSBsYXRlc3Qoc3RhdGUpLmdldChrZXkpO1xuICAgICAgaWYgKHN0YXRlLmZpbmFsaXplZF8gfHwgIWlzRHJhZnRhYmxlKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUgIT09IHN0YXRlLmJhc2VfLmdldChrZXkpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRyYWZ0ID0gY3JlYXRlUHJveHkodmFsdWUsIHN0YXRlKTtcbiAgICAgIHByZXBhcmVNYXBDb3B5KHN0YXRlKTtcbiAgICAgIHN0YXRlLmNvcHlfLnNldChrZXksIGRyYWZ0KTtcbiAgICAgIHJldHVybiBkcmFmdDtcbiAgICB9XG4gICAga2V5cygpIHtcbiAgICAgIHJldHVybiBsYXRlc3QodGhpc1tEUkFGVF9TVEFURV0pLmtleXMoKTtcbiAgICB9XG4gICAgdmFsdWVzKCkge1xuICAgICAgY29uc3QgaXRlcmF0b3IgPSB0aGlzLmtleXMoKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFtTeW1ib2wuaXRlcmF0b3JdOiAoKSA9PiB0aGlzLnZhbHVlcygpLFxuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgciA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICBpZiAoci5kb25lKVxuICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldChyLnZhbHVlKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZG9uZTogZmFsc2UsXG4gICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIGVudHJpZXMoKSB7XG4gICAgICBjb25zdCBpdGVyYXRvciA9IHRoaXMua2V5cygpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW1N5bWJvbC5pdGVyYXRvcl06ICgpID0+IHRoaXMuZW50cmllcygpLFxuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgciA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICBpZiAoci5kb25lKVxuICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldChyLnZhbHVlKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZG9uZTogZmFsc2UsXG4gICAgICAgICAgICB2YWx1ZTogW3IudmFsdWUsIHZhbHVlXVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIFsoRFJBRlRfU1RBVEUsIFN5bWJvbC5pdGVyYXRvcildKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZW50cmllcygpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBwcm94eU1hcF8odGFyZ2V0LCBwYXJlbnQpIHtcbiAgICByZXR1cm4gbmV3IERyYWZ0TWFwKHRhcmdldCwgcGFyZW50KTtcbiAgfVxuICBmdW5jdGlvbiBwcmVwYXJlTWFwQ29weShzdGF0ZSkge1xuICAgIGlmICghc3RhdGUuY29weV8pIHtcbiAgICAgIHN0YXRlLmFzc2lnbmVkXyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gICAgICBzdGF0ZS5jb3B5XyA9IG5ldyBNYXAoc3RhdGUuYmFzZV8pO1xuICAgIH1cbiAgfVxuICBjbGFzcyBEcmFmdFNldCBleHRlbmRzIFNldCB7XG4gICAgY29uc3RydWN0b3IodGFyZ2V0LCBwYXJlbnQpIHtcbiAgICAgIHN1cGVyKCk7XG4gICAgICB0aGlzW0RSQUZUX1NUQVRFXSA9IHtcbiAgICAgICAgdHlwZV86IDMgLyogU2V0ICovLFxuICAgICAgICBwYXJlbnRfOiBwYXJlbnQsXG4gICAgICAgIHNjb3BlXzogcGFyZW50ID8gcGFyZW50LnNjb3BlXyA6IGdldEN1cnJlbnRTY29wZSgpLFxuICAgICAgICBtb2RpZmllZF86IGZhbHNlLFxuICAgICAgICBmaW5hbGl6ZWRfOiBmYWxzZSxcbiAgICAgICAgY29weV86IHZvaWQgMCxcbiAgICAgICAgYmFzZV86IHRhcmdldCxcbiAgICAgICAgZHJhZnRfOiB0aGlzLFxuICAgICAgICBkcmFmdHNfOiAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpLFxuICAgICAgICByZXZva2VkXzogZmFsc2UsXG4gICAgICAgIGlzTWFudWFsXzogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuICAgIGdldCBzaXplKCkge1xuICAgICAgcmV0dXJuIGxhdGVzdCh0aGlzW0RSQUZUX1NUQVRFXSkuc2l6ZTtcbiAgICB9XG4gICAgaGFzKHZhbHVlKSB7XG4gICAgICBjb25zdCBzdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdO1xuICAgICAgYXNzZXJ0VW5yZXZva2VkKHN0YXRlKTtcbiAgICAgIGlmICghc3RhdGUuY29weV8pIHtcbiAgICAgICAgcmV0dXJuIHN0YXRlLmJhc2VfLmhhcyh2YWx1ZSk7XG4gICAgICB9XG4gICAgICBpZiAoc3RhdGUuY29weV8uaGFzKHZhbHVlKSlcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBpZiAoc3RhdGUuZHJhZnRzXy5oYXModmFsdWUpICYmIHN0YXRlLmNvcHlfLmhhcyhzdGF0ZS5kcmFmdHNfLmdldCh2YWx1ZSkpKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgYWRkKHZhbHVlKSB7XG4gICAgICBjb25zdCBzdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdO1xuICAgICAgYXNzZXJ0VW5yZXZva2VkKHN0YXRlKTtcbiAgICAgIGlmICghdGhpcy5oYXModmFsdWUpKSB7XG4gICAgICAgIHByZXBhcmVTZXRDb3B5KHN0YXRlKTtcbiAgICAgICAgbWFya0NoYW5nZWQoc3RhdGUpO1xuICAgICAgICBzdGF0ZS5jb3B5Xy5hZGQodmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGRlbGV0ZSh2YWx1ZSkge1xuICAgICAgaWYgKCF0aGlzLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzW0RSQUZUX1NUQVRFXTtcbiAgICAgIGFzc2VydFVucmV2b2tlZChzdGF0ZSk7XG4gICAgICBwcmVwYXJlU2V0Q29weShzdGF0ZSk7XG4gICAgICBtYXJrQ2hhbmdlZChzdGF0ZSk7XG4gICAgICByZXR1cm4gc3RhdGUuY29weV8uZGVsZXRlKHZhbHVlKSB8fCAoc3RhdGUuZHJhZnRzXy5oYXModmFsdWUpID8gc3RhdGUuY29weV8uZGVsZXRlKHN0YXRlLmRyYWZ0c18uZ2V0KHZhbHVlKSkgOiAoXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGZhbHNlXG4gICAgICApKTtcbiAgICB9XG4gICAgY2xlYXIoKSB7XG4gICAgICBjb25zdCBzdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdO1xuICAgICAgYXNzZXJ0VW5yZXZva2VkKHN0YXRlKTtcbiAgICAgIGlmIChsYXRlc3Qoc3RhdGUpLnNpemUpIHtcbiAgICAgICAgcHJlcGFyZVNldENvcHkoc3RhdGUpO1xuICAgICAgICBtYXJrQ2hhbmdlZChzdGF0ZSk7XG4gICAgICAgIHN0YXRlLmNvcHlfLmNsZWFyKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHZhbHVlcygpIHtcbiAgICAgIGNvbnN0IHN0YXRlID0gdGhpc1tEUkFGVF9TVEFURV07XG4gICAgICBhc3NlcnRVbnJldm9rZWQoc3RhdGUpO1xuICAgICAgcHJlcGFyZVNldENvcHkoc3RhdGUpO1xuICAgICAgcmV0dXJuIHN0YXRlLmNvcHlfLnZhbHVlcygpO1xuICAgIH1cbiAgICBlbnRyaWVzKCkge1xuICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzW0RSQUZUX1NUQVRFXTtcbiAgICAgIGFzc2VydFVucmV2b2tlZChzdGF0ZSk7XG4gICAgICBwcmVwYXJlU2V0Q29weShzdGF0ZSk7XG4gICAgICByZXR1cm4gc3RhdGUuY29weV8uZW50cmllcygpO1xuICAgIH1cbiAgICBrZXlzKCkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsdWVzKCk7XG4gICAgfVxuICAgIFsoRFJBRlRfU1RBVEUsIFN5bWJvbC5pdGVyYXRvcildKCkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsdWVzKCk7XG4gICAgfVxuICAgIGZvckVhY2goY2IsIHRoaXNBcmcpIHtcbiAgICAgIGNvbnN0IGl0ZXJhdG9yID0gdGhpcy52YWx1ZXMoKTtcbiAgICAgIGxldCByZXN1bHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICB3aGlsZSAoIXJlc3VsdC5kb25lKSB7XG4gICAgICAgIGNiLmNhbGwodGhpc0FyZywgcmVzdWx0LnZhbHVlLCByZXN1bHQudmFsdWUsIHRoaXMpO1xuICAgICAgICByZXN1bHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIHByb3h5U2V0Xyh0YXJnZXQsIHBhcmVudCkge1xuICAgIHJldHVybiBuZXcgRHJhZnRTZXQodGFyZ2V0LCBwYXJlbnQpO1xuICB9XG4gIGZ1bmN0aW9uIHByZXBhcmVTZXRDb3B5KHN0YXRlKSB7XG4gICAgaWYgKCFzdGF0ZS5jb3B5Xykge1xuICAgICAgc3RhdGUuY29weV8gPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuICAgICAgc3RhdGUuYmFzZV8uZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgICAgaWYgKGlzRHJhZnRhYmxlKHZhbHVlKSkge1xuICAgICAgICAgIGNvbnN0IGRyYWZ0ID0gY3JlYXRlUHJveHkodmFsdWUsIHN0YXRlKTtcbiAgICAgICAgICBzdGF0ZS5kcmFmdHNfLnNldCh2YWx1ZSwgZHJhZnQpO1xuICAgICAgICAgIHN0YXRlLmNvcHlfLmFkZChkcmFmdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhdGUuY29weV8uYWRkKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGFzc2VydFVucmV2b2tlZChzdGF0ZSkge1xuICAgIGlmIChzdGF0ZS5yZXZva2VkXylcbiAgICAgIGRpZSgzLCBKU09OLnN0cmluZ2lmeShsYXRlc3Qoc3RhdGUpKSk7XG4gIH1cbiAgbG9hZFBsdWdpbihcIk1hcFNldFwiLCB7IHByb3h5TWFwXywgcHJveHlTZXRfIH0pO1xufVxuXG4vLyBzcmMvaW1tZXIudHNcbnZhciBpbW1lciA9IG5ldyBJbW1lcjIoKTtcbnZhciBwcm9kdWNlID0gaW1tZXIucHJvZHVjZTtcbnZhciBwcm9kdWNlV2l0aFBhdGNoZXMgPSBpbW1lci5wcm9kdWNlV2l0aFBhdGNoZXMuYmluZChcbiAgaW1tZXJcbik7XG52YXIgc2V0QXV0b0ZyZWV6ZSA9IGltbWVyLnNldEF1dG9GcmVlemUuYmluZChpbW1lcik7XG52YXIgc2V0VXNlU3RyaWN0U2hhbGxvd0NvcHkgPSBpbW1lci5zZXRVc2VTdHJpY3RTaGFsbG93Q29weS5iaW5kKGltbWVyKTtcbnZhciBhcHBseVBhdGNoZXMgPSBpbW1lci5hcHBseVBhdGNoZXMuYmluZChpbW1lcik7XG52YXIgY3JlYXRlRHJhZnQgPSBpbW1lci5jcmVhdGVEcmFmdC5iaW5kKGltbWVyKTtcbnZhciBmaW5pc2hEcmFmdCA9IGltbWVyLmZpbmlzaERyYWZ0LmJpbmQoaW1tZXIpO1xuZnVuY3Rpb24gY2FzdERyYWZ0KHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZTtcbn1cbmZ1bmN0aW9uIGNhc3RJbW11dGFibGUodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlO1xufVxuZXhwb3J0IHtcbiAgSW1tZXIyIGFzIEltbWVyLFxuICBhcHBseVBhdGNoZXMsXG4gIGNhc3REcmFmdCxcbiAgY2FzdEltbXV0YWJsZSxcbiAgY3JlYXRlRHJhZnQsXG4gIGN1cnJlbnQsXG4gIGVuYWJsZU1hcFNldCxcbiAgZW5hYmxlUGF0Y2hlcyxcbiAgZmluaXNoRHJhZnQsXG4gIGZyZWV6ZSxcbiAgRFJBRlRBQkxFIGFzIGltbWVyYWJsZSxcbiAgaXNEcmFmdCxcbiAgaXNEcmFmdGFibGUsXG4gIE5PVEhJTkcgYXMgbm90aGluZyxcbiAgb3JpZ2luYWwsXG4gIHByb2R1Y2UsXG4gIHByb2R1Y2VXaXRoUGF0Y2hlcyxcbiAgc2V0QXV0b0ZyZWV6ZSxcbiAgc2V0VXNlU3RyaWN0U2hhbGxvd0NvcHlcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbW1lci5tanMubWFwIiwiLy8gc3JjL2luZGV4LnRzXG5leHBvcnQgKiBmcm9tIFwicmVkdXhcIjtcbmltcG9ydCB7IHByb2R1Y2UsIGN1cnJlbnQgYXMgY3VycmVudDMsIGZyZWV6ZSwgb3JpZ2luYWwgYXMgb3JpZ2luYWwyLCBpc0RyYWZ0IGFzIGlzRHJhZnQ1IH0gZnJvbSBcImltbWVyXCI7XG5pbXBvcnQgeyBjcmVhdGVTZWxlY3RvciwgY3JlYXRlU2VsZWN0b3JDcmVhdG9yIGFzIGNyZWF0ZVNlbGVjdG9yQ3JlYXRvcjIsIGxydU1lbW9pemUsIHdlYWtNYXBNZW1vaXplIGFzIHdlYWtNYXBNZW1vaXplMiB9IGZyb20gXCJyZXNlbGVjdFwiO1xuXG4vLyBzcmMvY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3IudHNcbmltcG9ydCB7IGN1cnJlbnQsIGlzRHJhZnQgfSBmcm9tIFwiaW1tZXJcIjtcbmltcG9ydCB7IGNyZWF0ZVNlbGVjdG9yQ3JlYXRvciwgd2Vha01hcE1lbW9pemUgfSBmcm9tIFwicmVzZWxlY3RcIjtcbnZhciBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvckNyZWF0b3IgPSAoLi4uYXJncykgPT4ge1xuICBjb25zdCBjcmVhdGVTZWxlY3RvcjIgPSBjcmVhdGVTZWxlY3RvckNyZWF0b3IoLi4uYXJncyk7XG4gIGNvbnN0IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yMiA9IE9iamVjdC5hc3NpZ24oKC4uLmFyZ3MyKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0b3IgPSBjcmVhdGVTZWxlY3RvcjIoLi4uYXJnczIpO1xuICAgIGNvbnN0IHdyYXBwZWRTZWxlY3RvciA9ICh2YWx1ZSwgLi4ucmVzdCkgPT4gc2VsZWN0b3IoaXNEcmFmdCh2YWx1ZSkgPyBjdXJyZW50KHZhbHVlKSA6IHZhbHVlLCAuLi5yZXN0KTtcbiAgICBPYmplY3QuYXNzaWduKHdyYXBwZWRTZWxlY3Rvciwgc2VsZWN0b3IpO1xuICAgIHJldHVybiB3cmFwcGVkU2VsZWN0b3I7XG4gIH0sIHtcbiAgICB3aXRoVHlwZXM6ICgpID0+IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yMlxuICB9KTtcbiAgcmV0dXJuIGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yMjtcbn07XG52YXIgY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3IgPSAvKiBAX19QVVJFX18gKi8gY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3JDcmVhdG9yKHdlYWtNYXBNZW1vaXplKTtcblxuLy8gc3JjL2NvbmZpZ3VyZVN0b3JlLnRzXG5pbXBvcnQgeyBhcHBseU1pZGRsZXdhcmUsIGNyZWF0ZVN0b3JlLCBjb21wb3NlIGFzIGNvbXBvc2UyLCBjb21iaW5lUmVkdWNlcnMsIGlzUGxhaW5PYmplY3QgYXMgaXNQbGFpbk9iamVjdDIgfSBmcm9tIFwicmVkdXhcIjtcblxuLy8gc3JjL2RldnRvb2xzRXh0ZW5zaW9uLnRzXG5pbXBvcnQgeyBjb21wb3NlIH0gZnJvbSBcInJlZHV4XCI7XG52YXIgY29tcG9zZVdpdGhEZXZUb29scyA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93Ll9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX0NPTVBPU0VfXyA/IHdpbmRvdy5fX1JFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTl9DT01QT1NFX18gOiBmdW5jdGlvbigpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHJldHVybiB2b2lkIDA7XG4gIGlmICh0eXBlb2YgYXJndW1lbnRzWzBdID09PSBcIm9iamVjdFwiKSByZXR1cm4gY29tcG9zZTtcbiAgcmV0dXJuIGNvbXBvc2UuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbn07XG52YXIgZGV2VG9vbHNFbmhhbmNlciA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93Ll9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX18gPyB3aW5kb3cuX19SRURVWF9ERVZUT09MU19FWFRFTlNJT05fXyA6IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gZnVuY3Rpb24obm9vcDMpIHtcbiAgICByZXR1cm4gbm9vcDM7XG4gIH07XG59O1xuXG4vLyBzcmMvZ2V0RGVmYXVsdE1pZGRsZXdhcmUudHNcbmltcG9ydCB7IHRodW5rIGFzIHRodW5rTWlkZGxld2FyZSwgd2l0aEV4dHJhQXJndW1lbnQgfSBmcm9tIFwicmVkdXgtdGh1bmtcIjtcblxuLy8gc3JjL2NyZWF0ZUFjdGlvbi50c1xuaW1wb3J0IHsgaXNBY3Rpb24gfSBmcm9tIFwicmVkdXhcIjtcblxuLy8gc3JjL3RzSGVscGVycy50c1xudmFyIGhhc01hdGNoRnVuY3Rpb24gPSAodikgPT4ge1xuICByZXR1cm4gdiAmJiB0eXBlb2Ygdi5tYXRjaCA9PT0gXCJmdW5jdGlvblwiO1xufTtcblxuLy8gc3JjL2NyZWF0ZUFjdGlvbi50c1xuZnVuY3Rpb24gY3JlYXRlQWN0aW9uKHR5cGUsIHByZXBhcmVBY3Rpb24pIHtcbiAgZnVuY3Rpb24gYWN0aW9uQ3JlYXRvciguLi5hcmdzKSB7XG4gICAgaWYgKHByZXBhcmVBY3Rpb24pIHtcbiAgICAgIGxldCBwcmVwYXJlZCA9IHByZXBhcmVBY3Rpb24oLi4uYXJncyk7XG4gICAgICBpZiAoIXByZXBhcmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDApIDogXCJwcmVwYXJlQWN0aW9uIGRpZCBub3QgcmV0dXJuIGFuIG9iamVjdFwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGUsXG4gICAgICAgIHBheWxvYWQ6IHByZXBhcmVkLnBheWxvYWQsXG4gICAgICAgIC4uLlwibWV0YVwiIGluIHByZXBhcmVkICYmIHtcbiAgICAgICAgICBtZXRhOiBwcmVwYXJlZC5tZXRhXG4gICAgICAgIH0sXG4gICAgICAgIC4uLlwiZXJyb3JcIiBpbiBwcmVwYXJlZCAmJiB7XG4gICAgICAgICAgZXJyb3I6IHByZXBhcmVkLmVycm9yXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICB0eXBlLFxuICAgICAgcGF5bG9hZDogYXJnc1swXVxuICAgIH07XG4gIH1cbiAgYWN0aW9uQ3JlYXRvci50b1N0cmluZyA9ICgpID0+IGAke3R5cGV9YDtcbiAgYWN0aW9uQ3JlYXRvci50eXBlID0gdHlwZTtcbiAgYWN0aW9uQ3JlYXRvci5tYXRjaCA9IChhY3Rpb24pID0+IGlzQWN0aW9uKGFjdGlvbikgJiYgYWN0aW9uLnR5cGUgPT09IHR5cGU7XG4gIHJldHVybiBhY3Rpb25DcmVhdG9yO1xufVxuZnVuY3Rpb24gaXNBY3Rpb25DcmVhdG9yKGFjdGlvbikge1xuICByZXR1cm4gdHlwZW9mIGFjdGlvbiA9PT0gXCJmdW5jdGlvblwiICYmIFwidHlwZVwiIGluIGFjdGlvbiAmJiAvLyBoYXNNYXRjaEZ1bmN0aW9uIG9ubHkgd2FudHMgTWF0Y2hlcnMgYnV0IEkgZG9uJ3Qgc2VlIHRoZSBwb2ludCBpbiByZXdyaXRpbmcgaXRcbiAgaGFzTWF0Y2hGdW5jdGlvbihhY3Rpb24pO1xufVxuZnVuY3Rpb24gaXNGU0EoYWN0aW9uKSB7XG4gIHJldHVybiBpc0FjdGlvbihhY3Rpb24pICYmIE9iamVjdC5rZXlzKGFjdGlvbikuZXZlcnkoaXNWYWxpZEtleSk7XG59XG5mdW5jdGlvbiBpc1ZhbGlkS2V5KGtleSkge1xuICByZXR1cm4gW1widHlwZVwiLCBcInBheWxvYWRcIiwgXCJlcnJvclwiLCBcIm1ldGFcIl0uaW5kZXhPZihrZXkpID4gLTE7XG59XG5cbi8vIHNyYy9hY3Rpb25DcmVhdG9ySW52YXJpYW50TWlkZGxld2FyZS50c1xuZnVuY3Rpb24gZ2V0TWVzc2FnZSh0eXBlKSB7XG4gIGNvbnN0IHNwbGl0VHlwZSA9IHR5cGUgPyBgJHt0eXBlfWAuc3BsaXQoXCIvXCIpIDogW107XG4gIGNvbnN0IGFjdGlvbk5hbWUgPSBzcGxpdFR5cGVbc3BsaXRUeXBlLmxlbmd0aCAtIDFdIHx8IFwiYWN0aW9uQ3JlYXRvclwiO1xuICByZXR1cm4gYERldGVjdGVkIGFuIGFjdGlvbiBjcmVhdG9yIHdpdGggdHlwZSBcIiR7dHlwZSB8fCBcInVua25vd25cIn1cIiBiZWluZyBkaXNwYXRjaGVkLiBcbk1ha2Ugc3VyZSB5b3UncmUgY2FsbGluZyB0aGUgYWN0aW9uIGNyZWF0b3IgYmVmb3JlIGRpc3BhdGNoaW5nLCBpLmUuIFxcYGRpc3BhdGNoKCR7YWN0aW9uTmFtZX0oKSlcXGAgaW5zdGVhZCBvZiBcXGBkaXNwYXRjaCgke2FjdGlvbk5hbWV9KVxcYC4gVGhpcyBpcyBuZWNlc3NhcnkgZXZlbiBpZiB0aGUgYWN0aW9uIGhhcyBubyBwYXlsb2FkLmA7XG59XG5mdW5jdGlvbiBjcmVhdGVBY3Rpb25DcmVhdG9ySW52YXJpYW50TWlkZGxld2FyZShvcHRpb25zID0ge30pIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIikge1xuICAgIHJldHVybiAoKSA9PiAobmV4dCkgPT4gKGFjdGlvbikgPT4gbmV4dChhY3Rpb24pO1xuICB9XG4gIGNvbnN0IHtcbiAgICBpc0FjdGlvbkNyZWF0b3I6IGlzQWN0aW9uQ3JlYXRvcjIgPSBpc0FjdGlvbkNyZWF0b3JcbiAgfSA9IG9wdGlvbnM7XG4gIHJldHVybiAoKSA9PiAobmV4dCkgPT4gKGFjdGlvbikgPT4ge1xuICAgIGlmIChpc0FjdGlvbkNyZWF0b3IyKGFjdGlvbikpIHtcbiAgICAgIGNvbnNvbGUud2FybihnZXRNZXNzYWdlKGFjdGlvbi50eXBlKSk7XG4gICAgfVxuICAgIHJldHVybiBuZXh0KGFjdGlvbik7XG4gIH07XG59XG5cbi8vIHNyYy91dGlscy50c1xuaW1wb3J0IHsgcHJvZHVjZSBhcyBjcmVhdGVOZXh0U3RhdGUsIGlzRHJhZnRhYmxlIH0gZnJvbSBcImltbWVyXCI7XG5mdW5jdGlvbiBnZXRUaW1lTWVhc3VyZVV0aWxzKG1heERlbGF5LCBmbk5hbWUpIHtcbiAgbGV0IGVsYXBzZWQgPSAwO1xuICByZXR1cm4ge1xuICAgIG1lYXN1cmVUaW1lKGZuKSB7XG4gICAgICBjb25zdCBzdGFydGVkID0gRGF0ZS5ub3coKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBmbigpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgICAgICBlbGFwc2VkICs9IGZpbmlzaGVkIC0gc3RhcnRlZDtcbiAgICAgIH1cbiAgICB9LFxuICAgIHdhcm5JZkV4Y2VlZGVkKCkge1xuICAgICAgaWYgKGVsYXBzZWQgPiBtYXhEZWxheSkge1xuICAgICAgICBjb25zb2xlLndhcm4oYCR7Zm5OYW1lfSB0b29rICR7ZWxhcHNlZH1tcywgd2hpY2ggaXMgbW9yZSB0aGFuIHRoZSB3YXJuaW5nIHRocmVzaG9sZCBvZiAke21heERlbGF5fW1zLiBcbklmIHlvdXIgc3RhdGUgb3IgYWN0aW9ucyBhcmUgdmVyeSBsYXJnZSwgeW91IG1heSB3YW50IHRvIGRpc2FibGUgdGhlIG1pZGRsZXdhcmUgYXMgaXQgbWlnaHQgY2F1c2UgdG9vIG11Y2ggb2YgYSBzbG93ZG93biBpbiBkZXZlbG9wbWVudCBtb2RlLiBTZWUgaHR0cHM6Ly9yZWR1eC10b29sa2l0LmpzLm9yZy9hcGkvZ2V0RGVmYXVsdE1pZGRsZXdhcmUgZm9yIGluc3RydWN0aW9ucy5cbkl0IGlzIGRpc2FibGVkIGluIHByb2R1Y3Rpb24gYnVpbGRzLCBzbyB5b3UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCB0aGF0LmApO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cbnZhciBUdXBsZSA9IGNsYXNzIF9UdXBsZSBleHRlbmRzIEFycmF5IHtcbiAgY29uc3RydWN0b3IoLi4uaXRlbXMpIHtcbiAgICBzdXBlciguLi5pdGVtcyk7XG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIF9UdXBsZS5wcm90b3R5cGUpO1xuICB9XG4gIHN0YXRpYyBnZXQgW1N5bWJvbC5zcGVjaWVzXSgpIHtcbiAgICByZXR1cm4gX1R1cGxlO1xuICB9XG4gIGNvbmNhdCguLi5hcnIpIHtcbiAgICByZXR1cm4gc3VwZXIuY29uY2F0LmFwcGx5KHRoaXMsIGFycik7XG4gIH1cbiAgcHJlcGVuZCguLi5hcnIpIHtcbiAgICBpZiAoYXJyLmxlbmd0aCA9PT0gMSAmJiBBcnJheS5pc0FycmF5KGFyclswXSkpIHtcbiAgICAgIHJldHVybiBuZXcgX1R1cGxlKC4uLmFyclswXS5jb25jYXQodGhpcykpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IF9UdXBsZSguLi5hcnIuY29uY2F0KHRoaXMpKTtcbiAgfVxufTtcbmZ1bmN0aW9uIGZyZWV6ZURyYWZ0YWJsZSh2YWwpIHtcbiAgcmV0dXJuIGlzRHJhZnRhYmxlKHZhbCkgPyBjcmVhdGVOZXh0U3RhdGUodmFsLCAoKSA9PiB7XG4gIH0pIDogdmFsO1xufVxuZnVuY3Rpb24gZ2V0T3JJbnNlcnRDb21wdXRlZChtYXAsIGtleSwgY29tcHV0ZSkge1xuICBpZiAobWFwLmhhcyhrZXkpKSByZXR1cm4gbWFwLmdldChrZXkpO1xuICByZXR1cm4gbWFwLnNldChrZXksIGNvbXB1dGUoa2V5KSkuZ2V0KGtleSk7XG59XG5cbi8vIHNyYy9pbW11dGFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUudHNcbmZ1bmN0aW9uIGlzSW1tdXRhYmxlRGVmYXVsdCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IHZhbHVlID09IG51bGwgfHwgT2JqZWN0LmlzRnJvemVuKHZhbHVlKTtcbn1cbmZ1bmN0aW9uIHRyYWNrRm9yTXV0YXRpb25zKGlzSW1tdXRhYmxlLCBpZ25vcmVQYXRocywgb2JqKSB7XG4gIGNvbnN0IHRyYWNrZWRQcm9wZXJ0aWVzID0gdHJhY2tQcm9wZXJ0aWVzKGlzSW1tdXRhYmxlLCBpZ25vcmVQYXRocywgb2JqKTtcbiAgcmV0dXJuIHtcbiAgICBkZXRlY3RNdXRhdGlvbnMoKSB7XG4gICAgICByZXR1cm4gZGV0ZWN0TXV0YXRpb25zKGlzSW1tdXRhYmxlLCBpZ25vcmVQYXRocywgdHJhY2tlZFByb3BlcnRpZXMsIG9iaik7XG4gICAgfVxuICB9O1xufVxuZnVuY3Rpb24gdHJhY2tQcm9wZXJ0aWVzKGlzSW1tdXRhYmxlLCBpZ25vcmVQYXRocyA9IFtdLCBvYmosIHBhdGggPSBcIlwiLCBjaGVja2VkT2JqZWN0cyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCkpIHtcbiAgY29uc3QgdHJhY2tlZCA9IHtcbiAgICB2YWx1ZTogb2JqXG4gIH07XG4gIGlmICghaXNJbW11dGFibGUob2JqKSAmJiAhY2hlY2tlZE9iamVjdHMuaGFzKG9iaikpIHtcbiAgICBjaGVja2VkT2JqZWN0cy5hZGQob2JqKTtcbiAgICB0cmFja2VkLmNoaWxkcmVuID0ge307XG4gICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgICBjb25zdCBjaGlsZFBhdGggPSBwYXRoID8gcGF0aCArIFwiLlwiICsga2V5IDoga2V5O1xuICAgICAgaWYgKGlnbm9yZVBhdGhzLmxlbmd0aCAmJiBpZ25vcmVQYXRocy5pbmRleE9mKGNoaWxkUGF0aCkgIT09IC0xKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdHJhY2tlZC5jaGlsZHJlbltrZXldID0gdHJhY2tQcm9wZXJ0aWVzKGlzSW1tdXRhYmxlLCBpZ25vcmVQYXRocywgb2JqW2tleV0sIGNoaWxkUGF0aCk7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cmFja2VkO1xufVxuZnVuY3Rpb24gZGV0ZWN0TXV0YXRpb25zKGlzSW1tdXRhYmxlLCBpZ25vcmVkUGF0aHMgPSBbXSwgdHJhY2tlZFByb3BlcnR5LCBvYmosIHNhbWVQYXJlbnRSZWYgPSBmYWxzZSwgcGF0aCA9IFwiXCIpIHtcbiAgY29uc3QgcHJldk9iaiA9IHRyYWNrZWRQcm9wZXJ0eSA/IHRyYWNrZWRQcm9wZXJ0eS52YWx1ZSA6IHZvaWQgMDtcbiAgY29uc3Qgc2FtZVJlZiA9IHByZXZPYmogPT09IG9iajtcbiAgaWYgKHNhbWVQYXJlbnRSZWYgJiYgIXNhbWVSZWYgJiYgIU51bWJlci5pc05hTihvYmopKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdhc011dGF0ZWQ6IHRydWUsXG4gICAgICBwYXRoXG4gICAgfTtcbiAgfVxuICBpZiAoaXNJbW11dGFibGUocHJldk9iaikgfHwgaXNJbW11dGFibGUob2JqKSkge1xuICAgIHJldHVybiB7XG4gICAgICB3YXNNdXRhdGVkOiBmYWxzZVxuICAgIH07XG4gIH1cbiAgY29uc3Qga2V5c1RvRGV0ZWN0ID0ge307XG4gIGZvciAobGV0IGtleSBpbiB0cmFja2VkUHJvcGVydHkuY2hpbGRyZW4pIHtcbiAgICBrZXlzVG9EZXRlY3Rba2V5XSA9IHRydWU7XG4gIH1cbiAgZm9yIChsZXQga2V5IGluIG9iaikge1xuICAgIGtleXNUb0RldGVjdFtrZXldID0gdHJ1ZTtcbiAgfVxuICBjb25zdCBoYXNJZ25vcmVkUGF0aHMgPSBpZ25vcmVkUGF0aHMubGVuZ3RoID4gMDtcbiAgZm9yIChsZXQga2V5IGluIGtleXNUb0RldGVjdCkge1xuICAgIGNvbnN0IG5lc3RlZFBhdGggPSBwYXRoID8gcGF0aCArIFwiLlwiICsga2V5IDoga2V5O1xuICAgIGlmIChoYXNJZ25vcmVkUGF0aHMpIHtcbiAgICAgIGNvbnN0IGhhc01hdGNoZXMgPSBpZ25vcmVkUGF0aHMuc29tZSgoaWdub3JlZCkgPT4ge1xuICAgICAgICBpZiAoaWdub3JlZCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICAgIHJldHVybiBpZ25vcmVkLnRlc3QobmVzdGVkUGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5lc3RlZFBhdGggPT09IGlnbm9yZWQ7XG4gICAgICB9KTtcbiAgICAgIGlmIChoYXNNYXRjaGVzKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSBkZXRlY3RNdXRhdGlvbnMoaXNJbW11dGFibGUsIGlnbm9yZWRQYXRocywgdHJhY2tlZFByb3BlcnR5LmNoaWxkcmVuW2tleV0sIG9ialtrZXldLCBzYW1lUmVmLCBuZXN0ZWRQYXRoKTtcbiAgICBpZiAocmVzdWx0Lndhc011dGF0ZWQpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgd2FzTXV0YXRlZDogZmFsc2VcbiAgfTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUltbXV0YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZShvcHRpb25zID0ge30pIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIikge1xuICAgIHJldHVybiAoKSA9PiAobmV4dCkgPT4gKGFjdGlvbikgPT4gbmV4dChhY3Rpb24pO1xuICB9IGVsc2Uge1xuICAgIGxldCBzdHJpbmdpZnkyID0gZnVuY3Rpb24ob2JqLCBzZXJpYWxpemVyLCBpbmRlbnQsIGRlY3ljbGVyKSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqLCBnZXRTZXJpYWxpemUyKHNlcmlhbGl6ZXIsIGRlY3ljbGVyKSwgaW5kZW50KTtcbiAgICB9LCBnZXRTZXJpYWxpemUyID0gZnVuY3Rpb24oc2VyaWFsaXplciwgZGVjeWNsZXIpIHtcbiAgICAgIGxldCBzdGFjayA9IFtdLCBrZXlzID0gW107XG4gICAgICBpZiAoIWRlY3ljbGVyKSBkZWN5Y2xlciA9IGZ1bmN0aW9uKF8sIHZhbHVlKSB7XG4gICAgICAgIGlmIChzdGFja1swXSA9PT0gdmFsdWUpIHJldHVybiBcIltDaXJjdWxhciB+XVwiO1xuICAgICAgICByZXR1cm4gXCJbQ2lyY3VsYXIgfi5cIiArIGtleXMuc2xpY2UoMCwgc3RhY2suaW5kZXhPZih2YWx1ZSkpLmpvaW4oXCIuXCIpICsgXCJdXCI7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKGtleSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB2YXIgdGhpc1BvcyA9IHN0YWNrLmluZGV4T2YodGhpcyk7XG4gICAgICAgICAgfnRoaXNQb3MgPyBzdGFjay5zcGxpY2UodGhpc1BvcyArIDEpIDogc3RhY2sucHVzaCh0aGlzKTtcbiAgICAgICAgICB+dGhpc1BvcyA/IGtleXMuc3BsaWNlKHRoaXNQb3MsIEluZmluaXR5LCBrZXkpIDoga2V5cy5wdXNoKGtleSk7XG4gICAgICAgICAgaWYgKH5zdGFjay5pbmRleE9mKHZhbHVlKSkgdmFsdWUgPSBkZWN5Y2xlci5jYWxsKHRoaXMsIGtleSwgdmFsdWUpO1xuICAgICAgICB9IGVsc2Ugc3RhY2sucHVzaCh2YWx1ZSk7XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVyID09IG51bGwgPyB2YWx1ZSA6IHNlcmlhbGl6ZXIuY2FsbCh0aGlzLCBrZXksIHZhbHVlKTtcbiAgICAgIH07XG4gICAgfTtcbiAgICB2YXIgc3RyaW5naWZ5ID0gc3RyaW5naWZ5MiwgZ2V0U2VyaWFsaXplID0gZ2V0U2VyaWFsaXplMjtcbiAgICBsZXQge1xuICAgICAgaXNJbW11dGFibGUgPSBpc0ltbXV0YWJsZURlZmF1bHQsXG4gICAgICBpZ25vcmVkUGF0aHMsXG4gICAgICB3YXJuQWZ0ZXIgPSAzMlxuICAgIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IHRyYWNrID0gdHJhY2tGb3JNdXRhdGlvbnMuYmluZChudWxsLCBpc0ltbXV0YWJsZSwgaWdub3JlZFBhdGhzKTtcbiAgICByZXR1cm4gKHtcbiAgICAgIGdldFN0YXRlXG4gICAgfSkgPT4ge1xuICAgICAgbGV0IHN0YXRlID0gZ2V0U3RhdGUoKTtcbiAgICAgIGxldCB0cmFja2VyID0gdHJhY2soc3RhdGUpO1xuICAgICAgbGV0IHJlc3VsdDtcbiAgICAgIHJldHVybiAobmV4dCkgPT4gKGFjdGlvbikgPT4ge1xuICAgICAgICBjb25zdCBtZWFzdXJlVXRpbHMgPSBnZXRUaW1lTWVhc3VyZVV0aWxzKHdhcm5BZnRlciwgXCJJbW11dGFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmVcIik7XG4gICAgICAgIG1lYXN1cmVVdGlscy5tZWFzdXJlVGltZSgoKSA9PiB7XG4gICAgICAgICAgc3RhdGUgPSBnZXRTdGF0ZSgpO1xuICAgICAgICAgIHJlc3VsdCA9IHRyYWNrZXIuZGV0ZWN0TXV0YXRpb25zKCk7XG4gICAgICAgICAgdHJhY2tlciA9IHRyYWNrKHN0YXRlKTtcbiAgICAgICAgICBpZiAocmVzdWx0Lndhc011dGF0ZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDE5KSA6IGBBIHN0YXRlIG11dGF0aW9uIHdhcyBkZXRlY3RlZCBiZXR3ZWVuIGRpc3BhdGNoZXMsIGluIHRoZSBwYXRoICcke3Jlc3VsdC5wYXRoIHx8IFwiXCJ9Jy4gIFRoaXMgbWF5IGNhdXNlIGluY29ycmVjdCBiZWhhdmlvci4gKGh0dHBzOi8vcmVkdXguanMub3JnL3N0eWxlLWd1aWRlL3N0eWxlLWd1aWRlI2RvLW5vdC1tdXRhdGUtc3RhdGUpYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZGlzcGF0Y2hlZEFjdGlvbiA9IG5leHQoYWN0aW9uKTtcbiAgICAgICAgbWVhc3VyZVV0aWxzLm1lYXN1cmVUaW1lKCgpID0+IHtcbiAgICAgICAgICBzdGF0ZSA9IGdldFN0YXRlKCk7XG4gICAgICAgICAgcmVzdWx0ID0gdHJhY2tlci5kZXRlY3RNdXRhdGlvbnMoKTtcbiAgICAgICAgICB0cmFja2VyID0gdHJhY2soc3RhdGUpO1xuICAgICAgICAgIGlmIChyZXN1bHQud2FzTXV0YXRlZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMjApIDogYEEgc3RhdGUgbXV0YXRpb24gd2FzIGRldGVjdGVkIGluc2lkZSBhIGRpc3BhdGNoLCBpbiB0aGUgcGF0aDogJHtyZXN1bHQucGF0aCB8fCBcIlwifS4gVGFrZSBhIGxvb2sgYXQgdGhlIHJlZHVjZXIocykgaGFuZGxpbmcgdGhlIGFjdGlvbiAke3N0cmluZ2lmeTIoYWN0aW9uKX0uIChodHRwczovL3JlZHV4LmpzLm9yZy9zdHlsZS1ndWlkZS9zdHlsZS1ndWlkZSNkby1ub3QtbXV0YXRlLXN0YXRlKWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIG1lYXN1cmVVdGlscy53YXJuSWZFeGNlZWRlZCgpO1xuICAgICAgICByZXR1cm4gZGlzcGF0Y2hlZEFjdGlvbjtcbiAgICAgIH07XG4gICAgfTtcbiAgfVxufVxuXG4vLyBzcmMvc2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlLnRzXG5pbXBvcnQgeyBpc0FjdGlvbiBhcyBpc0FjdGlvbjIsIGlzUGxhaW5PYmplY3QgfSBmcm9tIFwicmVkdXhcIjtcbmZ1bmN0aW9uIGlzUGxhaW4odmFsKSB7XG4gIGNvbnN0IHR5cGUgPSB0eXBlb2YgdmFsO1xuICByZXR1cm4gdmFsID09IG51bGwgfHwgdHlwZSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlID09PSBcImJvb2xlYW5cIiB8fCB0eXBlID09PSBcIm51bWJlclwiIHx8IEFycmF5LmlzQXJyYXkodmFsKSB8fCBpc1BsYWluT2JqZWN0KHZhbCk7XG59XG5mdW5jdGlvbiBmaW5kTm9uU2VyaWFsaXphYmxlVmFsdWUodmFsdWUsIHBhdGggPSBcIlwiLCBpc1NlcmlhbGl6YWJsZSA9IGlzUGxhaW4sIGdldEVudHJpZXMsIGlnbm9yZWRQYXRocyA9IFtdLCBjYWNoZSkge1xuICBsZXQgZm91bmROZXN0ZWRTZXJpYWxpemFibGU7XG4gIGlmICghaXNTZXJpYWxpemFibGUodmFsdWUpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGtleVBhdGg6IHBhdGggfHwgXCI8cm9vdD5cIixcbiAgICAgIHZhbHVlXG4gICAgfTtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChjYWNoZT8uaGFzKHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBlbnRyaWVzID0gZ2V0RW50cmllcyAhPSBudWxsID8gZ2V0RW50cmllcyh2YWx1ZSkgOiBPYmplY3QuZW50cmllcyh2YWx1ZSk7XG4gIGNvbnN0IGhhc0lnbm9yZWRQYXRocyA9IGlnbm9yZWRQYXRocy5sZW5ndGggPiAwO1xuICBmb3IgKGNvbnN0IFtrZXksIG5lc3RlZFZhbHVlXSBvZiBlbnRyaWVzKSB7XG4gICAgY29uc3QgbmVzdGVkUGF0aCA9IHBhdGggPyBwYXRoICsgXCIuXCIgKyBrZXkgOiBrZXk7XG4gICAgaWYgKGhhc0lnbm9yZWRQYXRocykge1xuICAgICAgY29uc3QgaGFzTWF0Y2hlcyA9IGlnbm9yZWRQYXRocy5zb21lKChpZ25vcmVkKSA9PiB7XG4gICAgICAgIGlmIChpZ25vcmVkIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgICAgcmV0dXJuIGlnbm9yZWQudGVzdChuZXN0ZWRQYXRoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmVzdGVkUGF0aCA9PT0gaWdub3JlZDtcbiAgICAgIH0pO1xuICAgICAgaWYgKGhhc01hdGNoZXMpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghaXNTZXJpYWxpemFibGUobmVzdGVkVmFsdWUpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBrZXlQYXRoOiBuZXN0ZWRQYXRoLFxuICAgICAgICB2YWx1ZTogbmVzdGVkVmFsdWVcbiAgICAgIH07XG4gICAgfVxuICAgIGlmICh0eXBlb2YgbmVzdGVkVmFsdWUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGZvdW5kTmVzdGVkU2VyaWFsaXphYmxlID0gZmluZE5vblNlcmlhbGl6YWJsZVZhbHVlKG5lc3RlZFZhbHVlLCBuZXN0ZWRQYXRoLCBpc1NlcmlhbGl6YWJsZSwgZ2V0RW50cmllcywgaWdub3JlZFBhdGhzLCBjYWNoZSk7XG4gICAgICBpZiAoZm91bmROZXN0ZWRTZXJpYWxpemFibGUpIHtcbiAgICAgICAgcmV0dXJuIGZvdW5kTmVzdGVkU2VyaWFsaXphYmxlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoY2FjaGUgJiYgaXNOZXN0ZWRGcm96ZW4odmFsdWUpKSBjYWNoZS5hZGQodmFsdWUpO1xuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBpc05lc3RlZEZyb3plbih2YWx1ZSkge1xuICBpZiAoIU9iamVjdC5pc0Zyb3plbih2YWx1ZSkpIHJldHVybiBmYWxzZTtcbiAgZm9yIChjb25zdCBuZXN0ZWRWYWx1ZSBvZiBPYmplY3QudmFsdWVzKHZhbHVlKSkge1xuICAgIGlmICh0eXBlb2YgbmVzdGVkVmFsdWUgIT09IFwib2JqZWN0XCIgfHwgbmVzdGVkVmFsdWUgPT09IG51bGwpIGNvbnRpbnVlO1xuICAgIGlmICghaXNOZXN0ZWRGcm96ZW4obmVzdGVkVmFsdWUpKSByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBjcmVhdGVTZXJpYWxpemFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUob3B0aW9ucyA9IHt9KSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICByZXR1cm4gKCkgPT4gKG5leHQpID0+IChhY3Rpb24pID0+IG5leHQoYWN0aW9uKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB7XG4gICAgICBpc1NlcmlhbGl6YWJsZSA9IGlzUGxhaW4sXG4gICAgICBnZXRFbnRyaWVzLFxuICAgICAgaWdub3JlZEFjdGlvbnMgPSBbXSxcbiAgICAgIGlnbm9yZWRBY3Rpb25QYXRocyA9IFtcIm1ldGEuYXJnXCIsIFwibWV0YS5iYXNlUXVlcnlNZXRhXCJdLFxuICAgICAgaWdub3JlZFBhdGhzID0gW10sXG4gICAgICB3YXJuQWZ0ZXIgPSAzMixcbiAgICAgIGlnbm9yZVN0YXRlID0gZmFsc2UsXG4gICAgICBpZ25vcmVBY3Rpb25zID0gZmFsc2UsXG4gICAgICBkaXNhYmxlQ2FjaGUgPSBmYWxzZVxuICAgIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IGNhY2hlID0gIWRpc2FibGVDYWNoZSAmJiBXZWFrU2V0ID8gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrU2V0KCkgOiB2b2lkIDA7XG4gICAgcmV0dXJuIChzdG9yZUFQSSkgPT4gKG5leHQpID0+IChhY3Rpb24pID0+IHtcbiAgICAgIGlmICghaXNBY3Rpb24yKGFjdGlvbikpIHtcbiAgICAgICAgcmV0dXJuIG5leHQoYWN0aW9uKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc3VsdCA9IG5leHQoYWN0aW9uKTtcbiAgICAgIGNvbnN0IG1lYXN1cmVVdGlscyA9IGdldFRpbWVNZWFzdXJlVXRpbHMod2FybkFmdGVyLCBcIlNlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZVwiKTtcbiAgICAgIGlmICghaWdub3JlQWN0aW9ucyAmJiAhKGlnbm9yZWRBY3Rpb25zLmxlbmd0aCAmJiBpZ25vcmVkQWN0aW9ucy5pbmRleE9mKGFjdGlvbi50eXBlKSAhPT0gLTEpKSB7XG4gICAgICAgIG1lYXN1cmVVdGlscy5tZWFzdXJlVGltZSgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZm91bmRBY3Rpb25Ob25TZXJpYWxpemFibGVWYWx1ZSA9IGZpbmROb25TZXJpYWxpemFibGVWYWx1ZShhY3Rpb24sIFwiXCIsIGlzU2VyaWFsaXphYmxlLCBnZXRFbnRyaWVzLCBpZ25vcmVkQWN0aW9uUGF0aHMsIGNhY2hlKTtcbiAgICAgICAgICBpZiAoZm91bmRBY3Rpb25Ob25TZXJpYWxpemFibGVWYWx1ZSkge1xuICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICBrZXlQYXRoLFxuICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgfSA9IGZvdW5kQWN0aW9uTm9uU2VyaWFsaXphYmxlVmFsdWU7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBBIG5vbi1zZXJpYWxpemFibGUgdmFsdWUgd2FzIGRldGVjdGVkIGluIGFuIGFjdGlvbiwgaW4gdGhlIHBhdGg6IFxcYCR7a2V5UGF0aH1cXGAuIFZhbHVlOmAsIHZhbHVlLCBcIlxcblRha2UgYSBsb29rIGF0IHRoZSBsb2dpYyB0aGF0IGRpc3BhdGNoZWQgdGhpcyBhY3Rpb246IFwiLCBhY3Rpb24sIFwiXFxuKFNlZSBodHRwczovL3JlZHV4LmpzLm9yZy9mYXEvYWN0aW9ucyN3aHktc2hvdWxkLXR5cGUtYmUtYS1zdHJpbmctb3ItYXQtbGVhc3Qtc2VyaWFsaXphYmxlLXdoeS1zaG91bGQtbXktYWN0aW9uLXR5cGVzLWJlLWNvbnN0YW50cylcIiwgXCJcXG4oVG8gYWxsb3cgbm9uLXNlcmlhbGl6YWJsZSB2YWx1ZXMgc2VlOiBodHRwczovL3JlZHV4LXRvb2xraXQuanMub3JnL3VzYWdlL3VzYWdlLWd1aWRlI3dvcmtpbmctd2l0aC1ub24tc2VyaWFsaXphYmxlLWRhdGEpXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoIWlnbm9yZVN0YXRlKSB7XG4gICAgICAgIG1lYXN1cmVVdGlscy5tZWFzdXJlVGltZSgoKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RhdGUgPSBzdG9yZUFQSS5nZXRTdGF0ZSgpO1xuICAgICAgICAgIGNvbnN0IGZvdW5kU3RhdGVOb25TZXJpYWxpemFibGVWYWx1ZSA9IGZpbmROb25TZXJpYWxpemFibGVWYWx1ZShzdGF0ZSwgXCJcIiwgaXNTZXJpYWxpemFibGUsIGdldEVudHJpZXMsIGlnbm9yZWRQYXRocywgY2FjaGUpO1xuICAgICAgICAgIGlmIChmb3VuZFN0YXRlTm9uU2VyaWFsaXphYmxlVmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAga2V5UGF0aCxcbiAgICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgIH0gPSBmb3VuZFN0YXRlTm9uU2VyaWFsaXphYmxlVmFsdWU7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBBIG5vbi1zZXJpYWxpemFibGUgdmFsdWUgd2FzIGRldGVjdGVkIGluIHRoZSBzdGF0ZSwgaW4gdGhlIHBhdGg6IFxcYCR7a2V5UGF0aH1cXGAuIFZhbHVlOmAsIHZhbHVlLCBgXG5UYWtlIGEgbG9vayBhdCB0aGUgcmVkdWNlcihzKSBoYW5kbGluZyB0aGlzIGFjdGlvbiB0eXBlOiAke2FjdGlvbi50eXBlfS5cbihTZWUgaHR0cHM6Ly9yZWR1eC5qcy5vcmcvZmFxL29yZ2FuaXppbmctc3RhdGUjY2FuLWktcHV0LWZ1bmN0aW9ucy1wcm9taXNlcy1vci1vdGhlci1ub24tc2VyaWFsaXphYmxlLWl0ZW1zLWluLW15LXN0b3JlLXN0YXRlKWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIG1lYXN1cmVVdGlscy53YXJuSWZFeGNlZWRlZCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9XG59XG5cbi8vIHNyYy9nZXREZWZhdWx0TWlkZGxld2FyZS50c1xuZnVuY3Rpb24gaXNCb29sZWFuKHgpIHtcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSBcImJvb2xlYW5cIjtcbn1cbnZhciBidWlsZEdldERlZmF1bHRNaWRkbGV3YXJlID0gKCkgPT4gZnVuY3Rpb24gZ2V0RGVmYXVsdE1pZGRsZXdhcmUob3B0aW9ucykge1xuICBjb25zdCB7XG4gICAgdGh1bmsgPSB0cnVlLFxuICAgIGltbXV0YWJsZUNoZWNrID0gdHJ1ZSxcbiAgICBzZXJpYWxpemFibGVDaGVjayA9IHRydWUsXG4gICAgYWN0aW9uQ3JlYXRvckNoZWNrID0gdHJ1ZVxuICB9ID0gb3B0aW9ucyA/PyB7fTtcbiAgbGV0IG1pZGRsZXdhcmVBcnJheSA9IG5ldyBUdXBsZSgpO1xuICBpZiAodGh1bmspIHtcbiAgICBpZiAoaXNCb29sZWFuKHRodW5rKSkge1xuICAgICAgbWlkZGxld2FyZUFycmF5LnB1c2godGh1bmtNaWRkbGV3YXJlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWlkZGxld2FyZUFycmF5LnB1c2god2l0aEV4dHJhQXJndW1lbnQodGh1bmsuZXh0cmFBcmd1bWVudCkpO1xuICAgIH1cbiAgfVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgaWYgKGltbXV0YWJsZUNoZWNrKSB7XG4gICAgICBsZXQgaW1tdXRhYmxlT3B0aW9ucyA9IHt9O1xuICAgICAgaWYgKCFpc0Jvb2xlYW4oaW1tdXRhYmxlQ2hlY2spKSB7XG4gICAgICAgIGltbXV0YWJsZU9wdGlvbnMgPSBpbW11dGFibGVDaGVjaztcbiAgICAgIH1cbiAgICAgIG1pZGRsZXdhcmVBcnJheS51bnNoaWZ0KGNyZWF0ZUltbXV0YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZShpbW11dGFibGVPcHRpb25zKSk7XG4gICAgfVxuICAgIGlmIChzZXJpYWxpemFibGVDaGVjaykge1xuICAgICAgbGV0IHNlcmlhbGl6YWJsZU9wdGlvbnMgPSB7fTtcbiAgICAgIGlmICghaXNCb29sZWFuKHNlcmlhbGl6YWJsZUNoZWNrKSkge1xuICAgICAgICBzZXJpYWxpemFibGVPcHRpb25zID0gc2VyaWFsaXphYmxlQ2hlY2s7XG4gICAgICB9XG4gICAgICBtaWRkbGV3YXJlQXJyYXkucHVzaChjcmVhdGVTZXJpYWxpemFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUoc2VyaWFsaXphYmxlT3B0aW9ucykpO1xuICAgIH1cbiAgICBpZiAoYWN0aW9uQ3JlYXRvckNoZWNrKSB7XG4gICAgICBsZXQgYWN0aW9uQ3JlYXRvck9wdGlvbnMgPSB7fTtcbiAgICAgIGlmICghaXNCb29sZWFuKGFjdGlvbkNyZWF0b3JDaGVjaykpIHtcbiAgICAgICAgYWN0aW9uQ3JlYXRvck9wdGlvbnMgPSBhY3Rpb25DcmVhdG9yQ2hlY2s7XG4gICAgICB9XG4gICAgICBtaWRkbGV3YXJlQXJyYXkudW5zaGlmdChjcmVhdGVBY3Rpb25DcmVhdG9ySW52YXJpYW50TWlkZGxld2FyZShhY3Rpb25DcmVhdG9yT3B0aW9ucykpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbWlkZGxld2FyZUFycmF5O1xufTtcblxuLy8gc3JjL2F1dG9CYXRjaEVuaGFuY2VyLnRzXG52YXIgU0hPVUxEX0FVVE9CQVRDSCA9IFwiUlRLX2F1dG9CYXRjaFwiO1xudmFyIHByZXBhcmVBdXRvQmF0Y2hlZCA9ICgpID0+IChwYXlsb2FkKSA9PiAoe1xuICBwYXlsb2FkLFxuICBtZXRhOiB7XG4gICAgW1NIT1VMRF9BVVRPQkFUQ0hdOiB0cnVlXG4gIH1cbn0pO1xudmFyIGNyZWF0ZVF1ZXVlV2l0aFRpbWVyID0gKHRpbWVvdXQpID0+IHtcbiAgcmV0dXJuIChub3RpZnkpID0+IHtcbiAgICBzZXRUaW1lb3V0KG5vdGlmeSwgdGltZW91dCk7XG4gIH07XG59O1xudmFyIGF1dG9CYXRjaEVuaGFuY2VyID0gKG9wdGlvbnMgPSB7XG4gIHR5cGU6IFwicmFmXCJcbn0pID0+IChuZXh0KSA9PiAoLi4uYXJncykgPT4ge1xuICBjb25zdCBzdG9yZSA9IG5leHQoLi4uYXJncyk7XG4gIGxldCBub3RpZnlpbmcgPSB0cnVlO1xuICBsZXQgc2hvdWxkTm90aWZ5QXRFbmRPZlRpY2sgPSBmYWxzZTtcbiAgbGV0IG5vdGlmaWNhdGlvblF1ZXVlZCA9IGZhbHNlO1xuICBjb25zdCBsaXN0ZW5lcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuICBjb25zdCBxdWV1ZUNhbGxiYWNrID0gb3B0aW9ucy50eXBlID09PSBcInRpY2tcIiA/IHF1ZXVlTWljcm90YXNrIDogb3B0aW9ucy50eXBlID09PSBcInJhZlwiID8gKFxuICAgIC8vIHJlcXVlc3RBbmltYXRpb25GcmFtZSB3b24ndCBleGlzdCBpbiBTU1IgZW52aXJvbm1lbnRzLiBGYWxsIGJhY2sgdG8gYSB2YWd1ZSBhcHByb3hpbWF0aW9uIGp1c3QgdG8ga2VlcCBmcm9tIGVycm9yaW5nLlxuICAgIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA/IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgOiBjcmVhdGVRdWV1ZVdpdGhUaW1lcigxMClcbiAgKSA6IG9wdGlvbnMudHlwZSA9PT0gXCJjYWxsYmFja1wiID8gb3B0aW9ucy5xdWV1ZU5vdGlmaWNhdGlvbiA6IGNyZWF0ZVF1ZXVlV2l0aFRpbWVyKG9wdGlvbnMudGltZW91dCk7XG4gIGNvbnN0IG5vdGlmeUxpc3RlbmVycyA9ICgpID0+IHtcbiAgICBub3RpZmljYXRpb25RdWV1ZWQgPSBmYWxzZTtcbiAgICBpZiAoc2hvdWxkTm90aWZ5QXRFbmRPZlRpY2spIHtcbiAgICAgIHNob3VsZE5vdGlmeUF0RW5kT2ZUaWNrID0gZmFsc2U7XG4gICAgICBsaXN0ZW5lcnMuZm9yRWFjaCgobCkgPT4gbCgpKTtcbiAgICB9XG4gIH07XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdG9yZSwge1xuICAgIC8vIE92ZXJyaWRlIHRoZSBiYXNlIGBzdG9yZS5zdWJzY3JpYmVgIG1ldGhvZCB0byBrZWVwIG9yaWdpbmFsIGxpc3RlbmVyc1xuICAgIC8vIGZyb20gcnVubmluZyBpZiB3ZSdyZSBkZWxheWluZyBub3RpZmljYXRpb25zXG4gICAgc3Vic2NyaWJlKGxpc3RlbmVyMikge1xuICAgICAgY29uc3Qgd3JhcHBlZExpc3RlbmVyID0gKCkgPT4gbm90aWZ5aW5nICYmIGxpc3RlbmVyMigpO1xuICAgICAgY29uc3QgdW5zdWJzY3JpYmUgPSBzdG9yZS5zdWJzY3JpYmUod3JhcHBlZExpc3RlbmVyKTtcbiAgICAgIGxpc3RlbmVycy5hZGQobGlzdGVuZXIyKTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHVuc3Vic2NyaWJlKCk7XG4gICAgICAgIGxpc3RlbmVycy5kZWxldGUobGlzdGVuZXIyKTtcbiAgICAgIH07XG4gICAgfSxcbiAgICAvLyBPdmVycmlkZSB0aGUgYmFzZSBgc3RvcmUuZGlzcGF0Y2hgIG1ldGhvZCBzbyB0aGF0IHdlIGNhbiBjaGVjayBhY3Rpb25zXG4gICAgLy8gZm9yIHRoZSBgc2hvdWxkQXV0b0JhdGNoYCBmbGFnIGFuZCBkZXRlcm1pbmUgaWYgYmF0Y2hpbmcgaXMgYWN0aXZlXG4gICAgZGlzcGF0Y2goYWN0aW9uKSB7XG4gICAgICB0cnkge1xuICAgICAgICBub3RpZnlpbmcgPSAhYWN0aW9uPy5tZXRhPy5bU0hPVUxEX0FVVE9CQVRDSF07XG4gICAgICAgIHNob3VsZE5vdGlmeUF0RW5kT2ZUaWNrID0gIW5vdGlmeWluZztcbiAgICAgICAgaWYgKHNob3VsZE5vdGlmeUF0RW5kT2ZUaWNrKSB7XG4gICAgICAgICAgaWYgKCFub3RpZmljYXRpb25RdWV1ZWQpIHtcbiAgICAgICAgICAgIG5vdGlmaWNhdGlvblF1ZXVlZCA9IHRydWU7XG4gICAgICAgICAgICBxdWV1ZUNhbGxiYWNrKG5vdGlmeUxpc3RlbmVycyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdG9yZS5kaXNwYXRjaChhY3Rpb24pO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgbm90aWZ5aW5nID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufTtcblxuLy8gc3JjL2dldERlZmF1bHRFbmhhbmNlcnMudHNcbnZhciBidWlsZEdldERlZmF1bHRFbmhhbmNlcnMgPSAobWlkZGxld2FyZUVuaGFuY2VyKSA9PiBmdW5jdGlvbiBnZXREZWZhdWx0RW5oYW5jZXJzKG9wdGlvbnMpIHtcbiAgY29uc3Qge1xuICAgIGF1dG9CYXRjaCA9IHRydWVcbiAgfSA9IG9wdGlvbnMgPz8ge307XG4gIGxldCBlbmhhbmNlckFycmF5ID0gbmV3IFR1cGxlKG1pZGRsZXdhcmVFbmhhbmNlcik7XG4gIGlmIChhdXRvQmF0Y2gpIHtcbiAgICBlbmhhbmNlckFycmF5LnB1c2goYXV0b0JhdGNoRW5oYW5jZXIodHlwZW9mIGF1dG9CYXRjaCA9PT0gXCJvYmplY3RcIiA/IGF1dG9CYXRjaCA6IHZvaWQgMCkpO1xuICB9XG4gIHJldHVybiBlbmhhbmNlckFycmF5O1xufTtcblxuLy8gc3JjL2NvbmZpZ3VyZVN0b3JlLnRzXG5mdW5jdGlvbiBjb25maWd1cmVTdG9yZShvcHRpb25zKSB7XG4gIGNvbnN0IGdldERlZmF1bHRNaWRkbGV3YXJlID0gYnVpbGRHZXREZWZhdWx0TWlkZGxld2FyZSgpO1xuICBjb25zdCB7XG4gICAgcmVkdWNlciA9IHZvaWQgMCxcbiAgICBtaWRkbGV3YXJlLFxuICAgIGRldlRvb2xzID0gdHJ1ZSxcbiAgICBkdXBsaWNhdGVNaWRkbGV3YXJlQ2hlY2sgPSB0cnVlLFxuICAgIHByZWxvYWRlZFN0YXRlID0gdm9pZCAwLFxuICAgIGVuaGFuY2VycyA9IHZvaWQgMFxuICB9ID0gb3B0aW9ucyB8fCB7fTtcbiAgbGV0IHJvb3RSZWR1Y2VyO1xuICBpZiAodHlwZW9mIHJlZHVjZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHJvb3RSZWR1Y2VyID0gcmVkdWNlcjtcbiAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0MihyZWR1Y2VyKSkge1xuICAgIHJvb3RSZWR1Y2VyID0gY29tYmluZVJlZHVjZXJzKHJlZHVjZXIpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDEpIDogXCJgcmVkdWNlcmAgaXMgYSByZXF1aXJlZCBhcmd1bWVudCwgYW5kIG11c3QgYmUgYSBmdW5jdGlvbiBvciBhbiBvYmplY3Qgb2YgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHBhc3NlZCB0byBjb21iaW5lUmVkdWNlcnNcIik7XG4gIH1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJiBtaWRkbGV3YXJlICYmIHR5cGVvZiBtaWRkbGV3YXJlICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgyKSA6IFwiYG1pZGRsZXdhcmVgIGZpZWxkIG11c3QgYmUgYSBjYWxsYmFja1wiKTtcbiAgfVxuICBsZXQgZmluYWxNaWRkbGV3YXJlO1xuICBpZiAodHlwZW9mIG1pZGRsZXdhcmUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGZpbmFsTWlkZGxld2FyZSA9IG1pZGRsZXdhcmUoZ2V0RGVmYXVsdE1pZGRsZXdhcmUpO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgJiYgIUFycmF5LmlzQXJyYXkoZmluYWxNaWRkbGV3YXJlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMykgOiBcIndoZW4gdXNpbmcgYSBtaWRkbGV3YXJlIGJ1aWxkZXIgZnVuY3Rpb24sIGFuIGFycmF5IG9mIG1pZGRsZXdhcmUgbXVzdCBiZSByZXR1cm5lZFwiKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZmluYWxNaWRkbGV3YXJlID0gZ2V0RGVmYXVsdE1pZGRsZXdhcmUoKTtcbiAgfVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmIGZpbmFsTWlkZGxld2FyZS5zb21lKChpdGVtKSA9PiB0eXBlb2YgaXRlbSAhPT0gXCJmdW5jdGlvblwiKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDQpIDogXCJlYWNoIG1pZGRsZXdhcmUgcHJvdmlkZWQgdG8gY29uZmlndXJlU3RvcmUgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICB9XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgJiYgZHVwbGljYXRlTWlkZGxld2FyZUNoZWNrKSB7XG4gICAgbGV0IG1pZGRsZXdhcmVSZWZlcmVuY2VzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcbiAgICBmaW5hbE1pZGRsZXdhcmUuZm9yRWFjaCgobWlkZGxld2FyZTIpID0+IHtcbiAgICAgIGlmIChtaWRkbGV3YXJlUmVmZXJlbmNlcy5oYXMobWlkZGxld2FyZTIpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDQyKSA6IFwiRHVwbGljYXRlIG1pZGRsZXdhcmUgcmVmZXJlbmNlcyBmb3VuZCB3aGVuIGNyZWF0aW5nIHRoZSBzdG9yZS4gRW5zdXJlIHRoYXQgZWFjaCBtaWRkbGV3YXJlIGlzIG9ubHkgaW5jbHVkZWQgb25jZS5cIik7XG4gICAgICB9XG4gICAgICBtaWRkbGV3YXJlUmVmZXJlbmNlcy5hZGQobWlkZGxld2FyZTIpO1xuICAgIH0pO1xuICB9XG4gIGxldCBmaW5hbENvbXBvc2UgPSBjb21wb3NlMjtcbiAgaWYgKGRldlRvb2xzKSB7XG4gICAgZmluYWxDb21wb3NlID0gY29tcG9zZVdpdGhEZXZUb29scyh7XG4gICAgICAvLyBFbmFibGUgY2FwdHVyZSBvZiBzdGFjayB0cmFjZXMgZm9yIGRpc3BhdGNoZWQgUmVkdXggYWN0aW9uc1xuICAgICAgdHJhY2U6IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIixcbiAgICAgIC4uLnR5cGVvZiBkZXZUb29scyA9PT0gXCJvYmplY3RcIiAmJiBkZXZUb29sc1xuICAgIH0pO1xuICB9XG4gIGNvbnN0IG1pZGRsZXdhcmVFbmhhbmNlciA9IGFwcGx5TWlkZGxld2FyZSguLi5maW5hbE1pZGRsZXdhcmUpO1xuICBjb25zdCBnZXREZWZhdWx0RW5oYW5jZXJzID0gYnVpbGRHZXREZWZhdWx0RW5oYW5jZXJzKG1pZGRsZXdhcmVFbmhhbmNlcik7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgJiYgZW5oYW5jZXJzICYmIHR5cGVvZiBlbmhhbmNlcnMgIT09IFwiZnVuY3Rpb25cIikge1xuICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDUpIDogXCJgZW5oYW5jZXJzYCBmaWVsZCBtdXN0IGJlIGEgY2FsbGJhY2tcIik7XG4gIH1cbiAgbGV0IHN0b3JlRW5oYW5jZXJzID0gdHlwZW9mIGVuaGFuY2VycyA9PT0gXCJmdW5jdGlvblwiID8gZW5oYW5jZXJzKGdldERlZmF1bHRFbmhhbmNlcnMpIDogZ2V0RGVmYXVsdEVuaGFuY2VycygpO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmICFBcnJheS5pc0FycmF5KHN0b3JlRW5oYW5jZXJzKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDYpIDogXCJgZW5oYW5jZXJzYCBjYWxsYmFjayBtdXN0IHJldHVybiBhbiBhcnJheVwiKTtcbiAgfVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmIHN0b3JlRW5oYW5jZXJzLnNvbWUoKGl0ZW0pID0+IHR5cGVvZiBpdGVtICE9PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoNykgOiBcImVhY2ggZW5oYW5jZXIgcHJvdmlkZWQgdG8gY29uZmlndXJlU3RvcmUgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICB9XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgJiYgZmluYWxNaWRkbGV3YXJlLmxlbmd0aCAmJiAhc3RvcmVFbmhhbmNlcnMuaW5jbHVkZXMobWlkZGxld2FyZUVuaGFuY2VyKSkge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJtaWRkbGV3YXJlcyB3ZXJlIHByb3ZpZGVkLCBidXQgbWlkZGxld2FyZSBlbmhhbmNlciB3YXMgbm90IGluY2x1ZGVkIGluIGZpbmFsIGVuaGFuY2VycyAtIG1ha2Ugc3VyZSB0byBjYWxsIGBnZXREZWZhdWx0RW5oYW5jZXJzYFwiKTtcbiAgfVxuICBjb25zdCBjb21wb3NlZEVuaGFuY2VyID0gZmluYWxDb21wb3NlKC4uLnN0b3JlRW5oYW5jZXJzKTtcbiAgcmV0dXJuIGNyZWF0ZVN0b3JlKHJvb3RSZWR1Y2VyLCBwcmVsb2FkZWRTdGF0ZSwgY29tcG9zZWRFbmhhbmNlcik7XG59XG5cbi8vIHNyYy9jcmVhdGVSZWR1Y2VyLnRzXG5pbXBvcnQgeyBwcm9kdWNlIGFzIGNyZWF0ZU5leHRTdGF0ZTIsIGlzRHJhZnQgYXMgaXNEcmFmdDIsIGlzRHJhZnRhYmxlIGFzIGlzRHJhZnRhYmxlMiB9IGZyb20gXCJpbW1lclwiO1xuXG4vLyBzcmMvbWFwQnVpbGRlcnMudHNcbmZ1bmN0aW9uIGV4ZWN1dGVSZWR1Y2VyQnVpbGRlckNhbGxiYWNrKGJ1aWxkZXJDYWxsYmFjaykge1xuICBjb25zdCBhY3Rpb25zTWFwID0ge307XG4gIGNvbnN0IGFjdGlvbk1hdGNoZXJzID0gW107XG4gIGxldCBkZWZhdWx0Q2FzZVJlZHVjZXI7XG4gIGNvbnN0IGJ1aWxkZXIgPSB7XG4gICAgYWRkQ2FzZSh0eXBlT3JBY3Rpb25DcmVhdG9yLCByZWR1Y2VyKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgIGlmIChhY3Rpb25NYXRjaGVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMjYpIDogXCJgYnVpbGRlci5hZGRDYXNlYCBzaG91bGQgb25seSBiZSBjYWxsZWQgYmVmb3JlIGNhbGxpbmcgYGJ1aWxkZXIuYWRkTWF0Y2hlcmBcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRlZmF1bHRDYXNlUmVkdWNlcikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDI3KSA6IFwiYGJ1aWxkZXIuYWRkQ2FzZWAgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJlZm9yZSBjYWxsaW5nIGBidWlsZGVyLmFkZERlZmF1bHRDYXNlYFwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgdHlwZSA9IHR5cGVvZiB0eXBlT3JBY3Rpb25DcmVhdG9yID09PSBcInN0cmluZ1wiID8gdHlwZU9yQWN0aW9uQ3JlYXRvciA6IHR5cGVPckFjdGlvbkNyZWF0b3IudHlwZTtcbiAgICAgIGlmICghdHlwZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgyOCkgOiBcImBidWlsZGVyLmFkZENhc2VgIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBhbiBlbXB0eSBhY3Rpb24gdHlwZVwiKTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlIGluIGFjdGlvbnNNYXApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMjkpIDogYFxcYGJ1aWxkZXIuYWRkQ2FzZVxcYCBjYW5ub3QgYmUgY2FsbGVkIHdpdGggdHdvIHJlZHVjZXJzIGZvciB0aGUgc2FtZSBhY3Rpb24gdHlwZSAnJHt0eXBlfSdgKTtcbiAgICAgIH1cbiAgICAgIGFjdGlvbnNNYXBbdHlwZV0gPSByZWR1Y2VyO1xuICAgICAgcmV0dXJuIGJ1aWxkZXI7XG4gICAgfSxcbiAgICBhZGRNYXRjaGVyKG1hdGNoZXIsIHJlZHVjZXIpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgaWYgKGRlZmF1bHRDYXNlUmVkdWNlcikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDMwKSA6IFwiYGJ1aWxkZXIuYWRkTWF0Y2hlcmAgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJlZm9yZSBjYWxsaW5nIGBidWlsZGVyLmFkZERlZmF1bHRDYXNlYFwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYWN0aW9uTWF0Y2hlcnMucHVzaCh7XG4gICAgICAgIG1hdGNoZXIsXG4gICAgICAgIHJlZHVjZXJcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGJ1aWxkZXI7XG4gICAgfSxcbiAgICBhZGREZWZhdWx0Q2FzZShyZWR1Y2VyKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgIGlmIChkZWZhdWx0Q2FzZVJlZHVjZXIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgzMSkgOiBcImBidWlsZGVyLmFkZERlZmF1bHRDYXNlYCBjYW4gb25seSBiZSBjYWxsZWQgb25jZVwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZGVmYXVsdENhc2VSZWR1Y2VyID0gcmVkdWNlcjtcbiAgICAgIHJldHVybiBidWlsZGVyO1xuICAgIH1cbiAgfTtcbiAgYnVpbGRlckNhbGxiYWNrKGJ1aWxkZXIpO1xuICByZXR1cm4gW2FjdGlvbnNNYXAsIGFjdGlvbk1hdGNoZXJzLCBkZWZhdWx0Q2FzZVJlZHVjZXJdO1xufVxuXG4vLyBzcmMvY3JlYXRlUmVkdWNlci50c1xuZnVuY3Rpb24gaXNTdGF0ZUZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSBcImZ1bmN0aW9uXCI7XG59XG5mdW5jdGlvbiBjcmVhdGVSZWR1Y2VyKGluaXRpYWxTdGF0ZSwgbWFwT3JCdWlsZGVyQ2FsbGJhY2spIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgIGlmICh0eXBlb2YgbWFwT3JCdWlsZGVyQ2FsbGJhY2sgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDgpIDogXCJUaGUgb2JqZWN0IG5vdGF0aW9uIGZvciBgY3JlYXRlUmVkdWNlcmAgaGFzIGJlZW4gcmVtb3ZlZC4gUGxlYXNlIHVzZSB0aGUgJ2J1aWxkZXIgY2FsbGJhY2snIG5vdGF0aW9uIGluc3RlYWQ6IGh0dHBzOi8vcmVkdXgtdG9vbGtpdC5qcy5vcmcvYXBpL2NyZWF0ZVJlZHVjZXJcIik7XG4gICAgfVxuICB9XG4gIGxldCBbYWN0aW9uc01hcCwgZmluYWxBY3Rpb25NYXRjaGVycywgZmluYWxEZWZhdWx0Q2FzZVJlZHVjZXJdID0gZXhlY3V0ZVJlZHVjZXJCdWlsZGVyQ2FsbGJhY2sobWFwT3JCdWlsZGVyQ2FsbGJhY2spO1xuICBsZXQgZ2V0SW5pdGlhbFN0YXRlO1xuICBpZiAoaXNTdGF0ZUZ1bmN0aW9uKGluaXRpYWxTdGF0ZSkpIHtcbiAgICBnZXRJbml0aWFsU3RhdGUgPSAoKSA9PiBmcmVlemVEcmFmdGFibGUoaW5pdGlhbFN0YXRlKCkpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGZyb3plbkluaXRpYWxTdGF0ZSA9IGZyZWV6ZURyYWZ0YWJsZShpbml0aWFsU3RhdGUpO1xuICAgIGdldEluaXRpYWxTdGF0ZSA9ICgpID0+IGZyb3plbkluaXRpYWxTdGF0ZTtcbiAgfVxuICBmdW5jdGlvbiByZWR1Y2VyKHN0YXRlID0gZ2V0SW5pdGlhbFN0YXRlKCksIGFjdGlvbikge1xuICAgIGxldCBjYXNlUmVkdWNlcnMgPSBbYWN0aW9uc01hcFthY3Rpb24udHlwZV0sIC4uLmZpbmFsQWN0aW9uTWF0Y2hlcnMuZmlsdGVyKCh7XG4gICAgICBtYXRjaGVyXG4gICAgfSkgPT4gbWF0Y2hlcihhY3Rpb24pKS5tYXAoKHtcbiAgICAgIHJlZHVjZXI6IHJlZHVjZXIyXG4gICAgfSkgPT4gcmVkdWNlcjIpXTtcbiAgICBpZiAoY2FzZVJlZHVjZXJzLmZpbHRlcigoY3IpID0+ICEhY3IpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY2FzZVJlZHVjZXJzID0gW2ZpbmFsRGVmYXVsdENhc2VSZWR1Y2VyXTtcbiAgICB9XG4gICAgcmV0dXJuIGNhc2VSZWR1Y2Vycy5yZWR1Y2UoKHByZXZpb3VzU3RhdGUsIGNhc2VSZWR1Y2VyKSA9PiB7XG4gICAgICBpZiAoY2FzZVJlZHVjZXIpIHtcbiAgICAgICAgaWYgKGlzRHJhZnQyKHByZXZpb3VzU3RhdGUpKSB7XG4gICAgICAgICAgY29uc3QgZHJhZnQgPSBwcmV2aW91c1N0YXRlO1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNhc2VSZWR1Y2VyKGRyYWZ0LCBhY3Rpb24pO1xuICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkge1xuICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzU3RhdGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzRHJhZnRhYmxlMihwcmV2aW91c1N0YXRlKSkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNhc2VSZWR1Y2VyKHByZXZpb3VzU3RhdGUsIGFjdGlvbik7XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSB7XG4gICAgICAgICAgICBpZiAocHJldmlvdXNTdGF0ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICByZXR1cm4gcHJldmlvdXNTdGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IEVycm9yKFwiQSBjYXNlIHJlZHVjZXIgb24gYSBub24tZHJhZnRhYmxlIHZhbHVlIG11c3Qgbm90IHJldHVybiB1bmRlZmluZWRcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZU5leHRTdGF0ZTIocHJldmlvdXNTdGF0ZSwgKGRyYWZ0KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gY2FzZVJlZHVjZXIoZHJhZnQsIGFjdGlvbik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBwcmV2aW91c1N0YXRlO1xuICAgIH0sIHN0YXRlKTtcbiAgfVxuICByZWR1Y2VyLmdldEluaXRpYWxTdGF0ZSA9IGdldEluaXRpYWxTdGF0ZTtcbiAgcmV0dXJuIHJlZHVjZXI7XG59XG5cbi8vIHNyYy9tYXRjaGVycy50c1xudmFyIG1hdGNoZXMgPSAobWF0Y2hlciwgYWN0aW9uKSA9PiB7XG4gIGlmIChoYXNNYXRjaEZ1bmN0aW9uKG1hdGNoZXIpKSB7XG4gICAgcmV0dXJuIG1hdGNoZXIubWF0Y2goYWN0aW9uKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbWF0Y2hlcihhY3Rpb24pO1xuICB9XG59O1xuZnVuY3Rpb24gaXNBbnlPZiguLi5tYXRjaGVycykge1xuICByZXR1cm4gKGFjdGlvbikgPT4ge1xuICAgIHJldHVybiBtYXRjaGVycy5zb21lKChtYXRjaGVyKSA9PiBtYXRjaGVzKG1hdGNoZXIsIGFjdGlvbikpO1xuICB9O1xufVxuZnVuY3Rpb24gaXNBbGxPZiguLi5tYXRjaGVycykge1xuICByZXR1cm4gKGFjdGlvbikgPT4ge1xuICAgIHJldHVybiBtYXRjaGVycy5ldmVyeSgobWF0Y2hlcikgPT4gbWF0Y2hlcyhtYXRjaGVyLCBhY3Rpb24pKTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGhhc0V4cGVjdGVkUmVxdWVzdE1ldGFkYXRhKGFjdGlvbiwgdmFsaWRTdGF0dXMpIHtcbiAgaWYgKCFhY3Rpb24gfHwgIWFjdGlvbi5tZXRhKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGhhc1ZhbGlkUmVxdWVzdElkID0gdHlwZW9mIGFjdGlvbi5tZXRhLnJlcXVlc3RJZCA9PT0gXCJzdHJpbmdcIjtcbiAgY29uc3QgaGFzVmFsaWRSZXF1ZXN0U3RhdHVzID0gdmFsaWRTdGF0dXMuaW5kZXhPZihhY3Rpb24ubWV0YS5yZXF1ZXN0U3RhdHVzKSA+IC0xO1xuICByZXR1cm4gaGFzVmFsaWRSZXF1ZXN0SWQgJiYgaGFzVmFsaWRSZXF1ZXN0U3RhdHVzO1xufVxuZnVuY3Rpb24gaXNBc3luY1RodW5rQXJyYXkoYSkge1xuICByZXR1cm4gdHlwZW9mIGFbMF0gPT09IFwiZnVuY3Rpb25cIiAmJiBcInBlbmRpbmdcIiBpbiBhWzBdICYmIFwiZnVsZmlsbGVkXCIgaW4gYVswXSAmJiBcInJlamVjdGVkXCIgaW4gYVswXTtcbn1cbmZ1bmN0aW9uIGlzUGVuZGluZyguLi5hc3luY1RodW5rcykge1xuICBpZiAoYXN5bmNUaHVua3MubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIChhY3Rpb24pID0+IGhhc0V4cGVjdGVkUmVxdWVzdE1ldGFkYXRhKGFjdGlvbiwgW1wicGVuZGluZ1wiXSk7XG4gIH1cbiAgaWYgKCFpc0FzeW5jVGh1bmtBcnJheShhc3luY1RodW5rcykpIHtcbiAgICByZXR1cm4gaXNQZW5kaW5nKCkoYXN5bmNUaHVua3NbMF0pO1xuICB9XG4gIHJldHVybiBpc0FueU9mKC4uLmFzeW5jVGh1bmtzLm1hcCgoYXN5bmNUaHVuaykgPT4gYXN5bmNUaHVuay5wZW5kaW5nKSk7XG59XG5mdW5jdGlvbiBpc1JlamVjdGVkKC4uLmFzeW5jVGh1bmtzKSB7XG4gIGlmIChhc3luY1RodW5rcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gKGFjdGlvbikgPT4gaGFzRXhwZWN0ZWRSZXF1ZXN0TWV0YWRhdGEoYWN0aW9uLCBbXCJyZWplY3RlZFwiXSk7XG4gIH1cbiAgaWYgKCFpc0FzeW5jVGh1bmtBcnJheShhc3luY1RodW5rcykpIHtcbiAgICByZXR1cm4gaXNSZWplY3RlZCgpKGFzeW5jVGh1bmtzWzBdKTtcbiAgfVxuICByZXR1cm4gaXNBbnlPZiguLi5hc3luY1RodW5rcy5tYXAoKGFzeW5jVGh1bmspID0+IGFzeW5jVGh1bmsucmVqZWN0ZWQpKTtcbn1cbmZ1bmN0aW9uIGlzUmVqZWN0ZWRXaXRoVmFsdWUoLi4uYXN5bmNUaHVua3MpIHtcbiAgY29uc3QgaGFzRmxhZyA9IChhY3Rpb24pID0+IHtcbiAgICByZXR1cm4gYWN0aW9uICYmIGFjdGlvbi5tZXRhICYmIGFjdGlvbi5tZXRhLnJlamVjdGVkV2l0aFZhbHVlO1xuICB9O1xuICBpZiAoYXN5bmNUaHVua3MubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGlzQWxsT2YoaXNSZWplY3RlZCguLi5hc3luY1RodW5rcyksIGhhc0ZsYWcpO1xuICB9XG4gIGlmICghaXNBc3luY1RodW5rQXJyYXkoYXN5bmNUaHVua3MpKSB7XG4gICAgcmV0dXJuIGlzUmVqZWN0ZWRXaXRoVmFsdWUoKShhc3luY1RodW5rc1swXSk7XG4gIH1cbiAgcmV0dXJuIGlzQWxsT2YoaXNSZWplY3RlZCguLi5hc3luY1RodW5rcyksIGhhc0ZsYWcpO1xufVxuZnVuY3Rpb24gaXNGdWxmaWxsZWQoLi4uYXN5bmNUaHVua3MpIHtcbiAgaWYgKGFzeW5jVGh1bmtzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAoYWN0aW9uKSA9PiBoYXNFeHBlY3RlZFJlcXVlc3RNZXRhZGF0YShhY3Rpb24sIFtcImZ1bGZpbGxlZFwiXSk7XG4gIH1cbiAgaWYgKCFpc0FzeW5jVGh1bmtBcnJheShhc3luY1RodW5rcykpIHtcbiAgICByZXR1cm4gaXNGdWxmaWxsZWQoKShhc3luY1RodW5rc1swXSk7XG4gIH1cbiAgcmV0dXJuIGlzQW55T2YoLi4uYXN5bmNUaHVua3MubWFwKChhc3luY1RodW5rKSA9PiBhc3luY1RodW5rLmZ1bGZpbGxlZCkpO1xufVxuZnVuY3Rpb24gaXNBc3luY1RodW5rQWN0aW9uKC4uLmFzeW5jVGh1bmtzKSB7XG4gIGlmIChhc3luY1RodW5rcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gKGFjdGlvbikgPT4gaGFzRXhwZWN0ZWRSZXF1ZXN0TWV0YWRhdGEoYWN0aW9uLCBbXCJwZW5kaW5nXCIsIFwiZnVsZmlsbGVkXCIsIFwicmVqZWN0ZWRcIl0pO1xuICB9XG4gIGlmICghaXNBc3luY1RodW5rQXJyYXkoYXN5bmNUaHVua3MpKSB7XG4gICAgcmV0dXJuIGlzQXN5bmNUaHVua0FjdGlvbigpKGFzeW5jVGh1bmtzWzBdKTtcbiAgfVxuICByZXR1cm4gaXNBbnlPZiguLi5hc3luY1RodW5rcy5mbGF0TWFwKChhc3luY1RodW5rKSA9PiBbYXN5bmNUaHVuay5wZW5kaW5nLCBhc3luY1RodW5rLnJlamVjdGVkLCBhc3luY1RodW5rLmZ1bGZpbGxlZF0pKTtcbn1cblxuLy8gc3JjL25hbm9pZC50c1xudmFyIHVybEFscGhhYmV0ID0gXCJNb2R1bGVTeW1iaGFzT3duUHItMDEyMzQ1Njc4OUFCQ0RFRkdITlJWZmdjdGlVdnpfS3FZVEprTHhwWlhJalFXXCI7XG52YXIgbmFub2lkID0gKHNpemUgPSAyMSkgPT4ge1xuICBsZXQgaWQgPSBcIlwiO1xuICBsZXQgaSA9IHNpemU7XG4gIHdoaWxlIChpLS0pIHtcbiAgICBpZCArPSB1cmxBbHBoYWJldFtNYXRoLnJhbmRvbSgpICogNjQgfCAwXTtcbiAgfVxuICByZXR1cm4gaWQ7XG59O1xuXG4vLyBzcmMvY3JlYXRlQXN5bmNUaHVuay50c1xudmFyIGNvbW1vblByb3BlcnRpZXMgPSBbXCJuYW1lXCIsIFwibWVzc2FnZVwiLCBcInN0YWNrXCIsIFwiY29kZVwiXTtcbnZhciBSZWplY3RXaXRoVmFsdWUgPSBjbGFzcyB7XG4gIGNvbnN0cnVjdG9yKHBheWxvYWQsIG1ldGEpIHtcbiAgICB0aGlzLnBheWxvYWQgPSBwYXlsb2FkO1xuICAgIHRoaXMubWV0YSA9IG1ldGE7XG4gIH1cbiAgLypcbiAgdHlwZS1vbmx5IHByb3BlcnR5IHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gUmVqZWN0V2l0aFZhbHVlIGFuZCBGdWxmaWxsV2l0aE1ldGFcbiAgZG9lcyBub3QgZXhpc3QgYXQgcnVudGltZVxuICAqL1xuICBfdHlwZTtcbn07XG52YXIgRnVsZmlsbFdpdGhNZXRhID0gY2xhc3Mge1xuICBjb25zdHJ1Y3RvcihwYXlsb2FkLCBtZXRhKSB7XG4gICAgdGhpcy5wYXlsb2FkID0gcGF5bG9hZDtcbiAgICB0aGlzLm1ldGEgPSBtZXRhO1xuICB9XG4gIC8qXG4gIHR5cGUtb25seSBwcm9wZXJ0eSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIFJlamVjdFdpdGhWYWx1ZSBhbmQgRnVsZmlsbFdpdGhNZXRhXG4gIGRvZXMgbm90IGV4aXN0IGF0IHJ1bnRpbWVcbiAgKi9cbiAgX3R5cGU7XG59O1xudmFyIG1pbmlTZXJpYWxpemVFcnJvciA9ICh2YWx1ZSkgPT4ge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc2ltcGxlRXJyb3IgPSB7fTtcbiAgICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIGNvbW1vblByb3BlcnRpZXMpIHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWVbcHJvcGVydHldID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHNpbXBsZUVycm9yW3Byb3BlcnR5XSA9IHZhbHVlW3Byb3BlcnR5XTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHNpbXBsZUVycm9yO1xuICB9XG4gIHJldHVybiB7XG4gICAgbWVzc2FnZTogU3RyaW5nKHZhbHVlKVxuICB9O1xufTtcbnZhciBleHRlcm5hbEFib3J0TWVzc2FnZSA9IFwiRXh0ZXJuYWwgc2lnbmFsIHdhcyBhYm9ydGVkXCI7XG52YXIgY3JlYXRlQXN5bmNUaHVuayA9IC8qIEBfX1BVUkVfXyAqLyAoKCkgPT4ge1xuICBmdW5jdGlvbiBjcmVhdGVBc3luY1RodW5rMih0eXBlUHJlZml4LCBwYXlsb2FkQ3JlYXRvciwgb3B0aW9ucykge1xuICAgIGNvbnN0IGZ1bGZpbGxlZCA9IGNyZWF0ZUFjdGlvbih0eXBlUHJlZml4ICsgXCIvZnVsZmlsbGVkXCIsIChwYXlsb2FkLCByZXF1ZXN0SWQsIGFyZywgbWV0YSkgPT4gKHtcbiAgICAgIHBheWxvYWQsXG4gICAgICBtZXRhOiB7XG4gICAgICAgIC4uLm1ldGEgfHwge30sXG4gICAgICAgIGFyZyxcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICByZXF1ZXN0U3RhdHVzOiBcImZ1bGZpbGxlZFwiXG4gICAgICB9XG4gICAgfSkpO1xuICAgIGNvbnN0IHBlbmRpbmcgPSBjcmVhdGVBY3Rpb24odHlwZVByZWZpeCArIFwiL3BlbmRpbmdcIiwgKHJlcXVlc3RJZCwgYXJnLCBtZXRhKSA9PiAoe1xuICAgICAgcGF5bG9hZDogdm9pZCAwLFxuICAgICAgbWV0YToge1xuICAgICAgICAuLi5tZXRhIHx8IHt9LFxuICAgICAgICBhcmcsXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgcmVxdWVzdFN0YXR1czogXCJwZW5kaW5nXCJcbiAgICAgIH1cbiAgICB9KSk7XG4gICAgY29uc3QgcmVqZWN0ZWQgPSBjcmVhdGVBY3Rpb24odHlwZVByZWZpeCArIFwiL3JlamVjdGVkXCIsIChlcnJvciwgcmVxdWVzdElkLCBhcmcsIHBheWxvYWQsIG1ldGEpID0+ICh7XG4gICAgICBwYXlsb2FkLFxuICAgICAgZXJyb3I6IChvcHRpb25zICYmIG9wdGlvbnMuc2VyaWFsaXplRXJyb3IgfHwgbWluaVNlcmlhbGl6ZUVycm9yKShlcnJvciB8fCBcIlJlamVjdGVkXCIpLFxuICAgICAgbWV0YToge1xuICAgICAgICAuLi5tZXRhIHx8IHt9LFxuICAgICAgICBhcmcsXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgcmVqZWN0ZWRXaXRoVmFsdWU6ICEhcGF5bG9hZCxcbiAgICAgICAgcmVxdWVzdFN0YXR1czogXCJyZWplY3RlZFwiLFxuICAgICAgICBhYm9ydGVkOiBlcnJvcj8ubmFtZSA9PT0gXCJBYm9ydEVycm9yXCIsXG4gICAgICAgIGNvbmRpdGlvbjogZXJyb3I/Lm5hbWUgPT09IFwiQ29uZGl0aW9uRXJyb3JcIlxuICAgICAgfVxuICAgIH0pKTtcbiAgICBmdW5jdGlvbiBhY3Rpb25DcmVhdG9yKGFyZywge1xuICAgICAgc2lnbmFsXG4gICAgfSA9IHt9KSB7XG4gICAgICByZXR1cm4gKGRpc3BhdGNoLCBnZXRTdGF0ZSwgZXh0cmEpID0+IHtcbiAgICAgICAgY29uc3QgcmVxdWVzdElkID0gb3B0aW9ucz8uaWRHZW5lcmF0b3IgPyBvcHRpb25zLmlkR2VuZXJhdG9yKGFyZykgOiBuYW5vaWQoKTtcbiAgICAgICAgY29uc3QgYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgICAgICBsZXQgYWJvcnRIYW5kbGVyO1xuICAgICAgICBsZXQgYWJvcnRSZWFzb247XG4gICAgICAgIGZ1bmN0aW9uIGFib3J0KHJlYXNvbikge1xuICAgICAgICAgIGFib3J0UmVhc29uID0gcmVhc29uO1xuICAgICAgICAgIGFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzaWduYWwpIHtcbiAgICAgICAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgICAgIGFib3J0KGV4dGVybmFsQWJvcnRNZXNzYWdlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCAoKSA9PiBhYm9ydChleHRlcm5hbEFib3J0TWVzc2FnZSksIHtcbiAgICAgICAgICAgICAgb25jZTogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByb21pc2UgPSBhc3luYyBmdW5jdGlvbigpIHtcbiAgICAgICAgICBsZXQgZmluYWxBY3Rpb247XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCBjb25kaXRpb25SZXN1bHQgPSBvcHRpb25zPy5jb25kaXRpb24/LihhcmcsIHtcbiAgICAgICAgICAgICAgZ2V0U3RhdGUsXG4gICAgICAgICAgICAgIGV4dHJhXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChpc1RoZW5hYmxlKGNvbmRpdGlvblJlc3VsdCkpIHtcbiAgICAgICAgICAgICAgY29uZGl0aW9uUmVzdWx0ID0gYXdhaXQgY29uZGl0aW9uUmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNvbmRpdGlvblJlc3VsdCA9PT0gZmFsc2UgfHwgYWJvcnRDb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgICAgICAgIHRocm93IHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbmRpdGlvbkVycm9yXCIsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogXCJBYm9ydGVkIGR1ZSB0byBjb25kaXRpb24gY2FsbGJhY2sgcmV0dXJuaW5nIGZhbHNlLlwiXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhYm9ydGVkUHJvbWlzZSA9IG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgYWJvcnRIYW5kbGVyID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdCh7XG4gICAgICAgICAgICAgICAgICBuYW1lOiBcIkFib3J0RXJyb3JcIixcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGFib3J0UmVhc29uIHx8IFwiQWJvcnRlZFwiXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIGFib3J0Q29udHJvbGxlci5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIGFib3J0SGFuZGxlcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGRpc3BhdGNoKHBlbmRpbmcocmVxdWVzdElkLCBhcmcsIG9wdGlvbnM/LmdldFBlbmRpbmdNZXRhPy4oe1xuICAgICAgICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgICAgICAgIGFyZ1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICBnZXRTdGF0ZSxcbiAgICAgICAgICAgICAgZXh0cmFcbiAgICAgICAgICAgIH0pKSk7XG4gICAgICAgICAgICBmaW5hbEFjdGlvbiA9IGF3YWl0IFByb21pc2UucmFjZShbYWJvcnRlZFByb21pc2UsIFByb21pc2UucmVzb2x2ZShwYXlsb2FkQ3JlYXRvcihhcmcsIHtcbiAgICAgICAgICAgICAgZGlzcGF0Y2gsXG4gICAgICAgICAgICAgIGdldFN0YXRlLFxuICAgICAgICAgICAgICBleHRyYSxcbiAgICAgICAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICAgICAgICBzaWduYWw6IGFib3J0Q29udHJvbGxlci5zaWduYWwsXG4gICAgICAgICAgICAgIGFib3J0LFxuICAgICAgICAgICAgICByZWplY3RXaXRoVmFsdWU6ICh2YWx1ZSwgbWV0YSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUmVqZWN0V2l0aFZhbHVlKHZhbHVlLCBtZXRhKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZnVsZmlsbFdpdGhWYWx1ZTogKHZhbHVlLCBtZXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBGdWxmaWxsV2l0aE1ldGEodmFsdWUsIG1ldGEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBSZWplY3RXaXRoVmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyByZXN1bHQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIEZ1bGZpbGxXaXRoTWV0YSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmdWxmaWxsZWQocmVzdWx0LnBheWxvYWQsIHJlcXVlc3RJZCwgYXJnLCByZXN1bHQubWV0YSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGZ1bGZpbGxlZChyZXN1bHQsIHJlcXVlc3RJZCwgYXJnKTtcbiAgICAgICAgICAgIH0pXSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBmaW5hbEFjdGlvbiA9IGVyciBpbnN0YW5jZW9mIFJlamVjdFdpdGhWYWx1ZSA/IHJlamVjdGVkKG51bGwsIHJlcXVlc3RJZCwgYXJnLCBlcnIucGF5bG9hZCwgZXJyLm1ldGEpIDogcmVqZWN0ZWQoZXJyLCByZXF1ZXN0SWQsIGFyZyk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGlmIChhYm9ydEhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgYWJvcnRDb250cm9sbGVyLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgYWJvcnRIYW5kbGVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qgc2tpcERpc3BhdGNoID0gb3B0aW9ucyAmJiAhb3B0aW9ucy5kaXNwYXRjaENvbmRpdGlvblJlamVjdGlvbiAmJiByZWplY3RlZC5tYXRjaChmaW5hbEFjdGlvbikgJiYgZmluYWxBY3Rpb24ubWV0YS5jb25kaXRpb247XG4gICAgICAgICAgaWYgKCFza2lwRGlzcGF0Y2gpIHtcbiAgICAgICAgICAgIGRpc3BhdGNoKGZpbmFsQWN0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZpbmFsQWN0aW9uO1xuICAgICAgICB9KCk7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHByb21pc2UsIHtcbiAgICAgICAgICBhYm9ydCxcbiAgICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgICAgYXJnLFxuICAgICAgICAgIHVud3JhcCgpIHtcbiAgICAgICAgICAgIHJldHVybiBwcm9taXNlLnRoZW4odW53cmFwUmVzdWx0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oYWN0aW9uQ3JlYXRvciwge1xuICAgICAgcGVuZGluZyxcbiAgICAgIHJlamVjdGVkLFxuICAgICAgZnVsZmlsbGVkLFxuICAgICAgc2V0dGxlZDogaXNBbnlPZihyZWplY3RlZCwgZnVsZmlsbGVkKSxcbiAgICAgIHR5cGVQcmVmaXhcbiAgICB9KTtcbiAgfVxuICBjcmVhdGVBc3luY1RodW5rMi53aXRoVHlwZXMgPSAoKSA9PiBjcmVhdGVBc3luY1RodW5rMjtcbiAgcmV0dXJuIGNyZWF0ZUFzeW5jVGh1bmsyO1xufSkoKTtcbmZ1bmN0aW9uIHVud3JhcFJlc3VsdChhY3Rpb24pIHtcbiAgaWYgKGFjdGlvbi5tZXRhICYmIGFjdGlvbi5tZXRhLnJlamVjdGVkV2l0aFZhbHVlKSB7XG4gICAgdGhyb3cgYWN0aW9uLnBheWxvYWQ7XG4gIH1cbiAgaWYgKGFjdGlvbi5lcnJvcikge1xuICAgIHRocm93IGFjdGlvbi5lcnJvcjtcbiAgfVxuICByZXR1cm4gYWN0aW9uLnBheWxvYWQ7XG59XG5mdW5jdGlvbiBpc1RoZW5hYmxlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHZhbHVlLnRoZW4gPT09IFwiZnVuY3Rpb25cIjtcbn1cblxuLy8gc3JjL2NyZWF0ZVNsaWNlLnRzXG52YXIgYXN5bmNUaHVua1N5bWJvbCA9IC8qIEBfX1BVUkVfXyAqLyBTeW1ib2wuZm9yKFwicnRrLXNsaWNlLWNyZWF0ZWFzeW5jdGh1bmtcIik7XG52YXIgYXN5bmNUaHVua0NyZWF0b3IgPSB7XG4gIFthc3luY1RodW5rU3ltYm9sXTogY3JlYXRlQXN5bmNUaHVua1xufTtcbnZhciBSZWR1Y2VyVHlwZSA9IC8qIEBfX1BVUkVfXyAqLyAoKFJlZHVjZXJUeXBlMikgPT4ge1xuICBSZWR1Y2VyVHlwZTJbXCJyZWR1Y2VyXCJdID0gXCJyZWR1Y2VyXCI7XG4gIFJlZHVjZXJUeXBlMltcInJlZHVjZXJXaXRoUHJlcGFyZVwiXSA9IFwicmVkdWNlcldpdGhQcmVwYXJlXCI7XG4gIFJlZHVjZXJUeXBlMltcImFzeW5jVGh1bmtcIl0gPSBcImFzeW5jVGh1bmtcIjtcbiAgcmV0dXJuIFJlZHVjZXJUeXBlMjtcbn0pKFJlZHVjZXJUeXBlIHx8IHt9KTtcbmZ1bmN0aW9uIGdldFR5cGUoc2xpY2UsIGFjdGlvbktleSkge1xuICByZXR1cm4gYCR7c2xpY2V9LyR7YWN0aW9uS2V5fWA7XG59XG5mdW5jdGlvbiBidWlsZENyZWF0ZVNsaWNlKHtcbiAgY3JlYXRvcnNcbn0gPSB7fSkge1xuICBjb25zdCBjQVQgPSBjcmVhdG9ycz8uYXN5bmNUaHVuaz8uW2FzeW5jVGh1bmtTeW1ib2xdO1xuICByZXR1cm4gZnVuY3Rpb24gY3JlYXRlU2xpY2UyKG9wdGlvbnMpIHtcbiAgICBjb25zdCB7XG4gICAgICBuYW1lLFxuICAgICAgcmVkdWNlclBhdGggPSBuYW1lXG4gICAgfSA9IG9wdGlvbnM7XG4gICAgaWYgKCFuYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxMSkgOiBcImBuYW1lYCBpcyBhIHJlcXVpcmVkIG9wdGlvbiBmb3IgY3JlYXRlU2xpY2VcIik7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZlbG9wbWVudFwiKSB7XG4gICAgICBpZiAob3B0aW9ucy5pbml0aWFsU3RhdGUgPT09IHZvaWQgMCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiWW91IG11c3QgcHJvdmlkZSBhbiBgaW5pdGlhbFN0YXRlYCB2YWx1ZSB0aGF0IGlzIG5vdCBgdW5kZWZpbmVkYC4gWW91IG1heSBoYXZlIG1pc3NwZWxsZWQgYGluaXRpYWxTdGF0ZWBcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHJlZHVjZXJzID0gKHR5cGVvZiBvcHRpb25zLnJlZHVjZXJzID09PSBcImZ1bmN0aW9uXCIgPyBvcHRpb25zLnJlZHVjZXJzKGJ1aWxkUmVkdWNlckNyZWF0b3JzKCkpIDogb3B0aW9ucy5yZWR1Y2VycykgfHwge307XG4gICAgY29uc3QgcmVkdWNlck5hbWVzID0gT2JqZWN0LmtleXMocmVkdWNlcnMpO1xuICAgIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgICBzbGljZUNhc2VSZWR1Y2Vyc0J5TmFtZToge30sXG4gICAgICBzbGljZUNhc2VSZWR1Y2Vyc0J5VHlwZToge30sXG4gICAgICBhY3Rpb25DcmVhdG9yczoge30sXG4gICAgICBzbGljZU1hdGNoZXJzOiBbXVxuICAgIH07XG4gICAgY29uc3QgY29udGV4dE1ldGhvZHMgPSB7XG4gICAgICBhZGRDYXNlKHR5cGVPckFjdGlvbkNyZWF0b3IsIHJlZHVjZXIyKSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSB0eXBlb2YgdHlwZU9yQWN0aW9uQ3JlYXRvciA9PT0gXCJzdHJpbmdcIiA/IHR5cGVPckFjdGlvbkNyZWF0b3IgOiB0eXBlT3JBY3Rpb25DcmVhdG9yLnR5cGU7XG4gICAgICAgIGlmICghdHlwZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDEyKSA6IFwiYGNvbnRleHQuYWRkQ2FzZWAgY2Fubm90IGJlIGNhbGxlZCB3aXRoIGFuIGVtcHR5IGFjdGlvbiB0eXBlXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlIGluIGNvbnRleHQuc2xpY2VDYXNlUmVkdWNlcnNCeVR5cGUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxMykgOiBcImBjb250ZXh0LmFkZENhc2VgIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCB0d28gcmVkdWNlcnMgZm9yIHRoZSBzYW1lIGFjdGlvbiB0eXBlOiBcIiArIHR5cGUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRleHQuc2xpY2VDYXNlUmVkdWNlcnNCeVR5cGVbdHlwZV0gPSByZWR1Y2VyMjtcbiAgICAgICAgcmV0dXJuIGNvbnRleHRNZXRob2RzO1xuICAgICAgfSxcbiAgICAgIGFkZE1hdGNoZXIobWF0Y2hlciwgcmVkdWNlcjIpIHtcbiAgICAgICAgY29udGV4dC5zbGljZU1hdGNoZXJzLnB1c2goe1xuICAgICAgICAgIG1hdGNoZXIsXG4gICAgICAgICAgcmVkdWNlcjogcmVkdWNlcjJcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjb250ZXh0TWV0aG9kcztcbiAgICAgIH0sXG4gICAgICBleHBvc2VBY3Rpb24obmFtZTIsIGFjdGlvbkNyZWF0b3IpIHtcbiAgICAgICAgY29udGV4dC5hY3Rpb25DcmVhdG9yc1tuYW1lMl0gPSBhY3Rpb25DcmVhdG9yO1xuICAgICAgICByZXR1cm4gY29udGV4dE1ldGhvZHM7XG4gICAgICB9LFxuICAgICAgZXhwb3NlQ2FzZVJlZHVjZXIobmFtZTIsIHJlZHVjZXIyKSB7XG4gICAgICAgIGNvbnRleHQuc2xpY2VDYXNlUmVkdWNlcnNCeU5hbWVbbmFtZTJdID0gcmVkdWNlcjI7XG4gICAgICAgIHJldHVybiBjb250ZXh0TWV0aG9kcztcbiAgICAgIH1cbiAgICB9O1xuICAgIHJlZHVjZXJOYW1lcy5mb3JFYWNoKChyZWR1Y2VyTmFtZSkgPT4ge1xuICAgICAgY29uc3QgcmVkdWNlckRlZmluaXRpb24gPSByZWR1Y2Vyc1tyZWR1Y2VyTmFtZV07XG4gICAgICBjb25zdCByZWR1Y2VyRGV0YWlscyA9IHtcbiAgICAgICAgcmVkdWNlck5hbWUsXG4gICAgICAgIHR5cGU6IGdldFR5cGUobmFtZSwgcmVkdWNlck5hbWUpLFxuICAgICAgICBjcmVhdGVOb3RhdGlvbjogdHlwZW9mIG9wdGlvbnMucmVkdWNlcnMgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgfTtcbiAgICAgIGlmIChpc0FzeW5jVGh1bmtTbGljZVJlZHVjZXJEZWZpbml0aW9uKHJlZHVjZXJEZWZpbml0aW9uKSkge1xuICAgICAgICBoYW5kbGVUaHVua0Nhc2VSZWR1Y2VyRGVmaW5pdGlvbihyZWR1Y2VyRGV0YWlscywgcmVkdWNlckRlZmluaXRpb24sIGNvbnRleHRNZXRob2RzLCBjQVQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGFuZGxlTm9ybWFsUmVkdWNlckRlZmluaXRpb24ocmVkdWNlckRldGFpbHMsIHJlZHVjZXJEZWZpbml0aW9uLCBjb250ZXh0TWV0aG9kcyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZnVuY3Rpb24gYnVpbGRSZWR1Y2VyKCkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZXh0cmFSZWR1Y2VycyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDE0KSA6IFwiVGhlIG9iamVjdCBub3RhdGlvbiBmb3IgYGNyZWF0ZVNsaWNlLmV4dHJhUmVkdWNlcnNgIGhhcyBiZWVuIHJlbW92ZWQuIFBsZWFzZSB1c2UgdGhlICdidWlsZGVyIGNhbGxiYWNrJyBub3RhdGlvbiBpbnN0ZWFkOiBodHRwczovL3JlZHV4LXRvb2xraXQuanMub3JnL2FwaS9jcmVhdGVTbGljZVwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgW2V4dHJhUmVkdWNlcnMgPSB7fSwgYWN0aW9uTWF0Y2hlcnMgPSBbXSwgZGVmYXVsdENhc2VSZWR1Y2VyID0gdm9pZCAwXSA9IHR5cGVvZiBvcHRpb25zLmV4dHJhUmVkdWNlcnMgPT09IFwiZnVuY3Rpb25cIiA/IGV4ZWN1dGVSZWR1Y2VyQnVpbGRlckNhbGxiYWNrKG9wdGlvbnMuZXh0cmFSZWR1Y2VycykgOiBbb3B0aW9ucy5leHRyYVJlZHVjZXJzXTtcbiAgICAgIGNvbnN0IGZpbmFsQ2FzZVJlZHVjZXJzID0ge1xuICAgICAgICAuLi5leHRyYVJlZHVjZXJzLFxuICAgICAgICAuLi5jb250ZXh0LnNsaWNlQ2FzZVJlZHVjZXJzQnlUeXBlXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGNyZWF0ZVJlZHVjZXIob3B0aW9ucy5pbml0aWFsU3RhdGUsIChidWlsZGVyKSA9PiB7XG4gICAgICAgIGZvciAobGV0IGtleSBpbiBmaW5hbENhc2VSZWR1Y2Vycykge1xuICAgICAgICAgIGJ1aWxkZXIuYWRkQ2FzZShrZXksIGZpbmFsQ2FzZVJlZHVjZXJzW2tleV0pO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IHNNIG9mIGNvbnRleHQuc2xpY2VNYXRjaGVycykge1xuICAgICAgICAgIGJ1aWxkZXIuYWRkTWF0Y2hlcihzTS5tYXRjaGVyLCBzTS5yZWR1Y2VyKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBtIG9mIGFjdGlvbk1hdGNoZXJzKSB7XG4gICAgICAgICAgYnVpbGRlci5hZGRNYXRjaGVyKG0ubWF0Y2hlciwgbS5yZWR1Y2VyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGVmYXVsdENhc2VSZWR1Y2VyKSB7XG4gICAgICAgICAgYnVpbGRlci5hZGREZWZhdWx0Q2FzZShkZWZhdWx0Q2FzZVJlZHVjZXIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3Qgc2VsZWN0U2VsZiA9IChzdGF0ZSkgPT4gc3RhdGU7XG4gICAgY29uc3QgaW5qZWN0ZWRTZWxlY3RvckNhY2hlID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgICBjb25zdCBpbmplY3RlZFN0YXRlQ2FjaGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbiAgICBsZXQgX3JlZHVjZXI7XG4gICAgZnVuY3Rpb24gcmVkdWNlcihzdGF0ZSwgYWN0aW9uKSB7XG4gICAgICBpZiAoIV9yZWR1Y2VyKSBfcmVkdWNlciA9IGJ1aWxkUmVkdWNlcigpO1xuICAgICAgcmV0dXJuIF9yZWR1Y2VyKHN0YXRlLCBhY3Rpb24pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRJbml0aWFsU3RhdGUoKSB7XG4gICAgICBpZiAoIV9yZWR1Y2VyKSBfcmVkdWNlciA9IGJ1aWxkUmVkdWNlcigpO1xuICAgICAgcmV0dXJuIF9yZWR1Y2VyLmdldEluaXRpYWxTdGF0ZSgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtYWtlU2VsZWN0b3JQcm9wcyhyZWR1Y2VyUGF0aDIsIGluamVjdGVkID0gZmFsc2UpIHtcbiAgICAgIGZ1bmN0aW9uIHNlbGVjdFNsaWNlKHN0YXRlKSB7XG4gICAgICAgIGxldCBzbGljZVN0YXRlID0gc3RhdGVbcmVkdWNlclBhdGgyXTtcbiAgICAgICAgaWYgKHR5cGVvZiBzbGljZVN0YXRlID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgaWYgKGluamVjdGVkKSB7XG4gICAgICAgICAgICBzbGljZVN0YXRlID0gZ2V0T3JJbnNlcnRDb21wdXRlZChpbmplY3RlZFN0YXRlQ2FjaGUsIHNlbGVjdFNsaWNlLCBnZXRJbml0aWFsU3RhdGUpO1xuICAgICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxNSkgOiBcInNlbGVjdFNsaWNlIHJldHVybmVkIHVuZGVmaW5lZCBmb3IgYW4gdW5pbmplY3RlZCBzbGljZSByZWR1Y2VyXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2xpY2VTdGF0ZTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGdldFNlbGVjdG9ycyhzZWxlY3RTdGF0ZSA9IHNlbGVjdFNlbGYpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0b3JDYWNoZSA9IGdldE9ySW5zZXJ0Q29tcHV0ZWQoaW5qZWN0ZWRTZWxlY3RvckNhY2hlLCBpbmplY3RlZCwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCkpO1xuICAgICAgICByZXR1cm4gZ2V0T3JJbnNlcnRDb21wdXRlZChzZWxlY3RvckNhY2hlLCBzZWxlY3RTdGF0ZSwgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG1hcCA9IHt9O1xuICAgICAgICAgIGZvciAoY29uc3QgW25hbWUyLCBzZWxlY3Rvcl0gb2YgT2JqZWN0LmVudHJpZXMob3B0aW9ucy5zZWxlY3RvcnMgPz8ge30pKSB7XG4gICAgICAgICAgICBtYXBbbmFtZTJdID0gd3JhcFNlbGVjdG9yKHNlbGVjdG9yLCBzZWxlY3RTdGF0ZSwgKCkgPT4gZ2V0T3JJbnNlcnRDb21wdXRlZChpbmplY3RlZFN0YXRlQ2FjaGUsIHNlbGVjdFN0YXRlLCBnZXRJbml0aWFsU3RhdGUpLCBpbmplY3RlZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBtYXA7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVkdWNlclBhdGg6IHJlZHVjZXJQYXRoMixcbiAgICAgICAgZ2V0U2VsZWN0b3JzLFxuICAgICAgICBnZXQgc2VsZWN0b3JzKCkge1xuICAgICAgICAgIHJldHVybiBnZXRTZWxlY3RvcnMoc2VsZWN0U2xpY2UpO1xuICAgICAgICB9LFxuICAgICAgICBzZWxlY3RTbGljZVxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3Qgc2xpY2UgPSB7XG4gICAgICBuYW1lLFxuICAgICAgcmVkdWNlcixcbiAgICAgIGFjdGlvbnM6IGNvbnRleHQuYWN0aW9uQ3JlYXRvcnMsXG4gICAgICBjYXNlUmVkdWNlcnM6IGNvbnRleHQuc2xpY2VDYXNlUmVkdWNlcnNCeU5hbWUsXG4gICAgICBnZXRJbml0aWFsU3RhdGUsXG4gICAgICAuLi5tYWtlU2VsZWN0b3JQcm9wcyhyZWR1Y2VyUGF0aCksXG4gICAgICBpbmplY3RJbnRvKGluamVjdGFibGUsIHtcbiAgICAgICAgcmVkdWNlclBhdGg6IHBhdGhPcHQsXG4gICAgICAgIC4uLmNvbmZpZ1xuICAgICAgfSA9IHt9KSB7XG4gICAgICAgIGNvbnN0IG5ld1JlZHVjZXJQYXRoID0gcGF0aE9wdCA/PyByZWR1Y2VyUGF0aDtcbiAgICAgICAgaW5qZWN0YWJsZS5pbmplY3Qoe1xuICAgICAgICAgIHJlZHVjZXJQYXRoOiBuZXdSZWR1Y2VyUGF0aCxcbiAgICAgICAgICByZWR1Y2VyXG4gICAgICAgIH0sIGNvbmZpZyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uc2xpY2UsXG4gICAgICAgICAgLi4ubWFrZVNlbGVjdG9yUHJvcHMobmV3UmVkdWNlclBhdGgsIHRydWUpXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gc2xpY2U7XG4gIH07XG59XG5mdW5jdGlvbiB3cmFwU2VsZWN0b3Ioc2VsZWN0b3IsIHNlbGVjdFN0YXRlLCBnZXRJbml0aWFsU3RhdGUsIGluamVjdGVkKSB7XG4gIGZ1bmN0aW9uIHdyYXBwZXIocm9vdFN0YXRlLCAuLi5hcmdzKSB7XG4gICAgbGV0IHNsaWNlU3RhdGUgPSBzZWxlY3RTdGF0ZShyb290U3RhdGUpO1xuICAgIGlmICh0eXBlb2Ygc2xpY2VTdGF0ZSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgaWYgKGluamVjdGVkKSB7XG4gICAgICAgIHNsaWNlU3RhdGUgPSBnZXRJbml0aWFsU3RhdGUoKTtcbiAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDE2KSA6IFwic2VsZWN0U3RhdGUgcmV0dXJuZWQgdW5kZWZpbmVkIGZvciBhbiB1bmluamVjdGVkIHNsaWNlIHJlZHVjZXJcIik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzZWxlY3RvcihzbGljZVN0YXRlLCAuLi5hcmdzKTtcbiAgfVxuICB3cmFwcGVyLnVud3JhcHBlZCA9IHNlbGVjdG9yO1xuICByZXR1cm4gd3JhcHBlcjtcbn1cbnZhciBjcmVhdGVTbGljZSA9IC8qIEBfX1BVUkVfXyAqLyBidWlsZENyZWF0ZVNsaWNlKCk7XG5mdW5jdGlvbiBidWlsZFJlZHVjZXJDcmVhdG9ycygpIHtcbiAgZnVuY3Rpb24gYXN5bmNUaHVuayhwYXlsb2FkQ3JlYXRvciwgY29uZmlnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIF9yZWR1Y2VyRGVmaW5pdGlvblR5cGU6IFwiYXN5bmNUaHVua1wiIC8qIGFzeW5jVGh1bmsgKi8sXG4gICAgICBwYXlsb2FkQ3JlYXRvcixcbiAgICAgIC4uLmNvbmZpZ1xuICAgIH07XG4gIH1cbiAgYXN5bmNUaHVuay53aXRoVHlwZXMgPSAoKSA9PiBhc3luY1RodW5rO1xuICByZXR1cm4ge1xuICAgIHJlZHVjZXIoY2FzZVJlZHVjZXIpIHtcbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgLy8gaGFjayBzbyB0aGUgd3JhcHBpbmcgZnVuY3Rpb24gaGFzIHRoZSBzYW1lIG5hbWUgYXMgdGhlIG9yaWdpbmFsXG4gICAgICAgIC8vIHdlIG5lZWQgdG8gY3JlYXRlIGEgd3JhcHBlciBzbyB0aGUgYHJlZHVjZXJEZWZpbml0aW9uVHlwZWAgaXMgbm90IGFzc2lnbmVkIHRvIHRoZSBvcmlnaW5hbFxuICAgICAgICBbY2FzZVJlZHVjZXIubmFtZV0oLi4uYXJncykge1xuICAgICAgICAgIHJldHVybiBjYXNlUmVkdWNlciguLi5hcmdzKTtcbiAgICAgICAgfVxuICAgICAgfVtjYXNlUmVkdWNlci5uYW1lXSwge1xuICAgICAgICBfcmVkdWNlckRlZmluaXRpb25UeXBlOiBcInJlZHVjZXJcIiAvKiByZWR1Y2VyICovXG4gICAgICB9KTtcbiAgICB9LFxuICAgIHByZXBhcmVkUmVkdWNlcihwcmVwYXJlLCByZWR1Y2VyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBfcmVkdWNlckRlZmluaXRpb25UeXBlOiBcInJlZHVjZXJXaXRoUHJlcGFyZVwiIC8qIHJlZHVjZXJXaXRoUHJlcGFyZSAqLyxcbiAgICAgICAgcHJlcGFyZSxcbiAgICAgICAgcmVkdWNlclxuICAgICAgfTtcbiAgICB9LFxuICAgIGFzeW5jVGh1bmtcbiAgfTtcbn1cbmZ1bmN0aW9uIGhhbmRsZU5vcm1hbFJlZHVjZXJEZWZpbml0aW9uKHtcbiAgdHlwZSxcbiAgcmVkdWNlck5hbWUsXG4gIGNyZWF0ZU5vdGF0aW9uXG59LCBtYXliZVJlZHVjZXJXaXRoUHJlcGFyZSwgY29udGV4dCkge1xuICBsZXQgY2FzZVJlZHVjZXI7XG4gIGxldCBwcmVwYXJlQ2FsbGJhY2s7XG4gIGlmIChcInJlZHVjZXJcIiBpbiBtYXliZVJlZHVjZXJXaXRoUHJlcGFyZSkge1xuICAgIGlmIChjcmVhdGVOb3RhdGlvbiAmJiAhaXNDYXNlUmVkdWNlcldpdGhQcmVwYXJlRGVmaW5pdGlvbihtYXliZVJlZHVjZXJXaXRoUHJlcGFyZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDE3KSA6IFwiUGxlYXNlIHVzZSB0aGUgYGNyZWF0ZS5wcmVwYXJlZFJlZHVjZXJgIG5vdGF0aW9uIGZvciBwcmVwYXJlZCBhY3Rpb24gY3JlYXRvcnMgd2l0aCB0aGUgYGNyZWF0ZWAgbm90YXRpb24uXCIpO1xuICAgIH1cbiAgICBjYXNlUmVkdWNlciA9IG1heWJlUmVkdWNlcldpdGhQcmVwYXJlLnJlZHVjZXI7XG4gICAgcHJlcGFyZUNhbGxiYWNrID0gbWF5YmVSZWR1Y2VyV2l0aFByZXBhcmUucHJlcGFyZTtcbiAgfSBlbHNlIHtcbiAgICBjYXNlUmVkdWNlciA9IG1heWJlUmVkdWNlcldpdGhQcmVwYXJlO1xuICB9XG4gIGNvbnRleHQuYWRkQ2FzZSh0eXBlLCBjYXNlUmVkdWNlcikuZXhwb3NlQ2FzZVJlZHVjZXIocmVkdWNlck5hbWUsIGNhc2VSZWR1Y2VyKS5leHBvc2VBY3Rpb24ocmVkdWNlck5hbWUsIHByZXBhcmVDYWxsYmFjayA/IGNyZWF0ZUFjdGlvbih0eXBlLCBwcmVwYXJlQ2FsbGJhY2spIDogY3JlYXRlQWN0aW9uKHR5cGUpKTtcbn1cbmZ1bmN0aW9uIGlzQXN5bmNUaHVua1NsaWNlUmVkdWNlckRlZmluaXRpb24ocmVkdWNlckRlZmluaXRpb24pIHtcbiAgcmV0dXJuIHJlZHVjZXJEZWZpbml0aW9uLl9yZWR1Y2VyRGVmaW5pdGlvblR5cGUgPT09IFwiYXN5bmNUaHVua1wiIC8qIGFzeW5jVGh1bmsgKi87XG59XG5mdW5jdGlvbiBpc0Nhc2VSZWR1Y2VyV2l0aFByZXBhcmVEZWZpbml0aW9uKHJlZHVjZXJEZWZpbml0aW9uKSB7XG4gIHJldHVybiByZWR1Y2VyRGVmaW5pdGlvbi5fcmVkdWNlckRlZmluaXRpb25UeXBlID09PSBcInJlZHVjZXJXaXRoUHJlcGFyZVwiIC8qIHJlZHVjZXJXaXRoUHJlcGFyZSAqLztcbn1cbmZ1bmN0aW9uIGhhbmRsZVRodW5rQ2FzZVJlZHVjZXJEZWZpbml0aW9uKHtcbiAgdHlwZSxcbiAgcmVkdWNlck5hbWVcbn0sIHJlZHVjZXJEZWZpbml0aW9uLCBjb250ZXh0LCBjQVQpIHtcbiAgaWYgKCFjQVQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxOCkgOiBcIkNhbm5vdCB1c2UgYGNyZWF0ZS5hc3luY1RodW5rYCBpbiB0aGUgYnVpbHQtaW4gYGNyZWF0ZVNsaWNlYC4gVXNlIGBidWlsZENyZWF0ZVNsaWNlKHsgY3JlYXRvcnM6IHsgYXN5bmNUaHVuazogYXN5bmNUaHVua0NyZWF0b3IgfSB9KWAgdG8gY3JlYXRlIGEgY3VzdG9taXNlZCB2ZXJzaW9uIG9mIGBjcmVhdGVTbGljZWAuXCIpO1xuICB9XG4gIGNvbnN0IHtcbiAgICBwYXlsb2FkQ3JlYXRvcixcbiAgICBmdWxmaWxsZWQsXG4gICAgcGVuZGluZyxcbiAgICByZWplY3RlZCxcbiAgICBzZXR0bGVkLFxuICAgIG9wdGlvbnNcbiAgfSA9IHJlZHVjZXJEZWZpbml0aW9uO1xuICBjb25zdCB0aHVuayA9IGNBVCh0eXBlLCBwYXlsb2FkQ3JlYXRvciwgb3B0aW9ucyk7XG4gIGNvbnRleHQuZXhwb3NlQWN0aW9uKHJlZHVjZXJOYW1lLCB0aHVuayk7XG4gIGlmIChmdWxmaWxsZWQpIHtcbiAgICBjb250ZXh0LmFkZENhc2UodGh1bmsuZnVsZmlsbGVkLCBmdWxmaWxsZWQpO1xuICB9XG4gIGlmIChwZW5kaW5nKSB7XG4gICAgY29udGV4dC5hZGRDYXNlKHRodW5rLnBlbmRpbmcsIHBlbmRpbmcpO1xuICB9XG4gIGlmIChyZWplY3RlZCkge1xuICAgIGNvbnRleHQuYWRkQ2FzZSh0aHVuay5yZWplY3RlZCwgcmVqZWN0ZWQpO1xuICB9XG4gIGlmIChzZXR0bGVkKSB7XG4gICAgY29udGV4dC5hZGRNYXRjaGVyKHRodW5rLnNldHRsZWQsIHNldHRsZWQpO1xuICB9XG4gIGNvbnRleHQuZXhwb3NlQ2FzZVJlZHVjZXIocmVkdWNlck5hbWUsIHtcbiAgICBmdWxmaWxsZWQ6IGZ1bGZpbGxlZCB8fCBub29wLFxuICAgIHBlbmRpbmc6IHBlbmRpbmcgfHwgbm9vcCxcbiAgICByZWplY3RlZDogcmVqZWN0ZWQgfHwgbm9vcCxcbiAgICBzZXR0bGVkOiBzZXR0bGVkIHx8IG5vb3BcbiAgfSk7XG59XG5mdW5jdGlvbiBub29wKCkge1xufVxuXG4vLyBzcmMvZW50aXRpZXMvZW50aXR5X3N0YXRlLnRzXG5mdW5jdGlvbiBnZXRJbml0aWFsRW50aXR5U3RhdGUoKSB7XG4gIHJldHVybiB7XG4gICAgaWRzOiBbXSxcbiAgICBlbnRpdGllczoge31cbiAgfTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUluaXRpYWxTdGF0ZUZhY3Rvcnkoc3RhdGVBZGFwdGVyKSB7XG4gIGZ1bmN0aW9uIGdldEluaXRpYWxTdGF0ZShhZGRpdGlvbmFsU3RhdGUgPSB7fSwgZW50aXRpZXMpIHtcbiAgICBjb25zdCBzdGF0ZSA9IE9iamVjdC5hc3NpZ24oZ2V0SW5pdGlhbEVudGl0eVN0YXRlKCksIGFkZGl0aW9uYWxTdGF0ZSk7XG4gICAgcmV0dXJuIGVudGl0aWVzID8gc3RhdGVBZGFwdGVyLnNldEFsbChzdGF0ZSwgZW50aXRpZXMpIDogc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBnZXRJbml0aWFsU3RhdGVcbiAgfTtcbn1cblxuLy8gc3JjL2VudGl0aWVzL3N0YXRlX3NlbGVjdG9ycy50c1xuZnVuY3Rpb24gY3JlYXRlU2VsZWN0b3JzRmFjdG9yeSgpIHtcbiAgZnVuY3Rpb24gZ2V0U2VsZWN0b3JzKHNlbGVjdFN0YXRlLCBvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCB7XG4gICAgICBjcmVhdGVTZWxlY3RvcjogY3JlYXRlU2VsZWN0b3IyID0gY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3JcbiAgICB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBzZWxlY3RJZHMgPSAoc3RhdGUpID0+IHN0YXRlLmlkcztcbiAgICBjb25zdCBzZWxlY3RFbnRpdGllcyA9IChzdGF0ZSkgPT4gc3RhdGUuZW50aXRpZXM7XG4gICAgY29uc3Qgc2VsZWN0QWxsID0gY3JlYXRlU2VsZWN0b3IyKHNlbGVjdElkcywgc2VsZWN0RW50aXRpZXMsIChpZHMsIGVudGl0aWVzKSA9PiBpZHMubWFwKChpZCkgPT4gZW50aXRpZXNbaWRdKSk7XG4gICAgY29uc3Qgc2VsZWN0SWQgPSAoXywgaWQpID0+IGlkO1xuICAgIGNvbnN0IHNlbGVjdEJ5SWQgPSAoZW50aXRpZXMsIGlkKSA9PiBlbnRpdGllc1tpZF07XG4gICAgY29uc3Qgc2VsZWN0VG90YWwgPSBjcmVhdGVTZWxlY3RvcjIoc2VsZWN0SWRzLCAoaWRzKSA9PiBpZHMubGVuZ3RoKTtcbiAgICBpZiAoIXNlbGVjdFN0YXRlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZWxlY3RJZHMsXG4gICAgICAgIHNlbGVjdEVudGl0aWVzLFxuICAgICAgICBzZWxlY3RBbGwsXG4gICAgICAgIHNlbGVjdFRvdGFsLFxuICAgICAgICBzZWxlY3RCeUlkOiBjcmVhdGVTZWxlY3RvcjIoc2VsZWN0RW50aXRpZXMsIHNlbGVjdElkLCBzZWxlY3RCeUlkKVxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3Qgc2VsZWN0R2xvYmFsaXplZEVudGl0aWVzID0gY3JlYXRlU2VsZWN0b3IyKHNlbGVjdFN0YXRlLCBzZWxlY3RFbnRpdGllcyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNlbGVjdElkczogY3JlYXRlU2VsZWN0b3IyKHNlbGVjdFN0YXRlLCBzZWxlY3RJZHMpLFxuICAgICAgc2VsZWN0RW50aXRpZXM6IHNlbGVjdEdsb2JhbGl6ZWRFbnRpdGllcyxcbiAgICAgIHNlbGVjdEFsbDogY3JlYXRlU2VsZWN0b3IyKHNlbGVjdFN0YXRlLCBzZWxlY3RBbGwpLFxuICAgICAgc2VsZWN0VG90YWw6IGNyZWF0ZVNlbGVjdG9yMihzZWxlY3RTdGF0ZSwgc2VsZWN0VG90YWwpLFxuICAgICAgc2VsZWN0QnlJZDogY3JlYXRlU2VsZWN0b3IyKHNlbGVjdEdsb2JhbGl6ZWRFbnRpdGllcywgc2VsZWN0SWQsIHNlbGVjdEJ5SWQpXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGdldFNlbGVjdG9yc1xuICB9O1xufVxuXG4vLyBzcmMvZW50aXRpZXMvc3RhdGVfYWRhcHRlci50c1xuaW1wb3J0IHsgcHJvZHVjZSBhcyBjcmVhdGVOZXh0U3RhdGUzLCBpc0RyYWZ0IGFzIGlzRHJhZnQzIH0gZnJvbSBcImltbWVyXCI7XG52YXIgaXNEcmFmdFR5cGVkID0gaXNEcmFmdDM7XG5mdW5jdGlvbiBjcmVhdGVTaW5nbGVBcmd1bWVudFN0YXRlT3BlcmF0b3IobXV0YXRvcikge1xuICBjb25zdCBvcGVyYXRvciA9IGNyZWF0ZVN0YXRlT3BlcmF0b3IoKF8sIHN0YXRlKSA9PiBtdXRhdG9yKHN0YXRlKSk7XG4gIHJldHVybiBmdW5jdGlvbiBvcGVyYXRpb24oc3RhdGUpIHtcbiAgICByZXR1cm4gb3BlcmF0b3Ioc3RhdGUsIHZvaWQgMCk7XG4gIH07XG59XG5mdW5jdGlvbiBjcmVhdGVTdGF0ZU9wZXJhdG9yKG11dGF0b3IpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIG9wZXJhdGlvbihzdGF0ZSwgYXJnKSB7XG4gICAgZnVuY3Rpb24gaXNQYXlsb2FkQWN0aW9uQXJndW1lbnQoYXJnMikge1xuICAgICAgcmV0dXJuIGlzRlNBKGFyZzIpO1xuICAgIH1cbiAgICBjb25zdCBydW5NdXRhdG9yID0gKGRyYWZ0KSA9PiB7XG4gICAgICBpZiAoaXNQYXlsb2FkQWN0aW9uQXJndW1lbnQoYXJnKSkge1xuICAgICAgICBtdXRhdG9yKGFyZy5wYXlsb2FkLCBkcmFmdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtdXRhdG9yKGFyZywgZHJhZnQpO1xuICAgICAgfVxuICAgIH07XG4gICAgaWYgKGlzRHJhZnRUeXBlZChzdGF0ZSkpIHtcbiAgICAgIHJ1bk11dGF0b3Ioc3RhdGUpO1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlTmV4dFN0YXRlMyhzdGF0ZSwgcnVuTXV0YXRvcik7XG4gIH07XG59XG5cbi8vIHNyYy9lbnRpdGllcy91dGlscy50c1xuaW1wb3J0IHsgY3VycmVudCBhcyBjdXJyZW50MiwgaXNEcmFmdCBhcyBpc0RyYWZ0NCB9IGZyb20gXCJpbW1lclwiO1xuZnVuY3Rpb24gc2VsZWN0SWRWYWx1ZShlbnRpdHksIHNlbGVjdElkKSB7XG4gIGNvbnN0IGtleSA9IHNlbGVjdElkKGVudGl0eSk7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgJiYga2V5ID09PSB2b2lkIDApIHtcbiAgICBjb25zb2xlLndhcm4oXCJUaGUgZW50aXR5IHBhc3NlZCB0byB0aGUgYHNlbGVjdElkYCBpbXBsZW1lbnRhdGlvbiByZXR1cm5lZCB1bmRlZmluZWQuXCIsIFwiWW91IHNob3VsZCBwcm9iYWJseSBwcm92aWRlIHlvdXIgb3duIGBzZWxlY3RJZGAgaW1wbGVtZW50YXRpb24uXCIsIFwiVGhlIGVudGl0eSB0aGF0IHdhcyBwYXNzZWQ6XCIsIGVudGl0eSwgXCJUaGUgYHNlbGVjdElkYCBpbXBsZW1lbnRhdGlvbjpcIiwgc2VsZWN0SWQudG9TdHJpbmcoKSk7XG4gIH1cbiAgcmV0dXJuIGtleTtcbn1cbmZ1bmN0aW9uIGVuc3VyZUVudGl0aWVzQXJyYXkoZW50aXRpZXMpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGVudGl0aWVzKSkge1xuICAgIGVudGl0aWVzID0gT2JqZWN0LnZhbHVlcyhlbnRpdGllcyk7XG4gIH1cbiAgcmV0dXJuIGVudGl0aWVzO1xufVxuZnVuY3Rpb24gZ2V0Q3VycmVudCh2YWx1ZSkge1xuICByZXR1cm4gaXNEcmFmdDQodmFsdWUpID8gY3VycmVudDIodmFsdWUpIDogdmFsdWU7XG59XG5mdW5jdGlvbiBzcGxpdEFkZGVkVXBkYXRlZEVudGl0aWVzKG5ld0VudGl0aWVzLCBzZWxlY3RJZCwgc3RhdGUpIHtcbiAgbmV3RW50aXRpZXMgPSBlbnN1cmVFbnRpdGllc0FycmF5KG5ld0VudGl0aWVzKTtcbiAgY29uc3QgZXhpc3RpbmdJZHNBcnJheSA9IGdldEN1cnJlbnQoc3RhdGUuaWRzKTtcbiAgY29uc3QgZXhpc3RpbmdJZHMgPSBuZXcgU2V0KGV4aXN0aW5nSWRzQXJyYXkpO1xuICBjb25zdCBhZGRlZCA9IFtdO1xuICBjb25zdCBhZGRlZElkcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KFtdKTtcbiAgY29uc3QgdXBkYXRlZCA9IFtdO1xuICBmb3IgKGNvbnN0IGVudGl0eSBvZiBuZXdFbnRpdGllcykge1xuICAgIGNvbnN0IGlkID0gc2VsZWN0SWRWYWx1ZShlbnRpdHksIHNlbGVjdElkKTtcbiAgICBpZiAoZXhpc3RpbmdJZHMuaGFzKGlkKSB8fCBhZGRlZElkcy5oYXMoaWQpKSB7XG4gICAgICB1cGRhdGVkLnB1c2goe1xuICAgICAgICBpZCxcbiAgICAgICAgY2hhbmdlczogZW50aXR5XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgYWRkZWRJZHMuYWRkKGlkKTtcbiAgICAgIGFkZGVkLnB1c2goZW50aXR5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFthZGRlZCwgdXBkYXRlZCwgZXhpc3RpbmdJZHNBcnJheV07XG59XG5cbi8vIHNyYy9lbnRpdGllcy91bnNvcnRlZF9zdGF0ZV9hZGFwdGVyLnRzXG5mdW5jdGlvbiBjcmVhdGVVbnNvcnRlZFN0YXRlQWRhcHRlcihzZWxlY3RJZCkge1xuICBmdW5jdGlvbiBhZGRPbmVNdXRhYmx5KGVudGl0eSwgc3RhdGUpIHtcbiAgICBjb25zdCBrZXkgPSBzZWxlY3RJZFZhbHVlKGVudGl0eSwgc2VsZWN0SWQpO1xuICAgIGlmIChrZXkgaW4gc3RhdGUuZW50aXRpZXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3RhdGUuaWRzLnB1c2goa2V5KTtcbiAgICBzdGF0ZS5lbnRpdGllc1trZXldID0gZW50aXR5O1xuICB9XG4gIGZ1bmN0aW9uIGFkZE1hbnlNdXRhYmx5KG5ld0VudGl0aWVzLCBzdGF0ZSkge1xuICAgIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcyk7XG4gICAgZm9yIChjb25zdCBlbnRpdHkgb2YgbmV3RW50aXRpZXMpIHtcbiAgICAgIGFkZE9uZU11dGFibHkoZW50aXR5LCBzdGF0ZSk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIHNldE9uZU11dGFibHkoZW50aXR5LCBzdGF0ZSkge1xuICAgIGNvbnN0IGtleSA9IHNlbGVjdElkVmFsdWUoZW50aXR5LCBzZWxlY3RJZCk7XG4gICAgaWYgKCEoa2V5IGluIHN0YXRlLmVudGl0aWVzKSkge1xuICAgICAgc3RhdGUuaWRzLnB1c2goa2V5KTtcbiAgICB9XG4gICAgO1xuICAgIHN0YXRlLmVudGl0aWVzW2tleV0gPSBlbnRpdHk7XG4gIH1cbiAgZnVuY3Rpb24gc2V0TWFueU11dGFibHkobmV3RW50aXRpZXMsIHN0YXRlKSB7XG4gICAgbmV3RW50aXRpZXMgPSBlbnN1cmVFbnRpdGllc0FycmF5KG5ld0VudGl0aWVzKTtcbiAgICBmb3IgKGNvbnN0IGVudGl0eSBvZiBuZXdFbnRpdGllcykge1xuICAgICAgc2V0T25lTXV0YWJseShlbnRpdHksIHN0YXRlKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gc2V0QWxsTXV0YWJseShuZXdFbnRpdGllcywgc3RhdGUpIHtcbiAgICBuZXdFbnRpdGllcyA9IGVuc3VyZUVudGl0aWVzQXJyYXkobmV3RW50aXRpZXMpO1xuICAgIHN0YXRlLmlkcyA9IFtdO1xuICAgIHN0YXRlLmVudGl0aWVzID0ge307XG4gICAgYWRkTWFueU11dGFibHkobmV3RW50aXRpZXMsIHN0YXRlKTtcbiAgfVxuICBmdW5jdGlvbiByZW1vdmVPbmVNdXRhYmx5KGtleSwgc3RhdGUpIHtcbiAgICByZXR1cm4gcmVtb3ZlTWFueU11dGFibHkoW2tleV0sIHN0YXRlKTtcbiAgfVxuICBmdW5jdGlvbiByZW1vdmVNYW55TXV0YWJseShrZXlzLCBzdGF0ZSkge1xuICAgIGxldCBkaWRNdXRhdGUgPSBmYWxzZTtcbiAgICBrZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgaWYgKGtleSBpbiBzdGF0ZS5lbnRpdGllcykge1xuICAgICAgICBkZWxldGUgc3RhdGUuZW50aXRpZXNba2V5XTtcbiAgICAgICAgZGlkTXV0YXRlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoZGlkTXV0YXRlKSB7XG4gICAgICBzdGF0ZS5pZHMgPSBzdGF0ZS5pZHMuZmlsdGVyKChpZCkgPT4gaWQgaW4gc3RhdGUuZW50aXRpZXMpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiByZW1vdmVBbGxNdXRhYmx5KHN0YXRlKSB7XG4gICAgT2JqZWN0LmFzc2lnbihzdGF0ZSwge1xuICAgICAgaWRzOiBbXSxcbiAgICAgIGVudGl0aWVzOiB7fVxuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIHRha2VOZXdLZXkoa2V5cywgdXBkYXRlLCBzdGF0ZSkge1xuICAgIGNvbnN0IG9yaWdpbmFsMyA9IHN0YXRlLmVudGl0aWVzW3VwZGF0ZS5pZF07XG4gICAgaWYgKG9yaWdpbmFsMyA9PT0gdm9pZCAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHVwZGF0ZWQgPSBPYmplY3QuYXNzaWduKHt9LCBvcmlnaW5hbDMsIHVwZGF0ZS5jaGFuZ2VzKTtcbiAgICBjb25zdCBuZXdLZXkgPSBzZWxlY3RJZFZhbHVlKHVwZGF0ZWQsIHNlbGVjdElkKTtcbiAgICBjb25zdCBoYXNOZXdLZXkgPSBuZXdLZXkgIT09IHVwZGF0ZS5pZDtcbiAgICBpZiAoaGFzTmV3S2V5KSB7XG4gICAgICBrZXlzW3VwZGF0ZS5pZF0gPSBuZXdLZXk7XG4gICAgICBkZWxldGUgc3RhdGUuZW50aXRpZXNbdXBkYXRlLmlkXTtcbiAgICB9XG4gICAgO1xuICAgIHN0YXRlLmVudGl0aWVzW25ld0tleV0gPSB1cGRhdGVkO1xuICAgIHJldHVybiBoYXNOZXdLZXk7XG4gIH1cbiAgZnVuY3Rpb24gdXBkYXRlT25lTXV0YWJseSh1cGRhdGUsIHN0YXRlKSB7XG4gICAgcmV0dXJuIHVwZGF0ZU1hbnlNdXRhYmx5KFt1cGRhdGVdLCBzdGF0ZSk7XG4gIH1cbiAgZnVuY3Rpb24gdXBkYXRlTWFueU11dGFibHkodXBkYXRlcywgc3RhdGUpIHtcbiAgICBjb25zdCBuZXdLZXlzID0ge307XG4gICAgY29uc3QgdXBkYXRlc1BlckVudGl0eSA9IHt9O1xuICAgIHVwZGF0ZXMuZm9yRWFjaCgodXBkYXRlKSA9PiB7XG4gICAgICBpZiAodXBkYXRlLmlkIGluIHN0YXRlLmVudGl0aWVzKSB7XG4gICAgICAgIHVwZGF0ZXNQZXJFbnRpdHlbdXBkYXRlLmlkXSA9IHtcbiAgICAgICAgICBpZDogdXBkYXRlLmlkLFxuICAgICAgICAgIC8vIFNwcmVhZHMgaWdub3JlIGZhbHN5IHZhbHVlcywgc28gdGhpcyB3b3JrcyBldmVuIGlmIHRoZXJlIGlzbid0XG4gICAgICAgICAgLy8gYW4gZXhpc3RpbmcgdXBkYXRlIGFscmVhZHkgYXQgdGhpcyBrZXlcbiAgICAgICAgICBjaGFuZ2VzOiB7XG4gICAgICAgICAgICAuLi51cGRhdGVzUGVyRW50aXR5W3VwZGF0ZS5pZF0/LmNoYW5nZXMsXG4gICAgICAgICAgICAuLi51cGRhdGUuY2hhbmdlc1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB1cGRhdGVzID0gT2JqZWN0LnZhbHVlcyh1cGRhdGVzUGVyRW50aXR5KTtcbiAgICBjb25zdCBkaWRNdXRhdGVFbnRpdGllcyA9IHVwZGF0ZXMubGVuZ3RoID4gMDtcbiAgICBpZiAoZGlkTXV0YXRlRW50aXRpZXMpIHtcbiAgICAgIGNvbnN0IGRpZE11dGF0ZUlkcyA9IHVwZGF0ZXMuZmlsdGVyKCh1cGRhdGUpID0+IHRha2VOZXdLZXkobmV3S2V5cywgdXBkYXRlLCBzdGF0ZSkpLmxlbmd0aCA+IDA7XG4gICAgICBpZiAoZGlkTXV0YXRlSWRzKSB7XG4gICAgICAgIHN0YXRlLmlkcyA9IE9iamVjdC52YWx1ZXMoc3RhdGUuZW50aXRpZXMpLm1hcCgoZSkgPT4gc2VsZWN0SWRWYWx1ZShlLCBzZWxlY3RJZCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBmdW5jdGlvbiB1cHNlcnRPbmVNdXRhYmx5KGVudGl0eSwgc3RhdGUpIHtcbiAgICByZXR1cm4gdXBzZXJ0TWFueU11dGFibHkoW2VudGl0eV0sIHN0YXRlKTtcbiAgfVxuICBmdW5jdGlvbiB1cHNlcnRNYW55TXV0YWJseShuZXdFbnRpdGllcywgc3RhdGUpIHtcbiAgICBjb25zdCBbYWRkZWQsIHVwZGF0ZWRdID0gc3BsaXRBZGRlZFVwZGF0ZWRFbnRpdGllcyhuZXdFbnRpdGllcywgc2VsZWN0SWQsIHN0YXRlKTtcbiAgICBhZGRNYW55TXV0YWJseShhZGRlZCwgc3RhdGUpO1xuICAgIHVwZGF0ZU1hbnlNdXRhYmx5KHVwZGF0ZWQsIHN0YXRlKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHJlbW92ZUFsbDogY3JlYXRlU2luZ2xlQXJndW1lbnRTdGF0ZU9wZXJhdG9yKHJlbW92ZUFsbE11dGFibHkpLFxuICAgIGFkZE9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcihhZGRPbmVNdXRhYmx5KSxcbiAgICBhZGRNYW55OiBjcmVhdGVTdGF0ZU9wZXJhdG9yKGFkZE1hbnlNdXRhYmx5KSxcbiAgICBzZXRPbmU6IGNyZWF0ZVN0YXRlT3BlcmF0b3Ioc2V0T25lTXV0YWJseSksXG4gICAgc2V0TWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcihzZXRNYW55TXV0YWJseSksXG4gICAgc2V0QWxsOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHNldEFsbE11dGFibHkpLFxuICAgIHVwZGF0ZU9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcih1cGRhdGVPbmVNdXRhYmx5KSxcbiAgICB1cGRhdGVNYW55OiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHVwZGF0ZU1hbnlNdXRhYmx5KSxcbiAgICB1cHNlcnRPbmU6IGNyZWF0ZVN0YXRlT3BlcmF0b3IodXBzZXJ0T25lTXV0YWJseSksXG4gICAgdXBzZXJ0TWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcih1cHNlcnRNYW55TXV0YWJseSksXG4gICAgcmVtb3ZlT25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHJlbW92ZU9uZU11dGFibHkpLFxuICAgIHJlbW92ZU1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3IocmVtb3ZlTWFueU11dGFibHkpXG4gIH07XG59XG5cbi8vIHNyYy9lbnRpdGllcy9zb3J0ZWRfc3RhdGVfYWRhcHRlci50c1xuZnVuY3Rpb24gZmluZEluc2VydEluZGV4KHNvcnRlZEl0ZW1zLCBpdGVtLCBjb21wYXJpc29uRnVuY3Rpb24pIHtcbiAgbGV0IGxvd0luZGV4ID0gMDtcbiAgbGV0IGhpZ2hJbmRleCA9IHNvcnRlZEl0ZW1zLmxlbmd0aDtcbiAgd2hpbGUgKGxvd0luZGV4IDwgaGlnaEluZGV4KSB7XG4gICAgbGV0IG1pZGRsZUluZGV4ID0gbG93SW5kZXggKyBoaWdoSW5kZXggPj4+IDE7XG4gICAgY29uc3QgY3VycmVudEl0ZW0gPSBzb3J0ZWRJdGVtc1ttaWRkbGVJbmRleF07XG4gICAgY29uc3QgcmVzID0gY29tcGFyaXNvbkZ1bmN0aW9uKGl0ZW0sIGN1cnJlbnRJdGVtKTtcbiAgICBpZiAocmVzID49IDApIHtcbiAgICAgIGxvd0luZGV4ID0gbWlkZGxlSW5kZXggKyAxO1xuICAgIH0gZWxzZSB7XG4gICAgICBoaWdoSW5kZXggPSBtaWRkbGVJbmRleDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGxvd0luZGV4O1xufVxuZnVuY3Rpb24gaW5zZXJ0KHNvcnRlZEl0ZW1zLCBpdGVtLCBjb21wYXJpc29uRnVuY3Rpb24pIHtcbiAgY29uc3QgaW5zZXJ0QXRJbmRleCA9IGZpbmRJbnNlcnRJbmRleChzb3J0ZWRJdGVtcywgaXRlbSwgY29tcGFyaXNvbkZ1bmN0aW9uKTtcbiAgc29ydGVkSXRlbXMuc3BsaWNlKGluc2VydEF0SW5kZXgsIDAsIGl0ZW0pO1xuICByZXR1cm4gc29ydGVkSXRlbXM7XG59XG5mdW5jdGlvbiBjcmVhdGVTb3J0ZWRTdGF0ZUFkYXB0ZXIoc2VsZWN0SWQsIGNvbXBhcmVyKSB7XG4gIGNvbnN0IHtcbiAgICByZW1vdmVPbmUsXG4gICAgcmVtb3ZlTWFueSxcbiAgICByZW1vdmVBbGxcbiAgfSA9IGNyZWF0ZVVuc29ydGVkU3RhdGVBZGFwdGVyKHNlbGVjdElkKTtcbiAgZnVuY3Rpb24gYWRkT25lTXV0YWJseShlbnRpdHksIHN0YXRlKSB7XG4gICAgcmV0dXJuIGFkZE1hbnlNdXRhYmx5KFtlbnRpdHldLCBzdGF0ZSk7XG4gIH1cbiAgZnVuY3Rpb24gYWRkTWFueU11dGFibHkobmV3RW50aXRpZXMsIHN0YXRlLCBleGlzdGluZ0lkcykge1xuICAgIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcyk7XG4gICAgY29uc3QgZXhpc3RpbmdLZXlzID0gbmV3IFNldChleGlzdGluZ0lkcyA/PyBnZXRDdXJyZW50KHN0YXRlLmlkcykpO1xuICAgIGNvbnN0IG1vZGVscyA9IG5ld0VudGl0aWVzLmZpbHRlcigobW9kZWwpID0+ICFleGlzdGluZ0tleXMuaGFzKHNlbGVjdElkVmFsdWUobW9kZWwsIHNlbGVjdElkKSkpO1xuICAgIGlmIChtb2RlbHMubGVuZ3RoICE9PSAwKSB7XG4gICAgICBtZXJnZUZ1bmN0aW9uKHN0YXRlLCBtb2RlbHMpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBzZXRPbmVNdXRhYmx5KGVudGl0eSwgc3RhdGUpIHtcbiAgICByZXR1cm4gc2V0TWFueU11dGFibHkoW2VudGl0eV0sIHN0YXRlKTtcbiAgfVxuICBmdW5jdGlvbiBzZXRNYW55TXV0YWJseShuZXdFbnRpdGllcywgc3RhdGUpIHtcbiAgICBuZXdFbnRpdGllcyA9IGVuc3VyZUVudGl0aWVzQXJyYXkobmV3RW50aXRpZXMpO1xuICAgIGlmIChuZXdFbnRpdGllcy5sZW5ndGggIT09IDApIHtcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBuZXdFbnRpdGllcykge1xuICAgICAgICBkZWxldGUgc3RhdGUuZW50aXRpZXNbc2VsZWN0SWQoaXRlbSldO1xuICAgICAgfVxuICAgICAgbWVyZ2VGdW5jdGlvbihzdGF0ZSwgbmV3RW50aXRpZXMpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBzZXRBbGxNdXRhYmx5KG5ld0VudGl0aWVzLCBzdGF0ZSkge1xuICAgIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcyk7XG4gICAgc3RhdGUuZW50aXRpZXMgPSB7fTtcbiAgICBzdGF0ZS5pZHMgPSBbXTtcbiAgICBhZGRNYW55TXV0YWJseShuZXdFbnRpdGllcywgc3RhdGUsIFtdKTtcbiAgfVxuICBmdW5jdGlvbiB1cGRhdGVPbmVNdXRhYmx5KHVwZGF0ZSwgc3RhdGUpIHtcbiAgICByZXR1cm4gdXBkYXRlTWFueU11dGFibHkoW3VwZGF0ZV0sIHN0YXRlKTtcbiAgfVxuICBmdW5jdGlvbiB1cGRhdGVNYW55TXV0YWJseSh1cGRhdGVzLCBzdGF0ZSkge1xuICAgIGxldCBhcHBsaWVkVXBkYXRlcyA9IGZhbHNlO1xuICAgIGxldCByZXBsYWNlZElkcyA9IGZhbHNlO1xuICAgIGZvciAobGV0IHVwZGF0ZSBvZiB1cGRhdGVzKSB7XG4gICAgICBjb25zdCBlbnRpdHkgPSBzdGF0ZS5lbnRpdGllc1t1cGRhdGUuaWRdO1xuICAgICAgaWYgKCFlbnRpdHkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBhcHBsaWVkVXBkYXRlcyA9IHRydWU7XG4gICAgICBPYmplY3QuYXNzaWduKGVudGl0eSwgdXBkYXRlLmNoYW5nZXMpO1xuICAgICAgY29uc3QgbmV3SWQgPSBzZWxlY3RJZChlbnRpdHkpO1xuICAgICAgaWYgKHVwZGF0ZS5pZCAhPT0gbmV3SWQpIHtcbiAgICAgICAgcmVwbGFjZWRJZHMgPSB0cnVlO1xuICAgICAgICBkZWxldGUgc3RhdGUuZW50aXRpZXNbdXBkYXRlLmlkXTtcbiAgICAgICAgY29uc3Qgb2xkSW5kZXggPSBzdGF0ZS5pZHMuaW5kZXhPZih1cGRhdGUuaWQpO1xuICAgICAgICBzdGF0ZS5pZHNbb2xkSW5kZXhdID0gbmV3SWQ7XG4gICAgICAgIHN0YXRlLmVudGl0aWVzW25ld0lkXSA9IGVudGl0eTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGFwcGxpZWRVcGRhdGVzKSB7XG4gICAgICBtZXJnZUZ1bmN0aW9uKHN0YXRlLCBbXSwgYXBwbGllZFVwZGF0ZXMsIHJlcGxhY2VkSWRzKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gdXBzZXJ0T25lTXV0YWJseShlbnRpdHksIHN0YXRlKSB7XG4gICAgcmV0dXJuIHVwc2VydE1hbnlNdXRhYmx5KFtlbnRpdHldLCBzdGF0ZSk7XG4gIH1cbiAgZnVuY3Rpb24gdXBzZXJ0TWFueU11dGFibHkobmV3RW50aXRpZXMsIHN0YXRlKSB7XG4gICAgY29uc3QgW2FkZGVkLCB1cGRhdGVkLCBleGlzdGluZ0lkc0FycmF5XSA9IHNwbGl0QWRkZWRVcGRhdGVkRW50aXRpZXMobmV3RW50aXRpZXMsIHNlbGVjdElkLCBzdGF0ZSk7XG4gICAgaWYgKGFkZGVkLmxlbmd0aCkge1xuICAgICAgYWRkTWFueU11dGFibHkoYWRkZWQsIHN0YXRlLCBleGlzdGluZ0lkc0FycmF5KTtcbiAgICB9XG4gICAgaWYgKHVwZGF0ZWQubGVuZ3RoKSB7XG4gICAgICB1cGRhdGVNYW55TXV0YWJseSh1cGRhdGVkLCBzdGF0ZSk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGFyZUFycmF5c0VxdWFsKGEsIGIpIHtcbiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGFbaV0gPT09IGJbaV0pIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGNvbnN0IG1lcmdlRnVuY3Rpb24gPSAoc3RhdGUsIGFkZGVkSXRlbXMsIGFwcGxpZWRVcGRhdGVzLCByZXBsYWNlZElkcykgPT4ge1xuICAgIGNvbnN0IGN1cnJlbnRFbnRpdGllcyA9IGdldEN1cnJlbnQoc3RhdGUuZW50aXRpZXMpO1xuICAgIGNvbnN0IGN1cnJlbnRJZHMgPSBnZXRDdXJyZW50KHN0YXRlLmlkcyk7XG4gICAgY29uc3Qgc3RhdGVFbnRpdGllcyA9IHN0YXRlLmVudGl0aWVzO1xuICAgIGxldCBpZHMgPSBjdXJyZW50SWRzO1xuICAgIGlmIChyZXBsYWNlZElkcykge1xuICAgICAgaWRzID0gbmV3IFNldChjdXJyZW50SWRzKTtcbiAgICB9XG4gICAgbGV0IHNvcnRlZEVudGl0aWVzID0gW107XG4gICAgZm9yIChjb25zdCBpZCBvZiBpZHMpIHtcbiAgICAgIGNvbnN0IGVudGl0eSA9IGN1cnJlbnRFbnRpdGllc1tpZF07XG4gICAgICBpZiAoZW50aXR5KSB7XG4gICAgICAgIHNvcnRlZEVudGl0aWVzLnB1c2goZW50aXR5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgd2FzUHJldmlvdXNseUVtcHR5ID0gc29ydGVkRW50aXRpZXMubGVuZ3RoID09PSAwO1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBhZGRlZEl0ZW1zKSB7XG4gICAgICBzdGF0ZUVudGl0aWVzW3NlbGVjdElkKGl0ZW0pXSA9IGl0ZW07XG4gICAgICBpZiAoIXdhc1ByZXZpb3VzbHlFbXB0eSkge1xuICAgICAgICBpbnNlcnQoc29ydGVkRW50aXRpZXMsIGl0ZW0sIGNvbXBhcmVyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHdhc1ByZXZpb3VzbHlFbXB0eSkge1xuICAgICAgc29ydGVkRW50aXRpZXMgPSBhZGRlZEl0ZW1zLnNsaWNlKCkuc29ydChjb21wYXJlcik7XG4gICAgfSBlbHNlIGlmIChhcHBsaWVkVXBkYXRlcykge1xuICAgICAgc29ydGVkRW50aXRpZXMuc29ydChjb21wYXJlcik7XG4gICAgfVxuICAgIGNvbnN0IG5ld1NvcnRlZElkcyA9IHNvcnRlZEVudGl0aWVzLm1hcChzZWxlY3RJZCk7XG4gICAgaWYgKCFhcmVBcnJheXNFcXVhbChjdXJyZW50SWRzLCBuZXdTb3J0ZWRJZHMpKSB7XG4gICAgICBzdGF0ZS5pZHMgPSBuZXdTb3J0ZWRJZHM7XG4gICAgfVxuICB9O1xuICByZXR1cm4ge1xuICAgIHJlbW92ZU9uZSxcbiAgICByZW1vdmVNYW55LFxuICAgIHJlbW92ZUFsbCxcbiAgICBhZGRPbmU6IGNyZWF0ZVN0YXRlT3BlcmF0b3IoYWRkT25lTXV0YWJseSksXG4gICAgdXBkYXRlT25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHVwZGF0ZU9uZU11dGFibHkpLFxuICAgIHVwc2VydE9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcih1cHNlcnRPbmVNdXRhYmx5KSxcbiAgICBzZXRPbmU6IGNyZWF0ZVN0YXRlT3BlcmF0b3Ioc2V0T25lTXV0YWJseSksXG4gICAgc2V0TWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcihzZXRNYW55TXV0YWJseSksXG4gICAgc2V0QWxsOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHNldEFsbE11dGFibHkpLFxuICAgIGFkZE1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3IoYWRkTWFueU11dGFibHkpLFxuICAgIHVwZGF0ZU1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3IodXBkYXRlTWFueU11dGFibHkpLFxuICAgIHVwc2VydE1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3IodXBzZXJ0TWFueU11dGFibHkpXG4gIH07XG59XG5cbi8vIHNyYy9lbnRpdGllcy9jcmVhdGVfYWRhcHRlci50c1xuZnVuY3Rpb24gY3JlYXRlRW50aXR5QWRhcHRlcihvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHNlbGVjdElkLFxuICAgIHNvcnRDb21wYXJlclxuICB9ID0ge1xuICAgIHNvcnRDb21wYXJlcjogZmFsc2UsXG4gICAgc2VsZWN0SWQ6IChpbnN0YW5jZSkgPT4gaW5zdGFuY2UuaWQsXG4gICAgLi4ub3B0aW9uc1xuICB9O1xuICBjb25zdCBzdGF0ZUFkYXB0ZXIgPSBzb3J0Q29tcGFyZXIgPyBjcmVhdGVTb3J0ZWRTdGF0ZUFkYXB0ZXIoc2VsZWN0SWQsIHNvcnRDb21wYXJlcikgOiBjcmVhdGVVbnNvcnRlZFN0YXRlQWRhcHRlcihzZWxlY3RJZCk7XG4gIGNvbnN0IHN0YXRlRmFjdG9yeSA9IGNyZWF0ZUluaXRpYWxTdGF0ZUZhY3Rvcnkoc3RhdGVBZGFwdGVyKTtcbiAgY29uc3Qgc2VsZWN0b3JzRmFjdG9yeSA9IGNyZWF0ZVNlbGVjdG9yc0ZhY3RvcnkoKTtcbiAgcmV0dXJuIHtcbiAgICBzZWxlY3RJZCxcbiAgICBzb3J0Q29tcGFyZXIsXG4gICAgLi4uc3RhdGVGYWN0b3J5LFxuICAgIC4uLnNlbGVjdG9yc0ZhY3RvcnksXG4gICAgLi4uc3RhdGVBZGFwdGVyXG4gIH07XG59XG5cbi8vIHNyYy9saXN0ZW5lck1pZGRsZXdhcmUvaW5kZXgudHNcbmltcG9ydCB7IGlzQWN0aW9uIGFzIGlzQWN0aW9uMyB9IGZyb20gXCJyZWR1eFwiO1xuXG4vLyBzcmMvbGlzdGVuZXJNaWRkbGV3YXJlL2V4Y2VwdGlvbnMudHNcbnZhciB0YXNrID0gXCJ0YXNrXCI7XG52YXIgbGlzdGVuZXIgPSBcImxpc3RlbmVyXCI7XG52YXIgY29tcGxldGVkID0gXCJjb21wbGV0ZWRcIjtcbnZhciBjYW5jZWxsZWQgPSBcImNhbmNlbGxlZFwiO1xudmFyIHRhc2tDYW5jZWxsZWQgPSBgdGFzay0ke2NhbmNlbGxlZH1gO1xudmFyIHRhc2tDb21wbGV0ZWQgPSBgdGFzay0ke2NvbXBsZXRlZH1gO1xudmFyIGxpc3RlbmVyQ2FuY2VsbGVkID0gYCR7bGlzdGVuZXJ9LSR7Y2FuY2VsbGVkfWA7XG52YXIgbGlzdGVuZXJDb21wbGV0ZWQgPSBgJHtsaXN0ZW5lcn0tJHtjb21wbGV0ZWR9YDtcbnZhciBUYXNrQWJvcnRFcnJvciA9IGNsYXNzIHtcbiAgY29uc3RydWN0b3IoY29kZSkge1xuICAgIHRoaXMuY29kZSA9IGNvZGU7XG4gICAgdGhpcy5tZXNzYWdlID0gYCR7dGFza30gJHtjYW5jZWxsZWR9IChyZWFzb246ICR7Y29kZX0pYDtcbiAgfVxuICBuYW1lID0gXCJUYXNrQWJvcnRFcnJvclwiO1xuICBtZXNzYWdlO1xufTtcblxuLy8gc3JjL2xpc3RlbmVyTWlkZGxld2FyZS91dGlscy50c1xudmFyIGFzc2VydEZ1bmN0aW9uID0gKGZ1bmMsIGV4cGVjdGVkKSA9PiB7XG4gIGlmICh0eXBlb2YgZnVuYyAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDMyKSA6IGAke2V4cGVjdGVkfSBpcyBub3QgYSBmdW5jdGlvbmApO1xuICB9XG59O1xudmFyIG5vb3AyID0gKCkgPT4ge1xufTtcbnZhciBjYXRjaFJlamVjdGlvbiA9IChwcm9taXNlLCBvbkVycm9yID0gbm9vcDIpID0+IHtcbiAgcHJvbWlzZS5jYXRjaChvbkVycm9yKTtcbiAgcmV0dXJuIHByb21pc2U7XG59O1xudmFyIGFkZEFib3J0U2lnbmFsTGlzdGVuZXIgPSAoYWJvcnRTaWduYWwsIGNhbGxiYWNrKSA9PiB7XG4gIGFib3J0U2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBjYWxsYmFjaywge1xuICAgIG9uY2U6IHRydWVcbiAgfSk7XG4gIHJldHVybiAoKSA9PiBhYm9ydFNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgY2FsbGJhY2spO1xufTtcbnZhciBhYm9ydENvbnRyb2xsZXJXaXRoUmVhc29uID0gKGFib3J0Q29udHJvbGxlciwgcmVhc29uKSA9PiB7XG4gIGNvbnN0IHNpZ25hbCA9IGFib3J0Q29udHJvbGxlci5zaWduYWw7XG4gIGlmIChzaWduYWwuYWJvcnRlZCkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoIShcInJlYXNvblwiIGluIHNpZ25hbCkpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2lnbmFsLCBcInJlYXNvblwiLCB7XG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgdmFsdWU6IHJlYXNvbixcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH1cbiAgO1xuICBhYm9ydENvbnRyb2xsZXIuYWJvcnQocmVhc29uKTtcbn07XG5cbi8vIHNyYy9saXN0ZW5lck1pZGRsZXdhcmUvdGFzay50c1xudmFyIHZhbGlkYXRlQWN0aXZlID0gKHNpZ25hbCkgPT4ge1xuICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICBjb25zdCB7XG4gICAgICByZWFzb25cbiAgICB9ID0gc2lnbmFsO1xuICAgIHRocm93IG5ldyBUYXNrQWJvcnRFcnJvcihyZWFzb24pO1xuICB9XG59O1xuZnVuY3Rpb24gcmFjZVdpdGhTaWduYWwoc2lnbmFsLCBwcm9taXNlKSB7XG4gIGxldCBjbGVhbnVwID0gbm9vcDI7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgbm90aWZ5UmVqZWN0aW9uID0gKCkgPT4gcmVqZWN0KG5ldyBUYXNrQWJvcnRFcnJvcihzaWduYWwucmVhc29uKSk7XG4gICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICBub3RpZnlSZWplY3Rpb24oKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY2xlYW51cCA9IGFkZEFib3J0U2lnbmFsTGlzdGVuZXIoc2lnbmFsLCBub3RpZnlSZWplY3Rpb24pO1xuICAgIHByb21pc2UuZmluYWxseSgoKSA9PiBjbGVhbnVwKCkpLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgfSkuZmluYWxseSgoKSA9PiB7XG4gICAgY2xlYW51cCA9IG5vb3AyO1xuICB9KTtcbn1cbnZhciBydW5UYXNrID0gYXN5bmMgKHRhc2syLCBjbGVhblVwKSA9PiB7XG4gIHRyeSB7XG4gICAgYXdhaXQgUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgY29uc3QgdmFsdWUgPSBhd2FpdCB0YXNrMigpO1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IFwib2tcIixcbiAgICAgIHZhbHVlXG4gICAgfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiBlcnJvciBpbnN0YW5jZW9mIFRhc2tBYm9ydEVycm9yID8gXCJjYW5jZWxsZWRcIiA6IFwicmVqZWN0ZWRcIixcbiAgICAgIGVycm9yXG4gICAgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjbGVhblVwPy4oKTtcbiAgfVxufTtcbnZhciBjcmVhdGVQYXVzZSA9IChzaWduYWwpID0+IHtcbiAgcmV0dXJuIChwcm9taXNlKSA9PiB7XG4gICAgcmV0dXJuIGNhdGNoUmVqZWN0aW9uKHJhY2VXaXRoU2lnbmFsKHNpZ25hbCwgcHJvbWlzZSkudGhlbigob3V0cHV0KSA9PiB7XG4gICAgICB2YWxpZGF0ZUFjdGl2ZShzaWduYWwpO1xuICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9KSk7XG4gIH07XG59O1xudmFyIGNyZWF0ZURlbGF5ID0gKHNpZ25hbCkgPT4ge1xuICBjb25zdCBwYXVzZSA9IGNyZWF0ZVBhdXNlKHNpZ25hbCk7XG4gIHJldHVybiAodGltZW91dE1zKSA9PiB7XG4gICAgcmV0dXJuIHBhdXNlKG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWVvdXRNcykpKTtcbiAgfTtcbn07XG5cbi8vIHNyYy9saXN0ZW5lck1pZGRsZXdhcmUvaW5kZXgudHNcbnZhciB7XG4gIGFzc2lnblxufSA9IE9iamVjdDtcbnZhciBJTlRFUk5BTF9OSUxfVE9LRU4gPSB7fTtcbnZhciBhbG0gPSBcImxpc3RlbmVyTWlkZGxld2FyZVwiO1xudmFyIGNyZWF0ZUZvcmsgPSAocGFyZW50QWJvcnRTaWduYWwsIHBhcmVudEJsb2NraW5nUHJvbWlzZXMpID0+IHtcbiAgY29uc3QgbGlua0NvbnRyb2xsZXJzID0gKGNvbnRyb2xsZXIpID0+IGFkZEFib3J0U2lnbmFsTGlzdGVuZXIocGFyZW50QWJvcnRTaWduYWwsICgpID0+IGFib3J0Q29udHJvbGxlcldpdGhSZWFzb24oY29udHJvbGxlciwgcGFyZW50QWJvcnRTaWduYWwucmVhc29uKSk7XG4gIHJldHVybiAodGFza0V4ZWN1dG9yLCBvcHRzKSA9PiB7XG4gICAgYXNzZXJ0RnVuY3Rpb24odGFza0V4ZWN1dG9yLCBcInRhc2tFeGVjdXRvclwiKTtcbiAgICBjb25zdCBjaGlsZEFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICBsaW5rQ29udHJvbGxlcnMoY2hpbGRBYm9ydENvbnRyb2xsZXIpO1xuICAgIGNvbnN0IHJlc3VsdCA9IHJ1blRhc2soYXN5bmMgKCkgPT4ge1xuICAgICAgdmFsaWRhdGVBY3RpdmUocGFyZW50QWJvcnRTaWduYWwpO1xuICAgICAgdmFsaWRhdGVBY3RpdmUoY2hpbGRBYm9ydENvbnRyb2xsZXIuc2lnbmFsKTtcbiAgICAgIGNvbnN0IHJlc3VsdDIgPSBhd2FpdCB0YXNrRXhlY3V0b3Ioe1xuICAgICAgICBwYXVzZTogY3JlYXRlUGF1c2UoY2hpbGRBYm9ydENvbnRyb2xsZXIuc2lnbmFsKSxcbiAgICAgICAgZGVsYXk6IGNyZWF0ZURlbGF5KGNoaWxkQWJvcnRDb250cm9sbGVyLnNpZ25hbCksXG4gICAgICAgIHNpZ25hbDogY2hpbGRBYm9ydENvbnRyb2xsZXIuc2lnbmFsXG4gICAgICB9KTtcbiAgICAgIHZhbGlkYXRlQWN0aXZlKGNoaWxkQWJvcnRDb250cm9sbGVyLnNpZ25hbCk7XG4gICAgICByZXR1cm4gcmVzdWx0MjtcbiAgICB9LCAoKSA9PiBhYm9ydENvbnRyb2xsZXJXaXRoUmVhc29uKGNoaWxkQWJvcnRDb250cm9sbGVyLCB0YXNrQ29tcGxldGVkKSk7XG4gICAgaWYgKG9wdHM/LmF1dG9Kb2luKSB7XG4gICAgICBwYXJlbnRCbG9ja2luZ1Byb21pc2VzLnB1c2gocmVzdWx0LmNhdGNoKG5vb3AyKSk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICByZXN1bHQ6IGNyZWF0ZVBhdXNlKHBhcmVudEFib3J0U2lnbmFsKShyZXN1bHQpLFxuICAgICAgY2FuY2VsKCkge1xuICAgICAgICBhYm9ydENvbnRyb2xsZXJXaXRoUmVhc29uKGNoaWxkQWJvcnRDb250cm9sbGVyLCB0YXNrQ2FuY2VsbGVkKTtcbiAgICAgIH1cbiAgICB9O1xuICB9O1xufTtcbnZhciBjcmVhdGVUYWtlUGF0dGVybiA9IChzdGFydExpc3RlbmluZywgc2lnbmFsKSA9PiB7XG4gIGNvbnN0IHRha2UgPSBhc3luYyAocHJlZGljYXRlLCB0aW1lb3V0KSA9PiB7XG4gICAgdmFsaWRhdGVBY3RpdmUoc2lnbmFsKTtcbiAgICBsZXQgdW5zdWJzY3JpYmUgPSAoKSA9PiB7XG4gICAgfTtcbiAgICBjb25zdCB0dXBsZVByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBsZXQgc3RvcExpc3RlbmluZyA9IHN0YXJ0TGlzdGVuaW5nKHtcbiAgICAgICAgcHJlZGljYXRlLFxuICAgICAgICBlZmZlY3Q6IChhY3Rpb24sIGxpc3RlbmVyQXBpKSA9PiB7XG4gICAgICAgICAgbGlzdGVuZXJBcGkudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICByZXNvbHZlKFthY3Rpb24sIGxpc3RlbmVyQXBpLmdldFN0YXRlKCksIGxpc3RlbmVyQXBpLmdldE9yaWdpbmFsU3RhdGUoKV0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHVuc3Vic2NyaWJlID0gKCkgPT4ge1xuICAgICAgICBzdG9wTGlzdGVuaW5nKCk7XG4gICAgICAgIHJlamVjdCgpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgICBjb25zdCBwcm9taXNlcyA9IFt0dXBsZVByb21pc2VdO1xuICAgIGlmICh0aW1lb3V0ICE9IG51bGwpIHtcbiAgICAgIHByb21pc2VzLnB1c2gobmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgdGltZW91dCwgbnVsbCkpKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IHJhY2VXaXRoU2lnbmFsKHNpZ25hbCwgUHJvbWlzZS5yYWNlKHByb21pc2VzKSk7XG4gICAgICB2YWxpZGF0ZUFjdGl2ZShzaWduYWwpO1xuICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH07XG4gIHJldHVybiAocHJlZGljYXRlLCB0aW1lb3V0KSA9PiBjYXRjaFJlamVjdGlvbih0YWtlKHByZWRpY2F0ZSwgdGltZW91dCkpO1xufTtcbnZhciBnZXRMaXN0ZW5lckVudHJ5UHJvcHNGcm9tID0gKG9wdGlvbnMpID0+IHtcbiAgbGV0IHtcbiAgICB0eXBlLFxuICAgIGFjdGlvbkNyZWF0b3IsXG4gICAgbWF0Y2hlcixcbiAgICBwcmVkaWNhdGUsXG4gICAgZWZmZWN0XG4gIH0gPSBvcHRpb25zO1xuICBpZiAodHlwZSkge1xuICAgIHByZWRpY2F0ZSA9IGNyZWF0ZUFjdGlvbih0eXBlKS5tYXRjaDtcbiAgfSBlbHNlIGlmIChhY3Rpb25DcmVhdG9yKSB7XG4gICAgdHlwZSA9IGFjdGlvbkNyZWF0b3IudHlwZTtcbiAgICBwcmVkaWNhdGUgPSBhY3Rpb25DcmVhdG9yLm1hdGNoO1xuICB9IGVsc2UgaWYgKG1hdGNoZXIpIHtcbiAgICBwcmVkaWNhdGUgPSBtYXRjaGVyO1xuICB9IGVsc2UgaWYgKHByZWRpY2F0ZSkge1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDIxKSA6IFwiQ3JlYXRpbmcgb3IgcmVtb3ZpbmcgYSBsaXN0ZW5lciByZXF1aXJlcyBvbmUgb2YgdGhlIGtub3duIGZpZWxkcyBmb3IgbWF0Y2hpbmcgYW4gYWN0aW9uXCIpO1xuICB9XG4gIGFzc2VydEZ1bmN0aW9uKGVmZmVjdCwgXCJvcHRpb25zLmxpc3RlbmVyXCIpO1xuICByZXR1cm4ge1xuICAgIHByZWRpY2F0ZSxcbiAgICB0eXBlLFxuICAgIGVmZmVjdFxuICB9O1xufTtcbnZhciBjcmVhdGVMaXN0ZW5lckVudHJ5ID0gLyogQF9fUFVSRV9fICovIGFzc2lnbigob3B0aW9ucykgPT4ge1xuICBjb25zdCB7XG4gICAgdHlwZSxcbiAgICBwcmVkaWNhdGUsXG4gICAgZWZmZWN0XG4gIH0gPSBnZXRMaXN0ZW5lckVudHJ5UHJvcHNGcm9tKG9wdGlvbnMpO1xuICBjb25zdCBlbnRyeSA9IHtcbiAgICBpZDogbmFub2lkKCksXG4gICAgZWZmZWN0LFxuICAgIHR5cGUsXG4gICAgcHJlZGljYXRlLFxuICAgIHBlbmRpbmc6IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCksXG4gICAgdW5zdWJzY3JpYmU6ICgpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDIyKSA6IFwiVW5zdWJzY3JpYmUgbm90IGluaXRpYWxpemVkXCIpO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGVudHJ5O1xufSwge1xuICB3aXRoVHlwZXM6ICgpID0+IGNyZWF0ZUxpc3RlbmVyRW50cnlcbn0pO1xudmFyIGZpbmRMaXN0ZW5lckVudHJ5ID0gKGxpc3RlbmVyTWFwLCBvcHRpb25zKSA9PiB7XG4gIGNvbnN0IHtcbiAgICB0eXBlLFxuICAgIGVmZmVjdCxcbiAgICBwcmVkaWNhdGVcbiAgfSA9IGdldExpc3RlbmVyRW50cnlQcm9wc0Zyb20ob3B0aW9ucyk7XG4gIHJldHVybiBBcnJheS5mcm9tKGxpc3RlbmVyTWFwLnZhbHVlcygpKS5maW5kKChlbnRyeSkgPT4ge1xuICAgIGNvbnN0IG1hdGNoUHJlZGljYXRlT3JUeXBlID0gdHlwZW9mIHR5cGUgPT09IFwic3RyaW5nXCIgPyBlbnRyeS50eXBlID09PSB0eXBlIDogZW50cnkucHJlZGljYXRlID09PSBwcmVkaWNhdGU7XG4gICAgcmV0dXJuIG1hdGNoUHJlZGljYXRlT3JUeXBlICYmIGVudHJ5LmVmZmVjdCA9PT0gZWZmZWN0O1xuICB9KTtcbn07XG52YXIgY2FuY2VsQWN0aXZlTGlzdGVuZXJzID0gKGVudHJ5KSA9PiB7XG4gIGVudHJ5LnBlbmRpbmcuZm9yRWFjaCgoY29udHJvbGxlcikgPT4ge1xuICAgIGFib3J0Q29udHJvbGxlcldpdGhSZWFzb24oY29udHJvbGxlciwgbGlzdGVuZXJDYW5jZWxsZWQpO1xuICB9KTtcbn07XG52YXIgY3JlYXRlQ2xlYXJMaXN0ZW5lck1pZGRsZXdhcmUgPSAobGlzdGVuZXJNYXApID0+IHtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBsaXN0ZW5lck1hcC5mb3JFYWNoKGNhbmNlbEFjdGl2ZUxpc3RlbmVycyk7XG4gICAgbGlzdGVuZXJNYXAuY2xlYXIoKTtcbiAgfTtcbn07XG52YXIgc2FmZWx5Tm90aWZ5RXJyb3IgPSAoZXJyb3JIYW5kbGVyLCBlcnJvclRvTm90aWZ5LCBlcnJvckluZm8pID0+IHtcbiAgdHJ5IHtcbiAgICBlcnJvckhhbmRsZXIoZXJyb3JUb05vdGlmeSwgZXJyb3JJbmZvKTtcbiAgfSBjYXRjaCAoZXJyb3JIYW5kbGVyRXJyb3IpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRocm93IGVycm9ySGFuZGxlckVycm9yO1xuICAgIH0sIDApO1xuICB9XG59O1xudmFyIGFkZExpc3RlbmVyID0gLyogQF9fUFVSRV9fICovIGFzc2lnbigvKiBAX19QVVJFX18gKi8gY3JlYXRlQWN0aW9uKGAke2FsbX0vYWRkYCksIHtcbiAgd2l0aFR5cGVzOiAoKSA9PiBhZGRMaXN0ZW5lclxufSk7XG52YXIgY2xlYXJBbGxMaXN0ZW5lcnMgPSAvKiBAX19QVVJFX18gKi8gY3JlYXRlQWN0aW9uKGAke2FsbX0vcmVtb3ZlQWxsYCk7XG52YXIgcmVtb3ZlTGlzdGVuZXIgPSAvKiBAX19QVVJFX18gKi8gYXNzaWduKC8qIEBfX1BVUkVfXyAqLyBjcmVhdGVBY3Rpb24oYCR7YWxtfS9yZW1vdmVgKSwge1xuICB3aXRoVHlwZXM6ICgpID0+IHJlbW92ZUxpc3RlbmVyXG59KTtcbnZhciBkZWZhdWx0RXJyb3JIYW5kbGVyID0gKC4uLmFyZ3MpID0+IHtcbiAgY29uc29sZS5lcnJvcihgJHthbG19L2Vycm9yYCwgLi4uYXJncyk7XG59O1xudmFyIGNyZWF0ZUxpc3RlbmVyTWlkZGxld2FyZSA9IChtaWRkbGV3YXJlT3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IGxpc3RlbmVyTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgY29uc3Qge1xuICAgIGV4dHJhLFxuICAgIG9uRXJyb3IgPSBkZWZhdWx0RXJyb3JIYW5kbGVyXG4gIH0gPSBtaWRkbGV3YXJlT3B0aW9ucztcbiAgYXNzZXJ0RnVuY3Rpb24ob25FcnJvciwgXCJvbkVycm9yXCIpO1xuICBjb25zdCBpbnNlcnRFbnRyeSA9IChlbnRyeSkgPT4ge1xuICAgIGVudHJ5LnVuc3Vic2NyaWJlID0gKCkgPT4gbGlzdGVuZXJNYXAuZGVsZXRlKGVudHJ5LmlkKTtcbiAgICBsaXN0ZW5lck1hcC5zZXQoZW50cnkuaWQsIGVudHJ5KTtcbiAgICByZXR1cm4gKGNhbmNlbE9wdGlvbnMpID0+IHtcbiAgICAgIGVudHJ5LnVuc3Vic2NyaWJlKCk7XG4gICAgICBpZiAoY2FuY2VsT3B0aW9ucz8uY2FuY2VsQWN0aXZlKSB7XG4gICAgICAgIGNhbmNlbEFjdGl2ZUxpc3RlbmVycyhlbnRyeSk7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcbiAgY29uc3Qgc3RhcnRMaXN0ZW5pbmcgPSAob3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IGVudHJ5ID0gZmluZExpc3RlbmVyRW50cnkobGlzdGVuZXJNYXAsIG9wdGlvbnMpID8/IGNyZWF0ZUxpc3RlbmVyRW50cnkob3B0aW9ucyk7XG4gICAgcmV0dXJuIGluc2VydEVudHJ5KGVudHJ5KTtcbiAgfTtcbiAgYXNzaWduKHN0YXJ0TGlzdGVuaW5nLCB7XG4gICAgd2l0aFR5cGVzOiAoKSA9PiBzdGFydExpc3RlbmluZ1xuICB9KTtcbiAgY29uc3Qgc3RvcExpc3RlbmluZyA9IChvcHRpb25zKSA9PiB7XG4gICAgY29uc3QgZW50cnkgPSBmaW5kTGlzdGVuZXJFbnRyeShsaXN0ZW5lck1hcCwgb3B0aW9ucyk7XG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICBlbnRyeS51bnN1YnNjcmliZSgpO1xuICAgICAgaWYgKG9wdGlvbnMuY2FuY2VsQWN0aXZlKSB7XG4gICAgICAgIGNhbmNlbEFjdGl2ZUxpc3RlbmVycyhlbnRyeSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAhIWVudHJ5O1xuICB9O1xuICBhc3NpZ24oc3RvcExpc3RlbmluZywge1xuICAgIHdpdGhUeXBlczogKCkgPT4gc3RvcExpc3RlbmluZ1xuICB9KTtcbiAgY29uc3Qgbm90aWZ5TGlzdGVuZXIgPSBhc3luYyAoZW50cnksIGFjdGlvbiwgYXBpLCBnZXRPcmlnaW5hbFN0YXRlKSA9PiB7XG4gICAgY29uc3QgaW50ZXJuYWxUYXNrQ29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICBjb25zdCB0YWtlID0gY3JlYXRlVGFrZVBhdHRlcm4oc3RhcnRMaXN0ZW5pbmcsIGludGVybmFsVGFza0NvbnRyb2xsZXIuc2lnbmFsKTtcbiAgICBjb25zdCBhdXRvSm9pblByb21pc2VzID0gW107XG4gICAgdHJ5IHtcbiAgICAgIGVudHJ5LnBlbmRpbmcuYWRkKGludGVybmFsVGFza0NvbnRyb2xsZXIpO1xuICAgICAgYXdhaXQgUHJvbWlzZS5yZXNvbHZlKGVudHJ5LmVmZmVjdChcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICAvLyBVc2UgYXNzaWduKCkgcmF0aGVyIHRoYW4gLi4uIHRvIGF2b2lkIGV4dHJhIGhlbHBlciBmdW5jdGlvbnMgYWRkZWQgdG8gYnVuZGxlXG4gICAgICAgIGFzc2lnbih7fSwgYXBpLCB7XG4gICAgICAgICAgZ2V0T3JpZ2luYWxTdGF0ZSxcbiAgICAgICAgICBjb25kaXRpb246IChwcmVkaWNhdGUsIHRpbWVvdXQpID0+IHRha2UocHJlZGljYXRlLCB0aW1lb3V0KS50aGVuKEJvb2xlYW4pLFxuICAgICAgICAgIHRha2UsXG4gICAgICAgICAgZGVsYXk6IGNyZWF0ZURlbGF5KGludGVybmFsVGFza0NvbnRyb2xsZXIuc2lnbmFsKSxcbiAgICAgICAgICBwYXVzZTogY3JlYXRlUGF1c2UoaW50ZXJuYWxUYXNrQ29udHJvbGxlci5zaWduYWwpLFxuICAgICAgICAgIGV4dHJhLFxuICAgICAgICAgIHNpZ25hbDogaW50ZXJuYWxUYXNrQ29udHJvbGxlci5zaWduYWwsXG4gICAgICAgICAgZm9yazogY3JlYXRlRm9yayhpbnRlcm5hbFRhc2tDb250cm9sbGVyLnNpZ25hbCwgYXV0b0pvaW5Qcm9taXNlcyksXG4gICAgICAgICAgdW5zdWJzY3JpYmU6IGVudHJ5LnVuc3Vic2NyaWJlLFxuICAgICAgICAgIHN1YnNjcmliZTogKCkgPT4ge1xuICAgICAgICAgICAgbGlzdGVuZXJNYXAuc2V0KGVudHJ5LmlkLCBlbnRyeSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBjYW5jZWxBY3RpdmVMaXN0ZW5lcnM6ICgpID0+IHtcbiAgICAgICAgICAgIGVudHJ5LnBlbmRpbmcuZm9yRWFjaCgoY29udHJvbGxlciwgXywgc2V0KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChjb250cm9sbGVyICE9PSBpbnRlcm5hbFRhc2tDb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgYWJvcnRDb250cm9sbGVyV2l0aFJlYXNvbihjb250cm9sbGVyLCBsaXN0ZW5lckNhbmNlbGxlZCk7XG4gICAgICAgICAgICAgICAgc2V0LmRlbGV0ZShjb250cm9sbGVyKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBjYW5jZWw6ICgpID0+IHtcbiAgICAgICAgICAgIGFib3J0Q29udHJvbGxlcldpdGhSZWFzb24oaW50ZXJuYWxUYXNrQ29udHJvbGxlciwgbGlzdGVuZXJDYW5jZWxsZWQpO1xuICAgICAgICAgICAgZW50cnkucGVuZGluZy5kZWxldGUoaW50ZXJuYWxUYXNrQ29udHJvbGxlcik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aHJvd0lmQ2FuY2VsbGVkOiAoKSA9PiB7XG4gICAgICAgICAgICB2YWxpZGF0ZUFjdGl2ZShpbnRlcm5hbFRhc2tDb250cm9sbGVyLnNpZ25hbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKSk7XG4gICAgfSBjYXRjaCAobGlzdGVuZXJFcnJvcikge1xuICAgICAgaWYgKCEobGlzdGVuZXJFcnJvciBpbnN0YW5jZW9mIFRhc2tBYm9ydEVycm9yKSkge1xuICAgICAgICBzYWZlbHlOb3RpZnlFcnJvcihvbkVycm9yLCBsaXN0ZW5lckVycm9yLCB7XG4gICAgICAgICAgcmFpc2VkQnk6IFwiZWZmZWN0XCJcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKGF1dG9Kb2luUHJvbWlzZXMpO1xuICAgICAgYWJvcnRDb250cm9sbGVyV2l0aFJlYXNvbihpbnRlcm5hbFRhc2tDb250cm9sbGVyLCBsaXN0ZW5lckNvbXBsZXRlZCk7XG4gICAgICBlbnRyeS5wZW5kaW5nLmRlbGV0ZShpbnRlcm5hbFRhc2tDb250cm9sbGVyKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGNsZWFyTGlzdGVuZXJNaWRkbGV3YXJlID0gY3JlYXRlQ2xlYXJMaXN0ZW5lck1pZGRsZXdhcmUobGlzdGVuZXJNYXApO1xuICBjb25zdCBtaWRkbGV3YXJlID0gKGFwaSkgPT4gKG5leHQpID0+IChhY3Rpb24pID0+IHtcbiAgICBpZiAoIWlzQWN0aW9uMyhhY3Rpb24pKSB7XG4gICAgICByZXR1cm4gbmV4dChhY3Rpb24pO1xuICAgIH1cbiAgICBpZiAoYWRkTGlzdGVuZXIubWF0Y2goYWN0aW9uKSkge1xuICAgICAgcmV0dXJuIHN0YXJ0TGlzdGVuaW5nKGFjdGlvbi5wYXlsb2FkKTtcbiAgICB9XG4gICAgaWYgKGNsZWFyQWxsTGlzdGVuZXJzLm1hdGNoKGFjdGlvbikpIHtcbiAgICAgIGNsZWFyTGlzdGVuZXJNaWRkbGV3YXJlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChyZW1vdmVMaXN0ZW5lci5tYXRjaChhY3Rpb24pKSB7XG4gICAgICByZXR1cm4gc3RvcExpc3RlbmluZyhhY3Rpb24ucGF5bG9hZCk7XG4gICAgfVxuICAgIGxldCBvcmlnaW5hbFN0YXRlID0gYXBpLmdldFN0YXRlKCk7XG4gICAgY29uc3QgZ2V0T3JpZ2luYWxTdGF0ZSA9ICgpID0+IHtcbiAgICAgIGlmIChvcmlnaW5hbFN0YXRlID09PSBJTlRFUk5BTF9OSUxfVE9LRU4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMjMpIDogYCR7YWxtfTogZ2V0T3JpZ2luYWxTdGF0ZSBjYW4gb25seSBiZSBjYWxsZWQgc3luY2hyb25vdXNseWApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9yaWdpbmFsU3RhdGU7XG4gICAgfTtcbiAgICBsZXQgcmVzdWx0O1xuICAgIHRyeSB7XG4gICAgICByZXN1bHQgPSBuZXh0KGFjdGlvbik7XG4gICAgICBpZiAobGlzdGVuZXJNYXAuc2l6ZSA+IDApIHtcbiAgICAgICAgY29uc3QgY3VycmVudFN0YXRlID0gYXBpLmdldFN0YXRlKCk7XG4gICAgICAgIGNvbnN0IGxpc3RlbmVyRW50cmllcyA9IEFycmF5LmZyb20obGlzdGVuZXJNYXAudmFsdWVzKCkpO1xuICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGxpc3RlbmVyRW50cmllcykge1xuICAgICAgICAgIGxldCBydW5MaXN0ZW5lciA9IGZhbHNlO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBydW5MaXN0ZW5lciA9IGVudHJ5LnByZWRpY2F0ZShhY3Rpb24sIGN1cnJlbnRTdGF0ZSwgb3JpZ2luYWxTdGF0ZSk7XG4gICAgICAgICAgfSBjYXRjaCAocHJlZGljYXRlRXJyb3IpIHtcbiAgICAgICAgICAgIHJ1bkxpc3RlbmVyID0gZmFsc2U7XG4gICAgICAgICAgICBzYWZlbHlOb3RpZnlFcnJvcihvbkVycm9yLCBwcmVkaWNhdGVFcnJvciwge1xuICAgICAgICAgICAgICByYWlzZWRCeTogXCJwcmVkaWNhdGVcIlxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghcnVuTGlzdGVuZXIpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBub3RpZnlMaXN0ZW5lcihlbnRyeSwgYWN0aW9uLCBhcGksIGdldE9yaWdpbmFsU3RhdGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIG9yaWdpbmFsU3RhdGUgPSBJTlRFUk5BTF9OSUxfVE9LRU47XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4gIHJldHVybiB7XG4gICAgbWlkZGxld2FyZSxcbiAgICBzdGFydExpc3RlbmluZyxcbiAgICBzdG9wTGlzdGVuaW5nLFxuICAgIGNsZWFyTGlzdGVuZXJzOiBjbGVhckxpc3RlbmVyTWlkZGxld2FyZVxuICB9O1xufTtcblxuLy8gc3JjL2R5bmFtaWNNaWRkbGV3YXJlL2luZGV4LnRzXG5pbXBvcnQgeyBjb21wb3NlIGFzIGNvbXBvc2UzIH0gZnJvbSBcInJlZHV4XCI7XG52YXIgY3JlYXRlTWlkZGxld2FyZUVudHJ5ID0gKG1pZGRsZXdhcmUpID0+ICh7XG4gIG1pZGRsZXdhcmUsXG4gIGFwcGxpZWQ6IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKClcbn0pO1xudmFyIG1hdGNoSW5zdGFuY2UgPSAoaW5zdGFuY2VJZCkgPT4gKGFjdGlvbikgPT4gYWN0aW9uPy5tZXRhPy5pbnN0YW5jZUlkID09PSBpbnN0YW5jZUlkO1xudmFyIGNyZWF0ZUR5bmFtaWNNaWRkbGV3YXJlID0gKCkgPT4ge1xuICBjb25zdCBpbnN0YW5jZUlkID0gbmFub2lkKCk7XG4gIGNvbnN0IG1pZGRsZXdhcmVNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICBjb25zdCB3aXRoTWlkZGxld2FyZSA9IE9iamVjdC5hc3NpZ24oY3JlYXRlQWN0aW9uKFwiZHluYW1pY01pZGRsZXdhcmUvYWRkXCIsICguLi5taWRkbGV3YXJlcykgPT4gKHtcbiAgICBwYXlsb2FkOiBtaWRkbGV3YXJlcyxcbiAgICBtZXRhOiB7XG4gICAgICBpbnN0YW5jZUlkXG4gICAgfVxuICB9KSksIHtcbiAgICB3aXRoVHlwZXM6ICgpID0+IHdpdGhNaWRkbGV3YXJlXG4gIH0pO1xuICBjb25zdCBhZGRNaWRkbGV3YXJlID0gT2JqZWN0LmFzc2lnbihmdW5jdGlvbiBhZGRNaWRkbGV3YXJlMiguLi5taWRkbGV3YXJlcykge1xuICAgIG1pZGRsZXdhcmVzLmZvckVhY2goKG1pZGRsZXdhcmUyKSA9PiB7XG4gICAgICBnZXRPckluc2VydENvbXB1dGVkKG1pZGRsZXdhcmVNYXAsIG1pZGRsZXdhcmUyLCBjcmVhdGVNaWRkbGV3YXJlRW50cnkpO1xuICAgIH0pO1xuICB9LCB7XG4gICAgd2l0aFR5cGVzOiAoKSA9PiBhZGRNaWRkbGV3YXJlXG4gIH0pO1xuICBjb25zdCBnZXRGaW5hbE1pZGRsZXdhcmUgPSAoYXBpKSA9PiB7XG4gICAgY29uc3QgYXBwbGllZE1pZGRsZXdhcmUgPSBBcnJheS5mcm9tKG1pZGRsZXdhcmVNYXAudmFsdWVzKCkpLm1hcCgoZW50cnkpID0+IGdldE9ySW5zZXJ0Q29tcHV0ZWQoZW50cnkuYXBwbGllZCwgYXBpLCBlbnRyeS5taWRkbGV3YXJlKSk7XG4gICAgcmV0dXJuIGNvbXBvc2UzKC4uLmFwcGxpZWRNaWRkbGV3YXJlKTtcbiAgfTtcbiAgY29uc3QgaXNXaXRoTWlkZGxld2FyZSA9IGlzQWxsT2Yod2l0aE1pZGRsZXdhcmUsIG1hdGNoSW5zdGFuY2UoaW5zdGFuY2VJZCkpO1xuICBjb25zdCBtaWRkbGV3YXJlID0gKGFwaSkgPT4gKG5leHQpID0+IChhY3Rpb24pID0+IHtcbiAgICBpZiAoaXNXaXRoTWlkZGxld2FyZShhY3Rpb24pKSB7XG4gICAgICBhZGRNaWRkbGV3YXJlKC4uLmFjdGlvbi5wYXlsb2FkKTtcbiAgICAgIHJldHVybiBhcGkuZGlzcGF0Y2g7XG4gICAgfVxuICAgIHJldHVybiBnZXRGaW5hbE1pZGRsZXdhcmUoYXBpKShuZXh0KShhY3Rpb24pO1xuICB9O1xuICByZXR1cm4ge1xuICAgIG1pZGRsZXdhcmUsXG4gICAgYWRkTWlkZGxld2FyZSxcbiAgICB3aXRoTWlkZGxld2FyZSxcbiAgICBpbnN0YW5jZUlkXG4gIH07XG59O1xuXG4vLyBzcmMvY29tYmluZVNsaWNlcy50c1xuaW1wb3J0IHsgY29tYmluZVJlZHVjZXJzIGFzIGNvbWJpbmVSZWR1Y2VyczIgfSBmcm9tIFwicmVkdXhcIjtcbnZhciBpc1NsaWNlTGlrZSA9IChtYXliZVNsaWNlTGlrZSkgPT4gXCJyZWR1Y2VyUGF0aFwiIGluIG1heWJlU2xpY2VMaWtlICYmIHR5cGVvZiBtYXliZVNsaWNlTGlrZS5yZWR1Y2VyUGF0aCA9PT0gXCJzdHJpbmdcIjtcbnZhciBnZXRSZWR1Y2VycyA9IChzbGljZXMpID0+IHNsaWNlcy5mbGF0TWFwKChzbGljZU9yTWFwKSA9PiBpc1NsaWNlTGlrZShzbGljZU9yTWFwKSA/IFtbc2xpY2VPck1hcC5yZWR1Y2VyUGF0aCwgc2xpY2VPck1hcC5yZWR1Y2VyXV0gOiBPYmplY3QuZW50cmllcyhzbGljZU9yTWFwKSk7XG52YXIgT1JJR0lOQUxfU1RBVEUgPSBTeW1ib2wuZm9yKFwicnRrLXN0YXRlLXByb3h5LW9yaWdpbmFsXCIpO1xudmFyIGlzU3RhdGVQcm94eSA9ICh2YWx1ZSkgPT4gISF2YWx1ZSAmJiAhIXZhbHVlW09SSUdJTkFMX1NUQVRFXTtcbnZhciBzdGF0ZVByb3h5TWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7XG52YXIgY3JlYXRlU3RhdGVQcm94eSA9IChzdGF0ZSwgcmVkdWNlck1hcCwgaW5pdGlhbFN0YXRlQ2FjaGUpID0+IGdldE9ySW5zZXJ0Q29tcHV0ZWQoc3RhdGVQcm94eU1hcCwgc3RhdGUsICgpID0+IG5ldyBQcm94eShzdGF0ZSwge1xuICBnZXQ6ICh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKSA9PiB7XG4gICAgaWYgKHByb3AgPT09IE9SSUdJTkFMX1NUQVRFKSByZXR1cm4gdGFyZ2V0O1xuICAgIGNvbnN0IHJlc3VsdCA9IFJlZmxlY3QuZ2V0KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpO1xuICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBjb25zdCBjYWNoZWQgPSBpbml0aWFsU3RhdGVDYWNoZVtwcm9wXTtcbiAgICAgIGlmICh0eXBlb2YgY2FjaGVkICE9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gY2FjaGVkO1xuICAgICAgY29uc3QgcmVkdWNlciA9IHJlZHVjZXJNYXBbcHJvcF07XG4gICAgICBpZiAocmVkdWNlcikge1xuICAgICAgICBjb25zdCByZWR1Y2VyUmVzdWx0ID0gcmVkdWNlcih2b2lkIDAsIHtcbiAgICAgICAgICB0eXBlOiBuYW5vaWQoKVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHR5cGVvZiByZWR1Y2VyUmVzdWx0ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMjQpIDogYFRoZSBzbGljZSByZWR1Y2VyIGZvciBrZXkgXCIke3Byb3AudG9TdHJpbmcoKX1cIiByZXR1cm5lZCB1bmRlZmluZWQgd2hlbiBjYWxsZWQgZm9yIHNlbGVjdG9yKCkuIElmIHRoZSBzdGF0ZSBwYXNzZWQgdG8gdGhlIHJlZHVjZXIgaXMgdW5kZWZpbmVkLCB5b3UgbXVzdCBleHBsaWNpdGx5IHJldHVybiB0aGUgaW5pdGlhbCBzdGF0ZS4gVGhlIGluaXRpYWwgc3RhdGUgbWF5IG5vdCBiZSB1bmRlZmluZWQuIElmIHlvdSBkb24ndCB3YW50IHRvIHNldCBhIHZhbHVlIGZvciB0aGlzIHJlZHVjZXIsIHlvdSBjYW4gdXNlIG51bGwgaW5zdGVhZCBvZiB1bmRlZmluZWQuYCk7XG4gICAgICAgIH1cbiAgICAgICAgaW5pdGlhbFN0YXRlQ2FjaGVbcHJvcF0gPSByZWR1Y2VyUmVzdWx0O1xuICAgICAgICByZXR1cm4gcmVkdWNlclJlc3VsdDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSkpO1xudmFyIG9yaWdpbmFsID0gKHN0YXRlKSA9PiB7XG4gIGlmICghaXNTdGF0ZVByb3h5KHN0YXRlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDI1KSA6IFwib3JpZ2luYWwgbXVzdCBiZSB1c2VkIG9uIHN0YXRlIFByb3h5XCIpO1xuICB9XG4gIHJldHVybiBzdGF0ZVtPUklHSU5BTF9TVEFURV07XG59O1xudmFyIGVtcHR5T2JqZWN0ID0ge307XG52YXIgbm9vcFJlZHVjZXIgPSAoc3RhdGUgPSBlbXB0eU9iamVjdCkgPT4gc3RhdGU7XG5mdW5jdGlvbiBjb21iaW5lU2xpY2VzKC4uLnNsaWNlcykge1xuICBjb25zdCByZWR1Y2VyTWFwID0gT2JqZWN0LmZyb21FbnRyaWVzKGdldFJlZHVjZXJzKHNsaWNlcykpO1xuICBjb25zdCBnZXRSZWR1Y2VyID0gKCkgPT4gT2JqZWN0LmtleXMocmVkdWNlck1hcCkubGVuZ3RoID8gY29tYmluZVJlZHVjZXJzMihyZWR1Y2VyTWFwKSA6IG5vb3BSZWR1Y2VyO1xuICBsZXQgcmVkdWNlciA9IGdldFJlZHVjZXIoKTtcbiAgZnVuY3Rpb24gY29tYmluZWRSZWR1Y2VyKHN0YXRlLCBhY3Rpb24pIHtcbiAgICByZXR1cm4gcmVkdWNlcihzdGF0ZSwgYWN0aW9uKTtcbiAgfVxuICBjb21iaW5lZFJlZHVjZXIud2l0aExhenlMb2FkZWRTbGljZXMgPSAoKSA9PiBjb21iaW5lZFJlZHVjZXI7XG4gIGNvbnN0IGluaXRpYWxTdGF0ZUNhY2hlID0ge307XG4gIGNvbnN0IGluamVjdCA9IChzbGljZSwgY29uZmlnID0ge30pID0+IHtcbiAgICBjb25zdCB7XG4gICAgICByZWR1Y2VyUGF0aCxcbiAgICAgIHJlZHVjZXI6IHJlZHVjZXJUb0luamVjdFxuICAgIH0gPSBzbGljZTtcbiAgICBjb25zdCBjdXJyZW50UmVkdWNlciA9IHJlZHVjZXJNYXBbcmVkdWNlclBhdGhdO1xuICAgIGlmICghY29uZmlnLm92ZXJyaWRlRXhpc3RpbmcgJiYgY3VycmVudFJlZHVjZXIgJiYgY3VycmVudFJlZHVjZXIgIT09IHJlZHVjZXJUb0luamVjdCkge1xuICAgICAgaWYgKHR5cGVvZiBwcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldmVsb3BtZW50XCIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgY2FsbGVkIFxcYGluamVjdFxcYCB0byBvdmVycmlkZSBhbHJlYWR5LWV4aXN0aW5nIHJlZHVjZXIgJHtyZWR1Y2VyUGF0aH0gd2l0aG91dCBzcGVjaWZ5aW5nIFxcYG92ZXJyaWRlRXhpc3Rpbmc6IHRydWVcXGBgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb21iaW5lZFJlZHVjZXI7XG4gICAgfVxuICAgIGlmIChjb25maWcub3ZlcnJpZGVFeGlzdGluZyAmJiBjdXJyZW50UmVkdWNlciAhPT0gcmVkdWNlclRvSW5qZWN0KSB7XG4gICAgICBkZWxldGUgaW5pdGlhbFN0YXRlQ2FjaGVbcmVkdWNlclBhdGhdO1xuICAgIH1cbiAgICByZWR1Y2VyTWFwW3JlZHVjZXJQYXRoXSA9IHJlZHVjZXJUb0luamVjdDtcbiAgICByZWR1Y2VyID0gZ2V0UmVkdWNlcigpO1xuICAgIHJldHVybiBjb21iaW5lZFJlZHVjZXI7XG4gIH07XG4gIGNvbnN0IHNlbGVjdG9yID0gT2JqZWN0LmFzc2lnbihmdW5jdGlvbiBtYWtlU2VsZWN0b3Ioc2VsZWN0b3JGbiwgc2VsZWN0U3RhdGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gc2VsZWN0b3IyKHN0YXRlLCAuLi5hcmdzKSB7XG4gICAgICByZXR1cm4gc2VsZWN0b3JGbihjcmVhdGVTdGF0ZVByb3h5KHNlbGVjdFN0YXRlID8gc2VsZWN0U3RhdGUoc3RhdGUsIC4uLmFyZ3MpIDogc3RhdGUsIHJlZHVjZXJNYXAsIGluaXRpYWxTdGF0ZUNhY2hlKSwgLi4uYXJncyk7XG4gICAgfTtcbiAgfSwge1xuICAgIG9yaWdpbmFsXG4gIH0pO1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihjb21iaW5lZFJlZHVjZXIsIHtcbiAgICBpbmplY3QsXG4gICAgc2VsZWN0b3JcbiAgfSk7XG59XG5cbi8vIHNyYy9mb3JtYXRQcm9kRXJyb3JNZXNzYWdlLnRzXG5mdW5jdGlvbiBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKGNvZGUpIHtcbiAgcmV0dXJuIGBNaW5pZmllZCBSZWR1eCBUb29sa2l0IGVycm9yICMke2NvZGV9OyB2aXNpdCBodHRwczovL3JlZHV4LXRvb2xraXQuanMub3JnL0Vycm9ycz9jb2RlPSR7Y29kZX0gZm9yIHRoZSBmdWxsIG1lc3NhZ2Ugb3IgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciBmdWxsIGVycm9ycy4gYDtcbn1cbmV4cG9ydCB7XG4gIFJlZHVjZXJUeXBlLFxuICBTSE9VTERfQVVUT0JBVENILFxuICBUYXNrQWJvcnRFcnJvcixcbiAgVHVwbGUsXG4gIGFkZExpc3RlbmVyLFxuICBhc3luY1RodW5rQ3JlYXRvcixcbiAgYXV0b0JhdGNoRW5oYW5jZXIsXG4gIGJ1aWxkQ3JlYXRlU2xpY2UsXG4gIGNsZWFyQWxsTGlzdGVuZXJzLFxuICBjb21iaW5lU2xpY2VzLFxuICBjb25maWd1cmVTdG9yZSxcbiAgY3JlYXRlQWN0aW9uLFxuICBjcmVhdGVBY3Rpb25DcmVhdG9ySW52YXJpYW50TWlkZGxld2FyZSxcbiAgY3JlYXRlQXN5bmNUaHVuayxcbiAgY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3IsXG4gIGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yQ3JlYXRvcixcbiAgY3JlYXRlRHluYW1pY01pZGRsZXdhcmUsXG4gIGNyZWF0ZUVudGl0eUFkYXB0ZXIsXG4gIGNyZWF0ZUltbXV0YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZSxcbiAgY3JlYXRlTGlzdGVuZXJNaWRkbGV3YXJlLFxuICBwcm9kdWNlIGFzIGNyZWF0ZU5leHRTdGF0ZSxcbiAgY3JlYXRlUmVkdWNlcixcbiAgY3JlYXRlU2VsZWN0b3IsXG4gIGNyZWF0ZVNlbGVjdG9yQ3JlYXRvcjIgYXMgY3JlYXRlU2VsZWN0b3JDcmVhdG9yLFxuICBjcmVhdGVTZXJpYWxpemFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUsXG4gIGNyZWF0ZVNsaWNlLFxuICBjdXJyZW50MyBhcyBjdXJyZW50LFxuICBmaW5kTm9uU2VyaWFsaXphYmxlVmFsdWUsXG4gIGZvcm1hdFByb2RFcnJvck1lc3NhZ2UsXG4gIGZyZWV6ZSxcbiAgaXNBY3Rpb25DcmVhdG9yLFxuICBpc0FsbE9mLFxuICBpc0FueU9mLFxuICBpc0FzeW5jVGh1bmtBY3Rpb24sXG4gIGlzRHJhZnQ1IGFzIGlzRHJhZnQsXG4gIGlzRlNBIGFzIGlzRmx1eFN0YW5kYXJkQWN0aW9uLFxuICBpc0Z1bGZpbGxlZCxcbiAgaXNJbW11dGFibGVEZWZhdWx0LFxuICBpc1BlbmRpbmcsXG4gIGlzUGxhaW4sXG4gIGlzUmVqZWN0ZWQsXG4gIGlzUmVqZWN0ZWRXaXRoVmFsdWUsXG4gIGxydU1lbW9pemUsXG4gIG1pbmlTZXJpYWxpemVFcnJvcixcbiAgbmFub2lkLFxuICBvcmlnaW5hbDIgYXMgb3JpZ2luYWwsXG4gIHByZXBhcmVBdXRvQmF0Y2hlZCxcbiAgcmVtb3ZlTGlzdGVuZXIsXG4gIHVud3JhcFJlc3VsdCxcbiAgd2Vha01hcE1lbW9pemUyIGFzIHdlYWtNYXBNZW1vaXplXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVkdXgtdG9vbGtpdC5tb2Rlcm4ubWpzLm1hcCIsIlwidXNlIGNsaWVudFwiO1xuZnVuY3Rpb24gTXQodCl7aWYoIXR8fHR5cGVvZiBkb2N1bWVudD09XCJ1bmRlZmluZWRcIilyZXR1cm47bGV0IG89ZG9jdW1lbnQuaGVhZHx8ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdLGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO2UudHlwZT1cInRleHQvY3NzXCIsby5maXJzdENoaWxkP28uaW5zZXJ0QmVmb3JlKGUsby5maXJzdENoaWxkKTpvLmFwcGVuZENoaWxkKGUpLGUuc3R5bGVTaGVldD9lLnN0eWxlU2hlZXQuY3NzVGV4dD10OmUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodCkpfU10KGA6cm9vdHstLXRvYXN0aWZ5LWNvbG9yLWxpZ2h0OiAjZmZmOy0tdG9hc3RpZnktY29sb3ItZGFyazogIzEyMTIxMjstLXRvYXN0aWZ5LWNvbG9yLWluZm86ICMzNDk4ZGI7LS10b2FzdGlmeS1jb2xvci1zdWNjZXNzOiAjMDdiYzBjOy0tdG9hc3RpZnktY29sb3Itd2FybmluZzogI2YxYzQwZjstLXRvYXN0aWZ5LWNvbG9yLWVycm9yOiBoc2woNiwgNzglLCA1NyUpOy0tdG9hc3RpZnktY29sb3ItdHJhbnNwYXJlbnQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgLjcpOy0tdG9hc3RpZnktaWNvbi1jb2xvci1pbmZvOiB2YXIoLS10b2FzdGlmeS1jb2xvci1pbmZvKTstLXRvYXN0aWZ5LWljb24tY29sb3Itc3VjY2VzczogdmFyKC0tdG9hc3RpZnktY29sb3Itc3VjY2Vzcyk7LS10b2FzdGlmeS1pY29uLWNvbG9yLXdhcm5pbmc6IHZhcigtLXRvYXN0aWZ5LWNvbG9yLXdhcm5pbmcpOy0tdG9hc3RpZnktaWNvbi1jb2xvci1lcnJvcjogdmFyKC0tdG9hc3RpZnktY29sb3ItZXJyb3IpOy0tdG9hc3RpZnktY29udGFpbmVyLXdpZHRoOiBmaXQtY29udGVudDstLXRvYXN0aWZ5LXRvYXN0LXdpZHRoOiAzMjBweDstLXRvYXN0aWZ5LXRvYXN0LW9mZnNldDogMTZweDstLXRvYXN0aWZ5LXRvYXN0LXRvcDogbWF4KHZhcigtLXRvYXN0aWZ5LXRvYXN0LW9mZnNldCksIGVudihzYWZlLWFyZWEtaW5zZXQtdG9wKSk7LS10b2FzdGlmeS10b2FzdC1yaWdodDogbWF4KHZhcigtLXRvYXN0aWZ5LXRvYXN0LW9mZnNldCksIGVudihzYWZlLWFyZWEtaW5zZXQtcmlnaHQpKTstLXRvYXN0aWZ5LXRvYXN0LWxlZnQ6IG1heCh2YXIoLS10b2FzdGlmeS10b2FzdC1vZmZzZXQpLCBlbnYoc2FmZS1hcmVhLWluc2V0LWxlZnQpKTstLXRvYXN0aWZ5LXRvYXN0LWJvdHRvbTogbWF4KHZhcigtLXRvYXN0aWZ5LXRvYXN0LW9mZnNldCksIGVudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tKSk7LS10b2FzdGlmeS10b2FzdC1iYWNrZ3JvdW5kOiAjZmZmOy0tdG9hc3RpZnktdG9hc3QtcGFkZGluZzogMTRweDstLXRvYXN0aWZ5LXRvYXN0LW1pbi1oZWlnaHQ6IDY0cHg7LS10b2FzdGlmeS10b2FzdC1tYXgtaGVpZ2h0OiA4MDBweDstLXRvYXN0aWZ5LXRvYXN0LWJkLXJhZGl1czogNnB4Oy0tdG9hc3RpZnktdG9hc3Qtc2hhZG93OiAwcHggNHB4IDEycHggcmdiYSgwLCAwLCAwLCAuMSk7LS10b2FzdGlmeS1mb250LWZhbWlseTogc2Fucy1zZXJpZjstLXRvYXN0aWZ5LXotaW5kZXg6IDk5OTk7LS10b2FzdGlmeS10ZXh0LWNvbG9yLWxpZ2h0OiAjNzU3NTc1Oy0tdG9hc3RpZnktdGV4dC1jb2xvci1kYXJrOiAjZmZmOy0tdG9hc3RpZnktdGV4dC1jb2xvci1pbmZvOiAjZmZmOy0tdG9hc3RpZnktdGV4dC1jb2xvci1zdWNjZXNzOiAjZmZmOy0tdG9hc3RpZnktdGV4dC1jb2xvci13YXJuaW5nOiAjZmZmOy0tdG9hc3RpZnktdGV4dC1jb2xvci1lcnJvcjogI2ZmZjstLXRvYXN0aWZ5LXNwaW5uZXItY29sb3I6ICM2MTYxNjE7LS10b2FzdGlmeS1zcGlubmVyLWNvbG9yLWVtcHR5LWFyZWE6ICNlMGUwZTA7LS10b2FzdGlmeS1jb2xvci1wcm9ncmVzcy1saWdodDogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAjNGNkOTY0LCAjNWFjOGZhLCAjMDA3YWZmLCAjMzRhYWRjLCAjNTg1NmQ2LCAjZmYyZDU1KTstLXRvYXN0aWZ5LWNvbG9yLXByb2dyZXNzLWRhcms6ICNiYjg2ZmM7LS10b2FzdGlmeS1jb2xvci1wcm9ncmVzcy1pbmZvOiB2YXIoLS10b2FzdGlmeS1jb2xvci1pbmZvKTstLXRvYXN0aWZ5LWNvbG9yLXByb2dyZXNzLXN1Y2Nlc3M6IHZhcigtLXRvYXN0aWZ5LWNvbG9yLXN1Y2Nlc3MpOy0tdG9hc3RpZnktY29sb3ItcHJvZ3Jlc3Mtd2FybmluZzogdmFyKC0tdG9hc3RpZnktY29sb3Itd2FybmluZyk7LS10b2FzdGlmeS1jb2xvci1wcm9ncmVzcy1lcnJvcjogdmFyKC0tdG9hc3RpZnktY29sb3ItZXJyb3IpOy0tdG9hc3RpZnktY29sb3ItcHJvZ3Jlc3MtYmdvOiAuMn0uVG9hc3RpZnlfX3RvYXN0LWNvbnRhaW5lcnt6LWluZGV4OnZhcigtLXRvYXN0aWZ5LXotaW5kZXgpOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCx2YXIoLS10b2FzdGlmeS16LWluZGV4KSk7cG9zaXRpb246Zml4ZWQ7d2lkdGg6dmFyKC0tdG9hc3RpZnktY29udGFpbmVyLXdpZHRoKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6I2ZmZjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5Ub2FzdGlmeV9fdG9hc3QtY29udGFpbmVyLS10b3AtbGVmdHt0b3A6dmFyKC0tdG9hc3RpZnktdG9hc3QtdG9wKTtsZWZ0OnZhcigtLXRvYXN0aWZ5LXRvYXN0LWxlZnQpfS5Ub2FzdGlmeV9fdG9hc3QtY29udGFpbmVyLS10b3AtY2VudGVye3RvcDp2YXIoLS10b2FzdGlmeS10b2FzdC10b3ApO2xlZnQ6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSk7YWxpZ24taXRlbXM6Y2VudGVyfS5Ub2FzdGlmeV9fdG9hc3QtY29udGFpbmVyLS10b3AtcmlnaHR7dG9wOnZhcigtLXRvYXN0aWZ5LXRvYXN0LXRvcCk7cmlnaHQ6dmFyKC0tdG9hc3RpZnktdG9hc3QtcmlnaHQpO2FsaWduLWl0ZW1zOmVuZH0uVG9hc3RpZnlfX3RvYXN0LWNvbnRhaW5lci0tYm90dG9tLWxlZnR7Ym90dG9tOnZhcigtLXRvYXN0aWZ5LXRvYXN0LWJvdHRvbSk7bGVmdDp2YXIoLS10b2FzdGlmeS10b2FzdC1sZWZ0KX0uVG9hc3RpZnlfX3RvYXN0LWNvbnRhaW5lci0tYm90dG9tLWNlbnRlcntib3R0b206dmFyKC0tdG9hc3RpZnktdG9hc3QtYm90dG9tKTtsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUpO2FsaWduLWl0ZW1zOmNlbnRlcn0uVG9hc3RpZnlfX3RvYXN0LWNvbnRhaW5lci0tYm90dG9tLXJpZ2h0e2JvdHRvbTp2YXIoLS10b2FzdGlmeS10b2FzdC1ib3R0b20pO3JpZ2h0OnZhcigtLXRvYXN0aWZ5LXRvYXN0LXJpZ2h0KTthbGlnbi1pdGVtczplbmR9LlRvYXN0aWZ5X190b2FzdHstLXk6IDA7cG9zaXRpb246cmVsYXRpdmU7dG91Y2gtYWN0aW9uOm5vbmU7d2lkdGg6dmFyKC0tdG9hc3RpZnktdG9hc3Qtd2lkdGgpO21pbi1oZWlnaHQ6dmFyKC0tdG9hc3RpZnktdG9hc3QtbWluLWhlaWdodCk7Ym94LXNpemluZzpib3JkZXItYm94O21hcmdpbi1ib3R0b206MXJlbTtwYWRkaW5nOnZhcigtLXRvYXN0aWZ5LXRvYXN0LXBhZGRpbmcpO2JvcmRlci1yYWRpdXM6dmFyKC0tdG9hc3RpZnktdG9hc3QtYmQtcmFkaXVzKTtib3gtc2hhZG93OnZhcigtLXRvYXN0aWZ5LXRvYXN0LXNoYWRvdyk7bWF4LWhlaWdodDp2YXIoLS10b2FzdGlmeS10b2FzdC1tYXgtaGVpZ2h0KTtmb250LWZhbWlseTp2YXIoLS10b2FzdGlmeS1mb250LWZhbWlseSk7ei1pbmRleDowO2Rpc3BsYXk6ZmxleDtmbGV4OjEgYXV0bzthbGlnbi1pdGVtczpjZW50ZXI7d29yZC1icmVhazpicmVhay13b3JkfUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDgwcHgpey5Ub2FzdGlmeV9fdG9hc3QtY29udGFpbmVye3dpZHRoOjEwMHZ3O2xlZnQ6ZW52KHNhZmUtYXJlYS1pbnNldC1sZWZ0KTttYXJnaW46MH0uVG9hc3RpZnlfX3RvYXN0LWNvbnRhaW5lci0tdG9wLWxlZnQsLlRvYXN0aWZ5X190b2FzdC1jb250YWluZXItLXRvcC1jZW50ZXIsLlRvYXN0aWZ5X190b2FzdC1jb250YWluZXItLXRvcC1yaWdodHt0b3A6ZW52KHNhZmUtYXJlYS1pbnNldC10b3ApO3RyYW5zZm9ybTp0cmFuc2xhdGUoMCl9LlRvYXN0aWZ5X190b2FzdC1jb250YWluZXItLWJvdHRvbS1sZWZ0LC5Ub2FzdGlmeV9fdG9hc3QtY29udGFpbmVyLS1ib3R0b20tY2VudGVyLC5Ub2FzdGlmeV9fdG9hc3QtY29udGFpbmVyLS1ib3R0b20tcmlnaHR7Ym90dG9tOmVudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tKTt0cmFuc2Zvcm06dHJhbnNsYXRlKDApfS5Ub2FzdGlmeV9fdG9hc3QtY29udGFpbmVyLS1ydGx7cmlnaHQ6ZW52KHNhZmUtYXJlYS1pbnNldC1yaWdodCk7bGVmdDppbml0aWFsfS5Ub2FzdGlmeV9fdG9hc3R7LS10b2FzdGlmeS10b2FzdC13aWR0aDogMTAwJTttYXJnaW4tYm90dG9tOjA7Ym9yZGVyLXJhZGl1czowfX0uVG9hc3RpZnlfX3RvYXN0LWNvbnRhaW5lcltkYXRhLXN0YWNrZWQ9dHJ1ZV17d2lkdGg6dmFyKC0tdG9hc3RpZnktdG9hc3Qtd2lkdGgpfS5Ub2FzdGlmeV9fdG9hc3QtLXN0YWNrZWR7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTAwJTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCx2YXIoLS15KSwwKSBzY2FsZSh2YXIoLS1zKSk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzfS5Ub2FzdGlmeV9fdG9hc3QtLXN0YWNrZWRbZGF0YS1jb2xsYXBzZWRdIC5Ub2FzdGlmeV9fdG9hc3QtYm9keSwuVG9hc3RpZnlfX3RvYXN0LS1zdGFja2VkW2RhdGEtY29sbGFwc2VkXSAuVG9hc3RpZnlfX2Nsb3NlLWJ1dHRvbnt0cmFuc2l0aW9uOm9wYWNpdHkgLjFzfS5Ub2FzdGlmeV9fdG9hc3QtLXN0YWNrZWRbZGF0YS1jb2xsYXBzZWQ9ZmFsc2Vde292ZXJmbG93OnZpc2libGV9LlRvYXN0aWZ5X190b2FzdC0tc3RhY2tlZFtkYXRhLWNvbGxhcHNlZD10cnVlXTpub3QoOmxhc3QtY2hpbGQpPip7b3BhY2l0eTowfS5Ub2FzdGlmeV9fdG9hc3QtLXN0YWNrZWQ6YWZ0ZXJ7Y29udGVudDpcIlwiO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtyaWdodDowO2hlaWdodDpjYWxjKHZhcigtLWcpICogMXB4KTtib3R0b206MTAwJX0uVG9hc3RpZnlfX3RvYXN0LS1zdGFja2VkW2RhdGEtcG9zPXRvcF17dG9wOjB9LlRvYXN0aWZ5X190b2FzdC0tc3RhY2tlZFtkYXRhLXBvcz1ib3Rde2JvdHRvbTowfS5Ub2FzdGlmeV9fdG9hc3QtLXN0YWNrZWRbZGF0YS1wb3M9Ym90XS5Ub2FzdGlmeV9fdG9hc3QtLXN0YWNrZWQ6YmVmb3Jle3RyYW5zZm9ybS1vcmlnaW46dG9wfS5Ub2FzdGlmeV9fdG9hc3QtLXN0YWNrZWRbZGF0YS1wb3M9dG9wXS5Ub2FzdGlmeV9fdG9hc3QtLXN0YWNrZWQ6YmVmb3Jle3RyYW5zZm9ybS1vcmlnaW46Ym90dG9tfS5Ub2FzdGlmeV9fdG9hc3QtLXN0YWNrZWQ6YmVmb3Jle2NvbnRlbnQ6XCJcIjtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtoZWlnaHQ6MTAwJTt0cmFuc2Zvcm06c2NhbGVZKDMpO3otaW5kZXg6LTF9LlRvYXN0aWZ5X190b2FzdC0tcnRse2RpcmVjdGlvbjpydGx9LlRvYXN0aWZ5X190b2FzdC0tY2xvc2Utb24tY2xpY2t7Y3Vyc29yOnBvaW50ZXJ9LlRvYXN0aWZ5X190b2FzdC1pY29ue21hcmdpbi1pbmxpbmUtZW5kOjEwcHg7d2lkdGg6MjJweDtmbGV4LXNocmluazowO2Rpc3BsYXk6ZmxleH0uVG9hc3RpZnktLWFuaW1hdGV7YW5pbWF0aW9uLWZpbGwtbW9kZTpib3RoO2FuaW1hdGlvbi1kdXJhdGlvbjouNXN9LlRvYXN0aWZ5LS1hbmltYXRlLWljb257YW5pbWF0aW9uLWZpbGwtbW9kZTpib3RoO2FuaW1hdGlvbi1kdXJhdGlvbjouM3N9LlRvYXN0aWZ5X190b2FzdC10aGVtZS0tZGFya3tiYWNrZ3JvdW5kOnZhcigtLXRvYXN0aWZ5LWNvbG9yLWRhcmspO2NvbG9yOnZhcigtLXRvYXN0aWZ5LXRleHQtY29sb3ItZGFyayl9LlRvYXN0aWZ5X190b2FzdC10aGVtZS0tbGlnaHQsLlRvYXN0aWZ5X190b2FzdC10aGVtZS0tY29sb3JlZC5Ub2FzdGlmeV9fdG9hc3QtLWRlZmF1bHR7YmFja2dyb3VuZDp2YXIoLS10b2FzdGlmeS1jb2xvci1saWdodCk7Y29sb3I6dmFyKC0tdG9hc3RpZnktdGV4dC1jb2xvci1saWdodCl9LlRvYXN0aWZ5X190b2FzdC10aGVtZS0tY29sb3JlZC5Ub2FzdGlmeV9fdG9hc3QtLWluZm97Y29sb3I6dmFyKC0tdG9hc3RpZnktdGV4dC1jb2xvci1pbmZvKTtiYWNrZ3JvdW5kOnZhcigtLXRvYXN0aWZ5LWNvbG9yLWluZm8pfS5Ub2FzdGlmeV9fdG9hc3QtdGhlbWUtLWNvbG9yZWQuVG9hc3RpZnlfX3RvYXN0LS1zdWNjZXNze2NvbG9yOnZhcigtLXRvYXN0aWZ5LXRleHQtY29sb3Itc3VjY2Vzcyk7YmFja2dyb3VuZDp2YXIoLS10b2FzdGlmeS1jb2xvci1zdWNjZXNzKX0uVG9hc3RpZnlfX3RvYXN0LXRoZW1lLS1jb2xvcmVkLlRvYXN0aWZ5X190b2FzdC0td2FybmluZ3tjb2xvcjp2YXIoLS10b2FzdGlmeS10ZXh0LWNvbG9yLXdhcm5pbmcpO2JhY2tncm91bmQ6dmFyKC0tdG9hc3RpZnktY29sb3Itd2FybmluZyl9LlRvYXN0aWZ5X190b2FzdC10aGVtZS0tY29sb3JlZC5Ub2FzdGlmeV9fdG9hc3QtLWVycm9ye2NvbG9yOnZhcigtLXRvYXN0aWZ5LXRleHQtY29sb3ItZXJyb3IpO2JhY2tncm91bmQ6dmFyKC0tdG9hc3RpZnktY29sb3ItZXJyb3IpfS5Ub2FzdGlmeV9fcHJvZ3Jlc3MtYmFyLXRoZW1lLS1saWdodHtiYWNrZ3JvdW5kOnZhcigtLXRvYXN0aWZ5LWNvbG9yLXByb2dyZXNzLWxpZ2h0KX0uVG9hc3RpZnlfX3Byb2dyZXNzLWJhci10aGVtZS0tZGFya3tiYWNrZ3JvdW5kOnZhcigtLXRvYXN0aWZ5LWNvbG9yLXByb2dyZXNzLWRhcmspfS5Ub2FzdGlmeV9fcHJvZ3Jlc3MtYmFyLS1pbmZve2JhY2tncm91bmQ6dmFyKC0tdG9hc3RpZnktY29sb3ItcHJvZ3Jlc3MtaW5mbyl9LlRvYXN0aWZ5X19wcm9ncmVzcy1iYXItLXN1Y2Nlc3N7YmFja2dyb3VuZDp2YXIoLS10b2FzdGlmeS1jb2xvci1wcm9ncmVzcy1zdWNjZXNzKX0uVG9hc3RpZnlfX3Byb2dyZXNzLWJhci0td2FybmluZ3tiYWNrZ3JvdW5kOnZhcigtLXRvYXN0aWZ5LWNvbG9yLXByb2dyZXNzLXdhcm5pbmcpfS5Ub2FzdGlmeV9fcHJvZ3Jlc3MtYmFyLS1lcnJvcntiYWNrZ3JvdW5kOnZhcigtLXRvYXN0aWZ5LWNvbG9yLXByb2dyZXNzLWVycm9yKX0uVG9hc3RpZnlfX3Byb2dyZXNzLWJhci10aGVtZS0tY29sb3JlZC5Ub2FzdGlmeV9fcHJvZ3Jlc3MtYmFyLS1pbmZvLC5Ub2FzdGlmeV9fcHJvZ3Jlc3MtYmFyLXRoZW1lLS1jb2xvcmVkLlRvYXN0aWZ5X19wcm9ncmVzcy1iYXItLXN1Y2Nlc3MsLlRvYXN0aWZ5X19wcm9ncmVzcy1iYXItdGhlbWUtLWNvbG9yZWQuVG9hc3RpZnlfX3Byb2dyZXNzLWJhci0td2FybmluZywuVG9hc3RpZnlfX3Byb2dyZXNzLWJhci10aGVtZS0tY29sb3JlZC5Ub2FzdGlmeV9fcHJvZ3Jlc3MtYmFyLS1lcnJvcntiYWNrZ3JvdW5kOnZhcigtLXRvYXN0aWZ5LWNvbG9yLXRyYW5zcGFyZW50KX0uVG9hc3RpZnlfX2Nsb3NlLWJ1dHRvbntjb2xvcjojZmZmO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo2cHg7cmlnaHQ6NnB4O2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7b3V0bGluZTpub25lO2JvcmRlcjpub25lO3BhZGRpbmc6MDtjdXJzb3I6cG9pbnRlcjtvcGFjaXR5Oi43O3RyYW5zaXRpb246LjNzIGVhc2U7ei1pbmRleDoxfS5Ub2FzdGlmeV9fdG9hc3QtLXJ0bCAuVG9hc3RpZnlfX2Nsb3NlLWJ1dHRvbntsZWZ0OjZweDtyaWdodDp1bnNldH0uVG9hc3RpZnlfX2Nsb3NlLWJ1dHRvbi0tbGlnaHR7Y29sb3I6IzAwMDtvcGFjaXR5Oi4zfS5Ub2FzdGlmeV9fY2xvc2UtYnV0dG9uPnN2Z3tmaWxsOmN1cnJlbnRDb2xvcjtoZWlnaHQ6MTZweDt3aWR0aDoxNHB4fS5Ub2FzdGlmeV9fY2xvc2UtYnV0dG9uOmhvdmVyLC5Ub2FzdGlmeV9fY2xvc2UtYnV0dG9uOmZvY3Vze29wYWNpdHk6MX1Aa2V5ZnJhbWVzIFRvYXN0aWZ5X190cmFja1Byb2dyZXNzezAle3RyYW5zZm9ybTpzY2FsZVgoMSl9dG97dHJhbnNmb3JtOnNjYWxlWCgwKX19LlRvYXN0aWZ5X19wcm9ncmVzcy1iYXJ7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7bGVmdDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ei1pbmRleDoxO29wYWNpdHk6Ljc7dHJhbnNmb3JtLW9yaWdpbjpsZWZ0fS5Ub2FzdGlmeV9fcHJvZ3Jlc3MtYmFyLS1hbmltYXRlZHthbmltYXRpb246VG9hc3RpZnlfX3RyYWNrUHJvZ3Jlc3MgbGluZWFyIDEgZm9yd2FyZHN9LlRvYXN0aWZ5X19wcm9ncmVzcy1iYXItLWNvbnRyb2xsZWR7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjJzfS5Ub2FzdGlmeV9fcHJvZ3Jlc3MtYmFyLS1ydGx7cmlnaHQ6MDtsZWZ0OmluaXRpYWw7dHJhbnNmb3JtLW9yaWdpbjpyaWdodDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOmluaXRpYWx9LlRvYXN0aWZ5X19wcm9ncmVzcy1iYXItLXdycHtwb3NpdGlvbjphYnNvbHV0ZTtvdmVyZmxvdzpoaWRkZW47Ym90dG9tOjA7bGVmdDowO3dpZHRoOjEwMCU7aGVpZ2h0OjVweDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLXRvYXN0aWZ5LXRvYXN0LWJkLXJhZGl1cyk7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0tdG9hc3RpZnktdG9hc3QtYmQtcmFkaXVzKX0uVG9hc3RpZnlfX3Byb2dyZXNzLWJhci0td3JwW2RhdGEtaGlkZGVuPXRydWVde29wYWNpdHk6MH0uVG9hc3RpZnlfX3Byb2dyZXNzLWJhci0tYmd7b3BhY2l0eTp2YXIoLS10b2FzdGlmeS1jb2xvci1wcm9ncmVzcy1iZ28pO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCV9LlRvYXN0aWZ5X19zcGlubmVye3dpZHRoOjIwcHg7aGVpZ2h0OjIwcHg7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjoycHggc29saWQ7Ym9yZGVyLXJhZGl1czoxMDAlO2JvcmRlci1jb2xvcjp2YXIoLS10b2FzdGlmeS1zcGlubmVyLWNvbG9yLWVtcHR5LWFyZWEpO2JvcmRlci1yaWdodC1jb2xvcjp2YXIoLS10b2FzdGlmeS1zcGlubmVyLWNvbG9yKTthbmltYXRpb246VG9hc3RpZnlfX3NwaW4gLjY1cyBsaW5lYXIgaW5maW5pdGV9QGtleWZyYW1lcyBUb2FzdGlmeV9fYm91bmNlSW5SaWdodHswJSw2MCUsNzUlLDkwJSx0b3thbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguMjE1LC42MSwuMzU1LDEpfTAle29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMzAwMHB4LDAsMCl9NjAle29wYWNpdHk6MTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoLTI1cHgsMCwwKX03NSV7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDEwcHgsMCwwKX05MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKC01cHgsMCwwKX10b3t0cmFuc2Zvcm06bm9uZX19QGtleWZyYW1lcyBUb2FzdGlmeV9fYm91bmNlT3V0UmlnaHR7MjAle29wYWNpdHk6MTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoLTIwcHgsdmFyKC0teSksMCl9dG97b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgyMDAwcHgsdmFyKC0teSksMCl9fUBrZXlmcmFtZXMgVG9hc3RpZnlfX2JvdW5jZUluTGVmdHswJSw2MCUsNzUlLDkwJSx0b3thbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguMjE1LC42MSwuMzU1LDEpfTAle29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoLTMwMDBweCwwLDApfTYwJXtvcGFjaXR5OjE7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDI1cHgsMCwwKX03NSV7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKC0xMHB4LDAsMCl9OTAle3RyYW5zZm9ybTp0cmFuc2xhdGUzZCg1cHgsMCwwKX10b3t0cmFuc2Zvcm06bm9uZX19QGtleWZyYW1lcyBUb2FzdGlmeV9fYm91bmNlT3V0TGVmdHsyMCV7b3BhY2l0eToxO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgyMHB4LHZhcigtLXkpLDApfXRve29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoLTIwMDBweCx2YXIoLS15KSwwKX19QGtleWZyYW1lcyBUb2FzdGlmeV9fYm91bmNlSW5VcHswJSw2MCUsNzUlLDkwJSx0b3thbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguMjE1LC42MSwuMzU1LDEpfTAle29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwzMDAwcHgsMCl9NjAle29wYWNpdHk6MTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwtMjBweCwwKX03NSV7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMTBweCwwKX05MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsLTVweCwwKX10b3t0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX19QGtleWZyYW1lcyBUb2FzdGlmeV9fYm91bmNlT3V0VXB7MjAle3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLGNhbGModmFyKC0teSkgLSAxMHB4KSwwKX00MCUsNDUle29wYWNpdHk6MTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCxjYWxjKHZhcigtLXkpICsgMjBweCksMCl9dG97b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLC0yMDAwcHgsMCl9fUBrZXlmcmFtZXMgVG9hc3RpZnlfX2JvdW5jZUluRG93bnswJSw2MCUsNzUlLDkwJSx0b3thbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguMjE1LC42MSwuMzU1LDEpfTAle29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwtMzAwMHB4LDApfTYwJXtvcGFjaXR5OjE7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMjVweCwwKX03NSV7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsLTEwcHgsMCl9OTAle3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDVweCwwKX10b3t0cmFuc2Zvcm06bm9uZX19QGtleWZyYW1lcyBUb2FzdGlmeV9fYm91bmNlT3V0RG93bnsyMCV7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsY2FsYyh2YXIoLS15KSAtIDEwcHgpLDApfTQwJSw0NSV7b3BhY2l0eToxO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLGNhbGModmFyKC0teSkgKyAyMHB4KSwwKX10b3tvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMjAwMHB4LDApfX0uVG9hc3RpZnlfX2JvdW5jZS1lbnRlci0tdG9wLWxlZnQsLlRvYXN0aWZ5X19ib3VuY2UtZW50ZXItLWJvdHRvbS1sZWZ0e2FuaW1hdGlvbi1uYW1lOlRvYXN0aWZ5X19ib3VuY2VJbkxlZnR9LlRvYXN0aWZ5X19ib3VuY2UtZW50ZXItLXRvcC1yaWdodCwuVG9hc3RpZnlfX2JvdW5jZS1lbnRlci0tYm90dG9tLXJpZ2h0e2FuaW1hdGlvbi1uYW1lOlRvYXN0aWZ5X19ib3VuY2VJblJpZ2h0fS5Ub2FzdGlmeV9fYm91bmNlLWVudGVyLS10b3AtY2VudGVye2FuaW1hdGlvbi1uYW1lOlRvYXN0aWZ5X19ib3VuY2VJbkRvd259LlRvYXN0aWZ5X19ib3VuY2UtZW50ZXItLWJvdHRvbS1jZW50ZXJ7YW5pbWF0aW9uLW5hbWU6VG9hc3RpZnlfX2JvdW5jZUluVXB9LlRvYXN0aWZ5X19ib3VuY2UtZXhpdC0tdG9wLWxlZnQsLlRvYXN0aWZ5X19ib3VuY2UtZXhpdC0tYm90dG9tLWxlZnR7YW5pbWF0aW9uLW5hbWU6VG9hc3RpZnlfX2JvdW5jZU91dExlZnR9LlRvYXN0aWZ5X19ib3VuY2UtZXhpdC0tdG9wLXJpZ2h0LC5Ub2FzdGlmeV9fYm91bmNlLWV4aXQtLWJvdHRvbS1yaWdodHthbmltYXRpb24tbmFtZTpUb2FzdGlmeV9fYm91bmNlT3V0UmlnaHR9LlRvYXN0aWZ5X19ib3VuY2UtZXhpdC0tdG9wLWNlbnRlcnthbmltYXRpb24tbmFtZTpUb2FzdGlmeV9fYm91bmNlT3V0VXB9LlRvYXN0aWZ5X19ib3VuY2UtZXhpdC0tYm90dG9tLWNlbnRlcnthbmltYXRpb24tbmFtZTpUb2FzdGlmeV9fYm91bmNlT3V0RG93bn1Aa2V5ZnJhbWVzIFRvYXN0aWZ5X196b29tSW57MCV7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZTNkKC4zLC4zLC4zKX01MCV7b3BhY2l0eToxfX1Aa2V5ZnJhbWVzIFRvYXN0aWZ5X196b29tT3V0ezAle29wYWNpdHk6MX01MCV7b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLHZhcigtLXkpLDApIHNjYWxlM2QoLjMsLjMsLjMpfXRve29wYWNpdHk6MH19LlRvYXN0aWZ5X196b29tLWVudGVye2FuaW1hdGlvbi1uYW1lOlRvYXN0aWZ5X196b29tSW59LlRvYXN0aWZ5X196b29tLWV4aXR7YW5pbWF0aW9uLW5hbWU6VG9hc3RpZnlfX3pvb21PdXR9QGtleWZyYW1lcyBUb2FzdGlmeV9fZmxpcEluezAle3RyYW5zZm9ybTpwZXJzcGVjdGl2ZSg0MDBweCkgcm90YXRlWCg5MGRlZyk7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLWluO29wYWNpdHk6MH00MCV7dHJhbnNmb3JtOnBlcnNwZWN0aXZlKDQwMHB4KSByb3RhdGVYKC0yMGRlZyk7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLWlufTYwJXt0cmFuc2Zvcm06cGVyc3BlY3RpdmUoNDAwcHgpIHJvdGF0ZVgoMTBkZWcpO29wYWNpdHk6MX04MCV7dHJhbnNmb3JtOnBlcnNwZWN0aXZlKDQwMHB4KSByb3RhdGVYKC01ZGVnKX10b3t0cmFuc2Zvcm06cGVyc3BlY3RpdmUoNDAwcHgpfX1Aa2V5ZnJhbWVzIFRvYXN0aWZ5X19mbGlwT3V0ezAle3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLHZhcigtLXkpLDApIHBlcnNwZWN0aXZlKDQwMHB4KX0zMCV7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsdmFyKC0teSksMCkgcGVyc3BlY3RpdmUoNDAwcHgpIHJvdGF0ZVgoLTIwZGVnKTtvcGFjaXR5OjF9dG97dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsdmFyKC0teSksMCkgcGVyc3BlY3RpdmUoNDAwcHgpIHJvdGF0ZVgoOTBkZWcpO29wYWNpdHk6MH19LlRvYXN0aWZ5X19mbGlwLWVudGVye2FuaW1hdGlvbi1uYW1lOlRvYXN0aWZ5X19mbGlwSW59LlRvYXN0aWZ5X19mbGlwLWV4aXR7YW5pbWF0aW9uLW5hbWU6VG9hc3RpZnlfX2ZsaXBPdXR9QGtleWZyYW1lcyBUb2FzdGlmeV9fc2xpZGVJblJpZ2h0ezAle3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgxMTAlLDAsMCk7dmlzaWJpbGl0eTp2aXNpYmxlfXRve3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLHZhcigtLXkpLDApfX1Aa2V5ZnJhbWVzIFRvYXN0aWZ5X19zbGlkZUluTGVmdHswJXt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoLTExMCUsMCwwKTt2aXNpYmlsaXR5OnZpc2libGV9dG97dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsdmFyKC0teSksMCl9fUBrZXlmcmFtZXMgVG9hc3RpZnlfX3NsaWRlSW5VcHswJXt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwxMTAlLDApO3Zpc2liaWxpdHk6dmlzaWJsZX10b3t0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCx2YXIoLS15KSwwKX19QGtleWZyYW1lcyBUb2FzdGlmeV9fc2xpZGVJbkRvd257MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsLTExMCUsMCk7dmlzaWJpbGl0eTp2aXNpYmxlfXRve3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLHZhcigtLXkpLDApfX1Aa2V5ZnJhbWVzIFRvYXN0aWZ5X19zbGlkZU91dFJpZ2h0ezAle3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLHZhcigtLXkpLDApfXRve3Zpc2liaWxpdHk6aGlkZGVuO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgxMTAlLHZhcigtLXkpLDApfX1Aa2V5ZnJhbWVzIFRvYXN0aWZ5X19zbGlkZU91dExlZnR7MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsdmFyKC0teSksMCl9dG97dmlzaWJpbGl0eTpoaWRkZW47dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKC0xMTAlLHZhcigtLXkpLDApfX1Aa2V5ZnJhbWVzIFRvYXN0aWZ5X19zbGlkZU91dERvd257MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsdmFyKC0teSksMCl9dG97dmlzaWJpbGl0eTpoaWRkZW47dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsNTAwcHgsMCl9fUBrZXlmcmFtZXMgVG9hc3RpZnlfX3NsaWRlT3V0VXB7MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsdmFyKC0teSksMCl9dG97dmlzaWJpbGl0eTpoaWRkZW47dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsLTUwMHB4LDApfX0uVG9hc3RpZnlfX3NsaWRlLWVudGVyLS10b3AtbGVmdCwuVG9hc3RpZnlfX3NsaWRlLWVudGVyLS1ib3R0b20tbGVmdHthbmltYXRpb24tbmFtZTpUb2FzdGlmeV9fc2xpZGVJbkxlZnR9LlRvYXN0aWZ5X19zbGlkZS1lbnRlci0tdG9wLXJpZ2h0LC5Ub2FzdGlmeV9fc2xpZGUtZW50ZXItLWJvdHRvbS1yaWdodHthbmltYXRpb24tbmFtZTpUb2FzdGlmeV9fc2xpZGVJblJpZ2h0fS5Ub2FzdGlmeV9fc2xpZGUtZW50ZXItLXRvcC1jZW50ZXJ7YW5pbWF0aW9uLW5hbWU6VG9hc3RpZnlfX3NsaWRlSW5Eb3dufS5Ub2FzdGlmeV9fc2xpZGUtZW50ZXItLWJvdHRvbS1jZW50ZXJ7YW5pbWF0aW9uLW5hbWU6VG9hc3RpZnlfX3NsaWRlSW5VcH0uVG9hc3RpZnlfX3NsaWRlLWV4aXQtLXRvcC1sZWZ0LC5Ub2FzdGlmeV9fc2xpZGUtZXhpdC0tYm90dG9tLWxlZnR7YW5pbWF0aW9uLW5hbWU6VG9hc3RpZnlfX3NsaWRlT3V0TGVmdDthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmVhc2UtaW47YW5pbWF0aW9uLWR1cmF0aW9uOi4zc30uVG9hc3RpZnlfX3NsaWRlLWV4aXQtLXRvcC1yaWdodCwuVG9hc3RpZnlfX3NsaWRlLWV4aXQtLWJvdHRvbS1yaWdodHthbmltYXRpb24tbmFtZTpUb2FzdGlmeV9fc2xpZGVPdXRSaWdodDthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmVhc2UtaW47YW5pbWF0aW9uLWR1cmF0aW9uOi4zc30uVG9hc3RpZnlfX3NsaWRlLWV4aXQtLXRvcC1jZW50ZXJ7YW5pbWF0aW9uLW5hbWU6VG9hc3RpZnlfX3NsaWRlT3V0VXA7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLWluO2FuaW1hdGlvbi1kdXJhdGlvbjouM3N9LlRvYXN0aWZ5X19zbGlkZS1leGl0LS1ib3R0b20tY2VudGVye2FuaW1hdGlvbi1uYW1lOlRvYXN0aWZ5X19zbGlkZU91dERvd247YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLWluO2FuaW1hdGlvbi1kdXJhdGlvbjouM3N9QGtleWZyYW1lcyBUb2FzdGlmeV9fc3BpbnswJXt0cmFuc2Zvcm06cm90YXRlKDApfXRve3RyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKX19XG5gKTtpbXBvcnR7aXNWYWxpZEVsZW1lbnQgYXMgJHR9ZnJvbVwicmVhY3RcIjt2YXIgTD10PT50eXBlb2YgdD09XCJudW1iZXJcIiYmIWlzTmFOKHQpLE49dD0+dHlwZW9mIHQ9PVwic3RyaW5nXCIsUD10PT50eXBlb2YgdD09XCJmdW5jdGlvblwiLG10PXQ9Pk4odCl8fEwodCksQj10PT5OKHQpfHxQKHQpP3Q6bnVsbCxwdD0odCxvKT0+dD09PSExfHxMKHQpJiZ0PjA/dDpvLHo9dD0+JHQodCl8fE4odCl8fFAodCl8fEwodCk7aW1wb3J0IHV0LHt1c2VFZmZlY3QgYXMgUnQsdXNlTGF5b3V0RWZmZWN0IGFzIEJ0LHVzZVJlZiBhcyB6dH1mcm9tXCJyZWFjdFwiO2Z1bmN0aW9uIFoodCxvLGU9MzAwKXtsZXR7c2Nyb2xsSGVpZ2h0OnIsc3R5bGU6c309dDtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntzLm1pbkhlaWdodD1cImluaXRpYWxcIixzLmhlaWdodD1yK1wicHhcIixzLnRyYW5zaXRpb249YGFsbCAke2V9bXNgLHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3MuaGVpZ2h0PVwiMFwiLHMucGFkZGluZz1cIjBcIixzLm1hcmdpbj1cIjBcIixzZXRUaW1lb3V0KG8sZSl9KX0pfWZ1bmN0aW9uICQoe2VudGVyOnQsZXhpdDpvLGFwcGVuZFBvc2l0aW9uOmU9ITEsY29sbGFwc2U6cj0hMCxjb2xsYXBzZUR1cmF0aW9uOnM9MzAwfSl7cmV0dXJuIGZ1bmN0aW9uKHtjaGlsZHJlbjphLHBvc2l0aW9uOmQscHJldmVudEV4aXRUcmFuc2l0aW9uOmMsZG9uZTpULG5vZGVSZWY6Zyxpc0luOnYscGxheVRvYXN0Onh9KXtsZXQgQz1lP2Ake3R9LS0ke2R9YDp0LFM9ZT9gJHtvfS0tJHtkfWA6byxFPXp0KDApO3JldHVybiBCdCgoKT0+e2xldCBmPWcuY3VycmVudCxwPUMuc3BsaXQoXCIgXCIpLGI9bj0+e24udGFyZ2V0PT09Zy5jdXJyZW50JiYoeCgpLGYucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFuaW1hdGlvbmVuZFwiLGIpLGYucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFuaW1hdGlvbmNhbmNlbFwiLGIpLEUuY3VycmVudD09PTAmJm4udHlwZSE9PVwiYW5pbWF0aW9uY2FuY2VsXCImJmYuY2xhc3NMaXN0LnJlbW92ZSguLi5wKSl9OygoKT0+e2YuY2xhc3NMaXN0LmFkZCguLi5wKSxmLmFkZEV2ZW50TGlzdGVuZXIoXCJhbmltYXRpb25lbmRcIixiKSxmLmFkZEV2ZW50TGlzdGVuZXIoXCJhbmltYXRpb25jYW5jZWxcIixiKX0pKCl9LFtdKSxSdCgoKT0+e2xldCBmPWcuY3VycmVudCxwPSgpPT57Zi5yZW1vdmVFdmVudExpc3RlbmVyKFwiYW5pbWF0aW9uZW5kXCIscCkscj9aKGYsVCxzKTpUKCl9O3Z8fChjP3AoKTooKCk9PntFLmN1cnJlbnQ9MSxmLmNsYXNzTmFtZSs9YCAke1N9YCxmLmFkZEV2ZW50TGlzdGVuZXIoXCJhbmltYXRpb25lbmRcIixwKX0pKCkpfSxbdl0pLHV0LmNyZWF0ZUVsZW1lbnQodXQuRnJhZ21lbnQsbnVsbCxhKX19aW1wb3J0e2Nsb25lRWxlbWVudCBhcyBGdCxpc1ZhbGlkRWxlbWVudCBhcyBVdH1mcm9tXCJyZWFjdFwiO2Z1bmN0aW9uIEoodCxvKXtyZXR1cm57Y29udGVudDp0dCh0LmNvbnRlbnQsdC5wcm9wcyksY29udGFpbmVySWQ6dC5wcm9wcy5jb250YWluZXJJZCxpZDp0LnByb3BzLnRvYXN0SWQsdGhlbWU6dC5wcm9wcy50aGVtZSx0eXBlOnQucHJvcHMudHlwZSxkYXRhOnQucHJvcHMuZGF0YXx8e30saXNMb2FkaW5nOnQucHJvcHMuaXNMb2FkaW5nLGljb246dC5wcm9wcy5pY29uLHJlYXNvbjp0LnJlbW92YWxSZWFzb24sc3RhdHVzOm99fWZ1bmN0aW9uIHR0KHQsbyxlPSExKXtyZXR1cm4gVXQodCkmJiFOKHQudHlwZSk/RnQodCx7Y2xvc2VUb2FzdDpvLmNsb3NlVG9hc3QsdG9hc3RQcm9wczpvLGRhdGE6by5kYXRhLGlzUGF1c2VkOmV9KTpQKHQpP3Qoe2Nsb3NlVG9hc3Q6by5jbG9zZVRvYXN0LHRvYXN0UHJvcHM6byxkYXRhOm8uZGF0YSxpc1BhdXNlZDplfSk6dH1pbXBvcnQgb3QgZnJvbVwicmVhY3RcIjtmdW5jdGlvbiB5dCh7Y2xvc2VUb2FzdDp0LHRoZW1lOm8sYXJpYUxhYmVsOmU9XCJjbG9zZVwifSl7cmV0dXJuIG90LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIix7Y2xhc3NOYW1lOmBUb2FzdGlmeV9fY2xvc2UtYnV0dG9uIFRvYXN0aWZ5X19jbG9zZS1idXR0b24tLSR7b31gLHR5cGU6XCJidXR0b25cIixvbkNsaWNrOnI9PntyLnN0b3BQcm9wYWdhdGlvbigpLHQoITApfSxcImFyaWEtbGFiZWxcIjplfSxvdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIse1wiYXJpYS1oaWRkZW5cIjpcInRydWVcIix2aWV3Qm94OlwiMCAwIDE0IDE2XCJ9LG90LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNNy43MSA4LjIzbDMuNzUgMy43NS0xLjQ4IDEuNDgtMy43NS0zLjc1LTMuNzUgMy43NUwxIDExLjk4bDMuNzUtMy43NUwxIDQuNDggMi40OCAzbDMuNzUgMy43NUw5Ljk4IDNsMS40OCAxLjQ4LTMuNzUgMy43NXpcIn0pKSl9aW1wb3J0IGV0IGZyb21cInJlYWN0XCI7aW1wb3J0IFR0IGZyb21cImNsc3hcIjtmdW5jdGlvbiBndCh7ZGVsYXk6dCxpc1J1bm5pbmc6byxjbG9zZVRvYXN0OmUsdHlwZTpyPVwiZGVmYXVsdFwiLGhpZGU6cyxjbGFzc05hbWU6bCxjb250cm9sbGVkUHJvZ3Jlc3M6YSxwcm9ncmVzczpkLHJ0bDpjLGlzSW46VCx0aGVtZTpnfSl7bGV0IHY9c3x8YSYmZD09PTAseD17YW5pbWF0aW9uRHVyYXRpb246YCR7dH1tc2AsYW5pbWF0aW9uUGxheVN0YXRlOm8/XCJydW5uaW5nXCI6XCJwYXVzZWRcIn07YSYmKHgudHJhbnNmb3JtPWBzY2FsZVgoJHtkfSlgKTtsZXQgQz1UdChcIlRvYXN0aWZ5X19wcm9ncmVzcy1iYXJcIixhP1wiVG9hc3RpZnlfX3Byb2dyZXNzLWJhci0tY29udHJvbGxlZFwiOlwiVG9hc3RpZnlfX3Byb2dyZXNzLWJhci0tYW5pbWF0ZWRcIixgVG9hc3RpZnlfX3Byb2dyZXNzLWJhci10aGVtZS0tJHtnfWAsYFRvYXN0aWZ5X19wcm9ncmVzcy1iYXItLSR7cn1gLHtbXCJUb2FzdGlmeV9fcHJvZ3Jlc3MtYmFyLS1ydGxcIl06Y30pLFM9UChsKT9sKHtydGw6Yyx0eXBlOnIsZGVmYXVsdENsYXNzTmFtZTpDfSk6VHQoQyxsKSxFPXtbYSYmZD49MT9cIm9uVHJhbnNpdGlvbkVuZFwiOlwib25BbmltYXRpb25FbmRcIl06YSYmZDwxP251bGw6KCk9PntUJiZlKCl9fTtyZXR1cm4gZXQuY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6XCJUb2FzdGlmeV9fcHJvZ3Jlc3MtYmFyLS13cnBcIixcImRhdGEtaGlkZGVuXCI6dn0sZXQuY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6YFRvYXN0aWZ5X19wcm9ncmVzcy1iYXItLWJnIFRvYXN0aWZ5X19wcm9ncmVzcy1iYXItdGhlbWUtLSR7Z30gVG9hc3RpZnlfX3Byb2dyZXNzLWJhci0tJHtyfWB9KSxldC5jcmVhdGVFbGVtZW50KFwiZGl2XCIse3JvbGU6XCJwcm9ncmVzc2JhclwiLFwiYXJpYS1oaWRkZW5cIjp2P1widHJ1ZVwiOlwiZmFsc2VcIixcImFyaWEtbGFiZWxcIjpcIm5vdGlmaWNhdGlvbiB0aW1lclwiLGNsYXNzTmFtZTpTLHN0eWxlOngsLi4uRX0pKX1pbXBvcnQgRHQgZnJvbVwiY2xzeFwiO2ltcG9ydCBjdCx7dXNlRWZmZWN0IGFzIHlvLHVzZVJlZiBhcyBUbyx1c2VTdGF0ZSBhcyBnb31mcm9tXCJyZWFjdFwiO3ZhciBYdD0xLGF0PSgpPT5gJHtYdCsrfWA7ZnVuY3Rpb24gX3QodCxvLGUpe2xldCByPTEscz0wLGw9W10sYT1bXSxkPW8sYz1uZXcgTWFwLFQ9bmV3IFNldCxnPWk9PihULmFkZChpKSwoKT0+VC5kZWxldGUoaSkpLHY9KCk9PnthPUFycmF5LmZyb20oYy52YWx1ZXMoKSksVC5mb3JFYWNoKGk9PmkoKSl9LHg9KHtjb250YWluZXJJZDppLHRvYXN0SWQ6bix1cGRhdGVJZDp1fSk9PntsZXQgaD1pP2khPT10OnQhPT0xLG09Yy5oYXMobikmJnU9PW51bGw7cmV0dXJuIGh8fG19LEM9KGksbik9PntjLmZvckVhY2godT0+e3ZhciBoOyhuPT1udWxsfHxuPT09dS5wcm9wcy50b2FzdElkKSYmKChoPXUudG9nZ2xlKT09bnVsbHx8aC5jYWxsKHUsaSkpfSl9LFM9aT0+e3ZhciBuLHU7KHU9KG49aS5wcm9wcyk9PW51bGw/dm9pZCAwOm4ub25DbG9zZSk9PW51bGx8fHUuY2FsbChuLGkucmVtb3ZhbFJlYXNvbiksaS5pc0FjdGl2ZT0hMX0sRT1pPT57aWYoaT09bnVsbCljLmZvckVhY2goUyk7ZWxzZXtsZXQgbj1jLmdldChpKTtuJiZTKG4pfXYoKX0sZj0oKT0+e3MtPWwubGVuZ3RoLGw9W119LHA9aT0+e3ZhciBtLF87bGV0e3RvYXN0SWQ6bix1cGRhdGVJZDp1fT1pLnByb3BzLGg9dT09bnVsbDtpLnN0YWxlSWQmJmMuZGVsZXRlKGkuc3RhbGVJZCksaS5pc0FjdGl2ZT0hMCxjLnNldChuLGkpLHYoKSxlKEooaSxoP1wiYWRkZWRcIjpcInVwZGF0ZWRcIikpLGgmJigoXz0obT1pLnByb3BzKS5vbk9wZW4pPT1udWxsfHxfLmNhbGwobSkpfTtyZXR1cm57aWQ6dCxwcm9wczpkLG9ic2VydmU6Zyx0b2dnbGU6QyxyZW1vdmVUb2FzdDpFLHRvYXN0czpjLGNsZWFyUXVldWU6ZixidWlsZFRvYXN0OihpLG4pPT57aWYoeChuKSlyZXR1cm47bGV0e3RvYXN0SWQ6dSx1cGRhdGVJZDpoLGRhdGE6bSxzdGFsZUlkOl8sZGVsYXk6a309bixNPWg9PW51bGw7TSYmcysrO2xldCBBPXsuLi5kLHN0eWxlOmQudG9hc3RTdHlsZSxrZXk6cisrLC4uLk9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhuKS5maWx0ZXIoKFtELFldKT0+WSE9bnVsbCkpLHRvYXN0SWQ6dSx1cGRhdGVJZDpoLGRhdGE6bSxpc0luOiExLGNsYXNzTmFtZTpCKG4uY2xhc3NOYW1lfHxkLnRvYXN0Q2xhc3NOYW1lKSxwcm9ncmVzc0NsYXNzTmFtZTpCKG4ucHJvZ3Jlc3NDbGFzc05hbWV8fGQucHJvZ3Jlc3NDbGFzc05hbWUpLGF1dG9DbG9zZTpuLmlzTG9hZGluZz8hMTpwdChuLmF1dG9DbG9zZSxkLmF1dG9DbG9zZSksY2xvc2VUb2FzdChEKXtjLmdldCh1KS5yZW1vdmFsUmVhc29uPUQsRSh1KX0sZGVsZXRlVG9hc3QoKXtsZXQgRD1jLmdldCh1KTtpZihEIT1udWxsKXtpZihlKEooRCxcInJlbW92ZWRcIikpLGMuZGVsZXRlKHUpLHMtLSxzPDAmJihzPTApLGwubGVuZ3RoPjApe3AobC5zaGlmdCgpKTtyZXR1cm59digpfX19O0EuY2xvc2VCdXR0b249ZC5jbG9zZUJ1dHRvbixuLmNsb3NlQnV0dG9uPT09ITF8fHoobi5jbG9zZUJ1dHRvbik/QS5jbG9zZUJ1dHRvbj1uLmNsb3NlQnV0dG9uOm4uY2xvc2VCdXR0b249PT0hMCYmKEEuY2xvc2VCdXR0b249eihkLmNsb3NlQnV0dG9uKT9kLmNsb3NlQnV0dG9uOiEwKTtsZXQgUj17Y29udGVudDppLHByb3BzOkEsc3RhbGVJZDpffTtkLmxpbWl0JiZkLmxpbWl0PjAmJnM+ZC5saW1pdCYmTT9sLnB1c2goUik6TChrKT9zZXRUaW1lb3V0KCgpPT57cChSKX0sayk6cChSKX0sc2V0UHJvcHMoaSl7ZD1pfSxzZXRUb2dnbGU6KGksbik9PntsZXQgdT1jLmdldChpKTt1JiYodS50b2dnbGU9bil9LGlzVG9hc3RBY3RpdmU6aT0+e3ZhciBuO3JldHVybihuPWMuZ2V0KGkpKT09bnVsbD92b2lkIDA6bi5pc0FjdGl2ZX0sZ2V0U25hcHNob3Q6KCk9PmF9fXZhciBJPW5ldyBNYXAsRj1bXSxzdD1uZXcgU2V0LFZ0PXQ9PnN0LmZvckVhY2gobz0+byh0KSksYnQ9KCk9Pkkuc2l6ZT4wO2Z1bmN0aW9uIFF0KCl7Ri5mb3JFYWNoKHQ9Pm50KHQuY29udGVudCx0Lm9wdGlvbnMpKSxGPVtdfXZhciB2dD0odCx7Y29udGFpbmVySWQ6b30pPT57dmFyIGU7cmV0dXJuKGU9SS5nZXQob3x8MSkpPT1udWxsP3ZvaWQgMDplLnRvYXN0cy5nZXQodCl9O2Z1bmN0aW9uIFgodCxvKXt2YXIgcjtpZihvKXJldHVybiEhKChyPUkuZ2V0KG8pKSE9bnVsbCYmci5pc1RvYXN0QWN0aXZlKHQpKTtsZXQgZT0hMTtyZXR1cm4gSS5mb3JFYWNoKHM9PntzLmlzVG9hc3RBY3RpdmUodCkmJihlPSEwKX0pLGV9ZnVuY3Rpb24gaHQodCl7aWYoIWJ0KCkpe0Y9Ri5maWx0ZXIobz0+dCE9bnVsbCYmby5vcHRpb25zLnRvYXN0SWQhPT10KTtyZXR1cm59aWYodD09bnVsbHx8bXQodCkpSS5mb3JFYWNoKG89PntvLnJlbW92ZVRvYXN0KHQpfSk7ZWxzZSBpZih0JiYoXCJjb250YWluZXJJZFwiaW4gdHx8XCJpZFwiaW4gdCkpe2xldCBvPUkuZ2V0KHQuY29udGFpbmVySWQpO28/by5yZW1vdmVUb2FzdCh0LmlkKTpJLmZvckVhY2goZT0+e2UucmVtb3ZlVG9hc3QodC5pZCl9KX19dmFyIEN0PSh0PXt9KT0+e0kuZm9yRWFjaChvPT57by5wcm9wcy5saW1pdCYmKCF0LmNvbnRhaW5lcklkfHxvLmlkPT09dC5jb250YWluZXJJZCkmJm8uY2xlYXJRdWV1ZSgpfSl9O2Z1bmN0aW9uIG50KHQsbyl7eih0KSYmKGJ0KCl8fEYucHVzaCh7Y29udGVudDp0LG9wdGlvbnM6b30pLEkuZm9yRWFjaChlPT57ZS5idWlsZFRvYXN0KHQsbyl9KSl9ZnVuY3Rpb24geHQodCl7dmFyIG87KG89SS5nZXQodC5jb250YWluZXJJZHx8MSkpPT1udWxsfHxvLnNldFRvZ2dsZSh0LmlkLHQuZm4pfWZ1bmN0aW9uIHJ0KHQsbyl7SS5mb3JFYWNoKGU9Pnsobz09bnVsbHx8IShvIT1udWxsJiZvLmNvbnRhaW5lcklkKXx8KG89PW51bGw/dm9pZCAwOm8uY29udGFpbmVySWQpPT09ZS5pZCkmJmUudG9nZ2xlKHQsbz09bnVsbD92b2lkIDA6by5pZCl9KX1mdW5jdGlvbiBFdCh0KXtsZXQgbz10LmNvbnRhaW5lcklkfHwxO3JldHVybntzdWJzY3JpYmUoZSl7bGV0IHI9X3Qobyx0LFZ0KTtJLnNldChvLHIpO2xldCBzPXIub2JzZXJ2ZShlKTtyZXR1cm4gUXQoKSwoKT0+e3MoKSxJLmRlbGV0ZShvKX19LHNldFByb3BzKGUpe3ZhciByOyhyPUkuZ2V0KG8pKT09bnVsbHx8ci5zZXRQcm9wcyhlKX0sZ2V0U25hcHNob3QoKXt2YXIgZTtyZXR1cm4oZT1JLmdldChvKSk9PW51bGw/dm9pZCAwOmUuZ2V0U25hcHNob3QoKX19fWZ1bmN0aW9uIFB0KHQpe3JldHVybiBzdC5hZGQodCksKCk9PntzdC5kZWxldGUodCl9fWZ1bmN0aW9uIFd0KHQpe3JldHVybiB0JiYoTih0LnRvYXN0SWQpfHxMKHQudG9hc3RJZCkpP3QudG9hc3RJZDphdCgpfWZ1bmN0aW9uIFUodCxvKXtyZXR1cm4gbnQodCxvKSxvLnRvYXN0SWR9ZnVuY3Rpb24gVih0LG8pe3JldHVybnsuLi5vLHR5cGU6byYmby50eXBlfHx0LHRvYXN0SWQ6V3Qobyl9fWZ1bmN0aW9uIFEodCl7cmV0dXJuKG8sZSk9PlUobyxWKHQsZSkpfWZ1bmN0aW9uIHkodCxvKXtyZXR1cm4gVSh0LFYoXCJkZWZhdWx0XCIsbykpfXkubG9hZGluZz0odCxvKT0+VSh0LFYoXCJkZWZhdWx0XCIse2lzTG9hZGluZzohMCxhdXRvQ2xvc2U6ITEsY2xvc2VPbkNsaWNrOiExLGNsb3NlQnV0dG9uOiExLGRyYWdnYWJsZTohMSwuLi5vfSkpO2Z1bmN0aW9uIEd0KHQse3BlbmRpbmc6byxlcnJvcjplLHN1Y2Nlc3M6cn0scyl7bGV0IGw7byYmKGw9TihvKT95LmxvYWRpbmcobyxzKTp5LmxvYWRpbmcoby5yZW5kZXIsey4uLnMsLi4ub30pKTtsZXQgYT17aXNMb2FkaW5nOm51bGwsYXV0b0Nsb3NlOm51bGwsY2xvc2VPbkNsaWNrOm51bGwsY2xvc2VCdXR0b246bnVsbCxkcmFnZ2FibGU6bnVsbH0sZD0oVCxnLHYpPT57aWYoZz09bnVsbCl7eS5kaXNtaXNzKGwpO3JldHVybn1sZXQgeD17dHlwZTpULC4uLmEsLi4ucyxkYXRhOnZ9LEM9TihnKT97cmVuZGVyOmd9Omc7cmV0dXJuIGw/eS51cGRhdGUobCx7Li4ueCwuLi5DfSk6eShDLnJlbmRlcix7Li4ueCwuLi5DfSksdn0sYz1QKHQpP3QoKTp0O3JldHVybiBjLnRoZW4oVD0+ZChcInN1Y2Nlc3NcIixyLFQpKS5jYXRjaChUPT5kKFwiZXJyb3JcIixlLFQpKSxjfXkucHJvbWlzZT1HdDt5LnN1Y2Nlc3M9UShcInN1Y2Nlc3NcIik7eS5pbmZvPVEoXCJpbmZvXCIpO3kuZXJyb3I9UShcImVycm9yXCIpO3kud2FybmluZz1RKFwid2FybmluZ1wiKTt5Lndhcm49eS53YXJuaW5nO3kuZGFyaz0odCxvKT0+VSh0LFYoXCJkZWZhdWx0XCIse3RoZW1lOlwiZGFya1wiLC4uLm99KSk7ZnVuY3Rpb24gcXQodCl7aHQodCl9eS5kaXNtaXNzPXF0O3kuY2xlYXJXYWl0aW5nUXVldWU9Q3Q7eS5pc0FjdGl2ZT1YO3kudXBkYXRlPSh0LG89e30pPT57bGV0IGU9dnQodCxvKTtpZihlKXtsZXR7cHJvcHM6cixjb250ZW50OnN9PWUsbD17ZGVsYXk6MTAwLC4uLnIsLi4ubyx0b2FzdElkOm8udG9hc3RJZHx8dCx1cGRhdGVJZDphdCgpfTtsLnRvYXN0SWQhPT10JiYobC5zdGFsZUlkPXQpO2xldCBhPWwucmVuZGVyfHxzO2RlbGV0ZSBsLnJlbmRlcixVKGEsbCl9fTt5LmRvbmU9dD0+e3kudXBkYXRlKHQse3Byb2dyZXNzOjF9KX07eS5vbkNoYW5nZT1QdDt5LnBsYXk9dD0+cnQoITAsdCk7eS5wYXVzZT10PT5ydCghMSx0KTtpbXBvcnR7dXNlUmVmIGFzIEt0LHVzZVN5bmNFeHRlcm5hbFN0b3JlIGFzIFl0fWZyb21cInJlYWN0XCI7ZnVuY3Rpb24gSXQodCl7dmFyIGE7bGV0e3N1YnNjcmliZTpvLGdldFNuYXBzaG90OmUsc2V0UHJvcHM6cn09S3QoRXQodCkpLmN1cnJlbnQ7cih0KTtsZXQgcz0oYT1ZdChvLGUsZSkpPT1udWxsP3ZvaWQgMDphLnNsaWNlKCk7ZnVuY3Rpb24gbChkKXtpZighcylyZXR1cm5bXTtsZXQgYz1uZXcgTWFwO3JldHVybiB0Lm5ld2VzdE9uVG9wJiZzLnJldmVyc2UoKSxzLmZvckVhY2goVD0+e2xldHtwb3NpdGlvbjpnfT1ULnByb3BzO2MuaGFzKGcpfHxjLnNldChnLFtdKSxjLmdldChnKS5wdXNoKFQpfSksQXJyYXkuZnJvbShjLFQ9PmQoVFswXSxUWzFdKSl9cmV0dXJue2dldFRvYXN0VG9SZW5kZXI6bCxpc1RvYXN0QWN0aXZlOlgsY291bnQ6cz09bnVsbD92b2lkIDA6cy5sZW5ndGh9fWltcG9ydHt1c2VFZmZlY3QgYXMgWnQsdXNlUmVmIGFzIFN0LHVzZVN0YXRlIGFzIGt0fWZyb21cInJlYWN0XCI7ZnVuY3Rpb24gQXQodCl7bGV0W28sZV09a3QoITEpLFtyLHNdPWt0KCExKSxsPVN0KG51bGwpLGE9U3Qoe3N0YXJ0OjAsZGVsdGE6MCxyZW1vdmFsRGlzdGFuY2U6MCxjYW5DbG9zZU9uQ2xpY2s6ITAsY2FuRHJhZzohMSxkaWRNb3ZlOiExfSkuY3VycmVudCx7YXV0b0Nsb3NlOmQscGF1c2VPbkhvdmVyOmMsY2xvc2VUb2FzdDpULG9uQ2xpY2s6ZyxjbG9zZU9uQ2xpY2s6dn09dDt4dCh7aWQ6dC50b2FzdElkLGNvbnRhaW5lcklkOnQuY29udGFpbmVySWQsZm46ZX0pLFp0KCgpPT57aWYodC5wYXVzZU9uRm9jdXNMb3NzKXJldHVybiB4KCksKCk9PntDKCl9fSxbdC5wYXVzZU9uRm9jdXNMb3NzXSk7ZnVuY3Rpb24geCgpe2RvY3VtZW50Lmhhc0ZvY3VzKCl8fHAoKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsZiksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIscCl9ZnVuY3Rpb24gQygpe3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiZm9jdXNcIixmKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImJsdXJcIixwKX1mdW5jdGlvbiBTKG0pe2lmKHQuZHJhZ2dhYmxlPT09ITB8fHQuZHJhZ2dhYmxlPT09bS5wb2ludGVyVHlwZSl7YigpO2xldCBfPWwuY3VycmVudDthLmNhbkNsb3NlT25DbGljaz0hMCxhLmNhbkRyYWc9ITAsXy5zdHlsZS50cmFuc2l0aW9uPVwibm9uZVwiLHQuZHJhZ2dhYmxlRGlyZWN0aW9uPT09XCJ4XCI/KGEuc3RhcnQ9bS5jbGllbnRYLGEucmVtb3ZhbERpc3RhbmNlPV8ub2Zmc2V0V2lkdGgqKHQuZHJhZ2dhYmxlUGVyY2VudC8xMDApKTooYS5zdGFydD1tLmNsaWVudFksYS5yZW1vdmFsRGlzdGFuY2U9Xy5vZmZzZXRIZWlnaHQqKHQuZHJhZ2dhYmxlUGVyY2VudD09PTgwP3QuZHJhZ2dhYmxlUGVyY2VudCoxLjU6dC5kcmFnZ2FibGVQZXJjZW50KS8xMDApfX1mdW5jdGlvbiBFKG0pe2xldHt0b3A6Xyxib3R0b206ayxsZWZ0Ok0scmlnaHQ6QX09bC5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO20ubmF0aXZlRXZlbnQudHlwZSE9PVwidG91Y2hlbmRcIiYmdC5wYXVzZU9uSG92ZXImJm0uY2xpZW50WD49TSYmbS5jbGllbnRYPD1BJiZtLmNsaWVudFk+PV8mJm0uY2xpZW50WTw9az9wKCk6ZigpfWZ1bmN0aW9uIGYoKXtlKCEwKX1mdW5jdGlvbiBwKCl7ZSghMSl9ZnVuY3Rpb24gYigpe2EuZGlkTW92ZT0hMSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcm1vdmVcIixuKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcnVwXCIsdSl9ZnVuY3Rpb24gaSgpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLG4pLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIix1KX1mdW5jdGlvbiBuKG0pe2xldCBfPWwuY3VycmVudDtpZihhLmNhbkRyYWcmJl8pe2EuZGlkTW92ZT0hMCxvJiZwKCksdC5kcmFnZ2FibGVEaXJlY3Rpb249PT1cInhcIj9hLmRlbHRhPW0uY2xpZW50WC1hLnN0YXJ0OmEuZGVsdGE9bS5jbGllbnRZLWEuc3RhcnQsYS5zdGFydCE9PW0uY2xpZW50WCYmKGEuY2FuQ2xvc2VPbkNsaWNrPSExKTtsZXQgaz10LmRyYWdnYWJsZURpcmVjdGlvbj09PVwieFwiP2Ake2EuZGVsdGF9cHgsIHZhcigtLXkpYDpgMCwgY2FsYygke2EuZGVsdGF9cHggKyB2YXIoLS15KSlgO18uc3R5bGUudHJhbnNmb3JtPWB0cmFuc2xhdGUzZCgke2t9LDApYCxfLnN0eWxlLm9wYWNpdHk9YCR7MS1NYXRoLmFicyhhLmRlbHRhL2EucmVtb3ZhbERpc3RhbmNlKX1gfX1mdW5jdGlvbiB1KCl7aSgpO2xldCBtPWwuY3VycmVudDtpZihhLmNhbkRyYWcmJmEuZGlkTW92ZSYmbSl7aWYoYS5jYW5EcmFnPSExLE1hdGguYWJzKGEuZGVsdGEpPmEucmVtb3ZhbERpc3RhbmNlKXtzKCEwKSx0LmNsb3NlVG9hc3QoITApLHQuY29sbGFwc2VBbGwoKTtyZXR1cm59bS5zdHlsZS50cmFuc2l0aW9uPVwidHJhbnNmb3JtIDAuMnMsIG9wYWNpdHkgMC4yc1wiLG0uc3R5bGUucmVtb3ZlUHJvcGVydHkoXCJ0cmFuc2Zvcm1cIiksbS5zdHlsZS5yZW1vdmVQcm9wZXJ0eShcIm9wYWNpdHlcIil9fWxldCBoPXtvblBvaW50ZXJEb3duOlMsb25Qb2ludGVyVXA6RX07cmV0dXJuIGQmJmMmJihoLm9uTW91c2VFbnRlcj1wLHQuc3RhY2tlZHx8KGgub25Nb3VzZUxlYXZlPWYpKSx2JiYoaC5vbkNsaWNrPW09PntnJiZnKG0pLGEuY2FuQ2xvc2VPbkNsaWNrJiZUKCEwKX0pLHtwbGF5VG9hc3Q6ZixwYXVzZVRvYXN0OnAsaXNSdW5uaW5nOm8scHJldmVudEV4aXRUcmFuc2l0aW9uOnIsdG9hc3RSZWY6bCxldmVudEhhbmRsZXJzOmh9fWltcG9ydHt1c2VFZmZlY3QgYXMgSnQsdXNlTGF5b3V0RWZmZWN0IGFzIHRvfWZyb21cInJlYWN0XCI7dmFyIE90PXR5cGVvZiB3aW5kb3chPVwidW5kZWZpbmVkXCI/dG86SnQ7aW1wb3J0IGl0IGZyb21cImNsc3hcIjtpbXBvcnQgcSx7Y2xvbmVFbGVtZW50IGFzIGNvLGlzVmFsaWRFbGVtZW50IGFzIGZvfWZyb21cInJlYWN0XCI7aW1wb3J0IE8se2Nsb25lRWxlbWVudCBhcyBvbyxpc1ZhbGlkRWxlbWVudCBhcyBlb31mcm9tXCJyZWFjdFwiO3ZhciBHPSh7dGhlbWU6dCx0eXBlOm8saXNMb2FkaW5nOmUsLi4ucn0pPT5PLmNyZWF0ZUVsZW1lbnQoXCJzdmdcIix7dmlld0JveDpcIjAgMCAyNCAyNFwiLHdpZHRoOlwiMTAwJVwiLGhlaWdodDpcIjEwMCVcIixmaWxsOnQ9PT1cImNvbG9yZWRcIj9cImN1cnJlbnRDb2xvclwiOmB2YXIoLS10b2FzdGlmeS1pY29uLWNvbG9yLSR7b30pYCwuLi5yfSk7ZnVuY3Rpb24gYW8odCl7cmV0dXJuIE8uY3JlYXRlRWxlbWVudChHLHsuLi50fSxPLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2Q6XCJNMjMuMzIgMTcuMTkxTDE1LjQzOCAyLjE4NEMxNC43MjguODMzIDEzLjQxNiAwIDExLjk5NiAwYy0xLjQyIDAtMi43MzMuODMzLTMuNDQzIDIuMTg0TC41MzMgMTcuNDQ4YTQuNzQ0IDQuNzQ0IDAgMDAwIDQuMzY4QzEuMjQzIDIzLjE2NyAyLjU1NSAyNCAzLjk3NSAyNGgxNi4wNUMyMi4yMiAyNCAyNCAyMi4wNDQgMjQgMTkuNjMyYzAtLjkwNC0uMjUxLTEuNzQ2LS42OC0yLjQ0em0tOS42MjIgMS40NmMwIDEuMDMzLS43MjQgMS44MjMtMS42OTggMS44MjNzLTEuNjk4LS43OS0xLjY5OC0xLjgyMnYtLjA0M2MwLTEuMDI4LjcyNC0xLjgyMiAxLjY5OC0xLjgyMnMxLjY5OC43OSAxLjY5OCAxLjgyMnYuMDQzem0uMDM5LTEyLjI4NWwtLjg0IDguMDZjLS4wNTcuNTgxLS40MDguOTQzLS44OTcuOTQzLS40OSAwLS44NC0uMzY3LS44OTYtLjk0MmwtLjg0LTguMDY1Yy0uMDU3LS42MjQuMjUtMS4wOTUuNzc5LTEuMDk1aDEuOTFjLjUyOC4wMDUuODQuNDc2Ljc4NCAxLjF6XCJ9KSl9ZnVuY3Rpb24gc28odCl7cmV0dXJuIE8uY3JlYXRlRWxlbWVudChHLHsuLi50fSxPLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2Q6XCJNMTIgMGExMiAxMiAwIDEwMTIgMTJBMTIuMDEzIDEyLjAxMyAwIDAwMTIgMHptLjI1IDVhMS41IDEuNSAwIDExLTEuNSAxLjUgMS41IDEuNSAwIDAxMS41LTEuNXptMi4yNSAxMy41aC00YTEgMSAwIDAxMC0yaC43NWEuMjUuMjUgMCAwMC4yNS0uMjV2LTQuNWEuMjUuMjUgMCAwMC0uMjUtLjI1aC0uNzVhMSAxIDAgMDEwLTJoMWEyIDIgMCAwMTIgMnY0Ljc1YS4yNS4yNSAwIDAwLjI1LjI1aC43NWExIDEgMCAxMTAgMnpcIn0pKX1mdW5jdGlvbiBubyh0KXtyZXR1cm4gTy5jcmVhdGVFbGVtZW50KEcsey4uLnR9LE8uY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZDpcIk0xMiAwYTEyIDEyIDAgMTAxMiAxMkExMi4wMTQgMTIuMDE0IDAgMDAxMiAwem02LjkyNyA4LjJsLTYuODQ1IDkuMjg5YTEuMDExIDEuMDExIDAgMDEtMS40My4xODhsLTQuODg4LTMuOTA4YTEgMSAwIDExMS4yNS0xLjU2Mmw0LjA3NiAzLjI2MSA2LjIyNy04LjQ1MWExIDEgMCAxMTEuNjEgMS4xODN6XCJ9KSl9ZnVuY3Rpb24gcm8odCl7cmV0dXJuIE8uY3JlYXRlRWxlbWVudChHLHsuLi50fSxPLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2Q6XCJNMTEuOTgzIDBhMTIuMjA2IDEyLjIwNiAwIDAwLTguNTEgMy42NTNBMTEuOCAxMS44IDAgMDAwIDEyLjIwNyAxMS43NzkgMTEuNzc5IDAgMDAxMS44IDI0aC4yMTRBMTIuMTExIDEyLjExMSAwIDAwMjQgMTEuNzkxIDExLjc2NiAxMS43NjYgMCAwMDExLjk4MyAwek0xMC41IDE2LjU0MmExLjQ3NiAxLjQ3NiAwIDAxMS40NDktMS41M2guMDI3YTEuNTI3IDEuNTI3IDAgMDExLjUyMyAxLjQ3IDEuNDc1IDEuNDc1IDAgMDEtMS40NDkgMS41M2gtLjAyN2ExLjUyOSAxLjUyOSAwIDAxLTEuNTIzLTEuNDd6TTExIDEyLjV2LTZhMSAxIDAgMDEyIDB2NmExIDEgMCAxMS0yIDB6XCJ9KSl9ZnVuY3Rpb24gaW8oKXtyZXR1cm4gTy5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpcIlRvYXN0aWZ5X19zcGlubmVyXCJ9KX12YXIgVz17aW5mbzpzbyx3YXJuaW5nOmFvLHN1Y2Nlc3M6bm8sZXJyb3I6cm8sc3Bpbm5lcjppb30sbG89dD0+dCBpbiBXO2Z1bmN0aW9uIE50KHt0aGVtZTp0LHR5cGU6byxpc0xvYWRpbmc6ZSxpY29uOnJ9KXtsZXQgcz1udWxsLGw9e3RoZW1lOnQsdHlwZTpvfTtyZXR1cm4gcj09PSExfHwoUChyKT9zPXIoey4uLmwsaXNMb2FkaW5nOmV9KTplbyhyKT9zPW9vKHIsbCk6ZT9zPVcuc3Bpbm5lcigpOmxvKG8pJiYocz1XW29dKGwpKSksc312YXIgd3Q9dD0+e2xldHtpc1J1bm5pbmc6byxwcmV2ZW50RXhpdFRyYW5zaXRpb246ZSx0b2FzdFJlZjpyLGV2ZW50SGFuZGxlcnM6cyxwbGF5VG9hc3Q6bH09QXQodCkse2Nsb3NlQnV0dG9uOmEsY2hpbGRyZW46ZCxhdXRvQ2xvc2U6YyxvbkNsaWNrOlQsdHlwZTpnLGhpZGVQcm9ncmVzc0Jhcjp2LGNsb3NlVG9hc3Q6eCx0cmFuc2l0aW9uOkMscG9zaXRpb246UyxjbGFzc05hbWU6RSxzdHlsZTpmLHByb2dyZXNzQ2xhc3NOYW1lOnAsdXBkYXRlSWQ6Yixyb2xlOmkscHJvZ3Jlc3M6bixydGw6dSx0b2FzdElkOmgsZGVsZXRlVG9hc3Q6bSxpc0luOl8saXNMb2FkaW5nOmssY2xvc2VPbkNsaWNrOk0sdGhlbWU6QSxhcmlhTGFiZWw6Un09dCxEPWl0KFwiVG9hc3RpZnlfX3RvYXN0XCIsYFRvYXN0aWZ5X190b2FzdC10aGVtZS0tJHtBfWAsYFRvYXN0aWZ5X190b2FzdC0tJHtnfWAse1tcIlRvYXN0aWZ5X190b2FzdC0tcnRsXCJdOnV9LHtbXCJUb2FzdGlmeV9fdG9hc3QtLWNsb3NlLW9uLWNsaWNrXCJdOk19KSxZPVAoRSk/RSh7cnRsOnUscG9zaXRpb246Uyx0eXBlOmcsZGVmYXVsdENsYXNzTmFtZTpEfSk6aXQoRCxFKSxmdD1OdCh0KSxkdD0hIW58fCFjLGo9e2Nsb3NlVG9hc3Q6eCx0eXBlOmcsdGhlbWU6QX0sSD1udWxsO3JldHVybiBhPT09ITF8fChQKGEpP0g9YShqKTpmbyhhKT9IPWNvKGEsaik6SD15dChqKSkscS5jcmVhdGVFbGVtZW50KEMse2lzSW46Xyxkb25lOm0scG9zaXRpb246UyxwcmV2ZW50RXhpdFRyYW5zaXRpb246ZSxub2RlUmVmOnIscGxheVRvYXN0Omx9LHEuY3JlYXRlRWxlbWVudChcImRpdlwiLHtpZDpoLHRhYkluZGV4OjAsb25DbGljazpULFwiZGF0YS1pblwiOl8sY2xhc3NOYW1lOlksLi4ucyxzdHlsZTpmLHJlZjpyLC4uLl8mJntyb2xlOmksXCJhcmlhLWxhYmVsXCI6Un19LGZ0IT1udWxsJiZxLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOml0KFwiVG9hc3RpZnlfX3RvYXN0LWljb25cIix7W1wiVG9hc3RpZnktLWFuaW1hdGUtaWNvbiBUb2FzdGlmeV9fem9vbS1lbnRlclwiXToha30pfSxmdCksdHQoZCx0LCFvKSxILCF0LmN1c3RvbVByb2dyZXNzQmFyJiZxLmNyZWF0ZUVsZW1lbnQoZ3Qsey4uLmImJiFkdD97a2V5OmBwLSR7Yn1gfTp7fSxydGw6dSx0aGVtZTpBLGRlbGF5OmMsaXNSdW5uaW5nOm8saXNJbjpfLGNsb3NlVG9hc3Q6eCxoaWRlOnYsdHlwZTpnLGNsYXNzTmFtZTpwLGNvbnRyb2xsZWRQcm9ncmVzczpkdCxwcm9ncmVzczpufHwwfSkpKX07dmFyIEs9KHQsbz0hMSk9Pih7ZW50ZXI6YFRvYXN0aWZ5LS1hbmltYXRlIFRvYXN0aWZ5X18ke3R9LWVudGVyYCxleGl0OmBUb2FzdGlmeS0tYW5pbWF0ZSBUb2FzdGlmeV9fJHt0fS1leGl0YCxhcHBlbmRQb3NpdGlvbjpvfSksbHQ9JChLKFwiYm91bmNlXCIsITApKSxtbz0kKEsoXCJzbGlkZVwiLCEwKSkscG89JChLKFwiem9vbVwiKSksdW89JChLKFwiZmxpcFwiKSk7dmFyIF9vPXtwb3NpdGlvbjpcInRvcC1yaWdodFwiLHRyYW5zaXRpb246bHQsYXV0b0Nsb3NlOjVlMyxjbG9zZUJ1dHRvbjohMCxwYXVzZU9uSG92ZXI6ITAscGF1c2VPbkZvY3VzTG9zczohMCxkcmFnZ2FibGU6XCJ0b3VjaFwiLGRyYWdnYWJsZVBlcmNlbnQ6ODAsZHJhZ2dhYmxlRGlyZWN0aW9uOlwieFwiLHJvbGU6XCJhbGVydFwiLHRoZW1lOlwibGlnaHRcIixcImFyaWEtbGFiZWxcIjpcIk5vdGlmaWNhdGlvbnMgQWx0K1RcIixob3RLZXlzOnQ9PnQuYWx0S2V5JiZ0LmNvZGU9PT1cIktleVRcIn07ZnVuY3Rpb24gTHQodCl7bGV0IG89ey4uLl9vLC4uLnR9LGU9dC5zdGFja2VkLFtyLHNdPWdvKCEwKSxsPVRvKG51bGwpLHtnZXRUb2FzdFRvUmVuZGVyOmEsaXNUb2FzdEFjdGl2ZTpkLGNvdW50OmN9PUl0KG8pLHtjbGFzc05hbWU6VCxzdHlsZTpnLHJ0bDp2LGNvbnRhaW5lcklkOngsaG90S2V5czpDfT1vO2Z1bmN0aW9uIFMoZil7bGV0IHA9RHQoXCJUb2FzdGlmeV9fdG9hc3QtY29udGFpbmVyXCIsYFRvYXN0aWZ5X190b2FzdC1jb250YWluZXItLSR7Zn1gLHtbXCJUb2FzdGlmeV9fdG9hc3QtY29udGFpbmVyLS1ydGxcIl06dn0pO3JldHVybiBQKFQpP1Qoe3Bvc2l0aW9uOmYscnRsOnYsZGVmYXVsdENsYXNzTmFtZTpwfSk6RHQocCxCKFQpKX1mdW5jdGlvbiBFKCl7ZSYmKHMoITApLHkucGxheSgpKX1yZXR1cm4gT3QoKCk9Pnt2YXIgZjtpZihlKXtsZXQgcD1sLmN1cnJlbnQucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtaW49XCJ0cnVlXCJdJyksYj0xMixpPShmPW8ucG9zaXRpb24pPT1udWxsP3ZvaWQgMDpmLmluY2x1ZGVzKFwidG9wXCIpLG49MCx1PTA7QXJyYXkuZnJvbShwKS5yZXZlcnNlKCkuZm9yRWFjaCgoaCxtKT0+e2xldCBfPWg7Xy5jbGFzc0xpc3QuYWRkKFwiVG9hc3RpZnlfX3RvYXN0LS1zdGFja2VkXCIpLG0+MCYmKF8uZGF0YXNldC5jb2xsYXBzZWQ9YCR7cn1gKSxfLmRhdGFzZXQucG9zfHwoXy5kYXRhc2V0LnBvcz1pP1widG9wXCI6XCJib3RcIik7bGV0IGs9bioocj8uMjoxKSsocj8wOmIqbSk7Xy5zdHlsZS5zZXRQcm9wZXJ0eShcIi0teVwiLGAke2k/azprKi0xfXB4YCksXy5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tZ1wiLGAke2J9YCksXy5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tc1wiLGAkezEtKHI/dTowKX1gKSxuKz1fLm9mZnNldEhlaWdodCx1Kz0uMDI1fSl9fSxbcixjLGVdKSx5bygoKT0+e2Z1bmN0aW9uIGYocCl7dmFyIGk7bGV0IGI9bC5jdXJyZW50O0MocCkmJigoaT1iLnF1ZXJ5U2VsZWN0b3IoJ1t0YWJJbmRleD1cIjBcIl0nKSk9PW51bGx8fGkuZm9jdXMoKSxzKCExKSx5LnBhdXNlKCkpLHAua2V5PT09XCJFc2NhcGVcIiYmKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1ifHxiIT1udWxsJiZiLmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSYmKHMoITApLHkucGxheSgpKX1yZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIixmKSwoKT0+e2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsZil9fSxbQ10pLGN0LmNyZWF0ZUVsZW1lbnQoXCJzZWN0aW9uXCIse3JlZjpsLGNsYXNzTmFtZTpcIlRvYXN0aWZ5XCIsaWQ6eCxvbk1vdXNlRW50ZXI6KCk9PntlJiYocyghMSkseS5wYXVzZSgpKX0sb25Nb3VzZUxlYXZlOkUsXCJhcmlhLWxpdmVcIjpcInBvbGl0ZVwiLFwiYXJpYS1hdG9taWNcIjpcImZhbHNlXCIsXCJhcmlhLXJlbGV2YW50XCI6XCJhZGRpdGlvbnMgdGV4dFwiLFwiYXJpYS1sYWJlbFwiOm9bXCJhcmlhLWxhYmVsXCJdfSxhKChmLHApPT57bGV0IGI9cC5sZW5ndGg/ey4uLmd9OnsuLi5nLHBvaW50ZXJFdmVudHM6XCJub25lXCJ9O3JldHVybiBjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIse3RhYkluZGV4Oi0xLGNsYXNzTmFtZTpTKGYpLFwiZGF0YS1zdGFja2VkXCI6ZSxzdHlsZTpiLGtleTpgYy0ke2Z9YH0scC5tYXAoKHtjb250ZW50OmkscHJvcHM6bn0pPT5jdC5jcmVhdGVFbGVtZW50KHd0LHsuLi5uLHN0YWNrZWQ6ZSxjb2xsYXBzZUFsbDpFLGlzSW46ZChuLnRvYXN0SWQsbi5jb250YWluZXJJZCksa2V5OmB0LSR7bi5rZXl9YH0saSkpKX0pKX1leHBvcnR7bHQgYXMgQm91bmNlLHVvIGFzIEZsaXAsVyBhcyBJY29ucyxtbyBhcyBTbGlkZSxMdCBhcyBUb2FzdENvbnRhaW5lcixwbyBhcyBab29tLFogYXMgY29sbGFwc2VUb2FzdCwkIGFzIGNzc1RyYW5zaXRpb24seSBhcyB0b2FzdH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5tanMubWFwIiwiY29uc3QgaXNMb2NhbGhvc3QgPSB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUgPT09ICdsb2NhbGhvc3QnO1xyXG5cclxuY29uc3QgQkFTRV9VUkwgPSBpc0xvY2FsaG9zdFxyXG4gID8gJ2h0dHA6Ly9sb2NhbGhvc3Qvd29yZHByZXNzJ1xyXG4gIDogd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcclxuXHJcbi8vIGNvbnN0IEFQSV9CQVNFX1VSTCA9IGAke0JBU0VfVVJMfS93cC1qc29uL2FpLWNvbnRlbnQvdjFgO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQkFTRV9VUkw7XHJcbiIsImltcG9ydCB7IGNyZWF0ZVNsaWNlLCBjcmVhdGVBc3luY1RodW5rIH0gZnJvbSBcIkByZWR1eGpzL3Rvb2xraXRcIjtcclxuaW1wb3J0IHsgdG9hc3QgfSBmcm9tIFwicmVhY3QtdG9hc3RpZnlcIjtcclxuaW1wb3J0IEJBU0VfVVJMIGZyb20gXCIuLi8uLi9jb25maWcuanNcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBHZXRDaGF0Ym90RGF0YSA9IGNyZWF0ZUFzeW5jVGh1bmsoXHJcbiAgXCJjaGF0Ym90L2NoYXRib3QtZGF0YVwiLFxyXG4gIGFzeW5jICgpID0+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goXHJcbiAgICAgIEJBU0VfVVJMICsgXCIvd3AtanNvbi9haS1jb250ZW50L3YxL2dldC1jaGF0Ym90LXNldHRpbmdcIixcclxuICAgICAge1xyXG4gICAgICAgIG1ldGhvZDogXCJHRVRcIixcclxuICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICBcIlgtV1AtTm9uY2VcIjogd3BBcGlTZXR0aW5ncy5ub25jZSxcclxuICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICApO1xyXG4gICAgY29uc3QgcmVzcG9uc2VfZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcclxuICAgIHJldHVybiByZXNwb25zZV9kYXRhO1xyXG4gIH0sXHJcbik7XHJcblxyXG5leHBvcnQgY29uc3QgU2F2ZUFwcGVhcmFuY2VTZXR0aW5nID0gY3JlYXRlQXN5bmNUaHVuayhcclxuICBcImNoYXRib3Qvc2F2ZS1jaGF0Ym90LWRhdGFcIixcclxuICBhc3luYyAoZGF0YSkgPT4ge1xyXG4gICAgLy8gVHJhbnNmb3JtIHRoZSBkYXRhIHRvIG1hdGNoIHdoYXQgdGhlIEFQSSBleHBlY3RzXHJcbiAgICBjb25zdCBhcGlEYXRhID0ge1xyXG4gICAgICBiZ19jb2xvcjogZGF0YS5wcmltYXJ5Q29sb3IsXHJcbiAgICAgIHRleHRfY29sb3I6IGRhdGEuc2Vjb25kYXJ5Q29sb3IsXHJcbiAgICAgIHR5cGU6IGRhdGEuYm90SWNvbixcclxuICAgICAgaWNvbjogZGF0YS5pY29uLFxyXG4gICAgfTtcclxuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICBmb3JtRGF0YS5hcHBlbmQoXCJiZ19jb2xvclwiLCBkYXRhLkJhY2tncm91bmRDb2xvcik7XHJcbiAgICBmb3JtRGF0YS5hcHBlbmQoXCJ0ZXh0X2NvbG9yXCIsIGRhdGEudGV4dENvbG9yKTtcclxuICAgIGZvcm1EYXRhLmFwcGVuZChcInR5cGVcIiwgZGF0YS5ib3RJY29uVHlwZSk7XHJcblxyXG4gICAgLy8gT25seSBhcHBlbmQgdGhlIGZpbGUgaWYgaXQgZXhpc3RzIGFuZCBib3RJY29uVHlwZSBpcyAnY3VzdG9tJ1xyXG4gICAgaWYgKFxyXG4gICAgICBkYXRhLmJvdEljb25UeXBlID09PSBcImN1c3RvbVwiICYmXHJcbiAgICAgIGRhdGEuY3VzdG9tQm90SWNvbiAmJlxyXG4gICAgICBkYXRhLmN1c3RvbUJvdEljb24ubGVuZ3RoID4gMFxyXG4gICAgKSB7XHJcbiAgICAgIGZvcm1EYXRhLmFwcGVuZChcImljb25cIiwgZGF0YS5jdXN0b21Cb3RJY29uWzBdKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goXHJcbiAgICAgIEJBU0VfVVJMICsgXCIvd3AtanNvbi9haS1jb250ZW50L3YxL3NhdmUtYXBwZWFyYW5jZS1zZXR0aW5nXCIsXHJcbiAgICAgIHtcclxuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxyXG4gICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgIFwiWC1XUC1Ob25jZVwiOiB3cEFwaVNldHRpbmdzLm5vbmNlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgYm9keTogZm9ybURhdGEsXHJcbiAgICAgIH0sXHJcbiAgICApO1xyXG4gICAgY29uc3QgcmVzcG9uc2VfZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcclxuICAgIHJldHVybiByZXNwb25zZV9kYXRhO1xyXG4gIH0sXHJcbik7XHJcblxyXG5leHBvcnQgY29uc3QgU2F2ZU1lc3NhZ2VTZXR0aW5ncyA9IGNyZWF0ZUFzeW5jVGh1bmsoXHJcbiAgXCJjaGF0Ym90L3NhdmUtbWVzc2FnZS1zZXR0aW5nc1wiLFxyXG4gIGFzeW5jIChkYXRhKSA9PiB7XHJcbiAgICBjb25zdCBhcGlEYXRhID0ge1xyXG4gICAgICBjaGF0X2JvdF9tc2c6IGRhdGEud2VsY29tZU1lc3NhZ2UsXHJcbiAgICAgIHBsYWNlaG9sZGVyX21zZzogZGF0YS5wbGFjZWhvbGRlclRleHQsXHJcbiAgICAgIGNoYXRib3RfbmFtZTogZGF0YS5oZWFkZXJUZXh0LFxyXG4gICAgfTtcclxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goXHJcbiAgICAgIEJBU0VfVVJMICsgXCIvd3AtanNvbi9haS1jb250ZW50L3YxL3NhdmUtbWVzc2FnZS1zZXR0aW5nXCIsXHJcbiAgICAgIHtcclxuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxyXG4gICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgIFwiWC1XUC1Ob25jZVwiOiB3cEFwaVNldHRpbmdzLm5vbmNlLFxyXG4gICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShhcGlEYXRhKSxcclxuICAgICAgfSxcclxuICAgICk7XHJcbiAgICBjb25zdCByZXNwb25zZV9kYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xyXG4gICAgcmV0dXJuIHJlc3BvbnNlX2RhdGE7XHJcbiAgfSxcclxuKTtcclxuXHJcbmNvbnN0IENoYXRib3RTbGljZSA9IGNyZWF0ZVNsaWNlKHtcclxuICBuYW1lOiBcImNoYXRib3RcIixcclxuICBpbml0aWFsU3RhdGU6IHtcclxuICAgIGlzX2xvYWRpbmc6IHtcclxuICAgICAgbG9hZDogZmFsc2UsXHJcbiAgICAgIGFwcGVhcmFuY2U6IGZhbHNlLFxyXG4gICAgICBtZXNzYWdlOiBmYWxzZSxcclxuICAgICAgbW9kZTogZmFsc2UsXHJcbiAgICB9LFxyXG4gICAgZXJyb3I6IG51bGwsXHJcbiAgICBDaGF0Ym90RGF0YToge30sXHJcbiAgICBtZXNzYWdlOiBcIlwiLFxyXG4gIH0sXHJcbiAgcmVkdWNlcnM6IHt9LFxyXG4gIGV4dHJhUmVkdWNlcnM6IChidWlsZGVyKSA9PiB7XHJcbiAgICBidWlsZGVyXHJcbiAgICAgIC5hZGRDYXNlKEdldENoYXRib3REYXRhLnBlbmRpbmcsIChzdGF0ZSkgPT4ge1xyXG4gICAgICAgIHN0YXRlLmlzX2xvYWRpbmcubG9hZCA9IHRydWU7XHJcbiAgICAgICAgc3RhdGUuZXJyb3IgPSBudWxsO1xyXG4gICAgICB9KVxyXG4gICAgICAuYWRkQ2FzZShHZXRDaGF0Ym90RGF0YS5mdWxmaWxsZWQsIChzdGF0ZSwgYWN0aW9uKSA9PiB7XHJcbiAgICAgICAgaWYgKGFjdGlvbi5wYXlsb2FkPy5zdWNjZXNzID09PSB0cnVlKSB7XHJcbiAgICAgICAgICBzdGF0ZS5DaGF0Ym90RGF0YSA9IGFjdGlvbi5wYXlsb2FkPy5kYXRhPy5kYXRhO1xyXG4gICAgICAgICAgc3RhdGUubWVzc2FnZSA9IGFjdGlvbi5wYXlsb2FkPy5kYXRhPy5tZXNzYWdlO1xyXG4gICAgICAgICAgc3RhdGUuaXNfbG9hZGluZy5sb2FkID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24ucGF5bG9hZD8uc3VjY2VzcyA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgIHN0YXRlLmVycm9yID0gYWN0aW9uLnBheWxvYWQ/LmRhdGE/Lm1lc3NhZ2U7XHJcbiAgICAgICAgICBzdGF0ZS5pc19sb2FkaW5nLmxvYWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5hZGRDYXNlKEdldENoYXRib3REYXRhLnJlamVjdGVkLCAoc3RhdGUsIGFjdGlvbikgPT4ge1xyXG4gICAgICAgIHN0YXRlLmVycm9yID1cclxuICAgICAgICAgIGFjdGlvbi5lcnJvcj8ubWVzc2FnZSB8fFxyXG4gICAgICAgICAgXCJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBmZXRjaGluZyBjaGF0Ym90IGRhdGFcIjtcclxuICAgICAgICBzdGF0ZS5pc19sb2FkaW5nLmxvYWQgPSBmYWxzZTtcclxuICAgICAgfSlcclxuXHJcbiAgICAgIC8vIFNhdmUgQ2hhdGJvdCBEYXRhIGNhc2VzXHJcbiAgICAgIC5hZGRDYXNlKFNhdmVBcHBlYXJhbmNlU2V0dGluZy5wZW5kaW5nLCAoc3RhdGUpID0+IHtcclxuICAgICAgICBzdGF0ZS5pc19sb2FkaW5nLmFwcGVhcmFuY2UgPSB0cnVlO1xyXG4gICAgICAgIHN0YXRlLmVycm9yID0gbnVsbDtcclxuICAgICAgfSlcclxuICAgICAgLmFkZENhc2UoU2F2ZUFwcGVhcmFuY2VTZXR0aW5nLmZ1bGZpbGxlZCwgKHN0YXRlLCBhY3Rpb24pID0+IHtcclxuICAgICAgICBpZiAoYWN0aW9uLnBheWxvYWQ/LnN1Y2Nlc3MgPT09IHRydWUpIHtcclxuICAgICAgICAgIHN0YXRlLkNoYXRib3REYXRhID0gYWN0aW9uLnBheWxvYWQ/LmRhdGE/LmRhdGEgfHwgc3RhdGUuQ2hhdGJvdERhdGE7XHJcbiAgICAgICAgICB0b2FzdC5zdWNjZXNzKFxyXG4gICAgICAgICAgICBhY3Rpb24ucGF5bG9hZD8uZGF0YT8ubWVzc2FnZSB8fCBcIlNldHRpbmdzIHNhdmVkIHN1Y2Nlc3NmdWxseVwiLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHN0YXRlLm1lc3NhZ2UgPVxyXG4gICAgICAgICAgICBhY3Rpb24ucGF5bG9hZD8uZGF0YT8ubWVzc2FnZSB8fCBcIlNldHRpbmdzIHNhdmVkIHN1Y2Nlc3NmdWxseVwiO1xyXG4gICAgICAgICAgc3RhdGUuaXNfbG9hZGluZy5hcHBlYXJhbmNlID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24ucGF5bG9hZD8uc3VjY2VzcyA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgIHN0YXRlLmVycm9yID1cclxuICAgICAgICAgICAgYWN0aW9uLnBheWxvYWQ/LmRhdGE/Lm1lc3NhZ2UgfHwgXCJGYWlsZWQgdG8gc2F2ZSBzZXR0aW5nc1wiO1xyXG4gICAgICAgICAgdG9hc3QuZXJyb3IoXHJcbiAgICAgICAgICAgIGFjdGlvbi5wYXlsb2FkPy5kYXRhPy5tZXNzYWdlIHx8IFwiRmFpbGVkIHRvIHNhdmUgc2V0dGluZ3NcIixcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBzdGF0ZS5pc19sb2FkaW5nLmFwcGVhcmFuY2UgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5hZGRDYXNlKFNhdmVBcHBlYXJhbmNlU2V0dGluZy5yZWplY3RlZCwgKHN0YXRlLCBhY3Rpb24pID0+IHtcclxuICAgICAgICBzdGF0ZS5lcnJvciA9XHJcbiAgICAgICAgICBhY3Rpb24uZXJyb3I/Lm1lc3NhZ2UgfHxcclxuICAgICAgICAgIFwiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgc2F2aW5nIGNoYXRib3QgZGF0YVwiO1xyXG4gICAgICAgIHN0YXRlLmlzX2xvYWRpbmcuYXBwZWFyYW5jZSA9IGZhbHNlO1xyXG4gICAgICB9KVxyXG5cclxuICAgICAgLy8gQWRkIHRoZXNlIGNhc2VzIHRvIHlvdXIgZXhpc3RpbmcgZXh0cmFSZWR1Y2VycyBpbiBDaGF0Ym90U2xpY2UuanNcclxuICAgICAgLmFkZENhc2UoU2F2ZU1lc3NhZ2VTZXR0aW5ncy5wZW5kaW5nLCAoc3RhdGUpID0+IHtcclxuICAgICAgICBzdGF0ZS5lcnJvciA9IG51bGw7XHJcbiAgICAgICAgc3RhdGUuaXNfbG9hZGluZy5tZXNzYWdlID0gdHJ1ZTtcclxuICAgICAgfSlcclxuICAgICAgLmFkZENhc2UoU2F2ZU1lc3NhZ2VTZXR0aW5ncy5mdWxmaWxsZWQsIChzdGF0ZSwgYWN0aW9uKSA9PiB7XHJcbiAgICAgICAgaWYgKGFjdGlvbi5wYXlsb2FkPy5zdWNjZXNzID09PSB0cnVlKSB7XHJcbiAgICAgICAgICBzdGF0ZS5tZXNzYWdlID1cclxuICAgICAgICAgICAgYWN0aW9uLnBheWxvYWQ/Lm1lc3NhZ2UgfHwgXCJNZXNzYWdlIHNldHRpbmdzIHNhdmVkIHN1Y2Nlc3NmdWxseVwiO1xyXG4gICAgICAgICAgdG9hc3Quc3VjY2VzcyhcclxuICAgICAgICAgICAgYWN0aW9uLnBheWxvYWQ/Lm1lc3NhZ2UgfHwgXCJNZXNzYWdlIHNldHRpbmdzIHNhdmVkIHN1Y2Nlc3NmdWxseVwiLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHN0YXRlLmlzX2xvYWRpbmcubWVzc2FnZSA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBzdGF0ZS5lcnJvciA9XHJcbiAgICAgICAgICAgIGFjdGlvbi5wYXlsb2FkPy5kYXRhPy5tZXNzYWdlIHx8IFwiRmFpbGVkIHRvIHNhdmUgbWVzc2FnZSBzZXR0aW5nc1wiO1xyXG4gICAgICAgICAgdG9hc3QuZXJyb3IoXHJcbiAgICAgICAgICAgIGFjdGlvbi5wYXlsb2FkPy5kYXRhPy5tZXNzYWdlIHx8IFwiRmFpbGVkIHRvIHNhdmUgbWVzc2FnZSBzZXR0aW5nc1wiLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHN0YXRlLmlzX2xvYWRpbmcubWVzc2FnZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgLmFkZENhc2UoU2F2ZU1lc3NhZ2VTZXR0aW5ncy5yZWplY3RlZCwgKHN0YXRlLCBhY3Rpb24pID0+IHtcclxuICAgICAgICBzdGF0ZS5lcnJvciA9XHJcbiAgICAgICAgICBhY3Rpb24uZXJyb3I/Lm1lc3NhZ2UgfHxcclxuICAgICAgICAgIFwiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgc2F2aW5nIG1lc3NhZ2Ugc2V0dGluZ3NcIjtcclxuICAgICAgICBzdGF0ZS5pc19sb2FkaW5nLm1lc3NhZ2UgPSBmYWxzZTtcclxuICAgICAgfSk7XHJcbiAgfSxcclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBDaGF0Ym90U2xpY2UucmVkdWNlcjtcclxuIiwiLyoqXHJcbiAqIFNlcnZlci1iYWNrZWQgc3RvcmFnZSAodXNlciBtZXRhICsgc2l0ZSBvcHRpb25zKSB2aWEgUkVTVCBgYXV0b3dwL3YxL3VzZXItY2xpZW50LXN0b3JhZ2VgLlxyXG4gKiBSZXBsYWNlcyBsb2NhbFN0b3JhZ2UgZm9yIFdQQUkgU1BBIHN0YXRlLlxyXG4gKi9cclxuXHJcbmNvbnN0IExTX0tFWVMgPSBbXHJcbiAgXCJ3cGFpX2F1dGhfc2Vzc2lvbl9ibG9iXCIsXHJcbiAgXCJ0b2tlblwiLFxyXG4gIFwidXNlcl9kYXRhXCIsXHJcbiAgXCJzZWxlY3RlZExlYWRzXCIsXHJcbiAgXCJzYXZlZFVybHNcIixcclxuICBcIndwYWlfYWdlbnRfbW9kZVwiLFxyXG4gIFwid3BhaV9jaGF0Ym90X3Zpc2libGVcIixcclxuICBcIndwYWlfc2lkZWJhcl9jb2xsYXBzZWRcIixcclxuICBcIndwYWlfdXNlcl9pZFwiLFxyXG4gIFwid3BhaV9wdXNoX2RldmljZV9pZFwiLFxyXG4gIFwid3BhaV9sYXN0X3JlZ2lzdGVyZWRfZmNtX3Rva2VuXCIsXHJcbiAgXCJ3cGFpX3JlYWx0aW1lX2NoYXRfZW5hYmxlZFwiLFxyXG4gIFwid3BhaV92aXNpdG9yX2ludGVsbGlnZW5jZV9lbmFibGVkXCIsXHJcbiAgXCJDaGF0Ym90QXV0aG9yaXphdGlvblwiLFxyXG5dO1xyXG5cclxubGV0IGNhY2hlID0ge307XHJcbmxldCBoeWRyYXRlZCA9IGZhbHNlO1xyXG5sZXQgaW5mbGlnaHRIeWRyYXRlID0gbnVsbDtcclxuXHJcbmxldCBzYXZlVGltZXIgPSBudWxsO1xyXG5jb25zdCBwZW5kaW5nUGF0Y2ggPSBPYmplY3QuY3JlYXRlKG51bGwpO1xyXG5cclxuZnVuY3Rpb24gd3BSZXN0Tm9uY2UoKSB7XHJcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBcIlwiO1xyXG4gIHJldHVybiAoXHJcbiAgICAod2luZG93LndwQXBpU2V0dGluZ3MgJiYgd2luZG93LndwQXBpU2V0dGluZ3Mubm9uY2UpIHx8XHJcbiAgICAod2luZG93LndwYWlTZXNzaW9uRGF0YSAmJiB3aW5kb3cud3BhaVNlc3Npb25EYXRhLm5vbmNlKSB8fFxyXG4gICAgXCJcIlxyXG4gICk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlc3RSb290KCkge1xyXG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiIHx8ICF3aW5kb3cud3BBcGlTZXR0aW5ncz8ucm9vdCkgcmV0dXJuIFwiXCI7XHJcbiAgcmV0dXJuIFN0cmluZyh3aW5kb3cud3BBcGlTZXR0aW5ncy5yb290KS5yZXBsYWNlKC9cXC8rJC8sIFwiXCIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0VXNlckNsaWVudFN0b3JhZ2VTeW5jKGtleSkge1xyXG4gIGNvbnN0IHYgPSBjYWNoZVtrZXldO1xyXG4gIGlmICh2ID09PSB1bmRlZmluZWQgfHwgdiA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XHJcbiAgcmV0dXJuIFN0cmluZyh2KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldFVzZXJDbGllbnRTdG9yYWdlU3luYyhrZXksIHZhbHVlKSB7XHJcbiAgY29uc3QgcyA9XHJcbiAgICB2YWx1ZSA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiA/IHZhbHVlIDogU3RyaW5nKHZhbHVlKTtcclxuICBpZiAocyA9PT0gbnVsbCkge1xyXG4gICAgZGVsZXRlIGNhY2hlW2tleV07XHJcbiAgICBwZW5kaW5nUGF0Y2hba2V5XSA9IG51bGw7XHJcbiAgfSBlbHNlIHtcclxuICAgIGNhY2hlW2tleV0gPSBzO1xyXG4gICAgcGVuZGluZ1BhdGNoW2tleV0gPSBzO1xyXG4gIH1cclxuICBzY2hlZHVsZUZsdXNoKCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVVc2VyQ2xpZW50U3RvcmFnZVN5bmMoa2V5KSB7XHJcbiAgZGVsZXRlIGNhY2hlW2tleV07XHJcbiAgcGVuZGluZ1BhdGNoW2tleV0gPSBudWxsO1xyXG4gIHNjaGVkdWxlRmx1c2goKTtcclxufVxyXG5cclxuZnVuY3Rpb24gc2NoZWR1bGVGbHVzaCgpIHtcclxuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuO1xyXG4gIGlmIChzYXZlVGltZXIpIGNsZWFyVGltZW91dChzYXZlVGltZXIpO1xyXG4gIHNhdmVUaW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcclxuICAgIHNhdmVUaW1lciA9IG51bGw7XHJcbiAgICB2b2lkIGZsdXNoUGVuZGluZygpO1xyXG4gIH0sIDQwMCk7XHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGZsdXNoUGVuZGluZygpIHtcclxuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocGVuZGluZ1BhdGNoKTtcclxuICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHJldHVybjtcclxuICBjb25zdCBwYXRjaCA9IHsgLi4ucGVuZGluZ1BhdGNoIH07XHJcbiAgZm9yIChjb25zdCBrIG9mIGtleXMpIGRlbGV0ZSBwZW5kaW5nUGF0Y2hba107XHJcblxyXG4gIGNvbnN0IHJvb3QgPSByZXN0Um9vdCgpO1xyXG4gIGNvbnN0IG5vbmNlID0gd3BSZXN0Tm9uY2UoKTtcclxuICBpZiAoIXJvb3QgfHwgIW5vbmNlKSB7XHJcbiAgICBPYmplY3QuYXNzaWduKHBlbmRpbmdQYXRjaCwgcGF0Y2gpO1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuICB0cnkge1xyXG4gICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goYCR7cm9vdH0vYXV0b3dwL3YxL3VzZXItY2xpZW50LXN0b3JhZ2VgLCB7XHJcbiAgICAgIG1ldGhvZDogXCJQT1NUXCIsXHJcbiAgICAgIGNyZWRlbnRpYWxzOiBcInNhbWUtb3JpZ2luXCIsXHJcbiAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgICBcIlgtV1AtTm9uY2VcIjogbm9uY2UsXHJcbiAgICAgIH0sXHJcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgcGF0Y2ggfSksXHJcbiAgICB9KTtcclxuICAgIGlmICghcmVzLm9rKSB7XHJcbiAgICAgIE9iamVjdC5hc3NpZ24ocGVuZGluZ1BhdGNoLCBwYXRjaCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xyXG4gICAgaWYgKGRhdGEgJiYgdHlwZW9mIGRhdGEgPT09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkoZGF0YSkpIHtcclxuICAgICAgY2FjaGUgPSB7IC4uLmRhdGEgfTtcclxuICAgIH1cclxuICAgIHB1cmdlTGVnYWN5TG9jYWxTdG9yYWdlKCk7XHJcbiAgfSBjYXRjaCB7XHJcbiAgICBPYmplY3QuYXNzaWduKHBlbmRpbmdQYXRjaCwgcGF0Y2gpO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gcHVyZ2VMZWdhY3lMb2NhbFN0b3JhZ2UoKSB7XHJcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIgfHwgIXdpbmRvdy5sb2NhbFN0b3JhZ2UpIHJldHVybjtcclxuICB0cnkge1xyXG4gICAgZm9yIChjb25zdCBrIG9mIExTX0tFWVMpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oayk7XHJcbiAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgIC8qIGlnbm9yZSAqL1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSBjYXRjaCB7XHJcbiAgICAvKiBpZ25vcmUgKi9cclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG1pZ3JhdGVMZWdhY3lMb2NhbFN0b3JhZ2VUb0NhY2hlKCkge1xyXG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiIHx8ICF3aW5kb3cubG9jYWxTdG9yYWdlKSByZXR1cm4gZmFsc2U7XHJcbiAgaWYgKFxyXG4gICAgd2luZG93LnNlc3Npb25TdG9yYWdlICYmXHJcbiAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcIndwYWlfZGJfc3RvcmFnZV9taWdyYXRlZF92MVwiKVxyXG4gICkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBsZXQgY2hhbmdlZCA9IGZhbHNlO1xyXG4gIGZvciAoY29uc3QgayBvZiBMU19LRVlTKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCB2ID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKGspO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdiAhPSBudWxsICYmXHJcbiAgICAgICAgdiAhPT0gXCJcIiAmJlxyXG4gICAgICAgIChjYWNoZVtrXSA9PT0gdW5kZWZpbmVkIHx8IGNhY2hlW2tdID09PSBudWxsIHx8IGNhY2hlW2tdID09PSBcIlwiKVxyXG4gICAgICApIHtcclxuICAgICAgICBjYWNoZVtrXSA9IHY7XHJcbiAgICAgICAgcGVuZGluZ1BhdGNoW2tdID0gdjtcclxuICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCB7XHJcbiAgICAgIC8qIGlnbm9yZSAqL1xyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gY2hhbmdlZDtcclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGh5ZHJhdGVVc2VyQ2xpZW50U3RvcmFnZSgpIHtcclxuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIGNhY2hlO1xyXG4gIGlmIChoeWRyYXRlZCkgcmV0dXJuIGNhY2hlO1xyXG4gIGlmIChpbmZsaWdodEh5ZHJhdGUpIHJldHVybiBpbmZsaWdodEh5ZHJhdGU7XHJcblxyXG4gIGluZmxpZ2h0SHlkcmF0ZSA9IChhc3luYyAoKSA9PiB7XHJcbiAgICBsZXQgc2VydmVyT2sgPSBmYWxzZTtcclxuICAgIGNvbnN0IHJvb3QgPSByZXN0Um9vdCgpO1xyXG4gICAgY29uc3Qgbm9uY2UgPSB3cFJlc3ROb25jZSgpO1xyXG4gICAgaWYgKHJvb3QgJiYgbm9uY2UpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChgJHtyb290fS9hdXRvd3AvdjEvdXNlci1jbGllbnQtc3RvcmFnZWAsIHtcclxuICAgICAgICAgIGNyZWRlbnRpYWxzOiBcInNhbWUtb3JpZ2luXCIsXHJcbiAgICAgICAgICBoZWFkZXJzOiB7IFwiWC1XUC1Ob25jZVwiOiBub25jZSB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChyZXMub2spIHtcclxuICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xyXG4gICAgICAgICAgaWYgKGRhdGEgJiYgdHlwZW9mIGRhdGEgPT09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkoZGF0YSkpIHtcclxuICAgICAgICAgICAgY2FjaGUgPSB7IC4uLmRhdGEgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHNlcnZlck9rID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgIC8qIGlnbm9yZSAqL1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbWlncmF0ZWQgPSBtaWdyYXRlTGVnYWN5TG9jYWxTdG9yYWdlVG9DYWNoZSgpO1xyXG4gICAgaWYgKG1pZ3JhdGVkICYmIE9iamVjdC5rZXlzKHBlbmRpbmdQYXRjaCkubGVuZ3RoID4gMCkge1xyXG4gICAgICBhd2FpdCBmbHVzaFBlbmRpbmcoKTtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBpZiAod2luZG93LnNlc3Npb25TdG9yYWdlKSB7XHJcbiAgICAgICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShcIndwYWlfZGJfc3RvcmFnZV9taWdyYXRlZF92MVwiLCBcIjFcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIHtcclxuICAgICAgICAvKiBpZ25vcmUgKi9cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChzZXJ2ZXJPaykge1xyXG4gICAgICBwdXJnZUxlZ2FjeUxvY2FsU3RvcmFnZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGh5ZHJhdGVkID0gdHJ1ZTtcclxuICAgIHJldHVybiBjYWNoZTtcclxuICB9KSgpO1xyXG5cclxuICBjb25zdCBvdXQgPSBhd2FpdCBpbmZsaWdodEh5ZHJhdGU7XHJcbiAgaW5mbGlnaHRIeWRyYXRlID0gbnVsbDtcclxuICByZXR1cm4gb3V0O1xyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmx1c2hVc2VyQ2xpZW50U3RvcmFnZU5vdygpIHtcclxuICBpZiAoc2F2ZVRpbWVyICYmIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcclxuICAgIGNsZWFyVGltZW91dChzYXZlVGltZXIpO1xyXG4gICAgc2F2ZVRpbWVyID0gbnVsbDtcclxuICB9XHJcbiAgYXdhaXQgZmx1c2hQZW5kaW5nKCk7XHJcbn1cclxuIiwiLyoqXG4gKiBTZXNzaW9uIGJsb2IgZm9yIGNyb3NzLXBhZ2UgYXV0aCAocmVwbGFjZXMgZm9ybWVyIFJFU1QgYGFpLWNvbnRlbnQvdjEvYXV0aC10b2tlbmApLlxuICogTXVzdCBtYXRjaCBsZWdhY3kgc2NyaXB0czogYXNzZXRzL2pzL2FpLWVkaXRvci10b29sYmFyLmpzLCBhaS1jb21tZW50LWFkbWluLmpzLCB0ZXN0LWNvbW1lbnQtYWpheC5qc1xuICovXG5pbXBvcnQge1xuICBmbHVzaFVzZXJDbGllbnRTdG9yYWdlTm93LFxuICBnZXRVc2VyQ2xpZW50U3RvcmFnZVN5bmMsXG4gIGh5ZHJhdGVVc2VyQ2xpZW50U3RvcmFnZSxcbiAgcmVtb3ZlVXNlckNsaWVudFN0b3JhZ2VTeW5jLFxuICBzZXRVc2VyQ2xpZW50U3RvcmFnZVN5bmMsXG59IGZyb20gXCJAL3V0aWxzL3VzZXJDbGllbnRTdG9yYWdlLmpzXCI7XG5cbmV4cG9ydCBjb25zdCBXUEFJX0FVVEhfU0VTU0lPTl9TVE9SQUdFX0tFWSA9IFwid3BhaV9hdXRoX3Nlc3Npb25fYmxvYlwiO1xuXG5mdW5jdGlvbiBjb25zdW1lQm9vdHN0cmFwU2Vzc2lvbkJsb2IoKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiIHx8ICF3aW5kb3cud3BBcGlTZXR0aW5ncykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IGJvb3QgPSB3aW5kb3cud3BBcGlTZXR0aW5ncy5hdXRoU2Vzc2lvbkJsb2I7XG4gIGlmICh0eXBlb2YgYm9vdCAhPT0gXCJzdHJpbmdcIiB8fCBib290Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHRyeSB7XG4gICAgZGVsZXRlIHdpbmRvdy53cEFwaVNldHRpbmdzLmF1dGhTZXNzaW9uQmxvYjtcbiAgfSBjYXRjaCB7XG4gICAgd2luZG93LndwQXBpU2V0dGluZ3MuYXV0aFNlc3Npb25CbG9iID0gXCJcIjtcbiAgfVxuICByZXR1cm4gYm9vdDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY2xlYXJBdXRoU2Vzc2lvbkluV29yZFByZXNzRGIoKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiIHx8ICF3aW5kb3cuYWpheHVybCkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBub25jZSA9IHdpbmRvdy53cEFwaVNldHRpbmdzPy5ub25jZTtcbiAgaWYgKCFub25jZSkge1xuICAgIHJldHVybjtcbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IGJvZHkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgYm9keS5zZXQoXCJhY3Rpb25cIiwgXCJ3cGFpX2NsZWFyX2F1dGhfc2Vzc2lvblwiKTtcbiAgICBib2R5LnNldChcIm5vbmNlXCIsIG5vbmNlKTtcbiAgICBhd2FpdCBmZXRjaCh3aW5kb3cuYWpheHVybCwge1xuICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgIGNyZWRlbnRpYWxzOiBcInNhbWUtb3JpZ2luXCIsXG4gICAgICBoZWFkZXJzOiB7IFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIgfSxcbiAgICAgIGJvZHksXG4gICAgfSk7XG4gIH0gY2F0Y2gge1xuICAgIC8vIGJlc3QtZWZmb3J0OyBsb2NhbCBzZXNzaW9uIGlzIGFscmVhZHkgY2xlYXJlZFxuICB9XG59XG5cbmV4cG9ydCBjb25zdCBUb2tlbkhhbmRsZSA9IHtcbiAgYXBpRXJyb3IoZXJyb3IpIHtcbiAgICBsZXQgZXJyb3JNZXNzYWdlID0gXCJBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VycmVkXCI7XG4gICAgaWYgKGVycm9yPy5yZXNwb25zZSkge1xuICAgICAgaWYgKGVycm9yLnJlc3BvbnNlLmRhdGEgJiYgZXJyb3IucmVzcG9uc2UuZGF0YS5tZXNzYWdlKSB7XG4gICAgICAgIGVycm9yTWVzc2FnZSA9IGVycm9yLnJlc3BvbnNlLmRhdGEubWVzc2FnZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yTWVzc2FnZSA9IGBTZXJ2ZXIgZXJyb3I6ICR7ZXJyb3IucmVzcG9uc2Uuc3RhdHVzfWA7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlcnJvcj8ucmVxdWVzdCkge1xuICAgICAgZXJyb3JNZXNzYWdlID0gXCJObyByZXNwb25zZSBmcm9tIHNlcnZlci4gUGxlYXNlIGNoZWNrIHlvdXIgY29ubmVjdGlvbi5cIjtcbiAgICB9IGVsc2UgaWYgKGVycm9yPy5tZXNzYWdlKSB7XG4gICAgICBlcnJvck1lc3NhZ2UgPSBlcnJvci5tZXNzYWdlO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICBlcnJvcjogZXJyb3JNZXNzYWdlLFxuICAgIH07XG4gIH0sXG5cbiAgYXN5bmMgY3JlYXRlVG9rZW4odG9rZW4pIHtcbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICBtZXNzYWdlOiBcIkJyb3dzZXIgY29udGV4dCBpcyBub3QgYXZhaWxhYmxlLlwiLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgYXdhaXQgaHlkcmF0ZVVzZXJDbGllbnRTdG9yYWdlKCk7XG4gICAgICBzZXRVc2VyQ2xpZW50U3RvcmFnZVN5bmMoV1BBSV9BVVRIX1NFU1NJT05fU1RPUkFHRV9LRVksIHRva2VuKTtcbiAgICAgIGF3YWl0IGZsdXNoVXNlckNsaWVudFN0b3JhZ2VOb3coKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgIG1lc3NhZ2U6IFwiU2Vzc2lvbiBzdG9yZWRcIixcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IHRoaXMuYXBpRXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgfSxcblxuICBhc3luYyBnZXRUb2tlbigpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UsIHRva2VuOiBudWxsIH07XG4gICAgICB9XG4gICAgICBhd2FpdCBoeWRyYXRlVXNlckNsaWVudFN0b3JhZ2UoKTtcbiAgICAgIGxldCBibG9iID0gZ2V0VXNlckNsaWVudFN0b3JhZ2VTeW5jKFdQQUlfQVVUSF9TRVNTSU9OX1NUT1JBR0VfS0VZKTtcbiAgICAgIGlmICghYmxvYikge1xuICAgICAgICBjb25zdCBtaWdyYXRlZCA9IGNvbnN1bWVCb290c3RyYXBTZXNzaW9uQmxvYigpO1xuICAgICAgICBpZiAobWlncmF0ZWQpIHtcbiAgICAgICAgICBzZXRVc2VyQ2xpZW50U3RvcmFnZVN5bmMoV1BBSV9BVVRIX1NFU1NJT05fU1RPUkFHRV9LRVksIG1pZ3JhdGVkKTtcbiAgICAgICAgICBhd2FpdCBmbHVzaFVzZXJDbGllbnRTdG9yYWdlTm93KCk7XG4gICAgICAgICAgYmxvYiA9IGdldFVzZXJDbGllbnRTdG9yYWdlU3luYyhXUEFJX0FVVEhfU0VTU0lPTl9TVE9SQUdFX0tFWSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghYmxvYikge1xuICAgICAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSwgdG9rZW46IG51bGwgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUsIHRva2VuOiB7IGF1dGhfdG9rZW46IGJsb2IgfSB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyB0aGlzLmFwaUVycm9yKGVycm9yKTtcbiAgICB9XG4gIH0sXG5cbiAgYXN5bmMgZGVsZXRlVG9rZW4oKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIGF3YWl0IGh5ZHJhdGVVc2VyQ2xpZW50U3RvcmFnZSgpO1xuICAgICAgICByZW1vdmVVc2VyQ2xpZW50U3RvcmFnZVN5bmMoV1BBSV9BVVRIX1NFU1NJT05fU1RPUkFHRV9LRVkpO1xuICAgICAgICByZW1vdmVVc2VyQ2xpZW50U3RvcmFnZVN5bmMoXCJDaGF0Ym90QXV0aG9yaXphdGlvblwiKTtcbiAgICAgICAgYXdhaXQgZmx1c2hVc2VyQ2xpZW50U3RvcmFnZU5vdygpO1xuICAgICAgfVxuICAgICAgYXdhaXQgY2xlYXJBdXRoU2Vzc2lvbkluV29yZFByZXNzRGIoKTtcbiAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHdpbmRvdy53cEFwaVNldHRpbmdzKSB7XG4gICAgICAgIHdpbmRvdy53cEFwaVNldHRpbmdzLmF1dGhTZXNzaW9uQmxvYiA9IFwiXCI7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICBtZXNzYWdlOiBcIkF1dGhlbnRpY2F0aW9uIHRva2VuIGNsZWFyZWQgc3VjY2Vzc2Z1bGx5XCIsXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyB0aGlzLmFwaUVycm9yKGVycm9yKTtcbiAgICB9XG4gIH0sXG59O1xuIiwiaW1wb3J0IHsgVG9rZW5IYW5kbGUgfSBmcm9tIFwiLi9BdXRoVG9rZW5cIjtcbmltcG9ydCB7XG4gIGdldFVzZXJDbGllbnRTdG9yYWdlU3luYyxcbiAgc2V0VXNlckNsaWVudFN0b3JhZ2VTeW5jLFxufSBmcm9tIFwiLi91c2VyQ2xpZW50U3RvcmFnZS5qc1wiO1xuXG4vKiogRGlyZWN0IFNhYVMgYmFzZXMgKGZhbGxiYWNrIHdoZW4gbm90IHJ1bm5pbmcgaW5zaWRlIFdvcmRQcmVzcyB3aXRoIFJFU1QgcHJveHkpLiAqL1xuZXhwb3J0IGNvbnN0IEFQSV9VUkxTID0ge1xuICBMT0NBTEhPU1Q6IFwiaHR0cDovL2xvY2FsaG9zdDo4MDAwL2FwaS92MS9cIixcbiAgREVWRUxPUE1FTlQ6IFwiaHR0cDovL2tsaXpvcy5kZG5zLm5ldDo4MDAwL2FwaS92MS9cIixcbiAgUFJPRFVDVElPTjogXCJodHRwczovL2F1dG93cC5haS9hcGkvdjEvXCIsXG59O1xuXG4vKipcbiAqIFJFU1Qgbm9uY2UgZm9yIGF1dG93cC92MSBwcm94eSAod3BfcmVzdCkuIE1hdGNoZXMgQ2hhdGJvdFNlcnZpY2UgLyBBZG1pbkNvbnRyb2xsZXIgbG9jYWxpemF0aW9uLlxuICovXG5leHBvcnQgY29uc3QgZ2V0V3BSZXN0Tm9uY2UgPSAoKSA9PiB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gXCJcIjtcbiAgcmV0dXJuIChcbiAgICAod2luZG93LndwQXBpU2V0dGluZ3MgJiYgd2luZG93LndwQXBpU2V0dGluZ3Mubm9uY2UpIHx8XG4gICAgKHdpbmRvdy53cGFpU2Vzc2lvbkRhdGEgJiYgd2luZG93LndwYWlTZXNzaW9uRGF0YS5ub25jZSkgfHxcbiAgICAod2luZG93LmFpQ29udGVudFNldHRpbmdzICYmIHdpbmRvdy5haUNvbnRlbnRTZXR0aW5ncy5ub25jZSkgfHxcbiAgICBcIlwiXG4gICk7XG59O1xuXG4vKipcbiAqIEJhc2UgVVJMIGZvciBTYWFTLXNoYXBlZCBBUEkgY2FsbHMuXG4gKiBJbiBXb3JkUHJlc3MgYWRtaW46IGB7d3BBcGlTZXR0aW5ncy5yb290fWF1dG93cC92MS9gIChwbHVnaW4gcHJveHkpLlxuICogT3ZlcnJpZGUgZGlyZWN0IFNhYWFzOiBzZXQgYHdpbmRvdy53cGFpUGx1Z2luU2V0dGluZ3MuZGlyZWN0U2FhU0FwaVVybGAgKG11c3QgZW5kIHdpdGggYC9gIG9yIGl0IGlzIG5vcm1hbGl6ZWQpLlxuICovXG5leHBvcnQgY29uc3QgZ2V0QXV0b3dwQXBpQmFzZVVybCA9ICgpID0+IHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93LndwYWlQbHVnaW5TZXR0aW5ncz8uZGlyZWN0U2FhU0FwaVVybCkge1xuICAgIGNvbnN0IHUgPSBTdHJpbmcod2luZG93LndwYWlQbHVnaW5TZXR0aW5ncy5kaXJlY3RTYWFTQXBpVXJsKS50cmltKCk7XG4gICAgcmV0dXJuIHUuZW5kc1dpdGgoXCIvXCIpID8gdSA6IGAke3V9L2A7XG4gIH1cbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93LndwQXBpU2V0dGluZ3M/LnJvb3QpIHtcbiAgICBjb25zdCByb290ID0gU3RyaW5nKHdpbmRvdy53cEFwaVNldHRpbmdzLnJvb3QpLnJlcGxhY2UoL1xcLyskLywgXCJcIik7XG4gICAgcmV0dXJuIGAke3Jvb3R9L2F1dG93cC92MS9gO1xuICB9XG4gIHJldHVybiBBUElfVVJMUy5MT0NBTEhPU1Q7XG59O1xuXG5leHBvcnQgY29uc3QgQVBJX1VSTCA9IGdldEF1dG93cEFwaUJhc2VVcmwoKTtcblxuZXhwb3J0IGNvbnN0IFBMVUdJTl9JTkZPID0ge1xuICBuYW1lOiBcIndwYWktd29yZHByZXNzLXBsdWdpblwiLFxuICB2ZXJzaW9uOlxuICAgIHdpbmRvdy53cEFwaVNldHRpbmdzPy5wbHVnaW5WZXJzaW9uIHx8XG4gICAgd2luZG93LndwYWlQbHVnaW5TZXR0aW5ncz8udmVyc2lvbiB8fFxuICAgIFwiMS4wLjBcIixcbn07XG5cbi8qKiBMb2NhbFN0b3JhZ2Uga2V5IGZvciBSZWFsdGltZSBDaGF0IGFkZG9uIGVuYWJsZWQgc3RhdGUgKHRlbXBvcmFyeTsgd2lsbCBtb3ZlIHRvIGJhY2tlbmQgbGF0ZXIpICovXG5leHBvcnQgY29uc3QgUkVBTFRJTUVfQ0hBVF9TVE9SQUdFX0tFWSA9IFwid3BhaV9yZWFsdGltZV9jaGF0X2VuYWJsZWRcIjtcblxuZXhwb3J0IGNvbnN0IGdldFJlYWx0aW1lQ2hhdEVuYWJsZWQgPSAoKSA9PiB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBnZXRVc2VyQ2xpZW50U3RvcmFnZVN5bmMoUkVBTFRJTUVfQ0hBVF9TVE9SQUdFX0tFWSkgPT09IFwidHJ1ZVwiO1xufTtcblxuZXhwb3J0IGNvbnN0IHNldFJlYWx0aW1lQ2hhdEVuYWJsZWQgPSAoZW5hYmxlZCkgPT4ge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuO1xuICBzZXRVc2VyQ2xpZW50U3RvcmFnZVN5bmMoXG4gICAgUkVBTFRJTUVfQ0hBVF9TVE9SQUdFX0tFWSxcbiAgICBlbmFibGVkID8gXCJ0cnVlXCIgOiBcImZhbHNlXCIsXG4gICk7XG59O1xuXG4vKiogTG9jYWxTdG9yYWdlIGtleSBmb3IgVmlzaXRvciBJbnRlbGxpZ2VuY2UgJiBDb250ZW50IE9wdGltaXplciAoQ29tcGV0aXRvciBBbmFseXNpcykgYWRkb24uIE5vIHZhbHVlID0gaGlkZGVuIGluIHNpZGViYXIuICovXG5leHBvcnQgY29uc3QgVklTSVRPUl9JTlRFTExJR0VOQ0VfU1RPUkFHRV9LRVkgPVxuICBcIndwYWlfdmlzaXRvcl9pbnRlbGxpZ2VuY2VfZW5hYmxlZFwiO1xuXG5leHBvcnQgY29uc3QgZ2V0VmlzaXRvckludGVsbGlnZW5jZUVuYWJsZWQgPSAoKSA9PiB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBnZXRVc2VyQ2xpZW50U3RvcmFnZVN5bmMoVklTSVRPUl9JTlRFTExJR0VOQ0VfU1RPUkFHRV9LRVkpID09PSBcInRydWVcIjtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXRWaXNpdG9ySW50ZWxsaWdlbmNlRW5hYmxlZCA9IChlbmFibGVkKSA9PiB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm47XG4gIHNldFVzZXJDbGllbnRTdG9yYWdlU3luYyhcbiAgICBWSVNJVE9SX0lOVEVMTElHRU5DRV9TVE9SQUdFX0tFWSxcbiAgICBlbmFibGVkID8gXCJ0cnVlXCIgOiBcImZhbHNlXCIsXG4gICk7XG59O1xuXG4vKiogV2ViU29ja2V0IGJhc2UgVVJMIGZvciByZWFsdGltZSBjaGF0IChGYXN0QVBJIHNlcnZlcikuIE92ZXJyaWRlIHZpYSB3aW5kb3cud3BhaVBsdWdpblNldHRpbmdzLnJlYWx0aW1lV3NIb3N0ICovXG5leHBvcnQgY29uc3QgZ2V0UmVhbHRpbWVXc0Jhc2VVcmwgPSAoKSA9PiB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gXCJ3czovL2xvY2FsaG9zdDo4MDAxXCI7XG4gIHJldHVybiAoXG4gICAgKHdpbmRvdy53cGFpUGx1Z2luU2V0dGluZ3MgJiYgd2luZG93LndwYWlQbHVnaW5TZXR0aW5ncy5yZWFsdGltZVdzSG9zdCkgfHxcbiAgICBcIndzOi8vbG9jYWxob3N0OjgwMDFcIlxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFNlc3Npb25JRCA9ICgpID0+IHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93LndwYWlTZXNzaW9uRGF0YSkge1xuICAgIHJldHVybiB3aW5kb3cud3BhaVNlc3Npb25EYXRhLnNlc3Npb25JRCB8fCBudWxsO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IEVuY3J5cHRQYXlsb2FkID0gKHBheWxvYWQpID0+IHtcbiAgY29uc3QganNvbkRhdGEgPSBKU09OLnN0cmluZ2lmeShwYXlsb2FkKTtcblxuICAvLyBFbmNvZGUgdG8gVVRGLTggYmVmb3JlIGJhc2U2NFxuICBjb25zdCBlbmNvZGVkRGF0YSA9IGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGpzb25EYXRhKSkpO1xuICByZXR1cm4gZW5jb2RlZERhdGE7XG59O1xuXG5leHBvcnQgY29uc3QgRGVjcnlwdFBheWxvYWQgPSAocGF5bG9hZCkgPT4ge1xuICB0cnkge1xuICAgIGlmICghaXNCYXNlNjQocGF5bG9hZCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBkZWNvZGVkRGF0YSA9IGF0b2IocGF5bG9hZCk7XG4gICAgY29uc3QganNvbkRhdGEgPSBKU09OLnBhcnNlKGRlY29kZWREYXRhKTtcbiAgICByZXR1cm4ganNvbkRhdGE7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgLy8gdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gZGVjb2RlIHRoZSBkYXRhLiBQbGVhc2UgY2hlY2sgdGhlIGRhdGEgZm9ybWF0LicpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59O1xuXG5jb25zdCBpc0Jhc2U2NCA9IChzdHIpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYnRvYShhdG9iKHN0cikpID09PSBzdHI7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbi8qKlxuICogU29tZSBBUElzIHJldHVybiBlbmNvZGVkX2RhdGEgYXMgYSBiYXNlNjQgc3RyaW5nOyBvdGhlcnMgcmV0dXJuIHRoZSBzYW1lIHNoYXBlIGFzIHBhcnNlZCBKU09OLlxuICogV29yZFByZXNzIHNlc3Npb24gc3RvcmFnZSBleHBlY3RzIGEgYmFzZTY0IGJsb2IgdGhhdCBEZWNyeXB0UGF5bG9hZCBjYW4gcmVhZCBvbiByZWxvYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBub3JtYWxpemVFbmNvZGVkRGF0YUZvclNlc3Npb24gPSAoZW5jb2RlZF9kYXRhKSA9PiB7XG4gIGlmIChlbmNvZGVkX2RhdGEgPT0gbnVsbCB8fCBlbmNvZGVkX2RhdGEgPT09IFwiXCIpIHtcbiAgICByZXR1cm4geyBkZWNvZGVkOiBudWxsLCBzdG9yYWdlUGF5bG9hZDogbnVsbCB9O1xuICB9XG4gIGlmICh0eXBlb2YgZW5jb2RlZF9kYXRhID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KGVuY29kZWRfZGF0YSkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZGVjb2RlZDogZW5jb2RlZF9kYXRhLFxuICAgICAgc3RvcmFnZVBheWxvYWQ6IEVuY3J5cHRQYXlsb2FkKGVuY29kZWRfZGF0YSksXG4gICAgfTtcbiAgfVxuICBpZiAodHlwZW9mIGVuY29kZWRfZGF0YSA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiB7XG4gICAgICBkZWNvZGVkOiBEZWNyeXB0UGF5bG9hZChlbmNvZGVkX2RhdGEpLFxuICAgICAgc3RvcmFnZVBheWxvYWQ6IGVuY29kZWRfZGF0YSxcbiAgICB9O1xuICB9XG4gIHJldHVybiB7IGRlY29kZWQ6IG51bGwsIHN0b3JhZ2VQYXlsb2FkOiBudWxsIH07XG59O1xuXG5leHBvcnQgY29uc3QgR2V0RGF0YUZyb21Mb2NhbFN0b3JhZ2UgPSBhc3luYyAoKSA9PiB7XG4gIGNvbnN0IGRhdGFUb2tlblJlc3BvbnNlID0gYXdhaXQgVG9rZW5IYW5kbGUuZ2V0VG9rZW4oKTtcblxuICBjb25zdCBkYXRhID0gZGF0YVRva2VuUmVzcG9uc2UudG9rZW4/LmF1dGhfdG9rZW47XG4gIGlmIChkYXRhKSB7XG4gICAgY29uc3QgZGVjcnlwdGVkRGF0YSA9IERlY3J5cHRQYXlsb2FkKGRhdGEpO1xuICAgIHJldHVybiBkZWNyeXB0ZWREYXRhO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IFRpbWVEaWZmID0gKGRhdGUpID0+IHtcbiAgY29uc3Qgc2Vjb25kcyA9IE1hdGguZmxvb3IoKG5ldyBEYXRlKCkgLSBuZXcgRGF0ZShkYXRlKSkgLyAxMDAwKTtcbiAgY29uc3QgbWludXRlcyA9IE1hdGguZmxvb3Ioc2Vjb25kcyAvIDYwKTtcbiAgaWYgKG1pbnV0ZXMgPCAxKSByZXR1cm4gXCJKdXN0IG5vd1wiO1xuICBpZiAobWludXRlcyA8IDYwKSByZXR1cm4gYCR7bWludXRlc30gbWludXRlJHttaW51dGVzID4gMSA/IFwic1wiIDogXCJcIn0gYWdvYDtcbiAgY29uc3QgaG91cnMgPSBNYXRoLmZsb29yKG1pbnV0ZXMgLyA2MCk7XG4gIGlmIChob3VycyA8IDI0KSByZXR1cm4gYCR7aG91cnN9IGhvdXIke2hvdXJzID4gMSA/IFwic1wiIDogXCJcIn0gYWdvYDtcbiAgY29uc3QgZGF5cyA9IE1hdGguZmxvb3IoaG91cnMgLyAyNCk7XG4gIHJldHVybiBgJHtkYXlzfSBkYXkke2RheXMgPiAxID8gXCJzXCIgOiBcIlwifSBhZ29gO1xufTtcblxuZXhwb3J0IGNvbnN0IFdwQWlQbHVnaW5zUHJpY2luZyA9IFtcbiAge1xuICAgIHRpdGxlOiBcIkZyZWUgUGxhblwiLFxuICAgIGFydGljbGVzUGVyTW9udGg6IDE1LFxuICAgIGNoYXRib3RSZXNwb25zZXM6IDUwMDAsXG4gICAgcHJpY2U6IFwiJDBcIixcbiAgICBwZXJpb2Q6IFwibW9udGhcIixcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgIFwiUGVyZmVjdCBmb3IgaW5kaXZpZHVhbHMgb3Igc21hbGwgcHJvamVjdHMganVzdCBnZXR0aW5nIHN0YXJ0ZWQuXCIsXG4gICAgZmVhdHVyZXM6IFtcbiAgICAgIFwiR2VuZXJhdGUgMTUgYXJ0aWNsZXMgcGVyIG1vbnRoXCIsXG4gICAgICBcIjUwMDAgQUkgY2hhdGJvdCByZXNwb25zZXMgcGVyIG1vbnRoXCIsXG4gICAgICBcIjEwMCBBSSBjb21tZW50cyBwZXIgbW9udGhcIixcbiAgICAgIFwiQmFzaWMgY2hhdGJvdCBmZWF0dXJlc1wiLFxuICAgICAgXCJCYXNpYyBTRU8gb3B0aW1pemF0aW9uXCIsXG4gICAgICBcIkNvbW11bml0eSBzdXBwb3J0XCIsXG4gICAgICBcIkJhc2ljIEFJIG1vZGVsIGF2YWlsYWJsZSBmb3IgMTUgdGltZXNcIixcbiAgICAgIFwiS25vd2xlZGdlIEJhc2UgVG9rZW4gTGltaXQ6IDUwLDAwMCB0b2tlbnNcIixcbiAgICBdLFxuICB9LFxuICB7XG4gICAgdGl0bGU6IFwiU2lsdmVyIFBsYW5cIixcbiAgICBhcnRpY2xlc1Blck1vbnRoOiAxMDAsXG4gICAgY2hhdGJvdFJlc3BvbnNlczogNTAwMDAsXG4gICAgcHJpY2U6IFwiJDIwXCIsXG4gICAgcGVyaW9kOiBcIm1vbnRoXCIsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICBcIkdyZWF0IGZvciBncm93aW5nIGJ1c2luZXNzZXMgc2Vla2luZyB0byBib29zdCB0aGVpciBkaWdpdGFsIGZvb3RwcmludCBhbmQgZW5nYWdlbWVudC5cIixcbiAgICBmZWF0dXJlczogW1xuICAgICAgXCJHZW5lcmF0ZSAxMDAgYXJ0aWNsZXMgcGVyIG1vbnRoXCIsXG4gICAgICBcIjUwLDAwMCBBSSBjaGF0Ym90IHJlc3BvbnNlcyBwZXIgbW9udGhcIixcbiAgICAgIFwiMzAwIEFJIGNvbW1lbnRzIHBlciBtb250aFwiLFxuICAgICAgXCJDdXN0b20gY2hhdGJvdCBwZXJzb25hbGl0eVwiLFxuICAgICAgXCJBZHZhbmNlZCBTRU8gb3B0aW1pemF0aW9uXCIsXG4gICAgICBcIlByaW9yaXR5IHN1cHBvcnRcIixcbiAgICAgIFwiQWNjZXNzIHRvIHByZW1pdW0gdGVtcGxhdGVzXCIsXG4gICAgICBcIkN1c3RvbSBjb250ZW50IHRvbmVcIixcbiAgICAgIFwiS2V5d29yZCByZXNlYXJjaCB0b29sc1wiLFxuICAgICAgXCJDaGF0IHdpZGdldCBjdXN0b21pemF0aW9uXCIsXG4gICAgICBcIktub3dsZWRnZSBCYXNlIFRva2VuIExpbWl0OiAxMDAsMDAwIHRva2Vuc1wiLFxuICAgICAgXCJiYXNpYyBBSSBtb2RlbCBhdmFpbGFibGUgZm9yIDIwIHRpbWVzXCIsXG4gICAgICBcIkFkdmFuY2VkIEFJIG1vZGVsIGF2YWlsYWJsZSBmb3IgNTAgdGltZXNcIixcbiAgICAgIFwiVWx0cmEgQUkgbW9kZWwgYXZhaWxhYmxlIGZvciAyMCB0aW1lc1wiLFxuICAgICAgXCJNYXggQUkgbW9kZWwgYXZhaWxhYmxlIGZvciAxMCB0aW1lc1wiLFxuICAgIF0sXG4gICAgcG9wdWxhcjogdHJ1ZSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiBcIkdvbGQgUGxhblwiLFxuICAgIGFydGljbGVzUGVyTW9udGg6IDE4MCxcbiAgICBjaGF0Ym90UmVzcG9uc2VzOiAxNTAwMDAsXG4gICAgcHJpY2U6IFwiJDQ5XCIsXG4gICAgcGVyaW9kOiBcIm1vbnRoXCIsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICBcIklkZWFsIGZvciBzbWFsbCBidXNpbmVzc2VzIGxvb2tpbmcgdG8gZW5oYW5jZSB0aGVpciBvbmxpbmUgcHJlc2VuY2UuXCIsXG4gICAgZmVhdHVyZXM6IFtcbiAgICAgIFwiR2VuZXJhdGUgMTgwIGFydGljbGVzIHBlciBtb250aFwiLFxuICAgICAgXCIxLDUwLDAwMCBBSSBjaGF0Ym90IHJlc3BvbnNlcyBwZXIgbW9udGhcIixcbiAgICAgIFwiODAwIEFJIGNvbW1lbnRzIHBlciBtb250aFwiLFxuICAgICAgXCJDdXN0b20gY2hhdGJvdCBwZXJzb25hbGl0eVwiLFxuICAgICAgXCJBZHZhbmNlZCBTRU8gb3B0aW1pemF0aW9uXCIsXG4gICAgICBcIlByaW9yaXR5IHN1cHBvcnRcIixcbiAgICAgIFwiQWNjZXNzIHRvIHByZW1pdW0gdGVtcGxhdGVzXCIsXG4gICAgICBcIkN1c3RvbSBjb250ZW50IHRvbmVcIixcbiAgICAgIFwiS2V5d29yZCByZXNlYXJjaCB0b29sc1wiLFxuICAgICAgXCJDaGF0IHdpZGdldCBjdXN0b21pemF0aW9uXCIsXG4gICAgICBcIktub3dsZWRnZSBCYXNlIFRva2VuIExpbWl0OiA1MDAsMDAwIHRva2Vuc1wiLFxuICAgICAgXCJiYXNpYyBBSSBtb2RlbCBhdmFpbGFibGUgZm9yIDM1IHRpbWVzXCIsXG4gICAgICBcIkFkdmFuY2VkIEFJIG1vZGVsIGF2YWlsYWJsZSBmb3IgMTAwIHRpbWVzXCIsXG4gICAgICBcIlVsdHJhIEFJIG1vZGVsIGF2YWlsYWJsZSBmb3IgMzAgdGltZXNcIixcbiAgICAgIFwiTWF4IEFJIG1vZGVsIGF2YWlsYWJsZSBmb3IgMTUgdGltZXNcIixcbiAgICBdLFxuICAgIHBvcHVsYXI6IHRydWUsXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogXCJQbGF0aW51bSBQbGFuXCIsXG4gICAgYXJ0aWNsZXNQZXJNb250aDogNDMwLFxuICAgIGNoYXRib3RSZXNwb25zZXM6IDUwMDAwMCxcbiAgICBwcmljZTogXCIkOTlcIixcbiAgICBwZXJpb2Q6IFwibW9udGhcIixcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgIFwiQmVzdCBmb3IgYWdlbmNpZXMgYW5kIGxhcmdlIGJ1c2luZXNzZXMgbmVlZGluZyBleHRlbnNpdmUgY29udGVudCBnZW5lcmF0aW9uLlwiLFxuICAgIGZlYXR1cmVzOiBbXG4gICAgICBcIkdlbmVyYXRlIDQzMCBhcnRpY2xlcyBwZXIgbW9udGhcIixcbiAgICAgIFwiNSwwMCwwMDAgQUkgY2hhdGJvdCByZXNwb25zZXMgcGVyIG1vbnRoXCIsXG4gICAgICBcIjMsMDAwIEFJIGNvbW1lbnRzIHBlciBtb250aFwiLFxuICAgICAgXCJBZHZhbmNlZCBjaGF0Ym90IGFuYWx5dGljc1wiLFxuICAgICAgXCJNdWx0aS1sYW5ndWFnZSBzdXBwb3J0XCIsXG4gICAgICBcIkV4cGVydCBTRU8gb3B0aW1pemF0aW9uXCIsXG4gICAgICBcIjI0LzcgUHJlbWl1bSBzdXBwb3J0XCIsXG4gICAgICBcIkFsbCBwcmVtaXVtIHRlbXBsYXRlc1wiLFxuICAgICAgXCJBZHZhbmNlZCBhbmFseXRpY3NcIixcbiAgICAgIFwiQVBJIGFjY2Vzc1wiLFxuICAgICAgXCJDdXN0b20gaW50ZWdyYXRpb25zXCIsXG4gICAgICBcIkRlZGljYXRlZCBhY2NvdW50IG1hbmFnZXJcIixcbiAgICAgIFwiS25vd2xlZGdlIEJhc2UgVG9rZW4gTGltaXQ6IDIsMDAwLDAwMCB0b2tlbnNcIixcbiAgICAgIFwiYmFzaWMgQUkgbW9kZWwgYXZhaWxhYmxlIGZvciA2NSB0aW1lc1wiLFxuICAgICAgXCJBZHZhbmNlZCBBSSBtb2RlbCBhdmFpbGFibGUgZm9yIDI1MCB0aW1lc1wiLFxuICAgICAgXCJVbHRyYSBBSSBtb2RlbCBhdmFpbGFibGUgZm9yIDkwIHRpbWVzXCIsXG4gICAgICBcIk1heCBBSSBtb2RlbCBhdmFpbGFibGUgZm9yIDI1IHRpbWVzXCIsXG4gICAgXSxcbiAgfSxcbl07XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyBCb3gsIFR5cG9ncmFwaHkgfSBmcm9tICdAbXVpL21hdGVyaWFsJztcclxuXHJcbi8qKlxyXG4gKiBMaWdodHdlaWdodCBtYXJrZG93biDihpIgUmVhY3QgKGJvbGQsIGlubGluZSBjb2RlLCBmZW5jZWQgYmxvY2tzLCBzaW1wbGUgbGlzdHMpLlxyXG4gKiBObyBleHRlcm5hbCBkZXBzOyBzYWZlIGZvciB1bnRydXN0ZWQgY29udGVudCAobm8gcmF3IEhUTUwpLlxyXG4gKi9cclxuZnVuY3Rpb24gcGFyc2VJbmxpbmUodGV4dCkge1xyXG4gIGlmICghdGV4dCkgcmV0dXJuIG51bGw7XHJcbiAgY29uc3QgcGFydHMgPSBbXTtcclxuICBsZXQga2V5ID0gMDtcclxuICBsZXQgaSA9IDA7XHJcbiAgY29uc3QgbGVuID0gdGV4dC5sZW5ndGg7XHJcbiAgd2hpbGUgKGkgPCBsZW4pIHtcclxuICAgIGlmICh0ZXh0LnN0YXJ0c1dpdGgoJyoqJywgaSkpIHtcclxuICAgICAgY29uc3QgZW5kID0gdGV4dC5pbmRleE9mKCcqKicsIGkgKyAyKTtcclxuICAgICAgaWYgKGVuZCAhPT0gLTEpIHtcclxuICAgICAgICBwYXJ0cy5wdXNoKDxzdHJvbmcga2V5PXtrZXkrK30+e3RleHQuc2xpY2UoaSArIDIsIGVuZCl9PC9zdHJvbmc+KTtcclxuICAgICAgICBpID0gZW5kICsgMjtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRleHRbaV0gPT09ICdgJykge1xyXG4gICAgICBjb25zdCBlbmQgPSB0ZXh0LmluZGV4T2YoJ2AnLCBpICsgMSk7XHJcbiAgICAgIGlmIChlbmQgIT09IC0xKSB7XHJcbiAgICAgICAgcGFydHMucHVzaChcclxuICAgICAgICAgIDxCb3hcclxuICAgICAgICAgICAgY29tcG9uZW50PVwiY29kZVwiXHJcbiAgICAgICAgICAgIGtleT17a2V5Kyt9XHJcbiAgICAgICAgICAgIHN4PXt7XHJcbiAgICAgICAgICAgICAgcHg6IDAuNzUsXHJcbiAgICAgICAgICAgICAgcHk6IDAuMTI1LFxyXG4gICAgICAgICAgICAgIGJvcmRlclJhZGl1czogMC43NSxcclxuICAgICAgICAgICAgICBiZ2NvbG9yOiAncmdiYSgxNSwyMyw0MiwwLjA2KScsXHJcbiAgICAgICAgICAgICAgZm9udEZhbWlseTogJ3VpLW1vbm9zcGFjZSwgU0ZNb25vLVJlZ3VsYXIsIE1lbmxvLCBtb25vc3BhY2UnLFxyXG4gICAgICAgICAgICAgIGZvbnRTaXplOiAnMC44NGVtJ1xyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICB7dGV4dC5zbGljZShpICsgMSwgZW5kKX1cclxuICAgICAgICAgIDwvQm94PlxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaSA9IGVuZCArIDE7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCBuZXh0ID0gbGVuO1xyXG4gICAgY29uc3QgYm9sZEF0ID0gdGV4dC5pbmRleE9mKCcqKicsIGkpO1xyXG4gICAgY29uc3QgdGlja0F0ID0gdGV4dC5pbmRleE9mKCdgJywgaSk7XHJcbiAgICBpZiAoYm9sZEF0ICE9PSAtMSkgbmV4dCA9IE1hdGgubWluKG5leHQsIGJvbGRBdCk7XHJcbiAgICBpZiAodGlja0F0ICE9PSAtMSkgbmV4dCA9IE1hdGgubWluKG5leHQsIHRpY2tBdCk7XHJcbiAgICBpZiAobmV4dCA+IGkpIHtcclxuICAgICAgcGFydHMucHVzaCg8c3BhbiBrZXk9e2tleSsrfT57dGV4dC5zbGljZShpLCBuZXh0KX08L3NwYW4+KTtcclxuICAgIH1cclxuICAgIGkgPSBuZXh0ID09PSBpID8gaSArIDEgOiBuZXh0O1xyXG4gIH1cclxuICByZXR1cm4gcGFydHMubGVuZ3RoID8gcGFydHMgOiB0ZXh0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gQ2hhdGJvdE1hcmtkb3duQ29udGVudCh7XHJcbiAgdGV4dCxcclxuICBpc1VzZXIsXHJcbiAgaXNTdHJlYW1pbmdcclxufSkge1xyXG4gIGlmICh0ZXh0ID09IG51bGwgfHwgdGV4dCA9PT0gJycpIHJldHVybiBudWxsO1xyXG5cclxuICBpZiAoaXNTdHJlYW1pbmcpIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIDxUeXBvZ3JhcGh5XHJcbiAgICAgICAgY29tcG9uZW50PVwiZGl2XCJcclxuICAgICAgICB2YXJpYW50PVwiYm9keTFcIlxyXG4gICAgICAgIHN4PXt7XHJcbiAgICAgICAgICB3aGl0ZVNwYWNlOiAncHJlLXdyYXAnLFxyXG4gICAgICAgICAgd29yZEJyZWFrOiAnYnJlYWstd29yZCcsXHJcbiAgICAgICAgICBmb250U2l6ZTogJzAuOTM3NXJlbScsXHJcbiAgICAgICAgICBsaW5lSGVpZ2h0OiAxLjY1LFxyXG4gICAgICAgICAgZm9udFdlaWdodDogNDAwLFxyXG4gICAgICAgICAgbGV0dGVyU3BhY2luZzogJzAuMDJweCdcclxuICAgICAgICB9fVxyXG4gICAgICA+XHJcbiAgICAgICAge3RleHR9XHJcbiAgICAgIDwvVHlwb2dyYXBoeT5cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBjb25zdCBibG9ja3MgPSBbXTtcclxuICBsZXQgcmVzdCA9IHRleHQ7XHJcbiAgbGV0IGJpID0gMDtcclxuXHJcbiAgd2hpbGUgKHJlc3QubGVuZ3RoID4gMCkge1xyXG4gICAgY29uc3QgZmVuY2UgPSByZXN0LmluZGV4T2YoJ2BgYCcpO1xyXG4gICAgaWYgKGZlbmNlID09PSAtMSkge1xyXG4gICAgICBibG9ja3MucHVzaCh7XHJcbiAgICAgICAgdHlwZTogJ3Byb3NlJyxcclxuICAgICAgICBjb250ZW50OiByZXN0XHJcbiAgICAgIH0pO1xyXG4gICAgICBicmVhaztcclxuICAgIH1cclxuICAgIGlmIChmZW5jZSA+IDApIHtcclxuICAgICAgYmxvY2tzLnB1c2goe1xyXG4gICAgICAgIHR5cGU6ICdwcm9zZScsXHJcbiAgICAgICAgY29udGVudDogcmVzdC5zbGljZSgwLCBmZW5jZSlcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXN0ID0gcmVzdC5zbGljZShmZW5jZSArIDMpO1xyXG4gICAgY29uc3QgZW5kRmVuY2UgPSByZXN0LmluZGV4T2YoJ2BgYCcpO1xyXG4gICAgaWYgKGVuZEZlbmNlID09PSAtMSkge1xyXG4gICAgICBibG9ja3MucHVzaCh7XHJcbiAgICAgICAgdHlwZTogJ2NvZGUnLFxyXG4gICAgICAgIGNvbnRlbnQ6IHJlc3RcclxuICAgICAgfSk7XHJcbiAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgYmxvY2tzLnB1c2goe1xyXG4gICAgICB0eXBlOiAnY29kZScsXHJcbiAgICAgIGNvbnRlbnQ6IHJlc3Quc2xpY2UoMCwgZW5kRmVuY2UpLnJlcGxhY2UoL15cXHcqXFxuLywgJycpXHJcbiAgICB9KTtcclxuICAgIHJlc3QgPSByZXN0LnNsaWNlKGVuZEZlbmNlICsgMyk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPEJveCBzeD17eyAnJiA+ICo6bm90KDpsYXN0LWNoaWxkKSc6IHsgbWI6IDEuMjUgfSB9fT5cclxuICAgICAge2Jsb2Nrcy5tYXAoKGJsb2NrLCBpZHgpID0+IHtcclxuICAgICAgICBpZiAoYmxvY2sudHlwZSA9PT0gJ2NvZGUnKSB7XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8Qm94XHJcbiAgICAgICAgICAgICAga2V5PXtgYi0ke2JpKyt9YH1cclxuICAgICAgICAgICAgICBjb21wb25lbnQ9XCJwcmVcIlxyXG4gICAgICAgICAgICAgIHN4PXt7XHJcbiAgICAgICAgICAgICAgICBtOiAwLFxyXG4gICAgICAgICAgICAgICAgcDogMS41LFxyXG4gICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAyLFxyXG4gICAgICAgICAgICAgICAgb3ZlcmZsb3c6ICdhdXRvJyxcclxuICAgICAgICAgICAgICAgIG1heFdpZHRoOiAnMTAwJScsXHJcbiAgICAgICAgICAgICAgICBiZ2NvbG9yOiBpc1VzZXIgPyAncmdiYSgyNTUsMjU1LDI1NSwwLjEyKScgOiAncmdiYSgxNSwyMyw0MiwwLjA2KScsXHJcbiAgICAgICAgICAgICAgICBib3JkZXI6ICcxcHggc29saWQnLFxyXG4gICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6IGlzVXNlciA/ICdyZ2JhKDI1NSwyNTUsMjU1LDAuMiknIDogJ3JnYmEoMTUsMjMsNDIsMC4wOCknLFxyXG4gICAgICAgICAgICAgICAgZm9udEZhbWlseTogJ3VpLW1vbm9zcGFjZSwgU0ZNb25vLVJlZ3VsYXIsIE1lbmxvLCBtb25vc3BhY2UnLFxyXG4gICAgICAgICAgICAgICAgZm9udFNpemU6ICcwLjgxMjVyZW0nLFxyXG4gICAgICAgICAgICAgICAgbGluZUhlaWdodDogMS41XHJcbiAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxjb2RlPntibG9jay5jb250ZW50fTwvY29kZT5cclxuICAgICAgICAgICAgPC9Cb3g+XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBsaW5lcyA9IGJsb2NrLmNvbnRlbnQuc3BsaXQoJ1xcbicpO1xyXG4gICAgICAgIGNvbnN0IG5vZGVzID0gW107XHJcbiAgICAgICAgbGV0IGxpID0gMDtcclxuICAgICAgICBsZXQgbGlzdEJ1ZiA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGZsdXNoTGlzdCA9ICgpID0+IHtcclxuICAgICAgICAgIGlmICghbGlzdEJ1Zi5sZW5ndGgpIHJldHVybjtcclxuICAgICAgICAgIG5vZGVzLnB1c2goXHJcbiAgICAgICAgICAgIDxCb3hcclxuICAgICAgICAgICAgICBrZXk9e2B1bC0ke2xpKyt9YH1cclxuICAgICAgICAgICAgICBjb21wb25lbnQ9XCJ1bFwiXHJcbiAgICAgICAgICAgICAgc3g9e3tcclxuICAgICAgICAgICAgICAgIG06IDAsXHJcbiAgICAgICAgICAgICAgICBwbDogMi4yNSxcclxuICAgICAgICAgICAgICAgIGNvbG9yOiAnaW5oZXJpdCcsXHJcbiAgICAgICAgICAgICAgICAnJiBsaSc6IHsgbWI6IDAuNSB9XHJcbiAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIHtsaXN0QnVmLm1hcCgoaXRlbSwgaikgPT4gKFxyXG4gICAgICAgICAgICAgICAgPFR5cG9ncmFwaHlcclxuICAgICAgICAgICAgICAgICAga2V5PXtqfVxyXG4gICAgICAgICAgICAgICAgICBjb21wb25lbnQ9XCJsaVwiXHJcbiAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJib2R5MVwiXHJcbiAgICAgICAgICAgICAgICAgIHN4PXt7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6ICcwLjkzNzVyZW0nLFxyXG4gICAgICAgICAgICAgICAgICAgIGxpbmVIZWlnaHQ6IDEuNjUsXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2xpc3QtaXRlbSdcclxuICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAge3BhcnNlSW5saW5lKGl0ZW0pfVxyXG4gICAgICAgICAgICAgICAgPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICkpfVxyXG4gICAgICAgICAgICA8L0JveD5cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBsaXN0QnVmID0gW107XHJcbiAgICAgICAgfTtcclxuICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcclxuICAgICAgICAgIGNvbnN0IGxpc3RNYXRjaCA9IGxpbmUubWF0Y2goL15cXHMqWy0qXVxccysoLiopJC8pO1xyXG4gICAgICAgICAgaWYgKGxpc3RNYXRjaCkge1xyXG4gICAgICAgICAgICBsaXN0QnVmLnB1c2gobGlzdE1hdGNoWzFdKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGZsdXNoTGlzdCgpO1xyXG4gICAgICAgICAgICBpZiAobGluZS50cmltKCkgPT09ICcnKSBjb250aW51ZTtcclxuICAgICAgICAgICAgbm9kZXMucHVzaChcclxuICAgICAgICAgICAgICA8VHlwb2dyYXBoeVxyXG4gICAgICAgICAgICAgICAga2V5PXtgcC0ke2lkeH0tJHtub2Rlcy5sZW5ndGh9YH1cclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudD1cImRpdlwiXHJcbiAgICAgICAgICAgICAgICB2YXJpYW50PVwiYm9keTFcIlxyXG4gICAgICAgICAgICAgICAgc3g9e3tcclxuICAgICAgICAgICAgICAgICAgd2hpdGVTcGFjZTogJ3ByZS13cmFwJyxcclxuICAgICAgICAgICAgICAgICAgd29yZEJyZWFrOiAnYnJlYWstd29yZCcsXHJcbiAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiAnMC45Mzc1cmVtJyxcclxuICAgICAgICAgICAgICAgICAgbGluZUhlaWdodDogMS42NSxcclxuICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogNDAwXHJcbiAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIHtwYXJzZUlubGluZShsaW5lKX1cclxuICAgICAgICAgICAgICA8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZsdXNoTGlzdCgpO1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICA8UmVhY3QuRnJhZ21lbnQga2V5PXtgZnJhZy0ke2lkeH1gfT5cclxuICAgICAgICAgICAge25vZGVzfVxyXG4gICAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cclxuICAgICAgICApO1xyXG4gICAgICB9KX1cclxuICAgIDwvQm94PlxyXG4gICk7XHJcbn1cclxuXHJcblxyXG5cclxuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgQm94LCBUeXBvZ3JhcGh5LCBQYXBlciwgQXZhdGFyLCBJY29uQnV0dG9uLCBUb29sdGlwLCBUZXh0RmllbGQgfSBmcm9tICdAbXVpL21hdGVyaWFsJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAbXVpL2ljb25zLW1hdGVyaWFsL0NoZWNrJztcclxuaW1wb3J0IEVycm9yT3V0bGluZUljb24gZnJvbSAnQG11aS9pY29ucy1tYXRlcmlhbC9FcnJvck91dGxpbmUnO1xyXG5pbXBvcnQgUmVmcmVzaEljb24gZnJvbSAnQG11aS9pY29ucy1tYXRlcmlhbC9SZWZyZXNoJztcclxuaW1wb3J0IEhvdXJnbGFzc0VtcHR5SWNvbiBmcm9tICdAbXVpL2ljb25zLW1hdGVyaWFsL0hvdXJnbGFzc0VtcHR5JztcclxuaW1wb3J0IHsga2V5ZnJhbWVzIH0gZnJvbSAnQG11aS9tYXRlcmlhbC9zdHlsZXMnO1xyXG5pbXBvcnQgeyBDaGF0Ym90TWFya2Rvd25Db250ZW50IH0gZnJvbSAnLi9jaGF0Ym90TWFya2Rvd24uanN4JztcclxuXHJcbmNvbnN0IGVudGVyVXAgPSBrZXlmcmFtZXNgXHJcbiAgZnJvbSB7IG9wYWNpdHk6IDA7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMHB4KTsgfVxyXG4gIHRvIHsgb3BhY2l0eTogMTsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOyB9XHJcbmA7XHJcblxyXG5jb25zdCBzdHJlYW1HbG93ID0ga2V5ZnJhbWVzYFxyXG4gIDAlIHsgb3BhY2l0eTogMC4zNTsgfVxyXG4gIDUwJSB7IG9wYWNpdHk6IDE7IH1cclxuICAxMDAlIHsgb3BhY2l0eTogMC4zNTsgfVxyXG5gO1xyXG5cclxuZnVuY3Rpb24gSW5saW5lRm9ybUZpZWxkKHByb3BzKSB7XHJcbiAgcmV0dXJuIChcclxuICAgIDxUZXh0RmllbGRcclxuICAgICAgey4uLnByb3BzfVxyXG4gICAgICBzeD17e1xyXG4gICAgICAgICcmIC5NdWlPdXRsaW5lZElucHV0LXJvb3QnOiB7XHJcbiAgICAgICAgICBib3JkZXJSYWRpdXM6ICcxMnB4JyxcclxuICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJyNmZmYnLFxyXG4gICAgICAgICAgYm9yZGVyOiAnMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4wOCknLFxyXG4gICAgICAgICAgJyYgZmllbGRzZXQnOiB7IGJvcmRlckNvbG9yOiAndHJhbnNwYXJlbnQnIH0sXHJcbiAgICAgICAgICAnJi5NdWktZm9jdXNlZCc6IHtcclxuICAgICAgICAgICAgYm94U2hhZG93OiAnMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC4wNSknXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICAnJiAuTXVpSW5wdXRCYXNlLWlucHV0Jzoge1xyXG4gICAgICAgICAgcGFkZGluZzogJzEycHggMTZweCcsXHJcbiAgICAgICAgICBmb250U2l6ZTogJzAuOTM3NXJlbSdcclxuICAgICAgICB9XHJcbiAgICAgIH19XHJcbiAgICAvPlxyXG4gICk7XHJcbn1cclxuXHJcbmNvbnN0IENoYXRib3RNZXNzYWdlQnViYmxlID0gKHtcclxuICBtZXNzYWdlLFxyXG4gIHByaW1hcnlDb2xvciA9ICcjNjM2NmYxJyxcclxuICBzZWNvbmRhcnlDb2xvciA9ICcjZmZmZmZmJyxcclxuICBvblN0cmVhbUNvbXBsZXRlLFxyXG4gIG9uUmV0cnlcclxufSkgPT4ge1xyXG4gIGNvbnN0IFt2aXNpYmxlTGVuLCBzZXRWaXNpYmxlTGVuXSA9IHVzZVN0YXRlKCgpID0+ICghbWVzc2FnZS5pc1N0cmVhbWluZyA/IChtZXNzYWdlLnRleHQgfHwgJycpLmxlbmd0aCA6IDApKTtcclxuICBjb25zdCB0aW1lclJlZiA9IHVzZVJlZihudWxsKTtcclxuICBjb25zdCBzdHJlYW1Ob3RpZmllZFJlZiA9IHVzZVJlZihmYWxzZSk7XHJcblxyXG4gIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICBpZiAodGltZXJSZWYuY3VycmVudCkgd2luZG93LmNsZWFyVGltZW91dCh0aW1lclJlZi5jdXJyZW50KTtcclxuICAgIHN0cmVhbU5vdGlmaWVkUmVmLmN1cnJlbnQgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoIW1lc3NhZ2UuaXNTdHJlYW1pbmcpIHtcclxuICAgICAgc2V0VmlzaWJsZUxlbigobWVzc2FnZS50ZXh0IHx8ICcnKS5sZW5ndGgpO1xyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGZ1bGwgPSBtZXNzYWdlLnRleHQgfHwgJyc7XHJcbiAgICBpZiAoIWZ1bGwubGVuZ3RoKSB7XHJcbiAgICAgIGlmICghc3RyZWFtTm90aWZpZWRSZWYuY3VycmVudCkge1xyXG4gICAgICAgIHN0cmVhbU5vdGlmaWVkUmVmLmN1cnJlbnQgPSB0cnVlO1xyXG4gICAgICAgIG9uU3RyZWFtQ29tcGxldGU/LihtZXNzYWdlLmlkKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBsZW4gPSAwO1xyXG4gICAgc2V0VmlzaWJsZUxlbigwKTtcclxuXHJcbiAgICBjb25zdCB0aWNrID0gKCkgPT4ge1xyXG4gICAgICBsZW4gPSBNYXRoLm1pbihmdWxsLmxlbmd0aCwgbGVuICsgMSk7XHJcbiAgICAgIHNldFZpc2libGVMZW4obGVuKTtcclxuICAgICAgaWYgKGxlbiA+PSBmdWxsLmxlbmd0aCkge1xyXG4gICAgICAgIGlmICghc3RyZWFtTm90aWZpZWRSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgc3RyZWFtTm90aWZpZWRSZWYuY3VycmVudCA9IHRydWU7XHJcbiAgICAgICAgICBvblN0cmVhbUNvbXBsZXRlPy4obWVzc2FnZS5pZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBjaCA9IGZ1bGxbbGVuIC0gMV07XHJcbiAgICAgIGNvbnN0IGRlbGF5ID0gY2ggPT09ICdcXG4nID8gMjYgOiAvW1xccywuOzpdLy50ZXN0KGNoKSA/IDEyIDogMTYgKyBNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkgKiAxMik7XHJcbiAgICAgIHRpbWVyUmVmLmN1cnJlbnQgPSB3aW5kb3cuc2V0VGltZW91dCh0aWNrLCBkZWxheSk7XHJcbiAgICB9O1xyXG5cclxuICAgIHRpbWVyUmVmLmN1cnJlbnQgPSB3aW5kb3cuc2V0VGltZW91dCh0aWNrLCA0NSk7XHJcbiAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICBpZiAodGltZXJSZWYuY3VycmVudCkgd2luZG93LmNsZWFyVGltZW91dCh0aW1lclJlZi5jdXJyZW50KTtcclxuICAgIH07XHJcbiAgfSwgW21lc3NhZ2UuaWQsIG1lc3NhZ2UuaXNTdHJlYW1pbmcsIG1lc3NhZ2UudGV4dCwgb25TdHJlYW1Db21wbGV0ZV0pO1xyXG5cclxuICBpZiAobWVzc2FnZS5mb3JtRmllbGQpIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIDxCb3hcclxuICAgICAgICBzeD17e1xyXG4gICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxyXG4gICAgICAgICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXHJcbiAgICAgICAgICBhbGlnbkl0ZW1zOiAnZmxleC1zdGFydCcsXHJcbiAgICAgICAgICBtYjogMixcclxuICAgICAgICAgIG1sOiA1LFxyXG4gICAgICAgICAgbWF4V2lkdGg6ICc4NSUnXHJcbiAgICAgICAgfX1cclxuICAgICAgPlxyXG4gICAgICAgIDxJbmxpbmVGb3JtRmllbGRcclxuICAgICAgICAgIGZ1bGxXaWR0aFxyXG4gICAgICAgICAgcGxhY2Vob2xkZXI9e21lc3NhZ2UucGxhY2Vob2xkZXJ9XHJcbiAgICAgICAgICB2YWx1ZT17bWVzc2FnZS52YWx1ZX1cclxuICAgICAgICAgIG9uQ2hhbmdlPXttZXNzYWdlLm9uQ2hhbmdlfVxyXG4gICAgICAgICAgdHlwZT17bWVzc2FnZS50eXBlIHx8ICd0ZXh0J31cclxuICAgICAgICAgIGVycm9yPXttZXNzYWdlLmVycm9yfVxyXG4gICAgICAgICAgaGVscGVyVGV4dD17bWVzc2FnZS5oZWxwZXJUZXh0fVxyXG4gICAgICAgICAgYXV0b0ZvY3VzXHJcbiAgICAgICAgICBvbktleVByZXNzPXtlID0+IHtcclxuICAgICAgICAgICAgaWYgKGUua2V5ID09PSAnRW50ZXInKSB7XHJcbiAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgIG1lc3NhZ2Uub25TdWJtaXQoZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH19XHJcbiAgICAgICAgLz5cclxuICAgICAgPC9Cb3g+XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgaXNVc2VyID0gbWVzc2FnZS5pc1VzZXI7XHJcbiAgY29uc3QgZnVsbExlbiA9IChtZXNzYWdlLnRleHQgfHwgJycpLmxlbmd0aDtcclxuICBjb25zdCBkaXNwbGF5VGV4dCA9IChtZXNzYWdlLnRleHQgfHwgJycpLnNsaWNlKDAsIHZpc2libGVMZW4pO1xyXG4gIGNvbnN0IHN0cmVhbURvbmUgPSAhbWVzc2FnZS5pc1N0cmVhbWluZyB8fCB2aXNpYmxlTGVuID49IGZ1bGxMZW47XHJcbiAgY29uc3Qgc2hvd01kID0gIWlzVXNlciAmJiBzdHJlYW1Eb25lO1xyXG5cclxuICBjb25zdCB1c2VyQnViYmxlQmcgPSBwcmltYXJ5Q29sb3IgfHwgJyM2MzY2ZjEnO1xyXG4gIGNvbnN0IHVzZXJUZXh0ID0gc2Vjb25kYXJ5Q29sb3IgfHwgJyNmZmZmZmYnO1xyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPEJveFxyXG4gICAgICBzeD17e1xyXG4gICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcclxuICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcclxuICAgICAgICBhbGlnbkl0ZW1zOiBpc1VzZXIgPyAnZmxleC1lbmQnIDogJ2ZsZXgtc3RhcnQnLFxyXG4gICAgICAgIG1iOiAyLFxyXG4gICAgICAgIGFuaW1hdGlvbjogYCR7ZW50ZXJVcH0gMC4zOHMgY3ViaWMtYmV6aWVyKDAuMjIsIDEsIDAuMzYsIDEpIGJvdGhgLFxyXG4gICAgICAgICdAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSknOiB7XHJcbiAgICAgICAgICBhbmltYXRpb246ICdub25lJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgJyY6aG92ZXIgLndwYWktbXNnLW1ldGEnOiB7IG9wYWNpdHk6IDEgfVxyXG4gICAgICB9fVxyXG4gICAgPlxyXG4gICAgICA8Qm94XHJcbiAgICAgICAgc3g9e3tcclxuICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcclxuICAgICAgICAgIG1heFdpZHRoOiAnODglJyxcclxuICAgICAgICAgIGdhcDogMS4yNSxcclxuICAgICAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICAgICAgICBqdXN0aWZ5Q29udGVudDogaXNVc2VyID8gJ2ZsZXgtZW5kJyA6ICdmbGV4LXN0YXJ0JyxcclxuICAgICAgICAgIGFsaWduSXRlbXM6ICdmbGV4LWVuZCdcclxuICAgICAgICB9fVxyXG4gICAgICA+XHJcbiAgICAgICAgeyFpc1VzZXIgJiYgKFxyXG4gICAgICAgICAgPEF2YXRhclxyXG4gICAgICAgICAgICBzeD17e1xyXG4gICAgICAgICAgICAgIGJnY29sb3I6IHVzZXJCdWJibGVCZyxcclxuICAgICAgICAgICAgICB3aWR0aDogMzIsXHJcbiAgICAgICAgICAgICAgaGVpZ2h0OiAzMixcclxuICAgICAgICAgICAgICBmb250U2l6ZTogJzAuN3JlbScsXHJcbiAgICAgICAgICAgICAgZm9udFdlaWdodDogODAwLFxyXG4gICAgICAgICAgICAgIGNvbG9yOiAnI2ZmZicsXHJcbiAgICAgICAgICAgICAgYm94U2hhZG93OiAnMCAycHggOHB4IHJnYmEoMTUsMjMsNDIsMC4xKScsXHJcbiAgICAgICAgICAgICAgYm9yZGVyOiAnMnB4IHNvbGlkICNmZmYnXHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIEFJXHJcbiAgICAgICAgICA8L0F2YXRhcj5cclxuICAgICAgICApfVxyXG5cclxuICAgICAgICA8Qm94IHN4PXt7IG1heFdpZHRoOiAnY2FsYygxMDAlIC0gNDhweCknLCBwb3NpdGlvbjogJ3JlbGF0aXZlJyB9fT5cclxuICAgICAgICAgIDxQYXBlclxyXG4gICAgICAgICAgICBlbGV2YXRpb249ezB9XHJcbiAgICAgICAgICAgIHN4PXt7XHJcbiAgICAgICAgICAgICAgcDogJzEycHggMTZweCcsXHJcbiAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiBpc1VzZXIgPyAnMThweCAxOHB4IDZweCAxOHB4JyA6ICcxOHB4IDE4cHggMThweCA2cHgnLFxyXG4gICAgICAgICAgICAgIGJnY29sb3I6IGlzVXNlciA/IHVzZXJCdWJibGVCZyA6ICcjZjFmNWY5JyxcclxuICAgICAgICAgICAgICBjb2xvcjogaXNVc2VyID8gdXNlclRleHQgOiAnIzBmMTcyYScsXHJcbiAgICAgICAgICAgICAgYm94U2hhZG93OiBpc1VzZXJcclxuICAgICAgICAgICAgICAgID8gJzAgNHB4IDE0cHggcmdiYSgxNSwgMjMsIDQyLCAwLjEyKSdcclxuICAgICAgICAgICAgICAgIDogJzAgNHB4IDE0cHggcmdiYSgxNSwgMjMsIDQyLCAwLjA2KScsXHJcbiAgICAgICAgICAgICAgYm9yZGVyOiAnMXB4IHNvbGlkJyxcclxuICAgICAgICAgICAgICBib3JkZXJDb2xvcjogaXNVc2VyID8gJ3RyYW5zcGFyZW50JyA6ICdyZ2JhKDE1LDIzLDQyLDAuMDYpJyxcclxuICAgICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcclxuICAgICAgICAgICAgICB0cmFuc2l0aW9uOiAnYm94LXNoYWRvdyAwLjJzIGVhc2UnLFxyXG4gICAgICAgICAgICAgIGJhY2tncm91bmQ6IGlzVXNlciA/IHVzZXJCdWJibGVCZyA6ICdsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCAjZjhmYWZjIDAlLCAjZjFmNWY5IDEwMCUpJyxcclxuICAgICAgICAgICAgICAuLi4obWVzc2FnZS5pc1N0cmVhbWluZyAmJiAhaXNVc2VyXHJcbiAgICAgICAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICAgICAgICBib3hTaGFkb3c6ICcwIDRweCAyMHB4IHJnYmEoOTksIDEwMiwgMjQxLCAwLjEyKScsXHJcbiAgICAgICAgICAgICAgICAgICAgJyY6OmJlZm9yZSc6IHtcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICdcIlwiJyxcclxuICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgaW5zZXQ6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICdpbmhlcml0JyxcclxuICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcclxuICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNSxcclxuICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGBsaW5lYXItZ3JhZGllbnQoMTEwZGVnLCB0cmFuc3BhcmVudCAwJSwgJHt1c2VyQnViYmxlQmd9MjIgNDUlLCB0cmFuc3BhcmVudCA5MCUpYCxcclxuICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogYCR7c3RyZWFtR2xvd30gMnMgZWFzZS1pbi1vdXQgaW5maW5pdGVgXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA6IHt9KVxyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICB7aXNVc2VyID8gKFxyXG4gICAgICAgICAgICAgIDxUeXBvZ3JhcGh5XHJcbiAgICAgICAgICAgICAgICB2YXJpYW50PVwiYm9keTFcIlxyXG4gICAgICAgICAgICAgICAgY29tcG9uZW50PVwiZGl2XCJcclxuICAgICAgICAgICAgICAgIHN4PXt7XHJcbiAgICAgICAgICAgICAgICAgIHdoaXRlU3BhY2U6ICdwcmUtd3JhcCcsXHJcbiAgICAgICAgICAgICAgICAgIHdvcmRCcmVhazogJ2JyZWFrLXdvcmQnLFxyXG4gICAgICAgICAgICAgICAgICBmb250U2l6ZTogJzAuOTM3NXJlbScsXHJcbiAgICAgICAgICAgICAgICAgIGxpbmVIZWlnaHQ6IDEuNjUsXHJcbiAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IDQ1MCxcclxuICAgICAgICAgICAgICAgICAgY29sb3I6IHVzZXJUZXh0XHJcbiAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIHttZXNzYWdlLnRleHR9XHJcbiAgICAgICAgICAgICAgPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICApIDogc2hvd01kID8gKFxyXG4gICAgICAgICAgICAgIDxDaGF0Ym90TWFya2Rvd25Db250ZW50IHRleHQ9e21lc3NhZ2UudGV4dCB8fCAnJ30gaXNVc2VyPXtmYWxzZX0gaXNTdHJlYW1pbmc9e2ZhbHNlfSAvPlxyXG4gICAgICAgICAgICApIDogKFxyXG4gICAgICAgICAgICAgIDxDaGF0Ym90TWFya2Rvd25Db250ZW50IHRleHQ9e2Rpc3BsYXlUZXh0fSBpc1VzZXI9e2ZhbHNlfSBpc1N0cmVhbWluZyAvPlxyXG4gICAgICAgICAgICApfVxyXG5cclxuICAgICAgICAgICAge21lc3NhZ2Uuc291cmNlcyAmJiBtZXNzYWdlLnNvdXJjZXMubGVuZ3RoID4gMCAmJiAoXHJcbiAgICAgICAgICAgICAgPEJveCBzeD17eyBtdDogMiwgcHQ6IDEuNSwgYm9yZGVyVG9wOiAnMXB4IHNvbGlkIHJnYmEoMCwwLDAsMC4wNiknIH19PlxyXG4gICAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgdmFyaWFudD1cImNhcHRpb25cIiBzeD17eyBkaXNwbGF5OiAnYmxvY2snLCBtYjogMSwgZm9udFdlaWdodDogNjAwLCBjb2xvcjogJ2luaGVyaXQnLCBvcGFjaXR5OiAwLjc1IH19PlxyXG4gICAgICAgICAgICAgICAgICBTb3VyY2VzXHJcbiAgICAgICAgICAgICAgICA8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICB7bWVzc2FnZS5zb3VyY2VzLm1hcCgoc291cmNlLCBpbmRleCkgPT4gKFxyXG4gICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeSBrZXk9e2luZGV4fSB2YXJpYW50PVwiY2FwdGlvblwiIHN4PXt7IGRpc3BsYXk6ICdibG9jaycsIG1sOiAwLjUsIG1iOiAwLjUsIG9wYWNpdHk6IDAuOCB9fT5cclxuICAgICAgICAgICAgICAgICAgICDigKIge3NvdXJjZS5zb3VyY2V9IChSZWxldmFuY2U6IHtzb3VyY2UucmVsZXZhbmNlfSlcclxuICAgICAgICAgICAgICAgICAgPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgKSl9XHJcbiAgICAgICAgICAgICAgPC9Cb3g+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgICA8L1BhcGVyPlxyXG5cclxuICAgICAgICAgIDxCb3hcclxuICAgICAgICAgICAgY2xhc3NOYW1lPVwid3BhaS1tc2ctbWV0YVwiXHJcbiAgICAgICAgICAgIHN4PXt7XHJcbiAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxyXG4gICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxyXG4gICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiBpc1VzZXIgPyAnZmxleC1lbmQnIDogJ2ZsZXgtc3RhcnQnLFxyXG4gICAgICAgICAgICAgIGdhcDogMC43NSxcclxuICAgICAgICAgICAgICBtdDogMC41LFxyXG4gICAgICAgICAgICAgIG9wYWNpdHk6IDAuNzIsXHJcbiAgICAgICAgICAgICAgdHJhbnNpdGlvbjogJ29wYWNpdHkgMC4ycycsXHJcbiAgICAgICAgICAgICAgZmxleFdyYXA6ICd3cmFwJ1xyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8VHlwb2dyYXBoeSB2YXJpYW50PVwiY2FwdGlvblwiIHN4PXt7IGNvbG9yOiAnIzY0NzQ4YicsIGZvbnRTaXplOiAnMC43cmVtJyB9fT5cclxuICAgICAgICAgICAgICB7bWVzc2FnZS50aW1lc3RhbXBcclxuICAgICAgICAgICAgICAgID8gbmV3IERhdGUobWVzc2FnZS50aW1lc3RhbXApLnRvTG9jYWxlVGltZVN0cmluZyhbXSwgeyBob3VyOiAnMi1kaWdpdCcsIG1pbnV0ZTogJzItZGlnaXQnIH0pXHJcbiAgICAgICAgICAgICAgICA6ICcnfVxyXG4gICAgICAgICAgICA8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgIHtpc1VzZXIgJiYgbWVzc2FnZS5zdGF0dXMgPT09ICdzZW5kaW5nJyAmJiAoXHJcbiAgICAgICAgICAgICAgPFRvb2x0aXAgdGl0bGU9XCJTZW5kaW5nXCI+XHJcbiAgICAgICAgICAgICAgICA8SG91cmdsYXNzRW1wdHlJY29uIHN4PXt7IGZvbnRTaXplOiAxNCwgY29sb3I6ICcjOTRhM2I4JyB9fSBhcmlhLWhpZGRlbiAvPlxyXG4gICAgICAgICAgICAgIDwvVG9vbHRpcD5cclxuICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAge2lzVXNlciAmJiBtZXNzYWdlLnN0YXR1cyA9PT0gJ2RlbGl2ZXJlZCcgJiYgKFxyXG4gICAgICAgICAgICAgIDxUb29sdGlwIHRpdGxlPVwiRGVsaXZlcmVkXCI+XHJcbiAgICAgICAgICAgICAgICA8Q2hlY2tJY29uIHN4PXt7IGZvbnRTaXplOiAxNCwgY29sb3I6ICcjMjJjNTVlJyB9fSBhcmlhLWhpZGRlbiAvPlxyXG4gICAgICAgICAgICAgIDwvVG9vbHRpcD5cclxuICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAge2lzVXNlciAmJiBtZXNzYWdlLnN0YXR1cyA9PT0gJ2Vycm9yJyAmJiAoXHJcbiAgICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgIDxUb29sdGlwIHRpdGxlPVwiRmFpbGVkIHRvIHNlbmRcIj5cclxuICAgICAgICAgICAgICAgICAgPEVycm9yT3V0bGluZUljb24gc3g9e3sgZm9udFNpemU6IDE2LCBjb2xvcjogJyNlZjQ0NDQnIH19IGFyaWEtaGlkZGVuIC8+XHJcbiAgICAgICAgICAgICAgICA8L1Rvb2x0aXA+XHJcbiAgICAgICAgICAgICAgICA8VG9vbHRpcCB0aXRsZT1cIlJldHJ5XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxJY29uQnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcclxuICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiUmV0cnkgc2VuZGluZyBtZXNzYWdlXCJcclxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBvblJldHJ5Py4obWVzc2FnZSl9XHJcbiAgICAgICAgICAgICAgICAgICAgc3g9e3sgcDogMC4yNSwgY29sb3I6ICcjZWY0NDQ0JyB9fVxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPFJlZnJlc2hJY29uIHN4PXt7IGZvbnRTaXplOiAxOCB9fSAvPlxyXG4gICAgICAgICAgICAgICAgICA8L0ljb25CdXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L1Rvb2x0aXA+XHJcbiAgICAgICAgICAgICAgPC8+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgICA8L0JveD5cclxuICAgICAgICA8L0JveD5cclxuXHJcbiAgICAgICAge2lzVXNlciAmJiAoXHJcbiAgICAgICAgICA8QXZhdGFyXHJcbiAgICAgICAgICAgIHN4PXt7XHJcbiAgICAgICAgICAgICAgYmdjb2xvcjogJ3NlY29uZGFyeS5tYWluJyxcclxuICAgICAgICAgICAgICB3aWR0aDogMzIsXHJcbiAgICAgICAgICAgICAgaGVpZ2h0OiAzMixcclxuICAgICAgICAgICAgICBmb250U2l6ZTogJzAuNzVyZW0nLFxyXG4gICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IDcwMCxcclxuICAgICAgICAgICAgICBib3hTaGFkb3c6ICcwIDJweCA4cHggcmdiYSgxNSwyMyw0MiwwLjEpJyxcclxuICAgICAgICAgICAgICBib3JkZXI6ICcycHggc29saWQgI2ZmZidcclxuICAgICAgICAgICAgfX1cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgVVxyXG4gICAgICAgICAgPC9BdmF0YXI+XHJcbiAgICAgICAgKX1cclxuICAgICAgPC9Cb3g+XHJcbiAgICA8L0JveD5cclxuICApO1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgUmVhY3QubWVtbyhDaGF0Ym90TWVzc2FnZUJ1YmJsZSk7XHJcblxyXG5cclxuXHJcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7IEJveCwgQXZhdGFyLCBQYXBlciB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwnO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAbXVpL21hdGVyaWFsL3N0eWxlcyc7XHJcblxyXG5jb25zdCBib3VuY2UgPSBrZXlmcmFtZXNgXHJcbiAgMCUsIDgwJSwgMTAwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsgb3BhY2l0eTogMC4zNTsgfVxyXG4gIDQwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNnB4KTsgb3BhY2l0eTogMTsgfVxyXG5gO1xyXG5cclxuY29uc3Qgc2hpbW1lciA9IGtleWZyYW1lc2BcclxuICAwJSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMjAlIDA7IH1cclxuICAxMDAlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMTIwJSAwOyB9XHJcbmA7XHJcblxyXG4vKipcclxuICogVHlwaW5nIGluZGljYXRvciBpbnNpZGUgYW4gQUktc3R5bGUgYnViYmxlIChmYWRlIHZpYSBwYXJlbnQgdmlzaWJpbGl0eSkuXHJcbiAqL1xyXG5mdW5jdGlvbiBDaGF0Ym90VHlwaW5nSW5kaWNhdG9yKHtcclxuICBwcmltYXJ5Q29sb3IgPSAnIzYzNjZmMScsXHJcbiAgYXJpYUxhYmVsID0gJ0Fzc2lzdGFudCBpcyB0eXBpbmcnLFxyXG4gIGF2YXRhckxhYmVsID0gJ0FJJ1xyXG59KSB7XHJcbiAgcmV0dXJuIChcclxuICAgIDxCb3hcclxuICAgICAgc3g9e3tcclxuICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgYWxpZ25JdGVtczogJ2ZsZXgtZW5kJyxcclxuICAgICAgICBnYXA6IDEuMjUsXHJcbiAgICAgICAgbWI6IDIsXHJcbiAgICAgICAgbWF4V2lkdGg6ICc4NSUnLFxyXG4gICAgICAgIGFuaW1hdGlvbjogJ3dwYWlGYWRlVXAgMC4zNXMgZWFzZS1vdXQgYm90aCcsXHJcbiAgICAgICAgJ0BrZXlmcmFtZXMgd3BhaUZhZGVVcCc6IHtcclxuICAgICAgICAgIGZyb206IHsgb3BhY2l0eTogMCwgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSg4cHgpJyB9LFxyXG4gICAgICAgICAgdG86IHsgb3BhY2l0eTogMSwgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgwKScgfVxyXG4gICAgICAgIH1cclxuICAgICAgfX1cclxuICAgICAgcm9sZT1cInN0YXR1c1wiXHJcbiAgICAgIGFyaWEtbGl2ZT1cInBvbGl0ZVwiXHJcbiAgICAgIGFyaWEtbGFiZWw9e2FyaWFMYWJlbH1cclxuICAgID5cclxuICAgICAgPEF2YXRhclxyXG4gICAgICAgIHN4PXt7XHJcbiAgICAgICAgICB3aWR0aDogMzIsXHJcbiAgICAgICAgICBoZWlnaHQ6IDMyLFxyXG4gICAgICAgICAgZm9udFNpemU6ICcwLjc1cmVtJyxcclxuICAgICAgICAgIGZvbnRXZWlnaHQ6IDcwMCxcclxuICAgICAgICAgIGJnY29sb3I6IHByaW1hcnlDb2xvcixcclxuICAgICAgICAgIGNvbG9yOiAnI2ZmZicsXHJcbiAgICAgICAgICBib3hTaGFkb3c6ICcwIDJweCA4cHggcmdiYSgxNSwyMyw0MiwwLjEyKScsXHJcbiAgICAgICAgICBib3JkZXI6ICcycHggc29saWQgI2ZmZidcclxuICAgICAgICB9fVxyXG4gICAgICA+XHJcbiAgICAgICAge2F2YXRhckxhYmVsfVxyXG4gICAgICA8L0F2YXRhcj5cclxuICAgICAgPFBhcGVyXHJcbiAgICAgICAgZWxldmF0aW9uPXswfVxyXG4gICAgICAgIHN4PXt7XHJcbiAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcclxuICAgICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcclxuICAgICAgICAgIHB4OiAyLFxyXG4gICAgICAgICAgcHk6IDEuNSxcclxuICAgICAgICAgIGJvcmRlclJhZGl1czogJzE4cHggMThweCAxOHB4IDZweCcsXHJcbiAgICAgICAgICBiZ2NvbG9yOiAnI2YxZjVmOScsXHJcbiAgICAgICAgICBib3JkZXI6ICcxcHggc29saWQgcmdiYSgxNSwyMyw0MiwwLjA2KScsXHJcbiAgICAgICAgICBib3hTaGFkb3c6ICcwIDRweCAxNHB4IHJnYmEoMTUsMjMsNDIsMC4wNiknLFxyXG4gICAgICAgICAgJyY6OmJlZm9yZSc6IHtcclxuICAgICAgICAgICAgY29udGVudDogJ1wiXCInLFxyXG4gICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcclxuICAgICAgICAgICAgaW5zZXQ6IDAsXHJcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IGBsaW5lYXItZ3JhZGllbnQoOTBkZWcsIHRyYW5zcGFyZW50IDAlLCByZ2JhKDI1NSwyNTUsMjU1LDAuNTUpIDUwJSwgdHJhbnNwYXJlbnQgMTAwJSlgLFxyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kU2l6ZTogJzIwMCUgMTAwJScsXHJcbiAgICAgICAgICAgIGFuaW1hdGlvbjogYCR7c2hpbW1lcn0gMS40cyBlYXNlLWluLW91dCBpbmZpbml0ZWAsXHJcbiAgICAgICAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcclxuICAgICAgICAgICAgb3BhY2l0eTogMC45XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfX1cclxuICAgICAgPlxyXG4gICAgICAgIDxCb3ggc3g9e3sgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiAwLjc1LCBwb3NpdGlvbjogJ3JlbGF0aXZlJywgekluZGV4OiAxIH19PlxyXG4gICAgICAgICAge1swLCAxLCAyXS5tYXAoaSA9PiAoXHJcbiAgICAgICAgICAgIDxCb3hcclxuICAgICAgICAgICAgICBrZXk9e2l9XHJcbiAgICAgICAgICAgICAgc3g9e3tcclxuICAgICAgICAgICAgICAgIHdpZHRoOiA3LFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiA3LFxyXG4gICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNTAlJyxcclxuICAgICAgICAgICAgICAgIGJnY29sb3I6IHByaW1hcnlDb2xvcixcclxuICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuODUsXHJcbiAgICAgICAgICAgICAgICBhbmltYXRpb246IGAke2JvdW5jZX0gMXMgZWFzZS1pbi1vdXQgaW5maW5pdGVgLFxyXG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uRGVsYXk6IGAke2kgKiAwLjE2fXNgXHJcbiAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICkpfVxyXG4gICAgICAgIDwvQm94PlxyXG4gICAgICA8L1BhcGVyPlxyXG4gICAgPC9Cb3g+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgUmVhY3QubWVtbyhDaGF0Ym90VHlwaW5nSW5kaWNhdG9yKTtcclxuXHJcblxyXG5cclxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgQm94LCBCdXR0b24sIEZhZGUgfSBmcm9tICdAbXVpL21hdGVyaWFsJztcclxuaW1wb3J0IEtleWJvYXJkQXJyb3dEb3duSWNvbiBmcm9tICdAbXVpL2ljb25zLW1hdGVyaWFsL0tleWJvYXJkQXJyb3dEb3duJztcclxuaW1wb3J0IHsgc3R5bGVkIH0gZnJvbSAnQG11aS9tYXRlcmlhbC9zdHlsZXMnO1xyXG5pbXBvcnQgQ2hhdGJvdE1lc3NhZ2VCdWJibGUgZnJvbSAnLi9DaGF0Ym90TWVzc2FnZUJ1YmJsZS5qc3gnO1xyXG5pbXBvcnQgQ2hhdGJvdFR5cGluZ0luZGljYXRvciBmcm9tICcuL0NoYXRib3RUeXBpbmdJbmRpY2F0b3IuanN4JztcclxuXHJcbmNvbnN0IE1lc3NhZ2VDb250YWluZXIgPSBzdHlsZWQoQm94KSgoeyB0aGVtZSB9KSA9PiAoe1xyXG4gIGZsZXg6IDEsXHJcbiAgcGFkZGluZzogdGhlbWUuc3BhY2luZygyLCAyLjI1KSxcclxuICBvdmVyZmxvd1k6ICdhdXRvJyxcclxuICBvdmVyZmxvd1g6ICdoaWRkZW4nLFxyXG4gIGJhY2tncm91bmQ6ICdsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCAjZmZmZmZmIDAlLCAjZmFmYmZjIDEwMCUpJyxcclxuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcclxuICBzY3JvbGxCZWhhdmlvcjogJ3Ntb290aCcsXHJcbiAgJyY6Oi13ZWJraXQtc2Nyb2xsYmFyJzogeyB3aWR0aDogNiB9LFxyXG4gICcmOjotd2Via2l0LXNjcm9sbGJhci10aHVtYic6IHtcclxuICAgIGJhY2tncm91bmRDb2xvcjogJyNjYmQ1ZTEnLFxyXG4gICAgYm9yZGVyUmFkaXVzOiAzXHJcbiAgfSxcclxuICAnJjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2snOiB7XHJcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZjFmNWY5J1xyXG4gIH1cclxufSkpO1xyXG5cclxuLyoqXHJcbiAqIFNjcm9sbGFibGUgbWVzc2FnZSByZWdpb24gKyBuZXctbWVzc2FnZXMgYWZmb3JkYW5jZSAoc21hcnQgc2Nyb2xsIGxpdmVzIGluIHBhcmVudCkuXHJcbiAqL1xyXG5mdW5jdGlvbiBDaGF0Ym90TWVzc2FnZUxpc3Qoe1xyXG4gIGNvbnRhaW5lclJlZixcclxuICBib3R0b21SZWYsXHJcbiAgb25TY3JvbGwsXHJcbiAgbWVzc2FnZXMsXHJcbiAgcHJpbWFyeUNvbG9yLFxyXG4gIHNlY29uZGFyeUNvbG9yLFxyXG4gIG9uU3RyZWFtQ29tcGxldGUsXHJcbiAgb25SZXRyeSxcclxuICBjaGlsZHJlbkFib3ZlRW5kLFxyXG4gIGlzTG9hZGluZyxcclxuICBsaXZlQWdlbnRUeXBpbmcsXHJcbiAgc2hvd05ld01lc3NhZ2VzLFxyXG4gIG9uSnVtcFRvTGF0ZXN0XHJcbn0pIHtcclxuICByZXR1cm4gKFxyXG4gICAgPE1lc3NhZ2VDb250YWluZXJcclxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XHJcbiAgICAgIG9uU2Nyb2xsPXtvblNjcm9sbH1cclxuICAgICAgY2xhc3NOYW1lPVwid3BhaV9tZXNzYWdlQ29udGFpbmVyXCJcclxuICAgICAgcm9sZT1cImxvZ1wiXHJcbiAgICAgIGFyaWEtbGl2ZT1cInBvbGl0ZVwiXHJcbiAgICAgIGFyaWEtcmVsZXZhbnQ9XCJhZGRpdGlvbnNcIlxyXG4gICAgICBhcmlhLWxhYmVsPVwiQ2hhdCBtZXNzYWdlc1wiXHJcbiAgICA+XHJcbiAgICAgIHttZXNzYWdlcy5tYXAoKG1lc3NhZ2UsIGluZGV4KSA9PiAoXHJcbiAgICAgICAgPENoYXRib3RNZXNzYWdlQnViYmxlXHJcbiAgICAgICAgICBrZXk9e21lc3NhZ2UuaWQgfHwgYCR7bWVzc2FnZS50aW1lc3RhbXB9LSR7aW5kZXh9YH1cclxuICAgICAgICAgIG1lc3NhZ2U9e21lc3NhZ2V9XHJcbiAgICAgICAgICBwcmltYXJ5Q29sb3I9e3ByaW1hcnlDb2xvcn1cclxuICAgICAgICAgIHNlY29uZGFyeUNvbG9yPXtzZWNvbmRhcnlDb2xvcn1cclxuICAgICAgICAgIG9uU3RyZWFtQ29tcGxldGU9e29uU3RyZWFtQ29tcGxldGV9XHJcbiAgICAgICAgICBvblJldHJ5PXtvblJldHJ5fVxyXG4gICAgICAgIC8+XHJcbiAgICAgICkpfVxyXG4gICAgICB7Y2hpbGRyZW5BYm92ZUVuZH1cclxuICAgICAge2lzTG9hZGluZyA/IDxDaGF0Ym90VHlwaW5nSW5kaWNhdG9yIHByaW1hcnlDb2xvcj17cHJpbWFyeUNvbG9yfSAvPiA6IG51bGx9XHJcbiAgICAgIHtsaXZlQWdlbnRUeXBpbmcgPyAoXHJcbiAgICAgICAgPENoYXRib3RUeXBpbmdJbmRpY2F0b3JcclxuICAgICAgICAgIHByaW1hcnlDb2xvcj17cHJpbWFyeUNvbG9yfVxyXG4gICAgICAgICAgYXJpYUxhYmVsPVwiQWdlbnQgaXMgdHlwaW5nXCJcclxuICAgICAgICAgIGF2YXRhckxhYmVsPVwiQVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgKSA6IG51bGx9XHJcbiAgICAgIDxkaXYgcmVmPXtib3R0b21SZWZ9IC8+XHJcblxyXG4gICAgICA8RmFkZSBpbj17c2hvd05ld01lc3NhZ2VzfT5cclxuICAgICAgICA8Qm94XHJcbiAgICAgICAgICBzeD17e1xyXG4gICAgICAgICAgICBwb3NpdGlvbjogJ3N0aWNreScsXHJcbiAgICAgICAgICAgIGJvdHRvbTogMTIsXHJcbiAgICAgICAgICAgIGxlZnQ6IDAsXHJcbiAgICAgICAgICAgIHJpZ2h0OiAwLFxyXG4gICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcclxuICAgICAgICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxyXG4gICAgICAgICAgICB6SW5kZXg6IDIsXHJcbiAgICAgICAgICAgIG10OiAtNlxyXG4gICAgICAgICAgfX1cclxuICAgICAgICA+XHJcbiAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgIHZhcmlhbnQ9XCJjb250YWluZWRcIlxyXG4gICAgICAgICAgICBzaXplPVwic21hbGxcIlxyXG4gICAgICAgICAgICBvbkNsaWNrPXtvbkp1bXBUb0xhdGVzdH1cclxuICAgICAgICAgICAgc3RhcnRJY29uPXs8S2V5Ym9hcmRBcnJvd0Rvd25JY29uIC8+fVxyXG4gICAgICAgICAgICBzeD17e1xyXG4gICAgICAgICAgICAgIHBvaW50ZXJFdmVudHM6ICdhdXRvJyxcclxuICAgICAgICAgICAgICB0ZXh0VHJhbnNmb3JtOiAnbm9uZScsXHJcbiAgICAgICAgICAgICAgZm9udFdlaWdodDogNzAwLFxyXG4gICAgICAgICAgICAgIGJvcmRlclJhZGl1czogOTk5LFxyXG4gICAgICAgICAgICAgIHB4OiAyLFxyXG4gICAgICAgICAgICAgIHB5OiAwLjc1LFxyXG4gICAgICAgICAgICAgIGJveFNoYWRvdzogJzAgOHB4IDI0cHggcmdiYSgxNSwyMyw0MiwwLjE4KScsXHJcbiAgICAgICAgICAgICAgYmdjb2xvcjogcHJpbWFyeUNvbG9yIHx8IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiSnVtcCB0byBsYXRlc3QgbWVzc2FnZXNcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICBOZXcgbWVzc2FnZXNcclxuICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgIDwvQm94PlxyXG4gICAgICA8L0ZhZGU+XHJcbiAgICA8L01lc3NhZ2VDb250YWluZXI+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgUmVhY3QubWVtbyhDaGF0Ym90TWVzc2FnZUxpc3QpO1xyXG5cclxuXHJcblxyXG4iLCJpbXBvcnQgeyB1c2VSZWYsIHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xyXG5cclxuY29uc3QgQk9UVE9NX1RIUkVTSE9MRF9QWCA9IDgwO1xyXG5cclxuLyoqXHJcbiAqIEF1dG8tc2Nyb2xsIHdoZW4gdXNlciBpcyBuZWFyIGJvdHRvbTsgXCJOZXcgbWVzc2FnZXNcIiBjaGlwIHdoZW4gc2Nyb2xsZWQgdXAuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gdXNlU21hcnRDaGF0U2Nyb2xsKGNoYXRIaXN0b3J5LCBpc0xvYWRpbmcpIHtcclxuICBjb25zdCBjb250YWluZXJSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgY29uc3QgYm90dG9tUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gIGNvbnN0IHN0aWNrVG9Cb3R0b21SZWYgPSB1c2VSZWYodHJ1ZSk7XHJcbiAgY29uc3QgcHJldkNvdW50UmVmID0gdXNlUmVmKDApO1xyXG4gIGNvbnN0IFtzaG93TmV3TWVzc2FnZXMsIHNldFNob3dOZXdNZXNzYWdlc10gPSB1c2VTdGF0ZShmYWxzZSk7XHJcblxyXG4gIGNvbnN0IG9uU2Nyb2xsID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgY29uc3QgZWwgPSBjb250YWluZXJSZWYuY3VycmVudDtcclxuICAgIGlmICghZWwpIHJldHVybjtcclxuICAgIGNvbnN0IGRpc3QgPSBlbC5zY3JvbGxIZWlnaHQgLSBlbC5zY3JvbGxUb3AgLSBlbC5jbGllbnRIZWlnaHQ7XHJcbiAgICBzdGlja1RvQm90dG9tUmVmLmN1cnJlbnQgPSBkaXN0IDwgQk9UVE9NX1RIUkVTSE9MRF9QWDtcclxuICAgIGlmIChzdGlja1RvQm90dG9tUmVmLmN1cnJlbnQpIHtcclxuICAgICAgc2V0U2hvd05ld01lc3NhZ2VzKGZhbHNlKTtcclxuICAgIH1cclxuICB9LCBbXSk7XHJcblxyXG4gIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICBjb25zdCBncmV3ID0gY2hhdEhpc3RvcnkubGVuZ3RoID4gcHJldkNvdW50UmVmLmN1cnJlbnQ7XHJcbiAgICBwcmV2Q291bnRSZWYuY3VycmVudCA9IGNoYXRIaXN0b3J5Lmxlbmd0aDtcclxuXHJcbiAgICBpZiAoZ3JldyAmJiAhc3RpY2tUb0JvdHRvbVJlZi5jdXJyZW50KSB7XHJcbiAgICAgIHNldFNob3dOZXdNZXNzYWdlcyh0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc3RpY2tUb0JvdHRvbVJlZi5jdXJyZW50KSB7XHJcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgYm90dG9tUmVmLmN1cnJlbnQ/LnNjcm9sbEludG9WaWV3KHtcclxuICAgICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJyxcclxuICAgICAgICAgIGJsb2NrOiAnZW5kJ1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9LCBbY2hhdEhpc3RvcnksIGlzTG9hZGluZ10pO1xyXG5cclxuICBjb25zdCBzY3JvbGxUb0JvdHRvbSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgIHN0aWNrVG9Cb3R0b21SZWYuY3VycmVudCA9IHRydWU7XHJcbiAgICBzZXRTaG93TmV3TWVzc2FnZXMoZmFsc2UpO1xyXG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcclxuICAgICAgYm90dG9tUmVmLmN1cnJlbnQ/LnNjcm9sbEludG9WaWV3KHtcclxuICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXHJcbiAgICAgICAgYmxvY2s6ICdlbmQnXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfSwgW10pO1xyXG5cclxuICByZXR1cm4ge1xyXG4gICAgY29udGFpbmVyUmVmLFxyXG4gICAgYm90dG9tUmVmLFxyXG4gICAgb25TY3JvbGwsXHJcbiAgICBzaG93TmV3TWVzc2FnZXMsXHJcbiAgICBzY3JvbGxUb0JvdHRvbVxyXG4gIH07XHJcbn1cclxuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VSZWYsIHVzZUVmZmVjdCwgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7IFBhcGVyLCBJY29uQnV0dG9uLCBUZXh0RmllbGQsIEJveCwgVHlwb2dyYXBoeSwgQXZhdGFyLCBCYWRnZSwgQnV0dG9uLCBDaXJjdWxhclByb2dyZXNzLCBUb29sdGlwLCBJbnB1dEFkb3JubWVudCB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwnO1xyXG5pbXBvcnQgeyBzdHlsZWQsIHVzZVRoZW1lIH0gZnJvbSAnQG11aS9tYXRlcmlhbC9zdHlsZXMnO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAbXVpL3N5c3RlbSc7XHJcbmltcG9ydCBTZW5kSWNvbiBmcm9tICdAbXVpL2ljb25zLW1hdGVyaWFsL1NlbmQnO1xyXG5pbXBvcnQgQ2xvc2VJY29uIGZyb20gJ0BtdWkvaWNvbnMtbWF0ZXJpYWwvQ2xvc2UnO1xyXG5pbXBvcnQgU21hcnRUb3lJY29uIGZyb20gJ0BtdWkvaWNvbnMtbWF0ZXJpYWwvU21hcnRUb3knO1xyXG5pbXBvcnQgQ2hhdEJ1YmJsZU91dGxpbmVJY29uIGZyb20gJ0BtdWkvaWNvbnMtbWF0ZXJpYWwvQ2hhdEJ1YmJsZU91dGxpbmUnO1xyXG5pbXBvcnQgQXR0YWNoRmlsZUljb24gZnJvbSAnQG11aS9pY29ucy1tYXRlcmlhbC9BdHRhY2hGaWxlJztcclxuaW1wb3J0IFBlcnNvbkljb24gZnJvbSAnQG11aS9pY29ucy1tYXRlcmlhbC9QZXJzb24nO1xyXG5pbXBvcnQgUmVjb3JkVm9pY2VPdmVySWNvbiBmcm9tICdAbXVpL2ljb25zLW1hdGVyaWFsL1JlY29yZFZvaWNlT3Zlcic7XHJcbmltcG9ydCBFbWFpbEljb24gZnJvbSAnQG11aS9pY29ucy1tYXRlcmlhbC9FbWFpbCc7XHJcbmltcG9ydCB7IHVzZURpc3BhdGNoLCB1c2VTZWxlY3RvciB9IGZyb20gJ3JlYWN0LXJlZHV4JztcclxuaW1wb3J0IHsgR2V0Q2hhdGJvdERhdGEgfSBmcm9tICdAL3JlZHV4L1NsaWNlcy9DaGF0Ym90U2xpY2UnO1xyXG5pbXBvcnQgeyBBUElfVVJMLCBFbmNyeXB0UGF5bG9hZCwgRGVjcnlwdFBheWxvYWQsIGdldFNlc3Npb25JRCwgZ2V0UmVhbHRpbWVXc0Jhc2VVcmwgfSBmcm9tICdAL3V0aWxzL2luZGV4JztcclxuaW1wb3J0IHsgVG9rZW5IYW5kbGUgfSBmcm9tICdAL3V0aWxzL0F1dGhUb2tlbic7XHJcbmltcG9ydCB7IGdldFVzZXJDbGllbnRTdG9yYWdlU3luYyB9IGZyb20gJ0AvdXRpbHMvdXNlckNsaWVudFN0b3JhZ2UuanMnO1xyXG5cclxuLyoqIFB1YmxpYyBwYWdlczogdXNlciBtZXRhIGNhY2hlIGlzIGVtcHR5OyB1c2Ugc2VydmVyLWxvY2FsaXplZCBmbGFnIChzYW1lIHNvdXJjZSBhcyBjaGF0Ym90LmpzeCBnYXRlKS4gKi9cclxuZnVuY3Rpb24gcmVzb2x2ZUNoYXRib3RXaWRnZXRWaXNpYmxlKCkge1xyXG4gIGNvbnN0IGZyb21DYWNoZSA9IGdldFVzZXJDbGllbnRTdG9yYWdlU3luYygnd3BhaV9jaGF0Ym90X3Zpc2libGUnKTtcclxuICBpZiAoZnJvbUNhY2hlID09PSAndHJ1ZScpIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuICBpZiAoZnJvbUNhY2hlID09PSAnZmFsc2UnKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cud3BhaVBsdWdpblNldHRpbmdzICYmIHdpbmRvdy53cGFpUGx1Z2luU2V0dGluZ3MuY2hhdGJvdFZpc2libGUgIT0gbnVsbCkge1xyXG4gICAgY29uc3QgcyA9IFN0cmluZyh3aW5kb3cud3BhaVBsdWdpblNldHRpbmdzLmNoYXRib3RWaXNpYmxlKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgcmV0dXJuIHMgPT09ICd0cnVlJyB8fCBzID09PSAnMSc7XHJcbiAgfVxyXG4gIHJldHVybiBmYWxzZTtcclxufVxyXG5pbXBvcnQgQ2hhdGJvdE1lc3NhZ2VMaXN0IGZyb20gJy4vQ2hhdGJvdE1lc3NhZ2VMaXN0LmpzeCc7XHJcbmltcG9ydCBDaGF0Ym90TWVzc2FnZUJ1YmJsZSBmcm9tICcuL0NoYXRib3RNZXNzYWdlQnViYmxlLmpzeCc7XHJcbmltcG9ydCB7IHVzZVNtYXJ0Q2hhdFNjcm9sbCB9IGZyb20gJy4vdXNlU21hcnRDaGF0U2Nyb2xsLmpzJztcclxuXHJcbi8vIERlZmluZSBhbmltYXRpb25zXHJcbmNvbnN0IGZhZGVJbiA9IGtleWZyYW1lc2BcclxuICBmcm9tIHsgb3BhY2l0eTogMDsgdHJhbnNmb3JtOiBzY2FsZSgwLjk1KTsgfVxyXG4gIHRvIHsgb3BhY2l0eTogMTsgdHJhbnNmb3JtOiBzY2FsZSgxKTsgfVxyXG5gO1xyXG5jb25zdCBzbGlkZVVwID0ga2V5ZnJhbWVzYFxyXG4gIGZyb20geyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMjBweCk7IG9wYWNpdHk6IDA7IH1cclxuICB0byB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsgb3BhY2l0eTogMTsgfVxyXG5gO1xyXG5jb25zdCBwdWxzZUFuaW1hdGlvbiA9IGtleWZyYW1lc2BcclxuICAwJSB7IHRyYW5zZm9ybTogc2NhbGUoMSk7IH1cclxuICA1MCUgeyB0cmFuc2Zvcm06IHNjYWxlKDEuMSk7IH1cclxuICAxMDAlIHsgdHJhbnNmb3JtOiBzY2FsZSgxKTsgfVxyXG5gO1xyXG5jb25zdCByaXBwbGUgPSBrZXlmcmFtZXNgXHJcbiAgMCUge1xyXG4gICAgdHJhbnNmb3JtOiBzY2FsZSguOCk7XHJcbiAgICBvcGFjaXR5OiAxO1xyXG4gIH1cclxuICAxMDAlIHtcclxuICAgIHRyYW5zZm9ybTogc2NhbGUoMi40KTtcclxuICAgIG9wYWNpdHk6IDA7XHJcbiAgfVxyXG5gO1xyXG5jb25zdCBDaGF0V2luZG93ID0gc3R5bGVkKFBhcGVyKSgoeyB0aGVtZSB9KSA9PiAoe1xyXG4gIHBvc2l0aW9uOiAnZml4ZWQnLFxyXG4gIGJvdHRvbTogMjgsXHJcbiAgcmlnaHQ6IDI4LFxyXG4gIHdpZHRoOiAzODAsXHJcbiAgaGVpZ2h0OiA2MDAsXHJcbiAgbWF4V2lkdGg6ICdjYWxjKDEwMHZ3IC0gMTZweCknLFxyXG4gIG1heEhlaWdodDogJ2NhbGMoMTAwdmggLSAyNHB4KScsXHJcbiAgZGlzcGxheTogJ2ZsZXgnLFxyXG4gIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxyXG4gIHpJbmRleDogMTAwMCxcclxuICBvdmVyZmxvdzogJ2hpZGRlbicsXHJcbiAgYm94U2hhZG93OiAnMCA1cHggNDBweCByZ2JhKDAsIDAsIDAsIDAuMTYpJyxcclxuICBib3JkZXJSYWRpdXM6ICcxNnB4JyxcclxuICBhbmltYXRpb246IGAke2ZhZGVJbn0gMC40cyBjdWJpYy1iZXppZXIoMC4xNzUsIDAuODg1LCAwLjMyLCAxLjI3NSlgLFxyXG4gIGJhY2tncm91bmQ6ICcjZmZmJyxcclxuICBjbGFzc05hbWU6ICd3cGFpX2NoYXRXaW5kb3cnLFxyXG4gIGJvcmRlcjogJzFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMDgpJyxcclxuICBbdGhlbWUuYnJlYWtwb2ludHMuZG93bignc20nKV06IHtcclxuICAgIHdpZHRoOiAnY2FsYygxMDB2dyAtIDE2cHgpJyxcclxuICAgIGhlaWdodDogJ21pbig1NjBweCwgY2FsYygxMDB2aCAtIDg4cHgpKScsXHJcbiAgICByaWdodDogOCxcclxuICAgIGJvdHRvbTogOCxcclxuICAgIGJvcmRlclJhZGl1czogJzE0cHgnXHJcbiAgfVxyXG59KSk7XHJcblxyXG5jb25zdCBDaGF0SGVhZGVyID0gc3R5bGVkKEJveCkoKHsgdGhlbWUsIHRleHRjb2xvciwgYmdjb2xvciB9KSA9PiAoe1xyXG4gIHBhZGRpbmc6IHRoZW1lLnNwYWNpbmcoMS41LCAyKSxcclxuICBiYWNrZ3JvdW5kOiBiZ2NvbG9yIHx8IHRoZW1lLnBhbGV0dGUucHJpbWFyeS5tYWluLFxyXG4gIGNvbG9yOiB0ZXh0Y29sb3IgfHwgJyNmZmYnLFxyXG4gIGRpc3BsYXk6ICdmbGV4JyxcclxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcclxuICBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWJldHdlZW4nLFxyXG4gIGJvcmRlclRvcExlZnRSYWRpdXM6ICcxNnB4JyxcclxuICBib3JkZXJUb3BSaWdodFJhZGl1czogJzE2cHgnLFxyXG4gIGhlaWdodDogJzU2cHgnLFxyXG4gIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxyXG4gIHpJbmRleDogMixcclxuICBib3hTaGFkb3c6ICcwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjEpJyxcclxuICBjbGFzc05hbWU6ICd3cGFpX2NoYXRIZWFkZXInLFxyXG4gICcmIC5NdWlUeXBvZ3JhcGh5LXN1YnRpdGxlMSc6IHtcclxuICAgIGZvbnRTaXplOiAnMC45MzhyZW0nLFxyXG4gICAgZm9udFdlaWdodDogNTAwLFxyXG4gICAgbGV0dGVyU3BhY2luZzogJzAuMTVweCcsXHJcbiAgICBjb2xvcjogdGV4dGNvbG9yIHx8ICcjZmZmJ1xyXG4gIH0sXHJcbiAgJyYgLk11aVR5cG9ncmFwaHktY2FwdGlvbic6IHtcclxuICAgIGZvbnRTaXplOiAnMC43NXJlbScsXHJcbiAgICBjb2xvcjogdGV4dGNvbG9yID8gYCR7dGV4dGNvbG9yfTk5YCA6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyknLFxyXG4gICAgbGV0dGVyU3BhY2luZzogJzAuNHB4JyxcclxuICAgIGxpbmVIZWlnaHQ6IDEuMlxyXG4gIH0sXHJcbiAgJyYgLk11aUF2YXRhci1yb290Jzoge1xyXG4gICAgd2lkdGg6IDM2LFxyXG4gICAgaGVpZ2h0OiAzNixcclxuICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcclxuICAgICcmIHN2Zyc6IHtcclxuICAgICAgd2lkdGg6IDIwLFxyXG4gICAgICBoZWlnaHQ6IDIwLFxyXG4gICAgICBjb2xvcjogdGV4dGNvbG9yIHx8ICcjZmZmJ1xyXG4gICAgfVxyXG4gIH0sXHJcbiAgJyYgLk11aUljb25CdXR0b24tcm9vdCc6IHtcclxuICAgIHBhZGRpbmc6ICc2cHgnLFxyXG4gICAgbWFyZ2luTGVmdDogJzhweCcsXHJcbiAgICAnJjpob3Zlcic6IHtcclxuICAgICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpJ1xyXG4gICAgfSxcclxuICAgICcmIHN2Zyc6IHtcclxuICAgICAgZm9udFNpemU6ICcyMHB4J1xyXG4gICAgfVxyXG4gIH1cclxufSkpO1xyXG5cclxuY29uc3QgQ2hhdElucHV0ID0gc3R5bGVkKEJveCkoKHsgdGhlbWUgfSkgPT4gKHtcclxuICBwYWRkaW5nOiB0aGVtZS5zcGFjaW5nKDIuNSwgMyksXHJcbiAgYmFja2dyb3VuZDogJyNmZmYnLFxyXG4gIGJvcmRlclRvcDogJzFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMDgpJyxcclxuICBjbGFzc05hbWU6ICd3cGFpX2NoYXRJbnB1dCdcclxufSkpO1xyXG5cclxuLy8gVXBkYXRlIHRoZSBJbnB1dEZpZWxkIHN0eWxpbmdcclxuY29uc3QgSW5wdXRGaWVsZCA9IHN0eWxlZChUZXh0RmllbGQpKCh7IHRoZW1lLCBwcmltYXJ5Q29sb3IgfSkgPT4gKHtcclxuICBjbGFzc05hbWU6ICd3cGFpX2lucHV0RmllbGQnLFxyXG4gICcmIC5NdWlPdXRsaW5lZElucHV0LXJvb3QnOiB7XHJcbiAgICBib3JkZXJSYWRpdXM6ICcxMnB4JyxcclxuICAgIGJhY2tncm91bmRDb2xvcjogJyNmOWZhZmInLFxyXG4gICAgYm9yZGVyOiAnMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4wOCknLFxyXG4gICAgdHJhbnNpdGlvbjogJ2FsbCAwLjJzIGVhc2UnLFxyXG4gICAgJyY6aG92ZXInOiB7XHJcbiAgICAgIGJhY2tncm91bmRDb2xvcjogJyNmM2Y0ZjYnLFxyXG4gICAgICBib3JkZXJDb2xvcjogJ3JnYmEoMCwgMCwgMCwgMC4xMiknXHJcbiAgICB9LFxyXG4gICAgJyYgZmllbGRzZXQnOiB7XHJcbiAgICAgIGJvcmRlckNvbG9yOiAndHJhbnNwYXJlbnQnXHJcbiAgICB9LFxyXG4gICAgJyY6aG92ZXIgZmllbGRzZXQnOiB7XHJcbiAgICAgIGJvcmRlcjogJ25vbmUnXHJcbiAgICB9LFxyXG4gICAgJyYuTXVpLWZvY3VzZWQnOiB7XHJcbiAgICAgIGJhY2tncm91bmRDb2xvcjogJyNmZmYnLFxyXG4gICAgICBib3JkZXJDb2xvcjogcHJpbWFyeUNvbG9yIHx8IHRoZW1lLnBhbGV0dGUucHJpbWFyeS5tYWluLFxyXG4gICAgICBib3hTaGFkb3c6ICcwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjA1KScsXHJcbiAgICAgICcmIGZpZWxkc2V0Jzoge1xyXG4gICAgICAgIGJvcmRlcjogJ25vbmUnXHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICAnJiAuTXVpSW5wdXRBZG9ybm1lbnQtcm9vdCc6IHtcclxuICAgICAgbWFyZ2luUmlnaHQ6IHRoZW1lLnNwYWNpbmcoMSksXHJcbiAgICAgIGhlaWdodDogJzEwMCUnLFxyXG4gICAgICBtYXhIZWlnaHQ6ICdub25lJ1xyXG4gICAgfVxyXG4gIH0sXHJcbiAgJyYgLk11aUlucHV0QmFzZS1pbnB1dCc6IHtcclxuICAgIHBhZGRpbmc6ICcxNHB4IDE2cHgnLFxyXG4gICAgZm9udFNpemU6ICcwLjkzNzVyZW0nLFxyXG4gICAgbGluZUhlaWdodDogMS42LFxyXG4gICAgJyY6OnBsYWNlaG9sZGVyJzoge1xyXG4gICAgICBjb2xvcjogJyM5Y2EzYWYnLFxyXG4gICAgICBvcGFjaXR5OiAxXHJcbiAgICB9XHJcbiAgfVxyXG59KSk7XHJcblxyXG5jb25zdCBDaGF0VG9nZ2xlID0gc3R5bGVkKEljb25CdXR0b24pKCh7IHRoZW1lLCBiZ2NvbG9yIH0pID0+ICh7XHJcbiAgcG9zaXRpb246ICdmaXhlZCcsXHJcbiAgYm90dG9tOiAyOCxcclxuICByaWdodDogMjgsXHJcbiAgd2lkdGg6IDU2LFxyXG4gIGhlaWdodDogNTYsXHJcbiAgYmFja2dyb3VuZDogYmdjb2xvciB8fCB0aGVtZS5wYWxldHRlLnByaW1hcnkubWFpbixcclxuICBjb2xvcjogJyNmZmYnLFxyXG4gIGJveFNoYWRvdzogJzAgNHB4IDIwcHggcmdiYSgwLCAwLCAwLCAwLjE1KScsXHJcbiAgYm9yZGVyUmFkaXVzOiAnNTAlJyxcclxuICAnJjpob3Zlcic6IHtcclxuICAgIGJhY2tncm91bmQ6IGJnY29sb3IgfHwgdGhlbWUucGFsZXR0ZS5wcmltYXJ5LmRhcmssXHJcbiAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC0ycHgpJ1xyXG4gIH0sXHJcbiAgdHJhbnNpdGlvbjogJ2FsbCAwLjNzIGVhc2UnLFxyXG4gIGFuaW1hdGlvbjogYCR7cHVsc2VBbmltYXRpb259IDJzIGluZmluaXRlYCxcclxuICB6SW5kZXg6IDk5OSxcclxuICBjbGFzc05hbWU6ICd3cGFpX2NoYXRUb2dnbGUnLFxyXG4gICcmIHN2Zyc6IHtcclxuICAgIHdpZHRoOiAyNCxcclxuICAgIGhlaWdodDogMjRcclxuICB9XHJcbn0pKTtcclxuXHJcbmNvbnN0IEZvcm1SZXNwb25zZSA9IHN0eWxlZChCb3gpKCh7IHRoZW1lIH0pID0+ICh7XHJcbiAgZGlzcGxheTogJ2ZsZXgnLFxyXG4gIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxyXG4gIGdhcDogdGhlbWUuc3BhY2luZygyKSxcclxuICBtYXhXaWR0aDogJzg1JScsXHJcbiAgYW5pbWF0aW9uOiBgJHtzbGlkZVVwfSAwLjNzIGVhc2Utb3V0YCxcclxuICBtYXJnaW5MZWZ0OiB0aGVtZS5zcGFjaW5nKDUpLFxyXG4gIG1hcmdpbkJvdHRvbTogdGhlbWUuc3BhY2luZygyKSxcclxuICBjbGFzc05hbWU6ICd3cGFpX2Zvcm1SZXNwb25zZSdcclxufSkpO1xyXG5cclxuY29uc3QgRm9ybUZpZWxkID0gc3R5bGVkKFRleHRGaWVsZCkoKHsgdGhlbWUgfSkgPT4gKHtcclxuICAnJiAuTXVpT3V0bGluZWRJbnB1dC1yb290Jzoge1xyXG4gICAgYm9yZGVyUmFkaXVzOiAnMTJweCcsXHJcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZmZmJyxcclxuICAgIGJvcmRlcjogJzFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMDgpJyxcclxuICAgIHRyYW5zaXRpb246ICdhbGwgMC4ycyBlYXNlJyxcclxuICAgICcmOmhvdmVyJzoge1xyXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZjlmYWZiJyxcclxuICAgICAgYm9yZGVyQ29sb3I6ICdyZ2JhKDAsIDAsIDAsIDAuMTIpJ1xyXG4gICAgfSxcclxuICAgICcmIGZpZWxkc2V0Jzoge1xyXG4gICAgICBib3JkZXJDb2xvcjogJ3RyYW5zcGFyZW50J1xyXG4gICAgfSxcclxuICAgICcmLk11aS1mb2N1c2VkJzoge1xyXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZmZmJyxcclxuICAgICAgYm9yZGVyQ29sb3I6IHRoZW1lLnBhbGV0dGUucHJpbWFyeS5tYWluLFxyXG4gICAgICBib3hTaGFkb3c6ICcwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjA1KScsXHJcbiAgICAgICcmIGZpZWxkc2V0Jzoge1xyXG4gICAgICAgIGJvcmRlcjogJ25vbmUnXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9LFxyXG4gICcmIC5NdWlJbnB1dEJhc2UtaW5wdXQnOiB7XHJcbiAgICBwYWRkaW5nOiAnMTJweCAxNnB4JyxcclxuICAgIGZvbnRTaXplOiAnMC45Mzc1cmVtJyxcclxuICAgICcmOjpwbGFjZWhvbGRlcic6IHtcclxuICAgICAgY29sb3I6ICcjOWNhM2FmJyxcclxuICAgICAgb3BhY2l0eTogMVxyXG4gICAgfVxyXG4gIH1cclxufSkpO1xyXG5cclxuY29uc3QgTUFYX1JFVFJJRVMgPSAyO1xyXG5jb25zdCBUSU1FT1VUX0RVUkFUSU9OID0gMzAwMDA7IC8vIDMwIHNlY29uZHNcclxuXHJcbmNvbnN0IGdldEJvdEljb24gPSAoYm90SWNvbiwgY3VzdG9tQm90SWNvbikgPT4ge1xyXG4gIGlmIChib3RJY29uID09PSAnY3VzdG9tJyAmJiBjdXN0b21Cb3RJY29uKSB7XHJcbiAgICByZXR1cm4gPGltZyBzcmM9e2N1c3RvbUJvdEljb259IGFsdD1cIkN1c3RvbSBCb3QgSWNvblwiIHN0eWxlPXt7XHJcbiAgICAgIHdpZHRoOiAnNDBweCcsXHJcbiAgICAgIGhlaWdodDogJzQwcHgnXHJcbiAgICB9fSAvPjtcclxuICB9XHJcbiAgc3dpdGNoIChib3RJY29uKSB7XHJcbiAgICBjYXNlICdyb2JvdCc6XHJcbiAgICAgIHJldHVybiA8U21hcnRUb3lJY29uIC8+O1xyXG4gICAgY2FzZSAnYXNzaXN0YW50JzpcclxuICAgICAgcmV0dXJuIDxQZXJzb25JY29uIC8+O1xyXG4gICAgZGVmYXVsdDpcclxuICAgICAgcmV0dXJuIDxTbWFydFRveUljb24gLz47XHJcbiAgfVxyXG59O1xyXG5cclxuY29uc3QgQ2hhdGJvdCA9ICgpID0+IHtcclxuICBjb25zdCBbaXNPcGVuLCBzZXRJc09wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gIGNvbnN0IFtpbnB1dCwgc2V0SW5wdXRdID0gdXNlU3RhdGUoJycpO1xyXG4gIGNvbnN0IFtjaGF0SGlzdG9yeSwgc2V0Q2hhdEhpc3RvcnldID0gdXNlU3RhdGUoW10pO1xyXG4gIGNvbnN0IFtpc0xvYWRpbmcsIHNldElzTG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgY29uc3Qge1xyXG4gICAgY29udGFpbmVyUmVmLFxyXG4gICAgYm90dG9tUmVmLFxyXG4gICAgb25TY3JvbGwsXHJcbiAgICBzaG93TmV3TWVzc2FnZXMsXHJcbiAgICBzY3JvbGxUb0JvdHRvbVxyXG4gIH0gPSB1c2VTbWFydENoYXRTY3JvbGwoY2hhdEhpc3RvcnksIGlzTG9hZGluZyk7XHJcbiAgY29uc3QgaGFuZGxlU3RyZWFtQ29tcGxldGUgPSB1c2VDYWxsYmFjayhtc2dJZCA9PiB7XHJcbiAgICBzZXRDaGF0SGlzdG9yeShwcmV2ID0+IHByZXYubWFwKG0gPT4gKG0uaWQgPT09IG1zZ0lkID8geyAuLi5tLCBpc1N0cmVhbWluZzogZmFsc2UgfSA6IG0pKSk7XHJcbiAgfSwgW10pO1xyXG4gIGNvbnN0IFt1c2VySWRdID0gdXNlU3RhdGUoYHVzZXJfJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiwgOSl9YCk7XHJcbiAgY29uc3QgW3Nob3dVc2VyRm9ybSwgc2V0U2hvd1VzZXJGb3JtXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICBjb25zdCBbdXNlckZvcm1EYXRhLCBzZXRVc2VyRm9ybURhdGFdID0gdXNlU3RhdGUoe1xyXG4gICAgbmFtZTogJycsXHJcbiAgICBlbWFpbDogJycsXHJcbiAgICBwaG9uZTogJydcclxuICB9KTtcclxuICBjb25zdCBbZm9ybVN0ZXAsIHNldEZvcm1TdGVwXSA9IHVzZVN0YXRlKDApO1xyXG4gIGNvbnN0IFtyZXNwb25zZUNvdW50LCBzZXRSZXNwb25zZUNvdW50XSA9IHVzZVN0YXRlKDApO1xyXG4gIGNvbnN0IHRoZW1lID0gdXNlVGhlbWUoKTtcclxuICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgY29uc3QgW2NoYXRib3RVc2VyU2V0dGluZywgU2V0Q2hhdGJvdFVzZXJTZXR0aW5nXSA9IHVzZVN0YXRlKHt9KTtcclxuXHJcbiAgLy8gVXBkYXRlIHRoZSBzdGF0ZSB2YXJpYWJsZXNcclxuICBjb25zdCBbdXNlckluZm8sIHNldFVzZXJJbmZvXSA9IHVzZVN0YXRlKHtcclxuICAgIGVtYWlsOiAnJyxcclxuICAgIG5hbWU6ICcnLFxyXG4gICAgcGhvbmU6ICcnXHJcbiAgfSk7XHJcbiAgY29uc3QgW2N1cnJlbnRRdWVzdGlvbiwgc2V0Q3VycmVudFF1ZXN0aW9uXSA9IHVzZVN0YXRlKG51bGwpO1xyXG4gIGNvbnN0IFtpc0NvbGxlY3RpbmdJbmZvLCBzZXRJc0NvbGxlY3RpbmdJbmZvXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICBjb25zdCBbaW5mb0NvbGxlY3Rpb25BdHRlbXB0ZWQsIHNldEluZm9Db2xsZWN0aW9uQXR0ZW1wdGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuXHJcbiAgLy8gTGl2ZSBjaGF0IHdpdGggYWRtaW4gKHJlYWx0aW1lKSDigJMgcmVxdWlyZXMgZW1haWwgdG8gc3RhcnQ7IHVzZXMgV2ViU29ja2V0IEFQSVxyXG4gIGNvbnN0IFtzaG93TGl2ZUNoYXRFbWFpbEZvcm0sIHNldFNob3dMaXZlQ2hhdEVtYWlsRm9ybV0gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgY29uc3QgW2xpdmVDaGF0RW1haWwsIHNldExpdmVDaGF0RW1haWxdID0gdXNlU3RhdGUoJycpO1xyXG4gIGNvbnN0IFtsaXZlQ2hhdEVtYWlsRXJyb3IsIHNldExpdmVDaGF0RW1haWxFcnJvcl0gPSB1c2VTdGF0ZSgnJyk7XHJcbiAgY29uc3QgW2xpdmVDaGF0UmVxdWVzdGVkLCBzZXRMaXZlQ2hhdFJlcXVlc3RlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgY29uc3QgW2xpdmVDaGF0UmVxdWVzdElkLCBzZXRMaXZlQ2hhdFJlcXVlc3RJZF0gPSB1c2VTdGF0ZShudWxsKTtcclxuICBjb25zdCBbbGl2ZUNoYXRBY2NlcHRlZCwgc2V0TGl2ZUNoYXRBY2NlcHRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgY29uc3QgW2xpdmVDaGF0Q29ubmVjdGluZywgc2V0TGl2ZUNoYXRDb25uZWN0aW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICBjb25zdCBbbGl2ZUFnZW50VHlwaW5nLCBzZXRMaXZlQWdlbnRUeXBpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gIGNvbnN0IHdzTGl2ZUNoYXRSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgY29uc3QgbGl2ZUNoYXRBY2NlcHRlZFJlZiA9IHVzZVJlZihmYWxzZSk7XHJcbiAgY29uc3QgY3VzdG9tZXJUeXBpbmdJZGxlVGltZXJSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgY29uc3QgY3VzdG9tZXJUeXBpbmdTZW50VHJ1ZVJlZiA9IHVzZVJlZihmYWxzZSk7XHJcblxyXG4gIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICBsaXZlQ2hhdEFjY2VwdGVkUmVmLmN1cnJlbnQgPSBsaXZlQ2hhdEFjY2VwdGVkO1xyXG4gIH0sIFtsaXZlQ2hhdEFjY2VwdGVkXSk7XHJcblxyXG4gIGNvbnN0IGNsZWFyQ3VzdG9tZXJUeXBpbmdJZGxlVGltZXIgPSAoKSA9PiB7XHJcbiAgICBpZiAoY3VzdG9tZXJUeXBpbmdJZGxlVGltZXJSZWYuY3VycmVudCkge1xyXG4gICAgICBjbGVhclRpbWVvdXQoY3VzdG9tZXJUeXBpbmdJZGxlVGltZXJSZWYuY3VycmVudCk7XHJcbiAgICAgIGN1c3RvbWVyVHlwaW5nSWRsZVRpbWVyUmVmLmN1cnJlbnQgPSBudWxsO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGNvbnN0IHNlbmRDdXN0b21lclR5cGluZyA9IHR5cGluZyA9PiB7XHJcbiAgICBpZiAoIWxpdmVDaGF0QWNjZXB0ZWRSZWYuY3VycmVudCkgcmV0dXJuO1xyXG4gICAgY29uc3Qgd3MgPSB3c0xpdmVDaGF0UmVmLmN1cnJlbnQ7XHJcbiAgICBpZiAoIXdzIHx8IHdzLnJlYWR5U3RhdGUgIT09IFdlYlNvY2tldC5PUEVOKSByZXR1cm47XHJcbiAgICB0cnkge1xyXG4gICAgICB3cy5zZW5kKEpTT04uc3RyaW5naWZ5KHsgdHlwZTogJ3R5cGluZycsIHR5cGluZyB9KSk7XHJcbiAgICB9IGNhdGNoIChfKSB7fVxyXG4gIH07XHJcblxyXG4gIGNvbnN0IGZsdXNoQ3VzdG9tZXJUeXBpbmdTdG9wcGVkID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgY2xlYXJDdXN0b21lclR5cGluZ0lkbGVUaW1lcigpO1xyXG4gICAgaWYgKGN1c3RvbWVyVHlwaW5nU2VudFRydWVSZWYuY3VycmVudCkge1xyXG4gICAgICBjdXN0b21lclR5cGluZ1NlbnRUcnVlUmVmLmN1cnJlbnQgPSBmYWxzZTtcclxuICAgICAgc2VuZEN1c3RvbWVyVHlwaW5nKGZhbHNlKTtcclxuICAgIH1cclxuICB9LCBbXSk7XHJcblxyXG4gIGNvbnN0IGhhbmRsZUNoYXRJbnB1dENoYW5nZSA9IHVzZUNhbGxiYWNrKGUgPT4ge1xyXG4gICAgY29uc3QgdiA9IGUudGFyZ2V0LnZhbHVlO1xyXG4gICAgc2V0SW5wdXQodik7XHJcbiAgICBpZiAoIWxpdmVDaGF0UmVxdWVzdGVkIHx8ICFsaXZlQ2hhdEFjY2VwdGVkUmVmLmN1cnJlbnQpIHJldHVybjtcclxuICAgIGNvbnN0IHdzID0gd3NMaXZlQ2hhdFJlZi5jdXJyZW50O1xyXG4gICAgaWYgKCF3cyB8fCB3cy5yZWFkeVN0YXRlICE9PSBXZWJTb2NrZXQuT1BFTikgcmV0dXJuO1xyXG4gICAgaWYgKCFjdXN0b21lclR5cGluZ1NlbnRUcnVlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgY3VzdG9tZXJUeXBpbmdTZW50VHJ1ZVJlZi5jdXJyZW50ID0gdHJ1ZTtcclxuICAgICAgc2VuZEN1c3RvbWVyVHlwaW5nKHRydWUpO1xyXG4gICAgfVxyXG4gICAgY2xlYXJDdXN0b21lclR5cGluZ0lkbGVUaW1lcigpO1xyXG4gICAgY3VzdG9tZXJUeXBpbmdJZGxlVGltZXJSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBjdXN0b21lclR5cGluZ0lkbGVUaW1lclJlZi5jdXJyZW50ID0gbnVsbDtcclxuICAgICAgaWYgKGN1c3RvbWVyVHlwaW5nU2VudFRydWVSZWYuY3VycmVudCkge1xyXG4gICAgICAgIGN1c3RvbWVyVHlwaW5nU2VudFRydWVSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgIHNlbmRDdXN0b21lclR5cGluZyhmYWxzZSk7XHJcbiAgICAgIH1cclxuICAgIH0sIDE3MDApO1xyXG4gIH0sIFtsaXZlQ2hhdFJlcXVlc3RlZF0pO1xyXG5cclxuICAvLyBBdXRoIHNlc3Npb24gY29tZXMgZnJvbSBzZXJ2ZXItYmFja2VkIHN0b3JhZ2UgKFRva2VuSGFuZGxlIC8gdXNlciBtZXRhKVxyXG4gIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICA7XHJcbiAgICAoYXN5bmMgKCkgPT4ge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IGRhdGFUb2tlblJlc3BvbnNlID0gYXdhaXQgVG9rZW5IYW5kbGUuZ2V0VG9rZW4oKTtcclxuICAgICAgICBjb25zdCBkYXRhVG9rZW4gPSBkYXRhVG9rZW5SZXNwb25zZS50b2tlbj8uYXV0aF90b2tlbjtcclxuICAgICAgICBpZiAoIWRhdGFUb2tlbikge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBkZWNvZGVkRGF0YSA9IERlY3J5cHRQYXlsb2FkKGRhdGFUb2tlbik7XHJcbiAgICAgICAgaWYgKGRlY29kZWREYXRhPy5kYXRhPy5hdXRob3JpemF0aW9uPy50b2tlbiAmJiBkZWNvZGVkRGF0YT8uZGF0YT8udXNlcikge1xyXG4gICAgICAgICAgU2V0Q2hhdGJvdFVzZXJTZXR0aW5nKHtcclxuICAgICAgICAgICAgdXNlcjogZGVjb2RlZERhdGE/LmRhdGE/LnVzZXIsXHJcbiAgICAgICAgICAgIHRva2VuOiBkZWNvZGVkRGF0YT8uZGF0YT8uYXV0aG9yaXphdGlvbj8udG9rZW5cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7fVxyXG4gICAgICB9IGNhdGNoIChlcnJvcikge31cclxuICAgIH0pKCk7XHJcbiAgfSwgW10pO1xyXG4gIGNvbnN0IHtcclxuICAgIENoYXRib3REYXRhLFxyXG4gICAgaXNfY2hhdGJvdF9sb2FkXHJcbiAgfSA9IHVzZVNlbGVjdG9yKHN0YXRlID0+IHN0YXRlLmNoYXRib3QpO1xyXG4gIGNvbnN0IFtjaGF0Ym90U3R5bGVzLCBzZXRDaGF0Ym90U3R5bGVzXSA9IHVzZVN0YXRlKHtcclxuICAgIHByaW1hcnlDb2xvcjogJycsXHJcbiAgICBzZWNvbmRhcnlDb2xvcjogJycsXHJcbiAgICBib3RJY29uOiAncm9ib3QnLFxyXG4gICAgd2VsY29tZU1lc3NhZ2U6ICdIZWxsbyEgSG93IGNhbiBJIGhlbHAgeW91IHRvZGF5Pz8/JyxcclxuICAgIHBsYWNlaG9sZGVyVGV4dDogJ1R5cGUgYSBtZXNzYWdlLi4uJyxcclxuICAgIGhlYWRlclRleHQ6ICdBSSBBc3Npc3RhbnQnXHJcbiAgfSk7XHJcbiAgY29uc3QgW2lzVmlzaWJsZSwgc2V0SXNWaXNpYmxlXSA9IHVzZVN0YXRlKCgpID0+IHJlc29sdmVDaGF0Ym90V2lkZ2V0VmlzaWJsZSgpKTtcclxuICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgY29uc3QgY2hlY2tWaXNpYmlsaXR5ID0gKCkgPT4ge1xyXG4gICAgICBzZXRJc1Zpc2libGUocmVzb2x2ZUNoYXRib3RXaWRnZXRWaXNpYmxlKCkpO1xyXG4gICAgfTtcclxuICAgIGNoZWNrVmlzaWJpbGl0eSgpO1xyXG4gICAgY29uc3Qgb25DdXN0b20gPSAoKSA9PiBjaGVja1Zpc2liaWxpdHkoKTtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzdG9yYWdlJywgY2hlY2tWaXNpYmlsaXR5KTtcclxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3dwYWlfY2hhdGJvdF92aXNpYmlsaXR5X2NoYW5nZWQnLCBvbkN1c3RvbSk7XHJcbiAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc3RvcmFnZScsIGNoZWNrVmlzaWJpbGl0eSk7XHJcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3dwYWlfY2hhdGJvdF92aXNpYmlsaXR5X2NoYW5nZWQnLCBvbkN1c3RvbSk7XHJcbiAgICB9O1xyXG4gIH0sIFtdKTtcclxuICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgZGlzcGF0Y2goR2V0Q2hhdGJvdERhdGEoKSk7XHJcbiAgfSwgW2Rpc3BhdGNoXSk7XHJcbiAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgIGlmIChjaGF0SGlzdG9yeS5sZW5ndGggPT09IDAgJiYgY2hhdGJvdFN0eWxlcy53ZWxjb21lTWVzc2FnZSkge1xyXG4gICAgICBzZXRDaGF0SGlzdG9yeShbe1xyXG4gICAgICAgIGlkOiAnd2VsY29tZScsXHJcbiAgICAgICAgdGV4dDogY2hhdGJvdFN0eWxlcy53ZWxjb21lTWVzc2FnZSxcclxuICAgICAgICBpc1VzZXI6IGZhbHNlLFxyXG4gICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXHJcbiAgICAgIH1dKTtcclxuICAgIH1cclxuICB9LCBbY2hhdGJvdFN0eWxlcywgQ2hhdGJvdERhdGEsIGlzX2NoYXRib3RfbG9hZF0pO1xyXG4gIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICBpZiAoIWlzX2NoYXRib3RfbG9hZCAmJiBDaGF0Ym90RGF0YSkge1xyXG4gICAgICBjb25zdCB3ZWxjb21lTXNnID0gQ2hhdGJvdERhdGEuaW5pdF9tc2cgfHwgJ0hlbGxvISBIb3cgY2FuIEkgaGVscCB5b3UgdG9kYXk/JztcclxuICAgICAgc2V0Q2hhdGJvdFN0eWxlcyh7XHJcbiAgICAgICAgcHJpbWFyeUNvbG9yOiBDaGF0Ym90RGF0YS5ib3RfYmdfY29sb3IsXHJcbiAgICAgICAgc2Vjb25kYXJ5Q29sb3I6IENoYXRib3REYXRhLmJvdF90ZXh0X2NvbG9yLFxyXG4gICAgICAgIGJvdEljb246IENoYXRib3REYXRhLmJvdF9pY29uIHx8ICdyb2JvdCcsXHJcbiAgICAgICAgd2VsY29tZU1lc3NhZ2U6IENoYXRib3REYXRhLmluaXRfbXNnIHx8ICdIZWxsbyEgSG93IGNhbiBJIGhlbHAgeW91IHRvZGF5Pz8nLFxyXG4gICAgICAgIHBsYWNlaG9sZGVyVGV4dDogQ2hhdGJvdERhdGEucGxhY2Vob2xkZXJfdGV4dCB8fCAnVHlwZSBhIG1lc3NhZ2UuLi4nLFxyXG4gICAgICAgIGhlYWRlclRleHQ6IENoYXRib3REYXRhLmJvdF9uYW1lIHx8ICdBSSBBc3Npc3RhbnQnXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH0sIFtpc19jaGF0Ym90X2xvYWQsIENoYXRib3REYXRhXSk7XHJcbiAgY29uc3QgaGFuZGxlU3RhcnRMaXZlQ2hhdENsaWNrID0gKCkgPT4ge1xyXG4gICAgc2V0U2hvd0xpdmVDaGF0RW1haWxGb3JtKHRydWUpO1xyXG4gICAgc2V0TGl2ZUNoYXRFbWFpbEVycm9yKCcnKTtcclxuICB9O1xyXG4gIGNvbnN0IGNvbm5lY3RMaXZlQ2hhdFdzID0gKGNvbXBhbnlOYW1lLCBjdXN0b21lcklkLCBlbWFpbElkKSA9PiB7XHJcbiAgICBzZXRMaXZlQWdlbnRUeXBpbmcoZmFsc2UpO1xyXG4gICAgY2xlYXJDdXN0b21lclR5cGluZ0lkbGVUaW1lcigpO1xyXG4gICAgY3VzdG9tZXJUeXBpbmdTZW50VHJ1ZVJlZi5jdXJyZW50ID0gZmFsc2U7XHJcbiAgICBjb25zdCBiYXNlID0gZ2V0UmVhbHRpbWVXc0Jhc2VVcmwoKS5yZXBsYWNlKC9cXC8kLywgJycpO1xyXG4gICAgY29uc3Qgd3NVcmwgPSBgJHtiYXNlfS93cy9jdXN0b21lcj9jb21wYW55X25hbWU9JHtlbmNvZGVVUklDb21wb25lbnQoJ2dvb2dsZS5jb20nKX0mY3VzdG9tZXJfaWQ9JHtlbmNvZGVVUklDb21wb25lbnQoY3VzdG9tZXJJZCl9JmVtYWlsPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGVtYWlsSWQpfWA7XHJcbiAgICBzZXRMaXZlQ2hhdENvbm5lY3RpbmcodHJ1ZSk7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCB3cyA9IG5ldyBXZWJTb2NrZXQod3NVcmwpO1xyXG4gICAgICB3c0xpdmVDaGF0UmVmLmN1cnJlbnQgPSB3cztcclxuICAgICAgd3Mub25vcGVuID0gKCkgPT4ge1xyXG4gICAgICAgIHNldExpdmVDaGF0Q29ubmVjdGluZyhmYWxzZSk7XHJcbiAgICAgICAgd3Muc2VuZChKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICB0eXBlOiAncmVxdWVzdF9jaGF0J1xyXG4gICAgICAgIH0pKTtcclxuICAgICAgfTtcclxuICAgICAgd3Mub25tZXNzYWdlID0gZXZlbnQgPT4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjb25zdCBtc2cgPSBKU09OLnBhcnNlKGV2ZW50LmRhdGEpO1xyXG4gICAgICAgICAgc3dpdGNoIChtc2cudHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlICdyZXF1ZXN0X3NlbnQnOlxyXG4gICAgICAgICAgICAgIHNldExpdmVDaGF0UmVxdWVzdElkKG1zZy5yZXF1ZXN0X2lkIHx8IG51bGwpO1xyXG4gICAgICAgICAgICAgIHNldENoYXRIaXN0b3J5KHByZXYgPT4gWy4uLnByZXYsIHtcclxuICAgICAgICAgICAgICAgIGlkOiBgbGMtJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDcpfWAsXHJcbiAgICAgICAgICAgICAgICB0ZXh0OiAnV2FpdGluZyBmb3IgYW4gYWdlbnQgdG8gam9pbuKApicsXHJcbiAgICAgICAgICAgICAgICBpc1VzZXI6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcclxuICAgICAgICAgICAgICB9XSk7XHJcbiAgICAgICAgICAgICAgc2Nyb2xsVG9Cb3R0b20oKTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY2hhdF9hY2NlcHRlZCc6XHJcbiAgICAgICAgICAgICAgc2V0TGl2ZUNoYXRBY2NlcHRlZCh0cnVlKTtcclxuICAgICAgICAgICAgICBzZXRMaXZlQWdlbnRUeXBpbmcoZmFsc2UpO1xyXG4gICAgICAgICAgICAgIHNldENoYXRIaXN0b3J5KHByZXYgPT4gWy4uLnByZXYsIHtcclxuICAgICAgICAgICAgICAgIGlkOiBgbGMtJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDcpfWAsXHJcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIkFuIGFnZW50IGhhcyBqb2luZWQuIFlvdSBjYW4gY2hhdCBub3cuXCIsXHJcbiAgICAgICAgICAgICAgICBpc1VzZXI6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcclxuICAgICAgICAgICAgICB9XSk7XHJcbiAgICAgICAgICAgICAgc2Nyb2xsVG9Cb3R0b20oKTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbWVzc2FnZSc6XHJcbiAgICAgICAgICAgICAgc2V0TGl2ZUFnZW50VHlwaW5nKGZhbHNlKTtcclxuICAgICAgICAgICAgICBzZXRDaGF0SGlzdG9yeShwcmV2ID0+IFsuLi5wcmV2LCB7XHJcbiAgICAgICAgICAgICAgICBpZDogYGxjLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyLCA3KX1gLFxyXG4gICAgICAgICAgICAgICAgdGV4dDogbXNnLmJvZHkgfHwgJycsXHJcbiAgICAgICAgICAgICAgICBpc1VzZXI6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcclxuICAgICAgICAgICAgICB9XSk7XHJcbiAgICAgICAgICAgICAgc2Nyb2xsVG9Cb3R0b20oKTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndHlwaW5nJzpcclxuICAgICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1zZywgJ2Zyb21fc3RhZmYnKSkge1xyXG4gICAgICAgICAgICAgICAgc2V0TGl2ZUFnZW50VHlwaW5nKCEhbXNnLnR5cGluZyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdtZXNzYWdlX3NlbnQnOlxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdlcnJvcic6XHJcbiAgICAgICAgICAgICAgaWYgKG1zZy5ib2R5KSB7XHJcbiAgICAgICAgICAgICAgICBzZXRDaGF0SGlzdG9yeShwcmV2ID0+IFsuLi5wcmV2LCB7XHJcbiAgICAgICAgICAgICAgICAgIHRleHQ6IGBFcnJvcjogJHttc2cuYm9keX1gLFxyXG4gICAgICAgICAgICAgICAgICBpc1VzZXI6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgfV0pO1xyXG4gICAgICAgICAgICAgICAgc2Nyb2xsVG9Cb3R0b20oKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7fVxyXG4gICAgICB9O1xyXG4gICAgICB3cy5vbmNsb3NlID0gZXZlbnQgPT4ge1xyXG4gICAgICAgIHNldExpdmVDaGF0Q29ubmVjdGluZyhmYWxzZSk7XHJcbiAgICAgICAgc2V0TGl2ZUFnZW50VHlwaW5nKGZhbHNlKTtcclxuICAgICAgICBjbGVhckN1c3RvbWVyVHlwaW5nSWRsZVRpbWVyKCk7XHJcbiAgICAgICAgY3VzdG9tZXJUeXBpbmdTZW50VHJ1ZVJlZi5jdXJyZW50ID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKGV2ZW50LmNvZGUgPT09IDQwMDAgfHwgZXZlbnQuY29kZSA9PT0gNDAwMSkge1xyXG4gICAgICAgICAgc2V0Q2hhdEhpc3RvcnkocHJldiA9PiBbLi4ucHJldiwge1xyXG4gICAgICAgICAgICBpZDogYGxjLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyLCA3KX1gLFxyXG4gICAgICAgICAgICB0ZXh0OiBldmVudC5jb2RlID09PSA0MDAxID8gJ1RoaXMgY29tcGFueSBpcyBub3QgYXZhaWxhYmxlIGZvciBjaGF0LicgOiAnTGl2ZSBjaGF0IGlzIG5vdCBjb25maWd1cmVkLicsXHJcbiAgICAgICAgICAgIGlzVXNlcjogZmFsc2UsXHJcbiAgICAgICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXHJcbiAgICAgICAgICB9XSk7XHJcbiAgICAgICAgICBzY3JvbGxUb0JvdHRvbSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgICAgd3Mub25lcnJvciA9ICgpID0+IHtcclxuICAgICAgICBzZXRMaXZlQ2hhdENvbm5lY3RpbmcoZmFsc2UpO1xyXG4gICAgICB9O1xyXG4gICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgIHNldExpdmVDaGF0Q29ubmVjdGluZyhmYWxzZSk7XHJcbiAgICAgIHNldENoYXRIaXN0b3J5KHByZXYgPT4gWy4uLnByZXYsIHtcclxuICAgICAgICB0ZXh0OiAnQ291bGQgbm90IGNvbm5lY3QgdG8gbGl2ZSBjaGF0LiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyLicsXHJcbiAgICAgICAgaXNVc2VyOiBmYWxzZSxcclxuICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxyXG4gICAgICB9XSk7XHJcbiAgICAgIHNjcm9sbFRvQm90dG9tKCk7XHJcbiAgICB9XHJcbiAgfTtcclxuICBjb25zdCBoYW5kbGVTdGFydExpdmVDaGF0ID0gZSA9PiB7XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBjb25zdCBlbWFpbCA9IGxpdmVDaGF0RW1haWwudHJpbSgpO1xyXG4gICAgY29uc3QgZW1haWxSZWdleCA9IC9eW15cXHNAXStAW15cXHNAXStcXC5bXlxcc0BdKyQvO1xyXG4gICAgaWYgKCFlbWFpbCkge1xyXG4gICAgICBzZXRMaXZlQ2hhdEVtYWlsRXJyb3IoJ1BsZWFzZSBlbnRlciB5b3VyIGVtYWlsIGFkZHJlc3MuJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICghZW1haWxSZWdleC50ZXN0KGVtYWlsKSkge1xyXG4gICAgICBzZXRMaXZlQ2hhdEVtYWlsRXJyb3IoJ1BsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3MuJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHNldExpdmVDaGF0RW1haWxFcnJvcignJyk7XHJcbiAgICBzZXRMaXZlQ2hhdFJlcXVlc3RlZCh0cnVlKTtcclxuICAgIHNldFNob3dMaXZlQ2hhdEVtYWlsRm9ybShmYWxzZSk7XHJcbiAgICBzZXRMaXZlQ2hhdEVtYWlsKCcnKTtcclxuICAgIHNldENoYXRIaXN0b3J5KHByZXYgPT4gWy4uLnByZXYsIHtcclxuICAgICAgaWQ6IGBsYy0ke0RhdGUubm93KCl9LXVgLFxyXG4gICAgICB0ZXh0OiBgSSd2ZSByZXF1ZXN0ZWQgdG8gdGFsayBsaXZlIHdpdGggdGhlIHRlYW0uICgke2VtYWlsfSlgLFxyXG4gICAgICBpc1VzZXI6IHRydWUsXHJcbiAgICAgIHN0YXR1czogJ2RlbGl2ZXJlZCcsXHJcbiAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXHJcbiAgICB9XSk7XHJcbiAgICBzZXRDaGF0SGlzdG9yeShwcmV2ID0+IFsuLi5wcmV2LCB7XHJcbiAgICAgIGlkOiBgbGMtJHtEYXRlLm5vdygpfS1zeXNgLFxyXG4gICAgICB0ZXh0OiBcIkNvbm5lY3RpbmcgeW91IHRvIGxpdmUgY2hhdOKAplwiLFxyXG4gICAgICBpc1VzZXI6IGZhbHNlLFxyXG4gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxyXG4gICAgfV0pO1xyXG4gICAgc2Nyb2xsVG9Cb3R0b20oKTtcclxuICAgIGNvbnN0IGNvbXBhbnlOYW1lID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LndwYWlQbHVnaW5TZXR0aW5ncz8ucmVhbHRpbWVDb21wYW55TmFtZSB8fCB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUgfHwgJ2V4YW1wbGUuY29tJztcclxuICAgIGNvbnN0IGN1c3RvbWVySWQgPSB1c2VySWQ7XHJcbiAgICBjb25zdCBlbWFpbElkID0gJ21kLm1vYWpAa2xpem9zLmNvbSc7XHJcbiAgICBjb25uZWN0TGl2ZUNoYXRXcyhjb21wYW55TmFtZSwgY3VzdG9tZXJJZCwgZW1haWxJZCk7XHJcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmRpc3BhdGNoRXZlbnQpIHtcclxuICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCd3cGFpX2xpdmVfY2hhdF9yZXF1ZXN0ZWQnLCB7XHJcbiAgICAgICAgZGV0YWlsOiB7XHJcbiAgICAgICAgICBlbWFpbCxcclxuICAgICAgICAgIGN1c3RvbWVySWRcclxuICAgICAgICB9XHJcbiAgICAgIH0pKTtcclxuICAgIH1cclxuICB9O1xyXG4gIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICBjbGVhckN1c3RvbWVyVHlwaW5nSWRsZVRpbWVyKCk7XHJcbiAgICAgIGlmIChjdXN0b21lclR5cGluZ1NlbnRUcnVlUmVmLmN1cnJlbnQgJiYgd3NMaXZlQ2hhdFJlZi5jdXJyZW50Py5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTikge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICB3c0xpdmVDaGF0UmVmLmN1cnJlbnQuc2VuZChKU09OLnN0cmluZ2lmeSh7IHR5cGU6ICd0eXBpbmcnLCB0eXBpbmc6IGZhbHNlIH0pKTtcclxuICAgICAgICB9IGNhdGNoIChfKSB7fVxyXG4gICAgICB9XHJcbiAgICAgIGN1c3RvbWVyVHlwaW5nU2VudFRydWVSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICBpZiAod3NMaXZlQ2hhdFJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIHdzTGl2ZUNoYXRSZWYuY3VycmVudC5jbG9zZSgpO1xyXG4gICAgICAgIH0gY2F0Y2ggKF8pIHt9XHJcbiAgICAgICAgd3NMaXZlQ2hhdFJlZi5jdXJyZW50ID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9LCBbXSk7XHJcbiAgY29uc3QgaGFuZGxlU3VibWl0ID0gYXN5bmMgKGUsIHJldHJ5Q291bnQgPSAwLCBmb3JjZWRUZXh0ID0gbnVsbCwgcmV0cnlVc2VySWQgPSBudWxsKSA9PiB7XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBjb25zdCB0ZXh0VG9TZW5kID0gKGZvcmNlZFRleHQgIT0gbnVsbCA/IGZvcmNlZFRleHQgOiBpbnB1dCkudHJpbSgpO1xyXG4gICAgaWYgKCF0ZXh0VG9TZW5kKSByZXR1cm47XHJcblxyXG4gICAgLy8gTGl2ZSBjaGF0OiBzZW5kIHZpYSBXZWJTb2NrZXQgd2hlbiBhZ2VudCBoYXMgYWNjZXB0ZWRcclxuICAgIGlmIChsaXZlQ2hhdFJlcXVlc3RlZCAmJiBsaXZlQ2hhdEFjY2VwdGVkICYmIHdzTGl2ZUNoYXRSZWYuY3VycmVudD8ucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0Lk9QRU4pIHtcclxuICAgICAgZmx1c2hDdXN0b21lclR5cGluZ1N0b3BwZWQoKTtcclxuICAgICAgc2V0TGl2ZUFnZW50VHlwaW5nKGZhbHNlKTtcclxuICAgICAgc2V0Q2hhdEhpc3RvcnkocHJldiA9PiBbLi4ucHJldiwge1xyXG4gICAgICAgIGlkOiBgbGMtJHtEYXRlLm5vdygpfS11bWAsXHJcbiAgICAgICAgdGV4dDogdGV4dFRvU2VuZCxcclxuICAgICAgICBpc1VzZXI6IHRydWUsXHJcbiAgICAgICAgc3RhdHVzOiAnZGVsaXZlcmVkJyxcclxuICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxyXG4gICAgICB9XSk7XHJcbiAgICAgIHNldElucHV0KCcnKTtcclxuICAgICAgc2Nyb2xsVG9Cb3R0b20oKTtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICB3c0xpdmVDaGF0UmVmLmN1cnJlbnQuc2VuZChKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICB0eXBlOiAnbWVzc2FnZScsXHJcbiAgICAgICAgICBib2R5OiB0ZXh0VG9TZW5kXHJcbiAgICAgICAgfSkpO1xyXG4gICAgICB9IGNhdGNoIChlcnIpIHt9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVjayBpZiB3ZSBuZWVkIHRvIGNvbGxlY3QgdXNlciBpbmZvcm1hdGlvblxyXG4gICAgY29uc3QgaW5mb0NvbGxlY3Rpb25SZXNwb25zZSA9IGF3YWl0IGhhbmRsZVVzZXJJbmZvQ29sbGVjdGlvbih0ZXh0VG9TZW5kKTtcclxuICAgIGlmIChpbmZvQ29sbGVjdGlvblJlc3BvbnNlKSB7XHJcbiAgICAgIC8vIERvbid0IHNob3cgdGhlIHVzZXIncyBpbnB1dCBmb3Igc2Vuc2l0aXZlIGluZm9ybWF0aW9uXHJcbiAgICAgIGlmIChpc0NvbGxlY3RpbmdJbmZvKSB7XHJcbiAgICAgICAgc2V0SW5wdXQoJycpO1xyXG4gICAgICAgIHNldElzTG9hZGluZyh0cnVlKTtcclxuICAgICAgICBjb25zdCBzdGFtcCA9ICgpID0+IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcclxuICAgICAgICBjb25zdCB3aXRoSWQgPSBtc2cgPT4gKHtcclxuICAgICAgICAgIC4uLm1zZyxcclxuICAgICAgICAgIGlkOiBtc2cuaWQgfHwgYGluZm8tJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDcpfWAsXHJcbiAgICAgICAgICB0aW1lc3RhbXA6IG1zZy50aW1lc3RhbXAgfHwgc3RhbXAoKVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChpbmZvQ29sbGVjdGlvblJlc3BvbnNlLm11bHRpUmVzcG9uc2UpIHtcclxuICAgICAgICAgIGluZm9Db2xsZWN0aW9uUmVzcG9uc2UucmVzcG9uc2VzLmZvckVhY2gocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICBzZXRDaGF0SGlzdG9yeShwcmV2ID0+IFsuLi5wcmV2LCB3aXRoSWQocmVzcG9uc2UpXSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgc2V0Q2hhdEhpc3RvcnkocHJldiA9PiBbLi4ucHJldiwgd2l0aElkKGluZm9Db2xsZWN0aW9uUmVzcG9uc2UpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNldElzTG9hZGluZyhmYWxzZSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHVzZXJNc2dJZCA9IHJldHJ5VXNlcklkO1xyXG4gICAgaWYgKCF1c2VyTXNnSWQpIHtcclxuICAgICAgdXNlck1zZ0lkID0gYHUtJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDkpfWA7XHJcbiAgICAgIHNldENoYXRIaXN0b3J5KHByZXYgPT4gWy4uLnByZXYsIHtcclxuICAgICAgICBpZDogdXNlck1zZ0lkLFxyXG4gICAgICAgIHRleHQ6IHRleHRUb1NlbmQsXHJcbiAgICAgICAgaXNVc2VyOiB0cnVlLFxyXG4gICAgICAgIHN0YXR1czogJ3NlbmRpbmcnLFxyXG4gICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXHJcbiAgICAgIH1dKTtcclxuICAgICAgc2V0SW5wdXQoJycpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdXNlck1lc3NhZ2UgPSB7XHJcbiAgICAgIHRleHQ6IHRleHRUb1NlbmQsXHJcbiAgICAgIGlzVXNlcjogdHJ1ZSxcclxuICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcclxuICAgIH07XHJcbiAgICBzZXRJc0xvYWRpbmcodHJ1ZSk7XHJcbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xyXG4gICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiBjb250cm9sbGVyLmFib3J0KCksIFRJTUVPVVRfRFVSQVRJT04pO1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3Qgbm9uY2UgPSB3aW5kb3c/LndwQXBpU2V0dGluZ3M/Lm5vbmNlO1xyXG4gICAgICBpZiAoIW5vbmNlKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdXRoZW50aWNhdGlvbiBlcnJvci4gUGxlYXNlIHJlZnJlc2ggdGhlIHBhZ2UgYW5kIHRyeSBhZ2Fpbi4nKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gQ3JlYXRlIHRoZSBhdXRoZW50aWNhdGlvbiBwYXlsb2FkXHJcbiAgICAgIGNvbnN0IGF1dGhQYXlsb2FkID0ge1xyXG4gICAgICAgIHNlc3Npb25faWQ6IGdldFNlc3Npb25JRCgpLFxyXG4gICAgICAgIGp3dF90b2tlbjogY2hhdGJvdFVzZXJTZXR0aW5nPy50b2tlbiB8fCBudWxsLFxyXG4gICAgICAgIGxpY2Vuc2Vfa2V5OiBjaGF0Ym90VXNlclNldHRpbmc/LnVzZXI/LmxpY2Vuc2Vfa2V5IHx8ICc3NTI4MkJCRTJENTI2RDBEJyxcclxuICAgICAgICBkb21haW5OYW1lOiBjaGF0Ym90VXNlclNldHRpbmc/LnVzZXI/LmRvbWFpbl9uYW1lIHx8IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSB8fCAnZXhhbXBsZS5jb20nXHJcbiAgICAgIH07XHJcblxyXG4gICAgICAvLyBDcmVhdGUgdGhlIHJlcXVlc3QgZGF0YVxyXG4gICAgICBjb25zdCByZXF1ZXN0RGF0YSA9IHtcclxuICAgICAgICBtZXNzYWdlOiB1c2VyTWVzc2FnZS50ZXh0LFxyXG4gICAgICAgIGNvbnZlcnNhdGlvbl9pZDogbnVsbCxcclxuICAgICAgICBjb250ZXh0OiAnJ1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgLy8gRW5jcnlwdCBib3RoIHBheWxvYWRzXHJcbiAgICAgIGNvbnN0IGVuY3J5cHRlZEF1dGhEYXRhID0gRW5jcnlwdFBheWxvYWQoYXV0aFBheWxvYWQpO1xyXG4gICAgICBjb25zdCBlbmNyeXB0ZWRSZXF1ZXN0RGF0YSA9IEVuY3J5cHRQYXlsb2FkKHJlcXVlc3REYXRhKTtcclxuICAgICAgLy8gTWFrZSB0aGUgQVBJIHJlcXVlc3RcclxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHtBUElfVVJMfWNoYXRib3QvY2hhdGAsIHtcclxuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgICAgICAgJ1gtV1AtTm9uY2UnOiBub25jZSxcclxuICAgICAgICAgIC8vICdYLUVuY3J5cHRlZC1QYXlsb2FkJzogZW5jcnlwdGVkQXV0aERhdGEsXHJcbiAgICAgICAgICAnWC1FbmNyeXB0ZWQtUGF5bG9hZCc6IFwiZXlKcWQzUmZkRzlyWlc0aU9pSmxlVW93WlZoQmFVOXBTa3RXTVZGcFRFTkthR0pIWTJsUGFVcEpWWHBKTVU1cFNqa3VaWGxLY0dNelRXbFBhVXB2WkVoU2QwOXBPSFpOVkVrelRHcEJkVTFETkhoUGFtZDNUVVJCZGxsWVFuQk1NMWw0VEROV2VscFlTWFJpUnpsdVlWYzBhVXhEU25CWldGRnBUMnBGTTA1NlZUQlBSRkUwVFhwWmMwbHRWalJqUTBrMlRWUmpNMDVxWXpSTlJHZDZUbWwzYVdKdFNtMUphbTk0VG5wak1VNUVaekJQUkUweVRFTktjV1JIYTJsUGFVcHZVMjVTVFdOSWIzaFVNazV4VFVkR2RHRnJUakpKYVhkcFl6TldhVWxxYjJsT2FtZDRUMGRGZDA1VVozZE5iVVV4VFhwbk0wNVhVVFJOUkZFeVRWUlplVWxwZDJsalNFb3lTV3B2YVUxcVRtbGFSRlpxVDBSck1FOVhXVEpOUkVKb1drZEplazlYVlROTlJFWnFUa1JCZDA5RVkzbGFSMGt6V1ZSVk5VNTZXbTFPZVVvNUxucHlaVTF2TUdWcE1rRmhORlozY1ZWUmJpMHlka05RVTIxSVkxaFhMWGRaUlRWWmRXNU1ZMDVzTjNNaUxDSnNhV05sYm5ObFgydGxlU0k2SWpkRk5ETTNNakUxT1VNek5EWkNSRVVpTENKa2IyMWhhVzVPWVcxbElqb2laMjl2WjJ4bExtTnZiU0o5XCIsXHJcbiAgICAgICAgICAnZG9tYWluX25hbWUnOiBjaGF0Ym90VXNlclNldHRpbmc/LnVzZXI/LmRvbWFpbl9uYW1lIHx8IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSB8fCAnZXhhbXBsZS5jb20nXHJcbiAgICAgICAgfSxcclxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICBxdWVyeTogdXNlck1lc3NhZ2UudGV4dCxcclxuICAgICAgICAgIGVuY3J5cHRlZF9kYXRhOiBlbmNyeXB0ZWRSZXF1ZXN0RGF0YSxcclxuICAgICAgICAgIHNlc3Npb25faWQ6IGdldFNlc3Npb25JRCgpXHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbFxyXG4gICAgICB9KTtcclxuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XHJcbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNlcnZlciByZXNwb25kZWQgd2l0aCBzdGF0dXM6ICR7cmVzcG9uc2Uuc3RhdHVzfWApO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCByYXdSZXNwb25zZSA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcclxuICAgICAgbGV0IGRhdGE7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgLy8gUGFyc2UgdGhlIHJlc3BvbnNlIGFzIEpTT04gZmlyc3RcclxuICAgICAgICBjb25zdCBwYXJzZWRSZXNwb25zZSA9IEpTT04ucGFyc2UocmF3UmVzcG9uc2UpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHBhcnNlZFJlc3BvbnNlKTtcclxuXHJcbiAgICAgICAgLy8gQ2hlY2sgZm9yIHZhbGlkYXRpb24gZXJyb3JzXHJcbiAgICAgICAgaWYgKCFwYXJzZWRSZXNwb25zZS5zdWNjZXNzKSB7XHJcbiAgICAgICAgICBpZiAocGFyc2VkUmVzcG9uc2UuZXJyb3JzICYmIHBhcnNlZFJlc3BvbnNlLmVycm9ycy5tZXNzYWdlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVycm9yTXNnID0gQXJyYXkuaXNBcnJheShwYXJzZWRSZXNwb25zZS5lcnJvcnMubWVzc2FnZSkgPyBwYXJzZWRSZXNwb25zZS5lcnJvcnMubWVzc2FnZVswXSA6IHBhcnNlZFJlc3BvbnNlLmVycm9ycy5tZXNzYWdlO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNc2cpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHBhcnNlZFJlc3BvbnNlLm1lc3NhZ2UgfHwgJ1JlcXVlc3QgZmFpbGVkJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBUcnkgdG8gZGVjcnlwdCB0aGUgcmVzcG9uc2UgaWYgbmVlZGVkXHJcbiAgICAgICAgaWYgKHBhcnNlZFJlc3BvbnNlLmRhdGEgJiYgdHlwZW9mIHBhcnNlZFJlc3BvbnNlLmRhdGEgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBkZWNyeXB0ZWREYXRhID0gcGFyc2VkUmVzcG9uc2UuZGF0YTtcclxuICAgICAgICAgICAgZGF0YSA9IGRlY3J5cHRlZERhdGE7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZGF0YVwiLCBkYXRhKTtcclxuICAgICAgICAgIH0gY2F0Y2ggKGRlY3J5cHRFcnJvcikge1xyXG4gICAgICAgICAgICAvLyBJZiBkZWNyeXB0aW9uIGZhaWxzLCB0cnkgdG8gdXNlIHRoZSBwYXJzZWQgcmVzcG9uc2UgZGlyZWN0bHlcclxuICAgICAgICAgICAgZGF0YSA9IHBhcnNlZFJlc3BvbnNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBkYXRhID0gcGFyc2VkUmVzcG9uc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgYSB2YWxpZCByZXNwb25zZSBhZnRlciBkZWNyeXB0aW9uXHJcbiAgICAgICAgaWYgKCFkYXRhLnJlc3BvbnNlICYmICFkYXRhLm1hdGNoZXMgJiYgIXBhcnNlZFJlc3BvbnNlLnJlc3BvbnNlKSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcmVzcG9uc2UgZm9ybWF0IGZyb20gc2VydmVyJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBib3RSZXNwb25zZVRleHQgPSAnJztcclxuXHJcbiAgICAgICAgLy8gVHJ5IHRvIGdldCByZXNwb25zZSBmcm9tIGRlY3J5cHRlZCBkYXRhIGZpcnN0XHJcbiAgICAgICAgaWYgKGRhdGEucmVzcG9uc2UpIHtcclxuICAgICAgICAgIGJvdFJlc3BvbnNlVGV4dCA9IGRhdGEucmVzcG9uc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFRoZW4gdHJ5IHRvIGdldCBmcm9tIG1hdGNoZXMgaWYgYXZhaWxhYmxlXHJcbiAgICAgICAgZWxzZSBpZiAoZGF0YS5tYXRjaGVzICYmIGRhdGEubWF0Y2hlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBib3RSZXNwb25zZVRleHQgPSBcIkhlcmUncyB3aGF0IEkgZm91bmQ6XFxuXFxuXCI7XHJcbiAgICAgICAgICBkYXRhLm1hdGNoZXMuZm9yRWFjaChtYXRjaCA9PiB7XHJcbiAgICAgICAgICAgIGJvdFJlc3BvbnNlVGV4dCArPSBgUmVsZXZhbmNlOiAke21hdGNoLnJlbGV2YW5jZX1cXG4ke21hdGNoLnRleHR9XFxuXFxuYDtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiBub3QgaW4gZGVjcnlwdGVkIGRhdGEsIGNoZWNrIHRoZSBvcmlnaW5hbCBwYXJzZWQgcmVzcG9uc2VcclxuICAgICAgICBlbHNlIGlmIChwYXJzZWRSZXNwb25zZS5yZXNwb25zZSkge1xyXG4gICAgICAgICAgYm90UmVzcG9uc2VUZXh0ID0gcGFyc2VkUmVzcG9uc2UucmVzcG9uc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIERlZmF1bHQgZmFsbGJhY2sgbWVzc2FnZVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgYm90UmVzcG9uc2VUZXh0ID0gXCJJIGNvdWxkbid0IGZpbmQgc3BlY2lmaWMgaW5mb3JtYXRpb24gYWJvdXQgdGhhdC4gV291bGQgeW91IGxpa2UgdG8gdHJ5IHJlcGhyYXNpbmcgeW91ciBxdWVzdGlvbj9cIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgYm90SWQgPSBgYi0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiwgOSl9YDtcclxuICAgICAgICBjb25zdCBkZXJpdmVkU291cmNlcyA9IChkYXRhLm1hdGNoZXMgfHwgcGFyc2VkUmVzcG9uc2UubWF0Y2hlcyB8fCBbXSkubWFwKG0gPT4gKHtcclxuICAgICAgICAgIHNvdXJjZTogdHlwZW9mIG0udGV4dCA9PT0gJ3N0cmluZycgPyBtLnRleHQuc2xpY2UoMCwgMTIwKSA6ICdSZWZlcmVuY2UnLFxyXG4gICAgICAgICAgcmVsZXZhbmNlOiBtLnJlbGV2YW5jZVxyXG4gICAgICAgIH0pKTtcclxuICAgICAgICBjb25zdCBib3RNZXNzYWdlID0ge1xyXG4gICAgICAgICAgaWQ6IGJvdElkLFxyXG4gICAgICAgICAgdGV4dDogYm90UmVzcG9uc2VUZXh0LFxyXG4gICAgICAgICAgaXNVc2VyOiBmYWxzZSxcclxuICAgICAgICAgIGlzU3RyZWFtaW5nOiB0cnVlLFxyXG4gICAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXHJcbiAgICAgICAgICBtYXRjaGVzOiBkYXRhLm1hdGNoZXMgfHwgcGFyc2VkUmVzcG9uc2UubWF0Y2hlcyxcclxuICAgICAgICAgIGNvbnRlbnQ6IGRhdGEuY29udGVudCB8fCBwYXJzZWRSZXNwb25zZS5jb250ZW50LFxyXG4gICAgICAgICAgY29udmVyc2F0aW9uX2lkOiBkYXRhLmNvbnZlcnNhdGlvbl9pZCB8fCBwYXJzZWRSZXNwb25zZS5jb252ZXJzYXRpb25faWQsXHJcbiAgICAgICAgICBzb3VyY2VzOiBkYXRhLnNvdXJjZXMgfHwgcGFyc2VkUmVzcG9uc2Uuc291cmNlcyB8fCAoZGVyaXZlZFNvdXJjZXMubGVuZ3RoID8gZGVyaXZlZFNvdXJjZXMgOiB1bmRlZmluZWQpXHJcbiAgICAgICAgfTtcclxuICAgICAgICBzZXRDaGF0SGlzdG9yeShwcmV2ID0+IHByZXYubWFwKG0gPT4gbS5pZCA9PT0gdXNlck1zZ0lkID8geyAuLi5tLCBzdGF0dXM6ICdkZWxpdmVyZWQnIH0gOiBtKSk7XHJcbiAgICAgICAgc2V0Q2hhdEhpc3RvcnkocHJldiA9PiBbLi4ucHJldiwgYm90TWVzc2FnZV0pO1xyXG4gICAgICAgIHNldFJlc3BvbnNlQ291bnQocHJldiA9PiBwcmV2ICsgMSk7XHJcblxyXG4gICAgICAgIC8vIFNob3cgbmFtZSBmaWVsZCBhZnRlciAyIHJlc3BvbnNlcyAod2hlbiByZXNwb25zZUNvdW50IGlzIDEpXHJcbiAgICAgICAgaWYgKHJlc3BvbnNlQ291bnQgPT09IDEgJiYgIXNob3dVc2VyRm9ybSkge1xyXG4gICAgICAgICAgc2V0U2hvd1VzZXJGb3JtKHRydWUpO1xyXG4gICAgICAgICAgc2V0Rm9ybVN0ZXAoMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFNob3cgcGhvbmUgZmllbGQgYWZ0ZXIgNCByZXNwb25zZXMgKHdoZW4gcmVzcG9uc2VDb3VudCBpcyA1KVxyXG4gICAgICAgIGVsc2UgaWYgKHJlc3BvbnNlQ291bnQgPT09IDUgJiYgIXNob3dVc2VyRm9ybSAmJiB1c2VyRm9ybURhdGEubmFtZSkge1xyXG4gICAgICAgICAgc2V0U2hvd1VzZXJGb3JtKHRydWUpO1xyXG4gICAgICAgICAgc2V0Rm9ybVN0ZXAoMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFNob3cgZW1haWwgZmllbGQgYWZ0ZXIgNiByZXNwb25zZXMgKHdoZW4gcmVzcG9uc2VDb3VudCBpcyA3KVxyXG4gICAgICAgIGVsc2UgaWYgKHJlc3BvbnNlQ291bnQgPT09IDcgJiYgIXNob3dVc2VyRm9ybSAmJiB1c2VyRm9ybURhdGEucGhvbmUpIHtcclxuICAgICAgICAgIHNldFNob3dVc2VyRm9ybSh0cnVlKTtcclxuICAgICAgICAgIHNldEZvcm1TdGVwKDIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICBzZXRDaGF0SGlzdG9yeShwcmV2ID0+IHByZXYubWFwKG0gPT4gbS5pZCA9PT0gdXNlck1zZ0lkID8geyAuLi5tLCBzdGF0dXM6ICdlcnJvcicgfSA6IG0pKTtcclxuICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSB7XHJcbiAgICAgICAgICBpZDogYGItZXJyLSR7RGF0ZS5ub3coKX1gLFxyXG4gICAgICAgICAgdGV4dDogZXJyb3IubWVzc2FnZSB8fCBcIkknbSBzb3JyeSwgSSBjb3VsZG4ndCBwcm9jZXNzIHlvdXIgcmVxdWVzdC5cIixcclxuICAgICAgICAgIGlzVXNlcjogZmFsc2UsXHJcbiAgICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgc2V0Q2hhdEhpc3RvcnkocHJldiA9PiBbLi4ucHJldiwgZXJyb3JNZXNzYWdlXSk7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIHNldENoYXRIaXN0b3J5KHByZXYgPT4gcHJldi5tYXAobSA9PiBtLmlkID09PSB1c2VyTXNnSWQgPyB7IC4uLm0sIHN0YXR1czogJ2Vycm9yJyB9IDogbSkpO1xyXG4gICAgICAvLyBIYW5kbGUgYWJvcnRlZCByZXF1ZXN0c1xyXG4gICAgICBpZiAoZXJyb3IubmFtZSA9PT0gJ0Fib3J0RXJyb3InKSB7XHJcbiAgICAgICAgY29uc3QgdGltZW91dE1lc3NhZ2UgPSB7XHJcbiAgICAgICAgICBpZDogYGItZXJyLSR7RGF0ZS5ub3coKX1gLFxyXG4gICAgICAgICAgdGV4dDogXCJUaGUgcmVxdWVzdCB0b29rIHRvbyBsb25nIHRvIGNvbXBsZXRlLiBQbGVhc2UgdHJ5IGFnYWluLlwiLFxyXG4gICAgICAgICAgaXNVc2VyOiBmYWxzZSxcclxuICAgICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXHJcbiAgICAgICAgfTtcclxuICAgICAgICBzZXRDaGF0SGlzdG9yeShwcmV2ID0+IFsuLi5wcmV2LCB0aW1lb3V0TWVzc2FnZV0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IHtcclxuICAgICAgICAgIGlkOiBgYi1lcnItJHtEYXRlLm5vdygpfWAsXHJcbiAgICAgICAgICB0ZXh0OiBlcnJvci5tZXNzYWdlIHx8IFwiSSBjb3VsZG4ndCBmaW5kIHJlbGV2YW50IGluZm9ybWF0aW9uLiBQbGVhc2UgdHJ5IHJlcGhyYXNpbmcgeW91ciBxdWVzdGlvbi5cIixcclxuICAgICAgICAgIGlzVXNlcjogZmFsc2UsXHJcbiAgICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgc2V0Q2hhdEhpc3RvcnkocHJldiA9PiBbLi4ucHJldiwgZXJyb3JNZXNzYWdlXSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIElmIHdlIGhhdmVuJ3QgZXhjZWVkZWQgbWF4IHJldHJpZXMgYW5kIGl0J3MgYSBuZXR3b3JrIGVycm9yLCByZXRyeVxyXG4gICAgICBpZiAocmV0cnlDb3VudCA8IE1BWF9SRVRSSUVTICYmIChlcnJvci5tZXNzYWdlLmluY2x1ZGVzKCduZXR3b3JrJykgfHwgZXJyb3IubWVzc2FnZS5pbmNsdWRlcygnZmFpbGVkIHRvIGZldGNoJykpKSB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCByZXRyeU1lc3NhZ2UgPSB7XHJcbiAgICAgICAgICAgIGlkOiBgYi1zeXMtJHtEYXRlLm5vdygpfWAsXHJcbiAgICAgICAgICAgIHRleHQ6IFwiUmVjb25uZWN0aW5nLi4uIFBsZWFzZSB3YWl0LlwiLFxyXG4gICAgICAgICAgICBpc1VzZXI6IGZhbHNlLFxyXG4gICAgICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHNldENoYXRIaXN0b3J5KHByZXYgPT4gWy4uLnByZXYsIHJldHJ5TWVzc2FnZV0pO1xyXG4gICAgICAgICAgaGFuZGxlU3VibWl0KGUsIHJldHJ5Q291bnQgKyAxLCB0ZXh0VG9TZW5kLCB1c2VyTXNnSWQpO1xyXG4gICAgICAgIH0sIDIwMDAgKiAocmV0cnlDb3VudCArIDEpKTsgLy8gRXhwb25lbnRpYWwgYmFja29mZlxyXG4gICAgICB9XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGNvbnN0IGhhbmRsZVJldHJ5ID0gbXNnID0+IHtcclxuICAgIHNldENoYXRIaXN0b3J5KHByZXYgPT4gcHJldi5tYXAobSA9PiBtLmlkID09PSBtc2cuaWQgPyB7IC4uLm0sIHN0YXR1czogJ3NlbmRpbmcnIH0gOiBtKSk7XHJcbiAgICBoYW5kbGVTdWJtaXQoeyBwcmV2ZW50RGVmYXVsdCgpIHt9IH0sIDAsIG1zZy50ZXh0LCBtc2cuaWQpO1xyXG4gIH07XHJcbiAgY29uc3QgaGFuZGxlS2V5UHJlc3MgPSBlID0+IHtcclxuICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJyAmJiAhZS5zaGlmdEtleSkge1xyXG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIGlmIChpbnB1dC50cmltKCkpIHtcclxuICAgICAgICBoYW5kbGVTdWJtaXQoZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG4gIGNvbnN0IHN0b3JlRm9ybURhdGEgPSBhc3luYyAoZmllbGRUeXBlLCBmaWVsZFZhbHVlKSA9PiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBub25jZSA9IHdpbmRvdz8ud3BBcGlTZXR0aW5ncz8ubm9uY2U7XHJcbiAgICAgIGlmICghbm9uY2UpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgICB1c2VyX2lkOiB1c2VySWQsXHJcbiAgICAgICAgbmFtZTogZmllbGRUeXBlID09PSAnbmFtZScgPyBmaWVsZFZhbHVlIDogdXNlckZvcm1EYXRhLm5hbWUsXHJcbiAgICAgICAgZW1haWw6IGZpZWxkVHlwZSA9PT0gJ2VtYWlsJyA/IGZpZWxkVmFsdWUgOiB1c2VyRm9ybURhdGEuZW1haWwsXHJcbiAgICAgICAgcGhvbmU6IGZpZWxkVHlwZSA9PT0gJ3Bob25lJyA/IGZpZWxkVmFsdWUgOiB1c2VyRm9ybURhdGEucGhvbmUsXHJcbiAgICAgICAgc2Vzc2lvbl9pZDogZ2V0U2Vzc2lvbklEKCksXHJcbiAgICAgICAgand0X3Rva2VuOiBjaGF0Ym90VXNlclNldHRpbmc/LnRva2VuIHx8IG51bGwsXHJcbiAgICAgICAgbGljZW5zZV9rZXk6IGNoYXRib3RVc2VyU2V0dGluZz8udXNlcj8ubGljZW5zZV9rZXkgfHwgJzc1MjgyQkJFMkQ1MjZEMEQnLFxyXG4gICAgICAgIGRvbWFpbk5hbWU6IGNoYXRib3RVc2VyU2V0dGluZz8udXNlcj8uZG9tYWluX25hbWUgfHwgd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lIHx8ICdleGFtcGxlLmNvbSdcclxuICAgICAgfTtcclxuXHJcbiAgICAgIC8vIEVuY3J5cHQgdGhlIHBheWxvYWRcclxuICAgICAgY29uc3QgZW5jcnlwdGVkUGF5bG9hZCA9IEVuY3J5cHRQYXlsb2FkKHBheWxvYWQpO1xyXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke0FQSV9VUkx9bGVhZC9sZWFkcy1zdG9yZWAsIHtcclxuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgICAgICAgJ1gtV1AtTm9uY2UnOiBub25jZSxcclxuICAgICAgICAgICdYLUVuY3J5cHRlZC1QYXlsb2FkJzogZW5jcnlwdGVkUGF5bG9hZCxcclxuICAgICAgICAgICdkb21haW5fbmFtZSc6IGNoYXRib3RVc2VyU2V0dGluZz8udXNlcj8uZG9tYWluX25hbWUgfHwgd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lIHx8ICdleGFtcGxlLmNvbSdcclxuICAgICAgICB9LFxyXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgIGZpZWxkX3R5cGU6IGZpZWxkVHlwZSxcclxuICAgICAgICAgIGZpZWxkX3ZhbHVlOiBmaWVsZFZhbHVlLFxyXG4gICAgICAgICAgZW5jcnlwdGVkX2RhdGE6IGVuY3J5cHRlZFBheWxvYWRcclxuICAgICAgICB9KVxyXG4gICAgICB9KTtcclxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcclxuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICAvLyBVcGRhdGUgdGhlIGhhbmRsZVVzZXJJbmZvQ29sbGVjdGlvbiBmdW5jdGlvblxyXG4gIGNvbnN0IGhhbmRsZVVzZXJJbmZvQ29sbGVjdGlvbiA9IGFzeW5jIG1lc3NhZ2UgPT4ge1xyXG4gICAgaWYgKCFpc0NvbGxlY3RpbmdJbmZvKSB7XHJcbiAgICAgIC8vIE9ubHkgdHJpZ2dlciBpbmZvIGNvbGxlY3Rpb24gaWYgbm90IGF0dGVtcHRlZCBiZWZvcmUgYW5kIGFmdGVyIDMgbWVzc2FnZXNcclxuICAgICAgLy8gb3IgaWYgdXNlciBzaG93cyBoaWdoIGludGVudFxyXG4gICAgICBjb25zdCBsb3dlck1lc3NhZ2UgPSBtZXNzYWdlLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIGNvbnN0IGhpZ2hJbnRlbnRUcmlnZ2VycyA9IFsnYnV5JywgJ3B1cmNoYXNlJywgJ3ByaWNlJywgJ2Nvc3QnLCAnaW50ZXJlc3RlZCcsICdjb250YWN0JywgJ2hlbHAnLCAnc3VwcG9ydCddO1xyXG4gICAgICBjb25zdCBzaG91bGRDb2xsZWN0SW5mbyA9ICFpbmZvQ29sbGVjdGlvbkF0dGVtcHRlZCAmJiAocmVzcG9uc2VDb3VudCA+PSAzIHx8IGhpZ2hJbnRlbnRUcmlnZ2Vycy5zb21lKHdvcmQgPT4gbG93ZXJNZXNzYWdlLmluY2x1ZGVzKHdvcmQpKSk7XHJcbiAgICAgIGlmIChzaG91bGRDb2xsZWN0SW5mbyAmJiAhdXNlckluZm8uZW1haWwpIHtcclxuICAgICAgICBzZXRJc0NvbGxlY3RpbmdJbmZvKHRydWUpO1xyXG4gICAgICAgIHNldEN1cnJlbnRRdWVzdGlvbignZW1haWwnKTtcclxuICAgICAgICBzZXRJbmZvQ29sbGVjdGlvbkF0dGVtcHRlZCh0cnVlKTtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgdGV4dDogXCJUbyBwcm92aWRlIHlvdSB3aXRoIGJldHRlciBhc3Npc3RhbmNlLCBjb3VsZCB5b3UgcGxlYXNlIHNoYXJlIHlvdXIgZW1haWwgYWRkcmVzcz9cIixcclxuICAgICAgICAgIGlzVXNlcjogZmFsc2UsXHJcbiAgICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSGFuZGxlIHVzZXIncyByZXNwb25zZSBiYXNlZCBvbiBjdXJyZW50IHF1ZXN0aW9uXHJcbiAgICBzd2l0Y2ggKGN1cnJlbnRRdWVzdGlvbikge1xyXG4gICAgICBjYXNlICdlbWFpbCc6XHJcbiAgICAgICAge1xyXG4gICAgICAgICAgY29uc3QgZW1haWwgPSBtZXNzYWdlLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgY29uc3QgZW1haWxSZWdleCA9IC9eW15cXHNAXStAW15cXHNAXStcXC5bXlxcc0BdKyQvO1xyXG4gICAgICAgICAgaWYgKCFlbWFpbFJlZ2V4LnRlc3QoZW1haWwpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgdGV4dDogXCJQbGVhc2UgcHJvdmlkZSBhIHZhbGlkIGVtYWlsIGFkZHJlc3MgKGV4YW1wbGU6IG5hbWVAZG9tYWluLmNvbSlcIixcclxuICAgICAgICAgICAgICBpc1VzZXI6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBzZXRVc2VySW5mbyhwcmV2ID0+ICh7XHJcbiAgICAgICAgICAgIC4uLnByZXYsXHJcbiAgICAgICAgICAgIGVtYWlsXHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICBzZXRDdXJyZW50UXVlc3Rpb24oJ25hbWUnKTtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHRleHQ6IFwiVGhhbmtzISBDb3VsZCB5b3UgcGxlYXNlIHRlbGwgbWUgeW91ciBuYW1lP1wiLFxyXG4gICAgICAgICAgICBpc1VzZXI6IGZhbHNlLFxyXG4gICAgICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgIGNhc2UgJ25hbWUnOlxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGNvbnN0IG5hbWUgPSBtZXNzYWdlLnRyaW0oKTtcclxuICAgICAgICAgIGlmIChuYW1lLmxlbmd0aCA8IDIgfHwgL1xcZC8udGVzdChuYW1lKSkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgIHRleHQ6IFwiUGxlYXNlIHByb3ZpZGUgYSB2YWxpZCBuYW1lIHdpdGhvdXQgbnVtYmVycy5cIixcclxuICAgICAgICAgICAgICBpc1VzZXI6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBzZXRVc2VySW5mbyhwcmV2ID0+ICh7XHJcbiAgICAgICAgICAgIC4uLnByZXYsXHJcbiAgICAgICAgICAgIG5hbWVcclxuICAgICAgICAgIH0pKTtcclxuICAgICAgICAgIHNldEN1cnJlbnRRdWVzdGlvbigncGhvbmUnKTtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgYXV0aGVudGljYXRpb24gcGF5bG9hZFxyXG4gICAgICAgICAgICBjb25zdCBhdXRoUGF5bG9hZCA9IHtcclxuICAgICAgICAgICAgICBzZXNzaW9uX2lkOiBnZXRTZXNzaW9uSUQoKSxcclxuICAgICAgICAgICAgICBqd3RfdG9rZW46IGNoYXRib3RVc2VyU2V0dGluZz8udG9rZW4gfHwgbnVsbCxcclxuICAgICAgICAgICAgICBsaWNlbnNlX2tleTogY2hhdGJvdFVzZXJTZXR0aW5nPy51c2VyPy5saWNlbnNlX2tleSB8fCAnNzUyODJCQkUyRDUyNkQwRCcsXHJcbiAgICAgICAgICAgICAgZG9tYWluTmFtZTogY2hhdGJvdFVzZXJTZXR0aW5nPy51c2VyPy5kb21haW5fbmFtZSB8fCB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUgfHwgJ2V4YW1wbGUuY29tJ1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgLy8gU2VuZCB0byBjaGF0IEFQSVxyXG4gICAgICAgICAgICBjb25zdCBjaGF0UmVxdWVzdERhdGEgPSB7XHJcbiAgICAgICAgICAgICAgbWVzc2FnZTogYFVzZXIgaGFzIGVudGVyZWQgdGhlaXIgbmFtZTogJHtuYW1lfS4gUGxlYXNlIHByb3ZpZGUgYSBmcmllbmRseSBncmVldGluZy5gLFxyXG4gICAgICAgICAgICAgIGNvbnZlcnNhdGlvbl9pZDogbnVsbCxcclxuICAgICAgICAgICAgICBjb250ZXh0OiAnJyxcclxuICAgICAgICAgICAgICBmaWVsZF90eXBlOiAnbmFtZScsXHJcbiAgICAgICAgICAgICAgZmllbGRfdmFsdWU6IG5hbWVcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgY29uc3QgZW5jcnlwdGVkQ2hhdERhdGEgPSBFbmNyeXB0UGF5bG9hZChjaGF0UmVxdWVzdERhdGEpO1xyXG4gICAgICAgICAgICBjb25zdCBlbmNyeXB0ZWRBdXRoRGF0YSA9IEVuY3J5cHRQYXlsb2FkKGF1dGhQYXlsb2FkKTtcclxuICAgICAgICAgICAgY29uc3QgY2hhdFJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7QVBJX1VSTH1jaGF0Ym90L2NoYXRgLCB7XHJcbiAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAgICAgICAgICAgICAgICdYLVdQLU5vbmNlJzogd2luZG93Py53cEFwaVNldHRpbmdzPy5ub25jZSxcclxuICAgICAgICAgICAgICAgICdYLUVuY3J5cHRlZC1QYXlsb2FkJzogZW5jcnlwdGVkQXV0aERhdGEsXHJcbiAgICAgICAgICAgICAgICAnZG9tYWluX25hbWUnOiBjaGF0Ym90VXNlclNldHRpbmc/LnVzZXI/LmRvbWFpbl9uYW1lIHx8IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSB8fCAnZXhhbXBsZS5jb20nXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgICAgICBxdWVyeTogY2hhdFJlcXVlc3REYXRhLm1lc3NhZ2UsXHJcbiAgICAgICAgICAgICAgICBlbmNyeXB0ZWRfZGF0YTogZW5jcnlwdGVkQ2hhdERhdGEsXHJcbiAgICAgICAgICAgICAgICBzZXNzaW9uX2lkOiBnZXRTZXNzaW9uSUQoKSxcclxuICAgICAgICAgICAgICAgIGZpZWxkX3R5cGU6ICduYW1lJyxcclxuICAgICAgICAgICAgICAgIGZpZWxkX3ZhbHVlOiBuYW1lXHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmICghY2hhdFJlc3BvbnNlLm9rKSB7XHJcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDaGF0IEFQSSByZXNwb25kZWQgd2l0aCBzdGF0dXM6ICR7Y2hhdFJlc3BvbnNlLnN0YXR1c31gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgcmF3UmVzcG9uc2UgPSBhd2FpdCBjaGF0UmVzcG9uc2UudGV4dCgpO1xyXG4gICAgICAgICAgICBsZXQgZGF0YTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICBjb25zdCBwYXJzZWRSZXNwb25zZSA9IEpTT04ucGFyc2UocmF3UmVzcG9uc2UpO1xyXG4gICAgICAgICAgICAgIGlmICghcGFyc2VkUmVzcG9uc2Uuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHBhcnNlZFJlc3BvbnNlLm1lc3NhZ2UgfHwgJ1JlcXVlc3QgZmFpbGVkJyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChwYXJzZWRSZXNwb25zZS5kYXRhICYmIHR5cGVvZiBwYXJzZWRSZXNwb25zZS5kYXRhID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgZGF0YSA9IERlY3J5cHRQYXlsb2FkKHBhcnNlZFJlc3BvbnNlLmRhdGEpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkYXRhID0gcGFyc2VkUmVzcG9uc2U7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAvLyBSZXR1cm4gYm90aCB0aGUgQUkgcmVzcG9uc2UgYW5kIHRoZSBuZXh0IHF1ZXN0aW9uXHJcbiAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIG11bHRpUmVzcG9uc2U6IHRydWUsXHJcbiAgICAgICAgICAgICAgICByZXNwb25zZXM6IFt7XHJcbiAgICAgICAgICAgICAgICAgIHRleHQ6IGRhdGEucmVzcG9uc2UgfHwgcGFyc2VkUmVzcG9uc2UucmVzcG9uc2UgfHwgYE5pY2UgdG8gbWVldCB5b3UsICR7bmFtZX0hYCxcclxuICAgICAgICAgICAgICAgICAgaXNVc2VyOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcclxuICAgICAgICAgICAgICAgIH0sIHtcclxuICAgICAgICAgICAgICAgICAgdGV4dDogXCJXaGF0J3MgeW91ciBjb250YWN0IG51bWJlcj9cIixcclxuICAgICAgICAgICAgICAgICAgaXNVc2VyOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcclxuICAgICAgICAgICAgICAgIH1dXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAvLyBJZiB0aGVyZSdzIGFuIGVycm9yLCBjb250aW51ZSB3aXRoIGRlZmF1bHQgcmVzcG9uc2VcclxuICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgbXVsdGlSZXNwb25zZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHJlc3BvbnNlczogW3tcclxuICAgICAgICAgICAgICAgICAgdGV4dDogYE5pY2UgdG8gbWVldCB5b3UsICR7bmFtZX0hYCxcclxuICAgICAgICAgICAgICAgICAgaXNVc2VyOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcclxuICAgICAgICAgICAgICAgIH0sIHtcclxuICAgICAgICAgICAgICAgICAgdGV4dDogXCJXaGF0J3MgeW91ciBjb250YWN0IG51bWJlcj9cIixcclxuICAgICAgICAgICAgICAgICAgaXNVc2VyOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcclxuICAgICAgICAgICAgICAgIH1dXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgLy8gSWYgdGhlcmUncyBhbiBlcnJvciwgY29udGludWUgd2l0aCB0aGUgcGhvbmUgbnVtYmVyIHF1ZXN0aW9uXHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgdGV4dDogXCJXaGF0J3MgeW91ciBjb250YWN0IG51bWJlcj9cIixcclxuICAgICAgICAgICAgICBpc1VzZXI6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICBjYXNlICdwaG9uZSc6XHJcbiAgICAgICAge1xyXG4gICAgICAgICAgY29uc3QgcGhvbmUgPSBtZXNzYWdlLnJlcGxhY2UoL1xccysvZywgJycpLnJlcGxhY2UoL1soKS1dL2csICcnKTtcclxuICAgICAgICAgIGNvbnN0IHBob25lUmVnZXggPSAvXlxcKz9bXFxkLV17MTAsfSQvO1xyXG4gICAgICAgICAgaWYgKCFwaG9uZVJlZ2V4LnRlc3QocGhvbmUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgdGV4dDogXCJQbGVhc2UgcHJvdmlkZSBhIHZhbGlkIHBob25lIG51bWJlciAoYXQgbGVhc3QgMTAgZGlnaXRzKS5cIixcclxuICAgICAgICAgICAgICBpc1VzZXI6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBzZXRVc2VySW5mbyhwcmV2ID0+ICh7XHJcbiAgICAgICAgICAgIC4uLnByZXYsXHJcbiAgICAgICAgICAgIHBob25lXHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICBzZXRDdXJyZW50UXVlc3Rpb24obnVsbCk7XHJcbiAgICAgICAgICBzZXRJc0NvbGxlY3RpbmdJbmZvKGZhbHNlKTtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8vIFN0b3JlIHRoZSBwaG9uZSBudW1iZXJcclxuICAgICAgICAgICAgY29uc3QgYXV0aFBheWxvYWQgPSB7XHJcbiAgICAgICAgICAgICAgc2Vzc2lvbl9pZDogZ2V0U2Vzc2lvbklEKCksXHJcbiAgICAgICAgICAgICAgand0X3Rva2VuOiBjaGF0Ym90VXNlclNldHRpbmc/LnRva2VuIHx8IG51bGwsXHJcbiAgICAgICAgICAgICAgbGljZW5zZV9rZXk6IGNoYXRib3RVc2VyU2V0dGluZz8udXNlcj8ubGljZW5zZV9rZXkgfHwgJzc1MjgyQkJFMkQ1MjZEMEQnLFxyXG4gICAgICAgICAgICAgIGRvbWFpbk5hbWU6IGNoYXRib3RVc2VyU2V0dGluZz8udXNlcj8uZG9tYWluX25hbWUgfHwgd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lIHx8ICdleGFtcGxlLmNvbSdcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgY29uc3QgZW5jcnlwdGVkUGF5bG9hZCA9IEVuY3J5cHRQYXlsb2FkKGF1dGhQYXlsb2FkKTtcclxuICAgICAgICAgICAgYXdhaXQgZmV0Y2goYCR7QVBJX1VSTH1sZWFkL2xlYWRzLXN0b3JlYCwge1xyXG4gICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAgICAgICAgICAgICAnWC1XUC1Ob25jZSc6IHdpbmRvdz8ud3BBcGlTZXR0aW5ncz8ubm9uY2UsXHJcbiAgICAgICAgICAgICAgICAnWC1FbmNyeXB0ZWQtUGF5bG9hZCc6IGVuY3J5cHRlZFBheWxvYWQsXHJcbiAgICAgICAgICAgICAgICAnZG9tYWluX25hbWUnOiBjaGF0Ym90VXNlclNldHRpbmc/LnVzZXI/LmRvbWFpbl9uYW1lIHx8IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSB8fCAnZXhhbXBsZS5jb20nXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgICAgICBmaWVsZF90eXBlOiAncGhvbmUnLFxyXG4gICAgICAgICAgICAgICAgZmllbGRfdmFsdWU6IHBob25lLFxyXG4gICAgICAgICAgICAgICAgZW5jcnlwdGVkX2RhdGE6IGVuY3J5cHRlZFBheWxvYWRcclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdGV4dDogXCJUaGFuayB5b3UgZm9yIHByb3ZpZGluZyB5b3VyIGNvbnRhY3QgaW5mb3JtYXRpb24hIEhvdyBjYW4gSSBhc3Npc3QgeW91IHRvZGF5P1wiLFxyXG4gICAgICAgICAgICBpc1VzZXI6IGZhbHNlLFxyXG4gICAgICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfTtcclxuICBpZiAoIWlzVmlzaWJsZSkge1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG4gIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cIndwYWlfY2hhdGJvdFdyYXBwZXJcIj5cclxuICAgICAgICAgICAgeyFpc09wZW4gJiYgPENoYXRUb2dnbGUgb25DbGljaz17KCkgPT4gc2V0SXNPcGVuKHRydWUpfSBiZ2NvbG9yPXtjaGF0Ym90U3R5bGVzLnByaW1hcnlDb2xvcn0gY2xhc3NOYW1lPVwid3BhaV9jaGF0VG9nZ2xlQnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPENoYXRCdWJibGVPdXRsaW5lSWNvbiAvPlxyXG4gICAgICAgICAgICAgICAgPC9DaGF0VG9nZ2xlPn1cclxuXHJcbiAgICAgICAgICAgIHtpc09wZW4gJiYgPENoYXRXaW5kb3cgZWxldmF0aW9uPXswfSBiZ2NvbG9yPXtjaGF0Ym90U3R5bGVzLnByaW1hcnlDb2xvcn0gY2xhc3NOYW1lPVwid3BhaV9jaGF0V2luZG93T3BlblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxDaGF0SGVhZGVyIHRleHRjb2xvcj17Y2hhdGJvdFN0eWxlcy5zZWNvbmRhcnlDb2xvcn0gYmdjb2xvcj17Y2hhdGJvdFN0eWxlcy5wcmltYXJ5Q29sb3J9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Qm94IHN4PXt7XHJcbiAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcclxuICAgICAgICAgIGdhcDogMS41XHJcbiAgICAgICAgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QmFkZ2Ugb3ZlcmxhcD1cImNpcmN1bGFyXCIgYW5jaG9yT3JpZ2luPXt7XHJcbiAgICAgICAgICAgIHZlcnRpY2FsOiAnYm90dG9tJyxcclxuICAgICAgICAgICAgaG9yaXpvbnRhbDogJ3JpZ2h0J1xyXG4gICAgICAgICAgfX0gdmFyaWFudD1cImRvdFwiIHN4PXt7XHJcbiAgICAgICAgICAgICcmIC5NdWlCYWRnZS1iYWRnZSc6IHtcclxuICAgICAgICAgICAgICB3aWR0aDogOCxcclxuICAgICAgICAgICAgICBoZWlnaHQ6IDgsXHJcbiAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNTAlJyxcclxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGlzTG9hZGluZyA/ICcjZmJiZjI0JyA6ICcjMjJjNTVlJyxcclxuICAgICAgICAgICAgICBib3JkZXI6ICcycHggc29saWQnLFxyXG4gICAgICAgICAgICAgIGJvcmRlckNvbG9yOiBjaGF0Ym90U3R5bGVzLnByaW1hcnlDb2xvciB8fCB0aGVtZS5wYWxldHRlLnByaW1hcnkubWFpbixcclxuICAgICAgICAgICAgICAnJjo6YWZ0ZXInOiB7XHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcclxuICAgICAgICAgICAgICAgIHRvcDogMCxcclxuICAgICAgICAgICAgICAgIGxlZnQ6IDAsXHJcbiAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJScsXHJcbiAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc1MCUnLFxyXG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uOiAncmlwcGxlIDEuMnMgaW5maW5pdGUgZWFzZS1pbi1vdXQnLFxyXG4gICAgICAgICAgICAgICAgYm9yZGVyOiAnMXB4IHNvbGlkIGN1cnJlbnRDb2xvcicsXHJcbiAgICAgICAgICAgICAgICBjb250ZW50OiAnXCJcIidcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBdmF0YXIgc3g9e3tcclxuICAgICAgICAgICAgICBiZ2NvbG9yOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpJyxcclxuICAgICAgICAgICAgICBiYWNrZHJvcEZpbHRlcjogJ2JsdXIoOHB4KSdcclxuICAgICAgICAgICAgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRCb3RJY29uKGNoYXRib3RTdHlsZXMuYm90SWNvbiwgY2hhdGJvdFN0eWxlcy5jdXN0b21Cb3RJY29uKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0F2YXRhcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQmFkZ2U+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5IHZhcmlhbnQ9XCJzdWJ0aXRsZTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NoYXRib3RTdHlsZXMuaGVhZGVyVGV4dH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgdmFyaWFudD1cImNhcHRpb25cIiBjb21wb25lbnQ9XCJkaXZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2lzTG9hZGluZyA/ICdQcm9jZXNzaW5nLi4uJyA6ICdPbmxpbmUnfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0JveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPEJveCBzeD17e1xyXG4gICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxyXG4gICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcidcclxuICAgICAgICB9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uQnV0dG9uIHNpemU9XCJzbWFsbFwiIG9uQ2xpY2s9eygpID0+IHNldElzT3BlbihmYWxzZSl9IHN4PXt7XHJcbiAgICAgICAgICAgIGNvbG9yOiBjaGF0Ym90U3R5bGVzLnNlY29uZGFyeUNvbG9yIHx8ICcjZmZmJyxcclxuICAgICAgICAgICAgJyY6aG92ZXInOiB7XHJcbiAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q2xvc2VJY29uIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ljb25CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvQ2hhdEhlYWRlcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPENoYXRib3RNZXNzYWdlTGlzdFxyXG4gICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyUmVmPXtjb250YWluZXJSZWZ9XHJcbiAgICAgICAgICAgICAgICAgICAgICBib3R0b21SZWY9e2JvdHRvbVJlZn1cclxuICAgICAgICAgICAgICAgICAgICAgIG9uU2Nyb2xsPXtvblNjcm9sbH1cclxuICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VzPXtjaGF0SGlzdG9yeX1cclxuICAgICAgICAgICAgICAgICAgICAgIHByaW1hcnlDb2xvcj17Y2hhdGJvdFN0eWxlcy5wcmltYXJ5Q29sb3J9XHJcbiAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRhcnlDb2xvcj17Y2hhdGJvdFN0eWxlcy5zZWNvbmRhcnlDb2xvcn1cclxuICAgICAgICAgICAgICAgICAgICAgIG9uU3RyZWFtQ29tcGxldGU9e2hhbmRsZVN0cmVhbUNvbXBsZXRlfVxyXG4gICAgICAgICAgICAgICAgICAgICAgb25SZXRyeT17aGFuZGxlUmV0cnl9XHJcbiAgICAgICAgICAgICAgICAgICAgICBpc0xvYWRpbmc9e2lzTG9hZGluZ31cclxuICAgICAgICAgICAgICAgICAgICAgIGxpdmVBZ2VudFR5cGluZz17bGl2ZUNoYXRBY2NlcHRlZCAmJiBsaXZlQWdlbnRUeXBpbmd9XHJcbiAgICAgICAgICAgICAgICAgICAgICBzaG93TmV3TWVzc2FnZXM9e3Nob3dOZXdNZXNzYWdlc31cclxuICAgICAgICAgICAgICAgICAgICAgIG9uSnVtcFRvTGF0ZXN0PXtzY3JvbGxUb0JvdHRvbX1cclxuICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuQWJvdmVFbmQ9e3Nob3dVc2VyRm9ybSA/IDxGb3JtUmVzcG9uc2U+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2Zvcm1TdGVwID09PSAwICYmIDw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q2hhdGJvdE1lc3NhZ2VCdWJibGVcclxuICAgICAgICAgICAgICBwcmltYXJ5Q29sb3I9e2NoYXRib3RTdHlsZXMucHJpbWFyeUNvbG9yfVxyXG4gICAgICAgICAgICAgIHNlY29uZGFyeUNvbG9yPXtjaGF0Ym90U3R5bGVzLnNlY29uZGFyeUNvbG9yfVxyXG4gICAgICAgICAgICAgIG1lc3NhZ2U9e3tcclxuICAgICAgICAgICAgICB0ZXh0OiBcIkhpIHRoZXJlISDwn5GLIFRvIHByb3ZpZGUgYmV0dGVyIGFzc2lzdGFuY2UsIEknZCBsaWtlIHRvIGtub3cgeW91ciBuYW1lLlwiLFxyXG4gICAgICAgICAgICAgIGlzVXNlcjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcclxuICAgICAgICAgICAgfX0gLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGb3JtRmllbGQgZnVsbFdpZHRoIHBsYWNlaG9sZGVyPVwiV2hhdCdzIHlvdXIgbmFtZT9cIiB2YWx1ZT17dXNlckZvcm1EYXRhLm5hbWV9IG9uQ2hhbmdlPXtlID0+IHtcclxuICAgICAgICAgICAgICBzZXRVc2VyRm9ybURhdGEoe1xyXG4gICAgICAgICAgICAgICAgLi4udXNlckZvcm1EYXRhLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogZS50YXJnZXQudmFsdWVcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfX0gb25LZXlEb3duPXtlID0+IHtcclxuICAgICAgICAgICAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicpIHtcclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuYW1lID0gZS50YXJnZXQudmFsdWUudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKG5hbWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICBzZXRDaGF0SGlzdG9yeShwcmV2ID0+IFsuLi5wcmV2LCB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogbmFtZSxcclxuICAgICAgICAgICAgICAgICAgICBpc1VzZXI6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcclxuICAgICAgICAgICAgICAgICAgfV0pO1xyXG4gICAgICAgICAgICAgICAgICBzdG9yZUZvcm1EYXRhKCduYW1lJywgbmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgIHNldFNob3dVc2VyRm9ybShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgIHNldFVzZXJGb3JtRGF0YSh7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4udXNlckZvcm1EYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IG5hbWVcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9fSBhdXRvRm9jdXMgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+fVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Zm9ybVN0ZXAgPT09IDEgJiYgPD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDaGF0Ym90TWVzc2FnZUJ1YmJsZVxyXG4gICAgICAgICAgICAgIHByaW1hcnlDb2xvcj17Y2hhdGJvdFN0eWxlcy5wcmltYXJ5Q29sb3J9XHJcbiAgICAgICAgICAgICAgc2Vjb25kYXJ5Q29sb3I9e2NoYXRib3RTdHlsZXMuc2Vjb25kYXJ5Q29sb3J9XHJcbiAgICAgICAgICAgICAgbWVzc2FnZT17e1xyXG4gICAgICAgICAgICAgIHRleHQ6IFwiVGhhbmtzISBDb3VsZCB5b3UgcGxlYXNlIHNoYXJlIHlvdXIgcGhvbmUgbnVtYmVyP1wiLFxyXG4gICAgICAgICAgICAgIGlzVXNlcjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcclxuICAgICAgICAgICAgfX0gLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGb3JtRmllbGQgZnVsbFdpZHRoIHBsYWNlaG9sZGVyPVwiWW91ciBwaG9uZSBudW1iZXJcIiB2YWx1ZT17dXNlckZvcm1EYXRhLnBob25lfSBvbkNoYW5nZT17ZSA9PiB7XHJcbiAgICAgICAgICAgICAgc2V0VXNlckZvcm1EYXRhKHtcclxuICAgICAgICAgICAgICAgIC4uLnVzZXJGb3JtRGF0YSxcclxuICAgICAgICAgICAgICAgIHBob25lOiBlLnRhcmdldC52YWx1ZVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9fSBvbktleURvd249e2UgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJykge1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBob25lID0gZS50YXJnZXQudmFsdWUudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHBob25lLmxlbmd0aCA+IDUpIHtcclxuICAgICAgICAgICAgICAgICAgc2V0Q2hhdEhpc3RvcnkocHJldiA9PiBbLi4ucHJldiwge1xyXG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IHBob25lLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzVXNlcjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgICB9XSk7XHJcbiAgICAgICAgICAgICAgICAgIHN0b3JlRm9ybURhdGEoJ3Bob25lJywgcGhvbmUpO1xyXG4gICAgICAgICAgICAgICAgICBzZXRTaG93VXNlckZvcm0oZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICBzZXRVc2VyRm9ybURhdGEoe1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLnVzZXJGb3JtRGF0YSxcclxuICAgICAgICAgICAgICAgICAgICBwaG9uZTogcGhvbmVcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9fSBhdXRvRm9jdXMgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+fVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Zm9ybVN0ZXAgPT09IDIgJiYgPD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDaGF0Ym90TWVzc2FnZUJ1YmJsZVxyXG4gICAgICAgICAgICAgIHByaW1hcnlDb2xvcj17Y2hhdGJvdFN0eWxlcy5wcmltYXJ5Q29sb3J9XHJcbiAgICAgICAgICAgICAgc2Vjb25kYXJ5Q29sb3I9e2NoYXRib3RTdHlsZXMuc2Vjb25kYXJ5Q29sb3J9XHJcbiAgICAgICAgICAgICAgbWVzc2FnZT17e1xyXG4gICAgICAgICAgICAgIHRleHQ6IFwiRmluYWxseSwgY291bGQgeW91IHBsZWFzZSBwcm92aWRlIHlvdXIgZW1haWwgYWRkcmVzcz9cIixcclxuICAgICAgICAgICAgICBpc1VzZXI6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXHJcbiAgICAgICAgICAgIH19IC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybUZpZWxkIGZ1bGxXaWR0aCB0eXBlPVwiZW1haWxcIiBwbGFjZWhvbGRlcj1cInlvdXJAZW1haWwuY29tXCIgdmFsdWU9e3VzZXJGb3JtRGF0YS5lbWFpbH0gb25DaGFuZ2U9e2UgPT4ge1xyXG4gICAgICAgICAgICAgIHNldFVzZXJGb3JtRGF0YSh7XHJcbiAgICAgICAgICAgICAgICAuLi51c2VyRm9ybURhdGEsXHJcbiAgICAgICAgICAgICAgICBlbWFpbDogZS50YXJnZXQudmFsdWVcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfX0gb25LZXlEb3duPXtlID0+IHtcclxuICAgICAgICAgICAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicpIHtcclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbWFpbCA9IGUudGFyZ2V0LnZhbHVlLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgIGlmIChlbWFpbC5pbmNsdWRlcygnQCcpICYmIGVtYWlsLmxlbmd0aCA+IDUpIHtcclxuICAgICAgICAgICAgICAgICAgc2V0Q2hhdEhpc3RvcnkocHJldiA9PiBbLi4ucHJldiwge1xyXG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IGVtYWlsLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzVXNlcjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgICB9XSk7XHJcbiAgICAgICAgICAgICAgICAgIHN0b3JlRm9ybURhdGEoJ2VtYWlsJywgZW1haWwpO1xyXG4gICAgICAgICAgICAgICAgICBzZXRTaG93VXNlckZvcm0oZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICBzZXRVc2VyRm9ybURhdGEoe1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLnVzZXJGb3JtRGF0YSxcclxuICAgICAgICAgICAgICAgICAgICBlbWFpbDogZW1haWxcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9fSBhdXRvRm9jdXMgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Gb3JtUmVzcG9uc2U+IDogbnVsbH1cclxuICAgICAgICAgICAgICAgICAgICAvPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8Q2hhdElucHV0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7LyogVGFsayBsaXZlIHdpdGggYWRtaW4g4oCTIHJlcXVpcmVzIGVtYWlsIHRvIHN0YXJ0IHJlYWx0aW1lIGNvbW11bmljYXRpb24gKi99XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHsoKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGxpdmVDaGF0UmVxdWVzdGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiA8Qm94IHN4PXt7XHJcbiAgICAgICAgICAgICAgbWI6IDEuNSxcclxuICAgICAgICAgICAgICBweDogMC41XHJcbiAgICAgICAgICAgIH19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgdmFyaWFudD1cImNhcHRpb25cIiBzeD17e1xyXG4gICAgICAgICAgICAgICAgY29sb3I6IGxpdmVDaGF0QWNjZXB0ZWQgPyAnIzEwYjk4MScgOiAnIzY0NzQ4YicsXHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcclxuICAgICAgICAgICAgICAgIGdhcDogMC41XHJcbiAgICAgICAgICAgICAgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJlY29yZFZvaWNlT3Zlckljb24gc3g9e3tcclxuICAgICAgICAgICAgICAgICAgZm9udFNpemU6IDE0XHJcbiAgICAgICAgICAgICAgICB9fSAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtsaXZlQ2hhdENvbm5lY3RpbmcgPyAnQ29ubmVjdGluZ+KApicgOiBsaXZlQ2hhdEFjY2VwdGVkID8gJ0FnZW50IGpvaW5lZC4gWW91IGNhbiBjaGF0IG5vdy4nIDogJ1dhaXRpbmcgZm9yIGFuIGFnZW50IHRvIGpvaW7igKYnfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JveD47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoc2hvd0xpdmVDaGF0RW1haWxGb3JtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiA8Qm94IGNvbXBvbmVudD1cImZvcm1cIiBvblN1Ym1pdD17aGFuZGxlU3RhcnRMaXZlQ2hhdH0gc3g9e3tcclxuICAgICAgICAgICAgICBtYjogMS41LFxyXG4gICAgICAgICAgICAgIHA6IDEuNSxcclxuICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IDIsXHJcbiAgICAgICAgICAgICAgYmdjb2xvcjogJyNmOGZhZmMnLFxyXG4gICAgICAgICAgICAgIGJvcmRlcjogJzFweCBzb2xpZCAjZTJlOGYwJ1xyXG4gICAgICAgICAgICB9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5IHZhcmlhbnQ9XCJzdWJ0aXRsZTJcIiBzeD17e1xyXG4gICAgICAgICAgICAgICAgbWI6IDEsXHJcbiAgICAgICAgICAgICAgICBjb2xvcjogJyM0NzU1NjknLFxyXG4gICAgICAgICAgICAgICAgZm9udFdlaWdodDogNjAwXHJcbiAgICAgICAgICAgICAgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW50ZXIgeW91ciBlbWFpbCB0byBzdGFydCBsaXZlIGNoYXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0RmllbGQgZnVsbFdpZHRoIHNpemU9XCJzbWFsbFwiIHR5cGU9XCJlbWFpbFwiIHBsYWNlaG9sZGVyPVwieW91ckBlbWFpbC5jb21cIiB2YWx1ZT17bGl2ZUNoYXRFbWFpbH0gb25DaGFuZ2U9e2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgc2V0TGl2ZUNoYXRFbWFpbChlLnRhcmdldC52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAobGl2ZUNoYXRFbWFpbEVycm9yKSBzZXRMaXZlQ2hhdEVtYWlsRXJyb3IoJycpO1xyXG4gICAgICAgICAgICAgIH19IGVycm9yPXshIWxpdmVDaGF0RW1haWxFcnJvcn0gaGVscGVyVGV4dD17bGl2ZUNoYXRFbWFpbEVycm9yfSBJbnB1dFByb3BzPXt7XHJcbiAgICAgICAgICAgICAgICBzdGFydEFkb3JubWVudDogPElucHV0QWRvcm5tZW50IHBvc2l0aW9uPVwic3RhcnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RW1haWxJY29uIHN4PXt7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICcjNjQ3NDhiJyxcclxuICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogMjBcclxuICAgICAgICAgICAgICAgICAgfX0gLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSW5wdXRBZG9ybm1lbnQ+XHJcbiAgICAgICAgICAgICAgfX0gc3g9e3tcclxuICAgICAgICAgICAgICAgIG1iOiAxLFxyXG4gICAgICAgICAgICAgICAgJyYgLk11aU91dGxpbmVkSW5wdXQtcm9vdCc6IHtcclxuICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnMTBweCcsXHJcbiAgICAgICAgICAgICAgICAgIGJnY29sb3I6ICcjZmZmJ1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH19IC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Qm94IHN4PXt7XHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgICAgICAgICBnYXA6IDEsXHJcbiAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2ZsZXgtZW5kJ1xyXG4gICAgICAgICAgICAgIH19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b24gc2l6ZT1cInNtYWxsXCIgdmFyaWFudD1cInRleHRcIiBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHNldFNob3dMaXZlQ2hhdEVtYWlsRm9ybShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgIHNldExpdmVDaGF0RW1haWwoJycpO1xyXG4gICAgICAgICAgICAgICAgICBzZXRMaXZlQ2hhdEVtYWlsRXJyb3IoJycpO1xyXG4gICAgICAgICAgICAgICAgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbmNlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b24gc2l6ZT1cInNtYWxsXCIgdmFyaWFudD1cImNvbnRhaW5lZFwiIHR5cGU9XCJzdWJtaXRcIiBzdGFydEljb249ezxSZWNvcmRWb2ljZU92ZXJJY29uIC8+fSBzeD17e1xyXG4gICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICcxMHB4J1xyXG4gICAgICAgICAgICAgICAgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0IGxpdmUgY2hhdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiA8Qm94IHN4PXt7XHJcbiAgICAgICAgICAgIG1iOiAxLjUsXHJcbiAgICAgICAgICAgIHB4OiAwLjVcclxuICAgICAgICAgIH19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uIHNpemU9XCJzbWFsbFwiIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIHN0YXJ0SWNvbj17PFJlY29yZFZvaWNlT3Zlckljb24gLz59IG9uQ2xpY2s9e2hhbmRsZVN0YXJ0TGl2ZUNoYXRDbGlja30gc3g9e3tcclxuICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICcxMHB4JyxcclxuICAgICAgICAgICAgICB0ZXh0VHJhbnNmb3JtOiAnbm9uZScsXHJcbiAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6ICcjY2JkNWUxJyxcclxuICAgICAgICAgICAgICBjb2xvcjogJyM0NzU1NjknLFxyXG4gICAgICAgICAgICAgICcmOmhvdmVyJzoge1xyXG4gICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6ICcjM2I4MmY2JyxcclxuICAgICAgICAgICAgICAgIGNvbG9yOiAnIzNiODJmNicsXHJcbiAgICAgICAgICAgICAgICBiZ2NvbG9yOiAncmdiYSg1OSwgMTMwLCAyNDYsIDAuMDQpJ1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWxrIGxpdmUgd2l0aCBhZG1pblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JveD47XHJcbiAgICAgICAgfSkoKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPEJveCBjb21wb25lbnQ9XCJmb3JtXCIgb25TdWJtaXQ9e2hhbmRsZVN1Ym1pdH0gc3g9e3tcclxuICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcclxuICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxyXG4gICAgICAgICAgd2lkdGg6ICcxMDAlJ1xyXG4gICAgICAgIH19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0RmllbGQgY2xhc3NOYW1lPVwid3BhaV9jaGF0SW5wdXRGaWVsZFwiIGZ1bGxXaWR0aCB2YXJpYW50PVwib3V0bGluZWRcIiBwbGFjZWhvbGRlcj17Y2hhdGJvdFN0eWxlcy5wbGFjZWhvbGRlclRleHR9IHZhbHVlPXtpbnB1dH0gb25DaGFuZ2U9e2hhbmRsZUNoYXRJbnB1dENoYW5nZX0gb25CbHVyPXtmbHVzaEN1c3RvbWVyVHlwaW5nU3RvcHBlZH0gb25LZXlQcmVzcz17aGFuZGxlS2V5UHJlc3N9IGF1dG9Db21wbGV0ZT1cIm9mZlwiIGF1dG9Db3JyZWN0PVwib2ZmXCIgYXV0b0NhcGl0YWxpemU9XCJvZmZcIiBzcGVsbENoZWNrPVwiZmFsc2VcIiBpbnB1dFByb3BzPXt7XHJcbiAgICAgICAgICAgICdhcmlhLWxhYmVsJzogJ1R5cGUgeW91ciBtZXNzYWdlIHRvIHRoZSBhc3Npc3RhbnQnLFxyXG4gICAgICAgICAgICBhdXRvQ29tcGxldGU6ICdvZmYnLFxyXG4gICAgICAgICAgICBmb3JtOiB7XHJcbiAgICAgICAgICAgICAgYXV0b0NvbXBsZXRlOiAnb2ZmJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9fSBJbnB1dFByb3BzPXt7XHJcbiAgICAgICAgICAgIGVuZEFkb3JubWVudDogPEJveCBzeD17e1xyXG4gICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcclxuICAgICAgICAgICAgICBnYXA6IDEsXHJcbiAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXHJcbiAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJSdcclxuICAgICAgICAgICAgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRvb2x0aXAgdGl0bGU9XCJGaWxlIEF0dGFjaG1lbnQgLSBDb21pbmcgU29vbiFcIiBwbGFjZW1lbnQ9XCJ0b3BcIiBhcnJvdz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3tcclxuICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxyXG4gICAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJ1xyXG4gICAgICAgICAgICAgICAgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SWNvbkJ1dHRvbiBzaXplPVwic21hbGxcIiBkaXNhYmxlZCBzeD17e1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAncmdiYSgxMDcsIDExNCwgMTI4LCAwLjUpJyxcclxuICAgICAgICAgICAgICAgICAgICAnJi5NdWktZGlzYWJsZWQnOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3JnYmEoMTA3LCAxMTQsIDEyOCwgMC41KSdcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICc4cHgnXHJcbiAgICAgICAgICAgICAgICAgIH19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBdHRhY2hGaWxlSWNvbiBzeD17e1xyXG4gICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6ICcyMHB4J1xyXG4gICAgICAgICAgICAgICAgICAgIH19IC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ljb25CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1Rvb2x0aXA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb25CdXR0b24gY29sb3I9XCJwcmltYXJ5XCIgdHlwZT1cInN1Ym1pdFwiIGRpc2FibGVkPXtpc0xvYWRpbmcgfHwgIWlucHV0LnRyaW0oKX0gYXJpYS1sYWJlbD1cIlNlbmQgbWVzc2FnZVwiIHN4PXt7XHJcbiAgICAgICAgICAgICAgICBjb2xvcjogY2hhdGJvdFN0eWxlcy5wcmltYXJ5Q29sb3IsXHJcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAnOHB4JyxcclxuICAgICAgICAgICAgICAgIHRyYW5zaXRpb246ICd0cmFuc2Zvcm0gMC4ycyBlYXNlLCBib3gtc2hhZG93IDAuMnMgZWFzZScsXHJcbiAgICAgICAgICAgICAgICAnJjpub3QoOmRpc2FibGVkKTpob3Zlcic6IHsgdHJhbnNmb3JtOiAnc2NhbGUoMS4wOCknIH0sXHJcbiAgICAgICAgICAgICAgICAnJjpub3QoOmRpc2FibGVkKTphY3RpdmUnOiB7IHRyYW5zZm9ybTogJ3NjYWxlKDAuOTYpJyB9XHJcbiAgICAgICAgICAgICAgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZW5kSWNvbiBzeD17e1xyXG4gICAgICAgICAgICAgICAgICBmb250U2l6ZTogJzIwcHgnXHJcbiAgICAgICAgICAgICAgICB9fSAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSWNvbkJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxyXG4gICAgICAgICAgfX0gcHJpbWFyeUNvbG9yPXtjaGF0Ym90U3R5bGVzLnByaW1hcnlDb2xvcn0gLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9DaGF0SW5wdXQ+XHJcbiAgICAgICAgICAgICAgICA8L0NoYXRXaW5kb3c+fVxyXG4gICAgICAgIDwvZGl2PjtcclxufTtcclxuZXhwb3J0IGRlZmF1bHQgQ2hhdGJvdDtcclxuXHJcblxyXG5cclxuIiwiaW1wb3J0IHsgY3JlYXRlU2xpY2UsIGNyZWF0ZUFzeW5jVGh1bmsgfSBmcm9tIFwiQHJlZHV4anMvdG9vbGtpdFwiO1xuaW1wb3J0IHsgQVBJX1VSTCwgZ2V0V3BSZXN0Tm9uY2UgfSBmcm9tIFwiLi4vLi4vdXRpbHMvaW5kZXguanNcIjtcblxuLyoqIFBsYWluIGBkYXRhYCBmcm9tIHVzZXItaW5mbyBBUEkgKG9iamVjdCwgb3IgSlNPTiBzdHJpbmcgZHVyaW5nIG1pZ3JhdGlvbikuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplVXNlckluZm9EYXRhKHJhdykge1xuICBpZiAocmF3ID09IG51bGwgfHwgcmF3ID09PSBcIlwiKSByZXR1cm4ge307XG4gIGlmICh0eXBlb2YgcmF3ID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KHJhdykpIHJldHVybiByYXc7XG4gIGlmICh0eXBlb2YgcmF3ID09PSBcInN0cmluZ1wiKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UocmF3KTtcbiAgICAgIHJldHVybiB0eXBlb2YgcGFyc2VkID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIHBhcnNlZCAhPT0gbnVsbCAmJlxuICAgICAgICAhQXJyYXkuaXNBcnJheShwYXJzZWQpXG4gICAgICAgID8gcGFyc2VkXG4gICAgICAgIDoge307XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9XG4gIHJldHVybiB7fTtcbn1cblxuY29uc3QgaW5pdGlhbFN0YXRlID0ge1xuICB1c2VyRGF0YToge30sXG4gIGlzTG9nZ2VkSW46IGZhbHNlLFxuICBHZXRVc2VyTG9hZGVyOiBmYWxzZSxcbiAgZXJyb3I6IG51bGwsXG4gIGlzVmVyaWZ5OiBmYWxzZSxcbiAgYXV0aF90b2tlbjogbnVsbCxcbiAgaGFzSW5pdExvYWQ6IGZhbHNlLFxufTtcblxuLy8gQXN5bmMgdGh1bmsgZm9yIGZldGNoaW5nIHVzZXIgZGF0YVxuZXhwb3J0IGNvbnN0IGZldGNoVXNlckRhdGEgPSBjcmVhdGVBc3luY1RodW5rKFxuICBcInVzZXIvZmV0Y2hVc2VyRGF0YVwiLFxuICBhc3luYyAoZW5jb2RlLCB7IHJlamVjdFdpdGhWYWx1ZSB9KSA9PiB7XG4gICAgaWYgKGVuY29kZT8ua2V5ID09PSB1bmRlZmluZWQgfHwgZW5jb2RlPy5wYXlsb2FkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIEV4YW1wbGUgb2YgaG93IHlvdSBtaWdodCBmZXRjaCB1c2VyIGRhdGEgZnJvbSB5b3VyIEFQSVxuICAgICAgLy8gUmVwbGFjZSB3aXRoIHlvdXIgYWN0dWFsIEFQSSBlbmRwb2ludFxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChBUElfVVJMICsgXCJ1c2VyL3VzZXItaW5mb1wiLCB7XG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICBcIlgtV1AtTm9uY2VcIjogZ2V0V3BSZXN0Tm9uY2UoKSxcbiAgICAgICAgICBcIlgtRW5jcnlwdGVkLVBheWxvYWRcIjogZW5jb2RlPy5rZXksXG4gICAgICAgIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBlbmNyeXB0ZWRfcGF5bG9hZDogZW5jb2RlPy5wYXlsb2FkLFxuICAgICAgICB9KSxcbiAgICAgIH0pO1xuICAgICAgLypcbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCB1c2VyIGRhdGEnKTtcbiAgICB9XG4gICAgKi9cblxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiByZWplY3RXaXRoVmFsdWUoZGF0YSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiByZWplY3RXaXRoVmFsdWUoZXJyb3IpO1xuICAgIH1cbiAgfSxcbik7XG5cbi8vIEluaXRpYWwgc3RhdGVcblxuLy8gVXNlciBzbGljZVxuY29uc3QgdXNlclNsaWNlID0gY3JlYXRlU2xpY2Uoe1xuICBuYW1lOiBcInVzZXJcIixcbiAgaW5pdGlhbFN0YXRlLFxuICByZWR1Y2Vyczoge1xuICAgIHNldFVzZXJEYXRhOiAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICAgICAgc3RhdGUudXNlckRhdGEgPSBhY3Rpb24ucGF5bG9hZDtcbiAgICB9LFxuICAgIC8qKiBTaGFsbG93LW1lcmdlIGZpZWxkcyBpbnRvIHVzZXJEYXRhIChlLmcuIGNyZWRpdF9iYWxhbmNlIGFmdGVyIGxhenkgY3JlZGl0cyBBUEkpICovXG4gICAgbWVyZ2VVc2VyRmllbGRzOiAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICAgICAgY29uc3QgcGF0Y2ggPSBhY3Rpb24ucGF5bG9hZCB8fCB7fTtcbiAgICAgIHN0YXRlLnVzZXJEYXRhID1cbiAgICAgICAgc3RhdGUudXNlckRhdGEgJiYgdHlwZW9mIHN0YXRlLnVzZXJEYXRhID09PSBcIm9iamVjdFwiXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIC4uLnN0YXRlLnVzZXJEYXRhLFxuICAgICAgICAgICAgICAuLi5wYXRjaCxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgLi4ucGF0Y2gsXG4gICAgICAgICAgICB9O1xuICAgIH0sXG4gICAgc2V0SXNMb2dnZWRJbjogKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgICAgIHN0YXRlLmlzTG9nZ2VkSW4gPSBhY3Rpb24ucGF5bG9hZDtcbiAgICB9LFxuICAgIExvZ2luVXNlcjogKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgICAgIHN0YXRlLmlzTG9nZ2VkSW4gPSB0cnVlO1xuICAgICAgc3RhdGUudXNlckRhdGEgPSBhY3Rpb24ucGF5bG9hZD8udXNlcjtcbiAgICAgIHN0YXRlLmF1dGhfdG9rZW4gPSBhY3Rpb24ucGF5bG9hZD8udG9rZW47XG4gICAgICBzdGF0ZS5pc1ZlcmlmeSA9IGFjdGlvbi5wYXlsb2FkPy52ZXJpZmllZDtcbiAgICB9LFxuICAgIGxvZ291dFVzZXI6IChzdGF0ZSkgPT4ge1xuICAgICAgc3RhdGUuaXNMb2dnZWRJbiA9IGZhbHNlO1xuICAgICAgc3RhdGUudXNlckRhdGEgPSBudWxsIHx8IGluaXRpYWxTdGF0ZS51c2VyRGF0YTtcbiAgICAgIHN0YXRlLmF1dGhfdG9rZW4gPSBudWxsO1xuICAgIH0sXG4gICAgc2V0QXV0aFRva2VuOiAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICAgICAgc3RhdGUuYXV0aF90b2tlbiA9IGFjdGlvbi5wYXlsb2FkLnRva2VuO1xuICAgIH0sXG4gICAgc2V0SW5pdExvYWQ6IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gICAgICBzdGF0ZS5oYXNJbml0TG9hZCA9IHRydWU7XG4gICAgfSxcbiAgfSxcbiAgZXh0cmFSZWR1Y2VyczogKGJ1aWxkZXIpID0+IHtcbiAgICBidWlsZGVyXG4gICAgICAuYWRkQ2FzZShmZXRjaFVzZXJEYXRhLnBlbmRpbmcsIChzdGF0ZSkgPT4ge1xuICAgICAgICBzdGF0ZS5HZXRVc2VyTG9hZGVyID0gdHJ1ZTtcbiAgICAgICAgc3RhdGUuaXNMb2dnZWRJbiA9IGZhbHNlO1xuICAgICAgICBzdGF0ZS5lcnJvciA9IG51bGw7XG4gICAgICB9KVxuICAgICAgLmFkZENhc2UoZmV0Y2hVc2VyRGF0YS5mdWxmaWxsZWQsIChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gICAgICAgIHN0YXRlLmlzTG9nZ2VkSW4gPSB0cnVlO1xuICAgICAgICBzdGF0ZS51c2VyRGF0YSA9IG5vcm1hbGl6ZVVzZXJJbmZvRGF0YShhY3Rpb24ucGF5bG9hZD8uZGF0YSk7XG4gICAgICAgIHN0YXRlLmlzVmVyaWZ5ID0gQm9vbGVhbihzdGF0ZS51c2VyRGF0YT8udmVyaWZpZWQpO1xuICAgICAgICBzdGF0ZS5tZXNzYWdlcyA9IGFjdGlvbi5wYXlsb2FkPy5tZXNzYWdlO1xuICAgICAgICBzdGF0ZS5HZXRVc2VyTG9hZGVyID0gZmFsc2U7XG4gICAgICB9KVxuICAgICAgLmFkZENhc2UoZmV0Y2hVc2VyRGF0YS5yZWplY3RlZCwgKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgICAgICAgc3RhdGUuZXJyb3IgPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgICAgc3RhdGUuR2V0VXNlckxvYWRlciA9IGZhbHNlO1xuICAgICAgfSk7XG4gIH0sXG59KTtcblxuLy8gRXhwb3J0IGFjdGlvbnMgYW5kIHJlZHVjZXJcbmV4cG9ydCBjb25zdCB7XG4gIHNldFVzZXJEYXRhLFxuICBtZXJnZVVzZXJGaWVsZHMsXG4gIHNldElzTG9nZ2VkSW4sXG4gIExvZ2luVXNlcixcbiAgc2V0QXV0aFRva2VuLFxuICBsb2dvdXRVc2VyLFxuICBzZXRJbml0TG9hZCxcbn0gPSB1c2VyU2xpY2UuYWN0aW9ucztcbmV4cG9ydCBkZWZhdWx0IHVzZXJTbGljZS5yZWR1Y2VyO1xuIiwiaW1wb3J0IHsgY3JlYXRlU2xpY2UsIGNyZWF0ZUFzeW5jVGh1bmsgfSBmcm9tIFwiQHJlZHV4anMvdG9vbGtpdFwiO1xyXG5pbXBvcnQgeyBBUElfVVJMLCBFbmNyeXB0UGF5bG9hZCwgRGVjcnlwdFBheWxvYWQsIGdldFdwUmVzdE5vbmNlIH0gZnJvbSBcIi4uLy4uL3V0aWxzL2luZGV4LmpzXCI7XHJcbmltcG9ydCB7XHJcbiAgZmV0Y2hVc2VyRGF0YSxcclxuICBub3JtYWxpemVVc2VySW5mb0RhdGEsXHJcbiAgTG9naW5Vc2VyLFxyXG59IGZyb20gXCIuL1VzZXJTbGljZS5qc1wiO1xyXG5cclxuZnVuY3Rpb24gZGVyaXZlU3Vic2NyaXB0aW9uRnJvbVVzZXIocmF3KSB7XHJcbiAgY29uc3QgdXNlciA9IG5vcm1hbGl6ZVVzZXJJbmZvRGF0YShyYXcpO1xyXG4gIGNvbnN0IG1zID0gdXNlci5tZW1iZXJzaGlwX3N0YXR1cztcclxuICBjb25zdCBzdWJzY3JpYmVkID1cclxuICAgIHVzZXIuaXNfc3Vic2NyaWJlZCA9PT0gdHJ1ZSB8fFxyXG4gICAgdXNlci5pc19zdWJzY3JpYmVkID09PSAxIHx8XHJcbiAgICB1c2VyLnN1YnNjcmlwdGlvbl9hY3RpdmUgPT09IHRydWUgfHxcclxuICAgIG1zID09PSB0cnVlIHx8XHJcbiAgICBtcyA9PT0gMSB8fFxyXG4gICAgTnVtYmVyKG1zKSA9PT0gMSB8fFxyXG4gICAgU3RyaW5nKG1zIHx8IFwiXCIpLnRvTG93ZXJDYXNlKCkgPT09IFwiYWN0aXZlXCI7XHJcbiAgcmV0dXJuIHtcclxuICAgIGlzU3Vic2NyaWJlZDogQm9vbGVhbihzdWJzY3JpYmVkKSxcclxuICAgIG1lc3NhZ2U6IHVzZXIuc3Vic2NyaXB0aW9uX21lc3NhZ2UgfHwgdXNlci5tZW1iZXJzaGlwX21lc3NhZ2UgfHwgXCJcIixcclxuICAgIFN1YnNjcmliZVVzZXI6XHJcbiAgICAgIHVzZXIuc3Vic2NyaXB0aW9uX2RldGFpbHMgJiYgdHlwZW9mIHVzZXIuc3Vic2NyaXB0aW9uX2RldGFpbHMgPT09IFwib2JqZWN0XCJcclxuICAgICAgICA/IHVzZXIuc3Vic2NyaXB0aW9uX2RldGFpbHNcclxuICAgICAgICA6IHN1YnNjcmliZWRcclxuICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgIG1lbWJlcnNoaXBfc3RhdHVzOiB1c2VyLm1lbWJlcnNoaXBfc3RhdHVzIHx8IFwiQWN0aXZlXCIsXHJcbiAgICAgICAgICAgICAgcGxhbl9uYW1lOlxyXG4gICAgICAgICAgICAgICAgdXNlci5wbGFuX25hbWUgfHwgdXNlci5jdXJyZW50X3BsYW4gfHwgdXNlci5zdWJzY3JpcHRpb25fdGllcixcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgOiB7fSxcclxuICB9O1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgY2hlY2tTdWJzY3JpcHRpb24gPSBjcmVhdGVBc3luY1RodW5rKFxyXG4gIFwic3Vic2NyaXB0aW9uL2NoZWNrU3Vic2NyaXB0aW9uXCIsXHJcbiAgYXN5bmMgKHRva2VuLCB7IHJlamVjdFdpdGhWYWx1ZSwgZ2V0U3RhdGUgfSkgPT4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgLy8gY29uc3QgdG9rZW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYXV0aF90b2tlbicpO1xyXG4gICAgICBjb25zdCBzdGF0ZSA9IGdldFN0YXRlKCk7XHJcbiAgICAgIGNvbnN0IHVzZXJTdGF0ZSA9IHN0YXRlLnVzZXI7XHJcbiAgICAgIGNvbnN0IFZhcmlmaWNhdGlvbiA9IHVzZXJTdGF0ZT8uaXNWZXJpZnk7XHJcbiAgICAgIGlmICghVmFyaWZpY2F0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGVuY3J5cHRlZFBheWxvYWQgPSBFbmNyeXB0UGF5bG9hZCh7XHJcbiAgICAgICAgdG9rZW46IHRva2VuLFxyXG4gICAgICB9KTtcclxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHtBUElfVVJMfXVzZXItc3Vic2NyaXB0aW9uLWNoZWNrYCwge1xyXG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXHJcbiAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgICBcIlgtV1AtTm9uY2VcIjogZ2V0V3BSZXN0Tm9uY2UoKSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgIGVuY3J5cHRlZF9wYXlsb2FkOiBlbmNyeXB0ZWRQYXlsb2FkLFxyXG4gICAgICAgIH0pLFxyXG4gICAgICB9KTtcclxuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5ldHdvcmsgcmVzcG9uc2Ugd2FzIG5vdCBva1wiKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBlbmNyeXB0ZWRSZXNwb25zZSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcclxuXHJcbiAgICAgIC8vIGNvbnN0IHJlc3BvbnNlX2RhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XHJcblxyXG4gICAgICAvLyAgICAgaWYgKCFyZXNwb25zZV9kYXRhLnN1Y2Nlc3MpIHtcclxuICAgICAgLy8gICAgICAgICByZXR1cm4gcmVqZWN0V2l0aFZhbHVlKHJlc3BvbnNlX2RhdGEuZGF0YT8ubWVzc2FnZSB8fCAnU3Vic2NyaXB0aW9uIGNoZWNrIGZhaWxlZCcpO1xyXG4gICAgICAvLyAgICAgfVxyXG5cclxuICAgICAgLy8gICAgIHJldHVybiBEZWNyeXB0UGF5bG9hZChyZXNwb25zZV9kYXRhKTtcclxuICAgICAgLy8gfVxyXG5cclxuICAgICAgaWYgKCFlbmNyeXB0ZWRSZXNwb25zZS5zdWNjZXNzKSB7XHJcbiAgICAgICAgcmV0dXJuIHJlamVjdFdpdGhWYWx1ZShcclxuICAgICAgICAgIGVuY3J5cHRlZFJlc3BvbnNlLm1lc3NhZ2UgfHwgXCJTdWJzY3JpcHRpb24gY2hlY2sgZmFpbGVkXCIsXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gQ2hlY2sgaWYgZGF0YSBmaWVsZCBleGlzdHMgYW5kIGlzIGVuY3J5cHRlZFxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgZW5jcnlwdGVkUmVzcG9uc2UuZGF0YSAmJlxyXG4gICAgICAgIHR5cGVvZiBlbmNyeXB0ZWRSZXNwb25zZS5kYXRhID09PSBcInN0cmluZ1wiXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAvLyBEZWNyeXB0IHRoZSBkYXRhIGZpZWxkXHJcbiAgICAgICAgICBjb25zdCBkZWNyeXB0ZWRVc2VyRGF0YSA9IERlY3J5cHRQYXlsb2FkKGVuY3J5cHRlZFJlc3BvbnNlLmRhdGEpO1xyXG5cclxuICAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyByZXNwb25zZSBvYmplY3Qgd2l0aCB0aGUgZGVjcnlwdGVkIGRhdGFcclxuICAgICAgICAgIGNvbnN0IGZ1bGxSZXNwb25zZSA9IHtcclxuICAgICAgICAgICAgc3VjY2VzczogZW5jcnlwdGVkUmVzcG9uc2Uuc3VjY2VzcyxcclxuICAgICAgICAgICAgbWVzc2FnZTogZW5jcnlwdGVkUmVzcG9uc2UubWVzc2FnZSxcclxuICAgICAgICAgICAgLy8gZGF0YToge1xyXG4gICAgICAgICAgICAvLyAgICAgdXNlcl9kYXRhOiBkZWNyeXB0ZWRVc2VyRGF0YVxyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgcmV0dXJuIGZ1bGxSZXNwb25zZTtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgLy8gSWYgZGVjcnlwdGlvbiBmYWlscywgcmV0dXJuIHRoZSBvcmlnaW5hbCByZXNwb25zZVxyXG4gICAgICAgICAgcmV0dXJuIGVuY3J5cHRlZFJlc3BvbnNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBJZiBkYXRhIGlzIG5vdCBlbmNyeXB0ZWQgb3IgZG9lc24ndCBleGlzdCwgcmV0dXJuIHRoZSBvcmlnaW5hbCByZXNwb25zZVxyXG4gICAgICAgIHJldHVybiBlbmNyeXB0ZWRSZXNwb25zZTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgcmV0dXJuIHJlamVjdFdpdGhWYWx1ZShlcnJvci5tZXNzYWdlIHx8IFwiRmFpbGVkIHRvIGNoZWNrIHN1YnNjcmlwdGlvblwiKTtcclxuICAgIH1cclxuICB9LFxyXG4pO1xyXG5cclxuY29uc3Qgc3Vic2NyaXB0aW9uU2xpY2UgPSBjcmVhdGVTbGljZSh7XHJcbiAgbmFtZTogXCJzdWJzY3JpcHRpb25cIixcclxuICBpbml0aWFsU3RhdGU6IHtcclxuICAgIGlzU3Vic2NyaWJlZDogZmFsc2UsXHJcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxyXG4gICAgZXJyb3I6IG51bGwsXHJcbiAgICBTdWJzY3JpYmVVc2VyOiB7fSxcclxuICAgIG1lc3NhZ2U6IFwiXCIsXHJcbiAgfSxcclxuICByZWR1Y2Vyczoge1xyXG4gICAgY2xlYXJFcnJvcjogKHN0YXRlKSA9PiB7XHJcbiAgICAgIHN0YXRlLmVycm9yID0gbnVsbDtcclxuICAgIH0sXHJcbiAgICByZXNldExvYWRpbmc6IChzdGF0ZSkgPT4ge1xyXG4gICAgICBzdGF0ZS5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgIH0sXHJcbiAgICByZXNldFN1YnNjcmliZTogKHN0YXRlKSA9PiB7XHJcbiAgICAgIHN0YXRlLmlzU3Vic2NyaWJlZCA9IGZhbHNlO1xyXG4gICAgICBzdGF0ZS5TdWJzY3JpYmVVc2VyID0ge307XHJcbiAgICAgIHN0YXRlLm1lc3NhZ2UgPSBcIlwiO1xyXG4gICAgfSxcclxuICB9LFxyXG4gIGV4dHJhUmVkdWNlcnM6IChidWlsZGVyKSA9PiB7XHJcbiAgICBidWlsZGVyXHJcbiAgICAgIC5hZGRDYXNlKGZldGNoVXNlckRhdGEuZnVsZmlsbGVkLCAoc3RhdGUsIGFjdGlvbikgPT4ge1xyXG4gICAgICAgIGNvbnN0IG5leHQgPSBkZXJpdmVTdWJzY3JpcHRpb25Gcm9tVXNlcihhY3Rpb24ucGF5bG9hZD8uZGF0YSk7XHJcbiAgICAgICAgc3RhdGUuaXNTdWJzY3JpYmVkID0gbmV4dC5pc1N1YnNjcmliZWQ7XHJcbiAgICAgICAgc3RhdGUubWVzc2FnZSA9IG5leHQubWVzc2FnZTtcclxuICAgICAgICBzdGF0ZS5TdWJzY3JpYmVVc2VyID0gbmV4dC5TdWJzY3JpYmVVc2VyO1xyXG4gICAgICAgIHN0YXRlLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHN0YXRlLmVycm9yID0gbnVsbDtcclxuICAgICAgfSlcclxuICAgICAgLmFkZENhc2UoTG9naW5Vc2VyLCAoc3RhdGUsIGFjdGlvbikgPT4ge1xyXG4gICAgICAgIGNvbnN0IG5leHQgPSBkZXJpdmVTdWJzY3JpcHRpb25Gcm9tVXNlcihhY3Rpb24ucGF5bG9hZD8udXNlcik7XHJcbiAgICAgICAgc3RhdGUuaXNTdWJzY3JpYmVkID0gbmV4dC5pc1N1YnNjcmliZWQ7XHJcbiAgICAgICAgc3RhdGUubWVzc2FnZSA9IG5leHQubWVzc2FnZTtcclxuICAgICAgICBzdGF0ZS5TdWJzY3JpYmVVc2VyID0gbmV4dC5TdWJzY3JpYmVVc2VyO1xyXG4gICAgICAgIHN0YXRlLmVycm9yID0gbnVsbDtcclxuICAgICAgfSlcclxuICAgICAgLmFkZENhc2UoY2hlY2tTdWJzY3JpcHRpb24ucGVuZGluZywgKHN0YXRlKSA9PiB7XHJcbiAgICAgICAgc3RhdGUuaXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICBzdGF0ZS5lcnJvciA9IG51bGw7XHJcbiAgICAgIH0pXHJcbiAgICAgIC8vIC5hZGRDYXNlKGNoZWNrU3Vic2NyaXB0aW9uLmZ1bGZpbGxlZCwgKHN0YXRlLCBhY3Rpb24pID0+IHtcclxuICAgICAgLy8gICAgIGlmIChhY3Rpb24ucGF5bG9hZD8uc3VjY2VzcyA9PT0gdHJ1ZSkge1xyXG4gICAgICAvLyAgICAgICAgIHN0YXRlLm1lc3NhZ2UgPSBhY3Rpb24ucGF5bG9hZD8uZGF0YT8ubWVzc2FnZTtcclxuICAgICAgLy8gICAgICAgICBjb25zdCB7IHN0cmlwZV9wYXltZW50X3VybCwgc3RyaXBlX2N1c3RvbWVyX2lkLCBpc19zdWJzY3JpYmVkLCAuLi5maWx0ZXJlZERhdGEgfSA9IGFjdGlvbi5wYXlsb2FkPy5kYXRhPy51c2VyX2RhdGE7XHJcbiAgICAgIC8vICAgICAgICAgc3RhdGUuaXNTdWJzY3JpYmVkID0gTnVtYmVyKGlzX3N1YnNjcmliZWQpID09PSAxO1xyXG4gICAgICAvLyAgICAgICAgIHN0YXRlLlN1YnNjcmliZVVzZXIgPSBmaWx0ZXJlZERhdGE7XHJcbiAgICAgIC8vICAgICB9IGVsc2Uge1xyXG4gICAgICAvLyAgICAgICAgIHN0YXRlLmVycm9yID0gJ0ludmFsaWQgcmVzcG9uc2UgZm9ybWF0JztcclxuICAgICAgLy8gICAgIH1cclxuICAgICAgLy8gICAgIHN0YXRlLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAvLyB9KVxyXG4gICAgICAuYWRkQ2FzZShjaGVja1N1YnNjcmlwdGlvbi5mdWxmaWxsZWQsIChzdGF0ZSwgYWN0aW9uKSA9PiB7XHJcbiAgICAgICAgaWYgKGFjdGlvbi5wYXlsb2FkPy5zdWNjZXNzID09PSB0cnVlKSB7XHJcbiAgICAgICAgICBzdGF0ZS5tZXNzYWdlID0gYWN0aW9uLnBheWxvYWQubWVzc2FnZTtcclxuICAgICAgICAgIGlmIChhY3Rpb24ucGF5bG9hZC5tZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoXCJtZW1iZXJcIikpIHtcclxuICAgICAgICAgICAgc3RhdGUuaXNTdWJzY3JpYmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgc3RhdGUuU3Vic2NyaWJlVXNlciA9IGFjdGlvbi5wYXlsb2FkLmRhdGE/LnVzZXJfZGF0YSB8fCB7XHJcbiAgICAgICAgICAgICAgbWVtYmVyc2hpcF9zdGF0dXM6IFwiQWN0aXZlXCIsXHJcbiAgICAgICAgICAgICAgbWVzc2FnZTogYWN0aW9uLnBheWxvYWQubWVzc2FnZSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHN0YXRlLmlzU3Vic2NyaWJlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzdGF0ZS5TdWJzY3JpYmVVc2VyID0ge307XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHN0YXRlLmVycm9yID0gXCJJbnZhbGlkIHJlc3BvbnNlIGZvcm1hdFwiO1xyXG4gICAgICAgICAgc3RhdGUuaXNTdWJzY3JpYmVkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdGF0ZS5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgfSlcclxuICAgICAgLmFkZENhc2UoY2hlY2tTdWJzY3JpcHRpb24ucmVqZWN0ZWQsIChzdGF0ZSwgYWN0aW9uKSA9PiB7XHJcbiAgICAgICAgc3RhdGUuZXJyb3IgPSBhY3Rpb24ucGF5bG9hZCB8fCBcIkZhaWxlZCB0byBjaGVjayBzdWJzY3JpcHRpb25cIjtcclxuICAgICAgICBzdGF0ZS5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICBzdGF0ZS5pc1N1YnNjcmliZWQgPSBmYWxzZTtcclxuICAgICAgfSk7XHJcbiAgfSxcclxufSk7XHJcblxyXG5leHBvcnQgY29uc3QgeyBjbGVhckVycm9yLCByZXNldExvYWRpbmcsIHJlc2V0U3Vic2NyaWJlIH0gPVxyXG4gIHN1YnNjcmlwdGlvblNsaWNlLmFjdGlvbnM7XHJcbmV4cG9ydCBkZWZhdWx0IHN1YnNjcmlwdGlvblNsaWNlLnJlZHVjZXI7XHJcbiIsImltcG9ydCB7IGNyZWF0ZVNsaWNlIH0gZnJvbSBcIkByZWR1eGpzL3Rvb2xraXRcIjtcclxuXHJcbmNvbnN0IGluaXRpYWxTdGF0ZSA9IHtcclxuICBpc19jaGF0X29wZW46IGZhbHNlLFxyXG4gIHNjcmVlblBhZ2U6IFwiaG9tZVRhYlwiLFxyXG4gIGNoYXRTY3JlZW46IHtcclxuICAgIGhlYWRlcjogZmFsc2UsXHJcbiAgICBuYW1lOiBudWxsLFxyXG4gIH0sXHJcbiAgbWVzc2FnZXM6IFtdLFxyXG4gIGNoYXRCb3RTZXR0aW5nOiBudWxsLFxyXG4gIGNoYXRCb3RBZG1pbjoge1xyXG4gICAgdXNlcjogbnVsbCxcclxuICAgIFRva2VuOiBudWxsLFxyXG4gIH0sXHJcbiAgaXNfUXVlcnlfU3VibWl0OiBmYWxzZSxcclxuICBsb2FkX2NoYXRfaGlzdG9yeTogZmFsc2UsXHJcbiAgaXNSZWNvcmRpbmc6IGZhbHNlLFxyXG59O1xyXG5cclxuY29uc3QgV2ViQm90ID0gY3JlYXRlU2xpY2Uoe1xyXG4gIG5hbWU6IFwiY2hhdGJvdC13ZWJcIixcclxuICBpbml0aWFsU3RhdGUsXHJcbiAgcmVkdWNlcnM6IHtcclxuICAgIHNldENoYXRPcGVuOiAoc3RhdGUpID0+IHtcclxuICAgICAgc3RhdGUuaXNfY2hhdF9vcGVuID0gIXN0YXRlLmlzX2NoYXRfb3BlbjtcclxuICAgIH0sXHJcbiAgICBzZXRTY3JlZW5QYWdlOiAoc3RhdGUsIGFjdGlvbikgPT4ge1xyXG4gICAgICBzdGF0ZS5zY3JlZW5QYWdlID0gYWN0aW9uLnBheWxvYWQ/LmN1cnJlbnRTY3JlZW47XHJcbiAgICB9LFxyXG4gICAgc2V0Q2hhdFNjcmVlbjogKHN0YXRlLCBhY3Rpb24pID0+IHtcclxuICAgICAgc3RhdGUuY2hhdFNjcmVlbi5oZWFkZXIgPSB0cnVlO1xyXG4gICAgICBzdGF0ZS5jaGF0U2NyZWVuLm5hbWUgPSBhY3Rpb24ucGF5bG9hZD8ubmFtZTtcclxuICAgIH0sXHJcbiAgICBkZWxldGVDaGF0U2NyZWVuOiAoc3RhdGUpID0+IHtcclxuICAgICAgc3RhdGUuY2hhdFNjcmVlbi5oZWFkZXIgPSBmYWxzZTtcclxuICAgICAgc3RhdGUuY2hhdFNjcmVlbi5uYW1lID0gbnVsbDtcclxuICAgIH0sXHJcbiAgICBzZXRNZXNzYWdlczogKHN0YXRlLCBhY3Rpb24pID0+IHtcclxuICAgICAgc3RhdGUubWVzc2FnZXMucHVzaCguLi5hY3Rpb24ucGF5bG9hZCk7XHJcbiAgICB9LFxyXG4gICAgc2V0Q2hhdGJvdFNldHRpbmc6IChzdGF0ZSwgYWN0aW9uKSA9PiB7XHJcbiAgICAgIHN0YXRlLmNoYXRCb3RTZXR0aW5nID0gYWN0aW9uLnBheWxvYWQ/LmRhdGE7XHJcbiAgICB9LFxyXG4gICAgc2V0Q2hhdGJvdEFkbWluOiAoc3RhdGUsIGFjdGlvbikgPT4ge1xyXG4gICAgICBzdGF0ZS5jaGF0Qm90QWRtaW4udXNlciA9IGFjdGlvbi5wYXlsb2FkPy51c2VyO1xyXG4gICAgICBzdGF0ZS5jaGF0Qm90QWRtaW4uVG9rZW4gPSBhY3Rpb24ucGF5bG9hZD8uVG9rZW47XHJcbiAgICB9LFxyXG4gICAgc2V0U3VibWl0OiAoc3RhdGUsIGFjdGlvbikgPT4ge1xyXG4gICAgICBzdGF0ZS5pc19RdWVyeV9TdWJtaXQgPSBhY3Rpb24ucGF5bG9hZDtcclxuICAgIH0sXHJcbiAgICBsb2FkSGlzdG95OiAoc3RhdGUsIGFjdGlvbikgPT4ge1xyXG4gICAgICBzdGF0ZS5sb2FkX2NoYXRfaGlzdG9yeSA9IGFjdGlvbi5wYXlsb2FkO1xyXG4gICAgfSxcclxuICAgIHNldFJlY29yZGluZzogKHN0YXRlLCBhY3Rpb24pID0+IHtcclxuICAgICAgc3RhdGUuaXNSZWNvcmRpbmcgPSBhY3Rpb24ucGF5bG9hZDtcclxuICAgIH0sXHJcbiAgfSxcclxufSk7XHJcblxyXG5leHBvcnQgY29uc3Qge1xyXG4gIHNldENoYXRPcGVuLFxyXG4gIHNldFNjcmVlblBhZ2UsXHJcbiAgc2V0Q2hhdFNjcmVlbixcclxuICBkZWxldGVDaGF0U2NyZWVuLFxyXG4gIHNldE1lc3NhZ2VzLFxyXG4gIHNldENoYXRib3RTZXR0aW5nLFxyXG4gIHNldENoYXRib3RBZG1pbixcclxuICBzZXRTdWJtaXQsXHJcbiAgbG9hZEhpc3RveSxcclxuICBzZXRSZWNvcmRpbmcsXHJcbn0gPSBXZWJCb3QuYWN0aW9ucztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFdlYkJvdC5yZWR1Y2VyO1xyXG4iLCJpbXBvcnQgeyBjb25maWd1cmVTdG9yZSB9IGZyb20gXCJAcmVkdXhqcy90b29sa2l0XCI7XHJcbmltcG9ydCBzdWJzY3JpcHRpb25SZWR1Y2VyIGZyb20gXCIuLi9TbGljZXMvU3Vic2NyaXB0aW9uU2xpY2UuanNcIjtcclxuaW1wb3J0IENoYXRib3RSZWR1Y2VyIGZyb20gXCIuLi9TbGljZXMvQ2hhdGJvdFNsaWNlLmpzXCI7XHJcbmltcG9ydCB1c2VyUmVkdWNlciBmcm9tIFwiLi4vU2xpY2VzL1VzZXJTbGljZS5qc1wiO1xyXG5pbXBvcnQgV2ViQm90UmVkdWNlciBmcm9tIFwiLi4vU2xpY2VzL1dlYkJvdFNsaWNlLmpzXCI7XHJcblxyXG5leHBvcnQgY29uc3Qgc3RvcmUgPSBjb25maWd1cmVTdG9yZSh7XHJcbiAgcmVkdWNlcjoge1xyXG4gICAgc3Vic2NyaXB0aW9uOiBzdWJzY3JpcHRpb25SZWR1Y2VyLFxyXG4gICAgY2hhdGJvdDogQ2hhdGJvdFJlZHVjZXIsXHJcbiAgICB1c2VyOiB1c2VyUmVkdWNlcixcclxuICAgIHdlYkJvdDogV2ViQm90UmVkdWNlcixcclxuICB9LFxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHN0b3JlO1xyXG4iLCJcbiAgICAgIGltcG9ydCBBUEkgZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanNcIjtcbiAgICAgIGltcG9ydCBkb21BUEkgZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZURvbUFQSS5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydEZuIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0QnlTZWxlY3Rvci5qc1wiO1xuICAgICAgaW1wb3J0IHNldEF0dHJpYnV0ZXMgZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMuanNcIjtcbiAgICAgIGltcG9ydCBpbnNlcnRTdHlsZUVsZW1lbnQgZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRTdHlsZUVsZW1lbnQuanNcIjtcbiAgICAgIGltcG9ydCBzdHlsZVRhZ1RyYW5zZm9ybUZuIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVUYWdUcmFuc2Zvcm0uanNcIjtcbiAgICAgIGltcG9ydCBjb250ZW50LCAqIGFzIG5hbWVkRXhwb3J0IGZyb20gXCIhIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vZ2xvYmFsLmNzc1wiO1xuICAgICAgXG4gICAgICBcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5zdHlsZVRhZ1RyYW5zZm9ybSA9IHN0eWxlVGFnVHJhbnNmb3JtRm47XG5vcHRpb25zLnNldEF0dHJpYnV0ZXMgPSBzZXRBdHRyaWJ1dGVzO1xuXG4gICAgICBvcHRpb25zLmluc2VydCA9IGluc2VydEZuLmJpbmQobnVsbCwgXCJoZWFkXCIpO1xuICAgIFxub3B0aW9ucy5kb21BUEkgPSBkb21BUEk7XG5vcHRpb25zLmluc2VydFN0eWxlRWxlbWVudCA9IGluc2VydFN0eWxlRWxlbWVudDtcblxudmFyIHVwZGF0ZSA9IEFQSShjb250ZW50LCBvcHRpb25zKTtcblxuXG5cbmV4cG9ydCAqIGZyb20gXCIhIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vZ2xvYmFsLmNzc1wiO1xuICAgICAgIGV4cG9ydCBkZWZhdWx0IGNvbnRlbnQgJiYgY29udGVudC5sb2NhbHMgPyBjb250ZW50LmxvY2FscyA6IHVuZGVmaW5lZDtcbiIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCJAd29yZHByZXNzL2VsZW1lbnRcIjtcclxuaW1wb3J0IHsgUHJvdmlkZXIgfSBmcm9tIFwicmVhY3QtcmVkdXhcIjtcclxuaW1wb3J0IENoYXRib3QgZnJvbSBcIkAvY29tcG9uZW50cy9DaGF0Ym90L0NoYXRib3RcIjtcclxuLy8gaW1wb3J0IENoYXRib3QgZnJvbSAnQC9mZWF0dXJlcy9jaGF0Ym90L0NoYXRib3RFbnRyeVBvaW50JztcclxuaW1wb3J0IHN0b3JlIGZyb20gXCJAL3JlZHV4L1N0b3JlL3N0b3JlLmpzXCI7XHJcbmltcG9ydCBcIkAvYXNzZXRzL2Nzcy9nbG9iYWwuY3NzXCI7XHJcblxyXG4vLyBDb25zb2xlIGxvZ2dpbmcgZm9yIGRlYnVnZ2luZ1xyXG5cclxuLy8gRnVuY3Rpb24gdG8gY2hlY2sgaWYgY2hhdGJvdCBzaG91bGQgYmUgcmVuZGVyZWQgKHZhbHVlIGZyb20gREIgdmlhIHdwX2xvY2FsaXplX3NjcmlwdClcclxuY29uc3Qgc2hvdWxkUmVuZGVyQ2hhdGJvdCA9ICgpID0+IHtcclxuICBjb25zdCB3ID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdy53cGFpUGx1Z2luU2V0dGluZ3MgOiBudWxsO1xyXG4gIGNvbnN0IHN0b3JlZFZhbHVlID1cclxuICAgIHcgJiYgdy5jaGF0Ym90VmlzaWJsZSAhPSBudWxsID8gU3RyaW5nKHcuY2hhdGJvdFZpc2libGUpIDogXCJmYWxzZVwiO1xyXG4gIGNvbnN0IHMgPSBzdG9yZWRWYWx1ZS50b0xvd2VyQ2FzZSgpO1xyXG4gIHJldHVybiBzID09PSBcInRydWVcIiB8fCBzID09PSBcIjFcIjtcclxufTtcclxuXHJcbi8vIEZ1bmN0aW9uIHRvIHNhZmVseSByZW5kZXIgd2l0aCBlcnJvciBoYW5kbGluZ1xyXG5jb25zdCByZW5kZXJDaGF0Ym90ID0gKGNvbnRhaW5lcikgPT4ge1xyXG4gIHRyeSB7XHJcbiAgICAvLyBDaGVjayBpZiB3ZSBzaG91bGQgcmVuZGVyIHRoZSBjaGF0Ym90XHJcbiAgICBpZiAoIXNob3VsZFJlbmRlckNoYXRib3QoKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoIWNvbnRhaW5lcikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICByZW5kZXIoXHJcbiAgICAgIDxQcm92aWRlciBzdG9yZT17c3RvcmV9PlxyXG4gICAgICAgIDxDaGF0Ym90IC8+XHJcbiAgICAgIDwvUHJvdmlkZXI+LFxyXG4gICAgICBjb250YWluZXIsXHJcbiAgICApO1xyXG4gIH0gY2F0Y2ggKGVycm9yKSB7fVxyXG59O1xyXG5cclxuLy8gSGFuZGxlciBmb3IgbW9kZSBjaGFuZ2VzXHJcbmNvbnN0IGhhbmRsZUFnZW50TW9kZUNoYW5nZSA9IChldmVudCkgPT4ge1xyXG4gIGlmIChldmVudC5kZXRhaWwubW9kZSA9PT0gXCJjaGF0Ym90XCIgfHwgIWV2ZW50LmRldGFpbC5tb2RlKSB7XHJcbiAgICAvLyBGaW5kIGFuZCByZW5kZXIgaW4gZXhpc3RpbmcgY29udGFpbmVyc1xyXG4gICAgY29uc3QgY2hhdGJvdFJvb3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIndwYWlfYWktY2hhdGJvdC1yb290XCIpO1xyXG4gICAgaWYgKGNoYXRib3RSb290KSB7XHJcbiAgICAgIHJlbmRlckNoYXRib3QoY2hhdGJvdFJvb3QpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgY29udGFpbmVycyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIud3AtYWktY2hhdGJvdC1jb250YWluZXJcIik7XHJcbiAgICBjb250YWluZXJzLmZvckVhY2goKGNvbnRhaW5lcikgPT4gcmVuZGVyQ2hhdGJvdChjb250YWluZXIpKTtcclxuICB9IGVsc2Uge1xyXG4gICAgLy8gQ29kZSB0byByZW1vdmUgY2hhdGJvdCBpZiBuZWVkZWRcclxuICAgIGNvbnN0IGNoYXRib3RSb290ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJ3cGFpX2FpLWNoYXRib3Qtcm9vdFwiKTtcclxuICAgIGlmIChjaGF0Ym90Um9vdCkge1xyXG4gICAgICByZW5kZXIobnVsbCwgY2hhdGJvdFJvb3QpO1xyXG4gICAgfVxyXG4gIH1cclxufTtcclxuXHJcbi8vIExpc3RlbiBmb3IgYWdlbnQgbW9kZSBjaGFuZ2VzXHJcbmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ3cGFpX2FnZW50X21vZGVfY2hhbmdlZFwiLCBoYW5kbGVBZ2VudE1vZGVDaGFuZ2UpO1xyXG5cclxuLy8gUmVuZGVyIHRvIHRoZSBtYWluIGNvbnRhaW5lclxyXG5jb25zdCBjaGF0Ym90Um9vdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwid3BhaV9haS1jaGF0Ym90LXJvb3RcIik7XHJcbmlmIChjaGF0Ym90Um9vdCkge1xyXG4gIHJlbmRlckNoYXRib3QoY2hhdGJvdFJvb3QpO1xyXG59IGVsc2Uge1xyXG59XHJcblxyXG4vLyBGaW5kIGFsbCBjaGF0Ym90IGNvbnRhaW5lcnMgb24gdGhlIHBhZ2VcclxuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIiwgKCkgPT4ge1xyXG4gIGNvbnN0IGNoYXRib3RDb250YWluZXJzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcclxuICAgIFwiLndwLWFpLWNoYXRib3QtY29udGFpbmVyXCIsXHJcbiAgKTtcclxuICBpZiAoY2hhdGJvdENvbnRhaW5lcnMubGVuZ3RoID4gMCAmJiBzaG91bGRSZW5kZXJDaGF0Ym90KCkpIHtcclxuICAgIGNoYXRib3RDb250YWluZXJzLmZvckVhY2goKGNvbnRhaW5lciwgaW5kZXgpID0+IHtcclxuICAgICAgcmVuZGVyQ2hhdGJvdChjb250YWluZXIpO1xyXG4gICAgfSk7XHJcbiAgfSBlbHNlIHtcclxuICB9XHJcbn0pO1xyXG4iXSwibmFtZXMiOlsiaXNMb2NhbGhvc3QiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImhvc3RuYW1lIiwiQkFTRV9VUkwiLCJvcmlnaW4iLCJjcmVhdGVTbGljZSIsImNyZWF0ZUFzeW5jVGh1bmsiLCJ0b2FzdCIsIkdldENoYXRib3REYXRhIiwicmVzcG9uc2UiLCJmZXRjaCIsIm1ldGhvZCIsImhlYWRlcnMiLCJ3cEFwaVNldHRpbmdzIiwibm9uY2UiLCJyZXNwb25zZV9kYXRhIiwianNvbiIsIlNhdmVBcHBlYXJhbmNlU2V0dGluZyIsImRhdGEiLCJhcGlEYXRhIiwiYmdfY29sb3IiLCJwcmltYXJ5Q29sb3IiLCJ0ZXh0X2NvbG9yIiwic2Vjb25kYXJ5Q29sb3IiLCJ0eXBlIiwiYm90SWNvbiIsImljb24iLCJmb3JtRGF0YSIsIkZvcm1EYXRhIiwiYXBwZW5kIiwiQmFja2dyb3VuZENvbG9yIiwidGV4dENvbG9yIiwiYm90SWNvblR5cGUiLCJjdXN0b21Cb3RJY29uIiwibGVuZ3RoIiwiYm9keSIsIlNhdmVNZXNzYWdlU2V0dGluZ3MiLCJjaGF0X2JvdF9tc2ciLCJ3ZWxjb21lTWVzc2FnZSIsInBsYWNlaG9sZGVyX21zZyIsInBsYWNlaG9sZGVyVGV4dCIsImNoYXRib3RfbmFtZSIsImhlYWRlclRleHQiLCJKU09OIiwic3RyaW5naWZ5IiwiQ2hhdGJvdFNsaWNlIiwibmFtZSIsImluaXRpYWxTdGF0ZSIsImlzX2xvYWRpbmciLCJsb2FkIiwiYXBwZWFyYW5jZSIsIm1lc3NhZ2UiLCJtb2RlIiwiZXJyb3IiLCJDaGF0Ym90RGF0YSIsInJlZHVjZXJzIiwiZXh0cmFSZWR1Y2VycyIsImJ1aWxkZXIiLCJhZGRDYXNlIiwicGVuZGluZyIsInN0YXRlIiwiZnVsZmlsbGVkIiwiYWN0aW9uIiwicGF5bG9hZCIsInN1Y2Nlc3MiLCJyZWplY3RlZCIsInJlZHVjZXIiLCJMU19LRVlTIiwiY2FjaGUiLCJoeWRyYXRlZCIsImluZmxpZ2h0SHlkcmF0ZSIsInNhdmVUaW1lciIsInBlbmRpbmdQYXRjaCIsIk9iamVjdCIsImNyZWF0ZSIsIndwUmVzdE5vbmNlIiwid3BhaVNlc3Npb25EYXRhIiwicmVzdFJvb3QiLCJyb290IiwiU3RyaW5nIiwicmVwbGFjZSIsImdldFVzZXJDbGllbnRTdG9yYWdlU3luYyIsImtleSIsInYiLCJ1bmRlZmluZWQiLCJzZXRVc2VyQ2xpZW50U3RvcmFnZVN5bmMiLCJ2YWx1ZSIsInMiLCJzY2hlZHVsZUZsdXNoIiwicmVtb3ZlVXNlckNsaWVudFN0b3JhZ2VTeW5jIiwiY2xlYXJUaW1lb3V0Iiwic2V0VGltZW91dCIsImZsdXNoUGVuZGluZyIsImtleXMiLCJwYXRjaCIsImsiLCJhc3NpZ24iLCJyZXMiLCJjcmVkZW50aWFscyIsIm9rIiwiQXJyYXkiLCJpc0FycmF5IiwicHVyZ2VMZWdhY3lMb2NhbFN0b3JhZ2UiLCJsb2NhbFN0b3JhZ2UiLCJyZW1vdmVJdGVtIiwibWlncmF0ZUxlZ2FjeUxvY2FsU3RvcmFnZVRvQ2FjaGUiLCJzZXNzaW9uU3RvcmFnZSIsImdldEl0ZW0iLCJjaGFuZ2VkIiwiaHlkcmF0ZVVzZXJDbGllbnRTdG9yYWdlIiwic2VydmVyT2siLCJtaWdyYXRlZCIsInNldEl0ZW0iLCJvdXQiLCJmbHVzaFVzZXJDbGllbnRTdG9yYWdlTm93IiwiV1BBSV9BVVRIX1NFU1NJT05fU1RPUkFHRV9LRVkiLCJjb25zdW1lQm9vdHN0cmFwU2Vzc2lvbkJsb2IiLCJib290IiwiYXV0aFNlc3Npb25CbG9iIiwiY2xlYXJBdXRoU2Vzc2lvbkluV29yZFByZXNzRGIiLCJhamF4dXJsIiwiVVJMU2VhcmNoUGFyYW1zIiwic2V0IiwiVG9rZW5IYW5kbGUiLCJhcGlFcnJvciIsImVycm9yTWVzc2FnZSIsInN0YXR1cyIsInJlcXVlc3QiLCJjcmVhdGVUb2tlbiIsInRva2VuIiwiZ2V0VG9rZW4iLCJibG9iIiwiYXV0aF90b2tlbiIsImRlbGV0ZVRva2VuIiwiQVBJX1VSTFMiLCJMT0NBTEhPU1QiLCJERVZFTE9QTUVOVCIsIlBST0RVQ1RJT04iLCJnZXRXcFJlc3ROb25jZSIsImFpQ29udGVudFNldHRpbmdzIiwiZ2V0QXV0b3dwQXBpQmFzZVVybCIsIndwYWlQbHVnaW5TZXR0aW5ncyIsImRpcmVjdFNhYVNBcGlVcmwiLCJ1IiwidHJpbSIsImVuZHNXaXRoIiwiQVBJX1VSTCIsIlBMVUdJTl9JTkZPIiwidmVyc2lvbiIsInBsdWdpblZlcnNpb24iLCJSRUFMVElNRV9DSEFUX1NUT1JBR0VfS0VZIiwiZ2V0UmVhbHRpbWVDaGF0RW5hYmxlZCIsInNldFJlYWx0aW1lQ2hhdEVuYWJsZWQiLCJlbmFibGVkIiwiVklTSVRPUl9JTlRFTExJR0VOQ0VfU1RPUkFHRV9LRVkiLCJnZXRWaXNpdG9ySW50ZWxsaWdlbmNlRW5hYmxlZCIsInNldFZpc2l0b3JJbnRlbGxpZ2VuY2VFbmFibGVkIiwiZ2V0UmVhbHRpbWVXc0Jhc2VVcmwiLCJyZWFsdGltZVdzSG9zdCIsImdldFNlc3Npb25JRCIsInNlc3Npb25JRCIsIkVuY3J5cHRQYXlsb2FkIiwianNvbkRhdGEiLCJlbmNvZGVkRGF0YSIsImJ0b2EiLCJ1bmVzY2FwZSIsImVuY29kZVVSSUNvbXBvbmVudCIsIkRlY3J5cHRQYXlsb2FkIiwiaXNCYXNlNjQiLCJkZWNvZGVkRGF0YSIsImF0b2IiLCJwYXJzZSIsInN0ciIsImUiLCJub3JtYWxpemVFbmNvZGVkRGF0YUZvclNlc3Npb24iLCJlbmNvZGVkX2RhdGEiLCJkZWNvZGVkIiwic3RvcmFnZVBheWxvYWQiLCJHZXREYXRhRnJvbUxvY2FsU3RvcmFnZSIsImRhdGFUb2tlblJlc3BvbnNlIiwiZGVjcnlwdGVkRGF0YSIsIlRpbWVEaWZmIiwiZGF0ZSIsInNlY29uZHMiLCJNYXRoIiwiZmxvb3IiLCJEYXRlIiwibWludXRlcyIsImhvdXJzIiwiZGF5cyIsIldwQWlQbHVnaW5zUHJpY2luZyIsInRpdGxlIiwiYXJ0aWNsZXNQZXJNb250aCIsImNoYXRib3RSZXNwb25zZXMiLCJwcmljZSIsInBlcmlvZCIsImRlc2NyaXB0aW9uIiwiZmVhdHVyZXMiLCJwb3B1bGFyIiwiUmVhY3QiLCJCb3giLCJUeXBvZ3JhcGh5IiwicGFyc2VJbmxpbmUiLCJ0ZXh0IiwicGFydHMiLCJpIiwibGVuIiwic3RhcnRzV2l0aCIsImVuZCIsImluZGV4T2YiLCJwdXNoIiwiY3JlYXRlRWxlbWVudCIsInNsaWNlIiwiY29tcG9uZW50Iiwic3giLCJweCIsInB5IiwiYm9yZGVyUmFkaXVzIiwiYmdjb2xvciIsImZvbnRGYW1pbHkiLCJmb250U2l6ZSIsIm5leHQiLCJib2xkQXQiLCJ0aWNrQXQiLCJtaW4iLCJDaGF0Ym90TWFya2Rvd25Db250ZW50IiwiaXNVc2VyIiwiaXNTdHJlYW1pbmciLCJ2YXJpYW50Iiwid2hpdGVTcGFjZSIsIndvcmRCcmVhayIsImxpbmVIZWlnaHQiLCJmb250V2VpZ2h0IiwibGV0dGVyU3BhY2luZyIsImJsb2NrcyIsInJlc3QiLCJiaSIsImZlbmNlIiwiY29udGVudCIsImVuZEZlbmNlIiwibWIiLCJtYXAiLCJibG9jayIsImlkeCIsIm0iLCJwIiwib3ZlcmZsb3ciLCJtYXhXaWR0aCIsImJvcmRlciIsImJvcmRlckNvbG9yIiwibGluZXMiLCJzcGxpdCIsIm5vZGVzIiwibGkiLCJsaXN0QnVmIiwiZmx1c2hMaXN0IiwicGwiLCJjb2xvciIsIml0ZW0iLCJqIiwiZGlzcGxheSIsImxpbmUiLCJsaXN0TWF0Y2giLCJtYXRjaCIsIkZyYWdtZW50IiwidXNlU3RhdGUiLCJ1c2VFZmZlY3QiLCJ1c2VSZWYiLCJQYXBlciIsIkF2YXRhciIsIkljb25CdXR0b24iLCJUb29sdGlwIiwiVGV4dEZpZWxkIiwiQ2hlY2tJY29uIiwiRXJyb3JPdXRsaW5lSWNvbiIsIlJlZnJlc2hJY29uIiwiSG91cmdsYXNzRW1wdHlJY29uIiwia2V5ZnJhbWVzIiwiZW50ZXJVcCIsInN0cmVhbUdsb3ciLCJJbmxpbmVGb3JtRmllbGQiLCJwcm9wcyIsIl9leHRlbmRzIiwiYmFja2dyb3VuZENvbG9yIiwiYm94U2hhZG93IiwicGFkZGluZyIsIkNoYXRib3RNZXNzYWdlQnViYmxlIiwib25TdHJlYW1Db21wbGV0ZSIsIm9uUmV0cnkiLCJ2aXNpYmxlTGVuIiwic2V0VmlzaWJsZUxlbiIsInRpbWVyUmVmIiwic3RyZWFtTm90aWZpZWRSZWYiLCJjdXJyZW50IiwiZnVsbCIsImlkIiwidGljayIsImNoIiwiZGVsYXkiLCJ0ZXN0Iiwicm91bmQiLCJyYW5kb20iLCJmb3JtRmllbGQiLCJmbGV4RGlyZWN0aW9uIiwiYWxpZ25JdGVtcyIsIm1sIiwiZnVsbFdpZHRoIiwicGxhY2Vob2xkZXIiLCJvbkNoYW5nZSIsImhlbHBlclRleHQiLCJhdXRvRm9jdXMiLCJvbktleVByZXNzIiwicHJldmVudERlZmF1bHQiLCJvblN1Ym1pdCIsImZ1bGxMZW4iLCJkaXNwbGF5VGV4dCIsInN0cmVhbURvbmUiLCJzaG93TWQiLCJ1c2VyQnViYmxlQmciLCJ1c2VyVGV4dCIsImFuaW1hdGlvbiIsIm9wYWNpdHkiLCJnYXAiLCJ3aWR0aCIsImp1c3RpZnlDb250ZW50IiwiaGVpZ2h0IiwicG9zaXRpb24iLCJlbGV2YXRpb24iLCJ0cmFuc2l0aW9uIiwiYmFja2dyb3VuZCIsImluc2V0IiwicG9pbnRlckV2ZW50cyIsInNvdXJjZXMiLCJtdCIsInB0IiwiYm9yZGVyVG9wIiwic291cmNlIiwiaW5kZXgiLCJyZWxldmFuY2UiLCJjbGFzc05hbWUiLCJmbGV4V3JhcCIsInRpbWVzdGFtcCIsInRvTG9jYWxlVGltZVN0cmluZyIsImhvdXIiLCJtaW51dGUiLCJzaXplIiwib25DbGljayIsIm1lbW8iLCJib3VuY2UiLCJzaGltbWVyIiwiQ2hhdGJvdFR5cGluZ0luZGljYXRvciIsImFyaWFMYWJlbCIsImF2YXRhckxhYmVsIiwiZnJvbSIsInRyYW5zZm9ybSIsInRvIiwicm9sZSIsImJhY2tncm91bmRTaXplIiwiekluZGV4IiwiYW5pbWF0aW9uRGVsYXkiLCJCdXR0b24iLCJGYWRlIiwiS2V5Ym9hcmRBcnJvd0Rvd25JY29uIiwic3R5bGVkIiwiTWVzc2FnZUNvbnRhaW5lciIsInRoZW1lIiwiZmxleCIsInNwYWNpbmciLCJvdmVyZmxvd1kiLCJvdmVyZmxvd1giLCJzY3JvbGxCZWhhdmlvciIsIkNoYXRib3RNZXNzYWdlTGlzdCIsImNvbnRhaW5lclJlZiIsImJvdHRvbVJlZiIsIm9uU2Nyb2xsIiwibWVzc2FnZXMiLCJjaGlsZHJlbkFib3ZlRW5kIiwiaXNMb2FkaW5nIiwibGl2ZUFnZW50VHlwaW5nIiwic2hvd05ld01lc3NhZ2VzIiwib25KdW1wVG9MYXRlc3QiLCJyZWYiLCJpbiIsImJvdHRvbSIsImxlZnQiLCJyaWdodCIsInN0YXJ0SWNvbiIsInRleHRUcmFuc2Zvcm0iLCJ1c2VDYWxsYmFjayIsIkJPVFRPTV9USFJFU0hPTERfUFgiLCJ1c2VTbWFydENoYXRTY3JvbGwiLCJjaGF0SGlzdG9yeSIsInN0aWNrVG9Cb3R0b21SZWYiLCJwcmV2Q291bnRSZWYiLCJzZXRTaG93TmV3TWVzc2FnZXMiLCJlbCIsImRpc3QiLCJzY3JvbGxIZWlnaHQiLCJzY3JvbGxUb3AiLCJjbGllbnRIZWlnaHQiLCJncmV3IiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwic2Nyb2xsSW50b1ZpZXciLCJiZWhhdmlvciIsInNjcm9sbFRvQm90dG9tIiwiQmFkZ2UiLCJDaXJjdWxhclByb2dyZXNzIiwiSW5wdXRBZG9ybm1lbnQiLCJ1c2VUaGVtZSIsIlNlbmRJY29uIiwiQ2xvc2VJY29uIiwiU21hcnRUb3lJY29uIiwiQ2hhdEJ1YmJsZU91dGxpbmVJY29uIiwiQXR0YWNoRmlsZUljb24iLCJQZXJzb25JY29uIiwiUmVjb3JkVm9pY2VPdmVySWNvbiIsIkVtYWlsSWNvbiIsInVzZURpc3BhdGNoIiwidXNlU2VsZWN0b3IiLCJyZXNvbHZlQ2hhdGJvdFdpZGdldFZpc2libGUiLCJmcm9tQ2FjaGUiLCJjaGF0Ym90VmlzaWJsZSIsInRvTG93ZXJDYXNlIiwiZmFkZUluIiwic2xpZGVVcCIsInB1bHNlQW5pbWF0aW9uIiwicmlwcGxlIiwiQ2hhdFdpbmRvdyIsIm1heEhlaWdodCIsImJyZWFrcG9pbnRzIiwiZG93biIsIkNoYXRIZWFkZXIiLCJ0ZXh0Y29sb3IiLCJwYWxldHRlIiwicHJpbWFyeSIsIm1haW4iLCJib3JkZXJUb3BMZWZ0UmFkaXVzIiwiYm9yZGVyVG9wUmlnaHRSYWRpdXMiLCJtYXJnaW5MZWZ0IiwiQ2hhdElucHV0IiwiSW5wdXRGaWVsZCIsIm1hcmdpblJpZ2h0IiwiQ2hhdFRvZ2dsZSIsImRhcmsiLCJGb3JtUmVzcG9uc2UiLCJtYXJnaW5Cb3R0b20iLCJGb3JtRmllbGQiLCJNQVhfUkVUUklFUyIsIlRJTUVPVVRfRFVSQVRJT04iLCJnZXRCb3RJY29uIiwic3JjIiwiYWx0Iiwic3R5bGUiLCJDaGF0Ym90IiwiaXNPcGVuIiwic2V0SXNPcGVuIiwiaW5wdXQiLCJzZXRJbnB1dCIsInNldENoYXRIaXN0b3J5Iiwic2V0SXNMb2FkaW5nIiwiaGFuZGxlU3RyZWFtQ29tcGxldGUiLCJtc2dJZCIsInByZXYiLCJ1c2VySWQiLCJ0b1N0cmluZyIsInN1YnN0ciIsInNob3dVc2VyRm9ybSIsInNldFNob3dVc2VyRm9ybSIsInVzZXJGb3JtRGF0YSIsInNldFVzZXJGb3JtRGF0YSIsImVtYWlsIiwicGhvbmUiLCJmb3JtU3RlcCIsInNldEZvcm1TdGVwIiwicmVzcG9uc2VDb3VudCIsInNldFJlc3BvbnNlQ291bnQiLCJkaXNwYXRjaCIsImNoYXRib3RVc2VyU2V0dGluZyIsIlNldENoYXRib3RVc2VyU2V0dGluZyIsInVzZXJJbmZvIiwic2V0VXNlckluZm8iLCJjdXJyZW50UXVlc3Rpb24iLCJzZXRDdXJyZW50UXVlc3Rpb24iLCJpc0NvbGxlY3RpbmdJbmZvIiwic2V0SXNDb2xsZWN0aW5nSW5mbyIsImluZm9Db2xsZWN0aW9uQXR0ZW1wdGVkIiwic2V0SW5mb0NvbGxlY3Rpb25BdHRlbXB0ZWQiLCJzaG93TGl2ZUNoYXRFbWFpbEZvcm0iLCJzZXRTaG93TGl2ZUNoYXRFbWFpbEZvcm0iLCJsaXZlQ2hhdEVtYWlsIiwic2V0TGl2ZUNoYXRFbWFpbCIsImxpdmVDaGF0RW1haWxFcnJvciIsInNldExpdmVDaGF0RW1haWxFcnJvciIsImxpdmVDaGF0UmVxdWVzdGVkIiwic2V0TGl2ZUNoYXRSZXF1ZXN0ZWQiLCJsaXZlQ2hhdFJlcXVlc3RJZCIsInNldExpdmVDaGF0UmVxdWVzdElkIiwibGl2ZUNoYXRBY2NlcHRlZCIsInNldExpdmVDaGF0QWNjZXB0ZWQiLCJsaXZlQ2hhdENvbm5lY3RpbmciLCJzZXRMaXZlQ2hhdENvbm5lY3RpbmciLCJzZXRMaXZlQWdlbnRUeXBpbmciLCJ3c0xpdmVDaGF0UmVmIiwibGl2ZUNoYXRBY2NlcHRlZFJlZiIsImN1c3RvbWVyVHlwaW5nSWRsZVRpbWVyUmVmIiwiY3VzdG9tZXJUeXBpbmdTZW50VHJ1ZVJlZiIsImNsZWFyQ3VzdG9tZXJUeXBpbmdJZGxlVGltZXIiLCJzZW5kQ3VzdG9tZXJUeXBpbmciLCJ0eXBpbmciLCJ3cyIsInJlYWR5U3RhdGUiLCJXZWJTb2NrZXQiLCJPUEVOIiwic2VuZCIsIl8iLCJmbHVzaEN1c3RvbWVyVHlwaW5nU3RvcHBlZCIsImhhbmRsZUNoYXRJbnB1dENoYW5nZSIsInRhcmdldCIsImRhdGFUb2tlbiIsImF1dGhvcml6YXRpb24iLCJ1c2VyIiwiaXNfY2hhdGJvdF9sb2FkIiwiY2hhdGJvdCIsImNoYXRib3RTdHlsZXMiLCJzZXRDaGF0Ym90U3R5bGVzIiwiaXNWaXNpYmxlIiwic2V0SXNWaXNpYmxlIiwiY2hlY2tWaXNpYmlsaXR5Iiwib25DdXN0b20iLCJhZGRFdmVudExpc3RlbmVyIiwiZG9jdW1lbnQiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwidG9JU09TdHJpbmciLCJ3ZWxjb21lTXNnIiwiaW5pdF9tc2ciLCJib3RfYmdfY29sb3IiLCJib3RfdGV4dF9jb2xvciIsImJvdF9pY29uIiwicGxhY2Vob2xkZXJfdGV4dCIsImJvdF9uYW1lIiwiaGFuZGxlU3RhcnRMaXZlQ2hhdENsaWNrIiwiY29ubmVjdExpdmVDaGF0V3MiLCJjb21wYW55TmFtZSIsImN1c3RvbWVySWQiLCJlbWFpbElkIiwiYmFzZSIsIndzVXJsIiwib25vcGVuIiwib25tZXNzYWdlIiwiZXZlbnQiLCJtc2ciLCJyZXF1ZXN0X2lkIiwibm93IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiZXJyIiwib25jbG9zZSIsImNvZGUiLCJvbmVycm9yIiwiaGFuZGxlU3RhcnRMaXZlQ2hhdCIsImVtYWlsUmVnZXgiLCJyZWFsdGltZUNvbXBhbnlOYW1lIiwiZGlzcGF0Y2hFdmVudCIsIkN1c3RvbUV2ZW50IiwiZGV0YWlsIiwiY2xvc2UiLCJoYW5kbGVTdWJtaXQiLCJyZXRyeUNvdW50IiwiZm9yY2VkVGV4dCIsInJldHJ5VXNlcklkIiwidGV4dFRvU2VuZCIsImluZm9Db2xsZWN0aW9uUmVzcG9uc2UiLCJoYW5kbGVVc2VySW5mb0NvbGxlY3Rpb24iLCJzdGFtcCIsIndpdGhJZCIsIm11bHRpUmVzcG9uc2UiLCJyZXNwb25zZXMiLCJmb3JFYWNoIiwidXNlck1zZ0lkIiwidXNlck1lc3NhZ2UiLCJjb250cm9sbGVyIiwiQWJvcnRDb250cm9sbGVyIiwidGltZW91dElkIiwiYWJvcnQiLCJFcnJvciIsImF1dGhQYXlsb2FkIiwic2Vzc2lvbl9pZCIsImp3dF90b2tlbiIsImxpY2Vuc2Vfa2V5IiwiZG9tYWluTmFtZSIsImRvbWFpbl9uYW1lIiwicmVxdWVzdERhdGEiLCJjb252ZXJzYXRpb25faWQiLCJjb250ZXh0IiwiZW5jcnlwdGVkQXV0aERhdGEiLCJlbmNyeXB0ZWRSZXF1ZXN0RGF0YSIsInF1ZXJ5IiwiZW5jcnlwdGVkX2RhdGEiLCJzaWduYWwiLCJyYXdSZXNwb25zZSIsInBhcnNlZFJlc3BvbnNlIiwiY29uc29sZSIsImxvZyIsImVycm9ycyIsImVycm9yTXNnIiwiZGVjcnlwdEVycm9yIiwibWF0Y2hlcyIsImJvdFJlc3BvbnNlVGV4dCIsImJvdElkIiwiZGVyaXZlZFNvdXJjZXMiLCJib3RNZXNzYWdlIiwidGltZW91dE1lc3NhZ2UiLCJpbmNsdWRlcyIsInJldHJ5TWVzc2FnZSIsImhhbmRsZVJldHJ5IiwiaGFuZGxlS2V5UHJlc3MiLCJzaGlmdEtleSIsInN0b3JlRm9ybURhdGEiLCJmaWVsZFR5cGUiLCJmaWVsZFZhbHVlIiwidXNlcl9pZCIsImVuY3J5cHRlZFBheWxvYWQiLCJmaWVsZF90eXBlIiwiZmllbGRfdmFsdWUiLCJsb3dlck1lc3NhZ2UiLCJoaWdoSW50ZW50VHJpZ2dlcnMiLCJzaG91bGRDb2xsZWN0SW5mbyIsInNvbWUiLCJ3b3JkIiwiY2hhdFJlcXVlc3REYXRhIiwiZW5jcnlwdGVkQ2hhdERhdGEiLCJjaGF0UmVzcG9uc2UiLCJwaG9uZVJlZ2V4Iiwib3ZlcmxhcCIsImFuY2hvck9yaWdpbiIsInZlcnRpY2FsIiwiaG9yaXpvbnRhbCIsInRvcCIsImJhY2tkcm9wRmlsdGVyIiwib25LZXlEb3duIiwic3RvcFByb3BhZ2F0aW9uIiwiSW5wdXRQcm9wcyIsInN0YXJ0QWRvcm5tZW50Iiwib25CbHVyIiwiYXV0b0NvbXBsZXRlIiwiYXV0b0NvcnJlY3QiLCJhdXRvQ2FwaXRhbGl6ZSIsInNwZWxsQ2hlY2siLCJpbnB1dFByb3BzIiwiZm9ybSIsImVuZEFkb3JubWVudCIsInBsYWNlbWVudCIsImFycm93IiwiZGlzYWJsZWQiLCJub3JtYWxpemVVc2VySW5mb0RhdGEiLCJyYXciLCJwYXJzZWQiLCJ1c2VyRGF0YSIsImlzTG9nZ2VkSW4iLCJHZXRVc2VyTG9hZGVyIiwiaXNWZXJpZnkiLCJoYXNJbml0TG9hZCIsImZldGNoVXNlckRhdGEiLCJlbmNvZGUiLCJyZWplY3RXaXRoVmFsdWUiLCJlbmNyeXB0ZWRfcGF5bG9hZCIsInVzZXJTbGljZSIsInNldFVzZXJEYXRhIiwibWVyZ2VVc2VyRmllbGRzIiwic2V0SXNMb2dnZWRJbiIsIkxvZ2luVXNlciIsInZlcmlmaWVkIiwibG9nb3V0VXNlciIsInNldEF1dGhUb2tlbiIsInNldEluaXRMb2FkIiwiQm9vbGVhbiIsImFjdGlvbnMiLCJkZXJpdmVTdWJzY3JpcHRpb25Gcm9tVXNlciIsIm1zIiwibWVtYmVyc2hpcF9zdGF0dXMiLCJzdWJzY3JpYmVkIiwiaXNfc3Vic2NyaWJlZCIsInN1YnNjcmlwdGlvbl9hY3RpdmUiLCJOdW1iZXIiLCJpc1N1YnNjcmliZWQiLCJzdWJzY3JpcHRpb25fbWVzc2FnZSIsIm1lbWJlcnNoaXBfbWVzc2FnZSIsIlN1YnNjcmliZVVzZXIiLCJzdWJzY3JpcHRpb25fZGV0YWlscyIsInBsYW5fbmFtZSIsImN1cnJlbnRfcGxhbiIsInN1YnNjcmlwdGlvbl90aWVyIiwiY2hlY2tTdWJzY3JpcHRpb24iLCJnZXRTdGF0ZSIsInVzZXJTdGF0ZSIsIlZhcmlmaWNhdGlvbiIsImVuY3J5cHRlZFJlc3BvbnNlIiwiZGVjcnlwdGVkVXNlckRhdGEiLCJmdWxsUmVzcG9uc2UiLCJzdWJzY3JpcHRpb25TbGljZSIsImNsZWFyRXJyb3IiLCJyZXNldExvYWRpbmciLCJyZXNldFN1YnNjcmliZSIsInVzZXJfZGF0YSIsImlzX2NoYXRfb3BlbiIsInNjcmVlblBhZ2UiLCJjaGF0U2NyZWVuIiwiaGVhZGVyIiwiY2hhdEJvdFNldHRpbmciLCJjaGF0Qm90QWRtaW4iLCJUb2tlbiIsImlzX1F1ZXJ5X1N1Ym1pdCIsImxvYWRfY2hhdF9oaXN0b3J5IiwiaXNSZWNvcmRpbmciLCJXZWJCb3QiLCJzZXRDaGF0T3BlbiIsInNldFNjcmVlblBhZ2UiLCJjdXJyZW50U2NyZWVuIiwic2V0Q2hhdFNjcmVlbiIsImRlbGV0ZUNoYXRTY3JlZW4iLCJzZXRNZXNzYWdlcyIsInNldENoYXRib3RTZXR0aW5nIiwic2V0Q2hhdGJvdEFkbWluIiwic2V0U3VibWl0IiwibG9hZEhpc3RveSIsInNldFJlY29yZGluZyIsImNvbmZpZ3VyZVN0b3JlIiwic3Vic2NyaXB0aW9uUmVkdWNlciIsIkNoYXRib3RSZWR1Y2VyIiwidXNlclJlZHVjZXIiLCJXZWJCb3RSZWR1Y2VyIiwic3RvcmUiLCJzdWJzY3JpcHRpb24iLCJ3ZWJCb3QiLCJyZW5kZXIiLCJQcm92aWRlciIsInNob3VsZFJlbmRlckNoYXRib3QiLCJ3Iiwic3RvcmVkVmFsdWUiLCJyZW5kZXJDaGF0Ym90IiwiY29udGFpbmVyIiwiaGFuZGxlQWdlbnRNb2RlQ2hhbmdlIiwiY2hhdGJvdFJvb3QiLCJnZXRFbGVtZW50QnlJZCIsImNvbnRhaW5lcnMiLCJxdWVyeVNlbGVjdG9yQWxsIiwiY2hhdGJvdENvbnRhaW5lcnMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9267\n")},9452:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(" __webpack_require__.d(__webpack_exports__,{\n EU:()=>(createEmptyBreakpointObject),\n NI:()=>(handleBreakpoints),\n vf:()=>(removeUnusedBreakpoints),\n zu:()=>(values)\n});\n\n\n\n\n\n\n// The breakpoint **start** at this value.\n// For instance with the first breakpoint xs:[xs,sm[.\nconst values={\n xs:0,\n // phone\n sm:600,\n // tablet\n md:900,\n // small laptop\n lg:1200,\n // desktop\n xl:1536 // large screen\n};\nconst defaultBreakpoints={\n // Sorted ASC by size. That's important.\n // It can't be configured as it's used statically for propTypes.\n keys:['xs','sm','md','lg','xl'],\n up:key=>`@media (min-width:${values[key]}px)`\n};\nfunction handleBreakpoints(props,propValue,styleFromPropValue){\n const theme=props.theme ||{};\n if (Array.isArray(propValue)){\n const themeBreakpoints=theme.breakpoints || defaultBreakpoints;\n return propValue.reduce((acc,item,index)=>{\n acc[themeBreakpoints.up(themeBreakpoints.keys[index])]=styleFromPropValue(propValue[index]);\n return acc;\n});\n}\n if (typeof propValue==='object'){\n const themeBreakpoints=theme.breakpoints || defaultBreakpoints;\n return Object.keys(propValue).reduce((acc,breakpoint)=>{\n // key is breakpoint\n if (Object.keys(themeBreakpoints.values || values).indexOf(breakpoint) !==-1){\n const mediaKey=themeBreakpoints.up(breakpoint);\n acc[mediaKey]=styleFromPropValue(propValue[breakpoint],breakpoint);\n}else{\n const cssKey=breakpoint;\n acc[cssKey]=propValue[cssKey];\n}\n return acc;\n});\n}\n const output=styleFromPropValue(propValue);\n return output;\n}\nfunction breakpoints(styleFunction){\n // false positive\n // eslint-disable-next-line react/function-component-definition\n const newStyleFunction=props=>{\n const theme=props.theme ||{};\n const base=styleFunction(props);\n const themeBreakpoints=theme.breakpoints || defaultBreakpoints;\n const extended=themeBreakpoints.keys.reduce((acc,key)=>{\n if (props[key]){\n acc=acc ||{};\n acc[themeBreakpoints.up(key)]=styleFunction(_extends({\n theme\n},props[key]));\n}\n return acc;\n},null);\n return merge(base,extended);\n};;\n newStyleFunction.filterProps=['xs','sm','md','lg','xl',...styleFunction.filterProps];\n return newStyleFunction;\n}){\n var _breakpointsInput$key;\n const breakpointsInOrder=(_breakpointsInput$key=breakpointsInput.keys)==null ? void 0 :_breakpointsInput$key.reduce((acc,key)=>{\n const breakpointStyleKey=breakpointsInput.up(key);;\n return acc;\n});;\n}\nfunction removeUnusedBreakpoints(breakpointKeys,style){\n return breakpointKeys.reduce((acc,key)=>{\n const breakpointOutput=acc[key];\n const isBreakpointUnused=!breakpointOutput || Object.keys(breakpointOutput).length===0;\n if (isBreakpointUnused){\n delete acc[key];\n}\n return acc;\n},style);\n}\nfunction mergeBreakpointsInOrder(breakpointsInput,...styles){\n const emptyBreakpoints=createEmptyBreakpointObject(breakpointsInput););\n return removeUnusedBreakpoints(Object.keys(emptyBreakpoints),mergedOutput);\n}\n\n// compute base for responsive values;e.g.,\n// [1,2,3]=>{xs:true,sm:true,md:true}\n//{xs:1,sm:2,md:3}=>{xs:true,sm:true,md:true}\nfunction computeBreakpointsBase(breakpointValues,themeBreakpoints){\n // fixed value\n if (typeof breakpointValues !=='object'){\n return{};\n};\n const breakpointsKeys=Object.keys(themeBreakpoints);\n if (Array.isArray(breakpointValues)){\n breakpointsKeys.forEach((breakpoint,i)=>{\n if (i < breakpointValues.length){\n base[breakpoint]=true;\n}\n});\n}else{\n breakpointsKeys.forEach(breakpoint=>{\n if (breakpointValues[breakpoint] !=null){\n base[breakpoint]=true;\n}\n});\n}\n return base;\n}\nfunction resolveBreakpointValues({\n values:breakpointValues,\n breakpoints:themeBreakpoints,\n base:customBase\n}){\n const base=customBase || computeBreakpointsBase(breakpointValues,themeBreakpoints);\n const keys=Object.keys(base);\n if (keys.length===0){\n return breakpointValues;\n}\n let previous;\n return keys.reduce((acc,breakpoint,i)=>{\n if (Array.isArray(breakpointValues)){\n acc[breakpoint]=breakpointValues[i] !=null ? breakpointValues[i]:breakpointValues[previous];\n previous=i;\n}else if (typeof breakpointValues==='object'){\n acc[breakpoint]=breakpointValues[breakpoint] !=null ? breakpointValues[breakpoint]:breakpointValues[previous];\n previous=breakpoint;\n}else{\n acc[breakpoint]=breakpointValues;\n}\n return acc;\n});\n}\n var __WEBPACK_DEFAULT_EXPORT__=((null && (breakpoints)));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTQ1Mi5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQTBEO0FBQ3ZCO0FBQ1U7QUFDakI7O0FBRTVCO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsWUFBWTtBQUM5QztBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxJQUFJO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssSUFBSTtBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLCtCQUErQixNQUFxQyxHQUFHLENBTW5FO0FBQ0o7QUFDQTtBQUNBO0FBQ08sMERBQTBEO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLElBQUk7QUFDUDtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNPO0FBQ1A7QUFDQSxxR0FBcUc7QUFDckc7QUFDQTs7QUFFQSx1Q0FBdUM7QUFDdkMsZUFBZTtBQUNmLElBQUkscUJBQXFCLElBQUk7QUFDdEI7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLEdBQUcsSUFBSTtBQUNQO0FBQ0Esc0VBQWUsMkRBQVciLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vYnJlYWtwb2ludHMuanM/N2M2OCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgZGVlcG1lcmdlIGZyb20gJ0BtdWkvdXRpbHMvZGVlcG1lcmdlJztcbmltcG9ydCBtZXJnZSBmcm9tICcuL21lcmdlJztcblxuLy8gVGhlIGJyZWFrcG9pbnQgKipzdGFydCoqIGF0IHRoaXMgdmFsdWUuXG4vLyBGb3IgaW5zdGFuY2Ugd2l0aCB0aGUgZmlyc3QgYnJlYWtwb2ludCB4czogW3hzLCBzbVsuXG5leHBvcnQgY29uc3QgdmFsdWVzID0ge1xuICB4czogMCxcbiAgLy8gcGhvbmVcbiAgc206IDYwMCxcbiAgLy8gdGFibGV0XG4gIG1kOiA5MDAsXG4gIC8vIHNtYWxsIGxhcHRvcFxuICBsZzogMTIwMCxcbiAgLy8gZGVza3RvcFxuICB4bDogMTUzNiAvLyBsYXJnZSBzY3JlZW5cbn07XG5jb25zdCBkZWZhdWx0QnJlYWtwb2ludHMgPSB7XG4gIC8vIFNvcnRlZCBBU0MgYnkgc2l6ZS4gVGhhdCdzIGltcG9ydGFudC5cbiAgLy8gSXQgY2FuJ3QgYmUgY29uZmlndXJlZCBhcyBpdCdzIHVzZWQgc3RhdGljYWxseSBmb3IgcHJvcFR5cGVzLlxuICBrZXlzOiBbJ3hzJywgJ3NtJywgJ21kJywgJ2xnJywgJ3hsJ10sXG4gIHVwOiBrZXkgPT4gYEBtZWRpYSAobWluLXdpZHRoOiR7dmFsdWVzW2tleV19cHgpYFxufTtcbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVCcmVha3BvaW50cyhwcm9wcywgcHJvcFZhbHVlLCBzdHlsZUZyb21Qcm9wVmFsdWUpIHtcbiAgY29uc3QgdGhlbWUgPSBwcm9wcy50aGVtZSB8fCB7fTtcbiAgaWYgKEFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xuICAgIGNvbnN0IHRoZW1lQnJlYWtwb2ludHMgPSB0aGVtZS5icmVha3BvaW50cyB8fCBkZWZhdWx0QnJlYWtwb2ludHM7XG4gICAgcmV0dXJuIHByb3BWYWx1ZS5yZWR1Y2UoKGFjYywgaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgIGFjY1t0aGVtZUJyZWFrcG9pbnRzLnVwKHRoZW1lQnJlYWtwb2ludHMua2V5c1tpbmRleF0pXSA9IHN0eWxlRnJvbVByb3BWYWx1ZShwcm9wVmFsdWVbaW5kZXhdKTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pO1xuICB9XG4gIGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgIGNvbnN0IHRoZW1lQnJlYWtwb2ludHMgPSB0aGVtZS5icmVha3BvaW50cyB8fCBkZWZhdWx0QnJlYWtwb2ludHM7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHByb3BWYWx1ZSkucmVkdWNlKChhY2MsIGJyZWFrcG9pbnQpID0+IHtcbiAgICAgIC8vIGtleSBpcyBicmVha3BvaW50XG4gICAgICBpZiAoT2JqZWN0LmtleXModGhlbWVCcmVha3BvaW50cy52YWx1ZXMgfHwgdmFsdWVzKS5pbmRleE9mKGJyZWFrcG9pbnQpICE9PSAtMSkge1xuICAgICAgICBjb25zdCBtZWRpYUtleSA9IHRoZW1lQnJlYWtwb2ludHMudXAoYnJlYWtwb2ludCk7XG4gICAgICAgIGFjY1ttZWRpYUtleV0gPSBzdHlsZUZyb21Qcm9wVmFsdWUocHJvcFZhbHVlW2JyZWFrcG9pbnRdLCBicmVha3BvaW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNzc0tleSA9IGJyZWFrcG9pbnQ7XG4gICAgICAgIGFjY1tjc3NLZXldID0gcHJvcFZhbHVlW2Nzc0tleV07XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcbiAgfVxuICBjb25zdCBvdXRwdXQgPSBzdHlsZUZyb21Qcm9wVmFsdWUocHJvcFZhbHVlKTtcbiAgcmV0dXJuIG91dHB1dDtcbn1cbmZ1bmN0aW9uIGJyZWFrcG9pbnRzKHN0eWxlRnVuY3Rpb24pIHtcbiAgLy8gZmFsc2UgcG9zaXRpdmVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L2Z1bmN0aW9uLWNvbXBvbmVudC1kZWZpbml0aW9uXG4gIGNvbnN0IG5ld1N0eWxlRnVuY3Rpb24gPSBwcm9wcyA9PiB7XG4gICAgY29uc3QgdGhlbWUgPSBwcm9wcy50aGVtZSB8fCB7fTtcbiAgICBjb25zdCBiYXNlID0gc3R5bGVGdW5jdGlvbihwcm9wcyk7XG4gICAgY29uc3QgdGhlbWVCcmVha3BvaW50cyA9IHRoZW1lLmJyZWFrcG9pbnRzIHx8IGRlZmF1bHRCcmVha3BvaW50cztcbiAgICBjb25zdCBleHRlbmRlZCA9IHRoZW1lQnJlYWtwb2ludHMua2V5cy5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgICBpZiAocHJvcHNba2V5XSkge1xuICAgICAgICBhY2MgPSBhY2MgfHwge307XG4gICAgICAgIGFjY1t0aGVtZUJyZWFrcG9pbnRzLnVwKGtleSldID0gc3R5bGVGdW5jdGlvbihfZXh0ZW5kcyh7XG4gICAgICAgICAgdGhlbWVcbiAgICAgICAgfSwgcHJvcHNba2V5XSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBudWxsKTtcbiAgICByZXR1cm4gbWVyZ2UoYmFzZSwgZXh0ZW5kZWQpO1xuICB9O1xuICBuZXdTdHlsZUZ1bmN0aW9uLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBfZXh0ZW5kcyh7fSwgc3R5bGVGdW5jdGlvbi5wcm9wVHlwZXMsIHtcbiAgICB4czogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBzbTogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBtZDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBsZzogUHJvcFR5cGVzLm9iamVjdCxcbiAgICB4bDogUHJvcFR5cGVzLm9iamVjdFxuICB9KSA6IHt9O1xuICBuZXdTdHlsZUZ1bmN0aW9uLmZpbHRlclByb3BzID0gWyd4cycsICdzbScsICdtZCcsICdsZycsICd4bCcsIC4uLnN0eWxlRnVuY3Rpb24uZmlsdGVyUHJvcHNdO1xuICByZXR1cm4gbmV3U3R5bGVGdW5jdGlvbjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFbXB0eUJyZWFrcG9pbnRPYmplY3QoYnJlYWtwb2ludHNJbnB1dCA9IHt9KSB7XG4gIHZhciBfYnJlYWtwb2ludHNJbnB1dCRrZXk7XG4gIGNvbnN0IGJyZWFrcG9pbnRzSW5PcmRlciA9IChfYnJlYWtwb2ludHNJbnB1dCRrZXkgPSBicmVha3BvaW50c0lucHV0LmtleXMpID09IG51bGwgPyB2b2lkIDAgOiBfYnJlYWtwb2ludHNJbnB1dCRrZXkucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgIGNvbnN0IGJyZWFrcG9pbnRTdHlsZUtleSA9IGJyZWFrcG9pbnRzSW5wdXQudXAoa2V5KTtcbiAgICBhY2NbYnJlYWtwb2ludFN0eWxlS2V5XSA9IHt9O1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbiAgcmV0dXJuIGJyZWFrcG9pbnRzSW5PcmRlciB8fCB7fTtcbn1cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVVbnVzZWRCcmVha3BvaW50cyhicmVha3BvaW50S2V5cywgc3R5bGUpIHtcbiAgcmV0dXJuIGJyZWFrcG9pbnRLZXlzLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICBjb25zdCBicmVha3BvaW50T3V0cHV0ID0gYWNjW2tleV07XG4gICAgY29uc3QgaXNCcmVha3BvaW50VW51c2VkID0gIWJyZWFrcG9pbnRPdXRwdXQgfHwgT2JqZWN0LmtleXMoYnJlYWtwb2ludE91dHB1dCkubGVuZ3RoID09PSAwO1xuICAgIGlmIChpc0JyZWFrcG9pbnRVbnVzZWQpIHtcbiAgICAgIGRlbGV0ZSBhY2Nba2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgc3R5bGUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlQnJlYWtwb2ludHNJbk9yZGVyKGJyZWFrcG9pbnRzSW5wdXQsIC4uLnN0eWxlcykge1xuICBjb25zdCBlbXB0eUJyZWFrcG9pbnRzID0gY3JlYXRlRW1wdHlCcmVha3BvaW50T2JqZWN0KGJyZWFrcG9pbnRzSW5wdXQpO1xuICBjb25zdCBtZXJnZWRPdXRwdXQgPSBbZW1wdHlCcmVha3BvaW50cywgLi4uc3R5bGVzXS5yZWR1Y2UoKHByZXYsIG5leHQpID0+IGRlZXBtZXJnZShwcmV2LCBuZXh0KSwge30pO1xuICByZXR1cm4gcmVtb3ZlVW51c2VkQnJlYWtwb2ludHMoT2JqZWN0LmtleXMoZW1wdHlCcmVha3BvaW50cyksIG1lcmdlZE91dHB1dCk7XG59XG5cbi8vIGNvbXB1dGUgYmFzZSBmb3IgcmVzcG9uc2l2ZSB2YWx1ZXM7IGUuZy4sXG4vLyBbMSwyLDNdID0+IHt4czogdHJ1ZSwgc206IHRydWUsIG1kOiB0cnVlfVxuLy8ge3hzOiAxLCBzbTogMiwgbWQ6IDN9ID0+IHt4czogdHJ1ZSwgc206IHRydWUsIG1kOiB0cnVlfVxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVCcmVha3BvaW50c0Jhc2UoYnJlYWtwb2ludFZhbHVlcywgdGhlbWVCcmVha3BvaW50cykge1xuICAvLyBmaXhlZCB2YWx1ZVxuICBpZiAodHlwZW9mIGJyZWFrcG9pbnRWYWx1ZXMgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIGNvbnN0IGJhc2UgPSB7fTtcbiAgY29uc3QgYnJlYWtwb2ludHNLZXlzID0gT2JqZWN0LmtleXModGhlbWVCcmVha3BvaW50cyk7XG4gIGlmIChBcnJheS5pc0FycmF5KGJyZWFrcG9pbnRWYWx1ZXMpKSB7XG4gICAgYnJlYWtwb2ludHNLZXlzLmZvckVhY2goKGJyZWFrcG9pbnQsIGkpID0+IHtcbiAgICAgIGlmIChpIDwgYnJlYWtwb2ludFZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgYmFzZVticmVha3BvaW50XSA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgYnJlYWtwb2ludHNLZXlzLmZvckVhY2goYnJlYWtwb2ludCA9PiB7XG4gICAgICBpZiAoYnJlYWtwb2ludFZhbHVlc1ticmVha3BvaW50XSAhPSBudWxsKSB7XG4gICAgICAgIGJhc2VbYnJlYWtwb2ludF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBiYXNlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVCcmVha3BvaW50VmFsdWVzKHtcbiAgdmFsdWVzOiBicmVha3BvaW50VmFsdWVzLFxuICBicmVha3BvaW50czogdGhlbWVCcmVha3BvaW50cyxcbiAgYmFzZTogY3VzdG9tQmFzZVxufSkge1xuICBjb25zdCBiYXNlID0gY3VzdG9tQmFzZSB8fCBjb21wdXRlQnJlYWtwb2ludHNCYXNlKGJyZWFrcG9pbnRWYWx1ZXMsIHRoZW1lQnJlYWtwb2ludHMpO1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoYmFzZSk7XG4gIGlmIChrZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBicmVha3BvaW50VmFsdWVzO1xuICB9XG4gIGxldCBwcmV2aW91cztcbiAgcmV0dXJuIGtleXMucmVkdWNlKChhY2MsIGJyZWFrcG9pbnQsIGkpID0+IHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShicmVha3BvaW50VmFsdWVzKSkge1xuICAgICAgYWNjW2JyZWFrcG9pbnRdID0gYnJlYWtwb2ludFZhbHVlc1tpXSAhPSBudWxsID8gYnJlYWtwb2ludFZhbHVlc1tpXSA6IGJyZWFrcG9pbnRWYWx1ZXNbcHJldmlvdXNdO1xuICAgICAgcHJldmlvdXMgPSBpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGJyZWFrcG9pbnRWYWx1ZXMgPT09ICdvYmplY3QnKSB7XG4gICAgICBhY2NbYnJlYWtwb2ludF0gPSBicmVha3BvaW50VmFsdWVzW2JyZWFrcG9pbnRdICE9IG51bGwgPyBicmVha3BvaW50VmFsdWVzW2JyZWFrcG9pbnRdIDogYnJlYWtwb2ludFZhbHVlc1twcmV2aW91c107XG4gICAgICBwcmV2aW91cyA9IGJyZWFrcG9pbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFjY1ticmVha3BvaW50XSA9IGJyZWFrcG9pbnRWYWx1ZXM7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbn1cbmV4cG9ydCBkZWZhdWx0IGJyZWFrcG9pbnRzOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9452\n")},9453:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(" __webpack_require__.d(__webpack_exports__,{\n A:()=>(formatMuiErrorMessage)\n});\n\nfunction formatMuiErrorMessage(code){\n // Apply babel-plugin-transform-template-literals in loose mode\n // loose mode is safe if we're concatenating primitives\n // see https://babeljs.io/docs/en/babel-plugin-transform-template-literals#loose\n \n let url='https://mui.com/production-error/?code='+code;\n for (let i=1;i < arguments.length;i+=1){\n // rest params over-transpile for this case\n // eslint-disable-next-line prefer-rest-params\n url+='&args[]='+encodeURIComponent(arguments[i]);\n}\n return 'Minified MUI error #'+code+';visit '+url+' for the full message.';\n \n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTQ1My5qcyIsIm1hcHBpbmdzIjoiOzs7QUFBQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0Isc0JBQXNCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDO0FBQzVDO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2VzbS9mb3JtYXRNdWlFcnJvck1lc3NhZ2UvZm9ybWF0TXVpRXJyb3JNZXNzYWdlLmpzPzI5MTkiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBXQVJOSU5HOiBEb24ndCBpbXBvcnQgdGhpcyBkaXJlY3RseS5cbiAqIFVzZSBgTXVpRXJyb3JgIGZyb20gYEBtdWkvaW50ZXJuYWwtYmFiZWwtbWFjcm9zL011aUVycm9yLm1hY3JvYCBpbnN0ZWFkLlxuICogQHBhcmFtIHtudW1iZXJ9IGNvZGVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9ybWF0TXVpRXJyb3JNZXNzYWdlKGNvZGUpIHtcbiAgLy8gQXBwbHkgYmFiZWwtcGx1Z2luLXRyYW5zZm9ybS10ZW1wbGF0ZS1saXRlcmFscyBpbiBsb29zZSBtb2RlXG4gIC8vIGxvb3NlIG1vZGUgaXMgc2FmZSBpZiB3ZSdyZSBjb25jYXRlbmF0aW5nIHByaW1pdGl2ZXNcbiAgLy8gc2VlIGh0dHBzOi8vYmFiZWxqcy5pby9kb2NzL2VuL2JhYmVsLXBsdWdpbi10cmFuc2Zvcm0tdGVtcGxhdGUtbGl0ZXJhbHMjbG9vc2VcbiAgLyogZXNsaW50LWRpc2FibGUgcHJlZmVyLXRlbXBsYXRlICovXG4gIGxldCB1cmwgPSAnaHR0cHM6Ly9tdWkuY29tL3Byb2R1Y3Rpb24tZXJyb3IvP2NvZGU9JyArIGNvZGU7XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgLy8gcmVzdCBwYXJhbXMgb3Zlci10cmFuc3BpbGUgZm9yIHRoaXMgY2FzZVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcmVzdC1wYXJhbXNcbiAgICB1cmwgKz0gJyZhcmdzW109JyArIGVuY29kZVVSSUNvbXBvbmVudChhcmd1bWVudHNbaV0pO1xuICB9XG4gIHJldHVybiAnTWluaWZpZWQgTVVJIGVycm9yICMnICsgY29kZSArICc7IHZpc2l0ICcgKyB1cmwgKyAnIGZvciB0aGUgZnVsbCBtZXNzYWdlLic7XG4gIC8qIGVzbGludC1lbmFibGUgcHJlZmVyLXRlbXBsYXRlICovXG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9453\n")},9483:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval('var __webpack_unused_export__;\n\n"use client";\n\nvar _interopRequireDefault=__webpack_require__(4994);\n__webpack_unused_export__=({\n value:true\n});\nexports.A=void 0;\nvar _createSvgIcon=_interopRequireDefault(__webpack_require__(2032));\nvar _jsxRuntime=__webpack_require__(4848);\nvar _default=exports.A=(0,_createSvgIcon.default)((0,_jsxRuntime.jsx)("path",{\n d:"M7.41 8.59 12 13.17l4.59-4.58L18 10l-6 6-6-6z"\n}),\'KeyboardArrowDown\');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTQ4My5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYjs7QUFFQSw2QkFBNkIsbUJBQU8sQ0FBQyxJQUE4QztBQUNuRiw2QkFBNkM7QUFDN0M7QUFDQSxDQUFDLENBQUM7QUFDRixTQUFlO0FBQ2YsNENBQTRDLG1CQUFPLENBQUMsSUFBdUI7QUFDM0Usa0JBQWtCLG1CQUFPLENBQUMsSUFBbUI7QUFDN0MsZUFBZSxTQUFlO0FBQzlCO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvaWNvbnMtbWF0ZXJpYWwvS2V5Ym9hcmRBcnJvd0Rvd24uanM/ZGM5YSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblwidXNlIGNsaWVudFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX2NyZWF0ZVN2Z0ljb24gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3V0aWxzL2NyZWF0ZVN2Z0ljb25cIikpO1xudmFyIF9qc3hSdW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gKDAsIF9jcmVhdGVTdmdJY29uLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovKDAsIF9qc3hSdW50aW1lLmpzeCkoXCJwYXRoXCIsIHtcbiAgZDogXCJNNy40MSA4LjU5IDEyIDEzLjE3bDQuNTktNC41OEwxOCAxMGwtNiA2LTYtNnpcIlxufSksICdLZXlib2FyZEFycm93RG93bicpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9483\n')},9599:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(' __webpack_require__.d(__webpack_exports__,{\n A:()=>(extendSxProp)\n});\n var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__(8168);\n var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(8587);\n var _mui_utils_deepmerge__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(1317);\n var _defaultSxConfig__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(4188);\n\n\nconst _excluded=["sx"];\n\n\nconst splitProps=props=>{\n var _props$theme$unstable,_props$theme;\n const result={\n systemProps:{}\n};\n const config=(_props$theme$unstable=props==null || (_props$theme=props.theme)==null ? void 0 :_props$theme.unstable_sxConfig) !=null ? _props$theme$unstable :_defaultSxConfig__WEBPACK_IMPORTED_MODULE_0__ .A;\n Object.keys(props).forEach(prop=>{\n if (config[prop]){\n result.systemProps[prop]=props[prop];\n}else{\n result.otherProps[prop]=props[prop];\n}\n});\n return result;\n};\nfunction extendSxProp(props){\n const{\n sx:inSx\n}=props,\n other=(0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__ .A)(props,_excluded);\n const{\n systemProps,\n otherProps\n}=splitProps(other);\n let finalSx;\n if (Array.isArray(inSx)){\n finalSx=[systemProps,...inSx];\n}else if (typeof inSx===\'function\'){\n finalSx=(...args)=>{\n const result=inSx(...args);\n if (!(0,_mui_utils_deepmerge__WEBPACK_IMPORTED_MODULE_2__ .Q)(result)){\n return systemProps;\n},systemProps,result);\n};\n}else{\n finalSx=(0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_3__ .A)({},systemProps,inSx);\n},otherProps,{\n sx:finalSx\n});\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTU5OS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQTBEO0FBQzBDO0FBQ3BHO0FBQ3FEO0FBQ0w7QUFDaEQ7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQSw2S0FBNkssaUVBQWU7QUFDNUw7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNlO0FBQ2Y7QUFDQTtBQUNBLE1BQU07QUFDTixZQUFZLDRHQUE2QjtBQUN6QztBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxXQUFXLDRFQUFhO0FBQ3hCO0FBQ0E7QUFDQSxhQUFhLHVGQUFRLEdBQUc7QUFDeEI7QUFDQSxJQUFJO0FBQ0osY0FBYyx1RkFBUSxHQUFHO0FBQ3pCO0FBQ0EsU0FBUyx1RkFBUSxHQUFHO0FBQ3BCO0FBQ0EsR0FBRztBQUNIIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL3N0eWxlRnVuY3Rpb25TeC9leHRlbmRTeFByb3AuanM/ZDI0NCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wic3hcIl07XG5pbXBvcnQgeyBpc1BsYWluT2JqZWN0IH0gZnJvbSAnQG11aS91dGlscy9kZWVwbWVyZ2UnO1xuaW1wb3J0IGRlZmF1bHRTeENvbmZpZyBmcm9tICcuL2RlZmF1bHRTeENvbmZpZyc7XG5jb25zdCBzcGxpdFByb3BzID0gcHJvcHMgPT4ge1xuICB2YXIgX3Byb3BzJHRoZW1lJHVuc3RhYmxlLCBfcHJvcHMkdGhlbWU7XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICBzeXN0ZW1Qcm9wczoge30sXG4gICAgb3RoZXJQcm9wczoge31cbiAgfTtcbiAgY29uc3QgY29uZmlnID0gKF9wcm9wcyR0aGVtZSR1bnN0YWJsZSA9IHByb3BzID09IG51bGwgfHwgKF9wcm9wcyR0aGVtZSA9IHByb3BzLnRoZW1lKSA9PSBudWxsID8gdm9pZCAwIDogX3Byb3BzJHRoZW1lLnVuc3RhYmxlX3N4Q29uZmlnKSAhPSBudWxsID8gX3Byb3BzJHRoZW1lJHVuc3RhYmxlIDogZGVmYXVsdFN4Q29uZmlnO1xuICBPYmplY3Qua2V5cyhwcm9wcykuZm9yRWFjaChwcm9wID0+IHtcbiAgICBpZiAoY29uZmlnW3Byb3BdKSB7XG4gICAgICByZXN1bHQuc3lzdGVtUHJvcHNbcHJvcF0gPSBwcm9wc1twcm9wXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0Lm90aGVyUHJvcHNbcHJvcF0gPSBwcm9wc1twcm9wXTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGV4dGVuZFN4UHJvcChwcm9wcykge1xuICBjb25zdCB7XG4gICAgICBzeDogaW5TeFxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCB7XG4gICAgc3lzdGVtUHJvcHMsXG4gICAgb3RoZXJQcm9wc1xuICB9ID0gc3BsaXRQcm9wcyhvdGhlcik7XG4gIGxldCBmaW5hbFN4O1xuICBpZiAoQXJyYXkuaXNBcnJheShpblN4KSkge1xuICAgIGZpbmFsU3ggPSBbc3lzdGVtUHJvcHMsIC4uLmluU3hdO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBpblN4ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZmluYWxTeCA9ICguLi5hcmdzKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpblN4KC4uLmFyZ3MpO1xuICAgICAgaWYgKCFpc1BsYWluT2JqZWN0KHJlc3VsdCkpIHtcbiAgICAgICAgcmV0dXJuIHN5c3RlbVByb3BzO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzeXN0ZW1Qcm9wcywgcmVzdWx0KTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGZpbmFsU3ggPSBfZXh0ZW5kcyh7fSwgc3lzdGVtUHJvcHMsIGluU3gpO1xuICB9XG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgb3RoZXJQcm9wcywge1xuICAgIHN4OiBmaW5hbFN4XG4gIH0pO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9599\n')},9770:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(" __webpack_require__.d(__webpack_exports__,{\n A:()=>(__WEBPACK_DEFAULT_EXPORT__)\n});\n var _slotShouldForwardProp__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(4438);\n\nconst rootShouldForwardProp=prop=>(0,_slotShouldForwardProp__WEBPACK_IMPORTED_MODULE_0__ .A)(prop) && prop !=='classes';\n const __WEBPACK_DEFAULT_EXPORT__=(rootShouldForwardProp);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTc3MC5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQTREO0FBQzVELHNDQUFzQywyRUFBcUI7QUFDM0QsaUVBQWUscUJBQXFCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvcm9vdFNob3VsZEZvcndhcmRQcm9wLmpzPzVjY2QiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNsb3RTaG91bGRGb3J3YXJkUHJvcCBmcm9tICcuL3Nsb3RTaG91bGRGb3J3YXJkUHJvcCc7XG5jb25zdCByb290U2hvdWxkRm9yd2FyZFByb3AgPSBwcm9wID0+IHNsb3RTaG91bGRGb3J3YXJkUHJvcChwcm9wKSAmJiBwcm9wICE9PSAnY2xhc3Nlcyc7XG5leHBvcnQgZGVmYXVsdCByb290U2hvdWxkRm9yd2FyZFByb3A7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9770\n")},9781:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval('var __webpack_unused_export__;\n\n"use client";\n\nvar _interopRequireDefault=__webpack_require__(4994);\n__webpack_unused_export__=({\n value:true\n});\nexports.A=void 0;\nvar _createSvgIcon=_interopRequireDefault(__webpack_require__(2032));\nvar _jsxRuntime=__webpack_require__(4848);\nvar _default=exports.A=(0,_createSvgIcon.default)((0,_jsxRuntime.jsx)("path",{\n d:"M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"\n}),\'Close\');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTc4MS5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYjs7QUFFQSw2QkFBNkIsbUJBQU8sQ0FBQyxJQUE4QztBQUNuRiw2QkFBNkM7QUFDN0M7QUFDQSxDQUFDLENBQUM7QUFDRixTQUFlO0FBQ2YsNENBQTRDLG1CQUFPLENBQUMsSUFBdUI7QUFDM0Usa0JBQWtCLG1CQUFPLENBQUMsSUFBbUI7QUFDN0MsZUFBZSxTQUFlO0FBQzlCO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvaWNvbnMtbWF0ZXJpYWwvQ2xvc2UuanM/MWZhMCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblwidXNlIGNsaWVudFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX2NyZWF0ZVN2Z0ljb24gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3V0aWxzL2NyZWF0ZVN2Z0ljb25cIikpO1xudmFyIF9qc3hSdW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gKDAsIF9jcmVhdGVTdmdJY29uLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovKDAsIF9qc3hSdW50aW1lLmpzeCkoXCJwYXRoXCIsIHtcbiAgZDogXCJNMTkgNi40MSAxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyelwiXG59KSwgJ0Nsb3NlJyk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9781\n')},9888:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nif (true){\n module.exports=__webpack_require__(8493);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTg4OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixJQUFJLElBQXFDO0FBQ3pDLEVBQUUsMENBQTZFO0FBQy9FLEVBQUUsS0FBSztBQUFBLEVBRU4iLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS9zaGltL2luZGV4LmpzPzZhZGYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uL2Nqcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltLnByb2R1Y3Rpb24uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vY2pzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlLXNoaW0uZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9888\n")},9940:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(" __webpack_require__.d(__webpack_exports__,{\n A:()=>(GlobalStyles)\n});\n var react__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1594);\n var react__WEBPACK_IMPORTED_MODULE_0___default=__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n var _emotion_react__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(7437);\n var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(4848);\n'use client';\n\n\n\n\n\nfunction isEmpty(obj){\n return obj===undefined || obj===null || Object.keys(obj).length===0;\n}\nfunction GlobalStyles(props){\n const{\n styles,\n defaultTheme={}\n}=props;\n const globalStyles=typeof styles==='function' ? themeInput=>styles(isEmpty(themeInput) ? defaultTheme :themeInput) :styles;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_emotion_react__WEBPACK_IMPORTED_MODULE_2__ .mL,{\n styles:globalStyles\n});\n}\n false ? 0:void 0;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTk0MC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBRStCO0FBQ0k7QUFDSztBQUNRO0FBQ2hEO0FBQ0E7QUFDQTtBQUNlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0Esc0JBQXNCLHNEQUFJLENBQUMsNERBQU07QUFDakM7QUFDQSxHQUFHO0FBQ0g7QUFDQSxNQUFxQyxHQUFHLENBR3ZDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3N0eWxlZC1lbmdpbmUvR2xvYmFsU3R5bGVzL0dsb2JhbFN0eWxlcy5qcz9kOTM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IEdsb2JhbCB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5mdW5jdGlvbiBpc0VtcHR5KG9iaikge1xuICByZXR1cm4gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsIHx8IE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID09PSAwO1xufVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gR2xvYmFsU3R5bGVzKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBzdHlsZXMsXG4gICAgZGVmYXVsdFRoZW1lID0ge31cbiAgfSA9IHByb3BzO1xuICBjb25zdCBnbG9iYWxTdHlsZXMgPSB0eXBlb2Ygc3R5bGVzID09PSAnZnVuY3Rpb24nID8gdGhlbWVJbnB1dCA9PiBzdHlsZXMoaXNFbXB0eSh0aGVtZUlucHV0KSA/IGRlZmF1bHRUaGVtZSA6IHRoZW1lSW5wdXQpIDogc3R5bGVzO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goR2xvYmFsLCB7XG4gICAgc3R5bGVzOiBnbG9iYWxTdHlsZXNcbiAgfSk7XG59XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBHbG9iYWxTdHlsZXMucHJvcFR5cGVzID0ge1xuICBkZWZhdWx0VGhlbWU6IFByb3BUeXBlcy5vYmplY3QsXG4gIHN0eWxlczogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5LCBQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuZnVuY10pXG59IDogdm9pZCAwOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9940\n")}};function __webpack_require__(n){var c=__webpack_module_cache__[n];if(void 0!==c)return c.exports;var l=__webpack_module_cache__[n]={id:n,exports:{}};return __webpack_modules__[n](l,l.exports,__webpack_require__),l.exports}__webpack_require__.n=n=>{var c=n&&n.__esModule?()=>n.default:()=>n;return __webpack_require__.d(c,{a:c}),c},__webpack_require__.d=(n,c)=>{for(var l in c)__webpack_require__.o(c,l)&&!__webpack_require__.o(n,l)&&Object.defineProperty(n,l,{enumerable:!0,get:c[l]})},__webpack_require__.o=(n,c)=>Object.prototype.hasOwnProperty.call(n,c),__webpack_require__.r=n=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},__webpack_require__.nc=void 0;var __webpack_exports__=__webpack_require__(9267)})().navigation li a,.navigation li a:hover,.navigation li.active a,.navigation li.disabled{color:#fff;text-decoration:none}.navigation li{display:inline-block;margin:5px 3px 0}.navigation ul{margin:0;padding:0;display:flex;flex-wrap:wrap;justify-content:center}.navigation li a,.navigation li a:hover,.navigation li.active a,.navigation li.disabled{background-color:#6FB7E9;border-radius:3px;cursor:pointer;padding:12px;padding:.75rem;display:block}.navigation li a:hover,.navigation li.active a{background-color:#3C8DC5}.error{color:red}/*!
 * Bootstrap v4.5.0 (https://getbootstrap.com/)
 * Copyright 2011-2020 The Bootstrap Authors
 * Copyright 2011-2020 Twitter, Inc.
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]){color:inherit;text-decoration:none}a:not([href]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0%;-ms-flex-positive:1;flex-grow:1;min-width:0;max-width:100%}.row-cols-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0%;-ms-flex-positive:1;flex-grow:1;min-width:0;max-width:100%}.row-cols-sm-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-sm-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0%;-ms-flex-positive:1;flex-grow:1;min-width:0;max-width:100%}.row-cols-md-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-md-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-md-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-md-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-md-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-md-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0%;-ms-flex-positive:1;flex-grow:1;min-width:0;max-width:100%}.row-cols-lg-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-lg-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0%;-ms-flex-positive:1;flex-grow:1;min-width:0;max-width:100%}.row-cols-xl-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-xl-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}input[type=date].form-control,input[type=datetime-local].form-control,input[type=month].form-control,input[type=time].form-control{-webkit-appearance:none;-moz-appearance:none;appearance:none}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;font-size:1rem;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{border-color:#28a745}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{border-color:#34ce57;background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#dc3545;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{border-color:#dc3545}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{border-color:#e4606d;background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;-ms-flex-negative:0;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#0069d9;border-color:#0062cc;box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{color:#fff;background-color:#5a6268;border-color:#545b62;box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#218838;border-color:#1e7e34;box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#138496;border-color:#117a8b;box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{color:#212529;background-color:#e0a800;border-color:#d39e00;box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c82333;border-color:#bd2130;box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{color:#212529;background-color:#e2e6ea;border-color:#dae0e5;box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{color:#fff;background-color:#23272b;border-color:#1d2124;box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{color:#007bff;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;text-decoration:none}.btn-link:hover{color:#0056b3;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:1 1 auto;flex:1 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;min-width:0;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;left:0;z-index:-1;width:1rem;height:1.25rem;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#007bff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#80bdff}.custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#b3d7ff;border-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label,.custom-control-input[disabled]~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before,.custom-control-input[disabled]~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:#adb5bd solid 1px}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#007bff;background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label::after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fff;-webkit-transform:translateX(.75rem);transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:disabled~.custom-file-label,.custom-file-input[disabled]~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{-moz-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;-ms-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{-ms-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0%;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar .container,.navbar .container-fluid,.navbar .container-lg,.navbar .container-md,.navbar .container-sm,.navbar .container-xl{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;min-height:1px;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img,.card-img-bottom,.card-img-top{-ms-flex-negative:0;flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{-ms-flex:1 0 0%;flex:1 0 0%;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion>.card{overflow:hidden}.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item{display:-ms-flexbox;display:flex}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:3;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0062cc}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;line-height:0;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:576px){.list-group-horizontal-sm{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:768px){.list-group-horizontal-md{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:992px){.list-group-horizontal-lg{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){.list-group-horizontal-xl{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0}a.close.disabled{pointer-events:none}.toast{max-width:350px;overflow:hidden;font-size:.875rem;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-50px);transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal.modal-static .modal-dialog{-webkit-transform:scale(1.02);transform:scale(1.02)}.modal-dialog-scrollable{display:-ms-flexbox;display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{-ms-flex-negative:0;flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);height:-webkit-min-content;height:-moz-min-content;height:min-content;content:""}.modal-dialog-centered.modal-dialog-scrollable{-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 3.5rem);height:-webkit-min-content;height:-moz-min-content;height:min-content}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=top]>.arrow::before,.bs-popover-top>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow::after,.bs-popover-top>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow::before,.bs-popover-right>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow::after,.bs-popover-right>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=bottom]>.arrow::before,.bs-popover-bottom>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow::after,.bs-popover-bottom>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow::before,.bs-popover-left>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow::after,.bs-popover-left>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{-ms-touch-action:pan-y;touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;-ms-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;-ms-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}}.owl-carousel,.owl-carousel .owl-item{-webkit-tap-highlight-color:transparent;position:relative}.owl-carousel{display:none;width:100%;z-index:1}.owl-carousel .owl-stage{position:relative;-ms-touch-action:pan-Y;touch-action:manipulation;-moz-backface-visibility:hidden}.owl-carousel .owl-stage:after{content:".";display:block;clear:both;visibility:hidden;line-height:0;height:0}.owl-carousel .owl-stage-outer{position:relative;overflow:hidden;-webkit-transform:translate3d(0,0,0)}.owl-carousel .owl-item,.owl-carousel .owl-wrapper{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0)}.owl-carousel .owl-item{min-height:1px;float:left;-webkit-backface-visibility:hidden;-webkit-touch-callout:none}.owl-carousel .owl-item img{display:block;width:100%}.owl-carousel .owl-dots.disabled,.owl-carousel .owl-nav.disabled{display:none}.no-js .owl-carousel,.owl-carousel.owl-loaded{display:block}.owl-carousel .owl-dot,.owl-carousel .owl-nav .owl-next,.owl-carousel .owl-nav .owl-prev{cursor:pointer;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel .owl-nav button.owl-next,.owl-carousel .owl-nav button.owl-prev,.owl-carousel button.owl-dot{background:0 0;color:inherit;border:none;padding:0!important;font:inherit}.owl-carousel.owl-loading{opacity:0;display:block}.owl-carousel.owl-hidden{opacity:0}.owl-carousel.owl-refresh .owl-item{visibility:hidden}.owl-carousel.owl-drag .owl-item{-ms-touch-action:pan-y;touch-action:pan-y;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel.owl-grab{cursor:move;cursor:grab}.owl-carousel.owl-rtl{direction:rtl}.owl-carousel.owl-rtl .owl-item{float:right}.owl-carousel .animated{animation-duration:1s;animation-fill-mode:both}.owl-carousel .owl-animated-in{z-index:0}.owl-carousel .owl-animated-out{z-index:1}.owl-carousel .fadeOut{animation-name:fadeOut}@keyframes fadeOut{0%{opacity:1}100%{opacity:0}}.owl-height{transition:height .5s ease-in-out}.owl-carousel .owl-item .owl-lazy{opacity:0;transition:opacity .4s ease}.owl-carousel .owl-item .owl-lazy:not([src]),.owl-carousel .owl-item .owl-lazy[src^=""]{max-height:0}.owl-carousel .owl-item img.owl-lazy{transform-style:preserve-3d}.owl-carousel .owl-video-wrapper{position:relative;height:100%;background:#000}.owl-carousel .owl-video-play-icon{position:absolute;height:80px;width:80px;left:50%;top:50%;margin-left:-40px;margin-top:-40px;background:url(https://klizos.com/wp-content/themes/klizos/public/css/owl.video.play.png) no-repeat;cursor:pointer;z-index:1;-webkit-backface-visibility:hidden;transition:transform .1s ease}.owl-carousel .owl-video-play-icon:hover{-ms-transform:scale(1.3,1.3);transform:scale(1.3,1.3)}.owl-carousel .owl-video-playing .owl-video-play-icon,.owl-carousel .owl-video-playing .owl-video-tn{display:none}.owl-carousel .owl-video-tn{opacity:0;height:100%;background-position:center center;background-repeat:no-repeat;background-size:contain;transition:opacity .4s ease}.owl-carousel .owl-video-frame{position:relative;z-index:1;height:100%;width:100%}[data-aos][data-aos][data-aos-duration="50"],body[data-aos-duration="50"] [data-aos]{transition-duration:50ms}[data-aos][data-aos][data-aos-delay="50"],body[data-aos-delay="50"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="50"].aos-animate,body[data-aos-delay="50"] [data-aos].aos-animate{transition-delay:50ms}[data-aos][data-aos][data-aos-duration="100"],body[data-aos-duration="100"] [data-aos]{transition-duration:.1s}[data-aos][data-aos][data-aos-delay="100"],body[data-aos-delay="100"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="100"].aos-animate,body[data-aos-delay="100"] [data-aos].aos-animate{transition-delay:.1s}[data-aos][data-aos][data-aos-duration="150"],body[data-aos-duration="150"] [data-aos]{transition-duration:.15s}[data-aos][data-aos][data-aos-delay="150"],body[data-aos-delay="150"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="150"].aos-animate,body[data-aos-delay="150"] [data-aos].aos-animate{transition-delay:.15s}[data-aos][data-aos][data-aos-duration="200"],body[data-aos-duration="200"] [data-aos]{transition-duration:.2s}[data-aos][data-aos][data-aos-delay="200"],body[data-aos-delay="200"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="200"].aos-animate,body[data-aos-delay="200"] [data-aos].aos-animate{transition-delay:.2s}[data-aos][data-aos][data-aos-duration="250"],body[data-aos-duration="250"] [data-aos]{transition-duration:.25s}[data-aos][data-aos][data-aos-delay="250"],body[data-aos-delay="250"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="250"].aos-animate,body[data-aos-delay="250"] [data-aos].aos-animate{transition-delay:.25s}[data-aos][data-aos][data-aos-duration="300"],body[data-aos-duration="300"] [data-aos]{transition-duration:.3s}[data-aos][data-aos][data-aos-delay="300"],body[data-aos-delay="300"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="300"].aos-animate,body[data-aos-delay="300"] [data-aos].aos-animate{transition-delay:.3s}[data-aos][data-aos][data-aos-duration="350"],body[data-aos-duration="350"] [data-aos]{transition-duration:.35s}[data-aos][data-aos][data-aos-delay="350"],body[data-aos-delay="350"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="350"].aos-animate,body[data-aos-delay="350"] [data-aos].aos-animate{transition-delay:.35s}[data-aos][data-aos][data-aos-duration="400"],body[data-aos-duration="400"] [data-aos]{transition-duration:.4s}[data-aos][data-aos][data-aos-delay="400"],body[data-aos-delay="400"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="400"].aos-animate,body[data-aos-delay="400"] [data-aos].aos-animate{transition-delay:.4s}[data-aos][data-aos][data-aos-duration="450"],body[data-aos-duration="450"] [data-aos]{transition-duration:.45s}[data-aos][data-aos][data-aos-delay="450"],body[data-aos-delay="450"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="450"].aos-animate,body[data-aos-delay="450"] [data-aos].aos-animate{transition-delay:.45s}[data-aos][data-aos][data-aos-duration="500"],body[data-aos-duration="500"] [data-aos]{transition-duration:.5s}[data-aos][data-aos][data-aos-delay="500"],body[data-aos-delay="500"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="500"].aos-animate,body[data-aos-delay="500"] [data-aos].aos-animate{transition-delay:.5s}[data-aos][data-aos][data-aos-duration="550"],body[data-aos-duration="550"] [data-aos]{transition-duration:.55s}[data-aos][data-aos][data-aos-delay="550"],body[data-aos-delay="550"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="550"].aos-animate,body[data-aos-delay="550"] [data-aos].aos-animate{transition-delay:.55s}[data-aos][data-aos][data-aos-duration="600"],body[data-aos-duration="600"] [data-aos]{transition-duration:.6s}[data-aos][data-aos][data-aos-delay="600"],body[data-aos-delay="600"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="600"].aos-animate,body[data-aos-delay="600"] [data-aos].aos-animate{transition-delay:.6s}[data-aos][data-aos][data-aos-duration="650"],body[data-aos-duration="650"] [data-aos]{transition-duration:.65s}[data-aos][data-aos][data-aos-delay="650"],body[data-aos-delay="650"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="650"].aos-animate,body[data-aos-delay="650"] [data-aos].aos-animate{transition-delay:.65s}[data-aos][data-aos][data-aos-duration="700"],body[data-aos-duration="700"] [data-aos]{transition-duration:.7s}[data-aos][data-aos][data-aos-delay="700"],body[data-aos-delay="700"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="700"].aos-animate,body[data-aos-delay="700"] [data-aos].aos-animate{transition-delay:.7s}[data-aos][data-aos][data-aos-duration="750"],body[data-aos-duration="750"] [data-aos]{transition-duration:.75s}[data-aos][data-aos][data-aos-delay="750"],body[data-aos-delay="750"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="750"].aos-animate,body[data-aos-delay="750"] [data-aos].aos-animate{transition-delay:.75s}[data-aos][data-aos][data-aos-duration="800"],body[data-aos-duration="800"] [data-aos]{transition-duration:.8s}[data-aos][data-aos][data-aos-delay="800"],body[data-aos-delay="800"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="800"].aos-animate,body[data-aos-delay="800"] [data-aos].aos-animate{transition-delay:.8s}[data-aos][data-aos][data-aos-duration="850"],body[data-aos-duration="850"] [data-aos]{transition-duration:.85s}[data-aos][data-aos][data-aos-delay="850"],body[data-aos-delay="850"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="850"].aos-animate,body[data-aos-delay="850"] [data-aos].aos-animate{transition-delay:.85s}[data-aos][data-aos][data-aos-duration="900"],body[data-aos-duration="900"] [data-aos]{transition-duration:.9s}[data-aos][data-aos][data-aos-delay="900"],body[data-aos-delay="900"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="900"].aos-animate,body[data-aos-delay="900"] [data-aos].aos-animate{transition-delay:.9s}[data-aos][data-aos][data-aos-duration="950"],body[data-aos-duration="950"] [data-aos]{transition-duration:.95s}[data-aos][data-aos][data-aos-delay="950"],body[data-aos-delay="950"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="950"].aos-animate,body[data-aos-delay="950"] [data-aos].aos-animate{transition-delay:.95s}[data-aos][data-aos][data-aos-duration="1000"],body[data-aos-duration="1000"] [data-aos]{transition-duration:1s}[data-aos][data-aos][data-aos-delay="1000"],body[data-aos-delay="1000"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1000"].aos-animate,body[data-aos-delay="1000"] [data-aos].aos-animate{transition-delay:1s}[data-aos][data-aos][data-aos-duration="1050"],body[data-aos-duration="1050"] [data-aos]{transition-duration:1.05s}[data-aos][data-aos][data-aos-delay="1050"],body[data-aos-delay="1050"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1050"].aos-animate,body[data-aos-delay="1050"] [data-aos].aos-animate{transition-delay:1.05s}[data-aos][data-aos][data-aos-duration="1100"],body[data-aos-duration="1100"] [data-aos]{transition-duration:1.1s}[data-aos][data-aos][data-aos-delay="1100"],body[data-aos-delay="1100"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1100"].aos-animate,body[data-aos-delay="1100"] [data-aos].aos-animate{transition-delay:1.1s}[data-aos][data-aos][data-aos-duration="1150"],body[data-aos-duration="1150"] [data-aos]{transition-duration:1.15s}[data-aos][data-aos][data-aos-delay="1150"],body[data-aos-delay="1150"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1150"].aos-animate,body[data-aos-delay="1150"] [data-aos].aos-animate{transition-delay:1.15s}[data-aos][data-aos][data-aos-duration="1200"],body[data-aos-duration="1200"] [data-aos]{transition-duration:1.2s}[data-aos][data-aos][data-aos-delay="1200"],body[data-aos-delay="1200"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1200"].aos-animate,body[data-aos-delay="1200"] [data-aos].aos-animate{transition-delay:1.2s}[data-aos][data-aos][data-aos-duration="1250"],body[data-aos-duration="1250"] [data-aos]{transition-duration:1.25s}[data-aos][data-aos][data-aos-delay="1250"],body[data-aos-delay="1250"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1250"].aos-animate,body[data-aos-delay="1250"] [data-aos].aos-animate{transition-delay:1.25s}[data-aos][data-aos][data-aos-duration="1300"],body[data-aos-duration="1300"] [data-aos]{transition-duration:1.3s}[data-aos][data-aos][data-aos-delay="1300"],body[data-aos-delay="1300"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1300"].aos-animate,body[data-aos-delay="1300"] [data-aos].aos-animate{transition-delay:1.3s}[data-aos][data-aos][data-aos-duration="1350"],body[data-aos-duration="1350"] [data-aos]{transition-duration:1.35s}[data-aos][data-aos][data-aos-delay="1350"],body[data-aos-delay="1350"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1350"].aos-animate,body[data-aos-delay="1350"] [data-aos].aos-animate{transition-delay:1.35s}[data-aos][data-aos][data-aos-duration="1400"],body[data-aos-duration="1400"] [data-aos]{transition-duration:1.4s}[data-aos][data-aos][data-aos-delay="1400"],body[data-aos-delay="1400"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1400"].aos-animate,body[data-aos-delay="1400"] [data-aos].aos-animate{transition-delay:1.4s}[data-aos][data-aos][data-aos-duration="1450"],body[data-aos-duration="1450"] [data-aos]{transition-duration:1.45s}[data-aos][data-aos][data-aos-delay="1450"],body[data-aos-delay="1450"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1450"].aos-animate,body[data-aos-delay="1450"] [data-aos].aos-animate{transition-delay:1.45s}[data-aos][data-aos][data-aos-duration="1500"],body[data-aos-duration="1500"] [data-aos]{transition-duration:1.5s}[data-aos][data-aos][data-aos-delay="1500"],body[data-aos-delay="1500"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1500"].aos-animate,body[data-aos-delay="1500"] [data-aos].aos-animate{transition-delay:1.5s}[data-aos][data-aos][data-aos-duration="1550"],body[data-aos-duration="1550"] [data-aos]{transition-duration:1.55s}[data-aos][data-aos][data-aos-delay="1550"],body[data-aos-delay="1550"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1550"].aos-animate,body[data-aos-delay="1550"] [data-aos].aos-animate{transition-delay:1.55s}[data-aos][data-aos][data-aos-duration="1600"],body[data-aos-duration="1600"] [data-aos]{transition-duration:1.6s}[data-aos][data-aos][data-aos-delay="1600"],body[data-aos-delay="1600"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1600"].aos-animate,body[data-aos-delay="1600"] [data-aos].aos-animate{transition-delay:1.6s}[data-aos][data-aos][data-aos-duration="1650"],body[data-aos-duration="1650"] [data-aos]{transition-duration:1.65s}[data-aos][data-aos][data-aos-delay="1650"],body[data-aos-delay="1650"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1650"].aos-animate,body[data-aos-delay="1650"] [data-aos].aos-animate{transition-delay:1.65s}[data-aos][data-aos][data-aos-duration="1700"],body[data-aos-duration="1700"] [data-aos]{transition-duration:1.7s}[data-aos][data-aos][data-aos-delay="1700"],body[data-aos-delay="1700"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1700"].aos-animate,body[data-aos-delay="1700"] [data-aos].aos-animate{transition-delay:1.7s}[data-aos][data-aos][data-aos-duration="1750"],body[data-aos-duration="1750"] [data-aos]{transition-duration:1.75s}[data-aos][data-aos][data-aos-delay="1750"],body[data-aos-delay="1750"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1750"].aos-animate,body[data-aos-delay="1750"] [data-aos].aos-animate{transition-delay:1.75s}[data-aos][data-aos][data-aos-duration="1800"],body[data-aos-duration="1800"] [data-aos]{transition-duration:1.8s}[data-aos][data-aos][data-aos-delay="1800"],body[data-aos-delay="1800"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1800"].aos-animate,body[data-aos-delay="1800"] [data-aos].aos-animate{transition-delay:1.8s}[data-aos][data-aos][data-aos-duration="1850"],body[data-aos-duration="1850"] [data-aos]{transition-duration:1.85s}[data-aos][data-aos][data-aos-delay="1850"],body[data-aos-delay="1850"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1850"].aos-animate,body[data-aos-delay="1850"] [data-aos].aos-animate{transition-delay:1.85s}[data-aos][data-aos][data-aos-duration="1900"],body[data-aos-duration="1900"] [data-aos]{transition-duration:1.9s}[data-aos][data-aos][data-aos-delay="1900"],body[data-aos-delay="1900"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1900"].aos-animate,body[data-aos-delay="1900"] [data-aos].aos-animate{transition-delay:1.9s}[data-aos][data-aos][data-aos-duration="1950"],body[data-aos-duration="1950"] [data-aos]{transition-duration:1.95s}[data-aos][data-aos][data-aos-delay="1950"],body[data-aos-delay="1950"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1950"].aos-animate,body[data-aos-delay="1950"] [data-aos].aos-animate{transition-delay:1.95s}[data-aos][data-aos][data-aos-duration="2000"],body[data-aos-duration="2000"] [data-aos]{transition-duration:2s}[data-aos][data-aos][data-aos-delay="2000"],body[data-aos-delay="2000"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2000"].aos-animate,body[data-aos-delay="2000"] [data-aos].aos-animate{transition-delay:2s}[data-aos][data-aos][data-aos-duration="2050"],body[data-aos-duration="2050"] [data-aos]{transition-duration:2.05s}[data-aos][data-aos][data-aos-delay="2050"],body[data-aos-delay="2050"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2050"].aos-animate,body[data-aos-delay="2050"] [data-aos].aos-animate{transition-delay:2.05s}[data-aos][data-aos][data-aos-duration="2100"],body[data-aos-duration="2100"] [data-aos]{transition-duration:2.1s}[data-aos][data-aos][data-aos-delay="2100"],body[data-aos-delay="2100"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2100"].aos-animate,body[data-aos-delay="2100"] [data-aos].aos-animate{transition-delay:2.1s}[data-aos][data-aos][data-aos-duration="2150"],body[data-aos-duration="2150"] [data-aos]{transition-duration:2.15s}[data-aos][data-aos][data-aos-delay="2150"],body[data-aos-delay="2150"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2150"].aos-animate,body[data-aos-delay="2150"] [data-aos].aos-animate{transition-delay:2.15s}[data-aos][data-aos][data-aos-duration="2200"],body[data-aos-duration="2200"] [data-aos]{transition-duration:2.2s}[data-aos][data-aos][data-aos-delay="2200"],body[data-aos-delay="2200"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2200"].aos-animate,body[data-aos-delay="2200"] [data-aos].aos-animate{transition-delay:2.2s}[data-aos][data-aos][data-aos-duration="2250"],body[data-aos-duration="2250"] [data-aos]{transition-duration:2.25s}[data-aos][data-aos][data-aos-delay="2250"],body[data-aos-delay="2250"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2250"].aos-animate,body[data-aos-delay="2250"] [data-aos].aos-animate{transition-delay:2.25s}[data-aos][data-aos][data-aos-duration="2300"],body[data-aos-duration="2300"] [data-aos]{transition-duration:2.3s}[data-aos][data-aos][data-aos-delay="2300"],body[data-aos-delay="2300"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2300"].aos-animate,body[data-aos-delay="2300"] [data-aos].aos-animate{transition-delay:2.3s}[data-aos][data-aos][data-aos-duration="2350"],body[data-aos-duration="2350"] [data-aos]{transition-duration:2.35s}[data-aos][data-aos][data-aos-delay="2350"],body[data-aos-delay="2350"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2350"].aos-animate,body[data-aos-delay="2350"] [data-aos].aos-animate{transition-delay:2.35s}[data-aos][data-aos][data-aos-duration="2400"],body[data-aos-duration="2400"] [data-aos]{transition-duration:2.4s}[data-aos][data-aos][data-aos-delay="2400"],body[data-aos-delay="2400"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2400"].aos-animate,body[data-aos-delay="2400"] [data-aos].aos-animate{transition-delay:2.4s}[data-aos][data-aos][data-aos-duration="2450"],body[data-aos-duration="2450"] [data-aos]{transition-duration:2.45s}[data-aos][data-aos][data-aos-delay="2450"],body[data-aos-delay="2450"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2450"].aos-animate,body[data-aos-delay="2450"] [data-aos].aos-animate{transition-delay:2.45s}[data-aos][data-aos][data-aos-duration="2500"],body[data-aos-duration="2500"] [data-aos]{transition-duration:2.5s}[data-aos][data-aos][data-aos-delay="2500"],body[data-aos-delay="2500"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2500"].aos-animate,body[data-aos-delay="2500"] [data-aos].aos-animate{transition-delay:2.5s}[data-aos][data-aos][data-aos-duration="2550"],body[data-aos-duration="2550"] [data-aos]{transition-duration:2.55s}[data-aos][data-aos][data-aos-delay="2550"],body[data-aos-delay="2550"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2550"].aos-animate,body[data-aos-delay="2550"] [data-aos].aos-animate{transition-delay:2.55s}[data-aos][data-aos][data-aos-duration="2600"],body[data-aos-duration="2600"] [data-aos]{transition-duration:2.6s}[data-aos][data-aos][data-aos-delay="2600"],body[data-aos-delay="2600"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2600"].aos-animate,body[data-aos-delay="2600"] [data-aos].aos-animate{transition-delay:2.6s}[data-aos][data-aos][data-aos-duration="2650"],body[data-aos-duration="2650"] [data-aos]{transition-duration:2.65s}[data-aos][data-aos][data-aos-delay="2650"],body[data-aos-delay="2650"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2650"].aos-animate,body[data-aos-delay="2650"] [data-aos].aos-animate{transition-delay:2.65s}[data-aos][data-aos][data-aos-duration="2700"],body[data-aos-duration="2700"] [data-aos]{transition-duration:2.7s}[data-aos][data-aos][data-aos-delay="2700"],body[data-aos-delay="2700"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2700"].aos-animate,body[data-aos-delay="2700"] [data-aos].aos-animate{transition-delay:2.7s}[data-aos][data-aos][data-aos-duration="2750"],body[data-aos-duration="2750"] [data-aos]{transition-duration:2.75s}[data-aos][data-aos][data-aos-delay="2750"],body[data-aos-delay="2750"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2750"].aos-animate,body[data-aos-delay="2750"] [data-aos].aos-animate{transition-delay:2.75s}[data-aos][data-aos][data-aos-duration="2800"],body[data-aos-duration="2800"] [data-aos]{transition-duration:2.8s}[data-aos][data-aos][data-aos-delay="2800"],body[data-aos-delay="2800"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2800"].aos-animate,body[data-aos-delay="2800"] [data-aos].aos-animate{transition-delay:2.8s}[data-aos][data-aos][data-aos-duration="2850"],body[data-aos-duration="2850"] [data-aos]{transition-duration:2.85s}[data-aos][data-aos][data-aos-delay="2850"],body[data-aos-delay="2850"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2850"].aos-animate,body[data-aos-delay="2850"] [data-aos].aos-animate{transition-delay:2.85s}[data-aos][data-aos][data-aos-duration="2900"],body[data-aos-duration="2900"] [data-aos]{transition-duration:2.9s}[data-aos][data-aos][data-aos-delay="2900"],body[data-aos-delay="2900"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2900"].aos-animate,body[data-aos-delay="2900"] [data-aos].aos-animate{transition-delay:2.9s}[data-aos][data-aos][data-aos-duration="2950"],body[data-aos-duration="2950"] [data-aos]{transition-duration:2.95s}[data-aos][data-aos][data-aos-delay="2950"],body[data-aos-delay="2950"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2950"].aos-animate,body[data-aos-delay="2950"] [data-aos].aos-animate{transition-delay:2.95s}[data-aos][data-aos][data-aos-duration="3000"],body[data-aos-duration="3000"] [data-aos]{transition-duration:3s}[data-aos][data-aos][data-aos-delay="3000"],body[data-aos-delay="3000"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="3000"].aos-animate,body[data-aos-delay="3000"] [data-aos].aos-animate{transition-delay:3s}[data-aos][data-aos][data-aos-easing=linear],body[data-aos-easing=linear] [data-aos]{transition-timing-function:cubic-bezier(.25,.25,.75,.75)}[data-aos][data-aos][data-aos-easing=ease],body[data-aos-easing=ease] [data-aos]{transition-timing-function:ease}[data-aos][data-aos][data-aos-easing=ease-in],body[data-aos-easing=ease-in] [data-aos]{transition-timing-function:ease-in}[data-aos][data-aos][data-aos-easing=ease-out],body[data-aos-easing=ease-out] [data-aos]{transition-timing-function:ease-out}[data-aos][data-aos][data-aos-easing=ease-in-out],body[data-aos-easing=ease-in-out] [data-aos]{transition-timing-function:ease-in-out}[data-aos][data-aos][data-aos-easing=ease-in-back],body[data-aos-easing=ease-in-back] [data-aos]{transition-timing-function:cubic-bezier(.6,-.28,.735,.045)}[data-aos][data-aos][data-aos-easing=ease-out-back],body[data-aos-easing=ease-out-back] [data-aos]{transition-timing-function:cubic-bezier(.175,.885,.32,1.275)}[data-aos][data-aos][data-aos-easing=ease-in-out-back],body[data-aos-easing=ease-in-out-back] [data-aos]{transition-timing-function:cubic-bezier(.68,-.55,.265,1.55)}[data-aos][data-aos][data-aos-easing=ease-in-sine],body[data-aos-easing=ease-in-sine] [data-aos]{transition-timing-function:cubic-bezier(.47,0,.745,.715)}[data-aos][data-aos][data-aos-easing=ease-out-sine],body[data-aos-easing=ease-out-sine] [data-aos]{transition-timing-function:cubic-bezier(.39,.575,.565,1)}[data-aos][data-aos][data-aos-easing=ease-in-out-sine],body[data-aos-easing=ease-in-out-sine] [data-aos]{transition-timing-function:cubic-bezier(.445,.05,.55,.95)}[data-aos][data-aos][data-aos-easing=ease-in-quad],body[data-aos-easing=ease-in-quad] [data-aos]{transition-timing-function:cubic-bezier(.55,.085,.68,.53)}[data-aos][data-aos][data-aos-easing=ease-out-quad],body[data-aos-easing=ease-out-quad] [data-aos]{transition-timing-function:cubic-bezier(.25,.46,.45,.94)}[data-aos][data-aos][data-aos-easing=ease-in-out-quad],body[data-aos-easing=ease-in-out-quad] [data-aos]{transition-timing-function:cubic-bezier(.455,.03,.515,.955)}[data-aos][data-aos][data-aos-easing=ease-in-cubic],body[data-aos-easing=ease-in-cubic] [data-aos]{transition-timing-function:cubic-bezier(.55,.085,.68,.53)}[data-aos][data-aos][data-aos-easing=ease-out-cubic],body[data-aos-easing=ease-out-cubic] [data-aos]{transition-timing-function:cubic-bezier(.25,.46,.45,.94)}[data-aos][data-aos][data-aos-easing=ease-in-out-cubic],body[data-aos-easing=ease-in-out-cubic] [data-aos]{transition-timing-function:cubic-bezier(.455,.03,.515,.955)}[data-aos][data-aos][data-aos-easing=ease-in-quart],body[data-aos-easing=ease-in-quart] [data-aos]{transition-timing-function:cubic-bezier(.55,.085,.68,.53)}[data-aos][data-aos][data-aos-easing=ease-out-quart],body[data-aos-easing=ease-out-quart] [data-aos]{transition-timing-function:cubic-bezier(.25,.46,.45,.94)}[data-aos][data-aos][data-aos-easing=ease-in-out-quart],body[data-aos-easing=ease-in-out-quart] [data-aos]{transition-timing-function:cubic-bezier(.455,.03,.515,.955)}[data-aos^=fade][data-aos^=fade]{opacity:0;transition-property:opacity,transform}[data-aos^=fade][data-aos^=fade].aos-animate{opacity:1;transform:translateZ(0)}[data-aos=fade-up]{transform:translate3d(0,100px,0)}[data-aos=fade-down]{transform:translate3d(0,-100px,0)}[data-aos=fade-right]{transform:translate3d(-100px,0,0)}[data-aos=fade-left]{transform:translate3d(100px,0,0)}[data-aos=fade-up-right]{transform:translate3d(-100px,100px,0)}[data-aos=fade-up-left]{transform:translate3d(100px,100px,0)}[data-aos=fade-down-right]{transform:translate3d(-100px,-100px,0)}[data-aos=fade-down-left]{transform:translate3d(100px,-100px,0)}[data-aos^=zoom][data-aos^=zoom]{opacity:0;transition-property:opacity,transform}[data-aos^=zoom][data-aos^=zoom].aos-animate{opacity:1;transform:translateZ(0) scale(1)}[data-aos=zoom-in]{transform:scale(.6)}[data-aos=zoom-in-up]{transform:translate3d(0,100px,0) scale(.6)}[data-aos=zoom-in-down]{transform:translate3d(0,-100px,0) scale(.6)}[data-aos=zoom-in-right]{transform:translate3d(-100px,0,0) scale(.6)}[data-aos=zoom-in-left]{transform:translate3d(100px,0,0) scale(.6)}[data-aos=zoom-out]{transform:scale(1.2)}[data-aos=zoom-out-up]{transform:translate3d(0,100px,0) scale(1.2)}[data-aos=zoom-out-down]{transform:translate3d(0,-100px,0) scale(1.2)}[data-aos=zoom-out-right]{transform:translate3d(-100px,0,0) scale(1.2)}[data-aos=zoom-out-left]{transform:translate3d(100px,0,0) scale(1.2)}[data-aos^=slide][data-aos^=slide]{transition-property:transform}[data-aos^=slide][data-aos^=slide].aos-animate{transform:translateZ(0)}[data-aos=slide-up]{transform:translate3d(0,100%,0)}[data-aos=slide-down]{transform:translate3d(0,-100%,0)}[data-aos=slide-right]{transform:translate3d(-100%,0,0)}[data-aos=slide-left]{transform:translate3d(100%,0,0)}[data-aos^=flip][data-aos^=flip]{backface-visibility:hidden;transition-property:transform}[data-aos=flip-left]{transform:perspective(2500px) rotateY(-100deg)}[data-aos=flip-left].aos-animate{transform:perspective(2500px) rotateY(0)}[data-aos=flip-right]{transform:perspective(2500px) rotateY(100deg)}[data-aos=flip-right].aos-animate{transform:perspective(2500px) rotateY(0)}[data-aos=flip-up]{transform:perspective(2500px) rotateX(-100deg)}[data-aos=flip-up].aos-animate{transform:perspective(2500px) rotateX(0)}[data-aos=flip-down]{transform:perspective(2500px) rotateX(100deg)}[data-aos=flip-down].aos-animate{transform:perspective(2500px) rotateX(0)}.slick-slider{position:relative;display:block;box-sizing:border-box;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-touch-callout:none;-khtml-user-select:none;-ms-touch-action:pan-y;touch-action:pan-y;-webkit-tap-highlight-color:transparent}.slick-list{position:relative;display:block;overflow:hidden;margin:0;padding:0}.slick-list:focus{outline:none}.slick-list.dragging{cursor:pointer;cursor:hand}.slick-slider .slick-track,.slick-slider .slick-list{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.slick-track{position:relative;top:0;left:0;display:block;margin-left:auto;margin-right:auto}.slick-track:before,.slick-track:after{display:table;content:''}.slick-track:after{clear:both}.slick-loading .slick-track{visibility:hidden}.slick-slide{display:none;float:left;height:100%;min-height:1px}[dir='rtl'] .slick-slide{float:right}.slick-slide img{display:block}.slick-slide.slick-loading img{display:none}.slick-slide.dragging img{pointer-events:none}.slick-initialized .slick-slide{display:block}.slick-loading .slick-slide{visibility:hidden}.slick-vertical .slick-slide{display:block;height:auto;border:1px solid transparent}.slick-arrow.slick-hidden{display:none}.flatpickr-calendar{background:transparent;opacity:0;display:none;text-align:center;visibility:hidden;padding:0;-webkit-animation:none;animation:none;direction:ltr;border:0;font-size:14px;line-height:24px;border-radius:5px;position:absolute;width:307.875px;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-touch-action:manipulation;touch-action:manipulation;background:#fff;-webkit-box-shadow:1px 0 0 #e6e6e6,-1px 0 0 #e6e6e6,0 1px 0 #e6e6e6,0 -1px 0 #e6e6e6,0 3px 13px rgba(0,0,0,.08);box-shadow:1px 0 0 #e6e6e6,-1px 0 0 #e6e6e6,0 1px 0 #e6e6e6,0 -1px 0 #e6e6e6,0 3px 13px rgba(0,0,0,.08)}.flatpickr-calendar.open,.flatpickr-calendar.inline{opacity:1;max-height:640px;visibility:visible}.flatpickr-calendar.open{display:inline-block;z-index:99999}.flatpickr-calendar.animate.open{-webkit-animation:fpFadeInDown 300ms cubic-bezier(.23,1,.32,1);animation:fpFadeInDown 300ms cubic-bezier(.23,1,.32,1)}.flatpickr-calendar.inline{display:block;position:relative;top:2px}.flatpickr-calendar.static{position:absolute;top:calc(100% + 2px)}.flatpickr-calendar.static.open{z-index:999;display:block}.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+1) .flatpickr-day.inRange:nth-child(7n+7){-webkit-box-shadow:none!important;box-shadow:none!important}.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+2) .flatpickr-day.inRange:nth-child(7n+1){-webkit-box-shadow:-2px 0 0 #e6e6e6,5px 0 0 #e6e6e6;box-shadow:-2px 0 0 #e6e6e6,5px 0 0 #e6e6e6}.flatpickr-calendar .hasWeeks .dayContainer,.flatpickr-calendar .hasTime .dayContainer{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.flatpickr-calendar .hasWeeks .dayContainer{border-left:0}.flatpickr-calendar.hasTime .flatpickr-time{height:40px;border-top:1px solid #e6e6e6}.flatpickr-calendar.noCalendar.hasTime .flatpickr-time{height:auto}.flatpickr-calendar:before,.flatpickr-calendar:after{position:absolute;display:block;pointer-events:none;border:solid transparent;content:'';height:0;width:0;left:22px}.flatpickr-calendar.rightMost:before,.flatpickr-calendar.arrowRight:before,.flatpickr-calendar.rightMost:after,.flatpickr-calendar.arrowRight:after{left:auto;right:22px}.flatpickr-calendar.arrowCenter:before,.flatpickr-calendar.arrowCenter:after{left:50%;right:50%}.flatpickr-calendar:before{border-width:5px;margin:0 -5px}.flatpickr-calendar:after{border-width:4px;margin:0 -4px}.flatpickr-calendar.arrowTop:before,.flatpickr-calendar.arrowTop:after{bottom:100%}.flatpickr-calendar.arrowTop:before{border-bottom-color:#e6e6e6}.flatpickr-calendar.arrowTop:after{border-bottom-color:#fff}.flatpickr-calendar.arrowBottom:before,.flatpickr-calendar.arrowBottom:after{top:100%}.flatpickr-calendar.arrowBottom:before{border-top-color:#e6e6e6}.flatpickr-calendar.arrowBottom:after{border-top-color:#fff}.flatpickr-calendar:focus{outline:0}.flatpickr-wrapper{position:relative;display:inline-block}.flatpickr-months{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.flatpickr-months .flatpickr-month{background:transparent;color:rgba(0,0,0,.9);fill:rgba(0,0,0,.9);height:34px;line-height:1;text-align:center;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.flatpickr-months .flatpickr-prev-month,.flatpickr-months .flatpickr-next-month{text-decoration:none;cursor:pointer;position:absolute;top:0;height:34px;padding:10px;z-index:3;color:rgba(0,0,0,.9);fill:rgba(0,0,0,.9)}.flatpickr-months .flatpickr-prev-month.flatpickr-disabled,.flatpickr-months .flatpickr-next-month.flatpickr-disabled{display:none}.flatpickr-months .flatpickr-prev-month i,.flatpickr-months .flatpickr-next-month i{position:relative}.flatpickr-months .flatpickr-prev-month.flatpickr-prev-month,.flatpickr-months .flatpickr-next-month.flatpickr-prev-month{left:0}.flatpickr-months .flatpickr-prev-month.flatpickr-next-month,.flatpickr-months .flatpickr-next-month.flatpickr-next-month{right:0}.flatpickr-months .flatpickr-prev-month:hover,.flatpickr-months .flatpickr-next-month:hover{color:#959ea9}.flatpickr-months .flatpickr-prev-month:hover svg,.flatpickr-months .flatpickr-next-month:hover svg{fill:#f64747}.flatpickr-months .flatpickr-prev-month svg,.flatpickr-months .flatpickr-next-month svg{width:14px;height:14px}.flatpickr-months .flatpickr-prev-month svg path,.flatpickr-months .flatpickr-next-month svg path{-webkit-transition:fill .1s;transition:fill .1s;fill:inherit}.numInputWrapper{position:relative;height:auto}.numInputWrapper input,.numInputWrapper span{display:inline-block}.numInputWrapper input{width:100%}.numInputWrapper input::-ms-clear{display:none}.numInputWrapper input::-webkit-outer-spin-button,.numInputWrapper input::-webkit-inner-spin-button{margin:0;-webkit-appearance:none}.numInputWrapper span{position:absolute;right:0;width:14px;padding:0 4px 0 2px;height:50%;line-height:50%;opacity:0;cursor:pointer;border:1px solid rgba(57,57,57,.15);-webkit-box-sizing:border-box;box-sizing:border-box}.numInputWrapper span:hover{background:rgba(0,0,0,.1)}.numInputWrapper span:active{background:rgba(0,0,0,.2)}.numInputWrapper span:after{display:block;content:"";position:absolute}.numInputWrapper span.arrowUp{top:0;border-bottom:0}.numInputWrapper span.arrowUp:after{border-left:4px solid transparent;border-right:4px solid transparent;border-bottom:4px solid rgba(57,57,57,.6);top:26%}.numInputWrapper span.arrowDown{top:50%}.numInputWrapper span.arrowDown:after{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(57,57,57,.6);top:40%}.numInputWrapper span svg{width:inherit;height:auto}.numInputWrapper span svg path{fill:rgba(0,0,0,.5)}.numInputWrapper:hover{background:rgba(0,0,0,.05)}.numInputWrapper:hover span{opacity:1}.flatpickr-current-month{font-size:135%;line-height:inherit;font-weight:300;color:inherit;position:absolute;width:75%;left:12.5%;padding:7.48px 0 0 0;line-height:1;height:34px;display:inline-block;text-align:center;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.flatpickr-current-month span.cur-month{font-family:inherit;font-weight:700;color:inherit;display:inline-block;margin-left:.5ch;padding:0}.flatpickr-current-month span.cur-month:hover{background:rgba(0,0,0,.05)}.flatpickr-current-month .numInputWrapper{width:6ch;width:7ch\0;display:inline-block}.flatpickr-current-month .numInputWrapper span.arrowUp:after{border-bottom-color:rgba(0,0,0,.9)}.flatpickr-current-month .numInputWrapper span.arrowDown:after{border-top-color:rgba(0,0,0,.9)}.flatpickr-current-month input.cur-year{background:transparent;-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;cursor:text;padding:0 0 0 .5ch;margin:0;display:inline-block;font-size:inherit;font-family:inherit;font-weight:300;line-height:inherit;height:auto;border:0;border-radius:0;vertical-align:initial;-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}.flatpickr-current-month input.cur-year:focus{outline:0}.flatpickr-current-month input.cur-year[disabled],.flatpickr-current-month input.cur-year[disabled]:hover{font-size:100%;color:rgba(0,0,0,.5);background:transparent;pointer-events:none}.flatpickr-current-month .flatpickr-monthDropdown-months{appearance:menulist;background:transparent;border:none;border-radius:0;box-sizing:border-box;color:inherit;cursor:pointer;font-size:inherit;font-family:inherit;font-weight:300;height:auto;line-height:inherit;margin:-1px 0 0 0;outline:none;padding:0 0 0 .5ch;position:relative;vertical-align:initial;-webkit-box-sizing:border-box;-webkit-appearance:menulist;-moz-appearance:menulist;width:auto}.flatpickr-current-month .flatpickr-monthDropdown-months:focus,.flatpickr-current-month .flatpickr-monthDropdown-months:active{outline:none}.flatpickr-current-month .flatpickr-monthDropdown-months:hover{background:rgba(0,0,0,.05)}.flatpickr-current-month .flatpickr-monthDropdown-months .flatpickr-monthDropdown-month{background-color:transparent;outline:none;padding:0}.flatpickr-weekdays{background:transparent;text-align:center;overflow:hidden;width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;height:28px}.flatpickr-weekdays .flatpickr-weekdaycontainer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}span.flatpickr-weekday{cursor:default;font-size:90%;background:transparent;color:rgba(0,0,0,.54);line-height:1;margin:0;text-align:center;display:block;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;font-weight:bolder}.dayContainer,.flatpickr-weeks{padding:1px 0 0 0}.flatpickr-days{position:relative;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;width:307.875px}.flatpickr-days:focus{outline:0}.dayContainer{padding:0;outline:0;text-align:left;width:307.875px;min-width:307.875px;max-width:307.875px;-webkit-box-sizing:border-box;box-sizing:border-box;display:inline-block;display:-ms-flexbox;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-wrap:wrap;-ms-flex-pack:justify;-webkit-justify-content:space-around;justify-content:space-around;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}.dayContainer+.dayContainer{-webkit-box-shadow:-1px 0 0 #e6e6e6;box-shadow:-1px 0 0 #e6e6e6}.flatpickr-day{background:none;border:1px solid transparent;border-radius:150px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#393939;cursor:pointer;font-weight:400;width:14.2857143%;-webkit-flex-basis:14.2857143%;-ms-flex-preferred-size:14.2857143%;flex-basis:14.2857143%;max-width:39px;height:39px;line-height:39px;margin:0;display:inline-block;position:relative;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;text-align:center}.flatpickr-day.inRange,.flatpickr-day.prevMonthDay.inRange,.flatpickr-day.nextMonthDay.inRange,.flatpickr-day.today.inRange,.flatpickr-day.prevMonthDay.today.inRange,.flatpickr-day.nextMonthDay.today.inRange,.flatpickr-day:hover,.flatpickr-day.prevMonthDay:hover,.flatpickr-day.nextMonthDay:hover,.flatpickr-day:focus,.flatpickr-day.prevMonthDay:focus,.flatpickr-day.nextMonthDay:focus{cursor:pointer;outline:0;background:#e6e6e6;border-color:#e6e6e6}.flatpickr-day.today{border-color:#959ea9}.flatpickr-day.today:hover,.flatpickr-day.today:focus{border-color:#959ea9;background:#959ea9;color:#fff}.flatpickr-day.selected,.flatpickr-day.startRange,.flatpickr-day.endRange,.flatpickr-day.selected.inRange,.flatpickr-day.startRange.inRange,.flatpickr-day.endRange.inRange,.flatpickr-day.selected:focus,.flatpickr-day.startRange:focus,.flatpickr-day.endRange:focus,.flatpickr-day.selected:hover,.flatpickr-day.startRange:hover,.flatpickr-day.endRange:hover,.flatpickr-day.selected.prevMonthDay,.flatpickr-day.startRange.prevMonthDay,.flatpickr-day.endRange.prevMonthDay,.flatpickr-day.selected.nextMonthDay,.flatpickr-day.startRange.nextMonthDay,.flatpickr-day.endRange.nextMonthDay{background:#569ff7;-webkit-box-shadow:none;box-shadow:none;color:#fff;border-color:#569ff7}.flatpickr-day.selected.startRange,.flatpickr-day.startRange.startRange,.flatpickr-day.endRange.startRange{border-radius:50px 0 0 50px}.flatpickr-day.selected.endRange,.flatpickr-day.startRange.endRange,.flatpickr-day.endRange.endRange{border-radius:0 50px 50px 0}.flatpickr-day.selected.startRange+.endRange:not(:nth-child(7n+1)),.flatpickr-day.startRange.startRange+.endRange:not(:nth-child(7n+1)),.flatpickr-day.endRange.startRange+.endRange:not(:nth-child(7n+1)){-webkit-box-shadow:-10px 0 0 #569ff7;box-shadow:-10px 0 0 #569ff7}.flatpickr-day.selected.startRange.endRange,.flatpickr-day.startRange.startRange.endRange,.flatpickr-day.endRange.startRange.endRange{border-radius:50px}.flatpickr-day.inRange{border-radius:0;-webkit-box-shadow:-5px 0 0 #e6e6e6,5px 0 0 #e6e6e6;box-shadow:-5px 0 0 #e6e6e6,5px 0 0 #e6e6e6}.flatpickr-day.flatpickr-disabled,.flatpickr-day.flatpickr-disabled:hover,.flatpickr-day.prevMonthDay,.flatpickr-day.nextMonthDay,.flatpickr-day.notAllowed,.flatpickr-day.notAllowed.prevMonthDay,.flatpickr-day.notAllowed.nextMonthDay{color:rgba(57,57,57,.3);background:transparent;border-color:transparent;cursor:default}.flatpickr-day.flatpickr-disabled,.flatpickr-day.flatpickr-disabled:hover{cursor:not-allowed;color:rgba(57,57,57,.1)}.flatpickr-day.week.selected{border-radius:0;-webkit-box-shadow:-5px 0 0 #569ff7,5px 0 0 #569ff7;box-shadow:-5px 0 0 #569ff7,5px 0 0 #569ff7}.flatpickr-day.hidden{visibility:hidden}.rangeMode .flatpickr-day{margin-top:1px}.flatpickr-weekwrapper{float:left}.flatpickr-weekwrapper .flatpickr-weeks{padding:0 12px;-webkit-box-shadow:1px 0 0 #e6e6e6;box-shadow:1px 0 0 #e6e6e6}.flatpickr-weekwrapper .flatpickr-weekday{float:none;width:100%;line-height:28px}.flatpickr-weekwrapper span.flatpickr-day,.flatpickr-weekwrapper span.flatpickr-day:hover{display:block;width:100%;max-width:none;color:rgba(57,57,57,.3);background:transparent;cursor:default;border:none}.flatpickr-innerContainer{display:block;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden}.flatpickr-rContainer{display:inline-block;padding:0;-webkit-box-sizing:border-box;box-sizing:border-box}.flatpickr-time{text-align:center;outline:0;display:block;height:0;line-height:40px;max-height:40px;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.flatpickr-time:after{content:"";display:table;clear:both}.flatpickr-time .numInputWrapper{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;width:40%;height:40px;float:left}.flatpickr-time .numInputWrapper span.arrowUp:after{border-bottom-color:#393939}.flatpickr-time .numInputWrapper span.arrowDown:after{border-top-color:#393939}.flatpickr-time.hasSeconds .numInputWrapper{width:26%}.flatpickr-time.time24hr .numInputWrapper{width:49%}.flatpickr-time input{background:transparent;-webkit-box-shadow:none;box-shadow:none;border:0;border-radius:0;text-align:center;margin:0;padding:0;height:inherit;line-height:inherit;color:#393939;font-size:14px;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}.flatpickr-time input.flatpickr-hour{font-weight:700}.flatpickr-time input.flatpickr-minute,.flatpickr-time input.flatpickr-second{font-weight:400}.flatpickr-time input:focus{outline:0;border:0}.flatpickr-time .flatpickr-time-separator,.flatpickr-time .flatpickr-am-pm{height:inherit;float:left;line-height:inherit;color:#393939;font-weight:700;width:2%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}.flatpickr-time .flatpickr-am-pm{outline:0;width:18%;cursor:pointer;text-align:center;font-weight:400}.flatpickr-time input:hover,.flatpickr-time .flatpickr-am-pm:hover,.flatpickr-time input:focus,.flatpickr-time .flatpickr-am-pm:focus{background:#eee}.flatpickr-input[readonly]{cursor:pointer}@-webkit-keyframes fpFadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes fpFadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}*{outline:0;margin:0;padding:0}ul,li,ol{padding:0;margin:0}button:focus,button:active{outline:0;box-shadow:transparent;border:0}body,html{font:400 15px/20px "Lato",sans-serif;color:#000;background:#fff;overflow-x:hidden}body.loaderon{overflow-x:hidden;height:100vh}#preloader{display:block;position:fixed;left:0;top:0;width:100%;height:100%;z-index:9999;background-color:rgba(255,255,255,1)}#preloader img{width:150px}#preloader>div{display:flex;align-items:center;justify-content:center;height:100%}.three-balls{margin:0 auto;width:70px;text-align:center;position:absolute;left:0;right:0;top:57%}.three-balls .ball{position:relative;width:10px;height:10px;border-radius:50%;display:inline-block;-webkit-animation:bouncedelay 2s infinite cubic-bezier(.62,.28,.23,.99) both;animation:bouncedelay 2s infinite cubic-bezier(.62,.28,.23,.99) both}.three-balls .ball1{-webkit-animation-delay:-0.16s;animation-delay:-0.16s}.three-balls .ball2{-webkit-animation-delay:-0.08s;animation-delay:-0.08s}.industry-page-banner{position:relative}.slider-box-custom{width:930px;height:100%;justify-content:center;align-items:center;display:flex;position:relative;overflow:hidden}.slid-box{position:relative;width:100%;height:447px;margin:0 auto;display:flex;justify-content:center;align-items:center}.slid-box .for-desktop{position:absolute;top:50px;overflow:hidden;z-index:9}.slid-box .for-laptop{width:460px;overflow:hidden;position:absolute;left:0;z-index:9;background-repeat:no-repeat;bottom:12px}.slid-box .for-tablate{width:181px;overflow:hidden;background-repeat:no-repeat;right:20%;position:absolute;z-index:9;bottom:35px}.slid-box .for-mobile{width:90px;overflow:hidden;position:absolute;z-index:9;background-repeat:no-repeat;bottom:25px;right:13%}.slid-box .tree-im{width:88px;overflow:hidden;position:absolute;z-index:8;bottom:25px;right:65px}.for-laptop-with{width:288px;margin:20px 95px 43px auto;border-radius:3px;display:block;overflow:hidden}.for-desktop-with{width:415px;height:368px;margin:19px 23px 25px 23px;border-radius:3px;display:block;overflow:hidden}.for-tablate-with{margin:25px 10px 20px 23px;border-radius:3px;display:block;overflow:hidden}.for-mobile-with{margin:7px 9px 13px 7px;border-radius:8px;display:block;overflow:hidden}.slid-box>div.tree-im{left:78%;top:50%;transform:none;z-index:1}.slid-box>div#arrows{position:absolute;left:-5px;top:28%}.slid-box>div#arrows div{width:10px;height:10px;border-radius:100%;border:solid 2px #fff;display:block;cursor:pointer;margin-top:8px;opacity:1;transition:0.5s;cursor:pointer}.slid-box>div#arrows div:hover{width:12px;height:12px}.slid-box:before{position:absolute;top:0;left:0;width:1px;height:230px;content:"";transform:translateY(-50%);background:rgba(255,255,255,.5)}@keyframes bouncedelay{0%{bottom:0;background-color:#03a9f4}16.66%{bottom:20px;background-color:#fb6542}33.33%{bottom:0;background-color:#fb6542}50%{bottom:20px;background-color:#fb0}66.66%{bottom:0;background-color:#fb0}83.33%{bottom:20px;background-color:#03a9f4}100%{bottom:0;background-color:#03a9f4}}@-webkit-keyframes bouncedelay{0%{bottom:0;background-color:#03a9f4}16.66%{bottom:40px;background-color:#fb6542}33.33%{bottom:0;background-color:#fb6542}50%{bottom:40px;background-color:#fb0}66.66%{bottom:0;background-color:#fb0}83.33%{bottom:40px;background-color:#03a9f4}100%{bottom:0;background-color:#03a9f4}}a{text-decoration:none;transition:0.5s;color:#444}a:hover{text-decoration:none}img{max-width:100%;vertical-align:middle}ul li{list-style-type:none}.invoice-box,#invoice_page{background:#fff;box-shadow:0 0 10px 0 rgba(0,0,0,.1);padding:30px;margin:70px 0}.invoice-box h1,#invoice_page h1{font-weight:700;color:rgb(0,174,214)}.banner-text .btn-1{font:700 19px/53px "Lato",sans-serif;padding:0 30px;border-radius:5px;background:#fff;color:#000;box-shadow:0 0 20px 0 rgba(0,0,0,.3);display:inline-block;position:relative;z-index:2}table.table-striped thead{background:rgb(0,174,214);background:-moz-linear-gradient(left,rgba(0,174,214,1) 0%,rgba(0,203,205,1) 100%);background:-webkit-linear-gradient(left,rgba(0,174,214,1) 0%,rgba(0,203,205,1) 100%);background:linear-gradient(to right,rgba(0,174,214,1) 0%,rgba(0,203,205,1) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00aed6',endColorstr='#00cbcd',GradientType=1);color:#fff;border:0}table{border-spacing:0;margin-top:10px;text-align:right;display:flow-root}.table td,.table th{border-top:0;font-size:14px;padding:10px 20px}.table td:first-child,.table th:first-child{width:60%}.table .quantity_column{width:12%;text-align:center}.table thead th+th{border-left:solid 1px rgba(255,255,255,.2)}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.03)}.banner-text .btn-1:hover{color:#fff}.invoice-form .radio label{padding-top:5px}.invoice-form .radio label span{display:block;text-align:center}table thead,table tbody{box-shadow:1px 1px 5px 0 rgba(0,0,0,.1);text-align:left;width:100%;display:block}table thead tr,table tbody tr{display:flex}.table thead th{border-bottom:0}table thead{border-radius:5px 5px 0 0;overflow:hidden}table tfoot{display:inline-block;text-align:left;border:solid 1px rgba(0,0,0,.1);border-radius:0;box-shadow:1px 1px 5px 0 rgba(0,0,0,.1);margin-top:20px;padding:0 5px;width:40%}table tfoot tr+tr{border-top:solid 1px rgba(0,0,0,.1)}table tfoot tr{display:flex;width:100%}table.price-table td{width:47%!important;display:inline-block}table.price-table tbody,table.price-table tr{width:100%;display:block}.invoice-box p,#invoice_page p{color:rgba(0,0,0);font-size:14px}.invoice-box form ul li.wpi_checkout_row{width:32.333%;padding:0 10px;display:inline-block}.invoice-box form ul li.section_title,.invoice-box h5{font-size:18px;font-weight:700;position:relative;padding-left:15px;margin-top:20px;display:inline-block;width:100%}.invoice-box form ul li.section_title:before,.invoice-box h5:before{position:absolute;top:0;left:0;bottom:0;width:3px;background:rgb(0,174,214);content:""}.invoice-box form ul li.section_description p{font-size:14px;padding-top:15px}.invoice-box form ul{padding-left:0}.recur-bill{position:relative;padding-left:10px}.recur-bill:before{position:absolute;top:0;left:0;bottom:0;width:3px;background:red;content:""}.invoice-box form ul li.wpi_checkout_row .control-group .controls .text-input{font-size:14px;height:40px;line-height:40px;border:solid 1px rgba(0,0,0,.1);width:100%;border-radius:5px;padding-left:10px}.invoice-box form ul li.wpi_checkout_row .control-group label{padding-top:15px;font-size:13px;padding-bottom:0;margin-bottom:0;color:rgba(0,0,0,.6)}.invoice-box form ul li .controls .submit_button{font-size:16px;line-height:45px;padding:0 30px;color:#fff;font-weight:700;border-radius:5px;box-shadow:0 0 15px 0 rgba(0,0,0,.2);display:inline-block;margin:10px 0 0;background:rgb(0,174,214);background:-moz-linear-gradient(left,rgba(0,174,214,1) 0%,rgba(0,203,205,1) 100%);background:-webkit-linear-gradient(left,rgba(0,174,214,1) 0%,rgba(0,203,205,1) 100%);background:linear-gradient(to right,rgba(0,174,214,1) 0%,rgba(0,203,205,1) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00aed6',endColorstr='#00cbcd',GradientType=1);border:0}.invoice-border{border-top:solid 1px rgba(0,0,0,.1);margin-top:30px;padding-top:10px}.other-radio-input{display:none}.about-parallax video{box-shadow:0 2px 10px 0 rgba(0,0,0,.4)}.radio{margin:.5rem}.radio input[type="radio"]{position:absolute;opacity:0}.radio input[type="radio"]+label:before{content:"";background:#f4f4f4;border-radius:100%;border:1px solid #b4b4b4;display:inline-block;width:1.4em;height:1.4em;position:relative;top:0;margin-right:8px;vertical-align:top;cursor:pointer;text-align:center;transition:all 250ms ease}.radio input[type="radio"]:checked+.radio-label:before{background-color:#3197ee;box-shadow:inset 0 0 0 4px #f4f4f4}.radio input[type="radio"]:focus+.radio-label:before{outline:none;border-color:#3197ee}.radio input[type="radio"]:disabled+.radio-label:before{box-shadow:inset 0 0 0 4px #f4f4f4;border-color:#b4b4b4;background:#b4b4b4}.radio input[type="radio"]+.radio-label:empty:before{margin-right:0}.tabset{margin-top:-101px}.tabset>input[type="radio"]{position:absolute;left:-200vw}.tabset>label{position:relative;display:inline-block;padding:10px 25px;border:1px solid #fff;cursor:pointer;font-weight:600;border-radius:5px;transition:0.5s;margin-right:5px;color:#fff}.tabset>label:hover,.tabset>input:focus+label{color:#000;background:#fff;transition:0.5s}.tabset>input:checked+label{color:#000;background:#fff;transition:0.5s}.tab-panel{padding:30px 0;border-top:1px solid #ccc}.subscribe-form button{background:#fff;color:#000;padding:10px 30px;border-radius:5px;display:inline-block;border:0;margin-top:25px;font-size:16px;font-weight:700}.map{position:relative}.contact-head{position:absolute;top:80px;left:50%;transform:translateX(-50%)}.contact-head h1{font-weight:700;display:inline-block;background:#fff;padding:10px 20px;box-shadow:0 0 10px 0 rgba(0,0,0,.2)}.subscribe-right{background-size:cover;background-position:center;padding:50px}.subscribe-left .heading1 h1{font-size:35px;font-weight:700}.subscribe-left{padding:50px}.subscribe-form .form-control{margin-top:10px;border:0;background:rgba(255,255,255,.8);color:#000}.subscribe-box{box-shadow:0 0 5px 0 rgba(0,0,0,.1);margin:70px 0 50px}header.sample-header-page .navbar-toggler{background:rgb(0,174,214);background:-moz-linear-gradient(left,rgba(0,174,214,1) 0%,rgba(0,203,205,1) 100%);background:-webkit-linear-gradient(left,rgba(0,174,214,1) 0%,rgba(0,203,205,1) 100%);background:linear-gradient(to right,rgba(0,174,214,1) 0%,rgba(0,203,205,1) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00aed6',endColorstr='#00cbcd',GradientType=1)}header.sample-header-page{background:#fff;box-shadow:0 0 5px 0 rgba(0,0,0,.2)}header.sample-header-page #navbarSupportedContent .nav-link,.portfolio-page-banner header #navbarSupportedContent .nav-link{color:#666}.portfolio-page-banner header #navbarSupportedContent .nav-link{color:#fff}#navbarSupportedContent ul li:last-child .nav-link{padding-right:0}.sample-header-page .navbar-dark .navbar-nav .active>.nav-link,.sample-header-page .navbar-dark .navbar-nav .nav-link.active,.portfolio-page-banner .navbar-dark .navbar-nav .active>.nav-link,.portfolio-page-banner .navbar-dark .navbar-nav .nav-link.active{font-weight:700!important;color:#02d2d2!important}.portfolio-page-banner .navbar{border-bottom-color:rgba(0,0,0,.1)}header.sample-header-page .top-logo{filter:none}.top-logo{width:180px;filter:brightness(700%)}.portfolio-page-banner .top-logo{filter:brightness(100%)}#banner2.portfolio-page-banner .banner-text{padding:140px 0 190px}#banner2.portfolio-page-banner .banner-text h1:before{background:#08adcb}#contactForm{padding-bottom:80px}.btn-2{font:700 14px/40px "Lato",sans-serif;padding:0 20px;border-radius:5px;color:#000;box-shadow:0 0 15px 0 rgba(0,0,0,.2);display:inline-block;position:relative;margin:10px 0 0;background:rgb(0,174,214);background:-moz-linear-gradient(left,rgba(0,174,214,1) 0%,rgba(0,203,205,1) 100%);background:-webkit-linear-gradient(left,rgba(0,174,214,1) 0%,rgba(0,203,205,1) 100%);background:linear-gradient(to right,rgba(0,174,214,1) 0%,rgba(0,203,205,1) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00aed6',endColorstr='#00cbcd',GradientType=1);color:#fff;position:relative}.btn-2.big-btn{font-size:16px;line-height:45px;padding:0 30px}.btn-2:hover{color:#fff}.btn-2{position:relative;z-index:1}.btn-2:before{position:absolute;transition:0.3s;border-radius:5px;z-index:-1;left:0;top:0;bottom:0;width:0;background:#009483;content:""}.btn-2:hover:before{width:100%}.banner-text .btn-1:before{position:absolute;top:0;left:0;bottom:0;background:#3fd854;content:"";width:0;transition:0.3s;border-radius:5px;z-index:-1}.banner-text .btn-1:hover:before{width:100%}#banner{width:100%;position:relative;background-size:cover;height:765px;background-position:50% 0;background-repeat:no-repeat;clip-path:ellipse(81% 68% at 50% 31%)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link,.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:#00e4ff!important}.navbar-dark .navbar-nav .nav-link{color:#fff;transition:0.5s}.navbar{border-bottom:solid 1px rgba(255,255,255,.3)}#navbarSupportedContent .nav-link{font:400 15px/20px "Lato",sans-serif;padding:0 17px;color:#fff;text-transform:uppercase}#banner .navbar-nav li:last-child .nav-link{padding-right:0}#banner .banner-text{padding:60px 0}#banner .banner-text h1{font:700 46px/50px "Lato",sans-serif;position:relative}#banner .banner-text h1:before{position:absolute;bottom:0;left:50%;transform:translateX(-50%);width:100px;height:3px;background:#fff;content:""}#banner .banner-text h1>span{display:block}#banner .banner-text p>span{display:block}#banner .icon-box ul li a{font-size:15px;color:#fff;display:inline-block;margin:8px 0;text-shadow:1px 0 1px #000}#banner .icon-box{position:absolute;top:60%;right:0;transform:translateY(-50%)}.banner-position{position:relative;padding:0 0 93px;background:#ebf2f3}.banner-slider{position:absolute;bottom:0;display:flex;justify-content:center;align-items:center;width:100%;z-index:99}.icon-position{position:relative}#banner .icon-box ul{position:relative;margin:0;padding:5px 0;text-align:center}#banner .icon-box ul:before{position:absolute;top:100%;left:50%;width:1px;height:80px;background:#fff;content:"";transform:translateX(-50%)}#banner .icon-box ul:after{position:absolute;bottom:100%;left:50%;width:1px;height:80px;background:#fff;content:"";transform:translateX(-50%)}footer{font:400 14px/20px "Open Sans",sans-serif;color:#fff;width:100%;position:relative;background-size:cover;background-position:50% 0;background-repeat:no-repeat;padding-top:30px}footer.sample-footer-page{background:#fff;border-top:solid 2px #46bbe4;color:rgba(0,0,0,.6);clip-path:none;padding-top:0}footer.sample-footer-page .ft-mail-box a{color:#04a7e0;border-color:#46bbe4;font-weight:400}footer.sample-footer-page .copy-right-sac{border-color:rgba(0,0,0,.1)}footer.sample-footer-page .footer-icon-box ul li a{color:rgba(0,0,0,.6)}footer.sample-footer-page .footer-menu ul li a,footer.sample-footer-page .menu-footer-menus-container ul li a{background:none;color:rgba(0,0,0,.6);padding-left:0}footer.sample-footer-page .footer-menu ul li a:hover{color:#04a7e0}footer.sample-footer-page h2:before{background:#04a7e0}footer.other-footer{padding-top:50px!important}.footer-logo{width:180px;display:block}.footer-logo img{max-width:100%;width:auto}footer h2{font:700 18px/24px "Lato",sans-serif;position:relative;padding-bottom:6px;margin-bottom:.5rem}footer h2:before{position:absolute;bottom:0;left:0;width:30px;height:2px;content:"";background:#fff}.footer-icon-box ul li{float:left;padding-right:24px}.footer-icon-box ul li a{font-size:18px;color:#fff;display:block}.footer-icon-box ul li a:hover{color:#00f6ff}.footer-icon-box ul{display:flex;padding:0;margin-bottom:1rem}.footer-icon-box{position:relative}.footer-menu{position:relative}.footer-menu ul{padding:6px 0 0}.footer-menu ul li a,.menu-footer-menus-container ul li a{font:400 14px/20px "Open Sans",sans-serif;color:#fff;padding-left:28px;background:url(https://klizos.com/wp-content/themes/klizos/public/css/../images/f-menu-bg.png) no-repeat 0 50%;display:inline-block;margin:10px 0 0}.footer-menu ul li a:hover{background:url(https://klizos.com/wp-content/themes/klizos/public/css/../images/f-menu-bg2.png) no-repeat 4px 50%;color:#00f6ff}.ft-mail-box a{padding-left:10px;margin-left:10px;border-left:solid 1px #fff;color:#fff}.ft-mail-box a:hover{color:#00f6ff}.copy-right-sac{border-top:solid 1px rgba(255,255,255,.4);padding:15px;font:400 12px/20px "Open Sans",sans-serif}.scroll-animation{position:absolute;bottom:0;left:50%;transform:translateX(-50%);z-index:999}.scroll-animation>div{position:relative}.scroll-animation a{padding-top:70px}.scroll-animation>div a span{position:absolute;top:0;left:50%;width:24px;height:24px;margin-left:-12px;border-left:1px solid #000;border-bottom:1px solid #000;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);-webkit-animation:sdb05 1.5s infinite;animation:sdb05 1.5s infinite;box-sizing:border-box}@-webkit-keyframes sdb05{0%{-webkit-transform:rotate(-45deg) translate(0,0);opacity:0}50%{opacity:1}100%{-webkit-transform:rotate(-45deg) translate(-20px,20px);opacity:0}}@keyframes sdb05{0%{transform:rotate(-45deg) translate(0,0);opacity:0}50%{opacity:1}100%{transform:rotate(-45deg) translate(-20px,20px);opacity:0}}.heading1 h1,.heading1 h2{position:relative;font:400 30px/35px "Open Sans",sans-serif;color:#000;padding:20px 0 10px}.heading1 h1:before,.heading1 h2:before{position:absolute;bottom:0;left:0;height:2px;width:55px;content:"";background:#1cd4c6}.heading1.text-center h1:before,.heading1.text-center h2:before{left:50%;transform:translateX(-50%)}.heading1.text-center.white,.heading1.text-center.white h1,.heading1.text-center.white h2{color:#fff}.heading1.text-center.white h1:before,.heading1.text-center.white h2:before{background:#fff}#industry-box{background:#ebf2f3;padding:110px 0 130px;clip-path:ellipse(81% 68% at 50% 31%);background:url(https://klizos.com/wp-content/themes/klizos/public/css/../images/in-bg1.png) no-repeat 5% 0,url(https://klizos.com/wp-content/themes/klizos/public/css/../images/in-bg2.png) no-repeat 95% 75%,#ebf2f3;z-index:3;position:relative}.industry-carousel-box{position:relative;background:#fff;border-radius:10px;padding:45px 30px;color:#000;transition:0.5s;text-align:center;min-height:379px}.industry-carousel-box:before{position:absolute;width:70%;height:30px;border-radius:100%;box-shadow:0 8px 18px 4px rgba(0,0,0,.15);content:"";left:50%;transform:translateX(-50%);bottom:0;z-index:-1;opacity:0;transition:0.5s}.industry-carousel-box:hover:before{opacity:1}.industry-carousel-box:hover{background:#1cd4c6;color:#fff}.industry-icon{width:95px;height:95px;border-radius:100%;display:inline-block;background:#fff;box-shadow:1px 1px 0 2px #61bcb9}.industry-icon img{width:100%;height:100%;border-radius:100%;object-fit:cover}.industry-carousel-box h5{font:700 20px/25px "Lato",sans-serif;padding:10px 0 15px;margin:0}.industry-carousel-box p{font:400 14px/20px "Lato",sans-serif}.industry-carousel-box:hover .btn-2{background:#fff;color:#000}.industry-carousel-box:hover .btn-2:hover{color:#fff}.owl-dots{display:none}#industry-box .owl-carousel{position:relative}#industry-box .owl-carousel .owl-nav{position:absolute;top:50%;transform:translateY(-50%);left:-70px;right:-70px}#industry-box .owl-carousel .owl-nav .owl-prev{width:52px;height:52px;background:#fff;box-shadow:0 0 8px 0 rgba(0,0,0,.1);float:left;display:block;border-radius:100%;font-size:0}#industry-box .owl-carousel .owl-nav .owl-prev span{width:10px;height:10px;background:#fff;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);border-left:solid 1px #000;border-top:solid 1px #000;display:flex;margin:0 auto;align-items:center}#industry-box .owl-carousel .owl-nav .owl-next{width:52px;height:52px;background:#fff;box-shadow:0 0 8px 0 rgba(0,0,0,.1);float:right;display:block;border-radius:100%;font-size:0}#industry-box .owl-carousel .owl-nav .owl-next span{width:10px;height:10px;background:#fff;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);border-bottom:solid 1px #000;border-right:solid 1px #000;display:flex;margin:0 auto;align-items:center}#industry-box .owl-stage-outer{padding:20px 0 40px}#services{position:relative;background-size:cover;background-position:50% 0;background-repeat:no-repeat;padding:250px 0;z-index:1;margin-top:-130px}.tab-box{background:#fff;position:relative;padding:50px 50px 50px 190px;height:817px}.tab-slider{padding:0;margin:0;position:relative;padding:26px 0}.tab-slider button.slick-prev{font-size:0;background:none;border:none;position:absolute;top:10px;left:55px;content:"";width:10px;height:10px;border-left:solid 2px #fff;border-bottom:solid 2px #fff;-webkit-transform:rotate(-224deg);transform:rotate(-224deg);padding:0}.tab-slider button.slick-next{font-size:0;background:none;border:none;position:absolute;bottom:40px;left:55px;content:"";width:10px;height:10px;border-right:solid 2px #fff;border-top:solid 2px #fff;-webkit-transform:rotate(-224deg);transform:rotate(-224deg);padding:0}.tab-menu{position:absolute;top:50%;transform:translateY(-50%);left:23px;width:120px;height:882px;background:rgb(0,174,214);background:-moz-linear-gradient(left,rgba(0,174,214,1) 0%,rgba(0,204,205,1) 100%);background:-webkit-linear-gradient(left,rgba(0,174,214,1) 0%,rgba(0,204,205,1) 100%);background:linear-gradient(to right,rgba(0,174,214,1) 0%,rgba(0,204,205,1) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00aed6',endColorstr='#00cccd',GradientType=1);border-radius:20px;overflow:hidden}.tab-slider li a{font:400 12px/13px "Lato",sans-serif;color:#fff;text-align:center;display:block;padding:46px 20px;justify-content:center}.slick-vertical .slick-slide{border:0}.tab-slider li{position:relative}.tab-slider li:before{position:absolute;left:50%;transform:translateX(-50%);width:60%;top:0;height:1px;background:rgba(255,255,255,.4);content:""}.tab-slider li a:hover,.tab-slider li.active a{background:#006072}.tab-slider li a span{width:50px;height:50px;display:block;overflow:hidden;position:relative;margin:0 auto;margin-bottom:5px;transition:0.5s}.tab-slider li a:hover span,.tab-slider li.active a span{background-position-y:-159px!important}#owlCarousel1.owl-carousel .owl-stage{height:120px}#owlCarousel1.owl-carousel .owl-item{height:120px;display:flex;align-items:center;justify-content:center}#owlCarousel1.owl-carousel{transform:rotate(90deg);width:882px;left:-381px;height:120px;top:317px}#owlCarousel1.owl-carousel .item{transform:rotate(-90deg);width:100%;height:100%;padding:0 26px}#owlCarousel1.owl-carousel .owl-nav .owl-prev,#owlCarousel1.owl-carousel .owl-nav .owl-next{font-size:36px;top:unset;bottom:15px;position:absolute;z-index:999;left:5%;top:3%;color:#fff}#owlCarousel1.owl-carousel .owl-nav .owl-next{right:1%;left:auto}.tab-menu>div{position:relative}#services p{font-size:14px;color:#4c4c4c;transition:0.5s}.services-box{background:#fff;color:#000;padding:24px 15px;border-radius:10px;border:solid 1px #d4d4d4;transition:0.5s}.ser-icon{width:66px;height:66px;box-shadow:1px 1px 0 2px #66b5c3;border-radius:100%;background:#fff}.ser-icon img{width:100%;height:100%;border-radius:100%}#services .services-box:hover{background:#00adbc;color:#fff;border-color:#00adbc}#services .services-box:hover p{color:#fff}#services .services-box p{font-size:12px;line-height:16px;margin-bottom:0}#portfolio{position:relative;background:#fff;clip-path:ellipse(95% 73% at 50% 74%);padding-top:160px;z-index:2;margin-top:-130px;height:925px}section.slider_bg{box-sizing:border-box;background:#fff;background:-moz-linear-gradient(left,#ffffff 50%,#e8e6e9 50%);background:-webkit-linear-gradient(left,#ffffff 50%,#e8e6e9 50%);background:linear-gradient(to right,#ffffff 50%,#e8e6e9 50%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff',endColorstr='#e8e6e9',GradientType=1)}section.slider_bg h2.slider_head{position:absolute;width:100%;left:0;top:90px;color:#282828;z-index:90;pointer-events:none}section.slider_bg .slider_para{color:#282828;position:absolute;width:100%;left:0;top:175px;z-index:100;padding:0 250px;line-height:20px;pointer-events:none;z-index:80}section.slider_bg .slider_heads{position:absolute;width:100%;left:0;top:0;color:#282828;z-index:100}ul.index_slider li a.btn_name{width:55px;position:absolute;left:-100%;top:0;height:100%;background:#e0fcfe;font-weight:700;color:#282828;font-size:22px;transition:all 1s}ul.index_slider li.left_pos a.btn_name,ul.index_slider li.right_pos a.btn_name{left:0}ul.index_slider li a.btn_name span{-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);transform:rotate(-90deg);position:absolute;display:block;width:790px;height:55px;text-align:center;left:0;line-height:40px;bottom:-40px;transform-origin:left top;line-height:55px}ul.index_slider li:nth-child(2) a.btn_name{background:#cceff2}ul.index_slider li:nth-child(3) a.btn_name{background:#b2e6eb}ul.index_slider li:nth-child(4) a.btn_name{background:#99dee4}ul.index_slider li:nth-child(5) a.btn_name{background:#7fd6dd}ul.index_slider li:nth-child(6) a.btn_name{background:#66ced7}h2.slider_head span{color:#5eae53}ul.index_slider{position:relative;overflow:hidden;height:925px}ul.index_slider li{height:925px;position:absolute;width:100%;top:0;transition:all 800ms;overflow:hidden;transition-timing-function:ease-out}ul.index_slider li:nth-child(1){background:#fff;left:0}ul.index_slider li:nth-child(2){background:#cceff2;left:calc(16.666% - 15px)}ul.index_slider li:nth-child(3){background:#b2e6eb;left:calc(33.332% - 15px)}ul.index_slider li:nth-child(4){background:#99dee4;left:calc(49.998% - 15px)}ul.index_slider li:nth-child(5){background:#7fd6dd;left:calc(66.664% - 15px)}ul.index_slider li:nth-child(6){background:#66ced7;left:calc(83.33% - 15px)}ul.index_slider li:hover{background:url(https://klizos.com/wp-content/themes/klizos/public/css/../images/in-bg1.png) no-repeat 0 20% #fff}ul.index_slider li img{position:relative;-webkit-transition:all 1s ease-in-out;-moz-transition:all 1s ease-in-out;-o-transition:all 1s ease-in-out;transition:all 1s ease-in-out;margin:0;left:22px;top:100px}ul.index_slider li article{display:block;width:16.666%;padding:100px 0 0 0}ul.index_slider li figure{margin-top:250px;margin-left:20px;display:block}ul.index_slider li.active img{-webkit-transition:all 1s ease-in-out;-moz-transition:all 1s ease-in-out;-o-transition:all 1s ease-in-out;transition:all 1s ease-in-out;margin:0;left:10%;top:50px}ul.index_slider li article h5{font-weight:700;color:#000;font-size:24px;position:relative;line-height:30px}ul.index_slider li article h5:before{position:absolute;bottom:0;left:50%;transform:translateX(-50%);width:50px;height:2px;background:#08adcb;content:""}ul.index_slider li article p{line-height:20px;color:#282828}#portfolio .heading1{position:absolute;top:120px;left:50%;transform:translateX(-50%);z-index:999}.portfolio-slider{position:absolute;top:0;left:0;width:100%;height:925px}ul.index_slider li:hover figure img.portfolio-img1{display:none}ul.index_slider li:hover figure .portfolio-img2{display:block}ul.index_slider li figure .portfolio-img2{display:none}ul.index_slider li:hover article{display:none}.portfolio-text h2{font-size:30px;font-weight:700;font-family:"Lato",sans-serif;color:#03a919;position:relative;padding-bottom:10px}.portfolio-text h2:before{position:absolute;left:0;bottom:0;width:30px;height:2px;background:#08adcb;content:""}.portfolio-text h6{font-size:20px;font-weight:700;font-family:"Lato",sans-serif;color:#000;padding-top:10px}.portfolio-text p{font-size:14px;font-family:"Lato",sans-serif;color:#000;padding-top:5px;line-height:22px}ul.index_slider li:nth-child(3) .portfolio-text h2{color:#d25110}ul.index_slider li:nth-child(5) .portfolio-text h2{color:#00adbc}#build-sac{background-size:cover;background-position:50% 0;background-repeat:no-repeat;padding:76px 0 0;color:#fff;margin-bottom:120px;height:820px}.build-text{position:relative;font-size:20px;font-weight:700;font-family:"Lato",sans-serif;line-height:25px;padding:20px 0 20px 75px}.build-text div{position:absolute;top:0;left:0}.build-text div span{position:relative;width:61px;height:61px;display:block}.build-text div span:before{position:absolute;top:-5px;left:-5px;width:66px;height:66px;border:solid 1px rgba(255,255,255,.7);content:""}.build-text div span:after{position:absolute;bottom:-5px;right:-5px;width:66px;height:66px;border:solid 1px rgba(0,71,80,.7);content:""}.build-box p{font-size:14px;line-height:20px;padding-top:10px}.build-box{margin-top:50px}.mobile-box{position:relative;bottom:-50px}#project-sec{padding:50px 0 80px;background:url(https://klizos.com/wp-content/themes/klizos/public/css/../images/in-bg3.png) no-repeat 5% 0,url(https://klizos.com/wp-content/themes/klizos/public/css/../images/in-bg4.png) no-repeat 95% 75%}.project-box{background:#fff;box-shadow:0 0 47px 7px rgba(0,0,0,.1);position:relative;height:656px;width:100%}.project-box .number-list{position:absolute;top:0;left:0;bottom:0;height:100%}.project-box .number-list .list.done{background-color:#11d8cc;color:#000}.project-box .number-list .list2.done{background-color:#20cbd4}.project-box .number-list .list3.done{background-color:#0099a9}.project-box .number-list .list4.done{background-color:#008996}.number-list ul{display:block;padding:0;margin:0;height:100%}.number-list ul li{background:#c8c8c8;padding:72px 44px;font-size:30px;font-weight:700;color:#7e7e7e;display:block;position:relative;display:flex;justify-content:center;align-items:center}.number-list ul li+li:before{position:absolute;top:0;left:0;right:0;width:100%;height:1px;background:#000;content:""}.project-box .slider-default.show{left:0;opacity:1}.project-box .slider-default{padding:0 20px 0 150px;position:absolute;top:0;bottom:0;left:100%;width:100%;opacity:0;transition:0.8s}.pooject-step{position:relative;padding:70px 0}.pooject-step ul li{float:left;text-align:center;background:#fff;box-shadow:0 0 15px 0 rgba(0,0,0,.2);border-radius:5px;margin:10px 1.5%;padding:40px 20px;position:relative;color:#000;transition:0.5s;font-size:16px;font-weight:600;text-transform:uppercase;width:100%}.pooject-step ul li:nth-child(1){margin-left:0}.project-slider{position:relative;display:block;overflow:hidden;width:100%;height:100%}.pooject-step ul li input[type="radio"]{position:absolute;top:0;left:0;right:0;width:100%;height:100%;opacity:0;z-index:999;cursor:pointer}.pooject-step ul li:hover{background:#20cbd4;color:#fff}.pooject-step ul{padding:0;margin-top:0;display:flex;align-items:center;width:100%;padding:20px 0 0}.prject-icon{width:90px;height:90px;border-radius:100%;background:#fff;box-shadow:2px 2px 0 2px rgba(0,131,155,.6);margin:0 auto 20px;display:flex;align-items:center;justify-content:center}.slider-two ul li:last-child,.slider-three ul li:last-child{position:absolute;bottom:0;left:0;background:none;width:auto;box-shadow:none;padding:0;margin:0}.slider-two .pooject-step ul li:last-child{width:auto}button.btn-2.big-btn,[type="submit"].btn-2.big-btn{border:0}.slider-two .pooject-step ul li{width:30%}.pooject-step [type="submit"]{float:right}.pooject-step button{float:left}.pooject-step form{padding-right:30px}.pooject-step form label{font-size:13px;color:#b9b9b9;line-height:15px;margin-top:20px}.pooject-step form .form-control{height:46px;line-height:46px;border:solid 1px #b9b9b9}#blog{background-size:cover;background-repeat:no-repeat;background-position:50% 0;padding:60px 0 80px}.blog-box{background:#fff;transition:0.5s}.blog-box .blog-img img{width:100%;height:100%;object-fit:cover}.blog-box .blog-img{position:relative;height:198px}.blog-img-text{position:absolute;top:50%;left:20px;transform:translateY(-50%)}.blog-img-text img{width:auto}.blog-img-text h6{font-size:18px;color:#fff;font-weight:400;line-height:23px}.blog-text{padding:10px 15px 25px;position:relative;padding-bottom:45px;min-height:217px}.blog-text a.read-btn{position:absolute;bottom:25px;left:15px}.blog-text p small{font-weight:700;font-size:11px;color:#737373;text-transform:uppercase;letter-spacing:1px}.blog-text h2{font-size:18px;color:#000;font-weight:400;line-height:23px;position:relative;padding-bottom:8px}.blog-text h2:before{position:absolute;bottom:0;left:0;height:2px;width:50px;background:#1cd4c6;content:""}.blog-text p{font-size:14px;color:#737373;margin-bottom:10px}a.read-btn{font-weight:700;font-size:14px;color:#000;display:inline-block}a.read-btn:hover{color:#00b09b}a.read-btn:hover .arrow{margin-left:8px;background:#00b09b}a.read-btn:hover .arrow:before,a.read-btn:hover .arrow:after{background:#00b09b}.arrow{background:#000;height:1px;width:10px;position:relative;cursor:pointer;float:right;margin-left:5px;margin-top:10px;transition:0.5s}.arrow:before,.arrow:after{content:"";background:#000;position:absolute;height:1px;width:5px}.arrow:before{right:-2px;bottom:-1px;transform:rotate(-45deg)}.arrow:after{right:-2px;top:-1px;transform:rotate(45deg)}.blog-box:hover{box-shadow:0 0 15px 0 rgba(0,0,0,.5)}.btn-3{display:inline-block;font-size:17px;font-weight:700;color:#fff;background:#00bfc9;box-shadow:0 0 15px 0 rgba(0,0,0,.3);padding:0 30px;line-height:50px;border-radius:5px;position:relative;margin-top:15px}.form-box{position:relative;z-index:999;margin:-160px 0 0}.form-box>div>div{padding:50px 40px;background-size:cover}.form-box>div{background:#fff;box-shadow:0 0 15px 0 rgba(0,0,0,.2)}.form-box form label{padding-top:5px;font-size:14px}textarea.form-control{resize:none;height:150px}.form-box .heading1 h1 small{font-size:70%}ul.location-list{padding:0;margin:0}ul.location-list li{font-weight:400;font-size:14px;line-height:20px;color:#fff;padding:25px 0}ul.location-list li a{color:#fff}ul.location-list li i{display:block;font-size:20px;margin-bottom:10px}.form-box .heading1.white h1{color:#fff}.form-box .heading1 h1{padding-top:0}.form-box .heading1.white h1:before{background:#fff}#contact-form form label{margin-top:20px;font-size:14px;line-height:18px}#contact-form form .btn-2{border:0}.slider-box-custom{width:930px;height:100%;justify-content:center;align-items:center;display:flex;position:relative}.slid-box{position:relative;width:100%;height:447px;margin:0 auto;display:flex;justify-content:center;align-items:center}.slid-box .for-desktop{position:absolute;top:50px;overflow:hidden;z-index:9}.slid-box .for-laptop{width:460px;overflow:hidden;position:absolute;left:0;z-index:9;background-repeat:no-repeat;bottom:12px}.slid-box .for-tablate{width:181px;overflow:hidden;background-repeat:no-repeat;right:20%;position:absolute;z-index:9;bottom:35px}.slid-box .for-mobile{width:90px;overflow:hidden;position:absolute;z-index:9;background-repeat:no-repeat;bottom:25px;right:13%}.slid-box .tree-im{width:88px;overflow:hidden;position:absolute;z-index:8;bottom:25px;right:65px}.for-laptop-with{width:288px;margin:20px 95px 43px auto;border-radius:3px;display:block;overflow:hidden}.for-desktop-with{width:415px;height:368px;margin:19px 23px 25px 23px;border-radius:3px;display:block;overflow:hidden}.for-tablate-with{margin:25px 10px 20px 23px;border-radius:3px;display:block;overflow:hidden}.for-mobile-with{margin:7px 9px 13px 7px;border-radius:8px;display:block;overflow:hidden}.slid-box>div.tree-im{left:78%;top:50%;transform:none;z-index:1}.slid-box>div#arrows{position:absolute;left:-5px;top:28%}.slid-box>div#arrows div{width:10px;height:10px;border-radius:100%;border:solid 2px #fff;display:block;cursor:pointer;margin-top:8px;opacity:1;transition:0.5s;cursor:pointer}.slid-box>div#arrows div:hover{width:12px;height:12px}.slid-box:before{position:absolute;top:0;left:0;width:1px;height:230px;content:"";transform:translateY(-50%);background:rgba(255,255,255,.5)}.portfolio-accordion{display:none}#banner2{width:100%;position:relative;background-size:cover;background-position:50% 0;background-repeat:no-repeat}#banner2 .navbar-nav li:last-child .nav-link{padding-right:0}#banner2 .banner-text{padding:65px 0;width:50%;color:#fff}#banner2 .banner-text h1{font:700 45px/50px "Lato",sans-serif;position:relative;padding-bottom:5px}#banner2 .banner-text h1:before{position:absolute;bottom:0;left:0;width:70px;height:3px;background:#fff;content:""}#banner2 .banner-text h1>span{display:block}#banner2 .icon-box ul li a{font-size:15px;color:#fff;display:inline-block;margin:8px 0;text-shadow:1px 0 1px #000}#banner2 .icon-box{position:absolute;top:60%;right:0;transform:translateY(-50%)}.banner2-position{position:relative;background:#fff}.flo-img{position:absolute;bottom:-20px;right:0;width:42%}.hot-air-balloon4{position:absolute;bottom:2%;left:0}.hot-air-balloon5{position:absolute;bottom:0;right:0}.hot-air-balloon2{position:absolute;top:37px;right:19%}.hot-air-balloon{position:absolute;top:28px;left:126px}.navbar{padding-left:0;padding-right:0}.flo-img-relative{position:relative;height:242px}#banner2 .container{padding:0}.heading-parallax{font-size:24px;position:relative;margin:25px 30px}.heading-parallax:before{position:absolute;bottom:0;top:30px;width:55px;height:3px;background:#fff;content:""}.box-inside .hover-box-small-para{font-size:15px;line-height:22px}.box-inside .btn-2{border:solid 1px #fff;color:#fff;background:none;box-shadow:none}.left-para{float:left}.right-para{float:right}.white{color:#fff}.box-inside{padding:20% 10%;position:absolute;left:0;right:0;bottom:100%;width:100%;height:100%;opacity:0;transition:0.7s;color:#fff;background:-moz-linear-gradient(-45deg,rgba(3,154,240,.9) 0%,rgba(0,222,255,.9) 100%);background:-webkit-linear-gradient(-45deg,rgba(3,154,240,.9) 0%,rgba(0,222,255,.9) 100%);background:linear-gradient(135deg,rgba(3,154,240,.9) 0%,rgba(0,222,255,.9) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80039af0',endColorstr='#8000deff',GradientType=1)}.display-text{position:relative;display:block;overflow:hidden;background:#fff;-webkit-box-shadow:0 0 2px 0 rgba(0,0,0,.1);box-shadow:0 0 2px 0 rgba(0,0,0,.1);width:100%;margin-top:20px;transition:0.5s;height:350px}.display-text:hover{-webkit-box-shadow:0 0 15px 0 rgba(0,0,0,.1);box-shadow:0 0 15px 0 rgba(0,0,0,.1)}.display-text:hover .box-inside{opacity:1;bottom:0}.box-inside h3{position:relative;font-size:22px;padding-bottom:8px;font-weight:700}.box-inside h3:before{position:absolute;bottom:0;height:2px;width:40px;content:"";background:#fff}.box-inside-pc{background-color:#fff;display:flex;max-width:100%;max-height:350px;overflow-y:hidden}.box-inside-pc img{width:100%;height:100%;object-fit:cover}.box-inside-pc h3{position:relative;color:#000;font-size:20px;padding-bottom:8px;padding-top:10px}.box-inside-pc h3:before{position:absolute;bottom:0;height:2px;width:60px;content:"";background:#08adcb}.boxes-div{display:flex;margin-top:8%;padding:0 3%;align-items:stretch;margin-bottom:29px}.parallax-one-bold-para{font-size:16px;font-weight:600;padding-top:10px}.cloud-box{position:absolute;left:0;top:0;z-index:1}.cloud-img1{position:relative;-webkit-animation-name:example;-webkit-animation-duration:100s;-webkit-animation-iteration-count:infinite;animation-name:example;animation-duration:100s;animation-iteration-count:infinite;left:0;top:0}@-webkit-keyframes example{0%{left:0}100%{left:100%}}@keyframes example{0%{left:0}100%{left:100%}}.cloud-box div{position:absolute;top:0;left:0}.cloud-img2{position:relative;-webkit-animation-name:example2;-webkit-animation-duration:100s;-webkit-animation-iteration-count:infinite;animation-name:example2;animation-duration:100s;animation-iteration-count:infinite;left:-100%;top:0}@-webkit-keyframes example2{0%{left:-100%}100%{left:0}}@keyframes example2{0%{left:-100%}100%{left:0}}.balloon-img{position:relative;-webkit-animation-name:example5;-webkit-animation-duration:12s;-webkit-animation-iteration-count:infinite;animation-name:example5;animation-duration:12s;animation-iteration-count:infinite;-ms-transform:rotate(30deg);-webkit-transform:rotate(30deg);transform:rotate(30deg)}.balloon-img2{position:relative;-webkit-animation-name:example5;-webkit-animation-duration:15s;-webkit-animation-iteration-count:infinite;animation-name:example5;animation-duration:15s;animation-iteration-count:infinite;-ms-transform:rotate(30deg);-webkit-transform:rotate(30deg);transform:rotate(30deg)}@-webkit-keyframes example5{0%{-ms-transform:rotate(15deg);-webkit-transform:rotate(15deg);transform:rotate(15deg)}50%{-ms-transform:rotate(-30deg);-webkit-transform:rotate(-30deg);transform:rotate(-30deg)}100%{-ms-transform:rotate(15deg);-webkit-transform:rotate(15deg);transform:rotate(15deg)}}@keyframes example5{0%{-ms-transform:rotate(15deg);-webkit-transform:rotate(15deg);transform:rotate(15deg)}50%{-ms-transform:rotate(-30deg);-webkit-transform:rotate(-30deg);transform:rotate(-30deg)}100%{-ms-transform:rotate(15deg);-webkit-transform:rotate(15deg);transform:rotate(15deg)}}.hot-air-balloon6{position:absolute;bottom:-11px;left:30%;-webkit-animation-name:example3;-webkit-animation-duration:3s;-webkit-animation-iteration-count:infinite;animation-name:example3;animation-duration:3s;animation-iteration-count:infinite;animation-timing-function:linear;z-index:999}@-webkit-keyframes example3{0%{bottom:-11px}50%{bottom:0}100%{bottom:-11px}}@keyframes example3{0%{bottom:-11px}50%{bottom:0}100%{bottom:-11px}}.flo-small-img{position:absolute;top:-24px;right:15%;-webkit-animation-name:example4;-webkit-animation-duration:60s;-webkit-animation-iteration-count:infinite;animation-name:example4;animation-duration:60s;animation-iteration-count:infinite;animation-timing-function:linear;transform:rotateY(0deg)}@-webkit-keyframes example4{0%{right:15%}50%{right:70%;transform:rotateY(0deg)}51%{transform:rotateY(180deg)}100%{right:15%;transform:rotateY(180deg)}}@keyframes example4{0%{right:15%}50%{right:70%;transform:rotateY(0deg)}51%{transform:rotateY(180deg)}100%{right:15%;transform:rotateY(180deg)}}.industry-main-div{background-color:#ecf1f4;padding:70px 0 180px;margin-bottom:-100px}.industry-inside-div{display:flex;align-items:center}.industry-inside-div .industry-carousel-box{margin:17px 0}.heading1 h5{font-size:15px;font-weight:400;padding-top:15px;width:80%;margin:0 auto;line-height:22px}.about-box-inside-pc{background-color:#fff;padding:30px 15px;text-align:center;-webkit-box-shadow:0 0 16px 0 rgba(0,0,0,.2);box-shadow:0 0 16px 0 rgba(0,0,0,.2);margin-bottom:10px;border-radius:8px;margin-top:30px}.about-box-inside-pc h3{position:relative;color:#000;font-size:20px;padding-bottom:10px;padding-top:15px;font-weight:700}.about-box-inside-pc p{font-size:14px;padding-top:10px}.about-box-inside-pc h3:before{position:absolute;bottom:0;height:2px;width:50px;content:"";background:#08adcb;left:50%;transform:translateX(-50%)}.about-page{background-position:0 35%}.about-text-box{padding-right:20px}.about-text-box p.about-two-heading{position:relative;font-size:36px;line-height:40px;font-weight:500;padding-bottom:8px}.about-two-heading::before{position:absolute;bottom:0;left:0;height:2px;width:60px;content:"";background:#08adcb}.about-text-box p.about-two-big-para{font-size:18px;font-weight:400;margin:10px 0 10px;line-height:24px}.about-text-box p{font-size:14px;line-height:20px}.about-small-box{padding:50px 20px;margin:30px 0 0;display:block;background:#fff;border-radius:8px;transition:0.5s;box-shadow:0 0 5px 0 rgba(0,0,0,.2)}.about-small-box-heading{margin-top:6%;font-size:18px;font-weight:600}.about-small-box-para{font-size:14px}.about-tow-right-box-div{margin-top:25%}.about-small-box:hover{color:#fff!important;background:#00c0c0;box-shadow:0 0 15px 0 rgba(0,0,0,.2)}.about-small-box img{background-color:#fff;border-radius:4px;padding:8px 8px}.about-small-box:hover img{background-color:#4dd3d3;border-radius:4px;padding:8px 8px}.about-small-box:hover .about-normal-img{display:none}.about-small-box:hover .about-hover-img{display:block}.about-small-box .about-hover-img{display:none}.about-parallax{margin:30px 0 0;padding:60px 0}.pinfo-img{width:140px;height:140px;border-radius:100%;margin:0 auto;display:block;overflow:hidden}.pinfo-img img{width:100%;height:100%;object-fit:cover}.about-parallax-heading{font-size:32px;position:relative;font-weight:500}.about-parallax-heading::before{position:absolute;bottom:0;top:30px;width:55px;height:3px;background:#fff;content:""}.about-parallax-sub-heading{font-size:20px;margin:40px 0 25px}.about-pinfo{background-color:#fff;display:grid;text-align:center;padding:17% 5%;margin:5px 0}.about-social-icon ul li a{font-size:14px;color:#666!important;display:flex;padding:0 10px}.about-social-link-list{display:inline-flex;margin:0;padding:0}.director-name{margin-top:10px;font-size:20px;font-weight:600}.des{font-size:12px}#testi-box{padding:50px 0 50px;position:relative}.about-testimonial-div{margin-top:30px}#testimonial-box{padding:20px 0;position:relative}.testimonial-carousel-box{background:#fff;border-radius:10px;padding:15px 9px;color:#000;transition:0.5s;text-align:left;position:relative;margin-left:1px}.testimonial-carousel-box-inside{border:solid 1px #e6e6e6;padding:30px 40px 20px;position:relative;transition:0.5s;min-height:185px}.testimonial-carousel-box:hover .testimonial-carousel-box-inside{-webkit-box-shadow:0 0 10px 0 rgba(0,0,0,.2);box-shadow:0 0 10px 0 rgba(0,0,0,.2);border-color:#fff}.testimonial-carousel-box-inside:before{content:"";position:absolute;bottom:0;left:20px;width:25px;height:25px;background:#fff;transform:rotate(45deg);box-shadow:2px 2px 5px 0 rgba(0,0,0,.1);opacity:0;transition:0.5s}.testimonial-carousel-box:hover .testimonial-carousel-box-inside:before{bottom:-11px;opacity:1}.testimonial-icon img{width:auto!important}.testimonial-carousel-box h5{font:700 20px/25px "Lato",sans-serif;padding:10px 0 15px;margin:0}.testimonial-carousel-box p{font:400 14px/20px "Lato",sans-serif}#testimonial-box .testimonial-carousel-box:hover .btn-2{background:#fff;color:#000}#testimonial-box .testimonial-carousel-box:hover .btn-2:hover{color:#fff}#testimonial-box .owl-carousel{position:relative}#testimonial-box .owl-carousel .owl-nav{position:absolute;top:50%;transform:translateY(-50%);left:-70px;right:-70px}#testimonial-box .owl-carousel .owl-nav .owl-prev{width:52px;height:52px;background:#fff;box-shadow:0 0 14px 0 rgba(0,0,0,.2);float:left;display:block;border-radius:100%;font-size:0}#testimonial-box .owl-carousel .owl-nav .owl-prev span{width:10px;height:10px;background:#fff;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);border-top:solid 2px #04aaa5;border-left:solid 2px #04aaa5;display:flex;margin:0 auto;align-items:center}#testimonial-box .owl-carousel .owl-nav .owl-next{width:52px;height:52px;background:#fff;box-shadow:0 0 14px 0 rgba(0,0,0,.2);float:right;display:block;border-radius:100%;font-size:0}#testimonial-box .owl-carousel .owl-nav .owl-next span{width:10px;height:10px;background:#fff;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);border-bottom:solid 2px #04aaa5;border-right:solid 2px #04aaa5;display:flex;margin:0 auto;align-items:center}#testimonial-box .owl-stage-outer{padding:20px 0 40px}.testi-2nd-div{display:flex;align-items:center;margin:20px 0}.testi-2nd-div-para p{margin-bottom:0px!important;padding-top:3px}.testi-big-para{font-size:16px!important;font-weight:600!important}.testi-small-para{font-size:12px!important}.testimonial-img img{width:67px;height:67px;border-radius:100%;object-fit:cover}.main-service-sec-a{display:flex;margin-top:5%}.service-para{font-size:16px!important;order:1;flex:1;margin-top:5%}.service-para::before{background:#fff!important}.right-top-img{float:right}.service-head{font-size:20px}.service-head{position:relative;padding-bottom:10px;font-weight:700;margin-bottom:10px}.service-head:before{position:absolute;bottom:0;left:15px;height:2px;width:55px;content:"";background:#1cd4c6}.service-row{display:flex;align-items:center;border-bottom:1px solid #ddd;padding:30px 0}.service-row:nth-child(2n+2){flex-direction:row-reverse}.service-row:nth-last-child(1){border-bottom:0}.careear-box:hover{background:#00aad5;transition:0.5s;color:#fff}.careear-box:hover a.btn-2{background:#fff;color:#000}.careear-box:hover a.btn-2:hover{color:#fff}.careear-box:hover h3:before{background:#fff}.careear-box{background:#fff;padding:40px;box-shadow:0 0 15px 0 rgb(0 0 0 / 20%);border-radius:8px;margin-bottom:30px;transition:0.8s;position:relative;padding-bottom:100px}.careear-box a.btn-2{position:absolute;bottom:40px;left:40px}.careear-box h3{position:relative;padding-bottom:10px;font-size:20px;padding-top:15px}.careear-box h3:before{position:absolute;bottom:0;left:0;width:50px;height:2px;content:"";background:#08adcb;transition:0.5s}.careear-box h4{font-size:15px;font-weight:600;padding:5px 0}.careear-box p{font-size:14px;line-height:22px}#inner-form.form-box{margin:40px 0 60px;padding:0}.form-back{background-image:url(https://klizos.com/wp-content/themes/klizos/public/css/../images/form-back-img.png);background-repeat:no-repeat;background-size:cover;color:#fff;padding:50px 30px}#inner-form .heading1 h1{font-size:33px;font-weight:600;color:#fff;line-height:40px}#inner-form p.form-para{font-size:15px;line-height:22px}#inner-form .heading1 h1:before{background-color:#fff}.form-heading-para{padding:0;font-size:18px;font-weight:600}.form-div-box{padding:30px 40px 30px 20px}.form-control{font-size:13px;font-weight:600;line-height:45px;height:45px}.select-css{display:block;width:100%;height:45px;font-size:13px;font-weight:400;line-height:45px;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem;padding:.375rem .75rem;transition:border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}#inner-form textarea.form-control{line-height:20px}.file-upload .file-select input[type="file"]{z-index:100;cursor:pointer;position:absolute;height:100%;width:100%;top:0;left:0;opacity:0;filter:alpha(opacity=0)}.file-upload .file-select .file-select-name{line-height:40px;display:inline-block;padding:0 10px}.file-upload .file-select .file-select-button{width:40px;padding:0 10px;display:inline-block;height:40px;line-height:40px;float:right;position:relative}.file-upload .file-select .file-select-button:before{content:"\f0ee";position:absolute;top:0;left:0;width:100%;line-height:40px;font-family:"Lato",sans-serif;font-style:normal;font-weight:400;text-decoration:inherit;text-align:center}.file-upload .file-select{display:block;border:1px solid #ddd;color:#34495e;cursor:pointer;height:40px;line-height:40px;text-align:left;background:#fff;overflow:hidden;position:relative;border-radius:.25rem}.file-upload{display:block;text-align:center;font-family:"Lato",sans-serif;font-size:12px}.blog-box-page{background:#fff;margin:15px 0;box-shadow:0 0 4px 0 rgba(0,0,0,.1);padding-bottom:25px;transition:0.5s}.blog-img-box{width:100%;height:200px}.blog-img-box img{height:100%;width:100%;object-fit:cover}.blog-box-page:hover{box-shadow:0 0 15px 0 rgba(0,0,0,.2)}.blog-text-box{padding:20px}.blog-1st-text{font-size:20px;line-height:26px;font-weight:300;color:#000;display:inline-block}.calender-text{font-size:12px;float:left;font-weight:400}.calender-text i,.tag-text i{color:#00c4b8}.tag-text{font-size:12px;float:right;font-weight:400}.newsl-div{position:relative;display:block;background:#fff;width:100%;margin-bottom:40px}.news-para{color:#000;border-radius:4px;top:0;margin-bottom:15px;font-size:18px;font-weight:700}.news-form{position:relative;margin-top:20px}.news-form input[type="text"]{padding-right:45px}.news-form button{position:absolute;top:0;bottom:0;right:0;border:none;background:none}.news-social-list{text-align:center;padding-top:20px;border-top:solid 1px #e3e1e1;margin-top:20px}.news-social-list li a{color:#000;font-weight:100;padding:0 10px;font-size:14px}.news-social-list ul{padding:0;margin:0}.news-social-list li{display:inline-block}.category-img-para ul{padding:10px 0 0 0;margin:0}.category-img-para ul li a{position:relative;font-size:14px;line-height:20px;padding:13px 40px;color:#000;display:block;background:url(https://klizos.com/wp-content/themes/klizos/public/css/../images/s-logo.png);background-repeat:no-repeat;background-position:6px 50%}.category-img-para ul li a span{position:absolute;top:50%;right:0;transform:translateY(-50%);font-size:10px;width:20px;height:20px;line-height:20px;text-align:center;border-radius:100%;opacity:0;background:#666;color:#fff;transition:0.5s}.category-img-para ul li a:hover span{opacity:1}.category-img-para ul li a:hover{background-position:12px 50%}.category-img-para ul li+li{border-top:solid 1px #eee}.bolg-list img{width:100%}.latest-nesw-para{font-weight:600;margin:0 0 5px 0;font-size:14px;line-height:17px}.side-date-para{font-size:12px;font-weight:600;color:#00c4b8;margin:0}.bolg-list{padding:20px 0;margin:0!important}.bolg-list+.bolg-list{border-top:solid 1px #eee}.blog-d-title-para{margin:15px 0;line-height:30px;font-weight:600;font-size:26px}.blog-detail-div p{font-size:16px;color:#444;line-height:1.5}.tag-btn-box{margin-bottom:5px}.tag-btn-box span{color:#fff;background:-webkit-linear-gradient(left,rgba(0,174,214,1) 0%,rgba(0,203,205,1) 100%);background:linear-gradient(to right,rgba(0,174,214,1) 0%,rgba(0,203,205,1) 100%);font:700 11px/30px "Lato",sans-serif;padding:0 10px;display:inline-block;float:left}.tag-btn-box a{font:400 11px/28px "Lato",sans-serif;color:#a4a3a3;padding:0 10px;display:inline-block;float:left;margin-left:3px;border:solid 1px #a4a3a3;text-transform:capitalize;margin-bottom:3px}.tag-box{display:flex;flex-direction:column}.bloger-name-para span{font-weight:600}.bloger-name-para{font-size:12px;float:none}.bloger-chat-para{font-size:14px;float:right;font-weight:600}.no-padding{padding:0}.bloger-d-para{font-size:14px;margin-top:50px;margin-bottom:0}.bloger-d-para p{font-size:17px}.bloger-d-para a{color:rgba(0,174,214,1)}.bloger-d-para a:hover{background-color:rgba(0,174,214,1);color:#fff;padding:0 5px}.bloger-d-para ul{padding-left:50px}.bloger-d-para li{list-style:disc;margin-bottom:8px;font-size:16px}.bloger-d-para ol{list-style:decimal;margin-bottom:8px;font-size:16px}.bloger-d-para h1,.bloger-d-para h2,.bloger-d-para h3,.bloger-d-para h4,.bloger-d-para h5{font-weight:700}.blog-social-icons{display:flex;padding:0}.blog-social-icon-div p{font-size:14px;font-weight:700}.blog-social-icons li a,.blog-social-icons li button{margin:0 5px;color:#fff;background:-webkit-linear-gradient(left,rgba(0,174,214,1) 0%,rgba(0,203,205,1) 100%);background:linear-gradient(to right,rgba(0,174,214,1) 0%,rgba(0,203,205,1) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00aed6',endColorstr='#00cbcd',GradientType=1);line-height:30px;height:30px;width:30px;border-radius:100%;font-size:12px;text-align:center;display:block;border:0}.facebook-back:hover{background:#3b5998;border-radius:4px}.twitter-back:hover{background:#00acee;border-radius:4px}.insta-back:hover{background:radial-gradient(circle at 30% 107%,#fdf497 0%,#fdf497 5%,#fd5949 45%,#d6249f 60%,#285aeb 90%);border-radius:4px}.behance-back:hover{background:#053eff;border-radius:4px}.blog-social-icon-div{margin:30px 0}.bloger-detail-div{display:flex;border:1px solid #d4d4d4;padding:15px 10px;margin:50px 0}.bloger-profile-img-div img{max-width:100%;width:auto;height:auto}.bloger-name-profile{font-weight:700;font-size:16px}.bloger-link{color:#000;font-style:italic}.bloger-detail-info p{margin-bottom:5px}.bloger-personal-social-link-list{display:flex;padding:0;margin-top:15px;font-size:20px;margin-bottom:0}.bloger-personal-social-link-list li a{color:#000;padding:10px 10px 0 0}.articles-div p{font-size:14px;font-weight:700}.articles-box img{width:100%}.articles-box a{color:#000;font-weight:600}.bloger-comment-div{display:flex;padding:0 0;margin:25px 0}.bloger-reply-link{color:#000;font-size:12px}.bloger-comment-name-div{display:flex}.bloger-time-comment{font-size:10px;color:#4c4c4c;font-weight:700}.l-comment-div{font-size:14px;font-weight:700;margin-top:50px}.comment-form{margin-top:2%!important}.il-m-top{margin-top:-2%!important;margin-bottom:1%!important}.il-box{text-align:center;border:1px solid #e5e5e5;border-radius:8px;padding:40px;margin:40px 0 0}.il-box-icin-img{width:100px;height:100px;border-radius:100%;background:#00cfd9;margin:0 auto;display:flex;align-items:center;justify-content:center}.il-icon-heading{font-size:20px;font-weight:600;margin-top:3%}.parallax-big-para{font-size:30px;line-height:40px;margin:15px 0}.parallax-small-para{font-size:18px;font-weight:400;line-height:24px}.il-parallax-one{padding:60px 0;margin:80px 0}.il-buttom-parallax-head{position:relative;font-size:24px;font-weight:600;line-height:30px;padding-bottom:10px}.il-buttom-parallax-head::before{position:absolute;bottom:0;left:0;width:70px;height:2px;background:#1cd4c6;content:""}.brands-logo{padding:30px}#owlCarousel12 .owl-stage-outer .owl-stage{align-items:center;display:flex;flex-wrap:wrap}.form-control.error{color:red;border-color:red}#invoice_business_info p{margin-bottom:0}#invoice_business_info p{margin-bottom:0}.lightbox-opened{background-color:#333;background-color:rgba(51,51,51,.9);cursor:pointer;height:100%;left:0;overflow-y:scroll;padding:24px;position:fixed;text-align:center;top:0;width:100%;z-index:9999999999}.lightbox-opened:before{background-color:#333;background-color:rgba(51,51,51,.9);color:#eee;content:"x";font-family:"Lato",sans-serif;padding:6px 12px;position:fixed;text-transform:uppercase}.lightbox-opened img{box-shadow:0 0 6px 3px #333}.no-scroll{overflow:hidden}.blog-top-img-div img{height:auto}.comment-details{width:100%}.widget_search .title-with-border{margin-bottom:0;border-bottom:none}.carousel-control-next-icon,.carousel-control-prev-icon{width:40px;height:40px;background-color:#000;background-size:20px,20px;border-radius:100%}.career-body-content p,.career-body-content,.career-body-content ul li,.career-body-content a{font-size:15px}.modal-dialog-scrollable .modal-body::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,.3);background-color:#f5f5f5}.modal-dialog-scrollable .modal-body::-webkit-scrollbar{width:6px;background-color:#f5f5f5}.modal-dialog-scrollable .modal-body::-webkit-scrollbar-thumb{background-color:#000}.open>.dropdown-menu{display:block!important}.dropdown:hover>.dropdown-menu{display:block}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px;border-radius:0 6px 6px 6px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropdown-menu{top:94%!important}.dropdown-submenu>a:after{display:block;content:" ";float:right;width:0;height:0;border-color:transparent;border-style:solid;border-width:5px 0 5px 5px;border-left-color:#ccc;margin-top:5px;margin-right:-10px}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}input[type="date"]::before{color:#999;content:attr(placeholder)}input[type="date"]{color:#fff}input[type="date"]:focus,input[type="date"]:valid{color:#666}input[type="date"]:focus::before,input[type="date"]:valid::before{content:""!important}.invoice_history thead>tr{background:rgb(0,174,214);background:-moz-linear-gradient(left,rgba(0,174,214,1) 0%,rgba(0,203,205,1) 100%);background:-webkit-linear-gradient(left,rgba(0,174,214,1) 0%,rgba(0,203,205,1) 100%);background:linear-gradient(to right,rgba(0,174,214,1) 0%,rgba(0,203,205,1) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00aed6',endColorstr='#00cbcd',GradientType=1);color:#fff;border:0}.invoice_history tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.03)}.invoice_history td,th{border-top:0;font-size:14px;padding:10px 20px}.invoice_description_custom>ul>li{list-style:disc;margin-bottom:8px}.invoice_description_custom p{font-size:17px}.invoice_description_custom a{border-bottom:2px solid rgba(0,174,214,1);padding:0 5px}.invoice_description_custom a:hover{background-color:rgba(0,174,214,1);color:#fff;padding:0 5px}.invoice_description_custom ul{padding-left:50px}.invoice_description_custom li{list-style:disc;margin-bottom:8px;font-size:16px}.invoice_description_custom ol{list-style:decimal;margin-bottom:8px;font-size:16px}.invoice_description_custom h1,.invoice_description_custom h2,.invoice_description_custom h3,.invoice_description_custom h4,.invoice_description_custom h5{font-weight:700}.errorstyle{position:relative}.errorstyle label.error{position:absolute;right:0;top:0}.fromSubmitMsg{z-index:999;padding:10px;display:inline-block}.portfolio-page-banner .top-logo img{filter:brightness(1000)}.w-100 iframe{max-width:100%}.other-footer .footer-logo img{filter:brightness(1000%)}.mc4wp-response{position:fixed;right:20px;top:20px}.mc4wp-response p{width:300px;text-align:left;font-size:15px;background-color:whitesmoke;color:#000;padding:10px 12px;border-radius:5px;z-index:999}.mc4wp-response>.mc4wp-failure p{color:green}#job-status span{text-transform:uppercase}.btn-hdr{padding-left:10px!important;padding-right:10px!important;padding-top:0;padding-bottom:0;font-size:17px}.we-are-hiring{padding-left:15px;margin-top:-10px}h1.get_quote{margin:13px;text-align:center}h1.ui-ux.aos-init.aos-animate{padding-top:20px}h2.looking{color:#fff}.widget_nav_menu div ul,.widget_recent_entries ul,.widget_categories ul,.widget_recent_comments ul,.widget_pages ul,.widget_meta ul,.widget_archive ul,.widget_archives ul,.widget_recent-posts ul,.widget_rss ul,#recentcomments{list-style:none;padding:0;margin:0;vertical-align:bottom}.widget_nav_menu div ul>li,.widget_recent_entries ul li,.widget_categories ul li,.widget_recent_comments ul li,.widget_pages ul li,.widget_meta ul li,.widget_archive ul li,.widget_archives ul li,.widget_recent-posts ul li,.widget_rss ul li,.recentcomments{position:relative;padding:0 0 12px 0;margin:0 0 12px 0;border-bottom:1px solid rgba(0,0,0,.075)}.title-with-border{position:relative;padding-bottom:15px;display:flex;align-items:center;margin-bottom:25px;flex-wrap:wrap;border-bottom:2px solid #0000003d}.magine-widget{position:relative;display:inline-block;width:100%}.title-with-border span{background:#fff;padding-right:1rem}.title-with-border span:before{position:absolute;top:50%;left:0;content:"";width:100%;height:6px;background:rgba(0,0,0,.65);z-index:-1;transform:translateY(-50%)}.widget_categories ul li{position:relative}.magine-widget a:not(.btn),[class*="elementor-widget-wp-widget-"] a{color:inherit;-webkit-transition:color .2s ease-in-out;-moz-transition:color .2s ease-in-out;-ms-transition:color .2s ease-in-out;transition:color .2s ease-in-out}.widget_nav_menu div ul>li>a,.widget_recent_entries ul li a,.widget_categories ul li a,.widget_recent_comments ul li a,.widget_pages ul li a,.widget_meta ul li a,.widget_recent-posts ul li a{font-weight:600}.widget_categories ul li span.badge{text-align:center;display:inline-block;position:absolute;top:.3rem;right:0;font-size:.7rem;font-weight:700;line-height:1em;padding:6px 8px 6px 8px;border-radius:20px}.widget_recent_entries ul li span.post-date{display:block;margin:.2rem 0 0 0;position:relative;font-size:.8rem;text-transform:uppercase}.widget_recent_entries ul li span.post-date:before{font-family:'Font Awesome 5 Free';content:"\f017";padding-right:.3rem;font-weight:400}.widget_recent_comments ul li span{position:relative;display:inline-block}#recentcomments a{display:block!important}.magine-widget:last-child{margin-bottom:0!important}.tagcloud{position:relative;display:inline-block;margin-bottom:-5px}.tagcloud .tag-link-count{padding-left:3px;margin-right:15px;display:inline-block;font-weight:700}.widget_search.magine-widget .search-form>label>span{display:none}.widget_search.magine-widget .search-form>label{width:100%}.widget_search.magine-widget .search-form .search-field{display:block;width:100%;height:auto;padding:.75rem 1rem;font-size:1rem;font-weight:400;line-height:1.7;color:#344055;background-color:#fff;background-clip:padding-box;border:.0625rem solid rgba(0,0,0,.1);border-radius:.125rem;box-shadow:none;transition:all .3s ease-in-out}.widget_search.magine-widget .search-form .search-submit{width:100%;color:#fff;background:-webkit-linear-gradient(left,rgba(0,174,214,1) 0%,rgba(0,203,205,1) 100%);background:linear-gradient(to right,rgba(0,174,214,1) 0%,rgba(0,203,205,1) 100%);padding:10px 25px}.magine-widget:first-child{padding-top:45px}@media (max-width:1441px){#banner .banner-text{padding:50px 0}ul.index_slider li img{left:0}#banner{clip-path:ellipse(100% 72% at 50% 31%);height:765px}footer{padding-top:115px;clip-path:ellipse(100% 73% at 50% 74%)}footer.other-footer{padding-top:40px!important}#industry-box{clip-path:ellipse(100% 68% at 50% 31%);padding:110px 0 84px;background-size:7%}#portfolio{clip-path:ellipse(126% 73% at 50% 79%)}.index_slider li img.portfolio-img1{left:-15px!important;width:16%}.container-fluid{top:67px;position:relative}ul.index_slider{margin:0;padding:0}#portfolio,.portfolio-slider,ul.index_slider{height:850px}ul.index_slider li figure{margin-top:200px}.slid-box>div.tree-im{top:49%}.flo-img{right:0}.hot-air-balloon2{right:10px}}@media (max-width:1200px){ul.index_slider li article h5{font-size:18px;line-height:20px;padding-bottom:8px!important}.portfolio-text h6{font-size:16px;line-height:18px}#portfolio,.portfolio-slider,ul.index_slider{height:763px}.portfolio-text h2{font-size:22px}#industry-box .owl-carousel .owl-nav{left:0;right:0}#industry-box .owl-carousel .owl-nav .owl-prev,#industry-box .owl-carousel .owl-nav .owl-next{box-shadow:0 0 8px 0 rgba(0,0,0,.3);width:35px;height:35px}#industry-box .owl-carousel .owl-nav .owl-next span,#industry-box .owl-carousel .owl-nav .owl-prev span{width:5px;height:5px}.tabset>label{padding:7px 15px}#testimonial-box .owl-carousel .owl-nav .owl-next{margin-right:40px}#testimonial-box .owl-carousel .owl-nav .owl-prev{margin-left:40px}}@media (max-width:1024px){#industry-box{padding:70px 0 84px}.industry-carousel-box{padding:15px 26px 3px}.mobile-box{bottom:-69px}#build-sac{margin-bottom:49px}.form-box{margin-top:49px}#navbarSupportedContent .nav-link{font-size:14px;padding:0 30px}.tab-menu{transform:rotate(-90deg);left:45%;top:-321px;height:743px;width:71px}.tab-slider li a span{display:none}.tab-slider li a{padding:60px 0;width:106px}.tab-slider li{width:212px;transform:rotate(90deg)}.tab-slider button.slick-prev,.tab-slider button.slick-next{left:31px}.tab-box{padding:87px 21px 20px 19px;height:auto}#services{padding:162px 0 130px}}@media (max-width:991px){.tabset{margin-top:-91px}}@media (max-width:801px){.portfolio-page-banner header #navbarSupportedContent .nav-link{color:#333}header.sample-header-page .navbar-collapse{box-shadow:0 0 5px 0 rgba(0,0,0,.1)}#banner .banner-text h1{font-size:30px;line-height:34px;padding-bottom:10px!important}#banner .banner-text{padding:32px 0}.navbar-dark .navbar-toggler{border:0}#banner .banner-text p>span{display:inline}.build-box{width:65%;margin:20px auto 0}#build-sac{height:auto;padding:30px 0;margin-bottom:0}.mobile-box{bottom:auto;text-align:center;padding:20px 0 0}#blog{padding:21px 0 15px}footer{font-size:11px;line-height:15px}#contact-form .heading1{margin-top:20px}#contact-form .form-box{padding:5px 35px 35px}.slid-box:before{top:48px;height:77px;transform:none}.navbar-collapse{background:#fff;position:absolute;top:100%;right:0;left:0;padding:20px;transition:0.5s;width:100%}#navbarSupportedContent .nav-link{color:#333;font-weight:600}.navbar-collapse ul li+li{border-top:solid 1px #ccc}#navbarSupportedContent .nav-link{padding:10px 20px}.navbar-toggler-icon{cursor:pointer}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link,.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:#006072!important}.collapse.show{right:0}.index_slider{display:none}#portfolio{height:auto;padding:67px 0}#portfolio .heading1{position:inherit;top:0;left:0;transform:inherit}.portfolio-slider{position:inherit;height:auto}.portfolio-accordion{display:block}.card button.btn-2{display:block;width:100%;text-align:left;margin:0;position:relative}.card .collapse:after{position:absolute;top:14px;right:20px;transform:rotate(44deg);width:12px;height:12px;border-right:solid 2px rgb(153,153,153);border-bottom:solid 2px rgb(153,153,153);content:"";transform:rotate(44deg);z-index:999}.collapse:not(.show){height:0}.card .collapse.show:after{transform:rotate(-133deg);top:19px}.card .collapse:not(.show){height:0;display:block}.card-header{padding:0;border-bottom:0}.card{margin-top:15px}.accordion>.card:first-of-type,.accordion>.card:not(:first-of-type):not(:last-of-type){border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.btn-link.focus,.btn-link:focus{text-decoration:none}.project-box .number-list{right:0;width:100%;bottom:auto;height:auto;z-index:999}.number-list ul li{width:25%;float:left;font-size:20px;padding:10px 0}.number-list ul li span{display:none}.number-list ul li+li:before{right:auto;width:1px;height:100%;bottom:0}.project-box .slider-default{padding:0 20px 20px;position:relative;height:0;left:0;right:0;width:100%;display:none}.project-box .slider-default.show{height:auto;opacity:1;display:block}.project-box{height:auto}.pooject-step{padding:20px 0 0}.project-box .slider-default .pooject-step{padding-bottom:50px}.project-box .slider-default:first-child .pooject-step,.project-box .slider-default:last-child .pooject-step{padding-bottom:0}.pooject-step h5{padding-top:20px!important}.flo-img{width:61%}.pinfo-img{width:100px;height:100px}#banner{clip-path:inherit}}@media (max-width:768px){.slid-box>div{background-size:100%;background-repeat:no-repeat}.for-desktop,.for-tablate,.for-mobile{display:none}.slid-box .for-laptop{margin:0 auto}#banner{height:545px}.slid-box{height:320px}.slid-box:before{display:none}.services-box{margin-top:8px}#banner2 .banner-text{padding:20px 0 200px;text-align:center!important}#banner2 .banner-text h1{font-size:20px;line-height:24px;margin-bottom:0}#banner2 .banner-text h1:before{height:1px;width:30px;left:50%;transform:translateX(-50%)}#banner2 .banner-text p{padding-top:10px!important}.flo-img{width:100%}.flo-img-relative{height:346px}.hot-air-balloon{left:20px}.hot-air-balloon6{left:50%;transform:translateX(-50%);width:43%}table.price-table{width:100%}.invoice-box form ul li.wpi_checkout_row{width:100%}.flo-img-relative{height:346px}.hot-air-balloon{left:20px}.hot-air-balloon6{left:50%;transform:translateX(-50%);width:43%}table.price-table{width:100%}.invoice-box form ul li.wpi_checkout_row{width:100%}table tfoot{width:auto}#banner2.portfolio-page-banner .banner-text{padding:36px 15px 111px;text-align:left!important;width:100%}}@media (max-width:600px){#banner{height:565px;clip-path:none}.scroll-animation>div a span{width:14px;height:14px}.banner-slider{bottom:52px}#banner p{margin-bottom:0!important}#industry-box{clip-path:none;padding:5px 0 20px}#industry-box .owl-stage-outer{padding:20px 0 17px}.tab-box{height:auto}#services{margin-top:0;padding:50px 0}#portfolio{clip-path:none;margin-top:0}.pooject-step ul li{padding:15px 10px}.slid-box .tree-im{right:0}.slid-box .for-laptop{left:auto}.slider-two .pooject-step ul li{width:100%}.tab-menu{left:237px;top:-233px;height:569px}.tab-slider li a{padding:59px 0}#banner2 .banner-text{padding:20px 0 163px}.flo-img-relative{height:310px}.about-text-box p.about-two-heading{font-size:30px}.tab-box{padding:0 20px 15px}.tab-menu{position:inherit;top:0;left:0;height:auto;transform:none;width:auto}.tab-slider li{transform:none;width:20%!important}.tab-slider li a span{display:block}.tab-slider li a{font-size:0;line-height:0;display:block;padding:10px}.slick-track,.slick-list{height:auto!important}.tab-slider button.slick-prev,.tab-slider button.slick-next{display:none!important}.tab-slider li:before{left:0;transform:translateY(-50%);height:60%;top:50%;width:1px;background:rgba(255,255,255,.4)}.tab-slider li:nth-child(6):before{display:none}.tab-slider li:nth-child(1),.tab-slider li:nth-child(2),.tab-slider li:nth-child(3),.tab-slider li:nth-child(4),.tab-slider li:nth-child(5),.tab-slider li:nth-child(11),.tab-slider li:nth-child(12),.tab-slider li:nth-child(13),.tab-slider li:nth-child(14),.tab-slider li:nth-child(15),.tab-slider li:nth-child(16),.tab-slider li:nth-child(17){display:none!important}.tab-slider{padding:0}.tab-menu{margin:0 -20px;border-radius:0}.tab-slider li a{padding:15px 0;width:86px}#testimonial-box .owl-carousel .owl-nav .owl-next{margin-right:0}#testimonial-box .owl-carousel .owl-nav .owl-prev{margin-left:0}}@media (max-width:480px){#banner .banner-text{padding:30px 20px}.invoice-box h2{font-size:22px}#banner .banner-text h1{font-size:18px;line-height:20px}#banner p{font-size:12px;line-height:15px;padding-top:10px!important;z-index:999;position:relative}.banner-text .btn-1{font:700 14px/39px "Lato",sans-serif;padding:0 13px;margin-top:15px}#industry-box .owl-carousel .owl-nav{top:45%!important;left:0px!important;right:0px!important}#industry-box .owl-carousel .owl-nav .owl-next{width:32px;height:32px;background:#239ec0}#industry-box .owl-carousel .owl-nav .owl-prev{width:32px;height:32px;background:#239ec0}#industry-box .owl-carousel .owl-nav .owl-next span{background:#28a5c5;border-bottom:solid 2px #ebf2f3;border-right:solid 2px #ebf2f3}#industry-box .owl-carousel .owl-nav .owl-prev span{background:#28a5c5;border-left:solid 2px #fff;border-top:solid 2px #fff}#banner{height:485px}.slid-box>div#arrows{top:40%}#banner .icon-box{top:89%;right:7px;z-index:999}#banner .icon-box ul:before,#banner .icon-box ul:after{height:35px}.navbar-brand{width:27%}.slid-box>div:nth-child(3){left:74%}.heading1 h1{font-size:20px;line-height:24px}.pooject-step ul{flex-wrap:wrap}.btn-2.big-btn{font-size:15px;line-height:39px;padding:0 15px}#build-sac{margin-bottom:0}#project-sec{padding:30px 0}.hot-air-balloon2,.hot-air-balloon{display:none}#banner2 .banner-text{padding:20px 0 139px}.hot-air-balloon6{width:54%}.flo-small-img{top:-16px;width:35px}.slid-box .for-laptop{width:350px;background-size:100%}.for-laptop-with{width:232px;margin:14px 58px 43px auto}.top-logo{width:110px}.tabset>label{padding:4px 8px;font-size:13px}.tab-slider li a{padding:15px 0;width:68px}.smFont{font-size:9px!important}}@media (max-width:375px){.navbar-brand{width:40%}.banner-slider{bottom:0}#banner{height:427px}.slid-box>div.tree-im{width:56px;top:25%}.slid-box>div#arrows{top:47%;left:5px}.slid-box:before{top:-9%;left:5px}.slid-box>div,.slid-box>div:nth-child(2){top:0}.banner-position{padding-bottom:25px}#industry-box{padding:55px 0 20px}.heading1 h1{font-size:21px;line-height:26px}.heading1 h1:before{width:35px}.heading1 p{font-size:12px}.btn-2{font-size:12px;line-height:30px;padding:0 15px}footer{clip-path:none;padding-top:50px}footer.other-footer{padding-top:0!important}#contact-form .form-box{margin-bottom:-60px;padding:5px 20px 10px}.build-box{width:100%}#industry-box .owl-carousel .owl-nav{top:45%!important;left:0px!important;right:0px!important}#industry-box .owl-carousel .owl-nav .owl-next{width:32px;height:32px;background:#239ec0}#industry-box .owl-carousel .owl-nav .owl-prev{width:32px;height:32px;background:#239ec0}#industry-box .owl-carousel .owl-nav .owl-next span{background:#28a5c5;border-bottom:solid 2px #ebf2f3;border-right:solid 2px #ebf2f3}#industry-box .owl-carousel .owl-nav .owl-prev span{background:#28a5c5;border-left:solid 2px #fff;border-top:solid 2px #fff}.slid-box{overflow-x:hidden}.for-laptop-with{width:196px;margin:13px 51px 25px auto}.slid-box .for-laptop{width:298px;background-size:100%;bottom:0}.slid-box .tree-im{display:none}#banner2 .banner-text p>span{display:inline}.hot-air-balloon6{width:66%}#inner-form .heading1 h1{font-size:20px;line-height:25px}.form-back{padding:25px}.form-div-box{padding:10px}.tabset{margin-top:-114px}}@media (max-width:375px){.tab-slider li a{width:58px}}@media (max-width:345px){.smFont{font-size:8px!important}}@media screen and (max-width:767px){.boxes-div{display:block;margin-top:16%}.heading-parallax{margin:25px 17px}#testimonial-box .owl-carousel .owl-nav{left:0;right:0;top:31%}#testimonial-box .owl-carousel .owl-nav .owl-prev,#testimonial-box .owl-carousel .owl-nav .owl-next{width:38px;height:38px}}@media only screen and (max-width:1024px) and (min-width:768px){.display-text{height:320px}.box-inside-pc h3{font-size:18px}.box-inside{padding:5% 5%}.box-inside h3{font-size:18px}.hover-box-small-para{font-size:14px}.parallax-one-bold-para{margin-bottom:5px}.btn-2{font:700 14px/36px "Lato",sans-serif}.boxes-div{margin-top:12%}}@media only screen and (max-width:1199px) and (min-width:1025px){.boxes-div{margin-top:9%}.display-text{height:360px}}@media only screen and (max-width:1024px) and (min-width:1024px){.boxes-div{margin-top:9%!important}}@media screen and (max-width:767px){.industry-inside-div{display:block}.industry-carousel-box{padding:15px 36px;margin:0 0 10px 0px!important}}@media only screen and (max-width:1024px) and (min-width:992px){.industry-carousel-box{padding:15px 10px}}@media only screen and (max-width:992px) and (min-width:768px){.industry-carousel-box{padding:10px 10px}}